<?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>69073</bug_id>
          
          <creation_ts>2011-09-29 01:49:18 -0700</creation_ts>
          <short_desc>[EFL] Change efl style parameter variables with WebKit coding Style.</short_desc>
          <delta_ts>2011-10-12 18:56:23 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>68209</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Gyuyoung Kim">gyuyoung.kim</reporter>
          <assigned_to name="Gyuyoung Kim">gyuyoung.kim</assigned_to>
          <cc>g.czajkowski</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>leandro</cc>
    
    <cc>l.slachciak</cc>
    
    <cc>lucas.de.marchi</cc>
    
    <cc>rakuco</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>475316</commentid>
    <comment_count>0</comment_count>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-09-29 01:49:18 -0700</bug_when>
    <thetext>As you know, EFL port has used one-letter parameter for public / private functions. But, this has be more difficult for other reviewers to review EFL patches as other efl coding style.

I would like to suggest two ideas for this bug.

1. Use meaningful variable instead of one-letter variable in both .h and .cpp files

2. Only use one-letter variable in public APIs definition. For example,
   
    ewk_view.h
        EAPI Eina_Bool    ewk_view_setting_scripts_can_close_windows_set(Evas_Object *o, Eina_Bool allow);
 
    ewk_view.cpp
        Eina_Bool ewk_view_setting_scripts_can_close_windows_set(Evas_Object* object, Eina_Bool allow)
        {
            EWK_VIEW_SD_GET_OR_RETURN(object, sd, EINA_FALSE);
            EWK_VIEW_PRIV_GET_OR_RETURN(sd, priv, EINA_FALSE);
            ...

I&apos;d like to listen you guys opinions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475416</commentid>
    <comment_count>1</comment_count>
    <who name="Raphael Kubo da Costa (:rakuco)">rakuco</who>
    <bug_when>2011-09-29 07:20:00 -0700</bug_when>
    <thetext>`Evas_Object* object&apos; isn&apos;t very meaningful IMO. What I&apos;m doing in DumpRenderTreeSupport is using a name which reflects the use of the given Evas_Object, such as `Evas_Object* ewkView&apos; or `Evas_Object* ewkFrame&apos;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475763</commentid>
    <comment_count>2</comment_count>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-09-29 17:08:28 -0700</bug_when>
    <thetext>Hmm, ewkFrame variable name was already landed in Bug 67114. I think this is not bad. How do you think about this ?

CC&apos;ing ryuan, Łukasz, Grzegorz.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475781</commentid>
    <comment_count>3</comment_count>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2011-09-29 17:49:17 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Hmm, ewkFrame variable name was already landed in Bug 67114. I think this is not bad. How do you think about this ?
&gt; 
&gt; CC&apos;ing ryuan, Łukasz, Grzegorz.

I agree with kubo&apos;s suggestion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>475843</commentid>
    <comment_count>4</comment_count>
    <who name="Lucas De Marchi">lucas.de.marchi</who>
    <bug_when>2011-09-29 19:49:48 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; `Evas_Object* object&apos; isn&apos;t very meaningful IMO. What I&apos;m doing in DumpRenderTreeSupport is using a name which reflects the use of the given Evas_Object, such as `Evas_Object* ewkView&apos; or `Evas_Object* ewkFrame&apos;.

seems good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478116</commentid>
    <comment_count>5</comment_count>
      <attachid>109731</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-10-04 19:23:35 -0700</bug_when>
    <thetext>Created attachment 109731
Prototype

I make a prototype patch for this bug. Major Changes are as below,

  1. Use ewkFrame instead of o in ewk_frame.cpp
  2. Use ewkView instead of o in ewk_view.cpp
  3. Use menu and item instead of o in ewk_contextmenu.cpp
  4. Use ewkTile instead of o in ewk_tile_xxx.cpp
  5. Use tile parameter name instead of t parameter in ewk_tile_xxx.cpp
  6. Run demarchi&apos;s script for ewk_tile_xxx.cpp files.
  7. Remove *void* parameter in ewk_tile_xxx.cpp&apos;s internal functions.
  
I think we have to change r, w and h with rect, width and height. But, I don&apos;t change them all in this prototype patch yet. If you guys agree with this changes, I will change them as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478526</commentid>
    <comment_count>6</comment_count>
      <attachid>109731</attachid>
    <who name="Lucas De Marchi">lucas.de.marchi</who>
    <bug_when>2011-10-05 11:19:49 -0700</bug_when>
    <thetext>Comment on attachment 109731
Prototype

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

Too big to be carefully reviewed. But it looks good to me. If you build this and it&apos;s still passing the same tests, I&apos;m ok with it.

&gt; Source/WebKit/efl/ewk/ewk_frame.cpp:471
&gt; -Eina_Bool ewk_frame_text_search(const Evas_Object* o, const char* string, Eina_Bool case_sensitive, Eina_Bool forward, Eina_Bool wrap)
&gt; +Eina_Bool ewk_frame_text_search(const Evas_Object* ewkFrame, const char* string, Eina_Bool case_sensitive, Eina_Bool forward, Eina_Bool wrap)

Unrelated, but &quot;string&quot; is a bad name.

&gt; Source/WebKit/efl/ewk/ewk_tiled_backing_store.cpp:49
&gt; -    Ewk_Tile *tile;
&gt; +    Ewk_Tile* tile;

Humn... this was not done before because these files were .c

It&apos;s fine to do it now, in the same patch. Otherwise this coding-style fixes will never end.

&gt; Source/WebKit/efl/ewk/ewk_tiled_backing_store.cpp:816
&gt; -    cols = 1 + (int)ceil((float)w / (float)tw);
&gt; -    rows = 1 + (int)ceil((float)h / (float)th);
&gt; +    cols = 1 + (int)ceil((float)width / (float)tw);
&gt; +    rows = 1 + (int)ceil((float)height / (float)th);

It seems like we should apply the past fixes now that this file is cpp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478530</commentid>
    <comment_count>7</comment_count>
    <who name="Raphael Kubo da Costa (:rakuco)">rakuco</who>
    <bug_when>2011-10-05 11:21:45 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 109731 [details])
&gt; &gt; Source/WebKit/efl/ewk/ewk_frame.cpp:471
&gt; &gt; -Eina_Bool ewk_frame_text_search(const Evas_Object* o, const char* string, Eina_Bool case_sensitive, Eina_Bool forward, Eina_Bool wrap)
&gt; &gt; +Eina_Bool ewk_frame_text_search(const Evas_Object* ewkFrame, const char* string, Eina_Bool case_sensitive, Eina_Bool forward, Eina_Bool wrap)
&gt; 
&gt; Unrelated, but &quot;string&quot; is a bad name.

&quot;string&quot; should not be used at all. Sooner or later it will end up conflicting with std::string.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478864</commentid>
    <comment_count>8</comment_count>
      <attachid>109900</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-10-05 18:50:55 -0700</bug_when>
    <thetext>Created attachment 109900
Prototype

Update this prototype fixed with you guys pointed out.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>478874</commentid>
    <comment_count>9</comment_count>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-10-05 19:05:46 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Created an attachment (id=109900) [details]
&gt; Prototype
&gt; 
&gt; Update this prototype fixed with you guys pointed out.

I replace string with text.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479145</commentid>
    <comment_count>10</comment_count>
    <who name="Raphael Kubo da Costa (:rakuco)">rakuco</who>
    <bug_when>2011-10-06 07:17:07 -0700</bug_when>
    <thetext>I doubt anyone will ever read this giant patch in its entirety. The only thing I could notice is that the (*cb) -&gt; (* cb) change isn&apos;t really correct (if you&apos;re really in the mood, you could rename cb to callback, by the way).

Other than that, I can only guess it&apos;s OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479911</commentid>
    <comment_count>11</comment_count>
      <attachid>110118</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-10-07 03:10:18 -0700</bug_when>
    <thetext>Created attachment 110118
Prototype</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479919</commentid>
    <comment_count>12</comment_count>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-10-07 03:51:56 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; I doubt anyone will ever read this giant patch in its entirety. The only thing I could notice is that the (*cb) -&gt; (* cb) change isn&apos;t really correct (if you&apos;re really in the mood, you could rename cb to callback, by the way).
&gt; 
&gt; Other than that, I can only guess it&apos;s OK.

Ok, I modify (* cb) with (*cb).  In addition, I change meaningless parameters of function with meaning&apos;s. Because, there are too many meaningless parameters in function parameters. I couldn&apos;t ignore them. However, this prototype only focuses on function&apos;s parameters. I think local variables and &quot;_&quot;(underbar) parameter variables should be changed by new bugs.

  1. Use ewkFrame instead of o in ewk_frame.cpp
  2. Use ewkView instead of o in ewk_view.cpp
  3. Use menu and item instead of o in ewk_contextmenu.cpp
  4. Use ewkTile instead of o in ewk_tile_xxx.cpp
  5. Use tile parameter name instead of t parameter in ewk_tile_xxx.cpp
  6. Use smartData instead of sd for Ewk_XXXXX_Smart_Data.
  7. Use width, height instead of w, h.
  8. Use xxxEvent instead of ev for event. (e.g. downEvent, upEvent, wheelEvent)
  9. Use scrollX, scrollY, scrollWidth, scrollHeight, centerX, centerY instead of sx, xy, sw, sh, cx, cy,
  10. Use tileUnusedCache instead of tuc in tiled backing store. 
  11. Run demarchi&apos;s script for ewk_tile_xxx.cpp files.
  12. Remove *void* parameter in ewk_tile_xxx.cpp&apos;s internal functions.
 
I&apos;m not also sure who can review this *giant* patch. But, Antonio recommended that we need to change coding style as soon as possible despite patch is too huge.

CC&apos;ing Antonio, 
Antonio, is this huge patch able to be reviewed ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479955</commentid>
    <comment_count>13</comment_count>
    <who name="Raphael Kubo da Costa (:rakuco)">rakuco</who>
    <bug_when>2011-10-07 05:58:24 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt;   1. Use ewkFrame instead of o in ewk_frame.cpp
&gt;   2. Use ewkView instead of o in ewk_view.cpp
&gt;   3. Use menu and item instead of o in ewk_contextmenu.cpp
&gt;   4. Use ewkTile instead of o in ewk_tile_xxx.cpp
&gt;   5. Use tile parameter name instead of t parameter in ewk_tile_xxx.cpp
&gt;   6. Use smartData instead of sd for Ewk_XXXXX_Smart_Data.
&gt;   7. Use width, height instead of w, h.
&gt;   8. Use xxxEvent instead of ev for event. (e.g. downEvent, upEvent, wheelEvent)
&gt;   9. Use scrollX, scrollY, scrollWidth, scrollHeight, centerX, centerY instead of sx, xy, sw, sh, cx, cy,
&gt;   10. Use tileUnusedCache instead of tuc in tiled backing store. 
&gt;   11. Run demarchi&apos;s script for ewk_tile_xxx.cpp files.
&gt;   12. Remove *void* parameter in ewk_tile_xxx.cpp&apos;s internal functions.
&gt; 
&gt; I&apos;m not also sure who can review this *giant* patch. But, Antonio recommended that we need to change coding style as soon as possible despite patch is too huge.

It might require some effort, but perhaps having a separate patch for each of the issues you listed above might be the only humanly possible way to get these changes reviewed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480004</commentid>
    <comment_count>14</comment_count>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2011-10-07 08:01:17 -0700</bug_when>
    <thetext>guys, since it introduces zaro funcionality changes, we can get it in all at once, by rubber stamping it.

no need to spend weeks on it ;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480466</commentid>
    <comment_count>15</comment_count>
      <attachid>110251</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-10-07 21:17:21 -0700</bug_when>
    <thetext>Created attachment 110251
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480472</commentid>
    <comment_count>16</comment_count>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-10-07 21:27:48 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; guys, since it introduces zaro funcionality changes, we can get it in all at once, by rubber stamping it.
&gt; 
&gt; no need to spend weeks on it ;)

In .cpp files,  I try to change efl style parameters with webkit style. However, I couldn&apos;t near to change local variables together with this patch, because of too giant changes. I will file new bug for local variables as soon as this patch is landed.

Majors changes are listed below,
 
  - Use ewkFrame instead of o parameter in ewk_frame.cpp.
  - Use ewkView instead of o parameter in ewk_view.cpp.
  - Use menu and item instead of o parameter in ewk_contextmenu.cpp.
  - Use ewkTile instead of o parameter in ewk_tile_xxx.cpp.
  - Use tile parameter name instead of t parameter in ewk_tile_xxx.cpp.
  - Use smartData instead of sd parameter for Ewk_XXXX_Smart_Data struct.
  - Use width, height instead of w, h parameter.
  - Use xxxEvent instead of ev parameter for event. (e.g. downEvent, upEvent, wheelEvent)
   - Use scrollX, scrollY, scrollWidth, scrollHeight, centerX, centerY, deltaX, deltaY instead of sx, xy, sw, sh, cx, cy, dx, dy.
   - Use tileUnusedCache instead of tuc parameter in tiled backing store.
   - Use red, green, blue and alpha instead of r,g,b,a.
   - Remove &quot;_&quot; from parameter variable.
   - Run demarchi&apos;s coding style script for ewk_tile_xxx.cpp files.
   - Remove *void* parameter in ewk_tile_xxx.cpp&apos;s internal functions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480474</commentid>
    <comment_count>17</comment_count>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-10-07 21:38:41 -0700</bug_when>
    <thetext>I will notify webkit-efl mailing list of this changes after landing this patch. In addition, I will prepare coding style guideline for WebKit EFL port after finishing this coding style change work. Then, I will write it to EFLWebKit wiki page.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481423</commentid>
    <comment_count>18</comment_count>
    <who name="Raphael Kubo da Costa (:rakuco)">rakuco</who>
    <bug_when>2011-10-10 20:56:56 -0700</bug_when>
    <thetext>The patch is getting bigger and bigger ;)

Some variables still have EFL-style names (w, cw, dx, etc) and some changes might not be needed (foo_bar -&gt; fooBar). But I&apos;m fine if this is committed as-is too, it&apos;s just impossible to properly review such a giant patch :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>481428</commentid>
    <comment_count>19</comment_count>
      <attachid>110251</attachid>
    <who name="Raphael Kubo da Costa (:rakuco)">rakuco</who>
    <bug_when>2011-10-10 21:19:24 -0700</bug_when>
    <thetext>Comment on attachment 110251
Patch

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

I&apos;ve pointed out some issues I found while randomly looking at the patch.

&gt; Source/WebKit/efl/ewk/ewk_js.cpp:700
&gt; +Eina_Hash* ewk_js_object_properties_get(const Ewk_JS_Object* object)

Parameters which are not used should just have their names removed.

&gt; Source/WebKit/efl/ewk/ewk_js.cpp:705
&gt; +const char* ewk_js_object_name_get(const Ewk_JS_Object* object)

Ditto.

&gt; Source/WebKit/efl/ewk/ewk_js.cpp:710
&gt; +void ewk_js_variant_free(Ewk_JS_Variant* variant)

Ditto.

&gt; Source/WebKit/efl/ewk/ewk_js.cpp:714
&gt; +void ewk_js_variant_array_free(Ewk_JS_Variant* variant, int count)

Ditto.

&gt; Source/WebKit/efl/ewk/ewk_js.cpp:718
&gt; +Ewk_JS_Object* ewk_js_object_new(const Ewk_JS_Class_Meta* metaClass)

Ditto.

&gt; Source/WebKit/efl/ewk/ewk_js.cpp:723
&gt; +void ewk_js_object_free(Ewk_JS_Object* object)

Ditto.

&gt; Source/WebKit/efl/ewk/ewk_js.cpp:727
&gt; +Eina_Bool ewk_js_object_invoke(Ewk_JS_Object* object, Ewk_JS_Variant* args, int argCount, Ewk_JS_Variant* result)

Ditto.

&gt; Source/WebKit/efl/ewk/ewk_js.cpp:732
&gt; +Ewk_JS_Object_Type ewk_js_object_type_get(Ewk_JS_Object* object)

Ditto.

&gt; Source/WebKit/efl/ewk/ewk_js.cpp:737
&gt; +void ewk_js_object_type_set(Ewk_JS_Object* object, Ewk_JS_Object_Type type)

Ditto.

&gt; Source/WebKit/efl/ewk/ewk_tiled_backing_store.cpp:98
&gt; -        Eina_Bool suspend:1;
&gt; +        Eina_Bool suspend : 1;

Hmm, I think this is not needed.

&gt; Source/WebKit/efl/ewk/ewk_tiled_backing_store.cpp:844
&gt; -        Eina_Inlist **start, **end;
&gt; +        Eina_Inlist** start, ** end;
&gt;          start = priv-&gt;view.items + old_rows;
&gt;          end = priv-&gt;view.items + rows;

Funny pointer placement, the variables can be declared and instantiated at the same time.

&gt; Source/WebKit/efl/ewk/ewk_tiled_backing_store.cpp:849
&gt; -                (priv, start, 0, cols);
&gt; +                    (priv, start, 0, cols);

Unrelated?

&gt; Source/WebKit/efl/ewk/ewk_tiled_backing_store.cpp:861
&gt; -        Eina_Inlist **start, **end;
&gt; +        Eina_Inlist** start, **end;

Ditto about funny pointer placement.

&gt; Source/WebKit/efl/ewk/ewk_tiled_backing_store.cpp:869
&gt; -                    (priv, start, old_cols, todo);
&gt; +                        (priv, start, old_cols, todo);

Unrelated?

&gt; Source/WebKit/efl/ewk/ewk_tiled_model.cpp:142
&gt; +static inline void _ewk_tile_account_allocated(const Ewk_Tile* tile) { }
&gt; +static inline void _ewk_tile_account_freed(const Ewk_Tile* tile) { }

It makes sense to just remove the parameter name here.

&gt; Source/WebKit/efl/ewk/ewk_tiled_model.cpp:153
&gt; +    uint32_t* dst32, * dst32_end, c1;
&gt; +    uint64_t* dst64, * dst64_end, c2;

The pointer declarations look funny now. How about declaring and initializing the values at the same time?

&gt; Source/WebKit/efl/ewk/ewk_view.cpp:598
&gt; -    priv-&gt;page_settings-&gt;setDefaultFixedFontSize(12);
&gt; -    priv-&gt;page_settings-&gt;setDefaultFontSize(16);
&gt; +    priv-&gt;page_settings-&gt;setDefaultFixedFontSize(10);
&gt; +    priv-&gt;page_settings-&gt;setDefaultFontSize(13);

Unrelated?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>482129</commentid>
    <comment_count>20</comment_count>
      <attachid>110624</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-10-11 18:23:49 -0700</bug_when>
    <thetext>Created attachment 110624
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>482137</commentid>
    <comment_count>21</comment_count>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-10-11 18:29:17 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; (From update of attachment 110251 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=110251&amp;action=review
&gt; 
&gt; I&apos;ve pointed out some issues I found while randomly looking at the patch.
&gt; 
&gt; &gt; Source/WebKit/efl/ewk/ewk_js.cpp:700
&gt; &gt; +Eina_Hash* ewk_js_object_properties_get(const Ewk_JS_Object* object)
&gt; 
&gt; Parameters which are not used should just have their names removed.
&gt; 

I modify object variable with jsObject. This is more clear and similar to ewk_view and ewk_frame&apos;s variable change.

&gt; &gt; Source/WebKit/efl/ewk/ewk_js.cpp:710
&gt; &gt; +void ewk_js_variant_free(Ewk_JS_Variant* variant)
&gt; 
&gt; Ditto.

I modify variant with jsVariant.

&gt; &gt; Source/WebKit/efl/ewk/ewk_tiled_backing_store.cpp:98
&gt; &gt; -        Eina_Bool suspend:1;
&gt; &gt; +        Eina_Bool suspend : 1;
&gt; 
&gt; Hmm, I think this is not needed.

This change comes from Demarchi script. The script was already adjusted to other .cpp files. I think ewk_tiled_backing_store also needs to have this style. 

&gt; &gt; Source/WebKit/efl/ewk/ewk_tiled_backing_store.cpp:844
&gt; &gt; -        Eina_Inlist **start, **end;
&gt; &gt; +        Eina_Inlist** start, ** end;
&gt; &gt;          start = priv-&gt;view.items + old_rows;
&gt; &gt;          end = priv-&gt;view.items + rows;
&gt; 
&gt; Funny pointer placement, the variables can be declared and instantiated at the same time.


As mentioned in Comment #16, this patch only focuses on variable parameter. But, ewk_tiled_xxx files are more changed by Demarchi coding style script additionally. Although above changes come from demarchi script, I modify them in this patch together.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>482166</commentid>
    <comment_count>22</comment_count>
      <attachid>110629</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-10-11 19:38:45 -0700</bug_when>
    <thetext>Created attachment 110629
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>482892</commentid>
    <comment_count>23</comment_count>
    <who name="Raphael Kubo da Costa (:rakuco)">rakuco</who>
    <bug_when>2011-10-12 17:29:30 -0700</bug_when>
    <thetext>I don&apos;t have much to add to my previous comments. I wonder if it doesn&apos;t make sense to run uncrustify in a separate patch, so this one only changes the function parameter names.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>482920</commentid>
    <comment_count>24</comment_count>
      <attachid>110629</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-12 18:22:17 -0700</bug_when>
    <thetext>Comment on attachment 110629
Patch

Clearing flags on attachment: 110629

Committed r97329: &lt;http://trac.webkit.org/changeset/97329&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>482921</commentid>
    <comment_count>25</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-12 18:22:25 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109731</attachid>
            <date>2011-10-04 19:23:35 -0700</date>
            <delta_ts>2011-10-05 18:50:55 -0700</delta_ts>
            <desc>Prototype</desc>
            <filename>patch-prototype.patch</filename>
            <type>text/plain</type>
            <size>302516</size>
            <attacher name="Gyuyoung Kim">gyuyoung.kim</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfY29udGV4dG1lbnUuY3BwIGIv
U291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19jb250ZXh0bWVudS5jcHAKaW5kZXggYWExNjE5Zi4u
NjIxYzc5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19jb250ZXh0bWVu
dS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19jb250ZXh0bWVudS5jcHAKQEAg
LTkyLDExICs5MiwxMSBAQCBFaW5hX0Jvb2wgZXdrX2NvbnRleHRfbWVudV9kZXN0cm95KEV3a19D
b250ZXh0X01lbnUqIG1lbnUpCiAjZW5kaWYKIH0KIAotY29uc3QgRWluYV9MaXN0KiBld2tfY29u
dGV4dF9tZW51X2l0ZW1fbGlzdF9nZXQoY29uc3QgRXdrX0NvbnRleHRfTWVudSogbykKK2NvbnN0
IEVpbmFfTGlzdCogZXdrX2NvbnRleHRfbWVudV9pdGVtX2xpc3RfZ2V0KGNvbnN0IEV3a19Db250
ZXh0X01lbnUqIG1lbnUpCiB7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKG8s
IDApOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChtZW51LCAwKTsKIAotICAg
IHJldHVybiBvLT5pdGVtczsKKyAgICByZXR1cm4gbWVudS0+aXRlbXM7CiB9CiAKIEV3a19Db250
ZXh0X01lbnVfSXRlbSogZXdrX2NvbnRleHRfbWVudV9pdGVtX25ldyhFd2tfQ29udGV4dF9NZW51
X0l0ZW1fVHlwZSB0eXBlLApAQCAtMTQyLDY4ICsxNDIsNjggQEAgdm9pZCBld2tfY29udGV4dF9t
ZW51X2l0ZW1fZnJlZShFd2tfQ29udGV4dF9NZW51X0l0ZW0qIGl0ZW0pCiAgICAgZnJlZShpdGVt
KTsKIH0KIAotRXdrX0NvbnRleHRfTWVudV9JdGVtX1R5cGUgZXdrX2NvbnRleHRfbWVudV9pdGVt
X3R5cGVfZ2V0KGNvbnN0IEV3a19Db250ZXh0X01lbnVfSXRlbSogbykKK0V3a19Db250ZXh0X01l
bnVfSXRlbV9UeXBlIGV3a19jb250ZXh0X21lbnVfaXRlbV90eXBlX2dldChjb25zdCBFd2tfQ29u
dGV4dF9NZW51X0l0ZW0qIGl0ZW0pCiB7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5f
VkFMKG8sIEVXS19BQ1RJT05fVFlQRSk7Ci0gICAgcmV0dXJuIG8tPnR5cGU7CisgICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGl0ZW0sIEVXS19BQ1RJT05fVFlQRSk7CisgICAgcmV0
dXJuIGl0ZW0tPnR5cGU7CiB9CiAKLUVpbmFfQm9vbCBld2tfY29udGV4dF9tZW51X2l0ZW1fdHlw
ZV9zZXQoRXdrX0NvbnRleHRfTWVudV9JdGVtKiBvLCBFd2tfQ29udGV4dF9NZW51X0l0ZW1fVHlw
ZSB0eXBlKQorRWluYV9Cb29sIGV3a19jb250ZXh0X21lbnVfaXRlbV90eXBlX3NldChFd2tfQ29u
dGV4dF9NZW51X0l0ZW0qIGl0ZW0sIEV3a19Db250ZXh0X01lbnVfSXRlbV9UeXBlIHR5cGUpCiB7
Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKG8sIEVJTkFfRkFMU0UpOwotICAg
IG8tPnR5cGUgPSB0eXBlOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChpdGVt
LCBFSU5BX0ZBTFNFKTsKKyAgICBpdGVtLT50eXBlID0gdHlwZTsKICAgICByZXR1cm4gRUlOQV9U
UlVFOwogfQogCi1Fd2tfQ29udGV4dF9NZW51X0FjdGlvbiBld2tfY29udGV4dF9tZW51X2l0ZW1f
YWN0aW9uX2dldChjb25zdCBFd2tfQ29udGV4dF9NZW51X0l0ZW0qIG8pCitFd2tfQ29udGV4dF9N
ZW51X0FjdGlvbiBld2tfY29udGV4dF9tZW51X2l0ZW1fYWN0aW9uX2dldChjb25zdCBFd2tfQ29u
dGV4dF9NZW51X0l0ZW0qIGl0ZW0pCiB7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5f
VkFMKG8sIEVXS19DT05URVhUX01FTlVfSVRFTV9UQUdfTk9fQUNUSU9OKTsKLSAgICByZXR1cm4g
by0+YWN0aW9uOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChpdGVtLCBFV0tf
Q09OVEVYVF9NRU5VX0lURU1fVEFHX05PX0FDVElPTik7CisgICAgcmV0dXJuIGl0ZW0tPmFjdGlv
bjsKIH0KIAotRWluYV9Cb29sIGV3a19jb250ZXh0X21lbnVfaXRlbV9hY3Rpb25fc2V0KEV3a19D
b250ZXh0X01lbnVfSXRlbSogbywgRXdrX0NvbnRleHRfTWVudV9BY3Rpb24gYWN0aW9uKQorRWlu
YV9Cb29sIGV3a19jb250ZXh0X21lbnVfaXRlbV9hY3Rpb25fc2V0KEV3a19Db250ZXh0X01lbnVf
SXRlbSogaXRlbSwgRXdrX0NvbnRleHRfTWVudV9BY3Rpb24gYWN0aW9uKQogewotICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChvLCBFSU5BX0ZBTFNFKTsKLSAgICBvLT5hY3Rpb24g
PSBhY3Rpb247CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGl0ZW0sIEVJTkFf
RkFMU0UpOworICAgIGl0ZW0tPmFjdGlvbiA9IGFjdGlvbjsKICAgICByZXR1cm4gRUlOQV9UUlVF
OwogfQogCi1jb25zdCBjaGFyKiBld2tfY29udGV4dF9tZW51X2l0ZW1fdGl0bGVfZ2V0KGNvbnN0
IEV3a19Db250ZXh0X01lbnVfSXRlbSogbykKK2NvbnN0IGNoYXIqIGV3a19jb250ZXh0X21lbnVf
aXRlbV90aXRsZV9nZXQoY29uc3QgRXdrX0NvbnRleHRfTWVudV9JdGVtKiBpdGVtKQogewotICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChvLCAwKTsKLSAgICByZXR1cm4gby0+dGl0
bGU7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGl0ZW0sIDApOworICAgIHJl
dHVybiBpdGVtLT50aXRsZTsKIH0KIAotY29uc3QgY2hhciogZXdrX2NvbnRleHRfbWVudV9pdGVt
X3RpdGxlX3NldChFd2tfQ29udGV4dF9NZW51X0l0ZW0qIG8sIGNvbnN0IGNoYXIqIHRpdGxlKQor
Y29uc3QgY2hhciogZXdrX2NvbnRleHRfbWVudV9pdGVtX3RpdGxlX3NldChFd2tfQ29udGV4dF9N
ZW51X0l0ZW0qIGl0ZW0sIGNvbnN0IGNoYXIqIHRpdGxlKQogewotICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOX1ZBTChvLCAwKTsKLSAgICBlaW5hX3N0cmluZ3NoYXJlX3JlcGxhY2UoJm8t
PnRpdGxlLCB0aXRsZSk7Ci0gICAgcmV0dXJuIG8tPnRpdGxlOworICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOX1ZBTChpdGVtLCAwKTsKKyAgICBlaW5hX3N0cmluZ3NoYXJlX3JlcGxhY2Uo
Jml0ZW0tPnRpdGxlLCB0aXRsZSk7CisgICAgcmV0dXJuIGl0ZW0tPnRpdGxlOwogfQogCi1FaW5h
X0Jvb2wgZXdrX2NvbnRleHRfbWVudV9pdGVtX2NoZWNrZWRfZ2V0KGNvbnN0IEV3a19Db250ZXh0
X01lbnVfSXRlbSogbykKK0VpbmFfQm9vbCBld2tfY29udGV4dF9tZW51X2l0ZW1fY2hlY2tlZF9n
ZXQoY29uc3QgRXdrX0NvbnRleHRfTWVudV9JdGVtKiBpdGVtKQogewotICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOX1ZBTChvLCBFSU5BX0ZBTFNFKTsKLSAgICByZXR1cm4gby0+Y2hlY2tl
ZDsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoaXRlbSwgRUlOQV9GQUxTRSk7
CisgICAgcmV0dXJuIGl0ZW0tPmNoZWNrZWQ7CiB9CiAKLUVpbmFfQm9vbCBld2tfY29udGV4dF9t
ZW51X2l0ZW1fY2hlY2tlZF9zZXQoRXdrX0NvbnRleHRfTWVudV9JdGVtKiBvLCBFaW5hX0Jvb2wg
Y2hlY2tlZCkKK0VpbmFfQm9vbCBld2tfY29udGV4dF9tZW51X2l0ZW1fY2hlY2tlZF9zZXQoRXdr
X0NvbnRleHRfTWVudV9JdGVtKiBpdGVtLCBFaW5hX0Jvb2wgY2hlY2tlZCkKIHsKLSAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwobywgRUlOQV9GQUxTRSk7Ci0gICAgby0+Y2hlY2tl
ZCA9IGNoZWNrZWQ7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGl0ZW0sIEVJ
TkFfRkFMU0UpOworICAgIGl0ZW0tPmNoZWNrZWQgPSBjaGVja2VkOwogICAgIHJldHVybiBFSU5B
X1RSVUU7CiB9CiAKLUVpbmFfQm9vbCBld2tfY29udGV4dF9tZW51X2l0ZW1fZW5hYmxlZF9nZXQo
Y29uc3QgRXdrX0NvbnRleHRfTWVudV9JdGVtKiBvKQorRWluYV9Cb29sIGV3a19jb250ZXh0X21l
bnVfaXRlbV9lbmFibGVkX2dldChjb25zdCBFd2tfQ29udGV4dF9NZW51X0l0ZW0qIGl0ZW0pCiB7
Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKG8sIEVJTkFfRkFMU0UpOwotICAg
IHJldHVybiBvLT5lbmFibGVkOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChp
dGVtLCBFSU5BX0ZBTFNFKTsKKyAgICByZXR1cm4gaXRlbS0+ZW5hYmxlZDsKIH0KIAotRWluYV9C
b29sIGV3a19jb250ZXh0X21lbnVfaXRlbV9lbmFibGVkX3NldChFd2tfQ29udGV4dF9NZW51X0l0
ZW0qIG8sIEVpbmFfQm9vbCBlbmFibGVkKQorRWluYV9Cb29sIGV3a19jb250ZXh0X21lbnVfaXRl
bV9lbmFibGVkX3NldChFd2tfQ29udGV4dF9NZW51X0l0ZW0qIGl0ZW0sIEVpbmFfQm9vbCBlbmFi
bGVkKQogewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChvLCBFSU5BX0ZBTFNF
KTsKLSAgICBvLT5lbmFibGVkID0gZW5hYmxlZDsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTl9WQUwoaXRlbSwgRUlOQV9GQUxTRSk7CisgICAgaXRlbS0+ZW5hYmxlZCA9IGVuYWJsZWQ7
CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIApAQCAtMjU2LDExICsyNTYsMTEgQEAgRXdrX0Nv
bnRleHRfTWVudSogZXdrX2NvbnRleHRfbWVudV9uZXcoRXZhc19PYmplY3QqIHZpZXcsIFdlYkNv
cmU6OkNvbnRleHRNZW51Q28KICAqIEBzZWUgZXdrX2NvbnRleHRfbWVudV91bnJlZgogICogQHNl
ZSBld2tfY29udGV4dF9tZW51X2Rlc3Ryb3kKICAqLwotRWluYV9Cb29sIGV3a19jb250ZXh0X21l
bnVfZnJlZShFd2tfQ29udGV4dF9NZW51KiBvKQorRWluYV9Cb29sIGV3a19jb250ZXh0X21lbnVf
ZnJlZShFd2tfQ29udGV4dF9NZW51KiBtZW51KQogewotICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOX1ZBTChvLCBFSU5BX0ZBTFNFKTsKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFj
a19jYWxsKG8tPnZpZXcsICJjb250ZXh0bWVudSxmcmVlIiwgbyk7Ci0gICAgZXdrX2NvbnRleHRf
bWVudV91bnJlZihvKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwobWVudSwg
RUlOQV9GQUxTRSk7CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChtZW51LT52
aWV3LCAiY29udGV4dG1lbnUsZnJlZSIsIG1lbnUpOworICAgIGV3a19jb250ZXh0X21lbnVfdW5y
ZWYobWVudSk7CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIApAQCAtMjc1LDcgKzI3NSw3IEBA
IEVpbmFfQm9vbCBld2tfY29udGV4dF9tZW51X2ZyZWUoRXdrX0NvbnRleHRfTWVudSogbykKICAq
CiAgKiBAc2VlIGV3a19jb250ZXh0X21lbnVfaXRlbV9uZXcKICAqLwotdm9pZCBld2tfY29udGV4
dF9tZW51X2l0ZW1fYXBwZW5kKEV3a19Db250ZXh0X01lbnUqIG8sIFdlYkNvcmU6OkNvbnRleHRN
ZW51SXRlbSYgY29yZSkKK3ZvaWQgZXdrX2NvbnRleHRfbWVudV9pdGVtX2FwcGVuZChFd2tfQ29u
dGV4dF9NZW51KiBtZW51LCBXZWJDb3JlOjpDb250ZXh0TWVudUl0ZW0mIGNvcmUpCiB7CiAgICAg
RXdrX0NvbnRleHRfTWVudV9JdGVtX1R5cGUgdHlwZSA9IHN0YXRpY19jYXN0PEV3a19Db250ZXh0
X01lbnVfSXRlbV9UeXBlPihjb3JlLnR5cGUoKSk7CiAgICAgRXdrX0NvbnRleHRfTWVudV9BY3Rp
b24gYWN0aW9uID0gc3RhdGljX2Nhc3Q8RXdrX0NvbnRleHRfTWVudV9BY3Rpb24+KGNvcmUuYWN0
aW9uKCkpOwpAQCAtMjg1LDggKzI4NSw4IEBAIHZvaWQgZXdrX2NvbnRleHRfbWVudV9pdGVtX2Fw
cGVuZChFd2tfQ29udGV4dF9NZW51KiBvLCBXZWJDb3JlOjpDb250ZXh0TWVudUl0ZW0mCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZS5lbmFibGVkKCkpOwog
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKG1lbnVfaXRlbSk7CiAKLSAgICBvLT5pdGVt
cyA9IGVpbmFfbGlzdF9hcHBlbmQoby0+aXRlbXMsIG1lbnVfaXRlbSk7Ci0gICAgZXZhc19vYmpl
Y3Rfc21hcnRfY2FsbGJhY2tfY2FsbChvLT52aWV3LCAiY29udGV4dG1lbnUsaXRlbSxhcHBlbmRl
ZCIsIG8pOworICAgIG1lbnUtPml0ZW1zID0gZWluYV9saXN0X2FwcGVuZChtZW51LT5pdGVtcywg
bWVudV9pdGVtKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKG1lbnUtPnZp
ZXcsICJjb250ZXh0bWVudSxpdGVtLGFwcGVuZGVkIiwgbWVudSk7CiB9CiAKIC8qKgpAQCAtMzAx
LDEyICszMDEsMTIgQEAgdm9pZCBld2tfY29udGV4dF9tZW51X2l0ZW1fYXBwZW5kKEV3a19Db250
ZXh0X01lbnUqIG8sIFdlYkNvcmU6OkNvbnRleHRNZW51SXRlbSYKICAqCiAgKiBAc2VlIGV3a19j
b250ZXh0X21lbnVfaXRlbV9saXN0X2dldAogICovCi1Fd2tfQ29udGV4dF9NZW51KiBld2tfY29u
dGV4dF9tZW51X2N1c3RvbV9nZXQoY29uc3QgRXdrX0NvbnRleHRfTWVudSogbykKK0V3a19Db250
ZXh0X01lbnUqIGV3a19jb250ZXh0X21lbnVfY3VzdG9tX2dldChjb25zdCBFd2tfQ29udGV4dF9N
ZW51KiBtZW51KQogewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChvLCAwKTsK
KyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwobWVudSwgMCk7CiAKLSAgICBldmFz
X29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKG8tPnZpZXcsICJjb250ZXh0bWVudSxjdXN0b21p
emUiLCBvLT5pdGVtcyk7Ci0gICAgcmV0dXJuIG87CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2Fs
bGJhY2tfY2FsbChtZW51LT52aWV3LCAiY29udGV4dG1lbnUsY3VzdG9taXplIiwgbWVudS0+aXRl
bXMpOworICAgIHJldHVybiBtZW51OwogfQogCiAvKioKQEAgLTMxNiwxMSArMzE2LDExIEBAIEV3
a19Db250ZXh0X01lbnUqIGV3a19jb250ZXh0X21lbnVfY3VzdG9tX2dldChjb25zdCBFd2tfQ29u
dGV4dF9NZW51KiBvKQogICoKICAqIEBwYXJhbSBvIHRoZSBjb250ZXh0IG1lbnUgb2JqZWN0CiAg
Ki8KLXZvaWQgZXdrX2NvbnRleHRfbWVudV9zaG93KGNvbnN0IEV3a19Db250ZXh0X01lbnUqIG8p
Cit2b2lkIGV3a19jb250ZXh0X21lbnVfc2hvdyhjb25zdCBFd2tfQ29udGV4dF9NZW51KiBtZW51
KQogewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKG8pOworICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOKG1lbnUpOwogCi0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tf
Y2FsbChvLT52aWV3LCAiY29udGV4dG1lbnUsc2hvdyIsIG8pOworICAgIGV2YXNfb2JqZWN0X3Nt
YXJ0X2NhbGxiYWNrX2NhbGwobWVudS0+dmlldywgImNvbnRleHRtZW51LHNob3ciLCBtZW51KTsK
IH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2ZyYW1l
LmNwcCBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfZnJhbWUuY3BwCmluZGV4IGJjOGY4YWUu
Ljc0MDMyZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfZnJhbWUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfZnJhbWUuY3BwCkBAIC04Niw1MyArODYs
NTMgQEAgc3RydWN0IEVpbmFfSXRlcmF0b3JfRXdrX0ZyYW1lIHsKIH07CiAKICNpZm5kZWYgRVdL
X1RZUEVfQ0hFQ0sKLSNkZWZpbmUgRVdLX0ZSQU1FX1RZUEVfQ0hFQ0sobywgLi4uKSBkbyB7IH0g
d2hpbGUgKDApCisjZGVmaW5lIEVXS19GUkFNRV9UWVBFX0NIRUNLKGV3a0ZyYW1lLCAuLi4pIGRv
IHsgfSB3aGlsZSAoMCkKICNlbHNlCi0jZGVmaW5lIEVXS19GUkFNRV9UWVBFX0NIRUNLKG8sIC4u
LikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIEVXS19GUkFN
RV9UWVBFX0NIRUNLKGV3a0ZyYW1lLCAuLi4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAogICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBjb25zdCBjaGFyKiBfdG1wX290eXBl
ID0gZXZhc19vYmplY3RfdHlwZV9nZXQobyk7ICAgICAgICAgICAgICAgXAorICAgICAgICBjb25z
dCBjaGFyKiBfdG1wX290eXBlID0gZXZhc19vYmplY3RfdHlwZV9nZXQoZXdrRnJhbWUpOyAgICAg
ICAgICAgICAgIFwKICAgICAgICAgaWYgKEVJTkFfVU5MSUtFTFkoX3RtcF9vdHlwZSAhPSBFV0tf
RlJBTUVfVFlQRV9TVFIpKSB7ICAgICAgICAgIFwKICAgICAgICAgICAgIEVJTkFfTE9HX0NSSVQg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAg
ICAgICAgICAoIiVwICglcykgaXMgbm90IG9mIGFuIGV3a19mcmFtZSEiLCBvLCAgICAgICAgICAg
ICAgICAgIFwKKyAgICAgICAgICAgICAgICAoIiVwICglcykgaXMgbm90IG9mIGFuIGV3a19mcmFt
ZSEiLCBld2tGcmFtZSwgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgX3RtcF9v
dHlwZSA/IF90bXBfb3R5cGUgOiAiKG51bGwpIik7ICAgICAgICAgICAgICAgICAgICBcCiAgICAg
ICAgICAgICByZXR1cm4gX19WQV9BUkdTX187ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCiAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgfSB3aGlsZSAoMCkKICNlbmRpZgog
Ci0jZGVmaW5lIEVXS19GUkFNRV9TRF9HRVQobywgcHRyKSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgIEV3a19GcmFtZV9TbWFydF9EYXRhKiBwdHIgPSBzdGF0aWNfY2FzdDxF
d2tfRnJhbWVfU21hcnRfRGF0YSo+KGV2YXNfb2JqZWN0X3NtYXJ0X2RhdGFfZ2V0KG8pKQorI2Rl
ZmluZSBFV0tfRlJBTUVfU0RfR0VUKGV3a0ZyYW1lLCBwdHIpICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgRXdrX0ZyYW1lX1NtYXJ0X0RhdGEqIHB0ciA9IHN0YXRpY19jYXN0
PEV3a19GcmFtZV9TbWFydF9EYXRhKj4oZXZhc19vYmplY3Rfc21hcnRfZGF0YV9nZXQoZXdrRnJh
bWUpKQogCi0jZGVmaW5lIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHB0ciwgLi4uKSAg
ICAgICAgIFwKLSAgICBFV0tfRlJBTUVfVFlQRV9DSEVDSyhvLCBfX1ZBX0FSR1NfXyk7ICAgICAg
ICAgICAgICAgXAotICAgIEVXS19GUkFNRV9TRF9HRVQobywgcHRyKTsgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisjZGVmaW5lIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1l
LCBwdHIsIC4uLikgICAgICAgICBcCisgICAgRVdLX0ZSQU1FX1RZUEVfQ0hFQ0soZXdrRnJhbWUs
IF9fVkFfQVJHU19fKTsgICAgICAgICAgICAgICBcCisgICAgRVdLX0ZSQU1FX1NEX0dFVChld2tG
cmFtZSwgcHRyKTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgaWYgKCFwdHIpIHsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgQ1JJVElD
QUwoIm5vIHNtYXJ0IGRhdGEgZm9yIG9iamVjdCAlcCAoJXMpIiwgICAgXAotICAgICAgICAgICAg
ICAgICBvLCBldmFzX29iamVjdF90eXBlX2dldChvKSk7ICAgICAgICAgICBcCisgICAgICAgICAg
ICAgICAgIGV3a0ZyYW1lLCBldmFzX29iamVjdF90eXBlX2dldChld2tGcmFtZSkpOyAgICAgICAg
ICAgXAogICAgICAgICByZXR1cm4gX19WQV9BUkdTX187ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCiAgICAgfQogCiBzdGF0aWMgRXZhc19TbWFydF9DbGFzcyBfcGFyZW50X3NjID0gRVZB
U19TTUFSVF9DTEFTU19JTklUX05VTEw7CiAKICNpZmRlZiBFV0tfRlJBTUVfREVCVUcKLXN0YXRp
YyBpbmxpbmUgdm9pZCBfZXdrX2ZyYW1lX2RlYnVnKEV2YXNfT2JqZWN0KiBvKQorc3RhdGljIGlu
bGluZSB2b2lkIF9ld2tfZnJhbWVfZGVidWcoRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewogICAg
IEV2YXNfT2JqZWN0KiBjbGlwLCAqIHBhcmVudDsKICAgICBFdmFzX0Nvb3JkIHgsIHksIHcsIGgs
IGN4LCBjeSwgY3csIGNoOwogICAgIGludCByLCBnLCBiLCBhLCBjciwgY2csIGNiLCBjYTsKIAot
ICAgIGV2YXNfb2JqZWN0X2NvbG9yX2dldChvLCAmciwgJmcsICZiLCAmYSk7Ci0gICAgZXZhc19v
YmplY3RfZ2VvbWV0cnlfZ2V0KG8sICZ4LCAmeSwgJncsICZoKTsKKyAgICBldmFzX29iamVjdF9j
b2xvcl9nZXQoZXdrRnJhbWUsICZyLCAmZywgJmIsICZhKTsKKyAgICBldmFzX29iamVjdF9nZW9t
ZXRyeV9nZXQoZXdrRnJhbWUsICZ4LCAmeSwgJncsICZoKTsKIAotICAgIGNsaXAgPSBldmFzX29i
amVjdF9jbGlwX2dldChvKTsKKyAgICBjbGlwID0gZXZhc19vYmplY3RfY2xpcF9nZXQoZXdrRnJh
bWUpOwogICAgIGV2YXNfb2JqZWN0X2NvbG9yX2dldChjbGlwLCAmY3IsICZjZywgJmNiLCAmY2Ep
OwogICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldChjbGlwLCAmY3gsICZjeSwgJmN3LCAmY2gp
OwogCiAgICAgZnByaW50ZihzdGRlcnIsICIlcDogdHlwZT0lcyBuYW1lPSVzLCB2aXNpYmxlPSVk
LCBjb2xvcj0lMDJ4JTAyeCUwMnglMDJ4LCAlZCwlZCslZHglZCwgY2xpcHBlcj0lcCAoJWQsICUw
MnglMDJ4JTAyeCUwMngsICVkLCVkKyVkeCVkKVxuIiwKLSAgICAgICAgICAgIG8sIGV2YXNfb2Jq
ZWN0X3R5cGVfZ2V0KG8pLCBldmFzX29iamVjdF9uYW1lX2dldChvKSwgZXZhc19vYmplY3Rfdmlz
aWJsZV9nZXQobyksCisgICAgICAgICAgICBld2tGcmFtZSwgZXZhc19vYmplY3RfdHlwZV9nZXQo
ZXdrRnJhbWUpLCBldmFzX29iamVjdF9uYW1lX2dldChld2tGcmFtZSksIGV2YXNfb2JqZWN0X3Zp
c2libGVfZ2V0KGV3a0ZyYW1lKSwKICAgICAgICAgICAgIHIsIGcsIGIsIGEsIHgsIHksIHcsIGgs
CiAgICAgICAgICAgICBjbGlwLCBldmFzX29iamVjdF92aXNpYmxlX2dldChjbGlwKSwgY3IsIGNn
LCBjYiwgY2EsIGN4LCBjeSwgY3csIGNoKTsKLSAgICBwYXJlbnQgPSBldmFzX29iamVjdF9zbWFy
dF9wYXJlbnRfZ2V0KG8pOworICAgIHBhcmVudCA9IGV2YXNfb2JqZWN0X3NtYXJ0X3BhcmVudF9n
ZXQoZXdrRnJhbWUpOwogICAgIGlmICghcGFyZW50KQogICAgICAgICBmcHJpbnRmKHN0ZGVyciwg
IlxuIik7CiAgICAgZWxzZQpAQCAtMTc2LDkgKzE3Niw5IEBAIHN0YXRpYyBFdmFzX09iamVjdCog
X2V3a19mcmFtZV9jaGlsZHJlbl9pdGVyYXRvcl9nZXRfY29udGFpbmVyKEVpbmFfSXRlcmF0b3Jf
RXdrCiAgICAgcmV0dXJuIGl0LT5vYmo7CiB9CiAKLXN0YXRpYyB2b2lkIF9ld2tfZnJhbWVfc21h
cnRfYWRkKEV2YXNfT2JqZWN0KiBvKQorc3RhdGljIHZvaWQgX2V3a19mcmFtZV9zbWFydF9hZGQo
RXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewotICAgIEVXS19GUkFNRV9TRF9HRVQobywgc2QpOwor
ICAgIEVXS19GUkFNRV9TRF9HRVQoZXdrRnJhbWUsIHNkKTsKIAogICAgIGlmICghc2QpIHsKICAg
ICAgICAgc2QgPSBzdGF0aWNfY2FzdDxFd2tfRnJhbWVfU21hcnRfRGF0YSo+KGNhbGxvYygxLCBz
aXplb2YoRXdrX0ZyYW1lX1NtYXJ0X0RhdGEpKSk7CkBAIC0xODYsMTIgKzE4NiwxMiBAQCBzdGF0
aWMgdm9pZCBfZXdrX2ZyYW1lX3NtYXJ0X2FkZChFdmFzX09iamVjdCogbykKICAgICAgICAgICAg
IENSSVRJQ0FMKCJjb3VsZCBub3QgYWxsb2NhdGUgRXdrX0ZyYW1lX1NtYXJ0X0RhdGEiKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBldmFzX29iamVjdF9zbWFydF9k
YXRhX3NldChvLCBzZCk7CisgICAgICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2RhdGFfc2V0KGV3a0Zy
YW1lLCBzZCk7CiAgICAgfQogCi0gICAgc2QtPnNlbGYgPSBvOworICAgIHNkLT5zZWxmID0gZXdr
RnJhbWU7CiAKLSAgICBfcGFyZW50X3NjLmFkZChvKTsKKyAgICBfcGFyZW50X3NjLmFkZChld2tG
cmFtZSk7CiAgICAgZXZhc19vYmplY3Rfc3RhdGljX2NsaXBfc2V0KHNkLT5iYXNlLmNsaXBwZXIs
IEVJTkFfRkFMU0UpOwogICAgIGV2YXNfb2JqZWN0X21vdmUoc2QtPmJhc2UuY2xpcHBlciwgMCwg
MCk7CiAgICAgZXZhc19vYmplY3RfcmVzaXplKHNkLT5iYXNlLmNsaXBwZXIsIDAsIDApOwpAQCAt
MjI4LDE1ICsyMjgsMTUgQEAgc3RhdGljIHZvaWQgX2V3a19mcmFtZV9zbWFydF9hZGQoRXZhc19P
YmplY3QqIG8pCiAgICAgaWYgKGkgPiA2KQogICAgICAgICBpID0gMDsKIAotICAgIGV2YXNfb2Jq
ZWN0X3NtYXJ0X21lbWJlcl9hZGQoc2QtPnJlZ2lvbiwgbyk7CisgICAgZXZhc19vYmplY3Rfc21h
cnRfbWVtYmVyX2FkZChzZC0+cmVnaW9uLCBld2tGcmFtZSk7CiAgICAgZXZhc19vYmplY3RfaGlk
ZShzZC0+cmVnaW9uKTsKICNlbmRpZgogfQogCi1zdGF0aWMgdm9pZCBfZXdrX2ZyYW1lX3NtYXJ0
X2RlbChFdmFzX09iamVjdCogbykKK3N0YXRpYyB2b2lkIF9ld2tfZnJhbWVfc21hcnRfZGVsKEV2
YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsKLSAgICBXUk4oIm89JXAiLCBvKTsgLy8gWFhYIFJFTU9W
RSBNRSBMQVRFUgotICAgIEVXS19GUkFNRV9TRF9HRVQobywgc2QpOworICAgIFdSTigibz0lcCIs
IGV3a0ZyYW1lKTsgLy8gWFhYIFJFTU9WRSBNRSBMQVRFUgorICAgIEVXS19GUkFNRV9TRF9HRVQo
ZXdrRnJhbWUsIHNkKTsKIAogICAgIGlmIChzZCkgewogICAgICAgICBpZiAoc2QtPmZyYW1lKSB7
CkBAIC0yNTIsMTIgKzI1MiwxMiBAQCBzdGF0aWMgdm9pZCBfZXdrX2ZyYW1lX3NtYXJ0X2RlbChF
dmFzX09iamVjdCogbykKICAgICAgICAgZWluYV9zdHJpbmdzaGFyZV9kZWwoc2QtPm5hbWUpOwog
ICAgIH0KIAotICAgIF9wYXJlbnRfc2MuZGVsKG8pOworICAgIF9wYXJlbnRfc2MuZGVsKGV3a0Zy
YW1lKTsKIH0KIAotc3RhdGljIHZvaWQgX2V3a19mcmFtZV9zbWFydF9yZXNpemUoRXZhc19PYmpl
Y3QqIG8sIEV2YXNfQ29vcmQgdywgRXZhc19Db29yZCBoKQorc3RhdGljIHZvaWQgX2V3a19mcmFt
ZV9zbWFydF9yZXNpemUoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBFdmFzX0Nvb3JkIHcsIEV2YXNf
Q29vcmQgaCkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUKG8sIHNkKTsKKyAgICBFV0tfRlJBTUVf
U0RfR0VUKGV3a0ZyYW1lLCBzZCk7CiAgICAgZXZhc19vYmplY3RfcmVzaXplKHNkLT5iYXNlLmNs
aXBwZXIsIHcsIGgpOwogCiAjaWZkZWYgRVdLX0ZSQU1FX0RFQlVHCkBAIC0yNjYsNyArMjY2LDcg
QEAgc3RhdGljIHZvaWQgX2V3a19mcmFtZV9zbWFydF9yZXNpemUoRXZhc19PYmplY3QqIG8sIEV2
YXNfQ29vcmQgdywgRXZhc19Db29yZCBoKQogICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldChz
ZC0+cmVnaW9uLCAmeCwgJnksICZ3LCAmaCk7CiAgICAgSU5GKCJyZWdpb249JXAsIHZpc2libGU9
JWQsIGdlbz0lZCwlZCArICVkeCVkIiwKICAgICAgICAgc2QtPnJlZ2lvbiwgZXZhc19vYmplY3Rf
dmlzaWJsZV9nZXQoc2QtPnJlZ2lvbiksIHgsIHksIHcsIGgpOwotICAgIF9ld2tfZnJhbWVfZGVi
dWcobyk7CisgICAgX2V3a19mcmFtZV9kZWJ1Zyhld2tGcmFtZSk7CiAjZW5kaWYKIH0KIApAQCAt
MjkyLDE1ICsyOTIsMTUgQEAgc3RhdGljIGlubGluZSBFdmFzX1NtYXJ0KiBfZXdrX2ZyYW1lX3Nt
YXJ0X2NsYXNzX25ldyh2b2lkKQogICAgIHJldHVybiBzbWFydDsKIH0KIAotRXZhc19PYmplY3Qq
IGV3a19mcmFtZV92aWV3X2dldChjb25zdCBFdmFzX09iamVjdCogbykKK0V2YXNfT2JqZWN0KiBl
d2tfZnJhbWVfdmlld19nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewotICAgIEVX
S19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAwKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VU
X09SX1JFVFVSTihld2tGcmFtZSwgc2QsIDApOwogICAgIHJldHVybiBzZC0+dmlldzsKIH0KIAot
RWluYV9JdGVyYXRvciogZXdrX2ZyYW1lX2NoaWxkcmVuX2l0ZXJhdG9yX25ldyhFdmFzX09iamVj
dCogbykKK0VpbmFfSXRlcmF0b3IqIGV3a19mcmFtZV9jaGlsZHJlbl9pdGVyYXRvcl9uZXcoRXZh
c19PYmplY3QqIGV3a0ZyYW1lKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8s
IHNkLCAwKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIDAp
OwogICAgIEVpbmFfSXRlcmF0b3JfRXdrX0ZyYW1lKiBpdCA9IHN0YXRpY19jYXN0PEVpbmFfSXRl
cmF0b3JfRXdrX0ZyYW1lKj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2Fs
bG9jKDEsIHNpemVvZihFaW5hX0l0ZXJhdG9yX0V3a19GcmFtZSkpKTsKICAgICBpZiAoIWl0KQpA
QCAtMzEwLDIzICszMTAsMjMgQEAgRWluYV9JdGVyYXRvciogZXdrX2ZyYW1lX2NoaWxkcmVuX2l0
ZXJhdG9yX25ldyhFdmFzX09iamVjdCogbykKICAgICBpdC0+YmFzZS5uZXh0ID0gRlVOQ19JVEVS
QVRPUl9ORVhUKF9ld2tfZnJhbWVfY2hpbGRyZW5faXRlcmF0b3JfbmV4dCk7CiAgICAgaXQtPmJh
c2UuZ2V0X2NvbnRhaW5lciA9IEZVTkNfSVRFUkFUT1JfR0VUX0NPTlRBSU5FUihfZXdrX2ZyYW1l
X2NoaWxkcmVuX2l0ZXJhdG9yX2dldF9jb250YWluZXIpOwogICAgIGl0LT5iYXNlLmZyZWUgPSBG
VU5DX0lURVJBVE9SX0ZSRUUoZnJlZSk7Ci0gICAgaXQtPm9iaiA9IG87CisgICAgaXQtPm9iaiA9
IGV3a0ZyYW1lOwogICAgIGl0LT5jdXJyZW50SW5kZXggPSAwOwogICAgIHJldHVybiAmaXQtPmJh
c2U7CiB9CiAKLUV2YXNfT2JqZWN0KiBld2tfZnJhbWVfY2hpbGRfZmluZChFdmFzX09iamVjdCog
bywgY29uc3QgY2hhciogbmFtZSkKK0V2YXNfT2JqZWN0KiBld2tfZnJhbWVfY2hpbGRfZmluZChF
dmFzX09iamVjdCogZXdrRnJhbWUsIGNvbnN0IGNoYXIqIG5hbWUpCiB7Ci0gICAgRVdLX0ZSQU1F
X1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIDApOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVU
VVJOKGV3a0ZyYW1lLCBzZCwgMCk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFM
KG5hbWUsIDApOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUs
IDApOwogICAgIFdURjo6U3RyaW5nIHMgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgobmFtZSk7CiAg
ICAgcmV0dXJuIGtpdChzZC0+ZnJhbWUtPnRyZWUoKS0+ZmluZChXVEY6OkF0b21pY1N0cmluZyhz
KSkpOwogfQogCi1FaW5hX0Jvb2wgZXdrX2ZyYW1lX3VyaV9zZXQoRXZhc19PYmplY3QqIG8sIGNv
bnN0IGNoYXIqIHVyaSkKK0VpbmFfQm9vbCBld2tfZnJhbWVfdXJpX3NldChFdmFzX09iamVjdCog
ZXdrRnJhbWUsIGNvbnN0IGNoYXIqIHVyaSkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JF
VFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBXZWJDb3JlOjpLVVJMIGt1cmwoV2ViQ29y
ZTo6S1VSTCgpLCBXVEY6OlN0cmluZzo6ZnJvbVVURjgodXJpKSk7CiAgICAgV2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0IHJlcShrdXJsKTsKICAgICBXZWJDb3JlOjpGcmFtZUxvYWRlciogbG9hZGVy
ID0gc2QtPmZyYW1lLT5sb2FkZXIoKTsKQEAgLTMzNCwyMSArMzM0LDIxIEBAIEVpbmFfQm9vbCBl
d2tfZnJhbWVfdXJpX3NldChFdmFzX09iamVjdCogbywgY29uc3QgY2hhciogdXJpKQogICAgIHJl
dHVybiBFSU5BX1RSVUU7CiB9CiAKLWNvbnN0IGNoYXIqIGV3a19mcmFtZV91cmlfZ2V0KGNvbnN0
IEV2YXNfT2JqZWN0KiBvKQorY29uc3QgY2hhciogZXdrX2ZyYW1lX3VyaV9nZXQoY29uc3QgRXZh
c19PYmplY3QqIGV3a0ZyYW1lKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8s
IHNkLCAwKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIDAp
OwogICAgIHJldHVybiBzZC0+dXJpOwogfQogCi1jb25zdCBjaGFyKiBld2tfZnJhbWVfdGl0bGVf
Z2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQorY29uc3QgY2hhciogZXdrX2ZyYW1lX3RpdGxlX2dl
dChjb25zdCBFdmFzX09iamVjdCogZXdrRnJhbWUpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9P
Ul9SRVRVUk4obywgc2QsIDApOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0Zy
YW1lLCBzZCwgMCk7CiAgICAgcmV0dXJuIHNkLT50aXRsZTsKIH0KIAotY29uc3QgY2hhciogZXdr
X2ZyYW1lX25hbWVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQorY29uc3QgY2hhciogZXdrX2Zy
YW1lX25hbWVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsKLSAgICBFV0tfRlJB
TUVfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgMCk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9S
RVRVUk4oZXdrRnJhbWUsIHNkLCAwKTsKIAogICAgIGlmICghc2QtPmZyYW1lKSB7CiAgICAgICAg
IEVSUigiY291bGQgbm90IGdldCBuYW1lIG9mIHVuaW5pdGlhbGl6ZWQgZnJhbWUuIik7CkBAIC0z
NjUsMTcgKzM2NSwxNyBAQCBjb25zdCBjaGFyKiBld2tfZnJhbWVfbmFtZV9nZXQoY29uc3QgRXZh
c19PYmplY3QqIG8pCiAgICAgcmV0dXJuIHNkLT5uYW1lOwogfQogCi1FaW5hX0Jvb2wgZXdrX2Zy
YW1lX2NvbnRlbnRzX3NpemVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvLCBFdmFzX0Nvb3JkKiB3
LCBFdmFzX0Nvb3JkKiBoKQorRWluYV9Cb29sIGV3a19mcmFtZV9jb250ZW50c19zaXplX2dldChj
b25zdCBFdmFzX09iamVjdCogZXdrRnJhbWUsIEV2YXNfQ29vcmQqIHdpZHRoLCBFdmFzX0Nvb3Jk
KiBoZWlnaHQpCiB7Ci0gICAgaWYgKHcpCi0gICAgICAgICp3ID0gMDsKLSAgICBpZiAoaCkKLSAg
ICAgICAgKmggPSAwOwotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5B
X0ZBTFNFKTsKLSAgICBpZiAodykKLSAgICAgICAgKncgPSBzZC0+Y29udGVudHNfc2l6ZS53Owot
ICAgIGlmIChoKQotICAgICAgICAqaCA9IHNkLT5jb250ZW50c19zaXplLmg7CisgICAgaWYgKHdp
ZHRoKQorICAgICAgICAqd2lkdGggPSAwOworICAgIGlmIChoZWlnaHQpCisgICAgICAgICpoZWln
aHQgPSAwOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgRUlO
QV9GQUxTRSk7CisgICAgaWYgKHdpZHRoKQorICAgICAgICAqd2lkdGggPSBzZC0+Y29udGVudHNf
c2l6ZS53OworICAgIGlmIChoZWlnaHQpCisgICAgICAgICpoZWlnaHQgPSBzZC0+Y29udGVudHNf
c2l6ZS5oOwogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKQEAgLTQxMCwxOCArNDEwLDE4IEBA
IHN0YXRpYyBFaW5hX0Jvb2wgX2V3a19mcmFtZV9jb250ZW50c19zZXRfaW50ZXJuYWwoRXdrX0Zy
YW1lX1NtYXJ0X0RhdGEqIHNkLCBjb25zCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotRWlu
YV9Cb29sIGV3a19mcmFtZV9jb250ZW50c19zZXQoRXZhc19PYmplY3QqIG8sIGNvbnN0IGNoYXIq
IGNvbnRlbnRzLCBzaXplX3QgY29udGVudHNfc2l6ZSwgY29uc3QgY2hhciogbWltZV90eXBlLCBj
b25zdCBjaGFyKiBlbmNvZGluZywgY29uc3QgY2hhciogYmFzZV91cmkpCitFaW5hX0Jvb2wgZXdr
X2ZyYW1lX2NvbnRlbnRzX3NldChFdmFzX09iamVjdCogZXdrRnJhbWUsIGNvbnN0IGNoYXIqIGNv
bnRlbnRzLCBzaXplX3QgY29udGVudHNfc2l6ZSwgY29uc3QgY2hhciogbWltZV90eXBlLCBjb25z
dCBjaGFyKiBlbmNvZGluZywgY29uc3QgY2hhciogYmFzZV91cmkpCiB7Ci0gICAgRVdLX0ZSQU1F
X1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19GUkFNRV9TRF9H
RVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlf
T05fRkFMU0VfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOX1ZBTChjb250ZW50cywgRUlOQV9GQUxTRSk7CiAgICAgcmV0dXJu
IF9ld2tfZnJhbWVfY29udGVudHNfc2V0X2ludGVybmFsCiAgICAgICAgICAgICAgICAoc2QsIGNv
bnRlbnRzLCBjb250ZW50c19zaXplLCBtaW1lX3R5cGUsIGVuY29kaW5nLCBiYXNlX3VyaSwgMCk7
CiB9CiAKLUVpbmFfQm9vbCBld2tfZnJhbWVfY29udGVudHNfYWx0ZXJuYXRlX3NldChFdmFzX09i
amVjdCogbywgY29uc3QgY2hhciogY29udGVudHMsIHNpemVfdCBjb250ZW50c19zaXplLCBjb25z
dCBjaGFyKiBtaW1lX3R5cGUsIGNvbnN0IGNoYXIqIGVuY29kaW5nLCBjb25zdCBjaGFyKiBiYXNl
X3VyaSwgY29uc3QgY2hhciogdW5yZWFjaGFibGVfdXJpKQorRWluYV9Cb29sIGV3a19mcmFtZV9j
b250ZW50c19hbHRlcm5hdGVfc2V0KEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgY29uc3QgY2hhciog
Y29udGVudHMsIHNpemVfdCBjb250ZW50c19zaXplLCBjb25zdCBjaGFyKiBtaW1lX3R5cGUsIGNv
bnN0IGNoYXIqIGVuY29kaW5nLCBjb25zdCBjaGFyKiBiYXNlX3VyaSwgY29uc3QgY2hhciogdW5y
ZWFjaGFibGVfdXJpKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBF
SU5BX0ZBTFNFKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2Qs
IEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09OX0ZBTFNFX1JFVFVSTl9WQUwoc2QtPmZy
YW1lLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoY29u
dGVudHMsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh1
bnJlYWNoYWJsZV91cmksIEVJTkFfRkFMU0UpOwpAQCAtNDMwLDI1ICs0MzAsMjUgQEAgRWluYV9C
b29sIGV3a19mcmFtZV9jb250ZW50c19hbHRlcm5hdGVfc2V0KEV2YXNfT2JqZWN0KiBvLCBjb25z
dCBjaGFyKiBjb250ZW50cywKICAgICAgICAgICAgICAgIHVucmVhY2hhYmxlX3VyaSk7CiB9CiAK
LUVpbmFfQm9vbCBld2tfZnJhbWVfc2NyaXB0X2V4ZWN1dGUoRXZhc19PYmplY3QqIG8sIGNvbnN0
IGNoYXIqIHNjcmlwdCkKK0VpbmFfQm9vbCBld2tfZnJhbWVfc2NyaXB0X2V4ZWN1dGUoRXZhc19P
YmplY3QqIGV3a0ZyYW1lLCBjb25zdCBjaGFyKiBzY3JpcHQpCiB7Ci0gICAgRVdLX0ZSQU1FX1NE
X0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19GUkFNRV9TRF9HRVRf
T1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05f
RkFMU0VfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOX1ZBTChzY3JpcHQsIEVJTkFfRkFMU0UpOwogICAgIHNkLT5mcmFtZS0+
c2NyaXB0KCktPmV4ZWN1dGVTY3JpcHQoV1RGOjpTdHJpbmc6OmZyb21VVEY4KHNjcmlwdCksIHRy
dWUpOwogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLUVpbmFfQm9vbCBld2tfZnJhbWVfZWRp
dGFibGVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQorRWluYV9Cb29sIGV3a19mcmFtZV9lZGl0
YWJsZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewotICAgIEVXS19GUkFNRV9T
RF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VU
X09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOwogICAgIHJldHVybiBzZC0+
ZWRpdGFibGU7CiB9CiAKLUVpbmFfQm9vbCBld2tfZnJhbWVfZWRpdGFibGVfc2V0KEV2YXNfT2Jq
ZWN0KiBvLCBFaW5hX0Jvb2wgZWRpdGFibGUpCitFaW5hX0Jvb2wgZXdrX2ZyYW1lX2VkaXRhYmxl
X3NldChFdmFzX09iamVjdCogZXdrRnJhbWUsIEVpbmFfQm9vbCBlZGl0YWJsZSkKIHsKLSAgICBF
V0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX0ZS
QU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKICAgICBl
ZGl0YWJsZSA9ICEhZWRpdGFibGU7CiAgICAgaWYgKHNkLT5lZGl0YWJsZSA9PSBlZGl0YWJsZSkK
QEAgLTQ1OCw5ICs0NTgsOSBAQCBFaW5hX0Jvb2wgZXdrX2ZyYW1lX2VkaXRhYmxlX3NldChFdmFz
X09iamVjdCogbywgRWluYV9Cb29sIGVkaXRhYmxlKQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9
CiAKLWNoYXIqIGV3a19mcmFtZV9zZWxlY3Rpb25fZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQor
Y2hhciogZXdrX2ZyYW1lX3NlbGVjdGlvbl9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1l
KQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAwKTsKKyAgICBFV0tf
RlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIDApOwogICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIDApOwogICAgIFdURjo6Q1N0cmluZyBzID0g
c2QtPmZyYW1lLT5lZGl0b3IoKS0+c2VsZWN0ZWRUZXh0KCkudXRmOCgpOwogICAgIGlmIChzLmlz
TnVsbCgpKQpAQCAtNDY4LDE4ICs0NjgsMTggQEAgY2hhciogZXdrX2ZyYW1lX3NlbGVjdGlvbl9n
ZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCiAgICAgcmV0dXJuIHN0cmR1cChzLmRhdGEoKSk7CiB9
CiAKLUVpbmFfQm9vbCBld2tfZnJhbWVfdGV4dF9zZWFyY2goY29uc3QgRXZhc19PYmplY3QqIG8s
IGNvbnN0IGNoYXIqIHN0cmluZywgRWluYV9Cb29sIGNhc2Vfc2Vuc2l0aXZlLCBFaW5hX0Jvb2wg
Zm9yd2FyZCwgRWluYV9Cb29sIHdyYXApCitFaW5hX0Jvb2wgZXdrX2ZyYW1lX3RleHRfc2VhcmNo
KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgY29uc3QgY2hhciogc3RyaW5nLCBFaW5hX0Jv
b2wgY2FzZV9zZW5zaXRpdmUsIEVpbmFfQm9vbCBmb3J3YXJkLCBFaW5hX0Jvb2wgd3JhcCkKIHsK
LSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAg
RVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsKICAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsK
ICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc3RyaW5nLCBFSU5BX0ZBTFNFKTsK
IAogICAgIHJldHVybiBzZC0+ZnJhbWUtPmVkaXRvcigpLT5maW5kU3RyaW5nKFdURjo6U3RyaW5n
Ojpmcm9tVVRGOChzdHJpbmcpLCBmb3J3YXJkLCBjYXNlX3NlbnNpdGl2ZSwgd3JhcCwgdHJ1ZSk7
CiB9CiAKLXVuc2lnbmVkIGludCBld2tfZnJhbWVfdGV4dF9tYXRjaGVzX21hcmsoRXZhc19PYmpl
Y3QqIG8sIGNvbnN0IGNoYXIqIHN0cmluZywgRWluYV9Cb29sIGNhc2Vfc2Vuc2l0aXZlLCBFaW5h
X0Jvb2wgaGlnaGxpZ2h0LCB1bnNpZ25lZCBpbnQgbGltaXQpCit1bnNpZ25lZCBpbnQgZXdrX2Zy
YW1lX3RleHRfbWF0Y2hlc19tYXJrKEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgY29uc3QgY2hhciog
c3RyaW5nLCBFaW5hX0Jvb2wgY2FzZV9zZW5zaXRpdmUsIEVpbmFfQm9vbCBoaWdobGlnaHQsIHVu
c2lnbmVkIGludCBsaW1pdCkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihvLCBz
ZCwgMCk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCAwKTsK
ICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNF
KTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc3RyaW5nLCAwKTsKIApAQCAt
NDg3LDI2ICs0ODcsMjYgQEAgdW5zaWduZWQgaW50IGV3a19mcmFtZV90ZXh0X21hdGNoZXNfbWFy
ayhFdmFzX09iamVjdCogbywgY29uc3QgY2hhciogc3RyaW5nLCBFaW4KICAgICByZXR1cm4gc2Qt
PmZyYW1lLT5lZGl0b3IoKS0+Y291bnRNYXRjaGVzRm9yVGV4dChXVEY6OlN0cmluZzo6ZnJvbVVU
Rjgoc3RyaW5nKSwgY2FzZV9zZW5zaXRpdmUsIGxpbWl0LCB0cnVlKTsKIH0KIAotRWluYV9Cb29s
IGV3a19mcmFtZV90ZXh0X21hdGNoZXNfdW5tYXJrX2FsbChFdmFzX09iamVjdCogbykKK0VpbmFf
Qm9vbCBld2tfZnJhbWVfdGV4dF9tYXRjaGVzX3VubWFya19hbGwoRXZhc19PYmplY3QqIGV3a0Zy
YW1lKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNF
KTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFM
U0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFf
RkFMU0UpOwogCiAgICAgc2QtPmZyYW1lLT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPnJlbW92ZU1h
cmtlcnMoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXI6OlRleHRNYXRjaCk7CiAgICAgcmV0dXJuIEVJ
TkFfVFJVRTsKIH0KIAotRWluYV9Cb29sIGV3a19mcmFtZV90ZXh0X21hdGNoZXNfaGlnaGxpZ2h0
X3NldChFdmFzX09iamVjdCogbywgRWluYV9Cb29sIGhpZ2hsaWdodCkKK0VpbmFfQm9vbCBld2tf
ZnJhbWVfdGV4dF9tYXRjaGVzX2hpZ2hsaWdodF9zZXQoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBF
aW5hX0Jvb2wgaGlnaGxpZ2h0KQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8s
IHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFt
ZSwgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChz
ZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOwogICAgIHNkLT5mcmFtZS0+ZWRpdG9yKCktPnNldE1hcmtl
ZFRleHRNYXRjaGVzQXJlSGlnaGxpZ2h0ZWQoaGlnaGxpZ2h0KTsKICAgICByZXR1cm4gRUlOQV9U
UlVFOwogfQogCi1FaW5hX0Jvb2wgZXdrX2ZyYW1lX3RleHRfbWF0Y2hlc19oaWdobGlnaHRfZ2V0
KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQorRWluYV9Cb29sIGV3a19mcmFtZV90ZXh0X21hdGNoZXNf
aGlnaGxpZ2h0X2dldChjb25zdCBFdmFzX09iamVjdCogZXdrRnJhbWUpCiB7Ci0gICAgRVdLX0ZS
QU1FX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19GUkFNRV9T
RF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZF
VFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7CiAgICAgcmV0dXJu
IHNkLT5mcmFtZS0+ZWRpdG9yKCktPm1hcmtlZFRleHRNYXRjaGVzQXJlSGlnaGxpZ2h0ZWQoKTsK
IH0KQEAgLTUyNyw5ICs1MjcsOSBAQCBzdGF0aWMgYm9vbCBfZXdrX2ZyYW1lX3JlY3RfaXNfbmVn
YXRpdmVfdmFsdWUoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgaSkKICAgICByZXR1cm4gKGkueCgp
IDwgMCB8fCBpLnkoKSA8IDApOwogfQogCi1FaW5hX0Jvb2wgZXdrX2ZyYW1lX3RleHRfbWF0Y2hl
c19udGhfcG9zX2dldChjb25zdCBFdmFzX09iamVjdCogbywgc2l6ZV90IG4sIGludCogeCwgaW50
KiB5KQorRWluYV9Cb29sIGV3a19mcmFtZV90ZXh0X21hdGNoZXNfbnRoX3Bvc19nZXQoY29uc3Qg
RXZhc19PYmplY3QqIGV3a0ZyYW1lLCBzaXplX3QgbiwgaW50KiB4LCBpbnQqIHkpCiB7Ci0gICAg
RVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19G
UkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7CiAKICAg
ICBWZWN0b3I8V2ViQ29yZTo6SW50UmVjdD4gaW50UmVjdHMgPSBzZC0+ZnJhbWUtPmRvY3VtZW50
KCktPm1hcmtlcnMoKS0+cmVuZGVyZWRSZWN0c0Zvck1hcmtlcnMoV2ViQ29yZTo6RG9jdW1lbnRN
YXJrZXI6OlRleHRNYXRjaCk7CkBAIC01NDksNDMgKzU0OSw0MyBAQCBFaW5hX0Jvb2wgZXdrX2Zy
YW1lX3RleHRfbWF0Y2hlc19udGhfcG9zX2dldChjb25zdCBFdmFzX09iamVjdCogbywgc2l6ZV90
IG4sIGludAogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLUVpbmFfQm9vbCBld2tfZnJhbWVf
c3RvcChFdmFzX09iamVjdCogbykKK0VpbmFfQm9vbCBld2tfZnJhbWVfc3RvcChFdmFzX09iamVj
dCogZXdrRnJhbWUpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJ
TkFfRkFMU0UpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwg
RUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFt
ZSwgRUlOQV9GQUxTRSk7CiAgICAgc2QtPmZyYW1lLT5sb2FkZXIoKS0+c3RvcEFsbExvYWRlcnMo
KTsKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi1FaW5hX0Jvb2wgZXdrX2ZyYW1lX3JlbG9h
ZChFdmFzX09iamVjdCogbykKK0VpbmFfQm9vbCBld2tfZnJhbWVfcmVsb2FkKEV2YXNfT2JqZWN0
KiBld2tGcmFtZSkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlO
QV9GQUxTRSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBF
SU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1l
LCBFSU5BX0ZBTFNFKTsKICAgICBzZC0+ZnJhbWUtPmxvYWRlcigpLT5yZWxvYWQoKTsKICAgICBy
ZXR1cm4gRUlOQV9UUlVFOwogfQogCi1FaW5hX0Jvb2wgZXdrX2ZyYW1lX3JlbG9hZF9mdWxsKEV2
YXNfT2JqZWN0KiBvKQorRWluYV9Cb29sIGV3a19mcmFtZV9yZWxvYWRfZnVsbChFdmFzX09iamVj
dCogZXdrRnJhbWUpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJ
TkFfRkFMU0UpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwg
RUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFt
ZSwgRUlOQV9GQUxTRSk7CiAgICAgc2QtPmZyYW1lLT5sb2FkZXIoKS0+cmVsb2FkKHRydWUpOwog
ICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLUVpbmFfQm9vbCBld2tfZnJhbWVfYmFjayhFdmFz
X09iamVjdCogbykKK0VpbmFfQm9vbCBld2tfZnJhbWVfYmFjayhFdmFzX09iamVjdCogZXdrRnJh
bWUpCiB7Ci0gICAgcmV0dXJuIGV3a19mcmFtZV9uYXZpZ2F0ZShvLCAtMSk7CisgICAgcmV0dXJu
IGV3a19mcmFtZV9uYXZpZ2F0ZShld2tGcmFtZSwgLTEpOwogfQogCi1FaW5hX0Jvb2wgZXdrX2Zy
YW1lX2ZvcndhcmQoRXZhc19PYmplY3QqIG8pCitFaW5hX0Jvb2wgZXdrX2ZyYW1lX2ZvcndhcmQo
RXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewotICAgIHJldHVybiBld2tfZnJhbWVfbmF2aWdhdGUo
bywgMSk7CisgICAgcmV0dXJuIGV3a19mcmFtZV9uYXZpZ2F0ZShld2tGcmFtZSwgMSk7CiB9CiAK
LUVpbmFfQm9vbCBld2tfZnJhbWVfbmF2aWdhdGUoRXZhc19PYmplY3QqIG8sIGludCBzdGVwcykK
K0VpbmFfQm9vbCBld2tfZnJhbWVfbmF2aWdhdGUoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBpbnQg
c3RlcHMpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFM
U0UpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9G
QUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgRUlO
QV9GQUxTRSk7CiAgICAgV2ViQ29yZTo6UGFnZSogcGFnZSA9IHNkLT5mcmFtZS0+cGFnZSgpOwog
ICAgIGlmICghcGFnZS0+Y2FuR29CYWNrT3JGb3J3YXJkKHN0ZXBzKSkKQEAgLTU5NCwyNyArNTk0
LDI3IEBAIEVpbmFfQm9vbCBld2tfZnJhbWVfbmF2aWdhdGUoRXZhc19PYmplY3QqIG8sIGludCBz
dGVwcykKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi1FaW5hX0Jvb2wgZXdrX2ZyYW1lX2Jh
Y2tfcG9zc2libGUoRXZhc19PYmplY3QqIG8pCitFaW5hX0Jvb2wgZXdrX2ZyYW1lX2JhY2tfcG9z
c2libGUoRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewotICAgIHJldHVybiBld2tfZnJhbWVfbmF2
aWdhdGVfcG9zc2libGUobywgLTEpOworICAgIHJldHVybiBld2tfZnJhbWVfbmF2aWdhdGVfcG9z
c2libGUoZXdrRnJhbWUsIC0xKTsKIH0KIAotRWluYV9Cb29sIGV3a19mcmFtZV9mb3J3YXJkX3Bv
c3NpYmxlKEV2YXNfT2JqZWN0KiBvKQorRWluYV9Cb29sIGV3a19mcmFtZV9mb3J3YXJkX3Bvc3Np
YmxlKEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsKLSAgICByZXR1cm4gZXdrX2ZyYW1lX25hdmln
YXRlX3Bvc3NpYmxlKG8sIDEpOworICAgIHJldHVybiBld2tfZnJhbWVfbmF2aWdhdGVfcG9zc2li
bGUoZXdrRnJhbWUsIDEpOwogfQogCi1FaW5hX0Jvb2wgZXdrX2ZyYW1lX25hdmlnYXRlX3Bvc3Np
YmxlKEV2YXNfT2JqZWN0KiBvLCBpbnQgc3RlcHMpCitFaW5hX0Jvb2wgZXdrX2ZyYW1lX25hdmln
YXRlX3Bvc3NpYmxlKEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgaW50IHN0ZXBzKQogewotICAgIEVX
S19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfRlJB
TUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOwogICAgIFdl
YkNvcmU6OlBhZ2UqIHBhZ2UgPSBzZC0+ZnJhbWUtPnBhZ2UoKTsKICAgICByZXR1cm4gcGFnZS0+
Y2FuR29CYWNrT3JGb3J3YXJkKHN0ZXBzKTsKIH0KIAotZmxvYXQgZXdrX2ZyYW1lX3pvb21fZ2V0
KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQorZmxvYXQgZXdrX2ZyYW1lX3pvb21fZ2V0KGNvbnN0IEV2
YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihv
LCBzZCwgLTEuMCk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNk
LCAtMS4wKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCAt
MS4wKTsKIAogICAgIGlmIChzZC0+dGV4dFpvb20pCkBAIC02MjIsOSArNjIyLDkgQEAgZmxvYXQg
ZXdrX2ZyYW1lX3pvb21fZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQogICAgIHJldHVybiBzZC0+
ZnJhbWUtPnBhZ2Vab29tRmFjdG9yKCk7CiB9CiAKLUVpbmFfQm9vbCBld2tfZnJhbWVfem9vbV9z
ZXQoRXZhc19PYmplY3QqIG8sIGZsb2F0IHpvb20pCitFaW5hX0Jvb2wgZXdrX2ZyYW1lX3pvb21f
c2V0KEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgZmxvYXQgem9vbSkKIHsKLSAgICBFV0tfRlJBTUVf
U0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX0ZSQU1FX1NEX0dF
VF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKICAgICBpZiAoc2QtPnRl
eHRab29tKQogICAgICAgICBzZC0+ZnJhbWUtPnNldFRleHRab29tRmFjdG9yKHpvb20pOwpAQCAt
NjMzLDE1ICs2MzMsMTUgQEAgRWluYV9Cb29sIGV3a19mcmFtZV96b29tX3NldChFdmFzX09iamVj
dCogbywgZmxvYXQgem9vbSkKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi1FaW5hX0Jvb2wg
ZXdrX2ZyYW1lX3pvb21fdGV4dF9vbmx5X2dldChjb25zdCBFdmFzX09iamVjdCogbykKK0VpbmFf
Qm9vbCBld2tfZnJhbWVfem9vbV90ZXh0X29ubHlfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tG
cmFtZSkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxT
RSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZB
TFNFKTsKICAgICByZXR1cm4gc2QtPnRleHRab29tOwogfQogCi1FaW5hX0Jvb2wgZXdrX2ZyYW1l
X3pvb21fdGV4dF9vbmx5X3NldChFdmFzX09iamVjdCogbywgRWluYV9Cb29sIHNldHRpbmcpCitF
aW5hX0Jvb2wgZXdrX2ZyYW1lX3pvb21fdGV4dF9vbmx5X3NldChFdmFzX09iamVjdCogZXdrRnJh
bWUsIEVpbmFfQm9vbCBzZXR0aW5nKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJO
KG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tG
cmFtZSwgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZB
TChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOwogICAgIGlmIChzZC0+dGV4dFpvb20gPT0gc2V0dGlu
ZykKICAgICAgICAgcmV0dXJuIEVJTkFfVFJVRTsKQEAgLTY2OCw5ICs2NjgsOSBAQCB2b2lkIGV3
a19mcmFtZV9oaXRfdGVzdF9mcmVlKEV3a19IaXRfVGVzdCogaGl0X3Rlc3QpCiAgICAgZnJlZSho
aXRfdGVzdCk7CiB9CiAKLUV3a19IaXRfVGVzdCogZXdrX2ZyYW1lX2hpdF90ZXN0X25ldyhjb25z
dCBFdmFzX09iamVjdCogbywgaW50IHgsIGludCB5KQorRXdrX0hpdF9UZXN0KiBld2tfZnJhbWVf
aGl0X3Rlc3RfbmV3KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgaW50IHgsIGludCB5KQog
ewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAwKTsKKyAgICBFV0tfRlJB
TUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIDApOwogICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIDApOwogCiAgICAgV2ViQ29yZTo6RnJhbWVWaWV3
KiB2aWV3ID0gc2QtPmZyYW1lLT52aWV3KCk7CkBAIC03NDEsOSArNzQxLDkgQEAgRXdrX0hpdF9U
ZXN0KiBld2tfZnJhbWVfaGl0X3Rlc3RfbmV3KGNvbnN0IEV2YXNfT2JqZWN0KiBvLCBpbnQgeCwg
aW50IHkpCiB9CiAKIEVpbmFfQm9vbAotZXdrX2ZyYW1lX3Njcm9sbF9hZGQoRXZhc19PYmplY3Qq
IG8sIGludCBkeCwgaW50IGR5KQorZXdrX2ZyYW1lX3Njcm9sbF9hZGQoRXZhc19PYmplY3QqIGV3
a0ZyYW1lLCBpbnQgZHgsIGludCBkeSkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVS
TihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdr
RnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9W
QUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
Tl9WQUwoc2QtPmZyYW1lLT52aWV3KCksIEVJTkFfRkFMU0UpOwogICAgIHNkLT5mcmFtZS0+dmll
dygpLT5zY3JvbGxCeShXZWJDb3JlOjpJbnRTaXplKGR4LCBkeSkpOwpAQCAtNzUxLDkgKzc1MSw5
IEBAIGV3a19mcmFtZV9zY3JvbGxfYWRkKEV2YXNfT2JqZWN0KiBvLCBpbnQgZHgsIGludCBkeSkK
IH0KIAogRWluYV9Cb29sCi1ld2tfZnJhbWVfc2Nyb2xsX3NldChFdmFzX09iamVjdCogbywgaW50
IHgsIGludCB5KQorZXdrX2ZyYW1lX3Njcm9sbF9zZXQoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBp
bnQgeCwgaW50IHkpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJ
TkFfRkFMU0UpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwg
RUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFt
ZSwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5m
cmFtZS0+dmlldygpLCBFSU5BX0ZBTFNFKTsKICAgICBzZC0+ZnJhbWUtPnZpZXcoKS0+c2V0U2Ny
b2xsUG9zaXRpb24oV2ViQ29yZTo6SW50UG9pbnQoeCwgeSkpOwpAQCAtNzYxLDMxICs3NjEsMzEg
QEAgZXdrX2ZyYW1lX3Njcm9sbF9zZXQoRXZhc19PYmplY3QqIG8sIGludCB4LCBpbnQgeSkKIH0K
IAogRWluYV9Cb29sCi1ld2tfZnJhbWVfc2Nyb2xsX3NpemVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0
KiBvLCBpbnQqIHcsIGludCogaCkKK2V3a19mcmFtZV9zY3JvbGxfc2l6ZV9nZXQoY29uc3QgRXZh
c19PYmplY3QqIGV3a0ZyYW1lLCBpbnQqIHdpZHRoLCBpbnQqIGhlaWdodCkKIHsKLSAgICBpZiAo
dykKLSAgICAgICAgKncgPSAwOwotICAgIGlmIChoKQotICAgICAgICAqaCA9IDA7Ci0gICAgRVdL
X0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIGlmICh3aWR0
aCkKKyAgICAgICAgKndpZHRoID0gMDsKKyAgICBpZiAoaGVpZ2h0KQorICAgICAgICAqaGVpZ2h0
ID0gMDsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFf
RkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJ
TkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUt
PnZpZXcoKSwgRUlOQV9GQUxTRSk7CiAgICAgV2ViQ29yZTo6SW50UG9pbnQgcG9pbnQgPSBzZC0+
ZnJhbWUtPnZpZXcoKS0+bWF4aW11bVNjcm9sbFBvc2l0aW9uKCk7Ci0gICAgaWYgKHcpCi0gICAg
ICAgICp3ID0gcG9pbnQueCgpOwotICAgIGlmIChoKQotICAgICAgICAqaCA9IHBvaW50LnkoKTsK
KyAgICBpZiAod2lkdGgpCisgICAgICAgICp3aWR0aCA9IHBvaW50LngoKTsKKyAgICBpZiAoaGVp
Z2h0KQorICAgICAgICAqaGVpZ2h0ID0gcG9pbnQueSgpOwogICAgIHJldHVybiBFSU5BX1RSVUU7
CiB9CiAKIEVpbmFfQm9vbAotZXdrX2ZyYW1lX3Njcm9sbF9wb3NfZ2V0KGNvbnN0IEV2YXNfT2Jq
ZWN0KiBvLCBpbnQqIHgsIGludCogeSkKK2V3a19mcmFtZV9zY3JvbGxfcG9zX2dldChjb25zdCBF
dmFzX09iamVjdCogZXdrRnJhbWUsIGludCogeCwgaW50KiB5KQogewogICAgIGlmICh4KQogICAg
ICAgICAqeCA9IDA7CiAgICAgaWYgKHkpCiAgICAgICAgICp5ID0gMDsKLSAgICBFV0tfRlJBTUVf
U0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX0ZSQU1FX1NEX0dF
VF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLT52aWV3KCksIEVJTkFfRkFMU0UpOwogICAg
IFdlYkNvcmU6OkludFBvaW50IHBvcyA9IHNkLT5mcmFtZS0+dmlldygpLT5zY3JvbGxQb3NpdGlv
bigpOwpAQCAtNzk2LDE3ICs3OTYsMTcgQEAgZXdrX2ZyYW1lX3Njcm9sbF9wb3NfZ2V0KGNvbnN0
IEV2YXNfT2JqZWN0KiBvLCBpbnQqIHgsIGludCogeSkKICAgICByZXR1cm4gRUlOQV9UUlVFOwog
fQogCi1FaW5hX0Jvb2wgZXdrX2ZyYW1lX3Zpc2libGVfY29udGVudF9nZW9tZXRyeV9nZXQoY29u
c3QgRXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCBpbmNsdWRlX3Njcm9sbGJhcnMsIGludCogeCwg
aW50KiB5LCBpbnQqIHcsIGludCogaCkKK0VpbmFfQm9vbCBld2tfZnJhbWVfdmlzaWJsZV9jb250
ZW50X2dlb21ldHJ5X2dldChjb25zdCBFdmFzX09iamVjdCogZXdrRnJhbWUsIEVpbmFfQm9vbCBp
bmNsdWRlX3Njcm9sbGJhcnMsIGludCogeCwgaW50KiB5LCBpbnQqIHdpZHRoLCBpbnQqIGhlaWdo
dCkKIHsKICAgICBpZiAoeCkKICAgICAgICAgKnggPSAwOwogICAgIGlmICh5KQogICAgICAgICAq
eSA9IDA7Ci0gICAgaWYgKHcpCi0gICAgICAgICp3ID0gMDsKLSAgICBpZiAoaCkKLSAgICAgICAg
KmggPSAwOwotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNF
KTsKKyAgICBpZiAod2lkdGgpCisgICAgICAgICp3aWR0aCA9IDA7CisgICAgaWYgKGhlaWdodCkK
KyAgICAgICAgKmhlaWdodCA9IDA7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdr
RnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9W
QUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
Tl9WQUwoc2QtPmZyYW1lLT52aWV3KCksIEVJTkFfRkFMU0UpOwogICAgIFdlYkNvcmU6OkludFJl
Y3QgcmVjdCA9IHNkLT5mcmFtZS0+dmlldygpLT52aXNpYmxlQ29udGVudFJlY3QoaW5jbHVkZV9z
Y3JvbGxiYXJzKTsKQEAgLTgxNCw2OSArODE0LDY5IEBAIEVpbmFfQm9vbCBld2tfZnJhbWVfdmlz
aWJsZV9jb250ZW50X2dlb21ldHJ5X2dldChjb25zdCBFdmFzX09iamVjdCogbywgRWluYV9Cb29s
CiAgICAgICAgICp4ID0gcmVjdC54KCk7CiAgICAgaWYgKHkpCiAgICAgICAgICp5ID0gcmVjdC55
KCk7Ci0gICAgaWYgKHcpCi0gICAgICAgICp3ID0gcmVjdC53aWR0aCgpOwotICAgIGlmIChoKQot
ICAgICAgICAqaCA9IHJlY3QuaGVpZ2h0KCk7CisgICAgaWYgKHdpZHRoKQorICAgICAgICAqd2lk
dGggPSByZWN0LndpZHRoKCk7CisgICAgaWYgKGhlaWdodCkKKyAgICAgICAgKmhlaWdodCA9IHJl
Y3QuaGVpZ2h0KCk7CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotRWluYV9Cb29sIGV3a19m
cmFtZV9wYWludF9mdWxsX2dldChjb25zdCBFdmFzX09iamVjdCogbykKK0VpbmFfQm9vbCBld2tf
ZnJhbWVfcGFpbnRfZnVsbF9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewotICAg
IEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tf
RlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOwogICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUtPnZpZXcoKSwgRUlOQV9G
QUxTRSk7CiAgICAgcmV0dXJuIHNkLT5mcmFtZS0+dmlldygpLT5wYWludHNFbnRpcmVDb250ZW50
cygpOwogfQogCi12b2lkIGV3a19mcmFtZV9wYWludF9mdWxsX3NldChFdmFzX09iamVjdCogbywg
RWluYV9Cb29sIGZsYWcpCit2b2lkIGV3a19mcmFtZV9wYWludF9mdWxsX3NldChFdmFzX09iamVj
dCogZXdrRnJhbWUsIEVpbmFfQm9vbCBmbGFnKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1Jf
UkVUVVJOKG8sIHNkKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwg
c2QpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5mcmFtZSk7CiAgICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmZyYW1lLT52aWV3KCkpOwogICAgIHNkLT5mcmFt
ZS0+dmlldygpLT5zZXRQYWludHNFbnRpcmVDb250ZW50cyhmbGFnKTsKIH0KIAotRWluYV9Cb29s
IGV3a19mcmFtZV9mZWVkX2ZvY3VzX2luKEV2YXNfT2JqZWN0KiBvKQorRWluYV9Cb29sIGV3a19m
cmFtZV9mZWVkX2ZvY3VzX2luKEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsKLSAgICBFV0tfRlJB
TUVfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX0ZSQU1FX1NE
X0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKICAgICBXZWJDb3Jl
OjpGb2N1c0NvbnRyb2xsZXIqIGMgPSBzZC0+ZnJhbWUtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVy
KCk7CiAgICAgYy0+c2V0Rm9jdXNlZEZyYW1lKHNkLT5mcmFtZSk7CiAgICAgcmV0dXJuIEVJTkFf
VFJVRTsKIH0KIAotRWluYV9Cb29sIGV3a19mcmFtZV9mZWVkX2ZvY3VzX291dChFdmFzX09iamVj
dCogbykKK0VpbmFfQm9vbCBld2tfZnJhbWVfZmVlZF9mb2N1c19vdXQoRXZhc19PYmplY3QqIGV3
a0ZyYW1lKQogewogICAgIC8vIFRPRE86IHdoYXQgdG8gZG8gb24gZm9jdXMgb3V0PwogICAgIEVS
Uigid2hhdCB0byBkbz8iKTsKICAgICByZXR1cm4gRUlOQV9GQUxTRTsKIH0KIAotRWluYV9Cb29s
IGV3a19mcmFtZV9mZWVkX21vdXNlX3doZWVsKEV2YXNfT2JqZWN0KiBvLCBjb25zdCBFdmFzX0V2
ZW50X01vdXNlX1doZWVsKiBldikKK0VpbmFfQm9vbCBld2tfZnJhbWVfZmVlZF9tb3VzZV93aGVl
bChFdmFzX09iamVjdCogZXdrRnJhbWUsIGNvbnN0IEV2YXNfRXZlbnRfTW91c2VfV2hlZWwqIGV2
KQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsK
KyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0Up
OwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFM
U0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChldiwgRUlOQV9GQUxTRSk7
CiAKICAgICBXZWJDb3JlOjpGcmFtZVZpZXcqIHZpZXcgPSBzZC0+ZnJhbWUtPnZpZXcoKTsKICAg
ICBEQkcoIm89JXAsIHZpZXc9JXAsIGRpcmVjdGlvbj0lZCwgej0lZCwgcG9zPSVkLCVkIiwKLSAg
ICAgICAgbywgdmlldywgZXYtPmRpcmVjdGlvbiwgZXYtPnosIGV2LT5jYW52YXMueCwgZXYtPmNh
bnZhcy55KTsKKyAgICAgICAgZXdrRnJhbWUsIHZpZXcsIGV2LT5kaXJlY3Rpb24sIGV2LT56LCBl
di0+Y2FudmFzLngsIGV2LT5jYW52YXMueSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk5fVkFMKHZpZXcsIEVJTkFfRkFMU0UpOwogCiAgICAgV2ViQ29yZTo6UGxhdGZvcm1XaGVlbEV2
ZW50IGV2ZW50KGV2KTsKICAgICByZXR1cm4gc2QtPmZyYW1lLT5ldmVudEhhbmRsZXIoKS0+aGFu
ZGxlV2hlZWxFdmVudChldmVudCk7CiB9CiAKLUVpbmFfQm9vbCBld2tfZnJhbWVfZmVlZF9tb3Vz
ZV9kb3duKEV2YXNfT2JqZWN0KiBvLCBjb25zdCBFdmFzX0V2ZW50X01vdXNlX0Rvd24qIGV2KQor
RWluYV9Cb29sIGV3a19mcmFtZV9mZWVkX21vdXNlX2Rvd24oRXZhc19PYmplY3QqIGV3a0ZyYW1l
LCBjb25zdCBFdmFzX0V2ZW50X01vdXNlX0Rvd24qIGV2KQogewotICAgIEVXS19GUkFNRV9TRF9H
RVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09S
X1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOX1ZBTChldiwgRUlOQV9GQUxTRSk7CiAKICAgICBXZWJDb3JlOjpGcmFtZVZp
ZXcqIHZpZXcgPSBzZC0+ZnJhbWUtPnZpZXcoKTsKICAgICBEQkcoIm89JXAsIHZpZXc9JXAsIGJ1
dHRvbj0lZCwgcG9zPSVkLCVkIiwKLSAgICAgICAgbywgdmlldywgZXYtPmJ1dHRvbiwgZXYtPmNh
bnZhcy54LCBldi0+Y2FudmFzLnkpOworICAgICAgICBld2tGcmFtZSwgdmlldywgZXYtPmJ1dHRv
biwgZXYtPmNhbnZhcy54LCBldi0+Y2FudmFzLnkpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOX1ZBTCh2aWV3LCBFSU5BX0ZBTFNFKTsKIAogICAgIEV2YXNfQ29vcmQgeCwgeTsKQEAg
LTg4NiwxNSArODg2LDE1IEBAIEVpbmFfQm9vbCBld2tfZnJhbWVfZmVlZF9tb3VzZV9kb3duKEV2
YXNfT2JqZWN0KiBvLCBjb25zdCBFdmFzX0V2ZW50X01vdXNlX0Rvd24qCiAgICAgcmV0dXJuIHNk
LT5mcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmhhbmRsZU1vdXNlUHJlc3NFdmVudChldmVudCk7CiB9
CiAKLUVpbmFfQm9vbCBld2tfZnJhbWVfZmVlZF9tb3VzZV91cChFdmFzX09iamVjdCogbywgY29u
c3QgRXZhc19FdmVudF9Nb3VzZV9VcCogZXYpCitFaW5hX0Jvb2wgZXdrX2ZyYW1lX2ZlZWRfbW91
c2VfdXAoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBjb25zdCBFdmFzX0V2ZW50X01vdXNlX1VwKiBl
dikKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7
CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNF
KTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZB
TFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZXYsIEVJTkFfRkFMU0Up
OwogCiAgICAgV2ViQ29yZTo6RnJhbWVWaWV3KiB2aWV3ID0gc2QtPmZyYW1lLT52aWV3KCk7CiAg
ICAgREJHKCJvPSVwLCB2aWV3PSVwLCBidXR0b249JWQsIHBvcz0lZCwlZCIsCi0gICAgICAgIG8s
IHZpZXcsIGV2LT5idXR0b24sIGV2LT5jYW52YXMueCwgZXYtPmNhbnZhcy55KTsKKyAgICAgICAg
ZXdrRnJhbWUsIHZpZXcsIGV2LT5idXR0b24sIGV2LT5jYW52YXMueCwgZXYtPmNhbnZhcy55KTsK
ICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodmlldywgRUlOQV9GQUxTRSk7CiAK
ICAgICBFdmFzX0Nvb3JkIHgsIHk7CkBAIC05MDQsMTUgKzkwNCwxNSBAQCBFaW5hX0Jvb2wgZXdr
X2ZyYW1lX2ZlZWRfbW91c2VfdXAoRXZhc19PYmplY3QqIG8sIGNvbnN0IEV2YXNfRXZlbnRfTW91
c2VfVXAqIGV2KQogICAgIHJldHVybiBzZC0+ZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5oYW5kbGVN
b3VzZVJlbGVhc2VFdmVudChldmVudCk7CiB9CiAKLUVpbmFfQm9vbCBld2tfZnJhbWVfZmVlZF9t
b3VzZV9tb3ZlKEV2YXNfT2JqZWN0KiBvLCBjb25zdCBFdmFzX0V2ZW50X01vdXNlX01vdmUqIGV2
KQorRWluYV9Cb29sIGV3a19mcmFtZV9mZWVkX21vdXNlX21vdmUoRXZhc19PYmplY3QqIGV3a0Zy
YW1lLCBjb25zdCBFdmFzX0V2ZW50X01vdXNlX01vdmUqIGV2KQogewotICAgIEVXS19GUkFNRV9T
RF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VU
X09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOX1ZBTChldiwgRUlOQV9GQUxTRSk7CiAKICAgICBXZWJDb3JlOjpGcmFt
ZVZpZXcqIHZpZXcgPSBzZC0+ZnJhbWUtPnZpZXcoKTsKICAgICBEQkcoIm89JXAsIHZpZXc9JXAs
IHBvczogb2xkPSVkLCVkLCBuZXc9JWQsJWQsIGJ1dHRvbnM9JWQiLAotICAgICAgICBvLCB2aWV3
LCBldi0+Y3VyLmNhbnZhcy54LCBldi0+Y3VyLmNhbnZhcy55LAorICAgICAgICBld2tGcmFtZSwg
dmlldywgZXYtPmN1ci5jYW52YXMueCwgZXYtPmN1ci5jYW52YXMueSwKICAgICAgICAgZXYtPnBy
ZXYuY2FudmFzLngsIGV2LT5wcmV2LmNhbnZhcy55LCBldi0+YnV0dG9ucyk7CiAgICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHZpZXcsIEVJTkFfRkFMU0UpOwogCkBAIC05MjMsMTMg
KzkyMywxMyBAQCBFaW5hX0Jvb2wgZXdrX2ZyYW1lX2ZlZWRfbW91c2VfbW92ZShFdmFzX09iamVj
dCogbywgY29uc3QgRXZhc19FdmVudF9Nb3VzZV9Nb3ZlKgogICAgIHJldHVybiBzZC0+ZnJhbWUt
PmV2ZW50SGFuZGxlcigpLT5tb3VzZU1vdmVkKGV2ZW50KTsKIH0KIAotRWluYV9Cb29sIGV3a19m
cmFtZV9mZWVkX3RvdWNoX2V2ZW50KEV2YXNfT2JqZWN0KiBvLCBFd2tfVG91Y2hfRXZlbnRfVHlw
ZSBhY3Rpb24sIEVpbmFfTGlzdCogcG9pbnRzLCBpbnQgbWV0YVN0YXRlKQorRWluYV9Cb29sIGV3
a19mcmFtZV9mZWVkX3RvdWNoX2V2ZW50KEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgRXdrX1RvdWNo
X0V2ZW50X1R5cGUgYWN0aW9uLCBFaW5hX0xpc3QqIHBvaW50cywgaW50IG1ldGFTdGF0ZSkKIHsK
ICAgICBFaW5hX0Jvb2wgcmV0ID0gRUlOQV9GQUxTRTsKIAogI2lmIEVOQUJMRShUT1VDSF9FVkVO
VFMpCiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHBvaW50cywgRUlOQV9GQUxT
RSk7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVChvLCBzZCk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVChl
d2tGcmFtZSwgc2QpOwogCiAgICAgaWYgKCFzZCB8fCAhc2QtPmZyYW1lIHx8ICFld2tfdmlld19u
ZWVkX3RvdWNoX2V2ZW50c19nZXQoc2QtPnZpZXcpKQogICAgICAgICByZXR1cm4gRUlOQV9GQUxT
RTsKQEAgLTEwMjUsMTQgKzEwMjUsMTQgQEAgc3RhdGljIGlubGluZSBFaW5hX0Jvb2wgX2V3a19m
cmFtZV9oYW5kbGVfa2V5X3Njcm9sbGluZyhXZWJDb3JlOjpGcmFtZSogZnJhbWUsIGMKICAgICBy
ZXR1cm4gRUlOQV9UUlVFOwogfQogCi1FaW5hX0Jvb2wgZXdrX2ZyYW1lX2ZlZWRfa2V5X2Rvd24o
RXZhc19PYmplY3QqIG8sIGNvbnN0IEV2YXNfRXZlbnRfS2V5X0Rvd24qIGV2KQorRWluYV9Cb29s
IGV3a19mcmFtZV9mZWVkX2tleV9kb3duKEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgY29uc3QgRXZh
c19FdmVudF9LZXlfRG93biogZXYpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4o
bywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0Zy
YW1lLCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFM
KHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5f
VkFMKGV2LCBFSU5BX0ZBTFNFKTsKIAogICAgIERCRygibz0lcCBrZXluYW1lPSVzIChrZXk9JXMs
IHN0cmluZz0lcykiLAotICAgICAgICBvLCBldi0+a2V5bmFtZSwgZXYtPmtleSA/IGV2LT5rZXkg
OiAiIiwgZXYtPnN0cmluZyA/IGV2LT5zdHJpbmcgOiAiIik7CisgICAgICAgIGV3a0ZyYW1lLCBl
di0+a2V5bmFtZSwgZXYtPmtleSA/IGV2LT5rZXkgOiAiIiwgZXYtPnN0cmluZyA/IGV2LT5zdHJp
bmcgOiAiIik7CiAKICAgICBXZWJDb3JlOjpQbGF0Zm9ybUtleWJvYXJkRXZlbnQgZXZlbnQoZXYp
OwogICAgIGlmIChzZC0+ZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5rZXlFdmVudChldmVudCkpCkBA
IC0xMDQxLDIyICsxMDQxLDIyIEBAIEVpbmFfQm9vbCBld2tfZnJhbWVfZmVlZF9rZXlfZG93bihF
dmFzX09iamVjdCogbywgY29uc3QgRXZhc19FdmVudF9LZXlfRG93biogZXYpCiAgICAgcmV0dXJu
IF9ld2tfZnJhbWVfaGFuZGxlX2tleV9zY3JvbGxpbmcoc2QtPmZyYW1lLCBldmVudCk7CiB9CiAK
LUVpbmFfQm9vbCBld2tfZnJhbWVfZmVlZF9rZXlfdXAoRXZhc19PYmplY3QqIG8sIGNvbnN0IEV2
YXNfRXZlbnRfS2V5X1VwKiBldikKK0VpbmFfQm9vbCBld2tfZnJhbWVfZmVlZF9rZXlfdXAoRXZh
c19PYmplY3QqIGV3a0ZyYW1lLCBjb25zdCBFdmFzX0V2ZW50X0tleV9VcCogZXYpCiB7Ci0gICAg
RVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19G
UkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7CiAgICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGV2LCBFSU5BX0ZBTFNFKTsKIAogICAgIERC
Rygibz0lcCBrZXluYW1lPSVzIChrZXk9JXMsIHN0cmluZz0lcykiLAotICAgICAgICBvLCBldi0+
a2V5bmFtZSwgZXYtPmtleSA/IGV2LT5rZXkgOiAiIiwgZXYtPnN0cmluZyA/IGV2LT5zdHJpbmcg
OiAiIik7CisgICAgICAgIGV3a0ZyYW1lLCBldi0+a2V5bmFtZSwgZXYtPmtleSA/IGV2LT5rZXkg
OiAiIiwgZXYtPnN0cmluZyA/IGV2LT5zdHJpbmcgOiAiIik7CiAKICAgICBXZWJDb3JlOjpQbGF0
Zm9ybUtleWJvYXJkRXZlbnQgZXZlbnQoZXYpOwogICAgIHJldHVybiBzZC0+ZnJhbWUtPmV2ZW50
SGFuZGxlcigpLT5rZXlFdmVudChldmVudCk7CiB9CiAKLUV3a19UZXh0X1NlbGVjdGlvbl9UeXBl
IGV3a19mcmFtZV90ZXh0X3NlbGVjdGlvbl90eXBlX2dldChjb25zdCBFdmFzX09iamVjdCogbykK
K0V3a19UZXh0X1NlbGVjdGlvbl9UeXBlIGV3a19mcmFtZV90ZXh0X3NlbGVjdGlvbl90eXBlX2dl
dChjb25zdCBFdmFzX09iamVjdCogZXdrRnJhbWUpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9P
Ul9SRVRVUk4obywgc2QsIEVXS19URVhUX1NFTEVDVElPTl9OT05FKTsKKyAgICBFV0tfRlJBTUVf
U0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVXS19URVhUX1NFTEVDVElPTl9OT05FKTsK
ICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFV0tfVEVYVF9T
RUxFQ1RJT05fTk9ORSk7CiAKICAgICBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbiogY29udHJvbGxl
ciA9IHNkLT5mcmFtZS0+c2VsZWN0aW9uKCk7CkBAIC0xMTAwLDEyICsxMTAwLDEyIEBAIEV2YXNf
T2JqZWN0KiBld2tfZnJhbWVfYWRkKEV2YXMqIGUpCiAgKgogICogVGhpcyBpcyBpbnRlcm5hbCBh
bmQgc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCBieSBleHRlcm5hbCB1c2Vycy4KICAqLwotRWluYV9C
b29sIGV3a19mcmFtZV9pbml0KEV2YXNfT2JqZWN0KiBvLCBFdmFzX09iamVjdCogdmlldywgV2Vi
Q29yZTo6RnJhbWUqIGZyYW1lKQorRWluYV9Cb29sIGV3a19mcmFtZV9pbml0KEV2YXNfT2JqZWN0
KiBld2tGcmFtZSwgRXZhc19PYmplY3QqIHZpZXcsIFdlYkNvcmU6OkZyYW1lKiBmcmFtZSkKIHsK
LSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAg
RVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsKICAg
ICBpZiAoIXNkLT5mcmFtZSkgewogICAgICAgICBXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEVm
bCogZmxjID0gX2V3a19mcmFtZV9sb2FkZXJfZWZsX2dldChmcmFtZSk7Ci0gICAgICAgIGZsYy0+
c2V0V2ViRnJhbWUobyk7CisgICAgICAgIGZsYy0+c2V0V2ViRnJhbWUoZXdrRnJhbWUpOwogICAg
ICAgICBzZC0+ZnJhbWUgPSBmcmFtZTsKICAgICAgICAgc2QtPnZpZXcgPSB2aWV3OwogICAgICAg
ICBmcmFtZS0+aW5pdCgpOwpAQCAtMTExMyw3ICsxMTEzLDcgQEAgRWluYV9Cb29sIGV3a19mcmFt
ZV9pbml0KEV2YXNfT2JqZWN0KiBvLCBFdmFzX09iamVjdCogdmlldywgV2ViQ29yZTo6RnJhbWUq
IGZyYW0KICAgICB9CiAKICAgICBFUlIoImZyYW1lICVwIGFscmVhZHkgc2V0IGZvciAlcCwgaWdu
b3JlZCBuZXcgJXAiLAotICAgICAgICBzZC0+ZnJhbWUsIG8sIGZyYW1lKTsKKyAgICAgICAgc2Qt
PmZyYW1lLCBld2tGcmFtZSwgZnJhbWUpOwogICAgIHJldHVybiBFSU5BX0ZBTFNFOwogfQogCkBA
IC0xMTIyLDkgKzExMjIsOSBAQCBFaW5hX0Jvb2wgZXdrX2ZyYW1lX2luaXQoRXZhc19PYmplY3Qq
IG8sIEV2YXNfT2JqZWN0KiB2aWV3LCBXZWJDb3JlOjpGcmFtZSogZnJhbQogICoKICAqIEFkZHMg
Y2hpbGQgdG8gdGhlIGZyYW1lLgogICovCi1FaW5hX0Jvb2wgZXdrX2ZyYW1lX2NoaWxkX2FkZChF
dmFzX09iamVjdCogbywgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkZyYW1lPiBjaGlsZCwgY29u
c3QgV1RGOjpTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYkNvcmU6OktVUkwmIHVybCwgY29uc3QgV1RG
OjpTdHJpbmcmIHJlZmVycmVyKQorRWluYV9Cb29sIGV3a19mcmFtZV9jaGlsZF9hZGQoRXZhc19P
YmplY3QqIGV3a0ZyYW1lLCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6RnJhbWU+IGNoaWxkLCBj
b25zdCBXVEY6OlN0cmluZyYgbmFtZSwgY29uc3QgV2ViQ29yZTo6S1VSTCYgdXJsLCBjb25zdCBX
VEY6OlN0cmluZyYgcmVmZXJyZXIpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4o
bywgc2QsIDApOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwg
MCk7CiAgICAgY2hhciBidWZbMjU2XTsKICAgICBFdmFzX09iamVjdCogZnJhbWU7CiAgICAgV2Vi
Q29yZTo6RnJhbWUqIGNmOwpAQCAtMTE0OCw3ICsxMTQ4LDcgQEAgRWluYV9Cb29sIGV3a19mcmFt
ZV9jaGlsZF9hZGQoRXZhc19PYmplY3QqIG8sIFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpGcmFt
ZT4gY2gKICAgICB9CiAgICAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIkVXS19GcmFtZTpj
aGlsZC8lcyIsIG5hbWUudXRmOCgpLmRhdGEoKSk7CiAgICAgZXZhc19vYmplY3RfbmFtZV9zZXQo
ZnJhbWUsIGJ1Zik7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfbWVtYmVyX2FkZChmcmFtZSwgbyk7
CisgICAgZXZhc19vYmplY3Rfc21hcnRfbWVtYmVyX2FkZChmcmFtZSwgZXdrRnJhbWUpOwogICAg
IGV2YXNfb2JqZWN0X3Nob3coZnJhbWUpOwogCiAgICAgLy8gVGhlIGNyZWF0aW9uIG9mIHRoZSBm
cmFtZSBtYXkgaGF2ZSBydW4gYXJiaXRyYXJ5IEphdmFTY3JpcHQgdGhhdCByZW1vdmVkIGl0IGZy
b20gdGhlIHBhZ2UgYWxyZWFkeS4KQEAgLTExNzcsMTIgKzExNzcsMTIgQEAgRWluYV9Cb29sIGV3
a19mcmFtZV9jaGlsZF9hZGQoRXZhc19PYmplY3QqIG8sIFdURjo6UGFzc1JlZlB0cjxXZWJDb3Jl
OjpGcmFtZT4gY2gKICAqIEBwYXJhbSBvIFRoZSBld2sgZnJhbWUgdG8gYWN0IHVwb24uCiAgKiBA
cGFyYW0gbmV3UGFyZW50IFRoZSBuZXcgdmlldyB0aGF0IHdpbGwgYmUgc2V0IGFzIHRoZSBwYXJl
bnQgb2YgdGhlIGZyYW1lLgogICovCi12b2lkIGV3a19mcmFtZV92aWV3X3NldChFdmFzX09iamVj
dCogbywgRXZhc19PYmplY3QqIG5ld1BhcmVudCkKK3ZvaWQgZXdrX2ZyYW1lX3ZpZXdfc2V0KEV2
YXNfT2JqZWN0KiBld2tGcmFtZSwgRXZhc19PYmplY3QqIG5ld1BhcmVudCkKIHsKLSAgICBFV0tf
RlJBTUVfU0RfR0VUX09SX1JFVFVSTihvLCBzZCk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9S
RVRVUk4oZXdrRnJhbWUsIHNkKTsKIAotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X21lbWJlcl9kZWwo
byk7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfbWVtYmVyX2FkZChvLCBuZXdQYXJlbnQpOworICAg
IGV2YXNfb2JqZWN0X3NtYXJ0X21lbWJlcl9kZWwoZXdrRnJhbWUpOworICAgIGV2YXNfb2JqZWN0
X3NtYXJ0X21lbWJlcl9hZGQoZXdrRnJhbWUsIG5ld1BhcmVudCk7CiAKICAgICBzZC0+dmlldyA9
IG5ld1BhcmVudDsKIH0KQEAgLTExOTEsMTAgKzExOTEsMTAgQEAgdm9pZCBld2tfZnJhbWVfdmll
d19zZXQoRXZhc19PYmplY3QqIG8sIEV2YXNfT2JqZWN0KiBuZXdQYXJlbnQpCiAgKiBAaW50ZXJu
YWwKICAqIEZyYW1lIHdhcyBkZXN0cm95ZWQgYnkgbG9hZGVyLCByZW1vdmUgaW50ZXJuYWwgcmVm
ZXJlbmNlLgogICovCi12b2lkIGV3a19mcmFtZV9jb3JlX2dvbmUoRXZhc19PYmplY3QqIG8pCit2
b2lkIGV3a19mcmFtZV9jb3JlX2dvbmUoRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewotICAgIERC
Rygibz0lcCIsIG8pOwotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkKTsKKyAg
ICBEQkcoIm89JXAiLCBld2tGcmFtZSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrRnJhbWUsIHNkKTsKICAgICBzZC0+ZnJhbWUgPSAwOwogfQogCkBAIC0xMjA1LDkgKzEyMDUs
OSBAQCB2b2lkIGV3a19mcmFtZV9jb3JlX2dvbmUoRXZhc19PYmplY3QqIG8pCiAgKiBBdm9pZCB1
c2luZyB0aGlzIGNhbGwgZnJvbSBvdXRzaWRlLCBhZGQgc3BlY2lmaWMgZXdrX2ZyYW1lXyoKICAq
IGFjdGlvbnMgaW5zdGVhZC4KICAqLwotV2ViQ29yZTo6RnJhbWUqIGV3a19mcmFtZV9jb3JlX2dl
dChjb25zdCBFdmFzX09iamVjdCogbykKK1dlYkNvcmU6OkZyYW1lKiBld2tfZnJhbWVfY29yZV9n
ZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRf
T1JfUkVUVVJOKG8sIHNkLCAwKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tG
cmFtZSwgc2QsIDApOwogICAgIHJldHVybiBzZC0+ZnJhbWU7CiB9CiAKQEAgLTEyMjQsOSArMTIy
NCw5IEBAIFdlYkNvcmU6OkZyYW1lKiBld2tfZnJhbWVfY29yZV9nZXQoY29uc3QgRXZhc19PYmpl
Y3QqIG8pCiAgKgogICogRW1pdHMgc2lnbmFsOiAicmVzb3VyY2UscmVxdWVzdCx3aWxsc2VuZCIK
ICAqLwotdm9pZCBld2tfZnJhbWVfcmVxdWVzdF93aWxsX3NlbmQoRXZhc19PYmplY3QqIG8sIEV3
a19GcmFtZV9SZXNvdXJjZV9SZXF1ZXN0KiByZXF1ZXN0KQordm9pZCBld2tfZnJhbWVfcmVxdWVz
dF93aWxsX3NlbmQoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBFd2tfRnJhbWVfUmVzb3VyY2VfUmVx
dWVzdCogcmVxdWVzdCkKIHsKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKG8s
ICJyZXNvdXJjZSxyZXF1ZXN0LHdpbGxzZW5kIiwgcmVxdWVzdCk7CisgICAgZXZhc19vYmplY3Rf
c21hcnRfY2FsbGJhY2tfY2FsbChld2tGcmFtZSwgInJlc291cmNlLHJlcXVlc3Qsd2lsbHNlbmQi
LCByZXF1ZXN0KTsKIH0KIAogLyoqCkBAIC0xMjM4LDkgKzEyMzgsOSBAQCB2b2lkIGV3a19mcmFt
ZV9yZXF1ZXN0X3dpbGxfc2VuZChFdmFzX09iamVjdCogbywgRXdrX0ZyYW1lX1Jlc291cmNlX1Jl
cXVlc3QqIHJlcQogICoKICAqIEVtaXRzIHNpZ25hbDogInJlc291cmNlLHJlcXVlc3QsbmV3Igog
ICovCi12b2lkIGV3a19mcmFtZV9yZXF1ZXN0X2Fzc2lnbl9pZGVudGlmaWVyKEV2YXNfT2JqZWN0
KiBvLCBjb25zdCBFd2tfRnJhbWVfUmVzb3VyY2VfUmVxdWVzdCogcmVxdWVzdCkKK3ZvaWQgZXdr
X2ZyYW1lX3JlcXVlc3RfYXNzaWduX2lkZW50aWZpZXIoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBj
b25zdCBFd2tfRnJhbWVfUmVzb3VyY2VfUmVxdWVzdCogcmVxdWVzdCkKIHsKLSAgICBldmFzX29i
amVjdF9zbWFydF9jYWxsYmFja19jYWxsKG8sICJyZXNvdXJjZSxyZXF1ZXN0LG5ldyIsICh2b2lk
KilyZXF1ZXN0KTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKGV3a0ZyYW1l
LCAicmVzb3VyY2UscmVxdWVzdCxuZXciLCAodm9pZCopcmVxdWVzdCk7CiB9CiAKIC8qKgpAQCAt
MTI1MSw5ICsxMjUxLDkgQEAgdm9pZCBld2tfZnJhbWVfcmVxdWVzdF9hc3NpZ25faWRlbnRpZmll
cihFdmFzX09iamVjdCogbywgY29uc3QgRXdrX0ZyYW1lX1Jlc291cmMKICAqCiAgKiBFbWl0cyBz
aWduYWw6ICJuYXZpZ2F0aW9uLGZpcnN0IgogICovCi12b2lkIGV3a19mcmFtZV9kaWRfcGVyZm9y
bV9maXJzdF9uYXZpZ2F0aW9uKEV2YXNfT2JqZWN0KiBvKQordm9pZCBld2tfZnJhbWVfZGlkX3Bl
cmZvcm1fZmlyc3RfbmF2aWdhdGlvbihFdmFzX09iamVjdCogZXdrRnJhbWUpCiB7Ci0gICAgZXZh
c19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChvLCAibmF2aWdhdGlvbixmaXJzdCIsIDApOwor
ICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdrRnJhbWUsICJuYXZpZ2F0aW9u
LGZpcnN0IiwgMCk7CiB9CiAKIC8qKgpAQCAtMTI2NSw5ICsxMjY1LDkgQEAgdm9pZCBld2tfZnJh
bWVfZGlkX3BlcmZvcm1fZmlyc3RfbmF2aWdhdGlvbihFdmFzX09iamVjdCogbykKICAqCiAgKiBF
bWl0cyBzaWduYWw6ICJzdGF0ZSxzYXZlIgogICovCi12b2lkIGV3a19mcmFtZV92aWV3X3N0YXRl
X3NhdmUoRXZhc19PYmplY3QqIG8sIFdlYkNvcmU6Okhpc3RvcnlJdGVtKiBpdGVtKQordm9pZCBl
d2tfZnJhbWVfdmlld19zdGF0ZV9zYXZlKEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgV2ViQ29yZTo6
SGlzdG9yeUl0ZW0qIGl0ZW0pCiB7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2Fs
bChvLCAic3RhdGUsc2F2ZSIsIDApOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2Nh
bGwoZXdrRnJhbWUsICJzdGF0ZSxzYXZlIiwgMCk7CiB9CiAKIC8qKgpAQCAtMTI3NiwxNiArMTI3
NiwxNiBAQCB2b2lkIGV3a19mcmFtZV92aWV3X3N0YXRlX3NhdmUoRXZhc19PYmplY3QqIG8sIFdl
YkNvcmU6Okhpc3RvcnlJdGVtKiBpdGVtKQogICoKICAqIEVtaXRzIHNpZ25hbDogImxvYWQsc3Rh
cnRlZCIgd2l0aCBubyBwYXJhbWV0ZXJzLgogICovCi12b2lkIGV3a19mcmFtZV9sb2FkX3N0YXJ0
ZWQoRXZhc19PYmplY3QqIG8pCit2b2lkIGV3a19mcmFtZV9sb2FkX3N0YXJ0ZWQoRXZhc19PYmpl
Y3QqIGV3a0ZyYW1lKQogewogICAgIEV2YXNfT2JqZWN0KiBtYWluX2ZyYW1lOwotICAgIERCRygi
bz0lcCIsIG8pOwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwobywgImxvYWQs
c3RhcnRlZCIsIDApOwotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkKTsKKyAg
ICBEQkcoIm89JXAiLCBld2tGcmFtZSk7CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tf
Y2FsbChld2tGcmFtZSwgImxvYWQsc3RhcnRlZCIsIDApOworICAgIEVXS19GUkFNRV9TRF9HRVRf
T1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCk7CiAgICAgZXdrX3ZpZXdfbG9hZF9zdGFydGVkKHNkLT52
aWV3KTsKIAogICAgIG1haW5fZnJhbWUgPSBld2tfdmlld19mcmFtZV9tYWluX2dldChzZC0+dmll
dyk7Ci0gICAgaWYgKG1haW5fZnJhbWUgPT0gbykKKyAgICBpZiAobWFpbl9mcmFtZSA9PSBld2tG
cmFtZSkKICAgICAgICAgZXdrX3ZpZXdfZnJhbWVfbWFpbl9sb2FkX3N0YXJ0ZWQoc2QtPnZpZXcp
OwogfQogCkBAIC0xMjk3LDkgKzEyOTcsOSBAQCB2b2lkIGV3a19mcmFtZV9sb2FkX3N0YXJ0ZWQo
RXZhc19PYmplY3QqIG8pCiAgKgogICogRW1pdHMgc2lnbmFsOiAibG9hZCxwcm92aXNpb25hbCIg
d2l0aCBubyBwYXJhbWV0ZXJzLgogICovCi12b2lkIGV3a19mcmFtZV9sb2FkX3Byb3Zpc2lvbmFs
KEV2YXNfT2JqZWN0KiBvKQordm9pZCBld2tfZnJhbWVfbG9hZF9wcm92aXNpb25hbChFdmFzX09i
amVjdCogZXdrRnJhbWUpCiB7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChv
LCAibG9hZCxwcm92aXNpb25hbCIsIDApOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNr
X2NhbGwoZXdrRnJhbWUsICJsb2FkLHByb3Zpc2lvbmFsIiwgMCk7CiB9CiAKIC8qKgpAQCAtMTMx
MCw5ICsxMzEwLDkgQEAgdm9pZCBld2tfZnJhbWVfbG9hZF9wcm92aXNpb25hbChFdmFzX09iamVj
dCogbykKICAqCiAgKiBFbWl0cyBzaWduYWw6ICJsb2FkLGZpcnN0bGF5b3V0LGZpbmlzaGVkIiB3
aXRoIG5vIHBhcmFtZXRlcnMuCiAgKi8KLXZvaWQgZXdrX2ZyYW1lX2xvYWRfZmlyc3RsYXlvdXRf
ZmluaXNoZWQoRXZhc19PYmplY3QqIG8pCit2b2lkIGV3a19mcmFtZV9sb2FkX2ZpcnN0bGF5b3V0
X2ZpbmlzaGVkKEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsKLSAgICBldmFzX29iamVjdF9zbWFy
dF9jYWxsYmFja19jYWxsKG8sICJsb2FkLGZpcnN0bGF5b3V0LGZpbmlzaGVkIiwgMCk7CisgICAg
ZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChld2tGcmFtZSwgImxvYWQsZmlyc3RsYXlv
dXQsZmluaXNoZWQiLCAwKTsKIH0KIAogLyoqCkBAIC0xMzIzLDkgKzEzMjMsOSBAQCB2b2lkIGV3
a19mcmFtZV9sb2FkX2ZpcnN0bGF5b3V0X2ZpbmlzaGVkKEV2YXNfT2JqZWN0KiBvKQogICoKICAq
IEVtaXRzIHNpZ25hbDogImxvYWQsbm9uZW1wdHlsYXlvdXQsZmluaXNoZWQiIHdpdGggbm8gcGFy
YW1ldGVycy4KICAqLwotdm9pZCBld2tfZnJhbWVfbG9hZF9maXJzdGxheW91dF9ub25lbXB0eV9m
aW5pc2hlZChFdmFzX09iamVjdCogbykKK3ZvaWQgZXdrX2ZyYW1lX2xvYWRfZmlyc3RsYXlvdXRf
bm9uZW1wdHlfZmluaXNoZWQoRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewotICAgIGV2YXNfb2Jq
ZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwobywgImxvYWQsbm9uZW1wdHlsYXlvdXQsZmluaXNoZWQi
LCAwKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKGV3a0ZyYW1lLCAibG9h
ZCxub25lbXB0eWxheW91dCxmaW5pc2hlZCIsIDApOwogfQogCiAvKioKQEAgLTEzMzYsMTEgKzEz
MzYsMTEgQEAgdm9pZCBld2tfZnJhbWVfbG9hZF9maXJzdGxheW91dF9ub25lbXB0eV9maW5pc2hl
ZChFdmFzX09iamVjdCogbykKICAqCiAgKiBFbWl0cyBzaWduYWw6ICJsb2FkLGRvY3VtZW50LGZp
bmlzaGVkIiB3aXRoIG5vIHBhcmFtZXRlcnMuCiAgKi8KLXZvaWQgZXdrX2ZyYW1lX2xvYWRfZG9j
dW1lbnRfZmluaXNoZWQoRXZhc19PYmplY3QqIG8pCit2b2lkIGV3a19mcmFtZV9sb2FkX2RvY3Vt
ZW50X2ZpbmlzaGVkKEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsKLSAgICBldmFzX29iamVjdF9z
bWFydF9jYWxsYmFja19jYWxsKG8sICJsb2FkLGRvY3VtZW50LGZpbmlzaGVkIiwgMCk7Ci0gICAg
RVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4obywgc2QpOwotICAgIGV3a192aWV3X2xvYWRfZG9j
dW1lbnRfZmluaXNoZWQoc2QtPnZpZXcsIG8pOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxi
YWNrX2NhbGwoZXdrRnJhbWUsICJsb2FkLGRvY3VtZW50LGZpbmlzaGVkIiwgMCk7CisgICAgRVdL
X0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkKTsKKyAgICBld2tfdmlld19sb2Fk
X2RvY3VtZW50X2ZpbmlzaGVkKHNkLT52aWV3LCBld2tGcmFtZSk7CiB9CiAKIC8qKgpAQCAtMTM1
MywxNSArMTM1MywxNSBAQCB2b2lkIGV3a19mcmFtZV9sb2FkX2RvY3VtZW50X2ZpbmlzaGVkKEV2
YXNfT2JqZWN0KiBvKQogICogQG5vdGUgdGhlcmUgc2hvdWxkIG5vdGJlIGFueSBlcnJvciBzdHVm
ZiBoZXJlLCBidXQgdHJ5aW5nIHRvIGJlCiAgKiAgICAgICBjb21wYXRpYmxlIHdpdGggcHJldmlv
dXMgV2ViS2l0LgogICovCi12b2lkIGV3a19mcmFtZV9sb2FkX2ZpbmlzaGVkKEV2YXNfT2JqZWN0
KiBvLCBjb25zdCBjaGFyKiBlcnJvcl9kb21haW4sIGludCBlcnJvcl9jb2RlLCBFaW5hX0Jvb2wg
aXNfY2FuY2VsbGF0aW9uLCBjb25zdCBjaGFyKiBlcnJvcl9kZXNjcmlwdGlvbiwgY29uc3QgY2hh
ciogZmFpbGluZ191cmwpCit2b2lkIGV3a19mcmFtZV9sb2FkX2ZpbmlzaGVkKEV2YXNfT2JqZWN0
KiBld2tGcmFtZSwgY29uc3QgY2hhciogZXJyb3JfZG9tYWluLCBpbnQgZXJyb3JfY29kZSwgRWlu
YV9Cb29sIGlzX2NhbmNlbGxhdGlvbiwgY29uc3QgY2hhciogZXJyb3JfZGVzY3JpcHRpb24sIGNv
bnN0IGNoYXIqIGZhaWxpbmdfdXJsKQogewogICAgIEV3a19GcmFtZV9Mb2FkX0Vycm9yIGJ1Ziwg
KiBlcnJvcjsKICAgICBpZiAoIWVycm9yX2RvbWFpbikgewotICAgICAgICBEQkcoIm89JXAsIHN1
Y2Nlc3MuIiwgbyk7CisgICAgICAgIERCRygibz0lcCwgc3VjY2Vzcy4iLCBld2tGcmFtZSk7CiAg
ICAgICAgIGVycm9yID0gMDsKICAgICB9IGVsc2UgewogICAgICAgICBEQkcoIm89JXAsIGVycm9y
PSVzICglZCwgY2FuY2VsbGF0aW9uPSVoaHUpIFwiJXNcIiwgdXJsPSVzIiwKLSAgICAgICAgICAg
IG8sIGVycm9yX2RvbWFpbiwgZXJyb3JfY29kZSwgaXNfY2FuY2VsbGF0aW9uLAorICAgICAgICAg
ICAgZXdrRnJhbWUsIGVycm9yX2RvbWFpbiwgZXJyb3JfY29kZSwgaXNfY2FuY2VsbGF0aW9uLAog
ICAgICAgICAgICAgZXJyb3JfZGVzY3JpcHRpb24sIGZhaWxpbmdfdXJsKTsKIAogICAgICAgICBi
dWYuZG9tYWluID0gZXJyb3JfZG9tYWluOwpAQCAtMTM2OSwxMSArMTM2OSwxMSBAQCB2b2lkIGV3
a19mcmFtZV9sb2FkX2ZpbmlzaGVkKEV2YXNfT2JqZWN0KiBvLCBjb25zdCBjaGFyKiBlcnJvcl9k
b21haW4sIGludCBlcnJvcgogICAgICAgICBidWYuaXNfY2FuY2VsbGF0aW9uID0gaXNfY2FuY2Vs
bGF0aW9uOwogICAgICAgICBidWYuZGVzY3JpcHRpb24gPSBlcnJvcl9kZXNjcmlwdGlvbjsKICAg
ICAgICAgYnVmLmZhaWxpbmdfdXJsID0gZmFpbGluZ191cmw7Ci0gICAgICAgIGJ1Zi5mcmFtZSA9
IG87CisgICAgICAgIGJ1Zi5mcmFtZSA9IGV3a0ZyYW1lOwogICAgICAgICBlcnJvciA9ICZidWY7
CiAgICAgfQotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwobywgImxvYWQsZmlu
aXNoZWQiLCBlcnJvcik7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4obywgc2QpOwor
ICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdrRnJhbWUsICJsb2FkLGZpbmlz
aGVkIiwgZXJyb3IpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBz
ZCk7CiAgICAgZXdrX3ZpZXdfbG9hZF9maW5pc2hlZChzZC0+dmlldywgZXJyb3IpOwogfQogCkBA
IC0xMzgzLDEyICsxMzgzLDEyIEBAIHZvaWQgZXdrX2ZyYW1lX2xvYWRfZmluaXNoZWQoRXZhc19P
YmplY3QqIG8sIGNvbnN0IGNoYXIqIGVycm9yX2RvbWFpbiwgaW50IGVycm9yCiAgKgogICogRW1p
dHMgc2lnbmFsOiAibG9hZCxlcnJvciIgd2l0aCBwb2ludGVyIHRvIEV3a19GcmFtZV9Mb2FkX0Vy
cm9yLgogICovCi12b2lkIGV3a19mcmFtZV9sb2FkX2Vycm9yKEV2YXNfT2JqZWN0KiBvLCBjb25z
dCBjaGFyKiBlcnJvcl9kb21haW4sIGludCBlcnJvcl9jb2RlLCBFaW5hX0Jvb2wgaXNfY2FuY2Vs
bGF0aW9uLCBjb25zdCBjaGFyKiBlcnJvcl9kZXNjcmlwdGlvbiwgY29uc3QgY2hhciogZmFpbGlu
Z191cmwpCit2b2lkIGV3a19mcmFtZV9sb2FkX2Vycm9yKEV2YXNfT2JqZWN0KiBld2tGcmFtZSwg
Y29uc3QgY2hhciogZXJyb3JfZG9tYWluLCBpbnQgZXJyb3JfY29kZSwgRWluYV9Cb29sIGlzX2Nh
bmNlbGxhdGlvbiwgY29uc3QgY2hhciogZXJyb3JfZGVzY3JpcHRpb24sIGNvbnN0IGNoYXIqIGZh
aWxpbmdfdXJsKQogewogICAgIEV3a19GcmFtZV9Mb2FkX0Vycm9yIGVycm9yOwogCiAgICAgREJH
KCJvPSVwLCBlcnJvcj0lcyAoJWQsIGNhbmNlbGxhdGlvbj0laGh1KSBcIiVzXCIsIHVybD0lcyIs
Ci0gICAgICAgIG8sIGVycm9yX2RvbWFpbiwgZXJyb3JfY29kZSwgaXNfY2FuY2VsbGF0aW9uLAor
ICAgICAgICBld2tGcmFtZSwgZXJyb3JfZG9tYWluLCBlcnJvcl9jb2RlLCBpc19jYW5jZWxsYXRp
b24sCiAgICAgICAgIGVycm9yX2Rlc2NyaXB0aW9uLCBmYWlsaW5nX3VybCk7CiAKICAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTihlcnJvcl9kb21haW4pOwpAQCAtMTM5OCw5ICsxMzk4LDkg
QEAgdm9pZCBld2tfZnJhbWVfbG9hZF9lcnJvcihFdmFzX09iamVjdCogbywgY29uc3QgY2hhciog
ZXJyb3JfZG9tYWluLCBpbnQgZXJyb3JfY28KICAgICBlcnJvci5kb21haW4gPSBlcnJvcl9kb21h
aW47CiAgICAgZXJyb3IuZGVzY3JpcHRpb24gPSBlcnJvcl9kZXNjcmlwdGlvbjsKICAgICBlcnJv
ci5mYWlsaW5nX3VybCA9IGZhaWxpbmdfdXJsOwotICAgIGVycm9yLmZyYW1lID0gbzsKLSAgICBl
dmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKG8sICJsb2FkLGVycm9yIiwgJmVycm9yKTsK
LSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihvLCBzZCk7CisgICAgZXJyb3IuZnJhbWUg
PSBld2tGcmFtZTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKGV3a0ZyYW1l
LCAibG9hZCxlcnJvciIsICZlcnJvcik7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrRnJhbWUsIHNkKTsKICAgICBld2tfdmlld19sb2FkX2Vycm9yKHNkLT52aWV3LCAmZXJyb3Ip
OwogfQogCkBAIC0xNDEwLDE3ICsxNDEwLDE3IEBAIHZvaWQgZXdrX2ZyYW1lX2xvYWRfZXJyb3Io
RXZhc19PYmplY3QqIG8sIGNvbnN0IGNoYXIqIGVycm9yX2RvbWFpbiwgaW50IGVycm9yX2NvCiAg
KgogICogRW1pdHMgc2lnbmFsOiAibG9hZCxwcm9ncmVzcyIgd2l0aCBwb2ludGVyIHRvIGEgZG91
YmxlIGZyb20gMC4wIHRvIDEuMC4KICAqLwotdm9pZCBld2tfZnJhbWVfbG9hZF9wcm9ncmVzc19j
aGFuZ2VkKEV2YXNfT2JqZWN0KiBvKQordm9pZCBld2tfZnJhbWVfbG9hZF9wcm9ncmVzc19jaGFu
Z2VkKEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JF
VFVSTihvLCBzZCk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNk
KTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+ZnJhbWUpOwogCiAgICAgLy8g
VE9ETzogdGhpcyBpcyBwZXIgcGFnZSwgdGhlcmUgc2hvdWxkIGJlIGEgd2F5IHRvIGhhdmUgcGVy
LWZyYW1lLgogICAgIGRvdWJsZSBwcm9ncmVzcyA9IHNkLT5mcmFtZS0+cGFnZSgpLT5wcm9ncmVz
cygpLT5lc3RpbWF0ZWRQcm9ncmVzcygpOwogCi0gICAgREJHKCJvPSVwIChwPSUwLjNmKSIsIG8s
IHByb2dyZXNzKTsKKyAgICBEQkcoIm89JXAgKHA9JTAuM2YpIiwgZXdrRnJhbWUsIHByb2dyZXNz
KTsKIAotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwobywgImxvYWQscHJvZ3Jl
c3MiLCAmcHJvZ3Jlc3MpOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdr
RnJhbWUsICJsb2FkLHByb2dyZXNzIiwgJnByb2dyZXNzKTsKICAgICBld2tfdmlld19sb2FkX3By
b2dyZXNzX2NoYW5nZWQoc2QtPnZpZXcpOwogfQogCkBAIC0xNDMwLDEwICsxNDMwLDEwIEBAIHZv
aWQgZXdrX2ZyYW1lX2xvYWRfcHJvZ3Jlc3NfY2hhbmdlZChFdmFzX09iamVjdCogbykKICAqCiAg
KiBSZXBvcnRzIGNvbnRlbnRzIHNpemUgY2hhbmdlZC4KICAqLwotdm9pZCBld2tfZnJhbWVfY29u
dGVudHNfc2l6ZV9jaGFuZ2VkKEV2YXNfT2JqZWN0KiBvLCBFdmFzX0Nvb3JkIHcsIEV2YXNfQ29v
cmQgaCkKK3ZvaWQgZXdrX2ZyYW1lX2NvbnRlbnRzX3NpemVfY2hhbmdlZChFdmFzX09iamVjdCog
ZXdrRnJhbWUsIEV2YXNfQ29vcmQgdywgRXZhc19Db29yZCBoKQogewotICAgIERCRygibz0lcDog
JWR4JWQiLCBvLCB3LCBoKTsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihvLCBzZCk7
CisgICAgREJHKCJvPSVwOiAlZHglZCIsIGV3a0ZyYW1lLCB3LCBoKTsKKyAgICBFV0tfRlJBTUVf
U0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QpOwogICAgIGlmIChzZC0+Y29udGVudHNfc2l6
ZS53ID09IHcgJiYgc2QtPmNvbnRlbnRzX3NpemUuaCA9PSBoKQogICAgICAgICByZXR1cm47CiAg
ICAgc2QtPmNvbnRlbnRzX3NpemUudyA9IHc7CkBAIC0xNDQxLDcgKzE0NDEsNyBAQCB2b2lkIGV3
a19mcmFtZV9jb250ZW50c19zaXplX2NoYW5nZWQoRXZhc19PYmplY3QqIG8sIEV2YXNfQ29vcmQg
dywgRXZhc19Db29yZCBoKQogICAgIC8vIFRPRE86IHVwZGF0ZSBzb21ldGhpbmcgZWxzZSBpbnRl
cm5hbGx5PwogCiAgICAgRXZhc19Db29yZCBzaXplWzJdID0ge3csIGh9OwotICAgIGV2YXNfb2Jq
ZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwobywgImNvbnRlbnRzLHNpemUsY2hhbmdlZCIsIHNpemUp
OworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdrRnJhbWUsICJjb250ZW50
cyxzaXplLGNoYW5nZWQiLCBzaXplKTsKIH0KIAogLyoqCkBAIC0xNDQ5LDEzICsxNDQ5LDEzIEBA
IHZvaWQgZXdrX2ZyYW1lX2NvbnRlbnRzX3NpemVfY2hhbmdlZChFdmFzX09iamVjdCogbywgRXZh
c19Db29yZCB3LCBFdmFzX0Nvb3JkIGgpCiAgKgogICogUmVwb3J0cyB0aXRsZSBjaGFuZ2VkLgog
ICovCi12b2lkIGV3a19mcmFtZV90aXRsZV9zZXQoRXZhc19PYmplY3QqIG8sIGNvbnN0IGNoYXIq
IHRpdGxlKQordm9pZCBld2tfZnJhbWVfdGl0bGVfc2V0KEV2YXNfT2JqZWN0KiBld2tGcmFtZSwg
Y29uc3QgY2hhciogdGl0bGUpCiB7Ci0gICAgREJHKCJvPSVwLCB0aXRsZT0lcyIsIG8sIHRpdGxl
ID8gdGl0bGUgOiAiKG51bGwpIik7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4obywg
c2QpOworICAgIERCRygibz0lcCwgdGl0bGU9JXMiLCBld2tGcmFtZSwgdGl0bGUgPyB0aXRsZSA6
ICIobnVsbCkiKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2Qp
OwogICAgIGlmICghZWluYV9zdHJpbmdzaGFyZV9yZXBsYWNlKCZzZC0+dGl0bGUsIHRpdGxlKSkK
ICAgICAgICAgcmV0dXJuOwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwobywg
InRpdGxlLGNoYW5nZWQiLCAodm9pZCopc2QtPnRpdGxlKTsKKyAgICBldmFzX29iamVjdF9zbWFy
dF9jYWxsYmFja19jYWxsKGV3a0ZyYW1lLCAidGl0bGUsY2hhbmdlZCIsICh2b2lkKilzZC0+dGl0
bGUpOwogfQogCiAvKioKQEAgLTE0NjMsMTAgKzE0NjMsMTAgQEAgdm9pZCBld2tfZnJhbWVfdGl0
bGVfc2V0KEV2YXNfT2JqZWN0KiBvLCBjb25zdCBjaGFyKiB0aXRsZSkKICAqCiAgKiBDcmVhdGVz
IGEgdmlldy4KICAqLwotdm9pZCBld2tfZnJhbWVfdmlld19jcmVhdGVfZm9yX3ZpZXcoRXZhc19P
YmplY3QqIG8sIEV2YXNfT2JqZWN0KiB2aWV3KQordm9pZCBld2tfZnJhbWVfdmlld19jcmVhdGVf
Zm9yX3ZpZXcoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBFdmFzX09iamVjdCogdmlldykKIHsKLSAg
ICBEQkcoIm89JXAsIHZpZXc9JXAiLCBvLCB2aWV3KTsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09S
X1JFVFVSTihvLCBzZCk7CisgICAgREJHKCJvPSVwLCB2aWV3PSVwIiwgZXdrRnJhbWUsIHZpZXcp
OworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCk7CiAgICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmZyYW1lKTsKICAgICBFdmFzX0Nvb3JkIHcsIGg7
CiAKQEAgLTE0OTAsMTIgKzE0OTAsMTIgQEAgdm9pZCBld2tfZnJhbWVfdmlld19jcmVhdGVfZm9y
X3ZpZXcoRXZhc19PYmplY3QqIG8sIEV2YXNfT2JqZWN0KiB2aWV3KQogCiAgICAgY29uc3QgY2hh
ciogdGhlbWUgPSBld2tfdmlld190aGVtZV9nZXQodmlldyk7CiAgICAgc2QtPmZyYW1lLT52aWV3
KCktPnNldEVkamVUaGVtZSh0aGVtZSk7Ci0gICAgc2QtPmZyYW1lLT52aWV3KCktPnNldEV2YXNP
YmplY3Qobyk7CisgICAgc2QtPmZyYW1lLT52aWV3KCktPnNldEV2YXNPYmplY3QoZXdrRnJhbWUp
OwogfQogCi1zc2l6ZV90IGV3a19mcmFtZV9zb3VyY2VfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBv
LCBjaGFyKiogZnJhbWVfc291cmNlKQorc3NpemVfdCBld2tfZnJhbWVfc291cmNlX2dldChjb25z
dCBFdmFzX09iamVjdCogZXdrRnJhbWUsIGNoYXIqKiBmcmFtZV9zb3VyY2UpCiB7Ci0gICAgRVdL
X0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIC0xKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VU
X09SX1JFVFVSTihld2tGcmFtZSwgc2QsIC0xKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTl9WQUwoc2QtPmZyYW1lLCAtMSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5f
VkFMKHNkLT5mcmFtZS0+ZG9jdW1lbnQoKSwgLTEpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOX1ZBTChmcmFtZV9zb3VyY2UsIC0xKTsKQEAgLTE1NDMsOSArMTU0Myw5IEBAIHNzaXpl
X3QgZXdrX2ZyYW1lX3NvdXJjZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIG8sIGNoYXIqKiBmcmFt
ZV9zb3VyY2UpCiAgICAgcmV0dXJuIHNvdXJjZV9sZW5ndGg7CiB9CiAKLUVpbmFfTGlzdCogZXdr
X2ZyYW1lX3Jlc291cmNlc19sb2NhdGlvbl9nZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCitFaW5h
X0xpc3QqIGV3a19mcmFtZV9yZXNvdXJjZXNfbG9jYXRpb25fZ2V0KGNvbnN0IEV2YXNfT2JqZWN0
KiBld2tGcmFtZSkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgMCk7
CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCAwKTsKICAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCAwKTsKICAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLT5kb2N1bWVudCgpLCAwKTsKIApAQCAt
MTYwOSw5ICsxNjA5LDkgQEAgY2hhciogZXdrX2ZyYW1lX3BsYWluX3RleHRfZ2V0KGNvbnN0IEV2
YXNfT2JqZWN0KiBld2tGcmFtZSkKICAqCiAgKiBFbWl0cyBzaWduYWw6ICJ1cmksY2hhbmdlZCIg
d2l0aCBuZXcgdXJpIGFzIHBhcmFtZXRlci4KICAqLwotRWluYV9Cb29sIGV3a19mcmFtZV91cmlf
Y2hhbmdlZChFdmFzX09iamVjdCogbykKK0VpbmFfQm9vbCBld2tfZnJhbWVfdXJpX2NoYW5nZWQo
RXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJO
KG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tG
cmFtZSwgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZB
TChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOwogICAgIFdURjo6Q1N0cmluZyB1cmkoc2QtPmZyYW1l
LT5kb2N1bWVudCgpLT51cmwoKS5zdHJpbmcoKS51dGY4KCkpOwogCkBAIC0xNjIyLDcgKzE2MjIs
NyBAQCBFaW5hX0Jvb2wgZXdrX2ZyYW1lX3VyaV9jaGFuZ2VkKEV2YXNfT2JqZWN0KiBvKQogICAg
IH0KIAogICAgIGVpbmFfc3RyaW5nc2hhcmVfcmVwbGFjZSgmc2QtPnVyaSwgdXJpLmRhdGEoKSk7
Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChvLCAidXJpLGNoYW5nZWQiLCAo
dm9pZCopc2QtPnVyaSk7CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChld2tG
cmFtZSwgInVyaSxjaGFuZ2VkIiwgKHZvaWQqKXNkLT51cmkpOwogICAgIHJldHVybiBFSU5BX1RS
VUU7CiB9CiAKQEAgLTE2MzEsMTAgKzE2MzEsMTAgQEAgRWluYV9Cb29sIGV3a19mcmFtZV91cmlf
Y2hhbmdlZChFdmFzX09iamVjdCogbykKICAqCiAgKiBGb3JjZXMgbGF5b3V0IGZvciBmcmFtZS4K
ICAqLwotdm9pZCBld2tfZnJhbWVfZm9yY2VfbGF5b3V0KEV2YXNfT2JqZWN0KiBvKQordm9pZCBl
d2tfZnJhbWVfZm9yY2VfbGF5b3V0KEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsKLSAgICBEQkco
Im89JXAiLCBvKTsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihvLCBzZCk7CisgICAg
REJHKCJvPSVwIiwgZXdrRnJhbWUpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3
a0ZyYW1lLCBzZCk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmZyYW1lKTsK
ICAgICBXZWJDb3JlOjpGcmFtZVZpZXcqIHZpZXcgPSBzZC0+ZnJhbWUtPnZpZXcoKTsKICAgICBp
ZiAodmlldykKQEAgLTE2NDYsNyArMTY0Niw3IEBAIHZvaWQgZXdrX2ZyYW1lX2ZvcmNlX2xheW91
dChFdmFzX09iamVjdCogbykKICAqCiAgKiBDcmVhdGVzIHBsdWdpbi4KICAqLwotV1RGOjpQYXNz
UmVmUHRyPFdlYkNvcmU6OldpZGdldD4gZXdrX2ZyYW1lX3BsdWdpbl9jcmVhdGUoRXZhc19PYmpl
Y3QqIG8sIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHBsdWdpblNpemUsIFdlYkNvcmU6OkhUTUxQ
bHVnSW5FbGVtZW50KiBlbGVtZW50LCBjb25zdCBXZWJDb3JlOjpLVVJMJiB1cmwsIGNvbnN0IFdU
Rjo6VmVjdG9yPFdURjo6U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgV1RGOjpWZWN0b3I8V1RG
OjpTdHJpbmc+JiBwYXJhbVZhbHVlcywgY29uc3QgV1RGOjpTdHJpbmcmIG1pbWVUeXBlLCBib29s
IGxvYWRNYW51YWxseSkKK1dURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpXaWRnZXQ+IGV3a19mcmFt
ZV9wbHVnaW5fY3JlYXRlKEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgY29uc3QgV2ViQ29yZTo6SW50
U2l6ZSYgcGx1Z2luU2l6ZSwgV2ViQ29yZTo6SFRNTFBsdWdJbkVsZW1lbnQqIGVsZW1lbnQsIGNv
bnN0IFdlYkNvcmU6OktVUkwmIHVybCwgY29uc3QgV1RGOjpWZWN0b3I8V1RGOjpTdHJpbmc+JiBw
YXJhbU5hbWVzLCBjb25zdCBXVEY6OlZlY3RvcjxXVEY6OlN0cmluZz4mIHBhcmFtVmFsdWVzLCBj
b25zdCBXVEY6OlN0cmluZyYgbWltZVR5cGUsIGJvb2wgbG9hZE1hbnVhbGx5KQogewogICAgIHJl
dHVybiAwOwogfQpAQCAtMTY1OSwxMCArMTY1OSwxMCBAQCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29y
ZTo6V2lkZ2V0PiBld2tfZnJhbWVfcGx1Z2luX2NyZWF0ZShFdmFzX09iamVjdCogbywgY29uc3Qg
VwogICoKICAqIEVtaXRzIHNpZ25hbDogImVkaXRvcmNsaWVudHNlbGVjdGlvbixjaGFuZ2VkIiB3
aXRoIG5vIHBhcmFtZXRlcnMuCiAgKi8KLXZvaWQgZXdrX2ZyYW1lX2VkaXRvcl9jbGllbnRfc2Vs
ZWN0aW9uX2NoYW5nZWQoRXZhc19PYmplY3QqIG8pCit2b2lkIGV3a19mcmFtZV9lZGl0b3JfY2xp
ZW50X3NlbGVjdGlvbl9jaGFuZ2VkKEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsKLSAgICBldmFz
X29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKG8sICJlZGl0b3JjbGllbnQsc2VsZWN0aW9uLGNo
YW5nZWQiLCAwKTsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihvLCBzZCk7CisgICAg
ZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChld2tGcmFtZSwgImVkaXRvcmNsaWVudCxz
ZWxlY3Rpb24sY2hhbmdlZCIsIDApOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3
a0ZyYW1lLCBzZCk7CiAgICAgZXdrX3ZpZXdfZWRpdG9yX2NsaWVudF9zZWxlY3Rpb25fY2hhbmdl
ZChzZC0+dmlldyk7CiB9CiAKQEAgLTE2NzQsOSArMTY3NCw5IEBAIHZvaWQgZXdrX2ZyYW1lX2Vk
aXRvcl9jbGllbnRfc2VsZWN0aW9uX2NoYW5nZWQoRXZhc19PYmplY3QqIG8pCiAgKgogICogRW1p
dHMgc2lnbmFsOiAiZWRpdG9yY2xpZW50LGNvbnRlbnRzLGNoYW5nZWQiIHdpdGggbm8gcGFyYW1l
dGVycy4KICAqLwotdm9pZCBld2tfZnJhbWVfZWRpdG9yX2NsaWVudF9jb250ZW50c19jaGFuZ2Vk
KEV2YXNfT2JqZWN0KiBvKQordm9pZCBld2tfZnJhbWVfZWRpdG9yX2NsaWVudF9jb250ZW50c19j
aGFuZ2VkKEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsKLSAgICBldmFzX29iamVjdF9zbWFydF9j
YWxsYmFja19jYWxsKG8sICJlZGl0b3JjbGllbnQsY29udGVudHMsY2hhbmdlZCIsIDApOwotICAg
IEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkKTsKKyAgICBldmFzX29iamVjdF9zbWFy
dF9jYWxsYmFja19jYWxsKGV3a0ZyYW1lLCAiZWRpdG9yY2xpZW50LGNvbnRlbnRzLGNoYW5nZWQi
LCAwKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QpOwogICAg
IGV3a192aWV3X2VkaXRvcl9jbGllbnRfY29udGVudHNfY2hhbmdlZChzZC0+dmlldyk7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmUu
Y3BwIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a190aWxlZF9iYWNraW5nX3N0b3JlLmNwcApp
bmRleCBkNzEyZjdhLi45MWQ4YTAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2sv
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZS5jcHAKQEAgLTQ2LDkgKzQ2LDkgQEAgdHlwZWRlZiBlbnVt
IF9Fd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1ByaW9yaXR5IEV3a19UaWxlZF9C
YWNraW5nX1N0b3IKIAogc3RydWN0IF9Fd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtIHsKICAg
ICBFSU5BX0lOTElTVDsKLSAgICBFd2tfVGlsZSAqdGlsZTsKKyAgICBFd2tfVGlsZSogdGlsZTsK
ICAgICBzdHJ1Y3QgewotICAgICAgICBFdmFzX0Nvb3JkIHgsIHksIHcsIGg7CisgICAgICAgIEV2
YXNfQ29vcmQgeCwgeSwgd2lkdGgsIGhlaWdodDsKICAgICB9IGdlb21ldHJ5OwogICAgIEVpbmFf
Qm9vbCBzbW9vdGhfc2NhbGU7CiB9OwpAQCAtNjEsMTYgKzYxLDE2IEBAIHN0cnVjdCBfRXdrX1Rp
bGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0IHsKIAogc3RydWN0IF9Fd2tfVGls
ZWRfQmFja2luZ19TdG9yZV9EYXRhIHsKICAgICBFdmFzX09iamVjdF9TbWFydF9DbGlwcGVkX0Rh
dGEgYmFzZTsKLSAgICBFdmFzX09iamVjdCAqc2VsZjsKLSAgICBFdmFzX09iamVjdCAqY29udGVu
dHNfY2xpcHBlcjsKKyAgICBFdmFzX09iamVjdCogc2VsZjsKKyAgICBFdmFzX09iamVjdCogY29u
dGVudHNfY2xpcHBlcjsKICAgICBzdHJ1Y3QgewotICAgICAgICBFaW5hX0lubGlzdCAqKml0ZW1z
OwotICAgICAgICBFdmFzX0Nvb3JkIHgsIHksIHcsIGg7CisgICAgICAgIEVpbmFfSW5saXN0Kiog
aXRlbXM7CisgICAgICAgIEV2YXNfQ29vcmQgeCwgeSwgd2lkdGgsIGhlaWdodDsKICAgICAgICAg
bG9uZyBjb2xzLCByb3dzOwogICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgRXZhc19Db29y
ZCB3LCBoOworICAgICAgICAgICAgRXZhc19Db29yZCB3aWR0aCwgaGVpZ2h0OwogICAgICAgICAg
ICAgZmxvYXQgem9vbTsKLSAgICAgICAgICAgIEVpbmFfQm9vbCB6b29tX3dlYWtfc21vb3RoX3Nj
YWxlOjE7CisgICAgICAgICAgICBFaW5hX0Jvb2wgem9vbV93ZWFrX3Ntb290aF9zY2FsZSA6IDE7
CiAgICAgICAgIH0gdGlsZTsKICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgIHN0cnVjdCB7
CkBAIC04MCw3ICs4MCw3IEBAIHN0cnVjdCBfRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSB7
CiAgICAgfSB2aWV3OwogICAgIEV2YXNfQ29sb3JzcGFjZSBjc3BhY2U7CiAgICAgc3RydWN0IHsK
LSAgICAgICAgRXdrX1RpbGVfTWF0cml4ICptYXRyaXg7CisgICAgICAgIEV3a19UaWxlX01hdHJp
eCogbWF0cml4OwogICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBj
b2wsIHJvdzsKICAgICAgICAgfSBiYXNlOwpAQCAtOTAsMjggKzkwLDI4IEBAIHN0cnVjdCBfRXdr
X1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSB7CiAgICAgICAgIEV2YXNfQ29vcmQgd2lkdGgsIGhl
aWdodDsKICAgICB9IG1vZGVsOwogICAgIHN0cnVjdCB7Ci0gICAgICAgIEVpbmFfQm9vbCAoKmNi
KSh2b2lkICpkYXRhLCBFd2tfVGlsZSAqdCwgY29uc3QgRWluYV9SZWN0YW5nbGUgKmFyZWEpOwot
ICAgICAgICB2b2lkICpkYXRhOwotICAgICAgICBFaW5hX0lubGlzdCAqcHJlX3JlbmRlcl9yZXF1
ZXN0czsKLSAgICAgICAgRWNvcmVfSWRsZXIgKmlkbGVyOworICAgICAgICBFaW5hX0Jvb2wgKCog
Y2IpKHZvaWQqIGRhdGEsIEV3a19UaWxlKiB0aWxlLCBjb25zdCBFaW5hX1JlY3RhbmdsZSogYXJl
YSk7CisgICAgICAgIHZvaWQqIGRhdGE7CisgICAgICAgIEVpbmFfSW5saXN0KiBwcmVfcmVuZGVy
X3JlcXVlc3RzOworICAgICAgICBFY29yZV9JZGxlciogaWRsZXI7CiAgICAgICAgIEVpbmFfQm9v
bCBkaXNhYmxlZDsKLSAgICAgICAgRWluYV9Cb29sIHN1c3BlbmQ6MTsKKyAgICAgICAgRWluYV9C
b29sIHN1c3BlbmQgOiAxOwogICAgIH0gcmVuZGVyOwogICAgIHN0cnVjdCB7Ci0gICAgICAgIHZv
aWQgKigqcHJlX2NiKSh2b2lkICpkYXRhLCBFdmFzX09iamVjdCAqbyk7Ci0gICAgICAgIHZvaWQg
KnByZV9kYXRhOwotICAgICAgICB2b2lkICooKnBvc3RfY2IpKHZvaWQgKmRhdGEsIHZvaWQgKnBy
ZV9kYXRhLCBFdmFzX09iamVjdCAqbyk7Ci0gICAgICAgIHZvaWQgKnBvc3RfZGF0YTsKKyAgICAg
ICAgdm9pZCooKiBwcmVfY2IpKHZvaWQqIGRhdGEsIEV2YXNfT2JqZWN0KiBld2tUaWxlKTsKKyAg
ICAgICAgdm9pZCogcHJlX2RhdGE7CisgICAgICAgIHZvaWQqKCogcG9zdF9jYikodm9pZCogZGF0
YSwgdm9pZCogcHJlX2RhdGEsIEV2YXNfT2JqZWN0KiBld2tUaWxlKTsKKyAgICAgICAgdm9pZCog
cG9zdF9kYXRhOwogICAgIH0gcHJvY2VzczsKICAgICBzdHJ1Y3QgewotICAgICAgICBFaW5hX0Jv
b2wgYW55OjE7Ci0gICAgICAgIEVpbmFfQm9vbCBwb3M6MTsKLSAgICAgICAgRWluYV9Cb29sIHNp
emU6MTsKLSAgICAgICAgRWluYV9Cb29sIG1vZGVsOjE7Ci0gICAgICAgIEVpbmFfQm9vbCBvZmZz
ZXQ6MTsKKyAgICAgICAgRWluYV9Cb29sIGFueSA6IDE7CisgICAgICAgIEVpbmFfQm9vbCBwb3Mg
OiAxOworICAgICAgICBFaW5hX0Jvb2wgc2l6ZSA6IDE7CisgICAgICAgIEVpbmFfQm9vbCBtb2Rl
bCA6IDE7CisgICAgICAgIEVpbmFfQm9vbCBvZmZzZXQgOiAxOwogICAgIH0gY2hhbmdlZDsKICNp
ZmRlZiBERUJVR19NRU1fTEVBS1MKLSAgICBFY29yZV9FdmVudF9IYW5kbGVyICpzaWdfdXNyOwor
ICAgIEVjb3JlX0V2ZW50X0hhbmRsZXIqIHNpZ191c3I7CiAjZW5kaWYKIH07CiAKQEAgLTEyNSwx
MyArMTI1LDEzIEBAIGludCBfZXdrX3RpbGVkX2xvZ19kb20gPSAtMTsKICAgICAgICAgcmV0dXJu
IF9fVkFfQVJHU19fOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
ICAgICB9CiAKLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9maWxsX3JlbmRl
cmVycyhFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2KTsKLXN0YXRpYyBpbmxpbmUg
dm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19kYmcoY29uc3QgRXdrX1RpbGVkX0Jh
Y2tpbmdfU3RvcmVfRGF0YSAqcHJpdik7Ci1zdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX2NoYW5nZWQoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdik7
CitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZmlsbF9yZW5kZXJlcnMoRXdr
X1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdik7CitzdGF0aWMgaW5saW5lIHZvaWQgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfZGJnKGNvbnN0IEV3a19UaWxlZF9CYWNraW5nX1N0
b3JlX0RhdGEqIHByaXYpOworc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9jaGFuZ2VkKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYpOwogCi1zdGF0
aWMgaW5saW5lIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3VwZGF0ZXNfcHJvY2VzcyhF
d2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2KQorc3RhdGljIGlubGluZSB2b2lkIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV91cGRhdGVzX3Byb2Nlc3MoRXdrX1RpbGVkX0JhY2tpbmdf
U3RvcmVfRGF0YSogcHJpdikKIHsKLSAgICB2b2lkICpkYXRhID0gMDsKKyAgICB2b2lkKiBkYXRh
ID0gMDsKIAogICAgIC8qIERvIG5vdCBwcm9jZXNzIHVwZGF0ZXMuIE5vdGUgdGhhdCB3ZSBzdGls
bCB3YW50IHRvIGdldCB1cGRhdGVzIHJlcXVlc3RzCiAgICAgICogaW4gdGhlIHF1ZXVlIGluIG9y
ZGVyIHRvIG5vdCBtaXNzIGFueSB1cGRhdGVzIGFmdGVyIHRoZSByZW5kZXIgaXMKQEAgLTE0OSwx
MCArMTQ5LDEwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
dXBkYXRlc19wcm9jZXNzKEV3a19UaWxlZF9CYWNraW5nX1N0CiAgICAgICAgIHByaXYtPnByb2Nl
c3MucG9zdF9jYihwcml2LT5wcm9jZXNzLnBvc3RfZGF0YSwgZGF0YSwgcHJpdi0+c2VsZik7CiB9
CiAKLXN0YXRpYyBpbnQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2ZsdXNoKHZvaWQgKmRhdGEp
CitzdGF0aWMgaW50IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9mbHVzaCh2b2lkKiBkYXRhKQog
ewogICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYgPSBzdGF0aWNfY2FzdDxF
d2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKj4oZGF0YSk7Ci0gICAgRXdrX1RpbGVfVW51c2Vk
X0NhY2hlICp0dWMgPSBld2tfdGlsZV9tYXRyaXhfdW51c2VkX2NhY2hlX2dldChwcml2LT5tb2Rl
bC5tYXRyaXgpOworICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSogdHVjID0gZXdrX3RpbGVfbWF0
cml4X3VudXNlZF9jYWNoZV9nZXQocHJpdi0+bW9kZWwubWF0cml4KTsKIAogICAgIGlmICh0dWMp
IHsKICAgICAgICAgREJHKCJmbHVzaCB1bnVzZWQgdGlsZSBjYWNoZS4iKTsKQEAgLTE2MywyNyAr
MTYzLDI3IEBAIHN0YXRpYyBpbnQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2ZsdXNoKHZvaWQg
KmRhdGEpCiAgICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBFd2tfVGlsZSAqX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX3RpbGVfbmV3KEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYs
IHVuc2lnbmVkIGxvbmcgY29sLCB1bnNpZ25lZCBsb25nIHJvdywgZmxvYXQgem9vbSkKK3N0YXRp
YyBFd2tfVGlsZSogX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfbmV3KEV3a19UaWxlZF9C
YWNraW5nX1N0b3JlX0RhdGEqIHByaXYsIHVuc2lnbmVkIGxvbmcgY29sLCB1bnNpZ25lZCBsb25n
IHJvdywgZmxvYXQgem9vbSkKIHsKLSAgICBFd2tfVGlsZSAqdDsKLSAgICBFdmFzICpldmFzID0g
ZXZhc19vYmplY3RfZXZhc19nZXQocHJpdi0+c2VsZik7CisgICAgRXdrX1RpbGUqIHRpbGU7Cisg
ICAgRXZhcyogZXZhcyA9IGV2YXNfb2JqZWN0X2V2YXNfZ2V0KHByaXYtPnNlbGYpOwogICAgIGlm
ICghZXZhcykgewogICAgICAgICBDUklUSUNBTCgiZXZhc19vYmplY3RfZXZhc19nZXQgZmFpbGVk
ISIpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICB0ID0gZXdrX3RpbGVfbWF0cml4
X3RpbGVfbmV3Ci0gICAgICAgIChwcml2LT5tb2RlbC5tYXRyaXgsIGV2YXMsIGNvbCwgcm93LCB6
b29tKTsKKyAgICB0aWxlID0gZXdrX3RpbGVfbWF0cml4X3RpbGVfbmV3CisgICAgICAgICAgICAg
ICAocHJpdi0+bW9kZWwubWF0cml4LCBldmFzLCBjb2wsIHJvdywgem9vbSk7CiAKLSAgICBpZiAo
IXQpIHsKKyAgICBpZiAoIXRpbGUpIHsKICAgICAgICAgQ1JJVElDQUwoImV3a190aWxlX21hdHJp
eF90aWxlX25ldyBmYWlsZWQhIik7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIHJl
dHVybiB0OworICAgIHJldHVybiB0aWxlOwogfQogCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfaXRlbV9tb3ZlKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0LCBF
dmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSkKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9pdGVtX21vdmUoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSogaXQsIEV2YXNf
Q29vcmQgeCwgRXZhc19Db29yZCB5KQogewogICAgIGl0LT5nZW9tZXRyeS54ID0geDsKICAgICBp
dC0+Z2VvbWV0cnkueSA9IHk7CkBAIC0xOTIsMzcgKzE5MiwzNyBAQCBzdGF0aWMgdm9pZCBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9tb3ZlKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0
ZW0gKml0LAogICAgICAgICBldmFzX29iamVjdF9tb3ZlKGl0LT50aWxlLT5pbWFnZSwgeCwgeSk7
CiB9CiAKLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Jlc2l6ZShF
d2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdCwgRXZhc19Db29yZCB3LCBFdmFzX0Nvb3Jk
IGgpCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9yZXNpemUoRXdr
X1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSogaXQsIEV2YXNfQ29vcmQgd2lkdGgsIEV2YXNfQ29v
cmQgaGVpZ2h0KQogewotICAgIGl0LT5nZW9tZXRyeS53ID0gdzsKLSAgICBpdC0+Z2VvbWV0cnku
aCA9IGg7CisgICAgaXQtPmdlb21ldHJ5LndpZHRoID0gd2lkdGg7CisgICAgaXQtPmdlb21ldHJ5
LmhlaWdodCA9IGhlaWdodDsKIAogICAgIGlmIChpdC0+dGlsZSkgewotICAgICAgICBldmFzX29i
amVjdF9yZXNpemUoaXQtPnRpbGUtPmltYWdlLCB3LCBoKTsKLSAgICAgICAgZXZhc19vYmplY3Rf
aW1hZ2VfZmlsbF9zZXQoaXQtPnRpbGUtPmltYWdlLCAwLCAwLCB3LCBoKTsKKyAgICAgICAgZXZh
c19vYmplY3RfcmVzaXplKGl0LT50aWxlLT5pbWFnZSwgd2lkdGgsIGhlaWdodCk7CisgICAgICAg
IGV2YXNfb2JqZWN0X2ltYWdlX2ZpbGxfc2V0KGl0LT50aWxlLT5pbWFnZSwgMCwgMCwgd2lkdGgs
IGhlaWdodCk7CiAgICAgfQogfQogCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfdGlsZV9hc3NvY2lhdGUoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgRXdr
X1RpbGUgKnQsIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0KQorc3RhdGljIHZvaWQg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfYXNzb2NpYXRlKEV3a19UaWxlZF9CYWNraW5n
X1N0b3JlX0RhdGEqIHByaXYsIEV3a19UaWxlKiB0aWxlLCBFd2tfVGlsZWRfQmFja2luZ19TdG9y
ZV9JdGVtKiBpdCkKIHsKICAgICBpZiAoaXQtPnRpbGUpCiAgICAgICAgIENSSVRJQ0FMKCJpdC0+
dGlsZT0lcCwgYnV0IGl0IHNob3VsZCBiZSAwISIsIGl0LT50aWxlKTsKLSAgICBpdC0+dGlsZSA9
IHQ7CisgICAgaXQtPnRpbGUgPSB0aWxlOwogICAgIGV2YXNfb2JqZWN0X21vdmUoaXQtPnRpbGUt
PmltYWdlLCBpdC0+Z2VvbWV0cnkueCwgaXQtPmdlb21ldHJ5LnkpOwotICAgIGV2YXNfb2JqZWN0
X3Jlc2l6ZShpdC0+dGlsZS0+aW1hZ2UsIGl0LT5nZW9tZXRyeS53LCBpdC0+Z2VvbWV0cnkuaCk7
CisgICAgZXZhc19vYmplY3RfcmVzaXplKGl0LT50aWxlLT5pbWFnZSwgaXQtPmdlb21ldHJ5Lndp
ZHRoLCBpdC0+Z2VvbWV0cnkuaGVpZ2h0KTsKICAgICBldmFzX29iamVjdF9pbWFnZV9maWxsX3Nl
dAotICAgICAgICAoaXQtPnRpbGUtPmltYWdlLCAwLCAwLCBpdC0+Z2VvbWV0cnkudywgaXQtPmdl
b21ldHJ5LmgpOworICAgICAgICAoaXQtPnRpbGUtPmltYWdlLCAwLCAwLCBpdC0+Z2VvbWV0cnku
d2lkdGgsIGl0LT5nZW9tZXRyeS5oZWlnaHQpOwogICAgIGV2YXNfb2JqZWN0X2ltYWdlX3Ntb290
aF9zY2FsZV9zZXQoaXQtPnRpbGUtPmltYWdlLCBpdC0+c21vb3RoX3NjYWxlKTsKIAotICAgIGlm
ICghZXdrX3RpbGVfdmlzaWJsZV9nZXQodCkpCi0gICAgICAgIGV2YXNfb2JqZWN0X3NtYXJ0X21l
bWJlcl9hZGQodC0+aW1hZ2UsIHByaXYtPnNlbGYpOworICAgIGlmICghZXdrX3RpbGVfdmlzaWJs
ZV9nZXQodGlsZSkpCisgICAgICAgIGV2YXNfb2JqZWN0X3NtYXJ0X21lbWJlcl9hZGQodGlsZS0+
aW1hZ2UsIHByaXYtPnNlbGYpOwogCi0gICAgZXdrX3RpbGVfc2hvdyh0KTsKKyAgICBld2tfdGls
ZV9zaG93KHRpbGUpOwogfQogCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
dGlsZV9kaXNzb2NpYXRlKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIEV3a19U
aWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0LCBkb3VibGUgbGFzdF91c2VkKQorc3RhdGljIHZv
aWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfZGlzc29jaWF0ZShFd2tfVGlsZWRfQmFj
a2luZ19TdG9yZV9EYXRhKiBwcml2LCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKiBpdCwg
ZG91YmxlIGxhc3RfdXNlZCkKIHsKLSAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YzsKKyAg
ICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHR1YzsKICAgICBld2tfdGlsZV9oaWRlKGl0LT50aWxl
KTsKICAgICBpZiAoIWV3a190aWxlX3Zpc2libGVfZ2V0KGl0LT50aWxlKSkKICAgICAgICAgZXZh
c19vYmplY3Rfc21hcnRfbWVtYmVyX2RlbChpdC0+dGlsZS0+aW1hZ2UpOwpAQCAtMjMzLDEwICsy
MzMsMTAgQEAgc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfZGlzc29j
aWF0ZShFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXQKICAgICBpdC0+dGlsZSA9IDA7CiB9CiAK
LXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2Rpc3NvY2lhdGVfYWxs
KEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYpCitzdGF0aWMgdm9pZCBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9kaXNzb2NpYXRlX2FsbChFd2tfVGlsZWRfQmFja2luZ19T
dG9yZV9EYXRhKiBwcml2KQogewotICAgIEVpbmFfSW5saXN0ICppdDsKLSAgICBFd2tfVGlsZWRf
QmFja2luZ19TdG9yZV9JdGVtICppdGVtOworICAgIEVpbmFfSW5saXN0KiBpdDsKKyAgICBFd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKiBpdGVtOwogICAgIGludCBpOwogICAgIGRvdWJsZSBs
YXN0X3VzZWQgPSBlY29yZV9sb29wX3RpbWVfZ2V0KCk7CiAKQEAgLTI0OCw5ICsyNDgsOSBAQCBz
dGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9kaXNzb2NpYXRlX2FsbChF
d2tfVGlsZWRfQmFja2luZ19TdG9yZQogICAgIH0KIH0KIAotc3RhdGljIGlubGluZSBFaW5hX0Jv
b2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9hZGQoRXdrX1Rp
bGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgdW5zaWduZWQgbG9uZyBjb2wsIHVuc2lnbmVk
IGxvbmcgcm93LCBmbG9hdCB6b29tLCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVy
X1ByaW9yaXR5IHByaW9yaXR5KQorc3RhdGljIGlubGluZSBFaW5hX0Jvb2wgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9hZGQoRXdrX1RpbGVkX0JhY2tpbmdfU3Rv
cmVfRGF0YSogcHJpdiwgdW5zaWduZWQgbG9uZyBjb2wsIHVuc2lnbmVkIGxvbmcgcm93LCBmbG9h
dCB6b29tLCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1ByaW9yaXR5IHByaW9y
aXR5KQogewotICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUmVxdWVzdCAq
cjsKKyAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QqIHI7CiAK
ICAgICByID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9S
ZXF1ZXN0Kj4obWFsbG9jKHNpemVvZigqcikpKTsKICAgICBpZiAoIXIpCkBAIC0yNTgsMTAgKzI1
OCwxMCBAQCBzdGF0aWMgaW5saW5lIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
cHJlX3JlbmRlcl9yZXF1ZXN0X2FkZChFd2tfVGlsZQogCiAgICAgaWYgKHByaW9yaXR5ID09IFBS
RV9SRU5ERVJfUFJJT1JJVFlfSElHSCkKICAgICAgICAgcHJpdi0+cmVuZGVyLnByZV9yZW5kZXJf
cmVxdWVzdHMgPSBlaW5hX2lubGlzdF9wcmVwZW5kCi0gICAgICAgICAgICAocHJpdi0+cmVuZGVy
LnByZV9yZW5kZXJfcmVxdWVzdHMsIEVJTkFfSU5MSVNUX0dFVChyKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwcml2LT5yZW5kZXIucHJlX3JlbmRl
cl9yZXF1ZXN0cywgRUlOQV9JTkxJU1RfR0VUKHIpKTsKICAgICBlbHNlCiAgICAgICAgIHByaXYt
PnJlbmRlci5wcmVfcmVuZGVyX3JlcXVlc3RzID0gZWluYV9pbmxpc3RfYXBwZW5kCi0gICAgICAg
ICAgICAocHJpdi0+cmVuZGVyLnByZV9yZW5kZXJfcmVxdWVzdHMsIEVJTkFfSU5MSVNUX0dFVChy
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwcml2
LT5yZW5kZXIucHJlX3JlbmRlcl9yZXF1ZXN0cywgRUlOQV9JTkxJU1RfR0VUKHIpKTsKIAogICAg
IHItPmNvbCA9IGNvbDsKICAgICByLT5yb3cgPSByb3c7CkBAIC0yNzAsMzcgKzI3MCwzNyBAQCBz
dGF0aWMgaW5saW5lIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRl
cl9yZXF1ZXN0X2FkZChFd2tfVGlsZQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLXN0YXRp
YyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0
X2RlbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFd2tfVGlsZWRfQmFja2lu
Z19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QgKnIpCitzdGF0aWMgaW5saW5lIHZvaWQgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9kZWwoRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfRGF0YSogcHJpdiwgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9S
ZXF1ZXN0KiByKQogewogICAgIHByaXYtPnJlbmRlci5wcmVfcmVuZGVyX3JlcXVlc3RzID0gZWlu
YV9pbmxpc3RfcmVtb3ZlCi0gICAgICAgIChwcml2LT5yZW5kZXIucHJlX3JlbmRlcl9yZXF1ZXN0
cywgRUlOQV9JTkxJU1RfR0VUKHIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAocHJpdi0+cmVuZGVyLnByZV9yZW5kZXJfcmVxdWVzdHMsIEVJTkFfSU5MSVNU
X0dFVChyKSk7CiAgICAgZnJlZShyKTsKIH0KIAotc3RhdGljIGlubGluZSBFd2tfVGlsZWRfQmFj
a2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QgKl9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9w
cmVfcmVuZGVyX3JlcXVlc3RfZmlyc3QoY29uc3QgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0
YSAqcHJpdikKK3N0YXRpYyBpbmxpbmUgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRl
cl9SZXF1ZXN0KiBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2Zp
cnN0KGNvbnN0IEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYpCiB7CiAgICAgcmV0
dXJuIEVJTkFfSU5MSVNUX0NPTlRBSU5FUl9HRVQoCi0gICAgICAgIHByaXYtPnJlbmRlci5wcmVf
cmVuZGVyX3JlcXVlc3RzLAotICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVu
ZGVyX1JlcXVlc3QpOworICAgICAgICAgICAgICAgcHJpdi0+cmVuZGVyLnByZV9yZW5kZXJfcmVx
dWVzdHMsCisgICAgICAgICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVy
X1JlcXVlc3QpOwogfQogCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJl
X3JlbmRlcl9yZXF1ZXN0X2ZsdXNoKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYp
CitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0
X2ZsdXNoKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYpCiB7Ci0gICAgRWluYV9J
bmxpc3QgKipwbCA9ICZwcml2LT5yZW5kZXIucHJlX3JlbmRlcl9yZXF1ZXN0czsKKyAgICBFaW5h
X0lubGlzdCoqIHBsID0gJnByaXYtPnJlbmRlci5wcmVfcmVuZGVyX3JlcXVlc3RzOwogICAgIHdo
aWxlICgqcGwpIHsKLSAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9S
ZXF1ZXN0ICpyOworICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1Jl
cXVlc3QqIHI7CiAgICAgICAgIHIgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRl
cl9yZXF1ZXN0X2ZpcnN0KHByaXYpOwogICAgICAgICAqcGwgPSBlaW5hX2lubGlzdF9yZW1vdmUo
KnBsLCAqcGwpOwogICAgICAgICBmcmVlKHIpOwogICAgIH0KIH0KIAotc3RhdGljIHZvaWQgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9jbGVhcihFd2tfVGlsZWRf
QmFja2luZ19TdG9yZV9EYXRhICpwcml2KQorc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5n
X3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9jbGVhcihFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9E
YXRhKiBwcml2KQogewotICAgIEVpbmFfSW5saXN0ICoqcGwgPSAmcHJpdi0+cmVuZGVyLnByZV9y
ZW5kZXJfcmVxdWVzdHM7Ci0gICAgRWluYV9Jbmxpc3QgKml0ZXIgPSAqcGwsICp0bXA7CisgICAg
RWluYV9Jbmxpc3QqKiBwbCA9ICZwcml2LT5yZW5kZXIucHJlX3JlbmRlcl9yZXF1ZXN0czsKKyAg
ICBFaW5hX0lubGlzdCogaXRlciA9ICpwbCwgKiB0bXA7CiAgICAgd2hpbGUgKGl0ZXIpIHsKLSAg
ICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0ICpyID0KKyAg
ICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0KiByID0KICAg
ICAgICAgICAgIEVJTkFfSU5MSVNUX0NPTlRBSU5FUl9HRVQoCiAgICAgICAgICAgICAgICAgaXRl
ciwgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0KTsKICAgICAgICAg
dG1wID0gaXRlci0+bmV4dDsKQEAgLTMxMSwxMyArMzExLDEzIEBAIHN0YXRpYyB2b2lkIF9ld2tf
dGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfY2xlYXIoRXdrX1RpbGVkX0Jh
Y2tpbmdfCiB9CiAKIC8qIGFzc3VtZXMgcHJpdi0+cHJvY2Vzcy5wcmVfY2Igd2FzIGNhbGxlZCBp
ZiByZXF1aXJlZCEgKi8KLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVf
cmVuZGVyX3JlcXVlc3RfcHJvY2Vzc19zaW5nbGUoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0
YSAqcHJpdikKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVy
X3JlcXVlc3RfcHJvY2Vzc19zaW5nbGUoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJp
dikKIHsKLSAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QgKnJl
cTsKKyAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QqIHJlcTsK
ICAgICBFaW5hX1JlY3RhbmdsZSBhcmVhOwotICAgIEV3a19UaWxlX01hdHJpeCAqdG0gPSBwcml2
LT5tb2RlbC5tYXRyaXg7Ci0gICAgRXdrX1RpbGUgKnQ7Ci0gICAgRXdrX1RpbGVfVW51c2VkX0Nh
Y2hlICp0dWM7CisgICAgRXdrX1RpbGVfTWF0cml4KiB0bSA9IHByaXYtPm1vZGVsLm1hdHJpeDsK
KyAgICBFd2tfVGlsZSogdGlsZTsKKyAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHR1YzsKICAg
ICB1bnNpZ25lZCBsb25nIGNvbCwgcm93OwogICAgIGZsb2F0IHpvb207CiAgICAgZG91YmxlIGxh
c3RfdXNlZCA9IGVjb3JlX2xvb3BfdGltZV9nZXQoKTsKQEAgLTMzNSwyMiArMzM1LDIyIEBAIHN0
YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfcHJv
Y2Vzc19zaW5nbGUoRXdrX1RpbGVkCiAgICAgICAgIGdvdG8gZW5kOwogICAgIH0KIAotICAgIHQg
PSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9uZXcocHJpdiwgY29sLCByb3csIHpvb20p
OwotICAgIGlmICghdCkKKyAgICB0aWxlID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVf
bmV3KHByaXYsIGNvbCwgcm93LCB6b29tKTsKKyAgICBpZiAoIXRpbGUpCiAgICAgICAgIGdvdG8g
ZW5kOwogCiAgICAgYXJlYS54ID0gMDsKICAgICBhcmVhLnkgPSAwOwotICAgIGFyZWEudyA9IHBy
aXYtPnZpZXcudGlsZS53OwotICAgIGFyZWEuaCA9IHByaXYtPnZpZXcudGlsZS5oOworICAgIGFy
ZWEudyA9IHByaXYtPnZpZXcudGlsZS53aWR0aDsKKyAgICBhcmVhLmggPSBwcml2LT52aWV3LnRp
bGUuaGVpZ2h0OwogCi0gICAgcHJpdi0+cmVuZGVyLmNiKHByaXYtPnJlbmRlci5kYXRhLCB0LCAm
YXJlYSk7CisgICAgcHJpdi0+cmVuZGVyLmNiKHByaXYtPnJlbmRlci5kYXRhLCB0aWxlLCAmYXJl
YSk7CiAgICAgZXZhc19vYmplY3RfaW1hZ2VfZGF0YV91cGRhdGVfYWRkKAotICAgICAgICB0LT5p
bWFnZSwKKyAgICAgICAgdGlsZS0+aW1hZ2UsCiAgICAgICAgIGFyZWEueCwgYXJlYS55LCBhcmVh
LncsIGFyZWEuaCk7Ci0gICAgZXdrX3RpbGVfbWF0cml4X3RpbGVfdXBkYXRlc19jbGVhcih0bSwg
dCk7CisgICAgZXdrX3RpbGVfbWF0cml4X3RpbGVfdXBkYXRlc19jbGVhcih0bSwgdGlsZSk7CiAK
LSAgICBld2tfdGlsZV9tYXRyaXhfdGlsZV9wdXQodG0sIHQsIGxhc3RfdXNlZCk7CisgICAgZXdr
X3RpbGVfbWF0cml4X3RpbGVfcHV0KHRtLCB0aWxlLCBsYXN0X3VzZWQpOwogCiBlbmQ6CiAgICAg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9kZWwocHJpdiwgcmVx
KTsKQEAgLTM1OCw3ICszNTgsNyBAQCBlbmQ6CiAgICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2F1
dG9fZmx1c2godHVjKTsKIH0KIAotc3RhdGljIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfaXRlbV9wcm9jZXNzX2lkbGVyX2NiKHZvaWQgKmRhdGEpCitzdGF0aWMgRWluYV9Cb29s
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Byb2Nlc3NfaWRsZXJfY2Iodm9pZCogZGF0
YSkKIHsKICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2ID0gc3RhdGljX2Nh
c3Q8RXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSo+KGRhdGEpOwogCkBAIC0zNzgsNyArMzc4
LDcgQEAgc3RhdGljIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9wcm9j
ZXNzX2lkbGVyX2NiKHZvaWQgKmRhdGEpCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotc3Rh
dGljIGlubGluZSB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Byb2Nlc3NfaWRs
ZXJfc3RvcChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2KQorc3RhdGljIGlubGlu
ZSB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Byb2Nlc3NfaWRsZXJfc3RvcChF
d2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2KQogewogICAgIGlmICghcHJpdi0+cmVu
ZGVyLmlkbGVyKQogICAgICAgICByZXR1cm47CkBAIC0zODcsNyArMzg3LDcgQEAgc3RhdGljIGlu
bGluZSB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Byb2Nlc3NfaWRsZXJfc3Rv
cChFd2tfVGlsZWRfQmEKICAgICBwcml2LT5yZW5kZXIuaWRsZXIgPSAwOwogfQogCi1zdGF0aWMg
aW5saW5lIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcHJvY2Vzc19pZGxlcl9z
dGFydChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2KQorc3RhdGljIGlubGluZSB2
b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Byb2Nlc3NfaWRsZXJfc3RhcnQoRXdr
X1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdikKIHsKICAgICBpZiAocHJpdi0+cmVuZGVy
LmlkbGVyKQogICAgICAgICByZXR1cm47CkBAIC0zOTUsNyArMzk1LDcgQEAgc3RhdGljIGlubGlu
ZSB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Byb2Nlc3NfaWRsZXJfc3RhcnQo
RXdrX1RpbGVkX0IKICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcHJvY2Vz
c19pZGxlcl9jYiwgcHJpdik7CiB9CiAKLXN0YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxlZF9iYWNr
aW5nX3N0b3JlX2Rpc2FibGVfcmVuZGVyKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnBy
aXYpCitzdGF0aWMgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9kaXNhYmxlX3Jl
bmRlcihFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2KQogewogICAgIGlmIChwcml2
LT5yZW5kZXIuc3VzcGVuZCkKICAgICAgICAgcmV0dXJuIEVJTkFfVFJVRTsKQEAgLTQwNSw3ICs0
MDUsNyBAQCBzdGF0aWMgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9kaXNhYmxl
X3JlbmRlcihFd2tfVGlsZWRfQmFja2luZ19TdG9yZQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9
CiAKLXN0YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2VuYWJsZV9yZW5k
ZXIoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdikKK3N0YXRpYyBFaW5hX0Jvb2wg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2VuYWJsZV9yZW5kZXIoRXdrX1RpbGVkX0JhY2tpbmdf
U3RvcmVfRGF0YSogcHJpdikKIHsKICAgICBpZiAoIXByaXYtPnJlbmRlci5zdXNwZW5kKQogICAg
ICAgICByZXR1cm4gRUlOQV9UUlVFOwpAQCAtNDE4LDcgKzQxOCw3IEBAIHN0YXRpYyBFaW5hX0Jv
b2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2VuYWJsZV9yZW5kZXIoRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotc3RhdGljIGlubGluZSBFaW5h
X0Jvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZmlsbChFd2tfVGlsZWRfQmFja2lu
Z19TdG9yZV9EYXRhICpwcml2LCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdCwgdW5z
aWduZWQgbG9uZyBjb2wsIHVuc2lnbmVkIGxvbmcgcm93KQorc3RhdGljIGlubGluZSBFaW5hX0Jv
b2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZmlsbChFd2tfVGlsZWRfQmFja2luZ19T
dG9yZV9EYXRhKiBwcml2LCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKiBpdCwgdW5zaWdu
ZWQgbG9uZyBjb2wsIHVuc2lnbmVkIGxvbmcgcm93KQogewogICAgIHVuc2lnbmVkIGxvbmcgbV9j
b2wgPSBwcml2LT5tb2RlbC5iYXNlLmNvbCArIGNvbDsKICAgICB1bnNpZ25lZCBsb25nIG1fcm93
ID0gcHJpdi0+bW9kZWwuYmFzZS5yb3cgKyByb3c7CkBAIC00MjgsMjAgKzQyOCwyMCBAQCBzdGF0
aWMgaW5saW5lIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9maWxsKEV3
a19UaWxlZF9CYWNraW5nX1N0bwogICAgICAgICBpZiAoaXQtPnRpbGUpCiAgICAgICAgICAgICBf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9kaXNzb2NpYXRlKHByaXYsIGl0LCBsYXN0X3Vz
ZWQpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIEV3a19UaWxlICp0OworICAgICAgICBFd2tfVGls
ZSogdGlsZTsKICAgICAgICAgY29uc3QgZmxvYXQgem9vbSA9IHByaXYtPnZpZXcudGlsZS56b29t
OwogCiAgICAgICAgIGlmIChpdC0+dGlsZSkgewotICAgICAgICAgICAgRXdrX1RpbGUgKm9sZCA9
IGl0LT50aWxlOworICAgICAgICAgICAgRXdrX1RpbGUqIG9sZCA9IGl0LT50aWxlOwogICAgICAg
ICAgICAgaWYgKG9sZC0+cm93ICE9IG1fcm93IHx8IG9sZC0+Y29sICE9IG1fY29sIHx8IG9sZC0+
em9vbSAhPSB6b29tKQogICAgICAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90
aWxlX2Rpc3NvY2lhdGUocHJpdiwgaXQsIGxhc3RfdXNlZCk7CiAgICAgICAgICAgICBlbHNlIGlm
IChvbGQtPnJvdyA9PSBtX3JvdyAmJiBvbGQtPmNvbCA9PSBtX2NvbCAmJiBvbGQtPnpvb20gPT0g
em9vbSkKICAgICAgICAgICAgICAgICBnb3RvIGVuZDsKICAgICAgICAgfQogCi0gICAgICAgIHQg
PSBld2tfdGlsZV9tYXRyaXhfdGlsZV9leGFjdF9nZXQocHJpdi0+bW9kZWwubWF0cml4LCBtX2Nv
bCwgbV9yb3csIHpvb20pOworICAgICAgICB0aWxlID0gZXdrX3RpbGVfbWF0cml4X3RpbGVfZXhh
Y3RfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCwgbV9jb2wsIG1fcm93LCB6b29tKTsKIAotICAgICAg
ICBpZiAoIXQpIHsKKyAgICAgICAgaWYgKCF0aWxlKSB7CiAgICAgICAgICAgICAvKiBOT1RFOiBp
dCBuZXZlciByZXR1cm5zIDAgaWYgaXQtPnRpbGUgd2FzIHNldCEgKi8KICAgICAgICAgICAgIGlm
IChpdC0+dGlsZSkgewogICAgICAgICAgICAgICAgIENSSVRJQ0FMKCJpdC0+dGlsZT0lcCwgYnV0
IGl0IHNob3VsZCBiZSAwISIsIGl0LT50aWxlKTsKQEAgLTQ1MSwxOSArNDUxLDE5IEBAIHN0YXRp
YyBpbmxpbmUgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2ZpbGwoRXdr
X1RpbGVkX0JhY2tpbmdfU3RvCiAKICAgICAgICAgICAgIC8qIERvIG5vdCBhZGQgbmV3IHJlcXVl
c3RzIHRvIHRoZSByZW5kZXIgcXVldWUgKi8KICAgICAgICAgICAgIGlmICghcHJpdi0+cmVuZGVy
LnN1c3BlbmQpIHsKLSAgICAgICAgICAgICAgICB0ID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3RpbGVfbmV3KHByaXYsIG1fY29sLCBtX3Jvdywgem9vbSk7Ci0gICAgICAgICAgICAgICAgaWYg
KCF0KQorICAgICAgICAgICAgICAgIHRpbGUgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGls
ZV9uZXcocHJpdiwgbV9jb2wsIG1fcm93LCB6b29tKTsKKyAgICAgICAgICAgICAgICBpZiAoIXRp
bGUpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwotICAgICAgICAgICAg
ICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2Fzc29jaWF0ZShwcml2LCB0LCBpdCk7
CisgICAgICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfYXNzb2NpYXRl
KHByaXYsIHRpbGUsIGl0KTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmICh0ICE9
IGl0LT50aWxlKSB7CisgICAgICAgIH0gZWxzZSBpZiAodGlsZSAhPSBpdC0+dGlsZSkgewogICAg
ICAgICAgICAgaWYgKGl0LT50aWxlKQogICAgICAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV90aWxlX2Rpc3NvY2lhdGUocHJpdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdCwgbGFzdF91c2VkKTsKLSAgICAg
ICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2Fzc29jaWF0ZShwcml2LCB0LCBp
dCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpdCwgbGFzdF91c2VkKTsKKyAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV90aWxlX2Fzc29jaWF0ZShwcml2LCB0aWxlLCBpdCk7CiAgICAgICAgIH0KIAotICAgICAgZW5k
OgorZW5kOgogCiAgICAgICAgIHJldHVybiBFSU5BX1RSVUU7CiAgICAgfQpAQCAtNDcxLDkgKzQ3
MSw5IEBAIHN0YXRpYyBpbmxpbmUgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9p
dGVtX2ZpbGwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0K
IAotc3RhdGljIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKl9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9pdGVtX2FkZChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCB1bnNp
Z25lZCBsb25nIGNvbCwgdW5zaWduZWQgbG9uZyByb3cpCitzdGF0aWMgRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfSXRlbSogX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fYWRkKEV3a19UaWxl
ZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYsIHVuc2lnbmVkIGxvbmcgY29sLCB1bnNpZ25lZCBs
b25nIHJvdykKIHsKLSAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdDsKKyAgICBF
d2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKiBpdDsKICAgICBFdmFzX0Nvb3JkIHgsIHksIHR3
LCB0aDsKIAogICAgIERCRygibz0lcCIsIHByaXYtPnNlbGYpOwpAQCAtNDgyLDggKzQ4Miw4IEBA
IHN0YXRpYyBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICpfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfaXRlbV9hZGQoRXdrX1RpbGVkCiAgICAgaWYgKCFpdCkKICAgICAgICAgcmV0dXJuIDA7
CiAKLSAgICB0dyA9IHByaXYtPnZpZXcudGlsZS53OwotICAgIHRoID0gcHJpdi0+dmlldy50aWxl
Lmg7CisgICAgdHcgPSBwcml2LT52aWV3LnRpbGUud2lkdGg7CisgICAgdGggPSBwcml2LT52aWV3
LnRpbGUuaGVpZ2h0OwogICAgIHggPSBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggKyBwcml2LT52
aWV3LnggKyB0dyAgKmNvbDsKICAgICB5ID0gcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ICsgcHJp
di0+dmlldy55ICsgdGggICpyb3c7CiAKQEAgLTUwMCw3ICs1MDAsNyBAQCBzdGF0aWMgRXdrX1Rp
bGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fYWRk
KEV3a19UaWxlZAogICAgIHJldHVybiBpdDsKIH0KIAotc3RhdGljIHZvaWQgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX2l0ZW1fZGVsKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYs
IEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0KQorc3RhdGljIHZvaWQgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX2l0ZW1fZGVsKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHBy
aXYsIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0qIGl0KQogewogICAgIGlmIChpdC0+dGls
ZSkgewogICAgICAgICBkb3VibGUgbGFzdF91c2VkID0gZWNvcmVfbG9vcF90aW1lX2dldCgpOwpA
QCAtNTEwLDcgKzUxMCw3IEBAIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9p
dGVtX2RlbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2CiAgICAgZnJlZShpdCk7
CiB9CiAKLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Ntb290aF9z
Y2FsZV9zZXQoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQsIEVpbmFfQm9vbCBzbW9v
dGhfc2NhbGUpCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9zbW9v
dGhfc2NhbGVfc2V0KEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0qIGl0LCBFaW5hX0Jvb2wg
c21vb3RoX3NjYWxlKQogewogICAgIGlmIChpdC0+c21vb3RoX3NjYWxlID09IHNtb290aF9zY2Fs
ZSkKICAgICAgICAgcmV0dXJuOwpAQCAtNTE5LDcgKzUxOSw3IEBAIHN0YXRpYyB2b2lkIF9ld2tf
dGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Ntb290aF9zY2FsZV9zZXQoRXdrX1RpbGVkX0JhY2tp
bmdfU3RvCiAgICAgICAgIGV2YXNfb2JqZWN0X2ltYWdlX3Ntb290aF9zY2FsZV9zZXQoaXQtPnRp
bGUtPmltYWdlLCBzbW9vdGhfc2NhbGUpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX2NoYW5nZWQoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAq
cHJpdikKK3N0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfY2hhbmdl
ZChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2KQogewogICAgIGlmIChwcml2LT5j
aGFuZ2VkLmFueSkKICAgICAgICAgcmV0dXJuOwpAQCAtNTI3LDkgKzUyNyw5IEBAIHN0YXRpYyBp
bmxpbmUgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfY2hhbmdlZChFd2tfVGlsZWRfQmFj
a2luZ19TdG9yZV9EYXRhCiAgICAgcHJpdi0+Y2hhbmdlZC5hbnkgPSBFSU5BX1RSVUU7CiB9CiAK
LXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X2NvbHNfZW5kX2RlbChF
d2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFaW5hX0lubGlzdCAqKnBfcm93LCB1
bnNpZ25lZCBpbnQgY291bnQpCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
dmlld19jb2xzX2VuZF9kZWwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdiwgRWlu
YV9Jbmxpc3QqKiBwX3JvdywgdW5zaWduZWQgaW50IGNvdW50KQogewotICAgIEVpbmFfSW5saXN0
ICpuOworICAgIEVpbmFfSW5saXN0KiBuOwogICAgIHVuc2lnbmVkIGludCBpOwogCiAgICAgaWYg
KCFjb3VudCkKQEAgLTUzOCw3ICs1MzgsNyBAQCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfdmlld19jb2xzX2VuZF9kZWwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRAogICAg
IG4gPSAoKnBfcm93KS0+bGFzdDsKIAogICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7
Ci0gICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0OworICAgICAgICBFd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKiBpdDsKICAgICAgICAgaXQgPSBFSU5BX0lOTElTVF9D
T05UQUlORVJfR0VUKG4sIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0pOwogICAgICAgICBu
ID0gbi0+cHJldjsKICAgICAgICAgKnBfcm93ID0gZWluYV9pbmxpc3RfcmVtb3ZlKCpwX3Jvdywg
RUlOQV9JTkxJU1RfR0VUKGl0KSk7CkBAIC01NDYsMTIgKzU0NiwxMiBAQCBzdGF0aWMgdm9pZCBf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19jb2xzX2VuZF9kZWwoRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfRAogICAgIH0KIH0KIAotc3RhdGljIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfdmlld19jb2xzX2VuZF9hZGQoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAq
cHJpdiwgRWluYV9Jbmxpc3QgKipwX3JvdywgdW5zaWduZWQgaW50IGJhc2VfY29sLCB1bnNpZ25l
ZCBpbnQgY291bnQpCitzdGF0aWMgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92
aWV3X2NvbHNfZW5kX2FkZChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2LCBFaW5h
X0lubGlzdCoqIHBfcm93LCB1bnNpZ25lZCBpbnQgYmFzZV9jb2wsIHVuc2lnbmVkIGludCBjb3Vu
dCkKIHsKICAgICB1bnNpZ25lZCBpbnQgaSwgciA9IHBfcm93IC0gcHJpdi0+dmlldy5pdGVtczsK
IAogICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrLCBiYXNlX2NvbCsrKSB7Ci0gICAgICAg
IEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0OworICAgICAgICBFd2tfVGlsZWRfQmFj
a2luZ19TdG9yZV9JdGVtKiBpdDsKIAogICAgICAgICBpdCA9IF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9pdGVtX2FkZChwcml2LCBiYXNlX2NvbCwgcik7CiAgICAgICAgIGlmICghaXQpIHsKQEAg
LTU2NSwxNyArNTY1LDE3IEBAIHN0YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX3ZpZXdfY29sc19lbmRfYWRkKEV3a19UaWxlZF9CYWNraW5nX1N0CiAgICAgcmV0dXJuIEVJ
TkFfVFJVRTsKIH0KIAotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdf
cm93X2RlbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFaW5hX0lubGlzdCAq
cm93KQorc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcm93X2RlbChF
d2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2LCBFaW5hX0lubGlzdCogcm93KQogewog
ICAgIHdoaWxlIChyb3cpIHsKLSAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAq
aXQ7CisgICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0qIGl0OwogICAgICAgICBp
dCA9IEVJTkFfSU5MSVNUX0NPTlRBSU5FUl9HRVQocm93LCBFd2tfVGlsZWRfQmFja2luZ19TdG9y
ZV9JdGVtKTsKICAgICAgICAgcm93ID0gcm93LT5uZXh0OwogICAgICAgICBfZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfaXRlbV9kZWwocHJpdiwgaXQpOwogICAgIH0KIH0KIAotc3RhdGljIHZvaWQg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcm93c19yYW5nZV9kZWwoRXdrX1RpbGVkX0Jh
Y2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgRWluYV9Jbmxpc3QgKipzdGFydCwgRWluYV9Jbmxpc3Qg
KiplbmQpCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19yb3dzX3Jh
bmdlX2RlbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2LCBFaW5hX0lubGlzdCoq
IHN0YXJ0LCBFaW5hX0lubGlzdCoqIGVuZCkKIHsKICAgICBmb3IgKDsgc3RhcnQgPCBlbmQ7IHN0
YXJ0KyspIHsKICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcm93X2RlbChw
cml2LCAqc3RhcnQpOwpAQCAtNTgzLDEwICs1ODMsMTAgQEAgc3RhdGljIHZvaWQgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX3ZpZXdfcm93c19yYW5nZV9kZWwoRXdrX1RpbGVkX0JhY2tpbmdfU3Rv
cmUKICAgICB9CiB9CiAKLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3
X3Jvd3NfYWxsX2RlbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2KQorc3RhdGlj
IHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcm93c19hbGxfZGVsKEV3a19UaWxl
ZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYpCiB7Ci0gICAgRWluYV9Jbmxpc3QgKipzdGFydDsK
LSAgICBFaW5hX0lubGlzdCAqKmVuZDsKKyAgICBFaW5hX0lubGlzdCoqIHN0YXJ0OworICAgIEVp
bmFfSW5saXN0KiogZW5kOwogCiAgICAgc3RhcnQgPSBwcml2LT52aWV3Lml0ZW1zOwogICAgIGVu
ZCA9IHByaXYtPnZpZXcuaXRlbXMgKyBwcml2LT52aWV3LnJvd3M7CkBAIC01OTgsMjcgKzU5OCwy
NyBAQCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19yb3dzX2FsbF9k
ZWwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRAogICAgIHByaXYtPnZpZXcucm93cyA9IDA7CiB9
CiAKLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9yZW5kZXIodm9pZCAqZGF0
YSwgRXdrX1RpbGUgKnQsIGNvbnN0IEVpbmFfUmVjdGFuZ2xlICphcmVhKQorc3RhdGljIHZvaWQg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3JlbmRlcih2b2lkKiBkYXRhLCBFd2tfVGlsZSogdGls
ZSwgY29uc3QgRWluYV9SZWN0YW5nbGUqIGFyZWEpCiB7CiAgICAgRXdrX1RpbGVkX0JhY2tpbmdf
U3RvcmVfRGF0YSogcHJpdiA9IHN0YXRpY19jYXN0PEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0Rh
dGEqPihkYXRhKTsKIAogICAgIElORigiVE9ETyAlcCAodmlzaWJsZT8gJWQpIFslbHUsJWx1XSAl
ZCwlZCArICVkeCVkIiwKLSAgICAgICAgdCwgdC0+dmlzaWJsZSwgdC0+Y29sLCB0LT5yb3csIGFy
ZWEtPngsIGFyZWEtPnksIGFyZWEtPncsIGFyZWEtPmgpOworICAgICAgICB0aWxlLCB0aWxlLT52
aXNpYmxlLCB0aWxlLT5jb2wsIHRpbGUtPnJvdywgYXJlYS0+eCwgYXJlYS0+eSwgYXJlYS0+dywg
YXJlYS0+aCk7CiAKLSAgICBpZiAoIXQtPnZpc2libGUpCisgICAgaWYgKCF0aWxlLT52aXNpYmxl
KQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAocHJpdi0+dmlldy50aWxlLncgIT0gdC0+dyB8
fCBwcml2LT52aWV3LnRpbGUuaCAhPSB0LT5oKQorICAgIGlmIChwcml2LT52aWV3LnRpbGUud2lk
dGggIT0gdGlsZS0+d2lkdGggfHwgcHJpdi0+dmlldy50aWxlLmhlaWdodCAhPSB0aWxlLT5oZWln
aHQpCiAgICAgICAgIHJldHVybjsgLy8gdG9kbzogcmVtb3ZlIG1lIGxhdGVyLCBkb24ndCBldmVu
IGZsYWcgYXMgZGlydHkhCiAKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihwcml2LT5y
ZW5kZXIuY2IpOwotICAgIGlmICghcHJpdi0+cmVuZGVyLmNiKHByaXYtPnJlbmRlci5kYXRhLCB0
LCBhcmVhKSkKKyAgICBpZiAoIXByaXYtPnJlbmRlci5jYihwcml2LT5yZW5kZXIuZGF0YSwgdGls
ZSwgYXJlYSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGV2YXNfb2JqZWN0X2ltYWdlX2RhdGFf
dXBkYXRlX2FkZCh0LT5pbWFnZSwgYXJlYS0+eCwgYXJlYS0+eSwgYXJlYS0+dywgYXJlYS0+aCk7
CisgICAgZXZhc19vYmplY3RfaW1hZ2VfZGF0YV91cGRhdGVfYWRkKHRpbGUtPmltYWdlLCBhcmVh
LT54LCBhcmVhLT55LCBhcmVhLT53LCBhcmVhLT5oKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lk
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9tb2RlbF9tYXRyaXhfY3JlYXRlKEV3a19UaWxlZF9C
YWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjKQorc3Rh
dGljIGlubGluZSB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9tb2RlbF9tYXRyaXhfY3Jl
YXRlKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYsIEV3a19UaWxlX1VudXNlZF9D
YWNoZSogdHVjKQogewogICAgIGlmIChwcml2LT5tb2RlbC5tYXRyaXgpIHsKICAgICAgICAgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcm93c19hbGxfZGVsKHByaXYpOwpAQCAtNjMyLDkg
KzYzMiw5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfbW9k
ZWxfbWF0cml4X2NyZWF0ZShFd2tfVGlsZWRfQmFja2luCiAgICAgcHJpdi0+bW9kZWwubWF0cml4
ID0gZXdrX3RpbGVfbWF0cml4X25ldyh0dWMsIHByaXYtPm1vZGVsLmN1ci5jb2xzLCBwcml2LT5t
b2RlbC5jdXIucm93cywgcHJpdi0+Y3NwYWNlLCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcmVu
ZGVyLCBwcml2KTsKIH0KIAotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3Nt
YXJ0X21lbWJlcl9kZWwoRXZhc19PYmplY3QgKm8sIEV2YXNfT2JqZWN0ICptZW1iZXIpCitzdGF0
aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfbWVtYmVyX2RlbChFdmFzX09i
amVjdCogZXdrVGlsZSwgRXZhc19PYmplY3QqIG1lbWJlcikKIHsKLSAgICBQUklWX0RBVEFfR0VU
X09SX1JFVFVSTihvLCBwcml2KTsKKyAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihld2tUaWxl
LCBwcml2KTsKICAgICBpZiAoIXByaXYtPmNvbnRlbnRzX2NsaXBwZXIpCiAgICAgICAgIHJldHVy
bjsKICAgICBldmFzX29iamVjdF9jbGlwX3Vuc2V0KG1lbWJlcik7CkBAIC02NDIsMTggKzY0Miwx
OCBAQCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfbWVtYmVyX2Rl
bChFdmFzX09iamVjdCAqbywgRXZhc19PYmplYwogICAgICAgICBldmFzX29iamVjdF9oaWRlKHBy
aXYtPmNvbnRlbnRzX2NsaXBwZXIpOwogfQogCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfc21hcnRfbWVtYmVyX2FkZChFdmFzX09iamVjdCAqbywgRXZhc19PYmplY3QgKm1l
bWJlcikKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9tZW1iZXJf
YWRkKEV2YXNfT2JqZWN0KiBld2tUaWxlLCBFdmFzX09iamVjdCogbWVtYmVyKQogewotICAgIFBS
SVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYpOworICAgIFBSSVZfREFUQV9HRVRfT1JfUkVU
VVJOKGV3a1RpbGUsIHByaXYpOwogICAgIGlmICghcHJpdi0+Y29udGVudHNfY2xpcHBlcikKICAg
ICAgICAgcmV0dXJuOwogICAgIGV2YXNfb2JqZWN0X2NsaXBfc2V0KG1lbWJlciwgcHJpdi0+Y29u
dGVudHNfY2xpcHBlcik7Ci0gICAgaWYgKGV2YXNfb2JqZWN0X3Zpc2libGVfZ2V0KG8pKQorICAg
IGlmIChldmFzX29iamVjdF92aXNpYmxlX2dldChld2tUaWxlKSkKICAgICAgICAgZXZhc19vYmpl
Y3Rfc2hvdyhwcml2LT5jb250ZW50c19jbGlwcGVyKTsKIH0KIAogI2lmZGVmIERFQlVHX01FTV9M
RUFLUwotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX21lbV9kYmcoRXdrX1Rp
bGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdikKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9tZW1fZGJnKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYpCiB7
CiAgICAgc3RhdGljIGludCBydW4gPSAwOwogCkBAIC02NzAsMTMgKzY3MCwxMyBAQCBzdGF0aWMg
dm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfbWVtX2RiZyhFd2tfVGlsZWRfQmFja2luZ19T
dG9yZV9EYXRhICpwcml2KQogICAgIHByaW50ZigiLS0tIEVORCBERUJVRyBUSUxFRCBCQUNLSU5H
IFNUT1JFIE1FTU9SWSBbJWRdIC0tXG5cbiIsIHJ1bik7CiB9CiAKLXN0YXRpYyBFaW5hX0Jvb2wg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NpZ191c3Iodm9pZCAqZGF0YSwgaW50IHR5cGUsIHZv
aWQgKmV2ZW50KQorc3RhdGljIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc2ln
X3Vzcih2b2lkKiBkYXRhLCBpbnQgdHlwZSwgdm9pZCogZXZlbnQpCiB7Ci0gICAgRWNvcmVfRXZl
bnRfU2lnbmFsX1VzZXIgKnNpZyA9IChFY29yZV9FdmVudF9TaWduYWxfVXNlciopZXZlbnQ7Ci0g
ICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiA9IChFd2tfVGlsZWRfQmFja2lu
Z19TdG9yZV9EYXRhKilkYXRhOworICAgIEVjb3JlX0V2ZW50X1NpZ25hbF9Vc2VyKiBzaWcgPSAo
RWNvcmVfRXZlbnRfU2lnbmFsX1VzZXIqKWV2ZW50OworICAgIEV3a19UaWxlZF9CYWNraW5nX1N0
b3JlX0RhdGEqIHByaXYgPSAoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSopZGF0YTsKIAog
ICAgIGlmIChzaWctPm51bWJlciA9PSAyKSB7Ci0gICAgICAgIEV3a19UaWxlX1VudXNlZF9DYWNo
ZSAqdHVjOworICAgICAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHR1YzsKICAgICAgICAgdHVj
ID0gZXdrX3RpbGVfbWF0cml4X3VudXNlZF9jYWNoZV9nZXQocHJpdi0+bW9kZWwubWF0cml4KTsK
ICAgICAgICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2F1dG9fZmx1c2godHVjKTsKICAgICB9CkBA
IC02ODcsMjAgKzY4NywyMCBAQCBzdGF0aWMgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9zaWdfdXNyKHZvaWQgKmRhdGEsIGludCB0eXBlLCB2b2lkICpldgogfQogI2VuZGlmCiAK
LXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9hZGQoRXZhc19PYmpl
Y3QgKm8pCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfYWRkKEV2
YXNfT2JqZWN0KiBld2tUaWxlKQogewotICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEg
KnByaXY7CisgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdjsKIAotICAgIERC
Rygibz0lcCIsIG8pOworICAgIERCRygibz0lcCIsIGV3a1RpbGUpOwogCiAgICAgcHJpdiA9IHN0
YXRpY19jYXN0PEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqPihjYWxsb2MoMSwgc2l6ZW9m
KCpwcml2KSkpOwogICAgIGlmICghcHJpdikKICAgICAgICAgcmV0dXJuOwogCi0gICAgcHJpdi0+
c2VsZiA9IG87CisgICAgcHJpdi0+c2VsZiA9IGV3a1RpbGU7CiAgICAgcHJpdi0+dmlldy50aWxl
Lnpvb20gPSAxLjA7Ci0gICAgcHJpdi0+dmlldy50aWxlLncgPSBERUZBVUxUX1RJTEVfVzsKLSAg
ICBwcml2LT52aWV3LnRpbGUuaCA9IERFRkFVTFRfVElMRV9IOworICAgIHByaXYtPnZpZXcudGls
ZS53aWR0aCA9IERFRkFVTFRfVElMRV9XOworICAgIHByaXYtPnZpZXcudGlsZS5oZWlnaHQgPSBE
RUZBVUxUX1RJTEVfSDsKICAgICBwcml2LT52aWV3Lm9mZnNldC5jdXIueCA9IDA7CiAgICAgcHJp
di0+dmlldy5vZmZzZXQuY3VyLnkgPSAwOwogICAgIHByaXYtPnZpZXcub2Zmc2V0Lm9sZC54ID0g
MDsKQEAgLTcxOSwxNyArNzE5LDE3IEBAIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9zbWFydF9hZGQoRXZhc19PYmplY3QgKm8pCiAgICAgcHJpdi0+cmVuZGVyLnN1c3BlbmQg
PSBFSU5BX0ZBTFNFOwogICAgIHByaXYtPmNzcGFjZSA9IEVWQVNfQ09MT1JTUEFDRV9BUkdCODg4
ODsgLy8gVE9ETzogZGV0ZWN0IGl0LgogCi0gICAgZXZhc19vYmplY3Rfc21hcnRfZGF0YV9zZXQo
bywgcHJpdik7Ci0gICAgX3BhcmVudF9zYy5hZGQobyk7CisgICAgZXZhc19vYmplY3Rfc21hcnRf
ZGF0YV9zZXQoZXdrVGlsZSwgcHJpdik7CisgICAgX3BhcmVudF9zYy5hZGQoZXdrVGlsZSk7CiAK
ICAgICBwcml2LT5jb250ZW50c19jbGlwcGVyID0gZXZhc19vYmplY3RfcmVjdGFuZ2xlX2FkZCgK
LSAgICAgICAgZXZhc19vYmplY3RfZXZhc19nZXQobykpOworICAgICAgICBldmFzX29iamVjdF9l
dmFzX2dldChld2tUaWxlKSk7CiAgICAgZXZhc19vYmplY3RfbW92ZShwcml2LT5jb250ZW50c19j
bGlwcGVyLCAwLCAwKTsKICAgICBldmFzX29iamVjdF9yZXNpemUocHJpdi0+Y29udGVudHNfY2xp
cHBlciwKICAgICAgICAgICAgICAgICAgICAgICAgcHJpdi0+bW9kZWwud2lkdGgsIHByaXYtPm1v
ZGVsLmhlaWdodCk7CiAgICAgZXZhc19vYmplY3RfY29sb3Jfc2V0KHByaXYtPmNvbnRlbnRzX2Ns
aXBwZXIsIDI1NSwgMjU1LCAyNTUsIDI1NSk7CiAgICAgZXZhc19vYmplY3Rfc2hvdyhwcml2LT5j
b250ZW50c19jbGlwcGVyKTsKLSAgICBldmFzX29iamVjdF9zbWFydF9tZW1iZXJfYWRkKHByaXYt
PmNvbnRlbnRzX2NsaXBwZXIsIG8pOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X21lbWJlcl9hZGQo
cHJpdi0+Y29udGVudHNfY2xpcHBlciwgZXdrVGlsZSk7CiAKICAgICBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfbW9kZWxfbWF0cml4X2NyZWF0ZShwcml2LCAwKTsKICAgICBldmFzX29iamVjdF9t
b3ZlKHByaXYtPmJhc2UuY2xpcHBlciwgMCwgMCk7CkBAIC03MzgsMTUgKzczOCwxNSBAQCBzdGF0
aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfYWRkKEV2YXNfT2JqZWN0ICpv
KQogCiAjaWZkZWYgREVCVUdfTUVNX0xFQUtTCiAgICAgcHJpdi0+c2lnX3VzciA9IGVjb3JlX2V2
ZW50X2hhbmRsZXJfYWRkCi0gICAgICAgIChFQ09SRV9FVkVOVF9TSUdOQUxfVVNFUiwgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX3NpZ191c3IsIHByaXYpOworICAgICAgICAgICAgICAgICAgICAg
ICAgKEVDT1JFX0VWRU5UX1NJR05BTF9VU0VSLCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc2ln
X3VzciwgcHJpdik7CiAjZW5kaWYKIH0KIAotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5n
X3N0b3JlX3NtYXJ0X2RlbChFdmFzX09iamVjdCAqbykKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV9zbWFydF9kZWwoRXZhc19PYmplY3QqIGV3a1RpbGUpCiB7Ci0gICAgUFJJ
Vl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdik7Ci0gICAgREJHKCJvPSVwIiwgbyk7Ci0gICAg
RXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWM7CisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4o
ZXdrVGlsZSwgcHJpdik7CisgICAgREJHKCJvPSVwIiwgZXdrVGlsZSk7CisgICAgRXdrX1RpbGVf
VW51c2VkX0NhY2hlKiB0dWM7CiAKICAgICB0dWMgPSBld2tfdGlsZV9tYXRyaXhfdW51c2VkX2Nh
Y2hlX2dldChwcml2LT5tb2RlbC5tYXRyaXgpOwogICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV91
bmxvY2tfYXJlYSh0dWMpOwpAQCAtNzY3LDcgKzc2Nyw3IEBAIHN0YXRpYyB2b2lkIF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9zbWFydF9kZWwoRXZhc19PYmplY3QgKm8pCiAgICAgZXZhc19vYmpl
Y3Rfc21hcnRfbWVtYmVyX2RlbChwcml2LT5jb250ZW50c19jbGlwcGVyKTsKICAgICBldmFzX29i
amVjdF9kZWwocHJpdi0+Y29udGVudHNfY2xpcHBlcik7CiAKLSAgICBfcGFyZW50X3NjLmRlbChv
KTsKKyAgICBfcGFyZW50X3NjLmRlbChld2tUaWxlKTsKIAogI2lmZGVmIERFQlVHX01FTV9MRUFL
UwogICAgIHByaW50ZigiXG5JTVBPUlRBTlQ6IFRJTEVEIEJBQ0tJTkcgU1RPUkUgREVMRVRFRCAo
bWF5IGJlIHJlYWwgbGVha3MpXG4iKTsKQEAgLTc3NSwxMSArNzc1LDExIEBAIHN0YXRpYyB2b2lk
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9kZWwoRXZhc19PYmplY3QgKm8pCiAjZW5k
aWYKIH0KIAotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X21vdmUo
RXZhc19PYmplY3QgKm8sIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5KQorc3RhdGljIHZvaWQg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X21vdmUoRXZhc19PYmplY3QqIGV3a1RpbGUs
IEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5KQogewotICAgIERCRygibz0lcCwgbmV3IHBvczog
JWR4JWQiLCBvLCB4LCB5KTsKKyAgICBEQkcoIm89JXAsIG5ldyBwb3M6ICVkeCVkIiwgZXdrVGls
ZSwgeCwgeSk7CiAKLSAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2KTsKKyAgICBQ
UklWX0RBVEFfR0VUX09SX1JFVFVSTihld2tUaWxlLCBwcml2KTsKIAogICAgIGlmIChwcml2LT5j
aGFuZ2VkLnBvcykKICAgICAgICAgcmV0dXJuOwpAQCAtNzkxLDI5ICs3OTEsMjkgQEAgc3RhdGlj
IHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X21vdmUoRXZhc19PYmplY3QgKm8s
IEV2YXNfQ29vcmQgeCwgRXYKICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfY2hhbmdlZChw
cml2KTsKIH0KIAotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X3Jl
c2l6ZShFdmFzX09iamVjdCAqbywgRXZhc19Db29yZCB3LCBFdmFzX0Nvb3JkIGgpCitzdGF0aWMg
dm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfcmVzaXplKEV2YXNfT2JqZWN0KiBl
d2tUaWxlLCBFdmFzX0Nvb3JkIHdpZHRoLCBFdmFzX0Nvb3JkIGhlaWdodCkKIHsKLSAgICBEQkco
Im89JXAsIG5ldyBzaXplOiAlZHglZCIsIG8sIHcsIGgpOworICAgIERCRygibz0lcCwgbmV3IHNp
emU6ICVkeCVkIiwgZXdrVGlsZSwgd2lkdGgsIGhlaWdodCk7CiAKLSAgICBQUklWX0RBVEFfR0VU
X09SX1JFVFVSTihvLCBwcml2KTsKKyAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihld2tUaWxl
LCBwcml2KTsKIAogICAgIGlmIChwcml2LT5jaGFuZ2VkLnNpemUpCiAgICAgICAgIHJldHVybjsK
IAotICAgIGlmIChwcml2LT52aWV3LncgPT0gdyAmJiBwcml2LT52aWV3LmggPT0gaCkKKyAgICBp
ZiAocHJpdi0+dmlldy53aWR0aCA9PSB3aWR0aCAmJiBwcml2LT52aWV3LmhlaWdodCA9PSBoZWln
aHQpCiAgICAgICAgIHJldHVybjsKIAogICAgIHByaXYtPmNoYW5nZWQuc2l6ZSA9IEVJTkFfVFJV
RTsKICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfY2hhbmdlZChwcml2KTsKIH0KIAotc3Rh
dGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3JlY2FsY19yZW5kZXJlcnMoRXdrX1Rp
bGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgRXZhc19Db29yZCB3LCBFdmFzX0Nvb3JkIGgs
IEV2YXNfQ29vcmQgdHcsIEV2YXNfQ29vcmQgdGgpCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfcmVjYWxjX3JlbmRlcmVycyhFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRh
KiBwcml2LCBFdmFzX0Nvb3JkIHdpZHRoLCBFdmFzX0Nvb3JkIGhlaWdodCwgRXZhc19Db29yZCB0
dywgRXZhc19Db29yZCB0aCkKIHsKICAgICBsb25nIGNvbHMsIHJvd3MsIG9sZF9yb3dzLCBvbGRf
Y29sczsKLSAgICBJTkYoIm89JXAsIG5ldyBzaXplOiAlZHglZCIsIHByaXYtPnNlbGYsIHcsIGgp
OworICAgIElORigibz0lcCwgbmV3IHNpemU6ICVkeCVkIiwgcHJpdi0+c2VsZiwgd2lkdGgsIGhl
aWdodCk7CiAKLSAgICBjb2xzID0gMSArIChpbnQpY2VpbCgoZmxvYXQpdyAvIChmbG9hdCl0dyk7
Ci0gICAgcm93cyA9IDEgKyAoaW50KWNlaWwoKGZsb2F0KWggLyAoZmxvYXQpdGgpOworICAgIGNv
bHMgPSAxICsgKGludCljZWlsKChmbG9hdCl3aWR0aCAvIChmbG9hdCl0dyk7CisgICAgcm93cyA9
IDEgKyAoaW50KWNlaWwoKGZsb2F0KWhlaWdodCAvIChmbG9hdCl0aCk7CiAKICAgICBJTkYoIm89
JXAgbmV3IGdyaWQgc2l6ZSBjb2xzOiAlbGQsIHJvd3M6ICVsZCwgd2FzICVsZCwgJWxkIiwKICAg
ICAgICAgcHJpdi0+c2VsZiwgY29scywgcm93cywgcHJpdi0+dmlldy5jb2xzLCBwcml2LT52aWV3
LnJvd3MpOwpAQCAtODI1LDcgKzgyNSw3IEBAIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9yZWNhbGNfcmVuZGVyZXJzKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhCiAgICAg
b2xkX3Jvd3MgPSBwcml2LT52aWV3LnJvd3M7CiAKICAgICBpZiAocm93cyA8IG9sZF9yb3dzKSB7
Ci0gICAgICAgIEVpbmFfSW5saXN0ICoqc3RhcnQsICoqZW5kOworICAgICAgICBFaW5hX0lubGlz
dCoqIHN0YXJ0LCAqKiBlbmQ7CiAgICAgICAgIHN0YXJ0ID0gcHJpdi0+dmlldy5pdGVtcyArIHJv
d3M7CiAgICAgICAgIGVuZCA9IHByaXYtPnZpZXcuaXRlbXMgKyBvbGRfcm93czsKICAgICAgICAg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcm93c19yYW5nZV9kZWwocHJpdiwgc3RhcnQs
IGVuZCk7CkBAIC04MzksMTQgKzgzOSwxNCBAQCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfcmVjYWxjX3JlbmRlcmVycyhFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYQogICAg
IHByaXYtPnZpZXcucm93cyA9IHJvd3M7CiAgICAgcHJpdi0+dmlldy5jb2xzID0gY29sczsKICAg
ICBpZiAocm93cyA+IG9sZF9yb3dzKSB7Ci0gICAgICAgIEVpbmFfSW5saXN0ICoqc3RhcnQsICoq
ZW5kOworICAgICAgICBFaW5hX0lubGlzdCoqIHN0YXJ0LCAqKiBlbmQ7CiAgICAgICAgIHN0YXJ0
ID0gcHJpdi0+dmlldy5pdGVtcyArIG9sZF9yb3dzOwogICAgICAgICBlbmQgPSBwcml2LT52aWV3
Lml0ZW1zICsgcm93czsKICAgICAgICAgZm9yICg7IHN0YXJ0IDwgZW5kOyBzdGFydCsrKSB7CiAg
ICAgICAgICAgICBFaW5hX0Jvb2wgcjsKICAgICAgICAgICAgICpzdGFydCA9IDA7CiAgICAgICAg
ICAgICByID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfY29sc19lbmRfYWRkCi0gICAg
ICAgICAgICAgICAgKHByaXYsIHN0YXJ0LCAwLCBjb2xzKTsKKyAgICAgICAgICAgICAgICAgICAg
KHByaXYsIHN0YXJ0LCAwLCBjb2xzKTsKICAgICAgICAgICAgIGlmICghcikgewogICAgICAgICAg
ICAgICAgIENSSVRJQ0FMKCJmYWlsZWQgdG8gYWxsb2NhdGUgJWxkIGNvbHVtbnMiLCBjb2xzKTsK
ICAgICAgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19yb3dzX3Jhbmdl
X2RlbApAQCAtODU4LDcgKzg1OCw3IEBAIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9yZWNhbGNfcmVuZGVyZXJzKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhCiAgICAgfQog
CiAgICAgaWYgKGNvbHMgIT0gb2xkX2NvbHMpIHsKLSAgICAgICAgRWluYV9Jbmxpc3QgKipzdGFy
dCwgKiplbmQ7CisgICAgICAgIEVpbmFfSW5saXN0Kiogc3RhcnQsICoqIGVuZDsKICAgICAgICAg
aW50IHRvZG8gPSBjb2xzIC0gb2xkX2NvbHM7CiAgICAgICAgIHN0YXJ0ID0gcHJpdi0+dmlldy5p
dGVtczsKICAgICAgICAgZW5kID0gc3RhcnQgKyBzdGQ6Om1pbihvbGRfcm93cywgcm93cyk7CkBA
IC04NjYsNyArODY2LDcgQEAgc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3Jl
Y2FsY19yZW5kZXJlcnMoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGEKICAgICAgICAgICAgIGZv
ciAoOyBzdGFydCA8IGVuZDsgc3RhcnQrKykgewogICAgICAgICAgICAgICAgIEVpbmFfQm9vbCBy
OwogICAgICAgICAgICAgICAgIHIgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19jb2xz
X2VuZF9hZGQKLSAgICAgICAgICAgICAgICAgICAgKHByaXYsIHN0YXJ0LCBvbGRfY29scywgdG9k
byk7CisgICAgICAgICAgICAgICAgICAgICAgICAocHJpdiwgc3RhcnQsIG9sZF9jb2xzLCB0b2Rv
KTsKICAgICAgICAgICAgICAgICBpZiAoIXIpIHsKICAgICAgICAgICAgICAgICAgICAgQ1JJVElD
QUwoImZhaWxlZCB0byBhbGxvY2F0ZSAlZCBjb2x1bW5zISIsIHRvZG8pOwogCkBAIC04OTEsMjEg
Kzg5MSwyMSBAQCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcmVjYWxjX3Jl
bmRlcmVycyhFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYQogICAgIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9maWxsX3JlbmRlcmVycyhwcml2KTsKIH0KIAotc3RhdGljIHZvaWQgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZV9zaXplKEV3a19UaWxlZF9CYWNraW5nX1N0
b3JlX0RhdGEgKnByaXYsIEV2YXNfQ29vcmQgdywgRXZhc19Db29yZCBoKQorc3RhdGljIHZvaWQg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZV9zaXplKEV3a19UaWxlZF9C
YWNraW5nX1N0b3JlX0RhdGEqIHByaXYsIEV2YXNfQ29vcmQgd2lkdGgsIEV2YXNfQ29vcmQgaGVp
Z2h0KQogewotICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShwcml2LT5iYXNlLmNsaXBwZXIsIHcsIGgp
OworICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShwcml2LT5iYXNlLmNsaXBwZXIsIHdpZHRoLCBoZWln
aHQpOwogCi0gICAgcHJpdi0+dmlldy53ID0gdzsKLSAgICBwcml2LT52aWV3LmggPSBoOworICAg
IHByaXYtPnZpZXcud2lkdGggPSB3aWR0aDsKKyAgICBwcml2LT52aWV3LmhlaWdodCA9IGhlaWdo
dDsKIAogICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9yZWNhbGNfcmVuZGVyZXJzKAotICAg
ICAgICBwcml2LCB3LCBoLCBwcml2LT52aWV3LnRpbGUudywgcHJpdi0+dmlldy50aWxlLmgpOwor
ICAgICAgICBwcml2LCB3aWR0aCwgaGVpZ2h0LCBwcml2LT52aWV3LnRpbGUud2lkdGgsIHByaXYt
PnZpZXcudGlsZS5oZWlnaHQpOwogfQogCiAvLyBUT0RPOiByZW1vdmUgbWUgbGF0ZXIuCi1zdGF0
aWMgaW5saW5lIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfZGJnKGNvbnN0IEV3
a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYpCitzdGF0aWMgaW5saW5lIHZvaWQgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfZGJnKGNvbnN0IEV3a19UaWxlZF9CYWNraW5nX1N0
b3JlX0RhdGEqIHByaXYpCiB7Ci0gICAgRWluYV9Jbmxpc3QgKipzdGFydCwgKiplbmQ7CisgICAg
RWluYV9Jbmxpc3QqKiBzdGFydCwgKiogZW5kOwogICAgIHByaW50ZigidGlsZXM9JTJsZCwlMmxk
ICBtb2RlbD0lMmxkLCUybGQgWyVkeCVkXSBiYXNlPSUrM2xkLCUrNGxkIG9mZnNldD0lKzRkLCUr
NGQgb2xkPSUrNGQsJSs0ZCBiYXNlPSUrM2QsJSszZFxuIiwKICAgICAgICAgICAgcHJpdi0+dmll
dy5jb2xzLCBwcml2LT52aWV3LnJvd3MsCiAgICAgICAgICAgIHByaXYtPm1vZGVsLmN1ci5jb2xz
LCBwcml2LT5tb2RlbC5jdXIucm93cywKQEAgLTkxOCw3ICs5MTgsNyBAQCBzdGF0aWMgaW5saW5l
IHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfZGJnKGNvbnN0IEV3a19UaWxlZF9C
YWNraW5nX1N0bwogICAgIHN0YXJ0ID0gcHJpdi0+dmlldy5pdGVtczsKICAgICBlbmQgPSBwcml2
LT52aWV3Lml0ZW1zICsgcHJpdi0+dmlldy5yb3dzOwogICAgIGZvciAoOyBzdGFydCA8IGVuZDsg
c3RhcnQrKykgewotICAgICAgICBjb25zdCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICpp
dDsKKyAgICAgICAgY29uc3QgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSogaXQ7CiAKICAg
ICAgICAgRUlOQV9JTkxJU1RfRk9SRUFDSCgqc3RhcnQsIGl0KSB7CiAgICAgICAgICAgICBwcmlu
dGYoIiAlKzRkLCUrNGQgIiwgaXQtPmdlb21ldHJ5LngsIGl0LT5nZW9tZXRyeS55KTsKQEAgLTk0
NiwyMiArOTQ2LDIyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfdmlld19kYmcoY29uc3QgRXdrX1RpbGVkX0JhY2tpbmdfU3RvCiAgKgogICogQHBhcmFtIGNv
dW50IHRoZSBudW1iZXIgb2YgdGltZXMgdG8gcmVwZWF0IHRoZSBwcm9jZXNzLgogICovCi1zdGF0
aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld193cmFwX3VwKEV3a19UaWxlZF9C
YWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5LCB1bnNp
Z25lZCBpbnQgY291bnQpCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmll
d193cmFwX3VwKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYsIEV2YXNfQ29vcmQg
eCwgRXZhc19Db29yZCB5LCB1bnNpZ25lZCBpbnQgY291bnQpCiB7CiAgICAgdW5zaWduZWQgaW50
IGxhc3Rfcm93ID0gcHJpdi0+dmlldy5yb3dzIC0gMTsKLSAgICBFdmFzX0Nvb3JkIHR3ID0gcHJp
di0+dmlldy50aWxlLnc7Ci0gICAgRXZhc19Db29yZCB0aCA9IHByaXYtPnZpZXcudGlsZS5oOwor
ICAgIEV2YXNfQ29vcmQgdHcgPSBwcml2LT52aWV3LnRpbGUud2lkdGg7CisgICAgRXZhc19Db29y
ZCB0aCA9IHByaXYtPnZpZXcudGlsZS5oZWlnaHQ7CiAgICAgRXZhc19Db29yZCBvZmZfeSA9IHBy
aXYtPnZpZXcub2Zmc2V0LmJhc2UueSArIGNvdW50ICogdGg7CiAgICAgRXZhc19Db29yZCBveSA9
IHkgKyAobGFzdF9yb3cgLSBjb3VudCArIDEpICogdGggKyBvZmZfeTsKLSAgICBFaW5hX0lubGlz
dCAqKml0cl9zdGFydCwgKippdHJfZW5kOworICAgIEVpbmFfSW5saXN0KiogaXRyX3N0YXJ0LCAq
KiBpdHJfZW5kOwogCiAgICAgaXRyX3N0YXJ0ID0gcHJpdi0+dmlldy5pdGVtczsKICAgICBpdHJf
ZW5kID0gaXRyX3N0YXJ0ICsgbGFzdF9yb3c7CiAKICAgICBmb3IgKDsgY291bnQgPiAwOyBjb3Vu
dC0tKSB7Ci0gICAgICAgIEVpbmFfSW5saXN0ICoqaXRyOwotICAgICAgICBFaW5hX0lubGlzdCAq
dG1wID0gKml0cl9zdGFydDsKLSAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAq
aXQ7CisgICAgICAgIEVpbmFfSW5saXN0KiogaXRyOworICAgICAgICBFaW5hX0lubGlzdCogdG1w
ID0gKml0cl9zdGFydDsKKyAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSogaXQ7
CiAgICAgICAgIEV2YXNfQ29vcmQgb3ggPSB4ICsgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54Owog
ICAgICAgICBpbnQgYyA9IDA7CiAKQEAgLTk5NCwyMSArOTk0LDIxIEBAIHN0YXRpYyB2b2lkIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3dyYXBfdXAoRXdrX1RpbGVkX0JhY2tpbmdfU3Rv
cmVfRGF0YSAqCiAgKgogICogQHBhcmFtIGNvdW50IHRoZSBudW1iZXIgb2YgdGltZXMgdG8gcmVw
ZWF0IHRoZSBwcm9jZXNzLgogICovCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfdmlld193cmFwX2Rvd24oRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgRXZh
c19Db29yZCB4LCBFdmFzX0Nvb3JkIHksIHVuc2lnbmVkIGludCBjb3VudCkKK3N0YXRpYyB2b2lk
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3dyYXBfZG93bihFd2tfVGlsZWRfQmFja2lu
Z19TdG9yZV9EYXRhKiBwcml2LCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwgdW5zaWduZWQg
aW50IGNvdW50KQogewotICAgIEV2YXNfQ29vcmQgdHcgPSBwcml2LT52aWV3LnRpbGUudzsKLSAg
ICBFdmFzX0Nvb3JkIHRoID0gcHJpdi0+dmlldy50aWxlLmg7CisgICAgRXZhc19Db29yZCB0dyA9
IHByaXYtPnZpZXcudGlsZS53aWR0aDsKKyAgICBFdmFzX0Nvb3JkIHRoID0gcHJpdi0+dmlldy50
aWxlLmhlaWdodDsKICAgICBFdmFzX0Nvb3JkIG9mZl95ID0gcHJpdi0+dmlldy5vZmZzZXQuYmFz
ZS55IC0gY291bnQgKiB0aDsKICAgICBFdmFzX0Nvb3JkIG95ID0geSArIG9mZl95ICsgKGNvdW50
IC0gMSkgKiB0aDsKLSAgICBFaW5hX0lubGlzdCAqKml0cl9zdGFydCwgKippdHJfZW5kOworICAg
IEVpbmFfSW5saXN0KiogaXRyX3N0YXJ0LCAqKiBpdHJfZW5kOwogCiAgICAgaXRyX3N0YXJ0ID0g
cHJpdi0+dmlldy5pdGVtcyArIHByaXYtPnZpZXcucm93cyAtIDE7CiAgICAgaXRyX2VuZCA9IHBy
aXYtPnZpZXcuaXRlbXM7CiAKICAgICBmb3IgKDsgY291bnQgPiAwOyBjb3VudC0tKSB7Ci0gICAg
ICAgIEVpbmFfSW5saXN0ICoqaXRyOwotICAgICAgICBFaW5hX0lubGlzdCAqdG1wID0gKml0cl9z
dGFydDsKLSAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQ7CisgICAgICAg
IEVpbmFfSW5saXN0KiogaXRyOworICAgICAgICBFaW5hX0lubGlzdCogdG1wID0gKml0cl9zdGFy
dDsKKyAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSogaXQ7CiAgICAgICAgIEV2
YXNfQ29vcmQgb3ggPSB4ICsgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54OwogICAgICAgICBpbnQg
YyA9IDA7CiAKQEAgLTEwNDEsMTUgKzEwNDEsMTUgQEAgc3RhdGljIHZvaWQgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX3ZpZXdfd3JhcF9kb3duKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEK
ICAqCiAgKiBAcGFyYW0gY291bnQgdGhlIG51bWJlciBvZiB0aW1lcyB0byByZXBlYXQgdGhlIHBy
b2Nlc3MuCiAgKi8KLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3dy
YXBfbGVmdChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFdmFzX0Nvb3JkIHgs
IEV2YXNfQ29vcmQgeSwgdW5zaWduZWQgaW50IGNvdW50KQorc3RhdGljIHZvaWQgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX3ZpZXdfd3JhcF9sZWZ0KEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0Rh
dGEqIHByaXYsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5LCB1bnNpZ25lZCBpbnQgY291bnQp
CiB7CiAgICAgdW5zaWduZWQgaW50IHIsIGxhc3RfY29sID0gcHJpdi0+dmlldy5jb2xzIC0gMTsK
LSAgICBFdmFzX0Nvb3JkIHR3ID0gcHJpdi0+dmlldy50aWxlLnc7Ci0gICAgRXZhc19Db29yZCB0
aCA9IHByaXYtPnZpZXcudGlsZS5oOworICAgIEV2YXNfQ29vcmQgdHcgPSBwcml2LT52aWV3LnRp
bGUud2lkdGg7CisgICAgRXZhc19Db29yZCB0aCA9IHByaXYtPnZpZXcudGlsZS5oZWlnaHQ7CiAg
ICAgRXZhc19Db29yZCBvZmZfeCA9IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCArIGNvdW50ICog
dHc7CiAgICAgRXZhc19Db29yZCBveSA9IHkgKyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnk7Ci0g
ICAgRWluYV9Jbmxpc3QgKippdHI7Ci0gICAgRWluYV9Jbmxpc3QgKippdHJfZW5kOworICAgIEVp
bmFfSW5saXN0KiogaXRyOworICAgIEVpbmFfSW5saXN0KiogaXRyX2VuZDsKIAogICAgIGl0ciA9
IHByaXYtPnZpZXcuaXRlbXM7CiAgICAgaXRyX2VuZCA9IGl0ciArIHByaXYtPnZpZXcucm93czsK
QEAgLTEwNjIsNyArMTA2Miw3IEBAIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV92aWV3X3dyYXBfbGVmdChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhCiAgICAgICAgIHVu
c2lnbmVkIGludCBpLCBjID0gbGFzdF9jb2wgLSBjb3VudCArIDE7CiAKICAgICAgICAgZm9yIChp
ID0gMDsgaSA8IGNvdW50OyBpKyssIGMrKywgb3ggKz0gdHcpIHsKLSAgICAgICAgICAgIEV3a19U
aWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0OworICAgICAgICAgICAgRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfSXRlbSogaXQ7CiAgICAgICAgICAgICBpdCA9IEVJTkFfSU5MSVNUX0NPTlRBSU5F
Ul9HRVQoKml0ciwgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSk7CiAgICAgICAgICAgICAq
aXRyID0gZWluYV9pbmxpc3RfZGVtb3RlKCppdHIsICppdHIpOwogCkBAIC0xMDg4LDE0ICsxMDg4
LDE0IEBAIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3dyYXBfbGVm
dChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhCiAgKgogICogQHBhcmFtIGNvdW50IHRoZSBu
dW1iZXIgb2YgdGltZXMgdG8gcmVwZWF0IHRoZSBwcm9jZXNzLgogICovCi1zdGF0aWMgdm9pZCBf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld193cmFwX3JpZ2h0KEV3a19UaWxlZF9CYWNraW5n
X1N0b3JlX0RhdGEgKnByaXYsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5LCB1bnNpZ25lZCBp
bnQgY291bnQpCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld193cmFw
X3JpZ2h0KEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYsIEV2YXNfQ29vcmQgeCwg
RXZhc19Db29yZCB5LCB1bnNpZ25lZCBpbnQgY291bnQpCiB7CiAgICAgdW5zaWduZWQgaW50IHI7
Ci0gICAgRXZhc19Db29yZCB0dyA9IHByaXYtPnZpZXcudGlsZS53OwotICAgIEV2YXNfQ29vcmQg
dGggPSBwcml2LT52aWV3LnRpbGUuaDsKKyAgICBFdmFzX0Nvb3JkIHR3ID0gcHJpdi0+dmlldy50
aWxlLndpZHRoOworICAgIEV2YXNfQ29vcmQgdGggPSBwcml2LT52aWV3LnRpbGUuaGVpZ2h0Owog
ICAgIEV2YXNfQ29vcmQgb2ZmX3ggPSBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggLSBjb3VudCAq
IHR3OwogICAgIEV2YXNfQ29vcmQgb3kgPSB5ICsgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55Owot
ICAgIEVpbmFfSW5saXN0ICoqaXRyLCAqKml0cl9lbmQ7CisgICAgRWluYV9Jbmxpc3QqKiBpdHIs
ICoqIGl0cl9lbmQ7CiAKICAgICBpdHIgPSBwcml2LT52aWV3Lml0ZW1zOwogICAgIGl0cl9lbmQg
PSBpdHIgKyBwcml2LT52aWV3LnJvd3M7CkBAIC0xMTA4LDcgKzExMDgsNyBAQCBzdGF0aWMgdm9p
ZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld193cmFwX3JpZ2h0KEV3a19UaWxlZF9CYWNr
aW5nX1N0b3JlX0RhdAogICAgICAgICB1bnNpZ25lZCBpbnQgaSwgYyA9IGNvdW50IC0gMTsKIAog
ICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKywgYy0tLCBveCAtPSB0dykgewotICAg
ICAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQ7CisgICAgICAgICAgICBF
d2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKiBpdDsKICAgICAgICAgICAgIGl0ID0gRUlOQV9J
TkxJU1RfQ09OVEFJTkVSX0dFVCgoKml0ciktPmxhc3QsIEV3a19UaWxlZF9CYWNraW5nX1N0b3Jl
X0l0ZW0pOwogICAgICAgICAgICAgKml0ciA9IGVpbmFfaW5saXN0X3Byb21vdGUoKml0ciwgKCpp
dHIpLT5sYXN0KTsKIApAQCAtMTEyMSwxNiArMTEyMSwxNiBAQCBzdGF0aWMgdm9pZCBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfdmlld193cmFwX3JpZ2h0KEV3a19UaWxlZF9CYWNraW5nX1N0b3Jl
X0RhdAogICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCA9IG9mZl94OwogfQogCi1zdGF0aWMg
dm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19yZWZpbGwoRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfRGF0YSAqcHJpdiwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHksIGludCBzdGVw
X3gsIGludCBzdGVwX3kpCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmll
d19yZWZpbGwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdiwgRXZhc19Db29yZCB4
LCBFdmFzX0Nvb3JkIHksIGludCBzdGVwX3gsIGludCBzdGVwX3kpCiB7Ci0gICAgRWluYV9Jbmxp
c3QgKippdHIsICoqaXRyX2VuZDsKKyAgICBFaW5hX0lubGlzdCoqIGl0ciwgKiogaXRyX2VuZDsK
ICAgICBFdmFzX0Nvb3JkIGJhc2Vfb3gsIG95LCB0dywgdGg7CiAgICAgdW5zaWduZWQgaW50IHI7
CiAKICAgICBldmFzX29iamVjdF9tb3ZlKHByaXYtPmJhc2UuY2xpcHBlciwgeCwgeSk7CiAKLSAg
ICB0dyA9IHByaXYtPnZpZXcudGlsZS53OwotICAgIHRoID0gcHJpdi0+dmlldy50aWxlLmg7Cisg
ICAgdHcgPSBwcml2LT52aWV3LnRpbGUud2lkdGg7CisgICAgdGggPSBwcml2LT52aWV3LnRpbGUu
aGVpZ2h0OwogCiAgICAgYmFzZV9veCA9IHggKyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLng7CiAg
ICAgb3kgPSB5ICsgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55OwpAQCAtMTE0Myw3ICsxMTQzLDcg
QEAgc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcmVmaWxsKEV3a19U
aWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnAKICAgICBwcml2LT5tb2RlbC5iYXNlLnJvdyAtPSBz
dGVwX3k7CiAKICAgICBmb3IgKDsgaXRyIDwgaXRyX2VuZDsgaXRyKyssIHIrKykgewotICAgICAg
ICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdDsKKyAgICAgICAgRXdrX1RpbGVkX0Jh
Y2tpbmdfU3RvcmVfSXRlbSogaXQ7CiAgICAgICAgIEV2YXNfQ29vcmQgb3ggPSBiYXNlX294Owog
ICAgICAgICB1bnNpZ25lZCBpbnQgYyA9IDA7CiAgICAgICAgIEVJTkFfSU5MSVNUX0ZPUkVBQ0go
Kml0ciwgaXQpIHsKQEAgLTExNTYsMTUgKzExNTYsMTUgQEAgc3RhdGljIHZvaWQgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX3ZpZXdfcmVmaWxsKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEg
KnAKICAgICB9CiB9CiAKLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3
X3Bvc19hcHBseShFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFdmFzX0Nvb3Jk
IHgsIEV2YXNfQ29vcmQgeSkKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92
aWV3X3Bvc19hcHBseShFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2LCBFdmFzX0Nv
b3JkIHgsIEV2YXNfQ29vcmQgeSkKIHsKLSAgICBFaW5hX0lubGlzdCAqKml0ciwgKippdHJfZW5k
OworICAgIEVpbmFfSW5saXN0KiogaXRyLCAqKiBpdHJfZW5kOwogICAgIEV2YXNfQ29vcmQgYmFz
ZV9veCwgb3ksIHR3LCB0aDsKIAogICAgIGV2YXNfb2JqZWN0X21vdmUocHJpdi0+YmFzZS5jbGlw
cGVyLCB4LCB5KTsKIAotICAgIHR3ID0gcHJpdi0+dmlldy50aWxlLnc7Ci0gICAgdGggPSBwcml2
LT52aWV3LnRpbGUuaDsKKyAgICB0dyA9IHByaXYtPnZpZXcudGlsZS53aWR0aDsKKyAgICB0aCA9
IHByaXYtPnZpZXcudGlsZS5oZWlnaHQ7CiAKICAgICBiYXNlX294ID0geCArIHByaXYtPnZpZXcu
b2Zmc2V0LmJhc2UueDsKICAgICBveSA9IHkgKyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnk7CkBA
IC0xMTcyLDcgKzExNzIsNyBAQCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
dmlld19wb3NfYXBwbHkoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YQogICAgIGl0ciA9IHBy
aXYtPnZpZXcuaXRlbXM7CiAgICAgaXRyX2VuZCA9IGl0ciArIHByaXYtPnZpZXcucm93czsKICAg
ICBmb3IgKDsgaXRyIDwgaXRyX2VuZDsgaXRyKyspIHsKLSAgICAgICAgRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfSXRlbSAqaXQ7CisgICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0q
IGl0OwogICAgICAgICBFdmFzX0Nvb3JkIG94ID0gYmFzZV9veDsKICAgICAgICAgRUlOQV9JTkxJ
U1RfRk9SRUFDSCgqaXRyLCBpdCkgewogICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX2l0ZW1fbW92ZShpdCwgb3gsIG95KTsKQEAgLTExODIsNyArMTE4Miw3IEBAIHN0YXRpYyB2
b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3Bvc19hcHBseShFd2tfVGlsZWRfQmFj
a2luZ19TdG9yZV9EYXRhCiAgICAgfQogfQogCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfc21hcnRfY2FsY3VsYXRlX29mZnNldF9mb3JjZShFd2tfVGlsZWRfQmFja2luZ19T
dG9yZV9EYXRhICpwcml2KQorc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3Nt
YXJ0X2NhbGN1bGF0ZV9vZmZzZXRfZm9yY2UoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSog
cHJpdikKIHsKICAgICBFdmFzX0Nvb3JkIGR4ID0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggLSBw
cml2LT52aWV3Lm9mZnNldC5vbGQueDsKICAgICBFdmFzX0Nvb3JkIGR5ID0gcHJpdi0+dmlldy5v
ZmZzZXQuY3VyLnkgLSBwcml2LT52aWV3Lm9mZnNldC5vbGQueTsKQEAgLTExOTIsOCArMTE5Miw4
IEBAIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9jYWxjdWxhdGVf
b2Zmc2V0X2ZvcmNlKEV3a19UaWxlZF9CYWNrCiAgICAgSU5GKCJvPSVwLCBvZmZzZXQ6ICUrNGQs
ICUrNGQgKCUrNGQsICUrNGQpIiwKICAgICAgICAgcHJpdi0+c2VsZiwgZHgsIGR5LCBwcml2LT52
aWV3Lm9mZnNldC5jdXIueCwgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkpOwogCi0gICAgdHcgPSBw
cml2LT52aWV3LnRpbGUudzsKLSAgICB0aCA9IHByaXYtPnZpZXcudGlsZS5oOworICAgIHR3ID0g
cHJpdi0+dmlldy50aWxlLndpZHRoOworICAgIHRoID0gcHJpdi0+dmlldy50aWxlLmhlaWdodDsK
IAogICAgIGxvbmcgbmV3X2NvbCA9IC1wcml2LT52aWV3Lm9mZnNldC5jdXIueCAvIHR3OwogICAg
IHN0ZXBfeCA9IHByaXYtPm1vZGVsLmJhc2UuY29sIC0gbmV3X2NvbDsKQEAgLTEyMTQsNyArMTIx
NCw3IEBAIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9jYWxjdWxh
dGVfb2Zmc2V0X2ZvcmNlKEV3a19UaWxlZF9CYWNrCiAgICAgICAgIChwcml2LCBwcml2LT52aWV3
LngsIHByaXYtPnZpZXcueSwgc3RlcF94LCBzdGVwX3kpOwogfQogCi1zdGF0aWMgdm9pZCBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfY2FsY3VsYXRlX29mZnNldChFd2tfVGlsZWRfQmFj
a2luZ19TdG9yZV9EYXRhICpwcml2LCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSkKK3N0YXRp
YyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9jYWxjdWxhdGVfb2Zmc2V0KEV3
a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29y
ZCB5KQogewogICAgIEV2YXNfQ29vcmQgZHggPSBwcml2LT52aWV3Lm9mZnNldC5jdXIueCAtIHBy
aXYtPnZpZXcub2Zmc2V0Lm9sZC54OwogICAgIEV2YXNfQ29vcmQgZHkgPSBwcml2LT52aWV3Lm9m
ZnNldC5jdXIueSAtIHByaXYtPnZpZXcub2Zmc2V0Lm9sZC55OwpAQCAtMTIyNyw4ICsxMjI3LDgg
QEAgc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZV9v
ZmZzZXQoRXdrX1RpbGVkX0JhY2tpbmdfU3QKICAgICBpZiAoIWR4ICYmICFkeSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgdHcgPSBwcml2LT52aWV3LnRpbGUudzsKLSAgICB0aCA9IHByaXYtPnZp
ZXcudGlsZS5oOworICAgIHR3ID0gcHJpdi0+dmlldy50aWxlLndpZHRoOworICAgIHRoID0gcHJp
di0+dmlldy50aWxlLmhlaWdodDsKIAogICAgIGxvbmcgbmV3X2NvbCA9IC1wcml2LT52aWV3Lm9m
ZnNldC5jdXIueCAvIHR3OwogICAgIHN0ZXBfeCA9IHByaXYtPm1vZGVsLmJhc2UuY29sIC0gbmV3
X2NvbDsKQEAgLTEyNzEsNyArMTI3MSw3IEBAIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9zbWFydF9jYWxjdWxhdGVfb2Zmc2V0KEV3a19UaWxlZF9CYWNraW5nX1N0CiAgICAg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcG9zX2FwcGx5KHByaXYsIHgsIHkpOwogfQog
Ci1zdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfY2FsY3VsYXRlX3Bv
cyhFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFdmFzX0Nvb3JkIHgsIEV2YXNf
Q29vcmQgeSkKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9jYWxj
dWxhdGVfcG9zKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYsIEV2YXNfQ29vcmQg
eCwgRXZhc19Db29yZCB5KQogewogICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3Bv
c19hcHBseShwcml2LCB4LCB5KTsKICAgICBwcml2LT52aWV3LnggPSB4OwpAQCAtMTI4MiwxMCAr
MTI4MiwxMCBAQCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfY2Fs
Y3VsYXRlX3BvcyhFd2tfVGlsZWRfQmFja2luZ19TdG9yZQogICAgICAgICBwcml2LT52aWV3Lm9m
ZnNldC5jdXIueSArIHByaXYtPnZpZXcueSk7CiB9CiAKLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV9maWxsX3JlbmRlcmVycyhFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRh
ICpwcml2KQorc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2ZpbGxfcmVuZGVy
ZXJzKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYpCiB7Ci0gICAgRWluYV9Jbmxp
c3QgKml0OwotICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0ZW07CisgICAgRWlu
YV9Jbmxpc3QqIGl0OworICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0qIGl0ZW07CiAg
ICAgaW50IGksIGo7CiAKICAgICBmb3IgKGkgPSAwOyBpIDwgcHJpdi0+dmlldy5yb3dzOyBpKysp
IHsKQEAgLTEyOTYsMTQgKzEyOTYsMTQgQEAgc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5n
X3N0b3JlX2ZpbGxfcmVuZGVyZXJzKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEKICAgICB9
CiB9CiAKLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9jYWxjdWxh
dGUoRXZhc19PYmplY3QgKm8pCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
c21hcnRfY2FsY3VsYXRlKEV2YXNfT2JqZWN0KiBld2tUaWxlKQogewogICAgIEV2YXNfQ29vcmQg
eCwgeSwgdywgaDsKIAotICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldChvLCAmeCwgJnksICZ3
LCAmaCk7Ci0gICAgREJHKCJvPSVwIGF0ICVkLCVkICsgJWR4JWQiLCBvLCB4LCB5LCB3LCBoKTsK
KyAgICBldmFzX29iamVjdF9nZW9tZXRyeV9nZXQoZXdrVGlsZSwgJngsICZ5LCAmdywgJmgpOwor
ICAgIERCRygibz0lcCBhdCAlZCwlZCArICVkeCVkIiwgZXdrVGlsZSwgeCwgeSwgdywgaCk7CiAK
LSAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2KTsKKyAgICBQUklWX0RBVEFfR0VU
X09SX1JFVFVSTihld2tUaWxlLCBwcml2KTsKIAogICAgIHByaXYtPmNoYW5nZWQuYW55ID0gRUlO
QV9GQUxTRTsKIApAQCAtMTMxMiw4ICsxMzEyLDggQEAgc3RhdGljIHZvaWQgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZShFdmFzX09iamVjdCAqbykKICAgICBpZiAoIXBy
aXYtPnJlbmRlci5zdXNwZW5kICYmIHByaXYtPmNoYW5nZWQubW9kZWwpIHsKICAgICAgICAgdW5z
aWduZWQgbG9uZyBjb2xzLCByb3dzOwogCi0gICAgICAgIGNvbHMgPSBwcml2LT5tb2RlbC53aWR0
aCAvIHByaXYtPnZpZXcudGlsZS53ICsgMTsKLSAgICAgICAgcm93cyA9IHByaXYtPm1vZGVsLmhl
aWdodCAvIHByaXYtPnZpZXcudGlsZS5oICsgMTsKKyAgICAgICAgY29scyA9IHByaXYtPm1vZGVs
LndpZHRoIC8gcHJpdi0+dmlldy50aWxlLndpZHRoICsgMTsKKyAgICAgICAgcm93cyA9IHByaXYt
Pm1vZGVsLmhlaWdodCAvIHByaXYtPnZpZXcudGlsZS5oZWlnaHQgKyAxOwogCiAgICAgICAgIHBy
aXYtPm1vZGVsLm9sZC5jb2xzID0gcHJpdi0+bW9kZWwuY3VyLmNvbHM7CiAgICAgICAgIHByaXYt
Pm1vZGVsLm9sZC5yb3dzID0gcHJpdi0+bW9kZWwuY3VyLnJvd3M7CkBAIC0xMzQ4LDggKzEzNDgs
OCBAQCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfY2FsY3VsYXRl
KEV2YXNfT2JqZWN0ICpvKQogICAgICAgICByZWN0LmggPSBwcml2LT5tb2RlbC5oZWlnaHQ7CiAg
ICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9maWxsX3JlbmRlcmVycyhwcml2KTsKICAg
ICAgICAgZXdrX3RpbGVfbWF0cml4X3Jlc2l6ZShwcml2LT5tb2RlbC5tYXRyaXgsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICBwcml2LT5tb2RlbC5jdXIuY29scywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHByaXYtPm1vZGVsLmN1ci5yb3dzKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwcml2LT5tb2RlbC5jdXIuY29scywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwcml2LT5tb2RlbC5jdXIucm93cyk7CiAgICAgICAgIHByaXYtPmNoYW5nZWQubW9k
ZWwgPSBFSU5BX0ZBTFNFOwogICAgICAgICBldmFzX29iamVjdF9yZXNpemUocHJpdi0+Y29udGVu
dHNfY2xpcHBlciwgcHJpdi0+bW9kZWwud2lkdGgsIHByaXYtPm1vZGVsLmhlaWdodCk7CiAgICAg
ICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9jYWxjdWxhdGVfb2Zmc2V0X2ZvcmNl
KHByaXYpOwpAQCAtMTM1Nyw3ICsxMzU3LDcgQEAgc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNr
aW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZShFdmFzX09iamVjdCAqbykKICAgICAgICAgLyogTWFr
ZSBzdXJlIHdlIGRvIG5vdCBtaXNzIGFueSBpbXBvcnRhbnQgcmVwYWludCBieQogICAgICAgICAg
KiByZXBhaW50aW5nIHRoZSB3aG9sZSB2aWV3cG9ydCAqLwogICAgICAgICBjb25zdCBFaW5hX1Jl
Y3RhbmdsZSByID0KLSAgICAgICAgICAgIHsgMCwgMCwgcHJpdi0+bW9kZWwud2lkdGgsIHByaXYt
Pm1vZGVsLmhlaWdodCB9OworICAgICAgICB7IDAsIDAsIHByaXYtPm1vZGVsLndpZHRoLCBwcml2
LT5tb2RlbC5oZWlnaHQgfTsKICAgICAgICAgZXdrX3RpbGVfbWF0cml4X3VwZGF0ZShwcml2LT5t
b2RlbC5tYXRyaXgsICZyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaXYtPnZp
ZXcudGlsZS56b29tKTsKICAgICB9CkBAIC0xMzY3LDE5ICsxMzY3LDE5IEBAIHN0YXRpYyB2b2lk
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9jYWxjdWxhdGUoRXZhc19PYmplY3QgKm8p
CiAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3VwZGF0ZXNfcHJvY2Vzcyhwcml2KTsKIAog
ICAgIGlmIChwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggPiAwCi0gICAgICAgIHx8IHByaXYtPnZp
ZXcub2Zmc2V0LmJhc2UueCA8PSAtIHByaXYtPnZpZXcudGlsZS53CisgICAgICAgIHx8IHByaXYt
PnZpZXcub2Zmc2V0LmJhc2UueCA8PSAtIHByaXYtPnZpZXcudGlsZS53aWR0aAogICAgICAgICB8
fCBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgPiAwCi0gICAgICAgIHx8IHByaXYtPnZpZXcub2Zm
c2V0LmJhc2UueSA8PSAtIHByaXYtPnZpZXcudGlsZS5oKQorICAgICAgICB8fCBwcml2LT52aWV3
Lm9mZnNldC5iYXNlLnkgPD0gLSBwcml2LT52aWV3LnRpbGUuaGVpZ2h0KQogICAgICAgICBFUlIo
ImluY29ycmVjdCBiYXNlIG9mZnNldCAlKzRkLCUrNGQsIHRpbGU9JWR4JWQsIGN1cj0lKzRkLCUr
NGRcbiIsCiAgICAgICAgICAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLngsIHByaXYtPnZpZXcu
b2Zmc2V0LmJhc2UueSwKLSAgICAgICAgICAgIHByaXYtPnZpZXcudGlsZS53LCBwcml2LT52aWV3
LnRpbGUuaCwKKyAgICAgICAgICAgIHByaXYtPnZpZXcudGlsZS53aWR0aCwgcHJpdi0+dmlldy50
aWxlLmhlaWdodCwKICAgICAgICAgICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1ci54LCBwcml2LT52
aWV3Lm9mZnNldC5jdXIueSk7CiAKIH0KIAotRXZhc19PYmplY3QgKmV3a190aWxlZF9iYWNraW5n
X3N0b3JlX2FkZChFdmFzICplKQorRXZhc19PYmplY3QqIGV3a190aWxlZF9iYWNraW5nX3N0b3Jl
X2FkZChFdmFzKiBlKQogewotICAgIHN0YXRpYyBFdmFzX1NtYXJ0ICpzbWFydCA9IDA7CisgICAg
c3RhdGljIEV2YXNfU21hcnQqIHNtYXJ0ID0gMDsKIAogICAgIGlmIChfZXdrX3RpbGVkX2xvZ19k
b20gPCAwKQogICAgICAgICBfZXdrX3RpbGVkX2xvZ19kb20gPSBlaW5hX2xvZ19kb21haW5fcmVn
aXN0ZXIoIkV3a19UaWxlZF9CYWNraW5nX1N0b3JlIiwgMCk7CkBAIC0xNDA1LDIzICsxNDA1LDIz
IEBAIEV2YXNfT2JqZWN0ICpld2tfdGlsZWRfYmFja2luZ19zdG9yZV9hZGQoRXZhcyAqZSkKICAg
ICByZXR1cm4gZXZhc19vYmplY3Rfc21hcnRfYWRkKGUsIHNtYXJ0KTsKIH0KIAotdm9pZCBld2tf
dGlsZWRfYmFja2luZ19zdG9yZV9yZW5kZXJfY2Jfc2V0KEV2YXNfT2JqZWN0ICpvLCBFaW5hX0Jv
b2wgKCpjYikodm9pZCAqZGF0YSwgRXdrX1RpbGUgKnQsIGNvbnN0IEVpbmFfUmVjdGFuZ2xlICph
cmVhKSwgY29uc3Qgdm9pZCAqZGF0YSkKK3ZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcmVu
ZGVyX2NiX3NldChFdmFzX09iamVjdCogZXdrVGlsZSwgRWluYV9Cb29sICgqIGNiKSh2b2lkKiBk
YXRhLCBFd2tfVGlsZSogdGlsZSwgY29uc3QgRWluYV9SZWN0YW5nbGUqIGFyZWEpLCBjb25zdCB2
b2lkKiBkYXRhKQogewogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGNiKTsKLSAgICBQ
UklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2KTsKKyAgICBQUklWX0RBVEFfR0VUX09SX1JF
VFVSTihld2tUaWxlLCBwcml2KTsKICAgICBwcml2LT5yZW5kZXIuY2IgPSBjYjsKICAgICBwcml2
LT5yZW5kZXIuZGF0YSA9ICh2b2lkKilkYXRhOwogfQogCi1Fd2tfVGlsZV9VbnVzZWRfQ2FjaGUg
KmV3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfdW51c2VkX2NhY2hlX2dldChjb25zdCBFdmFz
X09iamVjdCAqbykKK0V3a19UaWxlX1VudXNlZF9DYWNoZSogZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfdGlsZV91bnVzZWRfY2FjaGVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tUaWxlKQogewot
ICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYsIDApOworICAgIFBSSVZfREFUQV9H
RVRfT1JfUkVUVVJOKGV3a1RpbGUsIHByaXYsIDApOwogICAgIHJldHVybiBld2tfdGlsZV9tYXRy
aXhfdW51c2VkX2NhY2hlX2dldChwcml2LT5tb2RlbC5tYXRyaXgpOwogfQogCi12b2lkIGV3a190
aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfdW51c2VkX2NhY2hlX3NldChFdmFzX09iamVjdCAqbywg
RXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMpCit2b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3RpbGVfdW51c2VkX2NhY2hlX3NldChFdmFzX09iamVjdCogZXdrVGlsZSwgRXdrX1RpbGVfVW51
c2VkX0NhY2hlKiB0dWMpCiB7Ci0gICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdik7
CisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4oZXdrVGlsZSwgcHJpdik7CiAKICAgICBpZiAo
ZXdrX3RpbGVfbWF0cml4X3VudXNlZF9jYWNoZV9nZXQocHJpdi0+bW9kZWwubWF0cml4KSA9PSB0
dWMpCiAgICAgICAgIHJldHVybjsKQEAgLTE0MjksNyArMTQyOSw3IEBAIHZvaWQgZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfdGlsZV91bnVzZWRfY2FjaGVfc2V0KEV2YXNfT2JqZWN0ICpvLCBFd2tf
VGlsZV9VbnVzCiAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX21vZGVsX21hdHJpeF9jcmVh
dGUocHJpdiwgdHVjKTsKIH0KIAotc3RhdGljIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfc2Nyb2xsX2Z1bGxfb2Zmc2V0X3NldF9pbnRlcm5hbChFd2tfVGlsZWRfQmFja2luZ19T
dG9yZV9EYXRhICpwcml2LCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSkKK3N0YXRpYyBFaW5h
X0Jvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3Njcm9sbF9mdWxsX29mZnNldF9zZXRfaW50
ZXJuYWwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdiwgRXZhc19Db29yZCB4LCBF
dmFzX0Nvb3JkIHkpCiB7CiAgICAgLyogVE9ETzogY2hlY2sgb2Zmc2V0IGdvIG91dCBvZiBib3Vu
ZHMsIGNsYW1wICovCiAgICAgaWYgKHByaXYtPnJlbmRlci5kaXNhYmxlZCkKQEAgLTE0NDQsMzAg
KzE0NDQsMzAgQEAgc3RhdGljIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc2Ny
b2xsX2Z1bGxfb2Zmc2V0X3NldF9pbnRlcm5hbChFd2tfVGkKICAgICByZXR1cm4gRUlOQV9UUlVF
OwogfQogCi1FaW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc2Nyb2xsX2Z1bGxfb2Zm
c2V0X3NldChFdmFzX09iamVjdCAqbywgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHkpCitFaW5h
X0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc2Nyb2xsX2Z1bGxfb2Zmc2V0X3NldChFdmFz
X09iamVjdCogZXdrVGlsZSwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHkpCiB7Ci0gICAgREJH
KCJvPSVwLCB4PSVkLCB5PSVkIiwgbywgeCwgeSk7CisgICAgREJHKCJvPSVwLCB4PSVkLCB5PSVk
IiwgZXdrVGlsZSwgeCwgeSk7CiAKLSAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2
LCBFSU5BX0ZBTFNFKTsKKyAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihld2tUaWxlLCBwcml2
LCBFSU5BX0ZBTFNFKTsKICAgICBpZiAoeCA9PSBwcml2LT52aWV3Lm9mZnNldC5jdXIueCAmJiB5
ID09IHByaXYtPnZpZXcub2Zmc2V0LmN1ci55KQogICAgICAgICByZXR1cm4gRUlOQV9UUlVFOwog
CiAgICAgcmV0dXJuIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zY3JvbGxfZnVsbF9vZmZzZXRf
c2V0X2ludGVybmFsKHByaXYsIHgsIHkpOwogfQogCi1FaW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfc2Nyb2xsX2Z1bGxfb2Zmc2V0X2FkZChFdmFzX09iamVjdCAqbywgRXZhc19Db29y
ZCBkeCwgRXZhc19Db29yZCBkeSkKK0VpbmFfQm9vbCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9z
Y3JvbGxfZnVsbF9vZmZzZXRfYWRkKEV2YXNfT2JqZWN0KiBld2tUaWxlLCBFdmFzX0Nvb3JkIGR4
LCBFdmFzX0Nvb3JkIGR5KQogewotICAgIERCRygibz0lcCwgZHg9JWQsIGR5PSVkIiwgbywgZHgs
IGR5KTsKKyAgICBEQkcoIm89JXAsIGR4PSVkLCBkeT0lZCIsIGV3a1RpbGUsIGR4LCBkeSk7CiAK
LSAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBQ
UklWX0RBVEFfR0VUX09SX1JFVFVSTihld2tUaWxlLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBp
ZiAoIWR4ICYmICFkeSkKICAgICAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIAogICAgIHJldHVybiBf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc2Nyb2xsX2Z1bGxfb2Zmc2V0X3NldF9pbnRlcm5hbAot
ICAgICAgICAocHJpdiwgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggKyBkeCwgcHJpdi0+dmlldy5v
ZmZzZXQuY3VyLnkgKyBkeSk7CisgICAgICAgICAgICAgICAocHJpdiwgcHJpdi0+dmlldy5vZmZz
ZXQuY3VyLnggKyBkeCwgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkgKyBkeSk7CiB9CiAKLXN0YXRp
YyBFaW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3pvb21fc2V0X2ludGVybmFsKEV3
a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIGZsb2F0ICp6b29tLCBFdmFzX0Nvb3Jk
IGN4LCBFdmFzX0Nvb3JkIGN5LCBFdmFzX0Nvb3JkICpvZmZ4LCBFdmFzX0Nvb3JkICpvZmZ5KQor
c3RhdGljIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfem9vbV9zZXRfaW50ZXJu
YWwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdiwgZmxvYXQqIHpvb20sIEV2YXNf
Q29vcmQgY3gsIEV2YXNfQ29vcmQgY3ksIEV2YXNfQ29vcmQqIG9mZngsIEV2YXNfQ29vcmQqIG9m
ZnkpCiB7CiAgICAgKm9mZnggPSBwcml2LT52aWV3Lm9mZnNldC5jdXIueDsKICAgICAqb2ZmeSA9
IHByaXYtPnZpZXcub2Zmc2V0LmN1ci55OwpAQCAtMTQ4MSwxMCArMTQ4MSwxMCBAQCBzdGF0aWMg
RWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV96b29tX3NldF9pbnRlcm5hbChFd2tf
VGlsZWRfQmFja2luZ19TdAogICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVy
X3JlcXVlc3RfZmx1c2gocHJpdik7CiAgICAgRXZhc19Db29yZCB0dywgdGg7CiAKLSAgICAqem9v
bSA9IFJPVU5ERURfWk9PTShwcml2LT52aWV3LnRpbGUudywgKnpvb20pOworICAgICp6b29tID0g
Uk9VTkRFRF9aT09NKHByaXYtPnZpZXcudGlsZS53aWR0aCwgKnpvb20pOwogCi0gICAgdHcgPSBw
cml2LT52aWV3LnRpbGUudzsKLSAgICB0aCA9IHByaXYtPnZpZXcudGlsZS5oOworICAgIHR3ID0g
cHJpdi0+dmlldy50aWxlLndpZHRoOworICAgIHRoID0gcHJpdi0+dmlldy50aWxlLmhlaWdodDsK
IAogICAgIGZsb2F0IHNjYWxlID0gKnpvb20gLyBwcml2LT52aWV3LnRpbGUuem9vbTsKIApAQCAt
MTQ5NCwyOSArMTQ5NCwyOSBAQCBzdGF0aWMgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV96b29tX3NldF9pbnRlcm5hbChFd2tfVGlsZWRfQmFja2luZ19TdAogICAgIHByaXYtPnZp
ZXcub2Zmc2V0Lnpvb21fY2VudGVyLnkgPSBjeTsKIAogCi0gICAgaWYgKCFwcml2LT52aWV3Lncg
fHwgIXByaXYtPnZpZXcuaCkgeworICAgIGlmICghcHJpdi0+dmlldy53aWR0aCB8fCAhcHJpdi0+
dmlldy5oZWlnaHQpIHsKICAgICAgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54ID0gMDsKICAg
ICAgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ID0gMDsKICAgICAgICAgcmV0dXJuIEVJTkFf
VFJVRTsKICAgICB9Ci0gICAgRWluYV9Jbmxpc3QgKippdHIsICoqaXRyX2VuZDsKLSAgICBFd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdDsKKyAgICBFaW5hX0lubGlzdCoqIGl0ciwgKiog
aXRyX2VuZDsKKyAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKiBpdDsKIAogICAgIEV2
YXNfQ29vcmQgbmV3X3ggPSBjeCArIChwcml2LT52aWV3Lm9mZnNldC5jdXIueCAtIGN4KSAqIHNj
YWxlOwogICAgIEV2YXNfQ29vcmQgbmV3X3kgPSBjeSArIChwcml2LT52aWV3Lm9mZnNldC5jdXIu
eSAtIGN5KSAqIHNjYWxlOwogCi0gICAgRXZhc19Db29yZCBtb2RlbF93aWR0aCA9IHByaXYtPm1v
ZGVsLndpZHRoICogc2NhbGU7Ci0gICAgRXZhc19Db29yZCBtb2RlbF9oZWlnaHQgPSBwcml2LT5t
b2RlbC5oZWlnaHQgKiBzY2FsZTsKKyAgICBFdmFzX0Nvb3JkIG1vZGVsX3cgPSBwcml2LT5tb2Rl
bC53aWR0aCAqIHNjYWxlOworICAgIEV2YXNfQ29vcmQgbW9kZWxfaCA9IHByaXYtPm1vZGVsLmhl
aWdodCAqIHNjYWxlOwogCi0gICAgaWYgKG1vZGVsX3dpZHRoIDwgcHJpdi0+dmlldy53IHx8IG5l
d194ID49IDApCisgICAgaWYgKG1vZGVsX3cgPCBwcml2LT52aWV3LndpZHRoIHx8IG5ld194ID49
IDApCiAgICAgICAgIG5ld194ID0gMDsKLSAgICBlbHNlIGlmICgtbmV3X3ggKyBwcml2LT52aWV3
LncgPj0gbW9kZWxfd2lkdGgpCi0gICAgICAgIG5ld194ID0gLW1vZGVsX3dpZHRoICsgcHJpdi0+
dmlldy53OworICAgIGVsc2UgaWYgKC1uZXdfeCArIHByaXYtPnZpZXcud2lkdGggPj0gbW9kZWxf
dykKKyAgICAgICAgbmV3X3ggPSAtbW9kZWxfdyArIHByaXYtPnZpZXcud2lkdGg7CiAKLSAgICBp
ZiAobW9kZWxfaGVpZ2h0IDwgcHJpdi0+dmlldy5oIHx8IG5ld195ID49IDApCisgICAgaWYgKG1v
ZGVsX2ggPCBwcml2LT52aWV3LmhlaWdodCB8fCBuZXdfeSA+PSAwKQogICAgICAgICBuZXdfeSA9
IDA7Ci0gICAgZWxzZSBpZiAoLW5ld195ICsgcHJpdi0+dmlldy5oID49IG1vZGVsX2hlaWdodCkK
LSAgICAgICAgbmV3X3kgPSAtbW9kZWxfaGVpZ2h0ICsgcHJpdi0+dmlldy5oOworICAgIGVsc2Ug
aWYgKC1uZXdfeSArIHByaXYtPnZpZXcuaGVpZ2h0ID49IG1vZGVsX2gpCisgICAgICAgIG5ld195
ID0gLW1vZGVsX2ggKyBwcml2LT52aWV3LmhlaWdodDsKIAogICAgIEV2YXNfQ29vcmQgYnggPSBu
ZXdfeCAlIHR3OwogICAgIEV2YXNfQ29vcmQgYnkgPSBuZXdfeSAlIHRoOwpAQCAtMTU1Miw3ICsx
NTUyLDcgQEAgc3RhdGljIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfem9vbV9z
ZXRfaW50ZXJuYWwoRXdrX1RpbGVkX0JhY2tpbmdfU3QKIAogICAgIGZvciAoOyBpdHIgPCBpdHJf
ZW5kOyBpdHIrKykgewogICAgICAgICBFdmFzX0Nvb3JkIG94ID0gYmFzZV9veDsKLSAgICAgICAg
RWluYV9Jbmxpc3QgKmxzdCA9ICppdHI7CisgICAgICAgIEVpbmFfSW5saXN0KiBsc3QgPSAqaXRy
OwogCiAgICAgICAgIEVJTkFfSU5MSVNUX0ZPUkVBQ0gobHN0LCBpdCkgewogICAgICAgICAgICAg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fbW92ZShpdCwgb3gsIG95KTsKQEAgLTE1NjUs
NDAgKzE1NjUsNDAgQEAgc3RhdGljIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
em9vbV9zZXRfaW50ZXJuYWwoRXdrX1RpbGVkX0JhY2tpbmdfU3QKICAgICByZXR1cm4gRUlOQV9U
UlVFOwogfQogCi1FaW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfem9vbV9zZXQoRXZh
c19PYmplY3QgKm8sIGZsb2F0ICp6b29tLCBFdmFzX0Nvb3JkIGN4LCBFdmFzX0Nvb3JkIGN5LCBF
dmFzX0Nvb3JkICpvZmZ4LCBFdmFzX0Nvb3JkICpvZmZ5KQorRWluYV9Cb29sIGV3a190aWxlZF9i
YWNraW5nX3N0b3JlX3pvb21fc2V0KEV2YXNfT2JqZWN0KiBld2tUaWxlLCBmbG9hdCogem9vbSwg
RXZhc19Db29yZCBjeCwgRXZhc19Db29yZCBjeSwgRXZhc19Db29yZCogb2ZmeCwgRXZhc19Db29y
ZCogb2ZmeSkKIHsKLSAgICBEQkcoIm89JXAsIHpvb209JWYiLCBvLCAoZG91YmxlKSp6b29tKTsK
KyAgICBEQkcoIm89JXAsIHpvb209JWYiLCBld2tUaWxlLCAoZG91YmxlKSp6b29tKTsKIAotICAg
IFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYsIEVJTkFfRkFMU0UpOworICAgIFBSSVZf
REFUQV9HRVRfT1JfUkVUVVJOKGV3a1RpbGUsIHByaXYsIEVJTkFfRkFMU0UpOwogCiAgICAgcmV0
dXJuIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV96b29tX3NldF9pbnRlcm5hbChwcml2LCB6b29t
LCBjeCwgY3ksIG9mZngsIG9mZnkpOwogfQogCi1FaW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfem9vbV93ZWFrX3NldChFdmFzX09iamVjdCAqbywgZmxvYXQgem9vbSwgRXZhc19Db29y
ZCBjeCwgRXZhc19Db29yZCBjeSkKK0VpbmFfQm9vbCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV96
b29tX3dlYWtfc2V0KEV2YXNfT2JqZWN0KiBld2tUaWxlLCBmbG9hdCB6b29tLCBFdmFzX0Nvb3Jk
IGN4LCBFdmFzX0Nvb3JkIGN5KQogewotICAgIERCRygibz0lcCwgem9vbT0lZiIsIG8sIChkb3Vi
bGUpem9vbSk7Ci0gICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdiwgRUlOQV9GQUxT
RSk7Ci0gICAgaWYgKCFwcml2LT52aWV3LncgfHwgIXByaXYtPnZpZXcuaCkKKyAgICBEQkcoIm89
JXAsIHpvb209JWYiLCBld2tUaWxlLCAoZG91YmxlKXpvb20pOworICAgIFBSSVZfREFUQV9HRVRf
T1JfUkVUVVJOKGV3a1RpbGUsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIGlmICghcHJpdi0+dmll
dy53aWR0aCB8fCAhcHJpdi0+dmlldy5oZWlnaHQpCiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNF
OwotICAgIEVpbmFfSW5saXN0ICoqaXRyLCAqKml0cl9lbmQ7Ci0gICAgRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfSXRlbSAqaXQ7CisgICAgRWluYV9Jbmxpc3QqKiBpdHIsICoqIGl0cl9lbmQ7Cisg
ICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSogaXQ7CiAgICAgRXZhc19Db29yZCB0dywg
dGg7CiAgICAgRWluYV9Cb29sIHJlY2FsYyA9IEVJTkFfRkFMU0U7CiAKICAgICBmbG9hdCBzY2Fs
ZSA9IHpvb20gLyBwcml2LT52aWV3LnRpbGUuem9vbTsKIAotICAgIHR3ID0gVElMRV9TSVpFX0FU
X1pPT00ocHJpdi0+dmlldy50aWxlLncsIHNjYWxlKTsKLSAgICBzY2FsZSA9IFRJTEVfWk9PTV9B
VF9TSVpFKHR3LCBwcml2LT52aWV3LnRpbGUudyk7Ci0gICAgdGggPSBUSUxFX1NJWkVfQVRfWk9P
TShwcml2LT52aWV3LnRpbGUuaCwgc2NhbGUpOworICAgIHR3ID0gVElMRV9TSVpFX0FUX1pPT00o
cHJpdi0+dmlldy50aWxlLndpZHRoLCBzY2FsZSk7CisgICAgc2NhbGUgPSBUSUxFX1pPT01fQVRf
U0laRSh0dywgcHJpdi0+dmlldy50aWxlLndpZHRoKTsKKyAgICB0aCA9IFRJTEVfU0laRV9BVF9a
T09NKHByaXYtPnZpZXcudGlsZS5oZWlnaHQsIHNjYWxlKTsKICAgICB6b29tID0gc2NhbGUgKiBw
cml2LT52aWV3LnRpbGUuem9vbTsKIAotICAgIEV2YXNfQ29vcmQgbW9kZWxfd2lkdGggPSBwcml2
LT5tb2RlbC53aWR0aCAqIHNjYWxlOwotICAgIEV2YXNfQ29vcmQgbW9kZWxfaGVpZ2h0ID0gcHJp
di0+bW9kZWwuaGVpZ2h0ICogc2NhbGU7CisgICAgRXZhc19Db29yZCBtb2RlbF93ID0gcHJpdi0+
bW9kZWwud2lkdGggKiBzY2FsZTsKKyAgICBFdmFzX0Nvb3JkIG1vZGVsX2ggPSBwcml2LT5tb2Rl
bC5oZWlnaHQgKiBzY2FsZTsKIAotICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShwcml2LT5jb250ZW50
c19jbGlwcGVyLCBtb2RlbF93aWR0aCwgbW9kZWxfaGVpZ2h0KTsKKyAgICBldmFzX29iamVjdF9y
ZXNpemUocHJpdi0+Y29udGVudHNfY2xpcHBlciwgbW9kZWxfdywgbW9kZWxfaCk7CiAKLSAgICBp
bnQgdnJvd3MgPSBjZWlsKChmbG9hdClwcml2LT52aWV3LmggLyAoZmxvYXQpdGgpICsgMTsKLSAg
ICBpbnQgdmNvbHMgPSBjZWlsKChmbG9hdClwcml2LT52aWV3LncgLyAoZmxvYXQpdHcpICsgMTsK
KyAgICBpbnQgdnJvd3MgPSBjZWlsKChmbG9hdClwcml2LT52aWV3LmhlaWdodCAvIChmbG9hdCl0
aCkgKyAxOworICAgIGludCB2Y29scyA9IGNlaWwoKGZsb2F0KXByaXYtPnZpZXcud2lkdGggLyAo
ZmxvYXQpdHcpICsgMTsKICAgICBFdmFzX0Nvb3JkIG5ld194ID0gY3ggKyAocHJpdi0+dmlldy5v
ZmZzZXQuY3VyLnggLSBjeCkgKiBzY2FsZTsKICAgICBFdmFzX0Nvb3JkIG5ld195ID0gY3kgKyAo
cHJpdi0+dmlldy5vZmZzZXQuY3VyLnkgLSBjeSkgKiBzY2FsZTsKICAgICBFdmFzX0Nvb3JkIGJ4
ID0gbmV3X3ggJSB0dzsKQEAgLTE2MTYsOSArMTYxNiw5IEBAIEVpbmFfQm9vbCBld2tfdGlsZWRf
YmFja2luZ19zdG9yZV96b29tX3dlYWtfc2V0KEV2YXNfT2JqZWN0ICpvLCBmbG9hdCB6b29tLCBF
dmFzCiAgICAgICAgIHJlY2FsYyA9IEVJTkFfVFJVRTsKIAogICAgIGlmIChyZWNhbGMpIHsKLSAg
ICAgICAgRXZhc19Db29yZCB3LCBoOwotICAgICAgICBldmFzX29iamVjdF9nZW9tZXRyeV9nZXQo
bywgMCwgMCwgJncsICZoKTsKLSAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3JlY2Fs
Y19yZW5kZXJlcnMocHJpdiwgdywgaCwgdHcsIHRoKTsKKyAgICAgICAgRXZhc19Db29yZCB3aWR0
aCwgaGVpZ2h0OworICAgICAgICBldmFzX29iamVjdF9nZW9tZXRyeV9nZXQoZXdrVGlsZSwgMCwg
MCwgJndpZHRoLCAmaGVpZ2h0KTsKKyAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3Jl
Y2FsY19yZW5kZXJlcnMocHJpdiwgd2lkdGgsIGhlaWdodCwgdHcsIHRoKTsKICAgICAgICAgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX2ZpbGxfcmVuZGVyZXJzKHByaXYpOwogICAgICAgICBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRlc19wcm9jZXNzKHByaXYpOwogICAgIH0KQEAgLTE2
MzUsNyArMTYzNSw3IEBAIEVpbmFfQm9vbCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV96b29tX3dl
YWtfc2V0KEV2YXNfT2JqZWN0ICpvLCBmbG9hdCB6b29tLCBFdmFzCiAKICAgICBmb3IgKDsgaXRy
IDwgaXRyX2VuZDsgaXRyKyspIHsKICAgICAgICAgRXZhc19Db29yZCBveCA9IGJhc2Vfb3g7Ci0g
ICAgICAgIEVpbmFfSW5saXN0ICpsc3QgPSAqaXRyOworICAgICAgICBFaW5hX0lubGlzdCogbHN0
ID0gKml0cjsKIAogICAgICAgICBFSU5BX0lOTElTVF9GT1JFQUNIKGxzdCwgaXQpIHsKICAgICAg
ICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX21vdmUoaXQsIG94LCBveSk7CkBA
IC0xNjQ4LDM2ICsxNjQ4LDM2IEBAIEVpbmFfQm9vbCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV96
b29tX3dlYWtfc2V0KEV2YXNfT2JqZWN0ICpvLCBmbG9hdCB6b29tLCBFdmFzCiAgICAgcmV0dXJu
IEVJTkFfVFJVRTsKIH0KIAotdm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9maXhfb2Zmc2V0
cyhFdmFzX09iamVjdCAqbywgRXZhc19Db29yZCB3LCBFdmFzX0Nvb3JkIGgpCit2b2lkIGV3a190
aWxlZF9iYWNraW5nX3N0b3JlX2ZpeF9vZmZzZXRzKEV2YXNfT2JqZWN0KiBld2tUaWxlLCBFdmFz
X0Nvb3JkIHdpZHRoLCBFdmFzX0Nvb3JkIGhlaWdodCkKIHsKLSAgICBQUklWX0RBVEFfR0VUX09S
X1JFVFVSTihvLCBwcml2KTsKLSAgICBFaW5hX0lubGlzdCAqKml0ciwgKippdHJfZW5kOwotICAg
IEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0OworICAgIFBSSVZfREFUQV9HRVRfT1Jf
UkVUVVJOKGV3a1RpbGUsIHByaXYpOworICAgIEVpbmFfSW5saXN0KiogaXRyLCAqKiBpdHJfZW5k
OworICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0qIGl0OwogICAgIEV2YXNfQ29vcmQg
bmV3X3ggPSBwcml2LT52aWV3Lm9mZnNldC5jdXIueDsKICAgICBFdmFzX0Nvb3JkIG5ld195ID0g
cHJpdi0+dmlldy5vZmZzZXQuY3VyLnk7CiAgICAgRXZhc19Db29yZCBieCA9IHByaXYtPnZpZXcu
b2Zmc2V0LmJhc2UueDsKICAgICBFdmFzX0Nvb3JkIGJ5ID0gcHJpdi0+dmlldy5vZmZzZXQuYmFz
ZS55OwotICAgIEV2YXNfQ29vcmQgdHcgPSBwcml2LT52aWV3LnRpbGUudzsKLSAgICBFdmFzX0Nv
b3JkIHRoID0gcHJpdi0+dmlldy50aWxlLmg7CisgICAgRXZhc19Db29yZCB0dyA9IHByaXYtPnZp
ZXcudGlsZS53aWR0aDsKKyAgICBFdmFzX0Nvb3JkIHRoID0gcHJpdi0+dmlldy50aWxlLmhlaWdo
dDsKIAotICAgIGlmICgtbmV3X3ggPiB3KSB7Ci0gICAgICAgIG5ld194ID0gLXc7CisgICAgaWYg
KC1uZXdfeCA+IHdpZHRoKSB7CisgICAgICAgIG5ld194ID0gLXdpZHRoOwogICAgICAgICBieCA9
IG5ld194ICUgdHc7CiAgICAgICAgIHByaXYtPm1vZGVsLmJhc2UuY29sID0gLW5ld194IC8gdHc7
CiAgICAgfQogCi0gICAgaWYgKC1uZXdfeSA+IGgpIHsKLSAgICAgICAgbmV3X3kgPSAtaDsKKyAg
ICBpZiAoLW5ld195ID4gaGVpZ2h0KSB7CisgICAgICAgIG5ld195ID0gLWhlaWdodDsKICAgICAg
ICAgYnkgPSBuZXdfeSAlIHRoOwogICAgICAgICBwcml2LT5tb2RlbC5iYXNlLnJvdyA9IC1uZXdf
eSAvIHRoOwogICAgIH0KIAotICAgIGlmIChieCA+PSAwIHx8IGJ4IDw9IC0yICogcHJpdi0+dmll
dy50aWxlLncpIHsKKyAgICBpZiAoYnggPj0gMCB8fCBieCA8PSAtMiAqIHByaXYtPnZpZXcudGls
ZS53aWR0aCkgewogICAgICAgICBieCA9IG5ld194ICUgdHc7CiAgICAgICAgIHByaXYtPm1vZGVs
LmJhc2UuY29sID0gLW5ld194IC8gdHc7CiAgICAgfQogCi0gICAgaWYgKGJ5ID49IDAgfHwgYnkg
PD0gLTIgKiBwcml2LT52aWV3LnRpbGUuaCkgeworICAgIGlmIChieSA+PSAwIHx8IGJ5IDw9IC0y
ICogcHJpdi0+dmlldy50aWxlLmhlaWdodCkgewogICAgICAgICBieSA9IG5ld195ICUgdGg7CiAg
ICAgICAgIHByaXYtPm1vZGVsLmJhc2Uucm93ID0gLW5ld195IC8gdGg7CiAgICAgfQpAQCAtMTcw
MCw3ICsxNzAwLDcgQEAgdm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9maXhfb2Zmc2V0cyhF
dmFzX09iamVjdCAqbywgRXZhc19Db29yZCB3LCBFdmFzX0Nvb3IKIAogICAgIGZvciAoOyBpdHIg
PCBpdHJfZW5kOyBpdHIrKykgewogICAgICAgICBFdmFzX0Nvb3JkIG94ID0gYmFzZV9veDsKLSAg
ICAgICAgRWluYV9Jbmxpc3QgKmxzdCA9ICppdHI7CisgICAgICAgIEVpbmFfSW5saXN0KiBsc3Qg
PSAqaXRyOwogCiAgICAgICAgIEVJTkFfSU5MSVNUX0ZPUkVBQ0gobHN0LCBpdCkgewogICAgICAg
ICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fbW92ZShpdCwgb3gsIG95KTsKQEAg
LTE3MTEsMTcgKzE3MTEsMTcgQEAgdm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9maXhfb2Zm
c2V0cyhFdmFzX09iamVjdCAqbywgRXZhc19Db29yZCB3LCBFdmFzX0Nvb3IKICAgICB9CiB9CiAK
LXZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfem9vbV93ZWFrX3Ntb290aF9zY2FsZV9zZXQo
RXZhc19PYmplY3QgKm8sIEVpbmFfQm9vbCBzbW9vdGhfc2NhbGUpCit2b2lkIGV3a190aWxlZF9i
YWNraW5nX3N0b3JlX3pvb21fd2Vha19zbW9vdGhfc2NhbGVfc2V0KEV2YXNfT2JqZWN0KiBld2tU
aWxlLCBFaW5hX0Jvb2wgc21vb3RoX3NjYWxlKQogewotICAgIFBSSVZfREFUQV9HRVRfT1JfUkVU
VVJOKG8sIHByaXYpOwotICAgIEVpbmFfSW5saXN0ICoqaXRyLCAqKml0cl9lbmQ7CisgICAgUFJJ
Vl9EQVRBX0dFVF9PUl9SRVRVUk4oZXdrVGlsZSwgcHJpdik7CisgICAgRWluYV9Jbmxpc3QqKiBp
dHIsICoqIGl0cl9lbmQ7CiAKICAgICBpdHIgPSBwcml2LT52aWV3Lml0ZW1zOwogICAgIGl0cl9l
bmQgPSBpdHIgKyBwcml2LT52aWV3LnJvd3M7CiAgICAgcHJpdi0+dmlldy50aWxlLnpvb21fd2Vh
a19zbW9vdGhfc2NhbGUgPSBzbW9vdGhfc2NhbGU7CiAKICAgICBmb3IgKDsgaXRyPCBpdHJfZW5k
OyBpdHIrKykgewotICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdDsKKyAg
ICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSogaXQ7CiAgICAgICAgIEVJTkFfSU5M
SVNUX0ZPUkVBQ0goKml0ciwgaXQpCiAgICAgICAgICAgICBpZiAoaXQtPnRpbGUpCiAgICAgICAg
ICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fc21vb3RoX3NjYWxlX3NldApA
QCAtMTcyOSw5ICsxNzI5LDkgQEAgdm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV96b29tX3dl
YWtfc21vb3RoX3NjYWxlX3NldChFdmFzX09iamVjdCAqbywgRWluYV9Cb28KICAgICB9CiB9CiAK
LUVpbmFfQm9vbCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV91cGRhdGUoRXZhc19PYmplY3QgKm8s
IGNvbnN0IEVpbmFfUmVjdGFuZ2xlICp1cGRhdGUpCitFaW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfdXBkYXRlKEV2YXNfT2JqZWN0KiBld2tUaWxlLCBjb25zdCBFaW5hX1JlY3Rhbmds
ZSogdXBkYXRlKQogewotICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYsIEVJTkFf
RkFMU0UpOworICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKGV3a1RpbGUsIHByaXYsIEVJTkFf
RkFMU0UpOwogCiAgICAgaWYgKHByaXYtPnJlbmRlci5kaXNhYmxlZCkKICAgICAgICAgcmV0dXJu
IEVJTkFfRkFMU0U7CkBAIC0xNzQwLDM2ICsxNzQwLDM2IEBAIEVpbmFfQm9vbCBld2tfdGlsZWRf
YmFja2luZ19zdG9yZV91cGRhdGUoRXZhc19PYmplY3QgKm8sIGNvbnN0IEVpbmFfUmVjdGFuZ2xl
ICp1CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpdi0+dmlldy50aWxlLnpv
b20pOwogfQogCi12b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3VwZGF0ZXNfcHJvY2Vzc19w
cmVfc2V0KEV2YXNfT2JqZWN0ICpvLCB2b2lkICooKmNiKSh2b2lkICpkYXRhLCBFdmFzX09iamVj
dCAqbyksIGNvbnN0IHZvaWQgKmRhdGEpCit2b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3Vw
ZGF0ZXNfcHJvY2Vzc19wcmVfc2V0KEV2YXNfT2JqZWN0KiBld2tUaWxlLCB2b2lkKigqY2IpKHZv
aWQqIGRhdGEsIEV2YXNfT2JqZWN0ICpvKSwgY29uc3Qgdm9pZCogZGF0YSkKIHsKLSAgICBQUklW
X0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2KTsKKyAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVS
Tihld2tUaWxlLCBwcml2KTsKICAgICBwcml2LT5wcm9jZXNzLnByZV9jYiA9IGNiOwogICAgIHBy
aXYtPnByb2Nlc3MucHJlX2RhdGEgPSAodm9pZCopZGF0YTsKIH0KIAotdm9pZCBld2tfdGlsZWRf
YmFja2luZ19zdG9yZV91cGRhdGVzX3Byb2Nlc3NfcG9zdF9zZXQoRXZhc19PYmplY3QgKm8sIHZv
aWQgKigqY2IpKHZvaWQgKmRhdGEsIHZvaWQgKnByZV9kYXRhLCBFdmFzX09iamVjdCAqbyksIGNv
bnN0IHZvaWQgKmRhdGEpCit2b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3VwZGF0ZXNfcHJv
Y2Vzc19wb3N0X3NldChFdmFzX09iamVjdCogZXdrVGlsZSwgdm9pZCooKmNiKSh2b2lkKiBkYXRh
LCB2b2lkKiBwcmVfZGF0YSwgRXZhc19PYmplY3QgKm8pLCBjb25zdCB2b2lkKiBkYXRhKQogewot
ICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYpOworICAgIFBSSVZfREFUQV9HRVRf
T1JfUkVUVVJOKGV3a1RpbGUsIHByaXYpOwogICAgIHByaXYtPnByb2Nlc3MucG9zdF9jYiA9IGNi
OwogICAgIHByaXYtPnByb2Nlc3MucG9zdF9kYXRhID0gKHZvaWQqKWRhdGE7CiB9CiAKLXZvaWQg
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRlc19wcm9jZXNzKEV2YXNfT2JqZWN0ICpvKQor
dm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV91cGRhdGVzX3Byb2Nlc3MoRXZhc19PYmplY3Qq
IGV3a1RpbGUpCiB7Ci0gICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdik7CisgICAg
UFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4oZXdrVGlsZSwgcHJpdik7CiAgICAgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX3VwZGF0ZXNfcHJvY2Vzcyhwcml2KTsKIH0KIAotdm9pZCBld2tfdGlsZWRf
YmFja2luZ19zdG9yZV91cGRhdGVzX2NsZWFyKEV2YXNfT2JqZWN0ICpvKQordm9pZCBld2tfdGls
ZWRfYmFja2luZ19zdG9yZV91cGRhdGVzX2NsZWFyKEV2YXNfT2JqZWN0KiBld2tUaWxlKQogewot
ICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYpOworICAgIFBSSVZfREFUQV9HRVRf
T1JfUkVUVVJOKGV3a1RpbGUsIHByaXYpOwogCiAgICAgZXdrX3RpbGVfbWF0cml4X3VwZGF0ZXNf
Y2xlYXIocHJpdi0+bW9kZWwubWF0cml4KTsKIH0KIAotdm9pZCBld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9jb250ZW50c19yZXNpemUoRXZhc19PYmplY3QgKm8sIEV2YXNfQ29vcmQgd2lkdGgsIEV2
YXNfQ29vcmQgaGVpZ2h0KQordm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9jb250ZW50c19y
ZXNpemUoRXZhc19PYmplY3QqIGV3a1RpbGUsIEV2YXNfQ29vcmQgd2lkdGgsIEV2YXNfQ29vcmQg
aGVpZ2h0KQogewotICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYpOworICAgIFBS
SVZfREFUQV9HRVRfT1JfUkVUVVJOKGV3a1RpbGUsIHByaXYpOwogCiAgICAgaWYgKHdpZHRoID09
IHByaXYtPm1vZGVsLndpZHRoICYmIGhlaWdodCA9PSBwcml2LT5tb2RlbC5oZWlnaHQpCiAgICAg
ICAgIHJldHVybjsKQEAgLTE3NzgsMjIgKzE3NzgsMjIgQEAgdm9pZCBld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9jb250ZW50c19yZXNpemUoRXZhc19PYmplY3QgKm8sIEV2YXNfQ29vcmQgd2lkdGgs
IEUKICAgICBwcml2LT5tb2RlbC5oZWlnaHQgPSBoZWlnaHQ7CiAgICAgcHJpdi0+Y2hhbmdlZC5t
b2RlbCA9IEVJTkFfVFJVRTsKIAotICAgIERCRygid2lkdGgsaGVpZ2h0PSVkLCAlZCIsIHdpZHRo
LCBoZWlnaHQpOworICAgIERCRygidyxoPSVkLCAlZCIsIHdpZHRoLCBoZWlnaHQpOwogICAgIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9jaGFuZ2VkKHByaXYpOwogfQogCi12b2lkIGV3a190aWxl
ZF9iYWNraW5nX3N0b3JlX2Rpc2FibGVkX3VwZGF0ZV9zZXQoRXZhc19PYmplY3QgKm8sIEVpbmFf
Qm9vbCB2YWx1ZSkKK3ZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZGlzYWJsZWRfdXBkYXRl
X3NldChFdmFzX09iamVjdCogZXdrVGlsZSwgRWluYV9Cb29sIHZhbHVlKQogewotICAgIFBSSVZf
REFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYpOworICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJO
KGV3a1RpbGUsIHByaXYpOwogCiAgICAgaWYgKHZhbHVlICE9IHByaXYtPnJlbmRlci5kaXNhYmxl
ZCkKICAgICAgICAgcHJpdi0+cmVuZGVyLmRpc2FibGVkID0gdmFsdWU7CiB9CiAKLXZvaWQgZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfZmx1c2goRXZhc19PYmplY3QgKm8pCit2b2lkIGV3a190aWxl
ZF9iYWNraW5nX3N0b3JlX2ZsdXNoKEV2YXNfT2JqZWN0KiBld2tUaWxlKQogewotICAgIFBSSVZf
REFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYpOwotICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSAq
dHVjID0gMDsKKyAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihld2tUaWxlLCBwcml2KTsKKyAg
ICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHR1YyA9IDA7CiAKICAgICBwcml2LT52aWV3Lm9mZnNl
dC5jdXIueCA9IDA7CiAgICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkgPSAwOwpAQCAtMTgyNSwy
MSArMTgyNSwyMSBAQCB2b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX2ZsdXNoKEV2YXNfT2Jq
ZWN0ICpvKQogI2VuZGlmCiB9CiAKLUVpbmFfQm9vbCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9w
cmVfcmVuZGVyX3JlZ2lvbihFdmFzX09iamVjdCAqbywgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3Jk
IHksIEV2YXNfQ29vcmQgdywgRXZhc19Db29yZCBoLCBmbG9hdCB6b29tKQorRWluYV9Cb29sIGV3
a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVnaW9uKEV2YXNfT2JqZWN0KiBld2tU
aWxlLCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwgRXZhc19Db29yZCB3aWR0aCwgRXZhc19D
b29yZCBoZWlnaHQsIGZsb2F0IHpvb20pCiB7Ci0gICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4o
bywgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4oZXdrVGls
ZSwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgRWluYV9UaWxlX0dyaWRfU2xpY2VyIHNsaWNlcjsK
LSAgICBjb25zdCBFaW5hX1RpbGVfR3JpZF9JbmZvICppbmZvOworICAgIGNvbnN0IEVpbmFfVGls
ZV9HcmlkX0luZm8qIGluZm87CiAgICAgRXZhc19Db29yZCB0dywgdGg7Ci0gICAgRXdrX1RpbGVf
VW51c2VkX0NhY2hlICp0dWM7CisgICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0dWM7CiAKLSAg
ICB0dyA9IHByaXYtPnZpZXcudGlsZS53OwotICAgIHRoID0gcHJpdi0+dmlldy50aWxlLmg7Ci0g
ICAgem9vbSA9IFJPVU5ERURfWk9PTShwcml2LT52aWV3LnRpbGUudywgem9vbSk7CisgICAgdHcg
PSBwcml2LT52aWV3LnRpbGUud2lkdGg7CisgICAgdGggPSBwcml2LT52aWV3LnRpbGUuaGVpZ2h0
OworICAgIHpvb20gPSBST1VOREVEX1pPT00ocHJpdi0+dmlldy50aWxlLndpZHRoLCB6b29tKTsK
IAotICAgIGlmICghZWluYV90aWxlX2dyaWRfc2xpY2VyX3NldHVwKCZzbGljZXIsIHgsIHksIHcs
IGgsIHR3LCB0aCkpIHsKKyAgICBpZiAoIWVpbmFfdGlsZV9ncmlkX3NsaWNlcl9zZXR1cCgmc2xp
Y2VyLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCB0dywgdGgpKSB7CiAgICAgICAgIEVSUigiY291bGQg
bm90IHNldHVwIGdyaWQgc2xpY2VyIGZvciAlZCwlZCslZHglZCB0aWxlPSVkeCVkIiwKLSAgICAg
ICAgICAgIHgsIHksIHcsIGgsIHR3LCB0aCk7CisgICAgICAgICAgICB4LCB5LCB3aWR0aCwgaGVp
Z2h0LCB0dywgdGgpOwogICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKICAgICB9CiAKQEAgLTE4
NTMsMjkgKzE4NTMsMjkgQEAgRWluYV9Cb29sIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9y
ZW5kZXJfcmVnaW9uKEV2YXNfT2JqZWN0ICpvLCBFdmFzX0Nvb3JkIHgKICAgICBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfaXRlbV9wcm9jZXNzX2lkbGVyX3N0YXJ0KHByaXYpOwogCiAgICAgdHVj
ID0gZXdrX3RpbGVfbWF0cml4X3VudXNlZF9jYWNoZV9nZXQocHJpdi0+bW9kZWwubWF0cml4KTsK
LSAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfbG9ja19hcmVhKHR1YywgeCwgeSwgdywgaCwgem9v
bSk7CisgICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2xvY2tfYXJlYSh0dWMsIHgsIHksIHdpZHRo
LCBoZWlnaHQsIHpvb20pOwogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLUVpbmFfQm9vbCBl
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlbGF0aXZlX3JhZGl1cyhFdmFzX09i
amVjdCAqbywgdW5zaWduZWQgaW50IG4sIGZsb2F0IHpvb20pCitFaW5hX0Jvb2wgZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZWxhdGl2ZV9yYWRpdXMoRXZhc19PYmplY3QqIGV3
a1RpbGUsIHVuc2lnbmVkIGludCBuLCBmbG9hdCB6b29tKQogewotICAgIFBSSVZfREFUQV9HRVRf
T1JfUkVUVVJOKG8sIHByaXYsIEVJTkFfRkFMU0UpOwotICAgIHVuc2lnbmVkIGxvbmcgc3RhcnRf
cm93LCBlbmRfcm93LCBzdGFydF9jb2wsIGVuZF9jb2wsIGksIGosIHcsIGg7Ci0gICAgRXdrX1Rp
bGVfVW51c2VkX0NhY2hlICp0dWM7CisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4oZXdrVGls
ZSwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgdW5zaWduZWQgbG9uZyBzdGFydF9yb3csIGVuZF9y
b3csIHN0YXJ0X2NvbCwgZW5kX2NvbCwgaSwgaiwgd2lkdGgsIGhlaWdodDsKKyAgICBFd2tfVGls
ZV9VbnVzZWRfQ2FjaGUqIHR1YzsKIAogICAgIElORigicHJpdi0+bW9kZWwuYmFzZS5yb3cgPSVs
ZCwgbj0ldSBwcml2LT52aWV3LnJvd3M9JWx1IiwKLSAgICAgICAgICAgIHByaXYtPm1vZGVsLmJh
c2Uucm93LCBuLCBwcml2LT52aWV3LnJvd3MpOworICAgICAgICBwcml2LT5tb2RlbC5iYXNlLnJv
dywgbiwgcHJpdi0+dmlldy5yb3dzKTsKICAgICBzdGFydF9yb3cgPSAobG9uZylwcml2LT5tb2Rl
bC5iYXNlLnJvdyAtIG47CiAgICAgc3RhcnRfY29sID0gKGxvbmcpcHJpdi0+bW9kZWwuYmFzZS5j
b2wgLSBuOwogICAgIGVuZF9yb3cgPSBzdGQ6Om1pbihwcml2LT5tb2RlbC5jdXIucm93cyAtIDEs
Ci0gICAgICAgICAgICAgICAgICBwcml2LT5tb2RlbC5iYXNlLnJvdyArIHByaXYtPnZpZXcucm93
cyArIG4gLSAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgcHJpdi0+bW9kZWwuYmFzZS5yb3cg
KyBwcml2LT52aWV3LnJvd3MgKyBuIC0gMSk7CiAgICAgZW5kX2NvbCA9IHN0ZDo6bWluKHByaXYt
Pm1vZGVsLmN1ci5jb2xzIC0gMSwKLSAgICAgICAgICAgICAgICAgIHByaXYtPm1vZGVsLmJhc2Uu
Y29sICsgcHJpdi0+dmlldy5jb2xzICsgbiAtIDEpOworICAgICAgICAgICAgICAgICAgICAgICBw
cml2LT5tb2RlbC5iYXNlLmNvbCArIHByaXYtPnZpZXcuY29scyArIG4gLSAxKTsKIAogICAgIElO
Rigic3RhcnRfcm93PSVsdSwgZW5kX3Jvdz0lbHUsIHN0YXJ0X2NvbD0lbHUsIGVuZF9jb2w9JWx1
IiwKLSAgICAgICAgIHN0YXJ0X3JvdywgZW5kX3Jvdywgc3RhcnRfY29sLCBlbmRfY29sKTsKKyAg
ICAgICAgc3RhcnRfcm93LCBlbmRfcm93LCBzdGFydF9jb2wsIGVuZF9jb2wpOwogCi0gICAgem9v
bSA9IFJPVU5ERURfWk9PTShwcml2LT52aWV3LnRpbGUudywgem9vbSk7CisgICAgem9vbSA9IFJP
VU5ERURfWk9PTShwcml2LT52aWV3LnRpbGUud2lkdGgsIHpvb20pOwogCiAgICAgZm9yIChpID0g
c3RhcnRfcm93OyBpIDw9IGVuZF9yb3c7IGkrKykKICAgICAgICAgZm9yIChqID0gc3RhcnRfY29s
OyBqIDw9IGVuZF9jb2w7IGorKykKQEAgLTE4ODYsMTkgKzE4ODYsMTkgQEAgc3RhcnRfcHJvY2Vz
c2luZzoKICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9wcm9jZXNzX2lkbGVyX3N0
YXJ0KHByaXYpOwogCiAgICAgdHVjID0gZXdrX3RpbGVfbWF0cml4X3VudXNlZF9jYWNoZV9nZXQo
cHJpdi0+bW9kZWwubWF0cml4KTsKLSAgICBoID0gKGVuZF9yb3cgLSBzdGFydF9yb3cgKyAxKSAq
IFRJTEVfU0laRV9BVF9aT09NKHByaXYtPnZpZXcudGlsZS5oLCB6b29tKTsKLSAgICB3ID0gKGVu
ZF9jb2wgLSBzdGFydF9jb2wgKyAxKSAqIFRJTEVfU0laRV9BVF9aT09NKHByaXYtPnZpZXcudGls
ZS53LCB6b29tKTsKKyAgICBoZWlnaHQgPSAoZW5kX3JvdyAtIHN0YXJ0X3JvdyArIDEpICogVElM
RV9TSVpFX0FUX1pPT00ocHJpdi0+dmlldy50aWxlLmhlaWdodCwgem9vbSk7CisgICAgd2lkdGgg
PSAoZW5kX2NvbCAtIHN0YXJ0X2NvbCArIDEpICogVElMRV9TSVpFX0FUX1pPT00ocHJpdi0+dmll
dy50aWxlLndpZHRoLCB6b29tKTsKICAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfbG9ja19hcmVh
KHR1YywKLSAgICAgICAgICAgIHN0YXJ0X2NvbCAqIFRJTEVfU0laRV9BVF9aT09NKHByaXYtPnZp
ZXcudGlsZS53LCB6b29tKSwKLSAgICAgICAgICAgIHN0YXJ0X3JvdyAqIFRJTEVfU0laRV9BVF9a
T09NKHByaXYtPnZpZXcudGlsZS5oLCB6b29tKSwgdywgaCwgem9vbSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdGFydF9jb2wgKiBUSUxFX1NJWkVfQVRfWk9PTShwcml2
LT52aWV3LnRpbGUud2lkdGgsIHpvb20pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RhcnRfcm93ICogVElMRV9TSVpFX0FUX1pPT00ocHJpdi0+dmlldy50aWxlLmhlaWdo
dCwgem9vbSksIHdpZHRoLCBoZWlnaHQsIHpvb20pOwogCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsK
IH0KIAotdm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX2NhbmNlbChFdmFz
X09iamVjdCAqbykKK3ZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9jYW5j
ZWwoRXZhc19PYmplY3QqIGV3a1RpbGUpCiB7Ci0gICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4o
bywgcHJpdik7Ci0gICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWM7CisgICAgUFJJVl9EQVRB
X0dFVF9PUl9SRVRVUk4oZXdrVGlsZSwgcHJpdik7CisgICAgRXdrX1RpbGVfVW51c2VkX0NhY2hl
KiB0dWM7CiAKICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0
X2NsZWFyKHByaXYpOwogCkBAIC0xOTA2LDE1ICsxOTA2LDE1IEBAIHZvaWQgZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9jYW5jZWwoRXZhc19PYmplY3QgKm8pCiAgICAgZXdrX3Rp
bGVfdW51c2VkX2NhY2hlX3VubG9ja19hcmVhKHR1Yyk7CiB9CiAKLUVpbmFfQm9vbCBld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9kaXNhYmxlX3JlbmRlcihFdmFzX09iamVjdCAqbykKK0VpbmFfQm9v
bCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9kaXNhYmxlX3JlbmRlcihFdmFzX09iamVjdCogZXdr
VGlsZSkKIHsKLSAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2LCBFSU5BX0ZBTFNF
KTsKKyAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihld2tUaWxlLCBwcml2LCBFSU5BX0ZBTFNF
KTsKICAgICByZXR1cm4gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2Rpc2FibGVfcmVuZGVyKHBy
aXYpOwogfQogCi1FaW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZW5hYmxlX3JlbmRl
cihFdmFzX09iamVjdCAqbykKK0VpbmFfQm9vbCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9lbmFi
bGVfcmVuZGVyKEV2YXNfT2JqZWN0KiBld2tUaWxlKQogewotICAgIFBSSVZfREFUQV9HRVRfT1Jf
UkVUVVJOKG8sIHByaXYsIEVJTkFfRkFMU0UpOworICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJO
KGV3a1RpbGUsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV9jaGFuZ2VkKHByaXYpOwogICAgIHJldHVybiBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZW5h
YmxlX3JlbmRlcihwcml2KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZS5oIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlLmgKaW5kZXggMzAxMDNlZC4uYzJhNzBkYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9lZmwvZXdrL2V3a190aWxlZF9iYWNraW5nX3N0b3JlLmgKKysrIGIvU291cmNl
L1dlYktpdC9lZmwvZXdrL2V3a190aWxlZF9iYWNraW5nX3N0b3JlLmgKQEAgLTcyLDcgKzcyLDcg
QEAgc3RydWN0IF9Fd2tfVGlsZSB7CiAgICAgY2Fpcm9fdCogY2Fpcm87CiAKICAgICAvKiogTmV2
ZXIgZXZlciBjaGFuZ2UgdGhvc2UgYWZ0ZXIgdGlsZSBpcyBjcmVhdGVkIChyZXNwZWN0IGNvbnN0
ISkgKi8KLSAgICBjb25zdCBFdmFzX0Nvb3JkIHcsIGg7ICAgICAgICAvKio8IHRpbGUgc2l6ZSAo
c2VlIFRJTEVfU0laRV9BVF9aT09NKCkpICovCisgICAgY29uc3QgRXZhc19Db29yZCB3aWR0aCwg
aGVpZ2h0OyAgICAgICAgLyoqPCB0aWxlIHNpemUgKHNlZSBUSUxFX1NJWkVfQVRfWk9PTSgpKSAq
LwogICAgIGNvbnN0IEV2YXNfQ29sb3JzcGFjZSBjc3BhY2U7IC8qKjwgY29sb3JzcGFjZSAqLwog
ICAgIGNvbnN0IGZsb2F0IHpvb207ICAgICAgICAgICAgIC8qKjwgem9vbSBsZXZlbCBjb250ZW50
cyB3ZXJlIHJlbmRlcmVkIGF0ICovCiAgICAgY29uc3Qgc2l6ZV90IGJ5dGVzOyAgICAgICAgICAg
LyoqPCBieXRlcyB1c2VkIGluIHBpeGVscy4ga2VlcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9lZmwvZXdrL2V3a190aWxlZF9tYXRyaXguY3BwIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3
a190aWxlZF9tYXRyaXguY3BwCmluZGV4IGZmNGM0MWMuLmRhN2I1NjUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfbWF0cml4LmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2VmbC9ld2svZXdrX3RpbGVkX21hdHJpeC5jcHAKQEAgLTMyLDE3ICszMiwxNyBAQAogI2lu
Y2x1ZGUgPHN0cmluZy5oPgogCiBzdHJ1Y3QgX0V3a19UaWxlX01hdHJpeCB7Ci0gICAgRWluYV9N
YXRyaXhzcGFyc2UgKm1hdHJpeDsKLSAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YzsKKyAg
ICBFaW5hX01hdHJpeHNwYXJzZSogbWF0cml4OworICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSog
dHVjOwogICAgIEV2YXNfQ29sb3JzcGFjZSBjc3BhY2U7CiAgICAgc3RydWN0IHsKLSAgICAgICAg
dm9pZCAoKmNiKSh2b2lkICpkYXRhLCBFd2tfVGlsZSAqdCwgY29uc3QgRWluYV9SZWN0YW5nbGUg
KnVwZGF0ZSk7Ci0gICAgICAgIHZvaWQgKmRhdGE7CisgICAgICAgIHZvaWQgKCogY2IpKHZvaWQq
IGRhdGEsIEV3a19UaWxlKiB0aWxlLCBjb25zdCBFaW5hX1JlY3RhbmdsZSogdXBkYXRlKTsKKyAg
ICAgICAgdm9pZCogZGF0YTsKICAgICB9IHJlbmRlcjsKICAgICB1bnNpZ25lZCBpbnQgZnJvemVu
OwotICAgIEVpbmFfTGlzdCAqdXBkYXRlczsKKyAgICBFaW5hX0xpc3QqIHVwZGF0ZXM7CiAgICAg
c3RydWN0IHsKLSAgICAgICAgRXZhc19Db29yZCB3LCBoOworICAgICAgICBFdmFzX0Nvb3JkIHdp
ZHRoLCBoZWlnaHQ7CiAgICAgfSB0aWxlOwogI2lmZGVmIERFQlVHX01FTV9MRUFLUwogICAgIHN0
cnVjdCB7CkBAIC01OSwzMSArNTksMzEgQEAgc3RhdGljIHVpbnQ2NF90IGJ5dGVzX2xlYWtlZCA9
IDA7CiAjZW5kaWYKIAogLyogY2FsbGVkIHdoZW4gbWF0cml4c3BhcnNlIGlzIHJlc2l6ZWQgb3Ig
ZnJlZWQgKi8KLXN0YXRpYyB2b2lkIF9ld2tfdGlsZV9tYXRyaXhfY2VsbF9mcmVlKHZvaWQgKnVz
ZXJfZGF0YSwgdm9pZCAqY2VsbF9kYXRhKQorc3RhdGljIHZvaWQgX2V3a190aWxlX21hdHJpeF9j
ZWxsX2ZyZWUodm9pZCogdXNlcl9kYXRhLCB2b2lkKiBjZWxsX2RhdGEpCiB7CiAgICAgRXdrX1Rp
bGVfTWF0cml4KiB0bSA9IHN0YXRpY19jYXN0PEV3a19UaWxlX01hdHJpeCo+KHVzZXJfZGF0YSk7
Ci0gICAgRXdrX1RpbGUqIHQgPSBzdGF0aWNfY2FzdDxFd2tfVGlsZSo+KGNlbGxfZGF0YSk7Cisg
ICAgRXdrX1RpbGUqIHRpbGUgPSBzdGF0aWNfY2FzdDxFd2tfVGlsZSo+KGNlbGxfZGF0YSk7CiAK
LSAgICBpZiAoIXQpCisgICAgaWYgKCF0aWxlKQogICAgICAgICByZXR1cm47CiAKICAgICBld2tf
dGlsZV91bnVzZWRfY2FjaGVfZnJlZXplKHRtLT50dWMpOwogCi0gICAgaWYgKHQtPnVwZGF0ZXMg
fHwgdC0+c3RhdHMuZnVsbF91cGRhdGUpCi0gICAgICAgIHRtLT51cGRhdGVzID0gZWluYV9saXN0
X3JlbW92ZSh0bS0+dXBkYXRlcywgdCk7CisgICAgaWYgKHRpbGUtPnVwZGF0ZXMgfHwgdGlsZS0+
c3RhdHMuZnVsbF91cGRhdGUpCisgICAgICAgIHRtLT51cGRhdGVzID0gZWluYV9saXN0X3JlbW92
ZSh0bS0+dXBkYXRlcywgdGlsZSk7CiAKLSAgICBpZiAodC0+dmlzaWJsZSkKLSAgICAgICAgRVJS
KCJmcmVlaW5nIGNlbGwgdGhhdCBpcyB2aXNpYmxlLCBsZWFraW5nIHRpbGUgJXAiLCB0KTsKKyAg
ICBpZiAodGlsZS0+dmlzaWJsZSkKKyAgICAgICAgRVJSKCJmcmVlaW5nIGNlbGwgdGhhdCBpcyB2
aXNpYmxlLCBsZWFraW5nIHRpbGUgJXAiLCB0aWxlKTsKICAgICBlbHNlIHsKLSAgICAgICAgaWYg
KCFld2tfdGlsZV91bnVzZWRfY2FjaGVfdGlsZV9nZXQodG0tPnR1YywgdCkpCi0gICAgICAgICAg
ICBFUlIoInRpbGUgJXAgd2FzIG5vdCBpbiBjYWNoZSAlcD8gbGVha2luZy4uLiIsIHQsIHRtLT50
dWMpOworICAgICAgICBpZiAoIWV3a190aWxlX3VudXNlZF9jYWNoZV90aWxlX2dldCh0bS0+dHVj
LCB0aWxlKSkKKyAgICAgICAgICAgIEVSUigidGlsZSAlcCB3YXMgbm90IGluIGNhY2hlICVwPyBs
ZWFraW5nLi4uIiwgdGlsZSwgdG0tPnR1Yyk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAg
REJHKCJ0aWxlIGNlbGwgZG9lcyBub3QgZXhpc3QgYW55bW9yZSwgZnJlZSBpdCAlcCIsIHQpOwor
ICAgICAgICAgICAgREJHKCJ0aWxlIGNlbGwgZG9lcyBub3QgZXhpc3QgYW55bW9yZSwgZnJlZSBp
dCAlcCIsIHRpbGUpOwogI2lmZGVmIERFQlVHX01FTV9MRUFLUwotICAgICAgICAgICAgdG0tPnN0
YXRzLmJ5dGVzLmZyZWVkICs9IHQtPmJ5dGVzOworICAgICAgICAgICAgdG0tPnN0YXRzLmJ5dGVz
LmZyZWVkICs9IHRpbGUtPmJ5dGVzOwogICAgICAgICAgICAgdG0tPnN0YXRzLnRpbGVzLmZyZWVk
Kys7CiAjZW5kaWYKLSAgICAgICAgICAgIGV3a190aWxlX2ZyZWUodCk7CisgICAgICAgICAgICBl
d2tfdGlsZV9mcmVlKHRpbGUpOwogICAgICAgICB9CiAgICAgfQogCkBAIC05MSw0MCArOTEsNDAg
QEAgc3RhdGljIHZvaWQgX2V3a190aWxlX21hdHJpeF9jZWxsX2ZyZWUodm9pZCAqdXNlcl9kYXRh
LCB2b2lkICpjZWxsX2RhdGEpCiB9CiAKIC8qIGNhbGxlZCB3aGVuIGNhY2hlIG9mIHVudXNlZCB0
aWxlIGlzIGZsdXNoZWQgKi8KLXN0YXRpYyB2b2lkIF9ld2tfdGlsZV9tYXRyaXhfdGlsZV9mcmVl
KHZvaWQgKmRhdGEsIEV3a19UaWxlICp0KQorc3RhdGljIHZvaWQgX2V3a190aWxlX21hdHJpeF90
aWxlX2ZyZWUodm9pZCogZGF0YSwgRXdrX1RpbGUqIHRpbGUpCiB7CiAgICAgRXdrX1RpbGVfTWF0
cml4KiB0bSA9IHN0YXRpY19jYXN0PEV3a19UaWxlX01hdHJpeCo+KGRhdGEpOwotICAgIEVpbmFf
TWF0cml4c3BhcnNlX0NlbGwgKmNlbGw7Ci0gCi0gICAgaWYgKCFlaW5hX21hdHJpeHNwYXJzZV9j
ZWxsX2lkeF9nZXQodG0tPm1hdHJpeCwgdC0+cm93LCB0LT5jb2wsICZjZWxsKSkgewotICAgICAg
ICBFUlIoInJlbW92aW5nIHRpbGUgJXAgdGhhdCB3YXMgbm90IGluIHRoZSBtYXRyaXg/IExlYWtp
bmcuLi4iLCB0KTsKKyAgICBFaW5hX01hdHJpeHNwYXJzZV9DZWxsKiBjZWxsOworCisgICAgaWYg
KCFlaW5hX21hdHJpeHNwYXJzZV9jZWxsX2lkeF9nZXQodG0tPm1hdHJpeCwgdGlsZS0+cm93LCB0
aWxlLT5jb2wsICZjZWxsKSkgeworICAgICAgICBFUlIoInJlbW92aW5nIHRpbGUgJXAgdGhhdCB3
YXMgbm90IGluIHRoZSBtYXRyaXg/IExlYWtpbmcuLi4iLCB0aWxlKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAogICAgIGlmICghY2VsbCkgewotICAgICAgICBFUlIoInJlbW92aW5nIHRpbGUg
JXAgdGhhdCB3YXMgbm90IGluIHRoZSBtYXRyaXg/IExlYWtpbmcuLi4iLCB0KTsKKyAgICAgICAg
RVJSKCJyZW1vdmluZyB0aWxlICVwIHRoYXQgd2FzIG5vdCBpbiB0aGUgbWF0cml4PyBMZWFraW5n
Li4uIiwgdGlsZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAodC0+dXBkYXRl
cyB8fCB0LT5zdGF0cy5mdWxsX3VwZGF0ZSkKLSAgICAgICAgdG0tPnVwZGF0ZXMgPSBlaW5hX2xp
c3RfcmVtb3ZlKHRtLT51cGRhdGVzLCB0KTsKKyAgICBpZiAodGlsZS0+dXBkYXRlcyB8fCB0aWxl
LT5zdGF0cy5mdWxsX3VwZGF0ZSkKKyAgICAgICAgdG0tPnVwZGF0ZXMgPSBlaW5hX2xpc3RfcmVt
b3ZlKHRtLT51cGRhdGVzLCB0aWxlKTsKIAogICAgIC8qIHNldCB0byBudWxsIHRvIGF2b2lkIGRv
dWJsZSBmcmVlICovCiAgICAgZWluYV9tYXRyaXhzcGFyc2VfY2VsbF9kYXRhX3JlcGxhY2UoY2Vs
bCwgMCwgMCk7CiAgICAgZWluYV9tYXRyaXhzcGFyc2VfY2VsbF9jbGVhcihjZWxsKTsKIAotICAg
IGlmIChFSU5BX1VOTElLRUxZKCEhdC0+dmlzaWJsZSkpIHsKKyAgICBpZiAoRUlOQV9VTkxJS0VM
WSghIXRpbGUtPnZpc2libGUpKSB7CiAgICAgICAgIEVSUigiY2FjaGUgb2YgdW51c2VkIHRpbGVz
IHJlcXVlc3RpbmcgZGVsZXRpb24gb2YgdXNlZCB0aWxlICVwPyAiCi0gICAgICAgICAgICAiTGVh
a2luZy4uLiIsIHQpOworICAgICAgICAgICAgIkxlYWtpbmcuLi4iLCB0aWxlKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAogI2lmZGVmIERFQlVHX01FTV9MRUFLUwotICAgIHRtLT5zdGF0cy5i
eXRlcy5mcmVlZCArPSB0LT5ieXRlczsKKyAgICB0bS0+c3RhdHMuYnl0ZXMuZnJlZWQgKz0gdGls
ZS0+Ynl0ZXM7CiAgICAgdG0tPnN0YXRzLnRpbGVzLmZyZWVkKys7CiAjZW5kaWYKIAotICAgIGV3
a190aWxlX2ZyZWUodCk7CisgICAgZXdrX3RpbGVfZnJlZSh0aWxlKTsKIH0KIAogLyoqCkBAIC0x
NDUsNyArMTQ1LDcgQEAgc3RhdGljIHZvaWQgX2V3a190aWxlX21hdHJpeF90aWxlX2ZyZWUodm9p
ZCAqZGF0YSwgRXdrX1RpbGUgKnQpCiAgKgogICogQHJldHVybiBuZXdseSBhbGxvY2F0ZWQgaW5z
dGFuY2Ugb24gc3VjY2VzcywgQGMgMCBvbiBmYWlsdXJlLgogICovCi1Fd2tfVGlsZV9NYXRyaXgg
KmV3a190aWxlX21hdHJpeF9uZXcoRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMsIHVuc2lnbmVk
IGxvbmcgY29scywgdW5zaWduZWQgbG9uZyByb3dzLCBFdmFzX0NvbG9yc3BhY2UgY3NwYWNlLCB2
b2lkICgqcmVuZGVyX2NiKSh2b2lkICpkYXRhLCBFd2tfVGlsZSAqdCwgY29uc3QgRWluYV9SZWN0
YW5nbGUgKnVwZGF0ZSksIGNvbnN0IHZvaWQgKnJlbmRlcl9kYXRhKQorRXdrX1RpbGVfTWF0cml4
KiBld2tfdGlsZV9tYXRyaXhfbmV3KEV3a19UaWxlX1VudXNlZF9DYWNoZSogdHVjLCB1bnNpZ25l
ZCBsb25nIGNvbHMsIHVuc2lnbmVkIGxvbmcgcm93cywgRXZhc19Db2xvcnNwYWNlIGNzcGFjZSwg
dm9pZCAoKiByZW5kZXJfY2IpKHZvaWQqIGRhdGEsIEV3a19UaWxlKiB0aWxlLCBjb25zdCBFaW5h
X1JlY3RhbmdsZSogdXBkYXRlKSwgY29uc3Qgdm9pZCogcmVuZGVyX2RhdGEpCiB7CiAgICAgRXdr
X1RpbGVfTWF0cml4KiB0bSA9IHN0YXRpY19jYXN0PEV3a19UaWxlX01hdHJpeCo+KGNhbGxvYygx
LCBzaXplb2YoRXdrX1RpbGVfTWF0cml4KSkpOwogICAgIGlmICghdG0pCkBAIC0xNzIsOSArMTcy
LDkgQEAgRXdrX1RpbGVfTWF0cml4ICpld2tfdGlsZV9tYXRyaXhfbmV3KEV3a19UaWxlX1VudXNl
ZF9DYWNoZSAqdHVjLCB1bnNpZ25lZCBsb25nIGMKIAogICAgIHRtLT5jc3BhY2UgPSBjc3BhY2U7
CiAgICAgdG0tPnJlbmRlci5jYiA9IHJlbmRlcl9jYjsKLSAgICB0bS0+cmVuZGVyLmRhdGEgPSAo
dm9pZCAqKXJlbmRlcl9kYXRhOwotICAgIHRtLT50aWxlLncgPSBERUZBVUxUX1RJTEVfVzsKLSAg
ICB0bS0+dGlsZS5oID0gREVGQVVMVF9USUxFX0g7CisgICAgdG0tPnJlbmRlci5kYXRhID0gKHZv
aWQqKXJlbmRlcl9kYXRhOworICAgIHRtLT50aWxlLndpZHRoID0gREVGQVVMVF9USUxFX1c7Cisg
ICAgdG0tPnRpbGUuaGVpZ2h0ID0gREVGQVVMVF9USUxFX0g7CiAKICAgICByZXR1cm4gdG07CiB9
CkBAIC0xODQsNyArMTg0LDcgQEAgRXdrX1RpbGVfTWF0cml4ICpld2tfdGlsZV9tYXRyaXhfbmV3
KEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjLCB1bnNpZ25lZCBsb25nIGMKICAqCiAgKiBUaGUg
Y2FjaGUgaW5zdGFuY2UgaXMgdW5yZWZlcmVuY2VkLCBwb3NzaWJseSBmcmVlaW5nIGl0LgogICov
Ci12b2lkIGV3a190aWxlX21hdHJpeF9mcmVlKEV3a19UaWxlX01hdHJpeCAqdG0pCit2b2lkIGV3
a190aWxlX21hdHJpeF9mcmVlKEV3a19UaWxlX01hdHJpeCogdG0pCiB7CiAjaWZkZWYgREVCVUdf
TUVNX0xFQUtTCiAgICAgdWludDY0X3QgdGlsZXMsIGJ5dGVzOwpAQCAtMjA2LDIwICsyMDYsMjAg
QEAgdm9pZCBld2tfdGlsZV9tYXRyaXhfZnJlZShFd2tfVGlsZV9NYXRyaXggKnRtKQogICAgIGJ5
dGVzX2xlYWtlZCArPSBieXRlczsKIAogICAgIGlmICh0aWxlcyB8fCBieXRlcykKLSAgICAgICAg
RVJSKCJ0aWxlZCBtYXRyaXggbGVha2VkOiB0aWxlc1srJSJQUkl1NjQiLC0lIlBSSXU2NCI6JSJQ
Ukl1NjQiXSAiCi0gICAgICAgICAgICJieXRlc1srJSJQUkl1NjQiLC0lIlBSSXU2NCI6JSJQUkl1
NjQiXSIsCisgICAgICAgIEVSUigidGlsZWQgbWF0cml4IGxlYWtlZDogdGlsZXNbKyUiIFBSSXU2
NCAiLC0lIiBQUkl1NjQgIjolIiBQUkl1NjQgIl0gIgorICAgICAgICAgICAgImJ5dGVzWyslIiBQ
Ukl1NjQgIiwtJSIgUFJJdTY0ICI6JSIgUFJJdTY0ICJdIiwKICAgICAgICAgICAgIHRtLT5zdGF0
cy50aWxlcy5hbGxvY2F0ZWQsIHRtLT5zdGF0cy50aWxlcy5mcmVlZCwgdGlsZXMsCiAgICAgICAg
ICAgICB0bS0+c3RhdHMuYnl0ZXMuYWxsb2NhdGVkLCB0bS0+c3RhdHMuYnl0ZXMuZnJlZWQsIGJ5
dGVzKTsKICAgICBlbHNlIGlmICh0aWxlc19sZWFrZWQgfHwgYnl0ZXNfbGVha2VkKQotICAgICAg
ICBXUk4oInRpbGVkIG1hdHJpeCBoYWQgbm8gbGVha3M6IHRpbGVzWyslIlBSSXU2NCIsLSUiUFJJ
dTY0Il0gIgotICAgICAgICAgICAiYnl0ZXNbKyUiUFJJdTY0IiwtJSJQUkl1NjQiXSwgYnV0IHNv
bWUgb3RoZXIgbGVha2VkICIKLSAgICAgICAgICAgICIlIlBSSXU2NCIgdGlsZXMgKCUiUFJJdTY0
IiBieXRlcykiLAorICAgICAgICBXUk4oInRpbGVkIG1hdHJpeCBoYWQgbm8gbGVha3M6IHRpbGVz
WyslIiBQUkl1NjQgIiwtJSIgUFJJdTY0ICJdICIKKyAgICAgICAgICAgICJieXRlc1srJSIgUFJJ
dTY0ICIsLSUiIFBSSXU2NCAiXSwgYnV0IHNvbWUgb3RoZXIgbGVha2VkICIKKyAgICAgICAgICAg
ICIlIiBQUkl1NjQgIiB0aWxlcyAoJSIgUFJJdTY0ICIgYnl0ZXMpIiwKICAgICAgICAgICAgIHRt
LT5zdGF0cy50aWxlcy5hbGxvY2F0ZWQsIHRtLT5zdGF0cy50aWxlcy5mcmVlZCwKICAgICAgICAg
ICAgIHRtLT5zdGF0cy5ieXRlcy5hbGxvY2F0ZWQsIHRtLT5zdGF0cy5ieXRlcy5mcmVlZCwKICAg
ICAgICAgICAgIHRpbGVzX2xlYWtlZCwgYnl0ZXNfbGVha2VkKTsKICAgICBlbHNlCi0gICAgICAg
IElORigidGlsZWQgbWF0cml4IGhhZCBubyBsZWFrczogdGlsZXNbKyUiUFJJdTY0IiwtJSJQUkl1
NjQiXSAiCi0gICAgICAgICAgICJieXRlc1srJSJQUkl1NjQiLC0lIlBSSXU2NCJdIiwKKyAgICAg
ICAgSU5GKCJ0aWxlZCBtYXRyaXggaGFkIG5vIGxlYWtzOiB0aWxlc1srJSIgUFJJdTY0ICIsLSUi
IFBSSXU2NCAiXSAiCisgICAgICAgICAgICAiYnl0ZXNbKyUiIFBSSXU2NCAiLC0lIiBQUkl1NjQg
Il0iLAogICAgICAgICAgICAgdG0tPnN0YXRzLnRpbGVzLmFsbG9jYXRlZCwgdG0tPnN0YXRzLnRp
bGVzLmZyZWVkLAogICAgICAgICAgICAgdG0tPnN0YXRzLmJ5dGVzLmFsbG9jYXRlZCwgdG0tPnN0
YXRzLmJ5dGVzLmZyZWVkKTsKICNlbmRpZgpAQCAtMjMwLDcgKzIzMCw3IEBAIHZvaWQgZXdrX3Rp
bGVfbWF0cml4X2ZyZWUoRXdrX1RpbGVfTWF0cml4ICp0bSkKIC8qKgogICogUmVzaXplIG1hdHJp
eCB0byBnaXZlbiBudW1iZXIgb2Ygcm93cyBhbmQgY29sdW1ucy4KICAqLwotdm9pZCBld2tfdGls
ZV9tYXRyaXhfcmVzaXplKEV3a19UaWxlX01hdHJpeCAqdG0sIHVuc2lnbmVkIGxvbmcgY29scywg
dW5zaWduZWQgbG9uZyByb3dzKQordm9pZCBld2tfdGlsZV9tYXRyaXhfcmVzaXplKEV3a19UaWxl
X01hdHJpeCogdG0sIHVuc2lnbmVkIGxvbmcgY29scywgdW5zaWduZWQgbG9uZyByb3dzKQogewog
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHRtKTsKICAgICBlaW5hX21hdHJpeHNwYXJz
ZV9zaXplX3NldCh0bS0+bWF0cml4LCByb3dzLCBjb2xzKTsKQEAgLTI0MSw3ICsyNDEsNyBAQCB2
b2lkIGV3a190aWxlX21hdHJpeF9yZXNpemUoRXdrX1RpbGVfTWF0cml4ICp0bSwgdW5zaWduZWQg
bG9uZyBjb2xzLCB1bnNpZ25lZCBsbwogICoKICAqIE5vIHJlZmVyZW5jZSBpcyB0YWtlbiB0byB0
aGUgY2FjaGUuCiAgKi8KLUV3a19UaWxlX1VudXNlZF9DYWNoZSAqZXdrX3RpbGVfbWF0cml4X3Vu
dXNlZF9jYWNoZV9nZXQoY29uc3QgRXdrX1RpbGVfTWF0cml4ICp0bSkKK0V3a19UaWxlX1VudXNl
ZF9DYWNoZSogZXdrX3RpbGVfbWF0cml4X3VudXNlZF9jYWNoZV9nZXQoY29uc3QgRXdrX1RpbGVf
TWF0cml4KiB0bSkKIHsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodG0sIDAp
OwogICAgIHJldHVybiB0bS0+dHVjOwpAQCAtMjUwLDcgKzI1MCw3IEBAIEV3a19UaWxlX1VudXNl
ZF9DYWNoZSAqZXdrX3RpbGVfbWF0cml4X3VudXNlZF9jYWNoZV9nZXQoY29uc3QgRXdrX1RpbGVf
TWF0cml4ICp0CiAvKioKICAqIEdldCB0aGUgZXhhY3QgdGlsZSBmb3IgdGhlIGdpdmVuIHBvc2l0
aW9uIGFuZCB6b29tLgogICoKLSAqIElmIHRoZSB0aWxlIHdhcyB1bnVzZWQgdGhlbiBpdCdzIHJl
bW92ZWQgZnJvbSB0aGUgY2FjaGUuCisgKiBJZiB0aGUgdGlsZS53aWR0aGFzIHVudXNlZCB0aGVu
IGl0J3MgcmVtb3ZlZCBmcm9tIHRoZSBjYWNoZS4KICAqCiAgKiBBZnRlciB1c2FnZSwgcGxlYXNl
IGdpdmUgaXQgYmFjayB1c2luZwogICogZXdrX3RpbGVfbWF0cml4X3RpbGVfcHV0KCkuIElmIHlv
dSBqdXN0IHdhbnQgdG8gY2hlY2sgaWYgaXQgZXhpc3RzLApAQCAtMjY4LDIyICsyNjgsMjIgQEAg
RXdrX1RpbGVfVW51c2VkX0NhY2hlICpld2tfdGlsZV9tYXRyaXhfdW51c2VkX2NhY2hlX2dldChj
b25zdCBFd2tfVGlsZV9NYXRyaXggKnQKICAqCiAgKiBAc2VlIGV3a190aWxlX21hdHJpeF90aWxl
X2V4YWN0X2dldCgpCiAgKi8KLUV3a19UaWxlICpld2tfdGlsZV9tYXRyaXhfdGlsZV9leGFjdF9n
ZXQoRXdrX1RpbGVfTWF0cml4ICp0bSwgdW5zaWduZWQgbG9uZyBjb2wsIHVuc2lnbmVkIGxvbmcg
cm93LCBmbG9hdCB6b29tKQorRXdrX1RpbGUqIGV3a190aWxlX21hdHJpeF90aWxlX2V4YWN0X2dl
dChFd2tfVGlsZV9NYXRyaXgqIHRtLCB1bnNpZ25lZCBsb25nIGNvbCwgdW5zaWduZWQgbG9uZyBy
b3csIGZsb2F0IHpvb20pCiB7Ci0gICAgRXdrX1RpbGUqIHQgPSBzdGF0aWNfY2FzdDxFd2tfVGls
ZSo+KGVpbmFfbWF0cml4c3BhcnNlX2RhdGFfaWR4X2dldCh0bS0+bWF0cml4LCByb3csIGNvbCkp
OwotICAgIGlmICghdCkKKyAgICBFd2tfVGlsZSogdGlsZSA9IHN0YXRpY19jYXN0PEV3a19UaWxl
Kj4oZWluYV9tYXRyaXhzcGFyc2VfZGF0YV9pZHhfZ2V0KHRtLT5tYXRyaXgsIHJvdywgY29sKSk7
CisgICAgaWYgKCF0aWxlKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIGlmICh0LT56b29tID09
IHpvb20pCisgICAgaWYgKHRpbGUtPnpvb20gPT0gem9vbSkKICAgICAgICAgZ290byBlbmQ7CiAK
LSAgZW5kOgotICAgIGlmICghdC0+dmlzaWJsZSkgewotICAgICAgICBpZiAoIWV3a190aWxlX3Vu
dXNlZF9jYWNoZV90aWxlX2dldCh0bS0+dHVjLCB0KSkKK2VuZDoKKyAgICBpZiAoIXRpbGUtPnZp
c2libGUpIHsKKyAgICAgICAgaWYgKCFld2tfdGlsZV91bnVzZWRfY2FjaGVfdGlsZV9nZXQodG0t
PnR1YywgdGlsZSkpCiAgICAgICAgICAgICBXUk4oIkV3a19UaWxlIHdhcyB1bnVzZWQgYnV0IG5v
dCBpbiBjYWNoZT8gYnVnISIpOwogICAgIH0KIAotICAgIHJldHVybiB0OworICAgIHJldHVybiB0
aWxlOwogfQogCiAvKioKQEAgLTI5OCw3ICsyOTgsNyBAQCBFd2tfVGlsZSAqZXdrX3RpbGVfbWF0
cml4X3RpbGVfZXhhY3RfZ2V0KEV3a19UaWxlX01hdHJpeCAqdG0sIHVuc2lnbmVkIGxvbmcgY29s
LAogICoKICAqIEBzZWUgZXdrX3RpbGVfbWF0cml4X3RpbGVfZXhhY3RfZ2V0KCkKICAqLwotRWlu
YV9Cb29sIGV3a190aWxlX21hdHJpeF90aWxlX2V4YWN0X2V4aXN0cyhFd2tfVGlsZV9NYXRyaXgg
KnRtLCB1bnNpZ25lZCBsb25nIGNvbCwgdW5zaWduZWQgbG9uZyByb3csIGZsb2F0IHpvb20pCitF
aW5hX0Jvb2wgZXdrX3RpbGVfbWF0cml4X3RpbGVfZXhhY3RfZXhpc3RzKEV3a19UaWxlX01hdHJp
eCogdG0sIHVuc2lnbmVkIGxvbmcgY29sLCB1bnNpZ25lZCBsb25nIHJvdywgZmxvYXQgem9vbSkK
IHsKICAgICBpZiAoIWVpbmFfbWF0cml4c3BhcnNlX2RhdGFfaWR4X2dldCh0bS0+bWF0cml4LCBy
b3csIGNvbCkpCiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwpAQCAtMzE4LDQ1ICszMTgsNDUg
QEAgRWluYV9Cb29sIGV3a190aWxlX21hdHJpeF90aWxlX2V4YWN0X2V4aXN0cyhFd2tfVGlsZV9N
YXRyaXggKnRtLCB1bnNpZ25lZCBsb25nIGMKICAqIEBwYXJhbSByb3cgdGhlIHJvdyBudW1iZXIu
CiAgKiBAcGFyYW0gem9vbSB0aGUgbGV2ZWwgdG8gY3JlYXRlIHRpbGUsIHVzZWQgdG8gZGV0ZXJt
aW5lIHRpbGUgc2l6ZS4KICAqLwotRXdrX1RpbGUgKmV3a190aWxlX21hdHJpeF90aWxlX25ldyhF
d2tfVGlsZV9NYXRyaXggKnRtLCBFdmFzICpldmFzLCB1bnNpZ25lZCBsb25nIGNvbCwgdW5zaWdu
ZWQgbG9uZyByb3csIGZsb2F0IHpvb20pCitFd2tfVGlsZSogZXdrX3RpbGVfbWF0cml4X3RpbGVf
bmV3KEV3a19UaWxlX01hdHJpeCogdG0sIEV2YXMqIGNhbnZhcywgdW5zaWduZWQgbG9uZyBjb2ws
IHVuc2lnbmVkIGxvbmcgcm93LCBmbG9hdCB6b29tKQogewogICAgIEV2YXNfQ29vcmQgdHcsIHRo
OwotICAgIEV3a19UaWxlICp0OworICAgIEV3a19UaWxlKiB0aWxlOwogCiAgICAgRUlOQV9TQUZF
VFlfT05fTlVMTF9SRVRVUk5fVkFMKHRtLCAwKTsKICAgICBFSU5BX1NBRkVUWV9PTl9GQUxTRV9S
RVRVUk5fVkFMKHpvb20gPiAwLjAsIDApOwogCi0gICAgdHcgPSB0bS0+dGlsZS53OwotICAgIHRo
ID0gdG0tPnRpbGUuaDsKKyAgICB0dyA9IHRtLT50aWxlLndpZHRoOworICAgIHRoID0gdG0tPnRp
bGUuaGVpZ2h0OwogCi0gICAgdCA9IGV3a190aWxlX25ldyhldmFzLCB0dywgdGgsIHpvb20sIHRt
LT5jc3BhY2UpOwotICAgIGlmICghdCkgeworICAgIHRpbGUgPSBld2tfdGlsZV9uZXcoY2FudmFz
LCB0dywgdGgsIHpvb20sIHRtLT5jc3BhY2UpOworICAgIGlmICghdGlsZSkgewogICAgICAgICBF
UlIoImNvdWxkIG5vdCBjcmVhdGUgdGlsZSAlZHglZCBhdCAlZiwgY3NwYWNlPSVkIiwgdHcsIHRo
LCAoZG91YmxlKXpvb20sIHRtLT5jc3BhY2UpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAK
LSAgICBpZiAoIWVpbmFfbWF0cml4c3BhcnNlX2RhdGFfaWR4X3NldCh0bS0+bWF0cml4LCByb3cs
IGNvbCwgdCkpIHsKKyAgICBpZiAoIWVpbmFfbWF0cml4c3BhcnNlX2RhdGFfaWR4X3NldCh0bS0+
bWF0cml4LCByb3csIGNvbCwgdGlsZSkpIHsKICAgICAgICAgRVJSKCJjb3VsZCBub3Qgc2V0IG1h
dHJpeCBjZWxsLCByb3cvY29sIG91dHNpZGUgbWF0cml4IGRpbWVuc2lvbnMhIik7Ci0gICAgICAg
IGV3a190aWxlX2ZyZWUodCk7CisgICAgICAgIGV3a190aWxlX2ZyZWUodGlsZSk7CiAgICAgICAg
IHJldHVybiAwOwogICAgIH0KIAotICAgIHQtPmNvbCA9IGNvbDsKLSAgICB0LT5yb3cgPSByb3c7
Ci0gICAgdC0+eCA9IGNvbCAqIHR3OwotICAgIHQtPnkgPSByb3cgKiB0aDsKKyAgICB0aWxlLT5j
b2wgPSBjb2w7CisgICAgdGlsZS0+cm93ID0gcm93OworICAgIHRpbGUtPnggPSBjb2wgKiB0dzsK
KyAgICB0aWxlLT55ID0gcm93ICogdGg7CiAKLSAgICBjYWlyb190cmFuc2xhdGUodC0+Y2Fpcm8s
IC10LT54LCAtdC0+eSk7CisgICAgY2Fpcm9fdHJhbnNsYXRlKHRpbGUtPmNhaXJvLCAtdGlsZS0+
eCwgLXRpbGUtPnkpOwogCi0gICAgdC0+c3RhdHMuZnVsbF91cGRhdGUgPSBFSU5BX1RSVUU7Ci0g
ICAgdG0tPnVwZGF0ZXMgPSBlaW5hX2xpc3RfYXBwZW5kKHRtLT51cGRhdGVzLCB0KTsKKyAgICB0
aWxlLT5zdGF0cy5mdWxsX3VwZGF0ZSA9IEVJTkFfVFJVRTsKKyAgICB0bS0+dXBkYXRlcyA9IGVp
bmFfbGlzdF9hcHBlbmQodG0tPnVwZGF0ZXMsIHRpbGUpOwogCiAjaWZkZWYgREVCVUdfTUVNX0xF
QUtTCi0gICAgdG0tPnN0YXRzLmJ5dGVzLmFsbG9jYXRlZCArPSB0LT5ieXRlczsKKyAgICB0bS0+
c3RhdHMuYnl0ZXMuYWxsb2NhdGVkICs9IHRpbGUtPmJ5dGVzOwogICAgIHRtLT5zdGF0cy50aWxl
cy5hbGxvY2F0ZWQrKzsKICNlbmRpZgogCi0gICAgcmV0dXJuIHQ7CisgICAgcmV0dXJuIHRpbGU7
CiB9CiAKIC8qKgpAQCAtMzY2LDI5ICszNjYsMjkgQEAgRXdrX1RpbGUgKmV3a190aWxlX21hdHJp
eF90aWxlX25ldyhFd2tfVGlsZV9NYXRyaXggKnRtLCBFdmFzICpldmFzLCB1bnNpZ25lZCBsb24K
ICAqIGl0IHdpdGggZXdrX3RpbGVfbWF0cml4X3RpbGVfZXhhY3RfZ2V0KCkuCiAgKgogICogQW55
IHByZXZpb3VzIHJlZmVyZW5jZSB0byB0aWxlIHNob3VsZCBiZSByZWxlYXNlZAotICogKGV3a190
aWxlX2hpZGUoKSkgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiwgc28gaXQgd2lsbAorICog
KGV3a190aWxlLmhlaWdodGlkZSgpKSBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLCBzbyBp
dCB3aWxsCiAgKiBiZSBrbm93biBpZiBpdCBpcyBub3QgdmlzaWJpbGUgYW55bW9yZSBhbmQgdGh1
cyBjYW4gYmUgcHV0IGludG8gdGhlCiAgKiB1bnVzZWQgY2FjaGUuCiAgKgogICogQHBhcmFtIHRt
IHRoZSB0aWxlIG1hdHJpeCB0byByZXR1cm4gdGlsZSB0by4KICAqIEBwYXJhbSB0IHRoZSB0aWxl
IGluc3RhbmNlIHRvIHJldHVybiwgbXVzdCBAYiBub3QgYmUgQGMgMC4KLSAqIEBwYXJhbSBsYXN0
X3VzZWQgdGltZSBpbiB3aGljaCB0aWxlIHdhcyBsYXN0IHVzZWQuCisgKiBAcGFyYW0gbGFzdF91
c2VkIHRpbWUgaW4gd2hpY2ggdGlsZS53aWR0aGFzIGxhc3QgdXNlZC4KICAqCiAgKiBAcmV0dXJu
ICNFSU5BX1RSVUUgb24gc3VjY2VzcyBvciAjRUlOQV9GQUxTRSBvbiBmYWlsdXJlLgogICovCi1F
aW5hX0Jvb2wgZXdrX3RpbGVfbWF0cml4X3RpbGVfcHV0KEV3a19UaWxlX01hdHJpeCAqdG0sIEV3
a19UaWxlICp0LCBkb3VibGUgbGFzdF91c2VkKQorRWluYV9Cb29sIGV3a190aWxlX21hdHJpeF90
aWxlX3B1dChFd2tfVGlsZV9NYXRyaXgqIHRtLCBFd2tfVGlsZSogdGlsZSwgZG91YmxlIGxhc3Rf
dXNlZCkKIHsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodG0sIEVJTkFfRkFM
U0UpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh0LCBFSU5BX0ZBTFNFKTsK
KyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodGlsZSwgRUlOQV9GQUxTRSk7CiAK
LSAgICBpZiAodC0+dmlzaWJsZSkKKyAgICBpZiAodGlsZS0+dmlzaWJsZSkKICAgICAgICAgcmV0
dXJuIEVJTkFfVFJVRTsKIAotICAgIHQtPnN0YXRzLmxhc3RfdXNlZCA9IGxhc3RfdXNlZDsKLSAg
ICByZXR1cm4gZXdrX3RpbGVfdW51c2VkX2NhY2hlX3RpbGVfcHV0KHRtLT50dWMsIHQsIF9ld2tf
dGlsZV9tYXRyaXhfdGlsZV9mcmVlLCB0bSk7CisgICAgdGlsZS0+c3RhdHMubGFzdF91c2VkID0g
bGFzdF91c2VkOworICAgIHJldHVybiBld2tfdGlsZV91bnVzZWRfY2FjaGVfdGlsZV9wdXQodG0t
PnR1YywgdGlsZSwgX2V3a190aWxlX21hdHJpeF90aWxlX2ZyZWUsIHRtKTsKIH0KIAotRWluYV9C
b29sIGV3a190aWxlX21hdHJpeF90aWxlX3VwZGF0ZShFd2tfVGlsZV9NYXRyaXggKnRtLCB1bnNp
Z25lZCBsb25nIGNvbCwgdW5zaWduZWQgbG9uZyByb3csIGNvbnN0IEVpbmFfUmVjdGFuZ2xlICp1
cGRhdGUpCitFaW5hX0Jvb2wgZXdrX3RpbGVfbWF0cml4X3RpbGVfdXBkYXRlKEV3a19UaWxlX01h
dHJpeCogdG0sIHVuc2lnbmVkIGxvbmcgY29sLCB1bnNpZ25lZCBsb25nIHJvdywgY29uc3QgRWlu
YV9SZWN0YW5nbGUqIHVwZGF0ZSkKIHsKICAgICBFaW5hX1JlY3RhbmdsZSBuZXdfdXBkYXRlOwog
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh0bSwgRUlOQV9GQUxTRSk7CkBAIC00
MDEsMjUgKzQwMSwyNSBAQCBFaW5hX0Jvb2wgZXdrX3RpbGVfbWF0cml4X3RpbGVfdXBkYXRlKEV3
a19UaWxlX01hdHJpeCAqdG0sIHVuc2lnbmVkIGxvbmcgY29sLCB1bgogICAgICAgICByZXR1cm4g
RUlOQV9GQUxTRTsKICAgICB9CiAKLSAgICBpZiAodXBkYXRlLT54ICsgdXBkYXRlLT53IC0gMSA+
PSB0bS0+dGlsZS53KQotICAgICAgICBuZXdfdXBkYXRlLncgPSB0bS0+dGlsZS53IC0gdXBkYXRl
LT54OwotICAgIGlmICh1cGRhdGUtPnkgKyB1cGRhdGUtPmggLSAxID49IHRtLT50aWxlLmgpCi0g
ICAgICAgIG5ld191cGRhdGUuaCA9IHRtLT50aWxlLmggLSB1cGRhdGUtPnk7CisgICAgaWYgKHVw
ZGF0ZS0+eCArIHVwZGF0ZS0+dyAtIDEgPj0gdG0tPnRpbGUud2lkdGgpCisgICAgICAgIG5ld191
cGRhdGUudyA9IHRtLT50aWxlLndpZHRoIC0gdXBkYXRlLT54OworICAgIGlmICh1cGRhdGUtPnkg
KyB1cGRhdGUtPmggLSAxID49IHRtLT50aWxlLmhlaWdodCkKKyAgICAgICAgbmV3X3VwZGF0ZS5o
ID0gdG0tPnRpbGUuaGVpZ2h0IC0gdXBkYXRlLT55OwogCi0gICAgRXdrX1RpbGUqIHQgPSBzdGF0
aWNfY2FzdDxFd2tfVGlsZSo+KGVpbmFfbWF0cml4c3BhcnNlX2RhdGFfaWR4X2dldCh0bS0+bWF0
cml4LCByb3csIGNvbCkpOwotICAgIGlmICghdCkKKyAgICBFd2tfVGlsZSogdGlsZSA9IHN0YXRp
Y19jYXN0PEV3a19UaWxlKj4oZWluYV9tYXRyaXhzcGFyc2VfZGF0YV9pZHhfZ2V0KHRtLT5tYXRy
aXgsIHJvdywgY29sKSk7CisgICAgaWYgKCF0aWxlKQogICAgICAgICByZXR1cm4gRUlOQV9UUlVF
OwogCi0gICAgaWYgKCF0LT51cGRhdGVzICYmICF0LT5zdGF0cy5mdWxsX3VwZGF0ZSkKLSAgICAg
ICAgdG0tPnVwZGF0ZXMgPSBlaW5hX2xpc3RfYXBwZW5kKHRtLT51cGRhdGVzLCB0KTsKLSAgICBl
d2tfdGlsZV91cGRhdGVfYXJlYSh0LCAmbmV3X3VwZGF0ZSk7CisgICAgaWYgKCF0aWxlLT51cGRh
dGVzICYmICF0aWxlLT5zdGF0cy5mdWxsX3VwZGF0ZSkKKyAgICAgICAgdG0tPnVwZGF0ZXMgPSBl
aW5hX2xpc3RfYXBwZW5kKHRtLT51cGRhdGVzLCB0aWxlKTsKKyAgICBld2tfdGlsZV91cGRhdGVf
YXJlYSh0aWxlLCAmbmV3X3VwZGF0ZSk7CiAKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi1F
aW5hX0Jvb2wgZXdrX3RpbGVfbWF0cml4X3RpbGVfdXBkYXRlX2Z1bGwoRXdrX1RpbGVfTWF0cml4
ICp0bSwgdW5zaWduZWQgbG9uZyBjb2wsIHVuc2lnbmVkIGxvbmcgcm93KQorRWluYV9Cb29sIGV3
a190aWxlX21hdHJpeF90aWxlX3VwZGF0ZV9mdWxsKEV3a19UaWxlX01hdHJpeCogdG0sIHVuc2ln
bmVkIGxvbmcgY29sLCB1bnNpZ25lZCBsb25nIHJvdykKIHsKLSAgICBFaW5hX01hdHJpeHNwYXJz
ZV9DZWxsICpjZWxsOworICAgIEVpbmFfTWF0cml4c3BhcnNlX0NlbGwqIGNlbGw7CiAgICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHRtLCBFSU5BX0ZBTFNFKTsKIAogICAgIGlmICgh
ZWluYV9tYXRyaXhzcGFyc2VfY2VsbF9pZHhfZ2V0KHRtLT5tYXRyaXgsIHJvdywgY29sLCAmY2Vs
bCkpCkBAIC00MjgsMzIgKzQyOCwzMiBAQCBFaW5hX0Jvb2wgZXdrX3RpbGVfbWF0cml4X3RpbGVf
dXBkYXRlX2Z1bGwoRXdrX1RpbGVfTWF0cml4ICp0bSwgdW5zaWduZWQgbG9uZyBjbwogICAgIGlm
ICghY2VsbCkKICAgICAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIAotICAgIEV3a19UaWxlKiB0ID0g
c3RhdGljX2Nhc3Q8RXdrX1RpbGUqPihlaW5hX21hdHJpeHNwYXJzZV9jZWxsX2RhdGFfZ2V0KGNl
bGwpKTsKLSAgICBpZiAoIXQpIHsKKyAgICBFd2tfVGlsZSogdGlsZSA9IHN0YXRpY19jYXN0PEV3
a19UaWxlKj4oZWluYV9tYXRyaXhzcGFyc2VfY2VsbF9kYXRhX2dldChjZWxsKSk7CisgICAgaWYg
KCF0aWxlKSB7CiAgICAgICAgIENSSVRJQ0FMKCJtYXRyaXggY2VsbCB3aXRoIG5vIHRpbGUhIik7
CiAgICAgICAgIHJldHVybiBFSU5BX1RSVUU7CiAgICAgfQogCi0gICAgaWYgKCF0LT51cGRhdGVz
ICYmICF0LT5zdGF0cy5mdWxsX3VwZGF0ZSkKLSAgICAgICAgdG0tPnVwZGF0ZXMgPSBlaW5hX2xp
c3RfYXBwZW5kKHRtLT51cGRhdGVzLCB0KTsKLSAgICBld2tfdGlsZV91cGRhdGVfZnVsbCh0KTsK
KyAgICBpZiAoIXRpbGUtPnVwZGF0ZXMgJiYgIXRpbGUtPnN0YXRzLmZ1bGxfdXBkYXRlKQorICAg
ICAgICB0bS0+dXBkYXRlcyA9IGVpbmFfbGlzdF9hcHBlbmQodG0tPnVwZGF0ZXMsIHRpbGUpOwor
ICAgIGV3a190aWxlX3VwZGF0ZV9mdWxsKHRpbGUpOwogCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsK
IH0KIAotdm9pZCBld2tfdGlsZV9tYXRyaXhfdGlsZV91cGRhdGVzX2NsZWFyKEV3a19UaWxlX01h
dHJpeCAqdG0sIEV3a19UaWxlICp0KQordm9pZCBld2tfdGlsZV9tYXRyaXhfdGlsZV91cGRhdGVz
X2NsZWFyKEV3a19UaWxlX01hdHJpeCogdG0sIEV3a19UaWxlKiB0aWxlKQogewogICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOKHRtKTsKLSAgICBpZiAoIXQtPnVwZGF0ZXMgJiYgIXQtPnN0
YXRzLmZ1bGxfdXBkYXRlKQorICAgIGlmICghdGlsZS0+dXBkYXRlcyAmJiAhdGlsZS0+c3RhdHMu
ZnVsbF91cGRhdGUpCiAgICAgICAgIHJldHVybjsKLSAgICBld2tfdGlsZV91cGRhdGVzX2NsZWFy
KHQpOwotICAgIHRtLT51cGRhdGVzID0gZWluYV9saXN0X3JlbW92ZSh0bS0+dXBkYXRlcywgdCk7
CisgICAgZXdrX3RpbGVfdXBkYXRlc19jbGVhcih0aWxlKTsKKyAgICB0bS0+dXBkYXRlcyA9IGVp
bmFfbGlzdF9yZW1vdmUodG0tPnVwZGF0ZXMsIHRpbGUpOwogfQogCi1zdGF0aWMgRWluYV9Cb29s
IF9ld2tfdGlsZV9tYXRyaXhfc2xpY2VyX3NldHVwKEV3a19UaWxlX01hdHJpeCAqdG0sIGNvbnN0
IEVpbmFfUmVjdGFuZ2xlICphcmVhLCBmbG9hdCB6b29tLCBFaW5hX1RpbGVfR3JpZF9TbGljZXIg
KnNsaWNlcikKK3N0YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxlX21hdHJpeF9zbGljZXJfc2V0dXAo
RXdrX1RpbGVfTWF0cml4KiB0bSwgY29uc3QgRWluYV9SZWN0YW5nbGUqIGFyZWEsIGZsb2F0IHpv
b20sIEVpbmFfVGlsZV9HcmlkX1NsaWNlciogc2xpY2VyKQogewogICAgIHVuc2lnbmVkIGxvbmcg
cm93cywgY29sczsKLSAgICBFdmFzX0Nvb3JkIHgsIHksIHcsIGgsIHR3LCB0aDsKKyAgICBFdmFz
X0Nvb3JkIHgsIHksIHdpZHRoLCBoZWlnaHQsIHR3LCB0aDsKIAogICAgIGlmIChhcmVhLT53IDw9
IDAgfHwgYXJlYS0+aCA8PSAwKSB7CiAgICAgICAgIFdSTigiaW52YWxpZCBhcmVhIHJlZ2lvbjog
JWQsJWQrJWR4JWQuIiwKQEAgLTQ2MywzNSArNDYzLDM1IEBAIHN0YXRpYyBFaW5hX0Jvb2wgX2V3
a190aWxlX21hdHJpeF9zbGljZXJfc2V0dXAoRXdrX1RpbGVfTWF0cml4ICp0bSwgY29uc3QgRWlu
YV9SCiAKICAgICB4ID0gYXJlYS0+eDsKICAgICB5ID0gYXJlYS0+eTsKLSAgICB3ID0gYXJlYS0+
dzsKLSAgICBoID0gYXJlYS0+aDsKKyAgICB3aWR0aCA9IGFyZWEtPnc7CisgICAgaGVpZ2h0ID0g
YXJlYS0+aDsKIAotICAgIHR3ID0gdG0tPnRpbGUudzsKLSAgICB0aCA9IHRtLT50aWxlLmg7Cisg
ICAgdHcgPSB0bS0+dGlsZS53aWR0aDsKKyAgICB0aCA9IHRtLT50aWxlLmhlaWdodDsKIAogICAg
IC8vIGNyb3BwaW5nIGFyZWEgcmVnaW9uIHRvIGZpdCBtYXRyaXgKICAgICBlaW5hX21hdHJpeHNw
YXJzZV9zaXplX2dldCh0bS0+bWF0cml4LCAmcm93cywgJmNvbHMpOwogICAgIGlmICh4IDwgMCkg
ewotICAgICAgICB3ICs9IHg7CisgICAgICAgIHdpZHRoICs9IHg7CiAgICAgICAgIHggPSAwOwog
ICAgIH0KICAgICBpZiAoeSA8IDApIHsKLSAgICAgICAgaCArPSB5OworICAgICAgICBoZWlnaHQg
Kz0geTsKICAgICAgICAgeSA9IDA7CiAgICAgfQogCi0gICAgaWYgKHkgKyBoIC0gMSA+IChsb25n
KShyb3dzICogdGgpKQotICAgICAgICBoID0gcm93cyAqIHRoIC0geTsKLSAgICBpZiAoeCArIHcg
LSAxID4gKGxvbmcpKGNvbHMgKiB0dykpCi0gICAgICAgIHcgPSBjb2xzICogdHcgLSB4OworICAg
IGlmICh5ICsgaGVpZ2h0IC0gMSA+IChsb25nKShyb3dzICogdGgpKQorICAgICAgICBoZWlnaHQg
PSByb3dzICogdGggLSB5OworICAgIGlmICh4ICsgd2lkdGggLSAxID4gKGxvbmcpKGNvbHMgKiB0
dykpCisgICAgICAgIHdpZHRoID0gY29scyAqIHR3IC0geDsKIAotICAgIHJldHVybiBlaW5hX3Rp
bGVfZ3JpZF9zbGljZXJfc2V0dXAoc2xpY2VyLCB4LCB5LCB3LCBoLCB0dywgdGgpOworICAgIHJl
dHVybiBlaW5hX3RpbGVfZ3JpZF9zbGljZXJfc2V0dXAoc2xpY2VyLCB4LCB5LCB3aWR0aCwgaGVp
Z2h0LCB0dywgdGgpOwogfQogCiAKLUVpbmFfQm9vbCBld2tfdGlsZV9tYXRyaXhfdXBkYXRlKEV3
a19UaWxlX01hdHJpeCAqdG0sIGNvbnN0IEVpbmFfUmVjdGFuZ2xlICp1cGRhdGUsIGZsb2F0IHpv
b20pCitFaW5hX0Jvb2wgZXdrX3RpbGVfbWF0cml4X3VwZGF0ZShFd2tfVGlsZV9NYXRyaXgqIHRt
LCBjb25zdCBFaW5hX1JlY3RhbmdsZSogdXBkYXRlLCBmbG9hdCB6b29tKQogewotICAgIGNvbnN0
IEVpbmFfVGlsZV9HcmlkX0luZm8gKmluZm87CisgICAgY29uc3QgRWluYV9UaWxlX0dyaWRfSW5m
byogaW5mbzsKICAgICBFaW5hX1RpbGVfR3JpZF9TbGljZXIgc2xpY2VyOwogICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOX1ZBTCh0bSwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk5fVkFMKHVwZGF0ZSwgRUlOQV9GQUxTRSk7CkBAIC01MTMsMjUgKzUxMywy
NSBAQCBFaW5hX0Jvb2wgZXdrX3RpbGVfbWF0cml4X3VwZGF0ZShFd2tfVGlsZV9NYXRyaXggKnRt
LCBjb25zdCBFaW5hX1JlY3RhbmdsZSAqdXBkYQogICAgICAgICBjb2wgPSBpbmZvLT5jb2w7CiAg
ICAgICAgIHJvdyA9IGluZm8tPnJvdzsKIAotICAgICAgICBFd2tfVGlsZSogdCA9IHN0YXRpY19j
YXN0PEV3a19UaWxlKj4oZWluYV9tYXRyaXhzcGFyc2VfZGF0YV9pZHhfZ2V0KHRtLT5tYXRyaXgs
IHJvdywgY29sKSk7Ci0gICAgICAgIGlmICghdCkKKyAgICAgICAgRXdrX1RpbGUqIHRpbGUgPSBz
dGF0aWNfY2FzdDxFd2tfVGlsZSo+KGVpbmFfbWF0cml4c3BhcnNlX2RhdGFfaWR4X2dldCh0bS0+
bWF0cml4LCByb3csIGNvbCkpOworICAgICAgICBpZiAoIXRpbGUpCiAgICAgICAgICAgICBjb250
aW51ZTsKIAotICAgICAgICBpZiAoIXQtPnVwZGF0ZXMgJiYgIXQtPnN0YXRzLmZ1bGxfdXBkYXRl
KQotICAgICAgICAgICAgdG0tPnVwZGF0ZXMgPSBlaW5hX2xpc3RfYXBwZW5kKHRtLT51cGRhdGVz
LCB0KTsKKyAgICAgICAgaWYgKCF0aWxlLT51cGRhdGVzICYmICF0aWxlLT5zdGF0cy5mdWxsX3Vw
ZGF0ZSkKKyAgICAgICAgICAgIHRtLT51cGRhdGVzID0gZWluYV9saXN0X2FwcGVuZCh0bS0+dXBk
YXRlcywgdGlsZSk7CiAgICAgICAgIGlmIChpbmZvLT5mdWxsKQotICAgICAgICAgICAgZXdrX3Rp
bGVfdXBkYXRlX2Z1bGwodCk7CisgICAgICAgICAgICBld2tfdGlsZV91cGRhdGVfZnVsbCh0aWxl
KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgZXdrX3RpbGVfdXBkYXRlX2FyZWEodCwgJmlu
Zm8tPnJlY3QpOworICAgICAgICAgICAgZXdrX3RpbGVfdXBkYXRlX2FyZWEodGlsZSwgJmluZm8t
PnJlY3QpOwogICAgIH0KIAogCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotdm9pZCBld2tf
dGlsZV9tYXRyaXhfdXBkYXRlc19wcm9jZXNzKEV3a19UaWxlX01hdHJpeCAqdG0pCit2b2lkIGV3
a190aWxlX21hdHJpeF91cGRhdGVzX3Byb2Nlc3MoRXdrX1RpbGVfTWF0cml4KiB0bSkKIHsKLSAg
ICBFaW5hX0xpc3QgKmwsICpsX25leHQ7CisgICAgRWluYV9MaXN0KiBsLCAqIGxfbmV4dDsKICAg
ICB2b2lkKiBpdGVtOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHRtKTsKIApAQCAt
NTQ2LDcgKzU0Niw3IEBAIHZvaWQgZXdrX3RpbGVfbWF0cml4X3VwZGF0ZXNfcHJvY2VzcyhFd2tf
VGlsZV9NYXRyaXggKnRtKQogICAgIH0KIH0KIAotdm9pZCBld2tfdGlsZV9tYXRyaXhfdXBkYXRl
c19jbGVhcihFd2tfVGlsZV9NYXRyaXggKnRtKQordm9pZCBld2tfdGlsZV9tYXRyaXhfdXBkYXRl
c19jbGVhcihFd2tfVGlsZV9NYXRyaXgqIHRtKQogewogICAgIHZvaWQqIGl0ZW07CiAgICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk4odG0pOwpAQCAtNTU3LDE1ICs1NTcsMTUgQEAgdm9pZCBl
d2tfdGlsZV9tYXRyaXhfdXBkYXRlc19jbGVhcihFd2tfVGlsZV9NYXRyaXggKnRtKQogfQogCiAv
LyByZW1vdmUgbWUgbGF0ZXIhCi12b2lkIGV3a190aWxlX21hdHJpeF9kYmcoY29uc3QgRXdrX1Rp
bGVfTWF0cml4ICp0bSkKK3ZvaWQgZXdrX3RpbGVfbWF0cml4X2RiZyhjb25zdCBFd2tfVGlsZV9N
YXRyaXgqIHRtKQogewotICAgIEVpbmFfSXRlcmF0b3IgKml0ID0gZWluYV9tYXRyaXhzcGFyc2Vf
aXRlcmF0b3JfY29tcGxldGVfbmV3KHRtLT5tYXRyaXgpOwotICAgIEVpbmFfTWF0cml4c3BhcnNl
X0NlbGwgKmNlbGw7CisgICAgRWluYV9JdGVyYXRvciogaXQgPSBlaW5hX21hdHJpeHNwYXJzZV9p
dGVyYXRvcl9jb21wbGV0ZV9uZXcodG0tPm1hdHJpeCk7CisgICAgRWluYV9NYXRyaXhzcGFyc2Vf
Q2VsbCogY2VsbDsKICAgICBFaW5hX0Jvb2wgbGFzdF9lbXB0eSA9IEVJTkFfRkFMU0U7CiAKICNp
ZmRlZiBERUJVR19NRU1fTEVBS1MKLSAgICBwcmludGYoIkV3a19UaWxlIE1hdHJpeDogdGlsZXNb
KyUiUFJJdTY0IiwtJSJQUkl1NjQiOiUiUFJJdTY0Il0gIgotICAgICAgICAgICAiYnl0ZXNbKyUi
UFJJdTY0IiwtJSJQUkl1NjQiOiUiUFJJdTY0Il1cbiIsCisgICAgcHJpbnRmKCJFd2tfVGlsZSBN
YXRyaXg6IHRpbGVzWyslIiBQUkl1NjQgIiwtJSIgUFJJdTY0ICI6JSIgUFJJdTY0ICJdICIKKyAg
ICAgICAgICAgImJ5dGVzWyslIiBQUkl1NjQgIiwtJSIgUFJJdTY0ICI6JSIgUFJJdTY0ICJdXG4i
LAogICAgICAgICAgICB0bS0+c3RhdHMudGlsZXMuYWxsb2NhdGVkLCB0bS0+c3RhdHMudGlsZXMu
ZnJlZWQsCiAgICAgICAgICAgIHRtLT5zdGF0cy50aWxlcy5hbGxvY2F0ZWQgLSB0bS0+c3RhdHMu
dGlsZXMuZnJlZWQsCiAgICAgICAgICAgIHRtLT5zdGF0cy5ieXRlcy5hbGxvY2F0ZWQsIHRtLT5z
dGF0cy5ieXRlcy5mcmVlZCwKQEAgLTU3OCw4ICs1NzgsOCBAQCB2b2lkIGV3a190aWxlX21hdHJp
eF9kYmcoY29uc3QgRXdrX1RpbGVfTWF0cml4ICp0bSkKICAgICAgICAgdW5zaWduZWQgbG9uZyBy
b3csIGNvbDsKICAgICAgICAgZWluYV9tYXRyaXhzcGFyc2VfY2VsbF9wb3NpdGlvbl9nZXQoY2Vs
bCwgJnJvdywgJmNvbCk7CiAKLSAgICAgICAgRXdrX1RpbGUqIHQgPSBzdGF0aWNfY2FzdDxFd2tf
VGlsZSo+KGVpbmFfbWF0cml4c3BhcnNlX2NlbGxfZGF0YV9nZXQoY2VsbCkpOwotICAgICAgICBp
ZiAoIXQpIHsKKyAgICAgICAgRXdrX1RpbGUqIHRpbGUgPSBzdGF0aWNfY2FzdDxFd2tfVGlsZSo+
KGVpbmFfbWF0cml4c3BhcnNlX2NlbGxfZGF0YV9nZXQoY2VsbCkpOworICAgICAgICBpZiAoIXRp
bGUpIHsKICAgICAgICAgICAgIGlmICghbGFzdF9lbXB0eSkgewogICAgICAgICAgICAgICAgIGxh
c3RfZW1wdHkgPSBFSU5BX1RSVUU7CiAgICAgICAgICAgICAgICAgcHJpbnRmKCJFbXB0eToiKTsK
QEAgLTU5MCw4ICs1OTAsOCBAQCB2b2lkIGV3a190aWxlX21hdHJpeF9kYmcoY29uc3QgRXdrX1Rp
bGVfTWF0cml4ICp0bSkKICAgICAgICAgICAgICAgICBsYXN0X2VtcHR5ID0gRUlOQV9GQUxTRTsK
ICAgICAgICAgICAgICAgICBwcmludGYoIlxuIik7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBwcmludGYoIiUzbHUsJTNsdSAlMTBwOiIsIGNvbCwgcm93LCB0KTsKLSAgICAgICAgICAgIHBy
aW50ZigiIFslM2x1LCUzbHUgKyAlZHglZCBAICUwLjNmXSVjIiwgdC0+Y29sLCB0LT5yb3csIHQt
PncsIHQtPmgsIHQtPnpvb20sIHQtPnZpc2libGUgPyAnKic6ICcgJyk7CisgICAgICAgICAgICBw
cmludGYoIiUzbHUsJTNsdSAlMTBwOiIsIGNvbCwgcm93LCB0aWxlKTsKKyAgICAgICAgICAgIHBy
aW50ZigiIFslM2x1LCUzbHUgKyAlZHglZCBAICUwLjNmXSVjIiwgdGlsZS0+Y29sLCB0aWxlLT5y
b3csIHRpbGUtPndpZHRoLCB0aWxlLT5oZWlnaHQsIHRpbGUtPnpvb20sIHRpbGUtPnZpc2libGUg
PyAnKicgOiAnICcpOwogICAgICAgICAgICAgcHJpbnRmKCJcbiIpOwogICAgICAgICB9CiAgICAg
fQpAQCAtNjExLDcgKzYxMSw3IEBAIHZvaWQgZXdrX3RpbGVfbWF0cml4X2RiZyhjb25zdCBFd2tf
VGlsZV9NYXRyaXggKnRtKQogICoKICAqIEBzZWUgZXdrX3RpbGVfbWF0cml4X3RoYXcoKQogICov
Ci12b2lkIGV3a190aWxlX21hdHJpeF9mcmVlemUoRXdrX1RpbGVfTWF0cml4ICp0bSkKK3ZvaWQg
ZXdrX3RpbGVfbWF0cml4X2ZyZWV6ZShFd2tfVGlsZV9NYXRyaXgqIHRtKQogewogICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOKHRtKTsKICAgICBpZiAoIXRtLT5mcm96ZW4pCkBAIC02MjUs
NyArNjI1LDcgQEAgdm9pZCBld2tfdGlsZV9tYXRyaXhfZnJlZXplKEV3a19UaWxlX01hdHJpeCAq
dG0pCiAgKiBJZiB0aGlzIGlzIHRoZSBsYXN0IGNvdW50ZXJwYXJ0IG9mIGZyZWV6ZSwgdGhlbiBt
YWludGVuYW5jZSB0YXNrcwogICogd2lsbCBydW4gaW1tZWRpYXRlbHkuCiAgKi8KLXZvaWQgZXdr
X3RpbGVfbWF0cml4X3RoYXcoRXdrX1RpbGVfTWF0cml4ICp0bSkKK3ZvaWQgZXdrX3RpbGVfbWF0
cml4X3RoYXcoRXdrX1RpbGVfTWF0cml4KiB0bSkKIHsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTih0bSk7CiAgICAgaWYgKCF0bS0+ZnJvemVuKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX21hdHJpeC5oIGIvU291cmNlL1dlYktpdC9lZmwvZXdr
L2V3a190aWxlZF9tYXRyaXguaAppbmRleCBjNDM3YzM3Li5kM2RjNTE3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX21hdHJpeC5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvZWZsL2V3ay9ld2tfdGlsZWRfbWF0cml4LmgKQEAgLTUyLDcgKzUyLDcgQEAgdm9pZCBld2tf
dGlsZV9tYXRyaXhfdGhhdyhFd2tfVGlsZV9NYXRyaXgqIHRtKTsKIC8vIHJlbW92ZSBtZSEKIHZv
aWQgZXdrX3RpbGVfbWF0cml4X2RiZyhjb25zdCBFd2tfVGlsZV9NYXRyaXgqIHRtKTsKIHZvaWQg
ZXdrX3RpbGVfdW51c2VkX2NhY2hlX2RiZyhjb25zdCBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHR1
Yyk7Ci12b2lkIGV3a190aWxlX2FjY291bnRpbmdfZGJnKHZvaWQpOwordm9pZCBld2tfdGlsZV9h
Y2NvdW50aW5nX2RiZygpOwogCiAKICNlbmRpZiAvLyBld2tfdGlsZWRfbWF0cml4X2gKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfbW9kZWwuY3BwIGIvU291cmNl
L1dlYktpdC9lZmwvZXdrL2V3a190aWxlZF9tb2RlbC5jcHAKaW5kZXggNjE2ODU3Mi4uNzdhM2Ix
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a190aWxlZF9tb2RlbC5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a190aWxlZF9tb2RlbC5jcHAKQEAgLTM2LDcg
KzM2LDcgQEAKICNpbmNsdWRlIDxzeXMvdGltZS5oPgogI2VuZGlmCiAKLSNkZWZpbmUgSURYKGNv
bCwgcm93LCByb3dzcGFuKSAoY29sICsgKHJvdyAqIHJvd3NwYW4pKQorI2RlZmluZSBJRFgoY29s
LCByb3csIHJvd3NwYW4pIChjb2wgKyAocm93aWR0aCAqIHJvd3NwYW4pKQogCiAjaWZkZWYgREVC
VUdfTUVNX0xFQUtTCiBzdGF0aWMgdWludDY0X3QgdGlsZXNfYWxsb2NhdGVkID0gMDsKQEAgLTUz
LDE1ICs1MywxNSBAQCBzdHJ1Y3QgdGlsZV9hY2NvdW50IHsKIH07CiAKIHN0YXRpYyBzaXplX3Qg
YWNjb3VudGluZ19sZW4gPSAwOwotc3RhdGljIHN0cnVjdCB0aWxlX2FjY291bnQgKmFjY291bnRp
bmcgPSAwOworc3RhdGljIHN0cnVjdCB0aWxlX2FjY291bnQqIGFjY291bnRpbmcgPSAwOwogCi1z
dGF0aWMgaW5saW5lIHN0cnVjdCB0aWxlX2FjY291bnQgKl9ld2tfdGlsZV9hY2NvdW50X2dldChj
b25zdCBFd2tfVGlsZSAqdCkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHRpbGVfYWNjb3VudCogX2V3
a190aWxlX2FjY291bnRfZ2V0KGNvbnN0IEV3a19UaWxlKiB0aWxlKQogewotICAgIHN0cnVjdCB0
aWxlX2FjY291bnQgKmFjYzsKKyAgICBzdHJ1Y3QgdGlsZV9hY2NvdW50KiBhY2M7CiAgICAgc2l6
ZV90IGk7CiAKICAgICBmb3IgKGkgPSAwOyBpIDwgYWNjb3VudGluZ19sZW47IGkrKykgewotICAg
ICAgICBpZiAoYWNjb3VudGluZ1tpXS5zaXplID09IHQtPncpCisgICAgICAgIGlmIChhY2NvdW50
aW5nW2ldLnNpemUgPT0gdGlsZS0+d2lkdGgpCiAgICAgICAgICAgICByZXR1cm4gYWNjb3VudGlu
ZyArIGk7CiAgICAgfQogCkBAIC02OSw3ICs2OSw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHRp
bGVfYWNjb3VudCAqX2V3a190aWxlX2FjY291bnRfZ2V0KGNvbnN0IEV3a19UaWxlICp0KQogICAg
IFJFQUxMT0NfT1JfT09NX1JFVChhY2NvdW50aW5nLCBpLCAwKTsKIAogICAgIGFjYyA9IGFjY291
bnRpbmcgKyBhY2NvdW50aW5nX2xlbjsKLSAgICBhY2MtPnNpemUgPSB0LT53OworICAgIGFjYy0+
c2l6ZSA9IHRpbGUtPndpZHRoOwogICAgIGFjYy0+dGlsZXMuYWxsb2NhdGVkID0gMDsKICAgICBh
Y2MtPnRpbGVzLmZyZWVkID0gMDsKICAgICBhY2MtPmJ5dGVzLmFsbG9jYXRlZCA9IDA7CkBAIC04
MCw0MCArODAsNDAgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgdGlsZV9hY2NvdW50ICpfZXdrX3Rp
bGVfYWNjb3VudF9nZXQoY29uc3QgRXdrX1RpbGUgKnQpCiAgICAgcmV0dXJuIGFjYzsKIH0KIAot
c3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZV9hY2NvdW50X2FsbG9jYXRlZChjb25zdCBFd2tf
VGlsZSAqdCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVfYWNjb3VudF9hbGxvY2F0ZWQo
Y29uc3QgRXdrX1RpbGUqIHRpbGUpCiB7Ci0gICAgc3RydWN0IHRpbGVfYWNjb3VudCAqYWNjID0g
X2V3a190aWxlX2FjY291bnRfZ2V0KHQpOworICAgIHN0cnVjdCB0aWxlX2FjY291bnQqIGFjYyA9
IF9ld2tfdGlsZV9hY2NvdW50X2dldCh0aWxlKTsKICAgICBpZiAoIWFjYykKICAgICAgICAgcmV0
dXJuOwotICAgIGFjYy0+Ynl0ZXMuYWxsb2NhdGVkICs9IHQtPmJ5dGVzOworICAgIGFjYy0+Ynl0
ZXMuYWxsb2NhdGVkICs9IHRpbGUtPmJ5dGVzOwogICAgIGFjYy0+dGlsZXMuYWxsb2NhdGVkKys7
CiAKLSAgICBieXRlc19hbGxvY2F0ZWQgKz0gdC0+Ynl0ZXM7CisgICAgYnl0ZXNfYWxsb2NhdGVk
ICs9IHRpbGUtPmJ5dGVzOwogICAgIHRpbGVzX2FsbG9jYXRlZCsrOwogfQogCi1zdGF0aWMgaW5s
aW5lIHZvaWQgX2V3a190aWxlX2FjY291bnRfZnJlZWQoY29uc3QgRXdrX1RpbGUgKnQpCitzdGF0
aWMgaW5saW5lIHZvaWQgX2V3a190aWxlX2FjY291bnRfZnJlZWQoY29uc3QgRXdrX1RpbGUqIHRp
bGUpCiB7Ci0gICAgc3RydWN0IHRpbGVfYWNjb3VudCAqYWNjID0gX2V3a190aWxlX2FjY291bnRf
Z2V0KHQpOworICAgIHN0cnVjdCB0aWxlX2FjY291bnQqIGFjYyA9IF9ld2tfdGlsZV9hY2NvdW50
X2dldCh0aWxlKTsKICAgICBpZiAoIWFjYykKICAgICAgICAgcmV0dXJuOwogCi0gICAgYWNjLT5i
eXRlcy5mcmVlZCArPSB0LT5ieXRlczsKKyAgICBhY2MtPmJ5dGVzLmZyZWVkICs9IHRpbGUtPmJ5
dGVzOwogICAgIGFjYy0+dGlsZXMuZnJlZWQrKzsKIAotICAgIGJ5dGVzX2ZyZWVkICs9IHQtPmJ5
dGVzOworICAgIGJ5dGVzX2ZyZWVkICs9IHRpbGUtPmJ5dGVzOwogICAgIHRpbGVzX2ZyZWVkKys7
CiB9CiAKLXZvaWQgZXdrX3RpbGVfYWNjb3VudGluZ19kYmcodm9pZCkKK3ZvaWQgZXdrX3RpbGVf
YWNjb3VudGluZ19kYmcoKQogewotICAgIHN0cnVjdCB0aWxlX2FjY291bnQgKmFjYzsKLSAgICBz
dHJ1Y3QgdGlsZV9hY2NvdW50ICphY2NfZW5kOworICAgIHN0cnVjdCB0aWxlX2FjY291bnQqIGFj
YzsKKyAgICBzdHJ1Y3QgdGlsZV9hY2NvdW50KiBhY2NfZW5kOwogCi0gICAgcHJpbnRmKCJUSUxF
IEJBTEFOQ0U6IHRpbGVzWyslIlBSSXU2NCIsLSUiUFJJdTY0IjolIlBSSXU2NCJdICIKLSAgICAg
ICAgICAgImJ5dGVzWyslIlBSSXU2NCIsLSUiUFJJdTY0IjolIlBSSXU2NCJdXG4iLAotICAgICAg
ICAgICAgdGlsZXNfYWxsb2NhdGVkLCB0aWxlc19mcmVlZCwgdGlsZXNfYWxsb2NhdGVkIC0gdGls
ZXNfZnJlZWQsCi0gICAgICAgICAgICBieXRlc19hbGxvY2F0ZWQsIGJ5dGVzX2ZyZWVkLCBieXRl
c19hbGxvY2F0ZWQgLSBieXRlc19mcmVlZCk7CisgICAgcHJpbnRmKCJUSUxFIEJBTEFOQ0U6IHRp
bGVzWyslIiBQUkl1NjQgIiwtJSIgUFJJdTY0ICI6JSIgUFJJdTY0ICJdICIKKyAgICAgICAgICAg
ImJ5dGVzWyslIiBQUkl1NjQgIiwtJSIgUFJJdTY0ICI6JSIgUFJJdTY0ICJdXG4iLAorICAgICAg
ICAgICB0aWxlc19hbGxvY2F0ZWQsIHRpbGVzX2ZyZWVkLCB0aWxlc19hbGxvY2F0ZWQgLSB0aWxl
c19mcmVlZCwKKyAgICAgICAgICAgYnl0ZXNfYWxsb2NhdGVkLCBieXRlc19mcmVlZCwgYnl0ZXNf
YWxsb2NhdGVkIC0gYnl0ZXNfZnJlZWQpOwogCiAgICAgaWYgKCFhY2NvdW50aW5nX2xlbikKICAg
ICAgICAgcmV0dXJuOwpAQCAtMTI3LDggKzEyNyw4IEBAIHZvaWQgZXdrX3RpbGVfYWNjb3VudGlu
Z19kYmcodm9pZCkKICAgICAgICAgdGlsZXMgPSBhY2MtPnRpbGVzLmFsbG9jYXRlZCAtIGFjYy0+
dGlsZXMuZnJlZWQ7CiAgICAgICAgIGJ5dGVzID0gYWNjLT5ieXRlcy5hbGxvY2F0ZWQgLSBhY2Mt
PmJ5dGVzLmZyZWVkOwogCi0gICAgICAgIHByaW50ZigiICAgJTRkOiB0aWxlc1srJTQiUFJJdTY0
IiwtJTQiUFJJdTY0IjolNCJQUkl1NjQiXSAiCi0gICAgICAgICAgICAgICAiYnl0ZXNbKyU4IlBS
SXU2NCIsLSU4IlBSSXU2NCI6JTgiUFJJdTY0Il0lc1xuIiwKKyAgICAgICAgcHJpbnRmKCIgICAl
NGQ6IHRpbGVzWyslNCIgUFJJdTY0ICIsLSU0IiBQUkl1NjQgIjolNCIgUFJJdTY0ICJdICIKKyAg
ICAgICAgICAgICAgICJieXRlc1srJTgiIFBSSXU2NCAiLC0lOCIgUFJJdTY0ICI6JTgiIFBSSXU2
NCAiXSVzXG4iLAogICAgICAgICAgICAgICAgYWNjLT5zaXplLAogICAgICAgICAgICAgICAgYWNj
LT50aWxlcy5hbGxvY2F0ZWQsIGFjYy0+dGlsZXMuZnJlZWQsIHRpbGVzLAogICAgICAgICAgICAg
ICAgYWNjLT5ieXRlcy5hbGxvY2F0ZWQsIGFjYy0+Ynl0ZXMuZnJlZWQsIGJ5dGVzLApAQCAtMTM4
LDI1ICsxMzgsMjUgQEAgdm9pZCBld2tfdGlsZV9hY2NvdW50aW5nX2RiZyh2b2lkKQogfQogI2Vs
c2UKIAotc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZV9hY2NvdW50X2FsbG9jYXRlZChjb25z
dCBFd2tfVGlsZSAqdCkgeyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlX2FjY291bnRf
ZnJlZWQoY29uc3QgRXdrX1RpbGUgKnQpIHsgfQorc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGls
ZV9hY2NvdW50X2FsbG9jYXRlZChjb25zdCBFd2tfVGlsZSogdGlsZSkgeyB9CitzdGF0aWMgaW5s
aW5lIHZvaWQgX2V3a190aWxlX2FjY291bnRfZnJlZWQoY29uc3QgRXdrX1RpbGUqIHRpbGUpIHsg
fQogCi12b2lkIGV3a190aWxlX2FjY291bnRpbmdfZGJnKHZvaWQpCit2b2lkIGV3a190aWxlX2Fj
Y291bnRpbmdfZGJnKCkKIHsKICAgICBwcmludGYoImNvbXBpbGUgd2Via2l0IHdpdGggREVCVUdf
TUVNX0xFQUtTIGRlZmluZWQhXG4iKTsKIH0KICNlbmRpZgogCi1zdGF0aWMgaW5saW5lIHZvaWQg
X2V3a190aWxlX3BhaW50X3JnYjg4OChFd2tfVGlsZSAqdCwgdWludDhfdCByLCB1aW50OF90IGcs
IHVpbnQ4X3QgYikKK3N0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVfcGFpbnRfcmdiODg4KEV3
a19UaWxlKiB0aWxlLCB1aW50OF90IHIsIHVpbnQ4X3QgZywgdWludDhfdCBiKQogewotICAgIHVp
bnQzMl90ICpkc3QzMiwgKmRzdDMyX2VuZCwgYzE7Ci0gICAgdWludDY0X3QgKmRzdDY0LCAqZHN0
NjRfZW5kLCBjMjsKKyAgICB1aW50MzJfdCogZHN0MzIsICogZHN0MzJfZW5kLCBjMTsKKyAgICB1
aW50NjRfdCogZHN0NjQsICogZHN0NjRfZW5kLCBjMjsKIAogICAgIGMxID0gMHhmZjAwMDAwMCB8
ICgodWludDMyX3QpciA8PCAxNikgfCAoKHVpbnQzMl90KWcgPDwgOCkgfCBiOwogICAgIGMyID0g
KCh1aW50NjRfdCljMSA8PCAzMikgfCBjMTsKIAotICAgIGRzdDY0ID0gKHVpbnQ2NF90ICopdC0+
cGl4ZWxzOwotICAgIGRzdDY0X2VuZCA9IGRzdDY0ICsgKCh0LT5ieXRlcyAvIDgpICYgfjcpOwor
ICAgIGRzdDY0ID0gKHVpbnQ2NF90Kil0aWxlLT5waXhlbHM7CisgICAgZHN0NjRfZW5kID0gZHN0
NjQgKyAoKHRpbGUtPmJ5dGVzIC8gOCkgJiB+Nyk7CiAgICAgZm9yICg7IGRzdDY0IDwgZHN0NjRf
ZW5kOyBkc3Q2NCArPSA4KSB7CiAgICAgICAgIC8qIFRPRE86IEFSTSBhZGQgcGxkIG9yIE5FT04g
aW5zdHJ1Y3Rpb25zICovCiAgICAgICAgIGRzdDY0WzBdID0gYzI7CkBAIC0xNjksMTYgKzE2OSwx
NiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlX3BhaW50X3JnYjg4OChFd2tfVGlsZSAq
dCwgdWludDhfdCByLCB1aW50OF90IGcsIHVpbgogICAgICAgICBkc3Q2NFs3XSA9IGMyOwogICAg
IH0KIAotICAgIGRzdDMyID0gKHVpbnQzMl90ICopZHN0NjRfZW5kOwotICAgIGRzdDMyX2VuZCA9
ICh1aW50MzJfdCAqKSh0LT5waXhlbHMgKyB0LT5ieXRlcyk7CisgICAgZHN0MzIgPSAodWludDMy
X3QqKWRzdDY0X2VuZDsKKyAgICBkc3QzMl9lbmQgPSAodWludDMyX3QqKSh0aWxlLT5waXhlbHMg
KyB0aWxlLT5ieXRlcyk7CiAgICAgZm9yICg7IGRzdDMyIDwgZHN0MzJfZW5kOyBkc3QzMisrKQog
ICAgICAgICAqZHN0MzIgPSBjMTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZV9w
YWludF9yZ2I1NjUoRXdrX1RpbGUgKnQsIHVpbnQ4X3QgciwgdWludDhfdCBnLCB1aW50OF90IGIp
CitzdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlX3BhaW50X3JnYjU2NShFd2tfVGlsZSogdGls
ZSwgdWludDhfdCByLCB1aW50OF90IGcsIHVpbnQ4X3QgYikKIHsKLSAgICB1aW50MTZfdCAqZHN0
MTYsICpkc3QxNl9lbmQsIGMxOwotICAgIHVpbnQ2NF90ICpkc3Q2NCwgKmRzdDY0X2VuZCwgYzI7
CisgICAgdWludDE2X3QqIGRzdDE2LCAqIGRzdDE2X2VuZCwgYzE7CisgICAgdWludDY0X3QqIGRz
dDY0LCAqIGRzdDY0X2VuZCwgYzI7CiAKICAgICBjMSA9ICgoKChyID4+IDMpICYgMHgxZikgPDwg
MTEpIHwKICAgICAgICAgICAoKChnID4+IDIpICYgMHgzZikgPDwgNSkgfApAQCAtMTg3LDggKzE4
Nyw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVfcGFpbnRfcmdiNTY1KEV3a19UaWxl
ICp0LCB1aW50OF90IHIsIHVpbnQ4X3QgZywgdWluCiAgICAgYzIgPSAoKCh1aW50NjRfdCljMSA8
PCA0OCkgfCAoKHVpbnQ2NF90KWMxIDw8IDMyKSB8CiAgICAgICAgICAgKCh1aW50NjRfdCljMSA8
PCAxNikgfCBjMSk7CiAKLSAgICBkc3Q2NCA9ICh1aW50NjRfdCAqKXQtPnBpeGVsczsKLSAgICBk
c3Q2NF9lbmQgPSBkc3Q2NCArICgodC0+Ynl0ZXMgLyA4KSAmIH43KTsKKyAgICBkc3Q2NCA9ICh1
aW50NjRfdCopdGlsZS0+cGl4ZWxzOworICAgIGRzdDY0X2VuZCA9IGRzdDY0ICsgKCh0aWxlLT5i
eXRlcyAvIDgpICYgfjcpOwogICAgIGZvciAoOyBkc3Q2NCA8IGRzdDY0X2VuZDsgZHN0NjQgKz0g
OCkgewogICAgICAgICAvKiBUT0RPOiBBUk0gYWRkIHBsZCBvciBORU9OIGluc3RydWN0aW9ucyAq
LwogICAgICAgICBkc3Q2NFswXSA9IGMyOwpAQCAtMjAxLDIwICsyMDEsMjAgQEAgc3RhdGljIGlu
bGluZSB2b2lkIF9ld2tfdGlsZV9wYWludF9yZ2I1NjUoRXdrX1RpbGUgKnQsIHVpbnQ4X3Qgciwg
dWludDhfdCBnLCB1aW4KICAgICAgICAgZHN0NjRbN10gPSBjMjsKICAgICB9CiAKLSAgICBkc3Qx
NiA9ICh1aW50MTZfdCAqKWRzdDE2X2VuZDsKLSAgICBkc3QxNl9lbmQgPSAodWludDE2X3QgKiko
dC0+cGl4ZWxzICsgdC0+Ynl0ZXMpOworICAgIGRzdDE2ID0gKHVpbnQxNl90Kilkc3QxNl9lbmQ7
CisgICAgZHN0MTZfZW5kID0gKHVpbnQxNl90KikodGlsZS0+cGl4ZWxzICsgdGlsZS0+Ynl0ZXMp
OwogICAgIGZvciAoOyBkc3QxNiA8IGRzdDE2X2VuZDsgZHN0MTYrKykKICAgICAgICAgKmRzdDE2
ID0gYzE7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVfcGFpbnQoRXdrX1RpbGUg
KnQsIHVpbnQ4X3QgciwgdWludDhfdCBnLCB1aW50OF90IGIpCitzdGF0aWMgaW5saW5lIHZvaWQg
X2V3a190aWxlX3BhaW50KEV3a19UaWxlKiB0aWxlLCB1aW50OF90IHJlZCwgdWludDhfdCBncmVl
biwgdWludDhfdCBibHVlKQogewotICAgIGlmICh0LT5jc3BhY2UgPT0gRVZBU19DT0xPUlNQQUNF
X0FSR0I4ODg4KQotICAgICAgICBfZXdrX3RpbGVfcGFpbnRfcmdiODg4KHQsIHIsIGcsIGIpOwot
ICAgIGVsc2UgaWYgKHQtPmNzcGFjZSA9PSBFVkFTX0NPTE9SU1BBQ0VfUkdCNTY1X0E1UCkKLSAg
ICAgICAgX2V3a190aWxlX3BhaW50X3JnYjU2NSh0LCByLCBnLCBiKTsKKyAgICBpZiAodGlsZS0+
Y3NwYWNlID09IEVWQVNfQ09MT1JTUEFDRV9BUkdCODg4OCkKKyAgICAgICAgX2V3a190aWxlX3Bh
aW50X3JnYjg4OCh0aWxlLCByZWQsIGdyZWVuLCBibHVlKTsKKyAgICBlbHNlIGlmICh0aWxlLT5j
c3BhY2UgPT0gRVZBU19DT0xPUlNQQUNFX1JHQjU2NV9BNVApCisgICAgICAgIF9ld2tfdGlsZV9w
YWludF9yZ2I1NjUodGlsZSwgcmVkLCBncmVlbiwgYmx1ZSk7CiAgICAgZWxzZQotICAgICAgICBF
UlIoInVua25vd24gY29sb3Igc3BhY2U6ICVkIiwgdC0+Y3NwYWNlKTsKKyAgICAgICAgRVJSKCJ1
bmtub3duIGNvbG9yIHNwYWNlOiAlZCIsIHRpbGUtPmNzcGFjZSk7CiB9CiAKIC8qKgpAQCAtMjMy
LDE1NCArMjMyLDE1NCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlX3BhaW50KEV3a19U
aWxlICp0LCB1aW50OF90IHIsIHVpbnQ4X3QgZywgdWludDhfdCBiKQogICogZXdrX3RpbGVfdXBk
YXRlc19jbGVhcigpIHRvIGNoYW5nZSBAYyBzdGF0cy5taXNzZXMsCiAgKiBAYyBzdGF0cy5mdWxs
X3VwZGF0ZSBhbmQgQGMgdXBkYXRlcy4KICAqLwotRXdrX1RpbGUgKmV3a190aWxlX25ldyhFdmFz
ICpldmFzLCBFdmFzX0Nvb3JkIHcsIEV2YXNfQ29vcmQgaCwgZmxvYXQgem9vbSwgRXZhc19Db2xv
cnNwYWNlIGNzcGFjZSkKK0V3a19UaWxlKiBld2tfdGlsZV9uZXcoRXZhcyogZXZhcywgRXZhc19D
b29yZCB3aWR0aCwgRXZhc19Db29yZCBoZWlnaHQsIGZsb2F0IHpvb20sIEV2YXNfQ29sb3JzcGFj
ZSBjc3BhY2UpCiB7Ci0gICAgRXZhc19Db29yZCAqZWM7Ci0gICAgRXZhc19Db2xvcnNwYWNlICpl
Y3M7Ci0gICAgZmxvYXQgKmY7Ci0gICAgc2l6ZV90ICpzOwotICAgIEV3a19UaWxlICp0OworICAg
IEV2YXNfQ29vcmQqIGVjOworICAgIEV2YXNfQ29sb3JzcGFjZSogZWNzOworICAgIGZsb2F0KiBm
OworICAgIHNpemVfdCogczsKKyAgICBFd2tfVGlsZSogdGlsZTsKICAgICB1bnNpZ25lZCBpbnQg
YXJlYTsKICAgICBzaXplX3QgYnl0ZXM7CiAgICAgY2Fpcm9fZm9ybWF0X3QgZm9ybWF0OwogICAg
IGNhaXJvX3N0YXR1c190IHN0YXR1czsKICAgICBpbnQgc3RyaWRlOwotICAgIEVjb3JlX0V2YXMg
KmVlOwotICAgIGNvbnN0IGNoYXIgKmVuZ2luZTsKKyAgICBFY29yZV9FdmFzKiBlZTsKKyAgICBj
b25zdCBjaGFyKiBlbmdpbmU7CiAKLSAgICBhcmVhID0gdyAqIGg7CisgICAgYXJlYSA9IHdpZHRo
ICogaGVpZ2h0OwogCiAgICAgaWYgKGNzcGFjZSA9PSBFVkFTX0NPTE9SU1BBQ0VfQVJHQjg4ODgp
IHsKICAgICAgICAgYnl0ZXMgPSBhcmVhICogNDsKLSAgICAgICAgc3RyaWRlID0gdyAqIDQ7Cisg
ICAgICAgIHN0cmlkZSA9IHdpZHRoICogNDsKICAgICAgICAgZm9ybWF0ID0gQ0FJUk9fRk9STUFU
X0FSR0IzMjsKICAgICB9IGVsc2UgaWYgKGNzcGFjZSA9PSBFVkFTX0NPTE9SU1BBQ0VfUkdCNTY1
X0E1UCkgewogICAgICAgICBieXRlcyA9IGFyZWEgKiAyOwotICAgICAgICBzdHJpZGUgPSB3ICog
MjsKKyAgICAgICAgc3RyaWRlID0gd2lkdGggKiAyOwogICAgICAgICBmb3JtYXQgPSBDQUlST19G
T1JNQVRfUkdCMTZfNTY1OwogICAgIH0gZWxzZSB7CiAgICAgICAgIEVSUigidW5rbm93biBjb2xv
ciBzcGFjZTogJWQiLCBjc3BhY2UpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBE
QkcoInNpemU6ICVkeCVkICglZCksIHpvb206ICVmLCBjc3BhY2U9JWQiLCB3LCBoLCBhcmVhLCAo
ZG91YmxlKXpvb20sIGNzcGFjZSk7CisgICAgREJHKCJzaXplOiAlZHglZCAoJWQpLCB6b29tOiAl
ZiwgY3NwYWNlPSVkIiwgd2lkdGgsIGhlaWdodCwgYXJlYSwgKGRvdWJsZSl6b29tLCBjc3BhY2Up
OwogCi0gICAgdCA9IHN0YXRpY19jYXN0PEV3a19UaWxlKj4obWFsbG9jKHNpemVvZihFd2tfVGls
ZSkpKTsKLSAgICBpZiAoIXQpCisgICAgdGlsZSA9IHN0YXRpY19jYXN0PEV3a19UaWxlKj4obWFs
bG9jKHNpemVvZihFd2tfVGlsZSkpKTsKKyAgICBpZiAoIXRpbGUpCiAgICAgICAgIHJldHVybiAw
OwogCi0gICAgdC0+aW1hZ2UgPSBldmFzX29iamVjdF9pbWFnZV9hZGQoZXZhcyk7CisgICAgdGls
ZS0+aW1hZ2UgPSBldmFzX29iamVjdF9pbWFnZV9hZGQoZXZhcyk7CiAKICAgICBlZSA9IGVjb3Jl
X2V2YXNfZWNvcmVfZXZhc19nZXQoZXZhcyk7CiAgICAgZW5naW5lID0gZWNvcmVfZXZhc19lbmdp
bmVfbmFtZV9nZXQoZWUpOwogICAgIGlmIChlbmdpbmUgJiYgIXN0cmNtcChlbmdpbmUsICJvcGVu
Z2xfeDExIikpCi0gICAgICAgIGV2YXNfb2JqZWN0X2ltYWdlX2NvbnRlbnRfaGludF9zZXQodC0+
aW1hZ2UsIEVWQVNfSU1BR0VfQ09OVEVOVF9ISU5UX0RZTkFNSUMpOworICAgICAgICBldmFzX29i
amVjdF9pbWFnZV9jb250ZW50X2hpbnRfc2V0KHRpbGUtPmltYWdlLCBFVkFTX0lNQUdFX0NPTlRF
TlRfSElOVF9EWU5BTUlDKTsKIAotICAgIHQtPnZpc2libGUgPSAwOwotICAgIHQtPnVwZGF0ZXMg
PSAwOworICAgIHRpbGUtPnZpc2libGUgPSAwOworICAgIHRpbGUtPnVwZGF0ZXMgPSAwOwogCi0g
ICAgbWVtc2V0KCZ0LT5zdGF0cywgMCwgc2l6ZW9mKEV3a19UaWxlX1N0YXRzKSk7Ci0gICAgdC0+
c3RhdHMuYXJlYSA9IGFyZWE7CisgICAgbWVtc2V0KCZ0aWxlLT5zdGF0cywgMCwgc2l6ZW9mKEV3
a19UaWxlX1N0YXRzKSk7CisgICAgdGlsZS0+c3RhdHMuYXJlYSA9IGFyZWE7CiAKICAgICAvKiB1
Z2x5LCBidXQgbGV0J3MgYXZvaWQgYXQgYWxsIGNvc3RzIGhhdmluZyB1c2VycyB0byBtb2RpZnkg
dGhvc2UgKi8KLSAgICBlYyA9IChFdmFzX0Nvb3JkICopJnQtPnc7Ci0gICAgKmVjID0gdzsKKyAg
ICBlYyA9IChFdmFzX0Nvb3JkKikmdGlsZS0+d2lkdGg7CisgICAgKmVjID0gd2lkdGg7CiAKLSAg
ICBlYyA9IChFdmFzX0Nvb3JkICopJnQtPmg7Ci0gICAgKmVjID0gaDsKKyAgICBlYyA9IChFdmFz
X0Nvb3JkKikmdGlsZS0+aGVpZ2h0OworICAgICplYyA9IGhlaWdodDsKIAotICAgIGVjcyA9IChF
dmFzX0NvbG9yc3BhY2UgKikmdC0+Y3NwYWNlOworICAgIGVjcyA9IChFdmFzX0NvbG9yc3BhY2Uq
KSZ0aWxlLT5jc3BhY2U7CiAgICAgKmVjcyA9IGNzcGFjZTsKIAotICAgIGYgPSAoZmxvYXQgKikm
dC0+em9vbTsKKyAgICBmID0gKGZsb2F0KikmdGlsZS0+em9vbTsKICAgICAqZiA9IHpvb207CiAK
LSAgICBzID0gKHNpemVfdCAqKSZ0LT5ieXRlczsKKyAgICBzID0gKHNpemVfdCopJnRpbGUtPmJ5
dGVzOwogICAgICpzID0gYnl0ZXM7CiAKLSAgICBldmFzX29iamVjdF9pbWFnZV9zaXplX3NldCh0
LT5pbWFnZSwgdC0+dywgdC0+aCk7Ci0gICAgZXZhc19vYmplY3RfaW1hZ2VfY29sb3JzcGFjZV9z
ZXQodC0+aW1hZ2UsIHQtPmNzcGFjZSk7Ci0gICAgdC0+cGl4ZWxzID0gc3RhdGljX2Nhc3Q8dWlu
dDhfdCo+KGV2YXNfb2JqZWN0X2ltYWdlX2RhdGFfZ2V0KHQtPmltYWdlLCBFSU5BX1RSVUUpKTsK
LSAgICB0LT5zdXJmYWNlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEodC0+
cGl4ZWxzLCBmb3JtYXQsIHcsIGgsIHN0cmlkZSk7Ci0gICAgc3RhdHVzID0gY2Fpcm9fc3VyZmFj
ZV9zdGF0dXModC0+c3VyZmFjZSk7CisgICAgZXZhc19vYmplY3RfaW1hZ2Vfc2l6ZV9zZXQodGls
ZS0+aW1hZ2UsIHRpbGUtPndpZHRoLCB0aWxlLT5oZWlnaHQpOworICAgIGV2YXNfb2JqZWN0X2lt
YWdlX2NvbG9yc3BhY2Vfc2V0KHRpbGUtPmltYWdlLCB0aWxlLT5jc3BhY2UpOworICAgIHRpbGUt
PnBpeGVscyA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihldmFzX29iamVjdF9pbWFnZV9kYXRhX2dl
dCh0aWxlLT5pbWFnZSwgRUlOQV9UUlVFKSk7CisgICAgdGlsZS0+c3VyZmFjZSA9IGNhaXJvX2lt
YWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKHRpbGUtPnBpeGVscywgZm9ybWF0LCB3aWR0aCwg
aGVpZ2h0LCBzdHJpZGUpOworICAgIHN0YXR1cyA9IGNhaXJvX3N1cmZhY2Vfc3RhdHVzKHRpbGUt
PnN1cmZhY2UpOwogICAgIGlmIChzdGF0dXMgIT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1MpIHsKICAg
ICAgICAgRVJSKCJmYWlsZWQgdG8gY3JlYXRlIGNhaXJvIHN1cmZhY2U6ICVzIiwKICAgICAgICAg
ICAgIGNhaXJvX3N0YXR1c190b19zdHJpbmcoc3RhdHVzKSk7Ci0gICAgICAgIGZyZWUodCk7Cisg
ICAgICAgIGZyZWUodGlsZSk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIHQtPmNh
aXJvID0gY2Fpcm9fY3JlYXRlKHQtPnN1cmZhY2UpOwotICAgIHN0YXR1cyA9IGNhaXJvX3N0YXR1
cyh0LT5jYWlybyk7CisgICAgdGlsZS0+Y2Fpcm8gPSBjYWlyb19jcmVhdGUodGlsZS0+c3VyZmFj
ZSk7CisgICAgc3RhdHVzID0gY2Fpcm9fc3RhdHVzKHRpbGUtPmNhaXJvKTsKICAgICBpZiAoc3Rh
dHVzICE9IENBSVJPX1NUQVRVU19TVUNDRVNTKSB7CiAgICAgICAgIEVSUigiZmFpbGVkIHRvIGNy
ZWF0ZSBjYWlybzogJXMiLCBjYWlyb19zdGF0dXNfdG9fc3RyaW5nKHN0YXR1cykpOwotICAgICAg
ICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3kodC0+c3VyZmFjZSk7Ci0gICAgICAgIGV2YXNfb2JqZWN0
X2RlbCh0LT5pbWFnZSk7Ci0gICAgICAgIGZyZWUodCk7CisgICAgICAgIGNhaXJvX3N1cmZhY2Vf
ZGVzdHJveSh0aWxlLT5zdXJmYWNlKTsKKyAgICAgICAgZXZhc19vYmplY3RfZGVsKHRpbGUtPmlt
YWdlKTsKKyAgICAgICAgZnJlZSh0aWxlKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0g
ICAgX2V3a190aWxlX2FjY291bnRfYWxsb2NhdGVkKHQpOworICAgIF9ld2tfdGlsZV9hY2NvdW50
X2FsbG9jYXRlZCh0aWxlKTsKIAotICAgIHJldHVybiB0OworICAgIHJldHVybiB0aWxlOwogfQog
CiAvKioKICAqIEZyZWUgdGlsZSBtZW1vcnkuCiAgKi8KLXZvaWQgZXdrX3RpbGVfZnJlZShFd2tf
VGlsZSAqdCkKK3ZvaWQgZXdrX3RpbGVfZnJlZShFd2tfVGlsZSogdGlsZSkKIHsKLSAgICBfZXdr
X3RpbGVfYWNjb3VudF9mcmVlZCh0KTsKKyAgICBfZXdrX3RpbGVfYWNjb3VudF9mcmVlZCh0aWxl
KTsKIAotICAgIGlmICh0LT51cGRhdGVzKQotICAgICAgICBlaW5hX3RpbGVyX2ZyZWUodC0+dXBk
YXRlcyk7CisgICAgaWYgKHRpbGUtPnVwZGF0ZXMpCisgICAgICAgIGVpbmFfdGlsZXJfZnJlZSh0
aWxlLT51cGRhdGVzKTsKIAotICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveSh0LT5zdXJmYWNlKTsK
LSAgICBjYWlyb19kZXN0cm95KHQtPmNhaXJvKTsKLSAgICBldmFzX29iamVjdF9kZWwodC0+aW1h
Z2UpOwotICAgIGZyZWUodCk7CisgICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95KHRpbGUtPnN1cmZh
Y2UpOworICAgIGNhaXJvX2Rlc3Ryb3kodGlsZS0+Y2Fpcm8pOworICAgIGV2YXNfb2JqZWN0X2Rl
bCh0aWxlLT5pbWFnZSk7CisgICAgZnJlZSh0aWxlKTsKIH0KIAogLyoqCiAgKiBNYWtlIHRoZSB0
aWxlIHZpc2libGUsIGluY3JlbWVudGluZyBpdHMgY291bnRlci4KICAqLwotdm9pZCBld2tfdGls
ZV9zaG93KEV3a19UaWxlICp0KQordm9pZCBld2tfdGlsZV9zaG93KEV3a19UaWxlKiB0aWxlKQog
ewotICAgIHQtPnZpc2libGUrKzsKLSAgICBldmFzX29iamVjdF9zaG93KHQtPmltYWdlKTsKKyAg
ICB0aWxlLT52aXNpYmxlKys7CisgICAgZXZhc19vYmplY3Rfc2hvdyh0aWxlLT5pbWFnZSk7CiB9
CiAKIC8qKgogICogRGVjcmVtZW50IHRoZSB2aXNpYmlsaXR5IGNvdW50ZXIsIG1ha2luZyBpdCBp
bnZpc2libGUgaWYgbmVjZXNzYXJ5LgogICovCi12b2lkIGV3a190aWxlX2hpZGUoRXdrX1RpbGUg
KnQpCit2b2lkIGV3a190aWxlX2hpZGUoRXdrX1RpbGUqIHRpbGUpCiB7Ci0gICAgdC0+dmlzaWJs
ZS0tOwotICAgIGlmICghdC0+dmlzaWJsZSkKLSAgICAgICAgZXZhc19vYmplY3RfaGlkZSh0LT5p
bWFnZSk7CisgICAgdGlsZS0+dmlzaWJsZS0tOworICAgIGlmICghdGlsZS0+dmlzaWJsZSkKKyAg
ICAgICAgZXZhc19vYmplY3RfaGlkZSh0aWxlLT5pbWFnZSk7CiB9CiAKIC8qKgogICogUmV0dXJu
cyBFSU5BX1RSVUUgaWYgdGhlIHRpbGUgaXMgdmlzaWJsZSwgRUlOQV9GQUxTRSBvdGhlcndpc2Uu
CiAgKi8KLUVpbmFfQm9vbCBld2tfdGlsZV92aXNpYmxlX2dldChFd2tfVGlsZSAqdCkKK0VpbmFf
Qm9vbCBld2tfdGlsZV92aXNpYmxlX2dldChFd2tfVGlsZSogdGlsZSkKIHsKLSAgICByZXR1cm4g
ISF0LT52aXNpYmxlOworICAgIHJldHVybiAhIXRpbGUtPnZpc2libGU7CiB9CiAKIC8qKgogICog
TWFyayB3aG9sZSB0aWxlIGFzIGRpcnR5IGFuZCByZXF1aXJpbmcgdXBkYXRlLgogICovCi12b2lk
IGV3a190aWxlX3VwZGF0ZV9mdWxsKEV3a19UaWxlICp0KQordm9pZCBld2tfdGlsZV91cGRhdGVf
ZnVsbChFd2tfVGlsZSogdGlsZSkKIHsKICAgICAvKiBUT0RPOiBsaXN0IG9mIHRpbGVzIHBlbmRp
bmcgdXBkYXRlcz8gKi8KLSAgICB0LT5zdGF0cy5taXNzZXMrKzsKKyAgICB0aWxlLT5zdGF0cy5t
aXNzZXMrKzsKIAotICAgIGlmICghdC0+c3RhdHMuZnVsbF91cGRhdGUpIHsKLSAgICAgICAgdC0+
c3RhdHMuZnVsbF91cGRhdGUgPSBFSU5BX1RSVUU7Ci0gICAgICAgIGlmICh0LT51cGRhdGVzKSB7
Ci0gICAgICAgICAgICBlaW5hX3RpbGVyX2ZyZWUodC0+dXBkYXRlcyk7Ci0gICAgICAgICAgICB0
LT51cGRhdGVzID0gMDsKKyAgICBpZiAoIXRpbGUtPnN0YXRzLmZ1bGxfdXBkYXRlKSB7CisgICAg
ICAgIHRpbGUtPnN0YXRzLmZ1bGxfdXBkYXRlID0gRUlOQV9UUlVFOworICAgICAgICBpZiAodGls
ZS0+dXBkYXRlcykgeworICAgICAgICAgICAgZWluYV90aWxlcl9mcmVlKHRpbGUtPnVwZGF0ZXMp
OworICAgICAgICAgICAgdGlsZS0+dXBkYXRlcyA9IDA7CiAgICAgICAgIH0KICAgICB9CiB9CkBA
IC0zODcsMzIgKzM4NywzMiBAQCB2b2lkIGV3a190aWxlX3VwZGF0ZV9mdWxsKEV3a19UaWxlICp0
KQogLyoqCiAgKiBNYXJrIHRoZSBzcGVjaWZpYyBzdWJhcmVhIGFzIGRpcnR5IGFuZCByZXF1aXJp
bmcgdXBkYXRlLgogICovCi12b2lkIGV3a190aWxlX3VwZGF0ZV9hcmVhKEV3a19UaWxlICp0LCBj
b25zdCBFaW5hX1JlY3RhbmdsZSAqcikKK3ZvaWQgZXdrX3RpbGVfdXBkYXRlX2FyZWEoRXdrX1Rp
bGUqIHRpbGUsIGNvbnN0IEVpbmFfUmVjdGFuZ2xlKiByZWN0KQogewogICAgIC8qIFRPRE86IGxp
c3Qgb2YgdGlsZXMgcGVuZGluZyB1cGRhdGVzPyAqLwotICAgIHQtPnN0YXRzLm1pc3NlcysrOwor
ICAgIHRpbGUtPnN0YXRzLm1pc3NlcysrOwogCi0gICAgaWYgKHQtPnN0YXRzLmZ1bGxfdXBkYXRl
KQorICAgIGlmICh0aWxlLT5zdGF0cy5mdWxsX3VwZGF0ZSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgaWYgKCFyLT54ICYmICFyLT55ICYmIHItPncgPT0gdC0+dyAmJiByLT5oID09IHQtPmgpIHsK
LSAgICAgICAgdC0+c3RhdHMuZnVsbF91cGRhdGUgPSBFSU5BX1RSVUU7Ci0gICAgICAgIGlmICh0
LT51cGRhdGVzKSB7Ci0gICAgICAgICAgICBlaW5hX3RpbGVyX2ZyZWUodC0+dXBkYXRlcyk7Ci0g
ICAgICAgICAgICB0LT51cGRhdGVzID0gMDsKKyAgICBpZiAoIXJlY3QtPnggJiYgIXJlY3QtPnkg
JiYgcmVjdC0+dyA9PSB0aWxlLT53aWR0aCAmJiByZWN0LT5oID09IHRpbGUtPmhlaWdodCkgewor
ICAgICAgICB0aWxlLT5zdGF0cy5mdWxsX3VwZGF0ZSA9IEVJTkFfVFJVRTsKKyAgICAgICAgaWYg
KHRpbGUtPnVwZGF0ZXMpIHsKKyAgICAgICAgICAgIGVpbmFfdGlsZXJfZnJlZSh0aWxlLT51cGRh
dGVzKTsKKyAgICAgICAgICAgIHRpbGUtPnVwZGF0ZXMgPSAwOwogICAgICAgICB9CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoIXQtPnVwZGF0ZXMpIHsKLSAgICAgICAgdC0+dXBk
YXRlcyA9IGVpbmFfdGlsZXJfbmV3KHQtPncsIHQtPmgpOwotICAgICAgICBpZiAoIXQtPnVwZGF0
ZXMpIHsKLSAgICAgICAgICAgIENSSVRJQ0FMKCJjb3VsZCBub3QgY3JlYXRlIGVpbmFfdGlsZXIg
JWR4JWQuIiwgdC0+dywgdC0+aCk7CisgICAgaWYgKCF0aWxlLT51cGRhdGVzKSB7CisgICAgICAg
IHRpbGUtPnVwZGF0ZXMgPSBlaW5hX3RpbGVyX25ldyh0aWxlLT53aWR0aCwgdGlsZS0+aGVpZ2h0
KTsKKyAgICAgICAgaWYgKCF0aWxlLT51cGRhdGVzKSB7CisgICAgICAgICAgICBDUklUSUNBTCgi
Y291bGQgbm90IGNyZWF0ZSBlaW5hX3RpbGVyICVkeCVkLiIsIHRpbGUtPndpZHRoLCB0aWxlLT5o
ZWlnaHQpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQogCi0gICAgZWlu
YV90aWxlcl9yZWN0X2FkZCh0LT51cGRhdGVzLCByKTsKKyAgICBlaW5hX3RpbGVyX3JlY3RfYWRk
KHRpbGUtPnVwZGF0ZXMsIHJlY3QpOwogfQogCiAvKioKQEAgLTQyMSwzNiArNDIxLDM2IEBAIHZv
aWQgZXdrX3RpbGVfdXBkYXRlX2FyZWEoRXdrX1RpbGUgKnQsIGNvbnN0IEVpbmFfUmVjdGFuZ2xl
ICpyKQogICogVGhpcyB3aWxsIG5vdCBjaGFuZ2UgdGhlIHRpbGUgc3RhdGlzdGljcyBvciBjbGVh
ciB0aGUgcHJvY2Vzc2VkCiAgKiB1cGRhdGVzLCB1c2UgZXdrX3RpbGVfdXBkYXRlc19jbGVhcigp
IGZvciB0aGF0LgogICovCi12b2lkIGV3a190aWxlX3VwZGF0ZXNfcHJvY2VzcyhFd2tfVGlsZSAq
dCwgdm9pZCAoKmNiKSh2b2lkICpkYXRhLCBFd2tfVGlsZSAqdCwgY29uc3QgRWluYV9SZWN0YW5n
bGUgKnVwZGF0ZSksIGNvbnN0IHZvaWQgKmRhdGEpCi17Ci0gICAgaWYgKHQtPnN0YXRzLmZ1bGxf
dXBkYXRlKSB7Ci0gICAgICAgIEVpbmFfUmVjdGFuZ2xlIHI7Ci0gICAgICAgIHIueCA9IDA7Ci0g
ICAgICAgIHIueSA9IDA7Ci0gICAgICAgIHIudyA9IHQtPnc7Ci0gICAgICAgIHIuaCA9IHQtPmg7
Cit2b2lkIGV3a190aWxlX3VwZGF0ZXNfcHJvY2VzcyhFd2tfVGlsZSogdGlsZSwgdm9pZCAoKiBj
Yikodm9pZCogZGF0YSwgRXdrX1RpbGUqIHRpbGUsIGNvbnN0IEVpbmFfUmVjdGFuZ2xlKiB1cGRh
dGUpLCBjb25zdCB2b2lkKiBkYXRhKQoreworICAgIGlmICh0aWxlLT5zdGF0cy5mdWxsX3VwZGF0
ZSkgeworICAgICAgICBFaW5hX1JlY3RhbmdsZSByZWN0OworICAgICAgICByZWN0LnggPSAwOwor
ICAgICAgICByZWN0LnkgPSAwOworICAgICAgICByZWN0LncgPSB0aWxlLT53aWR0aDsKKyAgICAg
ICAgcmVjdC5oID0gdGlsZS0+aGVpZ2h0OwogI2lmZGVmIFRJTEVfU1RBVFNfQUNDT1VOVF9SRU5E
RVJfVElNRQogICAgICAgICBzdHJ1Y3QgdGltZXZhbCB0aW1ldjsKICAgICAgICAgZG91YmxlIHJl
bmRlcl9zdGFydDsKICAgICAgICAgZ2V0dGltZW9mZGF5KCZ0aW1ldiwgMCk7Ci0gICAgICAgIHJl
bmRlcl9zdGFydCA9IChkb3VibGUpdGltZXYudHZfc2VjICsKLSAgICAgICAgICAgICgoKGRvdWJs
ZSl0aW1ldi50dl91c2VjKSAvIDEwMDAwMDApOworICAgICAgICByZW5kZXJfc3RhcnRpbGUgPSAo
ZG91YmxlKXRpbWV2LnR2X3NlYyArCisgICAgICAgICAgICAgICAgICAgICAgICgoKGRvdWJsZSl0
aW1ldi50dl91c2VjKSAvIDEwMDAwMDApOwogI2VuZGlmCi0gICAgICAgIGNiKCh2b2lkICopZGF0
YSwgdCwgJnIpOworICAgICAgICBjYigodm9pZCopZGF0YSwgdGlsZSwgJnJlY3QpOwogI2lmZGVm
IFRJTEVfU1RBVFNfQUNDT1VOVF9SRU5ERVJfVElNRQogICAgICAgICBnZXR0aW1lb2ZkYXkoJnRp
bWV2LCAwKTsKLSAgICAgICAgdC0+c3RhdHMucmVuZGVyX3RpbWUgPSAoZG91YmxlKXRpbWV2LnR2
X3NlYyArCi0gICAgICAgICAgICAoKChkb3VibGUpdGltZXYudHZfdXNlYykgLyAxMDAwMDAwKSAt
IHJlbmRlcl9zdGFydDsKKyAgICAgICAgdGlsZS0+c3RhdHMucmVuZGVyX3RpbWUgPSAoZG91Ymxl
KXRpbWV2LnR2X3NlYyArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoZG91Ymxl
KXRpbWV2LnR2X3VzZWMpIC8gMTAwMDAwMCkgLSByZW5kZXJfc3RhcnQ7CiAjZW5kaWYKLSAgICB9
IGVsc2UgaWYgKHQtPnVwZGF0ZXMpIHsKLSAgICAgICAgRWluYV9JdGVyYXRvciAqaXRyID0gZWlu
YV90aWxlcl9pdGVyYXRvcl9uZXcodC0+dXBkYXRlcyk7Ci0gICAgICAgIEVpbmFfUmVjdGFuZ2xl
ICpyOworICAgIH0gZWxzZSBpZiAodGlsZS0+dXBkYXRlcykgeworICAgICAgICBFaW5hX0l0ZXJh
dG9yKiBpdHIgPSBlaW5hX3RpbGVyX2l0ZXJhdG9yX25ldyh0aWxlLT51cGRhdGVzKTsKKyAgICAg
ICAgRWluYV9SZWN0YW5nbGUqIHJlY3Q7CiAgICAgICAgIGlmICghaXRyKSB7CiAgICAgICAgICAg
ICBDUklUSUNBTCgiY291bGQgbm90IGNyZWF0ZSB0aWxlciBpdGVyYXRvciEiKTsKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBFSU5BX0lURVJBVE9SX0ZPUkVBQ0goaXRy
LCByKQotICAgICAgICAgICAgY2IoKHZvaWQgKilkYXRhLCB0LCByKTsKKyAgICAgICAgRUlOQV9J
VEVSQVRPUl9GT1JFQUNIKGl0ciwgcmVjdCkKKyAgICAgICAgICAgIGNiKCh2b2lkKilkYXRhLCB0
aWxlLCByZWN0KTsKICAgICAgICAgZWluYV9pdGVyYXRvcl9mcmVlKGl0cik7CiAgICAgfQogfQpA
QCAtNDU5LDM4ICs0NTksMzggQEAgdm9pZCBld2tfdGlsZV91cGRhdGVzX3Byb2Nlc3MoRXdrX1Rp
bGUgKnQsIHZvaWQgKCpjYikodm9pZCAqZGF0YSwgRXdrX1RpbGUgKnQsIGMKICAqIENsZWFyIGFs
bCB1cGRhdGVzIGluIHJlZ2lvbiwgaWYgYW55LgogICoKICAqIFRoaXMgd2lsbCBjaGFuZ2UgdGhl
IHRpbGUgc3RhdGlzdGljcywgc3BlY2lhbGx5IHplcm8gc3RhdC5taXNzZXMKLSAqIGFuZCB1bnNl
dCBzdGF0cy5mdWxsX3VwZGF0ZS4gSWYgdC0+dXBkYXRlcyBleGlzdGVkLCB0aGVuIGl0IHdpbGwg
YmUKKyAqIGFuZCB1bnNldCBzdGF0cy5mdWxsX3VwZGF0ZS4gSWYgdGlsZS0+dXBkYXRlcyBleGlz
dGVkLCB0aGVuIGl0IHdpbGwgYmUKICAqIGRlc3Ryb3llZC4KICAqCiAgKiBUaGlzIGZ1bmN0aW9u
IGlzIHVzdWFsbHkgY2FsbGVkIGFmdGVyIGV3a190aWxlX3VwZGF0ZXNfcHJvY2VzcygpIGlzCiAg
KiBjYWxsZWQuCiAgKi8KLXZvaWQgZXdrX3RpbGVfdXBkYXRlc19jbGVhcihFd2tfVGlsZSAqdCkK
K3ZvaWQgZXdrX3RpbGVfdXBkYXRlc19jbGVhcihFd2tfVGlsZSogdGlsZSkKIHsKICAgICAvKiBU
T0RPOiByZW1vdmUgZnJvbSBsaXN0IG9mIHBlbmRpbmcgdXBkYXRlcz8gKi8KLSAgICB0LT5zdGF0
cy5taXNzZXMgPSAwOworICAgIHRpbGUtPnN0YXRzLm1pc3NlcyA9IDA7CiAKLSAgICBpZiAodC0+
c3RhdHMuZnVsbF91cGRhdGUpCi0gICAgICAgIHQtPnN0YXRzLmZ1bGxfdXBkYXRlID0gMDsKLSAg
ICBlbHNlIGlmICh0LT51cGRhdGVzKSB7Ci0gICAgICAgIGVpbmFfdGlsZXJfZnJlZSh0LT51cGRh
dGVzKTsKLSAgICAgICAgdC0+dXBkYXRlcyA9IDA7CisgICAgaWYgKHRpbGUtPnN0YXRzLmZ1bGxf
dXBkYXRlKQorICAgICAgICB0aWxlLT5zdGF0cy5mdWxsX3VwZGF0ZSA9IDA7CisgICAgZWxzZSBp
ZiAodGlsZS0+dXBkYXRlcykgeworICAgICAgICBlaW5hX3RpbGVyX2ZyZWUodGlsZS0+dXBkYXRl
cyk7CisgICAgICAgIHRpbGUtPnVwZGF0ZXMgPSAwOwogICAgIH0KIH0KIAogdHlwZWRlZiBzdHJ1
Y3QgX0V3a19UaWxlX1VudXNlZF9DYWNoZV9FbnRyeSBFd2tfVGlsZV9VbnVzZWRfQ2FjaGVfRW50
cnk7CiBzdHJ1Y3QgX0V3a19UaWxlX1VudXNlZF9DYWNoZV9FbnRyeSB7Ci0gICAgRXdrX1RpbGUg
KnRpbGU7CisgICAgRXdrX1RpbGUqIHRpbGU7CiAgICAgaW50IHdlaWdodDsKICAgICBzdHJ1Y3Qg
ewotICAgICAgICB2b2lkICgqY2IpKHZvaWQgKmRhdGEsIEV3a19UaWxlICp0KTsKLSAgICAgICAg
dm9pZCAqZGF0YTsKKyAgICAgICAgdm9pZCAoKiBjYikodm9pZCogZGF0YSwgRXdrX1RpbGUqIHRp
bGUpOworICAgICAgICB2b2lkKiBkYXRhOwogICAgIH0gdGlsZV9mcmVlOwogfTsKIAogc3RydWN0
IF9Fd2tfVGlsZV9VbnVzZWRfQ2FjaGUgewogICAgIHN0cnVjdCB7Ci0gICAgICAgIEVpbmFfTGlz
dCAqbGlzdDsKKyAgICAgICAgRWluYV9MaXN0KiBsaXN0OwogICAgICAgICBzaXplX3QgY291bnQ7
CiAgICAgICAgIHNpemVfdCBhbGxvY2F0ZWQ7CiAgICAgfSBlbnRyaWVzOwpAQCAtNTIyLDkgKzUy
Miw5IEBAIHN0YXRpYyBjb25zdCBzaXplX3QgVElMRV9VTlVTRURfQ0FDSEVfTUFYX0ZSRUUgPSAz
MjsKICAqICAgICAgICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2ZyZWUoKSB0byByZWxlYXNlIHJl
c291cmNlcy4gSWYgbm90CiAgKiAgICAgICAgIHBvc3NpYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSwg
QGMgMCBpcyByZXR1cm5lZC4KICAqLwotRXdrX1RpbGVfVW51c2VkX0NhY2hlICpld2tfdGlsZV91
bnVzZWRfY2FjaGVfbmV3KHNpemVfdCBtYXgpCitFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIGV3a190
aWxlX3VudXNlZF9jYWNoZV9uZXcoc2l6ZV90IG1heCkKIHsKLSAgICBFd2tfVGlsZV9VbnVzZWRf
Q2FjaGUgKnR1YzsKKyAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHR1YzsKIAogICAgIHR1YyA9
IHN0YXRpY19jYXN0PEV3a19UaWxlX1VudXNlZF9DYWNoZSo+KGNhbGxvYygxLCBzaXplb2YoRXdr
X1RpbGVfVW51c2VkX0NhY2hlKSkpOwogICAgIGlmICghdHVjKQpAQCAtNTM2LDE5ICs1MzYsMTkg
QEAgRXdrX1RpbGVfVW51c2VkX0NhY2hlICpld2tfdGlsZV91bnVzZWRfY2FjaGVfbmV3KHNpemVf
dCBtYXgpCiAgICAgcmV0dXJuIHR1YzsKIH0KIAotdm9pZCBld2tfdGlsZV91bnVzZWRfY2FjaGVf
bG9ja19hcmVhKEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjLCBFdmFzX0Nvb3JkIHgsIEV2YXNf
Q29vcmQgeSwgRXZhc19Db29yZCB3LCBFdmFzX0Nvb3JkIGgsIGZsb2F0IHpvb20pCit2b2lkIGV3
a190aWxlX3VudXNlZF9jYWNoZV9sb2NrX2FyZWEoRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0dWMs
IEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5LCBFdmFzX0Nvb3JkIHdpZHRoLCBFdmFzX0Nvb3Jk
IGhlaWdodCwgZmxvYXQgem9vbSkKIHsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0
dWMpOwogCiAgICAgdHVjLT5sb2NrZWQubG9ja2VkID0gRUlOQV9UUlVFOwogICAgIHR1Yy0+bG9j
a2VkLnggPSB4OwogICAgIHR1Yy0+bG9ja2VkLnkgPSB5OwotICAgIHR1Yy0+bG9ja2VkLncgPSB3
OwotICAgIHR1Yy0+bG9ja2VkLmggPSBoOworICAgIHR1Yy0+bG9ja2VkLncgPSB3aWR0aDsKKyAg
ICB0dWMtPmxvY2tlZC5oID0gaGVpZ2h0OwogICAgIHR1Yy0+bG9ja2VkLnpvb20gPSB6b29tOwog
fQogCi12b2lkIGV3a190aWxlX3VudXNlZF9jYWNoZV91bmxvY2tfYXJlYShFd2tfVGlsZV9VbnVz
ZWRfQ2FjaGUgKnR1YykKK3ZvaWQgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3VubG9ja19hcmVhKEV3
a19UaWxlX1VudXNlZF9DYWNoZSogdHVjKQogewogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOKHR1Yyk7CiAKQEAgLTU2Nyw3ICs1NjcsNyBAQCB2b2lkIGV3a190aWxlX3VudXNlZF9jYWNo
ZV91bmxvY2tfYXJlYShFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YykKICAqCiAgKiBAc2VlIGV3
a190aWxlX3VudXNlZF9jYWNoZV91bnJlZigpCiAgKi8KLXN0YXRpYyB2b2lkIF9ld2tfdGlsZV91
bnVzZWRfY2FjaGVfZnJlZShFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YykKK3N0YXRpYyB2b2lk
IF9ld2tfdGlsZV91bnVzZWRfY2FjaGVfZnJlZShFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHR1YykK
IHsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0dWMpOwogCkBAIC01ODcsNyArNTg3
LDcgQEAgc3RhdGljIHZvaWQgX2V3a190aWxlX3VudXNlZF9jYWNoZV9mcmVlKEV3a19UaWxlX1Vu
dXNlZF9DYWNoZSAqdHVjKQogICogQW55IHRpbGVzIHRoYXQgYXJlIGluIHRoZSBjYWNoZSBhcmUg
ZnJlZWQuIFRoZSBvbmx5IHRpbGVzIHRoYXQgYXJlCiAgKiBrZXB0IGFyZSB0aG9zZSB0aGF0IGFy
ZW4ndCBpbiB0aGUgY2FjaGUgKGkuZS4gdGhhdCBhcmUgdmlzaWJsZSkuCiAgKi8KLXZvaWQgZXdr
X3RpbGVfdW51c2VkX2NhY2hlX2NsZWFyKEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjKQordm9p
ZCBld2tfdGlsZV91bnVzZWRfY2FjaGVfY2xlYXIoRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0dWMp
CiB7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4odHVjKTsKIApAQCAtNjA2LDEzICs2
MDYsMTMgQEAgdm9pZCBld2tfdGlsZV91bnVzZWRfY2FjaGVfY2xlYXIoRXdrX1RpbGVfVW51c2Vk
X0NhY2hlICp0dWMpCiB9CiAKIC8qKgotICogSG9sZCByZWZlcmVuY2UgdG8gY2FjaGUuCisgKiBo
ZWlnaHRvbGQgcmVmZXJlbmNlIHRvIGNhY2hlLgogICoKICAqIEByZXR1cm4gc2FtZSBwb2ludGVy
IGFzIHRha2VuLgogICoKICAqIEBzZWUgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3VucmVmKCkKICAq
LwotRXdrX1RpbGVfVW51c2VkX0NhY2hlICpld2tfdGlsZV91bnVzZWRfY2FjaGVfcmVmKEV3a19U
aWxlX1VudXNlZF9DYWNoZSAqdHVjKQorRXdrX1RpbGVfVW51c2VkX0NhY2hlKiBld2tfdGlsZV91
bnVzZWRfY2FjaGVfcmVmKEV3a19UaWxlX1VudXNlZF9DYWNoZSogdHVjKQogewogICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh0dWMsIDApOwogICAgIHR1Yy0+cmVmZXJlbmNlcysr
OwpAQCAtNjI1LDcgKzYyNSw3IEBAIEV3a19UaWxlX1VudXNlZF9DYWNoZSAqZXdrX3RpbGVfdW51
c2VkX2NhY2hlX3JlZihFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YykKICAqIEBzZWUgZXdrX3Rp
bGVfdW51c2VkX2NhY2hlX3JlZigpCiAgKiBAc2VlIGV3a190aWxlX3VudXNlZF9jYWNoZV9mcmVl
KCkKICAqLwotdm9pZCBld2tfdGlsZV91bnVzZWRfY2FjaGVfdW5yZWYoRXdrX1RpbGVfVW51c2Vk
X0NhY2hlICp0dWMpCit2b2lkIGV3a190aWxlX3VudXNlZF9jYWNoZV91bnJlZihFd2tfVGlsZV9V
bnVzZWRfQ2FjaGUqIHR1YykKIHsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0dWMp
OwogICAgIHR1Yy0+cmVmZXJlbmNlcy0tOwpAQCAtNjMzLDI3ICs2MzMsMjcgQEAgdm9pZCBld2tf
dGlsZV91bnVzZWRfY2FjaGVfdW5yZWYoRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMpCiAgICAg
ICAgIF9ld2tfdGlsZV91bnVzZWRfY2FjaGVfZnJlZSh0dWMpOwogfQogCi12b2lkIGV3a190aWxl
X3VudXNlZF9jYWNoZV9tYXhfc2V0KEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjLCBzaXplX3Qg
bWF4KQordm9pZCBld2tfdGlsZV91bnVzZWRfY2FjaGVfbWF4X3NldChFd2tfVGlsZV9VbnVzZWRf
Q2FjaGUqIHR1Yywgc2l6ZV90IG1heCkKIHsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
Tih0dWMpOwogICAgIHR1Yy0+bWVtb3J5Lm1heCA9IG1heDsKIH0KIAotc2l6ZV90IGV3a190aWxl
X3VudXNlZF9jYWNoZV9tYXhfZ2V0KGNvbnN0IEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjKQor
c2l6ZV90IGV3a190aWxlX3VudXNlZF9jYWNoZV9tYXhfZ2V0KGNvbnN0IEV3a19UaWxlX1VudXNl
ZF9DYWNoZSogdHVjKQogewogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh0dWMs
IDApOwogICAgIHJldHVybiB0dWMtPm1lbW9yeS5tYXg7CiB9CiAKLXNpemVfdCBld2tfdGlsZV91
bnVzZWRfY2FjaGVfdXNlZF9nZXQoY29uc3QgRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMpCitz
aXplX3QgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3VzZWRfZ2V0KGNvbnN0IEV3a19UaWxlX1VudXNl
ZF9DYWNoZSogdHVjKQogewogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh0dWMs
IDApOwogICAgIHJldHVybiB0dWMtPm1lbW9yeS51c2VkOwogfQogCi1zaXplX3QgZXdrX3RpbGVf
dW51c2VkX2NhY2hlX2ZsdXNoKEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjLCBzaXplX3QgYnl0
ZXMpCitzaXplX3QgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2ZsdXNoKEV3a19UaWxlX1VudXNlZF9D
YWNoZSogdHVjLCBzaXplX3QgYnl0ZXMpCiB7Ci0gICAgRWluYV9MaXN0ICpsLCAqbF9uZXh0Owor
ICAgIEVpbmFfTGlzdCogbCwgKiBsX25leHQ7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk5fVkFMKHR1YywgMCk7CiAgICAgc2l6ZV90IGRvbmU7CiAgICAgdW5zaWduZWQgaW50IGNvdW50
OwpAQCAtNjczLDE1ICs2NzMsMTUgQEAgc2l6ZV90IGV3a190aWxlX3VudXNlZF9jYWNoZV9mbHVz
aChFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1Yywgc2l6ZV90IGJ5dGVzKQogICAgIGNvdW50ID0g
MDsKICAgICBFSU5BX0xJU1RfRk9SRUFDSF9TQUZFKHR1Yy0+ZW50cmllcy5saXN0LCBsLCBsX25l
eHQsIGl0ZW0pIHsKICAgICAgICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlX0VudHJ5KiBpdHIgPSBz
dGF0aWNfY2FzdDxFd2tfVGlsZV9VbnVzZWRfQ2FjaGVfRW50cnkqPihpdGVtKTsKLSAgICAgICAg
RXdrX1RpbGUgKnQgPSBpdHItPnRpbGU7CisgICAgICAgIEV3a19UaWxlKiB0aWxlID0gaXRyLT50
aWxlOwogICAgICAgICBpZiAoZG9uZSA+IGJ5dGVzKQogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGlmICh0dWMtPmxvY2tlZC5sb2NrZWQKLSAgICAgICAgICAgICYmIHQtPnggKyB0LT53ID4g
dHVjLT5sb2NrZWQueAotICAgICAgICAgICAgJiYgdC0+eSArIHQtPmggPiB0dWMtPmxvY2tlZC55
Ci0gICAgICAgICAgICAmJiB0LT54IDwgdHVjLT5sb2NrZWQueCArIHR1Yy0+bG9ja2VkLncKLSAg
ICAgICAgICAgICYmIHQtPnkgPCB0dWMtPmxvY2tlZC55ICsgdHVjLT5sb2NrZWQuaAotICAgICAg
ICAgICAgJiYgdC0+em9vbSA9PSB0dWMtPmxvY2tlZC56b29tKSB7CisgICAgICAgICAgICAmJiB0
aWxlLT54ICsgdGlsZS0+d2lkdGggPiB0dWMtPmxvY2tlZC54CisgICAgICAgICAgICAmJiB0aWxl
LT55ICsgdGlsZS0+aGVpZ2h0ID4gdHVjLT5sb2NrZWQueQorICAgICAgICAgICAgJiYgdGlsZS0+
eCA8IHR1Yy0+bG9ja2VkLnggKyB0dWMtPmxvY2tlZC53CisgICAgICAgICAgICAmJiB0aWxlLT55
IDwgdHVjLT5sb2NrZWQueSArIHR1Yy0+bG9ja2VkLmgKKyAgICAgICAgICAgICYmIHRpbGUtPnpv
b20gPT0gdHVjLT5sb2NrZWQuem9vbSkgewogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
IH0KICAgICAgICAgZG9uZSArPSBzaXplb2YoRXdrX1RpbGUpICsgaXRyLT50aWxlLT5ieXRlczsK
QEAgLTY5Nyw3ICs2OTcsNyBAQCBzaXplX3QgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2ZsdXNoKEV3
a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjLCBzaXplX3QgYnl0ZXMpCiAgICAgcmV0dXJuIGRvbmU7
CiB9CiAKLXZvaWQgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2F1dG9fZmx1c2goRXdrX1RpbGVfVW51
c2VkX0NhY2hlICp0dWMpCit2b2lkIGV3a190aWxlX3VudXNlZF9jYWNoZV9hdXRvX2ZsdXNoKEV3
a19UaWxlX1VudXNlZF9DYWNoZSogdHVjKQogewogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOKHR1Yyk7CiAgICAgaWYgKHR1Yy0+bWVtb3J5LnVzZWQgPD0gdHVjLT5tZW1vcnkubWF4KQpA
QCAtNzEyLDEyICs3MTIsMTIgQEAgdm9pZCBld2tfdGlsZV91bnVzZWRfY2FjaGVfYXV0b19mbHVz
aChFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YykKICAqIEZyZWV6ZSBjYWNoZSB0byBub3QgZG8g
bWFpbnRlbmFuY2UgdGFza3MuCiAgKgogICogTWFpbnRlbmFuY2UgdGFza3Mgb3B0aW1pemUgY2Fj
aGUgdXNhZ2UsIGJ1dCBtYXliZSB3ZSBrbm93IHdlIHNob3VsZAotICogaG9sZCBvbiB0aGVtIHVu
dGlsIHdlIGRvIHRoZSBsYXN0IG9wZXJhdGlvbiwgaW4gdGhpcyBjYXNlIHdlIGZyZWV6ZQorICog
aGVpZ2h0b2xkIG9uIHRoZW0gdW50aWwgd2UgZG8gdGhlIGxhc3Qgb3BlcmF0aW9uLCBpbiB0aGlz
IGNhc2Ugd2UgZnJlZXplCiAgKiB3aGlsZSBvcGVyYXRpbmcgYW5kIHRoZW4gdGhhdyB3aGVuIHdl
J3JlIGRvbmUuCiAgKgogICogQHNlZSBld2tfdGlsZV91bnVzZWRfY2FjaGVfdGhhdygpCiAgKi8K
LXZvaWQgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2ZyZWV6ZShFd2tfVGlsZV9VbnVzZWRfQ2FjaGUg
KnR1YykKK3ZvaWQgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2ZyZWV6ZShFd2tfVGlsZV9VbnVzZWRf
Q2FjaGUqIHR1YykKIHsKICAgICB0dWMtPmZyb3plbisrOwogfQpAQCAtNzI4LDcgKzcyOCw3IEBA
IHZvaWQgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2ZyZWV6ZShFd2tfVGlsZV9VbnVzZWRfQ2FjaGUg
KnR1YykKICAqIElmIHRoaXMgaXMgdGhlIGxhc3QgY291bnRlcnBhcnQgb2YgZnJlZXplLCB0aGVu
IG1haW50ZW5hbmNlIHRhc2tzCiAgKiB3aWxsIHJ1biBpbW1lZGlhdGVseS4KICAqLwotdm9pZCBl
d2tfdGlsZV91bnVzZWRfY2FjaGVfdGhhdyhFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YykKK3Zv
aWQgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3RoYXcoRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0dWMp
CiB7CiAgICAgaWYgKCF0dWMtPmZyb3plbikgewogICAgICAgICBFUlIoInRoYXdpbmcgbW9yZSB0
aGFuIGZyZWV6aW5nISIpOwpAQCAtNzUwLDI2ICs3NTAsMjYgQEAgdm9pZCBld2tfdGlsZV91bnVz
ZWRfY2FjaGVfdGhhdyhFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YykKICAqCiAgKiBAcmV0dXJu
ICNFSU5BX1RSVUUgb24gc3VjY2VzcywgI0VJTkFfRkFMU0Ugb3RoZXJ3aXNlLgogICovCi1FaW5h
X0Jvb2wgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3RpbGVfZ2V0KEV3a19UaWxlX1VudXNlZF9DYWNo
ZSAqdHVjLCBFd2tfVGlsZSAqdCkKK0VpbmFfQm9vbCBld2tfdGlsZV91bnVzZWRfY2FjaGVfdGls
ZV9nZXQoRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0dWMsIEV3a19UaWxlKiB0aWxlKQogewotICAg
IEVpbmFfTGlzdCAqZSwgKmw7CisgICAgRWluYV9MaXN0KiBlLCAqIGw7CiAKICAgICB2b2lkKiBp
dGVtOwogICAgIGUgPSAwOwogICAgIEVJTkFfTElTVF9GT1JFQUNIKHR1Yy0+ZW50cmllcy5saXN0
LCBsLCBpdGVtKSB7CiAgICAgICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZV9FbnRyeSogZW50cnkg
PSBzdGF0aWNfY2FzdDxFd2tfVGlsZV9VbnVzZWRfQ2FjaGVfRW50cnkqPihpdGVtKTsKLSAgICAg
ICAgaWYgKGVudHJ5LT50aWxlID09IHQpIHsKKyAgICAgICAgaWYgKGVudHJ5LT50aWxlID09IHRp
bGUpIHsKICAgICAgICAgICAgIGUgPSBsOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICB9CiAgICAgaWYgKCFlKSB7Ci0gICAgICAgIEVSUigidGlsZSAlcCBub3QgZm91bmQgaW4g
Y2FjaGUgJXAiLCB0LCB0dWMpOworICAgICAgICBFUlIoInRpbGUgJXAgbm90IGZvdW5kIGluIGNh
Y2hlICVwIiwgdGlsZSwgdHVjKTsKICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CiAgICAgfQog
CiAgICAgdHVjLT5lbnRyaWVzLmNvdW50LS07Ci0gICAgdHVjLT5tZW1vcnkudXNlZCAtPSBzaXpl
b2YoRXdrX1RpbGUpICsgdC0+Ynl0ZXM7CisgICAgdHVjLT5tZW1vcnkudXNlZCAtPSBzaXplb2Yo
RXdrX1RpbGUpICsgdGlsZS0+Ynl0ZXM7CiAgICAgdHVjLT5lbnRyaWVzLmxpc3QgPSBlaW5hX2xp
c3RfcmVtb3ZlX2xpc3QodHVjLT5lbnRyaWVzLmxpc3QsIGUpOwogICAgIGZyZWUoaXRlbSk7CiAK
QEAgLTc3OSw3ICs3NzksNyBAQCBFaW5hX0Jvb2wgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3RpbGVf
Z2V0KEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjLCBFd2tfVGlsZSAqdAogLyoqCiAgKiBQdXQg
dGlsZSBpbnRvIGNhY2hlIG9mIHVudXNlZCB0aWxlcywgYWRkaW5nIGl0IHRvIHRoZSBjYWNoZS4K
ICAqCi0gKiBUaGlzIHNob3VsZCBiZSBjYWxsZWQgd2hlbiBAYyB0LT52aXNpYmxlIGlzIEBjIDAg
YW5kIG5vIG9iamVjdHMgYXJlCisgKiBUaGlzIHNob3VsZCBiZSBjYWxsZWQgd2hlbiBAYyB0aWxl
LT52aXNpYmxlIGlzIEBjIDAgYW5kIG5vIG9iamVjdHMgYXJlCiAgKiB1c2luZyB0aGUgdGlsZSBh
bnltb3JlLCBtYWtpbmcgaXQgYXZhaWxhYmxlIHRvIGJlIGV4cGlyZWQgYW5kIGhhdmUKICAqIGl0
cyBtZW1vcnkgcmVwbGFjZWQuCiAgKgpAQCAtNzkzLDU1ICs3OTMsNTUgQEAgRWluYV9Cb29sIGV3
a190aWxlX3VudXNlZF9jYWNoZV90aWxlX2dldChFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1Yywg
RXdrX1RpbGUgKnQKICAqIEBwYXJhbSB0aWxlX2ZyZWVfY2IgZnVuY3Rpb24gdXNlZCB0byBmcmVl
IHRpbGVzLgogICogQHBhcmFtIGRhdGEgY29udGV4dCB0byBnaXZlIGJhY2sgdG8gQGEgdGlsZV9m
cmVlX2NiIGFzIGZpcnN0IGFyZ3VtZW50LgogICoKLSAqIEByZXR1cm4gI0VJTkFfVFJVRSBvbiBz
dWNjZXNzLCAjRUlOQV9GQUxTRSBvdGhlcndpc2UuIElmIEBjIHQtPnZpc2libGUKKyAqIEByZXR1
cm4gI0VJTkFfVFJVRSBvbiBzdWNjZXNzLCAjRUlOQV9GQUxTRSBvdGhlcndpc2UuIElmIEBjIHRp
bGUtPnZpc2libGUKICAqICAgICAgICAgaXMgbm90ICNFSU5BX0ZBTFNFLCB0aGVuIGl0IHdpbGwg
cmV0dXJuICNFSU5BX0ZBTFNFLgogICoKICAqIEBzZWUgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2F1
dG9fZmx1c2goKQogICovCi1FaW5hX0Jvb2wgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3RpbGVfcHV0
KEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjLCBFd2tfVGlsZSAqdCwgdm9pZCAoKnRpbGVfZnJl
ZV9jYikodm9pZCAqZGF0YSwgRXdrX1RpbGUgKnQpLCBjb25zdCB2b2lkICpkYXRhKQorRWluYV9C
b29sIGV3a190aWxlX3VudXNlZF9jYWNoZV90aWxlX3B1dChFd2tfVGlsZV9VbnVzZWRfQ2FjaGUq
IHR1YywgRXdrX1RpbGUqIHRpbGUsIHZvaWQgKCogdGlsZV9mcmVlX2NiKSh2b2lkKiBkYXRhLCBF
d2tfVGlsZSogdGlsZSksIGNvbnN0IHZvaWQqIGRhdGEpCiB7Ci0gICAgRXdrX1RpbGVfVW51c2Vk
X0NhY2hlX0VudHJ5ICplOworICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZV9FbnRyeSogdWNlOwog
Ci0gICAgaWYgKHQtPnZpc2libGUpIHsKLSAgICAgICAgRVJSKCJ0aWxlPSVwIGlzIG5vdCB1bnVz
ZWQgKHZpc2libGU9JWQpIiwgdCwgdC0+dmlzaWJsZSk7CisgICAgaWYgKHRpbGUtPnZpc2libGUp
IHsKKyAgICAgICAgRVJSKCJ0aWxlPSVwIGlzIG5vdCB1bnVzZWQgKHZpc2libGU9JWQpIiwgdGls
ZSwgdGlsZS0+dmlzaWJsZSk7CiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwogICAgIH0KIAot
ICAgIGUgPSBzdGF0aWNfY2FzdDxFd2tfVGlsZV9VbnVzZWRfQ2FjaGVfRW50cnkqPihtYWxsb2Mo
c2l6ZW9mKEV3a19UaWxlX1VudXNlZF9DYWNoZV9FbnRyeSkpKTsKLSAgICBpZiAoIWUpCisgICAg
dWNlID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGVfVW51c2VkX0NhY2hlX0VudHJ5Kj4obWFsbG9jKHNp
emVvZihFd2tfVGlsZV9VbnVzZWRfQ2FjaGVfRW50cnkpKSk7CisgICAgaWYgKCF1Y2UpCiAgICAg
ICAgIHJldHVybiBFSU5BX0ZBTFNFOwogCi0gICAgdHVjLT5lbnRyaWVzLmxpc3QgPSBlaW5hX2xp
c3RfYXBwZW5kKHR1Yy0+ZW50cmllcy5saXN0LCBlKTsKKyAgICB0dWMtPmVudHJpZXMubGlzdCA9
IGVpbmFfbGlzdF9hcHBlbmQodHVjLT5lbnRyaWVzLmxpc3QsIHVjZSk7CiAgICAgaWYgKGVpbmFf
ZXJyb3JfZ2V0KCkpIHsKICAgICAgICAgRVJSKCJMaXN0IGFsbG9jYXRpb24gZmFpbGVkIik7CiAg
ICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwogICAgIH0KIAotICAgIGUtPnRpbGUgPSB0OwotICAg
IGUtPndlaWdodCA9IDA7IC8qIGNhbGN1bGF0ZWQganVzdCBiZWZvcmUgc29ydCAqLwotICAgIGUt
PnRpbGVfZnJlZS5jYiA9IHRpbGVfZnJlZV9jYjsKLSAgICBlLT50aWxlX2ZyZWUuZGF0YSA9ICh2
b2lkICopZGF0YTsKKyAgICB1Y2UtPnRpbGUgPSB0aWxlOworICAgIHVjZS0+d2VpZ2h0ID0gMDsg
LyogY2FsY3VsYXRlZCBqdXN0IGJlZm9yZSBzb3J0ICovCisgICAgdWNlLT50aWxlX2ZyZWUuY2Ig
PSB0aWxlX2ZyZWVfY2I7CisgICAgdWNlLT50aWxlX2ZyZWUuZGF0YSA9ICh2b2lkKilkYXRhOwog
CiAgICAgdHVjLT5lbnRyaWVzLmNvdW50Kys7Ci0gICAgdHVjLT5tZW1vcnkudXNlZCArPSBzaXpl
b2YoRXdrX1RpbGUpICsgdC0+Ynl0ZXM7CisgICAgdHVjLT5tZW1vcnkudXNlZCArPSBzaXplb2Yo
RXdrX1RpbGUpICsgdGlsZS0+Ynl0ZXM7CiAKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi12
b2lkIGV3a190aWxlX3VudXNlZF9jYWNoZV9kYmcoY29uc3QgRXdrX1RpbGVfVW51c2VkX0NhY2hl
ICp0dWMpCit2b2lkIGV3a190aWxlX3VudXNlZF9jYWNoZV9kYmcoY29uc3QgRXdrX1RpbGVfVW51
c2VkX0NhY2hlKiB0dWMpCiB7CiAgICAgdm9pZCogaXRlbTsKLSAgICBFaW5hX0xpc3QgKmw7Cisg
ICAgRWluYV9MaXN0KiBsOwogICAgIGludCBjb3VudCA9IDA7CiAgICAgcHJpbnRmKCJDYWNoZSBv
ZiB1bnVzZWQgdGlsZXM6IGVudHJpZXM6ICV6dS8lenUsIG1lbW9yeTogJXp1LyV6dVxuIiwKICAg
ICAgICAgICAgdHVjLT5lbnRyaWVzLmNvdW50LCB0dWMtPmVudHJpZXMuYWxsb2NhdGVkLAogICAg
ICAgICAgICB0dWMtPm1lbW9yeS51c2VkLCB0dWMtPm1lbW9yeS5tYXgpOwogCiAgICAgRUlOQV9M
SVNUX0ZPUkVBQ0godHVjLT5lbnRyaWVzLmxpc3QsIGwsIGl0ZW0pIHsKLSAgICAgICAgY29uc3Qg
RXdrX1RpbGUgKnQgPSBzdGF0aWNfY2FzdDxFd2tfVGlsZV9VbnVzZWRfQ2FjaGVfRW50cnkqPihp
dGVtKS0+dGlsZTsKKyAgICAgICAgY29uc3QgRXdrX1RpbGUqIHRpbGUgPSBzdGF0aWNfY2FzdDxF
d2tfVGlsZV9VbnVzZWRfQ2FjaGVfRW50cnkqPihpdGVtKS0+dGlsZTsKICAgICAgICAgcHJpbnRm
KCIgWyUzbHUsJTNsdSArICVkeCVkIEAgJTAuM2ZdJWMiLAotICAgICAgICAgICAgICAgdC0+Y29s
LCB0LT5yb3csIHQtPncsIHQtPmgsIHQtPnpvb20sCi0gICAgICAgICAgICAgICB0LT52aXNpYmxl
ID8gJyonOiAnICcpOworICAgICAgICAgICAgICAgdGlsZS0+Y29sLCB0aWxlLT5yb3csIHRpbGUt
PndpZHRoLCB0aWxlLT5oZWlnaHQsIHRpbGUtPnpvb20sCisgICAgICAgICAgICAgICB0aWxlLT52
aXNpYmxlID8gJyonIDogJyAnKTsKIAogICAgICAgICBpZiAoIShjb3VudCAlIDQpKQogICAgICAg
ICAgICAgcHJpbnRmKCJcbiIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3
a192aWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5jcHAKaW5kZXggNTk5
MDZlMy4uNWVkYmUwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a192aWV3
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXcuY3BwCkBAIC0xNzcsNDQg
KzE3Nyw0NCBAQCBzdHJ1Y3QgX0V3a19WaWV3X1ByaXZhdGVfRGF0YSB7CiB9OwogCiAjaWZuZGVm
IEVXS19UWVBFX0NIRUNLCi0jZGVmaW5lIEVXS19WSUVXX1RZUEVfQ0hFQ0sobywgLi4uKSBkbyB7
IH0gd2hpbGUgKDApCisjZGVmaW5lIEVXS19WSUVXX1RZUEVfQ0hFQ0soZXdrVmlldywgLi4uKSBk
byB7IH0gd2hpbGUgKDApCiAjZWxzZQotI2RlZmluZSBFV0tfVklFV19UWVBFX0NIRUNLKG8sIC4u
LikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBFV0tfVklF
V19UWVBFX0NIRUNLKGV3a1ZpZXcsIC4uLikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAogICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBjb25zdCBjaGFyKiBfdG1wX290eXBl
ID0gZXZhc19vYmplY3RfdHlwZV9nZXQobyk7ICAgICAgICAgICAgICAgXAotICAgICAgICBjb25z
dCBFdmFzX1NtYXJ0KiBfdG1wX3MgPSBldmFzX29iamVjdF9zbWFydF9zbWFydF9nZXQobyk7ICAg
ICAgXAorICAgICAgICBjb25zdCBjaGFyKiBfdG1wX290eXBlID0gZXZhc19vYmplY3RfdHlwZV9n
ZXQoZXdrVmlldyk7ICAgICAgICAgICAgICAgXAorICAgICAgICBjb25zdCBFdmFzX1NtYXJ0KiBf
dG1wX3MgPSBldmFzX29iamVjdF9zbWFydF9zbWFydF9nZXQoZXdrVmlldyk7ICAgICAgXAogICAg
ICAgICBpZiAoRUlOQV9VTkxJS0VMWSghX3RtcF9zKSkgeyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAogICAgICAgICAgICAgRUlOQV9MT0dfQ1JJVCAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICgiJXAgKCVz
KSBpcyBub3QgYSBzbWFydCBvYmplY3QhIiwgbywgICAgICAgICAgICAgICAgICAgXAorICAgICAg
ICAgICAgICAgICgiJXAgKCVzKSBpcyBub3QgYSBzbWFydCBvYmplY3QhIiwgZXdrVmlldywgICAg
ICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgIF90bXBfb3R5cGUgPyBfdG1wX290eXBl
IDogIihudWxsKSIpOyAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICByZXR1cm4gX19W
QV9BUkdTX187ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAg
ICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCiAgICAgICAgIGNvbnN0IEV2YXNfU21hcnRfQ2xhc3MqIF90bXBfc2MgPSBl
dmFzX3NtYXJ0X2NsYXNzX2dldChfdG1wX3MpOyBcCiAgICAgICAgIGlmIChFSU5BX1VOTElLRUxZ
KCFfdG1wX3NjKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAg
ICAgICBFSU5BX0xPR19DUklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgICAgICAgICAgICAgKCIlcCAoJXMpIGlzIG5vdCBhIHNtYXJ0IG9iamVj
dCEiLCBvLCAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgKCIlcCAoJXMpIGlz
IG5vdCBhIHNtYXJ0IG9iamVjdCEiLCBld2tWaWV3LCAgICAgICAgICAgICAgICAgICBcCiAgICAg
ICAgICAgICAgICAgX3RtcF9vdHlwZSA/IF90bXBfb3R5cGUgOiAiKG51bGwpIik7ICAgICAgICAg
ICAgICAgICAgIFwKICAgICAgICAgICAgIHJldHVybiBfX1ZBX0FSR1NfXzsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgfSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAg
aWYgKEVJTkFfVU5MSUtFTFkoX3RtcF9zYy0+ZGF0YSAhPSBFV0tfVklFV19UWVBFX1NUUikpIHsg
ICAgICAgIFwKICAgICAgICAgICAgIEVJTkFfTE9HX0NSSVQgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICAoIiVwICglcykgaXMg
bm90IG9mIGFuIGV3a192aWV3IChuZWVkICVwLCBnb3QgJXApISIsICAgIFwKLSAgICAgICAgICAg
ICAgICBvLCBfdG1wX290eXBlID8gX3RtcF9vdHlwZSA6ICIobnVsbCkiLCAgICAgICAgICAgICAg
ICAgXAorICAgICAgICAgICAgICAgIGV3a1ZpZXcsIF90bXBfb3R5cGUgPyBfdG1wX290eXBlIDog
IihudWxsKSIsICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgRVdLX1ZJRVdfVFlQ
RV9TVFIsIF90bXBfc2MtPmRhdGEpOyAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAg
IHJldHVybiBfX1ZBX0FSR1NfXzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKICAgICB9IHdoaWxlICgwKQogI2VuZGlmCiAKLSNkZWZp
bmUgRVdLX1ZJRVdfU0RfR0VUKG8sIHB0cikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogcHRyID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdf
U21hcnRfRGF0YSo+KGV2YXNfb2JqZWN0X3NtYXJ0X2RhdGFfZ2V0KG8pKQorI2RlZmluZSBFV0tf
VklFV19TRF9HRVQoZXdrVmlldywgcHRyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICBFd2tfVmlld19TbWFydF9EYXRhKiBwdHIgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19T
bWFydF9EYXRhKj4oZXZhc19vYmplY3Rfc21hcnRfZGF0YV9nZXQoZXdrVmlldykpCiAKLSNkZWZp
bmUgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBwdHIsIC4uLikgICAgICAgICAgXAotICAg
IEVXS19WSUVXX1RZUEVfQ0hFQ0sobywgX19WQV9BUkdTX18pOyAgICAgICAgICAgICAgICBcCi0g
ICAgRVdLX1ZJRVdfU0RfR0VUKG8sIHB0cik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyNkZWZpbmUgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBwdHIsIC4uLikgICAg
ICAgICAgXAorICAgIEVXS19WSUVXX1RZUEVfQ0hFQ0soZXdrVmlldywgX19WQV9BUkdTX18pOyAg
ICAgICAgICAgICAgICBcCisgICAgRVdLX1ZJRVdfU0RfR0VUKGV3a1ZpZXcsIHB0cik7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBpZiAoIXB0cikgeyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBDUklUSUNBTCgibm8gc21hcnQgZGF0
YSBmb3Igb2JqZWN0ICVwICglcykiLCAgICBcCi0gICAgICAgICAgICAgICAgIG8sIGV2YXNfb2Jq
ZWN0X3R5cGVfZ2V0KG8pKTsgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgZXdrVmlldywg
ZXZhc19vYmplY3RfdHlwZV9nZXQoZXdrVmlldykpOyAgICAgICAgICAgXAogICAgICAgICByZXR1
cm4gX19WQV9BUkdTX187ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgfQogCkBA
IC00NjgsNyArNDY4LDcgQEAgc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfc21hcnRfcnVuX2ph
dmFzY3JpcHRfcHJvbXB0KEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkLAogfQogCiAvLyBFdmVudCBI
YW5kbGluZyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8KLXN0YXRpYyB2b2lkIF9ld2tfdmlld19vbl9mb2N1c19pbih2b2lkKiBkYXRhLCBFdmFz
KiBlLCBFdmFzX09iamVjdCogbywgdm9pZCogZXZlbnRfaW5mbykKK3N0YXRpYyB2b2lkIF9ld2tf
dmlld19vbl9mb2N1c19pbih2b2lkKiBkYXRhLCBFdmFzKiBldmVudFR5cGUsIEV2YXNfT2JqZWN0
KiBjYWxsYmFjaywgdm9pZCogZXZlbnRJbmZvKQogewogICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEq
IHNkID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEpOwogICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGkpOwpAQCAtNDc2LDcgKzQ3Niw3IEBAIHN0YXRp
YyB2b2lkIF9ld2tfdmlld19vbl9mb2N1c19pbih2b2lkKiBkYXRhLCBFdmFzKiBlLCBFdmFzX09i
amVjdCogbywgdm9pZCogZXZlCiAgICAgc2QtPmFwaS0+Zm9jdXNfaW4oc2QpOwogfQogCi1zdGF0
aWMgdm9pZCBfZXdrX3ZpZXdfb25fZm9jdXNfb3V0KHZvaWQqIGRhdGEsIEV2YXMqIGUsIEV2YXNf
T2JqZWN0KiBvLCB2b2lkKiBldmVudF9pbmZvKQorc3RhdGljIHZvaWQgX2V3a192aWV3X29uX2Zv
Y3VzX291dCh2b2lkKiBkYXRhLCBFdmFzKiBldmVudFR5cGUsIEV2YXNfT2JqZWN0KiBjYWxsYmFj
aywgdm9pZCogZXZlbnRJbmZvKQogewogICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0gc3Rh
dGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEpOwogICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOKHNkLT5hcGkpOwpAQCAtNDg0LDU0ICs0ODQsNTQgQEAgc3RhdGljIHZvaWQg
X2V3a192aWV3X29uX2ZvY3VzX291dCh2b2lkKiBkYXRhLCBFdmFzKiBlLCBFdmFzX09iamVjdCog
bywgdm9pZCogZXYKICAgICBzZC0+YXBpLT5mb2N1c19vdXQoc2QpOwogfQogCi1zdGF0aWMgdm9p
ZCBfZXdrX3ZpZXdfb25fbW91c2Vfd2hlZWwodm9pZCogZGF0YSwgRXZhcyogZSwgRXZhc19PYmpl
Y3QqIG8sIHZvaWQqIGV2ZW50X2luZm8pCitzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfb25fbW91c2Vf
d2hlZWwodm9pZCogZGF0YSwgRXZhcyogZXZlbnRUeXBlLCBFdmFzX09iamVjdCogY2FsbGJhY2ss
IHZvaWQqIGV2ZW50SW5mbykKIHsKLSAgICBFdmFzX0V2ZW50X01vdXNlX1doZWVsKiBldiA9IHN0
YXRpY19jYXN0PEV2YXNfRXZlbnRfTW91c2VfV2hlZWwqPihldmVudF9pbmZvKTsKKyAgICBFdmFz
X0V2ZW50X01vdXNlX1doZWVsKiBldiA9IHN0YXRpY19jYXN0PEV2YXNfRXZlbnRfTW91c2VfV2hl
ZWwqPihldmVudEluZm8pOwogICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0gc3RhdGljX2Nh
c3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOKHNkLT5hcGkpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGkt
Pm1vdXNlX3doZWVsKTsKICAgICBzZC0+YXBpLT5tb3VzZV93aGVlbChzZCwgZXYpOwogfQogCi1z
dGF0aWMgdm9pZCBfZXdrX3ZpZXdfb25fbW91c2VfZG93bih2b2lkKiBkYXRhLCBFdmFzKiBlLCBF
dmFzX09iamVjdCogbywgdm9pZCogZXZlbnRfaW5mbykKK3N0YXRpYyB2b2lkIF9ld2tfdmlld19v
bl9tb3VzZV9kb3duKHZvaWQqIGRhdGEsIEV2YXMqIGV2ZW50VHlwZSwgRXZhc19PYmplY3QqIGNh
bGxiYWNrLCB2b2lkKiBldmVudEluZm8pCiB7Ci0gICAgRXZhc19FdmVudF9Nb3VzZV9Eb3duKiBl
diA9IHN0YXRpY19jYXN0PEV2YXNfRXZlbnRfTW91c2VfRG93bio+KGV2ZW50X2luZm8pOworICAg
IEV2YXNfRXZlbnRfTW91c2VfRG93biogZXYgPSBzdGF0aWNfY2FzdDxFdmFzX0V2ZW50X01vdXNl
X0Rvd24qPihldmVudEluZm8pOwogICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0gc3RhdGlj
X2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEpOwogICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOKHNkLT5hcGkpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5h
cGktPm1vdXNlX2Rvd24pOwogICAgIHNkLT5hcGktPm1vdXNlX2Rvd24oc2QsIGV2KTsKIH0KIAot
c3RhdGljIHZvaWQgX2V3a192aWV3X29uX21vdXNlX3VwKHZvaWQqIGRhdGEsIEV2YXMqIGUsIEV2
YXNfT2JqZWN0KiBvLCB2b2lkKiBldmVudF9pbmZvKQorc3RhdGljIHZvaWQgX2V3a192aWV3X29u
X21vdXNlX3VwKHZvaWQqIGRhdGEsIEV2YXMqIGV2ZW50VHlwZSwgRXZhc19PYmplY3QqIGNhbGxi
YWNrLCB2b2lkKiBldmVudEluZm8pCiB7Ci0gICAgRXZhc19FdmVudF9Nb3VzZV9VcCogZXYgPSBz
dGF0aWNfY2FzdDxFdmFzX0V2ZW50X01vdXNlX1VwKj4oZXZlbnRfaW5mbyk7CisgICAgRXZhc19F
dmVudF9Nb3VzZV9VcCogZXYgPSBzdGF0aWNfY2FzdDxFdmFzX0V2ZW50X01vdXNlX1VwKj4oZXZl
bnRJbmZvKTsKICAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzZCA9IHN0YXRpY19jYXN0PEV3a19W
aWV3X1NtYXJ0X0RhdGEqPihkYXRhKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihz
ZC0+YXBpKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpLT5tb3VzZV91
cCk7CiAgICAgc2QtPmFwaS0+bW91c2VfdXAoc2QsIGV2KTsKIH0KIAotc3RhdGljIHZvaWQgX2V3
a192aWV3X29uX21vdXNlX21vdmUodm9pZCogZGF0YSwgRXZhcyogZSwgRXZhc19PYmplY3QqIG8s
IHZvaWQqIGV2ZW50X2luZm8pCitzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfb25fbW91c2VfbW92ZSh2
b2lkKiBkYXRhLCBFdmFzKiBldmVudFR5cGUsIEV2YXNfT2JqZWN0KiBjYWxsYmFjaywgdm9pZCog
ZXZlbnRJbmZvKQogewotICAgIEV2YXNfRXZlbnRfTW91c2VfTW92ZSogZXYgPSBzdGF0aWNfY2Fz
dDxFdmFzX0V2ZW50X01vdXNlX01vdmUqPihldmVudF9pbmZvKTsKKyAgICBFdmFzX0V2ZW50X01v
dXNlX01vdmUqIGV2ID0gc3RhdGljX2Nhc3Q8RXZhc19FdmVudF9Nb3VzZV9Nb3ZlKj4oZXZlbnRJ
bmZvKTsKICAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzZCA9IHN0YXRpY19jYXN0PEV3a19WaWV3
X1NtYXJ0X0RhdGEqPihkYXRhKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+
YXBpKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpLT5tb3VzZV9tb3Zl
KTsKICAgICBzZC0+YXBpLT5tb3VzZV9tb3ZlKHNkLCBldik7CiB9CiAKLXN0YXRpYyB2b2lkIF9l
d2tfdmlld19vbl9rZXlfZG93bih2b2lkKiBkYXRhLCBFdmFzKiBlLCBFdmFzX09iamVjdCogbywg
dm9pZCogZXZlbnRfaW5mbykKK3N0YXRpYyB2b2lkIF9ld2tfdmlld19vbl9rZXlfZG93bih2b2lk
KiBkYXRhLCBFdmFzKiBldmVudFR5cGUsIEV2YXNfT2JqZWN0KiBjYWxsYmFjaywgdm9pZCogZXZl
bnRJbmZvKQogewotICAgIEV2YXNfRXZlbnRfS2V5X0Rvd24qIGV2ID0gc3RhdGljX2Nhc3Q8RXZh
c19FdmVudF9LZXlfRG93bio+KGV2ZW50X2luZm8pOworICAgIEV2YXNfRXZlbnRfS2V5X0Rvd24q
IGV2ID0gc3RhdGljX2Nhc3Q8RXZhc19FdmVudF9LZXlfRG93bio+KGV2ZW50SW5mbyk7CiAgICAg
RXdrX1ZpZXdfU21hcnRfRGF0YSogc2QgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRh
Kj4oZGF0YSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFwaSk7CiAgICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFwaS0+a2V5X2Rvd24pOwogICAgIHNkLT5h
cGktPmtleV9kb3duKHNkLCBldik7CiB9CiAKLXN0YXRpYyB2b2lkIF9ld2tfdmlld19vbl9rZXlf
dXAodm9pZCogZGF0YSwgRXZhcyogZSwgRXZhc19PYmplY3QqIG8sIHZvaWQqIGV2ZW50X2luZm8p
CitzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfb25fa2V5X3VwKHZvaWQqIGRhdGEsIEV2YXMqIGV2ZW50
VHlwZSwgRXZhc19PYmplY3QqIGNhbGxiYWNrLCB2b2lkKiBldmVudEluZm8pCiB7Ci0gICAgRXZh
c19FdmVudF9LZXlfVXAqIGV2ID0gc3RhdGljX2Nhc3Q8RXZhc19FdmVudF9LZXlfVXAqPihldmVu
dF9pbmZvKTsKKyAgICBFdmFzX0V2ZW50X0tleV9VcCogZXYgPSBzdGF0aWNfY2FzdDxFdmFzX0V2
ZW50X0tleV9VcCo+KGV2ZW50SW5mbyk7CiAgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QgPSBz
dGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZGF0YSk7CiAgICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk4oc2QtPmFwaSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4o
c2QtPmFwaS0+a2V5X3VwKTsKQEAgLTU5NCw4ICs1OTQsOCBAQCBzdGF0aWMgRXdrX1ZpZXdfUHJp
dmF0ZV9EYXRhKiBfZXdrX3ZpZXdfcHJpdl9uZXcoRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QpCiAg
ICAgcHJpdi0+dmlld3BvcnRfYXJndW1lbnRzLnVzZXJTY2FsYWJsZSA9IEVJTkFfVFJVRTsKIAog
ICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNldExvYWRzSW1hZ2VzQXV0b21hdGljYWxseSh0cnVl
KTsKLSAgICBwcml2LT5wYWdlX3NldHRpbmdzLT5zZXREZWZhdWx0Rml4ZWRGb250U2l6ZSgxMik7
Ci0gICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0RGVmYXVsdEZvbnRTaXplKDE2KTsKKyAgICBw
cml2LT5wYWdlX3NldHRpbmdzLT5zZXREZWZhdWx0Rml4ZWRGb250U2l6ZSgxMCk7CisgICAgcHJp
di0+cGFnZV9zZXR0aW5ncy0+c2V0RGVmYXVsdEZvbnRTaXplKDEzKTsKICAgICBwcml2LT5wYWdl
X3NldHRpbmdzLT5zZXRTZXJpZkZvbnRGYW1pbHkoInNlcmlmIik7CiAgICAgcHJpdi0+cGFnZV9z
ZXR0aW5ncy0+c2V0Rml4ZWRGb250RmFtaWx5KCJtb25vdHlwZSIpOwogICAgIHByaXYtPnBhZ2Vf
c2V0dGluZ3MtPnNldFNhbnNTZXJpZkZvbnRGYW1pbHkoInNhbnMiKTsKQEAgLTcyMCwxMyArNzIw
LDEzIEBAIHN0YXRpYyB2b2lkIF9ld2tfdmlld19wcml2X2RlbChFd2tfVmlld19Qcml2YXRlX0Rh
dGEqIHByaXYpCiAgICAgZnJlZShwcml2KTsKIH0KIAotc3RhdGljIHZvaWQgX2V3a192aWV3X3Nt
YXJ0X2FkZChFdmFzX09iamVjdCogbykKK3N0YXRpYyB2b2lkIF9ld2tfdmlld19zbWFydF9hZGQo
RXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgY29uc3QgRXZhc19TbWFydCogc21hcnQgPSBl
dmFzX29iamVjdF9zbWFydF9zbWFydF9nZXQobyk7CisgICAgY29uc3QgRXZhc19TbWFydCogc21h
cnQgPSBldmFzX29iamVjdF9zbWFydF9zbWFydF9nZXQoZXdrVmlldyk7CiAgICAgY29uc3QgRXZh
c19TbWFydF9DbGFzcyogc2MgPSBldmFzX3NtYXJ0X2NsYXNzX2dldChzbWFydCk7CiAgICAgY29u
c3QgRXdrX1ZpZXdfU21hcnRfQ2xhc3MqIGFwaSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgRXdr
X1ZpZXdfU21hcnRfQ2xhc3MqPihzYyk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4o
YXBpLT5iYWNraW5nX3N0b3JlX2FkZCk7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUKG8sIHNkKTsKKyAg
ICBFV0tfVklFV19TRF9HRVQoZXdrVmlldywgc2QpOwogCiAgICAgaWYgKCFzZCkgewogICAgICAg
ICBzZCA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihjYWxsb2MoMSwgc2l6ZW9m
KEV3a19WaWV3X1NtYXJ0X0RhdGEpKSk7CkBAIC03MzQsNyArNzM0LDcgQEAgc3RhdGljIHZvaWQg
X2V3a192aWV3X3NtYXJ0X2FkZChFdmFzX09iamVjdCogbykKICAgICAgICAgICAgIENSSVRJQ0FM
KCJjb3VsZCBub3QgYWxsb2NhdGUgRXdrX1ZpZXdfU21hcnRfRGF0YSIpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2RhdGFfc2V0KG8s
IHNkKTsKKyAgICAgICAgZXZhc19vYmplY3Rfc21hcnRfZGF0YV9zZXQoZXdrVmlldywgc2QpOwog
ICAgIH0KIAogICAgIHNkLT5iZ19jb2xvci5yID0gMjU1OwpAQCAtNzQyLDExICs3NDIsMTEgQEAg
c3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X2FkZChFdmFzX09iamVjdCogbykKICAgICBzZC0+
YmdfY29sb3IuYiA9IDI1NTsKICAgICBzZC0+YmdfY29sb3IuYSA9IDI1NTsKIAotICAgIHNkLT5z
ZWxmID0gbzsKKyAgICBzZC0+c2VsZiA9IGV3a1ZpZXc7CiAgICAgc2QtPl9wcml2ID0gX2V3a192
aWV3X3ByaXZfbmV3KHNkKTsKICAgICBzZC0+YXBpID0gYXBpOwogCi0gICAgX3BhcmVudF9zYy5h
ZGQobyk7CisgICAgX3BhcmVudF9zYy5hZGQoZXdrVmlldyk7CiAKICAgICBpZiAoIXNkLT5fcHJp
dikKICAgICAgICAgcmV0dXJuOwpAQCAtNzU5LDEzICs3NTksMTMgQEAgc3RhdGljIHZvaWQgX2V3
a192aWV3X3NtYXJ0X2FkZChFdmFzX09iamVjdCogbykKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X21lbWJlcl9hZGQoc2QtPmJhY2tpbmdfc3RvcmUsIG8p
OworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X21lbWJlcl9hZGQoc2QtPmJhY2tpbmdfc3RvcmUsIGV3
a1ZpZXcpOwogICAgIGV2YXNfb2JqZWN0X3Nob3coc2QtPmJhY2tpbmdfc3RvcmUpOwogICAgIGV2
YXNfb2JqZWN0X3Bhc3NfZXZlbnRzX3NldChzZC0+YmFja2luZ19zdG9yZSwgRUlOQV9UUlVFKTsK
IAogICAgIHNkLT5ldmVudHNfcmVjdCA9IGV2YXNfb2JqZWN0X3JlY3RhbmdsZV9hZGQoc2QtPmJh
c2UuZXZhcyk7CiAgICAgZXZhc19vYmplY3RfY29sb3Jfc2V0KHNkLT5ldmVudHNfcmVjdCwgMCwg
MCwgMCwgMCk7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfbWVtYmVyX2FkZChzZC0+ZXZlbnRzX3Jl
Y3QsIG8pOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X21lbWJlcl9hZGQoc2QtPmV2ZW50c19yZWN0
LCBld2tWaWV3KTsKICAgICBldmFzX29iamVjdF9zaG93KHNkLT5ldmVudHNfcmVjdCk7CiAKICAg
ICBzZC0+bWFpbl9mcmFtZSA9IGV3a19mcmFtZV9hZGQoc2QtPmJhc2UuZXZhcyk7CkBAIC03NzQs
NyArNzc0LDcgQEAgc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X2FkZChFdmFzX09iamVjdCog
bykKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICghZXdrX2ZyYW1lX2luaXQoc2Qt
Pm1haW5fZnJhbWUsIG8sIHByaXYtPm1haW5fZnJhbWUpKSB7CisgICAgaWYgKCFld2tfZnJhbWVf
aW5pdChzZC0+bWFpbl9mcmFtZSwgZXdrVmlldywgcHJpdi0+bWFpbl9mcmFtZSkpIHsKICAgICAg
ICAgRVJSKCJDb3VsZCBub3QgaW5pdGlhbGl6ZSBtYWluIGZybWUgb2JqZWN0LiIpOwogICAgICAg
ICBldmFzX29iamVjdF9kZWwoc2QtPm1haW5fZnJhbWUpOwogICAgICAgICBzZC0+bWFpbl9mcmFt
ZSA9IDA7CkBAIC03ODUsMTAgKzc4NSwxMCBAQCBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21hcnRf
YWRkKEV2YXNfT2JqZWN0KiBvKQogICAgIH0KIAogICAgIGV2YXNfb2JqZWN0X25hbWVfc2V0KHNk
LT5tYWluX2ZyYW1lLCAiRVdLX0ZyYW1lOm1haW4iKTsKLSAgICBldmFzX29iamVjdF9zbWFydF9t
ZW1iZXJfYWRkKHNkLT5tYWluX2ZyYW1lLCBvKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9tZW1i
ZXJfYWRkKHNkLT5tYWluX2ZyYW1lLCBld2tWaWV3KTsKICAgICBldmFzX29iamVjdF9zaG93KHNk
LT5tYWluX2ZyYW1lKTsKIAotI2RlZmluZSBDT05ORUNUKHMsIGMpIGV2YXNfb2JqZWN0X2V2ZW50
X2NhbGxiYWNrX2FkZChvLCBzLCBjLCBzZCkKKyNkZWZpbmUgQ09OTkVDVChzLCBjKSBldmFzX29i
amVjdF9ldmVudF9jYWxsYmFja19hZGQoZXdrVmlldywgcywgYywgc2QpCiAgICAgQ09OTkVDVChF
VkFTX0NBTExCQUNLX0ZPQ1VTX0lOLCBfZXdrX3ZpZXdfb25fZm9jdXNfaW4pOwogICAgIENPTk5F
Q1QoRVZBU19DQUxMQkFDS19GT0NVU19PVVQsIF9ld2tfdmlld19vbl9mb2N1c19vdXQpOwogICAg
IENPTk5FQ1QoRVZBU19DQUxMQkFDS19NT1VTRV9XSEVFTCwgX2V3a192aWV3X29uX21vdXNlX3do
ZWVsKTsKQEAgLTgwMCwxOSArODAwLDE5IEBAIHN0YXRpYyB2b2lkIF9ld2tfdmlld19zbWFydF9h
ZGQoRXZhc19PYmplY3QqIG8pCiAjdW5kZWYgQ09OTkVDVAogfQogCi1zdGF0aWMgdm9pZCBfZXdr
X3ZpZXdfc21hcnRfZGVsKEV2YXNfT2JqZWN0KiBvKQorc3RhdGljIHZvaWQgX2V3a192aWV3X3Nt
YXJ0X2RlbChFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVQobywg
c2QpOworICAgIEVXS19WSUVXX1NEX0dFVChld2tWaWV3LCBzZCk7CiAgICAgRXdrX1ZpZXdfUHJp
dmF0ZV9EYXRhKiBwcml2ID0gc2QgPyBzZC0+X3ByaXYgOiAwOwogCi0gICAgZXdrX3ZpZXdfc3Rv
cChvKTsKLSAgICBfcGFyZW50X3NjLmRlbChvKTsKKyAgICBld2tfdmlld19zdG9wKGV3a1ZpZXcp
OworICAgIF9wYXJlbnRfc2MuZGVsKGV3a1ZpZXcpOwogICAgIF9ld2tfdmlld19wcml2X2RlbChw
cml2KTsKIH0KIAotc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X3Jlc2l6ZShFdmFzX09iamVj
dCogbywgRXZhc19Db29yZCB3LCBFdmFzX0Nvb3JkIGgpCitzdGF0aWMgdm9pZCBfZXdrX3ZpZXdf
c21hcnRfcmVzaXplKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFdmFzX0Nvb3JkIHcsIEV2YXNfQ29v
cmQgaCkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkKTsKKyAgICBFV0tf
VklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkKTsKIAogICAgIC8vIHRoZXNlIHNob3Vs
ZCBiZSBxdWV1ZWQgYW5kIHByb2Nlc3NlZCBpbiBjYWxjdWxhdGUgYXMgd2VsbCEKICAgICBldmFz
X29iamVjdF9yZXNpemUoc2QtPmJhY2tpbmdfc3RvcmUsIHcsIGgpOwpAQCAtODIxLDE2ICs4MjEs
MTYgQEAgc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X3Jlc2l6ZShFdmFzX09iamVjdCogbywg
RXZhc19Db29yZCB3LCBFdmFzX0Nvb3JkIGgpCiAgICAgX2V3a192aWV3X3NtYXJ0X2NoYW5nZWQo
c2QpOwogfQogCi1zdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21hcnRfbW92ZShFdmFzX09iamVjdCog
bywgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHkpCitzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21h
cnRfbW92ZShFdmFzX09iamVjdCogZXdrVmlldywgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHkp
CiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCk7CisgICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCk7CiAgICAgc2QtPmNoYW5nZWQucG9zaXRpb24g
PSBFSU5BX1RSVUU7CiAgICAgX2V3a192aWV3X3NtYXJ0X2NoYW5nZWQoc2QpOwogfQogCi1zdGF0
aWMgdm9pZCBfZXdrX3ZpZXdfc21hcnRfY2FsY3VsYXRlKEV2YXNfT2JqZWN0KiBvKQorc3RhdGlj
IHZvaWQgX2V3a192aWV3X3NtYXJ0X2NhbGN1bGF0ZShFdmFzX09iamVjdCogZXdrVmlldykKIHsK
LSAgICBFV0tfVklFV19TRF9HRVQobywgc2QpOworICAgIEVXS19WSUVXX1NEX0dFVChld2tWaWV3
LCBzZCk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVQoc2QsIHByaXYpOwogICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOKHNkLT5hcGktPmNvbnRlbnRzX3Jlc2l6ZSk7CiAgICAgRUlOQV9TQUZF
VFlfT05fTlVMTF9SRVRVUk4oc2QtPmFwaS0+c2Nyb2xsc19wcm9jZXNzKTsKQEAgLTg0MiwxMSAr
ODQyLDExIEBAIHN0YXRpYyB2b2lkIF9ld2tfdmlld19zbWFydF9jYWxjdWxhdGUoRXZhc19PYmpl
Y3QqIG8pCiAgICAgaWYgKCFzZC0+bWFpbl9mcmFtZSB8fCAhcHJpdi0+bWFpbl9mcmFtZSkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgZXZhc19vYmplY3RfZ2VvbWV0cnlfZ2V0KG8sICZ4LCAmeSwg
JncsICZoKTsKKyAgICBldmFzX29iamVjdF9nZW9tZXRyeV9nZXQoZXdrVmlldywgJngsICZ5LCAm
dywgJmgpOwogCiAgICAgREJHKCJvPSVwIGdlbz1bJWQsICVkICsgJWR4JWRdLCBjaGFuZ2VkOiBz
aXplPSVoaHUsICIKICAgICAgICAgInNjcm9sbHM9JXp1LCByZXBhaW50cz0lenUiLAotICAgICAg
ICBvLCB4LCB5LCB3LCBoLCBzZC0+Y2hhbmdlZC5zaXplLAorICAgICAgICBld2tWaWV3LCB4LCB5
LCB3LCBoLCBzZC0+Y2hhbmdlZC5zaXplLAogICAgICAgICBwcml2LT5zY3JvbGxzLmNvdW50LCBw
cml2LT5yZXBhaW50cy5jb3VudCk7CiAKICAgICBpZiAoc2QtPmNoYW5nZWQuc2l6ZSAmJiAoKHcg
IT0gc2QtPnZpZXcudykgfHwgKGggIT0gc2QtPnZpZXcuaCkpKSB7CkBAIC04NjUsNyArODY1LDcg
QEAgc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X2NhbGN1bGF0ZShFdmFzX09iamVjdCogbykK
ICAgICAgICAgX2V3a192aWV3X3JlcGFpbnRfYWRkKHByaXYsIDAsIDAsIHcsIGgpOwogCiAgICAg
ICAgIC8vIFRoaXMgY2FsbGJhY2sgaXMgYSBnb29kIHBsYWNlIGUuZy4gdG8gY2hhbmdlIGZpeGVk
IGxheW91dCBzaXplIChld2tfdmlld19maXhlZF9sYXlvdXRfc2l6ZV9zZXQpLgotICAgICAgICBl
dmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKG8sICJ2aWV3LHJlc2l6ZWQiLCAwKTsKKyAg
ICAgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChld2tWaWV3LCAidmlldyxyZXNp
emVkIiwgMCk7CiAgICAgfQogICAgIHNkLT5jaGFuZ2VkLnNpemUgPSBFSU5BX0ZBTFNFOwogCkBA
IC04OTQsMTggKzg5NCwxOCBAQCBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21hcnRfY2FsY3VsYXRl
KEV2YXNfT2JqZWN0KiBvKQogICAgIH0KIH0KIAotc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0
X3Nob3coRXZhc19PYmplY3QqIG8pCitzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21hcnRfc2hvdyhF
dmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8s
IHNkKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkKTsKIAogICAg
IGlmIChldmFzX29iamVjdF9jbGlwZWVzX2dldChzZC0+YmFzZS5jbGlwcGVyKSkKICAgICAgICAg
ZXZhc19vYmplY3Rfc2hvdyhzZC0+YmFzZS5jbGlwcGVyKTsKICAgICBldmFzX29iamVjdF9zaG93
KHNkLT5iYWNraW5nX3N0b3JlKTsKIH0KIAotc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X2hp
ZGUoRXZhc19PYmplY3QqIG8pCitzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21hcnRfaGlkZShFdmFz
X09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNk
KTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkKTsKIAogICAgIGV2
YXNfb2JqZWN0X2hpZGUoc2QtPmJhc2UuY2xpcHBlcik7CiAgICAgZXZhc19vYmplY3RfaGlkZShz
ZC0+YmFja2luZ19zdG9yZSk7CkBAIC0xMDQwLDkgKzEwNDAsOSBAQCBzdGF0aWMgdm9pZCBfZXdr
X3ZpZXdfem9vbV9hbmltYXRpb25fc3RhcnQoRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QpCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX2V3a192aWV3X3pvb21fYW5pbWF0
b3JfY2IsIHNkKTsKIH0KIAotc3RhdGljIFdlYkNvcmU6OlZpZXdwb3J0QXR0cmlidXRlcyBfZXdr
X3ZpZXdfdmlld3BvcnRfYXR0cmlidXRlc19jb21wdXRlKGNvbnN0IEV2YXNfT2JqZWN0KiBvKQor
c3RhdGljIFdlYkNvcmU6OlZpZXdwb3J0QXR0cmlidXRlcyBfZXdrX3ZpZXdfdmlld3BvcnRfYXR0
cmlidXRlc19jb21wdXRlKGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19W
SUVXX1NEX0dFVChvLCBzZCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUKGV3a1ZpZXcsIHNkKTsKICAg
ICBFV0tfVklFV19QUklWX0dFVChzZCwgcHJpdik7CiAKICAgICBpbnQgZGVza3RvcF93aWR0aCA9
IDk4MDsKQEAgLTExMTksOSArMTExOSw5IEBAIEVpbmFfQm9vbCBld2tfdmlld19iYXNlX3NtYXJ0
X3NldChFd2tfVmlld19TbWFydF9DbGFzcyogYXBpKQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9
CiAKLXZvaWQgZXdrX3ZpZXdfZml4ZWRfbGF5b3V0X3NpemVfc2V0KEV2YXNfT2JqZWN0KiBvLCBF
dmFzX0Nvb3JkIHcsIEV2YXNfQ29vcmQgaCkKK3ZvaWQgZXdrX3ZpZXdfZml4ZWRfbGF5b3V0X3Np
emVfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFdmFzX0Nvb3JkIHcsIEV2YXNfQ29vcmQgaCkK
IHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkKTsKKyAgICBFV0tfVklFV19T
RF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkKTsKICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9S
RVRVUk4oc2QsIHByaXYpOwogCiAgICAgV2ViQ29yZTo6RnJhbWVWaWV3KiB2aWV3ID0gcHJpdi0+
bWFpbl9mcmFtZS0+dmlldygpOwpAQCAtMTE0MywxMyArMTE0MywxMyBAQCB2b2lkIGV3a192aWV3
X2ZpeGVkX2xheW91dF9zaXplX3NldChFdmFzX09iamVjdCogbywgRXZhc19Db29yZCB3LCBFdmFz
X0Nvb3JkIGgpCiAgICAgdmlldy0+Zm9yY2VMYXlvdXQoKTsKIH0KIAotdm9pZCBld2tfdmlld19m
aXhlZF9sYXlvdXRfc2l6ZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIG8sIEV2YXNfQ29vcmQqIHcs
IEV2YXNfQ29vcmQqIGgpCit2b2lkIGV3a192aWV3X2ZpeGVkX2xheW91dF9zaXplX2dldChjb25z
dCBFdmFzX09iamVjdCogZXdrVmlldywgRXZhc19Db29yZCogdywgRXZhc19Db29yZCogaCkKIHsK
ICAgICBpZiAodykKICAgICAgICAgKncgPSAwOwogICAgIGlmIChoKQogICAgICAgICAqaCA9IDA7
Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCk7CisgICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVU
VVJOKHNkLCBwcml2KTsKICAgICBXZWJDb3JlOjpGcmFtZVZpZXcqIHZpZXcgPSBwcml2LT5tYWlu
X2ZyYW1lLT52aWV3KCk7CiAgICAgaWYgKHZpZXctPnVzZUZpeGVkTGF5b3V0KCkpIHsKQEAgLTEx
NjEsOSArMTE2MSw5IEBAIHZvaWQgZXdrX3ZpZXdfZml4ZWRfbGF5b3V0X3NpemVfZ2V0KGNvbnN0
IEV2YXNfT2JqZWN0KiBvLCBFdmFzX0Nvb3JkKiB3LCBFdmFzX0NvCiAgICAgfQogfQogCi12b2lk
IGV3a192aWV3X3RoZW1lX3NldChFdmFzX09iamVjdCogbywgY29uc3QgY2hhciogcGF0aCkKK3Zv
aWQgZXdrX3ZpZXdfdGhlbWVfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBjaGFyKiBw
YXRoKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QpOworICAgIEVXS19W
SUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QpOwogICAgIEVXS19WSUVXX1BSSVZfR0VU
X09SX1JFVFVSTihzZCwgcHJpdik7CiAgICAgaWYgKCFlaW5hX3N0cmluZ3NoYXJlX3JlcGxhY2Uo
JnByaXYtPnNldHRpbmdzLnRoZW1lLCBwYXRoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTE3Niwy
MiArMTE3NiwyMiBAQCB2b2lkIGV3a192aWV3X3RoZW1lX3NldChFdmFzX09iamVjdCogbywgY29u
c3QgY2hhciogcGF0aCkKIAogfQogCi1jb25zdCBjaGFyKiBld2tfdmlld190aGVtZV9nZXQoY29u
c3QgRXZhc19PYmplY3QqIG8pCitjb25zdCBjaGFyKiBld2tfdmlld190aGVtZV9nZXQoY29uc3Qg
RXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihv
LCBzZCwgMCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgMCk7
CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCAwKTsKICAgICByZXR1
cm4gcHJpdi0+c2V0dGluZ3MudGhlbWU7CiB9CiAKLUV2YXNfT2JqZWN0KiBld2tfdmlld19mcmFt
ZV9tYWluX2dldChjb25zdCBFdmFzX09iamVjdCogbykKK0V2YXNfT2JqZWN0KiBld2tfdmlld19m
cmFtZV9tYWluX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklF
V19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAwKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVU
VVJOKGV3a1ZpZXcsIHNkLCAwKTsKICAgICByZXR1cm4gc2QtPm1haW5fZnJhbWU7CiB9CiAKLUV2
YXNfT2JqZWN0KiBld2tfdmlld19mcmFtZV9mb2N1c2VkX2dldChjb25zdCBFdmFzX09iamVjdCog
bykKK0V2YXNfT2JqZWN0KiBld2tfdmlld19mcmFtZV9mb2N1c2VkX2dldChjb25zdCBFdmFzX09i
amVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAw
KTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAwKTsKICAgICBF
V0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIDApOwogCiAgICAgV2ViQ29yZTo6
RnJhbWUqIGNvcmUgPSBwcml2LT5wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZEZyYW1l
KCk7CkBAIC0xMjA0LDMzICsxMjA0LDMzIEBAIEV2YXNfT2JqZWN0KiBld2tfdmlld19mcmFtZV9m
b2N1c2VkX2dldChjb25zdCBFdmFzX09iamVjdCogbykKICAgICByZXR1cm4gY2xpZW50LT53ZWJG
cmFtZSgpOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfdXJpX3NldChFdmFzX09iamVjdCogbywg
Y29uc3QgY2hhciogdXJpKQorRWluYV9Cb29sIGV3a192aWV3X3VyaV9zZXQoRXZhc19PYmplY3Qq
IGV3a1ZpZXcsIGNvbnN0IGNoYXIqIHVyaSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVU
VVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3
a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICByZXR1cm4gZXdrX2ZyYW1lX3VyaV9zZXQoc2Qt
Pm1haW5fZnJhbWUsIHVyaSk7CiB9CiAKLWNvbnN0IGNoYXIqIGV3a192aWV3X3VyaV9nZXQoY29u
c3QgRXZhc19PYmplY3QqIG8pCitjb25zdCBjaGFyKiBld2tfdmlld191cmlfZ2V0KGNvbnN0IEV2
YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywg
c2QsIDApOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIDApOwog
ICAgIHJldHVybiBld2tfZnJhbWVfdXJpX2dldChzZC0+bWFpbl9mcmFtZSk7CiB9CiAKLWNvbnN0
IGNoYXIqIGV3a192aWV3X3RpdGxlX2dldChjb25zdCBFdmFzX09iamVjdCogbykKK2NvbnN0IGNo
YXIqIGV3a192aWV3X3RpdGxlX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAwKTsKKyAgICBFV0tfVklFV19TRF9H
RVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAwKTsKICAgICByZXR1cm4gZXdrX2ZyYW1lX3RpdGxl
X2dldChzZC0+bWFpbl9mcmFtZSk7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld19lZGl0YWJsZV9n
ZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCitFaW5hX0Jvb2wgZXdrX3ZpZXdfZWRpdGFibGVfZ2V0
KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9S
RVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAgIHJldHVybiBld2tfZnJhbWVfZWRpdGFibGVf
Z2V0KHNkLT5tYWluX2ZyYW1lKTsKIH0KIAotdm9pZCBld2tfdmlld19iZ19jb2xvcl9zZXQoRXZh
c19PYmplY3QqIG8sIGludCByLCBpbnQgZywgaW50IGIsIGludCBhKQordm9pZCBld2tfdmlld19i
Z19jb2xvcl9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGludCByLCBpbnQgZywgaW50IGIsIGlu
dCBhKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QpOworICAgIEVXS19W
SUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QpOwogICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOKHNkLT5hcGkpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5h
cGktPmJnX2NvbG9yX3NldCk7CiAKQEAgLTEyNzgsNyArMTI3OCw3IEBAIHZvaWQgZXdrX3ZpZXdf
YmdfY29sb3Jfc2V0KEV2YXNfT2JqZWN0KiBvLCBpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSkK
ICAgICB9CiB9CiAKLXZvaWQgZXdrX3ZpZXdfYmdfY29sb3JfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0
KiBvLCBpbnQqIHIsIGludCogZywgaW50KiBiLCBpbnQqIGEpCit2b2lkIGV3a192aWV3X2JnX2Nv
bG9yX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldywgaW50KiByLCBpbnQqIGcsIGludCog
YiwgaW50KiBhKQogewogICAgIGlmIChyKQogICAgICAgICAqciA9IDA7CkBAIC0xMjg4LDcgKzEy
ODgsNyBAQCB2b2lkIGV3a192aWV3X2JnX2NvbG9yX2dldChjb25zdCBFdmFzX09iamVjdCogbywg
aW50KiByLCBpbnQqIGcsIGludCogYiwgaW50KiBhKQogICAgICAgICAqYiA9IDA7CiAgICAgaWYg
KGEpCiAgICAgICAgICphID0gMDsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNk
KTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkKTsKICAgICBpZiAo
cikKICAgICAgICAgKnIgPSBzZC0+YmdfY29sb3IucjsKICAgICBpZiAoZykKQEAgLTEyOTksOSAr
MTI5OSw5IEBAIHZvaWQgZXdrX3ZpZXdfYmdfY29sb3JfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBv
LCBpbnQqIHIsIGludCogZywgaW50KiBiLCBpbnQqIGEpCiAgICAgICAgICphID0gc2QtPmJnX2Nv
bG9yLmE7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld190ZXh0X3NlYXJjaChjb25zdCBFdmFzX09i
amVjdCogbywgY29uc3QgY2hhciogc3RyaW5nLCBFaW5hX0Jvb2wgY2FzZV9zZW5zaXRpdmUsIEVp
bmFfQm9vbCBmb3J3YXJkLCBFaW5hX0Jvb2wgd3JhcCkKK0VpbmFfQm9vbCBld2tfdmlld190ZXh0
X3NlYXJjaChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldywgY29uc3QgY2hhciogc3RyaW5nLCBF
aW5hX0Jvb2wgY2FzZV9zZW5zaXRpdmUsIEVpbmFfQm9vbCBmb3J3YXJkLCBFaW5hX0Jvb2wgd3Jh
cCkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsK
KyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsK
ICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwog
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzdHJpbmcsIEVJTkFfRkFMU0UpOwog
ICAgIFdURjo6VGV4dENhc2VTZW5zaXRpdml0eSBzZW5zaXRpdmU7CkBAIC0xMzMxLDkgKzEzMzEs
OSBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfdGV4dF9zZWFyY2goY29uc3QgRXZhc19PYmplY3QqIG8s
IGNvbnN0IGNoYXIqIHN0cmluZywgRWluYV9CbwogICoKICAqIEByZXR1cm4gbnVtYmVyIG9mIG1h
dGNoZXMuCiAgKi8KLXVuc2lnbmVkIGludCBld2tfdmlld190ZXh0X21hdGNoZXNfbWFyayhFdmFz
X09iamVjdCogbywgY29uc3QgY2hhciogc3RyaW5nLCBFaW5hX0Jvb2wgY2FzZV9zZW5zaXRpdmUs
IEVpbmFfQm9vbCBoaWdobGlnaHQsIHVuc2lnbmVkIGludCBsaW1pdCkKK3Vuc2lnbmVkIGludCBl
d2tfdmlld190ZXh0X21hdGNoZXNfbWFyayhFdmFzX09iamVjdCogZXdrVmlldywgY29uc3QgY2hh
ciogc3RyaW5nLCBFaW5hX0Jvb2wgY2FzZV9zZW5zaXRpdmUsIEVpbmFfQm9vbCBoaWdobGlnaHQs
IHVuc2lnbmVkIGludCBsaW1pdCkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8s
IHNkLCAwKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAwKTsK
ICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIDApOwogICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzdHJpbmcsIDApOwogICAgIFdURjo6VGV4dENhc2VT
ZW5zaXRpdml0eSBzZW5zaXRpdmU7CkBAIC0xMzQ2LDM1ICsxMzQ2LDM1IEBAIHVuc2lnbmVkIGlu
dCBld2tfdmlld190ZXh0X21hdGNoZXNfbWFyayhFdmFzX09iamVjdCogbywgY29uc3QgY2hhciog
c3RyaW5nLCBFaW5hCiAgICAgcmV0dXJuIHByaXYtPnBhZ2UtPm1hcmtBbGxNYXRjaGVzRm9yVGV4
dChTdHJpbmc6OmZyb21VVEY4KHN0cmluZyksIHNlbnNpdGl2ZSwgaGlnaGxpZ2h0LCBsaW1pdCk7
CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld190ZXh0X21hdGNoZXNfdW5tYXJrX2FsbChFdmFzX09i
amVjdCogbykKK0VpbmFfQm9vbCBld2tfdmlld190ZXh0X21hdGNoZXNfdW5tYXJrX2FsbChFdmFz
X09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNk
LCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNk
LCBFSU5BX0ZBTFNFKTsKICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYs
IEVJTkFfRkFMU0UpOwogICAgIHByaXYtPnBhZ2UtPnVubWFya0FsbFRleHRNYXRjaGVzKCk7CiAg
ICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3RleHRfbWF0Y2hl
c19oaWdobGlnaHRfc2V0KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wgaGlnaGxpZ2h0KQorRWlu
YV9Cb29sIGV3a192aWV3X3RleHRfbWF0Y2hlc19oaWdobGlnaHRfc2V0KEV2YXNfT2JqZWN0KiBl
d2tWaWV3LCBFaW5hX0Jvb2wgaGlnaGxpZ2h0KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9S
RVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAgIHJldHVybiBld2tfZnJhbWVfdGV4dF9tYXRj
aGVzX2hpZ2hsaWdodF9zZXQoc2QtPm1haW5fZnJhbWUsIGhpZ2hsaWdodCk7CiB9CiAKLUVpbmFf
Qm9vbCBld2tfdmlld190ZXh0X21hdGNoZXNfaGlnaGxpZ2h0X2dldChjb25zdCBFdmFzX09iamVj
dCogbykKK0VpbmFfQm9vbCBld2tfdmlld190ZXh0X21hdGNoZXNfaGlnaGxpZ2h0X2dldChjb25z
dCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJO
KG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1Zp
ZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICByZXR1cm4gZXdrX2ZyYW1lX3RleHRfbWF0Y2hlc19o
aWdobGlnaHRfZ2V0KHNkLT5tYWluX2ZyYW1lKTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X2Vk
aXRhYmxlX3NldChFdmFzX09iamVjdCogbywgRWluYV9Cb29sIGVkaXRhYmxlKQorRWluYV9Cb29s
IGV3a192aWV3X2VkaXRhYmxlX3NldChFdmFzX09iamVjdCogZXdrVmlldywgRWluYV9Cb29sIGVk
aXRhYmxlKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFM
U0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFM
U0UpOwogICAgIHJldHVybiBld2tfZnJhbWVfZWRpdGFibGVfc2V0KHNkLT5tYWluX2ZyYW1lLCBl
ZGl0YWJsZSk7CiB9CiAKLWNoYXIqIGV3a192aWV3X3NlbGVjdGlvbl9nZXQoY29uc3QgRXZhc19P
YmplY3QqIG8pCitjaGFyKiBld2tfdmlld19zZWxlY3Rpb25fZ2V0KGNvbnN0IEV2YXNfT2JqZWN0
KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIDApOwor
ICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIDApOwogICAgIEVXS19W
SUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgMCk7CiAgICAgQ1N0cmluZyBzID0gcHJp
di0+cGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpLT5lZGl0b3Io
KS0+c2VsZWN0ZWRUZXh0KCkudXRmOCgpOwogICAgIGlmIChzLmlzTnVsbCgpKQpAQCAtMTM4Nyw5
ICsxMzg3LDkgQEAgc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfZWRpdG9yX2NvbW1hbmQoRXdr
X1ZpZXdfUHJpdmF0ZV9EYXRhKiBwcml2LCBjb25zdCBjaGEKICAgICByZXR1cm4gcHJpdi0+cGFn
ZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpLT5lZGl0b3IoKS0+Y29t
bWFuZChXVEY6OlN0cmluZzo6ZnJvbVVURjgoY29tbWFuZCkpLmV4ZWN1dGUodmFsdWUpOwogfQog
Ci1FaW5hX0Jvb2wgZXdrX3ZpZXdfZXhlY3V0ZV9lZGl0b3JfY29tbWFuZChFdmFzX09iamVjdCog
bywgY29uc3QgRXdrX0VkaXRvcl9Db21tYW5kIGNvbW1hbmQsIGNvbnN0IGNoYXIqIHZhbHVlKQor
RWluYV9Cb29sIGV3a192aWV3X2V4ZWN1dGVfZWRpdG9yX2NvbW1hbmQoRXZhc19PYmplY3QqIGV3
a1ZpZXcsIGNvbnN0IEV3a19FZGl0b3JfQ29tbWFuZCBjb21tYW5kLCBjb25zdCBjaGFyKiB2YWx1
ZSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsK
KyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsK
ICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwog
CiAgICAgc3dpdGNoIChjb21tYW5kKSB7CkBAIC0xNDE0LDEwICsxNDE0LDEwIEBAIEVpbmFfQm9v
bCBld2tfdmlld19leGVjdXRlX2VkaXRvcl9jb21tYW5kKEV2YXNfT2JqZWN0KiBvLCBjb25zdCBF
d2tfRWRpdG9yX0NvbW1hCiAgICAgfQogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfY29udGV4dF9t
ZW51X2ZvcndhcmRfZXZlbnQoRXZhc19PYmplY3QqIG8sIGNvbnN0IEV2YXNfRXZlbnRfTW91c2Vf
RG93biogZXYpCitFaW5hX0Jvb2wgZXdrX3ZpZXdfY29udGV4dF9tZW51X2ZvcndhcmRfZXZlbnQo
RXZhc19PYmplY3QqIGV3a1ZpZXcsIGNvbnN0IEV2YXNfRXZlbnRfTW91c2VfRG93biogZXYpCiB7
CiAjaWYgRU5BQkxFKENPTlRFWFRfTUVOVVMpCi0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
TihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tW
aWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNk
LCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBFaW5hX0Jvb2wgbW91c2VfcHJlc3NfaGFuZGxlZCA9
IEVJTkFfRkFMU0U7CiAKQEAgLTE0NTAsODUgKzE0NTAsODUgQEAgRWluYV9Cb29sIGV3a192aWV3
X2NvbnRleHRfbWVudV9mb3J3YXJkX2V2ZW50KEV2YXNfT2JqZWN0KiBvLCBjb25zdCBFdmFzX0V2
ZW50X00KICNlbmRpZgogfQogCi1kb3VibGUgZXdrX3ZpZXdfbG9hZF9wcm9ncmVzc19nZXQoY29u
c3QgRXZhc19PYmplY3QqIG8pCitkb3VibGUgZXdrX3ZpZXdfbG9hZF9wcm9ncmVzc19nZXQoY29u
c3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
TihvLCBzZCwgLTEuMCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBz
ZCwgLTEuMCk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCAtMS4w
KTsKICAgICByZXR1cm4gcHJpdi0+cGFnZS0+cHJvZ3Jlc3MoKS0+ZXN0aW1hdGVkUHJvZ3Jlc3Mo
KTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3N0b3AoRXZhc19PYmplY3QqIG8pCitFaW5hX0Jv
b2wgZXdrX3ZpZXdfc3RvcChFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19T
RF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRf
T1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICByZXR1cm4gZXdrX2ZyYW1l
X3N0b3Aoc2QtPm1haW5fZnJhbWUpOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfcmVsb2FkKEV2
YXNfT2JqZWN0KiBvKQorRWluYV9Cb29sIGV3a192aWV3X3JlbG9hZChFdmFzX09iamVjdCogZXdr
VmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNF
KTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNF
KTsKICAgICByZXR1cm4gZXdrX2ZyYW1lX3JlbG9hZChzZC0+bWFpbl9mcmFtZSk7CiB9CiAKLUVp
bmFfQm9vbCBld2tfdmlld19yZWxvYWRfZnVsbChFdmFzX09iamVjdCogbykKK0VpbmFfQm9vbCBl
d2tfdmlld19yZWxvYWRfZnVsbChFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklF
V19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9H
RVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICByZXR1cm4gZXdrX2Zy
YW1lX3JlbG9hZF9mdWxsKHNkLT5tYWluX2ZyYW1lKTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3
X2JhY2soRXZhc19PYmplY3QqIG8pCitFaW5hX0Jvb2wgZXdrX3ZpZXdfYmFjayhFdmFzX09iamVj
dCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5B
X0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5B
X0ZBTFNFKTsKICAgICByZXR1cm4gZXdrX2ZyYW1lX2JhY2soc2QtPm1haW5fZnJhbWUpOwogfQog
Ci1FaW5hX0Jvb2wgZXdrX3ZpZXdfZm9yd2FyZChFdmFzX09iamVjdCogbykKK0VpbmFfQm9vbCBl
d2tfdmlld19mb3J3YXJkKEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NE
X0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9P
Ul9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAgIHJldHVybiBld2tfZnJhbWVf
Zm9yd2FyZChzZC0+bWFpbl9mcmFtZSk7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld19uYXZpZ2F0
ZShFdmFzX09iamVjdCogbywgaW50IHN0ZXBzKQorRWluYV9Cb29sIGV3a192aWV3X25hdmlnYXRl
KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBpbnQgc3RlcHMpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JF
VFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgcmV0dXJuIGV3a19mcmFtZV9uYXZp
Z2F0ZShzZC0+bWFpbl9mcmFtZSwgc3RlcHMpOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfYmFj
a19wb3NzaWJsZShFdmFzX09iamVjdCogbykKK0VpbmFfQm9vbCBld2tfdmlld19iYWNrX3Bvc3Np
YmxlKEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRV
Uk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdr
Vmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAgIHJldHVybiBld2tfZnJhbWVfYmFja19wb3NzaWJs
ZShzZC0+bWFpbl9mcmFtZSk7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld19mb3J3YXJkX3Bvc3Np
YmxlKEV2YXNfT2JqZWN0KiBvKQorRWluYV9Cb29sIGV3a192aWV3X2ZvcndhcmRfcG9zc2libGUo
RXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihv
LCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3
LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgcmV0dXJuIGV3a19mcmFtZV9mb3J3YXJkX3Bvc3NpYmxl
KHNkLT5tYWluX2ZyYW1lKTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X25hdmlnYXRlX3Bvc3Np
YmxlKEV2YXNfT2JqZWN0KiBvLCBpbnQgc3RlcHMpCitFaW5hX0Jvb2wgZXdrX3ZpZXdfbmF2aWdh
dGVfcG9zc2libGUoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGludCBzdGVwcykKIHsKLSAgICBFV0tf
VklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19T
RF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICByZXR1cm4gZXdr
X2ZyYW1lX25hdmlnYXRlX3Bvc3NpYmxlKHNkLT5tYWluX2ZyYW1lLCBzdGVwcyk7CiB9CiAKLUVp
bmFfQm9vbCBld2tfdmlld19oaXN0b3J5X2VuYWJsZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIG8p
CitFaW5hX0Jvb2wgZXdrX3ZpZXdfaGlzdG9yeV9lbmFibGVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0
KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFf
RkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFf
RkFMU0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9G
QUxTRSk7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYkNvcmU6OkJhY2tGb3J3YXJkTGlzdElt
cGwqPihwcml2LT5wYWdlLT5iYWNrRm9yd2FyZExpc3QoKSktPmVuYWJsZWQoKTsKIH0KIAotRWlu
YV9Cb29sIGV3a192aWV3X2hpc3RvcnlfZW5hYmxlX3NldChFdmFzX09iamVjdCogbywgRWluYV9C
b29sIGVuYWJsZSkKK0VpbmFfQm9vbCBld2tfdmlld19oaXN0b3J5X2VuYWJsZV9zZXQoRXZhc19P
YmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCBlbmFibGUpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JF
VFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1Jf
UkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBzdGF0aWNfY2FzdDxXZWJDb3JlOjpC
YWNrRm9yd2FyZExpc3RJbXBsKj4ocHJpdi0+cGFnZS0+YmFja0ZvcndhcmRMaXN0KCkpLT5zZXRF
bmFibGVkKGVuYWJsZSk7CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotRXdrX0hpc3Rvcnkq
IGV3a192aWV3X2hpc3RvcnlfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQorRXdrX0hpc3Rvcnkq
IGV3a192aWV3X2hpc3RvcnlfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAg
IEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIDApOworICAgIEVXS19WSUVXX1NEX0dF
VF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIDApOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JF
VFVSTihzZCwgcHJpdiwgMCk7CiAgICAgaWYgKCFzdGF0aWNfY2FzdDxXZWJDb3JlOjpCYWNrRm9y
d2FyZExpc3RJbXBsKj4ocHJpdi0+cGFnZS0+YmFja0ZvcndhcmRMaXN0KCkpLT5lbmFibGVkKCkp
IHsKICAgICAgICAgRVJSKCJhc2tlZCBoaXN0b3J5LCBidXQgaXQncyBkaXNhYmxlZCEgUmV0dXJu
aW5nIDAhIik7CkBAIC0xNTM3LDE1ICsxNTM3LDE1IEBAIEV3a19IaXN0b3J5KiBld2tfdmlld19o
aXN0b3J5X2dldChjb25zdCBFdmFzX09iamVjdCogbykKICAgICByZXR1cm4gcHJpdi0+aGlzdG9y
eTsKIH0KIAotZmxvYXQgZXdrX3ZpZXdfem9vbV9nZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCitm
bG9hdCBld2tfdmlld196b29tX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAtMS4wKTsKKyAgICBFV0tfVklFV19T
RF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAtMS4wKTsKICAgICByZXR1cm4gZXdrX2ZyYW1l
X3pvb21fZ2V0KHNkLT5tYWluX2ZyYW1lKTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3pvb21f
c2V0KEV2YXNfT2JqZWN0KiBvLCBmbG9hdCB6b29tLCBFdmFzX0Nvb3JkIGN4LCBFdmFzX0Nvb3Jk
IGN5KQorRWluYV9Cb29sIGV3a192aWV3X3pvb21fc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBm
bG9hdCB6b29tLCBFdmFzX0Nvb3JkIGN4LCBFdmFzX0Nvb3JkIGN5KQogewotICAgIEVXS19WSUVX
X1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dF
VF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVXS19WSUVXX1BSSVZf
R0VUKHNkLCBwcml2KTsKIAogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+
YXBpLCBFSU5BX0ZBTFNFKTsKQEAgLTE1NjksMTUgKzE1NjksMTUgQEAgRWluYV9Cb29sIGV3a192
aWV3X3pvb21fc2V0KEV2YXNfT2JqZWN0KiBvLCBmbG9hdCB6b29tLCBFdmFzX0Nvb3JkIGN4LCBF
dmFzX0Nvb3IKICAgICByZXR1cm4gc2QtPmFwaS0+em9vbV9zZXQoc2QsIHpvb20sIGN4LCBjeSk7
CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld196b29tX3dlYWtfc21vb3RoX3NjYWxlX2dldChjb25z
dCBFdmFzX09iamVjdCogbykKK0VpbmFfQm9vbCBld2tfdmlld196b29tX3dlYWtfc21vb3RoX3Nj
YWxlX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9H
RVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1Jf
UkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICByZXR1cm4gc2QtPnpvb21fd2Vh
a19zbW9vdGhfc2NhbGU7CiB9CiAKLXZvaWQgZXdrX3ZpZXdfem9vbV93ZWFrX3Ntb290aF9zY2Fs
ZV9zZXQoRXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCBzbW9vdGhfc2NhbGUpCit2b2lkIGV3a192
aWV3X3pvb21fd2Vha19zbW9vdGhfc2NhbGVfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5h
X0Jvb2wgc21vb3RoX3NjYWxlKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywg
c2QpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QpOwogICAgIHNt
b290aF9zY2FsZSA9ICEhc21vb3RoX3NjYWxlOwogICAgIGlmIChzZC0+em9vbV93ZWFrX3Ntb290
aF9zY2FsZSA9PSBzbW9vdGhfc2NhbGUpCiAgICAgICAgIHJldHVybjsKQEAgLTE1ODcsOSArMTU4
Nyw5IEBAIHZvaWQgZXdrX3ZpZXdfem9vbV93ZWFrX3Ntb290aF9zY2FsZV9zZXQoRXZhc19PYmpl
Y3QqIG8sIEVpbmFfQm9vbCBzbW9vdGhfc2NhbGUpCiAgICAgc2QtPmFwaS0+em9vbV93ZWFrX3Nt
b290aF9zY2FsZV9zZXQoc2QsIHNtb290aF9zY2FsZSk7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmll
d196b29tX3dlYWtfc2V0KEV2YXNfT2JqZWN0KiBvLCBmbG9hdCB6b29tLCBFdmFzX0Nvb3JkIGN4
LCBFdmFzX0Nvb3JkIGN5KQorRWluYV9Cb29sIGV3a192aWV3X3pvb21fd2Vha19zZXQoRXZhc19P
YmplY3QqIGV3a1ZpZXcsIGZsb2F0IHpvb20sIEV2YXNfQ29vcmQgY3gsIEV2YXNfQ29vcmQgY3kp
CiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7Cisg
ICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAg
ICAgRVdLX1ZJRVdfUFJJVl9HRVQoc2QsIHByaXYpOwogCiAgICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk5fVkFMKHNkLT5hcGksIEVJTkFfRkFMU0UpOwpAQCAtMTYxNSwzOCArMTYxNSwzOCBA
QCBFaW5hX0Jvb2wgZXdrX3ZpZXdfem9vbV93ZWFrX3NldChFdmFzX09iamVjdCogbywgZmxvYXQg
em9vbSwgRXZhc19Db29yZCBjeCwgRXZhcwogICAgIHJldHVybiBzZC0+YXBpLT56b29tX3dlYWtf
c2V0KHNkLCB6b29tLCBjeCwgY3kpOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfem9vbV9hbmlt
YXRlZF9tYXJrX3N0YXJ0KEV2YXNfT2JqZWN0KiBvLCBmbG9hdCB6b29tKQorRWluYV9Cb29sIGV3
a192aWV3X3pvb21fYW5pbWF0ZWRfbWFya19zdGFydChFdmFzX09iamVjdCogZXdrVmlldywgZmxv
YXQgem9vbSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZB
TFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZB
TFNFKTsKICAgICBzZC0+YW5pbWF0ZWRfem9vbS56b29tLnN0YXJ0ID0gem9vbTsKICAgICByZXR1
cm4gRUlOQV9UUlVFOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9tYXJr
X2VuZChFdmFzX09iamVjdCogbywgZmxvYXQgem9vbSkKK0VpbmFfQm9vbCBld2tfdmlld196b29t
X2FuaW1hdGVkX21hcmtfZW5kKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBmbG9hdCB6b29tKQogewot
ICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAgIHNk
LT5hbmltYXRlZF96b29tLnpvb20uZW5kID0gem9vbTsKICAgICByZXR1cm4gRUlOQV9UUlVFOwog
fQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9tYXJrX2N1cnJlbnQoRXZhc19P
YmplY3QqIG8sIGZsb2F0IHpvb20pCitFaW5hX0Jvb2wgZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9t
YXJrX2N1cnJlbnQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGZsb2F0IHpvb20pCiB7Ci0gICAgRVdL
X1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgc2QtPmFuaW1h
dGVkX3pvb20uem9vbS5jdXJyZW50ID0gem9vbTsKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQog
Ci1FaW5hX0Jvb2wgZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9tYXJrX3N0b3AoRXZhc19PYmplY3Qq
IG8pCitFaW5hX0Jvb2wgZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9tYXJrX3N0b3AoRXZhc19PYmpl
Y3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlO
QV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlO
QV9GQUxTRSk7CiAgICAgX2V3a192aWV3X3pvb21fYW5pbWF0ZWRfbWFya19zdG9wKHNkKTsKICAg
ICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfem9vbV9hbmltYXRl
ZF9zZXQoRXZhc19PYmplY3QqIG8sIGZsb2F0IHpvb20sIGZsb2F0IGR1cmF0aW9uLCBFdmFzX0Nv
b3JkIGN4LCBFdmFzX0Nvb3JkIGN5KQorRWluYV9Cb29sIGV3a192aWV3X3pvb21fYW5pbWF0ZWRf
c2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBmbG9hdCB6b29tLCBmbG9hdCBkdXJhdGlvbiwgRXZh
c19Db29yZCBjeCwgRXZhc19Db29yZCBjeSkKIHsKICAgICBkb3VibGUgbm93OwotICAgIEVXS19W
SUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NE
X0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVXS19WSUVXX1BS
SVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk5fVkFMKHNkLT5hcGksIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOX1ZBTChzZC0+YXBpLT56b29tX3dlYWtfc2V0LCBFSU5BX0ZBTFNFKTsK
QEAgLTE2OTIsMjEgKzE2OTIsMjEgQEAgRWluYV9Cb29sIGV3a192aWV3X3pvb21fYW5pbWF0ZWRf
c2V0KEV2YXNfT2JqZWN0KiBvLCBmbG9hdCB6b29tLCBmbG9hdCBkdXJhdGlvbiwKICAgICByZXR1
cm4gRUlOQV9UUlVFOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfem9vbV90ZXh0X29ubHlfZ2V0
KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQorRWluYV9Cb29sIGV3a192aWV3X3pvb21fdGV4dF9vbmx5
X2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRf
T1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVU
VVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICByZXR1cm4gZXdrX2ZyYW1lX3pvb21f
dGV4dF9vbmx5X2dldChzZC0+bWFpbl9mcmFtZSk7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld196
b29tX3RleHRfb25seV9zZXQoRXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCBzZXR0aW5nKQorRWlu
YV9Cb29sIGV3a192aWV3X3pvb21fdGV4dF9vbmx5X3NldChFdmFzX09iamVjdCogZXdrVmlldywg
RWluYV9Cb29sIHNldHRpbmcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBz
ZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBz
ZCwgRUlOQV9GQUxTRSk7CiAgICAgcmV0dXJuIGV3a19mcmFtZV96b29tX3RleHRfb25seV9zZXQo
c2QtPm1haW5fZnJhbWUsIHNldHRpbmcpOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfcHJlX3Jl
bmRlcl9yZWdpb24oRXZhc19PYmplY3QqIG8sIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5LCBF
dmFzX0Nvb3JkIHcsIEV2YXNfQ29vcmQgaCwgZmxvYXQgem9vbSkKK0VpbmFfQm9vbCBld2tfdmll
d19wcmVfcmVuZGVyX3JlZ2lvbihFdmFzX09iamVjdCogZXdrVmlldywgRXZhc19Db29yZCB4LCBF
dmFzX0Nvb3JkIHksIEV2YXNfQ29vcmQgdywgRXZhc19Db29yZCBoLCBmbG9hdCB6b29tKQogewot
ICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVX
S19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5hcGktPnByZV9yZW5kZXJfcmVnaW9uLCBF
SU5BX0ZBTFNFKTsKICAgICBmbG9hdCBjdXJfem9vbTsKQEAgLTE3NDcsOSArMTc0Nyw5IEBAIEVp
bmFfQm9vbCBld2tfdmlld19wcmVfcmVuZGVyX3JlZ2lvbihFdmFzX09iamVjdCogbywgRXZhc19D
b29yZCB4LCBFdmFzX0Nvb3JkIHksCiAgICAgcmV0dXJuIHNkLT5hcGktPnByZV9yZW5kZXJfcmVn
aW9uKHNkLCB4LCB5LCB3LCBoLCB6b29tKTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3ByZV9y
ZW5kZXJfcmVsYXRpdmVfcmFkaXVzKEV2YXNfT2JqZWN0KiBvLCB1bnNpZ25lZCBpbnQgbikKK0Vp
bmFfQm9vbCBld2tfdmlld19wcmVfcmVuZGVyX3JlbGF0aXZlX3JhZGl1cyhFdmFzX09iamVjdCog
ZXdrVmlldywgdW5zaWduZWQgaW50IG4pCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
TihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tW
aWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNk
LCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwo
c2QtPmFwaS0+cHJlX3JlbmRlcl9yZWxhdGl2ZV9yYWRpdXMsIEVJTkFfRkFMU0UpOwogICAgIGZs
b2F0IGN1cl96b29tOwpAQCAtMTc2MSw0NCArMTc2MSw0NCBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdf
cHJlX3JlbmRlcl9yZWxhdGl2ZV9yYWRpdXMoRXZhc19PYmplY3QqIG8sIHVuc2lnbmVkIGludCBu
KQogICAgIHJldHVybiBzZC0+YXBpLT5wcmVfcmVuZGVyX3JlbGF0aXZlX3JhZGl1cyhzZCwgbiwg
Y3VyX3pvb20pOwogfQogCi11bnNpZ25lZCBpbnQgZXdrX3ZpZXdfaW1oX2dldChjb25zdCBFdmFz
X09iamVjdCogbykKK3Vuc2lnbmVkIGludCBld2tfdmlld19pbWhfZ2V0KGNvbnN0IEV2YXNfT2Jq
ZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIDAp
OworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIDApOwogICAgIEVX
S19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgMCk7CiAgICAgcmV0dXJuIHByaXYt
PmltaDsKIH0KIAotdm9pZCBld2tfdmlld19wcmVfcmVuZGVyX2NhbmNlbChFdmFzX09iamVjdCog
bykKK3ZvaWQgZXdrX3ZpZXdfcHJlX3JlbmRlcl9jYW5jZWwoRXZhc19PYmplY3QqIGV3a1ZpZXcp
CiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCk7CisgICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk4oc2QtPmFwaS0+cHJlX3JlbmRlcl9jYW5jZWwpOwogICAgIHNkLT5hcGktPnByZV9yZW5k
ZXJfY2FuY2VsKHNkKTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X2VuYWJsZV9yZW5kZXIoY29u
c3QgRXZhc19PYmplY3QqIG8pCitFaW5hX0Jvb2wgZXdrX3ZpZXdfZW5hYmxlX3JlbmRlcihjb25z
dCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJO
KG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1Zp
ZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwo
c2QtPmFwaS0+ZW5hYmxlX3JlbmRlciwgRUlOQV9GQUxTRSk7CiAgICAgcmV0dXJuIHNkLT5hcGkt
PmVuYWJsZV9yZW5kZXIoc2QpOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfZGlzYWJsZV9yZW5k
ZXIoY29uc3QgRXZhc19PYmplY3QqIG8pCitFaW5hX0Jvb2wgZXdrX3ZpZXdfZGlzYWJsZV9yZW5k
ZXIoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
Tihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk5fVkFMKHNkLT5hcGktPmRpc2FibGVfcmVuZGVyLCBFSU5BX0ZBTFNFKTsKICAgICByZXR1cm4g
c2QtPmFwaS0+ZGlzYWJsZV9yZW5kZXIoc2QpOwogfQogCi1jb25zdCBjaGFyKiBld2tfdmlld19z
ZXR0aW5nX3VzZXJfYWdlbnRfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQorY29uc3QgY2hhciog
ZXdrX3ZpZXdfc2V0dGluZ191c2VyX2FnZW50X2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmll
dykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAwKTsKKyAgICBFV0tf
VklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAwKTsKICAgICBFV0tfVklFV19QUklW
X0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIDApOwogICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy51
c2VyX2FnZW50OwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ191c2VyX2FnZW50X3Nl
dChFdmFzX09iamVjdCogbywgY29uc3QgY2hhciogdXNlcl9hZ2VudCkKK0VpbmFfQm9vbCBld2tf
dmlld19zZXR0aW5nX3VzZXJfYWdlbnRfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBj
aGFyKiB1c2VyX2FnZW50KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2Qs
IEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2Qs
IEVJTkFfRkFMU0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwg
RUlOQV9GQUxTRSk7CiAgICAgaWYgKGVpbmFfc3RyaW5nc2hhcmVfcmVwbGFjZSgmcHJpdi0+c2V0
dGluZ3MudXNlcl9hZ2VudCwgdXNlcl9hZ2VudCkpIHsKICAgICAgICAgV2ViQ29yZTo6RnJhbWVM
b2FkZXJDbGllbnRFZmwqIGNsaWVudCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkZyYW1lTG9hZGVy
Q2xpZW50RWZsKj4ocHJpdi0+bWFpbl9mcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpKTsKQEAgLTE4
MDcsMTYgKzE4MDcsMTYgQEAgRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfdXNlcl9hZ2VudF9z
ZXQoRXZhc19PYmplY3QqIG8sIGNvbnN0IGNoYXIqIHVzZXJfYWdlbnQKICAgICByZXR1cm4gRUlO
QV9UUlVFOwogfQogCi1jb25zdCBjaGFyKiBld2tfdmlld19zZXR0aW5nX3VzZXJfc3R5bGVzaGVl
dF9nZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCitjb25zdCBjaGFyKiBld2tfdmlld19zZXR0aW5n
X3VzZXJfc3R5bGVzaGVldF9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAg
RVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgMCk7CisgICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihld2tWaWV3LCBzZCwgMCk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVU
VVJOKHNkLCBwcml2LCAwKTsKICAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MudXNlcl9zdHlsZXNo
ZWV0OwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ191c2VyX3N0eWxlc2hlZXRfc2V0
KEV2YXNfT2JqZWN0KiBvLCBjb25zdCBjaGFyKiB1cmkpCitFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0
dGluZ191c2VyX3N0eWxlc2hlZXRfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBjaGFy
KiB1cmkpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxT
RSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxT
RSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNF
KTsKICAgICBpZiAoZWluYV9zdHJpbmdzaGFyZV9yZXBsYWNlKCZwcml2LT5zZXR0aW5ncy51c2Vy
X3N0eWxlc2hlZXQsIHVyaSkpIHsKICAgICAgICAgV2ViQ29yZTo6S1VSTCBrdXJsKFdlYkNvcmU6
OktVUkwoKSwgU3RyaW5nOjpmcm9tVVRGOCh1cmkpKTsKQEAgLTE4MjUsMTYgKzE4MjUsMTYgQEAg
RWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfdXNlcl9zdHlsZXNoZWV0X3NldChFdmFzX09iamVj
dCogbywgY29uc3QgY2hhciogdXJpKQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLUVpbmFf
Qm9vbCBld2tfdmlld19zZXR0aW5nX2F1dG9fbG9hZF9pbWFnZXNfZ2V0KGNvbnN0IEV2YXNfT2Jq
ZWN0KiBvKQorRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfYXV0b19sb2FkX2ltYWdlc19nZXQo
Y29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JF
VFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihl
d2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJO
KHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuYXV0b19s
b2FkX2ltYWdlczsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfYXV0b19sb2FkX2lt
YWdlc19zZXQoRXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCBhdXRvbWF0aWMpCitFaW5hX0Jvb2wg
ZXdrX3ZpZXdfc2V0dGluZ19hdXRvX2xvYWRfaW1hZ2VzX3NldChFdmFzX09iamVjdCogZXdrVmll
dywgRWluYV9Cb29sIGF1dG9tYXRpYykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJO
KG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1Zp
ZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2Qs
IHByaXYsIEVJTkFfRkFMU0UpOwogICAgIGF1dG9tYXRpYyA9ICEhYXV0b21hdGljOwogICAgIGlm
IChwcml2LT5zZXR0aW5ncy5hdXRvX2xvYWRfaW1hZ2VzICE9IGF1dG9tYXRpYykgewpAQCAtMTg0
NCwxNiArMTg0NCwxNiBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19hdXRvX2xvYWRfaW1h
Z2VzX3NldChFdmFzX09iamVjdCogbywgRWluYV9Cb29sIGF1dG9tYQogICAgIHJldHVybiBFSU5B
X1RSVUU7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2F1dG9fc2hyaW5rX2ltYWdl
c19nZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCitFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19h
dXRvX3Nocmlua19pbWFnZXNfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAg
IEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19W
SUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVXS19W
SUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgcmV0dXJu
IHByaXYtPnNldHRpbmdzLmF1dG9fc2hyaW5rX2ltYWdlczsKIH0KIAotRWluYV9Cb29sIGV3a192
aWV3X3NldHRpbmdfYXV0b19zaHJpbmtfaW1hZ2VzX3NldChFdmFzX09iamVjdCogbywgRWluYV9C
b29sIGF1dG9tYXRpYykKK0VpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2F1dG9fc2hyaW5rX2lt
YWdlc19zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCBhdXRvbWF0aWMpCiB7Ci0g
ICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdL
X1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdL
X1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBhdXRv
bWF0aWMgPSAhIWF1dG9tYXRpYzsKICAgICBpZiAocHJpdi0+c2V0dGluZ3MuYXV0b19zaHJpbmtf
aW1hZ2VzICE9IGF1dG9tYXRpYykgewpAQCAtMTg2MywzMSArMTg2MywzMSBAQCBFaW5hX0Jvb2wg
ZXdrX3ZpZXdfc2V0dGluZ19hdXRvX3Nocmlua19pbWFnZXNfc2V0KEV2YXNfT2JqZWN0KiBvLCBF
aW5hX0Jvb2wgYXV0bwogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLUVpbmFfQm9vbCBld2tf
dmlld19zZXR0aW5nX2VuYWJsZV9hdXRvX3Jlc2l6ZV93aW5kb3dfZ2V0KGNvbnN0IEV2YXNfT2Jq
ZWN0KiBvKQorRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfZW5hYmxlX2F1dG9fcmVzaXplX3dp
bmRvd19nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRf
T1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICByZXR1cm4gcHJpdi0+c2V0dGlu
Z3MuZW5hYmxlX2F1dG9fcmVzaXplX3dpbmRvdzsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3Nl
dHRpbmdfZW5hYmxlX2F1dG9fcmVzaXplX3dpbmRvd19zZXQoRXZhc19PYmplY3QqIG8sIEVpbmFf
Qm9vbCByZXNpemFibGUpCitFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19lbmFibGVfYXV0b19y
ZXNpemVfd2luZG93X3NldChFdmFzX09iamVjdCogZXdrVmlldywgRWluYV9Cb29sIHJlc2l6YWJs
ZSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsK
KyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsK
ICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwog
ICAgIHByaXYtPnNldHRpbmdzLmVuYWJsZV9hdXRvX3Jlc2l6ZV93aW5kb3cgPSByZXNpemFibGU7
CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdf
ZW5hYmxlX3NjcmlwdHNfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQorRWluYV9Cb29sIGV3a192
aWV3X3NldHRpbmdfZW5hYmxlX3NjcmlwdHNfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3
KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOwor
ICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwog
ICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CiAg
ICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmVuYWJsZV9zY3JpcHRzOwogfQogCi1FaW5hX0Jvb2wg
ZXdrX3ZpZXdfc2V0dGluZ19lbmFibGVfc2NyaXB0c19zZXQoRXZhc19PYmplY3QqIG8sIEVpbmFf
Qm9vbCBlbmFibGUpCitFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19lbmFibGVfc2NyaXB0c19z
ZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCBlbmFibGUpCiB7Ci0gICAgRVdLX1ZJ
RVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJRVdfUFJJ
Vl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBlbmFibGUgPSAhIWVu
YWJsZTsKICAgICBpZiAocHJpdi0+c2V0dGluZ3MuZW5hYmxlX3NjcmlwdHMgIT0gZW5hYmxlKSB7
CkBAIC0xODk3LDE2ICsxODk3LDE2IEBAIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2VuYWJs
ZV9zY3JpcHRzX3NldChFdmFzX09iamVjdCogbywgRWluYV9Cb29sIGVuYWJsZSkKICAgICByZXR1
cm4gRUlOQV9UUlVFOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19lbmFibGVfcGx1
Z2luc19nZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCitFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGlu
Z19lbmFibGVfcGx1Z2luc19nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAg
RVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJ
RVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJ
RVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICByZXR1cm4g
cHJpdi0+c2V0dGluZ3MuZW5hYmxlX3BsdWdpbnM7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld19z
ZXR0aW5nX2VuYWJsZV9wbHVnaW5zX3NldChFdmFzX09iamVjdCogbywgRWluYV9Cb29sIGVuYWJs
ZSkKK0VpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2VuYWJsZV9wbHVnaW5zX3NldChFdmFzX09i
amVjdCogZXdrVmlldywgRWluYV9Cb29sIGVuYWJsZSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRf
T1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVU
VVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9S
RVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIGVuYWJsZSA9ICEhZW5hYmxlOwogICAg
IGlmIChwcml2LT5zZXR0aW5ncy5lbmFibGVfcGx1Z2lucyAhPSBlbmFibGUpIHsKQEAgLTE5MTYs
MTYgKzE5MTYsMTYgQEAgRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfZW5hYmxlX3BsdWdpbnNf
c2V0KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wgZW5hYmxlKQogICAgIHJldHVybiBFSU5BX1RS
VUU7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2VuYWJsZV9mcmFtZV9mbGF0dGVu
aW5nX2dldChjb25zdCBFdmFzX09iamVjdCogbykKK0VpbmFfQm9vbCBld2tfdmlld19zZXR0aW5n
X2VuYWJsZV9mcmFtZV9mbGF0dGVuaW5nX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykK
IHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAg
ICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwogICAg
IHJldHVybiBwcml2LT5zZXR0aW5ncy5lbmFibGVfZnJhbWVfZmxhdHRlbmluZzsKIH0KIAotRWlu
YV9Cb29sIGV3a192aWV3X3NldHRpbmdfZW5hYmxlX2ZyYW1lX2ZsYXR0ZW5pbmdfc2V0KEV2YXNf
T2JqZWN0KiBvLCBFaW5hX0Jvb2wgZW5hYmxlKQorRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdf
ZW5hYmxlX2ZyYW1lX2ZsYXR0ZW5pbmdfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jv
b2wgZW5hYmxlKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFf
RkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFf
RkFMU0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9G
QUxTRSk7CiAgICAgZW5hYmxlID0gISFlbmFibGU7CiAgICAgaWYgKHByaXYtPnNldHRpbmdzLmVu
YWJsZV9mcmFtZV9mbGF0dGVuaW5nICE9IGVuYWJsZSkgewpAQCAtMTkzNSwxNiArMTkzNSwxNiBA
QCBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19lbmFibGVfZnJhbWVfZmxhdHRlbmluZ19zZXQo
RXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbAogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLUVp
bmFfQm9vbCBld2tfdmlld19zZXR0aW5nX3NjcmlwdHNfd2luZG93X29wZW5fZ2V0KGNvbnN0IEV2
YXNfT2JqZWN0KiBvKQorRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfc2NyaXB0c193aW5kb3df
b3Blbl9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRf
T1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICByZXR1cm4gcHJpdi0+c2V0dGlu
Z3Muc2NyaXB0c193aW5kb3dfb3BlbjsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdf
c2NyaXB0c193aW5kb3dfb3Blbl9zZXQoRXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCBhbGxvdykK
K0VpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX3NjcmlwdHNfd2luZG93X29wZW5fc2V0KEV2YXNf
T2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wgYWxsb3cpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JF
VFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1Jf
UkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBhbGxvdyA9ICEhYWxsb3c7CiAgICAg
aWYgKHByaXYtPnNldHRpbmdzLnNjcmlwdHNfd2luZG93X29wZW4gIT0gYWxsb3cpIHsKQEAgLTE5
NTQsMTYgKzE5NTQsMTYgQEAgRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfc2NyaXB0c193aW5k
b3dfb3Blbl9zZXQoRXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCBhbGwKICAgICByZXR1cm4gRUlO
QV9UUlVFOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19zY3JpcHRzX2Nhbl9jbG9z
ZV93aW5kb3dzX2dldChjb25zdCBFdmFzX09iamVjdCogbykKK0VpbmFfQm9vbCBld2tfdmlld19z
ZXR0aW5nX3NjcmlwdHNfY2FuX2Nsb3NlX3dpbmRvd3NfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBl
d2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFM
U0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFM
U0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxT
RSk7CiAgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLnNjcmlwdHNfY2FuX2Nsb3NlX3dpbmRvd3M7
CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX3NjcmlwdHNfY2FuX2Nsb3NlX3dpbmRv
d3Nfc2V0KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wgYWxsb3cpCitFaW5hX0Jvb2wgZXdrX3Zp
ZXdfc2V0dGluZ19zY3JpcHRzX2Nhbl9jbG9zZV93aW5kb3dzX3NldChFdmFzX09iamVjdCogZXdr
VmlldywgRWluYV9Cb29sIGFsbG93KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
bywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmll
dywgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwg
cHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgYWxsb3cgPSAhIWFsbG93OwogICAgIGlmIChwcml2LT5z
ZXR0aW5ncy5zY3JpcHRzX2Nhbl9jbG9zZV93aW5kb3dzICE9IGFsbG93KSB7CkBAIC0xOTczLDE2
ICsxOTczLDE2IEBAIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX3NjcmlwdHNfY2FuX2Nsb3Nl
X3dpbmRvd3Nfc2V0KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0JvCiAgICAgcmV0dXJuIEVJTkFfVFJV
RTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfcmVzaXphYmxlX3RleHRhcmVhc19n
ZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCitFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19yZXNp
emFibGVfdGV4dGFyZWFzX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBF
V0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklF
V19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFV0tfVklF
V19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIHJldHVybiBw
cml2LT5zZXR0aW5ncy5yZXNpemFibGVfdGV4dGFyZWFzOwogfQogCi1FaW5hX0Jvb2wgZXdrX3Zp
ZXdfc2V0dGluZ19yZXNpemFibGVfdGV4dGFyZWFzX3NldChFdmFzX09iamVjdCogbywgRWluYV9C
b29sIGVuYWJsZSkKK0VpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX3Jlc2l6YWJsZV90ZXh0YXJl
YXNfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wgZW5hYmxlKQogewotICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVX
X1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVXS19WSUVX
X1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgZW5hYmxlID0g
ISFlbmFibGU7CiAgICAgaWYgKHByaXYtPnNldHRpbmdzLnJlc2l6YWJsZV90ZXh0YXJlYXMgIT0g
ZW5hYmxlKSB7CkBAIC0xOTkyLDE2ICsxOTkyLDE2IEBAIEVpbmFfQm9vbCBld2tfdmlld19zZXR0
aW5nX3Jlc2l6YWJsZV90ZXh0YXJlYXNfc2V0KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wgZW5h
CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdf
cHJpdmF0ZV9icm93c2luZ19nZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCitFaW5hX0Jvb2wgZXdr
X3ZpZXdfc2V0dGluZ19wcml2YXRlX2Jyb3dzaW5nX2dldChjb25zdCBFdmFzX09iamVjdCogZXdr
VmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNF
KTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNF
KTsKICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0Up
OwogICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5wcml2YXRlX2Jyb3dzaW5nOwogfQogCi1FaW5h
X0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19wcml2YXRlX2Jyb3dzaW5nX3NldChFdmFzX09iamVjdCog
bywgRWluYV9Cb29sIGVuYWJsZSkKK0VpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX3ByaXZhdGVf
YnJvd3Npbmdfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wgZW5hYmxlKQogewot
ICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVX
S19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgZW5h
YmxlID0gISFlbmFibGU7CiAgICAgaWYgKHByaXYtPnNldHRpbmdzLnByaXZhdGVfYnJvd3Npbmcg
IT0gZW5hYmxlKSB7CkBAIC0yMDExLDE2ICsyMDExLDE2IEBAIEVpbmFfQm9vbCBld2tfdmlld19z
ZXR0aW5nX3ByaXZhdGVfYnJvd3Npbmdfc2V0KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wgZW5h
YmxlCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3NldHRp
bmdfb2ZmbGluZV9hcHBfY2FjaGVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQorRWluYV9Cb29s
IGV3a192aWV3X3NldHRpbmdfb2ZmbGluZV9hcHBfY2FjaGVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0
KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFf
RkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFf
RkFMU0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9G
QUxTRSk7CiAgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLm9mZmxpbmVfYXBwX2NhY2hlOwogfQog
Ci1FaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19vZmZsaW5lX2FwcF9jYWNoZV9zZXQoRXZhc19P
YmplY3QqIG8sIEVpbmFfQm9vbCBlbmFibGUpCitFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19v
ZmZsaW5lX2FwcF9jYWNoZV9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCBlbmFi
bGUpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7
CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7
CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsK
ICAgICBlbmFibGUgPSAhIWVuYWJsZTsKICAgICBpZiAocHJpdi0+c2V0dGluZ3Mub2ZmbGluZV9h
cHBfY2FjaGUgIT0gZW5hYmxlKSB7CkBAIC0yMDMxLDE2ICsyMDMxLDE2IEBAIEVpbmFfQm9vbCBl
d2tfdmlld19zZXR0aW5nX29mZmxpbmVfYXBwX2NhY2hlX3NldChFdmFzX09iamVjdCogbywgRWlu
YV9Cb29sIGVuYWJsCiB9CiAKIAotRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfY2FyZXRfYnJv
d3NpbmdfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQorRWluYV9Cb29sIGV3a192aWV3X3NldHRp
bmdfY2FyZXRfYnJvd3NpbmdfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAg
IEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19W
SUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVXS19W
SUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgcmV0dXJu
IHByaXYtPnNldHRpbmdzLmNhcmV0X2Jyb3dzaW5nOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdf
c2V0dGluZ19jYXJldF9icm93c2luZ19zZXQoRXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCBlbmFi
bGUpCitFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19jYXJldF9icm93c2luZ19zZXQoRXZhc19P
YmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCBlbmFibGUpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JF
VFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1Jf
UkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBlbmFibGUgPSAhIWVuYWJsZTsKICAg
ICBpZiAocHJpdi0+c2V0dGluZ3MuY2FyZXRfYnJvd3NpbmcgIT0gZW5hYmxlKSB7CkBAIC0yMDUw
LDExICsyMDUwLDExIEBAIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2NhcmV0X2Jyb3dzaW5n
X3NldChFdmFzX09iamVjdCogbywgRWluYV9Cb29sIGVuYWJsZSkKICAgICByZXR1cm4gRUlOQV9U
UlVFOwogfQogCi1jb25zdCBjaGFyKiBld2tfdmlld19zZXR0aW5nX2VuY29kaW5nX2N1c3RvbV9n
ZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCitjb25zdCBjaGFyKiBld2tfdmlld19zZXR0aW5nX2Vu
Y29kaW5nX2N1c3RvbV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdL
X1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgMCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihld2tWaWV3LCBzZCwgMCk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJO
KHNkLCBwcml2LCAwKTsKLSAgICBFdmFzX09iamVjdCogbWFpbl9mcmFtZSA9IGV3a192aWV3X2Zy
YW1lX21haW5fZ2V0KG8pOworICAgIEV2YXNfT2JqZWN0KiBtYWluX2ZyYW1lID0gZXdrX3ZpZXdf
ZnJhbWVfbWFpbl9nZXQoZXdrVmlldyk7CiAgICAgV2ViQ29yZTo6RnJhbWUqIGNvcmVfZnJhbWUg
PSBld2tfZnJhbWVfY29yZV9nZXQobWFpbl9mcmFtZSk7CiAKICAgICBTdHJpbmcgb3ZlcnJpZGVF
bmNvZGluZyA9IGNvcmVfZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT5vdmVycmlk
ZUVuY29kaW5nKCk7CkBAIC0yMDY2LDExICsyMDY2LDExIEBAIGNvbnN0IGNoYXIqIGV3a192aWV3
X3NldHRpbmdfZW5jb2RpbmdfY3VzdG9tX2dldChjb25zdCBFdmFzX09iamVjdCogbykKICAgICBy
ZXR1cm4gcHJpdi0+c2V0dGluZ3MuZW5jb2RpbmdfY3VzdG9tOwogfQogCi1FaW5hX0Jvb2wgZXdr
X3ZpZXdfc2V0dGluZ19lbmNvZGluZ19jdXN0b21fc2V0KEV2YXNfT2JqZWN0KiBvLCBjb25zdCBj
aGFyKiBlbmNvZGluZykKK0VpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2VuY29kaW5nX2N1c3Rv
bV9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGNvbnN0IGNoYXIqIGVuY29kaW5nKQogewotICAg
IEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19W
SUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVXS19W
SUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7Ci0gICAgRXZhc19P
YmplY3QqIG1haW5fZnJhbWUgPSBld2tfdmlld19mcmFtZV9tYWluX2dldChvKTsKKyAgICBFdmFz
X09iamVjdCogbWFpbl9mcmFtZSA9IGV3a192aWV3X2ZyYW1lX21haW5fZ2V0KGV3a1ZpZXcpOwog
ICAgIFdlYkNvcmU6OkZyYW1lKiBjb3JlX2ZyYW1lID0gZXdrX2ZyYW1lX2NvcmVfZ2V0KG1haW5f
ZnJhbWUpOwogICAgIERCRygiJXMiLCBlbmNvZGluZyk7CiAgICAgZWluYV9zdHJpbmdzaGFyZV9y
ZXBsYWNlKCZwcml2LT5zZXR0aW5ncy5lbmNvZGluZ19jdXN0b20sIGVuY29kaW5nKTsKQEAgLTIw
NzksMjUgKzIwNzksMjUgQEAgRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfZW5jb2RpbmdfY3Vz
dG9tX3NldChFdmFzX09iamVjdCogbywgY29uc3QgY2hhciogZW5jb2QKICAgICByZXR1cm4gRUlO
QV9UUlVFOwogfQogCi1jb25zdCBjaGFyKiBld2tfdmlld19zZXR0aW5nX2VuY29kaW5nX2RlZmF1
bHRfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQorY29uc3QgY2hhciogZXdrX3ZpZXdfc2V0dGlu
Z19lbmNvZGluZ19kZWZhdWx0X2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAwKTsKKyAgICBFV0tfVklFV19TRF9H
RVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAwKTsKICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9S
RVRVUk4oc2QsIHByaXYsIDApOwogICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5lbmNvZGluZ19k
ZWZhdWx0OwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19lbmNvZGluZ19kZWZhdWx0
X3NldChFdmFzX09iamVjdCogbywgY29uc3QgY2hhciogZW5jb2RpbmcpCitFaW5hX0Jvb2wgZXdr
X3ZpZXdfc2V0dGluZ19lbmNvZGluZ19kZWZhdWx0X3NldChFdmFzX09iamVjdCogZXdrVmlldywg
Y29uc3QgY2hhciogZW5jb2RpbmcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihv
LCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3
LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBw
cml2LCBFSU5BX0ZBTFNFKTsKICAgICBpZiAoZWluYV9zdHJpbmdzaGFyZV9yZXBsYWNlKCZwcml2
LT5zZXR0aW5ncy5lbmNvZGluZ19kZWZhdWx0LCBlbmNvZGluZykpCiAgICAgICAgIHByaXYtPnBh
Z2Vfc2V0dGluZ3MtPnNldERlZmF1bHRUZXh0RW5jb2RpbmdOYW1lKFN0cmluZzo6ZnJvbVVURjgo
ZW5jb2RpbmcpKTsKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi1FaW5hX0Jvb2wgZXdrX3Zp
ZXdfc2V0dGluZ19lbmNvZGluZ19kZXRlY3Rvcl9zZXQoRXZhc19PYmplY3QqIG8sIEVpbmFfQm9v
bCBlbmFibGUpCitFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19lbmNvZGluZ19kZXRlY3Rvcl9z
ZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCBlbmFibGUpCiB7Ci0gICAgRVdLX1ZJ
RVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJRVdfUFJJ
Vl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBlbmFibGUgPSAhIWVu
YWJsZTsKICAgICBpZiAocHJpdi0+c2V0dGluZ3MuZW5jb2RpbmdfZGV0ZWN0b3IgIT0gZW5hYmxl
KSB7CkBAIC0yMTA3LDIzICsyMTA3LDIzIEBAIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2Vu
Y29kaW5nX2RldGVjdG9yX3NldChFdmFzX09iamVjdCogbywgRWluYV9Cb29sIGVuYWJsCiAgICAg
cmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfZW5jb2Rp
bmdfZGV0ZWN0b3JfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQorRWluYV9Cb29sIGV3a192aWV3
X3NldHRpbmdfZW5jb2RpbmdfZGV0ZWN0b3JfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3
KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOwor
ICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwog
ICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CiAg
ICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmVuY29kaW5nX2RldGVjdG9yOwogfQogCi1FaW5hX0Jv
b2wgZXdrX3ZpZXdfc2V0dGluZ19lbmFibGVfZGV2ZWxvcGVyX2V4dHJhc19nZXQoY29uc3QgRXZh
c19PYmplY3QqIG8pCitFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19lbmFibGVfZGV2ZWxvcGVy
X2V4dHJhc19nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9H
RVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICByZXR1cm4gcHJpdi0+c2V0
dGluZ3MuZW5hYmxlX2RldmVsb3Blcl9leHRyYXM7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld19z
ZXR0aW5nX2VuYWJsZV9kZXZlbG9wZXJfZXh0cmFzX3NldChFdmFzX09iamVjdCogbywgRWluYV9C
b29sIGVuYWJsZSkKK0VpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2VuYWJsZV9kZXZlbG9wZXJf
ZXh0cmFzX3NldChFdmFzX09iamVjdCogZXdrVmlldywgRWluYV9Cb29sIGVuYWJsZSkKIHsKLSAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tf
VklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFV0tf
VklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIGVuYWJs
ZSA9ICEhZW5hYmxlOwogICAgIGlmIChwcml2LT5zZXR0aW5ncy5lbmFibGVfZGV2ZWxvcGVyX2V4
dHJhcyAhPSBlbmFibGUpIHsKQEAgLTIxMzMsMTYgKzIxMzMsMTYgQEAgRWluYV9Cb29sIGV3a192
aWV3X3NldHRpbmdfZW5hYmxlX2RldmVsb3Blcl9leHRyYXNfc2V0KEV2YXNfT2JqZWN0KiBvLCBF
aW5hX0Jvb2wKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi1pbnQgZXdrX3ZpZXdfc2V0dGlu
Z19mb250X21pbmltdW1fc2l6ZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCitpbnQgZXdrX3Zp
ZXdfc2V0dGluZ19mb250X21pbmltdW1fc2l6ZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1Zp
ZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgMCk7CisgICAgRVdL
X1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgMCk7CiAgICAgRVdLX1ZJRVdfUFJJ
Vl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCAwKTsKICAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3Mu
Zm9udF9taW5pbXVtX3NpemU7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2ZvbnRf
bWluaW11bV9zaXplX3NldChFdmFzX09iamVjdCogbywgaW50IHNpemUpCitFaW5hX0Jvb2wgZXdr
X3ZpZXdfc2V0dGluZ19mb250X21pbmltdW1fc2l6ZV9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcs
IGludCBzaXplKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFf
RkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFf
RkFMU0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9G
QUxTRSk7CiAgICAgaWYgKHByaXYtPnNldHRpbmdzLmZvbnRfbWluaW11bV9zaXplICE9IHNpemUp
IHsKICAgICAgICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0TWluaW11bUZvbnRTaXplKHNpemUp
OwpAQCAtMjE1MSwxNiArMjE1MSwxNiBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19mb250
X21pbmltdW1fc2l6ZV9zZXQoRXZhc19PYmplY3QqIG8sIGludCBzaXplKQogICAgIHJldHVybiBF
SU5BX1RSVUU7CiB9CiAKLWludCBld2tfdmlld19zZXR0aW5nX2ZvbnRfbWluaW11bV9sb2dpY2Fs
X3NpemVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQoraW50IGV3a192aWV3X3NldHRpbmdfZm9u
dF9taW5pbXVtX2xvZ2ljYWxfc2l6ZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7
Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgMCk7CisgICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgMCk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRf
T1JfUkVUVVJOKHNkLCBwcml2LCAwKTsKICAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZm9udF9t
aW5pbXVtX2xvZ2ljYWxfc2l6ZTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfZm9u
dF9taW5pbXVtX2xvZ2ljYWxfc2l6ZV9zZXQoRXZhc19PYmplY3QqIG8sIGludCBzaXplKQorRWlu
YV9Cb29sIGV3a192aWV3X3NldHRpbmdfZm9udF9taW5pbXVtX2xvZ2ljYWxfc2l6ZV9zZXQoRXZh
c19PYmplY3QqIGV3a1ZpZXcsIGludCBzaXplKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9S
RVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVS
TihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgaWYgKHByaXYtPnNldHRpbmdzLmZvbnRfbWlu
aW11bV9sb2dpY2FsX3NpemUgIT0gc2l6ZSkgewogICAgICAgICBwcml2LT5wYWdlX3NldHRpbmdz
LT5zZXRNaW5pbXVtTG9naWNhbEZvbnRTaXplKHNpemUpOwpAQCAtMjE2OSwxNiArMjE2OSwxNiBA
QCBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19mb250X21pbmltdW1fbG9naWNhbF9zaXplX3Nl
dChFdmFzX09iamVjdCogbywgaW50IHNpegogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLWlu
dCBld2tfdmlld19zZXR0aW5nX2ZvbnRfZGVmYXVsdF9zaXplX2dldChjb25zdCBFdmFzX09iamVj
dCogbykKK2ludCBld2tfdmlld19zZXR0aW5nX2ZvbnRfZGVmYXVsdF9zaXplX2dldChjb25zdCBF
dmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8s
IHNkLCAwKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAwKTsK
ICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIDApOwogICAgIHJldHVy
biBwcml2LT5zZXR0aW5ncy5mb250X2RlZmF1bHRfc2l6ZTsKIH0KIAotRWluYV9Cb29sIGV3a192
aWV3X3NldHRpbmdfZm9udF9kZWZhdWx0X3NpemVfc2V0KEV2YXNfT2JqZWN0KiBvLCBpbnQgc2l6
ZSkKK0VpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2ZvbnRfZGVmYXVsdF9zaXplX3NldChFdmFz
X09iamVjdCogZXdrVmlldywgaW50IHNpemUpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JF
VFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihl
d2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJO
KHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBpZiAocHJpdi0+c2V0dGluZ3MuZm9udF9kZWZh
dWx0X3NpemUgIT0gc2l6ZSkgewogICAgICAgICBwcml2LT5wYWdlX3NldHRpbmdzLT5zZXREZWZh
dWx0Rm9udFNpemUoc2l6ZSk7CkBAIC0yMTg3LDE2ICsyMTg3LDE2IEBAIEVpbmFfQm9vbCBld2tf
dmlld19zZXR0aW5nX2ZvbnRfZGVmYXVsdF9zaXplX3NldChFdmFzX09iamVjdCogbywgaW50IHNp
emUpCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotaW50IGV3a192aWV3X3NldHRpbmdfZm9u
dF9tb25vc3BhY2Vfc2l6ZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCitpbnQgZXdrX3ZpZXdf
c2V0dGluZ19mb250X21vbm9zcGFjZV9zaXplX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmll
dykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAwKTsKKyAgICBFV0tf
VklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAwKTsKICAgICBFV0tfVklFV19QUklW
X0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIDApOwogICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5m
b250X21vbm9zcGFjZV9zaXplOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19mb250
X21vbm9zcGFjZV9zaXplX3NldChFdmFzX09iamVjdCogbywgaW50IHNpemUpCitFaW5hX0Jvb2wg
ZXdrX3ZpZXdfc2V0dGluZ19mb250X21vbm9zcGFjZV9zaXplX3NldChFdmFzX09iamVjdCogZXdr
VmlldywgaW50IHNpemUpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwg
RUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwg
RUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBF
SU5BX0ZBTFNFKTsKICAgICBpZiAocHJpdi0+c2V0dGluZ3MuZm9udF9tb25vc3BhY2Vfc2l6ZSAh
PSBzaXplKSB7CiAgICAgICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNldERlZmF1bHRGaXhlZEZv
bnRTaXplKHNpemUpOwpAQCAtMjIwNSw5ICsyMjA1LDkgQEAgRWluYV9Cb29sIGV3a192aWV3X3Nl
dHRpbmdfZm9udF9tb25vc3BhY2Vfc2l6ZV9zZXQoRXZhc19PYmplY3QqIG8sIGludCBzaXplKQog
ICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLWNvbnN0IGNoYXIqIGV3a192aWV3X2ZvbnRfZmFt
aWx5X25hbWVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvLCBFd2tfRm9udF9GYW1pbHkgZm9udF9m
YW1pbHkpCitjb25zdCBjaGFyKiBld2tfdmlld19mb250X2ZhbWlseV9uYW1lX2dldChjb25zdCBF
dmFzX09iamVjdCogZXdrVmlldywgRXdrX0ZvbnRfRmFtaWx5IGZvbnRfZmFtaWx5KQogewotICAg
IEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIDApOworICAgIEVXS19WSUVXX1NEX0dF
VF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIDApOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JF
VFVSTihzZCwgcHJpdiwgMCk7CiAKICAgICBzd2l0Y2ggKGZvbnRfZmFtaWx5KSB7CkBAIC0yMjI3
LDkgKzIyMjcsOSBAQCBjb25zdCBjaGFyKiBld2tfdmlld19mb250X2ZhbWlseV9uYW1lX2dldChj
b25zdCBFdmFzX09iamVjdCogbywgRXdrX0ZvbnRfRmFtaWx5CiAgICAgcmV0dXJuIDA7CiB9CiAK
LUVpbmFfQm9vbCBld2tfdmlld19mb250X2ZhbWlseV9uYW1lX3NldChFdmFzX09iamVjdCogbywg
RXdrX0ZvbnRfRmFtaWx5IGZvbnRfZmFtaWx5LCBjb25zdCBjaGFyKiBuYW1lKQorRWluYV9Cb29s
IGV3a192aWV3X2ZvbnRfZmFtaWx5X25hbWVfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFd2tf
Rm9udF9GYW1pbHkgZm9udF9mYW1pbHksIGNvbnN0IGNoYXIqIG5hbWUpCiB7Ci0gICAgRVdLX1ZJ
RVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJRVdfUFJJ
Vl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKIAogICAgIHN3aXRjaCAoZm9u
dF9mYW1pbHkpIHsKQEAgLTIyNjQsMTYgKzIyNjQsMTYgQEAgRWluYV9Cb29sIGV3a192aWV3X2Zv
bnRfZmFtaWx5X25hbWVfc2V0KEV2YXNfT2JqZWN0KiBvLCBFd2tfRm9udF9GYW1pbHkgZm9udF9m
YW0KICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGlu
Z19zcGF0aWFsX25hdmlnYXRpb25fZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQorRWluYV9Cb29s
IGV3a192aWV3X3NldHRpbmdfc3BhdGlhbF9uYXZpZ2F0aW9uX2dldChjb25zdCBFdmFzX09iamVj
dCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5B
X0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5B
X0ZBTFNFKTsKICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFf
RkFMU0UpOwogICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5zcGF0aWFsX25hdmlnYXRpb247CiB9
CiAKLUVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX3NwYXRpYWxfbmF2aWdhdGlvbl9zZXQoRXZh
c19PYmplY3QqIG8sIEVpbmFfQm9vbCBlbmFibGUpCitFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGlu
Z19zcGF0aWFsX25hdmlnYXRpb25fc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wg
ZW5hYmxlKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFM
U0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFM
U0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxT
RSk7CiAgICAgZW5hYmxlID0gISFlbmFibGU7CiAgICAgaWYgKHByaXYtPnNldHRpbmdzLnNwYXRp
YWxfbmF2aWdhdGlvbiAhPSBlbmFibGUpIHsKQEAgLTIyODMsMTYgKzIyODMsMTYgQEAgRWluYV9C
b29sIGV3a192aWV3X3NldHRpbmdfc3BhdGlhbF9uYXZpZ2F0aW9uX3NldChFdmFzX09iamVjdCog
bywgRWluYV9Cb29sIGVuYWIKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi1FaW5hX0Jvb2wg
ZXdrX3ZpZXdfc2V0dGluZ19sb2NhbF9zdG9yYWdlX2dldChjb25zdCBFdmFzX09iamVjdCogbykK
K0VpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2xvY2FsX3N0b3JhZ2VfZ2V0KGNvbnN0IEV2YXNf
T2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2Qs
IEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2Qs
IEVJTkFfRkFMU0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwg
RUlOQV9GQUxTRSk7CiAgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmxvY2FsX3N0b3JhZ2U7CiB9
CiAKLUVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2xvY2FsX3N0b3JhZ2Vfc2V0KEV2YXNfT2Jq
ZWN0KiBvLCBFaW5hX0Jvb2wgZW5hYmxlKQorRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfbG9j
YWxfc3RvcmFnZV9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCBlbmFibGUpCiB7
Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAg
RVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAg
RVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBl
bmFibGUgPSAhIWVuYWJsZTsKICAgICBpZiAocHJpdi0+c2V0dGluZ3MubG9jYWxfc3RvcmFnZSAh
PSBlbmFibGUpIHsKQEAgLTIzMDIsMTYgKzIzMDIsMTYgQEAgRWluYV9Cb29sIGV3a192aWV3X3Nl
dHRpbmdfbG9jYWxfc3RvcmFnZV9zZXQoRXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCBlbmFibGUp
CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdf
cGFnZV9jYWNoZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCitFaW5hX0Jvb2wgZXdrX3ZpZXdf
c2V0dGluZ19wYWdlX2NhY2hlX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tf
VklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFV0tf
VklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIHJldHVy
biBwcml2LT5zZXR0aW5ncy5wYWdlX2NhY2hlOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0
dGluZ19wYWdlX2NhY2hlX3NldChFdmFzX09iamVjdCogbywgRWluYV9Cb29sIGVuYWJsZSkKK0Vp
bmFfQm9vbCBld2tfdmlld19zZXR0aW5nX3BhZ2VfY2FjaGVfc2V0KEV2YXNfT2JqZWN0KiBld2tW
aWV3LCBFaW5hX0Jvb2wgZW5hYmxlKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
bywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmll
dywgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwg
cHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgZW5hYmxlID0gISFlbmFibGU7CiAgICAgaWYgKHByaXYt
PnNldHRpbmdzLnBhZ2VfY2FjaGUgIT0gZW5hYmxlKSB7CkBAIC0yMzIxLDI1ICsyMzIxLDI1IEBA
IEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX3BhZ2VfY2FjaGVfc2V0KEV2YXNfT2JqZWN0KiBv
LCBFaW5hX0Jvb2wgZW5hYmxlKQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLWNvbnN0IGNo
YXIqIGV3a192aWV3X3NldHRpbmdfbG9jYWxfc3RvcmFnZV9kYXRhYmFzZV9wYXRoX2dldChjb25z
dCBFdmFzX09iamVjdCogbykKK2NvbnN0IGNoYXIqIGV3a192aWV3X3NldHRpbmdfbG9jYWxfc3Rv
cmFnZV9kYXRhYmFzZV9wYXRoX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAwKTsKKyAgICBFV0tfVklFV19TRF9H
RVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAwKTsKICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9S
RVRVUk4oc2QsIHByaXYsIDApOwogICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5sb2NhbF9zdG9y
YWdlX2RhdGFiYXNlX3BhdGg7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2xvY2Fs
X3N0b3JhZ2VfZGF0YWJhc2VfcGF0aF9zZXQoRXZhc19PYmplY3QqIG8sIGNvbnN0IGNoYXIqIHBh
dGgpCitFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19sb2NhbF9zdG9yYWdlX2RhdGFiYXNlX3Bh
dGhfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBjaGFyKiBwYXRoKQogewotICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVX
X1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVXS19WSUVX
X1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgaWYgKGVpbmFf
c3RyaW5nc2hhcmVfcmVwbGFjZSgmcHJpdi0+c2V0dGluZ3MubG9jYWxfc3RvcmFnZV9kYXRhYmFz
ZV9wYXRoLCBwYXRoKSkKICAgICAgICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0TG9jYWxTdG9y
YWdlRGF0YWJhc2VQYXRoKFN0cmluZzo6ZnJvbVVURjgocGF0aCkpOwogICAgIHJldHVybiBFSU5B
X1RSVUU7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX21pbmltdW1fdGltZXJfaW50
ZXJ2YWxfc2V0KEV2YXNfT2JqZWN0KiBvLCBkb3VibGUgaW50ZXJ2YWwpCitFaW5hX0Jvb2wgZXdr
X3ZpZXdfc2V0dGluZ19taW5pbXVtX3RpbWVyX2ludGVydmFsX3NldChFdmFzX09iamVjdCogZXdr
VmlldywgZG91YmxlIGludGVydmFsKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
bywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmll
dywgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwg
cHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgaWYgKGZhYnMocHJpdi0+c2V0dGluZ3MuZG9tX3RpbWVy
X2ludGVydmFsIC0gaW50ZXJ2YWwpID49IHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6ZXBz
aWxvbigpKSB7CiAgICAgICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNldE1pbkRPTVRpbWVySW50
ZXJ2YWwoaW50ZXJ2YWwpOwpAQCAtMjM0OCwxNiArMjM0OCwxNiBAQCBFaW5hX0Jvb2wgZXdrX3Zp
ZXdfc2V0dGluZ19taW5pbXVtX3RpbWVyX2ludGVydmFsX3NldChFdmFzX09iamVjdCogbywgZG91
YmxlIGludAogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLWRvdWJsZSBld2tfdmlld19zZXR0
aW5nX21pbmltdW1fdGltZXJfaW50ZXJ2YWxfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQorZG91
YmxlIGV3a192aWV3X3NldHRpbmdfbWluaW11bV90aW1lcl9pbnRlcnZhbF9nZXQoY29uc3QgRXZh
c19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBz
ZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBz
ZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2
LCBFSU5BX0ZBTFNFKTsKICAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZG9tX3RpbWVyX2ludGVy
dmFsOwogfQogCi1Fd2tfVmlld19TbWFydF9EYXRhKiBld2tfdmlld19zbWFydF9kYXRhX2dldChj
b25zdCBFdmFzX09iamVjdCogbykKK0V3a19WaWV3X1NtYXJ0X0RhdGEqIGV3a192aWV3X3NtYXJ0
X2RhdGFfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NE
X0dFVF9PUl9SRVRVUk4obywgc2QsIDApOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrVmlldywgc2QsIDApOwogICAgIHJldHVybiBzZDsKIH0KIApAQCAtMjYyMiwxMCArMjYyMiwx
MCBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfcGFpbnRfY29udGVudHMoRXdrX1ZpZXdfUHJpdmF0ZV9E
YXRhKiBwcml2LCBjYWlyb190KiBjciwgY29ucwogICoKICAqIEVtaXRzIHNpZ25hbDogInJlYWR5
IiB3aXRoIG5vIHBhcmFtZXRlcnMuCiAgKi8KLXZvaWQgZXdrX3ZpZXdfcmVhZHkoRXZhc19PYmpl
Y3QqIG8pCit2b2lkIGV3a192aWV3X3JlYWR5KEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAg
IERCRygibz0lcCIsIG8pOwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwobywg
InJlYWR5IiwgMCk7CisgICAgREJHKCJvPSVwIiwgZXdrVmlldyk7CisgICAgZXZhc19vYmplY3Rf
c21hcnRfY2FsbGJhY2tfY2FsbChld2tWaWV3LCAicmVhZHkiLCAwKTsKIH0KIAogLyoqCkBAIC0y
NjM2LDkgKzI2MzYsOSBAQCB2b2lkIGV3a192aWV3X3JlYWR5KEV2YXNfT2JqZWN0KiBvKQogICog
RW1pdHMgc2lnbmFsOiAiaW5wdXRtZXRob2QsY2hhbmdlZCIgd2l0aCBhIGJvb2xlYW4gaW5kaWNh
dGluZyB3aGV0aGVyIGl0J3MKICAqIGVuYWJsZWQgb3Igbm90LgogICovCi12b2lkIGV3a192aWV3
X2lucHV0X21ldGhvZF9zdGF0ZV9zZXQoRXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCBhY3RpdmUp
Cit2b2lkIGV3a192aWV3X2lucHV0X21ldGhvZF9zdGF0ZV9zZXQoRXZhc19PYmplY3QqIGV3a1Zp
ZXcsIEVpbmFfQm9vbCBhY3RpdmUpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihv
LCBzZCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCk7CiAgICAg
RVdLX1ZJRVdfUFJJVl9HRVQoc2QsIHByaXYpOwogICAgIFdlYkNvcmU6OkZyYW1lKiBmb2N1c2Vk
RnJhbWUgPSBwcml2LT5wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1l
KCk7CiAKQEAgLTI2NjUsNyArMjY2NSw3IEBAIHZvaWQgZXdrX3ZpZXdfaW5wdXRfbWV0aG9kX3N0
YXRlX3NldChFdmFzX09iamVjdCogbywgRWluYV9Cb29sIGFjdGl2ZSkKICAgICAgICAgfQogICAg
IH0KIAotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwobywgImlucHV0bWV0aG9k
LGNoYW5nZWQiLCAodm9pZCopYWN0aXZlKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFj
a19jYWxsKGV3a1ZpZXcsICJpbnB1dG1ldGhvZCxjaGFuZ2VkIiwgKHZvaWQqKWFjdGl2ZSk7CiB9
CiAKIC8qKgpAQCAtMjY3NCwxMCArMjY3NCwxMCBAQCB2b2lkIGV3a192aWV3X2lucHV0X21ldGhv
ZF9zdGF0ZV9zZXQoRXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCBhY3RpdmUpCiAgKgogICogRW1p
dHMgc2lnbmFsOiAidGl0bGUsY2hhbmdlZCIgd2l0aCBwb2ludGVyIHRvIG5ldyB0aXRsZSBzdHJp
bmcuCiAgKi8KLXZvaWQgZXdrX3ZpZXdfdGl0bGVfc2V0KEV2YXNfT2JqZWN0KiBvLCBjb25zdCBj
aGFyKiB0aXRsZSkKK3ZvaWQgZXdrX3ZpZXdfdGl0bGVfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3
LCBjb25zdCBjaGFyKiB0aXRsZSkKIHsKLSAgICBEQkcoIm89JXAsIHRpdGxlPSVzIiwgbywgdGl0
bGUgPyB0aXRsZSA6ICIobnVsbCkiKTsKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19j
YWxsKG8sICJ0aXRsZSxjaGFuZ2VkIiwgKHZvaWQqKXRpdGxlKTsKKyAgICBEQkcoIm89JXAsIHRp
dGxlPSVzIiwgZXdrVmlldywgdGl0bGUgPyB0aXRsZSA6ICIobnVsbCkiKTsKKyAgICBldmFzX29i
amVjdF9zbWFydF9jYWxsYmFja19jYWxsKGV3a1ZpZXcsICJ0aXRsZSxjaGFuZ2VkIiwgKHZvaWQq
KXRpdGxlKTsKIH0KIAogLyoqCkBAIC0yNjg2LDEyICsyNjg2LDEyIEBAIHZvaWQgZXdrX3ZpZXdf
dGl0bGVfc2V0KEV2YXNfT2JqZWN0KiBvLCBjb25zdCBjaGFyKiB0aXRsZSkKICAqCiAgKiBFbWl0
cyBzaWduYWw6ICJ1cmksY2hhbmdlZCIgd2l0aCBwb2ludGVyIHRvIHRoZSBuZXcgdXJpIHN0cmlu
Zy4KICAqLwotdm9pZCBld2tfdmlld191cmlfY2hhbmdlZChFdmFzX09iamVjdCogbykKK3ZvaWQg
ZXdrX3ZpZXdfdXJpX2NoYW5nZWQoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJ
RVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
Tihld2tWaWV3LCBzZCk7CiAgICAgY29uc3QgY2hhciogdXJpID0gZXdrX2ZyYW1lX3VyaV9nZXQo
c2QtPm1haW5fZnJhbWUpOwotICAgIERCRygibz0lcCwgdXJpPSVzIiwgbywgdXJpID8gdXJpIDog
IihudWxsKSIpOwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwobywgInVyaSxj
aGFuZ2VkIiwgKHZvaWQqKXVyaSk7CisgICAgREJHKCJvPSVwLCB1cmk9JXMiLCBld2tWaWV3LCB1
cmkgPyB1cmkgOiAiKG51bGwpIik7CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2Fs
bChld2tWaWV3LCAidXJpLGNoYW5nZWQiLCAodm9pZCopdXJpKTsKIH0KIAogLyoqCkBAIC0yNzAz
LDkgKzI3MDMsOSBAQCB2b2lkIGV3a192aWV3X3VyaV9jaGFuZ2VkKEV2YXNfT2JqZWN0KiBvKQog
ICoKICAqIEVtaXRzIHNpZ25hbDogImxvYWQsZG9jdW1lbnQsZmluaXNoZWQiIHdpdGggQHAgZnJh
bWUgYXMgdGhlIHBhcmFtZXRlci4KICAqLwotdm9pZCBld2tfdmlld19sb2FkX2RvY3VtZW50X2Zp
bmlzaGVkKEV2YXNfT2JqZWN0KiBvLCBFdmFzX09iamVjdCogZnJhbWUpCit2b2lkIGV3a192aWV3
X2xvYWRfZG9jdW1lbnRfZmluaXNoZWQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV2YXNfT2JqZWN0
KiBmcmFtZSkKIHsKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKG8sICJsb2Fk
LGRvY3VtZW50LGZpbmlzaGVkIiwgZnJhbWUpOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxi
YWNrX2NhbGwoZXdrVmlldywgImxvYWQsZG9jdW1lbnQsZmluaXNoZWQiLCBmcmFtZSk7CiB9CiAK
IC8qKgpAQCAtMjcxNiwxMCArMjcxNiwxMCBAQCB2b2lkIGV3a192aWV3X2xvYWRfZG9jdW1lbnRf
ZmluaXNoZWQoRXZhc19PYmplY3QqIG8sIEV2YXNfT2JqZWN0KiBmcmFtZSkKICAqCiAgKiBFbWl0
cyBzaWduYWw6ICJsb2FkLHN0YXJ0ZWQiIHdpdGggbm8gcGFyYW1ldGVycy4KICAqLwotdm9pZCBl
d2tfdmlld19sb2FkX3N0YXJ0ZWQoRXZhc19PYmplY3QqIG8pCit2b2lkIGV3a192aWV3X2xvYWRf
c3RhcnRlZChFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBEQkcoIm89JXAiLCBvKTsKLSAg
ICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKG8sICJsb2FkLHN0YXJ0ZWQiLCAwKTsK
KyAgICBEQkcoIm89JXAiLCBld2tWaWV3KTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFj
a19jYWxsKGV3a1ZpZXcsICJsb2FkLHN0YXJ0ZWQiLCAwKTsKIH0KIAogLyoqCkBAIC0yNzI5LDEw
ICsyNzI5LDEwIEBAIHZvaWQgZXdrX3ZpZXdfbG9hZF9zdGFydGVkKEV2YXNfT2JqZWN0KiBvKQog
ICoKICAqIEVtaXRzIHNpZ25hbDogImxvYWQsc3RhcnRlZCIgb24gbWFpbiBmcmFtZSB3aXRoIG5v
IHBhcmFtZXRlcnMuCiAgKi8KLXZvaWQgZXdrX3ZpZXdfZnJhbWVfbWFpbl9sb2FkX3N0YXJ0ZWQo
RXZhc19PYmplY3QqIG8pCit2b2lkIGV3a192aWV3X2ZyYW1lX21haW5fbG9hZF9zdGFydGVkKEV2
YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIERCRygibz0lcCIsIG8pOwotICAgIEV2YXNfT2Jq
ZWN0KiBmcmFtZSA9IGV3a192aWV3X2ZyYW1lX21haW5fZ2V0KG8pOworICAgIERCRygibz0lcCIs
IGV3a1ZpZXcpOworICAgIEV2YXNfT2JqZWN0KiBmcmFtZSA9IGV3a192aWV3X2ZyYW1lX21haW5f
Z2V0KGV3a1ZpZXcpOwogICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZnJhbWUs
ICJsb2FkLHN0YXJ0ZWQiLCAwKTsKIH0KIApAQCAtMjc0NCwxMCArMjc0NCwxMCBAQCB2b2lkIGV3
a192aWV3X2ZyYW1lX21haW5fbG9hZF9zdGFydGVkKEV2YXNfT2JqZWN0KiBvKQogICoKICAqIEVt
aXRzIHNpZ25hbDogImxvYWQscHJvdmlzaW9uYWwiIG9uIFZpZXcgd2l0aCBubyBwYXJhbWV0ZXJz
LgogICovCi12b2lkIGV3a192aWV3X2xvYWRfcHJvdmlzaW9uYWwoRXZhc19PYmplY3QqIG8pCit2
b2lkIGV3a192aWV3X2xvYWRfcHJvdmlzaW9uYWwoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0g
ICAgREJHKCJvPSVwIiwgbyk7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChv
LCAibG9hZCxwcm92aXNpb25hbCIsIDApOworICAgIERCRygibz0lcCIsIGV3a1ZpZXcpOworICAg
IGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdrVmlldywgImxvYWQscHJvdmlzaW9u
YWwiLCAwKTsKIH0KIAogLyoqCkBAIC0yNzU4LDEwICsyNzU4LDEwIEBAIHZvaWQgZXdrX3ZpZXdf
bG9hZF9wcm92aXNpb25hbChFdmFzX09iamVjdCogbykKICAqCiAgKiBFbWl0cyBzaWduYWw6ICJs
b2FkLG5ld3dpbmRvdyxzaG93IiBvbiB2aWV3IHdpdGggbm8gcGFyYW1ldGVycy4KICAqLwotdm9p
ZCBld2tfdmlld19sb2FkX3Nob3coRXZhc19PYmplY3QqIG8pCit2b2lkIGV3a192aWV3X2xvYWRf
c2hvdyhFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBEQkcoIm89JXAiLCBvKTsKLSAgICBl
dmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKG8sICJsb2FkLG5ld3dpbmRvdyxzaG93Iiwg
MCk7CisgICAgREJHKCJvPSVwIiwgZXdrVmlldyk7CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2Fs
bGJhY2tfY2FsbChld2tWaWV3LCAibG9hZCxuZXd3aW5kb3csc2hvdyIsIDApOwogfQogCiAKQEAg
LTI3NzEsMTAgKzI3NzEsMTAgQEAgdm9pZCBld2tfdmlld19sb2FkX3Nob3coRXZhc19PYmplY3Qq
IG8pCiAgKgogICogQHBhcmFtIG8gVmlldy4KICAqLwotdm9pZCBld2tfdmlld19mcmFtZV9tYWlu
X2NsZWFyZWQoRXZhc19PYmplY3QqIG8pCit2b2lkIGV3a192aWV3X2ZyYW1lX21haW5fY2xlYXJl
ZChFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBEQkcoIm89JXAiLCBvKTsKLSAgICBFV0tf
VklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkKTsKKyAgICBEQkcoIm89JXAiLCBld2tWaWV3KTsK
KyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkKTsKICAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpLT5mbHVzaCk7CiAgICAgc2QtPmFwaS0+Zmx1c2go
c2QpOwogfQpAQCAtMjc4NywxMCArMjc4NywxMCBAQCB2b2lkIGV3a192aWV3X2ZyYW1lX21haW5f
Y2xlYXJlZChFdmFzX09iamVjdCogbykKICAqCiAgKiBFbWl0cyBzaWduYWw6ICJpY29uLHJlY2Vp
dmVkIiB3aXRoIG5vIHBhcmFtZXRlcnMuCiAgKi8KLXZvaWQgZXdrX3ZpZXdfZnJhbWVfbWFpbl9p
Y29uX3JlY2VpdmVkKEV2YXNfT2JqZWN0KiBvKQordm9pZCBld2tfdmlld19mcmFtZV9tYWluX2lj
b25fcmVjZWl2ZWQoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgREJHKCJvPSVwIiwgbyk7
Ci0gICAgRXZhc19PYmplY3QqIGZyYW1lID0gZXdrX3ZpZXdfZnJhbWVfbWFpbl9nZXQobyk7Cisg
ICAgREJHKCJvPSVwIiwgZXdrVmlldyk7CisgICAgRXZhc19PYmplY3QqIGZyYW1lID0gZXdrX3Zp
ZXdfZnJhbWVfbWFpbl9nZXQoZXdrVmlldyk7CiAgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJh
Y2tfY2FsbChmcmFtZSwgImljb24scmVjZWl2ZWQiLCAwKTsKIH0KIApAQCAtMjgwNCwxMCArMjgw
NCwxMCBAQCB2b2lkIGV3a192aWV3X2ZyYW1lX21haW5faWNvbl9yZWNlaXZlZChFdmFzX09iamVj
dCogbykKICAqIEBub3RlIHRoZXJlIHNob3VsZCBub3QgYmUgYW55IGVycm9yIHN0dWZmIGhlcmUs
IGJ1dCB0cnlpbmcgdG8gYmUKICAqICAgICAgIGNvbXBhdGlibGUgd2l0aCBwcmV2aW91cyBXZWJL
aXQuCiAgKi8KLXZvaWQgZXdrX3ZpZXdfbG9hZF9maW5pc2hlZChFdmFzX09iamVjdCogbywgY29u
c3QgRXdrX0ZyYW1lX0xvYWRfRXJyb3IqIGVycm9yKQordm9pZCBld2tfdmlld19sb2FkX2Zpbmlz
aGVkKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBFd2tfRnJhbWVfTG9hZF9FcnJvciogZXJy
b3IpCiB7Ci0gICAgREJHKCJvPSVwLCBlcnJvcj0lcCIsIG8sIGVycm9yKTsKLSAgICBldmFzX29i
amVjdF9zbWFydF9jYWxsYmFja19jYWxsKG8sICJsb2FkLGZpbmlzaGVkIiwgKHZvaWQqKWVycm9y
KTsKKyAgICBEQkcoIm89JXAsIGVycm9yPSVwIiwgZXdrVmlldywgZXJyb3IpOworICAgIGV2YXNf
b2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdrVmlldywgImxvYWQsZmluaXNoZWQiLCAodm9p
ZCopZXJyb3IpOwogfQogCiAvKioKQEAgLTI4MTYsMTAgKzI4MTYsMTAgQEAgdm9pZCBld2tfdmll
d19sb2FkX2ZpbmlzaGVkKEV2YXNfT2JqZWN0KiBvLCBjb25zdCBFd2tfRnJhbWVfTG9hZF9FcnJv
ciogZXJyb3IpCiAgKgogICogRW1pdHMgc2lnbmFsOiAibG9hZCxlcnJvciIgd2l0aCBwb2ludGVy
IHRvIEV3a19GcmFtZV9Mb2FkX0Vycm9yLgogICovCi12b2lkIGV3a192aWV3X2xvYWRfZXJyb3Io
RXZhc19PYmplY3QqIG8sIGNvbnN0IEV3a19GcmFtZV9Mb2FkX0Vycm9yKiBlcnJvcikKK3ZvaWQg
ZXdrX3ZpZXdfbG9hZF9lcnJvcihFdmFzX09iamVjdCogZXdrVmlldywgY29uc3QgRXdrX0ZyYW1l
X0xvYWRfRXJyb3IqIGVycm9yKQogewotICAgIERCRygibz0lcCwgZXJyb3I9JXAiLCBvLCBlcnJv
cik7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChvLCAibG9hZCxlcnJvciIs
ICh2b2lkKillcnJvcik7CisgICAgREJHKCJvPSVwLCBlcnJvcj0lcCIsIGV3a1ZpZXcsIGVycm9y
KTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKGV3a1ZpZXcsICJsb2FkLGVy
cm9yIiwgKHZvaWQqKWVycm9yKTsKIH0KIAogLyoqCkBAIC0yODI4LDE3ICsyODI4LDE3IEBAIHZv
aWQgZXdrX3ZpZXdfbG9hZF9lcnJvcihFdmFzX09iamVjdCogbywgY29uc3QgRXdrX0ZyYW1lX0xv
YWRfRXJyb3IqIGVycm9yKQogICoKICAqIEVtaXRzIHNpZ25hbDogImxvYWQscHJvZ3Jlc3MiIHdp
dGggcG9pbnRlciB0byBhIGRvdWJsZSBmcm9tIDAuMCB0byAxLjAuCiAgKi8KLXZvaWQgZXdrX3Zp
ZXdfbG9hZF9wcm9ncmVzc19jaGFuZ2VkKEV2YXNfT2JqZWN0KiBvKQordm9pZCBld2tfdmlld19s
b2FkX3Byb2dyZXNzX2NoYW5nZWQoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJ
RVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
Tihld2tWaWV3LCBzZCk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2
KTsKIAogICAgIC8vIEV2YXNfQ29vcmQgdywgaDsKICAgICBkb3VibGUgcHJvZ3Jlc3MgPSBwcml2
LT5wYWdlLT5wcm9ncmVzcygpLT5lc3RpbWF0ZWRQcm9ncmVzcygpOwogCi0gICAgREJHKCJvPSVw
IChwPSUwLjNmKSIsIG8sIHByb2dyZXNzKTsKKyAgICBEQkcoIm89JXAgKHA9JTAuM2YpIiwgZXdr
VmlldywgcHJvZ3Jlc3MpOwogCi0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChv
LCAibG9hZCxwcm9ncmVzcyIsICZwcm9ncmVzcyk7CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2Fs
bGJhY2tfY2FsbChld2tWaWV3LCAibG9hZCxwcm9ncmVzcyIsICZwcm9ncmVzcyk7CiB9CiAKIC8q
KgpAQCAtMjg1MCw5ICsyODUwLDkgQEAgdm9pZCBld2tfdmlld19sb2FkX3Byb2dyZXNzX2NoYW5n
ZWQoRXZhc19PYmplY3QqIG8pCiAgKgogICogRW1pdHMgc2lnbmFsOiAicmVzdG9yZSIgd2l0aCBm
cmFtZS4KICAqLwotdm9pZCBld2tfdmlld19yZXN0b3JlX3N0YXRlKEV2YXNfT2JqZWN0KiBvLCBF
dmFzX09iamVjdCogZnJhbWUpCit2b2lkIGV3a192aWV3X3Jlc3RvcmVfc3RhdGUoRXZhc19PYmpl
Y3QqIGV3a1ZpZXcsIEV2YXNfT2JqZWN0KiBmcmFtZSkKIHsKLSAgICBldmFzX29iamVjdF9zbWFy
dF9jYWxsYmFja19jYWxsKG8sICJyZXN0b3JlIiwgZnJhbWUpOworICAgIGV2YXNfb2JqZWN0X3Nt
YXJ0X2NhbGxiYWNrX2NhbGwoZXdrVmlldywgInJlc3RvcmUiLCBmcmFtZSk7CiB9CiAKIC8qKgpA
QCAtMjg3NiwxMiArMjg3NiwxMiBAQCB2b2lkIGV3a192aWV3X3Jlc3RvcmVfc3RhdGUoRXZhc19P
YmplY3QqIG8sIEV2YXNfT2JqZWN0KiBmcmFtZSkKICAqCiAgKiBAc2VlIGV3a193aW5kb3dfZmVh
dHVyZXNfcmVmKCkuCiAgKi8KLUV2YXNfT2JqZWN0KiBld2tfdmlld193aW5kb3dfY3JlYXRlKEV2
YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wgamF2YXNjcmlwdCwgY29uc3QgV2ViQ29yZTo6V2luZG93
RmVhdHVyZXMqIGNvcmVGZWF0dXJlcykKK0V2YXNfT2JqZWN0KiBld2tfdmlld193aW5kb3dfY3Jl
YXRlKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wgamF2YXNjcmlwdCwgY29uc3QgV2Vi
Q29yZTo6V2luZG93RmVhdHVyZXMqIGNvcmVGZWF0dXJlcykKIHsKLSAgICBFV0tfVklFV19TRF9H
RVRfT1JfUkVUVVJOKG8sIHNkLCAwKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3
a1ZpZXcsIHNkLCAwKTsKIAogICAgIGlmICghc2QtPmFwaS0+d2luZG93X2NyZWF0ZSkKLSAgICAg
ICAgcmV0dXJuIG87CisgICAgICAgIHJldHVybiBld2tWaWV3OwogCiAgICAgRXdrX1dpbmRvd19G
ZWF0dXJlcyogd2luZG93X2ZlYXR1cmVzID0gZXdrX3dpbmRvd19mZWF0dXJlc19uZXdfZnJvbV9j
b3JlKGNvcmVGZWF0dXJlcyk7CiAgICAgaWYgKCF3aW5kb3dfZmVhdHVyZXMpCkBAIC0yOTA0LDEx
ICsyOTA0LDExIEBAIEV2YXNfT2JqZWN0KiBld2tfdmlld193aW5kb3dfY3JlYXRlKEV2YXNfT2Jq
ZWN0KiBvLCBFaW5hX0Jvb2wgamF2YXNjcmlwdCwgY29uc3QKICAqCiAgKiBAcGFyYW0gbyBWaWV3
IHRvIGJlIGNsb3NlZC4KICAqLwotdm9pZCBld2tfdmlld193aW5kb3dfY2xvc2UoRXZhc19PYmpl
Y3QqIG8pCit2b2lkIGV3a192aWV3X3dpbmRvd19jbG9zZShFdmFzX09iamVjdCogZXdrVmlldykK
IHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkKTsKKyAgICBFV0tfVklFV19T
RF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkKTsKIAotICAgIGV3a192aWV3X3N0b3Aobyk7Cisg
ICAgZXdrX3ZpZXdfc3RvcChld2tWaWV3KTsKICAgICBpZiAoIXNkLT5hcGktPndpbmRvd19jbG9z
ZSkKICAgICAgICAgcmV0dXJuOwogICAgIHNkLT5hcGktPndpbmRvd19jbG9zZShzZCk7CkBAIC0y
OTIwLDkgKzI5MjAsOSBAQCB2b2lkIGV3a192aWV3X3dpbmRvd19jbG9zZShFdmFzX09iamVjdCog
bykKICAqCiAgKiBFbWl0cyBzaWduYWw6ICJsaW5rLGhvdmVyLGluIgogICovCi12b2lkIGV3a192
aWV3X21vdXNlX2xpbmtfaG92ZXJfaW4oRXZhc19PYmplY3QqIG8sIHZvaWQqIGRhdGEpCit2b2lk
IGV3a192aWV3X21vdXNlX2xpbmtfaG92ZXJfaW4oRXZhc19PYmplY3QqIGV3a1ZpZXcsIHZvaWQq
IGRhdGEpCiB7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChvLCAibGluayxo
b3ZlcixpbiIsIGRhdGEpOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdr
VmlldywgImxpbmssaG92ZXIsaW4iLCBkYXRhKTsKIH0KIAogLyoqCkBAIC0yOTMxLDkgKzI5MzEs
OSBAQCB2b2lkIGV3a192aWV3X21vdXNlX2xpbmtfaG92ZXJfaW4oRXZhc19PYmplY3QqIG8sIHZv
aWQqIGRhdGEpCiAgKgogICogRW1pdHMgc2lnbmFsOiAibGluayxob3ZlcixvdXQiCiAgKi8KLXZv
aWQgZXdrX3ZpZXdfbW91c2VfbGlua19ob3Zlcl9vdXQoRXZhc19PYmplY3QqIG8pCit2b2lkIGV3
a192aWV3X21vdXNlX2xpbmtfaG92ZXJfb3V0KEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAg
IGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwobywgImxpbmssaG92ZXIsb3V0IiwgMCk7
CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChld2tWaWV3LCAibGluayxob3Zl
cixvdXQiLCAwKTsKIH0KIAogLyoqCkBAIC0yOTQyLDEwICsyOTQyLDEwIEBAIHZvaWQgZXdrX3Zp
ZXdfbW91c2VfbGlua19ob3Zlcl9vdXQoRXZhc19PYmplY3QqIG8pCiAgKgogICogRW1pdHMgc2ln
bmFsOiAidG9vbGJhcnMsdmlzaWJsZSxzZXQiIHdpdGggYSBwb2ludGVyIHRvIGEgYm9vbGVhbi4K
ICAqLwotdm9pZCBld2tfdmlld190b29sYmFyc192aXNpYmxlX3NldChFdmFzX09iamVjdCogbywg
RWluYV9Cb29sIHZpc2libGUpCit2b2lkIGV3a192aWV3X3Rvb2xiYXJzX3Zpc2libGVfc2V0KEV2
YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wgdmlzaWJsZSkKIHsKLSAgICBEQkcoIm89JXAg
KHZpc2libGU9JWQpIiwgbywgISF2aXNpYmxlKTsKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxs
YmFja19jYWxsKG8sICJ0b29sYmFycyx2aXNpYmxlLHNldCIsICZ2aXNpYmxlKTsKKyAgICBEQkco
Im89JXAgKHZpc2libGU9JWQpIiwgZXdrVmlldywgISF2aXNpYmxlKTsKKyAgICBldmFzX29iamVj
dF9zbWFydF9jYWxsYmFja19jYWxsKGV3a1ZpZXcsICJ0b29sYmFycyx2aXNpYmxlLHNldCIsICZ2
aXNpYmxlKTsKIH0KIAogLyoqCkBAIC0yOTU5LDExICsyOTU5LDExIEBAIHZvaWQgZXdrX3ZpZXdf
dG9vbGJhcnNfdmlzaWJsZV9zZXQoRXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCB2aXNpYmxlKQog
ICoKICAqIEVtaXRzIHNpZ25hbDogInRvb2xiYXJzLHZpc2libGUsZ2V0IiB3aXRoIGEgcG9pbnRl
ciB0byBhIGJvb2xlYW4uCiAgKi8KLXZvaWQgZXdrX3ZpZXdfdG9vbGJhcnNfdmlzaWJsZV9nZXQo
RXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCogdmlzaWJsZSkKK3ZvaWQgZXdrX3ZpZXdfdG9vbGJh
cnNfdmlzaWJsZV9nZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCogdmlzaWJsZSkK
IHsKLSAgICBEQkcoIiVzLCBvPSVwIiwgX19mdW5jX18sIG8pOworICAgIERCRygiJXMsIG89JXAi
LCBfX2Z1bmNfXywgZXdrVmlldyk7CiAgICAgKnZpc2libGUgPSBFSU5BX0ZBTFNFOwotICAgIGV2
YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwobywgInRvb2xiYXJzLHZpc2libGUsZ2V0Iiwg
dmlzaWJsZSk7CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChld2tWaWV3LCAi
dG9vbGJhcnMsdmlzaWJsZSxnZXQiLCB2aXNpYmxlKTsKIH0KIAogLyoqCkBAIC0yOTc1LDEwICsy
OTc1LDEwIEBAIHZvaWQgZXdrX3ZpZXdfdG9vbGJhcnNfdmlzaWJsZV9nZXQoRXZhc19PYmplY3Qq
IG8sIEVpbmFfQm9vbCogdmlzaWJsZSkKICAqCiAgKiBFbWl0cyBzaWduYWw6ICJzdGF0dXNiYXIs
dmlzaWJsZSxzZXQiIHdpdGggYSBwb2ludGVyIHRvIGEgYm9vbGVhbi4KICAqLwotdm9pZCBld2tf
dmlld19zdGF0dXNiYXJfdmlzaWJsZV9zZXQoRXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCB2aXNp
YmxlKQordm9pZCBld2tfdmlld19zdGF0dXNiYXJfdmlzaWJsZV9zZXQoRXZhc19PYmplY3QqIGV3
a1ZpZXcsIEVpbmFfQm9vbCB2aXNpYmxlKQogewotICAgIERCRygibz0lcCAodmlzaWJsZT0lZCki
LCBvLCAhIXZpc2libGUpOwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwobywg
InN0YXR1c2Jhcix2aXNpYmxlLHNldCIsICZ2aXNpYmxlKTsKKyAgICBEQkcoIm89JXAgKHZpc2li
bGU9JWQpIiwgZXdrVmlldywgISF2aXNpYmxlKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxs
YmFja19jYWxsKGV3a1ZpZXcsICJzdGF0dXNiYXIsdmlzaWJsZSxzZXQiLCAmdmlzaWJsZSk7CiB9
CiAKIC8qKgpAQCAtMjk5MiwxMSArMjk5MiwxMSBAQCB2b2lkIGV3a192aWV3X3N0YXR1c2Jhcl92
aXNpYmxlX3NldChFdmFzX09iamVjdCogbywgRWluYV9Cb29sIHZpc2libGUpCiAgKgogICogRW1p
dHMgc2lnbmFsOiAic3RhdHVzYmFyLHZpc2libGUsZ2V0IiB3aXRoIGEgcG9pbnRlciB0byBhIGJv
b2xlYW4uCiAgKi8KLXZvaWQgZXdrX3ZpZXdfc3RhdHVzYmFyX3Zpc2libGVfZ2V0KEV2YXNfT2Jq
ZWN0KiBvLCBFaW5hX0Jvb2wqIHZpc2libGUpCit2b2lkIGV3a192aWV3X3N0YXR1c2Jhcl92aXNp
YmxlX2dldChFdmFzX09iamVjdCogZXdrVmlldywgRWluYV9Cb29sKiB2aXNpYmxlKQogewotICAg
IERCRygiJXMsIG89JXAiLCBfX2Z1bmNfXywgbyk7CisgICAgREJHKCIlcywgbz0lcCIsIF9fZnVu
Y19fLCBld2tWaWV3KTsKICAgICAqdmlzaWJsZSA9IEVJTkFfRkFMU0U7Ci0gICAgZXZhc19vYmpl
Y3Rfc21hcnRfY2FsbGJhY2tfY2FsbChvLCAic3RhdHVzYmFyLHZpc2libGUsZ2V0IiwgdmlzaWJs
ZSk7CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChld2tWaWV3LCAic3RhdHVz
YmFyLHZpc2libGUsZ2V0IiwgdmlzaWJsZSk7CiB9CiAKIC8qKgpAQCAtMzAwOCwxMSArMzAwOCwx
MSBAQCB2b2lkIGV3a192aWV3X3N0YXR1c2Jhcl92aXNpYmxlX2dldChFdmFzX09iamVjdCogbywg
RWluYV9Cb29sKiB2aXNpYmxlKQogICoKICAqIEVtaXRzIHNpZ25hbDogInN0YXR1c2Jhcix0ZXh0
LHNldCIgd2l0aCBhIHN0cmluZy4KICAqLwotdm9pZCBld2tfdmlld19zdGF0dXNiYXJfdGV4dF9z
ZXQoRXZhc19PYmplY3QqIG8sIGNvbnN0IGNoYXIqIHRleHQpCit2b2lkIGV3a192aWV3X3N0YXR1
c2Jhcl90ZXh0X3NldChFdmFzX09iamVjdCogZXdrVmlldywgY29uc3QgY2hhciogdGV4dCkKIHsK
LSAgICBEQkcoIm89JXAgKHRleHQ9JXMpIiwgbywgdGV4dCk7CisgICAgREJHKCJvPSVwICh0ZXh0
PSVzKSIsIGV3a1ZpZXcsIHRleHQpOwogICAgIElORigic3RhdHVzIGJhciB0ZXh0IHNldDogJXMi
LCB0ZXh0KTsKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKG8sICJzdGF0dXNi
YXIsdGV4dCxzZXQiLCAodm9pZCopdGV4dCk7CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJh
Y2tfY2FsbChld2tWaWV3LCAic3RhdHVzYmFyLHRleHQsc2V0IiwgKHZvaWQqKXRleHQpOwogfQog
CiAvKioKQEAgLTMwMjQsMTAgKzMwMjQsMTAgQEAgdm9pZCBld2tfdmlld19zdGF0dXNiYXJfdGV4
dF9zZXQoRXZhc19PYmplY3QqIG8sIGNvbnN0IGNoYXIqIHRleHQpCiAgKgogICogRW1pdHMgc2ln
bmFsOiAic2Nyb2xsYmFycyx2aXNpYmxlLHNldCIgd2l0aCBhIHBvaW50ZXIgdG8gYSBib29sZWFu
LgogICovCi12b2lkIGV3a192aWV3X3Njcm9sbGJhcnNfdmlzaWJsZV9zZXQoRXZhc19PYmplY3Qq
IG8sIEVpbmFfQm9vbCB2aXNpYmxlKQordm9pZCBld2tfdmlld19zY3JvbGxiYXJzX3Zpc2libGVf
c2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wgdmlzaWJsZSkKIHsKLSAgICBEQkco
Im89JXAgKHZpc2libGU9JWQpIiwgbywgISF2aXNpYmxlKTsKLSAgICBldmFzX29iamVjdF9zbWFy
dF9jYWxsYmFja19jYWxsKG8sICJzY3JvbGxiYXJzLHZpc2libGUsc2V0IiwgJnZpc2libGUpOwor
ICAgIERCRygibz0lcCAodmlzaWJsZT0lZCkiLCBld2tWaWV3LCAhIXZpc2libGUpOworICAgIGV2
YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdrVmlldywgInNjcm9sbGJhcnMsdmlzaWJs
ZSxzZXQiLCAmdmlzaWJsZSk7CiB9CiAKIC8qKgpAQCAtMzA0MSwxMSArMzA0MSwxMSBAQCB2b2lk
IGV3a192aWV3X3Njcm9sbGJhcnNfdmlzaWJsZV9zZXQoRXZhc19PYmplY3QqIG8sIEVpbmFfQm9v
bCB2aXNpYmxlKQogICoKICAqIEVtaXRzIHNpZ25hbDogInNjcm9sbGJhcnMsdmlzaWJsZSxnZXQi
IHdpdGggYSBwb2ludGVyIHRvIGEgYm9vbGVhbi4KICAqLwotdm9pZCBld2tfdmlld19zY3JvbGxi
YXJzX3Zpc2libGVfZ2V0KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wqIHZpc2libGUpCit2b2lk
IGV3a192aWV3X3Njcm9sbGJhcnNfdmlzaWJsZV9nZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVp
bmFfQm9vbCogdmlzaWJsZSkKIHsKLSAgICBEQkcoIiVzLCBvPSVwIiwgX19mdW5jX18sIG8pOwor
ICAgIERCRygiJXMsIG89JXAiLCBfX2Z1bmNfXywgZXdrVmlldyk7CiAgICAgKnZpc2libGUgPSBF
SU5BX0ZBTFNFOwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwobywgInNjcm9s
bGJhcnMsdmlzaWJsZSxnZXQiLCB2aXNpYmxlKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxs
YmFja19jYWxsKGV3a1ZpZXcsICJzY3JvbGxiYXJzLHZpc2libGUsZ2V0IiwgdmlzaWJsZSk7CiB9
CiAKIC8qKgpAQCAtMzA1NywxMCArMzA1NywxMCBAQCB2b2lkIGV3a192aWV3X3Njcm9sbGJhcnNf
dmlzaWJsZV9nZXQoRXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCogdmlzaWJsZSkKICAqCiAgKiBF
bWl0cyBzaWduYWw6ICJtZW51YmFyLHZpc2libGUsc2V0IiB3aXRoIGEgcG9pbnRlciB0byBhIGJv
b2xlYW4uCiAgKi8KLXZvaWQgZXdrX3ZpZXdfbWVudWJhcl92aXNpYmxlX3NldChFdmFzX09iamVj
dCogbywgRWluYV9Cb29sIHZpc2libGUpCit2b2lkIGV3a192aWV3X21lbnViYXJfdmlzaWJsZV9z
ZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCB2aXNpYmxlKQogewotICAgIERCRygi
bz0lcCAodmlzaWJsZT0lZCkiLCBvLCAhIXZpc2libGUpOwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0
X2NhbGxiYWNrX2NhbGwobywgIm1lbnViYXIsdmlzaWJsZSxzZXQiLCAmdmlzaWJsZSk7CisgICAg
REJHKCJvPSVwICh2aXNpYmxlPSVkKSIsIGV3a1ZpZXcsICEhdmlzaWJsZSk7CisgICAgZXZhc19v
YmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChld2tWaWV3LCAibWVudWJhcix2aXNpYmxlLHNldCIs
ICZ2aXNpYmxlKTsKIH0KIAogLyoqCkBAIC0zMDc0LDExICszMDc0LDExIEBAIHZvaWQgZXdrX3Zp
ZXdfbWVudWJhcl92aXNpYmxlX3NldChFdmFzX09iamVjdCogbywgRWluYV9Cb29sIHZpc2libGUp
CiAgKgogICogRW1pdHMgc2lnbmFsOiAibWVudWJhcix2aXNpYmxlLGdldCIgd2l0aCBhIHBvaW50
ZXIgdG8gYSBib29sZWFuLgogICovCi12b2lkIGV3a192aWV3X21lbnViYXJfdmlzaWJsZV9nZXQo
RXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCogdmlzaWJsZSkKK3ZvaWQgZXdrX3ZpZXdfbWVudWJh
cl92aXNpYmxlX2dldChFdmFzX09iamVjdCogZXdrVmlldywgRWluYV9Cb29sKiB2aXNpYmxlKQog
ewotICAgIERCRygiJXMsIG89JXAiLCBfX2Z1bmNfXywgbyk7CisgICAgREJHKCIlcywgbz0lcCIs
IF9fZnVuY19fLCBld2tWaWV3KTsKICAgICAqdmlzaWJsZSA9IEVJTkFfRkFMU0U7Ci0gICAgZXZh
c19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChvLCAibWVudWJhcix2aXNpYmxlLGdldCIsIHZp
c2libGUpOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdrVmlldywgIm1l
bnViYXIsdmlzaWJsZSxnZXQiLCB2aXNpYmxlKTsKIH0KIAogLyoqCkBAIC0zMDkxLDEwICszMDkx
LDEwIEBAIHZvaWQgZXdrX3ZpZXdfbWVudWJhcl92aXNpYmxlX2dldChFdmFzX09iamVjdCogbywg
RWluYV9Cb29sKiB2aXNpYmxlKQogICogRW1pdHMgc2lnbmFsOiAidG9vbHRpcCx0ZXh0LHNldCIg
d2l0aCBhIHN0cmluZy4gSWYgdG9vbHRpcCBtdXN0IGJlIGFjdHVhbGx5CiAgKiByZW1vdmVkLCB0
ZXh0IHdpbGwgYmUgMCBvciAnXDAnCiAgKi8KLXZvaWQgZXdrX3ZpZXdfdG9vbHRpcF90ZXh0X3Nl
dChFdmFzX09iamVjdCogbywgY29uc3QgY2hhciogdGV4dCkKK3ZvaWQgZXdrX3ZpZXdfdG9vbHRp
cF90ZXh0X3NldChFdmFzX09iamVjdCogZXdrVmlldywgY29uc3QgY2hhciogdGV4dCkKIHsKLSAg
ICBEQkcoIm89JXAgdGV4dD0lcyIsIG8sIHRleHQpOwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2Nh
bGxiYWNrX2NhbGwobywgInRvb2x0aXAsdGV4dCxzZXQiLCAodm9pZCopdGV4dCk7CisgICAgREJH
KCJvPSVwIHRleHQ9JXMiLCBld2tWaWV3LCB0ZXh0KTsKKyAgICBldmFzX29iamVjdF9zbWFydF9j
YWxsYmFja19jYWxsKGV3a1ZpZXcsICJ0b29sdGlwLHRleHQsc2V0IiwgKHZvaWQqKXRleHQpOwog
fQogCiAvKioKQEAgLTMxMDYsMTkgKzMxMDYsMTkgQEAgdm9pZCBld2tfdmlld190b29sdGlwX3Rl
eHRfc2V0KEV2YXNfT2JqZWN0KiBvLCBjb25zdCBjaGFyKiB0ZXh0KQogICogQHNvdXJjZUlEIFNv
dXJjZSBpZC4KICAqCiAgKi8KLXZvaWQgZXdrX3ZpZXdfYWRkX2NvbnNvbGVfbWVzc2FnZShFdmFz
X09iamVjdCogbywgY29uc3QgY2hhciogbWVzc2FnZSwgdW5zaWduZWQgaW50IGxpbmVOdW1iZXIs
IGNvbnN0IGNoYXIqIHNvdXJjZUlEKQordm9pZCBld2tfdmlld19hZGRfY29uc29sZV9tZXNzYWdl
KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBjaGFyKiBtZXNzYWdlLCB1bnNpZ25lZCBpbnQg
bGluZU51bWJlciwgY29uc3QgY2hhciogc291cmNlSUQpCiB7Ci0gICAgREJHKCJvPSVwIG1lc3Nh
Z2U9JXMgbGluZU51bWJlcj0ldSBzb3VyY2VJRD0lcyIsIG8sIG1lc3NhZ2UsIGxpbmVOdW1iZXIs
IHNvdXJjZUlEKTsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkKTsKKyAgICBE
QkcoIm89JXAgbWVzc2FnZT0lcyBsaW5lTnVtYmVyPSV1IHNvdXJjZUlEPSVzIiwgZXdrVmlldywg
bWVzc2FnZSwgbGluZU51bWJlciwgc291cmNlSUQpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9S
RVRVUk4oZXdrVmlldywgc2QpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5h
cGkpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGktPmFkZF9jb25zb2xl
X21lc3NhZ2UpOwogICAgIHNkLT5hcGktPmFkZF9jb25zb2xlX21lc3NhZ2Uoc2QsIG1lc3NhZ2Us
IGxpbmVOdW1iZXIsIHNvdXJjZUlEKTsKIH0KIAotYm9vbCBld2tfdmlld19mb2N1c19jYW5fY3lj
bGUoRXZhc19PYmplY3QqIG8sIEV3a19Gb2N1c19EaXJlY3Rpb24gZGlyZWN0aW9uKQorYm9vbCBl
d2tfdmlld19mb2N1c19jYW5fY3ljbGUoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV3a19Gb2N1c19E
aXJlY3Rpb24gZGlyZWN0aW9uKQogewotICAgIERCRygibz0lcCBkaXJlY3Rpb249JWQiLCBvLCBk
aXJlY3Rpb24pOwotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIGZhbHNlKTsK
KyAgICBEQkcoIm89JXAgZGlyZWN0aW9uPSVkIiwgZXdrVmlldywgZGlyZWN0aW9uKTsKKyAgICBF
V0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBmYWxzZSk7CiAgICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5hcGksIGZhbHNlKTsKIAogICAgIGlmICghc2Qt
PmFwaS0+Zm9jdXNfY2FuX2N5Y2xlKQpAQCAtMzEyNywxMCArMzEyNywxMCBAQCBib29sIGV3a192
aWV3X2ZvY3VzX2Nhbl9jeWNsZShFdmFzX09iamVjdCogbywgRXdrX0ZvY3VzX0RpcmVjdGlvbiBk
aXJlY3Rpb24pCiAgICAgcmV0dXJuIHNkLT5hcGktPmZvY3VzX2Nhbl9jeWNsZShzZCwgZGlyZWN0
aW9uKTsKIH0KIAotdm9pZCBld2tfdmlld19ydW5famF2YXNjcmlwdF9hbGVydChFdmFzX09iamVj
dCogbywgRXZhc19PYmplY3QqIGZyYW1lLCBjb25zdCBjaGFyKiBtZXNzYWdlKQordm9pZCBld2tf
dmlld19ydW5famF2YXNjcmlwdF9hbGVydChFdmFzX09iamVjdCogZXdrVmlldywgRXZhc19PYmpl
Y3QqIGZyYW1lLCBjb25zdCBjaGFyKiBtZXNzYWdlKQogewotICAgIERCRygibz0lcCBmcmFtZT0l
cCBtZXNzYWdlPSVzIiwgbywgZnJhbWUsIG1lc3NhZ2UpOwotICAgIEVXS19WSUVXX1NEX0dFVF9P
Ul9SRVRVUk4obywgc2QpOworICAgIERCRygibz0lcCBmcmFtZT0lcCBtZXNzYWdlPSVzIiwgZXdr
VmlldywgZnJhbWUsIG1lc3NhZ2UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdr
Vmlldywgc2QpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGkpOwogCiAg
ICAgaWYgKCFzZC0+YXBpLT5ydW5famF2YXNjcmlwdF9hbGVydCkKQEAgLTMxMzksMTAgKzMxMzks
MTAgQEAgdm9pZCBld2tfdmlld19ydW5famF2YXNjcmlwdF9hbGVydChFdmFzX09iamVjdCogbywg
RXZhc19PYmplY3QqIGZyYW1lLCBjb25zdCBjaGEKICAgICBzZC0+YXBpLT5ydW5famF2YXNjcmlw
dF9hbGVydChzZCwgZnJhbWUsIG1lc3NhZ2UpOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfcnVu
X2phdmFzY3JpcHRfY29uZmlybShFdmFzX09iamVjdCogbywgRXZhc19PYmplY3QqIGZyYW1lLCBj
b25zdCBjaGFyKiBtZXNzYWdlKQorRWluYV9Cb29sIGV3a192aWV3X3J1bl9qYXZhc2NyaXB0X2Nv
bmZpcm0oRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV2YXNfT2JqZWN0KiBmcmFtZSwgY29uc3QgY2hh
ciogbWVzc2FnZSkKIHsKLSAgICBEQkcoIm89JXAgZnJhbWU9JXAgbWVzc2FnZT0lcyIsIG8sIGZy
YW1lLCBtZXNzYWdlKTsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5B
X0ZBTFNFKTsKKyAgICBEQkcoIm89JXAgZnJhbWU9JXAgbWVzc2FnZT0lcyIsIGV3a1ZpZXcsIGZy
YW1lLCBtZXNzYWdlKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNk
LCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmFw
aSwgRUlOQV9GQUxTRSk7CiAKICAgICBpZiAoIXNkLT5hcGktPnJ1bl9qYXZhc2NyaXB0X2NvbmZp
cm0pCkBAIC0zMTUxLDEwICszMTUxLDEwIEBAIEVpbmFfQm9vbCBld2tfdmlld19ydW5famF2YXNj
cmlwdF9jb25maXJtKEV2YXNfT2JqZWN0KiBvLCBFdmFzX09iamVjdCogZnJhbWUsIGNvCiAgICAg
cmV0dXJuIHNkLT5hcGktPnJ1bl9qYXZhc2NyaXB0X2NvbmZpcm0oc2QsIGZyYW1lLCBtZXNzYWdl
KTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3J1bl9qYXZhc2NyaXB0X3Byb21wdChFdmFzX09i
amVjdCogbywgRXZhc19PYmplY3QqIGZyYW1lLCBjb25zdCBjaGFyKiBtZXNzYWdlLCBjb25zdCBj
aGFyKiBkZWZhdWx0VmFsdWUsIGNoYXIqKiB2YWx1ZSkKK0VpbmFfQm9vbCBld2tfdmlld19ydW5f
amF2YXNjcmlwdF9wcm9tcHQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV2YXNfT2JqZWN0KiBmcmFt
ZSwgY29uc3QgY2hhciogbWVzc2FnZSwgY29uc3QgY2hhciogZGVmYXVsdFZhbHVlLCBjaGFyKiog
dmFsdWUpCiB7Ci0gICAgREJHKCJvPSVwIGZyYW1lPSVwIG1lc3NhZ2U9JXMiLCBvLCBmcmFtZSwg
bWVzc2FnZSk7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxT
RSk7CisgICAgREJHKCJvPSVwIGZyYW1lPSVwIG1lc3NhZ2U9JXMiLCBld2tWaWV3LCBmcmFtZSwg
bWVzc2FnZSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlO
QV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5hcGksIEVJ
TkFfRkFMU0UpOwogCiAgICAgaWYgKCFzZC0+YXBpLT5ydW5famF2YXNjcmlwdF9wcm9tcHQpCkBA
IC0zMTc0LDEwICszMTc0LDEwIEBAIEVpbmFfQm9vbCBld2tfdmlld19ydW5famF2YXNjcmlwdF9w
cm9tcHQoRXZhc19PYmplY3QqIG8sIEV2YXNfT2JqZWN0KiBmcmFtZSwgY29uCiAgKgogICogQHJl
dHVybiBAYyBFSU5BX1RSVUUgaWYgc2NyaXB0IHNob3VsZCBiZSBzdG9wcGVkOyBAYyBFSU5BX0ZB
TFNFIG90aGVyd2lzZQogICovCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfc2hvdWxkX2ludGVycnVwdF9q
YXZhc2NyaXB0KEV2YXNfT2JqZWN0KiBvKQorRWluYV9Cb29sIGV3a192aWV3X3Nob3VsZF9pbnRl
cnJ1cHRfamF2YXNjcmlwdChFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBEQkcoIm89JXAi
LCBvKTsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsK
KyAgICBEQkcoIm89JXAiLCBld2tWaWV3KTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJO
KGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
Tl9WQUwoc2QtPmFwaSwgRUlOQV9GQUxTRSk7CiAKICAgICBpZiAoIXNkLT5hcGktPnNob3VsZF9p
bnRlcnJ1cHRfamF2YXNjcmlwdCkKQEAgLTMyMDAsMTAgKzMyMDAsMTAgQEAgRWluYV9Cb29sIGV3
a192aWV3X3Nob3VsZF9pbnRlcnJ1cHRfamF2YXNjcmlwdChFdmFzX09iamVjdCogbykKICAqIEBw
YXJhbSBleHBlY3RlZF9zaXplIFRoZSBleHBlY3RlZCBzaXplIG9mIHRoaXMgZGF0YWJhc2UgaW4g
b3JkZXIgdG8gZnVsZmlsbAogICogc2l0ZSdzIHJlcXVpcmVtZW50LgogICovCi11aW50NjRfdCBl
d2tfdmlld19leGNlZWRlZF9kYXRhYmFzZV9xdW90YShFdmFzX09iamVjdCogbywgRXZhc19PYmpl
Y3QqIGZyYW1lLCBjb25zdCBjaGFyKiBkYXRhYmFzZU5hbWUsIHVpbnQ2NF90IGN1cnJlbnRfc2l6
ZSwgdWludDY0X3QgZXhwZWN0ZWRfc2l6ZSkKK3VpbnQ2NF90IGV3a192aWV3X2V4Y2VlZGVkX2Rh
dGFiYXNlX3F1b3RhKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFdmFzX09iamVjdCogZnJhbWUsIGNv
bnN0IGNoYXIqIGRhdGFiYXNlTmFtZSwgdWludDY0X3QgY3VycmVudF9zaXplLCB1aW50NjRfdCBl
eHBlY3RlZF9zaXplKQogewotICAgIERCRygibz0lcCIsIG8pOwotICAgIEVXS19WSUVXX1NEX0dF
VF9PUl9SRVRVUk4obywgc2QsIDApOworICAgIERCRygibz0lcCIsIGV3a1ZpZXcpOworICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIDApOwogICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOX1ZBTChzZC0+YXBpLCAwKTsKICAgICBpZiAoIXNkLT5hcGktPmV4Y2Vl
ZGVkX2RhdGFiYXNlX3F1b3RhKQogICAgICAgICByZXR1cm4gMDsKQEAgLTMyMjUsMTAgKzMyMjUs
MTAgQEAgdWludDY0X3QgZXdrX3ZpZXdfZXhjZWVkZWRfZGF0YWJhc2VfcXVvdGEoRXZhc19PYmpl
Y3QqIG8sIEV2YXNfT2JqZWN0KiBmcmFtZSwgY28KICAqCiAgKiBAcmV0dXJuIEBFSU5BX0ZBTFNF
IGlmIHVzZXIgY2FuY2VsZWQgZmlsZSBzZWxlY3Rpb247IEBFSU5BX1RSVUUgaWYgY29uZmlybWVk
LgogICovCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfcnVuX29wZW5fcGFuZWwoRXZhc19PYmplY3QqIG8s
IEV2YXNfT2JqZWN0KiBmcmFtZSwgRWluYV9Cb29sIGFsbG93c19tdWx0aXBsZV9maWxlcywgY29u
c3QgY2hhciogYWNjZXB0X3R5cGVzLCBFaW5hX0xpc3QqKiBzZWxlY3RlZF9maWxlbmFtZXMpCitF
aW5hX0Jvb2wgZXdrX3ZpZXdfcnVuX29wZW5fcGFuZWwoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV2
YXNfT2JqZWN0KiBmcmFtZSwgRWluYV9Cb29sIGFsbG93c19tdWx0aXBsZV9maWxlcywgY29uc3Qg
Y2hhciogYWNjZXB0X3R5cGVzLCBFaW5hX0xpc3QqKiBzZWxlY3RlZF9maWxlbmFtZXMpCiB7Ci0g
ICAgREJHKCJvPSVwIGZyYW1lPSVwIGFsbG93c19tdWx0aXBsZV9maWxlcz0lZCIsIG8sIGZyYW1l
LCBhbGxvd3NfbXVsdGlwbGVfZmlsZXMpOwotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
bywgc2QsIEVJTkFfRkFMU0UpOworICAgIERCRygibz0lcCBmcmFtZT0lcCBhbGxvd3NfbXVsdGlw
bGVfZmlsZXM9JWQiLCBld2tWaWV3LCBmcmFtZSwgYWxsb3dzX211bHRpcGxlX2ZpbGVzKTsKKyAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmFwaSwgRUlOQV9GQUxTRSk7CiAg
ICAgRWluYV9Cb29sIGNvbmZpcm07CiAKQEAgLTMyNDMsMTAgKzMyNDMsMTAgQEAgRWluYV9Cb29s
IGV3a192aWV3X3J1bl9vcGVuX3BhbmVsKEV2YXNfT2JqZWN0KiBvLCBFdmFzX09iamVjdCogZnJh
bWUsIEVpbmFfQm9vbAogICAgIHJldHVybiBjb25maXJtOwogfQogCi12b2lkIGV3a192aWV3X3Jl
cGFpbnQoRXZhc19PYmplY3QqIG8sIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5LCBFdmFzX0Nv
b3JkIHcsIEV2YXNfQ29vcmQgaCkKK3ZvaWQgZXdrX3ZpZXdfcmVwYWludChFdmFzX09iamVjdCog
ZXdrVmlldywgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHksIEV2YXNfQ29vcmQgdywgRXZhc19D
b29yZCBoKQogewotICAgIERCRygibz0lcCwgcmVnaW9uPSVkLCVkICsgJWR4JWQiLCBvLCB4LCB5
LCB3LCBoKTsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkKTsKKyAgICBEQkco
Im89JXAsIHJlZ2lvbj0lZCwlZCArICVkeCVkIiwgZXdrVmlldywgeCwgeSwgdywgaCk7CisgICAg
RVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCk7CiAgICAgRVdLX1ZJRVdfUFJJ
Vl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2KTsKIAogICAgIGlmICghcHJpdi0+bWFpbl9mcmFtZS0+
Y29udGVudFJlbmRlcmVyKCkpIHsKQEAgLTMyNTgsMTYgKzMyNTgsMTYgQEAgdm9pZCBld2tfdmll
d19yZXBhaW50KEV2YXNfT2JqZWN0KiBvLCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwgRXZh
c19Db29yZCB3LAogICAgIF9ld2tfdmlld19zbWFydF9jaGFuZ2VkKHNkKTsKIH0KIAotdm9pZCBl
d2tfdmlld19zY3JvbGwoRXZhc19PYmplY3QqIG8sIEV2YXNfQ29vcmQgZHgsIEV2YXNfQ29vcmQg
ZHksIEV2YXNfQ29vcmQgc3gsIEV2YXNfQ29vcmQgc3ksIEV2YXNfQ29vcmQgc3csIEV2YXNfQ29v
cmQgc2gsIEV2YXNfQ29vcmQgY3gsIEV2YXNfQ29vcmQgY3ksIEV2YXNfQ29vcmQgY3csIEV2YXNf
Q29vcmQgY2gsIEVpbmFfQm9vbCBtYWluX2ZyYW1lKQordm9pZCBld2tfdmlld19zY3JvbGwoRXZh
c19PYmplY3QqIGV3a1ZpZXcsIEV2YXNfQ29vcmQgZHgsIEV2YXNfQ29vcmQgZHksIEV2YXNfQ29v
cmQgc3gsIEV2YXNfQ29vcmQgc3ksIEV2YXNfQ29vcmQgc3csIEV2YXNfQ29vcmQgc2gsIEV2YXNf
Q29vcmQgY3gsIEV2YXNfQ29vcmQgY3ksIEV2YXNfQ29vcmQgY3csIEV2YXNfQ29vcmQgY2gsIEVp
bmFfQm9vbCBtYWluX2ZyYW1lKQogewogICAgIERCRygibz0lcCwgZGVsdGE6ICVkLCVkLCBzY3Jv
bGw6ICVkLCVkKyVkeCVkLCBjbGlwOiAlZCwlZCslZHglZCIsCi0gICAgICAgIG8sIGR4LCBkeSwg
c3gsIHN5LCBzdywgc2gsIGN4LCBjeSwgY3csIGNoKTsKKyAgICAgICAgZXdrVmlldywgZHgsIGR5
LCBzeCwgc3ksIHN3LCBzaCwgY3gsIGN5LCBjdywgY2gpOwogCiAgICAgaWYgKChzeCAhPSBjeCkg
fHwgKHN5ICE9IGN5KSB8fCAoc3cgIT0gY3cpIHx8IChzaCAhPSBjaCkpCiAgICAgICAgIFdSTigi
c2Nyb2xsIHJlZ2lvbiBhbmQgY2xpcCBhcmUgZGlmZmVyZW50ISAlZCwlZCslZHglZCBhbmQgJWQs
JWQrJWR4JWQiLAogICAgICAgICAgICAgc3gsIHN5LCBzdywgc2gsIGN4LCBjeSwgY3csIGNoKTsK
IAotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QpOworICAgIEVXS19WSUVXX1NE
X0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JF
VFVSTihzZCwgcHJpdik7CiAgICAgRUlOQV9TQUZFVFlfT05fVFJVRV9SRVRVUk4oIWR4ICYmICFk
eSk7CiAKQEAgLTMyNzYsOSArMzI3Niw5IEBAIHZvaWQgZXdrX3ZpZXdfc2Nyb2xsKEV2YXNfT2Jq
ZWN0KiBvLCBFdmFzX0Nvb3JkIGR4LCBFdmFzX0Nvb3JkIGR5LCBFdmFzX0Nvb3JkIHN4CiAgICAg
X2V3a192aWV3X3NtYXJ0X2NoYW5nZWQoc2QpOwogfQogCi1XZWJDb3JlOjpQYWdlKiBld2tfdmll
d19jb3JlX3BhZ2VfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQorV2ViQ29yZTo6UGFnZSogZXdr
X3ZpZXdfY29yZV9wYWdlX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBF
V0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAwKTsKKyAgICBFV0tfVklFV19TRF9HRVRf
T1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAwKTsKICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRV
Uk4oc2QsIHByaXYsIDApOwogICAgIHJldHVybiBwcml2LT5wYWdlOwogfQpAQCAtMzI4OCwxMyAr
MzI4OCwxMyBAQCBXZWJDb3JlOjpQYWdlKiBld2tfdmlld19jb3JlX3BhZ2VfZ2V0KGNvbnN0IEV2
YXNfT2JqZWN0KiBvKQogICoKICAqIEVtaXRzICJmcmFtZSxjcmVhdGVkIiB3aXRoIHRoZSBuZXcg
ZnJhbWUgb2JqZWN0IG9uIHN1Y2Nlc3MuCiAgKi8KLVdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpG
cmFtZT4gZXdrX3ZpZXdfZnJhbWVfY3JlYXRlKEV2YXNfT2JqZWN0KiBvLCBFdmFzX09iamVjdCog
ZnJhbWUsIGNvbnN0IFdURjo6U3RyaW5nJiBuYW1lLCBXZWJDb3JlOjpIVE1MRnJhbWVPd25lckVs
ZW1lbnQqIG93bmVyRWxlbWVudCwgY29uc3QgV2ViQ29yZTo6S1VSTCYgdXJsLCBjb25zdCBXVEY6
OlN0cmluZyYgcmVmZXJyZXIpCitXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6RnJhbWU+IGV3a192
aWV3X2ZyYW1lX2NyZWF0ZShFdmFzX09iamVjdCogZXdrVmlldywgRXZhc19PYmplY3QqIGZyYW1l
LCBjb25zdCBXVEY6OlN0cmluZyYgbmFtZSwgV2ViQ29yZTo6SFRNTEZyYW1lT3duZXJFbGVtZW50
KiBvd25lckVsZW1lbnQsIGNvbnN0IFdlYkNvcmU6OktVUkwmIHVybCwgY29uc3QgV1RGOjpTdHJp
bmcmIHJlZmVycmVyKQogewogICAgIERCRygibz0lcCwgZnJhbWU9JXAsIG5hbWU9JXMsIG93bmVy
RWxlbWVudD0lcCwgdXJsPSVzLCByZWZlcnJlcj0lcyIsCi0gICAgICAgIG8sIGZyYW1lLCBuYW1l
LnV0ZjgoKS5kYXRhKCksIG93bmVyRWxlbWVudCwKKyAgICAgICAgZXdrVmlldywgZnJhbWUsIG5h
bWUudXRmOCgpLmRhdGEoKSwgb3duZXJFbGVtZW50LAogICAgICAgICB1cmwuc3RyaW5nKCkudXRm
OCgpLmRhdGEoKSwgcmVmZXJyZXIudXRmOCgpLmRhdGEoKSk7CiAKLSAgICBFV0tfVklFV19TRF9H
RVRfT1JfUkVUVVJOKG8sIHNkLCAwKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3
a1ZpZXcsIHNkLCAwKTsKICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYs
IDApOwogCiAgICAgV1RGOjpSZWZQdHI8V2ViQ29yZTo6RnJhbWU+IGNmID0gX2V3a192aWV3X2Nv
cmVfZnJhbWVfbmV3CkBAIC0zMzE2LDE3ICszMzE2LDE3IEBAIFdURjo6UGFzc1JlZlB0cjxXZWJD
b3JlOjpGcmFtZT4gZXdrX3ZpZXdfZnJhbWVfY3JlYXRlKEV2YXNfT2JqZWN0KiBvLCBFdmFzX09i
amVjCiAgICAgc2QtPmNoYW5nZWQuZnJhbWVfcmVjdCA9IEVJTkFfVFJVRTsKICAgICBfZXdrX3Zp
ZXdfc21hcnRfY2hhbmdlZChzZCk7CiAKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19j
YWxsKG8sICJmcmFtZSxjcmVhdGVkIiwgZnJhbWUpOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2Nh
bGxiYWNrX2NhbGwoZXdrVmlldywgImZyYW1lLGNyZWF0ZWQiLCBmcmFtZSk7CiAgICAgcmV0dXJu
IGNmLnJlbGVhc2UoKTsKIH0KIAotV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OldpZGdldD4gZXdr
X3ZpZXdfcGx1Z2luX2NyZWF0ZShFdmFzX09iamVjdCogbywgRXZhc19PYmplY3QqIGZyYW1lLCBj
b25zdCBXZWJDb3JlOjpJbnRTaXplJiBwbHVnaW5TaXplLCBXZWJDb3JlOjpIVE1MUGx1Z0luRWxl
bWVudCogZWxlbWVudCwgY29uc3QgV2ViQ29yZTo6S1VSTCYgdXJsLCBjb25zdCBXVEY6OlZlY3Rv
cjxXVEY6OlN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFdURjo6VmVjdG9yPFdURjo6U3RyaW5n
PiYgcGFyYW1WYWx1ZXMsIGNvbnN0IFdURjo6U3RyaW5nJiBtaW1lVHlwZSwgYm9vbCBsb2FkTWFu
dWFsbHkpCitXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6V2lkZ2V0PiBld2tfdmlld19wbHVnaW5f
Y3JlYXRlKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFdmFzX09iamVjdCogZnJhbWUsIGNvbnN0IFdl
YkNvcmU6OkludFNpemUmIHBsdWdpblNpemUsIFdlYkNvcmU6OkhUTUxQbHVnSW5FbGVtZW50KiBl
bGVtZW50LCBjb25zdCBXZWJDb3JlOjpLVVJMJiB1cmwsIGNvbnN0IFdURjo6VmVjdG9yPFdURjo6
U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgV1RGOjpWZWN0b3I8V1RGOjpTdHJpbmc+JiBwYXJh
bVZhbHVlcywgY29uc3QgV1RGOjpTdHJpbmcmIG1pbWVUeXBlLCBib29sIGxvYWRNYW51YWxseSkK
IHsKICAgICBEQkcoIm89JXAsIGZyYW1lPSVwLCBzaXplPSVkeCVkLCBlbGVtZW50PSVwLCB1cmw9
JXMsIG1pbWVUeXBlPSVzIiwKLSAgICAgICAgbywgZnJhbWUsIHBsdWdpblNpemUud2lkdGgoKSwg
cGx1Z2luU2l6ZS5oZWlnaHQoKSwgZWxlbWVudCwKKyAgICAgICAgZXdrVmlldywgZnJhbWUsIHBs
dWdpblNpemUud2lkdGgoKSwgcGx1Z2luU2l6ZS5oZWlnaHQoKSwgZWxlbWVudCwKICAgICAgICAg
dXJsLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIG1pbWVUeXBlLnV0ZjgoKS5kYXRhKCkpOwogCi0g
ICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgMCk7CisgICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgMCk7CiAgICAgc2QtPmNoYW5nZWQuZnJhbWVfcmVj
dCA9IEVJTkFfVFJVRTsKICAgICBfZXdrX3ZpZXdfc21hcnRfY2hhbmdlZChzZCk7CiAKQEAgLTMz
NDYsMTQgKzMzNDYsMTQgQEAgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OldpZGdldD4gZXdrX3Zp
ZXdfcGx1Z2luX2NyZWF0ZShFdmFzX09iamVjdCogbywgRXZhc19PYmoKICAqCiAgKiBFbWl0czog
InBvcHVwLGNyZWF0ZSIgd2l0aCBhIGxpc3Qgb2YgRXdrX01lbnUgY29udGFpbmluZyBlYWNoIGl0
ZW0ncyBkYXRhCiAgKi8KLXZvaWQgZXdrX3ZpZXdfcG9wdXBfbmV3KEV2YXNfT2JqZWN0KiBvLCBX
ZWJDb3JlOjpQb3B1cE1lbnVDbGllbnQqIGNsaWVudCwgaW50IHNlbGVjdGVkLCBjb25zdCBXZWJD
b3JlOjpJbnRSZWN0JiByZWN0KQordm9pZCBld2tfdmlld19wb3B1cF9uZXcoRXZhc19PYmplY3Qq
IGV3a1ZpZXcsIFdlYkNvcmU6OlBvcHVwTWVudUNsaWVudCogY2xpZW50LCBpbnQgc2VsZWN0ZWQs
IGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3QpCiB7Ci0gICAgSU5GKCJvPSVwIiwgbyk7Ci0g
ICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCk7CisgICAgSU5GKCJvPSVwIiwgZXdr
Vmlldyk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCk7CiAgICAg
RVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2KTsKIAogICAgIGlmIChwcml2LT5w
b3B1cC5tZW51X2NsaWVudCkKLSAgICAgICAgZXdrX3ZpZXdfcG9wdXBfZGVzdHJveShvKTsKKyAg
ICAgICAgZXdrX3ZpZXdfcG9wdXBfZGVzdHJveShld2tWaWV3KTsKIAogICAgIHByaXYtPnBvcHVw
Lm1lbnVfY2xpZW50ID0gY2xpZW50OwogCkBAIC0zMzc2LDE5ICszMzc2LDE5IEBAIHZvaWQgZXdr
X3ZpZXdfcG9wdXBfbmV3KEV2YXNfT2JqZWN0KiBvLCBXZWJDb3JlOjpQb3B1cE1lbnVDbGllbnQq
IGNsaWVudCwgaW50IHNlCiAgICAgcHJpdi0+cG9wdXAubWVudS55ID0gcmVjdC55KCk7CiAgICAg
cHJpdi0+cG9wdXAubWVudS53aWR0aCA9IHJlY3Qud2lkdGgoKTsKICAgICBwcml2LT5wb3B1cC5t
ZW51LmhlaWdodCA9IHJlY3QuaGVpZ2h0KCk7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJh
Y2tfY2FsbChvLCAicG9wdXAsY3JlYXRlIiwgJnByaXYtPnBvcHVwLm1lbnUpOworICAgIGV2YXNf
b2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdrVmlldywgInBvcHVwLGNyZWF0ZSIsICZwcml2
LT5wb3B1cC5tZW51KTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3BvcHVwX2Rlc3Ryb3koRXZh
c19PYmplY3QqIG8pCitFaW5hX0Jvb2wgZXdrX3ZpZXdfcG9wdXBfZGVzdHJveShFdmFzX09iamVj
dCogZXdrVmlldykKIHsKLSAgICBJTkYoIm89JXAiLCBvKTsKLSAgICBFV0tfVklFV19TRF9HRVRf
T1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBJTkYoIm89JXAiLCBld2tWaWV3KTsK
KyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsK
ICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwog
CiAgICAgaWYgKCFwcml2LT5wb3B1cC5tZW51X2NsaWVudCkKICAgICAgICAgcmV0dXJuIEVJTkFf
RkFMU0U7CiAKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKG8sICJwb3B1cCx3
aWxsZGVsZXRlIiwgJnByaXYtPnBvcHVwLm1lbnUpOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2Nh
bGxiYWNrX2NhbGwoZXdrVmlldywgInBvcHVwLHdpbGxkZWxldGUiLCAmcHJpdi0+cG9wdXAubWVu
dSk7CiAKICAgICB2b2lkKiBpdGVtdjsKICAgICBFSU5BX0xJU1RfRlJFRShwcml2LT5wb3B1cC5t
ZW51Lml0ZW1zLCBpdGVtdikgewpAQCAtMzQwMiwxMCArMzQwMiwxMCBAQCBFaW5hX0Jvb2wgZXdr
X3ZpZXdfcG9wdXBfZGVzdHJveShFdmFzX09iamVjdCogbykKICAgICByZXR1cm4gRUlOQV9UUlVF
OwogfQogCi12b2lkIGV3a192aWV3X3BvcHVwX3NlbGVjdGVkX3NldChFdmFzX09iamVjdCogbywg
aW50IGluZGV4KQordm9pZCBld2tfdmlld19wb3B1cF9zZWxlY3RlZF9zZXQoRXZhc19PYmplY3Qq
IGV3a1ZpZXcsIGludCBpbmRleCkKIHsKLSAgICBJTkYoIm89JXAiLCBvKTsKLSAgICBFV0tfVklF
V19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkKTsKKyAgICBJTkYoIm89JXAiLCBld2tWaWV3KTsKKyAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkKTsKICAgICBFV0tfVklFV19Q
UklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOKHByaXYtPnBvcHVwLm1lbnVfY2xpZW50KTsKIApAQCAtMzQyMiwxMCArMzQyMiwxMCBAQCB2
b2lkIGV3a192aWV3X3BvcHVwX3NlbGVjdGVkX3NldChFdmFzX09iamVjdCogbywgaW50IGluZGV4
KQogICogRW1pdHM6ICJkb3dubG9hZCxyZXF1ZXN0IiB3aXRoIGFuIEV3a19Eb3dubG9hZCBjb250
YWluaW5nIHRoZSBkZXRhaWxzIG9mIHRoZQogICogcmVxdWVzdGVkIGRvd25sb2FkLiBUaGUgZG93
bmxvYWQgcGVyIHNlIG11c3QgYmUgaGFuZGxlZCBvdXRzaWRlIG9mIHdlYmtpdC4KICAqLwotdm9p
ZCBld2tfdmlld19kb3dubG9hZF9yZXF1ZXN0KEV2YXNfT2JqZWN0KiBvLCBFd2tfRG93bmxvYWQq
IGRvd25sb2FkKQordm9pZCBld2tfdmlld19kb3dubG9hZF9yZXF1ZXN0KEV2YXNfT2JqZWN0KiBl
d2tWaWV3LCBFd2tfRG93bmxvYWQqIGRvd25sb2FkKQogewotICAgIERCRygidmlldz0lcCIsIG8p
OwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwobywgImRvd25sb2FkLHJlcXVl
c3QiLCBkb3dubG9hZCk7CisgICAgREJHKCJ2aWV3PSVwIiwgZXdrVmlldyk7CisgICAgZXZhc19v
YmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChld2tWaWV3LCAiZG93bmxvYWQscmVxdWVzdCIsIGRv
d25sb2FkKTsKIH0KIAogLyoqCkBAIC0zNDM1LDkgKzM0MzUsOSBAQCB2b2lkIGV3a192aWV3X2Rv
d25sb2FkX3JlcXVlc3QoRXZhc19PYmplY3QqIG8sIEV3a19Eb3dubG9hZCogZG93bmxvYWQpCiAg
KiBAcGFyYW0gbyB2aWV3LgogICogQHBhcmFtIGZyYW1lIHRoZSBmcmFtZS4KICAqLwotdm9pZCBl
d2tfdmlld19qc193aW5kb3dfb2JqZWN0X2NsZWFyKEV2YXNfT2JqZWN0KiBvLCBFdmFzX09iamVj
dCogZnJhbWUpCit2b2lkIGV3a192aWV3X2pzX3dpbmRvd19vYmplY3RfY2xlYXIoRXZhc19PYmpl
Y3QqIGV3a1ZpZXcsIEV2YXNfT2JqZWN0KiBmcmFtZSkKIHsKLSAgICBldmFzX29iamVjdF9zbWFy
dF9jYWxsYmFja19jYWxsKG8sICJqcyx3aW5kb3dvYmplY3QsY2xlYXIiLCBmcmFtZSk7CisgICAg
ZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChld2tWaWV3LCAianMsd2luZG93b2JqZWN0
LGNsZWFyIiwgZnJhbWUpOwogfQogCiAvKioKQEAgLTM0NDgsMTggKzM0NDgsMTggQEAgdm9pZCBl
d2tfdmlld19qc193aW5kb3dfb2JqZWN0X2NsZWFyKEV2YXNfT2JqZWN0KiBvLCBFdmFzX09iamVj
dCogZnJhbWUpCiAgKgogICogRW1pdHMgc2lnbmFsOiAidmlld3BvcnQsY2hhbmdlZCIgd2l0aCBu
byBwYXJhbWV0ZXJzLgogICovCi12b2lkIGV3a192aWV3X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfc2V0
KEV2YXNfT2JqZWN0KiBvLCBjb25zdCBXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50cyYgYXJndW1l
bnRzKQordm9pZCBld2tfdmlld192aWV3cG9ydF9hdHRyaWJ1dGVzX3NldChFdmFzX09iamVjdCog
ZXdrVmlldywgY29uc3QgV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHMmIGFyZ3VtZW50cykKIHsK
LSAgICBFV0tfVklFV19TRF9HRVQobywgc2QpOworICAgIEVXS19WSUVXX1NEX0dFVChld2tWaWV3
LCBzZCk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVQoc2QsIHByaXYpOwogCiAgICAgcHJpdi0+dmll
d3BvcnRfYXJndW1lbnRzID0gYXJndW1lbnRzOwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxi
YWNrX2NhbGwobywgInZpZXdwb3J0LGNoYW5nZWQiLCAwKTsKKyAgICBldmFzX29iamVjdF9zbWFy
dF9jYWxsYmFja19jYWxsKGV3a1ZpZXcsICJ2aWV3cG9ydCxjaGFuZ2VkIiwgMCk7CiB9CiAKLXZv
aWQgZXdrX3ZpZXdfdmlld3BvcnRfYXR0cmlidXRlc19nZXQoY29uc3QgRXZhc19PYmplY3QqIG8s
IGZsb2F0KiB3LCBmbG9hdCogaCwgZmxvYXQqIGluaXRfc2NhbGUsIGZsb2F0KiBtYXhfc2NhbGUs
IGZsb2F0KiBtaW5fc2NhbGUsIGZsb2F0KiBkZXZpY2VfcGl4ZWxfcmF0aW8sIEVpbmFfQm9vbCog
dXNlcl9zY2FsYWJsZSkKK3ZvaWQgZXdrX3ZpZXdfdmlld3BvcnRfYXR0cmlidXRlc19nZXQoY29u
c3QgRXZhc19PYmplY3QqIGV3a1ZpZXcsIGZsb2F0KiB3LCBmbG9hdCogaCwgZmxvYXQqIGluaXRf
c2NhbGUsIGZsb2F0KiBtYXhfc2NhbGUsIGZsb2F0KiBtaW5fc2NhbGUsIGZsb2F0KiBkZXZpY2Vf
cGl4ZWxfcmF0aW8sIEVpbmFfQm9vbCogdXNlcl9zY2FsYWJsZSkKIHsKLSAgICBXZWJDb3JlOjpW
aWV3cG9ydEF0dHJpYnV0ZXMgYXR0cmlidXRlcyA9IF9ld2tfdmlld192aWV3cG9ydF9hdHRyaWJ1
dGVzX2NvbXB1dGUobyk7CisgICAgV2ViQ29yZTo6Vmlld3BvcnRBdHRyaWJ1dGVzIGF0dHJpYnV0
ZXMgPSBfZXdrX3ZpZXdfdmlld3BvcnRfYXR0cmlidXRlc19jb21wdXRlKGV3a1ZpZXcpOwogCiAg
ICAgaWYgKHcpCiAgICAgICAgICp3ID0gYXR0cmlidXRlcy5sYXlvdXRTaXplLndpZHRoKCk7CkBA
IC0zNDc3LDkgKzM0NzcsOSBAQCB2b2lkIGV3a192aWV3X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfZ2V0
KGNvbnN0IEV2YXNfT2JqZWN0KiBvLCBmbG9hdCogdywgZmxvYXQqIGgsCiAgICAgICAgICp1c2Vy
X3NjYWxhYmxlID0gc3RhdGljX2Nhc3Q8Ym9vbD4oYXR0cmlidXRlcy51c2VyU2NhbGFibGUpOwog
fQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfem9vbV9yYW5nZV9zZXQoRXZhc19PYmplY3QqIG8sIGZs
b2F0IG1pbl9zY2FsZSwgZmxvYXQgbWF4X3NjYWxlKQorRWluYV9Cb29sIGV3a192aWV3X3pvb21f
cmFuZ2Vfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBmbG9hdCBtaW5fc2NhbGUsIGZsb2F0IG1h
eF9zY2FsZSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZB
TFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZB
TFNFKTsKICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFM
U0UpOwogCiAgICAgaWYgKG1heF9zY2FsZSA8IG1pbl9zY2FsZSkgewpAQCAtMzQ5MywyNSArMzQ5
MywyNSBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfem9vbV9yYW5nZV9zZXQoRXZhc19PYmplY3QqIG8s
IGZsb2F0IG1pbl9zY2FsZSwgZmxvYXQgbWF4X3NjYQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9
CiAKLWZsb2F0IGV3a192aWV3X3pvb21fcmFuZ2VfbWluX2dldChjb25zdCBFdmFzX09iamVjdCog
bykKK2Zsb2F0IGV3a192aWV3X3pvb21fcmFuZ2VfbWluX2dldChjb25zdCBFdmFzX09iamVjdCog
ZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAtMS4wKTsK
KyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAtMS4wKTsKICAgICBF
V0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIC0xLjApOwogCiAgICAgcmV0dXJu
IHByaXYtPnNldHRpbmdzLnpvb21fcmFuZ2UubWluX3NjYWxlOwogfQogCi1mbG9hdCBld2tfdmll
d196b29tX3JhbmdlX21heF9nZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCitmbG9hdCBld2tfdmll
d196b29tX3JhbmdlX21heF9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAg
RVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgLTEuMCk7CisgICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgLTEuMCk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRf
T1JfUkVUVVJOKHNkLCBwcml2LCAtMS4wKTsKIAogICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy56
b29tX3JhbmdlLm1heF9zY2FsZTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3VzZXJfc2NhbGFi
bGVfc2V0KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wgdXNlcl9zY2FsYWJsZSkKK0VpbmFfQm9v
bCBld2tfdmlld191c2VyX3NjYWxhYmxlX3NldChFdmFzX09iamVjdCogZXdrVmlldywgRWluYV9C
b29sIHVzZXJfc2NhbGFibGUpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBz
ZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBz
ZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2
LCBFSU5BX0ZBTFNFKTsKIAogICAgIHByaXYtPnNldHRpbmdzLnpvb21fcmFuZ2UudXNlcl9zY2Fs
YWJsZSA9IHVzZXJfc2NhbGFibGU7CkBAIC0zNTE5LDI5ICszNTE5LDI5IEBAIEVpbmFfQm9vbCBl
d2tfdmlld191c2VyX3NjYWxhYmxlX3NldChFdmFzX09iamVjdCogbywgRWluYV9Cb29sIHVzZXJf
c2NhbGFibGUpCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3
X3VzZXJfc2NhbGFibGVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQorRWluYV9Cb29sIGV3a192
aWV3X3VzZXJfc2NhbGFibGVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAg
IEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19W
SUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVXS19W
SUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CiAKICAgICByZXR1
cm4gcHJpdi0+c2V0dGluZ3Muem9vbV9yYW5nZS51c2VyX3NjYWxhYmxlOwogfQogCi1mbG9hdCBl
d2tfdmlld19kZXZpY2VfcGl4ZWxfcmF0aW9fZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQorZmxv
YXQgZXdrX3ZpZXdfZGV2aWNlX3BpeGVsX3JhdGlvX2dldChjb25zdCBFdmFzX09iamVjdCogZXdr
VmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAtMS4wKTsKKyAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAtMS4wKTsKICAgICBFV0tf
VklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIC0xLjApOwogCiAgICAgcmV0dXJuIHBy
aXYtPnNldHRpbmdzLmRldmljZV9waXhlbF9yYXRpbzsKIH0KIAotdm9pZCBld2tfdmlld19kaWRf
Zmlyc3RfdmlzdWFsbHlfbm9uZW1wdHlfbGF5b3V0KEV2YXNfT2JqZWN0KiBvKQordm9pZCBld2tf
dmlld19kaWRfZmlyc3RfdmlzdWFsbHlfbm9uZW1wdHlfbGF5b3V0KEV2YXNfT2JqZWN0KiBld2tW
aWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QpOworICAgIEVXS19W
SUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QpOwogICAgIEVXS19WSUVXX1BSSVZfR0VU
X09SX1JFVFVSTihzZCwgcHJpdik7CiAgICAgaWYgKCFwcml2LT5mbGFncy52aWV3X2NsZWFyZWQp
IHsKLSAgICAgICAgZXdrX3ZpZXdfZnJhbWVfbWFpbl9jbGVhcmVkKG8pOwotICAgICAgICBld2tf
dmlld19lbmFibGVfcmVuZGVyKG8pOworICAgICAgICBld2tfdmlld19mcmFtZV9tYWluX2NsZWFy
ZWQoZXdrVmlldyk7CisgICAgICAgIGV3a192aWV3X2VuYWJsZV9yZW5kZXIoZXdrVmlldyk7CiAg
ICAgICAgIHByaXYtPmZsYWdzLnZpZXdfY2xlYXJlZCA9IEVJTkFfVFJVRTsKICAgICB9CiB9CkBA
IC0zNTUyLDIxICszNTUyLDIxIEBAIHZvaWQgZXdrX3ZpZXdfZGlkX2ZpcnN0X3Zpc3VhbGx5X25v
bmVtcHR5X2xheW91dChFdmFzX09iamVjdCogbykKICAqCiAgKiBAcGFyYW0gbyB2aWV3LgogICov
Ci12b2lkIGV3a192aWV3X2Rpc3BhdGNoX2RpZF9maW5pc2hfbG9hZGluZyhFdmFzX09iamVjdCog
bykKK3ZvaWQgZXdrX3ZpZXdfZGlzcGF0Y2hfZGlkX2ZpbmlzaF9sb2FkaW5nKEV2YXNfT2JqZWN0
KiBld2tWaWV3KQogewogICAgIC8qIElmIHdlIHJlYWNoIHRoaXMgcG9pbnQgYW5kIHJlbmRlcmlu
ZyBpcyBzdGlsbCBkaXNhYmxlZCwgV2ViQ29yZSB3aWxsIG5vdAogICAgICAqIHRyaWdnZXIgdGhl
IGRpZEZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dCBzaWduYWwgYW55bW9yZS4gU28sIHdlCiAg
ICAgICogZm9yY2VmdWxseSByZS1lbmFibGUgdGhlIHJlbmRlcmluZy4KICAgICAgKi8KLSAgICBl
d2tfdmlld19kaWRfZmlyc3RfdmlzdWFsbHlfbm9uZW1wdHlfbGF5b3V0KG8pOworICAgIGV3a192
aWV3X2RpZF9maXJzdF92aXN1YWxseV9ub25lbXB0eV9sYXlvdXQoZXdrVmlldyk7CiB9CiAKLXZv
aWQgZXdrX3ZpZXdfdHJhbnNpdGlvbl90b19jb21taXRlZF9mb3JfbmV3cGFnZShFdmFzX09iamVj
dCogbykKK3ZvaWQgZXdrX3ZpZXdfdHJhbnNpdGlvbl90b19jb21taXRlZF9mb3JfbmV3cGFnZShF
dmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8s
IHNkKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkKTsKICAgICBF
V0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYpOwogCi0gICAgZXdrX3ZpZXdfZGlz
YWJsZV9yZW5kZXIobyk7CisgICAgZXdrX3ZpZXdfZGlzYWJsZV9yZW5kZXIoZXdrVmlldyk7CiAg
ICAgcHJpdi0+ZmxhZ3Mudmlld19jbGVhcmVkID0gRUlOQV9GQUxTRTsKIH0KIApAQCAtMzU4MCw5
ICszNTgwLDkgQEAgdm9pZCBld2tfdmlld190cmFuc2l0aW9uX3RvX2NvbW1pdGVkX2Zvcl9uZXdw
YWdlKEV2YXNfT2JqZWN0KiBvKQogICogQHBhcmFtIG8gVmlldyB0byBsb2FkCiAgKiBAcGFyYW0g
cmVxdWVzdCBSZXF1ZXN0IHdoaWNoIGNvbnRhaW4gdXJsIHRvIG5hdmlnYXRlCiAgKi8KLUVpbmFf
Qm9vbCBld2tfdmlld19uYXZpZ2F0aW9uX3BvbGljeV9kZWNpc2lvbihFdmFzX09iamVjdCogbywg
RXdrX0ZyYW1lX1Jlc291cmNlX1JlcXVlc3QqIHJlcXVlc3QpCitFaW5hX0Jvb2wgZXdrX3ZpZXdf
bmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb24oRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV3a19GcmFt
ZV9SZXNvdXJjZV9SZXF1ZXN0KiByZXF1ZXN0KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9S
RVRVUk4obywgc2QsIEVJTkFfVFJVRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihl
d2tWaWV3LCBzZCwgRUlOQV9UUlVFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9W
QUwoc2QtPmFwaSwgRUlOQV9UUlVFKTsKIAogICAgIGlmICghc2QtPmFwaS0+bmF2aWdhdGlvbl9w
b2xpY3lfZGVjaXNpb24pCkBAIC0zNTkxLDEzICszNTkxLDEzIEBAIEVpbmFfQm9vbCBld2tfdmll
d19uYXZpZ2F0aW9uX3BvbGljeV9kZWNpc2lvbihFdmFzX09iamVjdCogbywgRXdrX0ZyYW1lX1Jl
c291cmNlCiAgICAgcmV0dXJuIHNkLT5hcGktPm5hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9uKHNk
LCByZXF1ZXN0KTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X2pzX29iamVjdF9hZGQoRXZhc19P
YmplY3QqIG8sIEV3a19KU19PYmplY3QqIG9iaiwgY29uc3QgY2hhciogb2JqX25hbWUpCitFaW5h
X0Jvb2wgZXdrX3ZpZXdfanNfb2JqZWN0X2FkZChFdmFzX09iamVjdCogZXdrVmlldywgRXdrX0pT
X09iamVjdCogb2JqLCBjb25zdCBjaGFyKiBvYmpfbmFtZSkKIHsKICNpZiBFTkFCTEUoTkVUU0NB
UEVfUExVR0lOX0FQSSkKICAgICBpZiAob2JqLT52aWV3KSAvLyBvYmplY3QgaGFzIGFscmVhZHkg
YmVlbiBhZGRlZCB0byBhbm90aGVyIGV3a192aWV3CiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNF
OwogICAgIG9iai0+bmFtZSA9IGVpbmFfc3RyaW5nc2hhcmVfYWRkKG9ial9uYW1lKTsKLSAgICBF
V0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklF
V19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFV0tfVklF
V19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwogCiAgICAgSlNDOjpK
U0xvY2sgbG9jayhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CkBAIC0zNjEyLDcgKzM2MTIs
NyBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfanNfb2JqZWN0X2FkZChFdmFzX09iamVjdCogbywgRXdr
X0pTX09iamVjdCogb2JqLCBjb25zdCBjaGFyKgogCiAgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMg
PSB3aW5kb3ctPmdsb2JhbEV4ZWMoKTsKIAotICAgIG9iai0+dmlldyA9IG87CisgICAgb2JqLT52
aWV3ID0gZXdrVmlldzsKICAgICBKU0M6OkpTT2JqZWN0KiBydW50aW1lT2JqZWN0ID0gKEpTQzo6
SlNPYmplY3QqKUpTQzo6QmluZGluZ3M6OkNJbnN0YW5jZTo6Y3JlYXRlKChOUE9iamVjdCopb2Jq
LCByb290KS0+Y3JlYXRlUnVudGltZU9iamVjdChleGVjKTsKICAgICBKU0M6OklkZW50aWZpZXIg
aWQgPSBKU0M6OklkZW50aWZpZXIoZXhlYywgb2JqX25hbWUpOwogCkBAIC0zNjI0LDkgKzM2MjQs
OSBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfanNfb2JqZWN0X2FkZChFdmFzX09iamVjdCogbywgRXdr
X0pTX09iamVjdCogb2JqLCBjb25zdCBjaGFyKgogI2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9Q
TFVHSU5fQVBJKQogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfcHJvdG9jb2xfaGFuZGxlcl9zZXQo
RXZhc19PYmplY3QqIG8sIGNvbnN0IGNoYXIqKiBwcm90b2NvbHMsIEV3a19WaWV3X1Jlc291cmNl
X0hhbmRsZXJfQ2IgaGFuZGxlciwgdm9pZCogY29udGV4dCkKK0VpbmFfQm9vbCBld2tfdmlld19w
cm90b2NvbF9oYW5kbGVyX3NldChFdmFzX09iamVjdCogZXdrVmlldywgY29uc3QgY2hhcioqIHBy
b3RvY29scywgRXdrX1ZpZXdfUmVzb3VyY2VfSGFuZGxlcl9DYiBoYW5kbGVyLCB2b2lkKiBjb250
ZXh0KQogewotICAgIEVXS19WSUVXX1NEX0dFVChvLCBzZCk7CisgICAgRVdLX1ZJRVdfU0RfR0VU
KGV3a1ZpZXcsIHNkKTsKICAgICBFV0tfVklFV19QUklWX0dFVChzZCwgcHJpdik7CiAKICAgICBp
ZiAoIWhhbmRsZXIpCkBAIC0zNjM4LDkgKzM2MzgsOSBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfcHJv
dG9jb2xfaGFuZGxlcl9zZXQoRXZhc19PYmplY3QqIG8sIGNvbnN0IGNoYXIqKiBwcm90b2NvbHMs
CiAgICAgcmV0dXJuIGV3a19jdXN0b21fcHJvdG9jb2xfaGFuZGxlcl9zZXQocHJvdG9jb2xzKTsK
IH0KIAotRWluYV9Cb29sIGV3a192aWV3X3Byb3RvY29sX2hhbmRsZXJfdW5zZXQoRXZhc19PYmpl
Y3QqIG8pCitFaW5hX0Jvb2wgZXdrX3ZpZXdfcHJvdG9jb2xfaGFuZGxlcl91bnNldChFdmFzX09i
amVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVQobywgc2QpOworICAgIEVXS19W
SUVXX1NEX0dFVChld2tWaWV3LCBzZCk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVQoc2QsIHByaXYp
OwogICAgIEVpbmFfQm9vbCByZXQgPSBld2tfY3VzdG9tX3Byb3RvY29sX2hhbmRsZXJfYWxsX3Vu
c2V0KCk7CiAKQEAgLTM2NTIsOSArMzY1Miw5IEBAIEVpbmFfQm9vbCBld2tfdmlld19wcm90b2Nv
bF9oYW5kbGVyX3Vuc2V0KEV2YXNfT2JqZWN0KiBvKQogICAgIHJldHVybiByZXQ7CiB9CiAKLXZv
aWQqIGV3a192aWV3X3Byb3RvY29sX2hhbmRsZXJfcmVzb3VyY2VfZ2V0KEV2YXNfT2JqZWN0KiBv
LCBzaXplX3QqIGJ5dGVzUmVhZCwgY2hhcioqIG1pbWUsIGNvbnN0IGNoYXIqIGZpbGUpCit2b2lk
KiBld2tfdmlld19wcm90b2NvbF9oYW5kbGVyX3Jlc291cmNlX2dldChFdmFzX09iamVjdCogZXdr
Vmlldywgc2l6ZV90KiBieXRlc1JlYWQsIGNoYXIqKiBtaW1lLCBjb25zdCBjaGFyKiBmaWxlKQog
ewotICAgIEVXS19WSUVXX1NEX0dFVChvLCBzZCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUKGV3a1Zp
ZXcsIHNkKTsKICAgICBFV0tfVklFV19QUklWX0dFVChzZCwgcHJpdik7CiAKICAgICBFd2tfVmll
d19SZXNvdXJjZV9IYW5kbGVyX0NiIGZ1bmN0aW9uID0gcHJpdi0+Y3VzdG9tX3Jlc291cmNlX2hh
bmRsZXIuZnVuY3Rpb247CkBAIC0zNjczLDkgKzM2NzMsOSBAQCB2b2lkKiBld2tfdmlld19wcm90
b2NvbF9oYW5kbGVyX3Jlc291cmNlX2dldChFdmFzX09iamVjdCogbywgc2l6ZV90KiBieXRlc1Jl
YWQsCiAgKiBAcGFyYW0gdyBuZXcgY29udGVudCB3aWR0aC4KICAqIEBwYXJhbSBoIG5ldyBjb250
ZW50IGhlaWdodC4KICAqLwotdm9pZCBld2tfdmlld19jb250ZW50c19zaXplX2NoYW5nZWQoRXZh
c19PYmplY3QqIG8sIGludCB3LCBpbnQgaCkKK3ZvaWQgZXdrX3ZpZXdfY29udGVudHNfc2l6ZV9j
aGFuZ2VkKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBpbnQgdywgaW50IGgpCiB7Ci0gICAgRVdLX1ZJ
RVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
Tihld2tWaWV3LCBzZCk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFwaSk7
CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFwaS0+Y29udGVudHNfcmVzaXpl
KTsKIApAQCAtMzY5MSw5ICszNjkxLDkgQEAgdm9pZCBld2tfdmlld19jb250ZW50c19zaXplX2No
YW5nZWQoRXZhc19PYmplY3QqIG8sIGludCB3LCBpbnQgaCkKICAqCiAgKiBAcmV0dXJuIHBhZ2Ug
c2l6ZS4KICAqLwotV2ViQ29yZTo6RmxvYXRSZWN0IGV3a192aWV3X3BhZ2VfcmVjdF9nZXQoY29u
c3QgRXZhc19PYmplY3QqIG8pCitXZWJDb3JlOjpGbG9hdFJlY3QgZXdrX3ZpZXdfcGFnZV9yZWN0
X2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVQo
bywgc2QpOworICAgIEVXS19WSUVXX1NEX0dFVChld2tWaWV3LCBzZCk7CiAgICAgRVdLX1ZJRVdf
UFJJVl9HRVQoc2QsIHByaXYpOwogCiAgICAgV2ViQ29yZTo6RnJhbWUqIG1haW5fZnJhbWUgPSBw
cml2LT5wYWdlLT5tYWluRnJhbWUoKTsKQEAgLTM3MDEsMjUgKzM3MDEsMjUgQEAgV2ViQ29yZTo6
RmxvYXRSZWN0IGV3a192aWV3X3BhZ2VfcmVjdF9nZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCiB9
CiAKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQotdm9pZCBld2tfdmlld19uZWVkX3RvdWNoX2V2
ZW50c19zZXQoRXZhc19PYmplY3QqIG8sIGJvb2wgbmVlZGVkKQordm9pZCBld2tfdmlld19uZWVk
X3RvdWNoX2V2ZW50c19zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGJvb2wgbmVlZGVkKQogewot
ICAgIEVXS19WSUVXX1NEX0dFVChvLCBzZCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUKGV3a1ZpZXcs
IHNkKTsKICAgICBFV0tfVklFV19QUklWX0dFVChzZCwgcHJpdik7CiAKICAgICBwcml2LT5mbGFn
cy5uZWVkX3RvdWNoX2V2ZW50cyA9IG5lZWRlZDsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X25l
ZWRfdG91Y2hfZXZlbnRzX2dldChjb25zdCBFdmFzX09iamVjdCogbykKK0VpbmFfQm9vbCBld2tf
dmlld19uZWVkX3RvdWNoX2V2ZW50c19nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7
Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAg
RVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAg
RVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBy
ZXR1cm4gcHJpdi0+ZmxhZ3MubmVlZF90b3VjaF9ldmVudHM7CiB9CiAjZW5kaWYKIAotRWluYV9C
b29sIGV3a192aWV3X21vZGVfc2V0KEV2YXNfT2JqZWN0KiBvLCBFd2tfVmlld19Nb2RlIHZpZXdf
bW9kZSkKK0VpbmFfQm9vbCBld2tfdmlld19tb2RlX3NldChFdmFzX09iamVjdCogZXdrVmlldywg
RXdrX1ZpZXdfTW9kZSB2aWV3X21vZGUpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
TihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tW
aWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNk
LCBwcml2LCBFSU5BX0ZBTFNFKTsKIAogICAgIHN3aXRjaCAodmlld19tb2RlKSB7CkBAIC0zNzQ1
LDExICszNzQ1LDExIEBAIEVpbmFfQm9vbCBld2tfdmlld19tb2RlX3NldChFdmFzX09iamVjdCog
bywgRXdrX1ZpZXdfTW9kZSB2aWV3X21vZGUpCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAot
RXdrX1ZpZXdfTW9kZSBld2tfdmlld19tb2RlX2dldChjb25zdCBFdmFzX09iamVjdCogbykKK0V3
a19WaWV3X01vZGUgZXdrX3ZpZXdfbW9kZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcp
CiB7CiAgICAgRXdrX1ZpZXdfTW9kZSBtb2RlID0gRVdLX1ZJRVdfTU9ERV9XSU5ET1dFRDsKIAot
ICAgIEVXS19WSUVXX1NEX0dFVChvLCBzZCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUKGV3a1ZpZXcs
IHNkKTsKICAgICBpZiAoIXNkKQogICAgICAgICByZXR1cm4gbW9kZTsKICAgICBFV0tfVklFV19Q
UklWX0dFVChzZCwgcHJpdik7CkBAIC0zNzg0LDkgKzM3ODQsOSBAQCBFd2tfVmlld19Nb2RlIGV3
a192aWV3X21vZGVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQogICoKICAqIEVtaXRzIHNpZ25h
bDogImVkaXRvcmNsaWVudHNlbGVjdGlvbixjaGFuZ2VkIiB3aXRoIG5vIHBhcmFtZXRlcnMuCiAg
Ki8KLXZvaWQgZXdrX3ZpZXdfZWRpdG9yX2NsaWVudF9zZWxlY3Rpb25fY2hhbmdlZChFdmFzX09i
amVjdCogbykKK3ZvaWQgZXdrX3ZpZXdfZWRpdG9yX2NsaWVudF9zZWxlY3Rpb25fY2hhbmdlZChF
dmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19j
YWxsKG8sICJlZGl0b3JjbGllbnQsc2VsZWN0aW9uLGNoYW5nZWQiLCAwKTsKKyAgICBldmFzX29i
amVjdF9zbWFydF9jYWxsYmFja19jYWxsKGV3a1ZpZXcsICJlZGl0b3JjbGllbnQsc2VsZWN0aW9u
LGNoYW5nZWQiLCAwKTsKIH0KIAogLyoqCkBAIC0zNzk3LDcgKzM3OTcsNyBAQCB2b2lkIGV3a192
aWV3X2VkaXRvcl9jbGllbnRfc2VsZWN0aW9uX2NoYW5nZWQoRXZhc19PYmplY3QqIG8pCiAgKgog
ICogRW1pdHMgc2lnbmFsOiAiZWRpdG9yY2xpZW50LGNvbnRlbnRzLGNoYW5nZWQiIHdpdGggbm8g
cGFyYW1ldGVycy4KICAqLwotdm9pZCBld2tfdmlld19lZGl0b3JfY2xpZW50X2NvbnRlbnRzX2No
YW5nZWQoRXZhc19PYmplY3QqIG8pCit2b2lkIGV3a192aWV3X2VkaXRvcl9jbGllbnRfY29udGVu
dHNfY2hhbmdlZChFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBldmFzX29iamVjdF9zbWFy
dF9jYWxsYmFja19jYWxsKG8sICJlZGl0b3JjbGllbnQsY29udGVudHMsY2hhbmdlZCIsIDApOwor
ICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdrVmlldywgImVkaXRvcmNsaWVu
dCxjb250ZW50cyxjaGFuZ2VkIiwgMCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Vm
bC9ld2svZXdrX3ZpZXdfc2luZ2xlLmNwcCBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmll
d19zaW5nbGUuY3BwCmluZGV4IDVhZDY3ZmUuLjk1NGMzMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvZWZsL2V3ay9ld2tfdmlld19zaW5nbGUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZs
L2V3ay9ld2tfdmlld19zaW5nbGUuY3BwCkBAIC05LDcgKzksNyBAQAogCiAgICAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAg
ICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIE1FUmNoQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCiAgICAgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAKICAgICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CkBAIC0zMSwyNSArMzEsMjUgQEAKIAogc3RhdGljIEV3a19WaWV3X1NtYXJ0X0NsYXNzIF9wYXJl
bnRfc2MgPSBFV0tfVklFV19TTUFSVF9DTEFTU19JTklUX05VTEw7CiAKLXN0YXRpYyB2b2lkIF9l
d2tfdmlld19zaW5nbGVfb25fZGVsKHZvaWQqIGRhdGEsIEV2YXMqIGUsIEV2YXNfT2JqZWN0KiBv
LCB2b2lkKiBldmVudF9pbmZvKQorc3RhdGljIHZvaWQgX2V3a192aWV3X3NpbmdsZV9vbl9kZWwo
dm9pZCogZGF0YSwgRXZhcyogZXZlbnRUeXBlLCBFdmFzX09iamVjdCogY2FsbGJhY2ssIHZvaWQq
IGV2ZW50X2luZm8pCiB7CiAgICAgRXZhc19PYmplY3QqIGNsaXAgPSAoRXZhc19PYmplY3QqKWRh
dGE7CiAgICAgZXZhc19vYmplY3RfZGVsKGNsaXApOwogfQogCi1zdGF0aWMgdm9pZCBfZXdrX3Zp
ZXdfc2luZ2xlX3NtYXJ0X2FkZChFdmFzX09iamVjdCogbykKK3N0YXRpYyB2b2lkIF9ld2tfdmll
d19zaW5nbGVfc21hcnRfYWRkKEV2YXNfT2JqZWN0KiBld2tTaW5nbGUpCiB7CiAgICAgRXdrX1Zp
ZXdfU21hcnRfRGF0YSogc2Q7CiAKLSAgICBfcGFyZW50X3NjLnNjLmFkZChvKTsKKyAgICBfcGFy
ZW50X3NjLnNjLmFkZChld2tTaW5nbGUpOwogCi0gICAgc2QgPSBzdGF0aWNfY2FzdDxFd2tfVmll
d19TbWFydF9EYXRhKj4oZXZhc19vYmplY3Rfc21hcnRfZGF0YV9nZXQobykpOworICAgIHNkID0g
c3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGV2YXNfb2JqZWN0X3NtYXJ0X2RhdGFf
Z2V0KGV3a1NpbmdsZSkpOwogICAgIGlmICghc2QpCiAgICAgICAgIHJldHVybjsKIAogICAgIEV2
YXNfT2JqZWN0KiBjbGlwID0gZXZhc19vYmplY3RfcmVjdGFuZ2xlX2FkZChzZC0+YmFzZS5ldmFz
KTsKICAgICBldmFzX29iamVjdF9jbGlwX3NldChzZC0+YmFja2luZ19zdG9yZSwgY2xpcCk7Ci0g
ICAgZXZhc19vYmplY3Rfc21hcnRfbWVtYmVyX2FkZChjbGlwLCBvKTsKKyAgICBldmFzX29iamVj
dF9zbWFydF9tZW1iZXJfYWRkKGNsaXAsIGV3a1NpbmdsZSk7CiAgICAgZXZhc19vYmplY3Rfc2hv
dyhjbGlwKTsKIAogICAgIGV2YXNfb2JqZWN0X2V2ZW50X2NhbGxiYWNrX2FkZApAQCAtNjUsNTUg
KzY1LDU1IEBAIHN0YXRpYyBFdmFzX09iamVjdCogX2V3a192aWV3X3NpbmdsZV9zbWFydF9iYWNr
aW5nX3N0b3JlX2FkZChFd2tfVmlld19TbWFydF9EYXRhCiAgICAgcmV0dXJuIGJzOwogfQogCi1z
dGF0aWMgdm9pZCBfZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0X3Jlc2l6ZShFdmFzX09iamVjdCogbywg
RXZhc19Db29yZCB3LCBFdmFzX0Nvb3JkIGgpCitzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc2luZ2xl
X3NtYXJ0X3Jlc2l6ZShFdmFzX09iamVjdCogZXdrU2luZ2xlLCBFdmFzX0Nvb3JkIHdpZHRoLCBF
dmFzX0Nvb3JkIGhlaWdodCkKIHsKLSAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzZCA9IHN0YXRp
Y19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihldmFzX29iamVjdF9zbWFydF9kYXRhX2dldChv
KSk7Ci0gICAgX3BhcmVudF9zYy5zYy5yZXNpemUobywgdywgaCk7CisgICAgRXdrX1ZpZXdfU21h
cnRfRGF0YSogc2QgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZXZhc19vYmpl
Y3Rfc21hcnRfZGF0YV9nZXQoZXdrU2luZ2xlKSk7CisgICAgX3BhcmVudF9zYy5zYy5yZXNpemUo
ZXdrU2luZ2xlLCB3aWR0aCwgaGVpZ2h0KTsKIAogICAgIGlmICghc2QpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIC8vIHRoZXNlIHNob3VsZCBiZSBxdWV1ZWQgYW5kIHByb2Nlc3NlZCBpbiBjYWxj
dWxhdGUgYXMgd2VsbCEKLSAgICBldmFzX29iamVjdF9pbWFnZV9zaXplX3NldChzZC0+YmFja2lu
Z19zdG9yZSwgdywgaCk7CisgICAgZXZhc19vYmplY3RfaW1hZ2Vfc2l6ZV9zZXQoc2QtPmJhY2tp
bmdfc3RvcmUsIHdpZHRoLCBoZWlnaHQpOwogICAgIGlmIChzZC0+YW5pbWF0ZWRfem9vbS56b29t
LmN1cnJlbnQgPCAwLjAwMDAxKSB7CiAgICAgICAgIEV2YXNfT2JqZWN0KiBjbGlwID0gZXZhc19v
YmplY3RfY2xpcF9nZXQoc2QtPmJhY2tpbmdfc3RvcmUpOwogICAgICAgICBFdmFzX0Nvb3JkIHgs
IHksIGN3LCBjaDsKLSAgICAgICAgZXZhc19vYmplY3RfaW1hZ2VfZmlsbF9zZXQoc2QtPmJhY2tp
bmdfc3RvcmUsIDAsIDAsIHcsIGgpOworICAgICAgICBldmFzX29iamVjdF9pbWFnZV9maWxsX3Nl
dChzZC0+YmFja2luZ19zdG9yZSwgMCwgMCwgd2lkdGgsIGhlaWdodCk7CiAgICAgICAgIGV2YXNf
b2JqZWN0X2dlb21ldHJ5X2dldChzZC0+YmFja2luZ19zdG9yZSwgJngsICZ5LCAwLCAwKTsKICAg
ICAgICAgZXZhc19vYmplY3RfbW92ZShjbGlwLCB4LCB5KTsKICAgICAgICAgZXdrX2ZyYW1lX2Nv
bnRlbnRzX3NpemVfZ2V0KHNkLT5tYWluX2ZyYW1lLCAmY3csICZjaCk7Ci0gICAgICAgIGlmICh3
ID4gY3cpCi0gICAgICAgICAgICB3ID0gY3c7Ci0gICAgICAgIGlmIChoID4gY2gpCi0gICAgICAg
ICAgICBoID0gY2g7Ci0gICAgICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShjbGlwLCB3LCBoKTsKKyAg
ICAgICAgaWYgKHdpZHRoID4gY3cpCisgICAgICAgICAgICB3aWR0aCA9IGN3OworICAgICAgICBp
ZiAoaGVpZ2h0ID4gY2gpCisgICAgICAgICAgICBoZWlnaHQgPSBjaDsKKyAgICAgICAgZXZhc19v
YmplY3RfcmVzaXplKGNsaXAsIHdpZHRoLCBoZWlnaHQpOwogICAgIH0KIH0KIAotc3RhdGljIGlu
bGluZSB2b2lkIF9ld2tfdmlld180Yl9tb3ZlX3JlZ2lvbl91cCh1aW50MzJfdCogaW1hZ2UsIHNp
emVfdCByb3dzLCBzaXplX3QgeCwgc2l6ZV90IHksIHNpemVfdCB3LCBzaXplX3QgaCwgc2l6ZV90
IHJvd3NpemUpCitzdGF0aWMgaW5saW5lIHZvaWQgX2V3a192aWV3XzRiX21vdmVfcmVnaW9uX3Vw
KHVpbnQzMl90KiBpbWFnZSwgc2l6ZV90IHJvd3MsIHNpemVfdCB4LCBzaXplX3QgeSwgc2l6ZV90
IHdpZHRoLCBzaXplX3QgaGVpZ2h0LCBzaXplX3Qgcm93c2l6ZSkKIHsKICAgICB1aW50MzJfdCog
c3JjOwogICAgIHVpbnQzMl90KiBkc3Q7CiAKICAgICBkc3QgPSBpbWFnZSArIHggKyB5ICogcm93
c2l6ZTsKICAgICBzcmMgPSBkc3QgKyByb3dzICogcm93c2l6ZTsKLSAgICBoIC09IHJvd3M7Cisg
ICAgaGVpZ2h0IC09IHJvd3M7CiAKLSAgICBmb3IgKDsgaCA+IDA7IGgtLSwgZHN0ICs9IHJvd3Np
emUsIHNyYyArPSByb3dzaXplKQotICAgICAgICBtZW1jcHkoZHN0LCBzcmMsIHcgKiA0KTsKKyAg
ICBmb3IgKDsgaGVpZ2h0ID4gMDsgaGVpZ2h0LS0sIGRzdCArPSByb3dzaXplLCBzcmMgKz0gcm93
c2l6ZSkKKyAgICAgICAgbWVtY3B5KGRzdCwgc3JjLCB3aWR0aCAqIDQpOwogfQogCi1zdGF0aWMg
aW5saW5lIHZvaWQgX2V3a192aWV3XzRiX21vdmVfcmVnaW9uX2Rvd24odWludDMyX3QqIGltYWdl
LCBzaXplX3Qgcm93cywgc2l6ZV90IHgsIHNpemVfdCB5LCBzaXplX3Qgdywgc2l6ZV90IGgsIHNp
emVfdCByb3dzaXplKQorc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdmlld180Yl9tb3ZlX3JlZ2lv
bl9kb3duKHVpbnQzMl90KiBpbWFnZSwgc2l6ZV90IHJvd3MsIHNpemVfdCB4LCBzaXplX3QgeSwg
c2l6ZV90IHdpZHRoLCBzaXplX3QgaGVpZ2h0LCBzaXplX3Qgcm93c2l6ZSkKIHsKICAgICB1aW50
MzJfdCogc3JjOwogICAgIHVpbnQzMl90KiBkc3Q7CiAKLSAgICBoIC09IHJvd3M7Ci0gICAgc3Jj
ID0gaW1hZ2UgKyB4ICsgKHkgKyBoIC0gMSkgKiByb3dzaXplOworICAgIGhlaWdodCAtPSByb3dz
OworICAgIHNyYyA9IGltYWdlICsgeCArICh5ICsgaGVpZ2h0IC0gMSkgKiByb3dzaXplOwogICAg
IGRzdCA9IHNyYyArIHJvd3MgKiByb3dzaXplOwogCi0gICAgZm9yICg7IGggPiAwOyBoLS0sIGRz
dCAtPSByb3dzaXplLCBzcmMgLT0gcm93c2l6ZSkKLSAgICAgICAgbWVtY3B5KGRzdCwgc3JjLCB3
ICogNCk7CisgICAgZm9yICg7IGhlaWdodCA+IDA7IGhlaWdodC0tLCBkc3QgLT0gcm93c2l6ZSwg
c3JjIC09IHJvd3NpemUpCisgICAgICAgIG1lbWNweShkc3QsIHNyYywgd2lkdGggKiA0KTsKIH0K
IAogc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdmlld180Yl9tb3ZlX2xpbmVfbGVmdCh1aW50MzJf
dCogZHN0LCBjb25zdCB1aW50MzJfdCogc3JjLCBzaXplX3QgY291bnQpCkBAIC0xMzYsNjkgKzEz
Niw2OSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgX2V3a192aWV3XzRiX21vdmVfbGluZV9yaWdodCh1
aW50MzJfdCogZHN0LCB1aW50MzJfdCogc3JjLCBzaQogICAgICAgICAqZHN0ID0gKnNyYzsKIH0K
IAotc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdmlld180Yl9tb3ZlX3JlZ2lvbl9sZWZ0KHVpbnQz
Ml90KiBpbWFnZSwgc2l6ZV90IGNvbHMsIHNpemVfdCB4LCBzaXplX3QgeSwgc2l6ZV90IHcsIHNp
emVfdCBoLCBzaXplX3Qgcm93c2l6ZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3ZpZXdfNGJf
bW92ZV9yZWdpb25fbGVmdCh1aW50MzJfdCogaW1hZ2UsIHNpemVfdCBjb2xzLCBzaXplX3QgeCwg
c2l6ZV90IHksIHNpemVfdCB3aWR0aCwgc2l6ZV90IGhlaWdodCwgc2l6ZV90IHJvd3NpemUpCiB7
CiAgICAgdWludDMyX3QqIHNyYzsKICAgICB1aW50MzJfdCogZHN0OwogCiAgICAgZHN0ID0gaW1h
Z2UgKyB4ICsgeSAqIHJvd3NpemU7CiAgICAgc3JjID0gZHN0ICsgY29sczsKLSAgICB3IC09IGNv
bHM7CisgICAgd2lkdGggLT0gY29sczsKIAotICAgIGZvciAoOyBoID4gMDsgaC0tLCBkc3QgKz0g
cm93c2l6ZSwgc3JjICs9IHJvd3NpemUpCi0gICAgICAgIF9ld2tfdmlld180Yl9tb3ZlX2xpbmVf
bGVmdChkc3QsIHNyYywgdyk7CisgICAgZm9yICg7IGhlaWdodCA+IDA7IGhlaWdodC0tLCBkc3Qg
Kz0gcm93c2l6ZSwgc3JjICs9IHJvd3NpemUpCisgICAgICAgIF9ld2tfdmlld180Yl9tb3ZlX2xp
bmVfbGVmdChkc3QsIHNyYywgd2lkdGgpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgX2V3a192
aWV3XzRiX21vdmVfcmVnaW9uX3JpZ2h0KHVpbnQzMl90KiBpbWFnZSwgc2l6ZV90IGNvbHMsIHNp
emVfdCB4LCBzaXplX3QgeSwgc2l6ZV90IHcsIHNpemVfdCBoLCBzaXplX3Qgcm93c2l6ZSkKK3N0
YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3ZpZXdfNGJfbW92ZV9yZWdpb25fcmlnaHQodWludDMyX3Qq
IGltYWdlLCBzaXplX3QgY29scywgc2l6ZV90IHgsIHNpemVfdCB5LCBzaXplX3Qgd2lkdGgsIHNp
emVfdCBoZWlnaHQsIHNpemVfdCByb3dzaXplKQogewogICAgIHVpbnQzMl90KiBzcmM7CiAgICAg
dWludDMyX3QqIGRzdDsKIAotICAgIHcgLT0gY29sczsKLSAgICBzcmMgPSBpbWFnZSArICh4ICsg
dyAtIDEpICsgeSAqIHJvd3NpemU7CisgICAgd2lkdGggLT0gY29sczsKKyAgICBzcmMgPSBpbWFn
ZSArICh4ICsgd2lkdGggLSAxKSArIHkgKiByb3dzaXplOwogICAgIGRzdCA9IHNyYyArIGNvbHM7
CiAKLSAgICBmb3IgKDsgaCA+IDA7IGgtLSwgZHN0ICs9IHJvd3NpemUsIHNyYyArPSByb3dzaXpl
KQotICAgICAgICBfZXdrX3ZpZXdfNGJfbW92ZV9saW5lX3JpZ2h0KGRzdCwgc3JjLCB3KTsKKyAg
ICBmb3IgKDsgaGVpZ2h0ID4gMDsgaGVpZ2h0LS0sIGRzdCArPSByb3dzaXplLCBzcmMgKz0gcm93
c2l6ZSkKKyAgICAgICAgX2V3a192aWV3XzRiX21vdmVfbGluZV9yaWdodChkc3QsIHNyYywgd2lk
dGgpOwogfQogCiAvKiBjYXRjaC1hbGwgZnVuY3Rpb24sIG5vdCBhcyBvcHRpbWl6ZWQgYXMgdGhl
IG90aGVycywgYnV0IGRvZXMgdGhlIHdvcmsuICovCi1zdGF0aWMgaW5saW5lIHZvaWQgX2V3a192
aWV3XzRiX21vdmVfcmVnaW9uKHVpbnQzMl90KiBpbWFnZSwgaW50IGR4LCBpbnQgZHksIHNpemVf
dCB4LCBzaXplX3QgeSwgc2l6ZV90IHcsIHNpemVfdCBoLCBzaXplX3Qgcm93c2l6ZSkKK3N0YXRp
YyBpbmxpbmUgdm9pZCBfZXdrX3ZpZXdfNGJfbW92ZV9yZWdpb24odWludDMyX3QqIGltYWdlLCBp
bnQgZHgsIGludCBkeSwgc2l6ZV90IHgsIHNpemVfdCB5LCBzaXplX3Qgd2lkdGgsIHNpemVfdCBo
ZWlnaHQsIHNpemVfdCByb3dzaXplKQogewogICAgIHVpbnQzMl90KiBzcmM7CiAgICAgdWludDMy
X3QqIGRzdDsKIAogICAgIGlmIChkeSA8IDApIHsKLSAgICAgICAgaCArPSBkeTsKKyAgICAgICAg
aGVpZ2h0ICs9IGR5OwogICAgICAgICBkc3QgPSBpbWFnZSArIHggKyB5ICogcm93c2l6ZTsKICAg
ICAgICAgc3JjID0gZHN0IC0gZHkgKiByb3dzaXplOwogICAgICAgICBpZiAoZHggPD0gMCkgewot
ICAgICAgICAgICAgdyArPSBkeDsKKyAgICAgICAgICAgIHdpZHRoICs9IGR4OwogICAgICAgICAg
ICAgc3JjIC09IGR4OwotICAgICAgICAgICAgZm9yICg7IGggPiAwOyBoLS0sIGRzdCArPSByb3dz
aXplLCBzcmMgKz0gcm93c2l6ZSkKLSAgICAgICAgICAgICAgICBfZXdrX3ZpZXdfNGJfbW92ZV9s
aW5lX2xlZnQoZHN0LCBzcmMsIHcpOworICAgICAgICAgICAgZm9yICg7IGhlaWdodCA+IDA7IGhl
aWdodC0tLCBkc3QgKz0gcm93c2l6ZSwgc3JjICs9IHJvd3NpemUpCisgICAgICAgICAgICAgICAg
X2V3a192aWV3XzRiX21vdmVfbGluZV9sZWZ0KGRzdCwgc3JjLCB3aWR0aCk7CiAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICB3IC09IGR4OwotICAgICAgICAgICAgc3JjICs9IHcgLSAxOwot
ICAgICAgICAgICAgZHN0ICs9IHcgKyBkeCAtMTsKLSAgICAgICAgICAgIGZvciAoOyBoID4gMDsg
aC0tLCBkc3QgKz0gcm93c2l6ZSwgc3JjICs9IHJvd3NpemUpCi0gICAgICAgICAgICAgICAgX2V3
a192aWV3XzRiX21vdmVfbGluZV9yaWdodChkc3QsIHNyYywgdyk7CisgICAgICAgICAgICB3aWR0
aCAtPSBkeDsKKyAgICAgICAgICAgIHNyYyArPSB3aWR0aCAtIDE7CisgICAgICAgICAgICBkc3Qg
Kz0gd2lkdGggKyBkeCAtMTsKKyAgICAgICAgICAgIGZvciAoOyBoZWlnaHQgPiAwOyBoZWlnaHQt
LSwgZHN0ICs9IHJvd3NpemUsIHNyYyArPSByb3dzaXplKQorICAgICAgICAgICAgICAgIF9ld2tf
dmlld180Yl9tb3ZlX2xpbmVfcmlnaHQoZHN0LCBzcmMsIHdpZHRoKTsKICAgICAgICAgfQogICAg
IH0gZWxzZSB7Ci0gICAgICAgIGggLT0gZHk7Ci0gICAgICAgIHNyYyA9IGltYWdlICsgeCArICh5
ICsgaCAtIDEpICogcm93c2l6ZTsKKyAgICAgICAgaGVpZ2h0IC09IGR5OworICAgICAgICBzcmMg
PSBpbWFnZSArIHggKyAoeSArIGhlaWdodCAtIDEpICogcm93c2l6ZTsKICAgICAgICAgZHN0ID0g
c3JjICsgZHkgKiByb3dzaXplOwogICAgICAgICBpZiAoZHggPD0gMCkgewotICAgICAgICAgICAg
dyArPSBkeDsKKyAgICAgICAgICAgIHdpZHRoICs9IGR4OwogICAgICAgICAgICAgc3JjIC09IGR4
OwotICAgICAgICAgICAgZm9yICg7IGggPiAwOyBoLS0sIGRzdCAtPSByb3dzaXplLCBzcmMgLT0g
cm93c2l6ZSkKLSAgICAgICAgICAgICAgICBfZXdrX3ZpZXdfNGJfbW92ZV9saW5lX2xlZnQoZHN0
LCBzcmMsIHcpOworICAgICAgICAgICAgZm9yICg7IGhlaWdodCA+IDA7IGhlaWdodC0tLCBkc3Qg
LT0gcm93c2l6ZSwgc3JjIC09IHJvd3NpemUpCisgICAgICAgICAgICAgICAgX2V3a192aWV3XzRi
X21vdmVfbGluZV9sZWZ0KGRzdCwgc3JjLCB3aWR0aCk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICB3IC09IGR4OwotICAgICAgICAgICAgc3JjICs9IHcgLSAxOwotICAgICAgICAgICAg
ZHN0ICs9IHcgKyBkeCAtIDE7Ci0gICAgICAgICAgICBmb3IgKDsgaCA+IDA7IGgtLSwgZHN0IC09
IHJvd3NpemUsIHNyYyAtPSByb3dzaXplKQotICAgICAgICAgICAgICAgIF9ld2tfdmlld180Yl9t
b3ZlX2xpbmVfcmlnaHQoZHN0LCBzcmMsIHcpOworICAgICAgICAgICAgd2lkdGggLT0gZHg7Cisg
ICAgICAgICAgICBzcmMgKz0gd2lkdGggLSAxOworICAgICAgICAgICAgZHN0ICs9IHdpZHRoICsg
ZHggLSAxOworICAgICAgICAgICAgZm9yICg7IGhlaWdodCA+IDA7IGhlaWdodC0tLCBkc3QgLT0g
cm93c2l6ZSwgc3JjIC09IHJvd3NpemUpCisgICAgICAgICAgICAgICAgX2V3a192aWV3XzRiX21v
dmVfbGluZV9yaWdodChkc3QsIHNyYywgd2lkdGgpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAt
NTI0LDkgKzUyNCw5IEBAIHN0YXRpYyB2b2lkIF9ld2tfdmlld19zaW5nbGVfc21hcnRfem9vbV93
ZWFrX3Ntb290aF9zY2FsZV9zZXQoRXdrX1ZpZXdfU21hcnRfRGF0CiAgICAgZXZhc19vYmplY3Rf
aW1hZ2Vfc21vb3RoX3NjYWxlX3NldChzZC0+YmFja2luZ19zdG9yZSwgc21vb3RoX3NjYWxlKTsK
IH0KIAotc3RhdGljIHZvaWQgX2V3a192aWV3X3NpbmdsZV9zbWFydF9iZ19jb2xvcl9zZXQoRXdr
X1ZpZXdfU21hcnRfRGF0YSogc2QsIHVuc2lnbmVkIGNoYXIgciwgdW5zaWduZWQgY2hhciBnLCB1
bnNpZ25lZCBjaGFyIGIsIHVuc2lnbmVkIGNoYXIgYSkKK3N0YXRpYyB2b2lkIF9ld2tfdmlld19z
aW5nbGVfc21hcnRfYmdfY29sb3Jfc2V0KEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkLCB1bnNpZ25l
ZCBjaGFyIHJlZCwgdW5zaWduZWQgY2hhciBncmVlbiwgdW5zaWduZWQgY2hhciBibHVlLCB1bnNp
Z25lZCBjaGFyIGFscGhhKQogewotICAgIGV2YXNfb2JqZWN0X2ltYWdlX2FscGhhX3NldChzZC0+
YmFja2luZ19zdG9yZSwgYSA8IDI1NSk7CisgICAgZXZhc19vYmplY3RfaW1hZ2VfYWxwaGFfc2V0
KHNkLT5iYWNraW5nX3N0b3JlLCBhbHBoYSA8IDI1NSk7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmll
d19zaW5nbGVfc21hcnRfc2V0KEV3a19WaWV3X1NtYXJ0X0NsYXNzKiBhcGkpCkBAIC01NjMsNyAr
NTYzLDcgQEAgc3RhdGljIGlubGluZSBFdmFzX1NtYXJ0KiBfZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0
X2NsYXNzX25ldyh2b2lkKQogICAgIHJldHVybiBzbWFydDsKIH0KIAotRXZhc19PYmplY3QqIGV3
a192aWV3X3NpbmdsZV9hZGQoRXZhcyogZSkKK0V2YXNfT2JqZWN0KiBld2tfdmlld19zaW5nbGVf
YWRkKEV2YXMqIGNhbnZhcykKIHsKLSAgICByZXR1cm4gZXZhc19vYmplY3Rfc21hcnRfYWRkKGUs
IF9ld2tfdmlld19zaW5nbGVfc21hcnRfY2xhc3NfbmV3KCkpOworICAgIHJldHVybiBldmFzX29i
amVjdF9zbWFydF9hZGQoY2FudmFzLCBfZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0X2NsYXNzX25ldygp
KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlld190aWxlZC5j
cHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXdfdGlsZWQuY3BwCmluZGV4IGY4N2Y0
OGIuLjNiYjZmMzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlld190
aWxlZC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a192aWV3X3RpbGVkLmNwcApA
QCAtMzAsMTUgKzMwLDE1IEBACiAKIHN0YXRpYyBFd2tfVmlld19TbWFydF9DbGFzcyBfcGFyZW50
X3NjID0gRVdLX1ZJRVdfU01BUlRfQ0xBU1NfSU5JVF9OVUxMOwogCi1zdGF0aWMgRWluYV9Cb29s
IF9ld2tfdmlld190aWxlZF9yZW5kZXJfY2Iodm9pZCogZGF0YSwgRXdrX1RpbGUqIHQsIGNvbnN0
IEVpbmFfUmVjdGFuZ2xlKiBhcmVhKQorc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfdGlsZWRf
cmVuZGVyX2NiKHZvaWQqIGRhdGEsIEV3a19UaWxlKiB0aWxlLCBjb25zdCBFaW5hX1JlY3Rhbmds
ZSogYXJlYSkKIHsKICAgICBFd2tfVmlld19Qcml2YXRlX0RhdGEqIHByaXYgPSBzdGF0aWNfY2Fz
dDxFd2tfVmlld19Qcml2YXRlX0RhdGEqPihkYXRhKTsKLSAgICBFaW5hX1JlY3RhbmdsZSByID0g
e2FyZWEtPnggKyB0LT54LCBhcmVhLT55ICsgdC0+eSwgYXJlYS0+dywgYXJlYS0+aH07CisgICAg
RWluYV9SZWN0YW5nbGUgcmVjdCA9IHthcmVhLT54ICsgdGlsZS0+eCwgYXJlYS0+eSArIHRpbGUt
PnksIGFyZWEtPncsIGFyZWEtPmh9OwogCi0gICAgcmV0dXJuIGV3a192aWV3X3BhaW50X2NvbnRl
bnRzKHByaXYsIHQtPmNhaXJvLCAmcik7CisgICAgcmV0dXJuIGV3a192aWV3X3BhaW50X2NvbnRl
bnRzKHByaXYsIHRpbGUtPmNhaXJvLCAmcmVjdCk7CiB9CiAKLXN0YXRpYyB2b2lkKiBfZXdrX3Zp
ZXdfdGlsZWRfdXBkYXRlc19wcm9jZXNzX3ByZSh2b2lkKiBkYXRhLCBFdmFzX09iamVjdCogbykK
K3N0YXRpYyB2b2lkKiBfZXdrX3ZpZXdfdGlsZWRfdXBkYXRlc19wcm9jZXNzX3ByZSh2b2lkKiBk
YXRhLCBFdmFzX09iamVjdCogZXdrVGlsZSkKIHsKICAgICBFd2tfVmlld19Qcml2YXRlX0RhdGEq
IHByaXYgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19Qcml2YXRlX0RhdGEqPihkYXRhKTsKICAgICBl
d2tfdmlld19sYXlvdXRfaWZfbmVlZGVkX3JlY3Vyc2l2ZShwcml2KTsKQEAgLTU2LDcgKzU2LDcg
QEAgc3RhdGljIEV2YXNfT2JqZWN0KiBfZXdrX3ZpZXdfdGlsZWRfc21hcnRfYmFja2luZ19zdG9y
ZV9hZGQoRXdrX1ZpZXdfU21hcnRfRGF0YSoKIH0KIAogc3RhdGljIHZvaWQKLV9ld2tfdmlld190
aWxlZF9jb250ZW50c19zaXplX2NoYW5nZWRfY2Iodm9pZCogZGF0YSwgRXZhc19PYmplY3QqIG8s
IHZvaWQqIGV2ZW50X2luZm8pCitfZXdrX3ZpZXdfdGlsZWRfY29udGVudHNfc2l6ZV9jaGFuZ2Vk
X2NiKHZvaWQqIGRhdGEsIEV2YXNfT2JqZWN0KiBld2tUaWxlLCB2b2lkKiBldmVudF9pbmZvKQog
ewogICAgIEV2YXNfQ29vcmQqIHNpemUgPSBzdGF0aWNfY2FzdDxFdmFzX0Nvb3JkKj4oZXZlbnRf
aW5mbyk7CiAgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QgPSBzdGF0aWNfY2FzdDxFd2tfVmll
d19TbWFydF9EYXRhKj4oZGF0YSk7CkBAIC02NSwxMyArNjUsMTMgQEAgX2V3a192aWV3X3RpbGVk
X2NvbnRlbnRzX3NpemVfY2hhbmdlZF9jYih2b2lkKiBkYXRhLCBFdmFzX09iamVjdCogbywgdm9p
ZCogZXZlbnQKICAgICAgICAgKHNkLT5iYWNraW5nX3N0b3JlLCBzaXplWzBdLCBzaXplWzFdKTsK
IH0KIAotc3RhdGljIHZvaWQgX2V3a192aWV3X3RpbGVkX3NtYXJ0X2FkZChFdmFzX09iamVjdCog
bykKK3N0YXRpYyB2b2lkIF9ld2tfdmlld190aWxlZF9zbWFydF9hZGQoRXZhc19PYmplY3QqIGV3
a1RpbGUpCiB7CiAgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc2Q7CiAKLSAgICBfcGFyZW50X3Nj
LnNjLmFkZChvKTsKKyAgICBfcGFyZW50X3NjLnNjLmFkZChld2tUaWxlKTsKIAotICAgIHNkID0g
c3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGV2YXNfb2JqZWN0X3NtYXJ0X2RhdGFf
Z2V0KG8pKTsKKyAgICBzZCA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihldmFz
X29iamVjdF9zbWFydF9kYXRhX2dldChld2tUaWxlKSk7CiAgICAgaWYgKCFzZCkKICAgICAgICAg
cmV0dXJuOwogCkBAIC0yNzMsMTYgKzI3MywxNiBAQCBFdmFzX09iamVjdCogZXdrX3ZpZXdfdGls
ZWRfYWRkKEV2YXMqIGUpCiAgICAgcmV0dXJuIGV2YXNfb2JqZWN0X3NtYXJ0X2FkZChlLCBfZXdr
X3ZpZXdfdGlsZWRfc21hcnRfY2xhc3NfbmV3KCkpOwogfQogCi1Fd2tfVGlsZV9VbnVzZWRfQ2Fj
aGUqIGV3a192aWV3X3RpbGVkX3VudXNlZF9jYWNoZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIG8p
CitFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIGV3a192aWV3X3RpbGVkX3VudXNlZF9jYWNoZV9nZXQo
Y29uc3QgRXZhc19PYmplY3QqIGV3a1RpbGUpCiB7Ci0gICAgRXdrX1ZpZXdfU21hcnRfRGF0YSog
c2QgPSBld2tfdmlld19zbWFydF9kYXRhX2dldChvKTsKKyAgICBFd2tfVmlld19TbWFydF9EYXRh
KiBzZCA9IGV3a192aWV3X3NtYXJ0X2RhdGFfZ2V0KGV3a1RpbGUpOwogICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOX1ZBTChzZCwgMCk7CiAgICAgcmV0dXJuIGV3a190aWxlZF9iYWNraW5n
X3N0b3JlX3RpbGVfdW51c2VkX2NhY2hlX2dldChzZC0+YmFja2luZ19zdG9yZSk7CiB9CiAKLXZv
aWQgZXdrX3ZpZXdfdGlsZWRfdW51c2VkX2NhY2hlX3NldChFdmFzX09iamVjdCogbywgRXdrX1Rp
bGVfVW51c2VkX0NhY2hlKiBjYWNoZSkKK3ZvaWQgZXdrX3ZpZXdfdGlsZWRfdW51c2VkX2NhY2hl
X3NldChFdmFzX09iamVjdCogZXdrVGlsZSwgRXdrX1RpbGVfVW51c2VkX0NhY2hlKiBjYWNoZSkK
IHsKLSAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzZCA9IGV3a192aWV3X3NtYXJ0X2RhdGFfZ2V0
KG8pOworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0gZXdrX3ZpZXdfc21hcnRfZGF0YV9n
ZXQoZXdrVGlsZSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QpOwogICAgIGV3
a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfdW51c2VkX2NhY2hlX3NldChzZC0+YmFja2luZ19z
dG9yZSwgY2FjaGUpOwogfQo=
</data>
<flag name="commit-queue"
          id="107036"
          type_id="3"
          status="-"
          setter="gyuyoung.kim"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>109900</attachid>
            <date>2011-10-05 18:50:55 -0700</date>
            <delta_ts>2011-10-07 03:10:18 -0700</delta_ts>
            <desc>Prototype</desc>
            <filename>patch-prototype.patch</filename>
            <type>text/plain</type>
            <size>302790</size>
            <attacher name="Gyuyoung Kim">gyuyoung.kim</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfY29udGV4dG1lbnUuY3BwIGIv
U291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19jb250ZXh0bWVudS5jcHAKaW5kZXggYWExNjE5Zi4u
NjIxYzc5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19jb250ZXh0bWVu
dS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19jb250ZXh0bWVudS5jcHAKQEAg
LTkyLDExICs5MiwxMSBAQCBFaW5hX0Jvb2wgZXdrX2NvbnRleHRfbWVudV9kZXN0cm95KEV3a19D
b250ZXh0X01lbnUqIG1lbnUpCiAjZW5kaWYKIH0KIAotY29uc3QgRWluYV9MaXN0KiBld2tfY29u
dGV4dF9tZW51X2l0ZW1fbGlzdF9nZXQoY29uc3QgRXdrX0NvbnRleHRfTWVudSogbykKK2NvbnN0
IEVpbmFfTGlzdCogZXdrX2NvbnRleHRfbWVudV9pdGVtX2xpc3RfZ2V0KGNvbnN0IEV3a19Db250
ZXh0X01lbnUqIG1lbnUpCiB7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKG8s
IDApOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChtZW51LCAwKTsKIAotICAg
IHJldHVybiBvLT5pdGVtczsKKyAgICByZXR1cm4gbWVudS0+aXRlbXM7CiB9CiAKIEV3a19Db250
ZXh0X01lbnVfSXRlbSogZXdrX2NvbnRleHRfbWVudV9pdGVtX25ldyhFd2tfQ29udGV4dF9NZW51
X0l0ZW1fVHlwZSB0eXBlLApAQCAtMTQyLDY4ICsxNDIsNjggQEAgdm9pZCBld2tfY29udGV4dF9t
ZW51X2l0ZW1fZnJlZShFd2tfQ29udGV4dF9NZW51X0l0ZW0qIGl0ZW0pCiAgICAgZnJlZShpdGVt
KTsKIH0KIAotRXdrX0NvbnRleHRfTWVudV9JdGVtX1R5cGUgZXdrX2NvbnRleHRfbWVudV9pdGVt
X3R5cGVfZ2V0KGNvbnN0IEV3a19Db250ZXh0X01lbnVfSXRlbSogbykKK0V3a19Db250ZXh0X01l
bnVfSXRlbV9UeXBlIGV3a19jb250ZXh0X21lbnVfaXRlbV90eXBlX2dldChjb25zdCBFd2tfQ29u
dGV4dF9NZW51X0l0ZW0qIGl0ZW0pCiB7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5f
VkFMKG8sIEVXS19BQ1RJT05fVFlQRSk7Ci0gICAgcmV0dXJuIG8tPnR5cGU7CisgICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGl0ZW0sIEVXS19BQ1RJT05fVFlQRSk7CisgICAgcmV0
dXJuIGl0ZW0tPnR5cGU7CiB9CiAKLUVpbmFfQm9vbCBld2tfY29udGV4dF9tZW51X2l0ZW1fdHlw
ZV9zZXQoRXdrX0NvbnRleHRfTWVudV9JdGVtKiBvLCBFd2tfQ29udGV4dF9NZW51X0l0ZW1fVHlw
ZSB0eXBlKQorRWluYV9Cb29sIGV3a19jb250ZXh0X21lbnVfaXRlbV90eXBlX3NldChFd2tfQ29u
dGV4dF9NZW51X0l0ZW0qIGl0ZW0sIEV3a19Db250ZXh0X01lbnVfSXRlbV9UeXBlIHR5cGUpCiB7
Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKG8sIEVJTkFfRkFMU0UpOwotICAg
IG8tPnR5cGUgPSB0eXBlOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChpdGVt
LCBFSU5BX0ZBTFNFKTsKKyAgICBpdGVtLT50eXBlID0gdHlwZTsKICAgICByZXR1cm4gRUlOQV9U
UlVFOwogfQogCi1Fd2tfQ29udGV4dF9NZW51X0FjdGlvbiBld2tfY29udGV4dF9tZW51X2l0ZW1f
YWN0aW9uX2dldChjb25zdCBFd2tfQ29udGV4dF9NZW51X0l0ZW0qIG8pCitFd2tfQ29udGV4dF9N
ZW51X0FjdGlvbiBld2tfY29udGV4dF9tZW51X2l0ZW1fYWN0aW9uX2dldChjb25zdCBFd2tfQ29u
dGV4dF9NZW51X0l0ZW0qIGl0ZW0pCiB7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5f
VkFMKG8sIEVXS19DT05URVhUX01FTlVfSVRFTV9UQUdfTk9fQUNUSU9OKTsKLSAgICByZXR1cm4g
by0+YWN0aW9uOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChpdGVtLCBFV0tf
Q09OVEVYVF9NRU5VX0lURU1fVEFHX05PX0FDVElPTik7CisgICAgcmV0dXJuIGl0ZW0tPmFjdGlv
bjsKIH0KIAotRWluYV9Cb29sIGV3a19jb250ZXh0X21lbnVfaXRlbV9hY3Rpb25fc2V0KEV3a19D
b250ZXh0X01lbnVfSXRlbSogbywgRXdrX0NvbnRleHRfTWVudV9BY3Rpb24gYWN0aW9uKQorRWlu
YV9Cb29sIGV3a19jb250ZXh0X21lbnVfaXRlbV9hY3Rpb25fc2V0KEV3a19Db250ZXh0X01lbnVf
SXRlbSogaXRlbSwgRXdrX0NvbnRleHRfTWVudV9BY3Rpb24gYWN0aW9uKQogewotICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChvLCBFSU5BX0ZBTFNFKTsKLSAgICBvLT5hY3Rpb24g
PSBhY3Rpb247CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGl0ZW0sIEVJTkFf
RkFMU0UpOworICAgIGl0ZW0tPmFjdGlvbiA9IGFjdGlvbjsKICAgICByZXR1cm4gRUlOQV9UUlVF
OwogfQogCi1jb25zdCBjaGFyKiBld2tfY29udGV4dF9tZW51X2l0ZW1fdGl0bGVfZ2V0KGNvbnN0
IEV3a19Db250ZXh0X01lbnVfSXRlbSogbykKK2NvbnN0IGNoYXIqIGV3a19jb250ZXh0X21lbnVf
aXRlbV90aXRsZV9nZXQoY29uc3QgRXdrX0NvbnRleHRfTWVudV9JdGVtKiBpdGVtKQogewotICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChvLCAwKTsKLSAgICByZXR1cm4gby0+dGl0
bGU7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGl0ZW0sIDApOworICAgIHJl
dHVybiBpdGVtLT50aXRsZTsKIH0KIAotY29uc3QgY2hhciogZXdrX2NvbnRleHRfbWVudV9pdGVt
X3RpdGxlX3NldChFd2tfQ29udGV4dF9NZW51X0l0ZW0qIG8sIGNvbnN0IGNoYXIqIHRpdGxlKQor
Y29uc3QgY2hhciogZXdrX2NvbnRleHRfbWVudV9pdGVtX3RpdGxlX3NldChFd2tfQ29udGV4dF9N
ZW51X0l0ZW0qIGl0ZW0sIGNvbnN0IGNoYXIqIHRpdGxlKQogewotICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOX1ZBTChvLCAwKTsKLSAgICBlaW5hX3N0cmluZ3NoYXJlX3JlcGxhY2UoJm8t
PnRpdGxlLCB0aXRsZSk7Ci0gICAgcmV0dXJuIG8tPnRpdGxlOworICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOX1ZBTChpdGVtLCAwKTsKKyAgICBlaW5hX3N0cmluZ3NoYXJlX3JlcGxhY2Uo
Jml0ZW0tPnRpdGxlLCB0aXRsZSk7CisgICAgcmV0dXJuIGl0ZW0tPnRpdGxlOwogfQogCi1FaW5h
X0Jvb2wgZXdrX2NvbnRleHRfbWVudV9pdGVtX2NoZWNrZWRfZ2V0KGNvbnN0IEV3a19Db250ZXh0
X01lbnVfSXRlbSogbykKK0VpbmFfQm9vbCBld2tfY29udGV4dF9tZW51X2l0ZW1fY2hlY2tlZF9n
ZXQoY29uc3QgRXdrX0NvbnRleHRfTWVudV9JdGVtKiBpdGVtKQogewotICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOX1ZBTChvLCBFSU5BX0ZBTFNFKTsKLSAgICByZXR1cm4gby0+Y2hlY2tl
ZDsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoaXRlbSwgRUlOQV9GQUxTRSk7
CisgICAgcmV0dXJuIGl0ZW0tPmNoZWNrZWQ7CiB9CiAKLUVpbmFfQm9vbCBld2tfY29udGV4dF9t
ZW51X2l0ZW1fY2hlY2tlZF9zZXQoRXdrX0NvbnRleHRfTWVudV9JdGVtKiBvLCBFaW5hX0Jvb2wg
Y2hlY2tlZCkKK0VpbmFfQm9vbCBld2tfY29udGV4dF9tZW51X2l0ZW1fY2hlY2tlZF9zZXQoRXdr
X0NvbnRleHRfTWVudV9JdGVtKiBpdGVtLCBFaW5hX0Jvb2wgY2hlY2tlZCkKIHsKLSAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwobywgRUlOQV9GQUxTRSk7Ci0gICAgby0+Y2hlY2tl
ZCA9IGNoZWNrZWQ7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGl0ZW0sIEVJ
TkFfRkFMU0UpOworICAgIGl0ZW0tPmNoZWNrZWQgPSBjaGVja2VkOwogICAgIHJldHVybiBFSU5B
X1RSVUU7CiB9CiAKLUVpbmFfQm9vbCBld2tfY29udGV4dF9tZW51X2l0ZW1fZW5hYmxlZF9nZXQo
Y29uc3QgRXdrX0NvbnRleHRfTWVudV9JdGVtKiBvKQorRWluYV9Cb29sIGV3a19jb250ZXh0X21l
bnVfaXRlbV9lbmFibGVkX2dldChjb25zdCBFd2tfQ29udGV4dF9NZW51X0l0ZW0qIGl0ZW0pCiB7
Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKG8sIEVJTkFfRkFMU0UpOwotICAg
IHJldHVybiBvLT5lbmFibGVkOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChp
dGVtLCBFSU5BX0ZBTFNFKTsKKyAgICByZXR1cm4gaXRlbS0+ZW5hYmxlZDsKIH0KIAotRWluYV9C
b29sIGV3a19jb250ZXh0X21lbnVfaXRlbV9lbmFibGVkX3NldChFd2tfQ29udGV4dF9NZW51X0l0
ZW0qIG8sIEVpbmFfQm9vbCBlbmFibGVkKQorRWluYV9Cb29sIGV3a19jb250ZXh0X21lbnVfaXRl
bV9lbmFibGVkX3NldChFd2tfQ29udGV4dF9NZW51X0l0ZW0qIGl0ZW0sIEVpbmFfQm9vbCBlbmFi
bGVkKQogewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChvLCBFSU5BX0ZBTFNF
KTsKLSAgICBvLT5lbmFibGVkID0gZW5hYmxlZDsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTl9WQUwoaXRlbSwgRUlOQV9GQUxTRSk7CisgICAgaXRlbS0+ZW5hYmxlZCA9IGVuYWJsZWQ7
CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIApAQCAtMjU2LDExICsyNTYsMTEgQEAgRXdrX0Nv
bnRleHRfTWVudSogZXdrX2NvbnRleHRfbWVudV9uZXcoRXZhc19PYmplY3QqIHZpZXcsIFdlYkNv
cmU6OkNvbnRleHRNZW51Q28KICAqIEBzZWUgZXdrX2NvbnRleHRfbWVudV91bnJlZgogICogQHNl
ZSBld2tfY29udGV4dF9tZW51X2Rlc3Ryb3kKICAqLwotRWluYV9Cb29sIGV3a19jb250ZXh0X21l
bnVfZnJlZShFd2tfQ29udGV4dF9NZW51KiBvKQorRWluYV9Cb29sIGV3a19jb250ZXh0X21lbnVf
ZnJlZShFd2tfQ29udGV4dF9NZW51KiBtZW51KQogewotICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOX1ZBTChvLCBFSU5BX0ZBTFNFKTsKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFj
a19jYWxsKG8tPnZpZXcsICJjb250ZXh0bWVudSxmcmVlIiwgbyk7Ci0gICAgZXdrX2NvbnRleHRf
bWVudV91bnJlZihvKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwobWVudSwg
RUlOQV9GQUxTRSk7CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChtZW51LT52
aWV3LCAiY29udGV4dG1lbnUsZnJlZSIsIG1lbnUpOworICAgIGV3a19jb250ZXh0X21lbnVfdW5y
ZWYobWVudSk7CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIApAQCAtMjc1LDcgKzI3NSw3IEBA
IEVpbmFfQm9vbCBld2tfY29udGV4dF9tZW51X2ZyZWUoRXdrX0NvbnRleHRfTWVudSogbykKICAq
CiAgKiBAc2VlIGV3a19jb250ZXh0X21lbnVfaXRlbV9uZXcKICAqLwotdm9pZCBld2tfY29udGV4
dF9tZW51X2l0ZW1fYXBwZW5kKEV3a19Db250ZXh0X01lbnUqIG8sIFdlYkNvcmU6OkNvbnRleHRN
ZW51SXRlbSYgY29yZSkKK3ZvaWQgZXdrX2NvbnRleHRfbWVudV9pdGVtX2FwcGVuZChFd2tfQ29u
dGV4dF9NZW51KiBtZW51LCBXZWJDb3JlOjpDb250ZXh0TWVudUl0ZW0mIGNvcmUpCiB7CiAgICAg
RXdrX0NvbnRleHRfTWVudV9JdGVtX1R5cGUgdHlwZSA9IHN0YXRpY19jYXN0PEV3a19Db250ZXh0
X01lbnVfSXRlbV9UeXBlPihjb3JlLnR5cGUoKSk7CiAgICAgRXdrX0NvbnRleHRfTWVudV9BY3Rp
b24gYWN0aW9uID0gc3RhdGljX2Nhc3Q8RXdrX0NvbnRleHRfTWVudV9BY3Rpb24+KGNvcmUuYWN0
aW9uKCkpOwpAQCAtMjg1LDggKzI4NSw4IEBAIHZvaWQgZXdrX2NvbnRleHRfbWVudV9pdGVtX2Fw
cGVuZChFd2tfQ29udGV4dF9NZW51KiBvLCBXZWJDb3JlOjpDb250ZXh0TWVudUl0ZW0mCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZS5lbmFibGVkKCkpOwog
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKG1lbnVfaXRlbSk7CiAKLSAgICBvLT5pdGVt
cyA9IGVpbmFfbGlzdF9hcHBlbmQoby0+aXRlbXMsIG1lbnVfaXRlbSk7Ci0gICAgZXZhc19vYmpl
Y3Rfc21hcnRfY2FsbGJhY2tfY2FsbChvLT52aWV3LCAiY29udGV4dG1lbnUsaXRlbSxhcHBlbmRl
ZCIsIG8pOworICAgIG1lbnUtPml0ZW1zID0gZWluYV9saXN0X2FwcGVuZChtZW51LT5pdGVtcywg
bWVudV9pdGVtKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKG1lbnUtPnZp
ZXcsICJjb250ZXh0bWVudSxpdGVtLGFwcGVuZGVkIiwgbWVudSk7CiB9CiAKIC8qKgpAQCAtMzAx
LDEyICszMDEsMTIgQEAgdm9pZCBld2tfY29udGV4dF9tZW51X2l0ZW1fYXBwZW5kKEV3a19Db250
ZXh0X01lbnUqIG8sIFdlYkNvcmU6OkNvbnRleHRNZW51SXRlbSYKICAqCiAgKiBAc2VlIGV3a19j
b250ZXh0X21lbnVfaXRlbV9saXN0X2dldAogICovCi1Fd2tfQ29udGV4dF9NZW51KiBld2tfY29u
dGV4dF9tZW51X2N1c3RvbV9nZXQoY29uc3QgRXdrX0NvbnRleHRfTWVudSogbykKK0V3a19Db250
ZXh0X01lbnUqIGV3a19jb250ZXh0X21lbnVfY3VzdG9tX2dldChjb25zdCBFd2tfQ29udGV4dF9N
ZW51KiBtZW51KQogewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChvLCAwKTsK
KyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwobWVudSwgMCk7CiAKLSAgICBldmFz
X29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKG8tPnZpZXcsICJjb250ZXh0bWVudSxjdXN0b21p
emUiLCBvLT5pdGVtcyk7Ci0gICAgcmV0dXJuIG87CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2Fs
bGJhY2tfY2FsbChtZW51LT52aWV3LCAiY29udGV4dG1lbnUsY3VzdG9taXplIiwgbWVudS0+aXRl
bXMpOworICAgIHJldHVybiBtZW51OwogfQogCiAvKioKQEAgLTMxNiwxMSArMzE2LDExIEBAIEV3
a19Db250ZXh0X01lbnUqIGV3a19jb250ZXh0X21lbnVfY3VzdG9tX2dldChjb25zdCBFd2tfQ29u
dGV4dF9NZW51KiBvKQogICoKICAqIEBwYXJhbSBvIHRoZSBjb250ZXh0IG1lbnUgb2JqZWN0CiAg
Ki8KLXZvaWQgZXdrX2NvbnRleHRfbWVudV9zaG93KGNvbnN0IEV3a19Db250ZXh0X01lbnUqIG8p
Cit2b2lkIGV3a19jb250ZXh0X21lbnVfc2hvdyhjb25zdCBFd2tfQ29udGV4dF9NZW51KiBtZW51
KQogewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKG8pOworICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOKG1lbnUpOwogCi0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tf
Y2FsbChvLT52aWV3LCAiY29udGV4dG1lbnUsc2hvdyIsIG8pOworICAgIGV2YXNfb2JqZWN0X3Nt
YXJ0X2NhbGxiYWNrX2NhbGwobWVudS0+dmlldywgImNvbnRleHRtZW51LHNob3ciLCBtZW51KTsK
IH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2ZyYW1l
LmNwcCBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfZnJhbWUuY3BwCmluZGV4IGJjOGY4YWUu
LmVhNmJjMDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfZnJhbWUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfZnJhbWUuY3BwCkBAIC04Niw1MyArODYs
NTMgQEAgc3RydWN0IEVpbmFfSXRlcmF0b3JfRXdrX0ZyYW1lIHsKIH07CiAKICNpZm5kZWYgRVdL
X1RZUEVfQ0hFQ0sKLSNkZWZpbmUgRVdLX0ZSQU1FX1RZUEVfQ0hFQ0sobywgLi4uKSBkbyB7IH0g
d2hpbGUgKDApCisjZGVmaW5lIEVXS19GUkFNRV9UWVBFX0NIRUNLKGV3a0ZyYW1lLCAuLi4pIGRv
IHsgfSB3aGlsZSAoMCkKICNlbHNlCi0jZGVmaW5lIEVXS19GUkFNRV9UWVBFX0NIRUNLKG8sIC4u
LikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIEVXS19GUkFN
RV9UWVBFX0NIRUNLKGV3a0ZyYW1lLCAuLi4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAogICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBjb25zdCBjaGFyKiBfdG1wX290eXBl
ID0gZXZhc19vYmplY3RfdHlwZV9nZXQobyk7ICAgICAgICAgICAgICAgXAorICAgICAgICBjb25z
dCBjaGFyKiBfdG1wX290eXBlID0gZXZhc19vYmplY3RfdHlwZV9nZXQoZXdrRnJhbWUpOyAgICAg
ICAgICAgICAgIFwKICAgICAgICAgaWYgKEVJTkFfVU5MSUtFTFkoX3RtcF9vdHlwZSAhPSBFV0tf
RlJBTUVfVFlQRV9TVFIpKSB7ICAgICAgICAgIFwKICAgICAgICAgICAgIEVJTkFfTE9HX0NSSVQg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAg
ICAgICAgICAoIiVwICglcykgaXMgbm90IG9mIGFuIGV3a19mcmFtZSEiLCBvLCAgICAgICAgICAg
ICAgICAgIFwKKyAgICAgICAgICAgICAgICAoIiVwICglcykgaXMgbm90IG9mIGFuIGV3a19mcmFt
ZSEiLCBld2tGcmFtZSwgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgX3RtcF9v
dHlwZSA/IF90bXBfb3R5cGUgOiAiKG51bGwpIik7ICAgICAgICAgICAgICAgICAgICBcCiAgICAg
ICAgICAgICByZXR1cm4gX19WQV9BUkdTX187ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCiAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgfSB3aGlsZSAoMCkKICNlbmRpZgog
Ci0jZGVmaW5lIEVXS19GUkFNRV9TRF9HRVQobywgcHRyKSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgIEV3a19GcmFtZV9TbWFydF9EYXRhKiBwdHIgPSBzdGF0aWNfY2FzdDxF
d2tfRnJhbWVfU21hcnRfRGF0YSo+KGV2YXNfb2JqZWN0X3NtYXJ0X2RhdGFfZ2V0KG8pKQorI2Rl
ZmluZSBFV0tfRlJBTUVfU0RfR0VUKGV3a0ZyYW1lLCBwdHIpICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgRXdrX0ZyYW1lX1NtYXJ0X0RhdGEqIHB0ciA9IHN0YXRpY19jYXN0
PEV3a19GcmFtZV9TbWFydF9EYXRhKj4oZXZhc19vYmplY3Rfc21hcnRfZGF0YV9nZXQoZXdrRnJh
bWUpKQogCi0jZGVmaW5lIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHB0ciwgLi4uKSAg
ICAgICAgIFwKLSAgICBFV0tfRlJBTUVfVFlQRV9DSEVDSyhvLCBfX1ZBX0FSR1NfXyk7ICAgICAg
ICAgICAgICAgXAotICAgIEVXS19GUkFNRV9TRF9HRVQobywgcHRyKTsgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisjZGVmaW5lIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1l
LCBwdHIsIC4uLikgICAgICAgICBcCisgICAgRVdLX0ZSQU1FX1RZUEVfQ0hFQ0soZXdrRnJhbWUs
IF9fVkFfQVJHU19fKTsgICAgICAgICAgICAgICBcCisgICAgRVdLX0ZSQU1FX1NEX0dFVChld2tG
cmFtZSwgcHRyKTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgaWYgKCFwdHIpIHsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgQ1JJVElD
QUwoIm5vIHNtYXJ0IGRhdGEgZm9yIG9iamVjdCAlcCAoJXMpIiwgICAgXAotICAgICAgICAgICAg
ICAgICBvLCBldmFzX29iamVjdF90eXBlX2dldChvKSk7ICAgICAgICAgICBcCisgICAgICAgICAg
ICAgICAgIGV3a0ZyYW1lLCBldmFzX29iamVjdF90eXBlX2dldChld2tGcmFtZSkpOyAgICAgICAg
ICAgXAogICAgICAgICByZXR1cm4gX19WQV9BUkdTX187ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCiAgICAgfQogCiBzdGF0aWMgRXZhc19TbWFydF9DbGFzcyBfcGFyZW50X3NjID0gRVZB
U19TTUFSVF9DTEFTU19JTklUX05VTEw7CiAKICNpZmRlZiBFV0tfRlJBTUVfREVCVUcKLXN0YXRp
YyBpbmxpbmUgdm9pZCBfZXdrX2ZyYW1lX2RlYnVnKEV2YXNfT2JqZWN0KiBvKQorc3RhdGljIGlu
bGluZSB2b2lkIF9ld2tfZnJhbWVfZGVidWcoRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewogICAg
IEV2YXNfT2JqZWN0KiBjbGlwLCAqIHBhcmVudDsKICAgICBFdmFzX0Nvb3JkIHgsIHksIHcsIGgs
IGN4LCBjeSwgY3csIGNoOwogICAgIGludCByLCBnLCBiLCBhLCBjciwgY2csIGNiLCBjYTsKIAot
ICAgIGV2YXNfb2JqZWN0X2NvbG9yX2dldChvLCAmciwgJmcsICZiLCAmYSk7Ci0gICAgZXZhc19v
YmplY3RfZ2VvbWV0cnlfZ2V0KG8sICZ4LCAmeSwgJncsICZoKTsKKyAgICBldmFzX29iamVjdF9j
b2xvcl9nZXQoZXdrRnJhbWUsICZyLCAmZywgJmIsICZhKTsKKyAgICBldmFzX29iamVjdF9nZW9t
ZXRyeV9nZXQoZXdrRnJhbWUsICZ4LCAmeSwgJncsICZoKTsKIAotICAgIGNsaXAgPSBldmFzX29i
amVjdF9jbGlwX2dldChvKTsKKyAgICBjbGlwID0gZXZhc19vYmplY3RfY2xpcF9nZXQoZXdrRnJh
bWUpOwogICAgIGV2YXNfb2JqZWN0X2NvbG9yX2dldChjbGlwLCAmY3IsICZjZywgJmNiLCAmY2Ep
OwogICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldChjbGlwLCAmY3gsICZjeSwgJmN3LCAmY2gp
OwogCiAgICAgZnByaW50ZihzdGRlcnIsICIlcDogdHlwZT0lcyBuYW1lPSVzLCB2aXNpYmxlPSVk
LCBjb2xvcj0lMDJ4JTAyeCUwMnglMDJ4LCAlZCwlZCslZHglZCwgY2xpcHBlcj0lcCAoJWQsICUw
MnglMDJ4JTAyeCUwMngsICVkLCVkKyVkeCVkKVxuIiwKLSAgICAgICAgICAgIG8sIGV2YXNfb2Jq
ZWN0X3R5cGVfZ2V0KG8pLCBldmFzX29iamVjdF9uYW1lX2dldChvKSwgZXZhc19vYmplY3Rfdmlz
aWJsZV9nZXQobyksCisgICAgICAgICAgICBld2tGcmFtZSwgZXZhc19vYmplY3RfdHlwZV9nZXQo
ZXdrRnJhbWUpLCBldmFzX29iamVjdF9uYW1lX2dldChld2tGcmFtZSksIGV2YXNfb2JqZWN0X3Zp
c2libGVfZ2V0KGV3a0ZyYW1lKSwKICAgICAgICAgICAgIHIsIGcsIGIsIGEsIHgsIHksIHcsIGgs
CiAgICAgICAgICAgICBjbGlwLCBldmFzX29iamVjdF92aXNpYmxlX2dldChjbGlwKSwgY3IsIGNn
LCBjYiwgY2EsIGN4LCBjeSwgY3csIGNoKTsKLSAgICBwYXJlbnQgPSBldmFzX29iamVjdF9zbWFy
dF9wYXJlbnRfZ2V0KG8pOworICAgIHBhcmVudCA9IGV2YXNfb2JqZWN0X3NtYXJ0X3BhcmVudF9n
ZXQoZXdrRnJhbWUpOwogICAgIGlmICghcGFyZW50KQogICAgICAgICBmcHJpbnRmKHN0ZGVyciwg
IlxuIik7CiAgICAgZWxzZQpAQCAtMTc2LDkgKzE3Niw5IEBAIHN0YXRpYyBFdmFzX09iamVjdCog
X2V3a19mcmFtZV9jaGlsZHJlbl9pdGVyYXRvcl9nZXRfY29udGFpbmVyKEVpbmFfSXRlcmF0b3Jf
RXdrCiAgICAgcmV0dXJuIGl0LT5vYmo7CiB9CiAKLXN0YXRpYyB2b2lkIF9ld2tfZnJhbWVfc21h
cnRfYWRkKEV2YXNfT2JqZWN0KiBvKQorc3RhdGljIHZvaWQgX2V3a19mcmFtZV9zbWFydF9hZGQo
RXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewotICAgIEVXS19GUkFNRV9TRF9HRVQobywgc2QpOwor
ICAgIEVXS19GUkFNRV9TRF9HRVQoZXdrRnJhbWUsIHNkKTsKIAogICAgIGlmICghc2QpIHsKICAg
ICAgICAgc2QgPSBzdGF0aWNfY2FzdDxFd2tfRnJhbWVfU21hcnRfRGF0YSo+KGNhbGxvYygxLCBz
aXplb2YoRXdrX0ZyYW1lX1NtYXJ0X0RhdGEpKSk7CkBAIC0xODYsMTIgKzE4NiwxMiBAQCBzdGF0
aWMgdm9pZCBfZXdrX2ZyYW1lX3NtYXJ0X2FkZChFdmFzX09iamVjdCogbykKICAgICAgICAgICAg
IENSSVRJQ0FMKCJjb3VsZCBub3QgYWxsb2NhdGUgRXdrX0ZyYW1lX1NtYXJ0X0RhdGEiKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBldmFzX29iamVjdF9zbWFydF9k
YXRhX3NldChvLCBzZCk7CisgICAgICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2RhdGFfc2V0KGV3a0Zy
YW1lLCBzZCk7CiAgICAgfQogCi0gICAgc2QtPnNlbGYgPSBvOworICAgIHNkLT5zZWxmID0gZXdr
RnJhbWU7CiAKLSAgICBfcGFyZW50X3NjLmFkZChvKTsKKyAgICBfcGFyZW50X3NjLmFkZChld2tG
cmFtZSk7CiAgICAgZXZhc19vYmplY3Rfc3RhdGljX2NsaXBfc2V0KHNkLT5iYXNlLmNsaXBwZXIs
IEVJTkFfRkFMU0UpOwogICAgIGV2YXNfb2JqZWN0X21vdmUoc2QtPmJhc2UuY2xpcHBlciwgMCwg
MCk7CiAgICAgZXZhc19vYmplY3RfcmVzaXplKHNkLT5iYXNlLmNsaXBwZXIsIDAsIDApOwpAQCAt
MjI4LDE1ICsyMjgsMTUgQEAgc3RhdGljIHZvaWQgX2V3a19mcmFtZV9zbWFydF9hZGQoRXZhc19P
YmplY3QqIG8pCiAgICAgaWYgKGkgPiA2KQogICAgICAgICBpID0gMDsKIAotICAgIGV2YXNfb2Jq
ZWN0X3NtYXJ0X21lbWJlcl9hZGQoc2QtPnJlZ2lvbiwgbyk7CisgICAgZXZhc19vYmplY3Rfc21h
cnRfbWVtYmVyX2FkZChzZC0+cmVnaW9uLCBld2tGcmFtZSk7CiAgICAgZXZhc19vYmplY3RfaGlk
ZShzZC0+cmVnaW9uKTsKICNlbmRpZgogfQogCi1zdGF0aWMgdm9pZCBfZXdrX2ZyYW1lX3NtYXJ0
X2RlbChFdmFzX09iamVjdCogbykKK3N0YXRpYyB2b2lkIF9ld2tfZnJhbWVfc21hcnRfZGVsKEV2
YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsKLSAgICBXUk4oIm89JXAiLCBvKTsgLy8gWFhYIFJFTU9W
RSBNRSBMQVRFUgotICAgIEVXS19GUkFNRV9TRF9HRVQobywgc2QpOworICAgIFdSTigibz0lcCIs
IGV3a0ZyYW1lKTsgLy8gWFhYIFJFTU9WRSBNRSBMQVRFUgorICAgIEVXS19GUkFNRV9TRF9HRVQo
ZXdrRnJhbWUsIHNkKTsKIAogICAgIGlmIChzZCkgewogICAgICAgICBpZiAoc2QtPmZyYW1lKSB7
CkBAIC0yNTIsMTIgKzI1MiwxMiBAQCBzdGF0aWMgdm9pZCBfZXdrX2ZyYW1lX3NtYXJ0X2RlbChF
dmFzX09iamVjdCogbykKICAgICAgICAgZWluYV9zdHJpbmdzaGFyZV9kZWwoc2QtPm5hbWUpOwog
ICAgIH0KIAotICAgIF9wYXJlbnRfc2MuZGVsKG8pOworICAgIF9wYXJlbnRfc2MuZGVsKGV3a0Zy
YW1lKTsKIH0KIAotc3RhdGljIHZvaWQgX2V3a19mcmFtZV9zbWFydF9yZXNpemUoRXZhc19PYmpl
Y3QqIG8sIEV2YXNfQ29vcmQgdywgRXZhc19Db29yZCBoKQorc3RhdGljIHZvaWQgX2V3a19mcmFt
ZV9zbWFydF9yZXNpemUoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBFdmFzX0Nvb3JkIHcsIEV2YXNf
Q29vcmQgaCkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUKG8sIHNkKTsKKyAgICBFV0tfRlJBTUVf
U0RfR0VUKGV3a0ZyYW1lLCBzZCk7CiAgICAgZXZhc19vYmplY3RfcmVzaXplKHNkLT5iYXNlLmNs
aXBwZXIsIHcsIGgpOwogCiAjaWZkZWYgRVdLX0ZSQU1FX0RFQlVHCkBAIC0yNjYsNyArMjY2LDcg
QEAgc3RhdGljIHZvaWQgX2V3a19mcmFtZV9zbWFydF9yZXNpemUoRXZhc19PYmplY3QqIG8sIEV2
YXNfQ29vcmQgdywgRXZhc19Db29yZCBoKQogICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldChz
ZC0+cmVnaW9uLCAmeCwgJnksICZ3LCAmaCk7CiAgICAgSU5GKCJyZWdpb249JXAsIHZpc2libGU9
JWQsIGdlbz0lZCwlZCArICVkeCVkIiwKICAgICAgICAgc2QtPnJlZ2lvbiwgZXZhc19vYmplY3Rf
dmlzaWJsZV9nZXQoc2QtPnJlZ2lvbiksIHgsIHksIHcsIGgpOwotICAgIF9ld2tfZnJhbWVfZGVi
dWcobyk7CisgICAgX2V3a19mcmFtZV9kZWJ1Zyhld2tGcmFtZSk7CiAjZW5kaWYKIH0KIApAQCAt
MjkyLDE1ICsyOTIsMTUgQEAgc3RhdGljIGlubGluZSBFdmFzX1NtYXJ0KiBfZXdrX2ZyYW1lX3Nt
YXJ0X2NsYXNzX25ldyh2b2lkKQogICAgIHJldHVybiBzbWFydDsKIH0KIAotRXZhc19PYmplY3Qq
IGV3a19mcmFtZV92aWV3X2dldChjb25zdCBFdmFzX09iamVjdCogbykKK0V2YXNfT2JqZWN0KiBl
d2tfZnJhbWVfdmlld19nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewotICAgIEVX
S19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAwKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VU
X09SX1JFVFVSTihld2tGcmFtZSwgc2QsIDApOwogICAgIHJldHVybiBzZC0+dmlldzsKIH0KIAot
RWluYV9JdGVyYXRvciogZXdrX2ZyYW1lX2NoaWxkcmVuX2l0ZXJhdG9yX25ldyhFdmFzX09iamVj
dCogbykKK0VpbmFfSXRlcmF0b3IqIGV3a19mcmFtZV9jaGlsZHJlbl9pdGVyYXRvcl9uZXcoRXZh
c19PYmplY3QqIGV3a0ZyYW1lKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8s
IHNkLCAwKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIDAp
OwogICAgIEVpbmFfSXRlcmF0b3JfRXdrX0ZyYW1lKiBpdCA9IHN0YXRpY19jYXN0PEVpbmFfSXRl
cmF0b3JfRXdrX0ZyYW1lKj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2Fs
bG9jKDEsIHNpemVvZihFaW5hX0l0ZXJhdG9yX0V3a19GcmFtZSkpKTsKICAgICBpZiAoIWl0KQpA
QCAtMzEwLDIzICszMTAsMjMgQEAgRWluYV9JdGVyYXRvciogZXdrX2ZyYW1lX2NoaWxkcmVuX2l0
ZXJhdG9yX25ldyhFdmFzX09iamVjdCogbykKICAgICBpdC0+YmFzZS5uZXh0ID0gRlVOQ19JVEVS
QVRPUl9ORVhUKF9ld2tfZnJhbWVfY2hpbGRyZW5faXRlcmF0b3JfbmV4dCk7CiAgICAgaXQtPmJh
c2UuZ2V0X2NvbnRhaW5lciA9IEZVTkNfSVRFUkFUT1JfR0VUX0NPTlRBSU5FUihfZXdrX2ZyYW1l
X2NoaWxkcmVuX2l0ZXJhdG9yX2dldF9jb250YWluZXIpOwogICAgIGl0LT5iYXNlLmZyZWUgPSBG
VU5DX0lURVJBVE9SX0ZSRUUoZnJlZSk7Ci0gICAgaXQtPm9iaiA9IG87CisgICAgaXQtPm9iaiA9
IGV3a0ZyYW1lOwogICAgIGl0LT5jdXJyZW50SW5kZXggPSAwOwogICAgIHJldHVybiAmaXQtPmJh
c2U7CiB9CiAKLUV2YXNfT2JqZWN0KiBld2tfZnJhbWVfY2hpbGRfZmluZChFdmFzX09iamVjdCog
bywgY29uc3QgY2hhciogbmFtZSkKK0V2YXNfT2JqZWN0KiBld2tfZnJhbWVfY2hpbGRfZmluZChF
dmFzX09iamVjdCogZXdrRnJhbWUsIGNvbnN0IGNoYXIqIG5hbWUpCiB7Ci0gICAgRVdLX0ZSQU1F
X1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIDApOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVU
VVJOKGV3a0ZyYW1lLCBzZCwgMCk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFM
KG5hbWUsIDApOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUs
IDApOwogICAgIFdURjo6U3RyaW5nIHMgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgobmFtZSk7CiAg
ICAgcmV0dXJuIGtpdChzZC0+ZnJhbWUtPnRyZWUoKS0+ZmluZChXVEY6OkF0b21pY1N0cmluZyhz
KSkpOwogfQogCi1FaW5hX0Jvb2wgZXdrX2ZyYW1lX3VyaV9zZXQoRXZhc19PYmplY3QqIG8sIGNv
bnN0IGNoYXIqIHVyaSkKK0VpbmFfQm9vbCBld2tfZnJhbWVfdXJpX3NldChFdmFzX09iamVjdCog
ZXdrRnJhbWUsIGNvbnN0IGNoYXIqIHVyaSkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JF
VFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBXZWJDb3JlOjpLVVJMIGt1cmwoV2ViQ29y
ZTo6S1VSTCgpLCBXVEY6OlN0cmluZzo6ZnJvbVVURjgodXJpKSk7CiAgICAgV2ViQ29yZTo6UmVz
b3VyY2VSZXF1ZXN0IHJlcShrdXJsKTsKICAgICBXZWJDb3JlOjpGcmFtZUxvYWRlciogbG9hZGVy
ID0gc2QtPmZyYW1lLT5sb2FkZXIoKTsKQEAgLTMzNCwyMSArMzM0LDIxIEBAIEVpbmFfQm9vbCBl
d2tfZnJhbWVfdXJpX3NldChFdmFzX09iamVjdCogbywgY29uc3QgY2hhciogdXJpKQogICAgIHJl
dHVybiBFSU5BX1RSVUU7CiB9CiAKLWNvbnN0IGNoYXIqIGV3a19mcmFtZV91cmlfZ2V0KGNvbnN0
IEV2YXNfT2JqZWN0KiBvKQorY29uc3QgY2hhciogZXdrX2ZyYW1lX3VyaV9nZXQoY29uc3QgRXZh
c19PYmplY3QqIGV3a0ZyYW1lKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8s
IHNkLCAwKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIDAp
OwogICAgIHJldHVybiBzZC0+dXJpOwogfQogCi1jb25zdCBjaGFyKiBld2tfZnJhbWVfdGl0bGVf
Z2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQorY29uc3QgY2hhciogZXdrX2ZyYW1lX3RpdGxlX2dl
dChjb25zdCBFdmFzX09iamVjdCogZXdrRnJhbWUpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9P
Ul9SRVRVUk4obywgc2QsIDApOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0Zy
YW1lLCBzZCwgMCk7CiAgICAgcmV0dXJuIHNkLT50aXRsZTsKIH0KIAotY29uc3QgY2hhciogZXdr
X2ZyYW1lX25hbWVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQorY29uc3QgY2hhciogZXdrX2Zy
YW1lX25hbWVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsKLSAgICBFV0tfRlJB
TUVfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgMCk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9S
RVRVUk4oZXdrRnJhbWUsIHNkLCAwKTsKIAogICAgIGlmICghc2QtPmZyYW1lKSB7CiAgICAgICAg
IEVSUigiY291bGQgbm90IGdldCBuYW1lIG9mIHVuaW5pdGlhbGl6ZWQgZnJhbWUuIik7CkBAIC0z
NjUsMTcgKzM2NSwxNyBAQCBjb25zdCBjaGFyKiBld2tfZnJhbWVfbmFtZV9nZXQoY29uc3QgRXZh
c19PYmplY3QqIG8pCiAgICAgcmV0dXJuIHNkLT5uYW1lOwogfQogCi1FaW5hX0Jvb2wgZXdrX2Zy
YW1lX2NvbnRlbnRzX3NpemVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvLCBFdmFzX0Nvb3JkKiB3
LCBFdmFzX0Nvb3JkKiBoKQorRWluYV9Cb29sIGV3a19mcmFtZV9jb250ZW50c19zaXplX2dldChj
b25zdCBFdmFzX09iamVjdCogZXdrRnJhbWUsIEV2YXNfQ29vcmQqIHdpZHRoLCBFdmFzX0Nvb3Jk
KiBoZWlnaHQpCiB7Ci0gICAgaWYgKHcpCi0gICAgICAgICp3ID0gMDsKLSAgICBpZiAoaCkKLSAg
ICAgICAgKmggPSAwOwotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5B
X0ZBTFNFKTsKLSAgICBpZiAodykKLSAgICAgICAgKncgPSBzZC0+Y29udGVudHNfc2l6ZS53Owot
ICAgIGlmIChoKQotICAgICAgICAqaCA9IHNkLT5jb250ZW50c19zaXplLmg7CisgICAgaWYgKHdp
ZHRoKQorICAgICAgICAqd2lkdGggPSAwOworICAgIGlmIChoZWlnaHQpCisgICAgICAgICpoZWln
aHQgPSAwOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgRUlO
QV9GQUxTRSk7CisgICAgaWYgKHdpZHRoKQorICAgICAgICAqd2lkdGggPSBzZC0+Y29udGVudHNf
c2l6ZS53OworICAgIGlmIChoZWlnaHQpCisgICAgICAgICpoZWlnaHQgPSBzZC0+Y29udGVudHNf
c2l6ZS5oOwogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKQEAgLTQxMCwxOCArNDEwLDE4IEBA
IHN0YXRpYyBFaW5hX0Jvb2wgX2V3a19mcmFtZV9jb250ZW50c19zZXRfaW50ZXJuYWwoRXdrX0Zy
YW1lX1NtYXJ0X0RhdGEqIHNkLCBjb25zCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotRWlu
YV9Cb29sIGV3a19mcmFtZV9jb250ZW50c19zZXQoRXZhc19PYmplY3QqIG8sIGNvbnN0IGNoYXIq
IGNvbnRlbnRzLCBzaXplX3QgY29udGVudHNfc2l6ZSwgY29uc3QgY2hhciogbWltZV90eXBlLCBj
b25zdCBjaGFyKiBlbmNvZGluZywgY29uc3QgY2hhciogYmFzZV91cmkpCitFaW5hX0Jvb2wgZXdr
X2ZyYW1lX2NvbnRlbnRzX3NldChFdmFzX09iamVjdCogZXdrRnJhbWUsIGNvbnN0IGNoYXIqIGNv
bnRlbnRzLCBzaXplX3QgY29udGVudHNfc2l6ZSwgY29uc3QgY2hhciogbWltZV90eXBlLCBjb25z
dCBjaGFyKiBlbmNvZGluZywgY29uc3QgY2hhciogYmFzZV91cmkpCiB7Ci0gICAgRVdLX0ZSQU1F
X1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19GUkFNRV9TRF9H
RVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlf
T05fRkFMU0VfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOX1ZBTChjb250ZW50cywgRUlOQV9GQUxTRSk7CiAgICAgcmV0dXJu
IF9ld2tfZnJhbWVfY29udGVudHNfc2V0X2ludGVybmFsCiAgICAgICAgICAgICAgICAoc2QsIGNv
bnRlbnRzLCBjb250ZW50c19zaXplLCBtaW1lX3R5cGUsIGVuY29kaW5nLCBiYXNlX3VyaSwgMCk7
CiB9CiAKLUVpbmFfQm9vbCBld2tfZnJhbWVfY29udGVudHNfYWx0ZXJuYXRlX3NldChFdmFzX09i
amVjdCogbywgY29uc3QgY2hhciogY29udGVudHMsIHNpemVfdCBjb250ZW50c19zaXplLCBjb25z
dCBjaGFyKiBtaW1lX3R5cGUsIGNvbnN0IGNoYXIqIGVuY29kaW5nLCBjb25zdCBjaGFyKiBiYXNl
X3VyaSwgY29uc3QgY2hhciogdW5yZWFjaGFibGVfdXJpKQorRWluYV9Cb29sIGV3a19mcmFtZV9j
b250ZW50c19hbHRlcm5hdGVfc2V0KEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgY29uc3QgY2hhciog
Y29udGVudHMsIHNpemVfdCBjb250ZW50c19zaXplLCBjb25zdCBjaGFyKiBtaW1lX3R5cGUsIGNv
bnN0IGNoYXIqIGVuY29kaW5nLCBjb25zdCBjaGFyKiBiYXNlX3VyaSwgY29uc3QgY2hhciogdW5y
ZWFjaGFibGVfdXJpKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBF
SU5BX0ZBTFNFKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2Qs
IEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09OX0ZBTFNFX1JFVFVSTl9WQUwoc2QtPmZy
YW1lLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoY29u
dGVudHMsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh1
bnJlYWNoYWJsZV91cmksIEVJTkFfRkFMU0UpOwpAQCAtNDMwLDI1ICs0MzAsMjUgQEAgRWluYV9C
b29sIGV3a19mcmFtZV9jb250ZW50c19hbHRlcm5hdGVfc2V0KEV2YXNfT2JqZWN0KiBvLCBjb25z
dCBjaGFyKiBjb250ZW50cywKICAgICAgICAgICAgICAgIHVucmVhY2hhYmxlX3VyaSk7CiB9CiAK
LUVpbmFfQm9vbCBld2tfZnJhbWVfc2NyaXB0X2V4ZWN1dGUoRXZhc19PYmplY3QqIG8sIGNvbnN0
IGNoYXIqIHNjcmlwdCkKK0VpbmFfQm9vbCBld2tfZnJhbWVfc2NyaXB0X2V4ZWN1dGUoRXZhc19P
YmplY3QqIGV3a0ZyYW1lLCBjb25zdCBjaGFyKiBzY3JpcHQpCiB7Ci0gICAgRVdLX0ZSQU1FX1NE
X0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19GUkFNRV9TRF9HRVRf
T1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05f
RkFMU0VfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOX1ZBTChzY3JpcHQsIEVJTkFfRkFMU0UpOwogICAgIHNkLT5mcmFtZS0+
c2NyaXB0KCktPmV4ZWN1dGVTY3JpcHQoV1RGOjpTdHJpbmc6OmZyb21VVEY4KHNjcmlwdCksIHRy
dWUpOwogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLUVpbmFfQm9vbCBld2tfZnJhbWVfZWRp
dGFibGVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQorRWluYV9Cb29sIGV3a19mcmFtZV9lZGl0
YWJsZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewotICAgIEVXS19GUkFNRV9T
RF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VU
X09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOwogICAgIHJldHVybiBzZC0+
ZWRpdGFibGU7CiB9CiAKLUVpbmFfQm9vbCBld2tfZnJhbWVfZWRpdGFibGVfc2V0KEV2YXNfT2Jq
ZWN0KiBvLCBFaW5hX0Jvb2wgZWRpdGFibGUpCitFaW5hX0Jvb2wgZXdrX2ZyYW1lX2VkaXRhYmxl
X3NldChFdmFzX09iamVjdCogZXdrRnJhbWUsIEVpbmFfQm9vbCBlZGl0YWJsZSkKIHsKLSAgICBF
V0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX0ZS
QU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKICAgICBl
ZGl0YWJsZSA9ICEhZWRpdGFibGU7CiAgICAgaWYgKHNkLT5lZGl0YWJsZSA9PSBlZGl0YWJsZSkK
QEAgLTQ1OCw5ICs0NTgsOSBAQCBFaW5hX0Jvb2wgZXdrX2ZyYW1lX2VkaXRhYmxlX3NldChFdmFz
X09iamVjdCogbywgRWluYV9Cb29sIGVkaXRhYmxlKQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9
CiAKLWNoYXIqIGV3a19mcmFtZV9zZWxlY3Rpb25fZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQor
Y2hhciogZXdrX2ZyYW1lX3NlbGVjdGlvbl9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1l
KQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAwKTsKKyAgICBFV0tf
RlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIDApOwogICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIDApOwogICAgIFdURjo6Q1N0cmluZyBzID0g
c2QtPmZyYW1lLT5lZGl0b3IoKS0+c2VsZWN0ZWRUZXh0KCkudXRmOCgpOwogICAgIGlmIChzLmlz
TnVsbCgpKQpAQCAtNDY4LDE4ICs0NjgsMTggQEAgY2hhciogZXdrX2ZyYW1lX3NlbGVjdGlvbl9n
ZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCiAgICAgcmV0dXJuIHN0cmR1cChzLmRhdGEoKSk7CiB9
CiAKLUVpbmFfQm9vbCBld2tfZnJhbWVfdGV4dF9zZWFyY2goY29uc3QgRXZhc19PYmplY3QqIG8s
IGNvbnN0IGNoYXIqIHN0cmluZywgRWluYV9Cb29sIGNhc2Vfc2Vuc2l0aXZlLCBFaW5hX0Jvb2wg
Zm9yd2FyZCwgRWluYV9Cb29sIHdyYXApCitFaW5hX0Jvb2wgZXdrX2ZyYW1lX3RleHRfc2VhcmNo
KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgY29uc3QgY2hhciogdGV4dCwgRWluYV9Cb29s
IGNhc2Vfc2Vuc2l0aXZlLCBFaW5hX0Jvb2wgZm9yd2FyZCwgRWluYV9Cb29sIHdyYXApCiB7Ci0g
ICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVX
S19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7CiAgICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7Ci0g
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHN0cmluZywgRUlOQV9GQUxTRSk7Cisg
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHRleHQsIEVJTkFfRkFMU0UpOwogCi0g
ICAgcmV0dXJuIHNkLT5mcmFtZS0+ZWRpdG9yKCktPmZpbmRTdHJpbmcoV1RGOjpTdHJpbmc6OmZy
b21VVEY4KHN0cmluZyksIGZvcndhcmQsIGNhc2Vfc2Vuc2l0aXZlLCB3cmFwLCB0cnVlKTsKKyAg
ICByZXR1cm4gc2QtPmZyYW1lLT5lZGl0b3IoKS0+ZmluZFN0cmluZyhXVEY6OlN0cmluZzo6ZnJv
bVVURjgodGV4dCksIGZvcndhcmQsIGNhc2Vfc2Vuc2l0aXZlLCB3cmFwLCB0cnVlKTsKIH0KIAot
dW5zaWduZWQgaW50IGV3a19mcmFtZV90ZXh0X21hdGNoZXNfbWFyayhFdmFzX09iamVjdCogbywg
Y29uc3QgY2hhciogc3RyaW5nLCBFaW5hX0Jvb2wgY2FzZV9zZW5zaXRpdmUsIEVpbmFfQm9vbCBo
aWdobGlnaHQsIHVuc2lnbmVkIGludCBsaW1pdCkKK3Vuc2lnbmVkIGludCBld2tfZnJhbWVfdGV4
dF9tYXRjaGVzX21hcmsoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBjb25zdCBjaGFyKiBzdHJpbmcs
IEVpbmFfQm9vbCBjYXNlX3NlbnNpdGl2ZSwgRWluYV9Cb29sIGhpZ2hsaWdodCwgdW5zaWduZWQg
aW50IGxpbWl0KQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAwKTsK
KyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIDApOwogICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOwogICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzdHJpbmcsIDApOwogCkBAIC00ODcsMjYg
KzQ4NywyNiBAQCB1bnNpZ25lZCBpbnQgZXdrX2ZyYW1lX3RleHRfbWF0Y2hlc19tYXJrKEV2YXNf
T2JqZWN0KiBvLCBjb25zdCBjaGFyKiBzdHJpbmcsIEVpbgogICAgIHJldHVybiBzZC0+ZnJhbWUt
PmVkaXRvcigpLT5jb3VudE1hdGNoZXNGb3JUZXh0KFdURjo6U3RyaW5nOjpmcm9tVVRGOChzdHJp
bmcpLCBjYXNlX3NlbnNpdGl2ZSwgbGltaXQsIHRydWUpOwogfQogCi1FaW5hX0Jvb2wgZXdrX2Zy
YW1lX3RleHRfbWF0Y2hlc191bm1hcmtfYWxsKEV2YXNfT2JqZWN0KiBvKQorRWluYV9Cb29sIGV3
a19mcmFtZV90ZXh0X21hdGNoZXNfdW5tYXJrX2FsbChFdmFzX09iamVjdCogZXdrRnJhbWUpCiB7
Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAg
IEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7CiAg
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7
CiAKICAgICBzZC0+ZnJhbWUtPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+cmVtb3ZlTWFya2VycyhX
ZWJDb3JlOjpEb2N1bWVudE1hcmtlcjo6VGV4dE1hdGNoKTsKICAgICByZXR1cm4gRUlOQV9UUlVF
OwogfQogCi1FaW5hX0Jvb2wgZXdrX2ZyYW1lX3RleHRfbWF0Y2hlc19oaWdobGlnaHRfc2V0KEV2
YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wgaGlnaGxpZ2h0KQorRWluYV9Cb29sIGV3a19mcmFtZV90
ZXh0X21hdGNoZXNfaGlnaGxpZ2h0X3NldChFdmFzX09iamVjdCogZXdrRnJhbWUsIEVpbmFfQm9v
bCBoaWdobGlnaHQpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJ
TkFfRkFMU0UpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwg
RUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFt
ZSwgRUlOQV9GQUxTRSk7CiAgICAgc2QtPmZyYW1lLT5lZGl0b3IoKS0+c2V0TWFya2VkVGV4dE1h
dGNoZXNBcmVIaWdobGlnaHRlZChoaWdobGlnaHQpOwogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9
CiAKLUVpbmFfQm9vbCBld2tfZnJhbWVfdGV4dF9tYXRjaGVzX2hpZ2hsaWdodF9nZXQoY29uc3Qg
RXZhc19PYmplY3QqIG8pCitFaW5hX0Jvb2wgZXdrX2ZyYW1lX3RleHRfbWF0Y2hlc19oaWdobGln
aHRfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsKLSAgICBFV0tfRlJBTUVfU0Rf
R0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9P
Ul9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKICAgICByZXR1cm4gc2QtPmZy
YW1lLT5lZGl0b3IoKS0+bWFya2VkVGV4dE1hdGNoZXNBcmVIaWdobGlnaHRlZCgpOwogfQpAQCAt
NTI3LDkgKzUyNyw5IEBAIHN0YXRpYyBib29sIF9ld2tfZnJhbWVfcmVjdF9pc19uZWdhdGl2ZV92
YWx1ZShjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBpKQogICAgIHJldHVybiAoaS54KCkgPCAwIHx8
IGkueSgpIDwgMCk7CiB9CiAKLUVpbmFfQm9vbCBld2tfZnJhbWVfdGV4dF9tYXRjaGVzX250aF9w
b3NfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvLCBzaXplX3QgbiwgaW50KiB4LCBpbnQqIHkpCitF
aW5hX0Jvb2wgZXdrX2ZyYW1lX3RleHRfbWF0Y2hlc19udGhfcG9zX2dldChjb25zdCBFdmFzX09i
amVjdCogZXdrRnJhbWUsIHNpemVfdCBuLCBpbnQqIHgsIGludCogeSkKIHsKLSAgICBFV0tfRlJB
TUVfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX0ZSQU1FX1NE
X0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKIAogICAgIFZlY3Rv
cjxXZWJDb3JlOjpJbnRSZWN0PiBpbnRSZWN0cyA9IHNkLT5mcmFtZS0+ZG9jdW1lbnQoKS0+bWFy
a2VycygpLT5yZW5kZXJlZFJlY3RzRm9yTWFya2VycyhXZWJDb3JlOjpEb2N1bWVudE1hcmtlcjo6
VGV4dE1hdGNoKTsKQEAgLTU0OSw0MyArNTQ5LDQzIEBAIEVpbmFfQm9vbCBld2tfZnJhbWVfdGV4
dF9tYXRjaGVzX250aF9wb3NfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvLCBzaXplX3QgbiwgaW50
CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotRWluYV9Cb29sIGV3a19mcmFtZV9zdG9wKEV2
YXNfT2JqZWN0KiBvKQorRWluYV9Cb29sIGV3a19mcmFtZV9zdG9wKEV2YXNfT2JqZWN0KiBld2tG
cmFtZSkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxT
RSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZB
TFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5B
X0ZBTFNFKTsKICAgICBzZC0+ZnJhbWUtPmxvYWRlcigpLT5zdG9wQWxsTG9hZGVycygpOwogICAg
IHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLUVpbmFfQm9vbCBld2tfZnJhbWVfcmVsb2FkKEV2YXNf
T2JqZWN0KiBvKQorRWluYV9Cb29sIGV3a19mcmFtZV9yZWxvYWQoRXZhc19PYmplY3QqIGV3a0Zy
YW1lKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNF
KTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFM
U0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFf
RkFMU0UpOwogICAgIHNkLT5mcmFtZS0+bG9hZGVyKCktPnJlbG9hZCgpOwogICAgIHJldHVybiBF
SU5BX1RSVUU7CiB9CiAKLUVpbmFfQm9vbCBld2tfZnJhbWVfcmVsb2FkX2Z1bGwoRXZhc19PYmpl
Y3QqIG8pCitFaW5hX0Jvb2wgZXdrX2ZyYW1lX3JlbG9hZF9mdWxsKEV2YXNfT2JqZWN0KiBld2tG
cmFtZSkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxT
RSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZB
TFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5B
X0ZBTFNFKTsKICAgICBzZC0+ZnJhbWUtPmxvYWRlcigpLT5yZWxvYWQodHJ1ZSk7CiAgICAgcmV0
dXJuIEVJTkFfVFJVRTsKIH0KIAotRWluYV9Cb29sIGV3a19mcmFtZV9iYWNrKEV2YXNfT2JqZWN0
KiBvKQorRWluYV9Cb29sIGV3a19mcmFtZV9iYWNrKEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsK
LSAgICByZXR1cm4gZXdrX2ZyYW1lX25hdmlnYXRlKG8sIC0xKTsKKyAgICByZXR1cm4gZXdrX2Zy
YW1lX25hdmlnYXRlKGV3a0ZyYW1lLCAtMSk7CiB9CiAKLUVpbmFfQm9vbCBld2tfZnJhbWVfZm9y
d2FyZChFdmFzX09iamVjdCogbykKK0VpbmFfQm9vbCBld2tfZnJhbWVfZm9yd2FyZChFdmFzX09i
amVjdCogZXdrRnJhbWUpCiB7Ci0gICAgcmV0dXJuIGV3a19mcmFtZV9uYXZpZ2F0ZShvLCAxKTsK
KyAgICByZXR1cm4gZXdrX2ZyYW1lX25hdmlnYXRlKGV3a0ZyYW1lLCAxKTsKIH0KIAotRWluYV9C
b29sIGV3a19mcmFtZV9uYXZpZ2F0ZShFdmFzX09iamVjdCogbywgaW50IHN0ZXBzKQorRWluYV9C
b29sIGV3a19mcmFtZV9uYXZpZ2F0ZShFdmFzX09iamVjdCogZXdrRnJhbWUsIGludCBzdGVwcykK
IHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7Cisg
ICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsK
ICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNF
KTsKICAgICBXZWJDb3JlOjpQYWdlKiBwYWdlID0gc2QtPmZyYW1lLT5wYWdlKCk7CiAgICAgaWYg
KCFwYWdlLT5jYW5Hb0JhY2tPckZvcndhcmQoc3RlcHMpKQpAQCAtNTk0LDI3ICs1OTQsMjcgQEAg
RWluYV9Cb29sIGV3a19mcmFtZV9uYXZpZ2F0ZShFdmFzX09iamVjdCogbywgaW50IHN0ZXBzKQog
ICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLUVpbmFfQm9vbCBld2tfZnJhbWVfYmFja19wb3Nz
aWJsZShFdmFzX09iamVjdCogbykKK0VpbmFfQm9vbCBld2tfZnJhbWVfYmFja19wb3NzaWJsZShF
dmFzX09iamVjdCogZXdrRnJhbWUpCiB7Ci0gICAgcmV0dXJuIGV3a19mcmFtZV9uYXZpZ2F0ZV9w
b3NzaWJsZShvLCAtMSk7CisgICAgcmV0dXJuIGV3a19mcmFtZV9uYXZpZ2F0ZV9wb3NzaWJsZShl
d2tGcmFtZSwgLTEpOwogfQogCi1FaW5hX0Jvb2wgZXdrX2ZyYW1lX2ZvcndhcmRfcG9zc2libGUo
RXZhc19PYmplY3QqIG8pCitFaW5hX0Jvb2wgZXdrX2ZyYW1lX2ZvcndhcmRfcG9zc2libGUoRXZh
c19PYmplY3QqIGV3a0ZyYW1lKQogewotICAgIHJldHVybiBld2tfZnJhbWVfbmF2aWdhdGVfcG9z
c2libGUobywgMSk7CisgICAgcmV0dXJuIGV3a19mcmFtZV9uYXZpZ2F0ZV9wb3NzaWJsZShld2tG
cmFtZSwgMSk7CiB9CiAKLUVpbmFfQm9vbCBld2tfZnJhbWVfbmF2aWdhdGVfcG9zc2libGUoRXZh
c19PYmplY3QqIG8sIGludCBzdGVwcykKK0VpbmFfQm9vbCBld2tfZnJhbWVfbmF2aWdhdGVfcG9z
c2libGUoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBpbnQgc3RlcHMpCiB7Ci0gICAgRVdLX0ZSQU1F
X1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19GUkFNRV9TRF9H
RVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7CiAgICAgV2ViQ29yZTo6
UGFnZSogcGFnZSA9IHNkLT5mcmFtZS0+cGFnZSgpOwogICAgIHJldHVybiBwYWdlLT5jYW5Hb0Jh
Y2tPckZvcndhcmQoc3RlcHMpOwogfQogCi1mbG9hdCBld2tfZnJhbWVfem9vbV9nZXQoY29uc3Qg
RXZhc19PYmplY3QqIG8pCitmbG9hdCBld2tfZnJhbWVfem9vbV9nZXQoY29uc3QgRXZhc19PYmpl
Y3QqIGV3a0ZyYW1lKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAt
MS4wKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIC0xLjAp
OwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIC0xLjApOwog
CiAgICAgaWYgKHNkLT50ZXh0Wm9vbSkKQEAgLTYyMiw5ICs2MjIsOSBAQCBmbG9hdCBld2tfZnJh
bWVfem9vbV9nZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCiAgICAgcmV0dXJuIHNkLT5mcmFtZS0+
cGFnZVpvb21GYWN0b3IoKTsKIH0KIAotRWluYV9Cb29sIGV3a19mcmFtZV96b29tX3NldChFdmFz
X09iamVjdCogbywgZmxvYXQgem9vbSkKK0VpbmFfQm9vbCBld2tfZnJhbWVfem9vbV9zZXQoRXZh
c19PYmplY3QqIGV3a0ZyYW1lLCBmbG9hdCB6b29tKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRf
T1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JF
VFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOwogICAgIGlmIChzZC0+dGV4dFpvb20p
CiAgICAgICAgIHNkLT5mcmFtZS0+c2V0VGV4dFpvb21GYWN0b3Ioem9vbSk7CkBAIC02MzMsMTUg
KzYzMywxNSBAQCBFaW5hX0Jvb2wgZXdrX2ZyYW1lX3pvb21fc2V0KEV2YXNfT2JqZWN0KiBvLCBm
bG9hdCB6b29tKQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLUVpbmFfQm9vbCBld2tfZnJh
bWVfem9vbV90ZXh0X29ubHlfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQorRWluYV9Cb29sIGV3
a19mcmFtZV96b29tX3RleHRfb25seV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lKQog
ewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAg
ICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOwog
ICAgIHJldHVybiBzZC0+dGV4dFpvb207CiB9CiAKLUVpbmFfQm9vbCBld2tfZnJhbWVfem9vbV90
ZXh0X29ubHlfc2V0KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wgc2V0dGluZykKK0VpbmFfQm9v
bCBld2tfZnJhbWVfem9vbV90ZXh0X29ubHlfc2V0KEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgRWlu
YV9Cb29sIHNldHRpbmcpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4obywgc2Qs
IEVJTkFfRkFMU0UpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBz
ZCwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5m
cmFtZSwgRUlOQV9GQUxTRSk7CiAgICAgaWYgKHNkLT50ZXh0Wm9vbSA9PSBzZXR0aW5nKQogICAg
ICAgICByZXR1cm4gRUlOQV9UUlVFOwpAQCAtNjY4LDkgKzY2OCw5IEBAIHZvaWQgZXdrX2ZyYW1l
X2hpdF90ZXN0X2ZyZWUoRXdrX0hpdF9UZXN0KiBoaXRfdGVzdCkKICAgICBmcmVlKGhpdF90ZXN0
KTsKIH0KIAotRXdrX0hpdF9UZXN0KiBld2tfZnJhbWVfaGl0X3Rlc3RfbmV3KGNvbnN0IEV2YXNf
T2JqZWN0KiBvLCBpbnQgeCwgaW50IHkpCitFd2tfSGl0X1Rlc3QqIGV3a19mcmFtZV9oaXRfdGVz
dF9uZXcoY29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBpbnQgeCwgaW50IHkpCiB7Ci0gICAg
RVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIDApOworICAgIEVXS19GUkFNRV9TRF9H
RVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgMCk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk5fVkFMKHNkLT5mcmFtZSwgMCk7CiAKICAgICBXZWJDb3JlOjpGcmFtZVZpZXcqIHZpZXcg
PSBzZC0+ZnJhbWUtPnZpZXcoKTsKQEAgLTc0MSw5ICs3NDEsOSBAQCBFd2tfSGl0X1Rlc3QqIGV3
a19mcmFtZV9oaXRfdGVzdF9uZXcoY29uc3QgRXZhc19PYmplY3QqIG8sIGludCB4LCBpbnQgeSkK
IH0KIAogRWluYV9Cb29sCi1ld2tfZnJhbWVfc2Nyb2xsX2FkZChFdmFzX09iamVjdCogbywgaW50
IGR4LCBpbnQgZHkpCitld2tfZnJhbWVfc2Nyb2xsX2FkZChFdmFzX09iamVjdCogZXdrRnJhbWUs
IGludCBkeCwgaW50IGR5KQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNk
LCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwg
c2QsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+
ZnJhbWUsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChz
ZC0+ZnJhbWUtPnZpZXcoKSwgRUlOQV9GQUxTRSk7CiAgICAgc2QtPmZyYW1lLT52aWV3KCktPnNj
cm9sbEJ5KFdlYkNvcmU6OkludFNpemUoZHgsIGR5KSk7CkBAIC03NTEsOSArNzUxLDkgQEAgZXdr
X2ZyYW1lX3Njcm9sbF9hZGQoRXZhc19PYmplY3QqIG8sIGludCBkeCwgaW50IGR5KQogfQogCiBF
aW5hX0Jvb2wKLWV3a19mcmFtZV9zY3JvbGxfc2V0KEV2YXNfT2JqZWN0KiBvLCBpbnQgeCwgaW50
IHkpCitld2tfZnJhbWVfc2Nyb2xsX3NldChFdmFzX09iamVjdCogZXdrRnJhbWUsIGludCB4LCBp
bnQgeSkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxT
RSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZB
TFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5B
X0ZBTFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLT52
aWV3KCksIEVJTkFfRkFMU0UpOwogICAgIHNkLT5mcmFtZS0+dmlldygpLT5zZXRTY3JvbGxQb3Np
dGlvbihXZWJDb3JlOjpJbnRQb2ludCh4LCB5KSk7CkBAIC03NjEsMzEgKzc2MSwzMSBAQCBld2tf
ZnJhbWVfc2Nyb2xsX3NldChFdmFzX09iamVjdCogbywgaW50IHgsIGludCB5KQogfQogCiBFaW5h
X0Jvb2wKLWV3a19mcmFtZV9zY3JvbGxfc2l6ZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIG8sIGlu
dCogdywgaW50KiBoKQorZXdrX2ZyYW1lX3Njcm9sbF9zaXplX2dldChjb25zdCBFdmFzX09iamVj
dCogZXdrRnJhbWUsIGludCogd2lkdGgsIGludCogaGVpZ2h0KQogewotICAgIGlmICh3KQotICAg
ICAgICAqdyA9IDA7Ci0gICAgaWYgKGgpCi0gICAgICAgICpoID0gMDsKLSAgICBFV0tfRlJBTUVf
U0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgaWYgKHdpZHRoKQorICAg
ICAgICAqd2lkdGggPSAwOworICAgIGlmIChoZWlnaHQpCisgICAgICAgICpoZWlnaHQgPSAwOwor
ICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7
CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxT
RSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZS0+dmlldygp
LCBFSU5BX0ZBTFNFKTsKICAgICBXZWJDb3JlOjpJbnRQb2ludCBwb2ludCA9IHNkLT5mcmFtZS0+
dmlldygpLT5tYXhpbXVtU2Nyb2xsUG9zaXRpb24oKTsKLSAgICBpZiAodykKLSAgICAgICAgKncg
PSBwb2ludC54KCk7Ci0gICAgaWYgKGgpCi0gICAgICAgICpoID0gcG9pbnQueSgpOworICAgIGlm
ICh3aWR0aCkKKyAgICAgICAgKndpZHRoID0gcG9pbnQueCgpOworICAgIGlmIChoZWlnaHQpCisg
ICAgICAgICpoZWlnaHQgPSBwb2ludC55KCk7CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAog
RWluYV9Cb29sCi1ld2tfZnJhbWVfc2Nyb2xsX3Bvc19nZXQoY29uc3QgRXZhc19PYmplY3QqIG8s
IGludCogeCwgaW50KiB5KQorZXdrX2ZyYW1lX3Njcm9sbF9wb3NfZ2V0KGNvbnN0IEV2YXNfT2Jq
ZWN0KiBld2tGcmFtZSwgaW50KiB4LCBpbnQqIHkpCiB7CiAgICAgaWYgKHgpCiAgICAgICAgICp4
ID0gMDsKICAgICBpZiAoeSkKICAgICAgICAgKnkgPSAwOwotICAgIEVXS19GUkFNRV9TRF9HRVRf
T1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JF
VFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUtPnZpZXcoKSwgRUlOQV9GQUxTRSk7CiAgICAgV2ViQ29y
ZTo6SW50UG9pbnQgcG9zID0gc2QtPmZyYW1lLT52aWV3KCktPnNjcm9sbFBvc2l0aW9uKCk7CkBA
IC03OTYsMTcgKzc5NiwxNyBAQCBld2tfZnJhbWVfc2Nyb2xsX3Bvc19nZXQoY29uc3QgRXZhc19P
YmplY3QqIG8sIGludCogeCwgaW50KiB5KQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLUVp
bmFfQm9vbCBld2tfZnJhbWVfdmlzaWJsZV9jb250ZW50X2dlb21ldHJ5X2dldChjb25zdCBFdmFz
X09iamVjdCogbywgRWluYV9Cb29sIGluY2x1ZGVfc2Nyb2xsYmFycywgaW50KiB4LCBpbnQqIHks
IGludCogdywgaW50KiBoKQorRWluYV9Cb29sIGV3a19mcmFtZV92aXNpYmxlX2NvbnRlbnRfZ2Vv
bWV0cnlfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgRWluYV9Cb29sIGluY2x1ZGVf
c2Nyb2xsYmFycywgaW50KiB4LCBpbnQqIHksIGludCogd2lkdGgsIGludCogaGVpZ2h0KQogewog
ICAgIGlmICh4KQogICAgICAgICAqeCA9IDA7CiAgICAgaWYgKHkpCiAgICAgICAgICp5ID0gMDsK
LSAgICBpZiAodykKLSAgICAgICAgKncgPSAwOwotICAgIGlmIChoKQotICAgICAgICAqaCA9IDA7
Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAg
IGlmICh3aWR0aCkKKyAgICAgICAgKndpZHRoID0gMDsKKyAgICBpZiAoaGVpZ2h0KQorICAgICAg
ICAqaGVpZ2h0ID0gMDsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwg
c2QsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+
ZnJhbWUsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChz
ZC0+ZnJhbWUtPnZpZXcoKSwgRUlOQV9GQUxTRSk7CiAgICAgV2ViQ29yZTo6SW50UmVjdCByZWN0
ID0gc2QtPmZyYW1lLT52aWV3KCktPnZpc2libGVDb250ZW50UmVjdChpbmNsdWRlX3Njcm9sbGJh
cnMpOwpAQCAtODE0LDY5ICs4MTQsNjkgQEAgRWluYV9Cb29sIGV3a19mcmFtZV92aXNpYmxlX2Nv
bnRlbnRfZ2VvbWV0cnlfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wKICAgICAg
ICAgKnggPSByZWN0LngoKTsKICAgICBpZiAoeSkKICAgICAgICAgKnkgPSByZWN0LnkoKTsKLSAg
ICBpZiAodykKLSAgICAgICAgKncgPSByZWN0LndpZHRoKCk7Ci0gICAgaWYgKGgpCi0gICAgICAg
ICpoID0gcmVjdC5oZWlnaHQoKTsKKyAgICBpZiAod2lkdGgpCisgICAgICAgICp3aWR0aCA9IHJl
Y3Qud2lkdGgoKTsKKyAgICBpZiAoaGVpZ2h0KQorICAgICAgICAqaGVpZ2h0ID0gcmVjdC5oZWln
aHQoKTsKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi1FaW5hX0Jvb2wgZXdrX2ZyYW1lX3Bh
aW50X2Z1bGxfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQorRWluYV9Cb29sIGV3a19mcmFtZV9w
YWludF9mdWxsX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrRnJhbWUpCiB7Ci0gICAgRVdLX0ZS
QU1FX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19GUkFNRV9T
RF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZF
VFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZS0+dmlldygpLCBFSU5BX0ZBTFNFKTsK
ICAgICByZXR1cm4gc2QtPmZyYW1lLT52aWV3KCktPnBhaW50c0VudGlyZUNvbnRlbnRzKCk7CiB9
CiAKLXZvaWQgZXdrX2ZyYW1lX3BhaW50X2Z1bGxfc2V0KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jv
b2wgZmxhZykKK3ZvaWQgZXdrX2ZyYW1lX3BhaW50X2Z1bGxfc2V0KEV2YXNfT2JqZWN0KiBld2tG
cmFtZSwgRWluYV9Cb29sIGZsYWcpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4o
bywgc2QpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCk7CiAg
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmZyYW1lKTsKICAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTihzZC0+ZnJhbWUtPnZpZXcoKSk7CiAgICAgc2QtPmZyYW1lLT52aWV3
KCktPnNldFBhaW50c0VudGlyZUNvbnRlbnRzKGZsYWcpOwogfQogCi1FaW5hX0Jvb2wgZXdrX2Zy
YW1lX2ZlZWRfZm9jdXNfaW4oRXZhc19PYmplY3QqIG8pCitFaW5hX0Jvb2wgZXdrX2ZyYW1lX2Zl
ZWRfZm9jdXNfaW4oRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewotICAgIEVXS19GUkFNRV9TRF9H
RVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09S
X1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOwogICAgIFdlYkNvcmU6OkZvY3Vz
Q29udHJvbGxlciogYyA9IHNkLT5mcmFtZS0+cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKTsKICAg
ICBjLT5zZXRGb2N1c2VkRnJhbWUoc2QtPmZyYW1lKTsKICAgICByZXR1cm4gRUlOQV9UUlVFOwog
fQogCi1FaW5hX0Jvb2wgZXdrX2ZyYW1lX2ZlZWRfZm9jdXNfb3V0KEV2YXNfT2JqZWN0KiBvKQor
RWluYV9Cb29sIGV3a19mcmFtZV9mZWVkX2ZvY3VzX291dChFdmFzX09iamVjdCogZXdrRnJhbWUp
CiB7CiAgICAgLy8gVE9ETzogd2hhdCB0byBkbyBvbiBmb2N1cyBvdXQ/CiAgICAgRVJSKCJ3aGF0
IHRvIGRvPyIpOwogICAgIHJldHVybiBFSU5BX0ZBTFNFOwogfQogCi1FaW5hX0Jvb2wgZXdrX2Zy
YW1lX2ZlZWRfbW91c2Vfd2hlZWwoRXZhc19PYmplY3QqIG8sIGNvbnN0IEV2YXNfRXZlbnRfTW91
c2VfV2hlZWwqIGV2KQorRWluYV9Cb29sIGV3a19mcmFtZV9mZWVkX21vdXNlX3doZWVsKEV2YXNf
T2JqZWN0KiBld2tGcmFtZSwgY29uc3QgRXZhc19FdmVudF9Nb3VzZV9XaGVlbCogZXYpCiB7Ci0g
ICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVX
S19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7CiAgICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7CiAg
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGV2LCBFSU5BX0ZBTFNFKTsKIAogICAg
IFdlYkNvcmU6OkZyYW1lVmlldyogdmlldyA9IHNkLT5mcmFtZS0+dmlldygpOwogICAgIERCRygi
bz0lcCwgdmlldz0lcCwgZGlyZWN0aW9uPSVkLCB6PSVkLCBwb3M9JWQsJWQiLAotICAgICAgICBv
LCB2aWV3LCBldi0+ZGlyZWN0aW9uLCBldi0+eiwgZXYtPmNhbnZhcy54LCBldi0+Y2FudmFzLnkp
OworICAgICAgICBld2tGcmFtZSwgdmlldywgZXYtPmRpcmVjdGlvbiwgZXYtPnosIGV2LT5jYW52
YXMueCwgZXYtPmNhbnZhcy55KTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwo
dmlldywgRUlOQV9GQUxTRSk7CiAKICAgICBXZWJDb3JlOjpQbGF0Zm9ybVdoZWVsRXZlbnQgZXZl
bnQoZXYpOwogICAgIHJldHVybiBzZC0+ZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5oYW5kbGVXaGVl
bEV2ZW50KGV2ZW50KTsKIH0KIAotRWluYV9Cb29sIGV3a19mcmFtZV9mZWVkX21vdXNlX2Rvd24o
RXZhc19PYmplY3QqIG8sIGNvbnN0IEV2YXNfRXZlbnRfTW91c2VfRG93biogZXYpCitFaW5hX0Jv
b2wgZXdrX2ZyYW1lX2ZlZWRfbW91c2VfZG93bihFdmFzX09iamVjdCogZXdrRnJhbWUsIGNvbnN0
IEV2YXNfRXZlbnRfTW91c2VfRG93biogZXYpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9S
RVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJO
KGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk5fVkFMKGV2LCBFSU5BX0ZBTFNFKTsKIAogICAgIFdlYkNvcmU6OkZyYW1lVmlldyogdmll
dyA9IHNkLT5mcmFtZS0+dmlldygpOwogICAgIERCRygibz0lcCwgdmlldz0lcCwgYnV0dG9uPSVk
LCBwb3M9JWQsJWQiLAotICAgICAgICBvLCB2aWV3LCBldi0+YnV0dG9uLCBldi0+Y2FudmFzLngs
IGV2LT5jYW52YXMueSk7CisgICAgICAgIGV3a0ZyYW1lLCB2aWV3LCBldi0+YnV0dG9uLCBldi0+
Y2FudmFzLngsIGV2LT5jYW52YXMueSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5f
VkFMKHZpZXcsIEVJTkFfRkFMU0UpOwogCiAgICAgRXZhc19Db29yZCB4LCB5OwpAQCAtODg2LDE1
ICs4ODYsMTUgQEAgRWluYV9Cb29sIGV3a19mcmFtZV9mZWVkX21vdXNlX2Rvd24oRXZhc19PYmpl
Y3QqIG8sIGNvbnN0IEV2YXNfRXZlbnRfTW91c2VfRG93bioKICAgICByZXR1cm4gc2QtPmZyYW1l
LT5ldmVudEhhbmRsZXIoKS0+aGFuZGxlTW91c2VQcmVzc0V2ZW50KGV2ZW50KTsKIH0KIAotRWlu
YV9Cb29sIGV3a19mcmFtZV9mZWVkX21vdXNlX3VwKEV2YXNfT2JqZWN0KiBvLCBjb25zdCBFdmFz
X0V2ZW50X01vdXNlX1VwKiBldikKK0VpbmFfQm9vbCBld2tfZnJhbWVfZmVlZF9tb3VzZV91cChF
dmFzX09iamVjdCogZXdrRnJhbWUsIGNvbnN0IEV2YXNfRXZlbnRfTW91c2VfVXAqIGV2KQogewot
ICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBF
V0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOwogICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOwog
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChldiwgRUlOQV9GQUxTRSk7CiAKICAg
ICBXZWJDb3JlOjpGcmFtZVZpZXcqIHZpZXcgPSBzZC0+ZnJhbWUtPnZpZXcoKTsKICAgICBEQkco
Im89JXAsIHZpZXc9JXAsIGJ1dHRvbj0lZCwgcG9zPSVkLCVkIiwKLSAgICAgICAgbywgdmlldywg
ZXYtPmJ1dHRvbiwgZXYtPmNhbnZhcy54LCBldi0+Y2FudmFzLnkpOworICAgICAgICBld2tGcmFt
ZSwgdmlldywgZXYtPmJ1dHRvbiwgZXYtPmNhbnZhcy54LCBldi0+Y2FudmFzLnkpOwogICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh2aWV3LCBFSU5BX0ZBTFNFKTsKIAogICAgIEV2
YXNfQ29vcmQgeCwgeTsKQEAgLTkwNCwxNSArOTA0LDE1IEBAIEVpbmFfQm9vbCBld2tfZnJhbWVf
ZmVlZF9tb3VzZV91cChFdmFzX09iamVjdCogbywgY29uc3QgRXZhc19FdmVudF9Nb3VzZV9VcCog
ZXYpCiAgICAgcmV0dXJuIHNkLT5mcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmhhbmRsZU1vdXNlUmVs
ZWFzZUV2ZW50KGV2ZW50KTsKIH0KIAotRWluYV9Cb29sIGV3a19mcmFtZV9mZWVkX21vdXNlX21v
dmUoRXZhc19PYmplY3QqIG8sIGNvbnN0IEV2YXNfRXZlbnRfTW91c2VfTW92ZSogZXYpCitFaW5h
X0Jvb2wgZXdrX2ZyYW1lX2ZlZWRfbW91c2VfbW92ZShFdmFzX09iamVjdCogZXdrRnJhbWUsIGNv
bnN0IEV2YXNfRXZlbnRfTW91c2VfTW92ZSogZXYpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9P
Ul9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVU
VVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk5fVkFMKGV2LCBFSU5BX0ZBTFNFKTsKIAogICAgIFdlYkNvcmU6OkZyYW1lVmlldyog
dmlldyA9IHNkLT5mcmFtZS0+dmlldygpOwogICAgIERCRygibz0lcCwgdmlldz0lcCwgcG9zOiBv
bGQ9JWQsJWQsIG5ldz0lZCwlZCwgYnV0dG9ucz0lZCIsCi0gICAgICAgIG8sIHZpZXcsIGV2LT5j
dXIuY2FudmFzLngsIGV2LT5jdXIuY2FudmFzLnksCisgICAgICAgIGV3a0ZyYW1lLCB2aWV3LCBl
di0+Y3VyLmNhbnZhcy54LCBldi0+Y3VyLmNhbnZhcy55LAogICAgICAgICBldi0+cHJldi5jYW52
YXMueCwgZXYtPnByZXYuY2FudmFzLnksIGV2LT5idXR0b25zKTsKICAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTl9WQUwodmlldywgRUlOQV9GQUxTRSk7CiAKQEAgLTkyMywxMyArOTIzLDEz
IEBAIEVpbmFfQm9vbCBld2tfZnJhbWVfZmVlZF9tb3VzZV9tb3ZlKEV2YXNfT2JqZWN0KiBvLCBj
b25zdCBFdmFzX0V2ZW50X01vdXNlX01vdmUqCiAgICAgcmV0dXJuIHNkLT5mcmFtZS0+ZXZlbnRI
YW5kbGVyKCktPm1vdXNlTW92ZWQoZXZlbnQpOwogfQogCi1FaW5hX0Jvb2wgZXdrX2ZyYW1lX2Zl
ZWRfdG91Y2hfZXZlbnQoRXZhc19PYmplY3QqIG8sIEV3a19Ub3VjaF9FdmVudF9UeXBlIGFjdGlv
biwgRWluYV9MaXN0KiBwb2ludHMsIGludCBtZXRhU3RhdGUpCitFaW5hX0Jvb2wgZXdrX2ZyYW1l
X2ZlZWRfdG91Y2hfZXZlbnQoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBFd2tfVG91Y2hfRXZlbnRf
VHlwZSBhY3Rpb24sIEVpbmFfTGlzdCogcG9pbnRzLCBpbnQgbWV0YVN0YXRlKQogewogICAgIEVp
bmFfQm9vbCByZXQgPSBFSU5BX0ZBTFNFOwogCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKICAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwocG9pbnRzLCBFSU5BX0ZBTFNFKTsKLSAg
ICBFV0tfRlJBTUVfU0RfR0VUKG8sIHNkKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUKGV3a0ZyYW1l
LCBzZCk7CiAKICAgICBpZiAoIXNkIHx8ICFzZC0+ZnJhbWUgfHwgIWV3a192aWV3X25lZWRfdG91
Y2hfZXZlbnRzX2dldChzZC0+dmlldykpCiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwpAQCAt
MTAyNSwxNCArMTAyNSwxNCBAQCBzdGF0aWMgaW5saW5lIEVpbmFfQm9vbCBfZXdrX2ZyYW1lX2hh
bmRsZV9rZXlfc2Nyb2xsaW5nKFdlYkNvcmU6OkZyYW1lKiBmcmFtZSwgYwogICAgIHJldHVybiBF
SU5BX1RSVUU7CiB9CiAKLUVpbmFfQm9vbCBld2tfZnJhbWVfZmVlZF9rZXlfZG93bihFdmFzX09i
amVjdCogbywgY29uc3QgRXZhc19FdmVudF9LZXlfRG93biogZXYpCitFaW5hX0Jvb2wgZXdrX2Zy
YW1lX2ZlZWRfa2V5X2Rvd24oRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBjb25zdCBFdmFzX0V2ZW50
X0tleV9Eb3duKiBldikKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwg
RUlOQV9GQUxTRSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNk
LCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZy
YW1lLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZXYs
IEVJTkFfRkFMU0UpOwogCiAgICAgREJHKCJvPSVwIGtleW5hbWU9JXMgKGtleT0lcywgc3RyaW5n
PSVzKSIsCi0gICAgICAgIG8sIGV2LT5rZXluYW1lLCBldi0+a2V5ID8gZXYtPmtleSA6ICIiLCBl
di0+c3RyaW5nID8gZXYtPnN0cmluZyA6ICIiKTsKKyAgICAgICAgZXdrRnJhbWUsIGV2LT5rZXlu
YW1lLCBldi0+a2V5ID8gZXYtPmtleSA6ICIiLCBldi0+c3RyaW5nID8gZXYtPnN0cmluZyA6ICIi
KTsKIAogICAgIFdlYkNvcmU6OlBsYXRmb3JtS2V5Ym9hcmRFdmVudCBldmVudChldik7CiAgICAg
aWYgKHNkLT5mcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmtleUV2ZW50KGV2ZW50KSkKQEAgLTEwNDEs
MjIgKzEwNDEsMjIgQEAgRWluYV9Cb29sIGV3a19mcmFtZV9mZWVkX2tleV9kb3duKEV2YXNfT2Jq
ZWN0KiBvLCBjb25zdCBFdmFzX0V2ZW50X0tleV9Eb3duKiBldikKICAgICByZXR1cm4gX2V3a19m
cmFtZV9oYW5kbGVfa2V5X3Njcm9sbGluZyhzZC0+ZnJhbWUsIGV2ZW50KTsKIH0KIAotRWluYV9C
b29sIGV3a19mcmFtZV9mZWVkX2tleV91cChFdmFzX09iamVjdCogbywgY29uc3QgRXZhc19FdmVu
dF9LZXlfVXAqIGV2KQorRWluYV9Cb29sIGV3a19mcmFtZV9mZWVkX2tleV91cChFdmFzX09iamVj
dCogZXdrRnJhbWUsIGNvbnN0IEV2YXNfRXZlbnRfS2V5X1VwKiBldikKIHsKLSAgICBFV0tfRlJB
TUVfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX0ZSQU1FX1NE
X0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZXYsIEVJTkFfRkFMU0UpOwogCiAgICAgREJHKCJvPSVw
IGtleW5hbWU9JXMgKGtleT0lcywgc3RyaW5nPSVzKSIsCi0gICAgICAgIG8sIGV2LT5rZXluYW1l
LCBldi0+a2V5ID8gZXYtPmtleSA6ICIiLCBldi0+c3RyaW5nID8gZXYtPnN0cmluZyA6ICIiKTsK
KyAgICAgICAgZXdrRnJhbWUsIGV2LT5rZXluYW1lLCBldi0+a2V5ID8gZXYtPmtleSA6ICIiLCBl
di0+c3RyaW5nID8gZXYtPnN0cmluZyA6ICIiKTsKIAogICAgIFdlYkNvcmU6OlBsYXRmb3JtS2V5
Ym9hcmRFdmVudCBldmVudChldik7CiAgICAgcmV0dXJuIHNkLT5mcmFtZS0+ZXZlbnRIYW5kbGVy
KCktPmtleUV2ZW50KGV2ZW50KTsKIH0KIAotRXdrX1RleHRfU2VsZWN0aW9uX1R5cGUgZXdrX2Zy
YW1lX3RleHRfc2VsZWN0aW9uX3R5cGVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQorRXdrX1Rl
eHRfU2VsZWN0aW9uX1R5cGUgZXdrX2ZyYW1lX3RleHRfc2VsZWN0aW9uX3R5cGVfZ2V0KGNvbnN0
IEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVS
TihvLCBzZCwgRVdLX1RFWFRfU0VMRUNUSU9OX05PTkUpOworICAgIEVXS19GUkFNRV9TRF9HRVRf
T1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgRVdLX1RFWFRfU0VMRUNUSU9OX05PTkUpOwogICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVXS19URVhUX1NFTEVDVElP
Tl9OT05FKTsKIAogICAgIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uKiBjb250cm9sbGVyID0gc2Qt
PmZyYW1lLT5zZWxlY3Rpb24oKTsKQEAgLTExMDAsMTIgKzExMDAsMTIgQEAgRXZhc19PYmplY3Qq
IGV3a19mcmFtZV9hZGQoRXZhcyogZSkKICAqCiAgKiBUaGlzIGlzIGludGVybmFsIGFuZCBzaG91
bGQgbmV2ZXIgYmUgY2FsbGVkIGJ5IGV4dGVybmFsIHVzZXJzLgogICovCi1FaW5hX0Jvb2wgZXdr
X2ZyYW1lX2luaXQoRXZhc19PYmplY3QqIG8sIEV2YXNfT2JqZWN0KiB2aWV3LCBXZWJDb3JlOjpG
cmFtZSogZnJhbWUpCitFaW5hX0Jvb2wgZXdrX2ZyYW1lX2luaXQoRXZhc19PYmplY3QqIGV3a0Zy
YW1lLCBFdmFzX09iamVjdCogdmlldywgV2ViQ29yZTo6RnJhbWUqIGZyYW1lKQogewotICAgIEVX
S19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfRlJB
TUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOwogICAgIGlmICgh
c2QtPmZyYW1lKSB7CiAgICAgICAgIFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50RWZsKiBmbGMg
PSBfZXdrX2ZyYW1lX2xvYWRlcl9lZmxfZ2V0KGZyYW1lKTsKLSAgICAgICAgZmxjLT5zZXRXZWJG
cmFtZShvKTsKKyAgICAgICAgZmxjLT5zZXRXZWJGcmFtZShld2tGcmFtZSk7CiAgICAgICAgIHNk
LT5mcmFtZSA9IGZyYW1lOwogICAgICAgICBzZC0+dmlldyA9IHZpZXc7CiAgICAgICAgIGZyYW1l
LT5pbml0KCk7CkBAIC0xMTEzLDcgKzExMTMsNyBAQCBFaW5hX0Jvb2wgZXdrX2ZyYW1lX2luaXQo
RXZhc19PYmplY3QqIG8sIEV2YXNfT2JqZWN0KiB2aWV3LCBXZWJDb3JlOjpGcmFtZSogZnJhbQog
ICAgIH0KIAogICAgIEVSUigiZnJhbWUgJXAgYWxyZWFkeSBzZXQgZm9yICVwLCBpZ25vcmVkIG5l
dyAlcCIsCi0gICAgICAgIHNkLT5mcmFtZSwgbywgZnJhbWUpOworICAgICAgICBzZC0+ZnJhbWUs
IGV3a0ZyYW1lLCBmcmFtZSk7CiAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CiB9CiAKQEAgLTExMjIs
OSArMTEyMiw5IEBAIEVpbmFfQm9vbCBld2tfZnJhbWVfaW5pdChFdmFzX09iamVjdCogbywgRXZh
c19PYmplY3QqIHZpZXcsIFdlYkNvcmU6OkZyYW1lKiBmcmFtCiAgKgogICogQWRkcyBjaGlsZCB0
byB0aGUgZnJhbWUuCiAgKi8KLUVpbmFfQm9vbCBld2tfZnJhbWVfY2hpbGRfYWRkKEV2YXNfT2Jq
ZWN0KiBvLCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6RnJhbWU+IGNoaWxkLCBjb25zdCBXVEY6
OlN0cmluZyYgbmFtZSwgY29uc3QgV2ViQ29yZTo6S1VSTCYgdXJsLCBjb25zdCBXVEY6OlN0cmlu
ZyYgcmVmZXJyZXIpCitFaW5hX0Jvb2wgZXdrX2ZyYW1lX2NoaWxkX2FkZChFdmFzX09iamVjdCog
ZXdrRnJhbWUsIFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpGcmFtZT4gY2hpbGQsIGNvbnN0IFdU
Rjo6U3RyaW5nJiBuYW1lLCBjb25zdCBXZWJDb3JlOjpLVVJMJiB1cmwsIGNvbnN0IFdURjo6U3Ry
aW5nJiByZWZlcnJlcikKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwg
MCk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCAwKTsKICAg
ICBjaGFyIGJ1ZlsyNTZdOwogICAgIEV2YXNfT2JqZWN0KiBmcmFtZTsKICAgICBXZWJDb3JlOjpG
cmFtZSogY2Y7CkBAIC0xMTQ4LDcgKzExNDgsNyBAQCBFaW5hX0Jvb2wgZXdrX2ZyYW1lX2NoaWxk
X2FkZChFdmFzX09iamVjdCogbywgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkZyYW1lPiBjaAog
ICAgIH0KICAgICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiRVdLX0ZyYW1lOmNoaWxkLyVz
IiwgbmFtZS51dGY4KCkuZGF0YSgpKTsKICAgICBldmFzX29iamVjdF9uYW1lX3NldChmcmFtZSwg
YnVmKTsKLSAgICBldmFzX29iamVjdF9zbWFydF9tZW1iZXJfYWRkKGZyYW1lLCBvKTsKKyAgICBl
dmFzX29iamVjdF9zbWFydF9tZW1iZXJfYWRkKGZyYW1lLCBld2tGcmFtZSk7CiAgICAgZXZhc19v
YmplY3Rfc2hvdyhmcmFtZSk7CiAKICAgICAvLyBUaGUgY3JlYXRpb24gb2YgdGhlIGZyYW1lIG1h
eSBoYXZlIHJ1biBhcmJpdHJhcnkgSmF2YVNjcmlwdCB0aGF0IHJlbW92ZWQgaXQgZnJvbSB0aGUg
cGFnZSBhbHJlYWR5LgpAQCAtMTE3NywxMiArMTE3NywxMiBAQCBFaW5hX0Jvb2wgZXdrX2ZyYW1l
X2NoaWxkX2FkZChFdmFzX09iamVjdCogbywgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkZyYW1l
PiBjaAogICogQHBhcmFtIG8gVGhlIGV3ayBmcmFtZSB0byBhY3QgdXBvbi4KICAqIEBwYXJhbSBu
ZXdQYXJlbnQgVGhlIG5ldyB2aWV3IHRoYXQgd2lsbCBiZSBzZXQgYXMgdGhlIHBhcmVudCBvZiB0
aGUgZnJhbWUuCiAgKi8KLXZvaWQgZXdrX2ZyYW1lX3ZpZXdfc2V0KEV2YXNfT2JqZWN0KiBvLCBF
dmFzX09iamVjdCogbmV3UGFyZW50KQordm9pZCBld2tfZnJhbWVfdmlld19zZXQoRXZhc19PYmpl
Y3QqIGV3a0ZyYW1lLCBFdmFzX09iamVjdCogbmV3UGFyZW50KQogewotICAgIEVXS19GUkFNRV9T
RF9HRVRfT1JfUkVUVVJOKG8sIHNkKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihl
d2tGcmFtZSwgc2QpOwogCi0gICAgZXZhc19vYmplY3Rfc21hcnRfbWVtYmVyX2RlbChvKTsKLSAg
ICBldmFzX29iamVjdF9zbWFydF9tZW1iZXJfYWRkKG8sIG5ld1BhcmVudCk7CisgICAgZXZhc19v
YmplY3Rfc21hcnRfbWVtYmVyX2RlbChld2tGcmFtZSk7CisgICAgZXZhc19vYmplY3Rfc21hcnRf
bWVtYmVyX2FkZChld2tGcmFtZSwgbmV3UGFyZW50KTsKIAogICAgIHNkLT52aWV3ID0gbmV3UGFy
ZW50OwogfQpAQCAtMTE5MSwxMCArMTE5MSwxMCBAQCB2b2lkIGV3a19mcmFtZV92aWV3X3NldChF
dmFzX09iamVjdCogbywgRXZhc19PYmplY3QqIG5ld1BhcmVudCkKICAqIEBpbnRlcm5hbAogICog
RnJhbWUgd2FzIGRlc3Ryb3llZCBieSBsb2FkZXIsIHJlbW92ZSBpbnRlcm5hbCByZWZlcmVuY2Uu
CiAgKi8KLXZvaWQgZXdrX2ZyYW1lX2NvcmVfZ29uZShFdmFzX09iamVjdCogbykKK3ZvaWQgZXdr
X2ZyYW1lX2NvcmVfZ29uZShFdmFzX09iamVjdCogZXdrRnJhbWUpCiB7Ci0gICAgREJHKCJvPSVw
Iiwgbyk7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4obywgc2QpOworICAgIERCRygi
bz0lcCIsIGV3a0ZyYW1lKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFt
ZSwgc2QpOwogICAgIHNkLT5mcmFtZSA9IDA7CiB9CiAKQEAgLTEyMDUsOSArMTIwNSw5IEBAIHZv
aWQgZXdrX2ZyYW1lX2NvcmVfZ29uZShFdmFzX09iamVjdCogbykKICAqIEF2b2lkIHVzaW5nIHRo
aXMgY2FsbCBmcm9tIG91dHNpZGUsIGFkZCBzcGVjaWZpYyBld2tfZnJhbWVfKgogICogYWN0aW9u
cyBpbnN0ZWFkLgogICovCi1XZWJDb3JlOjpGcmFtZSogZXdrX2ZyYW1lX2NvcmVfZ2V0KGNvbnN0
IEV2YXNfT2JqZWN0KiBvKQorV2ViQ29yZTo6RnJhbWUqIGV3a19mcmFtZV9jb3JlX2dldChjb25z
dCBFdmFzX09iamVjdCogZXdrRnJhbWUpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRV
Uk4obywgc2QsIDApOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBz
ZCwgMCk7CiAgICAgcmV0dXJuIHNkLT5mcmFtZTsKIH0KIApAQCAtMTIyNCw5ICsxMjI0LDkgQEAg
V2ViQ29yZTo6RnJhbWUqIGV3a19mcmFtZV9jb3JlX2dldChjb25zdCBFdmFzX09iamVjdCogbykK
ICAqCiAgKiBFbWl0cyBzaWduYWw6ICJyZXNvdXJjZSxyZXF1ZXN0LHdpbGxzZW5kIgogICovCi12
b2lkIGV3a19mcmFtZV9yZXF1ZXN0X3dpbGxfc2VuZChFdmFzX09iamVjdCogbywgRXdrX0ZyYW1l
X1Jlc291cmNlX1JlcXVlc3QqIHJlcXVlc3QpCit2b2lkIGV3a19mcmFtZV9yZXF1ZXN0X3dpbGxf
c2VuZChFdmFzX09iamVjdCogZXdrRnJhbWUsIEV3a19GcmFtZV9SZXNvdXJjZV9SZXF1ZXN0KiBy
ZXF1ZXN0KQogewotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwobywgInJlc291
cmNlLHJlcXVlc3Qsd2lsbHNlbmQiLCByZXF1ZXN0KTsKKyAgICBldmFzX29iamVjdF9zbWFydF9j
YWxsYmFja19jYWxsKGV3a0ZyYW1lLCAicmVzb3VyY2UscmVxdWVzdCx3aWxsc2VuZCIsIHJlcXVl
c3QpOwogfQogCiAvKioKQEAgLTEyMzgsOSArMTIzOCw5IEBAIHZvaWQgZXdrX2ZyYW1lX3JlcXVl
c3Rfd2lsbF9zZW5kKEV2YXNfT2JqZWN0KiBvLCBFd2tfRnJhbWVfUmVzb3VyY2VfUmVxdWVzdCog
cmVxCiAgKgogICogRW1pdHMgc2lnbmFsOiAicmVzb3VyY2UscmVxdWVzdCxuZXciCiAgKi8KLXZv
aWQgZXdrX2ZyYW1lX3JlcXVlc3RfYXNzaWduX2lkZW50aWZpZXIoRXZhc19PYmplY3QqIG8sIGNv
bnN0IEV3a19GcmFtZV9SZXNvdXJjZV9SZXF1ZXN0KiByZXF1ZXN0KQordm9pZCBld2tfZnJhbWVf
cmVxdWVzdF9hc3NpZ25faWRlbnRpZmllcihFdmFzX09iamVjdCogZXdrRnJhbWUsIGNvbnN0IEV3
a19GcmFtZV9SZXNvdXJjZV9SZXF1ZXN0KiByZXF1ZXN0KQogewotICAgIGV2YXNfb2JqZWN0X3Nt
YXJ0X2NhbGxiYWNrX2NhbGwobywgInJlc291cmNlLHJlcXVlc3QsbmV3IiwgKHZvaWQqKXJlcXVl
c3QpOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdrRnJhbWUsICJyZXNv
dXJjZSxyZXF1ZXN0LG5ldyIsICh2b2lkKilyZXF1ZXN0KTsKIH0KIAogLyoqCkBAIC0xMjUxLDkg
KzEyNTEsOSBAQCB2b2lkIGV3a19mcmFtZV9yZXF1ZXN0X2Fzc2lnbl9pZGVudGlmaWVyKEV2YXNf
T2JqZWN0KiBvLCBjb25zdCBFd2tfRnJhbWVfUmVzb3VyYwogICoKICAqIEVtaXRzIHNpZ25hbDog
Im5hdmlnYXRpb24sZmlyc3QiCiAgKi8KLXZvaWQgZXdrX2ZyYW1lX2RpZF9wZXJmb3JtX2ZpcnN0
X25hdmlnYXRpb24oRXZhc19PYmplY3QqIG8pCit2b2lkIGV3a19mcmFtZV9kaWRfcGVyZm9ybV9m
aXJzdF9uYXZpZ2F0aW9uKEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsKLSAgICBldmFzX29iamVj
dF9zbWFydF9jYWxsYmFja19jYWxsKG8sICJuYXZpZ2F0aW9uLGZpcnN0IiwgMCk7CisgICAgZXZh
c19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChld2tGcmFtZSwgIm5hdmlnYXRpb24sZmlyc3Qi
LCAwKTsKIH0KIAogLyoqCkBAIC0xMjY1LDkgKzEyNjUsOSBAQCB2b2lkIGV3a19mcmFtZV9kaWRf
cGVyZm9ybV9maXJzdF9uYXZpZ2F0aW9uKEV2YXNfT2JqZWN0KiBvKQogICoKICAqIEVtaXRzIHNp
Z25hbDogInN0YXRlLHNhdmUiCiAgKi8KLXZvaWQgZXdrX2ZyYW1lX3ZpZXdfc3RhdGVfc2F2ZShF
dmFzX09iamVjdCogbywgV2ViQ29yZTo6SGlzdG9yeUl0ZW0qIGl0ZW0pCit2b2lkIGV3a19mcmFt
ZV92aWV3X3N0YXRlX3NhdmUoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBXZWJDb3JlOjpIaXN0b3J5
SXRlbSogaXRlbSkKIHsKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKG8sICJz
dGF0ZSxzYXZlIiwgMCk7CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChld2tG
cmFtZSwgInN0YXRlLHNhdmUiLCAwKTsKIH0KIAogLyoqCkBAIC0xMjc2LDE2ICsxMjc2LDE2IEBA
IHZvaWQgZXdrX2ZyYW1lX3ZpZXdfc3RhdGVfc2F2ZShFdmFzX09iamVjdCogbywgV2ViQ29yZTo6
SGlzdG9yeUl0ZW0qIGl0ZW0pCiAgKgogICogRW1pdHMgc2lnbmFsOiAibG9hZCxzdGFydGVkIiB3
aXRoIG5vIHBhcmFtZXRlcnMuCiAgKi8KLXZvaWQgZXdrX2ZyYW1lX2xvYWRfc3RhcnRlZChFdmFz
X09iamVjdCogbykKK3ZvaWQgZXdrX2ZyYW1lX2xvYWRfc3RhcnRlZChFdmFzX09iamVjdCogZXdr
RnJhbWUpCiB7CiAgICAgRXZhc19PYmplY3QqIG1haW5fZnJhbWU7Ci0gICAgREJHKCJvPSVwIiwg
byk7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChvLCAibG9hZCxzdGFydGVk
IiwgMCk7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4obywgc2QpOworICAgIERCRygi
bz0lcCIsIGV3a0ZyYW1lKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKGV3
a0ZyYW1lLCAibG9hZCxzdGFydGVkIiwgMCk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRV
Uk4oZXdrRnJhbWUsIHNkKTsKICAgICBld2tfdmlld19sb2FkX3N0YXJ0ZWQoc2QtPnZpZXcpOwog
CiAgICAgbWFpbl9mcmFtZSA9IGV3a192aWV3X2ZyYW1lX21haW5fZ2V0KHNkLT52aWV3KTsKLSAg
ICBpZiAobWFpbl9mcmFtZSA9PSBvKQorICAgIGlmIChtYWluX2ZyYW1lID09IGV3a0ZyYW1lKQog
ICAgICAgICBld2tfdmlld19mcmFtZV9tYWluX2xvYWRfc3RhcnRlZChzZC0+dmlldyk7CiB9CiAK
QEAgLTEyOTcsOSArMTI5Nyw5IEBAIHZvaWQgZXdrX2ZyYW1lX2xvYWRfc3RhcnRlZChFdmFzX09i
amVjdCogbykKICAqCiAgKiBFbWl0cyBzaWduYWw6ICJsb2FkLHByb3Zpc2lvbmFsIiB3aXRoIG5v
IHBhcmFtZXRlcnMuCiAgKi8KLXZvaWQgZXdrX2ZyYW1lX2xvYWRfcHJvdmlzaW9uYWwoRXZhc19P
YmplY3QqIG8pCit2b2lkIGV3a19mcmFtZV9sb2FkX3Byb3Zpc2lvbmFsKEV2YXNfT2JqZWN0KiBl
d2tGcmFtZSkKIHsKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKG8sICJsb2Fk
LHByb3Zpc2lvbmFsIiwgMCk7CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChl
d2tGcmFtZSwgImxvYWQscHJvdmlzaW9uYWwiLCAwKTsKIH0KIAogLyoqCkBAIC0xMzEwLDkgKzEz
MTAsOSBAQCB2b2lkIGV3a19mcmFtZV9sb2FkX3Byb3Zpc2lvbmFsKEV2YXNfT2JqZWN0KiBvKQog
ICoKICAqIEVtaXRzIHNpZ25hbDogImxvYWQsZmlyc3RsYXlvdXQsZmluaXNoZWQiIHdpdGggbm8g
cGFyYW1ldGVycy4KICAqLwotdm9pZCBld2tfZnJhbWVfbG9hZF9maXJzdGxheW91dF9maW5pc2hl
ZChFdmFzX09iamVjdCogbykKK3ZvaWQgZXdrX2ZyYW1lX2xvYWRfZmlyc3RsYXlvdXRfZmluaXNo
ZWQoRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxi
YWNrX2NhbGwobywgImxvYWQsZmlyc3RsYXlvdXQsZmluaXNoZWQiLCAwKTsKKyAgICBldmFzX29i
amVjdF9zbWFydF9jYWxsYmFja19jYWxsKGV3a0ZyYW1lLCAibG9hZCxmaXJzdGxheW91dCxmaW5p
c2hlZCIsIDApOwogfQogCiAvKioKQEAgLTEzMjMsOSArMTMyMyw5IEBAIHZvaWQgZXdrX2ZyYW1l
X2xvYWRfZmlyc3RsYXlvdXRfZmluaXNoZWQoRXZhc19PYmplY3QqIG8pCiAgKgogICogRW1pdHMg
c2lnbmFsOiAibG9hZCxub25lbXB0eWxheW91dCxmaW5pc2hlZCIgd2l0aCBubyBwYXJhbWV0ZXJz
LgogICovCi12b2lkIGV3a19mcmFtZV9sb2FkX2ZpcnN0bGF5b3V0X25vbmVtcHR5X2ZpbmlzaGVk
KEV2YXNfT2JqZWN0KiBvKQordm9pZCBld2tfZnJhbWVfbG9hZF9maXJzdGxheW91dF9ub25lbXB0
eV9maW5pc2hlZChFdmFzX09iamVjdCogZXdrRnJhbWUpCiB7Ci0gICAgZXZhc19vYmplY3Rfc21h
cnRfY2FsbGJhY2tfY2FsbChvLCAibG9hZCxub25lbXB0eWxheW91dCxmaW5pc2hlZCIsIDApOwor
ICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdrRnJhbWUsICJsb2FkLG5vbmVt
cHR5bGF5b3V0LGZpbmlzaGVkIiwgMCk7CiB9CiAKIC8qKgpAQCAtMTMzNiwxMSArMTMzNiwxMSBA
QCB2b2lkIGV3a19mcmFtZV9sb2FkX2ZpcnN0bGF5b3V0X25vbmVtcHR5X2ZpbmlzaGVkKEV2YXNf
T2JqZWN0KiBvKQogICoKICAqIEVtaXRzIHNpZ25hbDogImxvYWQsZG9jdW1lbnQsZmluaXNoZWQi
IHdpdGggbm8gcGFyYW1ldGVycy4KICAqLwotdm9pZCBld2tfZnJhbWVfbG9hZF9kb2N1bWVudF9m
aW5pc2hlZChFdmFzX09iamVjdCogbykKK3ZvaWQgZXdrX2ZyYW1lX2xvYWRfZG9jdW1lbnRfZmlu
aXNoZWQoRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2Nh
bGxiYWNrX2NhbGwobywgImxvYWQsZG9jdW1lbnQsZmluaXNoZWQiLCAwKTsKLSAgICBFV0tfRlJB
TUVfU0RfR0VUX09SX1JFVFVSTihvLCBzZCk7Ci0gICAgZXdrX3ZpZXdfbG9hZF9kb2N1bWVudF9m
aW5pc2hlZChzZC0+dmlldywgbyk7CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2Fs
bChld2tGcmFtZSwgImxvYWQsZG9jdW1lbnQsZmluaXNoZWQiLCAwKTsKKyAgICBFV0tfRlJBTUVf
U0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QpOworICAgIGV3a192aWV3X2xvYWRfZG9jdW1l
bnRfZmluaXNoZWQoc2QtPnZpZXcsIGV3a0ZyYW1lKTsKIH0KIAogLyoqCkBAIC0xMzUzLDE1ICsx
MzUzLDE1IEBAIHZvaWQgZXdrX2ZyYW1lX2xvYWRfZG9jdW1lbnRfZmluaXNoZWQoRXZhc19PYmpl
Y3QqIG8pCiAgKiBAbm90ZSB0aGVyZSBzaG91bGQgbm90YmUgYW55IGVycm9yIHN0dWZmIGhlcmUs
IGJ1dCB0cnlpbmcgdG8gYmUKICAqICAgICAgIGNvbXBhdGlibGUgd2l0aCBwcmV2aW91cyBXZWJL
aXQuCiAgKi8KLXZvaWQgZXdrX2ZyYW1lX2xvYWRfZmluaXNoZWQoRXZhc19PYmplY3QqIG8sIGNv
bnN0IGNoYXIqIGVycm9yX2RvbWFpbiwgaW50IGVycm9yX2NvZGUsIEVpbmFfQm9vbCBpc19jYW5j
ZWxsYXRpb24sIGNvbnN0IGNoYXIqIGVycm9yX2Rlc2NyaXB0aW9uLCBjb25zdCBjaGFyKiBmYWls
aW5nX3VybCkKK3ZvaWQgZXdrX2ZyYW1lX2xvYWRfZmluaXNoZWQoRXZhc19PYmplY3QqIGV3a0Zy
YW1lLCBjb25zdCBjaGFyKiBlcnJvcl9kb21haW4sIGludCBlcnJvcl9jb2RlLCBFaW5hX0Jvb2wg
aXNfY2FuY2VsbGF0aW9uLCBjb25zdCBjaGFyKiBlcnJvcl9kZXNjcmlwdGlvbiwgY29uc3QgY2hh
ciogZmFpbGluZ191cmwpCiB7CiAgICAgRXdrX0ZyYW1lX0xvYWRfRXJyb3IgYnVmLCAqIGVycm9y
OwogICAgIGlmICghZXJyb3JfZG9tYWluKSB7Ci0gICAgICAgIERCRygibz0lcCwgc3VjY2Vzcy4i
LCBvKTsKKyAgICAgICAgREJHKCJvPSVwLCBzdWNjZXNzLiIsIGV3a0ZyYW1lKTsKICAgICAgICAg
ZXJyb3IgPSAwOwogICAgIH0gZWxzZSB7CiAgICAgICAgIERCRygibz0lcCwgZXJyb3I9JXMgKCVk
LCBjYW5jZWxsYXRpb249JWhodSkgXCIlc1wiLCB1cmw9JXMiLAotICAgICAgICAgICAgbywgZXJy
b3JfZG9tYWluLCBlcnJvcl9jb2RlLCBpc19jYW5jZWxsYXRpb24sCisgICAgICAgICAgICBld2tG
cmFtZSwgZXJyb3JfZG9tYWluLCBlcnJvcl9jb2RlLCBpc19jYW5jZWxsYXRpb24sCiAgICAgICAg
ICAgICBlcnJvcl9kZXNjcmlwdGlvbiwgZmFpbGluZ191cmwpOwogCiAgICAgICAgIGJ1Zi5kb21h
aW4gPSBlcnJvcl9kb21haW47CkBAIC0xMzY5LDExICsxMzY5LDExIEBAIHZvaWQgZXdrX2ZyYW1l
X2xvYWRfZmluaXNoZWQoRXZhc19PYmplY3QqIG8sIGNvbnN0IGNoYXIqIGVycm9yX2RvbWFpbiwg
aW50IGVycm9yCiAgICAgICAgIGJ1Zi5pc19jYW5jZWxsYXRpb24gPSBpc19jYW5jZWxsYXRpb247
CiAgICAgICAgIGJ1Zi5kZXNjcmlwdGlvbiA9IGVycm9yX2Rlc2NyaXB0aW9uOwogICAgICAgICBi
dWYuZmFpbGluZ191cmwgPSBmYWlsaW5nX3VybDsKLSAgICAgICAgYnVmLmZyYW1lID0gbzsKKyAg
ICAgICAgYnVmLmZyYW1lID0gZXdrRnJhbWU7CiAgICAgICAgIGVycm9yID0gJmJ1ZjsKICAgICB9
Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChvLCAibG9hZCxmaW5pc2hlZCIs
IGVycm9yKTsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihvLCBzZCk7CisgICAgZXZh
c19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChld2tGcmFtZSwgImxvYWQsZmluaXNoZWQiLCBl
cnJvcik7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkKTsKICAg
ICBld2tfdmlld19sb2FkX2ZpbmlzaGVkKHNkLT52aWV3LCBlcnJvcik7CiB9CiAKQEAgLTEzODMs
MTIgKzEzODMsMTIgQEAgdm9pZCBld2tfZnJhbWVfbG9hZF9maW5pc2hlZChFdmFzX09iamVjdCog
bywgY29uc3QgY2hhciogZXJyb3JfZG9tYWluLCBpbnQgZXJyb3IKICAqCiAgKiBFbWl0cyBzaWdu
YWw6ICJsb2FkLGVycm9yIiB3aXRoIHBvaW50ZXIgdG8gRXdrX0ZyYW1lX0xvYWRfRXJyb3IuCiAg
Ki8KLXZvaWQgZXdrX2ZyYW1lX2xvYWRfZXJyb3IoRXZhc19PYmplY3QqIG8sIGNvbnN0IGNoYXIq
IGVycm9yX2RvbWFpbiwgaW50IGVycm9yX2NvZGUsIEVpbmFfQm9vbCBpc19jYW5jZWxsYXRpb24s
IGNvbnN0IGNoYXIqIGVycm9yX2Rlc2NyaXB0aW9uLCBjb25zdCBjaGFyKiBmYWlsaW5nX3VybCkK
K3ZvaWQgZXdrX2ZyYW1lX2xvYWRfZXJyb3IoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBjb25zdCBj
aGFyKiBlcnJvcl9kb21haW4sIGludCBlcnJvcl9jb2RlLCBFaW5hX0Jvb2wgaXNfY2FuY2VsbGF0
aW9uLCBjb25zdCBjaGFyKiBlcnJvcl9kZXNjcmlwdGlvbiwgY29uc3QgY2hhciogZmFpbGluZ191
cmwpCiB7CiAgICAgRXdrX0ZyYW1lX0xvYWRfRXJyb3IgZXJyb3I7CiAKICAgICBEQkcoIm89JXAs
IGVycm9yPSVzICglZCwgY2FuY2VsbGF0aW9uPSVoaHUpIFwiJXNcIiwgdXJsPSVzIiwKLSAgICAg
ICAgbywgZXJyb3JfZG9tYWluLCBlcnJvcl9jb2RlLCBpc19jYW5jZWxsYXRpb24sCisgICAgICAg
IGV3a0ZyYW1lLCBlcnJvcl9kb21haW4sIGVycm9yX2NvZGUsIGlzX2NhbmNlbGxhdGlvbiwKICAg
ICAgICAgZXJyb3JfZGVzY3JpcHRpb24sIGZhaWxpbmdfdXJsKTsKIAogICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOKGVycm9yX2RvbWFpbik7CkBAIC0xMzk4LDkgKzEzOTgsOSBAQCB2b2lk
IGV3a19mcmFtZV9sb2FkX2Vycm9yKEV2YXNfT2JqZWN0KiBvLCBjb25zdCBjaGFyKiBlcnJvcl9k
b21haW4sIGludCBlcnJvcl9jbwogICAgIGVycm9yLmRvbWFpbiA9IGVycm9yX2RvbWFpbjsKICAg
ICBlcnJvci5kZXNjcmlwdGlvbiA9IGVycm9yX2Rlc2NyaXB0aW9uOwogICAgIGVycm9yLmZhaWxp
bmdfdXJsID0gZmFpbGluZ191cmw7Ci0gICAgZXJyb3IuZnJhbWUgPSBvOwotICAgIGV2YXNfb2Jq
ZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwobywgImxvYWQsZXJyb3IiLCAmZXJyb3IpOwotICAgIEVX
S19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkKTsKKyAgICBlcnJvci5mcmFtZSA9IGV3a0Zy
YW1lOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdrRnJhbWUsICJsb2Fk
LGVycm9yIiwgJmVycm9yKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFt
ZSwgc2QpOwogICAgIGV3a192aWV3X2xvYWRfZXJyb3Ioc2QtPnZpZXcsICZlcnJvcik7CiB9CiAK
QEAgLTE0MTAsMTcgKzE0MTAsMTcgQEAgdm9pZCBld2tfZnJhbWVfbG9hZF9lcnJvcihFdmFzX09i
amVjdCogbywgY29uc3QgY2hhciogZXJyb3JfZG9tYWluLCBpbnQgZXJyb3JfY28KICAqCiAgKiBF
bWl0cyBzaWduYWw6ICJsb2FkLHByb2dyZXNzIiB3aXRoIHBvaW50ZXIgdG8gYSBkb3VibGUgZnJv
bSAwLjAgdG8gMS4wLgogICovCi12b2lkIGV3a19mcmFtZV9sb2FkX3Byb2dyZXNzX2NoYW5nZWQo
RXZhc19PYmplY3QqIG8pCit2b2lkIGV3a19mcmFtZV9sb2FkX3Byb2dyZXNzX2NoYW5nZWQoRXZh
c19PYmplY3QqIGV3a0ZyYW1lKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8s
IHNkKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QpOwogICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5mcmFtZSk7CiAKICAgICAvLyBUT0RPOiB0
aGlzIGlzIHBlciBwYWdlLCB0aGVyZSBzaG91bGQgYmUgYSB3YXkgdG8gaGF2ZSBwZXItZnJhbWUu
CiAgICAgZG91YmxlIHByb2dyZXNzID0gc2QtPmZyYW1lLT5wYWdlKCktPnByb2dyZXNzKCktPmVz
dGltYXRlZFByb2dyZXNzKCk7CiAKLSAgICBEQkcoIm89JXAgKHA9JTAuM2YpIiwgbywgcHJvZ3Jl
c3MpOworICAgIERCRygibz0lcCAocD0lMC4zZikiLCBld2tGcmFtZSwgcHJvZ3Jlc3MpOwogCi0g
ICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChvLCAibG9hZCxwcm9ncmVzcyIsICZw
cm9ncmVzcyk7CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChld2tGcmFtZSwg
ImxvYWQscHJvZ3Jlc3MiLCAmcHJvZ3Jlc3MpOwogICAgIGV3a192aWV3X2xvYWRfcHJvZ3Jlc3Nf
Y2hhbmdlZChzZC0+dmlldyk7CiB9CiAKQEAgLTE0MzAsMTAgKzE0MzAsMTAgQEAgdm9pZCBld2tf
ZnJhbWVfbG9hZF9wcm9ncmVzc19jaGFuZ2VkKEV2YXNfT2JqZWN0KiBvKQogICoKICAqIFJlcG9y
dHMgY29udGVudHMgc2l6ZSBjaGFuZ2VkLgogICovCi12b2lkIGV3a19mcmFtZV9jb250ZW50c19z
aXplX2NoYW5nZWQoRXZhc19PYmplY3QqIG8sIEV2YXNfQ29vcmQgdywgRXZhc19Db29yZCBoKQor
dm9pZCBld2tfZnJhbWVfY29udGVudHNfc2l6ZV9jaGFuZ2VkKEV2YXNfT2JqZWN0KiBld2tGcmFt
ZSwgRXZhc19Db29yZCB3LCBFdmFzX0Nvb3JkIGgpCiB7Ci0gICAgREJHKCJvPSVwOiAlZHglZCIs
IG8sIHcsIGgpOwotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkKTsKKyAgICBE
QkcoIm89JXA6ICVkeCVkIiwgZXdrRnJhbWUsIHcsIGgpOworICAgIEVXS19GUkFNRV9TRF9HRVRf
T1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCk7CiAgICAgaWYgKHNkLT5jb250ZW50c19zaXplLncgPT0g
dyAmJiBzZC0+Y29udGVudHNfc2l6ZS5oID09IGgpCiAgICAgICAgIHJldHVybjsKICAgICBzZC0+
Y29udGVudHNfc2l6ZS53ID0gdzsKQEAgLTE0NDEsNyArMTQ0MSw3IEBAIHZvaWQgZXdrX2ZyYW1l
X2NvbnRlbnRzX3NpemVfY2hhbmdlZChFdmFzX09iamVjdCogbywgRXZhc19Db29yZCB3LCBFdmFz
X0Nvb3JkIGgpCiAgICAgLy8gVE9ETzogdXBkYXRlIHNvbWV0aGluZyBlbHNlIGludGVybmFsbHk/
CiAKICAgICBFdmFzX0Nvb3JkIHNpemVbMl0gPSB7dywgaH07Ci0gICAgZXZhc19vYmplY3Rfc21h
cnRfY2FsbGJhY2tfY2FsbChvLCAiY29udGVudHMsc2l6ZSxjaGFuZ2VkIiwgc2l6ZSk7CisgICAg
ZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChld2tGcmFtZSwgImNvbnRlbnRzLHNpemUs
Y2hhbmdlZCIsIHNpemUpOwogfQogCiAvKioKQEAgLTE0NDksMTMgKzE0NDksMTMgQEAgdm9pZCBl
d2tfZnJhbWVfY29udGVudHNfc2l6ZV9jaGFuZ2VkKEV2YXNfT2JqZWN0KiBvLCBFdmFzX0Nvb3Jk
IHcsIEV2YXNfQ29vcmQgaCkKICAqCiAgKiBSZXBvcnRzIHRpdGxlIGNoYW5nZWQuCiAgKi8KLXZv
aWQgZXdrX2ZyYW1lX3RpdGxlX3NldChFdmFzX09iamVjdCogbywgY29uc3QgY2hhciogdGl0bGUp
Cit2b2lkIGV3a19mcmFtZV90aXRsZV9zZXQoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBjb25zdCBj
aGFyKiB0aXRsZSkKIHsKLSAgICBEQkcoIm89JXAsIHRpdGxlPSVzIiwgbywgdGl0bGUgPyB0aXRs
ZSA6ICIobnVsbCkiKTsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihvLCBzZCk7Cisg
ICAgREJHKCJvPSVwLCB0aXRsZT0lcyIsIGV3a0ZyYW1lLCB0aXRsZSA/IHRpdGxlIDogIihudWxs
KSIpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCk7CiAgICAg
aWYgKCFlaW5hX3N0cmluZ3NoYXJlX3JlcGxhY2UoJnNkLT50aXRsZSwgdGl0bGUpKQogICAgICAg
ICByZXR1cm47Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChvLCAidGl0bGUs
Y2hhbmdlZCIsICh2b2lkKilzZC0+dGl0bGUpOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxi
YWNrX2NhbGwoZXdrRnJhbWUsICJ0aXRsZSxjaGFuZ2VkIiwgKHZvaWQqKXNkLT50aXRsZSk7CiB9
CiAKIC8qKgpAQCAtMTQ2MywxMCArMTQ2MywxMCBAQCB2b2lkIGV3a19mcmFtZV90aXRsZV9zZXQo
RXZhc19PYmplY3QqIG8sIGNvbnN0IGNoYXIqIHRpdGxlKQogICoKICAqIENyZWF0ZXMgYSB2aWV3
LgogICovCi12b2lkIGV3a19mcmFtZV92aWV3X2NyZWF0ZV9mb3JfdmlldyhFdmFzX09iamVjdCog
bywgRXZhc19PYmplY3QqIHZpZXcpCit2b2lkIGV3a19mcmFtZV92aWV3X2NyZWF0ZV9mb3Jfdmll
dyhFdmFzX09iamVjdCogZXdrRnJhbWUsIEV2YXNfT2JqZWN0KiB2aWV3KQogewotICAgIERCRygi
bz0lcCwgdmlldz0lcCIsIG8sIHZpZXcpOwotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJO
KG8sIHNkKTsKKyAgICBEQkcoIm89JXAsIHZpZXc9JXAiLCBld2tGcmFtZSwgdmlldyk7CisgICAg
RVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkKTsKICAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTihzZC0+ZnJhbWUpOwogICAgIEV2YXNfQ29vcmQgdywgaDsKIApAQCAt
MTQ5MCwxMiArMTQ5MCwxMiBAQCB2b2lkIGV3a19mcmFtZV92aWV3X2NyZWF0ZV9mb3JfdmlldyhF
dmFzX09iamVjdCogbywgRXZhc19PYmplY3QqIHZpZXcpCiAKICAgICBjb25zdCBjaGFyKiB0aGVt
ZSA9IGV3a192aWV3X3RoZW1lX2dldCh2aWV3KTsKICAgICBzZC0+ZnJhbWUtPnZpZXcoKS0+c2V0
RWRqZVRoZW1lKHRoZW1lKTsKLSAgICBzZC0+ZnJhbWUtPnZpZXcoKS0+c2V0RXZhc09iamVjdChv
KTsKKyAgICBzZC0+ZnJhbWUtPnZpZXcoKS0+c2V0RXZhc09iamVjdChld2tGcmFtZSk7CiB9CiAK
LXNzaXplX3QgZXdrX2ZyYW1lX3NvdXJjZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIG8sIGNoYXIq
KiBmcmFtZV9zb3VyY2UpCitzc2l6ZV90IGV3a19mcmFtZV9zb3VyY2VfZ2V0KGNvbnN0IEV2YXNf
T2JqZWN0KiBld2tGcmFtZSwgY2hhcioqIGZyYW1lX3NvdXJjZSkKIHsKLSAgICBFV0tfRlJBTUVf
U0RfR0VUX09SX1JFVFVSTihvLCBzZCwgLTEpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVU
VVJOKGV3a0ZyYW1lLCBzZCwgLTEpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZB
TChzZC0+ZnJhbWUsIC0xKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2Qt
PmZyYW1lLT5kb2N1bWVudCgpLCAtMSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5f
VkFMKGZyYW1lX3NvdXJjZSwgLTEpOwpAQCAtMTU0Myw5ICsxNTQzLDkgQEAgc3NpemVfdCBld2tf
ZnJhbWVfc291cmNlX2dldChjb25zdCBFdmFzX09iamVjdCogbywgY2hhcioqIGZyYW1lX3NvdXJj
ZSkKICAgICByZXR1cm4gc291cmNlX2xlbmd0aDsKIH0KIAotRWluYV9MaXN0KiBld2tfZnJhbWVf
cmVzb3VyY2VzX2xvY2F0aW9uX2dldChjb25zdCBFdmFzX09iamVjdCogbykKK0VpbmFfTGlzdCog
ZXdrX2ZyYW1lX3Jlc291cmNlc19sb2NhdGlvbl9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a0Zy
YW1lKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAwKTsKKyAgICBF
V0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIDApOwogICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIDApOwogICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUtPmRvY3VtZW50KCksIDApOwogCkBAIC0xNjA5LDkg
KzE2MDksOSBAQCBjaGFyKiBld2tfZnJhbWVfcGxhaW5fdGV4dF9nZXQoY29uc3QgRXZhc19PYmpl
Y3QqIGV3a0ZyYW1lKQogICoKICAqIEVtaXRzIHNpZ25hbDogInVyaSxjaGFuZ2VkIiB3aXRoIG5l
dyB1cmkgYXMgcGFyYW1ldGVyLgogICovCi1FaW5hX0Jvb2wgZXdrX2ZyYW1lX3VyaV9jaGFuZ2Vk
KEV2YXNfT2JqZWN0KiBvKQorRWluYV9Cb29sIGV3a19mcmFtZV91cmlfY2hhbmdlZChFdmFzX09i
amVjdCogZXdrRnJhbWUpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4obywgc2Qs
IEVJTkFfRkFMU0UpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBz
ZCwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5m
cmFtZSwgRUlOQV9GQUxTRSk7CiAgICAgV1RGOjpDU3RyaW5nIHVyaShzZC0+ZnJhbWUtPmRvY3Vt
ZW50KCktPnVybCgpLnN0cmluZygpLnV0ZjgoKSk7CiAKQEAgLTE2MjIsNyArMTYyMiw3IEBAIEVp
bmFfQm9vbCBld2tfZnJhbWVfdXJpX2NoYW5nZWQoRXZhc19PYmplY3QqIG8pCiAgICAgfQogCiAg
ICAgZWluYV9zdHJpbmdzaGFyZV9yZXBsYWNlKCZzZC0+dXJpLCB1cmkuZGF0YSgpKTsKLSAgICBl
dmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKG8sICJ1cmksY2hhbmdlZCIsICh2b2lkKilz
ZC0+dXJpKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKGV3a0ZyYW1lLCAi
dXJpLGNoYW5nZWQiLCAodm9pZCopc2QtPnVyaSk7CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0K
IApAQCAtMTYzMSwxMCArMTYzMSwxMCBAQCBFaW5hX0Jvb2wgZXdrX2ZyYW1lX3VyaV9jaGFuZ2Vk
KEV2YXNfT2JqZWN0KiBvKQogICoKICAqIEZvcmNlcyBsYXlvdXQgZm9yIGZyYW1lLgogICovCi12
b2lkIGV3a19mcmFtZV9mb3JjZV9sYXlvdXQoRXZhc19PYmplY3QqIG8pCit2b2lkIGV3a19mcmFt
ZV9mb3JjZV9sYXlvdXQoRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewotICAgIERCRygibz0lcCIs
IG8pOwotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkKTsKKyAgICBEQkcoIm89
JXAiLCBld2tGcmFtZSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUs
IHNkKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+ZnJhbWUpOwogICAgIFdl
YkNvcmU6OkZyYW1lVmlldyogdmlldyA9IHNkLT5mcmFtZS0+dmlldygpOwogICAgIGlmICh2aWV3
KQpAQCAtMTY0Niw3ICsxNjQ2LDcgQEAgdm9pZCBld2tfZnJhbWVfZm9yY2VfbGF5b3V0KEV2YXNf
T2JqZWN0KiBvKQogICoKICAqIENyZWF0ZXMgcGx1Z2luLgogICovCi1XVEY6OlBhc3NSZWZQdHI8
V2ViQ29yZTo6V2lkZ2V0PiBld2tfZnJhbWVfcGx1Z2luX2NyZWF0ZShFdmFzX09iamVjdCogbywg
Y29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgcGx1Z2luU2l6ZSwgV2ViQ29yZTo6SFRNTFBsdWdJbkVs
ZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFdlYkNvcmU6OktVUkwmIHVybCwgY29uc3QgV1RGOjpWZWN0
b3I8V1RGOjpTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBXVEY6OlZlY3RvcjxXVEY6OlN0cmlu
Zz4mIHBhcmFtVmFsdWVzLCBjb25zdCBXVEY6OlN0cmluZyYgbWltZVR5cGUsIGJvb2wgbG9hZE1h
bnVhbGx5KQorV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OldpZGdldD4gZXdrX2ZyYW1lX3BsdWdp
bl9jcmVhdGUoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBw
bHVnaW5TaXplLCBXZWJDb3JlOjpIVE1MUGx1Z0luRWxlbWVudCogZWxlbWVudCwgY29uc3QgV2Vi
Q29yZTo6S1VSTCYgdXJsLCBjb25zdCBXVEY6OlZlY3RvcjxXVEY6OlN0cmluZz4mIHBhcmFtTmFt
ZXMsIGNvbnN0IFdURjo6VmVjdG9yPFdURjo6U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0IFdU
Rjo6U3RyaW5nJiBtaW1lVHlwZSwgYm9vbCBsb2FkTWFudWFsbHkpCiB7CiAgICAgcmV0dXJuIDA7
CiB9CkBAIC0xNjU5LDEwICsxNjU5LDEwIEBAIFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpXaWRn
ZXQ+IGV3a19mcmFtZV9wbHVnaW5fY3JlYXRlKEV2YXNfT2JqZWN0KiBvLCBjb25zdCBXCiAgKgog
ICogRW1pdHMgc2lnbmFsOiAiZWRpdG9yY2xpZW50c2VsZWN0aW9uLGNoYW5nZWQiIHdpdGggbm8g
cGFyYW1ldGVycy4KICAqLwotdm9pZCBld2tfZnJhbWVfZWRpdG9yX2NsaWVudF9zZWxlY3Rpb25f
Y2hhbmdlZChFdmFzX09iamVjdCogbykKK3ZvaWQgZXdrX2ZyYW1lX2VkaXRvcl9jbGllbnRfc2Vs
ZWN0aW9uX2NoYW5nZWQoRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewotICAgIGV2YXNfb2JqZWN0
X3NtYXJ0X2NhbGxiYWNrX2NhbGwobywgImVkaXRvcmNsaWVudCxzZWxlY3Rpb24sY2hhbmdlZCIs
IDApOwotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkKTsKKyAgICBldmFzX29i
amVjdF9zbWFydF9jYWxsYmFja19jYWxsKGV3a0ZyYW1lLCAiZWRpdG9yY2xpZW50LHNlbGVjdGlv
bixjaGFuZ2VkIiwgMCk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUs
IHNkKTsKICAgICBld2tfdmlld19lZGl0b3JfY2xpZW50X3NlbGVjdGlvbl9jaGFuZ2VkKHNkLT52
aWV3KTsKIH0KIApAQCAtMTY3NCw5ICsxNjc0LDkgQEAgdm9pZCBld2tfZnJhbWVfZWRpdG9yX2Ns
aWVudF9zZWxlY3Rpb25fY2hhbmdlZChFdmFzX09iamVjdCogbykKICAqCiAgKiBFbWl0cyBzaWdu
YWw6ICJlZGl0b3JjbGllbnQsY29udGVudHMsY2hhbmdlZCIgd2l0aCBubyBwYXJhbWV0ZXJzLgog
ICovCi12b2lkIGV3a19mcmFtZV9lZGl0b3JfY2xpZW50X2NvbnRlbnRzX2NoYW5nZWQoRXZhc19P
YmplY3QqIG8pCit2b2lkIGV3a19mcmFtZV9lZGl0b3JfY2xpZW50X2NvbnRlbnRzX2NoYW5nZWQo
RXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNr
X2NhbGwobywgImVkaXRvcmNsaWVudCxjb250ZW50cyxjaGFuZ2VkIiwgMCk7Ci0gICAgRVdLX0ZS
QU1FX1NEX0dFVF9PUl9SRVRVUk4obywgc2QpOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxi
YWNrX2NhbGwoZXdrRnJhbWUsICJlZGl0b3JjbGllbnQsY29udGVudHMsY2hhbmdlZCIsIDApOwor
ICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCk7CiAgICAgZXdrX3Zp
ZXdfZWRpdG9yX2NsaWVudF9jb250ZW50c19jaGFuZ2VkKHNkLT52aWV3KTsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfYmFja2luZ19zdG9yZS5jcHAgYi9T
b3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmUuY3BwCmluZGV4IGQ3
MTJmN2EuLjJhZDRkNmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlLmNwcApAQCAtNDYsOSArNDYsOSBAQCB0eXBlZGVmIGVudW0gX0V3a19U
aWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUHJpb3JpdHkgRXdrX1RpbGVkX0JhY2tpbmdf
U3RvcgogCiBzdHJ1Y3QgX0V3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gewogICAgIEVJTkFf
SU5MSVNUOwotICAgIEV3a19UaWxlICp0aWxlOworICAgIEV3a19UaWxlKiB0aWxlOwogICAgIHN0
cnVjdCB7Ci0gICAgICAgIEV2YXNfQ29vcmQgeCwgeSwgdywgaDsKKyAgICAgICAgRXZhc19Db29y
ZCB4LCB5LCB3aWR0aCwgaGVpZ2h0OwogICAgIH0gZ2VvbWV0cnk7CiAgICAgRWluYV9Cb29sIHNt
b290aF9zY2FsZTsKIH07CkBAIC02MSwxNiArNjEsMTYgQEAgc3RydWN0IF9Fd2tfVGlsZWRfQmFj
a2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QgewogCiBzdHJ1Y3QgX0V3a19UaWxlZF9CYWNr
aW5nX1N0b3JlX0RhdGEgewogICAgIEV2YXNfT2JqZWN0X1NtYXJ0X0NsaXBwZWRfRGF0YSBiYXNl
OwotICAgIEV2YXNfT2JqZWN0ICpzZWxmOwotICAgIEV2YXNfT2JqZWN0ICpjb250ZW50c19jbGlw
cGVyOworICAgIEV2YXNfT2JqZWN0KiBzZWxmOworICAgIEV2YXNfT2JqZWN0KiBjb250ZW50c19j
bGlwcGVyOwogICAgIHN0cnVjdCB7Ci0gICAgICAgIEVpbmFfSW5saXN0ICoqaXRlbXM7Ci0gICAg
ICAgIEV2YXNfQ29vcmQgeCwgeSwgdywgaDsKKyAgICAgICAgRWluYV9Jbmxpc3QqKiBpdGVtczsK
KyAgICAgICAgRXZhc19Db29yZCB4LCB5LCB3aWR0aCwgaGVpZ2h0OwogICAgICAgICBsb25nIGNv
bHMsIHJvd3M7CiAgICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICBFdmFzX0Nvb3JkIHcsIGg7
CisgICAgICAgICAgICBFdmFzX0Nvb3JkIHdpZHRoLCBoZWlnaHQ7CiAgICAgICAgICAgICBmbG9h
dCB6b29tOwotICAgICAgICAgICAgRWluYV9Cb29sIHpvb21fd2Vha19zbW9vdGhfc2NhbGU6MTsK
KyAgICAgICAgICAgIEVpbmFfQm9vbCB6b29tX3dlYWtfc21vb3RoX3NjYWxlIDogMTsKICAgICAg
ICAgfSB0aWxlOwogICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgc3RydWN0IHsKQEAgLTgw
LDcgKzgwLDcgQEAgc3RydWN0IF9Fd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhIHsKICAgICB9
IHZpZXc7CiAgICAgRXZhc19Db2xvcnNwYWNlIGNzcGFjZTsKICAgICBzdHJ1Y3QgewotICAgICAg
ICBFd2tfVGlsZV9NYXRyaXggKm1hdHJpeDsKKyAgICAgICAgRXdrX1RpbGVfTWF0cml4KiBtYXRy
aXg7CiAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGNvbCwgcm93
OwogICAgICAgICB9IGJhc2U7CkBAIC05MCwyOCArOTAsMjggQEAgc3RydWN0IF9Fd2tfVGlsZWRf
QmFja2luZ19TdG9yZV9EYXRhIHsKICAgICAgICAgRXZhc19Db29yZCB3aWR0aCwgaGVpZ2h0Owog
ICAgIH0gbW9kZWw7CiAgICAgc3RydWN0IHsKLSAgICAgICAgRWluYV9Cb29sICgqY2IpKHZvaWQg
KmRhdGEsIEV3a19UaWxlICp0LCBjb25zdCBFaW5hX1JlY3RhbmdsZSAqYXJlYSk7Ci0gICAgICAg
IHZvaWQgKmRhdGE7Ci0gICAgICAgIEVpbmFfSW5saXN0ICpwcmVfcmVuZGVyX3JlcXVlc3RzOwot
ICAgICAgICBFY29yZV9JZGxlciAqaWRsZXI7CisgICAgICAgIEVpbmFfQm9vbCAoKiBjYikodm9p
ZCogZGF0YSwgRXdrX1RpbGUqIHRpbGUsIGNvbnN0IEVpbmFfUmVjdGFuZ2xlKiBhcmVhKTsKKyAg
ICAgICAgdm9pZCogZGF0YTsKKyAgICAgICAgRWluYV9Jbmxpc3QqIHByZV9yZW5kZXJfcmVxdWVz
dHM7CisgICAgICAgIEVjb3JlX0lkbGVyKiBpZGxlcjsKICAgICAgICAgRWluYV9Cb29sIGRpc2Fi
bGVkOwotICAgICAgICBFaW5hX0Jvb2wgc3VzcGVuZDoxOworICAgICAgICBFaW5hX0Jvb2wgc3Vz
cGVuZCA6IDE7CiAgICAgfSByZW5kZXI7CiAgICAgc3RydWN0IHsKLSAgICAgICAgdm9pZCAqKCpw
cmVfY2IpKHZvaWQgKmRhdGEsIEV2YXNfT2JqZWN0ICpvKTsKLSAgICAgICAgdm9pZCAqcHJlX2Rh
dGE7Ci0gICAgICAgIHZvaWQgKigqcG9zdF9jYikodm9pZCAqZGF0YSwgdm9pZCAqcHJlX2RhdGEs
IEV2YXNfT2JqZWN0ICpvKTsKLSAgICAgICAgdm9pZCAqcG9zdF9kYXRhOworICAgICAgICB2b2lk
KigqIHByZV9jYikodm9pZCogZGF0YSwgRXZhc19PYmplY3QqIGV3a1RpbGUpOworICAgICAgICB2
b2lkKiBwcmVfZGF0YTsKKyAgICAgICAgdm9pZCooKiBwb3N0X2NiKSh2b2lkKiBkYXRhLCB2b2lk
KiBwcmVfZGF0YSwgRXZhc19PYmplY3QqIGV3a1RpbGUpOworICAgICAgICB2b2lkKiBwb3N0X2Rh
dGE7CiAgICAgfSBwcm9jZXNzOwogICAgIHN0cnVjdCB7Ci0gICAgICAgIEVpbmFfQm9vbCBhbnk6
MTsKLSAgICAgICAgRWluYV9Cb29sIHBvczoxOwotICAgICAgICBFaW5hX0Jvb2wgc2l6ZToxOwot
ICAgICAgICBFaW5hX0Jvb2wgbW9kZWw6MTsKLSAgICAgICAgRWluYV9Cb29sIG9mZnNldDoxOwor
ICAgICAgICBFaW5hX0Jvb2wgYW55IDogMTsKKyAgICAgICAgRWluYV9Cb29sIHBvcyA6IDE7Cisg
ICAgICAgIEVpbmFfQm9vbCBzaXplIDogMTsKKyAgICAgICAgRWluYV9Cb29sIG1vZGVsIDogMTsK
KyAgICAgICAgRWluYV9Cb29sIG9mZnNldCA6IDE7CiAgICAgfSBjaGFuZ2VkOwogI2lmZGVmIERF
QlVHX01FTV9MRUFLUwotICAgIEVjb3JlX0V2ZW50X0hhbmRsZXIgKnNpZ191c3I7CisgICAgRWNv
cmVfRXZlbnRfSGFuZGxlciogc2lnX3VzcjsKICNlbmRpZgogfTsKIApAQCAtMTI1LDEzICsxMjUs
MTMgQEAgaW50IF9ld2tfdGlsZWRfbG9nX2RvbSA9IC0xOwogICAgICAgICByZXR1cm4gX19WQV9B
UkdTX187ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIH0K
IAotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2ZpbGxfcmVuZGVyZXJzKEV3
a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYpOwotc3RhdGljIGlubGluZSB2b2lkIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X2RiZyhjb25zdCBFd2tfVGlsZWRfQmFja2luZ19T
dG9yZV9EYXRhICpwcml2KTsKLXN0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfY2hhbmdlZChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2KTsKK3N0YXRp
YyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9maWxsX3JlbmRlcmVycyhFd2tfVGlsZWRf
QmFja2luZ19TdG9yZV9EYXRhKiBwcml2KTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfdmlld19kYmcoY29uc3QgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0
YSogcHJpdik7CitzdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2No
YW5nZWQoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdik7CiAKLXN0YXRpYyBpbmxp
bmUgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRlc19wcm9jZXNzKEV3a19UaWxl
ZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYpCitzdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX3VwZGF0ZXNfcHJvY2VzcyhFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9E
YXRhKiBwcml2KQogewotICAgIHZvaWQgKmRhdGEgPSAwOworICAgIHZvaWQqIGRhdGEgPSAwOwog
CiAgICAgLyogRG8gbm90IHByb2Nlc3MgdXBkYXRlcy4gTm90ZSB0aGF0IHdlIHN0aWxsIHdhbnQg
dG8gZ2V0IHVwZGF0ZXMgcmVxdWVzdHMKICAgICAgKiBpbiB0aGUgcXVldWUgaW4gb3JkZXIgdG8g
bm90IG1pc3MgYW55IHVwZGF0ZXMgYWZ0ZXIgdGhlIHJlbmRlciBpcwpAQCAtMTQ5LDEwICsxNDks
MTAgQEAgc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV91cGRhdGVz
X3Byb2Nlc3MoRXdrX1RpbGVkX0JhY2tpbmdfU3QKICAgICAgICAgcHJpdi0+cHJvY2Vzcy5wb3N0
X2NiKHByaXYtPnByb2Nlc3MucG9zdF9kYXRhLCBkYXRhLCBwcml2LT5zZWxmKTsKIH0KIAotc3Rh
dGljIGludCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZmx1c2godm9pZCAqZGF0YSkKK3N0YXRp
YyBpbnQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2ZsdXNoKHZvaWQqIGRhdGEpCiB7CiAgICAg
RXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdiA9IHN0YXRpY19jYXN0PEV3a19UaWxl
ZF9CYWNraW5nX1N0b3JlX0RhdGEqPihkYXRhKTsKLSAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUg
KnR1YyA9IGV3a190aWxlX21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJp
eCk7CisgICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0dWMgPSBld2tfdGlsZV9tYXRyaXhfdW51
c2VkX2NhY2hlX2dldChwcml2LT5tb2RlbC5tYXRyaXgpOwogCiAgICAgaWYgKHR1YykgewogICAg
ICAgICBEQkcoImZsdXNoIHVudXNlZCB0aWxlIGNhY2hlLiIpOwpAQCAtMTYzLDI3ICsxNjMsMjcg
QEAgc3RhdGljIGludCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZmx1c2godm9pZCAqZGF0YSkK
ICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIEV3a19UaWxlICpfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfdGlsZV9uZXcoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgdW5zaWdu
ZWQgbG9uZyBjb2wsIHVuc2lnbmVkIGxvbmcgcm93LCBmbG9hdCB6b29tKQorc3RhdGljIEV3a19U
aWxlKiBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9uZXcoRXdrX1RpbGVkX0JhY2tpbmdf
U3RvcmVfRGF0YSogcHJpdiwgdW5zaWduZWQgbG9uZyBjb2wsIHVuc2lnbmVkIGxvbmcgcm93LCBm
bG9hdCB6b29tKQogewotICAgIEV3a19UaWxlICp0OwotICAgIEV2YXMgKmV2YXMgPSBldmFzX29i
amVjdF9ldmFzX2dldChwcml2LT5zZWxmKTsKKyAgICBFd2tfVGlsZSogdGlsZTsKKyAgICBFdmFz
KiBldmFzID0gZXZhc19vYmplY3RfZXZhc19nZXQocHJpdi0+c2VsZik7CiAgICAgaWYgKCFldmFz
KSB7CiAgICAgICAgIENSSVRJQ0FMKCJldmFzX29iamVjdF9ldmFzX2dldCBmYWlsZWQhIik7CiAg
ICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIHQgPSBld2tfdGlsZV9tYXRyaXhfdGlsZV9u
ZXcKLSAgICAgICAgKHByaXYtPm1vZGVsLm1hdHJpeCwgZXZhcywgY29sLCByb3csIHpvb20pOwor
ICAgIHRpbGUgPSBld2tfdGlsZV9tYXRyaXhfdGlsZV9uZXcKKyAgICAgICAgICAgICAgIChwcml2
LT5tb2RlbC5tYXRyaXgsIGV2YXMsIGNvbCwgcm93LCB6b29tKTsKIAotICAgIGlmICghdCkgewor
ICAgIGlmICghdGlsZSkgewogICAgICAgICBDUklUSUNBTCgiZXdrX3RpbGVfbWF0cml4X3RpbGVf
bmV3IGZhaWxlZCEiKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgcmV0dXJuIHQ7
CisgICAgcmV0dXJuIHRpbGU7CiB9CiAKLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9pdGVtX21vdmUoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQsIEV2YXNfQ29v
cmQgeCwgRXZhc19Db29yZCB5KQorc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X2l0ZW1fbW92ZShFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKiBpdCwgRXZhc19Db29yZCB4
LCBFdmFzX0Nvb3JkIHkpCiB7CiAgICAgaXQtPmdlb21ldHJ5LnggPSB4OwogICAgIGl0LT5nZW9t
ZXRyeS55ID0geTsKQEAgLTE5MiwzNyArMTkyLDM3IEBAIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV9pdGVtX21vdmUoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQs
CiAgICAgICAgIGV2YXNfb2JqZWN0X21vdmUoaXQtPnRpbGUtPmltYWdlLCB4LCB5KTsKIH0KIAot
c3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcmVzaXplKEV3a19UaWxl
ZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0LCBFdmFzX0Nvb3JkIHcsIEV2YXNfQ29vcmQgaCkKK3N0
YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Jlc2l6ZShFd2tfVGlsZWRf
QmFja2luZ19TdG9yZV9JdGVtKiBpdCwgRXZhc19Db29yZCB3aWR0aCwgRXZhc19Db29yZCBoZWln
aHQpCiB7Ci0gICAgaXQtPmdlb21ldHJ5LncgPSB3OwotICAgIGl0LT5nZW9tZXRyeS5oID0gaDsK
KyAgICBpdC0+Z2VvbWV0cnkud2lkdGggPSB3aWR0aDsKKyAgICBpdC0+Z2VvbWV0cnkuaGVpZ2h0
ID0gaGVpZ2h0OwogCiAgICAgaWYgKGl0LT50aWxlKSB7Ci0gICAgICAgIGV2YXNfb2JqZWN0X3Jl
c2l6ZShpdC0+dGlsZS0+aW1hZ2UsIHcsIGgpOwotICAgICAgICBldmFzX29iamVjdF9pbWFnZV9m
aWxsX3NldChpdC0+dGlsZS0+aW1hZ2UsIDAsIDAsIHcsIGgpOworICAgICAgICBldmFzX29iamVj
dF9yZXNpemUoaXQtPnRpbGUtPmltYWdlLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgZXZhc19v
YmplY3RfaW1hZ2VfZmlsbF9zZXQoaXQtPnRpbGUtPmltYWdlLCAwLCAwLCB3aWR0aCwgaGVpZ2h0
KTsKICAgICB9CiB9CiAKLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxl
X2Fzc29jaWF0ZShFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFd2tfVGlsZSAq
dCwgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQpCitzdGF0aWMgdm9pZCBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9hc3NvY2lhdGUoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVf
RGF0YSogcHJpdiwgRXdrX1RpbGUqIHRpbGUsIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0q
IGl0KQogewogICAgIGlmIChpdC0+dGlsZSkKICAgICAgICAgQ1JJVElDQUwoIml0LT50aWxlPSVw
LCBidXQgaXQgc2hvdWxkIGJlIDAhIiwgaXQtPnRpbGUpOwotICAgIGl0LT50aWxlID0gdDsKKyAg
ICBpdC0+dGlsZSA9IHRpbGU7CiAgICAgZXZhc19vYmplY3RfbW92ZShpdC0+dGlsZS0+aW1hZ2Us
IGl0LT5nZW9tZXRyeS54LCBpdC0+Z2VvbWV0cnkueSk7Ci0gICAgZXZhc19vYmplY3RfcmVzaXpl
KGl0LT50aWxlLT5pbWFnZSwgaXQtPmdlb21ldHJ5LncsIGl0LT5nZW9tZXRyeS5oKTsKKyAgICBl
dmFzX29iamVjdF9yZXNpemUoaXQtPnRpbGUtPmltYWdlLCBpdC0+Z2VvbWV0cnkud2lkdGgsIGl0
LT5nZW9tZXRyeS5oZWlnaHQpOwogICAgIGV2YXNfb2JqZWN0X2ltYWdlX2ZpbGxfc2V0Ci0gICAg
ICAgIChpdC0+dGlsZS0+aW1hZ2UsIDAsIDAsIGl0LT5nZW9tZXRyeS53LCBpdC0+Z2VvbWV0cnku
aCk7CisgICAgICAgIChpdC0+dGlsZS0+aW1hZ2UsIDAsIDAsIGl0LT5nZW9tZXRyeS53aWR0aCwg
aXQtPmdlb21ldHJ5LmhlaWdodCk7CiAgICAgZXZhc19vYmplY3RfaW1hZ2Vfc21vb3RoX3NjYWxl
X3NldChpdC0+dGlsZS0+aW1hZ2UsIGl0LT5zbW9vdGhfc2NhbGUpOwogCi0gICAgaWYgKCFld2tf
dGlsZV92aXNpYmxlX2dldCh0KSkKLSAgICAgICAgZXZhc19vYmplY3Rfc21hcnRfbWVtYmVyX2Fk
ZCh0LT5pbWFnZSwgcHJpdi0+c2VsZik7CisgICAgaWYgKCFld2tfdGlsZV92aXNpYmxlX2dldCh0
aWxlKSkKKyAgICAgICAgZXZhc19vYmplY3Rfc21hcnRfbWVtYmVyX2FkZCh0aWxlLT5pbWFnZSwg
cHJpdi0+c2VsZik7CiAKLSAgICBld2tfdGlsZV9zaG93KHQpOworICAgIGV3a190aWxlX3Nob3co
dGlsZSk7CiB9CiAKLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2Rp
c3NvY2lhdGUoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgRXdrX1RpbGVkX0Jh
Y2tpbmdfU3RvcmVfSXRlbSAqaXQsIGRvdWJsZSBsYXN0X3VzZWQpCitzdGF0aWMgdm9pZCBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9kaXNzb2NpYXRlKEV3a19UaWxlZF9CYWNraW5nX1N0
b3JlX0RhdGEqIHByaXYsIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0qIGl0LCBkb3VibGUg
bGFzdF91c2VkKQogewotICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjOworICAgIEV3a19U
aWxlX1VudXNlZF9DYWNoZSogdHVjOwogICAgIGV3a190aWxlX2hpZGUoaXQtPnRpbGUpOwogICAg
IGlmICghZXdrX3RpbGVfdmlzaWJsZV9nZXQoaXQtPnRpbGUpKQogICAgICAgICBldmFzX29iamVj
dF9zbWFydF9tZW1iZXJfZGVsKGl0LT50aWxlLT5pbWFnZSk7CkBAIC0yMzMsMTAgKzIzMywxMCBA
QCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9kaXNzb2NpYXRlKEV3
a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdAogICAgIGl0LT50aWxlID0gMDsKIH0KIAotc3RhdGlj
IHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfZGlzc29jaWF0ZV9hbGwoRXdrX1Rp
bGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdikKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV90aWxlX2Rpc3NvY2lhdGVfYWxsKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0Rh
dGEqIHByaXYpCiB7Ci0gICAgRWluYV9Jbmxpc3QgKml0OwotICAgIEV3a19UaWxlZF9CYWNraW5n
X1N0b3JlX0l0ZW0gKml0ZW07CisgICAgRWluYV9Jbmxpc3QqIGl0OworICAgIEV3a19UaWxlZF9C
YWNraW5nX1N0b3JlX0l0ZW0qIGl0ZW07CiAgICAgaW50IGk7CiAgICAgZG91YmxlIGxhc3RfdXNl
ZCA9IGVjb3JlX2xvb3BfdGltZV9nZXQoKTsKIApAQCAtMjQ4LDkgKzI0OCw5IEBAIHN0YXRpYyB2
b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2Rpc3NvY2lhdGVfYWxsKEV3a19UaWxl
ZF9CYWNraW5nX1N0b3JlCiAgICAgfQogfQogCi1zdGF0aWMgaW5saW5lIEVpbmFfQm9vbCBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2FkZChFd2tfVGlsZWRfQmFj
a2luZ19TdG9yZV9EYXRhICpwcml2LCB1bnNpZ25lZCBsb25nIGNvbCwgdW5zaWduZWQgbG9uZyBy
b3csIGZsb2F0IHpvb20sIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUHJpb3Jp
dHkgcHJpb3JpdHkpCitzdGF0aWMgaW5saW5lIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2FkZChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRh
KiBwcml2LCB1bnNpZ25lZCBsb25nIGNvbCwgdW5zaWduZWQgbG9uZyByb3csIGZsb2F0IHpvb20s
IEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUHJpb3JpdHkgcHJpb3JpdHkpCiB7
Ci0gICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0ICpyOworICAg
IEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUmVxdWVzdCogcjsKIAogICAgIHIg
PSBzdGF0aWNfY2FzdDxFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3Qq
PihtYWxsb2Moc2l6ZW9mKCpyKSkpOwogICAgIGlmICghcikKQEAgLTI1OCwxMCArMjU4LDEwIEBA
IHN0YXRpYyBpbmxpbmUgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVu
ZGVyX3JlcXVlc3RfYWRkKEV3a19UaWxlCiAKICAgICBpZiAocHJpb3JpdHkgPT0gUFJFX1JFTkRF
Ul9QUklPUklUWV9ISUdIKQogICAgICAgICBwcml2LT5yZW5kZXIucHJlX3JlbmRlcl9yZXF1ZXN0
cyA9IGVpbmFfaW5saXN0X3ByZXBlbmQKLSAgICAgICAgICAgIChwcml2LT5yZW5kZXIucHJlX3Jl
bmRlcl9yZXF1ZXN0cywgRUlOQV9JTkxJU1RfR0VUKHIpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKHByaXYtPnJlbmRlci5wcmVfcmVuZGVyX3JlcXVl
c3RzLCBFSU5BX0lOTElTVF9HRVQocikpOwogICAgIGVsc2UKICAgICAgICAgcHJpdi0+cmVuZGVy
LnByZV9yZW5kZXJfcmVxdWVzdHMgPSBlaW5hX2lubGlzdF9hcHBlbmQKLSAgICAgICAgICAgIChw
cml2LT5yZW5kZXIucHJlX3JlbmRlcl9yZXF1ZXN0cywgRUlOQV9JTkxJU1RfR0VUKHIpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHByaXYtPnJlbmRl
ci5wcmVfcmVuZGVyX3JlcXVlc3RzLCBFSU5BX0lOTElTVF9HRVQocikpOwogCiAgICAgci0+Y29s
ID0gY29sOwogICAgIHItPnJvdyA9IHJvdzsKQEAgLTI3MCwzNyArMjcwLDM3IEBAIHN0YXRpYyBp
bmxpbmUgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVl
c3RfYWRkKEV3a19UaWxlCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotc3RhdGljIGlubGlu
ZSB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfZGVsKEV3
a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIEV3a19UaWxlZF9CYWNraW5nX1N0b3Jl
X1ByZV9SZW5kZXJfUmVxdWVzdCAqcikKK3N0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2RlbChFd2tfVGlsZWRfQmFja2luZ19TdG9y
ZV9EYXRhKiBwcml2LCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3Qq
IHIpCiB7CiAgICAgcHJpdi0+cmVuZGVyLnByZV9yZW5kZXJfcmVxdWVzdHMgPSBlaW5hX2lubGlz
dF9yZW1vdmUKLSAgICAgICAgKHByaXYtPnJlbmRlci5wcmVfcmVuZGVyX3JlcXVlc3RzLCBFSU5B
X0lOTElTVF9HRVQocikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIChwcml2LT5yZW5kZXIucHJlX3JlbmRlcl9yZXF1ZXN0cywgRUlOQV9JTkxJU1RfR0VUKHIp
KTsKICAgICBmcmVlKHIpOwogfQogCi1zdGF0aWMgaW5saW5lIEV3a19UaWxlZF9CYWNraW5nX1N0
b3JlX1ByZV9SZW5kZXJfUmVxdWVzdCAqX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5k
ZXJfcmVxdWVzdF9maXJzdChjb25zdCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2
KQorc3RhdGljIGlubGluZSBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVl
c3QqIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfZmlyc3QoY29u
c3QgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdikKIHsKICAgICByZXR1cm4gRUlO
QV9JTkxJU1RfQ09OVEFJTkVSX0dFVCgKLSAgICAgICAgcHJpdi0+cmVuZGVyLnByZV9yZW5kZXJf
cmVxdWVzdHMsCi0gICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUmVx
dWVzdCk7CisgICAgICAgICAgICAgICBwcml2LT5yZW5kZXIucHJlX3JlbmRlcl9yZXF1ZXN0cywK
KyAgICAgICAgICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUmVxdWVz
dCk7CiB9CiAKLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVy
X3JlcXVlc3RfZmx1c2goRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdikKK3N0YXRp
YyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfZmx1c2go
RXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdikKIHsKLSAgICBFaW5hX0lubGlzdCAq
KnBsID0gJnByaXYtPnJlbmRlci5wcmVfcmVuZGVyX3JlcXVlc3RzOworICAgIEVpbmFfSW5saXN0
KiogcGwgPSAmcHJpdi0+cmVuZGVyLnByZV9yZW5kZXJfcmVxdWVzdHM7CiAgICAgd2hpbGUgKCpw
bCkgewotICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3Qg
KnI7CisgICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUmVxdWVzdCog
cjsKICAgICAgICAgciA9IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVl
c3RfZmlyc3QocHJpdik7CiAgICAgICAgICpwbCA9IGVpbmFfaW5saXN0X3JlbW92ZSgqcGwsICpw
bCk7CiAgICAgICAgIGZyZWUocik7CiAgICAgfQogfQogCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2NsZWFyKEV3a19UaWxlZF9CYWNraW5n
X1N0b3JlX0RhdGEgKnByaXYpCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
cHJlX3JlbmRlcl9yZXF1ZXN0X2NsZWFyKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHBy
aXYpCiB7Ci0gICAgRWluYV9Jbmxpc3QgKipwbCA9ICZwcml2LT5yZW5kZXIucHJlX3JlbmRlcl9y
ZXF1ZXN0czsKLSAgICBFaW5hX0lubGlzdCAqaXRlciA9ICpwbCwgKnRtcDsKKyAgICBFaW5hX0lu
bGlzdCoqIHBsID0gJnByaXYtPnJlbmRlci5wcmVfcmVuZGVyX3JlcXVlc3RzOworICAgIEVpbmFf
SW5saXN0KiBpdGVyID0gKnBsLCAqIHRtcDsKICAgICB3aGlsZSAoaXRlcikgewotICAgICAgICBF
d2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QgKnIgPQorICAgICAgICBF
d2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QqIHIgPQogICAgICAgICAg
ICAgRUlOQV9JTkxJU1RfQ09OVEFJTkVSX0dFVCgKICAgICAgICAgICAgICAgICBpdGVyLCBFd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QpOwogICAgICAgICB0bXAgPSBp
dGVyLT5uZXh0OwpAQCAtMzExLDEzICszMTEsMTMgQEAgc3RhdGljIHZvaWQgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9jbGVhcihFd2tfVGlsZWRfQmFja2luZ18K
IH0KIAogLyogYXNzdW1lcyBwcml2LT5wcm9jZXNzLnByZV9jYiB3YXMgY2FsbGVkIGlmIHJlcXVp
cmVkISAqLwotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJf
cmVxdWVzdF9wcm9jZXNzX3NpbmdsZShFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2
KQorc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVz
dF9wcm9jZXNzX3NpbmdsZShFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2KQogewot
ICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUmVxdWVzdCAqcmVxOworICAg
IEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUmVxdWVzdCogcmVxOwogICAgIEVp
bmFfUmVjdGFuZ2xlIGFyZWE7Ci0gICAgRXdrX1RpbGVfTWF0cml4ICp0bSA9IHByaXYtPm1vZGVs
Lm1hdHJpeDsKLSAgICBFd2tfVGlsZSAqdDsKLSAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1
YzsKKyAgICBFd2tfVGlsZV9NYXRyaXgqIHRtID0gcHJpdi0+bW9kZWwubWF0cml4OworICAgIEV3
a19UaWxlKiB0aWxlOworICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSogdHVjOwogICAgIHVuc2ln
bmVkIGxvbmcgY29sLCByb3c7CiAgICAgZmxvYXQgem9vbTsKICAgICBkb3VibGUgbGFzdF91c2Vk
ID0gZWNvcmVfbG9vcF90aW1lX2dldCgpOwpAQCAtMzM1LDIyICszMzUsMjIgQEAgc3RhdGljIHZv
aWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9wcm9jZXNzX3Np
bmdsZShFd2tfVGlsZWQKICAgICAgICAgZ290byBlbmQ7CiAgICAgfQogCi0gICAgdCA9IF9ld2tf
dGlsZWRfYmFja2luZ19zdG9yZV90aWxlX25ldyhwcml2LCBjb2wsIHJvdywgem9vbSk7Ci0gICAg
aWYgKCF0KQorICAgIHRpbGUgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9uZXcocHJp
diwgY29sLCByb3csIHpvb20pOworICAgIGlmICghdGlsZSkKICAgICAgICAgZ290byBlbmQ7CiAK
ICAgICBhcmVhLnggPSAwOwogICAgIGFyZWEueSA9IDA7Ci0gICAgYXJlYS53ID0gcHJpdi0+dmll
dy50aWxlLnc7Ci0gICAgYXJlYS5oID0gcHJpdi0+dmlldy50aWxlLmg7CisgICAgYXJlYS53ID0g
cHJpdi0+dmlldy50aWxlLndpZHRoOworICAgIGFyZWEuaCA9IHByaXYtPnZpZXcudGlsZS5oZWln
aHQ7CiAKLSAgICBwcml2LT5yZW5kZXIuY2IocHJpdi0+cmVuZGVyLmRhdGEsIHQsICZhcmVhKTsK
KyAgICBwcml2LT5yZW5kZXIuY2IocHJpdi0+cmVuZGVyLmRhdGEsIHRpbGUsICZhcmVhKTsKICAg
ICBldmFzX29iamVjdF9pbWFnZV9kYXRhX3VwZGF0ZV9hZGQoCi0gICAgICAgIHQtPmltYWdlLAor
ICAgICAgICB0aWxlLT5pbWFnZSwKICAgICAgICAgYXJlYS54LCBhcmVhLnksIGFyZWEudywgYXJl
YS5oKTsKLSAgICBld2tfdGlsZV9tYXRyaXhfdGlsZV91cGRhdGVzX2NsZWFyKHRtLCB0KTsKKyAg
ICBld2tfdGlsZV9tYXRyaXhfdGlsZV91cGRhdGVzX2NsZWFyKHRtLCB0aWxlKTsKIAotICAgIGV3
a190aWxlX21hdHJpeF90aWxlX3B1dCh0bSwgdCwgbGFzdF91c2VkKTsKKyAgICBld2tfdGlsZV9t
YXRyaXhfdGlsZV9wdXQodG0sIHRpbGUsIGxhc3RfdXNlZCk7CiAKIGVuZDoKICAgICBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2RlbChwcml2LCByZXEpOwpAQCAt
MzU4LDcgKzM1OCw3IEBAIGVuZDoKICAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfYXV0b19mbHVz
aCh0dWMpOwogfQogCi1zdGF0aWMgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9p
dGVtX3Byb2Nlc3NfaWRsZXJfY2Iodm9pZCAqZGF0YSkKK3N0YXRpYyBFaW5hX0Jvb2wgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcHJvY2Vzc19pZGxlcl9jYih2b2lkKiBkYXRhKQogewog
ICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYgPSBzdGF0aWNfY2FzdDxFd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKj4oZGF0YSk7CiAKQEAgLTM3OCw3ICszNzgsNyBAQCBz
dGF0aWMgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Byb2Nlc3NfaWRs
ZXJfY2Iodm9pZCAqZGF0YSkKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi1zdGF0aWMgaW5s
aW5lIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcHJvY2Vzc19pZGxlcl9zdG9w
KEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYpCitzdGF0aWMgaW5saW5lIHZvaWQg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcHJvY2Vzc19pZGxlcl9zdG9wKEV3a19UaWxl
ZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYpCiB7CiAgICAgaWYgKCFwcml2LT5yZW5kZXIuaWRs
ZXIpCiAgICAgICAgIHJldHVybjsKQEAgLTM4Nyw3ICszODcsNyBAQCBzdGF0aWMgaW5saW5lIHZv
aWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcHJvY2Vzc19pZGxlcl9zdG9wKEV3a19U
aWxlZF9CYQogICAgIHByaXYtPnJlbmRlci5pZGxlciA9IDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUg
dm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9wcm9jZXNzX2lkbGVyX3N0YXJ0KEV3
a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYpCitzdGF0aWMgaW5saW5lIHZvaWQgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcHJvY2Vzc19pZGxlcl9zdGFydChFd2tfVGlsZWRf
QmFja2luZ19TdG9yZV9EYXRhKiBwcml2KQogewogICAgIGlmIChwcml2LT5yZW5kZXIuaWRsZXIp
CiAgICAgICAgIHJldHVybjsKQEAgLTM5NSw3ICszOTUsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcHJvY2Vzc19pZGxlcl9zdGFydChFd2tfVGls
ZWRfQgogICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9wcm9jZXNzX2lkbGVy
X2NiLCBwcml2KTsKIH0KIAotc3RhdGljIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfZGlzYWJsZV9yZW5kZXIoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdikKK3N0
YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2Rpc2FibGVfcmVuZGVyKEV3
a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYpCiB7CiAgICAgaWYgKHByaXYtPnJlbmRl
ci5zdXNwZW5kKQogICAgICAgICByZXR1cm4gRUlOQV9UUlVFOwpAQCAtNDA1LDcgKzQwNSw3IEBA
IHN0YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2Rpc2FibGVfcmVuZGVy
KEV3a19UaWxlZF9CYWNraW5nX1N0b3JlCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotc3Rh
dGljIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZW5hYmxlX3JlbmRlcihFd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2KQorc3RhdGljIEVpbmFfQm9vbCBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfZW5hYmxlX3JlbmRlcihFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9E
YXRhKiBwcml2KQogewogICAgIGlmICghcHJpdi0+cmVuZGVyLnN1c3BlbmQpCiAgICAgICAgIHJl
dHVybiBFSU5BX1RSVUU7CkBAIC00MTgsNyArNDE4LDcgQEAgc3RhdGljIEVpbmFfQm9vbCBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfZW5hYmxlX3JlbmRlcihFd2tfVGlsZWRfQmFja2luZ19TdG9y
ZV8KICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi1zdGF0aWMgaW5saW5lIEVpbmFfQm9vbCBf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9maWxsKEV3a19UaWxlZF9CYWNraW5nX1N0b3Jl
X0RhdGEgKnByaXYsIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0LCB1bnNpZ25lZCBs
b25nIGNvbCwgdW5zaWduZWQgbG9uZyByb3cpCitzdGF0aWMgaW5saW5lIEVpbmFfQm9vbCBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9maWxsKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0Rh
dGEqIHByaXYsIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0qIGl0LCB1bnNpZ25lZCBsb25n
IGNvbCwgdW5zaWduZWQgbG9uZyByb3cpCiB7CiAgICAgdW5zaWduZWQgbG9uZyBtX2NvbCA9IHBy
aXYtPm1vZGVsLmJhc2UuY29sICsgY29sOwogICAgIHVuc2lnbmVkIGxvbmcgbV9yb3cgPSBwcml2
LT5tb2RlbC5iYXNlLnJvdyArIHJvdzsKQEAgLTQyOCwyMCArNDI4LDIwIEBAIHN0YXRpYyBpbmxp
bmUgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2ZpbGwoRXdrX1RpbGVk
X0JhY2tpbmdfU3RvCiAgICAgICAgIGlmIChpdC0+dGlsZSkKICAgICAgICAgICAgIF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV90aWxlX2Rpc3NvY2lhdGUocHJpdiwgaXQsIGxhc3RfdXNlZCk7CiAg
ICAgfSBlbHNlIHsKLSAgICAgICAgRXdrX1RpbGUgKnQ7CisgICAgICAgIEV3a19UaWxlKiB0aWxl
OwogICAgICAgICBjb25zdCBmbG9hdCB6b29tID0gcHJpdi0+dmlldy50aWxlLnpvb207CiAKICAg
ICAgICAgaWYgKGl0LT50aWxlKSB7Ci0gICAgICAgICAgICBFd2tfVGlsZSAqb2xkID0gaXQtPnRp
bGU7CisgICAgICAgICAgICBFd2tfVGlsZSogb2xkID0gaXQtPnRpbGU7CiAgICAgICAgICAgICBp
ZiAob2xkLT5yb3cgIT0gbV9yb3cgfHwgb2xkLT5jb2wgIT0gbV9jb2wgfHwgb2xkLT56b29tICE9
IHpvb20pCiAgICAgICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfZGlz
c29jaWF0ZShwcml2LCBpdCwgbGFzdF91c2VkKTsKICAgICAgICAgICAgIGVsc2UgaWYgKG9sZC0+
cm93ID09IG1fcm93ICYmIG9sZC0+Y29sID09IG1fY29sICYmIG9sZC0+em9vbSA9PSB6b29tKQog
ICAgICAgICAgICAgICAgIGdvdG8gZW5kOwogICAgICAgICB9CiAKLSAgICAgICAgdCA9IGV3a190
aWxlX21hdHJpeF90aWxlX2V4YWN0X2dldChwcml2LT5tb2RlbC5tYXRyaXgsIG1fY29sLCBtX3Jv
dywgem9vbSk7CisgICAgICAgIHRpbGUgPSBld2tfdGlsZV9tYXRyaXhfdGlsZV9leGFjdF9nZXQo
cHJpdi0+bW9kZWwubWF0cml4LCBtX2NvbCwgbV9yb3csIHpvb20pOwogCi0gICAgICAgIGlmICgh
dCkgeworICAgICAgICBpZiAoIXRpbGUpIHsKICAgICAgICAgICAgIC8qIE5PVEU6IGl0IG5ldmVy
IHJldHVybnMgMCBpZiBpdC0+dGlsZSB3YXMgc2V0ISAqLwogICAgICAgICAgICAgaWYgKGl0LT50
aWxlKSB7CiAgICAgICAgICAgICAgICAgQ1JJVElDQUwoIml0LT50aWxlPSVwLCBidXQgaXQgc2hv
dWxkIGJlIDAhIiwgaXQtPnRpbGUpOwpAQCAtNDUxLDE5ICs0NTEsMTkgQEAgc3RhdGljIGlubGlu
ZSBFaW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZmlsbChFd2tfVGlsZWRf
QmFja2luZ19TdG8KIAogICAgICAgICAgICAgLyogRG8gbm90IGFkZCBuZXcgcmVxdWVzdHMgdG8g
dGhlIHJlbmRlciBxdWV1ZSAqLwogICAgICAgICAgICAgaWYgKCFwcml2LT5yZW5kZXIuc3VzcGVu
ZCkgewotICAgICAgICAgICAgICAgIHQgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9u
ZXcocHJpdiwgbV9jb2wsIG1fcm93LCB6b29tKTsKLSAgICAgICAgICAgICAgICBpZiAoIXQpCisg
ICAgICAgICAgICAgICAgdGlsZSA9IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX25ldyhw
cml2LCBtX2NvbCwgbV9yb3csIHpvb20pOworICAgICAgICAgICAgICAgIGlmICghdGlsZSkKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7Ci0gICAgICAgICAgICAgICAgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfYXNzb2NpYXRlKHByaXYsIHQsIGl0KTsKKyAgICAg
ICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9hc3NvY2lhdGUocHJpdiwg
dGlsZSwgaXQpOwogICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKHQgIT0gaXQtPnRp
bGUpIHsKKyAgICAgICAgfSBlbHNlIGlmICh0aWxlICE9IGl0LT50aWxlKSB7CiAgICAgICAgICAg
ICBpZiAoaXQtPnRpbGUpCiAgICAgICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3RpbGVfZGlzc29jaWF0ZShwcml2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0LCBsYXN0X3VzZWQpOwotICAgICAgICAgICAg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfYXNzb2NpYXRlKHByaXYsIHQsIGl0KTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0
LCBsYXN0X3VzZWQpOworICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVf
YXNzb2NpYXRlKHByaXYsIHRpbGUsIGl0KTsKICAgICAgICAgfQogCi0gICAgICBlbmQ6CitlbmQ6
CiAKICAgICAgICAgcmV0dXJuIEVJTkFfVFJVRTsKICAgICB9CkBAIC00NzEsOSArNDcxLDkgQEAg
c3RhdGljIGlubGluZSBFaW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZmls
bChFd2tfVGlsZWRfQmFja2luZ19TdG8KICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi1zdGF0
aWMgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X2l0ZW1fYWRkKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIHVuc2lnbmVkIGxv
bmcgY29sLCB1bnNpZ25lZCBsb25nIHJvdykKK3N0YXRpYyBFd2tfVGlsZWRfQmFja2luZ19TdG9y
ZV9JdGVtKiBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9hZGQoRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfRGF0YSogcHJpdiwgdW5zaWduZWQgbG9uZyBjb2wsIHVuc2lnbmVkIGxvbmcgcm93
KQogewotICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0OworICAgIEV3a19UaWxl
ZF9CYWNraW5nX1N0b3JlX0l0ZW0qIGl0OwogICAgIEV2YXNfQ29vcmQgeCwgeSwgdHcsIHRoOwog
CiAgICAgREJHKCJvPSVwIiwgcHJpdi0+c2VsZik7CkBAIC00ODIsOCArNDgyLDggQEAgc3RhdGlj
IEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKl9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9p
dGVtX2FkZChFd2tfVGlsZWQKICAgICBpZiAoIWl0KQogICAgICAgICByZXR1cm4gMDsKIAotICAg
IHR3ID0gcHJpdi0+dmlldy50aWxlLnc7Ci0gICAgdGggPSBwcml2LT52aWV3LnRpbGUuaDsKKyAg
ICB0dyA9IHByaXYtPnZpZXcudGlsZS53aWR0aDsKKyAgICB0aCA9IHByaXYtPnZpZXcudGlsZS5o
ZWlnaHQ7CiAgICAgeCA9IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCArIHByaXYtPnZpZXcueCAr
IHR3ICAqY29sOwogICAgIHkgPSBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgKyBwcml2LT52aWV3
LnkgKyB0aCAgKnJvdzsKIApAQCAtNTAwLDcgKzUwMCw3IEBAIHN0YXRpYyBFd2tfVGlsZWRfQmFj
a2luZ19TdG9yZV9JdGVtICpfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9hZGQoRXdrX1Rp
bGVkCiAgICAgcmV0dXJuIGl0OwogfQogCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfaXRlbV9kZWwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgRXdrX1Rp
bGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQpCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfaXRlbV9kZWwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdiwgRXdr
X1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSogaXQpCiB7CiAgICAgaWYgKGl0LT50aWxlKSB7CiAg
ICAgICAgIGRvdWJsZSBsYXN0X3VzZWQgPSBlY29yZV9sb29wX3RpbWVfZ2V0KCk7CkBAIC01MTAs
NyArNTEwLDcgQEAgc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZGVs
KEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYKICAgICBmcmVlKGl0KTsKIH0KIAot
c3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fc21vb3RoX3NjYWxlX3Nl
dChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdCwgRWluYV9Cb29sIHNtb290aF9zY2Fs
ZSkKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Ntb290aF9zY2Fs
ZV9zZXQoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSogaXQsIEVpbmFfQm9vbCBzbW9vdGhf
c2NhbGUpCiB7CiAgICAgaWYgKGl0LT5zbW9vdGhfc2NhbGUgPT0gc21vb3RoX3NjYWxlKQogICAg
ICAgICByZXR1cm47CkBAIC01MTksNyArNTE5LDcgQEAgc3RhdGljIHZvaWQgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX2l0ZW1fc21vb3RoX3NjYWxlX3NldChFd2tfVGlsZWRfQmFja2luZ19TdG8K
ICAgICAgICAgZXZhc19vYmplY3RfaW1hZ2Vfc21vb3RoX3NjYWxlX3NldChpdC0+dGlsZS0+aW1h
Z2UsIHNtb290aF9zY2FsZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfY2hhbmdlZChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2KQor
c3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9jaGFuZ2VkKEV3a19U
aWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYpCiB7CiAgICAgaWYgKHByaXYtPmNoYW5nZWQu
YW55KQogICAgICAgICByZXR1cm47CkBAIC01MjcsOSArNTI3LDkgQEAgc3RhdGljIGlubGluZSB2
b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9jaGFuZ2VkKEV3a19UaWxlZF9CYWNraW5nX1N0
b3JlX0RhdGEKICAgICBwcml2LT5jaGFuZ2VkLmFueSA9IEVJTkFfVFJVRTsKIH0KIAotc3RhdGlj
IHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfY29sc19lbmRfZGVsKEV3a19UaWxl
ZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIEVpbmFfSW5saXN0ICoqcF9yb3csIHVuc2lnbmVk
IGludCBjb3VudCkKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X2Nv
bHNfZW5kX2RlbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2LCBFaW5hX0lubGlz
dCoqIHBfcm93LCB1bnNpZ25lZCBpbnQgY291bnQpCiB7Ci0gICAgRWluYV9Jbmxpc3QgKm47Cisg
ICAgRWluYV9Jbmxpc3QqIG47CiAgICAgdW5zaWduZWQgaW50IGk7CiAKICAgICBpZiAoIWNvdW50
KQpAQCAtNTM4LDcgKzUzOCw3IEBAIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV92aWV3X2NvbHNfZW5kX2RlbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9ECiAgICAgbiA9ICgq
cF9yb3cpLT5sYXN0OwogCiAgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLSAgICAg
ICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQ7CisgICAgICAgIEV3a19UaWxlZF9C
YWNraW5nX1N0b3JlX0l0ZW0qIGl0OwogICAgICAgICBpdCA9IEVJTkFfSU5MSVNUX0NPTlRBSU5F
Ul9HRVQobiwgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSk7CiAgICAgICAgIG4gPSBuLT5w
cmV2OwogICAgICAgICAqcF9yb3cgPSBlaW5hX2lubGlzdF9yZW1vdmUoKnBfcm93LCBFSU5BX0lO
TElTVF9HRVQoaXQpKTsKQEAgLTU0NiwxMiArNTQ2LDEyIEBAIHN0YXRpYyB2b2lkIF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV92aWV3X2NvbHNfZW5kX2RlbChFd2tfVGlsZWRfQmFja2luZ19TdG9y
ZV9ECiAgICAgfQogfQogCi1zdGF0aWMgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV92aWV3X2NvbHNfZW5kX2FkZChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBF
aW5hX0lubGlzdCAqKnBfcm93LCB1bnNpZ25lZCBpbnQgYmFzZV9jb2wsIHVuc2lnbmVkIGludCBj
b3VudCkKK3N0YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfY29s
c19lbmRfYWRkKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYsIEVpbmFfSW5saXN0
KiogcF9yb3csIHVuc2lnbmVkIGludCBiYXNlX2NvbCwgdW5zaWduZWQgaW50IGNvdW50KQogewog
ICAgIHVuc2lnbmVkIGludCBpLCByID0gcF9yb3cgLSBwcml2LT52aWV3Lml0ZW1zOwogCiAgICAg
Zm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyssIGJhc2VfY29sKyspIHsKLSAgICAgICAgRXdrX1Rp
bGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQ7CisgICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0
b3JlX0l0ZW0qIGl0OwogCiAgICAgICAgIGl0ID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0
ZW1fYWRkKHByaXYsIGJhc2VfY29sLCByKTsKICAgICAgICAgaWYgKCFpdCkgewpAQCAtNTY1LDE3
ICs1NjUsMTcgQEAgc3RhdGljIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmll
d19jb2xzX2VuZF9hZGQoRXdrX1RpbGVkX0JhY2tpbmdfU3QKICAgICByZXR1cm4gRUlOQV9UUlVF
OwogfQogCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19yb3dfZGVs
KEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIEVpbmFfSW5saXN0ICpyb3cpCitz
dGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19yb3dfZGVsKEV3a19UaWxl
ZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYsIEVpbmFfSW5saXN0KiByb3cpCiB7CiAgICAgd2hp
bGUgKHJvdykgewotICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdDsKKyAg
ICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSogaXQ7CiAgICAgICAgIGl0ID0gRUlO
QV9JTkxJU1RfQ09OVEFJTkVSX0dFVChyb3csIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0p
OwogICAgICAgICByb3cgPSByb3ctPm5leHQ7CiAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9pdGVtX2RlbChwcml2LCBpdCk7CiAgICAgfQogfQogCi1zdGF0aWMgdm9pZCBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfdmlld19yb3dzX3JhbmdlX2RlbChFd2tfVGlsZWRfQmFja2luZ19T
dG9yZV9EYXRhICpwcml2LCBFaW5hX0lubGlzdCAqKnN0YXJ0LCBFaW5hX0lubGlzdCAqKmVuZCkK
K3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3Jvd3NfcmFuZ2VfZGVs
KEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYsIEVpbmFfSW5saXN0Kiogc3RhcnQs
IEVpbmFfSW5saXN0KiogZW5kKQogewogICAgIGZvciAoOyBzdGFydCA8IGVuZDsgc3RhcnQrKykg
ewogICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19yb3dfZGVsKHByaXYsICpz
dGFydCk7CkBAIC01ODMsMTAgKzU4MywxMCBAQCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfdmlld19yb3dzX3JhbmdlX2RlbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZQogICAg
IH0KIH0KIAotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcm93c19h
bGxfZGVsKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYpCitzdGF0aWMgdm9pZCBf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19yb3dzX2FsbF9kZWwoRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfRGF0YSogcHJpdikKIHsKLSAgICBFaW5hX0lubGlzdCAqKnN0YXJ0OwotICAgIEVp
bmFfSW5saXN0ICoqZW5kOworICAgIEVpbmFfSW5saXN0Kiogc3RhcnQ7CisgICAgRWluYV9Jbmxp
c3QqKiBlbmQ7CiAKICAgICBzdGFydCA9IHByaXYtPnZpZXcuaXRlbXM7CiAgICAgZW5kID0gcHJp
di0+dmlldy5pdGVtcyArIHByaXYtPnZpZXcucm93czsKQEAgLTU5OCwyNyArNTk4LDI3IEBAIHN0
YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3Jvd3NfYWxsX2RlbChFd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9ECiAgICAgcHJpdi0+dmlldy5yb3dzID0gMDsKIH0KIAotc3Rh
dGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3JlbmRlcih2b2lkICpkYXRhLCBFd2tf
VGlsZSAqdCwgY29uc3QgRWluYV9SZWN0YW5nbGUgKmFyZWEpCitzdGF0aWMgdm9pZCBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfcmVuZGVyKHZvaWQqIGRhdGEsIEV3a19UaWxlKiB0aWxlLCBjb25z
dCBFaW5hX1JlY3RhbmdsZSogYXJlYSkKIHsKICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9E
YXRhKiBwcml2ID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSo+KGRh
dGEpOwogCiAgICAgSU5GKCJUT0RPICVwICh2aXNpYmxlPyAlZCkgWyVsdSwlbHVdICVkLCVkICsg
JWR4JWQiLAotICAgICAgICB0LCB0LT52aXNpYmxlLCB0LT5jb2wsIHQtPnJvdywgYXJlYS0+eCwg
YXJlYS0+eSwgYXJlYS0+dywgYXJlYS0+aCk7CisgICAgICAgIHRpbGUsIHRpbGUtPnZpc2libGUs
IHRpbGUtPmNvbCwgdGlsZS0+cm93LCBhcmVhLT54LCBhcmVhLT55LCBhcmVhLT53LCBhcmVhLT5o
KTsKIAotICAgIGlmICghdC0+dmlzaWJsZSkKKyAgICBpZiAoIXRpbGUtPnZpc2libGUpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIGlmIChwcml2LT52aWV3LnRpbGUudyAhPSB0LT53IHx8IHByaXYt
PnZpZXcudGlsZS5oICE9IHQtPmgpCisgICAgaWYgKHByaXYtPnZpZXcudGlsZS53aWR0aCAhPSB0
aWxlLT53aWR0aCB8fCBwcml2LT52aWV3LnRpbGUuaGVpZ2h0ICE9IHRpbGUtPmhlaWdodCkKICAg
ICAgICAgcmV0dXJuOyAvLyB0b2RvOiByZW1vdmUgbWUgbGF0ZXIsIGRvbid0IGV2ZW4gZmxhZyBh
cyBkaXJ0eSEKIAogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHByaXYtPnJlbmRlci5j
Yik7Ci0gICAgaWYgKCFwcml2LT5yZW5kZXIuY2IocHJpdi0+cmVuZGVyLmRhdGEsIHQsIGFyZWEp
KQorICAgIGlmICghcHJpdi0+cmVuZGVyLmNiKHByaXYtPnJlbmRlci5kYXRhLCB0aWxlLCBhcmVh
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZXZhc19vYmplY3RfaW1hZ2VfZGF0YV91cGRhdGVf
YWRkKHQtPmltYWdlLCBhcmVhLT54LCBhcmVhLT55LCBhcmVhLT53LCBhcmVhLT5oKTsKKyAgICBl
dmFzX29iamVjdF9pbWFnZV9kYXRhX3VwZGF0ZV9hZGQodGlsZS0+aW1hZ2UsIGFyZWEtPngsIGFy
ZWEtPnksIGFyZWEtPncsIGFyZWEtPmgpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX21vZGVsX21hdHJpeF9jcmVhdGUoRXdrX1RpbGVkX0JhY2tpbmdf
U3RvcmVfRGF0YSAqcHJpdiwgRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMpCitzdGF0aWMgaW5s
aW5lIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX21vZGVsX21hdHJpeF9jcmVhdGUoRXdr
X1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdiwgRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0
dWMpCiB7CiAgICAgaWYgKHByaXYtPm1vZGVsLm1hdHJpeCkgewogICAgICAgICBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfdmlld19yb3dzX2FsbF9kZWwocHJpdik7CkBAIC02MzIsOSArNjMyLDkg
QEAgc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9tb2RlbF9tYXRy
aXhfY3JlYXRlKEV3a19UaWxlZF9CYWNraW4KICAgICBwcml2LT5tb2RlbC5tYXRyaXggPSBld2tf
dGlsZV9tYXRyaXhfbmV3KHR1YywgcHJpdi0+bW9kZWwuY3VyLmNvbHMsIHByaXYtPm1vZGVsLmN1
ci5yb3dzLCBwcml2LT5jc3BhY2UsIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9yZW5kZXIsIHBy
aXYpOwogfQogCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfbWVt
YmVyX2RlbChFdmFzX09iamVjdCAqbywgRXZhc19PYmplY3QgKm1lbWJlcikKK3N0YXRpYyB2b2lk
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9tZW1iZXJfZGVsKEV2YXNfT2JqZWN0KiBl
d2tUaWxlLCBFdmFzX09iamVjdCogbWVtYmVyKQogewotICAgIFBSSVZfREFUQV9HRVRfT1JfUkVU
VVJOKG8sIHByaXYpOworICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKGV3a1RpbGUsIHByaXYp
OwogICAgIGlmICghcHJpdi0+Y29udGVudHNfY2xpcHBlcikKICAgICAgICAgcmV0dXJuOwogICAg
IGV2YXNfb2JqZWN0X2NsaXBfdW5zZXQobWVtYmVyKTsKQEAgLTY0MiwxOCArNjQyLDE4IEBAIHN0
YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9tZW1iZXJfZGVsKEV2YXNf
T2JqZWN0ICpvLCBFdmFzX09iamVjCiAgICAgICAgIGV2YXNfb2JqZWN0X2hpZGUocHJpdi0+Y29u
dGVudHNfY2xpcHBlcik7CiB9CiAKLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV9zbWFydF9tZW1iZXJfYWRkKEV2YXNfT2JqZWN0ICpvLCBFdmFzX09iamVjdCAqbWVtYmVyKQor
c3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X21lbWJlcl9hZGQoRXZh
c19PYmplY3QqIGV3a1RpbGUsIEV2YXNfT2JqZWN0KiBtZW1iZXIpCiB7Ci0gICAgUFJJVl9EQVRB
X0dFVF9PUl9SRVRVUk4obywgcHJpdik7CisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4oZXdr
VGlsZSwgcHJpdik7CiAgICAgaWYgKCFwcml2LT5jb250ZW50c19jbGlwcGVyKQogICAgICAgICBy
ZXR1cm47CiAgICAgZXZhc19vYmplY3RfY2xpcF9zZXQobWVtYmVyLCBwcml2LT5jb250ZW50c19j
bGlwcGVyKTsKLSAgICBpZiAoZXZhc19vYmplY3RfdmlzaWJsZV9nZXQobykpCisgICAgaWYgKGV2
YXNfb2JqZWN0X3Zpc2libGVfZ2V0KGV3a1RpbGUpKQogICAgICAgICBldmFzX29iamVjdF9zaG93
KHByaXYtPmNvbnRlbnRzX2NsaXBwZXIpOwogfQogCiAjaWZkZWYgREVCVUdfTUVNX0xFQUtTCi1z
dGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfbWVtX2RiZyhFd2tfVGlsZWRfQmFj
a2luZ19TdG9yZV9EYXRhICpwcml2KQorc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX21lbV9kYmcoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdikKIHsKICAgICBz
dGF0aWMgaW50IHJ1biA9IDA7CiAKQEAgLTY3MCwxMyArNjcwLDEzIEBAIHN0YXRpYyB2b2lkIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9tZW1fZGJnKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0Rh
dGEgKnByaXYpCiAgICAgcHJpbnRmKCItLS0gRU5EIERFQlVHIFRJTEVEIEJBQ0tJTkcgU1RPUkUg
TUVNT1JZIFslZF0gLS1cblxuIiwgcnVuKTsKIH0KIAotc3RhdGljIEVpbmFfQm9vbCBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfc2lnX3Vzcih2b2lkICpkYXRhLCBpbnQgdHlwZSwgdm9pZCAqZXZl
bnQpCitzdGF0aWMgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zaWdfdXNyKHZv
aWQqIGRhdGEsIGludCB0eXBlLCB2b2lkKiBldmVudCkKIHsKLSAgICBFY29yZV9FdmVudF9TaWdu
YWxfVXNlciAqc2lnID0gKEVjb3JlX0V2ZW50X1NpZ25hbF9Vc2VyKilldmVudDsKLSAgICBFd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2ID0gKEV3a19UaWxlZF9CYWNraW5nX1N0b3Jl
X0RhdGEqKWRhdGE7CisgICAgRWNvcmVfRXZlbnRfU2lnbmFsX1VzZXIqIHNpZyA9IChFY29yZV9F
dmVudF9TaWduYWxfVXNlciopZXZlbnQ7CisgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0
YSogcHJpdiA9IChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKilkYXRhOwogCiAgICAgaWYg
KHNpZy0+bnVtYmVyID09IDIpIHsKLSAgICAgICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWM7
CisgICAgICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSogdHVjOwogICAgICAgICB0dWMgPSBld2tf
dGlsZV9tYXRyaXhfdW51c2VkX2NhY2hlX2dldChwcml2LT5tb2RlbC5tYXRyaXgpOwogICAgICAg
ICBld2tfdGlsZV91bnVzZWRfY2FjaGVfYXV0b19mbHVzaCh0dWMpOwogICAgIH0KQEAgLTY4Nywy
MCArNjg3LDIwIEBAIHN0YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3Np
Z191c3Iodm9pZCAqZGF0YSwgaW50IHR5cGUsIHZvaWQgKmV2CiB9CiAjZW5kaWYKIAotc3RhdGlj
IHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2FkZChFdmFzX09iamVjdCAqbykK
K3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9hZGQoRXZhc19PYmpl
Y3QqIGV3a1RpbGUpCiB7Ci0gICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdjsK
KyAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2OwogCi0gICAgREJHKCJvPSVw
Iiwgbyk7CisgICAgREJHKCJvPSVwIiwgZXdrVGlsZSk7CiAKICAgICBwcml2ID0gc3RhdGljX2Nh
c3Q8RXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSo+KGNhbGxvYygxLCBzaXplb2YoKnByaXYp
KSk7CiAgICAgaWYgKCFwcml2KQogICAgICAgICByZXR1cm47CiAKLSAgICBwcml2LT5zZWxmID0g
bzsKKyAgICBwcml2LT5zZWxmID0gZXdrVGlsZTsKICAgICBwcml2LT52aWV3LnRpbGUuem9vbSA9
IDEuMDsKLSAgICBwcml2LT52aWV3LnRpbGUudyA9IERFRkFVTFRfVElMRV9XOwotICAgIHByaXYt
PnZpZXcudGlsZS5oID0gREVGQVVMVF9USUxFX0g7CisgICAgcHJpdi0+dmlldy50aWxlLndpZHRo
ID0gREVGQVVMVF9USUxFX1c7CisgICAgcHJpdi0+dmlldy50aWxlLmhlaWdodCA9IERFRkFVTFRf
VElMRV9IOwogICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1ci54ID0gMDsKICAgICBwcml2LT52aWV3
Lm9mZnNldC5jdXIueSA9IDA7CiAgICAgcHJpdi0+dmlldy5vZmZzZXQub2xkLnggPSAwOwpAQCAt
NzE5LDE3ICs3MTksMTcgQEAgc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3Nt
YXJ0X2FkZChFdmFzX09iamVjdCAqbykKICAgICBwcml2LT5yZW5kZXIuc3VzcGVuZCA9IEVJTkFf
RkFMU0U7CiAgICAgcHJpdi0+Y3NwYWNlID0gRVZBU19DT0xPUlNQQUNFX0FSR0I4ODg4OyAvLyBU
T0RPOiBkZXRlY3QgaXQuCiAKLSAgICBldmFzX29iamVjdF9zbWFydF9kYXRhX3NldChvLCBwcml2
KTsKLSAgICBfcGFyZW50X3NjLmFkZChvKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9kYXRhX3Nl
dChld2tUaWxlLCBwcml2KTsKKyAgICBfcGFyZW50X3NjLmFkZChld2tUaWxlKTsKIAogICAgIHBy
aXYtPmNvbnRlbnRzX2NsaXBwZXIgPSBldmFzX29iamVjdF9yZWN0YW5nbGVfYWRkKAotICAgICAg
ICBldmFzX29iamVjdF9ldmFzX2dldChvKSk7CisgICAgICAgIGV2YXNfb2JqZWN0X2V2YXNfZ2V0
KGV3a1RpbGUpKTsKICAgICBldmFzX29iamVjdF9tb3ZlKHByaXYtPmNvbnRlbnRzX2NsaXBwZXIs
IDAsIDApOwogICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShwcml2LT5jb250ZW50c19jbGlwcGVyLAog
ICAgICAgICAgICAgICAgICAgICAgICBwcml2LT5tb2RlbC53aWR0aCwgcHJpdi0+bW9kZWwuaGVp
Z2h0KTsKICAgICBldmFzX29iamVjdF9jb2xvcl9zZXQocHJpdi0+Y29udGVudHNfY2xpcHBlciwg
MjU1LCAyNTUsIDI1NSwgMjU1KTsKICAgICBldmFzX29iamVjdF9zaG93KHByaXYtPmNvbnRlbnRz
X2NsaXBwZXIpOwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X21lbWJlcl9hZGQocHJpdi0+Y29udGVu
dHNfY2xpcHBlciwgbyk7CisgICAgZXZhc19vYmplY3Rfc21hcnRfbWVtYmVyX2FkZChwcml2LT5j
b250ZW50c19jbGlwcGVyLCBld2tUaWxlKTsKIAogICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV9tb2RlbF9tYXRyaXhfY3JlYXRlKHByaXYsIDApOwogICAgIGV2YXNfb2JqZWN0X21vdmUocHJp
di0+YmFzZS5jbGlwcGVyLCAwLCAwKTsKQEAgLTczOCwxNSArNzM4LDE1IEBAIHN0YXRpYyB2b2lk
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9hZGQoRXZhc19PYmplY3QgKm8pCiAKICNp
ZmRlZiBERUJVR19NRU1fTEVBS1MKICAgICBwcml2LT5zaWdfdXNyID0gZWNvcmVfZXZlbnRfaGFu
ZGxlcl9hZGQKLSAgICAgICAgKEVDT1JFX0VWRU5UX1NJR05BTF9VU0VSLCBfZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfc2lnX3VzciwgcHJpdik7CisgICAgICAgICAgICAgICAgICAgICAgICAoRUNP
UkVfRVZFTlRfU0lHTkFMX1VTRVIsIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zaWdfdXNyLCBw
cml2KTsKICNlbmRpZgogfQogCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
c21hcnRfZGVsKEV2YXNfT2JqZWN0ICpvKQorc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5n
X3N0b3JlX3NtYXJ0X2RlbChFdmFzX09iamVjdCogZXdrVGlsZSkKIHsKLSAgICBQUklWX0RBVEFf
R0VUX09SX1JFVFVSTihvLCBwcml2KTsKLSAgICBEQkcoIm89JXAiLCBvKTsKLSAgICBFd2tfVGls
ZV9VbnVzZWRfQ2FjaGUgKnR1YzsKKyAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihld2tUaWxl
LCBwcml2KTsKKyAgICBEQkcoIm89JXAiLCBld2tUaWxlKTsKKyAgICBFd2tfVGlsZV9VbnVzZWRf
Q2FjaGUqIHR1YzsKIAogICAgIHR1YyA9IGV3a190aWxlX21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0
KHByaXYtPm1vZGVsLm1hdHJpeCk7CiAgICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3VubG9ja19h
cmVhKHR1Yyk7CkBAIC03NjcsNyArNzY3LDcgQEAgc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNr
aW5nX3N0b3JlX3NtYXJ0X2RlbChFdmFzX09iamVjdCAqbykKICAgICBldmFzX29iamVjdF9zbWFy
dF9tZW1iZXJfZGVsKHByaXYtPmNvbnRlbnRzX2NsaXBwZXIpOwogICAgIGV2YXNfb2JqZWN0X2Rl
bChwcml2LT5jb250ZW50c19jbGlwcGVyKTsKIAotICAgIF9wYXJlbnRfc2MuZGVsKG8pOworICAg
IF9wYXJlbnRfc2MuZGVsKGV3a1RpbGUpOwogCiAjaWZkZWYgREVCVUdfTUVNX0xFQUtTCiAgICAg
cHJpbnRmKCJcbklNUE9SVEFOVDogVElMRUQgQkFDS0lORyBTVE9SRSBERUxFVEVEIChtYXkgYmUg
cmVhbCBsZWFrcylcbiIpOwpAQCAtNzc1LDExICs3NzUsMTEgQEAgc3RhdGljIHZvaWQgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2RlbChFdmFzX09iamVjdCAqbykKICNlbmRpZgogfQog
Ci1zdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfbW92ZShFdmFzX09i
amVjdCAqbywgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHkpCitzdGF0aWMgdm9pZCBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfbW92ZShFdmFzX09iamVjdCogZXdrVGlsZSwgRXZhc19D
b29yZCB4LCBFdmFzX0Nvb3JkIHkpCiB7Ci0gICAgREJHKCJvPSVwLCBuZXcgcG9zOiAlZHglZCIs
IG8sIHgsIHkpOworICAgIERCRygibz0lcCwgbmV3IHBvczogJWR4JWQiLCBld2tUaWxlLCB4LCB5
KTsKIAotICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYpOworICAgIFBSSVZfREFU
QV9HRVRfT1JfUkVUVVJOKGV3a1RpbGUsIHByaXYpOwogCiAgICAgaWYgKHByaXYtPmNoYW5nZWQu
cG9zKQogICAgICAgICByZXR1cm47CkBAIC03OTEsMjkgKzc5MSwyOSBAQCBzdGF0aWMgdm9pZCBf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfbW92ZShFdmFzX09iamVjdCAqbywgRXZhc19D
b29yZCB4LCBFdgogICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9jaGFuZ2VkKHByaXYpOwog
fQogCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfcmVzaXplKEV2
YXNfT2JqZWN0ICpvLCBFdmFzX0Nvb3JkIHcsIEV2YXNfQ29vcmQgaCkKK3N0YXRpYyB2b2lkIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9yZXNpemUoRXZhc19PYmplY3QqIGV3a1RpbGUs
IEV2YXNfQ29vcmQgd2lkdGgsIEV2YXNfQ29vcmQgaGVpZ2h0KQogewotICAgIERCRygibz0lcCwg
bmV3IHNpemU6ICVkeCVkIiwgbywgdywgaCk7CisgICAgREJHKCJvPSVwLCBuZXcgc2l6ZTogJWR4
JWQiLCBld2tUaWxlLCB3aWR0aCwgaGVpZ2h0KTsKIAotICAgIFBSSVZfREFUQV9HRVRfT1JfUkVU
VVJOKG8sIHByaXYpOworICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKGV3a1RpbGUsIHByaXYp
OwogCiAgICAgaWYgKHByaXYtPmNoYW5nZWQuc2l6ZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
aWYgKHByaXYtPnZpZXcudyA9PSB3ICYmIHByaXYtPnZpZXcuaCA9PSBoKQorICAgIGlmIChwcml2
LT52aWV3LndpZHRoID09IHdpZHRoICYmIHByaXYtPnZpZXcuaGVpZ2h0ID09IGhlaWdodCkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgcHJpdi0+Y2hhbmdlZC5zaXplID0gRUlOQV9UUlVFOwogICAg
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9jaGFuZ2VkKHByaXYpOwogfQogCi1zdGF0aWMgdm9p
ZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcmVjYWxjX3JlbmRlcmVycyhFd2tfVGlsZWRfQmFj
a2luZ19TdG9yZV9EYXRhICpwcml2LCBFdmFzX0Nvb3JkIHcsIEV2YXNfQ29vcmQgaCwgRXZhc19D
b29yZCB0dywgRXZhc19Db29yZCB0aCkKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9yZWNhbGNfcmVuZGVyZXJzKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYs
IEV2YXNfQ29vcmQgd2lkdGgsIEV2YXNfQ29vcmQgaGVpZ2h0LCBFdmFzX0Nvb3JkIHR3LCBFdmFz
X0Nvb3JkIHRoKQogewogICAgIGxvbmcgY29scywgcm93cywgb2xkX3Jvd3MsIG9sZF9jb2xzOwot
ICAgIElORigibz0lcCwgbmV3IHNpemU6ICVkeCVkIiwgcHJpdi0+c2VsZiwgdywgaCk7CisgICAg
SU5GKCJvPSVwLCBuZXcgc2l6ZTogJWR4JWQiLCBwcml2LT5zZWxmLCB3aWR0aCwgaGVpZ2h0KTsK
IAotICAgIGNvbHMgPSAxICsgKGludCljZWlsKChmbG9hdCl3IC8gKGZsb2F0KXR3KTsKLSAgICBy
b3dzID0gMSArIChpbnQpY2VpbCgoZmxvYXQpaCAvIChmbG9hdCl0aCk7CisgICAgY29scyA9IDEg
KyBzdGF0aWNfY2FzdDxpbnQ+Y2VpbChzdGF0aWNfY2FzdDxmbG9hdD53aWR0aCAvIHN0YXRpY19j
YXN0PGZsb2F0PnR3KTsKKyAgICByb3dzID0gMSArIHN0YXRpY19jYXN0PGludD5jZWlsKHN0YXRp
Y19jYXN0PGZsb2F0PmhlaWdodCAvIHN0YXRpY19jYXN0PGZsb2F0PnRoKTsKIAogICAgIElORigi
bz0lcCBuZXcgZ3JpZCBzaXplIGNvbHM6ICVsZCwgcm93czogJWxkLCB3YXMgJWxkLCAlbGQiLAog
ICAgICAgICBwcml2LT5zZWxmLCBjb2xzLCByb3dzLCBwcml2LT52aWV3LmNvbHMsIHByaXYtPnZp
ZXcucm93cyk7CkBAIC04MjUsNyArODI1LDcgQEAgc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNr
aW5nX3N0b3JlX3JlY2FsY19yZW5kZXJlcnMoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGEKICAg
ICBvbGRfcm93cyA9IHByaXYtPnZpZXcucm93czsKIAogICAgIGlmIChyb3dzIDwgb2xkX3Jvd3Mp
IHsKLSAgICAgICAgRWluYV9Jbmxpc3QgKipzdGFydCwgKiplbmQ7CisgICAgICAgIEVpbmFfSW5s
aXN0Kiogc3RhcnQsICoqIGVuZDsKICAgICAgICAgc3RhcnQgPSBwcml2LT52aWV3Lml0ZW1zICsg
cm93czsKICAgICAgICAgZW5kID0gcHJpdi0+dmlldy5pdGVtcyArIG9sZF9yb3dzOwogICAgICAg
ICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19yb3dzX3JhbmdlX2RlbChwcml2LCBzdGFy
dCwgZW5kKTsKQEAgLTgzOSwxNCArODM5LDE0IEBAIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9yZWNhbGNfcmVuZGVyZXJzKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhCiAg
ICAgcHJpdi0+dmlldy5yb3dzID0gcm93czsKICAgICBwcml2LT52aWV3LmNvbHMgPSBjb2xzOwog
ICAgIGlmIChyb3dzID4gb2xkX3Jvd3MpIHsKLSAgICAgICAgRWluYV9Jbmxpc3QgKipzdGFydCwg
KiplbmQ7CisgICAgICAgIEVpbmFfSW5saXN0Kiogc3RhcnQsICoqIGVuZDsKICAgICAgICAgc3Rh
cnQgPSBwcml2LT52aWV3Lml0ZW1zICsgb2xkX3Jvd3M7CiAgICAgICAgIGVuZCA9IHByaXYtPnZp
ZXcuaXRlbXMgKyByb3dzOwogICAgICAgICBmb3IgKDsgc3RhcnQgPCBlbmQ7IHN0YXJ0KyspIHsK
ICAgICAgICAgICAgIEVpbmFfQm9vbCByOwogICAgICAgICAgICAgKnN0YXJ0ID0gMDsKICAgICAg
ICAgICAgIHIgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19jb2xzX2VuZF9hZGQKLSAg
ICAgICAgICAgICAgICAocHJpdiwgc3RhcnQsIDAsIGNvbHMpOworICAgICAgICAgICAgICAgICAg
ICAocHJpdiwgc3RhcnQsIDAsIGNvbHMpOwogICAgICAgICAgICAgaWYgKCFyKSB7CiAgICAgICAg
ICAgICAgICAgQ1JJVElDQUwoImZhaWxlZCB0byBhbGxvY2F0ZSAlbGQgY29sdW1ucyIsIGNvbHMp
OwogICAgICAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3Jvd3NfcmFu
Z2VfZGVsCkBAIC04NTgsNyArODU4LDcgQEAgc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5n
X3N0b3JlX3JlY2FsY19yZW5kZXJlcnMoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGEKICAgICB9
CiAKICAgICBpZiAoY29scyAhPSBvbGRfY29scykgewotICAgICAgICBFaW5hX0lubGlzdCAqKnN0
YXJ0LCAqKmVuZDsKKyAgICAgICAgRWluYV9Jbmxpc3QqKiBzdGFydCwgKiogZW5kOwogICAgICAg
ICBpbnQgdG9kbyA9IGNvbHMgLSBvbGRfY29sczsKICAgICAgICAgc3RhcnQgPSBwcml2LT52aWV3
Lml0ZW1zOwogICAgICAgICBlbmQgPSBzdGFydCArIHN0ZDo6bWluKG9sZF9yb3dzLCByb3dzKTsK
QEAgLTg2Niw3ICs4NjYsNyBAQCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
cmVjYWxjX3JlbmRlcmVycyhFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYQogICAgICAgICAgICAg
Zm9yICg7IHN0YXJ0IDwgZW5kOyBzdGFydCsrKSB7CiAgICAgICAgICAgICAgICAgRWluYV9Cb29s
IHI7CiAgICAgICAgICAgICAgICAgciA9IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X2Nv
bHNfZW5kX2FkZAotICAgICAgICAgICAgICAgICAgICAocHJpdiwgc3RhcnQsIG9sZF9jb2xzLCB0
b2RvKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIChwcml2LCBzdGFydCwgb2xkX2NvbHMsIHRv
ZG8pOwogICAgICAgICAgICAgICAgIGlmICghcikgewogICAgICAgICAgICAgICAgICAgICBDUklU
SUNBTCgiZmFpbGVkIHRvIGFsbG9jYXRlICVkIGNvbHVtbnMhIiwgdG9kbyk7CiAKQEAgLTg5MSwy
MSArODkxLDIxIEBAIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9yZWNhbGNf
cmVuZGVyZXJzKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhCiAgICAgX2V3a190aWxlZF9iYWNr
aW5nX3N0b3JlX2ZpbGxfcmVuZGVyZXJzKHByaXYpOwogfQogCi1zdGF0aWMgdm9pZCBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfY2FsY3VsYXRlX3NpemUoRXdrX1RpbGVkX0JhY2tpbmdf
U3RvcmVfRGF0YSAqcHJpdiwgRXZhc19Db29yZCB3LCBFdmFzX0Nvb3JkIGgpCitzdGF0aWMgdm9p
ZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfY2FsY3VsYXRlX3NpemUoRXdrX1RpbGVk
X0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdiwgRXZhc19Db29yZCB3aWR0aCwgRXZhc19Db29yZCBo
ZWlnaHQpCiB7Ci0gICAgZXZhc19vYmplY3RfcmVzaXplKHByaXYtPmJhc2UuY2xpcHBlciwgdywg
aCk7CisgICAgZXZhc19vYmplY3RfcmVzaXplKHByaXYtPmJhc2UuY2xpcHBlciwgd2lkdGgsIGhl
aWdodCk7CiAKLSAgICBwcml2LT52aWV3LncgPSB3OwotICAgIHByaXYtPnZpZXcuaCA9IGg7Cisg
ICAgcHJpdi0+dmlldy53aWR0aCA9IHdpZHRoOworICAgIHByaXYtPnZpZXcuaGVpZ2h0ID0gaGVp
Z2h0OwogCiAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3JlY2FsY19yZW5kZXJlcnMoCi0g
ICAgICAgIHByaXYsIHcsIGgsIHByaXYtPnZpZXcudGlsZS53LCBwcml2LT52aWV3LnRpbGUuaCk7
CisgICAgICAgIHByaXYsIHdpZHRoLCBoZWlnaHQsIHByaXYtPnZpZXcudGlsZS53aWR0aCwgcHJp
di0+dmlldy50aWxlLmhlaWdodCk7CiB9CiAKIC8vIFRPRE86IHJlbW92ZSBtZSBsYXRlci4KLXN0
YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19kYmcoY29uc3Qg
RXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdikKK3N0YXRpYyBpbmxpbmUgdm9pZCBf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19kYmcoY29uc3QgRXdrX1RpbGVkX0JhY2tpbmdf
U3RvcmVfRGF0YSogcHJpdikKIHsKLSAgICBFaW5hX0lubGlzdCAqKnN0YXJ0LCAqKmVuZDsKKyAg
ICBFaW5hX0lubGlzdCoqIHN0YXJ0LCAqKiBlbmQ7CiAgICAgcHJpbnRmKCJ0aWxlcz0lMmxkLCUy
bGQgIG1vZGVsPSUybGQsJTJsZCBbJWR4JWRdIGJhc2U9JSszbGQsJSs0bGQgb2Zmc2V0PSUrNGQs
JSs0ZCBvbGQ9JSs0ZCwlKzRkIGJhc2U9JSszZCwlKzNkXG4iLAogICAgICAgICAgICBwcml2LT52
aWV3LmNvbHMsIHByaXYtPnZpZXcucm93cywKICAgICAgICAgICAgcHJpdi0+bW9kZWwuY3VyLmNv
bHMsIHByaXYtPm1vZGVsLmN1ci5yb3dzLApAQCAtOTE4LDcgKzkxOCw3IEBAIHN0YXRpYyBpbmxp
bmUgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19kYmcoY29uc3QgRXdrX1RpbGVk
X0JhY2tpbmdfU3RvCiAgICAgc3RhcnQgPSBwcml2LT52aWV3Lml0ZW1zOwogICAgIGVuZCA9IHBy
aXYtPnZpZXcuaXRlbXMgKyBwcml2LT52aWV3LnJvd3M7CiAgICAgZm9yICg7IHN0YXJ0IDwgZW5k
OyBzdGFydCsrKSB7Ci0gICAgICAgIGNvbnN0IEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0g
Kml0OworICAgICAgICBjb25zdCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKiBpdDsKIAog
ICAgICAgICBFSU5BX0lOTElTVF9GT1JFQUNIKCpzdGFydCwgaXQpIHsKICAgICAgICAgICAgIHBy
aW50ZigiICUrNGQsJSs0ZCAiLCBpdC0+Z2VvbWV0cnkueCwgaXQtPmdlb21ldHJ5LnkpOwpAQCAt
OTQ2LDIyICs5NDYsMjIgQEAgc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV92aWV3X2RiZyhjb25zdCBFd2tfVGlsZWRfQmFja2luZ19TdG8KICAqCiAgKiBAcGFyYW0g
Y291bnQgdGhlIG51bWJlciBvZiB0aW1lcyB0byByZXBlYXQgdGhlIHByb2Nlc3MuCiAgKi8KLXN0
YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3dyYXBfdXAoRXdrX1RpbGVk
X0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHksIHVu
c2lnbmVkIGludCBjb3VudCkKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92
aWV3X3dyYXBfdXAoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdiwgRXZhc19Db29y
ZCB4LCBFdmFzX0Nvb3JkIHksIHVuc2lnbmVkIGludCBjb3VudCkKIHsKICAgICB1bnNpZ25lZCBp
bnQgbGFzdF9yb3cgPSBwcml2LT52aWV3LnJvd3MgLSAxOwotICAgIEV2YXNfQ29vcmQgdHcgPSBw
cml2LT52aWV3LnRpbGUudzsKLSAgICBFdmFzX0Nvb3JkIHRoID0gcHJpdi0+dmlldy50aWxlLmg7
CisgICAgRXZhc19Db29yZCB0dyA9IHByaXYtPnZpZXcudGlsZS53aWR0aDsKKyAgICBFdmFzX0Nv
b3JkIHRoID0gcHJpdi0+dmlldy50aWxlLmhlaWdodDsKICAgICBFdmFzX0Nvb3JkIG9mZl95ID0g
cHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ICsgY291bnQgKiB0aDsKICAgICBFdmFzX0Nvb3JkIG95
ID0geSArIChsYXN0X3JvdyAtIGNvdW50ICsgMSkgKiB0aCArIG9mZl95OwotICAgIEVpbmFfSW5s
aXN0ICoqaXRyX3N0YXJ0LCAqKml0cl9lbmQ7CisgICAgRWluYV9Jbmxpc3QqKiBpdHJfc3RhcnQs
ICoqIGl0cl9lbmQ7CiAKICAgICBpdHJfc3RhcnQgPSBwcml2LT52aWV3Lml0ZW1zOwogICAgIGl0
cl9lbmQgPSBpdHJfc3RhcnQgKyBsYXN0X3JvdzsKIAogICAgIGZvciAoOyBjb3VudCA+IDA7IGNv
dW50LS0pIHsKLSAgICAgICAgRWluYV9Jbmxpc3QgKippdHI7Ci0gICAgICAgIEVpbmFfSW5saXN0
ICp0bXAgPSAqaXRyX3N0YXJ0OwotICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVt
ICppdDsKKyAgICAgICAgRWluYV9Jbmxpc3QqKiBpdHI7CisgICAgICAgIEVpbmFfSW5saXN0KiB0
bXAgPSAqaXRyX3N0YXJ0OworICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKiBp
dDsKICAgICAgICAgRXZhc19Db29yZCBveCA9IHggKyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLng7
CiAgICAgICAgIGludCBjID0gMDsKIApAQCAtOTk0LDIxICs5OTQsMjEgQEAgc3RhdGljIHZvaWQg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfd3JhcF91cChFd2tfVGlsZWRfQmFja2luZ19T
dG9yZV9EYXRhICoKICAqCiAgKiBAcGFyYW0gY291bnQgdGhlIG51bWJlciBvZiB0aW1lcyB0byBy
ZXBlYXQgdGhlIHByb2Nlc3MuCiAgKi8KLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV92aWV3X3dyYXBfZG93bihFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBF
dmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwgdW5zaWduZWQgaW50IGNvdW50KQorc3RhdGljIHZv
aWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfd3JhcF9kb3duKEV3a19UaWxlZF9CYWNr
aW5nX1N0b3JlX0RhdGEqIHByaXYsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5LCB1bnNpZ25l
ZCBpbnQgY291bnQpCiB7Ci0gICAgRXZhc19Db29yZCB0dyA9IHByaXYtPnZpZXcudGlsZS53Owot
ICAgIEV2YXNfQ29vcmQgdGggPSBwcml2LT52aWV3LnRpbGUuaDsKKyAgICBFdmFzX0Nvb3JkIHR3
ID0gcHJpdi0+dmlldy50aWxlLndpZHRoOworICAgIEV2YXNfQ29vcmQgdGggPSBwcml2LT52aWV3
LnRpbGUuaGVpZ2h0OwogICAgIEV2YXNfQ29vcmQgb2ZmX3kgPSBwcml2LT52aWV3Lm9mZnNldC5i
YXNlLnkgLSBjb3VudCAqIHRoOwogICAgIEV2YXNfQ29vcmQgb3kgPSB5ICsgb2ZmX3kgKyAoY291
bnQgLSAxKSAqIHRoOwotICAgIEVpbmFfSW5saXN0ICoqaXRyX3N0YXJ0LCAqKml0cl9lbmQ7Cisg
ICAgRWluYV9Jbmxpc3QqKiBpdHJfc3RhcnQsICoqIGl0cl9lbmQ7CiAKICAgICBpdHJfc3RhcnQg
PSBwcml2LT52aWV3Lml0ZW1zICsgcHJpdi0+dmlldy5yb3dzIC0gMTsKICAgICBpdHJfZW5kID0g
cHJpdi0+dmlldy5pdGVtczsKIAogICAgIGZvciAoOyBjb3VudCA+IDA7IGNvdW50LS0pIHsKLSAg
ICAgICAgRWluYV9Jbmxpc3QgKippdHI7Ci0gICAgICAgIEVpbmFfSW5saXN0ICp0bXAgPSAqaXRy
X3N0YXJ0OwotICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdDsKKyAgICAg
ICAgRWluYV9Jbmxpc3QqKiBpdHI7CisgICAgICAgIEVpbmFfSW5saXN0KiB0bXAgPSAqaXRyX3N0
YXJ0OworICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKiBpdDsKICAgICAgICAg
RXZhc19Db29yZCBveCA9IHggKyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLng7CiAgICAgICAgIGlu
dCBjID0gMDsKIApAQCAtMTA0MSwxNSArMTA0MSwxNSBAQCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfdmlld193cmFwX2Rvd24oRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0
YQogICoKICAqIEBwYXJhbSBjb3VudCB0aGUgbnVtYmVyIG9mIHRpbWVzIHRvIHJlcGVhdCB0aGUg
cHJvY2Vzcy4KICAqLwotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdf
d3JhcF9sZWZ0KEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIEV2YXNfQ29vcmQg
eCwgRXZhc19Db29yZCB5LCB1bnNpZ25lZCBpbnQgY291bnQpCitzdGF0aWMgdm9pZCBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfdmlld193cmFwX2xlZnQoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVf
RGF0YSogcHJpdiwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHksIHVuc2lnbmVkIGludCBjb3Vu
dCkKIHsKICAgICB1bnNpZ25lZCBpbnQgciwgbGFzdF9jb2wgPSBwcml2LT52aWV3LmNvbHMgLSAx
OwotICAgIEV2YXNfQ29vcmQgdHcgPSBwcml2LT52aWV3LnRpbGUudzsKLSAgICBFdmFzX0Nvb3Jk
IHRoID0gcHJpdi0+dmlldy50aWxlLmg7CisgICAgRXZhc19Db29yZCB0dyA9IHByaXYtPnZpZXcu
dGlsZS53aWR0aDsKKyAgICBFdmFzX0Nvb3JkIHRoID0gcHJpdi0+dmlldy50aWxlLmhlaWdodDsK
ICAgICBFdmFzX0Nvb3JkIG9mZl94ID0gcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54ICsgY291bnQg
KiB0dzsKICAgICBFdmFzX0Nvb3JkIG95ID0geSArIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueTsK
LSAgICBFaW5hX0lubGlzdCAqKml0cjsKLSAgICBFaW5hX0lubGlzdCAqKml0cl9lbmQ7CisgICAg
RWluYV9Jbmxpc3QqKiBpdHI7CisgICAgRWluYV9Jbmxpc3QqKiBpdHJfZW5kOwogCiAgICAgaXRy
ID0gcHJpdi0+dmlldy5pdGVtczsKICAgICBpdHJfZW5kID0gaXRyICsgcHJpdi0+dmlldy5yb3dz
OwpAQCAtMTA2Miw3ICsxMDYyLDcgQEAgc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX3ZpZXdfd3JhcF9sZWZ0KEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEKICAgICAgICAg
dW5zaWduZWQgaW50IGksIGMgPSBsYXN0X2NvbCAtIGNvdW50ICsgMTsKIAogICAgICAgICBmb3Ig
KGkgPSAwOyBpIDwgY291bnQ7IGkrKywgYysrLCBveCArPSB0dykgewotICAgICAgICAgICAgRXdr
X1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQ7CisgICAgICAgICAgICBFd2tfVGlsZWRfQmFj
a2luZ19TdG9yZV9JdGVtKiBpdDsKICAgICAgICAgICAgIGl0ID0gRUlOQV9JTkxJU1RfQ09OVEFJ
TkVSX0dFVCgqaXRyLCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKTsKICAgICAgICAgICAg
ICppdHIgPSBlaW5hX2lubGlzdF9kZW1vdGUoKml0ciwgKml0cik7CiAKQEAgLTEwODgsMTQgKzEw
ODgsMTQgQEAgc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfd3JhcF9s
ZWZ0KEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEKICAqCiAgKiBAcGFyYW0gY291bnQgdGhl
IG51bWJlciBvZiB0aW1lcyB0byByZXBlYXQgdGhlIHByb2Nlc3MuCiAgKi8KLXN0YXRpYyB2b2lk
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3dyYXBfcmlnaHQoRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfRGF0YSAqcHJpdiwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHksIHVuc2lnbmVk
IGludCBjb3VudCkKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3dy
YXBfcmlnaHQoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdiwgRXZhc19Db29yZCB4
LCBFdmFzX0Nvb3JkIHksIHVuc2lnbmVkIGludCBjb3VudCkKIHsKICAgICB1bnNpZ25lZCBpbnQg
cjsKLSAgICBFdmFzX0Nvb3JkIHR3ID0gcHJpdi0+dmlldy50aWxlLnc7Ci0gICAgRXZhc19Db29y
ZCB0aCA9IHByaXYtPnZpZXcudGlsZS5oOworICAgIEV2YXNfQ29vcmQgdHcgPSBwcml2LT52aWV3
LnRpbGUud2lkdGg7CisgICAgRXZhc19Db29yZCB0aCA9IHByaXYtPnZpZXcudGlsZS5oZWlnaHQ7
CiAgICAgRXZhc19Db29yZCBvZmZfeCA9IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCAtIGNvdW50
ICogdHc7CiAgICAgRXZhc19Db29yZCBveSA9IHkgKyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnk7
Ci0gICAgRWluYV9Jbmxpc3QgKippdHIsICoqaXRyX2VuZDsKKyAgICBFaW5hX0lubGlzdCoqIGl0
ciwgKiogaXRyX2VuZDsKIAogICAgIGl0ciA9IHByaXYtPnZpZXcuaXRlbXM7CiAgICAgaXRyX2Vu
ZCA9IGl0ciArIHByaXYtPnZpZXcucm93czsKQEAgLTExMDgsNyArMTEwOCw3IEBAIHN0YXRpYyB2
b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3dyYXBfcmlnaHQoRXdrX1RpbGVkX0Jh
Y2tpbmdfU3RvcmVfRGF0CiAgICAgICAgIHVuc2lnbmVkIGludCBpLCBjID0gY291bnQgLSAxOwog
CiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrLCBjLS0sIG94IC09IHR3KSB7Ci0g
ICAgICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdDsKKyAgICAgICAgICAg
IEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0qIGl0OwogICAgICAgICAgICAgaXQgPSBFSU5B
X0lOTElTVF9DT05UQUlORVJfR0VUKCgqaXRyKS0+bGFzdCwgRXdrX1RpbGVkX0JhY2tpbmdfU3Rv
cmVfSXRlbSk7CiAgICAgICAgICAgICAqaXRyID0gZWluYV9pbmxpc3RfcHJvbW90ZSgqaXRyLCAo
Kml0ciktPmxhc3QpOwogCkBAIC0xMTIxLDE2ICsxMTIxLDE2IEBAIHN0YXRpYyB2b2lkIF9ld2tf
dGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3dyYXBfcmlnaHQoRXdrX1RpbGVkX0JhY2tpbmdfU3Rv
cmVfRGF0CiAgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54ID0gb2ZmX3g7CiB9CiAKLXN0YXRp
YyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3JlZmlsbChFd2tfVGlsZWRfQmFj
a2luZ19TdG9yZV9EYXRhICpwcml2LCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwgaW50IHN0
ZXBfeCwgaW50IHN0ZXBfeSkKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92
aWV3X3JlZmlsbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2LCBFdmFzX0Nvb3Jk
IHgsIEV2YXNfQ29vcmQgeSwgaW50IHN0ZXBfeCwgaW50IHN0ZXBfeSkKIHsKLSAgICBFaW5hX0lu
bGlzdCAqKml0ciwgKippdHJfZW5kOworICAgIEVpbmFfSW5saXN0KiogaXRyLCAqKiBpdHJfZW5k
OwogICAgIEV2YXNfQ29vcmQgYmFzZV9veCwgb3ksIHR3LCB0aDsKICAgICB1bnNpZ25lZCBpbnQg
cjsKIAogICAgIGV2YXNfb2JqZWN0X21vdmUocHJpdi0+YmFzZS5jbGlwcGVyLCB4LCB5KTsKIAot
ICAgIHR3ID0gcHJpdi0+dmlldy50aWxlLnc7Ci0gICAgdGggPSBwcml2LT52aWV3LnRpbGUuaDsK
KyAgICB0dyA9IHByaXYtPnZpZXcudGlsZS53aWR0aDsKKyAgICB0aCA9IHByaXYtPnZpZXcudGls
ZS5oZWlnaHQ7CiAKICAgICBiYXNlX294ID0geCArIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueDsK
ICAgICBveSA9IHkgKyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnk7CkBAIC0xMTQzLDcgKzExNDMs
NyBAQCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19yZWZpbGwoRXdr
X1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcAogICAgIHByaXYtPm1vZGVsLmJhc2Uucm93IC09
IHN0ZXBfeTsKIAogICAgIGZvciAoOyBpdHIgPCBpdHJfZW5kOyBpdHIrKywgcisrKSB7Ci0gICAg
ICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0OworICAgICAgICBFd2tfVGlsZWRf
QmFja2luZ19TdG9yZV9JdGVtKiBpdDsKICAgICAgICAgRXZhc19Db29yZCBveCA9IGJhc2Vfb3g7
CiAgICAgICAgIHVuc2lnbmVkIGludCBjID0gMDsKICAgICAgICAgRUlOQV9JTkxJU1RfRk9SRUFD
SCgqaXRyLCBpdCkgewpAQCAtMTE1NiwxNSArMTE1NiwxNSBAQCBzdGF0aWMgdm9pZCBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfdmlld19yZWZpbGwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0
YSAqcAogICAgIH0KIH0KIAotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3Zp
ZXdfcG9zX2FwcGx5KEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIEV2YXNfQ29v
cmQgeCwgRXZhc19Db29yZCB5KQorc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3ZpZXdfcG9zX2FwcGx5KEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYsIEV2YXNf
Q29vcmQgeCwgRXZhc19Db29yZCB5KQogewotICAgIEVpbmFfSW5saXN0ICoqaXRyLCAqKml0cl9l
bmQ7CisgICAgRWluYV9Jbmxpc3QqKiBpdHIsICoqIGl0cl9lbmQ7CiAgICAgRXZhc19Db29yZCBi
YXNlX294LCBveSwgdHcsIHRoOwogCiAgICAgZXZhc19vYmplY3RfbW92ZShwcml2LT5iYXNlLmNs
aXBwZXIsIHgsIHkpOwogCi0gICAgdHcgPSBwcml2LT52aWV3LnRpbGUudzsKLSAgICB0aCA9IHBy
aXYtPnZpZXcudGlsZS5oOworICAgIHR3ID0gcHJpdi0+dmlldy50aWxlLndpZHRoOworICAgIHRo
ID0gcHJpdi0+dmlldy50aWxlLmhlaWdodDsKIAogICAgIGJhc2Vfb3ggPSB4ICsgcHJpdi0+dmll
dy5vZmZzZXQuYmFzZS54OwogICAgIG95ID0geSArIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueTsK
QEAgLTExNzIsNyArMTE3Miw3IEBAIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV92aWV3X3Bvc19hcHBseShFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhCiAgICAgaXRyID0g
cHJpdi0+dmlldy5pdGVtczsKICAgICBpdHJfZW5kID0gaXRyICsgcHJpdi0+dmlldy5yb3dzOwog
ICAgIGZvciAoOyBpdHIgPCBpdHJfZW5kOyBpdHIrKykgewotICAgICAgICBFd2tfVGlsZWRfQmFj
a2luZ19TdG9yZV9JdGVtICppdDsKKyAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRl
bSogaXQ7CiAgICAgICAgIEV2YXNfQ29vcmQgb3ggPSBiYXNlX294OwogICAgICAgICBFSU5BX0lO
TElTVF9GT1JFQUNIKCppdHIsIGl0KSB7CiAgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfaXRlbV9tb3ZlKGl0LCBveCwgb3kpOwpAQCAtMTE4Miw3ICsxMTgyLDcgQEAgc3RhdGlj
IHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcG9zX2FwcGx5KEV3a19UaWxlZF9C
YWNraW5nX1N0b3JlX0RhdGEKICAgICB9CiB9CiAKLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9zbWFydF9jYWxjdWxhdGVfb2Zmc2V0X2ZvcmNlKEV3a19UaWxlZF9CYWNraW5n
X1N0b3JlX0RhdGEgKnByaXYpCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
c21hcnRfY2FsY3VsYXRlX29mZnNldF9mb3JjZShFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRh
KiBwcml2KQogewogICAgIEV2YXNfQ29vcmQgZHggPSBwcml2LT52aWV3Lm9mZnNldC5jdXIueCAt
IHByaXYtPnZpZXcub2Zmc2V0Lm9sZC54OwogICAgIEV2YXNfQ29vcmQgZHkgPSBwcml2LT52aWV3
Lm9mZnNldC5jdXIueSAtIHByaXYtPnZpZXcub2Zmc2V0Lm9sZC55OwpAQCAtMTE5Miw4ICsxMTky
LDggQEAgc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0
ZV9vZmZzZXRfZm9yY2UoRXdrX1RpbGVkX0JhY2sKICAgICBJTkYoIm89JXAsIG9mZnNldDogJSs0
ZCwgJSs0ZCAoJSs0ZCwgJSs0ZCkiLAogICAgICAgICBwcml2LT5zZWxmLCBkeCwgZHksIHByaXYt
PnZpZXcub2Zmc2V0LmN1ci54LCBwcml2LT52aWV3Lm9mZnNldC5jdXIueSk7CiAKLSAgICB0dyA9
IHByaXYtPnZpZXcudGlsZS53OwotICAgIHRoID0gcHJpdi0+dmlldy50aWxlLmg7CisgICAgdHcg
PSBwcml2LT52aWV3LnRpbGUud2lkdGg7CisgICAgdGggPSBwcml2LT52aWV3LnRpbGUuaGVpZ2h0
OwogCiAgICAgbG9uZyBuZXdfY29sID0gLXByaXYtPnZpZXcub2Zmc2V0LmN1ci54IC8gdHc7CiAg
ICAgc3RlcF94ID0gcHJpdi0+bW9kZWwuYmFzZS5jb2wgLSBuZXdfY29sOwpAQCAtMTIxNCw3ICsx
MjE0LDcgQEAgc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1
bGF0ZV9vZmZzZXRfZm9yY2UoRXdrX1RpbGVkX0JhY2sKICAgICAgICAgKHByaXYsIHByaXYtPnZp
ZXcueCwgcHJpdi0+dmlldy55LCBzdGVwX3gsIHN0ZXBfeSk7CiB9CiAKLXN0YXRpYyB2b2lkIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9jYWxjdWxhdGVfb2Zmc2V0KEV3a19UaWxlZF9C
YWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5KQorc3Rh
dGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZV9vZmZzZXQo
RXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdiwgRXZhc19Db29yZCB4LCBFdmFzX0Nv
b3JkIHkpCiB7CiAgICAgRXZhc19Db29yZCBkeCA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci54IC0g
cHJpdi0+dmlldy5vZmZzZXQub2xkLng7CiAgICAgRXZhc19Db29yZCBkeSA9IHByaXYtPnZpZXcu
b2Zmc2V0LmN1ci55IC0gcHJpdi0+dmlldy5vZmZzZXQub2xkLnk7CkBAIC0xMjI3LDggKzEyMjcs
OCBAQCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfY2FsY3VsYXRl
X29mZnNldChFd2tfVGlsZWRfQmFja2luZ19TdAogICAgIGlmICghZHggJiYgIWR5KQogICAgICAg
ICByZXR1cm47CiAKLSAgICB0dyA9IHByaXYtPnZpZXcudGlsZS53OwotICAgIHRoID0gcHJpdi0+
dmlldy50aWxlLmg7CisgICAgdHcgPSBwcml2LT52aWV3LnRpbGUud2lkdGg7CisgICAgdGggPSBw
cml2LT52aWV3LnRpbGUuaGVpZ2h0OwogCiAgICAgbG9uZyBuZXdfY29sID0gLXByaXYtPnZpZXcu
b2Zmc2V0LmN1ci54IC8gdHc7CiAgICAgc3RlcF94ID0gcHJpdi0+bW9kZWwuYmFzZS5jb2wgLSBu
ZXdfY29sOwpAQCAtMTI3MSw3ICsxMjcxLDcgQEAgc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNr
aW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZV9vZmZzZXQoRXdrX1RpbGVkX0JhY2tpbmdfU3QKICAg
ICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19wb3NfYXBwbHkocHJpdiwgeCwgeSk7CiB9
CiAKLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9jYWxjdWxhdGVf
cG9zKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIEV2YXNfQ29vcmQgeCwgRXZh
c19Db29yZCB5KQorc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2Nh
bGN1bGF0ZV9wb3MoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdiwgRXZhc19Db29y
ZCB4LCBFdmFzX0Nvb3JkIHkpCiB7CiAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdf
cG9zX2FwcGx5KHByaXYsIHgsIHkpOwogICAgIHByaXYtPnZpZXcueCA9IHg7CkBAIC0xMjgyLDEw
ICsxMjgyLDEwIEBAIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9j
YWxjdWxhdGVfcG9zKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlCiAgICAgICAgIHByaXYtPnZpZXcu
b2Zmc2V0LmN1ci55ICsgcHJpdi0+dmlldy55KTsKIH0KIAotc3RhdGljIHZvaWQgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX2ZpbGxfcmVuZGVyZXJzKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0Rh
dGEgKnByaXYpCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZmlsbF9yZW5k
ZXJlcnMoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdikKIHsKLSAgICBFaW5hX0lu
bGlzdCAqaXQ7Ci0gICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXRlbTsKKyAgICBF
aW5hX0lubGlzdCogaXQ7CisgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSogaXRlbTsK
ICAgICBpbnQgaSwgajsKIAogICAgIGZvciAoaSA9IDA7IGkgPCBwcml2LT52aWV3LnJvd3M7IGkr
KykgewpAQCAtMTI5NiwxNCArMTI5NiwxNCBAQCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfZmlsbF9yZW5kZXJlcnMoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YQogICAg
IH0KIH0KIAotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1
bGF0ZShFdmFzX09iamVjdCAqbykKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV9zbWFydF9jYWxjdWxhdGUoRXZhc19PYmplY3QqIGV3a1RpbGUpCiB7CiAgICAgRXZhc19Db29y
ZCB4LCB5LCB3LCBoOwogCi0gICAgZXZhc19vYmplY3RfZ2VvbWV0cnlfZ2V0KG8sICZ4LCAmeSwg
JncsICZoKTsKLSAgICBEQkcoIm89JXAgYXQgJWQsJWQgKyAlZHglZCIsIG8sIHgsIHksIHcsIGgp
OworICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldChld2tUaWxlLCAmeCwgJnksICZ3LCAmaCk7
CisgICAgREJHKCJvPSVwIGF0ICVkLCVkICsgJWR4JWQiLCBld2tUaWxlLCB4LCB5LCB3LCBoKTsK
IAotICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYpOworICAgIFBSSVZfREFUQV9H
RVRfT1JfUkVUVVJOKGV3a1RpbGUsIHByaXYpOwogCiAgICAgcHJpdi0+Y2hhbmdlZC5hbnkgPSBF
SU5BX0ZBTFNFOwogCkBAIC0xMzEyLDggKzEzMTIsOCBAQCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfc21hcnRfY2FsY3VsYXRlKEV2YXNfT2JqZWN0ICpvKQogICAgIGlmICgh
cHJpdi0+cmVuZGVyLnN1c3BlbmQgJiYgcHJpdi0+Y2hhbmdlZC5tb2RlbCkgewogICAgICAgICB1
bnNpZ25lZCBsb25nIGNvbHMsIHJvd3M7CiAKLSAgICAgICAgY29scyA9IHByaXYtPm1vZGVsLndp
ZHRoIC8gcHJpdi0+dmlldy50aWxlLncgKyAxOwotICAgICAgICByb3dzID0gcHJpdi0+bW9kZWwu
aGVpZ2h0IC8gcHJpdi0+dmlldy50aWxlLmggKyAxOworICAgICAgICBjb2xzID0gcHJpdi0+bW9k
ZWwud2lkdGggLyBwcml2LT52aWV3LnRpbGUud2lkdGggKyAxOworICAgICAgICByb3dzID0gcHJp
di0+bW9kZWwuaGVpZ2h0IC8gcHJpdi0+dmlldy50aWxlLmhlaWdodCArIDE7CiAKICAgICAgICAg
cHJpdi0+bW9kZWwub2xkLmNvbHMgPSBwcml2LT5tb2RlbC5jdXIuY29sczsKICAgICAgICAgcHJp
di0+bW9kZWwub2xkLnJvd3MgPSBwcml2LT5tb2RlbC5jdXIucm93czsKQEAgLTEzNDgsOCArMTM0
OCw4IEBAIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9jYWxjdWxh
dGUoRXZhc19PYmplY3QgKm8pCiAgICAgICAgIHJlY3QuaCA9IHByaXYtPm1vZGVsLmhlaWdodDsK
ICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2ZpbGxfcmVuZGVyZXJzKHByaXYpOwog
ICAgICAgICBld2tfdGlsZV9tYXRyaXhfcmVzaXplKHByaXYtPm1vZGVsLm1hdHJpeCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHByaXYtPm1vZGVsLmN1ci5jb2xzLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcHJpdi0+bW9kZWwuY3VyLnJvd3MpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHByaXYtPm1vZGVsLmN1ci5jb2xzLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHByaXYtPm1vZGVsLmN1ci5yb3dzKTsKICAgICAgICAgcHJpdi0+Y2hhbmdlZC5t
b2RlbCA9IEVJTkFfRkFMU0U7CiAgICAgICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShwcml2LT5jb250
ZW50c19jbGlwcGVyLCBwcml2LT5tb2RlbC53aWR0aCwgcHJpdi0+bW9kZWwuaGVpZ2h0KTsKICAg
ICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZV9vZmZzZXRfZm9y
Y2UocHJpdik7CkBAIC0xMzU3LDcgKzEzNTcsNyBAQCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfc21hcnRfY2FsY3VsYXRlKEV2YXNfT2JqZWN0ICpvKQogICAgICAgICAvKiBN
YWtlIHN1cmUgd2UgZG8gbm90IG1pc3MgYW55IGltcG9ydGFudCByZXBhaW50IGJ5CiAgICAgICAg
ICAqIHJlcGFpbnRpbmcgdGhlIHdob2xlIHZpZXdwb3J0ICovCiAgICAgICAgIGNvbnN0IEVpbmFf
UmVjdGFuZ2xlIHIgPQotICAgICAgICAgICAgeyAwLCAwLCBwcml2LT5tb2RlbC53aWR0aCwgcHJp
di0+bW9kZWwuaGVpZ2h0IH07CisgICAgICAgIHsgMCwgMCwgcHJpdi0+bW9kZWwud2lkdGgsIHBy
aXYtPm1vZGVsLmhlaWdodCB9OwogICAgICAgICBld2tfdGlsZV9tYXRyaXhfdXBkYXRlKHByaXYt
Pm1vZGVsLm1hdHJpeCwgJnIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpdi0+
dmlldy50aWxlLnpvb20pOwogICAgIH0KQEAgLTEzNjcsMTkgKzEzNjcsMTkgQEAgc3RhdGljIHZv
aWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZShFdmFzX09iamVjdCAq
bykKICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRlc19wcm9jZXNzKHByaXYpOwog
CiAgICAgaWYgKHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCA+IDAKLSAgICAgICAgfHwgcHJpdi0+
dmlldy5vZmZzZXQuYmFzZS54IDw9IC0gcHJpdi0+dmlldy50aWxlLncKKyAgICAgICAgfHwgcHJp
di0+dmlldy5vZmZzZXQuYmFzZS54IDw9IC0gcHJpdi0+dmlldy50aWxlLndpZHRoCiAgICAgICAg
IHx8IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSA+IDAKLSAgICAgICAgfHwgcHJpdi0+dmlldy5v
ZmZzZXQuYmFzZS55IDw9IC0gcHJpdi0+dmlldy50aWxlLmgpCisgICAgICAgIHx8IHByaXYtPnZp
ZXcub2Zmc2V0LmJhc2UueSA8PSAtIHByaXYtPnZpZXcudGlsZS5oZWlnaHQpCiAgICAgICAgIEVS
UigiaW5jb3JyZWN0IGJhc2Ugb2Zmc2V0ICUrNGQsJSs0ZCwgdGlsZT0lZHglZCwgY3VyPSUrNGQs
JSs0ZFxuIiwKICAgICAgICAgICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCwgcHJpdi0+dmll
dy5vZmZzZXQuYmFzZS55LAotICAgICAgICAgICAgcHJpdi0+dmlldy50aWxlLncsIHByaXYtPnZp
ZXcudGlsZS5oLAorICAgICAgICAgICAgcHJpdi0+dmlldy50aWxlLndpZHRoLCBwcml2LT52aWV3
LnRpbGUuaGVpZ2h0LAogICAgICAgICAgICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLngsIHByaXYt
PnZpZXcub2Zmc2V0LmN1ci55KTsKIAogfQogCi1FdmFzX09iamVjdCAqZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfYWRkKEV2YXMgKmUpCitFdmFzX09iamVjdCogZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfYWRkKEV2YXMqIGUpCiB7Ci0gICAgc3RhdGljIEV2YXNfU21hcnQgKnNtYXJ0ID0gMDsKKyAg
ICBzdGF0aWMgRXZhc19TbWFydCogc21hcnQgPSAwOwogCiAgICAgaWYgKF9ld2tfdGlsZWRfbG9n
X2RvbSA8IDApCiAgICAgICAgIF9ld2tfdGlsZWRfbG9nX2RvbSA9IGVpbmFfbG9nX2RvbWFpbl9y
ZWdpc3RlcigiRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmUiLCAwKTsKQEAgLTE0MDUsMjMgKzE0MDUs
MjMgQEAgRXZhc19PYmplY3QgKmV3a190aWxlZF9iYWNraW5nX3N0b3JlX2FkZChFdmFzICplKQog
ICAgIHJldHVybiBldmFzX29iamVjdF9zbWFydF9hZGQoZSwgc21hcnQpOwogfQogCi12b2lkIGV3
a190aWxlZF9iYWNraW5nX3N0b3JlX3JlbmRlcl9jYl9zZXQoRXZhc19PYmplY3QgKm8sIEVpbmFf
Qm9vbCAoKmNiKSh2b2lkICpkYXRhLCBFd2tfVGlsZSAqdCwgY29uc3QgRWluYV9SZWN0YW5nbGUg
KmFyZWEpLCBjb25zdCB2b2lkICpkYXRhKQordm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9y
ZW5kZXJfY2Jfc2V0KEV2YXNfT2JqZWN0KiBld2tUaWxlLCBFaW5hX0Jvb2wgKCogY2IpKHZvaWQq
IGRhdGEsIEV3a19UaWxlKiB0aWxlLCBjb25zdCBFaW5hX1JlY3RhbmdsZSogYXJlYSksIGNvbnN0
IHZvaWQqIGRhdGEpCiB7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oY2IpOwotICAg
IFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYpOworICAgIFBSSVZfREFUQV9HRVRfT1Jf
UkVUVVJOKGV3a1RpbGUsIHByaXYpOwogICAgIHByaXYtPnJlbmRlci5jYiA9IGNiOwogICAgIHBy
aXYtPnJlbmRlci5kYXRhID0gKHZvaWQqKWRhdGE7CiB9CiAKLUV3a19UaWxlX1VudXNlZF9DYWNo
ZSAqZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV91bnVzZWRfY2FjaGVfZ2V0KGNvbnN0IEV2
YXNfT2JqZWN0ICpvKQorRXdrX1RpbGVfVW51c2VkX0NhY2hlKiBld2tfdGlsZWRfYmFja2luZ19z
dG9yZV90aWxlX3VudXNlZF9jYWNoZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1RpbGUpCiB7
Ci0gICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdiwgMCk7CisgICAgUFJJVl9EQVRB
X0dFVF9PUl9SRVRVUk4oZXdrVGlsZSwgcHJpdiwgMCk7CiAgICAgcmV0dXJuIGV3a190aWxlX21h
dHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7CiB9CiAKLXZvaWQgZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV91bnVzZWRfY2FjaGVfc2V0KEV2YXNfT2JqZWN0ICpv
LCBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YykKK3ZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfdGlsZV91bnVzZWRfY2FjaGVfc2V0KEV2YXNfT2JqZWN0KiBld2tUaWxlLCBFd2tfVGlsZV9V
bnVzZWRfQ2FjaGUqIHR1YykKIHsKLSAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2
KTsKKyAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihld2tUaWxlLCBwcml2KTsKIAogICAgIGlm
IChld2tfdGlsZV9tYXRyaXhfdW51c2VkX2NhY2hlX2dldChwcml2LT5tb2RlbC5tYXRyaXgpID09
IHR1YykKICAgICAgICAgcmV0dXJuOwpAQCAtMTQyOSw3ICsxNDI5LDcgQEAgdm9pZCBld2tfdGls
ZWRfYmFja2luZ19zdG9yZV90aWxlX3VudXNlZF9jYWNoZV9zZXQoRXZhc19PYmplY3QgKm8sIEV3
a19UaWxlX1VudXMKICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfbW9kZWxfbWF0cml4X2Ny
ZWF0ZShwcml2LCB0dWMpOwogfQogCi1zdGF0aWMgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9zY3JvbGxfZnVsbF9vZmZzZXRfc2V0X2ludGVybmFsKEV3a19UaWxlZF9CYWNraW5n
X1N0b3JlX0RhdGEgKnByaXYsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5KQorc3RhdGljIEVp
bmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc2Nyb2xsX2Z1bGxfb2Zmc2V0X3NldF9p
bnRlcm5hbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2LCBFdmFzX0Nvb3JkIHgs
IEV2YXNfQ29vcmQgeSkKIHsKICAgICAvKiBUT0RPOiBjaGVjayBvZmZzZXQgZ28gb3V0IG9mIGJv
dW5kcywgY2xhbXAgKi8KICAgICBpZiAocHJpdi0+cmVuZGVyLmRpc2FibGVkKQpAQCAtMTQ0NCwz
MCArMTQ0NCwzMCBAQCBzdGF0aWMgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9z
Y3JvbGxfZnVsbF9vZmZzZXRfc2V0X2ludGVybmFsKEV3a19UaQogICAgIHJldHVybiBFSU5BX1RS
VUU7CiB9CiAKLUVpbmFfQm9vbCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zY3JvbGxfZnVsbF9v
ZmZzZXRfc2V0KEV2YXNfT2JqZWN0ICpvLCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSkKK0Vp
bmFfQm9vbCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zY3JvbGxfZnVsbF9vZmZzZXRfc2V0KEV2
YXNfT2JqZWN0KiBld2tUaWxlLCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSkKIHsKLSAgICBE
QkcoIm89JXAsIHg9JWQsIHk9JWQiLCBvLCB4LCB5KTsKKyAgICBEQkcoIm89JXAsIHg9JWQsIHk9
JWQiLCBld2tUaWxlLCB4LCB5KTsKIAotICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHBy
aXYsIEVJTkFfRkFMU0UpOworICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKGV3a1RpbGUsIHBy
aXYsIEVJTkFfRkFMU0UpOwogICAgIGlmICh4ID09IHByaXYtPnZpZXcub2Zmc2V0LmN1ci54ICYm
IHkgPT0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkpCiAgICAgICAgIHJldHVybiBFSU5BX1RSVUU7
CiAKICAgICByZXR1cm4gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3Njcm9sbF9mdWxsX29mZnNl
dF9zZXRfaW50ZXJuYWwocHJpdiwgeCwgeSk7CiB9CiAKLUVpbmFfQm9vbCBld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9zY3JvbGxfZnVsbF9vZmZzZXRfYWRkKEV2YXNfT2JqZWN0ICpvLCBFdmFzX0Nv
b3JkIGR4LCBFdmFzX0Nvb3JkIGR5KQorRWluYV9Cb29sIGV3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3Njcm9sbF9mdWxsX29mZnNldF9hZGQoRXZhc19PYmplY3QqIGV3a1RpbGUsIEV2YXNfQ29vcmQg
ZHgsIEV2YXNfQ29vcmQgZHkpCiB7Ci0gICAgREJHKCJvPSVwLCBkeD0lZCwgZHk9JWQiLCBvLCBk
eCwgZHkpOworICAgIERCRygibz0lcCwgZHg9JWQsIGR5PSVkIiwgZXdrVGlsZSwgZHgsIGR5KTsK
IAotICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYsIEVJTkFfRkFMU0UpOworICAg
IFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKGV3a1RpbGUsIHByaXYsIEVJTkFfRkFMU0UpOwogICAg
IGlmICghZHggJiYgIWR5KQogICAgICAgICByZXR1cm4gRUlOQV9UUlVFOwogCiAgICAgcmV0dXJu
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zY3JvbGxfZnVsbF9vZmZzZXRfc2V0X2ludGVybmFs
Ci0gICAgICAgIChwcml2LCBwcml2LT52aWV3Lm9mZnNldC5jdXIueCArIGR4LCBwcml2LT52aWV3
Lm9mZnNldC5jdXIueSArIGR5KTsKKyAgICAgICAgICAgICAgIChwcml2LCBwcml2LT52aWV3Lm9m
ZnNldC5jdXIueCArIGR4LCBwcml2LT52aWV3Lm9mZnNldC5jdXIueSArIGR5KTsKIH0KIAotc3Rh
dGljIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfem9vbV9zZXRfaW50ZXJuYWwo
RXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgZmxvYXQgKnpvb20sIEV2YXNfQ29v
cmQgY3gsIEV2YXNfQ29vcmQgY3ksIEV2YXNfQ29vcmQgKm9mZngsIEV2YXNfQ29vcmQgKm9mZnkp
CitzdGF0aWMgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV96b29tX3NldF9pbnRl
cm5hbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2LCBmbG9hdCogem9vbSwgRXZh
c19Db29yZCBjeCwgRXZhc19Db29yZCBjeSwgRXZhc19Db29yZCogb2ZmeCwgRXZhc19Db29yZCog
b2ZmeSkKIHsKICAgICAqb2ZmeCA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci54OwogICAgICpvZmZ5
ID0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLnk7CkBAIC0xNDgxLDEwICsxNDgxLDEwIEBAIHN0YXRp
YyBFaW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3pvb21fc2V0X2ludGVybmFsKEV3
a19UaWxlZF9CYWNraW5nX1N0CiAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5k
ZXJfcmVxdWVzdF9mbHVzaChwcml2KTsKICAgICBFdmFzX0Nvb3JkIHR3LCB0aDsKIAotICAgICp6
b29tID0gUk9VTkRFRF9aT09NKHByaXYtPnZpZXcudGlsZS53LCAqem9vbSk7CisgICAgKnpvb20g
PSBST1VOREVEX1pPT00ocHJpdi0+dmlldy50aWxlLndpZHRoLCAqem9vbSk7CiAKLSAgICB0dyA9
IHByaXYtPnZpZXcudGlsZS53OwotICAgIHRoID0gcHJpdi0+dmlldy50aWxlLmg7CisgICAgdHcg
PSBwcml2LT52aWV3LnRpbGUud2lkdGg7CisgICAgdGggPSBwcml2LT52aWV3LnRpbGUuaGVpZ2h0
OwogCiAgICAgZmxvYXQgc2NhbGUgPSAqem9vbSAvIHByaXYtPnZpZXcudGlsZS56b29tOwogCkBA
IC0xNDk0LDI5ICsxNDk0LDI5IEBAIHN0YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5n
X3N0b3JlX3pvb21fc2V0X2ludGVybmFsKEV3a19UaWxlZF9CYWNraW5nX1N0CiAgICAgcHJpdi0+
dmlldy5vZmZzZXQuem9vbV9jZW50ZXIueSA9IGN5OwogCiAKLSAgICBpZiAoIXByaXYtPnZpZXcu
dyB8fCAhcHJpdi0+dmlldy5oKSB7CisgICAgaWYgKCFwcml2LT52aWV3LndpZHRoIHx8ICFwcml2
LT52aWV3LmhlaWdodCkgewogICAgICAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggPSAwOwog
ICAgICAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgPSAwOwogICAgICAgICByZXR1cm4gRUlO
QV9UUlVFOwogICAgIH0KLSAgICBFaW5hX0lubGlzdCAqKml0ciwgKippdHJfZW5kOwotICAgIEV3
a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0OworICAgIEVpbmFfSW5saXN0KiogaXRyLCAq
KiBpdHJfZW5kOworICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0qIGl0OwogCiAgICAg
RXZhc19Db29yZCBuZXdfeCA9IGN4ICsgKHByaXYtPnZpZXcub2Zmc2V0LmN1ci54IC0gY3gpICog
c2NhbGU7CiAgICAgRXZhc19Db29yZCBuZXdfeSA9IGN5ICsgKHByaXYtPnZpZXcub2Zmc2V0LmN1
ci55IC0gY3kpICogc2NhbGU7CiAKLSAgICBFdmFzX0Nvb3JkIG1vZGVsX3dpZHRoID0gcHJpdi0+
bW9kZWwud2lkdGggKiBzY2FsZTsKLSAgICBFdmFzX0Nvb3JkIG1vZGVsX2hlaWdodCA9IHByaXYt
Pm1vZGVsLmhlaWdodCAqIHNjYWxlOworICAgIEV2YXNfQ29vcmQgbW9kZWxfdyA9IHByaXYtPm1v
ZGVsLndpZHRoICogc2NhbGU7CisgICAgRXZhc19Db29yZCBtb2RlbF9oID0gcHJpdi0+bW9kZWwu
aGVpZ2h0ICogc2NhbGU7CiAKLSAgICBpZiAobW9kZWxfd2lkdGggPCBwcml2LT52aWV3LncgfHwg
bmV3X3ggPj0gMCkKKyAgICBpZiAobW9kZWxfdyA8IHByaXYtPnZpZXcud2lkdGggfHwgbmV3X3gg
Pj0gMCkKICAgICAgICAgbmV3X3ggPSAwOwotICAgIGVsc2UgaWYgKC1uZXdfeCArIHByaXYtPnZp
ZXcudyA+PSBtb2RlbF93aWR0aCkKLSAgICAgICAgbmV3X3ggPSAtbW9kZWxfd2lkdGggKyBwcml2
LT52aWV3Lnc7CisgICAgZWxzZSBpZiAoLW5ld194ICsgcHJpdi0+dmlldy53aWR0aCA+PSBtb2Rl
bF93KQorICAgICAgICBuZXdfeCA9IC1tb2RlbF93ICsgcHJpdi0+dmlldy53aWR0aDsKIAotICAg
IGlmIChtb2RlbF9oZWlnaHQgPCBwcml2LT52aWV3LmggfHwgbmV3X3kgPj0gMCkKKyAgICBpZiAo
bW9kZWxfaCA8IHByaXYtPnZpZXcuaGVpZ2h0IHx8IG5ld195ID49IDApCiAgICAgICAgIG5ld195
ID0gMDsKLSAgICBlbHNlIGlmICgtbmV3X3kgKyBwcml2LT52aWV3LmggPj0gbW9kZWxfaGVpZ2h0
KQotICAgICAgICBuZXdfeSA9IC1tb2RlbF9oZWlnaHQgKyBwcml2LT52aWV3Lmg7CisgICAgZWxz
ZSBpZiAoLW5ld195ICsgcHJpdi0+dmlldy5oZWlnaHQgPj0gbW9kZWxfaCkKKyAgICAgICAgbmV3
X3kgPSAtbW9kZWxfaCArIHByaXYtPnZpZXcuaGVpZ2h0OwogCiAgICAgRXZhc19Db29yZCBieCA9
IG5ld194ICUgdHc7CiAgICAgRXZhc19Db29yZCBieSA9IG5ld195ICUgdGg7CkBAIC0xNTUyLDcg
KzE1NTIsNyBAQCBzdGF0aWMgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV96b29t
X3NldF9pbnRlcm5hbChFd2tfVGlsZWRfQmFja2luZ19TdAogCiAgICAgZm9yICg7IGl0ciA8IGl0
cl9lbmQ7IGl0cisrKSB7CiAgICAgICAgIEV2YXNfQ29vcmQgb3ggPSBiYXNlX294OwotICAgICAg
ICBFaW5hX0lubGlzdCAqbHN0ID0gKml0cjsKKyAgICAgICAgRWluYV9Jbmxpc3QqIGxzdCA9ICpp
dHI7CiAKICAgICAgICAgRUlOQV9JTkxJU1RfRk9SRUFDSChsc3QsIGl0KSB7CiAgICAgICAgICAg
ICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9tb3ZlKGl0LCBveCwgb3kpOwpAQCAtMTU2
NSw0MCArMTU2NSw0MCBAQCBzdGF0aWMgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV96b29tX3NldF9pbnRlcm5hbChFd2tfVGlsZWRfQmFja2luZ19TdAogICAgIHJldHVybiBFSU5B
X1RSVUU7CiB9CiAKLUVpbmFfQm9vbCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV96b29tX3NldChF
dmFzX09iamVjdCAqbywgZmxvYXQgKnpvb20sIEV2YXNfQ29vcmQgY3gsIEV2YXNfQ29vcmQgY3ks
IEV2YXNfQ29vcmQgKm9mZngsIEV2YXNfQ29vcmQgKm9mZnkpCitFaW5hX0Jvb2wgZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfem9vbV9zZXQoRXZhc19PYmplY3QqIGV3a1RpbGUsIGZsb2F0KiB6b29t
LCBFdmFzX0Nvb3JkIGN4LCBFdmFzX0Nvb3JkIGN5LCBFdmFzX0Nvb3JkKiBvZmZ4LCBFdmFzX0Nv
b3JkKiBvZmZ5KQogewotICAgIERCRygibz0lcCwgem9vbT0lZiIsIG8sIChkb3VibGUpKnpvb20p
OworICAgIERCRygibz0lcCwgem9vbT0lZiIsIGV3a1RpbGUsIChkb3VibGUpKnpvb20pOwogCi0g
ICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgUFJJ
Vl9EQVRBX0dFVF9PUl9SRVRVUk4oZXdrVGlsZSwgcHJpdiwgRUlOQV9GQUxTRSk7CiAKICAgICBy
ZXR1cm4gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3pvb21fc2V0X2ludGVybmFsKHByaXYsIHpv
b20sIGN4LCBjeSwgb2ZmeCwgb2ZmeSk7CiB9CiAKLUVpbmFfQm9vbCBld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV96b29tX3dlYWtfc2V0KEV2YXNfT2JqZWN0ICpvLCBmbG9hdCB6b29tLCBFdmFzX0Nv
b3JkIGN4LCBFdmFzX0Nvb3JkIGN5KQorRWluYV9Cb29sIGV3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3pvb21fd2Vha19zZXQoRXZhc19PYmplY3QqIGV3a1RpbGUsIGZsb2F0IHpvb20sIEV2YXNfQ29v
cmQgY3gsIEV2YXNfQ29vcmQgY3kpCiB7Ci0gICAgREJHKCJvPSVwLCB6b29tPSVmIiwgbywgKGRv
dWJsZSl6b29tKTsKLSAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2LCBFSU5BX0ZB
TFNFKTsKLSAgICBpZiAoIXByaXYtPnZpZXcudyB8fCAhcHJpdi0+dmlldy5oKQorICAgIERCRygi
bz0lcCwgem9vbT0lZiIsIGV3a1RpbGUsIChkb3VibGUpem9vbSk7CisgICAgUFJJVl9EQVRBX0dF
VF9PUl9SRVRVUk4oZXdrVGlsZSwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgaWYgKCFwcml2LT52
aWV3LndpZHRoIHx8ICFwcml2LT52aWV3LmhlaWdodCkKICAgICAgICAgcmV0dXJuIEVJTkFfRkFM
U0U7Ci0gICAgRWluYV9Jbmxpc3QgKippdHIsICoqaXRyX2VuZDsKLSAgICBFd2tfVGlsZWRfQmFj
a2luZ19TdG9yZV9JdGVtICppdDsKKyAgICBFaW5hX0lubGlzdCoqIGl0ciwgKiogaXRyX2VuZDsK
KyAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKiBpdDsKICAgICBFdmFzX0Nvb3JkIHR3
LCB0aDsKICAgICBFaW5hX0Jvb2wgcmVjYWxjID0gRUlOQV9GQUxTRTsKIAogICAgIGZsb2F0IHNj
YWxlID0gem9vbSAvIHByaXYtPnZpZXcudGlsZS56b29tOwogCi0gICAgdHcgPSBUSUxFX1NJWkVf
QVRfWk9PTShwcml2LT52aWV3LnRpbGUudywgc2NhbGUpOwotICAgIHNjYWxlID0gVElMRV9aT09N
X0FUX1NJWkUodHcsIHByaXYtPnZpZXcudGlsZS53KTsKLSAgICB0aCA9IFRJTEVfU0laRV9BVF9a
T09NKHByaXYtPnZpZXcudGlsZS5oLCBzY2FsZSk7CisgICAgdHcgPSBUSUxFX1NJWkVfQVRfWk9P
TShwcml2LT52aWV3LnRpbGUud2lkdGgsIHNjYWxlKTsKKyAgICBzY2FsZSA9IFRJTEVfWk9PTV9B
VF9TSVpFKHR3LCBwcml2LT52aWV3LnRpbGUud2lkdGgpOworICAgIHRoID0gVElMRV9TSVpFX0FU
X1pPT00ocHJpdi0+dmlldy50aWxlLmhlaWdodCwgc2NhbGUpOwogICAgIHpvb20gPSBzY2FsZSAq
IHByaXYtPnZpZXcudGlsZS56b29tOwogCi0gICAgRXZhc19Db29yZCBtb2RlbF93aWR0aCA9IHBy
aXYtPm1vZGVsLndpZHRoICogc2NhbGU7Ci0gICAgRXZhc19Db29yZCBtb2RlbF9oZWlnaHQgPSBw
cml2LT5tb2RlbC5oZWlnaHQgKiBzY2FsZTsKKyAgICBFdmFzX0Nvb3JkIG1vZGVsX3cgPSBwcml2
LT5tb2RlbC53aWR0aCAqIHNjYWxlOworICAgIEV2YXNfQ29vcmQgbW9kZWxfaCA9IHByaXYtPm1v
ZGVsLmhlaWdodCAqIHNjYWxlOwogCi0gICAgZXZhc19vYmplY3RfcmVzaXplKHByaXYtPmNvbnRl
bnRzX2NsaXBwZXIsIG1vZGVsX3dpZHRoLCBtb2RlbF9oZWlnaHQpOworICAgIGV2YXNfb2JqZWN0
X3Jlc2l6ZShwcml2LT5jb250ZW50c19jbGlwcGVyLCBtb2RlbF93LCBtb2RlbF9oKTsKIAotICAg
IGludCB2cm93cyA9IGNlaWwoKGZsb2F0KXByaXYtPnZpZXcuaCAvIChmbG9hdCl0aCkgKyAxOwot
ICAgIGludCB2Y29scyA9IGNlaWwoKGZsb2F0KXByaXYtPnZpZXcudyAvIChmbG9hdCl0dykgKyAx
OworICAgIGludCB2cm93cyA9IGNlaWwoc3RhdGljX2Nhc3Q8ZmxvYXQ+cHJpdi0+dmlldy5oZWln
aHQgLyBzdGF0aWNfY2FzdDxmbG9hdD50aCkgKyAxOworICAgIGludCB2Y29scyA9IGNlaWwoc3Rh
dGljX2Nhc3Q8ZmxvYXQ+cHJpdi0+dmlldy53aWR0aCAvIHN0YXRpY19jYXN0PGZsb2F0PnR3KSAr
IDE7CiAgICAgRXZhc19Db29yZCBuZXdfeCA9IGN4ICsgKHByaXYtPnZpZXcub2Zmc2V0LmN1ci54
IC0gY3gpICogc2NhbGU7CiAgICAgRXZhc19Db29yZCBuZXdfeSA9IGN5ICsgKHByaXYtPnZpZXcu
b2Zmc2V0LmN1ci55IC0gY3kpICogc2NhbGU7CiAgICAgRXZhc19Db29yZCBieCA9IG5ld194ICUg
dHc7CkBAIC0xNjE2LDkgKzE2MTYsOSBAQCBFaW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfem9vbV93ZWFrX3NldChFdmFzX09iamVjdCAqbywgZmxvYXQgem9vbSwgRXZhcwogICAgICAg
ICByZWNhbGMgPSBFSU5BX1RSVUU7CiAKICAgICBpZiAocmVjYWxjKSB7Ci0gICAgICAgIEV2YXNf
Q29vcmQgdywgaDsKLSAgICAgICAgZXZhc19vYmplY3RfZ2VvbWV0cnlfZ2V0KG8sIDAsIDAsICZ3
LCAmaCk7Ci0gICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9yZWNhbGNfcmVuZGVyZXJz
KHByaXYsIHcsIGgsIHR3LCB0aCk7CisgICAgICAgIEV2YXNfQ29vcmQgd2lkdGgsIGhlaWdodDsK
KyAgICAgICAgZXZhc19vYmplY3RfZ2VvbWV0cnlfZ2V0KGV3a1RpbGUsIDAsIDAsICZ3aWR0aCwg
JmhlaWdodCk7CisgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9yZWNhbGNfcmVuZGVy
ZXJzKHByaXYsIHdpZHRoLCBoZWlnaHQsIHR3LCB0aCk7CiAgICAgICAgIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9maWxsX3JlbmRlcmVycyhwcml2KTsKICAgICAgICAgX2V3a190aWxlZF9iYWNr
aW5nX3N0b3JlX3VwZGF0ZXNfcHJvY2Vzcyhwcml2KTsKICAgICB9CkBAIC0xNjM1LDcgKzE2MzUs
NyBAQCBFaW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfem9vbV93ZWFrX3NldChFdmFz
X09iamVjdCAqbywgZmxvYXQgem9vbSwgRXZhcwogCiAgICAgZm9yICg7IGl0ciA8IGl0cl9lbmQ7
IGl0cisrKSB7CiAgICAgICAgIEV2YXNfQ29vcmQgb3ggPSBiYXNlX294OwotICAgICAgICBFaW5h
X0lubGlzdCAqbHN0ID0gKml0cjsKKyAgICAgICAgRWluYV9Jbmxpc3QqIGxzdCA9ICppdHI7CiAK
ICAgICAgICAgRUlOQV9JTkxJU1RfRk9SRUFDSChsc3QsIGl0KSB7CiAgICAgICAgICAgICBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9tb3ZlKGl0LCBveCwgb3kpOwpAQCAtMTY0OCwzNiAr
MTY0OCwzNiBAQCBFaW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfem9vbV93ZWFrX3Nl
dChFdmFzX09iamVjdCAqbywgZmxvYXQgem9vbSwgRXZhcwogICAgIHJldHVybiBFSU5BX1RSVUU7
CiB9CiAKLXZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZml4X29mZnNldHMoRXZhc19PYmpl
Y3QgKm8sIEV2YXNfQ29vcmQgdywgRXZhc19Db29yZCBoKQordm9pZCBld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9maXhfb2Zmc2V0cyhFdmFzX09iamVjdCogZXdrVGlsZSwgRXZhc19Db29yZCB3aWR0
aCwgRXZhc19Db29yZCBoZWlnaHQpCiB7Ci0gICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywg
cHJpdik7Ci0gICAgRWluYV9Jbmxpc3QgKippdHIsICoqaXRyX2VuZDsKLSAgICBFd2tfVGlsZWRf
QmFja2luZ19TdG9yZV9JdGVtICppdDsKKyAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihld2tU
aWxlLCBwcml2KTsKKyAgICBFaW5hX0lubGlzdCoqIGl0ciwgKiogaXRyX2VuZDsKKyAgICBFd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKiBpdDsKICAgICBFdmFzX0Nvb3JkIG5ld194ID0gcHJp
di0+dmlldy5vZmZzZXQuY3VyLng7CiAgICAgRXZhc19Db29yZCBuZXdfeSA9IHByaXYtPnZpZXcu
b2Zmc2V0LmN1ci55OwogICAgIEV2YXNfQ29vcmQgYnggPSBwcml2LT52aWV3Lm9mZnNldC5iYXNl
Lng7CiAgICAgRXZhc19Db29yZCBieSA9IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueTsKLSAgICBF
dmFzX0Nvb3JkIHR3ID0gcHJpdi0+dmlldy50aWxlLnc7Ci0gICAgRXZhc19Db29yZCB0aCA9IHBy
aXYtPnZpZXcudGlsZS5oOworICAgIEV2YXNfQ29vcmQgdHcgPSBwcml2LT52aWV3LnRpbGUud2lk
dGg7CisgICAgRXZhc19Db29yZCB0aCA9IHByaXYtPnZpZXcudGlsZS5oZWlnaHQ7CiAKLSAgICBp
ZiAoLW5ld194ID4gdykgewotICAgICAgICBuZXdfeCA9IC13OworICAgIGlmICgtbmV3X3ggPiB3
aWR0aCkgeworICAgICAgICBuZXdfeCA9IC13aWR0aDsKICAgICAgICAgYnggPSBuZXdfeCAlIHR3
OwogICAgICAgICBwcml2LT5tb2RlbC5iYXNlLmNvbCA9IC1uZXdfeCAvIHR3OwogICAgIH0KIAot
ICAgIGlmICgtbmV3X3kgPiBoKSB7Ci0gICAgICAgIG5ld195ID0gLWg7CisgICAgaWYgKC1uZXdf
eSA+IGhlaWdodCkgeworICAgICAgICBuZXdfeSA9IC1oZWlnaHQ7CiAgICAgICAgIGJ5ID0gbmV3
X3kgJSB0aDsKICAgICAgICAgcHJpdi0+bW9kZWwuYmFzZS5yb3cgPSAtbmV3X3kgLyB0aDsKICAg
ICB9CiAKLSAgICBpZiAoYnggPj0gMCB8fCBieCA8PSAtMiAqIHByaXYtPnZpZXcudGlsZS53KSB7
CisgICAgaWYgKGJ4ID49IDAgfHwgYnggPD0gLTIgKiBwcml2LT52aWV3LnRpbGUud2lkdGgpIHsK
ICAgICAgICAgYnggPSBuZXdfeCAlIHR3OwogICAgICAgICBwcml2LT5tb2RlbC5iYXNlLmNvbCA9
IC1uZXdfeCAvIHR3OwogICAgIH0KIAotICAgIGlmIChieSA+PSAwIHx8IGJ5IDw9IC0yICogcHJp
di0+dmlldy50aWxlLmgpIHsKKyAgICBpZiAoYnkgPj0gMCB8fCBieSA8PSAtMiAqIHByaXYtPnZp
ZXcudGlsZS5oZWlnaHQpIHsKICAgICAgICAgYnkgPSBuZXdfeSAlIHRoOwogICAgICAgICBwcml2
LT5tb2RlbC5iYXNlLnJvdyA9IC1uZXdfeSAvIHRoOwogICAgIH0KQEAgLTE3MDAsNyArMTcwMCw3
IEBAIHZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZml4X29mZnNldHMoRXZhc19PYmplY3Qg
Km8sIEV2YXNfQ29vcmQgdywgRXZhc19Db29yCiAKICAgICBmb3IgKDsgaXRyIDwgaXRyX2VuZDsg
aXRyKyspIHsKICAgICAgICAgRXZhc19Db29yZCBveCA9IGJhc2Vfb3g7Ci0gICAgICAgIEVpbmFf
SW5saXN0ICpsc3QgPSAqaXRyOworICAgICAgICBFaW5hX0lubGlzdCogbHN0ID0gKml0cjsKIAog
ICAgICAgICBFSU5BX0lOTElTVF9GT1JFQUNIKGxzdCwgaXQpIHsKICAgICAgICAgICAgIF9ld2tf
dGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX21vdmUoaXQsIG94LCBveSk7CkBAIC0xNzExLDE3ICsx
NzExLDE3IEBAIHZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZml4X29mZnNldHMoRXZhc19P
YmplY3QgKm8sIEV2YXNfQ29vcmQgdywgRXZhc19Db29yCiAgICAgfQogfQogCi12b2lkIGV3a190
aWxlZF9iYWNraW5nX3N0b3JlX3pvb21fd2Vha19zbW9vdGhfc2NhbGVfc2V0KEV2YXNfT2JqZWN0
ICpvLCBFaW5hX0Jvb2wgc21vb3RoX3NjYWxlKQordm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV96b29tX3dlYWtfc21vb3RoX3NjYWxlX3NldChFdmFzX09iamVjdCogZXdrVGlsZSwgRWluYV9C
b29sIHNtb290aF9zY2FsZSkKIHsKLSAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2
KTsKLSAgICBFaW5hX0lubGlzdCAqKml0ciwgKippdHJfZW5kOworICAgIFBSSVZfREFUQV9HRVRf
T1JfUkVUVVJOKGV3a1RpbGUsIHByaXYpOworICAgIEVpbmFfSW5saXN0KiogaXRyLCAqKiBpdHJf
ZW5kOwogCiAgICAgaXRyID0gcHJpdi0+dmlldy5pdGVtczsKICAgICBpdHJfZW5kID0gaXRyICsg
cHJpdi0+dmlldy5yb3dzOwogICAgIHByaXYtPnZpZXcudGlsZS56b29tX3dlYWtfc21vb3RoX3Nj
YWxlID0gc21vb3RoX3NjYWxlOwogCiAgICAgZm9yICg7IGl0cjwgaXRyX2VuZDsgaXRyKyspIHsK
LSAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQ7CisgICAgICAgIEV3a19U
aWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0qIGl0OwogICAgICAgICBFSU5BX0lOTElTVF9GT1JFQUNI
KCppdHIsIGl0KQogICAgICAgICAgICAgaWYgKGl0LT50aWxlKQogICAgICAgICAgICAgICAgIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Ntb290aF9zY2FsZV9zZXQKQEAgLTE3MjksOSAr
MTcyOSw5IEBAIHZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfem9vbV93ZWFrX3Ntb290aF9z
Y2FsZV9zZXQoRXZhc19PYmplY3QgKm8sIEVpbmFfQm9vCiAgICAgfQogfQogCi1FaW5hX0Jvb2wg
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRlKEV2YXNfT2JqZWN0ICpvLCBjb25zdCBFaW5h
X1JlY3RhbmdsZSAqdXBkYXRlKQorRWluYV9Cb29sIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3Vw
ZGF0ZShFdmFzX09iamVjdCogZXdrVGlsZSwgY29uc3QgRWluYV9SZWN0YW5nbGUqIHVwZGF0ZSkK
IHsKLSAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAg
ICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihld2tUaWxlLCBwcml2LCBFSU5BX0ZBTFNFKTsKIAog
ICAgIGlmIChwcml2LT5yZW5kZXIuZGlzYWJsZWQpCiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNF
OwpAQCAtMTc0MCwzNiArMTc0MCwzNiBAQCBFaW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfdXBkYXRlKEV2YXNfT2JqZWN0ICpvLCBjb25zdCBFaW5hX1JlY3RhbmdsZSAqdQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaXYtPnZpZXcudGlsZS56b29tKTsKIH0KIAot
dm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV91cGRhdGVzX3Byb2Nlc3NfcHJlX3NldChFdmFz
X09iamVjdCAqbywgdm9pZCAqKCpjYikodm9pZCAqZGF0YSwgRXZhc19PYmplY3QgKm8pLCBjb25z
dCB2b2lkICpkYXRhKQordm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV91cGRhdGVzX3Byb2Nl
c3NfcHJlX3NldChFdmFzX09iamVjdCogZXdrVGlsZSwgdm9pZCooKmNiKSh2b2lkKiBkYXRhLCBF
dmFzX09iamVjdCAqbyksIGNvbnN0IHZvaWQqIGRhdGEpCiB7Ci0gICAgUFJJVl9EQVRBX0dFVF9P
Ul9SRVRVUk4obywgcHJpdik7CisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4oZXdrVGlsZSwg
cHJpdik7CiAgICAgcHJpdi0+cHJvY2Vzcy5wcmVfY2IgPSBjYjsKICAgICBwcml2LT5wcm9jZXNz
LnByZV9kYXRhID0gKHZvaWQqKWRhdGE7CiB9CiAKLXZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfdXBkYXRlc19wcm9jZXNzX3Bvc3Rfc2V0KEV2YXNfT2JqZWN0ICpvLCB2b2lkICooKmNiKSh2
b2lkICpkYXRhLCB2b2lkICpwcmVfZGF0YSwgRXZhc19PYmplY3QgKm8pLCBjb25zdCB2b2lkICpk
YXRhKQordm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV91cGRhdGVzX3Byb2Nlc3NfcG9zdF9z
ZXQoRXZhc19PYmplY3QqIGV3a1RpbGUsIHZvaWQqKCpjYikodm9pZCogZGF0YSwgdm9pZCogcHJl
X2RhdGEsIEV2YXNfT2JqZWN0ICpvKSwgY29uc3Qgdm9pZCogZGF0YSkKIHsKLSAgICBQUklWX0RB
VEFfR0VUX09SX1JFVFVSTihvLCBwcml2KTsKKyAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihl
d2tUaWxlLCBwcml2KTsKICAgICBwcml2LT5wcm9jZXNzLnBvc3RfY2IgPSBjYjsKICAgICBwcml2
LT5wcm9jZXNzLnBvc3RfZGF0YSA9ICh2b2lkKilkYXRhOwogfQogCi12b2lkIGV3a190aWxlZF9i
YWNraW5nX3N0b3JlX3VwZGF0ZXNfcHJvY2VzcyhFdmFzX09iamVjdCAqbykKK3ZvaWQgZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRlc19wcm9jZXNzKEV2YXNfT2JqZWN0KiBld2tUaWxlKQog
ewotICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYpOworICAgIFBSSVZfREFUQV9H
RVRfT1JfUkVUVVJOKGV3a1RpbGUsIHByaXYpOwogICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV91cGRhdGVzX3Byb2Nlc3MocHJpdik7CiB9CiAKLXZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfdXBkYXRlc19jbGVhcihFdmFzX09iamVjdCAqbykKK3ZvaWQgZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfdXBkYXRlc19jbGVhcihFdmFzX09iamVjdCogZXdrVGlsZSkKIHsKLSAgICBQUklWX0RB
VEFfR0VUX09SX1JFVFVSTihvLCBwcml2KTsKKyAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihl
d2tUaWxlLCBwcml2KTsKIAogICAgIGV3a190aWxlX21hdHJpeF91cGRhdGVzX2NsZWFyKHByaXYt
Pm1vZGVsLm1hdHJpeCk7CiB9CiAKLXZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfY29udGVu
dHNfcmVzaXplKEV2YXNfT2JqZWN0ICpvLCBFdmFzX0Nvb3JkIHdpZHRoLCBFdmFzX0Nvb3JkIGhl
aWdodCkKK3ZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfY29udGVudHNfcmVzaXplKEV2YXNf
T2JqZWN0KiBld2tUaWxlLCBFdmFzX0Nvb3JkIHdpZHRoLCBFdmFzX0Nvb3JkIGhlaWdodCkKIHsK
LSAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2KTsKKyAgICBQUklWX0RBVEFfR0VU
X09SX1JFVFVSTihld2tUaWxlLCBwcml2KTsKIAogICAgIGlmICh3aWR0aCA9PSBwcml2LT5tb2Rl
bC53aWR0aCAmJiBoZWlnaHQgPT0gcHJpdi0+bW9kZWwuaGVpZ2h0KQogICAgICAgICByZXR1cm47
CkBAIC0xNzc4LDIyICsxNzc4LDIyIEBAIHZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfY29u
dGVudHNfcmVzaXplKEV2YXNfT2JqZWN0ICpvLCBFdmFzX0Nvb3JkIHdpZHRoLCBFCiAgICAgcHJp
di0+bW9kZWwuaGVpZ2h0ID0gaGVpZ2h0OwogICAgIHByaXYtPmNoYW5nZWQubW9kZWwgPSBFSU5B
X1RSVUU7CiAKLSAgICBEQkcoIndpZHRoLGhlaWdodD0lZCwgJWQiLCB3aWR0aCwgaGVpZ2h0KTsK
KyAgICBEQkcoIncsaD0lZCwgJWQiLCB3aWR0aCwgaGVpZ2h0KTsKICAgICBfZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfY2hhbmdlZChwcml2KTsKIH0KIAotdm9pZCBld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9kaXNhYmxlZF91cGRhdGVfc2V0KEV2YXNfT2JqZWN0ICpvLCBFaW5hX0Jvb2wgdmFsdWUp
Cit2b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX2Rpc2FibGVkX3VwZGF0ZV9zZXQoRXZhc19P
YmplY3QqIGV3a1RpbGUsIEVpbmFfQm9vbCB2YWx1ZSkKIHsKLSAgICBQUklWX0RBVEFfR0VUX09S
X1JFVFVSTihvLCBwcml2KTsKKyAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihld2tUaWxlLCBw
cml2KTsKIAogICAgIGlmICh2YWx1ZSAhPSBwcml2LT5yZW5kZXIuZGlzYWJsZWQpCiAgICAgICAg
IHByaXYtPnJlbmRlci5kaXNhYmxlZCA9IHZhbHVlOwogfQogCi12b2lkIGV3a190aWxlZF9iYWNr
aW5nX3N0b3JlX2ZsdXNoKEV2YXNfT2JqZWN0ICpvKQordm9pZCBld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9mbHVzaChFdmFzX09iamVjdCogZXdrVGlsZSkKIHsKLSAgICBQUklWX0RBVEFfR0VUX09S
X1JFVFVSTihvLCBwcml2KTsKLSAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YyA9IDA7Cisg
ICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4oZXdrVGlsZSwgcHJpdik7CisgICAgRXdrX1RpbGVf
VW51c2VkX0NhY2hlKiB0dWMgPSAwOwogCiAgICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggPSAw
OwogICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1ci55ID0gMDsKQEAgLTE4MjUsMjEgKzE4MjUsMjEg
QEAgdm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9mbHVzaChFdmFzX09iamVjdCAqbykKICNl
bmRpZgogfQogCi1FaW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9y
ZWdpb24oRXZhc19PYmplY3QgKm8sIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5LCBFdmFzX0Nv
b3JkIHcsIEV2YXNfQ29vcmQgaCwgZmxvYXQgem9vbSkKK0VpbmFfQm9vbCBld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlZ2lvbihFdmFzX09iamVjdCogZXdrVGlsZSwgRXZhc19D
b29yZCB4LCBFdmFzX0Nvb3JkIHksIEV2YXNfQ29vcmQgd2lkdGgsIEV2YXNfQ29vcmQgaGVpZ2h0
LCBmbG9hdCB6b29tKQogewotICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYsIEVJ
TkFfRkFMU0UpOworICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKGV3a1RpbGUsIHByaXYsIEVJ
TkFfRkFMU0UpOwogICAgIEVpbmFfVGlsZV9HcmlkX1NsaWNlciBzbGljZXI7Ci0gICAgY29uc3Qg
RWluYV9UaWxlX0dyaWRfSW5mbyAqaW5mbzsKKyAgICBjb25zdCBFaW5hX1RpbGVfR3JpZF9JbmZv
KiBpbmZvOwogICAgIEV2YXNfQ29vcmQgdHcsIHRoOwotICAgIEV3a19UaWxlX1VudXNlZF9DYWNo
ZSAqdHVjOworICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSogdHVjOwogCi0gICAgdHcgPSBwcml2
LT52aWV3LnRpbGUudzsKLSAgICB0aCA9IHByaXYtPnZpZXcudGlsZS5oOwotICAgIHpvb20gPSBS
T1VOREVEX1pPT00ocHJpdi0+dmlldy50aWxlLncsIHpvb20pOworICAgIHR3ID0gcHJpdi0+dmll
dy50aWxlLndpZHRoOworICAgIHRoID0gcHJpdi0+dmlldy50aWxlLmhlaWdodDsKKyAgICB6b29t
ID0gUk9VTkRFRF9aT09NKHByaXYtPnZpZXcudGlsZS53aWR0aCwgem9vbSk7CiAKLSAgICBpZiAo
IWVpbmFfdGlsZV9ncmlkX3NsaWNlcl9zZXR1cCgmc2xpY2VyLCB4LCB5LCB3LCBoLCB0dywgdGgp
KSB7CisgICAgaWYgKCFlaW5hX3RpbGVfZ3JpZF9zbGljZXJfc2V0dXAoJnNsaWNlciwgeCwgeSwg
d2lkdGgsIGhlaWdodCwgdHcsIHRoKSkgewogICAgICAgICBFUlIoImNvdWxkIG5vdCBzZXR1cCBn
cmlkIHNsaWNlciBmb3IgJWQsJWQrJWR4JWQgdGlsZT0lZHglZCIsCi0gICAgICAgICAgICB4LCB5
LCB3LCBoLCB0dywgdGgpOworICAgICAgICAgICAgeCwgeSwgd2lkdGgsIGhlaWdodCwgdHcsIHRo
KTsKICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CiAgICAgfQogCkBAIC0xODUzLDI5ICsxODUz
LDI5IEBAIEVpbmFfQm9vbCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlZ2lv
bihFdmFzX09iamVjdCAqbywgRXZhc19Db29yZCB4CiAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX2l0ZW1fcHJvY2Vzc19pZGxlcl9zdGFydChwcml2KTsKIAogICAgIHR1YyA9IGV3a190aWxl
X21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7Ci0gICAgZXdrX3Rp
bGVfdW51c2VkX2NhY2hlX2xvY2tfYXJlYSh0dWMsIHgsIHksIHcsIGgsIHpvb20pOworICAgIGV3
a190aWxlX3VudXNlZF9jYWNoZV9sb2NrX2FyZWEodHVjLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCB6
b29tKTsKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi1FaW5hX0Jvb2wgZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZWxhdGl2ZV9yYWRpdXMoRXZhc19PYmplY3QgKm8sIHVu
c2lnbmVkIGludCBuLCBmbG9hdCB6b29tKQorRWluYV9Cb29sIGV3a190aWxlZF9iYWNraW5nX3N0
b3JlX3ByZV9yZW5kZXJfcmVsYXRpdmVfcmFkaXVzKEV2YXNfT2JqZWN0KiBld2tUaWxlLCB1bnNp
Z25lZCBpbnQgbiwgZmxvYXQgem9vbSkKIHsKLSAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihv
LCBwcml2LCBFSU5BX0ZBTFNFKTsKLSAgICB1bnNpZ25lZCBsb25nIHN0YXJ0X3JvdywgZW5kX3Jv
dywgc3RhcnRfY29sLCBlbmRfY29sLCBpLCBqLCB3LCBoOwotICAgIEV3a19UaWxlX1VudXNlZF9D
YWNoZSAqdHVjOworICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKGV3a1RpbGUsIHByaXYsIEVJ
TkFfRkFMU0UpOworICAgIHVuc2lnbmVkIGxvbmcgc3RhcnRfcm93LCBlbmRfcm93LCBzdGFydF9j
b2wsIGVuZF9jb2wsIGksIGosIHdpZHRoLCBoZWlnaHQ7CisgICAgRXdrX1RpbGVfVW51c2VkX0Nh
Y2hlKiB0dWM7CiAKICAgICBJTkYoInByaXYtPm1vZGVsLmJhc2Uucm93ID0lbGQsIG49JXUgcHJp
di0+dmlldy5yb3dzPSVsdSIsCi0gICAgICAgICAgICBwcml2LT5tb2RlbC5iYXNlLnJvdywgbiwg
cHJpdi0+dmlldy5yb3dzKTsKKyAgICAgICAgcHJpdi0+bW9kZWwuYmFzZS5yb3csIG4sIHByaXYt
PnZpZXcucm93cyk7CiAgICAgc3RhcnRfcm93ID0gKGxvbmcpcHJpdi0+bW9kZWwuYmFzZS5yb3cg
LSBuOwogICAgIHN0YXJ0X2NvbCA9IChsb25nKXByaXYtPm1vZGVsLmJhc2UuY29sIC0gbjsKICAg
ICBlbmRfcm93ID0gc3RkOjptaW4ocHJpdi0+bW9kZWwuY3VyLnJvd3MgLSAxLAotICAgICAgICAg
ICAgICAgICAgcHJpdi0+bW9kZWwuYmFzZS5yb3cgKyBwcml2LT52aWV3LnJvd3MgKyBuIC0gMSk7
CisgICAgICAgICAgICAgICAgICAgICAgIHByaXYtPm1vZGVsLmJhc2Uucm93ICsgcHJpdi0+dmll
dy5yb3dzICsgbiAtIDEpOwogICAgIGVuZF9jb2wgPSBzdGQ6Om1pbihwcml2LT5tb2RlbC5jdXIu
Y29scyAtIDEsCi0gICAgICAgICAgICAgICAgICBwcml2LT5tb2RlbC5iYXNlLmNvbCArIHByaXYt
PnZpZXcuY29scyArIG4gLSAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgcHJpdi0+bW9kZWwu
YmFzZS5jb2wgKyBwcml2LT52aWV3LmNvbHMgKyBuIC0gMSk7CiAKICAgICBJTkYoInN0YXJ0X3Jv
dz0lbHUsIGVuZF9yb3c9JWx1LCBzdGFydF9jb2w9JWx1LCBlbmRfY29sPSVsdSIsCi0gICAgICAg
ICBzdGFydF9yb3csIGVuZF9yb3csIHN0YXJ0X2NvbCwgZW5kX2NvbCk7CisgICAgICAgIHN0YXJ0
X3JvdywgZW5kX3Jvdywgc3RhcnRfY29sLCBlbmRfY29sKTsKIAotICAgIHpvb20gPSBST1VOREVE
X1pPT00ocHJpdi0+dmlldy50aWxlLncsIHpvb20pOworICAgIHpvb20gPSBST1VOREVEX1pPT00o
cHJpdi0+dmlldy50aWxlLndpZHRoLCB6b29tKTsKIAogICAgIGZvciAoaSA9IHN0YXJ0X3Jvdzsg
aSA8PSBlbmRfcm93OyBpKyspCiAgICAgICAgIGZvciAoaiA9IHN0YXJ0X2NvbDsgaiA8PSBlbmRf
Y29sOyBqKyspCkBAIC0xODg2LDE5ICsxODg2LDE5IEBAIHN0YXJ0X3Byb2Nlc3Npbmc6CiAgICAg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcHJvY2Vzc19pZGxlcl9zdGFydChwcml2KTsK
IAogICAgIHR1YyA9IGV3a190aWxlX21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVs
Lm1hdHJpeCk7Ci0gICAgaCA9IChlbmRfcm93IC0gc3RhcnRfcm93ICsgMSkgKiBUSUxFX1NJWkVf
QVRfWk9PTShwcml2LT52aWV3LnRpbGUuaCwgem9vbSk7Ci0gICAgdyA9IChlbmRfY29sIC0gc3Rh
cnRfY29sICsgMSkgKiBUSUxFX1NJWkVfQVRfWk9PTShwcml2LT52aWV3LnRpbGUudywgem9vbSk7
CisgICAgaGVpZ2h0ID0gKGVuZF9yb3cgLSBzdGFydF9yb3cgKyAxKSAqIFRJTEVfU0laRV9BVF9a
T09NKHByaXYtPnZpZXcudGlsZS5oZWlnaHQsIHpvb20pOworICAgIHdpZHRoID0gKGVuZF9jb2wg
LSBzdGFydF9jb2wgKyAxKSAqIFRJTEVfU0laRV9BVF9aT09NKHByaXYtPnZpZXcudGlsZS53aWR0
aCwgem9vbSk7CiAgICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2xvY2tfYXJlYSh0dWMsCi0gICAg
ICAgICAgICBzdGFydF9jb2wgKiBUSUxFX1NJWkVfQVRfWk9PTShwcml2LT52aWV3LnRpbGUudywg
em9vbSksCi0gICAgICAgICAgICBzdGFydF9yb3cgKiBUSUxFX1NJWkVfQVRfWk9PTShwcml2LT52
aWV3LnRpbGUuaCwgem9vbSksIHcsIGgsIHpvb20pOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RhcnRfY29sICogVElMRV9TSVpFX0FUX1pPT00ocHJpdi0+dmlldy50aWxl
LndpZHRoLCB6b29tKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0
X3JvdyAqIFRJTEVfU0laRV9BVF9aT09NKHByaXYtPnZpZXcudGlsZS5oZWlnaHQsIHpvb20pLCB3
aWR0aCwgaGVpZ2h0LCB6b29tKTsKIAogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLXZvaWQg
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9jYW5jZWwoRXZhc19PYmplY3QgKm8p
Cit2b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfY2FuY2VsKEV2YXNfT2Jq
ZWN0KiBld2tUaWxlKQogewotICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYpOwot
ICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjOworICAgIFBSSVZfREFUQV9HRVRfT1JfUkVU
VVJOKGV3a1RpbGUsIHByaXYpOworICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSogdHVjOwogCiAg
ICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9jbGVhcihwcml2
KTsKIApAQCAtMTkwNiwxNSArMTkwNiwxNSBAQCB2b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3ByZV9yZW5kZXJfY2FuY2VsKEV2YXNfT2JqZWN0ICpvKQogICAgIGV3a190aWxlX3VudXNlZF9j
YWNoZV91bmxvY2tfYXJlYSh0dWMpOwogfQogCi1FaW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfZGlzYWJsZV9yZW5kZXIoRXZhc19PYmplY3QgKm8pCitFaW5hX0Jvb2wgZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfZGlzYWJsZV9yZW5kZXIoRXZhc19PYmplY3QqIGV3a1RpbGUpCiB7Ci0g
ICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgUFJJ
Vl9EQVRBX0dFVF9PUl9SRVRVUk4oZXdrVGlsZSwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgcmV0
dXJuIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9kaXNhYmxlX3JlbmRlcihwcml2KTsKIH0KIAot
RWluYV9Cb29sIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX2VuYWJsZV9yZW5kZXIoRXZhc19PYmpl
Y3QgKm8pCitFaW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZW5hYmxlX3JlbmRlcihF
dmFzX09iamVjdCogZXdrVGlsZSkKIHsKLSAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBw
cml2LCBFSU5BX0ZBTFNFKTsKKyAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihld2tUaWxlLCBw
cml2LCBFSU5BX0ZBTFNFKTsKICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfY2hhbmdlZChw
cml2KTsKICAgICByZXR1cm4gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2VuYWJsZV9yZW5kZXIo
cHJpdik7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZS5oCmluZGV4IDMwMTAzZWQuLmMyYTcwZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
ZWZsL2V3ay9ld2tfdGlsZWRfYmFja2luZ19zdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZs
L2V3ay9ld2tfdGlsZWRfYmFja2luZ19zdG9yZS5oCkBAIC03Miw3ICs3Miw3IEBAIHN0cnVjdCBf
RXdrX1RpbGUgewogICAgIGNhaXJvX3QqIGNhaXJvOwogCiAgICAgLyoqIE5ldmVyIGV2ZXIgY2hh
bmdlIHRob3NlIGFmdGVyIHRpbGUgaXMgY3JlYXRlZCAocmVzcGVjdCBjb25zdCEpICovCi0gICAg
Y29uc3QgRXZhc19Db29yZCB3LCBoOyAgICAgICAgLyoqPCB0aWxlIHNpemUgKHNlZSBUSUxFX1NJ
WkVfQVRfWk9PTSgpKSAqLworICAgIGNvbnN0IEV2YXNfQ29vcmQgd2lkdGgsIGhlaWdodDsgICAg
ICAgIC8qKjwgdGlsZSBzaXplIChzZWUgVElMRV9TSVpFX0FUX1pPT00oKSkgKi8KICAgICBjb25z
dCBFdmFzX0NvbG9yc3BhY2UgY3NwYWNlOyAvKio8IGNvbG9yc3BhY2UgKi8KICAgICBjb25zdCBm
bG9hdCB6b29tOyAgICAgICAgICAgICAvKio8IHpvb20gbGV2ZWwgY29udGVudHMgd2VyZSByZW5k
ZXJlZCBhdCAqLwogICAgIGNvbnN0IHNpemVfdCBieXRlczsgICAgICAgICAgIC8qKjwgYnl0ZXMg
dXNlZCBpbiBwaXhlbHMuIGtlZXAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9l
d2tfdGlsZWRfbWF0cml4LmNwcCBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfbWF0
cml4LmNwcAppbmRleCBmZjRjNDFjLi5kYTdiNTY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2VmbC9ld2svZXdrX3RpbGVkX21hdHJpeC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9lZmwvZXdr
L2V3a190aWxlZF9tYXRyaXguY3BwCkBAIC0zMiwxNyArMzIsMTcgQEAKICNpbmNsdWRlIDxzdHJp
bmcuaD4KIAogc3RydWN0IF9Fd2tfVGlsZV9NYXRyaXggewotICAgIEVpbmFfTWF0cml4c3BhcnNl
ICptYXRyaXg7Ci0gICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWM7CisgICAgRWluYV9NYXRy
aXhzcGFyc2UqIG1hdHJpeDsKKyAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHR1YzsKICAgICBF
dmFzX0NvbG9yc3BhY2UgY3NwYWNlOwogICAgIHN0cnVjdCB7Ci0gICAgICAgIHZvaWQgKCpjYiko
dm9pZCAqZGF0YSwgRXdrX1RpbGUgKnQsIGNvbnN0IEVpbmFfUmVjdGFuZ2xlICp1cGRhdGUpOwot
ICAgICAgICB2b2lkICpkYXRhOworICAgICAgICB2b2lkICgqIGNiKSh2b2lkKiBkYXRhLCBFd2tf
VGlsZSogdGlsZSwgY29uc3QgRWluYV9SZWN0YW5nbGUqIHVwZGF0ZSk7CisgICAgICAgIHZvaWQq
IGRhdGE7CiAgICAgfSByZW5kZXI7CiAgICAgdW5zaWduZWQgaW50IGZyb3plbjsKLSAgICBFaW5h
X0xpc3QgKnVwZGF0ZXM7CisgICAgRWluYV9MaXN0KiB1cGRhdGVzOwogICAgIHN0cnVjdCB7Ci0g
ICAgICAgIEV2YXNfQ29vcmQgdywgaDsKKyAgICAgICAgRXZhc19Db29yZCB3aWR0aCwgaGVpZ2h0
OwogICAgIH0gdGlsZTsKICNpZmRlZiBERUJVR19NRU1fTEVBS1MKICAgICBzdHJ1Y3QgewpAQCAt
NTksMzEgKzU5LDMxIEBAIHN0YXRpYyB1aW50NjRfdCBieXRlc19sZWFrZWQgPSAwOwogI2VuZGlm
CiAKIC8qIGNhbGxlZCB3aGVuIG1hdHJpeHNwYXJzZSBpcyByZXNpemVkIG9yIGZyZWVkICovCi1z
dGF0aWMgdm9pZCBfZXdrX3RpbGVfbWF0cml4X2NlbGxfZnJlZSh2b2lkICp1c2VyX2RhdGEsIHZv
aWQgKmNlbGxfZGF0YSkKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZV9tYXRyaXhfY2VsbF9mcmVlKHZv
aWQqIHVzZXJfZGF0YSwgdm9pZCogY2VsbF9kYXRhKQogewogICAgIEV3a19UaWxlX01hdHJpeCog
dG0gPSBzdGF0aWNfY2FzdDxFd2tfVGlsZV9NYXRyaXgqPih1c2VyX2RhdGEpOwotICAgIEV3a19U
aWxlKiB0ID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGUqPihjZWxsX2RhdGEpOworICAgIEV3a19UaWxl
KiB0aWxlID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGUqPihjZWxsX2RhdGEpOwogCi0gICAgaWYgKCF0
KQorICAgIGlmICghdGlsZSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgZXdrX3RpbGVfdW51c2Vk
X2NhY2hlX2ZyZWV6ZSh0bS0+dHVjKTsKIAotICAgIGlmICh0LT51cGRhdGVzIHx8IHQtPnN0YXRz
LmZ1bGxfdXBkYXRlKQotICAgICAgICB0bS0+dXBkYXRlcyA9IGVpbmFfbGlzdF9yZW1vdmUodG0t
PnVwZGF0ZXMsIHQpOworICAgIGlmICh0aWxlLT51cGRhdGVzIHx8IHRpbGUtPnN0YXRzLmZ1bGxf
dXBkYXRlKQorICAgICAgICB0bS0+dXBkYXRlcyA9IGVpbmFfbGlzdF9yZW1vdmUodG0tPnVwZGF0
ZXMsIHRpbGUpOwogCi0gICAgaWYgKHQtPnZpc2libGUpCi0gICAgICAgIEVSUigiZnJlZWluZyBj
ZWxsIHRoYXQgaXMgdmlzaWJsZSwgbGVha2luZyB0aWxlICVwIiwgdCk7CisgICAgaWYgKHRpbGUt
PnZpc2libGUpCisgICAgICAgIEVSUigiZnJlZWluZyBjZWxsIHRoYXQgaXMgdmlzaWJsZSwgbGVh
a2luZyB0aWxlICVwIiwgdGlsZSk7CiAgICAgZWxzZSB7Ci0gICAgICAgIGlmICghZXdrX3RpbGVf
dW51c2VkX2NhY2hlX3RpbGVfZ2V0KHRtLT50dWMsIHQpKQotICAgICAgICAgICAgRVJSKCJ0aWxl
ICVwIHdhcyBub3QgaW4gY2FjaGUgJXA/IGxlYWtpbmcuLi4iLCB0LCB0bS0+dHVjKTsKKyAgICAg
ICAgaWYgKCFld2tfdGlsZV91bnVzZWRfY2FjaGVfdGlsZV9nZXQodG0tPnR1YywgdGlsZSkpCisg
ICAgICAgICAgICBFUlIoInRpbGUgJXAgd2FzIG5vdCBpbiBjYWNoZSAlcD8gbGVha2luZy4uLiIs
IHRpbGUsIHRtLT50dWMpOwogICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIERCRygidGlsZSBj
ZWxsIGRvZXMgbm90IGV4aXN0IGFueW1vcmUsIGZyZWUgaXQgJXAiLCB0KTsKKyAgICAgICAgICAg
IERCRygidGlsZSBjZWxsIGRvZXMgbm90IGV4aXN0IGFueW1vcmUsIGZyZWUgaXQgJXAiLCB0aWxl
KTsKICNpZmRlZiBERUJVR19NRU1fTEVBS1MKLSAgICAgICAgICAgIHRtLT5zdGF0cy5ieXRlcy5m
cmVlZCArPSB0LT5ieXRlczsKKyAgICAgICAgICAgIHRtLT5zdGF0cy5ieXRlcy5mcmVlZCArPSB0
aWxlLT5ieXRlczsKICAgICAgICAgICAgIHRtLT5zdGF0cy50aWxlcy5mcmVlZCsrOwogI2VuZGlm
Ci0gICAgICAgICAgICBld2tfdGlsZV9mcmVlKHQpOworICAgICAgICAgICAgZXdrX3RpbGVfZnJl
ZSh0aWxlKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtOTEsNDAgKzkxLDQwIEBAIHN0YXRpYyB2
b2lkIF9ld2tfdGlsZV9tYXRyaXhfY2VsbF9mcmVlKHZvaWQgKnVzZXJfZGF0YSwgdm9pZCAqY2Vs
bF9kYXRhKQogfQogCiAvKiBjYWxsZWQgd2hlbiBjYWNoZSBvZiB1bnVzZWQgdGlsZSBpcyBmbHVz
aGVkICovCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVfbWF0cml4X3RpbGVfZnJlZSh2b2lkICpkYXRh
LCBFd2tfVGlsZSAqdCkKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZV9tYXRyaXhfdGlsZV9mcmVlKHZv
aWQqIGRhdGEsIEV3a19UaWxlKiB0aWxlKQogewogICAgIEV3a19UaWxlX01hdHJpeCogdG0gPSBz
dGF0aWNfY2FzdDxFd2tfVGlsZV9NYXRyaXgqPihkYXRhKTsKLSAgICBFaW5hX01hdHJpeHNwYXJz
ZV9DZWxsICpjZWxsOwotIAotICAgIGlmICghZWluYV9tYXRyaXhzcGFyc2VfY2VsbF9pZHhfZ2V0
KHRtLT5tYXRyaXgsIHQtPnJvdywgdC0+Y29sLCAmY2VsbCkpIHsKLSAgICAgICAgRVJSKCJyZW1v
dmluZyB0aWxlICVwIHRoYXQgd2FzIG5vdCBpbiB0aGUgbWF0cml4PyBMZWFraW5nLi4uIiwgdCk7
CisgICAgRWluYV9NYXRyaXhzcGFyc2VfQ2VsbCogY2VsbDsKKworICAgIGlmICghZWluYV9tYXRy
aXhzcGFyc2VfY2VsbF9pZHhfZ2V0KHRtLT5tYXRyaXgsIHRpbGUtPnJvdywgdGlsZS0+Y29sLCAm
Y2VsbCkpIHsKKyAgICAgICAgRVJSKCJyZW1vdmluZyB0aWxlICVwIHRoYXQgd2FzIG5vdCBpbiB0
aGUgbWF0cml4PyBMZWFraW5nLi4uIiwgdGlsZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
ICAgICBpZiAoIWNlbGwpIHsKLSAgICAgICAgRVJSKCJyZW1vdmluZyB0aWxlICVwIHRoYXQgd2Fz
IG5vdCBpbiB0aGUgbWF0cml4PyBMZWFraW5nLi4uIiwgdCk7CisgICAgICAgIEVSUigicmVtb3Zp
bmcgdGlsZSAlcCB0aGF0IHdhcyBub3QgaW4gdGhlIG1hdHJpeD8gTGVha2luZy4uLiIsIHRpbGUp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKHQtPnVwZGF0ZXMgfHwgdC0+c3Rh
dHMuZnVsbF91cGRhdGUpCi0gICAgICAgIHRtLT51cGRhdGVzID0gZWluYV9saXN0X3JlbW92ZSh0
bS0+dXBkYXRlcywgdCk7CisgICAgaWYgKHRpbGUtPnVwZGF0ZXMgfHwgdGlsZS0+c3RhdHMuZnVs
bF91cGRhdGUpCisgICAgICAgIHRtLT51cGRhdGVzID0gZWluYV9saXN0X3JlbW92ZSh0bS0+dXBk
YXRlcywgdGlsZSk7CiAKICAgICAvKiBzZXQgdG8gbnVsbCB0byBhdm9pZCBkb3VibGUgZnJlZSAq
LwogICAgIGVpbmFfbWF0cml4c3BhcnNlX2NlbGxfZGF0YV9yZXBsYWNlKGNlbGwsIDAsIDApOwog
ICAgIGVpbmFfbWF0cml4c3BhcnNlX2NlbGxfY2xlYXIoY2VsbCk7CiAKLSAgICBpZiAoRUlOQV9V
TkxJS0VMWSghIXQtPnZpc2libGUpKSB7CisgICAgaWYgKEVJTkFfVU5MSUtFTFkoISF0aWxlLT52
aXNpYmxlKSkgewogICAgICAgICBFUlIoImNhY2hlIG9mIHVudXNlZCB0aWxlcyByZXF1ZXN0aW5n
IGRlbGV0aW9uIG9mIHVzZWQgdGlsZSAlcD8gIgotICAgICAgICAgICAgIkxlYWtpbmcuLi4iLCB0
KTsKKyAgICAgICAgICAgICJMZWFraW5nLi4uIiwgdGlsZSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKICNpZmRlZiBERUJVR19NRU1fTEVBS1MKLSAgICB0bS0+c3RhdHMuYnl0ZXMuZnJlZWQg
Kz0gdC0+Ynl0ZXM7CisgICAgdG0tPnN0YXRzLmJ5dGVzLmZyZWVkICs9IHRpbGUtPmJ5dGVzOwog
ICAgIHRtLT5zdGF0cy50aWxlcy5mcmVlZCsrOwogI2VuZGlmCiAKLSAgICBld2tfdGlsZV9mcmVl
KHQpOworICAgIGV3a190aWxlX2ZyZWUodGlsZSk7CiB9CiAKIC8qKgpAQCAtMTQ1LDcgKzE0NSw3
IEBAIHN0YXRpYyB2b2lkIF9ld2tfdGlsZV9tYXRyaXhfdGlsZV9mcmVlKHZvaWQgKmRhdGEsIEV3
a19UaWxlICp0KQogICoKICAqIEByZXR1cm4gbmV3bHkgYWxsb2NhdGVkIGluc3RhbmNlIG9uIHN1
Y2Nlc3MsIEBjIDAgb24gZmFpbHVyZS4KICAqLwotRXdrX1RpbGVfTWF0cml4ICpld2tfdGlsZV9t
YXRyaXhfbmV3KEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjLCB1bnNpZ25lZCBsb25nIGNvbHMs
IHVuc2lnbmVkIGxvbmcgcm93cywgRXZhc19Db2xvcnNwYWNlIGNzcGFjZSwgdm9pZCAoKnJlbmRl
cl9jYikodm9pZCAqZGF0YSwgRXdrX1RpbGUgKnQsIGNvbnN0IEVpbmFfUmVjdGFuZ2xlICp1cGRh
dGUpLCBjb25zdCB2b2lkICpyZW5kZXJfZGF0YSkKK0V3a19UaWxlX01hdHJpeCogZXdrX3RpbGVf
bWF0cml4X25ldyhFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHR1YywgdW5zaWduZWQgbG9uZyBjb2xz
LCB1bnNpZ25lZCBsb25nIHJvd3MsIEV2YXNfQ29sb3JzcGFjZSBjc3BhY2UsIHZvaWQgKCogcmVu
ZGVyX2NiKSh2b2lkKiBkYXRhLCBFd2tfVGlsZSogdGlsZSwgY29uc3QgRWluYV9SZWN0YW5nbGUq
IHVwZGF0ZSksIGNvbnN0IHZvaWQqIHJlbmRlcl9kYXRhKQogewogICAgIEV3a19UaWxlX01hdHJp
eCogdG0gPSBzdGF0aWNfY2FzdDxFd2tfVGlsZV9NYXRyaXgqPihjYWxsb2MoMSwgc2l6ZW9mKEV3
a19UaWxlX01hdHJpeCkpKTsKICAgICBpZiAoIXRtKQpAQCAtMTcyLDkgKzE3Miw5IEBAIEV3a19U
aWxlX01hdHJpeCAqZXdrX3RpbGVfbWF0cml4X25ldyhFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1
YywgdW5zaWduZWQgbG9uZyBjCiAKICAgICB0bS0+Y3NwYWNlID0gY3NwYWNlOwogICAgIHRtLT5y
ZW5kZXIuY2IgPSByZW5kZXJfY2I7Ci0gICAgdG0tPnJlbmRlci5kYXRhID0gKHZvaWQgKilyZW5k
ZXJfZGF0YTsKLSAgICB0bS0+dGlsZS53ID0gREVGQVVMVF9USUxFX1c7Ci0gICAgdG0tPnRpbGUu
aCA9IERFRkFVTFRfVElMRV9IOworICAgIHRtLT5yZW5kZXIuZGF0YSA9ICh2b2lkKilyZW5kZXJf
ZGF0YTsKKyAgICB0bS0+dGlsZS53aWR0aCA9IERFRkFVTFRfVElMRV9XOworICAgIHRtLT50aWxl
LmhlaWdodCA9IERFRkFVTFRfVElMRV9IOwogCiAgICAgcmV0dXJuIHRtOwogfQpAQCAtMTg0LDcg
KzE4NCw3IEBAIEV3a19UaWxlX01hdHJpeCAqZXdrX3RpbGVfbWF0cml4X25ldyhFd2tfVGlsZV9V
bnVzZWRfQ2FjaGUgKnR1YywgdW5zaWduZWQgbG9uZyBjCiAgKgogICogVGhlIGNhY2hlIGluc3Rh
bmNlIGlzIHVucmVmZXJlbmNlZCwgcG9zc2libHkgZnJlZWluZyBpdC4KICAqLwotdm9pZCBld2tf
dGlsZV9tYXRyaXhfZnJlZShFd2tfVGlsZV9NYXRyaXggKnRtKQordm9pZCBld2tfdGlsZV9tYXRy
aXhfZnJlZShFd2tfVGlsZV9NYXRyaXgqIHRtKQogewogI2lmZGVmIERFQlVHX01FTV9MRUFLUwog
ICAgIHVpbnQ2NF90IHRpbGVzLCBieXRlczsKQEAgLTIwNiwyMCArMjA2LDIwIEBAIHZvaWQgZXdr
X3RpbGVfbWF0cml4X2ZyZWUoRXdrX1RpbGVfTWF0cml4ICp0bSkKICAgICBieXRlc19sZWFrZWQg
Kz0gYnl0ZXM7CiAKICAgICBpZiAodGlsZXMgfHwgYnl0ZXMpCi0gICAgICAgIEVSUigidGlsZWQg
bWF0cml4IGxlYWtlZDogdGlsZXNbKyUiUFJJdTY0IiwtJSJQUkl1NjQiOiUiUFJJdTY0Il0gIgot
ICAgICAgICAgICAiYnl0ZXNbKyUiUFJJdTY0IiwtJSJQUkl1NjQiOiUiUFJJdTY0Il0iLAorICAg
ICAgICBFUlIoInRpbGVkIG1hdHJpeCBsZWFrZWQ6IHRpbGVzWyslIiBQUkl1NjQgIiwtJSIgUFJJ
dTY0ICI6JSIgUFJJdTY0ICJdICIKKyAgICAgICAgICAgICJieXRlc1srJSIgUFJJdTY0ICIsLSUi
IFBSSXU2NCAiOiUiIFBSSXU2NCAiXSIsCiAgICAgICAgICAgICB0bS0+c3RhdHMudGlsZXMuYWxs
b2NhdGVkLCB0bS0+c3RhdHMudGlsZXMuZnJlZWQsIHRpbGVzLAogICAgICAgICAgICAgdG0tPnN0
YXRzLmJ5dGVzLmFsbG9jYXRlZCwgdG0tPnN0YXRzLmJ5dGVzLmZyZWVkLCBieXRlcyk7CiAgICAg
ZWxzZSBpZiAodGlsZXNfbGVha2VkIHx8IGJ5dGVzX2xlYWtlZCkKLSAgICAgICAgV1JOKCJ0aWxl
ZCBtYXRyaXggaGFkIG5vIGxlYWtzOiB0aWxlc1srJSJQUkl1NjQiLC0lIlBSSXU2NCJdICIKLSAg
ICAgICAgICAgImJ5dGVzWyslIlBSSXU2NCIsLSUiUFJJdTY0Il0sIGJ1dCBzb21lIG90aGVyIGxl
YWtlZCAiCi0gICAgICAgICAgICAiJSJQUkl1NjQiIHRpbGVzICglIlBSSXU2NCIgYnl0ZXMpIiwK
KyAgICAgICAgV1JOKCJ0aWxlZCBtYXRyaXggaGFkIG5vIGxlYWtzOiB0aWxlc1srJSIgUFJJdTY0
ICIsLSUiIFBSSXU2NCAiXSAiCisgICAgICAgICAgICAiYnl0ZXNbKyUiIFBSSXU2NCAiLC0lIiBQ
Ukl1NjQgIl0sIGJ1dCBzb21lIG90aGVyIGxlYWtlZCAiCisgICAgICAgICAgICAiJSIgUFJJdTY0
ICIgdGlsZXMgKCUiIFBSSXU2NCAiIGJ5dGVzKSIsCiAgICAgICAgICAgICB0bS0+c3RhdHMudGls
ZXMuYWxsb2NhdGVkLCB0bS0+c3RhdHMudGlsZXMuZnJlZWQsCiAgICAgICAgICAgICB0bS0+c3Rh
dHMuYnl0ZXMuYWxsb2NhdGVkLCB0bS0+c3RhdHMuYnl0ZXMuZnJlZWQsCiAgICAgICAgICAgICB0
aWxlc19sZWFrZWQsIGJ5dGVzX2xlYWtlZCk7CiAgICAgZWxzZQotICAgICAgICBJTkYoInRpbGVk
IG1hdHJpeCBoYWQgbm8gbGVha3M6IHRpbGVzWyslIlBSSXU2NCIsLSUiUFJJdTY0Il0gIgotICAg
ICAgICAgICAiYnl0ZXNbKyUiUFJJdTY0IiwtJSJQUkl1NjQiXSIsCisgICAgICAgIElORigidGls
ZWQgbWF0cml4IGhhZCBubyBsZWFrczogdGlsZXNbKyUiIFBSSXU2NCAiLC0lIiBQUkl1NjQgIl0g
IgorICAgICAgICAgICAgImJ5dGVzWyslIiBQUkl1NjQgIiwtJSIgUFJJdTY0ICJdIiwKICAgICAg
ICAgICAgIHRtLT5zdGF0cy50aWxlcy5hbGxvY2F0ZWQsIHRtLT5zdGF0cy50aWxlcy5mcmVlZCwK
ICAgICAgICAgICAgIHRtLT5zdGF0cy5ieXRlcy5hbGxvY2F0ZWQsIHRtLT5zdGF0cy5ieXRlcy5m
cmVlZCk7CiAjZW5kaWYKQEAgLTIzMCw3ICsyMzAsNyBAQCB2b2lkIGV3a190aWxlX21hdHJpeF9m
cmVlKEV3a19UaWxlX01hdHJpeCAqdG0pCiAvKioKICAqIFJlc2l6ZSBtYXRyaXggdG8gZ2l2ZW4g
bnVtYmVyIG9mIHJvd3MgYW5kIGNvbHVtbnMuCiAgKi8KLXZvaWQgZXdrX3RpbGVfbWF0cml4X3Jl
c2l6ZShFd2tfVGlsZV9NYXRyaXggKnRtLCB1bnNpZ25lZCBsb25nIGNvbHMsIHVuc2lnbmVkIGxv
bmcgcm93cykKK3ZvaWQgZXdrX3RpbGVfbWF0cml4X3Jlc2l6ZShFd2tfVGlsZV9NYXRyaXgqIHRt
LCB1bnNpZ25lZCBsb25nIGNvbHMsIHVuc2lnbmVkIGxvbmcgcm93cykKIHsKICAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTih0bSk7CiAgICAgZWluYV9tYXRyaXhzcGFyc2Vfc2l6ZV9zZXQo
dG0tPm1hdHJpeCwgcm93cywgY29scyk7CkBAIC0yNDEsNyArMjQxLDcgQEAgdm9pZCBld2tfdGls
ZV9tYXRyaXhfcmVzaXplKEV3a19UaWxlX01hdHJpeCAqdG0sIHVuc2lnbmVkIGxvbmcgY29scywg
dW5zaWduZWQgbG8KICAqCiAgKiBObyByZWZlcmVuY2UgaXMgdGFrZW4gdG8gdGhlIGNhY2hlLgog
ICovCi1Fd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKmV3a190aWxlX21hdHJpeF91bnVzZWRfY2FjaGVf
Z2V0KGNvbnN0IEV3a19UaWxlX01hdHJpeCAqdG0pCitFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIGV3
a190aWxlX21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KGNvbnN0IEV3a19UaWxlX01hdHJpeCogdG0p
CiB7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHRtLCAwKTsKICAgICByZXR1
cm4gdG0tPnR1YzsKQEAgLTI1MCw3ICsyNTAsNyBAQCBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKmV3
a190aWxlX21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KGNvbnN0IEV3a19UaWxlX01hdHJpeCAqdAog
LyoqCiAgKiBHZXQgdGhlIGV4YWN0IHRpbGUgZm9yIHRoZSBnaXZlbiBwb3NpdGlvbiBhbmQgem9v
bS4KICAqCi0gKiBJZiB0aGUgdGlsZSB3YXMgdW51c2VkIHRoZW4gaXQncyByZW1vdmVkIGZyb20g
dGhlIGNhY2hlLgorICogSWYgdGhlIHRpbGUud2lkdGhhcyB1bnVzZWQgdGhlbiBpdCdzIHJlbW92
ZWQgZnJvbSB0aGUgY2FjaGUuCiAgKgogICogQWZ0ZXIgdXNhZ2UsIHBsZWFzZSBnaXZlIGl0IGJh
Y2sgdXNpbmcKICAqIGV3a190aWxlX21hdHJpeF90aWxlX3B1dCgpLiBJZiB5b3UganVzdCB3YW50
IHRvIGNoZWNrIGlmIGl0IGV4aXN0cywKQEAgLTI2OCwyMiArMjY4LDIyIEBAIEV3a19UaWxlX1Vu
dXNlZF9DYWNoZSAqZXdrX3RpbGVfbWF0cml4X3VudXNlZF9jYWNoZV9nZXQoY29uc3QgRXdrX1Rp
bGVfTWF0cml4ICp0CiAgKgogICogQHNlZSBld2tfdGlsZV9tYXRyaXhfdGlsZV9leGFjdF9nZXQo
KQogICovCi1Fd2tfVGlsZSAqZXdrX3RpbGVfbWF0cml4X3RpbGVfZXhhY3RfZ2V0KEV3a19UaWxl
X01hdHJpeCAqdG0sIHVuc2lnbmVkIGxvbmcgY29sLCB1bnNpZ25lZCBsb25nIHJvdywgZmxvYXQg
em9vbSkKK0V3a19UaWxlKiBld2tfdGlsZV9tYXRyaXhfdGlsZV9leGFjdF9nZXQoRXdrX1RpbGVf
TWF0cml4KiB0bSwgdW5zaWduZWQgbG9uZyBjb2wsIHVuc2lnbmVkIGxvbmcgcm93LCBmbG9hdCB6
b29tKQogewotICAgIEV3a19UaWxlKiB0ID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGUqPihlaW5hX21h
dHJpeHNwYXJzZV9kYXRhX2lkeF9nZXQodG0tPm1hdHJpeCwgcm93LCBjb2wpKTsKLSAgICBpZiAo
IXQpCisgICAgRXdrX1RpbGUqIHRpbGUgPSBzdGF0aWNfY2FzdDxFd2tfVGlsZSo+KGVpbmFfbWF0
cml4c3BhcnNlX2RhdGFfaWR4X2dldCh0bS0+bWF0cml4LCByb3csIGNvbCkpOworICAgIGlmICgh
dGlsZSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBpZiAodC0+em9vbSA9PSB6b29tKQorICAg
IGlmICh0aWxlLT56b29tID09IHpvb20pCiAgICAgICAgIGdvdG8gZW5kOwogCi0gIGVuZDoKLSAg
ICBpZiAoIXQtPnZpc2libGUpIHsKLSAgICAgICAgaWYgKCFld2tfdGlsZV91bnVzZWRfY2FjaGVf
dGlsZV9nZXQodG0tPnR1YywgdCkpCitlbmQ6CisgICAgaWYgKCF0aWxlLT52aXNpYmxlKSB7Cisg
ICAgICAgIGlmICghZXdrX3RpbGVfdW51c2VkX2NhY2hlX3RpbGVfZ2V0KHRtLT50dWMsIHRpbGUp
KQogICAgICAgICAgICAgV1JOKCJFd2tfVGlsZSB3YXMgdW51c2VkIGJ1dCBub3QgaW4gY2FjaGU/
IGJ1ZyEiKTsKICAgICB9CiAKLSAgICByZXR1cm4gdDsKKyAgICByZXR1cm4gdGlsZTsKIH0KIAog
LyoqCkBAIC0yOTgsNyArMjk4LDcgQEAgRXdrX1RpbGUgKmV3a190aWxlX21hdHJpeF90aWxlX2V4
YWN0X2dldChFd2tfVGlsZV9NYXRyaXggKnRtLCB1bnNpZ25lZCBsb25nIGNvbCwKICAqCiAgKiBA
c2VlIGV3a190aWxlX21hdHJpeF90aWxlX2V4YWN0X2dldCgpCiAgKi8KLUVpbmFfQm9vbCBld2tf
dGlsZV9tYXRyaXhfdGlsZV9leGFjdF9leGlzdHMoRXdrX1RpbGVfTWF0cml4ICp0bSwgdW5zaWdu
ZWQgbG9uZyBjb2wsIHVuc2lnbmVkIGxvbmcgcm93LCBmbG9hdCB6b29tKQorRWluYV9Cb29sIGV3
a190aWxlX21hdHJpeF90aWxlX2V4YWN0X2V4aXN0cyhFd2tfVGlsZV9NYXRyaXgqIHRtLCB1bnNp
Z25lZCBsb25nIGNvbCwgdW5zaWduZWQgbG9uZyByb3csIGZsb2F0IHpvb20pCiB7CiAgICAgaWYg
KCFlaW5hX21hdHJpeHNwYXJzZV9kYXRhX2lkeF9nZXQodG0tPm1hdHJpeCwgcm93LCBjb2wpKQog
ICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKQEAgLTMxOCw0NSArMzE4LDQ1IEBAIEVpbmFfQm9v
bCBld2tfdGlsZV9tYXRyaXhfdGlsZV9leGFjdF9leGlzdHMoRXdrX1RpbGVfTWF0cml4ICp0bSwg
dW5zaWduZWQgbG9uZyBjCiAgKiBAcGFyYW0gcm93IHRoZSByb3cgbnVtYmVyLgogICogQHBhcmFt
IHpvb20gdGhlIGxldmVsIHRvIGNyZWF0ZSB0aWxlLCB1c2VkIHRvIGRldGVybWluZSB0aWxlIHNp
emUuCiAgKi8KLUV3a19UaWxlICpld2tfdGlsZV9tYXRyaXhfdGlsZV9uZXcoRXdrX1RpbGVfTWF0
cml4ICp0bSwgRXZhcyAqZXZhcywgdW5zaWduZWQgbG9uZyBjb2wsIHVuc2lnbmVkIGxvbmcgcm93
LCBmbG9hdCB6b29tKQorRXdrX1RpbGUqIGV3a190aWxlX21hdHJpeF90aWxlX25ldyhFd2tfVGls
ZV9NYXRyaXgqIHRtLCBFdmFzKiBjYW52YXMsIHVuc2lnbmVkIGxvbmcgY29sLCB1bnNpZ25lZCBs
b25nIHJvdywgZmxvYXQgem9vbSkKIHsKICAgICBFdmFzX0Nvb3JkIHR3LCB0aDsKLSAgICBFd2tf
VGlsZSAqdDsKKyAgICBFd2tfVGlsZSogdGlsZTsKIAogICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOX1ZBTCh0bSwgMCk7CiAgICAgRUlOQV9TQUZFVFlfT05fRkFMU0VfUkVUVVJOX1ZBTCh6
b29tID4gMC4wLCAwKTsKIAotICAgIHR3ID0gdG0tPnRpbGUudzsKLSAgICB0aCA9IHRtLT50aWxl
Lmg7CisgICAgdHcgPSB0bS0+dGlsZS53aWR0aDsKKyAgICB0aCA9IHRtLT50aWxlLmhlaWdodDsK
IAotICAgIHQgPSBld2tfdGlsZV9uZXcoZXZhcywgdHcsIHRoLCB6b29tLCB0bS0+Y3NwYWNlKTsK
LSAgICBpZiAoIXQpIHsKKyAgICB0aWxlID0gZXdrX3RpbGVfbmV3KGNhbnZhcywgdHcsIHRoLCB6
b29tLCB0bS0+Y3NwYWNlKTsKKyAgICBpZiAoIXRpbGUpIHsKICAgICAgICAgRVJSKCJjb3VsZCBu
b3QgY3JlYXRlIHRpbGUgJWR4JWQgYXQgJWYsIGNzcGFjZT0lZCIsIHR3LCB0aCwgKGRvdWJsZSl6
b29tLCB0bS0+Y3NwYWNlKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgaWYgKCFl
aW5hX21hdHJpeHNwYXJzZV9kYXRhX2lkeF9zZXQodG0tPm1hdHJpeCwgcm93LCBjb2wsIHQpKSB7
CisgICAgaWYgKCFlaW5hX21hdHJpeHNwYXJzZV9kYXRhX2lkeF9zZXQodG0tPm1hdHJpeCwgcm93
LCBjb2wsIHRpbGUpKSB7CiAgICAgICAgIEVSUigiY291bGQgbm90IHNldCBtYXRyaXggY2VsbCwg
cm93L2NvbCBvdXRzaWRlIG1hdHJpeCBkaW1lbnNpb25zISIpOwotICAgICAgICBld2tfdGlsZV9m
cmVlKHQpOworICAgICAgICBld2tfdGlsZV9mcmVlKHRpbGUpOwogICAgICAgICByZXR1cm4gMDsK
ICAgICB9CiAKLSAgICB0LT5jb2wgPSBjb2w7Ci0gICAgdC0+cm93ID0gcm93OwotICAgIHQtPngg
PSBjb2wgKiB0dzsKLSAgICB0LT55ID0gcm93ICogdGg7CisgICAgdGlsZS0+Y29sID0gY29sOwor
ICAgIHRpbGUtPnJvdyA9IHJvdzsKKyAgICB0aWxlLT54ID0gY29sICogdHc7CisgICAgdGlsZS0+
eSA9IHJvdyAqIHRoOwogCi0gICAgY2Fpcm9fdHJhbnNsYXRlKHQtPmNhaXJvLCAtdC0+eCwgLXQt
PnkpOworICAgIGNhaXJvX3RyYW5zbGF0ZSh0aWxlLT5jYWlybywgLXRpbGUtPngsIC10aWxlLT55
KTsKIAotICAgIHQtPnN0YXRzLmZ1bGxfdXBkYXRlID0gRUlOQV9UUlVFOwotICAgIHRtLT51cGRh
dGVzID0gZWluYV9saXN0X2FwcGVuZCh0bS0+dXBkYXRlcywgdCk7CisgICAgdGlsZS0+c3RhdHMu
ZnVsbF91cGRhdGUgPSBFSU5BX1RSVUU7CisgICAgdG0tPnVwZGF0ZXMgPSBlaW5hX2xpc3RfYXBw
ZW5kKHRtLT51cGRhdGVzLCB0aWxlKTsKIAogI2lmZGVmIERFQlVHX01FTV9MRUFLUwotICAgIHRt
LT5zdGF0cy5ieXRlcy5hbGxvY2F0ZWQgKz0gdC0+Ynl0ZXM7CisgICAgdG0tPnN0YXRzLmJ5dGVz
LmFsbG9jYXRlZCArPSB0aWxlLT5ieXRlczsKICAgICB0bS0+c3RhdHMudGlsZXMuYWxsb2NhdGVk
Kys7CiAjZW5kaWYKIAotICAgIHJldHVybiB0OworICAgIHJldHVybiB0aWxlOwogfQogCiAvKioK
QEAgLTM2NiwyOSArMzY2LDI5IEBAIEV3a19UaWxlICpld2tfdGlsZV9tYXRyaXhfdGlsZV9uZXco
RXdrX1RpbGVfTWF0cml4ICp0bSwgRXZhcyAqZXZhcywgdW5zaWduZWQgbG9uCiAgKiBpdCB3aXRo
IGV3a190aWxlX21hdHJpeF90aWxlX2V4YWN0X2dldCgpLgogICoKICAqIEFueSBwcmV2aW91cyBy
ZWZlcmVuY2UgdG8gdGlsZSBzaG91bGQgYmUgcmVsZWFzZWQKLSAqIChld2tfdGlsZV9oaWRlKCkp
IGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24sIHNvIGl0IHdpbGwKKyAqIChld2tfdGlsZS5o
ZWlnaHRpZGUoKSkgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiwgc28gaXQgd2lsbAogICog
YmUga25vd24gaWYgaXQgaXMgbm90IHZpc2liaWxlIGFueW1vcmUgYW5kIHRodXMgY2FuIGJlIHB1
dCBpbnRvIHRoZQogICogdW51c2VkIGNhY2hlLgogICoKICAqIEBwYXJhbSB0bSB0aGUgdGlsZSBt
YXRyaXggdG8gcmV0dXJuIHRpbGUgdG8uCiAgKiBAcGFyYW0gdCB0aGUgdGlsZSBpbnN0YW5jZSB0
byByZXR1cm4sIG11c3QgQGIgbm90IGJlIEBjIDAuCi0gKiBAcGFyYW0gbGFzdF91c2VkIHRpbWUg
aW4gd2hpY2ggdGlsZSB3YXMgbGFzdCB1c2VkLgorICogQHBhcmFtIGxhc3RfdXNlZCB0aW1lIGlu
IHdoaWNoIHRpbGUud2lkdGhhcyBsYXN0IHVzZWQuCiAgKgogICogQHJldHVybiAjRUlOQV9UUlVF
IG9uIHN1Y2Nlc3Mgb3IgI0VJTkFfRkFMU0Ugb24gZmFpbHVyZS4KICAqLwotRWluYV9Cb29sIGV3
a190aWxlX21hdHJpeF90aWxlX3B1dChFd2tfVGlsZV9NYXRyaXggKnRtLCBFd2tfVGlsZSAqdCwg
ZG91YmxlIGxhc3RfdXNlZCkKK0VpbmFfQm9vbCBld2tfdGlsZV9tYXRyaXhfdGlsZV9wdXQoRXdr
X1RpbGVfTWF0cml4KiB0bSwgRXdrX1RpbGUqIHRpbGUsIGRvdWJsZSBsYXN0X3VzZWQpCiB7CiAg
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHRtLCBFSU5BX0ZBTFNFKTsKLSAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodCwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHRpbGUsIEVJTkFfRkFMU0UpOwogCi0gICAgaWYgKHQt
PnZpc2libGUpCisgICAgaWYgKHRpbGUtPnZpc2libGUpCiAgICAgICAgIHJldHVybiBFSU5BX1RS
VUU7CiAKLSAgICB0LT5zdGF0cy5sYXN0X3VzZWQgPSBsYXN0X3VzZWQ7Ci0gICAgcmV0dXJuIGV3
a190aWxlX3VudXNlZF9jYWNoZV90aWxlX3B1dCh0bS0+dHVjLCB0LCBfZXdrX3RpbGVfbWF0cml4
X3RpbGVfZnJlZSwgdG0pOworICAgIHRpbGUtPnN0YXRzLmxhc3RfdXNlZCA9IGxhc3RfdXNlZDsK
KyAgICByZXR1cm4gZXdrX3RpbGVfdW51c2VkX2NhY2hlX3RpbGVfcHV0KHRtLT50dWMsIHRpbGUs
IF9ld2tfdGlsZV9tYXRyaXhfdGlsZV9mcmVlLCB0bSk7CiB9CiAKLUVpbmFfQm9vbCBld2tfdGls
ZV9tYXRyaXhfdGlsZV91cGRhdGUoRXdrX1RpbGVfTWF0cml4ICp0bSwgdW5zaWduZWQgbG9uZyBj
b2wsIHVuc2lnbmVkIGxvbmcgcm93LCBjb25zdCBFaW5hX1JlY3RhbmdsZSAqdXBkYXRlKQorRWlu
YV9Cb29sIGV3a190aWxlX21hdHJpeF90aWxlX3VwZGF0ZShFd2tfVGlsZV9NYXRyaXgqIHRtLCB1
bnNpZ25lZCBsb25nIGNvbCwgdW5zaWduZWQgbG9uZyByb3csIGNvbnN0IEVpbmFfUmVjdGFuZ2xl
KiB1cGRhdGUpCiB7CiAgICAgRWluYV9SZWN0YW5nbGUgbmV3X3VwZGF0ZTsKICAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodG0sIEVJTkFfRkFMU0UpOwpAQCAtNDAxLDI1ICs0MDEs
MjUgQEAgRWluYV9Cb29sIGV3a190aWxlX21hdHJpeF90aWxlX3VwZGF0ZShFd2tfVGlsZV9NYXRy
aXggKnRtLCB1bnNpZ25lZCBsb25nIGNvbCwgdW4KICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7
CiAgICAgfQogCi0gICAgaWYgKHVwZGF0ZS0+eCArIHVwZGF0ZS0+dyAtIDEgPj0gdG0tPnRpbGUu
dykKLSAgICAgICAgbmV3X3VwZGF0ZS53ID0gdG0tPnRpbGUudyAtIHVwZGF0ZS0+eDsKLSAgICBp
ZiAodXBkYXRlLT55ICsgdXBkYXRlLT5oIC0gMSA+PSB0bS0+dGlsZS5oKQotICAgICAgICBuZXdf
dXBkYXRlLmggPSB0bS0+dGlsZS5oIC0gdXBkYXRlLT55OworICAgIGlmICh1cGRhdGUtPnggKyB1
cGRhdGUtPncgLSAxID49IHRtLT50aWxlLndpZHRoKQorICAgICAgICBuZXdfdXBkYXRlLncgPSB0
bS0+dGlsZS53aWR0aCAtIHVwZGF0ZS0+eDsKKyAgICBpZiAodXBkYXRlLT55ICsgdXBkYXRlLT5o
IC0gMSA+PSB0bS0+dGlsZS5oZWlnaHQpCisgICAgICAgIG5ld191cGRhdGUuaCA9IHRtLT50aWxl
LmhlaWdodCAtIHVwZGF0ZS0+eTsKIAotICAgIEV3a19UaWxlKiB0ID0gc3RhdGljX2Nhc3Q8RXdr
X1RpbGUqPihlaW5hX21hdHJpeHNwYXJzZV9kYXRhX2lkeF9nZXQodG0tPm1hdHJpeCwgcm93LCBj
b2wpKTsKLSAgICBpZiAoIXQpCisgICAgRXdrX1RpbGUqIHRpbGUgPSBzdGF0aWNfY2FzdDxFd2tf
VGlsZSo+KGVpbmFfbWF0cml4c3BhcnNlX2RhdGFfaWR4X2dldCh0bS0+bWF0cml4LCByb3csIGNv
bCkpOworICAgIGlmICghdGlsZSkKICAgICAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIAotICAgIGlm
ICghdC0+dXBkYXRlcyAmJiAhdC0+c3RhdHMuZnVsbF91cGRhdGUpCi0gICAgICAgIHRtLT51cGRh
dGVzID0gZWluYV9saXN0X2FwcGVuZCh0bS0+dXBkYXRlcywgdCk7Ci0gICAgZXdrX3RpbGVfdXBk
YXRlX2FyZWEodCwgJm5ld191cGRhdGUpOworICAgIGlmICghdGlsZS0+dXBkYXRlcyAmJiAhdGls
ZS0+c3RhdHMuZnVsbF91cGRhdGUpCisgICAgICAgIHRtLT51cGRhdGVzID0gZWluYV9saXN0X2Fw
cGVuZCh0bS0+dXBkYXRlcywgdGlsZSk7CisgICAgZXdrX3RpbGVfdXBkYXRlX2FyZWEodGlsZSwg
Jm5ld191cGRhdGUpOwogCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotRWluYV9Cb29sIGV3
a190aWxlX21hdHJpeF90aWxlX3VwZGF0ZV9mdWxsKEV3a19UaWxlX01hdHJpeCAqdG0sIHVuc2ln
bmVkIGxvbmcgY29sLCB1bnNpZ25lZCBsb25nIHJvdykKK0VpbmFfQm9vbCBld2tfdGlsZV9tYXRy
aXhfdGlsZV91cGRhdGVfZnVsbChFd2tfVGlsZV9NYXRyaXgqIHRtLCB1bnNpZ25lZCBsb25nIGNv
bCwgdW5zaWduZWQgbG9uZyByb3cpCiB7Ci0gICAgRWluYV9NYXRyaXhzcGFyc2VfQ2VsbCAqY2Vs
bDsKKyAgICBFaW5hX01hdHJpeHNwYXJzZV9DZWxsKiBjZWxsOwogICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOX1ZBTCh0bSwgRUlOQV9GQUxTRSk7CiAKICAgICBpZiAoIWVpbmFfbWF0cml4
c3BhcnNlX2NlbGxfaWR4X2dldCh0bS0+bWF0cml4LCByb3csIGNvbCwgJmNlbGwpKQpAQCAtNDI4
LDMyICs0MjgsMzIgQEAgRWluYV9Cb29sIGV3a190aWxlX21hdHJpeF90aWxlX3VwZGF0ZV9mdWxs
KEV3a19UaWxlX01hdHJpeCAqdG0sIHVuc2lnbmVkIGxvbmcgY28KICAgICBpZiAoIWNlbGwpCiAg
ICAgICAgIHJldHVybiBFSU5BX1RSVUU7CiAKLSAgICBFd2tfVGlsZSogdCA9IHN0YXRpY19jYXN0
PEV3a19UaWxlKj4oZWluYV9tYXRyaXhzcGFyc2VfY2VsbF9kYXRhX2dldChjZWxsKSk7Ci0gICAg
aWYgKCF0KSB7CisgICAgRXdrX1RpbGUqIHRpbGUgPSBzdGF0aWNfY2FzdDxFd2tfVGlsZSo+KGVp
bmFfbWF0cml4c3BhcnNlX2NlbGxfZGF0YV9nZXQoY2VsbCkpOworICAgIGlmICghdGlsZSkgewog
ICAgICAgICBDUklUSUNBTCgibWF0cml4IGNlbGwgd2l0aCBubyB0aWxlISIpOwogICAgICAgICBy
ZXR1cm4gRUlOQV9UUlVFOwogICAgIH0KIAotICAgIGlmICghdC0+dXBkYXRlcyAmJiAhdC0+c3Rh
dHMuZnVsbF91cGRhdGUpCi0gICAgICAgIHRtLT51cGRhdGVzID0gZWluYV9saXN0X2FwcGVuZCh0
bS0+dXBkYXRlcywgdCk7Ci0gICAgZXdrX3RpbGVfdXBkYXRlX2Z1bGwodCk7CisgICAgaWYgKCF0
aWxlLT51cGRhdGVzICYmICF0aWxlLT5zdGF0cy5mdWxsX3VwZGF0ZSkKKyAgICAgICAgdG0tPnVw
ZGF0ZXMgPSBlaW5hX2xpc3RfYXBwZW5kKHRtLT51cGRhdGVzLCB0aWxlKTsKKyAgICBld2tfdGls
ZV91cGRhdGVfZnVsbCh0aWxlKTsKIAogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLXZvaWQg
ZXdrX3RpbGVfbWF0cml4X3RpbGVfdXBkYXRlc19jbGVhcihFd2tfVGlsZV9NYXRyaXggKnRtLCBF
d2tfVGlsZSAqdCkKK3ZvaWQgZXdrX3RpbGVfbWF0cml4X3RpbGVfdXBkYXRlc19jbGVhcihFd2tf
VGlsZV9NYXRyaXgqIHRtLCBFd2tfVGlsZSogdGlsZSkKIHsKICAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTih0bSk7Ci0gICAgaWYgKCF0LT51cGRhdGVzICYmICF0LT5zdGF0cy5mdWxsX3Vw
ZGF0ZSkKKyAgICBpZiAoIXRpbGUtPnVwZGF0ZXMgJiYgIXRpbGUtPnN0YXRzLmZ1bGxfdXBkYXRl
KQogICAgICAgICByZXR1cm47Ci0gICAgZXdrX3RpbGVfdXBkYXRlc19jbGVhcih0KTsKLSAgICB0
bS0+dXBkYXRlcyA9IGVpbmFfbGlzdF9yZW1vdmUodG0tPnVwZGF0ZXMsIHQpOworICAgIGV3a190
aWxlX3VwZGF0ZXNfY2xlYXIodGlsZSk7CisgICAgdG0tPnVwZGF0ZXMgPSBlaW5hX2xpc3RfcmVt
b3ZlKHRtLT51cGRhdGVzLCB0aWxlKTsKIH0KIAotc3RhdGljIEVpbmFfQm9vbCBfZXdrX3RpbGVf
bWF0cml4X3NsaWNlcl9zZXR1cChFd2tfVGlsZV9NYXRyaXggKnRtLCBjb25zdCBFaW5hX1JlY3Rh
bmdsZSAqYXJlYSwgZmxvYXQgem9vbSwgRWluYV9UaWxlX0dyaWRfU2xpY2VyICpzbGljZXIpCitz
dGF0aWMgRWluYV9Cb29sIF9ld2tfdGlsZV9tYXRyaXhfc2xpY2VyX3NldHVwKEV3a19UaWxlX01h
dHJpeCogdG0sIGNvbnN0IEVpbmFfUmVjdGFuZ2xlKiBhcmVhLCBmbG9hdCB6b29tLCBFaW5hX1Rp
bGVfR3JpZF9TbGljZXIqIHNsaWNlcikKIHsKICAgICB1bnNpZ25lZCBsb25nIHJvd3MsIGNvbHM7
Ci0gICAgRXZhc19Db29yZCB4LCB5LCB3LCBoLCB0dywgdGg7CisgICAgRXZhc19Db29yZCB4LCB5
LCB3aWR0aCwgaGVpZ2h0LCB0dywgdGg7CiAKICAgICBpZiAoYXJlYS0+dyA8PSAwIHx8IGFyZWEt
PmggPD0gMCkgewogICAgICAgICBXUk4oImludmFsaWQgYXJlYSByZWdpb246ICVkLCVkKyVkeCVk
LiIsCkBAIC00NjMsMzUgKzQ2MywzNSBAQCBzdGF0aWMgRWluYV9Cb29sIF9ld2tfdGlsZV9tYXRy
aXhfc2xpY2VyX3NldHVwKEV3a19UaWxlX01hdHJpeCAqdG0sIGNvbnN0IEVpbmFfUgogCiAgICAg
eCA9IGFyZWEtPng7CiAgICAgeSA9IGFyZWEtPnk7Ci0gICAgdyA9IGFyZWEtPnc7Ci0gICAgaCA9
IGFyZWEtPmg7CisgICAgd2lkdGggPSBhcmVhLT53OworICAgIGhlaWdodCA9IGFyZWEtPmg7CiAK
LSAgICB0dyA9IHRtLT50aWxlLnc7Ci0gICAgdGggPSB0bS0+dGlsZS5oOworICAgIHR3ID0gdG0t
PnRpbGUud2lkdGg7CisgICAgdGggPSB0bS0+dGlsZS5oZWlnaHQ7CiAKICAgICAvLyBjcm9wcGlu
ZyBhcmVhIHJlZ2lvbiB0byBmaXQgbWF0cml4CiAgICAgZWluYV9tYXRyaXhzcGFyc2Vfc2l6ZV9n
ZXQodG0tPm1hdHJpeCwgJnJvd3MsICZjb2xzKTsKICAgICBpZiAoeCA8IDApIHsKLSAgICAgICAg
dyArPSB4OworICAgICAgICB3aWR0aCArPSB4OwogICAgICAgICB4ID0gMDsKICAgICB9CiAgICAg
aWYgKHkgPCAwKSB7Ci0gICAgICAgIGggKz0geTsKKyAgICAgICAgaGVpZ2h0ICs9IHk7CiAgICAg
ICAgIHkgPSAwOwogICAgIH0KIAotICAgIGlmICh5ICsgaCAtIDEgPiAobG9uZykocm93cyAqIHRo
KSkKLSAgICAgICAgaCA9IHJvd3MgKiB0aCAtIHk7Ci0gICAgaWYgKHggKyB3IC0gMSA+IChsb25n
KShjb2xzICogdHcpKQotICAgICAgICB3ID0gY29scyAqIHR3IC0geDsKKyAgICBpZiAoeSArIGhl
aWdodCAtIDEgPiAobG9uZykocm93cyAqIHRoKSkKKyAgICAgICAgaGVpZ2h0ID0gcm93cyAqIHRo
IC0geTsKKyAgICBpZiAoeCArIHdpZHRoIC0gMSA+IChsb25nKShjb2xzICogdHcpKQorICAgICAg
ICB3aWR0aCA9IGNvbHMgKiB0dyAtIHg7CiAKLSAgICByZXR1cm4gZWluYV90aWxlX2dyaWRfc2xp
Y2VyX3NldHVwKHNsaWNlciwgeCwgeSwgdywgaCwgdHcsIHRoKTsKKyAgICByZXR1cm4gZWluYV90
aWxlX2dyaWRfc2xpY2VyX3NldHVwKHNsaWNlciwgeCwgeSwgd2lkdGgsIGhlaWdodCwgdHcsIHRo
KTsKIH0KIAogCi1FaW5hX0Jvb2wgZXdrX3RpbGVfbWF0cml4X3VwZGF0ZShFd2tfVGlsZV9NYXRy
aXggKnRtLCBjb25zdCBFaW5hX1JlY3RhbmdsZSAqdXBkYXRlLCBmbG9hdCB6b29tKQorRWluYV9C
b29sIGV3a190aWxlX21hdHJpeF91cGRhdGUoRXdrX1RpbGVfTWF0cml4KiB0bSwgY29uc3QgRWlu
YV9SZWN0YW5nbGUqIHVwZGF0ZSwgZmxvYXQgem9vbSkKIHsKLSAgICBjb25zdCBFaW5hX1RpbGVf
R3JpZF9JbmZvICppbmZvOworICAgIGNvbnN0IEVpbmFfVGlsZV9HcmlkX0luZm8qIGluZm87CiAg
ICAgRWluYV9UaWxlX0dyaWRfU2xpY2VyIHNsaWNlcjsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTl9WQUwodG0sIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOX1ZBTCh1cGRhdGUsIEVJTkFfRkFMU0UpOwpAQCAtNTEzLDI1ICs1MTMsMjUgQEAgRWluYV9C
b29sIGV3a190aWxlX21hdHJpeF91cGRhdGUoRXdrX1RpbGVfTWF0cml4ICp0bSwgY29uc3QgRWlu
YV9SZWN0YW5nbGUgKnVwZGEKICAgICAgICAgY29sID0gaW5mby0+Y29sOwogICAgICAgICByb3cg
PSBpbmZvLT5yb3c7CiAKLSAgICAgICAgRXdrX1RpbGUqIHQgPSBzdGF0aWNfY2FzdDxFd2tfVGls
ZSo+KGVpbmFfbWF0cml4c3BhcnNlX2RhdGFfaWR4X2dldCh0bS0+bWF0cml4LCByb3csIGNvbCkp
OwotICAgICAgICBpZiAoIXQpCisgICAgICAgIEV3a19UaWxlKiB0aWxlID0gc3RhdGljX2Nhc3Q8
RXdrX1RpbGUqPihlaW5hX21hdHJpeHNwYXJzZV9kYXRhX2lkeF9nZXQodG0tPm1hdHJpeCwgcm93
LCBjb2wpKTsKKyAgICAgICAgaWYgKCF0aWxlKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAg
ICAgICAgaWYgKCF0LT51cGRhdGVzICYmICF0LT5zdGF0cy5mdWxsX3VwZGF0ZSkKLSAgICAgICAg
ICAgIHRtLT51cGRhdGVzID0gZWluYV9saXN0X2FwcGVuZCh0bS0+dXBkYXRlcywgdCk7CisgICAg
ICAgIGlmICghdGlsZS0+dXBkYXRlcyAmJiAhdGlsZS0+c3RhdHMuZnVsbF91cGRhdGUpCisgICAg
ICAgICAgICB0bS0+dXBkYXRlcyA9IGVpbmFfbGlzdF9hcHBlbmQodG0tPnVwZGF0ZXMsIHRpbGUp
OwogICAgICAgICBpZiAoaW5mby0+ZnVsbCkKLSAgICAgICAgICAgIGV3a190aWxlX3VwZGF0ZV9m
dWxsKHQpOworICAgICAgICAgICAgZXdrX3RpbGVfdXBkYXRlX2Z1bGwodGlsZSk7CiAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgIGV3a190aWxlX3VwZGF0ZV9hcmVhKHQsICZpbmZvLT5yZWN0KTsK
KyAgICAgICAgICAgIGV3a190aWxlX3VwZGF0ZV9hcmVhKHRpbGUsICZpbmZvLT5yZWN0KTsKICAg
ICB9CiAKIAogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLXZvaWQgZXdrX3RpbGVfbWF0cml4
X3VwZGF0ZXNfcHJvY2VzcyhFd2tfVGlsZV9NYXRyaXggKnRtKQordm9pZCBld2tfdGlsZV9tYXRy
aXhfdXBkYXRlc19wcm9jZXNzKEV3a19UaWxlX01hdHJpeCogdG0pCiB7Ci0gICAgRWluYV9MaXN0
ICpsLCAqbF9uZXh0OworICAgIEVpbmFfTGlzdCogbCwgKiBsX25leHQ7CiAgICAgdm9pZCogaXRl
bTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0bSk7CiAKQEAgLTU0Niw3ICs1NDYs
NyBAQCB2b2lkIGV3a190aWxlX21hdHJpeF91cGRhdGVzX3Byb2Nlc3MoRXdrX1RpbGVfTWF0cml4
ICp0bSkKICAgICB9CiB9CiAKLXZvaWQgZXdrX3RpbGVfbWF0cml4X3VwZGF0ZXNfY2xlYXIoRXdr
X1RpbGVfTWF0cml4ICp0bSkKK3ZvaWQgZXdrX3RpbGVfbWF0cml4X3VwZGF0ZXNfY2xlYXIoRXdr
X1RpbGVfTWF0cml4KiB0bSkKIHsKICAgICB2b2lkKiBpdGVtOwogICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOKHRtKTsKQEAgLTU1NywxNSArNTU3LDE1IEBAIHZvaWQgZXdrX3RpbGVfbWF0
cml4X3VwZGF0ZXNfY2xlYXIoRXdrX1RpbGVfTWF0cml4ICp0bSkKIH0KIAogLy8gcmVtb3ZlIG1l
IGxhdGVyIQotdm9pZCBld2tfdGlsZV9tYXRyaXhfZGJnKGNvbnN0IEV3a19UaWxlX01hdHJpeCAq
dG0pCit2b2lkIGV3a190aWxlX21hdHJpeF9kYmcoY29uc3QgRXdrX1RpbGVfTWF0cml4KiB0bSkK
IHsKLSAgICBFaW5hX0l0ZXJhdG9yICppdCA9IGVpbmFfbWF0cml4c3BhcnNlX2l0ZXJhdG9yX2Nv
bXBsZXRlX25ldyh0bS0+bWF0cml4KTsKLSAgICBFaW5hX01hdHJpeHNwYXJzZV9DZWxsICpjZWxs
OworICAgIEVpbmFfSXRlcmF0b3IqIGl0ID0gZWluYV9tYXRyaXhzcGFyc2VfaXRlcmF0b3JfY29t
cGxldGVfbmV3KHRtLT5tYXRyaXgpOworICAgIEVpbmFfTWF0cml4c3BhcnNlX0NlbGwqIGNlbGw7
CiAgICAgRWluYV9Cb29sIGxhc3RfZW1wdHkgPSBFSU5BX0ZBTFNFOwogCiAjaWZkZWYgREVCVUdf
TUVNX0xFQUtTCi0gICAgcHJpbnRmKCJFd2tfVGlsZSBNYXRyaXg6IHRpbGVzWyslIlBSSXU2NCIs
LSUiUFJJdTY0IjolIlBSSXU2NCJdICIKLSAgICAgICAgICAgImJ5dGVzWyslIlBSSXU2NCIsLSUi
UFJJdTY0IjolIlBSSXU2NCJdXG4iLAorICAgIHByaW50ZigiRXdrX1RpbGUgTWF0cml4OiB0aWxl
c1srJSIgUFJJdTY0ICIsLSUiIFBSSXU2NCAiOiUiIFBSSXU2NCAiXSAiCisgICAgICAgICAgICJi
eXRlc1srJSIgUFJJdTY0ICIsLSUiIFBSSXU2NCAiOiUiIFBSSXU2NCAiXVxuIiwKICAgICAgICAg
ICAgdG0tPnN0YXRzLnRpbGVzLmFsbG9jYXRlZCwgdG0tPnN0YXRzLnRpbGVzLmZyZWVkLAogICAg
ICAgICAgICB0bS0+c3RhdHMudGlsZXMuYWxsb2NhdGVkIC0gdG0tPnN0YXRzLnRpbGVzLmZyZWVk
LAogICAgICAgICAgICB0bS0+c3RhdHMuYnl0ZXMuYWxsb2NhdGVkLCB0bS0+c3RhdHMuYnl0ZXMu
ZnJlZWQsCkBAIC01NzgsOCArNTc4LDggQEAgdm9pZCBld2tfdGlsZV9tYXRyaXhfZGJnKGNvbnN0
IEV3a19UaWxlX01hdHJpeCAqdG0pCiAgICAgICAgIHVuc2lnbmVkIGxvbmcgcm93LCBjb2w7CiAg
ICAgICAgIGVpbmFfbWF0cml4c3BhcnNlX2NlbGxfcG9zaXRpb25fZ2V0KGNlbGwsICZyb3csICZj
b2wpOwogCi0gICAgICAgIEV3a19UaWxlKiB0ID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGUqPihlaW5h
X21hdHJpeHNwYXJzZV9jZWxsX2RhdGFfZ2V0KGNlbGwpKTsKLSAgICAgICAgaWYgKCF0KSB7Cisg
ICAgICAgIEV3a19UaWxlKiB0aWxlID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGUqPihlaW5hX21hdHJp
eHNwYXJzZV9jZWxsX2RhdGFfZ2V0KGNlbGwpKTsKKyAgICAgICAgaWYgKCF0aWxlKSB7CiAgICAg
ICAgICAgICBpZiAoIWxhc3RfZW1wdHkpIHsKICAgICAgICAgICAgICAgICBsYXN0X2VtcHR5ID0g
RUlOQV9UUlVFOwogICAgICAgICAgICAgICAgIHByaW50ZigiRW1wdHk6Iik7CkBAIC01OTAsOCAr
NTkwLDggQEAgdm9pZCBld2tfdGlsZV9tYXRyaXhfZGJnKGNvbnN0IEV3a19UaWxlX01hdHJpeCAq
dG0pCiAgICAgICAgICAgICAgICAgbGFzdF9lbXB0eSA9IEVJTkFfRkFMU0U7CiAgICAgICAgICAg
ICAgICAgcHJpbnRmKCJcbiIpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgcHJpbnRmKCIl
M2x1LCUzbHUgJTEwcDoiLCBjb2wsIHJvdywgdCk7Ci0gICAgICAgICAgICBwcmludGYoIiBbJTNs
dSwlM2x1ICsgJWR4JWQgQCAlMC4zZl0lYyIsIHQtPmNvbCwgdC0+cm93LCB0LT53LCB0LT5oLCB0
LT56b29tLCB0LT52aXNpYmxlID8gJyonOiAnICcpOworICAgICAgICAgICAgcHJpbnRmKCIlM2x1
LCUzbHUgJTEwcDoiLCBjb2wsIHJvdywgdGlsZSk7CisgICAgICAgICAgICBwcmludGYoIiBbJTNs
dSwlM2x1ICsgJWR4JWQgQCAlMC4zZl0lYyIsIHRpbGUtPmNvbCwgdGlsZS0+cm93LCB0aWxlLT53
aWR0aCwgdGlsZS0+aGVpZ2h0LCB0aWxlLT56b29tLCB0aWxlLT52aXNpYmxlID8gJyonIDogJyAn
KTsKICAgICAgICAgICAgIHByaW50ZigiXG4iKTsKICAgICAgICAgfQogICAgIH0KQEAgLTYxMSw3
ICs2MTEsNyBAQCB2b2lkIGV3a190aWxlX21hdHJpeF9kYmcoY29uc3QgRXdrX1RpbGVfTWF0cml4
ICp0bSkKICAqCiAgKiBAc2VlIGV3a190aWxlX21hdHJpeF90aGF3KCkKICAqLwotdm9pZCBld2tf
dGlsZV9tYXRyaXhfZnJlZXplKEV3a19UaWxlX01hdHJpeCAqdG0pCit2b2lkIGV3a190aWxlX21h
dHJpeF9mcmVlemUoRXdrX1RpbGVfTWF0cml4KiB0bSkKIHsKICAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTih0bSk7CiAgICAgaWYgKCF0bS0+ZnJvemVuKQpAQCAtNjI1LDcgKzYyNSw3IEBA
IHZvaWQgZXdrX3RpbGVfbWF0cml4X2ZyZWV6ZShFd2tfVGlsZV9NYXRyaXggKnRtKQogICogSWYg
dGhpcyBpcyB0aGUgbGFzdCBjb3VudGVycGFydCBvZiBmcmVlemUsIHRoZW4gbWFpbnRlbmFuY2Ug
dGFza3MKICAqIHdpbGwgcnVuIGltbWVkaWF0ZWx5LgogICovCi12b2lkIGV3a190aWxlX21hdHJp
eF90aGF3KEV3a19UaWxlX01hdHJpeCAqdG0pCit2b2lkIGV3a190aWxlX21hdHJpeF90aGF3KEV3
a19UaWxlX01hdHJpeCogdG0pCiB7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4odG0p
OwogICAgIGlmICghdG0tPmZyb3plbikgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwv
ZXdrL2V3a190aWxlZF9tYXRyaXguaCBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRf
bWF0cml4LmgKaW5kZXggYzQzN2MzNy4uZDNkYzUxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9lZmwvZXdrL2V3a190aWxlZF9tYXRyaXguaAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2sv
ZXdrX3RpbGVkX21hdHJpeC5oCkBAIC01Miw3ICs1Miw3IEBAIHZvaWQgZXdrX3RpbGVfbWF0cml4
X3RoYXcoRXdrX1RpbGVfTWF0cml4KiB0bSk7CiAvLyByZW1vdmUgbWUhCiB2b2lkIGV3a190aWxl
X21hdHJpeF9kYmcoY29uc3QgRXdrX1RpbGVfTWF0cml4KiB0bSk7CiB2b2lkIGV3a190aWxlX3Vu
dXNlZF9jYWNoZV9kYmcoY29uc3QgRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0dWMpOwotdm9pZCBl
d2tfdGlsZV9hY2NvdW50aW5nX2RiZyh2b2lkKTsKK3ZvaWQgZXdrX3RpbGVfYWNjb3VudGluZ19k
YmcoKTsKIAogCiAjZW5kaWYgLy8gZXdrX3RpbGVkX21hdHJpeF9oCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX21vZGVsLmNwcCBiL1NvdXJjZS9XZWJLaXQvZWZs
L2V3ay9ld2tfdGlsZWRfbW9kZWwuY3BwCmluZGV4IDYxNjg1NzIuLjc3YTNiMWEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfbW9kZWwuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfbW9kZWwuY3BwCkBAIC0zNiw3ICszNiw3IEBACiAj
aW5jbHVkZSA8c3lzL3RpbWUuaD4KICNlbmRpZgogCi0jZGVmaW5lIElEWChjb2wsIHJvdywgcm93
c3BhbikgKGNvbCArIChyb3cgKiByb3dzcGFuKSkKKyNkZWZpbmUgSURYKGNvbCwgcm93LCByb3dz
cGFuKSAoY29sICsgKHJvd2lkdGggKiByb3dzcGFuKSkKIAogI2lmZGVmIERFQlVHX01FTV9MRUFL
Uwogc3RhdGljIHVpbnQ2NF90IHRpbGVzX2FsbG9jYXRlZCA9IDA7CkBAIC01MywxNSArNTMsMTUg
QEAgc3RydWN0IHRpbGVfYWNjb3VudCB7CiB9OwogCiBzdGF0aWMgc2l6ZV90IGFjY291bnRpbmdf
bGVuID0gMDsKLXN0YXRpYyBzdHJ1Y3QgdGlsZV9hY2NvdW50ICphY2NvdW50aW5nID0gMDsKK3N0
YXRpYyBzdHJ1Y3QgdGlsZV9hY2NvdW50KiBhY2NvdW50aW5nID0gMDsKIAotc3RhdGljIGlubGlu
ZSBzdHJ1Y3QgdGlsZV9hY2NvdW50ICpfZXdrX3RpbGVfYWNjb3VudF9nZXQoY29uc3QgRXdrX1Rp
bGUgKnQpCitzdGF0aWMgaW5saW5lIHN0cnVjdCB0aWxlX2FjY291bnQqIF9ld2tfdGlsZV9hY2Nv
dW50X2dldChjb25zdCBFd2tfVGlsZSogdGlsZSkKIHsKLSAgICBzdHJ1Y3QgdGlsZV9hY2NvdW50
ICphY2M7CisgICAgc3RydWN0IHRpbGVfYWNjb3VudCogYWNjOwogICAgIHNpemVfdCBpOwogCiAg
ICAgZm9yIChpID0gMDsgaSA8IGFjY291bnRpbmdfbGVuOyBpKyspIHsKLSAgICAgICAgaWYgKGFj
Y291bnRpbmdbaV0uc2l6ZSA9PSB0LT53KQorICAgICAgICBpZiAoYWNjb3VudGluZ1tpXS5zaXpl
ID09IHRpbGUtPndpZHRoKQogICAgICAgICAgICAgcmV0dXJuIGFjY291bnRpbmcgKyBpOwogICAg
IH0KIApAQCAtNjksNyArNjksNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCB0aWxlX2FjY291bnQg
Kl9ld2tfdGlsZV9hY2NvdW50X2dldChjb25zdCBFd2tfVGlsZSAqdCkKICAgICBSRUFMTE9DX09S
X09PTV9SRVQoYWNjb3VudGluZywgaSwgMCk7CiAKICAgICBhY2MgPSBhY2NvdW50aW5nICsgYWNj
b3VudGluZ19sZW47Ci0gICAgYWNjLT5zaXplID0gdC0+dzsKKyAgICBhY2MtPnNpemUgPSB0aWxl
LT53aWR0aDsKICAgICBhY2MtPnRpbGVzLmFsbG9jYXRlZCA9IDA7CiAgICAgYWNjLT50aWxlcy5m
cmVlZCA9IDA7CiAgICAgYWNjLT5ieXRlcy5hbGxvY2F0ZWQgPSAwOwpAQCAtODAsNDAgKzgwLDQw
IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHRpbGVfYWNjb3VudCAqX2V3a190aWxlX2FjY291bnRf
Z2V0KGNvbnN0IEV3a19UaWxlICp0KQogICAgIHJldHVybiBhY2M7CiB9CiAKLXN0YXRpYyBpbmxp
bmUgdm9pZCBfZXdrX3RpbGVfYWNjb3VudF9hbGxvY2F0ZWQoY29uc3QgRXdrX1RpbGUgKnQpCitz
dGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlX2FjY291bnRfYWxsb2NhdGVkKGNvbnN0IEV3a19U
aWxlKiB0aWxlKQogewotICAgIHN0cnVjdCB0aWxlX2FjY291bnQgKmFjYyA9IF9ld2tfdGlsZV9h
Y2NvdW50X2dldCh0KTsKKyAgICBzdHJ1Y3QgdGlsZV9hY2NvdW50KiBhY2MgPSBfZXdrX3RpbGVf
YWNjb3VudF9nZXQodGlsZSk7CiAgICAgaWYgKCFhY2MpCiAgICAgICAgIHJldHVybjsKLSAgICBh
Y2MtPmJ5dGVzLmFsbG9jYXRlZCArPSB0LT5ieXRlczsKKyAgICBhY2MtPmJ5dGVzLmFsbG9jYXRl
ZCArPSB0aWxlLT5ieXRlczsKICAgICBhY2MtPnRpbGVzLmFsbG9jYXRlZCsrOwogCi0gICAgYnl0
ZXNfYWxsb2NhdGVkICs9IHQtPmJ5dGVzOworICAgIGJ5dGVzX2FsbG9jYXRlZCArPSB0aWxlLT5i
eXRlczsKICAgICB0aWxlc19hbGxvY2F0ZWQrKzsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIF9l
d2tfdGlsZV9hY2NvdW50X2ZyZWVkKGNvbnN0IEV3a19UaWxlICp0KQorc3RhdGljIGlubGluZSB2
b2lkIF9ld2tfdGlsZV9hY2NvdW50X2ZyZWVkKGNvbnN0IEV3a19UaWxlKiB0aWxlKQogewotICAg
IHN0cnVjdCB0aWxlX2FjY291bnQgKmFjYyA9IF9ld2tfdGlsZV9hY2NvdW50X2dldCh0KTsKKyAg
ICBzdHJ1Y3QgdGlsZV9hY2NvdW50KiBhY2MgPSBfZXdrX3RpbGVfYWNjb3VudF9nZXQodGlsZSk7
CiAgICAgaWYgKCFhY2MpCiAgICAgICAgIHJldHVybjsKIAotICAgIGFjYy0+Ynl0ZXMuZnJlZWQg
Kz0gdC0+Ynl0ZXM7CisgICAgYWNjLT5ieXRlcy5mcmVlZCArPSB0aWxlLT5ieXRlczsKICAgICBh
Y2MtPnRpbGVzLmZyZWVkKys7CiAKLSAgICBieXRlc19mcmVlZCArPSB0LT5ieXRlczsKKyAgICBi
eXRlc19mcmVlZCArPSB0aWxlLT5ieXRlczsKICAgICB0aWxlc19mcmVlZCsrOwogfQogCi12b2lk
IGV3a190aWxlX2FjY291bnRpbmdfZGJnKHZvaWQpCit2b2lkIGV3a190aWxlX2FjY291bnRpbmdf
ZGJnKCkKIHsKLSAgICBzdHJ1Y3QgdGlsZV9hY2NvdW50ICphY2M7Ci0gICAgc3RydWN0IHRpbGVf
YWNjb3VudCAqYWNjX2VuZDsKKyAgICBzdHJ1Y3QgdGlsZV9hY2NvdW50KiBhY2M7CisgICAgc3Ry
dWN0IHRpbGVfYWNjb3VudCogYWNjX2VuZDsKIAotICAgIHByaW50ZigiVElMRSBCQUxBTkNFOiB0
aWxlc1srJSJQUkl1NjQiLC0lIlBSSXU2NCI6JSJQUkl1NjQiXSAiCi0gICAgICAgICAgICJieXRl
c1srJSJQUkl1NjQiLC0lIlBSSXU2NCI6JSJQUkl1NjQiXVxuIiwKLSAgICAgICAgICAgIHRpbGVz
X2FsbG9jYXRlZCwgdGlsZXNfZnJlZWQsIHRpbGVzX2FsbG9jYXRlZCAtIHRpbGVzX2ZyZWVkLAot
ICAgICAgICAgICAgYnl0ZXNfYWxsb2NhdGVkLCBieXRlc19mcmVlZCwgYnl0ZXNfYWxsb2NhdGVk
IC0gYnl0ZXNfZnJlZWQpOworICAgIHByaW50ZigiVElMRSBCQUxBTkNFOiB0aWxlc1srJSIgUFJJ
dTY0ICIsLSUiIFBSSXU2NCAiOiUiIFBSSXU2NCAiXSAiCisgICAgICAgICAgICJieXRlc1srJSIg
UFJJdTY0ICIsLSUiIFBSSXU2NCAiOiUiIFBSSXU2NCAiXVxuIiwKKyAgICAgICAgICAgdGlsZXNf
YWxsb2NhdGVkLCB0aWxlc19mcmVlZCwgdGlsZXNfYWxsb2NhdGVkIC0gdGlsZXNfZnJlZWQsCisg
ICAgICAgICAgIGJ5dGVzX2FsbG9jYXRlZCwgYnl0ZXNfZnJlZWQsIGJ5dGVzX2FsbG9jYXRlZCAt
IGJ5dGVzX2ZyZWVkKTsKIAogICAgIGlmICghYWNjb3VudGluZ19sZW4pCiAgICAgICAgIHJldHVy
bjsKQEAgLTEyNyw4ICsxMjcsOCBAQCB2b2lkIGV3a190aWxlX2FjY291bnRpbmdfZGJnKHZvaWQp
CiAgICAgICAgIHRpbGVzID0gYWNjLT50aWxlcy5hbGxvY2F0ZWQgLSBhY2MtPnRpbGVzLmZyZWVk
OwogICAgICAgICBieXRlcyA9IGFjYy0+Ynl0ZXMuYWxsb2NhdGVkIC0gYWNjLT5ieXRlcy5mcmVl
ZDsKIAotICAgICAgICBwcmludGYoIiAgICU0ZDogdGlsZXNbKyU0IlBSSXU2NCIsLSU0IlBSSXU2
NCI6JTQiUFJJdTY0Il0gIgotICAgICAgICAgICAgICAgImJ5dGVzWyslOCJQUkl1NjQiLC0lOCJQ
Ukl1NjQiOiU4IlBSSXU2NCJdJXNcbiIsCisgICAgICAgIHByaW50ZigiICAgJTRkOiB0aWxlc1sr
JTQiIFBSSXU2NCAiLC0lNCIgUFJJdTY0ICI6JTQiIFBSSXU2NCAiXSAiCisgICAgICAgICAgICAg
ICAiYnl0ZXNbKyU4IiBQUkl1NjQgIiwtJTgiIFBSSXU2NCAiOiU4IiBQUkl1NjQgIl0lc1xuIiwK
ICAgICAgICAgICAgICAgIGFjYy0+c2l6ZSwKICAgICAgICAgICAgICAgIGFjYy0+dGlsZXMuYWxs
b2NhdGVkLCBhY2MtPnRpbGVzLmZyZWVkLCB0aWxlcywKICAgICAgICAgICAgICAgIGFjYy0+Ynl0
ZXMuYWxsb2NhdGVkLCBhY2MtPmJ5dGVzLmZyZWVkLCBieXRlcywKQEAgLTEzOCwyNSArMTM4LDI1
IEBAIHZvaWQgZXdrX3RpbGVfYWNjb3VudGluZ19kYmcodm9pZCkKIH0KICNlbHNlCiAKLXN0YXRp
YyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVfYWNjb3VudF9hbGxvY2F0ZWQoY29uc3QgRXdrX1RpbGUg
KnQpIHsgfQotc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZV9hY2NvdW50X2ZyZWVkKGNvbnN0
IEV3a19UaWxlICp0KSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVfYWNjb3VudF9h
bGxvY2F0ZWQoY29uc3QgRXdrX1RpbGUqIHRpbGUpIHsgfQorc3RhdGljIGlubGluZSB2b2lkIF9l
d2tfdGlsZV9hY2NvdW50X2ZyZWVkKGNvbnN0IEV3a19UaWxlKiB0aWxlKSB7IH0KIAotdm9pZCBl
d2tfdGlsZV9hY2NvdW50aW5nX2RiZyh2b2lkKQordm9pZCBld2tfdGlsZV9hY2NvdW50aW5nX2Ri
ZygpCiB7CiAgICAgcHJpbnRmKCJjb21waWxlIHdlYmtpdCB3aXRoIERFQlVHX01FTV9MRUFLUyBk
ZWZpbmVkIVxuIik7CiB9CiAjZW5kaWYKIAotc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZV9w
YWludF9yZ2I4ODgoRXdrX1RpbGUgKnQsIHVpbnQ4X3QgciwgdWludDhfdCBnLCB1aW50OF90IGIp
CitzdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlX3BhaW50X3JnYjg4OChFd2tfVGlsZSogdGls
ZSwgdWludDhfdCByLCB1aW50OF90IGcsIHVpbnQ4X3QgYikKIHsKLSAgICB1aW50MzJfdCAqZHN0
MzIsICpkc3QzMl9lbmQsIGMxOwotICAgIHVpbnQ2NF90ICpkc3Q2NCwgKmRzdDY0X2VuZCwgYzI7
CisgICAgdWludDMyX3QqIGRzdDMyLCAqIGRzdDMyX2VuZCwgYzE7CisgICAgdWludDY0X3QqIGRz
dDY0LCAqIGRzdDY0X2VuZCwgYzI7CiAKICAgICBjMSA9IDB4ZmYwMDAwMDAgfCAoKHVpbnQzMl90
KXIgPDwgMTYpIHwgKCh1aW50MzJfdClnIDw8IDgpIHwgYjsKICAgICBjMiA9ICgodWludDY0X3Qp
YzEgPDwgMzIpIHwgYzE7CiAKLSAgICBkc3Q2NCA9ICh1aW50NjRfdCAqKXQtPnBpeGVsczsKLSAg
ICBkc3Q2NF9lbmQgPSBkc3Q2NCArICgodC0+Ynl0ZXMgLyA4KSAmIH43KTsKKyAgICBkc3Q2NCA9
ICh1aW50NjRfdCopdGlsZS0+cGl4ZWxzOworICAgIGRzdDY0X2VuZCA9IGRzdDY0ICsgKCh0aWxl
LT5ieXRlcyAvIDgpICYgfjcpOwogICAgIGZvciAoOyBkc3Q2NCA8IGRzdDY0X2VuZDsgZHN0NjQg
Kz0gOCkgewogICAgICAgICAvKiBUT0RPOiBBUk0gYWRkIHBsZCBvciBORU9OIGluc3RydWN0aW9u
cyAqLwogICAgICAgICBkc3Q2NFswXSA9IGMyOwpAQCAtMTY5LDE2ICsxNjksMTYgQEAgc3RhdGlj
IGlubGluZSB2b2lkIF9ld2tfdGlsZV9wYWludF9yZ2I4ODgoRXdrX1RpbGUgKnQsIHVpbnQ4X3Qg
ciwgdWludDhfdCBnLCB1aW4KICAgICAgICAgZHN0NjRbN10gPSBjMjsKICAgICB9CiAKLSAgICBk
c3QzMiA9ICh1aW50MzJfdCAqKWRzdDY0X2VuZDsKLSAgICBkc3QzMl9lbmQgPSAodWludDMyX3Qg
KikodC0+cGl4ZWxzICsgdC0+Ynl0ZXMpOworICAgIGRzdDMyID0gKHVpbnQzMl90Kilkc3Q2NF9l
bmQ7CisgICAgZHN0MzJfZW5kID0gKHVpbnQzMl90KikodGlsZS0+cGl4ZWxzICsgdGlsZS0+Ynl0
ZXMpOwogICAgIGZvciAoOyBkc3QzMiA8IGRzdDMyX2VuZDsgZHN0MzIrKykKICAgICAgICAgKmRz
dDMyID0gYzE7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVfcGFpbnRfcmdiNTY1
KEV3a19UaWxlICp0LCB1aW50OF90IHIsIHVpbnQ4X3QgZywgdWludDhfdCBiKQorc3RhdGljIGlu
bGluZSB2b2lkIF9ld2tfdGlsZV9wYWludF9yZ2I1NjUoRXdrX1RpbGUqIHRpbGUsIHVpbnQ4X3Qg
ciwgdWludDhfdCBnLCB1aW50OF90IGIpCiB7Ci0gICAgdWludDE2X3QgKmRzdDE2LCAqZHN0MTZf
ZW5kLCBjMTsKLSAgICB1aW50NjRfdCAqZHN0NjQsICpkc3Q2NF9lbmQsIGMyOworICAgIHVpbnQx
Nl90KiBkc3QxNiwgKiBkc3QxNl9lbmQsIGMxOworICAgIHVpbnQ2NF90KiBkc3Q2NCwgKiBkc3Q2
NF9lbmQsIGMyOwogCiAgICAgYzEgPSAoKCgociA+PiAzKSAmIDB4MWYpIDw8IDExKSB8CiAgICAg
ICAgICAgKCgoZyA+PiAyKSAmIDB4M2YpIDw8IDUpIHwKQEAgLTE4Nyw4ICsxODcsOCBAQCBzdGF0
aWMgaW5saW5lIHZvaWQgX2V3a190aWxlX3BhaW50X3JnYjU2NShFd2tfVGlsZSAqdCwgdWludDhf
dCByLCB1aW50OF90IGcsIHVpbgogICAgIGMyID0gKCgodWludDY0X3QpYzEgPDwgNDgpIHwgKCh1
aW50NjRfdCljMSA8PCAzMikgfAogICAgICAgICAgICgodWludDY0X3QpYzEgPDwgMTYpIHwgYzEp
OwogCi0gICAgZHN0NjQgPSAodWludDY0X3QgKil0LT5waXhlbHM7Ci0gICAgZHN0NjRfZW5kID0g
ZHN0NjQgKyAoKHQtPmJ5dGVzIC8gOCkgJiB+Nyk7CisgICAgZHN0NjQgPSAodWludDY0X3QqKXRp
bGUtPnBpeGVsczsKKyAgICBkc3Q2NF9lbmQgPSBkc3Q2NCArICgodGlsZS0+Ynl0ZXMgLyA4KSAm
IH43KTsKICAgICBmb3IgKDsgZHN0NjQgPCBkc3Q2NF9lbmQ7IGRzdDY0ICs9IDgpIHsKICAgICAg
ICAgLyogVE9ETzogQVJNIGFkZCBwbGQgb3IgTkVPTiBpbnN0cnVjdGlvbnMgKi8KICAgICAgICAg
ZHN0NjRbMF0gPSBjMjsKQEAgLTIwMSwyMCArMjAxLDIwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBf
ZXdrX3RpbGVfcGFpbnRfcmdiNTY1KEV3a19UaWxlICp0LCB1aW50OF90IHIsIHVpbnQ4X3QgZywg
dWluCiAgICAgICAgIGRzdDY0WzddID0gYzI7CiAgICAgfQogCi0gICAgZHN0MTYgPSAodWludDE2
X3QgKilkc3QxNl9lbmQ7Ci0gICAgZHN0MTZfZW5kID0gKHVpbnQxNl90ICopKHQtPnBpeGVscyAr
IHQtPmJ5dGVzKTsKKyAgICBkc3QxNiA9ICh1aW50MTZfdCopZHN0MTZfZW5kOworICAgIGRzdDE2
X2VuZCA9ICh1aW50MTZfdCopKHRpbGUtPnBpeGVscyArIHRpbGUtPmJ5dGVzKTsKICAgICBmb3Ig
KDsgZHN0MTYgPCBkc3QxNl9lbmQ7IGRzdDE2KyspCiAgICAgICAgICpkc3QxNiA9IGMxOwogfQog
Ci1zdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlX3BhaW50KEV3a19UaWxlICp0LCB1aW50OF90
IHIsIHVpbnQ4X3QgZywgdWludDhfdCBiKQorc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZV9w
YWludChFd2tfVGlsZSogdGlsZSwgdWludDhfdCByZWQsIHVpbnQ4X3QgZ3JlZW4sIHVpbnQ4X3Qg
Ymx1ZSkKIHsKLSAgICBpZiAodC0+Y3NwYWNlID09IEVWQVNfQ09MT1JTUEFDRV9BUkdCODg4OCkK
LSAgICAgICAgX2V3a190aWxlX3BhaW50X3JnYjg4OCh0LCByLCBnLCBiKTsKLSAgICBlbHNlIGlm
ICh0LT5jc3BhY2UgPT0gRVZBU19DT0xPUlNQQUNFX1JHQjU2NV9BNVApCi0gICAgICAgIF9ld2tf
dGlsZV9wYWludF9yZ2I1NjUodCwgciwgZywgYik7CisgICAgaWYgKHRpbGUtPmNzcGFjZSA9PSBF
VkFTX0NPTE9SU1BBQ0VfQVJHQjg4ODgpCisgICAgICAgIF9ld2tfdGlsZV9wYWludF9yZ2I4ODgo
dGlsZSwgcmVkLCBncmVlbiwgYmx1ZSk7CisgICAgZWxzZSBpZiAodGlsZS0+Y3NwYWNlID09IEVW
QVNfQ09MT1JTUEFDRV9SR0I1NjVfQTVQKQorICAgICAgICBfZXdrX3RpbGVfcGFpbnRfcmdiNTY1
KHRpbGUsIHJlZCwgZ3JlZW4sIGJsdWUpOwogICAgIGVsc2UKLSAgICAgICAgRVJSKCJ1bmtub3du
IGNvbG9yIHNwYWNlOiAlZCIsIHQtPmNzcGFjZSk7CisgICAgICAgIEVSUigidW5rbm93biBjb2xv
ciBzcGFjZTogJWQiLCB0aWxlLT5jc3BhY2UpOwogfQogCiAvKioKQEAgLTIzMiwxNTQgKzIzMiwx
NTQgQEAgc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZV9wYWludChFd2tfVGlsZSAqdCwgdWlu
dDhfdCByLCB1aW50OF90IGcsIHVpbnQ4X3QgYikKICAqIGV3a190aWxlX3VwZGF0ZXNfY2xlYXIo
KSB0byBjaGFuZ2UgQGMgc3RhdHMubWlzc2VzLAogICogQGMgc3RhdHMuZnVsbF91cGRhdGUgYW5k
IEBjIHVwZGF0ZXMuCiAgKi8KLUV3a19UaWxlICpld2tfdGlsZV9uZXcoRXZhcyAqZXZhcywgRXZh
c19Db29yZCB3LCBFdmFzX0Nvb3JkIGgsIGZsb2F0IHpvb20sIEV2YXNfQ29sb3JzcGFjZSBjc3Bh
Y2UpCitFd2tfVGlsZSogZXdrX3RpbGVfbmV3KEV2YXMqIGV2YXMsIEV2YXNfQ29vcmQgd2lkdGgs
IEV2YXNfQ29vcmQgaGVpZ2h0LCBmbG9hdCB6b29tLCBFdmFzX0NvbG9yc3BhY2UgY3NwYWNlKQog
ewotICAgIEV2YXNfQ29vcmQgKmVjOwotICAgIEV2YXNfQ29sb3JzcGFjZSAqZWNzOwotICAgIGZs
b2F0ICpmOwotICAgIHNpemVfdCAqczsKLSAgICBFd2tfVGlsZSAqdDsKKyAgICBFdmFzX0Nvb3Jk
KiBlYzsKKyAgICBFdmFzX0NvbG9yc3BhY2UqIGVjczsKKyAgICBmbG9hdCogZjsKKyAgICBzaXpl
X3QqIHM7CisgICAgRXdrX1RpbGUqIHRpbGU7CiAgICAgdW5zaWduZWQgaW50IGFyZWE7CiAgICAg
c2l6ZV90IGJ5dGVzOwogICAgIGNhaXJvX2Zvcm1hdF90IGZvcm1hdDsKICAgICBjYWlyb19zdGF0
dXNfdCBzdGF0dXM7CiAgICAgaW50IHN0cmlkZTsKLSAgICBFY29yZV9FdmFzICplZTsKLSAgICBj
b25zdCBjaGFyICplbmdpbmU7CisgICAgRWNvcmVfRXZhcyogZWU7CisgICAgY29uc3QgY2hhciog
ZW5naW5lOwogCi0gICAgYXJlYSA9IHcgKiBoOworICAgIGFyZWEgPSB3aWR0aCAqIGhlaWdodDsK
IAogICAgIGlmIChjc3BhY2UgPT0gRVZBU19DT0xPUlNQQUNFX0FSR0I4ODg4KSB7CiAgICAgICAg
IGJ5dGVzID0gYXJlYSAqIDQ7Ci0gICAgICAgIHN0cmlkZSA9IHcgKiA0OworICAgICAgICBzdHJp
ZGUgPSB3aWR0aCAqIDQ7CiAgICAgICAgIGZvcm1hdCA9IENBSVJPX0ZPUk1BVF9BUkdCMzI7CiAg
ICAgfSBlbHNlIGlmIChjc3BhY2UgPT0gRVZBU19DT0xPUlNQQUNFX1JHQjU2NV9BNVApIHsKICAg
ICAgICAgYnl0ZXMgPSBhcmVhICogMjsKLSAgICAgICAgc3RyaWRlID0gdyAqIDI7CisgICAgICAg
IHN0cmlkZSA9IHdpZHRoICogMjsKICAgICAgICAgZm9ybWF0ID0gQ0FJUk9fRk9STUFUX1JHQjE2
XzU2NTsKICAgICB9IGVsc2UgewogICAgICAgICBFUlIoInVua25vd24gY29sb3Igc3BhY2U6ICVk
IiwgY3NwYWNlKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgREJHKCJzaXplOiAl
ZHglZCAoJWQpLCB6b29tOiAlZiwgY3NwYWNlPSVkIiwgdywgaCwgYXJlYSwgKGRvdWJsZSl6b29t
LCBjc3BhY2UpOworICAgIERCRygic2l6ZTogJWR4JWQgKCVkKSwgem9vbTogJWYsIGNzcGFjZT0l
ZCIsIHdpZHRoLCBoZWlnaHQsIGFyZWEsIChkb3VibGUpem9vbSwgY3NwYWNlKTsKIAotICAgIHQg
PSBzdGF0aWNfY2FzdDxFd2tfVGlsZSo+KG1hbGxvYyhzaXplb2YoRXdrX1RpbGUpKSk7Ci0gICAg
aWYgKCF0KQorICAgIHRpbGUgPSBzdGF0aWNfY2FzdDxFd2tfVGlsZSo+KG1hbGxvYyhzaXplb2Yo
RXdrX1RpbGUpKSk7CisgICAgaWYgKCF0aWxlKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIHQt
PmltYWdlID0gZXZhc19vYmplY3RfaW1hZ2VfYWRkKGV2YXMpOworICAgIHRpbGUtPmltYWdlID0g
ZXZhc19vYmplY3RfaW1hZ2VfYWRkKGV2YXMpOwogCiAgICAgZWUgPSBlY29yZV9ldmFzX2Vjb3Jl
X2V2YXNfZ2V0KGV2YXMpOwogICAgIGVuZ2luZSA9IGVjb3JlX2V2YXNfZW5naW5lX25hbWVfZ2V0
KGVlKTsKICAgICBpZiAoZW5naW5lICYmICFzdHJjbXAoZW5naW5lLCAib3BlbmdsX3gxMSIpKQot
ICAgICAgICBldmFzX29iamVjdF9pbWFnZV9jb250ZW50X2hpbnRfc2V0KHQtPmltYWdlLCBFVkFT
X0lNQUdFX0NPTlRFTlRfSElOVF9EWU5BTUlDKTsKKyAgICAgICAgZXZhc19vYmplY3RfaW1hZ2Vf
Y29udGVudF9oaW50X3NldCh0aWxlLT5pbWFnZSwgRVZBU19JTUFHRV9DT05URU5UX0hJTlRfRFlO
QU1JQyk7CiAKLSAgICB0LT52aXNpYmxlID0gMDsKLSAgICB0LT51cGRhdGVzID0gMDsKKyAgICB0
aWxlLT52aXNpYmxlID0gMDsKKyAgICB0aWxlLT51cGRhdGVzID0gMDsKIAotICAgIG1lbXNldCgm
dC0+c3RhdHMsIDAsIHNpemVvZihFd2tfVGlsZV9TdGF0cykpOwotICAgIHQtPnN0YXRzLmFyZWEg
PSBhcmVhOworICAgIG1lbXNldCgmdGlsZS0+c3RhdHMsIDAsIHNpemVvZihFd2tfVGlsZV9TdGF0
cykpOworICAgIHRpbGUtPnN0YXRzLmFyZWEgPSBhcmVhOwogCiAgICAgLyogdWdseSwgYnV0IGxl
dCdzIGF2b2lkIGF0IGFsbCBjb3N0cyBoYXZpbmcgdXNlcnMgdG8gbW9kaWZ5IHRob3NlICovCi0g
ICAgZWMgPSAoRXZhc19Db29yZCAqKSZ0LT53OwotICAgICplYyA9IHc7CisgICAgZWMgPSAoRXZh
c19Db29yZCopJnRpbGUtPndpZHRoOworICAgICplYyA9IHdpZHRoOwogCi0gICAgZWMgPSAoRXZh
c19Db29yZCAqKSZ0LT5oOwotICAgICplYyA9IGg7CisgICAgZWMgPSAoRXZhc19Db29yZCopJnRp
bGUtPmhlaWdodDsKKyAgICAqZWMgPSBoZWlnaHQ7CiAKLSAgICBlY3MgPSAoRXZhc19Db2xvcnNw
YWNlICopJnQtPmNzcGFjZTsKKyAgICBlY3MgPSAoRXZhc19Db2xvcnNwYWNlKikmdGlsZS0+Y3Nw
YWNlOwogICAgICplY3MgPSBjc3BhY2U7CiAKLSAgICBmID0gKGZsb2F0ICopJnQtPnpvb207Cisg
ICAgZiA9IChmbG9hdCopJnRpbGUtPnpvb207CiAgICAgKmYgPSB6b29tOwogCi0gICAgcyA9IChz
aXplX3QgKikmdC0+Ynl0ZXM7CisgICAgcyA9IChzaXplX3QqKSZ0aWxlLT5ieXRlczsKICAgICAq
cyA9IGJ5dGVzOwogCi0gICAgZXZhc19vYmplY3RfaW1hZ2Vfc2l6ZV9zZXQodC0+aW1hZ2UsIHQt
PncsIHQtPmgpOwotICAgIGV2YXNfb2JqZWN0X2ltYWdlX2NvbG9yc3BhY2Vfc2V0KHQtPmltYWdl
LCB0LT5jc3BhY2UpOwotICAgIHQtPnBpeGVscyA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihldmFz
X29iamVjdF9pbWFnZV9kYXRhX2dldCh0LT5pbWFnZSwgRUlOQV9UUlVFKSk7Ci0gICAgdC0+c3Vy
ZmFjZSA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKHQtPnBpeGVscywgZm9y
bWF0LCB3LCBoLCBzdHJpZGUpOwotICAgIHN0YXR1cyA9IGNhaXJvX3N1cmZhY2Vfc3RhdHVzKHQt
PnN1cmZhY2UpOworICAgIGV2YXNfb2JqZWN0X2ltYWdlX3NpemVfc2V0KHRpbGUtPmltYWdlLCB0
aWxlLT53aWR0aCwgdGlsZS0+aGVpZ2h0KTsKKyAgICBldmFzX29iamVjdF9pbWFnZV9jb2xvcnNw
YWNlX3NldCh0aWxlLT5pbWFnZSwgdGlsZS0+Y3NwYWNlKTsKKyAgICB0aWxlLT5waXhlbHMgPSBz
dGF0aWNfY2FzdDx1aW50OF90Kj4oZXZhc19vYmplY3RfaW1hZ2VfZGF0YV9nZXQodGlsZS0+aW1h
Z2UsIEVJTkFfVFJVRSkpOworICAgIHRpbGUtPnN1cmZhY2UgPSBjYWlyb19pbWFnZV9zdXJmYWNl
X2NyZWF0ZV9mb3JfZGF0YSh0aWxlLT5waXhlbHMsIGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgc3Ry
aWRlKTsKKyAgICBzdGF0dXMgPSBjYWlyb19zdXJmYWNlX3N0YXR1cyh0aWxlLT5zdXJmYWNlKTsK
ICAgICBpZiAoc3RhdHVzICE9IENBSVJPX1NUQVRVU19TVUNDRVNTKSB7CiAgICAgICAgIEVSUigi
ZmFpbGVkIHRvIGNyZWF0ZSBjYWlybyBzdXJmYWNlOiAlcyIsCiAgICAgICAgICAgICBjYWlyb19z
dGF0dXNfdG9fc3RyaW5nKHN0YXR1cykpOwotICAgICAgICBmcmVlKHQpOworICAgICAgICBmcmVl
KHRpbGUpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICB0LT5jYWlybyA9IGNhaXJv
X2NyZWF0ZSh0LT5zdXJmYWNlKTsKLSAgICBzdGF0dXMgPSBjYWlyb19zdGF0dXModC0+Y2Fpcm8p
OworICAgIHRpbGUtPmNhaXJvID0gY2Fpcm9fY3JlYXRlKHRpbGUtPnN1cmZhY2UpOworICAgIHN0
YXR1cyA9IGNhaXJvX3N0YXR1cyh0aWxlLT5jYWlybyk7CiAgICAgaWYgKHN0YXR1cyAhPSBDQUlS
T19TVEFUVVNfU1VDQ0VTUykgewogICAgICAgICBFUlIoImZhaWxlZCB0byBjcmVhdGUgY2Fpcm86
ICVzIiwgY2Fpcm9fc3RhdHVzX3RvX3N0cmluZyhzdGF0dXMpKTsKLSAgICAgICAgY2Fpcm9fc3Vy
ZmFjZV9kZXN0cm95KHQtPnN1cmZhY2UpOwotICAgICAgICBldmFzX29iamVjdF9kZWwodC0+aW1h
Z2UpOwotICAgICAgICBmcmVlKHQpOworICAgICAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3kodGls
ZS0+c3VyZmFjZSk7CisgICAgICAgIGV2YXNfb2JqZWN0X2RlbCh0aWxlLT5pbWFnZSk7CisgICAg
ICAgIGZyZWUodGlsZSk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIF9ld2tfdGls
ZV9hY2NvdW50X2FsbG9jYXRlZCh0KTsKKyAgICBfZXdrX3RpbGVfYWNjb3VudF9hbGxvY2F0ZWQo
dGlsZSk7CiAKLSAgICByZXR1cm4gdDsKKyAgICByZXR1cm4gdGlsZTsKIH0KIAogLyoqCiAgKiBG
cmVlIHRpbGUgbWVtb3J5LgogICovCi12b2lkIGV3a190aWxlX2ZyZWUoRXdrX1RpbGUgKnQpCit2
b2lkIGV3a190aWxlX2ZyZWUoRXdrX1RpbGUqIHRpbGUpCiB7Ci0gICAgX2V3a190aWxlX2FjY291
bnRfZnJlZWQodCk7CisgICAgX2V3a190aWxlX2FjY291bnRfZnJlZWQodGlsZSk7CiAKLSAgICBp
ZiAodC0+dXBkYXRlcykKLSAgICAgICAgZWluYV90aWxlcl9mcmVlKHQtPnVwZGF0ZXMpOworICAg
IGlmICh0aWxlLT51cGRhdGVzKQorICAgICAgICBlaW5hX3RpbGVyX2ZyZWUodGlsZS0+dXBkYXRl
cyk7CiAKLSAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3kodC0+c3VyZmFjZSk7Ci0gICAgY2Fpcm9f
ZGVzdHJveSh0LT5jYWlybyk7Ci0gICAgZXZhc19vYmplY3RfZGVsKHQtPmltYWdlKTsKLSAgICBm
cmVlKHQpOworICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveSh0aWxlLT5zdXJmYWNlKTsKKyAgICBj
YWlyb19kZXN0cm95KHRpbGUtPmNhaXJvKTsKKyAgICBldmFzX29iamVjdF9kZWwodGlsZS0+aW1h
Z2UpOworICAgIGZyZWUodGlsZSk7CiB9CiAKIC8qKgogICogTWFrZSB0aGUgdGlsZSB2aXNpYmxl
LCBpbmNyZW1lbnRpbmcgaXRzIGNvdW50ZXIuCiAgKi8KLXZvaWQgZXdrX3RpbGVfc2hvdyhFd2tf
VGlsZSAqdCkKK3ZvaWQgZXdrX3RpbGVfc2hvdyhFd2tfVGlsZSogdGlsZSkKIHsKLSAgICB0LT52
aXNpYmxlKys7Ci0gICAgZXZhc19vYmplY3Rfc2hvdyh0LT5pbWFnZSk7CisgICAgdGlsZS0+dmlz
aWJsZSsrOworICAgIGV2YXNfb2JqZWN0X3Nob3codGlsZS0+aW1hZ2UpOwogfQogCiAvKioKICAq
IERlY3JlbWVudCB0aGUgdmlzaWJpbGl0eSBjb3VudGVyLCBtYWtpbmcgaXQgaW52aXNpYmxlIGlm
IG5lY2Vzc2FyeS4KICAqLwotdm9pZCBld2tfdGlsZV9oaWRlKEV3a19UaWxlICp0KQordm9pZCBl
d2tfdGlsZV9oaWRlKEV3a19UaWxlKiB0aWxlKQogewotICAgIHQtPnZpc2libGUtLTsKLSAgICBp
ZiAoIXQtPnZpc2libGUpCi0gICAgICAgIGV2YXNfb2JqZWN0X2hpZGUodC0+aW1hZ2UpOworICAg
IHRpbGUtPnZpc2libGUtLTsKKyAgICBpZiAoIXRpbGUtPnZpc2libGUpCisgICAgICAgIGV2YXNf
b2JqZWN0X2hpZGUodGlsZS0+aW1hZ2UpOwogfQogCiAvKioKICAqIFJldHVybnMgRUlOQV9UUlVF
IGlmIHRoZSB0aWxlIGlzIHZpc2libGUsIEVJTkFfRkFMU0Ugb3RoZXJ3aXNlLgogICovCi1FaW5h
X0Jvb2wgZXdrX3RpbGVfdmlzaWJsZV9nZXQoRXdrX1RpbGUgKnQpCitFaW5hX0Jvb2wgZXdrX3Rp
bGVfdmlzaWJsZV9nZXQoRXdrX1RpbGUqIHRpbGUpCiB7Ci0gICAgcmV0dXJuICEhdC0+dmlzaWJs
ZTsKKyAgICByZXR1cm4gISF0aWxlLT52aXNpYmxlOwogfQogCiAvKioKICAqIE1hcmsgd2hvbGUg
dGlsZSBhcyBkaXJ0eSBhbmQgcmVxdWlyaW5nIHVwZGF0ZS4KICAqLwotdm9pZCBld2tfdGlsZV91
cGRhdGVfZnVsbChFd2tfVGlsZSAqdCkKK3ZvaWQgZXdrX3RpbGVfdXBkYXRlX2Z1bGwoRXdrX1Rp
bGUqIHRpbGUpCiB7CiAgICAgLyogVE9ETzogbGlzdCBvZiB0aWxlcyBwZW5kaW5nIHVwZGF0ZXM/
ICovCi0gICAgdC0+c3RhdHMubWlzc2VzKys7CisgICAgdGlsZS0+c3RhdHMubWlzc2VzKys7CiAK
LSAgICBpZiAoIXQtPnN0YXRzLmZ1bGxfdXBkYXRlKSB7Ci0gICAgICAgIHQtPnN0YXRzLmZ1bGxf
dXBkYXRlID0gRUlOQV9UUlVFOwotICAgICAgICBpZiAodC0+dXBkYXRlcykgewotICAgICAgICAg
ICAgZWluYV90aWxlcl9mcmVlKHQtPnVwZGF0ZXMpOwotICAgICAgICAgICAgdC0+dXBkYXRlcyA9
IDA7CisgICAgaWYgKCF0aWxlLT5zdGF0cy5mdWxsX3VwZGF0ZSkgeworICAgICAgICB0aWxlLT5z
dGF0cy5mdWxsX3VwZGF0ZSA9IEVJTkFfVFJVRTsKKyAgICAgICAgaWYgKHRpbGUtPnVwZGF0ZXMp
IHsKKyAgICAgICAgICAgIGVpbmFfdGlsZXJfZnJlZSh0aWxlLT51cGRhdGVzKTsKKyAgICAgICAg
ICAgIHRpbGUtPnVwZGF0ZXMgPSAwOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtMzg3LDMyICsz
ODcsMzIgQEAgdm9pZCBld2tfdGlsZV91cGRhdGVfZnVsbChFd2tfVGlsZSAqdCkKIC8qKgogICog
TWFyayB0aGUgc3BlY2lmaWMgc3ViYXJlYSBhcyBkaXJ0eSBhbmQgcmVxdWlyaW5nIHVwZGF0ZS4K
ICAqLwotdm9pZCBld2tfdGlsZV91cGRhdGVfYXJlYShFd2tfVGlsZSAqdCwgY29uc3QgRWluYV9S
ZWN0YW5nbGUgKnIpCit2b2lkIGV3a190aWxlX3VwZGF0ZV9hcmVhKEV3a19UaWxlKiB0aWxlLCBj
b25zdCBFaW5hX1JlY3RhbmdsZSogcmVjdCkKIHsKICAgICAvKiBUT0RPOiBsaXN0IG9mIHRpbGVz
IHBlbmRpbmcgdXBkYXRlcz8gKi8KLSAgICB0LT5zdGF0cy5taXNzZXMrKzsKKyAgICB0aWxlLT5z
dGF0cy5taXNzZXMrKzsKIAotICAgIGlmICh0LT5zdGF0cy5mdWxsX3VwZGF0ZSkKKyAgICBpZiAo
dGlsZS0+c3RhdHMuZnVsbF91cGRhdGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghci0+
eCAmJiAhci0+eSAmJiByLT53ID09IHQtPncgJiYgci0+aCA9PSB0LT5oKSB7Ci0gICAgICAgIHQt
PnN0YXRzLmZ1bGxfdXBkYXRlID0gRUlOQV9UUlVFOwotICAgICAgICBpZiAodC0+dXBkYXRlcykg
ewotICAgICAgICAgICAgZWluYV90aWxlcl9mcmVlKHQtPnVwZGF0ZXMpOwotICAgICAgICAgICAg
dC0+dXBkYXRlcyA9IDA7CisgICAgaWYgKCFyZWN0LT54ICYmICFyZWN0LT55ICYmIHJlY3QtPncg
PT0gdGlsZS0+d2lkdGggJiYgcmVjdC0+aCA9PSB0aWxlLT5oZWlnaHQpIHsKKyAgICAgICAgdGls
ZS0+c3RhdHMuZnVsbF91cGRhdGUgPSBFSU5BX1RSVUU7CisgICAgICAgIGlmICh0aWxlLT51cGRh
dGVzKSB7CisgICAgICAgICAgICBlaW5hX3RpbGVyX2ZyZWUodGlsZS0+dXBkYXRlcyk7CisgICAg
ICAgICAgICB0aWxlLT51cGRhdGVzID0gMDsKICAgICAgICAgfQogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgaWYgKCF0LT51cGRhdGVzKSB7Ci0gICAgICAgIHQtPnVwZGF0ZXMgPSBlaW5h
X3RpbGVyX25ldyh0LT53LCB0LT5oKTsKLSAgICAgICAgaWYgKCF0LT51cGRhdGVzKSB7Ci0gICAg
ICAgICAgICBDUklUSUNBTCgiY291bGQgbm90IGNyZWF0ZSBlaW5hX3RpbGVyICVkeCVkLiIsIHQt
PncsIHQtPmgpOworICAgIGlmICghdGlsZS0+dXBkYXRlcykgeworICAgICAgICB0aWxlLT51cGRh
dGVzID0gZWluYV90aWxlcl9uZXcodGlsZS0+d2lkdGgsIHRpbGUtPmhlaWdodCk7CisgICAgICAg
IGlmICghdGlsZS0+dXBkYXRlcykgeworICAgICAgICAgICAgQ1JJVElDQUwoImNvdWxkIG5vdCBj
cmVhdGUgZWluYV90aWxlciAlZHglZC4iLCB0aWxlLT53aWR0aCwgdGlsZS0+aGVpZ2h0KTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgIH0KIAotICAgIGVpbmFfdGlsZXJfcmVj
dF9hZGQodC0+dXBkYXRlcywgcik7CisgICAgZWluYV90aWxlcl9yZWN0X2FkZCh0aWxlLT51cGRh
dGVzLCByZWN0KTsKIH0KIAogLyoqCkBAIC00MjEsMzYgKzQyMSwzNiBAQCB2b2lkIGV3a190aWxl
X3VwZGF0ZV9hcmVhKEV3a19UaWxlICp0LCBjb25zdCBFaW5hX1JlY3RhbmdsZSAqcikKICAqIFRo
aXMgd2lsbCBub3QgY2hhbmdlIHRoZSB0aWxlIHN0YXRpc3RpY3Mgb3IgY2xlYXIgdGhlIHByb2Nl
c3NlZAogICogdXBkYXRlcywgdXNlIGV3a190aWxlX3VwZGF0ZXNfY2xlYXIoKSBmb3IgdGhhdC4K
ICAqLwotdm9pZCBld2tfdGlsZV91cGRhdGVzX3Byb2Nlc3MoRXdrX1RpbGUgKnQsIHZvaWQgKCpj
Yikodm9pZCAqZGF0YSwgRXdrX1RpbGUgKnQsIGNvbnN0IEVpbmFfUmVjdGFuZ2xlICp1cGRhdGUp
LCBjb25zdCB2b2lkICpkYXRhKQotewotICAgIGlmICh0LT5zdGF0cy5mdWxsX3VwZGF0ZSkgewot
ICAgICAgICBFaW5hX1JlY3RhbmdsZSByOwotICAgICAgICByLnggPSAwOwotICAgICAgICByLnkg
PSAwOwotICAgICAgICByLncgPSB0LT53OwotICAgICAgICByLmggPSB0LT5oOwordm9pZCBld2tf
dGlsZV91cGRhdGVzX3Byb2Nlc3MoRXdrX1RpbGUqIHRpbGUsIHZvaWQgKCogY2IpKHZvaWQqIGRh
dGEsIEV3a19UaWxlKiB0aWxlLCBjb25zdCBFaW5hX1JlY3RhbmdsZSogdXBkYXRlKSwgY29uc3Qg
dm9pZCogZGF0YSkKK3sKKyAgICBpZiAodGlsZS0+c3RhdHMuZnVsbF91cGRhdGUpIHsKKyAgICAg
ICAgRWluYV9SZWN0YW5nbGUgcmVjdDsKKyAgICAgICAgcmVjdC54ID0gMDsKKyAgICAgICAgcmVj
dC55ID0gMDsKKyAgICAgICAgcmVjdC53ID0gdGlsZS0+d2lkdGg7CisgICAgICAgIHJlY3QuaCA9
IHRpbGUtPmhlaWdodDsKICNpZmRlZiBUSUxFX1NUQVRTX0FDQ09VTlRfUkVOREVSX1RJTUUKICAg
ICAgICAgc3RydWN0IHRpbWV2YWwgdGltZXY7CiAgICAgICAgIGRvdWJsZSByZW5kZXJfc3RhcnQ7
CiAgICAgICAgIGdldHRpbWVvZmRheSgmdGltZXYsIDApOwotICAgICAgICByZW5kZXJfc3RhcnQg
PSAoZG91YmxlKXRpbWV2LnR2X3NlYyArCi0gICAgICAgICAgICAoKChkb3VibGUpdGltZXYudHZf
dXNlYykgLyAxMDAwMDAwKTsKKyAgICAgICAgcmVuZGVyX3N0YXJ0aWxlID0gKGRvdWJsZSl0aW1l
di50dl9zZWMgKworICAgICAgICAgICAgICAgICAgICAgICAoKChkb3VibGUpdGltZXYudHZfdXNl
YykgLyAxMDAwMDAwKTsKICNlbmRpZgotICAgICAgICBjYigodm9pZCAqKWRhdGEsIHQsICZyKTsK
KyAgICAgICAgY2IoKHZvaWQqKWRhdGEsIHRpbGUsICZyZWN0KTsKICNpZmRlZiBUSUxFX1NUQVRT
X0FDQ09VTlRfUkVOREVSX1RJTUUKICAgICAgICAgZ2V0dGltZW9mZGF5KCZ0aW1ldiwgMCk7Ci0g
ICAgICAgIHQtPnN0YXRzLnJlbmRlcl90aW1lID0gKGRvdWJsZSl0aW1ldi50dl9zZWMgKwotICAg
ICAgICAgICAgKCgoZG91YmxlKXRpbWV2LnR2X3VzZWMpIC8gMTAwMDAwMCkgLSByZW5kZXJfc3Rh
cnQ7CisgICAgICAgIHRpbGUtPnN0YXRzLnJlbmRlcl90aW1lID0gKGRvdWJsZSl0aW1ldi50dl9z
ZWMgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoKGRvdWJsZSl0aW1ldi50dl91
c2VjKSAvIDEwMDAwMDApIC0gcmVuZGVyX3N0YXJ0OwogI2VuZGlmCi0gICAgfSBlbHNlIGlmICh0
LT51cGRhdGVzKSB7Ci0gICAgICAgIEVpbmFfSXRlcmF0b3IgKml0ciA9IGVpbmFfdGlsZXJfaXRl
cmF0b3JfbmV3KHQtPnVwZGF0ZXMpOwotICAgICAgICBFaW5hX1JlY3RhbmdsZSAqcjsKKyAgICB9
IGVsc2UgaWYgKHRpbGUtPnVwZGF0ZXMpIHsKKyAgICAgICAgRWluYV9JdGVyYXRvciogaXRyID0g
ZWluYV90aWxlcl9pdGVyYXRvcl9uZXcodGlsZS0+dXBkYXRlcyk7CisgICAgICAgIEVpbmFfUmVj
dGFuZ2xlKiByZWN0OwogICAgICAgICBpZiAoIWl0cikgewogICAgICAgICAgICAgQ1JJVElDQUwo
ImNvdWxkIG5vdCBjcmVhdGUgdGlsZXIgaXRlcmF0b3IhIik7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KLSAgICAgICAgRUlOQV9JVEVSQVRPUl9GT1JFQUNIKGl0ciwgcikKLSAgICAg
ICAgICAgIGNiKCh2b2lkICopZGF0YSwgdCwgcik7CisgICAgICAgIEVJTkFfSVRFUkFUT1JfRk9S
RUFDSChpdHIsIHJlY3QpCisgICAgICAgICAgICBjYigodm9pZCopZGF0YSwgdGlsZSwgcmVjdCk7
CiAgICAgICAgIGVpbmFfaXRlcmF0b3JfZnJlZShpdHIpOwogICAgIH0KIH0KQEAgLTQ1OSwzOCAr
NDU5LDM4IEBAIHZvaWQgZXdrX3RpbGVfdXBkYXRlc19wcm9jZXNzKEV3a19UaWxlICp0LCB2b2lk
ICgqY2IpKHZvaWQgKmRhdGEsIEV3a19UaWxlICp0LCBjCiAgKiBDbGVhciBhbGwgdXBkYXRlcyBp
biByZWdpb24sIGlmIGFueS4KICAqCiAgKiBUaGlzIHdpbGwgY2hhbmdlIHRoZSB0aWxlIHN0YXRp
c3RpY3MsIHNwZWNpYWxseSB6ZXJvIHN0YXQubWlzc2VzCi0gKiBhbmQgdW5zZXQgc3RhdHMuZnVs
bF91cGRhdGUuIElmIHQtPnVwZGF0ZXMgZXhpc3RlZCwgdGhlbiBpdCB3aWxsIGJlCisgKiBhbmQg
dW5zZXQgc3RhdHMuZnVsbF91cGRhdGUuIElmIHRpbGUtPnVwZGF0ZXMgZXhpc3RlZCwgdGhlbiBp
dCB3aWxsIGJlCiAgKiBkZXN0cm95ZWQuCiAgKgogICogVGhpcyBmdW5jdGlvbiBpcyB1c3VhbGx5
IGNhbGxlZCBhZnRlciBld2tfdGlsZV91cGRhdGVzX3Byb2Nlc3MoKSBpcwogICogY2FsbGVkLgog
ICovCi12b2lkIGV3a190aWxlX3VwZGF0ZXNfY2xlYXIoRXdrX1RpbGUgKnQpCit2b2lkIGV3a190
aWxlX3VwZGF0ZXNfY2xlYXIoRXdrX1RpbGUqIHRpbGUpCiB7CiAgICAgLyogVE9ETzogcmVtb3Zl
IGZyb20gbGlzdCBvZiBwZW5kaW5nIHVwZGF0ZXM/ICovCi0gICAgdC0+c3RhdHMubWlzc2VzID0g
MDsKKyAgICB0aWxlLT5zdGF0cy5taXNzZXMgPSAwOwogCi0gICAgaWYgKHQtPnN0YXRzLmZ1bGxf
dXBkYXRlKQotICAgICAgICB0LT5zdGF0cy5mdWxsX3VwZGF0ZSA9IDA7Ci0gICAgZWxzZSBpZiAo
dC0+dXBkYXRlcykgewotICAgICAgICBlaW5hX3RpbGVyX2ZyZWUodC0+dXBkYXRlcyk7Ci0gICAg
ICAgIHQtPnVwZGF0ZXMgPSAwOworICAgIGlmICh0aWxlLT5zdGF0cy5mdWxsX3VwZGF0ZSkKKyAg
ICAgICAgdGlsZS0+c3RhdHMuZnVsbF91cGRhdGUgPSAwOworICAgIGVsc2UgaWYgKHRpbGUtPnVw
ZGF0ZXMpIHsKKyAgICAgICAgZWluYV90aWxlcl9mcmVlKHRpbGUtPnVwZGF0ZXMpOworICAgICAg
ICB0aWxlLT51cGRhdGVzID0gMDsKICAgICB9CiB9CiAKIHR5cGVkZWYgc3RydWN0IF9Fd2tfVGls
ZV9VbnVzZWRfQ2FjaGVfRW50cnkgRXdrX1RpbGVfVW51c2VkX0NhY2hlX0VudHJ5Owogc3RydWN0
IF9Fd2tfVGlsZV9VbnVzZWRfQ2FjaGVfRW50cnkgewotICAgIEV3a19UaWxlICp0aWxlOworICAg
IEV3a19UaWxlKiB0aWxlOwogICAgIGludCB3ZWlnaHQ7CiAgICAgc3RydWN0IHsKLSAgICAgICAg
dm9pZCAoKmNiKSh2b2lkICpkYXRhLCBFd2tfVGlsZSAqdCk7Ci0gICAgICAgIHZvaWQgKmRhdGE7
CisgICAgICAgIHZvaWQgKCogY2IpKHZvaWQqIGRhdGEsIEV3a19UaWxlKiB0aWxlKTsKKyAgICAg
ICAgdm9pZCogZGF0YTsKICAgICB9IHRpbGVfZnJlZTsKIH07CiAKIHN0cnVjdCBfRXdrX1RpbGVf
VW51c2VkX0NhY2hlIHsKICAgICBzdHJ1Y3QgewotICAgICAgICBFaW5hX0xpc3QgKmxpc3Q7Cisg
ICAgICAgIEVpbmFfTGlzdCogbGlzdDsKICAgICAgICAgc2l6ZV90IGNvdW50OwogICAgICAgICBz
aXplX3QgYWxsb2NhdGVkOwogICAgIH0gZW50cmllczsKQEAgLTUyMiw5ICs1MjIsOSBAQCBzdGF0
aWMgY29uc3Qgc2l6ZV90IFRJTEVfVU5VU0VEX0NBQ0hFX01BWF9GUkVFID0gMzI7CiAgKiAgICAg
ICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9mcmVlKCkgdG8gcmVsZWFzZSByZXNvdXJjZXMuIElm
IG5vdAogICogICAgICAgICBwb3NzaWJsZSB0byBhbGxvY2F0ZSBtZW1vcnksIEBjIDAgaXMgcmV0
dXJuZWQuCiAgKi8KLUV3a19UaWxlX1VudXNlZF9DYWNoZSAqZXdrX3RpbGVfdW51c2VkX2NhY2hl
X25ldyhzaXplX3QgbWF4KQorRXdrX1RpbGVfVW51c2VkX0NhY2hlKiBld2tfdGlsZV91bnVzZWRf
Y2FjaGVfbmV3KHNpemVfdCBtYXgpCiB7Ci0gICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWM7
CisgICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0dWM7CiAKICAgICB0dWMgPSBzdGF0aWNfY2Fz
dDxFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqPihjYWxsb2MoMSwgc2l6ZW9mKEV3a19UaWxlX1VudXNl
ZF9DYWNoZSkpKTsKICAgICBpZiAoIXR1YykKQEAgLTUzNiwxOSArNTM2LDE5IEBAIEV3a19UaWxl
X1VudXNlZF9DYWNoZSAqZXdrX3RpbGVfdW51c2VkX2NhY2hlX25ldyhzaXplX3QgbWF4KQogICAg
IHJldHVybiB0dWM7CiB9CiAKLXZvaWQgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2xvY2tfYXJlYShF
d2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YywgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHksIEV2
YXNfQ29vcmQgdywgRXZhc19Db29yZCBoLCBmbG9hdCB6b29tKQordm9pZCBld2tfdGlsZV91bnVz
ZWRfY2FjaGVfbG9ja19hcmVhKEV3a19UaWxlX1VudXNlZF9DYWNoZSogdHVjLCBFdmFzX0Nvb3Jk
IHgsIEV2YXNfQ29vcmQgeSwgRXZhc19Db29yZCB3aWR0aCwgRXZhc19Db29yZCBoZWlnaHQsIGZs
b2F0IHpvb20pCiB7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4odHVjKTsKIAogICAg
IHR1Yy0+bG9ja2VkLmxvY2tlZCA9IEVJTkFfVFJVRTsKICAgICB0dWMtPmxvY2tlZC54ID0geDsK
ICAgICB0dWMtPmxvY2tlZC55ID0geTsKLSAgICB0dWMtPmxvY2tlZC53ID0gdzsKLSAgICB0dWMt
PmxvY2tlZC5oID0gaDsKKyAgICB0dWMtPmxvY2tlZC53ID0gd2lkdGg7CisgICAgdHVjLT5sb2Nr
ZWQuaCA9IGhlaWdodDsKICAgICB0dWMtPmxvY2tlZC56b29tID0gem9vbTsKIH0KIAotdm9pZCBl
d2tfdGlsZV91bnVzZWRfY2FjaGVfdW5sb2NrX2FyZWEoRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0
dWMpCit2b2lkIGV3a190aWxlX3VudXNlZF9jYWNoZV91bmxvY2tfYXJlYShFd2tfVGlsZV9VbnVz
ZWRfQ2FjaGUqIHR1YykKIHsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0dWMpOwog
CkBAIC01NjcsNyArNTY3LDcgQEAgdm9pZCBld2tfdGlsZV91bnVzZWRfY2FjaGVfdW5sb2NrX2Fy
ZWEoRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMpCiAgKgogICogQHNlZSBld2tfdGlsZV91bnVz
ZWRfY2FjaGVfdW5yZWYoKQogICovCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVfdW51c2VkX2NhY2hl
X2ZyZWUoRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMpCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVf
dW51c2VkX2NhY2hlX2ZyZWUoRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0dWMpCiB7CiAgICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk4odHVjKTsKIApAQCAtNTg3LDcgKzU4Nyw3IEBAIHN0YXRp
YyB2b2lkIF9ld2tfdGlsZV91bnVzZWRfY2FjaGVfZnJlZShFd2tfVGlsZV9VbnVzZWRfQ2FjaGUg
KnR1YykKICAqIEFueSB0aWxlcyB0aGF0IGFyZSBpbiB0aGUgY2FjaGUgYXJlIGZyZWVkLiBUaGUg
b25seSB0aWxlcyB0aGF0IGFyZQogICoga2VwdCBhcmUgdGhvc2UgdGhhdCBhcmVuJ3QgaW4gdGhl
IGNhY2hlIChpLmUuIHRoYXQgYXJlIHZpc2libGUpLgogICovCi12b2lkIGV3a190aWxlX3VudXNl
ZF9jYWNoZV9jbGVhcihFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YykKK3ZvaWQgZXdrX3RpbGVf
dW51c2VkX2NhY2hlX2NsZWFyKEV3a19UaWxlX1VudXNlZF9DYWNoZSogdHVjKQogewogICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHR1Yyk7CiAKQEAgLTYwNiwxMyArNjA2LDEzIEBAIHZv
aWQgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2NsZWFyKEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVj
KQogfQogCiAvKioKLSAqIEhvbGQgcmVmZXJlbmNlIHRvIGNhY2hlLgorICogaGVpZ2h0b2xkIHJl
ZmVyZW5jZSB0byBjYWNoZS4KICAqCiAgKiBAcmV0dXJuIHNhbWUgcG9pbnRlciBhcyB0YWtlbi4K
ICAqCiAgKiBAc2VlIGV3a190aWxlX3VudXNlZF9jYWNoZV91bnJlZigpCiAgKi8KLUV3a19UaWxl
X1VudXNlZF9DYWNoZSAqZXdrX3RpbGVfdW51c2VkX2NhY2hlX3JlZihFd2tfVGlsZV9VbnVzZWRf
Q2FjaGUgKnR1YykKK0V3a19UaWxlX1VudXNlZF9DYWNoZSogZXdrX3RpbGVfdW51c2VkX2NhY2hl
X3JlZihFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHR1YykKIHsKICAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTl9WQUwodHVjLCAwKTsKICAgICB0dWMtPnJlZmVyZW5jZXMrKzsKQEAgLTYyNSw3
ICs2MjUsNyBAQCBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKmV3a190aWxlX3VudXNlZF9jYWNoZV9y
ZWYoRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMpCiAgKiBAc2VlIGV3a190aWxlX3VudXNlZF9j
YWNoZV9yZWYoKQogICogQHNlZSBld2tfdGlsZV91bnVzZWRfY2FjaGVfZnJlZSgpCiAgKi8KLXZv
aWQgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3VucmVmKEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVj
KQordm9pZCBld2tfdGlsZV91bnVzZWRfY2FjaGVfdW5yZWYoRXdrX1RpbGVfVW51c2VkX0NhY2hl
KiB0dWMpCiB7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4odHVjKTsKICAgICB0dWMt
PnJlZmVyZW5jZXMtLTsKQEAgLTYzMywyNyArNjMzLDI3IEBAIHZvaWQgZXdrX3RpbGVfdW51c2Vk
X2NhY2hlX3VucmVmKEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjKQogICAgICAgICBfZXdrX3Rp
bGVfdW51c2VkX2NhY2hlX2ZyZWUodHVjKTsKIH0KIAotdm9pZCBld2tfdGlsZV91bnVzZWRfY2Fj
aGVfbWF4X3NldChFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1Yywgc2l6ZV90IG1heCkKK3ZvaWQg
ZXdrX3RpbGVfdW51c2VkX2NhY2hlX21heF9zZXQoRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0dWMs
IHNpemVfdCBtYXgpCiB7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4odHVjKTsKICAg
ICB0dWMtPm1lbW9yeS5tYXggPSBtYXg7CiB9CiAKLXNpemVfdCBld2tfdGlsZV91bnVzZWRfY2Fj
aGVfbWF4X2dldChjb25zdCBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YykKK3NpemVfdCBld2tf
dGlsZV91bnVzZWRfY2FjaGVfbWF4X2dldChjb25zdCBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHR1
YykKIHsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodHVjLCAwKTsKICAgICBy
ZXR1cm4gdHVjLT5tZW1vcnkubWF4OwogfQogCi1zaXplX3QgZXdrX3RpbGVfdW51c2VkX2NhY2hl
X3VzZWRfZ2V0KGNvbnN0IEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjKQorc2l6ZV90IGV3a190
aWxlX3VudXNlZF9jYWNoZV91c2VkX2dldChjb25zdCBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHR1
YykKIHsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodHVjLCAwKTsKICAgICBy
ZXR1cm4gdHVjLT5tZW1vcnkudXNlZDsKIH0KIAotc2l6ZV90IGV3a190aWxlX3VudXNlZF9jYWNo
ZV9mbHVzaChFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1Yywgc2l6ZV90IGJ5dGVzKQorc2l6ZV90
IGV3a190aWxlX3VudXNlZF9jYWNoZV9mbHVzaChFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHR1Yywg
c2l6ZV90IGJ5dGVzKQogewotICAgIEVpbmFfTGlzdCAqbCwgKmxfbmV4dDsKKyAgICBFaW5hX0xp
c3QqIGwsICogbF9uZXh0OwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh0dWMs
IDApOwogICAgIHNpemVfdCBkb25lOwogICAgIHVuc2lnbmVkIGludCBjb3VudDsKQEAgLTY3Mywx
NSArNjczLDE1IEBAIHNpemVfdCBld2tfdGlsZV91bnVzZWRfY2FjaGVfZmx1c2goRXdrX1RpbGVf
VW51c2VkX0NhY2hlICp0dWMsIHNpemVfdCBieXRlcykKICAgICBjb3VudCA9IDA7CiAgICAgRUlO
QV9MSVNUX0ZPUkVBQ0hfU0FGRSh0dWMtPmVudHJpZXMubGlzdCwgbCwgbF9uZXh0LCBpdGVtKSB7
CiAgICAgICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZV9FbnRyeSogaXRyID0gc3RhdGljX2Nhc3Q8
RXdrX1RpbGVfVW51c2VkX0NhY2hlX0VudHJ5Kj4oaXRlbSk7Ci0gICAgICAgIEV3a19UaWxlICp0
ID0gaXRyLT50aWxlOworICAgICAgICBFd2tfVGlsZSogdGlsZSA9IGl0ci0+dGlsZTsKICAgICAg
ICAgaWYgKGRvbmUgPiBieXRlcykKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBpZiAodHVj
LT5sb2NrZWQubG9ja2VkCi0gICAgICAgICAgICAmJiB0LT54ICsgdC0+dyA+IHR1Yy0+bG9ja2Vk
LngKLSAgICAgICAgICAgICYmIHQtPnkgKyB0LT5oID4gdHVjLT5sb2NrZWQueQotICAgICAgICAg
ICAgJiYgdC0+eCA8IHR1Yy0+bG9ja2VkLnggKyB0dWMtPmxvY2tlZC53Ci0gICAgICAgICAgICAm
JiB0LT55IDwgdHVjLT5sb2NrZWQueSArIHR1Yy0+bG9ja2VkLmgKLSAgICAgICAgICAgICYmIHQt
Pnpvb20gPT0gdHVjLT5sb2NrZWQuem9vbSkgeworICAgICAgICAgICAgJiYgdGlsZS0+eCArIHRp
bGUtPndpZHRoID4gdHVjLT5sb2NrZWQueAorICAgICAgICAgICAgJiYgdGlsZS0+eSArIHRpbGUt
PmhlaWdodCA+IHR1Yy0+bG9ja2VkLnkKKyAgICAgICAgICAgICYmIHRpbGUtPnggPCB0dWMtPmxv
Y2tlZC54ICsgdHVjLT5sb2NrZWQudworICAgICAgICAgICAgJiYgdGlsZS0+eSA8IHR1Yy0+bG9j
a2VkLnkgKyB0dWMtPmxvY2tlZC5oCisgICAgICAgICAgICAmJiB0aWxlLT56b29tID09IHR1Yy0+
bG9ja2VkLnpvb20pIHsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAg
IGRvbmUgKz0gc2l6ZW9mKEV3a19UaWxlKSArIGl0ci0+dGlsZS0+Ynl0ZXM7CkBAIC02OTcsNyAr
Njk3LDcgQEAgc2l6ZV90IGV3a190aWxlX3VudXNlZF9jYWNoZV9mbHVzaChFd2tfVGlsZV9VbnVz
ZWRfQ2FjaGUgKnR1Yywgc2l6ZV90IGJ5dGVzKQogICAgIHJldHVybiBkb25lOwogfQogCi12b2lk
IGV3a190aWxlX3VudXNlZF9jYWNoZV9hdXRvX2ZsdXNoKEV3a19UaWxlX1VudXNlZF9DYWNoZSAq
dHVjKQordm9pZCBld2tfdGlsZV91bnVzZWRfY2FjaGVfYXV0b19mbHVzaChFd2tfVGlsZV9VbnVz
ZWRfQ2FjaGUqIHR1YykKIHsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0dWMpOwog
ICAgIGlmICh0dWMtPm1lbW9yeS51c2VkIDw9IHR1Yy0+bWVtb3J5Lm1heCkKQEAgLTcxMiwxMiAr
NzEyLDEyIEBAIHZvaWQgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2F1dG9fZmx1c2goRXdrX1RpbGVf
VW51c2VkX0NhY2hlICp0dWMpCiAgKiBGcmVlemUgY2FjaGUgdG8gbm90IGRvIG1haW50ZW5hbmNl
IHRhc2tzLgogICoKICAqIE1haW50ZW5hbmNlIHRhc2tzIG9wdGltaXplIGNhY2hlIHVzYWdlLCBi
dXQgbWF5YmUgd2Uga25vdyB3ZSBzaG91bGQKLSAqIGhvbGQgb24gdGhlbSB1bnRpbCB3ZSBkbyB0
aGUgbGFzdCBvcGVyYXRpb24sIGluIHRoaXMgY2FzZSB3ZSBmcmVlemUKKyAqIGhlaWdodG9sZCBv
biB0aGVtIHVudGlsIHdlIGRvIHRoZSBsYXN0IG9wZXJhdGlvbiwgaW4gdGhpcyBjYXNlIHdlIGZy
ZWV6ZQogICogd2hpbGUgb3BlcmF0aW5nIGFuZCB0aGVuIHRoYXcgd2hlbiB3ZSdyZSBkb25lLgog
ICoKICAqIEBzZWUgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3RoYXcoKQogICovCi12b2lkIGV3a190
aWxlX3VudXNlZF9jYWNoZV9mcmVlemUoRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMpCit2b2lk
IGV3a190aWxlX3VudXNlZF9jYWNoZV9mcmVlemUoRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0dWMp
CiB7CiAgICAgdHVjLT5mcm96ZW4rKzsKIH0KQEAgLTcyOCw3ICs3MjgsNyBAQCB2b2lkIGV3a190
aWxlX3VudXNlZF9jYWNoZV9mcmVlemUoRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMpCiAgKiBJ
ZiB0aGlzIGlzIHRoZSBsYXN0IGNvdW50ZXJwYXJ0IG9mIGZyZWV6ZSwgdGhlbiBtYWludGVuYW5j
ZSB0YXNrcwogICogd2lsbCBydW4gaW1tZWRpYXRlbHkuCiAgKi8KLXZvaWQgZXdrX3RpbGVfdW51
c2VkX2NhY2hlX3RoYXcoRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMpCit2b2lkIGV3a190aWxl
X3VudXNlZF9jYWNoZV90aGF3KEV3a19UaWxlX1VudXNlZF9DYWNoZSogdHVjKQogewogICAgIGlm
ICghdHVjLT5mcm96ZW4pIHsKICAgICAgICAgRVJSKCJ0aGF3aW5nIG1vcmUgdGhhbiBmcmVlemlu
ZyEiKTsKQEAgLTc1MCwyNiArNzUwLDI2IEBAIHZvaWQgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3Ro
YXcoRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMpCiAgKgogICogQHJldHVybiAjRUlOQV9UUlVF
IG9uIHN1Y2Nlc3MsICNFSU5BX0ZBTFNFIG90aGVyd2lzZS4KICAqLwotRWluYV9Cb29sIGV3a190
aWxlX3VudXNlZF9jYWNoZV90aWxlX2dldChFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YywgRXdr
X1RpbGUgKnQpCitFaW5hX0Jvb2wgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3RpbGVfZ2V0KEV3a19U
aWxlX1VudXNlZF9DYWNoZSogdHVjLCBFd2tfVGlsZSogdGlsZSkKIHsKLSAgICBFaW5hX0xpc3Qg
KmUsICpsOworICAgIEVpbmFfTGlzdCogZSwgKiBsOwogCiAgICAgdm9pZCogaXRlbTsKICAgICBl
ID0gMDsKICAgICBFSU5BX0xJU1RfRk9SRUFDSCh0dWMtPmVudHJpZXMubGlzdCwgbCwgaXRlbSkg
ewogICAgICAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGVfRW50cnkqIGVudHJ5ID0gc3RhdGljX2Nh
c3Q8RXdrX1RpbGVfVW51c2VkX0NhY2hlX0VudHJ5Kj4oaXRlbSk7Ci0gICAgICAgIGlmIChlbnRy
eS0+dGlsZSA9PSB0KSB7CisgICAgICAgIGlmIChlbnRyeS0+dGlsZSA9PSB0aWxlKSB7CiAgICAg
ICAgICAgICBlID0gbDsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQogICAg
IGlmICghZSkgewotICAgICAgICBFUlIoInRpbGUgJXAgbm90IGZvdW5kIGluIGNhY2hlICVwIiwg
dCwgdHVjKTsKKyAgICAgICAgRVJSKCJ0aWxlICVwIG5vdCBmb3VuZCBpbiBjYWNoZSAlcCIsIHRp
bGUsIHR1Yyk7CiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwogICAgIH0KIAogICAgIHR1Yy0+
ZW50cmllcy5jb3VudC0tOwotICAgIHR1Yy0+bWVtb3J5LnVzZWQgLT0gc2l6ZW9mKEV3a19UaWxl
KSArIHQtPmJ5dGVzOworICAgIHR1Yy0+bWVtb3J5LnVzZWQgLT0gc2l6ZW9mKEV3a19UaWxlKSAr
IHRpbGUtPmJ5dGVzOwogICAgIHR1Yy0+ZW50cmllcy5saXN0ID0gZWluYV9saXN0X3JlbW92ZV9s
aXN0KHR1Yy0+ZW50cmllcy5saXN0LCBlKTsKICAgICBmcmVlKGl0ZW0pOwogCkBAIC03NzksNyAr
Nzc5LDcgQEAgRWluYV9Cb29sIGV3a190aWxlX3VudXNlZF9jYWNoZV90aWxlX2dldChFd2tfVGls
ZV9VbnVzZWRfQ2FjaGUgKnR1YywgRXdrX1RpbGUgKnQKIC8qKgogICogUHV0IHRpbGUgaW50byBj
YWNoZSBvZiB1bnVzZWQgdGlsZXMsIGFkZGluZyBpdCB0byB0aGUgY2FjaGUuCiAgKgotICogVGhp
cyBzaG91bGQgYmUgY2FsbGVkIHdoZW4gQGMgdC0+dmlzaWJsZSBpcyBAYyAwIGFuZCBubyBvYmpl
Y3RzIGFyZQorICogVGhpcyBzaG91bGQgYmUgY2FsbGVkIHdoZW4gQGMgdGlsZS0+dmlzaWJsZSBp
cyBAYyAwIGFuZCBubyBvYmplY3RzIGFyZQogICogdXNpbmcgdGhlIHRpbGUgYW55bW9yZSwgbWFr
aW5nIGl0IGF2YWlsYWJsZSB0byBiZSBleHBpcmVkIGFuZCBoYXZlCiAgKiBpdHMgbWVtb3J5IHJl
cGxhY2VkLgogICoKQEAgLTc5Myw1NSArNzkzLDU1IEBAIEVpbmFfQm9vbCBld2tfdGlsZV91bnVz
ZWRfY2FjaGVfdGlsZV9nZXQoRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMsIEV3a19UaWxlICp0
CiAgKiBAcGFyYW0gdGlsZV9mcmVlX2NiIGZ1bmN0aW9uIHVzZWQgdG8gZnJlZSB0aWxlcy4KICAq
IEBwYXJhbSBkYXRhIGNvbnRleHQgdG8gZ2l2ZSBiYWNrIHRvIEBhIHRpbGVfZnJlZV9jYiBhcyBm
aXJzdCBhcmd1bWVudC4KICAqCi0gKiBAcmV0dXJuICNFSU5BX1RSVUUgb24gc3VjY2VzcywgI0VJ
TkFfRkFMU0Ugb3RoZXJ3aXNlLiBJZiBAYyB0LT52aXNpYmxlCisgKiBAcmV0dXJuICNFSU5BX1RS
VUUgb24gc3VjY2VzcywgI0VJTkFfRkFMU0Ugb3RoZXJ3aXNlLiBJZiBAYyB0aWxlLT52aXNpYmxl
CiAgKiAgICAgICAgIGlzIG5vdCAjRUlOQV9GQUxTRSwgdGhlbiBpdCB3aWxsIHJldHVybiAjRUlO
QV9GQUxTRS4KICAqCiAgKiBAc2VlIGV3a190aWxlX3VudXNlZF9jYWNoZV9hdXRvX2ZsdXNoKCkK
ICAqLwotRWluYV9Cb29sIGV3a190aWxlX3VudXNlZF9jYWNoZV90aWxlX3B1dChFd2tfVGlsZV9V
bnVzZWRfQ2FjaGUgKnR1YywgRXdrX1RpbGUgKnQsIHZvaWQgKCp0aWxlX2ZyZWVfY2IpKHZvaWQg
KmRhdGEsIEV3a19UaWxlICp0KSwgY29uc3Qgdm9pZCAqZGF0YSkKK0VpbmFfQm9vbCBld2tfdGls
ZV91bnVzZWRfY2FjaGVfdGlsZV9wdXQoRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0dWMsIEV3a19U
aWxlKiB0aWxlLCB2b2lkICgqIHRpbGVfZnJlZV9jYikodm9pZCogZGF0YSwgRXdrX1RpbGUqIHRp
bGUpLCBjb25zdCB2b2lkKiBkYXRhKQogewotICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZV9FbnRy
eSAqZTsKKyAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGVfRW50cnkqIHVjZTsKIAotICAgIGlmICh0
LT52aXNpYmxlKSB7Ci0gICAgICAgIEVSUigidGlsZT0lcCBpcyBub3QgdW51c2VkICh2aXNpYmxl
PSVkKSIsIHQsIHQtPnZpc2libGUpOworICAgIGlmICh0aWxlLT52aXNpYmxlKSB7CisgICAgICAg
IEVSUigidGlsZT0lcCBpcyBub3QgdW51c2VkICh2aXNpYmxlPSVkKSIsIHRpbGUsIHRpbGUtPnZp
c2libGUpOwogICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKICAgICB9CiAKLSAgICBlID0gc3Rh
dGljX2Nhc3Q8RXdrX1RpbGVfVW51c2VkX0NhY2hlX0VudHJ5Kj4obWFsbG9jKHNpemVvZihFd2tf
VGlsZV9VbnVzZWRfQ2FjaGVfRW50cnkpKSk7Ci0gICAgaWYgKCFlKQorICAgIHVjZSA9IHN0YXRp
Y19jYXN0PEV3a19UaWxlX1VudXNlZF9DYWNoZV9FbnRyeSo+KG1hbGxvYyhzaXplb2YoRXdrX1Rp
bGVfVW51c2VkX0NhY2hlX0VudHJ5KSkpOworICAgIGlmICghdWNlKQogICAgICAgICByZXR1cm4g
RUlOQV9GQUxTRTsKIAotICAgIHR1Yy0+ZW50cmllcy5saXN0ID0gZWluYV9saXN0X2FwcGVuZCh0
dWMtPmVudHJpZXMubGlzdCwgZSk7CisgICAgdHVjLT5lbnRyaWVzLmxpc3QgPSBlaW5hX2xpc3Rf
YXBwZW5kKHR1Yy0+ZW50cmllcy5saXN0LCB1Y2UpOwogICAgIGlmIChlaW5hX2Vycm9yX2dldCgp
KSB7CiAgICAgICAgIEVSUigiTGlzdCBhbGxvY2F0aW9uIGZhaWxlZCIpOwogICAgICAgICByZXR1
cm4gRUlOQV9GQUxTRTsKICAgICB9CiAKLSAgICBlLT50aWxlID0gdDsKLSAgICBlLT53ZWlnaHQg
PSAwOyAvKiBjYWxjdWxhdGVkIGp1c3QgYmVmb3JlIHNvcnQgKi8KLSAgICBlLT50aWxlX2ZyZWUu
Y2IgPSB0aWxlX2ZyZWVfY2I7Ci0gICAgZS0+dGlsZV9mcmVlLmRhdGEgPSAodm9pZCAqKWRhdGE7
CisgICAgdWNlLT50aWxlID0gdGlsZTsKKyAgICB1Y2UtPndlaWdodCA9IDA7IC8qIGNhbGN1bGF0
ZWQganVzdCBiZWZvcmUgc29ydCAqLworICAgIHVjZS0+dGlsZV9mcmVlLmNiID0gdGlsZV9mcmVl
X2NiOworICAgIHVjZS0+dGlsZV9mcmVlLmRhdGEgPSAodm9pZCopZGF0YTsKIAogICAgIHR1Yy0+
ZW50cmllcy5jb3VudCsrOwotICAgIHR1Yy0+bWVtb3J5LnVzZWQgKz0gc2l6ZW9mKEV3a19UaWxl
KSArIHQtPmJ5dGVzOworICAgIHR1Yy0+bWVtb3J5LnVzZWQgKz0gc2l6ZW9mKEV3a19UaWxlKSAr
IHRpbGUtPmJ5dGVzOwogCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotdm9pZCBld2tfdGls
ZV91bnVzZWRfY2FjaGVfZGJnKGNvbnN0IEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjKQordm9p
ZCBld2tfdGlsZV91bnVzZWRfY2FjaGVfZGJnKGNvbnN0IEV3a19UaWxlX1VudXNlZF9DYWNoZSog
dHVjKQogewogICAgIHZvaWQqIGl0ZW07Ci0gICAgRWluYV9MaXN0ICpsOworICAgIEVpbmFfTGlz
dCogbDsKICAgICBpbnQgY291bnQgPSAwOwogICAgIHByaW50ZigiQ2FjaGUgb2YgdW51c2VkIHRp
bGVzOiBlbnRyaWVzOiAlenUvJXp1LCBtZW1vcnk6ICV6dS8lenVcbiIsCiAgICAgICAgICAgIHR1
Yy0+ZW50cmllcy5jb3VudCwgdHVjLT5lbnRyaWVzLmFsbG9jYXRlZCwKICAgICAgICAgICAgdHVj
LT5tZW1vcnkudXNlZCwgdHVjLT5tZW1vcnkubWF4KTsKIAogICAgIEVJTkFfTElTVF9GT1JFQUNI
KHR1Yy0+ZW50cmllcy5saXN0LCBsLCBpdGVtKSB7Ci0gICAgICAgIGNvbnN0IEV3a19UaWxlICp0
ID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGVfVW51c2VkX0NhY2hlX0VudHJ5Kj4oaXRlbSktPnRpbGU7
CisgICAgICAgIGNvbnN0IEV3a19UaWxlKiB0aWxlID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGVfVW51
c2VkX0NhY2hlX0VudHJ5Kj4oaXRlbSktPnRpbGU7CiAgICAgICAgIHByaW50ZigiIFslM2x1LCUz
bHUgKyAlZHglZCBAICUwLjNmXSVjIiwKLSAgICAgICAgICAgICAgIHQtPmNvbCwgdC0+cm93LCB0
LT53LCB0LT5oLCB0LT56b29tLAotICAgICAgICAgICAgICAgdC0+dmlzaWJsZSA/ICcqJzogJyAn
KTsKKyAgICAgICAgICAgICAgIHRpbGUtPmNvbCwgdGlsZS0+cm93LCB0aWxlLT53aWR0aCwgdGls
ZS0+aGVpZ2h0LCB0aWxlLT56b29tLAorICAgICAgICAgICAgICAgdGlsZS0+dmlzaWJsZSA/ICcq
JyA6ICcgJyk7CiAKICAgICAgICAgaWYgKCEoY291bnQgJSA0KSkKICAgICAgICAgICAgIHByaW50
ZigiXG4iKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXcuY3BwCmluZGV4IDU5OTA2ZTMuLjVlZGJl
MGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9lZmwvZXdrL2V3a192aWV3LmNwcApAQCAtMTc3LDQ0ICsxNzcsNDQgQEAg
c3RydWN0IF9Fd2tfVmlld19Qcml2YXRlX0RhdGEgewogfTsKIAogI2lmbmRlZiBFV0tfVFlQRV9D
SEVDSwotI2RlZmluZSBFV0tfVklFV19UWVBFX0NIRUNLKG8sIC4uLikgZG8geyB9IHdoaWxlICgw
KQorI2RlZmluZSBFV0tfVklFV19UWVBFX0NIRUNLKGV3a1ZpZXcsIC4uLikgZG8geyB9IHdoaWxl
ICgwKQogI2Vsc2UKLSNkZWZpbmUgRVdLX1ZJRVdfVFlQRV9DSEVDSyhvLCAuLi4pICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyNkZWZpbmUgRVdLX1ZJRVdfVFlQRV9DSEVD
Syhld2tWaWV3LCAuLi4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAg
ICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICAgICAgY29uc3QgY2hhciogX3RtcF9vdHlwZSA9IGV2YXNfb2Jq
ZWN0X3R5cGVfZ2V0KG8pOyAgICAgICAgICAgICAgIFwKLSAgICAgICAgY29uc3QgRXZhc19TbWFy
dCogX3RtcF9zID0gZXZhc19vYmplY3Rfc21hcnRfc21hcnRfZ2V0KG8pOyAgICAgIFwKKyAgICAg
ICAgY29uc3QgY2hhciogX3RtcF9vdHlwZSA9IGV2YXNfb2JqZWN0X3R5cGVfZ2V0KGV3a1ZpZXcp
OyAgICAgICAgICAgICAgIFwKKyAgICAgICAgY29uc3QgRXZhc19TbWFydCogX3RtcF9zID0gZXZh
c19vYmplY3Rfc21hcnRfc21hcnRfZ2V0KGV3a1ZpZXcpOyAgICAgIFwKICAgICAgICAgaWYgKEVJ
TkFfVU5MSUtFTFkoIV90bXBfcykpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKICAgICAgICAgICAgIEVJTkFfTE9HX0NSSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAoIiVwICglcykgaXMgbm90IGEg
c21hcnQgb2JqZWN0ISIsIG8sICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAo
IiVwICglcykgaXMgbm90IGEgc21hcnQgb2JqZWN0ISIsIGV3a1ZpZXcsICAgICAgICAgICAgICAg
ICAgIFwKICAgICAgICAgICAgICAgICBfdG1wX290eXBlID8gX3RtcF9vdHlwZSA6ICIobnVsbCki
KTsgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgcmV0dXJuIF9fVkFfQVJHU19fOyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICB9ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAogICAgICAgICBjb25zdCBFdmFzX1NtYXJ0X0NsYXNzKiBfdG1wX3NjID0gZXZhc19zbWFydF9j
bGFzc19nZXQoX3RtcF9zKTsgXAogICAgICAgICBpZiAoRUlOQV9VTkxJS0VMWSghX3RtcF9zYykp
IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgRUlOQV9M
T0dfQ1JJVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgICAgICAgICAgICAgICgiJXAgKCVzKSBpcyBub3QgYSBzbWFydCBvYmplY3QhIiwgbywgICAg
ICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICgiJXAgKCVzKSBpcyBub3QgYSBzbWFy
dCBvYmplY3QhIiwgZXdrVmlldywgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAg
IF90bXBfb3R5cGUgPyBfdG1wX290eXBlIDogIihudWxsKSIpOyAgICAgICAgICAgICAgICAgICBc
CiAgICAgICAgICAgICByZXR1cm4gX19WQV9BUkdTX187ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCiAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIGlmIChFSU5BX1VO
TElLRUxZKF90bXBfc2MtPmRhdGEgIT0gRVdLX1ZJRVdfVFlQRV9TVFIpKSB7ICAgICAgICBcCiAg
ICAgICAgICAgICBFSU5BX0xPR19DUklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgKCIlcCAoJXMpIGlzIG5vdCBvZiBhbiBl
d2tfdmlldyAobmVlZCAlcCwgZ290ICVwKSEiLCAgICBcCi0gICAgICAgICAgICAgICAgbywgX3Rt
cF9vdHlwZSA/IF90bXBfb3R5cGUgOiAiKG51bGwpIiwgICAgICAgICAgICAgICAgIFwKKyAgICAg
ICAgICAgICAgICBld2tWaWV3LCBfdG1wX290eXBlID8gX3RtcF9vdHlwZSA6ICIobnVsbCkiLCAg
ICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgIEVXS19WSUVXX1RZUEVfU1RSLCBfdG1w
X3NjLT5kYXRhKTsgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICByZXR1cm4gX19W
QV9BUkdTX187ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAg
ICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCiAgICAgfSB3aGlsZSAoMCkKICNlbmRpZgogCi0jZGVmaW5lIEVXS19WSUVX
X1NEX0dFVChvLCBwdHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEV3
a19WaWV3X1NtYXJ0X0RhdGEqIHB0ciA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEq
PihldmFzX29iamVjdF9zbWFydF9kYXRhX2dldChvKSkKKyNkZWZpbmUgRVdLX1ZJRVdfU0RfR0VU
KGV3a1ZpZXcsIHB0cikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgRXdr
X1ZpZXdfU21hcnRfRGF0YSogcHRyID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+
KGV2YXNfb2JqZWN0X3NtYXJ0X2RhdGFfZ2V0KGV3a1ZpZXcpKQogCi0jZGVmaW5lIEVXS19WSUVX
X1NEX0dFVF9PUl9SRVRVUk4obywgcHRyLCAuLi4pICAgICAgICAgIFwKLSAgICBFV0tfVklFV19U
WVBFX0NIRUNLKG8sIF9fVkFfQVJHU19fKTsgICAgICAgICAgICAgICAgXAotICAgIEVXS19WSUVX
X1NEX0dFVChvLCBwdHIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgcHRyLCAuLi4pICAgICAgICAgIFwKKyAg
ICBFV0tfVklFV19UWVBFX0NIRUNLKGV3a1ZpZXcsIF9fVkFfQVJHU19fKTsgICAgICAgICAgICAg
ICAgXAorICAgIEVXS19WSUVXX1NEX0dFVChld2tWaWV3LCBwdHIpOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCiAgICAgaWYgKCFwdHIpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKICAgICAgICAgQ1JJVElDQUwoIm5vIHNtYXJ0IGRhdGEgZm9yIG9iamVj
dCAlcCAoJXMpIiwgICAgXAotICAgICAgICAgICAgICAgICBvLCBldmFzX29iamVjdF90eXBlX2dl
dChvKSk7ICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgIGV3a1ZpZXcsIGV2YXNfb2JqZWN0
X3R5cGVfZ2V0KGV3a1ZpZXcpKTsgICAgICAgICAgIFwKICAgICAgICAgcmV0dXJuIF9fVkFfQVJH
U19fOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIH0KIApAQCAtNDY4LDcgKzQ2
OCw3IEBAIHN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3NtYXJ0X3J1bl9qYXZhc2NyaXB0X3By
b21wdChFd2tfVmlld19TbWFydF9EYXRhKiBzZCwKIH0KIAogLy8gRXZlbnQgSGFuZGxpbmcgLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi1zdGF0
aWMgdm9pZCBfZXdrX3ZpZXdfb25fZm9jdXNfaW4odm9pZCogZGF0YSwgRXZhcyogZSwgRXZhc19P
YmplY3QqIG8sIHZvaWQqIGV2ZW50X2luZm8pCitzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfb25fZm9j
dXNfaW4odm9pZCogZGF0YSwgRXZhcyogZXZlbnRUeXBlLCBFdmFzX09iamVjdCogY2FsbGJhY2ss
IHZvaWQqIGV2ZW50SW5mbykKIHsKICAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzZCA9IHN0YXRp
Y19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihkYXRhKTsKICAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTihzZC0+YXBpKTsKQEAgLTQ3Niw3ICs0NzYsNyBAQCBzdGF0aWMgdm9pZCBfZXdr
X3ZpZXdfb25fZm9jdXNfaW4odm9pZCogZGF0YSwgRXZhcyogZSwgRXZhc19PYmplY3QqIG8sIHZv
aWQqIGV2ZQogICAgIHNkLT5hcGktPmZvY3VzX2luKHNkKTsKIH0KIAotc3RhdGljIHZvaWQgX2V3
a192aWV3X29uX2ZvY3VzX291dCh2b2lkKiBkYXRhLCBFdmFzKiBlLCBFdmFzX09iamVjdCogbywg
dm9pZCogZXZlbnRfaW5mbykKK3N0YXRpYyB2b2lkIF9ld2tfdmlld19vbl9mb2N1c19vdXQodm9p
ZCogZGF0YSwgRXZhcyogZXZlbnRUeXBlLCBFdmFzX09iamVjdCogY2FsbGJhY2ssIHZvaWQqIGV2
ZW50SW5mbykKIHsKICAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzZCA9IHN0YXRpY19jYXN0PEV3
a19WaWV3X1NtYXJ0X0RhdGEqPihkYXRhKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
TihzZC0+YXBpKTsKQEAgLTQ4NCw1NCArNDg0LDU0IEBAIHN0YXRpYyB2b2lkIF9ld2tfdmlld19v
bl9mb2N1c19vdXQodm9pZCogZGF0YSwgRXZhcyogZSwgRXZhc19PYmplY3QqIG8sIHZvaWQqIGV2
CiAgICAgc2QtPmFwaS0+Zm9jdXNfb3V0KHNkKTsKIH0KIAotc3RhdGljIHZvaWQgX2V3a192aWV3
X29uX21vdXNlX3doZWVsKHZvaWQqIGRhdGEsIEV2YXMqIGUsIEV2YXNfT2JqZWN0KiBvLCB2b2lk
KiBldmVudF9pbmZvKQorc3RhdGljIHZvaWQgX2V3a192aWV3X29uX21vdXNlX3doZWVsKHZvaWQq
IGRhdGEsIEV2YXMqIGV2ZW50VHlwZSwgRXZhc19PYmplY3QqIGNhbGxiYWNrLCB2b2lkKiBldmVu
dEluZm8pCiB7Ci0gICAgRXZhc19FdmVudF9Nb3VzZV9XaGVlbCogZXYgPSBzdGF0aWNfY2FzdDxF
dmFzX0V2ZW50X01vdXNlX1doZWVsKj4oZXZlbnRfaW5mbyk7CisgICAgRXZhc19FdmVudF9Nb3Vz
ZV9XaGVlbCogZXYgPSBzdGF0aWNfY2FzdDxFdmFzX0V2ZW50X01vdXNlX1doZWVsKj4oZXZlbnRJ
bmZvKTsKICAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzZCA9IHN0YXRpY19jYXN0PEV3a19WaWV3
X1NtYXJ0X0RhdGEqPihkYXRhKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+
YXBpKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpLT5tb3VzZV93aGVl
bCk7CiAgICAgc2QtPmFwaS0+bW91c2Vfd2hlZWwoc2QsIGV2KTsKIH0KIAotc3RhdGljIHZvaWQg
X2V3a192aWV3X29uX21vdXNlX2Rvd24odm9pZCogZGF0YSwgRXZhcyogZSwgRXZhc19PYmplY3Qq
IG8sIHZvaWQqIGV2ZW50X2luZm8pCitzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfb25fbW91c2VfZG93
bih2b2lkKiBkYXRhLCBFdmFzKiBldmVudFR5cGUsIEV2YXNfT2JqZWN0KiBjYWxsYmFjaywgdm9p
ZCogZXZlbnRJbmZvKQogewotICAgIEV2YXNfRXZlbnRfTW91c2VfRG93biogZXYgPSBzdGF0aWNf
Y2FzdDxFdmFzX0V2ZW50X01vdXNlX0Rvd24qPihldmVudF9pbmZvKTsKKyAgICBFdmFzX0V2ZW50
X01vdXNlX0Rvd24qIGV2ID0gc3RhdGljX2Nhc3Q8RXZhc19FdmVudF9Nb3VzZV9Eb3duKj4oZXZl
bnRJbmZvKTsKICAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzZCA9IHN0YXRpY19jYXN0PEV3a19W
aWV3X1NtYXJ0X0RhdGEqPihkYXRhKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihz
ZC0+YXBpKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpLT5tb3VzZV9k
b3duKTsKICAgICBzZC0+YXBpLT5tb3VzZV9kb3duKHNkLCBldik7CiB9CiAKLXN0YXRpYyB2b2lk
IF9ld2tfdmlld19vbl9tb3VzZV91cCh2b2lkKiBkYXRhLCBFdmFzKiBlLCBFdmFzX09iamVjdCog
bywgdm9pZCogZXZlbnRfaW5mbykKK3N0YXRpYyB2b2lkIF9ld2tfdmlld19vbl9tb3VzZV91cCh2
b2lkKiBkYXRhLCBFdmFzKiBldmVudFR5cGUsIEV2YXNfT2JqZWN0KiBjYWxsYmFjaywgdm9pZCog
ZXZlbnRJbmZvKQogewotICAgIEV2YXNfRXZlbnRfTW91c2VfVXAqIGV2ID0gc3RhdGljX2Nhc3Q8
RXZhc19FdmVudF9Nb3VzZV9VcCo+KGV2ZW50X2luZm8pOworICAgIEV2YXNfRXZlbnRfTW91c2Vf
VXAqIGV2ID0gc3RhdGljX2Nhc3Q8RXZhc19FdmVudF9Nb3VzZV9VcCo+KGV2ZW50SW5mbyk7CiAg
ICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9E
YXRhKj4oZGF0YSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFwaSk7CiAg
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFwaS0+bW91c2VfdXApOwogICAgIHNk
LT5hcGktPm1vdXNlX3VwKHNkLCBldik7CiB9CiAKLXN0YXRpYyB2b2lkIF9ld2tfdmlld19vbl9t
b3VzZV9tb3ZlKHZvaWQqIGRhdGEsIEV2YXMqIGUsIEV2YXNfT2JqZWN0KiBvLCB2b2lkKiBldmVu
dF9pbmZvKQorc3RhdGljIHZvaWQgX2V3a192aWV3X29uX21vdXNlX21vdmUodm9pZCogZGF0YSwg
RXZhcyogZXZlbnRUeXBlLCBFdmFzX09iamVjdCogY2FsbGJhY2ssIHZvaWQqIGV2ZW50SW5mbykK
IHsKLSAgICBFdmFzX0V2ZW50X01vdXNlX01vdmUqIGV2ID0gc3RhdGljX2Nhc3Q8RXZhc19FdmVu
dF9Nb3VzZV9Nb3ZlKj4oZXZlbnRfaW5mbyk7CisgICAgRXZhc19FdmVudF9Nb3VzZV9Nb3ZlKiBl
diA9IHN0YXRpY19jYXN0PEV2YXNfRXZlbnRfTW91c2VfTW92ZSo+KGV2ZW50SW5mbyk7CiAgICAg
RXdrX1ZpZXdfU21hcnRfRGF0YSogc2QgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRh
Kj4oZGF0YSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFwaSk7CiAgICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFwaS0+bW91c2VfbW92ZSk7CiAgICAgc2Qt
PmFwaS0+bW91c2VfbW92ZShzZCwgZXYpOwogfQogCi1zdGF0aWMgdm9pZCBfZXdrX3ZpZXdfb25f
a2V5X2Rvd24odm9pZCogZGF0YSwgRXZhcyogZSwgRXZhc19PYmplY3QqIG8sIHZvaWQqIGV2ZW50
X2luZm8pCitzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfb25fa2V5X2Rvd24odm9pZCogZGF0YSwgRXZh
cyogZXZlbnRUeXBlLCBFdmFzX09iamVjdCogY2FsbGJhY2ssIHZvaWQqIGV2ZW50SW5mbykKIHsK
LSAgICBFdmFzX0V2ZW50X0tleV9Eb3duKiBldiA9IHN0YXRpY19jYXN0PEV2YXNfRXZlbnRfS2V5
X0Rvd24qPihldmVudF9pbmZvKTsKKyAgICBFdmFzX0V2ZW50X0tleV9Eb3duKiBldiA9IHN0YXRp
Y19jYXN0PEV2YXNfRXZlbnRfS2V5X0Rvd24qPihldmVudEluZm8pOwogICAgIEV3a19WaWV3X1Nt
YXJ0X0RhdGEqIHNkID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEpOwog
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGkpOwogICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOKHNkLT5hcGktPmtleV9kb3duKTsKICAgICBzZC0+YXBpLT5rZXlfZG93
bihzZCwgZXYpOwogfQogCi1zdGF0aWMgdm9pZCBfZXdrX3ZpZXdfb25fa2V5X3VwKHZvaWQqIGRh
dGEsIEV2YXMqIGUsIEV2YXNfT2JqZWN0KiBvLCB2b2lkKiBldmVudF9pbmZvKQorc3RhdGljIHZv
aWQgX2V3a192aWV3X29uX2tleV91cCh2b2lkKiBkYXRhLCBFdmFzKiBldmVudFR5cGUsIEV2YXNf
T2JqZWN0KiBjYWxsYmFjaywgdm9pZCogZXZlbnRJbmZvKQogewotICAgIEV2YXNfRXZlbnRfS2V5
X1VwKiBldiA9IHN0YXRpY19jYXN0PEV2YXNfRXZlbnRfS2V5X1VwKj4oZXZlbnRfaW5mbyk7Cisg
ICAgRXZhc19FdmVudF9LZXlfVXAqIGV2ID0gc3RhdGljX2Nhc3Q8RXZhc19FdmVudF9LZXlfVXAq
PihldmVudEluZm8pOwogICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0gc3RhdGljX2Nhc3Q8
RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOKHNkLT5hcGkpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGktPmtl
eV91cCk7CkBAIC01OTQsOCArNTk0LDggQEAgc3RhdGljIEV3a19WaWV3X1ByaXZhdGVfRGF0YSog
X2V3a192aWV3X3ByaXZfbmV3KEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkKQogICAgIHByaXYtPnZp
ZXdwb3J0X2FyZ3VtZW50cy51c2VyU2NhbGFibGUgPSBFSU5BX1RSVUU7CiAKICAgICBwcml2LT5w
YWdlX3NldHRpbmdzLT5zZXRMb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkodHJ1ZSk7Ci0gICAgcHJp
di0+cGFnZV9zZXR0aW5ncy0+c2V0RGVmYXVsdEZpeGVkRm9udFNpemUoMTIpOwotICAgIHByaXYt
PnBhZ2Vfc2V0dGluZ3MtPnNldERlZmF1bHRGb250U2l6ZSgxNik7CisgICAgcHJpdi0+cGFnZV9z
ZXR0aW5ncy0+c2V0RGVmYXVsdEZpeGVkRm9udFNpemUoMTApOworICAgIHByaXYtPnBhZ2Vfc2V0
dGluZ3MtPnNldERlZmF1bHRGb250U2l6ZSgxMyk7CiAgICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+
c2V0U2VyaWZGb250RmFtaWx5KCJzZXJpZiIpOwogICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNl
dEZpeGVkRm9udEZhbWlseSgibW9ub3R5cGUiKTsKICAgICBwcml2LT5wYWdlX3NldHRpbmdzLT5z
ZXRTYW5zU2VyaWZGb250RmFtaWx5KCJzYW5zIik7CkBAIC03MjAsMTMgKzcyMCwxMyBAQCBzdGF0
aWMgdm9pZCBfZXdrX3ZpZXdfcHJpdl9kZWwoRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKiBwcml2KQog
ICAgIGZyZWUocHJpdik7CiB9CiAKLXN0YXRpYyB2b2lkIF9ld2tfdmlld19zbWFydF9hZGQoRXZh
c19PYmplY3QqIG8pCitzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21hcnRfYWRkKEV2YXNfT2JqZWN0
KiBld2tWaWV3KQogewotICAgIGNvbnN0IEV2YXNfU21hcnQqIHNtYXJ0ID0gZXZhc19vYmplY3Rf
c21hcnRfc21hcnRfZ2V0KG8pOworICAgIGNvbnN0IEV2YXNfU21hcnQqIHNtYXJ0ID0gZXZhc19v
YmplY3Rfc21hcnRfc21hcnRfZ2V0KGV3a1ZpZXcpOwogICAgIGNvbnN0IEV2YXNfU21hcnRfQ2xh
c3MqIHNjID0gZXZhc19zbWFydF9jbGFzc19nZXQoc21hcnQpOwogICAgIGNvbnN0IEV3a19WaWV3
X1NtYXJ0X0NsYXNzKiBhcGkgPSByZWludGVycHJldF9jYXN0PGNvbnN0IEV3a19WaWV3X1NtYXJ0
X0NsYXNzKj4oc2MpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGFwaS0+YmFja2lu
Z19zdG9yZV9hZGQpOwotICAgIEVXS19WSUVXX1NEX0dFVChvLCBzZCk7CisgICAgRVdLX1ZJRVdf
U0RfR0VUKGV3a1ZpZXcsIHNkKTsKIAogICAgIGlmICghc2QpIHsKICAgICAgICAgc2QgPSBzdGF0
aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oY2FsbG9jKDEsIHNpemVvZihFd2tfVmlld19T
bWFydF9EYXRhKSkpOwpAQCAtNzM0LDcgKzczNCw3IEBAIHN0YXRpYyB2b2lkIF9ld2tfdmlld19z
bWFydF9hZGQoRXZhc19PYmplY3QqIG8pCiAgICAgICAgICAgICBDUklUSUNBTCgiY291bGQgbm90
IGFsbG9jYXRlIEV3a19WaWV3X1NtYXJ0X0RhdGEiKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQotICAgICAgICBldmFzX29iamVjdF9zbWFydF9kYXRhX3NldChvLCBzZCk7CisgICAg
ICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2RhdGFfc2V0KGV3a1ZpZXcsIHNkKTsKICAgICB9CiAKICAg
ICBzZC0+YmdfY29sb3IuciA9IDI1NTsKQEAgLTc0MiwxMSArNzQyLDExIEBAIHN0YXRpYyB2b2lk
IF9ld2tfdmlld19zbWFydF9hZGQoRXZhc19PYmplY3QqIG8pCiAgICAgc2QtPmJnX2NvbG9yLmIg
PSAyNTU7CiAgICAgc2QtPmJnX2NvbG9yLmEgPSAyNTU7CiAKLSAgICBzZC0+c2VsZiA9IG87Cisg
ICAgc2QtPnNlbGYgPSBld2tWaWV3OwogICAgIHNkLT5fcHJpdiA9IF9ld2tfdmlld19wcml2X25l
dyhzZCk7CiAgICAgc2QtPmFwaSA9IGFwaTsKIAotICAgIF9wYXJlbnRfc2MuYWRkKG8pOworICAg
IF9wYXJlbnRfc2MuYWRkKGV3a1ZpZXcpOwogCiAgICAgaWYgKCFzZC0+X3ByaXYpCiAgICAgICAg
IHJldHVybjsKQEAgLTc1OSwxMyArNzU5LDEzIEBAIHN0YXRpYyB2b2lkIF9ld2tfdmlld19zbWFy
dF9hZGQoRXZhc19PYmplY3QqIG8pCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBldmFz
X29iamVjdF9zbWFydF9tZW1iZXJfYWRkKHNkLT5iYWNraW5nX3N0b3JlLCBvKTsKKyAgICBldmFz
X29iamVjdF9zbWFydF9tZW1iZXJfYWRkKHNkLT5iYWNraW5nX3N0b3JlLCBld2tWaWV3KTsKICAg
ICBldmFzX29iamVjdF9zaG93KHNkLT5iYWNraW5nX3N0b3JlKTsKICAgICBldmFzX29iamVjdF9w
YXNzX2V2ZW50c19zZXQoc2QtPmJhY2tpbmdfc3RvcmUsIEVJTkFfVFJVRSk7CiAKICAgICBzZC0+
ZXZlbnRzX3JlY3QgPSBldmFzX29iamVjdF9yZWN0YW5nbGVfYWRkKHNkLT5iYXNlLmV2YXMpOwog
ICAgIGV2YXNfb2JqZWN0X2NvbG9yX3NldChzZC0+ZXZlbnRzX3JlY3QsIDAsIDAsIDAsIDApOwot
ICAgIGV2YXNfb2JqZWN0X3NtYXJ0X21lbWJlcl9hZGQoc2QtPmV2ZW50c19yZWN0LCBvKTsKKyAg
ICBldmFzX29iamVjdF9zbWFydF9tZW1iZXJfYWRkKHNkLT5ldmVudHNfcmVjdCwgZXdrVmlldyk7
CiAgICAgZXZhc19vYmplY3Rfc2hvdyhzZC0+ZXZlbnRzX3JlY3QpOwogCiAgICAgc2QtPm1haW5f
ZnJhbWUgPSBld2tfZnJhbWVfYWRkKHNkLT5iYXNlLmV2YXMpOwpAQCAtNzc0LDcgKzc3NCw3IEBA
IHN0YXRpYyB2b2lkIF9ld2tfdmlld19zbWFydF9hZGQoRXZhc19PYmplY3QqIG8pCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoIWV3a19mcmFtZV9pbml0KHNkLT5tYWluX2ZyYW1l
LCBvLCBwcml2LT5tYWluX2ZyYW1lKSkgeworICAgIGlmICghZXdrX2ZyYW1lX2luaXQoc2QtPm1h
aW5fZnJhbWUsIGV3a1ZpZXcsIHByaXYtPm1haW5fZnJhbWUpKSB7CiAgICAgICAgIEVSUigiQ291
bGQgbm90IGluaXRpYWxpemUgbWFpbiBmcm1lIG9iamVjdC4iKTsKICAgICAgICAgZXZhc19vYmpl
Y3RfZGVsKHNkLT5tYWluX2ZyYW1lKTsKICAgICAgICAgc2QtPm1haW5fZnJhbWUgPSAwOwpAQCAt
Nzg1LDEwICs3ODUsMTAgQEAgc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X2FkZChFdmFzX09i
amVjdCogbykKICAgICB9CiAKICAgICBldmFzX29iamVjdF9uYW1lX3NldChzZC0+bWFpbl9mcmFt
ZSwgIkVXS19GcmFtZTptYWluIik7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfbWVtYmVyX2FkZChz
ZC0+bWFpbl9mcmFtZSwgbyk7CisgICAgZXZhc19vYmplY3Rfc21hcnRfbWVtYmVyX2FkZChzZC0+
bWFpbl9mcmFtZSwgZXdrVmlldyk7CiAgICAgZXZhc19vYmplY3Rfc2hvdyhzZC0+bWFpbl9mcmFt
ZSk7CiAKLSNkZWZpbmUgQ09OTkVDVChzLCBjKSBldmFzX29iamVjdF9ldmVudF9jYWxsYmFja19h
ZGQobywgcywgYywgc2QpCisjZGVmaW5lIENPTk5FQ1QocywgYykgZXZhc19vYmplY3RfZXZlbnRf
Y2FsbGJhY2tfYWRkKGV3a1ZpZXcsIHMsIGMsIHNkKQogICAgIENPTk5FQ1QoRVZBU19DQUxMQkFD
S19GT0NVU19JTiwgX2V3a192aWV3X29uX2ZvY3VzX2luKTsKICAgICBDT05ORUNUKEVWQVNfQ0FM
TEJBQ0tfRk9DVVNfT1VULCBfZXdrX3ZpZXdfb25fZm9jdXNfb3V0KTsKICAgICBDT05ORUNUKEVW
QVNfQ0FMTEJBQ0tfTU9VU0VfV0hFRUwsIF9ld2tfdmlld19vbl9tb3VzZV93aGVlbCk7CkBAIC04
MDAsMTkgKzgwMCwxOSBAQCBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21hcnRfYWRkKEV2YXNfT2Jq
ZWN0KiBvKQogI3VuZGVmIENPTk5FQ1QKIH0KIAotc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0
X2RlbChFdmFzX09iamVjdCogbykKK3N0YXRpYyB2b2lkIF9ld2tfdmlld19zbWFydF9kZWwoRXZh
c19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUKG8sIHNkKTsKKyAgICBF
V0tfVklFV19TRF9HRVQoZXdrVmlldywgc2QpOwogICAgIEV3a19WaWV3X1ByaXZhdGVfRGF0YSog
cHJpdiA9IHNkID8gc2QtPl9wcml2IDogMDsKIAotICAgIGV3a192aWV3X3N0b3Aobyk7Ci0gICAg
X3BhcmVudF9zYy5kZWwobyk7CisgICAgZXdrX3ZpZXdfc3RvcChld2tWaWV3KTsKKyAgICBfcGFy
ZW50X3NjLmRlbChld2tWaWV3KTsKICAgICBfZXdrX3ZpZXdfcHJpdl9kZWwocHJpdik7CiB9CiAK
LXN0YXRpYyB2b2lkIF9ld2tfdmlld19zbWFydF9yZXNpemUoRXZhc19PYmplY3QqIG8sIEV2YXNf
Q29vcmQgdywgRXZhc19Db29yZCBoKQorc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X3Jlc2l6
ZShFdmFzX09iamVjdCogZXdrVmlldywgRXZhc19Db29yZCB3LCBFdmFzX0Nvb3JkIGgpCiB7Ci0g
ICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCk7CisgICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihld2tWaWV3LCBzZCk7CiAKICAgICAvLyB0aGVzZSBzaG91bGQgYmUgcXVldWVk
IGFuZCBwcm9jZXNzZWQgaW4gY2FsY3VsYXRlIGFzIHdlbGwhCiAgICAgZXZhc19vYmplY3RfcmVz
aXplKHNkLT5iYWNraW5nX3N0b3JlLCB3LCBoKTsKQEAgLTgyMSwxNiArODIxLDE2IEBAIHN0YXRp
YyB2b2lkIF9ld2tfdmlld19zbWFydF9yZXNpemUoRXZhc19PYmplY3QqIG8sIEV2YXNfQ29vcmQg
dywgRXZhc19Db29yZCBoKQogICAgIF9ld2tfdmlld19zbWFydF9jaGFuZ2VkKHNkKTsKIH0KIAot
c3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X21vdmUoRXZhc19PYmplY3QqIG8sIEV2YXNfQ29v
cmQgeCwgRXZhc19Db29yZCB5KQorc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X21vdmUoRXZh
c19PYmplY3QqIGV3a1ZpZXcsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5KQogewotICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9S
RVRVUk4oZXdrVmlldywgc2QpOwogICAgIHNkLT5jaGFuZ2VkLnBvc2l0aW9uID0gRUlOQV9UUlVF
OwogICAgIF9ld2tfdmlld19zbWFydF9jaGFuZ2VkKHNkKTsKIH0KIAotc3RhdGljIHZvaWQgX2V3
a192aWV3X3NtYXJ0X2NhbGN1bGF0ZShFdmFzX09iamVjdCogbykKK3N0YXRpYyB2b2lkIF9ld2tf
dmlld19zbWFydF9jYWxjdWxhdGUoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJ
RVdfU0RfR0VUKG8sIHNkKTsKKyAgICBFV0tfVklFV19TRF9HRVQoZXdrVmlldywgc2QpOwogICAg
IEVXS19WSUVXX1BSSVZfR0VUKHNkLCBwcml2KTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTihzZC0+YXBpLT5jb250ZW50c19yZXNpemUpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOKHNkLT5hcGktPnNjcm9sbHNfcHJvY2Vzcyk7CkBAIC04NDIsMTEgKzg0MiwxMSBAQCBz
dGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21hcnRfY2FsY3VsYXRlKEV2YXNfT2JqZWN0KiBvKQogICAg
IGlmICghc2QtPm1haW5fZnJhbWUgfHwgIXByaXYtPm1haW5fZnJhbWUpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldChvLCAmeCwgJnksICZ3LCAmaCk7Cisg
ICAgZXZhc19vYmplY3RfZ2VvbWV0cnlfZ2V0KGV3a1ZpZXcsICZ4LCAmeSwgJncsICZoKTsKIAog
ICAgIERCRygibz0lcCBnZW89WyVkLCAlZCArICVkeCVkXSwgY2hhbmdlZDogc2l6ZT0laGh1LCAi
CiAgICAgICAgICJzY3JvbGxzPSV6dSwgcmVwYWludHM9JXp1IiwKLSAgICAgICAgbywgeCwgeSwg
dywgaCwgc2QtPmNoYW5nZWQuc2l6ZSwKKyAgICAgICAgZXdrVmlldywgeCwgeSwgdywgaCwgc2Qt
PmNoYW5nZWQuc2l6ZSwKICAgICAgICAgcHJpdi0+c2Nyb2xscy5jb3VudCwgcHJpdi0+cmVwYWlu
dHMuY291bnQpOwogCiAgICAgaWYgKHNkLT5jaGFuZ2VkLnNpemUgJiYgKCh3ICE9IHNkLT52aWV3
LncpIHx8IChoICE9IHNkLT52aWV3LmgpKSkgewpAQCAtODY1LDcgKzg2NSw3IEBAIHN0YXRpYyB2
b2lkIF9ld2tfdmlld19zbWFydF9jYWxjdWxhdGUoRXZhc19PYmplY3QqIG8pCiAgICAgICAgIF9l
d2tfdmlld19yZXBhaW50X2FkZChwcml2LCAwLCAwLCB3LCBoKTsKIAogICAgICAgICAvLyBUaGlz
IGNhbGxiYWNrIGlzIGEgZ29vZCBwbGFjZSBlLmcuIHRvIGNoYW5nZSBmaXhlZCBsYXlvdXQgc2l6
ZSAoZXdrX3ZpZXdfZml4ZWRfbGF5b3V0X3NpemVfc2V0KS4KLSAgICAgICAgZXZhc19vYmplY3Rf
c21hcnRfY2FsbGJhY2tfY2FsbChvLCAidmlldyxyZXNpemVkIiwgMCk7CisgICAgICAgIGV2YXNf
b2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdrVmlldywgInZpZXcscmVzaXplZCIsIDApOwog
ICAgIH0KICAgICBzZC0+Y2hhbmdlZC5zaXplID0gRUlOQV9GQUxTRTsKIApAQCAtODk0LDE4ICs4
OTQsMTggQEAgc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X2NhbGN1bGF0ZShFdmFzX09iamVj
dCogbykKICAgICB9CiB9CiAKLXN0YXRpYyB2b2lkIF9ld2tfdmlld19zbWFydF9zaG93KEV2YXNf
T2JqZWN0KiBvKQorc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X3Nob3coRXZhc19PYmplY3Qq
IGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCk7CisgICAg
RVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCk7CiAKICAgICBpZiAoZXZhc19v
YmplY3RfY2xpcGVlc19nZXQoc2QtPmJhc2UuY2xpcHBlcikpCiAgICAgICAgIGV2YXNfb2JqZWN0
X3Nob3coc2QtPmJhc2UuY2xpcHBlcik7CiAgICAgZXZhc19vYmplY3Rfc2hvdyhzZC0+YmFja2lu
Z19zdG9yZSk7CiB9CiAKLXN0YXRpYyB2b2lkIF9ld2tfdmlld19zbWFydF9oaWRlKEV2YXNfT2Jq
ZWN0KiBvKQorc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X2hpZGUoRXZhc19PYmplY3QqIGV3
a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCk7CisgICAgRVdL
X1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCk7CiAKICAgICBldmFzX29iamVjdF9o
aWRlKHNkLT5iYXNlLmNsaXBwZXIpOwogICAgIGV2YXNfb2JqZWN0X2hpZGUoc2QtPmJhY2tpbmdf
c3RvcmUpOwpAQCAtMTA0MCw5ICsxMDQwLDkgQEAgc3RhdGljIHZvaWQgX2V3a192aWV3X3pvb21f
YW5pbWF0aW9uX3N0YXJ0KEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkKQogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKF9ld2tfdmlld196b29tX2FuaW1hdG9yX2NiLCBzZCk7
CiB9CiAKLXN0YXRpYyBXZWJDb3JlOjpWaWV3cG9ydEF0dHJpYnV0ZXMgX2V3a192aWV3X3ZpZXdw
b3J0X2F0dHJpYnV0ZXNfY29tcHV0ZShjb25zdCBFdmFzX09iamVjdCogbykKK3N0YXRpYyBXZWJD
b3JlOjpWaWV3cG9ydEF0dHJpYnV0ZXMgX2V3a192aWV3X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfY29t
cHV0ZShjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVQo
bywgc2QpOworICAgIEVXS19WSUVXX1NEX0dFVChld2tWaWV3LCBzZCk7CiAgICAgRVdLX1ZJRVdf
UFJJVl9HRVQoc2QsIHByaXYpOwogCiAgICAgaW50IGRlc2t0b3Bfd2lkdGggPSA5ODA7CkBAIC0x
MTE5LDkgKzExMTksOSBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfYmFzZV9zbWFydF9zZXQoRXdrX1Zp
ZXdfU21hcnRfQ2xhc3MqIGFwaSkKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi12b2lkIGV3
a192aWV3X2ZpeGVkX2xheW91dF9zaXplX3NldChFdmFzX09iamVjdCogbywgRXZhc19Db29yZCB3
LCBFdmFzX0Nvb3JkIGgpCit2b2lkIGV3a192aWV3X2ZpeGVkX2xheW91dF9zaXplX3NldChFdmFz
X09iamVjdCogZXdrVmlldywgRXZhc19Db29yZCB3LCBFdmFzX0Nvb3JkIGgpCiB7Ci0gICAgRVdL
X1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JF
VFVSTihld2tWaWV3LCBzZCk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBw
cml2KTsKIAogICAgIFdlYkNvcmU6OkZyYW1lVmlldyogdmlldyA9IHByaXYtPm1haW5fZnJhbWUt
PnZpZXcoKTsKQEAgLTExNDMsMTMgKzExNDMsMTMgQEAgdm9pZCBld2tfdmlld19maXhlZF9sYXlv
dXRfc2l6ZV9zZXQoRXZhc19PYmplY3QqIG8sIEV2YXNfQ29vcmQgdywgRXZhc19Db29yZCBoKQog
ICAgIHZpZXctPmZvcmNlTGF5b3V0KCk7CiB9CiAKLXZvaWQgZXdrX3ZpZXdfZml4ZWRfbGF5b3V0
X3NpemVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvLCBFdmFzX0Nvb3JkKiB3LCBFdmFzX0Nvb3Jk
KiBoKQordm9pZCBld2tfdmlld19maXhlZF9sYXlvdXRfc2l6ZV9nZXQoY29uc3QgRXZhc19PYmpl
Y3QqIGV3a1ZpZXcsIEV2YXNfQ29vcmQqIHcsIEV2YXNfQ29vcmQqIGgpCiB7CiAgICAgaWYgKHcp
CiAgICAgICAgICp3ID0gMDsKICAgICBpZiAoaCkKICAgICAgICAgKmggPSAwOwotICAgIEVXS19W
SUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRV
Uk4oZXdrVmlldywgc2QpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJp
dik7CiAgICAgV2ViQ29yZTo6RnJhbWVWaWV3KiB2aWV3ID0gcHJpdi0+bWFpbl9mcmFtZS0+dmll
dygpOwogICAgIGlmICh2aWV3LT51c2VGaXhlZExheW91dCgpKSB7CkBAIC0xMTYxLDkgKzExNjEs
OSBAQCB2b2lkIGV3a192aWV3X2ZpeGVkX2xheW91dF9zaXplX2dldChjb25zdCBFdmFzX09iamVj
dCogbywgRXZhc19Db29yZCogdywgRXZhc19DbwogICAgIH0KIH0KIAotdm9pZCBld2tfdmlld190
aGVtZV9zZXQoRXZhc19PYmplY3QqIG8sIGNvbnN0IGNoYXIqIHBhdGgpCit2b2lkIGV3a192aWV3
X3RoZW1lX3NldChFdmFzX09iamVjdCogZXdrVmlldywgY29uc3QgY2hhciogcGF0aCkKIHsKLSAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkKTsKKyAgICBFV0tfVklFV19TRF9HRVRf
T1JfUkVUVVJOKGV3a1ZpZXcsIHNkKTsKICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4o
c2QsIHByaXYpOwogICAgIGlmICghZWluYV9zdHJpbmdzaGFyZV9yZXBsYWNlKCZwcml2LT5zZXR0
aW5ncy50aGVtZSwgcGF0aCkpCiAgICAgICAgIHJldHVybjsKQEAgLTExNzYsMjIgKzExNzYsMjIg
QEAgdm9pZCBld2tfdmlld190aGVtZV9zZXQoRXZhc19PYmplY3QqIG8sIGNvbnN0IGNoYXIqIHBh
dGgpCiAKIH0KIAotY29uc3QgY2hhciogZXdrX3ZpZXdfdGhlbWVfZ2V0KGNvbnN0IEV2YXNfT2Jq
ZWN0KiBvKQorY29uc3QgY2hhciogZXdrX3ZpZXdfdGhlbWVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0
KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIDApOwor
ICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIDApOwogICAgIEVXS19W
SUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgMCk7CiAgICAgcmV0dXJuIHByaXYtPnNl
dHRpbmdzLnRoZW1lOwogfQogCi1FdmFzX09iamVjdCogZXdrX3ZpZXdfZnJhbWVfbWFpbl9nZXQo
Y29uc3QgRXZhc19PYmplY3QqIG8pCitFdmFzX09iamVjdCogZXdrX3ZpZXdfZnJhbWVfbWFpbl9n
ZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihvLCBzZCwgMCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3
LCBzZCwgMCk7CiAgICAgcmV0dXJuIHNkLT5tYWluX2ZyYW1lOwogfQogCi1FdmFzX09iamVjdCog
ZXdrX3ZpZXdfZnJhbWVfZm9jdXNlZF9nZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCitFdmFzX09i
amVjdCogZXdrX3ZpZXdfZnJhbWVfZm9jdXNlZF9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1Zp
ZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgMCk7CisgICAgRVdL
X1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgMCk7CiAgICAgRVdLX1ZJRVdfUFJJ
Vl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCAwKTsKIAogICAgIFdlYkNvcmU6OkZyYW1lKiBjb3Jl
ID0gcHJpdi0+cGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRGcmFtZSgpOwpAQCAtMTIw
NCwzMyArMTIwNCwzMyBAQCBFdmFzX09iamVjdCogZXdrX3ZpZXdfZnJhbWVfZm9jdXNlZF9nZXQo
Y29uc3QgRXZhc19PYmplY3QqIG8pCiAgICAgcmV0dXJuIGNsaWVudC0+d2ViRnJhbWUoKTsKIH0K
IAotRWluYV9Cb29sIGV3a192aWV3X3VyaV9zZXQoRXZhc19PYmplY3QqIG8sIGNvbnN0IGNoYXIq
IHVyaSkKK0VpbmFfQm9vbCBld2tfdmlld191cmlfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBj
b25zdCBjaGFyKiB1cmkpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwg
RUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwg
RUlOQV9GQUxTRSk7CiAgICAgcmV0dXJuIGV3a19mcmFtZV91cmlfc2V0KHNkLT5tYWluX2ZyYW1l
LCB1cmkpOwogfQogCi1jb25zdCBjaGFyKiBld2tfdmlld191cmlfZ2V0KGNvbnN0IEV2YXNfT2Jq
ZWN0KiBvKQorY29uc3QgY2hhciogZXdrX3ZpZXdfdXJpX2dldChjb25zdCBFdmFzX09iamVjdCog
ZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAwKTsKKyAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAwKTsKICAgICByZXR1cm4g
ZXdrX2ZyYW1lX3VyaV9nZXQoc2QtPm1haW5fZnJhbWUpOwogfQogCi1jb25zdCBjaGFyKiBld2tf
dmlld190aXRsZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCitjb25zdCBjaGFyKiBld2tfdmll
d190aXRsZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihvLCBzZCwgMCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
Tihld2tWaWV3LCBzZCwgMCk7CiAgICAgcmV0dXJuIGV3a19mcmFtZV90aXRsZV9nZXQoc2QtPm1h
aW5fZnJhbWUpOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfZWRpdGFibGVfZ2V0KGNvbnN0IEV2
YXNfT2JqZWN0KiBvKQorRWluYV9Cb29sIGV3a192aWV3X2VkaXRhYmxlX2dldChjb25zdCBFdmFz
X09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNk
LCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNk
LCBFSU5BX0ZBTFNFKTsKICAgICByZXR1cm4gZXdrX2ZyYW1lX2VkaXRhYmxlX2dldChzZC0+bWFp
bl9mcmFtZSk7CiB9CiAKLXZvaWQgZXdrX3ZpZXdfYmdfY29sb3Jfc2V0KEV2YXNfT2JqZWN0KiBv
LCBpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSkKK3ZvaWQgZXdrX3ZpZXdfYmdfY29sb3Jfc2V0
KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSkKIHsKLSAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkKTsKKyAgICBFV0tfVklFV19TRF9HRVRf
T1JfUkVUVVJOKGV3a1ZpZXcsIHNkKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihz
ZC0+YXBpKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpLT5iZ19jb2xv
cl9zZXQpOwogCkBAIC0xMjc4LDcgKzEyNzgsNyBAQCB2b2lkIGV3a192aWV3X2JnX2NvbG9yX3Nl
dChFdmFzX09iamVjdCogbywgaW50IHIsIGludCBnLCBpbnQgYiwgaW50IGEpCiAgICAgfQogfQog
Ci12b2lkIGV3a192aWV3X2JnX2NvbG9yX2dldChjb25zdCBFdmFzX09iamVjdCogbywgaW50KiBy
LCBpbnQqIGcsIGludCogYiwgaW50KiBhKQordm9pZCBld2tfdmlld19iZ19jb2xvcl9nZXQoY29u
c3QgRXZhc19PYmplY3QqIGV3a1ZpZXcsIGludCogciwgaW50KiBnLCBpbnQqIGIsIGludCogYSkK
IHsKICAgICBpZiAocikKICAgICAgICAgKnIgPSAwOwpAQCAtMTI4OCw3ICsxMjg4LDcgQEAgdm9p
ZCBld2tfdmlld19iZ19jb2xvcl9nZXQoY29uc3QgRXZhc19PYmplY3QqIG8sIGludCogciwgaW50
KiBnLCBpbnQqIGIsIGludCogYSkKICAgICAgICAgKmIgPSAwOwogICAgIGlmIChhKQogICAgICAg
ICAqYSA9IDA7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCk7CisgICAgRVdL
X1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCk7CiAgICAgaWYgKHIpCiAgICAgICAg
ICpyID0gc2QtPmJnX2NvbG9yLnI7CiAgICAgaWYgKGcpCkBAIC0xMjk5LDkgKzEyOTksOSBAQCB2
b2lkIGV3a192aWV3X2JnX2NvbG9yX2dldChjb25zdCBFdmFzX09iamVjdCogbywgaW50KiByLCBp
bnQqIGcsIGludCogYiwgaW50KiBhKQogICAgICAgICAqYSA9IHNkLT5iZ19jb2xvci5hOwogfQog
Ci1FaW5hX0Jvb2wgZXdrX3ZpZXdfdGV4dF9zZWFyY2goY29uc3QgRXZhc19PYmplY3QqIG8sIGNv
bnN0IGNoYXIqIHN0cmluZywgRWluYV9Cb29sIGNhc2Vfc2Vuc2l0aXZlLCBFaW5hX0Jvb2wgZm9y
d2FyZCwgRWluYV9Cb29sIHdyYXApCitFaW5hX0Jvb2wgZXdrX3ZpZXdfdGV4dF9zZWFyY2goY29u
c3QgRXZhc19PYmplY3QqIGV3a1ZpZXcsIGNvbnN0IGNoYXIqIHN0cmluZywgRWluYV9Cb29sIGNh
c2Vfc2Vuc2l0aXZlLCBFaW5hX0Jvb2wgZm9yd2FyZCwgRWluYV9Cb29sIHdyYXApCiB7Ci0gICAg
RVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJ
RVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJ
RVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc3RyaW5nLCBFSU5BX0ZBTFNFKTsKICAgICBXVEY6OlRl
eHRDYXNlU2Vuc2l0aXZpdHkgc2Vuc2l0aXZlOwpAQCAtMTMzMSw5ICsxMzMxLDkgQEAgRWluYV9C
b29sIGV3a192aWV3X3RleHRfc2VhcmNoKGNvbnN0IEV2YXNfT2JqZWN0KiBvLCBjb25zdCBjaGFy
KiBzdHJpbmcsIEVpbmFfQm8KICAqCiAgKiBAcmV0dXJuIG51bWJlciBvZiBtYXRjaGVzLgogICov
Ci11bnNpZ25lZCBpbnQgZXdrX3ZpZXdfdGV4dF9tYXRjaGVzX21hcmsoRXZhc19PYmplY3QqIG8s
IGNvbnN0IGNoYXIqIHN0cmluZywgRWluYV9Cb29sIGNhc2Vfc2Vuc2l0aXZlLCBFaW5hX0Jvb2wg
aGlnaGxpZ2h0LCB1bnNpZ25lZCBpbnQgbGltaXQpCit1bnNpZ25lZCBpbnQgZXdrX3ZpZXdfdGV4
dF9tYXRjaGVzX21hcmsoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGNvbnN0IGNoYXIqIHN0cmluZywg
RWluYV9Cb29sIGNhc2Vfc2Vuc2l0aXZlLCBFaW5hX0Jvb2wgaGlnaGxpZ2h0LCB1bnNpZ25lZCBp
bnQgbGltaXQpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgMCk7Cisg
ICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgMCk7CiAgICAgRVdLX1ZJ
RVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCAwKTsKICAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTl9WQUwoc3RyaW5nLCAwKTsKICAgICBXVEY6OlRleHRDYXNlU2Vuc2l0aXZpdHkg
c2Vuc2l0aXZlOwpAQCAtMTM0NiwzNSArMTM0NiwzNSBAQCB1bnNpZ25lZCBpbnQgZXdrX3ZpZXdf
dGV4dF9tYXRjaGVzX21hcmsoRXZhc19PYmplY3QqIG8sIGNvbnN0IGNoYXIqIHN0cmluZywgRWlu
YQogICAgIHJldHVybiBwcml2LT5wYWdlLT5tYXJrQWxsTWF0Y2hlc0ZvclRleHQoU3RyaW5nOjpm
cm9tVVRGOChzdHJpbmcpLCBzZW5zaXRpdmUsIGhpZ2hsaWdodCwgbGltaXQpOwogfQogCi1FaW5h
X0Jvb2wgZXdrX3ZpZXdfdGV4dF9tYXRjaGVzX3VubWFya19hbGwoRXZhc19PYmplY3QqIG8pCitF
aW5hX0Jvb2wgZXdrX3ZpZXdfdGV4dF9tYXRjaGVzX3VubWFya19hbGwoRXZhc19PYmplY3QqIGV3
a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxT
RSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxT
RSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNF
KTsKICAgICBwcml2LT5wYWdlLT51bm1hcmtBbGxUZXh0TWF0Y2hlcygpOwogICAgIHJldHVybiBF
SU5BX1RSVUU7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld190ZXh0X21hdGNoZXNfaGlnaGxpZ2h0
X3NldChFdmFzX09iamVjdCogbywgRWluYV9Cb29sIGhpZ2hsaWdodCkKK0VpbmFfQm9vbCBld2tf
dmlld190ZXh0X21hdGNoZXNfaGlnaGxpZ2h0X3NldChFdmFzX09iamVjdCogZXdrVmlldywgRWlu
YV9Cb29sIGhpZ2hsaWdodCkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNk
LCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNk
LCBFSU5BX0ZBTFNFKTsKICAgICByZXR1cm4gZXdrX2ZyYW1lX3RleHRfbWF0Y2hlc19oaWdobGln
aHRfc2V0KHNkLT5tYWluX2ZyYW1lLCBoaWdobGlnaHQpOwogfQogCi1FaW5hX0Jvb2wgZXdrX3Zp
ZXdfdGV4dF9tYXRjaGVzX2hpZ2hsaWdodF9nZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCitFaW5h
X0Jvb2wgZXdrX3ZpZXdfdGV4dF9tYXRjaGVzX2hpZ2hsaWdodF9nZXQoY29uc3QgRXZhc19PYmpl
Y3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlO
QV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlO
QV9GQUxTRSk7CiAgICAgcmV0dXJuIGV3a19mcmFtZV90ZXh0X21hdGNoZXNfaGlnaGxpZ2h0X2dl
dChzZC0+bWFpbl9mcmFtZSk7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld19lZGl0YWJsZV9zZXQo
RXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCBlZGl0YWJsZSkKK0VpbmFfQm9vbCBld2tfdmlld19l
ZGl0YWJsZV9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCBlZGl0YWJsZSkKIHsK
LSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBF
V0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBy
ZXR1cm4gZXdrX2ZyYW1lX2VkaXRhYmxlX3NldChzZC0+bWFpbl9mcmFtZSwgZWRpdGFibGUpOwog
fQogCi1jaGFyKiBld2tfdmlld19zZWxlY3Rpb25fZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQor
Y2hhciogZXdrX3ZpZXdfc2VsZWN0aW9uX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykK
IHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAwKTsKKyAgICBFV0tfVklF
V19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAwKTsKICAgICBFV0tfVklFV19QUklWX0dF
VF9PUl9SRVRVUk4oc2QsIHByaXYsIDApOwogICAgIENTdHJpbmcgcyA9IHByaXYtPnBhZ2UtPmZv
Y3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKS0+ZWRpdG9yKCktPnNlbGVjdGVk
VGV4dCgpLnV0ZjgoKTsKICAgICBpZiAocy5pc051bGwoKSkKQEAgLTEzODcsOSArMTM4Nyw5IEBA
IHN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X2VkaXRvcl9jb21tYW5kKEV3a19WaWV3X1ByaXZh
dGVfRGF0YSogcHJpdiwgY29uc3QgY2hhCiAgICAgcmV0dXJuIHByaXYtPnBhZ2UtPmZvY3VzQ29u
dHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKS0+ZWRpdG9yKCktPmNvbW1hbmQoV1RGOjpT
dHJpbmc6OmZyb21VVEY4KGNvbW1hbmQpKS5leGVjdXRlKHZhbHVlKTsKIH0KIAotRWluYV9Cb29s
IGV3a192aWV3X2V4ZWN1dGVfZWRpdG9yX2NvbW1hbmQoRXZhc19PYmplY3QqIG8sIGNvbnN0IEV3
a19FZGl0b3JfQ29tbWFuZCBjb21tYW5kLCBjb25zdCBjaGFyKiB2YWx1ZSkKK0VpbmFfQm9vbCBl
d2tfdmlld19leGVjdXRlX2VkaXRvcl9jb21tYW5kKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25z
dCBFd2tfRWRpdG9yX0NvbW1hbmQgY29tbWFuZCwgY29uc3QgY2hhciogdmFsdWUpCiB7Ci0gICAg
RVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJ
RVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJ
RVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKIAogICAgIHN3aXRj
aCAoY29tbWFuZCkgewpAQCAtMTQxNCwxMCArMTQxNCwxMCBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdf
ZXhlY3V0ZV9lZGl0b3JfY29tbWFuZChFdmFzX09iamVjdCogbywgY29uc3QgRXdrX0VkaXRvcl9D
b21tYQogICAgIH0KIH0KIAotRWluYV9Cb29sIGV3a192aWV3X2NvbnRleHRfbWVudV9mb3J3YXJk
X2V2ZW50KEV2YXNfT2JqZWN0KiBvLCBjb25zdCBFdmFzX0V2ZW50X01vdXNlX0Rvd24qIGV2KQor
RWluYV9Cb29sIGV3a192aWV3X2NvbnRleHRfbWVudV9mb3J3YXJkX2V2ZW50KEV2YXNfT2JqZWN0
KiBld2tWaWV3LCBjb25zdCBFdmFzX0V2ZW50X01vdXNlX0Rvd24qIGV2KQogewogI2lmIEVOQUJM
RShDT05URVhUX01FTlVTKQotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJ
TkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJ
TkFfRkFMU0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlO
QV9GQUxTRSk7CiAgICAgRWluYV9Cb29sIG1vdXNlX3ByZXNzX2hhbmRsZWQgPSBFSU5BX0ZBTFNF
OwogCkBAIC0xNDUwLDg1ICsxNDUwLDg1IEBAIEVpbmFfQm9vbCBld2tfdmlld19jb250ZXh0X21l
bnVfZm9yd2FyZF9ldmVudChFdmFzX09iamVjdCogbywgY29uc3QgRXZhc19FdmVudF9NCiAjZW5k
aWYKIH0KIAotZG91YmxlIGV3a192aWV3X2xvYWRfcHJvZ3Jlc3NfZ2V0KGNvbnN0IEV2YXNfT2Jq
ZWN0KiBvKQorZG91YmxlIGV3a192aWV3X2xvYWRfcHJvZ3Jlc3NfZ2V0KGNvbnN0IEV2YXNfT2Jq
ZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIC0x
LjApOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIC0xLjApOwog
ICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgLTEuMCk7CiAgICAgcmV0
dXJuIHByaXYtPnBhZ2UtPnByb2dyZXNzKCktPmVzdGltYXRlZFByb2dyZXNzKCk7CiB9CiAKLUVp
bmFfQm9vbCBld2tfdmlld19zdG9wKEV2YXNfT2JqZWN0KiBvKQorRWluYV9Cb29sIGV3a192aWV3
X3N0b3AoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JF
VFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihl
d2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgcmV0dXJuIGV3a19mcmFtZV9zdG9wKHNkLT5t
YWluX2ZyYW1lKTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3JlbG9hZChFdmFzX09iamVjdCog
bykKK0VpbmFfQm9vbCBld2tfdmlld19yZWxvYWQoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0g
ICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdL
X1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgcmV0
dXJuIGV3a19mcmFtZV9yZWxvYWQoc2QtPm1haW5fZnJhbWUpOwogfQogCi1FaW5hX0Jvb2wgZXdr
X3ZpZXdfcmVsb2FkX2Z1bGwoRXZhc19PYmplY3QqIG8pCitFaW5hX0Jvb2wgZXdrX3ZpZXdfcmVs
b2FkX2Z1bGwoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
Tihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgcmV0dXJuIGV3a19mcmFtZV9yZWxvYWRf
ZnVsbChzZC0+bWFpbl9mcmFtZSk7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld19iYWNrKEV2YXNf
T2JqZWN0KiBvKQorRWluYV9Cb29sIGV3a192aWV3X2JhY2soRXZhc19PYmplY3QqIGV3a1ZpZXcp
CiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7Cisg
ICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAg
ICAgcmV0dXJuIGV3a19mcmFtZV9iYWNrKHNkLT5tYWluX2ZyYW1lKTsKIH0KIAotRWluYV9Cb29s
IGV3a192aWV3X2ZvcndhcmQoRXZhc19PYmplY3QqIG8pCitFaW5hX0Jvb2wgZXdrX3ZpZXdfZm9y
d2FyZChFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVU
VVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3
a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICByZXR1cm4gZXdrX2ZyYW1lX2ZvcndhcmQoc2Qt
Pm1haW5fZnJhbWUpOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfbmF2aWdhdGUoRXZhc19PYmpl
Y3QqIG8sIGludCBzdGVwcykKK0VpbmFfQm9vbCBld2tfdmlld19uYXZpZ2F0ZShFdmFzX09iamVj
dCogZXdrVmlldywgaW50IHN0ZXBzKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
bywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmll
dywgc2QsIEVJTkFfRkFMU0UpOwogICAgIHJldHVybiBld2tfZnJhbWVfbmF2aWdhdGUoc2QtPm1h
aW5fZnJhbWUsIHN0ZXBzKTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X2JhY2tfcG9zc2libGUo
RXZhc19PYmplY3QqIG8pCitFaW5hX0Jvb2wgZXdrX3ZpZXdfYmFja19wb3NzaWJsZShFdmFzX09i
amVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBF
SU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBF
SU5BX0ZBTFNFKTsKICAgICByZXR1cm4gZXdrX2ZyYW1lX2JhY2tfcG9zc2libGUoc2QtPm1haW5f
ZnJhbWUpOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfZm9yd2FyZF9wb3NzaWJsZShFdmFzX09i
amVjdCogbykKK0VpbmFfQm9vbCBld2tfdmlld19mb3J3YXJkX3Bvc3NpYmxlKEV2YXNfT2JqZWN0
KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFf
RkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFf
RkFMU0UpOwogICAgIHJldHVybiBld2tfZnJhbWVfZm9yd2FyZF9wb3NzaWJsZShzZC0+bWFpbl9m
cmFtZSk7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld19uYXZpZ2F0ZV9wb3NzaWJsZShFdmFzX09i
amVjdCogbywgaW50IHN0ZXBzKQorRWluYV9Cb29sIGV3a192aWV3X25hdmlnYXRlX3Bvc3NpYmxl
KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBpbnQgc3RlcHMpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JF
VFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgcmV0dXJuIGV3a19mcmFtZV9uYXZp
Z2F0ZV9wb3NzaWJsZShzZC0+bWFpbl9mcmFtZSwgc3RlcHMpOwogfQogCi1FaW5hX0Jvb2wgZXdr
X3ZpZXdfaGlzdG9yeV9lbmFibGVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQorRWluYV9Cb29s
IGV3a192aWV3X2hpc3RvcnlfZW5hYmxlX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykK
IHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAg
ICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwogICAg
IHJldHVybiBzdGF0aWNfY2FzdDxXZWJDb3JlOjpCYWNrRm9yd2FyZExpc3RJbXBsKj4ocHJpdi0+
cGFnZS0+YmFja0ZvcndhcmRMaXN0KCkpLT5lbmFibGVkKCk7CiB9CiAKLUVpbmFfQm9vbCBld2tf
dmlld19oaXN0b3J5X2VuYWJsZV9zZXQoRXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCBlbmFibGUp
CitFaW5hX0Jvb2wgZXdrX3ZpZXdfaGlzdG9yeV9lbmFibGVfc2V0KEV2YXNfT2JqZWN0KiBld2tW
aWV3LCBFaW5hX0Jvb2wgZW5hYmxlKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
bywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmll
dywgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwg
cHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgc3RhdGljX2Nhc3Q8V2ViQ29yZTo6QmFja0ZvcndhcmRM
aXN0SW1wbCo+KHByaXYtPnBhZ2UtPmJhY2tGb3J3YXJkTGlzdCgpKS0+c2V0RW5hYmxlZChlbmFi
bGUpOwogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLUV3a19IaXN0b3J5KiBld2tfdmlld19o
aXN0b3J5X2dldChjb25zdCBFdmFzX09iamVjdCogbykKK0V3a19IaXN0b3J5KiBld2tfdmlld19o
aXN0b3J5X2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19T
RF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAwKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJO
KGV3a1ZpZXcsIHNkLCAwKTsKICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHBy
aXYsIDApOwogICAgIGlmICghc3RhdGljX2Nhc3Q8V2ViQ29yZTo6QmFja0ZvcndhcmRMaXN0SW1w
bCo+KHByaXYtPnBhZ2UtPmJhY2tGb3J3YXJkTGlzdCgpKS0+ZW5hYmxlZCgpKSB7CiAgICAgICAg
IEVSUigiYXNrZWQgaGlzdG9yeSwgYnV0IGl0J3MgZGlzYWJsZWQhIFJldHVybmluZyAwISIpOwpA
QCAtMTUzNywxNSArMTUzNywxNSBAQCBFd2tfSGlzdG9yeSogZXdrX3ZpZXdfaGlzdG9yeV9nZXQo
Y29uc3QgRXZhc19PYmplY3QqIG8pCiAgICAgcmV0dXJuIHByaXYtPmhpc3Rvcnk7CiB9CiAKLWZs
b2F0IGV3a192aWV3X3pvb21fZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQorZmxvYXQgZXdrX3Zp
ZXdfem9vbV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihvLCBzZCwgLTEuMCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JF
VFVSTihld2tWaWV3LCBzZCwgLTEuMCk7CiAgICAgcmV0dXJuIGV3a19mcmFtZV96b29tX2dldChz
ZC0+bWFpbl9mcmFtZSk7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld196b29tX3NldChFdmFzX09i
amVjdCogbywgZmxvYXQgem9vbSwgRXZhc19Db29yZCBjeCwgRXZhc19Db29yZCBjeSkKK0VpbmFf
Qm9vbCBld2tfdmlld196b29tX3NldChFdmFzX09iamVjdCogZXdrVmlldywgZmxvYXQgem9vbSwg
RXZhc19Db29yZCBjeCwgRXZhc19Db29yZCBjeSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1Jf
UkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJO
KGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFV0tfVklFV19QUklWX0dFVChzZCwgcHJp
dik7CiAKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmFwaSwgRUlOQV9G
QUxTRSk7CkBAIC0xNTY5LDE1ICsxNTY5LDE1IEBAIEVpbmFfQm9vbCBld2tfdmlld196b29tX3Nl
dChFdmFzX09iamVjdCogbywgZmxvYXQgem9vbSwgRXZhc19Db29yZCBjeCwgRXZhc19Db29yCiAg
ICAgcmV0dXJuIHNkLT5hcGktPnpvb21fc2V0KHNkLCB6b29tLCBjeCwgY3kpOwogfQogCi1FaW5h
X0Jvb2wgZXdrX3ZpZXdfem9vbV93ZWFrX3Ntb290aF9zY2FsZV9nZXQoY29uc3QgRXZhc19PYmpl
Y3QqIG8pCitFaW5hX0Jvb2wgZXdrX3ZpZXdfem9vbV93ZWFrX3Ntb290aF9zY2FsZV9nZXQoY29u
c3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
TihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tW
aWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgcmV0dXJuIHNkLT56b29tX3dlYWtfc21vb3RoX3Nj
YWxlOwogfQogCi12b2lkIGV3a192aWV3X3pvb21fd2Vha19zbW9vdGhfc2NhbGVfc2V0KEV2YXNf
T2JqZWN0KiBvLCBFaW5hX0Jvb2wgc21vb3RoX3NjYWxlKQordm9pZCBld2tfdmlld196b29tX3dl
YWtfc21vb3RoX3NjYWxlX3NldChFdmFzX09iamVjdCogZXdrVmlldywgRWluYV9Cb29sIHNtb290
aF9zY2FsZSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkKTsKKyAgICBF
V0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkKTsKICAgICBzbW9vdGhfc2NhbGUg
PSAhIXNtb290aF9zY2FsZTsKICAgICBpZiAoc2QtPnpvb21fd2Vha19zbW9vdGhfc2NhbGUgPT0g
c21vb3RoX3NjYWxlKQogICAgICAgICByZXR1cm47CkBAIC0xNTg3LDkgKzE1ODcsOSBAQCB2b2lk
IGV3a192aWV3X3pvb21fd2Vha19zbW9vdGhfc2NhbGVfc2V0KEV2YXNfT2JqZWN0KiBvLCBFaW5h
X0Jvb2wgc21vb3RoX3NjYWxlKQogICAgIHNkLT5hcGktPnpvb21fd2Vha19zbW9vdGhfc2NhbGVf
c2V0KHNkLCBzbW9vdGhfc2NhbGUpOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfem9vbV93ZWFr
X3NldChFdmFzX09iamVjdCogbywgZmxvYXQgem9vbSwgRXZhc19Db29yZCBjeCwgRXZhc19Db29y
ZCBjeSkKK0VpbmFfQm9vbCBld2tfdmlld196b29tX3dlYWtfc2V0KEV2YXNfT2JqZWN0KiBld2tW
aWV3LCBmbG9hdCB6b29tLCBFdmFzX0Nvb3JkIGN4LCBFdmFzX0Nvb3JkIGN5KQogewotICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVX
X1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVXS19WSUVX
X1BSSVZfR0VUKHNkLCBwcml2KTsKIAogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZB
TChzZC0+YXBpLCBFSU5BX0ZBTFNFKTsKQEAgLTE2MTUsMzggKzE2MTUsMzggQEAgRWluYV9Cb29s
IGV3a192aWV3X3pvb21fd2Vha19zZXQoRXZhc19PYmplY3QqIG8sIGZsb2F0IHpvb20sIEV2YXNf
Q29vcmQgY3gsIEV2YXMKICAgICByZXR1cm4gc2QtPmFwaS0+em9vbV93ZWFrX3NldChzZCwgem9v
bSwgY3gsIGN5KTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3pvb21fYW5pbWF0ZWRfbWFya19z
dGFydChFdmFzX09iamVjdCogbywgZmxvYXQgem9vbSkKK0VpbmFfQm9vbCBld2tfdmlld196b29t
X2FuaW1hdGVkX21hcmtfc3RhcnQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGZsb2F0IHpvb20pCiB7
Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAg
RVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAg
c2QtPmFuaW1hdGVkX3pvb20uem9vbS5zdGFydCA9IHpvb207CiAgICAgcmV0dXJuIEVJTkFfVFJV
RTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3pvb21fYW5pbWF0ZWRfbWFya19lbmQoRXZhc19P
YmplY3QqIG8sIGZsb2F0IHpvb20pCitFaW5hX0Jvb2wgZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9t
YXJrX2VuZChFdmFzX09iamVjdCogZXdrVmlldywgZmxvYXQgem9vbSkKIHsKLSAgICBFV0tfVklF
V19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9H
RVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBzZC0+YW5pbWF0ZWRf
em9vbS56b29tLmVuZCA9IHpvb207CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotRWluYV9C
b29sIGV3a192aWV3X3pvb21fYW5pbWF0ZWRfbWFya19jdXJyZW50KEV2YXNfT2JqZWN0KiBvLCBm
bG9hdCB6b29tKQorRWluYV9Cb29sIGV3a192aWV3X3pvb21fYW5pbWF0ZWRfbWFya19jdXJyZW50
KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBmbG9hdCB6b29tKQogewotICAgIEVXS19WSUVXX1NEX0dF
VF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9S
RVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAgIHNkLT5hbmltYXRlZF96b29tLnpv
b20uY3VycmVudCA9IHpvb207CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotRWluYV9Cb29s
IGV3a192aWV3X3pvb21fYW5pbWF0ZWRfbWFya19zdG9wKEV2YXNfT2JqZWN0KiBvKQorRWluYV9C
b29sIGV3a192aWV3X3pvb21fYW5pbWF0ZWRfbWFya19zdG9wKEV2YXNfT2JqZWN0KiBld2tWaWV3
KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOwor
ICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwog
ICAgIF9ld2tfdmlld196b29tX2FuaW1hdGVkX21hcmtfc3RvcChzZCk7CiAgICAgcmV0dXJuIEVJ
TkFfVFJVRTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3pvb21fYW5pbWF0ZWRfc2V0KEV2YXNf
T2JqZWN0KiBvLCBmbG9hdCB6b29tLCBmbG9hdCBkdXJhdGlvbiwgRXZhc19Db29yZCBjeCwgRXZh
c19Db29yZCBjeSkKK0VpbmFfQm9vbCBld2tfdmlld196b29tX2FuaW1hdGVkX3NldChFdmFzX09i
amVjdCogZXdrVmlldywgZmxvYXQgem9vbSwgZmxvYXQgZHVyYXRpb24sIEV2YXNfQ29vcmQgY3gs
IEV2YXNfQ29vcmQgY3kpCiB7CiAgICAgZG91YmxlIG5vdzsKLSAgICBFV0tfVklFV19TRF9HRVRf
T1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVU
VVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9S
RVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOX1ZBTChzZC0+YXBpLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTl9WQUwoc2QtPmFwaS0+em9vbV93ZWFrX3NldCwgRUlOQV9GQUxTRSk7CkBAIC0xNjkyLDIx
ICsxNjkyLDIxIEBAIEVpbmFfQm9vbCBld2tfdmlld196b29tX2FuaW1hdGVkX3NldChFdmFzX09i
amVjdCogbywgZmxvYXQgem9vbSwgZmxvYXQgZHVyYXRpb24sCiAgICAgcmV0dXJuIEVJTkFfVFJV
RTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3pvb21fdGV4dF9vbmx5X2dldChjb25zdCBFdmFz
X09iamVjdCogbykKK0VpbmFfQm9vbCBld2tfdmlld196b29tX3RleHRfb25seV9nZXQoY29uc3Qg
RXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihv
LCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3
LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgcmV0dXJuIGV3a19mcmFtZV96b29tX3RleHRfb25seV9n
ZXQoc2QtPm1haW5fZnJhbWUpOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfem9vbV90ZXh0X29u
bHlfc2V0KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wgc2V0dGluZykKK0VpbmFfQm9vbCBld2tf
dmlld196b29tX3RleHRfb25seV9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCBz
ZXR0aW5nKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFM
U0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFM
U0UpOwogICAgIHJldHVybiBld2tfZnJhbWVfem9vbV90ZXh0X29ubHlfc2V0KHNkLT5tYWluX2Zy
YW1lLCBzZXR0aW5nKTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3ByZV9yZW5kZXJfcmVnaW9u
KEV2YXNfT2JqZWN0KiBvLCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwgRXZhc19Db29yZCB3
LCBFdmFzX0Nvb3JkIGgsIGZsb2F0IHpvb20pCitFaW5hX0Jvb2wgZXdrX3ZpZXdfcHJlX3JlbmRl
cl9yZWdpb24oRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5
LCBFdmFzX0Nvb3JkIHcsIEV2YXNfQ29vcmQgaCwgZmxvYXQgem9vbSkKIHsKLSAgICBFV0tfVklF
V19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9H
RVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFV0tfVklFV19QUklW
X0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOX1ZBTChzZC0+YXBpLT5wcmVfcmVuZGVyX3JlZ2lvbiwgRUlOQV9GQUxTRSk7
CiAgICAgZmxvYXQgY3VyX3pvb207CkBAIC0xNzQ3LDkgKzE3NDcsOSBAQCBFaW5hX0Jvb2wgZXdr
X3ZpZXdfcHJlX3JlbmRlcl9yZWdpb24oRXZhc19PYmplY3QqIG8sIEV2YXNfQ29vcmQgeCwgRXZh
c19Db29yZCB5LAogICAgIHJldHVybiBzZC0+YXBpLT5wcmVfcmVuZGVyX3JlZ2lvbihzZCwgeCwg
eSwgdywgaCwgem9vbSk7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld19wcmVfcmVuZGVyX3JlbGF0
aXZlX3JhZGl1cyhFdmFzX09iamVjdCogbywgdW5zaWduZWQgaW50IG4pCitFaW5hX0Jvb2wgZXdr
X3ZpZXdfcHJlX3JlbmRlcl9yZWxhdGl2ZV9yYWRpdXMoRXZhc19PYmplY3QqIGV3a1ZpZXcsIHVu
c2lnbmVkIGludCBuKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJ
TkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJ
TkFfRkFMU0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlO
QV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5hcGktPnBy
ZV9yZW5kZXJfcmVsYXRpdmVfcmFkaXVzLCBFSU5BX0ZBTFNFKTsKICAgICBmbG9hdCBjdXJfem9v
bTsKQEAgLTE3NjEsNDQgKzE3NjEsNDQgQEAgRWluYV9Cb29sIGV3a192aWV3X3ByZV9yZW5kZXJf
cmVsYXRpdmVfcmFkaXVzKEV2YXNfT2JqZWN0KiBvLCB1bnNpZ25lZCBpbnQgbikKICAgICByZXR1
cm4gc2QtPmFwaS0+cHJlX3JlbmRlcl9yZWxhdGl2ZV9yYWRpdXMoc2QsIG4sIGN1cl96b29tKTsK
IH0KIAotdW5zaWduZWQgaW50IGV3a192aWV3X2ltaF9nZXQoY29uc3QgRXZhc19PYmplY3QqIG8p
Cit1bnNpZ25lZCBpbnQgZXdrX3ZpZXdfaW1oX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmll
dykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAwKTsKKyAgICBFV0tf
VklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAwKTsKICAgICBFV0tfVklFV19QUklW
X0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIDApOwogICAgIHJldHVybiBwcml2LT5pbWg7CiB9CiAK
LXZvaWQgZXdrX3ZpZXdfcHJlX3JlbmRlcl9jYW5jZWwoRXZhc19PYmplY3QqIG8pCit2b2lkIGV3
a192aWV3X3ByZV9yZW5kZXJfY2FuY2VsKEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9S
RVRVUk4oZXdrVmlldywgc2QpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5h
cGktPnByZV9yZW5kZXJfY2FuY2VsKTsKICAgICBzZC0+YXBpLT5wcmVfcmVuZGVyX2NhbmNlbChz
ZCk7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld19lbmFibGVfcmVuZGVyKGNvbnN0IEV2YXNfT2Jq
ZWN0KiBvKQorRWluYV9Cb29sIGV3a192aWV3X2VuYWJsZV9yZW5kZXIoY29uc3QgRXZhc19PYmpl
Y3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlO
QV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlO
QV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5hcGktPmVu
YWJsZV9yZW5kZXIsIEVJTkFfRkFMU0UpOwogICAgIHJldHVybiBzZC0+YXBpLT5lbmFibGVfcmVu
ZGVyKHNkKTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X2Rpc2FibGVfcmVuZGVyKGNvbnN0IEV2
YXNfT2JqZWN0KiBvKQorRWluYV9Cb29sIGV3a192aWV3X2Rpc2FibGVfcmVuZGVyKGNvbnN0IEV2
YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywg
c2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywg
c2QsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+
YXBpLT5kaXNhYmxlX3JlbmRlciwgRUlOQV9GQUxTRSk7CiAgICAgcmV0dXJuIHNkLT5hcGktPmRp
c2FibGVfcmVuZGVyKHNkKTsKIH0KIAotY29uc3QgY2hhciogZXdrX3ZpZXdfc2V0dGluZ191c2Vy
X2FnZW50X2dldChjb25zdCBFdmFzX09iamVjdCogbykKK2NvbnN0IGNoYXIqIGV3a192aWV3X3Nl
dHRpbmdfdXNlcl9hZ2VudF9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAg
RVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgMCk7CisgICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihld2tWaWV3LCBzZCwgMCk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVU
VVJOKHNkLCBwcml2LCAwKTsKICAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MudXNlcl9hZ2VudDsK
IH0KIAotRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfdXNlcl9hZ2VudF9zZXQoRXZhc19PYmpl
Y3QqIG8sIGNvbnN0IGNoYXIqIHVzZXJfYWdlbnQpCitFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGlu
Z191c2VyX2FnZW50X3NldChFdmFzX09iamVjdCogZXdrVmlldywgY29uc3QgY2hhciogdXNlcl9h
Z2VudCkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNF
KTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNF
KTsKICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0Up
OwogICAgIGlmIChlaW5hX3N0cmluZ3NoYXJlX3JlcGxhY2UoJnByaXYtPnNldHRpbmdzLnVzZXJf
YWdlbnQsIHVzZXJfYWdlbnQpKSB7CiAgICAgICAgIFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50
RWZsKiBjbGllbnQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEVmbCo+
KHByaXYtPm1haW5fZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKSk7CkBAIC0xODA3LDE2ICsxODA3
LDE2IEBAIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX3VzZXJfYWdlbnRfc2V0KEV2YXNfT2Jq
ZWN0KiBvLCBjb25zdCBjaGFyKiB1c2VyX2FnZW50CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0K
IAotY29uc3QgY2hhciogZXdrX3ZpZXdfc2V0dGluZ191c2VyX3N0eWxlc2hlZXRfZ2V0KGNvbnN0
IEV2YXNfT2JqZWN0KiBvKQorY29uc3QgY2hhciogZXdrX3ZpZXdfc2V0dGluZ191c2VyX3N0eWxl
c2hlZXRfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NE
X0dFVF9PUl9SRVRVUk4obywgc2QsIDApOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrVmlldywgc2QsIDApOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJp
diwgMCk7CiAgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLnVzZXJfc3R5bGVzaGVldDsKIH0KIAot
RWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfdXNlcl9zdHlsZXNoZWV0X3NldChFdmFzX09iamVj
dCogbywgY29uc3QgY2hhciogdXJpKQorRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfdXNlcl9z
dHlsZXNoZWV0X3NldChFdmFzX09iamVjdCogZXdrVmlldywgY29uc3QgY2hhciogdXJpKQogewot
ICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVX
S19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgaWYg
KGVpbmFfc3RyaW5nc2hhcmVfcmVwbGFjZSgmcHJpdi0+c2V0dGluZ3MudXNlcl9zdHlsZXNoZWV0
LCB1cmkpKSB7CiAgICAgICAgIFdlYkNvcmU6OktVUkwga3VybChXZWJDb3JlOjpLVVJMKCksIFN0
cmluZzo6ZnJvbVVURjgodXJpKSk7CkBAIC0xODI1LDE2ICsxODI1LDE2IEBAIEVpbmFfQm9vbCBl
d2tfdmlld19zZXR0aW5nX3VzZXJfc3R5bGVzaGVldF9zZXQoRXZhc19PYmplY3QqIG8sIGNvbnN0
IGNoYXIqIHVyaSkKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi1FaW5hX0Jvb2wgZXdrX3Zp
ZXdfc2V0dGluZ19hdXRvX2xvYWRfaW1hZ2VzX2dldChjb25zdCBFdmFzX09iamVjdCogbykKK0Vp
bmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2F1dG9fbG9hZF9pbWFnZXNfZ2V0KGNvbnN0IEV2YXNf
T2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2Qs
IEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2Qs
IEVJTkFfRkFMU0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwg
RUlOQV9GQUxTRSk7CiAgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmF1dG9fbG9hZF9pbWFnZXM7
CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2F1dG9fbG9hZF9pbWFnZXNfc2V0KEV2
YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wgYXV0b21hdGljKQorRWluYV9Cb29sIGV3a192aWV3X3Nl
dHRpbmdfYXV0b19sb2FkX2ltYWdlc19zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9v
bCBhdXRvbWF0aWMpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlO
QV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlO
QV9GQUxTRSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5B
X0ZBTFNFKTsKICAgICBhdXRvbWF0aWMgPSAhIWF1dG9tYXRpYzsKICAgICBpZiAocHJpdi0+c2V0
dGluZ3MuYXV0b19sb2FkX2ltYWdlcyAhPSBhdXRvbWF0aWMpIHsKQEAgLTE4NDQsMTYgKzE4NDQs
MTYgQEAgRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfYXV0b19sb2FkX2ltYWdlc19zZXQoRXZh
c19PYmplY3QqIG8sIEVpbmFfQm9vbCBhdXRvbWEKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQog
Ci1FaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19hdXRvX3Nocmlua19pbWFnZXNfZ2V0KGNvbnN0
IEV2YXNfT2JqZWN0KiBvKQorRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfYXV0b19zaHJpbmtf
aW1hZ2VzX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19T
RF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRf
T1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFV0tfVklFV19QUklWX0dF
VF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIHJldHVybiBwcml2LT5zZXR0
aW5ncy5hdXRvX3Nocmlua19pbWFnZXM7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5n
X2F1dG9fc2hyaW5rX2ltYWdlc19zZXQoRXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCBhdXRvbWF0
aWMpCitFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19hdXRvX3Nocmlua19pbWFnZXNfc2V0KEV2
YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wgYXV0b21hdGljKQogewotICAgIEVXS19WSUVX
X1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dF
VF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVXS19WSUVXX1BSSVZf
R0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgYXV0b21hdGljID0gISFh
dXRvbWF0aWM7CiAgICAgaWYgKHByaXYtPnNldHRpbmdzLmF1dG9fc2hyaW5rX2ltYWdlcyAhPSBh
dXRvbWF0aWMpIHsKQEAgLTE4NjMsMzEgKzE4NjMsMzEgQEAgRWluYV9Cb29sIGV3a192aWV3X3Nl
dHRpbmdfYXV0b19zaHJpbmtfaW1hZ2VzX3NldChFdmFzX09iamVjdCogbywgRWluYV9Cb29sIGF1
dG8KICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGlu
Z19lbmFibGVfYXV0b19yZXNpemVfd2luZG93X2dldChjb25zdCBFdmFzX09iamVjdCogbykKK0Vp
bmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2VuYWJsZV9hdXRvX3Jlc2l6ZV93aW5kb3dfZ2V0KGNv
bnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRV
Uk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdr
Vmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihz
ZCwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmVuYWJsZV9h
dXRvX3Jlc2l6ZV93aW5kb3c7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2VuYWJs
ZV9hdXRvX3Jlc2l6ZV93aW5kb3dfc2V0KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wgcmVzaXph
YmxlKQorRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfZW5hYmxlX2F1dG9fcmVzaXplX3dpbmRv
d19zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCByZXNpemFibGUpCiB7Ci0gICAg
RVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJ
RVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJ
RVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBwcml2LT5z
ZXR0aW5ncy5lbmFibGVfYXV0b19yZXNpemVfd2luZG93ID0gcmVzaXphYmxlOwogICAgIHJldHVy
biBFSU5BX1RSVUU7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2VuYWJsZV9zY3Jp
cHRzX2dldChjb25zdCBFdmFzX09iamVjdCogbykKK0VpbmFfQm9vbCBld2tfdmlld19zZXR0aW5n
X2VuYWJsZV9zY3JpcHRzX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBF
V0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklF
V19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFV0tfVklF
V19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIHJldHVybiBw
cml2LT5zZXR0aW5ncy5lbmFibGVfc2NyaXB0czsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3Nl
dHRpbmdfZW5hYmxlX3NjcmlwdHNfc2V0KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wgZW5hYmxl
KQorRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfZW5hYmxlX3NjcmlwdHNfc2V0KEV2YXNfT2Jq
ZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wgZW5hYmxlKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9P
Ul9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRV
Uk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JF
VFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgZW5hYmxlID0gISFlbmFibGU7CiAgICAg
aWYgKHByaXYtPnNldHRpbmdzLmVuYWJsZV9zY3JpcHRzICE9IGVuYWJsZSkgewpAQCAtMTg5Nywx
NiArMTg5NywxNiBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19lbmFibGVfc2NyaXB0c19z
ZXQoRXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCBlbmFibGUpCiAgICAgcmV0dXJuIEVJTkFfVFJV
RTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfZW5hYmxlX3BsdWdpbnNfZ2V0KGNv
bnN0IEV2YXNfT2JqZWN0KiBvKQorRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfZW5hYmxlX3Bs
dWdpbnNfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NE
X0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9P
Ul9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VU
X09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgcmV0dXJuIHByaXYtPnNldHRp
bmdzLmVuYWJsZV9wbHVnaW5zOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19lbmFi
bGVfcGx1Z2luc19zZXQoRXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCBlbmFibGUpCitFaW5hX0Jv
b2wgZXdrX3ZpZXdfc2V0dGluZ19lbmFibGVfcGx1Z2luc19zZXQoRXZhc19PYmplY3QqIGV3a1Zp
ZXcsIEVpbmFfQm9vbCBlbmFibGUpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihv
LCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3
LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBw
cml2LCBFSU5BX0ZBTFNFKTsKICAgICBlbmFibGUgPSAhIWVuYWJsZTsKICAgICBpZiAocHJpdi0+
c2V0dGluZ3MuZW5hYmxlX3BsdWdpbnMgIT0gZW5hYmxlKSB7CkBAIC0xOTE2LDE2ICsxOTE2LDE2
IEBAIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2VuYWJsZV9wbHVnaW5zX3NldChFdmFzX09i
amVjdCogbywgRWluYV9Cb29sIGVuYWJsZSkKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi1F
aW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19lbmFibGVfZnJhbWVfZmxhdHRlbmluZ19nZXQoY29u
c3QgRXZhc19PYmplY3QqIG8pCitFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19lbmFibGVfZnJh
bWVfZmxhdHRlbmluZ19nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdL
X1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJRVdf
UFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICByZXR1cm4gcHJp
di0+c2V0dGluZ3MuZW5hYmxlX2ZyYW1lX2ZsYXR0ZW5pbmc7CiB9CiAKLUVpbmFfQm9vbCBld2tf
dmlld19zZXR0aW5nX2VuYWJsZV9mcmFtZV9mbGF0dGVuaW5nX3NldChFdmFzX09iamVjdCogbywg
RWluYV9Cb29sIGVuYWJsZSkKK0VpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2VuYWJsZV9mcmFt
ZV9mbGF0dGVuaW5nX3NldChFdmFzX09iamVjdCogZXdrVmlldywgRWluYV9Cb29sIGVuYWJsZSkK
IHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAg
ICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwogICAg
IGVuYWJsZSA9ICEhZW5hYmxlOwogICAgIGlmIChwcml2LT5zZXR0aW5ncy5lbmFibGVfZnJhbWVf
ZmxhdHRlbmluZyAhPSBlbmFibGUpIHsKQEAgLTE5MzUsMTYgKzE5MzUsMTYgQEAgRWluYV9Cb29s
IGV3a192aWV3X3NldHRpbmdfZW5hYmxlX2ZyYW1lX2ZsYXR0ZW5pbmdfc2V0KEV2YXNfT2JqZWN0
KiBvLCBFaW5hX0Jvb2wKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi1FaW5hX0Jvb2wgZXdr
X3ZpZXdfc2V0dGluZ19zY3JpcHRzX3dpbmRvd19vcGVuX2dldChjb25zdCBFdmFzX09iamVjdCog
bykKK0VpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX3NjcmlwdHNfd2luZG93X29wZW5fZ2V0KGNv
bnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRV
Uk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdr
Vmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihz
ZCwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLnNjcmlwdHNf
d2luZG93X29wZW47CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX3NjcmlwdHNfd2lu
ZG93X29wZW5fc2V0KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wgYWxsb3cpCitFaW5hX0Jvb2wg
ZXdrX3ZpZXdfc2V0dGluZ19zY3JpcHRzX3dpbmRvd19vcGVuX3NldChFdmFzX09iamVjdCogZXdr
VmlldywgRWluYV9Cb29sIGFsbG93KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
bywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmll
dywgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwg
cHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgYWxsb3cgPSAhIWFsbG93OwogICAgIGlmIChwcml2LT5z
ZXR0aW5ncy5zY3JpcHRzX3dpbmRvd19vcGVuICE9IGFsbG93KSB7CkBAIC0xOTU0LDE2ICsxOTU0
LDE2IEBAIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX3NjcmlwdHNfd2luZG93X29wZW5fc2V0
KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wgYWxsCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0K
IAotRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfc2NyaXB0c19jYW5fY2xvc2Vfd2luZG93c19n
ZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCitFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19zY3Jp
cHRzX2Nhbl9jbG9zZV93aW5kb3dzX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsK
LSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBF
V0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBF
V0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIHJl
dHVybiBwcml2LT5zZXR0aW5ncy5zY3JpcHRzX2Nhbl9jbG9zZV93aW5kb3dzOwogfQogCi1FaW5h
X0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19zY3JpcHRzX2Nhbl9jbG9zZV93aW5kb3dzX3NldChFdmFz
X09iamVjdCogbywgRWluYV9Cb29sIGFsbG93KQorRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdf
c2NyaXB0c19jYW5fY2xvc2Vfd2luZG93c19zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFf
Qm9vbCBhbGxvdykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5B
X0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5B
X0ZBTFNFKTsKICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFf
RkFMU0UpOwogICAgIGFsbG93ID0gISFhbGxvdzsKICAgICBpZiAocHJpdi0+c2V0dGluZ3Muc2Ny
aXB0c19jYW5fY2xvc2Vfd2luZG93cyAhPSBhbGxvdykgewpAQCAtMTk3MywxNiArMTk3MywxNiBA
QCBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19zY3JpcHRzX2Nhbl9jbG9zZV93aW5kb3dzX3Nl
dChFdmFzX09iamVjdCogbywgRWluYV9CbwogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLUVp
bmFfQm9vbCBld2tfdmlld19zZXR0aW5nX3Jlc2l6YWJsZV90ZXh0YXJlYXNfZ2V0KGNvbnN0IEV2
YXNfT2JqZWN0KiBvKQorRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfcmVzaXphYmxlX3RleHRh
cmVhc19nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRf
T1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICByZXR1cm4gcHJpdi0+c2V0dGlu
Z3MucmVzaXphYmxlX3RleHRhcmVhczsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdf
cmVzaXphYmxlX3RleHRhcmVhc19zZXQoRXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCBlbmFibGUp
CitFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19yZXNpemFibGVfdGV4dGFyZWFzX3NldChFdmFz
X09iamVjdCogZXdrVmlldywgRWluYV9Cb29sIGVuYWJsZSkKIHsKLSAgICBFV0tfVklFV19TRF9H
RVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1Jf
UkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFV0tfVklFV19QUklWX0dFVF9P
Ul9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIGVuYWJsZSA9ICEhZW5hYmxlOwog
ICAgIGlmIChwcml2LT5zZXR0aW5ncy5yZXNpemFibGVfdGV4dGFyZWFzICE9IGVuYWJsZSkgewpA
QCAtMTk5MiwxNiArMTk5MiwxNiBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19yZXNpemFi
bGVfdGV4dGFyZWFzX3NldChFdmFzX09iamVjdCogbywgRWluYV9Cb29sIGVuYQogICAgIHJldHVy
biBFSU5BX1RSVUU7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX3ByaXZhdGVfYnJv
d3NpbmdfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQorRWluYV9Cb29sIGV3a192aWV3X3NldHRp
bmdfcHJpdmF0ZV9icm93c2luZ19nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0g
ICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdL
X1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdL
X1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICByZXR1
cm4gcHJpdi0+c2V0dGluZ3MucHJpdmF0ZV9icm93c2luZzsKIH0KIAotRWluYV9Cb29sIGV3a192
aWV3X3NldHRpbmdfcHJpdmF0ZV9icm93c2luZ19zZXQoRXZhc19PYmplY3QqIG8sIEVpbmFfQm9v
bCBlbmFibGUpCitFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19wcml2YXRlX2Jyb3dzaW5nX3Nl
dChFdmFzX09iamVjdCogZXdrVmlldywgRWluYV9Cb29sIGVuYWJsZSkKIHsKLSAgICBFV0tfVklF
V19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9H
RVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFV0tfVklFV19QUklW
X0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIGVuYWJsZSA9ICEhZW5h
YmxlOwogICAgIGlmIChwcml2LT5zZXR0aW5ncy5wcml2YXRlX2Jyb3dzaW5nICE9IGVuYWJsZSkg
ewpAQCAtMjAxMSwxNiArMjAxMSwxNiBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19wcml2
YXRlX2Jyb3dzaW5nX3NldChFdmFzX09iamVjdCogbywgRWluYV9Cb29sIGVuYWJsZQogICAgIHJl
dHVybiBFSU5BX1RSVUU7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX29mZmxpbmVf
YXBwX2NhY2hlX2dldChjb25zdCBFdmFzX09iamVjdCogbykKK0VpbmFfQm9vbCBld2tfdmlld19z
ZXR0aW5nX29mZmxpbmVfYXBwX2NhY2hlX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykK
IHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAg
ICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwogICAg
IHJldHVybiBwcml2LT5zZXR0aW5ncy5vZmZsaW5lX2FwcF9jYWNoZTsKIH0KIAotRWluYV9Cb29s
IGV3a192aWV3X3NldHRpbmdfb2ZmbGluZV9hcHBfY2FjaGVfc2V0KEV2YXNfT2JqZWN0KiBvLCBF
aW5hX0Jvb2wgZW5hYmxlKQorRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfb2ZmbGluZV9hcHBf
Y2FjaGVfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wgZW5hYmxlKQogewotICAg
IEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19W
SUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVXS19W
SUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgZW5hYmxl
ID0gISFlbmFibGU7CiAgICAgaWYgKHByaXYtPnNldHRpbmdzLm9mZmxpbmVfYXBwX2NhY2hlICE9
IGVuYWJsZSkgewpAQCAtMjAzMSwxNiArMjAzMSwxNiBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0
dGluZ19vZmZsaW5lX2FwcF9jYWNoZV9zZXQoRXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCBlbmFi
bAogfQogCiAKLUVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2NhcmV0X2Jyb3dzaW5nX2dldChj
b25zdCBFdmFzX09iamVjdCogbykKK0VpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2NhcmV0X2Jy
b3dzaW5nX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19T
RF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRf
T1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFV0tfVklFV19QUklWX0dF
VF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIHJldHVybiBwcml2LT5zZXR0
aW5ncy5jYXJldF9icm93c2luZzsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfY2Fy
ZXRfYnJvd3Npbmdfc2V0KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wgZW5hYmxlKQorRWluYV9C
b29sIGV3a192aWV3X3NldHRpbmdfY2FyZXRfYnJvd3Npbmdfc2V0KEV2YXNfT2JqZWN0KiBld2tW
aWV3LCBFaW5hX0Jvb2wgZW5hYmxlKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
bywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmll
dywgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwg
cHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgZW5hYmxlID0gISFlbmFibGU7CiAgICAgaWYgKHByaXYt
PnNldHRpbmdzLmNhcmV0X2Jyb3dzaW5nICE9IGVuYWJsZSkgewpAQCAtMjA1MCwxMSArMjA1MCwx
MSBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19jYXJldF9icm93c2luZ19zZXQoRXZhc19P
YmplY3QqIG8sIEVpbmFfQm9vbCBlbmFibGUpCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAot
Y29uc3QgY2hhciogZXdrX3ZpZXdfc2V0dGluZ19lbmNvZGluZ19jdXN0b21fZ2V0KGNvbnN0IEV2
YXNfT2JqZWN0KiBvKQorY29uc3QgY2hhciogZXdrX3ZpZXdfc2V0dGluZ19lbmNvZGluZ19jdXN0
b21fZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dF
VF9PUl9SRVRVUk4obywgc2QsIDApOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdr
Vmlldywgc2QsIDApOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwg
MCk7Ci0gICAgRXZhc19PYmplY3QqIG1haW5fZnJhbWUgPSBld2tfdmlld19mcmFtZV9tYWluX2dl
dChvKTsKKyAgICBFdmFzX09iamVjdCogbWFpbl9mcmFtZSA9IGV3a192aWV3X2ZyYW1lX21haW5f
Z2V0KGV3a1ZpZXcpOwogICAgIFdlYkNvcmU6OkZyYW1lKiBjb3JlX2ZyYW1lID0gZXdrX2ZyYW1l
X2NvcmVfZ2V0KG1haW5fZnJhbWUpOwogCiAgICAgU3RyaW5nIG92ZXJyaWRlRW5jb2RpbmcgPSBj
b3JlX2ZyYW1lLT5sb2FkZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+b3ZlcnJpZGVFbmNvZGluZygp
OwpAQCAtMjA2NiwxMSArMjA2NiwxMSBAQCBjb25zdCBjaGFyKiBld2tfdmlld19zZXR0aW5nX2Vu
Y29kaW5nX2N1c3RvbV9nZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCiAgICAgcmV0dXJuIHByaXYt
PnNldHRpbmdzLmVuY29kaW5nX2N1c3RvbTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3NldHRp
bmdfZW5jb2RpbmdfY3VzdG9tX3NldChFdmFzX09iamVjdCogbywgY29uc3QgY2hhciogZW5jb2Rp
bmcpCitFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19lbmNvZGluZ19jdXN0b21fc2V0KEV2YXNf
T2JqZWN0KiBld2tWaWV3LCBjb25zdCBjaGFyKiBlbmNvZGluZykKIHsKLSAgICBFV0tfVklFV19T
RF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRf
T1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFV0tfVklFV19QUklWX0dF
VF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwotICAgIEV2YXNfT2JqZWN0KiBtYWlu
X2ZyYW1lID0gZXdrX3ZpZXdfZnJhbWVfbWFpbl9nZXQobyk7CisgICAgRXZhc19PYmplY3QqIG1h
aW5fZnJhbWUgPSBld2tfdmlld19mcmFtZV9tYWluX2dldChld2tWaWV3KTsKICAgICBXZWJDb3Jl
OjpGcmFtZSogY29yZV9mcmFtZSA9IGV3a19mcmFtZV9jb3JlX2dldChtYWluX2ZyYW1lKTsKICAg
ICBEQkcoIiVzIiwgZW5jb2RpbmcpOwogICAgIGVpbmFfc3RyaW5nc2hhcmVfcmVwbGFjZSgmcHJp
di0+c2V0dGluZ3MuZW5jb2RpbmdfY3VzdG9tLCBlbmNvZGluZyk7CkBAIC0yMDc5LDI1ICsyMDc5
LDI1IEBAIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2VuY29kaW5nX2N1c3RvbV9zZXQoRXZh
c19PYmplY3QqIG8sIGNvbnN0IGNoYXIqIGVuY29kCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0K
IAotY29uc3QgY2hhciogZXdrX3ZpZXdfc2V0dGluZ19lbmNvZGluZ19kZWZhdWx0X2dldChjb25z
dCBFdmFzX09iamVjdCogbykKK2NvbnN0IGNoYXIqIGV3a192aWV3X3NldHRpbmdfZW5jb2Rpbmdf
ZGVmYXVsdF9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihvLCBzZCwgMCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
Tihld2tWaWV3LCBzZCwgMCk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBw
cml2LCAwKTsKICAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZW5jb2RpbmdfZGVmYXVsdDsKIH0K
IAotRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfZW5jb2RpbmdfZGVmYXVsdF9zZXQoRXZhc19P
YmplY3QqIG8sIGNvbnN0IGNoYXIqIGVuY29kaW5nKQorRWluYV9Cb29sIGV3a192aWV3X3NldHRp
bmdfZW5jb2RpbmdfZGVmYXVsdF9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGNvbnN0IGNoYXIq
IGVuY29kaW5nKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFf
RkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFf
RkFMU0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9G
QUxTRSk7CiAgICAgaWYgKGVpbmFfc3RyaW5nc2hhcmVfcmVwbGFjZSgmcHJpdi0+c2V0dGluZ3Mu
ZW5jb2RpbmdfZGVmYXVsdCwgZW5jb2RpbmcpKQogICAgICAgICBwcml2LT5wYWdlX3NldHRpbmdz
LT5zZXREZWZhdWx0VGV4dEVuY29kaW5nTmFtZShTdHJpbmc6OmZyb21VVEY4KGVuY29kaW5nKSk7
CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdf
ZW5jb2RpbmdfZGV0ZWN0b3Jfc2V0KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wgZW5hYmxlKQor
RWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfZW5jb2RpbmdfZGV0ZWN0b3Jfc2V0KEV2YXNfT2Jq
ZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wgZW5hYmxlKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9P
Ul9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRV
Uk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JF
VFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgZW5hYmxlID0gISFlbmFibGU7CiAgICAg
aWYgKHByaXYtPnNldHRpbmdzLmVuY29kaW5nX2RldGVjdG9yICE9IGVuYWJsZSkgewpAQCAtMjEw
NywyMyArMjEwNywyMyBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19lbmNvZGluZ19kZXRl
Y3Rvcl9zZXQoRXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCBlbmFibAogICAgIHJldHVybiBFSU5B
X1RSVUU7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2VuY29kaW5nX2RldGVjdG9y
X2dldChjb25zdCBFdmFzX09iamVjdCogbykKK0VpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2Vu
Y29kaW5nX2RldGVjdG9yX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBF
V0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklF
V19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFV0tfVklF
V19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIHJldHVybiBw
cml2LT5zZXR0aW5ncy5lbmNvZGluZ19kZXRlY3RvcjsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3
X3NldHRpbmdfZW5hYmxlX2RldmVsb3Blcl9leHRyYXNfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBv
KQorRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfZW5hYmxlX2RldmVsb3Blcl9leHRyYXNfZ2V0
KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9S
RVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVS
TihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmVuYWJs
ZV9kZXZlbG9wZXJfZXh0cmFzOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19lbmFi
bGVfZGV2ZWxvcGVyX2V4dHJhc19zZXQoRXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCBlbmFibGUp
CitFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19lbmFibGVfZGV2ZWxvcGVyX2V4dHJhc19zZXQo
RXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCBlbmFibGUpCiB7Ci0gICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9H
RVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBlbmFibGUgPSAhIWVuYWJs
ZTsKICAgICBpZiAocHJpdi0+c2V0dGluZ3MuZW5hYmxlX2RldmVsb3Blcl9leHRyYXMgIT0gZW5h
YmxlKSB7CkBAIC0yMTMzLDE2ICsyMTMzLDE2IEBAIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5n
X2VuYWJsZV9kZXZlbG9wZXJfZXh0cmFzX3NldChFdmFzX09iamVjdCogbywgRWluYV9Cb29sCiAg
ICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotaW50IGV3a192aWV3X3NldHRpbmdfZm9udF9taW5p
bXVtX3NpemVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQoraW50IGV3a192aWV3X3NldHRpbmdf
Zm9udF9taW5pbXVtX3NpemVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAg
IEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIDApOworICAgIEVXS19WSUVXX1NEX0dF
VF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIDApOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JF
VFVSTihzZCwgcHJpdiwgMCk7CiAgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmZvbnRfbWluaW11
bV9zaXplOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19mb250X21pbmltdW1fc2l6
ZV9zZXQoRXZhc19PYmplY3QqIG8sIGludCBzaXplKQorRWluYV9Cb29sIGV3a192aWV3X3NldHRp
bmdfZm9udF9taW5pbXVtX3NpemVfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBpbnQgc2l6ZSkK
IHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAg
ICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwogICAg
IGlmIChwcml2LT5zZXR0aW5ncy5mb250X21pbmltdW1fc2l6ZSAhPSBzaXplKSB7CiAgICAgICAg
IHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNldE1pbmltdW1Gb250U2l6ZShzaXplKTsKQEAgLTIxNTEs
MTYgKzIxNTEsMTYgQEAgRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfZm9udF9taW5pbXVtX3Np
emVfc2V0KEV2YXNfT2JqZWN0KiBvLCBpbnQgc2l6ZSkKICAgICByZXR1cm4gRUlOQV9UUlVFOwog
fQogCi1pbnQgZXdrX3ZpZXdfc2V0dGluZ19mb250X21pbmltdW1fbG9naWNhbF9zaXplX2dldChj
b25zdCBFdmFzX09iamVjdCogbykKK2ludCBld2tfdmlld19zZXR0aW5nX2ZvbnRfbWluaW11bV9s
b2dpY2FsX3NpemVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19W
SUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIDApOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9S
RVRVUk4oZXdrVmlldywgc2QsIDApOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihz
ZCwgcHJpdiwgMCk7CiAgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmZvbnRfbWluaW11bV9sb2dp
Y2FsX3NpemU7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2ZvbnRfbWluaW11bV9s
b2dpY2FsX3NpemVfc2V0KEV2YXNfT2JqZWN0KiBvLCBpbnQgc2l6ZSkKK0VpbmFfQm9vbCBld2tf
dmlld19zZXR0aW5nX2ZvbnRfbWluaW11bV9sb2dpY2FsX3NpemVfc2V0KEV2YXNfT2JqZWN0KiBl
d2tWaWV3LCBpbnQgc2l6ZSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNk
LCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNk
LCBFSU5BX0ZBTFNFKTsKICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYs
IEVJTkFfRkFMU0UpOwogICAgIGlmIChwcml2LT5zZXR0aW5ncy5mb250X21pbmltdW1fbG9naWNh
bF9zaXplICE9IHNpemUpIHsKICAgICAgICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0TWluaW11
bUxvZ2ljYWxGb250U2l6ZShzaXplKTsKQEAgLTIxNjksMTYgKzIxNjksMTYgQEAgRWluYV9Cb29s
IGV3a192aWV3X3NldHRpbmdfZm9udF9taW5pbXVtX2xvZ2ljYWxfc2l6ZV9zZXQoRXZhc19PYmpl
Y3QqIG8sIGludCBzaXoKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi1pbnQgZXdrX3ZpZXdf
c2V0dGluZ19mb250X2RlZmF1bHRfc2l6ZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCitpbnQg
ZXdrX3ZpZXdfc2V0dGluZ19mb250X2RlZmF1bHRfc2l6ZV9nZXQoY29uc3QgRXZhc19PYmplY3Qq
IGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgMCk7Cisg
ICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgMCk7CiAgICAgRVdLX1ZJ
RVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCAwKTsKICAgICByZXR1cm4gcHJpdi0+c2V0
dGluZ3MuZm9udF9kZWZhdWx0X3NpemU7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5n
X2ZvbnRfZGVmYXVsdF9zaXplX3NldChFdmFzX09iamVjdCogbywgaW50IHNpemUpCitFaW5hX0Jv
b2wgZXdrX3ZpZXdfc2V0dGluZ19mb250X2RlZmF1bHRfc2l6ZV9zZXQoRXZhc19PYmplY3QqIGV3
a1ZpZXcsIGludCBzaXplKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2Qs
IEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2Qs
IEVJTkFfRkFMU0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwg
RUlOQV9GQUxTRSk7CiAgICAgaWYgKHByaXYtPnNldHRpbmdzLmZvbnRfZGVmYXVsdF9zaXplICE9
IHNpemUpIHsKICAgICAgICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0RGVmYXVsdEZvbnRTaXpl
KHNpemUpOwpAQCAtMjE4NywxNiArMjE4NywxNiBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGlu
Z19mb250X2RlZmF1bHRfc2l6ZV9zZXQoRXZhc19PYmplY3QqIG8sIGludCBzaXplKQogICAgIHJl
dHVybiBFSU5BX1RSVUU7CiB9CiAKLWludCBld2tfdmlld19zZXR0aW5nX2ZvbnRfbW9ub3NwYWNl
X3NpemVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQoraW50IGV3a192aWV3X3NldHRpbmdfZm9u
dF9tb25vc3BhY2Vfc2l6ZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAg
RVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgMCk7CisgICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihld2tWaWV3LCBzZCwgMCk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVU
VVJOKHNkLCBwcml2LCAwKTsKICAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZm9udF9tb25vc3Bh
Y2Vfc2l6ZTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfZm9udF9tb25vc3BhY2Vf
c2l6ZV9zZXQoRXZhc19PYmplY3QqIG8sIGludCBzaXplKQorRWluYV9Cb29sIGV3a192aWV3X3Nl
dHRpbmdfZm9udF9tb25vc3BhY2Vfc2l6ZV9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGludCBz
aXplKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0Up
OworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0Up
OwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7
CiAgICAgaWYgKHByaXYtPnNldHRpbmdzLmZvbnRfbW9ub3NwYWNlX3NpemUgIT0gc2l6ZSkgewog
ICAgICAgICBwcml2LT5wYWdlX3NldHRpbmdzLT5zZXREZWZhdWx0Rml4ZWRGb250U2l6ZShzaXpl
KTsKQEAgLTIyMDUsOSArMjIwNSw5IEBAIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2ZvbnRf
bW9ub3NwYWNlX3NpemVfc2V0KEV2YXNfT2JqZWN0KiBvLCBpbnQgc2l6ZSkKICAgICByZXR1cm4g
RUlOQV9UUlVFOwogfQogCi1jb25zdCBjaGFyKiBld2tfdmlld19mb250X2ZhbWlseV9uYW1lX2dl
dChjb25zdCBFdmFzX09iamVjdCogbywgRXdrX0ZvbnRfRmFtaWx5IGZvbnRfZmFtaWx5KQorY29u
c3QgY2hhciogZXdrX3ZpZXdfZm9udF9mYW1pbHlfbmFtZV9nZXQoY29uc3QgRXZhc19PYmplY3Qq
IGV3a1ZpZXcsIEV3a19Gb250X0ZhbWlseSBmb250X2ZhbWlseSkKIHsKLSAgICBFV0tfVklFV19T
RF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAwKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJO
KGV3a1ZpZXcsIHNkLCAwKTsKICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHBy
aXYsIDApOwogCiAgICAgc3dpdGNoIChmb250X2ZhbWlseSkgewpAQCAtMjIyNyw5ICsyMjI3LDkg
QEAgY29uc3QgY2hhciogZXdrX3ZpZXdfZm9udF9mYW1pbHlfbmFtZV9nZXQoY29uc3QgRXZhc19P
YmplY3QqIG8sIEV3a19Gb250X0ZhbWlseQogICAgIHJldHVybiAwOwogfQogCi1FaW5hX0Jvb2wg
ZXdrX3ZpZXdfZm9udF9mYW1pbHlfbmFtZV9zZXQoRXZhc19PYmplY3QqIG8sIEV3a19Gb250X0Zh
bWlseSBmb250X2ZhbWlseSwgY29uc3QgY2hhciogbmFtZSkKK0VpbmFfQm9vbCBld2tfdmlld19m
b250X2ZhbWlseV9uYW1lX3NldChFdmFzX09iamVjdCogZXdrVmlldywgRXdrX0ZvbnRfRmFtaWx5
IGZvbnRfZmFtaWx5LCBjb25zdCBjaGFyKiBuYW1lKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9P
Ul9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRV
Uk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JF
VFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CiAKICAgICBzd2l0Y2ggKGZvbnRfZmFtaWx5KSB7
CkBAIC0yMjY0LDE2ICsyMjY0LDE2IEBAIEVpbmFfQm9vbCBld2tfdmlld19mb250X2ZhbWlseV9u
YW1lX3NldChFdmFzX09iamVjdCogbywgRXdrX0ZvbnRfRmFtaWx5IGZvbnRfZmFtCiAgICAgcmV0
dXJuIEVJTkFfVFJVRTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfc3BhdGlhbF9u
YXZpZ2F0aW9uX2dldChjb25zdCBFdmFzX09iamVjdCogbykKK0VpbmFfQm9vbCBld2tfdmlld19z
ZXR0aW5nX3NwYXRpYWxfbmF2aWdhdGlvbl9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcp
CiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7Cisg
ICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAg
ICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAg
ICByZXR1cm4gcHJpdi0+c2V0dGluZ3Muc3BhdGlhbF9uYXZpZ2F0aW9uOwogfQogCi1FaW5hX0Jv
b2wgZXdrX3ZpZXdfc2V0dGluZ19zcGF0aWFsX25hdmlnYXRpb25fc2V0KEV2YXNfT2JqZWN0KiBv
LCBFaW5hX0Jvb2wgZW5hYmxlKQorRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfc3BhdGlhbF9u
YXZpZ2F0aW9uX3NldChFdmFzX09iamVjdCogZXdrVmlldywgRWluYV9Cb29sIGVuYWJsZSkKIHsK
LSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBF
V0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBF
V0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIGVu
YWJsZSA9ICEhZW5hYmxlOwogICAgIGlmIChwcml2LT5zZXR0aW5ncy5zcGF0aWFsX25hdmlnYXRp
b24gIT0gZW5hYmxlKSB7CkBAIC0yMjgzLDE2ICsyMjgzLDE2IEBAIEVpbmFfQm9vbCBld2tfdmll
d19zZXR0aW5nX3NwYXRpYWxfbmF2aWdhdGlvbl9zZXQoRXZhc19PYmplY3QqIG8sIEVpbmFfQm9v
bCBlbmFiCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3Nl
dHRpbmdfbG9jYWxfc3RvcmFnZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCitFaW5hX0Jvb2wg
ZXdrX3ZpZXdfc2V0dGluZ19sb2NhbF9zdG9yYWdlX2dldChjb25zdCBFdmFzX09iamVjdCogZXdr
VmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNF
KTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNF
KTsKICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0Up
OwogICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5sb2NhbF9zdG9yYWdlOwogfQogCi1FaW5hX0Jv
b2wgZXdrX3ZpZXdfc2V0dGluZ19sb2NhbF9zdG9yYWdlX3NldChFdmFzX09iamVjdCogbywgRWlu
YV9Cb29sIGVuYWJsZSkKK0VpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2xvY2FsX3N0b3JhZ2Vf
c2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wgZW5hYmxlKQogewotICAgIEVXS19W
SUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NE
X0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVXS19WSUVXX1BS
SVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgZW5hYmxlID0gISFl
bmFibGU7CiAgICAgaWYgKHByaXYtPnNldHRpbmdzLmxvY2FsX3N0b3JhZ2UgIT0gZW5hYmxlKSB7
CkBAIC0yMzAyLDE2ICsyMzAyLDE2IEBAIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2xvY2Fs
X3N0b3JhZ2Vfc2V0KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wgZW5hYmxlKQogICAgIHJldHVy
biBFSU5BX1RSVUU7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX3BhZ2VfY2FjaGVf
Z2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQorRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfcGFn
ZV9jYWNoZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9H
RVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICByZXR1cm4gcHJpdi0+c2V0
dGluZ3MucGFnZV9jYWNoZTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfcGFnZV9j
YWNoZV9zZXQoRXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCBlbmFibGUpCitFaW5hX0Jvb2wgZXdr
X3ZpZXdfc2V0dGluZ19wYWdlX2NhY2hlX3NldChFdmFzX09iamVjdCogZXdrVmlldywgRWluYV9C
b29sIGVuYWJsZSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5B
X0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5B
X0ZBTFNFKTsKICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFf
RkFMU0UpOwogICAgIGVuYWJsZSA9ICEhZW5hYmxlOwogICAgIGlmIChwcml2LT5zZXR0aW5ncy5w
YWdlX2NhY2hlICE9IGVuYWJsZSkgewpAQCAtMjMyMSwyNSArMjMyMSwyNSBAQCBFaW5hX0Jvb2wg
ZXdrX3ZpZXdfc2V0dGluZ19wYWdlX2NhY2hlX3NldChFdmFzX09iamVjdCogbywgRWluYV9Cb29s
IGVuYWJsZSkKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi1jb25zdCBjaGFyKiBld2tfdmll
d19zZXR0aW5nX2xvY2FsX3N0b3JhZ2VfZGF0YWJhc2VfcGF0aF9nZXQoY29uc3QgRXZhc19PYmpl
Y3QqIG8pCitjb25zdCBjaGFyKiBld2tfdmlld19zZXR0aW5nX2xvY2FsX3N0b3JhZ2VfZGF0YWJh
c2VfcGF0aF9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihvLCBzZCwgMCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
Tihld2tWaWV3LCBzZCwgMCk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBw
cml2LCAwKTsKICAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MubG9jYWxfc3RvcmFnZV9kYXRhYmFz
ZV9wYXRoOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19sb2NhbF9zdG9yYWdlX2Rh
dGFiYXNlX3BhdGhfc2V0KEV2YXNfT2JqZWN0KiBvLCBjb25zdCBjaGFyKiBwYXRoKQorRWluYV9C
b29sIGV3a192aWV3X3NldHRpbmdfbG9jYWxfc3RvcmFnZV9kYXRhYmFzZV9wYXRoX3NldChFdmFz
X09iamVjdCogZXdrVmlldywgY29uc3QgY2hhciogcGF0aCkKIHsKLSAgICBFV0tfVklFV19TRF9H
RVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1Jf
UkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFV0tfVklFV19QUklWX0dFVF9P
Ul9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIGlmIChlaW5hX3N0cmluZ3NoYXJl
X3JlcGxhY2UoJnByaXYtPnNldHRpbmdzLmxvY2FsX3N0b3JhZ2VfZGF0YWJhc2VfcGF0aCwgcGF0
aCkpCiAgICAgICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNldExvY2FsU3RvcmFnZURhdGFiYXNl
UGF0aChTdHJpbmc6OmZyb21VVEY4KHBhdGgpKTsKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQog
Ci1FaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19taW5pbXVtX3RpbWVyX2ludGVydmFsX3NldChF
dmFzX09iamVjdCogbywgZG91YmxlIGludGVydmFsKQorRWluYV9Cb29sIGV3a192aWV3X3NldHRp
bmdfbWluaW11bV90aW1lcl9pbnRlcnZhbF9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGRvdWJs
ZSBpbnRlcnZhbCkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5B
X0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5B
X0ZBTFNFKTsKICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFf
RkFMU0UpOwogICAgIGlmIChmYWJzKHByaXYtPnNldHRpbmdzLmRvbV90aW1lcl9pbnRlcnZhbCAt
IGludGVydmFsKSA+PSBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmVwc2lsb24oKSkgewog
ICAgICAgICBwcml2LT5wYWdlX3NldHRpbmdzLT5zZXRNaW5ET01UaW1lckludGVydmFsKGludGVy
dmFsKTsKQEAgLTIzNDgsMTYgKzIzNDgsMTYgQEAgRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdf
bWluaW11bV90aW1lcl9pbnRlcnZhbF9zZXQoRXZhc19PYmplY3QqIG8sIGRvdWJsZSBpbnQKICAg
ICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi1kb3VibGUgZXdrX3ZpZXdfc2V0dGluZ19taW5pbXVt
X3RpbWVyX2ludGVydmFsX2dldChjb25zdCBFdmFzX09iamVjdCogbykKK2RvdWJsZSBld2tfdmll
d19zZXR0aW5nX21pbmltdW1fdGltZXJfaW50ZXJ2YWxfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBl
d2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFM
U0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFM
U0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxT
RSk7CiAgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmRvbV90aW1lcl9pbnRlcnZhbDsKIH0KIAot
RXdrX1ZpZXdfU21hcnRfRGF0YSogZXdrX3ZpZXdfc21hcnRfZGF0YV9nZXQoY29uc3QgRXZhc19P
YmplY3QqIG8pCitFd2tfVmlld19TbWFydF9EYXRhKiBld2tfdmlld19zbWFydF9kYXRhX2dldChj
b25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVU
VVJOKG8sIHNkLCAwKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNk
LCAwKTsKICAgICByZXR1cm4gc2Q7CiB9CiAKQEAgLTI2MjIsMTAgKzI2MjIsMTAgQEAgRWluYV9C
b29sIGV3a192aWV3X3BhaW50X2NvbnRlbnRzKEV3a19WaWV3X1ByaXZhdGVfRGF0YSogcHJpdiwg
Y2Fpcm9fdCogY3IsIGNvbnMKICAqCiAgKiBFbWl0cyBzaWduYWw6ICJyZWFkeSIgd2l0aCBubyBw
YXJhbWV0ZXJzLgogICovCi12b2lkIGV3a192aWV3X3JlYWR5KEV2YXNfT2JqZWN0KiBvKQordm9p
ZCBld2tfdmlld19yZWFkeShFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBEQkcoIm89JXAi
LCBvKTsKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKG8sICJyZWFkeSIsIDAp
OworICAgIERCRygibz0lcCIsIGV3a1ZpZXcpOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxi
YWNrX2NhbGwoZXdrVmlldywgInJlYWR5IiwgMCk7CiB9CiAKIC8qKgpAQCAtMjYzNiw5ICsyNjM2
LDkgQEAgdm9pZCBld2tfdmlld19yZWFkeShFdmFzX09iamVjdCogbykKICAqIEVtaXRzIHNpZ25h
bDogImlucHV0bWV0aG9kLGNoYW5nZWQiIHdpdGggYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhl
ciBpdCdzCiAgKiBlbmFibGVkIG9yIG5vdC4KICAqLwotdm9pZCBld2tfdmlld19pbnB1dF9tZXRo
b2Rfc3RhdGVfc2V0KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wgYWN0aXZlKQordm9pZCBld2tf
dmlld19pbnB1dF9tZXRob2Rfc3RhdGVfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jv
b2wgYWN0aXZlKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QpOworICAg
IEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QpOwogICAgIEVXS19WSUVXX1BS
SVZfR0VUKHNkLCBwcml2KTsKICAgICBXZWJDb3JlOjpGcmFtZSogZm9jdXNlZEZyYW1lID0gcHJp
di0+cGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpOwogCkBAIC0y
NjY1LDcgKzI2NjUsNyBAQCB2b2lkIGV3a192aWV3X2lucHV0X21ldGhvZF9zdGF0ZV9zZXQoRXZh
c19PYmplY3QqIG8sIEVpbmFfQm9vbCBhY3RpdmUpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBl
dmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKG8sICJpbnB1dG1ldGhvZCxjaGFuZ2VkIiwg
KHZvaWQqKWFjdGl2ZSk7CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChld2tW
aWV3LCAiaW5wdXRtZXRob2QsY2hhbmdlZCIsICh2b2lkKilhY3RpdmUpOwogfQogCiAvKioKQEAg
LTI2NzQsMTAgKzI2NzQsMTAgQEAgdm9pZCBld2tfdmlld19pbnB1dF9tZXRob2Rfc3RhdGVfc2V0
KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wgYWN0aXZlKQogICoKICAqIEVtaXRzIHNpZ25hbDog
InRpdGxlLGNoYW5nZWQiIHdpdGggcG9pbnRlciB0byBuZXcgdGl0bGUgc3RyaW5nLgogICovCi12
b2lkIGV3a192aWV3X3RpdGxlX3NldChFdmFzX09iamVjdCogbywgY29uc3QgY2hhciogdGl0bGUp
Cit2b2lkIGV3a192aWV3X3RpdGxlX3NldChFdmFzX09iamVjdCogZXdrVmlldywgY29uc3QgY2hh
ciogdGl0bGUpCiB7Ci0gICAgREJHKCJvPSVwLCB0aXRsZT0lcyIsIG8sIHRpdGxlID8gdGl0bGUg
OiAiKG51bGwpIik7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChvLCAidGl0
bGUsY2hhbmdlZCIsICh2b2lkKil0aXRsZSk7CisgICAgREJHKCJvPSVwLCB0aXRsZT0lcyIsIGV3
a1ZpZXcsIHRpdGxlID8gdGl0bGUgOiAiKG51bGwpIik7CisgICAgZXZhc19vYmplY3Rfc21hcnRf
Y2FsbGJhY2tfY2FsbChld2tWaWV3LCAidGl0bGUsY2hhbmdlZCIsICh2b2lkKil0aXRsZSk7CiB9
CiAKIC8qKgpAQCAtMjY4NiwxMiArMjY4NiwxMiBAQCB2b2lkIGV3a192aWV3X3RpdGxlX3NldChF
dmFzX09iamVjdCogbywgY29uc3QgY2hhciogdGl0bGUpCiAgKgogICogRW1pdHMgc2lnbmFsOiAi
dXJpLGNoYW5nZWQiIHdpdGggcG9pbnRlciB0byB0aGUgbmV3IHVyaSBzdHJpbmcuCiAgKi8KLXZv
aWQgZXdrX3ZpZXdfdXJpX2NoYW5nZWQoRXZhc19PYmplY3QqIG8pCit2b2lkIGV3a192aWV3X3Vy
aV9jaGFuZ2VkKEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9P
Ul9SRVRVUk4obywgc2QpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywg
c2QpOwogICAgIGNvbnN0IGNoYXIqIHVyaSA9IGV3a19mcmFtZV91cmlfZ2V0KHNkLT5tYWluX2Zy
YW1lKTsKLSAgICBEQkcoIm89JXAsIHVyaT0lcyIsIG8sIHVyaSA/IHVyaSA6ICIobnVsbCkiKTsK
LSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKG8sICJ1cmksY2hhbmdlZCIsICh2
b2lkKil1cmkpOworICAgIERCRygibz0lcCwgdXJpPSVzIiwgZXdrVmlldywgdXJpID8gdXJpIDog
IihudWxsKSIpOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdrVmlldywg
InVyaSxjaGFuZ2VkIiwgKHZvaWQqKXVyaSk7CiB9CiAKIC8qKgpAQCAtMjcwMyw5ICsyNzAzLDkg
QEAgdm9pZCBld2tfdmlld191cmlfY2hhbmdlZChFdmFzX09iamVjdCogbykKICAqCiAgKiBFbWl0
cyBzaWduYWw6ICJsb2FkLGRvY3VtZW50LGZpbmlzaGVkIiB3aXRoIEBwIGZyYW1lIGFzIHRoZSBw
YXJhbWV0ZXIuCiAgKi8KLXZvaWQgZXdrX3ZpZXdfbG9hZF9kb2N1bWVudF9maW5pc2hlZChFdmFz
X09iamVjdCogbywgRXZhc19PYmplY3QqIGZyYW1lKQordm9pZCBld2tfdmlld19sb2FkX2RvY3Vt
ZW50X2ZpbmlzaGVkKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFdmFzX09iamVjdCogZnJhbWUpCiB7
Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChvLCAibG9hZCxkb2N1bWVudCxm
aW5pc2hlZCIsIGZyYW1lKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKGV3
a1ZpZXcsICJsb2FkLGRvY3VtZW50LGZpbmlzaGVkIiwgZnJhbWUpOwogfQogCiAvKioKQEAgLTI3
MTYsMTAgKzI3MTYsMTAgQEAgdm9pZCBld2tfdmlld19sb2FkX2RvY3VtZW50X2ZpbmlzaGVkKEV2
YXNfT2JqZWN0KiBvLCBFdmFzX09iamVjdCogZnJhbWUpCiAgKgogICogRW1pdHMgc2lnbmFsOiAi
bG9hZCxzdGFydGVkIiB3aXRoIG5vIHBhcmFtZXRlcnMuCiAgKi8KLXZvaWQgZXdrX3ZpZXdfbG9h
ZF9zdGFydGVkKEV2YXNfT2JqZWN0KiBvKQordm9pZCBld2tfdmlld19sb2FkX3N0YXJ0ZWQoRXZh
c19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgREJHKCJvPSVwIiwgbyk7Ci0gICAgZXZhc19vYmpl
Y3Rfc21hcnRfY2FsbGJhY2tfY2FsbChvLCAibG9hZCxzdGFydGVkIiwgMCk7CisgICAgREJHKCJv
PSVwIiwgZXdrVmlldyk7CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChld2tW
aWV3LCAibG9hZCxzdGFydGVkIiwgMCk7CiB9CiAKIC8qKgpAQCAtMjcyOSwxMCArMjcyOSwxMCBA
QCB2b2lkIGV3a192aWV3X2xvYWRfc3RhcnRlZChFdmFzX09iamVjdCogbykKICAqCiAgKiBFbWl0
cyBzaWduYWw6ICJsb2FkLHN0YXJ0ZWQiIG9uIG1haW4gZnJhbWUgd2l0aCBubyBwYXJhbWV0ZXJz
LgogICovCi12b2lkIGV3a192aWV3X2ZyYW1lX21haW5fbG9hZF9zdGFydGVkKEV2YXNfT2JqZWN0
KiBvKQordm9pZCBld2tfdmlld19mcmFtZV9tYWluX2xvYWRfc3RhcnRlZChFdmFzX09iamVjdCog
ZXdrVmlldykKIHsKLSAgICBEQkcoIm89JXAiLCBvKTsKLSAgICBFdmFzX09iamVjdCogZnJhbWUg
PSBld2tfdmlld19mcmFtZV9tYWluX2dldChvKTsKKyAgICBEQkcoIm89JXAiLCBld2tWaWV3KTsK
KyAgICBFdmFzX09iamVjdCogZnJhbWUgPSBld2tfdmlld19mcmFtZV9tYWluX2dldChld2tWaWV3
KTsKICAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKGZyYW1lLCAibG9hZCxzdGFy
dGVkIiwgMCk7CiB9CiAKQEAgLTI3NDQsMTAgKzI3NDQsMTAgQEAgdm9pZCBld2tfdmlld19mcmFt
ZV9tYWluX2xvYWRfc3RhcnRlZChFdmFzX09iamVjdCogbykKICAqCiAgKiBFbWl0cyBzaWduYWw6
ICJsb2FkLHByb3Zpc2lvbmFsIiBvbiBWaWV3IHdpdGggbm8gcGFyYW1ldGVycy4KICAqLwotdm9p
ZCBld2tfdmlld19sb2FkX3Byb3Zpc2lvbmFsKEV2YXNfT2JqZWN0KiBvKQordm9pZCBld2tfdmll
d19sb2FkX3Byb3Zpc2lvbmFsKEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIERCRygibz0l
cCIsIG8pOwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwobywgImxvYWQscHJv
dmlzaW9uYWwiLCAwKTsKKyAgICBEQkcoIm89JXAiLCBld2tWaWV3KTsKKyAgICBldmFzX29iamVj
dF9zbWFydF9jYWxsYmFja19jYWxsKGV3a1ZpZXcsICJsb2FkLHByb3Zpc2lvbmFsIiwgMCk7CiB9
CiAKIC8qKgpAQCAtMjc1OCwxMCArMjc1OCwxMCBAQCB2b2lkIGV3a192aWV3X2xvYWRfcHJvdmlz
aW9uYWwoRXZhc19PYmplY3QqIG8pCiAgKgogICogRW1pdHMgc2lnbmFsOiAibG9hZCxuZXd3aW5k
b3csc2hvdyIgb24gdmlldyB3aXRoIG5vIHBhcmFtZXRlcnMuCiAgKi8KLXZvaWQgZXdrX3ZpZXdf
bG9hZF9zaG93KEV2YXNfT2JqZWN0KiBvKQordm9pZCBld2tfdmlld19sb2FkX3Nob3coRXZhc19P
YmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgREJHKCJvPSVwIiwgbyk7Ci0gICAgZXZhc19vYmplY3Rf
c21hcnRfY2FsbGJhY2tfY2FsbChvLCAibG9hZCxuZXd3aW5kb3csc2hvdyIsIDApOworICAgIERC
Rygibz0lcCIsIGV3a1ZpZXcpOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwo
ZXdrVmlldywgImxvYWQsbmV3d2luZG93LHNob3ciLCAwKTsKIH0KIAogCkBAIC0yNzcxLDEwICsy
NzcxLDEwIEBAIHZvaWQgZXdrX3ZpZXdfbG9hZF9zaG93KEV2YXNfT2JqZWN0KiBvKQogICoKICAq
IEBwYXJhbSBvIFZpZXcuCiAgKi8KLXZvaWQgZXdrX3ZpZXdfZnJhbWVfbWFpbl9jbGVhcmVkKEV2
YXNfT2JqZWN0KiBvKQordm9pZCBld2tfdmlld19mcmFtZV9tYWluX2NsZWFyZWQoRXZhc19PYmpl
Y3QqIGV3a1ZpZXcpCiB7Ci0gICAgREJHKCJvPSVwIiwgbyk7Ci0gICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihvLCBzZCk7CisgICAgREJHKCJvPSVwIiwgZXdrVmlldyk7CisgICAgRVdLX1ZJ
RVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk4oc2QtPmFwaS0+Zmx1c2gpOwogICAgIHNkLT5hcGktPmZsdXNoKHNkKTsKIH0KQEAg
LTI3ODcsMTAgKzI3ODcsMTAgQEAgdm9pZCBld2tfdmlld19mcmFtZV9tYWluX2NsZWFyZWQoRXZh
c19PYmplY3QqIG8pCiAgKgogICogRW1pdHMgc2lnbmFsOiAiaWNvbixyZWNlaXZlZCIgd2l0aCBu
byBwYXJhbWV0ZXJzLgogICovCi12b2lkIGV3a192aWV3X2ZyYW1lX21haW5faWNvbl9yZWNlaXZl
ZChFdmFzX09iamVjdCogbykKK3ZvaWQgZXdrX3ZpZXdfZnJhbWVfbWFpbl9pY29uX3JlY2VpdmVk
KEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIERCRygibz0lcCIsIG8pOwotICAgIEV2YXNf
T2JqZWN0KiBmcmFtZSA9IGV3a192aWV3X2ZyYW1lX21haW5fZ2V0KG8pOworICAgIERCRygibz0l
cCIsIGV3a1ZpZXcpOworICAgIEV2YXNfT2JqZWN0KiBmcmFtZSA9IGV3a192aWV3X2ZyYW1lX21h
aW5fZ2V0KGV3a1ZpZXcpOwogICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZnJh
bWUsICJpY29uLHJlY2VpdmVkIiwgMCk7CiB9CiAKQEAgLTI4MDQsMTAgKzI4MDQsMTAgQEAgdm9p
ZCBld2tfdmlld19mcmFtZV9tYWluX2ljb25fcmVjZWl2ZWQoRXZhc19PYmplY3QqIG8pCiAgKiBA
bm90ZSB0aGVyZSBzaG91bGQgbm90IGJlIGFueSBlcnJvciBzdHVmZiBoZXJlLCBidXQgdHJ5aW5n
IHRvIGJlCiAgKiAgICAgICBjb21wYXRpYmxlIHdpdGggcHJldmlvdXMgV2ViS2l0LgogICovCi12
b2lkIGV3a192aWV3X2xvYWRfZmluaXNoZWQoRXZhc19PYmplY3QqIG8sIGNvbnN0IEV3a19GcmFt
ZV9Mb2FkX0Vycm9yKiBlcnJvcikKK3ZvaWQgZXdrX3ZpZXdfbG9hZF9maW5pc2hlZChFdmFzX09i
amVjdCogZXdrVmlldywgY29uc3QgRXdrX0ZyYW1lX0xvYWRfRXJyb3IqIGVycm9yKQogewotICAg
IERCRygibz0lcCwgZXJyb3I9JXAiLCBvLCBlcnJvcik7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRf
Y2FsbGJhY2tfY2FsbChvLCAibG9hZCxmaW5pc2hlZCIsICh2b2lkKillcnJvcik7CisgICAgREJH
KCJvPSVwLCBlcnJvcj0lcCIsIGV3a1ZpZXcsIGVycm9yKTsKKyAgICBldmFzX29iamVjdF9zbWFy
dF9jYWxsYmFja19jYWxsKGV3a1ZpZXcsICJsb2FkLGZpbmlzaGVkIiwgKHZvaWQqKWVycm9yKTsK
IH0KIAogLyoqCkBAIC0yODE2LDEwICsyODE2LDEwIEBAIHZvaWQgZXdrX3ZpZXdfbG9hZF9maW5p
c2hlZChFdmFzX09iamVjdCogbywgY29uc3QgRXdrX0ZyYW1lX0xvYWRfRXJyb3IqIGVycm9yKQog
ICoKICAqIEVtaXRzIHNpZ25hbDogImxvYWQsZXJyb3IiIHdpdGggcG9pbnRlciB0byBFd2tfRnJh
bWVfTG9hZF9FcnJvci4KICAqLwotdm9pZCBld2tfdmlld19sb2FkX2Vycm9yKEV2YXNfT2JqZWN0
KiBvLCBjb25zdCBFd2tfRnJhbWVfTG9hZF9FcnJvciogZXJyb3IpCit2b2lkIGV3a192aWV3X2xv
YWRfZXJyb3IoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGNvbnN0IEV3a19GcmFtZV9Mb2FkX0Vycm9y
KiBlcnJvcikKIHsKLSAgICBEQkcoIm89JXAsIGVycm9yPSVwIiwgbywgZXJyb3IpOwotICAgIGV2
YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwobywgImxvYWQsZXJyb3IiLCAodm9pZCopZXJy
b3IpOworICAgIERCRygibz0lcCwgZXJyb3I9JXAiLCBld2tWaWV3LCBlcnJvcik7CisgICAgZXZh
c19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChld2tWaWV3LCAibG9hZCxlcnJvciIsICh2b2lk
KillcnJvcik7CiB9CiAKIC8qKgpAQCAtMjgyOCwxNyArMjgyOCwxNyBAQCB2b2lkIGV3a192aWV3
X2xvYWRfZXJyb3IoRXZhc19PYmplY3QqIG8sIGNvbnN0IEV3a19GcmFtZV9Mb2FkX0Vycm9yKiBl
cnJvcikKICAqCiAgKiBFbWl0cyBzaWduYWw6ICJsb2FkLHByb2dyZXNzIiB3aXRoIHBvaW50ZXIg
dG8gYSBkb3VibGUgZnJvbSAwLjAgdG8gMS4wLgogICovCi12b2lkIGV3a192aWV3X2xvYWRfcHJv
Z3Jlc3NfY2hhbmdlZChFdmFzX09iamVjdCogbykKK3ZvaWQgZXdrX3ZpZXdfbG9hZF9wcm9ncmVz
c19jaGFuZ2VkKEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9P
Ul9SRVRVUk4obywgc2QpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywg
c2QpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdik7CiAKICAgICAv
LyBFdmFzX0Nvb3JkIHcsIGg7CiAgICAgZG91YmxlIHByb2dyZXNzID0gcHJpdi0+cGFnZS0+cHJv
Z3Jlc3MoKS0+ZXN0aW1hdGVkUHJvZ3Jlc3MoKTsKIAotICAgIERCRygibz0lcCAocD0lMC4zZiki
LCBvLCBwcm9ncmVzcyk7CisgICAgREJHKCJvPSVwIChwPSUwLjNmKSIsIGV3a1ZpZXcsIHByb2dy
ZXNzKTsKIAotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwobywgImxvYWQscHJv
Z3Jlc3MiLCAmcHJvZ3Jlc3MpOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwo
ZXdrVmlldywgImxvYWQscHJvZ3Jlc3MiLCAmcHJvZ3Jlc3MpOwogfQogCiAvKioKQEAgLTI4NTAs
OSArMjg1MCw5IEBAIHZvaWQgZXdrX3ZpZXdfbG9hZF9wcm9ncmVzc19jaGFuZ2VkKEV2YXNfT2Jq
ZWN0KiBvKQogICoKICAqIEVtaXRzIHNpZ25hbDogInJlc3RvcmUiIHdpdGggZnJhbWUuCiAgKi8K
LXZvaWQgZXdrX3ZpZXdfcmVzdG9yZV9zdGF0ZShFdmFzX09iamVjdCogbywgRXZhc19PYmplY3Qq
IGZyYW1lKQordm9pZCBld2tfdmlld19yZXN0b3JlX3N0YXRlKEV2YXNfT2JqZWN0KiBld2tWaWV3
LCBFdmFzX09iamVjdCogZnJhbWUpCiB7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tf
Y2FsbChvLCAicmVzdG9yZSIsIGZyYW1lKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFj
a19jYWxsKGV3a1ZpZXcsICJyZXN0b3JlIiwgZnJhbWUpOwogfQogCiAvKioKQEAgLTI4NzYsMTIg
KzI4NzYsMTIgQEAgdm9pZCBld2tfdmlld19yZXN0b3JlX3N0YXRlKEV2YXNfT2JqZWN0KiBvLCBF
dmFzX09iamVjdCogZnJhbWUpCiAgKgogICogQHNlZSBld2tfd2luZG93X2ZlYXR1cmVzX3JlZigp
LgogICovCi1FdmFzX09iamVjdCogZXdrX3ZpZXdfd2luZG93X2NyZWF0ZShFdmFzX09iamVjdCog
bywgRWluYV9Cb29sIGphdmFzY3JpcHQsIGNvbnN0IFdlYkNvcmU6OldpbmRvd0ZlYXR1cmVzKiBj
b3JlRmVhdHVyZXMpCitFdmFzX09iamVjdCogZXdrX3ZpZXdfd2luZG93X2NyZWF0ZShFdmFzX09i
amVjdCogZXdrVmlldywgRWluYV9Cb29sIGphdmFzY3JpcHQsIGNvbnN0IFdlYkNvcmU6OldpbmRv
d0ZlYXR1cmVzKiBjb3JlRmVhdHVyZXMpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
TihvLCBzZCwgMCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwg
MCk7CiAKICAgICBpZiAoIXNkLT5hcGktPndpbmRvd19jcmVhdGUpCi0gICAgICAgIHJldHVybiBv
OworICAgICAgICByZXR1cm4gZXdrVmlldzsKIAogICAgIEV3a19XaW5kb3dfRmVhdHVyZXMqIHdp
bmRvd19mZWF0dXJlcyA9IGV3a193aW5kb3dfZmVhdHVyZXNfbmV3X2Zyb21fY29yZShjb3JlRmVh
dHVyZXMpOwogICAgIGlmICghd2luZG93X2ZlYXR1cmVzKQpAQCAtMjkwNCwxMSArMjkwNCwxMSBA
QCBFdmFzX09iamVjdCogZXdrX3ZpZXdfd2luZG93X2NyZWF0ZShFdmFzX09iamVjdCogbywgRWlu
YV9Cb29sIGphdmFzY3JpcHQsIGNvbnN0CiAgKgogICogQHBhcmFtIG8gVmlldyB0byBiZSBjbG9z
ZWQuCiAgKi8KLXZvaWQgZXdrX3ZpZXdfd2luZG93X2Nsb3NlKEV2YXNfT2JqZWN0KiBvKQordm9p
ZCBld2tfdmlld193aW5kb3dfY2xvc2UoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdL
X1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JF
VFVSTihld2tWaWV3LCBzZCk7CiAKLSAgICBld2tfdmlld19zdG9wKG8pOworICAgIGV3a192aWV3
X3N0b3AoZXdrVmlldyk7CiAgICAgaWYgKCFzZC0+YXBpLT53aW5kb3dfY2xvc2UpCiAgICAgICAg
IHJldHVybjsKICAgICBzZC0+YXBpLT53aW5kb3dfY2xvc2Uoc2QpOwpAQCAtMjkyMCw5ICsyOTIw
LDkgQEAgdm9pZCBld2tfdmlld193aW5kb3dfY2xvc2UoRXZhc19PYmplY3QqIG8pCiAgKgogICog
RW1pdHMgc2lnbmFsOiAibGluayxob3ZlcixpbiIKICAqLwotdm9pZCBld2tfdmlld19tb3VzZV9s
aW5rX2hvdmVyX2luKEV2YXNfT2JqZWN0KiBvLCB2b2lkKiBkYXRhKQordm9pZCBld2tfdmlld19t
b3VzZV9saW5rX2hvdmVyX2luKEV2YXNfT2JqZWN0KiBld2tWaWV3LCB2b2lkKiBkYXRhKQogewot
ICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwobywgImxpbmssaG92ZXIsaW4iLCBk
YXRhKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKGV3a1ZpZXcsICJsaW5r
LGhvdmVyLGluIiwgZGF0YSk7CiB9CiAKIC8qKgpAQCAtMjkzMSw5ICsyOTMxLDkgQEAgdm9pZCBl
d2tfdmlld19tb3VzZV9saW5rX2hvdmVyX2luKEV2YXNfT2JqZWN0KiBvLCB2b2lkKiBkYXRhKQog
ICoKICAqIEVtaXRzIHNpZ25hbDogImxpbmssaG92ZXIsb3V0IgogICovCi12b2lkIGV3a192aWV3
X21vdXNlX2xpbmtfaG92ZXJfb3V0KEV2YXNfT2JqZWN0KiBvKQordm9pZCBld2tfdmlld19tb3Vz
ZV9saW5rX2hvdmVyX291dChFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBldmFzX29iamVj
dF9zbWFydF9jYWxsYmFja19jYWxsKG8sICJsaW5rLGhvdmVyLG91dCIsIDApOworICAgIGV2YXNf
b2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdrVmlldywgImxpbmssaG92ZXIsb3V0IiwgMCk7
CiB9CiAKIC8qKgpAQCAtMjk0MiwxMCArMjk0MiwxMCBAQCB2b2lkIGV3a192aWV3X21vdXNlX2xp
bmtfaG92ZXJfb3V0KEV2YXNfT2JqZWN0KiBvKQogICoKICAqIEVtaXRzIHNpZ25hbDogInRvb2xi
YXJzLHZpc2libGUsc2V0IiB3aXRoIGEgcG9pbnRlciB0byBhIGJvb2xlYW4uCiAgKi8KLXZvaWQg
ZXdrX3ZpZXdfdG9vbGJhcnNfdmlzaWJsZV9zZXQoRXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCB2
aXNpYmxlKQordm9pZCBld2tfdmlld190b29sYmFyc192aXNpYmxlX3NldChFdmFzX09iamVjdCog
ZXdrVmlldywgRWluYV9Cb29sIHZpc2libGUpCiB7Ci0gICAgREJHKCJvPSVwICh2aXNpYmxlPSVk
KSIsIG8sICEhdmlzaWJsZSk7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChv
LCAidG9vbGJhcnMsdmlzaWJsZSxzZXQiLCAmdmlzaWJsZSk7CisgICAgREJHKCJvPSVwICh2aXNp
YmxlPSVkKSIsIGV3a1ZpZXcsICEhdmlzaWJsZSk7CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2Fs
bGJhY2tfY2FsbChld2tWaWV3LCAidG9vbGJhcnMsdmlzaWJsZSxzZXQiLCAmdmlzaWJsZSk7CiB9
CiAKIC8qKgpAQCAtMjk1OSwxMSArMjk1OSwxMSBAQCB2b2lkIGV3a192aWV3X3Rvb2xiYXJzX3Zp
c2libGVfc2V0KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wgdmlzaWJsZSkKICAqCiAgKiBFbWl0
cyBzaWduYWw6ICJ0b29sYmFycyx2aXNpYmxlLGdldCIgd2l0aCBhIHBvaW50ZXIgdG8gYSBib29s
ZWFuLgogICovCi12b2lkIGV3a192aWV3X3Rvb2xiYXJzX3Zpc2libGVfZ2V0KEV2YXNfT2JqZWN0
KiBvLCBFaW5hX0Jvb2wqIHZpc2libGUpCit2b2lkIGV3a192aWV3X3Rvb2xiYXJzX3Zpc2libGVf
Z2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wqIHZpc2libGUpCiB7Ci0gICAgREJH
KCIlcywgbz0lcCIsIF9fZnVuY19fLCBvKTsKKyAgICBEQkcoIiVzLCBvPSVwIiwgX19mdW5jX18s
IGV3a1ZpZXcpOwogICAgICp2aXNpYmxlID0gRUlOQV9GQUxTRTsKLSAgICBldmFzX29iamVjdF9z
bWFydF9jYWxsYmFja19jYWxsKG8sICJ0b29sYmFycyx2aXNpYmxlLGdldCIsIHZpc2libGUpOwor
ICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdrVmlldywgInRvb2xiYXJzLHZp
c2libGUsZ2V0IiwgdmlzaWJsZSk7CiB9CiAKIC8qKgpAQCAtMjk3NSwxMCArMjk3NSwxMCBAQCB2
b2lkIGV3a192aWV3X3Rvb2xiYXJzX3Zpc2libGVfZ2V0KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jv
b2wqIHZpc2libGUpCiAgKgogICogRW1pdHMgc2lnbmFsOiAic3RhdHVzYmFyLHZpc2libGUsc2V0
IiB3aXRoIGEgcG9pbnRlciB0byBhIGJvb2xlYW4uCiAgKi8KLXZvaWQgZXdrX3ZpZXdfc3RhdHVz
YmFyX3Zpc2libGVfc2V0KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wgdmlzaWJsZSkKK3ZvaWQg
ZXdrX3ZpZXdfc3RhdHVzYmFyX3Zpc2libGVfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5h
X0Jvb2wgdmlzaWJsZSkKIHsKLSAgICBEQkcoIm89JXAgKHZpc2libGU9JWQpIiwgbywgISF2aXNp
YmxlKTsKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKG8sICJzdGF0dXNiYXIs
dmlzaWJsZSxzZXQiLCAmdmlzaWJsZSk7CisgICAgREJHKCJvPSVwICh2aXNpYmxlPSVkKSIsIGV3
a1ZpZXcsICEhdmlzaWJsZSk7CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChl
d2tWaWV3LCAic3RhdHVzYmFyLHZpc2libGUsc2V0IiwgJnZpc2libGUpOwogfQogCiAvKioKQEAg
LTI5OTIsMTEgKzI5OTIsMTEgQEAgdm9pZCBld2tfdmlld19zdGF0dXNiYXJfdmlzaWJsZV9zZXQo
RXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCB2aXNpYmxlKQogICoKICAqIEVtaXRzIHNpZ25hbDog
InN0YXR1c2Jhcix2aXNpYmxlLGdldCIgd2l0aCBhIHBvaW50ZXIgdG8gYSBib29sZWFuLgogICov
Ci12b2lkIGV3a192aWV3X3N0YXR1c2Jhcl92aXNpYmxlX2dldChFdmFzX09iamVjdCogbywgRWlu
YV9Cb29sKiB2aXNpYmxlKQordm9pZCBld2tfdmlld19zdGF0dXNiYXJfdmlzaWJsZV9nZXQoRXZh
c19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCogdmlzaWJsZSkKIHsKLSAgICBEQkcoIiVzLCBv
PSVwIiwgX19mdW5jX18sIG8pOworICAgIERCRygiJXMsIG89JXAiLCBfX2Z1bmNfXywgZXdrVmll
dyk7CiAgICAgKnZpc2libGUgPSBFSU5BX0ZBTFNFOwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2Nh
bGxiYWNrX2NhbGwobywgInN0YXR1c2Jhcix2aXNpYmxlLGdldCIsIHZpc2libGUpOworICAgIGV2
YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdrVmlldywgInN0YXR1c2Jhcix2aXNpYmxl
LGdldCIsIHZpc2libGUpOwogfQogCiAvKioKQEAgLTMwMDgsMTEgKzMwMDgsMTEgQEAgdm9pZCBl
d2tfdmlld19zdGF0dXNiYXJfdmlzaWJsZV9nZXQoRXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCog
dmlzaWJsZSkKICAqCiAgKiBFbWl0cyBzaWduYWw6ICJzdGF0dXNiYXIsdGV4dCxzZXQiIHdpdGgg
YSBzdHJpbmcuCiAgKi8KLXZvaWQgZXdrX3ZpZXdfc3RhdHVzYmFyX3RleHRfc2V0KEV2YXNfT2Jq
ZWN0KiBvLCBjb25zdCBjaGFyKiB0ZXh0KQordm9pZCBld2tfdmlld19zdGF0dXNiYXJfdGV4dF9z
ZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGNvbnN0IGNoYXIqIHRleHQpCiB7Ci0gICAgREJHKCJv
PSVwICh0ZXh0PSVzKSIsIG8sIHRleHQpOworICAgIERCRygibz0lcCAodGV4dD0lcykiLCBld2tW
aWV3LCB0ZXh0KTsKICAgICBJTkYoInN0YXR1cyBiYXIgdGV4dCBzZXQ6ICVzIiwgdGV4dCk7Ci0g
ICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChvLCAic3RhdHVzYmFyLHRleHQsc2V0
IiwgKHZvaWQqKXRleHQpOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdr
VmlldywgInN0YXR1c2Jhcix0ZXh0LHNldCIsICh2b2lkKil0ZXh0KTsKIH0KIAogLyoqCkBAIC0z
MDI0LDEwICszMDI0LDEwIEBAIHZvaWQgZXdrX3ZpZXdfc3RhdHVzYmFyX3RleHRfc2V0KEV2YXNf
T2JqZWN0KiBvLCBjb25zdCBjaGFyKiB0ZXh0KQogICoKICAqIEVtaXRzIHNpZ25hbDogInNjcm9s
bGJhcnMsdmlzaWJsZSxzZXQiIHdpdGggYSBwb2ludGVyIHRvIGEgYm9vbGVhbi4KICAqLwotdm9p
ZCBld2tfdmlld19zY3JvbGxiYXJzX3Zpc2libGVfc2V0KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jv
b2wgdmlzaWJsZSkKK3ZvaWQgZXdrX3ZpZXdfc2Nyb2xsYmFyc192aXNpYmxlX3NldChFdmFzX09i
amVjdCogZXdrVmlldywgRWluYV9Cb29sIHZpc2libGUpCiB7Ci0gICAgREJHKCJvPSVwICh2aXNp
YmxlPSVkKSIsIG8sICEhdmlzaWJsZSk7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tf
Y2FsbChvLCAic2Nyb2xsYmFycyx2aXNpYmxlLHNldCIsICZ2aXNpYmxlKTsKKyAgICBEQkcoIm89
JXAgKHZpc2libGU9JWQpIiwgZXdrVmlldywgISF2aXNpYmxlKTsKKyAgICBldmFzX29iamVjdF9z
bWFydF9jYWxsYmFja19jYWxsKGV3a1ZpZXcsICJzY3JvbGxiYXJzLHZpc2libGUsc2V0IiwgJnZp
c2libGUpOwogfQogCiAvKioKQEAgLTMwNDEsMTEgKzMwNDEsMTEgQEAgdm9pZCBld2tfdmlld19z
Y3JvbGxiYXJzX3Zpc2libGVfc2V0KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wgdmlzaWJsZSkK
ICAqCiAgKiBFbWl0cyBzaWduYWw6ICJzY3JvbGxiYXJzLHZpc2libGUsZ2V0IiB3aXRoIGEgcG9p
bnRlciB0byBhIGJvb2xlYW4uCiAgKi8KLXZvaWQgZXdrX3ZpZXdfc2Nyb2xsYmFyc192aXNpYmxl
X2dldChFdmFzX09iamVjdCogbywgRWluYV9Cb29sKiB2aXNpYmxlKQordm9pZCBld2tfdmlld19z
Y3JvbGxiYXJzX3Zpc2libGVfZ2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wqIHZp
c2libGUpCiB7Ci0gICAgREJHKCIlcywgbz0lcCIsIF9fZnVuY19fLCBvKTsKKyAgICBEQkcoIiVz
LCBvPSVwIiwgX19mdW5jX18sIGV3a1ZpZXcpOwogICAgICp2aXNpYmxlID0gRUlOQV9GQUxTRTsK
LSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKG8sICJzY3JvbGxiYXJzLHZpc2li
bGUsZ2V0IiwgdmlzaWJsZSk7CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChl
d2tWaWV3LCAic2Nyb2xsYmFycyx2aXNpYmxlLGdldCIsIHZpc2libGUpOwogfQogCiAvKioKQEAg
LTMwNTcsMTAgKzMwNTcsMTAgQEAgdm9pZCBld2tfdmlld19zY3JvbGxiYXJzX3Zpc2libGVfZ2V0
KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wqIHZpc2libGUpCiAgKgogICogRW1pdHMgc2lnbmFs
OiAibWVudWJhcix2aXNpYmxlLHNldCIgd2l0aCBhIHBvaW50ZXIgdG8gYSBib29sZWFuLgogICov
Ci12b2lkIGV3a192aWV3X21lbnViYXJfdmlzaWJsZV9zZXQoRXZhc19PYmplY3QqIG8sIEVpbmFf
Qm9vbCB2aXNpYmxlKQordm9pZCBld2tfdmlld19tZW51YmFyX3Zpc2libGVfc2V0KEV2YXNfT2Jq
ZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wgdmlzaWJsZSkKIHsKLSAgICBEQkcoIm89JXAgKHZpc2li
bGU9JWQpIiwgbywgISF2aXNpYmxlKTsKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19j
YWxsKG8sICJtZW51YmFyLHZpc2libGUsc2V0IiwgJnZpc2libGUpOworICAgIERCRygibz0lcCAo
dmlzaWJsZT0lZCkiLCBld2tWaWV3LCAhIXZpc2libGUpOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0
X2NhbGxiYWNrX2NhbGwoZXdrVmlldywgIm1lbnViYXIsdmlzaWJsZSxzZXQiLCAmdmlzaWJsZSk7
CiB9CiAKIC8qKgpAQCAtMzA3NCwxMSArMzA3NCwxMSBAQCB2b2lkIGV3a192aWV3X21lbnViYXJf
dmlzaWJsZV9zZXQoRXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCB2aXNpYmxlKQogICoKICAqIEVt
aXRzIHNpZ25hbDogIm1lbnViYXIsdmlzaWJsZSxnZXQiIHdpdGggYSBwb2ludGVyIHRvIGEgYm9v
bGVhbi4KICAqLwotdm9pZCBld2tfdmlld19tZW51YmFyX3Zpc2libGVfZ2V0KEV2YXNfT2JqZWN0
KiBvLCBFaW5hX0Jvb2wqIHZpc2libGUpCit2b2lkIGV3a192aWV3X21lbnViYXJfdmlzaWJsZV9n
ZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCogdmlzaWJsZSkKIHsKLSAgICBEQkco
IiVzLCBvPSVwIiwgX19mdW5jX18sIG8pOworICAgIERCRygiJXMsIG89JXAiLCBfX2Z1bmNfXywg
ZXdrVmlldyk7CiAgICAgKnZpc2libGUgPSBFSU5BX0ZBTFNFOwotICAgIGV2YXNfb2JqZWN0X3Nt
YXJ0X2NhbGxiYWNrX2NhbGwobywgIm1lbnViYXIsdmlzaWJsZSxnZXQiLCB2aXNpYmxlKTsKKyAg
ICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKGV3a1ZpZXcsICJtZW51YmFyLHZpc2li
bGUsZ2V0IiwgdmlzaWJsZSk7CiB9CiAKIC8qKgpAQCAtMzA5MSwxMCArMzA5MSwxMCBAQCB2b2lk
IGV3a192aWV3X21lbnViYXJfdmlzaWJsZV9nZXQoRXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCog
dmlzaWJsZSkKICAqIEVtaXRzIHNpZ25hbDogInRvb2x0aXAsdGV4dCxzZXQiIHdpdGggYSBzdHJp
bmcuIElmIHRvb2x0aXAgbXVzdCBiZSBhY3R1YWxseQogICogcmVtb3ZlZCwgdGV4dCB3aWxsIGJl
IDAgb3IgJ1wwJwogICovCi12b2lkIGV3a192aWV3X3Rvb2x0aXBfdGV4dF9zZXQoRXZhc19PYmpl
Y3QqIG8sIGNvbnN0IGNoYXIqIHRleHQpCit2b2lkIGV3a192aWV3X3Rvb2x0aXBfdGV4dF9zZXQo
RXZhc19PYmplY3QqIGV3a1ZpZXcsIGNvbnN0IGNoYXIqIHRleHQpCiB7Ci0gICAgREJHKCJvPSVw
IHRleHQ9JXMiLCBvLCB0ZXh0KTsKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxs
KG8sICJ0b29sdGlwLHRleHQsc2V0IiwgKHZvaWQqKXRleHQpOworICAgIERCRygibz0lcCB0ZXh0
PSVzIiwgZXdrVmlldywgdGV4dCk7CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2Fs
bChld2tWaWV3LCAidG9vbHRpcCx0ZXh0LHNldCIsICh2b2lkKil0ZXh0KTsKIH0KIAogLyoqCkBA
IC0zMTA2LDE5ICszMTA2LDE5IEBAIHZvaWQgZXdrX3ZpZXdfdG9vbHRpcF90ZXh0X3NldChFdmFz
X09iamVjdCogbywgY29uc3QgY2hhciogdGV4dCkKICAqIEBzb3VyY2VJRCBTb3VyY2UgaWQuCiAg
KgogICovCi12b2lkIGV3a192aWV3X2FkZF9jb25zb2xlX21lc3NhZ2UoRXZhc19PYmplY3QqIG8s
IGNvbnN0IGNoYXIqIG1lc3NhZ2UsIHVuc2lnbmVkIGludCBsaW5lTnVtYmVyLCBjb25zdCBjaGFy
KiBzb3VyY2VJRCkKK3ZvaWQgZXdrX3ZpZXdfYWRkX2NvbnNvbGVfbWVzc2FnZShFdmFzX09iamVj
dCogZXdrVmlldywgY29uc3QgY2hhciogbWVzc2FnZSwgdW5zaWduZWQgaW50IGxpbmVOdW1iZXIs
IGNvbnN0IGNoYXIqIHNvdXJjZUlEKQogewotICAgIERCRygibz0lcCBtZXNzYWdlPSVzIGxpbmVO
dW1iZXI9JXUgc291cmNlSUQ9JXMiLCBvLCBtZXNzYWdlLCBsaW5lTnVtYmVyLCBzb3VyY2VJRCk7
Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCk7CisgICAgREJHKCJvPSVwIG1l
c3NhZ2U9JXMgbGluZU51bWJlcj0ldSBzb3VyY2VJRD0lcyIsIGV3a1ZpZXcsIG1lc3NhZ2UsIGxp
bmVOdW1iZXIsIHNvdXJjZUlEKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1Zp
ZXcsIHNkKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpKTsKICAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpLT5hZGRfY29uc29sZV9tZXNzYWdlKTsK
ICAgICBzZC0+YXBpLT5hZGRfY29uc29sZV9tZXNzYWdlKHNkLCBtZXNzYWdlLCBsaW5lTnVtYmVy
LCBzb3VyY2VJRCk7CiB9CiAKLWJvb2wgZXdrX3ZpZXdfZm9jdXNfY2FuX2N5Y2xlKEV2YXNfT2Jq
ZWN0KiBvLCBFd2tfRm9jdXNfRGlyZWN0aW9uIGRpcmVjdGlvbikKK2Jvb2wgZXdrX3ZpZXdfZm9j
dXNfY2FuX2N5Y2xlKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFd2tfRm9jdXNfRGlyZWN0aW9uIGRp
cmVjdGlvbikKIHsKLSAgICBEQkcoIm89JXAgZGlyZWN0aW9uPSVkIiwgbywgZGlyZWN0aW9uKTsK
LSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBmYWxzZSk7CisgICAgREJHKCJv
PSVwIGRpcmVjdGlvbj0lZCIsIGV3a1ZpZXcsIGRpcmVjdGlvbik7CisgICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgZmFsc2UpOwogICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOX1ZBTChzZC0+YXBpLCBmYWxzZSk7CiAKICAgICBpZiAoIXNkLT5hcGktPmZvY3Vz
X2Nhbl9jeWNsZSkKQEAgLTMxMjcsMTAgKzMxMjcsMTAgQEAgYm9vbCBld2tfdmlld19mb2N1c19j
YW5fY3ljbGUoRXZhc19PYmplY3QqIG8sIEV3a19Gb2N1c19EaXJlY3Rpb24gZGlyZWN0aW9uKQog
ICAgIHJldHVybiBzZC0+YXBpLT5mb2N1c19jYW5fY3ljbGUoc2QsIGRpcmVjdGlvbik7CiB9CiAK
LXZvaWQgZXdrX3ZpZXdfcnVuX2phdmFzY3JpcHRfYWxlcnQoRXZhc19PYmplY3QqIG8sIEV2YXNf
T2JqZWN0KiBmcmFtZSwgY29uc3QgY2hhciogbWVzc2FnZSkKK3ZvaWQgZXdrX3ZpZXdfcnVuX2ph
dmFzY3JpcHRfYWxlcnQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV2YXNfT2JqZWN0KiBmcmFtZSwg
Y29uc3QgY2hhciogbWVzc2FnZSkKIHsKLSAgICBEQkcoIm89JXAgZnJhbWU9JXAgbWVzc2FnZT0l
cyIsIG8sIGZyYW1lLCBtZXNzYWdlKTsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8s
IHNkKTsKKyAgICBEQkcoIm89JXAgZnJhbWU9JXAgbWVzc2FnZT0lcyIsIGV3a1ZpZXcsIGZyYW1l
LCBtZXNzYWdlKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkKTsK
ICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpKTsKIAogICAgIGlmICghc2Qt
PmFwaS0+cnVuX2phdmFzY3JpcHRfYWxlcnQpCkBAIC0zMTM5LDEwICszMTM5LDEwIEBAIHZvaWQg
ZXdrX3ZpZXdfcnVuX2phdmFzY3JpcHRfYWxlcnQoRXZhc19PYmplY3QqIG8sIEV2YXNfT2JqZWN0
KiBmcmFtZSwgY29uc3QgY2hhCiAgICAgc2QtPmFwaS0+cnVuX2phdmFzY3JpcHRfYWxlcnQoc2Qs
IGZyYW1lLCBtZXNzYWdlKTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3J1bl9qYXZhc2NyaXB0
X2NvbmZpcm0oRXZhc19PYmplY3QqIG8sIEV2YXNfT2JqZWN0KiBmcmFtZSwgY29uc3QgY2hhciog
bWVzc2FnZSkKK0VpbmFfQm9vbCBld2tfdmlld19ydW5famF2YXNjcmlwdF9jb25maXJtKEV2YXNf
T2JqZWN0KiBld2tWaWV3LCBFdmFzX09iamVjdCogZnJhbWUsIGNvbnN0IGNoYXIqIG1lc3NhZ2Up
CiB7Ci0gICAgREJHKCJvPSVwIGZyYW1lPSVwIG1lc3NhZ2U9JXMiLCBvLCBmcmFtZSwgbWVzc2Fn
ZSk7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7Cisg
ICAgREJHKCJvPSVwIGZyYW1lPSVwIG1lc3NhZ2U9JXMiLCBld2tWaWV3LCBmcmFtZSwgbWVzc2Fn
ZSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxT
RSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5hcGksIEVJTkFfRkFM
U0UpOwogCiAgICAgaWYgKCFzZC0+YXBpLT5ydW5famF2YXNjcmlwdF9jb25maXJtKQpAQCAtMzE1
MSwxMCArMzE1MSwxMCBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfcnVuX2phdmFzY3JpcHRfY29uZmly
bShFdmFzX09iamVjdCogbywgRXZhc19PYmplY3QqIGZyYW1lLCBjbwogICAgIHJldHVybiBzZC0+
YXBpLT5ydW5famF2YXNjcmlwdF9jb25maXJtKHNkLCBmcmFtZSwgbWVzc2FnZSk7CiB9CiAKLUVp
bmFfQm9vbCBld2tfdmlld19ydW5famF2YXNjcmlwdF9wcm9tcHQoRXZhc19PYmplY3QqIG8sIEV2
YXNfT2JqZWN0KiBmcmFtZSwgY29uc3QgY2hhciogbWVzc2FnZSwgY29uc3QgY2hhciogZGVmYXVs
dFZhbHVlLCBjaGFyKiogdmFsdWUpCitFaW5hX0Jvb2wgZXdrX3ZpZXdfcnVuX2phdmFzY3JpcHRf
cHJvbXB0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFdmFzX09iamVjdCogZnJhbWUsIGNvbnN0IGNo
YXIqIG1lc3NhZ2UsIGNvbnN0IGNoYXIqIGRlZmF1bHRWYWx1ZSwgY2hhcioqIHZhbHVlKQogewot
ICAgIERCRygibz0lcCBmcmFtZT0lcCBtZXNzYWdlPSVzIiwgbywgZnJhbWUsIG1lc3NhZ2UpOwot
ICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIERC
Rygibz0lcCBmcmFtZT0lcCBtZXNzYWdlPSVzIiwgZXdrVmlldywgZnJhbWUsIG1lc3NhZ2UpOwor
ICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwog
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+YXBpLCBFSU5BX0ZBTFNFKTsK
IAogICAgIGlmICghc2QtPmFwaS0+cnVuX2phdmFzY3JpcHRfcHJvbXB0KQpAQCAtMzE3NCwxMCAr
MzE3NCwxMCBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfcnVuX2phdmFzY3JpcHRfcHJvbXB0KEV2YXNf
T2JqZWN0KiBvLCBFdmFzX09iamVjdCogZnJhbWUsIGNvbgogICoKICAqIEByZXR1cm4gQGMgRUlO
QV9UUlVFIGlmIHNjcmlwdCBzaG91bGQgYmUgc3RvcHBlZDsgQGMgRUlOQV9GQUxTRSBvdGhlcndp
c2UKICAqLwotRWluYV9Cb29sIGV3a192aWV3X3Nob3VsZF9pbnRlcnJ1cHRfamF2YXNjcmlwdChF
dmFzX09iamVjdCogbykKK0VpbmFfQm9vbCBld2tfdmlld19zaG91bGRfaW50ZXJydXB0X2phdmFz
Y3JpcHQoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgREJHKCJvPSVwIiwgbyk7Ci0gICAg
RVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgREJHKCJv
PSVwIiwgZXdrVmlldyk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBz
ZCwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5h
cGksIEVJTkFfRkFMU0UpOwogCiAgICAgaWYgKCFzZC0+YXBpLT5zaG91bGRfaW50ZXJydXB0X2ph
dmFzY3JpcHQpCkBAIC0zMjAwLDEwICszMjAwLDEwIEBAIEVpbmFfQm9vbCBld2tfdmlld19zaG91
bGRfaW50ZXJydXB0X2phdmFzY3JpcHQoRXZhc19PYmplY3QqIG8pCiAgKiBAcGFyYW0gZXhwZWN0
ZWRfc2l6ZSBUaGUgZXhwZWN0ZWQgc2l6ZSBvZiB0aGlzIGRhdGFiYXNlIGluIG9yZGVyIHRvIGZ1
bGZpbGwKICAqIHNpdGUncyByZXF1aXJlbWVudC4KICAqLwotdWludDY0X3QgZXdrX3ZpZXdfZXhj
ZWVkZWRfZGF0YWJhc2VfcXVvdGEoRXZhc19PYmplY3QqIG8sIEV2YXNfT2JqZWN0KiBmcmFtZSwg
Y29uc3QgY2hhciogZGF0YWJhc2VOYW1lLCB1aW50NjRfdCBjdXJyZW50X3NpemUsIHVpbnQ2NF90
IGV4cGVjdGVkX3NpemUpCit1aW50NjRfdCBld2tfdmlld19leGNlZWRlZF9kYXRhYmFzZV9xdW90
YShFdmFzX09iamVjdCogZXdrVmlldywgRXZhc19PYmplY3QqIGZyYW1lLCBjb25zdCBjaGFyKiBk
YXRhYmFzZU5hbWUsIHVpbnQ2NF90IGN1cnJlbnRfc2l6ZSwgdWludDY0X3QgZXhwZWN0ZWRfc2l6
ZSkKIHsKLSAgICBEQkcoIm89JXAiLCBvKTsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJO
KG8sIHNkLCAwKTsKKyAgICBEQkcoIm89JXAiLCBld2tWaWV3KTsKKyAgICBFV0tfVklFV19TRF9H
RVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAwKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTl9WQUwoc2QtPmFwaSwgMCk7CiAgICAgaWYgKCFzZC0+YXBpLT5leGNlZWRlZF9kYXRhYmFz
ZV9xdW90YSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0zMjI1LDEwICszMjI1LDEwIEBAIHVpbnQ2
NF90IGV3a192aWV3X2V4Y2VlZGVkX2RhdGFiYXNlX3F1b3RhKEV2YXNfT2JqZWN0KiBvLCBFdmFz
X09iamVjdCogZnJhbWUsIGNvCiAgKgogICogQHJldHVybiBARUlOQV9GQUxTRSBpZiB1c2VyIGNh
bmNlbGVkIGZpbGUgc2VsZWN0aW9uOyBARUlOQV9UUlVFIGlmIGNvbmZpcm1lZC4KICAqLwotRWlu
YV9Cb29sIGV3a192aWV3X3J1bl9vcGVuX3BhbmVsKEV2YXNfT2JqZWN0KiBvLCBFdmFzX09iamVj
dCogZnJhbWUsIEVpbmFfQm9vbCBhbGxvd3NfbXVsdGlwbGVfZmlsZXMsIGNvbnN0IGNoYXIqIGFj
Y2VwdF90eXBlcywgRWluYV9MaXN0Kiogc2VsZWN0ZWRfZmlsZW5hbWVzKQorRWluYV9Cb29sIGV3
a192aWV3X3J1bl9vcGVuX3BhbmVsKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFdmFzX09iamVjdCog
ZnJhbWUsIEVpbmFfQm9vbCBhbGxvd3NfbXVsdGlwbGVfZmlsZXMsIGNvbnN0IGNoYXIqIGFjY2Vw
dF90eXBlcywgRWluYV9MaXN0Kiogc2VsZWN0ZWRfZmlsZW5hbWVzKQogewotICAgIERCRygibz0l
cCBmcmFtZT0lcCBhbGxvd3NfbXVsdGlwbGVfZmlsZXM9JWQiLCBvLCBmcmFtZSwgYWxsb3dzX211
bHRpcGxlX2ZpbGVzKTsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5B
X0ZBTFNFKTsKKyAgICBEQkcoIm89JXAgZnJhbWU9JXAgYWxsb3dzX211bHRpcGxlX2ZpbGVzPSVk
IiwgZXdrVmlldywgZnJhbWUsIGFsbG93c19tdWx0aXBsZV9maWxlcyk7CisgICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZF
VFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5hcGksIEVJTkFfRkFMU0UpOwogICAgIEVpbmFfQm9v
bCBjb25maXJtOwogCkBAIC0zMjQzLDEwICszMjQzLDEwIEBAIEVpbmFfQm9vbCBld2tfdmlld19y
dW5fb3Blbl9wYW5lbChFdmFzX09iamVjdCogbywgRXZhc19PYmplY3QqIGZyYW1lLCBFaW5hX0Jv
b2wKICAgICByZXR1cm4gY29uZmlybTsKIH0KIAotdm9pZCBld2tfdmlld19yZXBhaW50KEV2YXNf
T2JqZWN0KiBvLCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwgRXZhc19Db29yZCB3LCBFdmFz
X0Nvb3JkIGgpCit2b2lkIGV3a192aWV3X3JlcGFpbnQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV2
YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5LCBFdmFzX0Nvb3JkIHcsIEV2YXNfQ29vcmQgaCkKIHsK
LSAgICBEQkcoIm89JXAsIHJlZ2lvbj0lZCwlZCArICVkeCVkIiwgbywgeCwgeSwgdywgaCk7Ci0g
ICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCk7CisgICAgREJHKCJvPSVwLCByZWdp
b249JWQsJWQgKyAlZHglZCIsIGV3a1ZpZXcsIHgsIHksIHcsIGgpOworICAgIEVXS19WSUVXX1NE
X0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JF
VFVSTihzZCwgcHJpdik7CiAKICAgICBpZiAoIXByaXYtPm1haW5fZnJhbWUtPmNvbnRlbnRSZW5k
ZXJlcigpKSB7CkBAIC0zMjU4LDE2ICszMjU4LDE2IEBAIHZvaWQgZXdrX3ZpZXdfcmVwYWludChF
dmFzX09iamVjdCogbywgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHksIEV2YXNfQ29vcmQgdywK
ICAgICBfZXdrX3ZpZXdfc21hcnRfY2hhbmdlZChzZCk7CiB9CiAKLXZvaWQgZXdrX3ZpZXdfc2Ny
b2xsKEV2YXNfT2JqZWN0KiBvLCBFdmFzX0Nvb3JkIGR4LCBFdmFzX0Nvb3JkIGR5LCBFdmFzX0Nv
b3JkIHN4LCBFdmFzX0Nvb3JkIHN5LCBFdmFzX0Nvb3JkIHN3LCBFdmFzX0Nvb3JkIHNoLCBFdmFz
X0Nvb3JkIGN4LCBFdmFzX0Nvb3JkIGN5LCBFdmFzX0Nvb3JkIGN3LCBFdmFzX0Nvb3JkIGNoLCBF
aW5hX0Jvb2wgbWFpbl9mcmFtZSkKK3ZvaWQgZXdrX3ZpZXdfc2Nyb2xsKEV2YXNfT2JqZWN0KiBl
d2tWaWV3LCBFdmFzX0Nvb3JkIGR4LCBFdmFzX0Nvb3JkIGR5LCBFdmFzX0Nvb3JkIHN4LCBFdmFz
X0Nvb3JkIHN5LCBFdmFzX0Nvb3JkIHN3LCBFdmFzX0Nvb3JkIHNoLCBFdmFzX0Nvb3JkIGN4LCBF
dmFzX0Nvb3JkIGN5LCBFdmFzX0Nvb3JkIGN3LCBFdmFzX0Nvb3JkIGNoLCBFaW5hX0Jvb2wgbWFp
bl9mcmFtZSkKIHsKICAgICBEQkcoIm89JXAsIGRlbHRhOiAlZCwlZCwgc2Nyb2xsOiAlZCwlZCsl
ZHglZCwgY2xpcDogJWQsJWQrJWR4JWQiLAotICAgICAgICBvLCBkeCwgZHksIHN4LCBzeSwgc3cs
IHNoLCBjeCwgY3ksIGN3LCBjaCk7CisgICAgICAgIGV3a1ZpZXcsIGR4LCBkeSwgc3gsIHN5LCBz
dywgc2gsIGN4LCBjeSwgY3csIGNoKTsKIAogICAgIGlmICgoc3ggIT0gY3gpIHx8IChzeSAhPSBj
eSkgfHwgKHN3ICE9IGN3KSB8fCAoc2ggIT0gY2gpKQogICAgICAgICBXUk4oInNjcm9sbCByZWdp
b24gYW5kIGNsaXAgYXJlIGRpZmZlcmVudCEgJWQsJWQrJWR4JWQgYW5kICVkLCVkKyVkeCVkIiwK
ICAgICAgICAgICAgIHN4LCBzeSwgc3csIHNoLCBjeCwgY3ksIGN3LCBjaCk7CiAKLSAgICBFV0tf
VklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVU
VVJOKGV3a1ZpZXcsIHNkKTsKICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHBy
aXYpOwogICAgIEVJTkFfU0FGRVRZX09OX1RSVUVfUkVUVVJOKCFkeCAmJiAhZHkpOwogCkBAIC0z
Mjc2LDkgKzMyNzYsOSBAQCB2b2lkIGV3a192aWV3X3Njcm9sbChFdmFzX09iamVjdCogbywgRXZh
c19Db29yZCBkeCwgRXZhc19Db29yZCBkeSwgRXZhc19Db29yZCBzeAogICAgIF9ld2tfdmlld19z
bWFydF9jaGFuZ2VkKHNkKTsKIH0KIAotV2ViQ29yZTo6UGFnZSogZXdrX3ZpZXdfY29yZV9wYWdl
X2dldChjb25zdCBFdmFzX09iamVjdCogbykKK1dlYkNvcmU6OlBhZ2UqIGV3a192aWV3X2NvcmVf
cGFnZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihvLCBzZCwgMCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihl
d2tWaWV3LCBzZCwgMCk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2
LCAwKTsKICAgICByZXR1cm4gcHJpdi0+cGFnZTsKIH0KQEAgLTMyODgsMTMgKzMyODgsMTMgQEAg
V2ViQ29yZTo6UGFnZSogZXdrX3ZpZXdfY29yZV9wYWdlX2dldChjb25zdCBFdmFzX09iamVjdCog
bykKICAqCiAgKiBFbWl0cyAiZnJhbWUsY3JlYXRlZCIgd2l0aCB0aGUgbmV3IGZyYW1lIG9iamVj
dCBvbiBzdWNjZXNzLgogICovCi1XVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6RnJhbWU+IGV3a192
aWV3X2ZyYW1lX2NyZWF0ZShFdmFzX09iamVjdCogbywgRXZhc19PYmplY3QqIGZyYW1lLCBjb25z
dCBXVEY6OlN0cmluZyYgbmFtZSwgV2ViQ29yZTo6SFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25l
ckVsZW1lbnQsIGNvbnN0IFdlYkNvcmU6OktVUkwmIHVybCwgY29uc3QgV1RGOjpTdHJpbmcmIHJl
ZmVycmVyKQorV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkZyYW1lPiBld2tfdmlld19mcmFtZV9j
cmVhdGUoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV2YXNfT2JqZWN0KiBmcmFtZSwgY29uc3QgV1RG
OjpTdHJpbmcmIG5hbWUsIFdlYkNvcmU6OkhUTUxGcmFtZU93bmVyRWxlbWVudCogb3duZXJFbGVt
ZW50LCBjb25zdCBXZWJDb3JlOjpLVVJMJiB1cmwsIGNvbnN0IFdURjo6U3RyaW5nJiByZWZlcnJl
cikKIHsKICAgICBEQkcoIm89JXAsIGZyYW1lPSVwLCBuYW1lPSVzLCBvd25lckVsZW1lbnQ9JXAs
IHVybD0lcywgcmVmZXJyZXI9JXMiLAotICAgICAgICBvLCBmcmFtZSwgbmFtZS51dGY4KCkuZGF0
YSgpLCBvd25lckVsZW1lbnQsCisgICAgICAgIGV3a1ZpZXcsIGZyYW1lLCBuYW1lLnV0ZjgoKS5k
YXRhKCksIG93bmVyRWxlbWVudCwKICAgICAgICAgdXJsLnN0cmluZygpLnV0ZjgoKS5kYXRhKCks
IHJlZmVycmVyLnV0ZjgoKS5kYXRhKCkpOwogCi0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
TihvLCBzZCwgMCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwg
MCk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCAwKTsKIAogICAg
IFdURjo6UmVmUHRyPFdlYkNvcmU6OkZyYW1lPiBjZiA9IF9ld2tfdmlld19jb3JlX2ZyYW1lX25l
dwpAQCAtMzMxNiwxNyArMzMxNiwxNyBAQCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6RnJhbWU+
IGV3a192aWV3X2ZyYW1lX2NyZWF0ZShFdmFzX09iamVjdCogbywgRXZhc19PYmplYwogICAgIHNk
LT5jaGFuZ2VkLmZyYW1lX3JlY3QgPSBFSU5BX1RSVUU7CiAgICAgX2V3a192aWV3X3NtYXJ0X2No
YW5nZWQoc2QpOwogCi0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChvLCAiZnJh
bWUsY3JlYXRlZCIsIGZyYW1lKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxs
KGV3a1ZpZXcsICJmcmFtZSxjcmVhdGVkIiwgZnJhbWUpOwogICAgIHJldHVybiBjZi5yZWxlYXNl
KCk7CiB9CiAKLVdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpXaWRnZXQ+IGV3a192aWV3X3BsdWdp
bl9jcmVhdGUoRXZhc19PYmplY3QqIG8sIEV2YXNfT2JqZWN0KiBmcmFtZSwgY29uc3QgV2ViQ29y
ZTo6SW50U2l6ZSYgcGx1Z2luU2l6ZSwgV2ViQ29yZTo6SFRNTFBsdWdJbkVsZW1lbnQqIGVsZW1l
bnQsIGNvbnN0IFdlYkNvcmU6OktVUkwmIHVybCwgY29uc3QgV1RGOjpWZWN0b3I8V1RGOjpTdHJp
bmc+JiBwYXJhbU5hbWVzLCBjb25zdCBXVEY6OlZlY3RvcjxXVEY6OlN0cmluZz4mIHBhcmFtVmFs
dWVzLCBjb25zdCBXVEY6OlN0cmluZyYgbWltZVR5cGUsIGJvb2wgbG9hZE1hbnVhbGx5KQorV1RG
OjpQYXNzUmVmUHRyPFdlYkNvcmU6OldpZGdldD4gZXdrX3ZpZXdfcGx1Z2luX2NyZWF0ZShFdmFz
X09iamVjdCogZXdrVmlldywgRXZhc19PYmplY3QqIGZyYW1lLCBjb25zdCBXZWJDb3JlOjpJbnRT
aXplJiBwbHVnaW5TaXplLCBXZWJDb3JlOjpIVE1MUGx1Z0luRWxlbWVudCogZWxlbWVudCwgY29u
c3QgV2ViQ29yZTo6S1VSTCYgdXJsLCBjb25zdCBXVEY6OlZlY3RvcjxXVEY6OlN0cmluZz4mIHBh
cmFtTmFtZXMsIGNvbnN0IFdURjo6VmVjdG9yPFdURjo6U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNv
bnN0IFdURjo6U3RyaW5nJiBtaW1lVHlwZSwgYm9vbCBsb2FkTWFudWFsbHkpCiB7CiAgICAgREJH
KCJvPSVwLCBmcmFtZT0lcCwgc2l6ZT0lZHglZCwgZWxlbWVudD0lcCwgdXJsPSVzLCBtaW1lVHlw
ZT0lcyIsCi0gICAgICAgIG8sIGZyYW1lLCBwbHVnaW5TaXplLndpZHRoKCksIHBsdWdpblNpemUu
aGVpZ2h0KCksIGVsZW1lbnQsCisgICAgICAgIGV3a1ZpZXcsIGZyYW1lLCBwbHVnaW5TaXplLndp
ZHRoKCksIHBsdWdpblNpemUuaGVpZ2h0KCksIGVsZW1lbnQsCiAgICAgICAgIHVybC5zdHJpbmco
KS51dGY4KCkuZGF0YSgpLCBtaW1lVHlwZS51dGY4KCkuZGF0YSgpKTsKIAotICAgIEVXS19WSUVX
X1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIDApOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRV
Uk4oZXdrVmlldywgc2QsIDApOwogICAgIHNkLT5jaGFuZ2VkLmZyYW1lX3JlY3QgPSBFSU5BX1RS
VUU7CiAgICAgX2V3a192aWV3X3NtYXJ0X2NoYW5nZWQoc2QpOwogCkBAIC0zMzQ2LDE0ICszMzQ2
LDE0IEBAIFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpXaWRnZXQ+IGV3a192aWV3X3BsdWdpbl9j
cmVhdGUoRXZhc19PYmplY3QqIG8sIEV2YXNfT2JqCiAgKgogICogRW1pdHM6ICJwb3B1cCxjcmVh
dGUiIHdpdGggYSBsaXN0IG9mIEV3a19NZW51IGNvbnRhaW5pbmcgZWFjaCBpdGVtJ3MgZGF0YQog
ICovCi12b2lkIGV3a192aWV3X3BvcHVwX25ldyhFdmFzX09iamVjdCogbywgV2ViQ29yZTo6UG9w
dXBNZW51Q2xpZW50KiBjbGllbnQsIGludCBzZWxlY3RlZCwgY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYgcmVjdCkKK3ZvaWQgZXdrX3ZpZXdfcG9wdXBfbmV3KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBX
ZWJDb3JlOjpQb3B1cE1lbnVDbGllbnQqIGNsaWVudCwgaW50IHNlbGVjdGVkLCBjb25zdCBXZWJD
b3JlOjpJbnRSZWN0JiByZWN0KQogewotICAgIElORigibz0lcCIsIG8pOwotICAgIEVXS19WSUVX
X1NEX0dFVF9PUl9SRVRVUk4obywgc2QpOworICAgIElORigibz0lcCIsIGV3a1ZpZXcpOworICAg
IEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QpOwogICAgIEVXS19WSUVXX1BS
SVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdik7CiAKICAgICBpZiAocHJpdi0+cG9wdXAubWVudV9j
bGllbnQpCi0gICAgICAgIGV3a192aWV3X3BvcHVwX2Rlc3Ryb3kobyk7CisgICAgICAgIGV3a192
aWV3X3BvcHVwX2Rlc3Ryb3koZXdrVmlldyk7CiAKICAgICBwcml2LT5wb3B1cC5tZW51X2NsaWVu
dCA9IGNsaWVudDsKIApAQCAtMzM3NiwxOSArMzM3NiwxOSBAQCB2b2lkIGV3a192aWV3X3BvcHVw
X25ldyhFdmFzX09iamVjdCogbywgV2ViQ29yZTo6UG9wdXBNZW51Q2xpZW50KiBjbGllbnQsIGlu
dCBzZQogICAgIHByaXYtPnBvcHVwLm1lbnUueSA9IHJlY3QueSgpOwogICAgIHByaXYtPnBvcHVw
Lm1lbnUud2lkdGggPSByZWN0LndpZHRoKCk7CiAgICAgcHJpdi0+cG9wdXAubWVudS5oZWlnaHQg
PSByZWN0LmhlaWdodCgpOwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwobywg
InBvcHVwLGNyZWF0ZSIsICZwcml2LT5wb3B1cC5tZW51KTsKKyAgICBldmFzX29iamVjdF9zbWFy
dF9jYWxsYmFja19jYWxsKGV3a1ZpZXcsICJwb3B1cCxjcmVhdGUiLCAmcHJpdi0+cG9wdXAubWVu
dSk7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld19wb3B1cF9kZXN0cm95KEV2YXNfT2JqZWN0KiBv
KQorRWluYV9Cb29sIGV3a192aWV3X3BvcHVwX2Rlc3Ryb3koRXZhc19PYmplY3QqIGV3a1ZpZXcp
CiB7Ci0gICAgSU5GKCJvPSVwIiwgbyk7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihv
LCBzZCwgRUlOQV9GQUxTRSk7CisgICAgSU5GKCJvPSVwIiwgZXdrVmlldyk7CisgICAgRVdLX1ZJ
RVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJ
RVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKIAogICAgIGlmICgh
cHJpdi0+cG9wdXAubWVudV9jbGllbnQpCiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwogCi0g
ICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChvLCAicG9wdXAsd2lsbGRlbGV0ZSIs
ICZwcml2LT5wb3B1cC5tZW51KTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxs
KGV3a1ZpZXcsICJwb3B1cCx3aWxsZGVsZXRlIiwgJnByaXYtPnBvcHVwLm1lbnUpOwogCiAgICAg
dm9pZCogaXRlbXY7CiAgICAgRUlOQV9MSVNUX0ZSRUUocHJpdi0+cG9wdXAubWVudS5pdGVtcywg
aXRlbXYpIHsKQEAgLTM0MDIsMTAgKzM0MDIsMTAgQEAgRWluYV9Cb29sIGV3a192aWV3X3BvcHVw
X2Rlc3Ryb3koRXZhc19PYmplY3QqIG8pCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotdm9p
ZCBld2tfdmlld19wb3B1cF9zZWxlY3RlZF9zZXQoRXZhc19PYmplY3QqIG8sIGludCBpbmRleCkK
K3ZvaWQgZXdrX3ZpZXdfcG9wdXBfc2VsZWN0ZWRfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBp
bnQgaW5kZXgpCiB7Ci0gICAgSU5GKCJvPSVwIiwgbyk7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihvLCBzZCk7CisgICAgSU5GKCJvPSVwIiwgZXdrVmlldyk7CisgICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1Jf
UkVUVVJOKHNkLCBwcml2KTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihwcml2LT5w
b3B1cC5tZW51X2NsaWVudCk7CiAKQEAgLTM0MjIsMTAgKzM0MjIsMTAgQEAgdm9pZCBld2tfdmll
d19wb3B1cF9zZWxlY3RlZF9zZXQoRXZhc19PYmplY3QqIG8sIGludCBpbmRleCkKICAqIEVtaXRz
OiAiZG93bmxvYWQscmVxdWVzdCIgd2l0aCBhbiBFd2tfRG93bmxvYWQgY29udGFpbmluZyB0aGUg
ZGV0YWlscyBvZiB0aGUKICAqIHJlcXVlc3RlZCBkb3dubG9hZC4gVGhlIGRvd25sb2FkIHBlciBz
ZSBtdXN0IGJlIGhhbmRsZWQgb3V0c2lkZSBvZiB3ZWJraXQuCiAgKi8KLXZvaWQgZXdrX3ZpZXdf
ZG93bmxvYWRfcmVxdWVzdChFdmFzX09iamVjdCogbywgRXdrX0Rvd25sb2FkKiBkb3dubG9hZCkK
K3ZvaWQgZXdrX3ZpZXdfZG93bmxvYWRfcmVxdWVzdChFdmFzX09iamVjdCogZXdrVmlldywgRXdr
X0Rvd25sb2FkKiBkb3dubG9hZCkKIHsKLSAgICBEQkcoInZpZXc9JXAiLCBvKTsKLSAgICBldmFz
X29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKG8sICJkb3dubG9hZCxyZXF1ZXN0IiwgZG93bmxv
YWQpOworICAgIERCRygidmlldz0lcCIsIGV3a1ZpZXcpOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0
X2NhbGxiYWNrX2NhbGwoZXdrVmlldywgImRvd25sb2FkLHJlcXVlc3QiLCBkb3dubG9hZCk7CiB9
CiAKIC8qKgpAQCAtMzQzNSw5ICszNDM1LDkgQEAgdm9pZCBld2tfdmlld19kb3dubG9hZF9yZXF1
ZXN0KEV2YXNfT2JqZWN0KiBvLCBFd2tfRG93bmxvYWQqIGRvd25sb2FkKQogICogQHBhcmFtIG8g
dmlldy4KICAqIEBwYXJhbSBmcmFtZSB0aGUgZnJhbWUuCiAgKi8KLXZvaWQgZXdrX3ZpZXdfanNf
d2luZG93X29iamVjdF9jbGVhcihFdmFzX09iamVjdCogbywgRXZhc19PYmplY3QqIGZyYW1lKQor
dm9pZCBld2tfdmlld19qc193aW5kb3dfb2JqZWN0X2NsZWFyKEV2YXNfT2JqZWN0KiBld2tWaWV3
LCBFdmFzX09iamVjdCogZnJhbWUpCiB7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tf
Y2FsbChvLCAianMsd2luZG93b2JqZWN0LGNsZWFyIiwgZnJhbWUpOworICAgIGV2YXNfb2JqZWN0
X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdrVmlldywgImpzLHdpbmRvd29iamVjdCxjbGVhciIsIGZy
YW1lKTsKIH0KIAogLyoqCkBAIC0zNDQ4LDE4ICszNDQ4LDE4IEBAIHZvaWQgZXdrX3ZpZXdfanNf
d2luZG93X29iamVjdF9jbGVhcihFdmFzX09iamVjdCogbywgRXZhc19PYmplY3QqIGZyYW1lKQog
ICoKICAqIEVtaXRzIHNpZ25hbDogInZpZXdwb3J0LGNoYW5nZWQiIHdpdGggbm8gcGFyYW1ldGVy
cy4KICAqLwotdm9pZCBld2tfdmlld192aWV3cG9ydF9hdHRyaWJ1dGVzX3NldChFdmFzX09iamVj
dCogbywgY29uc3QgV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHMmIGFyZ3VtZW50cykKK3ZvaWQg
ZXdrX3ZpZXdfdmlld3BvcnRfYXR0cmlidXRlc19zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGNv
bnN0IFdlYkNvcmU6OlZpZXdwb3J0QXJndW1lbnRzJiBhcmd1bWVudHMpCiB7Ci0gICAgRVdLX1ZJ
RVdfU0RfR0VUKG8sIHNkKTsKKyAgICBFV0tfVklFV19TRF9HRVQoZXdrVmlldywgc2QpOwogICAg
IEVXS19WSUVXX1BSSVZfR0VUKHNkLCBwcml2KTsKIAogICAgIHByaXYtPnZpZXdwb3J0X2FyZ3Vt
ZW50cyA9IGFyZ3VtZW50czsKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKG8s
ICJ2aWV3cG9ydCxjaGFuZ2VkIiwgMCk7CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tf
Y2FsbChld2tWaWV3LCAidmlld3BvcnQsY2hhbmdlZCIsIDApOwogfQogCi12b2lkIGV3a192aWV3
X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvLCBmbG9hdCogdywg
ZmxvYXQqIGgsIGZsb2F0KiBpbml0X3NjYWxlLCBmbG9hdCogbWF4X3NjYWxlLCBmbG9hdCogbWlu
X3NjYWxlLCBmbG9hdCogZGV2aWNlX3BpeGVsX3JhdGlvLCBFaW5hX0Jvb2wqIHVzZXJfc2NhbGFi
bGUpCit2b2lkIGV3a192aWV3X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfZ2V0KGNvbnN0IEV2YXNfT2Jq
ZWN0KiBld2tWaWV3LCBmbG9hdCogdywgZmxvYXQqIGgsIGZsb2F0KiBpbml0X3NjYWxlLCBmbG9h
dCogbWF4X3NjYWxlLCBmbG9hdCogbWluX3NjYWxlLCBmbG9hdCogZGV2aWNlX3BpeGVsX3JhdGlv
LCBFaW5hX0Jvb2wqIHVzZXJfc2NhbGFibGUpCiB7Ci0gICAgV2ViQ29yZTo6Vmlld3BvcnRBdHRy
aWJ1dGVzIGF0dHJpYnV0ZXMgPSBfZXdrX3ZpZXdfdmlld3BvcnRfYXR0cmlidXRlc19jb21wdXRl
KG8pOworICAgIFdlYkNvcmU6OlZpZXdwb3J0QXR0cmlidXRlcyBhdHRyaWJ1dGVzID0gX2V3a192
aWV3X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfY29tcHV0ZShld2tWaWV3KTsKIAogICAgIGlmICh3KQog
ICAgICAgICAqdyA9IGF0dHJpYnV0ZXMubGF5b3V0U2l6ZS53aWR0aCgpOwpAQCAtMzQ3Nyw5ICsz
NDc3LDkgQEAgdm9pZCBld2tfdmlld192aWV3cG9ydF9hdHRyaWJ1dGVzX2dldChjb25zdCBFdmFz
X09iamVjdCogbywgZmxvYXQqIHcsIGZsb2F0KiBoLAogICAgICAgICAqdXNlcl9zY2FsYWJsZSA9
IHN0YXRpY19jYXN0PGJvb2w+KGF0dHJpYnV0ZXMudXNlclNjYWxhYmxlKTsKIH0KIAotRWluYV9C
b29sIGV3a192aWV3X3pvb21fcmFuZ2Vfc2V0KEV2YXNfT2JqZWN0KiBvLCBmbG9hdCBtaW5fc2Nh
bGUsIGZsb2F0IG1heF9zY2FsZSkKK0VpbmFfQm9vbCBld2tfdmlld196b29tX3JhbmdlX3NldChF
dmFzX09iamVjdCogZXdrVmlldywgZmxvYXQgbWluX3NjYWxlLCBmbG9hdCBtYXhfc2NhbGUpCiB7
Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAg
RVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAg
RVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKIAogICAg
IGlmIChtYXhfc2NhbGUgPCBtaW5fc2NhbGUpIHsKQEAgLTM0OTMsMjUgKzM0OTMsMjUgQEAgRWlu
YV9Cb29sIGV3a192aWV3X3pvb21fcmFuZ2Vfc2V0KEV2YXNfT2JqZWN0KiBvLCBmbG9hdCBtaW5f
c2NhbGUsIGZsb2F0IG1heF9zY2EKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi1mbG9hdCBl
d2tfdmlld196b29tX3JhbmdlX21pbl9nZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCitmbG9hdCBl
d2tfdmlld196b29tX3JhbmdlX21pbl9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7
Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgLTEuMCk7CisgICAgRVdLX1ZJ
RVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgLTEuMCk7CiAgICAgRVdLX1ZJRVdfUFJJ
Vl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCAtMS4wKTsKIAogICAgIHJldHVybiBwcml2LT5zZXR0
aW5ncy56b29tX3JhbmdlLm1pbl9zY2FsZTsKIH0KIAotZmxvYXQgZXdrX3ZpZXdfem9vbV9yYW5n
ZV9tYXhfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQorZmxvYXQgZXdrX3ZpZXdfem9vbV9yYW5n
ZV9tYXhfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NE
X0dFVF9PUl9SRVRVUk4obywgc2QsIC0xLjApOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRV
Uk4oZXdrVmlldywgc2QsIC0xLjApOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihz
ZCwgcHJpdiwgLTEuMCk7CiAKICAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3Muem9vbV9yYW5nZS5t
YXhfc2NhbGU7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld191c2VyX3NjYWxhYmxlX3NldChFdmFz
X09iamVjdCogbywgRWluYV9Cb29sIHVzZXJfc2NhbGFibGUpCitFaW5hX0Jvb2wgZXdrX3ZpZXdf
dXNlcl9zY2FsYWJsZV9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCB1c2VyX3Nj
YWxhYmxlKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFM
U0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFM
U0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxT
RSk7CiAKICAgICBwcml2LT5zZXR0aW5ncy56b29tX3JhbmdlLnVzZXJfc2NhbGFibGUgPSB1c2Vy
X3NjYWxhYmxlOwpAQCAtMzUxOSwyOSArMzUxOSwyOSBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfdXNl
cl9zY2FsYWJsZV9zZXQoRXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCB1c2VyX3NjYWxhYmxlKQog
ICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld191c2VyX3NjYWxh
YmxlX2dldChjb25zdCBFdmFzX09iamVjdCogbykKK0VpbmFfQm9vbCBld2tfdmlld191c2VyX3Nj
YWxhYmxlX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19T
RF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRf
T1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFV0tfVklFV19QUklWX0dF
VF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwogCiAgICAgcmV0dXJuIHByaXYtPnNl
dHRpbmdzLnpvb21fcmFuZ2UudXNlcl9zY2FsYWJsZTsKIH0KIAotZmxvYXQgZXdrX3ZpZXdfZGV2
aWNlX3BpeGVsX3JhdGlvX2dldChjb25zdCBFdmFzX09iamVjdCogbykKK2Zsb2F0IGV3a192aWV3
X2RldmljZV9waXhlbF9yYXRpb19nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0g
ICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgLTEuMCk7CisgICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgLTEuMCk7CiAgICAgRVdLX1ZJRVdfUFJJVl9H
RVRfT1JfUkVUVVJOKHNkLCBwcml2LCAtMS4wKTsKIAogICAgIHJldHVybiBwcml2LT5zZXR0aW5n
cy5kZXZpY2VfcGl4ZWxfcmF0aW87CiB9CiAKLXZvaWQgZXdrX3ZpZXdfZGlkX2ZpcnN0X3Zpc3Vh
bGx5X25vbmVtcHR5X2xheW91dChFdmFzX09iamVjdCogbykKK3ZvaWQgZXdrX3ZpZXdfZGlkX2Zp
cnN0X3Zpc3VhbGx5X25vbmVtcHR5X2xheW91dChFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkKTsKKyAgICBFV0tfVklFV19TRF9HRVRf
T1JfUkVUVVJOKGV3a1ZpZXcsIHNkKTsKICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4o
c2QsIHByaXYpOwogICAgIGlmICghcHJpdi0+ZmxhZ3Mudmlld19jbGVhcmVkKSB7Ci0gICAgICAg
IGV3a192aWV3X2ZyYW1lX21haW5fY2xlYXJlZChvKTsKLSAgICAgICAgZXdrX3ZpZXdfZW5hYmxl
X3JlbmRlcihvKTsKKyAgICAgICAgZXdrX3ZpZXdfZnJhbWVfbWFpbl9jbGVhcmVkKGV3a1ZpZXcp
OworICAgICAgICBld2tfdmlld19lbmFibGVfcmVuZGVyKGV3a1ZpZXcpOwogICAgICAgICBwcml2
LT5mbGFncy52aWV3X2NsZWFyZWQgPSBFSU5BX1RSVUU7CiAgICAgfQogfQpAQCAtMzU1MiwyMSAr
MzU1MiwyMSBAQCB2b2lkIGV3a192aWV3X2RpZF9maXJzdF92aXN1YWxseV9ub25lbXB0eV9sYXlv
dXQoRXZhc19PYmplY3QqIG8pCiAgKgogICogQHBhcmFtIG8gdmlldy4KICAqLwotdm9pZCBld2tf
dmlld19kaXNwYXRjaF9kaWRfZmluaXNoX2xvYWRpbmcoRXZhc19PYmplY3QqIG8pCit2b2lkIGV3
a192aWV3X2Rpc3BhdGNoX2RpZF9maW5pc2hfbG9hZGluZyhFdmFzX09iamVjdCogZXdrVmlldykK
IHsKICAgICAvKiBJZiB3ZSByZWFjaCB0aGlzIHBvaW50IGFuZCByZW5kZXJpbmcgaXMgc3RpbGwg
ZGlzYWJsZWQsIFdlYkNvcmUgd2lsbCBub3QKICAgICAgKiB0cmlnZ2VyIHRoZSBkaWRGaXJzdFZp
c3VhbGx5Tm9uRW1wdHlMYXlvdXQgc2lnbmFsIGFueW1vcmUuIFNvLCB3ZQogICAgICAqIGZvcmNl
ZnVsbHkgcmUtZW5hYmxlIHRoZSByZW5kZXJpbmcuCiAgICAgICovCi0gICAgZXdrX3ZpZXdfZGlk
X2ZpcnN0X3Zpc3VhbGx5X25vbmVtcHR5X2xheW91dChvKTsKKyAgICBld2tfdmlld19kaWRfZmly
c3RfdmlzdWFsbHlfbm9uZW1wdHlfbGF5b3V0KGV3a1ZpZXcpOwogfQogCi12b2lkIGV3a192aWV3
X3RyYW5zaXRpb25fdG9fY29tbWl0ZWRfZm9yX25ld3BhZ2UoRXZhc19PYmplY3QqIG8pCit2b2lk
IGV3a192aWV3X3RyYW5zaXRpb25fdG9fY29tbWl0ZWRfZm9yX25ld3BhZ2UoRXZhc19PYmplY3Qq
IGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCk7CisgICAg
RVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCk7CiAgICAgRVdLX1ZJRVdfUFJJ
Vl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2KTsKIAotICAgIGV3a192aWV3X2Rpc2FibGVfcmVuZGVy
KG8pOworICAgIGV3a192aWV3X2Rpc2FibGVfcmVuZGVyKGV3a1ZpZXcpOwogICAgIHByaXYtPmZs
YWdzLnZpZXdfY2xlYXJlZCA9IEVJTkFfRkFMU0U7CiB9CiAKQEAgLTM1ODAsOSArMzU4MCw5IEBA
IHZvaWQgZXdrX3ZpZXdfdHJhbnNpdGlvbl90b19jb21taXRlZF9mb3JfbmV3cGFnZShFdmFzX09i
amVjdCogbykKICAqIEBwYXJhbSBvIFZpZXcgdG8gbG9hZAogICogQHBhcmFtIHJlcXVlc3QgUmVx
dWVzdCB3aGljaCBjb250YWluIHVybCB0byBuYXZpZ2F0ZQogICovCi1FaW5hX0Jvb2wgZXdrX3Zp
ZXdfbmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb24oRXZhc19PYmplY3QqIG8sIEV3a19GcmFtZV9S
ZXNvdXJjZV9SZXF1ZXN0KiByZXF1ZXN0KQorRWluYV9Cb29sIGV3a192aWV3X25hdmlnYXRpb25f
cG9saWN5X2RlY2lzaW9uKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFd2tfRnJhbWVfUmVzb3VyY2Vf
UmVxdWVzdCogcmVxdWVzdCkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNk
LCBFSU5BX1RSVUUpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2Qs
IEVJTkFfVFJVRSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5hcGks
IEVJTkFfVFJVRSk7CiAKICAgICBpZiAoIXNkLT5hcGktPm5hdmlnYXRpb25fcG9saWN5X2RlY2lz
aW9uKQpAQCAtMzU5MSwxMyArMzU5MSwxMyBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfbmF2aWdhdGlv
bl9wb2xpY3lfZGVjaXNpb24oRXZhc19PYmplY3QqIG8sIEV3a19GcmFtZV9SZXNvdXJjZQogICAg
IHJldHVybiBzZC0+YXBpLT5uYXZpZ2F0aW9uX3BvbGljeV9kZWNpc2lvbihzZCwgcmVxdWVzdCk7
CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld19qc19vYmplY3RfYWRkKEV2YXNfT2JqZWN0KiBvLCBF
d2tfSlNfT2JqZWN0KiBvYmosIGNvbnN0IGNoYXIqIG9ial9uYW1lKQorRWluYV9Cb29sIGV3a192
aWV3X2pzX29iamVjdF9hZGQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV3a19KU19PYmplY3QqIG9i
aiwgY29uc3QgY2hhciogb2JqX25hbWUpCiB7CiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9B
UEkpCiAgICAgaWYgKG9iai0+dmlldykgLy8gb2JqZWN0IGhhcyBhbHJlYWR5IGJlZW4gYWRkZWQg
dG8gYW5vdGhlciBld2tfdmlldwogICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKICAgICBvYmot
Pm5hbWUgPSBlaW5hX3N0cmluZ3NoYXJlX2FkZChvYmpfbmFtZSk7Ci0gICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRf
T1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKIAogICAgIEpTQzo6SlNMb2NrIGxvY2so
SlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwpAQCAtMzYxMiw3ICszNjEyLDcgQEAgRWluYV9C
b29sIGV3a192aWV3X2pzX29iamVjdF9hZGQoRXZhc19PYmplY3QqIG8sIEV3a19KU19PYmplY3Qq
IG9iaiwgY29uc3QgY2hhcioKIAogICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gd2luZG93LT5n
bG9iYWxFeGVjKCk7CiAKLSAgICBvYmotPnZpZXcgPSBvOworICAgIG9iai0+dmlldyA9IGV3a1Zp
ZXc7CiAgICAgSlNDOjpKU09iamVjdCogcnVudGltZU9iamVjdCA9IChKU0M6OkpTT2JqZWN0KilK
U0M6OkJpbmRpbmdzOjpDSW5zdGFuY2U6OmNyZWF0ZSgoTlBPYmplY3QqKW9iaiwgcm9vdCktPmNy
ZWF0ZVJ1bnRpbWVPYmplY3QoZXhlYyk7CiAgICAgSlNDOjpJZGVudGlmaWVyIGlkID0gSlNDOjpJ
ZGVudGlmaWVyKGV4ZWMsIG9ial9uYW1lKTsKIApAQCAtMzYyNCw5ICszNjI0LDkgQEAgRWluYV9C
b29sIGV3a192aWV3X2pzX29iamVjdF9hZGQoRXZhc19PYmplY3QqIG8sIEV3a19KU19PYmplY3Qq
IG9iaiwgY29uc3QgY2hhcioKICNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkK
IH0KIAotRWluYV9Cb29sIGV3a192aWV3X3Byb3RvY29sX2hhbmRsZXJfc2V0KEV2YXNfT2JqZWN0
KiBvLCBjb25zdCBjaGFyKiogcHJvdG9jb2xzLCBFd2tfVmlld19SZXNvdXJjZV9IYW5kbGVyX0Ni
IGhhbmRsZXIsIHZvaWQqIGNvbnRleHQpCitFaW5hX0Jvb2wgZXdrX3ZpZXdfcHJvdG9jb2xfaGFu
ZGxlcl9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGNvbnN0IGNoYXIqKiBwcm90b2NvbHMsIEV3
a19WaWV3X1Jlc291cmNlX0hhbmRsZXJfQ2IgaGFuZGxlciwgdm9pZCogY29udGV4dCkKIHsKLSAg
ICBFV0tfVklFV19TRF9HRVQobywgc2QpOworICAgIEVXS19WSUVXX1NEX0dFVChld2tWaWV3LCBz
ZCk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVQoc2QsIHByaXYpOwogCiAgICAgaWYgKCFoYW5kbGVy
KQpAQCAtMzYzOCw5ICszNjM4LDkgQEAgRWluYV9Cb29sIGV3a192aWV3X3Byb3RvY29sX2hhbmRs
ZXJfc2V0KEV2YXNfT2JqZWN0KiBvLCBjb25zdCBjaGFyKiogcHJvdG9jb2xzLAogICAgIHJldHVy
biBld2tfY3VzdG9tX3Byb3RvY29sX2hhbmRsZXJfc2V0KHByb3RvY29scyk7CiB9CiAKLUVpbmFf
Qm9vbCBld2tfdmlld19wcm90b2NvbF9oYW5kbGVyX3Vuc2V0KEV2YXNfT2JqZWN0KiBvKQorRWlu
YV9Cb29sIGV3a192aWV3X3Byb3RvY29sX2hhbmRsZXJfdW5zZXQoRXZhc19PYmplY3QqIGV3a1Zp
ZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUKG8sIHNkKTsKKyAgICBFV0tfVklFV19TRF9HRVQo
ZXdrVmlldywgc2QpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUKHNkLCBwcml2KTsKICAgICBFaW5h
X0Jvb2wgcmV0ID0gZXdrX2N1c3RvbV9wcm90b2NvbF9oYW5kbGVyX2FsbF91bnNldCgpOwogCkBA
IC0zNjUyLDkgKzM2NTIsOSBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfcHJvdG9jb2xfaGFuZGxlcl91
bnNldChFdmFzX09iamVjdCogbykKICAgICByZXR1cm4gcmV0OwogfQogCi12b2lkKiBld2tfdmll
d19wcm90b2NvbF9oYW5kbGVyX3Jlc291cmNlX2dldChFdmFzX09iamVjdCogbywgc2l6ZV90KiBi
eXRlc1JlYWQsIGNoYXIqKiBtaW1lLCBjb25zdCBjaGFyKiBmaWxlKQordm9pZCogZXdrX3ZpZXdf
cHJvdG9jb2xfaGFuZGxlcl9yZXNvdXJjZV9nZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIHNpemVf
dCogYnl0ZXNSZWFkLCBjaGFyKiogbWltZSwgY29uc3QgY2hhciogZmlsZSkKIHsKLSAgICBFV0tf
VklFV19TRF9HRVQobywgc2QpOworICAgIEVXS19WSUVXX1NEX0dFVChld2tWaWV3LCBzZCk7CiAg
ICAgRVdLX1ZJRVdfUFJJVl9HRVQoc2QsIHByaXYpOwogCiAgICAgRXdrX1ZpZXdfUmVzb3VyY2Vf
SGFuZGxlcl9DYiBmdW5jdGlvbiA9IHByaXYtPmN1c3RvbV9yZXNvdXJjZV9oYW5kbGVyLmZ1bmN0
aW9uOwpAQCAtMzY3Myw5ICszNjczLDkgQEAgdm9pZCogZXdrX3ZpZXdfcHJvdG9jb2xfaGFuZGxl
cl9yZXNvdXJjZV9nZXQoRXZhc19PYmplY3QqIG8sIHNpemVfdCogYnl0ZXNSZWFkLAogICogQHBh
cmFtIHcgbmV3IGNvbnRlbnQgd2lkdGguCiAgKiBAcGFyYW0gaCBuZXcgY29udGVudCBoZWlnaHQu
CiAgKi8KLXZvaWQgZXdrX3ZpZXdfY29udGVudHNfc2l6ZV9jaGFuZ2VkKEV2YXNfT2JqZWN0KiBv
LCBpbnQgdywgaW50IGgpCit2b2lkIGV3a192aWV3X2NvbnRlbnRzX3NpemVfY2hhbmdlZChFdmFz
X09iamVjdCogZXdrVmlldywgaW50IHcsIGludCBoKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9P
Ul9SRVRVUk4obywgc2QpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywg
c2QpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGkpOwogICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGktPmNvbnRlbnRzX3Jlc2l6ZSk7CiAKQEAgLTM2
OTEsOSArMzY5MSw5IEBAIHZvaWQgZXdrX3ZpZXdfY29udGVudHNfc2l6ZV9jaGFuZ2VkKEV2YXNf
T2JqZWN0KiBvLCBpbnQgdywgaW50IGgpCiAgKgogICogQHJldHVybiBwYWdlIHNpemUuCiAgKi8K
LVdlYkNvcmU6OkZsb2F0UmVjdCBld2tfdmlld19wYWdlX3JlY3RfZ2V0KGNvbnN0IEV2YXNfT2Jq
ZWN0KiBvKQorV2ViQ29yZTo6RmxvYXRSZWN0IGV3a192aWV3X3BhZ2VfcmVjdF9nZXQoY29uc3Qg
RXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUKG8sIHNkKTsKKyAg
ICBFV0tfVklFV19TRF9HRVQoZXdrVmlldywgc2QpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUKHNk
LCBwcml2KTsKIAogICAgIFdlYkNvcmU6OkZyYW1lKiBtYWluX2ZyYW1lID0gcHJpdi0+cGFnZS0+
bWFpbkZyYW1lKCk7CkBAIC0zNzAxLDI1ICszNzAxLDI1IEBAIFdlYkNvcmU6OkZsb2F0UmVjdCBl
d2tfdmlld19wYWdlX3JlY3RfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQogfQogCiAjaWYgRU5B
QkxFKFRPVUNIX0VWRU5UUykKLXZvaWQgZXdrX3ZpZXdfbmVlZF90b3VjaF9ldmVudHNfc2V0KEV2
YXNfT2JqZWN0KiBvLCBib29sIG5lZWRlZCkKK3ZvaWQgZXdrX3ZpZXdfbmVlZF90b3VjaF9ldmVu
dHNfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBib29sIG5lZWRlZCkKIHsKLSAgICBFV0tfVklF
V19TRF9HRVQobywgc2QpOworICAgIEVXS19WSUVXX1NEX0dFVChld2tWaWV3LCBzZCk7CiAgICAg
RVdLX1ZJRVdfUFJJVl9HRVQoc2QsIHByaXYpOwogCiAgICAgcHJpdi0+ZmxhZ3MubmVlZF90b3Vj
aF9ldmVudHMgPSBuZWVkZWQ7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld19uZWVkX3RvdWNoX2V2
ZW50c19nZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCitFaW5hX0Jvb2wgZXdrX3ZpZXdfbmVlZF90
b3VjaF9ldmVudHNfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19W
SUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NE
X0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVXS19WSUVXX1BS
SVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgcmV0dXJuIHByaXYt
PmZsYWdzLm5lZWRfdG91Y2hfZXZlbnRzOwogfQogI2VuZGlmCiAKLUVpbmFfQm9vbCBld2tfdmll
d19tb2RlX3NldChFdmFzX09iamVjdCogbywgRXdrX1ZpZXdfTW9kZSB2aWV3X21vZGUpCitFaW5h
X0Jvb2wgZXdrX3ZpZXdfbW9kZV9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV3a19WaWV3X01v
ZGUgdmlld19tb2RlKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJ
TkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJ
TkFfRkFMU0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlO
QV9GQUxTRSk7CiAKICAgICBzd2l0Y2ggKHZpZXdfbW9kZSkgewpAQCAtMzc0NSwxMSArMzc0NSwx
MSBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfbW9kZV9zZXQoRXZhc19PYmplY3QqIG8sIEV3a19WaWV3
X01vZGUgdmlld19tb2RlKQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLUV3a19WaWV3X01v
ZGUgZXdrX3ZpZXdfbW9kZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCitFd2tfVmlld19Nb2Rl
IGV3a192aWV3X21vZGVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewogICAgIEV3
a19WaWV3X01vZGUgbW9kZSA9IEVXS19WSUVXX01PREVfV0lORE9XRUQ7CiAKLSAgICBFV0tfVklF
V19TRF9HRVQobywgc2QpOworICAgIEVXS19WSUVXX1NEX0dFVChld2tWaWV3LCBzZCk7CiAgICAg
aWYgKCFzZCkKICAgICAgICAgcmV0dXJuIG1vZGU7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVQoc2Qs
IHByaXYpOwpAQCAtMzc4NCw5ICszNzg0LDkgQEAgRXdrX1ZpZXdfTW9kZSBld2tfdmlld19tb2Rl
X2dldChjb25zdCBFdmFzX09iamVjdCogbykKICAqCiAgKiBFbWl0cyBzaWduYWw6ICJlZGl0b3Jj
bGllbnRzZWxlY3Rpb24sY2hhbmdlZCIgd2l0aCBubyBwYXJhbWV0ZXJzLgogICovCi12b2lkIGV3
a192aWV3X2VkaXRvcl9jbGllbnRfc2VsZWN0aW9uX2NoYW5nZWQoRXZhc19PYmplY3QqIG8pCit2
b2lkIGV3a192aWV3X2VkaXRvcl9jbGllbnRfc2VsZWN0aW9uX2NoYW5nZWQoRXZhc19PYmplY3Qq
IGV3a1ZpZXcpCiB7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChvLCAiZWRp
dG9yY2xpZW50LHNlbGVjdGlvbixjaGFuZ2VkIiwgMCk7CisgICAgZXZhc19vYmplY3Rfc21hcnRf
Y2FsbGJhY2tfY2FsbChld2tWaWV3LCAiZWRpdG9yY2xpZW50LHNlbGVjdGlvbixjaGFuZ2VkIiwg
MCk7CiB9CiAKIC8qKgpAQCAtMzc5Nyw3ICszNzk3LDcgQEAgdm9pZCBld2tfdmlld19lZGl0b3Jf
Y2xpZW50X3NlbGVjdGlvbl9jaGFuZ2VkKEV2YXNfT2JqZWN0KiBvKQogICoKICAqIEVtaXRzIHNp
Z25hbDogImVkaXRvcmNsaWVudCxjb250ZW50cyxjaGFuZ2VkIiB3aXRoIG5vIHBhcmFtZXRlcnMu
CiAgKi8KLXZvaWQgZXdrX3ZpZXdfZWRpdG9yX2NsaWVudF9jb250ZW50c19jaGFuZ2VkKEV2YXNf
T2JqZWN0KiBvKQordm9pZCBld2tfdmlld19lZGl0b3JfY2xpZW50X2NvbnRlbnRzX2NoYW5nZWQo
RXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tf
Y2FsbChvLCAiZWRpdG9yY2xpZW50LGNvbnRlbnRzLGNoYW5nZWQiLCAwKTsKKyAgICBldmFzX29i
amVjdF9zbWFydF9jYWxsYmFja19jYWxsKGV3a1ZpZXcsICJlZGl0b3JjbGllbnQsY29udGVudHMs
Y2hhbmdlZCIsIDApOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a192
aWV3X3NpbmdsZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXdfc2luZ2xlLmNw
cAppbmRleCA1YWQ2N2ZlLi45NTRjMzI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9l
d2svZXdrX3ZpZXdfc2luZ2xlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3Zp
ZXdfc2luZ2xlLmNwcApAQCAtOSw3ICs5LDcgQEAKIAogICAgIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICAgIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0g
ICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAgICBNRVJjaEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogCiAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpAQCAtMzEsMjUg
KzMxLDI1IEBACiAKIHN0YXRpYyBFd2tfVmlld19TbWFydF9DbGFzcyBfcGFyZW50X3NjID0gRVdL
X1ZJRVdfU01BUlRfQ0xBU1NfSU5JVF9OVUxMOwogCi1zdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc2lu
Z2xlX29uX2RlbCh2b2lkKiBkYXRhLCBFdmFzKiBlLCBFdmFzX09iamVjdCogbywgdm9pZCogZXZl
bnRfaW5mbykKK3N0YXRpYyB2b2lkIF9ld2tfdmlld19zaW5nbGVfb25fZGVsKHZvaWQqIGRhdGEs
IEV2YXMqIGV2ZW50VHlwZSwgRXZhc19PYmplY3QqIGNhbGxiYWNrLCB2b2lkKiBldmVudF9pbmZv
KQogewogICAgIEV2YXNfT2JqZWN0KiBjbGlwID0gKEV2YXNfT2JqZWN0KilkYXRhOwogICAgIGV2
YXNfb2JqZWN0X2RlbChjbGlwKTsKIH0KIAotc3RhdGljIHZvaWQgX2V3a192aWV3X3NpbmdsZV9z
bWFydF9hZGQoRXZhc19PYmplY3QqIG8pCitzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc2luZ2xlX3Nt
YXJ0X2FkZChFdmFzX09iamVjdCogZXdrU2luZ2xlKQogewogICAgIEV3a19WaWV3X1NtYXJ0X0Rh
dGEqIHNkOwogCi0gICAgX3BhcmVudF9zYy5zYy5hZGQobyk7CisgICAgX3BhcmVudF9zYy5zYy5h
ZGQoZXdrU2luZ2xlKTsKIAotICAgIHNkID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0
YSo+KGV2YXNfb2JqZWN0X3NtYXJ0X2RhdGFfZ2V0KG8pKTsKKyAgICBzZCA9IHN0YXRpY19jYXN0
PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihldmFzX29iamVjdF9zbWFydF9kYXRhX2dldChld2tTaW5n
bGUpKTsKICAgICBpZiAoIXNkKQogICAgICAgICByZXR1cm47CiAKICAgICBFdmFzX09iamVjdCog
Y2xpcCA9IGV2YXNfb2JqZWN0X3JlY3RhbmdsZV9hZGQoc2QtPmJhc2UuZXZhcyk7CiAgICAgZXZh
c19vYmplY3RfY2xpcF9zZXQoc2QtPmJhY2tpbmdfc3RvcmUsIGNsaXApOwotICAgIGV2YXNfb2Jq
ZWN0X3NtYXJ0X21lbWJlcl9hZGQoY2xpcCwgbyk7CisgICAgZXZhc19vYmplY3Rfc21hcnRfbWVt
YmVyX2FkZChjbGlwLCBld2tTaW5nbGUpOwogICAgIGV2YXNfb2JqZWN0X3Nob3coY2xpcCk7CiAK
ICAgICBldmFzX29iamVjdF9ldmVudF9jYWxsYmFja19hZGQKQEAgLTY1LDU1ICs2NSw1NSBAQCBz
dGF0aWMgRXZhc19PYmplY3QqIF9ld2tfdmlld19zaW5nbGVfc21hcnRfYmFja2luZ19zdG9yZV9h
ZGQoRXdrX1ZpZXdfU21hcnRfRGF0YQogICAgIHJldHVybiBiczsKIH0KIAotc3RhdGljIHZvaWQg
X2V3a192aWV3X3NpbmdsZV9zbWFydF9yZXNpemUoRXZhc19PYmplY3QqIG8sIEV2YXNfQ29vcmQg
dywgRXZhc19Db29yZCBoKQorc3RhdGljIHZvaWQgX2V3a192aWV3X3NpbmdsZV9zbWFydF9yZXNp
emUoRXZhc19PYmplY3QqIGV3a1NpbmdsZSwgRXZhc19Db29yZCB3aWR0aCwgRXZhc19Db29yZCBo
ZWlnaHQpCiB7Ci0gICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QgPSBzdGF0aWNfY2FzdDxFd2tf
Vmlld19TbWFydF9EYXRhKj4oZXZhc19vYmplY3Rfc21hcnRfZGF0YV9nZXQobykpOwotICAgIF9w
YXJlbnRfc2Muc2MucmVzaXplKG8sIHcsIGgpOworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNk
ID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGV2YXNfb2JqZWN0X3NtYXJ0X2Rh
dGFfZ2V0KGV3a1NpbmdsZSkpOworICAgIF9wYXJlbnRfc2Muc2MucmVzaXplKGV3a1NpbmdsZSwg
d2lkdGgsIGhlaWdodCk7CiAKICAgICBpZiAoIXNkKQogICAgICAgICByZXR1cm47CiAKICAgICAv
LyB0aGVzZSBzaG91bGQgYmUgcXVldWVkIGFuZCBwcm9jZXNzZWQgaW4gY2FsY3VsYXRlIGFzIHdl
bGwhCi0gICAgZXZhc19vYmplY3RfaW1hZ2Vfc2l6ZV9zZXQoc2QtPmJhY2tpbmdfc3RvcmUsIHcs
IGgpOworICAgIGV2YXNfb2JqZWN0X2ltYWdlX3NpemVfc2V0KHNkLT5iYWNraW5nX3N0b3JlLCB3
aWR0aCwgaGVpZ2h0KTsKICAgICBpZiAoc2QtPmFuaW1hdGVkX3pvb20uem9vbS5jdXJyZW50IDwg
MC4wMDAwMSkgewogICAgICAgICBFdmFzX09iamVjdCogY2xpcCA9IGV2YXNfb2JqZWN0X2NsaXBf
Z2V0KHNkLT5iYWNraW5nX3N0b3JlKTsKICAgICAgICAgRXZhc19Db29yZCB4LCB5LCBjdywgY2g7
Ci0gICAgICAgIGV2YXNfb2JqZWN0X2ltYWdlX2ZpbGxfc2V0KHNkLT5iYWNraW5nX3N0b3JlLCAw
LCAwLCB3LCBoKTsKKyAgICAgICAgZXZhc19vYmplY3RfaW1hZ2VfZmlsbF9zZXQoc2QtPmJhY2tp
bmdfc3RvcmUsIDAsIDAsIHdpZHRoLCBoZWlnaHQpOwogICAgICAgICBldmFzX29iamVjdF9nZW9t
ZXRyeV9nZXQoc2QtPmJhY2tpbmdfc3RvcmUsICZ4LCAmeSwgMCwgMCk7CiAgICAgICAgIGV2YXNf
b2JqZWN0X21vdmUoY2xpcCwgeCwgeSk7CiAgICAgICAgIGV3a19mcmFtZV9jb250ZW50c19zaXpl
X2dldChzZC0+bWFpbl9mcmFtZSwgJmN3LCAmY2gpOwotICAgICAgICBpZiAodyA+IGN3KQotICAg
ICAgICAgICAgdyA9IGN3OwotICAgICAgICBpZiAoaCA+IGNoKQotICAgICAgICAgICAgaCA9IGNo
OwotICAgICAgICBldmFzX29iamVjdF9yZXNpemUoY2xpcCwgdywgaCk7CisgICAgICAgIGlmICh3
aWR0aCA+IGN3KQorICAgICAgICAgICAgd2lkdGggPSBjdzsKKyAgICAgICAgaWYgKGhlaWdodCA+
IGNoKQorICAgICAgICAgICAgaGVpZ2h0ID0gY2g7CisgICAgICAgIGV2YXNfb2JqZWN0X3Jlc2l6
ZShjbGlwLCB3aWR0aCwgaGVpZ2h0KTsKICAgICB9CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBf
ZXdrX3ZpZXdfNGJfbW92ZV9yZWdpb25fdXAodWludDMyX3QqIGltYWdlLCBzaXplX3Qgcm93cywg
c2l6ZV90IHgsIHNpemVfdCB5LCBzaXplX3Qgdywgc2l6ZV90IGgsIHNpemVfdCByb3dzaXplKQor
c3RhdGljIGlubGluZSB2b2lkIF9ld2tfdmlld180Yl9tb3ZlX3JlZ2lvbl91cCh1aW50MzJfdCog
aW1hZ2UsIHNpemVfdCByb3dzLCBzaXplX3QgeCwgc2l6ZV90IHksIHNpemVfdCB3aWR0aCwgc2l6
ZV90IGhlaWdodCwgc2l6ZV90IHJvd3NpemUpCiB7CiAgICAgdWludDMyX3QqIHNyYzsKICAgICB1
aW50MzJfdCogZHN0OwogCiAgICAgZHN0ID0gaW1hZ2UgKyB4ICsgeSAqIHJvd3NpemU7CiAgICAg
c3JjID0gZHN0ICsgcm93cyAqIHJvd3NpemU7Ci0gICAgaCAtPSByb3dzOworICAgIGhlaWdodCAt
PSByb3dzOwogCi0gICAgZm9yICg7IGggPiAwOyBoLS0sIGRzdCArPSByb3dzaXplLCBzcmMgKz0g
cm93c2l6ZSkKLSAgICAgICAgbWVtY3B5KGRzdCwgc3JjLCB3ICogNCk7CisgICAgZm9yICg7IGhl
aWdodCA+IDA7IGhlaWdodC0tLCBkc3QgKz0gcm93c2l6ZSwgc3JjICs9IHJvd3NpemUpCisgICAg
ICAgIG1lbWNweShkc3QsIHNyYywgd2lkdGggKiA0KTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lk
IF9ld2tfdmlld180Yl9tb3ZlX3JlZ2lvbl9kb3duKHVpbnQzMl90KiBpbWFnZSwgc2l6ZV90IHJv
d3MsIHNpemVfdCB4LCBzaXplX3QgeSwgc2l6ZV90IHcsIHNpemVfdCBoLCBzaXplX3Qgcm93c2l6
ZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3ZpZXdfNGJfbW92ZV9yZWdpb25fZG93bih1aW50
MzJfdCogaW1hZ2UsIHNpemVfdCByb3dzLCBzaXplX3QgeCwgc2l6ZV90IHksIHNpemVfdCB3aWR0
aCwgc2l6ZV90IGhlaWdodCwgc2l6ZV90IHJvd3NpemUpCiB7CiAgICAgdWludDMyX3QqIHNyYzsK
ICAgICB1aW50MzJfdCogZHN0OwogCi0gICAgaCAtPSByb3dzOwotICAgIHNyYyA9IGltYWdlICsg
eCArICh5ICsgaCAtIDEpICogcm93c2l6ZTsKKyAgICBoZWlnaHQgLT0gcm93czsKKyAgICBzcmMg
PSBpbWFnZSArIHggKyAoeSArIGhlaWdodCAtIDEpICogcm93c2l6ZTsKICAgICBkc3QgPSBzcmMg
KyByb3dzICogcm93c2l6ZTsKIAotICAgIGZvciAoOyBoID4gMDsgaC0tLCBkc3QgLT0gcm93c2l6
ZSwgc3JjIC09IHJvd3NpemUpCi0gICAgICAgIG1lbWNweShkc3QsIHNyYywgdyAqIDQpOworICAg
IGZvciAoOyBoZWlnaHQgPiAwOyBoZWlnaHQtLSwgZHN0IC09IHJvd3NpemUsIHNyYyAtPSByb3dz
aXplKQorICAgICAgICBtZW1jcHkoZHN0LCBzcmMsIHdpZHRoICogNCk7CiB9CiAKIHN0YXRpYyBp
bmxpbmUgdm9pZCBfZXdrX3ZpZXdfNGJfbW92ZV9saW5lX2xlZnQodWludDMyX3QqIGRzdCwgY29u
c3QgdWludDMyX3QqIHNyYywgc2l6ZV90IGNvdW50KQpAQCAtMTM2LDY5ICsxMzYsNjkgQEAgc3Rh
dGljIGlubGluZSB2b2lkIF9ld2tfdmlld180Yl9tb3ZlX2xpbmVfcmlnaHQodWludDMyX3QqIGRz
dCwgdWludDMyX3QqIHNyYywgc2kKICAgICAgICAgKmRzdCA9ICpzcmM7CiB9CiAKLXN0YXRpYyBp
bmxpbmUgdm9pZCBfZXdrX3ZpZXdfNGJfbW92ZV9yZWdpb25fbGVmdCh1aW50MzJfdCogaW1hZ2Us
IHNpemVfdCBjb2xzLCBzaXplX3QgeCwgc2l6ZV90IHksIHNpemVfdCB3LCBzaXplX3QgaCwgc2l6
ZV90IHJvd3NpemUpCitzdGF0aWMgaW5saW5lIHZvaWQgX2V3a192aWV3XzRiX21vdmVfcmVnaW9u
X2xlZnQodWludDMyX3QqIGltYWdlLCBzaXplX3QgY29scywgc2l6ZV90IHgsIHNpemVfdCB5LCBz
aXplX3Qgd2lkdGgsIHNpemVfdCBoZWlnaHQsIHNpemVfdCByb3dzaXplKQogewogICAgIHVpbnQz
Ml90KiBzcmM7CiAgICAgdWludDMyX3QqIGRzdDsKIAogICAgIGRzdCA9IGltYWdlICsgeCArIHkg
KiByb3dzaXplOwogICAgIHNyYyA9IGRzdCArIGNvbHM7Ci0gICAgdyAtPSBjb2xzOworICAgIHdp
ZHRoIC09IGNvbHM7CiAKLSAgICBmb3IgKDsgaCA+IDA7IGgtLSwgZHN0ICs9IHJvd3NpemUsIHNy
YyArPSByb3dzaXplKQotICAgICAgICBfZXdrX3ZpZXdfNGJfbW92ZV9saW5lX2xlZnQoZHN0LCBz
cmMsIHcpOworICAgIGZvciAoOyBoZWlnaHQgPiAwOyBoZWlnaHQtLSwgZHN0ICs9IHJvd3NpemUs
IHNyYyArPSByb3dzaXplKQorICAgICAgICBfZXdrX3ZpZXdfNGJfbW92ZV9saW5lX2xlZnQoZHN0
LCBzcmMsIHdpZHRoKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdmlld180Yl9tb3Zl
X3JlZ2lvbl9yaWdodCh1aW50MzJfdCogaW1hZ2UsIHNpemVfdCBjb2xzLCBzaXplX3QgeCwgc2l6
ZV90IHksIHNpemVfdCB3LCBzaXplX3QgaCwgc2l6ZV90IHJvd3NpemUpCitzdGF0aWMgaW5saW5l
IHZvaWQgX2V3a192aWV3XzRiX21vdmVfcmVnaW9uX3JpZ2h0KHVpbnQzMl90KiBpbWFnZSwgc2l6
ZV90IGNvbHMsIHNpemVfdCB4LCBzaXplX3QgeSwgc2l6ZV90IHdpZHRoLCBzaXplX3QgaGVpZ2h0
LCBzaXplX3Qgcm93c2l6ZSkKIHsKICAgICB1aW50MzJfdCogc3JjOwogICAgIHVpbnQzMl90KiBk
c3Q7CiAKLSAgICB3IC09IGNvbHM7Ci0gICAgc3JjID0gaW1hZ2UgKyAoeCArIHcgLSAxKSArIHkg
KiByb3dzaXplOworICAgIHdpZHRoIC09IGNvbHM7CisgICAgc3JjID0gaW1hZ2UgKyAoeCArIHdp
ZHRoIC0gMSkgKyB5ICogcm93c2l6ZTsKICAgICBkc3QgPSBzcmMgKyBjb2xzOwogCi0gICAgZm9y
ICg7IGggPiAwOyBoLS0sIGRzdCArPSByb3dzaXplLCBzcmMgKz0gcm93c2l6ZSkKLSAgICAgICAg
X2V3a192aWV3XzRiX21vdmVfbGluZV9yaWdodChkc3QsIHNyYywgdyk7CisgICAgZm9yICg7IGhl
aWdodCA+IDA7IGhlaWdodC0tLCBkc3QgKz0gcm93c2l6ZSwgc3JjICs9IHJvd3NpemUpCisgICAg
ICAgIF9ld2tfdmlld180Yl9tb3ZlX2xpbmVfcmlnaHQoZHN0LCBzcmMsIHdpZHRoKTsKIH0KIAog
LyogY2F0Y2gtYWxsIGZ1bmN0aW9uLCBub3QgYXMgb3B0aW1pemVkIGFzIHRoZSBvdGhlcnMsIGJ1
dCBkb2VzIHRoZSB3b3JrLiAqLwotc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdmlld180Yl9tb3Zl
X3JlZ2lvbih1aW50MzJfdCogaW1hZ2UsIGludCBkeCwgaW50IGR5LCBzaXplX3QgeCwgc2l6ZV90
IHksIHNpemVfdCB3LCBzaXplX3QgaCwgc2l6ZV90IHJvd3NpemUpCitzdGF0aWMgaW5saW5lIHZv
aWQgX2V3a192aWV3XzRiX21vdmVfcmVnaW9uKHVpbnQzMl90KiBpbWFnZSwgaW50IGR4LCBpbnQg
ZHksIHNpemVfdCB4LCBzaXplX3QgeSwgc2l6ZV90IHdpZHRoLCBzaXplX3QgaGVpZ2h0LCBzaXpl
X3Qgcm93c2l6ZSkKIHsKICAgICB1aW50MzJfdCogc3JjOwogICAgIHVpbnQzMl90KiBkc3Q7CiAK
ICAgICBpZiAoZHkgPCAwKSB7Ci0gICAgICAgIGggKz0gZHk7CisgICAgICAgIGhlaWdodCArPSBk
eTsKICAgICAgICAgZHN0ID0gaW1hZ2UgKyB4ICsgeSAqIHJvd3NpemU7CiAgICAgICAgIHNyYyA9
IGRzdCAtIGR5ICogcm93c2l6ZTsKICAgICAgICAgaWYgKGR4IDw9IDApIHsKLSAgICAgICAgICAg
IHcgKz0gZHg7CisgICAgICAgICAgICB3aWR0aCArPSBkeDsKICAgICAgICAgICAgIHNyYyAtPSBk
eDsKLSAgICAgICAgICAgIGZvciAoOyBoID4gMDsgaC0tLCBkc3QgKz0gcm93c2l6ZSwgc3JjICs9
IHJvd3NpemUpCi0gICAgICAgICAgICAgICAgX2V3a192aWV3XzRiX21vdmVfbGluZV9sZWZ0KGRz
dCwgc3JjLCB3KTsKKyAgICAgICAgICAgIGZvciAoOyBoZWlnaHQgPiAwOyBoZWlnaHQtLSwgZHN0
ICs9IHJvd3NpemUsIHNyYyArPSByb3dzaXplKQorICAgICAgICAgICAgICAgIF9ld2tfdmlld180
Yl9tb3ZlX2xpbmVfbGVmdChkc3QsIHNyYywgd2lkdGgpOwogICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgdyAtPSBkeDsKLSAgICAgICAgICAgIHNyYyArPSB3IC0gMTsKLSAgICAgICAgICAg
IGRzdCArPSB3ICsgZHggLTE7Ci0gICAgICAgICAgICBmb3IgKDsgaCA+IDA7IGgtLSwgZHN0ICs9
IHJvd3NpemUsIHNyYyArPSByb3dzaXplKQotICAgICAgICAgICAgICAgIF9ld2tfdmlld180Yl9t
b3ZlX2xpbmVfcmlnaHQoZHN0LCBzcmMsIHcpOworICAgICAgICAgICAgd2lkdGggLT0gZHg7Cisg
ICAgICAgICAgICBzcmMgKz0gd2lkdGggLSAxOworICAgICAgICAgICAgZHN0ICs9IHdpZHRoICsg
ZHggLTE7CisgICAgICAgICAgICBmb3IgKDsgaGVpZ2h0ID4gMDsgaGVpZ2h0LS0sIGRzdCArPSBy
b3dzaXplLCBzcmMgKz0gcm93c2l6ZSkKKyAgICAgICAgICAgICAgICBfZXdrX3ZpZXdfNGJfbW92
ZV9saW5lX3JpZ2h0KGRzdCwgc3JjLCB3aWR0aCk7CiAgICAgICAgIH0KICAgICB9IGVsc2Ugewot
ICAgICAgICBoIC09IGR5OwotICAgICAgICBzcmMgPSBpbWFnZSArIHggKyAoeSArIGggLSAxKSAq
IHJvd3NpemU7CisgICAgICAgIGhlaWdodCAtPSBkeTsKKyAgICAgICAgc3JjID0gaW1hZ2UgKyB4
ICsgKHkgKyBoZWlnaHQgLSAxKSAqIHJvd3NpemU7CiAgICAgICAgIGRzdCA9IHNyYyArIGR5ICog
cm93c2l6ZTsKICAgICAgICAgaWYgKGR4IDw9IDApIHsKLSAgICAgICAgICAgIHcgKz0gZHg7Cisg
ICAgICAgICAgICB3aWR0aCArPSBkeDsKICAgICAgICAgICAgIHNyYyAtPSBkeDsKLSAgICAgICAg
ICAgIGZvciAoOyBoID4gMDsgaC0tLCBkc3QgLT0gcm93c2l6ZSwgc3JjIC09IHJvd3NpemUpCi0g
ICAgICAgICAgICAgICAgX2V3a192aWV3XzRiX21vdmVfbGluZV9sZWZ0KGRzdCwgc3JjLCB3KTsK
KyAgICAgICAgICAgIGZvciAoOyBoZWlnaHQgPiAwOyBoZWlnaHQtLSwgZHN0IC09IHJvd3NpemUs
IHNyYyAtPSByb3dzaXplKQorICAgICAgICAgICAgICAgIF9ld2tfdmlld180Yl9tb3ZlX2xpbmVf
bGVmdChkc3QsIHNyYywgd2lkdGgpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdyAt
PSBkeDsKLSAgICAgICAgICAgIHNyYyArPSB3IC0gMTsKLSAgICAgICAgICAgIGRzdCArPSB3ICsg
ZHggLSAxOwotICAgICAgICAgICAgZm9yICg7IGggPiAwOyBoLS0sIGRzdCAtPSByb3dzaXplLCBz
cmMgLT0gcm93c2l6ZSkKLSAgICAgICAgICAgICAgICBfZXdrX3ZpZXdfNGJfbW92ZV9saW5lX3Jp
Z2h0KGRzdCwgc3JjLCB3KTsKKyAgICAgICAgICAgIHdpZHRoIC09IGR4OworICAgICAgICAgICAg
c3JjICs9IHdpZHRoIC0gMTsKKyAgICAgICAgICAgIGRzdCArPSB3aWR0aCArIGR4IC0gMTsKKyAg
ICAgICAgICAgIGZvciAoOyBoZWlnaHQgPiAwOyBoZWlnaHQtLSwgZHN0IC09IHJvd3NpemUsIHNy
YyAtPSByb3dzaXplKQorICAgICAgICAgICAgICAgIF9ld2tfdmlld180Yl9tb3ZlX2xpbmVfcmln
aHQoZHN0LCBzcmMsIHdpZHRoKTsKICAgICAgICAgfQogICAgIH0KIH0KQEAgLTUyNCw5ICs1MjQs
OSBAQCBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0X3pvb21fd2Vha19zbW9vdGhf
c2NhbGVfc2V0KEV3a19WaWV3X1NtYXJ0X0RhdAogICAgIGV2YXNfb2JqZWN0X2ltYWdlX3Ntb290
aF9zY2FsZV9zZXQoc2QtPmJhY2tpbmdfc3RvcmUsIHNtb290aF9zY2FsZSk7CiB9CiAKLXN0YXRp
YyB2b2lkIF9ld2tfdmlld19zaW5nbGVfc21hcnRfYmdfY29sb3Jfc2V0KEV3a19WaWV3X1NtYXJ0
X0RhdGEqIHNkLCB1bnNpZ25lZCBjaGFyIHIsIHVuc2lnbmVkIGNoYXIgZywgdW5zaWduZWQgY2hh
ciBiLCB1bnNpZ25lZCBjaGFyIGEpCitzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0
X2JnX2NvbG9yX3NldChFd2tfVmlld19TbWFydF9EYXRhKiBzZCwgdW5zaWduZWQgY2hhciByZWQs
IHVuc2lnbmVkIGNoYXIgZ3JlZW4sIHVuc2lnbmVkIGNoYXIgYmx1ZSwgdW5zaWduZWQgY2hhciBh
bHBoYSkKIHsKLSAgICBldmFzX29iamVjdF9pbWFnZV9hbHBoYV9zZXQoc2QtPmJhY2tpbmdfc3Rv
cmUsIGEgPCAyNTUpOworICAgIGV2YXNfb2JqZWN0X2ltYWdlX2FscGhhX3NldChzZC0+YmFja2lu
Z19zdG9yZSwgYWxwaGEgPCAyNTUpOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2luZ2xlX3Nt
YXJ0X3NldChFd2tfVmlld19TbWFydF9DbGFzcyogYXBpKQpAQCAtNTYzLDcgKzU2Myw3IEBAIHN0
YXRpYyBpbmxpbmUgRXZhc19TbWFydCogX2V3a192aWV3X3NpbmdsZV9zbWFydF9jbGFzc19uZXco
dm9pZCkKICAgICByZXR1cm4gc21hcnQ7CiB9CiAKLUV2YXNfT2JqZWN0KiBld2tfdmlld19zaW5n
bGVfYWRkKEV2YXMqIGUpCitFdmFzX09iamVjdCogZXdrX3ZpZXdfc2luZ2xlX2FkZChFdmFzKiBj
YW52YXMpCiB7Ci0gICAgcmV0dXJuIGV2YXNfb2JqZWN0X3NtYXJ0X2FkZChlLCBfZXdrX3ZpZXdf
c2luZ2xlX3NtYXJ0X2NsYXNzX25ldygpKTsKKyAgICByZXR1cm4gZXZhc19vYmplY3Rfc21hcnRf
YWRkKGNhbnZhcywgX2V3a192aWV3X3NpbmdsZV9zbWFydF9jbGFzc19uZXcoKSk7CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXdfdGlsZWQuY3BwIGIvU291cmNl
L1dlYktpdC9lZmwvZXdrL2V3a192aWV3X3RpbGVkLmNwcAppbmRleCBmODdmNDhiLi4zYmI2ZjM1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXdfdGlsZWQuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlld190aWxlZC5jcHAKQEAgLTMwLDE1ICsz
MCwxNSBAQAogCiBzdGF0aWMgRXdrX1ZpZXdfU21hcnRfQ2xhc3MgX3BhcmVudF9zYyA9IEVXS19W
SUVXX1NNQVJUX0NMQVNTX0lOSVRfTlVMTDsKIAotc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdf
dGlsZWRfcmVuZGVyX2NiKHZvaWQqIGRhdGEsIEV3a19UaWxlKiB0LCBjb25zdCBFaW5hX1JlY3Rh
bmdsZSogYXJlYSkKK3N0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3RpbGVkX3JlbmRlcl9jYih2
b2lkKiBkYXRhLCBFd2tfVGlsZSogdGlsZSwgY29uc3QgRWluYV9SZWN0YW5nbGUqIGFyZWEpCiB7
CiAgICAgRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKiBwcml2ID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdf
UHJpdmF0ZV9EYXRhKj4oZGF0YSk7Ci0gICAgRWluYV9SZWN0YW5nbGUgciA9IHthcmVhLT54ICsg
dC0+eCwgYXJlYS0+eSArIHQtPnksIGFyZWEtPncsIGFyZWEtPmh9OworICAgIEVpbmFfUmVjdGFu
Z2xlIHJlY3QgPSB7YXJlYS0+eCArIHRpbGUtPngsIGFyZWEtPnkgKyB0aWxlLT55LCBhcmVhLT53
LCBhcmVhLT5ofTsKIAotICAgIHJldHVybiBld2tfdmlld19wYWludF9jb250ZW50cyhwcml2LCB0
LT5jYWlybywgJnIpOworICAgIHJldHVybiBld2tfdmlld19wYWludF9jb250ZW50cyhwcml2LCB0
aWxlLT5jYWlybywgJnJlY3QpOwogfQogCi1zdGF0aWMgdm9pZCogX2V3a192aWV3X3RpbGVkX3Vw
ZGF0ZXNfcHJvY2Vzc19wcmUodm9pZCogZGF0YSwgRXZhc19PYmplY3QqIG8pCitzdGF0aWMgdm9p
ZCogX2V3a192aWV3X3RpbGVkX3VwZGF0ZXNfcHJvY2Vzc19wcmUodm9pZCogZGF0YSwgRXZhc19P
YmplY3QqIGV3a1RpbGUpCiB7CiAgICAgRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKiBwcml2ID0gc3Rh
dGljX2Nhc3Q8RXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKj4oZGF0YSk7CiAgICAgZXdrX3ZpZXdfbGF5
b3V0X2lmX25lZWRlZF9yZWN1cnNpdmUocHJpdik7CkBAIC01Niw3ICs1Niw3IEBAIHN0YXRpYyBF
dmFzX09iamVjdCogX2V3a192aWV3X3RpbGVkX3NtYXJ0X2JhY2tpbmdfc3RvcmVfYWRkKEV3a19W
aWV3X1NtYXJ0X0RhdGEqCiB9CiAKIHN0YXRpYyB2b2lkCi1fZXdrX3ZpZXdfdGlsZWRfY29udGVu
dHNfc2l6ZV9jaGFuZ2VkX2NiKHZvaWQqIGRhdGEsIEV2YXNfT2JqZWN0KiBvLCB2b2lkKiBldmVu
dF9pbmZvKQorX2V3a192aWV3X3RpbGVkX2NvbnRlbnRzX3NpemVfY2hhbmdlZF9jYih2b2lkKiBk
YXRhLCBFdmFzX09iamVjdCogZXdrVGlsZSwgdm9pZCogZXZlbnRfaW5mbykKIHsKICAgICBFdmFz
X0Nvb3JkKiBzaXplID0gc3RhdGljX2Nhc3Q8RXZhc19Db29yZCo+KGV2ZW50X2luZm8pOwogICAg
IEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0
YSo+KGRhdGEpOwpAQCAtNjUsMTMgKzY1LDEzIEBAIF9ld2tfdmlld190aWxlZF9jb250ZW50c19z
aXplX2NoYW5nZWRfY2Iodm9pZCogZGF0YSwgRXZhc19PYmplY3QqIG8sIHZvaWQqIGV2ZW50CiAg
ICAgICAgIChzZC0+YmFja2luZ19zdG9yZSwgc2l6ZVswXSwgc2l6ZVsxXSk7CiB9CiAKLXN0YXRp
YyB2b2lkIF9ld2tfdmlld190aWxlZF9zbWFydF9hZGQoRXZhc19PYmplY3QqIG8pCitzdGF0aWMg
dm9pZCBfZXdrX3ZpZXdfdGlsZWRfc21hcnRfYWRkKEV2YXNfT2JqZWN0KiBld2tUaWxlKQogewog
ICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkOwogCi0gICAgX3BhcmVudF9zYy5zYy5hZGQobyk7
CisgICAgX3BhcmVudF9zYy5zYy5hZGQoZXdrVGlsZSk7CiAKLSAgICBzZCA9IHN0YXRpY19jYXN0
PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihldmFzX29iamVjdF9zbWFydF9kYXRhX2dldChvKSk7Cisg
ICAgc2QgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZXZhc19vYmplY3Rfc21h
cnRfZGF0YV9nZXQoZXdrVGlsZSkpOwogICAgIGlmICghc2QpCiAgICAgICAgIHJldHVybjsKIApA
QCAtMjczLDE2ICsyNzMsMTYgQEAgRXZhc19PYmplY3QqIGV3a192aWV3X3RpbGVkX2FkZChFdmFz
KiBlKQogICAgIHJldHVybiBldmFzX29iamVjdF9zbWFydF9hZGQoZSwgX2V3a192aWV3X3RpbGVk
X3NtYXJ0X2NsYXNzX25ldygpKTsKIH0KIAotRXdrX1RpbGVfVW51c2VkX0NhY2hlKiBld2tfdmll
d190aWxlZF91bnVzZWRfY2FjaGVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQorRXdrX1RpbGVf
VW51c2VkX0NhY2hlKiBld2tfdmlld190aWxlZF91bnVzZWRfY2FjaGVfZ2V0KGNvbnN0IEV2YXNf
T2JqZWN0KiBld2tUaWxlKQogewotICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0gZXdrX3Zp
ZXdfc21hcnRfZGF0YV9nZXQobyk7CisgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QgPSBld2tf
dmlld19zbWFydF9kYXRhX2dldChld2tUaWxlKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTl9WQUwoc2QsIDApOwogICAgIHJldHVybiBld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxl
X3VudXNlZF9jYWNoZV9nZXQoc2QtPmJhY2tpbmdfc3RvcmUpOwogfQogCi12b2lkIGV3a192aWV3
X3RpbGVkX3VudXNlZF9jYWNoZV9zZXQoRXZhc19PYmplY3QqIG8sIEV3a19UaWxlX1VudXNlZF9D
YWNoZSogY2FjaGUpCit2b2lkIGV3a192aWV3X3RpbGVkX3VudXNlZF9jYWNoZV9zZXQoRXZhc19P
YmplY3QqIGV3a1RpbGUsIEV3a19UaWxlX1VudXNlZF9DYWNoZSogY2FjaGUpCiB7Ci0gICAgRXdr
X1ZpZXdfU21hcnRfRGF0YSogc2QgPSBld2tfdmlld19zbWFydF9kYXRhX2dldChvKTsKKyAgICBF
d2tfVmlld19TbWFydF9EYXRhKiBzZCA9IGV3a192aWV3X3NtYXJ0X2RhdGFfZ2V0KGV3a1RpbGUp
OwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkKTsKICAgICBld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV90aWxlX3VudXNlZF9jYWNoZV9zZXQoc2QtPmJhY2tpbmdfc3RvcmUsIGNhY2hl
KTsKIH0K
</data>
<flag name="commit-queue"
          id="107244"
          type_id="3"
          status="-"
          setter="gyuyoung.kim"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110118</attachid>
            <date>2011-10-07 03:10:18 -0700</date>
            <delta_ts>2011-10-07 21:17:11 -0700</delta_ts>
            <desc>Prototype</desc>
            <filename>patch-prototype.patch</filename>
            <type>text/plain</type>
            <size>347468</size>
            <attacher name="Gyuyoung Kim">gyuyoung.kim</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfY29udGV4dG1lbnUuY3BwIGIv
U291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19jb250ZXh0bWVudS5jcHAKaW5kZXggYWExNjE5Zi4u
NjIxYzc5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19jb250ZXh0bWVu
dS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19jb250ZXh0bWVudS5jcHAKQEAg
LTkyLDExICs5MiwxMSBAQCBFaW5hX0Jvb2wgZXdrX2NvbnRleHRfbWVudV9kZXN0cm95KEV3a19D
b250ZXh0X01lbnUqIG1lbnUpCiAjZW5kaWYKIH0KIAotY29uc3QgRWluYV9MaXN0KiBld2tfY29u
dGV4dF9tZW51X2l0ZW1fbGlzdF9nZXQoY29uc3QgRXdrX0NvbnRleHRfTWVudSogbykKK2NvbnN0
IEVpbmFfTGlzdCogZXdrX2NvbnRleHRfbWVudV9pdGVtX2xpc3RfZ2V0KGNvbnN0IEV3a19Db250
ZXh0X01lbnUqIG1lbnUpCiB7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKG8s
IDApOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChtZW51LCAwKTsKIAotICAg
IHJldHVybiBvLT5pdGVtczsKKyAgICByZXR1cm4gbWVudS0+aXRlbXM7CiB9CiAKIEV3a19Db250
ZXh0X01lbnVfSXRlbSogZXdrX2NvbnRleHRfbWVudV9pdGVtX25ldyhFd2tfQ29udGV4dF9NZW51
X0l0ZW1fVHlwZSB0eXBlLApAQCAtMTQyLDY4ICsxNDIsNjggQEAgdm9pZCBld2tfY29udGV4dF9t
ZW51X2l0ZW1fZnJlZShFd2tfQ29udGV4dF9NZW51X0l0ZW0qIGl0ZW0pCiAgICAgZnJlZShpdGVt
KTsKIH0KIAotRXdrX0NvbnRleHRfTWVudV9JdGVtX1R5cGUgZXdrX2NvbnRleHRfbWVudV9pdGVt
X3R5cGVfZ2V0KGNvbnN0IEV3a19Db250ZXh0X01lbnVfSXRlbSogbykKK0V3a19Db250ZXh0X01l
bnVfSXRlbV9UeXBlIGV3a19jb250ZXh0X21lbnVfaXRlbV90eXBlX2dldChjb25zdCBFd2tfQ29u
dGV4dF9NZW51X0l0ZW0qIGl0ZW0pCiB7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5f
VkFMKG8sIEVXS19BQ1RJT05fVFlQRSk7Ci0gICAgcmV0dXJuIG8tPnR5cGU7CisgICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGl0ZW0sIEVXS19BQ1RJT05fVFlQRSk7CisgICAgcmV0
dXJuIGl0ZW0tPnR5cGU7CiB9CiAKLUVpbmFfQm9vbCBld2tfY29udGV4dF9tZW51X2l0ZW1fdHlw
ZV9zZXQoRXdrX0NvbnRleHRfTWVudV9JdGVtKiBvLCBFd2tfQ29udGV4dF9NZW51X0l0ZW1fVHlw
ZSB0eXBlKQorRWluYV9Cb29sIGV3a19jb250ZXh0X21lbnVfaXRlbV90eXBlX3NldChFd2tfQ29u
dGV4dF9NZW51X0l0ZW0qIGl0ZW0sIEV3a19Db250ZXh0X01lbnVfSXRlbV9UeXBlIHR5cGUpCiB7
Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKG8sIEVJTkFfRkFMU0UpOwotICAg
IG8tPnR5cGUgPSB0eXBlOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChpdGVt
LCBFSU5BX0ZBTFNFKTsKKyAgICBpdGVtLT50eXBlID0gdHlwZTsKICAgICByZXR1cm4gRUlOQV9U
UlVFOwogfQogCi1Fd2tfQ29udGV4dF9NZW51X0FjdGlvbiBld2tfY29udGV4dF9tZW51X2l0ZW1f
YWN0aW9uX2dldChjb25zdCBFd2tfQ29udGV4dF9NZW51X0l0ZW0qIG8pCitFd2tfQ29udGV4dF9N
ZW51X0FjdGlvbiBld2tfY29udGV4dF9tZW51X2l0ZW1fYWN0aW9uX2dldChjb25zdCBFd2tfQ29u
dGV4dF9NZW51X0l0ZW0qIGl0ZW0pCiB7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5f
VkFMKG8sIEVXS19DT05URVhUX01FTlVfSVRFTV9UQUdfTk9fQUNUSU9OKTsKLSAgICByZXR1cm4g
by0+YWN0aW9uOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChpdGVtLCBFV0tf
Q09OVEVYVF9NRU5VX0lURU1fVEFHX05PX0FDVElPTik7CisgICAgcmV0dXJuIGl0ZW0tPmFjdGlv
bjsKIH0KIAotRWluYV9Cb29sIGV3a19jb250ZXh0X21lbnVfaXRlbV9hY3Rpb25fc2V0KEV3a19D
b250ZXh0X01lbnVfSXRlbSogbywgRXdrX0NvbnRleHRfTWVudV9BY3Rpb24gYWN0aW9uKQorRWlu
YV9Cb29sIGV3a19jb250ZXh0X21lbnVfaXRlbV9hY3Rpb25fc2V0KEV3a19Db250ZXh0X01lbnVf
SXRlbSogaXRlbSwgRXdrX0NvbnRleHRfTWVudV9BY3Rpb24gYWN0aW9uKQogewotICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChvLCBFSU5BX0ZBTFNFKTsKLSAgICBvLT5hY3Rpb24g
PSBhY3Rpb247CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGl0ZW0sIEVJTkFf
RkFMU0UpOworICAgIGl0ZW0tPmFjdGlvbiA9IGFjdGlvbjsKICAgICByZXR1cm4gRUlOQV9UUlVF
OwogfQogCi1jb25zdCBjaGFyKiBld2tfY29udGV4dF9tZW51X2l0ZW1fdGl0bGVfZ2V0KGNvbnN0
IEV3a19Db250ZXh0X01lbnVfSXRlbSogbykKK2NvbnN0IGNoYXIqIGV3a19jb250ZXh0X21lbnVf
aXRlbV90aXRsZV9nZXQoY29uc3QgRXdrX0NvbnRleHRfTWVudV9JdGVtKiBpdGVtKQogewotICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChvLCAwKTsKLSAgICByZXR1cm4gby0+dGl0
bGU7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGl0ZW0sIDApOworICAgIHJl
dHVybiBpdGVtLT50aXRsZTsKIH0KIAotY29uc3QgY2hhciogZXdrX2NvbnRleHRfbWVudV9pdGVt
X3RpdGxlX3NldChFd2tfQ29udGV4dF9NZW51X0l0ZW0qIG8sIGNvbnN0IGNoYXIqIHRpdGxlKQor
Y29uc3QgY2hhciogZXdrX2NvbnRleHRfbWVudV9pdGVtX3RpdGxlX3NldChFd2tfQ29udGV4dF9N
ZW51X0l0ZW0qIGl0ZW0sIGNvbnN0IGNoYXIqIHRpdGxlKQogewotICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOX1ZBTChvLCAwKTsKLSAgICBlaW5hX3N0cmluZ3NoYXJlX3JlcGxhY2UoJm8t
PnRpdGxlLCB0aXRsZSk7Ci0gICAgcmV0dXJuIG8tPnRpdGxlOworICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOX1ZBTChpdGVtLCAwKTsKKyAgICBlaW5hX3N0cmluZ3NoYXJlX3JlcGxhY2Uo
Jml0ZW0tPnRpdGxlLCB0aXRsZSk7CisgICAgcmV0dXJuIGl0ZW0tPnRpdGxlOwogfQogCi1FaW5h
X0Jvb2wgZXdrX2NvbnRleHRfbWVudV9pdGVtX2NoZWNrZWRfZ2V0KGNvbnN0IEV3a19Db250ZXh0
X01lbnVfSXRlbSogbykKK0VpbmFfQm9vbCBld2tfY29udGV4dF9tZW51X2l0ZW1fY2hlY2tlZF9n
ZXQoY29uc3QgRXdrX0NvbnRleHRfTWVudV9JdGVtKiBpdGVtKQogewotICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOX1ZBTChvLCBFSU5BX0ZBTFNFKTsKLSAgICByZXR1cm4gby0+Y2hlY2tl
ZDsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoaXRlbSwgRUlOQV9GQUxTRSk7
CisgICAgcmV0dXJuIGl0ZW0tPmNoZWNrZWQ7CiB9CiAKLUVpbmFfQm9vbCBld2tfY29udGV4dF9t
ZW51X2l0ZW1fY2hlY2tlZF9zZXQoRXdrX0NvbnRleHRfTWVudV9JdGVtKiBvLCBFaW5hX0Jvb2wg
Y2hlY2tlZCkKK0VpbmFfQm9vbCBld2tfY29udGV4dF9tZW51X2l0ZW1fY2hlY2tlZF9zZXQoRXdr
X0NvbnRleHRfTWVudV9JdGVtKiBpdGVtLCBFaW5hX0Jvb2wgY2hlY2tlZCkKIHsKLSAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwobywgRUlOQV9GQUxTRSk7Ci0gICAgby0+Y2hlY2tl
ZCA9IGNoZWNrZWQ7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGl0ZW0sIEVJ
TkFfRkFMU0UpOworICAgIGl0ZW0tPmNoZWNrZWQgPSBjaGVja2VkOwogICAgIHJldHVybiBFSU5B
X1RSVUU7CiB9CiAKLUVpbmFfQm9vbCBld2tfY29udGV4dF9tZW51X2l0ZW1fZW5hYmxlZF9nZXQo
Y29uc3QgRXdrX0NvbnRleHRfTWVudV9JdGVtKiBvKQorRWluYV9Cb29sIGV3a19jb250ZXh0X21l
bnVfaXRlbV9lbmFibGVkX2dldChjb25zdCBFd2tfQ29udGV4dF9NZW51X0l0ZW0qIGl0ZW0pCiB7
Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKG8sIEVJTkFfRkFMU0UpOwotICAg
IHJldHVybiBvLT5lbmFibGVkOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChp
dGVtLCBFSU5BX0ZBTFNFKTsKKyAgICByZXR1cm4gaXRlbS0+ZW5hYmxlZDsKIH0KIAotRWluYV9C
b29sIGV3a19jb250ZXh0X21lbnVfaXRlbV9lbmFibGVkX3NldChFd2tfQ29udGV4dF9NZW51X0l0
ZW0qIG8sIEVpbmFfQm9vbCBlbmFibGVkKQorRWluYV9Cb29sIGV3a19jb250ZXh0X21lbnVfaXRl
bV9lbmFibGVkX3NldChFd2tfQ29udGV4dF9NZW51X0l0ZW0qIGl0ZW0sIEVpbmFfQm9vbCBlbmFi
bGVkKQogewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChvLCBFSU5BX0ZBTFNF
KTsKLSAgICBvLT5lbmFibGVkID0gZW5hYmxlZDsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTl9WQUwoaXRlbSwgRUlOQV9GQUxTRSk7CisgICAgaXRlbS0+ZW5hYmxlZCA9IGVuYWJsZWQ7
CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIApAQCAtMjU2LDExICsyNTYsMTEgQEAgRXdrX0Nv
bnRleHRfTWVudSogZXdrX2NvbnRleHRfbWVudV9uZXcoRXZhc19PYmplY3QqIHZpZXcsIFdlYkNv
cmU6OkNvbnRleHRNZW51Q28KICAqIEBzZWUgZXdrX2NvbnRleHRfbWVudV91bnJlZgogICogQHNl
ZSBld2tfY29udGV4dF9tZW51X2Rlc3Ryb3kKICAqLwotRWluYV9Cb29sIGV3a19jb250ZXh0X21l
bnVfZnJlZShFd2tfQ29udGV4dF9NZW51KiBvKQorRWluYV9Cb29sIGV3a19jb250ZXh0X21lbnVf
ZnJlZShFd2tfQ29udGV4dF9NZW51KiBtZW51KQogewotICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOX1ZBTChvLCBFSU5BX0ZBTFNFKTsKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFj
a19jYWxsKG8tPnZpZXcsICJjb250ZXh0bWVudSxmcmVlIiwgbyk7Ci0gICAgZXdrX2NvbnRleHRf
bWVudV91bnJlZihvKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwobWVudSwg
RUlOQV9GQUxTRSk7CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChtZW51LT52
aWV3LCAiY29udGV4dG1lbnUsZnJlZSIsIG1lbnUpOworICAgIGV3a19jb250ZXh0X21lbnVfdW5y
ZWYobWVudSk7CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIApAQCAtMjc1LDcgKzI3NSw3IEBA
IEVpbmFfQm9vbCBld2tfY29udGV4dF9tZW51X2ZyZWUoRXdrX0NvbnRleHRfTWVudSogbykKICAq
CiAgKiBAc2VlIGV3a19jb250ZXh0X21lbnVfaXRlbV9uZXcKICAqLwotdm9pZCBld2tfY29udGV4
dF9tZW51X2l0ZW1fYXBwZW5kKEV3a19Db250ZXh0X01lbnUqIG8sIFdlYkNvcmU6OkNvbnRleHRN
ZW51SXRlbSYgY29yZSkKK3ZvaWQgZXdrX2NvbnRleHRfbWVudV9pdGVtX2FwcGVuZChFd2tfQ29u
dGV4dF9NZW51KiBtZW51LCBXZWJDb3JlOjpDb250ZXh0TWVudUl0ZW0mIGNvcmUpCiB7CiAgICAg
RXdrX0NvbnRleHRfTWVudV9JdGVtX1R5cGUgdHlwZSA9IHN0YXRpY19jYXN0PEV3a19Db250ZXh0
X01lbnVfSXRlbV9UeXBlPihjb3JlLnR5cGUoKSk7CiAgICAgRXdrX0NvbnRleHRfTWVudV9BY3Rp
b24gYWN0aW9uID0gc3RhdGljX2Nhc3Q8RXdrX0NvbnRleHRfTWVudV9BY3Rpb24+KGNvcmUuYWN0
aW9uKCkpOwpAQCAtMjg1LDggKzI4NSw4IEBAIHZvaWQgZXdrX2NvbnRleHRfbWVudV9pdGVtX2Fw
cGVuZChFd2tfQ29udGV4dF9NZW51KiBvLCBXZWJDb3JlOjpDb250ZXh0TWVudUl0ZW0mCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZS5lbmFibGVkKCkpOwog
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKG1lbnVfaXRlbSk7CiAKLSAgICBvLT5pdGVt
cyA9IGVpbmFfbGlzdF9hcHBlbmQoby0+aXRlbXMsIG1lbnVfaXRlbSk7Ci0gICAgZXZhc19vYmpl
Y3Rfc21hcnRfY2FsbGJhY2tfY2FsbChvLT52aWV3LCAiY29udGV4dG1lbnUsaXRlbSxhcHBlbmRl
ZCIsIG8pOworICAgIG1lbnUtPml0ZW1zID0gZWluYV9saXN0X2FwcGVuZChtZW51LT5pdGVtcywg
bWVudV9pdGVtKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKG1lbnUtPnZp
ZXcsICJjb250ZXh0bWVudSxpdGVtLGFwcGVuZGVkIiwgbWVudSk7CiB9CiAKIC8qKgpAQCAtMzAx
LDEyICszMDEsMTIgQEAgdm9pZCBld2tfY29udGV4dF9tZW51X2l0ZW1fYXBwZW5kKEV3a19Db250
ZXh0X01lbnUqIG8sIFdlYkNvcmU6OkNvbnRleHRNZW51SXRlbSYKICAqCiAgKiBAc2VlIGV3a19j
b250ZXh0X21lbnVfaXRlbV9saXN0X2dldAogICovCi1Fd2tfQ29udGV4dF9NZW51KiBld2tfY29u
dGV4dF9tZW51X2N1c3RvbV9nZXQoY29uc3QgRXdrX0NvbnRleHRfTWVudSogbykKK0V3a19Db250
ZXh0X01lbnUqIGV3a19jb250ZXh0X21lbnVfY3VzdG9tX2dldChjb25zdCBFd2tfQ29udGV4dF9N
ZW51KiBtZW51KQogewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChvLCAwKTsK
KyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwobWVudSwgMCk7CiAKLSAgICBldmFz
X29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKG8tPnZpZXcsICJjb250ZXh0bWVudSxjdXN0b21p
emUiLCBvLT5pdGVtcyk7Ci0gICAgcmV0dXJuIG87CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2Fs
bGJhY2tfY2FsbChtZW51LT52aWV3LCAiY29udGV4dG1lbnUsY3VzdG9taXplIiwgbWVudS0+aXRl
bXMpOworICAgIHJldHVybiBtZW51OwogfQogCiAvKioKQEAgLTMxNiwxMSArMzE2LDExIEBAIEV3
a19Db250ZXh0X01lbnUqIGV3a19jb250ZXh0X21lbnVfY3VzdG9tX2dldChjb25zdCBFd2tfQ29u
dGV4dF9NZW51KiBvKQogICoKICAqIEBwYXJhbSBvIHRoZSBjb250ZXh0IG1lbnUgb2JqZWN0CiAg
Ki8KLXZvaWQgZXdrX2NvbnRleHRfbWVudV9zaG93KGNvbnN0IEV3a19Db250ZXh0X01lbnUqIG8p
Cit2b2lkIGV3a19jb250ZXh0X21lbnVfc2hvdyhjb25zdCBFd2tfQ29udGV4dF9NZW51KiBtZW51
KQogewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKG8pOworICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOKG1lbnUpOwogCi0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tf
Y2FsbChvLT52aWV3LCAiY29udGV4dG1lbnUsc2hvdyIsIG8pOworICAgIGV2YXNfb2JqZWN0X3Nt
YXJ0X2NhbGxiYWNrX2NhbGwobWVudS0+dmlldywgImNvbnRleHRtZW51LHNob3ciLCBtZW51KTsK
IH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2ZyYW1l
LmNwcCBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfZnJhbWUuY3BwCmluZGV4IGJjOGY4YWUu
LjAzMGZlZTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfZnJhbWUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfZnJhbWUuY3BwCkBAIC04Niw1MyArODYs
NTMgQEAgc3RydWN0IEVpbmFfSXRlcmF0b3JfRXdrX0ZyYW1lIHsKIH07CiAKICNpZm5kZWYgRVdL
X1RZUEVfQ0hFQ0sKLSNkZWZpbmUgRVdLX0ZSQU1FX1RZUEVfQ0hFQ0sobywgLi4uKSBkbyB7IH0g
d2hpbGUgKDApCisjZGVmaW5lIEVXS19GUkFNRV9UWVBFX0NIRUNLKGV3a0ZyYW1lLCAuLi4pIGRv
IHsgfSB3aGlsZSAoMCkKICNlbHNlCi0jZGVmaW5lIEVXS19GUkFNRV9UWVBFX0NIRUNLKG8sIC4u
LikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIEVXS19GUkFN
RV9UWVBFX0NIRUNLKGV3a0ZyYW1lLCAuLi4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAogICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBjb25zdCBjaGFyKiBfdG1wX290eXBl
ID0gZXZhc19vYmplY3RfdHlwZV9nZXQobyk7ICAgICAgICAgICAgICAgXAorICAgICAgICBjb25z
dCBjaGFyKiBfdG1wX290eXBlID0gZXZhc19vYmplY3RfdHlwZV9nZXQoZXdrRnJhbWUpOyAgICAg
ICAgICAgICAgIFwKICAgICAgICAgaWYgKEVJTkFfVU5MSUtFTFkoX3RtcF9vdHlwZSAhPSBFV0tf
RlJBTUVfVFlQRV9TVFIpKSB7ICAgICAgICAgIFwKICAgICAgICAgICAgIEVJTkFfTE9HX0NSSVQg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAg
ICAgICAgICAoIiVwICglcykgaXMgbm90IG9mIGFuIGV3a19mcmFtZSEiLCBvLCAgICAgICAgICAg
ICAgICAgIFwKKyAgICAgICAgICAgICAgICAoIiVwICglcykgaXMgbm90IG9mIGFuIGV3a19mcmFt
ZSEiLCBld2tGcmFtZSwgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgX3RtcF9v
dHlwZSA/IF90bXBfb3R5cGUgOiAiKG51bGwpIik7ICAgICAgICAgICAgICAgICAgICBcCiAgICAg
ICAgICAgICByZXR1cm4gX19WQV9BUkdTX187ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCiAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgfSB3aGlsZSAoMCkKICNlbmRpZgog
Ci0jZGVmaW5lIEVXS19GUkFNRV9TRF9HRVQobywgcHRyKSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgIEV3a19GcmFtZV9TbWFydF9EYXRhKiBwdHIgPSBzdGF0aWNfY2FzdDxF
d2tfRnJhbWVfU21hcnRfRGF0YSo+KGV2YXNfb2JqZWN0X3NtYXJ0X2RhdGFfZ2V0KG8pKQorI2Rl
ZmluZSBFV0tfRlJBTUVfU0RfR0VUKGV3a0ZyYW1lLCBwdHIpICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgRXdrX0ZyYW1lX1NtYXJ0X0RhdGEqIHB0ciA9IHN0YXRpY19jYXN0
PEV3a19GcmFtZV9TbWFydF9EYXRhKj4oZXZhc19vYmplY3Rfc21hcnRfZGF0YV9nZXQoZXdrRnJh
bWUpKQogCi0jZGVmaW5lIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHB0ciwgLi4uKSAg
ICAgICAgIFwKLSAgICBFV0tfRlJBTUVfVFlQRV9DSEVDSyhvLCBfX1ZBX0FSR1NfXyk7ICAgICAg
ICAgICAgICAgXAotICAgIEVXS19GUkFNRV9TRF9HRVQobywgcHRyKTsgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisjZGVmaW5lIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1l
LCBwdHIsIC4uLikgICAgICAgICBcCisgICAgRVdLX0ZSQU1FX1RZUEVfQ0hFQ0soZXdrRnJhbWUs
IF9fVkFfQVJHU19fKTsgICAgICAgICAgICAgICBcCisgICAgRVdLX0ZSQU1FX1NEX0dFVChld2tG
cmFtZSwgcHRyKTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgaWYgKCFwdHIpIHsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgQ1JJVElD
QUwoIm5vIHNtYXJ0IGRhdGEgZm9yIG9iamVjdCAlcCAoJXMpIiwgICAgXAotICAgICAgICAgICAg
ICAgICBvLCBldmFzX29iamVjdF90eXBlX2dldChvKSk7ICAgICAgICAgICBcCisgICAgICAgICAg
ICAgICAgIGV3a0ZyYW1lLCBldmFzX29iamVjdF90eXBlX2dldChld2tGcmFtZSkpOyAgICAgICAg
ICAgXAogICAgICAgICByZXR1cm4gX19WQV9BUkdTX187ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCiAgICAgfQogCiBzdGF0aWMgRXZhc19TbWFydF9DbGFzcyBfcGFyZW50X3NjID0gRVZB
U19TTUFSVF9DTEFTU19JTklUX05VTEw7CiAKICNpZmRlZiBFV0tfRlJBTUVfREVCVUcKLXN0YXRp
YyBpbmxpbmUgdm9pZCBfZXdrX2ZyYW1lX2RlYnVnKEV2YXNfT2JqZWN0KiBvKQorc3RhdGljIGlu
bGluZSB2b2lkIF9ld2tfZnJhbWVfZGVidWcoRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewogICAg
IEV2YXNfT2JqZWN0KiBjbGlwLCAqIHBhcmVudDsKICAgICBFdmFzX0Nvb3JkIHgsIHksIHcsIGgs
IGN4LCBjeSwgY3csIGNoOwogICAgIGludCByLCBnLCBiLCBhLCBjciwgY2csIGNiLCBjYTsKIAot
ICAgIGV2YXNfb2JqZWN0X2NvbG9yX2dldChvLCAmciwgJmcsICZiLCAmYSk7Ci0gICAgZXZhc19v
YmplY3RfZ2VvbWV0cnlfZ2V0KG8sICZ4LCAmeSwgJncsICZoKTsKKyAgICBldmFzX29iamVjdF9j
b2xvcl9nZXQoZXdrRnJhbWUsICZyLCAmZywgJmIsICZhKTsKKyAgICBldmFzX29iamVjdF9nZW9t
ZXRyeV9nZXQoZXdrRnJhbWUsICZ4LCAmeSwgJncsICZoKTsKIAotICAgIGNsaXAgPSBldmFzX29i
amVjdF9jbGlwX2dldChvKTsKKyAgICBjbGlwID0gZXZhc19vYmplY3RfY2xpcF9nZXQoZXdrRnJh
bWUpOwogICAgIGV2YXNfb2JqZWN0X2NvbG9yX2dldChjbGlwLCAmY3IsICZjZywgJmNiLCAmY2Ep
OwogICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldChjbGlwLCAmY3gsICZjeSwgJmN3LCAmY2gp
OwogCiAgICAgZnByaW50ZihzdGRlcnIsICIlcDogdHlwZT0lcyBuYW1lPSVzLCB2aXNpYmxlPSVk
LCBjb2xvcj0lMDJ4JTAyeCUwMnglMDJ4LCAlZCwlZCslZHglZCwgY2xpcHBlcj0lcCAoJWQsICUw
MnglMDJ4JTAyeCUwMngsICVkLCVkKyVkeCVkKVxuIiwKLSAgICAgICAgICAgIG8sIGV2YXNfb2Jq
ZWN0X3R5cGVfZ2V0KG8pLCBldmFzX29iamVjdF9uYW1lX2dldChvKSwgZXZhc19vYmplY3Rfdmlz
aWJsZV9nZXQobyksCisgICAgICAgICAgICBld2tGcmFtZSwgZXZhc19vYmplY3RfdHlwZV9nZXQo
ZXdrRnJhbWUpLCBldmFzX29iamVjdF9uYW1lX2dldChld2tGcmFtZSksIGV2YXNfb2JqZWN0X3Zp
c2libGVfZ2V0KGV3a0ZyYW1lKSwKICAgICAgICAgICAgIHIsIGcsIGIsIGEsIHgsIHksIHcsIGgs
CiAgICAgICAgICAgICBjbGlwLCBldmFzX29iamVjdF92aXNpYmxlX2dldChjbGlwKSwgY3IsIGNn
LCBjYiwgY2EsIGN4LCBjeSwgY3csIGNoKTsKLSAgICBwYXJlbnQgPSBldmFzX29iamVjdF9zbWFy
dF9wYXJlbnRfZ2V0KG8pOworICAgIHBhcmVudCA9IGV2YXNfb2JqZWN0X3NtYXJ0X3BhcmVudF9n
ZXQoZXdrRnJhbWUpOwogICAgIGlmICghcGFyZW50KQogICAgICAgICBmcHJpbnRmKHN0ZGVyciwg
IlxuIik7CiAgICAgZWxzZQpAQCAtMTcxLDE0ICsxNzEsMTQgQEAgc3RhdGljIEVpbmFfQm9vbCBf
ZXdrX2ZyYW1lX2NoaWxkcmVuX2l0ZXJhdG9yX25leHQoRWluYV9JdGVyYXRvcl9Fd2tfRnJhbWUq
IGl0LAogICAgIHJldHVybiBFSU5BX0ZBTFNFOwogfQogCi1zdGF0aWMgRXZhc19PYmplY3QqIF9l
d2tfZnJhbWVfY2hpbGRyZW5faXRlcmF0b3JfZ2V0X2NvbnRhaW5lcihFaW5hX0l0ZXJhdG9yX0V3
a19GcmFtZSogaXQpCitzdGF0aWMgRXZhc19PYmplY3QqIF9ld2tfZnJhbWVfY2hpbGRyZW5faXRl
cmF0b3JfZ2V0X2NvbnRhaW5lcihFaW5hX0l0ZXJhdG9yX0V3a19GcmFtZSogaXRlcmF0b3IpCiB7
Ci0gICAgcmV0dXJuIGl0LT5vYmo7CisgICAgcmV0dXJuIGl0ZXJhdG9yLT5vYmo7CiB9CiAKLXN0
YXRpYyB2b2lkIF9ld2tfZnJhbWVfc21hcnRfYWRkKEV2YXNfT2JqZWN0KiBvKQorc3RhdGljIHZv
aWQgX2V3a19mcmFtZV9zbWFydF9hZGQoRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewotICAgIEVX
S19GUkFNRV9TRF9HRVQobywgc2QpOworICAgIEVXS19GUkFNRV9TRF9HRVQoZXdrRnJhbWUsIHNk
KTsKIAogICAgIGlmICghc2QpIHsKICAgICAgICAgc2QgPSBzdGF0aWNfY2FzdDxFd2tfRnJhbWVf
U21hcnRfRGF0YSo+KGNhbGxvYygxLCBzaXplb2YoRXdrX0ZyYW1lX1NtYXJ0X0RhdGEpKSk7CkBA
IC0xODYsMTIgKzE4NiwxMiBAQCBzdGF0aWMgdm9pZCBfZXdrX2ZyYW1lX3NtYXJ0X2FkZChFdmFz
X09iamVjdCogbykKICAgICAgICAgICAgIENSSVRJQ0FMKCJjb3VsZCBub3QgYWxsb2NhdGUgRXdr
X0ZyYW1lX1NtYXJ0X0RhdGEiKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAg
ICAgICBldmFzX29iamVjdF9zbWFydF9kYXRhX3NldChvLCBzZCk7CisgICAgICAgIGV2YXNfb2Jq
ZWN0X3NtYXJ0X2RhdGFfc2V0KGV3a0ZyYW1lLCBzZCk7CiAgICAgfQogCi0gICAgc2QtPnNlbGYg
PSBvOworICAgIHNkLT5zZWxmID0gZXdrRnJhbWU7CiAKLSAgICBfcGFyZW50X3NjLmFkZChvKTsK
KyAgICBfcGFyZW50X3NjLmFkZChld2tGcmFtZSk7CiAgICAgZXZhc19vYmplY3Rfc3RhdGljX2Ns
aXBfc2V0KHNkLT5iYXNlLmNsaXBwZXIsIEVJTkFfRkFMU0UpOwogICAgIGV2YXNfb2JqZWN0X21v
dmUoc2QtPmJhc2UuY2xpcHBlciwgMCwgMCk7CiAgICAgZXZhc19vYmplY3RfcmVzaXplKHNkLT5i
YXNlLmNsaXBwZXIsIDAsIDApOwpAQCAtMjI4LDE1ICsyMjgsMTUgQEAgc3RhdGljIHZvaWQgX2V3
a19mcmFtZV9zbWFydF9hZGQoRXZhc19PYmplY3QqIG8pCiAgICAgaWYgKGkgPiA2KQogICAgICAg
ICBpID0gMDsKIAotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X21lbWJlcl9hZGQoc2QtPnJlZ2lvbiwg
byk7CisgICAgZXZhc19vYmplY3Rfc21hcnRfbWVtYmVyX2FkZChzZC0+cmVnaW9uLCBld2tGcmFt
ZSk7CiAgICAgZXZhc19vYmplY3RfaGlkZShzZC0+cmVnaW9uKTsKICNlbmRpZgogfQogCi1zdGF0
aWMgdm9pZCBfZXdrX2ZyYW1lX3NtYXJ0X2RlbChFdmFzX09iamVjdCogbykKK3N0YXRpYyB2b2lk
IF9ld2tfZnJhbWVfc21hcnRfZGVsKEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsKLSAgICBXUk4o
Im89JXAiLCBvKTsgLy8gWFhYIFJFTU9WRSBNRSBMQVRFUgotICAgIEVXS19GUkFNRV9TRF9HRVQo
bywgc2QpOworICAgIFdSTigiZXdrRnJhbWU9JXAiLCBld2tGcmFtZSk7IC8vIFhYWCBSRU1PVkUg
TUUgTEFURVIKKyAgICBFV0tfRlJBTUVfU0RfR0VUKGV3a0ZyYW1lLCBzZCk7CiAKICAgICBpZiAo
c2QpIHsKICAgICAgICAgaWYgKHNkLT5mcmFtZSkgewpAQCAtMjUyLDIxICsyNTIsMjEgQEAgc3Rh
dGljIHZvaWQgX2V3a19mcmFtZV9zbWFydF9kZWwoRXZhc19PYmplY3QqIG8pCiAgICAgICAgIGVp
bmFfc3RyaW5nc2hhcmVfZGVsKHNkLT5uYW1lKTsKICAgICB9CiAKLSAgICBfcGFyZW50X3NjLmRl
bChvKTsKKyAgICBfcGFyZW50X3NjLmRlbChld2tGcmFtZSk7CiB9CiAKLXN0YXRpYyB2b2lkIF9l
d2tfZnJhbWVfc21hcnRfcmVzaXplKEV2YXNfT2JqZWN0KiBvLCBFdmFzX0Nvb3JkIHcsIEV2YXNf
Q29vcmQgaCkKK3N0YXRpYyB2b2lkIF9ld2tfZnJhbWVfc21hcnRfcmVzaXplKEV2YXNfT2JqZWN0
KiBld2tGcmFtZSwgRXZhc19Db29yZCB3aWR0aCwgRXZhc19Db29yZCBoZWlnaHQpCiB7Ci0gICAg
RVdLX0ZSQU1FX1NEX0dFVChvLCBzZCk7Ci0gICAgZXZhc19vYmplY3RfcmVzaXplKHNkLT5iYXNl
LmNsaXBwZXIsIHcsIGgpOworICAgIEVXS19GUkFNRV9TRF9HRVQoZXdrRnJhbWUsIHNkKTsKKyAg
ICBldmFzX29iamVjdF9yZXNpemUoc2QtPmJhc2UuY2xpcHBlciwgd2lkdGgsIGhlaWdodCk7CiAK
ICNpZmRlZiBFV0tfRlJBTUVfREVCVUcKLSAgICBldmFzX29iamVjdF9yZXNpemUoc2QtPnJlZ2lv
biwgdywgaCk7CisgICAgZXZhc19vYmplY3RfcmVzaXplKHNkLT5yZWdpb24sIHdpZHRoLCBoZWln
aHQpOwogICAgIEV2YXNfQ29vcmQgeCwgeTsKLSAgICBldmFzX29iamVjdF9nZW9tZXRyeV9nZXQo
c2QtPnJlZ2lvbiwgJngsICZ5LCAmdywgJmgpOworICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dl
dChzZC0+cmVnaW9uLCAmeCwgJnksICZ3aWR0aCwgJmhlaWdodCk7CiAgICAgSU5GKCJyZWdpb249
JXAsIHZpc2libGU9JWQsIGdlbz0lZCwlZCArICVkeCVkIiwKLSAgICAgICAgc2QtPnJlZ2lvbiwg
ZXZhc19vYmplY3RfdmlzaWJsZV9nZXQoc2QtPnJlZ2lvbiksIHgsIHksIHcsIGgpOwotICAgIF9l
d2tfZnJhbWVfZGVidWcobyk7CisgICAgICAgIHNkLT5yZWdpb24sIGV2YXNfb2JqZWN0X3Zpc2li
bGVfZ2V0KHNkLT5yZWdpb24pLCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBfZXdrX2ZyYW1l
X2RlYnVnKGV3a0ZyYW1lKTsKICNlbmRpZgogfQogCkBAIC0yOTIsMTUgKzI5MiwxNSBAQCBzdGF0
aWMgaW5saW5lIEV2YXNfU21hcnQqIF9ld2tfZnJhbWVfc21hcnRfY2xhc3NfbmV3KHZvaWQpCiAg
ICAgcmV0dXJuIHNtYXJ0OwogfQogCi1FdmFzX09iamVjdCogZXdrX2ZyYW1lX3ZpZXdfZ2V0KGNv
bnN0IEV2YXNfT2JqZWN0KiBvKQorRXZhc19PYmplY3QqIGV3a19mcmFtZV92aWV3X2dldChjb25z
dCBFdmFzX09iamVjdCogZXdrRnJhbWUpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRV
Uk4obywgc2QsIDApOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBz
ZCwgMCk7CiAgICAgcmV0dXJuIHNkLT52aWV3OwogfQogCi1FaW5hX0l0ZXJhdG9yKiBld2tfZnJh
bWVfY2hpbGRyZW5faXRlcmF0b3JfbmV3KEV2YXNfT2JqZWN0KiBvKQorRWluYV9JdGVyYXRvciog
ZXdrX2ZyYW1lX2NoaWxkcmVuX2l0ZXJhdG9yX25ldyhFdmFzX09iamVjdCogZXdrRnJhbWUpCiB7
Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIDApOworICAgIEVXS19GUkFN
RV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgMCk7CiAgICAgRWluYV9JdGVyYXRvcl9F
d2tfRnJhbWUqIGl0ID0gc3RhdGljX2Nhc3Q8RWluYV9JdGVyYXRvcl9Fd2tfRnJhbWUqPgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjYWxsb2MoMSwgc2l6ZW9mKEVpbmFfSXRl
cmF0b3JfRXdrX0ZyYW1lKSkpOwogICAgIGlmICghaXQpCkBAIC0zMTAsMjMgKzMxMCwyMyBAQCBF
aW5hX0l0ZXJhdG9yKiBld2tfZnJhbWVfY2hpbGRyZW5faXRlcmF0b3JfbmV3KEV2YXNfT2JqZWN0
KiBvKQogICAgIGl0LT5iYXNlLm5leHQgPSBGVU5DX0lURVJBVE9SX05FWFQoX2V3a19mcmFtZV9j
aGlsZHJlbl9pdGVyYXRvcl9uZXh0KTsKICAgICBpdC0+YmFzZS5nZXRfY29udGFpbmVyID0gRlVO
Q19JVEVSQVRPUl9HRVRfQ09OVEFJTkVSKF9ld2tfZnJhbWVfY2hpbGRyZW5faXRlcmF0b3JfZ2V0
X2NvbnRhaW5lcik7CiAgICAgaXQtPmJhc2UuZnJlZSA9IEZVTkNfSVRFUkFUT1JfRlJFRShmcmVl
KTsKLSAgICBpdC0+b2JqID0gbzsKKyAgICBpdC0+b2JqID0gZXdrRnJhbWU7CiAgICAgaXQtPmN1
cnJlbnRJbmRleCA9IDA7CiAgICAgcmV0dXJuICZpdC0+YmFzZTsKIH0KIAotRXZhc19PYmplY3Qq
IGV3a19mcmFtZV9jaGlsZF9maW5kKEV2YXNfT2JqZWN0KiBvLCBjb25zdCBjaGFyKiBuYW1lKQor
RXZhc19PYmplY3QqIGV3a19mcmFtZV9jaGlsZF9maW5kKEV2YXNfT2JqZWN0KiBld2tGcmFtZSwg
Y29uc3QgY2hhciogbmFtZSkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihvLCBz
ZCwgMCk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCAwKTsK
ICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwobmFtZSwgMCk7CiAgICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgMCk7CiAgICAgV1RGOjpTdHJpbmcg
cyA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChuYW1lKTsKICAgICByZXR1cm4ga2l0KHNkLT5mcmFt
ZS0+dHJlZSgpLT5maW5kKFdURjo6QXRvbWljU3RyaW5nKHMpKSk7CiB9CiAKLUVpbmFfQm9vbCBl
d2tfZnJhbWVfdXJpX3NldChFdmFzX09iamVjdCogbywgY29uc3QgY2hhciogdXJpKQorRWluYV9C
b29sIGV3a19mcmFtZV91cmlfc2V0KEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgY29uc3QgY2hhciog
dXJpKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNF
KTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFM
U0UpOwogICAgIFdlYkNvcmU6OktVUkwga3VybChXZWJDb3JlOjpLVVJMKCksIFdURjo6U3RyaW5n
Ojpmcm9tVVRGOCh1cmkpKTsKICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3QgcmVxKGt1cmwp
OwogICAgIFdlYkNvcmU6OkZyYW1lTG9hZGVyKiBsb2FkZXIgPSBzZC0+ZnJhbWUtPmxvYWRlcigp
OwpAQCAtMzM0LDIxICszMzQsMjEgQEAgRWluYV9Cb29sIGV3a19mcmFtZV91cmlfc2V0KEV2YXNf
T2JqZWN0KiBvLCBjb25zdCBjaGFyKiB1cmkpCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAot
Y29uc3QgY2hhciogZXdrX2ZyYW1lX3VyaV9nZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCitjb25z
dCBjaGFyKiBld2tfZnJhbWVfdXJpX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrRnJhbWUpCiB7
Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIDApOworICAgIEVXS19GUkFN
RV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgMCk7CiAgICAgcmV0dXJuIHNkLT51cmk7
CiB9CiAKLWNvbnN0IGNoYXIqIGV3a19mcmFtZV90aXRsZV9nZXQoY29uc3QgRXZhc19PYmplY3Qq
IG8pCitjb25zdCBjaGFyKiBld2tfZnJhbWVfdGl0bGVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBl
d2tGcmFtZSkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgMCk7Cisg
ICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCAwKTsKICAgICByZXR1
cm4gc2QtPnRpdGxlOwogfQogCi1jb25zdCBjaGFyKiBld2tfZnJhbWVfbmFtZV9nZXQoY29uc3Qg
RXZhc19PYmplY3QqIG8pCitjb25zdCBjaGFyKiBld2tfZnJhbWVfbmFtZV9nZXQoY29uc3QgRXZh
c19PYmplY3QqIGV3a0ZyYW1lKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8s
IHNkLCAwKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIDAp
OwogCiAgICAgaWYgKCFzZC0+ZnJhbWUpIHsKICAgICAgICAgRVJSKCJjb3VsZCBub3QgZ2V0IG5h
bWUgb2YgdW5pbml0aWFsaXplZCBmcmFtZS4iKTsKQEAgLTM2NSwyMSArMzY1LDIxIEBAIGNvbnN0
IGNoYXIqIGV3a19mcmFtZV9uYW1lX2dldChjb25zdCBFdmFzX09iamVjdCogbykKICAgICByZXR1
cm4gc2QtPm5hbWU7CiB9CiAKLUVpbmFfQm9vbCBld2tfZnJhbWVfY29udGVudHNfc2l6ZV9nZXQo
Y29uc3QgRXZhc19PYmplY3QqIG8sIEV2YXNfQ29vcmQqIHcsIEV2YXNfQ29vcmQqIGgpCitFaW5h
X0Jvb2wgZXdrX2ZyYW1lX2NvbnRlbnRzX3NpemVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tG
cmFtZSwgRXZhc19Db29yZCogd2lkdGgsIEV2YXNfQ29vcmQqIGhlaWdodCkKIHsKLSAgICBpZiAo
dykKLSAgICAgICAgKncgPSAwOwotICAgIGlmIChoKQotICAgICAgICAqaCA9IDA7Ci0gICAgRVdL
X0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOwotICAgIGlmICh3KQot
ICAgICAgICAqdyA9IHNkLT5jb250ZW50c19zaXplLnc7Ci0gICAgaWYgKGgpCi0gICAgICAgICpo
ID0gc2QtPmNvbnRlbnRzX3NpemUuaDsKKyAgICBpZiAod2lkdGgpCisgICAgICAgICp3aWR0aCA9
IDA7CisgICAgaWYgKGhlaWdodCkKKyAgICAgICAgKmhlaWdodCA9IDA7CisgICAgRVdLX0ZSQU1F
X1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBpZiAod2lk
dGgpCisgICAgICAgICp3aWR0aCA9IHNkLT5jb250ZW50c19zaXplLnc7CisgICAgaWYgKGhlaWdo
dCkKKyAgICAgICAgKmhlaWdodCA9IHNkLT5jb250ZW50c19zaXplLmg7CiAgICAgcmV0dXJuIEVJ
TkFfVFJVRTsKIH0KIAotc3RhdGljIEVpbmFfQm9vbCBfZXdrX2ZyYW1lX2NvbnRlbnRzX3NldF9p
bnRlcm5hbChFd2tfRnJhbWVfU21hcnRfRGF0YSogc2QsIGNvbnN0IGNoYXIqIGNvbnRlbnRzLCBz
aXplX3QgY29udGVudHNfc2l6ZSwgY29uc3QgY2hhciogbWltZV90eXBlLCBjb25zdCBjaGFyKiBl
bmNvZGluZywgY29uc3QgY2hhciogYmFzZV91cmksIGNvbnN0IGNoYXIqIHVucmVhY2hhYmxlX3Vy
aSkKK3N0YXRpYyBFaW5hX0Jvb2wgX2V3a19mcmFtZV9jb250ZW50c19zZXRfaW50ZXJuYWwoRXdr
X0ZyYW1lX1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSwgY29uc3QgY2hhciogY29udGVudHMsIHNpemVf
dCBjb250ZW50c19zaXplLCBjb25zdCBjaGFyKiBtaW1lX3R5cGUsIGNvbnN0IGNoYXIqIGVuY29k
aW5nLCBjb25zdCBjaGFyKiBiYXNlX3VyaSwgY29uc3QgY2hhciogdW5yZWFjaGFibGVfdXJpKQog
ewogICAgIHNpemVfdCBsZW4gPSBzdHJsZW4oY29udGVudHMpOwogICAgIGlmIChjb250ZW50c19z
aXplIDwgMSB8fCBjb250ZW50c19zaXplID4gbGVuKQpAQCAtNDA2LDIyICs0MDYsMjIgQEAgc3Rh
dGljIEVpbmFfQm9vbCBfZXdrX2ZyYW1lX2NvbnRlbnRzX3NldF9pbnRlcm5hbChFd2tfRnJhbWVf
U21hcnRfRGF0YSogc2QsIGNvbnMKICAgICAgICAgYmFzZUtVUkwsIHVucmVhY2hhYmxlS1VSTCk7
CiAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3QoYmFzZUtVUkwpOwogCi0gICAg
c2QtPmZyYW1lLT5sb2FkZXIoKS0+bG9hZChyZXF1ZXN0LCBzdWJzdGl0dXRlRGF0YSwgZmFsc2Up
OworICAgIHNtYXJ0RGF0YS0+ZnJhbWUtPmxvYWRlcigpLT5sb2FkKHJlcXVlc3QsIHN1YnN0aXR1
dGVEYXRhLCBmYWxzZSk7CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotRWluYV9Cb29sIGV3
a19mcmFtZV9jb250ZW50c19zZXQoRXZhc19PYmplY3QqIG8sIGNvbnN0IGNoYXIqIGNvbnRlbnRz
LCBzaXplX3QgY29udGVudHNfc2l6ZSwgY29uc3QgY2hhciogbWltZV90eXBlLCBjb25zdCBjaGFy
KiBlbmNvZGluZywgY29uc3QgY2hhciogYmFzZV91cmkpCitFaW5hX0Jvb2wgZXdrX2ZyYW1lX2Nv
bnRlbnRzX3NldChFdmFzX09iamVjdCogZXdrRnJhbWUsIGNvbnN0IGNoYXIqIGNvbnRlbnRzLCBz
aXplX3QgY29udGVudHNfc2l6ZSwgY29uc3QgY2hhciogbWltZV90eXBlLCBjb25zdCBjaGFyKiBl
bmNvZGluZywgY29uc3QgY2hhciogYmFzZV91cmkpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9P
Ul9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVU
VVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05fRkFMU0Vf
UkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOX1ZBTChjb250ZW50cywgRUlOQV9GQUxTRSk7CiAgICAgcmV0dXJuIF9ld2tfZnJh
bWVfY29udGVudHNfc2V0X2ludGVybmFsCiAgICAgICAgICAgICAgICAoc2QsIGNvbnRlbnRzLCBj
b250ZW50c19zaXplLCBtaW1lX3R5cGUsIGVuY29kaW5nLCBiYXNlX3VyaSwgMCk7CiB9CiAKLUVp
bmFfQm9vbCBld2tfZnJhbWVfY29udGVudHNfYWx0ZXJuYXRlX3NldChFdmFzX09iamVjdCogbywg
Y29uc3QgY2hhciogY29udGVudHMsIHNpemVfdCBjb250ZW50c19zaXplLCBjb25zdCBjaGFyKiBt
aW1lX3R5cGUsIGNvbnN0IGNoYXIqIGVuY29kaW5nLCBjb25zdCBjaGFyKiBiYXNlX3VyaSwgY29u
c3QgY2hhciogdW5yZWFjaGFibGVfdXJpKQorRWluYV9Cb29sIGV3a19mcmFtZV9jb250ZW50c19h
bHRlcm5hdGVfc2V0KEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgY29uc3QgY2hhciogY29udGVudHMs
IHNpemVfdCBjb250ZW50c19zaXplLCBjb25zdCBjaGFyKiBtaW1lX3R5cGUsIGNvbnN0IGNoYXIq
IGVuY29kaW5nLCBjb25zdCBjaGFyKiBiYXNlX3VyaSwgY29uc3QgY2hhciogdW5yZWFjaGFibGVf
dXJpKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNF
KTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFM
U0UpOwogICAgIEVJTkFfU0FGRVRZX09OX0ZBTFNFX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5B
X0ZBTFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoY29udGVudHMsIEVJ
TkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh1bnJlYWNoYWJs
ZV91cmksIEVJTkFfRkFMU0UpOwpAQCAtNDMwLDI1ICs0MzAsMjUgQEAgRWluYV9Cb29sIGV3a19m
cmFtZV9jb250ZW50c19hbHRlcm5hdGVfc2V0KEV2YXNfT2JqZWN0KiBvLCBjb25zdCBjaGFyKiBj
b250ZW50cywKICAgICAgICAgICAgICAgIHVucmVhY2hhYmxlX3VyaSk7CiB9CiAKLUVpbmFfQm9v
bCBld2tfZnJhbWVfc2NyaXB0X2V4ZWN1dGUoRXZhc19PYmplY3QqIG8sIGNvbnN0IGNoYXIqIHNj
cmlwdCkKK0VpbmFfQm9vbCBld2tfZnJhbWVfc2NyaXB0X2V4ZWN1dGUoRXZhc19PYmplY3QqIGV3
a0ZyYW1lLCBjb25zdCBjaGFyKiBzY3JpcHQpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9S
RVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJO
KGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05fRkFMU0VfUkVU
VVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOX1ZBTChzY3JpcHQsIEVJTkFfRkFMU0UpOwogICAgIHNkLT5mcmFtZS0+c2NyaXB0KCkt
PmV4ZWN1dGVTY3JpcHQoV1RGOjpTdHJpbmc6OmZyb21VVEY4KHNjcmlwdCksIHRydWUpOwogICAg
IHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLUVpbmFfQm9vbCBld2tfZnJhbWVfZWRpdGFibGVfZ2V0
KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQorRWluYV9Cb29sIGV3a19mcmFtZV9lZGl0YWJsZV9nZXQo
Y29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1Jf
UkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVS
Tihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOwogICAgIHJldHVybiBzZC0+ZWRpdGFibGU7
CiB9CiAKLUVpbmFfQm9vbCBld2tfZnJhbWVfZWRpdGFibGVfc2V0KEV2YXNfT2JqZWN0KiBvLCBF
aW5hX0Jvb2wgZWRpdGFibGUpCitFaW5hX0Jvb2wgZXdrX2ZyYW1lX2VkaXRhYmxlX3NldChFdmFz
X09iamVjdCogZXdrRnJhbWUsIEVpbmFfQm9vbCBlZGl0YWJsZSkKIHsKLSAgICBFV0tfRlJBTUVf
U0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX0ZSQU1FX1NEX0dF
VF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKICAgICBlZGl0YWJsZSA9
ICEhZWRpdGFibGU7CiAgICAgaWYgKHNkLT5lZGl0YWJsZSA9PSBlZGl0YWJsZSkKQEAgLTQ1OCw5
ICs0NTgsOSBAQCBFaW5hX0Jvb2wgZXdrX2ZyYW1lX2VkaXRhYmxlX3NldChFdmFzX09iamVjdCog
bywgRWluYV9Cb29sIGVkaXRhYmxlKQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLWNoYXIq
IGV3a19mcmFtZV9zZWxlY3Rpb25fZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQorY2hhciogZXdr
X2ZyYW1lX3NlbGVjdGlvbl9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewotICAg
IEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAwKTsKKyAgICBFV0tfRlJBTUVfU0Rf
R0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIDApOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOX1ZBTChzZC0+ZnJhbWUsIDApOwogICAgIFdURjo6Q1N0cmluZyBzID0gc2QtPmZyYW1l
LT5lZGl0b3IoKS0+c2VsZWN0ZWRUZXh0KCkudXRmOCgpOwogICAgIGlmIChzLmlzTnVsbCgpKQpA
QCAtNDY4LDE4ICs0NjgsMTggQEAgY2hhciogZXdrX2ZyYW1lX3NlbGVjdGlvbl9nZXQoY29uc3Qg
RXZhc19PYmplY3QqIG8pCiAgICAgcmV0dXJuIHN0cmR1cChzLmRhdGEoKSk7CiB9CiAKLUVpbmFf
Qm9vbCBld2tfZnJhbWVfdGV4dF9zZWFyY2goY29uc3QgRXZhc19PYmplY3QqIG8sIGNvbnN0IGNo
YXIqIHN0cmluZywgRWluYV9Cb29sIGNhc2Vfc2Vuc2l0aXZlLCBFaW5hX0Jvb2wgZm9yd2FyZCwg
RWluYV9Cb29sIHdyYXApCitFaW5hX0Jvb2wgZXdrX2ZyYW1lX3RleHRfc2VhcmNoKGNvbnN0IEV2
YXNfT2JqZWN0KiBld2tGcmFtZSwgY29uc3QgY2hhciogdGV4dCwgRWluYV9Cb29sIGNhc2Vfc2Vu
c2l0aXZlLCBFaW5hX0Jvb2wgZm9yd2FyZCwgRWluYV9Cb29sIHdyYXApCiB7Ci0gICAgRVdLX0ZS
QU1FX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19GUkFNRV9T
RF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZF
VFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHN0cmluZywgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHRleHQsIEVJTkFfRkFMU0UpOwogCi0gICAgcmV0dXJu
IHNkLT5mcmFtZS0+ZWRpdG9yKCktPmZpbmRTdHJpbmcoV1RGOjpTdHJpbmc6OmZyb21VVEY4KHN0
cmluZyksIGZvcndhcmQsIGNhc2Vfc2Vuc2l0aXZlLCB3cmFwLCB0cnVlKTsKKyAgICByZXR1cm4g
c2QtPmZyYW1lLT5lZGl0b3IoKS0+ZmluZFN0cmluZyhXVEY6OlN0cmluZzo6ZnJvbVVURjgodGV4
dCksIGZvcndhcmQsIGNhc2Vfc2Vuc2l0aXZlLCB3cmFwLCB0cnVlKTsKIH0KIAotdW5zaWduZWQg
aW50IGV3a19mcmFtZV90ZXh0X21hdGNoZXNfbWFyayhFdmFzX09iamVjdCogbywgY29uc3QgY2hh
ciogc3RyaW5nLCBFaW5hX0Jvb2wgY2FzZV9zZW5zaXRpdmUsIEVpbmFfQm9vbCBoaWdobGlnaHQs
IHVuc2lnbmVkIGludCBsaW1pdCkKK3Vuc2lnbmVkIGludCBld2tfZnJhbWVfdGV4dF9tYXRjaGVz
X21hcmsoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBjb25zdCBjaGFyKiBzdHJpbmcsIEVpbmFfQm9v
bCBjYXNlX3NlbnNpdGl2ZSwgRWluYV9Cb29sIGhpZ2hsaWdodCwgdW5zaWduZWQgaW50IGxpbWl0
KQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAwKTsKKyAgICBFV0tf
RlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIDApOwogICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOX1ZBTChzdHJpbmcsIDApOwogCkBAIC00ODcsMjYgKzQ4NywyNiBA
QCB1bnNpZ25lZCBpbnQgZXdrX2ZyYW1lX3RleHRfbWF0Y2hlc19tYXJrKEV2YXNfT2JqZWN0KiBv
LCBjb25zdCBjaGFyKiBzdHJpbmcsIEVpbgogICAgIHJldHVybiBzZC0+ZnJhbWUtPmVkaXRvcigp
LT5jb3VudE1hdGNoZXNGb3JUZXh0KFdURjo6U3RyaW5nOjpmcm9tVVRGOChzdHJpbmcpLCBjYXNl
X3NlbnNpdGl2ZSwgbGltaXQsIHRydWUpOwogfQogCi1FaW5hX0Jvb2wgZXdrX2ZyYW1lX3RleHRf
bWF0Y2hlc191bm1hcmtfYWxsKEV2YXNfT2JqZWN0KiBvKQorRWluYV9Cb29sIGV3a19mcmFtZV90
ZXh0X21hdGNoZXNfdW5tYXJrX2FsbChFdmFzX09iamVjdCogZXdrRnJhbWUpCiB7Ci0gICAgRVdL
X0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19GUkFN
RV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7CiAKICAgICBz
ZC0+ZnJhbWUtPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+cmVtb3ZlTWFya2VycyhXZWJDb3JlOjpE
b2N1bWVudE1hcmtlcjo6VGV4dE1hdGNoKTsKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi1F
aW5hX0Jvb2wgZXdrX2ZyYW1lX3RleHRfbWF0Y2hlc19oaWdobGlnaHRfc2V0KEV2YXNfT2JqZWN0
KiBvLCBFaW5hX0Jvb2wgaGlnaGxpZ2h0KQorRWluYV9Cb29sIGV3a19mcmFtZV90ZXh0X21hdGNo
ZXNfaGlnaGxpZ2h0X3NldChFdmFzX09iamVjdCogZXdrRnJhbWUsIEVpbmFfQm9vbCBoaWdobGln
aHQpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0Up
OworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxT
RSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9G
QUxTRSk7CiAgICAgc2QtPmZyYW1lLT5lZGl0b3IoKS0+c2V0TWFya2VkVGV4dE1hdGNoZXNBcmVI
aWdobGlnaHRlZChoaWdobGlnaHQpOwogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLUVpbmFf
Qm9vbCBld2tfZnJhbWVfdGV4dF9tYXRjaGVzX2hpZ2hsaWdodF9nZXQoY29uc3QgRXZhc19PYmpl
Y3QqIG8pCitFaW5hX0Jvb2wgZXdrX2ZyYW1lX3RleHRfbWF0Y2hlc19oaWdobGlnaHRfZ2V0KGNv
bnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JF
VFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
Tl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKICAgICByZXR1cm4gc2QtPmZyYW1lLT5lZGl0
b3IoKS0+bWFya2VkVGV4dE1hdGNoZXNBcmVIaWdobGlnaHRlZCgpOwogfQpAQCAtNTE0LDIyICs1
MTQsMjIgQEAgRWluYV9Cb29sIGV3a19mcmFtZV90ZXh0X21hdGNoZXNfaGlnaGxpZ2h0X2dldChj
b25zdCBFdmFzX09iamVjdCogbykKIC8qKgogICogQ29tcGFyaXNvbiBmdW5jdGlvbiB1c2VkIGJ5
IGV3a19mcmFtZV90ZXh0X21hdGNoZXNfbnRoX3Bvc19nZXQKICAqLwotc3RhdGljIGJvb2wgX2V3
a19mcmFtZV9yZWN0X2NtcF9sZXNzX3RoYW4oY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgaSwgY29u
c3QgV2ViQ29yZTo6SW50UmVjdCYgaikKK3N0YXRpYyBib29sIF9ld2tfZnJhbWVfcmVjdF9jbXBf
bGVzc190aGFuKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGJlZ2luLCBjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JiBlbmQpCiB7Ci0gICAgcmV0dXJuIChpLnkoKSA8IGoueSgpIHx8IChpLnkoKSA9PSBq
LnkoKSAmJiBpLngoKSA8IGoueCgpKSk7CisgICAgcmV0dXJuIChiZWdpbi55KCkgPCBlbmQueSgp
IHx8IChiZWdpbi55KCkgPT0gZW5kLnkoKSAmJiBiZWdpbi54KCkgPCBlbmQueCgpKSk7CiB9CiAK
IC8qKgogICogUHJlZGljYXRlIHVzZWQgYnkgZXdrX2ZyYW1lX3RleHRfbWF0Y2hlc19udGhfcG9z
X2dldAogICovCi1zdGF0aWMgYm9vbCBfZXdrX2ZyYW1lX3JlY3RfaXNfbmVnYXRpdmVfdmFsdWUo
Y29uc3QgV2ViQ29yZTo6SW50UmVjdCYgaSkKK3N0YXRpYyBib29sIF9ld2tfZnJhbWVfcmVjdF9p
c19uZWdhdGl2ZV92YWx1ZShjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KQogewotICAgIHJl
dHVybiAoaS54KCkgPCAwIHx8IGkueSgpIDwgMCk7CisgICAgcmV0dXJuIChyZWN0LngoKSA8IDAg
fHwgcmVjdC55KCkgPCAwKTsKIH0KIAotRWluYV9Cb29sIGV3a19mcmFtZV90ZXh0X21hdGNoZXNf
bnRoX3Bvc19nZXQoY29uc3QgRXZhc19PYmplY3QqIG8sIHNpemVfdCBuLCBpbnQqIHgsIGludCog
eSkKK0VpbmFfQm9vbCBld2tfZnJhbWVfdGV4dF9tYXRjaGVzX250aF9wb3NfZ2V0KGNvbnN0IEV2
YXNfT2JqZWN0KiBld2tGcmFtZSwgc2l6ZV90IG51bWJlciwgaW50KiB4LCBpbnQqIHkpCiB7Ci0g
ICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVX
S19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7CiAgICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7CiAK
ICAgICBWZWN0b3I8V2ViQ29yZTo6SW50UmVjdD4gaW50UmVjdHMgPSBzZC0+ZnJhbWUtPmRvY3Vt
ZW50KCktPm1hcmtlcnMoKS0+cmVuZGVyZWRSZWN0c0Zvck1hcmtlcnMoV2ViQ29yZTo6RG9jdW1l
bnRNYXJrZXI6OlRleHRNYXRjaCk7CkBAIC01MzcsNTUgKzUzNyw1NSBAQCBFaW5hX0Jvb2wgZXdr
X2ZyYW1lX3RleHRfbWF0Y2hlc19udGhfcG9zX2dldChjb25zdCBFdmFzX09iamVjdCogbywgc2l6
ZV90IG4sIGludAogICAgIC8qIHJlbW92ZSB1c2VsZXNzIHZhbHVlcyAqLwogICAgIHN0ZDo6cmVt
b3ZlX2lmKGludFJlY3RzLmJlZ2luKCksIGludFJlY3RzLmVuZCgpLCBfZXdrX2ZyYW1lX3JlY3Rf
aXNfbmVnYXRpdmVfdmFsdWUpOwogCi0gICAgaWYgKGludFJlY3RzLmlzRW1wdHkoKSB8fCBuID4g
aW50UmVjdHMuc2l6ZSgpKQorICAgIGlmIChpbnRSZWN0cy5pc0VtcHR5KCkgfHwgbnVtYmVyID4g
aW50UmVjdHMuc2l6ZSgpKQogICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKIAogICAgIHN0ZDo6
c29ydChpbnRSZWN0cy5iZWdpbigpLCBpbnRSZWN0cy5lbmQoKSwgX2V3a19mcmFtZV9yZWN0X2Nt
cF9sZXNzX3RoYW4pOwogCiAgICAgaWYgKHgpCi0gICAgICAgICp4ID0gaW50UmVjdHNbbiAtIDFd
LngoKTsKKyAgICAgICAgKnggPSBpbnRSZWN0c1tudW1iZXIgLSAxXS54KCk7CiAgICAgaWYgKHkp
Ci0gICAgICAgICp5ID0gaW50UmVjdHNbbiAtIDFdLnkoKTsKKyAgICAgICAgKnkgPSBpbnRSZWN0
c1tudW1iZXIgLSAxXS55KCk7CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotRWluYV9Cb29s
IGV3a19mcmFtZV9zdG9wKEV2YXNfT2JqZWN0KiBvKQorRWluYV9Cb29sIGV3a19mcmFtZV9zdG9w
KEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVS
TihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdr
RnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9W
QUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKICAgICBzZC0+ZnJhbWUtPmxvYWRlcigpLT5zdG9w
QWxsTG9hZGVycygpOwogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLUVpbmFfQm9vbCBld2tf
ZnJhbWVfcmVsb2FkKEV2YXNfT2JqZWN0KiBvKQorRWluYV9Cb29sIGV3a19mcmFtZV9yZWxvYWQo
RXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJO
KG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tG
cmFtZSwgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZB
TChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOwogICAgIHNkLT5mcmFtZS0+bG9hZGVyKCktPnJlbG9h
ZCgpOwogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLUVpbmFfQm9vbCBld2tfZnJhbWVfcmVs
b2FkX2Z1bGwoRXZhc19PYmplY3QqIG8pCitFaW5hX0Jvb2wgZXdrX2ZyYW1lX3JlbG9hZF9mdWxs
KEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVS
TihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdr
RnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9W
QUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKICAgICBzZC0+ZnJhbWUtPmxvYWRlcigpLT5yZWxv
YWQodHJ1ZSk7CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotRWluYV9Cb29sIGV3a19mcmFt
ZV9iYWNrKEV2YXNfT2JqZWN0KiBvKQorRWluYV9Cb29sIGV3a19mcmFtZV9iYWNrKEV2YXNfT2Jq
ZWN0KiBld2tGcmFtZSkKIHsKLSAgICByZXR1cm4gZXdrX2ZyYW1lX25hdmlnYXRlKG8sIC0xKTsK
KyAgICByZXR1cm4gZXdrX2ZyYW1lX25hdmlnYXRlKGV3a0ZyYW1lLCAtMSk7CiB9CiAKLUVpbmFf
Qm9vbCBld2tfZnJhbWVfZm9yd2FyZChFdmFzX09iamVjdCogbykKK0VpbmFfQm9vbCBld2tfZnJh
bWVfZm9yd2FyZChFdmFzX09iamVjdCogZXdrRnJhbWUpCiB7Ci0gICAgcmV0dXJuIGV3a19mcmFt
ZV9uYXZpZ2F0ZShvLCAxKTsKKyAgICByZXR1cm4gZXdrX2ZyYW1lX25hdmlnYXRlKGV3a0ZyYW1l
LCAxKTsKIH0KIAotRWluYV9Cb29sIGV3a19mcmFtZV9uYXZpZ2F0ZShFdmFzX09iamVjdCogbywg
aW50IHN0ZXBzKQorRWluYV9Cb29sIGV3a19mcmFtZV9uYXZpZ2F0ZShFdmFzX09iamVjdCogZXdr
RnJhbWUsIGludCBzdGVwcykKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihvLCBz
ZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUs
IHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2Qt
PmZyYW1lLCBFSU5BX0ZBTFNFKTsKICAgICBXZWJDb3JlOjpQYWdlKiBwYWdlID0gc2QtPmZyYW1l
LT5wYWdlKCk7CiAgICAgaWYgKCFwYWdlLT5jYW5Hb0JhY2tPckZvcndhcmQoc3RlcHMpKQpAQCAt
NTk0LDI3ICs1OTQsMjcgQEAgRWluYV9Cb29sIGV3a19mcmFtZV9uYXZpZ2F0ZShFdmFzX09iamVj
dCogbywgaW50IHN0ZXBzKQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLUVpbmFfQm9vbCBl
d2tfZnJhbWVfYmFja19wb3NzaWJsZShFdmFzX09iamVjdCogbykKK0VpbmFfQm9vbCBld2tfZnJh
bWVfYmFja19wb3NzaWJsZShFdmFzX09iamVjdCogZXdrRnJhbWUpCiB7Ci0gICAgcmV0dXJuIGV3
a19mcmFtZV9uYXZpZ2F0ZV9wb3NzaWJsZShvLCAtMSk7CisgICAgcmV0dXJuIGV3a19mcmFtZV9u
YXZpZ2F0ZV9wb3NzaWJsZShld2tGcmFtZSwgLTEpOwogfQogCi1FaW5hX0Jvb2wgZXdrX2ZyYW1l
X2ZvcndhcmRfcG9zc2libGUoRXZhc19PYmplY3QqIG8pCitFaW5hX0Jvb2wgZXdrX2ZyYW1lX2Zv
cndhcmRfcG9zc2libGUoRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewotICAgIHJldHVybiBld2tf
ZnJhbWVfbmF2aWdhdGVfcG9zc2libGUobywgMSk7CisgICAgcmV0dXJuIGV3a19mcmFtZV9uYXZp
Z2F0ZV9wb3NzaWJsZShld2tGcmFtZSwgMSk7CiB9CiAKLUVpbmFfQm9vbCBld2tfZnJhbWVfbmF2
aWdhdGVfcG9zc2libGUoRXZhc19PYmplY3QqIG8sIGludCBzdGVwcykKK0VpbmFfQm9vbCBld2tf
ZnJhbWVfbmF2aWdhdGVfcG9zc2libGUoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBpbnQgc3RlcHMp
CiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOwor
ICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7
CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxT
RSk7CiAgICAgV2ViQ29yZTo6UGFnZSogcGFnZSA9IHNkLT5mcmFtZS0+cGFnZSgpOwogICAgIHJl
dHVybiBwYWdlLT5jYW5Hb0JhY2tPckZvcndhcmQoc3RlcHMpOwogfQogCi1mbG9hdCBld2tfZnJh
bWVfem9vbV9nZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCitmbG9hdCBld2tfZnJhbWVfem9vbV9n
ZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRf
T1JfUkVUVVJOKG8sIHNkLCAtMS4wKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihl
d2tGcmFtZSwgc2QsIC0xLjApOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChz
ZC0+ZnJhbWUsIC0xLjApOwogCiAgICAgaWYgKHNkLT50ZXh0Wm9vbSkKQEAgLTYyMiw5ICs2MjIs
OSBAQCBmbG9hdCBld2tfZnJhbWVfem9vbV9nZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCiAgICAg
cmV0dXJuIHNkLT5mcmFtZS0+cGFnZVpvb21GYWN0b3IoKTsKIH0KIAotRWluYV9Cb29sIGV3a19m
cmFtZV96b29tX3NldChFdmFzX09iamVjdCogbywgZmxvYXQgem9vbSkKK0VpbmFfQm9vbCBld2tf
ZnJhbWVfem9vbV9zZXQoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBmbG9hdCB6b29tKQogewotICAg
IEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tf
RlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOwogICAg
IGlmIChzZC0+dGV4dFpvb20pCiAgICAgICAgIHNkLT5mcmFtZS0+c2V0VGV4dFpvb21GYWN0b3Io
em9vbSk7CkBAIC02MzMsMTUgKzYzMywxNSBAQCBFaW5hX0Jvb2wgZXdrX2ZyYW1lX3pvb21fc2V0
KEV2YXNfT2JqZWN0KiBvLCBmbG9hdCB6b29tKQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAK
LUVpbmFfQm9vbCBld2tfZnJhbWVfem9vbV90ZXh0X29ubHlfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0
KiBvKQorRWluYV9Cb29sIGV3a19mcmFtZV96b29tX3RleHRfb25seV9nZXQoY29uc3QgRXZhc19P
YmplY3QqIGV3a0ZyYW1lKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNk
LCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwg
c2QsIEVJTkFfRkFMU0UpOwogICAgIHJldHVybiBzZC0+dGV4dFpvb207CiB9CiAKLUVpbmFfQm9v
bCBld2tfZnJhbWVfem9vbV90ZXh0X29ubHlfc2V0KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wg
c2V0dGluZykKK0VpbmFfQm9vbCBld2tfZnJhbWVfem9vbV90ZXh0X29ubHlfc2V0KEV2YXNfT2Jq
ZWN0KiBld2tGcmFtZSwgRWluYV9Cb29sIHNldHRpbmcpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dF
VF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1Jf
UkVUVVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7CiAgICAgaWYgKHNkLT50ZXh0Wm9v
bSA9PSBzZXR0aW5nKQogICAgICAgICByZXR1cm4gRUlOQV9UUlVFOwpAQCAtNjY4LDkgKzY2OCw5
IEBAIHZvaWQgZXdrX2ZyYW1lX2hpdF90ZXN0X2ZyZWUoRXdrX0hpdF9UZXN0KiBoaXRfdGVzdCkK
ICAgICBmcmVlKGhpdF90ZXN0KTsKIH0KIAotRXdrX0hpdF9UZXN0KiBld2tfZnJhbWVfaGl0X3Rl
c3RfbmV3KGNvbnN0IEV2YXNfT2JqZWN0KiBvLCBpbnQgeCwgaW50IHkpCitFd2tfSGl0X1Rlc3Qq
IGV3a19mcmFtZV9oaXRfdGVzdF9uZXcoY29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBpbnQg
eCwgaW50IHkpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIDApOwor
ICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgMCk7CiAgICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgMCk7CiAKICAgICBXZWJDb3Jl
OjpGcmFtZVZpZXcqIHZpZXcgPSBzZC0+ZnJhbWUtPnZpZXcoKTsKQEAgLTc0MSw5ICs3NDEsOSBA
QCBFd2tfSGl0X1Rlc3QqIGV3a19mcmFtZV9oaXRfdGVzdF9uZXcoY29uc3QgRXZhc19PYmplY3Qq
IG8sIGludCB4LCBpbnQgeSkKIH0KIAogRWluYV9Cb29sCi1ld2tfZnJhbWVfc2Nyb2xsX2FkZChF
dmFzX09iamVjdCogbywgaW50IGR4LCBpbnQgZHkpCitld2tfZnJhbWVfc2Nyb2xsX2FkZChFdmFz
X09iamVjdCogZXdrRnJhbWUsIGludCBkeCwgaW50IGR5KQogewotICAgIEVXS19GUkFNRV9TRF9H
RVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09S
X1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUtPnZpZXcoKSwgRUlOQV9GQUxTRSk7CiAgICAgc2Qt
PmZyYW1lLT52aWV3KCktPnNjcm9sbEJ5KFdlYkNvcmU6OkludFNpemUoZHgsIGR5KSk7CkBAIC03
NTEsOSArNzUxLDkgQEAgZXdrX2ZyYW1lX3Njcm9sbF9hZGQoRXZhc19PYmplY3QqIG8sIGludCBk
eCwgaW50IGR5KQogfQogCiBFaW5hX0Jvb2wKLWV3a19mcmFtZV9zY3JvbGxfc2V0KEV2YXNfT2Jq
ZWN0KiBvLCBpbnQgeCwgaW50IHkpCitld2tfZnJhbWVfc2Nyb2xsX3NldChFdmFzX09iamVjdCog
ZXdrRnJhbWUsIGludCB4LCBpbnQgeSkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVS
TihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdr
RnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9W
QUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
Tl9WQUwoc2QtPmZyYW1lLT52aWV3KCksIEVJTkFfRkFMU0UpOwogICAgIHNkLT5mcmFtZS0+dmll
dygpLT5zZXRTY3JvbGxQb3NpdGlvbihXZWJDb3JlOjpJbnRQb2ludCh4LCB5KSk7CkBAIC03NjEs
MzEgKzc2MSwzMSBAQCBld2tfZnJhbWVfc2Nyb2xsX3NldChFdmFzX09iamVjdCogbywgaW50IHgs
IGludCB5KQogfQogCiBFaW5hX0Jvb2wKLWV3a19mcmFtZV9zY3JvbGxfc2l6ZV9nZXQoY29uc3Qg
RXZhc19PYmplY3QqIG8sIGludCogdywgaW50KiBoKQorZXdrX2ZyYW1lX3Njcm9sbF9zaXplX2dl
dChjb25zdCBFdmFzX09iamVjdCogZXdrRnJhbWUsIGludCogd2lkdGgsIGludCogaGVpZ2h0KQog
ewotICAgIGlmICh3KQotICAgICAgICAqdyA9IDA7Ci0gICAgaWYgKGgpCi0gICAgICAgICpoID0g
MDsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7Cisg
ICAgaWYgKHdpZHRoKQorICAgICAgICAqd2lkdGggPSAwOworICAgIGlmIChoZWlnaHQpCisgICAg
ICAgICpoZWlnaHQgPSAwOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1l
LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNk
LT5mcmFtZSwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFM
KHNkLT5mcmFtZS0+dmlldygpLCBFSU5BX0ZBTFNFKTsKICAgICBXZWJDb3JlOjpJbnRQb2ludCBw
b2ludCA9IHNkLT5mcmFtZS0+dmlldygpLT5tYXhpbXVtU2Nyb2xsUG9zaXRpb24oKTsKLSAgICBp
ZiAodykKLSAgICAgICAgKncgPSBwb2ludC54KCk7Ci0gICAgaWYgKGgpCi0gICAgICAgICpoID0g
cG9pbnQueSgpOworICAgIGlmICh3aWR0aCkKKyAgICAgICAgKndpZHRoID0gcG9pbnQueCgpOwor
ICAgIGlmIChoZWlnaHQpCisgICAgICAgICpoZWlnaHQgPSBwb2ludC55KCk7CiAgICAgcmV0dXJu
IEVJTkFfVFJVRTsKIH0KIAogRWluYV9Cb29sCi1ld2tfZnJhbWVfc2Nyb2xsX3Bvc19nZXQoY29u
c3QgRXZhc19PYmplY3QqIG8sIGludCogeCwgaW50KiB5KQorZXdrX2ZyYW1lX3Njcm9sbF9wb3Nf
Z2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgaW50KiB4LCBpbnQqIHkpCiB7CiAgICAg
aWYgKHgpCiAgICAgICAgICp4ID0gMDsKICAgICBpZiAoeSkKICAgICAgICAgKnkgPSAwOwotICAg
IEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tf
RlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOwogICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUtPnZpZXcoKSwgRUlOQV9G
QUxTRSk7CiAgICAgV2ViQ29yZTo6SW50UG9pbnQgcG9zID0gc2QtPmZyYW1lLT52aWV3KCktPnNj
cm9sbFBvc2l0aW9uKCk7CkBAIC03OTYsMTcgKzc5NiwxNyBAQCBld2tfZnJhbWVfc2Nyb2xsX3Bv
c19nZXQoY29uc3QgRXZhc19PYmplY3QqIG8sIGludCogeCwgaW50KiB5KQogICAgIHJldHVybiBF
SU5BX1RSVUU7CiB9CiAKLUVpbmFfQm9vbCBld2tfZnJhbWVfdmlzaWJsZV9jb250ZW50X2dlb21l
dHJ5X2dldChjb25zdCBFdmFzX09iamVjdCogbywgRWluYV9Cb29sIGluY2x1ZGVfc2Nyb2xsYmFy
cywgaW50KiB4LCBpbnQqIHksIGludCogdywgaW50KiBoKQorRWluYV9Cb29sIGV3a19mcmFtZV92
aXNpYmxlX2NvbnRlbnRfZ2VvbWV0cnlfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSwg
RWluYV9Cb29sIGluY2x1ZGVfc2Nyb2xsYmFycywgaW50KiB4LCBpbnQqIHksIGludCogd2lkdGgs
IGludCogaGVpZ2h0KQogewogICAgIGlmICh4KQogICAgICAgICAqeCA9IDA7CiAgICAgaWYgKHkp
CiAgICAgICAgICp5ID0gMDsKLSAgICBpZiAodykKLSAgICAgICAgKncgPSAwOwotICAgIGlmICho
KQotICAgICAgICAqaCA9IDA7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4obywgc2Qs
IEVJTkFfRkFMU0UpOworICAgIGlmICh3aWR0aCkKKyAgICAgICAgKndpZHRoID0gMDsKKyAgICBp
ZiAoaGVpZ2h0KQorICAgICAgICAqaGVpZ2h0ID0gMDsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09S
X1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUtPnZpZXcoKSwgRUlOQV9GQUxTRSk7CiAgICAgV2Vi
Q29yZTo6SW50UmVjdCByZWN0ID0gc2QtPmZyYW1lLT52aWV3KCktPnZpc2libGVDb250ZW50UmVj
dChpbmNsdWRlX3Njcm9sbGJhcnMpOwpAQCAtODE0LDEyMiArODE0LDEyMiBAQCBFaW5hX0Jvb2wg
ZXdrX2ZyYW1lX3Zpc2libGVfY29udGVudF9nZW9tZXRyeV9nZXQoY29uc3QgRXZhc19PYmplY3Qq
IG8sIEVpbmFfQm9vbAogICAgICAgICAqeCA9IHJlY3QueCgpOwogICAgIGlmICh5KQogICAgICAg
ICAqeSA9IHJlY3QueSgpOwotICAgIGlmICh3KQotICAgICAgICAqdyA9IHJlY3Qud2lkdGgoKTsK
LSAgICBpZiAoaCkKLSAgICAgICAgKmggPSByZWN0LmhlaWdodCgpOworICAgIGlmICh3aWR0aCkK
KyAgICAgICAgKndpZHRoID0gcmVjdC53aWR0aCgpOworICAgIGlmIChoZWlnaHQpCisgICAgICAg
ICpoZWlnaHQgPSByZWN0LmhlaWdodCgpOwogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLUVp
bmFfQm9vbCBld2tfZnJhbWVfcGFpbnRfZnVsbF9nZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCitF
aW5hX0Jvb2wgZXdrX2ZyYW1lX3BhaW50X2Z1bGxfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tG
cmFtZSkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxT
RSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZB
TFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5B
X0ZBTFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLT52
aWV3KCksIEVJTkFfRkFMU0UpOwogICAgIHJldHVybiBzZC0+ZnJhbWUtPnZpZXcoKS0+cGFpbnRz
RW50aXJlQ29udGVudHMoKTsKIH0KIAotdm9pZCBld2tfZnJhbWVfcGFpbnRfZnVsbF9zZXQoRXZh
c19PYmplY3QqIG8sIEVpbmFfQm9vbCBmbGFnKQordm9pZCBld2tfZnJhbWVfcGFpbnRfZnVsbF9z
ZXQoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBFaW5hX0Jvb2wgZmxhZykKIHsKLSAgICBFV0tfRlJB
TUVfU0RfR0VUX09SX1JFVFVSTihvLCBzZCk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRV
Uk4oZXdrRnJhbWUsIHNkKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+ZnJh
bWUpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5mcmFtZS0+dmlldygpKTsK
ICAgICBzZC0+ZnJhbWUtPnZpZXcoKS0+c2V0UGFpbnRzRW50aXJlQ29udGVudHMoZmxhZyk7CiB9
CiAKLUVpbmFfQm9vbCBld2tfZnJhbWVfZmVlZF9mb2N1c19pbihFdmFzX09iamVjdCogbykKK0Vp
bmFfQm9vbCBld2tfZnJhbWVfZmVlZF9mb2N1c19pbihFdmFzX09iamVjdCogZXdrRnJhbWUpCiB7
Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAg
IEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7CiAg
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7
CiAgICAgV2ViQ29yZTo6Rm9jdXNDb250cm9sbGVyKiBjID0gc2QtPmZyYW1lLT5wYWdlKCktPmZv
Y3VzQ29udHJvbGxlcigpOwogICAgIGMtPnNldEZvY3VzZWRGcmFtZShzZC0+ZnJhbWUpOwogICAg
IHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLUVpbmFfQm9vbCBld2tfZnJhbWVfZmVlZF9mb2N1c19v
dXQoRXZhc19PYmplY3QqIG8pCitFaW5hX0Jvb2wgZXdrX2ZyYW1lX2ZlZWRfZm9jdXNfb3V0KEV2
YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsKICAgICAvLyBUT0RPOiB3aGF0IHRvIGRvIG9uIGZvY3Vz
IG91dD8KICAgICBFUlIoIndoYXQgdG8gZG8/Iik7CiAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CiB9
CiAKLUVpbmFfQm9vbCBld2tfZnJhbWVfZmVlZF9tb3VzZV93aGVlbChFdmFzX09iamVjdCogbywg
Y29uc3QgRXZhc19FdmVudF9Nb3VzZV9XaGVlbCogZXYpCitFaW5hX0Jvb2wgZXdrX2ZyYW1lX2Zl
ZWRfbW91c2Vfd2hlZWwoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBjb25zdCBFdmFzX0V2ZW50X01v
dXNlX1doZWVsKiB3aGVlbEV2ZW50KQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJO
KG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tG
cmFtZSwgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZB
TChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJO
X1ZBTChldiwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFM
KHdoZWVsRXZlbnQsIEVJTkFfRkFMU0UpOwogCiAgICAgV2ViQ29yZTo6RnJhbWVWaWV3KiB2aWV3
ID0gc2QtPmZyYW1lLT52aWV3KCk7Ci0gICAgREJHKCJvPSVwLCB2aWV3PSVwLCBkaXJlY3Rpb249
JWQsIHo9JWQsIHBvcz0lZCwlZCIsCi0gICAgICAgIG8sIHZpZXcsIGV2LT5kaXJlY3Rpb24sIGV2
LT56LCBldi0+Y2FudmFzLngsIGV2LT5jYW52YXMueSk7CisgICAgREJHKCJld2tGcmFtZT0lcCwg
dmlldz0lcCwgZGlyZWN0aW9uPSVkLCB6PSVkLCBwb3M9JWQsJWQiLAorICAgICAgICBld2tGcmFt
ZSwgdmlldywgd2hlZWxFdmVudC0+ZGlyZWN0aW9uLCB3aGVlbEV2ZW50LT56LCB3aGVlbEV2ZW50
LT5jYW52YXMueCwgd2hlZWxFdmVudC0+Y2FudmFzLnkpOwogICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOX1ZBTCh2aWV3LCBFSU5BX0ZBTFNFKTsKIAotICAgIFdlYkNvcmU6OlBsYXRmb3Jt
V2hlZWxFdmVudCBldmVudChldik7CisgICAgV2ViQ29yZTo6UGxhdGZvcm1XaGVlbEV2ZW50IGV2
ZW50KHdoZWVsRXZlbnQpOwogICAgIHJldHVybiBzZC0+ZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5o
YW5kbGVXaGVlbEV2ZW50KGV2ZW50KTsKIH0KIAotRWluYV9Cb29sIGV3a19mcmFtZV9mZWVkX21v
dXNlX2Rvd24oRXZhc19PYmplY3QqIG8sIGNvbnN0IEV2YXNfRXZlbnRfTW91c2VfRG93biogZXYp
CitFaW5hX0Jvb2wgZXdrX2ZyYW1lX2ZlZWRfbW91c2VfZG93bihFdmFzX09iamVjdCogZXdrRnJh
bWUsIGNvbnN0IEV2YXNfRXZlbnRfTW91c2VfRG93biogZG93bkV2ZW50KQogewotICAgIEVXS19G
UkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfRlJBTUVf
U0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOwotICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChldiwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZF
VFlfT05fTlVMTF9SRVRVUk5fVkFMKGRvd25FdmVudCwgRUlOQV9GQUxTRSk7CiAKICAgICBXZWJD
b3JlOjpGcmFtZVZpZXcqIHZpZXcgPSBzZC0+ZnJhbWUtPnZpZXcoKTsKLSAgICBEQkcoIm89JXAs
IHZpZXc9JXAsIGJ1dHRvbj0lZCwgcG9zPSVkLCVkIiwKLSAgICAgICAgbywgdmlldywgZXYtPmJ1
dHRvbiwgZXYtPmNhbnZhcy54LCBldi0+Y2FudmFzLnkpOworICAgIERCRygiZXdrRnJhbWU9JXAs
IHZpZXc9JXAsIGJ1dHRvbj0lZCwgcG9zPSVkLCVkIiwKKyAgICAgICAgZXdrRnJhbWUsIHZpZXcs
IGRvd25FdmVudC0+YnV0dG9uLCBkb3duRXZlbnQtPmNhbnZhcy54LCBkb3duRXZlbnQtPmNhbnZh
cy55KTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodmlldywgRUlOQV9GQUxT
RSk7CiAKICAgICBFdmFzX0Nvb3JkIHgsIHk7CiAgICAgZXZhc19vYmplY3RfZ2VvbWV0cnlfZ2V0
KHNkLT52aWV3LCAmeCwgJnksIDAsIDApOwogCi0gICAgV2ViQ29yZTo6UGxhdGZvcm1Nb3VzZUV2
ZW50IGV2ZW50KGV2LCBXZWJDb3JlOjpJbnRQb2ludCh4LCB5KSk7CisgICAgV2ViQ29yZTo6UGxh
dGZvcm1Nb3VzZUV2ZW50IGV2ZW50KGRvd25FdmVudCwgV2ViQ29yZTo6SW50UG9pbnQoeCwgeSkp
OwogICAgIHJldHVybiBzZC0+ZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5oYW5kbGVNb3VzZVByZXNz
RXZlbnQoZXZlbnQpOwogfQogCi1FaW5hX0Jvb2wgZXdrX2ZyYW1lX2ZlZWRfbW91c2VfdXAoRXZh
c19PYmplY3QqIG8sIGNvbnN0IEV2YXNfRXZlbnRfTW91c2VfVXAqIGV2KQorRWluYV9Cb29sIGV3
a19mcmFtZV9mZWVkX21vdXNlX3VwKEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgY29uc3QgRXZhc19F
dmVudF9Nb3VzZV9VcCogdXBFdmVudCkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVS
TihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdr
RnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9W
QUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
Tl9WQUwoZXYsIEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZB
TCh1cEV2ZW50LCBFSU5BX0ZBTFNFKTsKIAogICAgIFdlYkNvcmU6OkZyYW1lVmlldyogdmlldyA9
IHNkLT5mcmFtZS0+dmlldygpOwotICAgIERCRygibz0lcCwgdmlldz0lcCwgYnV0dG9uPSVkLCBw
b3M9JWQsJWQiLAotICAgICAgICBvLCB2aWV3LCBldi0+YnV0dG9uLCBldi0+Y2FudmFzLngsIGV2
LT5jYW52YXMueSk7CisgICAgREJHKCJld2tGcmFtZT0lcCwgdmlldz0lcCwgYnV0dG9uPSVkLCBw
b3M9JWQsJWQiLAorICAgICAgICBld2tGcmFtZSwgdmlldywgdXBFdmVudC0+YnV0dG9uLCB1cEV2
ZW50LT5jYW52YXMueCwgdXBFdmVudC0+Y2FudmFzLnkpOwogICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOX1ZBTCh2aWV3LCBFSU5BX0ZBTFNFKTsKIAogICAgIEV2YXNfQ29vcmQgeCwgeTsK
ICAgICBldmFzX29iamVjdF9nZW9tZXRyeV9nZXQoc2QtPnZpZXcsICZ4LCAmeSwgMCwgMCk7CiAK
LSAgICBXZWJDb3JlOjpQbGF0Zm9ybU1vdXNlRXZlbnQgZXZlbnQoZXYsIFdlYkNvcmU6OkludFBv
aW50KHgsIHkpKTsKKyAgICBXZWJDb3JlOjpQbGF0Zm9ybU1vdXNlRXZlbnQgZXZlbnQodXBFdmVu
dCwgV2ViQ29yZTo6SW50UG9pbnQoeCwgeSkpOwogICAgIHJldHVybiBzZC0+ZnJhbWUtPmV2ZW50
SGFuZGxlcigpLT5oYW5kbGVNb3VzZVJlbGVhc2VFdmVudChldmVudCk7CiB9CiAKLUVpbmFfQm9v
bCBld2tfZnJhbWVfZmVlZF9tb3VzZV9tb3ZlKEV2YXNfT2JqZWN0KiBvLCBjb25zdCBFdmFzX0V2
ZW50X01vdXNlX01vdmUqIGV2KQorRWluYV9Cb29sIGV3a19mcmFtZV9mZWVkX21vdXNlX21vdmUo
RXZhc19PYmplY3QqIGV3a0ZyYW1lLCBjb25zdCBFdmFzX0V2ZW50X01vdXNlX01vdmUqIG1vdmVF
dmVudCkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxT
RSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZB
TFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5B
X0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZXYsIEVJTkFfRkFM
U0UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChtb3ZlRXZlbnQsIEVJTkFf
RkFMU0UpOwogCiAgICAgV2ViQ29yZTo6RnJhbWVWaWV3KiB2aWV3ID0gc2QtPmZyYW1lLT52aWV3
KCk7Ci0gICAgREJHKCJvPSVwLCB2aWV3PSVwLCBwb3M6IG9sZD0lZCwlZCwgbmV3PSVkLCVkLCBi
dXR0b25zPSVkIiwKLSAgICAgICAgbywgdmlldywgZXYtPmN1ci5jYW52YXMueCwgZXYtPmN1ci5j
YW52YXMueSwKLSAgICAgICAgZXYtPnByZXYuY2FudmFzLngsIGV2LT5wcmV2LmNhbnZhcy55LCBl
di0+YnV0dG9ucyk7CisgICAgREJHKCJld2tGcmFtZT0lcCwgdmlldz0lcCwgcG9zOiBvbGQ9JWQs
JWQsIG5ldz0lZCwlZCwgYnV0dG9ucz0lZCIsCisgICAgICAgIGV3a0ZyYW1lLCB2aWV3LCBtb3Zl
RXZlbnQtPmN1ci5jYW52YXMueCwgbW92ZUV2ZW50LT5jdXIuY2FudmFzLnksCisgICAgICAgIG1v
dmVFdmVudC0+cHJldi5jYW52YXMueCwgbW92ZUV2ZW50LT5wcmV2LmNhbnZhcy55LCBtb3ZlRXZl
bnQtPmJ1dHRvbnMpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh2aWV3LCBF
SU5BX0ZBTFNFKTsKIAogICAgIEV2YXNfQ29vcmQgeCwgeTsKICAgICBldmFzX29iamVjdF9nZW9t
ZXRyeV9nZXQoc2QtPnZpZXcsICZ4LCAmeSwgMCwgMCk7CiAKLSAgICBXZWJDb3JlOjpQbGF0Zm9y
bU1vdXNlRXZlbnQgZXZlbnQoZXYsIFdlYkNvcmU6OkludFBvaW50KHgsIHkpKTsKKyAgICBXZWJD
b3JlOjpQbGF0Zm9ybU1vdXNlRXZlbnQgZXZlbnQobW92ZUV2ZW50LCBXZWJDb3JlOjpJbnRQb2lu
dCh4LCB5KSk7CiAgICAgcmV0dXJuIHNkLT5mcmFtZS0+ZXZlbnRIYW5kbGVyKCktPm1vdXNlTW92
ZWQoZXZlbnQpOwogfQogCi1FaW5hX0Jvb2wgZXdrX2ZyYW1lX2ZlZWRfdG91Y2hfZXZlbnQoRXZh
c19PYmplY3QqIG8sIEV3a19Ub3VjaF9FdmVudF9UeXBlIGFjdGlvbiwgRWluYV9MaXN0KiBwb2lu
dHMsIGludCBtZXRhU3RhdGUpCitFaW5hX0Jvb2wgZXdrX2ZyYW1lX2ZlZWRfdG91Y2hfZXZlbnQo
RXZhc19PYmplY3QqIGV3a0ZyYW1lLCBFd2tfVG91Y2hfRXZlbnRfVHlwZSBhY3Rpb24sIEVpbmFf
TGlzdCogcG9pbnRzLCBpbnQgbWV0YVN0YXRlKQogewogICAgIEVpbmFfQm9vbCByZXQgPSBFSU5B
X0ZBTFNFOwogCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKICAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTl9WQUwocG9pbnRzLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfRlJBTUVfU0RfR0VU
KG8sIHNkKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUKGV3a0ZyYW1lLCBzZCk7CiAKICAgICBpZiAo
IXNkIHx8ICFzZC0+ZnJhbWUgfHwgIWV3a192aWV3X25lZWRfdG91Y2hfZXZlbnRzX2dldChzZC0+
dmlldykpCiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwpAQCAtMTAyNSwzOCArMTAyNSwzOCBA
QCBzdGF0aWMgaW5saW5lIEVpbmFfQm9vbCBfZXdrX2ZyYW1lX2hhbmRsZV9rZXlfc2Nyb2xsaW5n
KFdlYkNvcmU6OkZyYW1lKiBmcmFtZSwgYwogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLUVp
bmFfQm9vbCBld2tfZnJhbWVfZmVlZF9rZXlfZG93bihFdmFzX09iamVjdCogbywgY29uc3QgRXZh
c19FdmVudF9LZXlfRG93biogZXYpCitFaW5hX0Jvb2wgZXdrX2ZyYW1lX2ZlZWRfa2V5X2Rvd24o
RXZhc19PYmplY3QqIGV3a0ZyYW1lLCBjb25zdCBFdmFzX0V2ZW50X0tleV9Eb3duKiBkb3duRXZl
bnQpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0Up
OworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxT
RSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9G
QUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGV2LCBFSU5BX0ZBTFNF
KTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZG93bkV2ZW50LCBFSU5BX0ZB
TFNFKTsKIAotICAgIERCRygibz0lcCBrZXluYW1lPSVzIChrZXk9JXMsIHN0cmluZz0lcykiLAot
ICAgICAgICBvLCBldi0+a2V5bmFtZSwgZXYtPmtleSA/IGV2LT5rZXkgOiAiIiwgZXYtPnN0cmlu
ZyA/IGV2LT5zdHJpbmcgOiAiIik7CisgICAgREJHKCJld2tGcmFtZT0lcCBrZXluYW1lPSVzIChr
ZXk9JXMsIHN0cmluZz0lcykiLAorICAgICAgICBld2tGcmFtZSwgZG93bkV2ZW50LT5rZXluYW1l
LCBkb3duRXZlbnQtPmtleSA/IGRvd25FdmVudC0+a2V5IDogIiIsIGRvd25FdmVudC0+c3RyaW5n
ID8gZG93bkV2ZW50LT5zdHJpbmcgOiAiIik7CiAKLSAgICBXZWJDb3JlOjpQbGF0Zm9ybUtleWJv
YXJkRXZlbnQgZXZlbnQoZXYpOworICAgIFdlYkNvcmU6OlBsYXRmb3JtS2V5Ym9hcmRFdmVudCBl
dmVudChkb3duRXZlbnQpOwogICAgIGlmIChzZC0+ZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5rZXlF
dmVudChldmVudCkpCiAgICAgICAgIHJldHVybiBFSU5BX1RSVUU7CiAKICAgICByZXR1cm4gX2V3
a19mcmFtZV9oYW5kbGVfa2V5X3Njcm9sbGluZyhzZC0+ZnJhbWUsIGV2ZW50KTsKIH0KIAotRWlu
YV9Cb29sIGV3a19mcmFtZV9mZWVkX2tleV91cChFdmFzX09iamVjdCogbywgY29uc3QgRXZhc19F
dmVudF9LZXlfVXAqIGV2KQorRWluYV9Cb29sIGV3a19mcmFtZV9mZWVkX2tleV91cChFdmFzX09i
amVjdCogZXdrRnJhbWUsIGNvbnN0IEV2YXNfRXZlbnRfS2V5X1VwKiB1cEV2ZW50KQogewotICAg
IEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tf
RlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOwotICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChldiwgRUlOQV9GQUxTRSk7CisgICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHVwRXZlbnQsIEVJTkFfRkFMU0UpOwogCi0gICAg
REJHKCJvPSVwIGtleW5hbWU9JXMgKGtleT0lcywgc3RyaW5nPSVzKSIsCi0gICAgICAgIG8sIGV2
LT5rZXluYW1lLCBldi0+a2V5ID8gZXYtPmtleSA6ICIiLCBldi0+c3RyaW5nID8gZXYtPnN0cmlu
ZyA6ICIiKTsKKyAgICBEQkcoImV3a0ZyYW1lPSVwIGtleW5hbWU9JXMgKGtleT0lcywgc3RyaW5n
PSVzKSIsCisgICAgICAgIGV3a0ZyYW1lLCB1cEV2ZW50LT5rZXluYW1lLCB1cEV2ZW50LT5rZXkg
PyB1cEV2ZW50LT5rZXkgOiAiIiwgdXBFdmVudC0+c3RyaW5nID8gdXBFdmVudC0+c3RyaW5nIDog
IiIpOwogCi0gICAgV2ViQ29yZTo6UGxhdGZvcm1LZXlib2FyZEV2ZW50IGV2ZW50KGV2KTsKKyAg
ICBXZWJDb3JlOjpQbGF0Zm9ybUtleWJvYXJkRXZlbnQgZXZlbnQodXBFdmVudCk7CiAgICAgcmV0
dXJuIHNkLT5mcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmtleUV2ZW50KGV2ZW50KTsKIH0KIAotRXdr
X1RleHRfU2VsZWN0aW9uX1R5cGUgZXdrX2ZyYW1lX3RleHRfc2VsZWN0aW9uX3R5cGVfZ2V0KGNv
bnN0IEV2YXNfT2JqZWN0KiBvKQorRXdrX1RleHRfU2VsZWN0aW9uX1R5cGUgZXdrX2ZyYW1lX3Rl
eHRfc2VsZWN0aW9uX3R5cGVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsKLSAg
ICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRVdLX1RFWFRfU0VMRUNUSU9OX05P
TkUpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgRVdLX1RF
WFRfU0VMRUNUSU9OX05PTkUpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChz
ZC0+ZnJhbWUsIEVXS19URVhUX1NFTEVDVElPTl9OT05FKTsKIAogICAgIFdlYkNvcmU6OkZyYW1l
U2VsZWN0aW9uKiBjb250cm9sbGVyID0gc2QtPmZyYW1lLT5zZWxlY3Rpb24oKTsKQEAgLTEwODQs
MTMgKzEwODQsMTMgQEAgRXdrX1RleHRfU2VsZWN0aW9uX1R5cGUgZXdrX2ZyYW1lX3RleHRfc2Vs
ZWN0aW9uX3R5cGVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQogICogYnkgYSB2aWV3LiBVc3Vh
bGx5IG9uZSBvcGVyYXRlcyBvbiB0aGUgdmlldyBhbmQgbm90IGRpcmVjdGx5IG9uIHRoZQogICog
ZnJhbWUuCiAgKgotICogQHBhcmFtIGUgY2FudmFzIHdoZXJlIHRvIGNyZWF0ZSB0aGUgZnJhbWUg
b2JqZWN0CisgKiBAcGFyYW0gY2FudmFzIGNhbnZhcyB3aGVyZSB0byBjcmVhdGUgdGhlIGZyYW1l
IG9iamVjdAogICoKICAqIEByZXR1cm4gYSBuZXcgZnJhbWUgb2JqZWN0IG9yIEBjIDAgb24gZmFp
bHVyZQogICovCi1FdmFzX09iamVjdCogZXdrX2ZyYW1lX2FkZChFdmFzKiBlKQorRXZhc19PYmpl
Y3QqIGV3a19mcmFtZV9hZGQoRXZhcyogY2FudmFzKQogewotICAgIHJldHVybiBldmFzX29iamVj
dF9zbWFydF9hZGQoZSwgX2V3a19mcmFtZV9zbWFydF9jbGFzc19uZXcoKSk7CisgICAgcmV0dXJu
IGV2YXNfb2JqZWN0X3NtYXJ0X2FkZChjYW52YXMsIF9ld2tfZnJhbWVfc21hcnRfY2xhc3NfbmV3
KCkpOwogfQogCiAvKioKQEAgLTExMDAsMTIgKzExMDAsMTIgQEAgRXZhc19PYmplY3QqIGV3a19m
cmFtZV9hZGQoRXZhcyogZSkKICAqCiAgKiBUaGlzIGlzIGludGVybmFsIGFuZCBzaG91bGQgbmV2
ZXIgYmUgY2FsbGVkIGJ5IGV4dGVybmFsIHVzZXJzLgogICovCi1FaW5hX0Jvb2wgZXdrX2ZyYW1l
X2luaXQoRXZhc19PYmplY3QqIG8sIEV2YXNfT2JqZWN0KiB2aWV3LCBXZWJDb3JlOjpGcmFtZSog
ZnJhbWUpCitFaW5hX0Jvb2wgZXdrX2ZyYW1lX2luaXQoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBF
dmFzX09iamVjdCogdmlldywgV2ViQ29yZTo6RnJhbWUqIGZyYW1lKQogewotICAgIEVXS19GUkFN
RV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfRlJBTUVfU0Rf
R0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOwogICAgIGlmICghc2QtPmZy
YW1lKSB7CiAgICAgICAgIFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50RWZsKiBmbGMgPSBfZXdr
X2ZyYW1lX2xvYWRlcl9lZmxfZ2V0KGZyYW1lKTsKLSAgICAgICAgZmxjLT5zZXRXZWJGcmFtZShv
KTsKKyAgICAgICAgZmxjLT5zZXRXZWJGcmFtZShld2tGcmFtZSk7CiAgICAgICAgIHNkLT5mcmFt
ZSA9IGZyYW1lOwogICAgICAgICBzZC0+dmlldyA9IHZpZXc7CiAgICAgICAgIGZyYW1lLT5pbml0
KCk7CkBAIC0xMTEzLDcgKzExMTMsNyBAQCBFaW5hX0Jvb2wgZXdrX2ZyYW1lX2luaXQoRXZhc19P
YmplY3QqIG8sIEV2YXNfT2JqZWN0KiB2aWV3LCBXZWJDb3JlOjpGcmFtZSogZnJhbQogICAgIH0K
IAogICAgIEVSUigiZnJhbWUgJXAgYWxyZWFkeSBzZXQgZm9yICVwLCBpZ25vcmVkIG5ldyAlcCIs
Ci0gICAgICAgIHNkLT5mcmFtZSwgbywgZnJhbWUpOworICAgICAgICBzZC0+ZnJhbWUsIGV3a0Zy
YW1lLCBmcmFtZSk7CiAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CiB9CiAKQEAgLTExMjIsOSArMTEy
Miw5IEBAIEVpbmFfQm9vbCBld2tfZnJhbWVfaW5pdChFdmFzX09iamVjdCogbywgRXZhc19PYmpl
Y3QqIHZpZXcsIFdlYkNvcmU6OkZyYW1lKiBmcmFtCiAgKgogICogQWRkcyBjaGlsZCB0byB0aGUg
ZnJhbWUuCiAgKi8KLUVpbmFfQm9vbCBld2tfZnJhbWVfY2hpbGRfYWRkKEV2YXNfT2JqZWN0KiBv
LCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6RnJhbWU+IGNoaWxkLCBjb25zdCBXVEY6OlN0cmlu
ZyYgbmFtZSwgY29uc3QgV2ViQ29yZTo6S1VSTCYgdXJsLCBjb25zdCBXVEY6OlN0cmluZyYgcmVm
ZXJyZXIpCitFaW5hX0Jvb2wgZXdrX2ZyYW1lX2NoaWxkX2FkZChFdmFzX09iamVjdCogZXdrRnJh
bWUsIFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpGcmFtZT4gY2hpbGQsIGNvbnN0IFdURjo6U3Ry
aW5nJiBuYW1lLCBjb25zdCBXZWJDb3JlOjpLVVJMJiB1cmwsIGNvbnN0IFdURjo6U3RyaW5nJiBy
ZWZlcnJlcikKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgMCk7Cisg
ICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCAwKTsKICAgICBjaGFy
IGJ1ZlsyNTZdOwogICAgIEV2YXNfT2JqZWN0KiBmcmFtZTsKICAgICBXZWJDb3JlOjpGcmFtZSog
Y2Y7CkBAIC0xMTQ4LDcgKzExNDgsNyBAQCBFaW5hX0Jvb2wgZXdrX2ZyYW1lX2NoaWxkX2FkZChF
dmFzX09iamVjdCogbywgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkZyYW1lPiBjaAogICAgIH0K
ICAgICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiRVdLX0ZyYW1lOmNoaWxkLyVzIiwgbmFt
ZS51dGY4KCkuZGF0YSgpKTsKICAgICBldmFzX29iamVjdF9uYW1lX3NldChmcmFtZSwgYnVmKTsK
LSAgICBldmFzX29iamVjdF9zbWFydF9tZW1iZXJfYWRkKGZyYW1lLCBvKTsKKyAgICBldmFzX29i
amVjdF9zbWFydF9tZW1iZXJfYWRkKGZyYW1lLCBld2tGcmFtZSk7CiAgICAgZXZhc19vYmplY3Rf
c2hvdyhmcmFtZSk7CiAKICAgICAvLyBUaGUgY3JlYXRpb24gb2YgdGhlIGZyYW1lIG1heSBoYXZl
IHJ1biBhcmJpdHJhcnkgSmF2YVNjcmlwdCB0aGF0IHJlbW92ZWQgaXQgZnJvbSB0aGUgcGFnZSBh
bHJlYWR5LgpAQCAtMTE3NywxMiArMTE3NywxMiBAQCBFaW5hX0Jvb2wgZXdrX2ZyYW1lX2NoaWxk
X2FkZChFdmFzX09iamVjdCogbywgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkZyYW1lPiBjaAog
ICogQHBhcmFtIG8gVGhlIGV3ayBmcmFtZSB0byBhY3QgdXBvbi4KICAqIEBwYXJhbSBuZXdQYXJl
bnQgVGhlIG5ldyB2aWV3IHRoYXQgd2lsbCBiZSBzZXQgYXMgdGhlIHBhcmVudCBvZiB0aGUgZnJh
bWUuCiAgKi8KLXZvaWQgZXdrX2ZyYW1lX3ZpZXdfc2V0KEV2YXNfT2JqZWN0KiBvLCBFdmFzX09i
amVjdCogbmV3UGFyZW50KQordm9pZCBld2tfZnJhbWVfdmlld19zZXQoRXZhc19PYmplY3QqIGV3
a0ZyYW1lLCBFdmFzX09iamVjdCogbmV3UGFyZW50KQogewotICAgIEVXS19GUkFNRV9TRF9HRVRf
T1JfUkVUVVJOKG8sIHNkKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFt
ZSwgc2QpOwogCi0gICAgZXZhc19vYmplY3Rfc21hcnRfbWVtYmVyX2RlbChvKTsKLSAgICBldmFz
X29iamVjdF9zbWFydF9tZW1iZXJfYWRkKG8sIG5ld1BhcmVudCk7CisgICAgZXZhc19vYmplY3Rf
c21hcnRfbWVtYmVyX2RlbChld2tGcmFtZSk7CisgICAgZXZhc19vYmplY3Rfc21hcnRfbWVtYmVy
X2FkZChld2tGcmFtZSwgbmV3UGFyZW50KTsKIAogICAgIHNkLT52aWV3ID0gbmV3UGFyZW50Owog
fQpAQCAtMTE5MSwxMCArMTE5MSwxMCBAQCB2b2lkIGV3a19mcmFtZV92aWV3X3NldChFdmFzX09i
amVjdCogbywgRXZhc19PYmplY3QqIG5ld1BhcmVudCkKICAqIEBpbnRlcm5hbAogICogRnJhbWUg
d2FzIGRlc3Ryb3llZCBieSBsb2FkZXIsIHJlbW92ZSBpbnRlcm5hbCByZWZlcmVuY2UuCiAgKi8K
LXZvaWQgZXdrX2ZyYW1lX2NvcmVfZ29uZShFdmFzX09iamVjdCogbykKK3ZvaWQgZXdrX2ZyYW1l
X2NvcmVfZ29uZShFdmFzX09iamVjdCogZXdrRnJhbWUpCiB7Ci0gICAgREJHKCJvPSVwIiwgbyk7
Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4obywgc2QpOworICAgIERCRygiZXdrRnJh
bWU9JXAiLCBld2tGcmFtZSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJh
bWUsIHNkKTsKICAgICBzZC0+ZnJhbWUgPSAwOwogfQogCkBAIC0xMjA1LDkgKzEyMDUsOSBAQCB2
b2lkIGV3a19mcmFtZV9jb3JlX2dvbmUoRXZhc19PYmplY3QqIG8pCiAgKiBBdm9pZCB1c2luZyB0
aGlzIGNhbGwgZnJvbSBvdXRzaWRlLCBhZGQgc3BlY2lmaWMgZXdrX2ZyYW1lXyoKICAqIGFjdGlv
bnMgaW5zdGVhZC4KICAqLwotV2ViQ29yZTo6RnJhbWUqIGV3a19mcmFtZV9jb3JlX2dldChjb25z
dCBFdmFzX09iamVjdCogbykKK1dlYkNvcmU6OkZyYW1lKiBld2tfZnJhbWVfY29yZV9nZXQoY29u
c3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVU
VVJOKG8sIHNkLCAwKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwg
c2QsIDApOwogICAgIHJldHVybiBzZC0+ZnJhbWU7CiB9CiAKQEAgLTEyMjQsOSArMTIyNCw5IEBA
IFdlYkNvcmU6OkZyYW1lKiBld2tfZnJhbWVfY29yZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIG8p
CiAgKgogICogRW1pdHMgc2lnbmFsOiAicmVzb3VyY2UscmVxdWVzdCx3aWxsc2VuZCIKICAqLwot
dm9pZCBld2tfZnJhbWVfcmVxdWVzdF93aWxsX3NlbmQoRXZhc19PYmplY3QqIG8sIEV3a19GcmFt
ZV9SZXNvdXJjZV9SZXF1ZXN0KiByZXF1ZXN0KQordm9pZCBld2tfZnJhbWVfcmVxdWVzdF93aWxs
X3NlbmQoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBFd2tfRnJhbWVfUmVzb3VyY2VfUmVxdWVzdCog
cmVxdWVzdCkKIHsKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKG8sICJyZXNv
dXJjZSxyZXF1ZXN0LHdpbGxzZW5kIiwgcmVxdWVzdCk7CisgICAgZXZhc19vYmplY3Rfc21hcnRf
Y2FsbGJhY2tfY2FsbChld2tGcmFtZSwgInJlc291cmNlLHJlcXVlc3Qsd2lsbHNlbmQiLCByZXF1
ZXN0KTsKIH0KIAogLyoqCkBAIC0xMjM4LDkgKzEyMzgsOSBAQCB2b2lkIGV3a19mcmFtZV9yZXF1
ZXN0X3dpbGxfc2VuZChFdmFzX09iamVjdCogbywgRXdrX0ZyYW1lX1Jlc291cmNlX1JlcXVlc3Qq
IHJlcQogICoKICAqIEVtaXRzIHNpZ25hbDogInJlc291cmNlLHJlcXVlc3QsbmV3IgogICovCi12
b2lkIGV3a19mcmFtZV9yZXF1ZXN0X2Fzc2lnbl9pZGVudGlmaWVyKEV2YXNfT2JqZWN0KiBvLCBj
b25zdCBFd2tfRnJhbWVfUmVzb3VyY2VfUmVxdWVzdCogcmVxdWVzdCkKK3ZvaWQgZXdrX2ZyYW1l
X3JlcXVlc3RfYXNzaWduX2lkZW50aWZpZXIoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBjb25zdCBF
d2tfRnJhbWVfUmVzb3VyY2VfUmVxdWVzdCogcmVxdWVzdCkKIHsKLSAgICBldmFzX29iamVjdF9z
bWFydF9jYWxsYmFja19jYWxsKG8sICJyZXNvdXJjZSxyZXF1ZXN0LG5ldyIsICh2b2lkKilyZXF1
ZXN0KTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKGV3a0ZyYW1lLCAicmVz
b3VyY2UscmVxdWVzdCxuZXciLCAodm9pZCopcmVxdWVzdCk7CiB9CiAKIC8qKgpAQCAtMTI1MSw5
ICsxMjUxLDkgQEAgdm9pZCBld2tfZnJhbWVfcmVxdWVzdF9hc3NpZ25faWRlbnRpZmllcihFdmFz
X09iamVjdCogbywgY29uc3QgRXdrX0ZyYW1lX1Jlc291cmMKICAqCiAgKiBFbWl0cyBzaWduYWw6
ICJuYXZpZ2F0aW9uLGZpcnN0IgogICovCi12b2lkIGV3a19mcmFtZV9kaWRfcGVyZm9ybV9maXJz
dF9uYXZpZ2F0aW9uKEV2YXNfT2JqZWN0KiBvKQordm9pZCBld2tfZnJhbWVfZGlkX3BlcmZvcm1f
Zmlyc3RfbmF2aWdhdGlvbihFdmFzX09iamVjdCogZXdrRnJhbWUpCiB7Ci0gICAgZXZhc19vYmpl
Y3Rfc21hcnRfY2FsbGJhY2tfY2FsbChvLCAibmF2aWdhdGlvbixmaXJzdCIsIDApOworICAgIGV2
YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdrRnJhbWUsICJuYXZpZ2F0aW9uLGZpcnN0
IiwgMCk7CiB9CiAKIC8qKgpAQCAtMTI2NSw5ICsxMjY1LDkgQEAgdm9pZCBld2tfZnJhbWVfZGlk
X3BlcmZvcm1fZmlyc3RfbmF2aWdhdGlvbihFdmFzX09iamVjdCogbykKICAqCiAgKiBFbWl0cyBz
aWduYWw6ICJzdGF0ZSxzYXZlIgogICovCi12b2lkIGV3a19mcmFtZV92aWV3X3N0YXRlX3NhdmUo
RXZhc19PYmplY3QqIG8sIFdlYkNvcmU6Okhpc3RvcnlJdGVtKiBpdGVtKQordm9pZCBld2tfZnJh
bWVfdmlld19zdGF0ZV9zYXZlKEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgV2ViQ29yZTo6SGlzdG9y
eUl0ZW0qIGl0ZW0pCiB7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChvLCAi
c3RhdGUsc2F2ZSIsIDApOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdr
RnJhbWUsICJzdGF0ZSxzYXZlIiwgMCk7CiB9CiAKIC8qKgpAQCAtMTI3NiwxNiArMTI3NiwxNiBA
QCB2b2lkIGV3a19mcmFtZV92aWV3X3N0YXRlX3NhdmUoRXZhc19PYmplY3QqIG8sIFdlYkNvcmU6
Okhpc3RvcnlJdGVtKiBpdGVtKQogICoKICAqIEVtaXRzIHNpZ25hbDogImxvYWQsc3RhcnRlZCIg
d2l0aCBubyBwYXJhbWV0ZXJzLgogICovCi12b2lkIGV3a19mcmFtZV9sb2FkX3N0YXJ0ZWQoRXZh
c19PYmplY3QqIG8pCit2b2lkIGV3a19mcmFtZV9sb2FkX3N0YXJ0ZWQoRXZhc19PYmplY3QqIGV3
a0ZyYW1lKQogewogICAgIEV2YXNfT2JqZWN0KiBtYWluX2ZyYW1lOwotICAgIERCRygibz0lcCIs
IG8pOwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwobywgImxvYWQsc3RhcnRl
ZCIsIDApOwotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkKTsKKyAgICBEQkco
ImV3a0ZyYW1lPSVwIiwgZXdrRnJhbWUpOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNr
X2NhbGwoZXdrRnJhbWUsICJsb2FkLHN0YXJ0ZWQiLCAwKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VU
X09SX1JFVFVSTihld2tGcmFtZSwgc2QpOwogICAgIGV3a192aWV3X2xvYWRfc3RhcnRlZChzZC0+
dmlldyk7CiAKICAgICBtYWluX2ZyYW1lID0gZXdrX3ZpZXdfZnJhbWVfbWFpbl9nZXQoc2QtPnZp
ZXcpOwotICAgIGlmIChtYWluX2ZyYW1lID09IG8pCisgICAgaWYgKG1haW5fZnJhbWUgPT0gZXdr
RnJhbWUpCiAgICAgICAgIGV3a192aWV3X2ZyYW1lX21haW5fbG9hZF9zdGFydGVkKHNkLT52aWV3
KTsKIH0KIApAQCAtMTI5Nyw5ICsxMjk3LDkgQEAgdm9pZCBld2tfZnJhbWVfbG9hZF9zdGFydGVk
KEV2YXNfT2JqZWN0KiBvKQogICoKICAqIEVtaXRzIHNpZ25hbDogImxvYWQscHJvdmlzaW9uYWwi
IHdpdGggbm8gcGFyYW1ldGVycy4KICAqLwotdm9pZCBld2tfZnJhbWVfbG9hZF9wcm92aXNpb25h
bChFdmFzX09iamVjdCogbykKK3ZvaWQgZXdrX2ZyYW1lX2xvYWRfcHJvdmlzaW9uYWwoRXZhc19P
YmplY3QqIGV3a0ZyYW1lKQogewotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwo
bywgImxvYWQscHJvdmlzaW9uYWwiLCAwKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFj
a19jYWxsKGV3a0ZyYW1lLCAibG9hZCxwcm92aXNpb25hbCIsIDApOwogfQogCiAvKioKQEAgLTEz
MTAsOSArMTMxMCw5IEBAIHZvaWQgZXdrX2ZyYW1lX2xvYWRfcHJvdmlzaW9uYWwoRXZhc19PYmpl
Y3QqIG8pCiAgKgogICogRW1pdHMgc2lnbmFsOiAibG9hZCxmaXJzdGxheW91dCxmaW5pc2hlZCIg
d2l0aCBubyBwYXJhbWV0ZXJzLgogICovCi12b2lkIGV3a19mcmFtZV9sb2FkX2ZpcnN0bGF5b3V0
X2ZpbmlzaGVkKEV2YXNfT2JqZWN0KiBvKQordm9pZCBld2tfZnJhbWVfbG9hZF9maXJzdGxheW91
dF9maW5pc2hlZChFdmFzX09iamVjdCogZXdrRnJhbWUpCiB7Ci0gICAgZXZhc19vYmplY3Rfc21h
cnRfY2FsbGJhY2tfY2FsbChvLCAibG9hZCxmaXJzdGxheW91dCxmaW5pc2hlZCIsIDApOworICAg
IGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdrRnJhbWUsICJsb2FkLGZpcnN0bGF5
b3V0LGZpbmlzaGVkIiwgMCk7CiB9CiAKIC8qKgpAQCAtMTMyMyw5ICsxMzIzLDkgQEAgdm9pZCBl
d2tfZnJhbWVfbG9hZF9maXJzdGxheW91dF9maW5pc2hlZChFdmFzX09iamVjdCogbykKICAqCiAg
KiBFbWl0cyBzaWduYWw6ICJsb2FkLG5vbmVtcHR5bGF5b3V0LGZpbmlzaGVkIiB3aXRoIG5vIHBh
cmFtZXRlcnMuCiAgKi8KLXZvaWQgZXdrX2ZyYW1lX2xvYWRfZmlyc3RsYXlvdXRfbm9uZW1wdHlf
ZmluaXNoZWQoRXZhc19PYmplY3QqIG8pCit2b2lkIGV3a19mcmFtZV9sb2FkX2ZpcnN0bGF5b3V0
X25vbmVtcHR5X2ZpbmlzaGVkKEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsKLSAgICBldmFzX29i
amVjdF9zbWFydF9jYWxsYmFja19jYWxsKG8sICJsb2FkLG5vbmVtcHR5bGF5b3V0LGZpbmlzaGVk
IiwgMCk7CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChld2tGcmFtZSwgImxv
YWQsbm9uZW1wdHlsYXlvdXQsZmluaXNoZWQiLCAwKTsKIH0KIAogLyoqCkBAIC0xMzM2LDExICsx
MzM2LDExIEBAIHZvaWQgZXdrX2ZyYW1lX2xvYWRfZmlyc3RsYXlvdXRfbm9uZW1wdHlfZmluaXNo
ZWQoRXZhc19PYmplY3QqIG8pCiAgKgogICogRW1pdHMgc2lnbmFsOiAibG9hZCxkb2N1bWVudCxm
aW5pc2hlZCIgd2l0aCBubyBwYXJhbWV0ZXJzLgogICovCi12b2lkIGV3a19mcmFtZV9sb2FkX2Rv
Y3VtZW50X2ZpbmlzaGVkKEV2YXNfT2JqZWN0KiBvKQordm9pZCBld2tfZnJhbWVfbG9hZF9kb2N1
bWVudF9maW5pc2hlZChFdmFzX09iamVjdCogZXdrRnJhbWUpCiB7Ci0gICAgZXZhc19vYmplY3Rf
c21hcnRfY2FsbGJhY2tfY2FsbChvLCAibG9hZCxkb2N1bWVudCxmaW5pc2hlZCIsIDApOwotICAg
IEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkKTsKLSAgICBld2tfdmlld19sb2FkX2Rv
Y3VtZW50X2ZpbmlzaGVkKHNkLT52aWV3LCBvKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxs
YmFja19jYWxsKGV3a0ZyYW1lLCAibG9hZCxkb2N1bWVudCxmaW5pc2hlZCIsIDApOworICAgIEVX
S19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCk7CisgICAgZXdrX3ZpZXdfbG9h
ZF9kb2N1bWVudF9maW5pc2hlZChzZC0+dmlldywgZXdrRnJhbWUpOwogfQogCiAvKioKQEAgLTEz
NTMsMTUgKzEzNTMsMTUgQEAgdm9pZCBld2tfZnJhbWVfbG9hZF9kb2N1bWVudF9maW5pc2hlZChF
dmFzX09iamVjdCogbykKICAqIEBub3RlIHRoZXJlIHNob3VsZCBub3RiZSBhbnkgZXJyb3Igc3R1
ZmYgaGVyZSwgYnV0IHRyeWluZyB0byBiZQogICogICAgICAgY29tcGF0aWJsZSB3aXRoIHByZXZp
b3VzIFdlYktpdC4KICAqLwotdm9pZCBld2tfZnJhbWVfbG9hZF9maW5pc2hlZChFdmFzX09iamVj
dCogbywgY29uc3QgY2hhciogZXJyb3JfZG9tYWluLCBpbnQgZXJyb3JfY29kZSwgRWluYV9Cb29s
IGlzX2NhbmNlbGxhdGlvbiwgY29uc3QgY2hhciogZXJyb3JfZGVzY3JpcHRpb24sIGNvbnN0IGNo
YXIqIGZhaWxpbmdfdXJsKQordm9pZCBld2tfZnJhbWVfbG9hZF9maW5pc2hlZChFdmFzX09iamVj
dCogZXdrRnJhbWUsIGNvbnN0IGNoYXIqIGVycm9yX2RvbWFpbiwgaW50IGVycm9yX2NvZGUsIEVp
bmFfQm9vbCBpc19jYW5jZWxsYXRpb24sIGNvbnN0IGNoYXIqIGVycm9yX2Rlc2NyaXB0aW9uLCBj
b25zdCBjaGFyKiBmYWlsaW5nX3VybCkKIHsKICAgICBFd2tfRnJhbWVfTG9hZF9FcnJvciBidWYs
ICogZXJyb3I7CiAgICAgaWYgKCFlcnJvcl9kb21haW4pIHsKLSAgICAgICAgREJHKCJvPSVwLCBz
dWNjZXNzLiIsIG8pOworICAgICAgICBEQkcoImV3a0ZyYW1lPSVwLCBzdWNjZXNzLiIsIGV3a0Zy
YW1lKTsKICAgICAgICAgZXJyb3IgPSAwOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIERCRygibz0l
cCwgZXJyb3I9JXMgKCVkLCBjYW5jZWxsYXRpb249JWhodSkgXCIlc1wiLCB1cmw9JXMiLAotICAg
ICAgICAgICAgbywgZXJyb3JfZG9tYWluLCBlcnJvcl9jb2RlLCBpc19jYW5jZWxsYXRpb24sCisg
ICAgICAgIERCRygiZXdrRnJhbWU9JXAsIGVycm9yPSVzICglZCwgY2FuY2VsbGF0aW9uPSVoaHUp
IFwiJXNcIiwgdXJsPSVzIiwKKyAgICAgICAgICAgIGV3a0ZyYW1lLCBlcnJvcl9kb21haW4sIGVy
cm9yX2NvZGUsIGlzX2NhbmNlbGxhdGlvbiwKICAgICAgICAgICAgIGVycm9yX2Rlc2NyaXB0aW9u
LCBmYWlsaW5nX3VybCk7CiAKICAgICAgICAgYnVmLmRvbWFpbiA9IGVycm9yX2RvbWFpbjsKQEAg
LTEzNjksMTEgKzEzNjksMTEgQEAgdm9pZCBld2tfZnJhbWVfbG9hZF9maW5pc2hlZChFdmFzX09i
amVjdCogbywgY29uc3QgY2hhciogZXJyb3JfZG9tYWluLCBpbnQgZXJyb3IKICAgICAgICAgYnVm
LmlzX2NhbmNlbGxhdGlvbiA9IGlzX2NhbmNlbGxhdGlvbjsKICAgICAgICAgYnVmLmRlc2NyaXB0
aW9uID0gZXJyb3JfZGVzY3JpcHRpb247CiAgICAgICAgIGJ1Zi5mYWlsaW5nX3VybCA9IGZhaWxp
bmdfdXJsOwotICAgICAgICBidWYuZnJhbWUgPSBvOworICAgICAgICBidWYuZnJhbWUgPSBld2tG
cmFtZTsKICAgICAgICAgZXJyb3IgPSAmYnVmOwogICAgIH0KLSAgICBldmFzX29iamVjdF9zbWFy
dF9jYWxsYmFja19jYWxsKG8sICJsb2FkLGZpbmlzaGVkIiwgZXJyb3IpOwotICAgIEVXS19GUkFN
RV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFj
a19jYWxsKGV3a0ZyYW1lLCAibG9hZCxmaW5pc2hlZCIsIGVycm9yKTsKKyAgICBFV0tfRlJBTUVf
U0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QpOwogICAgIGV3a192aWV3X2xvYWRfZmluaXNo
ZWQoc2QtPnZpZXcsIGVycm9yKTsKIH0KIApAQCAtMTM4MywxMiArMTM4MywxMiBAQCB2b2lkIGV3
a19mcmFtZV9sb2FkX2ZpbmlzaGVkKEV2YXNfT2JqZWN0KiBvLCBjb25zdCBjaGFyKiBlcnJvcl9k
b21haW4sIGludCBlcnJvcgogICoKICAqIEVtaXRzIHNpZ25hbDogImxvYWQsZXJyb3IiIHdpdGgg
cG9pbnRlciB0byBFd2tfRnJhbWVfTG9hZF9FcnJvci4KICAqLwotdm9pZCBld2tfZnJhbWVfbG9h
ZF9lcnJvcihFdmFzX09iamVjdCogbywgY29uc3QgY2hhciogZXJyb3JfZG9tYWluLCBpbnQgZXJy
b3JfY29kZSwgRWluYV9Cb29sIGlzX2NhbmNlbGxhdGlvbiwgY29uc3QgY2hhciogZXJyb3JfZGVz
Y3JpcHRpb24sIGNvbnN0IGNoYXIqIGZhaWxpbmdfdXJsKQordm9pZCBld2tfZnJhbWVfbG9hZF9l
cnJvcihFdmFzX09iamVjdCogZXdrRnJhbWUsIGNvbnN0IGNoYXIqIGVycm9yX2RvbWFpbiwgaW50
IGVycm9yX2NvZGUsIEVpbmFfQm9vbCBpc19jYW5jZWxsYXRpb24sIGNvbnN0IGNoYXIqIGVycm9y
X2Rlc2NyaXB0aW9uLCBjb25zdCBjaGFyKiBmYWlsaW5nX3VybCkKIHsKICAgICBFd2tfRnJhbWVf
TG9hZF9FcnJvciBlcnJvcjsKIAotICAgIERCRygibz0lcCwgZXJyb3I9JXMgKCVkLCBjYW5jZWxs
YXRpb249JWhodSkgXCIlc1wiLCB1cmw9JXMiLAotICAgICAgICBvLCBlcnJvcl9kb21haW4sIGVy
cm9yX2NvZGUsIGlzX2NhbmNlbGxhdGlvbiwKKyAgICBEQkcoImV3a0ZyYW1lPSVwLCBlcnJvcj0l
cyAoJWQsIGNhbmNlbGxhdGlvbj0laGh1KSBcIiVzXCIsIHVybD0lcyIsCisgICAgICAgIGV3a0Zy
YW1lLCBlcnJvcl9kb21haW4sIGVycm9yX2NvZGUsIGlzX2NhbmNlbGxhdGlvbiwKICAgICAgICAg
ZXJyb3JfZGVzY3JpcHRpb24sIGZhaWxpbmdfdXJsKTsKIAogICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOKGVycm9yX2RvbWFpbik7CkBAIC0xMzk4LDkgKzEzOTgsOSBAQCB2b2lkIGV3a19m
cmFtZV9sb2FkX2Vycm9yKEV2YXNfT2JqZWN0KiBvLCBjb25zdCBjaGFyKiBlcnJvcl9kb21haW4s
IGludCBlcnJvcl9jbwogICAgIGVycm9yLmRvbWFpbiA9IGVycm9yX2RvbWFpbjsKICAgICBlcnJv
ci5kZXNjcmlwdGlvbiA9IGVycm9yX2Rlc2NyaXB0aW9uOwogICAgIGVycm9yLmZhaWxpbmdfdXJs
ID0gZmFpbGluZ191cmw7Ci0gICAgZXJyb3IuZnJhbWUgPSBvOwotICAgIGV2YXNfb2JqZWN0X3Nt
YXJ0X2NhbGxiYWNrX2NhbGwobywgImxvYWQsZXJyb3IiLCAmZXJyb3IpOwotICAgIEVXS19GUkFN
RV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkKTsKKyAgICBlcnJvci5mcmFtZSA9IGV3a0ZyYW1lOwor
ICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdrRnJhbWUsICJsb2FkLGVycm9y
IiwgJmVycm9yKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2Qp
OwogICAgIGV3a192aWV3X2xvYWRfZXJyb3Ioc2QtPnZpZXcsICZlcnJvcik7CiB9CiAKQEAgLTE0
MTAsMTcgKzE0MTAsMTcgQEAgdm9pZCBld2tfZnJhbWVfbG9hZF9lcnJvcihFdmFzX09iamVjdCog
bywgY29uc3QgY2hhciogZXJyb3JfZG9tYWluLCBpbnQgZXJyb3JfY28KICAqCiAgKiBFbWl0cyBz
aWduYWw6ICJsb2FkLHByb2dyZXNzIiB3aXRoIHBvaW50ZXIgdG8gYSBkb3VibGUgZnJvbSAwLjAg
dG8gMS4wLgogICovCi12b2lkIGV3a19mcmFtZV9sb2FkX3Byb2dyZXNzX2NoYW5nZWQoRXZhc19P
YmplY3QqIG8pCit2b2lkIGV3a19mcmFtZV9sb2FkX3Byb2dyZXNzX2NoYW5nZWQoRXZhc19PYmpl
Y3QqIGV3a0ZyYW1lKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkKTsK
KyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QpOwogICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5mcmFtZSk7CiAKICAgICAvLyBUT0RPOiB0aGlzIGlz
IHBlciBwYWdlLCB0aGVyZSBzaG91bGQgYmUgYSB3YXkgdG8gaGF2ZSBwZXItZnJhbWUuCiAgICAg
ZG91YmxlIHByb2dyZXNzID0gc2QtPmZyYW1lLT5wYWdlKCktPnByb2dyZXNzKCktPmVzdGltYXRl
ZFByb2dyZXNzKCk7CiAKLSAgICBEQkcoIm89JXAgKHA9JTAuM2YpIiwgbywgcHJvZ3Jlc3MpOwor
ICAgIERCRygiZXdrRnJhbWU9JXAgKHA9JTAuM2YpIiwgZXdrRnJhbWUsIHByb2dyZXNzKTsKIAot
ICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwobywgImxvYWQscHJvZ3Jlc3MiLCAm
cHJvZ3Jlc3MpOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdrRnJhbWUs
ICJsb2FkLHByb2dyZXNzIiwgJnByb2dyZXNzKTsKICAgICBld2tfdmlld19sb2FkX3Byb2dyZXNz
X2NoYW5nZWQoc2QtPnZpZXcpOwogfQogCkBAIC0xNDMwLDE4ICsxNDMwLDE4IEBAIHZvaWQgZXdr
X2ZyYW1lX2xvYWRfcHJvZ3Jlc3NfY2hhbmdlZChFdmFzX09iamVjdCogbykKICAqCiAgKiBSZXBv
cnRzIGNvbnRlbnRzIHNpemUgY2hhbmdlZC4KICAqLwotdm9pZCBld2tfZnJhbWVfY29udGVudHNf
c2l6ZV9jaGFuZ2VkKEV2YXNfT2JqZWN0KiBvLCBFdmFzX0Nvb3JkIHcsIEV2YXNfQ29vcmQgaCkK
K3ZvaWQgZXdrX2ZyYW1lX2NvbnRlbnRzX3NpemVfY2hhbmdlZChFdmFzX09iamVjdCogZXdrRnJh
bWUsIEV2YXNfQ29vcmQgd2lkdGgsIEV2YXNfQ29vcmQgaGVpZ2h0KQogewotICAgIERCRygibz0l
cDogJWR4JWQiLCBvLCB3LCBoKTsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihvLCBz
ZCk7Ci0gICAgaWYgKHNkLT5jb250ZW50c19zaXplLncgPT0gdyAmJiBzZC0+Y29udGVudHNfc2l6
ZS5oID09IGgpCisgICAgREJHKCJld2tGcmFtZT0lcDogJWR4JWQiLCBld2tGcmFtZSwgd2lkdGgs
IGhlaWdodCk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkKTsK
KyAgICBpZiAoc2QtPmNvbnRlbnRzX3NpemUudyA9PSB3aWR0aCAmJiBzZC0+Y29udGVudHNfc2l6
ZS5oID09IGhlaWdodCkKICAgICAgICAgcmV0dXJuOwotICAgIHNkLT5jb250ZW50c19zaXplLncg
PSB3OwotICAgIHNkLT5jb250ZW50c19zaXplLmggPSBoOworICAgIHNkLT5jb250ZW50c19zaXpl
LncgPSB3aWR0aDsKKyAgICBzZC0+Y29udGVudHNfc2l6ZS5oID0gaGVpZ2h0OwogICAgIC8vIFRP
RE86IHVwZGF0ZSBzb21ldGhpbmcgZWxzZSBpbnRlcm5hbGx5PwogCi0gICAgRXZhc19Db29yZCBz
aXplWzJdID0ge3csIGh9OwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwobywg
ImNvbnRlbnRzLHNpemUsY2hhbmdlZCIsIHNpemUpOworICAgIEV2YXNfQ29vcmQgc2l6ZVsyXSA9
IHt3aWR0aCwgaGVpZ2h0fTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKGV3
a0ZyYW1lLCAiY29udGVudHMsc2l6ZSxjaGFuZ2VkIiwgc2l6ZSk7CiB9CiAKIC8qKgpAQCAtMTQ0
OSwxMyArMTQ0OSwxMyBAQCB2b2lkIGV3a19mcmFtZV9jb250ZW50c19zaXplX2NoYW5nZWQoRXZh
c19PYmplY3QqIG8sIEV2YXNfQ29vcmQgdywgRXZhc19Db29yZCBoKQogICoKICAqIFJlcG9ydHMg
dGl0bGUgY2hhbmdlZC4KICAqLwotdm9pZCBld2tfZnJhbWVfdGl0bGVfc2V0KEV2YXNfT2JqZWN0
KiBvLCBjb25zdCBjaGFyKiB0aXRsZSkKK3ZvaWQgZXdrX2ZyYW1lX3RpdGxlX3NldChFdmFzX09i
amVjdCogZXdrRnJhbWUsIGNvbnN0IGNoYXIqIHRpdGxlKQogewotICAgIERCRygibz0lcCwgdGl0
bGU9JXMiLCBvLCB0aXRsZSA/IHRpdGxlIDogIihudWxsKSIpOwotICAgIEVXS19GUkFNRV9TRF9H
RVRfT1JfUkVUVVJOKG8sIHNkKTsKKyAgICBEQkcoImV3a0ZyYW1lPSVwLCB0aXRsZT0lcyIsIGV3
a0ZyYW1lLCB0aXRsZSA/IHRpdGxlIDogIihudWxsKSIpOworICAgIEVXS19GUkFNRV9TRF9HRVRf
T1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCk7CiAgICAgaWYgKCFlaW5hX3N0cmluZ3NoYXJlX3JlcGxh
Y2UoJnNkLT50aXRsZSwgdGl0bGUpKQogICAgICAgICByZXR1cm47Ci0gICAgZXZhc19vYmplY3Rf
c21hcnRfY2FsbGJhY2tfY2FsbChvLCAidGl0bGUsY2hhbmdlZCIsICh2b2lkKilzZC0+dGl0bGUp
OworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdrRnJhbWUsICJ0aXRsZSxj
aGFuZ2VkIiwgKHZvaWQqKXNkLT50aXRsZSk7CiB9CiAKIC8qKgpAQCAtMTQ2MywxMCArMTQ2Mywx
MCBAQCB2b2lkIGV3a19mcmFtZV90aXRsZV9zZXQoRXZhc19PYmplY3QqIG8sIGNvbnN0IGNoYXIq
IHRpdGxlKQogICoKICAqIENyZWF0ZXMgYSB2aWV3LgogICovCi12b2lkIGV3a19mcmFtZV92aWV3
X2NyZWF0ZV9mb3JfdmlldyhFdmFzX09iamVjdCogbywgRXZhc19PYmplY3QqIHZpZXcpCit2b2lk
IGV3a19mcmFtZV92aWV3X2NyZWF0ZV9mb3JfdmlldyhFdmFzX09iamVjdCogZXdrRnJhbWUsIEV2
YXNfT2JqZWN0KiB2aWV3KQogewotICAgIERCRygibz0lcCwgdmlldz0lcCIsIG8sIHZpZXcpOwot
ICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkKTsKKyAgICBEQkcoImV3a0ZyYW1l
PSVwLCB2aWV3PSVwIiwgZXdrRnJhbWUsIHZpZXcpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1Jf
UkVUVVJOKGV3a0ZyYW1lLCBzZCk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2Qt
PmZyYW1lKTsKICAgICBFdmFzX0Nvb3JkIHcsIGg7CiAKQEAgLTE0OTAsMTIgKzE0OTAsMTIgQEAg
dm9pZCBld2tfZnJhbWVfdmlld19jcmVhdGVfZm9yX3ZpZXcoRXZhc19PYmplY3QqIG8sIEV2YXNf
T2JqZWN0KiB2aWV3KQogCiAgICAgY29uc3QgY2hhciogdGhlbWUgPSBld2tfdmlld190aGVtZV9n
ZXQodmlldyk7CiAgICAgc2QtPmZyYW1lLT52aWV3KCktPnNldEVkamVUaGVtZSh0aGVtZSk7Ci0g
ICAgc2QtPmZyYW1lLT52aWV3KCktPnNldEV2YXNPYmplY3Qobyk7CisgICAgc2QtPmZyYW1lLT52
aWV3KCktPnNldEV2YXNPYmplY3QoZXdrRnJhbWUpOwogfQogCi1zc2l6ZV90IGV3a19mcmFtZV9z
b3VyY2VfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvLCBjaGFyKiogZnJhbWVfc291cmNlKQorc3Np
emVfdCBld2tfZnJhbWVfc291cmNlX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrRnJhbWUsIGNo
YXIqKiBmcmFtZV9zb3VyY2UpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4obywg
c2QsIC0xKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIC0x
KTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCAtMSk7CiAg
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZS0+ZG9jdW1lbnQoKSwg
LTEpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChmcmFtZV9zb3VyY2UsIC0x
KTsKQEAgLTE1NDMsOSArMTU0Myw5IEBAIHNzaXplX3QgZXdrX2ZyYW1lX3NvdXJjZV9nZXQoY29u
c3QgRXZhc19PYmplY3QqIG8sIGNoYXIqKiBmcmFtZV9zb3VyY2UpCiAgICAgcmV0dXJuIHNvdXJj
ZV9sZW5ndGg7CiB9CiAKLUVpbmFfTGlzdCogZXdrX2ZyYW1lX3Jlc291cmNlc19sb2NhdGlvbl9n
ZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCitFaW5hX0xpc3QqIGV3a19mcmFtZV9yZXNvdXJjZXNf
bG9jYXRpb25fZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsKLSAgICBFV0tfRlJB
TUVfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgMCk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9S
RVRVUk4oZXdrRnJhbWUsIHNkLCAwKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9W
QUwoc2QtPmZyYW1lLCAwKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2Qt
PmZyYW1lLT5kb2N1bWVudCgpLCAwKTsKIApAQCAtMTYwOSw5ICsxNjA5LDkgQEAgY2hhciogZXdr
X2ZyYW1lX3BsYWluX3RleHRfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKICAqCiAg
KiBFbWl0cyBzaWduYWw6ICJ1cmksY2hhbmdlZCIgd2l0aCBuZXcgdXJpIGFzIHBhcmFtZXRlci4K
ICAqLwotRWluYV9Cb29sIGV3a19mcmFtZV91cmlfY2hhbmdlZChFdmFzX09iamVjdCogbykKK0Vp
bmFfQm9vbCBld2tfZnJhbWVfdXJpX2NoYW5nZWQoRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewot
ICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBF
V0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOwogICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOwog
ICAgIFdURjo6Q1N0cmluZyB1cmkoc2QtPmZyYW1lLT5kb2N1bWVudCgpLT51cmwoKS5zdHJpbmco
KS51dGY4KCkpOwogCkBAIC0xNjIyLDcgKzE2MjIsNyBAQCBFaW5hX0Jvb2wgZXdrX2ZyYW1lX3Vy
aV9jaGFuZ2VkKEV2YXNfT2JqZWN0KiBvKQogICAgIH0KIAogICAgIGVpbmFfc3RyaW5nc2hhcmVf
cmVwbGFjZSgmc2QtPnVyaSwgdXJpLmRhdGEoKSk7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2Fs
bGJhY2tfY2FsbChvLCAidXJpLGNoYW5nZWQiLCAodm9pZCopc2QtPnVyaSk7CisgICAgZXZhc19v
YmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChld2tGcmFtZSwgInVyaSxjaGFuZ2VkIiwgKHZvaWQq
KXNkLT51cmkpOwogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKQEAgLTE2MzEsMTAgKzE2MzEs
MTAgQEAgRWluYV9Cb29sIGV3a19mcmFtZV91cmlfY2hhbmdlZChFdmFzX09iamVjdCogbykKICAq
CiAgKiBGb3JjZXMgbGF5b3V0IGZvciBmcmFtZS4KICAqLwotdm9pZCBld2tfZnJhbWVfZm9yY2Vf
bGF5b3V0KEV2YXNfT2JqZWN0KiBvKQordm9pZCBld2tfZnJhbWVfZm9yY2VfbGF5b3V0KEV2YXNf
T2JqZWN0KiBld2tGcmFtZSkKIHsKLSAgICBEQkcoIm89JXAiLCBvKTsKLSAgICBFV0tfRlJBTUVf
U0RfR0VUX09SX1JFVFVSTihvLCBzZCk7CisgICAgREJHKCJld2tGcmFtZT0lcCIsIGV3a0ZyYW1l
KTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QpOwogICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5mcmFtZSk7CiAgICAgV2ViQ29yZTo6RnJhbWVW
aWV3KiB2aWV3ID0gc2QtPmZyYW1lLT52aWV3KCk7CiAgICAgaWYgKHZpZXcpCkBAIC0xNjQ2LDcg
KzE2NDYsNyBAQCB2b2lkIGV3a19mcmFtZV9mb3JjZV9sYXlvdXQoRXZhc19PYmplY3QqIG8pCiAg
KgogICogQ3JlYXRlcyBwbHVnaW4uCiAgKi8KLVdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpXaWRn
ZXQ+IGV3a19mcmFtZV9wbHVnaW5fY3JlYXRlKEV2YXNfT2JqZWN0KiBvLCBjb25zdCBXZWJDb3Jl
OjpJbnRTaXplJiBwbHVnaW5TaXplLCBXZWJDb3JlOjpIVE1MUGx1Z0luRWxlbWVudCogZWxlbWVu
dCwgY29uc3QgV2ViQ29yZTo6S1VSTCYgdXJsLCBjb25zdCBXVEY6OlZlY3RvcjxXVEY6OlN0cmlu
Zz4mIHBhcmFtTmFtZXMsIGNvbnN0IFdURjo6VmVjdG9yPFdURjo6U3RyaW5nPiYgcGFyYW1WYWx1
ZXMsIGNvbnN0IFdURjo6U3RyaW5nJiBtaW1lVHlwZSwgYm9vbCBsb2FkTWFudWFsbHkpCitXVEY6
OlBhc3NSZWZQdHI8V2ViQ29yZTo6V2lkZ2V0PiBld2tfZnJhbWVfcGx1Z2luX2NyZWF0ZShFdmFz
X09iamVjdCogZXdrRnJhbWUsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHBsdWdpblNpemUsIFdl
YkNvcmU6OkhUTUxQbHVnSW5FbGVtZW50KiBlbGVtZW50LCBjb25zdCBXZWJDb3JlOjpLVVJMJiB1
cmwsIGNvbnN0IFdURjo6VmVjdG9yPFdURjo6U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgV1RG
OjpWZWN0b3I8V1RGOjpTdHJpbmc+JiBwYXJhbVZhbHVlcywgY29uc3QgV1RGOjpTdHJpbmcmIG1p
bWVUeXBlLCBib29sIGxvYWRNYW51YWxseSkKIHsKICAgICByZXR1cm4gMDsKIH0KQEAgLTE2NTks
MTAgKzE2NTksMTAgQEAgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OldpZGdldD4gZXdrX2ZyYW1l
X3BsdWdpbl9jcmVhdGUoRXZhc19PYmplY3QqIG8sIGNvbnN0IFcKICAqCiAgKiBFbWl0cyBzaWdu
YWw6ICJlZGl0b3JjbGllbnRzZWxlY3Rpb24sY2hhbmdlZCIgd2l0aCBubyBwYXJhbWV0ZXJzLgog
ICovCi12b2lkIGV3a19mcmFtZV9lZGl0b3JfY2xpZW50X3NlbGVjdGlvbl9jaGFuZ2VkKEV2YXNf
T2JqZWN0KiBvKQordm9pZCBld2tfZnJhbWVfZWRpdG9yX2NsaWVudF9zZWxlY3Rpb25fY2hhbmdl
ZChFdmFzX09iamVjdCogZXdrRnJhbWUpCiB7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJh
Y2tfY2FsbChvLCAiZWRpdG9yY2xpZW50LHNlbGVjdGlvbixjaGFuZ2VkIiwgMCk7Ci0gICAgRVdL
X0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4obywgc2QpOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2Nh
bGxiYWNrX2NhbGwoZXdrRnJhbWUsICJlZGl0b3JjbGllbnQsc2VsZWN0aW9uLGNoYW5nZWQiLCAw
KTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QpOwogICAgIGV3
a192aWV3X2VkaXRvcl9jbGllbnRfc2VsZWN0aW9uX2NoYW5nZWQoc2QtPnZpZXcpOwogfQogCkBA
IC0xNjc0LDkgKzE2NzQsOSBAQCB2b2lkIGV3a19mcmFtZV9lZGl0b3JfY2xpZW50X3NlbGVjdGlv
bl9jaGFuZ2VkKEV2YXNfT2JqZWN0KiBvKQogICoKICAqIEVtaXRzIHNpZ25hbDogImVkaXRvcmNs
aWVudCxjb250ZW50cyxjaGFuZ2VkIiB3aXRoIG5vIHBhcmFtZXRlcnMuCiAgKi8KLXZvaWQgZXdr
X2ZyYW1lX2VkaXRvcl9jbGllbnRfY29udGVudHNfY2hhbmdlZChFdmFzX09iamVjdCogbykKK3Zv
aWQgZXdrX2ZyYW1lX2VkaXRvcl9jbGllbnRfY29udGVudHNfY2hhbmdlZChFdmFzX09iamVjdCog
ZXdrRnJhbWUpCiB7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChvLCAiZWRp
dG9yY2xpZW50LGNvbnRlbnRzLGNoYW5nZWQiLCAwKTsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09S
X1JFVFVSTihvLCBzZCk7CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChld2tG
cmFtZSwgImVkaXRvcmNsaWVudCxjb250ZW50cyxjaGFuZ2VkIiwgMCk7CisgICAgRVdLX0ZSQU1F
X1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkKTsKICAgICBld2tfdmlld19lZGl0b3JfY2xp
ZW50X2NvbnRlbnRzX2NoYW5nZWQoc2QtPnZpZXcpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9lZmwvZXdrL2V3a190aWxlZF9iYWNraW5nX3N0b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQv
ZWZsL2V3ay9ld2tfdGlsZWRfYmFja2luZ19zdG9yZS5jcHAKaW5kZXggZDcxMmY3YS4uM2RhOWEw
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a190aWxlZF9iYWNraW5nX3N0
b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmUuY3BwCkBAIC00Niw5ICs0Niw5IEBAIHR5cGVkZWYgZW51bSBfRXdrX1RpbGVkX0JhY2tpbmdf
U3RvcmVfUHJlX1JlbmRlcl9Qcmlvcml0eSBFd2tfVGlsZWRfQmFja2luZ19TdG9yCiAKIHN0cnVj
dCBfRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSB7CiAgICAgRUlOQV9JTkxJU1Q7Ci0gICAg
RXdrX1RpbGUgKnRpbGU7CisgICAgRXdrX1RpbGUqIHRpbGU7CiAgICAgc3RydWN0IHsKLSAgICAg
ICAgRXZhc19Db29yZCB4LCB5LCB3LCBoOworICAgICAgICBFdmFzX0Nvb3JkIHgsIHksIHdpZHRo
LCBoZWlnaHQ7CiAgICAgfSBnZW9tZXRyeTsKICAgICBFaW5hX0Jvb2wgc21vb3RoX3NjYWxlOwog
fTsKQEAgLTYxLDE2ICs2MSwxNiBAQCBzdHJ1Y3QgX0V3a19UaWxlZF9CYWNraW5nX1N0b3JlX1By
ZV9SZW5kZXJfUmVxdWVzdCB7CiAKIHN0cnVjdCBfRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0
YSB7CiAgICAgRXZhc19PYmplY3RfU21hcnRfQ2xpcHBlZF9EYXRhIGJhc2U7Ci0gICAgRXZhc19P
YmplY3QgKnNlbGY7Ci0gICAgRXZhc19PYmplY3QgKmNvbnRlbnRzX2NsaXBwZXI7CisgICAgRXZh
c19PYmplY3QqIHNlbGY7CisgICAgRXZhc19PYmplY3QqIGNvbnRlbnRzX2NsaXBwZXI7CiAgICAg
c3RydWN0IHsKLSAgICAgICAgRWluYV9Jbmxpc3QgKippdGVtczsKLSAgICAgICAgRXZhc19Db29y
ZCB4LCB5LCB3LCBoOworICAgICAgICBFaW5hX0lubGlzdCoqIGl0ZW1zOworICAgICAgICBFdmFz
X0Nvb3JkIHgsIHksIHdpZHRoLCBoZWlnaHQ7CiAgICAgICAgIGxvbmcgY29scywgcm93czsKICAg
ICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIEV2YXNfQ29vcmQgdywgaDsKKyAgICAgICAgICAg
IEV2YXNfQ29vcmQgd2lkdGgsIGhlaWdodDsKICAgICAgICAgICAgIGZsb2F0IHpvb207Ci0gICAg
ICAgICAgICBFaW5hX0Jvb2wgem9vbV93ZWFrX3Ntb290aF9zY2FsZToxOworICAgICAgICAgICAg
RWluYV9Cb29sIHpvb21fd2Vha19zbW9vdGhfc2NhbGUgOiAxOwogICAgICAgICB9IHRpbGU7CiAg
ICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICBzdHJ1Y3QgewpAQCAtODAsNyArODAsNyBAQCBz
dHJ1Y3QgX0V3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgewogICAgIH0gdmlldzsKICAgICBF
dmFzX0NvbG9yc3BhY2UgY3NwYWNlOwogICAgIHN0cnVjdCB7Ci0gICAgICAgIEV3a19UaWxlX01h
dHJpeCAqbWF0cml4OworICAgICAgICBFd2tfVGlsZV9NYXRyaXgqIG1hdHJpeDsKICAgICAgICAg
c3RydWN0IHsKICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgY29sLCByb3c7CiAgICAgICAgIH0g
YmFzZTsKQEAgLTkwLDI4ICs5MCwyOCBAQCBzdHJ1Y3QgX0V3a19UaWxlZF9CYWNraW5nX1N0b3Jl
X0RhdGEgewogICAgICAgICBFdmFzX0Nvb3JkIHdpZHRoLCBoZWlnaHQ7CiAgICAgfSBtb2RlbDsK
ICAgICBzdHJ1Y3QgewotICAgICAgICBFaW5hX0Jvb2wgKCpjYikodm9pZCAqZGF0YSwgRXdrX1Rp
bGUgKnQsIGNvbnN0IEVpbmFfUmVjdGFuZ2xlICphcmVhKTsKLSAgICAgICAgdm9pZCAqZGF0YTsK
LSAgICAgICAgRWluYV9Jbmxpc3QgKnByZV9yZW5kZXJfcmVxdWVzdHM7Ci0gICAgICAgIEVjb3Jl
X0lkbGVyICppZGxlcjsKKyAgICAgICAgRWluYV9Cb29sICgqY2IpKHZvaWQqIGRhdGEsIEV3a19U
aWxlKiB0aWxlLCBjb25zdCBFaW5hX1JlY3RhbmdsZSogYXJlYSk7CisgICAgICAgIHZvaWQqIGRh
dGE7CisgICAgICAgIEVpbmFfSW5saXN0KiBwcmVfcmVuZGVyX3JlcXVlc3RzOworICAgICAgICBF
Y29yZV9JZGxlciogaWRsZXI7CiAgICAgICAgIEVpbmFfQm9vbCBkaXNhYmxlZDsKLSAgICAgICAg
RWluYV9Cb29sIHN1c3BlbmQ6MTsKKyAgICAgICAgRWluYV9Cb29sIHN1c3BlbmQgOiAxOwogICAg
IH0gcmVuZGVyOwogICAgIHN0cnVjdCB7Ci0gICAgICAgIHZvaWQgKigqcHJlX2NiKSh2b2lkICpk
YXRhLCBFdmFzX09iamVjdCAqbyk7Ci0gICAgICAgIHZvaWQgKnByZV9kYXRhOwotICAgICAgICB2
b2lkICooKnBvc3RfY2IpKHZvaWQgKmRhdGEsIHZvaWQgKnByZV9kYXRhLCBFdmFzX09iamVjdCAq
byk7Ci0gICAgICAgIHZvaWQgKnBvc3RfZGF0YTsKKyAgICAgICAgdm9pZCogKCpwcmVfY2IpKHZv
aWQqIGRhdGEsIEV2YXNfT2JqZWN0KiBld2tUaWxlKTsKKyAgICAgICAgdm9pZCogcHJlX2RhdGE7
CisgICAgICAgIHZvaWQqICgqcG9zdF9jYikodm9pZCogZGF0YSwgdm9pZCogcHJlX2RhdGEsIEV2
YXNfT2JqZWN0KiBld2tUaWxlKTsKKyAgICAgICAgdm9pZCogcG9zdF9kYXRhOwogICAgIH0gcHJv
Y2VzczsKICAgICBzdHJ1Y3QgewotICAgICAgICBFaW5hX0Jvb2wgYW55OjE7Ci0gICAgICAgIEVp
bmFfQm9vbCBwb3M6MTsKLSAgICAgICAgRWluYV9Cb29sIHNpemU6MTsKLSAgICAgICAgRWluYV9C
b29sIG1vZGVsOjE7Ci0gICAgICAgIEVpbmFfQm9vbCBvZmZzZXQ6MTsKKyAgICAgICAgRWluYV9C
b29sIGFueSA6IDE7CisgICAgICAgIEVpbmFfQm9vbCBwb3MgOiAxOworICAgICAgICBFaW5hX0Jv
b2wgc2l6ZSA6IDE7CisgICAgICAgIEVpbmFfQm9vbCBtb2RlbCA6IDE7CisgICAgICAgIEVpbmFf
Qm9vbCBvZmZzZXQgOiAxOwogICAgIH0gY2hhbmdlZDsKICNpZmRlZiBERUJVR19NRU1fTEVBS1MK
LSAgICBFY29yZV9FdmVudF9IYW5kbGVyICpzaWdfdXNyOworICAgIEVjb3JlX0V2ZW50X0hhbmRs
ZXIqIHNpZ191c3I7CiAjZW5kaWYKIH07CiAKQEAgLTEyNSwxMyArMTI1LDEzIEBAIGludCBfZXdr
X3RpbGVkX2xvZ19kb20gPSAtMTsKICAgICAgICAgcmV0dXJuIF9fVkFfQVJHU19fOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICB9CiAKLXN0YXRpYyB2b2lk
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9maWxsX3JlbmRlcmVycyhFd2tfVGlsZWRfQmFja2lu
Z19TdG9yZV9EYXRhICpwcml2KTsKLXN0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfdmlld19kYmcoY29uc3QgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJp
dik7Ci1zdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2NoYW5nZWQo
RXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdik7CitzdGF0aWMgdm9pZCBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfZmlsbF9yZW5kZXJlcnMoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVf
RGF0YSogcHJpdik7CitzdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3ZpZXdfZGJnKGNvbnN0IEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYpOworc3Rh
dGljIGlubGluZSB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9jaGFuZ2VkKEV3a19UaWxl
ZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYpOwogCi1zdGF0aWMgaW5saW5lIHZvaWQgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX3VwZGF0ZXNfcHJvY2VzcyhFd2tfVGlsZWRfQmFja2luZ19TdG9y
ZV9EYXRhICpwcml2KQorc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV91cGRhdGVzX3Byb2Nlc3MoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdikKIHsK
LSAgICB2b2lkICpkYXRhID0gMDsKKyAgICB2b2lkKiBkYXRhID0gMDsKIAogICAgIC8qIERvIG5v
dCBwcm9jZXNzIHVwZGF0ZXMuIE5vdGUgdGhhdCB3ZSBzdGlsbCB3YW50IHRvIGdldCB1cGRhdGVz
IHJlcXVlc3RzCiAgICAgICogaW4gdGhlIHF1ZXVlIGluIG9yZGVyIHRvIG5vdCBtaXNzIGFueSB1
cGRhdGVzIGFmdGVyIHRoZSByZW5kZXIgaXMKQEAgLTE0OSwxMCArMTQ5LDEwIEBAIHN0YXRpYyBp
bmxpbmUgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRlc19wcm9jZXNzKEV3a19U
aWxlZF9CYWNraW5nX1N0CiAgICAgICAgIHByaXYtPnByb2Nlc3MucG9zdF9jYihwcml2LT5wcm9j
ZXNzLnBvc3RfZGF0YSwgZGF0YSwgcHJpdi0+c2VsZik7CiB9CiAKLXN0YXRpYyBpbnQgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX2ZsdXNoKHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9mbHVzaCh2b2lkKiBkYXRhKQogewogICAgIEV3a19UaWxlZF9CYWNr
aW5nX1N0b3JlX0RhdGEqIHByaXYgPSBzdGF0aWNfY2FzdDxFd2tfVGlsZWRfQmFja2luZ19TdG9y
ZV9EYXRhKj4oZGF0YSk7Ci0gICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMgPSBld2tfdGls
ZV9tYXRyaXhfdW51c2VkX2NhY2hlX2dldChwcml2LT5tb2RlbC5tYXRyaXgpOworICAgIEV3a19U
aWxlX1VudXNlZF9DYWNoZSogdHVjID0gZXdrX3RpbGVfbWF0cml4X3VudXNlZF9jYWNoZV9nZXQo
cHJpdi0+bW9kZWwubWF0cml4KTsKIAogICAgIGlmICh0dWMpIHsKICAgICAgICAgREJHKCJmbHVz
aCB1bnVzZWQgdGlsZSBjYWNoZS4iKTsKQEAgLTE2Myw4MCArMTYzLDgwIEBAIHN0YXRpYyBpbnQg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2ZsdXNoKHZvaWQgKmRhdGEpCiAgICAgcmV0dXJuIDA7
CiB9CiAKLXN0YXRpYyBFd2tfVGlsZSAqX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfbmV3
KEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIHVuc2lnbmVkIGxvbmcgY29sLCB1
bnNpZ25lZCBsb25nIHJvdywgZmxvYXQgem9vbSkKK3N0YXRpYyBFd2tfVGlsZSogX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX3RpbGVfbmV3KEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHBy
aXYsIHVuc2lnbmVkIGxvbmcgY29sdW1uLCB1bnNpZ25lZCBsb25nIHJvdywgZmxvYXQgem9vbSkK
IHsKLSAgICBFd2tfVGlsZSAqdDsKLSAgICBFdmFzICpldmFzID0gZXZhc19vYmplY3RfZXZhc19n
ZXQocHJpdi0+c2VsZik7CisgICAgRXdrX1RpbGUqIHRpbGU7CisgICAgRXZhcyogZXZhcyA9IGV2
YXNfb2JqZWN0X2V2YXNfZ2V0KHByaXYtPnNlbGYpOwogICAgIGlmICghZXZhcykgewogICAgICAg
ICBDUklUSUNBTCgiZXZhc19vYmplY3RfZXZhc19nZXQgZmFpbGVkISIpOwogICAgICAgICByZXR1
cm4gMDsKICAgICB9CiAKLSAgICB0ID0gZXdrX3RpbGVfbWF0cml4X3RpbGVfbmV3Ci0gICAgICAg
IChwcml2LT5tb2RlbC5tYXRyaXgsIGV2YXMsIGNvbCwgcm93LCB6b29tKTsKKyAgICB0aWxlID0g
ZXdrX3RpbGVfbWF0cml4X3RpbGVfbmV3CisgICAgICAgICAgICAgICAocHJpdi0+bW9kZWwubWF0
cml4LCBldmFzLCBjb2x1bW4sIHJvdywgem9vbSk7CiAKLSAgICBpZiAoIXQpIHsKKyAgICBpZiAo
IXRpbGUpIHsKICAgICAgICAgQ1JJVElDQUwoImV3a190aWxlX21hdHJpeF90aWxlX25ldyBmYWls
ZWQhIik7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIHJldHVybiB0OworICAgIHJl
dHVybiB0aWxlOwogfQogCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRl
bV9tb3ZlKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0LCBFdmFzX0Nvb3JkIHgsIEV2
YXNfQ29vcmQgeSkKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX21v
dmUoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSogaXRlbSwgRXZhc19Db29yZCB4LCBFdmFz
X0Nvb3JkIHkpCiB7Ci0gICAgaXQtPmdlb21ldHJ5LnggPSB4OwotICAgIGl0LT5nZW9tZXRyeS55
ID0geTsKKyAgICBpdGVtLT5nZW9tZXRyeS54ID0geDsKKyAgICBpdGVtLT5nZW9tZXRyeS55ID0g
eTsKIAotICAgIGlmIChpdC0+dGlsZSkKLSAgICAgICAgZXZhc19vYmplY3RfbW92ZShpdC0+dGls
ZS0+aW1hZ2UsIHgsIHkpOworICAgIGlmIChpdGVtLT50aWxlKQorICAgICAgICBldmFzX29iamVj
dF9tb3ZlKGl0ZW0tPnRpbGUtPmltYWdlLCB4LCB5KTsKIH0KIAotc3RhdGljIHZvaWQgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcmVzaXplKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0
ZW0gKml0LCBFdmFzX0Nvb3JkIHcsIEV2YXNfQ29vcmQgaCkKK3N0YXRpYyB2b2lkIF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9pdGVtX3Jlc2l6ZShFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVt
KiBpdGVtLCBFdmFzX0Nvb3JkIHdpZHRoLCBFdmFzX0Nvb3JkIGhlaWdodCkKIHsKLSAgICBpdC0+
Z2VvbWV0cnkudyA9IHc7Ci0gICAgaXQtPmdlb21ldHJ5LmggPSBoOworICAgIGl0ZW0tPmdlb21l
dHJ5LndpZHRoID0gd2lkdGg7CisgICAgaXRlbS0+Z2VvbWV0cnkuaGVpZ2h0ID0gaGVpZ2h0Owog
Ci0gICAgaWYgKGl0LT50aWxlKSB7Ci0gICAgICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShpdC0+dGls
ZS0+aW1hZ2UsIHcsIGgpOwotICAgICAgICBldmFzX29iamVjdF9pbWFnZV9maWxsX3NldChpdC0+
dGlsZS0+aW1hZ2UsIDAsIDAsIHcsIGgpOworICAgIGlmIChpdGVtLT50aWxlKSB7CisgICAgICAg
IGV2YXNfb2JqZWN0X3Jlc2l6ZShpdGVtLT50aWxlLT5pbWFnZSwgd2lkdGgsIGhlaWdodCk7Cisg
ICAgICAgIGV2YXNfb2JqZWN0X2ltYWdlX2ZpbGxfc2V0KGl0ZW0tPnRpbGUtPmltYWdlLCAwLCAw
LCB3aWR0aCwgaGVpZ2h0KTsKICAgICB9CiB9CiAKLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV90aWxlX2Fzc29jaWF0ZShFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpw
cml2LCBFd2tfVGlsZSAqdCwgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQpCitzdGF0
aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9hc3NvY2lhdGUoRXdrX1RpbGVk
X0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdiwgRXdrX1RpbGUqIHRpbGUsIEV3a19UaWxlZF9CYWNr
aW5nX1N0b3JlX0l0ZW0qIGl0ZW0pCiB7Ci0gICAgaWYgKGl0LT50aWxlKQotICAgICAgICBDUklU
SUNBTCgiaXQtPnRpbGU9JXAsIGJ1dCBpdCBzaG91bGQgYmUgMCEiLCBpdC0+dGlsZSk7Ci0gICAg
aXQtPnRpbGUgPSB0OwotICAgIGV2YXNfb2JqZWN0X21vdmUoaXQtPnRpbGUtPmltYWdlLCBpdC0+
Z2VvbWV0cnkueCwgaXQtPmdlb21ldHJ5LnkpOwotICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShpdC0+
dGlsZS0+aW1hZ2UsIGl0LT5nZW9tZXRyeS53LCBpdC0+Z2VvbWV0cnkuaCk7CisgICAgaWYgKGl0
ZW0tPnRpbGUpCisgICAgICAgIENSSVRJQ0FMKCJpdC0+dGlsZT0lcCwgYnV0IGl0IHNob3VsZCBi
ZSAwISIsIGl0ZW0tPnRpbGUpOworICAgIGl0ZW0tPnRpbGUgPSB0aWxlOworICAgIGV2YXNfb2Jq
ZWN0X21vdmUoaXRlbS0+dGlsZS0+aW1hZ2UsIGl0ZW0tPmdlb21ldHJ5LngsIGl0ZW0tPmdlb21l
dHJ5LnkpOworICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShpdGVtLT50aWxlLT5pbWFnZSwgaXRlbS0+
Z2VvbWV0cnkud2lkdGgsIGl0ZW0tPmdlb21ldHJ5LmhlaWdodCk7CiAgICAgZXZhc19vYmplY3Rf
aW1hZ2VfZmlsbF9zZXQKLSAgICAgICAgKGl0LT50aWxlLT5pbWFnZSwgMCwgMCwgaXQtPmdlb21l
dHJ5LncsIGl0LT5nZW9tZXRyeS5oKTsKLSAgICBldmFzX29iamVjdF9pbWFnZV9zbW9vdGhfc2Nh
bGVfc2V0KGl0LT50aWxlLT5pbWFnZSwgaXQtPnNtb290aF9zY2FsZSk7CisgICAgICAgIChpdGVt
LT50aWxlLT5pbWFnZSwgMCwgMCwgaXRlbS0+Z2VvbWV0cnkud2lkdGgsIGl0ZW0tPmdlb21ldHJ5
LmhlaWdodCk7CisgICAgZXZhc19vYmplY3RfaW1hZ2Vfc21vb3RoX3NjYWxlX3NldChpdGVtLT50
aWxlLT5pbWFnZSwgaXRlbS0+c21vb3RoX3NjYWxlKTsKIAotICAgIGlmICghZXdrX3RpbGVfdmlz
aWJsZV9nZXQodCkpCi0gICAgICAgIGV2YXNfb2JqZWN0X3NtYXJ0X21lbWJlcl9hZGQodC0+aW1h
Z2UsIHByaXYtPnNlbGYpOworICAgIGlmICghZXdrX3RpbGVfdmlzaWJsZV9nZXQodGlsZSkpCisg
ICAgICAgIGV2YXNfb2JqZWN0X3NtYXJ0X21lbWJlcl9hZGQodGlsZS0+aW1hZ2UsIHByaXYtPnNl
bGYpOwogCi0gICAgZXdrX3RpbGVfc2hvdyh0KTsKKyAgICBld2tfdGlsZV9zaG93KHRpbGUpOwog
fQogCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9kaXNzb2NpYXRl
KEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIEV3a19UaWxlZF9CYWNraW5nX1N0
b3JlX0l0ZW0gKml0LCBkb3VibGUgbGFzdF91c2VkKQorc3RhdGljIHZvaWQgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX3RpbGVfZGlzc29jaWF0ZShFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRh
KiBwcml2LCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKiBpdGVtLCBkb3VibGUgbGFzdF91
c2VkKQogewotICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjOwotICAgIGV3a190aWxlX2hp
ZGUoaXQtPnRpbGUpOwotICAgIGlmICghZXdrX3RpbGVfdmlzaWJsZV9nZXQoaXQtPnRpbGUpKQot
ICAgICAgICBldmFzX29iamVjdF9zbWFydF9tZW1iZXJfZGVsKGl0LT50aWxlLT5pbWFnZSk7Ci0g
ICAgZXdrX3RpbGVfbWF0cml4X3RpbGVfcHV0KHByaXYtPm1vZGVsLm1hdHJpeCwgaXQtPnRpbGUs
IGxhc3RfdXNlZCk7CisgICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0dWM7CisgICAgZXdrX3Rp
bGVfaGlkZShpdGVtLT50aWxlKTsKKyAgICBpZiAoIWV3a190aWxlX3Zpc2libGVfZ2V0KGl0ZW0t
PnRpbGUpKQorICAgICAgICBldmFzX29iamVjdF9zbWFydF9tZW1iZXJfZGVsKGl0ZW0tPnRpbGUt
PmltYWdlKTsKKyAgICBld2tfdGlsZV9tYXRyaXhfdGlsZV9wdXQocHJpdi0+bW9kZWwubWF0cml4
LCBpdGVtLT50aWxlLCBsYXN0X3VzZWQpOwogICAgIHR1YyA9IGV3a190aWxlX21hdHJpeF91bnVz
ZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7CiAgICAgZXdrX3RpbGVfdW51c2VkX2Nh
Y2hlX2F1dG9fZmx1c2godHVjKTsKIAotICAgIGl0LT50aWxlID0gMDsKKyAgICBpdGVtLT50aWxl
ID0gMDsKIH0KIAotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfZGlz
c29jaWF0ZV9hbGwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdikKK3N0YXRpYyB2
b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2Rpc3NvY2lhdGVfYWxsKEV3a19UaWxl
ZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYpCiB7Ci0gICAgRWluYV9Jbmxpc3QgKml0OwotICAg
IEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0ZW07CisgICAgRWluYV9Jbmxpc3QqIGl0
OworICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0qIGl0ZW07CiAgICAgaW50IGk7CiAg
ICAgZG91YmxlIGxhc3RfdXNlZCA9IGVjb3JlX2xvb3BfdGltZV9nZXQoKTsKIApAQCAtMjQ4LDkg
KzI0OCw5IEBAIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2Rpc3Nv
Y2lhdGVfYWxsKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlCiAgICAgfQogfQogCi1zdGF0aWMgaW5s
aW5lIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0
X2FkZChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCB1bnNpZ25lZCBsb25nIGNv
bCwgdW5zaWduZWQgbG9uZyByb3csIGZsb2F0IHpvb20sIEV3a19UaWxlZF9CYWNraW5nX1N0b3Jl
X1ByZV9SZW5kZXJfUHJpb3JpdHkgcHJpb3JpdHkpCitzdGF0aWMgaW5saW5lIEVpbmFfQm9vbCBf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2FkZChFd2tfVGlsZWRf
QmFja2luZ19TdG9yZV9EYXRhKiBwcml2LCB1bnNpZ25lZCBsb25nIGNvbHVtbiwgdW5zaWduZWQg
bG9uZyByb3csIGZsb2F0IHpvb20sIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJf
UHJpb3JpdHkgcHJpb3JpdHkpCiB7Ci0gICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1Jl
bmRlcl9SZXF1ZXN0ICpyOworICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJf
UmVxdWVzdCogcjsKIAogICAgIHIgPSBzdGF0aWNfY2FzdDxFd2tfVGlsZWRfQmFja2luZ19TdG9y
ZV9QcmVfUmVuZGVyX1JlcXVlc3QqPihtYWxsb2Moc2l6ZW9mKCpyKSkpOwogICAgIGlmICghcikK
QEAgLTI1OCw0OSArMjU4LDQ5IEBAIHN0YXRpYyBpbmxpbmUgRWluYV9Cb29sIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfYWRkKEV3a19UaWxlCiAKICAgICBpZiAo
cHJpb3JpdHkgPT0gUFJFX1JFTkRFUl9QUklPUklUWV9ISUdIKQogICAgICAgICBwcml2LT5yZW5k
ZXIucHJlX3JlbmRlcl9yZXF1ZXN0cyA9IGVpbmFfaW5saXN0X3ByZXBlbmQKLSAgICAgICAgICAg
IChwcml2LT5yZW5kZXIucHJlX3JlbmRlcl9yZXF1ZXN0cywgRUlOQV9JTkxJU1RfR0VUKHIpKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHByaXYtPnJl
bmRlci5wcmVfcmVuZGVyX3JlcXVlc3RzLCBFSU5BX0lOTElTVF9HRVQocikpOwogICAgIGVsc2UK
ICAgICAgICAgcHJpdi0+cmVuZGVyLnByZV9yZW5kZXJfcmVxdWVzdHMgPSBlaW5hX2lubGlzdF9h
cHBlbmQKLSAgICAgICAgICAgIChwcml2LT5yZW5kZXIucHJlX3JlbmRlcl9yZXF1ZXN0cywgRUlO
QV9JTkxJU1RfR0VUKHIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKHByaXYtPnJlbmRlci5wcmVfcmVuZGVyX3JlcXVlc3RzLCBFSU5BX0lOTElTVF9H
RVQocikpOwogCi0gICAgci0+Y29sID0gY29sOworICAgIHItPmNvbCA9IGNvbHVtbjsKICAgICBy
LT5yb3cgPSByb3c7CiAgICAgci0+em9vbSA9IHpvb207CiAKICAgICByZXR1cm4gRUlOQV9UUlVF
OwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9y
ZW5kZXJfcmVxdWVzdF9kZWwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgRXdr
X1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0ICpyKQorc3RhdGljIGlubGlu
ZSB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfZGVsKEV3
a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYsIEV3a19UaWxlZF9CYWNraW5nX1N0b3Jl
X1ByZV9SZW5kZXJfUmVxdWVzdCogcmVxdWVzdCkKIHsKICAgICBwcml2LT5yZW5kZXIucHJlX3Jl
bmRlcl9yZXF1ZXN0cyA9IGVpbmFfaW5saXN0X3JlbW92ZQotICAgICAgICAocHJpdi0+cmVuZGVy
LnByZV9yZW5kZXJfcmVxdWVzdHMsIEVJTkFfSU5MSVNUX0dFVChyKSk7Ci0gICAgZnJlZShyKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocHJpdi0+cmVuZGVy
LnByZV9yZW5kZXJfcmVxdWVzdHMsIEVJTkFfSU5MSVNUX0dFVChyZXF1ZXN0KSk7CisgICAgZnJl
ZShyZXF1ZXN0KTsKIH0KIAotc3RhdGljIGlubGluZSBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9Q
cmVfUmVuZGVyX1JlcXVlc3QgKl9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3Jl
cXVlc3RfZmlyc3QoY29uc3QgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdikKK3N0
YXRpYyBpbmxpbmUgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0KiBf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2ZpcnN0KGNvbnN0IEV3
a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYpCiB7CiAgICAgcmV0dXJuIEVJTkFfSU5M
SVNUX0NPTlRBSU5FUl9HRVQoCi0gICAgICAgIHByaXYtPnJlbmRlci5wcmVfcmVuZGVyX3JlcXVl
c3RzLAotICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3Qp
OworICAgICAgICAgICAgICAgcHJpdi0+cmVuZGVyLnByZV9yZW5kZXJfcmVxdWVzdHMsCisgICAg
ICAgICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QpOwog
fQogCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1
ZXN0X2ZsdXNoKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYpCitzdGF0aWMgdm9p
ZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2ZsdXNoKEV3a19U
aWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYpCiB7Ci0gICAgRWluYV9Jbmxpc3QgKipwbCA9
ICZwcml2LT5yZW5kZXIucHJlX3JlbmRlcl9yZXF1ZXN0czsKKyAgICBFaW5hX0lubGlzdCoqIHBs
ID0gJnByaXYtPnJlbmRlci5wcmVfcmVuZGVyX3JlcXVlc3RzOwogICAgIHdoaWxlICgqcGwpIHsK
LSAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0ICpyOwor
ICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QqIHI7CiAg
ICAgICAgIHIgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2Zp
cnN0KHByaXYpOwogICAgICAgICAqcGwgPSBlaW5hX2lubGlzdF9yZW1vdmUoKnBsLCAqcGwpOwog
ICAgICAgICBmcmVlKHIpOwogICAgIH0KIH0KIAotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNr
aW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9jbGVhcihFd2tfVGlsZWRfQmFja2luZ19TdG9y
ZV9EYXRhICpwcml2KQorc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9y
ZW5kZXJfcmVxdWVzdF9jbGVhcihFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2KQog
ewotICAgIEVpbmFfSW5saXN0ICoqcGwgPSAmcHJpdi0+cmVuZGVyLnByZV9yZW5kZXJfcmVxdWVz
dHM7Ci0gICAgRWluYV9Jbmxpc3QgKml0ZXIgPSAqcGwsICp0bXA7CisgICAgRWluYV9Jbmxpc3Qq
KiBwbCA9ICZwcml2LT5yZW5kZXIucHJlX3JlbmRlcl9yZXF1ZXN0czsKKyAgICBFaW5hX0lubGlz
dCogaXRlciA9ICpwbCwgKiB0bXA7CiAgICAgd2hpbGUgKGl0ZXIpIHsKLSAgICAgICAgRXdrX1Rp
bGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0ICpyID0KKyAgICAgICAgRXdrX1Rp
bGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0KiByID0KICAgICAgICAgICAgIEVJ
TkFfSU5MSVNUX0NPTlRBSU5FUl9HRVQoCiAgICAgICAgICAgICAgICAgaXRlciwgRXdrX1RpbGVk
X0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0KTsKICAgICAgICAgdG1wID0gaXRlci0+
bmV4dDsKQEAgLTMxMSwxMyArMzExLDEzIEBAIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfY2xlYXIoRXdrX1RpbGVkX0JhY2tpbmdfCiB9CiAK
IC8qIGFzc3VtZXMgcHJpdi0+cHJvY2Vzcy5wcmVfY2Igd2FzIGNhbGxlZCBpZiByZXF1aXJlZCEg
Ki8KLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVl
c3RfcHJvY2Vzc19zaW5nbGUoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdikKK3N0
YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfcHJv
Y2Vzc19zaW5nbGUoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdikKIHsKLSAgICBF
d2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QgKnJlcTsKKyAgICBFd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QqIHJlcTsKICAgICBFaW5hX1Jl
Y3RhbmdsZSBhcmVhOwotICAgIEV3a19UaWxlX01hdHJpeCAqdG0gPSBwcml2LT5tb2RlbC5tYXRy
aXg7Ci0gICAgRXdrX1RpbGUgKnQ7Ci0gICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWM7Cisg
ICAgRXdrX1RpbGVfTWF0cml4KiB0bSA9IHByaXYtPm1vZGVsLm1hdHJpeDsKKyAgICBFd2tfVGls
ZSogdGlsZTsKKyAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHR1YzsKICAgICB1bnNpZ25lZCBs
b25nIGNvbCwgcm93OwogICAgIGZsb2F0IHpvb207CiAgICAgZG91YmxlIGxhc3RfdXNlZCA9IGVj
b3JlX2xvb3BfdGltZV9nZXQoKTsKQEAgLTMzNSwyMiArMzM1LDIyIEBAIHN0YXRpYyB2b2lkIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfcHJvY2Vzc19zaW5nbGUo
RXdrX1RpbGVkCiAgICAgICAgIGdvdG8gZW5kOwogICAgIH0KIAotICAgIHQgPSBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfdGlsZV9uZXcocHJpdiwgY29sLCByb3csIHpvb20pOwotICAgIGlmICgh
dCkKKyAgICB0aWxlID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfbmV3KHByaXYsIGNv
bCwgcm93LCB6b29tKTsKKyAgICBpZiAoIXRpbGUpCiAgICAgICAgIGdvdG8gZW5kOwogCiAgICAg
YXJlYS54ID0gMDsKICAgICBhcmVhLnkgPSAwOwotICAgIGFyZWEudyA9IHByaXYtPnZpZXcudGls
ZS53OwotICAgIGFyZWEuaCA9IHByaXYtPnZpZXcudGlsZS5oOworICAgIGFyZWEudyA9IHByaXYt
PnZpZXcudGlsZS53aWR0aDsKKyAgICBhcmVhLmggPSBwcml2LT52aWV3LnRpbGUuaGVpZ2h0Owog
Ci0gICAgcHJpdi0+cmVuZGVyLmNiKHByaXYtPnJlbmRlci5kYXRhLCB0LCAmYXJlYSk7CisgICAg
cHJpdi0+cmVuZGVyLmNiKHByaXYtPnJlbmRlci5kYXRhLCB0aWxlLCAmYXJlYSk7CiAgICAgZXZh
c19vYmplY3RfaW1hZ2VfZGF0YV91cGRhdGVfYWRkKAotICAgICAgICB0LT5pbWFnZSwKKyAgICAg
ICAgdGlsZS0+aW1hZ2UsCiAgICAgICAgIGFyZWEueCwgYXJlYS55LCBhcmVhLncsIGFyZWEuaCk7
Ci0gICAgZXdrX3RpbGVfbWF0cml4X3RpbGVfdXBkYXRlc19jbGVhcih0bSwgdCk7CisgICAgZXdr
X3RpbGVfbWF0cml4X3RpbGVfdXBkYXRlc19jbGVhcih0bSwgdGlsZSk7CiAKLSAgICBld2tfdGls
ZV9tYXRyaXhfdGlsZV9wdXQodG0sIHQsIGxhc3RfdXNlZCk7CisgICAgZXdrX3RpbGVfbWF0cml4
X3RpbGVfcHV0KHRtLCB0aWxlLCBsYXN0X3VzZWQpOwogCiBlbmQ6CiAgICAgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9kZWwocHJpdiwgcmVxKTsKQEAgLTM1OCw3
ICszNTgsNyBAQCBlbmQ6CiAgICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2F1dG9fZmx1c2godHVj
KTsKIH0KIAotc3RhdGljIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9w
cm9jZXNzX2lkbGVyX2NiKHZvaWQgKmRhdGEpCitzdGF0aWMgRWluYV9Cb29sIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV9pdGVtX3Byb2Nlc3NfaWRsZXJfY2Iodm9pZCogZGF0YSkKIHsKICAgICBF
d2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2ID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGVk
X0JhY2tpbmdfU3RvcmVfRGF0YSo+KGRhdGEpOwogCkBAIC0zNzgsNyArMzc4LDcgQEAgc3RhdGlj
IEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9wcm9jZXNzX2lkbGVyX2Ni
KHZvaWQgKmRhdGEpCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotc3RhdGljIGlubGluZSB2
b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Byb2Nlc3NfaWRsZXJfc3RvcChFd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2KQorc3RhdGljIGlubGluZSB2b2lkIF9ld2tf
dGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Byb2Nlc3NfaWRsZXJfc3RvcChFd2tfVGlsZWRfQmFj
a2luZ19TdG9yZV9EYXRhKiBwcml2KQogewogICAgIGlmICghcHJpdi0+cmVuZGVyLmlkbGVyKQog
ICAgICAgICByZXR1cm47CkBAIC0zODcsNyArMzg3LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Byb2Nlc3NfaWRsZXJfc3RvcChFd2tfVGlsZWRf
QmEKICAgICBwcml2LT5yZW5kZXIuaWRsZXIgPSAwOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcHJvY2Vzc19pZGxlcl9zdGFydChFd2tfVGls
ZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2KQorc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9pdGVtX3Byb2Nlc3NfaWRsZXJfc3RhcnQoRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfRGF0YSogcHJpdikKIHsKICAgICBpZiAocHJpdi0+cmVuZGVyLmlkbGVyKQogICAg
ICAgICByZXR1cm47CkBAIC0zOTUsNyArMzk1LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIF9ld2tf
dGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Byb2Nlc3NfaWRsZXJfc3RhcnQoRXdrX1RpbGVkX0IK
ICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcHJvY2Vzc19pZGxlcl9jYiwg
cHJpdik7CiB9CiAKLXN0YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2Rp
c2FibGVfcmVuZGVyKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYpCitzdGF0aWMg
RWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9kaXNhYmxlX3JlbmRlcihFd2tfVGls
ZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2KQogewogICAgIGlmIChwcml2LT5yZW5kZXIuc3Vz
cGVuZCkKICAgICAgICAgcmV0dXJuIEVJTkFfVFJVRTsKQEAgLTQwNSw3ICs0MDUsNyBAQCBzdGF0
aWMgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9kaXNhYmxlX3JlbmRlcihFd2tf
VGlsZWRfQmFja2luZ19TdG9yZQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLXN0YXRpYyBF
aW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2VuYWJsZV9yZW5kZXIoRXdrX1RpbGVk
X0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdikKK3N0YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX2VuYWJsZV9yZW5kZXIoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSog
cHJpdikKIHsKICAgICBpZiAoIXByaXYtPnJlbmRlci5zdXNwZW5kKQogICAgICAgICByZXR1cm4g
RUlOQV9UUlVFOwpAQCAtNDE4LDkgKzQxOCw5IEBAIHN0YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX2VuYWJsZV9yZW5kZXIoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfCiAg
ICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotc3RhdGljIGlubGluZSBFaW5hX0Jvb2wgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZmlsbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRh
ICpwcml2LCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdCwgdW5zaWduZWQgbG9uZyBj
b2wsIHVuc2lnbmVkIGxvbmcgcm93KQorc3RhdGljIGlubGluZSBFaW5hX0Jvb2wgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX2l0ZW1fZmlsbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBw
cml2LCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKiBpdCwgdW5zaWduZWQgbG9uZyBjb2x1
bW4sIHVuc2lnbmVkIGxvbmcgcm93KQogewotICAgIHVuc2lnbmVkIGxvbmcgbV9jb2wgPSBwcml2
LT5tb2RlbC5iYXNlLmNvbCArIGNvbDsKKyAgICB1bnNpZ25lZCBsb25nIG1fY29sID0gcHJpdi0+
bW9kZWwuYmFzZS5jb2wgKyBjb2x1bW47CiAgICAgdW5zaWduZWQgbG9uZyBtX3JvdyA9IHByaXYt
Pm1vZGVsLmJhc2Uucm93ICsgcm93OwogICAgIGRvdWJsZSBsYXN0X3VzZWQgPSBlY29yZV9sb29w
X3RpbWVfZ2V0KCk7CiAKQEAgLTQyOCwyMCArNDI4LDIwIEBAIHN0YXRpYyBpbmxpbmUgRWluYV9C
b29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2ZpbGwoRXdrX1RpbGVkX0JhY2tpbmdf
U3RvCiAgICAgICAgIGlmIChpdC0+dGlsZSkKICAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV90aWxlX2Rpc3NvY2lhdGUocHJpdiwgaXQsIGxhc3RfdXNlZCk7CiAgICAgfSBlbHNl
IHsKLSAgICAgICAgRXdrX1RpbGUgKnQ7CisgICAgICAgIEV3a19UaWxlKiB0aWxlOwogICAgICAg
ICBjb25zdCBmbG9hdCB6b29tID0gcHJpdi0+dmlldy50aWxlLnpvb207CiAKICAgICAgICAgaWYg
KGl0LT50aWxlKSB7Ci0gICAgICAgICAgICBFd2tfVGlsZSAqb2xkID0gaXQtPnRpbGU7CisgICAg
ICAgICAgICBFd2tfVGlsZSogb2xkID0gaXQtPnRpbGU7CiAgICAgICAgICAgICBpZiAob2xkLT5y
b3cgIT0gbV9yb3cgfHwgb2xkLT5jb2wgIT0gbV9jb2wgfHwgb2xkLT56b29tICE9IHpvb20pCiAg
ICAgICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfZGlzc29jaWF0ZShw
cml2LCBpdCwgbGFzdF91c2VkKTsKICAgICAgICAgICAgIGVsc2UgaWYgKG9sZC0+cm93ID09IG1f
cm93ICYmIG9sZC0+Y29sID09IG1fY29sICYmIG9sZC0+em9vbSA9PSB6b29tKQogICAgICAgICAg
ICAgICAgIGdvdG8gZW5kOwogICAgICAgICB9CiAKLSAgICAgICAgdCA9IGV3a190aWxlX21hdHJp
eF90aWxlX2V4YWN0X2dldChwcml2LT5tb2RlbC5tYXRyaXgsIG1fY29sLCBtX3Jvdywgem9vbSk7
CisgICAgICAgIHRpbGUgPSBld2tfdGlsZV9tYXRyaXhfdGlsZV9leGFjdF9nZXQocHJpdi0+bW9k
ZWwubWF0cml4LCBtX2NvbCwgbV9yb3csIHpvb20pOwogCi0gICAgICAgIGlmICghdCkgeworICAg
ICAgICBpZiAoIXRpbGUpIHsKICAgICAgICAgICAgIC8qIE5PVEU6IGl0IG5ldmVyIHJldHVybnMg
MCBpZiBpdC0+dGlsZSB3YXMgc2V0ISAqLwogICAgICAgICAgICAgaWYgKGl0LT50aWxlKSB7CiAg
ICAgICAgICAgICAgICAgQ1JJVElDQUwoIml0LT50aWxlPSVwLCBidXQgaXQgc2hvdWxkIGJlIDAh
IiwgaXQtPnRpbGUpOwpAQCAtNDUxLDE5ICs0NTEsMTkgQEAgc3RhdGljIGlubGluZSBFaW5hX0Jv
b2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZmlsbChFd2tfVGlsZWRfQmFja2luZ19T
dG8KIAogICAgICAgICAgICAgLyogRG8gbm90IGFkZCBuZXcgcmVxdWVzdHMgdG8gdGhlIHJlbmRl
ciBxdWV1ZSAqLwogICAgICAgICAgICAgaWYgKCFwcml2LT5yZW5kZXIuc3VzcGVuZCkgewotICAg
ICAgICAgICAgICAgIHQgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9uZXcocHJpdiwg
bV9jb2wsIG1fcm93LCB6b29tKTsKLSAgICAgICAgICAgICAgICBpZiAoIXQpCisgICAgICAgICAg
ICAgICAgdGlsZSA9IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX25ldyhwcml2LCBtX2Nv
bCwgbV9yb3csIHpvb20pOworICAgICAgICAgICAgICAgIGlmICghdGlsZSkKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7Ci0gICAgICAgICAgICAgICAgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX3RpbGVfYXNzb2NpYXRlKHByaXYsIHQsIGl0KTsKKyAgICAgICAgICAgICAg
ICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9hc3NvY2lhdGUocHJpdiwgdGlsZSwgaXQp
OwogICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKHQgIT0gaXQtPnRpbGUpIHsKKyAg
ICAgICAgfSBlbHNlIGlmICh0aWxlICE9IGl0LT50aWxlKSB7CiAgICAgICAgICAgICBpZiAoaXQt
PnRpbGUpCiAgICAgICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfZGlz
c29jaWF0ZShwcml2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGl0LCBsYXN0X3VzZWQpOwotICAgICAgICAgICAgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX3RpbGVfYXNzb2NpYXRlKHByaXYsIHQsIGl0KTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0LCBsYXN0X3Vz
ZWQpOworICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfYXNzb2NpYXRl
KHByaXYsIHRpbGUsIGl0KTsKICAgICAgICAgfQogCi0gICAgICBlbmQ6CitlbmQ6CiAKICAgICAg
ICAgcmV0dXJuIEVJTkFfVFJVRTsKICAgICB9CkBAIC00NzEsOSArNDcxLDkgQEAgc3RhdGljIGlu
bGluZSBFaW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZmlsbChFd2tfVGls
ZWRfQmFja2luZ19TdG8KICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi1zdGF0aWMgRXdrX1Rp
bGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fYWRk
KEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIHVuc2lnbmVkIGxvbmcgY29sLCB1
bnNpZ25lZCBsb25nIHJvdykKK3N0YXRpYyBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKiBf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9hZGQoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVf
RGF0YSogcHJpdiwgdW5zaWduZWQgbG9uZyBjb2x1bW4sIHVuc2lnbmVkIGxvbmcgcm93KQogewot
ICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0OworICAgIEV3a19UaWxlZF9CYWNr
aW5nX1N0b3JlX0l0ZW0qIGl0OwogICAgIEV2YXNfQ29vcmQgeCwgeSwgdHcsIHRoOwogCiAgICAg
REJHKCJvPSVwIiwgcHJpdi0+c2VsZik7CkBAIC00ODIsOSArNDgyLDkgQEAgc3RhdGljIEV3a19U
aWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKl9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2Fk
ZChFd2tfVGlsZWQKICAgICBpZiAoIWl0KQogICAgICAgICByZXR1cm4gMDsKIAotICAgIHR3ID0g
cHJpdi0+dmlldy50aWxlLnc7Ci0gICAgdGggPSBwcml2LT52aWV3LnRpbGUuaDsKLSAgICB4ID0g
cHJpdi0+dmlldy5vZmZzZXQuYmFzZS54ICsgcHJpdi0+dmlldy54ICsgdHcgICpjb2w7CisgICAg
dHcgPSBwcml2LT52aWV3LnRpbGUud2lkdGg7CisgICAgdGggPSBwcml2LT52aWV3LnRpbGUuaGVp
Z2h0OworICAgIHggPSBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggKyBwcml2LT52aWV3LnggKyB0
dyAgKmNvbHVtbjsKICAgICB5ID0gcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ICsgcHJpdi0+dmll
dy55ICsgdGggICpyb3c7CiAKICAgICBpdC0+dGlsZSA9IDA7CkBAIC00OTIsNyArNDkyLDcgQEAg
c3RhdGljIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKl9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9pdGVtX2FkZChFd2tfVGlsZWQKICAgICBpdC0+c21vb3RoX3NjYWxlID0gcHJpdi0+dmll
dy50aWxlLnpvb21fd2Vha19zbW9vdGhfc2NhbGU7CiAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX2l0ZW1fbW92ZShpdCwgeCwgeSk7CiAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0
ZW1fcmVzaXplKGl0LCB0dywgdGgpOwotICAgIGlmICghX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X2l0ZW1fZmlsbChwcml2LCBpdCwgY29sLCByb3cpKSB7CisgICAgaWYgKCFfZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfaXRlbV9maWxsKHByaXYsIGl0LCBjb2x1bW4sIHJvdykpIHsKICAgICAgICAg
ZnJlZShpdCk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KQEAgLTUwMCwyNiArNTAwLDI2IEBA
IHN0YXRpYyBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICpfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfaXRlbV9hZGQoRXdrX1RpbGVkCiAgICAgcmV0dXJuIGl0OwogfQogCi1zdGF0aWMgdm9p
ZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9kZWwoRXdrX1RpbGVkX0JhY2tpbmdfU3Rv
cmVfRGF0YSAqcHJpdiwgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQpCitzdGF0aWMg
dm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9kZWwoRXdrX1RpbGVkX0JhY2tpbmdf
U3RvcmVfRGF0YSogcHJpdiwgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSogaXRlbSkKIHsK
LSAgICBpZiAoaXQtPnRpbGUpIHsKKyAgICBpZiAoaXRlbS0+dGlsZSkgewogICAgICAgICBkb3Vi
bGUgbGFzdF91c2VkID0gZWNvcmVfbG9vcF90aW1lX2dldCgpOwotICAgICAgICBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfdGlsZV9kaXNzb2NpYXRlKHByaXYsIGl0LCBsYXN0X3VzZWQpOworICAg
ICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9kaXNzb2NpYXRlKHByaXYsIGl0ZW0s
IGxhc3RfdXNlZCk7CiAgICAgfQogCi0gICAgZnJlZShpdCk7CisgICAgZnJlZShpdGVtKTsKIH0K
IAotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fc21vb3RoX3NjYWxl
X3NldChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdCwgRWluYV9Cb29sIHNtb290aF9z
Y2FsZSkKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Ntb290aF9z
Y2FsZV9zZXQoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSogaXRlbSwgRWluYV9Cb29sIHNt
b290aF9zY2FsZSkKIHsKLSAgICBpZiAoaXQtPnNtb290aF9zY2FsZSA9PSBzbW9vdGhfc2NhbGUp
CisgICAgaWYgKGl0ZW0tPnNtb290aF9zY2FsZSA9PSBzbW9vdGhfc2NhbGUpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIGlmIChpdC0+dGlsZSkKLSAgICAgICAgZXZhc19vYmplY3RfaW1hZ2Vfc21v
b3RoX3NjYWxlX3NldChpdC0+dGlsZS0+aW1hZ2UsIHNtb290aF9zY2FsZSk7CisgICAgaWYgKGl0
ZW0tPnRpbGUpCisgICAgICAgIGV2YXNfb2JqZWN0X2ltYWdlX3Ntb290aF9zY2FsZV9zZXQoaXRl
bS0+dGlsZS0+aW1hZ2UsIHNtb290aF9zY2FsZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfY2hhbmdlZChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9E
YXRhICpwcml2KQorc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9j
aGFuZ2VkKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYpCiB7CiAgICAgaWYgKHBy
aXYtPmNoYW5nZWQuYW55KQogICAgICAgICByZXR1cm47CkBAIC01MjcsOSArNTI3LDkgQEAgc3Rh
dGljIGlubGluZSB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9jaGFuZ2VkKEV3a19UaWxl
ZF9CYWNraW5nX1N0b3JlX0RhdGEKICAgICBwcml2LT5jaGFuZ2VkLmFueSA9IEVJTkFfVFJVRTsK
IH0KIAotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfY29sc19lbmRf
ZGVsKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIEVpbmFfSW5saXN0ICoqcF9y
b3csIHVuc2lnbmVkIGludCBjb3VudCkKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV92aWV3X2NvbHNfZW5kX2RlbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2
LCBFaW5hX0lubGlzdCoqIHBfcm93LCB1bnNpZ25lZCBpbnQgY291bnQpCiB7Ci0gICAgRWluYV9J
bmxpc3QgKm47CisgICAgRWluYV9Jbmxpc3QqIG47CiAgICAgdW5zaWduZWQgaW50IGk7CiAKICAg
ICBpZiAoIWNvdW50KQpAQCAtNTM4LDcgKzUzOCw3IEBAIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV92aWV3X2NvbHNfZW5kX2RlbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9E
CiAgICAgbiA9ICgqcF9yb3cpLT5sYXN0OwogCiAgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBp
KyspIHsKLSAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQ7CisgICAgICAg
IEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0qIGl0OwogICAgICAgICBpdCA9IEVJTkFfSU5M
SVNUX0NPTlRBSU5FUl9HRVQobiwgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSk7CiAgICAg
ICAgIG4gPSBuLT5wcmV2OwogICAgICAgICAqcF9yb3cgPSBlaW5hX2lubGlzdF9yZW1vdmUoKnBf
cm93LCBFSU5BX0lOTElTVF9HRVQoaXQpKTsKQEAgLTU0NiwxNCArNTQ2LDE0IEBAIHN0YXRpYyB2
b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X2NvbHNfZW5kX2RlbChFd2tfVGlsZWRf
QmFja2luZ19TdG9yZV9ECiAgICAgfQogfQogCi1zdGF0aWMgRWluYV9Cb29sIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV92aWV3X2NvbHNfZW5kX2FkZChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9E
YXRhICpwcml2LCBFaW5hX0lubGlzdCAqKnBfcm93LCB1bnNpZ25lZCBpbnQgYmFzZV9jb2wsIHVu
c2lnbmVkIGludCBjb3VudCkKK3N0YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX3ZpZXdfY29sc19lbmRfYWRkKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYs
IEVpbmFfSW5saXN0KiogcF9yb3csIHVuc2lnbmVkIGludCBiYXNlX2NvbHVtbiwgdW5zaWduZWQg
aW50IGNvdW50KQogewogICAgIHVuc2lnbmVkIGludCBpLCByID0gcF9yb3cgLSBwcml2LT52aWV3
Lml0ZW1zOwogCi0gICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyssIGJhc2VfY29sKyspIHsK
LSAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQ7CisgICAgZm9yIChpID0g
MDsgaSA8IGNvdW50OyBpKyssIGJhc2VfY29sdW1uKyspIHsKKyAgICAgICAgRXdrX1RpbGVkX0Jh
Y2tpbmdfU3RvcmVfSXRlbSogaXQ7CiAKLSAgICAgICAgaXQgPSBfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfaXRlbV9hZGQocHJpdiwgYmFzZV9jb2wsIHIpOworICAgICAgICBpdCA9IF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9pdGVtX2FkZChwcml2LCBiYXNlX2NvbHVtbiwgcik7CiAgICAgICAg
IGlmICghaXQpIHsKICAgICAgICAgICAgIENSSVRJQ0FMKCJmYWlsZWQgdG8gYWRkIGNvbHVtbiAl
dSBvZiAldSBpbiByb3cgJXUuIiwgaSwgY291bnQsIHIpOwogICAgICAgICAgICAgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX3ZpZXdfY29sc19lbmRfZGVsKHByaXYsIHBfcm93LCBpKTsKQEAgLTU2
NSwxNyArNTY1LDE3IEBAIHN0YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3ZpZXdfY29sc19lbmRfYWRkKEV3a19UaWxlZF9CYWNraW5nX1N0CiAgICAgcmV0dXJuIEVJTkFf
VFJVRTsKIH0KIAotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcm93
X2RlbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFaW5hX0lubGlzdCAqcm93
KQorc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcm93X2RlbChFd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2LCBFaW5hX0lubGlzdCogcm93KQogewogICAg
IHdoaWxlIChyb3cpIHsKLSAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQ7
CisgICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0qIGl0OwogICAgICAgICBpdCA9
IEVJTkFfSU5MSVNUX0NPTlRBSU5FUl9HRVQocm93LCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9J
dGVtKTsKICAgICAgICAgcm93ID0gcm93LT5uZXh0OwogICAgICAgICBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfaXRlbV9kZWwocHJpdiwgaXQpOwogICAgIH0KIH0KIAotc3RhdGljIHZvaWQgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcm93c19yYW5nZV9kZWwoRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfRGF0YSAqcHJpdiwgRWluYV9Jbmxpc3QgKipzdGFydCwgRWluYV9Jbmxpc3QgKipl
bmQpCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19yb3dzX3Jhbmdl
X2RlbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2LCBFaW5hX0lubGlzdCoqIHN0
YXJ0LCBFaW5hX0lubGlzdCoqIGVuZCkKIHsKICAgICBmb3IgKDsgc3RhcnQgPCBlbmQ7IHN0YXJ0
KyspIHsKICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcm93X2RlbChwcml2
LCAqc3RhcnQpOwpAQCAtNTgzLDEwICs1ODMsMTAgQEAgc3RhdGljIHZvaWQgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX3ZpZXdfcm93c19yYW5nZV9kZWwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmUK
ICAgICB9CiB9CiAKLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3Jv
d3NfYWxsX2RlbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2KQorc3RhdGljIHZv
aWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcm93c19hbGxfZGVsKEV3a19UaWxlZF9C
YWNraW5nX1N0b3JlX0RhdGEqIHByaXYpCiB7Ci0gICAgRWluYV9Jbmxpc3QgKipzdGFydDsKLSAg
ICBFaW5hX0lubGlzdCAqKmVuZDsKKyAgICBFaW5hX0lubGlzdCoqIHN0YXJ0OworICAgIEVpbmFf
SW5saXN0KiogZW5kOwogCiAgICAgc3RhcnQgPSBwcml2LT52aWV3Lml0ZW1zOwogICAgIGVuZCA9
IHByaXYtPnZpZXcuaXRlbXMgKyBwcml2LT52aWV3LnJvd3M7CkBAIC01OTgsMjcgKzU5OCwyNyBA
QCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19yb3dzX2FsbF9kZWwo
RXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRAogICAgIHByaXYtPnZpZXcucm93cyA9IDA7CiB9CiAK
LXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9yZW5kZXIodm9pZCAqZGF0YSwg
RXdrX1RpbGUgKnQsIGNvbnN0IEVpbmFfUmVjdGFuZ2xlICphcmVhKQorc3RhdGljIHZvaWQgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX3JlbmRlcih2b2lkKiBkYXRhLCBFd2tfVGlsZSogdGlsZSwg
Y29uc3QgRWluYV9SZWN0YW5nbGUqIGFyZWEpCiB7CiAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3Rv
cmVfRGF0YSogcHJpdiA9IHN0YXRpY19jYXN0PEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEq
PihkYXRhKTsKIAogICAgIElORigiVE9ETyAlcCAodmlzaWJsZT8gJWQpIFslbHUsJWx1XSAlZCwl
ZCArICVkeCVkIiwKLSAgICAgICAgdCwgdC0+dmlzaWJsZSwgdC0+Y29sLCB0LT5yb3csIGFyZWEt
PngsIGFyZWEtPnksIGFyZWEtPncsIGFyZWEtPmgpOworICAgICAgICB0aWxlLCB0aWxlLT52aXNp
YmxlLCB0aWxlLT5jb2wsIHRpbGUtPnJvdywgYXJlYS0+eCwgYXJlYS0+eSwgYXJlYS0+dywgYXJl
YS0+aCk7CiAKLSAgICBpZiAoIXQtPnZpc2libGUpCisgICAgaWYgKCF0aWxlLT52aXNpYmxlKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBpZiAocHJpdi0+dmlldy50aWxlLncgIT0gdC0+dyB8fCBw
cml2LT52aWV3LnRpbGUuaCAhPSB0LT5oKQorICAgIGlmIChwcml2LT52aWV3LnRpbGUud2lkdGgg
IT0gdGlsZS0+d2lkdGggfHwgcHJpdi0+dmlldy50aWxlLmhlaWdodCAhPSB0aWxlLT5oZWlnaHQp
CiAgICAgICAgIHJldHVybjsgLy8gdG9kbzogcmVtb3ZlIG1lIGxhdGVyLCBkb24ndCBldmVuIGZs
YWcgYXMgZGlydHkhCiAKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihwcml2LT5yZW5k
ZXIuY2IpOwotICAgIGlmICghcHJpdi0+cmVuZGVyLmNiKHByaXYtPnJlbmRlci5kYXRhLCB0LCBh
cmVhKSkKKyAgICBpZiAoIXByaXYtPnJlbmRlci5jYihwcml2LT5yZW5kZXIuZGF0YSwgdGlsZSwg
YXJlYSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGV2YXNfb2JqZWN0X2ltYWdlX2RhdGFfdXBk
YXRlX2FkZCh0LT5pbWFnZSwgYXJlYS0+eCwgYXJlYS0+eSwgYXJlYS0+dywgYXJlYS0+aCk7Cisg
ICAgZXZhc19vYmplY3RfaW1hZ2VfZGF0YV91cGRhdGVfYWRkKHRpbGUtPmltYWdlLCBhcmVhLT54
LCBhcmVhLT55LCBhcmVhLT53LCBhcmVhLT5oKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9tb2RlbF9tYXRyaXhfY3JlYXRlKEV3a19UaWxlZF9CYWNr
aW5nX1N0b3JlX0RhdGEgKnByaXYsIEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjKQorc3RhdGlj
IGlubGluZSB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9tb2RlbF9tYXRyaXhfY3JlYXRl
KEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYsIEV3a19UaWxlX1VudXNlZF9DYWNo
ZSogdGlsZVVudXNlZENhY2hlKQogewogICAgIGlmIChwcml2LT5tb2RlbC5tYXRyaXgpIHsKICAg
ICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcm93c19hbGxfZGVsKHByaXYpOwpA
QCAtNjI5LDEyICs2MjksMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9tb2RlbF9tYXRyaXhfY3JlYXRlKEV3a19UaWxlZF9CYWNraW4KICAgICAgICAgZXdr
X3RpbGVfbWF0cml4X2ZyZWUocHJpdi0+bW9kZWwubWF0cml4KTsKICAgICB9CiAKLSAgICBwcml2
LT5tb2RlbC5tYXRyaXggPSBld2tfdGlsZV9tYXRyaXhfbmV3KHR1YywgcHJpdi0+bW9kZWwuY3Vy
LmNvbHMsIHByaXYtPm1vZGVsLmN1ci5yb3dzLCBwcml2LT5jc3BhY2UsIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9yZW5kZXIsIHByaXYpOworICAgIHByaXYtPm1vZGVsLm1hdHJpeCA9IGV3a190
aWxlX21hdHJpeF9uZXcodGlsZVVudXNlZENhY2hlLCBwcml2LT5tb2RlbC5jdXIuY29scywgcHJp
di0+bW9kZWwuY3VyLnJvd3MsIHByaXYtPmNzcGFjZSwgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3JlbmRlciwgcHJpdik7CiB9CiAKLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV9zbWFydF9tZW1iZXJfZGVsKEV2YXNfT2JqZWN0ICpvLCBFdmFzX09iamVjdCAqbWVtYmVyKQor
c3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X21lbWJlcl9kZWwoRXZh
c19PYmplY3QqIGV3a1RpbGUsIEV2YXNfT2JqZWN0KiBtZW1iZXIpCiB7Ci0gICAgUFJJVl9EQVRB
X0dFVF9PUl9SRVRVUk4obywgcHJpdik7CisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4oZXdr
VGlsZSwgcHJpdik7CiAgICAgaWYgKCFwcml2LT5jb250ZW50c19jbGlwcGVyKQogICAgICAgICBy
ZXR1cm47CiAgICAgZXZhc19vYmplY3RfY2xpcF91bnNldChtZW1iZXIpOwpAQCAtNjQyLDE4ICs2
NDIsMTggQEAgc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X21lbWJl
cl9kZWwoRXZhc19PYmplY3QgKm8sIEV2YXNfT2JqZWMKICAgICAgICAgZXZhc19vYmplY3RfaGlk
ZShwcml2LT5jb250ZW50c19jbGlwcGVyKTsKIH0KIAotc3RhdGljIHZvaWQgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX3NtYXJ0X21lbWJlcl9hZGQoRXZhc19PYmplY3QgKm8sIEV2YXNfT2JqZWN0
ICptZW1iZXIpCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfbWVt
YmVyX2FkZChFdmFzX09iamVjdCogZXdrVGlsZSwgRXZhc19PYmplY3QqIG1lbWJlcikKIHsKLSAg
ICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2KTsKKyAgICBQUklWX0RBVEFfR0VUX09S
X1JFVFVSTihld2tUaWxlLCBwcml2KTsKICAgICBpZiAoIXByaXYtPmNvbnRlbnRzX2NsaXBwZXIp
CiAgICAgICAgIHJldHVybjsKICAgICBldmFzX29iamVjdF9jbGlwX3NldChtZW1iZXIsIHByaXYt
PmNvbnRlbnRzX2NsaXBwZXIpOwotICAgIGlmIChldmFzX29iamVjdF92aXNpYmxlX2dldChvKSkK
KyAgICBpZiAoZXZhc19vYmplY3RfdmlzaWJsZV9nZXQoZXdrVGlsZSkpCiAgICAgICAgIGV2YXNf
b2JqZWN0X3Nob3cocHJpdi0+Y29udGVudHNfY2xpcHBlcik7CiB9CiAKICNpZmRlZiBERUJVR19N
RU1fTEVBS1MKLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9tZW1fZGJnKEV3
a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYpCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfbWVtX2RiZyhFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2
KQogewogICAgIHN0YXRpYyBpbnQgcnVuID0gMDsKIApAQCAtNjcwLDEzICs2NzAsMTMgQEAgc3Rh
dGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX21lbV9kYmcoRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfRGF0YSAqcHJpdikKICAgICBwcmludGYoIi0tLSBFTkQgREVCVUcgVElMRUQgQkFD
S0lORyBTVE9SRSBNRU1PUlkgWyVkXSAtLVxuXG4iLCBydW4pOwogfQogCi1zdGF0aWMgRWluYV9C
b29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zaWdfdXNyKHZvaWQgKmRhdGEsIGludCB0eXBl
LCB2b2lkICpldmVudCkKK3N0YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3NpZ191c3Iodm9pZCogZGF0YSwgaW50IHR5cGUsIHZvaWQqIGV2ZW50KQogewotICAgIEVjb3Jl
X0V2ZW50X1NpZ25hbF9Vc2VyICpzaWcgPSAoRWNvcmVfRXZlbnRfU2lnbmFsX1VzZXIqKWV2ZW50
OwotICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYgPSAoRXdrX1RpbGVkX0Jh
Y2tpbmdfU3RvcmVfRGF0YSopZGF0YTsKKyAgICBFY29yZV9FdmVudF9TaWduYWxfVXNlciogc2ln
ID0gKEVjb3JlX0V2ZW50X1NpZ25hbF9Vc2VyKilldmVudDsKKyAgICBFd2tfVGlsZWRfQmFja2lu
Z19TdG9yZV9EYXRhKiBwcml2ID0gKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqKWRhdGE7
CiAKICAgICBpZiAoc2lnLT5udW1iZXIgPT0gMikgewotICAgICAgICBFd2tfVGlsZV9VbnVzZWRf
Q2FjaGUgKnR1YzsKKyAgICAgICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0dWM7CiAgICAgICAg
IHR1YyA9IGV3a190aWxlX21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJp
eCk7CiAgICAgICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9hdXRvX2ZsdXNoKHR1Yyk7CiAgICAg
fQpAQCAtNjg3LDIwICs2ODcsMjAgQEAgc3RhdGljIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfc2lnX3Vzcih2b2lkICpkYXRhLCBpbnQgdHlwZSwgdm9pZCAqZXYKIH0KICNlbmRp
ZgogCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfYWRkKEV2YXNf
T2JqZWN0ICpvKQorc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2Fk
ZChFdmFzX09iamVjdCogZXdrVGlsZSkKIHsKLSAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9E
YXRhICpwcml2OworICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXY7CiAKLSAg
ICBEQkcoIm89JXAiLCBvKTsKKyAgICBEQkcoIm89JXAiLCBld2tUaWxlKTsKIAogICAgIHByaXYg
PSBzdGF0aWNfY2FzdDxFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKj4oY2FsbG9jKDEsIHNp
emVvZigqcHJpdikpKTsKICAgICBpZiAoIXByaXYpCiAgICAgICAgIHJldHVybjsKIAotICAgIHBy
aXYtPnNlbGYgPSBvOworICAgIHByaXYtPnNlbGYgPSBld2tUaWxlOwogICAgIHByaXYtPnZpZXcu
dGlsZS56b29tID0gMS4wOwotICAgIHByaXYtPnZpZXcudGlsZS53ID0gREVGQVVMVF9USUxFX1c7
Ci0gICAgcHJpdi0+dmlldy50aWxlLmggPSBERUZBVUxUX1RJTEVfSDsKKyAgICBwcml2LT52aWV3
LnRpbGUud2lkdGggPSBERUZBVUxUX1RJTEVfVzsKKyAgICBwcml2LT52aWV3LnRpbGUuaGVpZ2h0
ID0gREVGQVVMVF9USUxFX0g7CiAgICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggPSAwOwogICAg
IHByaXYtPnZpZXcub2Zmc2V0LmN1ci55ID0gMDsKICAgICBwcml2LT52aWV3Lm9mZnNldC5vbGQu
eCA9IDA7CkBAIC03MTksMTcgKzcxOSwxNyBAQCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfc21hcnRfYWRkKEV2YXNfT2JqZWN0ICpvKQogICAgIHByaXYtPnJlbmRlci5zdXNw
ZW5kID0gRUlOQV9GQUxTRTsKICAgICBwcml2LT5jc3BhY2UgPSBFVkFTX0NPTE9SU1BBQ0VfQVJH
Qjg4ODg7IC8vIFRPRE86IGRldGVjdCBpdC4KIAotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2RhdGFf
c2V0KG8sIHByaXYpOwotICAgIF9wYXJlbnRfc2MuYWRkKG8pOworICAgIGV2YXNfb2JqZWN0X3Nt
YXJ0X2RhdGFfc2V0KGV3a1RpbGUsIHByaXYpOworICAgIF9wYXJlbnRfc2MuYWRkKGV3a1RpbGUp
OwogCiAgICAgcHJpdi0+Y29udGVudHNfY2xpcHBlciA9IGV2YXNfb2JqZWN0X3JlY3RhbmdsZV9h
ZGQoCi0gICAgICAgIGV2YXNfb2JqZWN0X2V2YXNfZ2V0KG8pKTsKKyAgICAgICAgZXZhc19vYmpl
Y3RfZXZhc19nZXQoZXdrVGlsZSkpOwogICAgIGV2YXNfb2JqZWN0X21vdmUocHJpdi0+Y29udGVu
dHNfY2xpcHBlciwgMCwgMCk7CiAgICAgZXZhc19vYmplY3RfcmVzaXplKHByaXYtPmNvbnRlbnRz
X2NsaXBwZXIsCiAgICAgICAgICAgICAgICAgICAgICAgIHByaXYtPm1vZGVsLndpZHRoLCBwcml2
LT5tb2RlbC5oZWlnaHQpOwogICAgIGV2YXNfb2JqZWN0X2NvbG9yX3NldChwcml2LT5jb250ZW50
c19jbGlwcGVyLCAyNTUsIDI1NSwgMjU1LCAyNTUpOwogICAgIGV2YXNfb2JqZWN0X3Nob3cocHJp
di0+Y29udGVudHNfY2xpcHBlcik7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfbWVtYmVyX2FkZChw
cml2LT5jb250ZW50c19jbGlwcGVyLCBvKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9tZW1iZXJf
YWRkKHByaXYtPmNvbnRlbnRzX2NsaXBwZXIsIGV3a1RpbGUpOwogCiAgICAgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX21vZGVsX21hdHJpeF9jcmVhdGUocHJpdiwgMCk7CiAgICAgZXZhc19vYmpl
Y3RfbW92ZShwcml2LT5iYXNlLmNsaXBwZXIsIDAsIDApOwpAQCAtNzM4LDE1ICs3MzgsMTUgQEAg
c3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2FkZChFdmFzX09iamVj
dCAqbykKIAogI2lmZGVmIERFQlVHX01FTV9MRUFLUwogICAgIHByaXYtPnNpZ191c3IgPSBlY29y
ZV9ldmVudF9oYW5kbGVyX2FkZAotICAgICAgICAoRUNPUkVfRVZFTlRfU0lHTkFMX1VTRVIsIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9zaWdfdXNyLCBwcml2KTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIChFQ09SRV9FVkVOVF9TSUdOQUxfVVNFUiwgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3NpZ191c3IsIHByaXYpOwogI2VuZGlmCiB9CiAKLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9zbWFydF9kZWwoRXZhc19PYmplY3QgKm8pCitzdGF0aWMgdm9pZCBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfZGVsKEV2YXNfT2JqZWN0KiBld2tUaWxlKQogewotICAg
IFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYpOwotICAgIERCRygibz0lcCIsIG8pOwot
ICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjOworICAgIFBSSVZfREFUQV9HRVRfT1JfUkVU
VVJOKGV3a1RpbGUsIHByaXYpOworICAgIERCRygibz0lcCIsIGV3a1RpbGUpOworICAgIEV3a19U
aWxlX1VudXNlZF9DYWNoZSogdHVjOwogCiAgICAgdHVjID0gZXdrX3RpbGVfbWF0cml4X3VudXNl
ZF9jYWNoZV9nZXQocHJpdi0+bW9kZWwubWF0cml4KTsKICAgICBld2tfdGlsZV91bnVzZWRfY2Fj
aGVfdW5sb2NrX2FyZWEodHVjKTsKQEAgLTc2Nyw3ICs3NjcsNyBAQCBzdGF0aWMgdm9pZCBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfZGVsKEV2YXNfT2JqZWN0ICpvKQogICAgIGV2YXNf
b2JqZWN0X3NtYXJ0X21lbWJlcl9kZWwocHJpdi0+Y29udGVudHNfY2xpcHBlcik7CiAgICAgZXZh
c19vYmplY3RfZGVsKHByaXYtPmNvbnRlbnRzX2NsaXBwZXIpOwogCi0gICAgX3BhcmVudF9zYy5k
ZWwobyk7CisgICAgX3BhcmVudF9zYy5kZWwoZXdrVGlsZSk7CiAKICNpZmRlZiBERUJVR19NRU1f
TEVBS1MKICAgICBwcmludGYoIlxuSU1QT1JUQU5UOiBUSUxFRCBCQUNLSU5HIFNUT1JFIERFTEVU
RUQgKG1heSBiZSByZWFsIGxlYWtzKVxuIik7CkBAIC03NzUsMTEgKzc3NSwxMSBAQCBzdGF0aWMg
dm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfZGVsKEV2YXNfT2JqZWN0ICpvKQog
I2VuZGlmCiB9CiAKLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9t
b3ZlKEV2YXNfT2JqZWN0ICpvLCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSkKK3N0YXRpYyB2
b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9tb3ZlKEV2YXNfT2JqZWN0KiBld2tU
aWxlLCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSkKIHsKLSAgICBEQkcoIm89JXAsIG5ldyBw
b3M6ICVkeCVkIiwgbywgeCwgeSk7CisgICAgREJHKCJvPSVwLCBuZXcgcG9zOiAlZHglZCIsIGV3
a1RpbGUsIHgsIHkpOwogCi0gICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdik7Cisg
ICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4oZXdrVGlsZSwgcHJpdik7CiAKICAgICBpZiAocHJp
di0+Y2hhbmdlZC5wb3MpCiAgICAgICAgIHJldHVybjsKQEAgLTc5MSwyOSArNzkxLDI5IEBAIHN0
YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9tb3ZlKEV2YXNfT2JqZWN0
ICpvLCBFdmFzX0Nvb3JkIHgsIEV2CiAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2NoYW5n
ZWQocHJpdik7CiB9CiAKLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFy
dF9yZXNpemUoRXZhc19PYmplY3QgKm8sIEV2YXNfQ29vcmQgdywgRXZhc19Db29yZCBoKQorc3Rh
dGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X3Jlc2l6ZShFdmFzX09iamVj
dCogZXdrVGlsZSwgRXZhc19Db29yZCB3aWR0aCwgRXZhc19Db29yZCBoZWlnaHQpCiB7Ci0gICAg
REJHKCJvPSVwLCBuZXcgc2l6ZTogJWR4JWQiLCBvLCB3LCBoKTsKKyAgICBEQkcoIm89JXAsIG5l
dyBzaXplOiAlZHglZCIsIGV3a1RpbGUsIHdpZHRoLCBoZWlnaHQpOwogCi0gICAgUFJJVl9EQVRB
X0dFVF9PUl9SRVRVUk4obywgcHJpdik7CisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4oZXdr
VGlsZSwgcHJpdik7CiAKICAgICBpZiAocHJpdi0+Y2hhbmdlZC5zaXplKQogICAgICAgICByZXR1
cm47CiAKLSAgICBpZiAocHJpdi0+dmlldy53ID09IHcgJiYgcHJpdi0+dmlldy5oID09IGgpCisg
ICAgaWYgKHByaXYtPnZpZXcud2lkdGggPT0gd2lkdGggJiYgcHJpdi0+dmlldy5oZWlnaHQgPT0g
aGVpZ2h0KQogICAgICAgICByZXR1cm47CiAKICAgICBwcml2LT5jaGFuZ2VkLnNpemUgPSBFSU5B
X1RSVUU7CiAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2NoYW5nZWQocHJpdik7CiB9CiAK
LXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9yZWNhbGNfcmVuZGVyZXJzKEV3
a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIEV2YXNfQ29vcmQgdywgRXZhc19Db29y
ZCBoLCBFdmFzX0Nvb3JkIHR3LCBFdmFzX0Nvb3JkIHRoKQorc3RhdGljIHZvaWQgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX3JlY2FsY19yZW5kZXJlcnMoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVf
RGF0YSogcHJpdiwgRXZhc19Db29yZCB3aWR0aCwgRXZhc19Db29yZCBoZWlnaHQsIEV2YXNfQ29v
cmQgdGlsZVdpZHRoLCBFdmFzX0Nvb3JkIHRpbGVIZWlnaHQpCiB7CiAgICAgbG9uZyBjb2xzLCBy
b3dzLCBvbGRfcm93cywgb2xkX2NvbHM7Ci0gICAgSU5GKCJvPSVwLCBuZXcgc2l6ZTogJWR4JWQi
LCBwcml2LT5zZWxmLCB3LCBoKTsKKyAgICBJTkYoIm89JXAsIG5ldyBzaXplOiAlZHglZCIsIHBy
aXYtPnNlbGYsIHdpZHRoLCBoZWlnaHQpOwogCi0gICAgY29scyA9IDEgKyAoaW50KWNlaWwoKGZs
b2F0KXcgLyAoZmxvYXQpdHcpOwotICAgIHJvd3MgPSAxICsgKGludCljZWlsKChmbG9hdCloIC8g
KGZsb2F0KXRoKTsKKyAgICBjb2xzID0gMSArIHN0YXRpY19jYXN0PGludD4oY2VpbChzdGF0aWNf
Y2FzdDxmbG9hdD4od2lkdGggLyB0aWxlV2lkdGgpKSk7CisgICAgcm93cyA9IDEgKyBzdGF0aWNf
Y2FzdDxpbnQ+KGNlaWwoc3RhdGljX2Nhc3Q8ZmxvYXQ+KGhlaWdodCAvIHRpbGVIZWlnaHQpKSk7
CiAKICAgICBJTkYoIm89JXAgbmV3IGdyaWQgc2l6ZSBjb2xzOiAlbGQsIHJvd3M6ICVsZCwgd2Fz
ICVsZCwgJWxkIiwKICAgICAgICAgcHJpdi0+c2VsZiwgY29scywgcm93cywgcHJpdi0+dmlldy5j
b2xzLCBwcml2LT52aWV3LnJvd3MpOwpAQCAtODI1LDcgKzgyNSw3IEBAIHN0YXRpYyB2b2lkIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9yZWNhbGNfcmVuZGVyZXJzKEV3a19UaWxlZF9CYWNraW5n
X1N0b3JlX0RhCiAgICAgb2xkX3Jvd3MgPSBwcml2LT52aWV3LnJvd3M7CiAKICAgICBpZiAocm93
cyA8IG9sZF9yb3dzKSB7Ci0gICAgICAgIEVpbmFfSW5saXN0ICoqc3RhcnQsICoqZW5kOworICAg
ICAgICBFaW5hX0lubGlzdCoqIHN0YXJ0LCAqKmVuZDsKICAgICAgICAgc3RhcnQgPSBwcml2LT52
aWV3Lml0ZW1zICsgcm93czsKICAgICAgICAgZW5kID0gcHJpdi0+dmlldy5pdGVtcyArIG9sZF9y
b3dzOwogICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19yb3dzX3JhbmdlX2Rl
bChwcml2LCBzdGFydCwgZW5kKTsKQEAgLTgzOSwxNCArODM5LDE0IEBAIHN0YXRpYyB2b2lkIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9yZWNhbGNfcmVuZGVyZXJzKEV3a19UaWxlZF9CYWNraW5n
X1N0b3JlX0RhCiAgICAgcHJpdi0+dmlldy5yb3dzID0gcm93czsKICAgICBwcml2LT52aWV3LmNv
bHMgPSBjb2xzOwogICAgIGlmIChyb3dzID4gb2xkX3Jvd3MpIHsKLSAgICAgICAgRWluYV9Jbmxp
c3QgKipzdGFydCwgKiplbmQ7CisgICAgICAgIEVpbmFfSW5saXN0Kiogc3RhcnQsICoqIGVuZDsK
ICAgICAgICAgc3RhcnQgPSBwcml2LT52aWV3Lml0ZW1zICsgb2xkX3Jvd3M7CiAgICAgICAgIGVu
ZCA9IHByaXYtPnZpZXcuaXRlbXMgKyByb3dzOwogICAgICAgICBmb3IgKDsgc3RhcnQgPCBlbmQ7
IHN0YXJ0KyspIHsKICAgICAgICAgICAgIEVpbmFfQm9vbCByOwogICAgICAgICAgICAgKnN0YXJ0
ID0gMDsKICAgICAgICAgICAgIHIgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19jb2xz
X2VuZF9hZGQKLSAgICAgICAgICAgICAgICAocHJpdiwgc3RhcnQsIDAsIGNvbHMpOworICAgICAg
ICAgICAgICAgICAgICAocHJpdiwgc3RhcnQsIDAsIGNvbHMpOwogICAgICAgICAgICAgaWYgKCFy
KSB7CiAgICAgICAgICAgICAgICAgQ1JJVElDQUwoImZhaWxlZCB0byBhbGxvY2F0ZSAlbGQgY29s
dW1ucyIsIGNvbHMpOwogICAgICAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92
aWV3X3Jvd3NfcmFuZ2VfZGVsCkBAIC04NTgsNyArODU4LDcgQEAgc3RhdGljIHZvaWQgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX3JlY2FsY19yZW5kZXJlcnMoRXdrX1RpbGVkX0JhY2tpbmdfU3Rv
cmVfRGEKICAgICB9CiAKICAgICBpZiAoY29scyAhPSBvbGRfY29scykgewotICAgICAgICBFaW5h
X0lubGlzdCAqKnN0YXJ0LCAqKmVuZDsKKyAgICAgICAgRWluYV9Jbmxpc3QqKiBzdGFydCwgKipl
bmQ7CiAgICAgICAgIGludCB0b2RvID0gY29scyAtIG9sZF9jb2xzOwogICAgICAgICBzdGFydCA9
IHByaXYtPnZpZXcuaXRlbXM7CiAgICAgICAgIGVuZCA9IHN0YXJ0ICsgc3RkOjptaW4ob2xkX3Jv
d3MsIHJvd3MpOwpAQCAtODY2LDcgKzg2Niw3IEBAIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9yZWNhbGNfcmVuZGVyZXJzKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhCiAg
ICAgICAgICAgICBmb3IgKDsgc3RhcnQgPCBlbmQ7IHN0YXJ0KyspIHsKICAgICAgICAgICAgICAg
ICBFaW5hX0Jvb2wgcjsKICAgICAgICAgICAgICAgICByID0gX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX3ZpZXdfY29sc19lbmRfYWRkCi0gICAgICAgICAgICAgICAgICAgIChwcml2LCBzdGFydCwg
b2xkX2NvbHMsIHRvZG8pOworICAgICAgICAgICAgICAgICAgICAgICAgKHByaXYsIHN0YXJ0LCBv
bGRfY29scywgdG9kbyk7CiAgICAgICAgICAgICAgICAgaWYgKCFyKSB7CiAgICAgICAgICAgICAg
ICAgICAgIENSSVRJQ0FMKCJmYWlsZWQgdG8gYWxsb2NhdGUgJWQgY29sdW1ucyEiLCB0b2RvKTsK
IApAQCAtODkxLDIxICs4OTEsMjEgQEAgc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX3JlY2FsY19yZW5kZXJlcnMoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGEKICAgICBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfZmlsbF9yZW5kZXJlcnMocHJpdik7CiB9CiAKLXN0YXRpYyB2
b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9jYWxjdWxhdGVfc2l6ZShFd2tfVGls
ZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFdmFzX0Nvb3JkIHcsIEV2YXNfQ29vcmQgaCkK
K3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9jYWxjdWxhdGVfc2l6
ZShFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2LCBFdmFzX0Nvb3JkIHdpZHRoLCBF
dmFzX0Nvb3JkIGhlaWdodCkKIHsKLSAgICBldmFzX29iamVjdF9yZXNpemUocHJpdi0+YmFzZS5j
bGlwcGVyLCB3LCBoKTsKKyAgICBldmFzX29iamVjdF9yZXNpemUocHJpdi0+YmFzZS5jbGlwcGVy
LCB3aWR0aCwgaGVpZ2h0KTsKIAotICAgIHByaXYtPnZpZXcudyA9IHc7Ci0gICAgcHJpdi0+dmll
dy5oID0gaDsKKyAgICBwcml2LT52aWV3LndpZHRoID0gd2lkdGg7CisgICAgcHJpdi0+dmlldy5o
ZWlnaHQgPSBoZWlnaHQ7CiAKICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcmVjYWxjX3Jl
bmRlcmVycygKLSAgICAgICAgcHJpdiwgdywgaCwgcHJpdi0+dmlldy50aWxlLncsIHByaXYtPnZp
ZXcudGlsZS5oKTsKKyAgICAgICAgcHJpdiwgd2lkdGgsIGhlaWdodCwgcHJpdi0+dmlldy50aWxl
LndpZHRoLCBwcml2LT52aWV3LnRpbGUuaGVpZ2h0KTsKIH0KIAogLy8gVE9ETzogcmVtb3ZlIG1l
IGxhdGVyLgotc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3
X2RiZyhjb25zdCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2KQorc3RhdGljIGlu
bGluZSB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X2RiZyhjb25zdCBFd2tfVGls
ZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2KQogewotICAgIEVpbmFfSW5saXN0ICoqc3RhcnQs
ICoqZW5kOworICAgIEVpbmFfSW5saXN0Kiogc3RhcnQsICoqZW5kOwogICAgIHByaW50ZigidGls
ZXM9JTJsZCwlMmxkICBtb2RlbD0lMmxkLCUybGQgWyVkeCVkXSBiYXNlPSUrM2xkLCUrNGxkIG9m
ZnNldD0lKzRkLCUrNGQgb2xkPSUrNGQsJSs0ZCBiYXNlPSUrM2QsJSszZFxuIiwKICAgICAgICAg
ICAgcHJpdi0+dmlldy5jb2xzLCBwcml2LT52aWV3LnJvd3MsCiAgICAgICAgICAgIHByaXYtPm1v
ZGVsLmN1ci5jb2xzLCBwcml2LT5tb2RlbC5jdXIucm93cywKQEAgLTkxOCw3ICs5MTgsNyBAQCBz
dGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfZGJnKGNvbnN0
IEV3a19UaWxlZF9CYWNraW5nX1N0bwogICAgIHN0YXJ0ID0gcHJpdi0+dmlldy5pdGVtczsKICAg
ICBlbmQgPSBwcml2LT52aWV3Lml0ZW1zICsgcHJpdi0+dmlldy5yb3dzOwogICAgIGZvciAoOyBz
dGFydCA8IGVuZDsgc3RhcnQrKykgewotICAgICAgICBjb25zdCBFd2tfVGlsZWRfQmFja2luZ19T
dG9yZV9JdGVtICppdDsKKyAgICAgICAgY29uc3QgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRl
bSogaXQ7CiAKICAgICAgICAgRUlOQV9JTkxJU1RfRk9SRUFDSCgqc3RhcnQsIGl0KSB7CiAgICAg
ICAgICAgICBwcmludGYoIiAlKzRkLCUrNGQgIiwgaXQtPmdlb21ldHJ5LngsIGl0LT5nZW9tZXRy
eS55KTsKQEAgLTk0NiwyMiArOTQ2LDIyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfdmlld19kYmcoY29uc3QgRXdrX1RpbGVkX0JhY2tpbmdfU3RvCiAgKgog
ICogQHBhcmFtIGNvdW50IHRoZSBudW1iZXIgb2YgdGltZXMgdG8gcmVwZWF0IHRoZSBwcm9jZXNz
LgogICovCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld193cmFwX3Vw
KEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIEV2YXNfQ29vcmQgeCwgRXZhc19D
b29yZCB5LCB1bnNpZ25lZCBpbnQgY291bnQpCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfdmlld193cmFwX3VwKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYs
IEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5LCB1bnNpZ25lZCBpbnQgY291bnQpCiB7CiAgICAg
dW5zaWduZWQgaW50IGxhc3Rfcm93ID0gcHJpdi0+dmlldy5yb3dzIC0gMTsKLSAgICBFdmFzX0Nv
b3JkIHR3ID0gcHJpdi0+dmlldy50aWxlLnc7Ci0gICAgRXZhc19Db29yZCB0aCA9IHByaXYtPnZp
ZXcudGlsZS5oOworICAgIEV2YXNfQ29vcmQgdHcgPSBwcml2LT52aWV3LnRpbGUud2lkdGg7Cisg
ICAgRXZhc19Db29yZCB0aCA9IHByaXYtPnZpZXcudGlsZS5oZWlnaHQ7CiAgICAgRXZhc19Db29y
ZCBvZmZfeSA9IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSArIGNvdW50ICogdGg7CiAgICAgRXZh
c19Db29yZCBveSA9IHkgKyAobGFzdF9yb3cgLSBjb3VudCArIDEpICogdGggKyBvZmZfeTsKLSAg
ICBFaW5hX0lubGlzdCAqKml0cl9zdGFydCwgKippdHJfZW5kOworICAgIEVpbmFfSW5saXN0Kiog
aXRyX3N0YXJ0LCAqKml0cl9lbmQ7CiAKICAgICBpdHJfc3RhcnQgPSBwcml2LT52aWV3Lml0ZW1z
OwogICAgIGl0cl9lbmQgPSBpdHJfc3RhcnQgKyBsYXN0X3JvdzsKIAogICAgIGZvciAoOyBjb3Vu
dCA+IDA7IGNvdW50LS0pIHsKLSAgICAgICAgRWluYV9Jbmxpc3QgKippdHI7Ci0gICAgICAgIEVp
bmFfSW5saXN0ICp0bXAgPSAqaXRyX3N0YXJ0OwotICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19T
dG9yZV9JdGVtICppdDsKKyAgICAgICAgRWluYV9Jbmxpc3QqKiBpdHI7CisgICAgICAgIEVpbmFf
SW5saXN0KiB0bXAgPSAqaXRyX3N0YXJ0OworICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9y
ZV9JdGVtKiBpdDsKICAgICAgICAgRXZhc19Db29yZCBveCA9IHggKyBwcml2LT52aWV3Lm9mZnNl
dC5iYXNlLng7CiAgICAgICAgIGludCBjID0gMDsKIApAQCAtOTk0LDIxICs5OTQsMjEgQEAgc3Rh
dGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfd3JhcF91cChFd2tfVGlsZWRf
QmFja2luZ19TdG9yZV9EYXRhICoKICAqCiAgKiBAcGFyYW0gY291bnQgdGhlIG51bWJlciBvZiB0
aW1lcyB0byByZXBlYXQgdGhlIHByb2Nlc3MuCiAgKi8KLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV92aWV3X3dyYXBfZG93bihFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRh
ICpwcml2LCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwgdW5zaWduZWQgaW50IGNvdW50KQor
c3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfd3JhcF9kb3duKEV3a19U
aWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5
LCB1bnNpZ25lZCBpbnQgY291bnQpCiB7Ci0gICAgRXZhc19Db29yZCB0dyA9IHByaXYtPnZpZXcu
dGlsZS53OwotICAgIEV2YXNfQ29vcmQgdGggPSBwcml2LT52aWV3LnRpbGUuaDsKKyAgICBFdmFz
X0Nvb3JkIHR3ID0gcHJpdi0+dmlldy50aWxlLndpZHRoOworICAgIEV2YXNfQ29vcmQgdGggPSBw
cml2LT52aWV3LnRpbGUuaGVpZ2h0OwogICAgIEV2YXNfQ29vcmQgb2ZmX3kgPSBwcml2LT52aWV3
Lm9mZnNldC5iYXNlLnkgLSBjb3VudCAqIHRoOwogICAgIEV2YXNfQ29vcmQgb3kgPSB5ICsgb2Zm
X3kgKyAoY291bnQgLSAxKSAqIHRoOwotICAgIEVpbmFfSW5saXN0ICoqaXRyX3N0YXJ0LCAqKml0
cl9lbmQ7CisgICAgRWluYV9Jbmxpc3QqKiBpdHJfc3RhcnQsICoqaXRyX2VuZDsKIAogICAgIGl0
cl9zdGFydCA9IHByaXYtPnZpZXcuaXRlbXMgKyBwcml2LT52aWV3LnJvd3MgLSAxOwogICAgIGl0
cl9lbmQgPSBwcml2LT52aWV3Lml0ZW1zOwogCiAgICAgZm9yICg7IGNvdW50ID4gMDsgY291bnQt
LSkgewotICAgICAgICBFaW5hX0lubGlzdCAqKml0cjsKLSAgICAgICAgRWluYV9Jbmxpc3QgKnRt
cCA9ICppdHJfc3RhcnQ7Ci0gICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0
OworICAgICAgICBFaW5hX0lubGlzdCoqIGl0cjsKKyAgICAgICAgRWluYV9Jbmxpc3QqIHRtcCA9
ICppdHJfc3RhcnQ7CisgICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0qIGl0Owog
ICAgICAgICBFdmFzX0Nvb3JkIG94ID0geCArIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueDsKICAg
ICAgICAgaW50IGMgPSAwOwogCkBAIC0xMDQxLDE1ICsxMDQxLDE1IEBAIHN0YXRpYyB2b2lkIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3dyYXBfZG93bihFd2tfVGlsZWRfQmFja2luZ19T
dG9yZV9EYXRhCiAgKgogICogQHBhcmFtIGNvdW50IHRoZSBudW1iZXIgb2YgdGltZXMgdG8gcmVw
ZWF0IHRoZSBwcm9jZXNzLgogICovCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfdmlld193cmFwX2xlZnQoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgRXZh
c19Db29yZCB4LCBFdmFzX0Nvb3JkIHksIHVuc2lnbmVkIGludCBjb3VudCkKK3N0YXRpYyB2b2lk
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3dyYXBfbGVmdChFd2tfVGlsZWRfQmFja2lu
Z19TdG9yZV9EYXRhKiBwcml2LCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwgdW5zaWduZWQg
aW50IGNvdW50KQogewogICAgIHVuc2lnbmVkIGludCByLCBsYXN0X2NvbCA9IHByaXYtPnZpZXcu
Y29scyAtIDE7Ci0gICAgRXZhc19Db29yZCB0dyA9IHByaXYtPnZpZXcudGlsZS53OwotICAgIEV2
YXNfQ29vcmQgdGggPSBwcml2LT52aWV3LnRpbGUuaDsKKyAgICBFdmFzX0Nvb3JkIHR3ID0gcHJp
di0+dmlldy50aWxlLndpZHRoOworICAgIEV2YXNfQ29vcmQgdGggPSBwcml2LT52aWV3LnRpbGUu
aGVpZ2h0OwogICAgIEV2YXNfQ29vcmQgb2ZmX3ggPSBwcml2LT52aWV3Lm9mZnNldC5iYXNlLngg
KyBjb3VudCAqIHR3OwogICAgIEV2YXNfQ29vcmQgb3kgPSB5ICsgcHJpdi0+dmlldy5vZmZzZXQu
YmFzZS55OwotICAgIEVpbmFfSW5saXN0ICoqaXRyOwotICAgIEVpbmFfSW5saXN0ICoqaXRyX2Vu
ZDsKKyAgICBFaW5hX0lubGlzdCoqIGl0cjsKKyAgICBFaW5hX0lubGlzdCoqIGl0cl9lbmQ7CiAK
ICAgICBpdHIgPSBwcml2LT52aWV3Lml0ZW1zOwogICAgIGl0cl9lbmQgPSBpdHIgKyBwcml2LT52
aWV3LnJvd3M7CkBAIC0xMDYyLDcgKzEwNjIsNyBAQCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfdmlld193cmFwX2xlZnQoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YQog
ICAgICAgICB1bnNpZ25lZCBpbnQgaSwgYyA9IGxhc3RfY29sIC0gY291bnQgKyAxOwogCiAgICAg
ICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrLCBjKyssIG94ICs9IHR3KSB7Ci0gICAgICAg
ICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdDsKKyAgICAgICAgICAgIEV3a19U
aWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0qIGl0OwogICAgICAgICAgICAgaXQgPSBFSU5BX0lOTElT
VF9DT05UQUlORVJfR0VUKCppdHIsIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0pOwogICAg
ICAgICAgICAgKml0ciA9IGVpbmFfaW5saXN0X2RlbW90ZSgqaXRyLCAqaXRyKTsKIApAQCAtMTA4
OCwxNCArMTA4OCwxNCBAQCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmll
d193cmFwX2xlZnQoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YQogICoKICAqIEBwYXJhbSBj
b3VudCB0aGUgbnVtYmVyIG9mIHRpbWVzIHRvIHJlcGVhdCB0aGUgcHJvY2Vzcy4KICAqLwotc3Rh
dGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfd3JhcF9yaWdodChFd2tfVGls
ZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwg
dW5zaWduZWQgaW50IGNvdW50KQorc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3ZpZXdfd3JhcF9yaWdodChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2LCBFdmFz
X0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwgdW5zaWduZWQgaW50IGNvdW50KQogewogICAgIHVuc2ln
bmVkIGludCByOwotICAgIEV2YXNfQ29vcmQgdHcgPSBwcml2LT52aWV3LnRpbGUudzsKLSAgICBF
dmFzX0Nvb3JkIHRoID0gcHJpdi0+dmlldy50aWxlLmg7CisgICAgRXZhc19Db29yZCB0dyA9IHBy
aXYtPnZpZXcudGlsZS53aWR0aDsKKyAgICBFdmFzX0Nvb3JkIHRoID0gcHJpdi0+dmlldy50aWxl
LmhlaWdodDsKICAgICBFdmFzX0Nvb3JkIG9mZl94ID0gcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54
IC0gY291bnQgKiB0dzsKICAgICBFdmFzX0Nvb3JkIG95ID0geSArIHByaXYtPnZpZXcub2Zmc2V0
LmJhc2UueTsKLSAgICBFaW5hX0lubGlzdCAqKml0ciwgKippdHJfZW5kOworICAgIEVpbmFfSW5s
aXN0KiogaXRyLCAqKiBpdHJfZW5kOwogCiAgICAgaXRyID0gcHJpdi0+dmlldy5pdGVtczsKICAg
ICBpdHJfZW5kID0gaXRyICsgcHJpdi0+dmlldy5yb3dzOwpAQCAtMTEwOCw3ICsxMTA4LDcgQEAg
c3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfd3JhcF9yaWdodChFd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9EYXQKICAgICAgICAgdW5zaWduZWQgaW50IGksIGMgPSBjb3Vu
dCAtIDE7CiAKICAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyssIGMtLSwgb3ggLT0g
dHcpIHsKLSAgICAgICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0OworICAg
ICAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSogaXQ7CiAgICAgICAgICAgICBp
dCA9IEVJTkFfSU5MSVNUX0NPTlRBSU5FUl9HRVQoKCppdHIpLT5sYXN0LCBFd2tfVGlsZWRfQmFj
a2luZ19TdG9yZV9JdGVtKTsKICAgICAgICAgICAgICppdHIgPSBlaW5hX2lubGlzdF9wcm9tb3Rl
KCppdHIsICgqaXRyKS0+bGFzdCk7CiAKQEAgLTExMjEsMTYgKzExMjEsMTYgQEAgc3RhdGljIHZv
aWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfd3JhcF9yaWdodChFd2tfVGlsZWRfQmFj
a2luZ19TdG9yZV9EYXQKICAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggPSBvZmZfeDsKIH0K
IAotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcmVmaWxsKEV3a19U
aWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5
LCBpbnQgc3RlcF94LCBpbnQgc3RlcF95KQorc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5n
X3N0b3JlX3ZpZXdfcmVmaWxsKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYsIEV2
YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5LCBpbnQgc3RlcF94LCBpbnQgc3RlcF95KQogewotICAg
IEVpbmFfSW5saXN0ICoqaXRyLCAqKml0cl9lbmQ7CisgICAgRWluYV9Jbmxpc3QqKiBpdHIsICoq
aXRyX2VuZDsKICAgICBFdmFzX0Nvb3JkIGJhc2Vfb3gsIG95LCB0dywgdGg7CiAgICAgdW5zaWdu
ZWQgaW50IHI7CiAKICAgICBldmFzX29iamVjdF9tb3ZlKHByaXYtPmJhc2UuY2xpcHBlciwgeCwg
eSk7CiAKLSAgICB0dyA9IHByaXYtPnZpZXcudGlsZS53OwotICAgIHRoID0gcHJpdi0+dmlldy50
aWxlLmg7CisgICAgdHcgPSBwcml2LT52aWV3LnRpbGUud2lkdGg7CisgICAgdGggPSBwcml2LT52
aWV3LnRpbGUuaGVpZ2h0OwogCiAgICAgYmFzZV9veCA9IHggKyBwcml2LT52aWV3Lm9mZnNldC5i
YXNlLng7CiAgICAgb3kgPSB5ICsgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55OwpAQCAtMTE0Myw3
ICsxMTQzLDcgQEAgc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcmVm
aWxsKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnAKICAgICBwcml2LT5tb2RlbC5iYXNl
LnJvdyAtPSBzdGVwX3k7CiAKICAgICBmb3IgKDsgaXRyIDwgaXRyX2VuZDsgaXRyKyssIHIrKykg
ewotICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdDsKKyAgICAgICAgRXdr
X1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSogaXQ7CiAgICAgICAgIEV2YXNfQ29vcmQgb3ggPSBi
YXNlX294OwogICAgICAgICB1bnNpZ25lZCBpbnQgYyA9IDA7CiAgICAgICAgIEVJTkFfSU5MSVNU
X0ZPUkVBQ0goKml0ciwgaXQpIHsKQEAgLTExNTYsMTUgKzExNTYsMTUgQEAgc3RhdGljIHZvaWQg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcmVmaWxsKEV3a19UaWxlZF9CYWNraW5nX1N0
b3JlX0RhdGEgKnAKICAgICB9CiB9CiAKLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV92aWV3X3Bvc19hcHBseShFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBF
dmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSkKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV92aWV3X3Bvc19hcHBseShFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2
LCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSkKIHsKLSAgICBFaW5hX0lubGlzdCAqKml0ciwg
KippdHJfZW5kOworICAgIEVpbmFfSW5saXN0KiogaXRyLCAqKml0cl9lbmQ7CiAgICAgRXZhc19D
b29yZCBiYXNlX294LCBveSwgdHcsIHRoOwogCiAgICAgZXZhc19vYmplY3RfbW92ZShwcml2LT5i
YXNlLmNsaXBwZXIsIHgsIHkpOwogCi0gICAgdHcgPSBwcml2LT52aWV3LnRpbGUudzsKLSAgICB0
aCA9IHByaXYtPnZpZXcudGlsZS5oOworICAgIHR3ID0gcHJpdi0+dmlldy50aWxlLndpZHRoOwor
ICAgIHRoID0gcHJpdi0+dmlldy50aWxlLmhlaWdodDsKIAogICAgIGJhc2Vfb3ggPSB4ICsgcHJp
di0+dmlldy5vZmZzZXQuYmFzZS54OwogICAgIG95ID0geSArIHByaXYtPnZpZXcub2Zmc2V0LmJh
c2UueTsKQEAgLTExNzIsNyArMTE3Miw3IEBAIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV92aWV3X3Bvc19hcHBseShFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhCiAgICAg
aXRyID0gcHJpdi0+dmlldy5pdGVtczsKICAgICBpdHJfZW5kID0gaXRyICsgcHJpdi0+dmlldy5y
b3dzOwogICAgIGZvciAoOyBpdHIgPCBpdHJfZW5kOyBpdHIrKykgewotICAgICAgICBFd2tfVGls
ZWRfQmFja2luZ19TdG9yZV9JdGVtICppdDsKKyAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3Rv
cmVfSXRlbSogaXQ7CiAgICAgICAgIEV2YXNfQ29vcmQgb3ggPSBiYXNlX294OwogICAgICAgICBF
SU5BX0lOTElTVF9GT1JFQUNIKCppdHIsIGl0KSB7CiAgICAgICAgICAgICBfZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfaXRlbV9tb3ZlKGl0LCBveCwgb3kpOwpAQCAtMTE4Miw3ICsxMTgyLDcgQEAg
c3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcG9zX2FwcGx5KEV3a19U
aWxlZF9CYWNraW5nX1N0b3JlX0RhdGEKICAgICB9CiB9CiAKLXN0YXRpYyB2b2lkIF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9zbWFydF9jYWxjdWxhdGVfb2Zmc2V0X2ZvcmNlKEV3a19UaWxlZF9C
YWNraW5nX1N0b3JlX0RhdGEgKnByaXYpCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfc21hcnRfY2FsY3VsYXRlX29mZnNldF9mb3JjZShFd2tfVGlsZWRfQmFja2luZ19TdG9y
ZV9EYXRhKiBwcml2KQogewogICAgIEV2YXNfQ29vcmQgZHggPSBwcml2LT52aWV3Lm9mZnNldC5j
dXIueCAtIHByaXYtPnZpZXcub2Zmc2V0Lm9sZC54OwogICAgIEV2YXNfQ29vcmQgZHkgPSBwcml2
LT52aWV3Lm9mZnNldC5jdXIueSAtIHByaXYtPnZpZXcub2Zmc2V0Lm9sZC55OwpAQCAtMTE5Miw4
ICsxMTkyLDggQEAgc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2Nh
bGN1bGF0ZV9vZmZzZXRfZm9yY2UoRXdrX1RpbGVkX0JhY2sKICAgICBJTkYoIm89JXAsIG9mZnNl
dDogJSs0ZCwgJSs0ZCAoJSs0ZCwgJSs0ZCkiLAogICAgICAgICBwcml2LT5zZWxmLCBkeCwgZHks
IHByaXYtPnZpZXcub2Zmc2V0LmN1ci54LCBwcml2LT52aWV3Lm9mZnNldC5jdXIueSk7CiAKLSAg
ICB0dyA9IHByaXYtPnZpZXcudGlsZS53OwotICAgIHRoID0gcHJpdi0+dmlldy50aWxlLmg7Cisg
ICAgdHcgPSBwcml2LT52aWV3LnRpbGUud2lkdGg7CisgICAgdGggPSBwcml2LT52aWV3LnRpbGUu
aGVpZ2h0OwogCiAgICAgbG9uZyBuZXdfY29sID0gLXByaXYtPnZpZXcub2Zmc2V0LmN1ci54IC8g
dHc7CiAgICAgc3RlcF94ID0gcHJpdi0+bW9kZWwuYmFzZS5jb2wgLSBuZXdfY29sOwpAQCAtMTIx
NCw3ICsxMjE0LDcgQEAgc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0
X2NhbGN1bGF0ZV9vZmZzZXRfZm9yY2UoRXdrX1RpbGVkX0JhY2sKICAgICAgICAgKHByaXYsIHBy
aXYtPnZpZXcueCwgcHJpdi0+dmlldy55LCBzdGVwX3gsIHN0ZXBfeSk7CiB9CiAKLXN0YXRpYyB2
b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9jYWxjdWxhdGVfb2Zmc2V0KEV3a19U
aWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5
KQorc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZV9v
ZmZzZXQoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdiwgRXZhc19Db29yZCB4LCBF
dmFzX0Nvb3JkIHkpCiB7CiAgICAgRXZhc19Db29yZCBkeCA9IHByaXYtPnZpZXcub2Zmc2V0LmN1
ci54IC0gcHJpdi0+dmlldy5vZmZzZXQub2xkLng7CiAgICAgRXZhc19Db29yZCBkeSA9IHByaXYt
PnZpZXcub2Zmc2V0LmN1ci55IC0gcHJpdi0+dmlldy5vZmZzZXQub2xkLnk7CkBAIC0xMjI3LDgg
KzEyMjcsOCBAQCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfY2Fs
Y3VsYXRlX29mZnNldChFd2tfVGlsZWRfQmFja2luZ19TdAogICAgIGlmICghZHggJiYgIWR5KQog
ICAgICAgICByZXR1cm47CiAKLSAgICB0dyA9IHByaXYtPnZpZXcudGlsZS53OwotICAgIHRoID0g
cHJpdi0+dmlldy50aWxlLmg7CisgICAgdHcgPSBwcml2LT52aWV3LnRpbGUud2lkdGg7CisgICAg
dGggPSBwcml2LT52aWV3LnRpbGUuaGVpZ2h0OwogCiAgICAgbG9uZyBuZXdfY29sID0gLXByaXYt
PnZpZXcub2Zmc2V0LmN1ci54IC8gdHc7CiAgICAgc3RlcF94ID0gcHJpdi0+bW9kZWwuYmFzZS5j
b2wgLSBuZXdfY29sOwpAQCAtMTI3MSw3ICsxMjcxLDcgQEAgc3RhdGljIHZvaWQgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZV9vZmZzZXQoRXdrX1RpbGVkX0JhY2tpbmdf
U3QKICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19wb3NfYXBwbHkocHJpdiwgeCwg
eSk7CiB9CiAKLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9jYWxj
dWxhdGVfcG9zKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIEV2YXNfQ29vcmQg
eCwgRXZhc19Db29yZCB5KQorc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3Nt
YXJ0X2NhbGN1bGF0ZV9wb3MoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdiwgRXZh
c19Db29yZCB4LCBFdmFzX0Nvb3JkIHkpCiB7CiAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3ZpZXdfcG9zX2FwcGx5KHByaXYsIHgsIHkpOwogICAgIHByaXYtPnZpZXcueCA9IHg7CkBAIC0x
MjgyLDEwICsxMjgyLDEwIEBAIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9z
bWFydF9jYWxjdWxhdGVfcG9zKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlCiAgICAgICAgIHByaXYt
PnZpZXcub2Zmc2V0LmN1ci55ICsgcHJpdi0+dmlldy55KTsKIH0KIAotc3RhdGljIHZvaWQgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX2ZpbGxfcmVuZGVyZXJzKEV3a19UaWxlZF9CYWNraW5nX1N0
b3JlX0RhdGEgKnByaXYpCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZmls
bF9yZW5kZXJlcnMoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdikKIHsKLSAgICBF
aW5hX0lubGlzdCAqaXQ7Ci0gICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXRlbTsK
KyAgICBFaW5hX0lubGlzdCogaXQ7CisgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSog
aXRlbTsKICAgICBpbnQgaSwgajsKIAogICAgIGZvciAoaSA9IDA7IGkgPCBwcml2LT52aWV3LnJv
d3M7IGkrKykgewpAQCAtMTI5NiwxNCArMTI5NiwxNCBAQCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfZmlsbF9yZW5kZXJlcnMoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0
YQogICAgIH0KIH0KIAotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0
X2NhbGN1bGF0ZShFdmFzX09iamVjdCAqbykKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9zbWFydF9jYWxjdWxhdGUoRXZhc19PYmplY3QqIGV3a1RpbGUpCiB7CiAgICAgRXZh
c19Db29yZCB4LCB5LCB3LCBoOwogCi0gICAgZXZhc19vYmplY3RfZ2VvbWV0cnlfZ2V0KG8sICZ4
LCAmeSwgJncsICZoKTsKLSAgICBEQkcoIm89JXAgYXQgJWQsJWQgKyAlZHglZCIsIG8sIHgsIHks
IHcsIGgpOworICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldChld2tUaWxlLCAmeCwgJnksICZ3
LCAmaCk7CisgICAgREJHKCJvPSVwIGF0ICVkLCVkICsgJWR4JWQiLCBld2tUaWxlLCB4LCB5LCB3
LCBoKTsKIAotICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYpOworICAgIFBSSVZf
REFUQV9HRVRfT1JfUkVUVVJOKGV3a1RpbGUsIHByaXYpOwogCiAgICAgcHJpdi0+Y2hhbmdlZC5h
bnkgPSBFSU5BX0ZBTFNFOwogCkBAIC0xMzEyLDggKzEzMTIsOCBAQCBzdGF0aWMgdm9pZCBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfY2FsY3VsYXRlKEV2YXNfT2JqZWN0ICpvKQogICAg
IGlmICghcHJpdi0+cmVuZGVyLnN1c3BlbmQgJiYgcHJpdi0+Y2hhbmdlZC5tb2RlbCkgewogICAg
ICAgICB1bnNpZ25lZCBsb25nIGNvbHMsIHJvd3M7CiAKLSAgICAgICAgY29scyA9IHByaXYtPm1v
ZGVsLndpZHRoIC8gcHJpdi0+dmlldy50aWxlLncgKyAxOwotICAgICAgICByb3dzID0gcHJpdi0+
bW9kZWwuaGVpZ2h0IC8gcHJpdi0+dmlldy50aWxlLmggKyAxOworICAgICAgICBjb2xzID0gcHJp
di0+bW9kZWwud2lkdGggLyBwcml2LT52aWV3LnRpbGUud2lkdGggKyAxOworICAgICAgICByb3dz
ID0gcHJpdi0+bW9kZWwuaGVpZ2h0IC8gcHJpdi0+dmlldy50aWxlLmhlaWdodCArIDE7CiAKICAg
ICAgICAgcHJpdi0+bW9kZWwub2xkLmNvbHMgPSBwcml2LT5tb2RlbC5jdXIuY29sczsKICAgICAg
ICAgcHJpdi0+bW9kZWwub2xkLnJvd3MgPSBwcml2LT5tb2RlbC5jdXIucm93czsKQEAgLTEzNDgs
OCArMTM0OCw4IEBAIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9j
YWxjdWxhdGUoRXZhc19PYmplY3QgKm8pCiAgICAgICAgIHJlY3QuaCA9IHByaXYtPm1vZGVsLmhl
aWdodDsKICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2ZpbGxfcmVuZGVyZXJzKHBy
aXYpOwogICAgICAgICBld2tfdGlsZV9tYXRyaXhfcmVzaXplKHByaXYtPm1vZGVsLm1hdHJpeCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaXYtPm1vZGVsLmN1ci5jb2xzLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcHJpdi0+bW9kZWwuY3VyLnJvd3MpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHByaXYtPm1vZGVsLmN1ci5jb2xzLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHByaXYtPm1vZGVsLmN1ci5yb3dzKTsKICAgICAgICAgcHJpdi0+Y2hh
bmdlZC5tb2RlbCA9IEVJTkFfRkFMU0U7CiAgICAgICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShwcml2
LT5jb250ZW50c19jbGlwcGVyLCBwcml2LT5tb2RlbC53aWR0aCwgcHJpdi0+bW9kZWwuaGVpZ2h0
KTsKICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZV9vZmZz
ZXRfZm9yY2UocHJpdik7CkBAIC0xMzU3LDcgKzEzNTcsNyBAQCBzdGF0aWMgdm9pZCBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfY2FsY3VsYXRlKEV2YXNfT2JqZWN0ICpvKQogICAgICAg
ICAvKiBNYWtlIHN1cmUgd2UgZG8gbm90IG1pc3MgYW55IGltcG9ydGFudCByZXBhaW50IGJ5CiAg
ICAgICAgICAqIHJlcGFpbnRpbmcgdGhlIHdob2xlIHZpZXdwb3J0ICovCiAgICAgICAgIGNvbnN0
IEVpbmFfUmVjdGFuZ2xlIHIgPQotICAgICAgICAgICAgeyAwLCAwLCBwcml2LT5tb2RlbC53aWR0
aCwgcHJpdi0+bW9kZWwuaGVpZ2h0IH07CisgICAgICAgIHsgMCwgMCwgcHJpdi0+bW9kZWwud2lk
dGgsIHByaXYtPm1vZGVsLmhlaWdodCB9OwogICAgICAgICBld2tfdGlsZV9tYXRyaXhfdXBkYXRl
KHByaXYtPm1vZGVsLm1hdHJpeCwgJnIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cHJpdi0+dmlldy50aWxlLnpvb20pOwogICAgIH0KQEAgLTEzNjcsMTkgKzEzNjcsMTkgQEAgc3Rh
dGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZShFdmFzX09i
amVjdCAqbykKICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRlc19wcm9jZXNzKHBy
aXYpOwogCiAgICAgaWYgKHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCA+IDAKLSAgICAgICAgfHwg
cHJpdi0+dmlldy5vZmZzZXQuYmFzZS54IDw9IC0gcHJpdi0+dmlldy50aWxlLncKKyAgICAgICAg
fHwgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54IDw9IC0gcHJpdi0+dmlldy50aWxlLndpZHRoCiAg
ICAgICAgIHx8IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSA+IDAKLSAgICAgICAgfHwgcHJpdi0+
dmlldy5vZmZzZXQuYmFzZS55IDw9IC0gcHJpdi0+dmlldy50aWxlLmgpCisgICAgICAgIHx8IHBy
aXYtPnZpZXcub2Zmc2V0LmJhc2UueSA8PSAtIHByaXYtPnZpZXcudGlsZS5oZWlnaHQpCiAgICAg
ICAgIEVSUigiaW5jb3JyZWN0IGJhc2Ugb2Zmc2V0ICUrNGQsJSs0ZCwgdGlsZT0lZHglZCwgY3Vy
PSUrNGQsJSs0ZFxuIiwKICAgICAgICAgICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCwgcHJp
di0+dmlldy5vZmZzZXQuYmFzZS55LAotICAgICAgICAgICAgcHJpdi0+dmlldy50aWxlLncsIHBy
aXYtPnZpZXcudGlsZS5oLAorICAgICAgICAgICAgcHJpdi0+dmlldy50aWxlLndpZHRoLCBwcml2
LT52aWV3LnRpbGUuaGVpZ2h0LAogICAgICAgICAgICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLngs
IHByaXYtPnZpZXcub2Zmc2V0LmN1ci55KTsKIAogfQogCi1FdmFzX09iamVjdCAqZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfYWRkKEV2YXMgKmUpCitFdmFzX09iamVjdCogZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfYWRkKEV2YXMqIGUpCiB7Ci0gICAgc3RhdGljIEV2YXNfU21hcnQgKnNtYXJ0ID0g
MDsKKyAgICBzdGF0aWMgRXZhc19TbWFydCogc21hcnQgPSAwOwogCiAgICAgaWYgKF9ld2tfdGls
ZWRfbG9nX2RvbSA8IDApCiAgICAgICAgIF9ld2tfdGlsZWRfbG9nX2RvbSA9IGVpbmFfbG9nX2Rv
bWFpbl9yZWdpc3RlcigiRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmUiLCAwKTsKQEAgLTE0MDUsMzEg
KzE0MDUsMzEgQEAgRXZhc19PYmplY3QgKmV3a190aWxlZF9iYWNraW5nX3N0b3JlX2FkZChFdmFz
ICplKQogICAgIHJldHVybiBldmFzX29iamVjdF9zbWFydF9hZGQoZSwgc21hcnQpOwogfQogCi12
b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3JlbmRlcl9jYl9zZXQoRXZhc19PYmplY3QgKm8s
IEVpbmFfQm9vbCAoKmNiKSh2b2lkICpkYXRhLCBFd2tfVGlsZSAqdCwgY29uc3QgRWluYV9SZWN0
YW5nbGUgKmFyZWEpLCBjb25zdCB2b2lkICpkYXRhKQordm9pZCBld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9yZW5kZXJfY2Jfc2V0KEV2YXNfT2JqZWN0KiBld2tUaWxlLCBFaW5hX0Jvb2wgKCpjYWxs
YmFjaykodm9pZCogZGF0YSwgRXdrX1RpbGUqIHRpbGUsIGNvbnN0IEVpbmFfUmVjdGFuZ2xlKiBh
cmVhKSwgY29uc3Qgdm9pZCogZGF0YSkKIHsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
TihjYik7Ci0gICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdik7Ci0gICAgcHJpdi0+
cmVuZGVyLmNiID0gY2I7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oY2FsbGJhY2sp
OworICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKGV3a1RpbGUsIHByaXYpOworICAgIHByaXYt
PnJlbmRlci5jYiA9IGNhbGxiYWNrOwogICAgIHByaXYtPnJlbmRlci5kYXRhID0gKHZvaWQqKWRh
dGE7CiB9CiAKLUV3a19UaWxlX1VudXNlZF9DYWNoZSAqZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
dGlsZV91bnVzZWRfY2FjaGVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0ICpvKQorRXdrX1RpbGVfVW51
c2VkX0NhY2hlKiBld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX3VudXNlZF9jYWNoZV9nZXQo
Y29uc3QgRXZhc19PYmplY3QqIGV3a1RpbGUpCiB7Ci0gICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRV
Uk4obywgcHJpdiwgMCk7CisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4oZXdrVGlsZSwgcHJp
diwgMCk7CiAgICAgcmV0dXJuIGV3a190aWxlX21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYt
Pm1vZGVsLm1hdHJpeCk7CiB9CiAKLXZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV91
bnVzZWRfY2FjaGVfc2V0KEV2YXNfT2JqZWN0ICpvLCBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1
YykKK3ZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV91bnVzZWRfY2FjaGVfc2V0KEV2
YXNfT2JqZWN0KiBld2tUaWxlLCBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHRpbGVVbnVzZWRDYWNo
ZSkKIHsKLSAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2KTsKKyAgICBQUklWX0RB
VEFfR0VUX09SX1JFVFVSTihld2tUaWxlLCBwcml2KTsKIAotICAgIGlmIChld2tfdGlsZV9tYXRy
aXhfdW51c2VkX2NhY2hlX2dldChwcml2LT5tb2RlbC5tYXRyaXgpID09IHR1YykKKyAgICBpZiAo
ZXdrX3RpbGVfbWF0cml4X3VudXNlZF9jYWNoZV9nZXQocHJpdi0+bW9kZWwubWF0cml4KSA9PSB0
aWxlVW51c2VkQ2FjaGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9tb2RlbF9tYXRyaXhfY3JlYXRlKHByaXYsIHR1Yyk7CisgICAgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX21vZGVsX21hdHJpeF9jcmVhdGUocHJpdiwgdGlsZVVudXNlZENhY2hlKTsK
IH0KIAotc3RhdGljIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc2Nyb2xsX2Z1
bGxfb2Zmc2V0X3NldF9pbnRlcm5hbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2
LCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSkKK3N0YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX3Njcm9sbF9mdWxsX29mZnNldF9zZXRfaW50ZXJuYWwoRXdrX1RpbGVk
X0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdiwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHkpCiB7
CiAgICAgLyogVE9ETzogY2hlY2sgb2Zmc2V0IGdvIG91dCBvZiBib3VuZHMsIGNsYW1wICovCiAg
ICAgaWYgKHByaXYtPnJlbmRlci5kaXNhYmxlZCkKQEAgLTE0NDQsMzMgKzE0NDQsMzMgQEAgc3Rh
dGljIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc2Nyb2xsX2Z1bGxfb2Zmc2V0
X3NldF9pbnRlcm5hbChFd2tfVGkKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi1FaW5hX0Jv
b2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc2Nyb2xsX2Z1bGxfb2Zmc2V0X3NldChFdmFzX09i
amVjdCAqbywgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHkpCitFaW5hX0Jvb2wgZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfc2Nyb2xsX2Z1bGxfb2Zmc2V0X3NldChFdmFzX09iamVjdCogZXdrVGls
ZSwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHkpCiB7Ci0gICAgREJHKCJvPSVwLCB4PSVkLCB5
PSVkIiwgbywgeCwgeSk7CisgICAgREJHKCJvPSVwLCB4PSVkLCB5PSVkIiwgZXdrVGlsZSwgeCwg
eSk7CiAKLSAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2LCBFSU5BX0ZBTFNFKTsK
KyAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihld2tUaWxlLCBwcml2LCBFSU5BX0ZBTFNFKTsK
ICAgICBpZiAoeCA9PSBwcml2LT52aWV3Lm9mZnNldC5jdXIueCAmJiB5ID09IHByaXYtPnZpZXcu
b2Zmc2V0LmN1ci55KQogICAgICAgICByZXR1cm4gRUlOQV9UUlVFOwogCiAgICAgcmV0dXJuIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9zY3JvbGxfZnVsbF9vZmZzZXRfc2V0X2ludGVybmFsKHBy
aXYsIHgsIHkpOwogfQogCi1FaW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc2Nyb2xs
X2Z1bGxfb2Zmc2V0X2FkZChFdmFzX09iamVjdCAqbywgRXZhc19Db29yZCBkeCwgRXZhc19Db29y
ZCBkeSkKK0VpbmFfQm9vbCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zY3JvbGxfZnVsbF9vZmZz
ZXRfYWRkKEV2YXNfT2JqZWN0KiBld2tUaWxlLCBFdmFzX0Nvb3JkIGR4LCBFdmFzX0Nvb3JkIGR5
KQogewotICAgIERCRygibz0lcCwgZHg9JWQsIGR5PSVkIiwgbywgZHgsIGR5KTsKKyAgICBEQkco
Im89JXAsIGR4PSVkLCBkeT0lZCIsIGV3a1RpbGUsIGR4LCBkeSk7CiAKLSAgICBQUklWX0RBVEFf
R0VUX09SX1JFVFVSTihvLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBQUklWX0RBVEFfR0VUX09S
X1JFVFVSTihld2tUaWxlLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBpZiAoIWR4ICYmICFkeSkK
ICAgICAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIAogICAgIHJldHVybiBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfc2Nyb2xsX2Z1bGxfb2Zmc2V0X3NldF9pbnRlcm5hbAotICAgICAgICAocHJpdiwg
cHJpdi0+dmlldy5vZmZzZXQuY3VyLnggKyBkeCwgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkgKyBk
eSk7CisgICAgICAgICAgICAgICAocHJpdiwgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggKyBkeCwg
cHJpdi0+dmlldy5vZmZzZXQuY3VyLnkgKyBkeSk7CiB9CiAKLXN0YXRpYyBFaW5hX0Jvb2wgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX3pvb21fc2V0X2ludGVybmFsKEV3a19UaWxlZF9CYWNraW5n
X1N0b3JlX0RhdGEgKnByaXYsIGZsb2F0ICp6b29tLCBFdmFzX0Nvb3JkIGN4LCBFdmFzX0Nvb3Jk
IGN5LCBFdmFzX0Nvb3JkICpvZmZ4LCBFdmFzX0Nvb3JkICpvZmZ5KQorc3RhdGljIEVpbmFfQm9v
bCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfem9vbV9zZXRfaW50ZXJuYWwoRXdrX1RpbGVkX0Jh
Y2tpbmdfU3RvcmVfRGF0YSogcHJpdiwgZmxvYXQqIHpvb20sIEV2YXNfQ29vcmQgY3VycmVudFgs
IEV2YXNfQ29vcmQgY3VycmVudFksIEV2YXNfQ29vcmQqIG9mZnNldFgsIEV2YXNfQ29vcmQqIG9m
ZnNldFkpCiB7Ci0gICAgKm9mZnggPSBwcml2LT52aWV3Lm9mZnNldC5jdXIueDsKLSAgICAqb2Zm
eSA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci55OworICAgICpvZmZzZXRYID0gcHJpdi0+dmlldy5v
ZmZzZXQuY3VyLng7CisgICAgKm9mZnNldFkgPSBwcml2LT52aWV3Lm9mZnNldC5jdXIueTsKIAog
ICAgIGlmIChmYWJzZihwcml2LT52aWV3LnRpbGUuem9vbSAtICp6b29tKSA8IFpPT01fU1RFUF9N
SU4pIHsKICAgICAgICAgREJHKCJpZ25vcmVkIGFzIHpvb20gZGlmZmVyZW5jZSBpcyA8ICVmOiAl
ZiIsCkBAIC0xNDgxLDQyICsxNDgxLDQyIEBAIHN0YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX3pvb21fc2V0X2ludGVybmFsKEV3a19UaWxlZF9CYWNraW5nX1N0CiAgICAg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9mbHVzaChwcml2KTsK
ICAgICBFdmFzX0Nvb3JkIHR3LCB0aDsKIAotICAgICp6b29tID0gUk9VTkRFRF9aT09NKHByaXYt
PnZpZXcudGlsZS53LCAqem9vbSk7CisgICAgKnpvb20gPSBST1VOREVEX1pPT00ocHJpdi0+dmll
dy50aWxlLndpZHRoLCAqem9vbSk7CiAKLSAgICB0dyA9IHByaXYtPnZpZXcudGlsZS53OwotICAg
IHRoID0gcHJpdi0+dmlldy50aWxlLmg7CisgICAgdHcgPSBwcml2LT52aWV3LnRpbGUud2lkdGg7
CisgICAgdGggPSBwcml2LT52aWV3LnRpbGUuaGVpZ2h0OwogCiAgICAgZmxvYXQgc2NhbGUgPSAq
em9vbSAvIHByaXYtPnZpZXcudGlsZS56b29tOwogCiAgICAgcHJpdi0+dmlldy50aWxlLnpvb20g
PSAqem9vbTsKLSAgICAvLyB0b2RvOiBjaGVjayBjeCBbMCwgd10uLi4KLSAgICBwcml2LT52aWV3
Lm9mZnNldC56b29tX2NlbnRlci54ID0gY3g7Ci0gICAgcHJpdi0+dmlldy5vZmZzZXQuem9vbV9j
ZW50ZXIueSA9IGN5OworICAgIC8vIHRvZG86IGNoZWNrIGN1cnJlbnRYIFswLCB3XS4uLgorICAg
IHByaXYtPnZpZXcub2Zmc2V0Lnpvb21fY2VudGVyLnggPSBjdXJyZW50WDsKKyAgICBwcml2LT52
aWV3Lm9mZnNldC56b29tX2NlbnRlci55ID0gY3VycmVudFk7CiAKIAotICAgIGlmICghcHJpdi0+
dmlldy53IHx8ICFwcml2LT52aWV3LmgpIHsKKyAgICBpZiAoIXByaXYtPnZpZXcud2lkdGggfHwg
IXByaXYtPnZpZXcuaGVpZ2h0KSB7CiAgICAgICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCA9
IDA7CiAgICAgICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSA9IDA7CiAgICAgICAgIHJldHVy
biBFSU5BX1RSVUU7CiAgICAgfQotICAgIEVpbmFfSW5saXN0ICoqaXRyLCAqKml0cl9lbmQ7Ci0g
ICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQ7CisgICAgRWluYV9Jbmxpc3QqKiBp
dHIsICoqaXRyX2VuZDsKKyAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKiBpdDsKIAot
ICAgIEV2YXNfQ29vcmQgbmV3X3ggPSBjeCArIChwcml2LT52aWV3Lm9mZnNldC5jdXIueCAtIGN4
KSAqIHNjYWxlOwotICAgIEV2YXNfQ29vcmQgbmV3X3kgPSBjeSArIChwcml2LT52aWV3Lm9mZnNl
dC5jdXIueSAtIGN5KSAqIHNjYWxlOworICAgIEV2YXNfQ29vcmQgbmV3X3ggPSBjdXJyZW50WCAr
IChwcml2LT52aWV3Lm9mZnNldC5jdXIueCAtIGN1cnJlbnRYKSAqIHNjYWxlOworICAgIEV2YXNf
Q29vcmQgbmV3X3kgPSBjdXJyZW50WSArIChwcml2LT52aWV3Lm9mZnNldC5jdXIueSAtIGN1cnJl
bnRZKSAqIHNjYWxlOwogCi0gICAgRXZhc19Db29yZCBtb2RlbF93aWR0aCA9IHByaXYtPm1vZGVs
LndpZHRoICogc2NhbGU7Ci0gICAgRXZhc19Db29yZCBtb2RlbF9oZWlnaHQgPSBwcml2LT5tb2Rl
bC5oZWlnaHQgKiBzY2FsZTsKKyAgICBFdmFzX0Nvb3JkIG1vZGVsX3cgPSBwcml2LT5tb2RlbC53
aWR0aCAqIHNjYWxlOworICAgIEV2YXNfQ29vcmQgbW9kZWxfaCA9IHByaXYtPm1vZGVsLmhlaWdo
dCAqIHNjYWxlOwogCi0gICAgaWYgKG1vZGVsX3dpZHRoIDwgcHJpdi0+dmlldy53IHx8IG5ld194
ID49IDApCisgICAgaWYgKG1vZGVsX3cgPCBwcml2LT52aWV3LndpZHRoIHx8IG5ld194ID49IDAp
CiAgICAgICAgIG5ld194ID0gMDsKLSAgICBlbHNlIGlmICgtbmV3X3ggKyBwcml2LT52aWV3Lncg
Pj0gbW9kZWxfd2lkdGgpCi0gICAgICAgIG5ld194ID0gLW1vZGVsX3dpZHRoICsgcHJpdi0+dmll
dy53OworICAgIGVsc2UgaWYgKC1uZXdfeCArIHByaXYtPnZpZXcud2lkdGggPj0gbW9kZWxfdykK
KyAgICAgICAgbmV3X3ggPSAtbW9kZWxfdyArIHByaXYtPnZpZXcud2lkdGg7CiAKLSAgICBpZiAo
bW9kZWxfaGVpZ2h0IDwgcHJpdi0+dmlldy5oIHx8IG5ld195ID49IDApCisgICAgaWYgKG1vZGVs
X2ggPCBwcml2LT52aWV3LmhlaWdodCB8fCBuZXdfeSA+PSAwKQogICAgICAgICBuZXdfeSA9IDA7
Ci0gICAgZWxzZSBpZiAoLW5ld195ICsgcHJpdi0+dmlldy5oID49IG1vZGVsX2hlaWdodCkKLSAg
ICAgICAgbmV3X3kgPSAtbW9kZWxfaGVpZ2h0ICsgcHJpdi0+dmlldy5oOworICAgIGVsc2UgaWYg
KC1uZXdfeSArIHByaXYtPnZpZXcuaGVpZ2h0ID49IG1vZGVsX2gpCisgICAgICAgIG5ld195ID0g
LW1vZGVsX2ggKyBwcml2LT52aWV3LmhlaWdodDsKIAogICAgIEV2YXNfQ29vcmQgYnggPSBuZXdf
eCAlIHR3OwogICAgIEV2YXNfQ29vcmQgYnkgPSBuZXdfeSAlIHRoOwpAQCAtMTUzNCw4ICsxNTM0
LDggQEAgc3RhdGljIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfem9vbV9zZXRf
aW50ZXJuYWwoRXdrX1RpbGVkX0JhY2tpbmdfU3QKIAogICAgIHByaXYtPnZpZXcub2Zmc2V0Lm9s
ZC54ID0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLng7CiAgICAgcHJpdi0+dmlldy5vZmZzZXQub2xk
LnkgPSBwcml2LT52aWV3Lm9mZnNldC5jdXIueTsKLSAgICAqb2ZmeCA9IHByaXYtPnZpZXcub2Zm
c2V0LmN1ci54OwotICAgICpvZmZ5ID0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLnk7CisgICAgKm9m
ZnNldFggPSBwcml2LT52aWV3Lm9mZnNldC5jdXIueDsKKyAgICAqb2Zmc2V0WSA9IHByaXYtPnZp
ZXcub2Zmc2V0LmN1ci55OwogCiAgICAgZXZhc19vYmplY3RfbW92ZSgKICAgICAgICAgcHJpdi0+
Y29udGVudHNfY2xpcHBlciwKQEAgLTE1NTIsNyArMTU1Miw3IEBAIHN0YXRpYyBFaW5hX0Jvb2wg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3pvb21fc2V0X2ludGVybmFsKEV3a19UaWxlZF9CYWNr
aW5nX1N0CiAKICAgICBmb3IgKDsgaXRyIDwgaXRyX2VuZDsgaXRyKyspIHsKICAgICAgICAgRXZh
c19Db29yZCBveCA9IGJhc2Vfb3g7Ci0gICAgICAgIEVpbmFfSW5saXN0ICpsc3QgPSAqaXRyOwor
ICAgICAgICBFaW5hX0lubGlzdCogbHN0ID0gKml0cjsKIAogICAgICAgICBFSU5BX0lOTElTVF9G
T1JFQUNIKGxzdCwgaXQpIHsKICAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9p
dGVtX21vdmUoaXQsIG94LCBveSk7CkBAIC0xNTY1LDQyICsxNTY1LDQyIEBAIHN0YXRpYyBFaW5h
X0Jvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3pvb21fc2V0X2ludGVybmFsKEV3a19UaWxl
ZF9CYWNraW5nX1N0CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotRWluYV9Cb29sIGV3a190
aWxlZF9iYWNraW5nX3N0b3JlX3pvb21fc2V0KEV2YXNfT2JqZWN0ICpvLCBmbG9hdCAqem9vbSwg
RXZhc19Db29yZCBjeCwgRXZhc19Db29yZCBjeSwgRXZhc19Db29yZCAqb2ZmeCwgRXZhc19Db29y
ZCAqb2ZmeSkKK0VpbmFfQm9vbCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV96b29tX3NldChFdmFz
X09iamVjdCogZXdrVGlsZSwgZmxvYXQqIHpvb20sIEV2YXNfQ29vcmQgY3VycmVudFgsIEV2YXNf
Q29vcmQgY3VycmVudFksIEV2YXNfQ29vcmQqIG9mZnNldFgsIEV2YXNfQ29vcmQqIG9mZnNldFkp
CiB7Ci0gICAgREJHKCJvPSVwLCB6b29tPSVmIiwgbywgKGRvdWJsZSkqem9vbSk7CisgICAgREJH
KCJvPSVwLCB6b29tPSVmIiwgZXdrVGlsZSwgKnpvb20pOwogCi0gICAgUFJJVl9EQVRBX0dFVF9P
Ul9SRVRVUk4obywgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRV
Uk4oZXdrVGlsZSwgcHJpdiwgRUlOQV9GQUxTRSk7CiAKLSAgICByZXR1cm4gX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX3pvb21fc2V0X2ludGVybmFsKHByaXYsIHpvb20sIGN4LCBjeSwgb2ZmeCwg
b2ZmeSk7CisgICAgcmV0dXJuIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV96b29tX3NldF9pbnRl
cm5hbChwcml2LCB6b29tLCBjdXJyZW50WCwgY3VycmVudFksIG9mZnNldFgsIG9mZnNldFkpOwog
fQogCi1FaW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfem9vbV93ZWFrX3NldChFdmFz
X09iamVjdCAqbywgZmxvYXQgem9vbSwgRXZhc19Db29yZCBjeCwgRXZhc19Db29yZCBjeSkKK0Vp
bmFfQm9vbCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV96b29tX3dlYWtfc2V0KEV2YXNfT2JqZWN0
KiBld2tUaWxlLCBmbG9hdCB6b29tLCBFdmFzX0Nvb3JkIGN1cnJlbnRYLCBFdmFzX0Nvb3JkIGN1
cnJlbnRZKQogewotICAgIERCRygibz0lcCwgem9vbT0lZiIsIG8sIChkb3VibGUpem9vbSk7Ci0g
ICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdiwgRUlOQV9GQUxTRSk7Ci0gICAgaWYg
KCFwcml2LT52aWV3LncgfHwgIXByaXYtPnZpZXcuaCkKKyAgICBEQkcoIm89JXAsIHpvb209JWYi
LCBld2tUaWxlLCB6b29tKTsKKyAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihld2tUaWxlLCBw
cml2LCBFSU5BX0ZBTFNFKTsKKyAgICBpZiAoIXByaXYtPnZpZXcud2lkdGggfHwgIXByaXYtPnZp
ZXcuaGVpZ2h0KQogICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKLSAgICBFaW5hX0lubGlzdCAq
Kml0ciwgKippdHJfZW5kOwotICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0Owor
ICAgIEVpbmFfSW5saXN0KiogaXRyLCAqKiBpdHJfZW5kOworICAgIEV3a19UaWxlZF9CYWNraW5n
X1N0b3JlX0l0ZW0qIGl0OwogICAgIEV2YXNfQ29vcmQgdHcsIHRoOwogICAgIEVpbmFfQm9vbCBy
ZWNhbGMgPSBFSU5BX0ZBTFNFOwogCiAgICAgZmxvYXQgc2NhbGUgPSB6b29tIC8gcHJpdi0+dmll
dy50aWxlLnpvb207CiAKLSAgICB0dyA9IFRJTEVfU0laRV9BVF9aT09NKHByaXYtPnZpZXcudGls
ZS53LCBzY2FsZSk7Ci0gICAgc2NhbGUgPSBUSUxFX1pPT01fQVRfU0laRSh0dywgcHJpdi0+dmll
dy50aWxlLncpOwotICAgIHRoID0gVElMRV9TSVpFX0FUX1pPT00ocHJpdi0+dmlldy50aWxlLmgs
IHNjYWxlKTsKKyAgICB0dyA9IFRJTEVfU0laRV9BVF9aT09NKHByaXYtPnZpZXcudGlsZS53aWR0
aCwgc2NhbGUpOworICAgIHNjYWxlID0gVElMRV9aT09NX0FUX1NJWkUodHcsIHByaXYtPnZpZXcu
dGlsZS53aWR0aCk7CisgICAgdGggPSBUSUxFX1NJWkVfQVRfWk9PTShwcml2LT52aWV3LnRpbGUu
aGVpZ2h0LCBzY2FsZSk7CiAgICAgem9vbSA9IHNjYWxlICogcHJpdi0+dmlldy50aWxlLnpvb207
CiAKLSAgICBFdmFzX0Nvb3JkIG1vZGVsX3dpZHRoID0gcHJpdi0+bW9kZWwud2lkdGggKiBzY2Fs
ZTsKLSAgICBFdmFzX0Nvb3JkIG1vZGVsX2hlaWdodCA9IHByaXYtPm1vZGVsLmhlaWdodCAqIHNj
YWxlOworICAgIEV2YXNfQ29vcmQgbW9kZWxfdyA9IHByaXYtPm1vZGVsLndpZHRoICogc2NhbGU7
CisgICAgRXZhc19Db29yZCBtb2RlbF9oID0gcHJpdi0+bW9kZWwuaGVpZ2h0ICogc2NhbGU7CiAK
LSAgICBldmFzX29iamVjdF9yZXNpemUocHJpdi0+Y29udGVudHNfY2xpcHBlciwgbW9kZWxfd2lk
dGgsIG1vZGVsX2hlaWdodCk7CisgICAgZXZhc19vYmplY3RfcmVzaXplKHByaXYtPmNvbnRlbnRz
X2NsaXBwZXIsIG1vZGVsX3csIG1vZGVsX2gpOwogCi0gICAgaW50IHZyb3dzID0gY2VpbCgoZmxv
YXQpcHJpdi0+dmlldy5oIC8gKGZsb2F0KXRoKSArIDE7Ci0gICAgaW50IHZjb2xzID0gY2VpbCgo
ZmxvYXQpcHJpdi0+dmlldy53IC8gKGZsb2F0KXR3KSArIDE7Ci0gICAgRXZhc19Db29yZCBuZXdf
eCA9IGN4ICsgKHByaXYtPnZpZXcub2Zmc2V0LmN1ci54IC0gY3gpICogc2NhbGU7Ci0gICAgRXZh
c19Db29yZCBuZXdfeSA9IGN5ICsgKHByaXYtPnZpZXcub2Zmc2V0LmN1ci55IC0gY3kpICogc2Nh
bGU7CisgICAgaW50IHZyb3dzID0gc3RhdGljX2Nhc3Q8aW50PihjZWlsKHN0YXRpY19jYXN0PGZs
b2F0Pihwcml2LT52aWV3LmhlaWdodCAvIHRoKSkgKyAxKTsKKyAgICBpbnQgdmNvbHMgPSBzdGF0
aWNfY2FzdDxpbnQ+KGNlaWwoc3RhdGljX2Nhc3Q8ZmxvYXQ+KHByaXYtPnZpZXcud2lkdGggLyB0
dykpICsgMSk7CisgICAgRXZhc19Db29yZCBuZXdfeCA9IGN1cnJlbnRYICsgKHByaXYtPnZpZXcu
b2Zmc2V0LmN1ci54IC0gY3VycmVudFgpICogc2NhbGU7CisgICAgRXZhc19Db29yZCBuZXdfeSA9
IGN1cnJlbnRZICsgKHByaXYtPnZpZXcub2Zmc2V0LmN1ci55IC0gY3VycmVudFkpICogc2NhbGU7
CiAgICAgRXZhc19Db29yZCBieCA9IG5ld194ICUgdHc7CiAgICAgRXZhc19Db29yZCBieSA9IG5l
d195ICUgdGg7CiAgICAgdW5zaWduZWQgbG9uZyBiYXNlX3JvdyA9IC1uZXdfeSAvIHRoOwpAQCAt
MTYxNiw5ICsxNjE2LDkgQEAgRWluYV9Cb29sIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3pvb21f
d2Vha19zZXQoRXZhc19PYmplY3QgKm8sIGZsb2F0IHpvb20sIEV2YXMKICAgICAgICAgcmVjYWxj
ID0gRUlOQV9UUlVFOwogCiAgICAgaWYgKHJlY2FsYykgewotICAgICAgICBFdmFzX0Nvb3JkIHcs
IGg7Ci0gICAgICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldChvLCAwLCAwLCAmdywgJmgpOwot
ICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcmVjYWxjX3JlbmRlcmVycyhwcml2LCB3
LCBoLCB0dywgdGgpOworICAgICAgICBFdmFzX0Nvb3JkIHdpZHRoLCBoZWlnaHQ7CisgICAgICAg
IGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldChld2tUaWxlLCAwLCAwLCAmd2lkdGgsICZoZWlnaHQp
OworICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcmVjYWxjX3JlbmRlcmVycyhwcml2
LCB3aWR0aCwgaGVpZ2h0LCB0dywgdGgpOwogICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfZmlsbF9yZW5kZXJlcnMocHJpdik7CiAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV91cGRhdGVzX3Byb2Nlc3MocHJpdik7CiAgICAgfQpAQCAtMTYzNSw3ICsxNjM1LDcgQEAgRWlu
YV9Cb29sIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3pvb21fd2Vha19zZXQoRXZhc19PYmplY3Qg
Km8sIGZsb2F0IHpvb20sIEV2YXMKIAogICAgIGZvciAoOyBpdHIgPCBpdHJfZW5kOyBpdHIrKykg
ewogICAgICAgICBFdmFzX0Nvb3JkIG94ID0gYmFzZV9veDsKLSAgICAgICAgRWluYV9Jbmxpc3Qg
KmxzdCA9ICppdHI7CisgICAgICAgIEVpbmFfSW5saXN0KiBsc3QgPSAqaXRyOwogCiAgICAgICAg
IEVJTkFfSU5MSVNUX0ZPUkVBQ0gobHN0LCBpdCkgewogICAgICAgICAgICAgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX2l0ZW1fbW92ZShpdCwgb3gsIG95KTsKQEAgLTE2NDgsMzYgKzE2NDgsMzYg
QEAgRWluYV9Cb29sIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3pvb21fd2Vha19zZXQoRXZhc19P
YmplY3QgKm8sIGZsb2F0IHpvb20sIEV2YXMKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi12
b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX2ZpeF9vZmZzZXRzKEV2YXNfT2JqZWN0ICpvLCBF
dmFzX0Nvb3JkIHcsIEV2YXNfQ29vcmQgaCkKK3ZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
Zml4X29mZnNldHMoRXZhc19PYmplY3QqIGV3a1RpbGUsIEV2YXNfQ29vcmQgd2lkdGgsIEV2YXNf
Q29vcmQgaGVpZ2h0KQogewotICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYpOwot
ICAgIEVpbmFfSW5saXN0ICoqaXRyLCAqKml0cl9lbmQ7Ci0gICAgRXdrX1RpbGVkX0JhY2tpbmdf
U3RvcmVfSXRlbSAqaXQ7CisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4oZXdrVGlsZSwgcHJp
dik7CisgICAgRWluYV9Jbmxpc3QqKiBpdHIsICoqaXRyX2VuZDsKKyAgICBFd2tfVGlsZWRfQmFj
a2luZ19TdG9yZV9JdGVtKiBpdDsKICAgICBFdmFzX0Nvb3JkIG5ld194ID0gcHJpdi0+dmlldy5v
ZmZzZXQuY3VyLng7CiAgICAgRXZhc19Db29yZCBuZXdfeSA9IHByaXYtPnZpZXcub2Zmc2V0LmN1
ci55OwogICAgIEV2YXNfQ29vcmQgYnggPSBwcml2LT52aWV3Lm9mZnNldC5iYXNlLng7CiAgICAg
RXZhc19Db29yZCBieSA9IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueTsKLSAgICBFdmFzX0Nvb3Jk
IHR3ID0gcHJpdi0+dmlldy50aWxlLnc7Ci0gICAgRXZhc19Db29yZCB0aCA9IHByaXYtPnZpZXcu
dGlsZS5oOworICAgIEV2YXNfQ29vcmQgdHcgPSBwcml2LT52aWV3LnRpbGUud2lkdGg7CisgICAg
RXZhc19Db29yZCB0aCA9IHByaXYtPnZpZXcudGlsZS5oZWlnaHQ7CiAKLSAgICBpZiAoLW5ld194
ID4gdykgewotICAgICAgICBuZXdfeCA9IC13OworICAgIGlmICgtbmV3X3ggPiB3aWR0aCkgewor
ICAgICAgICBuZXdfeCA9IC13aWR0aDsKICAgICAgICAgYnggPSBuZXdfeCAlIHR3OwogICAgICAg
ICBwcml2LT5tb2RlbC5iYXNlLmNvbCA9IC1uZXdfeCAvIHR3OwogICAgIH0KIAotICAgIGlmICgt
bmV3X3kgPiBoKSB7Ci0gICAgICAgIG5ld195ID0gLWg7CisgICAgaWYgKC1uZXdfeSA+IGhlaWdo
dCkgeworICAgICAgICBuZXdfeSA9IC1oZWlnaHQ7CiAgICAgICAgIGJ5ID0gbmV3X3kgJSB0aDsK
ICAgICAgICAgcHJpdi0+bW9kZWwuYmFzZS5yb3cgPSAtbmV3X3kgLyB0aDsKICAgICB9CiAKLSAg
ICBpZiAoYnggPj0gMCB8fCBieCA8PSAtMiAqIHByaXYtPnZpZXcudGlsZS53KSB7CisgICAgaWYg
KGJ4ID49IDAgfHwgYnggPD0gLTIgKiBwcml2LT52aWV3LnRpbGUud2lkdGgpIHsKICAgICAgICAg
YnggPSBuZXdfeCAlIHR3OwogICAgICAgICBwcml2LT5tb2RlbC5iYXNlLmNvbCA9IC1uZXdfeCAv
IHR3OwogICAgIH0KIAotICAgIGlmIChieSA+PSAwIHx8IGJ5IDw9IC0yICogcHJpdi0+dmlldy50
aWxlLmgpIHsKKyAgICBpZiAoYnkgPj0gMCB8fCBieSA8PSAtMiAqIHByaXYtPnZpZXcudGlsZS5o
ZWlnaHQpIHsKICAgICAgICAgYnkgPSBuZXdfeSAlIHRoOwogICAgICAgICBwcml2LT5tb2RlbC5i
YXNlLnJvdyA9IC1uZXdfeSAvIHRoOwogICAgIH0KQEAgLTE3MDAsNyArMTcwMCw3IEBAIHZvaWQg
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZml4X29mZnNldHMoRXZhc19PYmplY3QgKm8sIEV2YXNf
Q29vcmQgdywgRXZhc19Db29yCiAKICAgICBmb3IgKDsgaXRyIDwgaXRyX2VuZDsgaXRyKyspIHsK
ICAgICAgICAgRXZhc19Db29yZCBveCA9IGJhc2Vfb3g7Ci0gICAgICAgIEVpbmFfSW5saXN0ICps
c3QgPSAqaXRyOworICAgICAgICBFaW5hX0lubGlzdCogbHN0ID0gKml0cjsKIAogICAgICAgICBF
SU5BX0lOTElTVF9GT1JFQUNIKGxzdCwgaXQpIHsKICAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9pdGVtX21vdmUoaXQsIG94LCBveSk7CkBAIC0xNzExLDE3ICsxNzExLDE3IEBA
IHZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZml4X29mZnNldHMoRXZhc19PYmplY3QgKm8s
IEV2YXNfQ29vcmQgdywgRXZhc19Db29yCiAgICAgfQogfQogCi12b2lkIGV3a190aWxlZF9iYWNr
aW5nX3N0b3JlX3pvb21fd2Vha19zbW9vdGhfc2NhbGVfc2V0KEV2YXNfT2JqZWN0ICpvLCBFaW5h
X0Jvb2wgc21vb3RoX3NjYWxlKQordm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV96b29tX3dl
YWtfc21vb3RoX3NjYWxlX3NldChFdmFzX09iamVjdCogZXdrVGlsZSwgRWluYV9Cb29sIHNtb290
aF9zY2FsZSkKIHsKLSAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2KTsKLSAgICBF
aW5hX0lubGlzdCAqKml0ciwgKippdHJfZW5kOworICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJO
KGV3a1RpbGUsIHByaXYpOworICAgIEVpbmFfSW5saXN0KiogaXRyLCAqKml0cl9lbmQ7CiAKICAg
ICBpdHIgPSBwcml2LT52aWV3Lml0ZW1zOwogICAgIGl0cl9lbmQgPSBpdHIgKyBwcml2LT52aWV3
LnJvd3M7CiAgICAgcHJpdi0+dmlldy50aWxlLnpvb21fd2Vha19zbW9vdGhfc2NhbGUgPSBzbW9v
dGhfc2NhbGU7CiAKICAgICBmb3IgKDsgaXRyPCBpdHJfZW5kOyBpdHIrKykgewotICAgICAgICBF
d2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdDsKKyAgICAgICAgRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfSXRlbSogaXQ7CiAgICAgICAgIEVJTkFfSU5MSVNUX0ZPUkVBQ0goKml0ciwgaXQp
CiAgICAgICAgICAgICBpZiAoaXQtPnRpbGUpCiAgICAgICAgICAgICAgICAgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX2l0ZW1fc21vb3RoX3NjYWxlX3NldApAQCAtMTcyOSw5ICsxNzI5LDkgQEAg
dm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV96b29tX3dlYWtfc21vb3RoX3NjYWxlX3NldChF
dmFzX09iamVjdCAqbywgRWluYV9Cb28KICAgICB9CiB9CiAKLUVpbmFfQm9vbCBld2tfdGlsZWRf
YmFja2luZ19zdG9yZV91cGRhdGUoRXZhc19PYmplY3QgKm8sIGNvbnN0IEVpbmFfUmVjdGFuZ2xl
ICp1cGRhdGUpCitFaW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRlKEV2YXNf
T2JqZWN0KiBld2tUaWxlLCBjb25zdCBFaW5hX1JlY3RhbmdsZSogdXBkYXRlKQogewotICAgIFBS
SVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYsIEVJTkFfRkFMU0UpOworICAgIFBSSVZfREFU
QV9HRVRfT1JfUkVUVVJOKGV3a1RpbGUsIHByaXYsIEVJTkFfRkFMU0UpOwogCiAgICAgaWYgKHBy
aXYtPnJlbmRlci5kaXNhYmxlZCkKICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CkBAIC0xNzQw
LDM2ICsxNzQwLDM2IEBAIEVpbmFfQm9vbCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV91cGRhdGUo
RXZhc19PYmplY3QgKm8sIGNvbnN0IEVpbmFfUmVjdGFuZ2xlICp1CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcHJpdi0+dmlldy50aWxlLnpvb20pOwogfQogCi12b2lkIGV3a190
aWxlZF9iYWNraW5nX3N0b3JlX3VwZGF0ZXNfcHJvY2Vzc19wcmVfc2V0KEV2YXNfT2JqZWN0ICpv
LCB2b2lkICooKmNiKSh2b2lkICpkYXRhLCBFdmFzX09iamVjdCAqbyksIGNvbnN0IHZvaWQgKmRh
dGEpCit2b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3VwZGF0ZXNfcHJvY2Vzc19wcmVfc2V0
KEV2YXNfT2JqZWN0KiBld2tUaWxlLCB2b2lkKiAoKmNhbGxiYWNrKSh2b2lkKiBkYXRhLCBFdmFz
X09iamVjdCAqbyksIGNvbnN0IHZvaWQqIGRhdGEpCiB7Ci0gICAgUFJJVl9EQVRBX0dFVF9PUl9S
RVRVUk4obywgcHJpdik7Ci0gICAgcHJpdi0+cHJvY2Vzcy5wcmVfY2IgPSBjYjsKKyAgICBQUklW
X0RBVEFfR0VUX09SX1JFVFVSTihld2tUaWxlLCBwcml2KTsKKyAgICBwcml2LT5wcm9jZXNzLnBy
ZV9jYiA9IGNhbGxiYWNrOwogICAgIHByaXYtPnByb2Nlc3MucHJlX2RhdGEgPSAodm9pZCopZGF0
YTsKIH0KIAotdm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV91cGRhdGVzX3Byb2Nlc3NfcG9z
dF9zZXQoRXZhc19PYmplY3QgKm8sIHZvaWQgKigqY2IpKHZvaWQgKmRhdGEsIHZvaWQgKnByZV9k
YXRhLCBFdmFzX09iamVjdCAqbyksIGNvbnN0IHZvaWQgKmRhdGEpCit2b2lkIGV3a190aWxlZF9i
YWNraW5nX3N0b3JlX3VwZGF0ZXNfcHJvY2Vzc19wb3N0X3NldChFdmFzX09iamVjdCogZXdrVGls
ZSwgdm9pZCogKCpjYWxsYmFjaykodm9pZCogZGF0YSwgdm9pZCogcHJlX2RhdGEsIEV2YXNfT2Jq
ZWN0ICpvKSwgY29uc3Qgdm9pZCogZGF0YSkKIHsKLSAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVS
TihvLCBwcml2KTsKLSAgICBwcml2LT5wcm9jZXNzLnBvc3RfY2IgPSBjYjsKKyAgICBQUklWX0RB
VEFfR0VUX09SX1JFVFVSTihld2tUaWxlLCBwcml2KTsKKyAgICBwcml2LT5wcm9jZXNzLnBvc3Rf
Y2IgPSBjYWxsYmFjazsKICAgICBwcml2LT5wcm9jZXNzLnBvc3RfZGF0YSA9ICh2b2lkKilkYXRh
OwogfQogCi12b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3VwZGF0ZXNfcHJvY2VzcyhFdmFz
X09iamVjdCAqbykKK3ZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRlc19wcm9jZXNz
KEV2YXNfT2JqZWN0KiBld2tUaWxlKQogewotICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8s
IHByaXYpOworICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKGV3a1RpbGUsIHByaXYpOwogICAg
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV91cGRhdGVzX3Byb2Nlc3MocHJpdik7CiB9CiAKLXZv
aWQgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRlc19jbGVhcihFdmFzX09iamVjdCAqbykK
K3ZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRlc19jbGVhcihFdmFzX09iamVjdCog
ZXdrVGlsZSkKIHsKLSAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2KTsKKyAgICBQ
UklWX0RBVEFfR0VUX09SX1JFVFVSTihld2tUaWxlLCBwcml2KTsKIAogICAgIGV3a190aWxlX21h
dHJpeF91cGRhdGVzX2NsZWFyKHByaXYtPm1vZGVsLm1hdHJpeCk7CiB9CiAKLXZvaWQgZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfY29udGVudHNfcmVzaXplKEV2YXNfT2JqZWN0ICpvLCBFdmFzX0Nv
b3JkIHdpZHRoLCBFdmFzX0Nvb3JkIGhlaWdodCkKK3ZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfY29udGVudHNfcmVzaXplKEV2YXNfT2JqZWN0KiBld2tUaWxlLCBFdmFzX0Nvb3JkIHdpZHRo
LCBFdmFzX0Nvb3JkIGhlaWdodCkKIHsKLSAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBw
cml2KTsKKyAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihld2tUaWxlLCBwcml2KTsKIAogICAg
IGlmICh3aWR0aCA9PSBwcml2LT5tb2RlbC53aWR0aCAmJiBoZWlnaHQgPT0gcHJpdi0+bW9kZWwu
aGVpZ2h0KQogICAgICAgICByZXR1cm47CkBAIC0xNzc4LDIyICsxNzc4LDIyIEBAIHZvaWQgZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfY29udGVudHNfcmVzaXplKEV2YXNfT2JqZWN0ICpvLCBFdmFz
X0Nvb3JkIHdpZHRoLCBFCiAgICAgcHJpdi0+bW9kZWwuaGVpZ2h0ID0gaGVpZ2h0OwogICAgIHBy
aXYtPmNoYW5nZWQubW9kZWwgPSBFSU5BX1RSVUU7CiAKLSAgICBEQkcoIndpZHRoLGhlaWdodD0l
ZCwgJWQiLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBEQkcoIncsaD0lZCwgJWQiLCB3aWR0aCwgaGVp
Z2h0KTsKICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfY2hhbmdlZChwcml2KTsKIH0KIAot
dm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9kaXNhYmxlZF91cGRhdGVfc2V0KEV2YXNfT2Jq
ZWN0ICpvLCBFaW5hX0Jvb2wgdmFsdWUpCit2b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX2Rp
c2FibGVkX3VwZGF0ZV9zZXQoRXZhc19PYmplY3QqIGV3a1RpbGUsIEVpbmFfQm9vbCB2YWx1ZSkK
IHsKLSAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2KTsKKyAgICBQUklWX0RBVEFf
R0VUX09SX1JFVFVSTihld2tUaWxlLCBwcml2KTsKIAogICAgIGlmICh2YWx1ZSAhPSBwcml2LT5y
ZW5kZXIuZGlzYWJsZWQpCiAgICAgICAgIHByaXYtPnJlbmRlci5kaXNhYmxlZCA9IHZhbHVlOwog
fQogCi12b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX2ZsdXNoKEV2YXNfT2JqZWN0ICpvKQor
dm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9mbHVzaChFdmFzX09iamVjdCogZXdrVGlsZSkK
IHsKLSAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2KTsKLSAgICBFd2tfVGlsZV9V
bnVzZWRfQ2FjaGUgKnR1YyA9IDA7CisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4oZXdrVGls
ZSwgcHJpdik7CisgICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0dWMgPSAwOwogCiAgICAgcHJp
di0+dmlldy5vZmZzZXQuY3VyLnggPSAwOwogICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1ci55ID0g
MDsKQEAgLTE4MjUsMjEgKzE4MjUsMjEgQEAgdm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9m
bHVzaChFdmFzX09iamVjdCAqbykKICNlbmRpZgogfQogCi1FaW5hX0Jvb2wgZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZWdpb24oRXZhc19PYmplY3QgKm8sIEV2YXNfQ29vcmQg
eCwgRXZhc19Db29yZCB5LCBFdmFzX0Nvb3JkIHcsIEV2YXNfQ29vcmQgaCwgZmxvYXQgem9vbSkK
K0VpbmFfQm9vbCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlZ2lvbihFdmFz
X09iamVjdCogZXdrVGlsZSwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHksIEV2YXNfQ29vcmQg
d2lkdGgsIEV2YXNfQ29vcmQgaGVpZ2h0LCBmbG9hdCB6b29tKQogewotICAgIFBSSVZfREFUQV9H
RVRfT1JfUkVUVVJOKG8sIHByaXYsIEVJTkFfRkFMU0UpOworICAgIFBSSVZfREFUQV9HRVRfT1Jf
UkVUVVJOKGV3a1RpbGUsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIEVpbmFfVGlsZV9HcmlkX1Ns
aWNlciBzbGljZXI7Ci0gICAgY29uc3QgRWluYV9UaWxlX0dyaWRfSW5mbyAqaW5mbzsKKyAgICBj
b25zdCBFaW5hX1RpbGVfR3JpZF9JbmZvKiBpbmZvOwogICAgIEV2YXNfQ29vcmQgdHcsIHRoOwot
ICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjOworICAgIEV3a19UaWxlX1VudXNlZF9DYWNo
ZSogdHVjOwogCi0gICAgdHcgPSBwcml2LT52aWV3LnRpbGUudzsKLSAgICB0aCA9IHByaXYtPnZp
ZXcudGlsZS5oOwotICAgIHpvb20gPSBST1VOREVEX1pPT00ocHJpdi0+dmlldy50aWxlLncsIHpv
b20pOworICAgIHR3ID0gcHJpdi0+dmlldy50aWxlLndpZHRoOworICAgIHRoID0gcHJpdi0+dmll
dy50aWxlLmhlaWdodDsKKyAgICB6b29tID0gUk9VTkRFRF9aT09NKHByaXYtPnZpZXcudGlsZS53
aWR0aCwgem9vbSk7CiAKLSAgICBpZiAoIWVpbmFfdGlsZV9ncmlkX3NsaWNlcl9zZXR1cCgmc2xp
Y2VyLCB4LCB5LCB3LCBoLCB0dywgdGgpKSB7CisgICAgaWYgKCFlaW5hX3RpbGVfZ3JpZF9zbGlj
ZXJfc2V0dXAoJnNsaWNlciwgeCwgeSwgd2lkdGgsIGhlaWdodCwgdHcsIHRoKSkgewogICAgICAg
ICBFUlIoImNvdWxkIG5vdCBzZXR1cCBncmlkIHNsaWNlciBmb3IgJWQsJWQrJWR4JWQgdGlsZT0l
ZHglZCIsCi0gICAgICAgICAgICB4LCB5LCB3LCBoLCB0dywgdGgpOworICAgICAgICAgICAgeCwg
eSwgd2lkdGgsIGhlaWdodCwgdHcsIHRoKTsKICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CiAg
ICAgfQogCkBAIC0xODUzLDI5ICsxODUzLDI5IEBAIEVpbmFfQm9vbCBld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9wcmVfcmVuZGVyX3JlZ2lvbihFdmFzX09iamVjdCAqbywgRXZhc19Db29yZCB4CiAg
ICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcHJvY2Vzc19pZGxlcl9zdGFydChwcml2
KTsKIAogICAgIHR1YyA9IGV3a190aWxlX21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1v
ZGVsLm1hdHJpeCk7Ci0gICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2xvY2tfYXJlYSh0dWMsIHgs
IHksIHcsIGgsIHpvb20pOworICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9sb2NrX2FyZWEodHVj
LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCB6b29tKTsKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQog
Ci1FaW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZWxhdGl2ZV9y
YWRpdXMoRXZhc19PYmplY3QgKm8sIHVuc2lnbmVkIGludCBuLCBmbG9hdCB6b29tKQorRWluYV9C
b29sIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVsYXRpdmVfcmFkaXVzKEV2
YXNfT2JqZWN0KiBld2tUaWxlLCB1bnNpZ25lZCBpbnQgbiwgZmxvYXQgem9vbSkKIHsKLSAgICBQ
UklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2LCBFSU5BX0ZBTFNFKTsKLSAgICB1bnNpZ25l
ZCBsb25nIHN0YXJ0X3JvdywgZW5kX3Jvdywgc3RhcnRfY29sLCBlbmRfY29sLCBpLCBqLCB3LCBo
OwotICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjOworICAgIFBSSVZfREFUQV9HRVRfT1Jf
UkVUVVJOKGV3a1RpbGUsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIHVuc2lnbmVkIGxvbmcgc3Rh
cnRfcm93LCBlbmRfcm93LCBzdGFydF9jb2wsIGVuZF9jb2wsIGksIGosIHdpZHRoLCBoZWlnaHQ7
CisgICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0dWM7CiAKICAgICBJTkYoInByaXYtPm1vZGVs
LmJhc2Uucm93ID0lbGQsIG49JXUgcHJpdi0+dmlldy5yb3dzPSVsdSIsCi0gICAgICAgICAgICBw
cml2LT5tb2RlbC5iYXNlLnJvdywgbiwgcHJpdi0+dmlldy5yb3dzKTsKKyAgICAgICAgcHJpdi0+
bW9kZWwuYmFzZS5yb3csIG4sIHByaXYtPnZpZXcucm93cyk7CiAgICAgc3RhcnRfcm93ID0gKGxv
bmcpcHJpdi0+bW9kZWwuYmFzZS5yb3cgLSBuOwogICAgIHN0YXJ0X2NvbCA9IChsb25nKXByaXYt
Pm1vZGVsLmJhc2UuY29sIC0gbjsKICAgICBlbmRfcm93ID0gc3RkOjptaW4ocHJpdi0+bW9kZWwu
Y3VyLnJvd3MgLSAxLAotICAgICAgICAgICAgICAgICAgcHJpdi0+bW9kZWwuYmFzZS5yb3cgKyBw
cml2LT52aWV3LnJvd3MgKyBuIC0gMSk7CisgICAgICAgICAgICAgICAgICAgICAgIHByaXYtPm1v
ZGVsLmJhc2Uucm93ICsgcHJpdi0+dmlldy5yb3dzICsgbiAtIDEpOwogICAgIGVuZF9jb2wgPSBz
dGQ6Om1pbihwcml2LT5tb2RlbC5jdXIuY29scyAtIDEsCi0gICAgICAgICAgICAgICAgICBwcml2
LT5tb2RlbC5iYXNlLmNvbCArIHByaXYtPnZpZXcuY29scyArIG4gLSAxKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgcHJpdi0+bW9kZWwuYmFzZS5jb2wgKyBwcml2LT52aWV3LmNvbHMgKyBuIC0g
MSk7CiAKICAgICBJTkYoInN0YXJ0X3Jvdz0lbHUsIGVuZF9yb3c9JWx1LCBzdGFydF9jb2w9JWx1
LCBlbmRfY29sPSVsdSIsCi0gICAgICAgICBzdGFydF9yb3csIGVuZF9yb3csIHN0YXJ0X2NvbCwg
ZW5kX2NvbCk7CisgICAgICAgIHN0YXJ0X3JvdywgZW5kX3Jvdywgc3RhcnRfY29sLCBlbmRfY29s
KTsKIAotICAgIHpvb20gPSBST1VOREVEX1pPT00ocHJpdi0+dmlldy50aWxlLncsIHpvb20pOwor
ICAgIHpvb20gPSBST1VOREVEX1pPT00ocHJpdi0+dmlldy50aWxlLndpZHRoLCB6b29tKTsKIAog
ICAgIGZvciAoaSA9IHN0YXJ0X3JvdzsgaSA8PSBlbmRfcm93OyBpKyspCiAgICAgICAgIGZvciAo
aiA9IHN0YXJ0X2NvbDsgaiA8PSBlbmRfY29sOyBqKyspCkBAIC0xODg2LDE5ICsxODg2LDE5IEBA
IHN0YXJ0X3Byb2Nlc3Npbmc6CiAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcHJv
Y2Vzc19pZGxlcl9zdGFydChwcml2KTsKIAogICAgIHR1YyA9IGV3a190aWxlX21hdHJpeF91bnVz
ZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7Ci0gICAgaCA9IChlbmRfcm93IC0gc3Rh
cnRfcm93ICsgMSkgKiBUSUxFX1NJWkVfQVRfWk9PTShwcml2LT52aWV3LnRpbGUuaCwgem9vbSk7
Ci0gICAgdyA9IChlbmRfY29sIC0gc3RhcnRfY29sICsgMSkgKiBUSUxFX1NJWkVfQVRfWk9PTShw
cml2LT52aWV3LnRpbGUudywgem9vbSk7CisgICAgaGVpZ2h0ID0gKGVuZF9yb3cgLSBzdGFydF9y
b3cgKyAxKSAqIFRJTEVfU0laRV9BVF9aT09NKHByaXYtPnZpZXcudGlsZS5oZWlnaHQsIHpvb20p
OworICAgIHdpZHRoID0gKGVuZF9jb2wgLSBzdGFydF9jb2wgKyAxKSAqIFRJTEVfU0laRV9BVF9a
T09NKHByaXYtPnZpZXcudGlsZS53aWR0aCwgem9vbSk7CiAgICAgZXdrX3RpbGVfdW51c2VkX2Nh
Y2hlX2xvY2tfYXJlYSh0dWMsCi0gICAgICAgICAgICBzdGFydF9jb2wgKiBUSUxFX1NJWkVfQVRf
Wk9PTShwcml2LT52aWV3LnRpbGUudywgem9vbSksCi0gICAgICAgICAgICBzdGFydF9yb3cgKiBU
SUxFX1NJWkVfQVRfWk9PTShwcml2LT52aWV3LnRpbGUuaCwgem9vbSksIHcsIGgsIHpvb20pOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRfY29sICogVElMRV9TSVpF
X0FUX1pPT00ocHJpdi0+dmlldy50aWxlLndpZHRoLCB6b29tKSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0YXJ0X3JvdyAqIFRJTEVfU0laRV9BVF9aT09NKHByaXYtPnZp
ZXcudGlsZS5oZWlnaHQsIHpvb20pLCB3aWR0aCwgaGVpZ2h0LCB6b29tKTsKIAogICAgIHJldHVy
biBFSU5BX1RSVUU7CiB9CiAKLXZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRl
cl9jYW5jZWwoRXZhc19PYmplY3QgKm8pCit2b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3By
ZV9yZW5kZXJfY2FuY2VsKEV2YXNfT2JqZWN0KiBld2tUaWxlKQogewotICAgIFBSSVZfREFUQV9H
RVRfT1JfUkVUVVJOKG8sIHByaXYpOwotICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjOwor
ICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKGV3a1RpbGUsIHByaXYpOworICAgIEV3a19UaWxl
X1VudXNlZF9DYWNoZSogdHVjOwogCiAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9y
ZW5kZXJfcmVxdWVzdF9jbGVhcihwcml2KTsKIApAQCAtMTkwNiwxNSArMTkwNiwxNSBAQCB2b2lk
IGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfY2FuY2VsKEV2YXNfT2JqZWN0ICpv
KQogICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV91bmxvY2tfYXJlYSh0dWMpOwogfQogCi1FaW5h
X0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZGlzYWJsZV9yZW5kZXIoRXZhc19PYmplY3Qg
Km8pCitFaW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZGlzYWJsZV9yZW5kZXIoRXZh
c19PYmplY3QqIGV3a1RpbGUpCiB7Ci0gICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJp
diwgRUlOQV9GQUxTRSk7CisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4oZXdrVGlsZSwgcHJp
diwgRUlOQV9GQUxTRSk7CiAgICAgcmV0dXJuIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9kaXNh
YmxlX3JlbmRlcihwcml2KTsKIH0KIAotRWluYV9Cb29sIGV3a190aWxlZF9iYWNraW5nX3N0b3Jl
X2VuYWJsZV9yZW5kZXIoRXZhc19PYmplY3QgKm8pCitFaW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfZW5hYmxlX3JlbmRlcihFdmFzX09iamVjdCogZXdrVGlsZSkKIHsKLSAgICBQUklW
X0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBQUklWX0RBVEFf
R0VUX09SX1JFVFVSTihld2tUaWxlLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfY2hhbmdlZChwcml2KTsKICAgICByZXR1cm4gX2V3a190aWxlZF9iYWNr
aW5nX3N0b3JlX2VuYWJsZV9yZW5kZXIocHJpdik7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2VmbC9ld2svZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQvZWZs
L2V3ay9ld2tfdGlsZWRfYmFja2luZ19zdG9yZS5oCmluZGV4IDMwMTAzZWQuLjc5NDUxYWUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfYmFja2luZ19zdG9yZS5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfYmFja2luZ19zdG9yZS5oCkBA
IC03Miw3ICs3Miw3IEBAIHN0cnVjdCBfRXdrX1RpbGUgewogICAgIGNhaXJvX3QqIGNhaXJvOwog
CiAgICAgLyoqIE5ldmVyIGV2ZXIgY2hhbmdlIHRob3NlIGFmdGVyIHRpbGUgaXMgY3JlYXRlZCAo
cmVzcGVjdCBjb25zdCEpICovCi0gICAgY29uc3QgRXZhc19Db29yZCB3LCBoOyAgICAgICAgLyoq
PCB0aWxlIHNpemUgKHNlZSBUSUxFX1NJWkVfQVRfWk9PTSgpKSAqLworICAgIGNvbnN0IEV2YXNf
Q29vcmQgd2lkdGgsIGhlaWdodDsgICAgICAgIC8qKjwgdGlsZSBzaXplIChzZWUgVElMRV9TSVpF
X0FUX1pPT00oKSkgKi8KICAgICBjb25zdCBFdmFzX0NvbG9yc3BhY2UgY3NwYWNlOyAvKio8IGNv
bG9yc3BhY2UgKi8KICAgICBjb25zdCBmbG9hdCB6b29tOyAgICAgICAgICAgICAvKio8IHpvb20g
bGV2ZWwgY29udGVudHMgd2VyZSByZW5kZXJlZCBhdCAqLwogICAgIGNvbnN0IHNpemVfdCBieXRl
czsgICAgICAgICAgIC8qKjwgYnl0ZXMgdXNlZCBpbiBwaXhlbHMuIGtlZXAKQEAgLTkwLDcgKzkw
LDcgQEAgc3RydWN0IF9Fd2tfVGlsZSB7CiAvKiB2aWV3ICovCiBFdmFzX09iamVjdCogZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfYWRkKEV2YXMqIGUpOwogCi12b2lkIGV3a190aWxlZF9iYWNraW5n
X3N0b3JlX3JlbmRlcl9jYl9zZXQoRXZhc19PYmplY3QgKm8sIEVpbmFfQm9vbCAoKiBjYikodm9p
ZCogZGF0YSwgRXdrX1RpbGUqIHQsIGNvbnN0IEVpbmFfUmVjdGFuZ2xlKiBhcmVhKSwgY29uc3Qg
dm9pZCogZGF0YSk7Cit2b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3JlbmRlcl9jYl9zZXQo
RXZhc19PYmplY3QgKm8sIEVpbmFfQm9vbCAoKmNiKSh2b2lkKiBkYXRhLCBFd2tfVGlsZSogdCwg
Y29uc3QgRWluYV9SZWN0YW5nbGUqIGFyZWEpLCBjb25zdCB2b2lkKiBkYXRhKTsKIAogRWluYV9C
b29sIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3Njcm9sbF9mdWxsX29mZnNldF9zZXQoRXZhc19P
YmplY3QqIG8sIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5KTsKIEVpbmFfQm9vbCBld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9zY3JvbGxfZnVsbF9vZmZzZXRfYWRkKEV2YXNfT2JqZWN0KiBvLCBF
dmFzX0Nvb3JkIGR4LCBFdmFzX0Nvb3JkIGR5KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
ZWZsL2V3ay9ld2tfdGlsZWRfbWF0cml4LmNwcCBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tf
dGlsZWRfbWF0cml4LmNwcAppbmRleCBmZjRjNDFjLi4yNGRiY2U2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX21hdHJpeC5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9lZmwvZXdrL2V3a190aWxlZF9tYXRyaXguY3BwCkBAIC0zMiwxNyArMzIsMTcgQEAKICNpbmNs
dWRlIDxzdHJpbmcuaD4KIAogc3RydWN0IF9Fd2tfVGlsZV9NYXRyaXggewotICAgIEVpbmFfTWF0
cml4c3BhcnNlICptYXRyaXg7Ci0gICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWM7CisgICAg
RWluYV9NYXRyaXhzcGFyc2UqIG1hdHJpeDsKKyAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHR1
YzsKICAgICBFdmFzX0NvbG9yc3BhY2UgY3NwYWNlOwogICAgIHN0cnVjdCB7Ci0gICAgICAgIHZv
aWQgKCpjYikodm9pZCAqZGF0YSwgRXdrX1RpbGUgKnQsIGNvbnN0IEVpbmFfUmVjdGFuZ2xlICp1
cGRhdGUpOwotICAgICAgICB2b2lkICpkYXRhOworICAgICAgICB2b2lkICgqY2IpKHZvaWQqIGRh
dGEsIEV3a19UaWxlKiB0aWxlLCBjb25zdCBFaW5hX1JlY3RhbmdsZSogdXBkYXRlKTsKKyAgICAg
ICAgdm9pZCogZGF0YTsKICAgICB9IHJlbmRlcjsKICAgICB1bnNpZ25lZCBpbnQgZnJvemVuOwot
ICAgIEVpbmFfTGlzdCAqdXBkYXRlczsKKyAgICBFaW5hX0xpc3QqIHVwZGF0ZXM7CiAgICAgc3Ry
dWN0IHsKLSAgICAgICAgRXZhc19Db29yZCB3LCBoOworICAgICAgICBFdmFzX0Nvb3JkIHdpZHRo
LCBoZWlnaHQ7CiAgICAgfSB0aWxlOwogI2lmZGVmIERFQlVHX01FTV9MRUFLUwogICAgIHN0cnVj
dCB7CkBAIC01OSwzMSArNTksMzEgQEAgc3RhdGljIHVpbnQ2NF90IGJ5dGVzX2xlYWtlZCA9IDA7
CiAjZW5kaWYKIAogLyogY2FsbGVkIHdoZW4gbWF0cml4c3BhcnNlIGlzIHJlc2l6ZWQgb3IgZnJl
ZWQgKi8KLXN0YXRpYyB2b2lkIF9ld2tfdGlsZV9tYXRyaXhfY2VsbF9mcmVlKHZvaWQgKnVzZXJf
ZGF0YSwgdm9pZCAqY2VsbF9kYXRhKQorc3RhdGljIHZvaWQgX2V3a190aWxlX21hdHJpeF9jZWxs
X2ZyZWUodm9pZCogdXNlcl9kYXRhLCB2b2lkKiBjZWxsX2RhdGEpCiB7CiAgICAgRXdrX1RpbGVf
TWF0cml4KiB0bSA9IHN0YXRpY19jYXN0PEV3a19UaWxlX01hdHJpeCo+KHVzZXJfZGF0YSk7Ci0g
ICAgRXdrX1RpbGUqIHQgPSBzdGF0aWNfY2FzdDxFd2tfVGlsZSo+KGNlbGxfZGF0YSk7CisgICAg
RXdrX1RpbGUqIHRpbGUgPSBzdGF0aWNfY2FzdDxFd2tfVGlsZSo+KGNlbGxfZGF0YSk7CiAKLSAg
ICBpZiAoIXQpCisgICAgaWYgKCF0aWxlKQogICAgICAgICByZXR1cm47CiAKICAgICBld2tfdGls
ZV91bnVzZWRfY2FjaGVfZnJlZXplKHRtLT50dWMpOwogCi0gICAgaWYgKHQtPnVwZGF0ZXMgfHwg
dC0+c3RhdHMuZnVsbF91cGRhdGUpCi0gICAgICAgIHRtLT51cGRhdGVzID0gZWluYV9saXN0X3Jl
bW92ZSh0bS0+dXBkYXRlcywgdCk7CisgICAgaWYgKHRpbGUtPnVwZGF0ZXMgfHwgdGlsZS0+c3Rh
dHMuZnVsbF91cGRhdGUpCisgICAgICAgIHRtLT51cGRhdGVzID0gZWluYV9saXN0X3JlbW92ZSh0
bS0+dXBkYXRlcywgdGlsZSk7CiAKLSAgICBpZiAodC0+dmlzaWJsZSkKLSAgICAgICAgRVJSKCJm
cmVlaW5nIGNlbGwgdGhhdCBpcyB2aXNpYmxlLCBsZWFraW5nIHRpbGUgJXAiLCB0KTsKKyAgICBp
ZiAodGlsZS0+dmlzaWJsZSkKKyAgICAgICAgRVJSKCJmcmVlaW5nIGNlbGwgdGhhdCBpcyB2aXNp
YmxlLCBsZWFraW5nIHRpbGUgJXAiLCB0aWxlKTsKICAgICBlbHNlIHsKLSAgICAgICAgaWYgKCFl
d2tfdGlsZV91bnVzZWRfY2FjaGVfdGlsZV9nZXQodG0tPnR1YywgdCkpCi0gICAgICAgICAgICBF
UlIoInRpbGUgJXAgd2FzIG5vdCBpbiBjYWNoZSAlcD8gbGVha2luZy4uLiIsIHQsIHRtLT50dWMp
OworICAgICAgICBpZiAoIWV3a190aWxlX3VudXNlZF9jYWNoZV90aWxlX2dldCh0bS0+dHVjLCB0
aWxlKSkKKyAgICAgICAgICAgIEVSUigidGlsZSAlcCB3YXMgbm90IGluIGNhY2hlICVwPyBsZWFr
aW5nLi4uIiwgdGlsZSwgdG0tPnR1Yyk7CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgREJH
KCJ0aWxlIGNlbGwgZG9lcyBub3QgZXhpc3QgYW55bW9yZSwgZnJlZSBpdCAlcCIsIHQpOworICAg
ICAgICAgICAgREJHKCJ0aWxlIGNlbGwgZG9lcyBub3QgZXhpc3QgYW55bW9yZSwgZnJlZSBpdCAl
cCIsIHRpbGUpOwogI2lmZGVmIERFQlVHX01FTV9MRUFLUwotICAgICAgICAgICAgdG0tPnN0YXRz
LmJ5dGVzLmZyZWVkICs9IHQtPmJ5dGVzOworICAgICAgICAgICAgdG0tPnN0YXRzLmJ5dGVzLmZy
ZWVkICs9IHRpbGUtPmJ5dGVzOwogICAgICAgICAgICAgdG0tPnN0YXRzLnRpbGVzLmZyZWVkKys7
CiAjZW5kaWYKLSAgICAgICAgICAgIGV3a190aWxlX2ZyZWUodCk7CisgICAgICAgICAgICBld2tf
dGlsZV9mcmVlKHRpbGUpOwogICAgICAgICB9CiAgICAgfQogCkBAIC05MSw0MCArOTEsNDAgQEAg
c3RhdGljIHZvaWQgX2V3a190aWxlX21hdHJpeF9jZWxsX2ZyZWUodm9pZCAqdXNlcl9kYXRhLCB2
b2lkICpjZWxsX2RhdGEpCiB9CiAKIC8qIGNhbGxlZCB3aGVuIGNhY2hlIG9mIHVudXNlZCB0aWxl
IGlzIGZsdXNoZWQgKi8KLXN0YXRpYyB2b2lkIF9ld2tfdGlsZV9tYXRyaXhfdGlsZV9mcmVlKHZv
aWQgKmRhdGEsIEV3a19UaWxlICp0KQorc3RhdGljIHZvaWQgX2V3a190aWxlX21hdHJpeF90aWxl
X2ZyZWUodm9pZCogZGF0YSwgRXdrX1RpbGUqIHRpbGUpCiB7CiAgICAgRXdrX1RpbGVfTWF0cml4
KiB0bSA9IHN0YXRpY19jYXN0PEV3a19UaWxlX01hdHJpeCo+KGRhdGEpOwotICAgIEVpbmFfTWF0
cml4c3BhcnNlX0NlbGwgKmNlbGw7Ci0gCi0gICAgaWYgKCFlaW5hX21hdHJpeHNwYXJzZV9jZWxs
X2lkeF9nZXQodG0tPm1hdHJpeCwgdC0+cm93LCB0LT5jb2wsICZjZWxsKSkgewotICAgICAgICBF
UlIoInJlbW92aW5nIHRpbGUgJXAgdGhhdCB3YXMgbm90IGluIHRoZSBtYXRyaXg/IExlYWtpbmcu
Li4iLCB0KTsKKyAgICBFaW5hX01hdHJpeHNwYXJzZV9DZWxsKiBjZWxsOworCisgICAgaWYgKCFl
aW5hX21hdHJpeHNwYXJzZV9jZWxsX2lkeF9nZXQodG0tPm1hdHJpeCwgdGlsZS0+cm93LCB0aWxl
LT5jb2wsICZjZWxsKSkgeworICAgICAgICBFUlIoInJlbW92aW5nIHRpbGUgJXAgdGhhdCB3YXMg
bm90IGluIHRoZSBtYXRyaXg/IExlYWtpbmcuLi4iLCB0aWxlKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAogICAgIGlmICghY2VsbCkgewotICAgICAgICBFUlIoInJlbW92aW5nIHRpbGUgJXAg
dGhhdCB3YXMgbm90IGluIHRoZSBtYXRyaXg/IExlYWtpbmcuLi4iLCB0KTsKKyAgICAgICAgRVJS
KCJyZW1vdmluZyB0aWxlICVwIHRoYXQgd2FzIG5vdCBpbiB0aGUgbWF0cml4PyBMZWFraW5nLi4u
IiwgdGlsZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAodC0+dXBkYXRlcyB8
fCB0LT5zdGF0cy5mdWxsX3VwZGF0ZSkKLSAgICAgICAgdG0tPnVwZGF0ZXMgPSBlaW5hX2xpc3Rf
cmVtb3ZlKHRtLT51cGRhdGVzLCB0KTsKKyAgICBpZiAodGlsZS0+dXBkYXRlcyB8fCB0aWxlLT5z
dGF0cy5mdWxsX3VwZGF0ZSkKKyAgICAgICAgdG0tPnVwZGF0ZXMgPSBlaW5hX2xpc3RfcmVtb3Zl
KHRtLT51cGRhdGVzLCB0aWxlKTsKIAogICAgIC8qIHNldCB0byBudWxsIHRvIGF2b2lkIGRvdWJs
ZSBmcmVlICovCiAgICAgZWluYV9tYXRyaXhzcGFyc2VfY2VsbF9kYXRhX3JlcGxhY2UoY2VsbCwg
MCwgMCk7CiAgICAgZWluYV9tYXRyaXhzcGFyc2VfY2VsbF9jbGVhcihjZWxsKTsKIAotICAgIGlm
IChFSU5BX1VOTElLRUxZKCEhdC0+dmlzaWJsZSkpIHsKKyAgICBpZiAoRUlOQV9VTkxJS0VMWSgh
IXRpbGUtPnZpc2libGUpKSB7CiAgICAgICAgIEVSUigiY2FjaGUgb2YgdW51c2VkIHRpbGVzIHJl
cXVlc3RpbmcgZGVsZXRpb24gb2YgdXNlZCB0aWxlICVwPyAiCi0gICAgICAgICAgICAiTGVha2lu
Zy4uLiIsIHQpOworICAgICAgICAgICAgIkxlYWtpbmcuLi4iLCB0aWxlKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAogI2lmZGVmIERFQlVHX01FTV9MRUFLUwotICAgIHRtLT5zdGF0cy5ieXRl
cy5mcmVlZCArPSB0LT5ieXRlczsKKyAgICB0bS0+c3RhdHMuYnl0ZXMuZnJlZWQgKz0gdGlsZS0+
Ynl0ZXM7CiAgICAgdG0tPnN0YXRzLnRpbGVzLmZyZWVkKys7CiAjZW5kaWYKIAotICAgIGV3a190
aWxlX2ZyZWUodCk7CisgICAgZXdrX3RpbGVfZnJlZSh0aWxlKTsKIH0KIAogLyoqCkBAIC0xMzcs
NyArMTM3LDcgQEAgc3RhdGljIHZvaWQgX2V3a190aWxlX21hdHJpeF90aWxlX2ZyZWUodm9pZCAq
ZGF0YSwgRXdrX1RpbGUgKnQpCiAgKgogICogQHBhcmFtIHR1YyBjYWNoZSBvZiB1bnVzZWQgdGls
ZXMgb3IgQGMgMCB0byBjcmVhdGUgb25lCiAgKiAgICAgICAgYXV0b21hdGljYWxseS4KLSAqIEBw
YXJhbSBjb2xzIG51bWJlciBvZiBjb2x1bW5zIGluIHRoZSBtYXRyaXguCisgKiBAcGFyYW0gY29s
dW1ucyBudW1iZXIgb2YgY29sdW1ucyBpbiB0aGUgbWF0cml4LgogICogQHBhcmFtIHJvd3MgbnVt
YmVyIG9mIHJvd3MgaW4gdGhlIG1hdHJpeC4KICAqIEBwYXJhbSBjc3BhY2UgdGhlIGNvbG9yIHNw
YWNlIHVzZWQgdG8gY3JlYXRlIHRpbGVzIGluIHRoaXMgbWF0cml4LgogICogQHBhcmFtIHJlbmRl
cl9jYiBmdW5jdGlvbiB1c2VkIHRvIHJlbmRlciBnaXZlbiB0aWxlIHVwZGF0ZS4KQEAgLTE0NSwy
MSArMTQ1LDIxIEBAIHN0YXRpYyB2b2lkIF9ld2tfdGlsZV9tYXRyaXhfdGlsZV9mcmVlKHZvaWQg
KmRhdGEsIEV3a19UaWxlICp0KQogICoKICAqIEByZXR1cm4gbmV3bHkgYWxsb2NhdGVkIGluc3Rh
bmNlIG9uIHN1Y2Nlc3MsIEBjIDAgb24gZmFpbHVyZS4KICAqLwotRXdrX1RpbGVfTWF0cml4ICpl
d2tfdGlsZV9tYXRyaXhfbmV3KEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjLCB1bnNpZ25lZCBs
b25nIGNvbHMsIHVuc2lnbmVkIGxvbmcgcm93cywgRXZhc19Db2xvcnNwYWNlIGNzcGFjZSwgdm9p
ZCAoKnJlbmRlcl9jYikodm9pZCAqZGF0YSwgRXdrX1RpbGUgKnQsIGNvbnN0IEVpbmFfUmVjdGFu
Z2xlICp1cGRhdGUpLCBjb25zdCB2b2lkICpyZW5kZXJfZGF0YSkKK0V3a19UaWxlX01hdHJpeCog
ZXdrX3RpbGVfbWF0cml4X25ldyhFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHRpbGVVbnVzZWRDYWNo
ZSwgdW5zaWduZWQgbG9uZyBjb2x1bW5zLCB1bnNpZ25lZCBsb25nIHJvd3MsIEV2YXNfQ29sb3Jz
cGFjZSBjb2xvclNwYWNlLCB2b2lkICgqcmVuZGVyX2NhbGxiYWNrKSh2b2lkKiBkYXRhLCBFd2tf
VGlsZSogdGlsZSwgY29uc3QgRWluYV9SZWN0YW5nbGUqIHVwZGF0ZSksIGNvbnN0IHZvaWQqIHJl
bmRlcl9kYXRhKQogewogICAgIEV3a19UaWxlX01hdHJpeCogdG0gPSBzdGF0aWNfY2FzdDxFd2tf
VGlsZV9NYXRyaXgqPihjYWxsb2MoMSwgc2l6ZW9mKEV3a19UaWxlX01hdHJpeCkpKTsKICAgICBp
ZiAoIXRtKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIHRtLT5tYXRyaXggPSBlaW5hX21hdHJp
eHNwYXJzZV9uZXcocm93cywgY29scywgX2V3a190aWxlX21hdHJpeF9jZWxsX2ZyZWUsIHRtKTsK
KyAgICB0bS0+bWF0cml4ID0gZWluYV9tYXRyaXhzcGFyc2VfbmV3KHJvd3MsIGNvbHVtbnMsIF9l
d2tfdGlsZV9tYXRyaXhfY2VsbF9mcmVlLCB0bSk7CiAgICAgaWYgKCF0bS0+bWF0cml4KSB7CiAg
ICAgICAgIEVSUigiY291bGQgbm90IGNyZWF0ZSBzcGFyc2UgbWF0cml4LiIpOwogICAgICAgICBm
cmVlKHRtKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgaWYgKHR1YykKLSAgICAg
ICAgdG0tPnR1YyA9IGV3a190aWxlX3VudXNlZF9jYWNoZV9yZWYodHVjKTsKKyAgICBpZiAodGls
ZVVudXNlZENhY2hlKQorICAgICAgICB0bS0+dHVjID0gZXdrX3RpbGVfdW51c2VkX2NhY2hlX3Jl
Zih0aWxlVW51c2VkQ2FjaGUpOwogICAgIGVsc2UgewogICAgICAgICB0bS0+dHVjID0gZXdrX3Rp
bGVfdW51c2VkX2NhY2hlX25ldyg0MDk2MDAwMCk7CiAgICAgICAgIGlmICghdG0tPnR1YykgewpA
QCAtMTcwLDExICsxNzAsMTEgQEAgRXdrX1RpbGVfTWF0cml4ICpld2tfdGlsZV9tYXRyaXhfbmV3
KEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjLCB1bnNpZ25lZCBsb25nIGMKICAgICAgICAgfQog
ICAgIH0KIAotICAgIHRtLT5jc3BhY2UgPSBjc3BhY2U7Ci0gICAgdG0tPnJlbmRlci5jYiA9IHJl
bmRlcl9jYjsKLSAgICB0bS0+cmVuZGVyLmRhdGEgPSAodm9pZCAqKXJlbmRlcl9kYXRhOwotICAg
IHRtLT50aWxlLncgPSBERUZBVUxUX1RJTEVfVzsKLSAgICB0bS0+dGlsZS5oID0gREVGQVVMVF9U
SUxFX0g7CisgICAgdG0tPmNzcGFjZSA9IGNvbG9yU3BhY2U7CisgICAgdG0tPnJlbmRlci5jYiA9
IHJlbmRlcl9jYWxsYmFjazsKKyAgICB0bS0+cmVuZGVyLmRhdGEgPSAodm9pZCopcmVuZGVyX2Rh
dGE7CisgICAgdG0tPnRpbGUud2lkdGggPSBERUZBVUxUX1RJTEVfVzsKKyAgICB0bS0+dGlsZS5o
ZWlnaHQgPSBERUZBVUxUX1RJTEVfSDsKIAogICAgIHJldHVybiB0bTsKIH0KQEAgLTE4NCw1NiAr
MTg0LDU2IEBAIEV3a19UaWxlX01hdHJpeCAqZXdrX3RpbGVfbWF0cml4X25ldyhFd2tfVGlsZV9V
bnVzZWRfQ2FjaGUgKnR1YywgdW5zaWduZWQgbG9uZyBjCiAgKgogICogVGhlIGNhY2hlIGluc3Rh
bmNlIGlzIHVucmVmZXJlbmNlZCwgcG9zc2libHkgZnJlZWluZyBpdC4KICAqLwotdm9pZCBld2tf
dGlsZV9tYXRyaXhfZnJlZShFd2tfVGlsZV9NYXRyaXggKnRtKQordm9pZCBld2tfdGlsZV9tYXRy
aXhfZnJlZShFd2tfVGlsZV9NYXRyaXgqIHRpbGVNYXRyaXgpCiB7CiAjaWZkZWYgREVCVUdfTUVN
X0xFQUtTCiAgICAgdWludDY0X3QgdGlsZXMsIGJ5dGVzOwogI2VuZGlmCiAKLSAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTih0bSk7Ci0gICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2ZyZWV6
ZSh0bS0+dHVjKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0aWxlTWF0cml4KTsK
KyAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfZnJlZXplKHRpbGVNYXRyaXgtPnR1Yyk7CiAKLSAg
ICBlaW5hX21hdHJpeHNwYXJzZV9mcmVlKHRtLT5tYXRyaXgpOworICAgIGVpbmFfbWF0cml4c3Bh
cnNlX2ZyZWUodGlsZU1hdHJpeC0+bWF0cml4KTsKIAotICAgIGV3a190aWxlX3VudXNlZF9jYWNo
ZV90aGF3KHRtLT50dWMpOwotICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV91bnJlZih0bS0+dHVj
KTsKKyAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfdGhhdyh0aWxlTWF0cml4LT50dWMpOworICAg
IGV3a190aWxlX3VudXNlZF9jYWNoZV91bnJlZih0aWxlTWF0cml4LT50dWMpOwogCiAjaWZkZWYg
REVCVUdfTUVNX0xFQUtTCi0gICAgdGlsZXMgPSB0bS0+c3RhdHMudGlsZXMuYWxsb2NhdGVkIC0g
dG0tPnN0YXRzLnRpbGVzLmZyZWVkOwotICAgIGJ5dGVzID0gdG0tPnN0YXRzLmJ5dGVzLmFsbG9j
YXRlZCAtIHRtLT5zdGF0cy5ieXRlcy5mcmVlZDsKKyAgICB0aWxlcyA9IHRpbGVNYXRyaXgtPnN0
YXRzLnRpbGVzLmFsbG9jYXRlZCAtIHRpbGVNYXRyaXgtPnN0YXRzLnRpbGVzLmZyZWVkOworICAg
IGJ5dGVzID0gdGlsZU1hdHJpeC0+c3RhdHMuYnl0ZXMuYWxsb2NhdGVkIC0gdGlsZU1hdHJpeC0+
c3RhdHMuYnl0ZXMuZnJlZWQ7CiAKICAgICB0aWxlc19sZWFrZWQgKz0gdGlsZXM7CiAgICAgYnl0
ZXNfbGVha2VkICs9IGJ5dGVzOwogCiAgICAgaWYgKHRpbGVzIHx8IGJ5dGVzKQotICAgICAgICBF
UlIoInRpbGVkIG1hdHJpeCBsZWFrZWQ6IHRpbGVzWyslIlBSSXU2NCIsLSUiUFJJdTY0IjolIlBS
SXU2NCJdICIKLSAgICAgICAgICAgImJ5dGVzWyslIlBSSXU2NCIsLSUiUFJJdTY0IjolIlBSSXU2
NCJdIiwKLSAgICAgICAgICAgIHRtLT5zdGF0cy50aWxlcy5hbGxvY2F0ZWQsIHRtLT5zdGF0cy50
aWxlcy5mcmVlZCwgdGlsZXMsCi0gICAgICAgICAgICB0bS0+c3RhdHMuYnl0ZXMuYWxsb2NhdGVk
LCB0bS0+c3RhdHMuYnl0ZXMuZnJlZWQsIGJ5dGVzKTsKKyAgICAgICAgRVJSKCJ0aWxlZCBtYXRy
aXggbGVha2VkOiB0aWxlc1srJSIgUFJJdTY0ICIsLSUiIFBSSXU2NCAiOiUiIFBSSXU2NCAiXSAi
CisgICAgICAgICAgICAiYnl0ZXNbKyUiIFBSSXU2NCAiLC0lIiBQUkl1NjQgIjolIiBQUkl1NjQg
Il0iLAorICAgICAgICAgICAgdGlsZU1hdHJpeC0+c3RhdHMudGlsZXMuYWxsb2NhdGVkLCB0aWxl
TWF0cml4LT5zdGF0cy50aWxlcy5mcmVlZCwgdGlsZXMsCisgICAgICAgICAgICB0aWxlTWF0cml4
LT5zdGF0cy5ieXRlcy5hbGxvY2F0ZWQsIHRpbGVNYXRyaXgtPnN0YXRzLmJ5dGVzLmZyZWVkLCBi
eXRlcyk7CiAgICAgZWxzZSBpZiAodGlsZXNfbGVha2VkIHx8IGJ5dGVzX2xlYWtlZCkKLSAgICAg
ICAgV1JOKCJ0aWxlZCBtYXRyaXggaGFkIG5vIGxlYWtzOiB0aWxlc1srJSJQUkl1NjQiLC0lIlBS
SXU2NCJdICIKLSAgICAgICAgICAgImJ5dGVzWyslIlBSSXU2NCIsLSUiUFJJdTY0Il0sIGJ1dCBz
b21lIG90aGVyIGxlYWtlZCAiCi0gICAgICAgICAgICAiJSJQUkl1NjQiIHRpbGVzICglIlBSSXU2
NCIgYnl0ZXMpIiwKLSAgICAgICAgICAgIHRtLT5zdGF0cy50aWxlcy5hbGxvY2F0ZWQsIHRtLT5z
dGF0cy50aWxlcy5mcmVlZCwKLSAgICAgICAgICAgIHRtLT5zdGF0cy5ieXRlcy5hbGxvY2F0ZWQs
IHRtLT5zdGF0cy5ieXRlcy5mcmVlZCwKKyAgICAgICAgV1JOKCJ0aWxlZCBtYXRyaXggaGFkIG5v
IGxlYWtzOiB0aWxlc1srJSIgUFJJdTY0ICIsLSUiIFBSSXU2NCAiXSAiCisgICAgICAgICAgICAi
Ynl0ZXNbKyUiIFBSSXU2NCAiLC0lIiBQUkl1NjQgIl0sIGJ1dCBzb21lIG90aGVyIGxlYWtlZCAi
CisgICAgICAgICAgICAiJSIgUFJJdTY0ICIgdGlsZXMgKCUiIFBSSXU2NCAiIGJ5dGVzKSIsCisg
ICAgICAgICAgICB0aWxlTWF0cml4LT5zdGF0cy50aWxlcy5hbGxvY2F0ZWQsIHRpbGVNYXRyaXgt
PnN0YXRzLnRpbGVzLmZyZWVkLAorICAgICAgICAgICAgdGlsZU1hdHJpeC0+c3RhdHMuYnl0ZXMu
YWxsb2NhdGVkLCB0aWxlTWF0cml4bS0+c3RhdHMuYnl0ZXMuZnJlZWQsCiAgICAgICAgICAgICB0
aWxlc19sZWFrZWQsIGJ5dGVzX2xlYWtlZCk7CiAgICAgZWxzZQotICAgICAgICBJTkYoInRpbGVk
IG1hdHJpeCBoYWQgbm8gbGVha3M6IHRpbGVzWyslIlBSSXU2NCIsLSUiUFJJdTY0Il0gIgotICAg
ICAgICAgICAiYnl0ZXNbKyUiUFJJdTY0IiwtJSJQUkl1NjQiXSIsCi0gICAgICAgICAgICB0bS0+
c3RhdHMudGlsZXMuYWxsb2NhdGVkLCB0bS0+c3RhdHMudGlsZXMuZnJlZWQsCi0gICAgICAgICAg
ICB0bS0+c3RhdHMuYnl0ZXMuYWxsb2NhdGVkLCB0bS0+c3RhdHMuYnl0ZXMuZnJlZWQpOworICAg
ICAgICBJTkYoInRpbGVkIG1hdHJpeCBoYWQgbm8gbGVha3M6IHRpbGVzWyslIiBQUkl1NjQgIiwt
JSIgUFJJdTY0ICJdICIKKyAgICAgICAgICAgICJieXRlc1srJSIgUFJJdTY0ICIsLSUiIFBSSXU2
NCAiXSIsCisgICAgICAgICAgICB0aWxlTWF0cml4LT5zdGF0cy50aWxlcy5hbGxvY2F0ZWQsIHRp
bGVNYXRyaXgtPnN0YXRzLnRpbGVzLmZyZWVkLAorICAgICAgICAgICAgdGlsZU1hdHJpeC0+c3Rh
dHMuYnl0ZXMuYWxsb2NhdGVkLCB0aWxlTWF0cml4LT5zdGF0cy5ieXRlcy5mcmVlZCk7CiAjZW5k
aWYKIAotICAgIGZyZWUodG0pOworICAgIGZyZWUodGlsZU1hdHJpeCk7CiB9CiAKIC8qKgogICog
UmVzaXplIG1hdHJpeCB0byBnaXZlbiBudW1iZXIgb2Ygcm93cyBhbmQgY29sdW1ucy4KICAqLwot
dm9pZCBld2tfdGlsZV9tYXRyaXhfcmVzaXplKEV3a19UaWxlX01hdHJpeCAqdG0sIHVuc2lnbmVk
IGxvbmcgY29scywgdW5zaWduZWQgbG9uZyByb3dzKQordm9pZCBld2tfdGlsZV9tYXRyaXhfcmVz
aXplKEV3a19UaWxlX01hdHJpeCogdGlsZU1hdHJpeCwgdW5zaWduZWQgbG9uZyBjb2xzLCB1bnNp
Z25lZCBsb25nIHJvd3MpCiB7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4odG0pOwot
ICAgIGVpbmFfbWF0cml4c3BhcnNlX3NpemVfc2V0KHRtLT5tYXRyaXgsIHJvd3MsIGNvbHMpOwor
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHRpbGVNYXRyaXgpOworICAgIGVpbmFfbWF0
cml4c3BhcnNlX3NpemVfc2V0KHRpbGVNYXRyaXgtPm1hdHJpeCwgcm93cywgY29scyk7CiB9CiAK
IC8qKgpAQCAtMjQxLDIzICsyNDEsMjMgQEAgdm9pZCBld2tfdGlsZV9tYXRyaXhfcmVzaXplKEV3
a19UaWxlX01hdHJpeCAqdG0sIHVuc2lnbmVkIGxvbmcgY29scywgdW5zaWduZWQgbG8KICAqCiAg
KiBObyByZWZlcmVuY2UgaXMgdGFrZW4gdG8gdGhlIGNhY2hlLgogICovCi1Fd2tfVGlsZV9VbnVz
ZWRfQ2FjaGUgKmV3a190aWxlX21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KGNvbnN0IEV3a19UaWxl
X01hdHJpeCAqdG0pCitFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIGV3a190aWxlX21hdHJpeF91bnVz
ZWRfY2FjaGVfZ2V0KGNvbnN0IEV3a19UaWxlX01hdHJpeCogdGlsZU1hdHJpeCkKIHsKLSAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodG0sIDApOwotICAgIHJldHVybiB0bS0+dHVj
OworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh0aWxlTWF0cml4LCAwKTsKKyAg
ICByZXR1cm4gdGlsZU1hdHJpeC0+dHVjOwogfQogCiAvKioKICAqIEdldCB0aGUgZXhhY3QgdGls
ZSBmb3IgdGhlIGdpdmVuIHBvc2l0aW9uIGFuZCB6b29tLgogICoKLSAqIElmIHRoZSB0aWxlIHdh
cyB1bnVzZWQgdGhlbiBpdCdzIHJlbW92ZWQgZnJvbSB0aGUgY2FjaGUuCisgKiBJZiB0aGUgdGls
ZS53aWR0aGFzIHVudXNlZCB0aGVuIGl0J3MgcmVtb3ZlZCBmcm9tIHRoZSBjYWNoZS4KICAqCiAg
KiBBZnRlciB1c2FnZSwgcGxlYXNlIGdpdmUgaXQgYmFjayB1c2luZwogICogZXdrX3RpbGVfbWF0
cml4X3RpbGVfcHV0KCkuIElmIHlvdSBqdXN0IHdhbnQgdG8gY2hlY2sgaWYgaXQgZXhpc3RzLAog
ICogdGhlbiB1c2UgZXdrX3RpbGVfbWF0cml4X3RpbGVfZXhhY3RfZXhpc3RzKCkuCiAgKgotICog
QHBhcmFtIHRtIHRoZSB0aWxlIG1hdHJpeCB0byBnZXQgdGlsZSBmcm9tLgotICogQHBhcmFtIGNv
bCB0aGUgY29sdW1uIG51bWJlci4KKyAqIEBwYXJhbSB0aWxlTWF0cml4IHRoZSB0aWxlIG1hdHJp
eCB0byBnZXQgdGlsZSBmcm9tLgorICogQHBhcmFtIGNvbHVtbiB0aGUgY29sdW1uIG51bWJlci4K
ICAqIEBwYXJhbSByb3cgdGhlIHJvdyBudW1iZXIuCiAgKiBAcGFyYW0gem9vbSB0aGUgZXhhY3Qg
em9vbSB0byB1c2UuCiAgKgpAQCAtMjY4LDI5ICsyNjgsMjkgQEAgRXdrX1RpbGVfVW51c2VkX0Nh
Y2hlICpld2tfdGlsZV9tYXRyaXhfdW51c2VkX2NhY2hlX2dldChjb25zdCBFd2tfVGlsZV9NYXRy
aXggKnQKICAqCiAgKiBAc2VlIGV3a190aWxlX21hdHJpeF90aWxlX2V4YWN0X2dldCgpCiAgKi8K
LUV3a19UaWxlICpld2tfdGlsZV9tYXRyaXhfdGlsZV9leGFjdF9nZXQoRXdrX1RpbGVfTWF0cml4
ICp0bSwgdW5zaWduZWQgbG9uZyBjb2wsIHVuc2lnbmVkIGxvbmcgcm93LCBmbG9hdCB6b29tKQor
RXdrX1RpbGUqIGV3a190aWxlX21hdHJpeF90aWxlX2V4YWN0X2dldChFd2tfVGlsZV9NYXRyaXgq
IHRpbGVNYXRyaXgsIHVuc2lnbmVkIGxvbmcgY29sdW1uLCB1bnNpZ25lZCBsb25nIHJvdywgZmxv
YXQgem9vbSkKIHsKLSAgICBFd2tfVGlsZSogdCA9IHN0YXRpY19jYXN0PEV3a19UaWxlKj4oZWlu
YV9tYXRyaXhzcGFyc2VfZGF0YV9pZHhfZ2V0KHRtLT5tYXRyaXgsIHJvdywgY29sKSk7Ci0gICAg
aWYgKCF0KQorICAgIEV3a19UaWxlKiB0aWxlID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGUqPihlaW5h
X21hdHJpeHNwYXJzZV9kYXRhX2lkeF9nZXQodGlsZU1hdHJpeC0+bWF0cml4LCByb3csIGNvbHVt
bikpOworICAgIGlmICghdGlsZSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBpZiAodC0+em9v
bSA9PSB6b29tKQorICAgIGlmICh0aWxlLT56b29tID09IHpvb20pCiAgICAgICAgIGdvdG8gZW5k
OwogCi0gIGVuZDoKLSAgICBpZiAoIXQtPnZpc2libGUpIHsKLSAgICAgICAgaWYgKCFld2tfdGls
ZV91bnVzZWRfY2FjaGVfdGlsZV9nZXQodG0tPnR1YywgdCkpCitlbmQ6CisgICAgaWYgKCF0aWxl
LT52aXNpYmxlKSB7CisgICAgICAgIGlmICghZXdrX3RpbGVfdW51c2VkX2NhY2hlX3RpbGVfZ2V0
KHRpbGVNYXRyaXgtPnR1YywgdGlsZSkpCiAgICAgICAgICAgICBXUk4oIkV3a19UaWxlIHdhcyB1
bnVzZWQgYnV0IG5vdCBpbiBjYWNoZT8gYnVnISIpOwogICAgIH0KIAotICAgIHJldHVybiB0Owor
ICAgIHJldHVybiB0aWxlOwogfQogCiAvKioKICAqIENoZWNrcyBpZiB0aWxlIG9mIGdpdmVuIHpv
b20gZXhpc3RzIGluIG1hdHJpeC4KICAqCi0gKiBAcGFyYW0gdG0gdGhlIHRpbGUgbWF0cml4IHRv
IGNoZWNrIHRpbGUgZXhpc3RlbmNlLgotICogQHBhcmFtIGNvbCB0aGUgY29sdW1uIG51bWJlci4K
KyAqIEBwYXJhbSB0aWxlTWF0cml4IHRoZSB0aWxlIG1hdHJpeCB0byBjaGVjayB0aWxlIGV4aXN0
ZW5jZS4KKyAqIEBwYXJhbSBjb2x1bW4gdGhlIGNvbHVtbiBudW1iZXIuCiAgKiBAcGFyYW0gcm93
IHRoZSByb3cgbnVtYmVyLgogICogQHBhcmFtIHpvb20gdGhlIGV4YWN0IHpvb20gdG8gcXVlcnku
CiAgKgpAQCAtMjk4LDkgKzI5OCw5IEBAIEV3a19UaWxlICpld2tfdGlsZV9tYXRyaXhfdGlsZV9l
eGFjdF9nZXQoRXdrX1RpbGVfTWF0cml4ICp0bSwgdW5zaWduZWQgbG9uZyBjb2wsCiAgKgogICog
QHNlZSBld2tfdGlsZV9tYXRyaXhfdGlsZV9leGFjdF9nZXQoKQogICovCi1FaW5hX0Jvb2wgZXdr
X3RpbGVfbWF0cml4X3RpbGVfZXhhY3RfZXhpc3RzKEV3a19UaWxlX01hdHJpeCAqdG0sIHVuc2ln
bmVkIGxvbmcgY29sLCB1bnNpZ25lZCBsb25nIHJvdywgZmxvYXQgem9vbSkKK0VpbmFfQm9vbCBl
d2tfdGlsZV9tYXRyaXhfdGlsZV9leGFjdF9leGlzdHMoRXdrX1RpbGVfTWF0cml4KiB0aWxlTWF0
cml4LCB1bnNpZ25lZCBsb25nIGNvbHVtbiwgdW5zaWduZWQgbG9uZyByb3csIGZsb2F0IHpvb20p
CiB7Ci0gICAgaWYgKCFlaW5hX21hdHJpeHNwYXJzZV9kYXRhX2lkeF9nZXQodG0tPm1hdHJpeCwg
cm93LCBjb2wpKQorICAgIGlmICghZWluYV9tYXRyaXhzcGFyc2VfZGF0YV9pZHhfZ2V0KHRpbGVN
YXRyaXgtPm1hdHJpeCwgcm93LCBjb2x1bW4pKQogICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsK
IAogICAgIHJldHVybiBFSU5BX1RSVUU7CkBAIC0zMTMsNTAgKzMxMyw1MCBAQCBFaW5hX0Jvb2wg
ZXdrX3RpbGVfbWF0cml4X3RpbGVfZXhhY3RfZXhpc3RzKEV3a19UaWxlX01hdHJpeCAqdG0sIHVu
c2lnbmVkIGxvbmcgYwogICogb2YgdW51c2VkIHRpbGVzLiBBZnRlciBpdCBpcyB1c2VkIG9uZSBz
aG91bGQgY2FsbAogICogZXdrX3RpbGVfbWF0cml4X3RpbGVfcHV0KCkgdG8gZ2l2ZSBpdCBiYWNr
IHRvIG1hdHJpeC4KICAqCi0gKiBAcGFyYW0gdG0gdGhlIHRpbGUgbWF0cml4IHRvIGNyZWF0ZSB0
aWxlIG9uLgotICogQHBhcmFtIGNvbCB0aGUgY29sdW1uIG51bWJlci4KKyAqIEBwYXJhbSB0aWxl
TWF0cml4IHRoZSB0aWxlIG1hdHJpeCB0byBjcmVhdGUgdGlsZSBvbi4KKyAqIEBwYXJhbSBjb2x1
bW4gdGhlIGNvbHVtbiBudW1iZXIuCiAgKiBAcGFyYW0gcm93IHRoZSByb3cgbnVtYmVyLgogICog
QHBhcmFtIHpvb20gdGhlIGxldmVsIHRvIGNyZWF0ZSB0aWxlLCB1c2VkIHRvIGRldGVybWluZSB0
aWxlIHNpemUuCiAgKi8KLUV3a19UaWxlICpld2tfdGlsZV9tYXRyaXhfdGlsZV9uZXcoRXdrX1Rp
bGVfTWF0cml4ICp0bSwgRXZhcyAqZXZhcywgdW5zaWduZWQgbG9uZyBjb2wsIHVuc2lnbmVkIGxv
bmcgcm93LCBmbG9hdCB6b29tKQorRXdrX1RpbGUqIGV3a190aWxlX21hdHJpeF90aWxlX25ldyhF
d2tfVGlsZV9NYXRyaXgqIHRpbGVNYXRyaXgsIEV2YXMqIGNhbnZhcywgdW5zaWduZWQgbG9uZyBj
b2x1bW4sIHVuc2lnbmVkIGxvbmcgcm93LCBmbG9hdCB6b29tKQogewogICAgIEV2YXNfQ29vcmQg
dHcsIHRoOwotICAgIEV3a19UaWxlICp0OworICAgIEV3a19UaWxlKiB0aWxlOwogCi0gICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHRtLCAwKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTl9WQUwodGlsZU1hdHJpeCwgMCk7CiAgICAgRUlOQV9TQUZFVFlfT05fRkFMU0Vf
UkVUVVJOX1ZBTCh6b29tID4gMC4wLCAwKTsKIAotICAgIHR3ID0gdG0tPnRpbGUudzsKLSAgICB0
aCA9IHRtLT50aWxlLmg7CisgICAgdHcgPSB0aWxlTWF0cml4LT50aWxlLndpZHRoOworICAgIHRo
ID0gdGlsZU1hdHJpeC0+dGlsZS5oZWlnaHQ7CiAKLSAgICB0ID0gZXdrX3RpbGVfbmV3KGV2YXMs
IHR3LCB0aCwgem9vbSwgdG0tPmNzcGFjZSk7Ci0gICAgaWYgKCF0KSB7Ci0gICAgICAgIEVSUigi
Y291bGQgbm90IGNyZWF0ZSB0aWxlICVkeCVkIGF0ICVmLCBjc3BhY2U9JWQiLCB0dywgdGgsIChk
b3VibGUpem9vbSwgdG0tPmNzcGFjZSk7CisgICAgdGlsZSA9IGV3a190aWxlX25ldyhjYW52YXMs
IHR3LCB0aCwgem9vbSwgdGlsZU1hdHJpeC0+Y3NwYWNlKTsKKyAgICBpZiAoIXRpbGUpIHsKKyAg
ICAgICAgRVJSKCJjb3VsZCBub3QgY3JlYXRlIHRpbGUgJWR4JWQgYXQgJWYsIGNzcGFjZT0lZCIs
IHR3LCB0aCwgKGRvdWJsZSl6b29tLCB0aWxlTWF0cml4LT5jc3BhY2UpOwogICAgICAgICByZXR1
cm4gMDsKICAgICB9CiAKLSAgICBpZiAoIWVpbmFfbWF0cml4c3BhcnNlX2RhdGFfaWR4X3NldCh0
bS0+bWF0cml4LCByb3csIGNvbCwgdCkpIHsKKyAgICBpZiAoIWVpbmFfbWF0cml4c3BhcnNlX2Rh
dGFfaWR4X3NldCh0aWxlTWF0cml4LT5tYXRyaXgsIHJvdywgY29sdW1uLCB0aWxlKSkgewogICAg
ICAgICBFUlIoImNvdWxkIG5vdCBzZXQgbWF0cml4IGNlbGwsIHJvdy9jb2wgb3V0c2lkZSBtYXRy
aXggZGltZW5zaW9ucyEiKTsKLSAgICAgICAgZXdrX3RpbGVfZnJlZSh0KTsKKyAgICAgICAgZXdr
X3RpbGVfZnJlZSh0aWxlKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgdC0+Y29s
ID0gY29sOwotICAgIHQtPnJvdyA9IHJvdzsKLSAgICB0LT54ID0gY29sICogdHc7Ci0gICAgdC0+
eSA9IHJvdyAqIHRoOworICAgIHRpbGUtPmNvbCA9IGNvbHVtbjsKKyAgICB0aWxlLT5yb3cgPSBy
b3c7CisgICAgdGlsZS0+eCA9IGNvbHVtbiAqIHR3OworICAgIHRpbGUtPnkgPSByb3cgKiB0aDsK
IAotICAgIGNhaXJvX3RyYW5zbGF0ZSh0LT5jYWlybywgLXQtPngsIC10LT55KTsKKyAgICBjYWly
b190cmFuc2xhdGUodGlsZS0+Y2Fpcm8sIC10aWxlLT54LCAtdGlsZS0+eSk7CiAKLSAgICB0LT5z
dGF0cy5mdWxsX3VwZGF0ZSA9IEVJTkFfVFJVRTsKLSAgICB0bS0+dXBkYXRlcyA9IGVpbmFfbGlz
dF9hcHBlbmQodG0tPnVwZGF0ZXMsIHQpOworICAgIHRpbGUtPnN0YXRzLmZ1bGxfdXBkYXRlID0g
RUlOQV9UUlVFOworICAgIHRpbGVNYXRyaXgtPnVwZGF0ZXMgPSBlaW5hX2xpc3RfYXBwZW5kKHRp
bGVNYXRyaXgtPnVwZGF0ZXMsIHRpbGUpOwogCiAjaWZkZWYgREVCVUdfTUVNX0xFQUtTCi0gICAg
dG0tPnN0YXRzLmJ5dGVzLmFsbG9jYXRlZCArPSB0LT5ieXRlczsKLSAgICB0bS0+c3RhdHMudGls
ZXMuYWxsb2NhdGVkKys7CisgICAgdGlsZU1hdHJpeC0+c3RhdHMuYnl0ZXMuYWxsb2NhdGVkICs9
IHRpbGUtPmJ5dGVzOworICAgIHRpbGVNYXRyaXgtPnN0YXRzLnRpbGVzLmFsbG9jYXRlZCsrOwog
I2VuZGlmCiAKLSAgICByZXR1cm4gdDsKKyAgICByZXR1cm4gdGlsZTsKIH0KIAogLyoqCkBAIC0z
NjYsMzIgKzM2NiwzMiBAQCBFd2tfVGlsZSAqZXdrX3RpbGVfbWF0cml4X3RpbGVfbmV3KEV3a19U
aWxlX01hdHJpeCAqdG0sIEV2YXMgKmV2YXMsIHVuc2lnbmVkIGxvbgogICogaXQgd2l0aCBld2tf
dGlsZV9tYXRyaXhfdGlsZV9leGFjdF9nZXQoKS4KICAqCiAgKiBBbnkgcHJldmlvdXMgcmVmZXJl
bmNlIHRvIHRpbGUgc2hvdWxkIGJlIHJlbGVhc2VkCi0gKiAoZXdrX3RpbGVfaGlkZSgpKSBiZWZv
cmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLCBzbyBpdCB3aWxsCisgKiAoZXdrX3RpbGUuaGVpZ2h0
aWRlKCkpIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24sIHNvIGl0IHdpbGwKICAqIGJlIGtu
b3duIGlmIGl0IGlzIG5vdCB2aXNpYmlsZSBhbnltb3JlIGFuZCB0aHVzIGNhbiBiZSBwdXQgaW50
byB0aGUKICAqIHVudXNlZCBjYWNoZS4KICAqCi0gKiBAcGFyYW0gdG0gdGhlIHRpbGUgbWF0cml4
IHRvIHJldHVybiB0aWxlIHRvLgorICogQHBhcmFtIHRpbGVNYXRyaXggdGhlIHRpbGUgbWF0cml4
IHRvIHJldHVybiB0aWxlIHRvLgogICogQHBhcmFtIHQgdGhlIHRpbGUgaW5zdGFuY2UgdG8gcmV0
dXJuLCBtdXN0IEBiIG5vdCBiZSBAYyAwLgotICogQHBhcmFtIGxhc3RfdXNlZCB0aW1lIGluIHdo
aWNoIHRpbGUgd2FzIGxhc3QgdXNlZC4KKyAqIEBwYXJhbSBsYXN0X3VzZWQgdGltZSBpbiB3aGlj
aCB0aWxlLndpZHRoYXMgbGFzdCB1c2VkLgogICoKICAqIEByZXR1cm4gI0VJTkFfVFJVRSBvbiBz
dWNjZXNzIG9yICNFSU5BX0ZBTFNFIG9uIGZhaWx1cmUuCiAgKi8KLUVpbmFfQm9vbCBld2tfdGls
ZV9tYXRyaXhfdGlsZV9wdXQoRXdrX1RpbGVfTWF0cml4ICp0bSwgRXdrX1RpbGUgKnQsIGRvdWJs
ZSBsYXN0X3VzZWQpCitFaW5hX0Jvb2wgZXdrX3RpbGVfbWF0cml4X3RpbGVfcHV0KEV3a19UaWxl
X01hdHJpeCogdGlsZU1hdHJpeCwgRXdrX1RpbGUqIHRpbGUsIGRvdWJsZSBsYXN0X3VzZWQpCiB7
Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHRtLCBFSU5BX0ZBTFNFKTsKLSAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodCwgRUlOQV9GQUxTRSk7CisgICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHRpbGVNYXRyaXgsIEVJTkFfRkFMU0UpOworICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh0aWxlLCBFSU5BX0ZBTFNFKTsKIAotICAg
IGlmICh0LT52aXNpYmxlKQorICAgIGlmICh0aWxlLT52aXNpYmxlKQogICAgICAgICByZXR1cm4g
RUlOQV9UUlVFOwogCi0gICAgdC0+c3RhdHMubGFzdF91c2VkID0gbGFzdF91c2VkOwotICAgIHJl
dHVybiBld2tfdGlsZV91bnVzZWRfY2FjaGVfdGlsZV9wdXQodG0tPnR1YywgdCwgX2V3a190aWxl
X21hdHJpeF90aWxlX2ZyZWUsIHRtKTsKKyAgICB0aWxlLT5zdGF0cy5sYXN0X3VzZWQgPSBsYXN0
X3VzZWQ7CisgICAgcmV0dXJuIGV3a190aWxlX3VudXNlZF9jYWNoZV90aWxlX3B1dCh0aWxlTWF0
cml4LT50dWMsIHRpbGUsIF9ld2tfdGlsZV9tYXRyaXhfdGlsZV9mcmVlLCB0aWxlTWF0cml4KTsK
IH0KIAotRWluYV9Cb29sIGV3a190aWxlX21hdHJpeF90aWxlX3VwZGF0ZShFd2tfVGlsZV9NYXRy
aXggKnRtLCB1bnNpZ25lZCBsb25nIGNvbCwgdW5zaWduZWQgbG9uZyByb3csIGNvbnN0IEVpbmFf
UmVjdGFuZ2xlICp1cGRhdGUpCitFaW5hX0Jvb2wgZXdrX3RpbGVfbWF0cml4X3RpbGVfdXBkYXRl
KEV3a19UaWxlX01hdHJpeCogdGlsZU1hdHJpeCwgdW5zaWduZWQgbG9uZyBjb2wsIHVuc2lnbmVk
IGxvbmcgcm93LCBjb25zdCBFaW5hX1JlY3RhbmdsZSogdXBkYXRlKQogewogICAgIEVpbmFfUmVj
dGFuZ2xlIG5ld191cGRhdGU7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHRt
LCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodGlsZU1h
dHJpeCwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHVw
ZGF0ZSwgRUlOQV9GQUxTRSk7CiAKICAgICBtZW1jcHkoJm5ld191cGRhdGUsIHVwZGF0ZSwgc2l6
ZW9mKG5ld191cGRhdGUpKTsKQEAgLTQwMSw1OSArNDAxLDU5IEBAIEVpbmFfQm9vbCBld2tfdGls
ZV9tYXRyaXhfdGlsZV91cGRhdGUoRXdrX1RpbGVfTWF0cml4ICp0bSwgdW5zaWduZWQgbG9uZyBj
b2wsIHVuCiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwogICAgIH0KIAotICAgIGlmICh1cGRh
dGUtPnggKyB1cGRhdGUtPncgLSAxID49IHRtLT50aWxlLncpCi0gICAgICAgIG5ld191cGRhdGUu
dyA9IHRtLT50aWxlLncgLSB1cGRhdGUtPng7Ci0gICAgaWYgKHVwZGF0ZS0+eSArIHVwZGF0ZS0+
aCAtIDEgPj0gdG0tPnRpbGUuaCkKLSAgICAgICAgbmV3X3VwZGF0ZS5oID0gdG0tPnRpbGUuaCAt
IHVwZGF0ZS0+eTsKKyAgICBpZiAodXBkYXRlLT54ICsgdXBkYXRlLT53IC0gMSA+PSB0aWxlTWF0
cml4LT50aWxlLndpZHRoKQorICAgICAgICBuZXdfdXBkYXRlLncgPSB0aWxlTWF0cml4LT50aWxl
LndpZHRoIC0gdXBkYXRlLT54OworICAgIGlmICh1cGRhdGUtPnkgKyB1cGRhdGUtPmggLSAxID49
IHRpbGVNYXRyaXgtPnRpbGUuaGVpZ2h0KQorICAgICAgICBuZXdfdXBkYXRlLmggPSB0aWxlTWF0
cml4LT50aWxlLmhlaWdodCAtIHVwZGF0ZS0+eTsKIAotICAgIEV3a19UaWxlKiB0ID0gc3RhdGlj
X2Nhc3Q8RXdrX1RpbGUqPihlaW5hX21hdHJpeHNwYXJzZV9kYXRhX2lkeF9nZXQodG0tPm1hdHJp
eCwgcm93LCBjb2wpKTsKLSAgICBpZiAoIXQpCisgICAgRXdrX1RpbGUqIHRpbGUgPSBzdGF0aWNf
Y2FzdDxFd2tfVGlsZSo+KGVpbmFfbWF0cml4c3BhcnNlX2RhdGFfaWR4X2dldCh0aWxlTWF0cml4
LT5tYXRyaXgsIHJvdywgY29sKSk7CisgICAgaWYgKCF0aWxlKQogICAgICAgICByZXR1cm4gRUlO
QV9UUlVFOwogCi0gICAgaWYgKCF0LT51cGRhdGVzICYmICF0LT5zdGF0cy5mdWxsX3VwZGF0ZSkK
LSAgICAgICAgdG0tPnVwZGF0ZXMgPSBlaW5hX2xpc3RfYXBwZW5kKHRtLT51cGRhdGVzLCB0KTsK
LSAgICBld2tfdGlsZV91cGRhdGVfYXJlYSh0LCAmbmV3X3VwZGF0ZSk7CisgICAgaWYgKCF0aWxl
LT51cGRhdGVzICYmICF0aWxlLT5zdGF0cy5mdWxsX3VwZGF0ZSkKKyAgICAgICAgdGlsZU1hdHJp
eC0+dXBkYXRlcyA9IGVpbmFfbGlzdF9hcHBlbmQodGlsZU1hdHJpeC0+dXBkYXRlcywgdGlsZSk7
CisgICAgZXdrX3RpbGVfdXBkYXRlX2FyZWEodGlsZSwgJm5ld191cGRhdGUpOwogCiAgICAgcmV0
dXJuIEVJTkFfVFJVRTsKIH0KIAotRWluYV9Cb29sIGV3a190aWxlX21hdHJpeF90aWxlX3VwZGF0
ZV9mdWxsKEV3a19UaWxlX01hdHJpeCAqdG0sIHVuc2lnbmVkIGxvbmcgY29sLCB1bnNpZ25lZCBs
b25nIHJvdykKK0VpbmFfQm9vbCBld2tfdGlsZV9tYXRyaXhfdGlsZV91cGRhdGVfZnVsbChFd2tf
VGlsZV9NYXRyaXgqIHRpbGVNYXRyaXgsIHVuc2lnbmVkIGxvbmcgY29sdW1uLCB1bnNpZ25lZCBs
b25nIHJvdykKIHsKLSAgICBFaW5hX01hdHJpeHNwYXJzZV9DZWxsICpjZWxsOwotICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh0bSwgRUlOQV9GQUxTRSk7CisgICAgRWluYV9NYXRy
aXhzcGFyc2VfQ2VsbCogY2VsbDsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwo
dGlsZU1hdHJpeCwgRUlOQV9GQUxTRSk7CiAKLSAgICBpZiAoIWVpbmFfbWF0cml4c3BhcnNlX2Nl
bGxfaWR4X2dldCh0bS0+bWF0cml4LCByb3csIGNvbCwgJmNlbGwpKQorICAgIGlmICghZWluYV9t
YXRyaXhzcGFyc2VfY2VsbF9pZHhfZ2V0KHRpbGVNYXRyaXgtPm1hdHJpeCwgcm93LCBjb2x1bW4s
ICZjZWxsKSkKICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CiAKICAgICBpZiAoIWNlbGwpCiAg
ICAgICAgIHJldHVybiBFSU5BX1RSVUU7CiAKLSAgICBFd2tfVGlsZSogdCA9IHN0YXRpY19jYXN0
PEV3a19UaWxlKj4oZWluYV9tYXRyaXhzcGFyc2VfY2VsbF9kYXRhX2dldChjZWxsKSk7Ci0gICAg
aWYgKCF0KSB7CisgICAgRXdrX1RpbGUqIHRpbGUgPSBzdGF0aWNfY2FzdDxFd2tfVGlsZSo+KGVp
bmFfbWF0cml4c3BhcnNlX2NlbGxfZGF0YV9nZXQoY2VsbCkpOworICAgIGlmICghdGlsZSkgewog
ICAgICAgICBDUklUSUNBTCgibWF0cml4IGNlbGwgd2l0aCBubyB0aWxlISIpOwogICAgICAgICBy
ZXR1cm4gRUlOQV9UUlVFOwogICAgIH0KIAotICAgIGlmICghdC0+dXBkYXRlcyAmJiAhdC0+c3Rh
dHMuZnVsbF91cGRhdGUpCi0gICAgICAgIHRtLT51cGRhdGVzID0gZWluYV9saXN0X2FwcGVuZCh0
bS0+dXBkYXRlcywgdCk7Ci0gICAgZXdrX3RpbGVfdXBkYXRlX2Z1bGwodCk7CisgICAgaWYgKCF0
aWxlLT51cGRhdGVzICYmICF0aWxlLT5zdGF0cy5mdWxsX3VwZGF0ZSkKKyAgICAgICAgdGlsZU1h
dHJpeC0+dXBkYXRlcyA9IGVpbmFfbGlzdF9hcHBlbmQodGlsZU1hdHJpeC0+dXBkYXRlcywgdGls
ZSk7CisgICAgZXdrX3RpbGVfdXBkYXRlX2Z1bGwodGlsZSk7CiAKICAgICByZXR1cm4gRUlOQV9U
UlVFOwogfQogCi12b2lkIGV3a190aWxlX21hdHJpeF90aWxlX3VwZGF0ZXNfY2xlYXIoRXdrX1Rp
bGVfTWF0cml4ICp0bSwgRXdrX1RpbGUgKnQpCit2b2lkIGV3a190aWxlX21hdHJpeF90aWxlX3Vw
ZGF0ZXNfY2xlYXIoRXdrX1RpbGVfTWF0cml4KiB0aWxlTWF0cml4LCBFd2tfVGlsZSogdGlsZSkK
IHsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0bSk7Ci0gICAgaWYgKCF0LT51cGRh
dGVzICYmICF0LT5zdGF0cy5mdWxsX3VwZGF0ZSkKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTih0aWxlTWF0cml4KTsKKyAgICBpZiAoIXRpbGUtPnVwZGF0ZXMgJiYgIXRpbGUtPnN0YXRz
LmZ1bGxfdXBkYXRlKQogICAgICAgICByZXR1cm47Ci0gICAgZXdrX3RpbGVfdXBkYXRlc19jbGVh
cih0KTsKLSAgICB0bS0+dXBkYXRlcyA9IGVpbmFfbGlzdF9yZW1vdmUodG0tPnVwZGF0ZXMsIHQp
OworICAgIGV3a190aWxlX3VwZGF0ZXNfY2xlYXIodGlsZSk7CisgICAgdGlsZU1hdHJpeC0+dXBk
YXRlcyA9IGVpbmFfbGlzdF9yZW1vdmUodGlsZU1hdHJpeC0+dXBkYXRlcywgdGlsZSk7CiB9CiAK
LXN0YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxlX21hdHJpeF9zbGljZXJfc2V0dXAoRXdrX1RpbGVf
TWF0cml4ICp0bSwgY29uc3QgRWluYV9SZWN0YW5nbGUgKmFyZWEsIGZsb2F0IHpvb20sIEVpbmFf
VGlsZV9HcmlkX1NsaWNlciAqc2xpY2VyKQorc3RhdGljIEVpbmFfQm9vbCBfZXdrX3RpbGVfbWF0
cml4X3NsaWNlcl9zZXR1cChFd2tfVGlsZV9NYXRyaXgqIHRpbGVNYXRyaXgsIGNvbnN0IEVpbmFf
UmVjdGFuZ2xlKiBhcmVhLCBmbG9hdCB6b29tLCBFaW5hX1RpbGVfR3JpZF9TbGljZXIqIHNsaWNl
cikKIHsKICAgICB1bnNpZ25lZCBsb25nIHJvd3MsIGNvbHM7Ci0gICAgRXZhc19Db29yZCB4LCB5
LCB3LCBoLCB0dywgdGg7CisgICAgRXZhc19Db29yZCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCB0dywg
dGg7CiAKICAgICBpZiAoYXJlYS0+dyA8PSAwIHx8IGFyZWEtPmggPD0gMCkgewogICAgICAgICBX
Uk4oImludmFsaWQgYXJlYSByZWdpb246ICVkLCVkKyVkeCVkLiIsCkBAIC00NjMsMzcgKzQ2Mywz
NyBAQCBzdGF0aWMgRWluYV9Cb29sIF9ld2tfdGlsZV9tYXRyaXhfc2xpY2VyX3NldHVwKEV3a19U
aWxlX01hdHJpeCAqdG0sIGNvbnN0IEVpbmFfUgogCiAgICAgeCA9IGFyZWEtPng7CiAgICAgeSA9
IGFyZWEtPnk7Ci0gICAgdyA9IGFyZWEtPnc7Ci0gICAgaCA9IGFyZWEtPmg7CisgICAgd2lkdGgg
PSBhcmVhLT53OworICAgIGhlaWdodCA9IGFyZWEtPmg7CiAKLSAgICB0dyA9IHRtLT50aWxlLnc7
Ci0gICAgdGggPSB0bS0+dGlsZS5oOworICAgIHR3ID0gdGlsZU1hdHJpeC0+dGlsZS53aWR0aDsK
KyAgICB0aCA9IHRpbGVNYXRyaXgtPnRpbGUuaGVpZ2h0OwogCiAgICAgLy8gY3JvcHBpbmcgYXJl
YSByZWdpb24gdG8gZml0IG1hdHJpeAotICAgIGVpbmFfbWF0cml4c3BhcnNlX3NpemVfZ2V0KHRt
LT5tYXRyaXgsICZyb3dzLCAmY29scyk7CisgICAgZWluYV9tYXRyaXhzcGFyc2Vfc2l6ZV9nZXQo
dGlsZU1hdHJpeC0+bWF0cml4LCAmcm93cywgJmNvbHMpOwogICAgIGlmICh4IDwgMCkgewotICAg
ICAgICB3ICs9IHg7CisgICAgICAgIHdpZHRoICs9IHg7CiAgICAgICAgIHggPSAwOwogICAgIH0K
ICAgICBpZiAoeSA8IDApIHsKLSAgICAgICAgaCArPSB5OworICAgICAgICBoZWlnaHQgKz0geTsK
ICAgICAgICAgeSA9IDA7CiAgICAgfQogCi0gICAgaWYgKHkgKyBoIC0gMSA+IChsb25nKShyb3dz
ICogdGgpKQotICAgICAgICBoID0gcm93cyAqIHRoIC0geTsKLSAgICBpZiAoeCArIHcgLSAxID4g
KGxvbmcpKGNvbHMgKiB0dykpCi0gICAgICAgIHcgPSBjb2xzICogdHcgLSB4OworICAgIGlmICh5
ICsgaGVpZ2h0IC0gMSA+IChsb25nKShyb3dzICogdGgpKQorICAgICAgICBoZWlnaHQgPSByb3dz
ICogdGggLSB5OworICAgIGlmICh4ICsgd2lkdGggLSAxID4gKGxvbmcpKGNvbHMgKiB0dykpCisg
ICAgICAgIHdpZHRoID0gY29scyAqIHR3IC0geDsKIAotICAgIHJldHVybiBlaW5hX3RpbGVfZ3Jp
ZF9zbGljZXJfc2V0dXAoc2xpY2VyLCB4LCB5LCB3LCBoLCB0dywgdGgpOworICAgIHJldHVybiBl
aW5hX3RpbGVfZ3JpZF9zbGljZXJfc2V0dXAoc2xpY2VyLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCB0
dywgdGgpOwogfQogCiAKLUVpbmFfQm9vbCBld2tfdGlsZV9tYXRyaXhfdXBkYXRlKEV3a19UaWxl
X01hdHJpeCAqdG0sIGNvbnN0IEVpbmFfUmVjdGFuZ2xlICp1cGRhdGUsIGZsb2F0IHpvb20pCitF
aW5hX0Jvb2wgZXdrX3RpbGVfbWF0cml4X3VwZGF0ZShFd2tfVGlsZV9NYXRyaXgqIHRpbGVNYXRy
aXgsIGNvbnN0IEVpbmFfUmVjdGFuZ2xlKiB1cGRhdGUsIGZsb2F0IHpvb20pCiB7Ci0gICAgY29u
c3QgRWluYV9UaWxlX0dyaWRfSW5mbyAqaW5mbzsKKyAgICBjb25zdCBFaW5hX1RpbGVfR3JpZF9J
bmZvKiBpbmZvOwogICAgIEVpbmFfVGlsZV9HcmlkX1NsaWNlciBzbGljZXI7Ci0gICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHRtLCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTl9WQUwodGlsZU1hdHJpeCwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHVwZGF0ZSwgRUlOQV9GQUxTRSk7CiAKICAgICBpZiAo
dXBkYXRlLT53IDwgMSB8fCB1cGRhdGUtPmggPCAxKSB7CkBAIC01MDIsNyArNTAyLDcgQEAgRWlu
YV9Cb29sIGV3a190aWxlX21hdHJpeF91cGRhdGUoRXdrX1RpbGVfTWF0cml4ICp0bSwgY29uc3Qg
RWluYV9SZWN0YW5nbGUgKnVwZGEKICAgICAgICAgcmV0dXJuIEVJTkFfVFJVRTsKICAgICB9CiAK
LSAgICBpZiAoIV9ld2tfdGlsZV9tYXRyaXhfc2xpY2VyX3NldHVwKHRtLCB1cGRhdGUsIHpvb20s
ICZzbGljZXIpKSB7CisgICAgaWYgKCFfZXdrX3RpbGVfbWF0cml4X3NsaWNlcl9zZXR1cCh0aWxl
TWF0cml4LCB1cGRhdGUsIHpvb20sICZzbGljZXIpKSB7CiAgICAgICAgIEVSUigiQ291bGQgbm90
IHNldHVwIHNsaWNlciBmb3IgdXBkYXRlICVkLCVkKyVkeCVkIGF0IHpvb20gJWYiLAogICAgICAg
ICAgICAgdXBkYXRlLT54LCB1cGRhdGUtPnksIHVwZGF0ZS0+dywgdXBkYXRlLT5oLCB6b29tKTsK
ICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CkBAIC01MTMsNTkgKzUxMyw1OSBAQCBFaW5hX0Jv
b2wgZXdrX3RpbGVfbWF0cml4X3VwZGF0ZShFd2tfVGlsZV9NYXRyaXggKnRtLCBjb25zdCBFaW5h
X1JlY3RhbmdsZSAqdXBkYQogICAgICAgICBjb2wgPSBpbmZvLT5jb2w7CiAgICAgICAgIHJvdyA9
IGluZm8tPnJvdzsKIAotICAgICAgICBFd2tfVGlsZSogdCA9IHN0YXRpY19jYXN0PEV3a19UaWxl
Kj4oZWluYV9tYXRyaXhzcGFyc2VfZGF0YV9pZHhfZ2V0KHRtLT5tYXRyaXgsIHJvdywgY29sKSk7
Ci0gICAgICAgIGlmICghdCkKKyAgICAgICAgRXdrX1RpbGUqIHRpbGUgPSBzdGF0aWNfY2FzdDxF
d2tfVGlsZSo+KGVpbmFfbWF0cml4c3BhcnNlX2RhdGFfaWR4X2dldCh0aWxlTWF0cml4LT5tYXRy
aXgsIHJvdywgY29sKSk7CisgICAgICAgIGlmICghdGlsZSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwogCi0gICAgICAgIGlmICghdC0+dXBkYXRlcyAmJiAhdC0+c3RhdHMuZnVsbF91cGRhdGUpCi0g
ICAgICAgICAgICB0bS0+dXBkYXRlcyA9IGVpbmFfbGlzdF9hcHBlbmQodG0tPnVwZGF0ZXMsIHQp
OworICAgICAgICBpZiAoIXRpbGUtPnVwZGF0ZXMgJiYgIXRpbGUtPnN0YXRzLmZ1bGxfdXBkYXRl
KQorICAgICAgICAgICAgdGlsZU1hdHJpeC0+dXBkYXRlcyA9IGVpbmFfbGlzdF9hcHBlbmQodGls
ZU1hdHJpeC0+dXBkYXRlcywgdGlsZSk7CiAgICAgICAgIGlmIChpbmZvLT5mdWxsKQotICAgICAg
ICAgICAgZXdrX3RpbGVfdXBkYXRlX2Z1bGwodCk7CisgICAgICAgICAgICBld2tfdGlsZV91cGRh
dGVfZnVsbCh0aWxlKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgZXdrX3RpbGVfdXBkYXRl
X2FyZWEodCwgJmluZm8tPnJlY3QpOworICAgICAgICAgICAgZXdrX3RpbGVfdXBkYXRlX2FyZWEo
dGlsZSwgJmluZm8tPnJlY3QpOwogICAgIH0KIAogCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0K
IAotdm9pZCBld2tfdGlsZV9tYXRyaXhfdXBkYXRlc19wcm9jZXNzKEV3a19UaWxlX01hdHJpeCAq
dG0pCit2b2lkIGV3a190aWxlX21hdHJpeF91cGRhdGVzX3Byb2Nlc3MoRXdrX1RpbGVfTWF0cml4
KiB0aWxlTWF0cml4KQogewotICAgIEVpbmFfTGlzdCAqbCwgKmxfbmV4dDsKKyAgICBFaW5hX0xp
c3QqIGwsICogbF9uZXh0OwogICAgIHZvaWQqIGl0ZW07Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk4odG0pOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHRpbGVNYXRyaXgp
OwogCiAgICAgLy8gcHJvY2VzcyB1cGRhdGVzLCB1bmZsYWcgdGlsZXMKLSAgICBFSU5BX0xJU1Rf
Rk9SRUFDSF9TQUZFKHRtLT51cGRhdGVzLCBsLCBsX25leHQsIGl0ZW0pIHsKKyAgICBFSU5BX0xJ
U1RfRk9SRUFDSF9TQUZFKHRpbGVNYXRyaXgtPnVwZGF0ZXMsIGwsIGxfbmV4dCwgaXRlbSkgewog
ICAgICAgICBFd2tfVGlsZSogdGlsZSA9IHN0YXRpY19jYXN0PEV3a19UaWxlKj4oaXRlbSk7Ci0g
ICAgICAgIGV3a190aWxlX3VwZGF0ZXNfcHJvY2Vzcyh0aWxlLCB0bS0+cmVuZGVyLmNiLCB0bS0+
cmVuZGVyLmRhdGEpOworICAgICAgICBld2tfdGlsZV91cGRhdGVzX3Byb2Nlc3ModGlsZSwgdGls
ZU1hdHJpeC0+cmVuZGVyLmNiLCB0aWxlTWF0cml4LT5yZW5kZXIuZGF0YSk7CiAgICAgICAgIGlm
ICh0aWxlLT52aXNpYmxlKSB7CiAgICAgICAgICAgICBld2tfdGlsZV91cGRhdGVzX2NsZWFyKHRp
bGUpOwotICAgICAgICAgICAgdG0tPnVwZGF0ZXMgPSBlaW5hX2xpc3RfcmVtb3ZlX2xpc3QodG0t
PnVwZGF0ZXMsIGwpOworICAgICAgICAgICAgdGlsZU1hdHJpeC0+dXBkYXRlcyA9IGVpbmFfbGlz
dF9yZW1vdmVfbGlzdCh0aWxlTWF0cml4LT51cGRhdGVzLCBsKTsKICAgICAgICAgfQogICAgIH0K
IH0KIAotdm9pZCBld2tfdGlsZV9tYXRyaXhfdXBkYXRlc19jbGVhcihFd2tfVGlsZV9NYXRyaXgg
KnRtKQordm9pZCBld2tfdGlsZV9tYXRyaXhfdXBkYXRlc19jbGVhcihFd2tfVGlsZV9NYXRyaXgq
IHRpbGVNYXRyaXgpCiB7CiAgICAgdm9pZCogaXRlbTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTih0bSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4odGlsZU1hdHJpeCk7
CiAKLSAgICBFSU5BX0xJU1RfRlJFRSh0bS0+dXBkYXRlcywgaXRlbSkKKyAgICBFSU5BX0xJU1Rf
RlJFRSh0aWxlTWF0cml4LT51cGRhdGVzLCBpdGVtKQogICAgICAgICBld2tfdGlsZV91cGRhdGVz
X2NsZWFyKHN0YXRpY19jYXN0PEV3a19UaWxlKj4oaXRlbSkpOwotICAgIHRtLT51cGRhdGVzID0g
MDsKKyAgICB0aWxlTWF0cml4LT51cGRhdGVzID0gMDsKIH0KIAogLy8gcmVtb3ZlIG1lIGxhdGVy
IQotdm9pZCBld2tfdGlsZV9tYXRyaXhfZGJnKGNvbnN0IEV3a19UaWxlX01hdHJpeCAqdG0pCit2
b2lkIGV3a190aWxlX21hdHJpeF9kYmcoY29uc3QgRXdrX1RpbGVfTWF0cml4KiB0aWxlTWF0cml4
KQogewotICAgIEVpbmFfSXRlcmF0b3IgKml0ID0gZWluYV9tYXRyaXhzcGFyc2VfaXRlcmF0b3Jf
Y29tcGxldGVfbmV3KHRtLT5tYXRyaXgpOwotICAgIEVpbmFfTWF0cml4c3BhcnNlX0NlbGwgKmNl
bGw7CisgICAgRWluYV9JdGVyYXRvciogaXQgPSBlaW5hX21hdHJpeHNwYXJzZV9pdGVyYXRvcl9j
b21wbGV0ZV9uZXcodGlsZU1hdHJpeC0+bWF0cml4KTsKKyAgICBFaW5hX01hdHJpeHNwYXJzZV9D
ZWxsKiBjZWxsOwogICAgIEVpbmFfQm9vbCBsYXN0X2VtcHR5ID0gRUlOQV9GQUxTRTsKIAogI2lm
ZGVmIERFQlVHX01FTV9MRUFLUwotICAgIHByaW50ZigiRXdrX1RpbGUgTWF0cml4OiB0aWxlc1sr
JSJQUkl1NjQiLC0lIlBSSXU2NCI6JSJQUkl1NjQiXSAiCi0gICAgICAgICAgICJieXRlc1srJSJQ
Ukl1NjQiLC0lIlBSSXU2NCI6JSJQUkl1NjQiXVxuIiwKKyAgICBwcmludGYoIkV3a19UaWxlIE1h
dHJpeDogdGlsZXNbKyUiIFBSSXU2NCAiLC0lIiBQUkl1NjQgIjolIiBQUkl1NjQgIl0gIgorICAg
ICAgICAgICAiYnl0ZXNbKyUiIFBSSXU2NCAiLC0lIiBQUkl1NjQgIjolIiBQUkl1NjQgIl1cbiIs
CiAgICAgICAgICAgIHRtLT5zdGF0cy50aWxlcy5hbGxvY2F0ZWQsIHRtLT5zdGF0cy50aWxlcy5m
cmVlZCwKICAgICAgICAgICAgdG0tPnN0YXRzLnRpbGVzLmFsbG9jYXRlZCAtIHRtLT5zdGF0cy50
aWxlcy5mcmVlZCwKICAgICAgICAgICAgdG0tPnN0YXRzLmJ5dGVzLmFsbG9jYXRlZCwgdG0tPnN0
YXRzLmJ5dGVzLmZyZWVkLApAQCAtNTc4LDggKzU3OCw4IEBAIHZvaWQgZXdrX3RpbGVfbWF0cml4
X2RiZyhjb25zdCBFd2tfVGlsZV9NYXRyaXggKnRtKQogICAgICAgICB1bnNpZ25lZCBsb25nIHJv
dywgY29sOwogICAgICAgICBlaW5hX21hdHJpeHNwYXJzZV9jZWxsX3Bvc2l0aW9uX2dldChjZWxs
LCAmcm93LCAmY29sKTsKIAotICAgICAgICBFd2tfVGlsZSogdCA9IHN0YXRpY19jYXN0PEV3a19U
aWxlKj4oZWluYV9tYXRyaXhzcGFyc2VfY2VsbF9kYXRhX2dldChjZWxsKSk7Ci0gICAgICAgIGlm
ICghdCkgeworICAgICAgICBFd2tfVGlsZSogdGlsZSA9IHN0YXRpY19jYXN0PEV3a19UaWxlKj4o
ZWluYV9tYXRyaXhzcGFyc2VfY2VsbF9kYXRhX2dldChjZWxsKSk7CisgICAgICAgIGlmICghdGls
ZSkgewogICAgICAgICAgICAgaWYgKCFsYXN0X2VtcHR5KSB7CiAgICAgICAgICAgICAgICAgbGFz
dF9lbXB0eSA9IEVJTkFfVFJVRTsKICAgICAgICAgICAgICAgICBwcmludGYoIkVtcHR5OiIpOwpA
QCAtNTkwLDggKzU5MCw4IEBAIHZvaWQgZXdrX3RpbGVfbWF0cml4X2RiZyhjb25zdCBFd2tfVGls
ZV9NYXRyaXggKnRtKQogICAgICAgICAgICAgICAgIGxhc3RfZW1wdHkgPSBFSU5BX0ZBTFNFOwog
ICAgICAgICAgICAgICAgIHByaW50ZigiXG4iKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IHByaW50ZigiJTNsdSwlM2x1ICUxMHA6IiwgY29sLCByb3csIHQpOwotICAgICAgICAgICAgcHJp
bnRmKCIgWyUzbHUsJTNsdSArICVkeCVkIEAgJTAuM2ZdJWMiLCB0LT5jb2wsIHQtPnJvdywgdC0+
dywgdC0+aCwgdC0+em9vbSwgdC0+dmlzaWJsZSA/ICcqJzogJyAnKTsKKyAgICAgICAgICAgIHBy
aW50ZigiJTNsdSwlM2x1ICUxMHA6IiwgY29sLCByb3csIHRpbGUpOworICAgICAgICAgICAgcHJp
bnRmKCIgWyUzbHUsJTNsdSArICVkeCVkIEAgJTAuM2ZdJWMiLCB0aWxlLT5jb2wsIHRpbGUtPnJv
dywgdGlsZS0+d2lkdGgsIHRpbGUtPmhlaWdodCwgdGlsZS0+em9vbSwgdGlsZS0+dmlzaWJsZSA/
ICcqJyA6ICcgJyk7CiAgICAgICAgICAgICBwcmludGYoIlxuIik7CiAgICAgICAgIH0KICAgICB9
CkBAIC01OTksNyArNTk5LDcgQEAgdm9pZCBld2tfdGlsZV9tYXRyaXhfZGJnKGNvbnN0IEV3a19U
aWxlX01hdHJpeCAqdG0pCiAgICAgICAgIHByaW50ZigiXG4iKTsKICAgICBlaW5hX2l0ZXJhdG9y
X2ZyZWUoaXQpOwogCi0gICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2RiZyh0bS0+dHVjKTsKKyAg
ICBld2tfdGlsZV91bnVzZWRfY2FjaGVfZGJnKHRpbGVNYXRyaXgtPnR1Yyk7CiB9CiAKIC8qKgpA
QCAtNjExLDEyICs2MTEsMTIgQEAgdm9pZCBld2tfdGlsZV9tYXRyaXhfZGJnKGNvbnN0IEV3a19U
aWxlX01hdHJpeCAqdG0pCiAgKgogICogQHNlZSBld2tfdGlsZV9tYXRyaXhfdGhhdygpCiAgKi8K
LXZvaWQgZXdrX3RpbGVfbWF0cml4X2ZyZWV6ZShFd2tfVGlsZV9NYXRyaXggKnRtKQordm9pZCBl
d2tfdGlsZV9tYXRyaXhfZnJlZXplKEV3a19UaWxlX01hdHJpeCogdGlsZU1hdHJpeCkKIHsKLSAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0bSk7Ci0gICAgaWYgKCF0bS0+ZnJvemVuKQot
ICAgICAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfZnJlZXplKHRtLT50dWMpOwotICAgIHRtLT5m
cm96ZW4rKzsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0aWxlTWF0cml4KTsKKyAg
ICBpZiAoIXRpbGVNYXRyaXgtPmZyb3plbikKKyAgICAgICAgZXdrX3RpbGVfdW51c2VkX2NhY2hl
X2ZyZWV6ZSh0aWxlTWF0cml4LT50dWMpOworICAgIHRpbGVNYXRyaXgtPmZyb3plbisrOwogfQog
CiAvKioKQEAgLTYyNSwxNSArNjI1LDE1IEBAIHZvaWQgZXdrX3RpbGVfbWF0cml4X2ZyZWV6ZShF
d2tfVGlsZV9NYXRyaXggKnRtKQogICogSWYgdGhpcyBpcyB0aGUgbGFzdCBjb3VudGVycGFydCBv
ZiBmcmVlemUsIHRoZW4gbWFpbnRlbmFuY2UgdGFza3MKICAqIHdpbGwgcnVuIGltbWVkaWF0ZWx5
LgogICovCi12b2lkIGV3a190aWxlX21hdHJpeF90aGF3KEV3a19UaWxlX01hdHJpeCAqdG0pCit2
b2lkIGV3a190aWxlX21hdHJpeF90aGF3KEV3a19UaWxlX01hdHJpeCogdGlsZU1hdHJpeCkKIHsK
LSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0bSk7Ci0gICAgaWYgKCF0bS0+ZnJvemVu
KSB7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4odGlsZU1hdHJpeCk7CisgICAgaWYg
KCF0aWxlTWF0cml4LT5mcm96ZW4pIHsKICAgICAgICAgRVJSKCJ0aGF3aW5nIG1vcmUgdGhhbiBm
cmVlemluZyEiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHRtLT5mcm96ZW4tLTsK
LSAgICBpZiAoIXRtLT5mcm96ZW4pCi0gICAgICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV90aGF3
KHRtLT50dWMpOworICAgIHRpbGVNYXRyaXgtPmZyb3plbi0tOworICAgIGlmICghdGlsZU1hdHJp
eC0+ZnJvemVuKQorICAgICAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfdGhhdyh0aWxlTWF0cml4
LT50dWMpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a190aWxlZF9t
YXRyaXguaCBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfbWF0cml4LmgKaW5kZXgg
YzQzN2MzNy4uZDNkYzUxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a190
aWxlZF9tYXRyaXguaAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX21hdHJp
eC5oCkBAIC01Miw3ICs1Miw3IEBAIHZvaWQgZXdrX3RpbGVfbWF0cml4X3RoYXcoRXdrX1RpbGVf
TWF0cml4KiB0bSk7CiAvLyByZW1vdmUgbWUhCiB2b2lkIGV3a190aWxlX21hdHJpeF9kYmcoY29u
c3QgRXdrX1RpbGVfTWF0cml4KiB0bSk7CiB2b2lkIGV3a190aWxlX3VudXNlZF9jYWNoZV9kYmco
Y29uc3QgRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0dWMpOwotdm9pZCBld2tfdGlsZV9hY2NvdW50
aW5nX2RiZyh2b2lkKTsKK3ZvaWQgZXdrX3RpbGVfYWNjb3VudGluZ19kYmcoKTsKIAogCiAjZW5k
aWYgLy8gZXdrX3RpbGVkX21hdHJpeF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9l
d2svZXdrX3RpbGVkX21vZGVsLmNwcCBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRf
bW9kZWwuY3BwCmluZGV4IDYxNjg1NzIuLjU4ZWM1MjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvZWZsL2V3ay9ld2tfdGlsZWRfbW9kZWwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3
ay9ld2tfdGlsZWRfbW9kZWwuY3BwCkBAIC0zNiw3ICszNiw3IEBACiAjaW5jbHVkZSA8c3lzL3Rp
bWUuaD4KICNlbmRpZgogCi0jZGVmaW5lIElEWChjb2wsIHJvdywgcm93c3BhbikgKGNvbCArIChy
b3cgKiByb3dzcGFuKSkKKyNkZWZpbmUgSURYKGNvbCwgcm93LCByb3dzcGFuKSAoY29sICsgKHJv
d2lkdGggKiByb3dzcGFuKSkKIAogI2lmZGVmIERFQlVHX01FTV9MRUFLUwogc3RhdGljIHVpbnQ2
NF90IHRpbGVzX2FsbG9jYXRlZCA9IDA7CkBAIC01MywxNSArNTMsMTUgQEAgc3RydWN0IHRpbGVf
YWNjb3VudCB7CiB9OwogCiBzdGF0aWMgc2l6ZV90IGFjY291bnRpbmdfbGVuID0gMDsKLXN0YXRp
YyBzdHJ1Y3QgdGlsZV9hY2NvdW50ICphY2NvdW50aW5nID0gMDsKK3N0YXRpYyBzdHJ1Y3QgdGls
ZV9hY2NvdW50KiBhY2NvdW50aW5nID0gMDsKIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgdGlsZV9h
Y2NvdW50ICpfZXdrX3RpbGVfYWNjb3VudF9nZXQoY29uc3QgRXdrX1RpbGUgKnQpCitzdGF0aWMg
aW5saW5lIHN0cnVjdCB0aWxlX2FjY291bnQqIF9ld2tfdGlsZV9hY2NvdW50X2dldChjb25zdCBF
d2tfVGlsZSogdGlsZSkKIHsKLSAgICBzdHJ1Y3QgdGlsZV9hY2NvdW50ICphY2M7CisgICAgc3Ry
dWN0IHRpbGVfYWNjb3VudCogYWNjOwogICAgIHNpemVfdCBpOwogCiAgICAgZm9yIChpID0gMDsg
aSA8IGFjY291bnRpbmdfbGVuOyBpKyspIHsKLSAgICAgICAgaWYgKGFjY291bnRpbmdbaV0uc2l6
ZSA9PSB0LT53KQorICAgICAgICBpZiAoYWNjb3VudGluZ1tpXS5zaXplID09IHRpbGUtPndpZHRo
KQogICAgICAgICAgICAgcmV0dXJuIGFjY291bnRpbmcgKyBpOwogICAgIH0KIApAQCAtNjksNyAr
NjksNyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCB0aWxlX2FjY291bnQgKl9ld2tfdGlsZV9hY2Nv
dW50X2dldChjb25zdCBFd2tfVGlsZSAqdCkKICAgICBSRUFMTE9DX09SX09PTV9SRVQoYWNjb3Vu
dGluZywgaSwgMCk7CiAKICAgICBhY2MgPSBhY2NvdW50aW5nICsgYWNjb3VudGluZ19sZW47Ci0g
ICAgYWNjLT5zaXplID0gdC0+dzsKKyAgICBhY2MtPnNpemUgPSB0aWxlLT53aWR0aDsKICAgICBh
Y2MtPnRpbGVzLmFsbG9jYXRlZCA9IDA7CiAgICAgYWNjLT50aWxlcy5mcmVlZCA9IDA7CiAgICAg
YWNjLT5ieXRlcy5hbGxvY2F0ZWQgPSAwOwpAQCAtODAsNDAgKzgwLDQwIEBAIHN0YXRpYyBpbmxp
bmUgc3RydWN0IHRpbGVfYWNjb3VudCAqX2V3a190aWxlX2FjY291bnRfZ2V0KGNvbnN0IEV3a19U
aWxlICp0KQogICAgIHJldHVybiBhY2M7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3Rp
bGVfYWNjb3VudF9hbGxvY2F0ZWQoY29uc3QgRXdrX1RpbGUgKnQpCitzdGF0aWMgaW5saW5lIHZv
aWQgX2V3a190aWxlX2FjY291bnRfYWxsb2NhdGVkKGNvbnN0IEV3a19UaWxlKiB0aWxlKQogewot
ICAgIHN0cnVjdCB0aWxlX2FjY291bnQgKmFjYyA9IF9ld2tfdGlsZV9hY2NvdW50X2dldCh0KTsK
KyAgICBzdHJ1Y3QgdGlsZV9hY2NvdW50KiBhY2MgPSBfZXdrX3RpbGVfYWNjb3VudF9nZXQodGls
ZSk7CiAgICAgaWYgKCFhY2MpCiAgICAgICAgIHJldHVybjsKLSAgICBhY2MtPmJ5dGVzLmFsbG9j
YXRlZCArPSB0LT5ieXRlczsKKyAgICBhY2MtPmJ5dGVzLmFsbG9jYXRlZCArPSB0aWxlLT5ieXRl
czsKICAgICBhY2MtPnRpbGVzLmFsbG9jYXRlZCsrOwogCi0gICAgYnl0ZXNfYWxsb2NhdGVkICs9
IHQtPmJ5dGVzOworICAgIGJ5dGVzX2FsbG9jYXRlZCArPSB0aWxlLT5ieXRlczsKICAgICB0aWxl
c19hbGxvY2F0ZWQrKzsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZV9hY2NvdW50
X2ZyZWVkKGNvbnN0IEV3a19UaWxlICp0KQorc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZV9h
Y2NvdW50X2ZyZWVkKGNvbnN0IEV3a19UaWxlKiB0aWxlKQogewotICAgIHN0cnVjdCB0aWxlX2Fj
Y291bnQgKmFjYyA9IF9ld2tfdGlsZV9hY2NvdW50X2dldCh0KTsKKyAgICBzdHJ1Y3QgdGlsZV9h
Y2NvdW50KiBhY2MgPSBfZXdrX3RpbGVfYWNjb3VudF9nZXQodGlsZSk7CiAgICAgaWYgKCFhY2Mp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGFjYy0+Ynl0ZXMuZnJlZWQgKz0gdC0+Ynl0ZXM7Cisg
ICAgYWNjLT5ieXRlcy5mcmVlZCArPSB0aWxlLT5ieXRlczsKICAgICBhY2MtPnRpbGVzLmZyZWVk
Kys7CiAKLSAgICBieXRlc19mcmVlZCArPSB0LT5ieXRlczsKKyAgICBieXRlc19mcmVlZCArPSB0
aWxlLT5ieXRlczsKICAgICB0aWxlc19mcmVlZCsrOwogfQogCi12b2lkIGV3a190aWxlX2FjY291
bnRpbmdfZGJnKHZvaWQpCit2b2lkIGV3a190aWxlX2FjY291bnRpbmdfZGJnKCkKIHsKLSAgICBz
dHJ1Y3QgdGlsZV9hY2NvdW50ICphY2M7Ci0gICAgc3RydWN0IHRpbGVfYWNjb3VudCAqYWNjX2Vu
ZDsKKyAgICBzdHJ1Y3QgdGlsZV9hY2NvdW50KiBhY2M7CisgICAgc3RydWN0IHRpbGVfYWNjb3Vu
dCogYWNjX2VuZDsKIAotICAgIHByaW50ZigiVElMRSBCQUxBTkNFOiB0aWxlc1srJSJQUkl1NjQi
LC0lIlBSSXU2NCI6JSJQUkl1NjQiXSAiCi0gICAgICAgICAgICJieXRlc1srJSJQUkl1NjQiLC0l
IlBSSXU2NCI6JSJQUkl1NjQiXVxuIiwKLSAgICAgICAgICAgIHRpbGVzX2FsbG9jYXRlZCwgdGls
ZXNfZnJlZWQsIHRpbGVzX2FsbG9jYXRlZCAtIHRpbGVzX2ZyZWVkLAotICAgICAgICAgICAgYnl0
ZXNfYWxsb2NhdGVkLCBieXRlc19mcmVlZCwgYnl0ZXNfYWxsb2NhdGVkIC0gYnl0ZXNfZnJlZWQp
OworICAgIHByaW50ZigiVElMRSBCQUxBTkNFOiB0aWxlc1srJSIgUFJJdTY0ICIsLSUiIFBSSXU2
NCAiOiUiIFBSSXU2NCAiXSAiCisgICAgICAgICAgICJieXRlc1srJSIgUFJJdTY0ICIsLSUiIFBS
SXU2NCAiOiUiIFBSSXU2NCAiXVxuIiwKKyAgICAgICAgICAgdGlsZXNfYWxsb2NhdGVkLCB0aWxl
c19mcmVlZCwgdGlsZXNfYWxsb2NhdGVkIC0gdGlsZXNfZnJlZWQsCisgICAgICAgICAgIGJ5dGVz
X2FsbG9jYXRlZCwgYnl0ZXNfZnJlZWQsIGJ5dGVzX2FsbG9jYXRlZCAtIGJ5dGVzX2ZyZWVkKTsK
IAogICAgIGlmICghYWNjb3VudGluZ19sZW4pCiAgICAgICAgIHJldHVybjsKQEAgLTEyNyw4ICsx
MjcsOCBAQCB2b2lkIGV3a190aWxlX2FjY291bnRpbmdfZGJnKHZvaWQpCiAgICAgICAgIHRpbGVz
ID0gYWNjLT50aWxlcy5hbGxvY2F0ZWQgLSBhY2MtPnRpbGVzLmZyZWVkOwogICAgICAgICBieXRl
cyA9IGFjYy0+Ynl0ZXMuYWxsb2NhdGVkIC0gYWNjLT5ieXRlcy5mcmVlZDsKIAotICAgICAgICBw
cmludGYoIiAgICU0ZDogdGlsZXNbKyU0IlBSSXU2NCIsLSU0IlBSSXU2NCI6JTQiUFJJdTY0Il0g
IgotICAgICAgICAgICAgICAgImJ5dGVzWyslOCJQUkl1NjQiLC0lOCJQUkl1NjQiOiU4IlBSSXU2
NCJdJXNcbiIsCisgICAgICAgIHByaW50ZigiICAgJTRkOiB0aWxlc1srJTQiIFBSSXU2NCAiLC0l
NCIgUFJJdTY0ICI6JTQiIFBSSXU2NCAiXSAiCisgICAgICAgICAgICAgICAiYnl0ZXNbKyU4IiBQ
Ukl1NjQgIiwtJTgiIFBSSXU2NCAiOiU4IiBQUkl1NjQgIl0lc1xuIiwKICAgICAgICAgICAgICAg
IGFjYy0+c2l6ZSwKICAgICAgICAgICAgICAgIGFjYy0+dGlsZXMuYWxsb2NhdGVkLCBhY2MtPnRp
bGVzLmZyZWVkLCB0aWxlcywKICAgICAgICAgICAgICAgIGFjYy0+Ynl0ZXMuYWxsb2NhdGVkLCBh
Y2MtPmJ5dGVzLmZyZWVkLCBieXRlcywKQEAgLTEzOCwyNSArMTM4LDI1IEBAIHZvaWQgZXdrX3Rp
bGVfYWNjb3VudGluZ19kYmcodm9pZCkKIH0KICNlbHNlCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBf
ZXdrX3RpbGVfYWNjb3VudF9hbGxvY2F0ZWQoY29uc3QgRXdrX1RpbGUgKnQpIHsgfQotc3RhdGlj
IGlubGluZSB2b2lkIF9ld2tfdGlsZV9hY2NvdW50X2ZyZWVkKGNvbnN0IEV3a19UaWxlICp0KSB7
IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVfYWNjb3VudF9hbGxvY2F0ZWQoY29uc3Qg
RXdrX1RpbGUqIHRpbGUpIHsgfQorc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZV9hY2NvdW50
X2ZyZWVkKGNvbnN0IEV3a19UaWxlKiB0aWxlKSB7IH0KIAotdm9pZCBld2tfdGlsZV9hY2NvdW50
aW5nX2RiZyh2b2lkKQordm9pZCBld2tfdGlsZV9hY2NvdW50aW5nX2RiZygpCiB7CiAgICAgcHJp
bnRmKCJjb21waWxlIHdlYmtpdCB3aXRoIERFQlVHX01FTV9MRUFLUyBkZWZpbmVkIVxuIik7CiB9
CiAjZW5kaWYKIAotc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZV9wYWludF9yZ2I4ODgoRXdr
X1RpbGUgKnQsIHVpbnQ4X3QgciwgdWludDhfdCBnLCB1aW50OF90IGIpCitzdGF0aWMgaW5saW5l
IHZvaWQgX2V3a190aWxlX3BhaW50X3JnYjg4OChFd2tfVGlsZSogdGlsZSwgdWludDhfdCByLCB1
aW50OF90IGcsIHVpbnQ4X3QgYikKIHsKLSAgICB1aW50MzJfdCAqZHN0MzIsICpkc3QzMl9lbmQs
IGMxOwotICAgIHVpbnQ2NF90ICpkc3Q2NCwgKmRzdDY0X2VuZCwgYzI7CisgICAgdWludDMyX3Qq
IGRzdDMyLCAqIGRzdDMyX2VuZCwgYzE7CisgICAgdWludDY0X3QqIGRzdDY0LCAqIGRzdDY0X2Vu
ZCwgYzI7CiAKICAgICBjMSA9IDB4ZmYwMDAwMDAgfCAoKHVpbnQzMl90KXIgPDwgMTYpIHwgKCh1
aW50MzJfdClnIDw8IDgpIHwgYjsKICAgICBjMiA9ICgodWludDY0X3QpYzEgPDwgMzIpIHwgYzE7
CiAKLSAgICBkc3Q2NCA9ICh1aW50NjRfdCAqKXQtPnBpeGVsczsKLSAgICBkc3Q2NF9lbmQgPSBk
c3Q2NCArICgodC0+Ynl0ZXMgLyA4KSAmIH43KTsKKyAgICBkc3Q2NCA9ICh1aW50NjRfdCopdGls
ZS0+cGl4ZWxzOworICAgIGRzdDY0X2VuZCA9IGRzdDY0ICsgKCh0aWxlLT5ieXRlcyAvIDgpICYg
fjcpOwogICAgIGZvciAoOyBkc3Q2NCA8IGRzdDY0X2VuZDsgZHN0NjQgKz0gOCkgewogICAgICAg
ICAvKiBUT0RPOiBBUk0gYWRkIHBsZCBvciBORU9OIGluc3RydWN0aW9ucyAqLwogICAgICAgICBk
c3Q2NFswXSA9IGMyOwpAQCAtMTY5LDI2ICsxNjksMjYgQEAgc3RhdGljIGlubGluZSB2b2lkIF9l
d2tfdGlsZV9wYWludF9yZ2I4ODgoRXdrX1RpbGUgKnQsIHVpbnQ4X3QgciwgdWludDhfdCBnLCB1
aW4KICAgICAgICAgZHN0NjRbN10gPSBjMjsKICAgICB9CiAKLSAgICBkc3QzMiA9ICh1aW50MzJf
dCAqKWRzdDY0X2VuZDsKLSAgICBkc3QzMl9lbmQgPSAodWludDMyX3QgKikodC0+cGl4ZWxzICsg
dC0+Ynl0ZXMpOworICAgIGRzdDMyID0gKHVpbnQzMl90Kilkc3Q2NF9lbmQ7CisgICAgZHN0MzJf
ZW5kID0gKHVpbnQzMl90KikodGlsZS0+cGl4ZWxzICsgdGlsZS0+Ynl0ZXMpOwogICAgIGZvciAo
OyBkc3QzMiA8IGRzdDMyX2VuZDsgZHN0MzIrKykKICAgICAgICAgKmRzdDMyID0gYzE7CiB9CiAK
LXN0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVfcGFpbnRfcmdiNTY1KEV3a19UaWxlICp0LCB1
aW50OF90IHIsIHVpbnQ4X3QgZywgdWludDhfdCBiKQorc3RhdGljIGlubGluZSB2b2lkIF9ld2tf
dGlsZV9wYWludF9yZ2I1NjUoRXdrX1RpbGUqIHRpbGUsIHVpbnQ4X3QgcmVkLCB1aW50OF90IGdy
ZWVuLCB1aW50OF90IGJsdWUpCiB7Ci0gICAgdWludDE2X3QgKmRzdDE2LCAqZHN0MTZfZW5kLCBj
MTsKLSAgICB1aW50NjRfdCAqZHN0NjQsICpkc3Q2NF9lbmQsIGMyOworICAgIHVpbnQxNl90KiBk
c3QxNiwgKiBkc3QxNl9lbmQsIGMxOworICAgIHVpbnQ2NF90KiBkc3Q2NCwgKiBkc3Q2NF9lbmQs
IGMyOwogCi0gICAgYzEgPSAoKCgociA+PiAzKSAmIDB4MWYpIDw8IDExKSB8Ci0gICAgICAgICAg
KCgoZyA+PiAyKSAmIDB4M2YpIDw8IDUpIHwKLSAgICAgICAgICAoKGIgPj4gMykgJiAweDFmKSk7
CisgICAgYzEgPSAoKCgocmVkID4+IDMpICYgMHgxZikgPDwgMTEpIHwKKyAgICAgICAgICAoKChn
cmVlbiA+PiAyKSAmIDB4M2YpIDw8IDUpIHwKKyAgICAgICAgICAoKGJsdWUgPj4gMykgJiAweDFm
KSk7CiAKICAgICBjMiA9ICgoKHVpbnQ2NF90KWMxIDw8IDQ4KSB8ICgodWludDY0X3QpYzEgPDwg
MzIpIHwKICAgICAgICAgICAoKHVpbnQ2NF90KWMxIDw8IDE2KSB8IGMxKTsKIAotICAgIGRzdDY0
ID0gKHVpbnQ2NF90ICopdC0+cGl4ZWxzOwotICAgIGRzdDY0X2VuZCA9IGRzdDY0ICsgKCh0LT5i
eXRlcyAvIDgpICYgfjcpOworICAgIGRzdDY0ID0gKHVpbnQ2NF90Kil0aWxlLT5waXhlbHM7Cisg
ICAgZHN0NjRfZW5kID0gZHN0NjQgKyAoKHRpbGUtPmJ5dGVzIC8gOCkgJiB+Nyk7CiAgICAgZm9y
ICg7IGRzdDY0IDwgZHN0NjRfZW5kOyBkc3Q2NCArPSA4KSB7CiAgICAgICAgIC8qIFRPRE86IEFS
TSBhZGQgcGxkIG9yIE5FT04gaW5zdHJ1Y3Rpb25zICovCiAgICAgICAgIGRzdDY0WzBdID0gYzI7
CkBAIC0yMDEsMjAgKzIwMSwyMCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlX3BhaW50
X3JnYjU2NShFd2tfVGlsZSAqdCwgdWludDhfdCByLCB1aW50OF90IGcsIHVpbgogICAgICAgICBk
c3Q2NFs3XSA9IGMyOwogICAgIH0KIAotICAgIGRzdDE2ID0gKHVpbnQxNl90ICopZHN0MTZfZW5k
OwotICAgIGRzdDE2X2VuZCA9ICh1aW50MTZfdCAqKSh0LT5waXhlbHMgKyB0LT5ieXRlcyk7Cisg
ICAgZHN0MTYgPSAodWludDE2X3QqKWRzdDE2X2VuZDsKKyAgICBkc3QxNl9lbmQgPSAodWludDE2
X3QqKSh0aWxlLT5waXhlbHMgKyB0aWxlLT5ieXRlcyk7CiAgICAgZm9yICg7IGRzdDE2IDwgZHN0
MTZfZW5kOyBkc3QxNisrKQogICAgICAgICAqZHN0MTYgPSBjMTsKIH0KIAotc3RhdGljIGlubGlu
ZSB2b2lkIF9ld2tfdGlsZV9wYWludChFd2tfVGlsZSAqdCwgdWludDhfdCByLCB1aW50OF90IGcs
IHVpbnQ4X3QgYikKK3N0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVfcGFpbnQoRXdrX1RpbGUq
IHRpbGUsIHVpbnQ4X3QgcmVkLCB1aW50OF90IGdyZWVuLCB1aW50OF90IGJsdWUpCiB7Ci0gICAg
aWYgKHQtPmNzcGFjZSA9PSBFVkFTX0NPTE9SU1BBQ0VfQVJHQjg4ODgpCi0gICAgICAgIF9ld2tf
dGlsZV9wYWludF9yZ2I4ODgodCwgciwgZywgYik7Ci0gICAgZWxzZSBpZiAodC0+Y3NwYWNlID09
IEVWQVNfQ09MT1JTUEFDRV9SR0I1NjVfQTVQKQotICAgICAgICBfZXdrX3RpbGVfcGFpbnRfcmdi
NTY1KHQsIHIsIGcsIGIpOworICAgIGlmICh0aWxlLT5jc3BhY2UgPT0gRVZBU19DT0xPUlNQQUNF
X0FSR0I4ODg4KQorICAgICAgICBfZXdrX3RpbGVfcGFpbnRfcmdiODg4KHRpbGUsIHJlZCwgZ3Jl
ZW4sIGJsdWUpOworICAgIGVsc2UgaWYgKHRpbGUtPmNzcGFjZSA9PSBFVkFTX0NPTE9SU1BBQ0Vf
UkdCNTY1X0E1UCkKKyAgICAgICAgX2V3a190aWxlX3BhaW50X3JnYjU2NSh0aWxlLCByZWQsIGdy
ZWVuLCBibHVlKTsKICAgICBlbHNlCi0gICAgICAgIEVSUigidW5rbm93biBjb2xvciBzcGFjZTog
JWQiLCB0LT5jc3BhY2UpOworICAgICAgICBFUlIoInVua25vd24gY29sb3Igc3BhY2U6ICVkIiwg
dGlsZS0+Y3NwYWNlKTsKIH0KIAogLyoqCkBAIC0yMzIsMTU0ICsyMzIsMTU0IEBAIHN0YXRpYyBp
bmxpbmUgdm9pZCBfZXdrX3RpbGVfcGFpbnQoRXdrX1RpbGUgKnQsIHVpbnQ4X3QgciwgdWludDhf
dCBnLCB1aW50OF90IGIpCiAgKiBld2tfdGlsZV91cGRhdGVzX2NsZWFyKCkgdG8gY2hhbmdlIEBj
IHN0YXRzLm1pc3NlcywKICAqIEBjIHN0YXRzLmZ1bGxfdXBkYXRlIGFuZCBAYyB1cGRhdGVzLgog
ICovCi1Fd2tfVGlsZSAqZXdrX3RpbGVfbmV3KEV2YXMgKmV2YXMsIEV2YXNfQ29vcmQgdywgRXZh
c19Db29yZCBoLCBmbG9hdCB6b29tLCBFdmFzX0NvbG9yc3BhY2UgY3NwYWNlKQorRXdrX1RpbGUq
IGV3a190aWxlX25ldyhFdmFzKiBldmFzLCBFdmFzX0Nvb3JkIHdpZHRoLCBFdmFzX0Nvb3JkIGhl
aWdodCwgZmxvYXQgem9vbSwgRXZhc19Db2xvcnNwYWNlIGNvbG9yU3BhY2UpCiB7Ci0gICAgRXZh
c19Db29yZCAqZWM7Ci0gICAgRXZhc19Db2xvcnNwYWNlICplY3M7Ci0gICAgZmxvYXQgKmY7Ci0g
ICAgc2l6ZV90ICpzOwotICAgIEV3a19UaWxlICp0OworICAgIEV2YXNfQ29vcmQqIGVjOworICAg
IEV2YXNfQ29sb3JzcGFjZSogZWNzOworICAgIGZsb2F0KiBmOworICAgIHNpemVfdCogczsKKyAg
ICBFd2tfVGlsZSogdGlsZTsKICAgICB1bnNpZ25lZCBpbnQgYXJlYTsKICAgICBzaXplX3QgYnl0
ZXM7CiAgICAgY2Fpcm9fZm9ybWF0X3QgZm9ybWF0OwogICAgIGNhaXJvX3N0YXR1c190IHN0YXR1
czsKICAgICBpbnQgc3RyaWRlOwotICAgIEVjb3JlX0V2YXMgKmVlOwotICAgIGNvbnN0IGNoYXIg
KmVuZ2luZTsKKyAgICBFY29yZV9FdmFzKiBlZTsKKyAgICBjb25zdCBjaGFyKiBlbmdpbmU7CiAK
LSAgICBhcmVhID0gdyAqIGg7CisgICAgYXJlYSA9IHdpZHRoICogaGVpZ2h0OwogCi0gICAgaWYg
KGNzcGFjZSA9PSBFVkFTX0NPTE9SU1BBQ0VfQVJHQjg4ODgpIHsKKyAgICBpZiAoY29sb3JTcGFj
ZSA9PSBFVkFTX0NPTE9SU1BBQ0VfQVJHQjg4ODgpIHsKICAgICAgICAgYnl0ZXMgPSBhcmVhICog
NDsKLSAgICAgICAgc3RyaWRlID0gdyAqIDQ7CisgICAgICAgIHN0cmlkZSA9IHdpZHRoICogNDsK
ICAgICAgICAgZm9ybWF0ID0gQ0FJUk9fRk9STUFUX0FSR0IzMjsKLSAgICB9IGVsc2UgaWYgKGNz
cGFjZSA9PSBFVkFTX0NPTE9SU1BBQ0VfUkdCNTY1X0E1UCkgeworICAgIH0gZWxzZSBpZiAoY29s
b3JTcGFjZSA9PSBFVkFTX0NPTE9SU1BBQ0VfUkdCNTY1X0E1UCkgewogICAgICAgICBieXRlcyA9
IGFyZWEgKiAyOwotICAgICAgICBzdHJpZGUgPSB3ICogMjsKKyAgICAgICAgc3RyaWRlID0gd2lk
dGggKiAyOwogICAgICAgICBmb3JtYXQgPSBDQUlST19GT1JNQVRfUkdCMTZfNTY1OwogICAgIH0g
ZWxzZSB7Ci0gICAgICAgIEVSUigidW5rbm93biBjb2xvciBzcGFjZTogJWQiLCBjc3BhY2UpOwor
ICAgICAgICBFUlIoInVua25vd24gY29sb3Igc3BhY2U6ICVkIiwgY29sb3JTcGFjZSk7CiAgICAg
ICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIERCRygic2l6ZTogJWR4JWQgKCVkKSwgem9vbTog
JWYsIGNzcGFjZT0lZCIsIHcsIGgsIGFyZWEsIChkb3VibGUpem9vbSwgY3NwYWNlKTsKKyAgICBE
QkcoInNpemU6ICVkeCVkICglZCksIHpvb206ICVmLCBjc3BhY2U9JWQiLCB3aWR0aCwgaGVpZ2h0
LCBhcmVhLCAoZG91YmxlKXpvb20sIGNvbG9yU3BhY2UpOwogCi0gICAgdCA9IHN0YXRpY19jYXN0
PEV3a19UaWxlKj4obWFsbG9jKHNpemVvZihFd2tfVGlsZSkpKTsKLSAgICBpZiAoIXQpCisgICAg
dGlsZSA9IHN0YXRpY19jYXN0PEV3a19UaWxlKj4obWFsbG9jKHNpemVvZihFd2tfVGlsZSkpKTsK
KyAgICBpZiAoIXRpbGUpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgdC0+aW1hZ2UgPSBldmFz
X29iamVjdF9pbWFnZV9hZGQoZXZhcyk7CisgICAgdGlsZS0+aW1hZ2UgPSBldmFzX29iamVjdF9p
bWFnZV9hZGQoZXZhcyk7CiAKICAgICBlZSA9IGVjb3JlX2V2YXNfZWNvcmVfZXZhc19nZXQoZXZh
cyk7CiAgICAgZW5naW5lID0gZWNvcmVfZXZhc19lbmdpbmVfbmFtZV9nZXQoZWUpOwogICAgIGlm
IChlbmdpbmUgJiYgIXN0cmNtcChlbmdpbmUsICJvcGVuZ2xfeDExIikpCi0gICAgICAgIGV2YXNf
b2JqZWN0X2ltYWdlX2NvbnRlbnRfaGludF9zZXQodC0+aW1hZ2UsIEVWQVNfSU1BR0VfQ09OVEVO
VF9ISU5UX0RZTkFNSUMpOworICAgICAgICBldmFzX29iamVjdF9pbWFnZV9jb250ZW50X2hpbnRf
c2V0KHRpbGUtPmltYWdlLCBFVkFTX0lNQUdFX0NPTlRFTlRfSElOVF9EWU5BTUlDKTsKIAotICAg
IHQtPnZpc2libGUgPSAwOwotICAgIHQtPnVwZGF0ZXMgPSAwOworICAgIHRpbGUtPnZpc2libGUg
PSAwOworICAgIHRpbGUtPnVwZGF0ZXMgPSAwOwogCi0gICAgbWVtc2V0KCZ0LT5zdGF0cywgMCwg
c2l6ZW9mKEV3a19UaWxlX1N0YXRzKSk7Ci0gICAgdC0+c3RhdHMuYXJlYSA9IGFyZWE7CisgICAg
bWVtc2V0KCZ0aWxlLT5zdGF0cywgMCwgc2l6ZW9mKEV3a19UaWxlX1N0YXRzKSk7CisgICAgdGls
ZS0+c3RhdHMuYXJlYSA9IGFyZWE7CiAKICAgICAvKiB1Z2x5LCBidXQgbGV0J3MgYXZvaWQgYXQg
YWxsIGNvc3RzIGhhdmluZyB1c2VycyB0byBtb2RpZnkgdGhvc2UgKi8KLSAgICBlYyA9IChFdmFz
X0Nvb3JkICopJnQtPnc7Ci0gICAgKmVjID0gdzsKKyAgICBlYyA9IChFdmFzX0Nvb3JkKikmdGls
ZS0+d2lkdGg7CisgICAgKmVjID0gd2lkdGg7CiAKLSAgICBlYyA9IChFdmFzX0Nvb3JkICopJnQt
Pmg7Ci0gICAgKmVjID0gaDsKKyAgICBlYyA9IChFdmFzX0Nvb3JkKikmdGlsZS0+aGVpZ2h0Owor
ICAgICplYyA9IGhlaWdodDsKIAotICAgIGVjcyA9IChFdmFzX0NvbG9yc3BhY2UgKikmdC0+Y3Nw
YWNlOwotICAgICplY3MgPSBjc3BhY2U7CisgICAgZWNzID0gKEV2YXNfQ29sb3JzcGFjZSopJnRp
bGUtPmNzcGFjZTsKKyAgICAqZWNzID0gY29sb3JTcGFjZTsKIAotICAgIGYgPSAoZmxvYXQgKikm
dC0+em9vbTsKKyAgICBmID0gKGZsb2F0KikmdGlsZS0+em9vbTsKICAgICAqZiA9IHpvb207CiAK
LSAgICBzID0gKHNpemVfdCAqKSZ0LT5ieXRlczsKKyAgICBzID0gKHNpemVfdCopJnRpbGUtPmJ5
dGVzOwogICAgICpzID0gYnl0ZXM7CiAKLSAgICBldmFzX29iamVjdF9pbWFnZV9zaXplX3NldCh0
LT5pbWFnZSwgdC0+dywgdC0+aCk7Ci0gICAgZXZhc19vYmplY3RfaW1hZ2VfY29sb3JzcGFjZV9z
ZXQodC0+aW1hZ2UsIHQtPmNzcGFjZSk7Ci0gICAgdC0+cGl4ZWxzID0gc3RhdGljX2Nhc3Q8dWlu
dDhfdCo+KGV2YXNfb2JqZWN0X2ltYWdlX2RhdGFfZ2V0KHQtPmltYWdlLCBFSU5BX1RSVUUpKTsK
LSAgICB0LT5zdXJmYWNlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEodC0+
cGl4ZWxzLCBmb3JtYXQsIHcsIGgsIHN0cmlkZSk7Ci0gICAgc3RhdHVzID0gY2Fpcm9fc3VyZmFj
ZV9zdGF0dXModC0+c3VyZmFjZSk7CisgICAgZXZhc19vYmplY3RfaW1hZ2Vfc2l6ZV9zZXQodGls
ZS0+aW1hZ2UsIHRpbGUtPndpZHRoLCB0aWxlLT5oZWlnaHQpOworICAgIGV2YXNfb2JqZWN0X2lt
YWdlX2NvbG9yc3BhY2Vfc2V0KHRpbGUtPmltYWdlLCB0aWxlLT5jc3BhY2UpOworICAgIHRpbGUt
PnBpeGVscyA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihldmFzX29iamVjdF9pbWFnZV9kYXRhX2dl
dCh0aWxlLT5pbWFnZSwgRUlOQV9UUlVFKSk7CisgICAgdGlsZS0+c3VyZmFjZSA9IGNhaXJvX2lt
YWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKHRpbGUtPnBpeGVscywgZm9ybWF0LCB3aWR0aCwg
aGVpZ2h0LCBzdHJpZGUpOworICAgIHN0YXR1cyA9IGNhaXJvX3N1cmZhY2Vfc3RhdHVzKHRpbGUt
PnN1cmZhY2UpOwogICAgIGlmIChzdGF0dXMgIT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1MpIHsKICAg
ICAgICAgRVJSKCJmYWlsZWQgdG8gY3JlYXRlIGNhaXJvIHN1cmZhY2U6ICVzIiwKICAgICAgICAg
ICAgIGNhaXJvX3N0YXR1c190b19zdHJpbmcoc3RhdHVzKSk7Ci0gICAgICAgIGZyZWUodCk7Cisg
ICAgICAgIGZyZWUodGlsZSk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIHQtPmNh
aXJvID0gY2Fpcm9fY3JlYXRlKHQtPnN1cmZhY2UpOwotICAgIHN0YXR1cyA9IGNhaXJvX3N0YXR1
cyh0LT5jYWlybyk7CisgICAgdGlsZS0+Y2Fpcm8gPSBjYWlyb19jcmVhdGUodGlsZS0+c3VyZmFj
ZSk7CisgICAgc3RhdHVzID0gY2Fpcm9fc3RhdHVzKHRpbGUtPmNhaXJvKTsKICAgICBpZiAoc3Rh
dHVzICE9IENBSVJPX1NUQVRVU19TVUNDRVNTKSB7CiAgICAgICAgIEVSUigiZmFpbGVkIHRvIGNy
ZWF0ZSBjYWlybzogJXMiLCBjYWlyb19zdGF0dXNfdG9fc3RyaW5nKHN0YXR1cykpOwotICAgICAg
ICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3kodC0+c3VyZmFjZSk7Ci0gICAgICAgIGV2YXNfb2JqZWN0
X2RlbCh0LT5pbWFnZSk7Ci0gICAgICAgIGZyZWUodCk7CisgICAgICAgIGNhaXJvX3N1cmZhY2Vf
ZGVzdHJveSh0aWxlLT5zdXJmYWNlKTsKKyAgICAgICAgZXZhc19vYmplY3RfZGVsKHRpbGUtPmlt
YWdlKTsKKyAgICAgICAgZnJlZSh0aWxlKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0g
ICAgX2V3a190aWxlX2FjY291bnRfYWxsb2NhdGVkKHQpOworICAgIF9ld2tfdGlsZV9hY2NvdW50
X2FsbG9jYXRlZCh0aWxlKTsKIAotICAgIHJldHVybiB0OworICAgIHJldHVybiB0aWxlOwogfQog
CiAvKioKICAqIEZyZWUgdGlsZSBtZW1vcnkuCiAgKi8KLXZvaWQgZXdrX3RpbGVfZnJlZShFd2tf
VGlsZSAqdCkKK3ZvaWQgZXdrX3RpbGVfZnJlZShFd2tfVGlsZSogdGlsZSkKIHsKLSAgICBfZXdr
X3RpbGVfYWNjb3VudF9mcmVlZCh0KTsKKyAgICBfZXdrX3RpbGVfYWNjb3VudF9mcmVlZCh0aWxl
KTsKIAotICAgIGlmICh0LT51cGRhdGVzKQotICAgICAgICBlaW5hX3RpbGVyX2ZyZWUodC0+dXBk
YXRlcyk7CisgICAgaWYgKHRpbGUtPnVwZGF0ZXMpCisgICAgICAgIGVpbmFfdGlsZXJfZnJlZSh0
aWxlLT51cGRhdGVzKTsKIAotICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveSh0LT5zdXJmYWNlKTsK
LSAgICBjYWlyb19kZXN0cm95KHQtPmNhaXJvKTsKLSAgICBldmFzX29iamVjdF9kZWwodC0+aW1h
Z2UpOwotICAgIGZyZWUodCk7CisgICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95KHRpbGUtPnN1cmZh
Y2UpOworICAgIGNhaXJvX2Rlc3Ryb3kodGlsZS0+Y2Fpcm8pOworICAgIGV2YXNfb2JqZWN0X2Rl
bCh0aWxlLT5pbWFnZSk7CisgICAgZnJlZSh0aWxlKTsKIH0KIAogLyoqCiAgKiBNYWtlIHRoZSB0
aWxlIHZpc2libGUsIGluY3JlbWVudGluZyBpdHMgY291bnRlci4KICAqLwotdm9pZCBld2tfdGls
ZV9zaG93KEV3a19UaWxlICp0KQordm9pZCBld2tfdGlsZV9zaG93KEV3a19UaWxlKiB0aWxlKQog
ewotICAgIHQtPnZpc2libGUrKzsKLSAgICBldmFzX29iamVjdF9zaG93KHQtPmltYWdlKTsKKyAg
ICB0aWxlLT52aXNpYmxlKys7CisgICAgZXZhc19vYmplY3Rfc2hvdyh0aWxlLT5pbWFnZSk7CiB9
CiAKIC8qKgogICogRGVjcmVtZW50IHRoZSB2aXNpYmlsaXR5IGNvdW50ZXIsIG1ha2luZyBpdCBp
bnZpc2libGUgaWYgbmVjZXNzYXJ5LgogICovCi12b2lkIGV3a190aWxlX2hpZGUoRXdrX1RpbGUg
KnQpCit2b2lkIGV3a190aWxlX2hpZGUoRXdrX1RpbGUqIHRpbGUpCiB7Ci0gICAgdC0+dmlzaWJs
ZS0tOwotICAgIGlmICghdC0+dmlzaWJsZSkKLSAgICAgICAgZXZhc19vYmplY3RfaGlkZSh0LT5p
bWFnZSk7CisgICAgdGlsZS0+dmlzaWJsZS0tOworICAgIGlmICghdGlsZS0+dmlzaWJsZSkKKyAg
ICAgICAgZXZhc19vYmplY3RfaGlkZSh0aWxlLT5pbWFnZSk7CiB9CiAKIC8qKgogICogUmV0dXJu
cyBFSU5BX1RSVUUgaWYgdGhlIHRpbGUgaXMgdmlzaWJsZSwgRUlOQV9GQUxTRSBvdGhlcndpc2Uu
CiAgKi8KLUVpbmFfQm9vbCBld2tfdGlsZV92aXNpYmxlX2dldChFd2tfVGlsZSAqdCkKK0VpbmFf
Qm9vbCBld2tfdGlsZV92aXNpYmxlX2dldChFd2tfVGlsZSogdGlsZSkKIHsKLSAgICByZXR1cm4g
ISF0LT52aXNpYmxlOworICAgIHJldHVybiAhIXRpbGUtPnZpc2libGU7CiB9CiAKIC8qKgogICog
TWFyayB3aG9sZSB0aWxlIGFzIGRpcnR5IGFuZCByZXF1aXJpbmcgdXBkYXRlLgogICovCi12b2lk
IGV3a190aWxlX3VwZGF0ZV9mdWxsKEV3a19UaWxlICp0KQordm9pZCBld2tfdGlsZV91cGRhdGVf
ZnVsbChFd2tfVGlsZSogdGlsZSkKIHsKICAgICAvKiBUT0RPOiBsaXN0IG9mIHRpbGVzIHBlbmRp
bmcgdXBkYXRlcz8gKi8KLSAgICB0LT5zdGF0cy5taXNzZXMrKzsKKyAgICB0aWxlLT5zdGF0cy5t
aXNzZXMrKzsKIAotICAgIGlmICghdC0+c3RhdHMuZnVsbF91cGRhdGUpIHsKLSAgICAgICAgdC0+
c3RhdHMuZnVsbF91cGRhdGUgPSBFSU5BX1RSVUU7Ci0gICAgICAgIGlmICh0LT51cGRhdGVzKSB7
Ci0gICAgICAgICAgICBlaW5hX3RpbGVyX2ZyZWUodC0+dXBkYXRlcyk7Ci0gICAgICAgICAgICB0
LT51cGRhdGVzID0gMDsKKyAgICBpZiAoIXRpbGUtPnN0YXRzLmZ1bGxfdXBkYXRlKSB7CisgICAg
ICAgIHRpbGUtPnN0YXRzLmZ1bGxfdXBkYXRlID0gRUlOQV9UUlVFOworICAgICAgICBpZiAodGls
ZS0+dXBkYXRlcykgeworICAgICAgICAgICAgZWluYV90aWxlcl9mcmVlKHRpbGUtPnVwZGF0ZXMp
OworICAgICAgICAgICAgdGlsZS0+dXBkYXRlcyA9IDA7CiAgICAgICAgIH0KICAgICB9CiB9CkBA
IC0zODcsMzIgKzM4NywzMiBAQCB2b2lkIGV3a190aWxlX3VwZGF0ZV9mdWxsKEV3a19UaWxlICp0
KQogLyoqCiAgKiBNYXJrIHRoZSBzcGVjaWZpYyBzdWJhcmVhIGFzIGRpcnR5IGFuZCByZXF1aXJp
bmcgdXBkYXRlLgogICovCi12b2lkIGV3a190aWxlX3VwZGF0ZV9hcmVhKEV3a19UaWxlICp0LCBj
b25zdCBFaW5hX1JlY3RhbmdsZSAqcikKK3ZvaWQgZXdrX3RpbGVfdXBkYXRlX2FyZWEoRXdrX1Rp
bGUqIHRpbGUsIGNvbnN0IEVpbmFfUmVjdGFuZ2xlKiByZWN0KQogewogICAgIC8qIFRPRE86IGxp
c3Qgb2YgdGlsZXMgcGVuZGluZyB1cGRhdGVzPyAqLwotICAgIHQtPnN0YXRzLm1pc3NlcysrOwor
ICAgIHRpbGUtPnN0YXRzLm1pc3NlcysrOwogCi0gICAgaWYgKHQtPnN0YXRzLmZ1bGxfdXBkYXRl
KQorICAgIGlmICh0aWxlLT5zdGF0cy5mdWxsX3VwZGF0ZSkKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgaWYgKCFyLT54ICYmICFyLT55ICYmIHItPncgPT0gdC0+dyAmJiByLT5oID09IHQtPmgpIHsK
LSAgICAgICAgdC0+c3RhdHMuZnVsbF91cGRhdGUgPSBFSU5BX1RSVUU7Ci0gICAgICAgIGlmICh0
LT51cGRhdGVzKSB7Ci0gICAgICAgICAgICBlaW5hX3RpbGVyX2ZyZWUodC0+dXBkYXRlcyk7Ci0g
ICAgICAgICAgICB0LT51cGRhdGVzID0gMDsKKyAgICBpZiAoIXJlY3QtPnggJiYgIXJlY3QtPnkg
JiYgcmVjdC0+dyA9PSB0aWxlLT53aWR0aCAmJiByZWN0LT5oID09IHRpbGUtPmhlaWdodCkgewor
ICAgICAgICB0aWxlLT5zdGF0cy5mdWxsX3VwZGF0ZSA9IEVJTkFfVFJVRTsKKyAgICAgICAgaWYg
KHRpbGUtPnVwZGF0ZXMpIHsKKyAgICAgICAgICAgIGVpbmFfdGlsZXJfZnJlZSh0aWxlLT51cGRh
dGVzKTsKKyAgICAgICAgICAgIHRpbGUtPnVwZGF0ZXMgPSAwOwogICAgICAgICB9CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoIXQtPnVwZGF0ZXMpIHsKLSAgICAgICAgdC0+dXBk
YXRlcyA9IGVpbmFfdGlsZXJfbmV3KHQtPncsIHQtPmgpOwotICAgICAgICBpZiAoIXQtPnVwZGF0
ZXMpIHsKLSAgICAgICAgICAgIENSSVRJQ0FMKCJjb3VsZCBub3QgY3JlYXRlIGVpbmFfdGlsZXIg
JWR4JWQuIiwgdC0+dywgdC0+aCk7CisgICAgaWYgKCF0aWxlLT51cGRhdGVzKSB7CisgICAgICAg
IHRpbGUtPnVwZGF0ZXMgPSBlaW5hX3RpbGVyX25ldyh0aWxlLT53aWR0aCwgdGlsZS0+aGVpZ2h0
KTsKKyAgICAgICAgaWYgKCF0aWxlLT51cGRhdGVzKSB7CisgICAgICAgICAgICBDUklUSUNBTCgi
Y291bGQgbm90IGNyZWF0ZSBlaW5hX3RpbGVyICVkeCVkLiIsIHRpbGUtPndpZHRoLCB0aWxlLT5o
ZWlnaHQpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfQogCi0gICAgZWlu
YV90aWxlcl9yZWN0X2FkZCh0LT51cGRhdGVzLCByKTsKKyAgICBlaW5hX3RpbGVyX3JlY3RfYWRk
KHRpbGUtPnVwZGF0ZXMsIHJlY3QpOwogfQogCiAvKioKQEAgLTQyMSwzNiArNDIxLDM2IEBAIHZv
aWQgZXdrX3RpbGVfdXBkYXRlX2FyZWEoRXdrX1RpbGUgKnQsIGNvbnN0IEVpbmFfUmVjdGFuZ2xl
ICpyKQogICogVGhpcyB3aWxsIG5vdCBjaGFuZ2UgdGhlIHRpbGUgc3RhdGlzdGljcyBvciBjbGVh
ciB0aGUgcHJvY2Vzc2VkCiAgKiB1cGRhdGVzLCB1c2UgZXdrX3RpbGVfdXBkYXRlc19jbGVhcigp
IGZvciB0aGF0LgogICovCi12b2lkIGV3a190aWxlX3VwZGF0ZXNfcHJvY2VzcyhFd2tfVGlsZSAq
dCwgdm9pZCAoKmNiKSh2b2lkICpkYXRhLCBFd2tfVGlsZSAqdCwgY29uc3QgRWluYV9SZWN0YW5n
bGUgKnVwZGF0ZSksIGNvbnN0IHZvaWQgKmRhdGEpCi17Ci0gICAgaWYgKHQtPnN0YXRzLmZ1bGxf
dXBkYXRlKSB7Ci0gICAgICAgIEVpbmFfUmVjdGFuZ2xlIHI7Ci0gICAgICAgIHIueCA9IDA7Ci0g
ICAgICAgIHIueSA9IDA7Ci0gICAgICAgIHIudyA9IHQtPnc7Ci0gICAgICAgIHIuaCA9IHQtPmg7
Cit2b2lkIGV3a190aWxlX3VwZGF0ZXNfcHJvY2VzcyhFd2tfVGlsZSogdGlsZSwgdm9pZCAoKmNh
bGxiYWNrKSh2b2lkKiBkYXRhLCBFd2tfVGlsZSogdGlsZSwgY29uc3QgRWluYV9SZWN0YW5nbGUq
IHVwZGF0ZSksIGNvbnN0IHZvaWQqIGRhdGEpCit7CisgICAgaWYgKHRpbGUtPnN0YXRzLmZ1bGxf
dXBkYXRlKSB7CisgICAgICAgIEVpbmFfUmVjdGFuZ2xlIHJlY3Q7CisgICAgICAgIHJlY3QueCA9
IDA7CisgICAgICAgIHJlY3QueSA9IDA7CisgICAgICAgIHJlY3QudyA9IHRpbGUtPndpZHRoOwor
ICAgICAgICByZWN0LmggPSB0aWxlLT5oZWlnaHQ7CiAjaWZkZWYgVElMRV9TVEFUU19BQ0NPVU5U
X1JFTkRFUl9USU1FCiAgICAgICAgIHN0cnVjdCB0aW1ldmFsIHRpbWV2OwogICAgICAgICBkb3Vi
bGUgcmVuZGVyX3N0YXJ0OwogICAgICAgICBnZXR0aW1lb2ZkYXkoJnRpbWV2LCAwKTsKLSAgICAg
ICAgcmVuZGVyX3N0YXJ0ID0gKGRvdWJsZSl0aW1ldi50dl9zZWMgKwotICAgICAgICAgICAgKCgo
ZG91YmxlKXRpbWV2LnR2X3VzZWMpIC8gMTAwMDAwMCk7CisgICAgICAgIHJlbmRlcl9zdGFydGls
ZSA9IChkb3VibGUpdGltZXYudHZfc2VjICsKKyAgICAgICAgICAgICAgICAgICAgICAgKCgoZG91
YmxlKXRpbWV2LnR2X3VzZWMpIC8gMTAwMDAwMCk7CiAjZW5kaWYKLSAgICAgICAgY2IoKHZvaWQg
KilkYXRhLCB0LCAmcik7CisgICAgICAgIGNhbGxiYWNrKCh2b2lkKilkYXRhLCB0aWxlLCAmcmVj
dCk7CiAjaWZkZWYgVElMRV9TVEFUU19BQ0NPVU5UX1JFTkRFUl9USU1FCiAgICAgICAgIGdldHRp
bWVvZmRheSgmdGltZXYsIDApOwotICAgICAgICB0LT5zdGF0cy5yZW5kZXJfdGltZSA9IChkb3Vi
bGUpdGltZXYudHZfc2VjICsKLSAgICAgICAgICAgICgoKGRvdWJsZSl0aW1ldi50dl91c2VjKSAv
IDEwMDAwMDApIC0gcmVuZGVyX3N0YXJ0OworICAgICAgICB0aWxlLT5zdGF0cy5yZW5kZXJfdGlt
ZSA9IChkb3VibGUpdGltZXYudHZfc2VjICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAoKChkb3VibGUpdGltZXYudHZfdXNlYykgLyAxMDAwMDAwKSAtIHJlbmRlcl9zdGFydDsKICNl
bmRpZgotICAgIH0gZWxzZSBpZiAodC0+dXBkYXRlcykgewotICAgICAgICBFaW5hX0l0ZXJhdG9y
ICppdHIgPSBlaW5hX3RpbGVyX2l0ZXJhdG9yX25ldyh0LT51cGRhdGVzKTsKLSAgICAgICAgRWlu
YV9SZWN0YW5nbGUgKnI7CisgICAgfSBlbHNlIGlmICh0aWxlLT51cGRhdGVzKSB7CisgICAgICAg
IEVpbmFfSXRlcmF0b3IqIGl0ciA9IGVpbmFfdGlsZXJfaXRlcmF0b3JfbmV3KHRpbGUtPnVwZGF0
ZXMpOworICAgICAgICBFaW5hX1JlY3RhbmdsZSogcmVjdDsKICAgICAgICAgaWYgKCFpdHIpIHsK
ICAgICAgICAgICAgIENSSVRJQ0FMKCJjb3VsZCBub3QgY3JlYXRlIHRpbGVyIGl0ZXJhdG9yISIp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIEVJTkFfSVRFUkFUT1Jf
Rk9SRUFDSChpdHIsIHIpCi0gICAgICAgICAgICBjYigodm9pZCAqKWRhdGEsIHQsIHIpOworICAg
ICAgICBFSU5BX0lURVJBVE9SX0ZPUkVBQ0goaXRyLCByZWN0KQorICAgICAgICAgICAgY2FsbGJh
Y2soKHZvaWQqKWRhdGEsIHRpbGUsIHJlY3QpOwogICAgICAgICBlaW5hX2l0ZXJhdG9yX2ZyZWUo
aXRyKTsKICAgICB9CiB9CkBAIC00NTksMzggKzQ1OSwzOCBAQCB2b2lkIGV3a190aWxlX3VwZGF0
ZXNfcHJvY2VzcyhFd2tfVGlsZSAqdCwgdm9pZCAoKmNiKSh2b2lkICpkYXRhLCBFd2tfVGlsZSAq
dCwgYwogICogQ2xlYXIgYWxsIHVwZGF0ZXMgaW4gcmVnaW9uLCBpZiBhbnkuCiAgKgogICogVGhp
cyB3aWxsIGNoYW5nZSB0aGUgdGlsZSBzdGF0aXN0aWNzLCBzcGVjaWFsbHkgemVybyBzdGF0Lm1p
c3NlcwotICogYW5kIHVuc2V0IHN0YXRzLmZ1bGxfdXBkYXRlLiBJZiB0LT51cGRhdGVzIGV4aXN0
ZWQsIHRoZW4gaXQgd2lsbCBiZQorICogYW5kIHVuc2V0IHN0YXRzLmZ1bGxfdXBkYXRlLiBJZiB0
aWxlLT51cGRhdGVzIGV4aXN0ZWQsIHRoZW4gaXQgd2lsbCBiZQogICogZGVzdHJveWVkLgogICoK
ICAqIFRoaXMgZnVuY3Rpb24gaXMgdXN1YWxseSBjYWxsZWQgYWZ0ZXIgZXdrX3RpbGVfdXBkYXRl
c19wcm9jZXNzKCkgaXMKICAqIGNhbGxlZC4KICAqLwotdm9pZCBld2tfdGlsZV91cGRhdGVzX2Ns
ZWFyKEV3a19UaWxlICp0KQordm9pZCBld2tfdGlsZV91cGRhdGVzX2NsZWFyKEV3a19UaWxlKiB0
aWxlKQogewogICAgIC8qIFRPRE86IHJlbW92ZSBmcm9tIGxpc3Qgb2YgcGVuZGluZyB1cGRhdGVz
PyAqLwotICAgIHQtPnN0YXRzLm1pc3NlcyA9IDA7CisgICAgdGlsZS0+c3RhdHMubWlzc2VzID0g
MDsKIAotICAgIGlmICh0LT5zdGF0cy5mdWxsX3VwZGF0ZSkKLSAgICAgICAgdC0+c3RhdHMuZnVs
bF91cGRhdGUgPSAwOwotICAgIGVsc2UgaWYgKHQtPnVwZGF0ZXMpIHsKLSAgICAgICAgZWluYV90
aWxlcl9mcmVlKHQtPnVwZGF0ZXMpOwotICAgICAgICB0LT51cGRhdGVzID0gMDsKKyAgICBpZiAo
dGlsZS0+c3RhdHMuZnVsbF91cGRhdGUpCisgICAgICAgIHRpbGUtPnN0YXRzLmZ1bGxfdXBkYXRl
ID0gMDsKKyAgICBlbHNlIGlmICh0aWxlLT51cGRhdGVzKSB7CisgICAgICAgIGVpbmFfdGlsZXJf
ZnJlZSh0aWxlLT51cGRhdGVzKTsKKyAgICAgICAgdGlsZS0+dXBkYXRlcyA9IDA7CiAgICAgfQog
fQogCiB0eXBlZGVmIHN0cnVjdCBfRXdrX1RpbGVfVW51c2VkX0NhY2hlX0VudHJ5IEV3a19UaWxl
X1VudXNlZF9DYWNoZV9FbnRyeTsKIHN0cnVjdCBfRXdrX1RpbGVfVW51c2VkX0NhY2hlX0VudHJ5
IHsKLSAgICBFd2tfVGlsZSAqdGlsZTsKKyAgICBFd2tfVGlsZSogdGlsZTsKICAgICBpbnQgd2Vp
Z2h0OwogICAgIHN0cnVjdCB7Ci0gICAgICAgIHZvaWQgKCpjYikodm9pZCAqZGF0YSwgRXdrX1Rp
bGUgKnQpOwotICAgICAgICB2b2lkICpkYXRhOworICAgICAgICB2b2lkICgqY2IpKHZvaWQqIGRh
dGEsIEV3a19UaWxlKiB0aWxlKTsKKyAgICAgICAgdm9pZCogZGF0YTsKICAgICB9IHRpbGVfZnJl
ZTsKIH07CiAKIHN0cnVjdCBfRXdrX1RpbGVfVW51c2VkX0NhY2hlIHsKICAgICBzdHJ1Y3Qgewot
ICAgICAgICBFaW5hX0xpc3QgKmxpc3Q7CisgICAgICAgIEVpbmFfTGlzdCogbGlzdDsKICAgICAg
ICAgc2l6ZV90IGNvdW50OwogICAgICAgICBzaXplX3QgYWxsb2NhdGVkOwogICAgIH0gZW50cmll
czsKQEAgLTUyMiw5ICs1MjIsOSBAQCBzdGF0aWMgY29uc3Qgc2l6ZV90IFRJTEVfVU5VU0VEX0NB
Q0hFX01BWF9GUkVFID0gMzI7CiAgKiAgICAgICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9mcmVl
KCkgdG8gcmVsZWFzZSByZXNvdXJjZXMuIElmIG5vdAogICogICAgICAgICBwb3NzaWJsZSB0byBh
bGxvY2F0ZSBtZW1vcnksIEBjIDAgaXMgcmV0dXJuZWQuCiAgKi8KLUV3a19UaWxlX1VudXNlZF9D
YWNoZSAqZXdrX3RpbGVfdW51c2VkX2NhY2hlX25ldyhzaXplX3QgbWF4KQorRXdrX1RpbGVfVW51
c2VkX0NhY2hlKiBld2tfdGlsZV91bnVzZWRfY2FjaGVfbmV3KHNpemVfdCBtYXgpCiB7Ci0gICAg
RXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWM7CisgICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0
dWM7CiAKICAgICB0dWMgPSBzdGF0aWNfY2FzdDxFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqPihjYWxs
b2MoMSwgc2l6ZW9mKEV3a19UaWxlX1VudXNlZF9DYWNoZSkpKTsKICAgICBpZiAoIXR1YykKQEAg
LTUzNiwxOSArNTM2LDE5IEBAIEV3a19UaWxlX1VudXNlZF9DYWNoZSAqZXdrX3RpbGVfdW51c2Vk
X2NhY2hlX25ldyhzaXplX3QgbWF4KQogICAgIHJldHVybiB0dWM7CiB9CiAKLXZvaWQgZXdrX3Rp
bGVfdW51c2VkX2NhY2hlX2xvY2tfYXJlYShFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YywgRXZh
c19Db29yZCB4LCBFdmFzX0Nvb3JkIHksIEV2YXNfQ29vcmQgdywgRXZhc19Db29yZCBoLCBmbG9h
dCB6b29tKQordm9pZCBld2tfdGlsZV91bnVzZWRfY2FjaGVfbG9ja19hcmVhKEV3a19UaWxlX1Vu
dXNlZF9DYWNoZSogdHVjLCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwgRXZhc19Db29yZCB3
aWR0aCwgRXZhc19Db29yZCBoZWlnaHQsIGZsb2F0IHpvb20pCiB7CiAgICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk4odHVjKTsKIAogICAgIHR1Yy0+bG9ja2VkLmxvY2tlZCA9IEVJTkFfVFJV
RTsKICAgICB0dWMtPmxvY2tlZC54ID0geDsKICAgICB0dWMtPmxvY2tlZC55ID0geTsKLSAgICB0
dWMtPmxvY2tlZC53ID0gdzsKLSAgICB0dWMtPmxvY2tlZC5oID0gaDsKKyAgICB0dWMtPmxvY2tl
ZC53ID0gd2lkdGg7CisgICAgdHVjLT5sb2NrZWQuaCA9IGhlaWdodDsKICAgICB0dWMtPmxvY2tl
ZC56b29tID0gem9vbTsKIH0KIAotdm9pZCBld2tfdGlsZV91bnVzZWRfY2FjaGVfdW5sb2NrX2Fy
ZWEoRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMpCit2b2lkIGV3a190aWxlX3VudXNlZF9jYWNo
ZV91bmxvY2tfYXJlYShFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHR1YykKIHsKICAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTih0dWMpOwogCkBAIC01NjcsNyArNTY3LDcgQEAgdm9pZCBld2tf
dGlsZV91bnVzZWRfY2FjaGVfdW5sb2NrX2FyZWEoRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMp
CiAgKgogICogQHNlZSBld2tfdGlsZV91bnVzZWRfY2FjaGVfdW5yZWYoKQogICovCi1zdGF0aWMg
dm9pZCBfZXdrX3RpbGVfdW51c2VkX2NhY2hlX2ZyZWUoRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0
dWMpCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVfdW51c2VkX2NhY2hlX2ZyZWUoRXdrX1RpbGVfVW51
c2VkX0NhY2hlKiB0dWMpCiB7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4odHVjKTsK
IApAQCAtNTg3LDcgKzU4Nyw3IEBAIHN0YXRpYyB2b2lkIF9ld2tfdGlsZV91bnVzZWRfY2FjaGVf
ZnJlZShFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YykKICAqIEFueSB0aWxlcyB0aGF0IGFyZSBp
biB0aGUgY2FjaGUgYXJlIGZyZWVkLiBUaGUgb25seSB0aWxlcyB0aGF0IGFyZQogICoga2VwdCBh
cmUgdGhvc2UgdGhhdCBhcmVuJ3QgaW4gdGhlIGNhY2hlIChpLmUuIHRoYXQgYXJlIHZpc2libGUp
LgogICovCi12b2lkIGV3a190aWxlX3VudXNlZF9jYWNoZV9jbGVhcihFd2tfVGlsZV9VbnVzZWRf
Q2FjaGUgKnR1YykKK3ZvaWQgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2NsZWFyKEV3a19UaWxlX1Vu
dXNlZF9DYWNoZSogdHVjKQogewogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHR1Yyk7
CiAKQEAgLTYwNiwxMyArNjA2LDEzIEBAIHZvaWQgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2NsZWFy
KEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjKQogfQogCiAvKioKLSAqIEhvbGQgcmVmZXJlbmNl
IHRvIGNhY2hlLgorICogaGVpZ2h0b2xkIHJlZmVyZW5jZSB0byBjYWNoZS4KICAqCiAgKiBAcmV0
dXJuIHNhbWUgcG9pbnRlciBhcyB0YWtlbi4KICAqCiAgKiBAc2VlIGV3a190aWxlX3VudXNlZF9j
YWNoZV91bnJlZigpCiAgKi8KLUV3a19UaWxlX1VudXNlZF9DYWNoZSAqZXdrX3RpbGVfdW51c2Vk
X2NhY2hlX3JlZihFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YykKK0V3a19UaWxlX1VudXNlZF9D
YWNoZSogZXdrX3RpbGVfdW51c2VkX2NhY2hlX3JlZihFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHR1
YykKIHsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodHVjLCAwKTsKICAgICB0
dWMtPnJlZmVyZW5jZXMrKzsKQEAgLTYyNSw3ICs2MjUsNyBAQCBFd2tfVGlsZV9VbnVzZWRfQ2Fj
aGUgKmV3a190aWxlX3VudXNlZF9jYWNoZV9yZWYoRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMp
CiAgKiBAc2VlIGV3a190aWxlX3VudXNlZF9jYWNoZV9yZWYoKQogICogQHNlZSBld2tfdGlsZV91
bnVzZWRfY2FjaGVfZnJlZSgpCiAgKi8KLXZvaWQgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3VucmVm
KEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjKQordm9pZCBld2tfdGlsZV91bnVzZWRfY2FjaGVf
dW5yZWYoRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0dWMpCiB7CiAgICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk4odHVjKTsKICAgICB0dWMtPnJlZmVyZW5jZXMtLTsKQEAgLTYzMywyNyArNjMz
LDI3IEBAIHZvaWQgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3VucmVmKEV3a19UaWxlX1VudXNlZF9D
YWNoZSAqdHVjKQogICAgICAgICBfZXdrX3RpbGVfdW51c2VkX2NhY2hlX2ZyZWUodHVjKTsKIH0K
IAotdm9pZCBld2tfdGlsZV91bnVzZWRfY2FjaGVfbWF4X3NldChFd2tfVGlsZV9VbnVzZWRfQ2Fj
aGUgKnR1Yywgc2l6ZV90IG1heCkKK3ZvaWQgZXdrX3RpbGVfdW51c2VkX2NhY2hlX21heF9zZXQo
RXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0dWMsIHNpemVfdCBtYXgpCiB7CiAgICAgRUlOQV9TQUZF
VFlfT05fTlVMTF9SRVRVUk4odHVjKTsKICAgICB0dWMtPm1lbW9yeS5tYXggPSBtYXg7CiB9CiAK
LXNpemVfdCBld2tfdGlsZV91bnVzZWRfY2FjaGVfbWF4X2dldChjb25zdCBFd2tfVGlsZV9VbnVz
ZWRfQ2FjaGUgKnR1YykKK3NpemVfdCBld2tfdGlsZV91bnVzZWRfY2FjaGVfbWF4X2dldChjb25z
dCBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHR1YykKIHsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTl9WQUwodHVjLCAwKTsKICAgICByZXR1cm4gdHVjLT5tZW1vcnkubWF4OwogfQogCi1z
aXplX3QgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3VzZWRfZ2V0KGNvbnN0IEV3a19UaWxlX1VudXNl
ZF9DYWNoZSAqdHVjKQorc2l6ZV90IGV3a190aWxlX3VudXNlZF9jYWNoZV91c2VkX2dldChjb25z
dCBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHR1YykKIHsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTl9WQUwodHVjLCAwKTsKICAgICByZXR1cm4gdHVjLT5tZW1vcnkudXNlZDsKIH0KIAot
c2l6ZV90IGV3a190aWxlX3VudXNlZF9jYWNoZV9mbHVzaChFd2tfVGlsZV9VbnVzZWRfQ2FjaGUg
KnR1Yywgc2l6ZV90IGJ5dGVzKQorc2l6ZV90IGV3a190aWxlX3VudXNlZF9jYWNoZV9mbHVzaChF
d2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHR1Yywgc2l6ZV90IGJ5dGVzKQogewotICAgIEVpbmFfTGlz
dCAqbCwgKmxfbmV4dDsKKyAgICBFaW5hX0xpc3QqIGwsICogbF9uZXh0OwogICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOX1ZBTCh0dWMsIDApOwogICAgIHNpemVfdCBkb25lOwogICAgIHVu
c2lnbmVkIGludCBjb3VudDsKQEAgLTY3MywxNSArNjczLDE1IEBAIHNpemVfdCBld2tfdGlsZV91
bnVzZWRfY2FjaGVfZmx1c2goRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMsIHNpemVfdCBieXRl
cykKICAgICBjb3VudCA9IDA7CiAgICAgRUlOQV9MSVNUX0ZPUkVBQ0hfU0FGRSh0dWMtPmVudHJp
ZXMubGlzdCwgbCwgbF9uZXh0LCBpdGVtKSB7CiAgICAgICAgIEV3a19UaWxlX1VudXNlZF9DYWNo
ZV9FbnRyeSogaXRyID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGVfVW51c2VkX0NhY2hlX0VudHJ5Kj4o
aXRlbSk7Ci0gICAgICAgIEV3a19UaWxlICp0ID0gaXRyLT50aWxlOworICAgICAgICBFd2tfVGls
ZSogdGlsZSA9IGl0ci0+dGlsZTsKICAgICAgICAgaWYgKGRvbmUgPiBieXRlcykKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICBpZiAodHVjLT5sb2NrZWQubG9ja2VkCi0gICAgICAgICAgICAm
JiB0LT54ICsgdC0+dyA+IHR1Yy0+bG9ja2VkLngKLSAgICAgICAgICAgICYmIHQtPnkgKyB0LT5o
ID4gdHVjLT5sb2NrZWQueQotICAgICAgICAgICAgJiYgdC0+eCA8IHR1Yy0+bG9ja2VkLnggKyB0
dWMtPmxvY2tlZC53Ci0gICAgICAgICAgICAmJiB0LT55IDwgdHVjLT5sb2NrZWQueSArIHR1Yy0+
bG9ja2VkLmgKLSAgICAgICAgICAgICYmIHQtPnpvb20gPT0gdHVjLT5sb2NrZWQuem9vbSkgewor
ICAgICAgICAgICAgJiYgdGlsZS0+eCArIHRpbGUtPndpZHRoID4gdHVjLT5sb2NrZWQueAorICAg
ICAgICAgICAgJiYgdGlsZS0+eSArIHRpbGUtPmhlaWdodCA+IHR1Yy0+bG9ja2VkLnkKKyAgICAg
ICAgICAgICYmIHRpbGUtPnggPCB0dWMtPmxvY2tlZC54ICsgdHVjLT5sb2NrZWQudworICAgICAg
ICAgICAgJiYgdGlsZS0+eSA8IHR1Yy0+bG9ja2VkLnkgKyB0dWMtPmxvY2tlZC5oCisgICAgICAg
ICAgICAmJiB0aWxlLT56b29tID09IHR1Yy0+bG9ja2VkLnpvb20pIHsKICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIGRvbmUgKz0gc2l6ZW9mKEV3a19UaWxlKSArIGl0
ci0+dGlsZS0+Ynl0ZXM7CkBAIC02OTcsNyArNjk3LDcgQEAgc2l6ZV90IGV3a190aWxlX3VudXNl
ZF9jYWNoZV9mbHVzaChFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1Yywgc2l6ZV90IGJ5dGVzKQog
ICAgIHJldHVybiBkb25lOwogfQogCi12b2lkIGV3a190aWxlX3VudXNlZF9jYWNoZV9hdXRvX2Zs
dXNoKEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjKQordm9pZCBld2tfdGlsZV91bnVzZWRfY2Fj
aGVfYXV0b19mbHVzaChFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHR1YykKIHsKICAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTih0dWMpOwogICAgIGlmICh0dWMtPm1lbW9yeS51c2VkIDw9IHR1
Yy0+bWVtb3J5Lm1heCkKQEAgLTcxMiwxMiArNzEyLDEyIEBAIHZvaWQgZXdrX3RpbGVfdW51c2Vk
X2NhY2hlX2F1dG9fZmx1c2goRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMpCiAgKiBGcmVlemUg
Y2FjaGUgdG8gbm90IGRvIG1haW50ZW5hbmNlIHRhc2tzLgogICoKICAqIE1haW50ZW5hbmNlIHRh
c2tzIG9wdGltaXplIGNhY2hlIHVzYWdlLCBidXQgbWF5YmUgd2Uga25vdyB3ZSBzaG91bGQKLSAq
IGhvbGQgb24gdGhlbSB1bnRpbCB3ZSBkbyB0aGUgbGFzdCBvcGVyYXRpb24sIGluIHRoaXMgY2Fz
ZSB3ZSBmcmVlemUKKyAqIGhlaWdodG9sZCBvbiB0aGVtIHVudGlsIHdlIGRvIHRoZSBsYXN0IG9w
ZXJhdGlvbiwgaW4gdGhpcyBjYXNlIHdlIGZyZWV6ZQogICogd2hpbGUgb3BlcmF0aW5nIGFuZCB0
aGVuIHRoYXcgd2hlbiB3ZSdyZSBkb25lLgogICoKICAqIEBzZWUgZXdrX3RpbGVfdW51c2VkX2Nh
Y2hlX3RoYXcoKQogICovCi12b2lkIGV3a190aWxlX3VudXNlZF9jYWNoZV9mcmVlemUoRXdrX1Rp
bGVfVW51c2VkX0NhY2hlICp0dWMpCit2b2lkIGV3a190aWxlX3VudXNlZF9jYWNoZV9mcmVlemUo
RXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0dWMpCiB7CiAgICAgdHVjLT5mcm96ZW4rKzsKIH0KQEAg
LTcyOCw3ICs3MjgsNyBAQCB2b2lkIGV3a190aWxlX3VudXNlZF9jYWNoZV9mcmVlemUoRXdrX1Rp
bGVfVW51c2VkX0NhY2hlICp0dWMpCiAgKiBJZiB0aGlzIGlzIHRoZSBsYXN0IGNvdW50ZXJwYXJ0
IG9mIGZyZWV6ZSwgdGhlbiBtYWludGVuYW5jZSB0YXNrcwogICogd2lsbCBydW4gaW1tZWRpYXRl
bHkuCiAgKi8KLXZvaWQgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3RoYXcoRXdrX1RpbGVfVW51c2Vk
X0NhY2hlICp0dWMpCit2b2lkIGV3a190aWxlX3VudXNlZF9jYWNoZV90aGF3KEV3a19UaWxlX1Vu
dXNlZF9DYWNoZSogdHVjKQogewogICAgIGlmICghdHVjLT5mcm96ZW4pIHsKICAgICAgICAgRVJS
KCJ0aGF3aW5nIG1vcmUgdGhhbiBmcmVlemluZyEiKTsKQEAgLTc1MCwyNiArNzUwLDI2IEBAIHZv
aWQgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3RoYXcoRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMp
CiAgKgogICogQHJldHVybiAjRUlOQV9UUlVFIG9uIHN1Y2Nlc3MsICNFSU5BX0ZBTFNFIG90aGVy
d2lzZS4KICAqLwotRWluYV9Cb29sIGV3a190aWxlX3VudXNlZF9jYWNoZV90aWxlX2dldChFd2tf
VGlsZV9VbnVzZWRfQ2FjaGUgKnR1YywgRXdrX1RpbGUgKnQpCitFaW5hX0Jvb2wgZXdrX3RpbGVf
dW51c2VkX2NhY2hlX3RpbGVfZ2V0KEV3a19UaWxlX1VudXNlZF9DYWNoZSogdHVjLCBFd2tfVGls
ZSogdGlsZSkKIHsKLSAgICBFaW5hX0xpc3QgKmUsICpsOworICAgIEVpbmFfTGlzdCogZSwgKiBs
OwogCiAgICAgdm9pZCogaXRlbTsKICAgICBlID0gMDsKICAgICBFSU5BX0xJU1RfRk9SRUFDSCh0
dWMtPmVudHJpZXMubGlzdCwgbCwgaXRlbSkgewogICAgICAgICBFd2tfVGlsZV9VbnVzZWRfQ2Fj
aGVfRW50cnkqIGVudHJ5ID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGVfVW51c2VkX0NhY2hlX0VudHJ5
Kj4oaXRlbSk7Ci0gICAgICAgIGlmIChlbnRyeS0+dGlsZSA9PSB0KSB7CisgICAgICAgIGlmIChl
bnRyeS0+dGlsZSA9PSB0aWxlKSB7CiAgICAgICAgICAgICBlID0gbDsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgfQogICAgIGlmICghZSkgewotICAgICAgICBFUlIoInRpbGUg
JXAgbm90IGZvdW5kIGluIGNhY2hlICVwIiwgdCwgdHVjKTsKKyAgICAgICAgRVJSKCJ0aWxlICVw
IG5vdCBmb3VuZCBpbiBjYWNoZSAlcCIsIHRpbGUsIHR1Yyk7CiAgICAgICAgIHJldHVybiBFSU5B
X0ZBTFNFOwogICAgIH0KIAogICAgIHR1Yy0+ZW50cmllcy5jb3VudC0tOwotICAgIHR1Yy0+bWVt
b3J5LnVzZWQgLT0gc2l6ZW9mKEV3a19UaWxlKSArIHQtPmJ5dGVzOworICAgIHR1Yy0+bWVtb3J5
LnVzZWQgLT0gc2l6ZW9mKEV3a19UaWxlKSArIHRpbGUtPmJ5dGVzOwogICAgIHR1Yy0+ZW50cmll
cy5saXN0ID0gZWluYV9saXN0X3JlbW92ZV9saXN0KHR1Yy0+ZW50cmllcy5saXN0LCBlKTsKICAg
ICBmcmVlKGl0ZW0pOwogCkBAIC03NzksNyArNzc5LDcgQEAgRWluYV9Cb29sIGV3a190aWxlX3Vu
dXNlZF9jYWNoZV90aWxlX2dldChFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YywgRXdrX1RpbGUg
KnQKIC8qKgogICogUHV0IHRpbGUgaW50byBjYWNoZSBvZiB1bnVzZWQgdGlsZXMsIGFkZGluZyBp
dCB0byB0aGUgY2FjaGUuCiAgKgotICogVGhpcyBzaG91bGQgYmUgY2FsbGVkIHdoZW4gQGMgdC0+
dmlzaWJsZSBpcyBAYyAwIGFuZCBubyBvYmplY3RzIGFyZQorICogVGhpcyBzaG91bGQgYmUgY2Fs
bGVkIHdoZW4gQGMgdGlsZS0+dmlzaWJsZSBpcyBAYyAwIGFuZCBubyBvYmplY3RzIGFyZQogICog
dXNpbmcgdGhlIHRpbGUgYW55bW9yZSwgbWFraW5nIGl0IGF2YWlsYWJsZSB0byBiZSBleHBpcmVk
IGFuZCBoYXZlCiAgKiBpdHMgbWVtb3J5IHJlcGxhY2VkLgogICoKQEAgLTc5Myw1NSArNzkzLDU1
IEBAIEVpbmFfQm9vbCBld2tfdGlsZV91bnVzZWRfY2FjaGVfdGlsZV9nZXQoRXdrX1RpbGVfVW51
c2VkX0NhY2hlICp0dWMsIEV3a19UaWxlICp0CiAgKiBAcGFyYW0gdGlsZV9mcmVlX2NiIGZ1bmN0
aW9uIHVzZWQgdG8gZnJlZSB0aWxlcy4KICAqIEBwYXJhbSBkYXRhIGNvbnRleHQgdG8gZ2l2ZSBi
YWNrIHRvIEBhIHRpbGVfZnJlZV9jYiBhcyBmaXJzdCBhcmd1bWVudC4KICAqCi0gKiBAcmV0dXJu
ICNFSU5BX1RSVUUgb24gc3VjY2VzcywgI0VJTkFfRkFMU0Ugb3RoZXJ3aXNlLiBJZiBAYyB0LT52
aXNpYmxlCisgKiBAcmV0dXJuICNFSU5BX1RSVUUgb24gc3VjY2VzcywgI0VJTkFfRkFMU0Ugb3Ro
ZXJ3aXNlLiBJZiBAYyB0aWxlLT52aXNpYmxlCiAgKiAgICAgICAgIGlzIG5vdCAjRUlOQV9GQUxT
RSwgdGhlbiBpdCB3aWxsIHJldHVybiAjRUlOQV9GQUxTRS4KICAqCiAgKiBAc2VlIGV3a190aWxl
X3VudXNlZF9jYWNoZV9hdXRvX2ZsdXNoKCkKICAqLwotRWluYV9Cb29sIGV3a190aWxlX3VudXNl
ZF9jYWNoZV90aWxlX3B1dChFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YywgRXdrX1RpbGUgKnQs
IHZvaWQgKCp0aWxlX2ZyZWVfY2IpKHZvaWQgKmRhdGEsIEV3a19UaWxlICp0KSwgY29uc3Qgdm9p
ZCAqZGF0YSkKK0VpbmFfQm9vbCBld2tfdGlsZV91bnVzZWRfY2FjaGVfdGlsZV9wdXQoRXdrX1Rp
bGVfVW51c2VkX0NhY2hlKiB0dWMsIEV3a19UaWxlKiB0aWxlLCB2b2lkICgqIHRpbGVfZnJlZV9j
Yikodm9pZCogZGF0YSwgRXdrX1RpbGUqIHRpbGUpLCBjb25zdCB2b2lkKiBkYXRhKQogewotICAg
IEV3a19UaWxlX1VudXNlZF9DYWNoZV9FbnRyeSAqZTsKKyAgICBFd2tfVGlsZV9VbnVzZWRfQ2Fj
aGVfRW50cnkqIHVjZTsKIAotICAgIGlmICh0LT52aXNpYmxlKSB7Ci0gICAgICAgIEVSUigidGls
ZT0lcCBpcyBub3QgdW51c2VkICh2aXNpYmxlPSVkKSIsIHQsIHQtPnZpc2libGUpOworICAgIGlm
ICh0aWxlLT52aXNpYmxlKSB7CisgICAgICAgIEVSUigidGlsZT0lcCBpcyBub3QgdW51c2VkICh2
aXNpYmxlPSVkKSIsIHRpbGUsIHRpbGUtPnZpc2libGUpOwogICAgICAgICByZXR1cm4gRUlOQV9G
QUxTRTsKICAgICB9CiAKLSAgICBlID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGVfVW51c2VkX0NhY2hl
X0VudHJ5Kj4obWFsbG9jKHNpemVvZihFd2tfVGlsZV9VbnVzZWRfQ2FjaGVfRW50cnkpKSk7Ci0g
ICAgaWYgKCFlKQorICAgIHVjZSA9IHN0YXRpY19jYXN0PEV3a19UaWxlX1VudXNlZF9DYWNoZV9F
bnRyeSo+KG1hbGxvYyhzaXplb2YoRXdrX1RpbGVfVW51c2VkX0NhY2hlX0VudHJ5KSkpOworICAg
IGlmICghdWNlKQogICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKIAotICAgIHR1Yy0+ZW50cmll
cy5saXN0ID0gZWluYV9saXN0X2FwcGVuZCh0dWMtPmVudHJpZXMubGlzdCwgZSk7CisgICAgdHVj
LT5lbnRyaWVzLmxpc3QgPSBlaW5hX2xpc3RfYXBwZW5kKHR1Yy0+ZW50cmllcy5saXN0LCB1Y2Up
OwogICAgIGlmIChlaW5hX2Vycm9yX2dldCgpKSB7CiAgICAgICAgIEVSUigiTGlzdCBhbGxvY2F0
aW9uIGZhaWxlZCIpOwogICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKICAgICB9CiAKLSAgICBl
LT50aWxlID0gdDsKLSAgICBlLT53ZWlnaHQgPSAwOyAvKiBjYWxjdWxhdGVkIGp1c3QgYmVmb3Jl
IHNvcnQgKi8KLSAgICBlLT50aWxlX2ZyZWUuY2IgPSB0aWxlX2ZyZWVfY2I7Ci0gICAgZS0+dGls
ZV9mcmVlLmRhdGEgPSAodm9pZCAqKWRhdGE7CisgICAgdWNlLT50aWxlID0gdGlsZTsKKyAgICB1
Y2UtPndlaWdodCA9IDA7IC8qIGNhbGN1bGF0ZWQganVzdCBiZWZvcmUgc29ydCAqLworICAgIHVj
ZS0+dGlsZV9mcmVlLmNiID0gdGlsZV9mcmVlX2NiOworICAgIHVjZS0+dGlsZV9mcmVlLmRhdGEg
PSAodm9pZCopZGF0YTsKIAogICAgIHR1Yy0+ZW50cmllcy5jb3VudCsrOwotICAgIHR1Yy0+bWVt
b3J5LnVzZWQgKz0gc2l6ZW9mKEV3a19UaWxlKSArIHQtPmJ5dGVzOworICAgIHR1Yy0+bWVtb3J5
LnVzZWQgKz0gc2l6ZW9mKEV3a19UaWxlKSArIHRpbGUtPmJ5dGVzOwogCiAgICAgcmV0dXJuIEVJ
TkFfVFJVRTsKIH0KIAotdm9pZCBld2tfdGlsZV91bnVzZWRfY2FjaGVfZGJnKGNvbnN0IEV3a19U
aWxlX1VudXNlZF9DYWNoZSAqdHVjKQordm9pZCBld2tfdGlsZV91bnVzZWRfY2FjaGVfZGJnKGNv
bnN0IEV3a19UaWxlX1VudXNlZF9DYWNoZSogdHVjKQogewogICAgIHZvaWQqIGl0ZW07Ci0gICAg
RWluYV9MaXN0ICpsOworICAgIEVpbmFfTGlzdCogbDsKICAgICBpbnQgY291bnQgPSAwOwogICAg
IHByaW50ZigiQ2FjaGUgb2YgdW51c2VkIHRpbGVzOiBlbnRyaWVzOiAlenUvJXp1LCBtZW1vcnk6
ICV6dS8lenVcbiIsCiAgICAgICAgICAgIHR1Yy0+ZW50cmllcy5jb3VudCwgdHVjLT5lbnRyaWVz
LmFsbG9jYXRlZCwKICAgICAgICAgICAgdHVjLT5tZW1vcnkudXNlZCwgdHVjLT5tZW1vcnkubWF4
KTsKIAogICAgIEVJTkFfTElTVF9GT1JFQUNIKHR1Yy0+ZW50cmllcy5saXN0LCBsLCBpdGVtKSB7
Ci0gICAgICAgIGNvbnN0IEV3a19UaWxlICp0ID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGVfVW51c2Vk
X0NhY2hlX0VudHJ5Kj4oaXRlbSktPnRpbGU7CisgICAgICAgIGNvbnN0IEV3a19UaWxlKiB0aWxl
ID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGVfVW51c2VkX0NhY2hlX0VudHJ5Kj4oaXRlbSktPnRpbGU7
CiAgICAgICAgIHByaW50ZigiIFslM2x1LCUzbHUgKyAlZHglZCBAICUwLjNmXSVjIiwKLSAgICAg
ICAgICAgICAgIHQtPmNvbCwgdC0+cm93LCB0LT53LCB0LT5oLCB0LT56b29tLAotICAgICAgICAg
ICAgICAgdC0+dmlzaWJsZSA/ICcqJzogJyAnKTsKKyAgICAgICAgICAgICAgIHRpbGUtPmNvbCwg
dGlsZS0+cm93LCB0aWxlLT53aWR0aCwgdGlsZS0+aGVpZ2h0LCB0aWxlLT56b29tLAorICAgICAg
ICAgICAgICAgdGlsZS0+dmlzaWJsZSA/ICcqJyA6ICcgJyk7CiAKICAgICAgICAgaWYgKCEoY291
bnQgJSA0KSkKICAgICAgICAgICAgIHByaW50ZigiXG4iKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfbW9kZWwuaCBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9l
d2tfdGlsZWRfbW9kZWwuaAppbmRleCBlNjVmMzEwLi44NWRlMDE2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX21vZGVsLmgKKysrIGIvU291cmNlL1dlYktpdC9l
ZmwvZXdrL2V3a190aWxlZF9tb2RlbC5oCkBAIC0zNCw3ICszNCw3IEBAIHZvaWQgZXdrX3RpbGVf
aGlkZShFd2tfVGlsZSogdCk7CiBFaW5hX0Jvb2wgZXdrX3RpbGVfdmlzaWJsZV9nZXQoRXdrX1Rp
bGUqIHQpOwogdm9pZCBld2tfdGlsZV91cGRhdGVfZnVsbChFd2tfVGlsZSogdCk7CiB2b2lkIGV3
a190aWxlX3VwZGF0ZV9hcmVhKEV3a19UaWxlKiB0LCBjb25zdCBFaW5hX1JlY3RhbmdsZSogcik7
Ci12b2lkIGV3a190aWxlX3VwZGF0ZXNfcHJvY2VzcyhFd2tfVGlsZSogdCwgdm9pZCAoKiBjYiko
dm9pZCogZGF0YSwgRXdrX1RpbGUqIHQsIGNvbnN0IEVpbmFfUmVjdGFuZ2xlKiB1cGRhdGUpLCBj
b25zdCB2b2lkKiBkYXRhKTsKK3ZvaWQgZXdrX3RpbGVfdXBkYXRlc19wcm9jZXNzKEV3a19UaWxl
KiB0LCB2b2lkICgqY2IpKHZvaWQqIGRhdGEsIEV3a19UaWxlKiB0LCBjb25zdCBFaW5hX1JlY3Rh
bmdsZSogdXBkYXRlKSwgY29uc3Qgdm9pZCogZGF0YSk7CiB2b2lkIGV3a190aWxlX3VwZGF0ZXNf
Y2xlYXIoRXdrX1RpbGUqIHQpOwogCiAvKiBjYWNoZSBvZiB1bnVzZWQgdGlsZXMgKi8KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0
L2VmbC9ld2svZXdrX3ZpZXcuY3BwCmluZGV4IDU5OTA2ZTMuLmY4Njc2M2YgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9l
ZmwvZXdrL2V3a192aWV3LmNwcApAQCAtMTc3LDQ0ICsxNzcsNDQgQEAgc3RydWN0IF9Fd2tfVmll
d19Qcml2YXRlX0RhdGEgewogfTsKIAogI2lmbmRlZiBFV0tfVFlQRV9DSEVDSwotI2RlZmluZSBF
V0tfVklFV19UWVBFX0NIRUNLKG8sIC4uLikgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBFV0tf
VklFV19UWVBFX0NIRUNLKGV3a1ZpZXcsIC4uLikgZG8geyB9IHdoaWxlICgwKQogI2Vsc2UKLSNk
ZWZpbmUgRVdLX1ZJRVdfVFlQRV9DSEVDSyhvLCAuLi4pICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyNkZWZpbmUgRVdLX1ZJRVdfVFlQRV9DSEVDSyhld2tWaWV3LCAuLi4p
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBkbyB7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
LSAgICAgICAgY29uc3QgY2hhciogX3RtcF9vdHlwZSA9IGV2YXNfb2JqZWN0X3R5cGVfZ2V0KG8p
OyAgICAgICAgICAgICAgIFwKLSAgICAgICAgY29uc3QgRXZhc19TbWFydCogX3RtcF9zID0gZXZh
c19vYmplY3Rfc21hcnRfc21hcnRfZ2V0KG8pOyAgICAgIFwKKyAgICAgICAgY29uc3QgY2hhciog
X3RtcF9vdHlwZSA9IGV2YXNfb2JqZWN0X3R5cGVfZ2V0KGV3a1ZpZXcpOyAgICAgICAgICAgICAg
IFwKKyAgICAgICAgY29uc3QgRXZhc19TbWFydCogX3RtcF9zID0gZXZhc19vYmplY3Rfc21hcnRf
c21hcnRfZ2V0KGV3a1ZpZXcpOyAgICAgIFwKICAgICAgICAgaWYgKEVJTkFfVU5MSUtFTFkoIV90
bXBfcykpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAg
IEVJTkFfTE9HX0NSSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICAgICAgICAgICAgICAoIiVwICglcykgaXMgbm90IGEgc21hcnQgb2JqZWN0ISIs
IG8sICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAoIiVwICglcykgaXMgbm90
IGEgc21hcnQgb2JqZWN0ISIsIGV3a1ZpZXcsICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAg
ICAgICAgICBfdG1wX290eXBlID8gX3RtcF9vdHlwZSA6ICIobnVsbCkiKTsgICAgICAgICAgICAg
ICAgICAgXAogICAgICAgICAgICAgcmV0dXJuIF9fVkFfQVJHU19fOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBjb25z
dCBFdmFzX1NtYXJ0X0NsYXNzKiBfdG1wX3NjID0gZXZhc19zbWFydF9jbGFzc19nZXQoX3RtcF9z
KTsgXAogICAgICAgICBpZiAoRUlOQV9VTkxJS0VMWSghX3RtcF9zYykpIHsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgRUlOQV9MT0dfQ1JJVCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAg
ICgiJXAgKCVzKSBpcyBub3QgYSBzbWFydCBvYmplY3QhIiwgbywgICAgICAgICAgICAgICAgICAg
XAorICAgICAgICAgICAgICAgICgiJXAgKCVzKSBpcyBub3QgYSBzbWFydCBvYmplY3QhIiwgZXdr
VmlldywgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgIF90bXBfb3R5cGUgPyBf
dG1wX290eXBlIDogIihudWxsKSIpOyAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICBy
ZXR1cm4gX19WQV9BUkdTX187ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCiAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIGlmIChFSU5BX1VOTElLRUxZKF90bXBfc2Mt
PmRhdGEgIT0gRVdLX1ZJRVdfVFlQRV9TVFIpKSB7ICAgICAgICBcCiAgICAgICAgICAgICBFSU5B
X0xPR19DUklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CiAgICAgICAgICAgICAgICAgKCIlcCAoJXMpIGlzIG5vdCBvZiBhbiBld2tfdmlldyAobmVlZCAl
cCwgZ290ICVwKSEiLCAgICBcCi0gICAgICAgICAgICAgICAgbywgX3RtcF9vdHlwZSA/IF90bXBf
b3R5cGUgOiAiKG51bGwpIiwgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBld2tW
aWV3LCBfdG1wX290eXBlID8gX3RtcF9vdHlwZSA6ICIobnVsbCkiLCAgICAgICAgICAgICAgICAg
XAogICAgICAgICAgICAgICAgIEVXS19WSUVXX1RZUEVfU1RSLCBfdG1wX3NjLT5kYXRhKTsgICAg
ICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICByZXR1cm4gX19WQV9BUkdTX187ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIH0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAg
ICAgfSB3aGlsZSAoMCkKICNlbmRpZgogCi0jZGVmaW5lIEVXS19WSUVXX1NEX0dFVChvLCBwdHIp
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIEV3a19WaWV3X1NtYXJ0X0Rh
dGEqIHB0ciA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihldmFzX29iamVjdF9z
bWFydF9kYXRhX2dldChvKSkKKyNkZWZpbmUgRVdLX1ZJRVdfU0RfR0VUKGV3a1ZpZXcsIHB0cikg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgRXdrX1ZpZXdfU21hcnRfRGF0
YSogcHRyID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGV2YXNfb2JqZWN0X3Nt
YXJ0X2RhdGFfZ2V0KGV3a1ZpZXcpKQogCi0jZGVmaW5lIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRV
Uk4obywgcHRyLCAuLi4pICAgICAgICAgIFwKLSAgICBFV0tfVklFV19UWVBFX0NIRUNLKG8sIF9f
VkFfQVJHU19fKTsgICAgICAgICAgICAgICAgXAotICAgIEVXS19WSUVXX1NEX0dFVChvLCBwdHIp
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIEVXS19WSUVXX1NEX0dFVF9P
Ul9SRVRVUk4oZXdrVmlldywgcHRyLCAuLi4pICAgICAgICAgIFwKKyAgICBFV0tfVklFV19UWVBF
X0NIRUNLKGV3a1ZpZXcsIF9fVkFfQVJHU19fKTsgICAgICAgICAgICAgICAgXAorICAgIEVXS19W
SUVXX1NEX0dFVChld2tWaWV3LCBwdHIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAg
ICAgaWYgKCFwdHIpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
ICAgICAgICAgQ1JJVElDQUwoIm5vIHNtYXJ0IGRhdGEgZm9yIG9iamVjdCAlcCAoJXMpIiwgICAg
XAotICAgICAgICAgICAgICAgICBvLCBldmFzX29iamVjdF90eXBlX2dldChvKSk7ICAgICAgICAg
ICBcCisgICAgICAgICAgICAgICAgIGV3a1ZpZXcsIGV2YXNfb2JqZWN0X3R5cGVfZ2V0KGV3a1Zp
ZXcpKTsgICAgICAgICAgIFwKICAgICAgICAgcmV0dXJuIF9fVkFfQVJHU19fOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAogICAgIH0KIApAQCAtMjI5LDEyICsyMjksMTIgQEAgc3RydWN0
IF9Fd2tfVmlld19Qcml2YXRlX0RhdGEgewogICAgICAgICByZXR1cm4gX19WQV9BUkdTX187ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICB9CiAKLXN0YXRpYyB2b2lk
IF9ld2tfdmlld19zbWFydF9jaGFuZ2VkKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkKQorc3RhdGlj
IHZvaWQgX2V3a192aWV3X3NtYXJ0X2NoYW5nZWQoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnRE
YXRhKQogewotICAgIGlmIChzZC0+Y2hhbmdlZC5hbnkpCisgICAgaWYgKHNtYXJ0RGF0YS0+Y2hh
bmdlZC5hbnkpCiAgICAgICAgIHJldHVybjsKLSAgICBzZC0+Y2hhbmdlZC5hbnkgPSBFSU5BX1RS
VUU7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2hhbmdlZChzZC0+c2VsZik7CisgICAgc21hcnRE
YXRhLT5jaGFuZ2VkLmFueSA9IEVJTkFfVFJVRTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jaGFu
Z2VkKHNtYXJ0RGF0YS0+c2VsZik7CiB9CiAKIHN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3Jl
cGFpbnRzX3Jlc2l6ZShFd2tfVmlld19Qcml2YXRlX0RhdGEqIHByaXYsIHNpemVfdCBzaXplKQpA
QCAtMjQ5LDcgKzI0OSw3IEBAIHN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3JlcGFpbnRzX3Jl
c2l6ZShFd2tfVmlld19Qcml2YXRlX0RhdGEqIHByaXYsIHNpemVfdCBzCiAgICAgcmV0dXJuIEVJ
TkFfVFJVRTsKIH0KIAotc3RhdGljIHZvaWQgX2V3a192aWV3X3JlcGFpbnRfYWRkKEV3a19WaWV3
X1ByaXZhdGVfRGF0YSogcHJpdiwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHksIEV2YXNfQ29v
cmQgdywgRXZhc19Db29yZCBoKQorc3RhdGljIHZvaWQgX2V3a192aWV3X3JlcGFpbnRfYWRkKEV3
a19WaWV3X1ByaXZhdGVfRGF0YSogcHJpdiwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHksIEV2
YXNfQ29vcmQgd2lkdGgsIEV2YXNfQ29vcmQgaGVpZ2h0KQogewogICAgIEVpbmFfUmVjdGFuZ2xl
KiByOwogCkBAIC0yNjksMTAgKzI2OSwxMCBAQCBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfcmVwYWlu
dF9hZGQoRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKiBwcml2LCBFdmFzX0Nvb3JkIHgsIEV2YQogCiAg
ICAgci0+eCA9IHg7CiAgICAgci0+eSA9IHk7Ci0gICAgci0+dyA9IHc7Ci0gICAgci0+aCA9IGg7
CisgICAgci0+dyA9IHdpZHRoOworICAgIHItPmggPSBoZWlnaHQ7CiAKLSAgICBEQkcoImFkZCBy
ZXBhaW50ICVkLCAlZCslZHglZCIsIHgsIHksIHcsIGgpOworICAgIERCRygiYWRkIHJlcGFpbnQg
JWQsICVkKyVkeCVkIiwgeCwgeSwgd2lkdGgsIGhlaWdodCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9l
d2tfdmlld19yZXBhaW50c19mbHVzaChFd2tfVmlld19Qcml2YXRlX0RhdGEqIHByaXYpCkBAIC0y
OTUsMTYgKzI5NSwxNiBAQCBzdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19zY3JvbGxzX3Jlc2l6
ZShFd2tfVmlld19Qcml2YXRlX0RhdGEqIHByaXYsIHNpemVfdCBzaQogICAgIHJldHVybiBFSU5B
X1RSVUU7CiB9CiAKLXN0YXRpYyB2b2lkIF9ld2tfdmlld19zY3JvbGxfYWRkKEV3a19WaWV3X1By
aXZhdGVfRGF0YSogcHJpdiwgRXZhc19Db29yZCBkeCwgRXZhc19Db29yZCBkeSwgRXZhc19Db29y
ZCB4LCBFdmFzX0Nvb3JkIHksIEV2YXNfQ29vcmQgdywgRXZhc19Db29yZCBoLCBFaW5hX0Jvb2wg
bWFpbl9zY3JvbGwpCitzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc2Nyb2xsX2FkZChFd2tfVmlld19Q
cml2YXRlX0RhdGEqIHByaXYsIEV2YXNfQ29vcmQgZHgsIEV2YXNfQ29vcmQgZHksIEV2YXNfQ29v
cmQgeCwgRXZhc19Db29yZCB5LCBFdmFzX0Nvb3JkIHdpZHRoLCBFdmFzX0Nvb3JkIGhlaWdodCwg
RWluYV9Cb29sIG1haW5fc2Nyb2xsKQogewogICAgIEV3a19TY3JvbGxfUmVxdWVzdCogcjsKICAg
ICBFd2tfU2Nyb2xsX1JlcXVlc3QqIHJfZW5kOwotICAgIEV2YXNfQ29vcmQgeDIgPSB4ICsgdywg
eTIgPSB5ICsgaDsKKyAgICBFdmFzX0Nvb3JkIHgyID0geCArIHdpZHRoLCB5MiA9IHkgKyBoZWln
aHQ7CiAKICAgICByID0gcHJpdi0+c2Nyb2xscy5hcnJheTsKICAgICByX2VuZCA9IHIgKyBwcml2
LT5zY3JvbGxzLmNvdW50OwogICAgIGZvciAoOyByIDwgcl9lbmQ7IHIrKykgewotICAgICAgICBp
ZiAoci0+eCA9PSB4ICYmIHItPnkgPT0geSAmJiByLT53ID09IHcgJiYgci0+aCA9PSBoKSB7Cisg
ICAgICAgIGlmIChyLT54ID09IHggJiYgci0+eSA9PSB5ICYmIHItPncgPT0gd2lkdGggJiYgci0+
aCA9PSBoZWlnaHQpIHsKICAgICAgICAgICAgIERCRygicmVnaW9uIGFscmVhZHkgc2Nyb2xsZWQg
JWQsJWQrJWR4JWQgJSswM2QsJSswM2QgYWRkICIKICAgICAgICAgICAgICAgICAiJSswM2QsJSsw
M2QiLAogICAgICAgICAgICAgICAgIHItPngsIHItPnksIHItPncsIHItPmgsIHItPmR4LCByLT5k
eSwgZHgsIGR5KTsKQEAgLTMzNiwxNCArMzM2LDE0IEBAIHN0YXRpYyB2b2lkIF9ld2tfdmlld19z
Y3JvbGxfYWRkKEV3a19WaWV3X1ByaXZhdGVfRGF0YSogcHJpdiwgRXZhc19Db29yZCBkeCwgRXZh
CiAKICAgICByLT54ID0geDsKICAgICByLT55ID0geTsKLSAgICByLT53ID0gdzsKLSAgICByLT5o
ID0gaDsKKyAgICByLT53ID0gd2lkdGg7CisgICAgci0+aCA9IGhlaWdodDsKICAgICByLT54MiA9
IHgyOwogICAgIHItPnkyID0geTI7CiAgICAgci0+ZHggPSBkeDsKICAgICByLT5keSA9IGR5Owog
ICAgIHItPm1haW5fc2Nyb2xsID0gbWFpbl9zY3JvbGw7Ci0gICAgREJHKCJhZGQgc2Nyb2xsIGlu
IHJlZ2lvbjogJWQsICVkKyVkeCVkICUrMDNkLCAlKzAzZCIsIHgsIHksIHcsIGgsIGR4LCBkeSk7
CisgICAgREJHKCJhZGQgc2Nyb2xsIGluIHJlZ2lvbjogJWQsICVkKyVkeCVkICUrMDNkLCAlKzAz
ZCIsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGR4LCBkeSk7CiAKICAgICBFaW5hX1JlY3RhbmdsZSog
cHI7CiAgICAgRWluYV9SZWN0YW5nbGUqIHByX2VuZDsKQEAgLTM2NiwxMSArMzY2LDExIEBAIHN0
YXRpYyB2b2lkIF9ld2tfdmlld19zY3JvbGxzX2ZsdXNoKEV3a19WaWV3X1ByaXZhdGVfRGF0YSog
cHJpdikKIH0KIAogLy8gRGVmYXVsdCBFdmVudCBIYW5kbGluZyAvLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi1zdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19z
bWFydF9mb2N1c19pbihFd2tfVmlld19TbWFydF9EYXRhKiBzZCkKK3N0YXRpYyBFaW5hX0Jvb2wg
X2V3a192aWV3X3NtYXJ0X2ZvY3VzX2luKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSkK
IHsKLSAgICBFV0tfVklFV19QUklWX0dFVChzZCwgcHJpdik7CisgICAgRVdLX1ZJRVdfUFJJVl9H
RVQoc21hcnREYXRhLCBwcml2KTsKICAgICBXZWJDb3JlOjpGb2N1c0NvbnRyb2xsZXIqIGZjID0g
cHJpdi0+cGFnZS0+Zm9jdXNDb250cm9sbGVyKCk7Ci0gICAgREJHKCJvPSVwLCBmYz0lcCIsIHNk
LT5zZWxmLCBmYyk7CisgICAgREJHKCJld2tWaWV3PSVwLCBmYz0lcCIsIHNtYXJ0RGF0YS0+c2Vs
ZiwgZmMpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChmYywgRUlOQV9GQUxT
RSk7CiAKICAgICBmYy0+c2V0QWN0aXZlKHRydWUpOwpAQCAtMzc4LDExICszNzgsMTEgQEAgc3Rh
dGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfc21hcnRfZm9jdXNfaW4oRXdrX1ZpZXdfU21hcnRfRGF0
YSogc2QpCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotc3RhdGljIEVpbmFfQm9vbCBfZXdr
X3ZpZXdfc21hcnRfZm9jdXNfb3V0KEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkKQorc3RhdGljIEVp
bmFfQm9vbCBfZXdrX3ZpZXdfc21hcnRfZm9jdXNfb3V0KEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNt
YXJ0RGF0YSkKIHsKLSAgICBFV0tfVklFV19QUklWX0dFVChzZCwgcHJpdik7CisgICAgRVdLX1ZJ
RVdfUFJJVl9HRVQoc21hcnREYXRhLCBwcml2KTsKICAgICBXZWJDb3JlOjpGb2N1c0NvbnRyb2xs
ZXIqIGZjID0gcHJpdi0+cGFnZS0+Zm9jdXNDb250cm9sbGVyKCk7Ci0gICAgREJHKCJvPSVwLCBm
Yz0lcCIsIHNkLT5zZWxmLCBmYyk7CisgICAgREJHKCJld2tWaWV3PSVwLCBmYz0lcCIsIHNtYXJ0
RGF0YS0+c2VsZiwgZmMpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChmYywg
RUlOQV9GQUxTRSk7CiAKICAgICBmYy0+c2V0QWN0aXZlKGZhbHNlKTsKQEAgLTM5MCw3MSArMzkw
LDcxIEBAIHN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3NtYXJ0X2ZvY3VzX291dChFd2tfVmll
d19TbWFydF9EYXRhKiBzZCkKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi1zdGF0aWMgRWlu
YV9Cb29sIF9ld2tfdmlld19zbWFydF9tb3VzZV93aGVlbChFd2tfVmlld19TbWFydF9EYXRhKiBz
ZCwgY29uc3QgRXZhc19FdmVudF9Nb3VzZV9XaGVlbCogZXYpCitzdGF0aWMgRWluYV9Cb29sIF9l
d2tfdmlld19zbWFydF9tb3VzZV93aGVlbChFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEs
IGNvbnN0IEV2YXNfRXZlbnRfTW91c2VfV2hlZWwqIHdoZWVsRXZlbnQpCiB7Ci0gICAgcmV0dXJu
IGV3a19mcmFtZV9mZWVkX21vdXNlX3doZWVsKHNkLT5tYWluX2ZyYW1lLCBldik7CisgICAgcmV0
dXJuIGV3a19mcmFtZV9mZWVkX21vdXNlX3doZWVsKHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSwgd2hl
ZWxFdmVudCk7CiB9CiAKLXN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3NtYXJ0X21vdXNlX2Rv
d24oRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QsIGNvbnN0IEV2YXNfRXZlbnRfTW91c2VfRG93biog
ZXYpCitzdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19zbWFydF9tb3VzZV9kb3duKEV3a19WaWV3
X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSwgY29uc3QgRXZhc19FdmVudF9Nb3VzZV9Eb3duKiBkb3du
RXZlbnQpCiB7Ci0gICAgcmV0dXJuIGV3a19mcmFtZV9mZWVkX21vdXNlX2Rvd24oc2QtPm1haW5f
ZnJhbWUsIGV2KTsKKyAgICByZXR1cm4gZXdrX2ZyYW1lX2ZlZWRfbW91c2VfZG93bihzbWFydERh
dGEtPm1haW5fZnJhbWUsIGRvd25FdmVudCk7CiB9CiAKLXN0YXRpYyBFaW5hX0Jvb2wgX2V3a192
aWV3X3NtYXJ0X21vdXNlX3VwKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkLCBjb25zdCBFdmFzX0V2
ZW50X01vdXNlX1VwKiBldikKK3N0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3NtYXJ0X21vdXNl
X3VwKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSwgY29uc3QgRXZhc19FdmVudF9Nb3Vz
ZV9VcCogdXBFdmVudCkKIHsKLSAgICByZXR1cm4gZXdrX2ZyYW1lX2ZlZWRfbW91c2VfdXAoc2Qt
Pm1haW5fZnJhbWUsIGV2KTsKKyAgICByZXR1cm4gZXdrX2ZyYW1lX2ZlZWRfbW91c2VfdXAoc21h
cnREYXRhLT5tYWluX2ZyYW1lLCB1cEV2ZW50KTsKIH0KIAotc3RhdGljIEVpbmFfQm9vbCBfZXdr
X3ZpZXdfc21hcnRfbW91c2VfbW92ZShFd2tfVmlld19TbWFydF9EYXRhKiBzZCwgY29uc3QgRXZh
c19FdmVudF9Nb3VzZV9Nb3ZlKiBldikKK3N0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3NtYXJ0
X21vdXNlX21vdmUoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhLCBjb25zdCBFdmFzX0V2
ZW50X01vdXNlX01vdmUqIG1vdmVFdmVudCkKIHsKLSAgICByZXR1cm4gZXdrX2ZyYW1lX2ZlZWRf
bW91c2VfbW92ZShzZC0+bWFpbl9mcmFtZSwgZXYpOworICAgIHJldHVybiBld2tfZnJhbWVfZmVl
ZF9tb3VzZV9tb3ZlKHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSwgbW92ZUV2ZW50KTsKIH0KIAotc3Rh
dGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfc21hcnRfa2V5X2Rvd24oRXdrX1ZpZXdfU21hcnRfRGF0
YSogc2QsIGNvbnN0IEV2YXNfRXZlbnRfS2V5X0Rvd24qIGV2KQorc3RhdGljIEVpbmFfQm9vbCBf
ZXdrX3ZpZXdfc21hcnRfa2V5X2Rvd24oRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhLCBj
b25zdCBFdmFzX0V2ZW50X0tleV9Eb3duKiBkb3duRXZlbnQpCiB7Ci0gICAgRXZhc19PYmplY3Qq
IGZyYW1lID0gZXdrX3ZpZXdfZnJhbWVfZm9jdXNlZF9nZXQoc2QtPnNlbGYpOworICAgIEV2YXNf
T2JqZWN0KiBmcmFtZSA9IGV3a192aWV3X2ZyYW1lX2ZvY3VzZWRfZ2V0KHNtYXJ0RGF0YS0+c2Vs
Zik7CiAKICAgICBpZiAoIWZyYW1lKQotICAgICAgICBmcmFtZSA9IHNkLT5tYWluX2ZyYW1lOwor
ICAgICAgICBmcmFtZSA9IHNtYXJ0RGF0YS0+bWFpbl9mcmFtZTsKIAotICAgIHJldHVybiBld2tf
ZnJhbWVfZmVlZF9rZXlfZG93bihmcmFtZSwgZXYpOworICAgIHJldHVybiBld2tfZnJhbWVfZmVl
ZF9rZXlfZG93bihmcmFtZSwgZG93bkV2ZW50KTsKIH0KIAotc3RhdGljIEVpbmFfQm9vbCBfZXdr
X3ZpZXdfc21hcnRfa2V5X3VwKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkLCBjb25zdCBFdmFzX0V2
ZW50X0tleV9VcCogZXYpCitzdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19zbWFydF9rZXlfdXAo
RXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhLCBjb25zdCBFdmFzX0V2ZW50X0tleV9VcCog
dXBFdmVudCkKIHsKLSAgICBFdmFzX09iamVjdCogZnJhbWUgPSBld2tfdmlld19mcmFtZV9mb2N1
c2VkX2dldChzZC0+c2VsZik7CisgICAgRXZhc19PYmplY3QqIGZyYW1lID0gZXdrX3ZpZXdfZnJh
bWVfZm9jdXNlZF9nZXQoc21hcnREYXRhLT5zZWxmKTsKIAogICAgIGlmICghZnJhbWUpCi0gICAg
ICAgIGZyYW1lID0gc2QtPm1haW5fZnJhbWU7CisgICAgICAgIGZyYW1lID0gc21hcnREYXRhLT5t
YWluX2ZyYW1lOwogCi0gICAgcmV0dXJuIGV3a19mcmFtZV9mZWVkX2tleV91cChmcmFtZSwgZXYp
OworICAgIHJldHVybiBld2tfZnJhbWVfZmVlZF9rZXlfdXAoZnJhbWUsIHVwRXZlbnQpOwogfQog
Ci1zdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21hcnRfYWRkX2NvbnNvbGVfbWVzc2FnZShFd2tfVmll
d19TbWFydF9EYXRhKiBzZCwgY29uc3QgY2hhciogbWVzc2FnZSwgdW5zaWduZWQgaW50IGxpbmVO
dW1iZXIsIGNvbnN0IGNoYXIqIHNvdXJjZUlEKQorc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0
X2FkZF9jb25zb2xlX21lc3NhZ2UoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhLCBjb25z
dCBjaGFyKiBtZXNzYWdlLCB1bnNpZ25lZCBpbnQgbGluZU51bWJlciwgY29uc3QgY2hhciogc291
cmNlSUQpCiB7CiAgICAgSU5GKCJjb25zb2xlIG1lc3NhZ2U6ICVzIEAlZDogJXNcbiIsIHNvdXJj
ZUlELCBsaW5lTnVtYmVyLCBtZXNzYWdlKTsKIH0KIAotc3RhdGljIHZvaWQgX2V3a192aWV3X3Nt
YXJ0X3J1bl9qYXZhc2NyaXB0X2FsZXJ0KEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkLCBFdmFzX09i
amVjdCogZnJhbWUsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpCitzdGF0aWMgdm9pZCBfZXdrX3ZpZXdf
c21hcnRfcnVuX2phdmFzY3JpcHRfYWxlcnQoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRh
LCBFdmFzX09iamVjdCogZnJhbWUsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpCiB7CiAgICAgSU5GKCJq
YXZhc2NyaXB0IGFsZXJ0OiAlc1xuIiwgbWVzc2FnZSk7CiB9CiAKLXN0YXRpYyBFaW5hX0Jvb2wg
X2V3a192aWV3X3NtYXJ0X3J1bl9qYXZhc2NyaXB0X2NvbmZpcm0oRXdrX1ZpZXdfU21hcnRfRGF0
YSogc2QsIEV2YXNfT2JqZWN0KiBmcmFtZSwgY29uc3QgY2hhciogbWVzc2FnZSkKK3N0YXRpYyBF
aW5hX0Jvb2wgX2V3a192aWV3X3NtYXJ0X3J1bl9qYXZhc2NyaXB0X2NvbmZpcm0oRXdrX1ZpZXdf
U21hcnRfRGF0YSogc21hcnREYXRhLCBFdmFzX09iamVjdCogZnJhbWUsIGNvbnN0IGNoYXIqIG1l
c3NhZ2UpCiB7CiAgICAgSU5GKCJqYXZhc2NyaXB0IGNvbmZpcm06ICVzIiwgbWVzc2FnZSk7CiAg
ICAgSU5GKCJqYXZhc2NyaXB0IGNvbmZpcm0gKEhBUkQgQ09ERUQpPyBZRVMiKTsKICAgICByZXR1
cm4gRUlOQV9UUlVFOwogfQogCi1zdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19zbWFydF9zaG91
bGRfaW50ZXJydXB0X2phdmFzY3JpcHQoRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QpCitzdGF0aWMg
RWluYV9Cb29sIF9ld2tfdmlld19zbWFydF9zaG91bGRfaW50ZXJydXB0X2phdmFzY3JpcHQoRXdr
X1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhKQogewogICAgIElORigic2hvdWxkIGludGVycnVw
dCBqYXZhc2NyaXB0P1xuIgogICAgICAgICAiXHQoSEFSRCBDT0RFRCkgTk8iKTsKICAgICByZXR1
cm4gRUlOQV9GQUxTRTsKIH0KIAotc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfc21hcnRfcnVu
X2phdmFzY3JpcHRfcHJvbXB0KEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkLCBFdmFzX09iamVjdCog
ZnJhbWUsIGNvbnN0IGNoYXIqIG1lc3NhZ2UsIGNvbnN0IGNoYXIqIGRlZmF1bHRWYWx1ZSwgY2hh
cioqIHZhbHVlKQorc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfc21hcnRfcnVuX2phdmFzY3Jp
cHRfcHJvbXB0KEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSwgRXZhc19PYmplY3QqIGZy
YW1lLCBjb25zdCBjaGFyKiBtZXNzYWdlLCBjb25zdCBjaGFyKiBkZWZhdWx0VmFsdWUsIGNoYXIq
KiB2YWx1ZSkKIHsKICAgICAqdmFsdWUgPSBzdHJkdXAoInRlc3QiKTsKICAgICBFaW5hX0Jvb2wg
cmV0ID0gRUlOQV9UUlVFOwpAQCAtNDY4LDcgKzQ2OCw3IEBAIHN0YXRpYyBFaW5hX0Jvb2wgX2V3
a192aWV3X3NtYXJ0X3J1bl9qYXZhc2NyaXB0X3Byb21wdChFd2tfVmlld19TbWFydF9EYXRhKiBz
ZCwKIH0KIAogLy8gRXZlbnQgSGFuZGxpbmcgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi1zdGF0aWMgdm9pZCBfZXdrX3ZpZXdfb25fZm9jdXNf
aW4odm9pZCogZGF0YSwgRXZhcyogZSwgRXZhc19PYmplY3QqIG8sIHZvaWQqIGV2ZW50X2luZm8p
CitzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfb25fZm9jdXNfaW4odm9pZCogZGF0YSwgRXZhcyogZXZl
bnRUeXBlLCBFdmFzX09iamVjdCogY2FsbGJhY2ssIHZvaWQqIGV2ZW50SW5mbykKIHsKICAgICBF
d2tfVmlld19TbWFydF9EYXRhKiBzZCA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEq
PihkYXRhKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpKTsKQEAgLTQ3
Niw3ICs0NzYsNyBAQCBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfb25fZm9jdXNfaW4odm9pZCogZGF0
YSwgRXZhcyogZSwgRXZhc19PYmplY3QqIG8sIHZvaWQqIGV2ZQogICAgIHNkLT5hcGktPmZvY3Vz
X2luKHNkKTsKIH0KIAotc3RhdGljIHZvaWQgX2V3a192aWV3X29uX2ZvY3VzX291dCh2b2lkKiBk
YXRhLCBFdmFzKiBlLCBFdmFzX09iamVjdCogbywgdm9pZCogZXZlbnRfaW5mbykKK3N0YXRpYyB2
b2lkIF9ld2tfdmlld19vbl9mb2N1c19vdXQodm9pZCogZGF0YSwgRXZhcyogZXZlbnRUeXBlLCBF
dmFzX09iamVjdCogY2FsbGJhY2ssIHZvaWQqIGV2ZW50SW5mbykKIHsKICAgICBFd2tfVmlld19T
bWFydF9EYXRhKiBzZCA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihkYXRhKTsK
ICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpKTsKQEAgLTQ4NCw2MyArNDg0
LDYzIEBAIHN0YXRpYyB2b2lkIF9ld2tfdmlld19vbl9mb2N1c19vdXQodm9pZCogZGF0YSwgRXZh
cyogZSwgRXZhc19PYmplY3QqIG8sIHZvaWQqIGV2CiAgICAgc2QtPmFwaS0+Zm9jdXNfb3V0KHNk
KTsKIH0KIAotc3RhdGljIHZvaWQgX2V3a192aWV3X29uX21vdXNlX3doZWVsKHZvaWQqIGRhdGEs
IEV2YXMqIGUsIEV2YXNfT2JqZWN0KiBvLCB2b2lkKiBldmVudF9pbmZvKQorc3RhdGljIHZvaWQg
X2V3a192aWV3X29uX21vdXNlX3doZWVsKHZvaWQqIGRhdGEsIEV2YXMqIGV2ZW50VHlwZSwgRXZh
c19PYmplY3QqIGNhbGxiYWNrLCB2b2lkKiBldmVudEluZm8pCiB7Ci0gICAgRXZhc19FdmVudF9N
b3VzZV9XaGVlbCogZXYgPSBzdGF0aWNfY2FzdDxFdmFzX0V2ZW50X01vdXNlX1doZWVsKj4oZXZl
bnRfaW5mbyk7CisgICAgRXZhc19FdmVudF9Nb3VzZV9XaGVlbCogZXYgPSBzdGF0aWNfY2FzdDxF
dmFzX0V2ZW50X01vdXNlX1doZWVsKj4oZXZlbnRJbmZvKTsKICAgICBFd2tfVmlld19TbWFydF9E
YXRhKiBzZCA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihkYXRhKTsKICAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpKTsKICAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTihzZC0+YXBpLT5tb3VzZV93aGVlbCk7CiAgICAgc2QtPmFwaS0+bW91c2Vfd2hl
ZWwoc2QsIGV2KTsKIH0KIAotc3RhdGljIHZvaWQgX2V3a192aWV3X29uX21vdXNlX2Rvd24odm9p
ZCogZGF0YSwgRXZhcyogZSwgRXZhc19PYmplY3QqIG8sIHZvaWQqIGV2ZW50X2luZm8pCitzdGF0
aWMgdm9pZCBfZXdrX3ZpZXdfb25fbW91c2VfZG93bih2b2lkKiBkYXRhLCBFdmFzKiBldmVudFR5
cGUsIEV2YXNfT2JqZWN0KiBjYWxsYmFjaywgdm9pZCogZXZlbnRJbmZvKQogewotICAgIEV2YXNf
RXZlbnRfTW91c2VfRG93biogZXYgPSBzdGF0aWNfY2FzdDxFdmFzX0V2ZW50X01vdXNlX0Rvd24q
PihldmVudF9pbmZvKTsKKyAgICBFdmFzX0V2ZW50X01vdXNlX0Rvd24qIGV2ID0gc3RhdGljX2Nh
c3Q8RXZhc19FdmVudF9Nb3VzZV9Eb3duKj4oZXZlbnRJbmZvKTsKICAgICBFd2tfVmlld19TbWFy
dF9EYXRhKiBzZCA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihkYXRhKTsKICAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpKTsKICAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTihzZC0+YXBpLT5tb3VzZV9kb3duKTsKICAgICBzZC0+YXBpLT5tb3VzZV9k
b3duKHNkLCBldik7CiB9CiAKLXN0YXRpYyB2b2lkIF9ld2tfdmlld19vbl9tb3VzZV91cCh2b2lk
KiBkYXRhLCBFdmFzKiBlLCBFdmFzX09iamVjdCogbywgdm9pZCogZXZlbnRfaW5mbykKK3N0YXRp
YyB2b2lkIF9ld2tfdmlld19vbl9tb3VzZV91cCh2b2lkKiBkYXRhLCBFdmFzKiBldmVudFR5cGUs
IEV2YXNfT2JqZWN0KiBjYWxsYmFjaywgdm9pZCogZXZlbnRJbmZvKQogewotICAgIEV2YXNfRXZl
bnRfTW91c2VfVXAqIGV2ID0gc3RhdGljX2Nhc3Q8RXZhc19FdmVudF9Nb3VzZV9VcCo+KGV2ZW50
X2luZm8pOworICAgIEV2YXNfRXZlbnRfTW91c2VfVXAqIGV2ID0gc3RhdGljX2Nhc3Q8RXZhc19F
dmVudF9Nb3VzZV9VcCo+KGV2ZW50SW5mbyk7CiAgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc2Qg
PSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZGF0YSk7CiAgICAgRUlOQV9TQUZF
VFlfT05fTlVMTF9SRVRVUk4oc2QtPmFwaSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk4oc2QtPmFwaS0+bW91c2VfdXApOwogICAgIHNkLT5hcGktPm1vdXNlX3VwKHNkLCBldik7CiB9
CiAKLXN0YXRpYyB2b2lkIF9ld2tfdmlld19vbl9tb3VzZV9tb3ZlKHZvaWQqIGRhdGEsIEV2YXMq
IGUsIEV2YXNfT2JqZWN0KiBvLCB2b2lkKiBldmVudF9pbmZvKQorc3RhdGljIHZvaWQgX2V3a192
aWV3X29uX21vdXNlX21vdmUodm9pZCogZGF0YSwgRXZhcyogZXZlbnRUeXBlLCBFdmFzX09iamVj
dCogY2FsbGJhY2ssIHZvaWQqIGV2ZW50SW5mbykKIHsKLSAgICBFdmFzX0V2ZW50X01vdXNlX01v
dmUqIGV2ID0gc3RhdGljX2Nhc3Q8RXZhc19FdmVudF9Nb3VzZV9Nb3ZlKj4oZXZlbnRfaW5mbyk7
CisgICAgRXZhc19FdmVudF9Nb3VzZV9Nb3ZlKiBldiA9IHN0YXRpY19jYXN0PEV2YXNfRXZlbnRf
TW91c2VfTW92ZSo+KGV2ZW50SW5mbyk7CiAgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QgPSBz
dGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZGF0YSk7CiAgICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk4oc2QtPmFwaSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4o
c2QtPmFwaS0+bW91c2VfbW92ZSk7CiAgICAgc2QtPmFwaS0+bW91c2VfbW92ZShzZCwgZXYpOwog
fQogCi1zdGF0aWMgdm9pZCBfZXdrX3ZpZXdfb25fa2V5X2Rvd24odm9pZCogZGF0YSwgRXZhcyog
ZSwgRXZhc19PYmplY3QqIG8sIHZvaWQqIGV2ZW50X2luZm8pCitzdGF0aWMgdm9pZCBfZXdrX3Zp
ZXdfb25fa2V5X2Rvd24odm9pZCogZGF0YSwgRXZhcyogZXZlbnRUeXBlLCBFdmFzX09iamVjdCog
Y2FsbGJhY2ssIHZvaWQqIGV2ZW50SW5mbykKIHsKLSAgICBFdmFzX0V2ZW50X0tleV9Eb3duKiBl
diA9IHN0YXRpY19jYXN0PEV2YXNfRXZlbnRfS2V5X0Rvd24qPihldmVudF9pbmZvKTsKKyAgICBF
dmFzX0V2ZW50X0tleV9Eb3duKiBldiA9IHN0YXRpY19jYXN0PEV2YXNfRXZlbnRfS2V5X0Rvd24q
PihldmVudEluZm8pOwogICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0gc3RhdGljX2Nhc3Q8
RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOKHNkLT5hcGkpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGktPmtl
eV9kb3duKTsKICAgICBzZC0+YXBpLT5rZXlfZG93bihzZCwgZXYpOwogfQogCi1zdGF0aWMgdm9p
ZCBfZXdrX3ZpZXdfb25fa2V5X3VwKHZvaWQqIGRhdGEsIEV2YXMqIGUsIEV2YXNfT2JqZWN0KiBv
LCB2b2lkKiBldmVudF9pbmZvKQorc3RhdGljIHZvaWQgX2V3a192aWV3X29uX2tleV91cCh2b2lk
KiBkYXRhLCBFdmFzKiBldmVudFR5cGUsIEV2YXNfT2JqZWN0KiBjYWxsYmFjaywgdm9pZCogZXZl
bnRJbmZvKQogewotICAgIEV2YXNfRXZlbnRfS2V5X1VwKiBldiA9IHN0YXRpY19jYXN0PEV2YXNf
RXZlbnRfS2V5X1VwKj4oZXZlbnRfaW5mbyk7CisgICAgRXZhc19FdmVudF9LZXlfVXAqIGV2ID0g
c3RhdGljX2Nhc3Q8RXZhc19FdmVudF9LZXlfVXAqPihldmVudEluZm8pOwogICAgIEV3a19WaWV3
X1NtYXJ0X0RhdGEqIHNkID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEp
OwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGkpOwogICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGktPmtleV91cCk7CiAgICAgc2QtPmFwaS0+a2V5X3Vw
KHNkLCBldik7CiB9CiAKLXN0YXRpYyBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6RnJhbWU+IF9l
d2tfdmlld19jb3JlX2ZyYW1lX25ldyhFd2tfVmlld19TbWFydF9EYXRhKiBzZCwgRXdrX1ZpZXdf
UHJpdmF0ZV9EYXRhKiBwcml2LCBXZWJDb3JlOjpIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVy
KQorc3RhdGljIFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpGcmFtZT4gX2V3a192aWV3X2NvcmVf
ZnJhbWVfbmV3KEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSwgRXdrX1ZpZXdfUHJpdmF0
ZV9EYXRhKiBwcml2LCBXZWJDb3JlOjpIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVyKQogewot
ICAgIFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50RWZsKiBmbGMgPSBuZXcgV2ViQ29yZTo6RnJh
bWVMb2FkZXJDbGllbnRFZmwoc2QtPnNlbGYpOworICAgIFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xp
ZW50RWZsKiBmbGMgPSBuZXcgV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRFZmwoc21hcnREYXRh
LT5zZWxmKTsKICAgICBpZiAoIWZsYykgewogICAgICAgICBDUklUSUNBTCgiQ291bGQgbm90IGNy
ZWF0ZSBmcmFtZSBsb2FkZXIgY2xpZW50LiIpOwogICAgICAgICByZXR1cm4gMDsKQEAgLTU1Miw3
ICs1NTIsNyBAQCBzdGF0aWMgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkZyYW1lPiBfZXdrX3Zp
ZXdfY29yZV9mcmFtZV9uZXcoRXdrX1ZpZXdfU21hcnRfRAogCiBzdGF0aWMgRXZhc19TbWFydF9D
bGFzcyBfcGFyZW50X3NjID0gRVZBU19TTUFSVF9DTEFTU19JTklUX05VTEw7CiAKLXN0YXRpYyBF
d2tfVmlld19Qcml2YXRlX0RhdGEqIF9ld2tfdmlld19wcml2X25ldyhFd2tfVmlld19TbWFydF9E
YXRhKiBzZCkKK3N0YXRpYyBFd2tfVmlld19Qcml2YXRlX0RhdGEqIF9ld2tfdmlld19wcml2X25l
dyhFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEpCiB7CiAgICAgRXdrX1ZpZXdfUHJpdmF0
ZV9EYXRhKiBwcml2ID0KICAgICAgICAgc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfUHJpdmF0ZV9EYXRh
Kj4oY2FsbG9jKDEsIHNpemVvZihFd2tfVmlld19Qcml2YXRlX0RhdGEpKSk7CkBAIC01NjUsOCAr
NTY1LDggQEAgc3RhdGljIEV3a19WaWV3X1ByaXZhdGVfRGF0YSogX2V3a192aWV3X3ByaXZfbmV3
KEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkKQogICAgIH0KIAogICAgIFdlYkNvcmU6OlBhZ2U6OlBh
Z2VDbGllbnRzIHBhZ2VDbGllbnRzOwotICAgIHBhZ2VDbGllbnRzLmNocm9tZUNsaWVudCA9IHN0
YXRpY19jYXN0PFdlYkNvcmU6OkNocm9tZUNsaWVudCo+KG5ldyBXZWJDb3JlOjpDaHJvbWVDbGll
bnRFZmwoc2QtPnNlbGYpKTsKLSAgICBwYWdlQ2xpZW50cy5lZGl0b3JDbGllbnQgPSBzdGF0aWNf
Y2FzdDxXZWJDb3JlOjpFZGl0b3JDbGllbnQqPihuZXcgV2ViQ29yZTo6RWRpdG9yQ2xpZW50RWZs
KHNkLT5zZWxmKSk7CisgICAgcGFnZUNsaWVudHMuY2hyb21lQ2xpZW50ID0gc3RhdGljX2Nhc3Q8
V2ViQ29yZTo6Q2hyb21lQ2xpZW50Kj4obmV3IFdlYkNvcmU6OkNocm9tZUNsaWVudEVmbChzbWFy
dERhdGEtPnNlbGYpKTsKKyAgICBwYWdlQ2xpZW50cy5lZGl0b3JDbGllbnQgPSBzdGF0aWNfY2Fz
dDxXZWJDb3JlOjpFZGl0b3JDbGllbnQqPihuZXcgV2ViQ29yZTo6RWRpdG9yQ2xpZW50RWZsKHNt
YXJ0RGF0YS0+c2VsZikpOwogICAgIHBhZ2VDbGllbnRzLmRyYWdDbGllbnQgPSBzdGF0aWNfY2Fz
dDxXZWJDb3JlOjpEcmFnQ2xpZW50Kj4obmV3IFdlYkNvcmU6OkRyYWdDbGllbnRFZmwpOwogICAg
IHBhZ2VDbGllbnRzLmluc3BlY3RvckNsaWVudCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6Okluc3Bl
Y3RvckNsaWVudCo+KG5ldyBXZWJDb3JlOjpJbnNwZWN0b3JDbGllbnRFZmwpOwogI2lmIEVOQUJM
RShERVZJQ0VfT1JJRU5UQVRJT04pCkBAIC01OTQsOCArNTk0LDggQEAgc3RhdGljIEV3a19WaWV3
X1ByaXZhdGVfRGF0YSogX2V3a192aWV3X3ByaXZfbmV3KEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNk
KQogICAgIHByaXYtPnZpZXdwb3J0X2FyZ3VtZW50cy51c2VyU2NhbGFibGUgPSBFSU5BX1RSVUU7
CiAKICAgICBwcml2LT5wYWdlX3NldHRpbmdzLT5zZXRMb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHko
dHJ1ZSk7Ci0gICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0RGVmYXVsdEZpeGVkRm9udFNpemUo
MTIpOwotICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNldERlZmF1bHRGb250U2l6ZSgxNik7Cisg
ICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0RGVmYXVsdEZpeGVkRm9udFNpemUoMTApOworICAg
IHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNldERlZmF1bHRGb250U2l6ZSgxMyk7CiAgICAgcHJpdi0+
cGFnZV9zZXR0aW5ncy0+c2V0U2VyaWZGb250RmFtaWx5KCJzZXJpZiIpOwogICAgIHByaXYtPnBh
Z2Vfc2V0dGluZ3MtPnNldEZpeGVkRm9udEZhbWlseSgibW9ub3R5cGUiKTsKICAgICBwcml2LT5w
YWdlX3NldHRpbmdzLT5zZXRTYW5zU2VyaWZGb250RmFtaWx5KCJzYW5zIik7CkBAIC02NjUsNyAr
NjY1LDcgQEAgc3RhdGljIEV3a19WaWV3X1ByaXZhdGVfRGF0YSogX2V3a192aWV3X3ByaXZfbmV3
KEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkKQogCiAgICAgcHJpdi0+c2V0dGluZ3MuZG9tX3RpbWVy
X2ludGVydmFsID0gcHJpdi0+cGFnZV9zZXR0aW5ncy0+ZGVmYXVsdE1pbkRPTVRpbWVySW50ZXJ2
YWwoKTsKIAotICAgIHByaXYtPm1haW5fZnJhbWUgPSBfZXdrX3ZpZXdfY29yZV9mcmFtZV9uZXco
c2QsIHByaXYsIDApLmdldCgpOworICAgIHByaXYtPm1haW5fZnJhbWUgPSBfZXdrX3ZpZXdfY29y
ZV9mcmFtZV9uZXcoc21hcnREYXRhLCBwcml2LCAwKS5nZXQoKTsKICAgICBpZiAoIXByaXYtPm1h
aW5fZnJhbWUpIHsKICAgICAgICAgQ1JJVElDQUwoIkNvdWxkIG5vdCBjcmVhdGUgbWFpbiBmcmFt
ZS4iKTsKICAgICAgICAgZ290byBlcnJvcl9tYWluX2ZyYW1lOwpAQCAtNzIwLDEzICs3MjAsMTMg
QEAgc3RhdGljIHZvaWQgX2V3a192aWV3X3ByaXZfZGVsKEV3a19WaWV3X1ByaXZhdGVfRGF0YSog
cHJpdikKICAgICBmcmVlKHByaXYpOwogfQogCi1zdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21hcnRf
YWRkKEV2YXNfT2JqZWN0KiBvKQorc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X2FkZChFdmFz
X09iamVjdCogZXdrVmlldykKIHsKLSAgICBjb25zdCBFdmFzX1NtYXJ0KiBzbWFydCA9IGV2YXNf
b2JqZWN0X3NtYXJ0X3NtYXJ0X2dldChvKTsKKyAgICBjb25zdCBFdmFzX1NtYXJ0KiBzbWFydCA9
IGV2YXNfb2JqZWN0X3NtYXJ0X3NtYXJ0X2dldChld2tWaWV3KTsKICAgICBjb25zdCBFdmFzX1Nt
YXJ0X0NsYXNzKiBzYyA9IGV2YXNfc21hcnRfY2xhc3NfZ2V0KHNtYXJ0KTsKICAgICBjb25zdCBF
d2tfVmlld19TbWFydF9DbGFzcyogYXBpID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBFd2tfVmll
d19TbWFydF9DbGFzcyo+KHNjKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihhcGkt
PmJhY2tpbmdfc3RvcmVfYWRkKTsKLSAgICBFV0tfVklFV19TRF9HRVQobywgc2QpOworICAgIEVX
S19WSUVXX1NEX0dFVChld2tWaWV3LCBzZCk7CiAKICAgICBpZiAoIXNkKSB7CiAgICAgICAgIHNk
ID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGNhbGxvYygxLCBzaXplb2YoRXdr
X1ZpZXdfU21hcnRfRGF0YSkpKTsKQEAgLTczNCw3ICs3MzQsNyBAQCBzdGF0aWMgdm9pZCBfZXdr
X3ZpZXdfc21hcnRfYWRkKEV2YXNfT2JqZWN0KiBvKQogICAgICAgICAgICAgQ1JJVElDQUwoImNv
dWxkIG5vdCBhbGxvY2F0ZSBFd2tfVmlld19TbWFydF9EYXRhIik7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KLSAgICAgICAgZXZhc19vYmplY3Rfc21hcnRfZGF0YV9zZXQobywgc2Qp
OworICAgICAgICBldmFzX29iamVjdF9zbWFydF9kYXRhX3NldChld2tWaWV3LCBzZCk7CiAgICAg
fQogCiAgICAgc2QtPmJnX2NvbG9yLnIgPSAyNTU7CkBAIC03NDIsMTEgKzc0MiwxMSBAQCBzdGF0
aWMgdm9pZCBfZXdrX3ZpZXdfc21hcnRfYWRkKEV2YXNfT2JqZWN0KiBvKQogICAgIHNkLT5iZ19j
b2xvci5iID0gMjU1OwogICAgIHNkLT5iZ19jb2xvci5hID0gMjU1OwogCi0gICAgc2QtPnNlbGYg
PSBvOworICAgIHNkLT5zZWxmID0gZXdrVmlldzsKICAgICBzZC0+X3ByaXYgPSBfZXdrX3ZpZXdf
cHJpdl9uZXcoc2QpOwogICAgIHNkLT5hcGkgPSBhcGk7CiAKLSAgICBfcGFyZW50X3NjLmFkZChv
KTsKKyAgICBfcGFyZW50X3NjLmFkZChld2tWaWV3KTsKIAogICAgIGlmICghc2QtPl9wcml2KQog
ICAgICAgICByZXR1cm47CkBAIC03NTksMTMgKzc1OSwxMyBAQCBzdGF0aWMgdm9pZCBfZXdrX3Zp
ZXdfc21hcnRfYWRkKEV2YXNfT2JqZWN0KiBvKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgZXZhc19vYmplY3Rfc21hcnRfbWVtYmVyX2FkZChzZC0+YmFja2luZ19zdG9yZSwgbyk7Cisg
ICAgZXZhc19vYmplY3Rfc21hcnRfbWVtYmVyX2FkZChzZC0+YmFja2luZ19zdG9yZSwgZXdrVmll
dyk7CiAgICAgZXZhc19vYmplY3Rfc2hvdyhzZC0+YmFja2luZ19zdG9yZSk7CiAgICAgZXZhc19v
YmplY3RfcGFzc19ldmVudHNfc2V0KHNkLT5iYWNraW5nX3N0b3JlLCBFSU5BX1RSVUUpOwogCiAg
ICAgc2QtPmV2ZW50c19yZWN0ID0gZXZhc19vYmplY3RfcmVjdGFuZ2xlX2FkZChzZC0+YmFzZS5l
dmFzKTsKICAgICBldmFzX29iamVjdF9jb2xvcl9zZXQoc2QtPmV2ZW50c19yZWN0LCAwLCAwLCAw
LCAwKTsKLSAgICBldmFzX29iamVjdF9zbWFydF9tZW1iZXJfYWRkKHNkLT5ldmVudHNfcmVjdCwg
byk7CisgICAgZXZhc19vYmplY3Rfc21hcnRfbWVtYmVyX2FkZChzZC0+ZXZlbnRzX3JlY3QsIGV3
a1ZpZXcpOwogICAgIGV2YXNfb2JqZWN0X3Nob3coc2QtPmV2ZW50c19yZWN0KTsKIAogICAgIHNk
LT5tYWluX2ZyYW1lID0gZXdrX2ZyYW1lX2FkZChzZC0+YmFzZS5ldmFzKTsKQEAgLTc3NCw3ICs3
NzQsNyBAQCBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21hcnRfYWRkKEV2YXNfT2JqZWN0KiBvKQog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCFld2tfZnJhbWVfaW5pdChzZC0+bWFp
bl9mcmFtZSwgbywgcHJpdi0+bWFpbl9mcmFtZSkpIHsKKyAgICBpZiAoIWV3a19mcmFtZV9pbml0
KHNkLT5tYWluX2ZyYW1lLCBld2tWaWV3LCBwcml2LT5tYWluX2ZyYW1lKSkgewogICAgICAgICBF
UlIoIkNvdWxkIG5vdCBpbml0aWFsaXplIG1haW4gZnJtZSBvYmplY3QuIik7CiAgICAgICAgIGV2
YXNfb2JqZWN0X2RlbChzZC0+bWFpbl9mcmFtZSk7CiAgICAgICAgIHNkLT5tYWluX2ZyYW1lID0g
MDsKQEAgLTc4NSwxMCArNzg1LDEwIEBAIHN0YXRpYyB2b2lkIF9ld2tfdmlld19zbWFydF9hZGQo
RXZhc19PYmplY3QqIG8pCiAgICAgfQogCiAgICAgZXZhc19vYmplY3RfbmFtZV9zZXQoc2QtPm1h
aW5fZnJhbWUsICJFV0tfRnJhbWU6bWFpbiIpOwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X21lbWJl
cl9hZGQoc2QtPm1haW5fZnJhbWUsIG8pOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X21lbWJlcl9h
ZGQoc2QtPm1haW5fZnJhbWUsIGV3a1ZpZXcpOwogICAgIGV2YXNfb2JqZWN0X3Nob3coc2QtPm1h
aW5fZnJhbWUpOwogCi0jZGVmaW5lIENPTk5FQ1QocywgYykgZXZhc19vYmplY3RfZXZlbnRfY2Fs
bGJhY2tfYWRkKG8sIHMsIGMsIHNkKQorI2RlZmluZSBDT05ORUNUKHMsIGMpIGV2YXNfb2JqZWN0
X2V2ZW50X2NhbGxiYWNrX2FkZChld2tWaWV3LCBzLCBjLCBzZCkKICAgICBDT05ORUNUKEVWQVNf
Q0FMTEJBQ0tfRk9DVVNfSU4sIF9ld2tfdmlld19vbl9mb2N1c19pbik7CiAgICAgQ09OTkVDVChF
VkFTX0NBTExCQUNLX0ZPQ1VTX09VVCwgX2V3a192aWV3X29uX2ZvY3VzX291dCk7CiAgICAgQ09O
TkVDVChFVkFTX0NBTExCQUNLX01PVVNFX1dIRUVMLCBfZXdrX3ZpZXdfb25fbW91c2Vfd2hlZWwp
OwpAQCAtODAwLDE5ICs4MDAsMTkgQEAgc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X2FkZChF
dmFzX09iamVjdCogbykKICN1bmRlZiBDT05ORUNUCiB9CiAKLXN0YXRpYyB2b2lkIF9ld2tfdmll
d19zbWFydF9kZWwoRXZhc19PYmplY3QqIG8pCitzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21hcnRf
ZGVsKEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVChvLCBzZCk7
CisgICAgRVdLX1ZJRVdfU0RfR0VUKGV3a1ZpZXcsIHNkKTsKICAgICBFd2tfVmlld19Qcml2YXRl
X0RhdGEqIHByaXYgPSBzZCA/IHNkLT5fcHJpdiA6IDA7CiAKLSAgICBld2tfdmlld19zdG9wKG8p
OwotICAgIF9wYXJlbnRfc2MuZGVsKG8pOworICAgIGV3a192aWV3X3N0b3AoZXdrVmlldyk7Cisg
ICAgX3BhcmVudF9zYy5kZWwoZXdrVmlldyk7CiAgICAgX2V3a192aWV3X3ByaXZfZGVsKHByaXYp
OwogfQogCi1zdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21hcnRfcmVzaXplKEV2YXNfT2JqZWN0KiBv
LCBFdmFzX0Nvb3JkIHcsIEV2YXNfQ29vcmQgaCkKK3N0YXRpYyB2b2lkIF9ld2tfdmlld19zbWFy
dF9yZXNpemUoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV2YXNfQ29vcmQgdywgRXZhc19Db29yZCBo
KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QpOworICAgIEVXS19WSUVX
X1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QpOwogCiAgICAgLy8gdGhlc2Ugc2hvdWxkIGJl
IHF1ZXVlZCBhbmQgcHJvY2Vzc2VkIGluIGNhbGN1bGF0ZSBhcyB3ZWxsIQogICAgIGV2YXNfb2Jq
ZWN0X3Jlc2l6ZShzZC0+YmFja2luZ19zdG9yZSwgdywgaCk7CkBAIC04MjEsMTYgKzgyMSwxNiBA
QCBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21hcnRfcmVzaXplKEV2YXNfT2JqZWN0KiBvLCBFdmFz
X0Nvb3JkIHcsIEV2YXNfQ29vcmQgaCkKICAgICBfZXdrX3ZpZXdfc21hcnRfY2hhbmdlZChzZCk7
CiB9CiAKLXN0YXRpYyB2b2lkIF9ld2tfdmlld19zbWFydF9tb3ZlKEV2YXNfT2JqZWN0KiBvLCBF
dmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSkKK3N0YXRpYyB2b2lkIF9ld2tfdmlld19zbWFydF9t
b3ZlKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSkKIHsK
LSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkKTsKKyAgICBFV0tfVklFV19TRF9H
RVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkKTsKICAgICBzZC0+Y2hhbmdlZC5wb3NpdGlvbiA9IEVJ
TkFfVFJVRTsKICAgICBfZXdrX3ZpZXdfc21hcnRfY2hhbmdlZChzZCk7CiB9CiAKLXN0YXRpYyB2
b2lkIF9ld2tfdmlld19zbWFydF9jYWxjdWxhdGUoRXZhc19PYmplY3QqIG8pCitzdGF0aWMgdm9p
ZCBfZXdrX3ZpZXdfc21hcnRfY2FsY3VsYXRlKEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAg
IEVXS19WSUVXX1NEX0dFVChvLCBzZCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUKGV3a1ZpZXcsIHNk
KTsKICAgICBFV0tfVklFV19QUklWX0dFVChzZCwgcHJpdik7CiAgICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk4oc2QtPmFwaS0+Y29udGVudHNfcmVzaXplKTsKICAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTihzZC0+YXBpLT5zY3JvbGxzX3Byb2Nlc3MpOwpAQCAtODQyLDExICs4NDIs
MTEgQEAgc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X2NhbGN1bGF0ZShFdmFzX09iamVjdCog
bykKICAgICBpZiAoIXNkLT5tYWluX2ZyYW1lIHx8ICFwcml2LT5tYWluX2ZyYW1lKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBldmFzX29iamVjdF9nZW9tZXRyeV9nZXQobywgJngsICZ5LCAmdywg
JmgpOworICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldChld2tWaWV3LCAmeCwgJnksICZ3LCAm
aCk7CiAKLSAgICBEQkcoIm89JXAgZ2VvPVslZCwgJWQgKyAlZHglZF0sIGNoYW5nZWQ6IHNpemU9
JWhodSwgIgorICAgIERCRygiZXdrVmlldz0lcCBnZW89WyVkLCAlZCArICVkeCVkXSwgY2hhbmdl
ZDogc2l6ZT0laGh1LCAiCiAgICAgICAgICJzY3JvbGxzPSV6dSwgcmVwYWludHM9JXp1IiwKLSAg
ICAgICAgbywgeCwgeSwgdywgaCwgc2QtPmNoYW5nZWQuc2l6ZSwKKyAgICAgICAgZXdrVmlldywg
eCwgeSwgdywgaCwgc2QtPmNoYW5nZWQuc2l6ZSwKICAgICAgICAgcHJpdi0+c2Nyb2xscy5jb3Vu
dCwgcHJpdi0+cmVwYWludHMuY291bnQpOwogCiAgICAgaWYgKHNkLT5jaGFuZ2VkLnNpemUgJiYg
KCh3ICE9IHNkLT52aWV3LncpIHx8IChoICE9IHNkLT52aWV3LmgpKSkgewpAQCAtODY1LDcgKzg2
NSw3IEBAIHN0YXRpYyB2b2lkIF9ld2tfdmlld19zbWFydF9jYWxjdWxhdGUoRXZhc19PYmplY3Qq
IG8pCiAgICAgICAgIF9ld2tfdmlld19yZXBhaW50X2FkZChwcml2LCAwLCAwLCB3LCBoKTsKIAog
ICAgICAgICAvLyBUaGlzIGNhbGxiYWNrIGlzIGEgZ29vZCBwbGFjZSBlLmcuIHRvIGNoYW5nZSBm
aXhlZCBsYXlvdXQgc2l6ZSAoZXdrX3ZpZXdfZml4ZWRfbGF5b3V0X3NpemVfc2V0KS4KLSAgICAg
ICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChvLCAidmlldyxyZXNpemVkIiwgMCk7
CisgICAgICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdrVmlldywgInZpZXcs
cmVzaXplZCIsIDApOwogICAgIH0KICAgICBzZC0+Y2hhbmdlZC5zaXplID0gRUlOQV9GQUxTRTsK
IApAQCAtODk0LDk2ICs4OTQsOTYgQEAgc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X2NhbGN1
bGF0ZShFdmFzX09iamVjdCogbykKICAgICB9CiB9CiAKLXN0YXRpYyB2b2lkIF9ld2tfdmlld19z
bWFydF9zaG93KEV2YXNfT2JqZWN0KiBvKQorc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X3No
b3coRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
TihvLCBzZCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCk7CiAK
ICAgICBpZiAoZXZhc19vYmplY3RfY2xpcGVlc19nZXQoc2QtPmJhc2UuY2xpcHBlcikpCiAgICAg
ICAgIGV2YXNfb2JqZWN0X3Nob3coc2QtPmJhc2UuY2xpcHBlcik7CiAgICAgZXZhc19vYmplY3Rf
c2hvdyhzZC0+YmFja2luZ19zdG9yZSk7CiB9CiAKLXN0YXRpYyB2b2lkIF9ld2tfdmlld19zbWFy
dF9oaWRlKEV2YXNfT2JqZWN0KiBvKQorc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X2hpZGUo
RXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihv
LCBzZCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCk7CiAKICAg
ICBldmFzX29iamVjdF9oaWRlKHNkLT5iYXNlLmNsaXBwZXIpOwogICAgIGV2YXNfb2JqZWN0X2hp
ZGUoc2QtPmJhY2tpbmdfc3RvcmUpOwogfQogCi1zdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19z
bWFydF9jb250ZW50c19yZXNpemUoRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QsIGludCB3LCBpbnQg
aCkKK3N0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3NtYXJ0X2NvbnRlbnRzX3Jlc2l6ZShFd2tf
Vmlld19TbWFydF9EYXRhKiBzbWFydERhdGEsIGludCB3aWR0aCwgaW50IGhlaWdodCkKIHsKICAg
ICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi1zdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19zbWFy
dF96b29tX3NldChFd2tfVmlld19TbWFydF9EYXRhKiBzZCwgZmxvYXQgem9vbSwgRXZhc19Db29y
ZCBjeCwgRXZhc19Db29yZCBjeSkKK3N0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3NtYXJ0X3pv
b21fc2V0KEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSwgZmxvYXQgem9vbSwgRXZhc19D
b29yZCBjZW50ZXJYLCBFdmFzX0Nvb3JkIGNlbnRlclkpCiB7CiAgICAgZG91YmxlIHB4LCBweTsK
ICAgICBFdmFzX0Nvb3JkIHgsIHksIHcsIGg7CiAgICAgRWluYV9Cb29sIHJldDsKIAotICAgIGV3
a19mcmFtZV9zY3JvbGxfc2l6ZV9nZXQoc2QtPm1haW5fZnJhbWUsICZ3LCAmaCk7Ci0gICAgZXdr
X2ZyYW1lX3Njcm9sbF9wb3NfZ2V0KHNkLT5tYWluX2ZyYW1lLCAmeCwgJnkpOworICAgIGV3a19m
cmFtZV9zY3JvbGxfc2l6ZV9nZXQoc21hcnREYXRhLT5tYWluX2ZyYW1lLCAmdywgJmgpOworICAg
IGV3a19mcmFtZV9zY3JvbGxfcG9zX2dldChzbWFydERhdGEtPm1haW5fZnJhbWUsICZ4LCAmeSk7
CiAKLSAgICBpZiAodyArIHNkLT52aWV3LncgPiAwKQotICAgICAgICBweCA9IHN0YXRpY19jYXN0
PGRvdWJsZT4oeCArIGN4KSAvICh3ICsgc2QtPnZpZXcudyk7CisgICAgaWYgKHcgKyBzbWFydERh
dGEtPnZpZXcudyA+IDApCisgICAgICAgIHB4ID0gc3RhdGljX2Nhc3Q8ZG91YmxlPih4ICsgY2Vu
dGVyWCkgLyAodyArIHNtYXJ0RGF0YS0+dmlldy53KTsKICAgICBlbHNlCiAgICAgICAgIHB4ID0g
MC4wOwogCi0gICAgaWYgKGggKyBzZC0+dmlldy5oID4gMCkKLSAgICAgICAgcHkgPSBzdGF0aWNf
Y2FzdDxkb3VibGU+KHkgKyBjeSkgLyAoaCArIHNkLT52aWV3LmgpOworICAgIGlmIChoICsgc21h
cnREYXRhLT52aWV3LmggPiAwKQorICAgICAgICBweSA9IHN0YXRpY19jYXN0PGRvdWJsZT4oeSAr
IGNlbnRlclkpIC8gKGggKyBzbWFydERhdGEtPnZpZXcuaCk7CiAgICAgZWxzZQogICAgICAgICBw
eSA9IDAuMDsKIAotICAgIHJldCA9IGV3a19mcmFtZV96b29tX3NldChzZC0+bWFpbl9mcmFtZSwg
em9vbSk7CisgICAgcmV0ID0gZXdrX2ZyYW1lX3pvb21fc2V0KHNtYXJ0RGF0YS0+bWFpbl9mcmFt
ZSwgem9vbSk7CiAKLSAgICBld2tfZnJhbWVfc2Nyb2xsX3NpemVfZ2V0KHNkLT5tYWluX2ZyYW1l
LCAmdywgJmgpOwotICAgIHggPSAodyArIHNkLT52aWV3LncpICogcHggLSBjeDsKLSAgICB5ID0g
KGggKyBzZC0+dmlldy5oKSAqIHB5IC0gY3k7Ci0gICAgZXdrX2ZyYW1lX3Njcm9sbF9zZXQoc2Qt
Pm1haW5fZnJhbWUsIHgsIHkpOworICAgIGV3a19mcmFtZV9zY3JvbGxfc2l6ZV9nZXQoc21hcnRE
YXRhLT5tYWluX2ZyYW1lLCAmdywgJmgpOworICAgIHggPSAodyArIHNtYXJ0RGF0YS0+dmlldy53
KSAqIHB4IC0gY2VudGVyWDsKKyAgICB5ID0gKGggKyBzbWFydERhdGEtPnZpZXcuaCkgKiBweSAt
IGNlbnRlclk7CisgICAgZXdrX2ZyYW1lX3Njcm9sbF9zZXQoc21hcnREYXRhLT5tYWluX2ZyYW1l
LCB4LCB5KTsKICAgICByZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21h
cnRfZmx1c2goRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QpCitzdGF0aWMgdm9pZCBfZXdrX3ZpZXdf
c21hcnRfZmx1c2goRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhKQogewotICAgIEVXS19W
SUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdik7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRf
T1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdik7CiAgICAgX2V3a192aWV3X3JlcGFpbnRzX2ZsdXNo
KHByaXYpOwogICAgIF9ld2tfdmlld19zY3JvbGxzX2ZsdXNoKHByaXYpOwogfQogCi1zdGF0aWMg
RWluYV9Cb29sIF9ld2tfdmlld19zbWFydF9wcmVfcmVuZGVyX3JlZ2lvbihFd2tfVmlld19TbWFy
dF9EYXRhKiBzZCwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHksIEV2YXNfQ29vcmQgdywgRXZh
c19Db29yZCBoLCBmbG9hdCB6b29tKQorc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfc21hcnRf
cHJlX3JlbmRlcl9yZWdpb24oRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhLCBFdmFzX0Nv
b3JkIHgsIEV2YXNfQ29vcmQgeSwgRXZhc19Db29yZCB3aWR0aCwgRXZhc19Db29yZCBoZWlnaHQs
IGZsb2F0IHpvb20pCiB7CiAgICAgV1JOKCJub3Qgc3VwcG9ydGVkIGJ5IGVuZ2luZS4gc2Q9JXAg
YXJlYT0lZCwlZCslZHglZCwgem9vbT0lZiIsCi0gICAgICAgIHNkLCB4LCB5LCB3LCBoLCB6b29t
KTsKKyAgICAgICAgc21hcnREYXRhLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCB6b29tKTsKICAgICBy
ZXR1cm4gRUlOQV9GQUxTRTsKIH0KIAotc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfc21hcnRf
cHJlX3JlbmRlcl9yZWxhdGl2ZV9yYWRpdXMoRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QsIHVuc2ln
bmVkIGludCBuLCBmbG9hdCB6b29tKQorc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfc21hcnRf
cHJlX3JlbmRlcl9yZWxhdGl2ZV9yYWRpdXMoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRh
LCB1bnNpZ25lZCBpbnQgbnVtYmVyLCBmbG9hdCB6b29tKQogewogICAgIFdSTigibm90IHN1cHBv
cnRlZCBieSBlbmdpbmUuIHNkPSVwLCBuPSV1IHpvb209JWYiLAotICAgICAgICBzZCwgbiwgem9v
bSk7CisgICAgICAgIHNtYXJ0RGF0YSwgbnVtYmVyLCB6b29tKTsKICAgICByZXR1cm4gRUlOQV9G
QUxTRTsKIH0KIAotc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X3ByZV9yZW5kZXJfY2FuY2Vs
KEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkKQorc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X3By
ZV9yZW5kZXJfY2FuY2VsKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSkKIHsKLSAgICBX
Uk4oIm5vdCBzdXBwb3J0ZWQgYnkgZW5naW5lLiBzZD0lcCIsIHNkKTsKKyAgICBXUk4oIm5vdCBz
dXBwb3J0ZWQgYnkgZW5naW5lLiBzZD0lcCIsIHNtYXJ0RGF0YSk7CiB9CiAKLXN0YXRpYyB2b2lk
IF9ld2tfdmlld196b29tX2FuaW1hdGVkX21hcmtfc3RvcChFd2tfVmlld19TbWFydF9EYXRhKiBz
ZCkKK3N0YXRpYyB2b2lkIF9ld2tfdmlld196b29tX2FuaW1hdGVkX21hcmtfc3RvcChFd2tfVmll
d19TbWFydF9EYXRhKiBzbWFydERhdGEpCiB7Ci0gICAgc2QtPmFuaW1hdGVkX3pvb20uem9vbS5z
dGFydCA9IDAuMDsKLSAgICBzZC0+YW5pbWF0ZWRfem9vbS56b29tLmVuZCA9IDAuMDsKLSAgICBz
ZC0+YW5pbWF0ZWRfem9vbS56b29tLmN1cnJlbnQgPSAwLjA7CisgICAgc21hcnREYXRhLT5hbmlt
YXRlZF96b29tLnpvb20uc3RhcnQgPSAwLjA7CisgICAgc21hcnREYXRhLT5hbmltYXRlZF96b29t
Lnpvb20uZW5kID0gMC4wOworICAgIHNtYXJ0RGF0YS0+YW5pbWF0ZWRfem9vbS56b29tLmN1cnJl
bnQgPSAwLjA7CiB9CiAKLXN0YXRpYyB2b2lkIF9ld2tfdmlld196b29tX2FuaW1hdGVkX2Zpbmlz
aChFd2tfVmlld19TbWFydF9EYXRhKiBzZCkKK3N0YXRpYyB2b2lkIF9ld2tfdmlld196b29tX2Fu
aW1hdGVkX2ZpbmlzaChFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEpCiB7Ci0gICAgRVdL
X1ZJRVdfUFJJVl9HRVQoc2QsIHByaXYpOworICAgIEVXS19WSUVXX1BSSVZfR0VUKHNtYXJ0RGF0
YSwgcHJpdik7CiAgICAgZWNvcmVfYW5pbWF0b3JfZGVsKHByaXYtPmFuaW1hdGVkX3pvb20uYW5p
bWF0b3IpOwogICAgIHByaXYtPmFuaW1hdGVkX3pvb20uYW5pbWF0b3IgPSAwOwotICAgIF9ld2tf
dmlld196b29tX2FuaW1hdGVkX21hcmtfc3RvcChzZCk7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRf
Y2FsbGJhY2tfY2FsbChzZC0+c2VsZiwgInpvb20sYW5pbWF0ZWQsZW5kIiwgMCk7CisgICAgX2V3
a192aWV3X3pvb21fYW5pbWF0ZWRfbWFya19zdG9wKHNtYXJ0RGF0YSk7CisgICAgZXZhc19vYmpl
Y3Rfc21hcnRfY2FsbGJhY2tfY2FsbChzbWFydERhdGEtPnNlbGYsICJ6b29tLGFuaW1hdGVkLGVu
ZCIsIDApOwogfQogCiBzdGF0aWMgZmxvYXQgX2V3a192aWV3X3pvb21fYW5pbWF0ZWRfY3VycmVu
dChFd2tfVmlld19Qcml2YXRlX0RhdGEqIHByaXYpCkBAIC0xMDMxLDE4ICsxMDMxLDE4IEBAIHN0
YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3pvb21fYW5pbWF0b3JfY2Iodm9pZCogZGF0YSkKICAg
ICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi1zdGF0aWMgdm9pZCBfZXdrX3ZpZXdfem9vbV9hbmlt
YXRpb25fc3RhcnQoRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QpCitzdGF0aWMgdm9pZCBfZXdrX3Zp
ZXdfem9vbV9hbmltYXRpb25fc3RhcnQoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhKQog
ewotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdik7CisgICAgRVdLX1ZJ
RVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdik7CiAgICAgaWYgKHByaXYtPmFu
aW1hdGVkX3pvb20uYW5pbWF0b3IpCiAgICAgICAgIHJldHVybjsKICAgICBwcml2LT5hbmltYXRl
ZF96b29tLmFuaW1hdG9yID0gZWNvcmVfYW5pbWF0b3JfYWRkCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAoX2V3a192aWV3X3pvb21fYW5pbWF0b3JfY2IsIHNkKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfZXdrX3ZpZXdfem9vbV9hbmlt
YXRvcl9jYiwgc21hcnREYXRhKTsKIH0KIAotc3RhdGljIFdlYkNvcmU6OlZpZXdwb3J0QXR0cmli
dXRlcyBfZXdrX3ZpZXdfdmlld3BvcnRfYXR0cmlidXRlc19jb21wdXRlKGNvbnN0IEV2YXNfT2Jq
ZWN0KiBvKQorc3RhdGljIFdlYkNvcmU6OlZpZXdwb3J0QXR0cmlidXRlcyBfZXdrX3ZpZXdfdmll
d3BvcnRfYXR0cmlidXRlc19jb21wdXRlKGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewot
ICAgIEVXS19WSUVXX1NEX0dFVChvLCBzZCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUKGV3a1ZpZXcs
IHNkKTsKICAgICBFV0tfVklFV19QUklWX0dFVChzZCwgcHJpdik7CiAKICAgICBpbnQgZGVza3Rv
cF93aWR0aCA9IDk4MDsKQEAgLTEwNTYsMTUgKzEwNTYsMTUgQEAgc3RhdGljIFdlYkNvcmU6OlZp
ZXdwb3J0QXR0cmlidXRlcyBfZXdrX3ZpZXdfdmlld3BvcnRfYXR0cmlidXRlc19jb21wdXRlKGNv
bnN0IEUKICAgICByZXR1cm4gYXR0cmlidXRlczsKIH0KIAotc3RhdGljIEVpbmFfQm9vbCBfZXdr
X3ZpZXdfc21hcnRfZGlzYWJsZV9yZW5kZXIoRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QpCitzdGF0
aWMgRWluYV9Cb29sIF9ld2tfdmlld19zbWFydF9kaXNhYmxlX3JlbmRlcihFd2tfVmlld19TbWFy
dF9EYXRhKiBzbWFydERhdGEpCiB7Ci0gICAgV1JOKCJub3Qgc3VwcG9ydGVkIGJ5IGVuZ2luZS4g
c2Q9JXAiLCBzZCk7CisgICAgV1JOKCJub3Qgc3VwcG9ydGVkIGJ5IGVuZ2luZS4gc2Q9JXAiLCBz
bWFydERhdGEpOwogICAgIHJldHVybiBFSU5BX0ZBTFNFOwogfQogCi1zdGF0aWMgRWluYV9Cb29s
IF9ld2tfdmlld19zbWFydF9lbmFibGVfcmVuZGVyKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkKQor
c3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfc21hcnRfZW5hYmxlX3JlbmRlcihFd2tfVmlld19T
bWFydF9EYXRhKiBzbWFydERhdGEpCiB7Ci0gICAgV1JOKCJub3Qgc3VwcG9ydGVkIGJ5IGVuZ2lu
ZS4gc2Q9JXAiLCBzZCk7CisgICAgV1JOKCJub3Qgc3VwcG9ydGVkIGJ5IGVuZ2luZS4gc2Q9JXAi
LCBzbWFydERhdGEpOwogICAgIHJldHVybiBFSU5BX0ZBTFNFOwogfQogCkBAIC0xMTE5LDIyICsx
MTE5LDIyIEBAIEVpbmFfQm9vbCBld2tfdmlld19iYXNlX3NtYXJ0X3NldChFd2tfVmlld19TbWFy
dF9DbGFzcyogYXBpKQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLXZvaWQgZXdrX3ZpZXdf
Zml4ZWRfbGF5b3V0X3NpemVfc2V0KEV2YXNfT2JqZWN0KiBvLCBFdmFzX0Nvb3JkIHcsIEV2YXNf
Q29vcmQgaCkKK3ZvaWQgZXdrX3ZpZXdfZml4ZWRfbGF5b3V0X3NpemVfc2V0KEV2YXNfT2JqZWN0
KiBld2tWaWV3LCBFdmFzX0Nvb3JkIHdpZHRoLCBFdmFzX0Nvb3JkIGhlaWdodCkKIHsKLSAgICBF
V0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1Jf
UkVUVVJOKGV3a1ZpZXcsIHNkKTsKICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2Qs
IHByaXYpOwogCiAgICAgV2ViQ29yZTo6RnJhbWVWaWV3KiB2aWV3ID0gcHJpdi0+bWFpbl9mcmFt
ZS0+dmlldygpOwotICAgIGlmICh3IDw9IDAgJiYgaCA8PSAwKSB7CisgICAgaWYgKHdpZHRoIDw9
IDAgJiYgaGVpZ2h0IDw9IDApIHsKICAgICAgICAgaWYgKCF2aWV3LT51c2VGaXhlZExheW91dCgp
KQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB2aWV3LT5zZXRVc2VGaXhlZExheW91dChF
SU5BX0ZBTFNFKTsKICAgICB9IGVsc2UgewogICAgICAgICBXZWJDb3JlOjpJbnRTaXplIHNpemUg
PSB2aWV3LT5maXhlZExheW91dFNpemUoKTsKLSAgICAgICAgaWYgKHNpemUud2lkdGgoKSA9PSB3
ICYmIHNpemUuaGVpZ2h0KCkgPT0gaCkKKyAgICAgICAgaWYgKHNpemUud2lkdGgoKSA9PSB3aWR0
aCAmJiBzaXplLmhlaWdodCgpID09IGhlaWdodCkKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgaWYgKHZpZXcpCi0gICAgICAgICAgICB2aWV3LT5zZXRGaXhlZExheW91dFNpemUoV2ViQ29y
ZTo6SW50U2l6ZSh3LCBoKSk7CisgICAgICAgICAgICB2aWV3LT5zZXRGaXhlZExheW91dFNpemUo
V2ViQ29yZTo6SW50U2l6ZSh3aWR0aCwgaGVpZ2h0KSk7CiAgICAgfQogCiAgICAgaWYgKCF2aWV3
KQpAQCAtMTE0MywyNyArMTE0MywyNyBAQCB2b2lkIGV3a192aWV3X2ZpeGVkX2xheW91dF9zaXpl
X3NldChFdmFzX09iamVjdCogbywgRXZhc19Db29yZCB3LCBFdmFzX0Nvb3JkIGgpCiAgICAgdmll
dy0+Zm9yY2VMYXlvdXQoKTsKIH0KIAotdm9pZCBld2tfdmlld19maXhlZF9sYXlvdXRfc2l6ZV9n
ZXQoY29uc3QgRXZhc19PYmplY3QqIG8sIEV2YXNfQ29vcmQqIHcsIEV2YXNfQ29vcmQqIGgpCit2
b2lkIGV3a192aWV3X2ZpeGVkX2xheW91dF9zaXplX2dldChjb25zdCBFdmFzX09iamVjdCogZXdr
VmlldywgRXZhc19Db29yZCogd2lkdGgsIEV2YXNfQ29vcmQqIGhlaWdodCkKIHsKLSAgICBpZiAo
dykKLSAgICAgICAgKncgPSAwOwotICAgIGlmIChoKQotICAgICAgICAqaCA9IDA7Ci0gICAgRVdL
X1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCk7CisgICAgaWYgKHdpZHRoKQorICAgICAgICAq
d2lkdGggPSAwOworICAgIGlmIChoZWlnaHQpCisgICAgICAgICpoZWlnaHQgPSAwOworICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QpOwogICAgIEVXS19WSUVXX1BSSVZf
R0VUX09SX1JFVFVSTihzZCwgcHJpdik7CiAgICAgV2ViQ29yZTo6RnJhbWVWaWV3KiB2aWV3ID0g
cHJpdi0+bWFpbl9mcmFtZS0+dmlldygpOwogICAgIGlmICh2aWV3LT51c2VGaXhlZExheW91dCgp
KSB7CiAgICAgICAgIFdlYkNvcmU6OkludFNpemUgc2l6ZSA9IHZpZXctPmZpeGVkTGF5b3V0U2l6
ZSgpOwotICAgICAgICBpZiAodykKLSAgICAgICAgICAgICp3ID0gc2l6ZS53aWR0aCgpOwotICAg
ICAgICBpZiAoaCkKLSAgICAgICAgICAgICpoID0gc2l6ZS5oZWlnaHQoKTsKKyAgICAgICAgaWYg
KHdpZHRoKQorICAgICAgICAgICAgKndpZHRoID0gc2l6ZS53aWR0aCgpOworICAgICAgICBpZiAo
aGVpZ2h0KQorICAgICAgICAgICAgKmhlaWdodCA9IHNpemUuaGVpZ2h0KCk7CiAgICAgfQogfQog
Ci12b2lkIGV3a192aWV3X3RoZW1lX3NldChFdmFzX09iamVjdCogbywgY29uc3QgY2hhciogcGF0
aCkKK3ZvaWQgZXdrX3ZpZXdfdGhlbWVfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBj
aGFyKiBwYXRoKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QpOworICAg
IEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QpOwogICAgIEVXS19WSUVXX1BS
SVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdik7CiAgICAgaWYgKCFlaW5hX3N0cmluZ3NoYXJlX3Jl
cGxhY2UoJnByaXYtPnNldHRpbmdzLnRoZW1lLCBwYXRoKSkKICAgICAgICAgcmV0dXJuOwpAQCAt
MTE3NiwyMiArMTE3NiwyMiBAQCB2b2lkIGV3a192aWV3X3RoZW1lX3NldChFdmFzX09iamVjdCog
bywgY29uc3QgY2hhciogcGF0aCkKIAogfQogCi1jb25zdCBjaGFyKiBld2tfdmlld190aGVtZV9n
ZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCitjb25zdCBjaGFyKiBld2tfdmlld190aGVtZV9nZXQo
Y29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JF
VFVSTihvLCBzZCwgMCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBz
ZCwgMCk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCAwKTsKICAg
ICByZXR1cm4gcHJpdi0+c2V0dGluZ3MudGhlbWU7CiB9CiAKLUV2YXNfT2JqZWN0KiBld2tfdmll
d19mcmFtZV9tYWluX2dldChjb25zdCBFdmFzX09iamVjdCogbykKK0V2YXNfT2JqZWN0KiBld2tf
dmlld19mcmFtZV9tYWluX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBF
V0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAwKTsKKyAgICBFV0tfVklFV19TRF9HRVRf
T1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAwKTsKICAgICByZXR1cm4gc2QtPm1haW5fZnJhbWU7CiB9
CiAKLUV2YXNfT2JqZWN0KiBld2tfdmlld19mcmFtZV9mb2N1c2VkX2dldChjb25zdCBFdmFzX09i
amVjdCogbykKK0V2YXNfT2JqZWN0KiBld2tfdmlld19mcmFtZV9mb2N1c2VkX2dldChjb25zdCBF
dmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8s
IHNkLCAwKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAwKTsK
ICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIDApOwogCiAgICAgV2Vi
Q29yZTo6RnJhbWUqIGNvcmUgPSBwcml2LT5wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNl
ZEZyYW1lKCk7CkBAIC0xMjA0LDQyICsxMjA0LDQyIEBAIEV2YXNfT2JqZWN0KiBld2tfdmlld19m
cmFtZV9mb2N1c2VkX2dldChjb25zdCBFdmFzX09iamVjdCogbykKICAgICByZXR1cm4gY2xpZW50
LT53ZWJGcmFtZSgpOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfdXJpX3NldChFdmFzX09iamVj
dCogbywgY29uc3QgY2hhciogdXJpKQorRWluYV9Cb29sIGV3a192aWV3X3VyaV9zZXQoRXZhc19P
YmplY3QqIGV3a1ZpZXcsIGNvbnN0IGNoYXIqIHVyaSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRf
T1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVU
VVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICByZXR1cm4gZXdrX2ZyYW1lX3VyaV9z
ZXQoc2QtPm1haW5fZnJhbWUsIHVyaSk7CiB9CiAKLWNvbnN0IGNoYXIqIGV3a192aWV3X3VyaV9n
ZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCitjb25zdCBjaGFyKiBld2tfdmlld191cmlfZ2V0KGNv
bnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRV
Uk4obywgc2QsIDApOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2Qs
IDApOwogICAgIHJldHVybiBld2tfZnJhbWVfdXJpX2dldChzZC0+bWFpbl9mcmFtZSk7CiB9CiAK
LWNvbnN0IGNoYXIqIGV3a192aWV3X3RpdGxlX2dldChjb25zdCBFdmFzX09iamVjdCogbykKK2Nv
bnN0IGNoYXIqIGV3a192aWV3X3RpdGxlX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykK
IHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAwKTsKKyAgICBFV0tfVklF
V19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAwKTsKICAgICByZXR1cm4gZXdrX2ZyYW1l
X3RpdGxlX2dldChzZC0+bWFpbl9mcmFtZSk7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld19lZGl0
YWJsZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCitFaW5hX0Jvb2wgZXdrX3ZpZXdfZWRpdGFi
bGVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dF
VF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9S
RVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAgIHJldHVybiBld2tfZnJhbWVfZWRp
dGFibGVfZ2V0KHNkLT5tYWluX2ZyYW1lKTsKIH0KIAotdm9pZCBld2tfdmlld19iZ19jb2xvcl9z
ZXQoRXZhc19PYmplY3QqIG8sIGludCByLCBpbnQgZywgaW50IGIsIGludCBhKQordm9pZCBld2tf
dmlld19iZ19jb2xvcl9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGludCByZWQsIGludCBncmVl
biwgaW50IGJsdWUsIGludCBhbHBoYSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJO
KG8sIHNkKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkKTsKICAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpKTsKICAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTihzZC0+YXBpLT5iZ19jb2xvcl9zZXQpOwogCi0gICAgaWYgKGEgPCAwKSB7
Ci0gICAgICAgIFdSTigiQWxwaGEgbGVzcyB0aGFuIHplcm8gKCVkKS4iLCBhKTsKLSAgICAgICAg
YSA9IDA7Ci0gICAgfSBlbHNlIGlmIChhID4gMjU1KSB7Ci0gICAgICAgIFdSTigiQWxwaGEgaXMg
bGFyZ2VyIHRoYW4gMjU1ICglZCkuIiwgYSk7Ci0gICAgICAgIGEgPSAyNTU7CisgICAgaWYgKGFs
cGhhIDwgMCkgeworICAgICAgICBXUk4oIkFscGhhIGxlc3MgdGhhbiB6ZXJvICglZCkuIiwgYWxw
aGEpOworICAgICAgICBhbHBoYSA9IDA7CisgICAgfSBlbHNlIGlmIChhbHBoYSA+IDI1NSkgewor
ICAgICAgICBXUk4oIkFscGhhIGlzIGxhcmdlciB0aGFuIDI1NSAoJWQpLiIsIGFscGhhKTsKKyAg
ICAgICAgYWxwaGEgPSAyNTU7CiAgICAgfQogCiAjZGVmaW5lIENIRUNLX1BSRU1VTF9DT0xPUihj
LCBhKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC0xMjUxLDU3
ICsxMjUxLDU3IEBAIHZvaWQgZXdrX3ZpZXdfYmdfY29sb3Jfc2V0KEV2YXNfT2JqZWN0KiBvLCBp
bnQgciwgaW50IGcsIGludCBiLCBpbnQgYSkKICAgICAgICAgICAgIGMsIGEpOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgYyA9
IGE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKICAgICB9Ci0gICAgQ0hFQ0tfUFJFTVVMX0NPTE9SKHIsIGEpOwotICAgIENIRUNLX1BS
RU1VTF9DT0xPUihnLCBhKTsKLSAgICBDSEVDS19QUkVNVUxfQ09MT1IoYiwgYSk7CisgICAgQ0hF
Q0tfUFJFTVVMX0NPTE9SKHJlZCwgYWxwaGEpOworICAgIENIRUNLX1BSRU1VTF9DT0xPUihncmVl
biwgYWxwaGEpOworICAgIENIRUNLX1BSRU1VTF9DT0xPUihibHVlLCBhbHBoYSk7CiAjdW5kZWYg
Q0hFQ0tfUFJFTVVMX0NPTE9SCiAKLSAgICBzZC0+YmdfY29sb3IuciA9IHI7Ci0gICAgc2QtPmJn
X2NvbG9yLmcgPSBnOwotICAgIHNkLT5iZ19jb2xvci5iID0gYjsKLSAgICBzZC0+YmdfY29sb3Iu
YSA9IGE7CisgICAgc2QtPmJnX2NvbG9yLnIgPSByZWQ7CisgICAgc2QtPmJnX2NvbG9yLmcgPSBn
cmVlbjsKKyAgICBzZC0+YmdfY29sb3IuYiA9IGJsdWU7CisgICAgc2QtPmJnX2NvbG9yLmEgPSBh
bHBoYTsKIAotICAgIHNkLT5hcGktPmJnX2NvbG9yX3NldChzZCwgciwgZywgYiwgYSk7CisgICAg
c2QtPmFwaS0+YmdfY29sb3Jfc2V0KHNkLCByZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7CiAKICAg
ICBXZWJDb3JlOjpGcmFtZVZpZXcqIHZpZXcgPSBzZC0+X3ByaXYtPm1haW5fZnJhbWUtPnZpZXco
KTsKICAgICBpZiAodmlldykgewogICAgICAgICBXZWJDb3JlOjpDb2xvciBjb2xvcjsKIAotICAg
ICAgICBpZiAoIWEpCisgICAgICAgIGlmICghYWxwaGEpCiAgICAgICAgICAgICBjb2xvciA9IFdl
YkNvcmU6OkNvbG9yKDAsIDAsIDAsIDApOwotICAgICAgICBlbHNlIGlmIChhID09IDI1NSkKLSAg
ICAgICAgICAgIGNvbG9yID0gV2ViQ29yZTo6Q29sb3IociwgZywgYiwgYSk7CisgICAgICAgIGVs
c2UgaWYgKGFscGhhID09IDI1NSkKKyAgICAgICAgICAgIGNvbG9yID0gV2ViQ29yZTo6Q29sb3Io
cmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb2xv
ciA9IFdlYkNvcmU6OkNvbG9yKHIgKiAyNTUgLyBhLCBnICogMjU1IC8gYSwgYiAqIDI1NSAvIGEs
IGEpOworICAgICAgICAgICAgY29sb3IgPSBXZWJDb3JlOjpDb2xvcihyZWQgKiAyNTUgLyBhbHBo
YSwgZ3JlZW4gKiAyNTUgLyBhbHBoYSwgYmx1ZSAqIDI1NSAvIGFscGhhLCBhbHBoYSk7CiAKLSAg
ICAgICAgdmlldy0+dXBkYXRlQmFja2dyb3VuZFJlY3Vyc2l2ZWx5KGNvbG9yLCAhYSk7CisgICAg
ICAgIHZpZXctPnVwZGF0ZUJhY2tncm91bmRSZWN1cnNpdmVseShjb2xvciwgIWFscGhhKTsKICAg
ICB9CiB9CiAKLXZvaWQgZXdrX3ZpZXdfYmdfY29sb3JfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBv
LCBpbnQqIHIsIGludCogZywgaW50KiBiLCBpbnQqIGEpCit2b2lkIGV3a192aWV3X2JnX2NvbG9y
X2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldywgaW50KiByZWQsIGludCogZ3JlZW4sIGlu
dCogYmx1ZSwgaW50KiBhbHBoYSkKIHsKLSAgICBpZiAocikKLSAgICAgICAgKnIgPSAwOwotICAg
IGlmIChnKQotICAgICAgICAqZyA9IDA7Ci0gICAgaWYgKGIpCi0gICAgICAgICpiID0gMDsKLSAg
ICBpZiAoYSkKLSAgICAgICAgKmEgPSAwOwotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
bywgc2QpOwotICAgIGlmIChyKQotICAgICAgICAqciA9IHNkLT5iZ19jb2xvci5yOwotICAgIGlm
IChnKQotICAgICAgICAqZyA9IHNkLT5iZ19jb2xvci5nOwotICAgIGlmIChiKQotICAgICAgICAq
YiA9IHNkLT5iZ19jb2xvci5iOwotICAgIGlmIChhKQotICAgICAgICAqYSA9IHNkLT5iZ19jb2xv
ci5hOworICAgIGlmIChyZWQpCisgICAgICAgICpyZWQgPSAwOworICAgIGlmIChncmVlbikKKyAg
ICAgICAgKmdyZWVuID0gMDsKKyAgICBpZiAoYmx1ZSkKKyAgICAgICAgKmJsdWUgPSAwOworICAg
IGlmIChhbHBoYSkKKyAgICAgICAgKmFscGhhID0gMDsKKyAgICBFV0tfVklFV19TRF9HRVRfT1Jf
UkVUVVJOKGV3a1ZpZXcsIHNkKTsKKyAgICBpZiAocmVkKQorICAgICAgICAqcmVkID0gc2QtPmJn
X2NvbG9yLnI7CisgICAgaWYgKGdyZWVuKQorICAgICAgICAqZ3JlZW4gPSBzZC0+YmdfY29sb3Iu
ZzsKKyAgICBpZiAoYmx1ZSkKKyAgICAgICAgKmJsdWUgPSBzZC0+YmdfY29sb3IuYjsKKyAgICBp
ZiAoYWxwaGEpCisgICAgICAgICphbHBoYSA9IHNkLT5iZ19jb2xvci5hOwogfQogCi1FaW5hX0Jv
b2wgZXdrX3ZpZXdfdGV4dF9zZWFyY2goY29uc3QgRXZhc19PYmplY3QqIG8sIGNvbnN0IGNoYXIq
IHN0cmluZywgRWluYV9Cb29sIGNhc2Vfc2Vuc2l0aXZlLCBFaW5hX0Jvb2wgZm9yd2FyZCwgRWlu
YV9Cb29sIHdyYXApCitFaW5hX0Jvb2wgZXdrX3ZpZXdfdGV4dF9zZWFyY2goY29uc3QgRXZhc19P
YmplY3QqIGV3a1ZpZXcsIGNvbnN0IGNoYXIqIHN0cmluZywgRWluYV9Cb29sIGNhc2Vfc2Vuc2l0
aXZlLCBFaW5hX0Jvb2wgZm9yd2FyZCwgRWluYV9Cb29sIHdyYXApCiB7Ci0gICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9H
RVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTl9WQUwoc3RyaW5nLCBFSU5BX0ZBTFNFKTsKICAgICBXVEY6OlRleHRDYXNlU2Vu
c2l0aXZpdHkgc2Vuc2l0aXZlOwpAQCAtMTMzMSw5ICsxMzMxLDkgQEAgRWluYV9Cb29sIGV3a192
aWV3X3RleHRfc2VhcmNoKGNvbnN0IEV2YXNfT2JqZWN0KiBvLCBjb25zdCBjaGFyKiBzdHJpbmcs
IEVpbmFfQm8KICAqCiAgKiBAcmV0dXJuIG51bWJlciBvZiBtYXRjaGVzLgogICovCi11bnNpZ25l
ZCBpbnQgZXdrX3ZpZXdfdGV4dF9tYXRjaGVzX21hcmsoRXZhc19PYmplY3QqIG8sIGNvbnN0IGNo
YXIqIHN0cmluZywgRWluYV9Cb29sIGNhc2Vfc2Vuc2l0aXZlLCBFaW5hX0Jvb2wgaGlnaGxpZ2h0
LCB1bnNpZ25lZCBpbnQgbGltaXQpCit1bnNpZ25lZCBpbnQgZXdrX3ZpZXdfdGV4dF9tYXRjaGVz
X21hcmsoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGNvbnN0IGNoYXIqIHN0cmluZywgRWluYV9Cb29s
IGNhc2Vfc2Vuc2l0aXZlLCBFaW5hX0Jvb2wgaGlnaGxpZ2h0LCB1bnNpZ25lZCBpbnQgbGltaXQp
CiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgMCk7CisgICAgRVdLX1ZJ
RVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgMCk7CiAgICAgRVdLX1ZJRVdfUFJJVl9H
RVRfT1JfUkVUVVJOKHNkLCBwcml2LCAwKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
Tl9WQUwoc3RyaW5nLCAwKTsKICAgICBXVEY6OlRleHRDYXNlU2Vuc2l0aXZpdHkgc2Vuc2l0aXZl
OwpAQCAtMTM0NiwzNSArMTM0NiwzNSBAQCB1bnNpZ25lZCBpbnQgZXdrX3ZpZXdfdGV4dF9tYXRj
aGVzX21hcmsoRXZhc19PYmplY3QqIG8sIGNvbnN0IGNoYXIqIHN0cmluZywgRWluYQogICAgIHJl
dHVybiBwcml2LT5wYWdlLT5tYXJrQWxsTWF0Y2hlc0ZvclRleHQoU3RyaW5nOjpmcm9tVVRGOChz
dHJpbmcpLCBzZW5zaXRpdmUsIGhpZ2hsaWdodCwgbGltaXQpOwogfQogCi1FaW5hX0Jvb2wgZXdr
X3ZpZXdfdGV4dF9tYXRjaGVzX3VubWFya19hbGwoRXZhc19PYmplY3QqIG8pCitFaW5hX0Jvb2wg
ZXdrX3ZpZXdfdGV4dF9tYXRjaGVzX3VubWFya19hbGwoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7
Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAg
RVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAg
RVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBw
cml2LT5wYWdlLT51bm1hcmtBbGxUZXh0TWF0Y2hlcygpOwogICAgIHJldHVybiBFSU5BX1RSVUU7
CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld190ZXh0X21hdGNoZXNfaGlnaGxpZ2h0X3NldChFdmFz
X09iamVjdCogbywgRWluYV9Cb29sIGhpZ2hsaWdodCkKK0VpbmFfQm9vbCBld2tfdmlld190ZXh0
X21hdGNoZXNfaGlnaGxpZ2h0X3NldChFdmFzX09iamVjdCogZXdrVmlldywgRWluYV9Cb29sIGhp
Z2hsaWdodCkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZB
TFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZB
TFNFKTsKICAgICByZXR1cm4gZXdrX2ZyYW1lX3RleHRfbWF0Y2hlc19oaWdobGlnaHRfc2V0KHNk
LT5tYWluX2ZyYW1lLCBoaWdobGlnaHQpOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfdGV4dF9t
YXRjaGVzX2hpZ2hsaWdodF9nZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCitFaW5hX0Jvb2wgZXdr
X3ZpZXdfdGV4dF9tYXRjaGVzX2hpZ2hsaWdodF9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1Zp
ZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7
CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7
CiAgICAgcmV0dXJuIGV3a19mcmFtZV90ZXh0X21hdGNoZXNfaGlnaGxpZ2h0X2dldChzZC0+bWFp
bl9mcmFtZSk7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld19lZGl0YWJsZV9zZXQoRXZhc19PYmpl
Y3QqIG8sIEVpbmFfQm9vbCBlZGl0YWJsZSkKK0VpbmFfQm9vbCBld2tfdmlld19lZGl0YWJsZV9z
ZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCBlZGl0YWJsZSkKIHsKLSAgICBFV0tf
VklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19T
RF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICByZXR1cm4gZXdr
X2ZyYW1lX2VkaXRhYmxlX3NldChzZC0+bWFpbl9mcmFtZSwgZWRpdGFibGUpOwogfQogCi1jaGFy
KiBld2tfdmlld19zZWxlY3Rpb25fZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQorY2hhciogZXdr
X3ZpZXdfc2VsZWN0aW9uX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBF
V0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAwKTsKKyAgICBFV0tfVklFV19TRF9HRVRf
T1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAwKTsKICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRV
Uk4oc2QsIHByaXYsIDApOwogICAgIENTdHJpbmcgcyA9IHByaXYtPnBhZ2UtPmZvY3VzQ29udHJv
bGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKS0+ZWRpdG9yKCktPnNlbGVjdGVkVGV4dCgpLnV0
ZjgoKTsKICAgICBpZiAocy5pc051bGwoKSkKQEAgLTEzODcsOSArMTM4Nyw5IEBAIHN0YXRpYyBF
aW5hX0Jvb2wgX2V3a192aWV3X2VkaXRvcl9jb21tYW5kKEV3a19WaWV3X1ByaXZhdGVfRGF0YSog
cHJpdiwgY29uc3QgY2hhCiAgICAgcmV0dXJuIHByaXYtPnBhZ2UtPmZvY3VzQ29udHJvbGxlcigp
LT5mb2N1c2VkT3JNYWluRnJhbWUoKS0+ZWRpdG9yKCktPmNvbW1hbmQoV1RGOjpTdHJpbmc6OmZy
b21VVEY4KGNvbW1hbmQpKS5leGVjdXRlKHZhbHVlKTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3
X2V4ZWN1dGVfZWRpdG9yX2NvbW1hbmQoRXZhc19PYmplY3QqIG8sIGNvbnN0IEV3a19FZGl0b3Jf
Q29tbWFuZCBjb21tYW5kLCBjb25zdCBjaGFyKiB2YWx1ZSkKK0VpbmFfQm9vbCBld2tfdmlld19l
eGVjdXRlX2VkaXRvcl9jb21tYW5kKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBFd2tfRWRp
dG9yX0NvbW1hbmQgY29tbWFuZCwgY29uc3QgY2hhciogdmFsdWUpCiB7Ci0gICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9H
RVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKIAogICAgIHN3aXRjaCAoY29tbWFu
ZCkgewpAQCAtMTQxNCwxMCArMTQxNCwxMCBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfZXhlY3V0ZV9l
ZGl0b3JfY29tbWFuZChFdmFzX09iamVjdCogbywgY29uc3QgRXdrX0VkaXRvcl9Db21tYQogICAg
IH0KIH0KIAotRWluYV9Cb29sIGV3a192aWV3X2NvbnRleHRfbWVudV9mb3J3YXJkX2V2ZW50KEV2
YXNfT2JqZWN0KiBvLCBjb25zdCBFdmFzX0V2ZW50X01vdXNlX0Rvd24qIGV2KQorRWluYV9Cb29s
IGV3a192aWV3X2NvbnRleHRfbWVudV9mb3J3YXJkX2V2ZW50KEV2YXNfT2JqZWN0KiBld2tWaWV3
LCBjb25zdCBFdmFzX0V2ZW50X01vdXNlX0Rvd24qIGRvd25FdmVudCkKIHsKICNpZiBFTkFCTEUo
Q09OVEVYVF9NRU5VUykKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5B
X0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5B
X0ZBTFNFKTsKICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFf
RkFMU0UpOwogICAgIEVpbmFfQm9vbCBtb3VzZV9wcmVzc19oYW5kbGVkID0gRUlOQV9GQUxTRTsK
IApAQCAtMTQyNiw3ICsxNDI2LDcgQEAgRWluYV9Cb29sIGV3a192aWV3X2NvbnRleHRfbWVudV9m
b3J3YXJkX2V2ZW50KEV2YXNfT2JqZWN0KiBvLCBjb25zdCBFdmFzX0V2ZW50X00KICAgICBFdmFz
X0Nvb3JkIHgsIHk7CiAgICAgZXZhc19vYmplY3RfZ2VvbWV0cnlfZ2V0KHNkLT5zZWxmLCAmeCwg
JnksIDAsIDApOwogCi0gICAgV2ViQ29yZTo6UGxhdGZvcm1Nb3VzZUV2ZW50IGV2ZW50KGV2LCBX
ZWJDb3JlOjpJbnRQb2ludCh4LCB5KSk7CisgICAgV2ViQ29yZTo6UGxhdGZvcm1Nb3VzZUV2ZW50
IGV2ZW50KGRvd25FdmVudCwgV2ViQ29yZTo6SW50UG9pbnQoeCwgeSkpOwogCiAgICAgaWYgKG1h
aW5fZnJhbWUtPnZpZXcoKSkgewogICAgICAgICBtb3VzZV9wcmVzc19oYW5kbGVkID0KQEAgLTE0
NTAsODUgKzE0NTAsODUgQEAgRWluYV9Cb29sIGV3a192aWV3X2NvbnRleHRfbWVudV9mb3J3YXJk
X2V2ZW50KEV2YXNfT2JqZWN0KiBvLCBjb25zdCBFdmFzX0V2ZW50X00KICNlbmRpZgogfQogCi1k
b3VibGUgZXdrX3ZpZXdfbG9hZF9wcm9ncmVzc19nZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCitk
b3VibGUgZXdrX3ZpZXdfbG9hZF9wcm9ncmVzc19nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1Zp
ZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgLTEuMCk7CisgICAg
RVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgLTEuMCk7CiAgICAgRVdLX1ZJ
RVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCAtMS4wKTsKICAgICByZXR1cm4gcHJpdi0+
cGFnZS0+cHJvZ3Jlc3MoKS0+ZXN0aW1hdGVkUHJvZ3Jlc3MoKTsKIH0KIAotRWluYV9Cb29sIGV3
a192aWV3X3N0b3AoRXZhc19PYmplY3QqIG8pCitFaW5hX0Jvb2wgZXdrX3ZpZXdfc3RvcChFdmFz
X09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNk
LCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNk
LCBFSU5BX0ZBTFNFKTsKICAgICByZXR1cm4gZXdrX2ZyYW1lX3N0b3Aoc2QtPm1haW5fZnJhbWUp
OwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfcmVsb2FkKEV2YXNfT2JqZWN0KiBvKQorRWluYV9C
b29sIGV3a192aWV3X3JlbG9hZChFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklF
V19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9H
RVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICByZXR1cm4gZXdrX2Zy
YW1lX3JlbG9hZChzZC0+bWFpbl9mcmFtZSk7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld19yZWxv
YWRfZnVsbChFdmFzX09iamVjdCogbykKK0VpbmFfQm9vbCBld2tfdmlld19yZWxvYWRfZnVsbChF
dmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8s
IHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcs
IHNkLCBFSU5BX0ZBTFNFKTsKICAgICByZXR1cm4gZXdrX2ZyYW1lX3JlbG9hZF9mdWxsKHNkLT5t
YWluX2ZyYW1lKTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X2JhY2soRXZhc19PYmplY3QqIG8p
CitFaW5hX0Jvb2wgZXdrX3ZpZXdfYmFjayhFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBF
V0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklF
V19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICByZXR1cm4g
ZXdrX2ZyYW1lX2JhY2soc2QtPm1haW5fZnJhbWUpOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdf
Zm9yd2FyZChFdmFzX09iamVjdCogbykKK0VpbmFfQm9vbCBld2tfdmlld19mb3J3YXJkKEV2YXNf
T2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2Qs
IEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2Qs
IEVJTkFfRkFMU0UpOwogICAgIHJldHVybiBld2tfZnJhbWVfZm9yd2FyZChzZC0+bWFpbl9mcmFt
ZSk7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld19uYXZpZ2F0ZShFdmFzX09iamVjdCogbywgaW50
IHN0ZXBzKQorRWluYV9Cb29sIGV3a192aWV3X25hdmlnYXRlKEV2YXNfT2JqZWN0KiBld2tWaWV3
LCBpbnQgc3RlcHMpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlO
QV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlO
QV9GQUxTRSk7CiAgICAgcmV0dXJuIGV3a19mcmFtZV9uYXZpZ2F0ZShzZC0+bWFpbl9mcmFtZSwg
c3RlcHMpOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfYmFja19wb3NzaWJsZShFdmFzX09iamVj
dCogbykKK0VpbmFfQm9vbCBld2tfdmlld19iYWNrX3Bvc3NpYmxlKEV2YXNfT2JqZWN0KiBld2tW
aWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0Up
OworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0Up
OwogICAgIHJldHVybiBld2tfZnJhbWVfYmFja19wb3NzaWJsZShzZC0+bWFpbl9mcmFtZSk7CiB9
CiAKLUVpbmFfQm9vbCBld2tfdmlld19mb3J3YXJkX3Bvc3NpYmxlKEV2YXNfT2JqZWN0KiBvKQor
RWluYV9Cb29sIGV3a192aWV3X2ZvcndhcmRfcG9zc2libGUoRXZhc19PYmplY3QqIGV3a1ZpZXcp
CiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7Cisg
ICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAg
ICAgcmV0dXJuIGV3a19mcmFtZV9mb3J3YXJkX3Bvc3NpYmxlKHNkLT5tYWluX2ZyYW1lKTsKIH0K
IAotRWluYV9Cb29sIGV3a192aWV3X25hdmlnYXRlX3Bvc3NpYmxlKEV2YXNfT2JqZWN0KiBvLCBp
bnQgc3RlcHMpCitFaW5hX0Jvb2wgZXdrX3ZpZXdfbmF2aWdhdGVfcG9zc2libGUoRXZhc19PYmpl
Y3QqIGV3a1ZpZXcsIGludCBzdGVwcykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJO
KG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1Zp
ZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICByZXR1cm4gZXdrX2ZyYW1lX25hdmlnYXRlX3Bvc3Np
YmxlKHNkLT5tYWluX2ZyYW1lLCBzdGVwcyk7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld19oaXN0
b3J5X2VuYWJsZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCitFaW5hX0Jvb2wgZXdrX3ZpZXdf
aGlzdG9yeV9lbmFibGVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVX
X1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVXS19WSUVX
X1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PFdlYkNvcmU6OkJhY2tGb3J3YXJkTGlzdEltcGwqPihwcml2LT5wYWdlLT5iYWNr
Rm9yd2FyZExpc3QoKSktPmVuYWJsZWQoKTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X2hpc3Rv
cnlfZW5hYmxlX3NldChFdmFzX09iamVjdCogbywgRWluYV9Cb29sIGVuYWJsZSkKK0VpbmFfQm9v
bCBld2tfdmlld19oaXN0b3J5X2VuYWJsZV9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFf
Qm9vbCBlbmFibGUpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlO
QV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlO
QV9GQUxTRSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5B
X0ZBTFNFKTsKICAgICBzdGF0aWNfY2FzdDxXZWJDb3JlOjpCYWNrRm9yd2FyZExpc3RJbXBsKj4o
cHJpdi0+cGFnZS0+YmFja0ZvcndhcmRMaXN0KCkpLT5zZXRFbmFibGVkKGVuYWJsZSk7CiAgICAg
cmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotRXdrX0hpc3RvcnkqIGV3a192aWV3X2hpc3RvcnlfZ2V0
KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQorRXdrX0hpc3RvcnkqIGV3a192aWV3X2hpc3RvcnlfZ2V0
KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9S
RVRVUk4obywgc2QsIDApOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywg
c2QsIDApOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgMCk7CiAg
ICAgaWYgKCFzdGF0aWNfY2FzdDxXZWJDb3JlOjpCYWNrRm9yd2FyZExpc3RJbXBsKj4ocHJpdi0+
cGFnZS0+YmFja0ZvcndhcmRMaXN0KCkpLT5lbmFibGVkKCkpIHsKICAgICAgICAgRVJSKCJhc2tl
ZCBoaXN0b3J5LCBidXQgaXQncyBkaXNhYmxlZCEgUmV0dXJuaW5nIDAhIik7CkBAIC0xNTM3LDE1
ICsxNTM3LDE1IEBAIEV3a19IaXN0b3J5KiBld2tfdmlld19oaXN0b3J5X2dldChjb25zdCBFdmFz
X09iamVjdCogbykKICAgICByZXR1cm4gcHJpdi0+aGlzdG9yeTsKIH0KIAotZmxvYXQgZXdrX3Zp
ZXdfem9vbV9nZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCitmbG9hdCBld2tfdmlld196b29tX2dl
dChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1Jf
UkVUVVJOKG8sIHNkLCAtMS4wKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1Zp
ZXcsIHNkLCAtMS4wKTsKICAgICByZXR1cm4gZXdrX2ZyYW1lX3pvb21fZ2V0KHNkLT5tYWluX2Zy
YW1lKTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3pvb21fc2V0KEV2YXNfT2JqZWN0KiBvLCBm
bG9hdCB6b29tLCBFdmFzX0Nvb3JkIGN4LCBFdmFzX0Nvb3JkIGN5KQorRWluYV9Cb29sIGV3a192
aWV3X3pvb21fc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBmbG9hdCB6b29tLCBFdmFzX0Nvb3Jk
IGN4LCBFdmFzX0Nvb3JkIGN5KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywg
c2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywg
c2QsIEVJTkFfRkFMU0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUKHNkLCBwcml2KTsKIAogICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+YXBpLCBFSU5BX0ZBTFNFKTsKQEAg
LTE1NjksMTUgKzE1NjksMTUgQEAgRWluYV9Cb29sIGV3a192aWV3X3pvb21fc2V0KEV2YXNfT2Jq
ZWN0KiBvLCBmbG9hdCB6b29tLCBFdmFzX0Nvb3JkIGN4LCBFdmFzX0Nvb3IKICAgICByZXR1cm4g
c2QtPmFwaS0+em9vbV9zZXQoc2QsIHpvb20sIGN4LCBjeSk7CiB9CiAKLUVpbmFfQm9vbCBld2tf
dmlld196b29tX3dlYWtfc21vb3RoX3NjYWxlX2dldChjb25zdCBFdmFzX09iamVjdCogbykKK0Vp
bmFfQm9vbCBld2tfdmlld196b29tX3dlYWtfc21vb3RoX3NjYWxlX2dldChjb25zdCBFdmFzX09i
amVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBF
SU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBF
SU5BX0ZBTFNFKTsKICAgICByZXR1cm4gc2QtPnpvb21fd2Vha19zbW9vdGhfc2NhbGU7CiB9CiAK
LXZvaWQgZXdrX3ZpZXdfem9vbV93ZWFrX3Ntb290aF9zY2FsZV9zZXQoRXZhc19PYmplY3QqIG8s
IEVpbmFfQm9vbCBzbW9vdGhfc2NhbGUpCit2b2lkIGV3a192aWV3X3pvb21fd2Vha19zbW9vdGhf
c2NhbGVfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wgc21vb3RoX3NjYWxlKQog
ewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QpOworICAgIEVXS19WSUVXX1NE
X0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QpOwogICAgIHNtb290aF9zY2FsZSA9ICEhc21vb3Ro
X3NjYWxlOwogICAgIGlmIChzZC0+em9vbV93ZWFrX3Ntb290aF9zY2FsZSA9PSBzbW9vdGhfc2Nh
bGUpCiAgICAgICAgIHJldHVybjsKQEAgLTE1ODcsOSArMTU4Nyw5IEBAIHZvaWQgZXdrX3ZpZXdf
em9vbV93ZWFrX3Ntb290aF9zY2FsZV9zZXQoRXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCBzbW9v
dGhfc2NhbGUpCiAgICAgc2QtPmFwaS0+em9vbV93ZWFrX3Ntb290aF9zY2FsZV9zZXQoc2QsIHNt
b290aF9zY2FsZSk7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld196b29tX3dlYWtfc2V0KEV2YXNf
T2JqZWN0KiBvLCBmbG9hdCB6b29tLCBFdmFzX0Nvb3JkIGN4LCBFdmFzX0Nvb3JkIGN5KQorRWlu
YV9Cb29sIGV3a192aWV3X3pvb21fd2Vha19zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGZsb2F0
IHpvb20sIEV2YXNfQ29vcmQgY2VudGVyWCwgRXZhc19Db29yZCBjZW50ZXJZKQogewotICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVX
X1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVXS19WSUVX
X1BSSVZfR0VUKHNkLCBwcml2KTsKIAogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZB
TChzZC0+YXBpLCBFSU5BX0ZBTFNFKTsKQEAgLTE2MTIsNDEgKzE2MTIsNDEgQEAgRWluYV9Cb29s
IGV3a192aWV3X3pvb21fd2Vha19zZXQoRXZhc19PYmplY3QqIG8sIGZsb2F0IHpvb20sIEV2YXNf
Q29vcmQgY3gsIEV2YXMKICAgICBzZC0+YW5pbWF0ZWRfem9vbS56b29tLnN0YXJ0ID0gZXdrX2Zy
YW1lX3pvb21fZ2V0KHNkLT5tYWluX2ZyYW1lKTsKICAgICBzZC0+YW5pbWF0ZWRfem9vbS56b29t
LmVuZCA9IHpvb207CiAgICAgc2QtPmFuaW1hdGVkX3pvb20uem9vbS5jdXJyZW50ID0gem9vbTsK
LSAgICByZXR1cm4gc2QtPmFwaS0+em9vbV93ZWFrX3NldChzZCwgem9vbSwgY3gsIGN5KTsKKyAg
ICByZXR1cm4gc2QtPmFwaS0+em9vbV93ZWFrX3NldChzZCwgem9vbSwgY2VudGVyWCwgY2VudGVy
WSk7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld196b29tX2FuaW1hdGVkX21hcmtfc3RhcnQoRXZh
c19PYmplY3QqIG8sIGZsb2F0IHpvb20pCitFaW5hX0Jvb2wgZXdrX3ZpZXdfem9vbV9hbmltYXRl
ZF9tYXJrX3N0YXJ0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBmbG9hdCB6b29tKQogewotICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVX
X1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAgIHNkLT5hbmlt
YXRlZF96b29tLnpvb20uc3RhcnQgPSB6b29tOwogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAK
LUVpbmFfQm9vbCBld2tfdmlld196b29tX2FuaW1hdGVkX21hcmtfZW5kKEV2YXNfT2JqZWN0KiBv
LCBmbG9hdCB6b29tKQorRWluYV9Cb29sIGV3a192aWV3X3pvb21fYW5pbWF0ZWRfbWFya19lbmQo
RXZhc19PYmplY3QqIGV3a1ZpZXcsIGZsb2F0IHpvb20pCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JF
VFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgc2QtPmFuaW1hdGVkX3pvb20uem9v
bS5lbmQgPSB6b29tOwogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLUVpbmFfQm9vbCBld2tf
dmlld196b29tX2FuaW1hdGVkX21hcmtfY3VycmVudChFdmFzX09iamVjdCogbywgZmxvYXQgem9v
bSkKK0VpbmFfQm9vbCBld2tfdmlld196b29tX2FuaW1hdGVkX21hcmtfY3VycmVudChFdmFzX09i
amVjdCogZXdrVmlldywgZmxvYXQgem9vbSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVU
VVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3
a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBzZC0+YW5pbWF0ZWRfem9vbS56b29tLmN1cnJl
bnQgPSB6b29tOwogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmll
d196b29tX2FuaW1hdGVkX21hcmtfc3RvcChFdmFzX09iamVjdCogbykKK0VpbmFfQm9vbCBld2tf
dmlld196b29tX2FuaW1hdGVkX21hcmtfc3RvcChFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tf
VklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBfZXdr
X3ZpZXdfem9vbV9hbmltYXRlZF9tYXJrX3N0b3Aoc2QpOwogICAgIHJldHVybiBFSU5BX1RSVUU7
CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld196b29tX2FuaW1hdGVkX3NldChFdmFzX09iamVjdCog
bywgZmxvYXQgem9vbSwgZmxvYXQgZHVyYXRpb24sIEV2YXNfQ29vcmQgY3gsIEV2YXNfQ29vcmQg
Y3kpCitFaW5hX0Jvb2wgZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9zZXQoRXZhc19PYmplY3QqIGV3
a1ZpZXcsIGZsb2F0IHpvb20sIGZsb2F0IGR1cmF0aW9uLCBFdmFzX0Nvb3JkIGNlbnRlclgsIEV2
YXNfQ29vcmQgY2VudGVyWSkKIHsKICAgICBkb3VibGUgbm93OwotICAgIEVXS19WSUVXX1NEX0dF
VF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9S
RVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09S
X1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk5fVkFMKHNkLT5hcGksIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOX1ZBTChzZC0+YXBpLT56b29tX3dlYWtfc2V0LCBFSU5BX0ZBTFNFKTsKQEAgLTE2NzIs
MTAgKzE2NzIsMTAgQEAgRWluYV9Cb29sIGV3a192aWV3X3pvb21fYW5pbWF0ZWRfc2V0KEV2YXNf
T2JqZWN0KiBvLCBmbG9hdCB6b29tLCBmbG9hdCBkdXJhdGlvbiwKICAgICAgICAgX2V3a192aWV3
X3pvb21fYW5pbWF0aW9uX3N0YXJ0KHNkKTsKICAgICB9CiAKLSAgICBpZiAoY3ggPCAwKQotICAg
ICAgICBjeCA9IDA7Ci0gICAgaWYgKGN5IDwgMCkKLSAgICAgICAgY3kgPSAwOworICAgIGlmIChj
ZW50ZXJYIDwgMCkKKyAgICAgICAgY2VudGVyWCA9IDA7CisgICAgaWYgKGNlbnRlclkgPCAwKQor
ICAgICAgICBjZW50ZXJZID0gMDsKIAogICAgIG5vdyA9IGVjb3JlX2xvb3BfdGltZV9nZXQoKTsK
ICAgICBwcml2LT5hbmltYXRlZF96b29tLnRpbWUuc3RhcnQgPSBub3c7CkBAIC0xNjgzLDggKzE2
ODMsOCBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9zZXQoRXZhc19PYmplY3Qq
IG8sIGZsb2F0IHpvb20sIGZsb2F0IGR1cmF0aW9uLAogICAgIHByaXYtPmFuaW1hdGVkX3pvb20u
dGltZS5kdXJhdGlvbiA9IGR1cmF0aW9uOwogICAgIHByaXYtPmFuaW1hdGVkX3pvb20uem9vbS5l
bmQgPSB6b29tOwogICAgIHByaXYtPmFuaW1hdGVkX3pvb20uem9vbS5yYW5nZSA9IChwcml2LT5h
bmltYXRlZF96b29tLnpvb20uZW5kIC0gcHJpdi0+YW5pbWF0ZWRfem9vbS56b29tLnN0YXJ0KTsK
LSAgICBwcml2LT5hbmltYXRlZF96b29tLmNlbnRlci54ID0gY3g7Ci0gICAgcHJpdi0+YW5pbWF0
ZWRfem9vbS5jZW50ZXIueSA9IGN5OworICAgIHByaXYtPmFuaW1hdGVkX3pvb20uY2VudGVyLngg
PSBjZW50ZXJYOworICAgIHByaXYtPmFuaW1hdGVkX3pvb20uY2VudGVyLnkgPSBjZW50ZXJZOwog
ICAgIHNkLT5hbmltYXRlZF96b29tLnpvb20uY3VycmVudCA9IHByaXYtPmFuaW1hdGVkX3pvb20u
em9vbS5zdGFydDsKICAgICBzZC0+YW5pbWF0ZWRfem9vbS56b29tLnN0YXJ0ID0gcHJpdi0+YW5p
bWF0ZWRfem9vbS56b29tLnN0YXJ0OwogICAgIHNkLT5hbmltYXRlZF96b29tLnpvb20uZW5kID0g
cHJpdi0+YW5pbWF0ZWRfem9vbS56b29tLmVuZDsKQEAgLTE2OTIsMjEgKzE2OTIsMjEgQEAgRWlu
YV9Cb29sIGV3a192aWV3X3pvb21fYW5pbWF0ZWRfc2V0KEV2YXNfT2JqZWN0KiBvLCBmbG9hdCB6
b29tLCBmbG9hdCBkdXJhdGlvbiwKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi1FaW5hX0Jv
b2wgZXdrX3ZpZXdfem9vbV90ZXh0X29ubHlfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQorRWlu
YV9Cb29sIGV3a192aWV3X3pvb21fdGV4dF9vbmx5X2dldChjb25zdCBFdmFzX09iamVjdCogZXdr
VmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNF
KTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNF
KTsKICAgICByZXR1cm4gZXdrX2ZyYW1lX3pvb21fdGV4dF9vbmx5X2dldChzZC0+bWFpbl9mcmFt
ZSk7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld196b29tX3RleHRfb25seV9zZXQoRXZhc19PYmpl
Y3QqIG8sIEVpbmFfQm9vbCBzZXR0aW5nKQorRWluYV9Cb29sIGV3a192aWV3X3pvb21fdGV4dF9v
bmx5X3NldChFdmFzX09iamVjdCogZXdrVmlldywgRWluYV9Cb29sIHNldHRpbmcpCiB7Ci0gICAg
RVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJ
RVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgcmV0dXJu
IGV3a19mcmFtZV96b29tX3RleHRfb25seV9zZXQoc2QtPm1haW5fZnJhbWUsIHNldHRpbmcpOwog
fQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfcHJlX3JlbmRlcl9yZWdpb24oRXZhc19PYmplY3QqIG8s
IEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5LCBFdmFzX0Nvb3JkIHcsIEV2YXNfQ29vcmQgaCwg
ZmxvYXQgem9vbSkKK0VpbmFfQm9vbCBld2tfdmlld19wcmVfcmVuZGVyX3JlZ2lvbihFdmFzX09i
amVjdCogZXdrVmlldywgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHksIEV2YXNfQ29vcmQgd2lk
dGgsIEV2YXNfQ29vcmQgaGVpZ2h0LCBmbG9hdCB6b29tKQogewotICAgIEVXS19WSUVXX1NEX0dF
VF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9S
RVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09S
X1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk5fVkFMKHNkLT5hcGktPnByZV9yZW5kZXJfcmVnaW9uLCBFSU5BX0ZBTFNFKTsKICAgICBm
bG9hdCBjdXJfem9vbTsKQEAgLTE3MjcsMjkgKzE3MjcsMjkgQEAgRWluYV9Cb29sIGV3a192aWV3
X3ByZV9yZW5kZXJfcmVnaW9uKEV2YXNfT2JqZWN0KiBvLCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29v
cmQgeSwKIAogICAgIGN3ICo9IHpvb20gLyBjdXJfem9vbTsKICAgICBjaCAqPSB6b29tIC8gY3Vy
X3pvb207Ci0gICAgREJHKCJyZWdpb24gJWQsJWQrJWR4JWQgQCAlZiBjb250ZW50cz0lZHglZCIs
IHgsIHksIHcsIGgsIHpvb20sIGN3LCBjaCk7CisgICAgREJHKCJyZWdpb24gJWQsJWQrJWR4JWQg
QCAlZiBjb250ZW50cz0lZHglZCIsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHpvb20sIGN3LCBjaCk7
CiAKLSAgICBpZiAoeCArIHcgPiBjdykKLSAgICAgICAgdyA9IGN3IC0geDsKKyAgICBpZiAoeCAr
IHdpZHRoID4gY3cpCisgICAgICAgIHdpZHRoID0gY3cgLSB4OwogCi0gICAgaWYgKHkgKyBoID4g
Y2gpCi0gICAgICAgIGggPSBjaCAtIHk7CisgICAgaWYgKHkgKyBoZWlnaHQgPiBjaCkKKyAgICAg
ICAgaGVpZ2h0ID0gY2ggLSB5OwogCiAgICAgaWYgKHggPCAwKSB7Ci0gICAgICAgIHcgKz0geDsK
KyAgICAgICAgd2lkdGggKz0geDsKICAgICAgICAgeCA9IDA7CiAgICAgfQogICAgIGlmICh5IDwg
MCkgewotICAgICAgICBoICs9IHk7CisgICAgICAgIGhlaWdodCArPSB5OwogICAgICAgICB5ID0g
MDsKICAgICB9CiAKLSAgICByZXR1cm4gc2QtPmFwaS0+cHJlX3JlbmRlcl9yZWdpb24oc2QsIHgs
IHksIHcsIGgsIHpvb20pOworICAgIHJldHVybiBzZC0+YXBpLT5wcmVfcmVuZGVyX3JlZ2lvbihz
ZCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgem9vbSk7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld19w
cmVfcmVuZGVyX3JlbGF0aXZlX3JhZGl1cyhFdmFzX09iamVjdCogbywgdW5zaWduZWQgaW50IG4p
CitFaW5hX0Jvb2wgZXdrX3ZpZXdfcHJlX3JlbmRlcl9yZWxhdGl2ZV9yYWRpdXMoRXZhc19PYmpl
Y3QqIGV3a1ZpZXcsIHVuc2lnbmVkIGludCBudW1iZXIpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JF
VFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1Jf
UkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTl9WQUwoc2QtPmFwaS0+cHJlX3JlbmRlcl9yZWxhdGl2ZV9yYWRpdXMsIEVJTkFfRkFMU0Up
OwogICAgIGZsb2F0IGN1cl96b29tOwpAQCAtMTc1OCw0NyArMTc1OCw0NyBAQCBFaW5hX0Jvb2wg
ZXdrX3ZpZXdfcHJlX3JlbmRlcl9yZWxhdGl2ZV9yYWRpdXMoRXZhc19PYmplY3QqIG8sIHVuc2ln
bmVkIGludCBuKQogICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKIAogICAgIGN1cl96b29tID0g
ZXdrX2ZyYW1lX3pvb21fZ2V0KHNkLT5tYWluX2ZyYW1lKTsKLSAgICByZXR1cm4gc2QtPmFwaS0+
cHJlX3JlbmRlcl9yZWxhdGl2ZV9yYWRpdXMoc2QsIG4sIGN1cl96b29tKTsKKyAgICByZXR1cm4g
c2QtPmFwaS0+cHJlX3JlbmRlcl9yZWxhdGl2ZV9yYWRpdXMoc2QsIG51bWJlciwgY3VyX3pvb20p
OwogfQogCi11bnNpZ25lZCBpbnQgZXdrX3ZpZXdfaW1oX2dldChjb25zdCBFdmFzX09iamVjdCog
bykKK3Vuc2lnbmVkIGludCBld2tfdmlld19pbWhfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tW
aWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIDApOworICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIDApOwogICAgIEVXS19WSUVXX1BS
SVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgMCk7CiAgICAgcmV0dXJuIHByaXYtPmltaDsKIH0K
IAotdm9pZCBld2tfdmlld19wcmVfcmVuZGVyX2NhbmNlbChFdmFzX09iamVjdCogbykKK3ZvaWQg
ZXdrX3ZpZXdfcHJlX3JlbmRlcl9jYW5jZWwoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAg
RVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihld2tWaWV3LCBzZCk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2Qt
PmFwaS0+cHJlX3JlbmRlcl9jYW5jZWwpOwogICAgIHNkLT5hcGktPnByZV9yZW5kZXJfY2FuY2Vs
KHNkKTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X2VuYWJsZV9yZW5kZXIoY29uc3QgRXZhc19P
YmplY3QqIG8pCitFaW5hX0Jvb2wgZXdrX3ZpZXdfZW5hYmxlX3JlbmRlcihjb25zdCBFdmFzX09i
amVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBF
SU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBF
SU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmFwaS0+
ZW5hYmxlX3JlbmRlciwgRUlOQV9GQUxTRSk7CiAgICAgcmV0dXJuIHNkLT5hcGktPmVuYWJsZV9y
ZW5kZXIoc2QpOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfZGlzYWJsZV9yZW5kZXIoY29uc3Qg
RXZhc19PYmplY3QqIG8pCitFaW5hX0Jvb2wgZXdrX3ZpZXdfZGlzYWJsZV9yZW5kZXIoY29uc3Qg
RXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihv
LCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3
LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNk
LT5hcGktPmRpc2FibGVfcmVuZGVyLCBFSU5BX0ZBTFNFKTsKICAgICByZXR1cm4gc2QtPmFwaS0+
ZGlzYWJsZV9yZW5kZXIoc2QpOwogfQogCi1jb25zdCBjaGFyKiBld2tfdmlld19zZXR0aW5nX3Vz
ZXJfYWdlbnRfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQorY29uc3QgY2hhciogZXdrX3ZpZXdf
c2V0dGluZ191c2VyX2FnZW50X2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAwKTsKKyAgICBFV0tfVklFV19TRF9H
RVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAwKTsKICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9S
RVRVUk4oc2QsIHByaXYsIDApOwogICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy51c2VyX2FnZW50
OwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ191c2VyX2FnZW50X3NldChFdmFzX09i
amVjdCogbywgY29uc3QgY2hhciogdXNlcl9hZ2VudCkKK0VpbmFfQm9vbCBld2tfdmlld19zZXR0
aW5nX3VzZXJfYWdlbnRfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBjaGFyKiB1c2Vy
X2FnZW50KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFM
U0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFM
U0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxT
RSk7CiAgICAgaWYgKGVpbmFfc3RyaW5nc2hhcmVfcmVwbGFjZSgmcHJpdi0+c2V0dGluZ3MudXNl
cl9hZ2VudCwgdXNlcl9hZ2VudCkpIHsKICAgICAgICAgV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGll
bnRFZmwqIGNsaWVudCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50RWZs
Kj4ocHJpdi0+bWFpbl9mcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpKTsKQEAgLTE4MDcsMTYgKzE4
MDcsMTYgQEAgRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfdXNlcl9hZ2VudF9zZXQoRXZhc19P
YmplY3QqIG8sIGNvbnN0IGNoYXIqIHVzZXJfYWdlbnQKICAgICByZXR1cm4gRUlOQV9UUlVFOwog
fQogCi1jb25zdCBjaGFyKiBld2tfdmlld19zZXR0aW5nX3VzZXJfc3R5bGVzaGVldF9nZXQoY29u
c3QgRXZhc19PYmplY3QqIG8pCitjb25zdCBjaGFyKiBld2tfdmlld19zZXR0aW5nX3VzZXJfc3R5
bGVzaGVldF9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihvLCBzZCwgMCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
Tihld2tWaWV3LCBzZCwgMCk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBw
cml2LCAwKTsKICAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MudXNlcl9zdHlsZXNoZWV0OwogfQog
Ci1FaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ191c2VyX3N0eWxlc2hlZXRfc2V0KEV2YXNfT2Jq
ZWN0KiBvLCBjb25zdCBjaGFyKiB1cmkpCitFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ191c2Vy
X3N0eWxlc2hlZXRfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBjaGFyKiB1cmkpCiB7
Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAg
RVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAg
RVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBp
ZiAoZWluYV9zdHJpbmdzaGFyZV9yZXBsYWNlKCZwcml2LT5zZXR0aW5ncy51c2VyX3N0eWxlc2hl
ZXQsIHVyaSkpIHsKICAgICAgICAgV2ViQ29yZTo6S1VSTCBrdXJsKFdlYkNvcmU6OktVUkwoKSwg
U3RyaW5nOjpmcm9tVVRGOCh1cmkpKTsKQEAgLTE4MjUsMTYgKzE4MjUsMTYgQEAgRWluYV9Cb29s
IGV3a192aWV3X3NldHRpbmdfdXNlcl9zdHlsZXNoZWV0X3NldChFdmFzX09iamVjdCogbywgY29u
c3QgY2hhciogdXJpKQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLUVpbmFfQm9vbCBld2tf
dmlld19zZXR0aW5nX2F1dG9fbG9hZF9pbWFnZXNfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQor
RWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfYXV0b19sb2FkX2ltYWdlc19nZXQoY29uc3QgRXZh
c19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBz
ZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBz
ZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2
LCBFSU5BX0ZBTFNFKTsKICAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuYXV0b19sb2FkX2ltYWdl
czsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfYXV0b19sb2FkX2ltYWdlc19zZXQo
RXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCBhdXRvbWF0aWMpCitFaW5hX0Jvb2wgZXdrX3ZpZXdf
c2V0dGluZ19hdXRvX2xvYWRfaW1hZ2VzX3NldChFdmFzX09iamVjdCogZXdrVmlldywgRWluYV9C
b29sIGF1dG9tYXRpYykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBF
SU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBF
SU5BX0ZBTFNFKTsKICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJ
TkFfRkFMU0UpOwogICAgIGF1dG9tYXRpYyA9ICEhYXV0b21hdGljOwogICAgIGlmIChwcml2LT5z
ZXR0aW5ncy5hdXRvX2xvYWRfaW1hZ2VzICE9IGF1dG9tYXRpYykgewpAQCAtMTg0NCwxNiArMTg0
NCwxNiBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19hdXRvX2xvYWRfaW1hZ2VzX3NldChF
dmFzX09iamVjdCogbywgRWluYV9Cb29sIGF1dG9tYQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9
CiAKLUVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2F1dG9fc2hyaW5rX2ltYWdlc19nZXQoY29u
c3QgRXZhc19PYmplY3QqIG8pCitFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19hdXRvX3Nocmlu
a19pbWFnZXNfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVX
X1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dF
VF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVXS19WSUVXX1BSSVZf
R0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgcmV0dXJuIHByaXYtPnNl
dHRpbmdzLmF1dG9fc2hyaW5rX2ltYWdlczsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3NldHRp
bmdfYXV0b19zaHJpbmtfaW1hZ2VzX3NldChFdmFzX09iamVjdCogbywgRWluYV9Cb29sIGF1dG9t
YXRpYykKK0VpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2F1dG9fc2hyaW5rX2ltYWdlc19zZXQo
RXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCBhdXRvbWF0aWMpCiB7Ci0gICAgRVdLX1ZJ
RVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJRVdfUFJJ
Vl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBhdXRvbWF0aWMgPSAh
IWF1dG9tYXRpYzsKICAgICBpZiAocHJpdi0+c2V0dGluZ3MuYXV0b19zaHJpbmtfaW1hZ2VzICE9
IGF1dG9tYXRpYykgewpAQCAtMTg2MywzMSArMTg2MywzMSBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdf
c2V0dGluZ19hdXRvX3Nocmlua19pbWFnZXNfc2V0KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wg
YXV0bwogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld19zZXR0
aW5nX2VuYWJsZV9hdXRvX3Jlc2l6ZV93aW5kb3dfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQor
RWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfZW5hYmxlX2F1dG9fcmVzaXplX3dpbmRvd19nZXQo
Y29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JF
VFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihl
d2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJO
KHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZW5hYmxl
X2F1dG9fcmVzaXplX3dpbmRvdzsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfZW5h
YmxlX2F1dG9fcmVzaXplX3dpbmRvd19zZXQoRXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCByZXNp
emFibGUpCitFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19lbmFibGVfYXV0b19yZXNpemVfd2lu
ZG93X3NldChFdmFzX09iamVjdCogZXdrVmlldywgRWluYV9Cb29sIHJlc2l6YWJsZSkKIHsKLSAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tf
VklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFV0tf
VklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIHByaXYt
PnNldHRpbmdzLmVuYWJsZV9hdXRvX3Jlc2l6ZV93aW5kb3cgPSByZXNpemFibGU7CiAgICAgcmV0
dXJuIEVJTkFfVFJVRTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfZW5hYmxlX3Nj
cmlwdHNfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQorRWluYV9Cb29sIGV3a192aWV3X3NldHRp
bmdfZW5hYmxlX3NjcmlwdHNfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAg
IEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19W
SUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVXS19W
SUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgcmV0dXJu
IHByaXYtPnNldHRpbmdzLmVuYWJsZV9zY3JpcHRzOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdf
c2V0dGluZ19lbmFibGVfc2NyaXB0c19zZXQoRXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCBlbmFi
bGUpCitFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19lbmFibGVfc2NyaXB0c19zZXQoRXZhc19P
YmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCBlbmFibGUpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JF
VFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1Jf
UkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBlbmFibGUgPSAhIWVuYWJsZTsKICAg
ICBpZiAocHJpdi0+c2V0dGluZ3MuZW5hYmxlX3NjcmlwdHMgIT0gZW5hYmxlKSB7CkBAIC0xODk3
LDE2ICsxODk3LDE2IEBAIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2VuYWJsZV9zY3JpcHRz
X3NldChFdmFzX09iamVjdCogbywgRWluYV9Cb29sIGVuYWJsZSkKICAgICByZXR1cm4gRUlOQV9U
UlVFOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19lbmFibGVfcGx1Z2luc19nZXQo
Y29uc3QgRXZhc19PYmplY3QqIG8pCitFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19lbmFibGVf
cGx1Z2luc19nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9H
RVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICByZXR1cm4gcHJpdi0+c2V0
dGluZ3MuZW5hYmxlX3BsdWdpbnM7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2Vu
YWJsZV9wbHVnaW5zX3NldChFdmFzX09iamVjdCogbywgRWluYV9Cb29sIGVuYWJsZSkKK0VpbmFf
Qm9vbCBld2tfdmlld19zZXR0aW5nX2VuYWJsZV9wbHVnaW5zX3NldChFdmFzX09iamVjdCogZXdr
VmlldywgRWluYV9Cb29sIGVuYWJsZSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJO
KG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1Zp
ZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2Qs
IHByaXYsIEVJTkFfRkFMU0UpOwogICAgIGVuYWJsZSA9ICEhZW5hYmxlOwogICAgIGlmIChwcml2
LT5zZXR0aW5ncy5lbmFibGVfcGx1Z2lucyAhPSBlbmFibGUpIHsKQEAgLTE5MTYsMTYgKzE5MTYs
MTYgQEAgRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfZW5hYmxlX3BsdWdpbnNfc2V0KEV2YXNf
T2JqZWN0KiBvLCBFaW5hX0Jvb2wgZW5hYmxlKQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAK
LUVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2VuYWJsZV9mcmFtZV9mbGF0dGVuaW5nX2dldChj
b25zdCBFdmFzX09iamVjdCogbykKK0VpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2VuYWJsZV9m
cmFtZV9mbGF0dGVuaW5nX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBF
V0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklF
V19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFV0tfVklF
V19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIHJldHVybiBw
cml2LT5zZXR0aW5ncy5lbmFibGVfZnJhbWVfZmxhdHRlbmluZzsKIH0KIAotRWluYV9Cb29sIGV3
a192aWV3X3NldHRpbmdfZW5hYmxlX2ZyYW1lX2ZsYXR0ZW5pbmdfc2V0KEV2YXNfT2JqZWN0KiBv
LCBFaW5hX0Jvb2wgZW5hYmxlKQorRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfZW5hYmxlX2Zy
YW1lX2ZsYXR0ZW5pbmdfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wgZW5hYmxl
KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOwor
ICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwog
ICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CiAg
ICAgZW5hYmxlID0gISFlbmFibGU7CiAgICAgaWYgKHByaXYtPnNldHRpbmdzLmVuYWJsZV9mcmFt
ZV9mbGF0dGVuaW5nICE9IGVuYWJsZSkgewpAQCAtMTkzNSwxNiArMTkzNSwxNiBAQCBFaW5hX0Jv
b2wgZXdrX3ZpZXdfc2V0dGluZ19lbmFibGVfZnJhbWVfZmxhdHRlbmluZ19zZXQoRXZhc19PYmpl
Y3QqIG8sIEVpbmFfQm9vbAogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLUVpbmFfQm9vbCBl
d2tfdmlld19zZXR0aW5nX3NjcmlwdHNfd2luZG93X29wZW5fZ2V0KGNvbnN0IEV2YXNfT2JqZWN0
KiBvKQorRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfc2NyaXB0c193aW5kb3dfb3Blbl9nZXQo
Y29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JF
VFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihl
d2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJO
KHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3Muc2NyaXB0
c193aW5kb3dfb3BlbjsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfc2NyaXB0c193
aW5kb3dfb3Blbl9zZXQoRXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCBhbGxvdykKK0VpbmFfQm9v
bCBld2tfdmlld19zZXR0aW5nX3NjcmlwdHNfd2luZG93X29wZW5fc2V0KEV2YXNfT2JqZWN0KiBl
d2tWaWV3LCBFaW5hX0Jvb2wgYWxsb3cpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
TihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tW
aWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNk
LCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBhbGxvdyA9ICEhYWxsb3c7CiAgICAgaWYgKHByaXYt
PnNldHRpbmdzLnNjcmlwdHNfd2luZG93X29wZW4gIT0gYWxsb3cpIHsKQEAgLTE5NTQsMTYgKzE5
NTQsMTYgQEAgRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfc2NyaXB0c193aW5kb3dfb3Blbl9z
ZXQoRXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCBhbGwKICAgICByZXR1cm4gRUlOQV9UUlVFOwog
fQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19zY3JpcHRzX2Nhbl9jbG9zZV93aW5kb3dz
X2dldChjb25zdCBFdmFzX09iamVjdCogbykKK0VpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX3Nj
cmlwdHNfY2FuX2Nsb3NlX3dpbmRvd3NfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQog
ewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAg
IEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAg
IEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAg
cmV0dXJuIHByaXYtPnNldHRpbmdzLnNjcmlwdHNfY2FuX2Nsb3NlX3dpbmRvd3M7CiB9CiAKLUVp
bmFfQm9vbCBld2tfdmlld19zZXR0aW5nX3NjcmlwdHNfY2FuX2Nsb3NlX3dpbmRvd3Nfc2V0KEV2
YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wgYWxsb3cpCitFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGlu
Z19zY3JpcHRzX2Nhbl9jbG9zZV93aW5kb3dzX3NldChFdmFzX09iamVjdCogZXdrVmlldywgRWlu
YV9Cb29sIGFsbG93KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJ
TkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJ
TkFfRkFMU0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlO
QV9GQUxTRSk7CiAgICAgYWxsb3cgPSAhIWFsbG93OwogICAgIGlmIChwcml2LT5zZXR0aW5ncy5z
Y3JpcHRzX2Nhbl9jbG9zZV93aW5kb3dzICE9IGFsbG93KSB7CkBAIC0xOTczLDE2ICsxOTczLDE2
IEBAIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX3NjcmlwdHNfY2FuX2Nsb3NlX3dpbmRvd3Nf
c2V0KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0JvCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAot
RWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfcmVzaXphYmxlX3RleHRhcmVhc19nZXQoY29uc3Qg
RXZhc19PYmplY3QqIG8pCitFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19yZXNpemFibGVfdGV4
dGFyZWFzX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19T
RF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRf
T1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFV0tfVklFV19QUklWX0dF
VF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIHJldHVybiBwcml2LT5zZXR0
aW5ncy5yZXNpemFibGVfdGV4dGFyZWFzOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGlu
Z19yZXNpemFibGVfdGV4dGFyZWFzX3NldChFdmFzX09iamVjdCogbywgRWluYV9Cb29sIGVuYWJs
ZSkKK0VpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX3Jlc2l6YWJsZV90ZXh0YXJlYXNfc2V0KEV2
YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wgZW5hYmxlKQogewotICAgIEVXS19WSUVXX1NE
X0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9P
Ul9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VU
X09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgZW5hYmxlID0gISFlbmFibGU7
CiAgICAgaWYgKHByaXYtPnNldHRpbmdzLnJlc2l6YWJsZV90ZXh0YXJlYXMgIT0gZW5hYmxlKSB7
CkBAIC0xOTkyLDE2ICsxOTkyLDE2IEBAIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX3Jlc2l6
YWJsZV90ZXh0YXJlYXNfc2V0KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wgZW5hCiAgICAgcmV0
dXJuIEVJTkFfVFJVRTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfcHJpdmF0ZV9i
cm93c2luZ19nZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCitFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0
dGluZ19wcml2YXRlX2Jyb3dzaW5nX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsK
LSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBF
V0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBF
V0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIHJl
dHVybiBwcml2LT5zZXR0aW5ncy5wcml2YXRlX2Jyb3dzaW5nOwogfQogCi1FaW5hX0Jvb2wgZXdr
X3ZpZXdfc2V0dGluZ19wcml2YXRlX2Jyb3dzaW5nX3NldChFdmFzX09iamVjdCogbywgRWluYV9C
b29sIGVuYWJsZSkKK0VpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX3ByaXZhdGVfYnJvd3Npbmdf
c2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wgZW5hYmxlKQogewotICAgIEVXS19W
SUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NE
X0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVXS19WSUVXX1BS
SVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgZW5hYmxlID0gISFl
bmFibGU7CiAgICAgaWYgKHByaXYtPnNldHRpbmdzLnByaXZhdGVfYnJvd3NpbmcgIT0gZW5hYmxl
KSB7CkBAIC0yMDExLDE2ICsyMDExLDE2IEBAIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX3By
aXZhdGVfYnJvd3Npbmdfc2V0KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wgZW5hYmxlCiAgICAg
cmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfb2ZmbGlu
ZV9hcHBfY2FjaGVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQorRWluYV9Cb29sIGV3a192aWV3
X3NldHRpbmdfb2ZmbGluZV9hcHBfY2FjaGVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3
KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOwor
ICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwog
ICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CiAg
ICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLm9mZmxpbmVfYXBwX2NhY2hlOwogfQogCi1FaW5hX0Jv
b2wgZXdrX3ZpZXdfc2V0dGluZ19vZmZsaW5lX2FwcF9jYWNoZV9zZXQoRXZhc19PYmplY3QqIG8s
IEVpbmFfQm9vbCBlbmFibGUpCitFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19vZmZsaW5lX2Fw
cF9jYWNoZV9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCBlbmFibGUpCiB7Ci0g
ICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdL
X1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdL
X1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBlbmFi
bGUgPSAhIWVuYWJsZTsKICAgICBpZiAocHJpdi0+c2V0dGluZ3Mub2ZmbGluZV9hcHBfY2FjaGUg
IT0gZW5hYmxlKSB7CkBAIC0yMDMxLDE2ICsyMDMxLDE2IEBAIEVpbmFfQm9vbCBld2tfdmlld19z
ZXR0aW5nX29mZmxpbmVfYXBwX2NhY2hlX3NldChFdmFzX09iamVjdCogbywgRWluYV9Cb29sIGVu
YWJsCiB9CiAKIAotRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfY2FyZXRfYnJvd3NpbmdfZ2V0
KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQorRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfY2FyZXRf
YnJvd3NpbmdfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVX
X1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dF
VF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVXS19WSUVXX1BSSVZf
R0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgcmV0dXJuIHByaXYtPnNl
dHRpbmdzLmNhcmV0X2Jyb3dzaW5nOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19j
YXJldF9icm93c2luZ19zZXQoRXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCBlbmFibGUpCitFaW5h
X0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19jYXJldF9icm93c2luZ19zZXQoRXZhc19PYmplY3QqIGV3
a1ZpZXcsIEVpbmFfQm9vbCBlbmFibGUpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
TihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tW
aWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNk
LCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBlbmFibGUgPSAhIWVuYWJsZTsKICAgICBpZiAocHJp
di0+c2V0dGluZ3MuY2FyZXRfYnJvd3NpbmcgIT0gZW5hYmxlKSB7CkBAIC0yMDUwLDExICsyMDUw
LDExIEBAIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2NhcmV0X2Jyb3dzaW5nX3NldChFdmFz
X09iamVjdCogbywgRWluYV9Cb29sIGVuYWJsZSkKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQog
Ci1jb25zdCBjaGFyKiBld2tfdmlld19zZXR0aW5nX2VuY29kaW5nX2N1c3RvbV9nZXQoY29uc3Qg
RXZhc19PYmplY3QqIG8pCitjb25zdCBjaGFyKiBld2tfdmlld19zZXR0aW5nX2VuY29kaW5nX2N1
c3RvbV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihvLCBzZCwgMCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihl
d2tWaWV3LCBzZCwgMCk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2
LCAwKTsKLSAgICBFdmFzX09iamVjdCogbWFpbl9mcmFtZSA9IGV3a192aWV3X2ZyYW1lX21haW5f
Z2V0KG8pOworICAgIEV2YXNfT2JqZWN0KiBtYWluX2ZyYW1lID0gZXdrX3ZpZXdfZnJhbWVfbWFp
bl9nZXQoZXdrVmlldyk7CiAgICAgV2ViQ29yZTo6RnJhbWUqIGNvcmVfZnJhbWUgPSBld2tfZnJh
bWVfY29yZV9nZXQobWFpbl9mcmFtZSk7CiAKICAgICBTdHJpbmcgb3ZlcnJpZGVFbmNvZGluZyA9
IGNvcmVfZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT5vdmVycmlkZUVuY29kaW5n
KCk7CkBAIC0yMDY2LDExICsyMDY2LDExIEBAIGNvbnN0IGNoYXIqIGV3a192aWV3X3NldHRpbmdf
ZW5jb2RpbmdfY3VzdG9tX2dldChjb25zdCBFdmFzX09iamVjdCogbykKICAgICByZXR1cm4gcHJp
di0+c2V0dGluZ3MuZW5jb2RpbmdfY3VzdG9tOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0
dGluZ19lbmNvZGluZ19jdXN0b21fc2V0KEV2YXNfT2JqZWN0KiBvLCBjb25zdCBjaGFyKiBlbmNv
ZGluZykKK0VpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2VuY29kaW5nX2N1c3RvbV9zZXQoRXZh
c19PYmplY3QqIGV3a1ZpZXcsIGNvbnN0IGNoYXIqIGVuY29kaW5nKQogewotICAgIEVXS19WSUVX
X1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dF
VF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVXS19WSUVXX1BSSVZf
R0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7Ci0gICAgRXZhc19PYmplY3QqIG1h
aW5fZnJhbWUgPSBld2tfdmlld19mcmFtZV9tYWluX2dldChvKTsKKyAgICBFdmFzX09iamVjdCog
bWFpbl9mcmFtZSA9IGV3a192aWV3X2ZyYW1lX21haW5fZ2V0KGV3a1ZpZXcpOwogICAgIFdlYkNv
cmU6OkZyYW1lKiBjb3JlX2ZyYW1lID0gZXdrX2ZyYW1lX2NvcmVfZ2V0KG1haW5fZnJhbWUpOwog
ICAgIERCRygiJXMiLCBlbmNvZGluZyk7CiAgICAgZWluYV9zdHJpbmdzaGFyZV9yZXBsYWNlKCZw
cml2LT5zZXR0aW5ncy5lbmNvZGluZ19jdXN0b20sIGVuY29kaW5nKTsKQEAgLTIwNzksMjUgKzIw
NzksMjUgQEAgRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfZW5jb2RpbmdfY3VzdG9tX3NldChF
dmFzX09iamVjdCogbywgY29uc3QgY2hhciogZW5jb2QKICAgICByZXR1cm4gRUlOQV9UUlVFOwog
fQogCi1jb25zdCBjaGFyKiBld2tfdmlld19zZXR0aW5nX2VuY29kaW5nX2RlZmF1bHRfZ2V0KGNv
bnN0IEV2YXNfT2JqZWN0KiBvKQorY29uc3QgY2hhciogZXdrX3ZpZXdfc2V0dGluZ19lbmNvZGlu
Z19kZWZhdWx0X2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklF
V19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAwKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVU
VVJOKGV3a1ZpZXcsIHNkLCAwKTsKICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2Qs
IHByaXYsIDApOwogICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5lbmNvZGluZ19kZWZhdWx0Owog
fQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19lbmNvZGluZ19kZWZhdWx0X3NldChFdmFz
X09iamVjdCogbywgY29uc3QgY2hhciogZW5jb2RpbmcpCitFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0
dGluZ19lbmNvZGluZ19kZWZhdWx0X3NldChFdmFzX09iamVjdCogZXdrVmlldywgY29uc3QgY2hh
ciogZW5jb2RpbmcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlO
QV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlO
QV9GQUxTRSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5B
X0ZBTFNFKTsKICAgICBpZiAoZWluYV9zdHJpbmdzaGFyZV9yZXBsYWNlKCZwcml2LT5zZXR0aW5n
cy5lbmNvZGluZ19kZWZhdWx0LCBlbmNvZGluZykpCiAgICAgICAgIHByaXYtPnBhZ2Vfc2V0dGlu
Z3MtPnNldERlZmF1bHRUZXh0RW5jb2RpbmdOYW1lKFN0cmluZzo6ZnJvbVVURjgoZW5jb2Rpbmcp
KTsKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGlu
Z19lbmNvZGluZ19kZXRlY3Rvcl9zZXQoRXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCBlbmFibGUp
CitFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19lbmNvZGluZ19kZXRlY3Rvcl9zZXQoRXZhc19P
YmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCBlbmFibGUpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JF
VFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1Jf
UkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBlbmFibGUgPSAhIWVuYWJsZTsKICAg
ICBpZiAocHJpdi0+c2V0dGluZ3MuZW5jb2RpbmdfZGV0ZWN0b3IgIT0gZW5hYmxlKSB7CkBAIC0y
MTA3LDIzICsyMTA3LDIzIEBAIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2VuY29kaW5nX2Rl
dGVjdG9yX3NldChFdmFzX09iamVjdCogbywgRWluYV9Cb29sIGVuYWJsCiAgICAgcmV0dXJuIEVJ
TkFfVFJVRTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfZW5jb2RpbmdfZGV0ZWN0
b3JfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQorRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdf
ZW5jb2RpbmdfZGV0ZWN0b3JfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAg
IEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19W
SUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVXS19W
SUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgcmV0dXJu
IHByaXYtPnNldHRpbmdzLmVuY29kaW5nX2RldGVjdG9yOwogfQogCi1FaW5hX0Jvb2wgZXdrX3Zp
ZXdfc2V0dGluZ19lbmFibGVfZGV2ZWxvcGVyX2V4dHJhc19nZXQoY29uc3QgRXZhc19PYmplY3Qq
IG8pCitFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19lbmFibGVfZGV2ZWxvcGVyX2V4dHJhc19n
ZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
Tihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVU
VVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZW5h
YmxlX2RldmVsb3Blcl9leHRyYXM7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2Vu
YWJsZV9kZXZlbG9wZXJfZXh0cmFzX3NldChFdmFzX09iamVjdCogbywgRWluYV9Cb29sIGVuYWJs
ZSkKK0VpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2VuYWJsZV9kZXZlbG9wZXJfZXh0cmFzX3Nl
dChFdmFzX09iamVjdCogZXdrVmlldywgRWluYV9Cb29sIGVuYWJsZSkKIHsKLSAgICBFV0tfVklF
V19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9H
RVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFV0tfVklFV19QUklW
X0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIGVuYWJsZSA9ICEhZW5h
YmxlOwogICAgIGlmIChwcml2LT5zZXR0aW5ncy5lbmFibGVfZGV2ZWxvcGVyX2V4dHJhcyAhPSBl
bmFibGUpIHsKQEAgLTIxMzMsMTYgKzIxMzMsMTYgQEAgRWluYV9Cb29sIGV3a192aWV3X3NldHRp
bmdfZW5hYmxlX2RldmVsb3Blcl9leHRyYXNfc2V0KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wK
ICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi1pbnQgZXdrX3ZpZXdfc2V0dGluZ19mb250X21p
bmltdW1fc2l6ZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCitpbnQgZXdrX3ZpZXdfc2V0dGlu
Z19mb250X21pbmltdW1fc2l6ZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0g
ICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgMCk7CisgICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgMCk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1Jf
UkVUVVJOKHNkLCBwcml2LCAwKTsKICAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZm9udF9taW5p
bXVtX3NpemU7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2ZvbnRfbWluaW11bV9z
aXplX3NldChFdmFzX09iamVjdCogbywgaW50IHNpemUpCitFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0
dGluZ19mb250X21pbmltdW1fc2l6ZV9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGludCBzaXpl
KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOwor
ICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwog
ICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CiAg
ICAgaWYgKHByaXYtPnNldHRpbmdzLmZvbnRfbWluaW11bV9zaXplICE9IHNpemUpIHsKICAgICAg
ICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0TWluaW11bUZvbnRTaXplKHNpemUpOwpAQCAtMjE1
MSwxNiArMjE1MSwxNiBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19mb250X21pbmltdW1f
c2l6ZV9zZXQoRXZhc19PYmplY3QqIG8sIGludCBzaXplKQogICAgIHJldHVybiBFSU5BX1RSVUU7
CiB9CiAKLWludCBld2tfdmlld19zZXR0aW5nX2ZvbnRfbWluaW11bV9sb2dpY2FsX3NpemVfZ2V0
KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQoraW50IGV3a192aWV3X3NldHRpbmdfZm9udF9taW5pbXVt
X2xvZ2ljYWxfc2l6ZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdL
X1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgMCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihld2tWaWV3LCBzZCwgMCk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJO
KHNkLCBwcml2LCAwKTsKICAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZm9udF9taW5pbXVtX2xv
Z2ljYWxfc2l6ZTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfZm9udF9taW5pbXVt
X2xvZ2ljYWxfc2l6ZV9zZXQoRXZhc19PYmplY3QqIG8sIGludCBzaXplKQorRWluYV9Cb29sIGV3
a192aWV3X3NldHRpbmdfZm9udF9taW5pbXVtX2xvZ2ljYWxfc2l6ZV9zZXQoRXZhc19PYmplY3Qq
IGV3a1ZpZXcsIGludCBzaXplKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywg
c2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywg
c2QsIEVJTkFfRkFMU0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJp
diwgRUlOQV9GQUxTRSk7CiAgICAgaWYgKHByaXYtPnNldHRpbmdzLmZvbnRfbWluaW11bV9sb2dp
Y2FsX3NpemUgIT0gc2l6ZSkgewogICAgICAgICBwcml2LT5wYWdlX3NldHRpbmdzLT5zZXRNaW5p
bXVtTG9naWNhbEZvbnRTaXplKHNpemUpOwpAQCAtMjE2OSwxNiArMjE2OSwxNiBAQCBFaW5hX0Jv
b2wgZXdrX3ZpZXdfc2V0dGluZ19mb250X21pbmltdW1fbG9naWNhbF9zaXplX3NldChFdmFzX09i
amVjdCogbywgaW50IHNpegogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLWludCBld2tfdmll
d19zZXR0aW5nX2ZvbnRfZGVmYXVsdF9zaXplX2dldChjb25zdCBFdmFzX09iamVjdCogbykKK2lu
dCBld2tfdmlld19zZXR0aW5nX2ZvbnRfZGVmYXVsdF9zaXplX2dldChjb25zdCBFdmFzX09iamVj
dCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAwKTsK
KyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAwKTsKICAgICBFV0tf
VklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIDApOwogICAgIHJldHVybiBwcml2LT5z
ZXR0aW5ncy5mb250X2RlZmF1bHRfc2l6ZTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3NldHRp
bmdfZm9udF9kZWZhdWx0X3NpemVfc2V0KEV2YXNfT2JqZWN0KiBvLCBpbnQgc2l6ZSkKK0VpbmFf
Qm9vbCBld2tfdmlld19zZXR0aW5nX2ZvbnRfZGVmYXVsdF9zaXplX3NldChFdmFzX09iamVjdCog
ZXdrVmlldywgaW50IHNpemUpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBz
ZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBz
ZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2
LCBFSU5BX0ZBTFNFKTsKICAgICBpZiAocHJpdi0+c2V0dGluZ3MuZm9udF9kZWZhdWx0X3NpemUg
IT0gc2l6ZSkgewogICAgICAgICBwcml2LT5wYWdlX3NldHRpbmdzLT5zZXREZWZhdWx0Rm9udFNp
emUoc2l6ZSk7CkBAIC0yMTg3LDE2ICsyMTg3LDE2IEBAIEVpbmFfQm9vbCBld2tfdmlld19zZXR0
aW5nX2ZvbnRfZGVmYXVsdF9zaXplX3NldChFdmFzX09iamVjdCogbywgaW50IHNpemUpCiAgICAg
cmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotaW50IGV3a192aWV3X3NldHRpbmdfZm9udF9tb25vc3Bh
Y2Vfc2l6ZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCitpbnQgZXdrX3ZpZXdfc2V0dGluZ19m
b250X21vbm9zcGFjZV9zaXplX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAwKTsKKyAgICBFV0tfVklFV19TRF9H
RVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAwKTsKICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9S
RVRVUk4oc2QsIHByaXYsIDApOwogICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5mb250X21vbm9z
cGFjZV9zaXplOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19mb250X21vbm9zcGFj
ZV9zaXplX3NldChFdmFzX09iamVjdCogbywgaW50IHNpemUpCitFaW5hX0Jvb2wgZXdrX3ZpZXdf
c2V0dGluZ19mb250X21vbm9zcGFjZV9zaXplX3NldChFdmFzX09iamVjdCogZXdrVmlldywgaW50
IHNpemUpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxT
RSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxT
RSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNF
KTsKICAgICBpZiAocHJpdi0+c2V0dGluZ3MuZm9udF9tb25vc3BhY2Vfc2l6ZSAhPSBzaXplKSB7
CiAgICAgICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNldERlZmF1bHRGaXhlZEZvbnRTaXplKHNp
emUpOwpAQCAtMjIwNSw5ICsyMjA1LDkgQEAgRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfZm9u
dF9tb25vc3BhY2Vfc2l6ZV9zZXQoRXZhc19PYmplY3QqIG8sIGludCBzaXplKQogICAgIHJldHVy
biBFSU5BX1RSVUU7CiB9CiAKLWNvbnN0IGNoYXIqIGV3a192aWV3X2ZvbnRfZmFtaWx5X25hbWVf
Z2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvLCBFd2tfRm9udF9GYW1pbHkgZm9udF9mYW1pbHkpCitj
b25zdCBjaGFyKiBld2tfdmlld19mb250X2ZhbWlseV9uYW1lX2dldChjb25zdCBFdmFzX09iamVj
dCogZXdrVmlldywgRXdrX0ZvbnRfRmFtaWx5IGZvbnRfZmFtaWx5KQogewotICAgIEVXS19WSUVX
X1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIDApOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRV
Uk4oZXdrVmlldywgc2QsIDApOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwg
cHJpdiwgMCk7CiAKICAgICBzd2l0Y2ggKGZvbnRfZmFtaWx5KSB7CkBAIC0yMjI3LDkgKzIyMjcs
OSBAQCBjb25zdCBjaGFyKiBld2tfdmlld19mb250X2ZhbWlseV9uYW1lX2dldChjb25zdCBFdmFz
X09iamVjdCogbywgRXdrX0ZvbnRfRmFtaWx5CiAgICAgcmV0dXJuIDA7CiB9CiAKLUVpbmFfQm9v
bCBld2tfdmlld19mb250X2ZhbWlseV9uYW1lX3NldChFdmFzX09iamVjdCogbywgRXdrX0ZvbnRf
RmFtaWx5IGZvbnRfZmFtaWx5LCBjb25zdCBjaGFyKiBuYW1lKQorRWluYV9Cb29sIGV3a192aWV3
X2ZvbnRfZmFtaWx5X25hbWVfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFd2tfRm9udF9GYW1p
bHkgZm9udF9mYW1pbHksIGNvbnN0IGNoYXIqIG5hbWUpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JF
VFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1Jf
UkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKIAogICAgIHN3aXRjaCAoZm9udF9mYW1pbHkp
IHsKQEAgLTIyNjQsMTYgKzIyNjQsMTYgQEAgRWluYV9Cb29sIGV3a192aWV3X2ZvbnRfZmFtaWx5
X25hbWVfc2V0KEV2YXNfT2JqZWN0KiBvLCBFd2tfRm9udF9GYW1pbHkgZm9udF9mYW0KICAgICBy
ZXR1cm4gRUlOQV9UUlVFOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19zcGF0aWFs
X25hdmlnYXRpb25fZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQorRWluYV9Cb29sIGV3a192aWV3
X3NldHRpbmdfc3BhdGlhbF9uYXZpZ2F0aW9uX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmll
dykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsK
KyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsK
ICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwog
ICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5zcGF0aWFsX25hdmlnYXRpb247CiB9CiAKLUVpbmFf
Qm9vbCBld2tfdmlld19zZXR0aW5nX3NwYXRpYWxfbmF2aWdhdGlvbl9zZXQoRXZhc19PYmplY3Qq
IG8sIEVpbmFfQm9vbCBlbmFibGUpCitFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19zcGF0aWFs
X25hdmlnYXRpb25fc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wgZW5hYmxlKQog
ewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAg
IEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAg
IEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAg
ZW5hYmxlID0gISFlbmFibGU7CiAgICAgaWYgKHByaXYtPnNldHRpbmdzLnNwYXRpYWxfbmF2aWdh
dGlvbiAhPSBlbmFibGUpIHsKQEAgLTIyODMsMTYgKzIyODMsMTYgQEAgRWluYV9Cb29sIGV3a192
aWV3X3NldHRpbmdfc3BhdGlhbF9uYXZpZ2F0aW9uX3NldChFdmFzX09iamVjdCogbywgRWluYV9C
b29sIGVuYWIKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdf
c2V0dGluZ19sb2NhbF9zdG9yYWdlX2dldChjb25zdCBFdmFzX09iamVjdCogbykKK0VpbmFfQm9v
bCBld2tfdmlld19zZXR0aW5nX2xvY2FsX3N0b3JhZ2VfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBl
d2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFM
U0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFM
U0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxT
RSk7CiAgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmxvY2FsX3N0b3JhZ2U7CiB9CiAKLUVpbmFf
Qm9vbCBld2tfdmlld19zZXR0aW5nX2xvY2FsX3N0b3JhZ2Vfc2V0KEV2YXNfT2JqZWN0KiBvLCBF
aW5hX0Jvb2wgZW5hYmxlKQorRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfbG9jYWxfc3RvcmFn
ZV9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCBlbmFibGUpCiB7Ci0gICAgRVdL
X1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJRVdf
UFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBlbmFibGUgPSAh
IWVuYWJsZTsKICAgICBpZiAocHJpdi0+c2V0dGluZ3MubG9jYWxfc3RvcmFnZSAhPSBlbmFibGUp
IHsKQEAgLTIzMDIsMTYgKzIzMDIsMTYgQEAgRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfbG9j
YWxfc3RvcmFnZV9zZXQoRXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCBlbmFibGUpCiAgICAgcmV0
dXJuIEVJTkFfVFJVRTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfcGFnZV9jYWNo
ZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCitFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19w
YWdlX2NhY2hlX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklF
V19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9H
RVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFV0tfVklFV19QUklW
X0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIHJldHVybiBwcml2LT5z
ZXR0aW5ncy5wYWdlX2NhY2hlOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19wYWdl
X2NhY2hlX3NldChFdmFzX09iamVjdCogbywgRWluYV9Cb29sIGVuYWJsZSkKK0VpbmFfQm9vbCBl
d2tfdmlld19zZXR0aW5nX3BhZ2VfY2FjaGVfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5h
X0Jvb2wgZW5hYmxlKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJ
TkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJ
TkFfRkFMU0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlO
QV9GQUxTRSk7CiAgICAgZW5hYmxlID0gISFlbmFibGU7CiAgICAgaWYgKHByaXYtPnNldHRpbmdz
LnBhZ2VfY2FjaGUgIT0gZW5hYmxlKSB7CkBAIC0yMzIxLDI1ICsyMzIxLDI1IEBAIEVpbmFfQm9v
bCBld2tfdmlld19zZXR0aW5nX3BhZ2VfY2FjaGVfc2V0KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jv
b2wgZW5hYmxlKQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLWNvbnN0IGNoYXIqIGV3a192
aWV3X3NldHRpbmdfbG9jYWxfc3RvcmFnZV9kYXRhYmFzZV9wYXRoX2dldChjb25zdCBFdmFzX09i
amVjdCogbykKK2NvbnN0IGNoYXIqIGV3a192aWV3X3NldHRpbmdfbG9jYWxfc3RvcmFnZV9kYXRh
YmFzZV9wYXRoX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklF
V19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAwKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVU
VVJOKGV3a1ZpZXcsIHNkLCAwKTsKICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2Qs
IHByaXYsIDApOwogICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5sb2NhbF9zdG9yYWdlX2RhdGFi
YXNlX3BhdGg7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2xvY2FsX3N0b3JhZ2Vf
ZGF0YWJhc2VfcGF0aF9zZXQoRXZhc19PYmplY3QqIG8sIGNvbnN0IGNoYXIqIHBhdGgpCitFaW5h
X0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19sb2NhbF9zdG9yYWdlX2RhdGFiYXNlX3BhdGhfc2V0KEV2
YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBjaGFyKiBwYXRoKQogewotICAgIEVXS19WSUVXX1NE
X0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9P
Ul9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VU
X09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgaWYgKGVpbmFfc3RyaW5nc2hh
cmVfcmVwbGFjZSgmcHJpdi0+c2V0dGluZ3MubG9jYWxfc3RvcmFnZV9kYXRhYmFzZV9wYXRoLCBw
YXRoKSkKICAgICAgICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0TG9jYWxTdG9yYWdlRGF0YWJh
c2VQYXRoKFN0cmluZzo6ZnJvbVVURjgocGF0aCkpOwogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9
CiAKLUVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX21pbmltdW1fdGltZXJfaW50ZXJ2YWxfc2V0
KEV2YXNfT2JqZWN0KiBvLCBkb3VibGUgaW50ZXJ2YWwpCitFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0
dGluZ19taW5pbXVtX3RpbWVyX2ludGVydmFsX3NldChFdmFzX09iamVjdCogZXdrVmlldywgZG91
YmxlIGludGVydmFsKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJ
TkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJ
TkFfRkFMU0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlO
QV9GQUxTRSk7CiAgICAgaWYgKGZhYnMocHJpdi0+c2V0dGluZ3MuZG9tX3RpbWVyX2ludGVydmFs
IC0gaW50ZXJ2YWwpID49IHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6ZXBzaWxvbigpKSB7
CiAgICAgICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNldE1pbkRPTVRpbWVySW50ZXJ2YWwoaW50
ZXJ2YWwpOwpAQCAtMjM0OCwxNiArMjM0OCwxNiBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGlu
Z19taW5pbXVtX3RpbWVyX2ludGVydmFsX3NldChFdmFzX09iamVjdCogbywgZG91YmxlIGludAog
ICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLWRvdWJsZSBld2tfdmlld19zZXR0aW5nX21pbmlt
dW1fdGltZXJfaW50ZXJ2YWxfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQorZG91YmxlIGV3a192
aWV3X3NldHRpbmdfbWluaW11bV90aW1lcl9pbnRlcnZhbF9nZXQoY29uc3QgRXZhc19PYmplY3Qq
IGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9G
QUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9G
QUxTRSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZB
TFNFKTsKICAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZG9tX3RpbWVyX2ludGVydmFsOwogfQog
Ci1Fd2tfVmlld19TbWFydF9EYXRhKiBld2tfdmlld19zbWFydF9kYXRhX2dldChjb25zdCBFdmFz
X09iamVjdCogbykKK0V3a19WaWV3X1NtYXJ0X0RhdGEqIGV3a192aWV3X3NtYXJ0X2RhdGFfZ2V0
KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9S
RVRVUk4obywgc2QsIDApOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywg
c2QsIDApOwogICAgIHJldHVybiBzZDsKIH0KIApAQCAtMjQyOSwxMCArMjQyOSwxMCBAQCBjb25z
dCBFd2tfU2Nyb2xsX1JlcXVlc3QqIGV3a192aWV3X3Njcm9sbF9yZXF1ZXN0c19nZXQoY29uc3Qg
RXdrX1ZpZXdfUHJpdmF0ZV9EYQogICogQG5vdGUgdGhpcyBpcyBub3QgZm9yIGdlbmVyYWwgdXNl
IGJ1dCBqdXN0IGZvciBzdWJjbGFzc2VzIHRoYXQgd2FudAogICogICAgICAgdG8gZGVmaW5lIHRo
ZWlyIG93biBiYWNraW5nIHN0b3JlLgogICovCi12b2lkIGV3a192aWV3X3JlcGFpbnRfYWRkKEV3
a19WaWV3X1ByaXZhdGVfRGF0YSogcHJpdiwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHksIEV2
YXNfQ29vcmQgdywgRXZhc19Db29yZCBoKQordm9pZCBld2tfdmlld19yZXBhaW50X2FkZChFd2tf
Vmlld19Qcml2YXRlX0RhdGEqIHByaXYsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5LCBFdmFz
X0Nvb3JkIHdpZHRoLCBFdmFzX0Nvb3JkIGhlaWdodCkKIHsKICAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTihwcml2KTsKLSAgICBfZXdrX3ZpZXdfcmVwYWludF9hZGQocHJpdiwgeCwgeSwg
dywgaCk7CisgICAgX2V3a192aWV3X3JlcGFpbnRfYWRkKHByaXYsIHgsIHksIHdpZHRoLCBoZWln
aHQpOwogfQogCiAvKioKQEAgLTI0NTUsMTEgKzI0NTUsMTEgQEAgdm9pZCBld2tfdmlld19sYXlv
dXRfaWZfbmVlZGVkX3JlY3Vyc2l2ZShFd2tfVmlld19Qcml2YXRlX0RhdGEqIHByaXYpCiAgICAg
di0+dXBkYXRlTGF5b3V0QW5kU3R5bGVJZk5lZWRlZFJlY3Vyc2l2ZSgpOwogfQogCi12b2lkIGV3
a192aWV3X3Njcm9sbHNfcHJvY2VzcyhFd2tfVmlld19TbWFydF9EYXRhKiBzZCkKK3ZvaWQgZXdr
X3ZpZXdfc2Nyb2xsc19wcm9jZXNzKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSkKIHsK
LSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZCk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9H
RVRfT1JfUkVUVVJOKHNkLCBwcml2KTsKLSAgICBpZiAoIXNkLT5hcGktPnNjcm9sbHNfcHJvY2Vz
cyhzZCkpCisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRhKTsKKyAgICBF
V0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2KTsKKyAgICBpZiAoIXNt
YXJ0RGF0YS0+YXBpLT5zY3JvbGxzX3Byb2Nlc3Moc21hcnREYXRhKSkKICAgICAgICAgRVJSKCJm
YWlsZWQgdG8gcHJvY2VzcyBzY3JvbGxzLiIpOwogICAgIF9ld2tfdmlld19zY3JvbGxzX2ZsdXNo
KHByaXYpOwogfQpAQCAtMjQ5OCw3MiArMjQ5OCw3MiBAQCBFd2tfVmlld19QYWludF9Db250ZXh0
KiBld2tfdmlld19wYWludF9jb250ZXh0X25ldyhFd2tfVmlld19Qcml2YXRlX0RhdGEqIHByaXYs
CiAgICAgcmV0dXJuIGN0eHQ7CiB9CiAKLXZvaWQgZXdrX3ZpZXdfcGFpbnRfY29udGV4dF9mcmVl
KEV3a19WaWV3X1BhaW50X0NvbnRleHQqIGN0eHQpCit2b2lkIGV3a192aWV3X3BhaW50X2NvbnRl
eHRfZnJlZShFd2tfVmlld19QYWludF9Db250ZXh0KiBjb250ZXh0KQogewotICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOKGN0eHQpOwotICAgIGRlbGV0ZSBjdHh0LT5nYzsKLSAgICBjYWly
b19kZXN0cm95KGN0eHQtPmNyKTsKLSAgICBmcmVlKGN0eHQpOworICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOKGNvbnRleHQpOworICAgIGRlbGV0ZSBjb250ZXh0LT5nYzsKKyAgICBjYWly
b19kZXN0cm95KGNvbnRleHQtPmNyKTsKKyAgICBmcmVlKGNvbnRleHQpOwogfQogCi12b2lkIGV3
a192aWV3X3BhaW50X2NvbnRleHRfc2F2ZShFd2tfVmlld19QYWludF9Db250ZXh0KiBjdHh0KQor
dm9pZCBld2tfdmlld19wYWludF9jb250ZXh0X3NhdmUoRXdrX1ZpZXdfUGFpbnRfQ29udGV4dCog
Y29udGV4dCkKIHsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihjdHh0KTsKLSAgICBj
YWlyb19zYXZlKGN0eHQtPmNyKTsKLSAgICBjdHh0LT5nYy0+c2F2ZSgpOworICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOKGNvbnRleHQpOworICAgIGNhaXJvX3NhdmUoY29udGV4dC0+Y3Ip
OworICAgIGNvbnRleHQtPmdjLT5zYXZlKCk7CiB9CiAKLXZvaWQgZXdrX3ZpZXdfcGFpbnRfY29u
dGV4dF9yZXN0b3JlKEV3a19WaWV3X1BhaW50X0NvbnRleHQqIGN0eHQpCit2b2lkIGV3a192aWV3
X3BhaW50X2NvbnRleHRfcmVzdG9yZShFd2tfVmlld19QYWludF9Db250ZXh0KiBjb250ZXh0KQog
ewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGN0eHQpOwotICAgIGN0eHQtPmdjLT5y
ZXN0b3JlKCk7Ci0gICAgY2Fpcm9fcmVzdG9yZShjdHh0LT5jcik7CisgICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk4oY29udGV4dCk7CisgICAgY29udGV4dC0+Z2MtPnJlc3RvcmUoKTsKKyAg
ICBjYWlyb19yZXN0b3JlKGNvbnRleHQtPmNyKTsKIH0KIAotdm9pZCBld2tfdmlld19wYWludF9j
b250ZXh0X2NsaXAoRXdrX1ZpZXdfUGFpbnRfQ29udGV4dCogY3R4dCwgY29uc3QgRWluYV9SZWN0
YW5nbGUqIGFyZWEpCit2b2lkIGV3a192aWV3X3BhaW50X2NvbnRleHRfY2xpcChFd2tfVmlld19Q
YWludF9Db250ZXh0KiBjb250ZXh0LCBjb25zdCBFaW5hX1JlY3RhbmdsZSogYXJlYSkKIHsKLSAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihjdHh0KTsKKyAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTihjb250ZXh0KTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihhcmVh
KTsKLSAgICBjdHh0LT5nYy0+Y2xpcChXZWJDb3JlOjpJbnRSZWN0KGFyZWEtPngsIGFyZWEtPnks
IGFyZWEtPncsIGFyZWEtPmgpKTsKKyAgICBjb250ZXh0LT5nYy0+Y2xpcChXZWJDb3JlOjpJbnRS
ZWN0KGFyZWEtPngsIGFyZWEtPnksIGFyZWEtPncsIGFyZWEtPmgpKTsKIH0KIAotdm9pZCBld2tf
dmlld19wYWludF9jb250ZXh0X3BhaW50KEV3a19WaWV3X1BhaW50X0NvbnRleHQqIGN0eHQsIGNv
bnN0IEVpbmFfUmVjdGFuZ2xlKiBhcmVhKQordm9pZCBld2tfdmlld19wYWludF9jb250ZXh0X3Bh
aW50KEV3a19WaWV3X1BhaW50X0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEVpbmFfUmVjdGFuZ2xl
KiBhcmVhKQogewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGN0eHQpOworICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGNvbnRleHQpOwogICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOKGFyZWEpOwogCiAgICAgV2ViQ29yZTo6SW50UmVjdCByZWN0KGFyZWEtPngsIGFy
ZWEtPnksIGFyZWEtPncsIGFyZWEtPmgpOwogCi0gICAgaWYgKGN0eHQtPnZpZXctPmlzVHJhbnNw
YXJlbnQoKSkKLSAgICAgICAgY3R4dC0+Z2MtPmNsZWFyUmVjdChyZWN0KTsKLSAgICBjdHh0LT52
aWV3LT5wYWludChjdHh0LT5nYywgcmVjdCk7CisgICAgaWYgKGNvbnRleHQtPnZpZXctPmlzVHJh
bnNwYXJlbnQoKSkKKyAgICAgICAgY29udGV4dC0+Z2MtPmNsZWFyUmVjdChyZWN0KTsKKyAgICBj
b250ZXh0LT52aWV3LT5wYWludChjb250ZXh0LT5nYywgcmVjdCk7CiB9CiAKLXZvaWQgZXdrX3Zp
ZXdfcGFpbnRfY29udGV4dF9wYWludF9jb250ZW50cyhFd2tfVmlld19QYWludF9Db250ZXh0KiBj
dHh0LCBjb25zdCBFaW5hX1JlY3RhbmdsZSogYXJlYSkKK3ZvaWQgZXdrX3ZpZXdfcGFpbnRfY29u
dGV4dF9wYWludF9jb250ZW50cyhFd2tfVmlld19QYWludF9Db250ZXh0KiBjb250ZXh0LCBjb25z
dCBFaW5hX1JlY3RhbmdsZSogYXJlYSkKIHsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
TihjdHh0KTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihjb250ZXh0KTsKICAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihhcmVhKTsKIAogICAgIFdlYkNvcmU6OkludFJlY3Qg
cmVjdChhcmVhLT54LCBhcmVhLT55LCBhcmVhLT53LCBhcmVhLT5oKTsKIAotICAgIGlmIChjdHh0
LT52aWV3LT5pc1RyYW5zcGFyZW50KCkpCi0gICAgICAgIGN0eHQtPmdjLT5jbGVhclJlY3QocmVj
dCk7CisgICAgaWYgKGNvbnRleHQtPnZpZXctPmlzVHJhbnNwYXJlbnQoKSkKKyAgICAgICAgY29u
dGV4dC0+Z2MtPmNsZWFyUmVjdChyZWN0KTsKIAotICAgIGN0eHQtPnZpZXctPnBhaW50Q29udGVu
dHMoY3R4dC0+Z2MsIHJlY3QpOworICAgIGNvbnRleHQtPnZpZXctPnBhaW50Q29udGVudHMoY29u
dGV4dC0+Z2MsIHJlY3QpOwogfQogCi12b2lkIGV3a192aWV3X3BhaW50X2NvbnRleHRfc2NhbGUo
RXdrX1ZpZXdfUGFpbnRfQ29udGV4dCogY3R4dCwgZmxvYXQgc2NhbGVfeCwgZmxvYXQgc2NhbGVf
eSkKK3ZvaWQgZXdrX3ZpZXdfcGFpbnRfY29udGV4dF9zY2FsZShFd2tfVmlld19QYWludF9Db250
ZXh0KiBjb250ZXh0LCBmbG9hdCBzY2FsZV94LCBmbG9hdCBzY2FsZV95KQogewotICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOKGN0eHQpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOKGNvbnRleHQpOwogCi0gICAgY3R4dC0+Z2MtPnNjYWxlKFdlYkNvcmU6OkZsb2F0U2l6ZShz
Y2FsZV94LCBzY2FsZV95KSk7CisgICAgY29udGV4dC0+Z2MtPnNjYWxlKFdlYkNvcmU6OkZsb2F0
U2l6ZShzY2FsZV94LCBzY2FsZV95KSk7CiB9CiAKLXZvaWQgZXdrX3ZpZXdfcGFpbnRfY29udGV4
dF90cmFuc2xhdGUoRXdrX1ZpZXdfUGFpbnRfQ29udGV4dCogY3R4dCwgZmxvYXQgeCwgZmxvYXQg
eSkKK3ZvaWQgZXdrX3ZpZXdfcGFpbnRfY29udGV4dF90cmFuc2xhdGUoRXdrX1ZpZXdfUGFpbnRf
Q29udGV4dCogY29udGV4dCwgZmxvYXQgeCwgZmxvYXQgeSkKIHsKLSAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTihjdHh0KTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihjb250
ZXh0KTsKIAotICAgIGN0eHQtPmdjLT50cmFuc2xhdGUoeCwgeSk7CisgICAgY29udGV4dC0+Z2Mt
PnRyYW5zbGF0ZSh4LCB5KTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3BhaW50KEV3a19WaWV3
X1ByaXZhdGVfRGF0YSogcHJpdiwgY2Fpcm9fdCogY3IsIGNvbnN0IEVpbmFfUmVjdGFuZ2xlKiBh
cmVhKQpAQCAtMjYyMiwxMCArMjYyMiwxMCBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfcGFpbnRfY29u
dGVudHMoRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKiBwcml2LCBjYWlyb190KiBjciwgY29ucwogICoK
ICAqIEVtaXRzIHNpZ25hbDogInJlYWR5IiB3aXRoIG5vIHBhcmFtZXRlcnMuCiAgKi8KLXZvaWQg
ZXdrX3ZpZXdfcmVhZHkoRXZhc19PYmplY3QqIG8pCit2b2lkIGV3a192aWV3X3JlYWR5KEV2YXNf
T2JqZWN0KiBld2tWaWV3KQogewotICAgIERCRygibz0lcCIsIG8pOwotICAgIGV2YXNfb2JqZWN0
X3NtYXJ0X2NhbGxiYWNrX2NhbGwobywgInJlYWR5IiwgMCk7CisgICAgREJHKCJld2tWaWV3PSVw
IiwgZXdrVmlldyk7CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChld2tWaWV3
LCAicmVhZHkiLCAwKTsKIH0KIAogLyoqCkBAIC0yNjM2LDkgKzI2MzYsOSBAQCB2b2lkIGV3a192
aWV3X3JlYWR5KEV2YXNfT2JqZWN0KiBvKQogICogRW1pdHMgc2lnbmFsOiAiaW5wdXRtZXRob2Qs
Y2hhbmdlZCIgd2l0aCBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIGl0J3MKICAqIGVuYWJs
ZWQgb3Igbm90LgogICovCi12b2lkIGV3a192aWV3X2lucHV0X21ldGhvZF9zdGF0ZV9zZXQoRXZh
c19PYmplY3QqIG8sIEVpbmFfQm9vbCBhY3RpdmUpCit2b2lkIGV3a192aWV3X2lucHV0X21ldGhv
ZF9zdGF0ZV9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCBhY3RpdmUpCiB7Ci0g
ICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCk7CisgICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihld2tWaWV3LCBzZCk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVQoc2QsIHByaXYp
OwogICAgIFdlYkNvcmU6OkZyYW1lKiBmb2N1c2VkRnJhbWUgPSBwcml2LT5wYWdlLT5mb2N1c0Nv
bnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCk7CiAKQEAgLTI2NjUsNyArMjY2NSw3IEBA
IHZvaWQgZXdrX3ZpZXdfaW5wdXRfbWV0aG9kX3N0YXRlX3NldChFdmFzX09iamVjdCogbywgRWlu
YV9Cb29sIGFjdGl2ZSkKICAgICAgICAgfQogICAgIH0KIAotICAgIGV2YXNfb2JqZWN0X3NtYXJ0
X2NhbGxiYWNrX2NhbGwobywgImlucHV0bWV0aG9kLGNoYW5nZWQiLCAodm9pZCopYWN0aXZlKTsK
KyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKGV3a1ZpZXcsICJpbnB1dG1ldGhv
ZCxjaGFuZ2VkIiwgKHZvaWQqKWFjdGl2ZSk7CiB9CiAKIC8qKgpAQCAtMjY3NCwxMCArMjY3NCwx
MCBAQCB2b2lkIGV3a192aWV3X2lucHV0X21ldGhvZF9zdGF0ZV9zZXQoRXZhc19PYmplY3QqIG8s
IEVpbmFfQm9vbCBhY3RpdmUpCiAgKgogICogRW1pdHMgc2lnbmFsOiAidGl0bGUsY2hhbmdlZCIg
d2l0aCBwb2ludGVyIHRvIG5ldyB0aXRsZSBzdHJpbmcuCiAgKi8KLXZvaWQgZXdrX3ZpZXdfdGl0
bGVfc2V0KEV2YXNfT2JqZWN0KiBvLCBjb25zdCBjaGFyKiB0aXRsZSkKK3ZvaWQgZXdrX3ZpZXdf
dGl0bGVfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBjaGFyKiB0aXRsZSkKIHsKLSAg
ICBEQkcoIm89JXAsIHRpdGxlPSVzIiwgbywgdGl0bGUgPyB0aXRsZSA6ICIobnVsbCkiKTsKLSAg
ICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKG8sICJ0aXRsZSxjaGFuZ2VkIiwgKHZv
aWQqKXRpdGxlKTsKKyAgICBEQkcoImV3a1ZpZXc9JXAsIHRpdGxlPSVzIiwgZXdrVmlldywgdGl0
bGUgPyB0aXRsZSA6ICIobnVsbCkiKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19j
YWxsKGV3a1ZpZXcsICJ0aXRsZSxjaGFuZ2VkIiwgKHZvaWQqKXRpdGxlKTsKIH0KIAogLyoqCkBA
IC0yNjg2LDEyICsyNjg2LDEyIEBAIHZvaWQgZXdrX3ZpZXdfdGl0bGVfc2V0KEV2YXNfT2JqZWN0
KiBvLCBjb25zdCBjaGFyKiB0aXRsZSkKICAqCiAgKiBFbWl0cyBzaWduYWw6ICJ1cmksY2hhbmdl
ZCIgd2l0aCBwb2ludGVyIHRvIHRoZSBuZXcgdXJpIHN0cmluZy4KICAqLwotdm9pZCBld2tfdmll
d191cmlfY2hhbmdlZChFdmFzX09iamVjdCogbykKK3ZvaWQgZXdrX3ZpZXdfdXJpX2NoYW5nZWQo
RXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihv
LCBzZCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCk7CiAgICAg
Y29uc3QgY2hhciogdXJpID0gZXdrX2ZyYW1lX3VyaV9nZXQoc2QtPm1haW5fZnJhbWUpOwotICAg
IERCRygibz0lcCwgdXJpPSVzIiwgbywgdXJpID8gdXJpIDogIihudWxsKSIpOwotICAgIGV2YXNf
b2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwobywgInVyaSxjaGFuZ2VkIiwgKHZvaWQqKXVyaSk7
CisgICAgREJHKCJld2tWaWV3PSVwLCB1cmk9JXMiLCBld2tWaWV3LCB1cmkgPyB1cmkgOiAiKG51
bGwpIik7CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChld2tWaWV3LCAidXJp
LGNoYW5nZWQiLCAodm9pZCopdXJpKTsKIH0KIAogLyoqCkBAIC0yNzAzLDkgKzI3MDMsOSBAQCB2
b2lkIGV3a192aWV3X3VyaV9jaGFuZ2VkKEV2YXNfT2JqZWN0KiBvKQogICoKICAqIEVtaXRzIHNp
Z25hbDogImxvYWQsZG9jdW1lbnQsZmluaXNoZWQiIHdpdGggQHAgZnJhbWUgYXMgdGhlIHBhcmFt
ZXRlci4KICAqLwotdm9pZCBld2tfdmlld19sb2FkX2RvY3VtZW50X2ZpbmlzaGVkKEV2YXNfT2Jq
ZWN0KiBvLCBFdmFzX09iamVjdCogZnJhbWUpCit2b2lkIGV3a192aWV3X2xvYWRfZG9jdW1lbnRf
ZmluaXNoZWQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV2YXNfT2JqZWN0KiBmcmFtZSkKIHsKLSAg
ICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKG8sICJsb2FkLGRvY3VtZW50LGZpbmlz
aGVkIiwgZnJhbWUpOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdrVmll
dywgImxvYWQsZG9jdW1lbnQsZmluaXNoZWQiLCBmcmFtZSk7CiB9CiAKIC8qKgpAQCAtMjcxNiwx
MCArMjcxNiwxMCBAQCB2b2lkIGV3a192aWV3X2xvYWRfZG9jdW1lbnRfZmluaXNoZWQoRXZhc19P
YmplY3QqIG8sIEV2YXNfT2JqZWN0KiBmcmFtZSkKICAqCiAgKiBFbWl0cyBzaWduYWw6ICJsb2Fk
LHN0YXJ0ZWQiIHdpdGggbm8gcGFyYW1ldGVycy4KICAqLwotdm9pZCBld2tfdmlld19sb2FkX3N0
YXJ0ZWQoRXZhc19PYmplY3QqIG8pCit2b2lkIGV3a192aWV3X2xvYWRfc3RhcnRlZChFdmFzX09i
amVjdCogZXdrVmlldykKIHsKLSAgICBEQkcoIm89JXAiLCBvKTsKLSAgICBldmFzX29iamVjdF9z
bWFydF9jYWxsYmFja19jYWxsKG8sICJsb2FkLHN0YXJ0ZWQiLCAwKTsKKyAgICBEQkcoImV3a1Zp
ZXc9JXAiLCBld2tWaWV3KTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKGV3
a1ZpZXcsICJsb2FkLHN0YXJ0ZWQiLCAwKTsKIH0KIAogLyoqCkBAIC0yNzI5LDEwICsyNzI5LDEw
IEBAIHZvaWQgZXdrX3ZpZXdfbG9hZF9zdGFydGVkKEV2YXNfT2JqZWN0KiBvKQogICoKICAqIEVt
aXRzIHNpZ25hbDogImxvYWQsc3RhcnRlZCIgb24gbWFpbiBmcmFtZSB3aXRoIG5vIHBhcmFtZXRl
cnMuCiAgKi8KLXZvaWQgZXdrX3ZpZXdfZnJhbWVfbWFpbl9sb2FkX3N0YXJ0ZWQoRXZhc19PYmpl
Y3QqIG8pCit2b2lkIGV3a192aWV3X2ZyYW1lX21haW5fbG9hZF9zdGFydGVkKEV2YXNfT2JqZWN0
KiBld2tWaWV3KQogewotICAgIERCRygibz0lcCIsIG8pOwotICAgIEV2YXNfT2JqZWN0KiBmcmFt
ZSA9IGV3a192aWV3X2ZyYW1lX21haW5fZ2V0KG8pOworICAgIERCRygiZXdrVmlldz0lcCIsIGV3
a1ZpZXcpOworICAgIEV2YXNfT2JqZWN0KiBmcmFtZSA9IGV3a192aWV3X2ZyYW1lX21haW5fZ2V0
KGV3a1ZpZXcpOwogICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZnJhbWUsICJs
b2FkLHN0YXJ0ZWQiLCAwKTsKIH0KIApAQCAtMjc0NCwxMCArMjc0NCwxMCBAQCB2b2lkIGV3a192
aWV3X2ZyYW1lX21haW5fbG9hZF9zdGFydGVkKEV2YXNfT2JqZWN0KiBvKQogICoKICAqIEVtaXRz
IHNpZ25hbDogImxvYWQscHJvdmlzaW9uYWwiIG9uIFZpZXcgd2l0aCBubyBwYXJhbWV0ZXJzLgog
ICovCi12b2lkIGV3a192aWV3X2xvYWRfcHJvdmlzaW9uYWwoRXZhc19PYmplY3QqIG8pCit2b2lk
IGV3a192aWV3X2xvYWRfcHJvdmlzaW9uYWwoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAg
REJHKCJvPSVwIiwgbyk7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChvLCAi
bG9hZCxwcm92aXNpb25hbCIsIDApOworICAgIERCRygiZXdrVmlldz0lcCIsIGV3a1ZpZXcpOwor
ICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdrVmlldywgImxvYWQscHJvdmlz
aW9uYWwiLCAwKTsKIH0KIAogLyoqCkBAIC0yNzU4LDEwICsyNzU4LDEwIEBAIHZvaWQgZXdrX3Zp
ZXdfbG9hZF9wcm92aXNpb25hbChFdmFzX09iamVjdCogbykKICAqCiAgKiBFbWl0cyBzaWduYWw6
ICJsb2FkLG5ld3dpbmRvdyxzaG93IiBvbiB2aWV3IHdpdGggbm8gcGFyYW1ldGVycy4KICAqLwot
dm9pZCBld2tfdmlld19sb2FkX3Nob3coRXZhc19PYmplY3QqIG8pCit2b2lkIGV3a192aWV3X2xv
YWRfc2hvdyhFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBEQkcoIm89JXAiLCBvKTsKLSAg
ICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKG8sICJsb2FkLG5ld3dpbmRvdyxzaG93
IiwgMCk7CisgICAgREJHKCJld2tWaWV3PSVwIiwgZXdrVmlldyk7CisgICAgZXZhc19vYmplY3Rf
c21hcnRfY2FsbGJhY2tfY2FsbChld2tWaWV3LCAibG9hZCxuZXd3aW5kb3csc2hvdyIsIDApOwog
fQogCiAKQEAgLTI3NzEsMTAgKzI3NzEsMTAgQEAgdm9pZCBld2tfdmlld19sb2FkX3Nob3coRXZh
c19PYmplY3QqIG8pCiAgKgogICogQHBhcmFtIG8gVmlldy4KICAqLwotdm9pZCBld2tfdmlld19m
cmFtZV9tYWluX2NsZWFyZWQoRXZhc19PYmplY3QqIG8pCit2b2lkIGV3a192aWV3X2ZyYW1lX21h
aW5fY2xlYXJlZChFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBEQkcoIm89JXAiLCBvKTsK
LSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkKTsKKyAgICBEQkcoImV3a1ZpZXc9
JXAiLCBld2tWaWV3KTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNk
KTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpLT5mbHVzaCk7CiAgICAg
c2QtPmFwaS0+Zmx1c2goc2QpOwogfQpAQCAtMjc4NywxMCArMjc4NywxMCBAQCB2b2lkIGV3a192
aWV3X2ZyYW1lX21haW5fY2xlYXJlZChFdmFzX09iamVjdCogbykKICAqCiAgKiBFbWl0cyBzaWdu
YWw6ICJpY29uLHJlY2VpdmVkIiB3aXRoIG5vIHBhcmFtZXRlcnMuCiAgKi8KLXZvaWQgZXdrX3Zp
ZXdfZnJhbWVfbWFpbl9pY29uX3JlY2VpdmVkKEV2YXNfT2JqZWN0KiBvKQordm9pZCBld2tfdmll
d19mcmFtZV9tYWluX2ljb25fcmVjZWl2ZWQoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAg
REJHKCJvPSVwIiwgbyk7Ci0gICAgRXZhc19PYmplY3QqIGZyYW1lID0gZXdrX3ZpZXdfZnJhbWVf
bWFpbl9nZXQobyk7CisgICAgREJHKCJld2tWaWV3PSVwIiwgZXdrVmlldyk7CisgICAgRXZhc19P
YmplY3QqIGZyYW1lID0gZXdrX3ZpZXdfZnJhbWVfbWFpbl9nZXQoZXdrVmlldyk7CiAgICAgZXZh
c19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChmcmFtZSwgImljb24scmVjZWl2ZWQiLCAwKTsK
IH0KIApAQCAtMjgwNCwxMCArMjgwNCwxMCBAQCB2b2lkIGV3a192aWV3X2ZyYW1lX21haW5faWNv
bl9yZWNlaXZlZChFdmFzX09iamVjdCogbykKICAqIEBub3RlIHRoZXJlIHNob3VsZCBub3QgYmUg
YW55IGVycm9yIHN0dWZmIGhlcmUsIGJ1dCB0cnlpbmcgdG8gYmUKICAqICAgICAgIGNvbXBhdGli
bGUgd2l0aCBwcmV2aW91cyBXZWJLaXQuCiAgKi8KLXZvaWQgZXdrX3ZpZXdfbG9hZF9maW5pc2hl
ZChFdmFzX09iamVjdCogbywgY29uc3QgRXdrX0ZyYW1lX0xvYWRfRXJyb3IqIGVycm9yKQordm9p
ZCBld2tfdmlld19sb2FkX2ZpbmlzaGVkKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBFd2tf
RnJhbWVfTG9hZF9FcnJvciogZXJyb3IpCiB7Ci0gICAgREJHKCJvPSVwLCBlcnJvcj0lcCIsIG8s
IGVycm9yKTsKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKG8sICJsb2FkLGZp
bmlzaGVkIiwgKHZvaWQqKWVycm9yKTsKKyAgICBEQkcoImV3a1ZpZXc9JXAsIGVycm9yPSVwIiwg
ZXdrVmlldywgZXJyb3IpOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdr
VmlldywgImxvYWQsZmluaXNoZWQiLCAodm9pZCopZXJyb3IpOwogfQogCiAvKioKQEAgLTI4MTYs
MTAgKzI4MTYsMTAgQEAgdm9pZCBld2tfdmlld19sb2FkX2ZpbmlzaGVkKEV2YXNfT2JqZWN0KiBv
LCBjb25zdCBFd2tfRnJhbWVfTG9hZF9FcnJvciogZXJyb3IpCiAgKgogICogRW1pdHMgc2lnbmFs
OiAibG9hZCxlcnJvciIgd2l0aCBwb2ludGVyIHRvIEV3a19GcmFtZV9Mb2FkX0Vycm9yLgogICov
Ci12b2lkIGV3a192aWV3X2xvYWRfZXJyb3IoRXZhc19PYmplY3QqIG8sIGNvbnN0IEV3a19GcmFt
ZV9Mb2FkX0Vycm9yKiBlcnJvcikKK3ZvaWQgZXdrX3ZpZXdfbG9hZF9lcnJvcihFdmFzX09iamVj
dCogZXdrVmlldywgY29uc3QgRXdrX0ZyYW1lX0xvYWRfRXJyb3IqIGVycm9yKQogewotICAgIERC
Rygibz0lcCwgZXJyb3I9JXAiLCBvLCBlcnJvcik7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2Fs
bGJhY2tfY2FsbChvLCAibG9hZCxlcnJvciIsICh2b2lkKillcnJvcik7CisgICAgREJHKCJld2tW
aWV3PSVwLCBlcnJvcj0lcCIsIGV3a1ZpZXcsIGVycm9yKTsKKyAgICBldmFzX29iamVjdF9zbWFy
dF9jYWxsYmFja19jYWxsKGV3a1ZpZXcsICJsb2FkLGVycm9yIiwgKHZvaWQqKWVycm9yKTsKIH0K
IAogLyoqCkBAIC0yODI4LDE3ICsyODI4LDE3IEBAIHZvaWQgZXdrX3ZpZXdfbG9hZF9lcnJvcihF
dmFzX09iamVjdCogbywgY29uc3QgRXdrX0ZyYW1lX0xvYWRfRXJyb3IqIGVycm9yKQogICoKICAq
IEVtaXRzIHNpZ25hbDogImxvYWQscHJvZ3Jlc3MiIHdpdGggcG9pbnRlciB0byBhIGRvdWJsZSBm
cm9tIDAuMCB0byAxLjAuCiAgKi8KLXZvaWQgZXdrX3ZpZXdfbG9hZF9wcm9ncmVzc19jaGFuZ2Vk
KEV2YXNfT2JqZWN0KiBvKQordm9pZCBld2tfdmlld19sb2FkX3Byb2dyZXNzX2NoYW5nZWQoRXZh
c19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBz
ZCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCk7CiAgICAgRVdL
X1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2KTsKIAogICAgIC8vIEV2YXNfQ29vcmQg
dywgaDsKICAgICBkb3VibGUgcHJvZ3Jlc3MgPSBwcml2LT5wYWdlLT5wcm9ncmVzcygpLT5lc3Rp
bWF0ZWRQcm9ncmVzcygpOwogCi0gICAgREJHKCJvPSVwIChwPSUwLjNmKSIsIG8sIHByb2dyZXNz
KTsKKyAgICBEQkcoImV3a1ZpZXc9JXAgKHA9JTAuM2YpIiwgZXdrVmlldywgcHJvZ3Jlc3MpOwog
Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChvLCAibG9hZCxwcm9ncmVzcyIs
ICZwcm9ncmVzcyk7CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChld2tWaWV3
LCAibG9hZCxwcm9ncmVzcyIsICZwcm9ncmVzcyk7CiB9CiAKIC8qKgpAQCAtMjg1MCw5ICsyODUw
LDkgQEAgdm9pZCBld2tfdmlld19sb2FkX3Byb2dyZXNzX2NoYW5nZWQoRXZhc19PYmplY3QqIG8p
CiAgKgogICogRW1pdHMgc2lnbmFsOiAicmVzdG9yZSIgd2l0aCBmcmFtZS4KICAqLwotdm9pZCBl
d2tfdmlld19yZXN0b3JlX3N0YXRlKEV2YXNfT2JqZWN0KiBvLCBFdmFzX09iamVjdCogZnJhbWUp
Cit2b2lkIGV3a192aWV3X3Jlc3RvcmVfc3RhdGUoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV2YXNf
T2JqZWN0KiBmcmFtZSkKIHsKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKG8s
ICJyZXN0b3JlIiwgZnJhbWUpOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwo
ZXdrVmlldywgInJlc3RvcmUiLCBmcmFtZSk7CiB9CiAKIC8qKgpAQCAtMjg3NiwxMiArMjg3Niwx
MiBAQCB2b2lkIGV3a192aWV3X3Jlc3RvcmVfc3RhdGUoRXZhc19PYmplY3QqIG8sIEV2YXNfT2Jq
ZWN0KiBmcmFtZSkKICAqCiAgKiBAc2VlIGV3a193aW5kb3dfZmVhdHVyZXNfcmVmKCkuCiAgKi8K
LUV2YXNfT2JqZWN0KiBld2tfdmlld193aW5kb3dfY3JlYXRlKEV2YXNfT2JqZWN0KiBvLCBFaW5h
X0Jvb2wgamF2YXNjcmlwdCwgY29uc3QgV2ViQ29yZTo6V2luZG93RmVhdHVyZXMqIGNvcmVGZWF0
dXJlcykKK0V2YXNfT2JqZWN0KiBld2tfdmlld193aW5kb3dfY3JlYXRlKEV2YXNfT2JqZWN0KiBl
d2tWaWV3LCBFaW5hX0Jvb2wgamF2YXNjcmlwdCwgY29uc3QgV2ViQ29yZTo6V2luZG93RmVhdHVy
ZXMqIGNvcmVGZWF0dXJlcykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNk
LCAwKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAwKTsKIAog
ICAgIGlmICghc2QtPmFwaS0+d2luZG93X2NyZWF0ZSkKLSAgICAgICAgcmV0dXJuIG87CisgICAg
ICAgIHJldHVybiBld2tWaWV3OwogCiAgICAgRXdrX1dpbmRvd19GZWF0dXJlcyogd2luZG93X2Zl
YXR1cmVzID0gZXdrX3dpbmRvd19mZWF0dXJlc19uZXdfZnJvbV9jb3JlKGNvcmVGZWF0dXJlcyk7
CiAgICAgaWYgKCF3aW5kb3dfZmVhdHVyZXMpCkBAIC0yOTA0LDExICsyOTA0LDExIEBAIEV2YXNf
T2JqZWN0KiBld2tfdmlld193aW5kb3dfY3JlYXRlKEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wg
amF2YXNjcmlwdCwgY29uc3QKICAqCiAgKiBAcGFyYW0gbyBWaWV3IHRvIGJlIGNsb3NlZC4KICAq
Lwotdm9pZCBld2tfdmlld193aW5kb3dfY2xvc2UoRXZhc19PYmplY3QqIG8pCit2b2lkIGV3a192
aWV3X3dpbmRvd19jbG9zZShFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19T
RF9HRVRfT1JfUkVUVVJOKG8sIHNkKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3
a1ZpZXcsIHNkKTsKIAotICAgIGV3a192aWV3X3N0b3Aobyk7CisgICAgZXdrX3ZpZXdfc3RvcChl
d2tWaWV3KTsKICAgICBpZiAoIXNkLT5hcGktPndpbmRvd19jbG9zZSkKICAgICAgICAgcmV0dXJu
OwogICAgIHNkLT5hcGktPndpbmRvd19jbG9zZShzZCk7CkBAIC0yOTIwLDkgKzI5MjAsOSBAQCB2
b2lkIGV3a192aWV3X3dpbmRvd19jbG9zZShFdmFzX09iamVjdCogbykKICAqCiAgKiBFbWl0cyBz
aWduYWw6ICJsaW5rLGhvdmVyLGluIgogICovCi12b2lkIGV3a192aWV3X21vdXNlX2xpbmtfaG92
ZXJfaW4oRXZhc19PYmplY3QqIG8sIHZvaWQqIGRhdGEpCit2b2lkIGV3a192aWV3X21vdXNlX2xp
bmtfaG92ZXJfaW4oRXZhc19PYmplY3QqIGV3a1ZpZXcsIHZvaWQqIGRhdGEpCiB7Ci0gICAgZXZh
c19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChvLCAibGluayxob3ZlcixpbiIsIGRhdGEpOwor
ICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdrVmlldywgImxpbmssaG92ZXIs
aW4iLCBkYXRhKTsKIH0KIAogLyoqCkBAIC0yOTMxLDkgKzI5MzEsOSBAQCB2b2lkIGV3a192aWV3
X21vdXNlX2xpbmtfaG92ZXJfaW4oRXZhc19PYmplY3QqIG8sIHZvaWQqIGRhdGEpCiAgKgogICog
RW1pdHMgc2lnbmFsOiAibGluayxob3ZlcixvdXQiCiAgKi8KLXZvaWQgZXdrX3ZpZXdfbW91c2Vf
bGlua19ob3Zlcl9vdXQoRXZhc19PYmplY3QqIG8pCit2b2lkIGV3a192aWV3X21vdXNlX2xpbmtf
aG92ZXJfb3V0KEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIGV2YXNfb2JqZWN0X3NtYXJ0
X2NhbGxiYWNrX2NhbGwobywgImxpbmssaG92ZXIsb3V0IiwgMCk7CisgICAgZXZhc19vYmplY3Rf
c21hcnRfY2FsbGJhY2tfY2FsbChld2tWaWV3LCAibGluayxob3ZlcixvdXQiLCAwKTsKIH0KIAog
LyoqCkBAIC0yOTQyLDEwICsyOTQyLDEwIEBAIHZvaWQgZXdrX3ZpZXdfbW91c2VfbGlua19ob3Zl
cl9vdXQoRXZhc19PYmplY3QqIG8pCiAgKgogICogRW1pdHMgc2lnbmFsOiAidG9vbGJhcnMsdmlz
aWJsZSxzZXQiIHdpdGggYSBwb2ludGVyIHRvIGEgYm9vbGVhbi4KICAqLwotdm9pZCBld2tfdmll
d190b29sYmFyc192aXNpYmxlX3NldChFdmFzX09iamVjdCogbywgRWluYV9Cb29sIHZpc2libGUp
Cit2b2lkIGV3a192aWV3X3Rvb2xiYXJzX3Zpc2libGVfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3
LCBFaW5hX0Jvb2wgdmlzaWJsZSkKIHsKLSAgICBEQkcoIm89JXAgKHZpc2libGU9JWQpIiwgbywg
ISF2aXNpYmxlKTsKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKG8sICJ0b29s
YmFycyx2aXNpYmxlLHNldCIsICZ2aXNpYmxlKTsKKyAgICBEQkcoImV3a1ZpZXc9JXAgKHZpc2li
bGU9JWQpIiwgZXdrVmlldywgISF2aXNpYmxlKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxs
YmFja19jYWxsKGV3a1ZpZXcsICJ0b29sYmFycyx2aXNpYmxlLHNldCIsICZ2aXNpYmxlKTsKIH0K
IAogLyoqCkBAIC0yOTU5LDExICsyOTU5LDExIEBAIHZvaWQgZXdrX3ZpZXdfdG9vbGJhcnNfdmlz
aWJsZV9zZXQoRXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCB2aXNpYmxlKQogICoKICAqIEVtaXRz
IHNpZ25hbDogInRvb2xiYXJzLHZpc2libGUsZ2V0IiB3aXRoIGEgcG9pbnRlciB0byBhIGJvb2xl
YW4uCiAgKi8KLXZvaWQgZXdrX3ZpZXdfdG9vbGJhcnNfdmlzaWJsZV9nZXQoRXZhc19PYmplY3Qq
IG8sIEVpbmFfQm9vbCogdmlzaWJsZSkKK3ZvaWQgZXdrX3ZpZXdfdG9vbGJhcnNfdmlzaWJsZV9n
ZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCogdmlzaWJsZSkKIHsKLSAgICBEQkco
IiVzLCBvPSVwIiwgX19mdW5jX18sIG8pOworICAgIERCRygiJXMsIG89JXAiLCBfX2Z1bmNfXywg
ZXdrVmlldyk7CiAgICAgKnZpc2libGUgPSBFSU5BX0ZBTFNFOwotICAgIGV2YXNfb2JqZWN0X3Nt
YXJ0X2NhbGxiYWNrX2NhbGwobywgInRvb2xiYXJzLHZpc2libGUsZ2V0IiwgdmlzaWJsZSk7Cisg
ICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChld2tWaWV3LCAidG9vbGJhcnMsdmlz
aWJsZSxnZXQiLCB2aXNpYmxlKTsKIH0KIAogLyoqCkBAIC0yOTc1LDEwICsyOTc1LDEwIEBAIHZv
aWQgZXdrX3ZpZXdfdG9vbGJhcnNfdmlzaWJsZV9nZXQoRXZhc19PYmplY3QqIG8sIEVpbmFfQm9v
bCogdmlzaWJsZSkKICAqCiAgKiBFbWl0cyBzaWduYWw6ICJzdGF0dXNiYXIsdmlzaWJsZSxzZXQi
IHdpdGggYSBwb2ludGVyIHRvIGEgYm9vbGVhbi4KICAqLwotdm9pZCBld2tfdmlld19zdGF0dXNi
YXJfdmlzaWJsZV9zZXQoRXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCB2aXNpYmxlKQordm9pZCBl
d2tfdmlld19zdGF0dXNiYXJfdmlzaWJsZV9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFf
Qm9vbCB2aXNpYmxlKQogewotICAgIERCRygibz0lcCAodmlzaWJsZT0lZCkiLCBvLCAhIXZpc2li
bGUpOwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwobywgInN0YXR1c2Jhcix2
aXNpYmxlLHNldCIsICZ2aXNpYmxlKTsKKyAgICBEQkcoImV3a1ZpZXc9JXAgKHZpc2libGU9JWQp
IiwgZXdrVmlldywgISF2aXNpYmxlKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19j
YWxsKGV3a1ZpZXcsICJzdGF0dXNiYXIsdmlzaWJsZSxzZXQiLCAmdmlzaWJsZSk7CiB9CiAKIC8q
KgpAQCAtMjk5MiwxMSArMjk5MiwxMSBAQCB2b2lkIGV3a192aWV3X3N0YXR1c2Jhcl92aXNpYmxl
X3NldChFdmFzX09iamVjdCogbywgRWluYV9Cb29sIHZpc2libGUpCiAgKgogICogRW1pdHMgc2ln
bmFsOiAic3RhdHVzYmFyLHZpc2libGUsZ2V0IiB3aXRoIGEgcG9pbnRlciB0byBhIGJvb2xlYW4u
CiAgKi8KLXZvaWQgZXdrX3ZpZXdfc3RhdHVzYmFyX3Zpc2libGVfZ2V0KEV2YXNfT2JqZWN0KiBv
LCBFaW5hX0Jvb2wqIHZpc2libGUpCit2b2lkIGV3a192aWV3X3N0YXR1c2Jhcl92aXNpYmxlX2dl
dChFdmFzX09iamVjdCogZXdrVmlldywgRWluYV9Cb29sKiB2aXNpYmxlKQogewotICAgIERCRygi
JXMsIG89JXAiLCBfX2Z1bmNfXywgbyk7CisgICAgREJHKCIlcywgbz0lcCIsIF9fZnVuY19fLCBl
d2tWaWV3KTsKICAgICAqdmlzaWJsZSA9IEVJTkFfRkFMU0U7Ci0gICAgZXZhc19vYmplY3Rfc21h
cnRfY2FsbGJhY2tfY2FsbChvLCAic3RhdHVzYmFyLHZpc2libGUsZ2V0IiwgdmlzaWJsZSk7Cisg
ICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChld2tWaWV3LCAic3RhdHVzYmFyLHZp
c2libGUsZ2V0IiwgdmlzaWJsZSk7CiB9CiAKIC8qKgpAQCAtMzAwOCwxMSArMzAwOCwxMSBAQCB2
b2lkIGV3a192aWV3X3N0YXR1c2Jhcl92aXNpYmxlX2dldChFdmFzX09iamVjdCogbywgRWluYV9C
b29sKiB2aXNpYmxlKQogICoKICAqIEVtaXRzIHNpZ25hbDogInN0YXR1c2Jhcix0ZXh0LHNldCIg
d2l0aCBhIHN0cmluZy4KICAqLwotdm9pZCBld2tfdmlld19zdGF0dXNiYXJfdGV4dF9zZXQoRXZh
c19PYmplY3QqIG8sIGNvbnN0IGNoYXIqIHRleHQpCit2b2lkIGV3a192aWV3X3N0YXR1c2Jhcl90
ZXh0X3NldChFdmFzX09iamVjdCogZXdrVmlldywgY29uc3QgY2hhciogdGV4dCkKIHsKLSAgICBE
QkcoIm89JXAgKHRleHQ9JXMpIiwgbywgdGV4dCk7CisgICAgREJHKCJld2tWaWV3PSVwICh0ZXh0
PSVzKSIsIGV3a1ZpZXcsIHRleHQpOwogICAgIElORigic3RhdHVzIGJhciB0ZXh0IHNldDogJXMi
LCB0ZXh0KTsKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKG8sICJzdGF0dXNi
YXIsdGV4dCxzZXQiLCAodm9pZCopdGV4dCk7CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJh
Y2tfY2FsbChld2tWaWV3LCAic3RhdHVzYmFyLHRleHQsc2V0IiwgKHZvaWQqKXRleHQpOwogfQog
CiAvKioKQEAgLTMwMjQsMTAgKzMwMjQsMTAgQEAgdm9pZCBld2tfdmlld19zdGF0dXNiYXJfdGV4
dF9zZXQoRXZhc19PYmplY3QqIG8sIGNvbnN0IGNoYXIqIHRleHQpCiAgKgogICogRW1pdHMgc2ln
bmFsOiAic2Nyb2xsYmFycyx2aXNpYmxlLHNldCIgd2l0aCBhIHBvaW50ZXIgdG8gYSBib29sZWFu
LgogICovCi12b2lkIGV3a192aWV3X3Njcm9sbGJhcnNfdmlzaWJsZV9zZXQoRXZhc19PYmplY3Qq
IG8sIEVpbmFfQm9vbCB2aXNpYmxlKQordm9pZCBld2tfdmlld19zY3JvbGxiYXJzX3Zpc2libGVf
c2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wgdmlzaWJsZSkKIHsKLSAgICBEQkco
Im89JXAgKHZpc2libGU9JWQpIiwgbywgISF2aXNpYmxlKTsKLSAgICBldmFzX29iamVjdF9zbWFy
dF9jYWxsYmFja19jYWxsKG8sICJzY3JvbGxiYXJzLHZpc2libGUsc2V0IiwgJnZpc2libGUpOwor
ICAgIERCRygiZXdrVmlldz0lcCAodmlzaWJsZT0lZCkiLCBld2tWaWV3LCAhIXZpc2libGUpOwor
ICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdrVmlldywgInNjcm9sbGJhcnMs
dmlzaWJsZSxzZXQiLCAmdmlzaWJsZSk7CiB9CiAKIC8qKgpAQCAtMzA0MSwxMSArMzA0MSwxMSBA
QCB2b2lkIGV3a192aWV3X3Njcm9sbGJhcnNfdmlzaWJsZV9zZXQoRXZhc19PYmplY3QqIG8sIEVp
bmFfQm9vbCB2aXNpYmxlKQogICoKICAqIEVtaXRzIHNpZ25hbDogInNjcm9sbGJhcnMsdmlzaWJs
ZSxnZXQiIHdpdGggYSBwb2ludGVyIHRvIGEgYm9vbGVhbi4KICAqLwotdm9pZCBld2tfdmlld19z
Y3JvbGxiYXJzX3Zpc2libGVfZ2V0KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wqIHZpc2libGUp
Cit2b2lkIGV3a192aWV3X3Njcm9sbGJhcnNfdmlzaWJsZV9nZXQoRXZhc19PYmplY3QqIGV3a1Zp
ZXcsIEVpbmFfQm9vbCogdmlzaWJsZSkKIHsKLSAgICBEQkcoIiVzLCBvPSVwIiwgX19mdW5jX18s
IG8pOworICAgIERCRygiJXMsIG89JXAiLCBfX2Z1bmNfXywgZXdrVmlldyk7CiAgICAgKnZpc2li
bGUgPSBFSU5BX0ZBTFNFOwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwobywg
InNjcm9sbGJhcnMsdmlzaWJsZSxnZXQiLCB2aXNpYmxlKTsKKyAgICBldmFzX29iamVjdF9zbWFy
dF9jYWxsYmFja19jYWxsKGV3a1ZpZXcsICJzY3JvbGxiYXJzLHZpc2libGUsZ2V0IiwgdmlzaWJs
ZSk7CiB9CiAKIC8qKgpAQCAtMzA1NywxMCArMzA1NywxMCBAQCB2b2lkIGV3a192aWV3X3Njcm9s
bGJhcnNfdmlzaWJsZV9nZXQoRXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCogdmlzaWJsZSkKICAq
CiAgKiBFbWl0cyBzaWduYWw6ICJtZW51YmFyLHZpc2libGUsc2V0IiB3aXRoIGEgcG9pbnRlciB0
byBhIGJvb2xlYW4uCiAgKi8KLXZvaWQgZXdrX3ZpZXdfbWVudWJhcl92aXNpYmxlX3NldChFdmFz
X09iamVjdCogbywgRWluYV9Cb29sIHZpc2libGUpCit2b2lkIGV3a192aWV3X21lbnViYXJfdmlz
aWJsZV9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCB2aXNpYmxlKQogewotICAg
IERCRygibz0lcCAodmlzaWJsZT0lZCkiLCBvLCAhIXZpc2libGUpOwotICAgIGV2YXNfb2JqZWN0
X3NtYXJ0X2NhbGxiYWNrX2NhbGwobywgIm1lbnViYXIsdmlzaWJsZSxzZXQiLCAmdmlzaWJsZSk7
CisgICAgREJHKCJld2tWaWV3PSVwICh2aXNpYmxlPSVkKSIsIGV3a1ZpZXcsICEhdmlzaWJsZSk7
CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChld2tWaWV3LCAibWVudWJhcix2
aXNpYmxlLHNldCIsICZ2aXNpYmxlKTsKIH0KIAogLyoqCkBAIC0zMDc0LDExICszMDc0LDExIEBA
IHZvaWQgZXdrX3ZpZXdfbWVudWJhcl92aXNpYmxlX3NldChFdmFzX09iamVjdCogbywgRWluYV9C
b29sIHZpc2libGUpCiAgKgogICogRW1pdHMgc2lnbmFsOiAibWVudWJhcix2aXNpYmxlLGdldCIg
d2l0aCBhIHBvaW50ZXIgdG8gYSBib29sZWFuLgogICovCi12b2lkIGV3a192aWV3X21lbnViYXJf
dmlzaWJsZV9nZXQoRXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCogdmlzaWJsZSkKK3ZvaWQgZXdr
X3ZpZXdfbWVudWJhcl92aXNpYmxlX2dldChFdmFzX09iamVjdCogZXdrVmlldywgRWluYV9Cb29s
KiB2aXNpYmxlKQogewotICAgIERCRygiJXMsIG89JXAiLCBfX2Z1bmNfXywgbyk7CisgICAgREJH
KCIlcywgbz0lcCIsIF9fZnVuY19fLCBld2tWaWV3KTsKICAgICAqdmlzaWJsZSA9IEVJTkFfRkFM
U0U7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChvLCAibWVudWJhcix2aXNp
YmxlLGdldCIsIHZpc2libGUpOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwo
ZXdrVmlldywgIm1lbnViYXIsdmlzaWJsZSxnZXQiLCB2aXNpYmxlKTsKIH0KIAogLyoqCkBAIC0z
MDkxLDEwICszMDkxLDEwIEBAIHZvaWQgZXdrX3ZpZXdfbWVudWJhcl92aXNpYmxlX2dldChFdmFz
X09iamVjdCogbywgRWluYV9Cb29sKiB2aXNpYmxlKQogICogRW1pdHMgc2lnbmFsOiAidG9vbHRp
cCx0ZXh0LHNldCIgd2l0aCBhIHN0cmluZy4gSWYgdG9vbHRpcCBtdXN0IGJlIGFjdHVhbGx5CiAg
KiByZW1vdmVkLCB0ZXh0IHdpbGwgYmUgMCBvciAnXDAnCiAgKi8KLXZvaWQgZXdrX3ZpZXdfdG9v
bHRpcF90ZXh0X3NldChFdmFzX09iamVjdCogbywgY29uc3QgY2hhciogdGV4dCkKK3ZvaWQgZXdr
X3ZpZXdfdG9vbHRpcF90ZXh0X3NldChFdmFzX09iamVjdCogZXdrVmlldywgY29uc3QgY2hhciog
dGV4dCkKIHsKLSAgICBEQkcoIm89JXAgdGV4dD0lcyIsIG8sIHRleHQpOwotICAgIGV2YXNfb2Jq
ZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwobywgInRvb2x0aXAsdGV4dCxzZXQiLCAodm9pZCopdGV4
dCk7CisgICAgREJHKCJld2tWaWV3PSVwIHRleHQ9JXMiLCBld2tWaWV3LCB0ZXh0KTsKKyAgICBl
dmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKGV3a1ZpZXcsICJ0b29sdGlwLHRleHQsc2V0
IiwgKHZvaWQqKXRleHQpOwogfQogCiAvKioKQEAgLTMxMDYsMTkgKzMxMDYsMTkgQEAgdm9pZCBl
d2tfdmlld190b29sdGlwX3RleHRfc2V0KEV2YXNfT2JqZWN0KiBvLCBjb25zdCBjaGFyKiB0ZXh0
KQogICogQHNvdXJjZUlEIFNvdXJjZSBpZC4KICAqCiAgKi8KLXZvaWQgZXdrX3ZpZXdfYWRkX2Nv
bnNvbGVfbWVzc2FnZShFdmFzX09iamVjdCogbywgY29uc3QgY2hhciogbWVzc2FnZSwgdW5zaWdu
ZWQgaW50IGxpbmVOdW1iZXIsIGNvbnN0IGNoYXIqIHNvdXJjZUlEKQordm9pZCBld2tfdmlld19h
ZGRfY29uc29sZV9tZXNzYWdlKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBjaGFyKiBtZXNz
YWdlLCB1bnNpZ25lZCBpbnQgbGluZU51bWJlciwgY29uc3QgY2hhciogc291cmNlSUQpCiB7Ci0g
ICAgREJHKCJvPSVwIG1lc3NhZ2U9JXMgbGluZU51bWJlcj0ldSBzb3VyY2VJRD0lcyIsIG8sIG1l
c3NhZ2UsIGxpbmVOdW1iZXIsIHNvdXJjZUlEKTsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVU
VVJOKG8sIHNkKTsKKyAgICBEQkcoImV3a1ZpZXc9JXAgbWVzc2FnZT0lcyBsaW5lTnVtYmVyPSV1
IHNvdXJjZUlEPSVzIiwgZXdrVmlldywgbWVzc2FnZSwgbGluZU51bWJlciwgc291cmNlSUQpOwor
ICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QpOwogICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGkpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOKHNkLT5hcGktPmFkZF9jb25zb2xlX21lc3NhZ2UpOwogICAgIHNkLT5hcGktPmFkZF9jb25z
b2xlX21lc3NhZ2Uoc2QsIG1lc3NhZ2UsIGxpbmVOdW1iZXIsIHNvdXJjZUlEKTsKIH0KIAotYm9v
bCBld2tfdmlld19mb2N1c19jYW5fY3ljbGUoRXZhc19PYmplY3QqIG8sIEV3a19Gb2N1c19EaXJl
Y3Rpb24gZGlyZWN0aW9uKQorYm9vbCBld2tfdmlld19mb2N1c19jYW5fY3ljbGUoRXZhc19PYmpl
Y3QqIGV3a1ZpZXcsIEV3a19Gb2N1c19EaXJlY3Rpb24gZGlyZWN0aW9uKQogewotICAgIERCRygi
bz0lcCBkaXJlY3Rpb249JWQiLCBvLCBkaXJlY3Rpb24pOwotICAgIEVXS19WSUVXX1NEX0dFVF9P
Ul9SRVRVUk4obywgc2QsIGZhbHNlKTsKKyAgICBEQkcoImV3a1ZpZXc9JXAgZGlyZWN0aW9uPSVk
IiwgZXdrVmlldywgZGlyZWN0aW9uKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3
a1ZpZXcsIHNkLCBmYWxzZSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNk
LT5hcGksIGZhbHNlKTsKIAogICAgIGlmICghc2QtPmFwaS0+Zm9jdXNfY2FuX2N5Y2xlKQpAQCAt
MzEyNywxMCArMzEyNywxMCBAQCBib29sIGV3a192aWV3X2ZvY3VzX2Nhbl9jeWNsZShFdmFzX09i
amVjdCogbywgRXdrX0ZvY3VzX0RpcmVjdGlvbiBkaXJlY3Rpb24pCiAgICAgcmV0dXJuIHNkLT5h
cGktPmZvY3VzX2Nhbl9jeWNsZShzZCwgZGlyZWN0aW9uKTsKIH0KIAotdm9pZCBld2tfdmlld19y
dW5famF2YXNjcmlwdF9hbGVydChFdmFzX09iamVjdCogbywgRXZhc19PYmplY3QqIGZyYW1lLCBj
b25zdCBjaGFyKiBtZXNzYWdlKQordm9pZCBld2tfdmlld19ydW5famF2YXNjcmlwdF9hbGVydChF
dmFzX09iamVjdCogZXdrVmlldywgRXZhc19PYmplY3QqIGZyYW1lLCBjb25zdCBjaGFyKiBtZXNz
YWdlKQogewotICAgIERCRygibz0lcCBmcmFtZT0lcCBtZXNzYWdlPSVzIiwgbywgZnJhbWUsIG1l
c3NhZ2UpOwotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QpOworICAgIERCRygi
ZXdrVmlldz0lcCBmcmFtZT0lcCBtZXNzYWdlPSVzIiwgZXdrVmlldywgZnJhbWUsIG1lc3NhZ2Up
OworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QpOwogICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGkpOwogCiAgICAgaWYgKCFzZC0+YXBpLT5ydW5f
amF2YXNjcmlwdF9hbGVydCkKQEAgLTMxMzksMTAgKzMxMzksMTAgQEAgdm9pZCBld2tfdmlld19y
dW5famF2YXNjcmlwdF9hbGVydChFdmFzX09iamVjdCogbywgRXZhc19PYmplY3QqIGZyYW1lLCBj
b25zdCBjaGEKICAgICBzZC0+YXBpLT5ydW5famF2YXNjcmlwdF9hbGVydChzZCwgZnJhbWUsIG1l
c3NhZ2UpOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfcnVuX2phdmFzY3JpcHRfY29uZmlybShF
dmFzX09iamVjdCogbywgRXZhc19PYmplY3QqIGZyYW1lLCBjb25zdCBjaGFyKiBtZXNzYWdlKQor
RWluYV9Cb29sIGV3a192aWV3X3J1bl9qYXZhc2NyaXB0X2NvbmZpcm0oRXZhc19PYmplY3QqIGV3
a1ZpZXcsIEV2YXNfT2JqZWN0KiBmcmFtZSwgY29uc3QgY2hhciogbWVzc2FnZSkKIHsKLSAgICBE
QkcoIm89JXAgZnJhbWU9JXAgbWVzc2FnZT0lcyIsIG8sIGZyYW1lLCBtZXNzYWdlKTsKLSAgICBF
V0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBEQkcoImV3
a1ZpZXc9JXAgZnJhbWU9JXAgbWVzc2FnZT0lcyIsIGV3a1ZpZXcsIGZyYW1lLCBtZXNzYWdlKTsK
KyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsK
ICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmFwaSwgRUlOQV9GQUxTRSk7
CiAKICAgICBpZiAoIXNkLT5hcGktPnJ1bl9qYXZhc2NyaXB0X2NvbmZpcm0pCkBAIC0zMTUxLDEw
ICszMTUxLDEwIEBAIEVpbmFfQm9vbCBld2tfdmlld19ydW5famF2YXNjcmlwdF9jb25maXJtKEV2
YXNfT2JqZWN0KiBvLCBFdmFzX09iamVjdCogZnJhbWUsIGNvCiAgICAgcmV0dXJuIHNkLT5hcGkt
PnJ1bl9qYXZhc2NyaXB0X2NvbmZpcm0oc2QsIGZyYW1lLCBtZXNzYWdlKTsKIH0KIAotRWluYV9C
b29sIGV3a192aWV3X3J1bl9qYXZhc2NyaXB0X3Byb21wdChFdmFzX09iamVjdCogbywgRXZhc19P
YmplY3QqIGZyYW1lLCBjb25zdCBjaGFyKiBtZXNzYWdlLCBjb25zdCBjaGFyKiBkZWZhdWx0VmFs
dWUsIGNoYXIqKiB2YWx1ZSkKK0VpbmFfQm9vbCBld2tfdmlld19ydW5famF2YXNjcmlwdF9wcm9t
cHQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV2YXNfT2JqZWN0KiBmcmFtZSwgY29uc3QgY2hhciog
bWVzc2FnZSwgY29uc3QgY2hhciogZGVmYXVsdFZhbHVlLCBjaGFyKiogdmFsdWUpCiB7Ci0gICAg
REJHKCJvPSVwIGZyYW1lPSVwIG1lc3NhZ2U9JXMiLCBvLCBmcmFtZSwgbWVzc2FnZSk7Ci0gICAg
RVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgREJHKCJl
d2tWaWV3PSVwIGZyYW1lPSVwIG1lc3NhZ2U9JXMiLCBld2tWaWV3LCBmcmFtZSwgbWVzc2FnZSk7
CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7
CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5hcGksIEVJTkFfRkFMU0Up
OwogCiAgICAgaWYgKCFzZC0+YXBpLT5ydW5famF2YXNjcmlwdF9wcm9tcHQpCkBAIC0zMTc0LDEw
ICszMTc0LDEwIEBAIEVpbmFfQm9vbCBld2tfdmlld19ydW5famF2YXNjcmlwdF9wcm9tcHQoRXZh
c19PYmplY3QqIG8sIEV2YXNfT2JqZWN0KiBmcmFtZSwgY29uCiAgKgogICogQHJldHVybiBAYyBF
SU5BX1RSVUUgaWYgc2NyaXB0IHNob3VsZCBiZSBzdG9wcGVkOyBAYyBFSU5BX0ZBTFNFIG90aGVy
d2lzZQogICovCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfc2hvdWxkX2ludGVycnVwdF9qYXZhc2NyaXB0
KEV2YXNfT2JqZWN0KiBvKQorRWluYV9Cb29sIGV3a192aWV3X3Nob3VsZF9pbnRlcnJ1cHRfamF2
YXNjcmlwdChFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBEQkcoIm89JXAiLCBvKTsKLSAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBEQkco
ImV3a1ZpZXc9JXAiLCBld2tWaWV3KTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3
a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9W
QUwoc2QtPmFwaSwgRUlOQV9GQUxTRSk7CiAKICAgICBpZiAoIXNkLT5hcGktPnNob3VsZF9pbnRl
cnJ1cHRfamF2YXNjcmlwdCkKQEAgLTMyMDAsMTAgKzMyMDAsMTAgQEAgRWluYV9Cb29sIGV3a192
aWV3X3Nob3VsZF9pbnRlcnJ1cHRfamF2YXNjcmlwdChFdmFzX09iamVjdCogbykKICAqIEBwYXJh
bSBleHBlY3RlZF9zaXplIFRoZSBleHBlY3RlZCBzaXplIG9mIHRoaXMgZGF0YWJhc2UgaW4gb3Jk
ZXIgdG8gZnVsZmlsbAogICogc2l0ZSdzIHJlcXVpcmVtZW50LgogICovCi11aW50NjRfdCBld2tf
dmlld19leGNlZWRlZF9kYXRhYmFzZV9xdW90YShFdmFzX09iamVjdCogbywgRXZhc19PYmplY3Qq
IGZyYW1lLCBjb25zdCBjaGFyKiBkYXRhYmFzZU5hbWUsIHVpbnQ2NF90IGN1cnJlbnRfc2l6ZSwg
dWludDY0X3QgZXhwZWN0ZWRfc2l6ZSkKK3VpbnQ2NF90IGV3a192aWV3X2V4Y2VlZGVkX2RhdGFi
YXNlX3F1b3RhKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFdmFzX09iamVjdCogZnJhbWUsIGNvbnN0
IGNoYXIqIGRhdGFiYXNlTmFtZSwgdWludDY0X3QgY3VycmVudF9zaXplLCB1aW50NjRfdCBleHBl
Y3RlZF9zaXplKQogewotICAgIERCRygibz0lcCIsIG8pOwotICAgIEVXS19WSUVXX1NEX0dFVF9P
Ul9SRVRVUk4obywgc2QsIDApOworICAgIERCRygiZXdrVmlldz0lcCIsIGV3a1ZpZXcpOworICAg
IEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIDApOwogICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+YXBpLCAwKTsKICAgICBpZiAoIXNkLT5hcGktPmV4
Y2VlZGVkX2RhdGFiYXNlX3F1b3RhKQogICAgICAgICByZXR1cm4gMDsKQEAgLTMyMjUsMTAgKzMy
MjUsMTAgQEAgdWludDY0X3QgZXdrX3ZpZXdfZXhjZWVkZWRfZGF0YWJhc2VfcXVvdGEoRXZhc19P
YmplY3QqIG8sIEV2YXNfT2JqZWN0KiBmcmFtZSwgY28KICAqCiAgKiBAcmV0dXJuIEBFSU5BX0ZB
TFNFIGlmIHVzZXIgY2FuY2VsZWQgZmlsZSBzZWxlY3Rpb247IEBFSU5BX1RSVUUgaWYgY29uZmly
bWVkLgogICovCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfcnVuX29wZW5fcGFuZWwoRXZhc19PYmplY3Qq
IG8sIEV2YXNfT2JqZWN0KiBmcmFtZSwgRWluYV9Cb29sIGFsbG93c19tdWx0aXBsZV9maWxlcywg
Y29uc3QgY2hhciogYWNjZXB0X3R5cGVzLCBFaW5hX0xpc3QqKiBzZWxlY3RlZF9maWxlbmFtZXMp
CitFaW5hX0Jvb2wgZXdrX3ZpZXdfcnVuX29wZW5fcGFuZWwoRXZhc19PYmplY3QqIGV3a1ZpZXcs
IEV2YXNfT2JqZWN0KiBmcmFtZSwgRWluYV9Cb29sIGFsbG93c19tdWx0aXBsZV9maWxlcywgY29u
c3QgY2hhciogYWNjZXB0X3R5cGVzLCBFaW5hX0xpc3QqKiBzZWxlY3RlZF9maWxlbmFtZXMpCiB7
Ci0gICAgREJHKCJvPSVwIGZyYW1lPSVwIGFsbG93c19tdWx0aXBsZV9maWxlcz0lZCIsIG8sIGZy
YW1lLCBhbGxvd3NfbXVsdGlwbGVfZmlsZXMpOwotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRV
Uk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIERCRygiZXdrVmlldz0lcCBmcmFtZT0lcCBhbGxv
d3NfbXVsdGlwbGVfZmlsZXM9JWQiLCBld2tWaWV3LCBmcmFtZSwgYWxsb3dzX211bHRpcGxlX2Zp
bGVzKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZB
TFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmFwaSwgRUlOQV9G
QUxTRSk7CiAgICAgRWluYV9Cb29sIGNvbmZpcm07CiAKQEAgLTMyNDMsMTAgKzMyNDMsMTAgQEAg
RWluYV9Cb29sIGV3a192aWV3X3J1bl9vcGVuX3BhbmVsKEV2YXNfT2JqZWN0KiBvLCBFdmFzX09i
amVjdCogZnJhbWUsIEVpbmFfQm9vbAogICAgIHJldHVybiBjb25maXJtOwogfQogCi12b2lkIGV3
a192aWV3X3JlcGFpbnQoRXZhc19PYmplY3QqIG8sIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5
LCBFdmFzX0Nvb3JkIHcsIEV2YXNfQ29vcmQgaCkKK3ZvaWQgZXdrX3ZpZXdfcmVwYWludChFdmFz
X09iamVjdCogZXdrVmlldywgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHksIEV2YXNfQ29vcmQg
dywgRXZhc19Db29yZCBoKQogewotICAgIERCRygibz0lcCwgcmVnaW9uPSVkLCVkICsgJWR4JWQi
LCBvLCB4LCB5LCB3LCBoKTsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkKTsK
KyAgICBEQkcoImV3a1ZpZXc9JXAsIHJlZ2lvbj0lZCwlZCArICVkeCVkIiwgZXdrVmlldywgeCwg
eSwgdywgaCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCk7CiAg
ICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2KTsKIAogICAgIGlmICghcHJp
di0+bWFpbl9mcmFtZS0+Y29udGVudFJlbmRlcmVyKCkpIHsKQEAgLTMyNTgsMjcgKzMyNTgsMjcg
QEAgdm9pZCBld2tfdmlld19yZXBhaW50KEV2YXNfT2JqZWN0KiBvLCBFdmFzX0Nvb3JkIHgsIEV2
YXNfQ29vcmQgeSwgRXZhc19Db29yZCB3LAogICAgIF9ld2tfdmlld19zbWFydF9jaGFuZ2VkKHNk
KTsKIH0KIAotdm9pZCBld2tfdmlld19zY3JvbGwoRXZhc19PYmplY3QqIG8sIEV2YXNfQ29vcmQg
ZHgsIEV2YXNfQ29vcmQgZHksIEV2YXNfQ29vcmQgc3gsIEV2YXNfQ29vcmQgc3ksIEV2YXNfQ29v
cmQgc3csIEV2YXNfQ29vcmQgc2gsIEV2YXNfQ29vcmQgY3gsIEV2YXNfQ29vcmQgY3ksIEV2YXNf
Q29vcmQgY3csIEV2YXNfQ29vcmQgY2gsIEVpbmFfQm9vbCBtYWluX2ZyYW1lKQordm9pZCBld2tf
dmlld19zY3JvbGwoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV2YXNfQ29vcmQgZHgsIEV2YXNfQ29v
cmQgZHksIEV2YXNfQ29vcmQgc2Nyb2xsWCwgRXZhc19Db29yZCBzY3JvbGxZLCBFdmFzX0Nvb3Jk
IHNjcm9sbFdpZHRoLCBFdmFzX0Nvb3JkIHNjcm9sbEhlaWdodCwgRXZhc19Db29yZCBjZW50ZXJY
LCBFdmFzX0Nvb3JkIGNlbnRlclksIEV2YXNfQ29vcmQgY2VudGVyV2lkdGgsIEV2YXNfQ29vcmQg
Y2VudGVySGVpZ2h0LCBFaW5hX0Jvb2wgbWFpbl9mcmFtZSkKIHsKLSAgICBEQkcoIm89JXAsIGRl
bHRhOiAlZCwlZCwgc2Nyb2xsOiAlZCwlZCslZHglZCwgY2xpcDogJWQsJWQrJWR4JWQiLAotICAg
ICAgICBvLCBkeCwgZHksIHN4LCBzeSwgc3csIHNoLCBjeCwgY3ksIGN3LCBjaCk7CisgICAgREJH
KCJld2tWaWV3PSVwLCBkZWx0YTogJWQsJWQsIHNjcm9sbDogJWQsJWQrJWR4JWQsIGNsaXA6ICVk
LCVkKyVkeCVkIiwKKyAgICAgICAgZXdrVmlldywgZHgsIGR5LCBzY3JvbGxYLCBzY3JvbGxZLCBz
Y3JvbGxXaWR0aCwgc2Nyb2xsSGVpZ2h0LCBjZW50ZXJYLCBjZW50ZXJZLCBjZW50ZXJXaWR0aCwg
Y2VudGVySGVpZ2h0KTsKIAotICAgIGlmICgoc3ggIT0gY3gpIHx8IChzeSAhPSBjeSkgfHwgKHN3
ICE9IGN3KSB8fCAoc2ggIT0gY2gpKQorICAgIGlmICgoc2Nyb2xsWCAhPSBjZW50ZXJYKSB8fCAo
c2Nyb2xsWSAhPSBjZW50ZXJZKSB8fCAoc2Nyb2xsV2lkdGggIT0gY2VudGVyV2lkdGgpIHx8IChz
Y3JvbGxIZWlnaHQgIT0gY2VudGVySGVpZ2h0KSkKICAgICAgICAgV1JOKCJzY3JvbGwgcmVnaW9u
IGFuZCBjbGlwIGFyZSBkaWZmZXJlbnQhICVkLCVkKyVkeCVkIGFuZCAlZCwlZCslZHglZCIsCi0g
ICAgICAgICAgICBzeCwgc3ksIHN3LCBzaCwgY3gsIGN5LCBjdywgY2gpOworICAgICAgICAgICAg
c2Nyb2xsWCwgc2Nyb2xsWSwgc2Nyb2xsV2lkdGgsIHNjcm9sbEhlaWdodCwgY2VudGVyWCwgY2Vu
dGVyWSwgY2VudGVyV2lkdGgsIGNlbnRlckhlaWdodCk7CiAKLSAgICBFV0tfVklFV19TRF9HRVRf
T1JfUkVUVVJOKG8sIHNkKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcs
IHNkKTsKICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYpOwogICAgIEVJ
TkFfU0FGRVRZX09OX1RSVUVfUkVUVVJOKCFkeCAmJiAhZHkpOwogCi0gICAgX2V3a192aWV3X3Nj
cm9sbF9hZGQocHJpdiwgZHgsIGR5LCBzeCwgc3ksIHN3LCBzaCwgbWFpbl9mcmFtZSk7CisgICAg
X2V3a192aWV3X3Njcm9sbF9hZGQocHJpdiwgZHgsIGR5LCBzY3JvbGxYLCBzY3JvbGxZLCBzY3Jv
bGxXaWR0aCwgc2Nyb2xsSGVpZ2h0LCBtYWluX2ZyYW1lKTsKIAogICAgIF9ld2tfdmlld19zbWFy
dF9jaGFuZ2VkKHNkKTsKIH0KIAotV2ViQ29yZTo6UGFnZSogZXdrX3ZpZXdfY29yZV9wYWdlX2dl
dChjb25zdCBFdmFzX09iamVjdCogbykKK1dlYkNvcmU6OlBhZ2UqIGV3a192aWV3X2NvcmVfcGFn
ZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihvLCBzZCwgMCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tW
aWV3LCBzZCwgMCk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCAw
KTsKICAgICByZXR1cm4gcHJpdi0+cGFnZTsKIH0KQEAgLTMyODgsMTMgKzMyODgsMTMgQEAgV2Vi
Q29yZTo6UGFnZSogZXdrX3ZpZXdfY29yZV9wYWdlX2dldChjb25zdCBFdmFzX09iamVjdCogbykK
ICAqCiAgKiBFbWl0cyAiZnJhbWUsY3JlYXRlZCIgd2l0aCB0aGUgbmV3IGZyYW1lIG9iamVjdCBv
biBzdWNjZXNzLgogICovCi1XVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6RnJhbWU+IGV3a192aWV3
X2ZyYW1lX2NyZWF0ZShFdmFzX09iamVjdCogbywgRXZhc19PYmplY3QqIGZyYW1lLCBjb25zdCBX
VEY6OlN0cmluZyYgbmFtZSwgV2ViQ29yZTo6SFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lckVs
ZW1lbnQsIGNvbnN0IFdlYkNvcmU6OktVUkwmIHVybCwgY29uc3QgV1RGOjpTdHJpbmcmIHJlZmVy
cmVyKQorV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkZyYW1lPiBld2tfdmlld19mcmFtZV9jcmVh
dGUoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV2YXNfT2JqZWN0KiBmcmFtZSwgY29uc3QgV1RGOjpT
dHJpbmcmIG5hbWUsIFdlYkNvcmU6OkhUTUxGcmFtZU93bmVyRWxlbWVudCogb3duZXJFbGVtZW50
LCBjb25zdCBXZWJDb3JlOjpLVVJMJiB1cmwsIGNvbnN0IFdURjo6U3RyaW5nJiByZWZlcnJlcikK
IHsKLSAgICBEQkcoIm89JXAsIGZyYW1lPSVwLCBuYW1lPSVzLCBvd25lckVsZW1lbnQ9JXAsIHVy
bD0lcywgcmVmZXJyZXI9JXMiLAotICAgICAgICBvLCBmcmFtZSwgbmFtZS51dGY4KCkuZGF0YSgp
LCBvd25lckVsZW1lbnQsCisgICAgREJHKCJld2tWaWV3PSVwLCBmcmFtZT0lcCwgbmFtZT0lcywg
b3duZXJFbGVtZW50PSVwLCB1cmw9JXMsIHJlZmVycmVyPSVzIiwKKyAgICAgICAgZXdrVmlldywg
ZnJhbWUsIG5hbWUudXRmOCgpLmRhdGEoKSwgb3duZXJFbGVtZW50LAogICAgICAgICB1cmwuc3Ry
aW5nKCkudXRmOCgpLmRhdGEoKSwgcmVmZXJyZXIudXRmOCgpLmRhdGEoKSk7CiAKLSAgICBFV0tf
VklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAwKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1Jf
UkVUVVJOKGV3a1ZpZXcsIHNkLCAwKTsKICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4o
c2QsIHByaXYsIDApOwogCiAgICAgV1RGOjpSZWZQdHI8V2ViQ29yZTo6RnJhbWU+IGNmID0gX2V3
a192aWV3X2NvcmVfZnJhbWVfbmV3CkBAIC0zMzE2LDE3ICszMzE2LDE3IEBAIFdURjo6UGFzc1Jl
ZlB0cjxXZWJDb3JlOjpGcmFtZT4gZXdrX3ZpZXdfZnJhbWVfY3JlYXRlKEV2YXNfT2JqZWN0KiBv
LCBFdmFzX09iamVjCiAgICAgc2QtPmNoYW5nZWQuZnJhbWVfcmVjdCA9IEVJTkFfVFJVRTsKICAg
ICBfZXdrX3ZpZXdfc21hcnRfY2hhbmdlZChzZCk7CiAKLSAgICBldmFzX29iamVjdF9zbWFydF9j
YWxsYmFja19jYWxsKG8sICJmcmFtZSxjcmVhdGVkIiwgZnJhbWUpOworICAgIGV2YXNfb2JqZWN0
X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdrVmlldywgImZyYW1lLGNyZWF0ZWQiLCBmcmFtZSk7CiAg
ICAgcmV0dXJuIGNmLnJlbGVhc2UoKTsKIH0KIAotV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6Oldp
ZGdldD4gZXdrX3ZpZXdfcGx1Z2luX2NyZWF0ZShFdmFzX09iamVjdCogbywgRXZhc19PYmplY3Qq
IGZyYW1lLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBwbHVnaW5TaXplLCBXZWJDb3JlOjpIVE1M
UGx1Z0luRWxlbWVudCogZWxlbWVudCwgY29uc3QgV2ViQ29yZTo6S1VSTCYgdXJsLCBjb25zdCBX
VEY6OlZlY3RvcjxXVEY6OlN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFdURjo6VmVjdG9yPFdU
Rjo6U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0IFdURjo6U3RyaW5nJiBtaW1lVHlwZSwgYm9v
bCBsb2FkTWFudWFsbHkpCitXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6V2lkZ2V0PiBld2tfdmll
d19wbHVnaW5fY3JlYXRlKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFdmFzX09iamVjdCogZnJhbWUs
IGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHBsdWdpblNpemUsIFdlYkNvcmU6OkhUTUxQbHVnSW5F
bGVtZW50KiBlbGVtZW50LCBjb25zdCBXZWJDb3JlOjpLVVJMJiB1cmwsIGNvbnN0IFdURjo6VmVj
dG9yPFdURjo6U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgV1RGOjpWZWN0b3I8V1RGOjpTdHJp
bmc+JiBwYXJhbVZhbHVlcywgY29uc3QgV1RGOjpTdHJpbmcmIG1pbWVUeXBlLCBib29sIGxvYWRN
YW51YWxseSkKIHsKLSAgICBEQkcoIm89JXAsIGZyYW1lPSVwLCBzaXplPSVkeCVkLCBlbGVtZW50
PSVwLCB1cmw9JXMsIG1pbWVUeXBlPSVzIiwKLSAgICAgICAgbywgZnJhbWUsIHBsdWdpblNpemUu
d2lkdGgoKSwgcGx1Z2luU2l6ZS5oZWlnaHQoKSwgZWxlbWVudCwKKyAgICBEQkcoImV3a1ZpZXc9
JXAsIGZyYW1lPSVwLCBzaXplPSVkeCVkLCBlbGVtZW50PSVwLCB1cmw9JXMsIG1pbWVUeXBlPSVz
IiwKKyAgICAgICAgZXdrVmlldywgZnJhbWUsIHBsdWdpblNpemUud2lkdGgoKSwgcGx1Z2luU2l6
ZS5oZWlnaHQoKSwgZWxlbWVudCwKICAgICAgICAgdXJsLnN0cmluZygpLnV0ZjgoKS5kYXRhKCks
IG1pbWVUeXBlLnV0ZjgoKS5kYXRhKCkpOwogCi0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
TihvLCBzZCwgMCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwg
MCk7CiAgICAgc2QtPmNoYW5nZWQuZnJhbWVfcmVjdCA9IEVJTkFfVFJVRTsKICAgICBfZXdrX3Zp
ZXdfc21hcnRfY2hhbmdlZChzZCk7CiAKQEAgLTMzNDYsMTQgKzMzNDYsMTQgQEAgV1RGOjpQYXNz
UmVmUHRyPFdlYkNvcmU6OldpZGdldD4gZXdrX3ZpZXdfcGx1Z2luX2NyZWF0ZShFdmFzX09iamVj
dCogbywgRXZhc19PYmoKICAqCiAgKiBFbWl0czogInBvcHVwLGNyZWF0ZSIgd2l0aCBhIGxpc3Qg
b2YgRXdrX01lbnUgY29udGFpbmluZyBlYWNoIGl0ZW0ncyBkYXRhCiAgKi8KLXZvaWQgZXdrX3Zp
ZXdfcG9wdXBfbmV3KEV2YXNfT2JqZWN0KiBvLCBXZWJDb3JlOjpQb3B1cE1lbnVDbGllbnQqIGNs
aWVudCwgaW50IHNlbGVjdGVkLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KQordm9pZCBl
d2tfdmlld19wb3B1cF9uZXcoRXZhc19PYmplY3QqIGV3a1ZpZXcsIFdlYkNvcmU6OlBvcHVwTWVu
dUNsaWVudCogY2xpZW50LCBpbnQgc2VsZWN0ZWQsIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJl
Y3QpCiB7Ci0gICAgSU5GKCJvPSVwIiwgbyk7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
TihvLCBzZCk7CisgICAgSU5GKCJld2tWaWV3PSVwIiwgZXdrVmlldyk7CisgICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1Jf
UkVUVVJOKHNkLCBwcml2KTsKIAogICAgIGlmIChwcml2LT5wb3B1cC5tZW51X2NsaWVudCkKLSAg
ICAgICAgZXdrX3ZpZXdfcG9wdXBfZGVzdHJveShvKTsKKyAgICAgICAgZXdrX3ZpZXdfcG9wdXBf
ZGVzdHJveShld2tWaWV3KTsKIAogICAgIHByaXYtPnBvcHVwLm1lbnVfY2xpZW50ID0gY2xpZW50
OwogCkBAIC0zMzc2LDE5ICszMzc2LDE5IEBAIHZvaWQgZXdrX3ZpZXdfcG9wdXBfbmV3KEV2YXNf
T2JqZWN0KiBvLCBXZWJDb3JlOjpQb3B1cE1lbnVDbGllbnQqIGNsaWVudCwgaW50IHNlCiAgICAg
cHJpdi0+cG9wdXAubWVudS55ID0gcmVjdC55KCk7CiAgICAgcHJpdi0+cG9wdXAubWVudS53aWR0
aCA9IHJlY3Qud2lkdGgoKTsKICAgICBwcml2LT5wb3B1cC5tZW51LmhlaWdodCA9IHJlY3QuaGVp
Z2h0KCk7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChvLCAicG9wdXAsY3Jl
YXRlIiwgJnByaXYtPnBvcHVwLm1lbnUpOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNr
X2NhbGwoZXdrVmlldywgInBvcHVwLGNyZWF0ZSIsICZwcml2LT5wb3B1cC5tZW51KTsKIH0KIAot
RWluYV9Cb29sIGV3a192aWV3X3BvcHVwX2Rlc3Ryb3koRXZhc19PYmplY3QqIG8pCitFaW5hX0Jv
b2wgZXdrX3ZpZXdfcG9wdXBfZGVzdHJveShFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBJ
TkYoIm89JXAiLCBvKTsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5B
X0ZBTFNFKTsKKyAgICBJTkYoImV3a1ZpZXc9JXAiLCBld2tWaWV3KTsKKyAgICBFV0tfVklFV19T
RF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFV0tfVklFV19Q
UklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwogCiAgICAgaWYgKCFwcml2
LT5wb3B1cC5tZW51X2NsaWVudCkKICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CiAKLSAgICBl
dmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKG8sICJwb3B1cCx3aWxsZGVsZXRlIiwgJnBy
aXYtPnBvcHVwLm1lbnUpOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdr
VmlldywgInBvcHVwLHdpbGxkZWxldGUiLCAmcHJpdi0+cG9wdXAubWVudSk7CiAKICAgICB2b2lk
KiBpdGVtdjsKICAgICBFSU5BX0xJU1RfRlJFRShwcml2LT5wb3B1cC5tZW51Lml0ZW1zLCBpdGVt
dikgewpAQCAtMzQwMiwxMCArMzQwMiwxMCBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfcG9wdXBfZGVz
dHJveShFdmFzX09iamVjdCogbykKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi12b2lkIGV3
a192aWV3X3BvcHVwX3NlbGVjdGVkX3NldChFdmFzX09iamVjdCogbywgaW50IGluZGV4KQordm9p
ZCBld2tfdmlld19wb3B1cF9zZWxlY3RlZF9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGludCBp
bmRleCkKIHsKLSAgICBJTkYoIm89JXAiLCBvKTsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVU
VVJOKG8sIHNkKTsKKyAgICBJTkYoImV3a1ZpZXc9JXAiLCBld2tWaWV3KTsKKyAgICBFV0tfVklF
V19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkKTsKICAgICBFV0tfVklFV19QUklWX0dFVF9P
Ul9SRVRVUk4oc2QsIHByaXYpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHByaXYt
PnBvcHVwLm1lbnVfY2xpZW50KTsKIApAQCAtMzQyMiwxMCArMzQyMiwxMCBAQCB2b2lkIGV3a192
aWV3X3BvcHVwX3NlbGVjdGVkX3NldChFdmFzX09iamVjdCogbywgaW50IGluZGV4KQogICogRW1p
dHM6ICJkb3dubG9hZCxyZXF1ZXN0IiB3aXRoIGFuIEV3a19Eb3dubG9hZCBjb250YWluaW5nIHRo
ZSBkZXRhaWxzIG9mIHRoZQogICogcmVxdWVzdGVkIGRvd25sb2FkLiBUaGUgZG93bmxvYWQgcGVy
IHNlIG11c3QgYmUgaGFuZGxlZCBvdXRzaWRlIG9mIHdlYmtpdC4KICAqLwotdm9pZCBld2tfdmll
d19kb3dubG9hZF9yZXF1ZXN0KEV2YXNfT2JqZWN0KiBvLCBFd2tfRG93bmxvYWQqIGRvd25sb2Fk
KQordm9pZCBld2tfdmlld19kb3dubG9hZF9yZXF1ZXN0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBF
d2tfRG93bmxvYWQqIGRvd25sb2FkKQogewotICAgIERCRygidmlldz0lcCIsIG8pOwotICAgIGV2
YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwobywgImRvd25sb2FkLHJlcXVlc3QiLCBkb3du
bG9hZCk7CisgICAgREJHKCJld2tWaWV3PSVwIiwgZXdrVmlldyk7CisgICAgZXZhc19vYmplY3Rf
c21hcnRfY2FsbGJhY2tfY2FsbChld2tWaWV3LCAiZG93bmxvYWQscmVxdWVzdCIsIGRvd25sb2Fk
KTsKIH0KIAogLyoqCkBAIC0zNDM1LDkgKzM0MzUsOSBAQCB2b2lkIGV3a192aWV3X2Rvd25sb2Fk
X3JlcXVlc3QoRXZhc19PYmplY3QqIG8sIEV3a19Eb3dubG9hZCogZG93bmxvYWQpCiAgKiBAcGFy
YW0gbyB2aWV3LgogICogQHBhcmFtIGZyYW1lIHRoZSBmcmFtZS4KICAqLwotdm9pZCBld2tfdmll
d19qc193aW5kb3dfb2JqZWN0X2NsZWFyKEV2YXNfT2JqZWN0KiBvLCBFdmFzX09iamVjdCogZnJh
bWUpCit2b2lkIGV3a192aWV3X2pzX3dpbmRvd19vYmplY3RfY2xlYXIoRXZhc19PYmplY3QqIGV3
a1ZpZXcsIEV2YXNfT2JqZWN0KiBmcmFtZSkKIHsKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxs
YmFja19jYWxsKG8sICJqcyx3aW5kb3dvYmplY3QsY2xlYXIiLCBmcmFtZSk7CisgICAgZXZhc19v
YmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChld2tWaWV3LCAianMsd2luZG93b2JqZWN0LGNsZWFy
IiwgZnJhbWUpOwogfQogCiAvKioKQEAgLTM0NDgsMTggKzM0NDgsMTggQEAgdm9pZCBld2tfdmll
d19qc193aW5kb3dfb2JqZWN0X2NsZWFyKEV2YXNfT2JqZWN0KiBvLCBFdmFzX09iamVjdCogZnJh
bWUpCiAgKgogICogRW1pdHMgc2lnbmFsOiAidmlld3BvcnQsY2hhbmdlZCIgd2l0aCBubyBwYXJh
bWV0ZXJzLgogICovCi12b2lkIGV3a192aWV3X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfc2V0KEV2YXNf
T2JqZWN0KiBvLCBjb25zdCBXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50cyYgYXJndW1lbnRzKQor
dm9pZCBld2tfdmlld192aWV3cG9ydF9hdHRyaWJ1dGVzX3NldChFdmFzX09iamVjdCogZXdrVmll
dywgY29uc3QgV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHMmIGFyZ3VtZW50cykKIHsKLSAgICBF
V0tfVklFV19TRF9HRVQobywgc2QpOworICAgIEVXS19WSUVXX1NEX0dFVChld2tWaWV3LCBzZCk7
CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVQoc2QsIHByaXYpOwogCiAgICAgcHJpdi0+dmlld3BvcnRf
YXJndW1lbnRzID0gYXJndW1lbnRzOwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2Nh
bGwobywgInZpZXdwb3J0LGNoYW5nZWQiLCAwKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxs
YmFja19jYWxsKGV3a1ZpZXcsICJ2aWV3cG9ydCxjaGFuZ2VkIiwgMCk7CiB9CiAKLXZvaWQgZXdr
X3ZpZXdfdmlld3BvcnRfYXR0cmlidXRlc19nZXQoY29uc3QgRXZhc19PYmplY3QqIG8sIGZsb2F0
KiB3LCBmbG9hdCogaCwgZmxvYXQqIGluaXRfc2NhbGUsIGZsb2F0KiBtYXhfc2NhbGUsIGZsb2F0
KiBtaW5fc2NhbGUsIGZsb2F0KiBkZXZpY2VfcGl4ZWxfcmF0aW8sIEVpbmFfQm9vbCogdXNlcl9z
Y2FsYWJsZSkKK3ZvaWQgZXdrX3ZpZXdfdmlld3BvcnRfYXR0cmlidXRlc19nZXQoY29uc3QgRXZh
c19PYmplY3QqIGV3a1ZpZXcsIGZsb2F0KiB3LCBmbG9hdCogaCwgZmxvYXQqIGluaXRfc2NhbGUs
IGZsb2F0KiBtYXhfc2NhbGUsIGZsb2F0KiBtaW5fc2NhbGUsIGZsb2F0KiBkZXZpY2VfcGl4ZWxf
cmF0aW8sIEVpbmFfQm9vbCogdXNlcl9zY2FsYWJsZSkKIHsKLSAgICBXZWJDb3JlOjpWaWV3cG9y
dEF0dHJpYnV0ZXMgYXR0cmlidXRlcyA9IF9ld2tfdmlld192aWV3cG9ydF9hdHRyaWJ1dGVzX2Nv
bXB1dGUobyk7CisgICAgV2ViQ29yZTo6Vmlld3BvcnRBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMgPSBf
ZXdrX3ZpZXdfdmlld3BvcnRfYXR0cmlidXRlc19jb21wdXRlKGV3a1ZpZXcpOwogCiAgICAgaWYg
KHcpCiAgICAgICAgICp3ID0gYXR0cmlidXRlcy5sYXlvdXRTaXplLndpZHRoKCk7CkBAIC0zNDc3
LDkgKzM0NzcsOSBAQCB2b2lkIGV3a192aWV3X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfZ2V0KGNvbnN0
IEV2YXNfT2JqZWN0KiBvLCBmbG9hdCogdywgZmxvYXQqIGgsCiAgICAgICAgICp1c2VyX3NjYWxh
YmxlID0gc3RhdGljX2Nhc3Q8Ym9vbD4oYXR0cmlidXRlcy51c2VyU2NhbGFibGUpOwogfQogCi1F
aW5hX0Jvb2wgZXdrX3ZpZXdfem9vbV9yYW5nZV9zZXQoRXZhc19PYmplY3QqIG8sIGZsb2F0IG1p
bl9zY2FsZSwgZmxvYXQgbWF4X3NjYWxlKQorRWluYV9Cb29sIGV3a192aWV3X3pvb21fcmFuZ2Vf
c2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBmbG9hdCBtaW5fc2NhbGUsIGZsb2F0IG1heF9zY2Fs
ZSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsK
KyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsK
ICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwog
CiAgICAgaWYgKG1heF9zY2FsZSA8IG1pbl9zY2FsZSkgewpAQCAtMzQ5MywyNSArMzQ5MywyNSBA
QCBFaW5hX0Jvb2wgZXdrX3ZpZXdfem9vbV9yYW5nZV9zZXQoRXZhc19PYmplY3QqIG8sIGZsb2F0
IG1pbl9zY2FsZSwgZmxvYXQgbWF4X3NjYQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLWZs
b2F0IGV3a192aWV3X3pvb21fcmFuZ2VfbWluX2dldChjb25zdCBFdmFzX09iamVjdCogbykKK2Zs
b2F0IGV3a192aWV3X3pvb21fcmFuZ2VfbWluX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmll
dykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAtMS4wKTsKKyAgICBF
V0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAtMS4wKTsKICAgICBFV0tfVklF
V19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIC0xLjApOwogCiAgICAgcmV0dXJuIHByaXYt
PnNldHRpbmdzLnpvb21fcmFuZ2UubWluX3NjYWxlOwogfQogCi1mbG9hdCBld2tfdmlld196b29t
X3JhbmdlX21heF9nZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCitmbG9hdCBld2tfdmlld196b29t
X3JhbmdlX21heF9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJ
RVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgLTEuMCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihld2tWaWV3LCBzZCwgLTEuMCk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVU
VVJOKHNkLCBwcml2LCAtMS4wKTsKIAogICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy56b29tX3Jh
bmdlLm1heF9zY2FsZTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3VzZXJfc2NhbGFibGVfc2V0
KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wgdXNlcl9zY2FsYWJsZSkKK0VpbmFfQm9vbCBld2tf
dmlld191c2VyX3NjYWxhYmxlX3NldChFdmFzX09iamVjdCogZXdrVmlldywgRWluYV9Cb29sIHVz
ZXJfc2NhbGFibGUpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlO
QV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlO
QV9GQUxTRSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5B
X0ZBTFNFKTsKIAogICAgIHByaXYtPnNldHRpbmdzLnpvb21fcmFuZ2UudXNlcl9zY2FsYWJsZSA9
IHVzZXJfc2NhbGFibGU7CkBAIC0zNTE5LDI5ICszNTE5LDI5IEBAIEVpbmFfQm9vbCBld2tfdmll
d191c2VyX3NjYWxhYmxlX3NldChFdmFzX09iamVjdCogbywgRWluYV9Cb29sIHVzZXJfc2NhbGFi
bGUpCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3VzZXJf
c2NhbGFibGVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQorRWluYV9Cb29sIGV3a192aWV3X3Vz
ZXJfc2NhbGFibGVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19W
SUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NE
X0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVXS19WSUVXX1BS
SVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CiAKICAgICByZXR1cm4gcHJp
di0+c2V0dGluZ3Muem9vbV9yYW5nZS51c2VyX3NjYWxhYmxlOwogfQogCi1mbG9hdCBld2tfdmll
d19kZXZpY2VfcGl4ZWxfcmF0aW9fZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQorZmxvYXQgZXdr
X3ZpZXdfZGV2aWNlX3BpeGVsX3JhdGlvX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykK
IHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAtMS4wKTsKKyAgICBFV0tf
VklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAtMS4wKTsKICAgICBFV0tfVklFV19Q
UklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIC0xLjApOwogCiAgICAgcmV0dXJuIHByaXYtPnNl
dHRpbmdzLmRldmljZV9waXhlbF9yYXRpbzsKIH0KIAotdm9pZCBld2tfdmlld19kaWRfZmlyc3Rf
dmlzdWFsbHlfbm9uZW1wdHlfbGF5b3V0KEV2YXNfT2JqZWN0KiBvKQordm9pZCBld2tfdmlld19k
aWRfZmlyc3RfdmlzdWFsbHlfbm9uZW1wdHlfbGF5b3V0KEV2YXNfT2JqZWN0KiBld2tWaWV3KQog
ewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QpOworICAgIEVXS19WSUVXX1NE
X0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JF
VFVSTihzZCwgcHJpdik7CiAgICAgaWYgKCFwcml2LT5mbGFncy52aWV3X2NsZWFyZWQpIHsKLSAg
ICAgICAgZXdrX3ZpZXdfZnJhbWVfbWFpbl9jbGVhcmVkKG8pOwotICAgICAgICBld2tfdmlld19l
bmFibGVfcmVuZGVyKG8pOworICAgICAgICBld2tfdmlld19mcmFtZV9tYWluX2NsZWFyZWQoZXdr
Vmlldyk7CisgICAgICAgIGV3a192aWV3X2VuYWJsZV9yZW5kZXIoZXdrVmlldyk7CiAgICAgICAg
IHByaXYtPmZsYWdzLnZpZXdfY2xlYXJlZCA9IEVJTkFfVFJVRTsKICAgICB9CiB9CkBAIC0zNTUy
LDIxICszNTUyLDIxIEBAIHZvaWQgZXdrX3ZpZXdfZGlkX2ZpcnN0X3Zpc3VhbGx5X25vbmVtcHR5
X2xheW91dChFdmFzX09iamVjdCogbykKICAqCiAgKiBAcGFyYW0gbyB2aWV3LgogICovCi12b2lk
IGV3a192aWV3X2Rpc3BhdGNoX2RpZF9maW5pc2hfbG9hZGluZyhFdmFzX09iamVjdCogbykKK3Zv
aWQgZXdrX3ZpZXdfZGlzcGF0Y2hfZGlkX2ZpbmlzaF9sb2FkaW5nKEV2YXNfT2JqZWN0KiBld2tW
aWV3KQogewogICAgIC8qIElmIHdlIHJlYWNoIHRoaXMgcG9pbnQgYW5kIHJlbmRlcmluZyBpcyBz
dGlsbCBkaXNhYmxlZCwgV2ViQ29yZSB3aWxsIG5vdAogICAgICAqIHRyaWdnZXIgdGhlIGRpZEZp
cnN0VmlzdWFsbHlOb25FbXB0eUxheW91dCBzaWduYWwgYW55bW9yZS4gU28sIHdlCiAgICAgICog
Zm9yY2VmdWxseSByZS1lbmFibGUgdGhlIHJlbmRlcmluZy4KICAgICAgKi8KLSAgICBld2tfdmll
d19kaWRfZmlyc3RfdmlzdWFsbHlfbm9uZW1wdHlfbGF5b3V0KG8pOworICAgIGV3a192aWV3X2Rp
ZF9maXJzdF92aXN1YWxseV9ub25lbXB0eV9sYXlvdXQoZXdrVmlldyk7CiB9CiAKLXZvaWQgZXdr
X3ZpZXdfdHJhbnNpdGlvbl90b19jb21taXRlZF9mb3JfbmV3cGFnZShFdmFzX09iamVjdCogbykK
K3ZvaWQgZXdrX3ZpZXdfdHJhbnNpdGlvbl90b19jb21taXRlZF9mb3JfbmV3cGFnZShFdmFzX09i
amVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkKTsK
KyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkKTsKICAgICBFV0tfVklF
V19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYpOwogCi0gICAgZXdrX3ZpZXdfZGlzYWJsZV9y
ZW5kZXIobyk7CisgICAgZXdrX3ZpZXdfZGlzYWJsZV9yZW5kZXIoZXdrVmlldyk7CiAgICAgcHJp
di0+ZmxhZ3Mudmlld19jbGVhcmVkID0gRUlOQV9GQUxTRTsKIH0KIApAQCAtMzU4MCw5ICszNTgw
LDkgQEAgdm9pZCBld2tfdmlld190cmFuc2l0aW9uX3RvX2NvbW1pdGVkX2Zvcl9uZXdwYWdlKEV2
YXNfT2JqZWN0KiBvKQogICogQHBhcmFtIG8gVmlldyB0byBsb2FkCiAgKiBAcGFyYW0gcmVxdWVz
dCBSZXF1ZXN0IHdoaWNoIGNvbnRhaW4gdXJsIHRvIG5hdmlnYXRlCiAgKi8KLUVpbmFfQm9vbCBl
d2tfdmlld19uYXZpZ2F0aW9uX3BvbGljeV9kZWNpc2lvbihFdmFzX09iamVjdCogbywgRXdrX0Zy
YW1lX1Jlc291cmNlX1JlcXVlc3QqIHJlcXVlc3QpCitFaW5hX0Jvb2wgZXdrX3ZpZXdfbmF2aWdh
dGlvbl9wb2xpY3lfZGVjaXNpb24oRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV3a19GcmFtZV9SZXNv
dXJjZV9SZXF1ZXN0KiByZXF1ZXN0KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
bywgc2QsIEVJTkFfVFJVRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3
LCBzZCwgRUlOQV9UUlVFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2Qt
PmFwaSwgRUlOQV9UUlVFKTsKIAogICAgIGlmICghc2QtPmFwaS0+bmF2aWdhdGlvbl9wb2xpY3lf
ZGVjaXNpb24pCkBAIC0zNTkxLDEzICszNTkxLDEzIEBAIEVpbmFfQm9vbCBld2tfdmlld19uYXZp
Z2F0aW9uX3BvbGljeV9kZWNpc2lvbihFdmFzX09iamVjdCogbywgRXdrX0ZyYW1lX1Jlc291cmNl
CiAgICAgcmV0dXJuIHNkLT5hcGktPm5hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9uKHNkLCByZXF1
ZXN0KTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X2pzX29iamVjdF9hZGQoRXZhc19PYmplY3Qq
IG8sIEV3a19KU19PYmplY3QqIG9iaiwgY29uc3QgY2hhciogb2JqX25hbWUpCitFaW5hX0Jvb2wg
ZXdrX3ZpZXdfanNfb2JqZWN0X2FkZChFdmFzX09iamVjdCogZXdrVmlldywgRXdrX0pTX09iamVj
dCogb2JqZWN0LCBjb25zdCBjaGFyKiBvYmplY3RfbmFtZSkKIHsKICNpZiBFTkFCTEUoTkVUU0NB
UEVfUExVR0lOX0FQSSkKLSAgICBpZiAob2JqLT52aWV3KSAvLyBvYmplY3QgaGFzIGFscmVhZHkg
YmVlbiBhZGRlZCB0byBhbm90aGVyIGV3a192aWV3CisgICAgaWYgKG9iamVjdC0+dmlldykgLy8g
b2JqZWN0IGhhcyBhbHJlYWR5IGJlZW4gYWRkZWQgdG8gYW5vdGhlciBld2tfdmlldwogICAgICAg
ICByZXR1cm4gRUlOQV9GQUxTRTsKLSAgICBvYmotPm5hbWUgPSBlaW5hX3N0cmluZ3NoYXJlX2Fk
ZChvYmpfbmFtZSk7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9G
QUxTRSk7CisgICAgb2JqZWN0LT5uYW1lID0gZWluYV9zdHJpbmdzaGFyZV9hZGQob2JqZWN0X25h
bWUpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFM
U0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxT
RSk7CiAKICAgICBKU0M6OkpTTG9jayBsb2NrKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsK
QEAgLTM2MTIsNyArMzYxMiw3IEBAIEVpbmFfQm9vbCBld2tfdmlld19qc19vYmplY3RfYWRkKEV2
YXNfT2JqZWN0KiBvLCBFd2tfSlNfT2JqZWN0KiBvYmosIGNvbnN0IGNoYXIqCiAKICAgICBKU0M6
OkV4ZWNTdGF0ZSogZXhlYyA9IHdpbmRvdy0+Z2xvYmFsRXhlYygpOwogCi0gICAgb2JqLT52aWV3
ID0gbzsKKyAgICBvYmotPnZpZXcgPSBld2tWaWV3OwogICAgIEpTQzo6SlNPYmplY3QqIHJ1bnRp
bWVPYmplY3QgPSAoSlNDOjpKU09iamVjdCopSlNDOjpCaW5kaW5nczo6Q0luc3RhbmNlOjpjcmVh
dGUoKE5QT2JqZWN0KilvYmosIHJvb3QpLT5jcmVhdGVSdW50aW1lT2JqZWN0KGV4ZWMpOwogICAg
IEpTQzo6SWRlbnRpZmllciBpZCA9IEpTQzo6SWRlbnRpZmllcihleGVjLCBvYmpfbmFtZSk7CiAK
QEAgLTM2MjQsOSArMzYyNCw5IEBAIEVpbmFfQm9vbCBld2tfdmlld19qc19vYmplY3RfYWRkKEV2
YXNfT2JqZWN0KiBvLCBFd2tfSlNfT2JqZWN0KiBvYmosIGNvbnN0IGNoYXIqCiAjZW5kaWYgLy8g
RU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld19wcm90
b2NvbF9oYW5kbGVyX3NldChFdmFzX09iamVjdCogbywgY29uc3QgY2hhcioqIHByb3RvY29scywg
RXdrX1ZpZXdfUmVzb3VyY2VfSGFuZGxlcl9DYiBoYW5kbGVyLCB2b2lkKiBjb250ZXh0KQorRWlu
YV9Cb29sIGV3a192aWV3X3Byb3RvY29sX2hhbmRsZXJfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3
LCBjb25zdCBjaGFyKiogcHJvdG9jb2xzLCBFd2tfVmlld19SZXNvdXJjZV9IYW5kbGVyX0NiIGhh
bmRsZXIsIHZvaWQqIGNvbnRleHQpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUKG8sIHNkKTsKKyAg
ICBFV0tfVklFV19TRF9HRVQoZXdrVmlldywgc2QpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUKHNk
LCBwcml2KTsKIAogICAgIGlmICghaGFuZGxlcikKQEAgLTM2MzgsOSArMzYzOCw5IEBAIEVpbmFf
Qm9vbCBld2tfdmlld19wcm90b2NvbF9oYW5kbGVyX3NldChFdmFzX09iamVjdCogbywgY29uc3Qg
Y2hhcioqIHByb3RvY29scywKICAgICByZXR1cm4gZXdrX2N1c3RvbV9wcm90b2NvbF9oYW5kbGVy
X3NldChwcm90b2NvbHMpOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfcHJvdG9jb2xfaGFuZGxl
cl91bnNldChFdmFzX09iamVjdCogbykKK0VpbmFfQm9vbCBld2tfdmlld19wcm90b2NvbF9oYW5k
bGVyX3Vuc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVChv
LCBzZCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUKGV3a1ZpZXcsIHNkKTsKICAgICBFV0tfVklFV19Q
UklWX0dFVChzZCwgcHJpdik7CiAgICAgRWluYV9Cb29sIHJldCA9IGV3a19jdXN0b21fcHJvdG9j
b2xfaGFuZGxlcl9hbGxfdW5zZXQoKTsKIApAQCAtMzY1Miw5ICszNjUyLDkgQEAgRWluYV9Cb29s
IGV3a192aWV3X3Byb3RvY29sX2hhbmRsZXJfdW5zZXQoRXZhc19PYmplY3QqIG8pCiAgICAgcmV0
dXJuIHJldDsKIH0KIAotdm9pZCogZXdrX3ZpZXdfcHJvdG9jb2xfaGFuZGxlcl9yZXNvdXJjZV9n
ZXQoRXZhc19PYmplY3QqIG8sIHNpemVfdCogYnl0ZXNSZWFkLCBjaGFyKiogbWltZSwgY29uc3Qg
Y2hhciogZmlsZSkKK3ZvaWQqIGV3a192aWV3X3Byb3RvY29sX2hhbmRsZXJfcmVzb3VyY2VfZ2V0
KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBzaXplX3QqIGJ5dGVzUmVhZCwgY2hhcioqIG1pbWUsIGNv
bnN0IGNoYXIqIGZpbGUpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUKG8sIHNkKTsKKyAgICBFV0tf
VklFV19TRF9HRVQoZXdrVmlldywgc2QpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUKHNkLCBwcml2
KTsKIAogICAgIEV3a19WaWV3X1Jlc291cmNlX0hhbmRsZXJfQ2IgZnVuY3Rpb24gPSBwcml2LT5j
dXN0b21fcmVzb3VyY2VfaGFuZGxlci5mdW5jdGlvbjsKQEAgLTM2NzMsMTQgKzM2NzMsMTQgQEAg
dm9pZCogZXdrX3ZpZXdfcHJvdG9jb2xfaGFuZGxlcl9yZXNvdXJjZV9nZXQoRXZhc19PYmplY3Qq
IG8sIHNpemVfdCogYnl0ZXNSZWFkLAogICogQHBhcmFtIHcgbmV3IGNvbnRlbnQgd2lkdGguCiAg
KiBAcGFyYW0gaCBuZXcgY29udGVudCBoZWlnaHQuCiAgKi8KLXZvaWQgZXdrX3ZpZXdfY29udGVu
dHNfc2l6ZV9jaGFuZ2VkKEV2YXNfT2JqZWN0KiBvLCBpbnQgdywgaW50IGgpCit2b2lkIGV3a192
aWV3X2NvbnRlbnRzX3NpemVfY2hhbmdlZChFdmFzX09iamVjdCogZXdrVmlldywgaW50IHdpZHRo
LCBpbnQgaGVpZ2h0KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QpOwor
ICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QpOwogICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGkpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOKHNkLT5hcGktPmNvbnRlbnRzX3Jlc2l6ZSk7CiAKLSAgICBpZiAoIXNkLT5hcGktPmNvbnRl
bnRzX3Jlc2l6ZShzZCwgdywgaCkpCi0gICAgICAgIEVSUigiZmFpbGVkIHRvIHJlc2l6ZSBjb250
ZW50cyB0byAlZHglZCIsIHcsIGgpOworICAgIGlmICghc2QtPmFwaS0+Y29udGVudHNfcmVzaXpl
KHNkLCB3aWR0aCwgaGVpZ2h0KSkKKyAgICAgICAgRVJSKCJmYWlsZWQgdG8gcmVzaXplIGNvbnRl
bnRzIHRvICVkeCVkIiwgd2lkdGgsIGhlaWdodCk7CiB9CiAKIC8qKgpAQCAtMzY5MSw5ICszNjkx
LDkgQEAgdm9pZCBld2tfdmlld19jb250ZW50c19zaXplX2NoYW5nZWQoRXZhc19PYmplY3QqIG8s
IGludCB3LCBpbnQgaCkKICAqCiAgKiBAcmV0dXJuIHBhZ2Ugc2l6ZS4KICAqLwotV2ViQ29yZTo6
RmxvYXRSZWN0IGV3a192aWV3X3BhZ2VfcmVjdF9nZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCitX
ZWJDb3JlOjpGbG9hdFJlY3QgZXdrX3ZpZXdfcGFnZV9yZWN0X2dldChjb25zdCBFdmFzX09iamVj
dCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVQobywgc2QpOworICAgIEVXS19WSUVX
X1NEX0dFVChld2tWaWV3LCBzZCk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVQoc2QsIHByaXYpOwog
CiAgICAgV2ViQ29yZTo6RnJhbWUqIG1haW5fZnJhbWUgPSBwcml2LT5wYWdlLT5tYWluRnJhbWUo
KTsKQEAgLTM3MDEsMjUgKzM3MDEsMjUgQEAgV2ViQ29yZTo6RmxvYXRSZWN0IGV3a192aWV3X3Bh
Z2VfcmVjdF9nZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCiB9CiAKICNpZiBFTkFCTEUoVE9VQ0hf
RVZFTlRTKQotdm9pZCBld2tfdmlld19uZWVkX3RvdWNoX2V2ZW50c19zZXQoRXZhc19PYmplY3Qq
IG8sIGJvb2wgbmVlZGVkKQordm9pZCBld2tfdmlld19uZWVkX3RvdWNoX2V2ZW50c19zZXQoRXZh
c19PYmplY3QqIGV3a1ZpZXcsIGJvb2wgbmVlZGVkKQogewotICAgIEVXS19WSUVXX1NEX0dFVChv
LCBzZCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUKGV3a1ZpZXcsIHNkKTsKICAgICBFV0tfVklFV19Q
UklWX0dFVChzZCwgcHJpdik7CiAKICAgICBwcml2LT5mbGFncy5uZWVkX3RvdWNoX2V2ZW50cyA9
IG5lZWRlZDsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X25lZWRfdG91Y2hfZXZlbnRzX2dldChj
b25zdCBFdmFzX09iamVjdCogbykKK0VpbmFfQm9vbCBld2tfdmlld19uZWVkX3RvdWNoX2V2ZW50
c19nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JF
VFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1Jf
UkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICByZXR1cm4gcHJpdi0+ZmxhZ3MubmVl
ZF90b3VjaF9ldmVudHM7CiB9CiAjZW5kaWYKIAotRWluYV9Cb29sIGV3a192aWV3X21vZGVfc2V0
KEV2YXNfT2JqZWN0KiBvLCBFd2tfVmlld19Nb2RlIHZpZXdfbW9kZSkKK0VpbmFfQm9vbCBld2tf
dmlld19tb2RlX3NldChFdmFzX09iamVjdCogZXdrVmlldywgRXdrX1ZpZXdfTW9kZSB2aWV3X21v
ZGUpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7
CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7
CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsK
IAogICAgIHN3aXRjaCAodmlld19tb2RlKSB7CkBAIC0zNzQ1LDExICszNzQ1LDExIEBAIEVpbmFf
Qm9vbCBld2tfdmlld19tb2RlX3NldChFdmFzX09iamVjdCogbywgRXdrX1ZpZXdfTW9kZSB2aWV3
X21vZGUpCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotRXdrX1ZpZXdfTW9kZSBld2tfdmll
d19tb2RlX2dldChjb25zdCBFdmFzX09iamVjdCogbykKK0V3a19WaWV3X01vZGUgZXdrX3ZpZXdf
bW9kZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7CiAgICAgRXdrX1ZpZXdfTW9k
ZSBtb2RlID0gRVdLX1ZJRVdfTU9ERV9XSU5ET1dFRDsKIAotICAgIEVXS19WSUVXX1NEX0dFVChv
LCBzZCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUKGV3a1ZpZXcsIHNkKTsKICAgICBpZiAoIXNkKQog
ICAgICAgICByZXR1cm4gbW9kZTsKICAgICBFV0tfVklFV19QUklWX0dFVChzZCwgcHJpdik7CkBA
IC0zNzg0LDkgKzM3ODQsOSBAQCBFd2tfVmlld19Nb2RlIGV3a192aWV3X21vZGVfZ2V0KGNvbnN0
IEV2YXNfT2JqZWN0KiBvKQogICoKICAqIEVtaXRzIHNpZ25hbDogImVkaXRvcmNsaWVudHNlbGVj
dGlvbixjaGFuZ2VkIiB3aXRoIG5vIHBhcmFtZXRlcnMuCiAgKi8KLXZvaWQgZXdrX3ZpZXdfZWRp
dG9yX2NsaWVudF9zZWxlY3Rpb25fY2hhbmdlZChFdmFzX09iamVjdCogbykKK3ZvaWQgZXdrX3Zp
ZXdfZWRpdG9yX2NsaWVudF9zZWxlY3Rpb25fY2hhbmdlZChFdmFzX09iamVjdCogZXdrVmlldykK
IHsKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKG8sICJlZGl0b3JjbGllbnQs
c2VsZWN0aW9uLGNoYW5nZWQiLCAwKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19j
YWxsKGV3a1ZpZXcsICJlZGl0b3JjbGllbnQsc2VsZWN0aW9uLGNoYW5nZWQiLCAwKTsKIH0KIAog
LyoqCkBAIC0zNzk3LDcgKzM3OTcsNyBAQCB2b2lkIGV3a192aWV3X2VkaXRvcl9jbGllbnRfc2Vs
ZWN0aW9uX2NoYW5nZWQoRXZhc19PYmplY3QqIG8pCiAgKgogICogRW1pdHMgc2lnbmFsOiAiZWRp
dG9yY2xpZW50LGNvbnRlbnRzLGNoYW5nZWQiIHdpdGggbm8gcGFyYW1ldGVycy4KICAqLwotdm9p
ZCBld2tfdmlld19lZGl0b3JfY2xpZW50X2NvbnRlbnRzX2NoYW5nZWQoRXZhc19PYmplY3QqIG8p
Cit2b2lkIGV3a192aWV3X2VkaXRvcl9jbGllbnRfY29udGVudHNfY2hhbmdlZChFdmFzX09iamVj
dCogZXdrVmlldykKIHsKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKG8sICJl
ZGl0b3JjbGllbnQsY29udGVudHMsY2hhbmdlZCIsIDApOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0
X2NhbGxiYWNrX2NhbGwoZXdrVmlldywgImVkaXRvcmNsaWVudCxjb250ZW50cyxjaGFuZ2VkIiwg
MCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXdfc2luZ2xl
LmNwcCBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlld19zaW5nbGUuY3BwCmluZGV4IDVh
ZDY3ZmUuLjk1NGMzMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmll
d19zaW5nbGUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlld19zaW5nbGUu
Y3BwCkBAIC05LDcgKzksNyBAQAogCiAgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAgICAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICAgIE1FUmNoQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCiAgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCiAKICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCkBAIC0zMSwyNSArMzEsMjUgQEAK
IAogc3RhdGljIEV3a19WaWV3X1NtYXJ0X0NsYXNzIF9wYXJlbnRfc2MgPSBFV0tfVklFV19TTUFS
VF9DTEFTU19JTklUX05VTEw7CiAKLXN0YXRpYyB2b2lkIF9ld2tfdmlld19zaW5nbGVfb25fZGVs
KHZvaWQqIGRhdGEsIEV2YXMqIGUsIEV2YXNfT2JqZWN0KiBvLCB2b2lkKiBldmVudF9pbmZvKQor
c3RhdGljIHZvaWQgX2V3a192aWV3X3NpbmdsZV9vbl9kZWwodm9pZCogZGF0YSwgRXZhcyogZXZl
bnRUeXBlLCBFdmFzX09iamVjdCogY2FsbGJhY2ssIHZvaWQqIGV2ZW50X2luZm8pCiB7CiAgICAg
RXZhc19PYmplY3QqIGNsaXAgPSAoRXZhc19PYmplY3QqKWRhdGE7CiAgICAgZXZhc19vYmplY3Rf
ZGVsKGNsaXApOwogfQogCi1zdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0X2FkZChF
dmFzX09iamVjdCogbykKK3N0YXRpYyB2b2lkIF9ld2tfdmlld19zaW5nbGVfc21hcnRfYWRkKEV2
YXNfT2JqZWN0KiBld2tTaW5nbGUpCiB7CiAgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc2Q7CiAK
LSAgICBfcGFyZW50X3NjLnNjLmFkZChvKTsKKyAgICBfcGFyZW50X3NjLnNjLmFkZChld2tTaW5n
bGUpOwogCi0gICAgc2QgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZXZhc19v
YmplY3Rfc21hcnRfZGF0YV9nZXQobykpOworICAgIHNkID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdf
U21hcnRfRGF0YSo+KGV2YXNfb2JqZWN0X3NtYXJ0X2RhdGFfZ2V0KGV3a1NpbmdsZSkpOwogICAg
IGlmICghc2QpCiAgICAgICAgIHJldHVybjsKIAogICAgIEV2YXNfT2JqZWN0KiBjbGlwID0gZXZh
c19vYmplY3RfcmVjdGFuZ2xlX2FkZChzZC0+YmFzZS5ldmFzKTsKICAgICBldmFzX29iamVjdF9j
bGlwX3NldChzZC0+YmFja2luZ19zdG9yZSwgY2xpcCk7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRf
bWVtYmVyX2FkZChjbGlwLCBvKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9tZW1iZXJfYWRkKGNs
aXAsIGV3a1NpbmdsZSk7CiAgICAgZXZhc19vYmplY3Rfc2hvdyhjbGlwKTsKIAogICAgIGV2YXNf
b2JqZWN0X2V2ZW50X2NhbGxiYWNrX2FkZApAQCAtNjUsNTUgKzY1LDU1IEBAIHN0YXRpYyBFdmFz
X09iamVjdCogX2V3a192aWV3X3NpbmdsZV9zbWFydF9iYWNraW5nX3N0b3JlX2FkZChFd2tfVmll
d19TbWFydF9EYXRhCiAgICAgcmV0dXJuIGJzOwogfQogCi1zdGF0aWMgdm9pZCBfZXdrX3ZpZXdf
c2luZ2xlX3NtYXJ0X3Jlc2l6ZShFdmFzX09iamVjdCogbywgRXZhc19Db29yZCB3LCBFdmFzX0Nv
b3JkIGgpCitzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0X3Jlc2l6ZShFdmFzX09i
amVjdCogZXdrU2luZ2xlLCBFdmFzX0Nvb3JkIHdpZHRoLCBFdmFzX0Nvb3JkIGhlaWdodCkKIHsK
LSAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzZCA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0
X0RhdGEqPihldmFzX29iamVjdF9zbWFydF9kYXRhX2dldChvKSk7Ci0gICAgX3BhcmVudF9zYy5z
Yy5yZXNpemUobywgdywgaCk7CisgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QgPSBzdGF0aWNf
Y2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZXZhc19vYmplY3Rfc21hcnRfZGF0YV9nZXQoZXdr
U2luZ2xlKSk7CisgICAgX3BhcmVudF9zYy5zYy5yZXNpemUoZXdrU2luZ2xlLCB3aWR0aCwgaGVp
Z2h0KTsKIAogICAgIGlmICghc2QpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIHRoZXNlIHNo
b3VsZCBiZSBxdWV1ZWQgYW5kIHByb2Nlc3NlZCBpbiBjYWxjdWxhdGUgYXMgd2VsbCEKLSAgICBl
dmFzX29iamVjdF9pbWFnZV9zaXplX3NldChzZC0+YmFja2luZ19zdG9yZSwgdywgaCk7CisgICAg
ZXZhc19vYmplY3RfaW1hZ2Vfc2l6ZV9zZXQoc2QtPmJhY2tpbmdfc3RvcmUsIHdpZHRoLCBoZWln
aHQpOwogICAgIGlmIChzZC0+YW5pbWF0ZWRfem9vbS56b29tLmN1cnJlbnQgPCAwLjAwMDAxKSB7
CiAgICAgICAgIEV2YXNfT2JqZWN0KiBjbGlwID0gZXZhc19vYmplY3RfY2xpcF9nZXQoc2QtPmJh
Y2tpbmdfc3RvcmUpOwogICAgICAgICBFdmFzX0Nvb3JkIHgsIHksIGN3LCBjaDsKLSAgICAgICAg
ZXZhc19vYmplY3RfaW1hZ2VfZmlsbF9zZXQoc2QtPmJhY2tpbmdfc3RvcmUsIDAsIDAsIHcsIGgp
OworICAgICAgICBldmFzX29iamVjdF9pbWFnZV9maWxsX3NldChzZC0+YmFja2luZ19zdG9yZSwg
MCwgMCwgd2lkdGgsIGhlaWdodCk7CiAgICAgICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldChz
ZC0+YmFja2luZ19zdG9yZSwgJngsICZ5LCAwLCAwKTsKICAgICAgICAgZXZhc19vYmplY3RfbW92
ZShjbGlwLCB4LCB5KTsKICAgICAgICAgZXdrX2ZyYW1lX2NvbnRlbnRzX3NpemVfZ2V0KHNkLT5t
YWluX2ZyYW1lLCAmY3csICZjaCk7Ci0gICAgICAgIGlmICh3ID4gY3cpCi0gICAgICAgICAgICB3
ID0gY3c7Ci0gICAgICAgIGlmIChoID4gY2gpCi0gICAgICAgICAgICBoID0gY2g7Ci0gICAgICAg
IGV2YXNfb2JqZWN0X3Jlc2l6ZShjbGlwLCB3LCBoKTsKKyAgICAgICAgaWYgKHdpZHRoID4gY3cp
CisgICAgICAgICAgICB3aWR0aCA9IGN3OworICAgICAgICBpZiAoaGVpZ2h0ID4gY2gpCisgICAg
ICAgICAgICBoZWlnaHQgPSBjaDsKKyAgICAgICAgZXZhc19vYmplY3RfcmVzaXplKGNsaXAsIHdp
ZHRoLCBoZWlnaHQpOwogICAgIH0KIH0KIAotc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdmlld180
Yl9tb3ZlX3JlZ2lvbl91cCh1aW50MzJfdCogaW1hZ2UsIHNpemVfdCByb3dzLCBzaXplX3QgeCwg
c2l6ZV90IHksIHNpemVfdCB3LCBzaXplX3QgaCwgc2l6ZV90IHJvd3NpemUpCitzdGF0aWMgaW5s
aW5lIHZvaWQgX2V3a192aWV3XzRiX21vdmVfcmVnaW9uX3VwKHVpbnQzMl90KiBpbWFnZSwgc2l6
ZV90IHJvd3MsIHNpemVfdCB4LCBzaXplX3QgeSwgc2l6ZV90IHdpZHRoLCBzaXplX3QgaGVpZ2h0
LCBzaXplX3Qgcm93c2l6ZSkKIHsKICAgICB1aW50MzJfdCogc3JjOwogICAgIHVpbnQzMl90KiBk
c3Q7CiAKICAgICBkc3QgPSBpbWFnZSArIHggKyB5ICogcm93c2l6ZTsKICAgICBzcmMgPSBkc3Qg
KyByb3dzICogcm93c2l6ZTsKLSAgICBoIC09IHJvd3M7CisgICAgaGVpZ2h0IC09IHJvd3M7CiAK
LSAgICBmb3IgKDsgaCA+IDA7IGgtLSwgZHN0ICs9IHJvd3NpemUsIHNyYyArPSByb3dzaXplKQot
ICAgICAgICBtZW1jcHkoZHN0LCBzcmMsIHcgKiA0KTsKKyAgICBmb3IgKDsgaGVpZ2h0ID4gMDsg
aGVpZ2h0LS0sIGRzdCArPSByb3dzaXplLCBzcmMgKz0gcm93c2l6ZSkKKyAgICAgICAgbWVtY3B5
KGRzdCwgc3JjLCB3aWR0aCAqIDQpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgX2V3a192aWV3
XzRiX21vdmVfcmVnaW9uX2Rvd24odWludDMyX3QqIGltYWdlLCBzaXplX3Qgcm93cywgc2l6ZV90
IHgsIHNpemVfdCB5LCBzaXplX3Qgdywgc2l6ZV90IGgsIHNpemVfdCByb3dzaXplKQorc3RhdGlj
IGlubGluZSB2b2lkIF9ld2tfdmlld180Yl9tb3ZlX3JlZ2lvbl9kb3duKHVpbnQzMl90KiBpbWFn
ZSwgc2l6ZV90IHJvd3MsIHNpemVfdCB4LCBzaXplX3QgeSwgc2l6ZV90IHdpZHRoLCBzaXplX3Qg
aGVpZ2h0LCBzaXplX3Qgcm93c2l6ZSkKIHsKICAgICB1aW50MzJfdCogc3JjOwogICAgIHVpbnQz
Ml90KiBkc3Q7CiAKLSAgICBoIC09IHJvd3M7Ci0gICAgc3JjID0gaW1hZ2UgKyB4ICsgKHkgKyBo
IC0gMSkgKiByb3dzaXplOworICAgIGhlaWdodCAtPSByb3dzOworICAgIHNyYyA9IGltYWdlICsg
eCArICh5ICsgaGVpZ2h0IC0gMSkgKiByb3dzaXplOwogICAgIGRzdCA9IHNyYyArIHJvd3MgKiBy
b3dzaXplOwogCi0gICAgZm9yICg7IGggPiAwOyBoLS0sIGRzdCAtPSByb3dzaXplLCBzcmMgLT0g
cm93c2l6ZSkKLSAgICAgICAgbWVtY3B5KGRzdCwgc3JjLCB3ICogNCk7CisgICAgZm9yICg7IGhl
aWdodCA+IDA7IGhlaWdodC0tLCBkc3QgLT0gcm93c2l6ZSwgc3JjIC09IHJvd3NpemUpCisgICAg
ICAgIG1lbWNweShkc3QsIHNyYywgd2lkdGggKiA0KTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lk
IF9ld2tfdmlld180Yl9tb3ZlX2xpbmVfbGVmdCh1aW50MzJfdCogZHN0LCBjb25zdCB1aW50MzJf
dCogc3JjLCBzaXplX3QgY291bnQpCkBAIC0xMzYsNjkgKzEzNiw2OSBAQCBzdGF0aWMgaW5saW5l
IHZvaWQgX2V3a192aWV3XzRiX21vdmVfbGluZV9yaWdodCh1aW50MzJfdCogZHN0LCB1aW50MzJf
dCogc3JjLCBzaQogICAgICAgICAqZHN0ID0gKnNyYzsKIH0KIAotc3RhdGljIGlubGluZSB2b2lk
IF9ld2tfdmlld180Yl9tb3ZlX3JlZ2lvbl9sZWZ0KHVpbnQzMl90KiBpbWFnZSwgc2l6ZV90IGNv
bHMsIHNpemVfdCB4LCBzaXplX3QgeSwgc2l6ZV90IHcsIHNpemVfdCBoLCBzaXplX3Qgcm93c2l6
ZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3ZpZXdfNGJfbW92ZV9yZWdpb25fbGVmdCh1aW50
MzJfdCogaW1hZ2UsIHNpemVfdCBjb2xzLCBzaXplX3QgeCwgc2l6ZV90IHksIHNpemVfdCB3aWR0
aCwgc2l6ZV90IGhlaWdodCwgc2l6ZV90IHJvd3NpemUpCiB7CiAgICAgdWludDMyX3QqIHNyYzsK
ICAgICB1aW50MzJfdCogZHN0OwogCiAgICAgZHN0ID0gaW1hZ2UgKyB4ICsgeSAqIHJvd3NpemU7
CiAgICAgc3JjID0gZHN0ICsgY29sczsKLSAgICB3IC09IGNvbHM7CisgICAgd2lkdGggLT0gY29s
czsKIAotICAgIGZvciAoOyBoID4gMDsgaC0tLCBkc3QgKz0gcm93c2l6ZSwgc3JjICs9IHJvd3Np
emUpCi0gICAgICAgIF9ld2tfdmlld180Yl9tb3ZlX2xpbmVfbGVmdChkc3QsIHNyYywgdyk7Cisg
ICAgZm9yICg7IGhlaWdodCA+IDA7IGhlaWdodC0tLCBkc3QgKz0gcm93c2l6ZSwgc3JjICs9IHJv
d3NpemUpCisgICAgICAgIF9ld2tfdmlld180Yl9tb3ZlX2xpbmVfbGVmdChkc3QsIHNyYywgd2lk
dGgpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgX2V3a192aWV3XzRiX21vdmVfcmVnaW9uX3Jp
Z2h0KHVpbnQzMl90KiBpbWFnZSwgc2l6ZV90IGNvbHMsIHNpemVfdCB4LCBzaXplX3QgeSwgc2l6
ZV90IHcsIHNpemVfdCBoLCBzaXplX3Qgcm93c2l6ZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBfZXdr
X3ZpZXdfNGJfbW92ZV9yZWdpb25fcmlnaHQodWludDMyX3QqIGltYWdlLCBzaXplX3QgY29scywg
c2l6ZV90IHgsIHNpemVfdCB5LCBzaXplX3Qgd2lkdGgsIHNpemVfdCBoZWlnaHQsIHNpemVfdCBy
b3dzaXplKQogewogICAgIHVpbnQzMl90KiBzcmM7CiAgICAgdWludDMyX3QqIGRzdDsKIAotICAg
IHcgLT0gY29sczsKLSAgICBzcmMgPSBpbWFnZSArICh4ICsgdyAtIDEpICsgeSAqIHJvd3NpemU7
CisgICAgd2lkdGggLT0gY29sczsKKyAgICBzcmMgPSBpbWFnZSArICh4ICsgd2lkdGggLSAxKSAr
IHkgKiByb3dzaXplOwogICAgIGRzdCA9IHNyYyArIGNvbHM7CiAKLSAgICBmb3IgKDsgaCA+IDA7
IGgtLSwgZHN0ICs9IHJvd3NpemUsIHNyYyArPSByb3dzaXplKQotICAgICAgICBfZXdrX3ZpZXdf
NGJfbW92ZV9saW5lX3JpZ2h0KGRzdCwgc3JjLCB3KTsKKyAgICBmb3IgKDsgaGVpZ2h0ID4gMDsg
aGVpZ2h0LS0sIGRzdCArPSByb3dzaXplLCBzcmMgKz0gcm93c2l6ZSkKKyAgICAgICAgX2V3a192
aWV3XzRiX21vdmVfbGluZV9yaWdodChkc3QsIHNyYywgd2lkdGgpOwogfQogCiAvKiBjYXRjaC1h
bGwgZnVuY3Rpb24sIG5vdCBhcyBvcHRpbWl6ZWQgYXMgdGhlIG90aGVycywgYnV0IGRvZXMgdGhl
IHdvcmsuICovCi1zdGF0aWMgaW5saW5lIHZvaWQgX2V3a192aWV3XzRiX21vdmVfcmVnaW9uKHVp
bnQzMl90KiBpbWFnZSwgaW50IGR4LCBpbnQgZHksIHNpemVfdCB4LCBzaXplX3QgeSwgc2l6ZV90
IHcsIHNpemVfdCBoLCBzaXplX3Qgcm93c2l6ZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3Zp
ZXdfNGJfbW92ZV9yZWdpb24odWludDMyX3QqIGltYWdlLCBpbnQgZHgsIGludCBkeSwgc2l6ZV90
IHgsIHNpemVfdCB5LCBzaXplX3Qgd2lkdGgsIHNpemVfdCBoZWlnaHQsIHNpemVfdCByb3dzaXpl
KQogewogICAgIHVpbnQzMl90KiBzcmM7CiAgICAgdWludDMyX3QqIGRzdDsKIAogICAgIGlmIChk
eSA8IDApIHsKLSAgICAgICAgaCArPSBkeTsKKyAgICAgICAgaGVpZ2h0ICs9IGR5OwogICAgICAg
ICBkc3QgPSBpbWFnZSArIHggKyB5ICogcm93c2l6ZTsKICAgICAgICAgc3JjID0gZHN0IC0gZHkg
KiByb3dzaXplOwogICAgICAgICBpZiAoZHggPD0gMCkgewotICAgICAgICAgICAgdyArPSBkeDsK
KyAgICAgICAgICAgIHdpZHRoICs9IGR4OwogICAgICAgICAgICAgc3JjIC09IGR4OwotICAgICAg
ICAgICAgZm9yICg7IGggPiAwOyBoLS0sIGRzdCArPSByb3dzaXplLCBzcmMgKz0gcm93c2l6ZSkK
LSAgICAgICAgICAgICAgICBfZXdrX3ZpZXdfNGJfbW92ZV9saW5lX2xlZnQoZHN0LCBzcmMsIHcp
OworICAgICAgICAgICAgZm9yICg7IGhlaWdodCA+IDA7IGhlaWdodC0tLCBkc3QgKz0gcm93c2l6
ZSwgc3JjICs9IHJvd3NpemUpCisgICAgICAgICAgICAgICAgX2V3a192aWV3XzRiX21vdmVfbGlu
ZV9sZWZ0KGRzdCwgc3JjLCB3aWR0aCk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB3
IC09IGR4OwotICAgICAgICAgICAgc3JjICs9IHcgLSAxOwotICAgICAgICAgICAgZHN0ICs9IHcg
KyBkeCAtMTsKLSAgICAgICAgICAgIGZvciAoOyBoID4gMDsgaC0tLCBkc3QgKz0gcm93c2l6ZSwg
c3JjICs9IHJvd3NpemUpCi0gICAgICAgICAgICAgICAgX2V3a192aWV3XzRiX21vdmVfbGluZV9y
aWdodChkc3QsIHNyYywgdyk7CisgICAgICAgICAgICB3aWR0aCAtPSBkeDsKKyAgICAgICAgICAg
IHNyYyArPSB3aWR0aCAtIDE7CisgICAgICAgICAgICBkc3QgKz0gd2lkdGggKyBkeCAtMTsKKyAg
ICAgICAgICAgIGZvciAoOyBoZWlnaHQgPiAwOyBoZWlnaHQtLSwgZHN0ICs9IHJvd3NpemUsIHNy
YyArPSByb3dzaXplKQorICAgICAgICAgICAgICAgIF9ld2tfdmlld180Yl9tb3ZlX2xpbmVfcmln
aHQoZHN0LCBzcmMsIHdpZHRoKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAgIGgg
LT0gZHk7Ci0gICAgICAgIHNyYyA9IGltYWdlICsgeCArICh5ICsgaCAtIDEpICogcm93c2l6ZTsK
KyAgICAgICAgaGVpZ2h0IC09IGR5OworICAgICAgICBzcmMgPSBpbWFnZSArIHggKyAoeSArIGhl
aWdodCAtIDEpICogcm93c2l6ZTsKICAgICAgICAgZHN0ID0gc3JjICsgZHkgKiByb3dzaXplOwog
ICAgICAgICBpZiAoZHggPD0gMCkgewotICAgICAgICAgICAgdyArPSBkeDsKKyAgICAgICAgICAg
IHdpZHRoICs9IGR4OwogICAgICAgICAgICAgc3JjIC09IGR4OwotICAgICAgICAgICAgZm9yICg7
IGggPiAwOyBoLS0sIGRzdCAtPSByb3dzaXplLCBzcmMgLT0gcm93c2l6ZSkKLSAgICAgICAgICAg
ICAgICBfZXdrX3ZpZXdfNGJfbW92ZV9saW5lX2xlZnQoZHN0LCBzcmMsIHcpOworICAgICAgICAg
ICAgZm9yICg7IGhlaWdodCA+IDA7IGhlaWdodC0tLCBkc3QgLT0gcm93c2l6ZSwgc3JjIC09IHJv
d3NpemUpCisgICAgICAgICAgICAgICAgX2V3a192aWV3XzRiX21vdmVfbGluZV9sZWZ0KGRzdCwg
c3JjLCB3aWR0aCk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB3IC09IGR4OwotICAg
ICAgICAgICAgc3JjICs9IHcgLSAxOwotICAgICAgICAgICAgZHN0ICs9IHcgKyBkeCAtIDE7Ci0g
ICAgICAgICAgICBmb3IgKDsgaCA+IDA7IGgtLSwgZHN0IC09IHJvd3NpemUsIHNyYyAtPSByb3dz
aXplKQotICAgICAgICAgICAgICAgIF9ld2tfdmlld180Yl9tb3ZlX2xpbmVfcmlnaHQoZHN0LCBz
cmMsIHcpOworICAgICAgICAgICAgd2lkdGggLT0gZHg7CisgICAgICAgICAgICBzcmMgKz0gd2lk
dGggLSAxOworICAgICAgICAgICAgZHN0ICs9IHdpZHRoICsgZHggLSAxOworICAgICAgICAgICAg
Zm9yICg7IGhlaWdodCA+IDA7IGhlaWdodC0tLCBkc3QgLT0gcm93c2l6ZSwgc3JjIC09IHJvd3Np
emUpCisgICAgICAgICAgICAgICAgX2V3a192aWV3XzRiX21vdmVfbGluZV9yaWdodChkc3QsIHNy
Yywgd2lkdGgpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtNTI0LDkgKzUyNCw5IEBAIHN0YXRp
YyB2b2lkIF9ld2tfdmlld19zaW5nbGVfc21hcnRfem9vbV93ZWFrX3Ntb290aF9zY2FsZV9zZXQo
RXdrX1ZpZXdfU21hcnRfRGF0CiAgICAgZXZhc19vYmplY3RfaW1hZ2Vfc21vb3RoX3NjYWxlX3Nl
dChzZC0+YmFja2luZ19zdG9yZSwgc21vb3RoX3NjYWxlKTsKIH0KIAotc3RhdGljIHZvaWQgX2V3
a192aWV3X3NpbmdsZV9zbWFydF9iZ19jb2xvcl9zZXQoRXdrX1ZpZXdfU21hcnRfRGF0YSogc2Qs
IHVuc2lnbmVkIGNoYXIgciwgdW5zaWduZWQgY2hhciBnLCB1bnNpZ25lZCBjaGFyIGIsIHVuc2ln
bmVkIGNoYXIgYSkKK3N0YXRpYyB2b2lkIF9ld2tfdmlld19zaW5nbGVfc21hcnRfYmdfY29sb3Jf
c2V0KEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkLCB1bnNpZ25lZCBjaGFyIHJlZCwgdW5zaWduZWQg
Y2hhciBncmVlbiwgdW5zaWduZWQgY2hhciBibHVlLCB1bnNpZ25lZCBjaGFyIGFscGhhKQogewot
ICAgIGV2YXNfb2JqZWN0X2ltYWdlX2FscGhhX3NldChzZC0+YmFja2luZ19zdG9yZSwgYSA8IDI1
NSk7CisgICAgZXZhc19vYmplY3RfaW1hZ2VfYWxwaGFfc2V0KHNkLT5iYWNraW5nX3N0b3JlLCBh
bHBoYSA8IDI1NSk7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19zaW5nbGVfc21hcnRfc2V0KEV3
a19WaWV3X1NtYXJ0X0NsYXNzKiBhcGkpCkBAIC01NjMsNyArNTYzLDcgQEAgc3RhdGljIGlubGlu
ZSBFdmFzX1NtYXJ0KiBfZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0X2NsYXNzX25ldyh2b2lkKQogICAg
IHJldHVybiBzbWFydDsKIH0KIAotRXZhc19PYmplY3QqIGV3a192aWV3X3NpbmdsZV9hZGQoRXZh
cyogZSkKK0V2YXNfT2JqZWN0KiBld2tfdmlld19zaW5nbGVfYWRkKEV2YXMqIGNhbnZhcykKIHsK
LSAgICByZXR1cm4gZXZhc19vYmplY3Rfc21hcnRfYWRkKGUsIF9ld2tfdmlld19zaW5nbGVfc21h
cnRfY2xhc3NfbmV3KCkpOworICAgIHJldHVybiBldmFzX29iamVjdF9zbWFydF9hZGQoY2FudmFz
LCBfZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0X2NsYXNzX25ldygpKTsKIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlld190aWxlZC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Vm
bC9ld2svZXdrX3ZpZXdfdGlsZWQuY3BwCmluZGV4IGY4N2Y0OGIuLjNiYjZmMzUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlld190aWxlZC5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9lZmwvZXdrL2V3a192aWV3X3RpbGVkLmNwcApAQCAtMzAsMTUgKzMwLDE1IEBACiAK
IHN0YXRpYyBFd2tfVmlld19TbWFydF9DbGFzcyBfcGFyZW50X3NjID0gRVdLX1ZJRVdfU01BUlRf
Q0xBU1NfSU5JVF9OVUxMOwogCi1zdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld190aWxlZF9yZW5k
ZXJfY2Iodm9pZCogZGF0YSwgRXdrX1RpbGUqIHQsIGNvbnN0IEVpbmFfUmVjdGFuZ2xlKiBhcmVh
KQorc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfdGlsZWRfcmVuZGVyX2NiKHZvaWQqIGRhdGEs
IEV3a19UaWxlKiB0aWxlLCBjb25zdCBFaW5hX1JlY3RhbmdsZSogYXJlYSkKIHsKICAgICBFd2tf
Vmlld19Qcml2YXRlX0RhdGEqIHByaXYgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19Qcml2YXRlX0Rh
dGEqPihkYXRhKTsKLSAgICBFaW5hX1JlY3RhbmdsZSByID0ge2FyZWEtPnggKyB0LT54LCBhcmVh
LT55ICsgdC0+eSwgYXJlYS0+dywgYXJlYS0+aH07CisgICAgRWluYV9SZWN0YW5nbGUgcmVjdCA9
IHthcmVhLT54ICsgdGlsZS0+eCwgYXJlYS0+eSArIHRpbGUtPnksIGFyZWEtPncsIGFyZWEtPmh9
OwogCi0gICAgcmV0dXJuIGV3a192aWV3X3BhaW50X2NvbnRlbnRzKHByaXYsIHQtPmNhaXJvLCAm
cik7CisgICAgcmV0dXJuIGV3a192aWV3X3BhaW50X2NvbnRlbnRzKHByaXYsIHRpbGUtPmNhaXJv
LCAmcmVjdCk7CiB9CiAKLXN0YXRpYyB2b2lkKiBfZXdrX3ZpZXdfdGlsZWRfdXBkYXRlc19wcm9j
ZXNzX3ByZSh2b2lkKiBkYXRhLCBFdmFzX09iamVjdCogbykKK3N0YXRpYyB2b2lkKiBfZXdrX3Zp
ZXdfdGlsZWRfdXBkYXRlc19wcm9jZXNzX3ByZSh2b2lkKiBkYXRhLCBFdmFzX09iamVjdCogZXdr
VGlsZSkKIHsKICAgICBFd2tfVmlld19Qcml2YXRlX0RhdGEqIHByaXYgPSBzdGF0aWNfY2FzdDxF
d2tfVmlld19Qcml2YXRlX0RhdGEqPihkYXRhKTsKICAgICBld2tfdmlld19sYXlvdXRfaWZfbmVl
ZGVkX3JlY3Vyc2l2ZShwcml2KTsKQEAgLTU2LDcgKzU2LDcgQEAgc3RhdGljIEV2YXNfT2JqZWN0
KiBfZXdrX3ZpZXdfdGlsZWRfc21hcnRfYmFja2luZ19zdG9yZV9hZGQoRXdrX1ZpZXdfU21hcnRf
RGF0YSoKIH0KIAogc3RhdGljIHZvaWQKLV9ld2tfdmlld190aWxlZF9jb250ZW50c19zaXplX2No
YW5nZWRfY2Iodm9pZCogZGF0YSwgRXZhc19PYmplY3QqIG8sIHZvaWQqIGV2ZW50X2luZm8pCitf
ZXdrX3ZpZXdfdGlsZWRfY29udGVudHNfc2l6ZV9jaGFuZ2VkX2NiKHZvaWQqIGRhdGEsIEV2YXNf
T2JqZWN0KiBld2tUaWxlLCB2b2lkKiBldmVudF9pbmZvKQogewogICAgIEV2YXNfQ29vcmQqIHNp
emUgPSBzdGF0aWNfY2FzdDxFdmFzX0Nvb3JkKj4oZXZlbnRfaW5mbyk7CiAgICAgRXdrX1ZpZXdf
U21hcnRfRGF0YSogc2QgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZGF0YSk7
CkBAIC02NSwxMyArNjUsMTMgQEAgX2V3a192aWV3X3RpbGVkX2NvbnRlbnRzX3NpemVfY2hhbmdl
ZF9jYih2b2lkKiBkYXRhLCBFdmFzX09iamVjdCogbywgdm9pZCogZXZlbnQKICAgICAgICAgKHNk
LT5iYWNraW5nX3N0b3JlLCBzaXplWzBdLCBzaXplWzFdKTsKIH0KIAotc3RhdGljIHZvaWQgX2V3
a192aWV3X3RpbGVkX3NtYXJ0X2FkZChFdmFzX09iamVjdCogbykKK3N0YXRpYyB2b2lkIF9ld2tf
dmlld190aWxlZF9zbWFydF9hZGQoRXZhc19PYmplY3QqIGV3a1RpbGUpCiB7CiAgICAgRXdrX1Zp
ZXdfU21hcnRfRGF0YSogc2Q7CiAKLSAgICBfcGFyZW50X3NjLnNjLmFkZChvKTsKKyAgICBfcGFy
ZW50X3NjLnNjLmFkZChld2tUaWxlKTsKIAotICAgIHNkID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdf
U21hcnRfRGF0YSo+KGV2YXNfb2JqZWN0X3NtYXJ0X2RhdGFfZ2V0KG8pKTsKKyAgICBzZCA9IHN0
YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihldmFzX29iamVjdF9zbWFydF9kYXRhX2dl
dChld2tUaWxlKSk7CiAgICAgaWYgKCFzZCkKICAgICAgICAgcmV0dXJuOwogCkBAIC0yNzMsMTYg
KzI3MywxNiBAQCBFdmFzX09iamVjdCogZXdrX3ZpZXdfdGlsZWRfYWRkKEV2YXMqIGUpCiAgICAg
cmV0dXJuIGV2YXNfb2JqZWN0X3NtYXJ0X2FkZChlLCBfZXdrX3ZpZXdfdGlsZWRfc21hcnRfY2xh
c3NfbmV3KCkpOwogfQogCi1Fd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIGV3a192aWV3X3RpbGVkX3Vu
dXNlZF9jYWNoZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCitFd2tfVGlsZV9VbnVzZWRfQ2Fj
aGUqIGV3a192aWV3X3RpbGVkX3VudXNlZF9jYWNoZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3
a1RpbGUpCiB7Ci0gICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QgPSBld2tfdmlld19zbWFydF9k
YXRhX2dldChvKTsKKyAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzZCA9IGV3a192aWV3X3NtYXJ0
X2RhdGFfZ2V0KGV3a1RpbGUpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChz
ZCwgMCk7CiAgICAgcmV0dXJuIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfdW51c2VkX2Nh
Y2hlX2dldChzZC0+YmFja2luZ19zdG9yZSk7CiB9CiAKLXZvaWQgZXdrX3ZpZXdfdGlsZWRfdW51
c2VkX2NhY2hlX3NldChFdmFzX09iamVjdCogbywgRXdrX1RpbGVfVW51c2VkX0NhY2hlKiBjYWNo
ZSkKK3ZvaWQgZXdrX3ZpZXdfdGlsZWRfdW51c2VkX2NhY2hlX3NldChFdmFzX09iamVjdCogZXdr
VGlsZSwgRXdrX1RpbGVfVW51c2VkX0NhY2hlKiBjYWNoZSkKIHsKLSAgICBFd2tfVmlld19TbWFy
dF9EYXRhKiBzZCA9IGV3a192aWV3X3NtYXJ0X2RhdGFfZ2V0KG8pOworICAgIEV3a19WaWV3X1Nt
YXJ0X0RhdGEqIHNkID0gZXdrX3ZpZXdfc21hcnRfZGF0YV9nZXQoZXdrVGlsZSk7CiAgICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QpOwogICAgIGV3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3RpbGVfdW51c2VkX2NhY2hlX3NldChzZC0+YmFja2luZ19zdG9yZSwgY2FjaGUpOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110251</attachid>
            <date>2011-10-07 21:17:21 -0700</date>
            <delta_ts>2011-10-11 18:23:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69073-20111008131720.patch</filename>
            <type>text/plain</type>
            <size>420160</size>
            <attacher name="Gyuyoung Kim">gyuyoung.kim</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTY5OTUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZs
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZwppbmRleCBiYjg1NzQxNjM3
YTVkZmUyY2I5OTcxMmZmNzEzODAxY2JmY2U2ODk2Li5kZTNhMjQ5ZGMxODI5ZDA2MGZlZjg3MTg3
NWM5Y2EyNjNhNzJhYjk2IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTIgQEAKKzIwMTEt
MTAtMDcgIEd5dXlvdW5nIEtpbSAgPGd5dXlvdW5nLmtpbUBzYW1zdW5nLmNvbT4KKworICAgICAg
ICBbRUZMXSBDaGFuZ2UgZWZsIHN0eWxlIHBhcmFtZXRlciB2YXJpYWJsZXMgd2l0aCBXZWJLaXQg
Y29kaW5nIFN0eWxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD02OTA3MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFRoaXMgaXMgYSB0aGlyZCBzdGVwIGluIG9yZGVyIHRvIGJlIG1vcmUgY29tcGxpYW50IHdp
dGggV2ViS2l0IGNvZGluZyBzdHlsZS4KKyAgICAgICAgV2UgaGF2ZSB1c2VkIG9uZS1sZXR0ZXJ8
IHR3by1sZXR0ZXIgcGFyYW1ldGVyIGFjY29yZGluZyB0byBlZmwgc3R5bGUuIEhvd2V2ZXIsIGl0
J3MgbW9yZSBkaWZmaWN1bHQKKyAgICAgICAgZm9yIG90aGVyIHJldmlld2VycyB0byByZXZpZXcg
RUZMIHBhdGNoZXMuIFNvLCB0aGlzIHBhdGNoIGNoYW5nZXMgZWZsIHN0eWxlIHBhcmFtZXRlcnMK
KyAgICAgICAgd2l0aCBtZWFuaW5nZnVsIG9uZS4KKworICAgICAgICBNYWpvcnMgY2hhbmdlcyBh
cmUgbGlzdGVkIGJlbG93LAorCisgICAgICAgIC0gVXNlIGV3a0ZyYW1lIGluc3RlYWQgb2YgbyBw
YXJhbWV0ZXIgaW4gZXdrX2ZyYW1lLmNwcC4KKyAgICAgICAgLSBVc2UgZXdrVmlldyBpbnN0ZWFk
IG9mIG8gcGFyYW1ldGVyIGluIGV3a192aWV3LmNwcC4KKyAgICAgICAgLSBVc2UgbWVudSBhbmQg
aXRlbSBpbnN0ZWFkIG9mIG8gcGFyYW1ldGVyIGluIGV3a19jb250ZXh0bWVudS5jcHAuCisgICAg
ICAgIC0gVXNlIGV3a1RpbGUgaW5zdGVhZCBvZiBvIHBhcmFtZXRlciBpbiBld2tfdGlsZV94eHgu
Y3BwLgorICAgICAgICAtIFVzZSB0aWxlIHBhcmFtZXRlciBuYW1lIGluc3RlYWQgb2YgdCBwYXJh
bWV0ZXIgaW4gZXdrX3RpbGVfeHh4LmNwcC4KKyAgICAgICAgLSBVc2Ugc21hcnREYXRhIGluc3Rl
YWQgb2Ygc2QgcGFyYW1ldGVyIGZvciBFd2tfWFhYWF9TbWFydF9EYXRhIHN0cnVjdC4KKyAgICAg
ICAgLSBVc2Ugd2lkdGgsIGhlaWdodCBpbnN0ZWFkIG9mIHcsIGggcGFyYW1ldGVyLgorICAgICAg
ICAtIFVzZSB4eHhFdmVudCBpbnN0ZWFkIG9mIGV2IHBhcmFtZXRlciBmb3IgZXZlbnQuIChlLmcu
IGRvd25FdmVudCwgdXBFdmVudCwgd2hlZWxFdmVudCkKKyAgICAgICAgLSBVc2Ugc2Nyb2xsWCwg
c2Nyb2xsWSwgc2Nyb2xsV2lkdGgsIHNjcm9sbEhlaWdodCwgY2VudGVyWCwgY2VudGVyWSwgZGVs
dGFYLCBkZWx0YVkgaW5zdGVhZCBvZiBzeCwgeHksIHN3LAorICAgICAgICBzaCwgY3gsIGN5LCBk
eCwgZHkuCisgICAgICAgIC0gVXNlIHRpbGVVbnVzZWRDYWNoZSBpbnN0ZWFkIG9mIHR1YyBwYXJh
bWV0ZXIgaW4gdGlsZWQgYmFja2luZyBzdG9yZS4KKyAgICAgICAgLSBVc2UgcmVkLCBncmVlbiwg
Ymx1ZSBhbmQgYWxwaGEgaW5zdGVhZCBvZiByLGcsYixhLgorICAgICAgICAtIFJlbW92ZSAiXyIg
ZnJvbSBwYXJhbWV0ZXIgdmFyaWFibGUuCisgICAgICAgIC0gUnVuIGRlbWFyY2hpJ3MgY29kaW5n
IHN0eWxlIHNjcmlwdCBmb3IgZXdrX3RpbGVfeHh4LmNwcCBmaWxlcy4KKyAgICAgICAgLSBSZW1v
dmUgKnZvaWQqIHBhcmFtZXRlciBpbiBld2tfdGlsZV94eHguY3BwJ3MgaW50ZXJuYWwgZnVuY3Rp
b25zLgorCisgICAgICAgICogZXdrL2V3a19hdXRoX3NvdXAuY3BwOgorICAgICAgICAqIGV3ay9l
d2tfY29udGV4dG1lbnUuY3BwOgorICAgICAgICAqIGV3ay9ld2tfY29va2llcy5jcHA6CisgICAg
ICAgICogZXdrL2V3a19mcmFtZS5jcHA6CisgICAgICAgICogZXdrL2V3a19oaXN0b3J5LmNwcDoK
KyAgICAgICAgKiBld2svZXdrX2pzLmNwcDoKKyAgICAgICAgKiBld2svZXdrX3Byb3RvY29sX2hh
bmRsZXJfc291cC5jcHA6CisgICAgICAgICogZXdrL2V3a19zZXR0aW5ncy5jcHA6CisgICAgICAg
ICogZXdrL2V3a190aWxlZF9iYWNraW5nX3N0b3JlLmNwcDoKKyAgICAgICAgKiBld2svZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmUuaDoKKyAgICAgICAgKiBld2svZXdrX3RpbGVkX21hdHJpeC5jcHA6
CisgICAgICAgICogZXdrL2V3a190aWxlZF9tYXRyaXguaDoKKyAgICAgICAgKiBld2svZXdrX3Rp
bGVkX21vZGVsLmNwcDoKKyAgICAgICAgKiBld2svZXdrX3RpbGVkX21vZGVsLmg6CisgICAgICAg
ICogZXdrL2V3a192aWV3LmNwcDoKKyAgICAgICAgKiBld2svZXdrX3ZpZXdfc2luZ2xlLmNwcDoK
KyAgICAgICAgKiBld2svZXdrX3ZpZXdfdGlsZWQuY3BwOgorICAgICAgICAqIGV3ay9ld2tfd2lu
ZG93X2ZlYXR1cmVzLmNwcDoKKwogMjAxMS0xMC0wNiAgR3l1eW91bmcgS2ltICA8Z3l1eW91bmcu
a2ltQHNhbXN1bmcuY29tPgogCiAgICAgICAgIFtFRkxdIENoYW5nZSBkYXRhIHR5cGUgb2YgcGFy
YW1ldGVyIGluIGV3a192aWV3X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfZ2V0KCkuCkBAIC0xOTk4LDcg
KzIwNDcsNyBAQAogICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50RWZsOjpydW5PcGVuUGFu
ZWwpOgogICAgICAgICAqIGV3ay9ld2tfdmlldy5jcHA6CiAgICAgICAgIChld2tfdmlld19ydW5f
b3Blbl9wYW5lbCk6Ci0gICAgICAgICogZXdrL2V3a192aWV3LmgKKyAgICAgICAgKiBld2svZXdr
X3ZpZXcuaDoKIAogMjAxMS0wNi0yNyAgR3l1eW91bmcgS2ltICA8Z3l1eW91bmcua2ltQHNhbXN1
bmcuY29tPgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2F1dGhfc291
cC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2F1dGhfc291cC5jcHAKaW5kZXggZmIz
NmE5MTU5ZjI3YjI3MmJhMWYzMDI2NDZkY2M3ZjAxZmYxNWFkMS4uY2JjODc1NmVkODVlYmMxNWU3
N2JjNDFiMzNlMDUzM2M0MjVhMTkyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvZXdr
L2V3a19hdXRoX3NvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfYXV0aF9z
b3VwLmNwcApAQCAtNjMsMTAgKzYzLDEwIEBAIHN0YXRpYyB2b2lkIGV3a19hdXRoX3NvdXBfZGlh
bG9nX2luaXQoRXdrX1NvdXBfQXV0aF9EaWFsb2cqIGluc3RhbmNlKQogewogfQogCi1zdGF0aWMg
dm9pZCBld2tfYXV0aF9zb3VwX2RpYWxvZ19zZXNzaW9uX2ZlYXR1cmVfaW5pdChTb3VwU2Vzc2lv
bkZlYXR1cmVJbnRlcmZhY2UqIGZlYXR1cmVfaW50ZXJmYWNlLCBncG9pbnRlciBpbnRlcmZhY2Vf
ZGF0YSkKK3N0YXRpYyB2b2lkIGV3a19hdXRoX3NvdXBfZGlhbG9nX3Nlc3Npb25fZmVhdHVyZV9p
bml0KFNvdXBTZXNzaW9uRmVhdHVyZUludGVyZmFjZSogZmVhdHVyZUludGVyZmFjZSwgZ3BvaW50
ZXIgaW50ZXJmYWNlRGF0YSkKIHsKLSAgICBmZWF0dXJlX2ludGVyZmFjZS0+YXR0YWNoID0gYXR0
YWNoOwotICAgIGZlYXR1cmVfaW50ZXJmYWNlLT5kZXRhY2ggPSBkZXRhY2g7CisgICAgZmVhdHVy
ZUludGVyZmFjZS0+YXR0YWNoID0gYXR0YWNoOworICAgIGZlYXR1cmVJbnRlcmZhY2UtPmRldGFj
aCA9IGRldGFjaDsKIH0KIAogdm9pZCBld2tfYXV0aF9zb3VwX3Nob3dfZGlhbG9nX2NhbGxiYWNr
X3NldChFd2tfQXV0aF9TaG93X0RpYWxvZ19DYWxsYmFjayBjYWxsYmFjaykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfY29udGV4dG1lbnUuY3BwIGIvU291cmNlL1dlYktp
dC9lZmwvZXdrL2V3a19jb250ZXh0bWVudS5jcHAKaW5kZXggYWExNjE5ZmQ5MThmMTI2MzBhMDE3
MDIyYjZlZGZlM2U3M2NjYzhlNi4uNjIxYzc5YzcwNTFkM2U4MDBkYTA3NTU5ZTk0OGRhNWU5Yzg0
OTkzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19jb250ZXh0bWVudS5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19jb250ZXh0bWVudS5jcHAKQEAgLTky
LDExICs5MiwxMSBAQCBFaW5hX0Jvb2wgZXdrX2NvbnRleHRfbWVudV9kZXN0cm95KEV3a19Db250
ZXh0X01lbnUqIG1lbnUpCiAjZW5kaWYKIH0KIAotY29uc3QgRWluYV9MaXN0KiBld2tfY29udGV4
dF9tZW51X2l0ZW1fbGlzdF9nZXQoY29uc3QgRXdrX0NvbnRleHRfTWVudSogbykKK2NvbnN0IEVp
bmFfTGlzdCogZXdrX2NvbnRleHRfbWVudV9pdGVtX2xpc3RfZ2V0KGNvbnN0IEV3a19Db250ZXh0
X01lbnUqIG1lbnUpCiB7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKG8sIDAp
OworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChtZW51LCAwKTsKIAotICAgIHJl
dHVybiBvLT5pdGVtczsKKyAgICByZXR1cm4gbWVudS0+aXRlbXM7CiB9CiAKIEV3a19Db250ZXh0
X01lbnVfSXRlbSogZXdrX2NvbnRleHRfbWVudV9pdGVtX25ldyhFd2tfQ29udGV4dF9NZW51X0l0
ZW1fVHlwZSB0eXBlLApAQCAtMTQyLDY4ICsxNDIsNjggQEAgdm9pZCBld2tfY29udGV4dF9tZW51
X2l0ZW1fZnJlZShFd2tfQ29udGV4dF9NZW51X0l0ZW0qIGl0ZW0pCiAgICAgZnJlZShpdGVtKTsK
IH0KIAotRXdrX0NvbnRleHRfTWVudV9JdGVtX1R5cGUgZXdrX2NvbnRleHRfbWVudV9pdGVtX3R5
cGVfZ2V0KGNvbnN0IEV3a19Db250ZXh0X01lbnVfSXRlbSogbykKK0V3a19Db250ZXh0X01lbnVf
SXRlbV9UeXBlIGV3a19jb250ZXh0X21lbnVfaXRlbV90eXBlX2dldChjb25zdCBFd2tfQ29udGV4
dF9NZW51X0l0ZW0qIGl0ZW0pCiB7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFM
KG8sIEVXS19BQ1RJT05fVFlQRSk7Ci0gICAgcmV0dXJuIG8tPnR5cGU7CisgICAgRUlOQV9TQUZF
VFlfT05fTlVMTF9SRVRVUk5fVkFMKGl0ZW0sIEVXS19BQ1RJT05fVFlQRSk7CisgICAgcmV0dXJu
IGl0ZW0tPnR5cGU7CiB9CiAKLUVpbmFfQm9vbCBld2tfY29udGV4dF9tZW51X2l0ZW1fdHlwZV9z
ZXQoRXdrX0NvbnRleHRfTWVudV9JdGVtKiBvLCBFd2tfQ29udGV4dF9NZW51X0l0ZW1fVHlwZSB0
eXBlKQorRWluYV9Cb29sIGV3a19jb250ZXh0X21lbnVfaXRlbV90eXBlX3NldChFd2tfQ29udGV4
dF9NZW51X0l0ZW0qIGl0ZW0sIEV3a19Db250ZXh0X01lbnVfSXRlbV9UeXBlIHR5cGUpCiB7Ci0g
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKG8sIEVJTkFfRkFMU0UpOwotICAgIG8t
PnR5cGUgPSB0eXBlOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChpdGVtLCBF
SU5BX0ZBTFNFKTsKKyAgICBpdGVtLT50eXBlID0gdHlwZTsKICAgICByZXR1cm4gRUlOQV9UUlVF
OwogfQogCi1Fd2tfQ29udGV4dF9NZW51X0FjdGlvbiBld2tfY29udGV4dF9tZW51X2l0ZW1fYWN0
aW9uX2dldChjb25zdCBFd2tfQ29udGV4dF9NZW51X0l0ZW0qIG8pCitFd2tfQ29udGV4dF9NZW51
X0FjdGlvbiBld2tfY29udGV4dF9tZW51X2l0ZW1fYWN0aW9uX2dldChjb25zdCBFd2tfQ29udGV4
dF9NZW51X0l0ZW0qIGl0ZW0pCiB7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFM
KG8sIEVXS19DT05URVhUX01FTlVfSVRFTV9UQUdfTk9fQUNUSU9OKTsKLSAgICByZXR1cm4gby0+
YWN0aW9uOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChpdGVtLCBFV0tfQ09O
VEVYVF9NRU5VX0lURU1fVEFHX05PX0FDVElPTik7CisgICAgcmV0dXJuIGl0ZW0tPmFjdGlvbjsK
IH0KIAotRWluYV9Cb29sIGV3a19jb250ZXh0X21lbnVfaXRlbV9hY3Rpb25fc2V0KEV3a19Db250
ZXh0X01lbnVfSXRlbSogbywgRXdrX0NvbnRleHRfTWVudV9BY3Rpb24gYWN0aW9uKQorRWluYV9C
b29sIGV3a19jb250ZXh0X21lbnVfaXRlbV9hY3Rpb25fc2V0KEV3a19Db250ZXh0X01lbnVfSXRl
bSogaXRlbSwgRXdrX0NvbnRleHRfTWVudV9BY3Rpb24gYWN0aW9uKQogewotICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOX1ZBTChvLCBFSU5BX0ZBTFNFKTsKLSAgICBvLT5hY3Rpb24gPSBh
Y3Rpb247CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGl0ZW0sIEVJTkFfRkFM
U0UpOworICAgIGl0ZW0tPmFjdGlvbiA9IGFjdGlvbjsKICAgICByZXR1cm4gRUlOQV9UUlVFOwog
fQogCi1jb25zdCBjaGFyKiBld2tfY29udGV4dF9tZW51X2l0ZW1fdGl0bGVfZ2V0KGNvbnN0IEV3
a19Db250ZXh0X01lbnVfSXRlbSogbykKK2NvbnN0IGNoYXIqIGV3a19jb250ZXh0X21lbnVfaXRl
bV90aXRsZV9nZXQoY29uc3QgRXdrX0NvbnRleHRfTWVudV9JdGVtKiBpdGVtKQogewotICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChvLCAwKTsKLSAgICByZXR1cm4gby0+dGl0bGU7
CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGl0ZW0sIDApOworICAgIHJldHVy
biBpdGVtLT50aXRsZTsKIH0KIAotY29uc3QgY2hhciogZXdrX2NvbnRleHRfbWVudV9pdGVtX3Rp
dGxlX3NldChFd2tfQ29udGV4dF9NZW51X0l0ZW0qIG8sIGNvbnN0IGNoYXIqIHRpdGxlKQorY29u
c3QgY2hhciogZXdrX2NvbnRleHRfbWVudV9pdGVtX3RpdGxlX3NldChFd2tfQ29udGV4dF9NZW51
X0l0ZW0qIGl0ZW0sIGNvbnN0IGNoYXIqIHRpdGxlKQogewotICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOX1ZBTChvLCAwKTsKLSAgICBlaW5hX3N0cmluZ3NoYXJlX3JlcGxhY2UoJm8tPnRp
dGxlLCB0aXRsZSk7Ci0gICAgcmV0dXJuIG8tPnRpdGxlOworICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOX1ZBTChpdGVtLCAwKTsKKyAgICBlaW5hX3N0cmluZ3NoYXJlX3JlcGxhY2UoJml0
ZW0tPnRpdGxlLCB0aXRsZSk7CisgICAgcmV0dXJuIGl0ZW0tPnRpdGxlOwogfQogCi1FaW5hX0Jv
b2wgZXdrX2NvbnRleHRfbWVudV9pdGVtX2NoZWNrZWRfZ2V0KGNvbnN0IEV3a19Db250ZXh0X01l
bnVfSXRlbSogbykKK0VpbmFfQm9vbCBld2tfY29udGV4dF9tZW51X2l0ZW1fY2hlY2tlZF9nZXQo
Y29uc3QgRXdrX0NvbnRleHRfTWVudV9JdGVtKiBpdGVtKQogewotICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOX1ZBTChvLCBFSU5BX0ZBTFNFKTsKLSAgICByZXR1cm4gby0+Y2hlY2tlZDsK
KyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoaXRlbSwgRUlOQV9GQUxTRSk7Cisg
ICAgcmV0dXJuIGl0ZW0tPmNoZWNrZWQ7CiB9CiAKLUVpbmFfQm9vbCBld2tfY29udGV4dF9tZW51
X2l0ZW1fY2hlY2tlZF9zZXQoRXdrX0NvbnRleHRfTWVudV9JdGVtKiBvLCBFaW5hX0Jvb2wgY2hl
Y2tlZCkKK0VpbmFfQm9vbCBld2tfY29udGV4dF9tZW51X2l0ZW1fY2hlY2tlZF9zZXQoRXdrX0Nv
bnRleHRfTWVudV9JdGVtKiBpdGVtLCBFaW5hX0Jvb2wgY2hlY2tlZCkKIHsKLSAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwobywgRUlOQV9GQUxTRSk7Ci0gICAgby0+Y2hlY2tlZCA9
IGNoZWNrZWQ7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGl0ZW0sIEVJTkFf
RkFMU0UpOworICAgIGl0ZW0tPmNoZWNrZWQgPSBjaGVja2VkOwogICAgIHJldHVybiBFSU5BX1RS
VUU7CiB9CiAKLUVpbmFfQm9vbCBld2tfY29udGV4dF9tZW51X2l0ZW1fZW5hYmxlZF9nZXQoY29u
c3QgRXdrX0NvbnRleHRfTWVudV9JdGVtKiBvKQorRWluYV9Cb29sIGV3a19jb250ZXh0X21lbnVf
aXRlbV9lbmFibGVkX2dldChjb25zdCBFd2tfQ29udGV4dF9NZW51X0l0ZW0qIGl0ZW0pCiB7Ci0g
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKG8sIEVJTkFfRkFMU0UpOwotICAgIHJl
dHVybiBvLT5lbmFibGVkOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChpdGVt
LCBFSU5BX0ZBTFNFKTsKKyAgICByZXR1cm4gaXRlbS0+ZW5hYmxlZDsKIH0KIAotRWluYV9Cb29s
IGV3a19jb250ZXh0X21lbnVfaXRlbV9lbmFibGVkX3NldChFd2tfQ29udGV4dF9NZW51X0l0ZW0q
IG8sIEVpbmFfQm9vbCBlbmFibGVkKQorRWluYV9Cb29sIGV3a19jb250ZXh0X21lbnVfaXRlbV9l
bmFibGVkX3NldChFd2tfQ29udGV4dF9NZW51X0l0ZW0qIGl0ZW0sIEVpbmFfQm9vbCBlbmFibGVk
KQogewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChvLCBFSU5BX0ZBTFNFKTsK
LSAgICBvLT5lbmFibGVkID0gZW5hYmxlZDsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
Tl9WQUwoaXRlbSwgRUlOQV9GQUxTRSk7CisgICAgaXRlbS0+ZW5hYmxlZCA9IGVuYWJsZWQ7CiAg
ICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIApAQCAtMjU2LDExICsyNTYsMTEgQEAgRXdrX0NvbnRl
eHRfTWVudSogZXdrX2NvbnRleHRfbWVudV9uZXcoRXZhc19PYmplY3QqIHZpZXcsIFdlYkNvcmU6
OkNvbnRleHRNZW51Q28KICAqIEBzZWUgZXdrX2NvbnRleHRfbWVudV91bnJlZgogICogQHNlZSBl
d2tfY29udGV4dF9tZW51X2Rlc3Ryb3kKICAqLwotRWluYV9Cb29sIGV3a19jb250ZXh0X21lbnVf
ZnJlZShFd2tfQ29udGV4dF9NZW51KiBvKQorRWluYV9Cb29sIGV3a19jb250ZXh0X21lbnVfZnJl
ZShFd2tfQ29udGV4dF9NZW51KiBtZW51KQogewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOX1ZBTChvLCBFSU5BX0ZBTFNFKTsKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19j
YWxsKG8tPnZpZXcsICJjb250ZXh0bWVudSxmcmVlIiwgbyk7Ci0gICAgZXdrX2NvbnRleHRfbWVu
dV91bnJlZihvKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwobWVudSwgRUlO
QV9GQUxTRSk7CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChtZW51LT52aWV3
LCAiY29udGV4dG1lbnUsZnJlZSIsIG1lbnUpOworICAgIGV3a19jb250ZXh0X21lbnVfdW5yZWYo
bWVudSk7CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIApAQCAtMjc1LDcgKzI3NSw3IEBAIEVp
bmFfQm9vbCBld2tfY29udGV4dF9tZW51X2ZyZWUoRXdrX0NvbnRleHRfTWVudSogbykKICAqCiAg
KiBAc2VlIGV3a19jb250ZXh0X21lbnVfaXRlbV9uZXcKICAqLwotdm9pZCBld2tfY29udGV4dF9t
ZW51X2l0ZW1fYXBwZW5kKEV3a19Db250ZXh0X01lbnUqIG8sIFdlYkNvcmU6OkNvbnRleHRNZW51
SXRlbSYgY29yZSkKK3ZvaWQgZXdrX2NvbnRleHRfbWVudV9pdGVtX2FwcGVuZChFd2tfQ29udGV4
dF9NZW51KiBtZW51LCBXZWJDb3JlOjpDb250ZXh0TWVudUl0ZW0mIGNvcmUpCiB7CiAgICAgRXdr
X0NvbnRleHRfTWVudV9JdGVtX1R5cGUgdHlwZSA9IHN0YXRpY19jYXN0PEV3a19Db250ZXh0X01l
bnVfSXRlbV9UeXBlPihjb3JlLnR5cGUoKSk7CiAgICAgRXdrX0NvbnRleHRfTWVudV9BY3Rpb24g
YWN0aW9uID0gc3RhdGljX2Nhc3Q8RXdrX0NvbnRleHRfTWVudV9BY3Rpb24+KGNvcmUuYWN0aW9u
KCkpOwpAQCAtMjg1LDggKzI4NSw4IEBAIHZvaWQgZXdrX2NvbnRleHRfbWVudV9pdGVtX2FwcGVu
ZChFd2tfQ29udGV4dF9NZW51KiBvLCBXZWJDb3JlOjpDb250ZXh0TWVudUl0ZW0mCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZS5lbmFibGVkKCkpOwogICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKG1lbnVfaXRlbSk7CiAKLSAgICBvLT5pdGVtcyA9
IGVpbmFfbGlzdF9hcHBlbmQoby0+aXRlbXMsIG1lbnVfaXRlbSk7Ci0gICAgZXZhc19vYmplY3Rf
c21hcnRfY2FsbGJhY2tfY2FsbChvLT52aWV3LCAiY29udGV4dG1lbnUsaXRlbSxhcHBlbmRlZCIs
IG8pOworICAgIG1lbnUtPml0ZW1zID0gZWluYV9saXN0X2FwcGVuZChtZW51LT5pdGVtcywgbWVu
dV9pdGVtKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKG1lbnUtPnZpZXcs
ICJjb250ZXh0bWVudSxpdGVtLGFwcGVuZGVkIiwgbWVudSk7CiB9CiAKIC8qKgpAQCAtMzAxLDEy
ICszMDEsMTIgQEAgdm9pZCBld2tfY29udGV4dF9tZW51X2l0ZW1fYXBwZW5kKEV3a19Db250ZXh0
X01lbnUqIG8sIFdlYkNvcmU6OkNvbnRleHRNZW51SXRlbSYKICAqCiAgKiBAc2VlIGV3a19jb250
ZXh0X21lbnVfaXRlbV9saXN0X2dldAogICovCi1Fd2tfQ29udGV4dF9NZW51KiBld2tfY29udGV4
dF9tZW51X2N1c3RvbV9nZXQoY29uc3QgRXdrX0NvbnRleHRfTWVudSogbykKK0V3a19Db250ZXh0
X01lbnUqIGV3a19jb250ZXh0X21lbnVfY3VzdG9tX2dldChjb25zdCBFd2tfQ29udGV4dF9NZW51
KiBtZW51KQogewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChvLCAwKTsKKyAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwobWVudSwgMCk7CiAKLSAgICBldmFzX29i
amVjdF9zbWFydF9jYWxsYmFja19jYWxsKG8tPnZpZXcsICJjb250ZXh0bWVudSxjdXN0b21pemUi
LCBvLT5pdGVtcyk7Ci0gICAgcmV0dXJuIG87CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJh
Y2tfY2FsbChtZW51LT52aWV3LCAiY29udGV4dG1lbnUsY3VzdG9taXplIiwgbWVudS0+aXRlbXMp
OworICAgIHJldHVybiBtZW51OwogfQogCiAvKioKQEAgLTMxNiwxMSArMzE2LDExIEBAIEV3a19D
b250ZXh0X01lbnUqIGV3a19jb250ZXh0X21lbnVfY3VzdG9tX2dldChjb25zdCBFd2tfQ29udGV4
dF9NZW51KiBvKQogICoKICAqIEBwYXJhbSBvIHRoZSBjb250ZXh0IG1lbnUgb2JqZWN0CiAgKi8K
LXZvaWQgZXdrX2NvbnRleHRfbWVudV9zaG93KGNvbnN0IEV3a19Db250ZXh0X01lbnUqIG8pCit2
b2lkIGV3a19jb250ZXh0X21lbnVfc2hvdyhjb25zdCBFd2tfQ29udGV4dF9NZW51KiBtZW51KQog
ewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKG8pOworICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOKG1lbnUpOwogCi0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2Fs
bChvLT52aWV3LCAiY29udGV4dG1lbnUsc2hvdyIsIG8pOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0
X2NhbGxiYWNrX2NhbGwobWVudS0+dmlldywgImNvbnRleHRtZW51LHNob3ciLCBtZW51KTsKIH0K
IAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2Nvb2tpZXMu
Y3BwIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19jb29raWVzLmNwcAppbmRleCBhYTlmMmM4
OTExOGE5ZjE2YjUzMWQyYzhhODMyZjUwNjQxZGVjMzU0Li4wNGQ3MDQxNTdkMzU4ZTNiODZjOTcy
NWZjOTU4M2I4M2FhYzA4NTVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdr
X2Nvb2tpZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfY29va2llcy5jcHAK
QEAgLTE0MiwxNCArMTQyLDE0IEBAIHZvaWQgZXdrX2Nvb2tpZXNfY29va2llX2ZyZWUoRXdrX0Nv
b2tpZSogY29va2llKQogI2VuZGlmCiB9CiAKLXZvaWQgZXdrX2Nvb2tpZXNfcG9saWN5X3NldChF
d2tfQ29va2llX1BvbGljeSBwKQordm9pZCBld2tfY29va2llc19wb2xpY3lfc2V0KEV3a19Db29r
aWVfUG9saWN5IGNvb2tpZVBvbGljeSkKIHsKICNpZiBVU0UoU09VUCkKICAgICBTb3VwQ29va2ll
SmFyKiBjb29raWVKYXIgPSBXZWJDb3JlOjpkZWZhdWx0Q29va2llSmFyKCk7CiAgICAgU291cENv
b2tpZUphckFjY2VwdFBvbGljeSBwb2xpY3k7CiAKICAgICBwb2xpY3kgPSBTT1VQX0NPT0tJRV9K
QVJfQUNDRVBUX0FMV0FZUzsKLSAgICBzd2l0Y2ggKHApIHsKKyAgICBzd2l0Y2ggKGNvb2tpZVBv
bGljeSkgewogICAgIGNhc2UgRVdLX0NPT0tJRV9KQVJfQUNDRVBUX05FVkVSOgogICAgICAgICBw
b2xpY3kgPSBTT1VQX0NPT0tJRV9KQVJfQUNDRVBUX05FVkVSOwogICAgICAgICBicmVhazsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfZnJhbWUuY3BwIGIvU291cmNlL1dl
YktpdC9lZmwvZXdrL2V3a19mcmFtZS5jcHAKaW5kZXggYmM4ZjhhZTY2ZTNlNjhhNzMwNWVhZmEx
ZjljOTIzOTQ4NjJmNTkxYS4uN2RhZWJkODhjMDBiYjEwMGVjYjQ1YjI1ZTViMzc0YzA2OTBlMTYy
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19mcmFtZS5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19mcmFtZS5jcHAKQEAgLTg2LDUzICs4Niw1MyBAQCBz
dHJ1Y3QgRWluYV9JdGVyYXRvcl9Fd2tfRnJhbWUgewogfTsKIAogI2lmbmRlZiBFV0tfVFlQRV9D
SEVDSwotI2RlZmluZSBFV0tfRlJBTUVfVFlQRV9DSEVDSyhvLCAuLi4pIGRvIHsgfSB3aGlsZSAo
MCkKKyNkZWZpbmUgRVdLX0ZSQU1FX1RZUEVfQ0hFQ0soZXdrRnJhbWUsIC4uLikgZG8geyB9IHdo
aWxlICgwKQogI2Vsc2UKLSNkZWZpbmUgRVdLX0ZSQU1FX1RZUEVfQ0hFQ0sobywgLi4uKSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyNkZWZpbmUgRVdLX0ZSQU1FX1RZUEVf
Q0hFQ0soZXdrRnJhbWUsIC4uLikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CiAgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGNvbnN0IGNoYXIqIF90bXBfb3R5cGUgPSBldmFz
X29iamVjdF90eXBlX2dldChvKTsgICAgICAgICAgICAgICBcCisgICAgICAgIGNvbnN0IGNoYXIq
IF90bXBfb3R5cGUgPSBldmFzX29iamVjdF90eXBlX2dldChld2tGcmFtZSk7ICAgICAgICAgICAg
ICAgXAogICAgICAgICBpZiAoRUlOQV9VTkxJS0VMWShfdG1wX290eXBlICE9IEVXS19GUkFNRV9U
WVBFX1NUUikpIHsgICAgICAgICAgXAogICAgICAgICAgICAgRUlOQV9MT0dfQ1JJVCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAg
ICgiJXAgKCVzKSBpcyBub3Qgb2YgYW4gZXdrX2ZyYW1lISIsIG8sICAgICAgICAgICAgICAgICAg
XAorICAgICAgICAgICAgICAgICgiJXAgKCVzKSBpcyBub3Qgb2YgYW4gZXdrX2ZyYW1lISIsIGV3
a0ZyYW1lLCAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICBfdG1wX290eXBlID8g
X3RtcF9vdHlwZSA6ICIobnVsbCkiKTsgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAg
IHJldHVybiBfX1ZBX0FSR1NfXzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKICAgICB9IHdoaWxlICgwKQogI2VuZGlmCiAKLSNkZWZp
bmUgRVdLX0ZSQU1FX1NEX0dFVChvLCBwdHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgRXdrX0ZyYW1lX1NtYXJ0X0RhdGEqIHB0ciA9IHN0YXRpY19jYXN0PEV3a19GcmFt
ZV9TbWFydF9EYXRhKj4oZXZhc19vYmplY3Rfc21hcnRfZGF0YV9nZXQobykpCisjZGVmaW5lIEVX
S19GUkFNRV9TRF9HRVQoZXdrRnJhbWUsIHB0cikgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICBFd2tfRnJhbWVfU21hcnRfRGF0YSogcHRyID0gc3RhdGljX2Nhc3Q8RXdrX0Zy
YW1lX1NtYXJ0X0RhdGEqPihldmFzX29iamVjdF9zbWFydF9kYXRhX2dldChld2tGcmFtZSkpCiAK
LSNkZWZpbmUgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4obywgcHRyLCAuLi4pICAgICAgICAg
XAotICAgIEVXS19GUkFNRV9UWVBFX0NIRUNLKG8sIF9fVkFfQVJHU19fKTsgICAgICAgICAgICAg
ICBcCi0gICAgRVdLX0ZSQU1FX1NEX0dFVChvLCBwdHIpOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyNkZWZpbmUgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHB0ciwg
Li4uKSAgICAgICAgIFwKKyAgICBFV0tfRlJBTUVfVFlQRV9DSEVDSyhld2tGcmFtZSwgX19WQV9B
UkdTX18pOyAgICAgICAgICAgICAgIFwKKyAgICBFV0tfRlJBTUVfU0RfR0VUKGV3a0ZyYW1lLCBw
dHIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBpZiAoIXB0cikgeyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBDUklUSUNBTCgibm8g
c21hcnQgZGF0YSBmb3Igb2JqZWN0ICVwICglcykiLCAgICBcCi0gICAgICAgICAgICAgICAgIG8s
IGV2YXNfb2JqZWN0X3R5cGVfZ2V0KG8pKTsgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAg
ZXdrRnJhbWUsIGV2YXNfb2JqZWN0X3R5cGVfZ2V0KGV3a0ZyYW1lKSk7ICAgICAgICAgICBcCiAg
ICAgICAgIHJldHVybiBfX1ZBX0FSR1NfXzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
ICAgICB9CiAKIHN0YXRpYyBFdmFzX1NtYXJ0X0NsYXNzIF9wYXJlbnRfc2MgPSBFVkFTX1NNQVJU
X0NMQVNTX0lOSVRfTlVMTDsKIAogI2lmZGVmIEVXS19GUkFNRV9ERUJVRwotc3RhdGljIGlubGlu
ZSB2b2lkIF9ld2tfZnJhbWVfZGVidWcoRXZhc19PYmplY3QqIG8pCitzdGF0aWMgaW5saW5lIHZv
aWQgX2V3a19mcmFtZV9kZWJ1ZyhFdmFzX09iamVjdCogZXdrRnJhbWUpCiB7CiAgICAgRXZhc19P
YmplY3QqIGNsaXAsICogcGFyZW50OwogICAgIEV2YXNfQ29vcmQgeCwgeSwgdywgaCwgY3gsIGN5
LCBjdywgY2g7CiAgICAgaW50IHIsIGcsIGIsIGEsIGNyLCBjZywgY2IsIGNhOwogCi0gICAgZXZh
c19vYmplY3RfY29sb3JfZ2V0KG8sICZyLCAmZywgJmIsICZhKTsKLSAgICBldmFzX29iamVjdF9n
ZW9tZXRyeV9nZXQobywgJngsICZ5LCAmdywgJmgpOworICAgIGV2YXNfb2JqZWN0X2NvbG9yX2dl
dChld2tGcmFtZSwgJnIsICZnLCAmYiwgJmEpOworICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dl
dChld2tGcmFtZSwgJngsICZ5LCAmdywgJmgpOwogCi0gICAgY2xpcCA9IGV2YXNfb2JqZWN0X2Ns
aXBfZ2V0KG8pOworICAgIGNsaXAgPSBldmFzX29iamVjdF9jbGlwX2dldChld2tGcmFtZSk7CiAg
ICAgZXZhc19vYmplY3RfY29sb3JfZ2V0KGNsaXAsICZjciwgJmNnLCAmY2IsICZjYSk7CiAgICAg
ZXZhc19vYmplY3RfZ2VvbWV0cnlfZ2V0KGNsaXAsICZjeCwgJmN5LCAmY3csICZjaCk7CiAKICAg
ICBmcHJpbnRmKHN0ZGVyciwgIiVwOiB0eXBlPSVzIG5hbWU9JXMsIHZpc2libGU9JWQsIGNvbG9y
PSUwMnglMDJ4JTAyeCUwMngsICVkLCVkKyVkeCVkLCBjbGlwcGVyPSVwICglZCwgJTAyeCUwMngl
MDJ4JTAyeCwgJWQsJWQrJWR4JWQpXG4iLAotICAgICAgICAgICAgbywgZXZhc19vYmplY3RfdHlw
ZV9nZXQobyksIGV2YXNfb2JqZWN0X25hbWVfZ2V0KG8pLCBldmFzX29iamVjdF92aXNpYmxlX2dl
dChvKSwKKyAgICAgICAgICAgIGV3a0ZyYW1lLCBldmFzX29iamVjdF90eXBlX2dldChld2tGcmFt
ZSksIGV2YXNfb2JqZWN0X25hbWVfZ2V0KGV3a0ZyYW1lKSwgZXZhc19vYmplY3RfdmlzaWJsZV9n
ZXQoZXdrRnJhbWUpLAogICAgICAgICAgICAgciwgZywgYiwgYSwgeCwgeSwgdywgaCwKICAgICAg
ICAgICAgIGNsaXAsIGV2YXNfb2JqZWN0X3Zpc2libGVfZ2V0KGNsaXApLCBjciwgY2csIGNiLCBj
YSwgY3gsIGN5LCBjdywgY2gpOwotICAgIHBhcmVudCA9IGV2YXNfb2JqZWN0X3NtYXJ0X3BhcmVu
dF9nZXQobyk7CisgICAgcGFyZW50ID0gZXZhc19vYmplY3Rfc21hcnRfcGFyZW50X2dldChld2tG
cmFtZSk7CiAgICAgaWYgKCFwYXJlbnQpCiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiXG4iKTsK
ICAgICBlbHNlCkBAIC0xNzEsMTQgKzE3MSwxNCBAQCBzdGF0aWMgRWluYV9Cb29sIF9ld2tfZnJh
bWVfY2hpbGRyZW5faXRlcmF0b3JfbmV4dChFaW5hX0l0ZXJhdG9yX0V3a19GcmFtZSogaXQsCiAg
ICAgcmV0dXJuIEVJTkFfRkFMU0U7CiB9CiAKLXN0YXRpYyBFdmFzX09iamVjdCogX2V3a19mcmFt
ZV9jaGlsZHJlbl9pdGVyYXRvcl9nZXRfY29udGFpbmVyKEVpbmFfSXRlcmF0b3JfRXdrX0ZyYW1l
KiBpdCkKK3N0YXRpYyBFdmFzX09iamVjdCogX2V3a19mcmFtZV9jaGlsZHJlbl9pdGVyYXRvcl9n
ZXRfY29udGFpbmVyKEVpbmFfSXRlcmF0b3JfRXdrX0ZyYW1lKiBpdGVyYXRvcikKIHsKLSAgICBy
ZXR1cm4gaXQtPm9iajsKKyAgICByZXR1cm4gaXRlcmF0b3ItPm9iajsKIH0KIAotc3RhdGljIHZv
aWQgX2V3a19mcmFtZV9zbWFydF9hZGQoRXZhc19PYmplY3QqIG8pCitzdGF0aWMgdm9pZCBfZXdr
X2ZyYW1lX3NtYXJ0X2FkZChFdmFzX09iamVjdCogZXdrRnJhbWUpCiB7Ci0gICAgRVdLX0ZSQU1F
X1NEX0dFVChvLCBzZCk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVChld2tGcmFtZSwgc2QpOwogCiAg
ICAgaWYgKCFzZCkgewogICAgICAgICBzZCA9IHN0YXRpY19jYXN0PEV3a19GcmFtZV9TbWFydF9E
YXRhKj4oY2FsbG9jKDEsIHNpemVvZihFd2tfRnJhbWVfU21hcnRfRGF0YSkpKTsKQEAgLTE4Niwx
MiArMTg2LDEyIEBAIHN0YXRpYyB2b2lkIF9ld2tfZnJhbWVfc21hcnRfYWRkKEV2YXNfT2JqZWN0
KiBvKQogICAgICAgICAgICAgQ1JJVElDQUwoImNvdWxkIG5vdCBhbGxvY2F0ZSBFd2tfRnJhbWVf
U21hcnRfRGF0YSIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGV2
YXNfb2JqZWN0X3NtYXJ0X2RhdGFfc2V0KG8sIHNkKTsKKyAgICAgICAgZXZhc19vYmplY3Rfc21h
cnRfZGF0YV9zZXQoZXdrRnJhbWUsIHNkKTsKICAgICB9CiAKLSAgICBzZC0+c2VsZiA9IG87Cisg
ICAgc2QtPnNlbGYgPSBld2tGcmFtZTsKIAotICAgIF9wYXJlbnRfc2MuYWRkKG8pOworICAgIF9w
YXJlbnRfc2MuYWRkKGV3a0ZyYW1lKTsKICAgICBldmFzX29iamVjdF9zdGF0aWNfY2xpcF9zZXQo
c2QtPmJhc2UuY2xpcHBlciwgRUlOQV9GQUxTRSk7CiAgICAgZXZhc19vYmplY3RfbW92ZShzZC0+
YmFzZS5jbGlwcGVyLCAwLCAwKTsKICAgICBldmFzX29iamVjdF9yZXNpemUoc2QtPmJhc2UuY2xp
cHBlciwgMCwgMCk7CkBAIC0yMjgsMTUgKzIyOCwxNSBAQCBzdGF0aWMgdm9pZCBfZXdrX2ZyYW1l
X3NtYXJ0X2FkZChFdmFzX09iamVjdCogbykKICAgICBpZiAoaSA+IDYpCiAgICAgICAgIGkgPSAw
OwogCi0gICAgZXZhc19vYmplY3Rfc21hcnRfbWVtYmVyX2FkZChzZC0+cmVnaW9uLCBvKTsKKyAg
ICBldmFzX29iamVjdF9zbWFydF9tZW1iZXJfYWRkKHNkLT5yZWdpb24sIGV3a0ZyYW1lKTsKICAg
ICBldmFzX29iamVjdF9oaWRlKHNkLT5yZWdpb24pOwogI2VuZGlmCiB9CiAKLXN0YXRpYyB2b2lk
IF9ld2tfZnJhbWVfc21hcnRfZGVsKEV2YXNfT2JqZWN0KiBvKQorc3RhdGljIHZvaWQgX2V3a19m
cmFtZV9zbWFydF9kZWwoRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewotICAgIFdSTigibz0lcCIs
IG8pOyAvLyBYWFggUkVNT1ZFIE1FIExBVEVSCi0gICAgRVdLX0ZSQU1FX1NEX0dFVChvLCBzZCk7
CisgICAgV1JOKCJld2tGcmFtZT0lcCIsIGV3a0ZyYW1lKTsgLy8gWFhYIFJFTU9WRSBNRSBMQVRF
UgorICAgIEVXS19GUkFNRV9TRF9HRVQoZXdrRnJhbWUsIHNkKTsKIAogICAgIGlmIChzZCkgewog
ICAgICAgICBpZiAoc2QtPmZyYW1lKSB7CkBAIC0yNTIsMjEgKzI1MiwyMSBAQCBzdGF0aWMgdm9p
ZCBfZXdrX2ZyYW1lX3NtYXJ0X2RlbChFdmFzX09iamVjdCogbykKICAgICAgICAgZWluYV9zdHJp
bmdzaGFyZV9kZWwoc2QtPm5hbWUpOwogICAgIH0KIAotICAgIF9wYXJlbnRfc2MuZGVsKG8pOwor
ICAgIF9wYXJlbnRfc2MuZGVsKGV3a0ZyYW1lKTsKIH0KIAotc3RhdGljIHZvaWQgX2V3a19mcmFt
ZV9zbWFydF9yZXNpemUoRXZhc19PYmplY3QqIG8sIEV2YXNfQ29vcmQgdywgRXZhc19Db29yZCBo
KQorc3RhdGljIHZvaWQgX2V3a19mcmFtZV9zbWFydF9yZXNpemUoRXZhc19PYmplY3QqIGV3a0Zy
YW1lLCBFdmFzX0Nvb3JkIHdpZHRoLCBFdmFzX0Nvb3JkIGhlaWdodCkKIHsKLSAgICBFV0tfRlJB
TUVfU0RfR0VUKG8sIHNkKTsKLSAgICBldmFzX29iamVjdF9yZXNpemUoc2QtPmJhc2UuY2xpcHBl
ciwgdywgaCk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVChld2tGcmFtZSwgc2QpOworICAgIGV2YXNf
b2JqZWN0X3Jlc2l6ZShzZC0+YmFzZS5jbGlwcGVyLCB3aWR0aCwgaGVpZ2h0KTsKIAogI2lmZGVm
IEVXS19GUkFNRV9ERUJVRwotICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShzZC0+cmVnaW9uLCB3LCBo
KTsKKyAgICBldmFzX29iamVjdF9yZXNpemUoc2QtPnJlZ2lvbiwgd2lkdGgsIGhlaWdodCk7CiAg
ICAgRXZhc19Db29yZCB4LCB5OwotICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldChzZC0+cmVn
aW9uLCAmeCwgJnksICZ3LCAmaCk7CisgICAgZXZhc19vYmplY3RfZ2VvbWV0cnlfZ2V0KHNkLT5y
ZWdpb24sICZ4LCAmeSwgJndpZHRoLCAmaGVpZ2h0KTsKICAgICBJTkYoInJlZ2lvbj0lcCwgdmlz
aWJsZT0lZCwgZ2VvPSVkLCVkICsgJWR4JWQiLAotICAgICAgICBzZC0+cmVnaW9uLCBldmFzX29i
amVjdF92aXNpYmxlX2dldChzZC0+cmVnaW9uKSwgeCwgeSwgdywgaCk7Ci0gICAgX2V3a19mcmFt
ZV9kZWJ1ZyhvKTsKKyAgICAgICAgc2QtPnJlZ2lvbiwgZXZhc19vYmplY3RfdmlzaWJsZV9nZXQo
c2QtPnJlZ2lvbiksIHgsIHksIHdpZHRoLCBoZWlnaHQpOworICAgIF9ld2tfZnJhbWVfZGVidWco
ZXdrRnJhbWUpOwogI2VuZGlmCiB9CiAKQEAgLTI5MiwxNSArMjkyLDE1IEBAIHN0YXRpYyBpbmxp
bmUgRXZhc19TbWFydCogX2V3a19mcmFtZV9zbWFydF9jbGFzc19uZXcodm9pZCkKICAgICByZXR1
cm4gc21hcnQ7CiB9CiAKLUV2YXNfT2JqZWN0KiBld2tfZnJhbWVfdmlld19nZXQoY29uc3QgRXZh
c19PYmplY3QqIG8pCitFdmFzX09iamVjdCogZXdrX2ZyYW1lX3ZpZXdfZ2V0KGNvbnN0IEV2YXNf
T2JqZWN0KiBld2tGcmFtZSkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihvLCBz
ZCwgMCk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCAwKTsK
ICAgICByZXR1cm4gc2QtPnZpZXc7CiB9CiAKLUVpbmFfSXRlcmF0b3IqIGV3a19mcmFtZV9jaGls
ZHJlbl9pdGVyYXRvcl9uZXcoRXZhc19PYmplY3QqIG8pCitFaW5hX0l0ZXJhdG9yKiBld2tfZnJh
bWVfY2hpbGRyZW5faXRlcmF0b3JfbmV3KEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsKLSAgICBF
V0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgMCk7CisgICAgRVdLX0ZSQU1FX1NEX0dF
VF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCAwKTsKICAgICBFaW5hX0l0ZXJhdG9yX0V3a19GcmFt
ZSogaXQgPSBzdGF0aWNfY2FzdDxFaW5hX0l0ZXJhdG9yX0V3a19GcmFtZSo+CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKGNhbGxvYygxLCBzaXplb2YoRWluYV9JdGVyYXRvcl9F
d2tfRnJhbWUpKSk7CiAgICAgaWYgKCFpdCkKQEAgLTMxMCwyMyArMzEwLDIzIEBAIEVpbmFfSXRl
cmF0b3IqIGV3a19mcmFtZV9jaGlsZHJlbl9pdGVyYXRvcl9uZXcoRXZhc19PYmplY3QqIG8pCiAg
ICAgaXQtPmJhc2UubmV4dCA9IEZVTkNfSVRFUkFUT1JfTkVYVChfZXdrX2ZyYW1lX2NoaWxkcmVu
X2l0ZXJhdG9yX25leHQpOwogICAgIGl0LT5iYXNlLmdldF9jb250YWluZXIgPSBGVU5DX0lURVJB
VE9SX0dFVF9DT05UQUlORVIoX2V3a19mcmFtZV9jaGlsZHJlbl9pdGVyYXRvcl9nZXRfY29udGFp
bmVyKTsKICAgICBpdC0+YmFzZS5mcmVlID0gRlVOQ19JVEVSQVRPUl9GUkVFKGZyZWUpOwotICAg
IGl0LT5vYmogPSBvOworICAgIGl0LT5vYmogPSBld2tGcmFtZTsKICAgICBpdC0+Y3VycmVudElu
ZGV4ID0gMDsKICAgICByZXR1cm4gJml0LT5iYXNlOwogfQogCi1FdmFzX09iamVjdCogZXdrX2Zy
YW1lX2NoaWxkX2ZpbmQoRXZhc19PYmplY3QqIG8sIGNvbnN0IGNoYXIqIG5hbWUpCitFdmFzX09i
amVjdCogZXdrX2ZyYW1lX2NoaWxkX2ZpbmQoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBjb25zdCBj
aGFyKiBuYW1lKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAwKTsK
KyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIDApOwogICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChuYW1lLCAwKTsKICAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCAwKTsKICAgICBXVEY6OlN0cmluZyBzID0gV1RG
OjpTdHJpbmc6OmZyb21VVEY4KG5hbWUpOwogICAgIHJldHVybiBraXQoc2QtPmZyYW1lLT50cmVl
KCktPmZpbmQoV1RGOjpBdG9taWNTdHJpbmcocykpKTsKIH0KIAotRWluYV9Cb29sIGV3a19mcmFt
ZV91cmlfc2V0KEV2YXNfT2JqZWN0KiBvLCBjb25zdCBjaGFyKiB1cmkpCitFaW5hX0Jvb2wgZXdr
X2ZyYW1lX3VyaV9zZXQoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBjb25zdCBjaGFyKiB1cmkpCiB7
Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAg
IEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7CiAg
ICAgV2ViQ29yZTo6S1VSTCBrdXJsKFdlYkNvcmU6OktVUkwoKSwgV1RGOjpTdHJpbmc6OmZyb21V
VEY4KHVyaSkpOwogICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCByZXEoa3VybCk7CiAgICAg
V2ViQ29yZTo6RnJhbWVMb2FkZXIqIGxvYWRlciA9IHNkLT5mcmFtZS0+bG9hZGVyKCk7CkBAIC0z
MzQsMjEgKzMzNCwyMSBAQCBFaW5hX0Jvb2wgZXdrX2ZyYW1lX3VyaV9zZXQoRXZhc19PYmplY3Qq
IG8sIGNvbnN0IGNoYXIqIHVyaSkKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi1jb25zdCBj
aGFyKiBld2tfZnJhbWVfdXJpX2dldChjb25zdCBFdmFzX09iamVjdCogbykKK2NvbnN0IGNoYXIq
IGV3a19mcmFtZV91cmlfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsKLSAgICBF
V0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgMCk7CisgICAgRVdLX0ZSQU1FX1NEX0dF
VF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCAwKTsKICAgICByZXR1cm4gc2QtPnVyaTsKIH0KIAot
Y29uc3QgY2hhciogZXdrX2ZyYW1lX3RpdGxlX2dldChjb25zdCBFdmFzX09iamVjdCogbykKK2Nv
bnN0IGNoYXIqIGV3a19mcmFtZV90aXRsZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1l
KQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAwKTsKKyAgICBFV0tf
RlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIDApOwogICAgIHJldHVybiBzZC0+
dGl0bGU7CiB9CiAKLWNvbnN0IGNoYXIqIGV3a19mcmFtZV9uYW1lX2dldChjb25zdCBFdmFzX09i
amVjdCogbykKK2NvbnN0IGNoYXIqIGV3a19mcmFtZV9uYW1lX2dldChjb25zdCBFdmFzX09iamVj
dCogZXdrRnJhbWUpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIDAp
OworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgMCk7CiAKICAg
ICBpZiAoIXNkLT5mcmFtZSkgewogICAgICAgICBFUlIoImNvdWxkIG5vdCBnZXQgbmFtZSBvZiB1
bmluaXRpYWxpemVkIGZyYW1lLiIpOwpAQCAtMzY1LDkwICszNjUsOTAgQEAgY29uc3QgY2hhciog
ZXdrX2ZyYW1lX25hbWVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQogICAgIHJldHVybiBzZC0+
bmFtZTsKIH0KIAotRWluYV9Cb29sIGV3a19mcmFtZV9jb250ZW50c19zaXplX2dldChjb25zdCBF
dmFzX09iamVjdCogbywgRXZhc19Db29yZCogdywgRXZhc19Db29yZCogaCkKK0VpbmFfQm9vbCBl
d2tfZnJhbWVfY29udGVudHNfc2l6ZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBF
dmFzX0Nvb3JkKiB3aWR0aCwgRXZhc19Db29yZCogaGVpZ2h0KQogewotICAgIGlmICh3KQotICAg
ICAgICAqdyA9IDA7Ci0gICAgaWYgKGgpCi0gICAgICAgICpoID0gMDsKLSAgICBFV0tfRlJBTUVf
U0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgaWYgKHcpCi0gICAgICAg
ICp3ID0gc2QtPmNvbnRlbnRzX3NpemUudzsKLSAgICBpZiAoaCkKLSAgICAgICAgKmggPSBzZC0+
Y29udGVudHNfc2l6ZS5oOworICAgIGlmICh3aWR0aCkKKyAgICAgICAgKndpZHRoID0gMDsKKyAg
ICBpZiAoaGVpZ2h0KQorICAgICAgICAqaGVpZ2h0ID0gMDsKKyAgICBFV0tfRlJBTUVfU0RfR0VU
X09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOworICAgIGlmICh3aWR0aCkKKyAg
ICAgICAgKndpZHRoID0gc2QtPmNvbnRlbnRzX3NpemUudzsKKyAgICBpZiAoaGVpZ2h0KQorICAg
ICAgICAqaGVpZ2h0ID0gc2QtPmNvbnRlbnRzX3NpemUuaDsKICAgICByZXR1cm4gRUlOQV9UUlVF
OwogfQogCi1zdGF0aWMgRWluYV9Cb29sIF9ld2tfZnJhbWVfY29udGVudHNfc2V0X2ludGVybmFs
KEV3a19GcmFtZV9TbWFydF9EYXRhKiBzZCwgY29uc3QgY2hhciogY29udGVudHMsIHNpemVfdCBj
b250ZW50c19zaXplLCBjb25zdCBjaGFyKiBtaW1lX3R5cGUsIGNvbnN0IGNoYXIqIGVuY29kaW5n
LCBjb25zdCBjaGFyKiBiYXNlX3VyaSwgY29uc3QgY2hhciogdW5yZWFjaGFibGVfdXJpKQorc3Rh
dGljIEVpbmFfQm9vbCBfZXdrX2ZyYW1lX2NvbnRlbnRzX3NldF9pbnRlcm5hbChFd2tfRnJhbWVf
U21hcnRfRGF0YSogc21hcnREYXRhLCBjb25zdCBjaGFyKiBjb250ZW50cywgc2l6ZV90IGNvbnRl
bnRzU2l6ZSwgY29uc3QgY2hhciogbWltZVR5cGUsIGNvbnN0IGNoYXIqIGVuY29kaW5nLCBjb25z
dCBjaGFyKiBiYXNlVXJpLCBjb25zdCBjaGFyKiB1bnJlYWNoYWJsZVVyaSkKIHsKICAgICBzaXpl
X3QgbGVuID0gc3RybGVuKGNvbnRlbnRzKTsKLSAgICBpZiAoY29udGVudHNfc2l6ZSA8IDEgfHwg
Y29udGVudHNfc2l6ZSA+IGxlbikKLSAgICAgICAgY29udGVudHNfc2l6ZSA9IGxlbjsKLSAgICBp
ZiAoIW1pbWVfdHlwZSkKLSAgICAgICAgbWltZV90eXBlID0gInRleHQvaHRtbCI7CisgICAgaWYg
KGNvbnRlbnRzU2l6ZSA8IDEgfHwgY29udGVudHNTaXplID4gbGVuKQorICAgICAgICBjb250ZW50
c1NpemUgPSBsZW47CisgICAgaWYgKCFtaW1lVHlwZSkKKyAgICAgICAgbWltZVR5cGUgPSAidGV4
dC9odG1sIjsKICAgICBpZiAoIWVuY29kaW5nKQogICAgICAgICBlbmNvZGluZyA9ICJVVEYtOCI7
Ci0gICAgaWYgKCFiYXNlX3VyaSkKLSAgICAgICAgYmFzZV91cmkgPSAiYWJvdXQ6YmxhbmsiOwor
ICAgIGlmICghYmFzZVVyaSkKKyAgICAgICAgYmFzZVVyaSA9ICJhYm91dDpibGFuayI7CiAKLSAg
ICBXZWJDb3JlOjpLVVJMIGJhc2VLVVJMKFdlYkNvcmU6OktVUkwoKSwgV1RGOjpTdHJpbmc6OmZy
b21VVEY4KGJhc2VfdXJpKSk7CisgICAgV2ViQ29yZTo6S1VSTCBiYXNlS1VSTChXZWJDb3JlOjpL
VVJMKCksIFdURjo6U3RyaW5nOjpmcm9tVVRGOChiYXNlVXJpKSk7CiAgICAgV2ViQ29yZTo6S1VS
TCB1bnJlYWNoYWJsZUtVUkw7Ci0gICAgaWYgKHVucmVhY2hhYmxlX3VyaSkKLSAgICAgICAgdW5y
ZWFjaGFibGVLVVJMID0gV2ViQ29yZTo6S1VSTChXZWJDb3JlOjpLVVJMKCksIFdURjo6U3RyaW5n
Ojpmcm9tVVRGOCh1bnJlYWNoYWJsZV91cmkpKTsKKyAgICBpZiAodW5yZWFjaGFibGVVcmkpCisg
ICAgICAgIHVucmVhY2hhYmxlS1VSTCA9IFdlYkNvcmU6OktVUkwoV2ViQ29yZTo6S1VSTCgpLCBX
VEY6OlN0cmluZzo6ZnJvbVVURjgodW5yZWFjaGFibGVVcmkpKTsKICAgICBlbHNlCiAgICAgICAg
IHVucmVhY2hhYmxlS1VSTCA9IFdlYkNvcmU6OktVUkwoKTsKIAotICAgIFdURjo6UmVmUHRyPFdl
YkNvcmU6OlNoYXJlZEJ1ZmZlcj4gYnVmZmVyID0gV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpjcmVh
dGUoY29udGVudHMsIGNvbnRlbnRzX3NpemUpOworICAgIFdURjo6UmVmUHRyPFdlYkNvcmU6OlNo
YXJlZEJ1ZmZlcj4gYnVmZmVyID0gV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpjcmVhdGUoY29udGVu
dHMsIGNvbnRlbnRzU2l6ZSk7CiAgICAgV2ViQ29yZTo6U3Vic3RpdHV0ZURhdGEgc3Vic3RpdHV0
ZURhdGEKICAgICAgICAgKGJ1ZmZlci5yZWxlYXNlKCksCi0gICAgICAgIFdURjo6U3RyaW5nOjpm
cm9tVVRGOChtaW1lX3R5cGUpLAorICAgICAgICBXVEY6OlN0cmluZzo6ZnJvbVVURjgobWltZVR5
cGUpLAogICAgICAgICBXVEY6OlN0cmluZzo6ZnJvbVVURjgoZW5jb2RpbmcpLAogICAgICAgICBi
YXNlS1VSTCwgdW5yZWFjaGFibGVLVVJMKTsKICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Qg
cmVxdWVzdChiYXNlS1VSTCk7CiAKLSAgICBzZC0+ZnJhbWUtPmxvYWRlcigpLT5sb2FkKHJlcXVl
c3QsIHN1YnN0aXR1dGVEYXRhLCBmYWxzZSk7CisgICAgc21hcnREYXRhLT5mcmFtZS0+bG9hZGVy
KCktPmxvYWQocmVxdWVzdCwgc3Vic3RpdHV0ZURhdGEsIGZhbHNlKTsKICAgICByZXR1cm4gRUlO
QV9UUlVFOwogfQogCi1FaW5hX0Jvb2wgZXdrX2ZyYW1lX2NvbnRlbnRzX3NldChFdmFzX09iamVj
dCogbywgY29uc3QgY2hhciogY29udGVudHMsIHNpemVfdCBjb250ZW50c19zaXplLCBjb25zdCBj
aGFyKiBtaW1lX3R5cGUsIGNvbnN0IGNoYXIqIGVuY29kaW5nLCBjb25zdCBjaGFyKiBiYXNlX3Vy
aSkKK0VpbmFfQm9vbCBld2tfZnJhbWVfY29udGVudHNfc2V0KEV2YXNfT2JqZWN0KiBld2tGcmFt
ZSwgY29uc3QgY2hhciogY29udGVudHMsIHNpemVfdCBjb250ZW50c1NpemUsIGNvbnN0IGNoYXIq
IG1pbWVUeXBlLCBjb25zdCBjaGFyKiBlbmNvZGluZywgY29uc3QgY2hhciogYmFzZVVyaSkKIHsK
LSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAg
RVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsKICAg
ICBFSU5BX1NBRkVUWV9PTl9GQUxTRV9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7
CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGNvbnRlbnRzLCBFSU5BX0ZBTFNF
KTsKICAgICByZXR1cm4gX2V3a19mcmFtZV9jb250ZW50c19zZXRfaW50ZXJuYWwKLSAgICAgICAg
ICAgICAgIChzZCwgY29udGVudHMsIGNvbnRlbnRzX3NpemUsIG1pbWVfdHlwZSwgZW5jb2Rpbmcs
IGJhc2VfdXJpLCAwKTsKKyAgICAgICAgICAgICAgIChzZCwgY29udGVudHMsIGNvbnRlbnRzU2l6
ZSwgbWltZVR5cGUsIGVuY29kaW5nLCBiYXNlVXJpLCAwKTsKIH0KIAotRWluYV9Cb29sIGV3a19m
cmFtZV9jb250ZW50c19hbHRlcm5hdGVfc2V0KEV2YXNfT2JqZWN0KiBvLCBjb25zdCBjaGFyKiBj
b250ZW50cywgc2l6ZV90IGNvbnRlbnRzX3NpemUsIGNvbnN0IGNoYXIqIG1pbWVfdHlwZSwgY29u
c3QgY2hhciogZW5jb2RpbmcsIGNvbnN0IGNoYXIqIGJhc2VfdXJpLCBjb25zdCBjaGFyKiB1bnJl
YWNoYWJsZV91cmkpCitFaW5hX0Jvb2wgZXdrX2ZyYW1lX2NvbnRlbnRzX2FsdGVybmF0ZV9zZXQo
RXZhc19PYmplY3QqIGV3a0ZyYW1lLCBjb25zdCBjaGFyKiBjb250ZW50cywgc2l6ZV90IGNvbnRl
bnRzU2l6ZSwgY29uc3QgY2hhciogbWltZVR5cGUsIGNvbnN0IGNoYXIqIGVuY29kaW5nLCBjb25z
dCBjaGFyKiBiYXNlVXJpLCBjb25zdCBjaGFyKiB1bnJlYWNoYWJsZVVyaSkKIHsKLSAgICBFV0tf
RlJBTUVfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX0ZSQU1F
X1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NB
RkVUWV9PTl9GQUxTRV9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7CiAgICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGNvbnRlbnRzLCBFSU5BX0ZBTFNFKTsKLSAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodW5yZWFjaGFibGVfdXJpLCBFSU5BX0ZBTFNF
KTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodW5yZWFjaGFibGVVcmksIEVJ
TkFfRkFMU0UpOwogICAgIHJldHVybiBfZXdrX2ZyYW1lX2NvbnRlbnRzX3NldF9pbnRlcm5hbAot
ICAgICAgICAgICAgICAgKHNkLCBjb250ZW50cywgY29udGVudHNfc2l6ZSwgbWltZV90eXBlLCBl
bmNvZGluZywgYmFzZV91cmksCi0gICAgICAgICAgICAgICB1bnJlYWNoYWJsZV91cmkpOworICAg
ICAgICAgICAgICAgKHNkLCBjb250ZW50cywgY29udGVudHNTaXplLCBtaW1lVHlwZSwgZW5jb2Rp
bmcsIGJhc2VVcmksCisgICAgICAgICAgICAgICB1bnJlYWNoYWJsZVVyaSk7CiB9CiAKLUVpbmFf
Qm9vbCBld2tfZnJhbWVfc2NyaXB0X2V4ZWN1dGUoRXZhc19PYmplY3QqIG8sIGNvbnN0IGNoYXIq
IHNjcmlwdCkKK0VpbmFfQm9vbCBld2tfZnJhbWVfc2NyaXB0X2V4ZWN1dGUoRXZhc19PYmplY3Qq
IGV3a0ZyYW1lLCBjb25zdCBjaGFyKiBzY3JpcHQpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9P
Ul9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVU
VVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05fRkFMU0Vf
UkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOX1ZBTChzY3JpcHQsIEVJTkFfRkFMU0UpOwogICAgIHNkLT5mcmFtZS0+c2NyaXB0
KCktPmV4ZWN1dGVTY3JpcHQoV1RGOjpTdHJpbmc6OmZyb21VVEY4KHNjcmlwdCksIHRydWUpOwog
ICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLUVpbmFfQm9vbCBld2tfZnJhbWVfZWRpdGFibGVf
Z2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQorRWluYV9Cb29sIGV3a19mcmFtZV9lZGl0YWJsZV9n
ZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRf
T1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JF
VFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOwogICAgIHJldHVybiBzZC0+ZWRpdGFi
bGU7CiB9CiAKLUVpbmFfQm9vbCBld2tfZnJhbWVfZWRpdGFibGVfc2V0KEV2YXNfT2JqZWN0KiBv
LCBFaW5hX0Jvb2wgZWRpdGFibGUpCitFaW5hX0Jvb2wgZXdrX2ZyYW1lX2VkaXRhYmxlX3NldChF
dmFzX09iamVjdCogZXdrRnJhbWUsIEVpbmFfQm9vbCBlZGl0YWJsZSkKIHsKLSAgICBFV0tfRlJB
TUVfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX0ZSQU1FX1NE
X0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKICAgICBlZGl0YWJs
ZSA9ICEhZWRpdGFibGU7CiAgICAgaWYgKHNkLT5lZGl0YWJsZSA9PSBlZGl0YWJsZSkKQEAgLTQ1
OCw5ICs0NTgsOSBAQCBFaW5hX0Jvb2wgZXdrX2ZyYW1lX2VkaXRhYmxlX3NldChFdmFzX09iamVj
dCogbywgRWluYV9Cb29sIGVkaXRhYmxlKQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLWNo
YXIqIGV3a19mcmFtZV9zZWxlY3Rpb25fZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQorY2hhciog
ZXdrX2ZyYW1lX3NlbGVjdGlvbl9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewot
ICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAwKTsKKyAgICBFV0tfRlJBTUVf
U0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIDApOwogICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIDApOwogICAgIFdURjo6Q1N0cmluZyBzID0gc2QtPmZy
YW1lLT5lZGl0b3IoKS0+c2VsZWN0ZWRUZXh0KCkudXRmOCgpOwogICAgIGlmIChzLmlzTnVsbCgp
KQpAQCAtNDY4LDQ1ICs0NjgsNDUgQEAgY2hhciogZXdrX2ZyYW1lX3NlbGVjdGlvbl9nZXQoY29u
c3QgRXZhc19PYmplY3QqIG8pCiAgICAgcmV0dXJuIHN0cmR1cChzLmRhdGEoKSk7CiB9CiAKLUVp
bmFfQm9vbCBld2tfZnJhbWVfdGV4dF9zZWFyY2goY29uc3QgRXZhc19PYmplY3QqIG8sIGNvbnN0
IGNoYXIqIHN0cmluZywgRWluYV9Cb29sIGNhc2Vfc2Vuc2l0aXZlLCBFaW5hX0Jvb2wgZm9yd2Fy
ZCwgRWluYV9Cb29sIHdyYXApCitFaW5hX0Jvb2wgZXdrX2ZyYW1lX3RleHRfc2VhcmNoKGNvbnN0
IEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgY29uc3QgY2hhciogdGV4dCwgRWluYV9Cb29sIGNhc2VT
ZW5zaXRpdmUsIEVpbmFfQm9vbCBmb3J3YXJkLCBFaW5hX0Jvb2wgd3JhcCkKIHsKLSAgICBFV0tf
RlJBTUVfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX0ZSQU1F
X1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc3RyaW5nLCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodGV4dCwgRUlOQV9GQUxTRSk7CiAKLSAgICByZXR1
cm4gc2QtPmZyYW1lLT5lZGl0b3IoKS0+ZmluZFN0cmluZyhXVEY6OlN0cmluZzo6ZnJvbVVURjgo
c3RyaW5nKSwgZm9yd2FyZCwgY2FzZV9zZW5zaXRpdmUsIHdyYXAsIHRydWUpOworICAgIHJldHVy
biBzZC0+ZnJhbWUtPmVkaXRvcigpLT5maW5kU3RyaW5nKFdURjo6U3RyaW5nOjpmcm9tVVRGOCh0
ZXh0KSwgZm9yd2FyZCwgY2FzZVNlbnNpdGl2ZSwgd3JhcCwgdHJ1ZSk7CiB9CiAKLXVuc2lnbmVk
IGludCBld2tfZnJhbWVfdGV4dF9tYXRjaGVzX21hcmsoRXZhc19PYmplY3QqIG8sIGNvbnN0IGNo
YXIqIHN0cmluZywgRWluYV9Cb29sIGNhc2Vfc2Vuc2l0aXZlLCBFaW5hX0Jvb2wgaGlnaGxpZ2h0
LCB1bnNpZ25lZCBpbnQgbGltaXQpCit1bnNpZ25lZCBpbnQgZXdrX2ZyYW1lX3RleHRfbWF0Y2hl
c19tYXJrKEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgY29uc3QgY2hhciogc3RyaW5nLCBFaW5hX0Jv
b2wgY2FzZVNlbnNpdGl2ZSwgRWluYV9Cb29sIGhpZ2hsaWdodCwgdW5zaWduZWQgaW50IGxpbWl0
KQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAwKTsKKyAgICBFV0tf
RlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIDApOwogICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOX1ZBTChzdHJpbmcsIDApOwogCiAgICAgc2QtPmZyYW1lLT5lZGl0
b3IoKS0+c2V0TWFya2VkVGV4dE1hdGNoZXNBcmVIaWdobGlnaHRlZChoaWdobGlnaHQpOwotICAg
IHJldHVybiBzZC0+ZnJhbWUtPmVkaXRvcigpLT5jb3VudE1hdGNoZXNGb3JUZXh0KFdURjo6U3Ry
aW5nOjpmcm9tVVRGOChzdHJpbmcpLCBjYXNlX3NlbnNpdGl2ZSwgbGltaXQsIHRydWUpOworICAg
IHJldHVybiBzZC0+ZnJhbWUtPmVkaXRvcigpLT5jb3VudE1hdGNoZXNGb3JUZXh0KFdURjo6U3Ry
aW5nOjpmcm9tVVRGOChzdHJpbmcpLCBjYXNlU2Vuc2l0aXZlLCBsaW1pdCwgdHJ1ZSk7CiB9CiAK
LUVpbmFfQm9vbCBld2tfZnJhbWVfdGV4dF9tYXRjaGVzX3VubWFya19hbGwoRXZhc19PYmplY3Qq
IG8pCitFaW5hX0Jvb2wgZXdrX2ZyYW1lX3RleHRfbWF0Y2hlc191bm1hcmtfYWxsKEV2YXNfT2Jq
ZWN0KiBld2tGcmFtZSkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwg
RUlOQV9GQUxTRSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNk
LCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZy
YW1lLCBFSU5BX0ZBTFNFKTsKIAogICAgIHNkLT5mcmFtZS0+ZG9jdW1lbnQoKS0+bWFya2Vycygp
LT5yZW1vdmVNYXJrZXJzKFdlYkNvcmU6OkRvY3VtZW50TWFya2VyOjpUZXh0TWF0Y2gpOwogICAg
IHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLUVpbmFfQm9vbCBld2tfZnJhbWVfdGV4dF9tYXRjaGVz
X2hpZ2hsaWdodF9zZXQoRXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCBoaWdobGlnaHQpCitFaW5h
X0Jvb2wgZXdrX2ZyYW1lX3RleHRfbWF0Y2hlc19oaWdobGlnaHRfc2V0KEV2YXNfT2JqZWN0KiBl
d2tGcmFtZSwgRWluYV9Cb29sIGhpZ2hsaWdodCkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09S
X1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRV
Uk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKICAgICBzZC0+ZnJhbWUtPmVkaXRvcigp
LT5zZXRNYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkKGhpZ2hsaWdodCk7CiAgICAgcmV0
dXJuIEVJTkFfVFJVRTsKIH0KIAotRWluYV9Cb29sIGV3a19mcmFtZV90ZXh0X21hdGNoZXNfaGln
aGxpZ2h0X2dldChjb25zdCBFdmFzX09iamVjdCogbykKK0VpbmFfQm9vbCBld2tfZnJhbWVfdGV4
dF9tYXRjaGVzX2hpZ2hsaWdodF9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewot
ICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBF
V0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOwogICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOwog
ICAgIHJldHVybiBzZC0+ZnJhbWUtPmVkaXRvcigpLT5tYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hs
aWdodGVkKCk7CiB9CkBAIC01MTQsMjIgKzUxNCwyMiBAQCBFaW5hX0Jvb2wgZXdrX2ZyYW1lX3Rl
eHRfbWF0Y2hlc19oaWdobGlnaHRfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQogLyoqCiAgKiBD
b21wYXJpc29uIGZ1bmN0aW9uIHVzZWQgYnkgZXdrX2ZyYW1lX3RleHRfbWF0Y2hlc19udGhfcG9z
X2dldAogICovCi1zdGF0aWMgYm9vbCBfZXdrX2ZyYW1lX3JlY3RfY21wX2xlc3NfdGhhbihjb25z
dCBXZWJDb3JlOjpJbnRSZWN0JiBpLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBqKQorc3RhdGlj
IGJvb2wgX2V3a19mcmFtZV9yZWN0X2NtcF9sZXNzX3RoYW4oY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYgYmVnaW4sIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGVuZCkKIHsKLSAgICByZXR1cm4gKGku
eSgpIDwgai55KCkgfHwgKGkueSgpID09IGoueSgpICYmIGkueCgpIDwgai54KCkpKTsKKyAgICBy
ZXR1cm4gKGJlZ2luLnkoKSA8IGVuZC55KCkgfHwgKGJlZ2luLnkoKSA9PSBlbmQueSgpICYmIGJl
Z2luLngoKSA8IGVuZC54KCkpKTsKIH0KIAogLyoqCiAgKiBQcmVkaWNhdGUgdXNlZCBieSBld2tf
ZnJhbWVfdGV4dF9tYXRjaGVzX250aF9wb3NfZ2V0CiAgKi8KLXN0YXRpYyBib29sIF9ld2tfZnJh
bWVfcmVjdF9pc19uZWdhdGl2ZV92YWx1ZShjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBpKQorc3Rh
dGljIGJvb2wgX2V3a19mcmFtZV9yZWN0X2lzX25lZ2F0aXZlX3ZhbHVlKGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmIHJlY3QpCiB7Ci0gICAgcmV0dXJuIChpLngoKSA8IDAgfHwgaS55KCkgPCAwKTsK
KyAgICByZXR1cm4gKHJlY3QueCgpIDwgMCB8fCByZWN0LnkoKSA8IDApOwogfQogCi1FaW5hX0Jv
b2wgZXdrX2ZyYW1lX3RleHRfbWF0Y2hlc19udGhfcG9zX2dldChjb25zdCBFdmFzX09iamVjdCog
bywgc2l6ZV90IG4sIGludCogeCwgaW50KiB5KQorRWluYV9Cb29sIGV3a19mcmFtZV90ZXh0X21h
dGNoZXNfbnRoX3Bvc19nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBzaXplX3QgbnVt
YmVyLCBpbnQqIHgsIGludCogeSkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihv
LCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJh
bWUsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwo
c2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKIAogICAgIFZlY3RvcjxXZWJDb3JlOjpJbnRSZWN0PiBp
bnRSZWN0cyA9IHNkLT5mcmFtZS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5yZW5kZXJlZFJlY3Rz
Rm9yTWFya2VycyhXZWJDb3JlOjpEb2N1bWVudE1hcmtlcjo6VGV4dE1hdGNoKTsKQEAgLTUzNyw1
NSArNTM3LDU1IEBAIEVpbmFfQm9vbCBld2tfZnJhbWVfdGV4dF9tYXRjaGVzX250aF9wb3NfZ2V0
KGNvbnN0IEV2YXNfT2JqZWN0KiBvLCBzaXplX3QgbiwgaW50CiAgICAgLyogcmVtb3ZlIHVzZWxl
c3MgdmFsdWVzICovCiAgICAgc3RkOjpyZW1vdmVfaWYoaW50UmVjdHMuYmVnaW4oKSwgaW50UmVj
dHMuZW5kKCksIF9ld2tfZnJhbWVfcmVjdF9pc19uZWdhdGl2ZV92YWx1ZSk7CiAKLSAgICBpZiAo
aW50UmVjdHMuaXNFbXB0eSgpIHx8IG4gPiBpbnRSZWN0cy5zaXplKCkpCisgICAgaWYgKGludFJl
Y3RzLmlzRW1wdHkoKSB8fCBudW1iZXIgPiBpbnRSZWN0cy5zaXplKCkpCiAgICAgICAgIHJldHVy
biBFSU5BX0ZBTFNFOwogCiAgICAgc3RkOjpzb3J0KGludFJlY3RzLmJlZ2luKCksIGludFJlY3Rz
LmVuZCgpLCBfZXdrX2ZyYW1lX3JlY3RfY21wX2xlc3NfdGhhbik7CiAKICAgICBpZiAoeCkKLSAg
ICAgICAgKnggPSBpbnRSZWN0c1tuIC0gMV0ueCgpOworICAgICAgICAqeCA9IGludFJlY3RzW251
bWJlciAtIDFdLngoKTsKICAgICBpZiAoeSkKLSAgICAgICAgKnkgPSBpbnRSZWN0c1tuIC0gMV0u
eSgpOworICAgICAgICAqeSA9IGludFJlY3RzW251bWJlciAtIDFdLnkoKTsKICAgICByZXR1cm4g
RUlOQV9UUlVFOwogfQogCi1FaW5hX0Jvb2wgZXdrX2ZyYW1lX3N0b3AoRXZhc19PYmplY3QqIG8p
CitFaW5hX0Jvb2wgZXdrX2ZyYW1lX3N0b3AoRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewotICAg
IEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tf
RlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOwogICAg
IHNkLT5mcmFtZS0+bG9hZGVyKCktPnN0b3BBbGxMb2FkZXJzKCk7CiAgICAgcmV0dXJuIEVJTkFf
VFJVRTsKIH0KIAotRWluYV9Cb29sIGV3a19mcmFtZV9yZWxvYWQoRXZhc19PYmplY3QqIG8pCitF
aW5hX0Jvb2wgZXdrX2ZyYW1lX3JlbG9hZChFdmFzX09iamVjdCogZXdrRnJhbWUpCiB7Ci0gICAg
RVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19G
UkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7CiAgICAg
c2QtPmZyYW1lLT5sb2FkZXIoKS0+cmVsb2FkKCk7CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0K
IAotRWluYV9Cb29sIGV3a19mcmFtZV9yZWxvYWRfZnVsbChFdmFzX09iamVjdCogbykKK0VpbmFf
Qm9vbCBld2tfZnJhbWVfcmVsb2FkX2Z1bGwoRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewotICAg
IEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tf
RlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOwogICAg
IHNkLT5mcmFtZS0+bG9hZGVyKCktPnJlbG9hZCh0cnVlKTsKICAgICByZXR1cm4gRUlOQV9UUlVF
OwogfQogCi1FaW5hX0Jvb2wgZXdrX2ZyYW1lX2JhY2soRXZhc19PYmplY3QqIG8pCitFaW5hX0Jv
b2wgZXdrX2ZyYW1lX2JhY2soRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewotICAgIHJldHVybiBl
d2tfZnJhbWVfbmF2aWdhdGUobywgLTEpOworICAgIHJldHVybiBld2tfZnJhbWVfbmF2aWdhdGUo
ZXdrRnJhbWUsIC0xKTsKIH0KIAotRWluYV9Cb29sIGV3a19mcmFtZV9mb3J3YXJkKEV2YXNfT2Jq
ZWN0KiBvKQorRWluYV9Cb29sIGV3a19mcmFtZV9mb3J3YXJkKEV2YXNfT2JqZWN0KiBld2tGcmFt
ZSkKIHsKLSAgICByZXR1cm4gZXdrX2ZyYW1lX25hdmlnYXRlKG8sIDEpOworICAgIHJldHVybiBl
d2tfZnJhbWVfbmF2aWdhdGUoZXdrRnJhbWUsIDEpOwogfQogCi1FaW5hX0Jvb2wgZXdrX2ZyYW1l
X25hdmlnYXRlKEV2YXNfT2JqZWN0KiBvLCBpbnQgc3RlcHMpCitFaW5hX0Jvb2wgZXdrX2ZyYW1l
X25hdmlnYXRlKEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgaW50IHN0ZXBzKQogewotICAgIEVXS19G
UkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfRlJBTUVf
U0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOwogICAgIFdlYkNv
cmU6OlBhZ2UqIHBhZ2UgPSBzZC0+ZnJhbWUtPnBhZ2UoKTsKICAgICBpZiAoIXBhZ2UtPmNhbkdv
QmFja09yRm9yd2FyZChzdGVwcykpCkBAIC01OTQsMjcgKzU5NCwyNyBAQCBFaW5hX0Jvb2wgZXdr
X2ZyYW1lX25hdmlnYXRlKEV2YXNfT2JqZWN0KiBvLCBpbnQgc3RlcHMpCiAgICAgcmV0dXJuIEVJ
TkFfVFJVRTsKIH0KIAotRWluYV9Cb29sIGV3a19mcmFtZV9iYWNrX3Bvc3NpYmxlKEV2YXNfT2Jq
ZWN0KiBvKQorRWluYV9Cb29sIGV3a19mcmFtZV9iYWNrX3Bvc3NpYmxlKEV2YXNfT2JqZWN0KiBl
d2tGcmFtZSkKIHsKLSAgICByZXR1cm4gZXdrX2ZyYW1lX25hdmlnYXRlX3Bvc3NpYmxlKG8sIC0x
KTsKKyAgICByZXR1cm4gZXdrX2ZyYW1lX25hdmlnYXRlX3Bvc3NpYmxlKGV3a0ZyYW1lLCAtMSk7
CiB9CiAKLUVpbmFfQm9vbCBld2tfZnJhbWVfZm9yd2FyZF9wb3NzaWJsZShFdmFzX09iamVjdCog
bykKK0VpbmFfQm9vbCBld2tfZnJhbWVfZm9yd2FyZF9wb3NzaWJsZShFdmFzX09iamVjdCogZXdr
RnJhbWUpCiB7Ci0gICAgcmV0dXJuIGV3a19mcmFtZV9uYXZpZ2F0ZV9wb3NzaWJsZShvLCAxKTsK
KyAgICByZXR1cm4gZXdrX2ZyYW1lX25hdmlnYXRlX3Bvc3NpYmxlKGV3a0ZyYW1lLCAxKTsKIH0K
IAotRWluYV9Cb29sIGV3a19mcmFtZV9uYXZpZ2F0ZV9wb3NzaWJsZShFdmFzX09iamVjdCogbywg
aW50IHN0ZXBzKQorRWluYV9Cb29sIGV3a19mcmFtZV9uYXZpZ2F0ZV9wb3NzaWJsZShFdmFzX09i
amVjdCogZXdrRnJhbWUsIGludCBzdGVwcykKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JF
VFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
Tl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKICAgICBXZWJDb3JlOjpQYWdlKiBwYWdlID0g
c2QtPmZyYW1lLT5wYWdlKCk7CiAgICAgcmV0dXJuIHBhZ2UtPmNhbkdvQmFja09yRm9yd2FyZChz
dGVwcyk7CiB9CiAKLWZsb2F0IGV3a19mcmFtZV96b29tX2dldChjb25zdCBFdmFzX09iamVjdCog
bykKK2Zsb2F0IGV3a19mcmFtZV96b29tX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrRnJhbWUp
CiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIC0xLjApOworICAgIEVX
S19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgLTEuMCk7CiAgICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgLTEuMCk7CiAKICAgICBpZiAoc2Qt
PnRleHRab29tKQpAQCAtNjIyLDkgKzYyMiw5IEBAIGZsb2F0IGV3a19mcmFtZV96b29tX2dldChj
b25zdCBFdmFzX09iamVjdCogbykKICAgICByZXR1cm4gc2QtPmZyYW1lLT5wYWdlWm9vbUZhY3Rv
cigpOwogfQogCi1FaW5hX0Jvb2wgZXdrX2ZyYW1lX3pvb21fc2V0KEV2YXNfT2JqZWN0KiBvLCBm
bG9hdCB6b29tKQorRWluYV9Cb29sIGV3a19mcmFtZV96b29tX3NldChFdmFzX09iamVjdCogZXdr
RnJhbWUsIGZsb2F0IHpvb20pCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4obywg
c2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1l
LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNk
LT5mcmFtZSwgRUlOQV9GQUxTRSk7CiAgICAgaWYgKHNkLT50ZXh0Wm9vbSkKICAgICAgICAgc2Qt
PmZyYW1lLT5zZXRUZXh0Wm9vbUZhY3Rvcih6b29tKTsKQEAgLTYzMywxNSArNjMzLDE1IEBAIEVp
bmFfQm9vbCBld2tfZnJhbWVfem9vbV9zZXQoRXZhc19PYmplY3QqIG8sIGZsb2F0IHpvb20pCiAg
ICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotRWluYV9Cb29sIGV3a19mcmFtZV96b29tX3RleHRf
b25seV9nZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCitFaW5hX0Jvb2wgZXdrX2ZyYW1lX3pvb21f
dGV4dF9vbmx5X2dldChjb25zdCBFdmFzX09iamVjdCogZXdrRnJhbWUpCiB7Ci0gICAgRVdLX0ZS
QU1FX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19GUkFNRV9T
RF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgcmV0dXJuIHNk
LT50ZXh0Wm9vbTsKIH0KIAotRWluYV9Cb29sIGV3a19mcmFtZV96b29tX3RleHRfb25seV9zZXQo
RXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCBzZXR0aW5nKQorRWluYV9Cb29sIGV3a19mcmFtZV96
b29tX3RleHRfb25seV9zZXQoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBFaW5hX0Jvb2wgc2V0dGlu
ZykKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7
CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNF
KTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZB
TFNFKTsKICAgICBpZiAoc2QtPnRleHRab29tID09IHNldHRpbmcpCiAgICAgICAgIHJldHVybiBF
SU5BX1RSVUU7CkBAIC02NTUsMjIgKzY1NSwyMiBAQCBFaW5hX0Jvb2wgZXdrX2ZyYW1lX3pvb21f
dGV4dF9vbmx5X3NldChFdmFzX09iamVjdCogbywgRWluYV9Cb29sIHNldHRpbmcpCiAgICAgcmV0
dXJuIEVJTkFfVFJVRTsKIH0KIAotdm9pZCBld2tfZnJhbWVfaGl0X3Rlc3RfZnJlZShFd2tfSGl0
X1Rlc3QqIGhpdF90ZXN0KQordm9pZCBld2tfZnJhbWVfaGl0X3Rlc3RfZnJlZShFd2tfSGl0X1Rl
c3QqIGhpdFRlc3QpCiB7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oaGl0X3Rlc3Qp
OwotICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVsKGhpdF90ZXN0LT50aXRsZSk7Ci0gICAgZWluYV9z
dHJpbmdzaGFyZV9kZWwoaGl0X3Rlc3QtPmFsdGVybmF0ZV90ZXh0KTsKLSAgICBlaW5hX3N0cmlu
Z3NoYXJlX2RlbChoaXRfdGVzdC0+bGluay50ZXh0KTsKLSAgICBlaW5hX3N0cmluZ3NoYXJlX2Rl
bChoaXRfdGVzdC0+bGluay51cmwpOwotICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVsKGhpdF90ZXN0
LT5saW5rLnRpdGxlKTsKLSAgICBlaW5hX3N0cmluZ3NoYXJlX2RlbChoaXRfdGVzdC0+aW1hZ2Vf
dXJpKTsKLSAgICBlaW5hX3N0cmluZ3NoYXJlX2RlbChoaXRfdGVzdC0+bWVkaWFfdXJpKTsKLSAg
ICBmcmVlKGhpdF90ZXN0KTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihoaXRUZXN0
KTsKKyAgICBlaW5hX3N0cmluZ3NoYXJlX2RlbChoaXRUZXN0LT50aXRsZSk7CisgICAgZWluYV9z
dHJpbmdzaGFyZV9kZWwoaGl0VGVzdC0+YWx0ZXJuYXRlX3RleHQpOworICAgIGVpbmFfc3RyaW5n
c2hhcmVfZGVsKGhpdFRlc3QtPmxpbmsudGV4dCk7CisgICAgZWluYV9zdHJpbmdzaGFyZV9kZWwo
aGl0VGVzdC0+bGluay51cmwpOworICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVsKGhpdFRlc3QtPmxp
bmsudGl0bGUpOworICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVsKGhpdFRlc3QtPmltYWdlX3VyaSk7
CisgICAgZWluYV9zdHJpbmdzaGFyZV9kZWwoaGl0VGVzdC0+bWVkaWFfdXJpKTsKKyAgICBmcmVl
KGhpdFRlc3QpOwogfQogCi1Fd2tfSGl0X1Rlc3QqIGV3a19mcmFtZV9oaXRfdGVzdF9uZXcoY29u
c3QgRXZhc19PYmplY3QqIG8sIGludCB4LCBpbnQgeSkKK0V3a19IaXRfVGVzdCogZXdrX2ZyYW1l
X2hpdF90ZXN0X25ldyhjb25zdCBFdmFzX09iamVjdCogZXdrRnJhbWUsIGludCB4LCBpbnQgeSkK
IHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgMCk7CisgICAgRVdLX0ZS
QU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCAwKTsKICAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCAwKTsKIAogICAgIFdlYkNvcmU6OkZyYW1lVmll
dyogdmlldyA9IHNkLT5mcmFtZS0+dmlldygpOwpAQCAtNzQxLDE5ICs3NDEsMTkgQEAgRXdrX0hp
dF9UZXN0KiBld2tfZnJhbWVfaGl0X3Rlc3RfbmV3KGNvbnN0IEV2YXNfT2JqZWN0KiBvLCBpbnQg
eCwgaW50IHkpCiB9CiAKIEVpbmFfQm9vbAotZXdrX2ZyYW1lX3Njcm9sbF9hZGQoRXZhc19PYmpl
Y3QqIG8sIGludCBkeCwgaW50IGR5KQorZXdrX2ZyYW1lX3Njcm9sbF9hZGQoRXZhc19PYmplY3Qq
IGV3a0ZyYW1lLCBpbnQgZGVsdGFYLCBpbnQgZGVsdGFZKQogewotICAgIEVXS19GUkFNRV9TRF9H
RVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09S
X1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUtPnZpZXcoKSwgRUlOQV9GQUxTRSk7Ci0gICAgc2Qt
PmZyYW1lLT52aWV3KCktPnNjcm9sbEJ5KFdlYkNvcmU6OkludFNpemUoZHgsIGR5KSk7CisgICAg
c2QtPmZyYW1lLT52aWV3KCktPnNjcm9sbEJ5KFdlYkNvcmU6OkludFNpemUoZGVsdGFYLCBkZWx0
YVkpKTsKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCiBFaW5hX0Jvb2wKLWV3a19mcmFtZV9z
Y3JvbGxfc2V0KEV2YXNfT2JqZWN0KiBvLCBpbnQgeCwgaW50IHkpCitld2tfZnJhbWVfc2Nyb2xs
X3NldChFdmFzX09iamVjdCogZXdrRnJhbWUsIGludCB4LCBpbnQgeSkKIHsKLSAgICBFV0tfRlJB
TUVfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX0ZSQU1FX1NE
X0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLT52aWV3KCksIEVJTkFfRkFMU0UpOwog
ICAgIHNkLT5mcmFtZS0+dmlldygpLT5zZXRTY3JvbGxQb3NpdGlvbihXZWJDb3JlOjpJbnRQb2lu
dCh4LCB5KSk7CkBAIC03NjEsMzEgKzc2MSwzMSBAQCBld2tfZnJhbWVfc2Nyb2xsX3NldChFdmFz
X09iamVjdCogbywgaW50IHgsIGludCB5KQogfQogCiBFaW5hX0Jvb2wKLWV3a19mcmFtZV9zY3Jv
bGxfc2l6ZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIG8sIGludCogdywgaW50KiBoKQorZXdrX2Zy
YW1lX3Njcm9sbF9zaXplX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrRnJhbWUsIGludCogd2lk
dGgsIGludCogaGVpZ2h0KQogewotICAgIGlmICh3KQotICAgICAgICAqdyA9IDA7Ci0gICAgaWYg
KGgpCi0gICAgICAgICpoID0gMDsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihvLCBz
ZCwgRUlOQV9GQUxTRSk7CisgICAgaWYgKHdpZHRoKQorICAgICAgICAqd2lkdGggPSAwOworICAg
IGlmIChoZWlnaHQpCisgICAgICAgICpoZWlnaHQgPSAwOworICAgIEVXS19GUkFNRV9TRF9HRVRf
T1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZS0+dmlldygpLCBFSU5BX0ZBTFNFKTsKICAgICBX
ZWJDb3JlOjpJbnRQb2ludCBwb2ludCA9IHNkLT5mcmFtZS0+dmlldygpLT5tYXhpbXVtU2Nyb2xs
UG9zaXRpb24oKTsKLSAgICBpZiAodykKLSAgICAgICAgKncgPSBwb2ludC54KCk7Ci0gICAgaWYg
KGgpCi0gICAgICAgICpoID0gcG9pbnQueSgpOworICAgIGlmICh3aWR0aCkKKyAgICAgICAgKndp
ZHRoID0gcG9pbnQueCgpOworICAgIGlmIChoZWlnaHQpCisgICAgICAgICpoZWlnaHQgPSBwb2lu
dC55KCk7CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAogRWluYV9Cb29sCi1ld2tfZnJhbWVf
c2Nyb2xsX3Bvc19nZXQoY29uc3QgRXZhc19PYmplY3QqIG8sIGludCogeCwgaW50KiB5KQorZXdr
X2ZyYW1lX3Njcm9sbF9wb3NfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgaW50KiB4
LCBpbnQqIHkpCiB7CiAgICAgaWYgKHgpCiAgICAgICAgICp4ID0gMDsKICAgICBpZiAoeSkKICAg
ICAgICAgKnkgPSAwOwotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5B
X0ZBTFNFKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJ
TkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUs
IEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJh
bWUtPnZpZXcoKSwgRUlOQV9GQUxTRSk7CiAgICAgV2ViQ29yZTo6SW50UG9pbnQgcG9zID0gc2Qt
PmZyYW1lLT52aWV3KCktPnNjcm9sbFBvc2l0aW9uKCk7CkBAIC03OTYsMTQwICs3OTYsMTQwIEBA
IGV3a19mcmFtZV9zY3JvbGxfcG9zX2dldChjb25zdCBFdmFzX09iamVjdCogbywgaW50KiB4LCBp
bnQqIHkpCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotRWluYV9Cb29sIGV3a19mcmFtZV92
aXNpYmxlX2NvbnRlbnRfZ2VvbWV0cnlfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jv
b2wgaW5jbHVkZV9zY3JvbGxiYXJzLCBpbnQqIHgsIGludCogeSwgaW50KiB3LCBpbnQqIGgpCitF
aW5hX0Jvb2wgZXdrX2ZyYW1lX3Zpc2libGVfY29udGVudF9nZW9tZXRyeV9nZXQoY29uc3QgRXZh
c19PYmplY3QqIGV3a0ZyYW1lLCBFaW5hX0Jvb2wgaW5jbHVkZVNjcm9sbGJhcnMsIGludCogeCwg
aW50KiB5LCBpbnQqIHdpZHRoLCBpbnQqIGhlaWdodCkKIHsKICAgICBpZiAoeCkKICAgICAgICAg
KnggPSAwOwogICAgIGlmICh5KQogICAgICAgICAqeSA9IDA7Ci0gICAgaWYgKHcpCi0gICAgICAg
ICp3ID0gMDsKLSAgICBpZiAoaCkKLSAgICAgICAgKmggPSAwOwotICAgIEVXS19GUkFNRV9TRF9H
RVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBpZiAod2lkdGgpCisgICAgICAg
ICp3aWR0aCA9IDA7CisgICAgaWYgKGhlaWdodCkKKyAgICAgICAgKmhlaWdodCA9IDA7CisgICAg
RVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsKICAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsK
ICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLT52aWV3KCksIEVJ
TkFfRkFMU0UpOwotICAgIFdlYkNvcmU6OkludFJlY3QgcmVjdCA9IHNkLT5mcmFtZS0+dmlldygp
LT52aXNpYmxlQ29udGVudFJlY3QoaW5jbHVkZV9zY3JvbGxiYXJzKTsKKyAgICBXZWJDb3JlOjpJ
bnRSZWN0IHJlY3QgPSBzZC0+ZnJhbWUtPnZpZXcoKS0+dmlzaWJsZUNvbnRlbnRSZWN0KGluY2x1
ZGVTY3JvbGxiYXJzKTsKICAgICBpZiAoeCkKICAgICAgICAgKnggPSByZWN0LngoKTsKICAgICBp
ZiAoeSkKICAgICAgICAgKnkgPSByZWN0LnkoKTsKLSAgICBpZiAodykKLSAgICAgICAgKncgPSBy
ZWN0LndpZHRoKCk7Ci0gICAgaWYgKGgpCi0gICAgICAgICpoID0gcmVjdC5oZWlnaHQoKTsKKyAg
ICBpZiAod2lkdGgpCisgICAgICAgICp3aWR0aCA9IHJlY3Qud2lkdGgoKTsKKyAgICBpZiAoaGVp
Z2h0KQorICAgICAgICAqaGVpZ2h0ID0gcmVjdC5oZWlnaHQoKTsKICAgICByZXR1cm4gRUlOQV9U
UlVFOwogfQogCi1FaW5hX0Jvb2wgZXdrX2ZyYW1lX3BhaW50X2Z1bGxfZ2V0KGNvbnN0IEV2YXNf
T2JqZWN0KiBvKQorRWluYV9Cb29sIGV3a19mcmFtZV9wYWludF9mdWxsX2dldChjb25zdCBFdmFz
X09iamVjdCogZXdrRnJhbWUpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4obywg
c2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1l
LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNk
LT5mcmFtZSwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFM
KHNkLT5mcmFtZS0+dmlldygpLCBFSU5BX0ZBTFNFKTsKICAgICByZXR1cm4gc2QtPmZyYW1lLT52
aWV3KCktPnBhaW50c0VudGlyZUNvbnRlbnRzKCk7CiB9CiAKLXZvaWQgZXdrX2ZyYW1lX3BhaW50
X2Z1bGxfc2V0KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wgZmxhZykKK3ZvaWQgZXdrX2ZyYW1l
X3BhaW50X2Z1bGxfc2V0KEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgRWluYV9Cb29sIGZsYWcpCiB7
Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4obywgc2QpOworICAgIEVXS19GUkFNRV9T
RF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk4oc2QtPmZyYW1lKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+ZnJh
bWUtPnZpZXcoKSk7CiAgICAgc2QtPmZyYW1lLT52aWV3KCktPnNldFBhaW50c0VudGlyZUNvbnRl
bnRzKGZsYWcpOwogfQogCi1FaW5hX0Jvb2wgZXdrX2ZyYW1lX2ZlZWRfZm9jdXNfaW4oRXZhc19P
YmplY3QqIG8pCitFaW5hX0Jvb2wgZXdrX2ZyYW1lX2ZlZWRfZm9jdXNfaW4oRXZhc19PYmplY3Qq
IGV3a0ZyYW1lKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5B
X0ZBTFNFKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJ
TkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUs
IEVJTkFfRkFMU0UpOwogICAgIFdlYkNvcmU6OkZvY3VzQ29udHJvbGxlciogYyA9IHNkLT5mcmFt
ZS0+cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKTsKICAgICBjLT5zZXRGb2N1c2VkRnJhbWUoc2Qt
PmZyYW1lKTsKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi1FaW5hX0Jvb2wgZXdrX2ZyYW1l
X2ZlZWRfZm9jdXNfb3V0KEV2YXNfT2JqZWN0KiBvKQorRWluYV9Cb29sIGV3a19mcmFtZV9mZWVk
X2ZvY3VzX291dChFdmFzX09iamVjdCogZXdrRnJhbWUpCiB7CiAgICAgLy8gVE9ETzogd2hhdCB0
byBkbyBvbiBmb2N1cyBvdXQ/CiAgICAgRVJSKCJ3aGF0IHRvIGRvPyIpOwogICAgIHJldHVybiBF
SU5BX0ZBTFNFOwogfQogCi1FaW5hX0Jvb2wgZXdrX2ZyYW1lX2ZlZWRfbW91c2Vfd2hlZWwoRXZh
c19PYmplY3QqIG8sIGNvbnN0IEV2YXNfRXZlbnRfTW91c2VfV2hlZWwqIGV2KQorRWluYV9Cb29s
IGV3a19mcmFtZV9mZWVkX21vdXNlX3doZWVsKEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgY29uc3Qg
RXZhc19FdmVudF9Nb3VzZV9XaGVlbCogd2hlZWxFdmVudCkKIHsKLSAgICBFV0tfRlJBTUVfU0Rf
R0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9P
Ul9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTl9WQUwoZXYsIEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOX1ZBTCh3aGVlbEV2ZW50LCBFSU5BX0ZBTFNFKTsKIAogICAgIFdlYkNvcmU6OkZy
YW1lVmlldyogdmlldyA9IHNkLT5mcmFtZS0+dmlldygpOwotICAgIERCRygibz0lcCwgdmlldz0l
cCwgZGlyZWN0aW9uPSVkLCB6PSVkLCBwb3M9JWQsJWQiLAotICAgICAgICBvLCB2aWV3LCBldi0+
ZGlyZWN0aW9uLCBldi0+eiwgZXYtPmNhbnZhcy54LCBldi0+Y2FudmFzLnkpOworICAgIERCRygi
ZXdrRnJhbWU9JXAsIHZpZXc9JXAsIGRpcmVjdGlvbj0lZCwgej0lZCwgcG9zPSVkLCVkIiwKKyAg
ICAgICAgZXdrRnJhbWUsIHZpZXcsIHdoZWVsRXZlbnQtPmRpcmVjdGlvbiwgd2hlZWxFdmVudC0+
eiwgd2hlZWxFdmVudC0+Y2FudmFzLngsIHdoZWVsRXZlbnQtPmNhbnZhcy55KTsKICAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodmlldywgRUlOQV9GQUxTRSk7CiAKLSAgICBXZWJD
b3JlOjpQbGF0Zm9ybVdoZWVsRXZlbnQgZXZlbnQoZXYpOworICAgIFdlYkNvcmU6OlBsYXRmb3Jt
V2hlZWxFdmVudCBldmVudCh3aGVlbEV2ZW50KTsKICAgICByZXR1cm4gc2QtPmZyYW1lLT5ldmVu
dEhhbmRsZXIoKS0+aGFuZGxlV2hlZWxFdmVudChldmVudCk7CiB9CiAKLUVpbmFfQm9vbCBld2tf
ZnJhbWVfZmVlZF9tb3VzZV9kb3duKEV2YXNfT2JqZWN0KiBvLCBjb25zdCBFdmFzX0V2ZW50X01v
dXNlX0Rvd24qIGV2KQorRWluYV9Cb29sIGV3a19mcmFtZV9mZWVkX21vdXNlX2Rvd24oRXZhc19P
YmplY3QqIGV3a0ZyYW1lLCBjb25zdCBFdmFzX0V2ZW50X01vdXNlX0Rvd24qIGRvd25FdmVudCkK
IHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7Cisg
ICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsK
ICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNF
KTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZXYsIEVJTkFfRkFMU0UpOwor
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChkb3duRXZlbnQsIEVJTkFfRkFMU0Up
OwogCiAgICAgV2ViQ29yZTo6RnJhbWVWaWV3KiB2aWV3ID0gc2QtPmZyYW1lLT52aWV3KCk7Ci0g
ICAgREJHKCJvPSVwLCB2aWV3PSVwLCBidXR0b249JWQsIHBvcz0lZCwlZCIsCi0gICAgICAgIG8s
IHZpZXcsIGV2LT5idXR0b24sIGV2LT5jYW52YXMueCwgZXYtPmNhbnZhcy55KTsKKyAgICBEQkco
ImV3a0ZyYW1lPSVwLCB2aWV3PSVwLCBidXR0b249JWQsIHBvcz0lZCwlZCIsCisgICAgICAgIGV3
a0ZyYW1lLCB2aWV3LCBkb3duRXZlbnQtPmJ1dHRvbiwgZG93bkV2ZW50LT5jYW52YXMueCwgZG93
bkV2ZW50LT5jYW52YXMueSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHZp
ZXcsIEVJTkFfRkFMU0UpOwogCiAgICAgRXZhc19Db29yZCB4LCB5OwogICAgIGV2YXNfb2JqZWN0
X2dlb21ldHJ5X2dldChzZC0+dmlldywgJngsICZ5LCAwLCAwKTsKIAotICAgIFdlYkNvcmU6OlBs
YXRmb3JtTW91c2VFdmVudCBldmVudChldiwgV2ViQ29yZTo6SW50UG9pbnQoeCwgeSkpOworICAg
IFdlYkNvcmU6OlBsYXRmb3JtTW91c2VFdmVudCBldmVudChkb3duRXZlbnQsIFdlYkNvcmU6Oklu
dFBvaW50KHgsIHkpKTsKICAgICByZXR1cm4gc2QtPmZyYW1lLT5ldmVudEhhbmRsZXIoKS0+aGFu
ZGxlTW91c2VQcmVzc0V2ZW50KGV2ZW50KTsKIH0KIAotRWluYV9Cb29sIGV3a19mcmFtZV9mZWVk
X21vdXNlX3VwKEV2YXNfT2JqZWN0KiBvLCBjb25zdCBFdmFzX0V2ZW50X01vdXNlX1VwKiBldikK
K0VpbmFfQm9vbCBld2tfZnJhbWVfZmVlZF9tb3VzZV91cChFdmFzX09iamVjdCogZXdrRnJhbWUs
IGNvbnN0IEV2YXNfRXZlbnRfTW91c2VfVXAqIHVwRXZlbnQpCiB7Ci0gICAgRVdLX0ZSQU1FX1NE
X0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19GUkFNRV9TRF9HRVRf
T1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk5fVkFMKGV2LCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTl9WQUwodXBFdmVudCwgRUlOQV9GQUxTRSk7CiAKICAgICBXZWJDb3JlOjpGcmFt
ZVZpZXcqIHZpZXcgPSBzZC0+ZnJhbWUtPnZpZXcoKTsKLSAgICBEQkcoIm89JXAsIHZpZXc9JXAs
IGJ1dHRvbj0lZCwgcG9zPSVkLCVkIiwKLSAgICAgICAgbywgdmlldywgZXYtPmJ1dHRvbiwgZXYt
PmNhbnZhcy54LCBldi0+Y2FudmFzLnkpOworICAgIERCRygiZXdrRnJhbWU9JXAsIHZpZXc9JXAs
IGJ1dHRvbj0lZCwgcG9zPSVkLCVkIiwKKyAgICAgICAgZXdrRnJhbWUsIHZpZXcsIHVwRXZlbnQt
PmJ1dHRvbiwgdXBFdmVudC0+Y2FudmFzLngsIHVwRXZlbnQtPmNhbnZhcy55KTsKICAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodmlldywgRUlOQV9GQUxTRSk7CiAKICAgICBFdmFz
X0Nvb3JkIHgsIHk7CiAgICAgZXZhc19vYmplY3RfZ2VvbWV0cnlfZ2V0KHNkLT52aWV3LCAmeCwg
JnksIDAsIDApOwogCi0gICAgV2ViQ29yZTo6UGxhdGZvcm1Nb3VzZUV2ZW50IGV2ZW50KGV2LCBX
ZWJDb3JlOjpJbnRQb2ludCh4LCB5KSk7CisgICAgV2ViQ29yZTo6UGxhdGZvcm1Nb3VzZUV2ZW50
IGV2ZW50KHVwRXZlbnQsIFdlYkNvcmU6OkludFBvaW50KHgsIHkpKTsKICAgICByZXR1cm4gc2Qt
PmZyYW1lLT5ldmVudEhhbmRsZXIoKS0+aGFuZGxlTW91c2VSZWxlYXNlRXZlbnQoZXZlbnQpOwog
fQogCi1FaW5hX0Jvb2wgZXdrX2ZyYW1lX2ZlZWRfbW91c2VfbW92ZShFdmFzX09iamVjdCogbywg
Y29uc3QgRXZhc19FdmVudF9Nb3VzZV9Nb3ZlKiBldikKK0VpbmFfQm9vbCBld2tfZnJhbWVfZmVl
ZF9tb3VzZV9tb3ZlKEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgY29uc3QgRXZhc19FdmVudF9Nb3Vz
ZV9Nb3ZlKiBtb3ZlRXZlbnQpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4obywg
c2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1l
LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNk
LT5mcmFtZSwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFM
KGV2LCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwobW92
ZUV2ZW50LCBFSU5BX0ZBTFNFKTsKIAogICAgIFdlYkNvcmU6OkZyYW1lVmlldyogdmlldyA9IHNk
LT5mcmFtZS0+dmlldygpOwotICAgIERCRygibz0lcCwgdmlldz0lcCwgcG9zOiBvbGQ9JWQsJWQs
IG5ldz0lZCwlZCwgYnV0dG9ucz0lZCIsCi0gICAgICAgIG8sIHZpZXcsIGV2LT5jdXIuY2FudmFz
LngsIGV2LT5jdXIuY2FudmFzLnksCi0gICAgICAgIGV2LT5wcmV2LmNhbnZhcy54LCBldi0+cHJl
di5jYW52YXMueSwgZXYtPmJ1dHRvbnMpOworICAgIERCRygiZXdrRnJhbWU9JXAsIHZpZXc9JXAs
IHBvczogb2xkPSVkLCVkLCBuZXc9JWQsJWQsIGJ1dHRvbnM9JWQiLAorICAgICAgICBld2tGcmFt
ZSwgdmlldywgbW92ZUV2ZW50LT5jdXIuY2FudmFzLngsIG1vdmVFdmVudC0+Y3VyLmNhbnZhcy55
LAorICAgICAgICBtb3ZlRXZlbnQtPnByZXYuY2FudmFzLngsIG1vdmVFdmVudC0+cHJldi5jYW52
YXMueSwgbW92ZUV2ZW50LT5idXR0b25zKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
Tl9WQUwodmlldywgRUlOQV9GQUxTRSk7CiAKICAgICBFdmFzX0Nvb3JkIHgsIHk7CiAgICAgZXZh
c19vYmplY3RfZ2VvbWV0cnlfZ2V0KHNkLT52aWV3LCAmeCwgJnksIDAsIDApOwogCi0gICAgV2Vi
Q29yZTo6UGxhdGZvcm1Nb3VzZUV2ZW50IGV2ZW50KGV2LCBXZWJDb3JlOjpJbnRQb2ludCh4LCB5
KSk7CisgICAgV2ViQ29yZTo6UGxhdGZvcm1Nb3VzZUV2ZW50IGV2ZW50KG1vdmVFdmVudCwgV2Vi
Q29yZTo6SW50UG9pbnQoeCwgeSkpOwogICAgIHJldHVybiBzZC0+ZnJhbWUtPmV2ZW50SGFuZGxl
cigpLT5tb3VzZU1vdmVkKGV2ZW50KTsKIH0KIAotRWluYV9Cb29sIGV3a19mcmFtZV9mZWVkX3Rv
dWNoX2V2ZW50KEV2YXNfT2JqZWN0KiBvLCBFd2tfVG91Y2hfRXZlbnRfVHlwZSBhY3Rpb24sIEVp
bmFfTGlzdCogcG9pbnRzLCBpbnQgbWV0YVN0YXRlKQorRWluYV9Cb29sIGV3a19mcmFtZV9mZWVk
X3RvdWNoX2V2ZW50KEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgRXdrX1RvdWNoX0V2ZW50X1R5cGUg
YWN0aW9uLCBFaW5hX0xpc3QqIHBvaW50cywgaW50IG1ldGFTdGF0ZSkKIHsKICAgICBFaW5hX0Jv
b2wgcmV0ID0gRUlOQV9GQUxTRTsKIAogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCiAgICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHBvaW50cywgRUlOQV9GQUxTRSk7Ci0gICAgRVdL
X0ZSQU1FX1NEX0dFVChvLCBzZCk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVChld2tGcmFtZSwgc2Qp
OwogCiAgICAgaWYgKCFzZCB8fCAhc2QtPmZyYW1lIHx8ICFld2tfdmlld19uZWVkX3RvdWNoX2V2
ZW50c19nZXQoc2QtPnZpZXcpKQogICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKQEAgLTk2MSwx
NyArOTYxLDE3IEBAIEVpbmFfQm9vbCBld2tfZnJhbWVfZmVlZF90b3VjaF9ldmVudChFdmFzX09i
amVjdCogbywgRXdrX1RvdWNoX0V2ZW50X1R5cGUgYWN0aW9uCiAgICAgcmV0dXJuIHJldDsKIH0K
IAotc3RhdGljIGlubGluZSBFaW5hX0Jvb2wgX2V3a19mcmFtZV9oYW5kbGVfa2V5X3Njcm9sbGlu
ZyhXZWJDb3JlOjpGcmFtZSogZnJhbWUsIGNvbnN0IFdlYkNvcmU6OlBsYXRmb3JtS2V5Ym9hcmRF
dmVudCYgZXZlbnQpCitzdGF0aWMgaW5saW5lIEVpbmFfQm9vbCBfZXdrX2ZyYW1lX2hhbmRsZV9r
ZXlfc2Nyb2xsaW5nKFdlYkNvcmU6OkZyYW1lKiBmcmFtZSwgY29uc3QgV2ViQ29yZTo6UGxhdGZv
cm1LZXlib2FyZEV2ZW50JiBrZXlFdmVudCkKIHsKICAgICBXZWJDb3JlOjpTY3JvbGxEaXJlY3Rp
b24gZGlyZWN0aW9uOwogICAgIFdlYkNvcmU6OlNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5
OwogCi0gICAgaW50IGtleUNvZGUgPSBldmVudC53aW5kb3dzVmlydHVhbEtleUNvZGUoKTsKKyAg
ICBpbnQga2V5Q29kZSA9IGtleUV2ZW50LndpbmRvd3NWaXJ0dWFsS2V5Q29kZSgpOwogCiAgICAg
c3dpdGNoIChrZXlDb2RlKSB7CiAgICAgY2FzZSBWS19TUEFDRToKICAgICAgICAgZ3JhbnVsYXJp
dHkgPSBXZWJDb3JlOjpTY3JvbGxCeVBhZ2U7Ci0gICAgICAgIGlmIChldmVudC5zaGlmdEtleSgp
KQorICAgICAgICBpZiAoa2V5RXZlbnQuc2hpZnRLZXkoKSkKICAgICAgICAgICAgIGRpcmVjdGlv
biA9IFdlYkNvcmU6OlNjcm9sbFVwOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBkaXJlY3Rp
b24gPSBXZWJDb3JlOjpTY3JvbGxEb3duOwpAQCAtMTAwMiwxNCArMTAwMiwxNCBAQCBzdGF0aWMg
aW5saW5lIEVpbmFfQm9vbCBfZXdrX2ZyYW1lX2hhbmRsZV9rZXlfc2Nyb2xsaW5nKFdlYkNvcmU6
OkZyYW1lKiBmcmFtZSwgYwogICAgICAgICBicmVhazsKICAgICBjYXNlIFZLX1VQOgogICAgICAg
ICBkaXJlY3Rpb24gPSBXZWJDb3JlOjpTY3JvbGxVcDsKLSAgICAgICAgaWYgKGV2ZW50LmN0cmxL
ZXkoKSkKKyAgICAgICAgaWYgKGtleUV2ZW50LmN0cmxLZXkoKSkKICAgICAgICAgICAgIGdyYW51
bGFyaXR5ID0gV2ViQ29yZTo6U2Nyb2xsQnlEb2N1bWVudDsKICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgZ3JhbnVsYXJpdHkgPSBXZWJDb3JlOjpTY3JvbGxCeUxpbmU7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgVktfRE9XTjoKICAgICAgICAgZGlyZWN0aW9uID0gV2ViQ29yZTo6U2Nyb2xs
RG93bjsKLSAgICAgICAgaWYgKGV2ZW50LmN0cmxLZXkoKSkKKyAgICAgICAgaWYgKGtleUV2ZW50
LmN0cmxLZXkoKSkKICAgICAgICAgICAgIGdyYW51bGFyaXR5ID0gV2ViQ29yZTo6U2Nyb2xsQnlE
b2N1bWVudDsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgZ3JhbnVsYXJpdHkgPSBXZWJDb3Jl
OjpTY3JvbGxCeUxpbmU7CkBAIC0xMDI1LDM4ICsxMDI1LDM4IEBAIHN0YXRpYyBpbmxpbmUgRWlu
YV9Cb29sIF9ld2tfZnJhbWVfaGFuZGxlX2tleV9zY3JvbGxpbmcoV2ViQ29yZTo6RnJhbWUqIGZy
YW1lLCBjCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotRWluYV9Cb29sIGV3a19mcmFtZV9m
ZWVkX2tleV9kb3duKEV2YXNfT2JqZWN0KiBvLCBjb25zdCBFdmFzX0V2ZW50X0tleV9Eb3duKiBl
dikKK0VpbmFfQm9vbCBld2tfZnJhbWVfZmVlZF9rZXlfZG93bihFdmFzX09iamVjdCogZXdrRnJh
bWUsIGNvbnN0IEV2YXNfRXZlbnRfS2V5X0Rvd24qIGRvd25FdmVudCkKIHsKLSAgICBFV0tfRlJB
TUVfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX0ZSQU1FX1NE
X0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZXYsIEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOX1ZBTChkb3duRXZlbnQsIEVJTkFfRkFMU0UpOwogCi0gICAgREJHKCJv
PSVwIGtleW5hbWU9JXMgKGtleT0lcywgc3RyaW5nPSVzKSIsCi0gICAgICAgIG8sIGV2LT5rZXlu
YW1lLCBldi0+a2V5ID8gZXYtPmtleSA6ICIiLCBldi0+c3RyaW5nID8gZXYtPnN0cmluZyA6ICIi
KTsKKyAgICBEQkcoImV3a0ZyYW1lPSVwIGtleW5hbWU9JXMgKGtleT0lcywgc3RyaW5nPSVzKSIs
CisgICAgICAgIGV3a0ZyYW1lLCBkb3duRXZlbnQtPmtleW5hbWUsIGRvd25FdmVudC0+a2V5ID8g
ZG93bkV2ZW50LT5rZXkgOiAiIiwgZG93bkV2ZW50LT5zdHJpbmcgPyBkb3duRXZlbnQtPnN0cmlu
ZyA6ICIiKTsKIAotICAgIFdlYkNvcmU6OlBsYXRmb3JtS2V5Ym9hcmRFdmVudCBldmVudChldik7
CisgICAgV2ViQ29yZTo6UGxhdGZvcm1LZXlib2FyZEV2ZW50IGV2ZW50KGRvd25FdmVudCk7CiAg
ICAgaWYgKHNkLT5mcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmtleUV2ZW50KGV2ZW50KSkKICAgICAg
ICAgcmV0dXJuIEVJTkFfVFJVRTsKIAogICAgIHJldHVybiBfZXdrX2ZyYW1lX2hhbmRsZV9rZXlf
c2Nyb2xsaW5nKHNkLT5mcmFtZSwgZXZlbnQpOwogfQogCi1FaW5hX0Jvb2wgZXdrX2ZyYW1lX2Zl
ZWRfa2V5X3VwKEV2YXNfT2JqZWN0KiBvLCBjb25zdCBFdmFzX0V2ZW50X0tleV9VcCogZXYpCitF
aW5hX0Jvb2wgZXdrX2ZyYW1lX2ZlZWRfa2V5X3VwKEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgY29u
c3QgRXZhc19FdmVudF9LZXlfVXAqIHVwRXZlbnQpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9P
Ul9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVU
VVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk5fVkFMKGV2LCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTl9WQUwodXBFdmVudCwgRUlOQV9GQUxTRSk7CiAKLSAgICBEQkcoIm89JXAga2V5bmFtZT0l
cyAoa2V5PSVzLCBzdHJpbmc9JXMpIiwKLSAgICAgICAgbywgZXYtPmtleW5hbWUsIGV2LT5rZXkg
PyBldi0+a2V5IDogIiIsIGV2LT5zdHJpbmcgPyBldi0+c3RyaW5nIDogIiIpOworICAgIERCRygi
ZXdrRnJhbWU9JXAga2V5bmFtZT0lcyAoa2V5PSVzLCBzdHJpbmc9JXMpIiwKKyAgICAgICAgZXdr
RnJhbWUsIHVwRXZlbnQtPmtleW5hbWUsIHVwRXZlbnQtPmtleSA/IHVwRXZlbnQtPmtleSA6ICIi
LCB1cEV2ZW50LT5zdHJpbmcgPyB1cEV2ZW50LT5zdHJpbmcgOiAiIik7CiAKLSAgICBXZWJDb3Jl
OjpQbGF0Zm9ybUtleWJvYXJkRXZlbnQgZXZlbnQoZXYpOworICAgIFdlYkNvcmU6OlBsYXRmb3Jt
S2V5Ym9hcmRFdmVudCBldmVudCh1cEV2ZW50KTsKICAgICByZXR1cm4gc2QtPmZyYW1lLT5ldmVu
dEhhbmRsZXIoKS0+a2V5RXZlbnQoZXZlbnQpOwogfQogCi1Fd2tfVGV4dF9TZWxlY3Rpb25fVHlw
ZSBld2tfZnJhbWVfdGV4dF9zZWxlY3Rpb25fdHlwZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIG8p
CitFd2tfVGV4dF9TZWxlY3Rpb25fVHlwZSBld2tfZnJhbWVfdGV4dF9zZWxlY3Rpb25fdHlwZV9n
ZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRf
T1JfUkVUVVJOKG8sIHNkLCBFV0tfVEVYVF9TRUxFQ1RJT05fTk9ORSk7CisgICAgRVdLX0ZSQU1F
X1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFV0tfVEVYVF9TRUxFQ1RJT05fTk9ORSk7
CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgRVdLX1RFWFRf
U0VMRUNUSU9OX05PTkUpOwogCiAgICAgV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb24qIGNvbnRyb2xs
ZXIgPSBzZC0+ZnJhbWUtPnNlbGVjdGlvbigpOwpAQCAtMTA4NCwxMyArMTA4NCwxMyBAQCBFd2tf
VGV4dF9TZWxlY3Rpb25fVHlwZSBld2tfZnJhbWVfdGV4dF9zZWxlY3Rpb25fdHlwZV9nZXQoY29u
c3QgRXZhc19PYmplY3QqIG8pCiAgKiBieSBhIHZpZXcuIFVzdWFsbHkgb25lIG9wZXJhdGVzIG9u
IHRoZSB2aWV3IGFuZCBub3QgZGlyZWN0bHkgb24gdGhlCiAgKiBmcmFtZS4KICAqCi0gKiBAcGFy
YW0gZSBjYW52YXMgd2hlcmUgdG8gY3JlYXRlIHRoZSBmcmFtZSBvYmplY3QKKyAqIEBwYXJhbSBj
YW52YXMgY2FudmFzIHdoZXJlIHRvIGNyZWF0ZSB0aGUgZnJhbWUgb2JqZWN0CiAgKgogICogQHJl
dHVybiBhIG5ldyBmcmFtZSBvYmplY3Qgb3IgQGMgMCBvbiBmYWlsdXJlCiAgKi8KLUV2YXNfT2Jq
ZWN0KiBld2tfZnJhbWVfYWRkKEV2YXMqIGUpCitFdmFzX09iamVjdCogZXdrX2ZyYW1lX2FkZChF
dmFzKiBjYW52YXMpCiB7Ci0gICAgcmV0dXJuIGV2YXNfb2JqZWN0X3NtYXJ0X2FkZChlLCBfZXdr
X2ZyYW1lX3NtYXJ0X2NsYXNzX25ldygpKTsKKyAgICByZXR1cm4gZXZhc19vYmplY3Rfc21hcnRf
YWRkKGNhbnZhcywgX2V3a19mcmFtZV9zbWFydF9jbGFzc19uZXcoKSk7CiB9CiAKIC8qKgpAQCAt
MTEwMCwxMiArMTEwMCwxMiBAQCBFdmFzX09iamVjdCogZXdrX2ZyYW1lX2FkZChFdmFzKiBlKQog
ICoKICAqIFRoaXMgaXMgaW50ZXJuYWwgYW5kIHNob3VsZCBuZXZlciBiZSBjYWxsZWQgYnkgZXh0
ZXJuYWwgdXNlcnMuCiAgKi8KLUVpbmFfQm9vbCBld2tfZnJhbWVfaW5pdChFdmFzX09iamVjdCog
bywgRXZhc19PYmplY3QqIHZpZXcsIFdlYkNvcmU6OkZyYW1lKiBmcmFtZSkKK0VpbmFfQm9vbCBl
d2tfZnJhbWVfaW5pdChFdmFzX09iamVjdCogZXdrRnJhbWUsIEV2YXNfT2JqZWN0KiB2aWV3LCBX
ZWJDb3JlOjpGcmFtZSogZnJhbWUpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4o
bywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0Zy
YW1lLCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgaWYgKCFzZC0+ZnJhbWUpIHsKICAgICAgICAgV2Vi
Q29yZTo6RnJhbWVMb2FkZXJDbGllbnRFZmwqIGZsYyA9IF9ld2tfZnJhbWVfbG9hZGVyX2VmbF9n
ZXQoZnJhbWUpOwotICAgICAgICBmbGMtPnNldFdlYkZyYW1lKG8pOworICAgICAgICBmbGMtPnNl
dFdlYkZyYW1lKGV3a0ZyYW1lKTsKICAgICAgICAgc2QtPmZyYW1lID0gZnJhbWU7CiAgICAgICAg
IHNkLT52aWV3ID0gdmlldzsKICAgICAgICAgZnJhbWUtPmluaXQoKTsKQEAgLTExMTMsNyArMTEx
Myw3IEBAIEVpbmFfQm9vbCBld2tfZnJhbWVfaW5pdChFdmFzX09iamVjdCogbywgRXZhc19PYmpl
Y3QqIHZpZXcsIFdlYkNvcmU6OkZyYW1lKiBmcmFtCiAgICAgfQogCiAgICAgRVJSKCJmcmFtZSAl
cCBhbHJlYWR5IHNldCBmb3IgJXAsIGlnbm9yZWQgbmV3ICVwIiwKLSAgICAgICAgc2QtPmZyYW1l
LCBvLCBmcmFtZSk7CisgICAgICAgIHNkLT5mcmFtZSwgZXdrRnJhbWUsIGZyYW1lKTsKICAgICBy
ZXR1cm4gRUlOQV9GQUxTRTsKIH0KIApAQCAtMTEyMiw5ICsxMTIyLDkgQEAgRWluYV9Cb29sIGV3
a19mcmFtZV9pbml0KEV2YXNfT2JqZWN0KiBvLCBFdmFzX09iamVjdCogdmlldywgV2ViQ29yZTo6
RnJhbWUqIGZyYW0KICAqCiAgKiBBZGRzIGNoaWxkIHRvIHRoZSBmcmFtZS4KICAqLwotRWluYV9C
b29sIGV3a19mcmFtZV9jaGlsZF9hZGQoRXZhc19PYmplY3QqIG8sIFdURjo6UGFzc1JlZlB0cjxX
ZWJDb3JlOjpGcmFtZT4gY2hpbGQsIGNvbnN0IFdURjo6U3RyaW5nJiBuYW1lLCBjb25zdCBXZWJD
b3JlOjpLVVJMJiB1cmwsIGNvbnN0IFdURjo6U3RyaW5nJiByZWZlcnJlcikKK0VpbmFfQm9vbCBl
d2tfZnJhbWVfY2hpbGRfYWRkKEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgV1RGOjpQYXNzUmVmUHRy
PFdlYkNvcmU6OkZyYW1lPiBjaGlsZCwgY29uc3QgV1RGOjpTdHJpbmcmIG5hbWUsIGNvbnN0IFdl
YkNvcmU6OktVUkwmIHVybCwgY29uc3QgV1RGOjpTdHJpbmcmIHJlZmVycmVyKQogewotICAgIEVX
S19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAwKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VU
X09SX1JFVFVSTihld2tGcmFtZSwgc2QsIDApOwogICAgIGNoYXIgYnVmWzI1Nl07CiAgICAgRXZh
c19PYmplY3QqIGZyYW1lOwogICAgIFdlYkNvcmU6OkZyYW1lKiBjZjsKQEAgLTExNDgsNyArMTE0
OCw3IEBAIEVpbmFfQm9vbCBld2tfZnJhbWVfY2hpbGRfYWRkKEV2YXNfT2JqZWN0KiBvLCBXVEY6
OlBhc3NSZWZQdHI8V2ViQ29yZTo6RnJhbWU+IGNoCiAgICAgfQogICAgIHNucHJpbnRmKGJ1Ziwg
c2l6ZW9mKGJ1ZiksICJFV0tfRnJhbWU6Y2hpbGQvJXMiLCBuYW1lLnV0ZjgoKS5kYXRhKCkpOwog
ICAgIGV2YXNfb2JqZWN0X25hbWVfc2V0KGZyYW1lLCBidWYpOwotICAgIGV2YXNfb2JqZWN0X3Nt
YXJ0X21lbWJlcl9hZGQoZnJhbWUsIG8pOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X21lbWJlcl9h
ZGQoZnJhbWUsIGV3a0ZyYW1lKTsKICAgICBldmFzX29iamVjdF9zaG93KGZyYW1lKTsKIAogICAg
IC8vIFRoZSBjcmVhdGlvbiBvZiB0aGUgZnJhbWUgbWF5IGhhdmUgcnVuIGFyYml0cmFyeSBKYXZh
U2NyaXB0IHRoYXQgcmVtb3ZlZCBpdCBmcm9tIHRoZSBwYWdlIGFscmVhZHkuCkBAIC0xMTc3LDEy
ICsxMTc3LDEyIEBAIEVpbmFfQm9vbCBld2tfZnJhbWVfY2hpbGRfYWRkKEV2YXNfT2JqZWN0KiBv
LCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6RnJhbWU+IGNoCiAgKiBAcGFyYW0gbyBUaGUgZXdr
IGZyYW1lIHRvIGFjdCB1cG9uLgogICogQHBhcmFtIG5ld1BhcmVudCBUaGUgbmV3IHZpZXcgdGhh
dCB3aWxsIGJlIHNldCBhcyB0aGUgcGFyZW50IG9mIHRoZSBmcmFtZS4KICAqLwotdm9pZCBld2tf
ZnJhbWVfdmlld19zZXQoRXZhc19PYmplY3QqIG8sIEV2YXNfT2JqZWN0KiBuZXdQYXJlbnQpCit2
b2lkIGV3a19mcmFtZV92aWV3X3NldChFdmFzX09iamVjdCogZXdrRnJhbWUsIEV2YXNfT2JqZWN0
KiBuZXdQYXJlbnQpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4obywgc2QpOwor
ICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCk7CiAKLSAgICBldmFz
X29iamVjdF9zbWFydF9tZW1iZXJfZGVsKG8pOwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X21lbWJl
cl9hZGQobywgbmV3UGFyZW50KTsKKyAgICBldmFzX29iamVjdF9zbWFydF9tZW1iZXJfZGVsKGV3
a0ZyYW1lKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9tZW1iZXJfYWRkKGV3a0ZyYW1lLCBuZXdQ
YXJlbnQpOwogCiAgICAgc2QtPnZpZXcgPSBuZXdQYXJlbnQ7CiB9CkBAIC0xMTkxLDEwICsxMTkx
LDEwIEBAIHZvaWQgZXdrX2ZyYW1lX3ZpZXdfc2V0KEV2YXNfT2JqZWN0KiBvLCBFdmFzX09iamVj
dCogbmV3UGFyZW50KQogICogQGludGVybmFsCiAgKiBGcmFtZSB3YXMgZGVzdHJveWVkIGJ5IGxv
YWRlciwgcmVtb3ZlIGludGVybmFsIHJlZmVyZW5jZS4KICAqLwotdm9pZCBld2tfZnJhbWVfY29y
ZV9nb25lKEV2YXNfT2JqZWN0KiBvKQordm9pZCBld2tfZnJhbWVfY29yZV9nb25lKEV2YXNfT2Jq
ZWN0KiBld2tGcmFtZSkKIHsKLSAgICBEQkcoIm89JXAiLCBvKTsKLSAgICBFV0tfRlJBTUVfU0Rf
R0VUX09SX1JFVFVSTihvLCBzZCk7CisgICAgREJHKCJld2tGcmFtZT0lcCIsIGV3a0ZyYW1lKTsK
KyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QpOwogICAgIHNkLT5m
cmFtZSA9IDA7CiB9CiAKQEAgLTEyMDUsOSArMTIwNSw5IEBAIHZvaWQgZXdrX2ZyYW1lX2NvcmVf
Z29uZShFdmFzX09iamVjdCogbykKICAqIEF2b2lkIHVzaW5nIHRoaXMgY2FsbCBmcm9tIG91dHNp
ZGUsIGFkZCBzcGVjaWZpYyBld2tfZnJhbWVfKgogICogYWN0aW9ucyBpbnN0ZWFkLgogICovCi1X
ZWJDb3JlOjpGcmFtZSogZXdrX2ZyYW1lX2NvcmVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQor
V2ViQ29yZTo6RnJhbWUqIGV3a19mcmFtZV9jb3JlX2dldChjb25zdCBFdmFzX09iamVjdCogZXdr
RnJhbWUpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIDApOworICAg
IEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgMCk7CiAgICAgcmV0dXJu
IHNkLT5mcmFtZTsKIH0KIApAQCAtMTIyNCw5ICsxMjI0LDkgQEAgV2ViQ29yZTo6RnJhbWUqIGV3
a19mcmFtZV9jb3JlX2dldChjb25zdCBFdmFzX09iamVjdCogbykKICAqCiAgKiBFbWl0cyBzaWdu
YWw6ICJyZXNvdXJjZSxyZXF1ZXN0LHdpbGxzZW5kIgogICovCi12b2lkIGV3a19mcmFtZV9yZXF1
ZXN0X3dpbGxfc2VuZChFdmFzX09iamVjdCogbywgRXdrX0ZyYW1lX1Jlc291cmNlX1JlcXVlc3Qq
IHJlcXVlc3QpCit2b2lkIGV3a19mcmFtZV9yZXF1ZXN0X3dpbGxfc2VuZChFdmFzX09iamVjdCog
ZXdrRnJhbWUsIEV3a19GcmFtZV9SZXNvdXJjZV9SZXF1ZXN0KiByZXF1ZXN0KQogewotICAgIGV2
YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwobywgInJlc291cmNlLHJlcXVlc3Qsd2lsbHNl
bmQiLCByZXF1ZXN0KTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKGV3a0Zy
YW1lLCAicmVzb3VyY2UscmVxdWVzdCx3aWxsc2VuZCIsIHJlcXVlc3QpOwogfQogCiAvKioKQEAg
LTEyMzgsOSArMTIzOCw5IEBAIHZvaWQgZXdrX2ZyYW1lX3JlcXVlc3Rfd2lsbF9zZW5kKEV2YXNf
T2JqZWN0KiBvLCBFd2tfRnJhbWVfUmVzb3VyY2VfUmVxdWVzdCogcmVxCiAgKgogICogRW1pdHMg
c2lnbmFsOiAicmVzb3VyY2UscmVxdWVzdCxuZXciCiAgKi8KLXZvaWQgZXdrX2ZyYW1lX3JlcXVl
c3RfYXNzaWduX2lkZW50aWZpZXIoRXZhc19PYmplY3QqIG8sIGNvbnN0IEV3a19GcmFtZV9SZXNv
dXJjZV9SZXF1ZXN0KiByZXF1ZXN0KQordm9pZCBld2tfZnJhbWVfcmVxdWVzdF9hc3NpZ25faWRl
bnRpZmllcihFdmFzX09iamVjdCogZXdrRnJhbWUsIGNvbnN0IEV3a19GcmFtZV9SZXNvdXJjZV9S
ZXF1ZXN0KiByZXF1ZXN0KQogewotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwo
bywgInJlc291cmNlLHJlcXVlc3QsbmV3IiwgKHZvaWQqKXJlcXVlc3QpOworICAgIGV2YXNfb2Jq
ZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdrRnJhbWUsICJyZXNvdXJjZSxyZXF1ZXN0LG5ldyIs
ICh2b2lkKilyZXF1ZXN0KTsKIH0KIAogLyoqCkBAIC0xMjUxLDkgKzEyNTEsOSBAQCB2b2lkIGV3
a19mcmFtZV9yZXF1ZXN0X2Fzc2lnbl9pZGVudGlmaWVyKEV2YXNfT2JqZWN0KiBvLCBjb25zdCBF
d2tfRnJhbWVfUmVzb3VyYwogICoKICAqIEVtaXRzIHNpZ25hbDogIm5hdmlnYXRpb24sZmlyc3Qi
CiAgKi8KLXZvaWQgZXdrX2ZyYW1lX2RpZF9wZXJmb3JtX2ZpcnN0X25hdmlnYXRpb24oRXZhc19P
YmplY3QqIG8pCit2b2lkIGV3a19mcmFtZV9kaWRfcGVyZm9ybV9maXJzdF9uYXZpZ2F0aW9uKEV2
YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19j
YWxsKG8sICJuYXZpZ2F0aW9uLGZpcnN0IiwgMCk7CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2Fs
bGJhY2tfY2FsbChld2tGcmFtZSwgIm5hdmlnYXRpb24sZmlyc3QiLCAwKTsKIH0KIAogLyoqCkBA
IC0xMjY1LDkgKzEyNjUsOSBAQCB2b2lkIGV3a19mcmFtZV9kaWRfcGVyZm9ybV9maXJzdF9uYXZp
Z2F0aW9uKEV2YXNfT2JqZWN0KiBvKQogICoKICAqIEVtaXRzIHNpZ25hbDogInN0YXRlLHNhdmUi
CiAgKi8KLXZvaWQgZXdrX2ZyYW1lX3ZpZXdfc3RhdGVfc2F2ZShFdmFzX09iamVjdCogbywgV2Vi
Q29yZTo6SGlzdG9yeUl0ZW0qIGl0ZW0pCit2b2lkIGV3a19mcmFtZV92aWV3X3N0YXRlX3NhdmUo
RXZhc19PYmplY3QqIGV3a0ZyYW1lLCBXZWJDb3JlOjpIaXN0b3J5SXRlbSogaXRlbSkKIHsKLSAg
ICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKG8sICJzdGF0ZSxzYXZlIiwgMCk7Cisg
ICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChld2tGcmFtZSwgInN0YXRlLHNhdmUi
LCAwKTsKIH0KIAogLyoqCkBAIC0xMjc2LDE2ICsxMjc2LDE2IEBAIHZvaWQgZXdrX2ZyYW1lX3Zp
ZXdfc3RhdGVfc2F2ZShFdmFzX09iamVjdCogbywgV2ViQ29yZTo6SGlzdG9yeUl0ZW0qIGl0ZW0p
CiAgKgogICogRW1pdHMgc2lnbmFsOiAibG9hZCxzdGFydGVkIiB3aXRoIG5vIHBhcmFtZXRlcnMu
CiAgKi8KLXZvaWQgZXdrX2ZyYW1lX2xvYWRfc3RhcnRlZChFdmFzX09iamVjdCogbykKK3ZvaWQg
ZXdrX2ZyYW1lX2xvYWRfc3RhcnRlZChFdmFzX09iamVjdCogZXdrRnJhbWUpCiB7CiAgICAgRXZh
c19PYmplY3QqIG1haW5fZnJhbWU7Ci0gICAgREJHKCJvPSVwIiwgbyk7Ci0gICAgZXZhc19vYmpl
Y3Rfc21hcnRfY2FsbGJhY2tfY2FsbChvLCAibG9hZCxzdGFydGVkIiwgMCk7Ci0gICAgRVdLX0ZS
QU1FX1NEX0dFVF9PUl9SRVRVUk4obywgc2QpOworICAgIERCRygiZXdrRnJhbWU9JXAiLCBld2tG
cmFtZSk7CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChld2tGcmFtZSwgImxv
YWQsc3RhcnRlZCIsIDApOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1l
LCBzZCk7CiAgICAgZXdrX3ZpZXdfbG9hZF9zdGFydGVkKHNkLT52aWV3KTsKIAogICAgIG1haW5f
ZnJhbWUgPSBld2tfdmlld19mcmFtZV9tYWluX2dldChzZC0+dmlldyk7Ci0gICAgaWYgKG1haW5f
ZnJhbWUgPT0gbykKKyAgICBpZiAobWFpbl9mcmFtZSA9PSBld2tGcmFtZSkKICAgICAgICAgZXdr
X3ZpZXdfZnJhbWVfbWFpbl9sb2FkX3N0YXJ0ZWQoc2QtPnZpZXcpOwogfQogCkBAIC0xMjk3LDkg
KzEyOTcsOSBAQCB2b2lkIGV3a19mcmFtZV9sb2FkX3N0YXJ0ZWQoRXZhc19PYmplY3QqIG8pCiAg
KgogICogRW1pdHMgc2lnbmFsOiAibG9hZCxwcm92aXNpb25hbCIgd2l0aCBubyBwYXJhbWV0ZXJz
LgogICovCi12b2lkIGV3a19mcmFtZV9sb2FkX3Byb3Zpc2lvbmFsKEV2YXNfT2JqZWN0KiBvKQor
dm9pZCBld2tfZnJhbWVfbG9hZF9wcm92aXNpb25hbChFdmFzX09iamVjdCogZXdrRnJhbWUpCiB7
Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChvLCAibG9hZCxwcm92aXNpb25h
bCIsIDApOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdrRnJhbWUsICJs
b2FkLHByb3Zpc2lvbmFsIiwgMCk7CiB9CiAKIC8qKgpAQCAtMTMxMCw5ICsxMzEwLDkgQEAgdm9p
ZCBld2tfZnJhbWVfbG9hZF9wcm92aXNpb25hbChFdmFzX09iamVjdCogbykKICAqCiAgKiBFbWl0
cyBzaWduYWw6ICJsb2FkLGZpcnN0bGF5b3V0LGZpbmlzaGVkIiB3aXRoIG5vIHBhcmFtZXRlcnMu
CiAgKi8KLXZvaWQgZXdrX2ZyYW1lX2xvYWRfZmlyc3RsYXlvdXRfZmluaXNoZWQoRXZhc19PYmpl
Y3QqIG8pCit2b2lkIGV3a19mcmFtZV9sb2FkX2ZpcnN0bGF5b3V0X2ZpbmlzaGVkKEV2YXNfT2Jq
ZWN0KiBld2tGcmFtZSkKIHsKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKG8s
ICJsb2FkLGZpcnN0bGF5b3V0LGZpbmlzaGVkIiwgMCk7CisgICAgZXZhc19vYmplY3Rfc21hcnRf
Y2FsbGJhY2tfY2FsbChld2tGcmFtZSwgImxvYWQsZmlyc3RsYXlvdXQsZmluaXNoZWQiLCAwKTsK
IH0KIAogLyoqCkBAIC0xMzIzLDkgKzEzMjMsOSBAQCB2b2lkIGV3a19mcmFtZV9sb2FkX2ZpcnN0
bGF5b3V0X2ZpbmlzaGVkKEV2YXNfT2JqZWN0KiBvKQogICoKICAqIEVtaXRzIHNpZ25hbDogImxv
YWQsbm9uZW1wdHlsYXlvdXQsZmluaXNoZWQiIHdpdGggbm8gcGFyYW1ldGVycy4KICAqLwotdm9p
ZCBld2tfZnJhbWVfbG9hZF9maXJzdGxheW91dF9ub25lbXB0eV9maW5pc2hlZChFdmFzX09iamVj
dCogbykKK3ZvaWQgZXdrX2ZyYW1lX2xvYWRfZmlyc3RsYXlvdXRfbm9uZW1wdHlfZmluaXNoZWQo
RXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNr
X2NhbGwobywgImxvYWQsbm9uZW1wdHlsYXlvdXQsZmluaXNoZWQiLCAwKTsKKyAgICBldmFzX29i
amVjdF9zbWFydF9jYWxsYmFja19jYWxsKGV3a0ZyYW1lLCAibG9hZCxub25lbXB0eWxheW91dCxm
aW5pc2hlZCIsIDApOwogfQogCiAvKioKQEAgLTEzMzYsMTEgKzEzMzYsMTEgQEAgdm9pZCBld2tf
ZnJhbWVfbG9hZF9maXJzdGxheW91dF9ub25lbXB0eV9maW5pc2hlZChFdmFzX09iamVjdCogbykK
ICAqCiAgKiBFbWl0cyBzaWduYWw6ICJsb2FkLGRvY3VtZW50LGZpbmlzaGVkIiB3aXRoIG5vIHBh
cmFtZXRlcnMuCiAgKi8KLXZvaWQgZXdrX2ZyYW1lX2xvYWRfZG9jdW1lbnRfZmluaXNoZWQoRXZh
c19PYmplY3QqIG8pCit2b2lkIGV3a19mcmFtZV9sb2FkX2RvY3VtZW50X2ZpbmlzaGVkKEV2YXNf
T2JqZWN0KiBld2tGcmFtZSkKIHsKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxs
KG8sICJsb2FkLGRvY3VtZW50LGZpbmlzaGVkIiwgMCk7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9P
Ul9SRVRVUk4obywgc2QpOwotICAgIGV3a192aWV3X2xvYWRfZG9jdW1lbnRfZmluaXNoZWQoc2Qt
PnZpZXcsIG8pOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdrRnJhbWUs
ICJsb2FkLGRvY3VtZW50LGZpbmlzaGVkIiwgMCk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9S
RVRVUk4oZXdrRnJhbWUsIHNkKTsKKyAgICBld2tfdmlld19sb2FkX2RvY3VtZW50X2ZpbmlzaGVk
KHNkLT52aWV3LCBld2tGcmFtZSk7CiB9CiAKIC8qKgpAQCAtMTM1MywyNyArMTM1MywyNyBAQCB2
b2lkIGV3a19mcmFtZV9sb2FkX2RvY3VtZW50X2ZpbmlzaGVkKEV2YXNfT2JqZWN0KiBvKQogICog
QG5vdGUgdGhlcmUgc2hvdWxkIG5vdGJlIGFueSBlcnJvciBzdHVmZiBoZXJlLCBidXQgdHJ5aW5n
IHRvIGJlCiAgKiAgICAgICBjb21wYXRpYmxlIHdpdGggcHJldmlvdXMgV2ViS2l0LgogICovCi12
b2lkIGV3a19mcmFtZV9sb2FkX2ZpbmlzaGVkKEV2YXNfT2JqZWN0KiBvLCBjb25zdCBjaGFyKiBl
cnJvcl9kb21haW4sIGludCBlcnJvcl9jb2RlLCBFaW5hX0Jvb2wgaXNfY2FuY2VsbGF0aW9uLCBj
b25zdCBjaGFyKiBlcnJvcl9kZXNjcmlwdGlvbiwgY29uc3QgY2hhciogZmFpbGluZ191cmwpCit2
b2lkIGV3a19mcmFtZV9sb2FkX2ZpbmlzaGVkKEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgY29uc3Qg
Y2hhciogZXJyb3JEb21haW4sIGludCBlcnJvckNvZGUsIEVpbmFfQm9vbCBpc0NhbmNlbGxhdGlv
biwgY29uc3QgY2hhciogZXJyb3JEZXNjcmlwdGlvbiwgY29uc3QgY2hhciogZmFpbGluZ1VybCkK
IHsKLSAgICBFd2tfRnJhbWVfTG9hZF9FcnJvciBidWYsICogZXJyb3I7Ci0gICAgaWYgKCFlcnJv
cl9kb21haW4pIHsKLSAgICAgICAgREJHKCJvPSVwLCBzdWNjZXNzLiIsIG8pOworICAgIEV3a19G
cmFtZV9Mb2FkX0Vycm9yIGJ1ZiwgKmVycm9yOworICAgIGlmICghZXJyb3JEb21haW4pIHsKKyAg
ICAgICAgREJHKCJld2tGcmFtZT0lcCwgc3VjY2Vzcy4iLCBld2tGcmFtZSk7CiAgICAgICAgIGVy
cm9yID0gMDsKICAgICB9IGVsc2UgewotICAgICAgICBEQkcoIm89JXAsIGVycm9yPSVzICglZCwg
Y2FuY2VsbGF0aW9uPSVoaHUpIFwiJXNcIiwgdXJsPSVzIiwKLSAgICAgICAgICAgIG8sIGVycm9y
X2RvbWFpbiwgZXJyb3JfY29kZSwgaXNfY2FuY2VsbGF0aW9uLAotICAgICAgICAgICAgZXJyb3Jf
ZGVzY3JpcHRpb24sIGZhaWxpbmdfdXJsKTsKLQotICAgICAgICBidWYuZG9tYWluID0gZXJyb3Jf
ZG9tYWluOwotICAgICAgICBidWYuY29kZSA9IGVycm9yX2NvZGU7Ci0gICAgICAgIGJ1Zi5pc19j
YW5jZWxsYXRpb24gPSBpc19jYW5jZWxsYXRpb247Ci0gICAgICAgIGJ1Zi5kZXNjcmlwdGlvbiA9
IGVycm9yX2Rlc2NyaXB0aW9uOwotICAgICAgICBidWYuZmFpbGluZ191cmwgPSBmYWlsaW5nX3Vy
bDsKLSAgICAgICAgYnVmLmZyYW1lID0gbzsKKyAgICAgICAgREJHKCJld2tGcmFtZT0lcCwgZXJy
b3I9JXMgKCVkLCBjYW5jZWxsYXRpb249JWhodSkgXCIlc1wiLCB1cmw9JXMiLAorICAgICAgICAg
ICAgZXdrRnJhbWUsIGVycm9yRG9tYWluLCBlcnJvckNvZGUsIGlzQ2FuY2VsbGF0aW9uLAorICAg
ICAgICAgICAgZXJyb3JEZXNjcmlwdGlvbiwgZmFpbGluZ1VybCk7CisKKyAgICAgICAgYnVmLmRv
bWFpbiA9IGVycm9yRG9tYWluOworICAgICAgICBidWYuY29kZSA9IGVycm9yQ29kZTsKKyAgICAg
ICAgYnVmLmlzX2NhbmNlbGxhdGlvbiA9IGlzQ2FuY2VsbGF0aW9uOworICAgICAgICBidWYuZGVz
Y3JpcHRpb24gPSBlcnJvckRlc2NyaXB0aW9uOworICAgICAgICBidWYuZmFpbGluZ191cmwgPSBm
YWlsaW5nVXJsOworICAgICAgICBidWYuZnJhbWUgPSBld2tGcmFtZTsKICAgICAgICAgZXJyb3Ig
PSAmYnVmOwogICAgIH0KLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKG8sICJs
b2FkLGZpbmlzaGVkIiwgZXJyb3IpOwotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8s
IHNkKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKGV3a0ZyYW1lLCAibG9h
ZCxmaW5pc2hlZCIsIGVycm9yKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tG
cmFtZSwgc2QpOwogICAgIGV3a192aWV3X2xvYWRfZmluaXNoZWQoc2QtPnZpZXcsIGVycm9yKTsK
IH0KIApAQCAtMTM4MywyNCArMTM4MywyNCBAQCB2b2lkIGV3a19mcmFtZV9sb2FkX2ZpbmlzaGVk
KEV2YXNfT2JqZWN0KiBvLCBjb25zdCBjaGFyKiBlcnJvcl9kb21haW4sIGludCBlcnJvcgogICoK
ICAqIEVtaXRzIHNpZ25hbDogImxvYWQsZXJyb3IiIHdpdGggcG9pbnRlciB0byBFd2tfRnJhbWVf
TG9hZF9FcnJvci4KICAqLwotdm9pZCBld2tfZnJhbWVfbG9hZF9lcnJvcihFdmFzX09iamVjdCog
bywgY29uc3QgY2hhciogZXJyb3JfZG9tYWluLCBpbnQgZXJyb3JfY29kZSwgRWluYV9Cb29sIGlz
X2NhbmNlbGxhdGlvbiwgY29uc3QgY2hhciogZXJyb3JfZGVzY3JpcHRpb24sIGNvbnN0IGNoYXIq
IGZhaWxpbmdfdXJsKQordm9pZCBld2tfZnJhbWVfbG9hZF9lcnJvcihFdmFzX09iamVjdCogZXdr
RnJhbWUsIGNvbnN0IGNoYXIqIGVycm9yRG9tYWluLCBpbnQgZXJyb3JDb2RlLCBFaW5hX0Jvb2wg
aXNDYW5jZWxsYXRpb24sIGNvbnN0IGNoYXIqIGVycm9yRGVzY3JpcHRpb24sIGNvbnN0IGNoYXIq
IGZhaWxpbmdVcmwpCiB7CiAgICAgRXdrX0ZyYW1lX0xvYWRfRXJyb3IgZXJyb3I7CiAKLSAgICBE
QkcoIm89JXAsIGVycm9yPSVzICglZCwgY2FuY2VsbGF0aW9uPSVoaHUpIFwiJXNcIiwgdXJsPSVz
IiwKLSAgICAgICAgbywgZXJyb3JfZG9tYWluLCBlcnJvcl9jb2RlLCBpc19jYW5jZWxsYXRpb24s
Ci0gICAgICAgIGVycm9yX2Rlc2NyaXB0aW9uLCBmYWlsaW5nX3VybCk7CisgICAgREJHKCJld2tG
cmFtZT0lcCwgZXJyb3I9JXMgKCVkLCBjYW5jZWxsYXRpb249JWhodSkgXCIlc1wiLCB1cmw9JXMi
LAorICAgICAgICBld2tGcmFtZSwgZXJyb3JEb21haW4sIGVycm9yQ29kZSwgaXNDYW5jZWxsYXRp
b24sCisgICAgICAgIGVycm9yRGVzY3JpcHRpb24sIGZhaWxpbmdVcmwpOwogCi0gICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk4oZXJyb3JfZG9tYWluKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTihlcnJvckRvbWFpbik7CiAKLSAgICBlcnJvci5jb2RlID0gZXJyb3JfY29kZTsK
LSAgICBlcnJvci5pc19jYW5jZWxsYXRpb24gPSBpc19jYW5jZWxsYXRpb247Ci0gICAgZXJyb3Iu
ZG9tYWluID0gZXJyb3JfZG9tYWluOwotICAgIGVycm9yLmRlc2NyaXB0aW9uID0gZXJyb3JfZGVz
Y3JpcHRpb247Ci0gICAgZXJyb3IuZmFpbGluZ191cmwgPSBmYWlsaW5nX3VybDsKLSAgICBlcnJv
ci5mcmFtZSA9IG87Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChvLCAibG9h
ZCxlcnJvciIsICZlcnJvcik7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4obywgc2Qp
OworICAgIGVycm9yLmNvZGUgPSBlcnJvckNvZGU7CisgICAgZXJyb3IuaXNfY2FuY2VsbGF0aW9u
ID0gaXNDYW5jZWxsYXRpb247CisgICAgZXJyb3IuZG9tYWluID0gZXJyb3JEb21haW47CisgICAg
ZXJyb3IuZGVzY3JpcHRpb24gPSBlcnJvckRlc2NyaXB0aW9uOworICAgIGVycm9yLmZhaWxpbmdf
dXJsID0gZmFpbGluZ1VybDsKKyAgICBlcnJvci5mcmFtZSA9IGV3a0ZyYW1lOworICAgIGV2YXNf
b2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdrRnJhbWUsICJsb2FkLGVycm9yIiwgJmVycm9y
KTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QpOwogICAgIGV3
a192aWV3X2xvYWRfZXJyb3Ioc2QtPnZpZXcsICZlcnJvcik7CiB9CiAKQEAgLTE0MTAsMTcgKzE0
MTAsMTcgQEAgdm9pZCBld2tfZnJhbWVfbG9hZF9lcnJvcihFdmFzX09iamVjdCogbywgY29uc3Qg
Y2hhciogZXJyb3JfZG9tYWluLCBpbnQgZXJyb3JfY28KICAqCiAgKiBFbWl0cyBzaWduYWw6ICJs
b2FkLHByb2dyZXNzIiB3aXRoIHBvaW50ZXIgdG8gYSBkb3VibGUgZnJvbSAwLjAgdG8gMS4wLgog
ICovCi12b2lkIGV3a19mcmFtZV9sb2FkX3Byb2dyZXNzX2NoYW5nZWQoRXZhc19PYmplY3QqIG8p
Cit2b2lkIGV3a19mcmFtZV9sb2FkX3Byb2dyZXNzX2NoYW5nZWQoRXZhc19PYmplY3QqIGV3a0Zy
YW1lKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkKTsKKyAgICBFV0tf
RlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QpOwogICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOKHNkLT5mcmFtZSk7CiAKICAgICAvLyBUT0RPOiB0aGlzIGlzIHBlciBwYWdl
LCB0aGVyZSBzaG91bGQgYmUgYSB3YXkgdG8gaGF2ZSBwZXItZnJhbWUuCiAgICAgZG91YmxlIHBy
b2dyZXNzID0gc2QtPmZyYW1lLT5wYWdlKCktPnByb2dyZXNzKCktPmVzdGltYXRlZFByb2dyZXNz
KCk7CiAKLSAgICBEQkcoIm89JXAgKHA9JTAuM2YpIiwgbywgcHJvZ3Jlc3MpOworICAgIERCRygi
ZXdrRnJhbWU9JXAgKHA9JTAuM2YpIiwgZXdrRnJhbWUsIHByb2dyZXNzKTsKIAotICAgIGV2YXNf
b2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwobywgImxvYWQscHJvZ3Jlc3MiLCAmcHJvZ3Jlc3Mp
OworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdrRnJhbWUsICJsb2FkLHBy
b2dyZXNzIiwgJnByb2dyZXNzKTsKICAgICBld2tfdmlld19sb2FkX3Byb2dyZXNzX2NoYW5nZWQo
c2QtPnZpZXcpOwogfQogCkBAIC0xNDMwLDE4ICsxNDMwLDE4IEBAIHZvaWQgZXdrX2ZyYW1lX2xv
YWRfcHJvZ3Jlc3NfY2hhbmdlZChFdmFzX09iamVjdCogbykKICAqCiAgKiBSZXBvcnRzIGNvbnRl
bnRzIHNpemUgY2hhbmdlZC4KICAqLwotdm9pZCBld2tfZnJhbWVfY29udGVudHNfc2l6ZV9jaGFu
Z2VkKEV2YXNfT2JqZWN0KiBvLCBFdmFzX0Nvb3JkIHcsIEV2YXNfQ29vcmQgaCkKK3ZvaWQgZXdr
X2ZyYW1lX2NvbnRlbnRzX3NpemVfY2hhbmdlZChFdmFzX09iamVjdCogZXdrRnJhbWUsIEV2YXNf
Q29vcmQgd2lkdGgsIEV2YXNfQ29vcmQgaGVpZ2h0KQogewotICAgIERCRygibz0lcDogJWR4JWQi
LCBvLCB3LCBoKTsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihvLCBzZCk7Ci0gICAg
aWYgKHNkLT5jb250ZW50c19zaXplLncgPT0gdyAmJiBzZC0+Y29udGVudHNfc2l6ZS5oID09IGgp
CisgICAgREJHKCJld2tGcmFtZT0lcDogJWR4JWQiLCBld2tGcmFtZSwgd2lkdGgsIGhlaWdodCk7
CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkKTsKKyAgICBpZiAo
c2QtPmNvbnRlbnRzX3NpemUudyA9PSB3aWR0aCAmJiBzZC0+Y29udGVudHNfc2l6ZS5oID09IGhl
aWdodCkKICAgICAgICAgcmV0dXJuOwotICAgIHNkLT5jb250ZW50c19zaXplLncgPSB3OwotICAg
IHNkLT5jb250ZW50c19zaXplLmggPSBoOworICAgIHNkLT5jb250ZW50c19zaXplLncgPSB3aWR0
aDsKKyAgICBzZC0+Y29udGVudHNfc2l6ZS5oID0gaGVpZ2h0OwogICAgIC8vIFRPRE86IHVwZGF0
ZSBzb21ldGhpbmcgZWxzZSBpbnRlcm5hbGx5PwogCi0gICAgRXZhc19Db29yZCBzaXplWzJdID0g
e3csIGh9OwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwobywgImNvbnRlbnRz
LHNpemUsY2hhbmdlZCIsIHNpemUpOworICAgIEV2YXNfQ29vcmQgc2l6ZVsyXSA9IHt3aWR0aCwg
aGVpZ2h0fTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKGV3a0ZyYW1lLCAi
Y29udGVudHMsc2l6ZSxjaGFuZ2VkIiwgc2l6ZSk7CiB9CiAKIC8qKgpAQCAtMTQ0OSwxMyArMTQ0
OSwxMyBAQCB2b2lkIGV3a19mcmFtZV9jb250ZW50c19zaXplX2NoYW5nZWQoRXZhc19PYmplY3Qq
IG8sIEV2YXNfQ29vcmQgdywgRXZhc19Db29yZCBoKQogICoKICAqIFJlcG9ydHMgdGl0bGUgY2hh
bmdlZC4KICAqLwotdm9pZCBld2tfZnJhbWVfdGl0bGVfc2V0KEV2YXNfT2JqZWN0KiBvLCBjb25z
dCBjaGFyKiB0aXRsZSkKK3ZvaWQgZXdrX2ZyYW1lX3RpdGxlX3NldChFdmFzX09iamVjdCogZXdr
RnJhbWUsIGNvbnN0IGNoYXIqIHRpdGxlKQogewotICAgIERCRygibz0lcCwgdGl0bGU9JXMiLCBv
LCB0aXRsZSA/IHRpdGxlIDogIihudWxsKSIpOwotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVU
VVJOKG8sIHNkKTsKKyAgICBEQkcoImV3a0ZyYW1lPSVwLCB0aXRsZT0lcyIsIGV3a0ZyYW1lLCB0
aXRsZSA/IHRpdGxlIDogIihudWxsKSIpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJO
KGV3a0ZyYW1lLCBzZCk7CiAgICAgaWYgKCFlaW5hX3N0cmluZ3NoYXJlX3JlcGxhY2UoJnNkLT50
aXRsZSwgdGl0bGUpKQogICAgICAgICByZXR1cm47Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2Fs
bGJhY2tfY2FsbChvLCAidGl0bGUsY2hhbmdlZCIsICh2b2lkKilzZC0+dGl0bGUpOworICAgIGV2
YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdrRnJhbWUsICJ0aXRsZSxjaGFuZ2VkIiwg
KHZvaWQqKXNkLT50aXRsZSk7CiB9CiAKIC8qKgpAQCAtMTQ2MywxMCArMTQ2MywxMCBAQCB2b2lk
IGV3a19mcmFtZV90aXRsZV9zZXQoRXZhc19PYmplY3QqIG8sIGNvbnN0IGNoYXIqIHRpdGxlKQog
ICoKICAqIENyZWF0ZXMgYSB2aWV3LgogICovCi12b2lkIGV3a19mcmFtZV92aWV3X2NyZWF0ZV9m
b3JfdmlldyhFdmFzX09iamVjdCogbywgRXZhc19PYmplY3QqIHZpZXcpCit2b2lkIGV3a19mcmFt
ZV92aWV3X2NyZWF0ZV9mb3JfdmlldyhFdmFzX09iamVjdCogZXdrRnJhbWUsIEV2YXNfT2JqZWN0
KiB2aWV3KQogewotICAgIERCRygibz0lcCwgdmlldz0lcCIsIG8sIHZpZXcpOwotICAgIEVXS19G
UkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkKTsKKyAgICBEQkcoImV3a0ZyYW1lPSVwLCB2aWV3
PSVwIiwgZXdrRnJhbWUsIHZpZXcpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3
a0ZyYW1lLCBzZCk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmZyYW1lKTsK
ICAgICBFdmFzX0Nvb3JkIHcsIGg7CiAKQEAgLTE0OTAsMTggKzE0OTAsMTggQEAgdm9pZCBld2tf
ZnJhbWVfdmlld19jcmVhdGVfZm9yX3ZpZXcoRXZhc19PYmplY3QqIG8sIEV2YXNfT2JqZWN0KiB2
aWV3KQogCiAgICAgY29uc3QgY2hhciogdGhlbWUgPSBld2tfdmlld190aGVtZV9nZXQodmlldyk7
CiAgICAgc2QtPmZyYW1lLT52aWV3KCktPnNldEVkamVUaGVtZSh0aGVtZSk7Ci0gICAgc2QtPmZy
YW1lLT52aWV3KCktPnNldEV2YXNPYmplY3Qobyk7CisgICAgc2QtPmZyYW1lLT52aWV3KCktPnNl
dEV2YXNPYmplY3QoZXdrRnJhbWUpOwogfQogCi1zc2l6ZV90IGV3a19mcmFtZV9zb3VyY2VfZ2V0
KGNvbnN0IEV2YXNfT2JqZWN0KiBvLCBjaGFyKiogZnJhbWVfc291cmNlKQorc3NpemVfdCBld2tf
ZnJhbWVfc291cmNlX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrRnJhbWUsIGNoYXIqKiBmcmFt
ZVNvdXJjZSkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgLTEpOwor
ICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgLTEpOwogICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIC0xKTsKICAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLT5kb2N1bWVudCgpLCAtMSk7Ci0gICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGZyYW1lX3NvdXJjZSwgLTEpOworICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChmcmFtZVNvdXJjZSwgLTEpOwogCiAgICAgV1RG
OjpTdHJpbmcgc291cmNlOwotICAgICpmcmFtZV9zb3VyY2UgPSAwOyAvLyBTYXZlcyAwIHRvIHBv
aW50ZXIgdW50aWwgaXQncyBub3QgYWxsb2NhdGVkLgorICAgICpmcmFtZVNvdXJjZSA9IDA7IC8v
IFNhdmVzIDAgdG8gcG9pbnRlciB1bnRpbCBpdCdzIG5vdCBhbGxvY2F0ZWQuCiAKICAgICBpZiAo
IXNkLT5mcmFtZS0+ZG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSkgewogICAgICAgICAvLyBG
SVhNRTogU3VwcG9ydCBvdGhlcnMgZG9jdW1lbnRzLgpAQCAtMTUzMSwyMSArMTUzMSwyMSBAQCBz
c2l6ZV90IGV3a19mcmFtZV9zb3VyY2VfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvLCBjaGFyKiog
ZnJhbWVfc291cmNlKQogICAgIH0KIAogICAgIHNpemVfdCBzb3VyY2VfbGVuZ3RoID0gc3RybGVu
KHNvdXJjZS51dGY4KCkuZGF0YSgpKTsKLSAgICAqZnJhbWVfc291cmNlID0gc3RhdGljX2Nhc3Q8
Y2hhcio+KG1hbGxvYyhzb3VyY2VfbGVuZ3RoICsgMSkpOwotICAgIGlmICghKmZyYW1lX3NvdXJj
ZSkgeworICAgICpmcmFtZVNvdXJjZSA9IHN0YXRpY19jYXN0PGNoYXIqPihtYWxsb2Moc291cmNl
X2xlbmd0aCArIDEpKTsKKyAgICBpZiAoISpmcmFtZVNvdXJjZSkgewogICAgICAgICBDUklUSUNB
TCgiQ291bGQgbm90IGFsbG9jYXRlIG1lbW9yeS4iKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAg
IH0KIAotICAgIHN0cm5jcHkoKmZyYW1lX3NvdXJjZSwgc291cmNlLnV0ZjgoKS5kYXRhKCksIHNv
dXJjZV9sZW5ndGgpOwotICAgICgqZnJhbWVfc291cmNlKVtzb3VyY2VfbGVuZ3RoXSA9ICdcMCc7
CisgICAgc3RybmNweSgqZnJhbWVTb3VyY2UsIHNvdXJjZS51dGY4KCkuZGF0YSgpLCBzb3VyY2Vf
bGVuZ3RoKTsKKyAgICAoKmZyYW1lU291cmNlKVtzb3VyY2VfbGVuZ3RoXSA9ICdcMCc7CiAKICAg
ICByZXR1cm4gc291cmNlX2xlbmd0aDsKIH0KIAotRWluYV9MaXN0KiBld2tfZnJhbWVfcmVzb3Vy
Y2VzX2xvY2F0aW9uX2dldChjb25zdCBFdmFzX09iamVjdCogbykKK0VpbmFfTGlzdCogZXdrX2Zy
YW1lX3Jlc291cmNlc19sb2NhdGlvbl9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lKQog
ewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAwKTsKKyAgICBFV0tfRlJB
TUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIDApOwogICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIDApOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOX1ZBTChzZC0+ZnJhbWUtPmRvY3VtZW50KCksIDApOwogCkBAIC0xNjA5LDkgKzE2MDks
OSBAQCBjaGFyKiBld2tfZnJhbWVfcGxhaW5fdGV4dF9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3
a0ZyYW1lKQogICoKICAqIEVtaXRzIHNpZ25hbDogInVyaSxjaGFuZ2VkIiB3aXRoIG5ldyB1cmkg
YXMgcGFyYW1ldGVyLgogICovCi1FaW5hX0Jvb2wgZXdrX2ZyYW1lX3VyaV9jaGFuZ2VkKEV2YXNf
T2JqZWN0KiBvKQorRWluYV9Cb29sIGV3a19mcmFtZV91cmlfY2hhbmdlZChFdmFzX09iamVjdCog
ZXdrRnJhbWUpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFf
RkFMU0UpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgRUlO
QV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwg
RUlOQV9GQUxTRSk7CiAgICAgV1RGOjpDU3RyaW5nIHVyaShzZC0+ZnJhbWUtPmRvY3VtZW50KCkt
PnVybCgpLnN0cmluZygpLnV0ZjgoKSk7CiAKQEAgLTE2MjIsNyArMTYyMiw3IEBAIEVpbmFfQm9v
bCBld2tfZnJhbWVfdXJpX2NoYW5nZWQoRXZhc19PYmplY3QqIG8pCiAgICAgfQogCiAgICAgZWlu
YV9zdHJpbmdzaGFyZV9yZXBsYWNlKCZzZC0+dXJpLCB1cmkuZGF0YSgpKTsKLSAgICBldmFzX29i
amVjdF9zbWFydF9jYWxsYmFja19jYWxsKG8sICJ1cmksY2hhbmdlZCIsICh2b2lkKilzZC0+dXJp
KTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKGV3a0ZyYW1lLCAidXJpLGNo
YW5nZWQiLCAodm9pZCopc2QtPnVyaSk7CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIApAQCAt
MTYzMSwxMCArMTYzMSwxMCBAQCBFaW5hX0Jvb2wgZXdrX2ZyYW1lX3VyaV9jaGFuZ2VkKEV2YXNf
T2JqZWN0KiBvKQogICoKICAqIEZvcmNlcyBsYXlvdXQgZm9yIGZyYW1lLgogICovCi12b2lkIGV3
a19mcmFtZV9mb3JjZV9sYXlvdXQoRXZhc19PYmplY3QqIG8pCit2b2lkIGV3a19mcmFtZV9mb3Jj
ZV9sYXlvdXQoRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewotICAgIERCRygibz0lcCIsIG8pOwot
ICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkKTsKKyAgICBEQkcoImV3a0ZyYW1l
PSVwIiwgZXdrRnJhbWUpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1l
LCBzZCk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmZyYW1lKTsKICAgICBX
ZWJDb3JlOjpGcmFtZVZpZXcqIHZpZXcgPSBzZC0+ZnJhbWUtPnZpZXcoKTsKICAgICBpZiAodmll
dykKQEAgLTE2NDYsNyArMTY0Niw3IEBAIHZvaWQgZXdrX2ZyYW1lX2ZvcmNlX2xheW91dChFdmFz
X09iamVjdCogbykKICAqCiAgKiBDcmVhdGVzIHBsdWdpbi4KICAqLwotV1RGOjpQYXNzUmVmUHRy
PFdlYkNvcmU6OldpZGdldD4gZXdrX2ZyYW1lX3BsdWdpbl9jcmVhdGUoRXZhc19PYmplY3QqIG8s
IGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHBsdWdpblNpemUsIFdlYkNvcmU6OkhUTUxQbHVnSW5F
bGVtZW50KiBlbGVtZW50LCBjb25zdCBXZWJDb3JlOjpLVVJMJiB1cmwsIGNvbnN0IFdURjo6VmVj
dG9yPFdURjo6U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgV1RGOjpWZWN0b3I8V1RGOjpTdHJp
bmc+JiBwYXJhbVZhbHVlcywgY29uc3QgV1RGOjpTdHJpbmcmIG1pbWVUeXBlLCBib29sIGxvYWRN
YW51YWxseSkKK1dURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpXaWRnZXQ+IGV3a19mcmFtZV9wbHVn
aW5fY3JlYXRlKEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYg
cGx1Z2luU2l6ZSwgV2ViQ29yZTo6SFRNTFBsdWdJbkVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFdl
YkNvcmU6OktVUkwmIHVybCwgY29uc3QgV1RGOjpWZWN0b3I8V1RGOjpTdHJpbmc+JiBwYXJhbU5h
bWVzLCBjb25zdCBXVEY6OlZlY3RvcjxXVEY6OlN0cmluZz4mIHBhcmFtVmFsdWVzLCBjb25zdCBX
VEY6OlN0cmluZyYgbWltZVR5cGUsIGJvb2wgbG9hZE1hbnVhbGx5KQogewogICAgIHJldHVybiAw
OwogfQpAQCAtMTY1OSwxMCArMTY1OSwxMCBAQCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6V2lk
Z2V0PiBld2tfZnJhbWVfcGx1Z2luX2NyZWF0ZShFdmFzX09iamVjdCogbywgY29uc3QgVwogICoK
ICAqIEVtaXRzIHNpZ25hbDogImVkaXRvcmNsaWVudHNlbGVjdGlvbixjaGFuZ2VkIiB3aXRoIG5v
IHBhcmFtZXRlcnMuCiAgKi8KLXZvaWQgZXdrX2ZyYW1lX2VkaXRvcl9jbGllbnRfc2VsZWN0aW9u
X2NoYW5nZWQoRXZhc19PYmplY3QqIG8pCit2b2lkIGV3a19mcmFtZV9lZGl0b3JfY2xpZW50X3Nl
bGVjdGlvbl9jaGFuZ2VkKEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsKLSAgICBldmFzX29iamVj
dF9zbWFydF9jYWxsYmFja19jYWxsKG8sICJlZGl0b3JjbGllbnQsc2VsZWN0aW9uLGNoYW5nZWQi
LCAwKTsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihvLCBzZCk7CisgICAgZXZhc19v
YmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChld2tGcmFtZSwgImVkaXRvcmNsaWVudCxzZWxlY3Rp
b24sY2hhbmdlZCIsIDApOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1l
LCBzZCk7CiAgICAgZXdrX3ZpZXdfZWRpdG9yX2NsaWVudF9zZWxlY3Rpb25fY2hhbmdlZChzZC0+
dmlldyk7CiB9CiAKQEAgLTE2NzQsOSArMTY3NCw5IEBAIHZvaWQgZXdrX2ZyYW1lX2VkaXRvcl9j
bGllbnRfc2VsZWN0aW9uX2NoYW5nZWQoRXZhc19PYmplY3QqIG8pCiAgKgogICogRW1pdHMgc2ln
bmFsOiAiZWRpdG9yY2xpZW50LGNvbnRlbnRzLGNoYW5nZWQiIHdpdGggbm8gcGFyYW1ldGVycy4K
ICAqLwotdm9pZCBld2tfZnJhbWVfZWRpdG9yX2NsaWVudF9jb250ZW50c19jaGFuZ2VkKEV2YXNf
T2JqZWN0KiBvKQordm9pZCBld2tfZnJhbWVfZWRpdG9yX2NsaWVudF9jb250ZW50c19jaGFuZ2Vk
KEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFj
a19jYWxsKG8sICJlZGl0b3JjbGllbnQsY29udGVudHMsY2hhbmdlZCIsIDApOwotICAgIEVXS19G
UkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxs
YmFja19jYWxsKGV3a0ZyYW1lLCAiZWRpdG9yY2xpZW50LGNvbnRlbnRzLGNoYW5nZWQiLCAwKTsK
KyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QpOwogICAgIGV3a192
aWV3X2VkaXRvcl9jbGllbnRfY29udGVudHNfY2hhbmdlZChzZC0+dmlldyk7CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2hpc3RvcnkuY3BwIGIvU291cmNlL1dlYktp
dC9lZmwvZXdrL2V3a19oaXN0b3J5LmNwcAppbmRleCA2MmQ3NzQyOTg2YzIzYTIyMjQ4YjM4ZWE3
MWIxNDk0OTQwZTE3OTYyLi4wNmUyMzY5NDk5ZGQ1OWE4YzE5OWYyMmMxZDI4OGNjNWEyZTY5OGY1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2hpc3RvcnkuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfaGlzdG9yeS5jcHAKQEAgLTk1LDE0ICs5NSwxNCBA
QCBzdGF0aWMgaW5saW5lIEV3a19IaXN0b3J5X0l0ZW0qIF9ld2tfaGlzdG9yeV9pdGVtX25ldyhX
ZWJDb3JlOjpIaXN0b3J5SXRlbSogY29yZQogICAgIHJldHVybiBpdGVtOwogfQogCi1zdGF0aWMg
aW5saW5lIEVpbmFfTGlzdCogX2V3a19oaXN0b3J5X2l0ZW1fbGlzdF9nZXQoY29uc3QgV2ViQ29y
ZTo6SGlzdG9yeUl0ZW1WZWN0b3ImIGNvcmVfaXRlbXMpCitzdGF0aWMgaW5saW5lIEVpbmFfTGlz
dCogX2V3a19oaXN0b3J5X2l0ZW1fbGlzdF9nZXQoY29uc3QgV2ViQ29yZTo6SGlzdG9yeUl0ZW1W
ZWN0b3ImIGNvcmVJdGVtcykKIHsKICAgICBFaW5hX0xpc3QqIHJldCA9IDA7CiAgICAgdW5zaWdu
ZWQgaW50IGksIHNpemU7CiAKLSAgICBzaXplID0gY29yZV9pdGVtcy5zaXplKCk7CisgICAgc2l6
ZSA9IGNvcmVJdGVtcy5zaXplKCk7CiAgICAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgewot
ICAgICAgICBFd2tfSGlzdG9yeV9JdGVtKiBpdGVtID0gX2V3a19oaXN0b3J5X2l0ZW1fbmV3KGNv
cmVfaXRlbXNbaV0uZ2V0KCkpOworICAgICAgICBFd2tfSGlzdG9yeV9JdGVtKiBpdGVtID0gX2V3
a19oaXN0b3J5X2l0ZW1fbmV3KGNvcmVJdGVtc1tpXS5nZXQoKSk7CiAgICAgICAgIGlmIChpdGVt
KQogICAgICAgICAgICAgcmV0ID0gZWluYV9saXN0X2FwcGVuZChyZXQsIGl0ZW0pOwogICAgIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfanMuY3BwIGIvU291cmNlL1dl
YktpdC9lZmwvZXdrL2V3a19qcy5jcHAKaW5kZXggZmY4YzM4MzkwZjA5NzFlY2MwNDY2ODc4MmE5
ZTVmZjQ2YWNjOTlmNy4uODg2MmUyMzVjZTdkOTI3NWIzZWI0OWY2MzlmMzYzZDkyZDMxMjNmYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19qcy5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9lZmwvZXdrL2V3a19qcy5jcHAKQEAgLTgzLDExICs4MywxMSBAQCBzdGF0aWMgRWlu
YV9Cb29sIGV3a19qc192YXJpYW50X3RvX25wdmFyaWFudChjb25zdCBFd2tfSlNfVmFyaWFudCog
ZGF0YSwgTlBWYXJpYQogfQogCiAvLyBUaGVzZSBtZXRob2RzIGFyZSB1c2VkIGJ5IE5QQUksIHRo
YXRzIHRoZSByZWFzb24gdG8gdXNlIGJvb2wgaW5zdGVhZCBvZiBFaW5hX0Jvb2wuCi1zdGF0aWMg
Ym9vbCBld2tfanNfcHJvcGVydHlfaGFzKE5QT2JqZWN0KiBucF9vYmosIE5QSWRlbnRpZmllciBu
YW1lKQorc3RhdGljIGJvb2wgZXdrX2pzX3Byb3BlcnR5X2hhcyhOUE9iamVjdCogbnBPYmplY3Qs
IE5QSWRlbnRpZmllciBuYW1lKQogewotICAgIEV3a19KU19PYmplY3QqIG9iaiA9IHJlaW50ZXJw
cmV0X2Nhc3Q8RXdrX0pTX09iamVjdCo+KG5wX29iaik7CisgICAgRXdrX0pTX09iamVjdCogb2Jq
ID0gcmVpbnRlcnByZXRfY2FzdDxFd2tfSlNfT2JqZWN0Kj4obnBPYmplY3QpOwogCi0gICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKG5wX29iaiwgZmFsc2UpOworICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOX1ZBTChucE9iamVjdCwgZmFsc2UpOwogICAgIEVJTkFfTUFHSUNf
Q0hFQ0tfT1JfUkVUVVJOKG9iaiwgZmFsc2UpOwogCiAgICAgaWYgKCFfTlBOX0lkZW50aWZpZXJJ
c1N0cmluZyhuYW1lKSkgewpAQCAtMTAyLDE0ICsxMDIsMTQgQEAgc3RhdGljIGJvb2wgZXdrX2pz
X3Byb3BlcnR5X2hhcyhOUE9iamVjdCogbnBfb2JqLCBOUElkZW50aWZpZXIgbmFtZSkKICAgICBy
ZXR1cm4gZmFpbDsKIH0KIAotc3RhdGljIGJvb2wgZXdrX2pzX3Byb3BlcnR5X2dldChOUE9iamVj
dCogbnBfb2JqLCBOUElkZW50aWZpZXIgbmFtZSwgTlBWYXJpYW50KiByZXN1bHQpCitzdGF0aWMg
Ym9vbCBld2tfanNfcHJvcGVydHlfZ2V0KE5QT2JqZWN0KiBucE9iamVjdCwgTlBJZGVudGlmaWVy
IG5hbWUsIE5QVmFyaWFudCogcmVzdWx0KQogewotICAgIEV3a19KU19PYmplY3QqIG9iaiA9IHJl
aW50ZXJwcmV0X2Nhc3Q8RXdrX0pTX09iamVjdCo+KG5wX29iaik7CisgICAgRXdrX0pTX09iamVj
dCogb2JqID0gcmVpbnRlcnByZXRfY2FzdDxFd2tfSlNfT2JqZWN0Kj4obnBPYmplY3QpOwogICAg
IEV3a19KU19WYXJpYW50KiB2YWx1ZTsKICAgICBFd2tfSlNfUHJvcGVydHkqIHByb3A7CiAgICAg
Ym9vbCBmYWlsID0gZmFsc2U7CiAKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwo
bnBfb2JqLCBmYWxzZSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKG5wT2Jq
ZWN0LCBmYWxzZSk7CiAgICAgRUlOQV9NQUdJQ19DSEVDS19PUl9SRVRVUk4ob2JqLCBmYWxzZSk7
CiAKICAgICBpZiAoIV9OUE5fSWRlbnRpZmllcklzU3RyaW5nKG5hbWUpKSB7CkBAIC0xNDUsMTQg
KzE0NSwxNCBAQCBzdGF0aWMgYm9vbCBld2tfanNfcHJvcGVydHlfZ2V0KE5QT2JqZWN0KiBucF9v
YmosIE5QSWRlbnRpZmllciBuYW1lLCBOUFZhcmlhbnQqCiAgICAgcmV0dXJuIGZhaWw7CiB9CiAK
LXN0YXRpYyBib29sIGV3a19qc19wcm9wZXJ0eV9zZXQoTlBPYmplY3QqIG5wX29iaiwgTlBJZGVu
dGlmaWVyIG5hbWUsIGNvbnN0IE5QVmFyaWFudCogbnBfdmFsdWUpCitzdGF0aWMgYm9vbCBld2tf
anNfcHJvcGVydHlfc2V0KE5QT2JqZWN0KiBucE9iamVjdCwgTlBJZGVudGlmaWVyIG5hbWUsIGNv
bnN0IE5QVmFyaWFudCogbnBWYWx1ZSkKIHsKLSAgICBFd2tfSlNfT2JqZWN0KiBvYmogPSByZWlu
dGVycHJldF9jYXN0PEV3a19KU19PYmplY3QqPihucF9vYmopOworICAgIEV3a19KU19PYmplY3Qq
IG9iaiA9IHJlaW50ZXJwcmV0X2Nhc3Q8RXdrX0pTX09iamVjdCo+KG5wT2JqZWN0KTsKICAgICBF
d2tfSlNfVmFyaWFudCogdmFsdWU7CiAgICAgRXdrX0pTX1Byb3BlcnR5KiBwcm9wOwogICAgIGJv
b2wgZmFpbCA9IGZhbHNlOwogCi0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKG5w
X29iaiwgZmFsc2UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChucE9iaiwg
ZmFsc2UpOwogICAgIEVJTkFfTUFHSUNfQ0hFQ0tfT1JfUkVUVVJOKG9iaiwgZmFsc2UpOwogCiAg
ICAgaWYgKCFfTlBOX0lkZW50aWZpZXJJc1N0cmluZyhuYW1lKSkgewpAQCAtMTY2LDcgKzE2Niw3
IEBAIHN0YXRpYyBib29sIGV3a19qc19wcm9wZXJ0eV9zZXQoTlBPYmplY3QqIG5wX29iaiwgTlBJ
ZGVudGlmaWVyIG5hbWUsIGNvbnN0IE5QVmFyCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CiAKLSAgICBld2tfanNfbnB2YXJpYW50X3RvX3ZhcmlhbnQodmFsdWUsIG5wX3ZhbHVlKTsKKyAg
ICBld2tfanNfbnB2YXJpYW50X3RvX3ZhcmlhbnQodmFsdWUsIG5wVmFsdWUpOwogICAgIGNoYXIq
IHByb3BfbmFtZSA9IF9OUE5fVVRGOEZyb21JZGVudGlmaWVyKG5hbWUpOwogICAgIHByb3AgPSBz
dGF0aWNfY2FzdDxFd2tfSlNfUHJvcGVydHkqPihlaW5hX2hhc2hfZmluZChvYmotPmNscy0+cHJv
cGVydGllcywgcHJvcF9uYW1lKSk7CiAgICAgaWYgKHByb3AgJiYgcHJvcC0+c2V0KQpAQCAtMTgz
LDEzICsxODMsMTMgQEAgc3RhdGljIGJvb2wgZXdrX2pzX3Byb3BlcnR5X3NldChOUE9iamVjdCog
bnBfb2JqLCBOUElkZW50aWZpZXIgbmFtZSwgY29uc3QgTlBWYXIKICAgICByZXR1cm4gZmFpbDsK
IH0KIAotc3RhdGljIGJvb2wgZXdrX2pzX3Byb3BlcnR5X3JlbW92ZShOUE9iamVjdCogbnBfb2Jq
LCBOUElkZW50aWZpZXIgbmFtZSkKK3N0YXRpYyBib29sIGV3a19qc19wcm9wZXJ0eV9yZW1vdmUo
TlBPYmplY3QqIG5wT2JqZWN0LCBOUElkZW50aWZpZXIgbmFtZSkKIHsKLSAgICBFd2tfSlNfT2Jq
ZWN0KiBvYmogPSByZWludGVycHJldF9jYXN0PEV3a19KU19PYmplY3QqPihucF9vYmopOworICAg
IEV3a19KU19PYmplY3QqIG9iaiA9IHJlaW50ZXJwcmV0X2Nhc3Q8RXdrX0pTX09iamVjdCo+KG5w
T2JqZWN0KTsKICAgICBFd2tfSlNfUHJvcGVydHkqIHByb3A7CiAgICAgYm9vbCBmYWlsID0gZmFs
c2U7CiAKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwobnBfb2JqLCBmYWxzZSk7
CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKG5wT2JqZWN0LCBmYWxzZSk7CiAg
ICAgRUlOQV9NQUdJQ19DSEVDS19PUl9SRVRVUk4ob2JqLCBmYWxzZSk7CiAKICAgICBpZiAoIV9O
UE5fSWRlbnRpZmllcklzU3RyaW5nKG5hbWUpKSB7CkBAIC0yMTAsMTQgKzIxMCwxNCBAQCBzdGF0
aWMgYm9vbCBld2tfanNfcHJvcGVydHlfcmVtb3ZlKE5QT2JqZWN0KiBucF9vYmosIE5QSWRlbnRp
ZmllciBuYW1lKQogICAgIHJldHVybiBmYWlsOwogfQogCi1zdGF0aWMgYm9vbCBld2tfanNfcHJv
cGVydGllc19lbnVtZXJhdGUoTlBPYmplY3QqIG5wX29iaiwgTlBJZGVudGlmaWVyKiogdmFsdWUs
IHVpbnQzMl90KiBjb3VudCkKK3N0YXRpYyBib29sIGV3a19qc19wcm9wZXJ0aWVzX2VudW1lcmF0
ZShOUE9iamVjdCogbnBPYmplY3QsIE5QSWRlbnRpZmllcioqIHZhbHVlLCB1aW50MzJfdCogY291
bnQpCiB7Ci0gICAgRXdrX0pTX09iamVjdCogb2JqID0gcmVpbnRlcnByZXRfY2FzdDxFd2tfSlNf
T2JqZWN0Kj4obnBfb2JqKTsKKyAgICBFd2tfSlNfT2JqZWN0KiBvYmogPSByZWludGVycHJldF9j
YXN0PEV3a19KU19PYmplY3QqPihucE9iamVjdCk7CiAgICAgRWluYV9JdGVyYXRvciogaXQ7CiAg
ICAgY2hhcioga2V5OwogICAgIGludCBpID0gMDsKIAotICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOX1ZBTChucF9vYmosIGZhbHNlKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
Tl9WQUwobnBPYmplY3QsIGZhbHNlKTsKICAgICBFSU5BX01BR0lDX0NIRUNLX09SX1JFVFVSTihv
YmosIGZhbHNlKTsKIAogICAgICpjb3VudCA9IGVpbmFfaGFzaF9wb3B1bGF0aW9uKG9iai0+cHJv
cGVydGllcyk7CkBAIC0yMzUsMTEgKzIzNSwxMSBAQCBzdGF0aWMgYm9vbCBld2tfanNfcHJvcGVy
dGllc19lbnVtZXJhdGUoTlBPYmplY3QqIG5wX29iaiwgTlBJZGVudGlmaWVyKiogdmFsdWUsCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBib29sIGV3a19qc19tZXRob2RfaGFzKE5QT2Jq
ZWN0KiBucF9vYmosIE5QSWRlbnRpZmllciBuYW1lKQorc3RhdGljIGJvb2wgZXdrX2pzX21ldGhv
ZF9oYXMoTlBPYmplY3QqIG5wT2JqZWN0LCBOUElkZW50aWZpZXIgbmFtZSkKIHsKLSAgICBFd2tf
SlNfT2JqZWN0KiBvYmogPSByZWludGVycHJldF9jYXN0PEV3a19KU19PYmplY3QqPihucF9vYmop
OworICAgIEV3a19KU19PYmplY3QqIG9iaiA9IHJlaW50ZXJwcmV0X2Nhc3Q8RXdrX0pTX09iamVj
dCo+KG5wT2JqZWN0KTsKIAotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChucF9v
YmosIGZhbHNlKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwobnBPYmplY3Qs
IGZhbHNlKTsKICAgICBFSU5BX01BR0lDX0NIRUNLX09SX1JFVFVSTihvYmosIGZhbHNlKTsKIAog
ICAgIGlmICghX05QTl9JZGVudGlmaWVySXNTdHJpbmcobmFtZSkpIHsKQEAgLTI0OSwxNCArMjQ5
LDE0IEBAIHN0YXRpYyBib29sIGV3a19qc19tZXRob2RfaGFzKE5QT2JqZWN0KiBucF9vYmosIE5Q
SWRlbnRpZmllciBuYW1lKQogICAgIHJldHVybiBlaW5hX2hhc2hfZmluZChvYmotPmNscy0+bWV0
aG9kcywgbmFtZSk7IC8vIFJldHVybnMgcG9pbnRlciBpZiBmb3VuZCh0cnVlKSwgMChmYWxzZSkg
b3RoZXJ3aXNlLgogfQogCi1zdGF0aWMgYm9vbCBld2tfanNfbWV0aG9kX2ludm9rZShOUE9iamVj
dCogbnBfb2JqLCBOUElkZW50aWZpZXIgbmFtZSwgY29uc3QgTlBWYXJpYW50KiBucF9hcmdzLCB1
aW50MzJfdCBucF9hcmdfY291bnQsIE5QVmFyaWFudCogcmVzdWx0KQorc3RhdGljIGJvb2wgZXdr
X2pzX21ldGhvZF9pbnZva2UoTlBPYmplY3QqIG5wT2JqZWN0LCBOUElkZW50aWZpZXIgbmFtZSwg
Y29uc3QgTlBWYXJpYW50KiBucEFyZ3MsIHVpbnQzMl90IG5wQXJnQ291bnQsIE5QVmFyaWFudCog
cmVzdWx0KQogewotICAgIEV3a19KU19PYmplY3QqIG9iaiA9IHJlaW50ZXJwcmV0X2Nhc3Q8RXdr
X0pTX09iamVjdCo+KG5wX29iaik7CisgICAgRXdrX0pTX09iamVjdCogb2JqID0gcmVpbnRlcnBy
ZXRfY2FzdDxFd2tfSlNfT2JqZWN0Kj4obnBPYmplY3QpOwogICAgIEV3a19KU19NZXRob2QqIG1l
dGhvZDsKICAgICBFd2tfSlNfVmFyaWFudCogYXJnczsKICAgICBFd2tfSlNfVmFyaWFudCogcmV0
X3ZhbDsKIAotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChucF9vYmosIGZhbHNl
KTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwobnBPYmplY3QsIGZhbHNlKTsK
ICAgICBFSU5BX01BR0lDX0NIRUNLX09SX1JFVFVSTihvYmosIGZhbHNlKTsKIAogICAgIGlmICgh
X05QTl9JZGVudGlmaWVySXNTdHJpbmcobmFtZSkpIHsKQEAgLTI2OCwxNSArMjY4LDE1IEBAIHN0
YXRpYyBib29sIGV3a19qc19tZXRob2RfaW52b2tlKE5QT2JqZWN0KiBucF9vYmosIE5QSWRlbnRp
ZmllciBuYW1lLCBjb25zdCBOUFZhCiAgICAgaWYgKCFtZXRob2QpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIGFyZ3MgPSBzdGF0aWNfY2FzdDxFd2tfSlNfVmFyaWFudCo+KG1hbGxvYyhz
aXplb2YoRXdrX0pTX1ZhcmlhbnQpICAqbnBfYXJnX2NvdW50KSk7CisgICAgYXJncyA9IHN0YXRp
Y19jYXN0PEV3a19KU19WYXJpYW50Kj4obWFsbG9jKHNpemVvZihFd2tfSlNfVmFyaWFudCkgICpu
cEFyZ0NvdW50KSk7CiAgICAgaWYgKCFhcmdzKSB7CiAgICAgICAgIEVSUigiQ291bGQgbm90IGFs
bG9jYXRlIG1lbW9yeSBmb3IgZXdrX2pzX3ZhcmlhbnQiKTsKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KIAotICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBucF9hcmdfY291bnQ7IGkr
KykKLSAgICAgICAgZXdrX2pzX25wdmFyaWFudF90b192YXJpYW50KCZhcmdzW2ldLCAmbnBfYXJn
c1tpXSk7Ci0gICAgcmV0X3ZhbCA9IG1ldGhvZC0+aW52b2tlKG9iaiwgYXJncywgbnBfYXJnX2Nv
dW50KTsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnBBcmdDb3VudDsgaSsrKQorICAg
ICAgICBld2tfanNfbnB2YXJpYW50X3RvX3ZhcmlhbnQoJmFyZ3NbaV0sICZucEFyZ3NbaV0pOwor
ICAgIHJldF92YWwgPSBtZXRob2QtPmludm9rZShvYmosIGFyZ3MsIG5wQXJnQ291bnQpOwogICAg
IGV3a19qc192YXJpYW50X3RvX25wdmFyaWFudChyZXRfdmFsLCByZXN1bHQpOwogCiAgICAgZXdr
X2pzX3ZhcmlhbnRfZnJlZShyZXRfdmFsKTsKQEAgLTI4NCwzMCArMjg0LDMwIEBAIHN0YXRpYyBi
b29sIGV3a19qc19tZXRob2RfaW52b2tlKE5QT2JqZWN0KiBucF9vYmosIE5QSWRlbnRpZmllciBu
YW1lLCBjb25zdCBOUFZhCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBFaW5hX0Jvb2wg
ZXdrX2pzX25wb2JqZWN0X3Byb3BlcnR5X2dldChFd2tfSlNfT2JqZWN0KiBvYmosIGNvbnN0IGNo
YXIqIG5hbWUsIEV3a19KU19WYXJpYW50KiB2YWx1ZSkKK3N0YXRpYyBFaW5hX0Jvb2wgZXdrX2pz
X25wb2JqZWN0X3Byb3BlcnR5X2dldChFd2tfSlNfT2JqZWN0KiBvYmplY3QsIGNvbnN0IGNoYXIq
IG5hbWUsIEV3a19KU19WYXJpYW50KiB2YWx1ZSkKIHsKICAgICBOUElkZW50aWZpZXIgaWQgPSBf
TlBOX0dldFN0cmluZ0lkZW50aWZpZXIobmFtZSk7CiAgICAgTlBWYXJpYW50IHZhcjsKLSAgICBi
b29sIGZhaWwgPSBfTlBOX0dldFByb3BlcnR5KDAsIHJlaW50ZXJwcmV0X2Nhc3Q8TlBPYmplY3Qq
PihvYmopLCBpZCwgJnZhcik7CisgICAgYm9vbCBmYWlsID0gX05QTl9HZXRQcm9wZXJ0eSgwLCBy
ZWludGVycHJldF9jYXN0PE5QT2JqZWN0Kj4ob2JqZWN0KSwgaWQsICZ2YXIpOwogICAgIGlmICgh
ZmFpbCkKICAgICAgICAgZmFpbCA9IGV3a19qc19ucHZhcmlhbnRfdG9fdmFyaWFudCh2YWx1ZSwg
JnZhcik7CiAgICAgcmV0dXJuIGZhaWw7CiB9CiAKLXN0YXRpYyBFaW5hX0Jvb2wgZXdrX2pzX25w
b2JqZWN0X3Byb3BlcnR5X3NldChFd2tfSlNfT2JqZWN0KiBvYmosIGNvbnN0IGNoYXIqIG5hbWUs
IGNvbnN0IEV3a19KU19WYXJpYW50KiB2YWx1ZSkKK3N0YXRpYyBFaW5hX0Jvb2wgZXdrX2pzX25w
b2JqZWN0X3Byb3BlcnR5X3NldChFd2tfSlNfT2JqZWN0KiBvYmplY3QsIGNvbnN0IGNoYXIqIG5h
bWUsIGNvbnN0IEV3a19KU19WYXJpYW50KiB2YWx1ZSkKIHsKICAgICBOUElkZW50aWZpZXIgaWQg
PSBfTlBOX0dldFN0cmluZ0lkZW50aWZpZXIobmFtZSk7CiAgICAgTlBWYXJpYW50IHZhcjsKICAg
ICBib29sIGZhaWwgPSBld2tfanNfdmFyaWFudF90b19ucHZhcmlhbnQodmFsdWUsICZ2YXIpOwog
ICAgIGlmIChmYWlsKQotICAgICAgICBmYWlsID0gX05QTl9TZXRQcm9wZXJ0eSgwLCByZWludGVy
cHJldF9jYXN0PE5QT2JqZWN0Kj4ob2JqKSwgaWQsICZ2YXIpOworICAgICAgICBmYWlsID0gX05Q
Tl9TZXRQcm9wZXJ0eSgwLCByZWludGVycHJldF9jYXN0PE5QT2JqZWN0Kj4ob2JqZWN0KSwgaWQs
ICZ2YXIpOwogICAgIHJldHVybiBmYWlsOwogfQogCi1zdGF0aWMgRWluYV9Cb29sIGV3a19qc19u
cG9iamVjdF9wcm9wZXJ0eV9kZWwoRXdrX0pTX09iamVjdCogb2JqLCBjb25zdCBjaGFyKiBuYW1l
KQorc3RhdGljIEVpbmFfQm9vbCBld2tfanNfbnBvYmplY3RfcHJvcGVydHlfZGVsKEV3a19KU19P
YmplY3QqIG9iamVjdCwgY29uc3QgY2hhciogbmFtZSkKIHsKICAgICBOUElkZW50aWZpZXIgaWQg
PSBfTlBOX0dldFN0cmluZ0lkZW50aWZpZXIobmFtZSk7Ci0gICAgcmV0dXJuIF9OUE5fUmVtb3Zl
UHJvcGVydHkoMCwgcmVpbnRlcnByZXRfY2FzdDxOUE9iamVjdCo+KG9iaiksIGlkKTsKKyAgICBy
ZXR1cm4gX05QTl9SZW1vdmVQcm9wZXJ0eSgwLCByZWludGVycHJldF9jYXN0PE5QT2JqZWN0Kj4o
b2JqZWN0KSwgaWQpOwogfQogCiBzdGF0aWMgdm9pZCBld2tfanNfcHJvcGVydHlfZnJlZShFd2tf
SlNfUHJvcGVydHkqIHByb3ApCkBAIC0zMjcsMTEgKzMyNywxMSBAQCBzdGF0aWMgdm9pZCBld2tf
anNfcHJvcGVydHlfZnJlZShFd2tfSlNfUHJvcGVydHkqIHByb3ApCiAgKgogICogQHJldHVybiBU
aGUgRXdrX0pTX0NsYXNzIGNyZWF0ZWQuCiAgKi8KLUV3a19KU19DbGFzcyogZXdrX2pzX2NsYXNz
X25ldyhjb25zdCBFd2tfSlNfQ2xhc3NfTWV0YSogbWV0YSkKK0V3a19KU19DbGFzcyogZXdrX2pz
X2NsYXNzX25ldyhjb25zdCBFd2tfSlNfQ2xhc3NfTWV0YSogbWV0YUNsYXNzKQogewogICAgIEV3
a19KU19DbGFzcyogY2xzOwogCi0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKG1l
dGEsIDApOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChtZXRhQ2xhc3MsIDAp
OwogCiAgICAgY2xzID0gc3RhdGljX2Nhc3Q8RXdrX0pTX0NsYXNzKj4obWFsbG9jKHNpemVvZihF
d2tfSlNfQ2xhc3MpKSk7CiAgICAgaWYgKCFjbHMpIHsKQEAgLTMzOSw3ICszMzksNyBAQCBFd2tf
SlNfQ2xhc3MqIGV3a19qc19jbGFzc19uZXcoY29uc3QgRXdrX0pTX0NsYXNzX01ldGEqIG1ldGEp
CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIGNscy0+bWV0YSA9IG1ldGE7CisgICAg
Y2xzLT5tZXRhID0gbWV0YUNsYXNzOwogICAgIGNscy0+ZGVmYXVsdF9wcm9wID0gbWV0YS0+ZGVm
YXVsdF9wcm9wOwogCiAgICAgLy8gRG9uJ3QgZnJlZSBtZXRob2RzIHNpbmNlIHRoZXkgcG9pbnQg
dG8gbWV0YSBjbGFzcyBtZXRob2RzKHdpbGwgYmUgZnJlZWQgd2hlbiBtZXRhIGNsYXNzIGlzIGZy
ZWVkKS4KQEAgLTM2NCwxMiArMzY0LDEyIEBAIEV3a19KU19DbGFzcyogZXdrX2pzX2NsYXNzX25l
dyhjb25zdCBFd2tfSlNfQ2xhc3NfTWV0YSogbWV0YSkKICAqCiAgKiBAcGFyYW0gY2xzIEBhIEV3
a19KU19DbGFzcyB0byBiZSByZWxlYXNlZC4KICAqLwotdm9pZCBld2tfanNfY2xhc3NfZnJlZShF
d2tfSlNfQ2xhc3MqIGNscykKK3ZvaWQgZXdrX2pzX2NsYXNzX2ZyZWUoRXdrX0pTX0NsYXNzKiBq
c0NsYXNzKQogewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGNscyk7Ci0gICAgZWlu
YV9oYXNoX2ZyZWUoY2xzLT5tZXRob2RzKTsKLSAgICBlaW5hX2hhc2hfZnJlZShjbHMtPnByb3Bl
cnRpZXMpOwotICAgIGZyZWUoY2xzKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihq
c0NsYXNzKTsKKyAgICBlaW5hX2hhc2hfZnJlZShqc0NsYXNzLT5tZXRob2RzKTsKKyAgICBlaW5h
X2hhc2hfZnJlZShqc0NsYXNzLT5wcm9wZXJ0aWVzKTsKKyAgICBmcmVlKGpzQ2xhc3MpOwogfQog
CiBzdGF0aWMgTlBDbGFzcyBFV0tfTlBDTEFTUyA9IHsKQEAgLTM4OCw3ICszODgsNyBAQCBzdGF0
aWMgTlBDbGFzcyBFV0tfTlBDTEFTUyA9IHsKICAgICAwIC8vIE5QQ29uc3RydWN0RnVuY3Rpb24K
IH07CiAKLXN0YXRpYyBFd2tfSlNfT2JqZWN0KiBld2tfanNfbnBvYmplY3RfdG9fb2JqZWN0KE5Q
T2JqZWN0KiBucF9vYmopCitzdGF0aWMgRXdrX0pTX09iamVjdCogZXdrX2pzX25wb2JqZWN0X3Rv
X29iamVjdChOUE9iamVjdCogbnBPYmplY3QpCiB7CiAgICAgTlBJZGVudGlmaWVyKiB2YWx1ZXM7
CiAgICAgdWludDMyX3QgbnBfcHJvcHNfY291bnQ7CkBAIC0zOTgsOCArMzk4LDggQEAgc3RhdGlj
IEV3a19KU19PYmplY3QqIGV3a19qc19ucG9iamVjdF90b19vYmplY3QoTlBPYmplY3QqIG5wX29i
aikKICAgICBFd2tfSlNfUHJvcGVydHkqIHByb3A7CiAgICAgSmF2YVNjcmlwdE9iamVjdCoganNv
OwogCi0gICAgaWYgKEVJTkFfTUFHSUNfQ0hFQ0socmVpbnRlcnByZXRfY2FzdDxFd2tfSlNfT2Jq
ZWN0Kj4obnBfb2JqKSwgRVdLX0pTX09CSkVDVF9NQUdJQykpCi0gICAgICAgIHJldHVybiByZWlu
dGVycHJldF9jYXN0PEV3a19KU19PYmplY3QqPihucF9vYmopOworICAgIGlmIChFSU5BX01BR0lD
X0NIRUNLKHJlaW50ZXJwcmV0X2Nhc3Q8RXdrX0pTX09iamVjdCo+KG5wT2JqZWN0KSwgRVdLX0pT
X09CSkVDVF9NQUdJQykpCisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEV3a19KU19P
YmplY3QqPihucE9iamVjdCk7CiAKICAgICBpZiAoIV9OUE5fRW51bWVyYXRlKDAsIG5wX29iaiwg
JnZhbHVlcywgJm5wX3Byb3BzX2NvdW50KSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC00NDgsNyAr
NDQ4LDcgQEAgc3RhdGljIEV3a19KU19PYmplY3QqIGV3a19qc19ucG9iamVjdF90b19vYmplY3Qo
TlBPYmplY3QqIG5wX29iaikKICAgICBvYmotPmNscyA9IGNsczsKICAgICBvYmotPnZpZXcgPSAw
OwogCi0gICAganNvID0gcmVpbnRlcnByZXRfY2FzdDxKYXZhU2NyaXB0T2JqZWN0Kj4obnBfb2Jq
KTsKKyAgICBqc28gPSByZWludGVycHJldF9jYXN0PEphdmFTY3JpcHRPYmplY3QqPihucE9iamVj
dCk7CiAgICAgaWYgKCFzdHJjbXAoIkFycmF5IiwganNvLT5pbXAtPmNsYXNzTmFtZSgpLmFzY2lp
KCkuZGF0YSgpKSkKICAgICAgICAgb2JqLT50eXBlID0gRVdLX0pTX09CSkVDVF9BUlJBWTsKICAg
ICBlbHNlIGlmICghc3RyY21wKCJGdW5jdGlvbiIsIGpzby0+aW1wLT5jbGFzc05hbWUoKS5hc2Np
aSgpLmRhdGEoKSkpCkBAIC00NjksNyArNDY5LDcgQEAgc3RhdGljIEV3a19KU19PYmplY3QqIGV3
a19qc19ucG9iamVjdF90b19vYmplY3QoTlBPYmplY3QqIG5wX29iaikKICAgICB9CiAKICAgICBl
aW5hX2l0ZXJhdG9yX2ZyZWUoaXQpOwotICAgIG9iai0+YmFzZSA9ICpyZWludGVycHJldF9jYXN0
PEphdmFTY3JpcHRPYmplY3QqPihucF9vYmopOworICAgIG9iai0+YmFzZSA9ICpyZWludGVycHJl
dF9jYXN0PEphdmFTY3JpcHRPYmplY3QqPihucE9iamVjdCk7CiAKICAgICByZXR1cm4gb2JqOwog
CkBAIC01MjUsNyArNTI1LDcgQEAgc3RhdGljIEVpbmFfQm9vbCBld2tfanNfbnB2YXJpYW50X3Rv
X3ZhcmlhbnQoRXdrX0pTX1ZhcmlhbnQqIGRhdGEsIGNvbnN0IE5QVmFyaWEKICAgICByZXR1cm4g
RUlOQV9UUlVFOwogfQogCi1Fd2tfSlNfT2JqZWN0KiBld2tfanNfb2JqZWN0X25ldyhjb25zdCBF
d2tfSlNfQ2xhc3NfTWV0YSogbWV0YV9jbHMpCitFd2tfSlNfT2JqZWN0KiBld2tfanNfb2JqZWN0
X25ldyhjb25zdCBFd2tfSlNfQ2xhc3NfTWV0YSogbWV0YUNsYXNzKQogewogICAgIEV3a19KU19P
YmplY3QqIG9iajsKIApAQCAtNTM4LDcgKzUzOCw3IEBAIEV3a19KU19PYmplY3QqIGV3a19qc19v
YmplY3RfbmV3KGNvbnN0IEV3a19KU19DbGFzc19NZXRhKiBtZXRhX2NscykKICAgICB9CiAKICAg
ICBFSU5BX01BR0lDX1NFVChvYmosIEVXS19KU19PQkpFQ1RfTUFHSUMpOwotICAgIG9iai0+Y2xz
ID0gZXdrX2pzX2NsYXNzX25ldyhtZXRhX2Nscyk7CisgICAgb2JqLT5jbHMgPSBld2tfanNfY2xh
c3NfbmV3KG1ldGFDbGFzcyk7CiAgICAgb2JqLT52aWV3ID0gMDsKICAgICBvYmotPm5hbWUgPSAw
OwogICAgIG9iai0+dHlwZSA9IEVXS19KU19PQkpFQ1RfT0JKRUNUOwpAQCAtNTk0LDcgKzU5NCw3
IEBAIGVycm9yOgogICAgIHJldHVybiAwOwogfQogCi12b2lkIGV3a19qc19vYmplY3RfZnJlZShF
d2tfSlNfT2JqZWN0KiBvYmopCit2b2lkIGV3a19qc19vYmplY3RfZnJlZShFd2tfSlNfT2JqZWN0
KiBvYmplY3QpCiB7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4ob2JqKTsKICAgICBF
SU5BX01BR0lDX0NIRUNLX09SX1JFVFVSTihvYmopOwpAQCAtNjExLDIxICs2MTEsMjEgQEAgdm9p
ZCBld2tfanNfb2JqZWN0X2ZyZWUoRXdrX0pTX09iamVjdCogb2JqKQogICAgICAgICBmcmVlKG9i
aik7CiB9CiAKLUVpbmFfSGFzaCogZXdrX2pzX29iamVjdF9wcm9wZXJ0aWVzX2dldChjb25zdCBF
d2tfSlNfT2JqZWN0KiBvYmopCitFaW5hX0hhc2gqIGV3a19qc19vYmplY3RfcHJvcGVydGllc19n
ZXQoY29uc3QgRXdrX0pTX09iamVjdCogb2JqZWN0KQogewotICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOX1ZBTChvYmosIDApOwotICAgIEVJTkFfTUFHSUNfQ0hFQ0tfT1JfUkVUVVJOKG9i
aiwgMCk7Ci0gICAgcmV0dXJuIG9iai0+cHJvcGVydGllczsKKyAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTl9WQUwob2JqZWN0LCAwKTsKKyAgICBFSU5BX01BR0lDX0NIRUNLX09SX1JFVFVS
TihvYmplY3QsIDApOworICAgIHJldHVybiBvYmplY3QtPnByb3BlcnRpZXM7CiB9CiAKLWNvbnN0
IGNoYXIqIGV3a19qc19vYmplY3RfbmFtZV9nZXQoY29uc3QgRXdrX0pTX09iamVjdCogb2JqKQor
Y29uc3QgY2hhciogZXdrX2pzX29iamVjdF9uYW1lX2dldChjb25zdCBFd2tfSlNfT2JqZWN0KiBv
YmplY3QpCiB7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKG9iaiwgMCk7Ci0g
ICAgRUlOQV9NQUdJQ19DSEVDS19PUl9SRVRVUk4ob2JqLCAwKTsKLSAgICByZXR1cm4gb2JqLT5u
YW1lOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChvYmplY3QsIDApOworICAg
IEVJTkFfTUFHSUNfQ0hFQ0tfT1JfUkVUVVJOKG9iamVjdCwgMCk7CisgICAgcmV0dXJuIG9iamVj
dC0+bmFtZTsKIH0KIAotRWluYV9Cb29sIGV3a19qc19vYmplY3RfaW52b2tlKEV3a19KU19PYmpl
Y3QqIG9iaiwgRXdrX0pTX1ZhcmlhbnQqIGFyZ3MsIGludCBhcmdfY291bnQsIEV3a19KU19WYXJp
YW50KiByZXN1bHQpCitFaW5hX0Jvb2wgZXdrX2pzX29iamVjdF9pbnZva2UoRXdrX0pTX09iamVj
dCogb2JqZWN0LCBFd2tfSlNfVmFyaWFudCogYXJncywgaW50IGFyZ0NvdW50LCBFd2tfSlNfVmFy
aWFudCogcmVzdWx0KQogewogICAgIE5QVmFyaWFudCogbnBfYXJnczsKICAgICBOUFZhcmlhbnQg
bnBfcmVzdWx0OwpAQCAtNjM0LDcgKzYzNCw3IEBAIEVpbmFfQm9vbCBld2tfanNfb2JqZWN0X2lu
dm9rZShFd2tfSlNfT2JqZWN0KiBvYmosIEV3a19KU19WYXJpYW50KiBhcmdzLCBpbnQgYXJnCiAg
ICAgRUlOQV9NQUdJQ19DSEVDS19PUl9SRVRVUk4ob2JqLCBFSU5BX0ZBTFNFKTsKICAgICBpZiAo
ZXdrX2pzX29iamVjdF90eXBlX2dldChvYmopICE9IEVXS19KU19PQkpFQ1RfRlVOQ1RJT04pCiAg
ICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwotICAgIGlmIChhcmdfY291bnQpCisgICAgaWYgKGFy
Z0NvdW50KQogICAgICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoYXJncywgRUlO
QV9GQUxTRSk7CiAKICAgICBucF9hcmdzID0gc3RhdGljX2Nhc3Q8TlBWYXJpYW50Kj4obWFsbG9j
KHNpemVvZihOUFZhcmlhbnQpICAqYXJnX2NvdW50KSk7CkBAIC02NDMsMTEgKzY0MywxMSBAQCBF
aW5hX0Jvb2wgZXdrX2pzX29iamVjdF9pbnZva2UoRXdrX0pTX09iamVjdCogb2JqLCBFd2tfSlNf
VmFyaWFudCogYXJncywgaW50IGFyZwogICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKICAgICB9
CiAKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGFyZ19jb3VudDsgaSsrKQorICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgYXJnQ291bnQ7IGkrKykKICAgICAgICAgaWYgKCFld2tfanNfdmFyaWFudF90
b19ucHZhcmlhbnQoJmFyZ3NbaV0sICZucF9hcmdzW2ldKSkKICAgICAgICAgICAgIGdvdG8gZW5k
OwogCi0gICAgaWYgKCEoZmFpbCA9IF9OUE5fSW52b2tlRGVmYXVsdCgwLCByZWludGVycHJldF9j
YXN0PE5QT2JqZWN0Kj4ob2JqKSwgbnBfYXJncywgYXJnX2NvdW50LCAmbnBfcmVzdWx0KSkpCisg
ICAgaWYgKCEoZmFpbCA9IF9OUE5fSW52b2tlRGVmYXVsdCgwLCByZWludGVycHJldF9jYXN0PE5Q
T2JqZWN0Kj4ob2JqKSwgbnBfYXJncywgYXJnQ291bnQsICZucF9yZXN1bHQpKSkKICAgICAgICAg
Z290byBlbmQ7CiAgICAgaWYgKHJlc3VsdCkKICAgICAgICAgZmFpbCA9IGV3a19qc19ucHZhcmlh
bnRfdG9fdmFyaWFudChyZXN1bHQsICZucF9yZXN1bHQpOwpAQCAtNjU3LDg0ICs2NTcsODQgQEAg
ZW5kOgogICAgIHJldHVybiBmYWlsOwogfQogCi1Fd2tfSlNfT2JqZWN0X1R5cGUgZXdrX2pzX29i
amVjdF90eXBlX2dldChFd2tfSlNfT2JqZWN0KiBvYmopCitFd2tfSlNfT2JqZWN0X1R5cGUgZXdr
X2pzX29iamVjdF90eXBlX2dldChFd2tfSlNfT2JqZWN0KiBvYmplY3QpCiB7Ci0gICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKG9iaiwgRVdLX0pTX09CSkVDVF9PQkpFQ1QpOwotICAg
IEVJTkFfTUFHSUNfQ0hFQ0tfT1JfUkVUVVJOKG9iaiwgRVdLX0pTX09CSkVDVF9PQkpFQ1QpOwor
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChvYmplY3QsIEVXS19KU19PQkpFQ1Rf
T0JKRUNUKTsKKyAgICBFSU5BX01BR0lDX0NIRUNLX09SX1JFVFVSTihvYmplY3QsIEVXS19KU19P
QkpFQ1RfT0JKRUNUKTsKIAogICAgIHJldHVybiBvYmotPnR5cGU7CiB9CiAKLXZvaWQgZXdrX2pz
X29iamVjdF90eXBlX3NldChFd2tfSlNfT2JqZWN0KiBvYmosIEV3a19KU19PYmplY3RfVHlwZSB0
eXBlKQordm9pZCBld2tfanNfb2JqZWN0X3R5cGVfc2V0KEV3a19KU19PYmplY3QqIG9iamVjdCwg
RXdrX0pTX09iamVjdF9UeXBlIHR5cGUpCiB7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk4ob2JqKTsKLSAgICBFSU5BX01BR0lDX0NIRUNLX09SX1JFVFVSTihvYmopOworICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOKG9iamVjdCk7CisgICAgRUlOQV9NQUdJQ19DSEVDS19PUl9S
RVRVUk4ob2JqZWN0KTsKIAotICAgIG9iai0+dHlwZSA9IHR5cGU7CisgICAgb2JqZWN0LT50eXBl
ID0gdHlwZTsKIH0KIAotdm9pZCBld2tfanNfdmFyaWFudF9mcmVlKEV3a19KU19WYXJpYW50KiB2
YXIpCit2b2lkIGV3a19qc192YXJpYW50X2ZyZWUoRXdrX0pTX1ZhcmlhbnQqIHZhcmlhbnQpCiB7
Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4odmFyKTsKLSAgICBpZiAodmFyLT50eXBl
ID09IEVXS19KU19WQVJJQU5UX1NUUklORykKLSAgICAgICAgZnJlZSh2YXItPnZhbHVlLnMpOwot
ICAgIGVsc2UgaWYgKHZhci0+dHlwZSA9PSBFV0tfSlNfVkFSSUFOVF9PQkpFQ1QpCi0gICAgICAg
IGV3a19qc19vYmplY3RfZnJlZSh2YXItPnZhbHVlLm8pOwotICAgIGZyZWUodmFyKTsKKyAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih2YXJpYW50KTsKKyAgICBpZiAodmFyaWFudC0+dHlw
ZSA9PSBFV0tfSlNfVkFSSUFOVF9TVFJJTkcpCisgICAgICAgIGZyZWUodmFyaWFudC0+dmFsdWUu
cyk7CisgICAgZWxzZSBpZiAodmFyaWFudC0+dHlwZSA9PSBFV0tfSlNfVkFSSUFOVF9PQkpFQ1Qp
CisgICAgICAgIGV3a19qc19vYmplY3RfZnJlZSh2YXJpYW50LT52YWx1ZS5vKTsKKyAgICBmcmVl
KHZhcmlhbnQpOwogfQogCi12b2lkIGV3a19qc192YXJpYW50X2FycmF5X2ZyZWUoRXdrX0pTX1Zh
cmlhbnQqIHZhciwgaW50IGNvdW50KQordm9pZCBld2tfanNfdmFyaWFudF9hcnJheV9mcmVlKEV3
a19KU19WYXJpYW50KiB2YXJpYW50LCBpbnQgY291bnQpCiB7Ci0gICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk4odmFyKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih2YXJpYW50
KTsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLSAgICAgICAgaWYgKHZh
cltpXS50eXBlID09IEVXS19KU19WQVJJQU5UX1NUUklORykKLSAgICAgICAgICAgIGZyZWUodmFy
W2ldLnZhbHVlLnMpOwotICAgICAgICBlbHNlIGlmICh2YXJbaV0udHlwZSA9PSBFV0tfSlNfVkFS
SUFOVF9PQkpFQ1QpCi0gICAgICAgICAgICBld2tfanNfb2JqZWN0X2ZyZWUodmFyW2ldLnZhbHVl
Lm8pOworICAgICAgICBpZiAodmFyaWFudFtpXS50eXBlID09IEVXS19KU19WQVJJQU5UX1NUUklO
RykKKyAgICAgICAgICAgIGZyZWUodmFyaWFudFtpXS52YWx1ZS5zKTsKKyAgICAgICAgZWxzZSBp
ZiAodmFyaWFudFtpXS50eXBlID09IEVXS19KU19WQVJJQU5UX09CSkVDVCkKKyAgICAgICAgICAg
IGV3a19qc19vYmplY3RfZnJlZSh2YXJpYW50W2ldLnZhbHVlLm8pOwogICAgIH0KLSAgICBmcmVl
KHZhcik7CisgICAgZnJlZSh2YXJpYW50KTsKIH0KIAogI2Vsc2UKIAotRWluYV9IYXNoKiBld2tf
anNfb2JqZWN0X3Byb3BlcnRpZXNfZ2V0KGNvbnN0IEV3a19KU19PYmplY3QqIG9iaikKK0VpbmFf
SGFzaCogZXdrX2pzX29iamVjdF9wcm9wZXJ0aWVzX2dldChjb25zdCBFd2tfSlNfT2JqZWN0KiBv
YmplY3QpCiB7CiAgICAgcmV0dXJuIDA7CiB9CiAKLWNvbnN0IGNoYXIqIGV3a19qc19vYmplY3Rf
bmFtZV9nZXQoY29uc3QgRXdrX0pTX09iamVjdCogb2JqKQorY29uc3QgY2hhciogZXdrX2pzX29i
amVjdF9uYW1lX2dldChjb25zdCBFd2tfSlNfT2JqZWN0KiBvYmplY3QpCiB7CiAgICAgcmV0dXJu
IDA7CiB9CiAKLXZvaWQgZXdrX2pzX3ZhcmlhbnRfZnJlZShFd2tfSlNfVmFyaWFudCogdmFyKQor
dm9pZCBld2tfanNfdmFyaWFudF9mcmVlKEV3a19KU19WYXJpYW50KiB2YXJpYW50KQogewogfQog
Ci12b2lkIGV3a19qc192YXJpYW50X2FycmF5X2ZyZWUoRXdrX0pTX1ZhcmlhbnQqIHZhciwgaW50
IGNvdW50KQordm9pZCBld2tfanNfdmFyaWFudF9hcnJheV9mcmVlKEV3a19KU19WYXJpYW50KiB2
YXJpYW50LCBpbnQgY291bnQpCiB7CiB9CiAKLUV3a19KU19PYmplY3QqIGV3a19qc19vYmplY3Rf
bmV3KGNvbnN0IEV3a19KU19DbGFzc19NZXRhKiBtZXRhX2NscykKK0V3a19KU19PYmplY3QqIGV3
a19qc19vYmplY3RfbmV3KGNvbnN0IEV3a19KU19DbGFzc19NZXRhKiBtZXRhQ2xhc3MpCiB7CiAg
ICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgZXdrX2pzX29iamVjdF9mcmVlKEV3a19KU19PYmplY3Qq
IG9iaikKK3ZvaWQgZXdrX2pzX29iamVjdF9mcmVlKEV3a19KU19PYmplY3QqIG9iamVjdCkKIHsK
IH0KIAotRWluYV9Cb29sIGV3a19qc19vYmplY3RfaW52b2tlKEV3a19KU19PYmplY3QqIG9iaiwg
RXdrX0pTX1ZhcmlhbnQqIGFyZ3MsIGludCBhcmdfY291bnQsIEV3a19KU19WYXJpYW50KiByZXN1
bHQpCitFaW5hX0Jvb2wgZXdrX2pzX29iamVjdF9pbnZva2UoRXdrX0pTX09iamVjdCogb2JqZWN0
LCBFd2tfSlNfVmFyaWFudCogYXJncywgaW50IGFyZ0NvdW50LCBFd2tfSlNfVmFyaWFudCogcmVz
dWx0KQogewogICAgIHJldHVybiBFSU5BX0ZBTFNFOwogfQogCi1Fd2tfSlNfT2JqZWN0X1R5cGUg
ZXdrX2pzX29iamVjdF90eXBlX2dldChFd2tfSlNfT2JqZWN0KiBvYmopCitFd2tfSlNfT2JqZWN0
X1R5cGUgZXdrX2pzX29iamVjdF90eXBlX2dldChFd2tfSlNfT2JqZWN0KiBvYmplY3QpCiB7CiAg
ICAgcmV0dXJuIEVXS19KU19PQkpFQ1RfSU5WQUxJRDsKIH0KIAotdm9pZCBld2tfanNfb2JqZWN0
X3R5cGVfc2V0KEV3a19KU19PYmplY3QqIG9iaiwgRXdrX0pTX09iamVjdF9UeXBlIHR5cGUpCit2
b2lkIGV3a19qc19vYmplY3RfdHlwZV9zZXQoRXdrX0pTX09iamVjdCogb2JqZWN0LCBFd2tfSlNf
T2JqZWN0X1R5cGUgdHlwZSkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwv
ZXdrL2V3a19wcm90b2NvbF9oYW5kbGVyX3NvdXAuY3BwIGIvU291cmNlL1dlYktpdC9lZmwvZXdr
L2V3a19wcm90b2NvbF9oYW5kbGVyX3NvdXAuY3BwCmluZGV4IGFkM2Y5MjFmZmRjMGYwMTVlMmNh
Nzk5MzhkOTJmY2ZiYmJlOGQ5OTMuLjlkNTlmZGM5NzY0ZWVmY2I1NmMyZDdmM2U2YjhhYzdiM2Qz
NDBhZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfcHJvdG9jb2xfaGFu
ZGxlcl9zb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3Byb3RvY29sX2hh
bmRsZXJfc291cC5jcHAKQEAgLTUxLDE0ICs1MSwxNCBAQCBzdGF0aWMgdm9pZCBld2tfY3VzdG9t
X3Byb3RvY29sX2hhbmRsZXJfaW5pdChFd2tDdXN0b21Qcm90b2NvbEhhbmRsZXIqIGN1c3RvbVBy
bwogICAgIGN1c3RvbVByb3RvY29sSGFuZGxlci0+cHJpdi0+Ynl0ZXNSZWFkID0gMDsKIH0KIAot
c3RhdGljIHZvaWQgZXdrX2N1c3RvbV9wcm90b2NvbF9oYW5kbGVyX2ZpbmFsaXplKEdPYmplY3Qq
IG9iaikKK3N0YXRpYyB2b2lkIGV3a19jdXN0b21fcHJvdG9jb2xfaGFuZGxlcl9maW5hbGl6ZShH
T2JqZWN0KiBvYmplY3QpCiB7Ci0gICAgRXdrUHJvdG9jb2xIYW5kbGVyUHJpdmF0ZSogcHJpdiAg
PSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUob2JqLCBFV0tfVFlQRV9DVVNUT01fUFJPVE9D
T0xfSEFORExFUiwKKyAgICBFd2tQcm90b2NvbEhhbmRsZXJQcml2YXRlKiBwcml2ICA9IEdfVFlQ
RV9JTlNUQU5DRV9HRVRfUFJJVkFURShvYmplY3QsIEVXS19UWVBFX0NVU1RPTV9QUk9UT0NPTF9I
QU5ETEVSLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEV3a1Byb3RvY29sSGFuZGxlclByaXZhdGUpOwogICAgIGlmIChw
cml2KQogICAgICAgICBmcmVlKHByaXYtPm1pbWUpOwogCi0gICAgR19PQkpFQ1RfQ0xBU1MoZXdr
X2N1c3RvbV9wcm90b2NvbF9oYW5kbGVyX3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iaik7Cisg
ICAgR19PQkpFQ1RfQ0xBU1MoZXdrX2N1c3RvbV9wcm90b2NvbF9oYW5kbGVyX3BhcmVudF9jbGFz
cyktPmZpbmFsaXplKG9iamVjdCk7CiB9CiAKIHN0YXRpYyBnYm9vbGVhbiBld2tfY3VzdG9tX3By
b3RvY29sX2hhbmRsZXJfY2hlY2tfdXJpKFNvdXBSZXF1ZXN0KiByZXF1ZXN0LCBTb3VwVVJJKiB1
cmksIEdFcnJvcioqIGVycm9yKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3
a19zZXR0aW5ncy5jcHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3NldHRpbmdzLmNwcApp
bmRleCA4M2RiNTM4MzAyM2YxNTIyNTE3OWZmMTdmZjYwYjI1MmJiNTc0MjliLi5mMGJhNmViY2Iy
ZjdlNWRjMTExZmVjNDViNWY2Y2NkNTAzOTgzZWE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2VmbC9ld2svZXdrX3NldHRpbmdzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdr
X3NldHRpbmdzLmNwcApAQCAtMzEsNiArMzEsOCBAQAogI2luY2x1ZGUgIkludFNpemUuaCIKICNp
bmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiTWVtb3J5Q2FjaGUuaCIKKy8vIEZJWE1FOiBXaHkg
aXMgdGhlcmUgYSBkaXJlY3RvcnkgaW4gdGhpcyBpbmNsdWRlPworI2luY2x1ZGUgImFwcGNhY2hl
L0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmgiCiAjaW5jbHVkZSAiZXdrX3ByaXZhdGUuaCIKIAog
I2luY2x1ZGUgPEVpbmEuaD4KQEAgLTQ0LDkgKzQ2LDYgQEAKICNpbmNsdWRlIDx3dGYvdGV4dC9D
U3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGUuaD4KIAotLy8g
RklYTUU6IFdoeSBpcyB0aGVyZSBhIGRpcmVjdG9yeSBpbiB0aGlzIGluY2x1ZGU/Ci0jaW5jbHVk
ZSAiYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuaCIKLQogc3RhdGljIGNvbnN0IGNo
YXIqIF9ld2tfY2FjaGVfZGlyZWN0b3J5X3BhdGggPSAwOwogCiBzdGF0aWMgY29uc3QgY2hhciog
X2V3a19pY29uX2RhdGFiYXNlX3BhdGggPSAwOwpAQCAtMjI5LDEyICsyMjgsMTIgQEAgdm9pZCBl
d2tfc2V0dGluZ3NfY2FjaGVfY2FwYWNpdHlfc2V0KHVuc2lnbmVkIGNhcGFjaXR5KQogICAgIGNh
Y2hlLT5zZXRDYXBhY2l0aWVzKDAsIGNhcGFjaXR5LCBjYXBhY2l0eSk7CiB9CiAKLXZvaWQgZXdr
X3NldHRpbmdzX3JlcGFpbnRfdGhyb3R0bGluZ19zZXQoZG91YmxlIGRlZmVycmVkX3JlcGFpbnRf
ZGVsYXksIGRvdWJsZSBpbml0aWFsX2RlZmVycmVkX3JlcGFpbnRfZGVsYXlfZHVyaW5nX2xvYWRp
bmcsIGRvdWJsZSBtYXhfZGVmZXJyZWRfcmVwYWludF9kZWxheV9kdXJpbmdfbG9hZGluZywgZG91
YmxlIGRlZmVycmVkX3JlcGFpbnRfZGVsYXlfaW5jcmVtZW50X2R1cmluZ19sb2FkaW5nKQordm9p
ZCBld2tfc2V0dGluZ3NfcmVwYWludF90aHJvdHRsaW5nX3NldChkb3VibGUgZGVmZXJyZWRSZXBh
aW50RGVsYXksIGRvdWJsZSBpbml0aWFsRGVmZXJyZWRSZXBhaW50RGVsYXlEdXJpbmdMb2FkaW5n
LCBkb3VibGUgbWF4RGVmZXJyZWRSZXBhaW50RGVsYXlEdXJpbmdMb2FkaW5nLCBkb3VibGUgZGVm
ZXJyZWRSZXBhaW50RGVsYXlJbmNyZW1lbnREdXJpbmdMb2FkaW5nKQogewotICAgIFdlYkNvcmU6
OkZyYW1lVmlldzo6c2V0UmVwYWludFRocm90dGxpbmdEZWZlcnJlZFJlcGFpbnREZWxheShkZWZl
cnJlZF9yZXBhaW50X2RlbGF5KTsKLSAgICBXZWJDb3JlOjpGcmFtZVZpZXc6OnNldFJlcGFpbnRU
aHJvdHRsaW5nbkluaXRpYWxEZWZlcnJlZFJlcGFpbnREZWxheUR1cmluZ0xvYWRpbmcoaW5pdGlh
bF9kZWZlcnJlZF9yZXBhaW50X2RlbGF5X2R1cmluZ19sb2FkaW5nKTsKLSAgICBXZWJDb3JlOjpG
cmFtZVZpZXc6OnNldFJlcGFpbnRUaHJvdHRsaW5nTWF4RGVmZXJyZWRSZXBhaW50RGVsYXlEdXJp
bmdMb2FkaW5nKG1heF9kZWZlcnJlZF9yZXBhaW50X2RlbGF5X2R1cmluZ19sb2FkaW5nKTsKLSAg
ICBXZWJDb3JlOjpGcmFtZVZpZXc6OnNldFJlcGFpbnRUaHJvdHRsaW5nRGVmZXJyZWRSZXBhaW50
RGVsYXlJbmNyZW1lbnREdXJpbmdMb2FkaW5nKGRlZmVycmVkX3JlcGFpbnRfZGVsYXlfaW5jcmVt
ZW50X2R1cmluZ19sb2FkaW5nKTsKKyAgICBXZWJDb3JlOjpGcmFtZVZpZXc6OnNldFJlcGFpbnRU
aHJvdHRsaW5nRGVmZXJyZWRSZXBhaW50RGVsYXkoZGVmZXJyZWRSZXBhaW50RGVsYXkpOworICAg
IFdlYkNvcmU6OkZyYW1lVmlldzo6c2V0UmVwYWludFRocm90dGxpbmduSW5pdGlhbERlZmVycmVk
UmVwYWludERlbGF5RHVyaW5nTG9hZGluZyhpbml0aWFsRGVmZXJyZWRSZXBhaW50RGVsYXlEdXJp
bmdMb2FkaW5nKTsKKyAgICBXZWJDb3JlOjpGcmFtZVZpZXc6OnNldFJlcGFpbnRUaHJvdHRsaW5n
TWF4RGVmZXJyZWRSZXBhaW50RGVsYXlEdXJpbmdMb2FkaW5nKG1heERlZmVycmVkUmVwYWludERl
bGF5RHVyaW5nTG9hZGluZyk7CisgICAgV2ViQ29yZTo6RnJhbWVWaWV3OjpzZXRSZXBhaW50VGhy
b3R0bGluZ0RlZmVycmVkUmVwYWludERlbGF5SW5jcmVtZW50RHVyaW5nTG9hZGluZyhkZWZlcnJl
ZFJlcGFpbnREZWxheUluY3JlbWVudER1cmluZ0xvYWRpbmcpOwogfQogCiAvKioKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfYmFja2luZ19zdG9yZS5jcHAgYi9T
b3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmUuY3BwCmluZGV4IGQ3
MTJmN2FhMzNkNTliMTlkOTM0MDIyZDE4MzYwNzljMzYwYjE1MTkuLjc4M2NjZWQ5OTcwYjQ1ZGVh
NmY0ZDIxNjMzN2Y1NmMyNmY2YmJlMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3
ay9ld2tfdGlsZWRfYmFja2luZ19zdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9lZmwvZXdr
L2V3a190aWxlZF9iYWNraW5nX3N0b3JlLmNwcApAQCAtNDYsOSArNDYsOSBAQCB0eXBlZGVmIGVu
dW0gX0V3a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUHJpb3JpdHkgRXdrX1RpbGVk
X0JhY2tpbmdfU3RvcgogCiBzdHJ1Y3QgX0V3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gewog
ICAgIEVJTkFfSU5MSVNUOwotICAgIEV3a19UaWxlICp0aWxlOworICAgIEV3a19UaWxlKiB0aWxl
OwogICAgIHN0cnVjdCB7Ci0gICAgICAgIEV2YXNfQ29vcmQgeCwgeSwgdywgaDsKKyAgICAgICAg
RXZhc19Db29yZCB4LCB5LCB3aWR0aCwgaGVpZ2h0OwogICAgIH0gZ2VvbWV0cnk7CiAgICAgRWlu
YV9Cb29sIHNtb290aF9zY2FsZTsKIH07CkBAIC02MSwxNiArNjEsMTYgQEAgc3RydWN0IF9Fd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QgewogCiBzdHJ1Y3QgX0V3a19U
aWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgewogICAgIEV2YXNfT2JqZWN0X1NtYXJ0X0NsaXBwZWRf
RGF0YSBiYXNlOwotICAgIEV2YXNfT2JqZWN0ICpzZWxmOwotICAgIEV2YXNfT2JqZWN0ICpjb250
ZW50c19jbGlwcGVyOworICAgIEV2YXNfT2JqZWN0KiBzZWxmOworICAgIEV2YXNfT2JqZWN0KiBj
b250ZW50c19jbGlwcGVyOwogICAgIHN0cnVjdCB7Ci0gICAgICAgIEVpbmFfSW5saXN0ICoqaXRl
bXM7Ci0gICAgICAgIEV2YXNfQ29vcmQgeCwgeSwgdywgaDsKKyAgICAgICAgRWluYV9Jbmxpc3Qq
KiBpdGVtczsKKyAgICAgICAgRXZhc19Db29yZCB4LCB5LCB3aWR0aCwgaGVpZ2h0OwogICAgICAg
ICBsb25nIGNvbHMsIHJvd3M7CiAgICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICBFdmFzX0Nv
b3JkIHcsIGg7CisgICAgICAgICAgICBFdmFzX0Nvb3JkIHdpZHRoLCBoZWlnaHQ7CiAgICAgICAg
ICAgICBmbG9hdCB6b29tOwotICAgICAgICAgICAgRWluYV9Cb29sIHpvb21fd2Vha19zbW9vdGhf
c2NhbGU6MTsKKyAgICAgICAgICAgIEVpbmFfQm9vbCB6b29tX3dlYWtfc21vb3RoX3NjYWxlIDog
MTsKICAgICAgICAgfSB0aWxlOwogICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgc3RydWN0
IHsKQEAgLTgwLDcgKzgwLDcgQEAgc3RydWN0IF9Fd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRh
IHsKICAgICB9IHZpZXc7CiAgICAgRXZhc19Db2xvcnNwYWNlIGNzcGFjZTsKICAgICBzdHJ1Y3Qg
ewotICAgICAgICBFd2tfVGlsZV9NYXRyaXggKm1hdHJpeDsKKyAgICAgICAgRXdrX1RpbGVfTWF0
cml4KiBtYXRyaXg7CiAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICB1bnNpZ25lZCBsb25n
IGNvbCwgcm93OwogICAgICAgICB9IGJhc2U7CkBAIC05MCwyOCArOTAsMjggQEAgc3RydWN0IF9F
d2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhIHsKICAgICAgICAgRXZhc19Db29yZCB3aWR0aCwg
aGVpZ2h0OwogICAgIH0gbW9kZWw7CiAgICAgc3RydWN0IHsKLSAgICAgICAgRWluYV9Cb29sICgq
Y2IpKHZvaWQgKmRhdGEsIEV3a19UaWxlICp0LCBjb25zdCBFaW5hX1JlY3RhbmdsZSAqYXJlYSk7
Ci0gICAgICAgIHZvaWQgKmRhdGE7Ci0gICAgICAgIEVpbmFfSW5saXN0ICpwcmVfcmVuZGVyX3Jl
cXVlc3RzOwotICAgICAgICBFY29yZV9JZGxlciAqaWRsZXI7CisgICAgICAgIEVpbmFfQm9vbCAo
KmNiKSh2b2lkKiBkYXRhLCBFd2tfVGlsZSogdGlsZSwgY29uc3QgRWluYV9SZWN0YW5nbGUqIGFy
ZWEpOworICAgICAgICB2b2lkKiBkYXRhOworICAgICAgICBFaW5hX0lubGlzdCogcHJlX3JlbmRl
cl9yZXF1ZXN0czsKKyAgICAgICAgRWNvcmVfSWRsZXIqIGlkbGVyOwogICAgICAgICBFaW5hX0Jv
b2wgZGlzYWJsZWQ7Ci0gICAgICAgIEVpbmFfQm9vbCBzdXNwZW5kOjE7CisgICAgICAgIEVpbmFf
Qm9vbCBzdXNwZW5kIDogMTsKICAgICB9IHJlbmRlcjsKICAgICBzdHJ1Y3QgewotICAgICAgICB2
b2lkICooKnByZV9jYikodm9pZCAqZGF0YSwgRXZhc19PYmplY3QgKm8pOwotICAgICAgICB2b2lk
ICpwcmVfZGF0YTsKLSAgICAgICAgdm9pZCAqKCpwb3N0X2NiKSh2b2lkICpkYXRhLCB2b2lkICpw
cmVfZGF0YSwgRXZhc19PYmplY3QgKm8pOwotICAgICAgICB2b2lkICpwb3N0X2RhdGE7CisgICAg
ICAgIHZvaWQqICgqcHJlX2NiKSh2b2lkKiBkYXRhLCBFdmFzX09iamVjdCogZXdrVGlsZSk7Cisg
ICAgICAgIHZvaWQqIHByZV9kYXRhOworICAgICAgICB2b2lkKiAoKnBvc3RfY2IpKHZvaWQqIGRh
dGEsIHZvaWQqIHByZV9kYXRhLCBFdmFzX09iamVjdCogZXdrVGlsZSk7CisgICAgICAgIHZvaWQq
IHBvc3RfZGF0YTsKICAgICB9IHByb2Nlc3M7CiAgICAgc3RydWN0IHsKLSAgICAgICAgRWluYV9C
b29sIGFueToxOwotICAgICAgICBFaW5hX0Jvb2wgcG9zOjE7Ci0gICAgICAgIEVpbmFfQm9vbCBz
aXplOjE7Ci0gICAgICAgIEVpbmFfQm9vbCBtb2RlbDoxOwotICAgICAgICBFaW5hX0Jvb2wgb2Zm
c2V0OjE7CisgICAgICAgIEVpbmFfQm9vbCBhbnkgOiAxOworICAgICAgICBFaW5hX0Jvb2wgcG9z
IDogMTsKKyAgICAgICAgRWluYV9Cb29sIHNpemUgOiAxOworICAgICAgICBFaW5hX0Jvb2wgbW9k
ZWwgOiAxOworICAgICAgICBFaW5hX0Jvb2wgb2Zmc2V0IDogMTsKICAgICB9IGNoYW5nZWQ7CiAj
aWZkZWYgREVCVUdfTUVNX0xFQUtTCi0gICAgRWNvcmVfRXZlbnRfSGFuZGxlciAqc2lnX3VzcjsK
KyAgICBFY29yZV9FdmVudF9IYW5kbGVyKiBzaWdfdXNyOwogI2VuZGlmCiB9OwogCkBAIC0xMjUs
MTMgKzEyNSwxMyBAQCBpbnQgX2V3a190aWxlZF9sb2dfZG9tID0gLTE7CiAgICAgICAgIHJldHVy
biBfX1ZBX0FSR1NfXzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CiAgICAgfQogCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZmlsbF9yZW5k
ZXJlcnMoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdik7Ci1zdGF0aWMgaW5saW5l
IHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfZGJnKGNvbnN0IEV3a19UaWxlZF9C
YWNraW5nX1N0b3JlX0RhdGEgKnByaXYpOwotc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV9jaGFuZ2VkKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYp
Oworc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2ZpbGxfcmVuZGVyZXJzKEV3
a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYpOworc3RhdGljIGlubGluZSB2b2lkIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X2RiZyhjb25zdCBFd2tfVGlsZWRfQmFja2luZ19T
dG9yZV9EYXRhKiBwcml2KTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfY2hhbmdlZChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2KTsKIAotc3Rh
dGljIGlubGluZSB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV91cGRhdGVzX3Byb2Nlc3Mo
RXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdikKK3N0YXRpYyBpbmxpbmUgdm9pZCBf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRlc19wcm9jZXNzKEV3a19UaWxlZF9CYWNraW5n
X1N0b3JlX0RhdGEqIHByaXYpCiB7Ci0gICAgdm9pZCAqZGF0YSA9IDA7CisgICAgdm9pZCogZGF0
YSA9IDA7CiAKICAgICAvKiBEbyBub3QgcHJvY2VzcyB1cGRhdGVzLiBOb3RlIHRoYXQgd2Ugc3Rp
bGwgd2FudCB0byBnZXQgdXBkYXRlcyByZXF1ZXN0cwogICAgICAqIGluIHRoZSBxdWV1ZSBpbiBv
cmRlciB0byBub3QgbWlzcyBhbnkgdXBkYXRlcyBhZnRlciB0aGUgcmVuZGVyIGlzCkBAIC0xNDks
MTAgKzE0OSwxMCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3VwZGF0ZXNfcHJvY2VzcyhFd2tfVGlsZWRfQmFja2luZ19TdAogICAgICAgICBwcml2LT5wcm9j
ZXNzLnBvc3RfY2IocHJpdi0+cHJvY2Vzcy5wb3N0X2RhdGEsIGRhdGEsIHByaXYtPnNlbGYpOwog
fQogCi1zdGF0aWMgaW50IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9mbHVzaCh2b2lkICpkYXRh
KQorc3RhdGljIGludCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZmx1c2godm9pZCogZGF0YSkK
IHsKICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2ID0gc3RhdGljX2Nhc3Q8
RXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSo+KGRhdGEpOwotICAgIEV3a19UaWxlX1VudXNl
ZF9DYWNoZSAqdHVjID0gZXdrX3RpbGVfbWF0cml4X3VudXNlZF9jYWNoZV9nZXQocHJpdi0+bW9k
ZWwubWF0cml4KTsKKyAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHR1YyA9IGV3a190aWxlX21h
dHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7CiAKICAgICBpZiAodHVj
KSB7CiAgICAgICAgIERCRygiZmx1c2ggdW51c2VkIHRpbGUgY2FjaGUuIik7CkBAIC0xNjMsODAg
KzE2Myw4MCBAQCBzdGF0aWMgaW50IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9mbHVzaCh2b2lk
ICpkYXRhKQogICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgRXdrX1RpbGUgKl9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV90aWxlX25ldyhFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2
LCB1bnNpZ25lZCBsb25nIGNvbCwgdW5zaWduZWQgbG9uZyByb3csIGZsb2F0IHpvb20pCitzdGF0
aWMgRXdrX1RpbGUqIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX25ldyhFd2tfVGlsZWRf
QmFja2luZ19TdG9yZV9EYXRhKiBwcml2LCB1bnNpZ25lZCBsb25nIGNvbHVtbiwgdW5zaWduZWQg
bG9uZyByb3csIGZsb2F0IHpvb20pCiB7Ci0gICAgRXdrX1RpbGUgKnQ7Ci0gICAgRXZhcyAqZXZh
cyA9IGV2YXNfb2JqZWN0X2V2YXNfZ2V0KHByaXYtPnNlbGYpOworICAgIEV3a19UaWxlKiB0aWxl
OworICAgIEV2YXMqIGV2YXMgPSBldmFzX29iamVjdF9ldmFzX2dldChwcml2LT5zZWxmKTsKICAg
ICBpZiAoIWV2YXMpIHsKICAgICAgICAgQ1JJVElDQUwoImV2YXNfb2JqZWN0X2V2YXNfZ2V0IGZh
aWxlZCEiKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgdCA9IGV3a190aWxlX21h
dHJpeF90aWxlX25ldwotICAgICAgICAocHJpdi0+bW9kZWwubWF0cml4LCBldmFzLCBjb2wsIHJv
dywgem9vbSk7CisgICAgdGlsZSA9IGV3a190aWxlX21hdHJpeF90aWxlX25ldworICAgICAgICAg
ICAgICAgKHByaXYtPm1vZGVsLm1hdHJpeCwgZXZhcywgY29sdW1uLCByb3csIHpvb20pOwogCi0g
ICAgaWYgKCF0KSB7CisgICAgaWYgKCF0aWxlKSB7CiAgICAgICAgIENSSVRJQ0FMKCJld2tfdGls
ZV9tYXRyaXhfdGlsZV9uZXcgZmFpbGVkISIpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAK
LSAgICByZXR1cm4gdDsKKyAgICByZXR1cm4gdGlsZTsKIH0KIAotc3RhdGljIHZvaWQgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fbW92ZShFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVt
ICppdCwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHkpCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfaXRlbV9tb3ZlKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0qIGl0
ZW0sIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5KQogewotICAgIGl0LT5nZW9tZXRyeS54ID0g
eDsKLSAgICBpdC0+Z2VvbWV0cnkueSA9IHk7CisgICAgaXRlbS0+Z2VvbWV0cnkueCA9IHg7Cisg
ICAgaXRlbS0+Z2VvbWV0cnkueSA9IHk7CiAKLSAgICBpZiAoaXQtPnRpbGUpCi0gICAgICAgIGV2
YXNfb2JqZWN0X21vdmUoaXQtPnRpbGUtPmltYWdlLCB4LCB5KTsKKyAgICBpZiAoaXRlbS0+dGls
ZSkKKyAgICAgICAgZXZhc19vYmplY3RfbW92ZShpdGVtLT50aWxlLT5pbWFnZSwgeCwgeSk7CiB9
CiAKLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Jlc2l6ZShFd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdCwgRXZhc19Db29yZCB3LCBFdmFzX0Nvb3JkIGgp
CitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9yZXNpemUoRXdrX1Rp
bGVkX0JhY2tpbmdfU3RvcmVfSXRlbSogaXRlbSwgRXZhc19Db29yZCB3aWR0aCwgRXZhc19Db29y
ZCBoZWlnaHQpCiB7Ci0gICAgaXQtPmdlb21ldHJ5LncgPSB3OwotICAgIGl0LT5nZW9tZXRyeS5o
ID0gaDsKKyAgICBpdGVtLT5nZW9tZXRyeS53aWR0aCA9IHdpZHRoOworICAgIGl0ZW0tPmdlb21l
dHJ5LmhlaWdodCA9IGhlaWdodDsKIAotICAgIGlmIChpdC0+dGlsZSkgewotICAgICAgICBldmFz
X29iamVjdF9yZXNpemUoaXQtPnRpbGUtPmltYWdlLCB3LCBoKTsKLSAgICAgICAgZXZhc19vYmpl
Y3RfaW1hZ2VfZmlsbF9zZXQoaXQtPnRpbGUtPmltYWdlLCAwLCAwLCB3LCBoKTsKKyAgICBpZiAo
aXRlbS0+dGlsZSkgeworICAgICAgICBldmFzX29iamVjdF9yZXNpemUoaXRlbS0+dGlsZS0+aW1h
Z2UsIHdpZHRoLCBoZWlnaHQpOworICAgICAgICBldmFzX29iamVjdF9pbWFnZV9maWxsX3NldChp
dGVtLT50aWxlLT5pbWFnZSwgMCwgMCwgd2lkdGgsIGhlaWdodCk7CiAgICAgfQogfQogCi1zdGF0
aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9hc3NvY2lhdGUoRXdrX1RpbGVk
X0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgRXdrX1RpbGUgKnQsIEV3a19UaWxlZF9CYWNraW5n
X1N0b3JlX0l0ZW0gKml0KQorc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3Rp
bGVfYXNzb2NpYXRlKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYsIEV3a19UaWxl
KiB0aWxlLCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKiBpdGVtKQogewotICAgIGlmIChp
dC0+dGlsZSkKLSAgICAgICAgQ1JJVElDQUwoIml0LT50aWxlPSVwLCBidXQgaXQgc2hvdWxkIGJl
IDAhIiwgaXQtPnRpbGUpOwotICAgIGl0LT50aWxlID0gdDsKLSAgICBldmFzX29iamVjdF9tb3Zl
KGl0LT50aWxlLT5pbWFnZSwgaXQtPmdlb21ldHJ5LngsIGl0LT5nZW9tZXRyeS55KTsKLSAgICBl
dmFzX29iamVjdF9yZXNpemUoaXQtPnRpbGUtPmltYWdlLCBpdC0+Z2VvbWV0cnkudywgaXQtPmdl
b21ldHJ5LmgpOworICAgIGlmIChpdGVtLT50aWxlKQorICAgICAgICBDUklUSUNBTCgiaXQtPnRp
bGU9JXAsIGJ1dCBpdCBzaG91bGQgYmUgMCEiLCBpdGVtLT50aWxlKTsKKyAgICBpdGVtLT50aWxl
ID0gdGlsZTsKKyAgICBldmFzX29iamVjdF9tb3ZlKGl0ZW0tPnRpbGUtPmltYWdlLCBpdGVtLT5n
ZW9tZXRyeS54LCBpdGVtLT5nZW9tZXRyeS55KTsKKyAgICBldmFzX29iamVjdF9yZXNpemUoaXRl
bS0+dGlsZS0+aW1hZ2UsIGl0ZW0tPmdlb21ldHJ5LndpZHRoLCBpdGVtLT5nZW9tZXRyeS5oZWln
aHQpOwogICAgIGV2YXNfb2JqZWN0X2ltYWdlX2ZpbGxfc2V0Ci0gICAgICAgIChpdC0+dGlsZS0+
aW1hZ2UsIDAsIDAsIGl0LT5nZW9tZXRyeS53LCBpdC0+Z2VvbWV0cnkuaCk7Ci0gICAgZXZhc19v
YmplY3RfaW1hZ2Vfc21vb3RoX3NjYWxlX3NldChpdC0+dGlsZS0+aW1hZ2UsIGl0LT5zbW9vdGhf
c2NhbGUpOworICAgICAgICAoaXRlbS0+dGlsZS0+aW1hZ2UsIDAsIDAsIGl0ZW0tPmdlb21ldHJ5
LndpZHRoLCBpdGVtLT5nZW9tZXRyeS5oZWlnaHQpOworICAgIGV2YXNfb2JqZWN0X2ltYWdlX3Nt
b290aF9zY2FsZV9zZXQoaXRlbS0+dGlsZS0+aW1hZ2UsIGl0ZW0tPnNtb290aF9zY2FsZSk7CiAK
LSAgICBpZiAoIWV3a190aWxlX3Zpc2libGVfZ2V0KHQpKQotICAgICAgICBldmFzX29iamVjdF9z
bWFydF9tZW1iZXJfYWRkKHQtPmltYWdlLCBwcml2LT5zZWxmKTsKKyAgICBpZiAoIWV3a190aWxl
X3Zpc2libGVfZ2V0KHRpbGUpKQorICAgICAgICBldmFzX29iamVjdF9zbWFydF9tZW1iZXJfYWRk
KHRpbGUtPmltYWdlLCBwcml2LT5zZWxmKTsKIAotICAgIGV3a190aWxlX3Nob3codCk7CisgICAg
ZXdrX3RpbGVfc2hvdyh0aWxlKTsKIH0KIAotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5n
X3N0b3JlX3RpbGVfZGlzc29jaWF0ZShFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2
LCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdCwgZG91YmxlIGxhc3RfdXNlZCkKK3N0
YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2Rpc3NvY2lhdGUoRXdrX1Rp
bGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdiwgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRl
bSogaXRlbSwgZG91YmxlIGxhc3RVc2VkKQogewotICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSAq
dHVjOwotICAgIGV3a190aWxlX2hpZGUoaXQtPnRpbGUpOwotICAgIGlmICghZXdrX3RpbGVfdmlz
aWJsZV9nZXQoaXQtPnRpbGUpKQotICAgICAgICBldmFzX29iamVjdF9zbWFydF9tZW1iZXJfZGVs
KGl0LT50aWxlLT5pbWFnZSk7Ci0gICAgZXdrX3RpbGVfbWF0cml4X3RpbGVfcHV0KHByaXYtPm1v
ZGVsLm1hdHJpeCwgaXQtPnRpbGUsIGxhc3RfdXNlZCk7CisgICAgRXdrX1RpbGVfVW51c2VkX0Nh
Y2hlKiB0dWM7CisgICAgZXdrX3RpbGVfaGlkZShpdGVtLT50aWxlKTsKKyAgICBpZiAoIWV3a190
aWxlX3Zpc2libGVfZ2V0KGl0ZW0tPnRpbGUpKQorICAgICAgICBldmFzX29iamVjdF9zbWFydF9t
ZW1iZXJfZGVsKGl0ZW0tPnRpbGUtPmltYWdlKTsKKyAgICBld2tfdGlsZV9tYXRyaXhfdGlsZV9w
dXQocHJpdi0+bW9kZWwubWF0cml4LCBpdGVtLT50aWxlLCBsYXN0VXNlZCk7CiAgICAgdHVjID0g
ZXdrX3RpbGVfbWF0cml4X3VudXNlZF9jYWNoZV9nZXQocHJpdi0+bW9kZWwubWF0cml4KTsKICAg
ICBld2tfdGlsZV91bnVzZWRfY2FjaGVfYXV0b19mbHVzaCh0dWMpOwogCi0gICAgaXQtPnRpbGUg
PSAwOworICAgIGl0ZW0tPnRpbGUgPSAwOwogfQogCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfdGlsZV9kaXNzb2NpYXRlX2FsbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9E
YXRhICpwcml2KQorc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfZGlz
c29jaWF0ZV9hbGwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdikKIHsKLSAgICBF
aW5hX0lubGlzdCAqaXQ7Ci0gICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXRlbTsK
KyAgICBFaW5hX0lubGlzdCogaXQ7CisgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSog
aXRlbTsKICAgICBpbnQgaTsKICAgICBkb3VibGUgbGFzdF91c2VkID0gZWNvcmVfbG9vcF90aW1l
X2dldCgpOwogCkBAIC0yNDgsOSArMjQ4LDkgQEAgc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNr
aW5nX3N0b3JlX3RpbGVfZGlzc29jaWF0ZV9hbGwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmUKICAg
ICB9CiB9CiAKLXN0YXRpYyBpbmxpbmUgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV9wcmVfcmVuZGVyX3JlcXVlc3RfYWRkKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnBy
aXYsIHVuc2lnbmVkIGxvbmcgY29sLCB1bnNpZ25lZCBsb25nIHJvdywgZmxvYXQgem9vbSwgRXdr
X1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9Qcmlvcml0eSBwcmlvcml0eSkKK3N0YXRp
YyBpbmxpbmUgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3Jl
cXVlc3RfYWRkKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYsIHVuc2lnbmVkIGxv
bmcgY29sdW1uLCB1bnNpZ25lZCBsb25nIHJvdywgZmxvYXQgem9vbSwgRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfUHJlX1JlbmRlcl9Qcmlvcml0eSBwcmlvcml0eSkKIHsKLSAgICBFd2tfVGlsZWRf
QmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QgKnI7CisgICAgRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0KiByOwogCiAgICAgciA9IHN0YXRpY19jYXN0PEV3
a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUmVxdWVzdCo+KG1hbGxvYyhzaXplb2Yo
KnIpKSk7CiAgICAgaWYgKCFyKQpAQCAtMjU4LDQ5ICsyNTgsNDkgQEAgc3RhdGljIGlubGluZSBF
aW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9hZGQo
RXdrX1RpbGUKIAogICAgIGlmIChwcmlvcml0eSA9PSBQUkVfUkVOREVSX1BSSU9SSVRZX0hJR0gp
CiAgICAgICAgIHByaXYtPnJlbmRlci5wcmVfcmVuZGVyX3JlcXVlc3RzID0gZWluYV9pbmxpc3Rf
cHJlcGVuZAotICAgICAgICAgICAgKHByaXYtPnJlbmRlci5wcmVfcmVuZGVyX3JlcXVlc3RzLCBF
SU5BX0lOTElTVF9HRVQocikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAocHJpdi0+cmVuZGVyLnByZV9yZW5kZXJfcmVxdWVzdHMsIEVJTkFfSU5MSVNU
X0dFVChyKSk7CiAgICAgZWxzZQogICAgICAgICBwcml2LT5yZW5kZXIucHJlX3JlbmRlcl9yZXF1
ZXN0cyA9IGVpbmFfaW5saXN0X2FwcGVuZAotICAgICAgICAgICAgKHByaXYtPnJlbmRlci5wcmVf
cmVuZGVyX3JlcXVlc3RzLCBFSU5BX0lOTElTVF9HRVQocikpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocHJpdi0+cmVuZGVyLnByZV9yZW5kZXJfcmVx
dWVzdHMsIEVJTkFfSU5MSVNUX0dFVChyKSk7CiAKLSAgICByLT5jb2wgPSBjb2w7CisgICAgci0+
Y29sID0gY29sdW1uOwogICAgIHItPnJvdyA9IHJvdzsKICAgICByLT56b29tID0gem9vbTsKIAog
ICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2RlbChFd2tfVGlsZWRfQmFja2luZ19T
dG9yZV9EYXRhICpwcml2LCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVl
c3QgKnIpCitzdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9y
ZW5kZXJfcmVxdWVzdF9kZWwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdiwgRXdr
X1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0KiByZXF1ZXN0KQogewogICAg
IHByaXYtPnJlbmRlci5wcmVfcmVuZGVyX3JlcXVlc3RzID0gZWluYV9pbmxpc3RfcmVtb3ZlCi0g
ICAgICAgIChwcml2LT5yZW5kZXIucHJlX3JlbmRlcl9yZXF1ZXN0cywgRUlOQV9JTkxJU1RfR0VU
KHIpKTsKLSAgICBmcmVlKHIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChwcml2LT5yZW5kZXIucHJlX3JlbmRlcl9yZXF1ZXN0cywgRUlOQV9JTkxJU1RfR0VU
KHJlcXVlc3QpKTsKKyAgICBmcmVlKHJlcXVlc3QpOwogfQogCi1zdGF0aWMgaW5saW5lIEV3a19U
aWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUmVxdWVzdCAqX2V3a190aWxlZF9iYWNraW5n
X3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9maXJzdChjb25zdCBFd2tfVGlsZWRfQmFja2luZ19T
dG9yZV9EYXRhICpwcml2KQorc3RhdGljIGlubGluZSBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9Q
cmVfUmVuZGVyX1JlcXVlc3QqIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3Jl
cXVlc3RfZmlyc3QoY29uc3QgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdikKIHsK
ICAgICByZXR1cm4gRUlOQV9JTkxJU1RfQ09OVEFJTkVSX0dFVCgKLSAgICAgICAgcHJpdi0+cmVu
ZGVyLnByZV9yZW5kZXJfcmVxdWVzdHMsCi0gICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3Jl
X1ByZV9SZW5kZXJfUmVxdWVzdCk7CisgICAgICAgICAgICAgICBwcml2LT5yZW5kZXIucHJlX3Jl
bmRlcl9yZXF1ZXN0cywKKyAgICAgICAgICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX1By
ZV9SZW5kZXJfUmVxdWVzdCk7CiB9CiAKLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfZmx1c2goRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0
YSAqcHJpdikKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVy
X3JlcXVlc3RfZmx1c2goRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdikKIHsKLSAg
ICBFaW5hX0lubGlzdCAqKnBsID0gJnByaXYtPnJlbmRlci5wcmVfcmVuZGVyX3JlcXVlc3RzOwor
ICAgIEVpbmFfSW5saXN0KiogcGwgPSAmcHJpdi0+cmVuZGVyLnByZV9yZW5kZXJfcmVxdWVzdHM7
CiAgICAgd2hpbGUgKCpwbCkgewotICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVf
UmVuZGVyX1JlcXVlc3QgKnI7CisgICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9S
ZW5kZXJfUmVxdWVzdCogcjsKICAgICAgICAgciA9IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9w
cmVfcmVuZGVyX3JlcXVlc3RfZmlyc3QocHJpdik7CiAgICAgICAgICpwbCA9IGVpbmFfaW5saXN0
X3JlbW92ZSgqcGwsICpwbCk7CiAgICAgICAgIGZyZWUocik7CiAgICAgfQogfQogCi1zdGF0aWMg
dm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2NsZWFyKEV3
a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYpCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2NsZWFyKEV3a19UaWxlZF9CYWNraW5n
X1N0b3JlX0RhdGEqIHByaXYpCiB7Ci0gICAgRWluYV9Jbmxpc3QgKipwbCA9ICZwcml2LT5yZW5k
ZXIucHJlX3JlbmRlcl9yZXF1ZXN0czsKLSAgICBFaW5hX0lubGlzdCAqaXRlciA9ICpwbCwgKnRt
cDsKKyAgICBFaW5hX0lubGlzdCoqIHBsID0gJnByaXYtPnJlbmRlci5wcmVfcmVuZGVyX3JlcXVl
c3RzOworICAgIEVpbmFfSW5saXN0KiBpdGVyID0gKnBsLCAqIHRtcDsKICAgICB3aGlsZSAoaXRl
cikgewotICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3Qg
KnIgPQorICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3Qq
IHIgPQogICAgICAgICAgICAgRUlOQV9JTkxJU1RfQ09OVEFJTkVSX0dFVCgKICAgICAgICAgICAg
ICAgICBpdGVyLCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QpOwog
ICAgICAgICB0bXAgPSBpdGVyLT5uZXh0OwpAQCAtMzExLDEzICszMTEsMTMgQEAgc3RhdGljIHZv
aWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9jbGVhcihFd2tf
VGlsZWRfQmFja2luZ18KIH0KIAogLyogYXNzdW1lcyBwcml2LT5wcm9jZXNzLnByZV9jYiB3YXMg
Y2FsbGVkIGlmIHJlcXVpcmVkISAqLwotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9wcm9jZXNzX3NpbmdsZShFd2tfVGlsZWRfQmFja2luZ19T
dG9yZV9EYXRhICpwcml2KQorc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3By
ZV9yZW5kZXJfcmVxdWVzdF9wcm9jZXNzX3NpbmdsZShFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9E
YXRhKiBwcml2KQogewotICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUmVx
dWVzdCAqcmVxOworICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUmVxdWVz
dCogcmVxOwogICAgIEVpbmFfUmVjdGFuZ2xlIGFyZWE7Ci0gICAgRXdrX1RpbGVfTWF0cml4ICp0
bSA9IHByaXYtPm1vZGVsLm1hdHJpeDsKLSAgICBFd2tfVGlsZSAqdDsKLSAgICBFd2tfVGlsZV9V
bnVzZWRfQ2FjaGUgKnR1YzsKKyAgICBFd2tfVGlsZV9NYXRyaXgqIHRtID0gcHJpdi0+bW9kZWwu
bWF0cml4OworICAgIEV3a19UaWxlKiB0aWxlOworICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSog
dHVjOwogICAgIHVuc2lnbmVkIGxvbmcgY29sLCByb3c7CiAgICAgZmxvYXQgem9vbTsKICAgICBk
b3VibGUgbGFzdF91c2VkID0gZWNvcmVfbG9vcF90aW1lX2dldCgpOwpAQCAtMzM1LDIyICszMzUs
MjIgQEAgc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVx
dWVzdF9wcm9jZXNzX3NpbmdsZShFd2tfVGlsZWQKICAgICAgICAgZ290byBlbmQ7CiAgICAgfQog
Ci0gICAgdCA9IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX25ldyhwcml2LCBjb2wsIHJv
dywgem9vbSk7Ci0gICAgaWYgKCF0KQorICAgIHRpbGUgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfdGlsZV9uZXcocHJpdiwgY29sLCByb3csIHpvb20pOworICAgIGlmICghdGlsZSkKICAgICAg
ICAgZ290byBlbmQ7CiAKICAgICBhcmVhLnggPSAwOwogICAgIGFyZWEueSA9IDA7Ci0gICAgYXJl
YS53ID0gcHJpdi0+dmlldy50aWxlLnc7Ci0gICAgYXJlYS5oID0gcHJpdi0+dmlldy50aWxlLmg7
CisgICAgYXJlYS53ID0gcHJpdi0+dmlldy50aWxlLndpZHRoOworICAgIGFyZWEuaCA9IHByaXYt
PnZpZXcudGlsZS5oZWlnaHQ7CiAKLSAgICBwcml2LT5yZW5kZXIuY2IocHJpdi0+cmVuZGVyLmRh
dGEsIHQsICZhcmVhKTsKKyAgICBwcml2LT5yZW5kZXIuY2IocHJpdi0+cmVuZGVyLmRhdGEsIHRp
bGUsICZhcmVhKTsKICAgICBldmFzX29iamVjdF9pbWFnZV9kYXRhX3VwZGF0ZV9hZGQoCi0gICAg
ICAgIHQtPmltYWdlLAorICAgICAgICB0aWxlLT5pbWFnZSwKICAgICAgICAgYXJlYS54LCBhcmVh
LnksIGFyZWEudywgYXJlYS5oKTsKLSAgICBld2tfdGlsZV9tYXRyaXhfdGlsZV91cGRhdGVzX2Ns
ZWFyKHRtLCB0KTsKKyAgICBld2tfdGlsZV9tYXRyaXhfdGlsZV91cGRhdGVzX2NsZWFyKHRtLCB0
aWxlKTsKIAotICAgIGV3a190aWxlX21hdHJpeF90aWxlX3B1dCh0bSwgdCwgbGFzdF91c2VkKTsK
KyAgICBld2tfdGlsZV9tYXRyaXhfdGlsZV9wdXQodG0sIHRpbGUsIGxhc3RfdXNlZCk7CiAKIGVu
ZDoKICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2RlbChw
cml2LCByZXEpOwpAQCAtMzU4LDcgKzM1OCw3IEBAIGVuZDoKICAgICBld2tfdGlsZV91bnVzZWRf
Y2FjaGVfYXV0b19mbHVzaCh0dWMpOwogfQogCi1zdGF0aWMgRWluYV9Cb29sIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV9pdGVtX3Byb2Nlc3NfaWRsZXJfY2Iodm9pZCAqZGF0YSkKK3N0YXRpYyBF
aW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcHJvY2Vzc19pZGxlcl9jYih2
b2lkKiBkYXRhKQogewogICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYgPSBz
dGF0aWNfY2FzdDxFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKj4oZGF0YSk7CiAKQEAgLTM3
OCw3ICszNzgsNyBAQCBzdGF0aWMgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9p
dGVtX3Byb2Nlc3NfaWRsZXJfY2Iodm9pZCAqZGF0YSkKICAgICByZXR1cm4gRUlOQV9UUlVFOwog
fQogCi1zdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcHJv
Y2Vzc19pZGxlcl9zdG9wKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYpCitzdGF0
aWMgaW5saW5lIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcHJvY2Vzc19pZGxl
cl9zdG9wKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYpCiB7CiAgICAgaWYgKCFw
cml2LT5yZW5kZXIuaWRsZXIpCiAgICAgICAgIHJldHVybjsKQEAgLTM4Nyw3ICszODcsNyBAQCBz
dGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcHJvY2Vzc19p
ZGxlcl9zdG9wKEV3a19UaWxlZF9CYQogICAgIHByaXYtPnJlbmRlci5pZGxlciA9IDA7CiB9CiAK
LXN0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9wcm9jZXNz
X2lkbGVyX3N0YXJ0KEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYpCitzdGF0aWMg
aW5saW5lIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcHJvY2Vzc19pZGxlcl9z
dGFydChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2KQogewogICAgIGlmIChwcml2
LT5yZW5kZXIuaWRsZXIpCiAgICAgICAgIHJldHVybjsKQEAgLTM5NSw3ICszOTUsNyBAQCBzdGF0
aWMgaW5saW5lIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcHJvY2Vzc19pZGxl
cl9zdGFydChFd2tfVGlsZWRfQgogICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRl
bV9wcm9jZXNzX2lkbGVyX2NiLCBwcml2KTsKIH0KIAotc3RhdGljIEVpbmFfQm9vbCBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfZGlzYWJsZV9yZW5kZXIoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVf
RGF0YSAqcHJpdikKK3N0YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2Rp
c2FibGVfcmVuZGVyKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYpCiB7CiAgICAg
aWYgKHByaXYtPnJlbmRlci5zdXNwZW5kKQogICAgICAgICByZXR1cm4gRUlOQV9UUlVFOwpAQCAt
NDA1LDcgKzQwNSw3IEBAIHN0YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X2Rpc2FibGVfcmVuZGVyKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlCiAgICAgcmV0dXJuIEVJTkFf
VFJVRTsKIH0KIAotc3RhdGljIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZW5h
YmxlX3JlbmRlcihFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2KQorc3RhdGljIEVp
bmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZW5hYmxlX3JlbmRlcihFd2tfVGlsZWRf
QmFja2luZ19TdG9yZV9EYXRhKiBwcml2KQogewogICAgIGlmICghcHJpdi0+cmVuZGVyLnN1c3Bl
bmQpCiAgICAgICAgIHJldHVybiBFSU5BX1RSVUU7CkBAIC00MTgsNTIgKzQxOCw1MiBAQCBzdGF0
aWMgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9lbmFibGVfcmVuZGVyKEV3a19U
aWxlZF9CYWNraW5nX1N0b3JlXwogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLXN0YXRpYyBp
bmxpbmUgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2ZpbGwoRXdrX1Rp
bGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRl
bSAqaXQsIHVuc2lnbmVkIGxvbmcgY29sLCB1bnNpZ25lZCBsb25nIHJvdykKK3N0YXRpYyBpbmxp
bmUgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2ZpbGwoRXdrX1RpbGVk
X0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdiwgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSog
aXRlbSwgdW5zaWduZWQgbG9uZyBjb2x1bW4sIHVuc2lnbmVkIGxvbmcgcm93KQogewotICAgIHVu
c2lnbmVkIGxvbmcgbV9jb2wgPSBwcml2LT5tb2RlbC5iYXNlLmNvbCArIGNvbDsKKyAgICB1bnNp
Z25lZCBsb25nIG1fY29sID0gcHJpdi0+bW9kZWwuYmFzZS5jb2wgKyBjb2x1bW47CiAgICAgdW5z
aWduZWQgbG9uZyBtX3JvdyA9IHByaXYtPm1vZGVsLmJhc2Uucm93ICsgcm93OwogICAgIGRvdWJs
ZSBsYXN0X3VzZWQgPSBlY29yZV9sb29wX3RpbWVfZ2V0KCk7CiAKICAgICBpZiAobV9jb2wgPj0g
cHJpdi0+bW9kZWwuY3VyLmNvbHMgfHwgbV9yb3cgPj0gcHJpdi0+bW9kZWwuY3VyLnJvd3MpIHsK
LSAgICAgICAgaWYgKGl0LT50aWxlKQotICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX3RpbGVfZGlzc29jaWF0ZShwcml2LCBpdCwgbGFzdF91c2VkKTsKKyAgICAgICAgaWYgKGl0
ZW0tPnRpbGUpCisgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9kaXNz
b2NpYXRlKHByaXYsIGl0ZW0sIGxhc3RfdXNlZCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgRXdr
X1RpbGUgKnQ7CisgICAgICAgIEV3a19UaWxlKiB0aWxlOwogICAgICAgICBjb25zdCBmbG9hdCB6
b29tID0gcHJpdi0+dmlldy50aWxlLnpvb207CiAKLSAgICAgICAgaWYgKGl0LT50aWxlKSB7Ci0g
ICAgICAgICAgICBFd2tfVGlsZSAqb2xkID0gaXQtPnRpbGU7CisgICAgICAgIGlmIChpdGVtLT50
aWxlKSB7CisgICAgICAgICAgICBFd2tfVGlsZSogb2xkID0gaXRlbS0+dGlsZTsKICAgICAgICAg
ICAgIGlmIChvbGQtPnJvdyAhPSBtX3JvdyB8fCBvbGQtPmNvbCAhPSBtX2NvbCB8fCBvbGQtPnpv
b20gIT0gem9vbSkKLSAgICAgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGls
ZV9kaXNzb2NpYXRlKHByaXYsIGl0LCBsYXN0X3VzZWQpOworICAgICAgICAgICAgICAgIF9ld2tf
dGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2Rpc3NvY2lhdGUocHJpdiwgaXRlbSwgbGFzdF91c2Vk
KTsKICAgICAgICAgICAgIGVsc2UgaWYgKG9sZC0+cm93ID09IG1fcm93ICYmIG9sZC0+Y29sID09
IG1fY29sICYmIG9sZC0+em9vbSA9PSB6b29tKQogICAgICAgICAgICAgICAgIGdvdG8gZW5kOwog
ICAgICAgICB9CiAKLSAgICAgICAgdCA9IGV3a190aWxlX21hdHJpeF90aWxlX2V4YWN0X2dldChw
cml2LT5tb2RlbC5tYXRyaXgsIG1fY29sLCBtX3Jvdywgem9vbSk7CisgICAgICAgIHRpbGUgPSBl
d2tfdGlsZV9tYXRyaXhfdGlsZV9leGFjdF9nZXQocHJpdi0+bW9kZWwubWF0cml4LCBtX2NvbCwg
bV9yb3csIHpvb20pOwogCi0gICAgICAgIGlmICghdCkgeworICAgICAgICBpZiAoIXRpbGUpIHsK
ICAgICAgICAgICAgIC8qIE5PVEU6IGl0IG5ldmVyIHJldHVybnMgMCBpZiBpdC0+dGlsZSB3YXMg
c2V0ISAqLwotICAgICAgICAgICAgaWYgKGl0LT50aWxlKSB7Ci0gICAgICAgICAgICAgICAgQ1JJ
VElDQUwoIml0LT50aWxlPSVwLCBidXQgaXQgc2hvdWxkIGJlIDAhIiwgaXQtPnRpbGUpOwotICAg
ICAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2Rpc3NvY2lhdGUocHJp
diwgaXQsCisgICAgICAgICAgICBpZiAoaXRlbS0+dGlsZSkgeworICAgICAgICAgICAgICAgIENS
SVRJQ0FMKCJpdC0+dGlsZT0lcCwgYnV0IGl0IHNob3VsZCBiZSAwISIsIGl0ZW0tPnRpbGUpOwor
ICAgICAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2Rpc3NvY2lhdGUo
cHJpdiwgaXRlbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGxhc3RfdXNlZCk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8q
IERvIG5vdCBhZGQgbmV3IHJlcXVlc3RzIHRvIHRoZSByZW5kZXIgcXVldWUgKi8KICAgICAgICAg
ICAgIGlmICghcHJpdi0+cmVuZGVyLnN1c3BlbmQpIHsKLSAgICAgICAgICAgICAgICB0ID0gX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfbmV3KHByaXYsIG1fY29sLCBtX3Jvdywgem9vbSk7
Ci0gICAgICAgICAgICAgICAgaWYgKCF0KQorICAgICAgICAgICAgICAgIHRpbGUgPSBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9uZXcocHJpdiwgbV9jb2wsIG1fcm93LCB6b29tKTsKKyAg
ICAgICAgICAgICAgICBpZiAoIXRpbGUpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBFSU5B
X0ZBTFNFOwotICAgICAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2Fz
c29jaWF0ZShwcml2LCB0LCBpdCk7CisgICAgICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5n
X3N0b3JlX3RpbGVfYXNzb2NpYXRlKHByaXYsIHRpbGUsIGl0ZW0pOwogICAgICAgICAgICAgfQot
ICAgICAgICB9IGVsc2UgaWYgKHQgIT0gaXQtPnRpbGUpIHsKLSAgICAgICAgICAgIGlmIChpdC0+
dGlsZSkKKyAgICAgICAgfSBlbHNlIGlmICh0aWxlICE9IGl0ZW0tPnRpbGUpIHsKKyAgICAgICAg
ICAgIGlmIChpdGVtLT50aWxlKQogICAgICAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV90aWxlX2Rpc3NvY2lhdGUocHJpdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdCwgbGFzdF91c2VkKTsKLSAgICAgICAg
ICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2Fzc29jaWF0ZShwcml2LCB0LCBpdCk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpdGVtLCBsYXN0X3VzZWQpOworICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3RpbGVfYXNzb2NpYXRlKHByaXYsIHRpbGUsIGl0ZW0pOwogICAgICAgICB9CiAKLSAgICAgIGVu
ZDoKK2VuZDoKIAogICAgICAgICByZXR1cm4gRUlOQV9UUlVFOwogICAgIH0KQEAgLTQ3MSw5ICs0
NzEsOSBAQCBzdGF0aWMgaW5saW5lIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
aXRlbV9maWxsKEV3a19UaWxlZF9CYWNraW5nX1N0bwogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9
CiAKLXN0YXRpYyBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICpfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfaXRlbV9hZGQoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgdW5z
aWduZWQgbG9uZyBjb2wsIHVuc2lnbmVkIGxvbmcgcm93KQorc3RhdGljIEV3a19UaWxlZF9CYWNr
aW5nX1N0b3JlX0l0ZW0qIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2FkZChFd2tfVGls
ZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2LCB1bnNpZ25lZCBsb25nIGNvbHVtbiwgdW5zaWdu
ZWQgbG9uZyByb3cpCiB7Ci0gICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQ7Cisg
ICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSogaXQ7CiAgICAgRXZhc19Db29yZCB4LCB5
LCB0dywgdGg7CiAKICAgICBEQkcoIm89JXAiLCBwcml2LT5zZWxmKTsKQEAgLTQ4Miw5ICs0ODIs
OSBAQCBzdGF0aWMgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqX2V3a190aWxlZF9iYWNr
aW5nX3N0b3JlX2l0ZW1fYWRkKEV3a19UaWxlZAogICAgIGlmICghaXQpCiAgICAgICAgIHJldHVy
biAwOwogCi0gICAgdHcgPSBwcml2LT52aWV3LnRpbGUudzsKLSAgICB0aCA9IHByaXYtPnZpZXcu
dGlsZS5oOwotICAgIHggPSBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggKyBwcml2LT52aWV3Lngg
KyB0dyAgKmNvbDsKKyAgICB0dyA9IHByaXYtPnZpZXcudGlsZS53aWR0aDsKKyAgICB0aCA9IHBy
aXYtPnZpZXcudGlsZS5oZWlnaHQ7CisgICAgeCA9IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCAr
IHByaXYtPnZpZXcueCArIHR3ICAqY29sdW1uOwogICAgIHkgPSBwcml2LT52aWV3Lm9mZnNldC5i
YXNlLnkgKyBwcml2LT52aWV3LnkgKyB0aCAgKnJvdzsKIAogICAgIGl0LT50aWxlID0gMDsKQEAg
LTQ5Miw3ICs0OTIsNyBAQCBzdGF0aWMgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fYWRkKEV3a19UaWxlZAogICAgIGl0LT5zbW9vdGhf
c2NhbGUgPSBwcml2LT52aWV3LnRpbGUuem9vbV93ZWFrX3Ntb290aF9zY2FsZTsKICAgICBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9tb3ZlKGl0LCB4LCB5KTsKICAgICBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfaXRlbV9yZXNpemUoaXQsIHR3LCB0aCk7Ci0gICAgaWYgKCFfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9maWxsKHByaXYsIGl0LCBjb2wsIHJvdykpIHsKKyAgICBp
ZiAoIV9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2ZpbGwocHJpdiwgaXQsIGNvbHVtbiwg
cm93KSkgewogICAgICAgICBmcmVlKGl0KTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQpAQCAt
NTAwLDI2ICs1MDAsMjYgQEAgc3RhdGljIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKl9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2FkZChFd2tfVGlsZWQKICAgICByZXR1cm4gaXQ7
CiB9CiAKLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2RlbChFd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9J
dGVtICppdCkKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2RlbChF
d2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2LCBFd2tfVGlsZWRfQmFja2luZ19TdG9y
ZV9JdGVtKiBpdGVtKQogewotICAgIGlmIChpdC0+dGlsZSkgeworICAgIGlmIChpdGVtLT50aWxl
KSB7CiAgICAgICAgIGRvdWJsZSBsYXN0X3VzZWQgPSBlY29yZV9sb29wX3RpbWVfZ2V0KCk7Ci0g
ICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2Rpc3NvY2lhdGUocHJpdiwgaXQs
IGxhc3RfdXNlZCk7CisgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2Rpc3Nv
Y2lhdGUocHJpdiwgaXRlbSwgbGFzdF91c2VkKTsKICAgICB9CiAKLSAgICBmcmVlKGl0KTsKKyAg
ICBmcmVlKGl0ZW0pOwogfQogCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
aXRlbV9zbW9vdGhfc2NhbGVfc2V0KEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0LCBF
aW5hX0Jvb2wgc21vb3RoX3NjYWxlKQorc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX2l0ZW1fc21vb3RoX3NjYWxlX3NldChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKiBp
dGVtLCBFaW5hX0Jvb2wgc21vb3RoU2NhbGUpCiB7Ci0gICAgaWYgKGl0LT5zbW9vdGhfc2NhbGUg
PT0gc21vb3RoX3NjYWxlKQorICAgIGlmIChpdGVtLT5zbW9vdGhfc2NhbGUgPT0gc21vb3RoU2Nh
bGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChpdC0+dGlsZSkKLSAgICAgICAgZXZhc19v
YmplY3RfaW1hZ2Vfc21vb3RoX3NjYWxlX3NldChpdC0+dGlsZS0+aW1hZ2UsIHNtb290aF9zY2Fs
ZSk7CisgICAgaWYgKGl0ZW0tPnRpbGUpCisgICAgICAgIGV2YXNfb2JqZWN0X2ltYWdlX3Ntb290
aF9zY2FsZV9zZXQoaXRlbS0+dGlsZS0+aW1hZ2UsIHNtb290aFNjYWxlKTsKIH0KIAotc3RhdGlj
IGlubGluZSB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9jaGFuZ2VkKEV3a19UaWxlZF9C
YWNraW5nX1N0b3JlX0RhdGEgKnByaXYpCitzdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX2NoYW5nZWQoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdikK
IHsKICAgICBpZiAocHJpdi0+Y2hhbmdlZC5hbnkpCiAgICAgICAgIHJldHVybjsKQEAgLTUyNyw5
ICs1MjcsOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2No
YW5nZWQoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YQogICAgIHByaXYtPmNoYW5nZWQuYW55
ID0gRUlOQV9UUlVFOwogfQogCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
dmlld19jb2xzX2VuZF9kZWwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgRWlu
YV9Jbmxpc3QgKipwX3JvdywgdW5zaWduZWQgaW50IGNvdW50KQorc3RhdGljIHZvaWQgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfY29sc19lbmRfZGVsKEV3a19UaWxlZF9CYWNraW5nX1N0
b3JlX0RhdGEqIHByaXYsIEVpbmFfSW5saXN0KiogcF9yb3csIHVuc2lnbmVkIGludCBjb3VudCkK
IHsKLSAgICBFaW5hX0lubGlzdCAqbjsKKyAgICBFaW5hX0lubGlzdCogbjsKICAgICB1bnNpZ25l
ZCBpbnQgaTsKIAogICAgIGlmICghY291bnQpCkBAIC01MzgsNyArNTM4LDcgQEAgc3RhdGljIHZv
aWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfY29sc19lbmRfZGVsKEV3a19UaWxlZF9C
YWNraW5nX1N0b3JlX0QKICAgICBuID0gKCpwX3JvdyktPmxhc3Q7CiAKICAgICBmb3IgKGkgPSAw
OyBpIDwgY291bnQ7IGkrKykgewotICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVt
ICppdDsKKyAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSogaXQ7CiAgICAgICAg
IGl0ID0gRUlOQV9JTkxJU1RfQ09OVEFJTkVSX0dFVChuLCBFd2tfVGlsZWRfQmFja2luZ19TdG9y
ZV9JdGVtKTsKICAgICAgICAgbiA9IG4tPnByZXY7CiAgICAgICAgICpwX3JvdyA9IGVpbmFfaW5s
aXN0X3JlbW92ZSgqcF9yb3csIEVJTkFfSU5MSVNUX0dFVChpdCkpOwpAQCAtNTQ2LDE0ICs1NDYs
MTQgQEAgc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfY29sc19lbmRf
ZGVsKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0QKICAgICB9CiB9CiAKLXN0YXRpYyBFaW5hX0Jv
b2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfY29sc19lbmRfYWRkKEV3a19UaWxlZF9C
YWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIEVpbmFfSW5saXN0ICoqcF9yb3csIHVuc2lnbmVkIGlu
dCBiYXNlX2NvbCwgdW5zaWduZWQgaW50IGNvdW50KQorc3RhdGljIEVpbmFfQm9vbCBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfdmlld19jb2xzX2VuZF9hZGQoRXdrX1RpbGVkX0JhY2tpbmdfU3Rv
cmVfRGF0YSogcHJpdiwgRWluYV9Jbmxpc3QqKiBwX3JvdywgdW5zaWduZWQgaW50IGJhc2VfY29s
dW1uLCB1bnNpZ25lZCBpbnQgY291bnQpCiB7CiAgICAgdW5zaWduZWQgaW50IGksIHIgPSBwX3Jv
dyAtIHByaXYtPnZpZXcuaXRlbXM7CiAKLSAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKywg
YmFzZV9jb2wrKykgewotICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdDsK
KyAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKywgYmFzZV9jb2x1bW4rKykgeworICAgICAg
ICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKiBpdDsKIAotICAgICAgICBpdCA9IF9ld2tf
dGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2FkZChwcml2LCBiYXNlX2NvbCwgcik7CisgICAgICAg
IGl0ID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fYWRkKHByaXYsIGJhc2VfY29sdW1u
LCByKTsKICAgICAgICAgaWYgKCFpdCkgewogICAgICAgICAgICAgQ1JJVElDQUwoImZhaWxlZCB0
byBhZGQgY29sdW1uICV1IG9mICV1IGluIHJvdyAldS4iLCBpLCBjb3VudCwgcik7CiAgICAgICAg
ICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19jb2xzX2VuZF9kZWwocHJpdiwgcF9y
b3csIGkpOwpAQCAtNTY1LDE3ICs1NjUsMTcgQEAgc3RhdGljIEVpbmFfQm9vbCBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfdmlld19jb2xzX2VuZF9hZGQoRXdrX1RpbGVkX0JhY2tpbmdfU3QKICAg
ICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfdmlld19yb3dfZGVsKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIEVp
bmFfSW5saXN0ICpyb3cpCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmll
d19yb3dfZGVsKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYsIEVpbmFfSW5saXN0
KiByb3cpCiB7CiAgICAgd2hpbGUgKHJvdykgewotICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19T
dG9yZV9JdGVtICppdDsKKyAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSogaXQ7
CiAgICAgICAgIGl0ID0gRUlOQV9JTkxJU1RfQ09OVEFJTkVSX0dFVChyb3csIEV3a19UaWxlZF9C
YWNraW5nX1N0b3JlX0l0ZW0pOwogICAgICAgICByb3cgPSByb3ctPm5leHQ7CiAgICAgICAgIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2RlbChwcml2LCBpdCk7CiAgICAgfQogfQogCi1z
dGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19yb3dzX3JhbmdlX2RlbChF
d2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFaW5hX0lubGlzdCAqKnN0YXJ0LCBF
aW5hX0lubGlzdCAqKmVuZCkKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92
aWV3X3Jvd3NfcmFuZ2VfZGVsKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYsIEVp
bmFfSW5saXN0Kiogc3RhcnQsIEVpbmFfSW5saXN0KiogZW5kKQogewogICAgIGZvciAoOyBzdGFy
dCA8IGVuZDsgc3RhcnQrKykgewogICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmll
d19yb3dfZGVsKHByaXYsICpzdGFydCk7CkBAIC01ODMsMTAgKzU4MywxMCBAQCBzdGF0aWMgdm9p
ZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19yb3dzX3JhbmdlX2RlbChFd2tfVGlsZWRf
QmFja2luZ19TdG9yZQogICAgIH0KIH0KIAotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5n
X3N0b3JlX3ZpZXdfcm93c19hbGxfZGVsKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnBy
aXYpCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19yb3dzX2FsbF9k
ZWwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdikKIHsKLSAgICBFaW5hX0lubGlz
dCAqKnN0YXJ0OwotICAgIEVpbmFfSW5saXN0ICoqZW5kOworICAgIEVpbmFfSW5saXN0Kiogc3Rh
cnQ7CisgICAgRWluYV9Jbmxpc3QqKiBlbmQ7CiAKICAgICBzdGFydCA9IHByaXYtPnZpZXcuaXRl
bXM7CiAgICAgZW5kID0gcHJpdi0+dmlldy5pdGVtcyArIHByaXYtPnZpZXcucm93czsKQEAgLTU5
OCwyNyArNTk4LDI3IEBAIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3
X3Jvd3NfYWxsX2RlbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9ECiAgICAgcHJpdi0+dmlldy5y
b3dzID0gMDsKIH0KIAotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3JlbmRl
cih2b2lkICpkYXRhLCBFd2tfVGlsZSAqdCwgY29uc3QgRWluYV9SZWN0YW5nbGUgKmFyZWEpCitz
dGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcmVuZGVyKHZvaWQqIGRhdGEsIEV3
a19UaWxlKiB0aWxlLCBjb25zdCBFaW5hX1JlY3RhbmdsZSogYXJlYSkKIHsKICAgICBFd2tfVGls
ZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2ID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfRGF0YSo+KGRhdGEpOwogCiAgICAgSU5GKCJUT0RPICVwICh2aXNpYmxlPyAlZCkg
WyVsdSwlbHVdICVkLCVkICsgJWR4JWQiLAotICAgICAgICB0LCB0LT52aXNpYmxlLCB0LT5jb2ws
IHQtPnJvdywgYXJlYS0+eCwgYXJlYS0+eSwgYXJlYS0+dywgYXJlYS0+aCk7CisgICAgICAgIHRp
bGUsIHRpbGUtPnZpc2libGUsIHRpbGUtPmNvbCwgdGlsZS0+cm93LCBhcmVhLT54LCBhcmVhLT55
LCBhcmVhLT53LCBhcmVhLT5oKTsKIAotICAgIGlmICghdC0+dmlzaWJsZSkKKyAgICBpZiAoIXRp
bGUtPnZpc2libGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChwcml2LT52aWV3LnRpbGUu
dyAhPSB0LT53IHx8IHByaXYtPnZpZXcudGlsZS5oICE9IHQtPmgpCisgICAgaWYgKHByaXYtPnZp
ZXcudGlsZS53aWR0aCAhPSB0aWxlLT53aWR0aCB8fCBwcml2LT52aWV3LnRpbGUuaGVpZ2h0ICE9
IHRpbGUtPmhlaWdodCkKICAgICAgICAgcmV0dXJuOyAvLyB0b2RvOiByZW1vdmUgbWUgbGF0ZXIs
IGRvbid0IGV2ZW4gZmxhZyBhcyBkaXJ0eSEKIAogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOKHByaXYtPnJlbmRlci5jYik7Ci0gICAgaWYgKCFwcml2LT5yZW5kZXIuY2IocHJpdi0+cmVu
ZGVyLmRhdGEsIHQsIGFyZWEpKQorICAgIGlmICghcHJpdi0+cmVuZGVyLmNiKHByaXYtPnJlbmRl
ci5kYXRhLCB0aWxlLCBhcmVhKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZXZhc19vYmplY3Rf
aW1hZ2VfZGF0YV91cGRhdGVfYWRkKHQtPmltYWdlLCBhcmVhLT54LCBhcmVhLT55LCBhcmVhLT53
LCBhcmVhLT5oKTsKKyAgICBldmFzX29iamVjdF9pbWFnZV9kYXRhX3VwZGF0ZV9hZGQodGlsZS0+
aW1hZ2UsIGFyZWEtPngsIGFyZWEtPnksIGFyZWEtPncsIGFyZWEtPmgpOwogfQogCi1zdGF0aWMg
aW5saW5lIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX21vZGVsX21hdHJpeF9jcmVhdGUo
RXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgRXdrX1RpbGVfVW51c2VkX0NhY2hl
ICp0dWMpCitzdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX21vZGVs
X21hdHJpeF9jcmVhdGUoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdiwgRXdrX1Rp
bGVfVW51c2VkX0NhY2hlKiB0aWxlVW51c2VkQ2FjaGUpCiB7CiAgICAgaWYgKHByaXYtPm1vZGVs
Lm1hdHJpeCkgewogICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19yb3dzX2Fs
bF9kZWwocHJpdik7CkBAIC02MjksMTIgKzYyOSwxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX21vZGVsX21hdHJpeF9jcmVhdGUoRXdrX1RpbGVkX0JhY2tp
bgogICAgICAgICBld2tfdGlsZV9tYXRyaXhfZnJlZShwcml2LT5tb2RlbC5tYXRyaXgpOwogICAg
IH0KIAotICAgIHByaXYtPm1vZGVsLm1hdHJpeCA9IGV3a190aWxlX21hdHJpeF9uZXcodHVjLCBw
cml2LT5tb2RlbC5jdXIuY29scywgcHJpdi0+bW9kZWwuY3VyLnJvd3MsIHByaXYtPmNzcGFjZSwg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3JlbmRlciwgcHJpdik7CisgICAgcHJpdi0+bW9kZWwu
bWF0cml4ID0gZXdrX3RpbGVfbWF0cml4X25ldyh0aWxlVW51c2VkQ2FjaGUsIHByaXYtPm1vZGVs
LmN1ci5jb2xzLCBwcml2LT5tb2RlbC5jdXIucm93cywgcHJpdi0+Y3NwYWNlLCBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfcmVuZGVyLCBwcml2KTsKIH0KIAotc3RhdGljIHZvaWQgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX3NtYXJ0X21lbWJlcl9kZWwoRXZhc19PYmplY3QgKm8sIEV2YXNfT2Jq
ZWN0ICptZW1iZXIpCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRf
bWVtYmVyX2RlbChFdmFzX09iamVjdCogZXdrVGlsZSwgRXZhc19PYmplY3QqIG1lbWJlcikKIHsK
LSAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2KTsKKyAgICBQUklWX0RBVEFfR0VU
X09SX1JFVFVSTihld2tUaWxlLCBwcml2KTsKICAgICBpZiAoIXByaXYtPmNvbnRlbnRzX2NsaXBw
ZXIpCiAgICAgICAgIHJldHVybjsKICAgICBldmFzX29iamVjdF9jbGlwX3Vuc2V0KG1lbWJlcik7
CkBAIC02NDIsMTggKzY0MiwxOCBAQCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfc21hcnRfbWVtYmVyX2RlbChFdmFzX09iamVjdCAqbywgRXZhc19PYmplYwogICAgICAgICBl
dmFzX29iamVjdF9oaWRlKHByaXYtPmNvbnRlbnRzX2NsaXBwZXIpOwogfQogCi1zdGF0aWMgdm9p
ZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfbWVtYmVyX2FkZChFdmFzX09iamVjdCAq
bywgRXZhc19PYmplY3QgKm1lbWJlcikKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9zbWFydF9tZW1iZXJfYWRkKEV2YXNfT2JqZWN0KiBld2tUaWxlLCBFdmFzX09iamVjdCog
bWVtYmVyKQogewotICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYpOworICAgIFBS
SVZfREFUQV9HRVRfT1JfUkVUVVJOKGV3a1RpbGUsIHByaXYpOwogICAgIGlmICghcHJpdi0+Y29u
dGVudHNfY2xpcHBlcikKICAgICAgICAgcmV0dXJuOwogICAgIGV2YXNfb2JqZWN0X2NsaXBfc2V0
KG1lbWJlciwgcHJpdi0+Y29udGVudHNfY2xpcHBlcik7Ci0gICAgaWYgKGV2YXNfb2JqZWN0X3Zp
c2libGVfZ2V0KG8pKQorICAgIGlmIChldmFzX29iamVjdF92aXNpYmxlX2dldChld2tUaWxlKSkK
ICAgICAgICAgZXZhc19vYmplY3Rfc2hvdyhwcml2LT5jb250ZW50c19jbGlwcGVyKTsKIH0KIAog
I2lmZGVmIERFQlVHX01FTV9MRUFLUwotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX21lbV9kYmcoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdikKK3N0YXRpYyB2
b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9tZW1fZGJnKEV3a19UaWxlZF9CYWNraW5nX1N0
b3JlX0RhdGEqIHByaXYpCiB7CiAgICAgc3RhdGljIGludCBydW4gPSAwOwogCkBAIC02NzAsMTMg
KzY3MCwxMyBAQCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfbWVtX2RiZyhF
d2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2KQogICAgIHByaW50ZigiLS0tIEVORCBE
RUJVRyBUSUxFRCBCQUNLSU5HIFNUT1JFIE1FTU9SWSBbJWRdIC0tXG5cbiIsIHJ1bik7CiB9CiAK
LXN0YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NpZ191c3Iodm9pZCAq
ZGF0YSwgaW50IHR5cGUsIHZvaWQgKmV2ZW50KQorc3RhdGljIEVpbmFfQm9vbCBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfc2lnX3Vzcih2b2lkKiBkYXRhLCBpbnQgdHlwZSwgdm9pZCogZXZlbnQp
CiB7Ci0gICAgRWNvcmVfRXZlbnRfU2lnbmFsX1VzZXIgKnNpZyA9IChFY29yZV9FdmVudF9TaWdu
YWxfVXNlciopZXZlbnQ7Ci0gICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiA9
IChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKilkYXRhOworICAgIEVjb3JlX0V2ZW50X1Np
Z25hbF9Vc2VyKiBzaWcgPSAoRWNvcmVfRXZlbnRfU2lnbmFsX1VzZXIqKWV2ZW50OworICAgIEV3
a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYgPSAoRXdrX1RpbGVkX0JhY2tpbmdfU3Rv
cmVfRGF0YSopZGF0YTsKIAogICAgIGlmIChzaWctPm51bWJlciA9PSAyKSB7Ci0gICAgICAgIEV3
a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjOworICAgICAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUq
IHR1YzsKICAgICAgICAgdHVjID0gZXdrX3RpbGVfbWF0cml4X3VudXNlZF9jYWNoZV9nZXQocHJp
di0+bW9kZWwubWF0cml4KTsKICAgICAgICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2F1dG9fZmx1
c2godHVjKTsKICAgICB9CkBAIC02ODcsMjAgKzY4NywyMCBAQCBzdGF0aWMgRWluYV9Cb29sIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9zaWdfdXNyKHZvaWQgKmRhdGEsIGludCB0eXBlLCB2b2lk
ICpldgogfQogI2VuZGlmCiAKLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9z
bWFydF9hZGQoRXZhc19PYmplY3QgKm8pCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfc21hcnRfYWRkKEV2YXNfT2JqZWN0KiBld2tUaWxlKQogewotICAgIEV3a19UaWxlZF9C
YWNraW5nX1N0b3JlX0RhdGEgKnByaXY7CisgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0
YSogcHJpdjsKIAotICAgIERCRygibz0lcCIsIG8pOworICAgIERCRygibz0lcCIsIGV3a1RpbGUp
OwogCiAgICAgcHJpdiA9IHN0YXRpY19jYXN0PEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEq
PihjYWxsb2MoMSwgc2l6ZW9mKCpwcml2KSkpOwogICAgIGlmICghcHJpdikKICAgICAgICAgcmV0
dXJuOwogCi0gICAgcHJpdi0+c2VsZiA9IG87CisgICAgcHJpdi0+c2VsZiA9IGV3a1RpbGU7CiAg
ICAgcHJpdi0+dmlldy50aWxlLnpvb20gPSAxLjA7Ci0gICAgcHJpdi0+dmlldy50aWxlLncgPSBE
RUZBVUxUX1RJTEVfVzsKLSAgICBwcml2LT52aWV3LnRpbGUuaCA9IERFRkFVTFRfVElMRV9IOwor
ICAgIHByaXYtPnZpZXcudGlsZS53aWR0aCA9IERFRkFVTFRfVElMRV9XOworICAgIHByaXYtPnZp
ZXcudGlsZS5oZWlnaHQgPSBERUZBVUxUX1RJTEVfSDsKICAgICBwcml2LT52aWV3Lm9mZnNldC5j
dXIueCA9IDA7CiAgICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkgPSAwOwogICAgIHByaXYtPnZp
ZXcub2Zmc2V0Lm9sZC54ID0gMDsKQEAgLTcxOSwxNyArNzE5LDE3IEBAIHN0YXRpYyB2b2lkIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9hZGQoRXZhc19PYmplY3QgKm8pCiAgICAgcHJp
di0+cmVuZGVyLnN1c3BlbmQgPSBFSU5BX0ZBTFNFOwogICAgIHByaXYtPmNzcGFjZSA9IEVWQVNf
Q09MT1JTUEFDRV9BUkdCODg4ODsgLy8gVE9ETzogZGV0ZWN0IGl0LgogCi0gICAgZXZhc19vYmpl
Y3Rfc21hcnRfZGF0YV9zZXQobywgcHJpdik7Ci0gICAgX3BhcmVudF9zYy5hZGQobyk7CisgICAg
ZXZhc19vYmplY3Rfc21hcnRfZGF0YV9zZXQoZXdrVGlsZSwgcHJpdik7CisgICAgX3BhcmVudF9z
Yy5hZGQoZXdrVGlsZSk7CiAKICAgICBwcml2LT5jb250ZW50c19jbGlwcGVyID0gZXZhc19vYmpl
Y3RfcmVjdGFuZ2xlX2FkZCgKLSAgICAgICAgZXZhc19vYmplY3RfZXZhc19nZXQobykpOworICAg
ICAgICBldmFzX29iamVjdF9ldmFzX2dldChld2tUaWxlKSk7CiAgICAgZXZhc19vYmplY3RfbW92
ZShwcml2LT5jb250ZW50c19jbGlwcGVyLCAwLCAwKTsKICAgICBldmFzX29iamVjdF9yZXNpemUo
cHJpdi0+Y29udGVudHNfY2xpcHBlciwKICAgICAgICAgICAgICAgICAgICAgICAgcHJpdi0+bW9k
ZWwud2lkdGgsIHByaXYtPm1vZGVsLmhlaWdodCk7CiAgICAgZXZhc19vYmplY3RfY29sb3Jfc2V0
KHByaXYtPmNvbnRlbnRzX2NsaXBwZXIsIDI1NSwgMjU1LCAyNTUsIDI1NSk7CiAgICAgZXZhc19v
YmplY3Rfc2hvdyhwcml2LT5jb250ZW50c19jbGlwcGVyKTsKLSAgICBldmFzX29iamVjdF9zbWFy
dF9tZW1iZXJfYWRkKHByaXYtPmNvbnRlbnRzX2NsaXBwZXIsIG8pOworICAgIGV2YXNfb2JqZWN0
X3NtYXJ0X21lbWJlcl9hZGQocHJpdi0+Y29udGVudHNfY2xpcHBlciwgZXdrVGlsZSk7CiAKICAg
ICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfbW9kZWxfbWF0cml4X2NyZWF0ZShwcml2LCAwKTsK
ICAgICBldmFzX29iamVjdF9tb3ZlKHByaXYtPmJhc2UuY2xpcHBlciwgMCwgMCk7CkBAIC03Mzgs
MTUgKzczOCwxNSBAQCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRf
YWRkKEV2YXNfT2JqZWN0ICpvKQogCiAjaWZkZWYgREVCVUdfTUVNX0xFQUtTCiAgICAgcHJpdi0+
c2lnX3VzciA9IGVjb3JlX2V2ZW50X2hhbmRsZXJfYWRkCi0gICAgICAgIChFQ09SRV9FVkVOVF9T
SUdOQUxfVVNFUiwgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NpZ191c3IsIHByaXYpOworICAg
ICAgICAgICAgICAgICAgICAgICAgKEVDT1JFX0VWRU5UX1NJR05BTF9VU0VSLCBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfc2lnX3VzciwgcHJpdik7CiAjZW5kaWYKIH0KIAotc3RhdGljIHZvaWQg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2RlbChFdmFzX09iamVjdCAqbykKK3N0YXRp
YyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9kZWwoRXZhc19PYmplY3QqIGV3
a1RpbGUpCiB7Ci0gICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdik7Ci0gICAgREJH
KCJvPSVwIiwgbyk7Ci0gICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWM7CisgICAgUFJJVl9E
QVRBX0dFVF9PUl9SRVRVUk4oZXdrVGlsZSwgcHJpdik7CisgICAgREJHKCJvPSVwIiwgZXdrVGls
ZSk7CisgICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0dWM7CiAKICAgICB0dWMgPSBld2tfdGls
ZV9tYXRyaXhfdW51c2VkX2NhY2hlX2dldChwcml2LT5tb2RlbC5tYXRyaXgpOwogICAgIGV3a190
aWxlX3VudXNlZF9jYWNoZV91bmxvY2tfYXJlYSh0dWMpOwpAQCAtNzY3LDcgKzc2Nyw3IEBAIHN0
YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9kZWwoRXZhc19PYmplY3Qg
Km8pCiAgICAgZXZhc19vYmplY3Rfc21hcnRfbWVtYmVyX2RlbChwcml2LT5jb250ZW50c19jbGlw
cGVyKTsKICAgICBldmFzX29iamVjdF9kZWwocHJpdi0+Y29udGVudHNfY2xpcHBlcik7CiAKLSAg
ICBfcGFyZW50X3NjLmRlbChvKTsKKyAgICBfcGFyZW50X3NjLmRlbChld2tUaWxlKTsKIAogI2lm
ZGVmIERFQlVHX01FTV9MRUFLUwogICAgIHByaW50ZigiXG5JTVBPUlRBTlQ6IFRJTEVEIEJBQ0tJ
TkcgU1RPUkUgREVMRVRFRCAobWF5IGJlIHJlYWwgbGVha3MpXG4iKTsKQEAgLTc3NSwxMSArNzc1
LDExIEBAIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9kZWwoRXZh
c19PYmplY3QgKm8pCiAjZW5kaWYKIH0KIAotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5n
X3N0b3JlX3NtYXJ0X21vdmUoRXZhc19PYmplY3QgKm8sIEV2YXNfQ29vcmQgeCwgRXZhc19Db29y
ZCB5KQorc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X21vdmUoRXZh
c19PYmplY3QqIGV3a1RpbGUsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5KQogewotICAgIERC
Rygibz0lcCwgbmV3IHBvczogJWR4JWQiLCBvLCB4LCB5KTsKKyAgICBEQkcoIm89JXAsIG5ldyBw
b3M6ICVkeCVkIiwgZXdrVGlsZSwgeCwgeSk7CiAKLSAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVS
TihvLCBwcml2KTsKKyAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihld2tUaWxlLCBwcml2KTsK
IAogICAgIGlmIChwcml2LT5jaGFuZ2VkLnBvcykKICAgICAgICAgcmV0dXJuOwpAQCAtNzkxLDI5
ICs3OTEsMjkgQEAgc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X21v
dmUoRXZhc19PYmplY3QgKm8sIEV2YXNfQ29vcmQgeCwgRXYKICAgICBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfY2hhbmdlZChwcml2KTsKIH0KIAotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNr
aW5nX3N0b3JlX3NtYXJ0X3Jlc2l6ZShFdmFzX09iamVjdCAqbywgRXZhc19Db29yZCB3LCBFdmFz
X0Nvb3JkIGgpCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfcmVz
aXplKEV2YXNfT2JqZWN0KiBld2tUaWxlLCBFdmFzX0Nvb3JkIHdpZHRoLCBFdmFzX0Nvb3JkIGhl
aWdodCkKIHsKLSAgICBEQkcoIm89JXAsIG5ldyBzaXplOiAlZHglZCIsIG8sIHcsIGgpOworICAg
IERCRygibz0lcCwgbmV3IHNpemU6ICVkeCVkIiwgZXdrVGlsZSwgd2lkdGgsIGhlaWdodCk7CiAK
LSAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2KTsKKyAgICBQUklWX0RBVEFfR0VU
X09SX1JFVFVSTihld2tUaWxlLCBwcml2KTsKIAogICAgIGlmIChwcml2LT5jaGFuZ2VkLnNpemUp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChwcml2LT52aWV3LncgPT0gdyAmJiBwcml2LT52
aWV3LmggPT0gaCkKKyAgICBpZiAocHJpdi0+dmlldy53aWR0aCA9PSB3aWR0aCAmJiBwcml2LT52
aWV3LmhlaWdodCA9PSBoZWlnaHQpCiAgICAgICAgIHJldHVybjsKIAogICAgIHByaXYtPmNoYW5n
ZWQuc2l6ZSA9IEVJTkFfVFJVRTsKICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfY2hhbmdl
ZChwcml2KTsKIH0KIAotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3JlY2Fs
Y19yZW5kZXJlcnMoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgRXZhc19Db29y
ZCB3LCBFdmFzX0Nvb3JkIGgsIEV2YXNfQ29vcmQgdHcsIEV2YXNfQ29vcmQgdGgpCitzdGF0aWMg
dm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcmVjYWxjX3JlbmRlcmVycyhFd2tfVGlsZWRf
QmFja2luZ19TdG9yZV9EYXRhKiBwcml2LCBFdmFzX0Nvb3JkIHdpZHRoLCBFdmFzX0Nvb3JkIGhl
aWdodCwgRXZhc19Db29yZCB0aWxlV2lkdGgsIEV2YXNfQ29vcmQgdGlsZUhlaWdodCkKIHsKICAg
ICBsb25nIGNvbHMsIHJvd3MsIG9sZF9yb3dzLCBvbGRfY29sczsKLSAgICBJTkYoIm89JXAsIG5l
dyBzaXplOiAlZHglZCIsIHByaXYtPnNlbGYsIHcsIGgpOworICAgIElORigibz0lcCwgbmV3IHNp
emU6ICVkeCVkIiwgcHJpdi0+c2VsZiwgd2lkdGgsIGhlaWdodCk7CiAKLSAgICBjb2xzID0gMSAr
IChpbnQpY2VpbCgoZmxvYXQpdyAvIChmbG9hdCl0dyk7Ci0gICAgcm93cyA9IDEgKyAoaW50KWNl
aWwoKGZsb2F0KWggLyAoZmxvYXQpdGgpOworICAgIGNvbHMgPSAxICsgc3RhdGljX2Nhc3Q8aW50
PihjZWlsKHN0YXRpY19jYXN0PGZsb2F0Pih3aWR0aCAvIHRpbGVXaWR0aCkpKTsKKyAgICByb3dz
ID0gMSArIHN0YXRpY19jYXN0PGludD4oY2VpbChzdGF0aWNfY2FzdDxmbG9hdD4oaGVpZ2h0IC8g
dGlsZUhlaWdodCkpKTsKIAogICAgIElORigibz0lcCBuZXcgZ3JpZCBzaXplIGNvbHM6ICVsZCwg
cm93czogJWxkLCB3YXMgJWxkLCAlbGQiLAogICAgICAgICBwcml2LT5zZWxmLCBjb2xzLCByb3dz
LCBwcml2LT52aWV3LmNvbHMsIHByaXYtPnZpZXcucm93cyk7CkBAIC04MjUsNyArODI1LDcgQEAg
c3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3JlY2FsY19yZW5kZXJlcnMoRXdr
X1RpbGVkX0JhY2tpbmdfU3RvcmVfRGEKICAgICBvbGRfcm93cyA9IHByaXYtPnZpZXcucm93czsK
IAogICAgIGlmIChyb3dzIDwgb2xkX3Jvd3MpIHsKLSAgICAgICAgRWluYV9Jbmxpc3QgKipzdGFy
dCwgKiplbmQ7CisgICAgICAgIEVpbmFfSW5saXN0Kiogc3RhcnQsICoqZW5kOwogICAgICAgICBz
dGFydCA9IHByaXYtPnZpZXcuaXRlbXMgKyByb3dzOwogICAgICAgICBlbmQgPSBwcml2LT52aWV3
Lml0ZW1zICsgb2xkX3Jvd3M7CiAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3
X3Jvd3NfcmFuZ2VfZGVsKHByaXYsIHN0YXJ0LCBlbmQpOwpAQCAtODM5LDE0ICs4MzksMTQgQEAg
c3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3JlY2FsY19yZW5kZXJlcnMoRXdr
X1RpbGVkX0JhY2tpbmdfU3RvcmVfRGEKICAgICBwcml2LT52aWV3LnJvd3MgPSByb3dzOwogICAg
IHByaXYtPnZpZXcuY29scyA9IGNvbHM7CiAgICAgaWYgKHJvd3MgPiBvbGRfcm93cykgewotICAg
ICAgICBFaW5hX0lubGlzdCAqKnN0YXJ0LCAqKmVuZDsKKyAgICAgICAgRWluYV9Jbmxpc3QqKiBz
dGFydCwgKiogZW5kOwogICAgICAgICBzdGFydCA9IHByaXYtPnZpZXcuaXRlbXMgKyBvbGRfcm93
czsKICAgICAgICAgZW5kID0gcHJpdi0+dmlldy5pdGVtcyArIHJvd3M7CiAgICAgICAgIGZvciAo
OyBzdGFydCA8IGVuZDsgc3RhcnQrKykgewogICAgICAgICAgICAgRWluYV9Cb29sIHI7CiAgICAg
ICAgICAgICAqc3RhcnQgPSAwOwogICAgICAgICAgICAgciA9IF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV92aWV3X2NvbHNfZW5kX2FkZAotICAgICAgICAgICAgICAgIChwcml2LCBzdGFydCwgMCwg
Y29scyk7CisgICAgICAgICAgICAgICAgICAgIChwcml2LCBzdGFydCwgMCwgY29scyk7CiAgICAg
ICAgICAgICBpZiAoIXIpIHsKICAgICAgICAgICAgICAgICBDUklUSUNBTCgiZmFpbGVkIHRvIGFs
bG9jYXRlICVsZCBjb2x1bW5zIiwgY29scyk7CiAgICAgICAgICAgICAgICAgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX3ZpZXdfcm93c19yYW5nZV9kZWwKQEAgLTg1OCw3ICs4NTgsNyBAQCBzdGF0
aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcmVjYWxjX3JlbmRlcmVycyhFd2tfVGls
ZWRfQmFja2luZ19TdG9yZV9EYQogICAgIH0KIAogICAgIGlmIChjb2xzICE9IG9sZF9jb2xzKSB7
Ci0gICAgICAgIEVpbmFfSW5saXN0ICoqc3RhcnQsICoqZW5kOworICAgICAgICBFaW5hX0lubGlz
dCoqIHN0YXJ0LCAqKmVuZDsKICAgICAgICAgaW50IHRvZG8gPSBjb2xzIC0gb2xkX2NvbHM7CiAg
ICAgICAgIHN0YXJ0ID0gcHJpdi0+dmlldy5pdGVtczsKICAgICAgICAgZW5kID0gc3RhcnQgKyBz
dGQ6Om1pbihvbGRfcm93cywgcm93cyk7CkBAIC04NjYsNyArODY2LDcgQEAgc3RhdGljIHZvaWQg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3JlY2FsY19yZW5kZXJlcnMoRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfRGEKICAgICAgICAgICAgIGZvciAoOyBzdGFydCA8IGVuZDsgc3RhcnQrKykgewog
ICAgICAgICAgICAgICAgIEVpbmFfQm9vbCByOwogICAgICAgICAgICAgICAgIHIgPSBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfdmlld19jb2xzX2VuZF9hZGQKLSAgICAgICAgICAgICAgICAgICAg
KHByaXYsIHN0YXJ0LCBvbGRfY29scywgdG9kbyk7CisgICAgICAgICAgICAgICAgICAgICAgICAo
cHJpdiwgc3RhcnQsIG9sZF9jb2xzLCB0b2RvKTsKICAgICAgICAgICAgICAgICBpZiAoIXIpIHsK
ICAgICAgICAgICAgICAgICAgICAgQ1JJVElDQUwoImZhaWxlZCB0byBhbGxvY2F0ZSAlZCBjb2x1
bW5zISIsIHRvZG8pOwogCkBAIC04OTEsMjEgKzg5MSwyMSBAQCBzdGF0aWMgdm9pZCBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfcmVjYWxjX3JlbmRlcmVycyhFd2tfVGlsZWRfQmFja2luZ19TdG9y
ZV9EYQogICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9maWxsX3JlbmRlcmVycyhwcml2KTsK
IH0KIAotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0
ZV9zaXplKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIEV2YXNfQ29vcmQgdywg
RXZhc19Db29yZCBoKQorc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0
X2NhbGN1bGF0ZV9zaXplKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYsIEV2YXNf
Q29vcmQgd2lkdGgsIEV2YXNfQ29vcmQgaGVpZ2h0KQogewotICAgIGV2YXNfb2JqZWN0X3Jlc2l6
ZShwcml2LT5iYXNlLmNsaXBwZXIsIHcsIGgpOworICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShwcml2
LT5iYXNlLmNsaXBwZXIsIHdpZHRoLCBoZWlnaHQpOwogCi0gICAgcHJpdi0+dmlldy53ID0gdzsK
LSAgICBwcml2LT52aWV3LmggPSBoOworICAgIHByaXYtPnZpZXcud2lkdGggPSB3aWR0aDsKKyAg
ICBwcml2LT52aWV3LmhlaWdodCA9IGhlaWdodDsKIAogICAgIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9yZWNhbGNfcmVuZGVyZXJzKAotICAgICAgICBwcml2LCB3LCBoLCBwcml2LT52aWV3LnRp
bGUudywgcHJpdi0+dmlldy50aWxlLmgpOworICAgICAgICBwcml2LCB3aWR0aCwgaGVpZ2h0LCBw
cml2LT52aWV3LnRpbGUud2lkdGgsIHByaXYtPnZpZXcudGlsZS5oZWlnaHQpOwogfQogCiAvLyBU
T0RPOiByZW1vdmUgbWUgbGF0ZXIuCi1zdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlZF9iYWNr
aW5nX3N0b3JlX3ZpZXdfZGJnKGNvbnN0IEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnBy
aXYpCitzdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfZGJn
KGNvbnN0IEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYpCiB7Ci0gICAgRWluYV9J
bmxpc3QgKipzdGFydCwgKiplbmQ7CisgICAgRWluYV9Jbmxpc3QqKiBzdGFydCwgKiplbmQ7CiAg
ICAgcHJpbnRmKCJ0aWxlcz0lMmxkLCUybGQgIG1vZGVsPSUybGQsJTJsZCBbJWR4JWRdIGJhc2U9
JSszbGQsJSs0bGQgb2Zmc2V0PSUrNGQsJSs0ZCBvbGQ9JSs0ZCwlKzRkIGJhc2U9JSszZCwlKzNk
XG4iLAogICAgICAgICAgICBwcml2LT52aWV3LmNvbHMsIHByaXYtPnZpZXcucm93cywKICAgICAg
ICAgICAgcHJpdi0+bW9kZWwuY3VyLmNvbHMsIHByaXYtPm1vZGVsLmN1ci5yb3dzLApAQCAtOTE4
LDcgKzkxOCw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
dmlld19kYmcoY29uc3QgRXdrX1RpbGVkX0JhY2tpbmdfU3RvCiAgICAgc3RhcnQgPSBwcml2LT52
aWV3Lml0ZW1zOwogICAgIGVuZCA9IHByaXYtPnZpZXcuaXRlbXMgKyBwcml2LT52aWV3LnJvd3M7
CiAgICAgZm9yICg7IHN0YXJ0IDwgZW5kOyBzdGFydCsrKSB7Ci0gICAgICAgIGNvbnN0IEV3a19U
aWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0OworICAgICAgICBjb25zdCBFd2tfVGlsZWRfQmFj
a2luZ19TdG9yZV9JdGVtKiBpdDsKIAogICAgICAgICBFSU5BX0lOTElTVF9GT1JFQUNIKCpzdGFy
dCwgaXQpIHsKICAgICAgICAgICAgIHByaW50ZigiICUrNGQsJSs0ZCAiLCBpdC0+Z2VvbWV0cnku
eCwgaXQtPmdlb21ldHJ5LnkpOwpAQCAtOTQ2LDIyICs5NDYsMjIgQEAgc3RhdGljIGlubGluZSB2
b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X2RiZyhjb25zdCBFd2tfVGlsZWRfQmFj
a2luZ19TdG8KICAqCiAgKiBAcGFyYW0gY291bnQgdGhlIG51bWJlciBvZiB0aW1lcyB0byByZXBl
YXQgdGhlIHByb2Nlc3MuCiAgKi8KLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV92aWV3X3dyYXBfdXAoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgRXZhc19D
b29yZCB4LCBFdmFzX0Nvb3JkIHksIHVuc2lnbmVkIGludCBjb3VudCkKK3N0YXRpYyB2b2lkIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3dyYXBfdXAoRXdrX1RpbGVkX0JhY2tpbmdfU3Rv
cmVfRGF0YSogcHJpdiwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHksIHVuc2lnbmVkIGludCBj
b3VudCkKIHsKICAgICB1bnNpZ25lZCBpbnQgbGFzdF9yb3cgPSBwcml2LT52aWV3LnJvd3MgLSAx
OwotICAgIEV2YXNfQ29vcmQgdHcgPSBwcml2LT52aWV3LnRpbGUudzsKLSAgICBFdmFzX0Nvb3Jk
IHRoID0gcHJpdi0+dmlldy50aWxlLmg7CisgICAgRXZhc19Db29yZCB0dyA9IHByaXYtPnZpZXcu
dGlsZS53aWR0aDsKKyAgICBFdmFzX0Nvb3JkIHRoID0gcHJpdi0+dmlldy50aWxlLmhlaWdodDsK
ICAgICBFdmFzX0Nvb3JkIG9mZl95ID0gcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ICsgY291bnQg
KiB0aDsKICAgICBFdmFzX0Nvb3JkIG95ID0geSArIChsYXN0X3JvdyAtIGNvdW50ICsgMSkgKiB0
aCArIG9mZl95OwotICAgIEVpbmFfSW5saXN0ICoqaXRyX3N0YXJ0LCAqKml0cl9lbmQ7CisgICAg
RWluYV9Jbmxpc3QqKiBpdHJfc3RhcnQsICoqaXRyX2VuZDsKIAogICAgIGl0cl9zdGFydCA9IHBy
aXYtPnZpZXcuaXRlbXM7CiAgICAgaXRyX2VuZCA9IGl0cl9zdGFydCArIGxhc3Rfcm93OwogCiAg
ICAgZm9yICg7IGNvdW50ID4gMDsgY291bnQtLSkgewotICAgICAgICBFaW5hX0lubGlzdCAqKml0
cjsKLSAgICAgICAgRWluYV9Jbmxpc3QgKnRtcCA9ICppdHJfc3RhcnQ7Ci0gICAgICAgIEV3a19U
aWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0OworICAgICAgICBFaW5hX0lubGlzdCoqIGl0cjsK
KyAgICAgICAgRWluYV9Jbmxpc3QqIHRtcCA9ICppdHJfc3RhcnQ7CisgICAgICAgIEV3a19UaWxl
ZF9CYWNraW5nX1N0b3JlX0l0ZW0qIGl0OwogICAgICAgICBFdmFzX0Nvb3JkIG94ID0geCArIHBy
aXYtPnZpZXcub2Zmc2V0LmJhc2UueDsKICAgICAgICAgaW50IGMgPSAwOwogCkBAIC05OTQsMjEg
Kzk5NCwyMSBAQCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld193cmFw
X3VwKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKgogICoKICAqIEBwYXJhbSBjb3VudCB0
aGUgbnVtYmVyIG9mIHRpbWVzIHRvIHJlcGVhdCB0aGUgcHJvY2Vzcy4KICAqLwotc3RhdGljIHZv
aWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfd3JhcF9kb3duKEV3a19UaWxlZF9CYWNr
aW5nX1N0b3JlX0RhdGEgKnByaXYsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5LCB1bnNpZ25l
ZCBpbnQgY291bnQpCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld193
cmFwX2Rvd24oRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdiwgRXZhc19Db29yZCB4
LCBFdmFzX0Nvb3JkIHksIHVuc2lnbmVkIGludCBjb3VudCkKIHsKLSAgICBFdmFzX0Nvb3JkIHR3
ID0gcHJpdi0+dmlldy50aWxlLnc7Ci0gICAgRXZhc19Db29yZCB0aCA9IHByaXYtPnZpZXcudGls
ZS5oOworICAgIEV2YXNfQ29vcmQgdHcgPSBwcml2LT52aWV3LnRpbGUud2lkdGg7CisgICAgRXZh
c19Db29yZCB0aCA9IHByaXYtPnZpZXcudGlsZS5oZWlnaHQ7CiAgICAgRXZhc19Db29yZCBvZmZf
eSA9IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSAtIGNvdW50ICogdGg7CiAgICAgRXZhc19Db29y
ZCBveSA9IHkgKyBvZmZfeSArIChjb3VudCAtIDEpICogdGg7Ci0gICAgRWluYV9Jbmxpc3QgKipp
dHJfc3RhcnQsICoqaXRyX2VuZDsKKyAgICBFaW5hX0lubGlzdCoqIGl0cl9zdGFydCwgKippdHJf
ZW5kOwogCiAgICAgaXRyX3N0YXJ0ID0gcHJpdi0+dmlldy5pdGVtcyArIHByaXYtPnZpZXcucm93
cyAtIDE7CiAgICAgaXRyX2VuZCA9IHByaXYtPnZpZXcuaXRlbXM7CiAKICAgICBmb3IgKDsgY291
bnQgPiAwOyBjb3VudC0tKSB7Ci0gICAgICAgIEVpbmFfSW5saXN0ICoqaXRyOwotICAgICAgICBF
aW5hX0lubGlzdCAqdG1wID0gKml0cl9zdGFydDsKLSAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdf
U3RvcmVfSXRlbSAqaXQ7CisgICAgICAgIEVpbmFfSW5saXN0KiogaXRyOworICAgICAgICBFaW5h
X0lubGlzdCogdG1wID0gKml0cl9zdGFydDsKKyAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3Rv
cmVfSXRlbSogaXQ7CiAgICAgICAgIEV2YXNfQ29vcmQgb3ggPSB4ICsgcHJpdi0+dmlldy5vZmZz
ZXQuYmFzZS54OwogICAgICAgICBpbnQgYyA9IDA7CiAKQEAgLTEwNDEsMTUgKzEwNDEsMTUgQEAg
c3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfd3JhcF9kb3duKEV3a19U
aWxlZF9CYWNraW5nX1N0b3JlX0RhdGEKICAqCiAgKiBAcGFyYW0gY291bnQgdGhlIG51bWJlciBv
ZiB0aW1lcyB0byByZXBlYXQgdGhlIHByb2Nlc3MuCiAgKi8KLXN0YXRpYyB2b2lkIF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV92aWV3X3dyYXBfbGVmdChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9E
YXRhICpwcml2LCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwgdW5zaWduZWQgaW50IGNvdW50
KQorc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfd3JhcF9sZWZ0KEV3
a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29y
ZCB5LCB1bnNpZ25lZCBpbnQgY291bnQpCiB7CiAgICAgdW5zaWduZWQgaW50IHIsIGxhc3RfY29s
ID0gcHJpdi0+dmlldy5jb2xzIC0gMTsKLSAgICBFdmFzX0Nvb3JkIHR3ID0gcHJpdi0+dmlldy50
aWxlLnc7Ci0gICAgRXZhc19Db29yZCB0aCA9IHByaXYtPnZpZXcudGlsZS5oOworICAgIEV2YXNf
Q29vcmQgdHcgPSBwcml2LT52aWV3LnRpbGUud2lkdGg7CisgICAgRXZhc19Db29yZCB0aCA9IHBy
aXYtPnZpZXcudGlsZS5oZWlnaHQ7CiAgICAgRXZhc19Db29yZCBvZmZfeCA9IHByaXYtPnZpZXcu
b2Zmc2V0LmJhc2UueCArIGNvdW50ICogdHc7CiAgICAgRXZhc19Db29yZCBveSA9IHkgKyBwcml2
LT52aWV3Lm9mZnNldC5iYXNlLnk7Ci0gICAgRWluYV9Jbmxpc3QgKippdHI7Ci0gICAgRWluYV9J
bmxpc3QgKippdHJfZW5kOworICAgIEVpbmFfSW5saXN0KiogaXRyOworICAgIEVpbmFfSW5saXN0
KiogaXRyX2VuZDsKIAogICAgIGl0ciA9IHByaXYtPnZpZXcuaXRlbXM7CiAgICAgaXRyX2VuZCA9
IGl0ciArIHByaXYtPnZpZXcucm93czsKQEAgLTEwNjIsNyArMTA2Miw3IEBAIHN0YXRpYyB2b2lk
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3dyYXBfbGVmdChFd2tfVGlsZWRfQmFja2lu
Z19TdG9yZV9EYXRhCiAgICAgICAgIHVuc2lnbmVkIGludCBpLCBjID0gbGFzdF9jb2wgLSBjb3Vu
dCArIDE7CiAKICAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyssIGMrKywgb3ggKz0g
dHcpIHsKLSAgICAgICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0OworICAg
ICAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSogaXQ7CiAgICAgICAgICAgICBp
dCA9IEVJTkFfSU5MSVNUX0NPTlRBSU5FUl9HRVQoKml0ciwgRXdrX1RpbGVkX0JhY2tpbmdfU3Rv
cmVfSXRlbSk7CiAgICAgICAgICAgICAqaXRyID0gZWluYV9pbmxpc3RfZGVtb3RlKCppdHIsICpp
dHIpOwogCkBAIC0xMDg4LDE0ICsxMDg4LDE0IEBAIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV92aWV3X3dyYXBfbGVmdChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhCiAg
KgogICogQHBhcmFtIGNvdW50IHRoZSBudW1iZXIgb2YgdGltZXMgdG8gcmVwZWF0IHRoZSBwcm9j
ZXNzLgogICovCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld193cmFw
X3JpZ2h0KEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIEV2YXNfQ29vcmQgeCwg
RXZhc19Db29yZCB5LCB1bnNpZ25lZCBpbnQgY291bnQpCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfdmlld193cmFwX3JpZ2h0KEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0Rh
dGEqIHByaXYsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5LCB1bnNpZ25lZCBpbnQgY291bnQp
CiB7CiAgICAgdW5zaWduZWQgaW50IHI7Ci0gICAgRXZhc19Db29yZCB0dyA9IHByaXYtPnZpZXcu
dGlsZS53OwotICAgIEV2YXNfQ29vcmQgdGggPSBwcml2LT52aWV3LnRpbGUuaDsKKyAgICBFdmFz
X0Nvb3JkIHR3ID0gcHJpdi0+dmlldy50aWxlLndpZHRoOworICAgIEV2YXNfQ29vcmQgdGggPSBw
cml2LT52aWV3LnRpbGUuaGVpZ2h0OwogICAgIEV2YXNfQ29vcmQgb2ZmX3ggPSBwcml2LT52aWV3
Lm9mZnNldC5iYXNlLnggLSBjb3VudCAqIHR3OwogICAgIEV2YXNfQ29vcmQgb3kgPSB5ICsgcHJp
di0+dmlldy5vZmZzZXQuYmFzZS55OwotICAgIEVpbmFfSW5saXN0ICoqaXRyLCAqKml0cl9lbmQ7
CisgICAgRWluYV9Jbmxpc3QqKiBpdHIsICoqIGl0cl9lbmQ7CiAKICAgICBpdHIgPSBwcml2LT52
aWV3Lml0ZW1zOwogICAgIGl0cl9lbmQgPSBpdHIgKyBwcml2LT52aWV3LnJvd3M7CkBAIC0xMTA4
LDcgKzExMDgsNyBAQCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld193
cmFwX3JpZ2h0KEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdAogICAgICAgICB1bnNpZ25lZCBp
bnQgaSwgYyA9IGNvdW50IC0gMTsKIAogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkr
KywgYy0tLCBveCAtPSB0dykgewotICAgICAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVf
SXRlbSAqaXQ7CisgICAgICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKiBpdDsK
ICAgICAgICAgICAgIGl0ID0gRUlOQV9JTkxJU1RfQ09OVEFJTkVSX0dFVCgoKml0ciktPmxhc3Qs
IEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0pOwogICAgICAgICAgICAgKml0ciA9IGVpbmFf
aW5saXN0X3Byb21vdGUoKml0ciwgKCppdHIpLT5sYXN0KTsKIApAQCAtMTEyMSwxNiArMTEyMSwx
NiBAQCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld193cmFwX3JpZ2h0
KEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdAogICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2Uu
eCA9IG9mZl94OwogfQogCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmll
d19yZWZpbGwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgRXZhc19Db29yZCB4
LCBFdmFzX0Nvb3JkIHksIGludCBzdGVwX3gsIGludCBzdGVwX3kpCitzdGF0aWMgdm9pZCBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19yZWZpbGwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVf
RGF0YSogcHJpdiwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHksIGludCBzdGVwWCwgaW50IHN0
ZXBZKQogewotICAgIEVpbmFfSW5saXN0ICoqaXRyLCAqKml0cl9lbmQ7CisgICAgRWluYV9Jbmxp
c3QqKiBpdHIsICoqaXRyX2VuZDsKICAgICBFdmFzX0Nvb3JkIGJhc2Vfb3gsIG95LCB0dywgdGg7
CiAgICAgdW5zaWduZWQgaW50IHI7CiAKICAgICBldmFzX29iamVjdF9tb3ZlKHByaXYtPmJhc2Uu
Y2xpcHBlciwgeCwgeSk7CiAKLSAgICB0dyA9IHByaXYtPnZpZXcudGlsZS53OwotICAgIHRoID0g
cHJpdi0+dmlldy50aWxlLmg7CisgICAgdHcgPSBwcml2LT52aWV3LnRpbGUud2lkdGg7CisgICAg
dGggPSBwcml2LT52aWV3LnRpbGUuaGVpZ2h0OwogCiAgICAgYmFzZV9veCA9IHggKyBwcml2LT52
aWV3Lm9mZnNldC5iYXNlLng7CiAgICAgb3kgPSB5ICsgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55
OwpAQCAtMTEzOSwxMSArMTEzOSwxMSBAQCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfdmlld19yZWZpbGwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcAogICAgIGl0
cl9lbmQgPSBpdHIgKyBwcml2LT52aWV3LnJvd3M7CiAgICAgciA9IDA7CiAKLSAgICBwcml2LT5t
b2RlbC5iYXNlLmNvbCAtPSBzdGVwX3g7Ci0gICAgcHJpdi0+bW9kZWwuYmFzZS5yb3cgLT0gc3Rl
cF95OworICAgIHByaXYtPm1vZGVsLmJhc2UuY29sIC09IHN0ZXBYOworICAgIHByaXYtPm1vZGVs
LmJhc2Uucm93IC09IHN0ZXBZOwogCiAgICAgZm9yICg7IGl0ciA8IGl0cl9lbmQ7IGl0cisrLCBy
KyspIHsKLSAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQ7CisgICAgICAg
IEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0qIGl0OwogICAgICAgICBFdmFzX0Nvb3JkIG94
ID0gYmFzZV9veDsKICAgICAgICAgdW5zaWduZWQgaW50IGMgPSAwOwogICAgICAgICBFSU5BX0lO
TElTVF9GT1JFQUNIKCppdHIsIGl0KSB7CkBAIC0xMTU2LDE1ICsxMTU2LDE1IEBAIHN0YXRpYyB2
b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3JlZmlsbChFd2tfVGlsZWRfQmFja2lu
Z19TdG9yZV9EYXRhICpwCiAgICAgfQogfQogCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfdmlld19wb3NfYXBwbHkoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJp
diwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHkpCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfdmlld19wb3NfYXBwbHkoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSog
cHJpdiwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHkpCiB7Ci0gICAgRWluYV9Jbmxpc3QgKipp
dHIsICoqaXRyX2VuZDsKKyAgICBFaW5hX0lubGlzdCoqIGl0ciwgKippdHJfZW5kOwogICAgIEV2
YXNfQ29vcmQgYmFzZV9veCwgb3ksIHR3LCB0aDsKIAogICAgIGV2YXNfb2JqZWN0X21vdmUocHJp
di0+YmFzZS5jbGlwcGVyLCB4LCB5KTsKIAotICAgIHR3ID0gcHJpdi0+dmlldy50aWxlLnc7Ci0g
ICAgdGggPSBwcml2LT52aWV3LnRpbGUuaDsKKyAgICB0dyA9IHByaXYtPnZpZXcudGlsZS53aWR0
aDsKKyAgICB0aCA9IHByaXYtPnZpZXcudGlsZS5oZWlnaHQ7CiAKICAgICBiYXNlX294ID0geCAr
IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueDsKICAgICBveSA9IHkgKyBwcml2LT52aWV3Lm9mZnNl
dC5iYXNlLnk7CkBAIC0xMTcyLDcgKzExNzIsNyBAQCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfdmlld19wb3NfYXBwbHkoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YQog
ICAgIGl0ciA9IHByaXYtPnZpZXcuaXRlbXM7CiAgICAgaXRyX2VuZCA9IGl0ciArIHByaXYtPnZp
ZXcucm93czsKICAgICBmb3IgKDsgaXRyIDwgaXRyX2VuZDsgaXRyKyspIHsKLSAgICAgICAgRXdr
X1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQ7CisgICAgICAgIEV3a19UaWxlZF9CYWNraW5n
X1N0b3JlX0l0ZW0qIGl0OwogICAgICAgICBFdmFzX0Nvb3JkIG94ID0gYmFzZV9veDsKICAgICAg
ICAgRUlOQV9JTkxJU1RfRk9SRUFDSCgqaXRyLCBpdCkgewogICAgICAgICAgICAgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX2l0ZW1fbW92ZShpdCwgb3gsIG95KTsKQEAgLTExODIsNyArMTE4Miw3
IEBAIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3Bvc19hcHBseShF
d2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhCiAgICAgfQogfQogCi1zdGF0aWMgdm9pZCBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfY2FsY3VsYXRlX29mZnNldF9mb3JjZShFd2tfVGls
ZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2KQorc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNr
aW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZV9vZmZzZXRfZm9yY2UoRXdrX1RpbGVkX0JhY2tpbmdf
U3RvcmVfRGF0YSogcHJpdikKIHsKICAgICBFdmFzX0Nvb3JkIGR4ID0gcHJpdi0+dmlldy5vZmZz
ZXQuY3VyLnggLSBwcml2LT52aWV3Lm9mZnNldC5vbGQueDsKICAgICBFdmFzX0Nvb3JkIGR5ID0g
cHJpdi0+dmlldy5vZmZzZXQuY3VyLnkgLSBwcml2LT52aWV3Lm9mZnNldC5vbGQueTsKQEAgLTEx
OTIsOCArMTE5Miw4IEBAIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFy
dF9jYWxjdWxhdGVfb2Zmc2V0X2ZvcmNlKEV3a19UaWxlZF9CYWNrCiAgICAgSU5GKCJvPSVwLCBv
ZmZzZXQ6ICUrNGQsICUrNGQgKCUrNGQsICUrNGQpIiwKICAgICAgICAgcHJpdi0+c2VsZiwgZHgs
IGR5LCBwcml2LT52aWV3Lm9mZnNldC5jdXIueCwgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkpOwog
Ci0gICAgdHcgPSBwcml2LT52aWV3LnRpbGUudzsKLSAgICB0aCA9IHByaXYtPnZpZXcudGlsZS5o
OworICAgIHR3ID0gcHJpdi0+dmlldy50aWxlLndpZHRoOworICAgIHRoID0gcHJpdi0+dmlldy50
aWxlLmhlaWdodDsKIAogICAgIGxvbmcgbmV3X2NvbCA9IC1wcml2LT52aWV3Lm9mZnNldC5jdXIu
eCAvIHR3OwogICAgIHN0ZXBfeCA9IHByaXYtPm1vZGVsLmJhc2UuY29sIC0gbmV3X2NvbDsKQEAg
LTEyMTQsNyArMTIxNCw3IEBAIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9z
bWFydF9jYWxjdWxhdGVfb2Zmc2V0X2ZvcmNlKEV3a19UaWxlZF9CYWNrCiAgICAgICAgIChwcml2
LCBwcml2LT52aWV3LngsIHByaXYtPnZpZXcueSwgc3RlcF94LCBzdGVwX3kpOwogfQogCi1zdGF0
aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfY2FsY3VsYXRlX29mZnNldChF
d2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29v
cmQgeSkKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9jYWxjdWxh
dGVfb2Zmc2V0KEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYsIEV2YXNfQ29vcmQg
eCwgRXZhc19Db29yZCB5KQogewogICAgIEV2YXNfQ29vcmQgZHggPSBwcml2LT52aWV3Lm9mZnNl
dC5jdXIueCAtIHByaXYtPnZpZXcub2Zmc2V0Lm9sZC54OwogICAgIEV2YXNfQ29vcmQgZHkgPSBw
cml2LT52aWV3Lm9mZnNldC5jdXIueSAtIHByaXYtPnZpZXcub2Zmc2V0Lm9sZC55OwpAQCAtMTIy
Nyw4ICsxMjI3LDggQEAgc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0
X2NhbGN1bGF0ZV9vZmZzZXQoRXdrX1RpbGVkX0JhY2tpbmdfU3QKICAgICBpZiAoIWR4ICYmICFk
eSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgdHcgPSBwcml2LT52aWV3LnRpbGUudzsKLSAgICB0
aCA9IHByaXYtPnZpZXcudGlsZS5oOworICAgIHR3ID0gcHJpdi0+dmlldy50aWxlLndpZHRoOwor
ICAgIHRoID0gcHJpdi0+dmlldy50aWxlLmhlaWdodDsKIAogICAgIGxvbmcgbmV3X2NvbCA9IC1w
cml2LT52aWV3Lm9mZnNldC5jdXIueCAvIHR3OwogICAgIHN0ZXBfeCA9IHByaXYtPm1vZGVsLmJh
c2UuY29sIC0gbmV3X2NvbDsKQEAgLTEyNzEsNyArMTI3MSw3IEBAIHN0YXRpYyB2b2lkIF9ld2tf
dGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9jYWxjdWxhdGVfb2Zmc2V0KEV3a19UaWxlZF9CYWNr
aW5nX1N0CiAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcG9zX2FwcGx5KHByaXYs
IHgsIHkpOwogfQogCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRf
Y2FsY3VsYXRlX3BvcyhFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFdmFzX0Nv
b3JkIHgsIEV2YXNfQ29vcmQgeSkKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV9zbWFydF9jYWxjdWxhdGVfcG9zKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYs
IEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5KQogewogICAgIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV92aWV3X3Bvc19hcHBseShwcml2LCB4LCB5KTsKICAgICBwcml2LT52aWV3LnggPSB4OwpA
QCAtMTI4MiwxMCArMTI4MiwxMCBAQCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfc21hcnRfY2FsY3VsYXRlX3BvcyhFd2tfVGlsZWRfQmFja2luZ19TdG9yZQogICAgICAgICBw
cml2LT52aWV3Lm9mZnNldC5jdXIueSArIHByaXYtPnZpZXcueSk7CiB9CiAKLXN0YXRpYyB2b2lk
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9maWxsX3JlbmRlcmVycyhFd2tfVGlsZWRfQmFja2lu
Z19TdG9yZV9EYXRhICpwcml2KQorc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X2ZpbGxfcmVuZGVyZXJzKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYpCiB7Ci0g
ICAgRWluYV9Jbmxpc3QgKml0OwotICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0
ZW07CisgICAgRWluYV9Jbmxpc3QqIGl0OworICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0
ZW0qIGl0ZW07CiAgICAgaW50IGksIGo7CiAKICAgICBmb3IgKGkgPSAwOyBpIDwgcHJpdi0+dmll
dy5yb3dzOyBpKyspIHsKQEAgLTEyOTYsMTQgKzEyOTYsMTQgQEAgc3RhdGljIHZvaWQgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX2ZpbGxfcmVuZGVyZXJzKEV3a19UaWxlZF9CYWNraW5nX1N0b3Jl
X0RhdGEKICAgICB9CiB9CiAKLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9z
bWFydF9jYWxjdWxhdGUoRXZhc19PYmplY3QgKm8pCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfc21hcnRfY2FsY3VsYXRlKEV2YXNfT2JqZWN0KiBld2tUaWxlKQogewogICAg
IEV2YXNfQ29vcmQgeCwgeSwgdywgaDsKIAotICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldChv
LCAmeCwgJnksICZ3LCAmaCk7Ci0gICAgREJHKCJvPSVwIGF0ICVkLCVkICsgJWR4JWQiLCBvLCB4
LCB5LCB3LCBoKTsKKyAgICBldmFzX29iamVjdF9nZW9tZXRyeV9nZXQoZXdrVGlsZSwgJngsICZ5
LCAmdywgJmgpOworICAgIERCRygibz0lcCBhdCAlZCwlZCArICVkeCVkIiwgZXdrVGlsZSwgeCwg
eSwgdywgaCk7CiAKLSAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2KTsKKyAgICBQ
UklWX0RBVEFfR0VUX09SX1JFVFVSTihld2tUaWxlLCBwcml2KTsKIAogICAgIHByaXYtPmNoYW5n
ZWQuYW55ID0gRUlOQV9GQUxTRTsKIApAQCAtMTMxMiw4ICsxMzEyLDggQEAgc3RhdGljIHZvaWQg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZShFdmFzX09iamVjdCAqbykK
ICAgICBpZiAoIXByaXYtPnJlbmRlci5zdXNwZW5kICYmIHByaXYtPmNoYW5nZWQubW9kZWwpIHsK
ICAgICAgICAgdW5zaWduZWQgbG9uZyBjb2xzLCByb3dzOwogCi0gICAgICAgIGNvbHMgPSBwcml2
LT5tb2RlbC53aWR0aCAvIHByaXYtPnZpZXcudGlsZS53ICsgMTsKLSAgICAgICAgcm93cyA9IHBy
aXYtPm1vZGVsLmhlaWdodCAvIHByaXYtPnZpZXcudGlsZS5oICsgMTsKKyAgICAgICAgY29scyA9
IHByaXYtPm1vZGVsLndpZHRoIC8gcHJpdi0+dmlldy50aWxlLndpZHRoICsgMTsKKyAgICAgICAg
cm93cyA9IHByaXYtPm1vZGVsLmhlaWdodCAvIHByaXYtPnZpZXcudGlsZS5oZWlnaHQgKyAxOwog
CiAgICAgICAgIHByaXYtPm1vZGVsLm9sZC5jb2xzID0gcHJpdi0+bW9kZWwuY3VyLmNvbHM7CiAg
ICAgICAgIHByaXYtPm1vZGVsLm9sZC5yb3dzID0gcHJpdi0+bW9kZWwuY3VyLnJvd3M7CkBAIC0x
MzQ4LDggKzEzNDgsOCBAQCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21h
cnRfY2FsY3VsYXRlKEV2YXNfT2JqZWN0ICpvKQogICAgICAgICByZWN0LmggPSBwcml2LT5tb2Rl
bC5oZWlnaHQ7CiAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9maWxsX3JlbmRlcmVy
cyhwcml2KTsKICAgICAgICAgZXdrX3RpbGVfbWF0cml4X3Jlc2l6ZShwcml2LT5tb2RlbC5tYXRy
aXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBwcml2LT5tb2RlbC5jdXIuY29scywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHByaXYtPm1vZGVsLmN1ci5yb3dzKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwcml2LT5tb2RlbC5jdXIuY29scywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwcml2LT5tb2RlbC5jdXIucm93cyk7CiAgICAgICAgIHByaXYt
PmNoYW5nZWQubW9kZWwgPSBFSU5BX0ZBTFNFOwogICAgICAgICBldmFzX29iamVjdF9yZXNpemUo
cHJpdi0+Y29udGVudHNfY2xpcHBlciwgcHJpdi0+bW9kZWwud2lkdGgsIHByaXYtPm1vZGVsLmhl
aWdodCk7CiAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9jYWxjdWxhdGVf
b2Zmc2V0X2ZvcmNlKHByaXYpOwpAQCAtMTM1Nyw3ICsxMzU3LDcgQEAgc3RhdGljIHZvaWQgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZShFdmFzX09iamVjdCAqbykKICAg
ICAgICAgLyogTWFrZSBzdXJlIHdlIGRvIG5vdCBtaXNzIGFueSBpbXBvcnRhbnQgcmVwYWludCBi
eQogICAgICAgICAgKiByZXBhaW50aW5nIHRoZSB3aG9sZSB2aWV3cG9ydCAqLwogICAgICAgICBj
b25zdCBFaW5hX1JlY3RhbmdsZSByID0KLSAgICAgICAgICAgIHsgMCwgMCwgcHJpdi0+bW9kZWwu
d2lkdGgsIHByaXYtPm1vZGVsLmhlaWdodCB9OworICAgICAgICB7IDAsIDAsIHByaXYtPm1vZGVs
LndpZHRoLCBwcml2LT5tb2RlbC5oZWlnaHQgfTsKICAgICAgICAgZXdrX3RpbGVfbWF0cml4X3Vw
ZGF0ZShwcml2LT5tb2RlbC5tYXRyaXgsICZyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHByaXYtPnZpZXcudGlsZS56b29tKTsKICAgICB9CkBAIC0xMzY3LDE5ICsxMzY3LDE5IEBA
IHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9jYWxjdWxhdGUoRXZh
c19PYmplY3QgKm8pCiAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3VwZGF0ZXNfcHJvY2Vz
cyhwcml2KTsKIAogICAgIGlmIChwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggPiAwCi0gICAgICAg
IHx8IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCA8PSAtIHByaXYtPnZpZXcudGlsZS53CisgICAg
ICAgIHx8IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCA8PSAtIHByaXYtPnZpZXcudGlsZS53aWR0
aAogICAgICAgICB8fCBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgPiAwCi0gICAgICAgIHx8IHBy
aXYtPnZpZXcub2Zmc2V0LmJhc2UueSA8PSAtIHByaXYtPnZpZXcudGlsZS5oKQorICAgICAgICB8
fCBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgPD0gLSBwcml2LT52aWV3LnRpbGUuaGVpZ2h0KQog
ICAgICAgICBFUlIoImluY29ycmVjdCBiYXNlIG9mZnNldCAlKzRkLCUrNGQsIHRpbGU9JWR4JWQs
IGN1cj0lKzRkLCUrNGRcbiIsCiAgICAgICAgICAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLngs
IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSwKLSAgICAgICAgICAgIHByaXYtPnZpZXcudGlsZS53
LCBwcml2LT52aWV3LnRpbGUuaCwKKyAgICAgICAgICAgIHByaXYtPnZpZXcudGlsZS53aWR0aCwg
cHJpdi0+dmlldy50aWxlLmhlaWdodCwKICAgICAgICAgICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1
ci54LCBwcml2LT52aWV3Lm9mZnNldC5jdXIueSk7CiAKIH0KIAotRXZhc19PYmplY3QgKmV3a190
aWxlZF9iYWNraW5nX3N0b3JlX2FkZChFdmFzICplKQorRXZhc19PYmplY3QqIGV3a190aWxlZF9i
YWNraW5nX3N0b3JlX2FkZChFdmFzKiBjYW52YXMpCiB7Ci0gICAgc3RhdGljIEV2YXNfU21hcnQg
KnNtYXJ0ID0gMDsKKyAgICBzdGF0aWMgRXZhc19TbWFydCogc21hcnQgPSAwOwogCiAgICAgaWYg
KF9ld2tfdGlsZWRfbG9nX2RvbSA8IDApCiAgICAgICAgIF9ld2tfdGlsZWRfbG9nX2RvbSA9IGVp
bmFfbG9nX2RvbWFpbl9yZWdpc3RlcigiRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmUiLCAwKTsKQEAg
LTE0MDIsMzQgKzE0MDIsMzQgQEAgRXZhc19PYmplY3QgKmV3a190aWxlZF9iYWNraW5nX3N0b3Jl
X2FkZChFdmFzICplKQogICAgICAgICBzbWFydCA9IGV2YXNfc21hcnRfY2xhc3NfbmV3KCZzYyk7
CiAgICAgfQogCi0gICAgcmV0dXJuIGV2YXNfb2JqZWN0X3NtYXJ0X2FkZChlLCBzbWFydCk7Cisg
ICAgcmV0dXJuIGV2YXNfb2JqZWN0X3NtYXJ0X2FkZChjYW52YXMsIHNtYXJ0KTsKIH0KIAotdm9p
ZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9yZW5kZXJfY2Jfc2V0KEV2YXNfT2JqZWN0ICpvLCBF
aW5hX0Jvb2wgKCpjYikodm9pZCAqZGF0YSwgRXdrX1RpbGUgKnQsIGNvbnN0IEVpbmFfUmVjdGFu
Z2xlICphcmVhKSwgY29uc3Qgdm9pZCAqZGF0YSkKK3ZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfcmVuZGVyX2NiX3NldChFdmFzX09iamVjdCogZXdrVGlsZSwgRWluYV9Cb29sICgqY2FsbGJh
Y2spKHZvaWQqIGRhdGEsIEV3a19UaWxlKiB0aWxlLCBjb25zdCBFaW5hX1JlY3RhbmdsZSogYXJl
YSksIGNvbnN0IHZvaWQqIGRhdGEpCiB7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4o
Y2IpOwotICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYpOwotICAgIHByaXYtPnJl
bmRlci5jYiA9IGNiOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGNhbGxiYWNrKTsK
KyAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihld2tUaWxlLCBwcml2KTsKKyAgICBwcml2LT5y
ZW5kZXIuY2IgPSBjYWxsYmFjazsKICAgICBwcml2LT5yZW5kZXIuZGF0YSA9ICh2b2lkKilkYXRh
OwogfQogCi1Fd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKmV3a190aWxlZF9iYWNraW5nX3N0b3JlX3Rp
bGVfdW51c2VkX2NhY2hlX2dldChjb25zdCBFdmFzX09iamVjdCAqbykKK0V3a19UaWxlX1VudXNl
ZF9DYWNoZSogZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV91bnVzZWRfY2FjaGVfZ2V0KGNv
bnN0IEV2YXNfT2JqZWN0KiBld2tUaWxlKQogewotICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJO
KG8sIHByaXYsIDApOworICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKGV3a1RpbGUsIHByaXYs
IDApOwogICAgIHJldHVybiBld2tfdGlsZV9tYXRyaXhfdW51c2VkX2NhY2hlX2dldChwcml2LT5t
b2RlbC5tYXRyaXgpOwogfQogCi12b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfdW51
c2VkX2NhY2hlX3NldChFdmFzX09iamVjdCAqbywgRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMp
Cit2b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfdW51c2VkX2NhY2hlX3NldChFdmFz
X09iamVjdCogZXdrVGlsZSwgRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0aWxlVW51c2VkQ2FjaGUp
CiB7Ci0gICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdik7CisgICAgUFJJVl9EQVRB
X0dFVF9PUl9SRVRVUk4oZXdrVGlsZSwgcHJpdik7CiAKLSAgICBpZiAoZXdrX3RpbGVfbWF0cml4
X3VudXNlZF9jYWNoZV9nZXQocHJpdi0+bW9kZWwubWF0cml4KSA9PSB0dWMpCisgICAgaWYgKGV3
a190aWxlX21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCkgPT0gdGls
ZVVudXNlZENhY2hlKQogICAgICAgICByZXR1cm47CiAKLSAgICBfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfbW9kZWxfbWF0cml4X2NyZWF0ZShwcml2LCB0dWMpOworICAgIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9tb2RlbF9tYXRyaXhfY3JlYXRlKHByaXYsIHRpbGVVbnVzZWRDYWNoZSk7CiB9
CiAKLXN0YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3Njcm9sbF9mdWxs
X29mZnNldF9zZXRfaW50ZXJuYWwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwg
RXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHkpCitzdGF0aWMgRWluYV9Cb29sIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV9zY3JvbGxfZnVsbF9vZmZzZXRfc2V0X2ludGVybmFsKEV3a19UaWxlZF9C
YWNraW5nX1N0b3JlX0RhdGEqIHByaXYsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5KQogewog
ICAgIC8qIFRPRE86IGNoZWNrIG9mZnNldCBnbyBvdXQgb2YgYm91bmRzLCBjbGFtcCAqLwogICAg
IGlmIChwcml2LT5yZW5kZXIuZGlzYWJsZWQpCkBAIC0xNDQ0LDMzICsxNDQ0LDMzIEBAIHN0YXRp
YyBFaW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3Njcm9sbF9mdWxsX29mZnNldF9z
ZXRfaW50ZXJuYWwoRXdrX1RpCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotRWluYV9Cb29s
IGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3Njcm9sbF9mdWxsX29mZnNldF9zZXQoRXZhc19PYmpl
Y3QgKm8sIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5KQorRWluYV9Cb29sIGV3a190aWxlZF9i
YWNraW5nX3N0b3JlX3Njcm9sbF9mdWxsX29mZnNldF9zZXQoRXZhc19PYmplY3QqIGV3a1RpbGUs
IEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5KQogewotICAgIERCRygibz0lcCwgeD0lZCwgeT0l
ZCIsIG8sIHgsIHkpOworICAgIERCRygibz0lcCwgeD0lZCwgeT0lZCIsIGV3a1RpbGUsIHgsIHkp
OwogCi0gICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdiwgRUlOQV9GQUxTRSk7Cisg
ICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4oZXdrVGlsZSwgcHJpdiwgRUlOQV9GQUxTRSk7CiAg
ICAgaWYgKHggPT0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggJiYgeSA9PSBwcml2LT52aWV3Lm9m
ZnNldC5jdXIueSkKICAgICAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIAogICAgIHJldHVybiBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfc2Nyb2xsX2Z1bGxfb2Zmc2V0X3NldF9pbnRlcm5hbChwcml2
LCB4LCB5KTsKIH0KIAotRWluYV9Cb29sIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3Njcm9sbF9m
dWxsX29mZnNldF9hZGQoRXZhc19PYmplY3QgKm8sIEV2YXNfQ29vcmQgZHgsIEV2YXNfQ29vcmQg
ZHkpCitFaW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc2Nyb2xsX2Z1bGxfb2Zmc2V0
X2FkZChFdmFzX09iamVjdCogZXdrVGlsZSwgRXZhc19Db29yZCBkeCwgRXZhc19Db29yZCBkeSkK
IHsKLSAgICBEQkcoIm89JXAsIGR4PSVkLCBkeT0lZCIsIG8sIGR4LCBkeSk7CisgICAgREJHKCJv
PSVwLCBkeD0lZCwgZHk9JWQiLCBld2tUaWxlLCBkeCwgZHkpOwogCi0gICAgUFJJVl9EQVRBX0dF
VF9PUl9SRVRVUk4obywgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgUFJJVl9EQVRBX0dFVF9PUl9S
RVRVUk4oZXdrVGlsZSwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgaWYgKCFkeCAmJiAhZHkpCiAg
ICAgICAgIHJldHVybiBFSU5BX1RSVUU7CiAKICAgICByZXR1cm4gX2V3a190aWxlZF9iYWNraW5n
X3N0b3JlX3Njcm9sbF9mdWxsX29mZnNldF9zZXRfaW50ZXJuYWwKLSAgICAgICAgKHByaXYsIHBy
aXYtPnZpZXcub2Zmc2V0LmN1ci54ICsgZHgsIHByaXYtPnZpZXcub2Zmc2V0LmN1ci55ICsgZHkp
OworICAgICAgICAgICAgICAgKHByaXYsIHByaXYtPnZpZXcub2Zmc2V0LmN1ci54ICsgZHgsIHBy
aXYtPnZpZXcub2Zmc2V0LmN1ci55ICsgZHkpOwogfQogCi1zdGF0aWMgRWluYV9Cb29sIF9ld2tf
dGlsZWRfYmFja2luZ19zdG9yZV96b29tX3NldF9pbnRlcm5hbChFd2tfVGlsZWRfQmFja2luZ19T
dG9yZV9EYXRhICpwcml2LCBmbG9hdCAqem9vbSwgRXZhc19Db29yZCBjeCwgRXZhc19Db29yZCBj
eSwgRXZhc19Db29yZCAqb2ZmeCwgRXZhc19Db29yZCAqb2ZmeSkKK3N0YXRpYyBFaW5hX0Jvb2wg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3pvb21fc2V0X2ludGVybmFsKEV3a19UaWxlZF9CYWNr
aW5nX1N0b3JlX0RhdGEqIHByaXYsIGZsb2F0KiB6b29tLCBFdmFzX0Nvb3JkIGN1cnJlbnRYLCBF
dmFzX0Nvb3JkIGN1cnJlbnRZLCBFdmFzX0Nvb3JkKiBvZmZzZXRYLCBFdmFzX0Nvb3JkKiBvZmZz
ZXRZKQogewotICAgICpvZmZ4ID0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLng7Ci0gICAgKm9mZnkg
PSBwcml2LT52aWV3Lm9mZnNldC5jdXIueTsKKyAgICAqb2Zmc2V0WCA9IHByaXYtPnZpZXcub2Zm
c2V0LmN1ci54OworICAgICpvZmZzZXRZID0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLnk7CiAKICAg
ICBpZiAoZmFic2YocHJpdi0+dmlldy50aWxlLnpvb20gLSAqem9vbSkgPCBaT09NX1NURVBfTUlO
KSB7CiAgICAgICAgIERCRygiaWdub3JlZCBhcyB6b29tIGRpZmZlcmVuY2UgaXMgPCAlZjogJWYi
LApAQCAtMTQ4MSw0MiArMTQ4MSw0MiBAQCBzdGF0aWMgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV96b29tX3NldF9pbnRlcm5hbChFd2tfVGlsZWRfQmFja2luZ19TdAogICAgIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfZmx1c2gocHJpdik7CiAg
ICAgRXZhc19Db29yZCB0dywgdGg7CiAKLSAgICAqem9vbSA9IFJPVU5ERURfWk9PTShwcml2LT52
aWV3LnRpbGUudywgKnpvb20pOworICAgICp6b29tID0gUk9VTkRFRF9aT09NKHByaXYtPnZpZXcu
dGlsZS53aWR0aCwgKnpvb20pOwogCi0gICAgdHcgPSBwcml2LT52aWV3LnRpbGUudzsKLSAgICB0
aCA9IHByaXYtPnZpZXcudGlsZS5oOworICAgIHR3ID0gcHJpdi0+dmlldy50aWxlLndpZHRoOwor
ICAgIHRoID0gcHJpdi0+dmlldy50aWxlLmhlaWdodDsKIAogICAgIGZsb2F0IHNjYWxlID0gKnpv
b20gLyBwcml2LT52aWV3LnRpbGUuem9vbTsKIAogICAgIHByaXYtPnZpZXcudGlsZS56b29tID0g
Knpvb207Ci0gICAgLy8gdG9kbzogY2hlY2sgY3ggWzAsIHddLi4uCi0gICAgcHJpdi0+dmlldy5v
ZmZzZXQuem9vbV9jZW50ZXIueCA9IGN4OwotICAgIHByaXYtPnZpZXcub2Zmc2V0Lnpvb21fY2Vu
dGVyLnkgPSBjeTsKKyAgICAvLyB0b2RvOiBjaGVjayBjdXJyZW50WCBbMCwgd10uLi4KKyAgICBw
cml2LT52aWV3Lm9mZnNldC56b29tX2NlbnRlci54ID0gY3VycmVudFg7CisgICAgcHJpdi0+dmll
dy5vZmZzZXQuem9vbV9jZW50ZXIueSA9IGN1cnJlbnRZOwogCiAKLSAgICBpZiAoIXByaXYtPnZp
ZXcudyB8fCAhcHJpdi0+dmlldy5oKSB7CisgICAgaWYgKCFwcml2LT52aWV3LndpZHRoIHx8ICFw
cml2LT52aWV3LmhlaWdodCkgewogICAgICAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggPSAw
OwogICAgICAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgPSAwOwogICAgICAgICByZXR1cm4g
RUlOQV9UUlVFOwogICAgIH0KLSAgICBFaW5hX0lubGlzdCAqKml0ciwgKippdHJfZW5kOwotICAg
IEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0OworICAgIEVpbmFfSW5saXN0KiogaXRy
LCAqKml0cl9lbmQ7CisgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSogaXQ7CiAKLSAg
ICBFdmFzX0Nvb3JkIG5ld194ID0gY3ggKyAocHJpdi0+dmlldy5vZmZzZXQuY3VyLnggLSBjeCkg
KiBzY2FsZTsKLSAgICBFdmFzX0Nvb3JkIG5ld195ID0gY3kgKyAocHJpdi0+dmlldy5vZmZzZXQu
Y3VyLnkgLSBjeSkgKiBzY2FsZTsKKyAgICBFdmFzX0Nvb3JkIG5ld194ID0gY3VycmVudFggKyAo
cHJpdi0+dmlldy5vZmZzZXQuY3VyLnggLSBjdXJyZW50WCkgKiBzY2FsZTsKKyAgICBFdmFzX0Nv
b3JkIG5ld195ID0gY3VycmVudFkgKyAocHJpdi0+dmlldy5vZmZzZXQuY3VyLnkgLSBjdXJyZW50
WSkgKiBzY2FsZTsKIAotICAgIEV2YXNfQ29vcmQgbW9kZWxfd2lkdGggPSBwcml2LT5tb2RlbC53
aWR0aCAqIHNjYWxlOwotICAgIEV2YXNfQ29vcmQgbW9kZWxfaGVpZ2h0ID0gcHJpdi0+bW9kZWwu
aGVpZ2h0ICogc2NhbGU7CisgICAgRXZhc19Db29yZCBtb2RlbF93ID0gcHJpdi0+bW9kZWwud2lk
dGggKiBzY2FsZTsKKyAgICBFdmFzX0Nvb3JkIG1vZGVsX2ggPSBwcml2LT5tb2RlbC5oZWlnaHQg
KiBzY2FsZTsKIAotICAgIGlmIChtb2RlbF93aWR0aCA8IHByaXYtPnZpZXcudyB8fCBuZXdfeCA+
PSAwKQorICAgIGlmIChtb2RlbF93IDwgcHJpdi0+dmlldy53aWR0aCB8fCBuZXdfeCA+PSAwKQog
ICAgICAgICBuZXdfeCA9IDA7Ci0gICAgZWxzZSBpZiAoLW5ld194ICsgcHJpdi0+dmlldy53ID49
IG1vZGVsX3dpZHRoKQotICAgICAgICBuZXdfeCA9IC1tb2RlbF93aWR0aCArIHByaXYtPnZpZXcu
dzsKKyAgICBlbHNlIGlmICgtbmV3X3ggKyBwcml2LT52aWV3LndpZHRoID49IG1vZGVsX3cpCisg
ICAgICAgIG5ld194ID0gLW1vZGVsX3cgKyBwcml2LT52aWV3LndpZHRoOwogCi0gICAgaWYgKG1v
ZGVsX2hlaWdodCA8IHByaXYtPnZpZXcuaCB8fCBuZXdfeSA+PSAwKQorICAgIGlmIChtb2RlbF9o
IDwgcHJpdi0+dmlldy5oZWlnaHQgfHwgbmV3X3kgPj0gMCkKICAgICAgICAgbmV3X3kgPSAwOwot
ICAgIGVsc2UgaWYgKC1uZXdfeSArIHByaXYtPnZpZXcuaCA+PSBtb2RlbF9oZWlnaHQpCi0gICAg
ICAgIG5ld195ID0gLW1vZGVsX2hlaWdodCArIHByaXYtPnZpZXcuaDsKKyAgICBlbHNlIGlmICgt
bmV3X3kgKyBwcml2LT52aWV3LmhlaWdodCA+PSBtb2RlbF9oKQorICAgICAgICBuZXdfeSA9IC1t
b2RlbF9oICsgcHJpdi0+dmlldy5oZWlnaHQ7CiAKICAgICBFdmFzX0Nvb3JkIGJ4ID0gbmV3X3gg
JSB0dzsKICAgICBFdmFzX0Nvb3JkIGJ5ID0gbmV3X3kgJSB0aDsKQEAgLTE1MzQsOCArMTUzNCw4
IEBAIHN0YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3pvb21fc2V0X2lu
dGVybmFsKEV3a19UaWxlZF9CYWNraW5nX1N0CiAKICAgICBwcml2LT52aWV3Lm9mZnNldC5vbGQu
eCA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci54OwogICAgIHByaXYtPnZpZXcub2Zmc2V0Lm9sZC55
ID0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLnk7Ci0gICAgKm9mZnggPSBwcml2LT52aWV3Lm9mZnNl
dC5jdXIueDsKLSAgICAqb2ZmeSA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci55OworICAgICpvZmZz
ZXRYID0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLng7CisgICAgKm9mZnNldFkgPSBwcml2LT52aWV3
Lm9mZnNldC5jdXIueTsKIAogICAgIGV2YXNfb2JqZWN0X21vdmUoCiAgICAgICAgIHByaXYtPmNv
bnRlbnRzX2NsaXBwZXIsCkBAIC0xNTUyLDcgKzE1NTIsNyBAQCBzdGF0aWMgRWluYV9Cb29sIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV96b29tX3NldF9pbnRlcm5hbChFd2tfVGlsZWRfQmFja2lu
Z19TdAogCiAgICAgZm9yICg7IGl0ciA8IGl0cl9lbmQ7IGl0cisrKSB7CiAgICAgICAgIEV2YXNf
Q29vcmQgb3ggPSBiYXNlX294OwotICAgICAgICBFaW5hX0lubGlzdCAqbHN0ID0gKml0cjsKKyAg
ICAgICAgRWluYV9Jbmxpc3QqIGxzdCA9ICppdHI7CiAKICAgICAgICAgRUlOQV9JTkxJU1RfRk9S
RUFDSChsc3QsIGl0KSB7CiAgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRl
bV9tb3ZlKGl0LCBveCwgb3kpOwpAQCAtMTU2NSw0MiArMTU2NSw0MiBAQCBzdGF0aWMgRWluYV9C
b29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV96b29tX3NldF9pbnRlcm5hbChFd2tfVGlsZWRf
QmFja2luZ19TdAogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLUVpbmFfQm9vbCBld2tfdGls
ZWRfYmFja2luZ19zdG9yZV96b29tX3NldChFdmFzX09iamVjdCAqbywgZmxvYXQgKnpvb20sIEV2
YXNfQ29vcmQgY3gsIEV2YXNfQ29vcmQgY3ksIEV2YXNfQ29vcmQgKm9mZngsIEV2YXNfQ29vcmQg
Km9mZnkpCitFaW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfem9vbV9zZXQoRXZhc19P
YmplY3QqIGV3a1RpbGUsIGZsb2F0KiB6b29tLCBFdmFzX0Nvb3JkIGN1cnJlbnRYLCBFdmFzX0Nv
b3JkIGN1cnJlbnRZLCBFdmFzX0Nvb3JkKiBvZmZzZXRYLCBFdmFzX0Nvb3JkKiBvZmZzZXRZKQog
ewotICAgIERCRygibz0lcCwgem9vbT0lZiIsIG8sIChkb3VibGUpKnpvb20pOworICAgIERCRygi
bz0lcCwgem9vbT0lZiIsIGV3a1RpbGUsICp6b29tKTsKIAotICAgIFBSSVZfREFUQV9HRVRfT1Jf
UkVUVVJOKG8sIHByaXYsIEVJTkFfRkFMU0UpOworICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJO
KGV3a1RpbGUsIHByaXYsIEVJTkFfRkFMU0UpOwogCi0gICAgcmV0dXJuIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV96b29tX3NldF9pbnRlcm5hbChwcml2LCB6b29tLCBjeCwgY3ksIG9mZngsIG9m
ZnkpOworICAgIHJldHVybiBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfem9vbV9zZXRfaW50ZXJu
YWwocHJpdiwgem9vbSwgY3VycmVudFgsIGN1cnJlbnRZLCBvZmZzZXRYLCBvZmZzZXRZKTsKIH0K
IAotRWluYV9Cb29sIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3pvb21fd2Vha19zZXQoRXZhc19P
YmplY3QgKm8sIGZsb2F0IHpvb20sIEV2YXNfQ29vcmQgY3gsIEV2YXNfQ29vcmQgY3kpCitFaW5h
X0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfem9vbV93ZWFrX3NldChFdmFzX09iamVjdCog
ZXdrVGlsZSwgZmxvYXQgem9vbSwgRXZhc19Db29yZCBjdXJyZW50WCwgRXZhc19Db29yZCBjdXJy
ZW50WSkKIHsKLSAgICBEQkcoIm89JXAsIHpvb209JWYiLCBvLCAoZG91YmxlKXpvb20pOwotICAg
IFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYsIEVJTkFfRkFMU0UpOwotICAgIGlmICgh
cHJpdi0+dmlldy53IHx8ICFwcml2LT52aWV3LmgpCisgICAgREJHKCJvPSVwLCB6b29tPSVmIiwg
ZXdrVGlsZSwgem9vbSk7CisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4oZXdrVGlsZSwgcHJp
diwgRUlOQV9GQUxTRSk7CisgICAgaWYgKCFwcml2LT52aWV3LndpZHRoIHx8ICFwcml2LT52aWV3
LmhlaWdodCkKICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7Ci0gICAgRWluYV9Jbmxpc3QgKipp
dHIsICoqaXRyX2VuZDsKLSAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdDsKKyAg
ICBFaW5hX0lubGlzdCoqIGl0ciwgKiogaXRyX2VuZDsKKyAgICBFd2tfVGlsZWRfQmFja2luZ19T
dG9yZV9JdGVtKiBpdDsKICAgICBFdmFzX0Nvb3JkIHR3LCB0aDsKICAgICBFaW5hX0Jvb2wgcmVj
YWxjID0gRUlOQV9GQUxTRTsKIAogICAgIGZsb2F0IHNjYWxlID0gem9vbSAvIHByaXYtPnZpZXcu
dGlsZS56b29tOwogCi0gICAgdHcgPSBUSUxFX1NJWkVfQVRfWk9PTShwcml2LT52aWV3LnRpbGUu
dywgc2NhbGUpOwotICAgIHNjYWxlID0gVElMRV9aT09NX0FUX1NJWkUodHcsIHByaXYtPnZpZXcu
dGlsZS53KTsKLSAgICB0aCA9IFRJTEVfU0laRV9BVF9aT09NKHByaXYtPnZpZXcudGlsZS5oLCBz
Y2FsZSk7CisgICAgdHcgPSBUSUxFX1NJWkVfQVRfWk9PTShwcml2LT52aWV3LnRpbGUud2lkdGgs
IHNjYWxlKTsKKyAgICBzY2FsZSA9IFRJTEVfWk9PTV9BVF9TSVpFKHR3LCBwcml2LT52aWV3LnRp
bGUud2lkdGgpOworICAgIHRoID0gVElMRV9TSVpFX0FUX1pPT00ocHJpdi0+dmlldy50aWxlLmhl
aWdodCwgc2NhbGUpOwogICAgIHpvb20gPSBzY2FsZSAqIHByaXYtPnZpZXcudGlsZS56b29tOwog
Ci0gICAgRXZhc19Db29yZCBtb2RlbF93aWR0aCA9IHByaXYtPm1vZGVsLndpZHRoICogc2NhbGU7
Ci0gICAgRXZhc19Db29yZCBtb2RlbF9oZWlnaHQgPSBwcml2LT5tb2RlbC5oZWlnaHQgKiBzY2Fs
ZTsKKyAgICBFdmFzX0Nvb3JkIG1vZGVsX3cgPSBwcml2LT5tb2RlbC53aWR0aCAqIHNjYWxlOwor
ICAgIEV2YXNfQ29vcmQgbW9kZWxfaCA9IHByaXYtPm1vZGVsLmhlaWdodCAqIHNjYWxlOwogCi0g
ICAgZXZhc19vYmplY3RfcmVzaXplKHByaXYtPmNvbnRlbnRzX2NsaXBwZXIsIG1vZGVsX3dpZHRo
LCBtb2RlbF9oZWlnaHQpOworICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShwcml2LT5jb250ZW50c19j
bGlwcGVyLCBtb2RlbF93LCBtb2RlbF9oKTsKIAotICAgIGludCB2cm93cyA9IGNlaWwoKGZsb2F0
KXByaXYtPnZpZXcuaCAvIChmbG9hdCl0aCkgKyAxOwotICAgIGludCB2Y29scyA9IGNlaWwoKGZs
b2F0KXByaXYtPnZpZXcudyAvIChmbG9hdCl0dykgKyAxOwotICAgIEV2YXNfQ29vcmQgbmV3X3gg
PSBjeCArIChwcml2LT52aWV3Lm9mZnNldC5jdXIueCAtIGN4KSAqIHNjYWxlOwotICAgIEV2YXNf
Q29vcmQgbmV3X3kgPSBjeSArIChwcml2LT52aWV3Lm9mZnNldC5jdXIueSAtIGN5KSAqIHNjYWxl
OworICAgIGludCB2cm93cyA9IHN0YXRpY19jYXN0PGludD4oY2VpbChzdGF0aWNfY2FzdDxmbG9h
dD4ocHJpdi0+dmlldy5oZWlnaHQgLyB0aCkpICsgMSk7CisgICAgaW50IHZjb2xzID0gc3RhdGlj
X2Nhc3Q8aW50PihjZWlsKHN0YXRpY19jYXN0PGZsb2F0Pihwcml2LT52aWV3LndpZHRoIC8gdHcp
KSArIDEpOworICAgIEV2YXNfQ29vcmQgbmV3X3ggPSBjdXJyZW50WCArIChwcml2LT52aWV3Lm9m
ZnNldC5jdXIueCAtIGN1cnJlbnRYKSAqIHNjYWxlOworICAgIEV2YXNfQ29vcmQgbmV3X3kgPSBj
dXJyZW50WSArIChwcml2LT52aWV3Lm9mZnNldC5jdXIueSAtIGN1cnJlbnRZKSAqIHNjYWxlOwog
ICAgIEV2YXNfQ29vcmQgYnggPSBuZXdfeCAlIHR3OwogICAgIEV2YXNfQ29vcmQgYnkgPSBuZXdf
eSAlIHRoOwogICAgIHVuc2lnbmVkIGxvbmcgYmFzZV9yb3cgPSAtbmV3X3kgLyB0aDsKQEAgLTE2
MTYsOSArMTYxNiw5IEBAIEVpbmFfQm9vbCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV96b29tX3dl
YWtfc2V0KEV2YXNfT2JqZWN0ICpvLCBmbG9hdCB6b29tLCBFdmFzCiAgICAgICAgIHJlY2FsYyA9
IEVJTkFfVFJVRTsKIAogICAgIGlmIChyZWNhbGMpIHsKLSAgICAgICAgRXZhc19Db29yZCB3LCBo
OwotICAgICAgICBldmFzX29iamVjdF9nZW9tZXRyeV9nZXQobywgMCwgMCwgJncsICZoKTsKLSAg
ICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3JlY2FsY19yZW5kZXJlcnMocHJpdiwgdywg
aCwgdHcsIHRoKTsKKyAgICAgICAgRXZhc19Db29yZCB3aWR0aCwgaGVpZ2h0OworICAgICAgICBl
dmFzX29iamVjdF9nZW9tZXRyeV9nZXQoZXdrVGlsZSwgMCwgMCwgJndpZHRoLCAmaGVpZ2h0KTsK
KyAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3JlY2FsY19yZW5kZXJlcnMocHJpdiwg
d2lkdGgsIGhlaWdodCwgdHcsIHRoKTsKICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X2ZpbGxfcmVuZGVyZXJzKHByaXYpOwogICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
dXBkYXRlc19wcm9jZXNzKHByaXYpOwogICAgIH0KQEAgLTE2MzUsNyArMTYzNSw3IEBAIEVpbmFf
Qm9vbCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV96b29tX3dlYWtfc2V0KEV2YXNfT2JqZWN0ICpv
LCBmbG9hdCB6b29tLCBFdmFzCiAKICAgICBmb3IgKDsgaXRyIDwgaXRyX2VuZDsgaXRyKyspIHsK
ICAgICAgICAgRXZhc19Db29yZCBveCA9IGJhc2Vfb3g7Ci0gICAgICAgIEVpbmFfSW5saXN0ICps
c3QgPSAqaXRyOworICAgICAgICBFaW5hX0lubGlzdCogbHN0ID0gKml0cjsKIAogICAgICAgICBF
SU5BX0lOTElTVF9GT1JFQUNIKGxzdCwgaXQpIHsKICAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9pdGVtX21vdmUoaXQsIG94LCBveSk7CkBAIC0xNjQ4LDM2ICsxNjQ4LDM2IEBA
IEVpbmFfQm9vbCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV96b29tX3dlYWtfc2V0KEV2YXNfT2Jq
ZWN0ICpvLCBmbG9hdCB6b29tLCBFdmFzCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotdm9p
ZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9maXhfb2Zmc2V0cyhFdmFzX09iamVjdCAqbywgRXZh
c19Db29yZCB3LCBFdmFzX0Nvb3JkIGgpCit2b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX2Zp
eF9vZmZzZXRzKEV2YXNfT2JqZWN0KiBld2tUaWxlLCBFdmFzX0Nvb3JkIHdpZHRoLCBFdmFzX0Nv
b3JkIGhlaWdodCkKIHsKLSAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2KTsKLSAg
ICBFaW5hX0lubGlzdCAqKml0ciwgKippdHJfZW5kOwotICAgIEV3a19UaWxlZF9CYWNraW5nX1N0
b3JlX0l0ZW0gKml0OworICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKGV3a1RpbGUsIHByaXYp
OworICAgIEVpbmFfSW5saXN0KiogaXRyLCAqKml0cl9lbmQ7CisgICAgRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfSXRlbSogaXQ7CiAgICAgRXZhc19Db29yZCBuZXdfeCA9IHByaXYtPnZpZXcub2Zm
c2V0LmN1ci54OwogICAgIEV2YXNfQ29vcmQgbmV3X3kgPSBwcml2LT52aWV3Lm9mZnNldC5jdXIu
eTsKICAgICBFdmFzX0Nvb3JkIGJ4ID0gcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54OwogICAgIEV2
YXNfQ29vcmQgYnkgPSBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnk7Ci0gICAgRXZhc19Db29yZCB0
dyA9IHByaXYtPnZpZXcudGlsZS53OwotICAgIEV2YXNfQ29vcmQgdGggPSBwcml2LT52aWV3LnRp
bGUuaDsKKyAgICBFdmFzX0Nvb3JkIHR3ID0gcHJpdi0+dmlldy50aWxlLndpZHRoOworICAgIEV2
YXNfQ29vcmQgdGggPSBwcml2LT52aWV3LnRpbGUuaGVpZ2h0OwogCi0gICAgaWYgKC1uZXdfeCA+
IHcpIHsKLSAgICAgICAgbmV3X3ggPSAtdzsKKyAgICBpZiAoLW5ld194ID4gd2lkdGgpIHsKKyAg
ICAgICAgbmV3X3ggPSAtd2lkdGg7CiAgICAgICAgIGJ4ID0gbmV3X3ggJSB0dzsKICAgICAgICAg
cHJpdi0+bW9kZWwuYmFzZS5jb2wgPSAtbmV3X3ggLyB0dzsKICAgICB9CiAKLSAgICBpZiAoLW5l
d195ID4gaCkgewotICAgICAgICBuZXdfeSA9IC1oOworICAgIGlmICgtbmV3X3kgPiBoZWlnaHQp
IHsKKyAgICAgICAgbmV3X3kgPSAtaGVpZ2h0OwogICAgICAgICBieSA9IG5ld195ICUgdGg7CiAg
ICAgICAgIHByaXYtPm1vZGVsLmJhc2Uucm93ID0gLW5ld195IC8gdGg7CiAgICAgfQogCi0gICAg
aWYgKGJ4ID49IDAgfHwgYnggPD0gLTIgKiBwcml2LT52aWV3LnRpbGUudykgeworICAgIGlmIChi
eCA+PSAwIHx8IGJ4IDw9IC0yICogcHJpdi0+dmlldy50aWxlLndpZHRoKSB7CiAgICAgICAgIGJ4
ID0gbmV3X3ggJSB0dzsKICAgICAgICAgcHJpdi0+bW9kZWwuYmFzZS5jb2wgPSAtbmV3X3ggLyB0
dzsKICAgICB9CiAKLSAgICBpZiAoYnkgPj0gMCB8fCBieSA8PSAtMiAqIHByaXYtPnZpZXcudGls
ZS5oKSB7CisgICAgaWYgKGJ5ID49IDAgfHwgYnkgPD0gLTIgKiBwcml2LT52aWV3LnRpbGUuaGVp
Z2h0KSB7CiAgICAgICAgIGJ5ID0gbmV3X3kgJSB0aDsKICAgICAgICAgcHJpdi0+bW9kZWwuYmFz
ZS5yb3cgPSAtbmV3X3kgLyB0aDsKICAgICB9CkBAIC0xNzAwLDcgKzE3MDAsNyBAQCB2b2lkIGV3
a190aWxlZF9iYWNraW5nX3N0b3JlX2ZpeF9vZmZzZXRzKEV2YXNfT2JqZWN0ICpvLCBFdmFzX0Nv
b3JkIHcsIEV2YXNfQ29vcgogCiAgICAgZm9yICg7IGl0ciA8IGl0cl9lbmQ7IGl0cisrKSB7CiAg
ICAgICAgIEV2YXNfQ29vcmQgb3ggPSBiYXNlX294OwotICAgICAgICBFaW5hX0lubGlzdCAqbHN0
ID0gKml0cjsKKyAgICAgICAgRWluYV9Jbmxpc3QqIGxzdCA9ICppdHI7CiAKICAgICAgICAgRUlO
QV9JTkxJU1RfRk9SRUFDSChsc3QsIGl0KSB7CiAgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfaXRlbV9tb3ZlKGl0LCBveCwgb3kpOwpAQCAtMTcxMSwyNyArMTcxMSwyNyBAQCB2
b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX2ZpeF9vZmZzZXRzKEV2YXNfT2JqZWN0ICpvLCBF
dmFzX0Nvb3JkIHcsIEV2YXNfQ29vcgogICAgIH0KIH0KIAotdm9pZCBld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV96b29tX3dlYWtfc21vb3RoX3NjYWxlX3NldChFdmFzX09iamVjdCAqbywgRWluYV9C
b29sIHNtb290aF9zY2FsZSkKK3ZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfem9vbV93ZWFr
X3Ntb290aF9zY2FsZV9zZXQoRXZhc19PYmplY3QqIGV3a1RpbGUsIEVpbmFfQm9vbCBzbW9vdGhT
Y2FsZSkKIHsKLSAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2KTsKLSAgICBFaW5h
X0lubGlzdCAqKml0ciwgKippdHJfZW5kOworICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKGV3
a1RpbGUsIHByaXYpOworICAgIEVpbmFfSW5saXN0KiogaXRyLCAqKml0cl9lbmQ7CiAKICAgICBp
dHIgPSBwcml2LT52aWV3Lml0ZW1zOwogICAgIGl0cl9lbmQgPSBpdHIgKyBwcml2LT52aWV3LnJv
d3M7Ci0gICAgcHJpdi0+dmlldy50aWxlLnpvb21fd2Vha19zbW9vdGhfc2NhbGUgPSBzbW9vdGhf
c2NhbGU7CisgICAgcHJpdi0+dmlldy50aWxlLnpvb21fd2Vha19zbW9vdGhfc2NhbGUgPSBzbW9v
dGhTY2FsZTsKIAogICAgIGZvciAoOyBpdHI8IGl0cl9lbmQ7IGl0cisrKSB7Ci0gICAgICAgIEV3
a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0OworICAgICAgICBFd2tfVGlsZWRfQmFja2lu
Z19TdG9yZV9JdGVtKiBpdDsKICAgICAgICAgRUlOQV9JTkxJU1RfRk9SRUFDSCgqaXRyLCBpdCkK
ICAgICAgICAgICAgIGlmIChpdC0+dGlsZSkKICAgICAgICAgICAgICAgICBfZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfaXRlbV9zbW9vdGhfc2NhbGVfc2V0Ci0gICAgICAgICAgICAgICAgICAgIChp
dCwgc21vb3RoX3NjYWxlKTsKKyAgICAgICAgICAgICAgICAgICAgKGl0LCBzbW9vdGhTY2FsZSk7
CiAgICAgfQogfQogCi1FaW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRlKEV2
YXNfT2JqZWN0ICpvLCBjb25zdCBFaW5hX1JlY3RhbmdsZSAqdXBkYXRlKQorRWluYV9Cb29sIGV3
a190aWxlZF9iYWNraW5nX3N0b3JlX3VwZGF0ZShFdmFzX09iamVjdCogZXdrVGlsZSwgY29uc3Qg
RWluYV9SZWN0YW5nbGUqIHVwZGF0ZSkKIHsKLSAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihv
LCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihld2tUaWxl
LCBwcml2LCBFSU5BX0ZBTFNFKTsKIAogICAgIGlmIChwcml2LT5yZW5kZXIuZGlzYWJsZWQpCiAg
ICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwpAQCAtMTc0MCwzNiArMTc0MCwzNiBAQCBFaW5hX0Jv
b2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRlKEV2YXNfT2JqZWN0ICpvLCBjb25zdCBF
aW5hX1JlY3RhbmdsZSAqdQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaXYt
PnZpZXcudGlsZS56b29tKTsKIH0KIAotdm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV91cGRh
dGVzX3Byb2Nlc3NfcHJlX3NldChFdmFzX09iamVjdCAqbywgdm9pZCAqKCpjYikodm9pZCAqZGF0
YSwgRXZhc19PYmplY3QgKm8pLCBjb25zdCB2b2lkICpkYXRhKQordm9pZCBld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV91cGRhdGVzX3Byb2Nlc3NfcHJlX3NldChFdmFzX09iamVjdCogZXdrVGlsZSwg
dm9pZCogKCpjYWxsYmFjaykodm9pZCogZGF0YSwgRXZhc19PYmplY3QgKmV3a1RpbGUpLCBjb25z
dCB2b2lkKiBkYXRhKQogewotICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYpOwot
ICAgIHByaXYtPnByb2Nlc3MucHJlX2NiID0gY2I7CisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRV
Uk4oZXdrVGlsZSwgcHJpdik7CisgICAgcHJpdi0+cHJvY2Vzcy5wcmVfY2IgPSBjYWxsYmFjazsK
ICAgICBwcml2LT5wcm9jZXNzLnByZV9kYXRhID0gKHZvaWQqKWRhdGE7CiB9CiAKLXZvaWQgZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRlc19wcm9jZXNzX3Bvc3Rfc2V0KEV2YXNfT2JqZWN0
ICpvLCB2b2lkICooKmNiKSh2b2lkICpkYXRhLCB2b2lkICpwcmVfZGF0YSwgRXZhc19PYmplY3Qg
Km8pLCBjb25zdCB2b2lkICpkYXRhKQordm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV91cGRh
dGVzX3Byb2Nlc3NfcG9zdF9zZXQoRXZhc19PYmplY3QqIGV3a1RpbGUsIHZvaWQqICgqY2FsbGJh
Y2spKHZvaWQqIGRhdGEsIHZvaWQqIHByZV9kYXRhLCBFdmFzX09iamVjdCAqZXdrVGlsZSksIGNv
bnN0IHZvaWQqIGRhdGEpCiB7Ci0gICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdik7
Ci0gICAgcHJpdi0+cHJvY2Vzcy5wb3N0X2NiID0gY2I7CisgICAgUFJJVl9EQVRBX0dFVF9PUl9S
RVRVUk4oZXdrVGlsZSwgcHJpdik7CisgICAgcHJpdi0+cHJvY2Vzcy5wb3N0X2NiID0gY2FsbGJh
Y2s7CiAgICAgcHJpdi0+cHJvY2Vzcy5wb3N0X2RhdGEgPSAodm9pZCopZGF0YTsKIH0KIAotdm9p
ZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV91cGRhdGVzX3Byb2Nlc3MoRXZhc19PYmplY3QgKm8p
Cit2b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3VwZGF0ZXNfcHJvY2VzcyhFdmFzX09iamVj
dCogZXdrVGlsZSkKIHsKLSAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2KTsKKyAg
ICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihld2tUaWxlLCBwcml2KTsKICAgICBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfdXBkYXRlc19wcm9jZXNzKHByaXYpOwogfQogCi12b2lkIGV3a190aWxl
ZF9iYWNraW5nX3N0b3JlX3VwZGF0ZXNfY2xlYXIoRXZhc19PYmplY3QgKm8pCit2b2lkIGV3a190
aWxlZF9iYWNraW5nX3N0b3JlX3VwZGF0ZXNfY2xlYXIoRXZhc19PYmplY3QqIGV3a1RpbGUpCiB7
Ci0gICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdik7CisgICAgUFJJVl9EQVRBX0dF
VF9PUl9SRVRVUk4oZXdrVGlsZSwgcHJpdik7CiAKICAgICBld2tfdGlsZV9tYXRyaXhfdXBkYXRl
c19jbGVhcihwcml2LT5tb2RlbC5tYXRyaXgpOwogfQogCi12b2lkIGV3a190aWxlZF9iYWNraW5n
X3N0b3JlX2NvbnRlbnRzX3Jlc2l6ZShFdmFzX09iamVjdCAqbywgRXZhc19Db29yZCB3aWR0aCwg
RXZhc19Db29yZCBoZWlnaHQpCit2b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX2NvbnRlbnRz
X3Jlc2l6ZShFdmFzX09iamVjdCogZXdrVGlsZSwgRXZhc19Db29yZCB3aWR0aCwgRXZhc19Db29y
ZCBoZWlnaHQpCiB7Ci0gICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdik7CisgICAg
UFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4oZXdrVGlsZSwgcHJpdik7CiAKICAgICBpZiAod2lkdGgg
PT0gcHJpdi0+bW9kZWwud2lkdGggJiYgaGVpZ2h0ID09IHByaXYtPm1vZGVsLmhlaWdodCkKICAg
ICAgICAgcmV0dXJuOwpAQCAtMTc3OCwyMiArMTc3OCwyMiBAQCB2b2lkIGV3a190aWxlZF9iYWNr
aW5nX3N0b3JlX2NvbnRlbnRzX3Jlc2l6ZShFdmFzX09iamVjdCAqbywgRXZhc19Db29yZCB3aWR0
aCwgRQogICAgIHByaXYtPm1vZGVsLmhlaWdodCA9IGhlaWdodDsKICAgICBwcml2LT5jaGFuZ2Vk
Lm1vZGVsID0gRUlOQV9UUlVFOwogCi0gICAgREJHKCJ3aWR0aCxoZWlnaHQ9JWQsICVkIiwgd2lk
dGgsIGhlaWdodCk7CisgICAgREJHKCJ3LGg9JWQsICVkIiwgd2lkdGgsIGhlaWdodCk7CiAgICAg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2NoYW5nZWQocHJpdik7CiB9CiAKLXZvaWQgZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfZGlzYWJsZWRfdXBkYXRlX3NldChFdmFzX09iamVjdCAqbywgRWlu
YV9Cb29sIHZhbHVlKQordm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9kaXNhYmxlZF91cGRh
dGVfc2V0KEV2YXNfT2JqZWN0KiBld2tUaWxlLCBFaW5hX0Jvb2wgdmFsdWUpCiB7Ci0gICAgUFJJ
Vl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdik7CisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRV
Uk4oZXdrVGlsZSwgcHJpdik7CiAKICAgICBpZiAodmFsdWUgIT0gcHJpdi0+cmVuZGVyLmRpc2Fi
bGVkKQogICAgICAgICBwcml2LT5yZW5kZXIuZGlzYWJsZWQgPSB2YWx1ZTsKIH0KIAotdm9pZCBl
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9mbHVzaChFdmFzX09iamVjdCAqbykKK3ZvaWQgZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfZmx1c2goRXZhc19PYmplY3QqIGV3a1RpbGUpCiB7Ci0gICAgUFJJ
Vl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdik7Ci0gICAgRXdrX1RpbGVfVW51c2VkX0NhY2hl
ICp0dWMgPSAwOworICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKGV3a1RpbGUsIHByaXYpOwor
ICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSogdHVjID0gMDsKIAogICAgIHByaXYtPnZpZXcub2Zm
c2V0LmN1ci54ID0gMDsKICAgICBwcml2LT52aWV3Lm9mZnNldC5jdXIueSA9IDA7CkBAIC0xODI1
LDIxICsxODI1LDIxIEBAIHZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZmx1c2goRXZhc19P
YmplY3QgKm8pCiAjZW5kaWYKIH0KIAotRWluYV9Cb29sIGV3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3ByZV9yZW5kZXJfcmVnaW9uKEV2YXNfT2JqZWN0ICpvLCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29v
cmQgeSwgRXZhc19Db29yZCB3LCBFdmFzX0Nvb3JkIGgsIGZsb2F0IHpvb20pCitFaW5hX0Jvb2wg
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZWdpb24oRXZhc19PYmplY3QqIGV3
a1RpbGUsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5LCBFdmFzX0Nvb3JkIHdpZHRoLCBFdmFz
X0Nvb3JkIGhlaWdodCwgZmxvYXQgem9vbSkKIHsKLSAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVS
TihvLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihld2tU
aWxlLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBFaW5hX1RpbGVfR3JpZF9TbGljZXIgc2xpY2Vy
OwotICAgIGNvbnN0IEVpbmFfVGlsZV9HcmlkX0luZm8gKmluZm87CisgICAgY29uc3QgRWluYV9U
aWxlX0dyaWRfSW5mbyogaW5mbzsKICAgICBFdmFzX0Nvb3JkIHR3LCB0aDsKLSAgICBFd2tfVGls
ZV9VbnVzZWRfQ2FjaGUgKnR1YzsKKyAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHR1YzsKIAot
ICAgIHR3ID0gcHJpdi0+dmlldy50aWxlLnc7Ci0gICAgdGggPSBwcml2LT52aWV3LnRpbGUuaDsK
LSAgICB6b29tID0gUk9VTkRFRF9aT09NKHByaXYtPnZpZXcudGlsZS53LCB6b29tKTsKKyAgICB0
dyA9IHByaXYtPnZpZXcudGlsZS53aWR0aDsKKyAgICB0aCA9IHByaXYtPnZpZXcudGlsZS5oZWln
aHQ7CisgICAgem9vbSA9IFJPVU5ERURfWk9PTShwcml2LT52aWV3LnRpbGUud2lkdGgsIHpvb20p
OwogCi0gICAgaWYgKCFlaW5hX3RpbGVfZ3JpZF9zbGljZXJfc2V0dXAoJnNsaWNlciwgeCwgeSwg
dywgaCwgdHcsIHRoKSkgeworICAgIGlmICghZWluYV90aWxlX2dyaWRfc2xpY2VyX3NldHVwKCZz
bGljZXIsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHR3LCB0aCkpIHsKICAgICAgICAgRVJSKCJjb3Vs
ZCBub3Qgc2V0dXAgZ3JpZCBzbGljZXIgZm9yICVkLCVkKyVkeCVkIHRpbGU9JWR4JWQiLAotICAg
ICAgICAgICAgeCwgeSwgdywgaCwgdHcsIHRoKTsKKyAgICAgICAgICAgIHgsIHksIHdpZHRoLCBo
ZWlnaHQsIHR3LCB0aCk7CiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwogICAgIH0KIApAQCAt
MTg1MywyOSArMTg1MywyOSBAQCBFaW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJl
X3JlbmRlcl9yZWdpb24oRXZhc19PYmplY3QgKm8sIEV2YXNfQ29vcmQgeAogICAgIF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9pdGVtX3Byb2Nlc3NfaWRsZXJfc3RhcnQocHJpdik7CiAKICAgICB0
dWMgPSBld2tfdGlsZV9tYXRyaXhfdW51c2VkX2NhY2hlX2dldChwcml2LT5tb2RlbC5tYXRyaXgp
OwotICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9sb2NrX2FyZWEodHVjLCB4LCB5LCB3LCBoLCB6
b29tKTsKKyAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfbG9ja19hcmVhKHR1YywgeCwgeSwgd2lk
dGgsIGhlaWdodCwgem9vbSk7CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotRWluYV9Cb29s
IGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVsYXRpdmVfcmFkaXVzKEV2YXNf
T2JqZWN0ICpvLCB1bnNpZ25lZCBpbnQgbiwgZmxvYXQgem9vbSkKK0VpbmFfQm9vbCBld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlbGF0aXZlX3JhZGl1cyhFdmFzX09iamVjdCog
ZXdrVGlsZSwgdW5zaWduZWQgaW50IG4sIGZsb2F0IHpvb20pCiB7Ci0gICAgUFJJVl9EQVRBX0dF
VF9PUl9SRVRVUk4obywgcHJpdiwgRUlOQV9GQUxTRSk7Ci0gICAgdW5zaWduZWQgbG9uZyBzdGFy
dF9yb3csIGVuZF9yb3csIHN0YXJ0X2NvbCwgZW5kX2NvbCwgaSwgaiwgdywgaDsKLSAgICBFd2tf
VGlsZV9VbnVzZWRfQ2FjaGUgKnR1YzsKKyAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihld2tU
aWxlLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICB1bnNpZ25lZCBsb25nIHN0YXJ0X3JvdywgZW5k
X3Jvdywgc3RhcnRfY29sLCBlbmRfY29sLCBpLCBqLCB3aWR0aCwgaGVpZ2h0OworICAgIEV3a19U
aWxlX1VudXNlZF9DYWNoZSogdHVjOwogCiAgICAgSU5GKCJwcml2LT5tb2RlbC5iYXNlLnJvdyA9
JWxkLCBuPSV1IHByaXYtPnZpZXcucm93cz0lbHUiLAotICAgICAgICAgICAgcHJpdi0+bW9kZWwu
YmFzZS5yb3csIG4sIHByaXYtPnZpZXcucm93cyk7CisgICAgICAgIHByaXYtPm1vZGVsLmJhc2Uu
cm93LCBuLCBwcml2LT52aWV3LnJvd3MpOwogICAgIHN0YXJ0X3JvdyA9IChsb25nKXByaXYtPm1v
ZGVsLmJhc2Uucm93IC0gbjsKICAgICBzdGFydF9jb2wgPSAobG9uZylwcml2LT5tb2RlbC5iYXNl
LmNvbCAtIG47CiAgICAgZW5kX3JvdyA9IHN0ZDo6bWluKHByaXYtPm1vZGVsLmN1ci5yb3dzIC0g
MSwKLSAgICAgICAgICAgICAgICAgIHByaXYtPm1vZGVsLmJhc2Uucm93ICsgcHJpdi0+dmlldy5y
b3dzICsgbiAtIDEpOworICAgICAgICAgICAgICAgICAgICAgICBwcml2LT5tb2RlbC5iYXNlLnJv
dyArIHByaXYtPnZpZXcucm93cyArIG4gLSAxKTsKICAgICBlbmRfY29sID0gc3RkOjptaW4ocHJp
di0+bW9kZWwuY3VyLmNvbHMgLSAxLAotICAgICAgICAgICAgICAgICAgcHJpdi0+bW9kZWwuYmFz
ZS5jb2wgKyBwcml2LT52aWV3LmNvbHMgKyBuIC0gMSk7CisgICAgICAgICAgICAgICAgICAgICAg
IHByaXYtPm1vZGVsLmJhc2UuY29sICsgcHJpdi0+dmlldy5jb2xzICsgbiAtIDEpOwogCiAgICAg
SU5GKCJzdGFydF9yb3c9JWx1LCBlbmRfcm93PSVsdSwgc3RhcnRfY29sPSVsdSwgZW5kX2NvbD0l
bHUiLAotICAgICAgICAgc3RhcnRfcm93LCBlbmRfcm93LCBzdGFydF9jb2wsIGVuZF9jb2wpOwor
ICAgICAgICBzdGFydF9yb3csIGVuZF9yb3csIHN0YXJ0X2NvbCwgZW5kX2NvbCk7CiAKLSAgICB6
b29tID0gUk9VTkRFRF9aT09NKHByaXYtPnZpZXcudGlsZS53LCB6b29tKTsKKyAgICB6b29tID0g
Uk9VTkRFRF9aT09NKHByaXYtPnZpZXcudGlsZS53aWR0aCwgem9vbSk7CiAKICAgICBmb3IgKGkg
PSBzdGFydF9yb3c7IGkgPD0gZW5kX3JvdzsgaSsrKQogICAgICAgICBmb3IgKGogPSBzdGFydF9j
b2w7IGogPD0gZW5kX2NvbDsgaisrKQpAQCAtMTg4NiwxOSArMTg4NiwxOSBAQCBzdGFydF9wcm9j
ZXNzaW5nOgogICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Byb2Nlc3NfaWRsZXJf
c3RhcnQocHJpdik7CiAKICAgICB0dWMgPSBld2tfdGlsZV9tYXRyaXhfdW51c2VkX2NhY2hlX2dl
dChwcml2LT5tb2RlbC5tYXRyaXgpOwotICAgIGggPSAoZW5kX3JvdyAtIHN0YXJ0X3JvdyArIDEp
ICogVElMRV9TSVpFX0FUX1pPT00ocHJpdi0+dmlldy50aWxlLmgsIHpvb20pOwotICAgIHcgPSAo
ZW5kX2NvbCAtIHN0YXJ0X2NvbCArIDEpICogVElMRV9TSVpFX0FUX1pPT00ocHJpdi0+dmlldy50
aWxlLncsIHpvb20pOworICAgIGhlaWdodCA9IChlbmRfcm93IC0gc3RhcnRfcm93ICsgMSkgKiBU
SUxFX1NJWkVfQVRfWk9PTShwcml2LT52aWV3LnRpbGUuaGVpZ2h0LCB6b29tKTsKKyAgICB3aWR0
aCA9IChlbmRfY29sIC0gc3RhcnRfY29sICsgMSkgKiBUSUxFX1NJWkVfQVRfWk9PTShwcml2LT52
aWV3LnRpbGUud2lkdGgsIHpvb20pOwogICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9sb2NrX2Fy
ZWEodHVjLAotICAgICAgICAgICAgc3RhcnRfY29sICogVElMRV9TSVpFX0FUX1pPT00ocHJpdi0+
dmlldy50aWxlLncsIHpvb20pLAotICAgICAgICAgICAgc3RhcnRfcm93ICogVElMRV9TSVpFX0FU
X1pPT00ocHJpdi0+dmlldy50aWxlLmgsIHpvb20pLCB3LCBoLCB6b29tKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2NvbCAqIFRJTEVfU0laRV9BVF9aT09NKHBy
aXYtPnZpZXcudGlsZS53aWR0aCwgem9vbSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGFydF9yb3cgKiBUSUxFX1NJWkVfQVRfWk9PTShwcml2LT52aWV3LnRpbGUuaGVp
Z2h0LCB6b29tKSwgd2lkdGgsIGhlaWdodCwgem9vbSk7CiAKICAgICByZXR1cm4gRUlOQV9UUlVF
OwogfQogCi12b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfY2FuY2VsKEV2
YXNfT2JqZWN0ICpvKQordm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX2Nh
bmNlbChFdmFzX09iamVjdCogZXdrVGlsZSkKIHsKLSAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVS
TihvLCBwcml2KTsKLSAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YzsKKyAgICBQUklWX0RB
VEFfR0VUX09SX1JFVFVSTihld2tUaWxlLCBwcml2KTsKKyAgICBFd2tfVGlsZV9VbnVzZWRfQ2Fj
aGUqIHR1YzsKIAogICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVl
c3RfY2xlYXIocHJpdik7CiAKQEAgLTE5MDYsMTUgKzE5MDYsMTUgQEAgdm9pZCBld2tfdGlsZWRf
YmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX2NhbmNlbChFdmFzX09iamVjdCAqbykKICAgICBld2tf
dGlsZV91bnVzZWRfY2FjaGVfdW5sb2NrX2FyZWEodHVjKTsKIH0KIAotRWluYV9Cb29sIGV3a190
aWxlZF9iYWNraW5nX3N0b3JlX2Rpc2FibGVfcmVuZGVyKEV2YXNfT2JqZWN0ICpvKQorRWluYV9C
b29sIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX2Rpc2FibGVfcmVuZGVyKEV2YXNfT2JqZWN0KiBl
d2tUaWxlKQogewotICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYsIEVJTkFfRkFM
U0UpOworICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKGV3a1RpbGUsIHByaXYsIEVJTkFfRkFM
U0UpOwogICAgIHJldHVybiBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZGlzYWJsZV9yZW5kZXIo
cHJpdik7CiB9CiAKLUVpbmFfQm9vbCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9lbmFibGVfcmVu
ZGVyKEV2YXNfT2JqZWN0ICpvKQorRWluYV9Cb29sIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX2Vu
YWJsZV9yZW5kZXIoRXZhc19PYmplY3QqIGV3a1RpbGUpCiB7Ci0gICAgUFJJVl9EQVRBX0dFVF9P
Ul9SRVRVUk4obywgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRV
Uk4oZXdrVGlsZSwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX2NoYW5nZWQocHJpdik7CiAgICAgcmV0dXJuIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9l
bmFibGVfcmVuZGVyKHByaXYpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvZXdr
L2V3a190aWxlZF9iYWNraW5nX3N0b3JlLmggYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmUuaAppbmRleCAzMDEwM2VkMWQzMGQ2OWQxYmY1NTIwZDQyZWY0OWY3
MzU4YzY0YzMyLi43OTQ1MWFlZjIwM2NmOTVkYzJjYWFhZGRjODg4YWIxZWRiZDNjM2ZkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmUuaAor
KysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmUuaApAQCAt
NzIsNyArNzIsNyBAQCBzdHJ1Y3QgX0V3a19UaWxlIHsKICAgICBjYWlyb190KiBjYWlybzsKIAog
ICAgIC8qKiBOZXZlciBldmVyIGNoYW5nZSB0aG9zZSBhZnRlciB0aWxlIGlzIGNyZWF0ZWQgKHJl
c3BlY3QgY29uc3QhKSAqLwotICAgIGNvbnN0IEV2YXNfQ29vcmQgdywgaDsgICAgICAgIC8qKjwg
dGlsZSBzaXplIChzZWUgVElMRV9TSVpFX0FUX1pPT00oKSkgKi8KKyAgICBjb25zdCBFdmFzX0Nv
b3JkIHdpZHRoLCBoZWlnaHQ7ICAgICAgICAvKio8IHRpbGUgc2l6ZSAoc2VlIFRJTEVfU0laRV9B
VF9aT09NKCkpICovCiAgICAgY29uc3QgRXZhc19Db2xvcnNwYWNlIGNzcGFjZTsgLyoqPCBjb2xv
cnNwYWNlICovCiAgICAgY29uc3QgZmxvYXQgem9vbTsgICAgICAgICAgICAgLyoqPCB6b29tIGxl
dmVsIGNvbnRlbnRzIHdlcmUgcmVuZGVyZWQgYXQgKi8KICAgICBjb25zdCBzaXplX3QgYnl0ZXM7
ICAgICAgICAgICAvKio8IGJ5dGVzIHVzZWQgaW4gcGl4ZWxzLiBrZWVwCkBAIC05MCw3ICs5MCw3
IEBAIHN0cnVjdCBfRXdrX1RpbGUgewogLyogdmlldyAqLwogRXZhc19PYmplY3QqIGV3a190aWxl
ZF9iYWNraW5nX3N0b3JlX2FkZChFdmFzKiBlKTsKIAotdm9pZCBld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9yZW5kZXJfY2Jfc2V0KEV2YXNfT2JqZWN0ICpvLCBFaW5hX0Jvb2wgKCogY2IpKHZvaWQq
IGRhdGEsIEV3a19UaWxlKiB0LCBjb25zdCBFaW5hX1JlY3RhbmdsZSogYXJlYSksIGNvbnN0IHZv
aWQqIGRhdGEpOwordm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9yZW5kZXJfY2Jfc2V0KEV2
YXNfT2JqZWN0ICpvLCBFaW5hX0Jvb2wgKCpjYikodm9pZCogZGF0YSwgRXdrX1RpbGUqIHQsIGNv
bnN0IEVpbmFfUmVjdGFuZ2xlKiBhcmVhKSwgY29uc3Qgdm9pZCogZGF0YSk7CiAKIEVpbmFfQm9v
bCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zY3JvbGxfZnVsbF9vZmZzZXRfc2V0KEV2YXNfT2Jq
ZWN0KiBvLCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSk7CiBFaW5hX0Jvb2wgZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfc2Nyb2xsX2Z1bGxfb2Zmc2V0X2FkZChFdmFzX09iamVjdCogbywgRXZh
c19Db29yZCBkeCwgRXZhc19Db29yZCBkeSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Vm
bC9ld2svZXdrX3RpbGVkX21hdHJpeC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3Rp
bGVkX21hdHJpeC5jcHAKaW5kZXggZmY0YzQxYzcxOTEzNDdmMDFhNjE5YjNkMWNiZWU5YmNiNTRh
NjJjZS4uZTkxYmQ3Nzc3N2UxMDVkMGZlMjJkY2FmOGYyZDZhYTAwMTZkMjI0ZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a190aWxlZF9tYXRyaXguY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfbWF0cml4LmNwcApAQCAtMzIsMTcgKzMyLDE3IEBA
CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAKIHN0cnVjdCBfRXdrX1RpbGVfTWF0cml4IHsKLSAgICBF
aW5hX01hdHJpeHNwYXJzZSAqbWF0cml4OwotICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVj
OworICAgIEVpbmFfTWF0cml4c3BhcnNlKiBtYXRyaXg7CisgICAgRXdrX1RpbGVfVW51c2VkX0Nh
Y2hlKiB0dWM7CiAgICAgRXZhc19Db2xvcnNwYWNlIGNzcGFjZTsKICAgICBzdHJ1Y3QgewotICAg
ICAgICB2b2lkICgqY2IpKHZvaWQgKmRhdGEsIEV3a19UaWxlICp0LCBjb25zdCBFaW5hX1JlY3Rh
bmdsZSAqdXBkYXRlKTsKLSAgICAgICAgdm9pZCAqZGF0YTsKKyAgICAgICAgdm9pZCAoKmNiKSh2
b2lkKiBkYXRhLCBFd2tfVGlsZSogdGlsZSwgY29uc3QgRWluYV9SZWN0YW5nbGUqIHVwZGF0ZSk7
CisgICAgICAgIHZvaWQqIGRhdGE7CiAgICAgfSByZW5kZXI7CiAgICAgdW5zaWduZWQgaW50IGZy
b3plbjsKLSAgICBFaW5hX0xpc3QgKnVwZGF0ZXM7CisgICAgRWluYV9MaXN0KiB1cGRhdGVzOwog
ICAgIHN0cnVjdCB7Ci0gICAgICAgIEV2YXNfQ29vcmQgdywgaDsKKyAgICAgICAgRXZhc19Db29y
ZCB3aWR0aCwgaGVpZ2h0OwogICAgIH0gdGlsZTsKICNpZmRlZiBERUJVR19NRU1fTEVBS1MKICAg
ICBzdHJ1Y3QgewpAQCAtNTksMzEgKzU5LDMxIEBAIHN0YXRpYyB1aW50NjRfdCBieXRlc19sZWFr
ZWQgPSAwOwogI2VuZGlmCiAKIC8qIGNhbGxlZCB3aGVuIG1hdHJpeHNwYXJzZSBpcyByZXNpemVk
IG9yIGZyZWVkICovCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVfbWF0cml4X2NlbGxfZnJlZSh2b2lk
ICp1c2VyX2RhdGEsIHZvaWQgKmNlbGxfZGF0YSkKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZV9tYXRy
aXhfY2VsbF9mcmVlKHZvaWQqIHVzZXJEYXRhLCB2b2lkKiBjZWxsRGF0YSkKIHsKLSAgICBFd2tf
VGlsZV9NYXRyaXgqIHRtID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGVfTWF0cml4Kj4odXNlcl9kYXRh
KTsKLSAgICBFd2tfVGlsZSogdCA9IHN0YXRpY19jYXN0PEV3a19UaWxlKj4oY2VsbF9kYXRhKTsK
KyAgICBFd2tfVGlsZV9NYXRyaXgqIHRtID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGVfTWF0cml4Kj4o
dXNlckRhdGEpOworICAgIEV3a19UaWxlKiB0aWxlID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGUqPihj
ZWxsRGF0YSk7CiAKLSAgICBpZiAoIXQpCisgICAgaWYgKCF0aWxlKQogICAgICAgICByZXR1cm47
CiAKICAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfZnJlZXplKHRtLT50dWMpOwogCi0gICAgaWYg
KHQtPnVwZGF0ZXMgfHwgdC0+c3RhdHMuZnVsbF91cGRhdGUpCi0gICAgICAgIHRtLT51cGRhdGVz
ID0gZWluYV9saXN0X3JlbW92ZSh0bS0+dXBkYXRlcywgdCk7CisgICAgaWYgKHRpbGUtPnVwZGF0
ZXMgfHwgdGlsZS0+c3RhdHMuZnVsbF91cGRhdGUpCisgICAgICAgIHRtLT51cGRhdGVzID0gZWlu
YV9saXN0X3JlbW92ZSh0bS0+dXBkYXRlcywgdGlsZSk7CiAKLSAgICBpZiAodC0+dmlzaWJsZSkK
LSAgICAgICAgRVJSKCJmcmVlaW5nIGNlbGwgdGhhdCBpcyB2aXNpYmxlLCBsZWFraW5nIHRpbGUg
JXAiLCB0KTsKKyAgICBpZiAodGlsZS0+dmlzaWJsZSkKKyAgICAgICAgRVJSKCJmcmVlaW5nIGNl
bGwgdGhhdCBpcyB2aXNpYmxlLCBsZWFraW5nIHRpbGUgJXAiLCB0aWxlKTsKICAgICBlbHNlIHsK
LSAgICAgICAgaWYgKCFld2tfdGlsZV91bnVzZWRfY2FjaGVfdGlsZV9nZXQodG0tPnR1YywgdCkp
Ci0gICAgICAgICAgICBFUlIoInRpbGUgJXAgd2FzIG5vdCBpbiBjYWNoZSAlcD8gbGVha2luZy4u
LiIsIHQsIHRtLT50dWMpOworICAgICAgICBpZiAoIWV3a190aWxlX3VudXNlZF9jYWNoZV90aWxl
X2dldCh0bS0+dHVjLCB0aWxlKSkKKyAgICAgICAgICAgIEVSUigidGlsZSAlcCB3YXMgbm90IGlu
IGNhY2hlICVwPyBsZWFraW5nLi4uIiwgdGlsZSwgdG0tPnR1Yyk7CiAgICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgREJHKCJ0aWxlIGNlbGwgZG9lcyBub3QgZXhpc3QgYW55bW9yZSwgZnJlZSBp
dCAlcCIsIHQpOworICAgICAgICAgICAgREJHKCJ0aWxlIGNlbGwgZG9lcyBub3QgZXhpc3QgYW55
bW9yZSwgZnJlZSBpdCAlcCIsIHRpbGUpOwogI2lmZGVmIERFQlVHX01FTV9MRUFLUwotICAgICAg
ICAgICAgdG0tPnN0YXRzLmJ5dGVzLmZyZWVkICs9IHQtPmJ5dGVzOworICAgICAgICAgICAgdG0t
PnN0YXRzLmJ5dGVzLmZyZWVkICs9IHRpbGUtPmJ5dGVzOwogICAgICAgICAgICAgdG0tPnN0YXRz
LnRpbGVzLmZyZWVkKys7CiAjZW5kaWYKLSAgICAgICAgICAgIGV3a190aWxlX2ZyZWUodCk7Cisg
ICAgICAgICAgICBld2tfdGlsZV9mcmVlKHRpbGUpOwogICAgICAgICB9CiAgICAgfQogCkBAIC05
MSw0MCArOTEsNDAgQEAgc3RhdGljIHZvaWQgX2V3a190aWxlX21hdHJpeF9jZWxsX2ZyZWUodm9p
ZCAqdXNlcl9kYXRhLCB2b2lkICpjZWxsX2RhdGEpCiB9CiAKIC8qIGNhbGxlZCB3aGVuIGNhY2hl
IG9mIHVudXNlZCB0aWxlIGlzIGZsdXNoZWQgKi8KLXN0YXRpYyB2b2lkIF9ld2tfdGlsZV9tYXRy
aXhfdGlsZV9mcmVlKHZvaWQgKmRhdGEsIEV3a19UaWxlICp0KQorc3RhdGljIHZvaWQgX2V3a190
aWxlX21hdHJpeF90aWxlX2ZyZWUodm9pZCogZGF0YSwgRXdrX1RpbGUqIHRpbGUpCiB7CiAgICAg
RXdrX1RpbGVfTWF0cml4KiB0bSA9IHN0YXRpY19jYXN0PEV3a19UaWxlX01hdHJpeCo+KGRhdGEp
OwotICAgIEVpbmFfTWF0cml4c3BhcnNlX0NlbGwgKmNlbGw7Ci0gCi0gICAgaWYgKCFlaW5hX21h
dHJpeHNwYXJzZV9jZWxsX2lkeF9nZXQodG0tPm1hdHJpeCwgdC0+cm93LCB0LT5jb2wsICZjZWxs
KSkgewotICAgICAgICBFUlIoInJlbW92aW5nIHRpbGUgJXAgdGhhdCB3YXMgbm90IGluIHRoZSBt
YXRyaXg/IExlYWtpbmcuLi4iLCB0KTsKKyAgICBFaW5hX01hdHJpeHNwYXJzZV9DZWxsKiBjZWxs
OworCisgICAgaWYgKCFlaW5hX21hdHJpeHNwYXJzZV9jZWxsX2lkeF9nZXQodG0tPm1hdHJpeCwg
dGlsZS0+cm93LCB0aWxlLT5jb2wsICZjZWxsKSkgeworICAgICAgICBFUlIoInJlbW92aW5nIHRp
bGUgJXAgdGhhdCB3YXMgbm90IGluIHRoZSBtYXRyaXg/IExlYWtpbmcuLi4iLCB0aWxlKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmICghY2VsbCkgewotICAgICAgICBFUlIoInJl
bW92aW5nIHRpbGUgJXAgdGhhdCB3YXMgbm90IGluIHRoZSBtYXRyaXg/IExlYWtpbmcuLi4iLCB0
KTsKKyAgICAgICAgRVJSKCJyZW1vdmluZyB0aWxlICVwIHRoYXQgd2FzIG5vdCBpbiB0aGUgbWF0
cml4PyBMZWFraW5nLi4uIiwgdGlsZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBp
ZiAodC0+dXBkYXRlcyB8fCB0LT5zdGF0cy5mdWxsX3VwZGF0ZSkKLSAgICAgICAgdG0tPnVwZGF0
ZXMgPSBlaW5hX2xpc3RfcmVtb3ZlKHRtLT51cGRhdGVzLCB0KTsKKyAgICBpZiAodGlsZS0+dXBk
YXRlcyB8fCB0aWxlLT5zdGF0cy5mdWxsX3VwZGF0ZSkKKyAgICAgICAgdG0tPnVwZGF0ZXMgPSBl
aW5hX2xpc3RfcmVtb3ZlKHRtLT51cGRhdGVzLCB0aWxlKTsKIAogICAgIC8qIHNldCB0byBudWxs
IHRvIGF2b2lkIGRvdWJsZSBmcmVlICovCiAgICAgZWluYV9tYXRyaXhzcGFyc2VfY2VsbF9kYXRh
X3JlcGxhY2UoY2VsbCwgMCwgMCk7CiAgICAgZWluYV9tYXRyaXhzcGFyc2VfY2VsbF9jbGVhcihj
ZWxsKTsKIAotICAgIGlmIChFSU5BX1VOTElLRUxZKCEhdC0+dmlzaWJsZSkpIHsKKyAgICBpZiAo
RUlOQV9VTkxJS0VMWSghIXRpbGUtPnZpc2libGUpKSB7CiAgICAgICAgIEVSUigiY2FjaGUgb2Yg
dW51c2VkIHRpbGVzIHJlcXVlc3RpbmcgZGVsZXRpb24gb2YgdXNlZCB0aWxlICVwPyAiCi0gICAg
ICAgICAgICAiTGVha2luZy4uLiIsIHQpOworICAgICAgICAgICAgIkxlYWtpbmcuLi4iLCB0aWxl
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogI2lmZGVmIERFQlVHX01FTV9MRUFLUwotICAg
IHRtLT5zdGF0cy5ieXRlcy5mcmVlZCArPSB0LT5ieXRlczsKKyAgICB0bS0+c3RhdHMuYnl0ZXMu
ZnJlZWQgKz0gdGlsZS0+Ynl0ZXM7CiAgICAgdG0tPnN0YXRzLnRpbGVzLmZyZWVkKys7CiAjZW5k
aWYKIAotICAgIGV3a190aWxlX2ZyZWUodCk7CisgICAgZXdrX3RpbGVfZnJlZSh0aWxlKTsKIH0K
IAogLyoqCkBAIC0xMzcsNyArMTM3LDcgQEAgc3RhdGljIHZvaWQgX2V3a190aWxlX21hdHJpeF90
aWxlX2ZyZWUodm9pZCAqZGF0YSwgRXdrX1RpbGUgKnQpCiAgKgogICogQHBhcmFtIHR1YyBjYWNo
ZSBvZiB1bnVzZWQgdGlsZXMgb3IgQGMgMCB0byBjcmVhdGUgb25lCiAgKiAgICAgICAgYXV0b21h
dGljYWxseS4KLSAqIEBwYXJhbSBjb2xzIG51bWJlciBvZiBjb2x1bW5zIGluIHRoZSBtYXRyaXgu
CisgKiBAcGFyYW0gY29sdW1ucyBudW1iZXIgb2YgY29sdW1ucyBpbiB0aGUgbWF0cml4LgogICog
QHBhcmFtIHJvd3MgbnVtYmVyIG9mIHJvd3MgaW4gdGhlIG1hdHJpeC4KICAqIEBwYXJhbSBjc3Bh
Y2UgdGhlIGNvbG9yIHNwYWNlIHVzZWQgdG8gY3JlYXRlIHRpbGVzIGluIHRoaXMgbWF0cml4Lgog
ICogQHBhcmFtIHJlbmRlcl9jYiBmdW5jdGlvbiB1c2VkIHRvIHJlbmRlciBnaXZlbiB0aWxlIHVw
ZGF0ZS4KQEAgLTE0NSwyMSArMTQ1LDIxIEBAIHN0YXRpYyB2b2lkIF9ld2tfdGlsZV9tYXRyaXhf
dGlsZV9mcmVlKHZvaWQgKmRhdGEsIEV3a19UaWxlICp0KQogICoKICAqIEByZXR1cm4gbmV3bHkg
YWxsb2NhdGVkIGluc3RhbmNlIG9uIHN1Y2Nlc3MsIEBjIDAgb24gZmFpbHVyZS4KICAqLwotRXdr
X1RpbGVfTWF0cml4ICpld2tfdGlsZV9tYXRyaXhfbmV3KEV3a19UaWxlX1VudXNlZF9DYWNoZSAq
dHVjLCB1bnNpZ25lZCBsb25nIGNvbHMsIHVuc2lnbmVkIGxvbmcgcm93cywgRXZhc19Db2xvcnNw
YWNlIGNzcGFjZSwgdm9pZCAoKnJlbmRlcl9jYikodm9pZCAqZGF0YSwgRXdrX1RpbGUgKnQsIGNv
bnN0IEVpbmFfUmVjdGFuZ2xlICp1cGRhdGUpLCBjb25zdCB2b2lkICpyZW5kZXJfZGF0YSkKK0V3
a19UaWxlX01hdHJpeCogZXdrX3RpbGVfbWF0cml4X25ldyhFd2tfVGlsZV9VbnVzZWRfQ2FjaGUq
IHRpbGVVbnVzZWRDYWNoZSwgdW5zaWduZWQgbG9uZyBjb2x1bW5zLCB1bnNpZ25lZCBsb25nIHJv
d3MsIEV2YXNfQ29sb3JzcGFjZSBjb2xvclNwYWNlLCB2b2lkICgqcmVuZGVyX2NhbGxiYWNrKSh2
b2lkKiBkYXRhLCBFd2tfVGlsZSogdGlsZSwgY29uc3QgRWluYV9SZWN0YW5nbGUqIHVwZGF0ZSks
IGNvbnN0IHZvaWQqIHJlbmRlckRhdGEpCiB7CiAgICAgRXdrX1RpbGVfTWF0cml4KiB0bSA9IHN0
YXRpY19jYXN0PEV3a19UaWxlX01hdHJpeCo+KGNhbGxvYygxLCBzaXplb2YoRXdrX1RpbGVfTWF0
cml4KSkpOwogICAgIGlmICghdG0pCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgdG0tPm1hdHJp
eCA9IGVpbmFfbWF0cml4c3BhcnNlX25ldyhyb3dzLCBjb2xzLCBfZXdrX3RpbGVfbWF0cml4X2Nl
bGxfZnJlZSwgdG0pOworICAgIHRtLT5tYXRyaXggPSBlaW5hX21hdHJpeHNwYXJzZV9uZXcocm93
cywgY29sdW1ucywgX2V3a190aWxlX21hdHJpeF9jZWxsX2ZyZWUsIHRtKTsKICAgICBpZiAoIXRt
LT5tYXRyaXgpIHsKICAgICAgICAgRVJSKCJjb3VsZCBub3QgY3JlYXRlIHNwYXJzZSBtYXRyaXgu
Iik7CiAgICAgICAgIGZyZWUodG0pOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBp
ZiAodHVjKQotICAgICAgICB0bS0+dHVjID0gZXdrX3RpbGVfdW51c2VkX2NhY2hlX3JlZih0dWMp
OworICAgIGlmICh0aWxlVW51c2VkQ2FjaGUpCisgICAgICAgIHRtLT50dWMgPSBld2tfdGlsZV91
bnVzZWRfY2FjaGVfcmVmKHRpbGVVbnVzZWRDYWNoZSk7CiAgICAgZWxzZSB7CiAgICAgICAgIHRt
LT50dWMgPSBld2tfdGlsZV91bnVzZWRfY2FjaGVfbmV3KDQwOTYwMDAwKTsKICAgICAgICAgaWYg
KCF0bS0+dHVjKSB7CkBAIC0xNzAsMTEgKzE3MCwxMSBAQCBFd2tfVGlsZV9NYXRyaXggKmV3a190
aWxlX21hdHJpeF9uZXcoRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMsIHVuc2lnbmVkIGxvbmcg
YwogICAgICAgICB9CiAgICAgfQogCi0gICAgdG0tPmNzcGFjZSA9IGNzcGFjZTsKLSAgICB0bS0+
cmVuZGVyLmNiID0gcmVuZGVyX2NiOwotICAgIHRtLT5yZW5kZXIuZGF0YSA9ICh2b2lkICopcmVu
ZGVyX2RhdGE7Ci0gICAgdG0tPnRpbGUudyA9IERFRkFVTFRfVElMRV9XOwotICAgIHRtLT50aWxl
LmggPSBERUZBVUxUX1RJTEVfSDsKKyAgICB0bS0+Y3NwYWNlID0gY29sb3JTcGFjZTsKKyAgICB0
bS0+cmVuZGVyLmNiID0gcmVuZGVyX2NhbGxiYWNrOworICAgIHRtLT5yZW5kZXIuZGF0YSA9ICh2
b2lkKilyZW5kZXJEYXRhOworICAgIHRtLT50aWxlLndpZHRoID0gREVGQVVMVF9USUxFX1c7Cisg
ICAgdG0tPnRpbGUuaGVpZ2h0ID0gREVGQVVMVF9USUxFX0g7CiAKICAgICByZXR1cm4gdG07CiB9
CkBAIC0xODQsNTYgKzE4NCw1NiBAQCBFd2tfVGlsZV9NYXRyaXggKmV3a190aWxlX21hdHJpeF9u
ZXcoRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMsIHVuc2lnbmVkIGxvbmcgYwogICoKICAqIFRo
ZSBjYWNoZSBpbnN0YW5jZSBpcyB1bnJlZmVyZW5jZWQsIHBvc3NpYmx5IGZyZWVpbmcgaXQuCiAg
Ki8KLXZvaWQgZXdrX3RpbGVfbWF0cml4X2ZyZWUoRXdrX1RpbGVfTWF0cml4ICp0bSkKK3ZvaWQg
ZXdrX3RpbGVfbWF0cml4X2ZyZWUoRXdrX1RpbGVfTWF0cml4KiB0aWxlTWF0cml4KQogewogI2lm
ZGVmIERFQlVHX01FTV9MRUFLUwogICAgIHVpbnQ2NF90IHRpbGVzLCBieXRlczsKICNlbmRpZgog
Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4odG0pOwotICAgIGV3a190aWxlX3VudXNl
ZF9jYWNoZV9mcmVlemUodG0tPnR1Yyk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4o
dGlsZU1hdHJpeCk7CisgICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2ZyZWV6ZSh0aWxlTWF0cml4
LT50dWMpOwogCi0gICAgZWluYV9tYXRyaXhzcGFyc2VfZnJlZSh0bS0+bWF0cml4KTsKKyAgICBl
aW5hX21hdHJpeHNwYXJzZV9mcmVlKHRpbGVNYXRyaXgtPm1hdHJpeCk7CiAKLSAgICBld2tfdGls
ZV91bnVzZWRfY2FjaGVfdGhhdyh0bS0+dHVjKTsKLSAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVf
dW5yZWYodG0tPnR1Yyk7CisgICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3RoYXcodGlsZU1hdHJp
eC0+dHVjKTsKKyAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfdW5yZWYodGlsZU1hdHJpeC0+dHVj
KTsKIAogI2lmZGVmIERFQlVHX01FTV9MRUFLUwotICAgIHRpbGVzID0gdG0tPnN0YXRzLnRpbGVz
LmFsbG9jYXRlZCAtIHRtLT5zdGF0cy50aWxlcy5mcmVlZDsKLSAgICBieXRlcyA9IHRtLT5zdGF0
cy5ieXRlcy5hbGxvY2F0ZWQgLSB0bS0+c3RhdHMuYnl0ZXMuZnJlZWQ7CisgICAgdGlsZXMgPSB0
aWxlTWF0cml4LT5zdGF0cy50aWxlcy5hbGxvY2F0ZWQgLSB0aWxlTWF0cml4LT5zdGF0cy50aWxl
cy5mcmVlZDsKKyAgICBieXRlcyA9IHRpbGVNYXRyaXgtPnN0YXRzLmJ5dGVzLmFsbG9jYXRlZCAt
IHRpbGVNYXRyaXgtPnN0YXRzLmJ5dGVzLmZyZWVkOwogCiAgICAgdGlsZXNfbGVha2VkICs9IHRp
bGVzOwogICAgIGJ5dGVzX2xlYWtlZCArPSBieXRlczsKIAogICAgIGlmICh0aWxlcyB8fCBieXRl
cykKLSAgICAgICAgRVJSKCJ0aWxlZCBtYXRyaXggbGVha2VkOiB0aWxlc1srJSJQUkl1NjQiLC0l
IlBSSXU2NCI6JSJQUkl1NjQiXSAiCi0gICAgICAgICAgICJieXRlc1srJSJQUkl1NjQiLC0lIlBS
SXU2NCI6JSJQUkl1NjQiXSIsCi0gICAgICAgICAgICB0bS0+c3RhdHMudGlsZXMuYWxsb2NhdGVk
LCB0bS0+c3RhdHMudGlsZXMuZnJlZWQsIHRpbGVzLAotICAgICAgICAgICAgdG0tPnN0YXRzLmJ5
dGVzLmFsbG9jYXRlZCwgdG0tPnN0YXRzLmJ5dGVzLmZyZWVkLCBieXRlcyk7CisgICAgICAgIEVS
UigidGlsZWQgbWF0cml4IGxlYWtlZDogdGlsZXNbKyUiIFBSSXU2NCAiLC0lIiBQUkl1NjQgIjol
IiBQUkl1NjQgIl0gIgorICAgICAgICAgICAgImJ5dGVzWyslIiBQUkl1NjQgIiwtJSIgUFJJdTY0
ICI6JSIgUFJJdTY0ICJdIiwKKyAgICAgICAgICAgIHRpbGVNYXRyaXgtPnN0YXRzLnRpbGVzLmFs
bG9jYXRlZCwgdGlsZU1hdHJpeC0+c3RhdHMudGlsZXMuZnJlZWQsIHRpbGVzLAorICAgICAgICAg
ICAgdGlsZU1hdHJpeC0+c3RhdHMuYnl0ZXMuYWxsb2NhdGVkLCB0aWxlTWF0cml4LT5zdGF0cy5i
eXRlcy5mcmVlZCwgYnl0ZXMpOwogICAgIGVsc2UgaWYgKHRpbGVzX2xlYWtlZCB8fCBieXRlc19s
ZWFrZWQpCi0gICAgICAgIFdSTigidGlsZWQgbWF0cml4IGhhZCBubyBsZWFrczogdGlsZXNbKyUi
UFJJdTY0IiwtJSJQUkl1NjQiXSAiCi0gICAgICAgICAgICJieXRlc1srJSJQUkl1NjQiLC0lIlBS
SXU2NCJdLCBidXQgc29tZSBvdGhlciBsZWFrZWQgIgotICAgICAgICAgICAgIiUiUFJJdTY0IiB0
aWxlcyAoJSJQUkl1NjQiIGJ5dGVzKSIsCi0gICAgICAgICAgICB0bS0+c3RhdHMudGlsZXMuYWxs
b2NhdGVkLCB0bS0+c3RhdHMudGlsZXMuZnJlZWQsCi0gICAgICAgICAgICB0bS0+c3RhdHMuYnl0
ZXMuYWxsb2NhdGVkLCB0bS0+c3RhdHMuYnl0ZXMuZnJlZWQsCisgICAgICAgIFdSTigidGlsZWQg
bWF0cml4IGhhZCBubyBsZWFrczogdGlsZXNbKyUiIFBSSXU2NCAiLC0lIiBQUkl1NjQgIl0gIgor
ICAgICAgICAgICAgImJ5dGVzWyslIiBQUkl1NjQgIiwtJSIgUFJJdTY0ICJdLCBidXQgc29tZSBv
dGhlciBsZWFrZWQgIgorICAgICAgICAgICAgIiUiIFBSSXU2NCAiIHRpbGVzICglIiBQUkl1NjQg
IiBieXRlcykiLAorICAgICAgICAgICAgdGlsZU1hdHJpeC0+c3RhdHMudGlsZXMuYWxsb2NhdGVk
LCB0aWxlTWF0cml4LT5zdGF0cy50aWxlcy5mcmVlZCwKKyAgICAgICAgICAgIHRpbGVNYXRyaXgt
PnN0YXRzLmJ5dGVzLmFsbG9jYXRlZCwgdGlsZU1hdHJpeG0tPnN0YXRzLmJ5dGVzLmZyZWVkLAog
ICAgICAgICAgICAgdGlsZXNfbGVha2VkLCBieXRlc19sZWFrZWQpOwogICAgIGVsc2UKLSAgICAg
ICAgSU5GKCJ0aWxlZCBtYXRyaXggaGFkIG5vIGxlYWtzOiB0aWxlc1srJSJQUkl1NjQiLC0lIlBS
SXU2NCJdICIKLSAgICAgICAgICAgImJ5dGVzWyslIlBSSXU2NCIsLSUiUFJJdTY0Il0iLAotICAg
ICAgICAgICAgdG0tPnN0YXRzLnRpbGVzLmFsbG9jYXRlZCwgdG0tPnN0YXRzLnRpbGVzLmZyZWVk
LAotICAgICAgICAgICAgdG0tPnN0YXRzLmJ5dGVzLmFsbG9jYXRlZCwgdG0tPnN0YXRzLmJ5dGVz
LmZyZWVkKTsKKyAgICAgICAgSU5GKCJ0aWxlZCBtYXRyaXggaGFkIG5vIGxlYWtzOiB0aWxlc1sr
JSIgUFJJdTY0ICIsLSUiIFBSSXU2NCAiXSAiCisgICAgICAgICAgICAiYnl0ZXNbKyUiIFBSSXU2
NCAiLC0lIiBQUkl1NjQgIl0iLAorICAgICAgICAgICAgdGlsZU1hdHJpeC0+c3RhdHMudGlsZXMu
YWxsb2NhdGVkLCB0aWxlTWF0cml4LT5zdGF0cy50aWxlcy5mcmVlZCwKKyAgICAgICAgICAgIHRp
bGVNYXRyaXgtPnN0YXRzLmJ5dGVzLmFsbG9jYXRlZCwgdGlsZU1hdHJpeC0+c3RhdHMuYnl0ZXMu
ZnJlZWQpOwogI2VuZGlmCiAKLSAgICBmcmVlKHRtKTsKKyAgICBmcmVlKHRpbGVNYXRyaXgpOwog
fQogCiAvKioKICAqIFJlc2l6ZSBtYXRyaXggdG8gZ2l2ZW4gbnVtYmVyIG9mIHJvd3MgYW5kIGNv
bHVtbnMuCiAgKi8KLXZvaWQgZXdrX3RpbGVfbWF0cml4X3Jlc2l6ZShFd2tfVGlsZV9NYXRyaXgg
KnRtLCB1bnNpZ25lZCBsb25nIGNvbHMsIHVuc2lnbmVkIGxvbmcgcm93cykKK3ZvaWQgZXdrX3Rp
bGVfbWF0cml4X3Jlc2l6ZShFd2tfVGlsZV9NYXRyaXgqIHRpbGVNYXRyaXgsIHVuc2lnbmVkIGxv
bmcgY29scywgdW5zaWduZWQgbG9uZyByb3dzKQogewotICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOKHRtKTsKLSAgICBlaW5hX21hdHJpeHNwYXJzZV9zaXplX3NldCh0bS0+bWF0cml4LCBy
b3dzLCBjb2xzKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0aWxlTWF0cml4KTsK
KyAgICBlaW5hX21hdHJpeHNwYXJzZV9zaXplX3NldCh0aWxlTWF0cml4LT5tYXRyaXgsIHJvd3Ms
IGNvbHMpOwogfQogCiAvKioKQEAgLTI0MSwyMyArMjQxLDIzIEBAIHZvaWQgZXdrX3RpbGVfbWF0
cml4X3Jlc2l6ZShFd2tfVGlsZV9NYXRyaXggKnRtLCB1bnNpZ25lZCBsb25nIGNvbHMsIHVuc2ln
bmVkIGxvCiAgKgogICogTm8gcmVmZXJlbmNlIGlzIHRha2VuIHRvIHRoZSBjYWNoZS4KICAqLwot
RXdrX1RpbGVfVW51c2VkX0NhY2hlICpld2tfdGlsZV9tYXRyaXhfdW51c2VkX2NhY2hlX2dldChj
b25zdCBFd2tfVGlsZV9NYXRyaXggKnRtKQorRXdrX1RpbGVfVW51c2VkX0NhY2hlKiBld2tfdGls
ZV9tYXRyaXhfdW51c2VkX2NhY2hlX2dldChjb25zdCBFd2tfVGlsZV9NYXRyaXgqIHRpbGVNYXRy
aXgpCiB7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHRtLCAwKTsKLSAgICBy
ZXR1cm4gdG0tPnR1YzsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodGlsZU1h
dHJpeCwgMCk7CisgICAgcmV0dXJuIHRpbGVNYXRyaXgtPnR1YzsKIH0KIAogLyoqCiAgKiBHZXQg
dGhlIGV4YWN0IHRpbGUgZm9yIHRoZSBnaXZlbiBwb3NpdGlvbiBhbmQgem9vbS4KICAqCi0gKiBJ
ZiB0aGUgdGlsZSB3YXMgdW51c2VkIHRoZW4gaXQncyByZW1vdmVkIGZyb20gdGhlIGNhY2hlLgor
ICogSWYgdGhlIHRpbGUud2lkdGhhcyB1bnVzZWQgdGhlbiBpdCdzIHJlbW92ZWQgZnJvbSB0aGUg
Y2FjaGUuCiAgKgogICogQWZ0ZXIgdXNhZ2UsIHBsZWFzZSBnaXZlIGl0IGJhY2sgdXNpbmcKICAq
IGV3a190aWxlX21hdHJpeF90aWxlX3B1dCgpLiBJZiB5b3UganVzdCB3YW50IHRvIGNoZWNrIGlm
IGl0IGV4aXN0cywKICAqIHRoZW4gdXNlIGV3a190aWxlX21hdHJpeF90aWxlX2V4YWN0X2V4aXN0
cygpLgogICoKLSAqIEBwYXJhbSB0bSB0aGUgdGlsZSBtYXRyaXggdG8gZ2V0IHRpbGUgZnJvbS4K
LSAqIEBwYXJhbSBjb2wgdGhlIGNvbHVtbiBudW1iZXIuCisgKiBAcGFyYW0gdGlsZU1hdHJpeCB0
aGUgdGlsZSBtYXRyaXggdG8gZ2V0IHRpbGUgZnJvbS4KKyAqIEBwYXJhbSBjb2x1bW4gdGhlIGNv
bHVtbiBudW1iZXIuCiAgKiBAcGFyYW0gcm93IHRoZSByb3cgbnVtYmVyLgogICogQHBhcmFtIHpv
b20gdGhlIGV4YWN0IHpvb20gdG8gdXNlLgogICoKQEAgLTI2OCwyOSArMjY4LDI5IEBAIEV3a19U
aWxlX1VudXNlZF9DYWNoZSAqZXdrX3RpbGVfbWF0cml4X3VudXNlZF9jYWNoZV9nZXQoY29uc3Qg
RXdrX1RpbGVfTWF0cml4ICp0CiAgKgogICogQHNlZSBld2tfdGlsZV9tYXRyaXhfdGlsZV9leGFj
dF9nZXQoKQogICovCi1Fd2tfVGlsZSAqZXdrX3RpbGVfbWF0cml4X3RpbGVfZXhhY3RfZ2V0KEV3
a19UaWxlX01hdHJpeCAqdG0sIHVuc2lnbmVkIGxvbmcgY29sLCB1bnNpZ25lZCBsb25nIHJvdywg
ZmxvYXQgem9vbSkKK0V3a19UaWxlKiBld2tfdGlsZV9tYXRyaXhfdGlsZV9leGFjdF9nZXQoRXdr
X1RpbGVfTWF0cml4KiB0aWxlTWF0cml4LCB1bnNpZ25lZCBsb25nIGNvbHVtbiwgdW5zaWduZWQg
bG9uZyByb3csIGZsb2F0IHpvb20pCiB7Ci0gICAgRXdrX1RpbGUqIHQgPSBzdGF0aWNfY2FzdDxF
d2tfVGlsZSo+KGVpbmFfbWF0cml4c3BhcnNlX2RhdGFfaWR4X2dldCh0bS0+bWF0cml4LCByb3cs
IGNvbCkpOwotICAgIGlmICghdCkKKyAgICBFd2tfVGlsZSogdGlsZSA9IHN0YXRpY19jYXN0PEV3
a19UaWxlKj4oZWluYV9tYXRyaXhzcGFyc2VfZGF0YV9pZHhfZ2V0KHRpbGVNYXRyaXgtPm1hdHJp
eCwgcm93LCBjb2x1bW4pKTsKKyAgICBpZiAoIXRpbGUpCiAgICAgICAgIHJldHVybiAwOwogCi0g
ICAgaWYgKHQtPnpvb20gPT0gem9vbSkKKyAgICBpZiAodGlsZS0+em9vbSA9PSB6b29tKQogICAg
ICAgICBnb3RvIGVuZDsKIAotICBlbmQ6Ci0gICAgaWYgKCF0LT52aXNpYmxlKSB7Ci0gICAgICAg
IGlmICghZXdrX3RpbGVfdW51c2VkX2NhY2hlX3RpbGVfZ2V0KHRtLT50dWMsIHQpKQorZW5kOgor
ICAgIGlmICghdGlsZS0+dmlzaWJsZSkgeworICAgICAgICBpZiAoIWV3a190aWxlX3VudXNlZF9j
YWNoZV90aWxlX2dldCh0aWxlTWF0cml4LT50dWMsIHRpbGUpKQogICAgICAgICAgICAgV1JOKCJF
d2tfVGlsZSB3YXMgdW51c2VkIGJ1dCBub3QgaW4gY2FjaGU/IGJ1ZyEiKTsKICAgICB9CiAKLSAg
ICByZXR1cm4gdDsKKyAgICByZXR1cm4gdGlsZTsKIH0KIAogLyoqCiAgKiBDaGVja3MgaWYgdGls
ZSBvZiBnaXZlbiB6b29tIGV4aXN0cyBpbiBtYXRyaXguCiAgKgotICogQHBhcmFtIHRtIHRoZSB0
aWxlIG1hdHJpeCB0byBjaGVjayB0aWxlIGV4aXN0ZW5jZS4KLSAqIEBwYXJhbSBjb2wgdGhlIGNv
bHVtbiBudW1iZXIuCisgKiBAcGFyYW0gdGlsZU1hdHJpeCB0aGUgdGlsZSBtYXRyaXggdG8gY2hl
Y2sgdGlsZSBleGlzdGVuY2UuCisgKiBAcGFyYW0gY29sdW1uIHRoZSBjb2x1bW4gbnVtYmVyLgog
ICogQHBhcmFtIHJvdyB0aGUgcm93IG51bWJlci4KICAqIEBwYXJhbSB6b29tIHRoZSBleGFjdCB6
b29tIHRvIHF1ZXJ5LgogICoKQEAgLTI5OCw5ICsyOTgsOSBAQCBFd2tfVGlsZSAqZXdrX3RpbGVf
bWF0cml4X3RpbGVfZXhhY3RfZ2V0KEV3a19UaWxlX01hdHJpeCAqdG0sIHVuc2lnbmVkIGxvbmcg
Y29sLAogICoKICAqIEBzZWUgZXdrX3RpbGVfbWF0cml4X3RpbGVfZXhhY3RfZ2V0KCkKICAqLwot
RWluYV9Cb29sIGV3a190aWxlX21hdHJpeF90aWxlX2V4YWN0X2V4aXN0cyhFd2tfVGlsZV9NYXRy
aXggKnRtLCB1bnNpZ25lZCBsb25nIGNvbCwgdW5zaWduZWQgbG9uZyByb3csIGZsb2F0IHpvb20p
CitFaW5hX0Jvb2wgZXdrX3RpbGVfbWF0cml4X3RpbGVfZXhhY3RfZXhpc3RzKEV3a19UaWxlX01h
dHJpeCogdGlsZU1hdHJpeCwgdW5zaWduZWQgbG9uZyBjb2x1bW4sIHVuc2lnbmVkIGxvbmcgcm93
LCBmbG9hdCB6b29tKQogewotICAgIGlmICghZWluYV9tYXRyaXhzcGFyc2VfZGF0YV9pZHhfZ2V0
KHRtLT5tYXRyaXgsIHJvdywgY29sKSkKKyAgICBpZiAoIWVpbmFfbWF0cml4c3BhcnNlX2RhdGFf
aWR4X2dldCh0aWxlTWF0cml4LT5tYXRyaXgsIHJvdywgY29sdW1uKSkKICAgICAgICAgcmV0dXJu
IEVJTkFfRkFMU0U7CiAKICAgICByZXR1cm4gRUlOQV9UUlVFOwpAQCAtMzEzLDUwICszMTMsNTAg
QEAgRWluYV9Cb29sIGV3a190aWxlX21hdHJpeF90aWxlX2V4YWN0X2V4aXN0cyhFd2tfVGlsZV9N
YXRyaXggKnRtLCB1bnNpZ25lZCBsb25nIGMKICAqIG9mIHVudXNlZCB0aWxlcy4gQWZ0ZXIgaXQg
aXMgdXNlZCBvbmUgc2hvdWxkIGNhbGwKICAqIGV3a190aWxlX21hdHJpeF90aWxlX3B1dCgpIHRv
IGdpdmUgaXQgYmFjayB0byBtYXRyaXguCiAgKgotICogQHBhcmFtIHRtIHRoZSB0aWxlIG1hdHJp
eCB0byBjcmVhdGUgdGlsZSBvbi4KLSAqIEBwYXJhbSBjb2wgdGhlIGNvbHVtbiBudW1iZXIuCisg
KiBAcGFyYW0gdGlsZU1hdHJpeCB0aGUgdGlsZSBtYXRyaXggdG8gY3JlYXRlIHRpbGUgb24uCisg
KiBAcGFyYW0gY29sdW1uIHRoZSBjb2x1bW4gbnVtYmVyLgogICogQHBhcmFtIHJvdyB0aGUgcm93
IG51bWJlci4KICAqIEBwYXJhbSB6b29tIHRoZSBsZXZlbCB0byBjcmVhdGUgdGlsZSwgdXNlZCB0
byBkZXRlcm1pbmUgdGlsZSBzaXplLgogICovCi1Fd2tfVGlsZSAqZXdrX3RpbGVfbWF0cml4X3Rp
bGVfbmV3KEV3a19UaWxlX01hdHJpeCAqdG0sIEV2YXMgKmV2YXMsIHVuc2lnbmVkIGxvbmcgY29s
LCB1bnNpZ25lZCBsb25nIHJvdywgZmxvYXQgem9vbSkKK0V3a19UaWxlKiBld2tfdGlsZV9tYXRy
aXhfdGlsZV9uZXcoRXdrX1RpbGVfTWF0cml4KiB0aWxlTWF0cml4LCBFdmFzKiBjYW52YXMsIHVu
c2lnbmVkIGxvbmcgY29sdW1uLCB1bnNpZ25lZCBsb25nIHJvdywgZmxvYXQgem9vbSkKIHsKICAg
ICBFdmFzX0Nvb3JkIHR3LCB0aDsKLSAgICBFd2tfVGlsZSAqdDsKKyAgICBFd2tfVGlsZSogdGls
ZTsKIAotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh0bSwgMCk7CisgICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHRpbGVNYXRyaXgsIDApOwogICAgIEVJTkFfU0FG
RVRZX09OX0ZBTFNFX1JFVFVSTl9WQUwoem9vbSA+IDAuMCwgMCk7CiAKLSAgICB0dyA9IHRtLT50
aWxlLnc7Ci0gICAgdGggPSB0bS0+dGlsZS5oOworICAgIHR3ID0gdGlsZU1hdHJpeC0+dGlsZS53
aWR0aDsKKyAgICB0aCA9IHRpbGVNYXRyaXgtPnRpbGUuaGVpZ2h0OwogCi0gICAgdCA9IGV3a190
aWxlX25ldyhldmFzLCB0dywgdGgsIHpvb20sIHRtLT5jc3BhY2UpOwotICAgIGlmICghdCkgewot
ICAgICAgICBFUlIoImNvdWxkIG5vdCBjcmVhdGUgdGlsZSAlZHglZCBhdCAlZiwgY3NwYWNlPSVk
IiwgdHcsIHRoLCAoZG91YmxlKXpvb20sIHRtLT5jc3BhY2UpOworICAgIHRpbGUgPSBld2tfdGls
ZV9uZXcoY2FudmFzLCB0dywgdGgsIHpvb20sIHRpbGVNYXRyaXgtPmNzcGFjZSk7CisgICAgaWYg
KCF0aWxlKSB7CisgICAgICAgIEVSUigiY291bGQgbm90IGNyZWF0ZSB0aWxlICVkeCVkIGF0ICVm
LCBjc3BhY2U9JWQiLCB0dywgdGgsIChkb3VibGUpem9vbSwgdGlsZU1hdHJpeC0+Y3NwYWNlKTsK
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgaWYgKCFlaW5hX21hdHJpeHNwYXJzZV9k
YXRhX2lkeF9zZXQodG0tPm1hdHJpeCwgcm93LCBjb2wsIHQpKSB7CisgICAgaWYgKCFlaW5hX21h
dHJpeHNwYXJzZV9kYXRhX2lkeF9zZXQodGlsZU1hdHJpeC0+bWF0cml4LCByb3csIGNvbHVtbiwg
dGlsZSkpIHsKICAgICAgICAgRVJSKCJjb3VsZCBub3Qgc2V0IG1hdHJpeCBjZWxsLCByb3cvY29s
IG91dHNpZGUgbWF0cml4IGRpbWVuc2lvbnMhIik7Ci0gICAgICAgIGV3a190aWxlX2ZyZWUodCk7
CisgICAgICAgIGV3a190aWxlX2ZyZWUodGlsZSk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0K
IAotICAgIHQtPmNvbCA9IGNvbDsKLSAgICB0LT5yb3cgPSByb3c7Ci0gICAgdC0+eCA9IGNvbCAq
IHR3OwotICAgIHQtPnkgPSByb3cgKiB0aDsKKyAgICB0aWxlLT5jb2wgPSBjb2x1bW47CisgICAg
dGlsZS0+cm93ID0gcm93OworICAgIHRpbGUtPnggPSBjb2x1bW4gKiB0dzsKKyAgICB0aWxlLT55
ID0gcm93ICogdGg7CiAKLSAgICBjYWlyb190cmFuc2xhdGUodC0+Y2Fpcm8sIC10LT54LCAtdC0+
eSk7CisgICAgY2Fpcm9fdHJhbnNsYXRlKHRpbGUtPmNhaXJvLCAtdGlsZS0+eCwgLXRpbGUtPnkp
OwogCi0gICAgdC0+c3RhdHMuZnVsbF91cGRhdGUgPSBFSU5BX1RSVUU7Ci0gICAgdG0tPnVwZGF0
ZXMgPSBlaW5hX2xpc3RfYXBwZW5kKHRtLT51cGRhdGVzLCB0KTsKKyAgICB0aWxlLT5zdGF0cy5m
dWxsX3VwZGF0ZSA9IEVJTkFfVFJVRTsKKyAgICB0aWxlTWF0cml4LT51cGRhdGVzID0gZWluYV9s
aXN0X2FwcGVuZCh0aWxlTWF0cml4LT51cGRhdGVzLCB0aWxlKTsKIAogI2lmZGVmIERFQlVHX01F
TV9MRUFLUwotICAgIHRtLT5zdGF0cy5ieXRlcy5hbGxvY2F0ZWQgKz0gdC0+Ynl0ZXM7Ci0gICAg
dG0tPnN0YXRzLnRpbGVzLmFsbG9jYXRlZCsrOworICAgIHRpbGVNYXRyaXgtPnN0YXRzLmJ5dGVz
LmFsbG9jYXRlZCArPSB0aWxlLT5ieXRlczsKKyAgICB0aWxlTWF0cml4LT5zdGF0cy50aWxlcy5h
bGxvY2F0ZWQrKzsKICNlbmRpZgogCi0gICAgcmV0dXJuIHQ7CisgICAgcmV0dXJuIHRpbGU7CiB9
CiAKIC8qKgpAQCAtMzY2LDMyICszNjYsMzIgQEAgRXdrX1RpbGUgKmV3a190aWxlX21hdHJpeF90
aWxlX25ldyhFd2tfVGlsZV9NYXRyaXggKnRtLCBFdmFzICpldmFzLCB1bnNpZ25lZCBsb24KICAq
IGl0IHdpdGggZXdrX3RpbGVfbWF0cml4X3RpbGVfZXhhY3RfZ2V0KCkuCiAgKgogICogQW55IHBy
ZXZpb3VzIHJlZmVyZW5jZSB0byB0aWxlIHNob3VsZCBiZSByZWxlYXNlZAotICogKGV3a190aWxl
X2hpZGUoKSkgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiwgc28gaXQgd2lsbAorICogKGV3
a190aWxlLmhlaWdodGlkZSgpKSBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLCBzbyBpdCB3
aWxsCiAgKiBiZSBrbm93biBpZiBpdCBpcyBub3QgdmlzaWJpbGUgYW55bW9yZSBhbmQgdGh1cyBj
YW4gYmUgcHV0IGludG8gdGhlCiAgKiB1bnVzZWQgY2FjaGUuCiAgKgotICogQHBhcmFtIHRtIHRo
ZSB0aWxlIG1hdHJpeCB0byByZXR1cm4gdGlsZSB0by4KKyAqIEBwYXJhbSB0aWxlTWF0cml4IHRo
ZSB0aWxlIG1hdHJpeCB0byByZXR1cm4gdGlsZSB0by4KICAqIEBwYXJhbSB0IHRoZSB0aWxlIGlu
c3RhbmNlIHRvIHJldHVybiwgbXVzdCBAYiBub3QgYmUgQGMgMC4KLSAqIEBwYXJhbSBsYXN0X3Vz
ZWQgdGltZSBpbiB3aGljaCB0aWxlIHdhcyBsYXN0IHVzZWQuCisgKiBAcGFyYW0gbGFzdF91c2Vk
IHRpbWUgaW4gd2hpY2ggdGlsZS53aWR0aGFzIGxhc3QgdXNlZC4KICAqCiAgKiBAcmV0dXJuICNF
SU5BX1RSVUUgb24gc3VjY2VzcyBvciAjRUlOQV9GQUxTRSBvbiBmYWlsdXJlLgogICovCi1FaW5h
X0Jvb2wgZXdrX3RpbGVfbWF0cml4X3RpbGVfcHV0KEV3a19UaWxlX01hdHJpeCAqdG0sIEV3a19U
aWxlICp0LCBkb3VibGUgbGFzdF91c2VkKQorRWluYV9Cb29sIGV3a190aWxlX21hdHJpeF90aWxl
X3B1dChFd2tfVGlsZV9NYXRyaXgqIHRpbGVNYXRyaXgsIEV3a19UaWxlKiB0aWxlLCBkb3VibGUg
bGFzdFVzZWQpCiB7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHRtLCBFSU5B
X0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodCwgRUlOQV9GQUxT
RSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHRpbGVNYXRyaXgsIEVJTkFf
RkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh0aWxlLCBFSU5BX0ZB
TFNFKTsKIAotICAgIGlmICh0LT52aXNpYmxlKQorICAgIGlmICh0aWxlLT52aXNpYmxlKQogICAg
ICAgICByZXR1cm4gRUlOQV9UUlVFOwogCi0gICAgdC0+c3RhdHMubGFzdF91c2VkID0gbGFzdF91
c2VkOwotICAgIHJldHVybiBld2tfdGlsZV91bnVzZWRfY2FjaGVfdGlsZV9wdXQodG0tPnR1Yywg
dCwgX2V3a190aWxlX21hdHJpeF90aWxlX2ZyZWUsIHRtKTsKKyAgICB0aWxlLT5zdGF0cy5sYXN0
X3VzZWQgPSBsYXN0VXNlZDsKKyAgICByZXR1cm4gZXdrX3RpbGVfdW51c2VkX2NhY2hlX3RpbGVf
cHV0KHRpbGVNYXRyaXgtPnR1YywgdGlsZSwgX2V3a190aWxlX21hdHJpeF90aWxlX2ZyZWUsIHRp
bGVNYXRyaXgpOwogfQogCi1FaW5hX0Jvb2wgZXdrX3RpbGVfbWF0cml4X3RpbGVfdXBkYXRlKEV3
a19UaWxlX01hdHJpeCAqdG0sIHVuc2lnbmVkIGxvbmcgY29sLCB1bnNpZ25lZCBsb25nIHJvdywg
Y29uc3QgRWluYV9SZWN0YW5nbGUgKnVwZGF0ZSkKK0VpbmFfQm9vbCBld2tfdGlsZV9tYXRyaXhf
dGlsZV91cGRhdGUoRXdrX1RpbGVfTWF0cml4KiB0aWxlTWF0cml4LCB1bnNpZ25lZCBsb25nIGNv
bCwgdW5zaWduZWQgbG9uZyByb3csIGNvbnN0IEVpbmFfUmVjdGFuZ2xlKiB1cGRhdGUpCiB7CiAg
ICAgRWluYV9SZWN0YW5nbGUgbmV3X3VwZGF0ZTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTl9WQUwodG0sIEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJO
X1ZBTCh0aWxlTWF0cml4LCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTl9WQUwodXBkYXRlLCBFSU5BX0ZBTFNFKTsKIAogICAgIG1lbWNweSgmbmV3X3VwZGF0ZSwg
dXBkYXRlLCBzaXplb2YobmV3X3VwZGF0ZSkpOwpAQCAtNDAxLDU5ICs0MDEsNTkgQEAgRWluYV9C
b29sIGV3a190aWxlX21hdHJpeF90aWxlX3VwZGF0ZShFd2tfVGlsZV9NYXRyaXggKnRtLCB1bnNp
Z25lZCBsb25nIGNvbCwgdW4KICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CiAgICAgfQogCi0g
ICAgaWYgKHVwZGF0ZS0+eCArIHVwZGF0ZS0+dyAtIDEgPj0gdG0tPnRpbGUudykKLSAgICAgICAg
bmV3X3VwZGF0ZS53ID0gdG0tPnRpbGUudyAtIHVwZGF0ZS0+eDsKLSAgICBpZiAodXBkYXRlLT55
ICsgdXBkYXRlLT5oIC0gMSA+PSB0bS0+dGlsZS5oKQotICAgICAgICBuZXdfdXBkYXRlLmggPSB0
bS0+dGlsZS5oIC0gdXBkYXRlLT55OworICAgIGlmICh1cGRhdGUtPnggKyB1cGRhdGUtPncgLSAx
ID49IHRpbGVNYXRyaXgtPnRpbGUud2lkdGgpCisgICAgICAgIG5ld191cGRhdGUudyA9IHRpbGVN
YXRyaXgtPnRpbGUud2lkdGggLSB1cGRhdGUtPng7CisgICAgaWYgKHVwZGF0ZS0+eSArIHVwZGF0
ZS0+aCAtIDEgPj0gdGlsZU1hdHJpeC0+dGlsZS5oZWlnaHQpCisgICAgICAgIG5ld191cGRhdGUu
aCA9IHRpbGVNYXRyaXgtPnRpbGUuaGVpZ2h0IC0gdXBkYXRlLT55OwogCi0gICAgRXdrX1RpbGUq
IHQgPSBzdGF0aWNfY2FzdDxFd2tfVGlsZSo+KGVpbmFfbWF0cml4c3BhcnNlX2RhdGFfaWR4X2dl
dCh0bS0+bWF0cml4LCByb3csIGNvbCkpOwotICAgIGlmICghdCkKKyAgICBFd2tfVGlsZSogdGls
ZSA9IHN0YXRpY19jYXN0PEV3a19UaWxlKj4oZWluYV9tYXRyaXhzcGFyc2VfZGF0YV9pZHhfZ2V0
KHRpbGVNYXRyaXgtPm1hdHJpeCwgcm93LCBjb2wpKTsKKyAgICBpZiAoIXRpbGUpCiAgICAgICAg
IHJldHVybiBFSU5BX1RSVUU7CiAKLSAgICBpZiAoIXQtPnVwZGF0ZXMgJiYgIXQtPnN0YXRzLmZ1
bGxfdXBkYXRlKQotICAgICAgICB0bS0+dXBkYXRlcyA9IGVpbmFfbGlzdF9hcHBlbmQodG0tPnVw
ZGF0ZXMsIHQpOwotICAgIGV3a190aWxlX3VwZGF0ZV9hcmVhKHQsICZuZXdfdXBkYXRlKTsKKyAg
ICBpZiAoIXRpbGUtPnVwZGF0ZXMgJiYgIXRpbGUtPnN0YXRzLmZ1bGxfdXBkYXRlKQorICAgICAg
ICB0aWxlTWF0cml4LT51cGRhdGVzID0gZWluYV9saXN0X2FwcGVuZCh0aWxlTWF0cml4LT51cGRh
dGVzLCB0aWxlKTsKKyAgICBld2tfdGlsZV91cGRhdGVfYXJlYSh0aWxlLCAmbmV3X3VwZGF0ZSk7
CiAKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi1FaW5hX0Jvb2wgZXdrX3RpbGVfbWF0cml4
X3RpbGVfdXBkYXRlX2Z1bGwoRXdrX1RpbGVfTWF0cml4ICp0bSwgdW5zaWduZWQgbG9uZyBjb2ws
IHVuc2lnbmVkIGxvbmcgcm93KQorRWluYV9Cb29sIGV3a190aWxlX21hdHJpeF90aWxlX3VwZGF0
ZV9mdWxsKEV3a19UaWxlX01hdHJpeCogdGlsZU1hdHJpeCwgdW5zaWduZWQgbG9uZyBjb2x1bW4s
IHVuc2lnbmVkIGxvbmcgcm93KQogewotICAgIEVpbmFfTWF0cml4c3BhcnNlX0NlbGwgKmNlbGw7
Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHRtLCBFSU5BX0ZBTFNFKTsKKyAg
ICBFaW5hX01hdHJpeHNwYXJzZV9DZWxsKiBjZWxsOworICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOX1ZBTCh0aWxlTWF0cml4LCBFSU5BX0ZBTFNFKTsKIAotICAgIGlmICghZWluYV9tYXRy
aXhzcGFyc2VfY2VsbF9pZHhfZ2V0KHRtLT5tYXRyaXgsIHJvdywgY29sLCAmY2VsbCkpCisgICAg
aWYgKCFlaW5hX21hdHJpeHNwYXJzZV9jZWxsX2lkeF9nZXQodGlsZU1hdHJpeC0+bWF0cml4LCBy
b3csIGNvbHVtbiwgJmNlbGwpKQogICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKIAogICAgIGlm
ICghY2VsbCkKICAgICAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIAotICAgIEV3a19UaWxlKiB0ID0g
c3RhdGljX2Nhc3Q8RXdrX1RpbGUqPihlaW5hX21hdHJpeHNwYXJzZV9jZWxsX2RhdGFfZ2V0KGNl
bGwpKTsKLSAgICBpZiAoIXQpIHsKKyAgICBFd2tfVGlsZSogdGlsZSA9IHN0YXRpY19jYXN0PEV3
a19UaWxlKj4oZWluYV9tYXRyaXhzcGFyc2VfY2VsbF9kYXRhX2dldChjZWxsKSk7CisgICAgaWYg
KCF0aWxlKSB7CiAgICAgICAgIENSSVRJQ0FMKCJtYXRyaXggY2VsbCB3aXRoIG5vIHRpbGUhIik7
CiAgICAgICAgIHJldHVybiBFSU5BX1RSVUU7CiAgICAgfQogCi0gICAgaWYgKCF0LT51cGRhdGVz
ICYmICF0LT5zdGF0cy5mdWxsX3VwZGF0ZSkKLSAgICAgICAgdG0tPnVwZGF0ZXMgPSBlaW5hX2xp
c3RfYXBwZW5kKHRtLT51cGRhdGVzLCB0KTsKLSAgICBld2tfdGlsZV91cGRhdGVfZnVsbCh0KTsK
KyAgICBpZiAoIXRpbGUtPnVwZGF0ZXMgJiYgIXRpbGUtPnN0YXRzLmZ1bGxfdXBkYXRlKQorICAg
ICAgICB0aWxlTWF0cml4LT51cGRhdGVzID0gZWluYV9saXN0X2FwcGVuZCh0aWxlTWF0cml4LT51
cGRhdGVzLCB0aWxlKTsKKyAgICBld2tfdGlsZV91cGRhdGVfZnVsbCh0aWxlKTsKIAogICAgIHJl
dHVybiBFSU5BX1RSVUU7CiB9CiAKLXZvaWQgZXdrX3RpbGVfbWF0cml4X3RpbGVfdXBkYXRlc19j
bGVhcihFd2tfVGlsZV9NYXRyaXggKnRtLCBFd2tfVGlsZSAqdCkKK3ZvaWQgZXdrX3RpbGVfbWF0
cml4X3RpbGVfdXBkYXRlc19jbGVhcihFd2tfVGlsZV9NYXRyaXgqIHRpbGVNYXRyaXgsIEV3a19U
aWxlKiB0aWxlKQogewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHRtKTsKLSAgICBp
ZiAoIXQtPnVwZGF0ZXMgJiYgIXQtPnN0YXRzLmZ1bGxfdXBkYXRlKQorICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOKHRpbGVNYXRyaXgpOworICAgIGlmICghdGlsZS0+dXBkYXRlcyAmJiAh
dGlsZS0+c3RhdHMuZnVsbF91cGRhdGUpCiAgICAgICAgIHJldHVybjsKLSAgICBld2tfdGlsZV91
cGRhdGVzX2NsZWFyKHQpOwotICAgIHRtLT51cGRhdGVzID0gZWluYV9saXN0X3JlbW92ZSh0bS0+
dXBkYXRlcywgdCk7CisgICAgZXdrX3RpbGVfdXBkYXRlc19jbGVhcih0aWxlKTsKKyAgICB0aWxl
TWF0cml4LT51cGRhdGVzID0gZWluYV9saXN0X3JlbW92ZSh0aWxlTWF0cml4LT51cGRhdGVzLCB0
aWxlKTsKIH0KIAotc3RhdGljIEVpbmFfQm9vbCBfZXdrX3RpbGVfbWF0cml4X3NsaWNlcl9zZXR1
cChFd2tfVGlsZV9NYXRyaXggKnRtLCBjb25zdCBFaW5hX1JlY3RhbmdsZSAqYXJlYSwgZmxvYXQg
em9vbSwgRWluYV9UaWxlX0dyaWRfU2xpY2VyICpzbGljZXIpCitzdGF0aWMgRWluYV9Cb29sIF9l
d2tfdGlsZV9tYXRyaXhfc2xpY2VyX3NldHVwKEV3a19UaWxlX01hdHJpeCogdGlsZU1hdHJpeCwg
Y29uc3QgRWluYV9SZWN0YW5nbGUqIGFyZWEsIGZsb2F0IHpvb20sIEVpbmFfVGlsZV9HcmlkX1Ns
aWNlciogc2xpY2VyKQogewogICAgIHVuc2lnbmVkIGxvbmcgcm93cywgY29sczsKLSAgICBFdmFz
X0Nvb3JkIHgsIHksIHcsIGgsIHR3LCB0aDsKKyAgICBFdmFzX0Nvb3JkIHgsIHksIHdpZHRoLCBo
ZWlnaHQsIHR3LCB0aDsKIAogICAgIGlmIChhcmVhLT53IDw9IDAgfHwgYXJlYS0+aCA8PSAwKSB7
CiAgICAgICAgIFdSTigiaW52YWxpZCBhcmVhIHJlZ2lvbjogJWQsJWQrJWR4JWQuIiwKQEAgLTQ2
MywzNyArNDYzLDM3IEBAIHN0YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxlX21hdHJpeF9zbGljZXJf
c2V0dXAoRXdrX1RpbGVfTWF0cml4ICp0bSwgY29uc3QgRWluYV9SCiAKICAgICB4ID0gYXJlYS0+
eDsKICAgICB5ID0gYXJlYS0+eTsKLSAgICB3ID0gYXJlYS0+dzsKLSAgICBoID0gYXJlYS0+aDsK
KyAgICB3aWR0aCA9IGFyZWEtPnc7CisgICAgaGVpZ2h0ID0gYXJlYS0+aDsKIAotICAgIHR3ID0g
dG0tPnRpbGUudzsKLSAgICB0aCA9IHRtLT50aWxlLmg7CisgICAgdHcgPSB0aWxlTWF0cml4LT50
aWxlLndpZHRoOworICAgIHRoID0gdGlsZU1hdHJpeC0+dGlsZS5oZWlnaHQ7CiAKICAgICAvLyBj
cm9wcGluZyBhcmVhIHJlZ2lvbiB0byBmaXQgbWF0cml4Ci0gICAgZWluYV9tYXRyaXhzcGFyc2Vf
c2l6ZV9nZXQodG0tPm1hdHJpeCwgJnJvd3MsICZjb2xzKTsKKyAgICBlaW5hX21hdHJpeHNwYXJz
ZV9zaXplX2dldCh0aWxlTWF0cml4LT5tYXRyaXgsICZyb3dzLCAmY29scyk7CiAgICAgaWYgKHgg
PCAwKSB7Ci0gICAgICAgIHcgKz0geDsKKyAgICAgICAgd2lkdGggKz0geDsKICAgICAgICAgeCA9
IDA7CiAgICAgfQogICAgIGlmICh5IDwgMCkgewotICAgICAgICBoICs9IHk7CisgICAgICAgIGhl
aWdodCArPSB5OwogICAgICAgICB5ID0gMDsKICAgICB9CiAKLSAgICBpZiAoeSArIGggLSAxID4g
KGxvbmcpKHJvd3MgKiB0aCkpCi0gICAgICAgIGggPSByb3dzICogdGggLSB5OwotICAgIGlmICh4
ICsgdyAtIDEgPiAobG9uZykoY29scyAqIHR3KSkKLSAgICAgICAgdyA9IGNvbHMgKiB0dyAtIHg7
CisgICAgaWYgKHkgKyBoZWlnaHQgLSAxID4gKGxvbmcpKHJvd3MgKiB0aCkpCisgICAgICAgIGhl
aWdodCA9IHJvd3MgKiB0aCAtIHk7CisgICAgaWYgKHggKyB3aWR0aCAtIDEgPiAobG9uZykoY29s
cyAqIHR3KSkKKyAgICAgICAgd2lkdGggPSBjb2xzICogdHcgLSB4OwogCi0gICAgcmV0dXJuIGVp
bmFfdGlsZV9ncmlkX3NsaWNlcl9zZXR1cChzbGljZXIsIHgsIHksIHcsIGgsIHR3LCB0aCk7Cisg
ICAgcmV0dXJuIGVpbmFfdGlsZV9ncmlkX3NsaWNlcl9zZXR1cChzbGljZXIsIHgsIHksIHdpZHRo
LCBoZWlnaHQsIHR3LCB0aCk7CiB9CiAKIAotRWluYV9Cb29sIGV3a190aWxlX21hdHJpeF91cGRh
dGUoRXdrX1RpbGVfTWF0cml4ICp0bSwgY29uc3QgRWluYV9SZWN0YW5nbGUgKnVwZGF0ZSwgZmxv
YXQgem9vbSkKK0VpbmFfQm9vbCBld2tfdGlsZV9tYXRyaXhfdXBkYXRlKEV3a19UaWxlX01hdHJp
eCogdGlsZU1hdHJpeCwgY29uc3QgRWluYV9SZWN0YW5nbGUqIHVwZGF0ZSwgZmxvYXQgem9vbSkK
IHsKLSAgICBjb25zdCBFaW5hX1RpbGVfR3JpZF9JbmZvICppbmZvOworICAgIGNvbnN0IEVpbmFf
VGlsZV9HcmlkX0luZm8qIGluZm87CiAgICAgRWluYV9UaWxlX0dyaWRfU2xpY2VyIHNsaWNlcjsK
LSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodG0sIEVJTkFfRkFMU0UpOworICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh0aWxlTWF0cml4LCBFSU5BX0ZBTFNFKTsK
ICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodXBkYXRlLCBFSU5BX0ZBTFNFKTsK
IAogICAgIGlmICh1cGRhdGUtPncgPCAxIHx8IHVwZGF0ZS0+aCA8IDEpIHsKQEAgLTUwMiw3ICs1
MDIsNyBAQCBFaW5hX0Jvb2wgZXdrX3RpbGVfbWF0cml4X3VwZGF0ZShFd2tfVGlsZV9NYXRyaXgg
KnRtLCBjb25zdCBFaW5hX1JlY3RhbmdsZSAqdXBkYQogICAgICAgICByZXR1cm4gRUlOQV9UUlVF
OwogICAgIH0KIAotICAgIGlmICghX2V3a190aWxlX21hdHJpeF9zbGljZXJfc2V0dXAodG0sIHVw
ZGF0ZSwgem9vbSwgJnNsaWNlcikpIHsKKyAgICBpZiAoIV9ld2tfdGlsZV9tYXRyaXhfc2xpY2Vy
X3NldHVwKHRpbGVNYXRyaXgsIHVwZGF0ZSwgem9vbSwgJnNsaWNlcikpIHsKICAgICAgICAgRVJS
KCJDb3VsZCBub3Qgc2V0dXAgc2xpY2VyIGZvciB1cGRhdGUgJWQsJWQrJWR4JWQgYXQgem9vbSAl
ZiIsCiAgICAgICAgICAgICB1cGRhdGUtPngsIHVwZGF0ZS0+eSwgdXBkYXRlLT53LCB1cGRhdGUt
PmgsIHpvb20pOwogICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKQEAgLTUxMyw1OSArNTEzLDU5
IEBAIEVpbmFfQm9vbCBld2tfdGlsZV9tYXRyaXhfdXBkYXRlKEV3a19UaWxlX01hdHJpeCAqdG0s
IGNvbnN0IEVpbmFfUmVjdGFuZ2xlICp1cGRhCiAgICAgICAgIGNvbCA9IGluZm8tPmNvbDsKICAg
ICAgICAgcm93ID0gaW5mby0+cm93OwogCi0gICAgICAgIEV3a19UaWxlKiB0ID0gc3RhdGljX2Nh
c3Q8RXdrX1RpbGUqPihlaW5hX21hdHJpeHNwYXJzZV9kYXRhX2lkeF9nZXQodG0tPm1hdHJpeCwg
cm93LCBjb2wpKTsKLSAgICAgICAgaWYgKCF0KQorICAgICAgICBFd2tfVGlsZSogdGlsZSA9IHN0
YXRpY19jYXN0PEV3a19UaWxlKj4oZWluYV9tYXRyaXhzcGFyc2VfZGF0YV9pZHhfZ2V0KHRpbGVN
YXRyaXgtPm1hdHJpeCwgcm93LCBjb2wpKTsKKyAgICAgICAgaWYgKCF0aWxlKQogICAgICAgICAg
ICAgY29udGludWU7CiAKLSAgICAgICAgaWYgKCF0LT51cGRhdGVzICYmICF0LT5zdGF0cy5mdWxs
X3VwZGF0ZSkKLSAgICAgICAgICAgIHRtLT51cGRhdGVzID0gZWluYV9saXN0X2FwcGVuZCh0bS0+
dXBkYXRlcywgdCk7CisgICAgICAgIGlmICghdGlsZS0+dXBkYXRlcyAmJiAhdGlsZS0+c3RhdHMu
ZnVsbF91cGRhdGUpCisgICAgICAgICAgICB0aWxlTWF0cml4LT51cGRhdGVzID0gZWluYV9saXN0
X2FwcGVuZCh0aWxlTWF0cml4LT51cGRhdGVzLCB0aWxlKTsKICAgICAgICAgaWYgKGluZm8tPmZ1
bGwpCi0gICAgICAgICAgICBld2tfdGlsZV91cGRhdGVfZnVsbCh0KTsKKyAgICAgICAgICAgIGV3
a190aWxlX3VwZGF0ZV9mdWxsKHRpbGUpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBld2tf
dGlsZV91cGRhdGVfYXJlYSh0LCAmaW5mby0+cmVjdCk7CisgICAgICAgICAgICBld2tfdGlsZV91
cGRhdGVfYXJlYSh0aWxlLCAmaW5mby0+cmVjdCk7CiAgICAgfQogCiAKICAgICByZXR1cm4gRUlO
QV9UUlVFOwogfQogCi12b2lkIGV3a190aWxlX21hdHJpeF91cGRhdGVzX3Byb2Nlc3MoRXdrX1Rp
bGVfTWF0cml4ICp0bSkKK3ZvaWQgZXdrX3RpbGVfbWF0cml4X3VwZGF0ZXNfcHJvY2VzcyhFd2tf
VGlsZV9NYXRyaXgqIHRpbGVNYXRyaXgpCiB7Ci0gICAgRWluYV9MaXN0ICpsLCAqbF9uZXh0Owor
ICAgIEVpbmFfTGlzdCogbCwgKiBsX25leHQ7CiAgICAgdm9pZCogaXRlbTsKLSAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTih0bSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4o
dGlsZU1hdHJpeCk7CiAKICAgICAvLyBwcm9jZXNzIHVwZGF0ZXMsIHVuZmxhZyB0aWxlcwotICAg
IEVJTkFfTElTVF9GT1JFQUNIX1NBRkUodG0tPnVwZGF0ZXMsIGwsIGxfbmV4dCwgaXRlbSkgewor
ICAgIEVJTkFfTElTVF9GT1JFQUNIX1NBRkUodGlsZU1hdHJpeC0+dXBkYXRlcywgbCwgbF9uZXh0
LCBpdGVtKSB7CiAgICAgICAgIEV3a19UaWxlKiB0aWxlID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGUq
PihpdGVtKTsKLSAgICAgICAgZXdrX3RpbGVfdXBkYXRlc19wcm9jZXNzKHRpbGUsIHRtLT5yZW5k
ZXIuY2IsIHRtLT5yZW5kZXIuZGF0YSk7CisgICAgICAgIGV3a190aWxlX3VwZGF0ZXNfcHJvY2Vz
cyh0aWxlLCB0aWxlTWF0cml4LT5yZW5kZXIuY2IsIHRpbGVNYXRyaXgtPnJlbmRlci5kYXRhKTsK
ICAgICAgICAgaWYgKHRpbGUtPnZpc2libGUpIHsKICAgICAgICAgICAgIGV3a190aWxlX3VwZGF0
ZXNfY2xlYXIodGlsZSk7Ci0gICAgICAgICAgICB0bS0+dXBkYXRlcyA9IGVpbmFfbGlzdF9yZW1v
dmVfbGlzdCh0bS0+dXBkYXRlcywgbCk7CisgICAgICAgICAgICB0aWxlTWF0cml4LT51cGRhdGVz
ID0gZWluYV9saXN0X3JlbW92ZV9saXN0KHRpbGVNYXRyaXgtPnVwZGF0ZXMsIGwpOwogICAgICAg
ICB9CiAgICAgfQogfQogCi12b2lkIGV3a190aWxlX21hdHJpeF91cGRhdGVzX2NsZWFyKEV3a19U
aWxlX01hdHJpeCAqdG0pCit2b2lkIGV3a190aWxlX21hdHJpeF91cGRhdGVzX2NsZWFyKEV3a19U
aWxlX01hdHJpeCogdGlsZU1hdHJpeCkKIHsKICAgICB2b2lkKiBpdGVtOwotICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOKHRtKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0
aWxlTWF0cml4KTsKIAotICAgIEVJTkFfTElTVF9GUkVFKHRtLT51cGRhdGVzLCBpdGVtKQorICAg
IEVJTkFfTElTVF9GUkVFKHRpbGVNYXRyaXgtPnVwZGF0ZXMsIGl0ZW0pCiAgICAgICAgIGV3a190
aWxlX3VwZGF0ZXNfY2xlYXIoc3RhdGljX2Nhc3Q8RXdrX1RpbGUqPihpdGVtKSk7Ci0gICAgdG0t
PnVwZGF0ZXMgPSAwOworICAgIHRpbGVNYXRyaXgtPnVwZGF0ZXMgPSAwOwogfQogCiAvLyByZW1v
dmUgbWUgbGF0ZXIhCi12b2lkIGV3a190aWxlX21hdHJpeF9kYmcoY29uc3QgRXdrX1RpbGVfTWF0
cml4ICp0bSkKK3ZvaWQgZXdrX3RpbGVfbWF0cml4X2RiZyhjb25zdCBFd2tfVGlsZV9NYXRyaXgq
IHRpbGVNYXRyaXgpCiB7Ci0gICAgRWluYV9JdGVyYXRvciAqaXQgPSBlaW5hX21hdHJpeHNwYXJz
ZV9pdGVyYXRvcl9jb21wbGV0ZV9uZXcodG0tPm1hdHJpeCk7Ci0gICAgRWluYV9NYXRyaXhzcGFy
c2VfQ2VsbCAqY2VsbDsKKyAgICBFaW5hX0l0ZXJhdG9yKiBpdCA9IGVpbmFfbWF0cml4c3BhcnNl
X2l0ZXJhdG9yX2NvbXBsZXRlX25ldyh0aWxlTWF0cml4LT5tYXRyaXgpOworICAgIEVpbmFfTWF0
cml4c3BhcnNlX0NlbGwqIGNlbGw7CiAgICAgRWluYV9Cb29sIGxhc3RfZW1wdHkgPSBFSU5BX0ZB
TFNFOwogCiAjaWZkZWYgREVCVUdfTUVNX0xFQUtTCi0gICAgcHJpbnRmKCJFd2tfVGlsZSBNYXRy
aXg6IHRpbGVzWyslIlBSSXU2NCIsLSUiUFJJdTY0IjolIlBSSXU2NCJdICIKLSAgICAgICAgICAg
ImJ5dGVzWyslIlBSSXU2NCIsLSUiUFJJdTY0IjolIlBSSXU2NCJdXG4iLAorICAgIHByaW50Zigi
RXdrX1RpbGUgTWF0cml4OiB0aWxlc1srJSIgUFJJdTY0ICIsLSUiIFBSSXU2NCAiOiUiIFBSSXU2
NCAiXSAiCisgICAgICAgICAgICJieXRlc1srJSIgUFJJdTY0ICIsLSUiIFBSSXU2NCAiOiUiIFBS
SXU2NCAiXVxuIiwKICAgICAgICAgICAgdG0tPnN0YXRzLnRpbGVzLmFsbG9jYXRlZCwgdG0tPnN0
YXRzLnRpbGVzLmZyZWVkLAogICAgICAgICAgICB0bS0+c3RhdHMudGlsZXMuYWxsb2NhdGVkIC0g
dG0tPnN0YXRzLnRpbGVzLmZyZWVkLAogICAgICAgICAgICB0bS0+c3RhdHMuYnl0ZXMuYWxsb2Nh
dGVkLCB0bS0+c3RhdHMuYnl0ZXMuZnJlZWQsCkBAIC01NzgsOCArNTc4LDggQEAgdm9pZCBld2tf
dGlsZV9tYXRyaXhfZGJnKGNvbnN0IEV3a19UaWxlX01hdHJpeCAqdG0pCiAgICAgICAgIHVuc2ln
bmVkIGxvbmcgcm93LCBjb2w7CiAgICAgICAgIGVpbmFfbWF0cml4c3BhcnNlX2NlbGxfcG9zaXRp
b25fZ2V0KGNlbGwsICZyb3csICZjb2wpOwogCi0gICAgICAgIEV3a19UaWxlKiB0ID0gc3RhdGlj
X2Nhc3Q8RXdrX1RpbGUqPihlaW5hX21hdHJpeHNwYXJzZV9jZWxsX2RhdGFfZ2V0KGNlbGwpKTsK
LSAgICAgICAgaWYgKCF0KSB7CisgICAgICAgIEV3a19UaWxlKiB0aWxlID0gc3RhdGljX2Nhc3Q8
RXdrX1RpbGUqPihlaW5hX21hdHJpeHNwYXJzZV9jZWxsX2RhdGFfZ2V0KGNlbGwpKTsKKyAgICAg
ICAgaWYgKCF0aWxlKSB7CiAgICAgICAgICAgICBpZiAoIWxhc3RfZW1wdHkpIHsKICAgICAgICAg
ICAgICAgICBsYXN0X2VtcHR5ID0gRUlOQV9UUlVFOwogICAgICAgICAgICAgICAgIHByaW50Zigi
RW1wdHk6Iik7CkBAIC01OTAsOCArNTkwLDggQEAgdm9pZCBld2tfdGlsZV9tYXRyaXhfZGJnKGNv
bnN0IEV3a19UaWxlX01hdHJpeCAqdG0pCiAgICAgICAgICAgICAgICAgbGFzdF9lbXB0eSA9IEVJ
TkFfRkFMU0U7CiAgICAgICAgICAgICAgICAgcHJpbnRmKCJcbiIpOwogICAgICAgICAgICAgfQot
ICAgICAgICAgICAgcHJpbnRmKCIlM2x1LCUzbHUgJTEwcDoiLCBjb2wsIHJvdywgdCk7Ci0gICAg
ICAgICAgICBwcmludGYoIiBbJTNsdSwlM2x1ICsgJWR4JWQgQCAlMC4zZl0lYyIsIHQtPmNvbCwg
dC0+cm93LCB0LT53LCB0LT5oLCB0LT56b29tLCB0LT52aXNpYmxlID8gJyonOiAnICcpOworICAg
ICAgICAgICAgcHJpbnRmKCIlM2x1LCUzbHUgJTEwcDoiLCBjb2wsIHJvdywgdGlsZSk7CisgICAg
ICAgICAgICBwcmludGYoIiBbJTNsdSwlM2x1ICsgJWR4JWQgQCAlMC4zZl0lYyIsIHRpbGUtPmNv
bCwgdGlsZS0+cm93LCB0aWxlLT53aWR0aCwgdGlsZS0+aGVpZ2h0LCB0aWxlLT56b29tLCB0aWxl
LT52aXNpYmxlID8gJyonIDogJyAnKTsKICAgICAgICAgICAgIHByaW50ZigiXG4iKTsKICAgICAg
ICAgfQogICAgIH0KQEAgLTU5OSw3ICs1OTksNyBAQCB2b2lkIGV3a190aWxlX21hdHJpeF9kYmco
Y29uc3QgRXdrX1RpbGVfTWF0cml4ICp0bSkKICAgICAgICAgcHJpbnRmKCJcbiIpOwogICAgIGVp
bmFfaXRlcmF0b3JfZnJlZShpdCk7CiAKLSAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfZGJnKHRt
LT50dWMpOworICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9kYmcodGlsZU1hdHJpeC0+dHVjKTsK
IH0KIAogLyoqCkBAIC02MTEsMTIgKzYxMSwxMiBAQCB2b2lkIGV3a190aWxlX21hdHJpeF9kYmco
Y29uc3QgRXdrX1RpbGVfTWF0cml4ICp0bSkKICAqCiAgKiBAc2VlIGV3a190aWxlX21hdHJpeF90
aGF3KCkKICAqLwotdm9pZCBld2tfdGlsZV9tYXRyaXhfZnJlZXplKEV3a19UaWxlX01hdHJpeCAq
dG0pCit2b2lkIGV3a190aWxlX21hdHJpeF9mcmVlemUoRXdrX1RpbGVfTWF0cml4KiB0aWxlTWF0
cml4KQogewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHRtKTsKLSAgICBpZiAoIXRt
LT5mcm96ZW4pCi0gICAgICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9mcmVlemUodG0tPnR1Yyk7
Ci0gICAgdG0tPmZyb3plbisrOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHRpbGVN
YXRyaXgpOworICAgIGlmICghdGlsZU1hdHJpeC0+ZnJvemVuKQorICAgICAgICBld2tfdGlsZV91
bnVzZWRfY2FjaGVfZnJlZXplKHRpbGVNYXRyaXgtPnR1Yyk7CisgICAgdGlsZU1hdHJpeC0+ZnJv
emVuKys7CiB9CiAKIC8qKgpAQCAtNjI1LDE1ICs2MjUsMTUgQEAgdm9pZCBld2tfdGlsZV9tYXRy
aXhfZnJlZXplKEV3a19UaWxlX01hdHJpeCAqdG0pCiAgKiBJZiB0aGlzIGlzIHRoZSBsYXN0IGNv
dW50ZXJwYXJ0IG9mIGZyZWV6ZSwgdGhlbiBtYWludGVuYW5jZSB0YXNrcwogICogd2lsbCBydW4g
aW1tZWRpYXRlbHkuCiAgKi8KLXZvaWQgZXdrX3RpbGVfbWF0cml4X3RoYXcoRXdrX1RpbGVfTWF0
cml4ICp0bSkKK3ZvaWQgZXdrX3RpbGVfbWF0cml4X3RoYXcoRXdrX1RpbGVfTWF0cml4KiB0aWxl
TWF0cml4KQogewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHRtKTsKLSAgICBpZiAo
IXRtLT5mcm96ZW4pIHsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0aWxlTWF0cml4
KTsKKyAgICBpZiAoIXRpbGVNYXRyaXgtPmZyb3plbikgewogICAgICAgICBFUlIoInRoYXdpbmcg
bW9yZSB0aGFuIGZyZWV6aW5nISIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgdG0t
PmZyb3plbi0tOwotICAgIGlmICghdG0tPmZyb3plbikKLSAgICAgICAgZXdrX3RpbGVfdW51c2Vk
X2NhY2hlX3RoYXcodG0tPnR1Yyk7CisgICAgdGlsZU1hdHJpeC0+ZnJvemVuLS07CisgICAgaWYg
KCF0aWxlTWF0cml4LT5mcm96ZW4pCisgICAgICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV90aGF3
KHRpbGVNYXRyaXgtPnR1Yyk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2sv
ZXdrX3RpbGVkX21hdHJpeC5oIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a190aWxlZF9tYXRy
aXguaAppbmRleCBjNDM3YzM3YmM5Mjk2Nzg4YWE1ZjM4MTczMjVkMmE0ZjFhODg1YWE0Li5kM2Rj
NTE3MTI1NjIzMDQ3NjgwYmY3NmQ5NjJkNGMwNGZmYzIyYThiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX21hdHJpeC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZs
L2V3ay9ld2tfdGlsZWRfbWF0cml4LmgKQEAgLTUyLDcgKzUyLDcgQEAgdm9pZCBld2tfdGlsZV9t
YXRyaXhfdGhhdyhFd2tfVGlsZV9NYXRyaXgqIHRtKTsKIC8vIHJlbW92ZSBtZSEKIHZvaWQgZXdr
X3RpbGVfbWF0cml4X2RiZyhjb25zdCBFd2tfVGlsZV9NYXRyaXgqIHRtKTsKIHZvaWQgZXdrX3Rp
bGVfdW51c2VkX2NhY2hlX2RiZyhjb25zdCBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHR1Yyk7Ci12
b2lkIGV3a190aWxlX2FjY291bnRpbmdfZGJnKHZvaWQpOwordm9pZCBld2tfdGlsZV9hY2NvdW50
aW5nX2RiZygpOwogCiAKICNlbmRpZiAvLyBld2tfdGlsZWRfbWF0cml4X2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfbW9kZWwuY3BwIGIvU291cmNlL1dlYktp
dC9lZmwvZXdrL2V3a190aWxlZF9tb2RlbC5jcHAKaW5kZXggNjE2ODU3Mjk0MDg5OWJkYmU4NzFk
NjMwMWZmZGNiMTRhYzQ1M2JiZC4uNTI3ZTJiNWZjYjJhNjg0NGY3NWQ3ZGY4MzY3Zjc5OWJlYzgx
NjRkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a190aWxlZF9tb2RlbC5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a190aWxlZF9tb2RlbC5jcHAKQEAgLTM2
LDcgKzM2LDcgQEAKICNpbmNsdWRlIDxzeXMvdGltZS5oPgogI2VuZGlmCiAKLSNkZWZpbmUgSURY
KGNvbCwgcm93LCByb3dzcGFuKSAoY29sICsgKHJvdyAqIHJvd3NwYW4pKQorI2RlZmluZSBJRFgo
Y29sLCByb3csIHJvd3NwYW4pIChjb2wgKyAocm93aWR0aCAqIHJvd3NwYW4pKQogCiAjaWZkZWYg
REVCVUdfTUVNX0xFQUtTCiBzdGF0aWMgdWludDY0X3QgdGlsZXNfYWxsb2NhdGVkID0gMDsKQEAg
LTUzLDE1ICs1MywxNSBAQCBzdHJ1Y3QgdGlsZV9hY2NvdW50IHsKIH07CiAKIHN0YXRpYyBzaXpl
X3QgYWNjb3VudGluZ19sZW4gPSAwOwotc3RhdGljIHN0cnVjdCB0aWxlX2FjY291bnQgKmFjY291
bnRpbmcgPSAwOworc3RhdGljIHN0cnVjdCB0aWxlX2FjY291bnQqIGFjY291bnRpbmcgPSAwOwog
Ci1zdGF0aWMgaW5saW5lIHN0cnVjdCB0aWxlX2FjY291bnQgKl9ld2tfdGlsZV9hY2NvdW50X2dl
dChjb25zdCBFd2tfVGlsZSAqdCkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHRpbGVfYWNjb3VudCog
X2V3a190aWxlX2FjY291bnRfZ2V0KGNvbnN0IEV3a19UaWxlKiB0aWxlKQogewotICAgIHN0cnVj
dCB0aWxlX2FjY291bnQgKmFjYzsKKyAgICBzdHJ1Y3QgdGlsZV9hY2NvdW50KiBhY2M7CiAgICAg
c2l6ZV90IGk7CiAKICAgICBmb3IgKGkgPSAwOyBpIDwgYWNjb3VudGluZ19sZW47IGkrKykgewot
ICAgICAgICBpZiAoYWNjb3VudGluZ1tpXS5zaXplID09IHQtPncpCisgICAgICAgIGlmIChhY2Nv
dW50aW5nW2ldLnNpemUgPT0gdGlsZS0+d2lkdGgpCiAgICAgICAgICAgICByZXR1cm4gYWNjb3Vu
dGluZyArIGk7CiAgICAgfQogCkBAIC02OSw3ICs2OSw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0
IHRpbGVfYWNjb3VudCAqX2V3a190aWxlX2FjY291bnRfZ2V0KGNvbnN0IEV3a19UaWxlICp0KQog
ICAgIFJFQUxMT0NfT1JfT09NX1JFVChhY2NvdW50aW5nLCBpLCAwKTsKIAogICAgIGFjYyA9IGFj
Y291bnRpbmcgKyBhY2NvdW50aW5nX2xlbjsKLSAgICBhY2MtPnNpemUgPSB0LT53OworICAgIGFj
Yy0+c2l6ZSA9IHRpbGUtPndpZHRoOwogICAgIGFjYy0+dGlsZXMuYWxsb2NhdGVkID0gMDsKICAg
ICBhY2MtPnRpbGVzLmZyZWVkID0gMDsKICAgICBhY2MtPmJ5dGVzLmFsbG9jYXRlZCA9IDA7CkBA
IC04MCw0MCArODAsNDAgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgdGlsZV9hY2NvdW50ICpfZXdr
X3RpbGVfYWNjb3VudF9nZXQoY29uc3QgRXdrX1RpbGUgKnQpCiAgICAgcmV0dXJuIGFjYzsKIH0K
IAotc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZV9hY2NvdW50X2FsbG9jYXRlZChjb25zdCBF
d2tfVGlsZSAqdCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVfYWNjb3VudF9hbGxvY2F0
ZWQoY29uc3QgRXdrX1RpbGUqIHRpbGUpCiB7Ci0gICAgc3RydWN0IHRpbGVfYWNjb3VudCAqYWNj
ID0gX2V3a190aWxlX2FjY291bnRfZ2V0KHQpOworICAgIHN0cnVjdCB0aWxlX2FjY291bnQqIGFj
YyA9IF9ld2tfdGlsZV9hY2NvdW50X2dldCh0aWxlKTsKICAgICBpZiAoIWFjYykKICAgICAgICAg
cmV0dXJuOwotICAgIGFjYy0+Ynl0ZXMuYWxsb2NhdGVkICs9IHQtPmJ5dGVzOworICAgIGFjYy0+
Ynl0ZXMuYWxsb2NhdGVkICs9IHRpbGUtPmJ5dGVzOwogICAgIGFjYy0+dGlsZXMuYWxsb2NhdGVk
Kys7CiAKLSAgICBieXRlc19hbGxvY2F0ZWQgKz0gdC0+Ynl0ZXM7CisgICAgYnl0ZXNfYWxsb2Nh
dGVkICs9IHRpbGUtPmJ5dGVzOwogICAgIHRpbGVzX2FsbG9jYXRlZCsrOwogfQogCi1zdGF0aWMg
aW5saW5lIHZvaWQgX2V3a190aWxlX2FjY291bnRfZnJlZWQoY29uc3QgRXdrX1RpbGUgKnQpCitz
dGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlX2FjY291bnRfZnJlZWQoY29uc3QgRXdrX1RpbGUq
IHRpbGUpCiB7Ci0gICAgc3RydWN0IHRpbGVfYWNjb3VudCAqYWNjID0gX2V3a190aWxlX2FjY291
bnRfZ2V0KHQpOworICAgIHN0cnVjdCB0aWxlX2FjY291bnQqIGFjYyA9IF9ld2tfdGlsZV9hY2Nv
dW50X2dldCh0aWxlKTsKICAgICBpZiAoIWFjYykKICAgICAgICAgcmV0dXJuOwogCi0gICAgYWNj
LT5ieXRlcy5mcmVlZCArPSB0LT5ieXRlczsKKyAgICBhY2MtPmJ5dGVzLmZyZWVkICs9IHRpbGUt
PmJ5dGVzOwogICAgIGFjYy0+dGlsZXMuZnJlZWQrKzsKIAotICAgIGJ5dGVzX2ZyZWVkICs9IHQt
PmJ5dGVzOworICAgIGJ5dGVzX2ZyZWVkICs9IHRpbGUtPmJ5dGVzOwogICAgIHRpbGVzX2ZyZWVk
Kys7CiB9CiAKLXZvaWQgZXdrX3RpbGVfYWNjb3VudGluZ19kYmcodm9pZCkKK3ZvaWQgZXdrX3Rp
bGVfYWNjb3VudGluZ19kYmcoKQogewotICAgIHN0cnVjdCB0aWxlX2FjY291bnQgKmFjYzsKLSAg
ICBzdHJ1Y3QgdGlsZV9hY2NvdW50ICphY2NfZW5kOworICAgIHN0cnVjdCB0aWxlX2FjY291bnQq
IGFjYzsKKyAgICBzdHJ1Y3QgdGlsZV9hY2NvdW50KiBhY2NfZW5kOwogCi0gICAgcHJpbnRmKCJU
SUxFIEJBTEFOQ0U6IHRpbGVzWyslIlBSSXU2NCIsLSUiUFJJdTY0IjolIlBSSXU2NCJdICIKLSAg
ICAgICAgICAgImJ5dGVzWyslIlBSSXU2NCIsLSUiUFJJdTY0IjolIlBSSXU2NCJdXG4iLAotICAg
ICAgICAgICAgdGlsZXNfYWxsb2NhdGVkLCB0aWxlc19mcmVlZCwgdGlsZXNfYWxsb2NhdGVkIC0g
dGlsZXNfZnJlZWQsCi0gICAgICAgICAgICBieXRlc19hbGxvY2F0ZWQsIGJ5dGVzX2ZyZWVkLCBi
eXRlc19hbGxvY2F0ZWQgLSBieXRlc19mcmVlZCk7CisgICAgcHJpbnRmKCJUSUxFIEJBTEFOQ0U6
IHRpbGVzWyslIiBQUkl1NjQgIiwtJSIgUFJJdTY0ICI6JSIgUFJJdTY0ICJdICIKKyAgICAgICAg
ICAgImJ5dGVzWyslIiBQUkl1NjQgIiwtJSIgUFJJdTY0ICI6JSIgUFJJdTY0ICJdXG4iLAorICAg
ICAgICAgICB0aWxlc19hbGxvY2F0ZWQsIHRpbGVzX2ZyZWVkLCB0aWxlc19hbGxvY2F0ZWQgLSB0
aWxlc19mcmVlZCwKKyAgICAgICAgICAgYnl0ZXNfYWxsb2NhdGVkLCBieXRlc19mcmVlZCwgYnl0
ZXNfYWxsb2NhdGVkIC0gYnl0ZXNfZnJlZWQpOwogCiAgICAgaWYgKCFhY2NvdW50aW5nX2xlbikK
ICAgICAgICAgcmV0dXJuOwpAQCAtMTI3LDggKzEyNyw4IEBAIHZvaWQgZXdrX3RpbGVfYWNjb3Vu
dGluZ19kYmcodm9pZCkKICAgICAgICAgdGlsZXMgPSBhY2MtPnRpbGVzLmFsbG9jYXRlZCAtIGFj
Yy0+dGlsZXMuZnJlZWQ7CiAgICAgICAgIGJ5dGVzID0gYWNjLT5ieXRlcy5hbGxvY2F0ZWQgLSBh
Y2MtPmJ5dGVzLmZyZWVkOwogCi0gICAgICAgIHByaW50ZigiICAgJTRkOiB0aWxlc1srJTQiUFJJ
dTY0IiwtJTQiUFJJdTY0IjolNCJQUkl1NjQiXSAiCi0gICAgICAgICAgICAgICAiYnl0ZXNbKyU4
IlBSSXU2NCIsLSU4IlBSSXU2NCI6JTgiUFJJdTY0Il0lc1xuIiwKKyAgICAgICAgcHJpbnRmKCIg
ICAlNGQ6IHRpbGVzWyslNCIgUFJJdTY0ICIsLSU0IiBQUkl1NjQgIjolNCIgUFJJdTY0ICJdICIK
KyAgICAgICAgICAgICAgICJieXRlc1srJTgiIFBSSXU2NCAiLC0lOCIgUFJJdTY0ICI6JTgiIFBS
SXU2NCAiXSVzXG4iLAogICAgICAgICAgICAgICAgYWNjLT5zaXplLAogICAgICAgICAgICAgICAg
YWNjLT50aWxlcy5hbGxvY2F0ZWQsIGFjYy0+dGlsZXMuZnJlZWQsIHRpbGVzLAogICAgICAgICAg
ICAgICAgYWNjLT5ieXRlcy5hbGxvY2F0ZWQsIGFjYy0+Ynl0ZXMuZnJlZWQsIGJ5dGVzLApAQCAt
MTM4LDI1ICsxMzgsMjUgQEAgdm9pZCBld2tfdGlsZV9hY2NvdW50aW5nX2RiZyh2b2lkKQogfQog
I2Vsc2UKIAotc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZV9hY2NvdW50X2FsbG9jYXRlZChj
b25zdCBFd2tfVGlsZSAqdCkgeyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlX2FjY291
bnRfZnJlZWQoY29uc3QgRXdrX1RpbGUgKnQpIHsgfQorc3RhdGljIGlubGluZSB2b2lkIF9ld2tf
dGlsZV9hY2NvdW50X2FsbG9jYXRlZChjb25zdCBFd2tfVGlsZSogdGlsZSkgeyB9CitzdGF0aWMg
aW5saW5lIHZvaWQgX2V3a190aWxlX2FjY291bnRfZnJlZWQoY29uc3QgRXdrX1RpbGUqIHRpbGUp
IHsgfQogCi12b2lkIGV3a190aWxlX2FjY291bnRpbmdfZGJnKHZvaWQpCit2b2lkIGV3a190aWxl
X2FjY291bnRpbmdfZGJnKCkKIHsKICAgICBwcmludGYoImNvbXBpbGUgd2Via2l0IHdpdGggREVC
VUdfTUVNX0xFQUtTIGRlZmluZWQhXG4iKTsKIH0KICNlbmRpZgogCi1zdGF0aWMgaW5saW5lIHZv
aWQgX2V3a190aWxlX3BhaW50X3JnYjg4OChFd2tfVGlsZSAqdCwgdWludDhfdCByLCB1aW50OF90
IGcsIHVpbnQ4X3QgYikKK3N0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVfcGFpbnRfcmdiODg4
KEV3a19UaWxlKiB0aWxlLCB1aW50OF90IHJlZCwgdWludDhfdCBncmVlbiwgdWludDhfdCBibHVl
KQogewotICAgIHVpbnQzMl90ICpkc3QzMiwgKmRzdDMyX2VuZCwgYzE7Ci0gICAgdWludDY0X3Qg
KmRzdDY0LCAqZHN0NjRfZW5kLCBjMjsKKyAgICB1aW50MzJfdCogZHN0MzIsICogZHN0MzJfZW5k
LCBjMTsKKyAgICB1aW50NjRfdCogZHN0NjQsICogZHN0NjRfZW5kLCBjMjsKIAotICAgIGMxID0g
MHhmZjAwMDAwMCB8ICgodWludDMyX3QpciA8PCAxNikgfCAoKHVpbnQzMl90KWcgPDwgOCkgfCBi
OworICAgIGMxID0gMHhmZjAwMDAwMCB8ICgodWludDMyX3QpcmVkIDw8IDE2KSB8ICgodWludDMy
X3QpZ3JlZW4gPDwgOCkgfCBibHVlOwogICAgIGMyID0gKCh1aW50NjRfdCljMSA8PCAzMikgfCBj
MTsKIAotICAgIGRzdDY0ID0gKHVpbnQ2NF90ICopdC0+cGl4ZWxzOwotICAgIGRzdDY0X2VuZCA9
IGRzdDY0ICsgKCh0LT5ieXRlcyAvIDgpICYgfjcpOworICAgIGRzdDY0ID0gKHVpbnQ2NF90Kil0
aWxlLT5waXhlbHM7CisgICAgZHN0NjRfZW5kID0gZHN0NjQgKyAoKHRpbGUtPmJ5dGVzIC8gOCkg
JiB+Nyk7CiAgICAgZm9yICg7IGRzdDY0IDwgZHN0NjRfZW5kOyBkc3Q2NCArPSA4KSB7CiAgICAg
ICAgIC8qIFRPRE86IEFSTSBhZGQgcGxkIG9yIE5FT04gaW5zdHJ1Y3Rpb25zICovCiAgICAgICAg
IGRzdDY0WzBdID0gYzI7CkBAIC0xNjksMjYgKzE2OSwyNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQg
X2V3a190aWxlX3BhaW50X3JnYjg4OChFd2tfVGlsZSAqdCwgdWludDhfdCByLCB1aW50OF90IGcs
IHVpbgogICAgICAgICBkc3Q2NFs3XSA9IGMyOwogICAgIH0KIAotICAgIGRzdDMyID0gKHVpbnQz
Ml90ICopZHN0NjRfZW5kOwotICAgIGRzdDMyX2VuZCA9ICh1aW50MzJfdCAqKSh0LT5waXhlbHMg
KyB0LT5ieXRlcyk7CisgICAgZHN0MzIgPSAodWludDMyX3QqKWRzdDY0X2VuZDsKKyAgICBkc3Qz
Ml9lbmQgPSAodWludDMyX3QqKSh0aWxlLT5waXhlbHMgKyB0aWxlLT5ieXRlcyk7CiAgICAgZm9y
ICg7IGRzdDMyIDwgZHN0MzJfZW5kOyBkc3QzMisrKQogICAgICAgICAqZHN0MzIgPSBjMTsKIH0K
IAotc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZV9wYWludF9yZ2I1NjUoRXdrX1RpbGUgKnQs
IHVpbnQ4X3QgciwgdWludDhfdCBnLCB1aW50OF90IGIpCitzdGF0aWMgaW5saW5lIHZvaWQgX2V3
a190aWxlX3BhaW50X3JnYjU2NShFd2tfVGlsZSogdGlsZSwgdWludDhfdCByZWQsIHVpbnQ4X3Qg
Z3JlZW4sIHVpbnQ4X3QgYmx1ZSkKIHsKLSAgICB1aW50MTZfdCAqZHN0MTYsICpkc3QxNl9lbmQs
IGMxOwotICAgIHVpbnQ2NF90ICpkc3Q2NCwgKmRzdDY0X2VuZCwgYzI7CisgICAgdWludDE2X3Qq
IGRzdDE2LCAqIGRzdDE2X2VuZCwgYzE7CisgICAgdWludDY0X3QqIGRzdDY0LCAqIGRzdDY0X2Vu
ZCwgYzI7CiAKLSAgICBjMSA9ICgoKChyID4+IDMpICYgMHgxZikgPDwgMTEpIHwKLSAgICAgICAg
ICAoKChnID4+IDIpICYgMHgzZikgPDwgNSkgfAotICAgICAgICAgICgoYiA+PiAzKSAmIDB4MWYp
KTsKKyAgICBjMSA9ICgoKChyZWQgPj4gMykgJiAweDFmKSA8PCAxMSkgfAorICAgICAgICAgICgo
KGdyZWVuID4+IDIpICYgMHgzZikgPDwgNSkgfAorICAgICAgICAgICgoYmx1ZSA+PiAzKSAmIDB4
MWYpKTsKIAogICAgIGMyID0gKCgodWludDY0X3QpYzEgPDwgNDgpIHwgKCh1aW50NjRfdCljMSA8
PCAzMikgfAogICAgICAgICAgICgodWludDY0X3QpYzEgPDwgMTYpIHwgYzEpOwogCi0gICAgZHN0
NjQgPSAodWludDY0X3QgKil0LT5waXhlbHM7Ci0gICAgZHN0NjRfZW5kID0gZHN0NjQgKyAoKHQt
PmJ5dGVzIC8gOCkgJiB+Nyk7CisgICAgZHN0NjQgPSAodWludDY0X3QqKXRpbGUtPnBpeGVsczsK
KyAgICBkc3Q2NF9lbmQgPSBkc3Q2NCArICgodGlsZS0+Ynl0ZXMgLyA4KSAmIH43KTsKICAgICBm
b3IgKDsgZHN0NjQgPCBkc3Q2NF9lbmQ7IGRzdDY0ICs9IDgpIHsKICAgICAgICAgLyogVE9ETzog
QVJNIGFkZCBwbGQgb3IgTkVPTiBpbnN0cnVjdGlvbnMgKi8KICAgICAgICAgZHN0NjRbMF0gPSBj
MjsKQEAgLTIwMSwyMCArMjAxLDIwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVfcGFp
bnRfcmdiNTY1KEV3a19UaWxlICp0LCB1aW50OF90IHIsIHVpbnQ4X3QgZywgdWluCiAgICAgICAg
IGRzdDY0WzddID0gYzI7CiAgICAgfQogCi0gICAgZHN0MTYgPSAodWludDE2X3QgKilkc3QxNl9l
bmQ7Ci0gICAgZHN0MTZfZW5kID0gKHVpbnQxNl90ICopKHQtPnBpeGVscyArIHQtPmJ5dGVzKTsK
KyAgICBkc3QxNiA9ICh1aW50MTZfdCopZHN0MTZfZW5kOworICAgIGRzdDE2X2VuZCA9ICh1aW50
MTZfdCopKHRpbGUtPnBpeGVscyArIHRpbGUtPmJ5dGVzKTsKICAgICBmb3IgKDsgZHN0MTYgPCBk
c3QxNl9lbmQ7IGRzdDE2KyspCiAgICAgICAgICpkc3QxNiA9IGMxOwogfQogCi1zdGF0aWMgaW5s
aW5lIHZvaWQgX2V3a190aWxlX3BhaW50KEV3a19UaWxlICp0LCB1aW50OF90IHIsIHVpbnQ4X3Qg
ZywgdWludDhfdCBiKQorc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZV9wYWludChFd2tfVGls
ZSogdGlsZSwgdWludDhfdCByZWQsIHVpbnQ4X3QgZ3JlZW4sIHVpbnQ4X3QgYmx1ZSkKIHsKLSAg
ICBpZiAodC0+Y3NwYWNlID09IEVWQVNfQ09MT1JTUEFDRV9BUkdCODg4OCkKLSAgICAgICAgX2V3
a190aWxlX3BhaW50X3JnYjg4OCh0LCByLCBnLCBiKTsKLSAgICBlbHNlIGlmICh0LT5jc3BhY2Ug
PT0gRVZBU19DT0xPUlNQQUNFX1JHQjU2NV9BNVApCi0gICAgICAgIF9ld2tfdGlsZV9wYWludF9y
Z2I1NjUodCwgciwgZywgYik7CisgICAgaWYgKHRpbGUtPmNzcGFjZSA9PSBFVkFTX0NPTE9SU1BB
Q0VfQVJHQjg4ODgpCisgICAgICAgIF9ld2tfdGlsZV9wYWludF9yZ2I4ODgodGlsZSwgcmVkLCBn
cmVlbiwgYmx1ZSk7CisgICAgZWxzZSBpZiAodGlsZS0+Y3NwYWNlID09IEVWQVNfQ09MT1JTUEFD
RV9SR0I1NjVfQTVQKQorICAgICAgICBfZXdrX3RpbGVfcGFpbnRfcmdiNTY1KHRpbGUsIHJlZCwg
Z3JlZW4sIGJsdWUpOwogICAgIGVsc2UKLSAgICAgICAgRVJSKCJ1bmtub3duIGNvbG9yIHNwYWNl
OiAlZCIsIHQtPmNzcGFjZSk7CisgICAgICAgIEVSUigidW5rbm93biBjb2xvciBzcGFjZTogJWQi
LCB0aWxlLT5jc3BhY2UpOwogfQogCiAvKioKQEAgLTIzMiwxNTQgKzIzMiwxNTQgQEAgc3RhdGlj
IGlubGluZSB2b2lkIF9ld2tfdGlsZV9wYWludChFd2tfVGlsZSAqdCwgdWludDhfdCByLCB1aW50
OF90IGcsIHVpbnQ4X3QgYikKICAqIGV3a190aWxlX3VwZGF0ZXNfY2xlYXIoKSB0byBjaGFuZ2Ug
QGMgc3RhdHMubWlzc2VzLAogICogQGMgc3RhdHMuZnVsbF91cGRhdGUgYW5kIEBjIHVwZGF0ZXMu
CiAgKi8KLUV3a19UaWxlICpld2tfdGlsZV9uZXcoRXZhcyAqZXZhcywgRXZhc19Db29yZCB3LCBF
dmFzX0Nvb3JkIGgsIGZsb2F0IHpvb20sIEV2YXNfQ29sb3JzcGFjZSBjc3BhY2UpCitFd2tfVGls
ZSogZXdrX3RpbGVfbmV3KEV2YXMqIGV2YXMsIEV2YXNfQ29vcmQgd2lkdGgsIEV2YXNfQ29vcmQg
aGVpZ2h0LCBmbG9hdCB6b29tLCBFdmFzX0NvbG9yc3BhY2UgY29sb3JTcGFjZSkKIHsKLSAgICBF
dmFzX0Nvb3JkICplYzsKLSAgICBFdmFzX0NvbG9yc3BhY2UgKmVjczsKLSAgICBmbG9hdCAqZjsK
LSAgICBzaXplX3QgKnM7Ci0gICAgRXdrX1RpbGUgKnQ7CisgICAgRXZhc19Db29yZCogZWM7Cisg
ICAgRXZhc19Db2xvcnNwYWNlKiBlY3M7CisgICAgZmxvYXQqIGY7CisgICAgc2l6ZV90KiBzOwor
ICAgIEV3a19UaWxlKiB0aWxlOwogICAgIHVuc2lnbmVkIGludCBhcmVhOwogICAgIHNpemVfdCBi
eXRlczsKICAgICBjYWlyb19mb3JtYXRfdCBmb3JtYXQ7CiAgICAgY2Fpcm9fc3RhdHVzX3Qgc3Rh
dHVzOwogICAgIGludCBzdHJpZGU7Ci0gICAgRWNvcmVfRXZhcyAqZWU7Ci0gICAgY29uc3QgY2hh
ciAqZW5naW5lOworICAgIEVjb3JlX0V2YXMqIGVlOworICAgIGNvbnN0IGNoYXIqIGVuZ2luZTsK
IAotICAgIGFyZWEgPSB3ICogaDsKKyAgICBhcmVhID0gd2lkdGggKiBoZWlnaHQ7CiAKLSAgICBp
ZiAoY3NwYWNlID09IEVWQVNfQ09MT1JTUEFDRV9BUkdCODg4OCkgeworICAgIGlmIChjb2xvclNw
YWNlID09IEVWQVNfQ09MT1JTUEFDRV9BUkdCODg4OCkgewogICAgICAgICBieXRlcyA9IGFyZWEg
KiA0OwotICAgICAgICBzdHJpZGUgPSB3ICogNDsKKyAgICAgICAgc3RyaWRlID0gd2lkdGggKiA0
OwogICAgICAgICBmb3JtYXQgPSBDQUlST19GT1JNQVRfQVJHQjMyOwotICAgIH0gZWxzZSBpZiAo
Y3NwYWNlID09IEVWQVNfQ09MT1JTUEFDRV9SR0I1NjVfQTVQKSB7CisgICAgfSBlbHNlIGlmIChj
b2xvclNwYWNlID09IEVWQVNfQ09MT1JTUEFDRV9SR0I1NjVfQTVQKSB7CiAgICAgICAgIGJ5dGVz
ID0gYXJlYSAqIDI7Ci0gICAgICAgIHN0cmlkZSA9IHcgKiAyOworICAgICAgICBzdHJpZGUgPSB3
aWR0aCAqIDI7CiAgICAgICAgIGZvcm1hdCA9IENBSVJPX0ZPUk1BVF9SR0IxNl81NjU7CiAgICAg
fSBlbHNlIHsKLSAgICAgICAgRVJSKCJ1bmtub3duIGNvbG9yIHNwYWNlOiAlZCIsIGNzcGFjZSk7
CisgICAgICAgIEVSUigidW5rbm93biBjb2xvciBzcGFjZTogJWQiLCBjb2xvclNwYWNlKTsKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgREJHKCJzaXplOiAlZHglZCAoJWQpLCB6b29t
OiAlZiwgY3NwYWNlPSVkIiwgdywgaCwgYXJlYSwgKGRvdWJsZSl6b29tLCBjc3BhY2UpOworICAg
IERCRygic2l6ZTogJWR4JWQgKCVkKSwgem9vbTogJWYsIGNzcGFjZT0lZCIsIHdpZHRoLCBoZWln
aHQsIGFyZWEsIChkb3VibGUpem9vbSwgY29sb3JTcGFjZSk7CiAKLSAgICB0ID0gc3RhdGljX2Nh
c3Q8RXdrX1RpbGUqPihtYWxsb2Moc2l6ZW9mKEV3a19UaWxlKSkpOwotICAgIGlmICghdCkKKyAg
ICB0aWxlID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGUqPihtYWxsb2Moc2l6ZW9mKEV3a19UaWxlKSkp
OworICAgIGlmICghdGlsZSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICB0LT5pbWFnZSA9IGV2
YXNfb2JqZWN0X2ltYWdlX2FkZChldmFzKTsKKyAgICB0aWxlLT5pbWFnZSA9IGV2YXNfb2JqZWN0
X2ltYWdlX2FkZChldmFzKTsKIAogICAgIGVlID0gZWNvcmVfZXZhc19lY29yZV9ldmFzX2dldChl
dmFzKTsKICAgICBlbmdpbmUgPSBlY29yZV9ldmFzX2VuZ2luZV9uYW1lX2dldChlZSk7CiAgICAg
aWYgKGVuZ2luZSAmJiAhc3RyY21wKGVuZ2luZSwgIm9wZW5nbF94MTEiKSkKLSAgICAgICAgZXZh
c19vYmplY3RfaW1hZ2VfY29udGVudF9oaW50X3NldCh0LT5pbWFnZSwgRVZBU19JTUFHRV9DT05U
RU5UX0hJTlRfRFlOQU1JQyk7CisgICAgICAgIGV2YXNfb2JqZWN0X2ltYWdlX2NvbnRlbnRfaGlu
dF9zZXQodGlsZS0+aW1hZ2UsIEVWQVNfSU1BR0VfQ09OVEVOVF9ISU5UX0RZTkFNSUMpOwogCi0g
ICAgdC0+dmlzaWJsZSA9IDA7Ci0gICAgdC0+dXBkYXRlcyA9IDA7CisgICAgdGlsZS0+dmlzaWJs
ZSA9IDA7CisgICAgdGlsZS0+dXBkYXRlcyA9IDA7CiAKLSAgICBtZW1zZXQoJnQtPnN0YXRzLCAw
LCBzaXplb2YoRXdrX1RpbGVfU3RhdHMpKTsKLSAgICB0LT5zdGF0cy5hcmVhID0gYXJlYTsKKyAg
ICBtZW1zZXQoJnRpbGUtPnN0YXRzLCAwLCBzaXplb2YoRXdrX1RpbGVfU3RhdHMpKTsKKyAgICB0
aWxlLT5zdGF0cy5hcmVhID0gYXJlYTsKIAogICAgIC8qIHVnbHksIGJ1dCBsZXQncyBhdm9pZCBh
dCBhbGwgY29zdHMgaGF2aW5nIHVzZXJzIHRvIG1vZGlmeSB0aG9zZSAqLwotICAgIGVjID0gKEV2
YXNfQ29vcmQgKikmdC0+dzsKLSAgICAqZWMgPSB3OworICAgIGVjID0gKEV2YXNfQ29vcmQqKSZ0
aWxlLT53aWR0aDsKKyAgICAqZWMgPSB3aWR0aDsKIAotICAgIGVjID0gKEV2YXNfQ29vcmQgKikm
dC0+aDsKLSAgICAqZWMgPSBoOworICAgIGVjID0gKEV2YXNfQ29vcmQqKSZ0aWxlLT5oZWlnaHQ7
CisgICAgKmVjID0gaGVpZ2h0OwogCi0gICAgZWNzID0gKEV2YXNfQ29sb3JzcGFjZSAqKSZ0LT5j
c3BhY2U7Ci0gICAgKmVjcyA9IGNzcGFjZTsKKyAgICBlY3MgPSAoRXZhc19Db2xvcnNwYWNlKikm
dGlsZS0+Y3NwYWNlOworICAgICplY3MgPSBjb2xvclNwYWNlOwogCi0gICAgZiA9IChmbG9hdCAq
KSZ0LT56b29tOworICAgIGYgPSAoZmxvYXQqKSZ0aWxlLT56b29tOwogICAgICpmID0gem9vbTsK
IAotICAgIHMgPSAoc2l6ZV90ICopJnQtPmJ5dGVzOworICAgIHMgPSAoc2l6ZV90KikmdGlsZS0+
Ynl0ZXM7CiAgICAgKnMgPSBieXRlczsKIAotICAgIGV2YXNfb2JqZWN0X2ltYWdlX3NpemVfc2V0
KHQtPmltYWdlLCB0LT53LCB0LT5oKTsKLSAgICBldmFzX29iamVjdF9pbWFnZV9jb2xvcnNwYWNl
X3NldCh0LT5pbWFnZSwgdC0+Y3NwYWNlKTsKLSAgICB0LT5waXhlbHMgPSBzdGF0aWNfY2FzdDx1
aW50OF90Kj4oZXZhc19vYmplY3RfaW1hZ2VfZGF0YV9nZXQodC0+aW1hZ2UsIEVJTkFfVFJVRSkp
OwotICAgIHQtPnN1cmZhY2UgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YSh0
LT5waXhlbHMsIGZvcm1hdCwgdywgaCwgc3RyaWRlKTsKLSAgICBzdGF0dXMgPSBjYWlyb19zdXJm
YWNlX3N0YXR1cyh0LT5zdXJmYWNlKTsKKyAgICBldmFzX29iamVjdF9pbWFnZV9zaXplX3NldCh0
aWxlLT5pbWFnZSwgdGlsZS0+d2lkdGgsIHRpbGUtPmhlaWdodCk7CisgICAgZXZhc19vYmplY3Rf
aW1hZ2VfY29sb3JzcGFjZV9zZXQodGlsZS0+aW1hZ2UsIHRpbGUtPmNzcGFjZSk7CisgICAgdGls
ZS0+cGl4ZWxzID0gc3RhdGljX2Nhc3Q8dWludDhfdCo+KGV2YXNfb2JqZWN0X2ltYWdlX2RhdGFf
Z2V0KHRpbGUtPmltYWdlLCBFSU5BX1RSVUUpKTsKKyAgICB0aWxlLT5zdXJmYWNlID0gY2Fpcm9f
aW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEodGlsZS0+cGl4ZWxzLCBmb3JtYXQsIHdpZHRo
LCBoZWlnaHQsIHN0cmlkZSk7CisgICAgc3RhdHVzID0gY2Fpcm9fc3VyZmFjZV9zdGF0dXModGls
ZS0+c3VyZmFjZSk7CiAgICAgaWYgKHN0YXR1cyAhPSBDQUlST19TVEFUVVNfU1VDQ0VTUykgewog
ICAgICAgICBFUlIoImZhaWxlZCB0byBjcmVhdGUgY2Fpcm8gc3VyZmFjZTogJXMiLAogICAgICAg
ICAgICAgY2Fpcm9fc3RhdHVzX3RvX3N0cmluZyhzdGF0dXMpKTsKLSAgICAgICAgZnJlZSh0KTsK
KyAgICAgICAgZnJlZSh0aWxlKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgdC0+
Y2Fpcm8gPSBjYWlyb19jcmVhdGUodC0+c3VyZmFjZSk7Ci0gICAgc3RhdHVzID0gY2Fpcm9fc3Rh
dHVzKHQtPmNhaXJvKTsKKyAgICB0aWxlLT5jYWlybyA9IGNhaXJvX2NyZWF0ZSh0aWxlLT5zdXJm
YWNlKTsKKyAgICBzdGF0dXMgPSBjYWlyb19zdGF0dXModGlsZS0+Y2Fpcm8pOwogICAgIGlmIChz
dGF0dXMgIT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1MpIHsKICAgICAgICAgRVJSKCJmYWlsZWQgdG8g
Y3JlYXRlIGNhaXJvOiAlcyIsIGNhaXJvX3N0YXR1c190b19zdHJpbmcoc3RhdHVzKSk7Ci0gICAg
ICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveSh0LT5zdXJmYWNlKTsKLSAgICAgICAgZXZhc19vYmpl
Y3RfZGVsKHQtPmltYWdlKTsKLSAgICAgICAgZnJlZSh0KTsKKyAgICAgICAgY2Fpcm9fc3VyZmFj
ZV9kZXN0cm95KHRpbGUtPnN1cmZhY2UpOworICAgICAgICBldmFzX29iamVjdF9kZWwodGlsZS0+
aW1hZ2UpOworICAgICAgICBmcmVlKHRpbGUpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAK
LSAgICBfZXdrX3RpbGVfYWNjb3VudF9hbGxvY2F0ZWQodCk7CisgICAgX2V3a190aWxlX2FjY291
bnRfYWxsb2NhdGVkKHRpbGUpOwogCi0gICAgcmV0dXJuIHQ7CisgICAgcmV0dXJuIHRpbGU7CiB9
CiAKIC8qKgogICogRnJlZSB0aWxlIG1lbW9yeS4KICAqLwotdm9pZCBld2tfdGlsZV9mcmVlKEV3
a19UaWxlICp0KQordm9pZCBld2tfdGlsZV9mcmVlKEV3a19UaWxlKiB0aWxlKQogewotICAgIF9l
d2tfdGlsZV9hY2NvdW50X2ZyZWVkKHQpOworICAgIF9ld2tfdGlsZV9hY2NvdW50X2ZyZWVkKHRp
bGUpOwogCi0gICAgaWYgKHQtPnVwZGF0ZXMpCi0gICAgICAgIGVpbmFfdGlsZXJfZnJlZSh0LT51
cGRhdGVzKTsKKyAgICBpZiAodGlsZS0+dXBkYXRlcykKKyAgICAgICAgZWluYV90aWxlcl9mcmVl
KHRpbGUtPnVwZGF0ZXMpOwogCi0gICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95KHQtPnN1cmZhY2Up
OwotICAgIGNhaXJvX2Rlc3Ryb3kodC0+Y2Fpcm8pOwotICAgIGV2YXNfb2JqZWN0X2RlbCh0LT5p
bWFnZSk7Ci0gICAgZnJlZSh0KTsKKyAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3kodGlsZS0+c3Vy
ZmFjZSk7CisgICAgY2Fpcm9fZGVzdHJveSh0aWxlLT5jYWlybyk7CisgICAgZXZhc19vYmplY3Rf
ZGVsKHRpbGUtPmltYWdlKTsKKyAgICBmcmVlKHRpbGUpOwogfQogCiAvKioKICAqIE1ha2UgdGhl
IHRpbGUgdmlzaWJsZSwgaW5jcmVtZW50aW5nIGl0cyBjb3VudGVyLgogICovCi12b2lkIGV3a190
aWxlX3Nob3coRXdrX1RpbGUgKnQpCit2b2lkIGV3a190aWxlX3Nob3coRXdrX1RpbGUqIHRpbGUp
CiB7Ci0gICAgdC0+dmlzaWJsZSsrOwotICAgIGV2YXNfb2JqZWN0X3Nob3codC0+aW1hZ2UpOwor
ICAgIHRpbGUtPnZpc2libGUrKzsKKyAgICBldmFzX29iamVjdF9zaG93KHRpbGUtPmltYWdlKTsK
IH0KIAogLyoqCiAgKiBEZWNyZW1lbnQgdGhlIHZpc2liaWxpdHkgY291bnRlciwgbWFraW5nIGl0
IGludmlzaWJsZSBpZiBuZWNlc3NhcnkuCiAgKi8KLXZvaWQgZXdrX3RpbGVfaGlkZShFd2tfVGls
ZSAqdCkKK3ZvaWQgZXdrX3RpbGVfaGlkZShFd2tfVGlsZSogdGlsZSkKIHsKLSAgICB0LT52aXNp
YmxlLS07Ci0gICAgaWYgKCF0LT52aXNpYmxlKQotICAgICAgICBldmFzX29iamVjdF9oaWRlKHQt
PmltYWdlKTsKKyAgICB0aWxlLT52aXNpYmxlLS07CisgICAgaWYgKCF0aWxlLT52aXNpYmxlKQor
ICAgICAgICBldmFzX29iamVjdF9oaWRlKHRpbGUtPmltYWdlKTsKIH0KIAogLyoqCiAgKiBSZXR1
cm5zIEVJTkFfVFJVRSBpZiB0aGUgdGlsZSBpcyB2aXNpYmxlLCBFSU5BX0ZBTFNFIG90aGVyd2lz
ZS4KICAqLwotRWluYV9Cb29sIGV3a190aWxlX3Zpc2libGVfZ2V0KEV3a19UaWxlICp0KQorRWlu
YV9Cb29sIGV3a190aWxlX3Zpc2libGVfZ2V0KEV3a19UaWxlKiB0aWxlKQogewotICAgIHJldHVy
biAhIXQtPnZpc2libGU7CisgICAgcmV0dXJuICEhdGlsZS0+dmlzaWJsZTsKIH0KIAogLyoqCiAg
KiBNYXJrIHdob2xlIHRpbGUgYXMgZGlydHkgYW5kIHJlcXVpcmluZyB1cGRhdGUuCiAgKi8KLXZv
aWQgZXdrX3RpbGVfdXBkYXRlX2Z1bGwoRXdrX1RpbGUgKnQpCit2b2lkIGV3a190aWxlX3VwZGF0
ZV9mdWxsKEV3a19UaWxlKiB0aWxlKQogewogICAgIC8qIFRPRE86IGxpc3Qgb2YgdGlsZXMgcGVu
ZGluZyB1cGRhdGVzPyAqLwotICAgIHQtPnN0YXRzLm1pc3NlcysrOworICAgIHRpbGUtPnN0YXRz
Lm1pc3NlcysrOwogCi0gICAgaWYgKCF0LT5zdGF0cy5mdWxsX3VwZGF0ZSkgewotICAgICAgICB0
LT5zdGF0cy5mdWxsX3VwZGF0ZSA9IEVJTkFfVFJVRTsKLSAgICAgICAgaWYgKHQtPnVwZGF0ZXMp
IHsKLSAgICAgICAgICAgIGVpbmFfdGlsZXJfZnJlZSh0LT51cGRhdGVzKTsKLSAgICAgICAgICAg
IHQtPnVwZGF0ZXMgPSAwOworICAgIGlmICghdGlsZS0+c3RhdHMuZnVsbF91cGRhdGUpIHsKKyAg
ICAgICAgdGlsZS0+c3RhdHMuZnVsbF91cGRhdGUgPSBFSU5BX1RSVUU7CisgICAgICAgIGlmICh0
aWxlLT51cGRhdGVzKSB7CisgICAgICAgICAgICBlaW5hX3RpbGVyX2ZyZWUodGlsZS0+dXBkYXRl
cyk7CisgICAgICAgICAgICB0aWxlLT51cGRhdGVzID0gMDsKICAgICAgICAgfQogICAgIH0KIH0K
QEAgLTM4NywzMiArMzg3LDMyIEBAIHZvaWQgZXdrX3RpbGVfdXBkYXRlX2Z1bGwoRXdrX1RpbGUg
KnQpCiAvKioKICAqIE1hcmsgdGhlIHNwZWNpZmljIHN1YmFyZWEgYXMgZGlydHkgYW5kIHJlcXVp
cmluZyB1cGRhdGUuCiAgKi8KLXZvaWQgZXdrX3RpbGVfdXBkYXRlX2FyZWEoRXdrX1RpbGUgKnQs
IGNvbnN0IEVpbmFfUmVjdGFuZ2xlICpyKQordm9pZCBld2tfdGlsZV91cGRhdGVfYXJlYShFd2tf
VGlsZSogdGlsZSwgY29uc3QgRWluYV9SZWN0YW5nbGUqIHJlY3QpCiB7CiAgICAgLyogVE9ETzog
bGlzdCBvZiB0aWxlcyBwZW5kaW5nIHVwZGF0ZXM/ICovCi0gICAgdC0+c3RhdHMubWlzc2VzKys7
CisgICAgdGlsZS0+c3RhdHMubWlzc2VzKys7CiAKLSAgICBpZiAodC0+c3RhdHMuZnVsbF91cGRh
dGUpCisgICAgaWYgKHRpbGUtPnN0YXRzLmZ1bGxfdXBkYXRlKQogICAgICAgICByZXR1cm47CiAK
LSAgICBpZiAoIXItPnggJiYgIXItPnkgJiYgci0+dyA9PSB0LT53ICYmIHItPmggPT0gdC0+aCkg
ewotICAgICAgICB0LT5zdGF0cy5mdWxsX3VwZGF0ZSA9IEVJTkFfVFJVRTsKLSAgICAgICAgaWYg
KHQtPnVwZGF0ZXMpIHsKLSAgICAgICAgICAgIGVpbmFfdGlsZXJfZnJlZSh0LT51cGRhdGVzKTsK
LSAgICAgICAgICAgIHQtPnVwZGF0ZXMgPSAwOworICAgIGlmICghcmVjdC0+eCAmJiAhcmVjdC0+
eSAmJiByZWN0LT53ID09IHRpbGUtPndpZHRoICYmIHJlY3QtPmggPT0gdGlsZS0+aGVpZ2h0KSB7
CisgICAgICAgIHRpbGUtPnN0YXRzLmZ1bGxfdXBkYXRlID0gRUlOQV9UUlVFOworICAgICAgICBp
ZiAodGlsZS0+dXBkYXRlcykgeworICAgICAgICAgICAgZWluYV90aWxlcl9mcmVlKHRpbGUtPnVw
ZGF0ZXMpOworICAgICAgICAgICAgdGlsZS0+dXBkYXRlcyA9IDA7CiAgICAgICAgIH0KICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICghdC0+dXBkYXRlcykgewotICAgICAgICB0LT51
cGRhdGVzID0gZWluYV90aWxlcl9uZXcodC0+dywgdC0+aCk7Ci0gICAgICAgIGlmICghdC0+dXBk
YXRlcykgewotICAgICAgICAgICAgQ1JJVElDQUwoImNvdWxkIG5vdCBjcmVhdGUgZWluYV90aWxl
ciAlZHglZC4iLCB0LT53LCB0LT5oKTsKKyAgICBpZiAoIXRpbGUtPnVwZGF0ZXMpIHsKKyAgICAg
ICAgdGlsZS0+dXBkYXRlcyA9IGVpbmFfdGlsZXJfbmV3KHRpbGUtPndpZHRoLCB0aWxlLT5oZWln
aHQpOworICAgICAgICBpZiAoIXRpbGUtPnVwZGF0ZXMpIHsKKyAgICAgICAgICAgIENSSVRJQ0FM
KCJjb3VsZCBub3QgY3JlYXRlIGVpbmFfdGlsZXIgJWR4JWQuIiwgdGlsZS0+d2lkdGgsIHRpbGUt
PmhlaWdodCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBl
aW5hX3RpbGVyX3JlY3RfYWRkKHQtPnVwZGF0ZXMsIHIpOworICAgIGVpbmFfdGlsZXJfcmVjdF9h
ZGQodGlsZS0+dXBkYXRlcywgcmVjdCk7CiB9CiAKIC8qKgpAQCAtNDIxLDM2ICs0MjEsMzYgQEAg
dm9pZCBld2tfdGlsZV91cGRhdGVfYXJlYShFd2tfVGlsZSAqdCwgY29uc3QgRWluYV9SZWN0YW5n
bGUgKnIpCiAgKiBUaGlzIHdpbGwgbm90IGNoYW5nZSB0aGUgdGlsZSBzdGF0aXN0aWNzIG9yIGNs
ZWFyIHRoZSBwcm9jZXNzZWQKICAqIHVwZGF0ZXMsIHVzZSBld2tfdGlsZV91cGRhdGVzX2NsZWFy
KCkgZm9yIHRoYXQuCiAgKi8KLXZvaWQgZXdrX3RpbGVfdXBkYXRlc19wcm9jZXNzKEV3a19UaWxl
ICp0LCB2b2lkICgqY2IpKHZvaWQgKmRhdGEsIEV3a19UaWxlICp0LCBjb25zdCBFaW5hX1JlY3Rh
bmdsZSAqdXBkYXRlKSwgY29uc3Qgdm9pZCAqZGF0YSkKLXsKLSAgICBpZiAodC0+c3RhdHMuZnVs
bF91cGRhdGUpIHsKLSAgICAgICAgRWluYV9SZWN0YW5nbGUgcjsKLSAgICAgICAgci54ID0gMDsK
LSAgICAgICAgci55ID0gMDsKLSAgICAgICAgci53ID0gdC0+dzsKLSAgICAgICAgci5oID0gdC0+
aDsKK3ZvaWQgZXdrX3RpbGVfdXBkYXRlc19wcm9jZXNzKEV3a19UaWxlKiB0aWxlLCB2b2lkICgq
Y2FsbGJhY2spKHZvaWQqIGRhdGEsIEV3a19UaWxlKiB0aWxlLCBjb25zdCBFaW5hX1JlY3Rhbmds
ZSogdXBkYXRlKSwgY29uc3Qgdm9pZCogZGF0YSkKK3sKKyAgICBpZiAodGlsZS0+c3RhdHMuZnVs
bF91cGRhdGUpIHsKKyAgICAgICAgRWluYV9SZWN0YW5nbGUgcmVjdDsKKyAgICAgICAgcmVjdC54
ID0gMDsKKyAgICAgICAgcmVjdC55ID0gMDsKKyAgICAgICAgcmVjdC53ID0gdGlsZS0+d2lkdGg7
CisgICAgICAgIHJlY3QuaCA9IHRpbGUtPmhlaWdodDsKICNpZmRlZiBUSUxFX1NUQVRTX0FDQ09V
TlRfUkVOREVSX1RJTUUKICAgICAgICAgc3RydWN0IHRpbWV2YWwgdGltZXY7CiAgICAgICAgIGRv
dWJsZSByZW5kZXJfc3RhcnQ7CiAgICAgICAgIGdldHRpbWVvZmRheSgmdGltZXYsIDApOwotICAg
ICAgICByZW5kZXJfc3RhcnQgPSAoZG91YmxlKXRpbWV2LnR2X3NlYyArCi0gICAgICAgICAgICAo
KChkb3VibGUpdGltZXYudHZfdXNlYykgLyAxMDAwMDAwKTsKKyAgICAgICAgcmVuZGVyX3N0YXJ0
aWxlID0gKGRvdWJsZSl0aW1ldi50dl9zZWMgKworICAgICAgICAgICAgICAgICAgICAgICAoKChk
b3VibGUpdGltZXYudHZfdXNlYykgLyAxMDAwMDAwKTsKICNlbmRpZgotICAgICAgICBjYigodm9p
ZCAqKWRhdGEsIHQsICZyKTsKKyAgICAgICAgY2FsbGJhY2soKHZvaWQqKWRhdGEsIHRpbGUsICZy
ZWN0KTsKICNpZmRlZiBUSUxFX1NUQVRTX0FDQ09VTlRfUkVOREVSX1RJTUUKICAgICAgICAgZ2V0
dGltZW9mZGF5KCZ0aW1ldiwgMCk7Ci0gICAgICAgIHQtPnN0YXRzLnJlbmRlcl90aW1lID0gKGRv
dWJsZSl0aW1ldi50dl9zZWMgKwotICAgICAgICAgICAgKCgoZG91YmxlKXRpbWV2LnR2X3VzZWMp
IC8gMTAwMDAwMCkgLSByZW5kZXJfc3RhcnQ7CisgICAgICAgIHRpbGUtPnN0YXRzLnJlbmRlcl90
aW1lID0gKGRvdWJsZSl0aW1ldi50dl9zZWMgKworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICgoKGRvdWJsZSl0aW1ldi50dl91c2VjKSAvIDEwMDAwMDApIC0gcmVuZGVyX3N0YXJ0Owog
I2VuZGlmCi0gICAgfSBlbHNlIGlmICh0LT51cGRhdGVzKSB7Ci0gICAgICAgIEVpbmFfSXRlcmF0
b3IgKml0ciA9IGVpbmFfdGlsZXJfaXRlcmF0b3JfbmV3KHQtPnVwZGF0ZXMpOwotICAgICAgICBF
aW5hX1JlY3RhbmdsZSAqcjsKKyAgICB9IGVsc2UgaWYgKHRpbGUtPnVwZGF0ZXMpIHsKKyAgICAg
ICAgRWluYV9JdGVyYXRvciogaXRyID0gZWluYV90aWxlcl9pdGVyYXRvcl9uZXcodGlsZS0+dXBk
YXRlcyk7CisgICAgICAgIEVpbmFfUmVjdGFuZ2xlKiByZWN0OwogICAgICAgICBpZiAoIWl0cikg
ewogICAgICAgICAgICAgQ1JJVElDQUwoImNvdWxkIG5vdCBjcmVhdGUgdGlsZXIgaXRlcmF0b3Ih
Iik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgRUlOQV9JVEVSQVRP
Ul9GT1JFQUNIKGl0ciwgcikKLSAgICAgICAgICAgIGNiKCh2b2lkICopZGF0YSwgdCwgcik7Cisg
ICAgICAgIEVJTkFfSVRFUkFUT1JfRk9SRUFDSChpdHIsIHJlY3QpCisgICAgICAgICAgICBjYWxs
YmFjaygodm9pZCopZGF0YSwgdGlsZSwgcmVjdCk7CiAgICAgICAgIGVpbmFfaXRlcmF0b3JfZnJl
ZShpdHIpOwogICAgIH0KIH0KQEAgLTQ1OSwzOCArNDU5LDM4IEBAIHZvaWQgZXdrX3RpbGVfdXBk
YXRlc19wcm9jZXNzKEV3a19UaWxlICp0LCB2b2lkICgqY2IpKHZvaWQgKmRhdGEsIEV3a19UaWxl
ICp0LCBjCiAgKiBDbGVhciBhbGwgdXBkYXRlcyBpbiByZWdpb24sIGlmIGFueS4KICAqCiAgKiBU
aGlzIHdpbGwgY2hhbmdlIHRoZSB0aWxlIHN0YXRpc3RpY3MsIHNwZWNpYWxseSB6ZXJvIHN0YXQu
bWlzc2VzCi0gKiBhbmQgdW5zZXQgc3RhdHMuZnVsbF91cGRhdGUuIElmIHQtPnVwZGF0ZXMgZXhp
c3RlZCwgdGhlbiBpdCB3aWxsIGJlCisgKiBhbmQgdW5zZXQgc3RhdHMuZnVsbF91cGRhdGUuIElm
IHRpbGUtPnVwZGF0ZXMgZXhpc3RlZCwgdGhlbiBpdCB3aWxsIGJlCiAgKiBkZXN0cm95ZWQuCiAg
KgogICogVGhpcyBmdW5jdGlvbiBpcyB1c3VhbGx5IGNhbGxlZCBhZnRlciBld2tfdGlsZV91cGRh
dGVzX3Byb2Nlc3MoKSBpcwogICogY2FsbGVkLgogICovCi12b2lkIGV3a190aWxlX3VwZGF0ZXNf
Y2xlYXIoRXdrX1RpbGUgKnQpCit2b2lkIGV3a190aWxlX3VwZGF0ZXNfY2xlYXIoRXdrX1RpbGUq
IHRpbGUpCiB7CiAgICAgLyogVE9ETzogcmVtb3ZlIGZyb20gbGlzdCBvZiBwZW5kaW5nIHVwZGF0
ZXM/ICovCi0gICAgdC0+c3RhdHMubWlzc2VzID0gMDsKKyAgICB0aWxlLT5zdGF0cy5taXNzZXMg
PSAwOwogCi0gICAgaWYgKHQtPnN0YXRzLmZ1bGxfdXBkYXRlKQotICAgICAgICB0LT5zdGF0cy5m
dWxsX3VwZGF0ZSA9IDA7Ci0gICAgZWxzZSBpZiAodC0+dXBkYXRlcykgewotICAgICAgICBlaW5h
X3RpbGVyX2ZyZWUodC0+dXBkYXRlcyk7Ci0gICAgICAgIHQtPnVwZGF0ZXMgPSAwOworICAgIGlm
ICh0aWxlLT5zdGF0cy5mdWxsX3VwZGF0ZSkKKyAgICAgICAgdGlsZS0+c3RhdHMuZnVsbF91cGRh
dGUgPSAwOworICAgIGVsc2UgaWYgKHRpbGUtPnVwZGF0ZXMpIHsKKyAgICAgICAgZWluYV90aWxl
cl9mcmVlKHRpbGUtPnVwZGF0ZXMpOworICAgICAgICB0aWxlLT51cGRhdGVzID0gMDsKICAgICB9
CiB9CiAKIHR5cGVkZWYgc3RydWN0IF9Fd2tfVGlsZV9VbnVzZWRfQ2FjaGVfRW50cnkgRXdrX1Rp
bGVfVW51c2VkX0NhY2hlX0VudHJ5Owogc3RydWN0IF9Fd2tfVGlsZV9VbnVzZWRfQ2FjaGVfRW50
cnkgewotICAgIEV3a19UaWxlICp0aWxlOworICAgIEV3a19UaWxlKiB0aWxlOwogICAgIGludCB3
ZWlnaHQ7CiAgICAgc3RydWN0IHsKLSAgICAgICAgdm9pZCAoKmNiKSh2b2lkICpkYXRhLCBFd2tf
VGlsZSAqdCk7Ci0gICAgICAgIHZvaWQgKmRhdGE7CisgICAgICAgIHZvaWQgKCpjYikodm9pZCog
ZGF0YSwgRXdrX1RpbGUqIHRpbGUpOworICAgICAgICB2b2lkKiBkYXRhOwogICAgIH0gdGlsZV9m
cmVlOwogfTsKIAogc3RydWN0IF9Fd2tfVGlsZV9VbnVzZWRfQ2FjaGUgewogICAgIHN0cnVjdCB7
Ci0gICAgICAgIEVpbmFfTGlzdCAqbGlzdDsKKyAgICAgICAgRWluYV9MaXN0KiBsaXN0OwogICAg
ICAgICBzaXplX3QgY291bnQ7CiAgICAgICAgIHNpemVfdCBhbGxvY2F0ZWQ7CiAgICAgfSBlbnRy
aWVzOwpAQCAtNTIyLDM3ICs1MjIsMzcgQEAgc3RhdGljIGNvbnN0IHNpemVfdCBUSUxFX1VOVVNF
RF9DQUNIRV9NQVhfRlJFRSA9IDMyOwogICogICAgICAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVf
ZnJlZSgpIHRvIHJlbGVhc2UgcmVzb3VyY2VzLiBJZiBub3QKICAqICAgICAgICAgcG9zc2libGUg
dG8gYWxsb2NhdGUgbWVtb3J5LCBAYyAwIGlzIHJldHVybmVkLgogICovCi1Fd2tfVGlsZV9VbnVz
ZWRfQ2FjaGUgKmV3a190aWxlX3VudXNlZF9jYWNoZV9uZXcoc2l6ZV90IG1heCkKK0V3a19UaWxl
X1VudXNlZF9DYWNoZSogZXdrX3RpbGVfdW51c2VkX2NhY2hlX25ldyhzaXplX3QgbWF4KQogewot
ICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjOworICAgIEV3a19UaWxlX1VudXNlZF9DYWNo
ZSogdGlsZVVudXNlZENhY2hlOwogCi0gICAgdHVjID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGVfVW51
c2VkX0NhY2hlKj4oY2FsbG9jKDEsIHNpemVvZihFd2tfVGlsZV9VbnVzZWRfQ2FjaGUpKSk7Ci0g
ICAgaWYgKCF0dWMpCisgICAgdGlsZVVudXNlZENhY2hlID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGVf
VW51c2VkX0NhY2hlKj4oY2FsbG9jKDEsIHNpemVvZihFd2tfVGlsZV9VbnVzZWRfQ2FjaGUpKSk7
CisgICAgaWYgKCF0aWxlVW51c2VkQ2FjaGUpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgREJH
KCJ0dWM9JXAiLCB0dWMpOwotICAgIHR1Yy0+bWVtb3J5Lm1heCA9IG1heDsKLSAgICB0dWMtPnJl
ZmVyZW5jZXMgPSAxOwotICAgIHJldHVybiB0dWM7CisgICAgREJHKCJ0aWxlVW51c2VkQ2FjaGU9
JXAiLCB0aWxlVW51c2VkQ2FjaGUpOworICAgIHRpbGVVbnVzZWRDYWNoZS0+bWVtb3J5Lm1heCA9
IG1heDsKKyAgICB0aWxlVW51c2VkQ2FjaGUtPnJlZmVyZW5jZXMgPSAxOworICAgIHJldHVybiB0
aWxlVW51c2VkQ2FjaGU7CiB9CiAKLXZvaWQgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2xvY2tfYXJl
YShFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YywgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHks
IEV2YXNfQ29vcmQgdywgRXZhc19Db29yZCBoLCBmbG9hdCB6b29tKQordm9pZCBld2tfdGlsZV91
bnVzZWRfY2FjaGVfbG9ja19hcmVhKEV3a19UaWxlX1VudXNlZF9DYWNoZSogdGlsZVVudXNlZENh
Y2hlLCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwgRXZhc19Db29yZCB3aWR0aCwgRXZhc19D
b29yZCBoZWlnaHQsIGZsb2F0IHpvb20pCiB7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk4odHVjKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0aWxlVW51c2VkQ2FjaGUp
OwogCi0gICAgdHVjLT5sb2NrZWQubG9ja2VkID0gRUlOQV9UUlVFOwotICAgIHR1Yy0+bG9ja2Vk
LnggPSB4OwotICAgIHR1Yy0+bG9ja2VkLnkgPSB5OwotICAgIHR1Yy0+bG9ja2VkLncgPSB3Owot
ICAgIHR1Yy0+bG9ja2VkLmggPSBoOwotICAgIHR1Yy0+bG9ja2VkLnpvb20gPSB6b29tOworICAg
IHRpbGVVbnVzZWRDYWNoZS0+bG9ja2VkLmxvY2tlZCA9IEVJTkFfVFJVRTsKKyAgICB0aWxlVW51
c2VkQ2FjaGUtPmxvY2tlZC54ID0geDsKKyAgICB0aWxlVW51c2VkQ2FjaGUtPmxvY2tlZC55ID0g
eTsKKyAgICB0aWxlVW51c2VkQ2FjaGUtPmxvY2tlZC53ID0gd2lkdGg7CisgICAgdGlsZVVudXNl
ZENhY2hlLT5sb2NrZWQuaCA9IGhlaWdodDsKKyAgICB0aWxlVW51c2VkQ2FjaGUtPmxvY2tlZC56
b29tID0gem9vbTsKIH0KIAotdm9pZCBld2tfdGlsZV91bnVzZWRfY2FjaGVfdW5sb2NrX2FyZWEo
RXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMpCit2b2lkIGV3a190aWxlX3VudXNlZF9jYWNoZV91
bmxvY2tfYXJlYShFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHRpbGVVbnVzZWRDYWNoZSkKIHsKLSAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0dWMpOworICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOKHRpbGVVbnVzZWRDYWNoZSk7CiAKLSAgICB0dWMtPmxvY2tlZC5sb2NrZWQgPSBF
SU5BX0ZBTFNFOworICAgIHRpbGVVbnVzZWRDYWNoZS0+bG9ja2VkLmxvY2tlZCA9IEVJTkFfRkFM
U0U7CiB9CiAKIC8qKgpAQCAtNTY3LDE4ICs1NjcsMTggQEAgdm9pZCBld2tfdGlsZV91bnVzZWRf
Y2FjaGVfdW5sb2NrX2FyZWEoRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMpCiAgKgogICogQHNl
ZSBld2tfdGlsZV91bnVzZWRfY2FjaGVfdW5yZWYoKQogICovCi1zdGF0aWMgdm9pZCBfZXdrX3Rp
bGVfdW51c2VkX2NhY2hlX2ZyZWUoRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMpCitzdGF0aWMg
dm9pZCBfZXdrX3RpbGVfdW51c2VkX2NhY2hlX2ZyZWUoRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0
aWxlVW51c2VkQ2FjaGUpCiB7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4odHVjKTsK
KyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0aWxlVW51c2VkQ2FjaGUpOwogCi0gICAg
REJHKCJ0dWM9JXAsICIKKyAgICBEQkcoInRpbGVVbnVzZWRDYWNoZT0lcCwgIgogICAgICAgICAi
ZW50cmllcz0oY291bnQ6JXpkLCBhbGxvY2F0ZWQ6JXpkKSwgIgogICAgICAgICAibWVtb3J5PSht
YXg6JXpkLCB1c2VkOiV6ZCkiLAotICAgICAgICB0dWMsIHR1Yy0+ZW50cmllcy5jb3VudCwgdHVj
LT5lbnRyaWVzLmFsbG9jYXRlZCwKLSAgICAgICAgdHVjLT5tZW1vcnkubWF4LCB0dWMtPm1lbW9y
eS51c2VkKTsKKyAgICAgICAgdGlsZVVudXNlZENhY2hlLCB0aWxlVW51c2VkQ2FjaGUtPmVudHJp
ZXMuY291bnQsIHRpbGVVbnVzZWRDYWNoZS0+ZW50cmllcy5hbGxvY2F0ZWQsCisgICAgICAgIHRp
bGVVbnVzZWRDYWNoZS0+bWVtb3J5Lm1heCwgdGlsZVVudXNlZENhY2hlLT5tZW1vcnkudXNlZCk7
CiAKLSAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfY2xlYXIodHVjKTsKLSAgICBmcmVlKHR1Yyk7
CisgICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2NsZWFyKHRpbGVVbnVzZWRDYWNoZSk7CisgICAg
ZnJlZSh0aWxlVW51c2VkQ2FjaGUpOwogfQogCiAvKioKQEAgLTU4NywzNiArNTg3LDM2IEBAIHN0
YXRpYyB2b2lkIF9ld2tfdGlsZV91bnVzZWRfY2FjaGVfZnJlZShFd2tfVGlsZV9VbnVzZWRfQ2Fj
aGUgKnR1YykKICAqIEFueSB0aWxlcyB0aGF0IGFyZSBpbiB0aGUgY2FjaGUgYXJlIGZyZWVkLiBU
aGUgb25seSB0aWxlcyB0aGF0IGFyZQogICoga2VwdCBhcmUgdGhvc2UgdGhhdCBhcmVuJ3QgaW4g
dGhlIGNhY2hlIChpLmUuIHRoYXQgYXJlIHZpc2libGUpLgogICovCi12b2lkIGV3a190aWxlX3Vu
dXNlZF9jYWNoZV9jbGVhcihFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YykKK3ZvaWQgZXdrX3Rp
bGVfdW51c2VkX2NhY2hlX2NsZWFyKEV3a19UaWxlX1VudXNlZF9DYWNoZSogdGlsZVVudXNlZENh
Y2hlKQogewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHR1Yyk7CisgICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk4odGlsZVVudXNlZENhY2hlKTsKIAotICAgIGlmICghdHVjLT5l
bnRyaWVzLmNvdW50KQorICAgIGlmICghdGlsZVVudXNlZENhY2hlLT5lbnRyaWVzLmNvdW50KQog
ICAgICAgICByZXR1cm47CiAKICAgICB2b2lkKiBpdGVtOwotICAgIEVJTkFfTElTVF9GUkVFKHR1
Yy0+ZW50cmllcy5saXN0LCBpdGVtKSB7CisgICAgRUlOQV9MSVNUX0ZSRUUodGlsZVVudXNlZENh
Y2hlLT5lbnRyaWVzLmxpc3QsIGl0ZW0pIHsKICAgICAgICAgRXdrX1RpbGVfVW51c2VkX0NhY2hl
X0VudHJ5KiBpdHIgPSBzdGF0aWNfY2FzdDxFd2tfVGlsZV9VbnVzZWRfQ2FjaGVfRW50cnkqPihp
dGVtKTsKICAgICAgICAgaXRyLT50aWxlX2ZyZWUuY2IoaXRyLT50aWxlX2ZyZWUuZGF0YSwgaXRy
LT50aWxlKTsKICAgICAgICAgZnJlZShpdHIpOwogICAgIH0KIAotICAgIHR1Yy0+bWVtb3J5LnVz
ZWQgPSAwOwotICAgIHR1Yy0+ZW50cmllcy5jb3VudCA9IDA7CisgICAgdGlsZVVudXNlZENhY2hl
LT5tZW1vcnkudXNlZCA9IDA7CisgICAgdGlsZVVudXNlZENhY2hlLT5lbnRyaWVzLmNvdW50ID0g
MDsKIH0KIAogLyoqCi0gKiBIb2xkIHJlZmVyZW5jZSB0byBjYWNoZS4KKyAqIGhlaWdodG9sZCBy
ZWZlcmVuY2UgdG8gY2FjaGUuCiAgKgogICogQHJldHVybiBzYW1lIHBvaW50ZXIgYXMgdGFrZW4u
CiAgKgogICogQHNlZSBld2tfdGlsZV91bnVzZWRfY2FjaGVfdW5yZWYoKQogICovCi1Fd2tfVGls
ZV9VbnVzZWRfQ2FjaGUgKmV3a190aWxlX3VudXNlZF9jYWNoZV9yZWYoRXdrX1RpbGVfVW51c2Vk
X0NhY2hlICp0dWMpCitFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIGV3a190aWxlX3VudXNlZF9jYWNo
ZV9yZWYoRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0aWxlVW51c2VkQ2FjaGUpCiB7Ci0gICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHR1YywgMCk7Ci0gICAgdHVjLT5yZWZlcmVuY2Vz
Kys7Ci0gICAgcmV0dXJuIHR1YzsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwo
dGlsZVVudXNlZENhY2hlLCAwKTsKKyAgICB0aWxlVW51c2VkQ2FjaGUtPnJlZmVyZW5jZXMrKzsK
KyAgICByZXR1cm4gdGlsZVVudXNlZENhY2hlOwogfQogCiAvKioKQEAgLTYyNSw0MCArNjI1LDQw
IEBAIEV3a19UaWxlX1VudXNlZF9DYWNoZSAqZXdrX3RpbGVfdW51c2VkX2NhY2hlX3JlZihFd2tf
VGlsZV9VbnVzZWRfQ2FjaGUgKnR1YykKICAqIEBzZWUgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3Jl
ZigpCiAgKiBAc2VlIGV3a190aWxlX3VudXNlZF9jYWNoZV9mcmVlKCkKICAqLwotdm9pZCBld2tf
dGlsZV91bnVzZWRfY2FjaGVfdW5yZWYoRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMpCit2b2lk
IGV3a190aWxlX3VudXNlZF9jYWNoZV91bnJlZihFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHRpbGVV
bnVzZWRDYWNoZSkKIHsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0dWMpOwotICAg
IHR1Yy0+cmVmZXJlbmNlcy0tOwotICAgIGlmICghdHVjLT5yZWZlcmVuY2VzKQotICAgICAgICBf
ZXdrX3RpbGVfdW51c2VkX2NhY2hlX2ZyZWUodHVjKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTih0aWxlVW51c2VkQ2FjaGUpOworICAgIHRpbGVVbnVzZWRDYWNoZS0+cmVmZXJlbmNl
cy0tOworICAgIGlmICghdGlsZVVudXNlZENhY2hlLT5yZWZlcmVuY2VzKQorICAgICAgICBfZXdr
X3RpbGVfdW51c2VkX2NhY2hlX2ZyZWUodGlsZVVudXNlZENhY2hlKTsKIH0KIAotdm9pZCBld2tf
dGlsZV91bnVzZWRfY2FjaGVfbWF4X3NldChFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1Yywgc2l6
ZV90IG1heCkKK3ZvaWQgZXdrX3RpbGVfdW51c2VkX2NhY2hlX21heF9zZXQoRXdrX1RpbGVfVW51
c2VkX0NhY2hlKiB0aWxlVW51c2VkQ2FjaGUsIHNpemVfdCBtYXgpCiB7Ci0gICAgRUlOQV9TQUZF
VFlfT05fTlVMTF9SRVRVUk4odHVjKTsKLSAgICB0dWMtPm1lbW9yeS5tYXggPSBtYXg7CisgICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4odGlsZVVudXNlZENhY2hlKTsKKyAgICB0aWxlVW51
c2VkQ2FjaGUtPm1lbW9yeS5tYXggPSBtYXg7CiB9CiAKLXNpemVfdCBld2tfdGlsZV91bnVzZWRf
Y2FjaGVfbWF4X2dldChjb25zdCBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YykKK3NpemVfdCBl
d2tfdGlsZV91bnVzZWRfY2FjaGVfbWF4X2dldChjb25zdCBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUq
IHRpbGVVbnVzZWRDYWNoZSkKIHsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwo
dHVjLCAwKTsKLSAgICByZXR1cm4gdHVjLT5tZW1vcnkubWF4OworICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOX1ZBTCh0aWxlVW51c2VkQ2FjaGUsIDApOworICAgIHJldHVybiB0aWxlVW51
c2VkQ2FjaGUtPm1lbW9yeS5tYXg7CiB9CiAKLXNpemVfdCBld2tfdGlsZV91bnVzZWRfY2FjaGVf
dXNlZF9nZXQoY29uc3QgRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMpCitzaXplX3QgZXdrX3Rp
bGVfdW51c2VkX2NhY2hlX3VzZWRfZ2V0KGNvbnN0IEV3a19UaWxlX1VudXNlZF9DYWNoZSogdGls
ZVVudXNlZENhY2hlKQogewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh0dWMs
IDApOwotICAgIHJldHVybiB0dWMtPm1lbW9yeS51c2VkOworICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOX1ZBTCh0aWxlVW51c2VkQ2FjaGUsIDApOworICAgIHJldHVybiB0aWxlVW51c2Vk
Q2FjaGUtPm1lbW9yeS51c2VkOwogfQogCi1zaXplX3QgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2Zs
dXNoKEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjLCBzaXplX3QgYnl0ZXMpCitzaXplX3QgZXdr
X3RpbGVfdW51c2VkX2NhY2hlX2ZsdXNoKEV3a19UaWxlX1VudXNlZF9DYWNoZSogdGlsZVVudXNl
ZENhY2hlLCBzaXplX3QgYnl0ZXMpCiB7Ci0gICAgRWluYV9MaXN0ICpsLCAqbF9uZXh0OwotICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh0dWMsIDApOworICAgIEVpbmFfTGlzdCog
bCwgKiBsX25leHQ7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHRpbGVVbnVz
ZWRDYWNoZSwgMCk7CiAgICAgc2l6ZV90IGRvbmU7CiAgICAgdW5zaWduZWQgaW50IGNvdW50Owog
Ci0gICAgaWYgKCF0dWMtPmVudHJpZXMuY291bnQpCisgICAgaWYgKCF0aWxlVW51c2VkQ2FjaGUt
PmVudHJpZXMuY291bnQpCiAgICAgICAgIHJldHVybiAwOwogICAgIGlmIChieXRlcyA8IDEpCiAg
ICAgICAgIHJldHVybiAwOwpAQCAtNjcxLDU1ICs2NzEsNTUgQEAgc2l6ZV90IGV3a190aWxlX3Vu
dXNlZF9jYWNoZV9mbHVzaChFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1Yywgc2l6ZV90IGJ5dGVz
KQogICAgIHZvaWQqIGl0ZW07CiAgICAgZG9uZSA9IDA7CiAgICAgY291bnQgPSAwOwotICAgIEVJ
TkFfTElTVF9GT1JFQUNIX1NBRkUodHVjLT5lbnRyaWVzLmxpc3QsIGwsIGxfbmV4dCwgaXRlbSkg
eworICAgIEVJTkFfTElTVF9GT1JFQUNIX1NBRkUodGlsZVVudXNlZENhY2hlLT5lbnRyaWVzLmxp
c3QsIGwsIGxfbmV4dCwgaXRlbSkgewogICAgICAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGVfRW50
cnkqIGl0ciA9IHN0YXRpY19jYXN0PEV3a19UaWxlX1VudXNlZF9DYWNoZV9FbnRyeSo+KGl0ZW0p
OwotICAgICAgICBFd2tfVGlsZSAqdCA9IGl0ci0+dGlsZTsKKyAgICAgICAgRXdrX1RpbGUqIHRp
bGUgPSBpdHItPnRpbGU7CiAgICAgICAgIGlmIChkb25lID4gYnl0ZXMpCiAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgaWYgKHR1Yy0+bG9ja2VkLmxvY2tlZAotICAgICAgICAgICAgJiYgdC0+
eCArIHQtPncgPiB0dWMtPmxvY2tlZC54Ci0gICAgICAgICAgICAmJiB0LT55ICsgdC0+aCA+IHR1
Yy0+bG9ja2VkLnkKLSAgICAgICAgICAgICYmIHQtPnggPCB0dWMtPmxvY2tlZC54ICsgdHVjLT5s
b2NrZWQudwotICAgICAgICAgICAgJiYgdC0+eSA8IHR1Yy0+bG9ja2VkLnkgKyB0dWMtPmxvY2tl
ZC5oCi0gICAgICAgICAgICAmJiB0LT56b29tID09IHR1Yy0+bG9ja2VkLnpvb20pIHsKKyAgICAg
ICAgaWYgKHRpbGVVbnVzZWRDYWNoZS0+bG9ja2VkLmxvY2tlZAorICAgICAgICAgICAgJiYgdGls
ZS0+eCArIHRpbGUtPndpZHRoID4gdGlsZVVudXNlZENhY2hlLT5sb2NrZWQueAorICAgICAgICAg
ICAgJiYgdGlsZS0+eSArIHRpbGUtPmhlaWdodCA+IHRpbGVVbnVzZWRDYWNoZS0+bG9ja2VkLnkK
KyAgICAgICAgICAgICYmIHRpbGUtPnggPCB0aWxlVW51c2VkQ2FjaGUtPmxvY2tlZC54ICsgdGls
ZVVudXNlZENhY2hlLT5sb2NrZWQudworICAgICAgICAgICAgJiYgdGlsZS0+eSA8IHRpbGVVbnVz
ZWRDYWNoZS0+bG9ja2VkLnkgKyB0aWxlVW51c2VkQ2FjaGUtPmxvY2tlZC5oCisgICAgICAgICAg
ICAmJiB0aWxlLT56b29tID09IHRpbGVVbnVzZWRDYWNoZS0+bG9ja2VkLnpvb20pIHsKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIGRvbmUgKz0gc2l6ZW9mKEV3a19U
aWxlKSArIGl0ci0+dGlsZS0+Ynl0ZXM7CiAgICAgICAgIGl0ci0+dGlsZV9mcmVlLmNiKGl0ci0+
dGlsZV9mcmVlLmRhdGEsIGl0ci0+dGlsZSk7Ci0gICAgICAgIHR1Yy0+ZW50cmllcy5saXN0ID0g
ZWluYV9saXN0X3JlbW92ZV9saXN0KHR1Yy0+ZW50cmllcy5saXN0LCBsKTsKKyAgICAgICAgdGls
ZVVudXNlZENhY2hlLT5lbnRyaWVzLmxpc3QgPSBlaW5hX2xpc3RfcmVtb3ZlX2xpc3QodGlsZVVu
dXNlZENhY2hlLT5lbnRyaWVzLmxpc3QsIGwpOwogICAgICAgICBmcmVlKGl0cik7CiAgICAgICAg
IGNvdW50Kys7CiAgICAgfQogCi0gICAgdHVjLT5tZW1vcnkudXNlZCAtPSBkb25lOwotICAgIHR1
Yy0+ZW50cmllcy5jb3VudCAtPSBjb3VudDsKKyAgICB0aWxlVW51c2VkQ2FjaGUtPm1lbW9yeS51
c2VkIC09IGRvbmU7CisgICAgdGlsZVVudXNlZENhY2hlLT5lbnRyaWVzLmNvdW50IC09IGNvdW50
OwogCiAgICAgcmV0dXJuIGRvbmU7CiB9CiAKLXZvaWQgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2F1
dG9fZmx1c2goRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMpCit2b2lkIGV3a190aWxlX3VudXNl
ZF9jYWNoZV9hdXRvX2ZsdXNoKEV3a19UaWxlX1VudXNlZF9DYWNoZSogdGlsZVVudXNlZENhY2hl
KQogewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHR1Yyk7Ci0gICAgaWYgKHR1Yy0+
bWVtb3J5LnVzZWQgPD0gdHVjLT5tZW1vcnkubWF4KQorICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOKHRpbGVVbnVzZWRDYWNoZSk7CisgICAgaWYgKHRpbGVVbnVzZWRDYWNoZS0+bWVtb3J5
LnVzZWQgPD0gdGlsZVVudXNlZENhY2hlLT5tZW1vcnkubWF4KQogICAgICAgICByZXR1cm47Ci0g
ICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2ZsdXNoKHR1YywgdHVjLT5tZW1vcnkudXNlZCAtIHR1
Yy0+bWVtb3J5Lm1heCk7Ci0gICAgaWYgKHR1Yy0+bWVtb3J5LnVzZWQgPiB0dWMtPm1lbW9yeS5t
YXgpCisgICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2ZsdXNoKHRpbGVVbnVzZWRDYWNoZSwgdGls
ZVVudXNlZENhY2hlLT5tZW1vcnkudXNlZCAtIHRpbGVVbnVzZWRDYWNoZS0+bWVtb3J5Lm1heCk7
CisgICAgaWYgKHRpbGVVbnVzZWRDYWNoZS0+bWVtb3J5LnVzZWQgPiB0aWxlVW51c2VkQ2FjaGUt
Pm1lbW9yeS5tYXgpCiAgICAgICAgIENSSVRJQ0FMKCJDYWNoZSBzdGlsbCB1c2luZyB0b28gbXVj
aCBtZW1vcnk6ICV6ZCBLQjsgbWF4OiAlemQgS0IiLAotICAgICAgICAgICAgICAgICB0dWMtPm1l
bW9yeS51c2VkLCB0dWMtPm1lbW9yeS5tYXgpOworICAgICAgICAgICAgICAgICB0aWxlVW51c2Vk
Q2FjaGUtPm1lbW9yeS51c2VkLCB0aWxlVW51c2VkQ2FjaGUtPm1lbW9yeS5tYXgpOwogfQogCiAv
KioKICAqIEZyZWV6ZSBjYWNoZSB0byBub3QgZG8gbWFpbnRlbmFuY2UgdGFza3MuCiAgKgogICog
TWFpbnRlbmFuY2UgdGFza3Mgb3B0aW1pemUgY2FjaGUgdXNhZ2UsIGJ1dCBtYXliZSB3ZSBrbm93
IHdlIHNob3VsZAotICogaG9sZCBvbiB0aGVtIHVudGlsIHdlIGRvIHRoZSBsYXN0IG9wZXJhdGlv
biwgaW4gdGhpcyBjYXNlIHdlIGZyZWV6ZQorICogaGVpZ2h0b2xkIG9uIHRoZW0gdW50aWwgd2Ug
ZG8gdGhlIGxhc3Qgb3BlcmF0aW9uLCBpbiB0aGlzIGNhc2Ugd2UgZnJlZXplCiAgKiB3aGlsZSBv
cGVyYXRpbmcgYW5kIHRoZW4gdGhhdyB3aGVuIHdlJ3JlIGRvbmUuCiAgKgogICogQHNlZSBld2tf
dGlsZV91bnVzZWRfY2FjaGVfdGhhdygpCiAgKi8KLXZvaWQgZXdrX3RpbGVfdW51c2VkX2NhY2hl
X2ZyZWV6ZShFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YykKK3ZvaWQgZXdrX3RpbGVfdW51c2Vk
X2NhY2hlX2ZyZWV6ZShFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHRpbGVVbnVzZWRDYWNoZSkKIHsK
LSAgICB0dWMtPmZyb3plbisrOworICAgIHRpbGVVbnVzZWRDYWNoZS0+ZnJvemVuKys7CiB9CiAK
IC8qKgpAQCAtNzI4LDE0ICs3MjgsMTQgQEAgdm9pZCBld2tfdGlsZV91bnVzZWRfY2FjaGVfZnJl
ZXplKEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjKQogICogSWYgdGhpcyBpcyB0aGUgbGFzdCBj
b3VudGVycGFydCBvZiBmcmVlemUsIHRoZW4gbWFpbnRlbmFuY2UgdGFza3MKICAqIHdpbGwgcnVu
IGltbWVkaWF0ZWx5LgogICovCi12b2lkIGV3a190aWxlX3VudXNlZF9jYWNoZV90aGF3KEV3a19U
aWxlX1VudXNlZF9DYWNoZSAqdHVjKQordm9pZCBld2tfdGlsZV91bnVzZWRfY2FjaGVfdGhhdyhF
d2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHRpbGVVbnVzZWRDYWNoZSkKIHsKLSAgICBpZiAoIXR1Yy0+
ZnJvemVuKSB7CisgICAgaWYgKCF0aWxlVW51c2VkQ2FjaGUtPmZyb3plbikgewogICAgICAgICBF
UlIoInRoYXdpbmcgbW9yZSB0aGFuIGZyZWV6aW5nISIpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgdHVjLT5mcm96ZW4tLTsKKyAgICB0aWxlVW51c2VkQ2FjaGUtPmZyb3plbi0tOwog
fQogCiAvKioKQEAgLTc0NSwzMiArNzQ1LDMyIEBAIHZvaWQgZXdrX3RpbGVfdW51c2VkX2NhY2hl
X3RoYXcoRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMpCiAgKiBpcyByZW1vdmVkIGZyb20gdGhl
IGNhY2hlIGFuZCBtYXkgYmUgZ2l2ZW4gYmFjayB3aXRoCiAgKiBld2tfdGlsZV91bnVzZWRfY2Fj
aGVfdGlsZV9wdXQoKS4KICAqCi0gKiBAcGFyYW0gdHVjIGNhY2hlIG9mIHVudXNlZCB0aWxlcwor
ICogQHBhcmFtIHRpbGVVbnVzZWRDYWNoZSBjYWNoZSBvZiB1bnVzZWQgdGlsZXMKICAqIEBwYXJh
bSB0IHRoZSB0aWxlIHRvIGJlIHJlbW92ZWQgZnJvbSBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUuCiAg
KgogICogQHJldHVybiAjRUlOQV9UUlVFIG9uIHN1Y2Nlc3MsICNFSU5BX0ZBTFNFIG90aGVyd2lz
ZS4KICAqLwotRWluYV9Cb29sIGV3a190aWxlX3VudXNlZF9jYWNoZV90aWxlX2dldChFd2tfVGls
ZV9VbnVzZWRfQ2FjaGUgKnR1YywgRXdrX1RpbGUgKnQpCitFaW5hX0Jvb2wgZXdrX3RpbGVfdW51
c2VkX2NhY2hlX3RpbGVfZ2V0KEV3a19UaWxlX1VudXNlZF9DYWNoZSogdGlsZVVudXNlZENhY2hl
LCBFd2tfVGlsZSogdGlsZSkKIHsKLSAgICBFaW5hX0xpc3QgKmUsICpsOworICAgIEVpbmFfTGlz
dCogZSwgKiBsOwogCiAgICAgdm9pZCogaXRlbTsKICAgICBlID0gMDsKLSAgICBFSU5BX0xJU1Rf
Rk9SRUFDSCh0dWMtPmVudHJpZXMubGlzdCwgbCwgaXRlbSkgeworICAgIEVJTkFfTElTVF9GT1JF
QUNIKHRpbGVVbnVzZWRDYWNoZS0+ZW50cmllcy5saXN0LCBsLCBpdGVtKSB7CiAgICAgICAgIEV3
a19UaWxlX1VudXNlZF9DYWNoZV9FbnRyeSogZW50cnkgPSBzdGF0aWNfY2FzdDxFd2tfVGlsZV9V
bnVzZWRfQ2FjaGVfRW50cnkqPihpdGVtKTsKLSAgICAgICAgaWYgKGVudHJ5LT50aWxlID09IHQp
IHsKKyAgICAgICAgaWYgKGVudHJ5LT50aWxlID09IHRpbGUpIHsKICAgICAgICAgICAgIGUgPSBs
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKCFlKSB7Ci0g
ICAgICAgIEVSUigidGlsZSAlcCBub3QgZm91bmQgaW4gY2FjaGUgJXAiLCB0LCB0dWMpOworICAg
ICAgICBFUlIoInRpbGUgJXAgbm90IGZvdW5kIGluIGNhY2hlICVwIiwgdGlsZSwgdGlsZVVudXNl
ZENhY2hlKTsKICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CiAgICAgfQogCi0gICAgdHVjLT5l
bnRyaWVzLmNvdW50LS07Ci0gICAgdHVjLT5tZW1vcnkudXNlZCAtPSBzaXplb2YoRXdrX1RpbGUp
ICsgdC0+Ynl0ZXM7Ci0gICAgdHVjLT5lbnRyaWVzLmxpc3QgPSBlaW5hX2xpc3RfcmVtb3ZlX2xp
c3QodHVjLT5lbnRyaWVzLmxpc3QsIGUpOworICAgIHRpbGVVbnVzZWRDYWNoZS0+ZW50cmllcy5j
b3VudC0tOworICAgIHRpbGVVbnVzZWRDYWNoZS0+bWVtb3J5LnVzZWQgLT0gc2l6ZW9mKEV3a19U
aWxlKSArIHRpbGUtPmJ5dGVzOworICAgIHRpbGVVbnVzZWRDYWNoZS0+ZW50cmllcy5saXN0ID0g
ZWluYV9saXN0X3JlbW92ZV9saXN0KHRpbGVVbnVzZWRDYWNoZS0+ZW50cmllcy5saXN0LCBlKTsK
ICAgICBmcmVlKGl0ZW0pOwogCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKQEAgLTc3OSw3ICs3Nzks
NyBAQCBFaW5hX0Jvb2wgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3RpbGVfZ2V0KEV3a19UaWxlX1Vu
dXNlZF9DYWNoZSAqdHVjLCBFd2tfVGlsZSAqdAogLyoqCiAgKiBQdXQgdGlsZSBpbnRvIGNhY2hl
IG9mIHVudXNlZCB0aWxlcywgYWRkaW5nIGl0IHRvIHRoZSBjYWNoZS4KICAqCi0gKiBUaGlzIHNo
b3VsZCBiZSBjYWxsZWQgd2hlbiBAYyB0LT52aXNpYmxlIGlzIEBjIDAgYW5kIG5vIG9iamVjdHMg
YXJlCisgKiBUaGlzIHNob3VsZCBiZSBjYWxsZWQgd2hlbiBAYyB0aWxlLT52aXNpYmxlIGlzIEBj
IDAgYW5kIG5vIG9iamVjdHMgYXJlCiAgKiB1c2luZyB0aGUgdGlsZSBhbnltb3JlLCBtYWtpbmcg
aXQgYXZhaWxhYmxlIHRvIGJlIGV4cGlyZWQgYW5kIGhhdmUKICAqIGl0cyBtZW1vcnkgcmVwbGFj
ZWQuCiAgKgpAQCAtNzg4LDYwICs3ODgsNjAgQEAgRWluYV9Cb29sIGV3a190aWxlX3VudXNlZF9j
YWNoZV90aWxlX2dldChFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YywgRXdrX1RpbGUgKnQKICAq
IGNhbiBjYWxsIGV3a190aWxlX3VudXNlZF9jYWNoZV9hdXRvX2ZsdXNoKCkgdG8gZnJlZSB0aGVt
LiBUaGlzIGlzIGRvbmUKICAqIGJlY2F1c2UgdXN1YWxseSB3ZSB3YW50IGEgbGF6eSBvcGVyYXRp
b24gZm9yIGJldHRlciBwZXJmb3JtYW5jZS4KICAqCi0gKiBAcGFyYW0gdHVjIGNhY2hlIG9mIHVu
dXNlZCB0aWxlcworICogQHBhcmFtIHRpbGVVbnVzZWRDYWNoZSBjYWNoZSBvZiB1bnVzZWQgdGls
ZXMKICAqIEBwYXJhbSB0IHRpbGUgdG8gYmUgYWRkZWQgdG8gY2FjaGUuCiAgKiBAcGFyYW0gdGls
ZV9mcmVlX2NiIGZ1bmN0aW9uIHVzZWQgdG8gZnJlZSB0aWxlcy4KICAqIEBwYXJhbSBkYXRhIGNv
bnRleHQgdG8gZ2l2ZSBiYWNrIHRvIEBhIHRpbGVfZnJlZV9jYiBhcyBmaXJzdCBhcmd1bWVudC4K
ICAqCi0gKiBAcmV0dXJuICNFSU5BX1RSVUUgb24gc3VjY2VzcywgI0VJTkFfRkFMU0Ugb3RoZXJ3
aXNlLiBJZiBAYyB0LT52aXNpYmxlCisgKiBAcmV0dXJuICNFSU5BX1RSVUUgb24gc3VjY2Vzcywg
I0VJTkFfRkFMU0Ugb3RoZXJ3aXNlLiBJZiBAYyB0aWxlLT52aXNpYmxlCiAgKiAgICAgICAgIGlz
IG5vdCAjRUlOQV9GQUxTRSwgdGhlbiBpdCB3aWxsIHJldHVybiAjRUlOQV9GQUxTRS4KICAqCiAg
KiBAc2VlIGV3a190aWxlX3VudXNlZF9jYWNoZV9hdXRvX2ZsdXNoKCkKICAqLwotRWluYV9Cb29s
IGV3a190aWxlX3VudXNlZF9jYWNoZV90aWxlX3B1dChFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1
YywgRXdrX1RpbGUgKnQsIHZvaWQgKCp0aWxlX2ZyZWVfY2IpKHZvaWQgKmRhdGEsIEV3a19UaWxl
ICp0KSwgY29uc3Qgdm9pZCAqZGF0YSkKK0VpbmFfQm9vbCBld2tfdGlsZV91bnVzZWRfY2FjaGVf
dGlsZV9wdXQoRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0aWxlVW51c2VkQ2FjaGUsIEV3a19UaWxl
KiB0aWxlLCB2b2lkICgqIHRpbGVfZnJlZV9jYikodm9pZCogZGF0YSwgRXdrX1RpbGUqIHRpbGUp
LCBjb25zdCB2b2lkKiBkYXRhKQogewotICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZV9FbnRyeSAq
ZTsKKyAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGVfRW50cnkqIHVjZTsKIAotICAgIGlmICh0LT52
aXNpYmxlKSB7Ci0gICAgICAgIEVSUigidGlsZT0lcCBpcyBub3QgdW51c2VkICh2aXNpYmxlPSVk
KSIsIHQsIHQtPnZpc2libGUpOworICAgIGlmICh0aWxlLT52aXNpYmxlKSB7CisgICAgICAgIEVS
UigidGlsZT0lcCBpcyBub3QgdW51c2VkICh2aXNpYmxlPSVkKSIsIHRpbGUsIHRpbGUtPnZpc2li
bGUpOwogICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKICAgICB9CiAKLSAgICBlID0gc3RhdGlj
X2Nhc3Q8RXdrX1RpbGVfVW51c2VkX0NhY2hlX0VudHJ5Kj4obWFsbG9jKHNpemVvZihFd2tfVGls
ZV9VbnVzZWRfQ2FjaGVfRW50cnkpKSk7Ci0gICAgaWYgKCFlKQorICAgIHVjZSA9IHN0YXRpY19j
YXN0PEV3a19UaWxlX1VudXNlZF9DYWNoZV9FbnRyeSo+KG1hbGxvYyhzaXplb2YoRXdrX1RpbGVf
VW51c2VkX0NhY2hlX0VudHJ5KSkpOworICAgIGlmICghdWNlKQogICAgICAgICByZXR1cm4gRUlO
QV9GQUxTRTsKIAotICAgIHR1Yy0+ZW50cmllcy5saXN0ID0gZWluYV9saXN0X2FwcGVuZCh0dWMt
PmVudHJpZXMubGlzdCwgZSk7CisgICAgdGlsZVVudXNlZENhY2hlLT5lbnRyaWVzLmxpc3QgPSBl
aW5hX2xpc3RfYXBwZW5kKHRpbGVVbnVzZWRDYWNoZS0+ZW50cmllcy5saXN0LCB1Y2UpOwogICAg
IGlmIChlaW5hX2Vycm9yX2dldCgpKSB7CiAgICAgICAgIEVSUigiTGlzdCBhbGxvY2F0aW9uIGZh
aWxlZCIpOwogICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKICAgICB9CiAKLSAgICBlLT50aWxl
ID0gdDsKLSAgICBlLT53ZWlnaHQgPSAwOyAvKiBjYWxjdWxhdGVkIGp1c3QgYmVmb3JlIHNvcnQg
Ki8KLSAgICBlLT50aWxlX2ZyZWUuY2IgPSB0aWxlX2ZyZWVfY2I7Ci0gICAgZS0+dGlsZV9mcmVl
LmRhdGEgPSAodm9pZCAqKWRhdGE7CisgICAgdWNlLT50aWxlID0gdGlsZTsKKyAgICB1Y2UtPndl
aWdodCA9IDA7IC8qIGNhbGN1bGF0ZWQganVzdCBiZWZvcmUgc29ydCAqLworICAgIHVjZS0+dGls
ZV9mcmVlLmNiID0gdGlsZV9mcmVlX2NiOworICAgIHVjZS0+dGlsZV9mcmVlLmRhdGEgPSAodm9p
ZCopZGF0YTsKIAotICAgIHR1Yy0+ZW50cmllcy5jb3VudCsrOwotICAgIHR1Yy0+bWVtb3J5LnVz
ZWQgKz0gc2l6ZW9mKEV3a19UaWxlKSArIHQtPmJ5dGVzOworICAgIHRpbGVVbnVzZWRDYWNoZS0+
ZW50cmllcy5jb3VudCsrOworICAgIHRpbGVVbnVzZWRDYWNoZS0+bWVtb3J5LnVzZWQgKz0gc2l6
ZW9mKEV3a19UaWxlKSArIHRpbGUtPmJ5dGVzOwogCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0K
IAotdm9pZCBld2tfdGlsZV91bnVzZWRfY2FjaGVfZGJnKGNvbnN0IEV3a19UaWxlX1VudXNlZF9D
YWNoZSAqdHVjKQordm9pZCBld2tfdGlsZV91bnVzZWRfY2FjaGVfZGJnKGNvbnN0IEV3a19UaWxl
X1VudXNlZF9DYWNoZSogdGlsZVVudXNlZENhY2hlKQogewogICAgIHZvaWQqIGl0ZW07Ci0gICAg
RWluYV9MaXN0ICpsOworICAgIEVpbmFfTGlzdCogbDsKICAgICBpbnQgY291bnQgPSAwOwogICAg
IHByaW50ZigiQ2FjaGUgb2YgdW51c2VkIHRpbGVzOiBlbnRyaWVzOiAlenUvJXp1LCBtZW1vcnk6
ICV6dS8lenVcbiIsCi0gICAgICAgICAgIHR1Yy0+ZW50cmllcy5jb3VudCwgdHVjLT5lbnRyaWVz
LmFsbG9jYXRlZCwKLSAgICAgICAgICAgdHVjLT5tZW1vcnkudXNlZCwgdHVjLT5tZW1vcnkubWF4
KTsKKyAgICAgICAgICAgdGlsZVVudXNlZENhY2hlLT5lbnRyaWVzLmNvdW50LCB0aWxlVW51c2Vk
Q2FjaGUtPmVudHJpZXMuYWxsb2NhdGVkLAorICAgICAgICAgICB0aWxlVW51c2VkQ2FjaGUtPm1l
bW9yeS51c2VkLCB0aWxlVW51c2VkQ2FjaGUtPm1lbW9yeS5tYXgpOwogCi0gICAgRUlOQV9MSVNU
X0ZPUkVBQ0godHVjLT5lbnRyaWVzLmxpc3QsIGwsIGl0ZW0pIHsKLSAgICAgICAgY29uc3QgRXdr
X1RpbGUgKnQgPSBzdGF0aWNfY2FzdDxFd2tfVGlsZV9VbnVzZWRfQ2FjaGVfRW50cnkqPihpdGVt
KS0+dGlsZTsKKyAgICBFSU5BX0xJU1RfRk9SRUFDSCh0aWxlVW51c2VkQ2FjaGUtPmVudHJpZXMu
bGlzdCwgbCwgaXRlbSkgeworICAgICAgICBjb25zdCBFd2tfVGlsZSogdGlsZSA9IHN0YXRpY19j
YXN0PEV3a19UaWxlX1VudXNlZF9DYWNoZV9FbnRyeSo+KGl0ZW0pLT50aWxlOwogICAgICAgICBw
cmludGYoIiBbJTNsdSwlM2x1ICsgJWR4JWQgQCAlMC4zZl0lYyIsCi0gICAgICAgICAgICAgICB0
LT5jb2wsIHQtPnJvdywgdC0+dywgdC0+aCwgdC0+em9vbSwKLSAgICAgICAgICAgICAgIHQtPnZp
c2libGUgPyAnKic6ICcgJyk7CisgICAgICAgICAgICAgICB0aWxlLT5jb2wsIHRpbGUtPnJvdywg
dGlsZS0+d2lkdGgsIHRpbGUtPmhlaWdodCwgdGlsZS0+em9vbSwKKyAgICAgICAgICAgICAgIHRp
bGUtPnZpc2libGUgPyAnKicgOiAnICcpOwogCiAgICAgICAgIGlmICghKGNvdW50ICUgNCkpCiAg
ICAgICAgICAgICBwcmludGYoIlxuIik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9l
d2svZXdrX3RpbGVkX21vZGVsLmggYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX21v
ZGVsLmgKaW5kZXggZTY1ZjMxMGJlMGVkMDJkNWRlODFmODVmZjk3YjA5NDUwNjNlOGFlNC4uODVk
ZTAxNjg3MzExYzY1NjNlZjhmYjAxZTBmMjA1MWM1MjJiNjRhZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9lZmwvZXdrL2V3a190aWxlZF9tb2RlbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZs
L2V3ay9ld2tfdGlsZWRfbW9kZWwuaApAQCAtMzQsNyArMzQsNyBAQCB2b2lkIGV3a190aWxlX2hp
ZGUoRXdrX1RpbGUqIHQpOwogRWluYV9Cb29sIGV3a190aWxlX3Zpc2libGVfZ2V0KEV3a19UaWxl
KiB0KTsKIHZvaWQgZXdrX3RpbGVfdXBkYXRlX2Z1bGwoRXdrX1RpbGUqIHQpOwogdm9pZCBld2tf
dGlsZV91cGRhdGVfYXJlYShFd2tfVGlsZSogdCwgY29uc3QgRWluYV9SZWN0YW5nbGUqIHIpOwot
dm9pZCBld2tfdGlsZV91cGRhdGVzX3Byb2Nlc3MoRXdrX1RpbGUqIHQsIHZvaWQgKCogY2IpKHZv
aWQqIGRhdGEsIEV3a19UaWxlKiB0LCBjb25zdCBFaW5hX1JlY3RhbmdsZSogdXBkYXRlKSwgY29u
c3Qgdm9pZCogZGF0YSk7Cit2b2lkIGV3a190aWxlX3VwZGF0ZXNfcHJvY2VzcyhFd2tfVGlsZSog
dCwgdm9pZCAoKmNiKSh2b2lkKiBkYXRhLCBFd2tfVGlsZSogdCwgY29uc3QgRWluYV9SZWN0YW5n
bGUqIHVwZGF0ZSksIGNvbnN0IHZvaWQqIGRhdGEpOwogdm9pZCBld2tfdGlsZV91cGRhdGVzX2Ns
ZWFyKEV3a19UaWxlKiB0KTsKIAogLyogY2FjaGUgb2YgdW51c2VkIHRpbGVzICovCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXcuY3BwIGIvU291cmNlL1dlYktpdC9l
ZmwvZXdrL2V3a192aWV3LmNwcAppbmRleCBkZThkOGQzY2MyMDIxMDQ4MmJhN2UxM2E1YjFhYWZm
ZjU0NGVhODk2Li5mN2YyZTdlMWQ1MDExNWQ1N2U0NDk4ZTgyYjI4YzcwMzQ4NmU5NDMxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXcuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5jcHAKQEAgLTE3Nyw0NCArMTc3LDQ0IEBAIHN0cnVjdCBf
RXdrX1ZpZXdfUHJpdmF0ZV9EYXRhIHsKIH07CiAKICNpZm5kZWYgRVdLX1RZUEVfQ0hFQ0sKLSNk
ZWZpbmUgRVdLX1ZJRVdfVFlQRV9DSEVDSyhvLCAuLi4pIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZp
bmUgRVdLX1ZJRVdfVFlQRV9DSEVDSyhld2tWaWV3LCAuLi4pIGRvIHsgfSB3aGlsZSAoMCkKICNl
bHNlCi0jZGVmaW5lIEVXS19WSUVXX1RZUEVfQ0hFQ0sobywgLi4uKSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIEVXS19WSUVXX1RZUEVfQ0hFQ0soZXdrVmll
dywgLi4uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgZG8geyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgICAgIGNvbnN0IGNoYXIqIF90bXBfb3R5cGUgPSBldmFzX29iamVjdF90eXBl
X2dldChvKTsgICAgICAgICAgICAgICBcCi0gICAgICAgIGNvbnN0IEV2YXNfU21hcnQqIF90bXBf
cyA9IGV2YXNfb2JqZWN0X3NtYXJ0X3NtYXJ0X2dldChvKTsgICAgICBcCisgICAgICAgIGNvbnN0
IGNoYXIqIF90bXBfb3R5cGUgPSBldmFzX29iamVjdF90eXBlX2dldChld2tWaWV3KTsgICAgICAg
ICAgICAgICBcCisgICAgICAgIGNvbnN0IEV2YXNfU21hcnQqIF90bXBfcyA9IGV2YXNfb2JqZWN0
X3NtYXJ0X3NtYXJ0X2dldChld2tWaWV3KTsgICAgICBcCiAgICAgICAgIGlmIChFSU5BX1VOTElL
RUxZKCFfdG1wX3MpKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAg
ICAgICAgICBFSU5BX0xPR19DUklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgKCIlcCAoJXMpIGlzIG5vdCBhIHNtYXJ0IG9i
amVjdCEiLCBvLCAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgKCIlcCAoJXMp
IGlzIG5vdCBhIHNtYXJ0IG9iamVjdCEiLCBld2tWaWV3LCAgICAgICAgICAgICAgICAgICBcCiAg
ICAgICAgICAgICAgICAgX3RtcF9vdHlwZSA/IF90bXBfb3R5cGUgOiAiKG51bGwpIik7ICAgICAg
ICAgICAgICAgICAgIFwKICAgICAgICAgICAgIHJldHVybiBfX1ZBX0FSR1NfXzsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgfSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAg
ICAgY29uc3QgRXZhc19TbWFydF9DbGFzcyogX3RtcF9zYyA9IGV2YXNfc21hcnRfY2xhc3NfZ2V0
KF90bXBfcyk7IFwKICAgICAgICAgaWYgKEVJTkFfVU5MSUtFTFkoIV90bXBfc2MpKSB7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgIEVJTkFfTE9HX0NSSVQg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAg
ICAgICAgICAoIiVwICglcykgaXMgbm90IGEgc21hcnQgb2JqZWN0ISIsIG8sICAgICAgICAgICAg
ICAgICAgIFwKKyAgICAgICAgICAgICAgICAoIiVwICglcykgaXMgbm90IGEgc21hcnQgb2JqZWN0
ISIsIGV3a1ZpZXcsICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICBfdG1wX290
eXBlID8gX3RtcF9vdHlwZSA6ICIobnVsbCkiKTsgICAgICAgICAgICAgICAgICAgXAogICAgICAg
ICAgICAgcmV0dXJuIF9fVkFfQVJHU19fOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAogICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBpZiAoRUlOQV9VTkxJS0VMWShf
dG1wX3NjLT5kYXRhICE9IEVXS19WSUVXX1RZUEVfU1RSKSkgeyAgICAgICAgXAogICAgICAgICAg
ICAgRUlOQV9MT0dfQ1JJVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAogICAgICAgICAgICAgICAgICgiJXAgKCVzKSBpcyBub3Qgb2YgYW4gZXdrX3ZpZXcg
KG5lZWQgJXAsIGdvdCAlcCkhIiwgICAgXAotICAgICAgICAgICAgICAgIG8sIF90bXBfb3R5cGUg
PyBfdG1wX290eXBlIDogIihudWxsKSIsICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAg
ICAgZXdrVmlldywgX3RtcF9vdHlwZSA/IF90bXBfb3R5cGUgOiAiKG51bGwpIiwgICAgICAgICAg
ICAgICAgIFwKICAgICAgICAgICAgICAgICBFV0tfVklFV19UWVBFX1NUUiwgX3RtcF9zYy0+ZGF0
YSk7ICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgcmV0dXJuIF9fVkFfQVJHU19f
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICB9ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAogICAgIH0gd2hpbGUgKDApCiAjZW5kaWYKIAotI2RlZmluZSBFV0tfVklFV19TRF9HRVQo
bywgcHRyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBFd2tfVmlld19T
bWFydF9EYXRhKiBwdHIgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZXZhc19v
YmplY3Rfc21hcnRfZGF0YV9nZXQobykpCisjZGVmaW5lIEVXS19WSUVXX1NEX0dFVChld2tWaWV3
LCBwdHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIEV3a19WaWV3X1Nt
YXJ0X0RhdGEqIHB0ciA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihldmFzX29i
amVjdF9zbWFydF9kYXRhX2dldChld2tWaWV3KSkKIAotI2RlZmluZSBFV0tfVklFV19TRF9HRVRf
T1JfUkVUVVJOKG8sIHB0ciwgLi4uKSAgICAgICAgICBcCi0gICAgRVdLX1ZJRVdfVFlQRV9DSEVD
SyhvLCBfX1ZBX0FSR1NfXyk7ICAgICAgICAgICAgICAgIFwKLSAgICBFV0tfVklFV19TRF9HRVQo
bywgcHRyKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBFV0tfVklFV19T
RF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHB0ciwgLi4uKSAgICAgICAgICBcCisgICAgRVdLX1ZJ
RVdfVFlQRV9DSEVDSyhld2tWaWV3LCBfX1ZBX0FSR1NfXyk7ICAgICAgICAgICAgICAgIFwKKyAg
ICBFV0tfVklFV19TRF9HRVQoZXdrVmlldywgcHRyKTsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAogICAgIGlmICghcHRyKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCiAgICAgICAgIENSSVRJQ0FMKCJubyBzbWFydCBkYXRhIGZvciBvYmplY3QgJXAgKCVz
KSIsICAgIFwKLSAgICAgICAgICAgICAgICAgbywgZXZhc19vYmplY3RfdHlwZV9nZXQobykpOyAg
ICAgICAgICAgXAorICAgICAgICAgICAgICAgICBld2tWaWV3LCBldmFzX29iamVjdF90eXBlX2dl
dChld2tWaWV3KSk7ICAgICAgICAgICBcCiAgICAgICAgIHJldHVybiBfX1ZBX0FSR1NfXzsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICB9CiAKQEAgLTIyOSwxMiArMjI5LDEyIEBA
IHN0cnVjdCBfRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhIHsKICAgICAgICAgcmV0dXJuIF9fVkFfQVJH
U19fOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgfQogCi1zdGF0
aWMgdm9pZCBfZXdrX3ZpZXdfc21hcnRfY2hhbmdlZChFd2tfVmlld19TbWFydF9EYXRhKiBzZCkK
K3N0YXRpYyB2b2lkIF9ld2tfdmlld19zbWFydF9jaGFuZ2VkKEV3a19WaWV3X1NtYXJ0X0RhdGEq
IHNtYXJ0RGF0YSkKIHsKLSAgICBpZiAoc2QtPmNoYW5nZWQuYW55KQorICAgIGlmIChzbWFydERh
dGEtPmNoYW5nZWQuYW55KQogICAgICAgICByZXR1cm47Ci0gICAgc2QtPmNoYW5nZWQuYW55ID0g
RUlOQV9UUlVFOwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NoYW5nZWQoc2QtPnNlbGYpOworICAg
IHNtYXJ0RGF0YS0+Y2hhbmdlZC5hbnkgPSBFSU5BX1RSVUU7CisgICAgZXZhc19vYmplY3Rfc21h
cnRfY2hhbmdlZChzbWFydERhdGEtPnNlbGYpOwogfQogCiBzdGF0aWMgRWluYV9Cb29sIF9ld2tf
dmlld19yZXBhaW50c19yZXNpemUoRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKiBwcml2LCBzaXplX3Qg
c2l6ZSkKQEAgLTI0OSw3ICsyNDksNyBAQCBzdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19yZXBh
aW50c19yZXNpemUoRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKiBwcml2LCBzaXplX3QgcwogICAgIHJl
dHVybiBFSU5BX1RSVUU7CiB9CiAKLXN0YXRpYyB2b2lkIF9ld2tfdmlld19yZXBhaW50X2FkZChF
d2tfVmlld19Qcml2YXRlX0RhdGEqIHByaXYsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5LCBF
dmFzX0Nvb3JkIHcsIEV2YXNfQ29vcmQgaCkKK3N0YXRpYyB2b2lkIF9ld2tfdmlld19yZXBhaW50
X2FkZChFd2tfVmlld19Qcml2YXRlX0RhdGEqIHByaXYsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29y
ZCB5LCBFdmFzX0Nvb3JkIHdpZHRoLCBFdmFzX0Nvb3JkIGhlaWdodCkKIHsKICAgICBFaW5hX1Jl
Y3RhbmdsZSogcjsKIApAQCAtMjY5LDEwICsyNjksMTAgQEAgc3RhdGljIHZvaWQgX2V3a192aWV3
X3JlcGFpbnRfYWRkKEV3a19WaWV3X1ByaXZhdGVfRGF0YSogcHJpdiwgRXZhc19Db29yZCB4LCBF
dmEKIAogICAgIHItPnggPSB4OwogICAgIHItPnkgPSB5OwotICAgIHItPncgPSB3OwotICAgIHIt
PmggPSBoOworICAgIHItPncgPSB3aWR0aDsKKyAgICByLT5oID0gaGVpZ2h0OwogCi0gICAgREJH
KCJhZGQgcmVwYWludCAlZCwgJWQrJWR4JWQiLCB4LCB5LCB3LCBoKTsKKyAgICBEQkcoImFkZCBy
ZXBhaW50ICVkLCAlZCslZHglZCIsIHgsIHksIHdpZHRoLCBoZWlnaHQpOwogfQogCiBzdGF0aWMg
dm9pZCBfZXdrX3ZpZXdfcmVwYWludHNfZmx1c2goRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKiBwcml2
KQpAQCAtMjk1LDE2ICsyOTUsMTYgQEAgc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfc2Nyb2xs
c19yZXNpemUoRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKiBwcml2LCBzaXplX3Qgc2kKICAgICByZXR1
cm4gRUlOQV9UUlVFOwogfQogCi1zdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc2Nyb2xsX2FkZChFd2tf
Vmlld19Qcml2YXRlX0RhdGEqIHByaXYsIEV2YXNfQ29vcmQgZHgsIEV2YXNfQ29vcmQgZHksIEV2
YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5LCBFdmFzX0Nvb3JkIHcsIEV2YXNfQ29vcmQgaCwgRWlu
YV9Cb29sIG1haW5fc2Nyb2xsKQorc3RhdGljIHZvaWQgX2V3a192aWV3X3Njcm9sbF9hZGQoRXdr
X1ZpZXdfUHJpdmF0ZV9EYXRhKiBwcml2LCBFdmFzX0Nvb3JkIGR4LCBFdmFzX0Nvb3JkIGR5LCBF
dmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwgRXZhc19Db29yZCB3aWR0aCwgRXZhc19Db29yZCBo
ZWlnaHQsIEVpbmFfQm9vbCBtYWluU2Nyb2xsKQogewogICAgIEV3a19TY3JvbGxfUmVxdWVzdCog
cjsKICAgICBFd2tfU2Nyb2xsX1JlcXVlc3QqIHJfZW5kOwotICAgIEV2YXNfQ29vcmQgeDIgPSB4
ICsgdywgeTIgPSB5ICsgaDsKKyAgICBFdmFzX0Nvb3JkIHgyID0geCArIHdpZHRoLCB5MiA9IHkg
KyBoZWlnaHQ7CiAKICAgICByID0gcHJpdi0+c2Nyb2xscy5hcnJheTsKICAgICByX2VuZCA9IHIg
KyBwcml2LT5zY3JvbGxzLmNvdW50OwogICAgIGZvciAoOyByIDwgcl9lbmQ7IHIrKykgewotICAg
ICAgICBpZiAoci0+eCA9PSB4ICYmIHItPnkgPT0geSAmJiByLT53ID09IHcgJiYgci0+aCA9PSBo
KSB7CisgICAgICAgIGlmIChyLT54ID09IHggJiYgci0+eSA9PSB5ICYmIHItPncgPT0gd2lkdGgg
JiYgci0+aCA9PSBoZWlnaHQpIHsKICAgICAgICAgICAgIERCRygicmVnaW9uIGFscmVhZHkgc2Ny
b2xsZWQgJWQsJWQrJWR4JWQgJSswM2QsJSswM2QgYWRkICIKICAgICAgICAgICAgICAgICAiJSsw
M2QsJSswM2QiLAogICAgICAgICAgICAgICAgIHItPngsIHItPnksIHItPncsIHItPmgsIHItPmR4
LCByLT5keSwgZHgsIGR5KTsKQEAgLTMzNiwxNCArMzM2LDE0IEBAIHN0YXRpYyB2b2lkIF9ld2tf
dmlld19zY3JvbGxfYWRkKEV3a19WaWV3X1ByaXZhdGVfRGF0YSogcHJpdiwgRXZhc19Db29yZCBk
eCwgRXZhCiAKICAgICByLT54ID0geDsKICAgICByLT55ID0geTsKLSAgICByLT53ID0gdzsKLSAg
ICByLT5oID0gaDsKKyAgICByLT53ID0gd2lkdGg7CisgICAgci0+aCA9IGhlaWdodDsKICAgICBy
LT54MiA9IHgyOwogICAgIHItPnkyID0geTI7CiAgICAgci0+ZHggPSBkeDsKICAgICByLT5keSA9
IGR5OwotICAgIHItPm1haW5fc2Nyb2xsID0gbWFpbl9zY3JvbGw7Ci0gICAgREJHKCJhZGQgc2Ny
b2xsIGluIHJlZ2lvbjogJWQsICVkKyVkeCVkICUrMDNkLCAlKzAzZCIsIHgsIHksIHcsIGgsIGR4
LCBkeSk7CisgICAgci0+bWFpbl9zY3JvbGwgPSBtYWluU2Nyb2xsOworICAgIERCRygiYWRkIHNj
cm9sbCBpbiByZWdpb246ICVkLCAlZCslZHglZCAlKzAzZCwgJSswM2QiLCB4LCB5LCB3aWR0aCwg
aGVpZ2h0LCBkeCwgZHkpOwogCiAgICAgRWluYV9SZWN0YW5nbGUqIHByOwogICAgIEVpbmFfUmVj
dGFuZ2xlKiBwcl9lbmQ7CkBAIC0zNjYsMTEgKzM2NiwxMSBAQCBzdGF0aWMgdm9pZCBfZXdrX3Zp
ZXdfc2Nyb2xsc19mbHVzaChFd2tfVmlld19Qcml2YXRlX0RhdGEqIHByaXYpCiB9CiAKIC8vIERl
ZmF1bHQgRXZlbnQgSGFuZGxpbmcgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLwotc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfc21hcnRfZm9jdXNfaW4oRXdr
X1ZpZXdfU21hcnRfRGF0YSogc2QpCitzdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19zbWFydF9m
b2N1c19pbihFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEpCiB7Ci0gICAgRVdLX1ZJRVdf
UFJJVl9HRVQoc2QsIHByaXYpOworICAgIEVXS19WSUVXX1BSSVZfR0VUKHNtYXJ0RGF0YSwgcHJp
dik7CiAgICAgV2ViQ29yZTo6Rm9jdXNDb250cm9sbGVyKiBmYyA9IHByaXYtPnBhZ2UtPmZvY3Vz
Q29udHJvbGxlcigpOwotICAgIERCRygibz0lcCwgZmM9JXAiLCBzZC0+c2VsZiwgZmMpOworICAg
IERCRygiZXdrVmlldz0lcCwgZmM9JXAiLCBzbWFydERhdGEtPnNlbGYsIGZjKTsKICAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZmMsIEVJTkFfRkFMU0UpOwogCiAgICAgZmMtPnNl
dEFjdGl2ZSh0cnVlKTsKQEAgLTM3OCwxMSArMzc4LDExIEBAIHN0YXRpYyBFaW5hX0Jvb2wgX2V3
a192aWV3X3NtYXJ0X2ZvY3VzX2luKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkKQogICAgIHJldHVy
biBFSU5BX1RSVUU7CiB9CiAKLXN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3NtYXJ0X2ZvY3Vz
X291dChFd2tfVmlld19TbWFydF9EYXRhKiBzZCkKK3N0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3
X3NtYXJ0X2ZvY3VzX291dChFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEpCiB7Ci0gICAg
RVdLX1ZJRVdfUFJJVl9HRVQoc2QsIHByaXYpOworICAgIEVXS19WSUVXX1BSSVZfR0VUKHNtYXJ0
RGF0YSwgcHJpdik7CiAgICAgV2ViQ29yZTo6Rm9jdXNDb250cm9sbGVyKiBmYyA9IHByaXYtPnBh
Z2UtPmZvY3VzQ29udHJvbGxlcigpOwotICAgIERCRygibz0lcCwgZmM9JXAiLCBzZC0+c2VsZiwg
ZmMpOworICAgIERCRygiZXdrVmlldz0lcCwgZmM9JXAiLCBzbWFydERhdGEtPnNlbGYsIGZjKTsK
ICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZmMsIEVJTkFfRkFMU0UpOwogCiAg
ICAgZmMtPnNldEFjdGl2ZShmYWxzZSk7CkBAIC0zOTAsNzEgKzM5MCw3MSBAQCBzdGF0aWMgRWlu
YV9Cb29sIF9ld2tfdmlld19zbWFydF9mb2N1c19vdXQoRXdrX1ZpZXdfU21hcnRfRGF0YSogc2Qp
CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdf
c21hcnRfbW91c2Vfd2hlZWwoRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QsIGNvbnN0IEV2YXNfRXZl
bnRfTW91c2VfV2hlZWwqIGV2KQorc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfc21hcnRfbW91
c2Vfd2hlZWwoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhLCBjb25zdCBFdmFzX0V2ZW50
X01vdXNlX1doZWVsKiB3aGVlbEV2ZW50KQogewotICAgIHJldHVybiBld2tfZnJhbWVfZmVlZF9t
b3VzZV93aGVlbChzZC0+bWFpbl9mcmFtZSwgZXYpOworICAgIHJldHVybiBld2tfZnJhbWVfZmVl
ZF9tb3VzZV93aGVlbChzbWFydERhdGEtPm1haW5fZnJhbWUsIHdoZWVsRXZlbnQpOwogfQogCi1z
dGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19zbWFydF9tb3VzZV9kb3duKEV3a19WaWV3X1NtYXJ0
X0RhdGEqIHNkLCBjb25zdCBFdmFzX0V2ZW50X01vdXNlX0Rvd24qIGV2KQorc3RhdGljIEVpbmFf
Qm9vbCBfZXdrX3ZpZXdfc21hcnRfbW91c2VfZG93bihFd2tfVmlld19TbWFydF9EYXRhKiBzbWFy
dERhdGEsIGNvbnN0IEV2YXNfRXZlbnRfTW91c2VfRG93biogZG93bkV2ZW50KQogewotICAgIHJl
dHVybiBld2tfZnJhbWVfZmVlZF9tb3VzZV9kb3duKHNkLT5tYWluX2ZyYW1lLCBldik7CisgICAg
cmV0dXJuIGV3a19mcmFtZV9mZWVkX21vdXNlX2Rvd24oc21hcnREYXRhLT5tYWluX2ZyYW1lLCBk
b3duRXZlbnQpOwogfQogCi1zdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19zbWFydF9tb3VzZV91
cChFd2tfVmlld19TbWFydF9EYXRhKiBzZCwgY29uc3QgRXZhc19FdmVudF9Nb3VzZV9VcCogZXYp
CitzdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19zbWFydF9tb3VzZV91cChFd2tfVmlld19TbWFy
dF9EYXRhKiBzbWFydERhdGEsIGNvbnN0IEV2YXNfRXZlbnRfTW91c2VfVXAqIHVwRXZlbnQpCiB7
Ci0gICAgcmV0dXJuIGV3a19mcmFtZV9mZWVkX21vdXNlX3VwKHNkLT5tYWluX2ZyYW1lLCBldik7
CisgICAgcmV0dXJuIGV3a19mcmFtZV9mZWVkX21vdXNlX3VwKHNtYXJ0RGF0YS0+bWFpbl9mcmFt
ZSwgdXBFdmVudCk7CiB9CiAKLXN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3NtYXJ0X21vdXNl
X21vdmUoRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QsIGNvbnN0IEV2YXNfRXZlbnRfTW91c2VfTW92
ZSogZXYpCitzdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19zbWFydF9tb3VzZV9tb3ZlKEV3a19W
aWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSwgY29uc3QgRXZhc19FdmVudF9Nb3VzZV9Nb3ZlKiBt
b3ZlRXZlbnQpCiB7Ci0gICAgcmV0dXJuIGV3a19mcmFtZV9mZWVkX21vdXNlX21vdmUoc2QtPm1h
aW5fZnJhbWUsIGV2KTsKKyAgICByZXR1cm4gZXdrX2ZyYW1lX2ZlZWRfbW91c2VfbW92ZShzbWFy
dERhdGEtPm1haW5fZnJhbWUsIG1vdmVFdmVudCk7CiB9CiAKLXN0YXRpYyBFaW5hX0Jvb2wgX2V3
a192aWV3X3NtYXJ0X2tleV9kb3duKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkLCBjb25zdCBFdmFz
X0V2ZW50X0tleV9Eb3duKiBldikKK3N0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3NtYXJ0X2tl
eV9kb3duKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSwgY29uc3QgRXZhc19FdmVudF9L
ZXlfRG93biogZG93bkV2ZW50KQogewotICAgIEV2YXNfT2JqZWN0KiBmcmFtZSA9IGV3a192aWV3
X2ZyYW1lX2ZvY3VzZWRfZ2V0KHNkLT5zZWxmKTsKKyAgICBFdmFzX09iamVjdCogZnJhbWUgPSBl
d2tfdmlld19mcmFtZV9mb2N1c2VkX2dldChzbWFydERhdGEtPnNlbGYpOwogCiAgICAgaWYgKCFm
cmFtZSkKLSAgICAgICAgZnJhbWUgPSBzZC0+bWFpbl9mcmFtZTsKKyAgICAgICAgZnJhbWUgPSBz
bWFydERhdGEtPm1haW5fZnJhbWU7CiAKLSAgICByZXR1cm4gZXdrX2ZyYW1lX2ZlZWRfa2V5X2Rv
d24oZnJhbWUsIGV2KTsKKyAgICByZXR1cm4gZXdrX2ZyYW1lX2ZlZWRfa2V5X2Rvd24oZnJhbWUs
IGRvd25FdmVudCk7CiB9CiAKLXN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3NtYXJ0X2tleV91
cChFd2tfVmlld19TbWFydF9EYXRhKiBzZCwgY29uc3QgRXZhc19FdmVudF9LZXlfVXAqIGV2KQor
c3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfc21hcnRfa2V5X3VwKEV3a19WaWV3X1NtYXJ0X0Rh
dGEqIHNtYXJ0RGF0YSwgY29uc3QgRXZhc19FdmVudF9LZXlfVXAqIHVwRXZlbnQpCiB7Ci0gICAg
RXZhc19PYmplY3QqIGZyYW1lID0gZXdrX3ZpZXdfZnJhbWVfZm9jdXNlZF9nZXQoc2QtPnNlbGYp
OworICAgIEV2YXNfT2JqZWN0KiBmcmFtZSA9IGV3a192aWV3X2ZyYW1lX2ZvY3VzZWRfZ2V0KHNt
YXJ0RGF0YS0+c2VsZik7CiAKICAgICBpZiAoIWZyYW1lKQotICAgICAgICBmcmFtZSA9IHNkLT5t
YWluX2ZyYW1lOworICAgICAgICBmcmFtZSA9IHNtYXJ0RGF0YS0+bWFpbl9mcmFtZTsKIAotICAg
IHJldHVybiBld2tfZnJhbWVfZmVlZF9rZXlfdXAoZnJhbWUsIGV2KTsKKyAgICByZXR1cm4gZXdr
X2ZyYW1lX2ZlZWRfa2V5X3VwKGZyYW1lLCB1cEV2ZW50KTsKIH0KIAotc3RhdGljIHZvaWQgX2V3
a192aWV3X3NtYXJ0X2FkZF9jb25zb2xlX21lc3NhZ2UoRXdrX1ZpZXdfU21hcnRfRGF0YSogc2Qs
IGNvbnN0IGNoYXIqIG1lc3NhZ2UsIHVuc2lnbmVkIGludCBsaW5lTnVtYmVyLCBjb25zdCBjaGFy
KiBzb3VyY2VJRCkKK3N0YXRpYyB2b2lkIF9ld2tfdmlld19zbWFydF9hZGRfY29uc29sZV9tZXNz
YWdlKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSwgY29uc3QgY2hhciogbWVzc2FnZSwg
dW5zaWduZWQgaW50IGxpbmVOdW1iZXIsIGNvbnN0IGNoYXIqIHNvdXJjZUlEKQogewogICAgIElO
RigiY29uc29sZSBtZXNzYWdlOiAlcyBAJWQ6ICVzXG4iLCBzb3VyY2VJRCwgbGluZU51bWJlciwg
bWVzc2FnZSk7CiB9CiAKLXN0YXRpYyB2b2lkIF9ld2tfdmlld19zbWFydF9ydW5famF2YXNjcmlw
dF9hbGVydChFd2tfVmlld19TbWFydF9EYXRhKiBzZCwgRXZhc19PYmplY3QqIGZyYW1lLCBjb25z
dCBjaGFyKiBtZXNzYWdlKQorc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X3J1bl9qYXZhc2Ny
aXB0X2FsZXJ0KEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSwgRXZhc19PYmplY3QqIGZy
YW1lLCBjb25zdCBjaGFyKiBtZXNzYWdlKQogewogICAgIElORigiamF2YXNjcmlwdCBhbGVydDog
JXNcbiIsIG1lc3NhZ2UpOwogfQogCi1zdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19zbWFydF9y
dW5famF2YXNjcmlwdF9jb25maXJtKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkLCBFdmFzX09iamVj
dCogZnJhbWUsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpCitzdGF0aWMgRWluYV9Cb29sIF9ld2tfdmll
d19zbWFydF9ydW5famF2YXNjcmlwdF9jb25maXJtKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0
RGF0YSwgRXZhc19PYmplY3QqIGZyYW1lLCBjb25zdCBjaGFyKiBtZXNzYWdlKQogewogICAgIElO
RigiamF2YXNjcmlwdCBjb25maXJtOiAlcyIsIG1lc3NhZ2UpOwogICAgIElORigiamF2YXNjcmlw
dCBjb25maXJtIChIQVJEIENPREVEKT8gWUVTIik7CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0K
IAotc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfc21hcnRfc2hvdWxkX2ludGVycnVwdF9qYXZh
c2NyaXB0KEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkKQorc3RhdGljIEVpbmFfQm9vbCBfZXdrX3Zp
ZXdfc21hcnRfc2hvdWxkX2ludGVycnVwdF9qYXZhc2NyaXB0KEV3a19WaWV3X1NtYXJ0X0RhdGEq
IHNtYXJ0RGF0YSkKIHsKICAgICBJTkYoInNob3VsZCBpbnRlcnJ1cHQgamF2YXNjcmlwdD9cbiIK
ICAgICAgICAgIlx0KEhBUkQgQ09ERUQpIE5PIik7CiAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CiB9
CiAKLXN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3NtYXJ0X3J1bl9qYXZhc2NyaXB0X3Byb21w
dChFd2tfVmlld19TbWFydF9EYXRhKiBzZCwgRXZhc19PYmplY3QqIGZyYW1lLCBjb25zdCBjaGFy
KiBtZXNzYWdlLCBjb25zdCBjaGFyKiBkZWZhdWx0VmFsdWUsIGNoYXIqKiB2YWx1ZSkKK3N0YXRp
YyBFaW5hX0Jvb2wgX2V3a192aWV3X3NtYXJ0X3J1bl9qYXZhc2NyaXB0X3Byb21wdChFd2tfVmll
d19TbWFydF9EYXRhKiBzbWFydERhdGEsIEV2YXNfT2JqZWN0KiBmcmFtZSwgY29uc3QgY2hhciog
bWVzc2FnZSwgY29uc3QgY2hhciogZGVmYXVsdFZhbHVlLCBjaGFyKiogdmFsdWUpCiB7CiAgICAg
KnZhbHVlID0gc3RyZHVwKCJ0ZXN0Iik7CiAgICAgRWluYV9Cb29sIHJldCA9IEVJTkFfVFJVRTsK
QEAgLTQ2OCw3ICs0NjgsNyBAQCBzdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19zbWFydF9ydW5f
amF2YXNjcmlwdF9wcm9tcHQoRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QsCiB9CiAKIC8vIEV2ZW50
IEhhbmRsaW5nIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLwotc3RhdGljIHZvaWQgX2V3a192aWV3X29uX2ZvY3VzX2luKHZvaWQqIGRhdGEsIEV2
YXMqIGUsIEV2YXNfT2JqZWN0KiBvLCB2b2lkKiBldmVudF9pbmZvKQorc3RhdGljIHZvaWQgX2V3
a192aWV3X29uX2ZvY3VzX2luKHZvaWQqIGRhdGEsIEV2YXMqIGV2ZW50VHlwZSwgRXZhc19PYmpl
Y3QqIGNhbGxiYWNrLCB2b2lkKiBldmVudEluZm8pCiB7CiAgICAgRXdrX1ZpZXdfU21hcnRfRGF0
YSogc2QgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZGF0YSk7CiAgICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFwaSk7CkBAIC00NzYsNyArNDc2LDcgQEAgc3Rh
dGljIHZvaWQgX2V3a192aWV3X29uX2ZvY3VzX2luKHZvaWQqIGRhdGEsIEV2YXMqIGUsIEV2YXNf
T2JqZWN0KiBvLCB2b2lkKiBldmUKICAgICBzZC0+YXBpLT5mb2N1c19pbihzZCk7CiB9CiAKLXN0
YXRpYyB2b2lkIF9ld2tfdmlld19vbl9mb2N1c19vdXQodm9pZCogZGF0YSwgRXZhcyogZSwgRXZh
c19PYmplY3QqIG8sIHZvaWQqIGV2ZW50X2luZm8pCitzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfb25f
Zm9jdXNfb3V0KHZvaWQqIGRhdGEsIEV2YXMqIGV2ZW50VHlwZSwgRXZhc19PYmplY3QqIGNhbGxi
YWNrLCB2b2lkKiBldmVudEluZm8pCiB7CiAgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QgPSBz
dGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZGF0YSk7CiAgICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk4oc2QtPmFwaSk7CkBAIC00ODQsNjMgKzQ4NCw2MyBAQCBzdGF0aWMgdm9p
ZCBfZXdrX3ZpZXdfb25fZm9jdXNfb3V0KHZvaWQqIGRhdGEsIEV2YXMqIGUsIEV2YXNfT2JqZWN0
KiBvLCB2b2lkKiBldgogICAgIHNkLT5hcGktPmZvY3VzX291dChzZCk7CiB9CiAKLXN0YXRpYyB2
b2lkIF9ld2tfdmlld19vbl9tb3VzZV93aGVlbCh2b2lkKiBkYXRhLCBFdmFzKiBlLCBFdmFzX09i
amVjdCogbywgdm9pZCogZXZlbnRfaW5mbykKK3N0YXRpYyB2b2lkIF9ld2tfdmlld19vbl9tb3Vz
ZV93aGVlbCh2b2lkKiBkYXRhLCBFdmFzKiBldmVudFR5cGUsIEV2YXNfT2JqZWN0KiBjYWxsYmFj
aywgdm9pZCogZXZlbnRJbmZvKQogewotICAgIEV2YXNfRXZlbnRfTW91c2VfV2hlZWwqIGV2ID0g
c3RhdGljX2Nhc3Q8RXZhc19FdmVudF9Nb3VzZV9XaGVlbCo+KGV2ZW50X2luZm8pOworICAgIEV2
YXNfRXZlbnRfTW91c2VfV2hlZWwqIGV2ID0gc3RhdGljX2Nhc3Q8RXZhc19FdmVudF9Nb3VzZV9X
aGVlbCo+KGV2ZW50SW5mbyk7CiAgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QgPSBzdGF0aWNf
Y2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZGF0YSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk4oc2QtPmFwaSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFw
aS0+bW91c2Vfd2hlZWwpOwogICAgIHNkLT5hcGktPm1vdXNlX3doZWVsKHNkLCBldik7CiB9CiAK
LXN0YXRpYyB2b2lkIF9ld2tfdmlld19vbl9tb3VzZV9kb3duKHZvaWQqIGRhdGEsIEV2YXMqIGUs
IEV2YXNfT2JqZWN0KiBvLCB2b2lkKiBldmVudF9pbmZvKQorc3RhdGljIHZvaWQgX2V3a192aWV3
X29uX21vdXNlX2Rvd24odm9pZCogZGF0YSwgRXZhcyogZXZlbnRUeXBlLCBFdmFzX09iamVjdCog
Y2FsbGJhY2ssIHZvaWQqIGV2ZW50SW5mbykKIHsKLSAgICBFdmFzX0V2ZW50X01vdXNlX0Rvd24q
IGV2ID0gc3RhdGljX2Nhc3Q8RXZhc19FdmVudF9Nb3VzZV9Eb3duKj4oZXZlbnRfaW5mbyk7Cisg
ICAgRXZhc19FdmVudF9Nb3VzZV9Eb3duKiBldiA9IHN0YXRpY19jYXN0PEV2YXNfRXZlbnRfTW91
c2VfRG93bio+KGV2ZW50SW5mbyk7CiAgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QgPSBzdGF0
aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZGF0YSk7CiAgICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk4oc2QtPmFwaSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2Qt
PmFwaS0+bW91c2VfZG93bik7CiAgICAgc2QtPmFwaS0+bW91c2VfZG93bihzZCwgZXYpOwogfQog
Ci1zdGF0aWMgdm9pZCBfZXdrX3ZpZXdfb25fbW91c2VfdXAodm9pZCogZGF0YSwgRXZhcyogZSwg
RXZhc19PYmplY3QqIG8sIHZvaWQqIGV2ZW50X2luZm8pCitzdGF0aWMgdm9pZCBfZXdrX3ZpZXdf
b25fbW91c2VfdXAodm9pZCogZGF0YSwgRXZhcyogZXZlbnRUeXBlLCBFdmFzX09iamVjdCogY2Fs
bGJhY2ssIHZvaWQqIGV2ZW50SW5mbykKIHsKLSAgICBFdmFzX0V2ZW50X01vdXNlX1VwKiBldiA9
IHN0YXRpY19jYXN0PEV2YXNfRXZlbnRfTW91c2VfVXAqPihldmVudF9pbmZvKTsKKyAgICBFdmFz
X0V2ZW50X01vdXNlX1VwKiBldiA9IHN0YXRpY19jYXN0PEV2YXNfRXZlbnRfTW91c2VfVXAqPihl
dmVudEluZm8pOwogICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0gc3RhdGljX2Nhc3Q8RXdr
X1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJO
KHNkLT5hcGkpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGktPm1vdXNl
X3VwKTsKICAgICBzZC0+YXBpLT5tb3VzZV91cChzZCwgZXYpOwogfQogCi1zdGF0aWMgdm9pZCBf
ZXdrX3ZpZXdfb25fbW91c2VfbW92ZSh2b2lkKiBkYXRhLCBFdmFzKiBlLCBFdmFzX09iamVjdCog
bywgdm9pZCogZXZlbnRfaW5mbykKK3N0YXRpYyB2b2lkIF9ld2tfdmlld19vbl9tb3VzZV9tb3Zl
KHZvaWQqIGRhdGEsIEV2YXMqIGV2ZW50VHlwZSwgRXZhc19PYmplY3QqIGNhbGxiYWNrLCB2b2lk
KiBldmVudEluZm8pCiB7Ci0gICAgRXZhc19FdmVudF9Nb3VzZV9Nb3ZlKiBldiA9IHN0YXRpY19j
YXN0PEV2YXNfRXZlbnRfTW91c2VfTW92ZSo+KGV2ZW50X2luZm8pOworICAgIEV2YXNfRXZlbnRf
TW91c2VfTW92ZSogZXYgPSBzdGF0aWNfY2FzdDxFdmFzX0V2ZW50X01vdXNlX01vdmUqPihldmVu
dEluZm8pOwogICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0gc3RhdGljX2Nhc3Q8RXdrX1Zp
ZXdfU21hcnRfRGF0YSo+KGRhdGEpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNk
LT5hcGkpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGktPm1vdXNlX21v
dmUpOwogICAgIHNkLT5hcGktPm1vdXNlX21vdmUoc2QsIGV2KTsKIH0KIAotc3RhdGljIHZvaWQg
X2V3a192aWV3X29uX2tleV9kb3duKHZvaWQqIGRhdGEsIEV2YXMqIGUsIEV2YXNfT2JqZWN0KiBv
LCB2b2lkKiBldmVudF9pbmZvKQorc3RhdGljIHZvaWQgX2V3a192aWV3X29uX2tleV9kb3duKHZv
aWQqIGRhdGEsIEV2YXMqIGV2ZW50VHlwZSwgRXZhc19PYmplY3QqIGNhbGxiYWNrLCB2b2lkKiBl
dmVudEluZm8pCiB7Ci0gICAgRXZhc19FdmVudF9LZXlfRG93biogZXYgPSBzdGF0aWNfY2FzdDxF
dmFzX0V2ZW50X0tleV9Eb3duKj4oZXZlbnRfaW5mbyk7CisgICAgRXZhc19FdmVudF9LZXlfRG93
biogZXYgPSBzdGF0aWNfY2FzdDxFdmFzX0V2ZW50X0tleV9Eb3duKj4oZXZlbnRJbmZvKTsKICAg
ICBFd2tfVmlld19TbWFydF9EYXRhKiBzZCA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0Rh
dGEqPihkYXRhKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpKTsKICAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpLT5rZXlfZG93bik7CiAgICAgc2Qt
PmFwaS0+a2V5X2Rvd24oc2QsIGV2KTsKIH0KIAotc3RhdGljIHZvaWQgX2V3a192aWV3X29uX2tl
eV91cCh2b2lkKiBkYXRhLCBFdmFzKiBlLCBFdmFzX09iamVjdCogbywgdm9pZCogZXZlbnRfaW5m
bykKK3N0YXRpYyB2b2lkIF9ld2tfdmlld19vbl9rZXlfdXAodm9pZCogZGF0YSwgRXZhcyogZXZl
bnRUeXBlLCBFdmFzX09iamVjdCogY2FsbGJhY2ssIHZvaWQqIGV2ZW50SW5mbykKIHsKLSAgICBF
dmFzX0V2ZW50X0tleV9VcCogZXYgPSBzdGF0aWNfY2FzdDxFdmFzX0V2ZW50X0tleV9VcCo+KGV2
ZW50X2luZm8pOworICAgIEV2YXNfRXZlbnRfS2V5X1VwKiBldiA9IHN0YXRpY19jYXN0PEV2YXNf
RXZlbnRfS2V5X1VwKj4oZXZlbnRJbmZvKTsKICAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzZCA9
IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihkYXRhKTsKICAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
TihzZC0+YXBpLT5rZXlfdXApOwogICAgIHNkLT5hcGktPmtleV91cChzZCwgZXYpOwogfQogCi1z
dGF0aWMgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkZyYW1lPiBfZXdrX3ZpZXdfY29yZV9mcmFt
ZV9uZXcoRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QsIEV3a19WaWV3X1ByaXZhdGVfRGF0YSogcHJp
diwgV2ViQ29yZTo6SFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lcikKK3N0YXRpYyBXVEY6OlBh
c3NSZWZQdHI8V2ViQ29yZTo6RnJhbWU+IF9ld2tfdmlld19jb3JlX2ZyYW1lX25ldyhFd2tfVmll
d19TbWFydF9EYXRhKiBzbWFydERhdGEsIEV3a19WaWV3X1ByaXZhdGVfRGF0YSogcHJpdiwgV2Vi
Q29yZTo6SFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lcikKIHsKLSAgICBXZWJDb3JlOjpGcmFt
ZUxvYWRlckNsaWVudEVmbCogZmxjID0gbmV3IFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50RWZs
KHNkLT5zZWxmKTsKKyAgICBXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEVmbCogZmxjID0gbmV3
IFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50RWZsKHNtYXJ0RGF0YS0+c2VsZik7CiAgICAgaWYg
KCFmbGMpIHsKICAgICAgICAgQ1JJVElDQUwoIkNvdWxkIG5vdCBjcmVhdGUgZnJhbWUgbG9hZGVy
IGNsaWVudC4iKTsKICAgICAgICAgcmV0dXJuIDA7CkBAIC01NTIsNyArNTUyLDcgQEAgc3RhdGlj
IFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpGcmFtZT4gX2V3a192aWV3X2NvcmVfZnJhbWVfbmV3
KEV3a19WaWV3X1NtYXJ0X0QKIAogc3RhdGljIEV2YXNfU21hcnRfQ2xhc3MgX3BhcmVudF9zYyA9
IEVWQVNfU01BUlRfQ0xBU1NfSU5JVF9OVUxMOwogCi1zdGF0aWMgRXdrX1ZpZXdfUHJpdmF0ZV9E
YXRhKiBfZXdrX3ZpZXdfcHJpdl9uZXcoRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QpCitzdGF0aWMg
RXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKiBfZXdrX3ZpZXdfcHJpdl9uZXcoRXdrX1ZpZXdfU21hcnRf
RGF0YSogc21hcnREYXRhKQogewogICAgIEV3a19WaWV3X1ByaXZhdGVfRGF0YSogcHJpdiA9CiAg
ICAgICAgIHN0YXRpY19jYXN0PEV3a19WaWV3X1ByaXZhdGVfRGF0YSo+KGNhbGxvYygxLCBzaXpl
b2YoRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKSkpOwpAQCAtNTY1LDggKzU2NSw4IEBAIHN0YXRpYyBF
d2tfVmlld19Qcml2YXRlX0RhdGEqIF9ld2tfdmlld19wcml2X25ldyhFd2tfVmlld19TbWFydF9E
YXRhKiBzZCkKICAgICB9CiAKICAgICBXZWJDb3JlOjpQYWdlOjpQYWdlQ2xpZW50cyBwYWdlQ2xp
ZW50czsKLSAgICBwYWdlQ2xpZW50cy5jaHJvbWVDbGllbnQgPSBzdGF0aWNfY2FzdDxXZWJDb3Jl
OjpDaHJvbWVDbGllbnQqPihuZXcgV2ViQ29yZTo6Q2hyb21lQ2xpZW50RWZsKHNkLT5zZWxmKSk7
Ci0gICAgcGFnZUNsaWVudHMuZWRpdG9yQ2xpZW50ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RWRp
dG9yQ2xpZW50Kj4obmV3IFdlYkNvcmU6OkVkaXRvckNsaWVudEVmbChzZC0+c2VsZikpOworICAg
IHBhZ2VDbGllbnRzLmNocm9tZUNsaWVudCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkNocm9tZUNs
aWVudCo+KG5ldyBXZWJDb3JlOjpDaHJvbWVDbGllbnRFZmwoc21hcnREYXRhLT5zZWxmKSk7Cisg
ICAgcGFnZUNsaWVudHMuZWRpdG9yQ2xpZW50ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RWRpdG9y
Q2xpZW50Kj4obmV3IFdlYkNvcmU6OkVkaXRvckNsaWVudEVmbChzbWFydERhdGEtPnNlbGYpKTsK
ICAgICBwYWdlQ2xpZW50cy5kcmFnQ2xpZW50ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RHJhZ0Ns
aWVudCo+KG5ldyBXZWJDb3JlOjpEcmFnQ2xpZW50RWZsKTsKICAgICBwYWdlQ2xpZW50cy5pbnNw
ZWN0b3JDbGllbnQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpJbnNwZWN0b3JDbGllbnQqPihuZXcg
V2ViQ29yZTo6SW5zcGVjdG9yQ2xpZW50RWZsKTsKICNpZiBFTkFCTEUoREVWSUNFX09SSUVOVEFU
SU9OKQpAQCAtNTk0LDggKzU5NCw4IEBAIHN0YXRpYyBFd2tfVmlld19Qcml2YXRlX0RhdGEqIF9l
d2tfdmlld19wcml2X25ldyhFd2tfVmlld19TbWFydF9EYXRhKiBzZCkKICAgICBwcml2LT52aWV3
cG9ydF9hcmd1bWVudHMudXNlclNjYWxhYmxlID0gRUlOQV9UUlVFOwogCiAgICAgcHJpdi0+cGFn
ZV9zZXR0aW5ncy0+c2V0TG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5KHRydWUpOwotICAgIHByaXYt
PnBhZ2Vfc2V0dGluZ3MtPnNldERlZmF1bHRGaXhlZEZvbnRTaXplKDEyKTsKLSAgICBwcml2LT5w
YWdlX3NldHRpbmdzLT5zZXREZWZhdWx0Rm9udFNpemUoMTYpOworICAgIHByaXYtPnBhZ2Vfc2V0
dGluZ3MtPnNldERlZmF1bHRGaXhlZEZvbnRTaXplKDEwKTsKKyAgICBwcml2LT5wYWdlX3NldHRp
bmdzLT5zZXREZWZhdWx0Rm9udFNpemUoMTMpOwogICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNl
dFNlcmlmRm9udEZhbWlseSgic2VyaWYiKTsKICAgICBwcml2LT5wYWdlX3NldHRpbmdzLT5zZXRG
aXhlZEZvbnRGYW1pbHkoIm1vbm90eXBlIik7CiAgICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0
U2Fuc1NlcmlmRm9udEZhbWlseSgic2FucyIpOwpAQCAtNjY1LDcgKzY2NSw3IEBAIHN0YXRpYyBF
d2tfVmlld19Qcml2YXRlX0RhdGEqIF9ld2tfdmlld19wcml2X25ldyhFd2tfVmlld19TbWFydF9E
YXRhKiBzZCkKIAogICAgIHByaXYtPnNldHRpbmdzLmRvbV90aW1lcl9pbnRlcnZhbCA9IHByaXYt
PnBhZ2Vfc2V0dGluZ3MtPmRlZmF1bHRNaW5ET01UaW1lckludGVydmFsKCk7CiAKLSAgICBwcml2
LT5tYWluX2ZyYW1lID0gX2V3a192aWV3X2NvcmVfZnJhbWVfbmV3KHNkLCBwcml2LCAwKS5nZXQo
KTsKKyAgICBwcml2LT5tYWluX2ZyYW1lID0gX2V3a192aWV3X2NvcmVfZnJhbWVfbmV3KHNtYXJ0
RGF0YSwgcHJpdiwgMCkuZ2V0KCk7CiAgICAgaWYgKCFwcml2LT5tYWluX2ZyYW1lKSB7CiAgICAg
ICAgIENSSVRJQ0FMKCJDb3VsZCBub3QgY3JlYXRlIG1haW4gZnJhbWUuIik7CiAgICAgICAgIGdv
dG8gZXJyb3JfbWFpbl9mcmFtZTsKQEAgLTcyMCwxMyArNzIwLDEzIEBAIHN0YXRpYyB2b2lkIF9l
d2tfdmlld19wcml2X2RlbChFd2tfVmlld19Qcml2YXRlX0RhdGEqIHByaXYpCiAgICAgZnJlZShw
cml2KTsKIH0KIAotc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X2FkZChFdmFzX09iamVjdCog
bykKK3N0YXRpYyB2b2lkIF9ld2tfdmlld19zbWFydF9hZGQoRXZhc19PYmplY3QqIGV3a1ZpZXcp
CiB7Ci0gICAgY29uc3QgRXZhc19TbWFydCogc21hcnQgPSBldmFzX29iamVjdF9zbWFydF9zbWFy
dF9nZXQobyk7CisgICAgY29uc3QgRXZhc19TbWFydCogc21hcnQgPSBldmFzX29iamVjdF9zbWFy
dF9zbWFydF9nZXQoZXdrVmlldyk7CiAgICAgY29uc3QgRXZhc19TbWFydF9DbGFzcyogc2MgPSBl
dmFzX3NtYXJ0X2NsYXNzX2dldChzbWFydCk7CiAgICAgY29uc3QgRXdrX1ZpZXdfU21hcnRfQ2xh
c3MqIGFwaSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgRXdrX1ZpZXdfU21hcnRfQ2xhc3MqPihz
Yyk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oYXBpLT5iYWNraW5nX3N0b3JlX2Fk
ZCk7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUKG8sIHNkKTsKKyAgICBFV0tfVklFV19TRF9HRVQoZXdr
Vmlldywgc2QpOwogCiAgICAgaWYgKCFzZCkgewogICAgICAgICBzZCA9IHN0YXRpY19jYXN0PEV3
a19WaWV3X1NtYXJ0X0RhdGEqPihjYWxsb2MoMSwgc2l6ZW9mKEV3a19WaWV3X1NtYXJ0X0RhdGEp
KSk7CkBAIC03MzQsNyArNzM0LDcgQEAgc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X2FkZChF
dmFzX09iamVjdCogbykKICAgICAgICAgICAgIENSSVRJQ0FMKCJjb3VsZCBub3QgYWxsb2NhdGUg
RXdrX1ZpZXdfU21hcnRfRGF0YSIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0g
ICAgICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2RhdGFfc2V0KG8sIHNkKTsKKyAgICAgICAgZXZhc19v
YmplY3Rfc21hcnRfZGF0YV9zZXQoZXdrVmlldywgc2QpOwogICAgIH0KIAogICAgIHNkLT5iZ19j
b2xvci5yID0gMjU1OwpAQCAtNzQyLDExICs3NDIsMTEgQEAgc3RhdGljIHZvaWQgX2V3a192aWV3
X3NtYXJ0X2FkZChFdmFzX09iamVjdCogbykKICAgICBzZC0+YmdfY29sb3IuYiA9IDI1NTsKICAg
ICBzZC0+YmdfY29sb3IuYSA9IDI1NTsKIAotICAgIHNkLT5zZWxmID0gbzsKKyAgICBzZC0+c2Vs
ZiA9IGV3a1ZpZXc7CiAgICAgc2QtPl9wcml2ID0gX2V3a192aWV3X3ByaXZfbmV3KHNkKTsKICAg
ICBzZC0+YXBpID0gYXBpOwogCi0gICAgX3BhcmVudF9zYy5hZGQobyk7CisgICAgX3BhcmVudF9z
Yy5hZGQoZXdrVmlldyk7CiAKICAgICBpZiAoIXNkLT5fcHJpdikKICAgICAgICAgcmV0dXJuOwpA
QCAtNzU5LDEzICs3NTksMTMgQEAgc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X2FkZChFdmFz
X09iamVjdCogbykKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGV2YXNfb2JqZWN0X3Nt
YXJ0X21lbWJlcl9hZGQoc2QtPmJhY2tpbmdfc3RvcmUsIG8pOworICAgIGV2YXNfb2JqZWN0X3Nt
YXJ0X21lbWJlcl9hZGQoc2QtPmJhY2tpbmdfc3RvcmUsIGV3a1ZpZXcpOwogICAgIGV2YXNfb2Jq
ZWN0X3Nob3coc2QtPmJhY2tpbmdfc3RvcmUpOwogICAgIGV2YXNfb2JqZWN0X3Bhc3NfZXZlbnRz
X3NldChzZC0+YmFja2luZ19zdG9yZSwgRUlOQV9UUlVFKTsKIAogICAgIHNkLT5ldmVudHNfcmVj
dCA9IGV2YXNfb2JqZWN0X3JlY3RhbmdsZV9hZGQoc2QtPmJhc2UuZXZhcyk7CiAgICAgZXZhc19v
YmplY3RfY29sb3Jfc2V0KHNkLT5ldmVudHNfcmVjdCwgMCwgMCwgMCwgMCk7Ci0gICAgZXZhc19v
YmplY3Rfc21hcnRfbWVtYmVyX2FkZChzZC0+ZXZlbnRzX3JlY3QsIG8pOworICAgIGV2YXNfb2Jq
ZWN0X3NtYXJ0X21lbWJlcl9hZGQoc2QtPmV2ZW50c19yZWN0LCBld2tWaWV3KTsKICAgICBldmFz
X29iamVjdF9zaG93KHNkLT5ldmVudHNfcmVjdCk7CiAKICAgICBzZC0+bWFpbl9mcmFtZSA9IGV3
a19mcmFtZV9hZGQoc2QtPmJhc2UuZXZhcyk7CkBAIC03NzQsNyArNzc0LDcgQEAgc3RhdGljIHZv
aWQgX2V3a192aWV3X3NtYXJ0X2FkZChFdmFzX09iamVjdCogbykKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIGlmICghZXdrX2ZyYW1lX2luaXQoc2QtPm1haW5fZnJhbWUsIG8sIHByaXYt
Pm1haW5fZnJhbWUpKSB7CisgICAgaWYgKCFld2tfZnJhbWVfaW5pdChzZC0+bWFpbl9mcmFtZSwg
ZXdrVmlldywgcHJpdi0+bWFpbl9mcmFtZSkpIHsKICAgICAgICAgRVJSKCJDb3VsZCBub3QgaW5p
dGlhbGl6ZSBtYWluIGZybWUgb2JqZWN0LiIpOwogICAgICAgICBldmFzX29iamVjdF9kZWwoc2Qt
Pm1haW5fZnJhbWUpOwogICAgICAgICBzZC0+bWFpbl9mcmFtZSA9IDA7CkBAIC03ODUsMTAgKzc4
NSwxMCBAQCBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21hcnRfYWRkKEV2YXNfT2JqZWN0KiBvKQog
ICAgIH0KIAogICAgIGV2YXNfb2JqZWN0X25hbWVfc2V0KHNkLT5tYWluX2ZyYW1lLCAiRVdLX0Zy
YW1lOm1haW4iKTsKLSAgICBldmFzX29iamVjdF9zbWFydF9tZW1iZXJfYWRkKHNkLT5tYWluX2Zy
YW1lLCBvKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9tZW1iZXJfYWRkKHNkLT5tYWluX2ZyYW1l
LCBld2tWaWV3KTsKICAgICBldmFzX29iamVjdF9zaG93KHNkLT5tYWluX2ZyYW1lKTsKIAotI2Rl
ZmluZSBDT05ORUNUKHMsIGMpIGV2YXNfb2JqZWN0X2V2ZW50X2NhbGxiYWNrX2FkZChvLCBzLCBj
LCBzZCkKKyNkZWZpbmUgQ09OTkVDVChzLCBjKSBldmFzX29iamVjdF9ldmVudF9jYWxsYmFja19h
ZGQoZXdrVmlldywgcywgYywgc2QpCiAgICAgQ09OTkVDVChFVkFTX0NBTExCQUNLX0ZPQ1VTX0lO
LCBfZXdrX3ZpZXdfb25fZm9jdXNfaW4pOwogICAgIENPTk5FQ1QoRVZBU19DQUxMQkFDS19GT0NV
U19PVVQsIF9ld2tfdmlld19vbl9mb2N1c19vdXQpOwogICAgIENPTk5FQ1QoRVZBU19DQUxMQkFD
S19NT1VTRV9XSEVFTCwgX2V3a192aWV3X29uX21vdXNlX3doZWVsKTsKQEAgLTgwMCwxOSArODAw
LDE5IEBAIHN0YXRpYyB2b2lkIF9ld2tfdmlld19zbWFydF9hZGQoRXZhc19PYmplY3QqIG8pCiAj
dW5kZWYgQ09OTkVDVAogfQogCi1zdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21hcnRfZGVsKEV2YXNf
T2JqZWN0KiBvKQorc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X2RlbChFdmFzX09iamVjdCog
ZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVQobywgc2QpOworICAgIEVXS19WSUVXX1NE
X0dFVChld2tWaWV3LCBzZCk7CiAgICAgRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKiBwcml2ID0gc2Qg
PyBzZC0+X3ByaXYgOiAwOwogCi0gICAgZXdrX3ZpZXdfc3RvcChvKTsKLSAgICBfcGFyZW50X3Nj
LmRlbChvKTsKKyAgICBld2tfdmlld19zdG9wKGV3a1ZpZXcpOworICAgIF9wYXJlbnRfc2MuZGVs
KGV3a1ZpZXcpOwogICAgIF9ld2tfdmlld19wcml2X2RlbChwcml2KTsKIH0KIAotc3RhdGljIHZv
aWQgX2V3a192aWV3X3NtYXJ0X3Jlc2l6ZShFdmFzX09iamVjdCogbywgRXZhc19Db29yZCB3LCBF
dmFzX0Nvb3JkIGgpCitzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21hcnRfcmVzaXplKEV2YXNfT2Jq
ZWN0KiBld2tWaWV3LCBFdmFzX0Nvb3JkIHcsIEV2YXNfQ29vcmQgaCkKIHsKLSAgICBFV0tfVklF
V19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJO
KGV3a1ZpZXcsIHNkKTsKIAogICAgIC8vIHRoZXNlIHNob3VsZCBiZSBxdWV1ZWQgYW5kIHByb2Nl
c3NlZCBpbiBjYWxjdWxhdGUgYXMgd2VsbCEKICAgICBldmFzX29iamVjdF9yZXNpemUoc2QtPmJh
Y2tpbmdfc3RvcmUsIHcsIGgpOwpAQCAtODIxLDE2ICs4MjEsMTYgQEAgc3RhdGljIHZvaWQgX2V3
a192aWV3X3NtYXJ0X3Jlc2l6ZShFdmFzX09iamVjdCogbywgRXZhc19Db29yZCB3LCBFdmFzX0Nv
b3JkIGgpCiAgICAgX2V3a192aWV3X3NtYXJ0X2NoYW5nZWQoc2QpOwogfQogCi1zdGF0aWMgdm9p
ZCBfZXdrX3ZpZXdfc21hcnRfbW92ZShFdmFzX09iamVjdCogbywgRXZhc19Db29yZCB4LCBFdmFz
X0Nvb3JkIHkpCitzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21hcnRfbW92ZShFdmFzX09iamVjdCog
ZXdrVmlldywgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHkpCiB7Ci0gICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihvLCBzZCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tW
aWV3LCBzZCk7CiAgICAgc2QtPmNoYW5nZWQucG9zaXRpb24gPSBFSU5BX1RSVUU7CiAgICAgX2V3
a192aWV3X3NtYXJ0X2NoYW5nZWQoc2QpOwogfQogCi1zdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21h
cnRfY2FsY3VsYXRlKEV2YXNfT2JqZWN0KiBvKQorc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0
X2NhbGN1bGF0ZShFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVQo
bywgc2QpOworICAgIEVXS19WSUVXX1NEX0dFVChld2tWaWV3LCBzZCk7CiAgICAgRVdLX1ZJRVdf
UFJJVl9HRVQoc2QsIHByaXYpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5h
cGktPmNvbnRlbnRzX3Jlc2l6ZSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2Qt
PmFwaS0+c2Nyb2xsc19wcm9jZXNzKTsKQEAgLTg0MiwxMSArODQyLDExIEBAIHN0YXRpYyB2b2lk
IF9ld2tfdmlld19zbWFydF9jYWxjdWxhdGUoRXZhc19PYmplY3QqIG8pCiAgICAgaWYgKCFzZC0+
bWFpbl9mcmFtZSB8fCAhcHJpdi0+bWFpbl9mcmFtZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
ZXZhc19vYmplY3RfZ2VvbWV0cnlfZ2V0KG8sICZ4LCAmeSwgJncsICZoKTsKKyAgICBldmFzX29i
amVjdF9nZW9tZXRyeV9nZXQoZXdrVmlldywgJngsICZ5LCAmdywgJmgpOwogCi0gICAgREJHKCJv
PSVwIGdlbz1bJWQsICVkICsgJWR4JWRdLCBjaGFuZ2VkOiBzaXplPSVoaHUsICIKKyAgICBEQkco
ImV3a1ZpZXc9JXAgZ2VvPVslZCwgJWQgKyAlZHglZF0sIGNoYW5nZWQ6IHNpemU9JWhodSwgIgog
ICAgICAgICAic2Nyb2xscz0lenUsIHJlcGFpbnRzPSV6dSIsCi0gICAgICAgIG8sIHgsIHksIHcs
IGgsIHNkLT5jaGFuZ2VkLnNpemUsCisgICAgICAgIGV3a1ZpZXcsIHgsIHksIHcsIGgsIHNkLT5j
aGFuZ2VkLnNpemUsCiAgICAgICAgIHByaXYtPnNjcm9sbHMuY291bnQsIHByaXYtPnJlcGFpbnRz
LmNvdW50KTsKIAogICAgIGlmIChzZC0+Y2hhbmdlZC5zaXplICYmICgodyAhPSBzZC0+dmlldy53
KSB8fCAoaCAhPSBzZC0+dmlldy5oKSkpIHsKQEAgLTg2NSw3ICs4NjUsNyBAQCBzdGF0aWMgdm9p
ZCBfZXdrX3ZpZXdfc21hcnRfY2FsY3VsYXRlKEV2YXNfT2JqZWN0KiBvKQogICAgICAgICBfZXdr
X3ZpZXdfcmVwYWludF9hZGQocHJpdiwgMCwgMCwgdywgaCk7CiAKICAgICAgICAgLy8gVGhpcyBj
YWxsYmFjayBpcyBhIGdvb2QgcGxhY2UgZS5nLiB0byBjaGFuZ2UgZml4ZWQgbGF5b3V0IHNpemUg
KGV3a192aWV3X2ZpeGVkX2xheW91dF9zaXplX3NldCkuCi0gICAgICAgIGV2YXNfb2JqZWN0X3Nt
YXJ0X2NhbGxiYWNrX2NhbGwobywgInZpZXcscmVzaXplZCIsIDApOworICAgICAgICBldmFzX29i
amVjdF9zbWFydF9jYWxsYmFja19jYWxsKGV3a1ZpZXcsICJ2aWV3LHJlc2l6ZWQiLCAwKTsKICAg
ICB9CiAgICAgc2QtPmNoYW5nZWQuc2l6ZSA9IEVJTkFfRkFMU0U7CiAKQEAgLTg5NCw5NiArODk0
LDk2IEBAIHN0YXRpYyB2b2lkIF9ld2tfdmlld19zbWFydF9jYWxjdWxhdGUoRXZhc19PYmplY3Qq
IG8pCiAgICAgfQogfQogCi1zdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21hcnRfc2hvdyhFdmFzX09i
amVjdCogbykKK3N0YXRpYyB2b2lkIF9ld2tfdmlld19zbWFydF9zaG93KEV2YXNfT2JqZWN0KiBl
d2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QpOworICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QpOwogCiAgICAgaWYgKGV2YXNfb2Jq
ZWN0X2NsaXBlZXNfZ2V0KHNkLT5iYXNlLmNsaXBwZXIpKQogICAgICAgICBldmFzX29iamVjdF9z
aG93KHNkLT5iYXNlLmNsaXBwZXIpOwogICAgIGV2YXNfb2JqZWN0X3Nob3coc2QtPmJhY2tpbmdf
c3RvcmUpOwogfQogCi1zdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21hcnRfaGlkZShFdmFzX09iamVj
dCogbykKK3N0YXRpYyB2b2lkIF9ld2tfdmlld19zbWFydF9oaWRlKEV2YXNfT2JqZWN0KiBld2tW
aWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QpOworICAgIEVXS19W
SUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QpOwogCiAgICAgZXZhc19vYmplY3RfaGlk
ZShzZC0+YmFzZS5jbGlwcGVyKTsKICAgICBldmFzX29iamVjdF9oaWRlKHNkLT5iYWNraW5nX3N0
b3JlKTsKIH0KIAotc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfc21hcnRfY29udGVudHNfcmVz
aXplKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkLCBpbnQgdywgaW50IGgpCitzdGF0aWMgRWluYV9C
b29sIF9ld2tfdmlld19zbWFydF9jb250ZW50c19yZXNpemUoRXdrX1ZpZXdfU21hcnRfRGF0YSog
c21hcnREYXRhLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCiB7CiAgICAgcmV0dXJuIEVJTkFfVFJV
RTsKIH0KIAotc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfc21hcnRfem9vbV9zZXQoRXdrX1Zp
ZXdfU21hcnRfRGF0YSogc2QsIGZsb2F0IHpvb20sIEV2YXNfQ29vcmQgY3gsIEV2YXNfQ29vcmQg
Y3kpCitzdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19zbWFydF96b29tX3NldChFd2tfVmlld19T
bWFydF9EYXRhKiBzbWFydERhdGEsIGZsb2F0IHpvb20sIEV2YXNfQ29vcmQgY2VudGVyWCwgRXZh
c19Db29yZCBjZW50ZXJZKQogewogICAgIGRvdWJsZSBweCwgcHk7CiAgICAgRXZhc19Db29yZCB4
LCB5LCB3LCBoOwogICAgIEVpbmFfQm9vbCByZXQ7CiAKLSAgICBld2tfZnJhbWVfc2Nyb2xsX3Np
emVfZ2V0KHNkLT5tYWluX2ZyYW1lLCAmdywgJmgpOwotICAgIGV3a19mcmFtZV9zY3JvbGxfcG9z
X2dldChzZC0+bWFpbl9mcmFtZSwgJngsICZ5KTsKKyAgICBld2tfZnJhbWVfc2Nyb2xsX3NpemVf
Z2V0KHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSwgJncsICZoKTsKKyAgICBld2tfZnJhbWVfc2Nyb2xs
X3Bvc19nZXQoc21hcnREYXRhLT5tYWluX2ZyYW1lLCAmeCwgJnkpOwogCi0gICAgaWYgKHcgKyBz
ZC0+dmlldy53ID4gMCkKLSAgICAgICAgcHggPSBzdGF0aWNfY2FzdDxkb3VibGU+KHggKyBjeCkg
LyAodyArIHNkLT52aWV3LncpOworICAgIGlmICh3ICsgc21hcnREYXRhLT52aWV3LncgPiAwKQor
ICAgICAgICBweCA9IHN0YXRpY19jYXN0PGRvdWJsZT4oeCArIGNlbnRlclgpIC8gKHcgKyBzbWFy
dERhdGEtPnZpZXcudyk7CiAgICAgZWxzZQogICAgICAgICBweCA9IDAuMDsKIAotICAgIGlmICho
ICsgc2QtPnZpZXcuaCA+IDApCi0gICAgICAgIHB5ID0gc3RhdGljX2Nhc3Q8ZG91YmxlPih5ICsg
Y3kpIC8gKGggKyBzZC0+dmlldy5oKTsKKyAgICBpZiAoaCArIHNtYXJ0RGF0YS0+dmlldy5oID4g
MCkKKyAgICAgICAgcHkgPSBzdGF0aWNfY2FzdDxkb3VibGU+KHkgKyBjZW50ZXJZKSAvIChoICsg
c21hcnREYXRhLT52aWV3LmgpOwogICAgIGVsc2UKICAgICAgICAgcHkgPSAwLjA7CiAKLSAgICBy
ZXQgPSBld2tfZnJhbWVfem9vbV9zZXQoc2QtPm1haW5fZnJhbWUsIHpvb20pOworICAgIHJldCA9
IGV3a19mcmFtZV96b29tX3NldChzbWFydERhdGEtPm1haW5fZnJhbWUsIHpvb20pOwogCi0gICAg
ZXdrX2ZyYW1lX3Njcm9sbF9zaXplX2dldChzZC0+bWFpbl9mcmFtZSwgJncsICZoKTsKLSAgICB4
ID0gKHcgKyBzZC0+dmlldy53KSAqIHB4IC0gY3g7Ci0gICAgeSA9IChoICsgc2QtPnZpZXcuaCkg
KiBweSAtIGN5OwotICAgIGV3a19mcmFtZV9zY3JvbGxfc2V0KHNkLT5tYWluX2ZyYW1lLCB4LCB5
KTsKKyAgICBld2tfZnJhbWVfc2Nyb2xsX3NpemVfZ2V0KHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSwg
JncsICZoKTsKKyAgICB4ID0gKHcgKyBzbWFydERhdGEtPnZpZXcudykgKiBweCAtIGNlbnRlclg7
CisgICAgeSA9IChoICsgc21hcnREYXRhLT52aWV3LmgpICogcHkgLSBjZW50ZXJZOworICAgIGV3
a19mcmFtZV9zY3JvbGxfc2V0KHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSwgeCwgeSk7CiAgICAgcmV0
dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X2ZsdXNoKEV3a19WaWV3
X1NtYXJ0X0RhdGEqIHNkKQorc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X2ZsdXNoKEV3a19W
aWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSkKIHsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9S
RVRVUk4oc2QsIHByaXYpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERh
dGEsIHByaXYpOwogICAgIF9ld2tfdmlld19yZXBhaW50c19mbHVzaChwcml2KTsKICAgICBfZXdr
X3ZpZXdfc2Nyb2xsc19mbHVzaChwcml2KTsKIH0KIAotc3RhdGljIEVpbmFfQm9vbCBfZXdrX3Zp
ZXdfc21hcnRfcHJlX3JlbmRlcl9yZWdpb24oRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QsIEV2YXNf
Q29vcmQgeCwgRXZhc19Db29yZCB5LCBFdmFzX0Nvb3JkIHcsIEV2YXNfQ29vcmQgaCwgZmxvYXQg
em9vbSkKK3N0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3NtYXJ0X3ByZV9yZW5kZXJfcmVnaW9u
KEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3Jk
IHksIEV2YXNfQ29vcmQgd2lkdGgsIEV2YXNfQ29vcmQgaGVpZ2h0LCBmbG9hdCB6b29tKQogewog
ICAgIFdSTigibm90IHN1cHBvcnRlZCBieSBlbmdpbmUuIHNkPSVwIGFyZWE9JWQsJWQrJWR4JWQs
IHpvb209JWYiLAotICAgICAgICBzZCwgeCwgeSwgdywgaCwgem9vbSk7CisgICAgICAgIHNtYXJ0
RGF0YSwgeCwgeSwgd2lkdGgsIGhlaWdodCwgem9vbSk7CiAgICAgcmV0dXJuIEVJTkFfRkFMU0U7
CiB9CiAKLXN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3NtYXJ0X3ByZV9yZW5kZXJfcmVsYXRp
dmVfcmFkaXVzKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkLCB1bnNpZ25lZCBpbnQgbiwgZmxvYXQg
em9vbSkKK3N0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3NtYXJ0X3ByZV9yZW5kZXJfcmVsYXRp
dmVfcmFkaXVzKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSwgdW5zaWduZWQgaW50IG51
bWJlciwgZmxvYXQgem9vbSkKIHsKICAgICBXUk4oIm5vdCBzdXBwb3J0ZWQgYnkgZW5naW5lLiBz
ZD0lcCwgbj0ldSB6b29tPSVmIiwKLSAgICAgICAgc2QsIG4sIHpvb20pOworICAgICAgICBzbWFy
dERhdGEsIG51bWJlciwgem9vbSk7CiAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CiB9CiAKLXN0YXRp
YyB2b2lkIF9ld2tfdmlld19zbWFydF9wcmVfcmVuZGVyX2NhbmNlbChFd2tfVmlld19TbWFydF9E
YXRhKiBzZCkKK3N0YXRpYyB2b2lkIF9ld2tfdmlld19zbWFydF9wcmVfcmVuZGVyX2NhbmNlbChF
d2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEpCiB7Ci0gICAgV1JOKCJub3Qgc3VwcG9ydGVk
IGJ5IGVuZ2luZS4gc2Q9JXAiLCBzZCk7CisgICAgV1JOKCJub3Qgc3VwcG9ydGVkIGJ5IGVuZ2lu
ZS4gc2Q9JXAiLCBzbWFydERhdGEpOwogfQogCi1zdGF0aWMgdm9pZCBfZXdrX3ZpZXdfem9vbV9h
bmltYXRlZF9tYXJrX3N0b3AoRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QpCitzdGF0aWMgdm9pZCBf
ZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9tYXJrX3N0b3AoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21h
cnREYXRhKQogewotICAgIHNkLT5hbmltYXRlZF96b29tLnpvb20uc3RhcnQgPSAwLjA7Ci0gICAg
c2QtPmFuaW1hdGVkX3pvb20uem9vbS5lbmQgPSAwLjA7Ci0gICAgc2QtPmFuaW1hdGVkX3pvb20u
em9vbS5jdXJyZW50ID0gMC4wOworICAgIHNtYXJ0RGF0YS0+YW5pbWF0ZWRfem9vbS56b29tLnN0
YXJ0ID0gMC4wOworICAgIHNtYXJ0RGF0YS0+YW5pbWF0ZWRfem9vbS56b29tLmVuZCA9IDAuMDsK
KyAgICBzbWFydERhdGEtPmFuaW1hdGVkX3pvb20uem9vbS5jdXJyZW50ID0gMC4wOwogfQogCi1z
dGF0aWMgdm9pZCBfZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9maW5pc2goRXdrX1ZpZXdfU21hcnRf
RGF0YSogc2QpCitzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9maW5pc2goRXdr
X1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhKQogewotICAgIEVXS19WSUVXX1BSSVZfR0VUKHNk
LCBwcml2KTsKKyAgICBFV0tfVklFV19QUklWX0dFVChzbWFydERhdGEsIHByaXYpOwogICAgIGVj
b3JlX2FuaW1hdG9yX2RlbChwcml2LT5hbmltYXRlZF96b29tLmFuaW1hdG9yKTsKICAgICBwcml2
LT5hbmltYXRlZF96b29tLmFuaW1hdG9yID0gMDsKLSAgICBfZXdrX3ZpZXdfem9vbV9hbmltYXRl
ZF9tYXJrX3N0b3Aoc2QpOwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoc2Qt
PnNlbGYsICJ6b29tLGFuaW1hdGVkLGVuZCIsIDApOworICAgIF9ld2tfdmlld196b29tX2FuaW1h
dGVkX21hcmtfc3RvcChzbWFydERhdGEpOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNr
X2NhbGwoc21hcnREYXRhLT5zZWxmLCAiem9vbSxhbmltYXRlZCxlbmQiLCAwKTsKIH0KIAogc3Rh
dGljIGZsb2F0IF9ld2tfdmlld196b29tX2FuaW1hdGVkX2N1cnJlbnQoRXdrX1ZpZXdfUHJpdmF0
ZV9EYXRhKiBwcml2KQpAQCAtMTAzMSwxOCArMTAzMSwxOCBAQCBzdGF0aWMgRWluYV9Cb29sIF9l
d2tfdmlld196b29tX2FuaW1hdG9yX2NiKHZvaWQqIGRhdGEpCiAgICAgcmV0dXJuIEVJTkFfVFJV
RTsKIH0KIAotc3RhdGljIHZvaWQgX2V3a192aWV3X3pvb21fYW5pbWF0aW9uX3N0YXJ0KEV3a19W
aWV3X1NtYXJ0X0RhdGEqIHNkKQorc3RhdGljIHZvaWQgX2V3a192aWV3X3pvb21fYW5pbWF0aW9u
X3N0YXJ0KEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSkKIHsKLSAgICBFV0tfVklFV19Q
UklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JF
VFVSTihzbWFydERhdGEsIHByaXYpOwogICAgIGlmIChwcml2LT5hbmltYXRlZF96b29tLmFuaW1h
dG9yKQogICAgICAgICByZXR1cm47CiAgICAgcHJpdi0+YW5pbWF0ZWRfem9vbS5hbmltYXRvciA9
IGVjb3JlX2FuaW1hdG9yX2FkZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKF9ld2tfdmlld196b29tX2FuaW1hdG9yX2NiLCBzZCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAoX2V3a192aWV3X3pvb21fYW5pbWF0b3JfY2IsIHNtYXJ0RGF0
YSk7CiB9CiAKLXN0YXRpYyBXZWJDb3JlOjpWaWV3cG9ydEF0dHJpYnV0ZXMgX2V3a192aWV3X3Zp
ZXdwb3J0X2F0dHJpYnV0ZXNfY29tcHV0ZShjb25zdCBFdmFzX09iamVjdCogbykKK3N0YXRpYyBX
ZWJDb3JlOjpWaWV3cG9ydEF0dHJpYnV0ZXMgX2V3a192aWV3X3ZpZXdwb3J0X2F0dHJpYnV0ZXNf
Y29tcHV0ZShjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9H
RVQobywgc2QpOworICAgIEVXS19WSUVXX1NEX0dFVChld2tWaWV3LCBzZCk7CiAgICAgRVdLX1ZJ
RVdfUFJJVl9HRVQoc2QsIHByaXYpOwogCiAgICAgaW50IGRlc2t0b3Bfd2lkdGggPSA5ODA7CkBA
IC0xMDU2LDE1ICsxMDU2LDE1IEBAIHN0YXRpYyBXZWJDb3JlOjpWaWV3cG9ydEF0dHJpYnV0ZXMg
X2V3a192aWV3X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfY29tcHV0ZShjb25zdCBFCiAgICAgcmV0dXJu
IGF0dHJpYnV0ZXM7CiB9CiAKLXN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3NtYXJ0X2Rpc2Fi
bGVfcmVuZGVyKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkKQorc3RhdGljIEVpbmFfQm9vbCBfZXdr
X3ZpZXdfc21hcnRfZGlzYWJsZV9yZW5kZXIoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRh
KQogewotICAgIFdSTigibm90IHN1cHBvcnRlZCBieSBlbmdpbmUuIHNkPSVwIiwgc2QpOworICAg
IFdSTigibm90IHN1cHBvcnRlZCBieSBlbmdpbmUuIHNkPSVwIiwgc21hcnREYXRhKTsKICAgICBy
ZXR1cm4gRUlOQV9GQUxTRTsKIH0KIAotc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfc21hcnRf
ZW5hYmxlX3JlbmRlcihFd2tfVmlld19TbWFydF9EYXRhKiBzZCkKK3N0YXRpYyBFaW5hX0Jvb2wg
X2V3a192aWV3X3NtYXJ0X2VuYWJsZV9yZW5kZXIoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnRE
YXRhKQogewotICAgIFdSTigibm90IHN1cHBvcnRlZCBieSBlbmdpbmUuIHNkPSVwIiwgc2QpOwor
ICAgIFdSTigibm90IHN1cHBvcnRlZCBieSBlbmdpbmUuIHNkPSVwIiwgc21hcnREYXRhKTsKICAg
ICByZXR1cm4gRUlOQV9GQUxTRTsKIH0KIApAQCAtMTExOSwyMiArMTExOSwyMiBAQCBFaW5hX0Jv
b2wgZXdrX3ZpZXdfYmFzZV9zbWFydF9zZXQoRXdrX1ZpZXdfU21hcnRfQ2xhc3MqIGFwaSkKICAg
ICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi12b2lkIGV3a192aWV3X2ZpeGVkX2xheW91dF9zaXpl
X3NldChFdmFzX09iamVjdCogbywgRXZhc19Db29yZCB3LCBFdmFzX0Nvb3JkIGgpCit2b2lkIGV3
a192aWV3X2ZpeGVkX2xheW91dF9zaXplX3NldChFdmFzX09iamVjdCogZXdrVmlldywgRXZhc19D
b29yZCB3aWR0aCwgRXZhc19Db29yZCBoZWlnaHQpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihvLCBzZCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBz
ZCk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2KTsKIAogICAgIFdl
YkNvcmU6OkZyYW1lVmlldyogdmlldyA9IHByaXYtPm1haW5fZnJhbWUtPnZpZXcoKTsKLSAgICBp
ZiAodyA8PSAwICYmIGggPD0gMCkgeworICAgIGlmICh3aWR0aCA8PSAwICYmIGhlaWdodCA8PSAw
KSB7CiAgICAgICAgIGlmICghdmlldy0+dXNlRml4ZWRMYXlvdXQoKSkKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgdmlldy0+c2V0VXNlRml4ZWRMYXlvdXQoRUlOQV9GQUxTRSk7CiAgICAg
fSBlbHNlIHsKICAgICAgICAgV2ViQ29yZTo6SW50U2l6ZSBzaXplID0gdmlldy0+Zml4ZWRMYXlv
dXRTaXplKCk7Ci0gICAgICAgIGlmIChzaXplLndpZHRoKCkgPT0gdyAmJiBzaXplLmhlaWdodCgp
ID09IGgpCisgICAgICAgIGlmIChzaXplLndpZHRoKCkgPT0gd2lkdGggJiYgc2l6ZS5oZWlnaHQo
KSA9PSBoZWlnaHQpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGlmICh2aWV3KQotICAg
ICAgICAgICAgdmlldy0+c2V0Rml4ZWRMYXlvdXRTaXplKFdlYkNvcmU6OkludFNpemUodywgaCkp
OworICAgICAgICAgICAgdmlldy0+c2V0Rml4ZWRMYXlvdXRTaXplKFdlYkNvcmU6OkludFNpemUo
d2lkdGgsIGhlaWdodCkpOwogICAgIH0KIAogICAgIGlmICghdmlldykKQEAgLTExNDMsMjcgKzEx
NDMsMjcgQEAgdm9pZCBld2tfdmlld19maXhlZF9sYXlvdXRfc2l6ZV9zZXQoRXZhc19PYmplY3Qq
IG8sIEV2YXNfQ29vcmQgdywgRXZhc19Db29yZCBoKQogICAgIHZpZXctPmZvcmNlTGF5b3V0KCk7
CiB9CiAKLXZvaWQgZXdrX3ZpZXdfZml4ZWRfbGF5b3V0X3NpemVfZ2V0KGNvbnN0IEV2YXNfT2Jq
ZWN0KiBvLCBFdmFzX0Nvb3JkKiB3LCBFdmFzX0Nvb3JkKiBoKQordm9pZCBld2tfdmlld19maXhl
ZF9sYXlvdXRfc2l6ZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV2YXNfQ29vcmQq
IHdpZHRoLCBFdmFzX0Nvb3JkKiBoZWlnaHQpCiB7Ci0gICAgaWYgKHcpCi0gICAgICAgICp3ID0g
MDsKLSAgICBpZiAoaCkKLSAgICAgICAgKmggPSAwOwotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9S
RVRVUk4obywgc2QpOworICAgIGlmICh3aWR0aCkKKyAgICAgICAgKndpZHRoID0gMDsKKyAgICBp
ZiAoaGVpZ2h0KQorICAgICAgICAqaGVpZ2h0ID0gMDsKKyAgICBFV0tfVklFV19TRF9HRVRfT1Jf
UkVUVVJOKGV3a1ZpZXcsIHNkKTsKICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2Qs
IHByaXYpOwogICAgIFdlYkNvcmU6OkZyYW1lVmlldyogdmlldyA9IHByaXYtPm1haW5fZnJhbWUt
PnZpZXcoKTsKICAgICBpZiAodmlldy0+dXNlRml4ZWRMYXlvdXQoKSkgewogICAgICAgICBXZWJD
b3JlOjpJbnRTaXplIHNpemUgPSB2aWV3LT5maXhlZExheW91dFNpemUoKTsKLSAgICAgICAgaWYg
KHcpCi0gICAgICAgICAgICAqdyA9IHNpemUud2lkdGgoKTsKLSAgICAgICAgaWYgKGgpCi0gICAg
ICAgICAgICAqaCA9IHNpemUuaGVpZ2h0KCk7CisgICAgICAgIGlmICh3aWR0aCkKKyAgICAgICAg
ICAgICp3aWR0aCA9IHNpemUud2lkdGgoKTsKKyAgICAgICAgaWYgKGhlaWdodCkKKyAgICAgICAg
ICAgICpoZWlnaHQgPSBzaXplLmhlaWdodCgpOwogICAgIH0KIH0KIAotdm9pZCBld2tfdmlld190
aGVtZV9zZXQoRXZhc19PYmplY3QqIG8sIGNvbnN0IGNoYXIqIHBhdGgpCit2b2lkIGV3a192aWV3
X3RoZW1lX3NldChFdmFzX09iamVjdCogZXdrVmlldywgY29uc3QgY2hhciogcGF0aCkKIHsKLSAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkKTsKKyAgICBFV0tfVklFV19TRF9HRVRf
T1JfUkVUVVJOKGV3a1ZpZXcsIHNkKTsKICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4o
c2QsIHByaXYpOwogICAgIGlmICghZWluYV9zdHJpbmdzaGFyZV9yZXBsYWNlKCZwcml2LT5zZXR0
aW5ncy50aGVtZSwgcGF0aCkpCiAgICAgICAgIHJldHVybjsKQEAgLTExNzYsMjIgKzExNzYsMjIg
QEAgdm9pZCBld2tfdmlld190aGVtZV9zZXQoRXZhc19PYmplY3QqIG8sIGNvbnN0IGNoYXIqIHBh
dGgpCiAKIH0KIAotY29uc3QgY2hhciogZXdrX3ZpZXdfdGhlbWVfZ2V0KGNvbnN0IEV2YXNfT2Jq
ZWN0KiBvKQorY29uc3QgY2hhciogZXdrX3ZpZXdfdGhlbWVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0
KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIDApOwor
ICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIDApOwogICAgIEVXS19W
SUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgMCk7CiAgICAgcmV0dXJuIHByaXYtPnNl
dHRpbmdzLnRoZW1lOwogfQogCi1FdmFzX09iamVjdCogZXdrX3ZpZXdfZnJhbWVfbWFpbl9nZXQo
Y29uc3QgRXZhc19PYmplY3QqIG8pCitFdmFzX09iamVjdCogZXdrX3ZpZXdfZnJhbWVfbWFpbl9n
ZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihvLCBzZCwgMCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3
LCBzZCwgMCk7CiAgICAgcmV0dXJuIHNkLT5tYWluX2ZyYW1lOwogfQogCi1FdmFzX09iamVjdCog
ZXdrX3ZpZXdfZnJhbWVfZm9jdXNlZF9nZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCitFdmFzX09i
amVjdCogZXdrX3ZpZXdfZnJhbWVfZm9jdXNlZF9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1Zp
ZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgMCk7CisgICAgRVdL
X1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgMCk7CiAgICAgRVdLX1ZJRVdfUFJJ
Vl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCAwKTsKIAogICAgIFdlYkNvcmU6OkZyYW1lKiBjb3Jl
ID0gcHJpdi0+cGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRGcmFtZSgpOwpAQCAtMTIw
NCw0MiArMTIwNCw0MiBAQCBFdmFzX09iamVjdCogZXdrX3ZpZXdfZnJhbWVfZm9jdXNlZF9nZXQo
Y29uc3QgRXZhc19PYmplY3QqIG8pCiAgICAgcmV0dXJuIGNsaWVudC0+d2ViRnJhbWUoKTsKIH0K
IAotRWluYV9Cb29sIGV3a192aWV3X3VyaV9zZXQoRXZhc19PYmplY3QqIG8sIGNvbnN0IGNoYXIq
IHVyaSkKK0VpbmFfQm9vbCBld2tfdmlld191cmlfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBj
b25zdCBjaGFyKiB1cmkpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwg
RUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwg
RUlOQV9GQUxTRSk7CiAgICAgcmV0dXJuIGV3a19mcmFtZV91cmlfc2V0KHNkLT5tYWluX2ZyYW1l
LCB1cmkpOwogfQogCi1jb25zdCBjaGFyKiBld2tfdmlld191cmlfZ2V0KGNvbnN0IEV2YXNfT2Jq
ZWN0KiBvKQorY29uc3QgY2hhciogZXdrX3ZpZXdfdXJpX2dldChjb25zdCBFdmFzX09iamVjdCog
ZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAwKTsKKyAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAwKTsKICAgICByZXR1cm4g
ZXdrX2ZyYW1lX3VyaV9nZXQoc2QtPm1haW5fZnJhbWUpOwogfQogCi1jb25zdCBjaGFyKiBld2tf
dmlld190aXRsZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCitjb25zdCBjaGFyKiBld2tfdmll
d190aXRsZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihvLCBzZCwgMCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
Tihld2tWaWV3LCBzZCwgMCk7CiAgICAgcmV0dXJuIGV3a19mcmFtZV90aXRsZV9nZXQoc2QtPm1h
aW5fZnJhbWUpOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfZWRpdGFibGVfZ2V0KGNvbnN0IEV2
YXNfT2JqZWN0KiBvKQorRWluYV9Cb29sIGV3a192aWV3X2VkaXRhYmxlX2dldChjb25zdCBFdmFz
X09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNk
LCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNk
LCBFSU5BX0ZBTFNFKTsKICAgICByZXR1cm4gZXdrX2ZyYW1lX2VkaXRhYmxlX2dldChzZC0+bWFp
bl9mcmFtZSk7CiB9CiAKLXZvaWQgZXdrX3ZpZXdfYmdfY29sb3Jfc2V0KEV2YXNfT2JqZWN0KiBv
LCBpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSkKK3ZvaWQgZXdrX3ZpZXdfYmdfY29sb3Jfc2V0
KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBpbnQgcmVkLCBpbnQgZ3JlZW4sIGludCBibHVlLCBpbnQg
YWxwaGEpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCk7CisgICAgRVdL
X1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCk7CiAgICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk4oc2QtPmFwaSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2Qt
PmFwaS0+YmdfY29sb3Jfc2V0KTsKIAotICAgIGlmIChhIDwgMCkgewotICAgICAgICBXUk4oIkFs
cGhhIGxlc3MgdGhhbiB6ZXJvICglZCkuIiwgYSk7Ci0gICAgICAgIGEgPSAwOwotICAgIH0gZWxz
ZSBpZiAoYSA+IDI1NSkgewotICAgICAgICBXUk4oIkFscGhhIGlzIGxhcmdlciB0aGFuIDI1NSAo
JWQpLiIsIGEpOwotICAgICAgICBhID0gMjU1OworICAgIGlmIChhbHBoYSA8IDApIHsKKyAgICAg
ICAgV1JOKCJBbHBoYSBsZXNzIHRoYW4gemVybyAoJWQpLiIsIGFscGhhKTsKKyAgICAgICAgYWxw
aGEgPSAwOworICAgIH0gZWxzZSBpZiAoYWxwaGEgPiAyNTUpIHsKKyAgICAgICAgV1JOKCJBbHBo
YSBpcyBsYXJnZXIgdGhhbiAyNTUgKCVkKS4iLCBhbHBoYSk7CisgICAgICAgIGFscGhhID0gMjU1
OwogICAgIH0KIAogI2RlZmluZSBDSEVDS19QUkVNVUxfQ09MT1IoYywgYSkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMTI1MSw2MyArMTI1MSw2MyBAQCB2b2lk
IGV3a192aWV3X2JnX2NvbG9yX3NldChFdmFzX09iamVjdCogbywgaW50IHIsIGludCBnLCBpbnQg
YiwgaW50IGEpCiAgICAgICAgICAgICBjLCBhKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIGMgPSBhOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgfQotICAg
IENIRUNLX1BSRU1VTF9DT0xPUihyLCBhKTsKLSAgICBDSEVDS19QUkVNVUxfQ09MT1IoZywgYSk7
Ci0gICAgQ0hFQ0tfUFJFTVVMX0NPTE9SKGIsIGEpOworICAgIENIRUNLX1BSRU1VTF9DT0xPUihy
ZWQsIGFscGhhKTsKKyAgICBDSEVDS19QUkVNVUxfQ09MT1IoZ3JlZW4sIGFscGhhKTsKKyAgICBD
SEVDS19QUkVNVUxfQ09MT1IoYmx1ZSwgYWxwaGEpOwogI3VuZGVmIENIRUNLX1BSRU1VTF9DT0xP
UgogCi0gICAgc2QtPmJnX2NvbG9yLnIgPSByOwotICAgIHNkLT5iZ19jb2xvci5nID0gZzsKLSAg
ICBzZC0+YmdfY29sb3IuYiA9IGI7Ci0gICAgc2QtPmJnX2NvbG9yLmEgPSBhOworICAgIHNkLT5i
Z19jb2xvci5yID0gcmVkOworICAgIHNkLT5iZ19jb2xvci5nID0gZ3JlZW47CisgICAgc2QtPmJn
X2NvbG9yLmIgPSBibHVlOworICAgIHNkLT5iZ19jb2xvci5hID0gYWxwaGE7CiAKLSAgICBzZC0+
YXBpLT5iZ19jb2xvcl9zZXQoc2QsIHIsIGcsIGIsIGEpOworICAgIHNkLT5hcGktPmJnX2NvbG9y
X3NldChzZCwgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwogCiAgICAgV2ViQ29yZTo6RnJhbWVW
aWV3KiB2aWV3ID0gc2QtPl9wcml2LT5tYWluX2ZyYW1lLT52aWV3KCk7CiAgICAgaWYgKHZpZXcp
IHsKICAgICAgICAgV2ViQ29yZTo6Q29sb3IgY29sb3I7CiAKLSAgICAgICAgaWYgKCFhKQorICAg
ICAgICBpZiAoIWFscGhhKQogICAgICAgICAgICAgY29sb3IgPSBXZWJDb3JlOjpDb2xvcigwLCAw
LCAwLCAwKTsKLSAgICAgICAgZWxzZSBpZiAoYSA9PSAyNTUpCi0gICAgICAgICAgICBjb2xvciA9
IFdlYkNvcmU6OkNvbG9yKHIsIGcsIGIsIGEpOworICAgICAgICBlbHNlIGlmIChhbHBoYSA9PSAy
NTUpCisgICAgICAgICAgICBjb2xvciA9IFdlYkNvcmU6OkNvbG9yKHJlZCwgZ3JlZW4sIGJsdWUs
IGFscGhhKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgY29sb3IgPSBXZWJDb3JlOjpDb2xv
cihyICogMjU1IC8gYSwgZyAqIDI1NSAvIGEsIGIgKiAyNTUgLyBhLCBhKTsKKyAgICAgICAgICAg
IGNvbG9yID0gV2ViQ29yZTo6Q29sb3IocmVkICogMjU1IC8gYWxwaGEsIGdyZWVuICogMjU1IC8g
YWxwaGEsIGJsdWUgKiAyNTUgLyBhbHBoYSwgYWxwaGEpOwogCi0gICAgICAgIHZpZXctPnVwZGF0
ZUJhY2tncm91bmRSZWN1cnNpdmVseShjb2xvciwgIWEpOworICAgICAgICB2aWV3LT51cGRhdGVC
YWNrZ3JvdW5kUmVjdXJzaXZlbHkoY29sb3IsICFhbHBoYSk7CiAgICAgfQogfQogCi12b2lkIGV3
a192aWV3X2JnX2NvbG9yX2dldChjb25zdCBFdmFzX09iamVjdCogbywgaW50KiByLCBpbnQqIGcs
IGludCogYiwgaW50KiBhKQordm9pZCBld2tfdmlld19iZ19jb2xvcl9nZXQoY29uc3QgRXZhc19P
YmplY3QqIGV3a1ZpZXcsIGludCogcmVkLCBpbnQqIGdyZWVuLCBpbnQqIGJsdWUsIGludCogYWxw
aGEpCiB7Ci0gICAgaWYgKHIpCi0gICAgICAgICpyID0gMDsKLSAgICBpZiAoZykKLSAgICAgICAg
KmcgPSAwOwotICAgIGlmIChiKQotICAgICAgICAqYiA9IDA7Ci0gICAgaWYgKGEpCi0gICAgICAg
ICphID0gMDsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkKTsKLSAgICBpZiAo
cikKLSAgICAgICAgKnIgPSBzZC0+YmdfY29sb3IucjsKLSAgICBpZiAoZykKLSAgICAgICAgKmcg
PSBzZC0+YmdfY29sb3IuZzsKLSAgICBpZiAoYikKLSAgICAgICAgKmIgPSBzZC0+YmdfY29sb3Iu
YjsKLSAgICBpZiAoYSkKLSAgICAgICAgKmEgPSBzZC0+YmdfY29sb3IuYTsKKyAgICBpZiAocmVk
KQorICAgICAgICAqcmVkID0gMDsKKyAgICBpZiAoZ3JlZW4pCisgICAgICAgICpncmVlbiA9IDA7
CisgICAgaWYgKGJsdWUpCisgICAgICAgICpibHVlID0gMDsKKyAgICBpZiAoYWxwaGEpCisgICAg
ICAgICphbHBoYSA9IDA7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBz
ZCk7CisgICAgaWYgKHJlZCkKKyAgICAgICAgKnJlZCA9IHNkLT5iZ19jb2xvci5yOworICAgIGlm
IChncmVlbikKKyAgICAgICAgKmdyZWVuID0gc2QtPmJnX2NvbG9yLmc7CisgICAgaWYgKGJsdWUp
CisgICAgICAgICpibHVlID0gc2QtPmJnX2NvbG9yLmI7CisgICAgaWYgKGFscGhhKQorICAgICAg
ICAqYWxwaGEgPSBzZC0+YmdfY29sb3IuYTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3RleHRf
c2VhcmNoKGNvbnN0IEV2YXNfT2JqZWN0KiBvLCBjb25zdCBjaGFyKiBzdHJpbmcsIEVpbmFfQm9v
bCBjYXNlX3NlbnNpdGl2ZSwgRWluYV9Cb29sIGZvcndhcmQsIEVpbmFfQm9vbCB3cmFwKQorRWlu
YV9Cb29sIGV3a192aWV3X3RleHRfc2VhcmNoKGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3LCBj
b25zdCBjaGFyKiBzdHJpbmcsIEVpbmFfQm9vbCBjYXNlU2Vuc2l0aXZlLCBFaW5hX0Jvb2wgZm9y
d2FyZCwgRWluYV9Cb29sIHdyYXApCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihv
LCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3
LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBw
cml2LCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc3Ry
aW5nLCBFSU5BX0ZBTFNFKTsKICAgICBXVEY6OlRleHRDYXNlU2Vuc2l0aXZpdHkgc2Vuc2l0aXZl
OwogICAgIFdlYkNvcmU6OkZpbmREaXJlY3Rpb24gZGlyZWN0aW9uOwogCi0gICAgaWYgKGNhc2Vf
c2Vuc2l0aXZlKQorICAgIGlmIChjYXNlU2Vuc2l0aXZlKQogICAgICAgICBzZW5zaXRpdmUgPSBX
VEY6OlRleHRDYXNlU2Vuc2l0aXZlOwogICAgIGVsc2UKICAgICAgICAgc2Vuc2l0aXZlID0gV1RG
OjpUZXh0Q2FzZUluc2Vuc2l0aXZlOwpAQCAtMTMyNSwyMCArMTMyNSwyMCBAQCBFaW5hX0Jvb2wg
ZXdrX3ZpZXdfdGV4dF9zZWFyY2goY29uc3QgRXZhc19PYmplY3QqIG8sIGNvbnN0IGNoYXIqIHN0
cmluZywgRWluYV9CbwogICoKICAqIEBwYXJhbSBvIHZpZXcgb2JqZWN0IHdoZXJlIHRvIHNlYXJj
aCB0ZXh0LgogICogQHBhcmFtIHN0cmluZyByZWZlcmVuY2Ugc3RyaW5nIHRvIG1hdGNoLgotICog
QHBhcmFtIGNhc2Vfc2Vuc2l0aXZlIGlmIG1hdGNoIHNob3VsZCBiZSBjYXNlIHNlbnNpdGl2ZSBv
ciBub3QuCisgKiBAcGFyYW0gY2FzZVNlbnNpdGl2ZSBpZiBtYXRjaCBzaG91bGQgYmUgY2FzZSBz
ZW5zaXRpdmUgb3Igbm90LgogICogQHBhcmFtIGhpZ2hsaWdodCBpZiBtYXRjaGVzIHNob3VsZCBi
ZSBoaWdobGlnaHRlZC4KICAqIEBwYXJhbSBsaW1pdCBtYXhpbXVtIGFtb3VudCBvZiBtYXRjaGVz
LCBvciB6ZXJvIHRvIHVubGltaXRlZC4KICAqCiAgKiBAcmV0dXJuIG51bWJlciBvZiBtYXRjaGVz
LgogICovCi11bnNpZ25lZCBpbnQgZXdrX3ZpZXdfdGV4dF9tYXRjaGVzX21hcmsoRXZhc19PYmpl
Y3QqIG8sIGNvbnN0IGNoYXIqIHN0cmluZywgRWluYV9Cb29sIGNhc2Vfc2Vuc2l0aXZlLCBFaW5h
X0Jvb2wgaGlnaGxpZ2h0LCB1bnNpZ25lZCBpbnQgbGltaXQpCit1bnNpZ25lZCBpbnQgZXdrX3Zp
ZXdfdGV4dF9tYXRjaGVzX21hcmsoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGNvbnN0IGNoYXIqIHN0
cmluZywgRWluYV9Cb29sIGNhc2VTZW5zaXRpdmUsIEVpbmFfQm9vbCBoaWdobGlnaHQsIHVuc2ln
bmVkIGludCBsaW1pdCkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAw
KTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAwKTsKICAgICBF
V0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIDApOwogICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOX1ZBTChzdHJpbmcsIDApOwogICAgIFdURjo6VGV4dENhc2VTZW5zaXRp
dml0eSBzZW5zaXRpdmU7CiAKLSAgICBpZiAoY2FzZV9zZW5zaXRpdmUpCisgICAgaWYgKGNhc2VT
ZW5zaXRpdmUpCiAgICAgICAgIHNlbnNpdGl2ZSA9IFdURjo6VGV4dENhc2VTZW5zaXRpdmU7CiAg
ICAgZWxzZQogICAgICAgICBzZW5zaXRpdmUgPSBXVEY6OlRleHRDYXNlSW5zZW5zaXRpdmU7CkBA
IC0xMzQ2LDM1ICsxMzQ2LDM1IEBAIHVuc2lnbmVkIGludCBld2tfdmlld190ZXh0X21hdGNoZXNf
bWFyayhFdmFzX09iamVjdCogbywgY29uc3QgY2hhciogc3RyaW5nLCBFaW5hCiAgICAgcmV0dXJu
IHByaXYtPnBhZ2UtPm1hcmtBbGxNYXRjaGVzRm9yVGV4dChTdHJpbmc6OmZyb21VVEY4KHN0cmlu
ZyksIHNlbnNpdGl2ZSwgaGlnaGxpZ2h0LCBsaW1pdCk7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmll
d190ZXh0X21hdGNoZXNfdW5tYXJrX2FsbChFdmFzX09iamVjdCogbykKK0VpbmFfQm9vbCBld2tf
dmlld190ZXh0X21hdGNoZXNfdW5tYXJrX2FsbChFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tf
VklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFV0tf
VklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIHByaXYt
PnBhZ2UtPnVubWFya0FsbFRleHRNYXRjaGVzKCk7CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0K
IAotRWluYV9Cb29sIGV3a192aWV3X3RleHRfbWF0Y2hlc19oaWdobGlnaHRfc2V0KEV2YXNfT2Jq
ZWN0KiBvLCBFaW5hX0Jvb2wgaGlnaGxpZ2h0KQorRWluYV9Cb29sIGV3a192aWV3X3RleHRfbWF0
Y2hlc19oaWdobGlnaHRfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wgaGlnaGxp
Z2h0KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0Up
OworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0Up
OwogICAgIHJldHVybiBld2tfZnJhbWVfdGV4dF9tYXRjaGVzX2hpZ2hsaWdodF9zZXQoc2QtPm1h
aW5fZnJhbWUsIGhpZ2hsaWdodCk7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld190ZXh0X21hdGNo
ZXNfaGlnaGxpZ2h0X2dldChjb25zdCBFdmFzX09iamVjdCogbykKK0VpbmFfQm9vbCBld2tfdmll
d190ZXh0X21hdGNoZXNfaGlnaGxpZ2h0X2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykK
IHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAg
ICByZXR1cm4gZXdrX2ZyYW1lX3RleHRfbWF0Y2hlc19oaWdobGlnaHRfZ2V0KHNkLT5tYWluX2Zy
YW1lKTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X2VkaXRhYmxlX3NldChFdmFzX09iamVjdCog
bywgRWluYV9Cb29sIGVkaXRhYmxlKQorRWluYV9Cb29sIGV3a192aWV3X2VkaXRhYmxlX3NldChF
dmFzX09iamVjdCogZXdrVmlldywgRWluYV9Cb29sIGVkaXRhYmxlKQogewotICAgIEVXS19WSUVX
X1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dF
VF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAgIHJldHVybiBld2tfZnJh
bWVfZWRpdGFibGVfc2V0KHNkLT5tYWluX2ZyYW1lLCBlZGl0YWJsZSk7CiB9CiAKLWNoYXIqIGV3
a192aWV3X3NlbGVjdGlvbl9nZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCitjaGFyKiBld2tfdmll
d19zZWxlY3Rpb25fZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19W
SUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIDApOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9S
RVRVUk4oZXdrVmlldywgc2QsIDApOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihz
ZCwgcHJpdiwgMCk7CiAgICAgQ1N0cmluZyBzID0gcHJpdi0+cGFnZS0+Zm9jdXNDb250cm9sbGVy
KCktPmZvY3VzZWRPck1haW5GcmFtZSgpLT5lZGl0b3IoKS0+c2VsZWN0ZWRUZXh0KCkudXRmOCgp
OwogICAgIGlmIChzLmlzTnVsbCgpKQpAQCAtMTM4Nyw5ICsxMzg3LDkgQEAgc3RhdGljIEVpbmFf
Qm9vbCBfZXdrX3ZpZXdfZWRpdG9yX2NvbW1hbmQoRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKiBwcml2
LCBjb25zdCBjaGEKICAgICByZXR1cm4gcHJpdi0+cGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZv
Y3VzZWRPck1haW5GcmFtZSgpLT5lZGl0b3IoKS0+Y29tbWFuZChXVEY6OlN0cmluZzo6ZnJvbVVU
RjgoY29tbWFuZCkpLmV4ZWN1dGUodmFsdWUpOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfZXhl
Y3V0ZV9lZGl0b3JfY29tbWFuZChFdmFzX09iamVjdCogbywgY29uc3QgRXdrX0VkaXRvcl9Db21t
YW5kIGNvbW1hbmQsIGNvbnN0IGNoYXIqIHZhbHVlKQorRWluYV9Cb29sIGV3a192aWV3X2V4ZWN1
dGVfZWRpdG9yX2NvbW1hbmQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGNvbnN0IEV3a19FZGl0b3Jf
Q29tbWFuZCBjb21tYW5kLCBjb25zdCBjaGFyKiB2YWx1ZSkKIHsKLSAgICBFV0tfVklFV19TRF9H
RVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1Jf
UkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFV0tfVklFV19QUklWX0dFVF9P
Ul9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwogCiAgICAgc3dpdGNoIChjb21tYW5kKSB7
CkBAIC0xNDE0LDEwICsxNDE0LDEwIEBAIEVpbmFfQm9vbCBld2tfdmlld19leGVjdXRlX2VkaXRv
cl9jb21tYW5kKEV2YXNfT2JqZWN0KiBvLCBjb25zdCBFd2tfRWRpdG9yX0NvbW1hCiAgICAgfQog
fQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfY29udGV4dF9tZW51X2ZvcndhcmRfZXZlbnQoRXZhc19P
YmplY3QqIG8sIGNvbnN0IEV2YXNfRXZlbnRfTW91c2VfRG93biogZXYpCitFaW5hX0Jvb2wgZXdr
X3ZpZXdfY29udGV4dF9tZW51X2ZvcndhcmRfZXZlbnQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGNv
bnN0IEV2YXNfRXZlbnRfTW91c2VfRG93biogZG93bkV2ZW50KQogewogI2lmIEVOQUJMRShDT05U
RVhUX01FTlVTKQotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFM
U0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFM
U0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxT
RSk7CiAgICAgRWluYV9Cb29sIG1vdXNlX3ByZXNzX2hhbmRsZWQgPSBFSU5BX0ZBTFNFOwogCkBA
IC0xNDI2LDcgKzE0MjYsNyBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfY29udGV4dF9tZW51X2Zvcndh
cmRfZXZlbnQoRXZhc19PYmplY3QqIG8sIGNvbnN0IEV2YXNfRXZlbnRfTQogICAgIEV2YXNfQ29v
cmQgeCwgeTsKICAgICBldmFzX29iamVjdF9nZW9tZXRyeV9nZXQoc2QtPnNlbGYsICZ4LCAmeSwg
MCwgMCk7CiAKLSAgICBXZWJDb3JlOjpQbGF0Zm9ybU1vdXNlRXZlbnQgZXZlbnQoZXYsIFdlYkNv
cmU6OkludFBvaW50KHgsIHkpKTsKKyAgICBXZWJDb3JlOjpQbGF0Zm9ybU1vdXNlRXZlbnQgZXZl
bnQoZG93bkV2ZW50LCBXZWJDb3JlOjpJbnRQb2ludCh4LCB5KSk7CiAKICAgICBpZiAobWFpbl9m
cmFtZS0+dmlldygpKSB7CiAgICAgICAgIG1vdXNlX3ByZXNzX2hhbmRsZWQgPQpAQCAtMTQ1MCw4
NSArMTQ1MCw4NSBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfY29udGV4dF9tZW51X2ZvcndhcmRfZXZl
bnQoRXZhc19PYmplY3QqIG8sIGNvbnN0IEV2YXNfRXZlbnRfTQogI2VuZGlmCiB9CiAKLWRvdWJs
ZSBld2tfdmlld19sb2FkX3Byb2dyZXNzX2dldChjb25zdCBFdmFzX09iamVjdCogbykKK2RvdWJs
ZSBld2tfdmlld19sb2FkX3Byb2dyZXNzX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykK
IHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAtMS4wKTsKKyAgICBFV0tf
VklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAtMS4wKTsKICAgICBFV0tfVklFV19Q
UklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIC0xLjApOwogICAgIHJldHVybiBwcml2LT5wYWdl
LT5wcm9ncmVzcygpLT5lc3RpbWF0ZWRQcm9ncmVzcygpOwogfQogCi1FaW5hX0Jvb2wgZXdrX3Zp
ZXdfc3RvcChFdmFzX09iamVjdCogbykKK0VpbmFfQm9vbCBld2tfdmlld19zdG9wKEV2YXNfT2Jq
ZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJ
TkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJ
TkFfRkFMU0UpOwogICAgIHJldHVybiBld2tfZnJhbWVfc3RvcChzZC0+bWFpbl9mcmFtZSk7CiB9
CiAKLUVpbmFfQm9vbCBld2tfdmlld19yZWxvYWQoRXZhc19PYmplY3QqIG8pCitFaW5hX0Jvb2wg
ZXdrX3ZpZXdfcmVsb2FkKEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NE
X0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9P
Ul9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAgIHJldHVybiBld2tfZnJhbWVf
cmVsb2FkKHNkLT5tYWluX2ZyYW1lKTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3JlbG9hZF9m
dWxsKEV2YXNfT2JqZWN0KiBvKQorRWluYV9Cb29sIGV3a192aWV3X3JlbG9hZF9mdWxsKEV2YXNf
T2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2Qs
IEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2Qs
IEVJTkFfRkFMU0UpOwogICAgIHJldHVybiBld2tfZnJhbWVfcmVsb2FkX2Z1bGwoc2QtPm1haW5f
ZnJhbWUpOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfYmFjayhFdmFzX09iamVjdCogbykKK0Vp
bmFfQm9vbCBld2tfdmlld19iYWNrKEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19W
SUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NE
X0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAgIHJldHVybiBld2tf
ZnJhbWVfYmFjayhzZC0+bWFpbl9mcmFtZSk7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld19mb3J3
YXJkKEV2YXNfT2JqZWN0KiBvKQorRWluYV9Cb29sIGV3a192aWV3X2ZvcndhcmQoRXZhc19PYmpl
Y3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlO
QV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlO
QV9GQUxTRSk7CiAgICAgcmV0dXJuIGV3a19mcmFtZV9mb3J3YXJkKHNkLT5tYWluX2ZyYW1lKTsK
IH0KIAotRWluYV9Cb29sIGV3a192aWV3X25hdmlnYXRlKEV2YXNfT2JqZWN0KiBvLCBpbnQgc3Rl
cHMpCitFaW5hX0Jvb2wgZXdrX3ZpZXdfbmF2aWdhdGUoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGlu
dCBzdGVwcykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZB
TFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZB
TFNFKTsKICAgICByZXR1cm4gZXdrX2ZyYW1lX25hdmlnYXRlKHNkLT5tYWluX2ZyYW1lLCBzdGVw
cyk7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld19iYWNrX3Bvc3NpYmxlKEV2YXNfT2JqZWN0KiBv
KQorRWluYV9Cb29sIGV3a192aWV3X2JhY2tfcG9zc2libGUoRXZhc19PYmplY3QqIGV3a1ZpZXcp
CiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7Cisg
ICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAg
ICAgcmV0dXJuIGV3a19mcmFtZV9iYWNrX3Bvc3NpYmxlKHNkLT5tYWluX2ZyYW1lKTsKIH0KIAot
RWluYV9Cb29sIGV3a192aWV3X2ZvcndhcmRfcG9zc2libGUoRXZhc19PYmplY3QqIG8pCitFaW5h
X0Jvb2wgZXdrX3ZpZXdfZm9yd2FyZF9wb3NzaWJsZShFdmFzX09iamVjdCogZXdrVmlldykKIHsK
LSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBF
V0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBy
ZXR1cm4gZXdrX2ZyYW1lX2ZvcndhcmRfcG9zc2libGUoc2QtPm1haW5fZnJhbWUpOwogfQogCi1F
aW5hX0Jvb2wgZXdrX3ZpZXdfbmF2aWdhdGVfcG9zc2libGUoRXZhc19PYmplY3QqIG8sIGludCBz
dGVwcykKK0VpbmFfQm9vbCBld2tfdmlld19uYXZpZ2F0ZV9wb3NzaWJsZShFdmFzX09iamVjdCog
ZXdrVmlldywgaW50IHN0ZXBzKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywg
c2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywg
c2QsIEVJTkFfRkFMU0UpOwogICAgIHJldHVybiBld2tfZnJhbWVfbmF2aWdhdGVfcG9zc2libGUo
c2QtPm1haW5fZnJhbWUsIHN0ZXBzKTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X2hpc3Rvcnlf
ZW5hYmxlX2dldChjb25zdCBFdmFzX09iamVjdCogbykKK0VpbmFfQm9vbCBld2tfdmlld19oaXN0
b3J5X2VuYWJsZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJ
RVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJRVdfUFJJ
Vl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8V2ViQ29yZTo6QmFja0ZvcndhcmRMaXN0SW1wbCo+KHByaXYtPnBhZ2UtPmJhY2tGb3J3
YXJkTGlzdCgpKS0+ZW5hYmxlZCgpOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfaGlzdG9yeV9l
bmFibGVfc2V0KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wgZW5hYmxlKQorRWluYV9Cb29sIGV3
a192aWV3X2hpc3RvcnlfZW5hYmxlX3NldChFdmFzX09iamVjdCogZXdrVmlldywgRWluYV9Cb29s
IGVuYWJsZSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZB
TFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZB
TFNFKTsKICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFM
U0UpOwogICAgIHN0YXRpY19jYXN0PFdlYkNvcmU6OkJhY2tGb3J3YXJkTGlzdEltcGwqPihwcml2
LT5wYWdlLT5iYWNrRm9yd2FyZExpc3QoKSktPnNldEVuYWJsZWQoZW5hYmxlKTsKICAgICByZXR1
cm4gRUlOQV9UUlVFOwogfQogCi1Fd2tfSGlzdG9yeSogZXdrX3ZpZXdfaGlzdG9yeV9nZXQoY29u
c3QgRXZhc19PYmplY3QqIG8pCitFd2tfSGlzdG9yeSogZXdrX3ZpZXdfaGlzdG9yeV9nZXQoY29u
c3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
TihvLCBzZCwgMCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwg
MCk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCAwKTsKICAgICBp
ZiAoIXN0YXRpY19jYXN0PFdlYkNvcmU6OkJhY2tGb3J3YXJkTGlzdEltcGwqPihwcml2LT5wYWdl
LT5iYWNrRm9yd2FyZExpc3QoKSktPmVuYWJsZWQoKSkgewogICAgICAgICBFUlIoImFza2VkIGhp
c3RvcnksIGJ1dCBpdCdzIGRpc2FibGVkISBSZXR1cm5pbmcgMCEiKTsKQEAgLTE1MzcsMTUgKzE1
MzcsMTUgQEAgRXdrX0hpc3RvcnkqIGV3a192aWV3X2hpc3RvcnlfZ2V0KGNvbnN0IEV2YXNfT2Jq
ZWN0KiBvKQogICAgIHJldHVybiBwcml2LT5oaXN0b3J5OwogfQogCi1mbG9hdCBld2tfdmlld196
b29tX2dldChjb25zdCBFdmFzX09iamVjdCogbykKK2Zsb2F0IGV3a192aWV3X3pvb21fZ2V0KGNv
bnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRV
Uk4obywgc2QsIC0xLjApOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywg
c2QsIC0xLjApOwogICAgIHJldHVybiBld2tfZnJhbWVfem9vbV9nZXQoc2QtPm1haW5fZnJhbWUp
OwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfem9vbV9zZXQoRXZhc19PYmplY3QqIG8sIGZsb2F0
IHpvb20sIEV2YXNfQ29vcmQgY3gsIEV2YXNfQ29vcmQgY3kpCitFaW5hX0Jvb2wgZXdrX3ZpZXdf
em9vbV9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGZsb2F0IHpvb20sIEV2YXNfQ29vcmQgY3gs
IEV2YXNfQ29vcmQgY3kpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwg
RUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwg
RUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVQoc2QsIHByaXYpOwogCiAgICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5hcGksIEVJTkFfRkFMU0UpOwpAQCAtMTU2
OSwyNyArMTU2OSwyNyBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfem9vbV9zZXQoRXZhc19PYmplY3Qq
IG8sIGZsb2F0IHpvb20sIEV2YXNfQ29vcmQgY3gsIEV2YXNfQ29vcgogICAgIHJldHVybiBzZC0+
YXBpLT56b29tX3NldChzZCwgem9vbSwgY3gsIGN5KTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3
X3pvb21fd2Vha19zbW9vdGhfc2NhbGVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQorRWluYV9C
b29sIGV3a192aWV3X3pvb21fd2Vha19zbW9vdGhfc2NhbGVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0
KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFf
RkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFf
RkFMU0UpOwogICAgIHJldHVybiBzZC0+em9vbV93ZWFrX3Ntb290aF9zY2FsZTsKIH0KIAotdm9p
ZCBld2tfdmlld196b29tX3dlYWtfc21vb3RoX3NjYWxlX3NldChFdmFzX09iamVjdCogbywgRWlu
YV9Cb29sIHNtb290aF9zY2FsZSkKK3ZvaWQgZXdrX3ZpZXdfem9vbV93ZWFrX3Ntb290aF9zY2Fs
ZV9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCBzbW9vdGhTY2FsZSkKIHsKLSAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkKTsKLSAgICBzbW9vdGhfc2NhbGUgPSAh
IXNtb290aF9zY2FsZTsKLSAgICBpZiAoc2QtPnpvb21fd2Vha19zbW9vdGhfc2NhbGUgPT0gc21v
b3RoX3NjYWxlKQorICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QpOwor
ICAgIHNtb290aFNjYWxlID0gISFzbW9vdGhTY2FsZTsKKyAgICBpZiAoc2QtPnpvb21fd2Vha19z
bW9vdGhfc2NhbGUgPT0gc21vb3RoU2NhbGUpCiAgICAgICAgIHJldHVybjsKLSAgICBzZC0+em9v
bV93ZWFrX3Ntb290aF9zY2FsZSA9IHNtb290aF9zY2FsZTsKKyAgICBzZC0+em9vbV93ZWFrX3Nt
b290aF9zY2FsZSA9IHNtb290aFNjYWxlOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJO
KHNkLT5hcGkpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGktPnpvb21f
d2Vha19zbW9vdGhfc2NhbGVfc2V0KTsKLSAgICBzZC0+YXBpLT56b29tX3dlYWtfc21vb3RoX3Nj
YWxlX3NldChzZCwgc21vb3RoX3NjYWxlKTsKKyAgICBzZC0+YXBpLT56b29tX3dlYWtfc21vb3Ro
X3NjYWxlX3NldChzZCwgc21vb3RoU2NhbGUpOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfem9v
bV93ZWFrX3NldChFdmFzX09iamVjdCogbywgZmxvYXQgem9vbSwgRXZhc19Db29yZCBjeCwgRXZh
c19Db29yZCBjeSkKK0VpbmFfQm9vbCBld2tfdmlld196b29tX3dlYWtfc2V0KEV2YXNfT2JqZWN0
KiBld2tWaWV3LCBmbG9hdCB6b29tLCBFdmFzX0Nvb3JkIGNlbnRlclgsIEV2YXNfQ29vcmQgY2Vu
dGVyWSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNF
KTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNF
KTsKICAgICBFV0tfVklFV19QUklWX0dFVChzZCwgcHJpdik7CiAKICAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTl9WQUwoc2QtPmFwaSwgRUlOQV9GQUxTRSk7CkBAIC0xNjEyLDQxICsxNjEy
LDQxIEBAIEVpbmFfQm9vbCBld2tfdmlld196b29tX3dlYWtfc2V0KEV2YXNfT2JqZWN0KiBvLCBm
bG9hdCB6b29tLCBFdmFzX0Nvb3JkIGN4LCBFdmFzCiAgICAgc2QtPmFuaW1hdGVkX3pvb20uem9v
bS5zdGFydCA9IGV3a19mcmFtZV96b29tX2dldChzZC0+bWFpbl9mcmFtZSk7CiAgICAgc2QtPmFu
aW1hdGVkX3pvb20uem9vbS5lbmQgPSB6b29tOwogICAgIHNkLT5hbmltYXRlZF96b29tLnpvb20u
Y3VycmVudCA9IHpvb207Ci0gICAgcmV0dXJuIHNkLT5hcGktPnpvb21fd2Vha19zZXQoc2QsIHpv
b20sIGN4LCBjeSk7CisgICAgcmV0dXJuIHNkLT5hcGktPnpvb21fd2Vha19zZXQoc2QsIHpvb20s
IGNlbnRlclgsIGNlbnRlclkpOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfem9vbV9hbmltYXRl
ZF9tYXJrX3N0YXJ0KEV2YXNfT2JqZWN0KiBvLCBmbG9hdCB6b29tKQorRWluYV9Cb29sIGV3a192
aWV3X3pvb21fYW5pbWF0ZWRfbWFya19zdGFydChFdmFzX09iamVjdCogZXdrVmlldywgZmxvYXQg
em9vbSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNF
KTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNF
KTsKICAgICBzZC0+YW5pbWF0ZWRfem9vbS56b29tLnN0YXJ0ID0gem9vbTsKICAgICByZXR1cm4g
RUlOQV9UUlVFOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9tYXJrX2Vu
ZChFdmFzX09iamVjdCogbywgZmxvYXQgem9vbSkKK0VpbmFfQm9vbCBld2tfdmlld196b29tX2Fu
aW1hdGVkX21hcmtfZW5kKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBmbG9hdCB6b29tKQogewotICAg
IEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19W
SUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAgIHNkLT5h
bmltYXRlZF96b29tLnpvb20uZW5kID0gem9vbTsKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQog
Ci1FaW5hX0Jvb2wgZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9tYXJrX2N1cnJlbnQoRXZhc19PYmpl
Y3QqIG8sIGZsb2F0IHpvb20pCitFaW5hX0Jvb2wgZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9tYXJr
X2N1cnJlbnQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGZsb2F0IHpvb20pCiB7Ci0gICAgRVdLX1ZJ
RVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgc2QtPmFuaW1hdGVk
X3pvb20uem9vbS5jdXJyZW50ID0gem9vbTsKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi1F
aW5hX0Jvb2wgZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9tYXJrX3N0b3AoRXZhc19PYmplY3QqIG8p
CitFaW5hX0Jvb2wgZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9tYXJrX3N0b3AoRXZhc19PYmplY3Qq
IGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9G
QUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9G
QUxTRSk7CiAgICAgX2V3a192aWV3X3pvb21fYW5pbWF0ZWRfbWFya19zdG9wKHNkKTsKICAgICBy
ZXR1cm4gRUlOQV9UUlVFOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9z
ZXQoRXZhc19PYmplY3QqIG8sIGZsb2F0IHpvb20sIGZsb2F0IGR1cmF0aW9uLCBFdmFzX0Nvb3Jk
IGN4LCBFdmFzX0Nvb3JkIGN5KQorRWluYV9Cb29sIGV3a192aWV3X3pvb21fYW5pbWF0ZWRfc2V0
KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBmbG9hdCB6b29tLCBmbG9hdCBkdXJhdGlvbiwgRXZhc19D
b29yZCBjZW50ZXJYLCBFdmFzX0Nvb3JkIGNlbnRlclkpCiB7CiAgICAgZG91YmxlIG5vdzsKLSAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tf
VklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFV0tf
VklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+YXBpLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmFwaS0+em9vbV93ZWFrX3NldCwgRUlOQV9G
QUxTRSk7CkBAIC0xNjcyLDEwICsxNjcyLDEwIEBAIEVpbmFfQm9vbCBld2tfdmlld196b29tX2Fu
aW1hdGVkX3NldChFdmFzX09iamVjdCogbywgZmxvYXQgem9vbSwgZmxvYXQgZHVyYXRpb24sCiAg
ICAgICAgIF9ld2tfdmlld196b29tX2FuaW1hdGlvbl9zdGFydChzZCk7CiAgICAgfQogCi0gICAg
aWYgKGN4IDwgMCkKLSAgICAgICAgY3ggPSAwOwotICAgIGlmIChjeSA8IDApCi0gICAgICAgIGN5
ID0gMDsKKyAgICBpZiAoY2VudGVyWCA8IDApCisgICAgICAgIGNlbnRlclggPSAwOworICAgIGlm
IChjZW50ZXJZIDwgMCkKKyAgICAgICAgY2VudGVyWSA9IDA7CiAKICAgICBub3cgPSBlY29yZV9s
b29wX3RpbWVfZ2V0KCk7CiAgICAgcHJpdi0+YW5pbWF0ZWRfem9vbS50aW1lLnN0YXJ0ID0gbm93
OwpAQCAtMTY4Myw4ICsxNjgzLDggQEAgRWluYV9Cb29sIGV3a192aWV3X3pvb21fYW5pbWF0ZWRf
c2V0KEV2YXNfT2JqZWN0KiBvLCBmbG9hdCB6b29tLCBmbG9hdCBkdXJhdGlvbiwKICAgICBwcml2
LT5hbmltYXRlZF96b29tLnRpbWUuZHVyYXRpb24gPSBkdXJhdGlvbjsKICAgICBwcml2LT5hbmlt
YXRlZF96b29tLnpvb20uZW5kID0gem9vbTsKICAgICBwcml2LT5hbmltYXRlZF96b29tLnpvb20u
cmFuZ2UgPSAocHJpdi0+YW5pbWF0ZWRfem9vbS56b29tLmVuZCAtIHByaXYtPmFuaW1hdGVkX3pv
b20uem9vbS5zdGFydCk7Ci0gICAgcHJpdi0+YW5pbWF0ZWRfem9vbS5jZW50ZXIueCA9IGN4Owot
ICAgIHByaXYtPmFuaW1hdGVkX3pvb20uY2VudGVyLnkgPSBjeTsKKyAgICBwcml2LT5hbmltYXRl
ZF96b29tLmNlbnRlci54ID0gY2VudGVyWDsKKyAgICBwcml2LT5hbmltYXRlZF96b29tLmNlbnRl
ci55ID0gY2VudGVyWTsKICAgICBzZC0+YW5pbWF0ZWRfem9vbS56b29tLmN1cnJlbnQgPSBwcml2
LT5hbmltYXRlZF96b29tLnpvb20uc3RhcnQ7CiAgICAgc2QtPmFuaW1hdGVkX3pvb20uem9vbS5z
dGFydCA9IHByaXYtPmFuaW1hdGVkX3pvb20uem9vbS5zdGFydDsKICAgICBzZC0+YW5pbWF0ZWRf
em9vbS56b29tLmVuZCA9IHByaXYtPmFuaW1hdGVkX3pvb20uem9vbS5lbmQ7CkBAIC0xNjkyLDIx
ICsxNjkyLDIxIEBAIEVpbmFfQm9vbCBld2tfdmlld196b29tX2FuaW1hdGVkX3NldChFdmFzX09i
amVjdCogbywgZmxvYXQgem9vbSwgZmxvYXQgZHVyYXRpb24sCiAgICAgcmV0dXJuIEVJTkFfVFJV
RTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3pvb21fdGV4dF9vbmx5X2dldChjb25zdCBFdmFz
X09iamVjdCogbykKK0VpbmFfQm9vbCBld2tfdmlld196b29tX3RleHRfb25seV9nZXQoY29uc3Qg
RXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihv
LCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3
LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgcmV0dXJuIGV3a19mcmFtZV96b29tX3RleHRfb25seV9n
ZXQoc2QtPm1haW5fZnJhbWUpOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfem9vbV90ZXh0X29u
bHlfc2V0KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wgc2V0dGluZykKK0VpbmFfQm9vbCBld2tf
dmlld196b29tX3RleHRfb25seV9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCBz
ZXR0aW5nKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFM
U0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFM
U0UpOwogICAgIHJldHVybiBld2tfZnJhbWVfem9vbV90ZXh0X29ubHlfc2V0KHNkLT5tYWluX2Zy
YW1lLCBzZXR0aW5nKTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3ByZV9yZW5kZXJfcmVnaW9u
KEV2YXNfT2JqZWN0KiBvLCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwgRXZhc19Db29yZCB3
LCBFdmFzX0Nvb3JkIGgsIGZsb2F0IHpvb20pCitFaW5hX0Jvb2wgZXdrX3ZpZXdfcHJlX3JlbmRl
cl9yZWdpb24oRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5
LCBFdmFzX0Nvb3JkIHdpZHRoLCBFdmFzX0Nvb3JkIGhlaWdodCwgZmxvYXQgem9vbSkKIHsKLSAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tf
VklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFV0tf
VklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+YXBpLT5wcmVfcmVuZGVyX3JlZ2lvbiwgRUlO
QV9GQUxTRSk7CiAgICAgZmxvYXQgY3VyX3pvb207CkBAIC0xNzI3LDI5ICsxNzI3LDI5IEBAIEVp
bmFfQm9vbCBld2tfdmlld19wcmVfcmVuZGVyX3JlZ2lvbihFdmFzX09iamVjdCogbywgRXZhc19D
b29yZCB4LCBFdmFzX0Nvb3JkIHksCiAKICAgICBjdyAqPSB6b29tIC8gY3VyX3pvb207CiAgICAg
Y2ggKj0gem9vbSAvIGN1cl96b29tOwotICAgIERCRygicmVnaW9uICVkLCVkKyVkeCVkIEAgJWYg
Y29udGVudHM9JWR4JWQiLCB4LCB5LCB3LCBoLCB6b29tLCBjdywgY2gpOworICAgIERCRygicmVn
aW9uICVkLCVkKyVkeCVkIEAgJWYgY29udGVudHM9JWR4JWQiLCB4LCB5LCB3aWR0aCwgaGVpZ2h0
LCB6b29tLCBjdywgY2gpOwogCi0gICAgaWYgKHggKyB3ID4gY3cpCi0gICAgICAgIHcgPSBjdyAt
IHg7CisgICAgaWYgKHggKyB3aWR0aCA+IGN3KQorICAgICAgICB3aWR0aCA9IGN3IC0geDsKIAot
ICAgIGlmICh5ICsgaCA+IGNoKQotICAgICAgICBoID0gY2ggLSB5OworICAgIGlmICh5ICsgaGVp
Z2h0ID4gY2gpCisgICAgICAgIGhlaWdodCA9IGNoIC0geTsKIAogICAgIGlmICh4IDwgMCkgewot
ICAgICAgICB3ICs9IHg7CisgICAgICAgIHdpZHRoICs9IHg7CiAgICAgICAgIHggPSAwOwogICAg
IH0KICAgICBpZiAoeSA8IDApIHsKLSAgICAgICAgaCArPSB5OworICAgICAgICBoZWlnaHQgKz0g
eTsKICAgICAgICAgeSA9IDA7CiAgICAgfQogCi0gICAgcmV0dXJuIHNkLT5hcGktPnByZV9yZW5k
ZXJfcmVnaW9uKHNkLCB4LCB5LCB3LCBoLCB6b29tKTsKKyAgICByZXR1cm4gc2QtPmFwaS0+cHJl
X3JlbmRlcl9yZWdpb24oc2QsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHpvb20pOwogfQogCi1FaW5h
X0Jvb2wgZXdrX3ZpZXdfcHJlX3JlbmRlcl9yZWxhdGl2ZV9yYWRpdXMoRXZhc19PYmplY3QqIG8s
IHVuc2lnbmVkIGludCBuKQorRWluYV9Cb29sIGV3a192aWV3X3ByZV9yZW5kZXJfcmVsYXRpdmVf
cmFkaXVzKEV2YXNfT2JqZWN0KiBld2tWaWV3LCB1bnNpZ25lZCBpbnQgbnVtYmVyKQogewotICAg
IEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19W
SUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVXS19W
SUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5hcGktPnByZV9yZW5kZXJfcmVsYXRpdmVfcmFk
aXVzLCBFSU5BX0ZBTFNFKTsKICAgICBmbG9hdCBjdXJfem9vbTsKQEAgLTE3NTgsNjUgKzE3NTgs
NjUgQEAgRWluYV9Cb29sIGV3a192aWV3X3ByZV9yZW5kZXJfcmVsYXRpdmVfcmFkaXVzKEV2YXNf
T2JqZWN0KiBvLCB1bnNpZ25lZCBpbnQgbikKICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CiAK
ICAgICBjdXJfem9vbSA9IGV3a19mcmFtZV96b29tX2dldChzZC0+bWFpbl9mcmFtZSk7Ci0gICAg
cmV0dXJuIHNkLT5hcGktPnByZV9yZW5kZXJfcmVsYXRpdmVfcmFkaXVzKHNkLCBuLCBjdXJfem9v
bSk7CisgICAgcmV0dXJuIHNkLT5hcGktPnByZV9yZW5kZXJfcmVsYXRpdmVfcmFkaXVzKHNkLCBu
dW1iZXIsIGN1cl96b29tKTsKIH0KIAotdW5zaWduZWQgaW50IGV3a192aWV3X2ltaF9nZXQoY29u
c3QgRXZhc19PYmplY3QqIG8pCit1bnNpZ25lZCBpbnQgZXdrX3ZpZXdfaW1oX2dldChjb25zdCBF
dmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8s
IHNkLCAwKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAwKTsK
ICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIDApOwogICAgIHJldHVy
biBwcml2LT5pbWg7CiB9CiAKLXZvaWQgZXdrX3ZpZXdfcHJlX3JlbmRlcl9jYW5jZWwoRXZhc19P
YmplY3QqIG8pCit2b2lkIGV3a192aWV3X3ByZV9yZW5kZXJfY2FuY2VsKEV2YXNfT2JqZWN0KiBl
d2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QpOworICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QpOwogICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOKHNkLT5hcGktPnByZV9yZW5kZXJfY2FuY2VsKTsKICAgICBzZC0+YXBpLT5w
cmVfcmVuZGVyX2NhbmNlbChzZCk7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld19lbmFibGVfcmVu
ZGVyKGNvbnN0IEV2YXNfT2JqZWN0KiBvKQorRWluYV9Cb29sIGV3a192aWV3X2VuYWJsZV9yZW5k
ZXIoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
Tihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk5fVkFMKHNkLT5hcGktPmVuYWJsZV9yZW5kZXIsIEVJTkFfRkFMU0UpOwogICAgIHJldHVybiBz
ZC0+YXBpLT5lbmFibGVfcmVuZGVyKHNkKTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X2Rpc2Fi
bGVfcmVuZGVyKGNvbnN0IEV2YXNfT2JqZWN0KiBvKQorRWluYV9Cb29sIGV3a192aWV3X2Rpc2Fi
bGVfcmVuZGVyKGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NE
X0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9P
Ul9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOX1ZBTChzZC0+YXBpLT5kaXNhYmxlX3JlbmRlciwgRUlOQV9GQUxTRSk7CiAgICAg
cmV0dXJuIHNkLT5hcGktPmRpc2FibGVfcmVuZGVyKHNkKTsKIH0KIAotY29uc3QgY2hhciogZXdr
X3ZpZXdfc2V0dGluZ191c2VyX2FnZW50X2dldChjb25zdCBFdmFzX09iamVjdCogbykKK2NvbnN0
IGNoYXIqIGV3a192aWV3X3NldHRpbmdfdXNlcl9hZ2VudF9nZXQoY29uc3QgRXZhc19PYmplY3Qq
IGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgMCk7Cisg
ICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgMCk7CiAgICAgRVdLX1ZJ
RVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCAwKTsKICAgICByZXR1cm4gcHJpdi0+c2V0
dGluZ3MudXNlcl9hZ2VudDsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfdXNlcl9h
Z2VudF9zZXQoRXZhc19PYmplY3QqIG8sIGNvbnN0IGNoYXIqIHVzZXJfYWdlbnQpCitFaW5hX0Jv
b2wgZXdrX3ZpZXdfc2V0dGluZ191c2VyX2FnZW50X3NldChFdmFzX09iamVjdCogZXdrVmlldywg
Y29uc3QgY2hhciogdXNlckFnZW50KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
bywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmll
dywgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwg
cHJpdiwgRUlOQV9GQUxTRSk7Ci0gICAgaWYgKGVpbmFfc3RyaW5nc2hhcmVfcmVwbGFjZSgmcHJp
di0+c2V0dGluZ3MudXNlcl9hZ2VudCwgdXNlcl9hZ2VudCkpIHsKKyAgICBpZiAoZWluYV9zdHJp
bmdzaGFyZV9yZXBsYWNlKCZwcml2LT5zZXR0aW5ncy51c2VyX2FnZW50LCB1c2VyQWdlbnQpKSB7
CiAgICAgICAgIFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50RWZsKiBjbGllbnQgPSBzdGF0aWNf
Y2FzdDxXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEVmbCo+KHByaXYtPm1haW5fZnJhbWUtPmxv
YWRlcigpLT5jbGllbnQoKSk7Ci0gICAgICAgIGNsaWVudC0+c2V0Q3VzdG9tVXNlckFnZW50KFN0
cmluZzo6ZnJvbVVURjgodXNlcl9hZ2VudCkpOworICAgICAgICBjbGllbnQtPnNldEN1c3RvbVVz
ZXJBZ2VudChTdHJpbmc6OmZyb21VVEY4KHVzZXJBZ2VudCkpOwogICAgIH0KICAgICByZXR1cm4g
RUlOQV9UUlVFOwogfQogCi1jb25zdCBjaGFyKiBld2tfdmlld19zZXR0aW5nX3VzZXJfc3R5bGVz
aGVldF9nZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCitjb25zdCBjaGFyKiBld2tfdmlld19zZXR0
aW5nX3VzZXJfc3R5bGVzaGVldF9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0g
ICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgMCk7CisgICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgMCk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1Jf
UkVUVVJOKHNkLCBwcml2LCAwKTsKICAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MudXNlcl9zdHls
ZXNoZWV0OwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ191c2VyX3N0eWxlc2hlZXRf
c2V0KEV2YXNfT2JqZWN0KiBvLCBjb25zdCBjaGFyKiB1cmkpCitFaW5hX0Jvb2wgZXdrX3ZpZXdf
c2V0dGluZ191c2VyX3N0eWxlc2hlZXRfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBj
aGFyKiB1cmkpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9G
QUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9G
QUxTRSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZB
TFNFKTsKICAgICBpZiAoZWluYV9zdHJpbmdzaGFyZV9yZXBsYWNlKCZwcml2LT5zZXR0aW5ncy51
c2VyX3N0eWxlc2hlZXQsIHVyaSkpIHsKICAgICAgICAgV2ViQ29yZTo6S1VSTCBrdXJsKFdlYkNv
cmU6OktVUkwoKSwgU3RyaW5nOjpmcm9tVVRGOCh1cmkpKTsKQEAgLTE4MjUsMTYgKzE4MjUsMTYg
QEAgRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfdXNlcl9zdHlsZXNoZWV0X3NldChFdmFzX09i
amVjdCogbywgY29uc3QgY2hhciogdXJpKQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLUVp
bmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2F1dG9fbG9hZF9pbWFnZXNfZ2V0KGNvbnN0IEV2YXNf
T2JqZWN0KiBvKQorRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfYXV0b19sb2FkX2ltYWdlc19n
ZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
Tihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVU
VVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuYXV0
b19sb2FkX2ltYWdlczsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfYXV0b19sb2Fk
X2ltYWdlc19zZXQoRXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCBhdXRvbWF0aWMpCitFaW5hX0Jv
b2wgZXdrX3ZpZXdfc2V0dGluZ19hdXRvX2xvYWRfaW1hZ2VzX3NldChFdmFzX09iamVjdCogZXdr
VmlldywgRWluYV9Cb29sIGF1dG9tYXRpYykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVU
VVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3
a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4o
c2QsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIGF1dG9tYXRpYyA9ICEhYXV0b21hdGljOwogICAg
IGlmIChwcml2LT5zZXR0aW5ncy5hdXRvX2xvYWRfaW1hZ2VzICE9IGF1dG9tYXRpYykgewpAQCAt
MTg0NCwxNiArMTg0NCwxNiBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19hdXRvX2xvYWRf
aW1hZ2VzX3NldChFdmFzX09iamVjdCogbywgRWluYV9Cb29sIGF1dG9tYQogICAgIHJldHVybiBF
SU5BX1RSVUU7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2F1dG9fc2hyaW5rX2lt
YWdlc19nZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCitFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGlu
Z19hdXRvX3Nocmlua19pbWFnZXNfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewot
ICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVX
S19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgcmV0
dXJuIHByaXYtPnNldHRpbmdzLmF1dG9fc2hyaW5rX2ltYWdlczsKIH0KIAotRWluYV9Cb29sIGV3
a192aWV3X3NldHRpbmdfYXV0b19zaHJpbmtfaW1hZ2VzX3NldChFdmFzX09iamVjdCogbywgRWlu
YV9Cb29sIGF1dG9tYXRpYykKK0VpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2F1dG9fc2hyaW5r
X2ltYWdlc19zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCBhdXRvbWF0aWMpCiB7
Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAg
RVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAg
RVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBh
dXRvbWF0aWMgPSAhIWF1dG9tYXRpYzsKICAgICBpZiAocHJpdi0+c2V0dGluZ3MuYXV0b19zaHJp
bmtfaW1hZ2VzICE9IGF1dG9tYXRpYykgewpAQCAtMTg2MywzMSArMTg2MywzMSBAQCBFaW5hX0Jv
b2wgZXdrX3ZpZXdfc2V0dGluZ19hdXRvX3Nocmlua19pbWFnZXNfc2V0KEV2YXNfT2JqZWN0KiBv
LCBFaW5hX0Jvb2wgYXV0bwogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLUVpbmFfQm9vbCBl
d2tfdmlld19zZXR0aW5nX2VuYWJsZV9hdXRvX3Jlc2l6ZV93aW5kb3dfZ2V0KGNvbnN0IEV2YXNf
T2JqZWN0KiBvKQorRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfZW5hYmxlX2F1dG9fcmVzaXpl
X3dpbmRvd19nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9H
RVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICByZXR1cm4gcHJpdi0+c2V0
dGluZ3MuZW5hYmxlX2F1dG9fcmVzaXplX3dpbmRvdzsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3
X3NldHRpbmdfZW5hYmxlX2F1dG9fcmVzaXplX3dpbmRvd19zZXQoRXZhc19PYmplY3QqIG8sIEVp
bmFfQm9vbCByZXNpemFibGUpCitFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19lbmFibGVfYXV0
b19yZXNpemVfd2luZG93X3NldChFdmFzX09iamVjdCogZXdrVmlldywgRWluYV9Cb29sIHJlc2l6
YWJsZSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNF
KTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNF
KTsKICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0Up
OwogICAgIHByaXYtPnNldHRpbmdzLmVuYWJsZV9hdXRvX3Jlc2l6ZV93aW5kb3cgPSByZXNpemFi
bGU7CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3NldHRp
bmdfZW5hYmxlX3NjcmlwdHNfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQorRWluYV9Cb29sIGV3
a192aWV3X3NldHRpbmdfZW5hYmxlX3NjcmlwdHNfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tW
aWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0Up
OworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0Up
OwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7
CiAgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmVuYWJsZV9zY3JpcHRzOwogfQogCi1FaW5hX0Jv
b2wgZXdrX3ZpZXdfc2V0dGluZ19lbmFibGVfc2NyaXB0c19zZXQoRXZhc19PYmplY3QqIG8sIEVp
bmFfQm9vbCBlbmFibGUpCitFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19lbmFibGVfc2NyaXB0
c19zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCBlbmFibGUpCiB7Ci0gICAgRVdL
X1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJRVdf
UFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBlbmFibGUgPSAh
IWVuYWJsZTsKICAgICBpZiAocHJpdi0+c2V0dGluZ3MuZW5hYmxlX3NjcmlwdHMgIT0gZW5hYmxl
KSB7CkBAIC0xODk3LDE2ICsxODk3LDE2IEBAIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2Vu
YWJsZV9zY3JpcHRzX3NldChFdmFzX09iamVjdCogbywgRWluYV9Cb29sIGVuYWJsZSkKICAgICBy
ZXR1cm4gRUlOQV9UUlVFOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19lbmFibGVf
cGx1Z2luc19nZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCitFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0
dGluZ19lbmFibGVfcGx1Z2luc19nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0g
ICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdL
X1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdL
X1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICByZXR1
cm4gcHJpdi0+c2V0dGluZ3MuZW5hYmxlX3BsdWdpbnM7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmll
d19zZXR0aW5nX2VuYWJsZV9wbHVnaW5zX3NldChFdmFzX09iamVjdCogbywgRWluYV9Cb29sIGVu
YWJsZSkKK0VpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2VuYWJsZV9wbHVnaW5zX3NldChFdmFz
X09iamVjdCogZXdrVmlldywgRWluYV9Cb29sIGVuYWJsZSkKIHsKLSAgICBFV0tfVklFV19TRF9H
RVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1Jf
UkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFV0tfVklFV19QUklWX0dFVF9P
Ul9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIGVuYWJsZSA9ICEhZW5hYmxlOwog
ICAgIGlmIChwcml2LT5zZXR0aW5ncy5lbmFibGVfcGx1Z2lucyAhPSBlbmFibGUpIHsKQEAgLTE5
MTYsMTYgKzE5MTYsMTYgQEAgRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfZW5hYmxlX3BsdWdp
bnNfc2V0KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wgZW5hYmxlKQogICAgIHJldHVybiBFSU5B
X1RSVUU7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2VuYWJsZV9mcmFtZV9mbGF0
dGVuaW5nX2dldChjb25zdCBFdmFzX09iamVjdCogbykKK0VpbmFfQm9vbCBld2tfdmlld19zZXR0
aW5nX2VuYWJsZV9mcmFtZV9mbGF0dGVuaW5nX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmll
dykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsK
KyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsK
ICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwog
ICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5lbmFibGVfZnJhbWVfZmxhdHRlbmluZzsKIH0KIAot
RWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfZW5hYmxlX2ZyYW1lX2ZsYXR0ZW5pbmdfc2V0KEV2
YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wgZW5hYmxlKQorRWluYV9Cb29sIGV3a192aWV3X3NldHRp
bmdfZW5hYmxlX2ZyYW1lX2ZsYXR0ZW5pbmdfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5h
X0Jvb2wgZW5hYmxlKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJ
TkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJ
TkFfRkFMU0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlO
QV9GQUxTRSk7CiAgICAgZW5hYmxlID0gISFlbmFibGU7CiAgICAgaWYgKHByaXYtPnNldHRpbmdz
LmVuYWJsZV9mcmFtZV9mbGF0dGVuaW5nICE9IGVuYWJsZSkgewpAQCAtMTkzNSwxNiArMTkzNSwx
NiBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19lbmFibGVfZnJhbWVfZmxhdHRlbmluZ19z
ZXQoRXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbAogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAK
LUVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX3NjcmlwdHNfd2luZG93X29wZW5fZ2V0KGNvbnN0
IEV2YXNfT2JqZWN0KiBvKQorRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfc2NyaXB0c193aW5k
b3dfb3Blbl9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9H
RVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICByZXR1cm4gcHJpdi0+c2V0
dGluZ3Muc2NyaXB0c193aW5kb3dfb3BlbjsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3NldHRp
bmdfc2NyaXB0c193aW5kb3dfb3Blbl9zZXQoRXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCBhbGxv
dykKK0VpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX3NjcmlwdHNfd2luZG93X29wZW5fc2V0KEV2
YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wgYWxsb3cpCiB7Ci0gICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRf
T1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBhbGxvdyA9ICEhYWxsb3c7CiAg
ICAgaWYgKHByaXYtPnNldHRpbmdzLnNjcmlwdHNfd2luZG93X29wZW4gIT0gYWxsb3cpIHsKQEAg
LTE5NTQsMTYgKzE5NTQsMTYgQEAgRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfc2NyaXB0c193
aW5kb3dfb3Blbl9zZXQoRXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCBhbGwKICAgICByZXR1cm4g
RUlOQV9UUlVFOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19zY3JpcHRzX2Nhbl9j
bG9zZV93aW5kb3dzX2dldChjb25zdCBFdmFzX09iamVjdCogbykKK0VpbmFfQm9vbCBld2tfdmll
d19zZXR0aW5nX3NjcmlwdHNfY2FuX2Nsb3NlX3dpbmRvd3NfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0
KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFf
RkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFf
RkFMU0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9G
QUxTRSk7CiAgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLnNjcmlwdHNfY2FuX2Nsb3NlX3dpbmRv
d3M7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX3NjcmlwdHNfY2FuX2Nsb3NlX3dp
bmRvd3Nfc2V0KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wgYWxsb3cpCitFaW5hX0Jvb2wgZXdr
X3ZpZXdfc2V0dGluZ19zY3JpcHRzX2Nhbl9jbG9zZV93aW5kb3dzX3NldChFdmFzX09iamVjdCog
ZXdrVmlldywgRWluYV9Cb29sIGFsbG93KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRV
Uk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdr
Vmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihz
ZCwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgYWxsb3cgPSAhIWFsbG93OwogICAgIGlmIChwcml2
LT5zZXR0aW5ncy5zY3JpcHRzX2Nhbl9jbG9zZV93aW5kb3dzICE9IGFsbG93KSB7CkBAIC0xOTcz
LDE2ICsxOTczLDE2IEBAIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX3NjcmlwdHNfY2FuX2Ns
b3NlX3dpbmRvd3Nfc2V0KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0JvCiAgICAgcmV0dXJuIEVJTkFf
VFJVRTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfcmVzaXphYmxlX3RleHRhcmVh
c19nZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCitFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19y
ZXNpemFibGVfdGV4dGFyZWFzX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tf
VklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFV0tf
VklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIHJldHVy
biBwcml2LT5zZXR0aW5ncy5yZXNpemFibGVfdGV4dGFyZWFzOwogfQogCi1FaW5hX0Jvb2wgZXdr
X3ZpZXdfc2V0dGluZ19yZXNpemFibGVfdGV4dGFyZWFzX3NldChFdmFzX09iamVjdCogbywgRWlu
YV9Cb29sIGVuYWJsZSkKK0VpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX3Jlc2l6YWJsZV90ZXh0
YXJlYXNfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wgZW5hYmxlKQogewotICAg
IEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19W
SUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVXS19W
SUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgZW5hYmxl
ID0gISFlbmFibGU7CiAgICAgaWYgKHByaXYtPnNldHRpbmdzLnJlc2l6YWJsZV90ZXh0YXJlYXMg
IT0gZW5hYmxlKSB7CkBAIC0xOTkyLDE2ICsxOTkyLDE2IEBAIEVpbmFfQm9vbCBld2tfdmlld19z
ZXR0aW5nX3Jlc2l6YWJsZV90ZXh0YXJlYXNfc2V0KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wg
ZW5hCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3NldHRp
bmdfcHJpdmF0ZV9icm93c2luZ19nZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCitFaW5hX0Jvb2wg
ZXdrX3ZpZXdfc2V0dGluZ19wcml2YXRlX2Jyb3dzaW5nX2dldChjb25zdCBFdmFzX09iamVjdCog
ZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZB
TFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZB
TFNFKTsKICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFM
U0UpOwogICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5wcml2YXRlX2Jyb3dzaW5nOwogfQogCi1F
aW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19wcml2YXRlX2Jyb3dzaW5nX3NldChFdmFzX09iamVj
dCogbywgRWluYV9Cb29sIGVuYWJsZSkKK0VpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX3ByaXZh
dGVfYnJvd3Npbmdfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wgZW5hYmxlKQog
ewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAg
IEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAg
IEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAg
ZW5hYmxlID0gISFlbmFibGU7CiAgICAgaWYgKHByaXYtPnNldHRpbmdzLnByaXZhdGVfYnJvd3Np
bmcgIT0gZW5hYmxlKSB7CkBAIC0yMDExLDE2ICsyMDExLDE2IEBAIEVpbmFfQm9vbCBld2tfdmll
d19zZXR0aW5nX3ByaXZhdGVfYnJvd3Npbmdfc2V0KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wg
ZW5hYmxlCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3Nl
dHRpbmdfb2ZmbGluZV9hcHBfY2FjaGVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQorRWluYV9C
b29sIGV3a192aWV3X3NldHRpbmdfb2ZmbGluZV9hcHBfY2FjaGVfZ2V0KGNvbnN0IEV2YXNfT2Jq
ZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJ
TkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJ
TkFfRkFMU0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlO
QV9GQUxTRSk7CiAgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLm9mZmxpbmVfYXBwX2NhY2hlOwog
fQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19vZmZsaW5lX2FwcF9jYWNoZV9zZXQoRXZh
c19PYmplY3QqIG8sIEVpbmFfQm9vbCBlbmFibGUpCitFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGlu
Z19vZmZsaW5lX2FwcF9jYWNoZV9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCBl
bmFibGUpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxT
RSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxT
RSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNF
KTsKICAgICBlbmFibGUgPSAhIWVuYWJsZTsKICAgICBpZiAocHJpdi0+c2V0dGluZ3Mub2ZmbGlu
ZV9hcHBfY2FjaGUgIT0gZW5hYmxlKSB7CkBAIC0yMDMxLDE2ICsyMDMxLDE2IEBAIEVpbmFfQm9v
bCBld2tfdmlld19zZXR0aW5nX29mZmxpbmVfYXBwX2NhY2hlX3NldChFdmFzX09iamVjdCogbywg
RWluYV9Cb29sIGVuYWJsCiB9CiAKIAotRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfY2FyZXRf
YnJvd3NpbmdfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQorRWluYV9Cb29sIGV3a192aWV3X3Nl
dHRpbmdfY2FyZXRfYnJvd3NpbmdfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewot
ICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVX
S19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgcmV0
dXJuIHByaXYtPnNldHRpbmdzLmNhcmV0X2Jyb3dzaW5nOwogfQogCi1FaW5hX0Jvb2wgZXdrX3Zp
ZXdfc2V0dGluZ19jYXJldF9icm93c2luZ19zZXQoRXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCBl
bmFibGUpCitFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19jYXJldF9icm93c2luZ19zZXQoRXZh
c19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCBlbmFibGUpCiB7Ci0gICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRf
T1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBlbmFibGUgPSAhIWVuYWJsZTsK
ICAgICBpZiAocHJpdi0+c2V0dGluZ3MuY2FyZXRfYnJvd3NpbmcgIT0gZW5hYmxlKSB7CkBAIC0y
MDUwLDExICsyMDUwLDExIEBAIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2NhcmV0X2Jyb3dz
aW5nX3NldChFdmFzX09iamVjdCogbywgRWluYV9Cb29sIGVuYWJsZSkKICAgICByZXR1cm4gRUlO
QV9UUlVFOwogfQogCi1jb25zdCBjaGFyKiBld2tfdmlld19zZXR0aW5nX2VuY29kaW5nX2N1c3Rv
bV9nZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCitjb25zdCBjaGFyKiBld2tfdmlld19zZXR0aW5n
X2VuY29kaW5nX2N1c3RvbV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAg
RVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgMCk7CisgICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihld2tWaWV3LCBzZCwgMCk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVU
VVJOKHNkLCBwcml2LCAwKTsKLSAgICBFdmFzX09iamVjdCogbWFpbl9mcmFtZSA9IGV3a192aWV3
X2ZyYW1lX21haW5fZ2V0KG8pOworICAgIEV2YXNfT2JqZWN0KiBtYWluX2ZyYW1lID0gZXdrX3Zp
ZXdfZnJhbWVfbWFpbl9nZXQoZXdrVmlldyk7CiAgICAgV2ViQ29yZTo6RnJhbWUqIGNvcmVfZnJh
bWUgPSBld2tfZnJhbWVfY29yZV9nZXQobWFpbl9mcmFtZSk7CiAKICAgICBTdHJpbmcgb3ZlcnJp
ZGVFbmNvZGluZyA9IGNvcmVfZnJhbWUtPmxvYWRlcigpLT5kb2N1bWVudExvYWRlcigpLT5vdmVy
cmlkZUVuY29kaW5nKCk7CkBAIC0yMDY2LDExICsyMDY2LDExIEBAIGNvbnN0IGNoYXIqIGV3a192
aWV3X3NldHRpbmdfZW5jb2RpbmdfY3VzdG9tX2dldChjb25zdCBFdmFzX09iamVjdCogbykKICAg
ICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZW5jb2RpbmdfY3VzdG9tOwogfQogCi1FaW5hX0Jvb2wg
ZXdrX3ZpZXdfc2V0dGluZ19lbmNvZGluZ19jdXN0b21fc2V0KEV2YXNfT2JqZWN0KiBvLCBjb25z
dCBjaGFyKiBlbmNvZGluZykKK0VpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2VuY29kaW5nX2N1
c3RvbV9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGNvbnN0IGNoYXIqIGVuY29kaW5nKQogewot
ICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVX
S19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7Ci0gICAgRXZh
c19PYmplY3QqIG1haW5fZnJhbWUgPSBld2tfdmlld19mcmFtZV9tYWluX2dldChvKTsKKyAgICBF
dmFzX09iamVjdCogbWFpbl9mcmFtZSA9IGV3a192aWV3X2ZyYW1lX21haW5fZ2V0KGV3a1ZpZXcp
OwogICAgIFdlYkNvcmU6OkZyYW1lKiBjb3JlX2ZyYW1lID0gZXdrX2ZyYW1lX2NvcmVfZ2V0KG1h
aW5fZnJhbWUpOwogICAgIERCRygiJXMiLCBlbmNvZGluZyk7CiAgICAgaWYgKGVpbmFfc3RyaW5n
c2hhcmVfcmVwbGFjZSgmcHJpdi0+c2V0dGluZ3MuZW5jb2RpbmdfY3VzdG9tLCBlbmNvZGluZykp
CkBAIC0yMDc4LDI1ICsyMDc4LDI1IEBAIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2VuY29k
aW5nX2N1c3RvbV9zZXQoRXZhc19PYmplY3QqIG8sIGNvbnN0IGNoYXIqIGVuY29kCiAgICAgcmV0
dXJuIEVJTkFfVFJVRTsKIH0KIAotY29uc3QgY2hhciogZXdrX3ZpZXdfc2V0dGluZ19lbmNvZGlu
Z19kZWZhdWx0X2dldChjb25zdCBFdmFzX09iamVjdCogbykKK2NvbnN0IGNoYXIqIGV3a192aWV3
X3NldHRpbmdfZW5jb2RpbmdfZGVmYXVsdF9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcp
CiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgMCk7CisgICAgRVdLX1ZJ
RVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgMCk7CiAgICAgRVdLX1ZJRVdfUFJJVl9H
RVRfT1JfUkVUVVJOKHNkLCBwcml2LCAwKTsKICAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZW5j
b2RpbmdfZGVmYXVsdDsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfZW5jb2Rpbmdf
ZGVmYXVsdF9zZXQoRXZhc19PYmplY3QqIG8sIGNvbnN0IGNoYXIqIGVuY29kaW5nKQorRWluYV9C
b29sIGV3a192aWV3X3NldHRpbmdfZW5jb2RpbmdfZGVmYXVsdF9zZXQoRXZhc19PYmplY3QqIGV3
a1ZpZXcsIGNvbnN0IGNoYXIqIGVuY29kaW5nKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9S
RVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVS
TihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgaWYgKGVpbmFfc3RyaW5nc2hhcmVfcmVwbGFj
ZSgmcHJpdi0+c2V0dGluZ3MuZW5jb2RpbmdfZGVmYXVsdCwgZW5jb2RpbmcpKQogICAgICAgICBw
cml2LT5wYWdlX3NldHRpbmdzLT5zZXREZWZhdWx0VGV4dEVuY29kaW5nTmFtZShTdHJpbmc6OmZy
b21VVEY4KGVuY29kaW5nKSk7CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotRWluYV9Cb29s
IGV3a192aWV3X3NldHRpbmdfZW5jb2RpbmdfZGV0ZWN0b3Jfc2V0KEV2YXNfT2JqZWN0KiBvLCBF
aW5hX0Jvb2wgZW5hYmxlKQorRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfZW5jb2RpbmdfZGV0
ZWN0b3Jfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wgZW5hYmxlKQogewotICAg
IEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19W
SUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVXS19W
SUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgZW5hYmxl
ID0gISFlbmFibGU7CiAgICAgaWYgKHByaXYtPnNldHRpbmdzLmVuY29kaW5nX2RldGVjdG9yICE9
IGVuYWJsZSkgewpAQCAtMjEwNiwyMyArMjEwNiwyMyBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0
dGluZ19lbmNvZGluZ19kZXRlY3Rvcl9zZXQoRXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCBlbmFi
bAogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5n
X2VuY29kaW5nX2RldGVjdG9yX2dldChjb25zdCBFdmFzX09iamVjdCogbykKK0VpbmFfQm9vbCBl
d2tfdmlld19zZXR0aW5nX2VuY29kaW5nX2RldGVjdG9yX2dldChjb25zdCBFdmFzX09iamVjdCog
ZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZB
TFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZB
TFNFKTsKICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFM
U0UpOwogICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5lbmNvZGluZ19kZXRlY3RvcjsKIH0KIAot
RWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfZW5hYmxlX2RldmVsb3Blcl9leHRyYXNfZ2V0KGNv
bnN0IEV2YXNfT2JqZWN0KiBvKQorRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfZW5hYmxlX2Rl
dmVsb3Blcl9leHRyYXNfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVX
X1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVXS19WSUVX
X1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgcmV0dXJuIHBy
aXYtPnNldHRpbmdzLmVuYWJsZV9kZXZlbG9wZXJfZXh0cmFzOwogfQogCi1FaW5hX0Jvb2wgZXdr
X3ZpZXdfc2V0dGluZ19lbmFibGVfZGV2ZWxvcGVyX2V4dHJhc19zZXQoRXZhc19PYmplY3QqIG8s
IEVpbmFfQm9vbCBlbmFibGUpCitFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19lbmFibGVfZGV2
ZWxvcGVyX2V4dHJhc19zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCBlbmFibGUp
CiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7Cisg
ICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAg
ICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAg
ICBlbmFibGUgPSAhIWVuYWJsZTsKICAgICBpZiAocHJpdi0+c2V0dGluZ3MuZW5hYmxlX2RldmVs
b3Blcl9leHRyYXMgIT0gZW5hYmxlKSB7CkBAIC0yMTMyLDE2ICsyMTMyLDE2IEBAIEVpbmFfQm9v
bCBld2tfdmlld19zZXR0aW5nX2VuYWJsZV9kZXZlbG9wZXJfZXh0cmFzX3NldChFdmFzX09iamVj
dCogbywgRWluYV9Cb29sCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotaW50IGV3a192aWV3
X3NldHRpbmdfZm9udF9taW5pbXVtX3NpemVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQoraW50
IGV3a192aWV3X3NldHRpbmdfZm9udF9taW5pbXVtX3NpemVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0
KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIDApOwor
ICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIDApOwogICAgIEVXS19W
SUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgMCk7CiAgICAgcmV0dXJuIHByaXYtPnNl
dHRpbmdzLmZvbnRfbWluaW11bV9zaXplOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGlu
Z19mb250X21pbmltdW1fc2l6ZV9zZXQoRXZhc19PYmplY3QqIG8sIGludCBzaXplKQorRWluYV9C
b29sIGV3a192aWV3X3NldHRpbmdfZm9udF9taW5pbXVtX3NpemVfc2V0KEV2YXNfT2JqZWN0KiBl
d2tWaWV3LCBpbnQgc2l6ZSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNk
LCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNk
LCBFSU5BX0ZBTFNFKTsKICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYs
IEVJTkFfRkFMU0UpOwogICAgIGlmIChwcml2LT5zZXR0aW5ncy5mb250X21pbmltdW1fc2l6ZSAh
PSBzaXplKSB7CiAgICAgICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNldE1pbmltdW1Gb250U2l6
ZShzaXplKTsKQEAgLTIxNTAsMTYgKzIxNTAsMTYgQEAgRWluYV9Cb29sIGV3a192aWV3X3NldHRp
bmdfZm9udF9taW5pbXVtX3NpemVfc2V0KEV2YXNfT2JqZWN0KiBvLCBpbnQgc2l6ZSkKICAgICBy
ZXR1cm4gRUlOQV9UUlVFOwogfQogCi1pbnQgZXdrX3ZpZXdfc2V0dGluZ19mb250X21pbmltdW1f
bG9naWNhbF9zaXplX2dldChjb25zdCBFdmFzX09iamVjdCogbykKK2ludCBld2tfdmlld19zZXR0
aW5nX2ZvbnRfbWluaW11bV9sb2dpY2FsX3NpemVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tW
aWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIDApOworICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIDApOwogICAgIEVXS19WSUVXX1BS
SVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgMCk7CiAgICAgcmV0dXJuIHByaXYtPnNldHRpbmdz
LmZvbnRfbWluaW11bV9sb2dpY2FsX3NpemU7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld19zZXR0
aW5nX2ZvbnRfbWluaW11bV9sb2dpY2FsX3NpemVfc2V0KEV2YXNfT2JqZWN0KiBvLCBpbnQgc2l6
ZSkKK0VpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2ZvbnRfbWluaW11bV9sb2dpY2FsX3NpemVf
c2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBpbnQgc2l6ZSkKIHsKLSAgICBFV0tfVklFV19TRF9H
RVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1Jf
UkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFV0tfVklFV19QUklWX0dFVF9P
Ul9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIGlmIChwcml2LT5zZXR0aW5ncy5m
b250X21pbmltdW1fbG9naWNhbF9zaXplICE9IHNpemUpIHsKICAgICAgICAgcHJpdi0+cGFnZV9z
ZXR0aW5ncy0+c2V0TWluaW11bUxvZ2ljYWxGb250U2l6ZShzaXplKTsKQEAgLTIxNjgsMTYgKzIx
NjgsMTYgQEAgRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfZm9udF9taW5pbXVtX2xvZ2ljYWxf
c2l6ZV9zZXQoRXZhc19PYmplY3QqIG8sIGludCBzaXoKICAgICByZXR1cm4gRUlOQV9UUlVFOwog
fQogCi1pbnQgZXdrX3ZpZXdfc2V0dGluZ19mb250X2RlZmF1bHRfc2l6ZV9nZXQoY29uc3QgRXZh
c19PYmplY3QqIG8pCitpbnQgZXdrX3ZpZXdfc2V0dGluZ19mb250X2RlZmF1bHRfc2l6ZV9nZXQo
Y29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JF
VFVSTihvLCBzZCwgMCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBz
ZCwgMCk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCAwKTsKICAg
ICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZm9udF9kZWZhdWx0X3NpemU7CiB9CiAKLUVpbmFfQm9v
bCBld2tfdmlld19zZXR0aW5nX2ZvbnRfZGVmYXVsdF9zaXplX3NldChFdmFzX09iamVjdCogbywg
aW50IHNpemUpCitFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19mb250X2RlZmF1bHRfc2l6ZV9z
ZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGludCBzaXplKQogewotICAgIEVXS19WSUVXX1NEX0dF
VF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9S
RVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09S
X1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgaWYgKHByaXYtPnNldHRpbmdzLmZv
bnRfZGVmYXVsdF9zaXplICE9IHNpemUpIHsKICAgICAgICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+
c2V0RGVmYXVsdEZvbnRTaXplKHNpemUpOwpAQCAtMjE4NiwxNiArMjE4NiwxNiBAQCBFaW5hX0Jv
b2wgZXdrX3ZpZXdfc2V0dGluZ19mb250X2RlZmF1bHRfc2l6ZV9zZXQoRXZhc19PYmplY3QqIG8s
IGludCBzaXplKQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLWludCBld2tfdmlld19zZXR0
aW5nX2ZvbnRfbW9ub3NwYWNlX3NpemVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQoraW50IGV3
a192aWV3X3NldHRpbmdfZm9udF9tb25vc3BhY2Vfc2l6ZV9nZXQoY29uc3QgRXZhc19PYmplY3Qq
IGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgMCk7Cisg
ICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgMCk7CiAgICAgRVdLX1ZJ
RVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCAwKTsKICAgICByZXR1cm4gcHJpdi0+c2V0
dGluZ3MuZm9udF9tb25vc3BhY2Vfc2l6ZTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3NldHRp
bmdfZm9udF9tb25vc3BhY2Vfc2l6ZV9zZXQoRXZhc19PYmplY3QqIG8sIGludCBzaXplKQorRWlu
YV9Cb29sIGV3a192aWV3X3NldHRpbmdfZm9udF9tb25vc3BhY2Vfc2l6ZV9zZXQoRXZhc19PYmpl
Y3QqIGV3a1ZpZXcsIGludCBzaXplKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
bywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmll
dywgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwg
cHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgaWYgKHByaXYtPnNldHRpbmdzLmZvbnRfbW9ub3NwYWNl
X3NpemUgIT0gc2l6ZSkgewogICAgICAgICBwcml2LT5wYWdlX3NldHRpbmdzLT5zZXREZWZhdWx0
Rml4ZWRGb250U2l6ZShzaXplKTsKQEAgLTIyMDQsMTIgKzIyMDQsMTIgQEAgRWluYV9Cb29sIGV3
a192aWV3X3NldHRpbmdfZm9udF9tb25vc3BhY2Vfc2l6ZV9zZXQoRXZhc19PYmplY3QqIG8sIGlu
dCBzaXplKQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLWNvbnN0IGNoYXIqIGV3a192aWV3
X2ZvbnRfZmFtaWx5X25hbWVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvLCBFd2tfRm9udF9GYW1p
bHkgZm9udF9mYW1pbHkpCitjb25zdCBjaGFyKiBld2tfdmlld19mb250X2ZhbWlseV9uYW1lX2dl
dChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldywgRXdrX0ZvbnRfRmFtaWx5IGZvbnRGYW1pbHkp
CiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgMCk7CisgICAgRVdLX1ZJ
RVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgMCk7CiAgICAgRVdLX1ZJRVdfUFJJVl9H
RVRfT1JfUkVUVVJOKHNkLCBwcml2LCAwKTsKIAotICAgIHN3aXRjaCAoZm9udF9mYW1pbHkpIHsK
KyAgICBzd2l0Y2ggKGZvbnRGYW1pbHkpIHsKICAgICBjYXNlIEVXS19GT05UX0ZBTUlMWV9TVEFO
REFSRDoKICAgICAgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmZvbnRfc3RhbmRhcmQ7CiAgICAg
Y2FzZSBFV0tfRk9OVF9GQU1JTFlfQ1VSU0lWRToKQEAgLTIyMjYsMTIgKzIyMjYsMTIgQEAgY29u
c3QgY2hhciogZXdrX3ZpZXdfZm9udF9mYW1pbHlfbmFtZV9nZXQoY29uc3QgRXZhc19PYmplY3Qq
IG8sIEV3a19Gb250X0ZhbWlseQogICAgIHJldHVybiAwOwogfQogCi1FaW5hX0Jvb2wgZXdrX3Zp
ZXdfZm9udF9mYW1pbHlfbmFtZV9zZXQoRXZhc19PYmplY3QqIG8sIEV3a19Gb250X0ZhbWlseSBm
b250X2ZhbWlseSwgY29uc3QgY2hhciogbmFtZSkKK0VpbmFfQm9vbCBld2tfdmlld19mb250X2Zh
bWlseV9uYW1lX3NldChFdmFzX09iamVjdCogZXdrVmlldywgRXdrX0ZvbnRfRmFtaWx5IGZvbnRG
YW1pbHksIGNvbnN0IGNoYXIqIG5hbWUpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
TihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tW
aWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNk
LCBwcml2LCBFSU5BX0ZBTFNFKTsKIAotICAgIHN3aXRjaCAoZm9udF9mYW1pbHkpIHsKKyAgICBz
d2l0Y2ggKGZvbnRGYW1pbHkpIHsKICAgICBjYXNlIEVXS19GT05UX0ZBTUlMWV9TVEFOREFSRDoK
ICAgICAgICAgaWYgKGVpbmFfc3RyaW5nc2hhcmVfcmVwbGFjZSgmcHJpdi0+c2V0dGluZ3MuZm9u
dF9zdGFuZGFyZCwgbmFtZSkpCiAgICAgICAgICAgICBwcml2LT5wYWdlX3NldHRpbmdzLT5zZXRT
dGFuZGFyZEZvbnRGYW1pbHkoQXRvbWljU3RyaW5nOjpmcm9tVVRGOChuYW1lKSk7CkBAIC0yMjYz
LDE2ICsyMjYzLDE2IEBAIEVpbmFfQm9vbCBld2tfdmlld19mb250X2ZhbWlseV9uYW1lX3NldChF
dmFzX09iamVjdCogbywgRXdrX0ZvbnRfRmFtaWx5IGZvbnRfZmFtCiAgICAgcmV0dXJuIEVJTkFf
VFJVRTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfc3BhdGlhbF9uYXZpZ2F0aW9u
X2dldChjb25zdCBFdmFzX09iamVjdCogbykKK0VpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX3Nw
YXRpYWxfbmF2aWdhdGlvbl9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAg
RVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJ
RVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJ
RVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICByZXR1cm4g
cHJpdi0+c2V0dGluZ3Muc3BhdGlhbF9uYXZpZ2F0aW9uOwogfQogCi1FaW5hX0Jvb2wgZXdrX3Zp
ZXdfc2V0dGluZ19zcGF0aWFsX25hdmlnYXRpb25fc2V0KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jv
b2wgZW5hYmxlKQorRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfc3BhdGlhbF9uYXZpZ2F0aW9u
X3NldChFdmFzX09iamVjdCogZXdrVmlldywgRWluYV9Cb29sIGVuYWJsZSkKIHsKLSAgICBFV0tf
VklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19T
RF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFV0tfVklFV19Q
UklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIGVuYWJsZSA9ICEh
ZW5hYmxlOwogICAgIGlmIChwcml2LT5zZXR0aW5ncy5zcGF0aWFsX25hdmlnYXRpb24gIT0gZW5h
YmxlKSB7CkBAIC0yMjgyLDE2ICsyMjgyLDE2IEBAIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5n
X3NwYXRpYWxfbmF2aWdhdGlvbl9zZXQoRXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCBlbmFiCiAg
ICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfbG9j
YWxfc3RvcmFnZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCitFaW5hX0Jvb2wgZXdrX3ZpZXdf
c2V0dGluZ19sb2NhbF9zdG9yYWdlX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsK
LSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBF
V0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBF
V0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIHJl
dHVybiBwcml2LT5zZXR0aW5ncy5sb2NhbF9zdG9yYWdlOwogfQogCi1FaW5hX0Jvb2wgZXdrX3Zp
ZXdfc2V0dGluZ19sb2NhbF9zdG9yYWdlX3NldChFdmFzX09iamVjdCogbywgRWluYV9Cb29sIGVu
YWJsZSkKK0VpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2xvY2FsX3N0b3JhZ2Vfc2V0KEV2YXNf
T2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wgZW5hYmxlKQogewotICAgIEVXS19WSUVXX1NEX0dF
VF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9S
RVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09S
X1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgZW5hYmxlID0gISFlbmFibGU7CiAg
ICAgaWYgKHByaXYtPnNldHRpbmdzLmxvY2FsX3N0b3JhZ2UgIT0gZW5hYmxlKSB7CkBAIC0yMzAx
LDE2ICsyMzAxLDE2IEBAIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2xvY2FsX3N0b3JhZ2Vf
c2V0KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wgZW5hYmxlKQogICAgIHJldHVybiBFSU5BX1RS
VUU7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX3BhZ2VfY2FjaGVfZ2V0KGNvbnN0
IEV2YXNfT2JqZWN0KiBvKQorRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfcGFnZV9jYWNoZV9n
ZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
Tihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVU
VVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MucGFn
ZV9jYWNoZTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfcGFnZV9jYWNoZV9zZXQo
RXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCBlbmFibGUpCitFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0
dGluZ19wYWdlX2NhY2hlX3NldChFdmFzX09iamVjdCogZXdrVmlldywgRWluYV9Cb29sIGVuYWJs
ZSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsK
KyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsK
ICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwog
ICAgIGVuYWJsZSA9ICEhZW5hYmxlOwogICAgIGlmIChwcml2LT5zZXR0aW5ncy5wYWdlX2NhY2hl
ICE9IGVuYWJsZSkgewpAQCAtMjMyMCwyNSArMjMyMCwyNSBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdf
c2V0dGluZ19wYWdlX2NhY2hlX3NldChFdmFzX09iamVjdCogbywgRWluYV9Cb29sIGVuYWJsZSkK
ICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi1jb25zdCBjaGFyKiBld2tfdmlld19zZXR0aW5n
X2xvY2FsX3N0b3JhZ2VfZGF0YWJhc2VfcGF0aF9nZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCitj
b25zdCBjaGFyKiBld2tfdmlld19zZXR0aW5nX2xvY2FsX3N0b3JhZ2VfZGF0YWJhc2VfcGF0aF9n
ZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihvLCBzZCwgMCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3
LCBzZCwgMCk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCAwKTsK
ICAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MubG9jYWxfc3RvcmFnZV9kYXRhYmFzZV9wYXRoOwog
fQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19sb2NhbF9zdG9yYWdlX2RhdGFiYXNlX3Bh
dGhfc2V0KEV2YXNfT2JqZWN0KiBvLCBjb25zdCBjaGFyKiBwYXRoKQorRWluYV9Cb29sIGV3a192
aWV3X3NldHRpbmdfbG9jYWxfc3RvcmFnZV9kYXRhYmFzZV9wYXRoX3NldChFdmFzX09iamVjdCog
ZXdrVmlldywgY29uc3QgY2hhciogcGF0aCkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVU
VVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3
a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4o
c2QsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIGlmIChlaW5hX3N0cmluZ3NoYXJlX3JlcGxhY2Uo
JnByaXYtPnNldHRpbmdzLmxvY2FsX3N0b3JhZ2VfZGF0YWJhc2VfcGF0aCwgcGF0aCkpCiAgICAg
ICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNldExvY2FsU3RvcmFnZURhdGFiYXNlUGF0aChTdHJp
bmc6OmZyb21VVEY4KHBhdGgpKTsKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi1FaW5hX0Jv
b2wgZXdrX3ZpZXdfc2V0dGluZ19taW5pbXVtX3RpbWVyX2ludGVydmFsX3NldChFdmFzX09iamVj
dCogbywgZG91YmxlIGludGVydmFsKQorRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfbWluaW11
bV90aW1lcl9pbnRlcnZhbF9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGRvdWJsZSBpbnRlcnZh
bCkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsK
KyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsK
ICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwog
ICAgIGlmIChmYWJzKHByaXYtPnNldHRpbmdzLmRvbV90aW1lcl9pbnRlcnZhbCAtIGludGVydmFs
KSA+PSBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmVwc2lsb24oKSkgewogICAgICAgICBw
cml2LT5wYWdlX3NldHRpbmdzLT5zZXRNaW5ET01UaW1lckludGVydmFsKGludGVydmFsKTsKQEAg
LTIzNDcsMTYgKzIzNDcsMTYgQEAgRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfbWluaW11bV90
aW1lcl9pbnRlcnZhbF9zZXQoRXZhc19PYmplY3QqIG8sIGRvdWJsZSBpbnQKICAgICByZXR1cm4g
RUlOQV9UUlVFOwogfQogCi1kb3VibGUgZXdrX3ZpZXdfc2V0dGluZ19taW5pbXVtX3RpbWVyX2lu
dGVydmFsX2dldChjb25zdCBFdmFzX09iamVjdCogbykKK2RvdWJsZSBld2tfdmlld19zZXR0aW5n
X21pbmltdW1fdGltZXJfaW50ZXJ2YWxfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQog
ewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAg
IEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAg
IEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAg
cmV0dXJuIHByaXYtPnNldHRpbmdzLmRvbV90aW1lcl9pbnRlcnZhbDsKIH0KIAotRXdrX1ZpZXdf
U21hcnRfRGF0YSogZXdrX3ZpZXdfc21hcnRfZGF0YV9nZXQoY29uc3QgRXZhc19PYmplY3QqIG8p
CitFd2tfVmlld19TbWFydF9EYXRhKiBld2tfdmlld19zbWFydF9kYXRhX2dldChjb25zdCBFdmFz
X09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNk
LCAwKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAwKTsKICAg
ICByZXR1cm4gc2Q7CiB9CiAKQEAgLTI0MjgsMTAgKzI0MjgsMTAgQEAgY29uc3QgRXdrX1Njcm9s
bF9SZXF1ZXN0KiBld2tfdmlld19zY3JvbGxfcmVxdWVzdHNfZ2V0KGNvbnN0IEV3a19WaWV3X1By
aXZhdGVfRGEKICAqIEBub3RlIHRoaXMgaXMgbm90IGZvciBnZW5lcmFsIHVzZSBidXQganVzdCBm
b3Igc3ViY2xhc3NlcyB0aGF0IHdhbnQKICAqICAgICAgIHRvIGRlZmluZSB0aGVpciBvd24gYmFj
a2luZyBzdG9yZS4KICAqLwotdm9pZCBld2tfdmlld19yZXBhaW50X2FkZChFd2tfVmlld19Qcml2
YXRlX0RhdGEqIHByaXYsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5LCBFdmFzX0Nvb3JkIHcs
IEV2YXNfQ29vcmQgaCkKK3ZvaWQgZXdrX3ZpZXdfcmVwYWludF9hZGQoRXdrX1ZpZXdfUHJpdmF0
ZV9EYXRhKiBwcml2LCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwgRXZhc19Db29yZCB3aWR0
aCwgRXZhc19Db29yZCBoZWlnaHQpCiB7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4o
cHJpdik7Ci0gICAgX2V3a192aWV3X3JlcGFpbnRfYWRkKHByaXYsIHgsIHksIHcsIGgpOworICAg
IF9ld2tfdmlld19yZXBhaW50X2FkZChwcml2LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKIH0KIAog
LyoqCkBAIC0yNDU0LDExICsyNDU0LDExIEBAIHZvaWQgZXdrX3ZpZXdfbGF5b3V0X2lmX25lZWRl
ZF9yZWN1cnNpdmUoRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKiBwcml2KQogICAgIHYtPnVwZGF0ZUxh
eW91dEFuZFN0eWxlSWZOZWVkZWRSZWN1cnNpdmUoKTsKIH0KIAotdm9pZCBld2tfdmlld19zY3Jv
bGxzX3Byb2Nlc3MoRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QpCit2b2lkIGV3a192aWV3X3Njcm9s
bHNfcHJvY2VzcyhFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEpCiB7Ci0gICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk4oc2QpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVS
TihzZCwgcHJpdik7Ci0gICAgaWYgKCFzZC0+YXBpLT5zY3JvbGxzX3Byb2Nlc3Moc2QpKQorICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YSk7CisgICAgRVdLX1ZJRVdfUFJJ
Vl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdik7CisgICAgaWYgKCFzbWFydERhdGEtPmFw
aS0+c2Nyb2xsc19wcm9jZXNzKHNtYXJ0RGF0YSkpCiAgICAgICAgIEVSUigiZmFpbGVkIHRvIHBy
b2Nlc3Mgc2Nyb2xscy4iKTsKICAgICBfZXdrX3ZpZXdfc2Nyb2xsc19mbHVzaChwcml2KTsKIH0K
QEAgLTI0OTcsNzIgKzI0OTcsNzIgQEAgRXdrX1ZpZXdfUGFpbnRfQ29udGV4dCogZXdrX3ZpZXdf
cGFpbnRfY29udGV4dF9uZXcoRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKiBwcml2LAogICAgIHJldHVy
biBjdHh0OwogfQogCi12b2lkIGV3a192aWV3X3BhaW50X2NvbnRleHRfZnJlZShFd2tfVmlld19Q
YWludF9Db250ZXh0KiBjdHh0KQordm9pZCBld2tfdmlld19wYWludF9jb250ZXh0X2ZyZWUoRXdr
X1ZpZXdfUGFpbnRfQ29udGV4dCogY29udGV4dCkKIHsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTihjdHh0KTsKLSAgICBkZWxldGUgY3R4dC0+Z2M7Ci0gICAgY2Fpcm9fZGVzdHJveShj
dHh0LT5jcik7Ci0gICAgZnJlZShjdHh0KTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
Tihjb250ZXh0KTsKKyAgICBkZWxldGUgY29udGV4dC0+Z2M7CisgICAgY2Fpcm9fZGVzdHJveShj
b250ZXh0LT5jcik7CisgICAgZnJlZShjb250ZXh0KTsKIH0KIAotdm9pZCBld2tfdmlld19wYWlu
dF9jb250ZXh0X3NhdmUoRXdrX1ZpZXdfUGFpbnRfQ29udGV4dCogY3R4dCkKK3ZvaWQgZXdrX3Zp
ZXdfcGFpbnRfY29udGV4dF9zYXZlKEV3a19WaWV3X1BhaW50X0NvbnRleHQqIGNvbnRleHQpCiB7
Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oY3R4dCk7Ci0gICAgY2Fpcm9fc2F2ZShj
dHh0LT5jcik7Ci0gICAgY3R4dC0+Z2MtPnNhdmUoKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTihjb250ZXh0KTsKKyAgICBjYWlyb19zYXZlKGNvbnRleHQtPmNyKTsKKyAgICBjb250
ZXh0LT5nYy0+c2F2ZSgpOwogfQogCi12b2lkIGV3a192aWV3X3BhaW50X2NvbnRleHRfcmVzdG9y
ZShFd2tfVmlld19QYWludF9Db250ZXh0KiBjdHh0KQordm9pZCBld2tfdmlld19wYWludF9jb250
ZXh0X3Jlc3RvcmUoRXdrX1ZpZXdfUGFpbnRfQ29udGV4dCogY29udGV4dCkKIHsKLSAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTihjdHh0KTsKLSAgICBjdHh0LT5nYy0+cmVzdG9yZSgpOwot
ICAgIGNhaXJvX3Jlc3RvcmUoY3R4dC0+Y3IpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOKGNvbnRleHQpOworICAgIGNvbnRleHQtPmdjLT5yZXN0b3JlKCk7CisgICAgY2Fpcm9fcmVz
dG9yZShjb250ZXh0LT5jcik7CiB9CiAKLXZvaWQgZXdrX3ZpZXdfcGFpbnRfY29udGV4dF9jbGlw
KEV3a19WaWV3X1BhaW50X0NvbnRleHQqIGN0eHQsIGNvbnN0IEVpbmFfUmVjdGFuZ2xlKiBhcmVh
KQordm9pZCBld2tfdmlld19wYWludF9jb250ZXh0X2NsaXAoRXdrX1ZpZXdfUGFpbnRfQ29udGV4
dCogY29udGV4dCwgY29uc3QgRWluYV9SZWN0YW5nbGUqIGFyZWEpCiB7Ci0gICAgRUlOQV9TQUZF
VFlfT05fTlVMTF9SRVRVUk4oY3R4dCk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4o
Y29udGV4dCk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oYXJlYSk7Ci0gICAgY3R4
dC0+Z2MtPmNsaXAoV2ViQ29yZTo6SW50UmVjdChhcmVhLT54LCBhcmVhLT55LCBhcmVhLT53LCBh
cmVhLT5oKSk7CisgICAgY29udGV4dC0+Z2MtPmNsaXAoV2ViQ29yZTo6SW50UmVjdChhcmVhLT54
LCBhcmVhLT55LCBhcmVhLT53LCBhcmVhLT5oKSk7CiB9CiAKLXZvaWQgZXdrX3ZpZXdfcGFpbnRf
Y29udGV4dF9wYWludChFd2tfVmlld19QYWludF9Db250ZXh0KiBjdHh0LCBjb25zdCBFaW5hX1Jl
Y3RhbmdsZSogYXJlYSkKK3ZvaWQgZXdrX3ZpZXdfcGFpbnRfY29udGV4dF9wYWludChFd2tfVmll
d19QYWludF9Db250ZXh0KiBjb250ZXh0LCBjb25zdCBFaW5hX1JlY3RhbmdsZSogYXJlYSkKIHsK
LSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihjdHh0KTsKKyAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTihjb250ZXh0KTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihh
cmVhKTsKIAogICAgIFdlYkNvcmU6OkludFJlY3QgcmVjdChhcmVhLT54LCBhcmVhLT55LCBhcmVh
LT53LCBhcmVhLT5oKTsKIAotICAgIGlmIChjdHh0LT52aWV3LT5pc1RyYW5zcGFyZW50KCkpCi0g
ICAgICAgIGN0eHQtPmdjLT5jbGVhclJlY3QocmVjdCk7Ci0gICAgY3R4dC0+dmlldy0+cGFpbnQo
Y3R4dC0+Z2MsIHJlY3QpOworICAgIGlmIChjb250ZXh0LT52aWV3LT5pc1RyYW5zcGFyZW50KCkp
CisgICAgICAgIGNvbnRleHQtPmdjLT5jbGVhclJlY3QocmVjdCk7CisgICAgY29udGV4dC0+dmll
dy0+cGFpbnQoY29udGV4dC0+Z2MsIHJlY3QpOwogfQogCi12b2lkIGV3a192aWV3X3BhaW50X2Nv
bnRleHRfcGFpbnRfY29udGVudHMoRXdrX1ZpZXdfUGFpbnRfQ29udGV4dCogY3R4dCwgY29uc3Qg
RWluYV9SZWN0YW5nbGUqIGFyZWEpCit2b2lkIGV3a192aWV3X3BhaW50X2NvbnRleHRfcGFpbnRf
Y29udGVudHMoRXdrX1ZpZXdfUGFpbnRfQ29udGV4dCogY29udGV4dCwgY29uc3QgRWluYV9SZWN0
YW5nbGUqIGFyZWEpCiB7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oY3R4dCk7Cisg
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oY29udGV4dCk7CiAgICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk4oYXJlYSk7CiAKICAgICBXZWJDb3JlOjpJbnRSZWN0IHJlY3QoYXJlYS0+
eCwgYXJlYS0+eSwgYXJlYS0+dywgYXJlYS0+aCk7CiAKLSAgICBpZiAoY3R4dC0+dmlldy0+aXNU
cmFuc3BhcmVudCgpKQotICAgICAgICBjdHh0LT5nYy0+Y2xlYXJSZWN0KHJlY3QpOworICAgIGlm
IChjb250ZXh0LT52aWV3LT5pc1RyYW5zcGFyZW50KCkpCisgICAgICAgIGNvbnRleHQtPmdjLT5j
bGVhclJlY3QocmVjdCk7CiAKLSAgICBjdHh0LT52aWV3LT5wYWludENvbnRlbnRzKGN0eHQtPmdj
LCByZWN0KTsKKyAgICBjb250ZXh0LT52aWV3LT5wYWludENvbnRlbnRzKGNvbnRleHQtPmdjLCBy
ZWN0KTsKIH0KIAotdm9pZCBld2tfdmlld19wYWludF9jb250ZXh0X3NjYWxlKEV3a19WaWV3X1Bh
aW50X0NvbnRleHQqIGN0eHQsIGZsb2F0IHNjYWxlX3gsIGZsb2F0IHNjYWxlX3kpCit2b2lkIGV3
a192aWV3X3BhaW50X2NvbnRleHRfc2NhbGUoRXdrX1ZpZXdfUGFpbnRfQ29udGV4dCogY29udGV4
dCwgZmxvYXQgc2NhbGVYLCBmbG9hdCBzY2FsZVkpCiB7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk4oY3R4dCk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oY29udGV4dCk7
CiAKLSAgICBjdHh0LT5nYy0+c2NhbGUoV2ViQ29yZTo6RmxvYXRTaXplKHNjYWxlX3gsIHNjYWxl
X3kpKTsKKyAgICBjb250ZXh0LT5nYy0+c2NhbGUoV2ViQ29yZTo6RmxvYXRTaXplKHNjYWxlWCwg
c2NhbGVZKSk7CiB9CiAKLXZvaWQgZXdrX3ZpZXdfcGFpbnRfY29udGV4dF90cmFuc2xhdGUoRXdr
X1ZpZXdfUGFpbnRfQ29udGV4dCogY3R4dCwgZmxvYXQgeCwgZmxvYXQgeSkKK3ZvaWQgZXdrX3Zp
ZXdfcGFpbnRfY29udGV4dF90cmFuc2xhdGUoRXdrX1ZpZXdfUGFpbnRfQ29udGV4dCogY29udGV4
dCwgZmxvYXQgeCwgZmxvYXQgeSkKIHsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihj
dHh0KTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihjb250ZXh0KTsKIAotICAgIGN0
eHQtPmdjLT50cmFuc2xhdGUoeCwgeSk7CisgICAgY29udGV4dC0+Z2MtPnRyYW5zbGF0ZSh4LCB5
KTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3BhaW50KEV3a19WaWV3X1ByaXZhdGVfRGF0YSog
cHJpdiwgY2Fpcm9fdCogY3IsIGNvbnN0IEVpbmFfUmVjdGFuZ2xlKiBhcmVhKQpAQCAtMjYyMSwx
MCArMjYyMSwxMCBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfcGFpbnRfY29udGVudHMoRXdrX1ZpZXdf
UHJpdmF0ZV9EYXRhKiBwcml2LCBjYWlyb190KiBjciwgY29ucwogICoKICAqIEVtaXRzIHNpZ25h
bDogInJlYWR5IiB3aXRoIG5vIHBhcmFtZXRlcnMuCiAgKi8KLXZvaWQgZXdrX3ZpZXdfcmVhZHko
RXZhc19PYmplY3QqIG8pCit2b2lkIGV3a192aWV3X3JlYWR5KEV2YXNfT2JqZWN0KiBld2tWaWV3
KQogewotICAgIERCRygibz0lcCIsIG8pOwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNr
X2NhbGwobywgInJlYWR5IiwgMCk7CisgICAgREJHKCJld2tWaWV3PSVwIiwgZXdrVmlldyk7Cisg
ICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChld2tWaWV3LCAicmVhZHkiLCAwKTsK
IH0KIAogLyoqCkBAIC0yNjM1LDkgKzI2MzUsOSBAQCB2b2lkIGV3a192aWV3X3JlYWR5KEV2YXNf
T2JqZWN0KiBvKQogICogRW1pdHMgc2lnbmFsOiAiaW5wdXRtZXRob2QsY2hhbmdlZCIgd2l0aCBh
IGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIGl0J3MKICAqIGVuYWJsZWQgb3Igbm90LgogICov
Ci12b2lkIGV3a192aWV3X2lucHV0X21ldGhvZF9zdGF0ZV9zZXQoRXZhc19PYmplY3QqIG8sIEVp
bmFfQm9vbCBhY3RpdmUpCit2b2lkIGV3a192aWV3X2lucHV0X21ldGhvZF9zdGF0ZV9zZXQoRXZh
c19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCBhY3RpdmUpCiB7Ci0gICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihvLCBzZCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tW
aWV3LCBzZCk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVQoc2QsIHByaXYpOwogICAgIFdlYkNvcmU6
OkZyYW1lKiBmb2N1c2VkRnJhbWUgPSBwcml2LT5wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9j
dXNlZE9yTWFpbkZyYW1lKCk7CiAKQEAgLTI2NjQsNyArMjY2NCw3IEBAIHZvaWQgZXdrX3ZpZXdf
aW5wdXRfbWV0aG9kX3N0YXRlX3NldChFdmFzX09iamVjdCogbywgRWluYV9Cb29sIGFjdGl2ZSkK
ICAgICAgICAgfQogICAgIH0KIAotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwo
bywgImlucHV0bWV0aG9kLGNoYW5nZWQiLCAodm9pZCopYWN0aXZlKTsKKyAgICBldmFzX29iamVj
dF9zbWFydF9jYWxsYmFja19jYWxsKGV3a1ZpZXcsICJpbnB1dG1ldGhvZCxjaGFuZ2VkIiwgKHZv
aWQqKWFjdGl2ZSk7CiB9CiAKIC8qKgpAQCAtMjY3MywxMCArMjY3MywxMCBAQCB2b2lkIGV3a192
aWV3X2lucHV0X21ldGhvZF9zdGF0ZV9zZXQoRXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCBhY3Rp
dmUpCiAgKgogICogRW1pdHMgc2lnbmFsOiAidGl0bGUsY2hhbmdlZCIgd2l0aCBwb2ludGVyIHRv
IG5ldyB0aXRsZSBzdHJpbmcuCiAgKi8KLXZvaWQgZXdrX3ZpZXdfdGl0bGVfc2V0KEV2YXNfT2Jq
ZWN0KiBvLCBjb25zdCBjaGFyKiB0aXRsZSkKK3ZvaWQgZXdrX3ZpZXdfdGl0bGVfc2V0KEV2YXNf
T2JqZWN0KiBld2tWaWV3LCBjb25zdCBjaGFyKiB0aXRsZSkKIHsKLSAgICBEQkcoIm89JXAsIHRp
dGxlPSVzIiwgbywgdGl0bGUgPyB0aXRsZSA6ICIobnVsbCkiKTsKLSAgICBldmFzX29iamVjdF9z
bWFydF9jYWxsYmFja19jYWxsKG8sICJ0aXRsZSxjaGFuZ2VkIiwgKHZvaWQqKXRpdGxlKTsKKyAg
ICBEQkcoImV3a1ZpZXc9JXAsIHRpdGxlPSVzIiwgZXdrVmlldywgdGl0bGUgPyB0aXRsZSA6ICIo
bnVsbCkiKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKGV3a1ZpZXcsICJ0
aXRsZSxjaGFuZ2VkIiwgKHZvaWQqKXRpdGxlKTsKIH0KIAogLyoqCkBAIC0yNjg1LDEyICsyNjg1
LDEyIEBAIHZvaWQgZXdrX3ZpZXdfdGl0bGVfc2V0KEV2YXNfT2JqZWN0KiBvLCBjb25zdCBjaGFy
KiB0aXRsZSkKICAqCiAgKiBFbWl0cyBzaWduYWw6ICJ1cmksY2hhbmdlZCIgd2l0aCBwb2ludGVy
IHRvIHRoZSBuZXcgdXJpIHN0cmluZy4KICAqLwotdm9pZCBld2tfdmlld191cmlfY2hhbmdlZChF
dmFzX09iamVjdCogbykKK3ZvaWQgZXdrX3ZpZXdfdXJpX2NoYW5nZWQoRXZhc19PYmplY3QqIGV3
a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCk7CisgICAgRVdL
X1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCk7CiAgICAgY29uc3QgY2hhciogdXJp
ID0gZXdrX2ZyYW1lX3VyaV9nZXQoc2QtPm1haW5fZnJhbWUpOwotICAgIERCRygibz0lcCwgdXJp
PSVzIiwgbywgdXJpID8gdXJpIDogIihudWxsKSIpOwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2Nh
bGxiYWNrX2NhbGwobywgInVyaSxjaGFuZ2VkIiwgKHZvaWQqKXVyaSk7CisgICAgREJHKCJld2tW
aWV3PSVwLCB1cmk9JXMiLCBld2tWaWV3LCB1cmkgPyB1cmkgOiAiKG51bGwpIik7CisgICAgZXZh
c19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChld2tWaWV3LCAidXJpLGNoYW5nZWQiLCAodm9p
ZCopdXJpKTsKIH0KIAogLyoqCkBAIC0yNzAyLDkgKzI3MDIsOSBAQCB2b2lkIGV3a192aWV3X3Vy
aV9jaGFuZ2VkKEV2YXNfT2JqZWN0KiBvKQogICoKICAqIEVtaXRzIHNpZ25hbDogImxvYWQsZG9j
dW1lbnQsZmluaXNoZWQiIHdpdGggQHAgZnJhbWUgYXMgdGhlIHBhcmFtZXRlci4KICAqLwotdm9p
ZCBld2tfdmlld19sb2FkX2RvY3VtZW50X2ZpbmlzaGVkKEV2YXNfT2JqZWN0KiBvLCBFdmFzX09i
amVjdCogZnJhbWUpCit2b2lkIGV3a192aWV3X2xvYWRfZG9jdW1lbnRfZmluaXNoZWQoRXZhc19P
YmplY3QqIGV3a1ZpZXcsIEV2YXNfT2JqZWN0KiBmcmFtZSkKIHsKLSAgICBldmFzX29iamVjdF9z
bWFydF9jYWxsYmFja19jYWxsKG8sICJsb2FkLGRvY3VtZW50LGZpbmlzaGVkIiwgZnJhbWUpOwor
ICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdrVmlldywgImxvYWQsZG9jdW1l
bnQsZmluaXNoZWQiLCBmcmFtZSk7CiB9CiAKIC8qKgpAQCAtMjcxNSwxMCArMjcxNSwxMCBAQCB2
b2lkIGV3a192aWV3X2xvYWRfZG9jdW1lbnRfZmluaXNoZWQoRXZhc19PYmplY3QqIG8sIEV2YXNf
T2JqZWN0KiBmcmFtZSkKICAqCiAgKiBFbWl0cyBzaWduYWw6ICJsb2FkLHN0YXJ0ZWQiIHdpdGgg
bm8gcGFyYW1ldGVycy4KICAqLwotdm9pZCBld2tfdmlld19sb2FkX3N0YXJ0ZWQoRXZhc19PYmpl
Y3QqIG8pCit2b2lkIGV3a192aWV3X2xvYWRfc3RhcnRlZChFdmFzX09iamVjdCogZXdrVmlldykK
IHsKLSAgICBEQkcoIm89JXAiLCBvKTsKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19j
YWxsKG8sICJsb2FkLHN0YXJ0ZWQiLCAwKTsKKyAgICBEQkcoImV3a1ZpZXc9JXAiLCBld2tWaWV3
KTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKGV3a1ZpZXcsICJsb2FkLHN0
YXJ0ZWQiLCAwKTsKIH0KIAogLyoqCkBAIC0yNzI4LDEwICsyNzI4LDEwIEBAIHZvaWQgZXdrX3Zp
ZXdfbG9hZF9zdGFydGVkKEV2YXNfT2JqZWN0KiBvKQogICoKICAqIEVtaXRzIHNpZ25hbDogImxv
YWQsc3RhcnRlZCIgb24gbWFpbiBmcmFtZSB3aXRoIG5vIHBhcmFtZXRlcnMuCiAgKi8KLXZvaWQg
ZXdrX3ZpZXdfZnJhbWVfbWFpbl9sb2FkX3N0YXJ0ZWQoRXZhc19PYmplY3QqIG8pCit2b2lkIGV3
a192aWV3X2ZyYW1lX21haW5fbG9hZF9zdGFydGVkKEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewot
ICAgIERCRygibz0lcCIsIG8pOwotICAgIEV2YXNfT2JqZWN0KiBmcmFtZSA9IGV3a192aWV3X2Zy
YW1lX21haW5fZ2V0KG8pOworICAgIERCRygiZXdrVmlldz0lcCIsIGV3a1ZpZXcpOworICAgIEV2
YXNfT2JqZWN0KiBmcmFtZSA9IGV3a192aWV3X2ZyYW1lX21haW5fZ2V0KGV3a1ZpZXcpOwogICAg
IGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZnJhbWUsICJsb2FkLHN0YXJ0ZWQiLCAw
KTsKIH0KIApAQCAtMjc0MywxMCArMjc0MywxMCBAQCB2b2lkIGV3a192aWV3X2ZyYW1lX21haW5f
bG9hZF9zdGFydGVkKEV2YXNfT2JqZWN0KiBvKQogICoKICAqIEVtaXRzIHNpZ25hbDogImxvYWQs
cHJvdmlzaW9uYWwiIG9uIFZpZXcgd2l0aCBubyBwYXJhbWV0ZXJzLgogICovCi12b2lkIGV3a192
aWV3X2xvYWRfcHJvdmlzaW9uYWwoRXZhc19PYmplY3QqIG8pCit2b2lkIGV3a192aWV3X2xvYWRf
cHJvdmlzaW9uYWwoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgREJHKCJvPSVwIiwgbyk7
Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChvLCAibG9hZCxwcm92aXNpb25h
bCIsIDApOworICAgIERCRygiZXdrVmlldz0lcCIsIGV3a1ZpZXcpOworICAgIGV2YXNfb2JqZWN0
X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdrVmlldywgImxvYWQscHJvdmlzaW9uYWwiLCAwKTsKIH0K
IAogLyoqCkBAIC0yNzU3LDEwICsyNzU3LDEwIEBAIHZvaWQgZXdrX3ZpZXdfbG9hZF9wcm92aXNp
b25hbChFdmFzX09iamVjdCogbykKICAqCiAgKiBFbWl0cyBzaWduYWw6ICJsb2FkLG5ld3dpbmRv
dyxzaG93IiBvbiB2aWV3IHdpdGggbm8gcGFyYW1ldGVycy4KICAqLwotdm9pZCBld2tfdmlld19s
b2FkX3Nob3coRXZhc19PYmplY3QqIG8pCit2b2lkIGV3a192aWV3X2xvYWRfc2hvdyhFdmFzX09i
amVjdCogZXdrVmlldykKIHsKLSAgICBEQkcoIm89JXAiLCBvKTsKLSAgICBldmFzX29iamVjdF9z
bWFydF9jYWxsYmFja19jYWxsKG8sICJsb2FkLG5ld3dpbmRvdyxzaG93IiwgMCk7CisgICAgREJH
KCJld2tWaWV3PSVwIiwgZXdrVmlldyk7CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tf
Y2FsbChld2tWaWV3LCAibG9hZCxuZXd3aW5kb3csc2hvdyIsIDApOwogfQogCiAKQEAgLTI3NzAs
MTAgKzI3NzAsMTAgQEAgdm9pZCBld2tfdmlld19sb2FkX3Nob3coRXZhc19PYmplY3QqIG8pCiAg
KgogICogQHBhcmFtIG8gVmlldy4KICAqLwotdm9pZCBld2tfdmlld19mcmFtZV9tYWluX2NsZWFy
ZWQoRXZhc19PYmplY3QqIG8pCit2b2lkIGV3a192aWV3X2ZyYW1lX21haW5fY2xlYXJlZChFdmFz
X09iamVjdCogZXdrVmlldykKIHsKLSAgICBEQkcoIm89JXAiLCBvKTsKLSAgICBFV0tfVklFV19T
RF9HRVRfT1JfUkVUVVJOKG8sIHNkKTsKKyAgICBEQkcoImV3a1ZpZXc9JXAiLCBld2tWaWV3KTsK
KyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkKTsKICAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpLT5mbHVzaCk7CiAgICAgc2QtPmFwaS0+Zmx1c2go
c2QpOwogfQpAQCAtMjc4NiwxMCArMjc4NiwxMCBAQCB2b2lkIGV3a192aWV3X2ZyYW1lX21haW5f
Y2xlYXJlZChFdmFzX09iamVjdCogbykKICAqCiAgKiBFbWl0cyBzaWduYWw6ICJpY29uLHJlY2Vp
dmVkIiB3aXRoIG5vIHBhcmFtZXRlcnMuCiAgKi8KLXZvaWQgZXdrX3ZpZXdfZnJhbWVfbWFpbl9p
Y29uX3JlY2VpdmVkKEV2YXNfT2JqZWN0KiBvKQordm9pZCBld2tfdmlld19mcmFtZV9tYWluX2lj
b25fcmVjZWl2ZWQoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgREJHKCJvPSVwIiwgbyk7
Ci0gICAgRXZhc19PYmplY3QqIGZyYW1lID0gZXdrX3ZpZXdfZnJhbWVfbWFpbl9nZXQobyk7Cisg
ICAgREJHKCJld2tWaWV3PSVwIiwgZXdrVmlldyk7CisgICAgRXZhc19PYmplY3QqIGZyYW1lID0g
ZXdrX3ZpZXdfZnJhbWVfbWFpbl9nZXQoZXdrVmlldyk7CiAgICAgZXZhc19vYmplY3Rfc21hcnRf
Y2FsbGJhY2tfY2FsbChmcmFtZSwgImljb24scmVjZWl2ZWQiLCAwKTsKIH0KIApAQCAtMjgwMywx
MCArMjgwMywxMCBAQCB2b2lkIGV3a192aWV3X2ZyYW1lX21haW5faWNvbl9yZWNlaXZlZChFdmFz
X09iamVjdCogbykKICAqIEBub3RlIHRoZXJlIHNob3VsZCBub3QgYmUgYW55IGVycm9yIHN0dWZm
IGhlcmUsIGJ1dCB0cnlpbmcgdG8gYmUKICAqICAgICAgIGNvbXBhdGlibGUgd2l0aCBwcmV2aW91
cyBXZWJLaXQuCiAgKi8KLXZvaWQgZXdrX3ZpZXdfbG9hZF9maW5pc2hlZChFdmFzX09iamVjdCog
bywgY29uc3QgRXdrX0ZyYW1lX0xvYWRfRXJyb3IqIGVycm9yKQordm9pZCBld2tfdmlld19sb2Fk
X2ZpbmlzaGVkKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBFd2tfRnJhbWVfTG9hZF9FcnJv
ciogZXJyb3IpCiB7Ci0gICAgREJHKCJvPSVwLCBlcnJvcj0lcCIsIG8sIGVycm9yKTsKLSAgICBl
dmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKG8sICJsb2FkLGZpbmlzaGVkIiwgKHZvaWQq
KWVycm9yKTsKKyAgICBEQkcoImV3a1ZpZXc9JXAsIGVycm9yPSVwIiwgZXdrVmlldywgZXJyb3Ip
OworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdrVmlldywgImxvYWQsZmlu
aXNoZWQiLCAodm9pZCopZXJyb3IpOwogfQogCiAvKioKQEAgLTI4MTUsMTAgKzI4MTUsMTAgQEAg
dm9pZCBld2tfdmlld19sb2FkX2ZpbmlzaGVkKEV2YXNfT2JqZWN0KiBvLCBjb25zdCBFd2tfRnJh
bWVfTG9hZF9FcnJvciogZXJyb3IpCiAgKgogICogRW1pdHMgc2lnbmFsOiAibG9hZCxlcnJvciIg
d2l0aCBwb2ludGVyIHRvIEV3a19GcmFtZV9Mb2FkX0Vycm9yLgogICovCi12b2lkIGV3a192aWV3
X2xvYWRfZXJyb3IoRXZhc19PYmplY3QqIG8sIGNvbnN0IEV3a19GcmFtZV9Mb2FkX0Vycm9yKiBl
cnJvcikKK3ZvaWQgZXdrX3ZpZXdfbG9hZF9lcnJvcihFdmFzX09iamVjdCogZXdrVmlldywgY29u
c3QgRXdrX0ZyYW1lX0xvYWRfRXJyb3IqIGVycm9yKQogewotICAgIERCRygibz0lcCwgZXJyb3I9
JXAiLCBvLCBlcnJvcik7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChvLCAi
bG9hZCxlcnJvciIsICh2b2lkKillcnJvcik7CisgICAgREJHKCJld2tWaWV3PSVwLCBlcnJvcj0l
cCIsIGV3a1ZpZXcsIGVycm9yKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxs
KGV3a1ZpZXcsICJsb2FkLGVycm9yIiwgKHZvaWQqKWVycm9yKTsKIH0KIAogLyoqCkBAIC0yODI3
LDE3ICsyODI3LDE3IEBAIHZvaWQgZXdrX3ZpZXdfbG9hZF9lcnJvcihFdmFzX09iamVjdCogbywg
Y29uc3QgRXdrX0ZyYW1lX0xvYWRfRXJyb3IqIGVycm9yKQogICoKICAqIEVtaXRzIHNpZ25hbDog
ImxvYWQscHJvZ3Jlc3MiIHdpdGggcG9pbnRlciB0byBhIGRvdWJsZSBmcm9tIDAuMCB0byAxLjAu
CiAgKi8KLXZvaWQgZXdrX3ZpZXdfbG9hZF9wcm9ncmVzc19jaGFuZ2VkKEV2YXNfT2JqZWN0KiBv
KQordm9pZCBld2tfdmlld19sb2FkX3Byb2dyZXNzX2NoYW5nZWQoRXZhc19PYmplY3QqIGV3a1Zp
ZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCk7CisgICAgRVdLX1ZJ
RVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRf
T1JfUkVUVVJOKHNkLCBwcml2KTsKIAogICAgIC8vIEV2YXNfQ29vcmQgdywgaDsKICAgICBkb3Vi
bGUgcHJvZ3Jlc3MgPSBwcml2LT5wYWdlLT5wcm9ncmVzcygpLT5lc3RpbWF0ZWRQcm9ncmVzcygp
OwogCi0gICAgREJHKCJvPSVwIChwPSUwLjNmKSIsIG8sIHByb2dyZXNzKTsKKyAgICBEQkcoImV3
a1ZpZXc9JXAgKHA9JTAuM2YpIiwgZXdrVmlldywgcHJvZ3Jlc3MpOwogCi0gICAgZXZhc19vYmpl
Y3Rfc21hcnRfY2FsbGJhY2tfY2FsbChvLCAibG9hZCxwcm9ncmVzcyIsICZwcm9ncmVzcyk7Cisg
ICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChld2tWaWV3LCAibG9hZCxwcm9ncmVz
cyIsICZwcm9ncmVzcyk7CiB9CiAKIC8qKgpAQCAtMjg0OSw5ICsyODQ5LDkgQEAgdm9pZCBld2tf
dmlld19sb2FkX3Byb2dyZXNzX2NoYW5nZWQoRXZhc19PYmplY3QqIG8pCiAgKgogICogRW1pdHMg
c2lnbmFsOiAicmVzdG9yZSIgd2l0aCBmcmFtZS4KICAqLwotdm9pZCBld2tfdmlld19yZXN0b3Jl
X3N0YXRlKEV2YXNfT2JqZWN0KiBvLCBFdmFzX09iamVjdCogZnJhbWUpCit2b2lkIGV3a192aWV3
X3Jlc3RvcmVfc3RhdGUoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV2YXNfT2JqZWN0KiBmcmFtZSkK
IHsKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKG8sICJyZXN0b3JlIiwgZnJh
bWUpOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdrVmlldywgInJlc3Rv
cmUiLCBmcmFtZSk7CiB9CiAKIC8qKgpAQCAtMjg3NSwxMiArMjg3NSwxMiBAQCB2b2lkIGV3a192
aWV3X3Jlc3RvcmVfc3RhdGUoRXZhc19PYmplY3QqIG8sIEV2YXNfT2JqZWN0KiBmcmFtZSkKICAq
CiAgKiBAc2VlIGV3a193aW5kb3dfZmVhdHVyZXNfcmVmKCkuCiAgKi8KLUV2YXNfT2JqZWN0KiBl
d2tfdmlld193aW5kb3dfY3JlYXRlKEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wgamF2YXNjcmlw
dCwgY29uc3QgV2ViQ29yZTo6V2luZG93RmVhdHVyZXMqIGNvcmVGZWF0dXJlcykKK0V2YXNfT2Jq
ZWN0KiBld2tfdmlld193aW5kb3dfY3JlYXRlKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jv
b2wgamF2YXNjcmlwdCwgY29uc3QgV2ViQ29yZTo6V2luZG93RmVhdHVyZXMqIGNvcmVGZWF0dXJl
cykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAwKTsKKyAgICBFV0tf
VklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAwKTsKIAogICAgIGlmICghc2QtPmFw
aS0+d2luZG93X2NyZWF0ZSkKLSAgICAgICAgcmV0dXJuIG87CisgICAgICAgIHJldHVybiBld2tW
aWV3OwogCiAgICAgRXdrX1dpbmRvd19GZWF0dXJlcyogd2luZG93X2ZlYXR1cmVzID0gZXdrX3dp
bmRvd19mZWF0dXJlc19uZXdfZnJvbV9jb3JlKGNvcmVGZWF0dXJlcyk7CiAgICAgaWYgKCF3aW5k
b3dfZmVhdHVyZXMpCkBAIC0yOTAzLDExICsyOTAzLDExIEBAIEV2YXNfT2JqZWN0KiBld2tfdmll
d193aW5kb3dfY3JlYXRlKEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wgamF2YXNjcmlwdCwgY29u
c3QKICAqCiAgKiBAcGFyYW0gbyBWaWV3IHRvIGJlIGNsb3NlZC4KICAqLwotdm9pZCBld2tfdmll
d193aW5kb3dfY2xvc2UoRXZhc19PYmplY3QqIG8pCit2b2lkIGV3a192aWV3X3dpbmRvd19jbG9z
ZShFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJO
KG8sIHNkKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkKTsKIAot
ICAgIGV3a192aWV3X3N0b3Aobyk7CisgICAgZXdrX3ZpZXdfc3RvcChld2tWaWV3KTsKICAgICBp
ZiAoIXNkLT5hcGktPndpbmRvd19jbG9zZSkKICAgICAgICAgcmV0dXJuOwogICAgIHNkLT5hcGkt
PndpbmRvd19jbG9zZShzZCk7CkBAIC0yOTE5LDkgKzI5MTksOSBAQCB2b2lkIGV3a192aWV3X3dp
bmRvd19jbG9zZShFdmFzX09iamVjdCogbykKICAqCiAgKiBFbWl0cyBzaWduYWw6ICJsaW5rLGhv
dmVyLGluIgogICovCi12b2lkIGV3a192aWV3X21vdXNlX2xpbmtfaG92ZXJfaW4oRXZhc19PYmpl
Y3QqIG8sIHZvaWQqIGRhdGEpCit2b2lkIGV3a192aWV3X21vdXNlX2xpbmtfaG92ZXJfaW4oRXZh
c19PYmplY3QqIGV3a1ZpZXcsIHZvaWQqIGRhdGEpCiB7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRf
Y2FsbGJhY2tfY2FsbChvLCAibGluayxob3ZlcixpbiIsIGRhdGEpOworICAgIGV2YXNfb2JqZWN0
X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdrVmlldywgImxpbmssaG92ZXIsaW4iLCBkYXRhKTsKIH0K
IAogLyoqCkBAIC0yOTMwLDkgKzI5MzAsOSBAQCB2b2lkIGV3a192aWV3X21vdXNlX2xpbmtfaG92
ZXJfaW4oRXZhc19PYmplY3QqIG8sIHZvaWQqIGRhdGEpCiAgKgogICogRW1pdHMgc2lnbmFsOiAi
bGluayxob3ZlcixvdXQiCiAgKi8KLXZvaWQgZXdrX3ZpZXdfbW91c2VfbGlua19ob3Zlcl9vdXQo
RXZhc19PYmplY3QqIG8pCit2b2lkIGV3a192aWV3X21vdXNlX2xpbmtfaG92ZXJfb3V0KEV2YXNf
T2JqZWN0KiBld2tWaWV3KQogewotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwo
bywgImxpbmssaG92ZXIsb3V0IiwgMCk7CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tf
Y2FsbChld2tWaWV3LCAibGluayxob3ZlcixvdXQiLCAwKTsKIH0KIAogLyoqCkBAIC0yOTQxLDEw
ICsyOTQxLDEwIEBAIHZvaWQgZXdrX3ZpZXdfbW91c2VfbGlua19ob3Zlcl9vdXQoRXZhc19PYmpl
Y3QqIG8pCiAgKgogICogRW1pdHMgc2lnbmFsOiAidG9vbGJhcnMsdmlzaWJsZSxzZXQiIHdpdGgg
YSBwb2ludGVyIHRvIGEgYm9vbGVhbi4KICAqLwotdm9pZCBld2tfdmlld190b29sYmFyc192aXNp
YmxlX3NldChFdmFzX09iamVjdCogbywgRWluYV9Cb29sIHZpc2libGUpCit2b2lkIGV3a192aWV3
X3Rvb2xiYXJzX3Zpc2libGVfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wgdmlz
aWJsZSkKIHsKLSAgICBEQkcoIm89JXAgKHZpc2libGU9JWQpIiwgbywgISF2aXNpYmxlKTsKLSAg
ICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKG8sICJ0b29sYmFycyx2aXNpYmxlLHNl
dCIsICZ2aXNpYmxlKTsKKyAgICBEQkcoImV3a1ZpZXc9JXAgKHZpc2libGU9JWQpIiwgZXdrVmll
dywgISF2aXNpYmxlKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKGV3a1Zp
ZXcsICJ0b29sYmFycyx2aXNpYmxlLHNldCIsICZ2aXNpYmxlKTsKIH0KIAogLyoqCkBAIC0yOTU4
LDExICsyOTU4LDExIEBAIHZvaWQgZXdrX3ZpZXdfdG9vbGJhcnNfdmlzaWJsZV9zZXQoRXZhc19P
YmplY3QqIG8sIEVpbmFfQm9vbCB2aXNpYmxlKQogICoKICAqIEVtaXRzIHNpZ25hbDogInRvb2xi
YXJzLHZpc2libGUsZ2V0IiB3aXRoIGEgcG9pbnRlciB0byBhIGJvb2xlYW4uCiAgKi8KLXZvaWQg
ZXdrX3ZpZXdfdG9vbGJhcnNfdmlzaWJsZV9nZXQoRXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCog
dmlzaWJsZSkKK3ZvaWQgZXdrX3ZpZXdfdG9vbGJhcnNfdmlzaWJsZV9nZXQoRXZhc19PYmplY3Qq
IGV3a1ZpZXcsIEVpbmFfQm9vbCogdmlzaWJsZSkKIHsKLSAgICBEQkcoIiVzLCBvPSVwIiwgX19m
dW5jX18sIG8pOworICAgIERCRygiJXMsIG89JXAiLCBfX2Z1bmNfXywgZXdrVmlldyk7CiAgICAg
KnZpc2libGUgPSBFSU5BX0ZBTFNFOwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2Nh
bGwobywgInRvb2xiYXJzLHZpc2libGUsZ2V0IiwgdmlzaWJsZSk7CisgICAgZXZhc19vYmplY3Rf
c21hcnRfY2FsbGJhY2tfY2FsbChld2tWaWV3LCAidG9vbGJhcnMsdmlzaWJsZSxnZXQiLCB2aXNp
YmxlKTsKIH0KIAogLyoqCkBAIC0yOTc0LDEwICsyOTc0LDEwIEBAIHZvaWQgZXdrX3ZpZXdfdG9v
bGJhcnNfdmlzaWJsZV9nZXQoRXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCogdmlzaWJsZSkKICAq
CiAgKiBFbWl0cyBzaWduYWw6ICJzdGF0dXNiYXIsdmlzaWJsZSxzZXQiIHdpdGggYSBwb2ludGVy
IHRvIGEgYm9vbGVhbi4KICAqLwotdm9pZCBld2tfdmlld19zdGF0dXNiYXJfdmlzaWJsZV9zZXQo
RXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCB2aXNpYmxlKQordm9pZCBld2tfdmlld19zdGF0dXNi
YXJfdmlzaWJsZV9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCB2aXNpYmxlKQog
ewotICAgIERCRygibz0lcCAodmlzaWJsZT0lZCkiLCBvLCAhIXZpc2libGUpOwotICAgIGV2YXNf
b2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwobywgInN0YXR1c2Jhcix2aXNpYmxlLHNldCIsICZ2
aXNpYmxlKTsKKyAgICBEQkcoImV3a1ZpZXc9JXAgKHZpc2libGU9JWQpIiwgZXdrVmlldywgISF2
aXNpYmxlKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKGV3a1ZpZXcsICJz
dGF0dXNiYXIsdmlzaWJsZSxzZXQiLCAmdmlzaWJsZSk7CiB9CiAKIC8qKgpAQCAtMjk5MSwxMSAr
Mjk5MSwxMSBAQCB2b2lkIGV3a192aWV3X3N0YXR1c2Jhcl92aXNpYmxlX3NldChFdmFzX09iamVj
dCogbywgRWluYV9Cb29sIHZpc2libGUpCiAgKgogICogRW1pdHMgc2lnbmFsOiAic3RhdHVzYmFy
LHZpc2libGUsZ2V0IiB3aXRoIGEgcG9pbnRlciB0byBhIGJvb2xlYW4uCiAgKi8KLXZvaWQgZXdr
X3ZpZXdfc3RhdHVzYmFyX3Zpc2libGVfZ2V0KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wqIHZp
c2libGUpCit2b2lkIGV3a192aWV3X3N0YXR1c2Jhcl92aXNpYmxlX2dldChFdmFzX09iamVjdCog
ZXdrVmlldywgRWluYV9Cb29sKiB2aXNpYmxlKQogewotICAgIERCRygiJXMsIG89JXAiLCBfX2Z1
bmNfXywgbyk7CisgICAgREJHKCIlcywgbz0lcCIsIF9fZnVuY19fLCBld2tWaWV3KTsKICAgICAq
dmlzaWJsZSA9IEVJTkFfRkFMU0U7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2Fs
bChvLCAic3RhdHVzYmFyLHZpc2libGUsZ2V0IiwgdmlzaWJsZSk7CisgICAgZXZhc19vYmplY3Rf
c21hcnRfY2FsbGJhY2tfY2FsbChld2tWaWV3LCAic3RhdHVzYmFyLHZpc2libGUsZ2V0Iiwgdmlz
aWJsZSk7CiB9CiAKIC8qKgpAQCAtMzAwNywxMSArMzAwNywxMSBAQCB2b2lkIGV3a192aWV3X3N0
YXR1c2Jhcl92aXNpYmxlX2dldChFdmFzX09iamVjdCogbywgRWluYV9Cb29sKiB2aXNpYmxlKQog
ICoKICAqIEVtaXRzIHNpZ25hbDogInN0YXR1c2Jhcix0ZXh0LHNldCIgd2l0aCBhIHN0cmluZy4K
ICAqLwotdm9pZCBld2tfdmlld19zdGF0dXNiYXJfdGV4dF9zZXQoRXZhc19PYmplY3QqIG8sIGNv
bnN0IGNoYXIqIHRleHQpCit2b2lkIGV3a192aWV3X3N0YXR1c2Jhcl90ZXh0X3NldChFdmFzX09i
amVjdCogZXdrVmlldywgY29uc3QgY2hhciogdGV4dCkKIHsKLSAgICBEQkcoIm89JXAgKHRleHQ9
JXMpIiwgbywgdGV4dCk7CisgICAgREJHKCJld2tWaWV3PSVwICh0ZXh0PSVzKSIsIGV3a1ZpZXcs
IHRleHQpOwogICAgIElORigic3RhdHVzIGJhciB0ZXh0IHNldDogJXMiLCB0ZXh0KTsKLSAgICBl
dmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKG8sICJzdGF0dXNiYXIsdGV4dCxzZXQiLCAo
dm9pZCopdGV4dCk7CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChld2tWaWV3
LCAic3RhdHVzYmFyLHRleHQsc2V0IiwgKHZvaWQqKXRleHQpOwogfQogCiAvKioKQEAgLTMwMjMs
MTAgKzMwMjMsMTAgQEAgdm9pZCBld2tfdmlld19zdGF0dXNiYXJfdGV4dF9zZXQoRXZhc19PYmpl
Y3QqIG8sIGNvbnN0IGNoYXIqIHRleHQpCiAgKgogICogRW1pdHMgc2lnbmFsOiAic2Nyb2xsYmFy
cyx2aXNpYmxlLHNldCIgd2l0aCBhIHBvaW50ZXIgdG8gYSBib29sZWFuLgogICovCi12b2lkIGV3
a192aWV3X3Njcm9sbGJhcnNfdmlzaWJsZV9zZXQoRXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCB2
aXNpYmxlKQordm9pZCBld2tfdmlld19zY3JvbGxiYXJzX3Zpc2libGVfc2V0KEV2YXNfT2JqZWN0
KiBld2tWaWV3LCBFaW5hX0Jvb2wgdmlzaWJsZSkKIHsKLSAgICBEQkcoIm89JXAgKHZpc2libGU9
JWQpIiwgbywgISF2aXNpYmxlKTsKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxs
KG8sICJzY3JvbGxiYXJzLHZpc2libGUsc2V0IiwgJnZpc2libGUpOworICAgIERCRygiZXdrVmll
dz0lcCAodmlzaWJsZT0lZCkiLCBld2tWaWV3LCAhIXZpc2libGUpOworICAgIGV2YXNfb2JqZWN0
X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdrVmlldywgInNjcm9sbGJhcnMsdmlzaWJsZSxzZXQiLCAm
dmlzaWJsZSk7CiB9CiAKIC8qKgpAQCAtMzA0MCwxMSArMzA0MCwxMSBAQCB2b2lkIGV3a192aWV3
X3Njcm9sbGJhcnNfdmlzaWJsZV9zZXQoRXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCB2aXNpYmxl
KQogICoKICAqIEVtaXRzIHNpZ25hbDogInNjcm9sbGJhcnMsdmlzaWJsZSxnZXQiIHdpdGggYSBw
b2ludGVyIHRvIGEgYm9vbGVhbi4KICAqLwotdm9pZCBld2tfdmlld19zY3JvbGxiYXJzX3Zpc2li
bGVfZ2V0KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wqIHZpc2libGUpCit2b2lkIGV3a192aWV3
X3Njcm9sbGJhcnNfdmlzaWJsZV9nZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCog
dmlzaWJsZSkKIHsKLSAgICBEQkcoIiVzLCBvPSVwIiwgX19mdW5jX18sIG8pOworICAgIERCRygi
JXMsIG89JXAiLCBfX2Z1bmNfXywgZXdrVmlldyk7CiAgICAgKnZpc2libGUgPSBFSU5BX0ZBTFNF
OwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwobywgInNjcm9sbGJhcnMsdmlz
aWJsZSxnZXQiLCB2aXNpYmxlKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxs
KGV3a1ZpZXcsICJzY3JvbGxiYXJzLHZpc2libGUsZ2V0IiwgdmlzaWJsZSk7CiB9CiAKIC8qKgpA
QCAtMzA1NiwxMCArMzA1NiwxMCBAQCB2b2lkIGV3a192aWV3X3Njcm9sbGJhcnNfdmlzaWJsZV9n
ZXQoRXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCogdmlzaWJsZSkKICAqCiAgKiBFbWl0cyBzaWdu
YWw6ICJtZW51YmFyLHZpc2libGUsc2V0IiB3aXRoIGEgcG9pbnRlciB0byBhIGJvb2xlYW4uCiAg
Ki8KLXZvaWQgZXdrX3ZpZXdfbWVudWJhcl92aXNpYmxlX3NldChFdmFzX09iamVjdCogbywgRWlu
YV9Cb29sIHZpc2libGUpCit2b2lkIGV3a192aWV3X21lbnViYXJfdmlzaWJsZV9zZXQoRXZhc19P
YmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCB2aXNpYmxlKQogewotICAgIERCRygibz0lcCAodmlz
aWJsZT0lZCkiLCBvLCAhIXZpc2libGUpOwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNr
X2NhbGwobywgIm1lbnViYXIsdmlzaWJsZSxzZXQiLCAmdmlzaWJsZSk7CisgICAgREJHKCJld2tW
aWV3PSVwICh2aXNpYmxlPSVkKSIsIGV3a1ZpZXcsICEhdmlzaWJsZSk7CisgICAgZXZhc19vYmpl
Y3Rfc21hcnRfY2FsbGJhY2tfY2FsbChld2tWaWV3LCAibWVudWJhcix2aXNpYmxlLHNldCIsICZ2
aXNpYmxlKTsKIH0KIAogLyoqCkBAIC0zMDczLDExICszMDczLDExIEBAIHZvaWQgZXdrX3ZpZXdf
bWVudWJhcl92aXNpYmxlX3NldChFdmFzX09iamVjdCogbywgRWluYV9Cb29sIHZpc2libGUpCiAg
KgogICogRW1pdHMgc2lnbmFsOiAibWVudWJhcix2aXNpYmxlLGdldCIgd2l0aCBhIHBvaW50ZXIg
dG8gYSBib29sZWFuLgogICovCi12b2lkIGV3a192aWV3X21lbnViYXJfdmlzaWJsZV9nZXQoRXZh
c19PYmplY3QqIG8sIEVpbmFfQm9vbCogdmlzaWJsZSkKK3ZvaWQgZXdrX3ZpZXdfbWVudWJhcl92
aXNpYmxlX2dldChFdmFzX09iamVjdCogZXdrVmlldywgRWluYV9Cb29sKiB2aXNpYmxlKQogewot
ICAgIERCRygiJXMsIG89JXAiLCBfX2Z1bmNfXywgbyk7CisgICAgREJHKCIlcywgbz0lcCIsIF9f
ZnVuY19fLCBld2tWaWV3KTsKICAgICAqdmlzaWJsZSA9IEVJTkFfRkFMU0U7Ci0gICAgZXZhc19v
YmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChvLCAibWVudWJhcix2aXNpYmxlLGdldCIsIHZpc2li
bGUpOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdrVmlldywgIm1lbnVi
YXIsdmlzaWJsZSxnZXQiLCB2aXNpYmxlKTsKIH0KIAogLyoqCkBAIC0zMDkwLDEwICszMDkwLDEw
IEBAIHZvaWQgZXdrX3ZpZXdfbWVudWJhcl92aXNpYmxlX2dldChFdmFzX09iamVjdCogbywgRWlu
YV9Cb29sKiB2aXNpYmxlKQogICogRW1pdHMgc2lnbmFsOiAidG9vbHRpcCx0ZXh0LHNldCIgd2l0
aCBhIHN0cmluZy4gSWYgdG9vbHRpcCBtdXN0IGJlIGFjdHVhbGx5CiAgKiByZW1vdmVkLCB0ZXh0
IHdpbGwgYmUgMCBvciAnXDAnCiAgKi8KLXZvaWQgZXdrX3ZpZXdfdG9vbHRpcF90ZXh0X3NldChF
dmFzX09iamVjdCogbywgY29uc3QgY2hhciogdGV4dCkKK3ZvaWQgZXdrX3ZpZXdfdG9vbHRpcF90
ZXh0X3NldChFdmFzX09iamVjdCogZXdrVmlldywgY29uc3QgY2hhciogdGV4dCkKIHsKLSAgICBE
QkcoIm89JXAgdGV4dD0lcyIsIG8sIHRleHQpOwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxi
YWNrX2NhbGwobywgInRvb2x0aXAsdGV4dCxzZXQiLCAodm9pZCopdGV4dCk7CisgICAgREJHKCJl
d2tWaWV3PSVwIHRleHQ9JXMiLCBld2tWaWV3LCB0ZXh0KTsKKyAgICBldmFzX29iamVjdF9zbWFy
dF9jYWxsYmFja19jYWxsKGV3a1ZpZXcsICJ0b29sdGlwLHRleHQsc2V0IiwgKHZvaWQqKXRleHQp
OwogfQogCiAvKioKQEAgLTMxMDUsMTkgKzMxMDUsMTkgQEAgdm9pZCBld2tfdmlld190b29sdGlw
X3RleHRfc2V0KEV2YXNfT2JqZWN0KiBvLCBjb25zdCBjaGFyKiB0ZXh0KQogICogQHNvdXJjZUlE
IFNvdXJjZSBpZC4KICAqCiAgKi8KLXZvaWQgZXdrX3ZpZXdfYWRkX2NvbnNvbGVfbWVzc2FnZShF
dmFzX09iamVjdCogbywgY29uc3QgY2hhciogbWVzc2FnZSwgdW5zaWduZWQgaW50IGxpbmVOdW1i
ZXIsIGNvbnN0IGNoYXIqIHNvdXJjZUlEKQordm9pZCBld2tfdmlld19hZGRfY29uc29sZV9tZXNz
YWdlKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBjaGFyKiBtZXNzYWdlLCB1bnNpZ25lZCBp
bnQgbGluZU51bWJlciwgY29uc3QgY2hhciogc291cmNlSUQpCiB7Ci0gICAgREJHKCJvPSVwIG1l
c3NhZ2U9JXMgbGluZU51bWJlcj0ldSBzb3VyY2VJRD0lcyIsIG8sIG1lc3NhZ2UsIGxpbmVOdW1i
ZXIsIHNvdXJjZUlEKTsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkKTsKKyAg
ICBEQkcoImV3a1ZpZXc9JXAgbWVzc2FnZT0lcyBsaW5lTnVtYmVyPSV1IHNvdXJjZUlEPSVzIiwg
ZXdrVmlldywgbWVzc2FnZSwgbGluZU51bWJlciwgc291cmNlSUQpOworICAgIEVXS19WSUVXX1NE
X0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOKHNkLT5hcGkpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGktPmFk
ZF9jb25zb2xlX21lc3NhZ2UpOwogICAgIHNkLT5hcGktPmFkZF9jb25zb2xlX21lc3NhZ2Uoc2Qs
IG1lc3NhZ2UsIGxpbmVOdW1iZXIsIHNvdXJjZUlEKTsKIH0KIAotYm9vbCBld2tfdmlld19mb2N1
c19jYW5fY3ljbGUoRXZhc19PYmplY3QqIG8sIEV3a19Gb2N1c19EaXJlY3Rpb24gZGlyZWN0aW9u
KQorYm9vbCBld2tfdmlld19mb2N1c19jYW5fY3ljbGUoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV3
a19Gb2N1c19EaXJlY3Rpb24gZGlyZWN0aW9uKQogewotICAgIERCRygibz0lcCBkaXJlY3Rpb249
JWQiLCBvLCBkaXJlY3Rpb24pOwotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2Qs
IGZhbHNlKTsKKyAgICBEQkcoImV3a1ZpZXc9JXAgZGlyZWN0aW9uPSVkIiwgZXdrVmlldywgZGly
ZWN0aW9uKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBmYWxz
ZSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5hcGksIGZhbHNlKTsK
IAogICAgIGlmICghc2QtPmFwaS0+Zm9jdXNfY2FuX2N5Y2xlKQpAQCAtMzEyNiwxMCArMzEyNiwx
MCBAQCBib29sIGV3a192aWV3X2ZvY3VzX2Nhbl9jeWNsZShFdmFzX09iamVjdCogbywgRXdrX0Zv
Y3VzX0RpcmVjdGlvbiBkaXJlY3Rpb24pCiAgICAgcmV0dXJuIHNkLT5hcGktPmZvY3VzX2Nhbl9j
eWNsZShzZCwgZGlyZWN0aW9uKTsKIH0KIAotdm9pZCBld2tfdmlld19ydW5famF2YXNjcmlwdF9h
bGVydChFdmFzX09iamVjdCogbywgRXZhc19PYmplY3QqIGZyYW1lLCBjb25zdCBjaGFyKiBtZXNz
YWdlKQordm9pZCBld2tfdmlld19ydW5famF2YXNjcmlwdF9hbGVydChFdmFzX09iamVjdCogZXdr
VmlldywgRXZhc19PYmplY3QqIGZyYW1lLCBjb25zdCBjaGFyKiBtZXNzYWdlKQogewotICAgIERC
Rygibz0lcCBmcmFtZT0lcCBtZXNzYWdlPSVzIiwgbywgZnJhbWUsIG1lc3NhZ2UpOwotICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QpOworICAgIERCRygiZXdrVmlldz0lcCBmcmFt
ZT0lcCBtZXNzYWdlPSVzIiwgZXdrVmlldywgZnJhbWUsIG1lc3NhZ2UpOworICAgIEVXS19WSUVX
X1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOKHNkLT5hcGkpOwogCiAgICAgaWYgKCFzZC0+YXBpLT5ydW5famF2YXNjcmlwdF9hbGVy
dCkKQEAgLTMxMzgsMTAgKzMxMzgsMTAgQEAgdm9pZCBld2tfdmlld19ydW5famF2YXNjcmlwdF9h
bGVydChFdmFzX09iamVjdCogbywgRXZhc19PYmplY3QqIGZyYW1lLCBjb25zdCBjaGEKICAgICBz
ZC0+YXBpLT5ydW5famF2YXNjcmlwdF9hbGVydChzZCwgZnJhbWUsIG1lc3NhZ2UpOwogfQogCi1F
aW5hX0Jvb2wgZXdrX3ZpZXdfcnVuX2phdmFzY3JpcHRfY29uZmlybShFdmFzX09iamVjdCogbywg
RXZhc19PYmplY3QqIGZyYW1lLCBjb25zdCBjaGFyKiBtZXNzYWdlKQorRWluYV9Cb29sIGV3a192
aWV3X3J1bl9qYXZhc2NyaXB0X2NvbmZpcm0oRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV2YXNfT2Jq
ZWN0KiBmcmFtZSwgY29uc3QgY2hhciogbWVzc2FnZSkKIHsKLSAgICBEQkcoIm89JXAgZnJhbWU9
JXAgbWVzc2FnZT0lcyIsIG8sIGZyYW1lLCBtZXNzYWdlKTsKLSAgICBFV0tfVklFV19TRF9HRVRf
T1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBEQkcoImV3a1ZpZXc9JXAgZnJhbWU9
JXAgbWVzc2FnZT0lcyIsIGV3a1ZpZXcsIGZyYW1lLCBtZXNzYWdlKTsKKyAgICBFV0tfVklFV19T
RF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmFwaSwgRUlOQV9GQUxTRSk7CiAKICAgICBpZiAoIXNk
LT5hcGktPnJ1bl9qYXZhc2NyaXB0X2NvbmZpcm0pCkBAIC0zMTUwLDEwICszMTUwLDEwIEBAIEVp
bmFfQm9vbCBld2tfdmlld19ydW5famF2YXNjcmlwdF9jb25maXJtKEV2YXNfT2JqZWN0KiBvLCBF
dmFzX09iamVjdCogZnJhbWUsIGNvCiAgICAgcmV0dXJuIHNkLT5hcGktPnJ1bl9qYXZhc2NyaXB0
X2NvbmZpcm0oc2QsIGZyYW1lLCBtZXNzYWdlKTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3J1
bl9qYXZhc2NyaXB0X3Byb21wdChFdmFzX09iamVjdCogbywgRXZhc19PYmplY3QqIGZyYW1lLCBj
b25zdCBjaGFyKiBtZXNzYWdlLCBjb25zdCBjaGFyKiBkZWZhdWx0VmFsdWUsIGNoYXIqKiB2YWx1
ZSkKK0VpbmFfQm9vbCBld2tfdmlld19ydW5famF2YXNjcmlwdF9wcm9tcHQoRXZhc19PYmplY3Qq
IGV3a1ZpZXcsIEV2YXNfT2JqZWN0KiBmcmFtZSwgY29uc3QgY2hhciogbWVzc2FnZSwgY29uc3Qg
Y2hhciogZGVmYXVsdFZhbHVlLCBjaGFyKiogdmFsdWUpCiB7Ci0gICAgREJHKCJvPSVwIGZyYW1l
PSVwIG1lc3NhZ2U9JXMiLCBvLCBmcmFtZSwgbWVzc2FnZSk7Ci0gICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgREJHKCJld2tWaWV3PSVwIGZyYW1l
PSVwIG1lc3NhZ2U9JXMiLCBld2tWaWV3LCBmcmFtZSwgbWVzc2FnZSk7CisgICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZF
VFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5hcGksIEVJTkFfRkFMU0UpOwogCiAgICAgaWYgKCFz
ZC0+YXBpLT5ydW5famF2YXNjcmlwdF9wcm9tcHQpCkBAIC0zMTczLDEwICszMTczLDEwIEBAIEVp
bmFfQm9vbCBld2tfdmlld19ydW5famF2YXNjcmlwdF9wcm9tcHQoRXZhc19PYmplY3QqIG8sIEV2
YXNfT2JqZWN0KiBmcmFtZSwgY29uCiAgKgogICogQHJldHVybiBAYyBFSU5BX1RSVUUgaWYgc2Ny
aXB0IHNob3VsZCBiZSBzdG9wcGVkOyBAYyBFSU5BX0ZBTFNFIG90aGVyd2lzZQogICovCi1FaW5h
X0Jvb2wgZXdrX3ZpZXdfc2hvdWxkX2ludGVycnVwdF9qYXZhc2NyaXB0KEV2YXNfT2JqZWN0KiBv
KQorRWluYV9Cb29sIGV3a192aWV3X3Nob3VsZF9pbnRlcnJ1cHRfamF2YXNjcmlwdChFdmFzX09i
amVjdCogZXdrVmlldykKIHsKLSAgICBEQkcoIm89JXAiLCBvKTsKLSAgICBFV0tfVklFV19TRF9H
RVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBEQkcoImV3a1ZpZXc9JXAiLCBl
d2tWaWV3KTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5B
X0ZBTFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmFwaSwgRUlO
QV9GQUxTRSk7CiAKICAgICBpZiAoIXNkLT5hcGktPnNob3VsZF9pbnRlcnJ1cHRfamF2YXNjcmlw
dCkKQEAgLTMxOTksMTYgKzMxOTksMTYgQEAgRWluYV9Cb29sIGV3a192aWV3X3Nob3VsZF9pbnRl
cnJ1cHRfamF2YXNjcmlwdChFdmFzX09iamVjdCogbykKICAqIEBwYXJhbSBleHBlY3RlZF9zaXpl
IFRoZSBleHBlY3RlZCBzaXplIG9mIHRoaXMgZGF0YWJhc2UgaW4gb3JkZXIgdG8gZnVsZmlsbAog
ICogc2l0ZSdzIHJlcXVpcmVtZW50LgogICovCi11aW50NjRfdCBld2tfdmlld19leGNlZWRlZF9k
YXRhYmFzZV9xdW90YShFdmFzX09iamVjdCogbywgRXZhc19PYmplY3QqIGZyYW1lLCBjb25zdCBj
aGFyKiBkYXRhYmFzZU5hbWUsIHVpbnQ2NF90IGN1cnJlbnRfc2l6ZSwgdWludDY0X3QgZXhwZWN0
ZWRfc2l6ZSkKK3VpbnQ2NF90IGV3a192aWV3X2V4Y2VlZGVkX2RhdGFiYXNlX3F1b3RhKEV2YXNf
T2JqZWN0KiBld2tWaWV3LCBFdmFzX09iamVjdCogZnJhbWUsIGNvbnN0IGNoYXIqIGRhdGFiYXNl
TmFtZSwgdWludDY0X3QgY3VycmVudFNpemUsIHVpbnQ2NF90IGV4cGVjdGVkU2l6ZSkKIHsKLSAg
ICBEQkcoIm89JXAiLCBvKTsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAw
KTsKKyAgICBEQkcoImV3a1ZpZXc9JXAiLCBld2tWaWV3KTsKKyAgICBFV0tfVklFV19TRF9HRVRf
T1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAwKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
Tl9WQUwoc2QtPmFwaSwgMCk7CiAgICAgaWYgKCFzZC0+YXBpLT5leGNlZWRlZF9kYXRhYmFzZV9x
dW90YSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBJTkYoImN1cnJlbnRfc2l6ZT0lIiBQUkl1
NjQgIiBleHBlY3RlZF9zaXplPSUiIFBSSXU2NCwgY3VycmVudF9zaXplLCBleHBlY3RlZF9zaXpl
KTsKLSAgICByZXR1cm4gc2QtPmFwaS0+ZXhjZWVkZWRfZGF0YWJhc2VfcXVvdGEoc2QsIGZyYW1l
LCBkYXRhYmFzZU5hbWUsIGN1cnJlbnRfc2l6ZSwgZXhwZWN0ZWRfc2l6ZSk7CisgICAgSU5GKCJj
dXJyZW50X3NpemU9JSIgUFJJdTY0ICIgZXhwZWN0ZWRfc2l6ZT0lIiBQUkl1NjQsIGN1cnJlbnRT
aXplLCBleHBlY3RlZFNpemUpOworICAgIHJldHVybiBzZC0+YXBpLT5leGNlZWRlZF9kYXRhYmFz
ZV9xdW90YShzZCwgZnJhbWUsIGRhdGFiYXNlTmFtZSwgY3VycmVudFNpemUsIGV4cGVjdGVkU2l6
ZSk7CiB9CiAKIC8qKgpAQCAtMzIyNCwyOCArMzIyNCwyOCBAQCB1aW50NjRfdCBld2tfdmlld19l
eGNlZWRlZF9kYXRhYmFzZV9xdW90YShFdmFzX09iamVjdCogbywgRXZhc19PYmplY3QqIGZyYW1l
LCBjbwogICoKICAqIEByZXR1cm4gQEVJTkFfRkFMU0UgaWYgdXNlciBjYW5jZWxlZCBmaWxlIHNl
bGVjdGlvbjsgQEVJTkFfVFJVRSBpZiBjb25maXJtZWQuCiAgKi8KLUVpbmFfQm9vbCBld2tfdmll
d19ydW5fb3Blbl9wYW5lbChFdmFzX09iamVjdCogbywgRXZhc19PYmplY3QqIGZyYW1lLCBFaW5h
X0Jvb2wgYWxsb3dzX211bHRpcGxlX2ZpbGVzLCBjb25zdCBjaGFyKiBhY2NlcHRfdHlwZXMsIEVp
bmFfTGlzdCoqIHNlbGVjdGVkX2ZpbGVuYW1lcykKK0VpbmFfQm9vbCBld2tfdmlld19ydW5fb3Bl
bl9wYW5lbChFdmFzX09iamVjdCogZXdrVmlldywgRXZhc19PYmplY3QqIGZyYW1lLCBFaW5hX0Jv
b2wgYWxsb3dzTXVsdGlwbGVGaWxlcywgY29uc3QgY2hhciogYWNjZXB0VHlwZXMsIEVpbmFfTGlz
dCoqIHNlbGVjdGVkRmlsZW5hbWVzKQogewotICAgIERCRygibz0lcCBmcmFtZT0lcCBhbGxvd3Nf
bXVsdGlwbGVfZmlsZXM9JWQiLCBvLCBmcmFtZSwgYWxsb3dzX211bHRpcGxlX2ZpbGVzKTsKLSAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBEQkco
ImV3a1ZpZXc9JXAgZnJhbWU9JXAgYWxsb3dzX211bHRpcGxlX2ZpbGVzPSVkIiwgZXdrVmlldywg
ZnJhbWUsIGFsbG93c011bHRpcGxlRmlsZXMpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRV
Uk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOX1ZBTChzZC0+YXBpLCBFSU5BX0ZBTFNFKTsKICAgICBFaW5hX0Jvb2wgY29uZmlybTsKIAog
ICAgIGlmICghc2QtPmFwaS0+cnVuX29wZW5fcGFuZWwpCiAgICAgICAgIHJldHVybiBFSU5BX0ZB
TFNFOwogCi0gICAgKnNlbGVjdGVkX2ZpbGVuYW1lcyA9IDA7CisgICAgKnNlbGVjdGVkRmlsZW5h
bWVzID0gMDsKIAotICAgIGNvbmZpcm0gPSBzZC0+YXBpLT5ydW5fb3Blbl9wYW5lbChzZCwgZnJh
bWUsIGFsbG93c19tdWx0aXBsZV9maWxlcywgYWNjZXB0X3R5cGVzLCBzZWxlY3RlZF9maWxlbmFt
ZXMpOwotICAgIGlmICghY29uZmlybSAmJiAqc2VsZWN0ZWRfZmlsZW5hbWVzKQorICAgIGNvbmZp
cm0gPSBzZC0+YXBpLT5ydW5fb3Blbl9wYW5lbChzZCwgZnJhbWUsIGFsbG93c011bHRpcGxlRmls
ZXMsIGFjY2VwdFR5cGVzLCBzZWxlY3RlZEZpbGVuYW1lcyk7CisgICAgaWYgKCFjb25maXJtICYm
ICpzZWxlY3RlZEZpbGVuYW1lcykKICAgICAgICAgRVJSKCJDYW5jZWxlZCBmaWxlIHNlbGVjdGlv
biwgYnV0IHNlbGVjdGVkIGZpbGVuYW1lcyAhPSAwLiBGcmVlIG5hbWVzIGJlZm9yZSByZXR1cm4u
Iik7CiAgICAgcmV0dXJuIGNvbmZpcm07CiB9CiAKLXZvaWQgZXdrX3ZpZXdfcmVwYWludChFdmFz
X09iamVjdCogbywgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHksIEV2YXNfQ29vcmQgdywgRXZh
c19Db29yZCBoKQordm9pZCBld2tfdmlld19yZXBhaW50KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBF
dmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwgRXZhc19Db29yZCB3aWR0aCwgRXZhc19Db29yZCBo
ZWlnaHQpCiB7Ci0gICAgREJHKCJvPSVwLCByZWdpb249JWQsJWQgKyAlZHglZCIsIG8sIHgsIHks
IHcsIGgpOwotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QpOworICAgIERCRygi
ZXdrVmlldz0lcCwgcmVnaW9uPSVkLCVkICsgJWR4JWQiLCBld2tWaWV3LCB4LCB5LCB3aWR0aCwg
aGVpZ2h0KTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkKTsKICAg
ICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYpOwogCiAgICAgaWYgKCFwcml2
LT5tYWluX2ZyYW1lLT5jb250ZW50UmVuZGVyZXIoKSkgewpAQCAtMzI1MywzMSArMzI1MywzMSBA
QCB2b2lkIGV3a192aWV3X3JlcGFpbnQoRXZhc19PYmplY3QqIG8sIEV2YXNfQ29vcmQgeCwgRXZh
c19Db29yZCB5LCBFdmFzX0Nvb3JkIHcsCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBf
ZXdrX3ZpZXdfcmVwYWludF9hZGQocHJpdiwgeCwgeSwgdywgaCk7CisgICAgX2V3a192aWV3X3Jl
cGFpbnRfYWRkKHByaXYsIHgsIHksIHdpZHRoLCBoZWlnaHQpOwogICAgIF9ld2tfdmlld19zbWFy
dF9jaGFuZ2VkKHNkKTsKIH0KIAotdm9pZCBld2tfdmlld19zY3JvbGwoRXZhc19PYmplY3QqIG8s
IEV2YXNfQ29vcmQgZHgsIEV2YXNfQ29vcmQgZHksIEV2YXNfQ29vcmQgc3gsIEV2YXNfQ29vcmQg
c3ksIEV2YXNfQ29vcmQgc3csIEV2YXNfQ29vcmQgc2gsIEV2YXNfQ29vcmQgY3gsIEV2YXNfQ29v
cmQgY3ksIEV2YXNfQ29vcmQgY3csIEV2YXNfQ29vcmQgY2gsIEVpbmFfQm9vbCBtYWluX2ZyYW1l
KQordm9pZCBld2tfdmlld19zY3JvbGwoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV2YXNfQ29vcmQg
ZHgsIEV2YXNfQ29vcmQgZHksIEV2YXNfQ29vcmQgc2Nyb2xsWCwgRXZhc19Db29yZCBzY3JvbGxZ
LCBFdmFzX0Nvb3JkIHNjcm9sbFdpZHRoLCBFdmFzX0Nvb3JkIHNjcm9sbEhlaWdodCwgRXZhc19D
b29yZCBjZW50ZXJYLCBFdmFzX0Nvb3JkIGNlbnRlclksIEV2YXNfQ29vcmQgY2VudGVyV2lkdGgs
IEV2YXNfQ29vcmQgY2VudGVySGVpZ2h0LCBFaW5hX0Jvb2wgbWFpbkZyYW1lKQogewotICAgIERC
Rygibz0lcCwgZGVsdGE6ICVkLCVkLCBzY3JvbGw6ICVkLCVkKyVkeCVkLCBjbGlwOiAlZCwlZCsl
ZHglZCIsCi0gICAgICAgIG8sIGR4LCBkeSwgc3gsIHN5LCBzdywgc2gsIGN4LCBjeSwgY3csIGNo
KTsKKyAgICBEQkcoImV3a1ZpZXc9JXAsIGRlbHRhOiAlZCwlZCwgc2Nyb2xsOiAlZCwlZCslZHgl
ZCwgY2xpcDogJWQsJWQrJWR4JWQiLAorICAgICAgICBld2tWaWV3LCBkeCwgZHksIHNjcm9sbFgs
IHNjcm9sbFksIHNjcm9sbFdpZHRoLCBzY3JvbGxIZWlnaHQsIGNlbnRlclgsIGNlbnRlclksIGNl
bnRlcldpZHRoLCBjZW50ZXJIZWlnaHQpOwogCi0gICAgaWYgKChzeCAhPSBjeCkgfHwgKHN5ICE9
IGN5KSB8fCAoc3cgIT0gY3cpIHx8IChzaCAhPSBjaCkpCisgICAgaWYgKChzY3JvbGxYICE9IGNl
bnRlclgpIHx8IChzY3JvbGxZICE9IGNlbnRlclkpIHx8IChzY3JvbGxXaWR0aCAhPSBjZW50ZXJX
aWR0aCkgfHwgKHNjcm9sbEhlaWdodCAhPSBjZW50ZXJIZWlnaHQpKQogICAgICAgICBXUk4oInNj
cm9sbCByZWdpb24gYW5kIGNsaXAgYXJlIGRpZmZlcmVudCEgJWQsJWQrJWR4JWQgYW5kICVkLCVk
KyVkeCVkIiwKLSAgICAgICAgICAgIHN4LCBzeSwgc3csIHNoLCBjeCwgY3ksIGN3LCBjaCk7Cisg
ICAgICAgICAgICBzY3JvbGxYLCBzY3JvbGxZLCBzY3JvbGxXaWR0aCwgc2Nyb2xsSGVpZ2h0LCBj
ZW50ZXJYLCBjZW50ZXJZLCBjZW50ZXJXaWR0aCwgY2VudGVySGVpZ2h0KTsKIAotICAgIEVXS19W
SUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRV
Uk4oZXdrVmlldywgc2QpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJp
dik7CiAgICAgRUlOQV9TQUZFVFlfT05fVFJVRV9SRVRVUk4oIWR4ICYmICFkeSk7CiAKLSAgICBf
ZXdrX3ZpZXdfc2Nyb2xsX2FkZChwcml2LCBkeCwgZHksIHN4LCBzeSwgc3csIHNoLCBtYWluX2Zy
YW1lKTsKKyAgICBfZXdrX3ZpZXdfc2Nyb2xsX2FkZChwcml2LCBkeCwgZHksIHNjcm9sbFgsIHNj
cm9sbFksIHNjcm9sbFdpZHRoLCBzY3JvbGxIZWlnaHQsIG1haW5GcmFtZSk7CiAKICAgICBfZXdr
X3ZpZXdfc21hcnRfY2hhbmdlZChzZCk7CiB9CiAKLVdlYkNvcmU6OlBhZ2UqIGV3a192aWV3X2Nv
cmVfcGFnZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCitXZWJDb3JlOjpQYWdlKiBld2tfdmll
d19jb3JlX3BhZ2VfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19W
SUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIDApOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9S
RVRVUk4oZXdrVmlldywgc2QsIDApOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihz
ZCwgcHJpdiwgMCk7CiAgICAgcmV0dXJuIHByaXYtPnBhZ2U7CiB9CkBAIC0zMjg3LDEzICszMjg3
LDEzIEBAIFdlYkNvcmU6OlBhZ2UqIGV3a192aWV3X2NvcmVfcGFnZV9nZXQoY29uc3QgRXZhc19P
YmplY3QqIG8pCiAgKgogICogRW1pdHMgImZyYW1lLGNyZWF0ZWQiIHdpdGggdGhlIG5ldyBmcmFt
ZSBvYmplY3Qgb24gc3VjY2Vzcy4KICAqLwotV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkZyYW1l
PiBld2tfdmlld19mcmFtZV9jcmVhdGUoRXZhc19PYmplY3QqIG8sIEV2YXNfT2JqZWN0KiBmcmFt
ZSwgY29uc3QgV1RGOjpTdHJpbmcmIG5hbWUsIFdlYkNvcmU6OkhUTUxGcmFtZU93bmVyRWxlbWVu
dCogb3duZXJFbGVtZW50LCBjb25zdCBXZWJDb3JlOjpLVVJMJiB1cmwsIGNvbnN0IFdURjo6U3Ry
aW5nJiByZWZlcnJlcikKK1dURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpGcmFtZT4gZXdrX3ZpZXdf
ZnJhbWVfY3JlYXRlKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFdmFzX09iamVjdCogZnJhbWUsIGNv
bnN0IFdURjo6U3RyaW5nJiBuYW1lLCBXZWJDb3JlOjpIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93
bmVyRWxlbWVudCwgY29uc3QgV2ViQ29yZTo6S1VSTCYgdXJsLCBjb25zdCBXVEY6OlN0cmluZyYg
cmVmZXJyZXIpCiB7Ci0gICAgREJHKCJvPSVwLCBmcmFtZT0lcCwgbmFtZT0lcywgb3duZXJFbGVt
ZW50PSVwLCB1cmw9JXMsIHJlZmVycmVyPSVzIiwKLSAgICAgICAgbywgZnJhbWUsIG5hbWUudXRm
OCgpLmRhdGEoKSwgb3duZXJFbGVtZW50LAorICAgIERCRygiZXdrVmlldz0lcCwgZnJhbWU9JXAs
IG5hbWU9JXMsIG93bmVyRWxlbWVudD0lcCwgdXJsPSVzLCByZWZlcnJlcj0lcyIsCisgICAgICAg
IGV3a1ZpZXcsIGZyYW1lLCBuYW1lLnV0ZjgoKS5kYXRhKCksIG93bmVyRWxlbWVudCwKICAgICAg
ICAgdXJsLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIHJlZmVycmVyLnV0ZjgoKS5kYXRhKCkpOwog
Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgMCk7CisgICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgMCk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRf
T1JfUkVUVVJOKHNkLCBwcml2LCAwKTsKIAogICAgIFdURjo6UmVmUHRyPFdlYkNvcmU6OkZyYW1l
PiBjZiA9IF9ld2tfdmlld19jb3JlX2ZyYW1lX25ldwpAQCAtMzMxNSwxNyArMzMxNSwxNyBAQCBX
VEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6RnJhbWU+IGV3a192aWV3X2ZyYW1lX2NyZWF0ZShFdmFz
X09iamVjdCogbywgRXZhc19PYmplYwogICAgIHNkLT5jaGFuZ2VkLmZyYW1lX3JlY3QgPSBFSU5B
X1RSVUU7CiAgICAgX2V3a192aWV3X3NtYXJ0X2NoYW5nZWQoc2QpOwogCi0gICAgZXZhc19vYmpl
Y3Rfc21hcnRfY2FsbGJhY2tfY2FsbChvLCAiZnJhbWUsY3JlYXRlZCIsIGZyYW1lKTsKKyAgICBl
dmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKGV3a1ZpZXcsICJmcmFtZSxjcmVhdGVkIiwg
ZnJhbWUpOwogICAgIHJldHVybiBjZi5yZWxlYXNlKCk7CiB9CiAKLVdURjo6UGFzc1JlZlB0cjxX
ZWJDb3JlOjpXaWRnZXQ+IGV3a192aWV3X3BsdWdpbl9jcmVhdGUoRXZhc19PYmplY3QqIG8sIEV2
YXNfT2JqZWN0KiBmcmFtZSwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgcGx1Z2luU2l6ZSwgV2Vi
Q29yZTo6SFRNTFBsdWdJbkVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFdlYkNvcmU6OktVUkwmIHVy
bCwgY29uc3QgV1RGOjpWZWN0b3I8V1RGOjpTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBXVEY6
OlZlY3RvcjxXVEY6OlN0cmluZz4mIHBhcmFtVmFsdWVzLCBjb25zdCBXVEY6OlN0cmluZyYgbWlt
ZVR5cGUsIGJvb2wgbG9hZE1hbnVhbGx5KQorV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OldpZGdl
dD4gZXdrX3ZpZXdfcGx1Z2luX2NyZWF0ZShFdmFzX09iamVjdCogZXdrVmlldywgRXZhc19PYmpl
Y3QqIGZyYW1lLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBwbHVnaW5TaXplLCBXZWJDb3JlOjpI
VE1MUGx1Z0luRWxlbWVudCogZWxlbWVudCwgY29uc3QgV2ViQ29yZTo6S1VSTCYgdXJsLCBjb25z
dCBXVEY6OlZlY3RvcjxXVEY6OlN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFdURjo6VmVjdG9y
PFdURjo6U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0IFdURjo6U3RyaW5nJiBtaW1lVHlwZSwg
Ym9vbCBsb2FkTWFudWFsbHkpCiB7Ci0gICAgREJHKCJvPSVwLCBmcmFtZT0lcCwgc2l6ZT0lZHgl
ZCwgZWxlbWVudD0lcCwgdXJsPSVzLCBtaW1lVHlwZT0lcyIsCi0gICAgICAgIG8sIGZyYW1lLCBw
bHVnaW5TaXplLndpZHRoKCksIHBsdWdpblNpemUuaGVpZ2h0KCksIGVsZW1lbnQsCisgICAgREJH
KCJld2tWaWV3PSVwLCBmcmFtZT0lcCwgc2l6ZT0lZHglZCwgZWxlbWVudD0lcCwgdXJsPSVzLCBt
aW1lVHlwZT0lcyIsCisgICAgICAgIGV3a1ZpZXcsIGZyYW1lLCBwbHVnaW5TaXplLndpZHRoKCks
IHBsdWdpblNpemUuaGVpZ2h0KCksIGVsZW1lbnQsCiAgICAgICAgIHVybC5zdHJpbmcoKS51dGY4
KCkuZGF0YSgpLCBtaW1lVHlwZS51dGY4KCkuZGF0YSgpKTsKIAotICAgIEVXS19WSUVXX1NEX0dF
VF9PUl9SRVRVUk4obywgc2QsIDApOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdr
Vmlldywgc2QsIDApOwogICAgIHNkLT5jaGFuZ2VkLmZyYW1lX3JlY3QgPSBFSU5BX1RSVUU7CiAg
ICAgX2V3a192aWV3X3NtYXJ0X2NoYW5nZWQoc2QpOwogCkBAIC0zMzQ1LDE0ICszMzQ1LDE0IEBA
IFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpXaWRnZXQ+IGV3a192aWV3X3BsdWdpbl9jcmVhdGUo
RXZhc19PYmplY3QqIG8sIEV2YXNfT2JqCiAgKgogICogRW1pdHM6ICJwb3B1cCxjcmVhdGUiIHdp
dGggYSBsaXN0IG9mIEV3a19NZW51IGNvbnRhaW5pbmcgZWFjaCBpdGVtJ3MgZGF0YQogICovCi12
b2lkIGV3a192aWV3X3BvcHVwX25ldyhFdmFzX09iamVjdCogbywgV2ViQ29yZTo6UG9wdXBNZW51
Q2xpZW50KiBjbGllbnQsIGludCBzZWxlY3RlZCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVj
dCkKK3ZvaWQgZXdrX3ZpZXdfcG9wdXBfbmV3KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBXZWJDb3Jl
OjpQb3B1cE1lbnVDbGllbnQqIGNsaWVudCwgaW50IHNlbGVjdGVkLCBjb25zdCBXZWJDb3JlOjpJ
bnRSZWN0JiByZWN0KQogewotICAgIElORigibz0lcCIsIG8pOwotICAgIEVXS19WSUVXX1NEX0dF
VF9PUl9SRVRVUk4obywgc2QpOworICAgIElORigiZXdrVmlldz0lcCIsIGV3a1ZpZXcpOworICAg
IEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QpOwogICAgIEVXS19WSUVXX1BS
SVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdik7CiAKICAgICBpZiAocHJpdi0+cG9wdXAubWVudV9j
bGllbnQpCi0gICAgICAgIGV3a192aWV3X3BvcHVwX2Rlc3Ryb3kobyk7CisgICAgICAgIGV3a192
aWV3X3BvcHVwX2Rlc3Ryb3koZXdrVmlldyk7CiAKICAgICBwcml2LT5wb3B1cC5tZW51X2NsaWVu
dCA9IGNsaWVudDsKIApAQCAtMzM3NSwxOSArMzM3NSwxOSBAQCB2b2lkIGV3a192aWV3X3BvcHVw
X25ldyhFdmFzX09iamVjdCogbywgV2ViQ29yZTo6UG9wdXBNZW51Q2xpZW50KiBjbGllbnQsIGlu
dCBzZQogICAgIHByaXYtPnBvcHVwLm1lbnUueSA9IHJlY3QueSgpOwogICAgIHByaXYtPnBvcHVw
Lm1lbnUud2lkdGggPSByZWN0LndpZHRoKCk7CiAgICAgcHJpdi0+cG9wdXAubWVudS5oZWlnaHQg
PSByZWN0LmhlaWdodCgpOwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwobywg
InBvcHVwLGNyZWF0ZSIsICZwcml2LT5wb3B1cC5tZW51KTsKKyAgICBldmFzX29iamVjdF9zbWFy
dF9jYWxsYmFja19jYWxsKGV3a1ZpZXcsICJwb3B1cCxjcmVhdGUiLCAmcHJpdi0+cG9wdXAubWVu
dSk7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld19wb3B1cF9kZXN0cm95KEV2YXNfT2JqZWN0KiBv
KQorRWluYV9Cb29sIGV3a192aWV3X3BvcHVwX2Rlc3Ryb3koRXZhc19PYmplY3QqIGV3a1ZpZXcp
CiB7Ci0gICAgSU5GKCJvPSVwIiwgbyk7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihv
LCBzZCwgRUlOQV9GQUxTRSk7CisgICAgSU5GKCJld2tWaWV3PSVwIiwgZXdrVmlldyk7CisgICAg
RVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAg
RVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKIAogICAg
IGlmICghcHJpdi0+cG9wdXAubWVudV9jbGllbnQpCiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNF
OwogCi0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChvLCAicG9wdXAsd2lsbGRl
bGV0ZSIsICZwcml2LT5wb3B1cC5tZW51KTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFj
a19jYWxsKGV3a1ZpZXcsICJwb3B1cCx3aWxsZGVsZXRlIiwgJnByaXYtPnBvcHVwLm1lbnUpOwog
CiAgICAgdm9pZCogaXRlbXY7CiAgICAgRUlOQV9MSVNUX0ZSRUUocHJpdi0+cG9wdXAubWVudS5p
dGVtcywgaXRlbXYpIHsKQEAgLTM0MDEsMTAgKzM0MDEsMTAgQEAgRWluYV9Cb29sIGV3a192aWV3
X3BvcHVwX2Rlc3Ryb3koRXZhc19PYmplY3QqIG8pCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0K
IAotdm9pZCBld2tfdmlld19wb3B1cF9zZWxlY3RlZF9zZXQoRXZhc19PYmplY3QqIG8sIGludCBp
bmRleCkKK3ZvaWQgZXdrX3ZpZXdfcG9wdXBfc2VsZWN0ZWRfc2V0KEV2YXNfT2JqZWN0KiBld2tW
aWV3LCBpbnQgaW5kZXgpCiB7Ci0gICAgSU5GKCJvPSVwIiwgbyk7Ci0gICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihvLCBzZCk7CisgICAgSU5GKCJld2tWaWV3PSVwIiwgZXdrVmlldyk7Cisg
ICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCk7CiAgICAgRVdLX1ZJRVdf
UFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2KTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTihwcml2LT5wb3B1cC5tZW51X2NsaWVudCk7CiAKQEAgLTM0MjEsMTAgKzM0MjEsMTAgQEAg
dm9pZCBld2tfdmlld19wb3B1cF9zZWxlY3RlZF9zZXQoRXZhc19PYmplY3QqIG8sIGludCBpbmRl
eCkKICAqIEVtaXRzOiAiZG93bmxvYWQscmVxdWVzdCIgd2l0aCBhbiBFd2tfRG93bmxvYWQgY29u
dGFpbmluZyB0aGUgZGV0YWlscyBvZiB0aGUKICAqIHJlcXVlc3RlZCBkb3dubG9hZC4gVGhlIGRv
d25sb2FkIHBlciBzZSBtdXN0IGJlIGhhbmRsZWQgb3V0c2lkZSBvZiB3ZWJraXQuCiAgKi8KLXZv
aWQgZXdrX3ZpZXdfZG93bmxvYWRfcmVxdWVzdChFdmFzX09iamVjdCogbywgRXdrX0Rvd25sb2Fk
KiBkb3dubG9hZCkKK3ZvaWQgZXdrX3ZpZXdfZG93bmxvYWRfcmVxdWVzdChFdmFzX09iamVjdCog
ZXdrVmlldywgRXdrX0Rvd25sb2FkKiBkb3dubG9hZCkKIHsKLSAgICBEQkcoInZpZXc9JXAiLCBv
KTsKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKG8sICJkb3dubG9hZCxyZXF1
ZXN0IiwgZG93bmxvYWQpOworICAgIERCRygiZXdrVmlldz0lcCIsIGV3a1ZpZXcpOworICAgIGV2
YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdrVmlldywgImRvd25sb2FkLHJlcXVlc3Qi
LCBkb3dubG9hZCk7CiB9CiAKIC8qKgpAQCAtMzQzNCw5ICszNDM0LDkgQEAgdm9pZCBld2tfdmll
d19kb3dubG9hZF9yZXF1ZXN0KEV2YXNfT2JqZWN0KiBvLCBFd2tfRG93bmxvYWQqIGRvd25sb2Fk
KQogICogQHBhcmFtIG8gdmlldy4KICAqIEBwYXJhbSBmcmFtZSB0aGUgZnJhbWUuCiAgKi8KLXZv
aWQgZXdrX3ZpZXdfanNfd2luZG93X29iamVjdF9jbGVhcihFdmFzX09iamVjdCogbywgRXZhc19P
YmplY3QqIGZyYW1lKQordm9pZCBld2tfdmlld19qc193aW5kb3dfb2JqZWN0X2NsZWFyKEV2YXNf
T2JqZWN0KiBld2tWaWV3LCBFdmFzX09iamVjdCogZnJhbWUpCiB7Ci0gICAgZXZhc19vYmplY3Rf
c21hcnRfY2FsbGJhY2tfY2FsbChvLCAianMsd2luZG93b2JqZWN0LGNsZWFyIiwgZnJhbWUpOwor
ICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdrVmlldywgImpzLHdpbmRvd29i
amVjdCxjbGVhciIsIGZyYW1lKTsKIH0KIAogLyoqCkBAIC0zNDQ3LDEwMCArMzQ0NywxMDAgQEAg
dm9pZCBld2tfdmlld19qc193aW5kb3dfb2JqZWN0X2NsZWFyKEV2YXNfT2JqZWN0KiBvLCBFdmFz
X09iamVjdCogZnJhbWUpCiAgKgogICogRW1pdHMgc2lnbmFsOiAidmlld3BvcnQsY2hhbmdlZCIg
d2l0aCBubyBwYXJhbWV0ZXJzLgogICovCi12b2lkIGV3a192aWV3X3ZpZXdwb3J0X2F0dHJpYnV0
ZXNfc2V0KEV2YXNfT2JqZWN0KiBvLCBjb25zdCBXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50cyYg
YXJndW1lbnRzKQordm9pZCBld2tfdmlld192aWV3cG9ydF9hdHRyaWJ1dGVzX3NldChFdmFzX09i
amVjdCogZXdrVmlldywgY29uc3QgV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHMmIGFyZ3VtZW50
cykKIHsKLSAgICBFV0tfVklFV19TRF9HRVQobywgc2QpOworICAgIEVXS19WSUVXX1NEX0dFVChl
d2tWaWV3LCBzZCk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVQoc2QsIHByaXYpOwogCiAgICAgcHJp
di0+dmlld3BvcnRfYXJndW1lbnRzID0gYXJndW1lbnRzOwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0
X2NhbGxiYWNrX2NhbGwobywgInZpZXdwb3J0LGNoYW5nZWQiLCAwKTsKKyAgICBldmFzX29iamVj
dF9zbWFydF9jYWxsYmFja19jYWxsKGV3a1ZpZXcsICJ2aWV3cG9ydCxjaGFuZ2VkIiwgMCk7CiB9
CiAKLXZvaWQgZXdrX3ZpZXdfdmlld3BvcnRfYXR0cmlidXRlc19nZXQoY29uc3QgRXZhc19PYmpl
Y3QqIG8sIGludCogdywgaW50KiBoLCBmbG9hdCogaW5pdF9zY2FsZSwgZmxvYXQqIG1heF9zY2Fs
ZSwgZmxvYXQqIG1pbl9zY2FsZSwgZmxvYXQqIGRldmljZV9waXhlbF9yYXRpbywgRWluYV9Cb29s
KiB1c2VyX3NjYWxhYmxlKQordm9pZCBld2tfdmlld192aWV3cG9ydF9hdHRyaWJ1dGVzX2dldChj
b25zdCBFdmFzX09iamVjdCogZXdrVmlldywgaW50KiB3aWR0aCwgaW50KiBoZWlnaHQsIGZsb2F0
KiBpbml0U2NhbGUsIGZsb2F0KiBtYXhTY2FsZSwgZmxvYXQqIG1pblNjYWxlLCBmbG9hdCogZGV2
aWNlUGl4ZWxSYXRpbywgRWluYV9Cb29sKiB1c2VyU2NhbGFibGUpCiB7Ci0gICAgV2ViQ29yZTo6
Vmlld3BvcnRBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMgPSBfZXdrX3ZpZXdfdmlld3BvcnRfYXR0cmli
dXRlc19jb21wdXRlKG8pOworICAgIFdlYkNvcmU6OlZpZXdwb3J0QXR0cmlidXRlcyBhdHRyaWJ1
dGVzID0gX2V3a192aWV3X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfY29tcHV0ZShld2tWaWV3KTsKIAot
ICAgIGlmICh3KQotICAgICAgICAqdyA9IGF0dHJpYnV0ZXMubGF5b3V0U2l6ZS53aWR0aCgpOwot
ICAgIGlmIChoKQotICAgICAgICAqaCA9IGF0dHJpYnV0ZXMubGF5b3V0U2l6ZS5oZWlnaHQoKTsK
LSAgICBpZiAoaW5pdF9zY2FsZSkKLSAgICAgICAgKmluaXRfc2NhbGUgPSBhdHRyaWJ1dGVzLmlu
aXRpYWxTY2FsZTsKLSAgICBpZiAobWF4X3NjYWxlKQotICAgICAgICAqbWF4X3NjYWxlID0gYXR0
cmlidXRlcy5tYXhpbXVtU2NhbGU7Ci0gICAgaWYgKG1pbl9zY2FsZSkKLSAgICAgICAgKm1pbl9z
Y2FsZSA9IGF0dHJpYnV0ZXMubWluaW11bVNjYWxlOwotICAgIGlmIChkZXZpY2VfcGl4ZWxfcmF0
aW8pCi0gICAgICAgICpkZXZpY2VfcGl4ZWxfcmF0aW8gPSBhdHRyaWJ1dGVzLmRldmljZVBpeGVs
UmF0aW87Ci0gICAgaWYgKHVzZXJfc2NhbGFibGUpCi0gICAgICAgICp1c2VyX3NjYWxhYmxlID0g
c3RhdGljX2Nhc3Q8Ym9vbD4oYXR0cmlidXRlcy51c2VyU2NhbGFibGUpOworICAgIGlmICh3aWR0
aCkKKyAgICAgICAgKndpZHRoID0gYXR0cmlidXRlcy5sYXlvdXRTaXplLndpZHRoKCk7CisgICAg
aWYgKGhlaWdodCkKKyAgICAgICAgKmhlaWdodCA9IGF0dHJpYnV0ZXMubGF5b3V0U2l6ZS5oZWln
aHQoKTsKKyAgICBpZiAoaW5pdFNjYWxlKQorICAgICAgICAqaW5pdFNjYWxlID0gYXR0cmlidXRl
cy5pbml0aWFsU2NhbGU7CisgICAgaWYgKG1heFNjYWxlKQorICAgICAgICAqbWF4U2NhbGUgPSBh
dHRyaWJ1dGVzLm1heGltdW1TY2FsZTsKKyAgICBpZiAobWluU2NhbGUpCisgICAgICAgICptaW5T
Y2FsZSA9IGF0dHJpYnV0ZXMubWluaW11bVNjYWxlOworICAgIGlmIChkZXZpY2VQaXhlbFJhdGlv
KQorICAgICAgICAqZGV2aWNlUGl4ZWxSYXRpbyA9IGF0dHJpYnV0ZXMuZGV2aWNlUGl4ZWxSYXRp
bzsKKyAgICBpZiAodXNlclNjYWxhYmxlKQorICAgICAgICAqdXNlclNjYWxhYmxlID0gc3RhdGlj
X2Nhc3Q8Ym9vbD4oYXR0cmlidXRlcy51c2VyU2NhbGFibGUpOwogfQogCi1FaW5hX0Jvb2wgZXdr
X3ZpZXdfem9vbV9yYW5nZV9zZXQoRXZhc19PYmplY3QqIG8sIGZsb2F0IG1pbl9zY2FsZSwgZmxv
YXQgbWF4X3NjYWxlKQorRWluYV9Cb29sIGV3a192aWV3X3pvb21fcmFuZ2Vfc2V0KEV2YXNfT2Jq
ZWN0KiBld2tWaWV3LCBmbG9hdCBtaW5TY2FsZSwgZmxvYXQgbWF4U2NhbGUpCiB7Ci0gICAgRVdL
X1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJRVdf
UFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKIAotICAgIGlmIChtYXhf
c2NhbGUgPCBtaW5fc2NhbGUpIHsKKyAgICBpZiAobWF4U2NhbGUgPCBtaW5TY2FsZSkgewogICAg
ICAgICBXUk4oIm1pbl9zY2FsZSBpcyBsYXJnZXIgdGhhbiBtYXhfc2NhbGUiKTsKICAgICAgICAg
cmV0dXJuIEVJTkFfRkFMU0U7CiAgICAgfQogCi0gICAgcHJpdi0+c2V0dGluZ3Muem9vbV9yYW5n
ZS5taW5fc2NhbGUgPSBtaW5fc2NhbGU7Ci0gICAgcHJpdi0+c2V0dGluZ3Muem9vbV9yYW5nZS5t
YXhfc2NhbGUgPSBtYXhfc2NhbGU7CisgICAgcHJpdi0+c2V0dGluZ3Muem9vbV9yYW5nZS5taW5f
c2NhbGUgPSBtaW5TY2FsZTsKKyAgICBwcml2LT5zZXR0aW5ncy56b29tX3JhbmdlLm1heF9zY2Fs
ZSA9IG1heFNjYWxlOwogCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotZmxvYXQgZXdrX3Zp
ZXdfem9vbV9yYW5nZV9taW5fZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQorZmxvYXQgZXdrX3Zp
ZXdfem9vbV9yYW5nZV9taW5fZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAg
IEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIC0xLjApOworICAgIEVXS19WSUVXX1NE
X0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIC0xLjApOwogICAgIEVXS19WSUVXX1BSSVZfR0VU
X09SX1JFVFVSTihzZCwgcHJpdiwgLTEuMCk7CiAKICAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3Mu
em9vbV9yYW5nZS5taW5fc2NhbGU7CiB9CiAKLWZsb2F0IGV3a192aWV3X3pvb21fcmFuZ2VfbWF4
X2dldChjb25zdCBFdmFzX09iamVjdCogbykKK2Zsb2F0IGV3a192aWV3X3pvb21fcmFuZ2VfbWF4
X2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRf
T1JfUkVUVVJOKG8sIHNkLCAtMS4wKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3
a1ZpZXcsIHNkLCAtMS4wKTsKICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHBy
aXYsIC0xLjApOwogCiAgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLnpvb21fcmFuZ2UubWF4X3Nj
YWxlOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfdXNlcl9zY2FsYWJsZV9zZXQoRXZhc19PYmpl
Y3QqIG8sIEVpbmFfQm9vbCB1c2VyX3NjYWxhYmxlKQorRWluYV9Cb29sIGV3a192aWV3X3VzZXJf
c2NhbGFibGVfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wgdXNlclNjYWxhYmxl
KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOwor
ICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwog
ICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CiAK
LSAgICBwcml2LT5zZXR0aW5ncy56b29tX3JhbmdlLnVzZXJfc2NhbGFibGUgPSB1c2VyX3NjYWxh
YmxlOworICAgIHByaXYtPnNldHRpbmdzLnpvb21fcmFuZ2UudXNlcl9zY2FsYWJsZSA9IHVzZXJT
Y2FsYWJsZTsKIAogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmll
d191c2VyX3NjYWxhYmxlX2dldChjb25zdCBFdmFzX09iamVjdCogbykKK0VpbmFfQm9vbCBld2tf
dmlld191c2VyX3NjYWxhYmxlX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tf
VklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFV0tf
VklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwogCiAgICAgcmV0
dXJuIHByaXYtPnNldHRpbmdzLnpvb21fcmFuZ2UudXNlcl9zY2FsYWJsZTsKIH0KIAotZmxvYXQg
ZXdrX3ZpZXdfZGV2aWNlX3BpeGVsX3JhdGlvX2dldChjb25zdCBFdmFzX09iamVjdCogbykKK2Zs
b2F0IGV3a192aWV3X2RldmljZV9waXhlbF9yYXRpb19nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3
a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgLTEuMCk7Cisg
ICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgLTEuMCk7CiAgICAgRVdL
X1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCAtMS4wKTsKIAogICAgIHJldHVybiBw
cml2LT5zZXR0aW5ncy5kZXZpY2VfcGl4ZWxfcmF0aW87CiB9CiAKLXZvaWQgZXdrX3ZpZXdfZGlk
X2ZpcnN0X3Zpc3VhbGx5X25vbmVtcHR5X2xheW91dChFdmFzX09iamVjdCogbykKK3ZvaWQgZXdr
X3ZpZXdfZGlkX2ZpcnN0X3Zpc3VhbGx5X25vbmVtcHR5X2xheW91dChFdmFzX09iamVjdCogZXdr
VmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkKTsKKyAgICBFV0tf
VklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkKTsKICAgICBFV0tfVklFV19QUklWX0dF
VF9PUl9SRVRVUk4oc2QsIHByaXYpOwogICAgIGlmICghcHJpdi0+ZmxhZ3Mudmlld19jbGVhcmVk
KSB7Ci0gICAgICAgIGV3a192aWV3X2ZyYW1lX21haW5fY2xlYXJlZChvKTsKLSAgICAgICAgZXdr
X3ZpZXdfZW5hYmxlX3JlbmRlcihvKTsKKyAgICAgICAgZXdrX3ZpZXdfZnJhbWVfbWFpbl9jbGVh
cmVkKGV3a1ZpZXcpOworICAgICAgICBld2tfdmlld19lbmFibGVfcmVuZGVyKGV3a1ZpZXcpOwog
ICAgICAgICBwcml2LT5mbGFncy52aWV3X2NsZWFyZWQgPSBFSU5BX1RSVUU7CiAgICAgfQogfQpA
QCAtMzU1MSwyMSArMzU1MSwyMSBAQCB2b2lkIGV3a192aWV3X2RpZF9maXJzdF92aXN1YWxseV9u
b25lbXB0eV9sYXlvdXQoRXZhc19PYmplY3QqIG8pCiAgKgogICogQHBhcmFtIG8gdmlldy4KICAq
Lwotdm9pZCBld2tfdmlld19kaXNwYXRjaF9kaWRfZmluaXNoX2xvYWRpbmcoRXZhc19PYmplY3Qq
IG8pCit2b2lkIGV3a192aWV3X2Rpc3BhdGNoX2RpZF9maW5pc2hfbG9hZGluZyhFdmFzX09iamVj
dCogZXdrVmlldykKIHsKICAgICAvKiBJZiB3ZSByZWFjaCB0aGlzIHBvaW50IGFuZCByZW5kZXJp
bmcgaXMgc3RpbGwgZGlzYWJsZWQsIFdlYkNvcmUgd2lsbCBub3QKICAgICAgKiB0cmlnZ2VyIHRo
ZSBkaWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXQgc2lnbmFsIGFueW1vcmUuIFNvLCB3ZQog
ICAgICAqIGZvcmNlZnVsbHkgcmUtZW5hYmxlIHRoZSByZW5kZXJpbmcuCiAgICAgICovCi0gICAg
ZXdrX3ZpZXdfZGlkX2ZpcnN0X3Zpc3VhbGx5X25vbmVtcHR5X2xheW91dChvKTsKKyAgICBld2tf
dmlld19kaWRfZmlyc3RfdmlzdWFsbHlfbm9uZW1wdHlfbGF5b3V0KGV3a1ZpZXcpOwogfQogCi12
b2lkIGV3a192aWV3X3RyYW5zaXRpb25fdG9fY29tbWl0ZWRfZm9yX25ld3BhZ2UoRXZhc19PYmpl
Y3QqIG8pCit2b2lkIGV3a192aWV3X3RyYW5zaXRpb25fdG9fY29tbWl0ZWRfZm9yX25ld3BhZ2Uo
RXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihv
LCBzZCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCk7CiAgICAg
RVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2KTsKIAotICAgIGV3a192aWV3X2Rp
c2FibGVfcmVuZGVyKG8pOworICAgIGV3a192aWV3X2Rpc2FibGVfcmVuZGVyKGV3a1ZpZXcpOwog
ICAgIHByaXYtPmZsYWdzLnZpZXdfY2xlYXJlZCA9IEVJTkFfRkFMU0U7CiB9CiAKQEAgLTM1Nzks
OSArMzU3OSw5IEBAIHZvaWQgZXdrX3ZpZXdfdHJhbnNpdGlvbl90b19jb21taXRlZF9mb3JfbmV3
cGFnZShFdmFzX09iamVjdCogbykKICAqIEBwYXJhbSBvIFZpZXcgdG8gbG9hZAogICogQHBhcmFt
IHJlcXVlc3QgUmVxdWVzdCB3aGljaCBjb250YWluIHVybCB0byBuYXZpZ2F0ZQogICovCi1FaW5h
X0Jvb2wgZXdrX3ZpZXdfbmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb24oRXZhc19PYmplY3QqIG8s
IEV3a19GcmFtZV9SZXNvdXJjZV9SZXF1ZXN0KiByZXF1ZXN0KQorRWluYV9Cb29sIGV3a192aWV3
X25hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9uKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFd2tfRnJh
bWVfUmVzb3VyY2VfUmVxdWVzdCogcmVxdWVzdCkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1Jf
UkVUVVJOKG8sIHNkLCBFSU5BX1RSVUUpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrVmlldywgc2QsIEVJTkFfVFJVRSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5f
VkFMKHNkLT5hcGksIEVJTkFfVFJVRSk7CiAKICAgICBpZiAoIXNkLT5hcGktPm5hdmlnYXRpb25f
cG9saWN5X2RlY2lzaW9uKQpAQCAtMzU5MCwxMyArMzU5MCwxMyBAQCBFaW5hX0Jvb2wgZXdrX3Zp
ZXdfbmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb24oRXZhc19PYmplY3QqIG8sIEV3a19GcmFtZV9S
ZXNvdXJjZQogICAgIHJldHVybiBzZC0+YXBpLT5uYXZpZ2F0aW9uX3BvbGljeV9kZWNpc2lvbihz
ZCwgcmVxdWVzdCk7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld19qc19vYmplY3RfYWRkKEV2YXNf
T2JqZWN0KiBvLCBFd2tfSlNfT2JqZWN0KiBvYmosIGNvbnN0IGNoYXIqIG9ial9uYW1lKQorRWlu
YV9Cb29sIGV3a192aWV3X2pzX29iamVjdF9hZGQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV3a19K
U19PYmplY3QqIG9iamVjdCwgY29uc3QgY2hhciogb2JqZWN0TmFtZSkKIHsKICNpZiBFTkFCTEUo
TkVUU0NBUEVfUExVR0lOX0FQSSkKLSAgICBpZiAob2JqLT52aWV3KSAvLyBvYmplY3QgaGFzIGFs
cmVhZHkgYmVlbiBhZGRlZCB0byBhbm90aGVyIGV3a192aWV3CisgICAgaWYgKG9iamVjdC0+dmll
dykgLy8gb2JqZWN0IGhhcyBhbHJlYWR5IGJlZW4gYWRkZWQgdG8gYW5vdGhlciBld2tfdmlldwog
ICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKLSAgICBvYmotPm5hbWUgPSBlaW5hX3N0cmluZ3No
YXJlX2FkZChvYmpfbmFtZSk7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwg
RUlOQV9GQUxTRSk7CisgICAgb2JqZWN0LT5uYW1lID0gZWluYV9zdHJpbmdzaGFyZV9hZGQob2Jq
ZWN0X25hbWUpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJ
TkFfRkFMU0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlO
QV9GQUxTRSk7CiAKICAgICBKU0M6OkpTTG9jayBsb2NrKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNP
bmx5KTsKQEAgLTM2MTEsNyArMzYxMSw3IEBAIEVpbmFfQm9vbCBld2tfdmlld19qc19vYmplY3Rf
YWRkKEV2YXNfT2JqZWN0KiBvLCBFd2tfSlNfT2JqZWN0KiBvYmosIGNvbnN0IGNoYXIqCiAKICAg
ICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IHdpbmRvdy0+Z2xvYmFsRXhlYygpOwogCi0gICAgb2Jq
LT52aWV3ID0gbzsKKyAgICBvYmotPnZpZXcgPSBld2tWaWV3OwogICAgIEpTQzo6SlNPYmplY3Qq
IHJ1bnRpbWVPYmplY3QgPSAoSlNDOjpKU09iamVjdCopSlNDOjpCaW5kaW5nczo6Q0luc3RhbmNl
OjpjcmVhdGUoKE5QT2JqZWN0KilvYmosIHJvb3QpLT5jcmVhdGVSdW50aW1lT2JqZWN0KGV4ZWMp
OwogICAgIEpTQzo6SWRlbnRpZmllciBpZCA9IEpTQzo6SWRlbnRpZmllcihleGVjLCBvYmpfbmFt
ZSk7CiAKQEAgLTM2MjMsOSArMzYyMyw5IEBAIEVpbmFfQm9vbCBld2tfdmlld19qc19vYmplY3Rf
YWRkKEV2YXNfT2JqZWN0KiBvLCBFd2tfSlNfT2JqZWN0KiBvYmosIGNvbnN0IGNoYXIqCiAjZW5k
aWYgLy8gRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiB9CiAKLUVpbmFfQm9vbCBld2tfdmll
d19wcm90b2NvbF9oYW5kbGVyX3NldChFdmFzX09iamVjdCogbywgY29uc3QgY2hhcioqIHByb3Rv
Y29scywgRXdrX1ZpZXdfUmVzb3VyY2VfSGFuZGxlcl9DYiBoYW5kbGVyLCB2b2lkKiBjb250ZXh0
KQorRWluYV9Cb29sIGV3a192aWV3X3Byb3RvY29sX2hhbmRsZXJfc2V0KEV2YXNfT2JqZWN0KiBl
d2tWaWV3LCBjb25zdCBjaGFyKiogcHJvdG9jb2xzLCBFd2tfVmlld19SZXNvdXJjZV9IYW5kbGVy
X0NiIGhhbmRsZXIsIHZvaWQqIGNvbnRleHQpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUKG8sIHNk
KTsKKyAgICBFV0tfVklFV19TRF9HRVQoZXdrVmlldywgc2QpOwogICAgIEVXS19WSUVXX1BSSVZf
R0VUKHNkLCBwcml2KTsKIAogICAgIGlmICghaGFuZGxlcikKQEAgLTM2MzcsOSArMzYzNyw5IEBA
IEVpbmFfQm9vbCBld2tfdmlld19wcm90b2NvbF9oYW5kbGVyX3NldChFdmFzX09iamVjdCogbywg
Y29uc3QgY2hhcioqIHByb3RvY29scywKICAgICByZXR1cm4gZXdrX2N1c3RvbV9wcm90b2NvbF9o
YW5kbGVyX3NldChwcm90b2NvbHMpOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfcHJvdG9jb2xf
aGFuZGxlcl91bnNldChFdmFzX09iamVjdCogbykKK0VpbmFfQm9vbCBld2tfdmlld19wcm90b2Nv
bF9oYW5kbGVyX3Vuc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NE
X0dFVChvLCBzZCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUKGV3a1ZpZXcsIHNkKTsKICAgICBFV0tf
VklFV19QUklWX0dFVChzZCwgcHJpdik7CiAgICAgRWluYV9Cb29sIHJldCA9IGV3a19jdXN0b21f
cHJvdG9jb2xfaGFuZGxlcl9hbGxfdW5zZXQoKTsKIApAQCAtMzY1MSw5ICszNjUxLDkgQEAgRWlu
YV9Cb29sIGV3a192aWV3X3Byb3RvY29sX2hhbmRsZXJfdW5zZXQoRXZhc19PYmplY3QqIG8pCiAg
ICAgcmV0dXJuIHJldDsKIH0KIAotdm9pZCogZXdrX3ZpZXdfcHJvdG9jb2xfaGFuZGxlcl9yZXNv
dXJjZV9nZXQoRXZhc19PYmplY3QqIG8sIHNpemVfdCogYnl0ZXNSZWFkLCBjaGFyKiogbWltZSwg
Y29uc3QgY2hhciogZmlsZSkKK3ZvaWQqIGV3a192aWV3X3Byb3RvY29sX2hhbmRsZXJfcmVzb3Vy
Y2VfZ2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBzaXplX3QqIGJ5dGVzUmVhZCwgY2hhcioqIG1p
bWUsIGNvbnN0IGNoYXIqIGZpbGUpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUKG8sIHNkKTsKKyAg
ICBFV0tfVklFV19TRF9HRVQoZXdrVmlldywgc2QpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUKHNk
LCBwcml2KTsKIAogICAgIEV3a19WaWV3X1Jlc291cmNlX0hhbmRsZXJfQ2IgZnVuY3Rpb24gPSBw
cml2LT5jdXN0b21fcmVzb3VyY2VfaGFuZGxlci5mdW5jdGlvbjsKQEAgLTM2NzIsMTQgKzM2NzIs
MTQgQEAgdm9pZCogZXdrX3ZpZXdfcHJvdG9jb2xfaGFuZGxlcl9yZXNvdXJjZV9nZXQoRXZhc19P
YmplY3QqIG8sIHNpemVfdCogYnl0ZXNSZWFkLAogICogQHBhcmFtIHcgbmV3IGNvbnRlbnQgd2lk
dGguCiAgKiBAcGFyYW0gaCBuZXcgY29udGVudCBoZWlnaHQuCiAgKi8KLXZvaWQgZXdrX3ZpZXdf
Y29udGVudHNfc2l6ZV9jaGFuZ2VkKEV2YXNfT2JqZWN0KiBvLCBpbnQgdywgaW50IGgpCit2b2lk
IGV3a192aWV3X2NvbnRlbnRzX3NpemVfY2hhbmdlZChFdmFzX09iamVjdCogZXdrVmlldywgaW50
IHdpZHRoLCBpbnQgaGVpZ2h0KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywg
c2QpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QpOwogICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGkpOwogICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOKHNkLT5hcGktPmNvbnRlbnRzX3Jlc2l6ZSk7CiAKLSAgICBpZiAoIXNkLT5hcGkt
PmNvbnRlbnRzX3Jlc2l6ZShzZCwgdywgaCkpCi0gICAgICAgIEVSUigiZmFpbGVkIHRvIHJlc2l6
ZSBjb250ZW50cyB0byAlZHglZCIsIHcsIGgpOworICAgIGlmICghc2QtPmFwaS0+Y29udGVudHNf
cmVzaXplKHNkLCB3aWR0aCwgaGVpZ2h0KSkKKyAgICAgICAgRVJSKCJmYWlsZWQgdG8gcmVzaXpl
IGNvbnRlbnRzIHRvICVkeCVkIiwgd2lkdGgsIGhlaWdodCk7CiB9CiAKIC8qKgpAQCAtMzY5MCw5
ICszNjkwLDkgQEAgdm9pZCBld2tfdmlld19jb250ZW50c19zaXplX2NoYW5nZWQoRXZhc19PYmpl
Y3QqIG8sIGludCB3LCBpbnQgaCkKICAqCiAgKiBAcmV0dXJuIHBhZ2Ugc2l6ZS4KICAqLwotV2Vi
Q29yZTo6RmxvYXRSZWN0IGV3a192aWV3X3BhZ2VfcmVjdF9nZXQoY29uc3QgRXZhc19PYmplY3Qq
IG8pCitXZWJDb3JlOjpGbG9hdFJlY3QgZXdrX3ZpZXdfcGFnZV9yZWN0X2dldChjb25zdCBFdmFz
X09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVQobywgc2QpOworICAgIEVX
S19WSUVXX1NEX0dFVChld2tWaWV3LCBzZCk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVQoc2QsIHBy
aXYpOwogCiAgICAgV2ViQ29yZTo6RnJhbWUqIG1haW5fZnJhbWUgPSBwcml2LT5wYWdlLT5tYWlu
RnJhbWUoKTsKQEAgLTM3MDAsMjggKzM3MDAsMjggQEAgV2ViQ29yZTo6RmxvYXRSZWN0IGV3a192
aWV3X3BhZ2VfcmVjdF9nZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCiB9CiAKICNpZiBFTkFCTEUo
VE9VQ0hfRVZFTlRTKQotdm9pZCBld2tfdmlld19uZWVkX3RvdWNoX2V2ZW50c19zZXQoRXZhc19P
YmplY3QqIG8sIGJvb2wgbmVlZGVkKQordm9pZCBld2tfdmlld19uZWVkX3RvdWNoX2V2ZW50c19z
ZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGJvb2wgbmVlZGVkKQogewotICAgIEVXS19WSUVXX1NE
X0dFVChvLCBzZCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUKGV3a1ZpZXcsIHNkKTsKICAgICBFV0tf
VklFV19QUklWX0dFVChzZCwgcHJpdik7CiAKICAgICBwcml2LT5mbGFncy5uZWVkX3RvdWNoX2V2
ZW50cyA9IG5lZWRlZDsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X25lZWRfdG91Y2hfZXZlbnRz
X2dldChjb25zdCBFdmFzX09iamVjdCogbykKK0VpbmFfQm9vbCBld2tfdmlld19uZWVkX3RvdWNo
X2V2ZW50c19nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9H
RVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICByZXR1cm4gcHJpdi0+Zmxh
Z3MubmVlZF90b3VjaF9ldmVudHM7CiB9CiAjZW5kaWYKIAotRWluYV9Cb29sIGV3a192aWV3X21v
ZGVfc2V0KEV2YXNfT2JqZWN0KiBvLCBFd2tfVmlld19Nb2RlIHZpZXdfbW9kZSkKK0VpbmFfQm9v
bCBld2tfdmlld19tb2RlX3NldChFdmFzX09iamVjdCogZXdrVmlldywgRXdrX1ZpZXdfTW9kZSB2
aWV3TW9kZSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZB
TFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZB
TFNFKTsKICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFM
U0UpOwogCi0gICAgc3dpdGNoICh2aWV3X21vZGUpIHsKKyAgICBzd2l0Y2ggKHZpZXdNb2RlKSB7
CiAgICAgY2FzZSBFV0tfVklFV19NT0RFX1dJTkRPV0VEOgogICAgICAgICBwcml2LT5wYWdlLT5z
ZXRWaWV3TW9kZShXZWJDb3JlOjpQYWdlOjpWaWV3TW9kZVdpbmRvd2VkKTsKICAgICAgICAgYnJl
YWs7CkBAIC0zNzQ0LDExICszNzQ0LDExIEBAIEVpbmFfQm9vbCBld2tfdmlld19tb2RlX3NldChF
dmFzX09iamVjdCogbywgRXdrX1ZpZXdfTW9kZSB2aWV3X21vZGUpCiAgICAgcmV0dXJuIEVJTkFf
VFJVRTsKIH0KIAotRXdrX1ZpZXdfTW9kZSBld2tfdmlld19tb2RlX2dldChjb25zdCBFdmFzX09i
amVjdCogbykKK0V3a19WaWV3X01vZGUgZXdrX3ZpZXdfbW9kZV9nZXQoY29uc3QgRXZhc19PYmpl
Y3QqIGV3a1ZpZXcpCiB7CiAgICAgRXdrX1ZpZXdfTW9kZSBtb2RlID0gRVdLX1ZJRVdfTU9ERV9X
SU5ET1dFRDsKIAotICAgIEVXS19WSUVXX1NEX0dFVChvLCBzZCk7CisgICAgRVdLX1ZJRVdfU0Rf
R0VUKGV3a1ZpZXcsIHNkKTsKICAgICBpZiAoIXNkKQogICAgICAgICByZXR1cm4gbW9kZTsKICAg
ICBFV0tfVklFV19QUklWX0dFVChzZCwgcHJpdik7CkBAIC0zNzgzLDkgKzM3ODMsOSBAQCBFd2tf
Vmlld19Nb2RlIGV3a192aWV3X21vZGVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQogICoKICAq
IEVtaXRzIHNpZ25hbDogImVkaXRvcmNsaWVudHNlbGVjdGlvbixjaGFuZ2VkIiB3aXRoIG5vIHBh
cmFtZXRlcnMuCiAgKi8KLXZvaWQgZXdrX3ZpZXdfZWRpdG9yX2NsaWVudF9zZWxlY3Rpb25fY2hh
bmdlZChFdmFzX09iamVjdCogbykKK3ZvaWQgZXdrX3ZpZXdfZWRpdG9yX2NsaWVudF9zZWxlY3Rp
b25fY2hhbmdlZChFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBldmFzX29iamVjdF9zbWFy
dF9jYWxsYmFja19jYWxsKG8sICJlZGl0b3JjbGllbnQsc2VsZWN0aW9uLGNoYW5nZWQiLCAwKTsK
KyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKGV3a1ZpZXcsICJlZGl0b3JjbGll
bnQsc2VsZWN0aW9uLGNoYW5nZWQiLCAwKTsKIH0KIAogLyoqCkBAIC0zNzk2LDcgKzM3OTYsNyBA
QCB2b2lkIGV3a192aWV3X2VkaXRvcl9jbGllbnRfc2VsZWN0aW9uX2NoYW5nZWQoRXZhc19PYmpl
Y3QqIG8pCiAgKgogICogRW1pdHMgc2lnbmFsOiAiZWRpdG9yY2xpZW50LGNvbnRlbnRzLGNoYW5n
ZWQiIHdpdGggbm8gcGFyYW1ldGVycy4KICAqLwotdm9pZCBld2tfdmlld19lZGl0b3JfY2xpZW50
X2NvbnRlbnRzX2NoYW5nZWQoRXZhc19PYmplY3QqIG8pCit2b2lkIGV3a192aWV3X2VkaXRvcl9j
bGllbnRfY29udGVudHNfY2hhbmdlZChFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBldmFz
X29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKG8sICJlZGl0b3JjbGllbnQsY29udGVudHMsY2hh
bmdlZCIsIDApOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdrVmlldywg
ImVkaXRvcmNsaWVudCxjb250ZW50cyxjaGFuZ2VkIiwgMCk7CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXdfc2luZ2xlLmNwcCBiL1NvdXJjZS9XZWJLaXQvZWZs
L2V3ay9ld2tfdmlld19zaW5nbGUuY3BwCmluZGV4IDVhZDY3ZmVhZDMzYTY5MDg1Nzk4ZTU1MzZh
NTE1YTlhYzY1MjY4YjAuLjRkMzVlOTM1ODM5Yzg5NDVhZDQ3OTY0YTdiOWIyYTM3ODkxMDJiYTIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlld19zaW5nbGUuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlld19zaW5nbGUuY3BwCkBAIC05LDcgKzks
NyBAQAogCiAgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCiAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIE1FUmNoQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CiAgICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAK
ICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCkBAIC0zMSw4OSArMzEsODcgQEAKIAogc3RhdGljIEV3a19W
aWV3X1NtYXJ0X0NsYXNzIF9wYXJlbnRfc2MgPSBFV0tfVklFV19TTUFSVF9DTEFTU19JTklUX05V
TEw7CiAKLXN0YXRpYyB2b2lkIF9ld2tfdmlld19zaW5nbGVfb25fZGVsKHZvaWQqIGRhdGEsIEV2
YXMqIGUsIEV2YXNfT2JqZWN0KiBvLCB2b2lkKiBldmVudF9pbmZvKQorc3RhdGljIHZvaWQgX2V3
a192aWV3X3NpbmdsZV9vbl9kZWwodm9pZCogZGF0YSwgRXZhcyogZXZlbnRUeXBlLCBFdmFzX09i
amVjdCogY2FsbGJhY2ssIHZvaWQqIGV2ZW50SW5mbykKIHsKICAgICBFdmFzX09iamVjdCogY2xp
cCA9IChFdmFzX09iamVjdCopZGF0YTsKICAgICBldmFzX29iamVjdF9kZWwoY2xpcCk7CiB9CiAK
LXN0YXRpYyB2b2lkIF9ld2tfdmlld19zaW5nbGVfc21hcnRfYWRkKEV2YXNfT2JqZWN0KiBvKQor
c3RhdGljIHZvaWQgX2V3a192aWV3X3NpbmdsZV9zbWFydF9hZGQoRXZhc19PYmplY3QqIGV3a1Np
bmdsZSkKIHsKICAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzZDsKIAotICAgIF9wYXJlbnRfc2Mu
c2MuYWRkKG8pOworICAgIF9wYXJlbnRfc2Muc2MuYWRkKGV3a1NpbmdsZSk7CiAKLSAgICBzZCA9
IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihldmFzX29iamVjdF9zbWFydF9kYXRh
X2dldChvKSk7CisgICAgc2QgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZXZh
c19vYmplY3Rfc21hcnRfZGF0YV9nZXQoZXdrU2luZ2xlKSk7CiAgICAgaWYgKCFzZCkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgRXZhc19PYmplY3QqIGNsaXAgPSBldmFzX29iamVjdF9yZWN0YW5n
bGVfYWRkKHNkLT5iYXNlLmV2YXMpOwotICAgIGV2YXNfb2JqZWN0X2NsaXBfc2V0KHNkLT5iYWNr
aW5nX3N0b3JlLCBjbGlwKTsKLSAgICBldmFzX29iamVjdF9zbWFydF9tZW1iZXJfYWRkKGNsaXAs
IG8pOwogICAgIGV2YXNfb2JqZWN0X3Nob3coY2xpcCk7CiAKICAgICBldmFzX29iamVjdF9ldmVu
dF9jYWxsYmFja19hZGQKICAgICAgICAgKHNkLT5iYWNraW5nX3N0b3JlLCBFVkFTX0NBTExCQUNL
X0RFTCwgX2V3a192aWV3X3NpbmdsZV9vbl9kZWwsIGNsaXApOwogfQogCi1zdGF0aWMgRXZhc19P
YmplY3QqIF9ld2tfdmlld19zaW5nbGVfc21hcnRfYmFja2luZ19zdG9yZV9hZGQoRXdrX1ZpZXdf
U21hcnRfRGF0YSogc2QpCitzdGF0aWMgRXZhc19PYmplY3QqIF9ld2tfdmlld19zaW5nbGVfc21h
cnRfYmFja2luZ19zdG9yZV9hZGQoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhKQogewot
ICAgIEV2YXNfT2JqZWN0KiBicyA9IGV2YXNfb2JqZWN0X2ltYWdlX2FkZChzZC0+YmFzZS5ldmFz
KTsKKyAgICBFdmFzX09iamVjdCogYnMgPSBldmFzX29iamVjdF9pbWFnZV9hZGQoc21hcnREYXRh
LT5iYXNlLmV2YXMpOwogICAgIGV2YXNfb2JqZWN0X2ltYWdlX2FscGhhX3NldChicywgRUlOQV9G
QUxTRSk7Ci0gICAgZXZhc19vYmplY3RfaW1hZ2Vfc21vb3RoX3NjYWxlX3NldChicywgc2QtPnpv
b21fd2Vha19zbW9vdGhfc2NhbGUpOworICAgIGV2YXNfb2JqZWN0X2ltYWdlX3Ntb290aF9zY2Fs
ZV9zZXQoYnMsIHNtYXJ0RGF0YS0+em9vbV93ZWFrX3Ntb290aF9zY2FsZSk7CiAKICAgICByZXR1
cm4gYnM7CiB9CiAKLXN0YXRpYyB2b2lkIF9ld2tfdmlld19zaW5nbGVfc21hcnRfcmVzaXplKEV2
YXNfT2JqZWN0KiBvLCBFdmFzX0Nvb3JkIHcsIEV2YXNfQ29vcmQgaCkKK3N0YXRpYyB2b2lkIF9l
d2tfdmlld19zaW5nbGVfc21hcnRfcmVzaXplKEV2YXNfT2JqZWN0KiBld2tTaW5nbGUsIEV2YXNf
Q29vcmQgd2lkdGgsIEV2YXNfQ29vcmQgaGVpZ2h0KQogewotICAgIEV3a19WaWV3X1NtYXJ0X0Rh
dGEqIHNkID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGV2YXNfb2JqZWN0X3Nt
YXJ0X2RhdGFfZ2V0KG8pKTsKLSAgICBfcGFyZW50X3NjLnNjLnJlc2l6ZShvLCB3LCBoKTsKKyAg
ICBFd2tfVmlld19TbWFydF9EYXRhKiBzZCA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0Rh
dGEqPihldmFzX29iamVjdF9zbWFydF9kYXRhX2dldChld2tTaW5nbGUpKTsKKyAgICBfcGFyZW50
X3NjLnNjLnJlc2l6ZShld2tTaW5nbGUsIHdpZHRoLCBoZWlnaHQpOwogCiAgICAgaWYgKCFzZCkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gdGhlc2Ugc2hvdWxkIGJlIHF1ZXVlZCBhbmQgcHJv
Y2Vzc2VkIGluIGNhbGN1bGF0ZSBhcyB3ZWxsIQotICAgIGV2YXNfb2JqZWN0X2ltYWdlX3NpemVf
c2V0KHNkLT5iYWNraW5nX3N0b3JlLCB3LCBoKTsKKyAgICBldmFzX29iamVjdF9pbWFnZV9zaXpl
X3NldChzZC0+YmFja2luZ19zdG9yZSwgd2lkdGgsIGhlaWdodCk7CiAgICAgaWYgKHNkLT5hbmlt
YXRlZF96b29tLnpvb20uY3VycmVudCA8IDAuMDAwMDEpIHsKICAgICAgICAgRXZhc19PYmplY3Qq
IGNsaXAgPSBldmFzX29iamVjdF9jbGlwX2dldChzZC0+YmFja2luZ19zdG9yZSk7CiAgICAgICAg
IEV2YXNfQ29vcmQgeCwgeSwgY3csIGNoOwotICAgICAgICBldmFzX29iamVjdF9pbWFnZV9maWxs
X3NldChzZC0+YmFja2luZ19zdG9yZSwgMCwgMCwgdywgaCk7CisgICAgICAgIGV2YXNfb2JqZWN0
X2ltYWdlX2ZpbGxfc2V0KHNkLT5iYWNraW5nX3N0b3JlLCAwLCAwLCB3aWR0aCwgaGVpZ2h0KTsK
ICAgICAgICAgZXZhc19vYmplY3RfZ2VvbWV0cnlfZ2V0KHNkLT5iYWNraW5nX3N0b3JlLCAmeCwg
JnksIDAsIDApOwogICAgICAgICBldmFzX29iamVjdF9tb3ZlKGNsaXAsIHgsIHkpOwogICAgICAg
ICBld2tfZnJhbWVfY29udGVudHNfc2l6ZV9nZXQoc2QtPm1haW5fZnJhbWUsICZjdywgJmNoKTsK
LSAgICAgICAgaWYgKHcgPiBjdykKLSAgICAgICAgICAgIHcgPSBjdzsKLSAgICAgICAgaWYgKGgg
PiBjaCkKLSAgICAgICAgICAgIGggPSBjaDsKLSAgICAgICAgZXZhc19vYmplY3RfcmVzaXplKGNs
aXAsIHcsIGgpOworICAgICAgICBpZiAod2lkdGggPiBjdykKKyAgICAgICAgICAgIHdpZHRoID0g
Y3c7CisgICAgICAgIGlmIChoZWlnaHQgPiBjaCkKKyAgICAgICAgICAgIGhlaWdodCA9IGNoOwor
ICAgICAgICBldmFzX29iamVjdF9yZXNpemUoY2xpcCwgd2lkdGgsIGhlaWdodCk7CiAgICAgfQog
fQogCi1zdGF0aWMgaW5saW5lIHZvaWQgX2V3a192aWV3XzRiX21vdmVfcmVnaW9uX3VwKHVpbnQz
Ml90KiBpbWFnZSwgc2l6ZV90IHJvd3MsIHNpemVfdCB4LCBzaXplX3QgeSwgc2l6ZV90IHcsIHNp
emVfdCBoLCBzaXplX3Qgcm93c2l6ZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3ZpZXdfNGJf
bW92ZV9yZWdpb25fdXAodWludDMyX3QqIGltYWdlLCBzaXplX3Qgcm93cywgc2l6ZV90IHgsIHNp
emVfdCB5LCBzaXplX3Qgd2lkdGgsIHNpemVfdCBoZWlnaHQsIHNpemVfdCByb3dTaXplKQogewog
ICAgIHVpbnQzMl90KiBzcmM7CiAgICAgdWludDMyX3QqIGRzdDsKIAotICAgIGRzdCA9IGltYWdl
ICsgeCArIHkgKiByb3dzaXplOwotICAgIHNyYyA9IGRzdCArIHJvd3MgKiByb3dzaXplOwotICAg
IGggLT0gcm93czsKKyAgICBkc3QgPSBpbWFnZSArIHggKyB5ICogcm93U2l6ZTsKKyAgICBzcmMg
PSBkc3QgKyByb3dzICogcm93U2l6ZTsKKyAgICBoZWlnaHQgLT0gcm93czsKIAotICAgIGZvciAo
OyBoID4gMDsgaC0tLCBkc3QgKz0gcm93c2l6ZSwgc3JjICs9IHJvd3NpemUpCi0gICAgICAgIG1l
bWNweShkc3QsIHNyYywgdyAqIDQpOworICAgIGZvciAoOyBoZWlnaHQgPiAwOyBoZWlnaHQtLSwg
ZHN0ICs9IHJvd1NpemUsIHNyYyArPSByb3dTaXplKQorICAgICAgICBtZW1jcHkoZHN0LCBzcmMs
IHdpZHRoICogNCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3ZpZXdfNGJfbW92ZV9y
ZWdpb25fZG93bih1aW50MzJfdCogaW1hZ2UsIHNpemVfdCByb3dzLCBzaXplX3QgeCwgc2l6ZV90
IHksIHNpemVfdCB3LCBzaXplX3QgaCwgc2l6ZV90IHJvd3NpemUpCitzdGF0aWMgaW5saW5lIHZv
aWQgX2V3a192aWV3XzRiX21vdmVfcmVnaW9uX2Rvd24odWludDMyX3QqIGltYWdlLCBzaXplX3Qg
cm93cywgc2l6ZV90IHgsIHNpemVfdCB5LCBzaXplX3Qgd2lkdGgsIHNpemVfdCBoZWlnaHQsIHNp
emVfdCByb3dTaXplKQogewogICAgIHVpbnQzMl90KiBzcmM7CiAgICAgdWludDMyX3QqIGRzdDsK
IAotICAgIGggLT0gcm93czsKLSAgICBzcmMgPSBpbWFnZSArIHggKyAoeSArIGggLSAxKSAqIHJv
d3NpemU7Ci0gICAgZHN0ID0gc3JjICsgcm93cyAqIHJvd3NpemU7CisgICAgaGVpZ2h0IC09IHJv
d3M7CisgICAgc3JjID0gaW1hZ2UgKyB4ICsgKHkgKyBoZWlnaHQgLSAxKSAqIHJvd1NpemU7Cisg
ICAgZHN0ID0gc3JjICsgcm93cyAqIHJvd1NpemU7CiAKLSAgICBmb3IgKDsgaCA+IDA7IGgtLSwg
ZHN0IC09IHJvd3NpemUsIHNyYyAtPSByb3dzaXplKQotICAgICAgICBtZW1jcHkoZHN0LCBzcmMs
IHcgKiA0KTsKKyAgICBmb3IgKDsgaGVpZ2h0ID4gMDsgaGVpZ2h0LS0sIGRzdCAtPSByb3dTaXpl
LCBzcmMgLT0gcm93U2l6ZSkKKyAgICAgICAgbWVtY3B5KGRzdCwgc3JjLCB3aWR0aCAqIDQpOwog
fQogCiBzdGF0aWMgaW5saW5lIHZvaWQgX2V3a192aWV3XzRiX21vdmVfbGluZV9sZWZ0KHVpbnQz
Ml90KiBkc3QsIGNvbnN0IHVpbnQzMl90KiBzcmMsIHNpemVfdCBjb3VudCkKQEAgLTEzNiw5MCAr
MTM0LDkwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3ZpZXdfNGJfbW92ZV9saW5lX3JpZ2h0
KHVpbnQzMl90KiBkc3QsIHVpbnQzMl90KiBzcmMsIHNpCiAgICAgICAgICpkc3QgPSAqc3JjOwog
fQogCi1zdGF0aWMgaW5saW5lIHZvaWQgX2V3a192aWV3XzRiX21vdmVfcmVnaW9uX2xlZnQodWlu
dDMyX3QqIGltYWdlLCBzaXplX3QgY29scywgc2l6ZV90IHgsIHNpemVfdCB5LCBzaXplX3Qgdywg
c2l6ZV90IGgsIHNpemVfdCByb3dzaXplKQorc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdmlld180
Yl9tb3ZlX3JlZ2lvbl9sZWZ0KHVpbnQzMl90KiBpbWFnZSwgc2l6ZV90IGNvbHMsIHNpemVfdCB4
LCBzaXplX3QgeSwgc2l6ZV90IHdpZHRoLCBzaXplX3QgaGVpZ2h0LCBzaXplX3Qgcm93U2l6ZSkK
IHsKICAgICB1aW50MzJfdCogc3JjOwogICAgIHVpbnQzMl90KiBkc3Q7CiAKLSAgICBkc3QgPSBp
bWFnZSArIHggKyB5ICogcm93c2l6ZTsKKyAgICBkc3QgPSBpbWFnZSArIHggKyB5ICogcm93U2l6
ZTsKICAgICBzcmMgPSBkc3QgKyBjb2xzOwotICAgIHcgLT0gY29sczsKKyAgICB3aWR0aCAtPSBj
b2xzOwogCi0gICAgZm9yICg7IGggPiAwOyBoLS0sIGRzdCArPSByb3dzaXplLCBzcmMgKz0gcm93
c2l6ZSkKLSAgICAgICAgX2V3a192aWV3XzRiX21vdmVfbGluZV9sZWZ0KGRzdCwgc3JjLCB3KTsK
KyAgICBmb3IgKDsgaGVpZ2h0ID4gMDsgaGVpZ2h0LS0sIGRzdCArPSByb3dTaXplLCBzcmMgKz0g
cm93U2l6ZSkKKyAgICAgICAgX2V3a192aWV3XzRiX21vdmVfbGluZV9sZWZ0KGRzdCwgc3JjLCB3
aWR0aCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3ZpZXdfNGJfbW92ZV9yZWdpb25f
cmlnaHQodWludDMyX3QqIGltYWdlLCBzaXplX3QgY29scywgc2l6ZV90IHgsIHNpemVfdCB5LCBz
aXplX3Qgdywgc2l6ZV90IGgsIHNpemVfdCByb3dzaXplKQorc3RhdGljIGlubGluZSB2b2lkIF9l
d2tfdmlld180Yl9tb3ZlX3JlZ2lvbl9yaWdodCh1aW50MzJfdCogaW1hZ2UsIHNpemVfdCBjb2x1
bW5zLCBzaXplX3QgeCwgc2l6ZV90IHksIHNpemVfdCB3aWR0aCwgc2l6ZV90IGhlaWdodCwgc2l6
ZV90IHJvd1NpemUpCiB7CiAgICAgdWludDMyX3QqIHNyYzsKICAgICB1aW50MzJfdCogZHN0Owog
Ci0gICAgdyAtPSBjb2xzOwotICAgIHNyYyA9IGltYWdlICsgKHggKyB3IC0gMSkgKyB5ICogcm93
c2l6ZTsKLSAgICBkc3QgPSBzcmMgKyBjb2xzOworICAgIHdpZHRoIC09IGNvbHVtbnM7CisgICAg
c3JjID0gaW1hZ2UgKyAoeCArIHdpZHRoIC0gMSkgKyB5ICogcm93U2l6ZTsKKyAgICBkc3QgPSBz
cmMgKyBjb2x1bW5zOwogCi0gICAgZm9yICg7IGggPiAwOyBoLS0sIGRzdCArPSByb3dzaXplLCBz
cmMgKz0gcm93c2l6ZSkKLSAgICAgICAgX2V3a192aWV3XzRiX21vdmVfbGluZV9yaWdodChkc3Qs
IHNyYywgdyk7CisgICAgZm9yICg7IGhlaWdodCA+IDA7IGhlaWdodC0tLCBkc3QgKz0gcm93U2l6
ZSwgc3JjICs9IHJvd1NpemUpCisgICAgICAgIF9ld2tfdmlld180Yl9tb3ZlX2xpbmVfcmlnaHQo
ZHN0LCBzcmMsIHdpZHRoKTsKIH0KIAogLyogY2F0Y2gtYWxsIGZ1bmN0aW9uLCBub3QgYXMgb3B0
aW1pemVkIGFzIHRoZSBvdGhlcnMsIGJ1dCBkb2VzIHRoZSB3b3JrLiAqLwotc3RhdGljIGlubGlu
ZSB2b2lkIF9ld2tfdmlld180Yl9tb3ZlX3JlZ2lvbih1aW50MzJfdCogaW1hZ2UsIGludCBkeCwg
aW50IGR5LCBzaXplX3QgeCwgc2l6ZV90IHksIHNpemVfdCB3LCBzaXplX3QgaCwgc2l6ZV90IHJv
d3NpemUpCitzdGF0aWMgaW5saW5lIHZvaWQgX2V3a192aWV3XzRiX21vdmVfcmVnaW9uKHVpbnQz
Ml90KiBpbWFnZSwgaW50IGRlbHRhWCwgaW50IGRlbHRhWSwgc2l6ZV90IHgsIHNpemVfdCB5LCBz
aXplX3Qgd2lkdGgsIHNpemVfdCBoZWlnaHQsIHNpemVfdCByb3dTaXplKQogewogICAgIHVpbnQz
Ml90KiBzcmM7CiAgICAgdWludDMyX3QqIGRzdDsKIAotICAgIGlmIChkeSA8IDApIHsKLSAgICAg
ICAgaCArPSBkeTsKLSAgICAgICAgZHN0ID0gaW1hZ2UgKyB4ICsgeSAqIHJvd3NpemU7Ci0gICAg
ICAgIHNyYyA9IGRzdCAtIGR5ICogcm93c2l6ZTsKLSAgICAgICAgaWYgKGR4IDw9IDApIHsKLSAg
ICAgICAgICAgIHcgKz0gZHg7Ci0gICAgICAgICAgICBzcmMgLT0gZHg7Ci0gICAgICAgICAgICBm
b3IgKDsgaCA+IDA7IGgtLSwgZHN0ICs9IHJvd3NpemUsIHNyYyArPSByb3dzaXplKQotICAgICAg
ICAgICAgICAgIF9ld2tfdmlld180Yl9tb3ZlX2xpbmVfbGVmdChkc3QsIHNyYywgdyk7CisgICAg
aWYgKGRlbHRhWSA8IDApIHsKKyAgICAgICAgaGVpZ2h0ICs9IGRlbHRhWTsKKyAgICAgICAgZHN0
ID0gaW1hZ2UgKyB4ICsgeSAqIHJvd1NpemU7CisgICAgICAgIHNyYyA9IGRzdCAtIGRlbHRhWSAq
IHJvd1NpemU7CisgICAgICAgIGlmIChkZWx0YVggPD0gMCkgeworICAgICAgICAgICAgd2lkdGgg
Kz0gZGVsdGFYOworICAgICAgICAgICAgc3JjIC09IGRlbHRhWDsKKyAgICAgICAgICAgIGZvciAo
OyBoZWlnaHQgPiAwOyBoZWlnaHQtLSwgZHN0ICs9IHJvd1NpemUsIHNyYyArPSByb3dTaXplKQor
ICAgICAgICAgICAgICAgIF9ld2tfdmlld180Yl9tb3ZlX2xpbmVfbGVmdChkc3QsIHNyYywgd2lk
dGgpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdyAtPSBkeDsKLSAgICAgICAgICAg
IHNyYyArPSB3IC0gMTsKLSAgICAgICAgICAgIGRzdCArPSB3ICsgZHggLTE7Ci0gICAgICAgICAg
ICBmb3IgKDsgaCA+IDA7IGgtLSwgZHN0ICs9IHJvd3NpemUsIHNyYyArPSByb3dzaXplKQotICAg
ICAgICAgICAgICAgIF9ld2tfdmlld180Yl9tb3ZlX2xpbmVfcmlnaHQoZHN0LCBzcmMsIHcpOwor
ICAgICAgICAgICAgd2lkdGggLT0gZGVsdGFYOworICAgICAgICAgICAgc3JjICs9IHdpZHRoIC0g
MTsKKyAgICAgICAgICAgIGRzdCArPSB3aWR0aCArIGRlbHRhWCAtMTsKKyAgICAgICAgICAgIGZv
ciAoOyBoZWlnaHQgPiAwOyBoZWlnaHQtLSwgZHN0ICs9IHJvd1NpemUsIHNyYyArPSByb3dTaXpl
KQorICAgICAgICAgICAgICAgIF9ld2tfdmlld180Yl9tb3ZlX2xpbmVfcmlnaHQoZHN0LCBzcmMs
IHdpZHRoKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAgIGggLT0gZHk7Ci0gICAg
ICAgIHNyYyA9IGltYWdlICsgeCArICh5ICsgaCAtIDEpICogcm93c2l6ZTsKLSAgICAgICAgZHN0
ID0gc3JjICsgZHkgKiByb3dzaXplOwotICAgICAgICBpZiAoZHggPD0gMCkgewotICAgICAgICAg
ICAgdyArPSBkeDsKLSAgICAgICAgICAgIHNyYyAtPSBkeDsKLSAgICAgICAgICAgIGZvciAoOyBo
ID4gMDsgaC0tLCBkc3QgLT0gcm93c2l6ZSwgc3JjIC09IHJvd3NpemUpCi0gICAgICAgICAgICAg
ICAgX2V3a192aWV3XzRiX21vdmVfbGluZV9sZWZ0KGRzdCwgc3JjLCB3KTsKKyAgICAgICAgaGVp
Z2h0IC09IGRlbHRhWTsKKyAgICAgICAgc3JjID0gaW1hZ2UgKyB4ICsgKHkgKyBoZWlnaHQgLSAx
KSAqIHJvd1NpemU7CisgICAgICAgIGRzdCA9IHNyYyArIGRlbHRhWSAqIHJvd1NpemU7CisgICAg
ICAgIGlmIChkZWx0YVggPD0gMCkgeworICAgICAgICAgICAgd2lkdGggKz0gZGVsdGFYOworICAg
ICAgICAgICAgc3JjIC09IGRlbHRhWDsKKyAgICAgICAgICAgIGZvciAoOyBoZWlnaHQgPiAwOyBo
ZWlnaHQtLSwgZHN0IC09IHJvd1NpemUsIHNyYyAtPSByb3dTaXplKQorICAgICAgICAgICAgICAg
IF9ld2tfdmlld180Yl9tb3ZlX2xpbmVfbGVmdChkc3QsIHNyYywgd2lkdGgpOwogICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgdyAtPSBkeDsKLSAgICAgICAgICAgIHNyYyArPSB3IC0gMTsK
LSAgICAgICAgICAgIGRzdCArPSB3ICsgZHggLSAxOwotICAgICAgICAgICAgZm9yICg7IGggPiAw
OyBoLS0sIGRzdCAtPSByb3dzaXplLCBzcmMgLT0gcm93c2l6ZSkKLSAgICAgICAgICAgICAgICBf
ZXdrX3ZpZXdfNGJfbW92ZV9saW5lX3JpZ2h0KGRzdCwgc3JjLCB3KTsKKyAgICAgICAgICAgIHdp
ZHRoIC09IGRlbHRhWDsKKyAgICAgICAgICAgIHNyYyArPSB3aWR0aCAtIDE7CisgICAgICAgICAg
ICBkc3QgKz0gd2lkdGggKyBkZWx0YVggLSAxOworICAgICAgICAgICAgZm9yICg7IGhlaWdodCA+
IDA7IGhlaWdodC0tLCBkc3QgLT0gcm93U2l6ZSwgc3JjIC09IHJvd1NpemUpCisgICAgICAgICAg
ICAgICAgX2V3a192aWV3XzRiX21vdmVfbGluZV9yaWdodChkc3QsIHNyYywgd2lkdGgpOwogICAg
ICAgICB9CiAgICAgfQogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgX2V3a192aWV3X3NpbmdsZV9z
Y3JvbGxfcHJvY2Vzc19zaW5nbGUoRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QsIHZvaWQqIHBpeGVs
cywgRXZhc19Db29yZCBvdywgRXZhc19Db29yZCBvaCwgY29uc3QgRXdrX1Njcm9sbF9SZXF1ZXN0
KiBzcikKK3N0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3ZpZXdfc2luZ2xlX3Njcm9sbF9wcm9jZXNz
X3NpbmdsZShFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEsIHZvaWQqIHBpeGVscywgRXZh
c19Db29yZCB3aWR0aCwgRXZhc19Db29yZCBoZWlnaHQsIGNvbnN0IEV3a19TY3JvbGxfUmVxdWVz
dCogc2Nyb2xsUmVxdWVzdCkKIHsKICAgICBFdmFzX0Nvb3JkIHN4LCBzeSwgc3csIHNoOwogCiAg
ICAgREJHKCIlZCwlZCArICVkLCVkICUrMDNkLCUrMDNkLCBzdG9yZTogJXAgJWR4JWQiLAotICAg
ICAgICBzci0+eCwgc3ItPnksIHNyLT53LCBzci0+aCwgc3ItPmR4LCBzci0+ZHksIHBpeGVscywg
b3csIG9oKTsKKyAgICAgICAgc2Nyb2xsUmVxdWVzdC0+eCwgc2Nyb2xsUmVxdWVzdC0+eSwgc2Ny
b2xsUmVxdWVzdC0+dywgc2Nyb2xsUmVxdWVzdC0+aCwgc2Nyb2xsUmVxdWVzdC0+ZHgsIHNjcm9s
bFJlcXVlc3QtPmR5LCBwaXhlbHMsIHdpZHRoLCBoZWlnaHQpOwogCi0gICAgc3ggPSBzci0+eDsK
LSAgICBzeSA9IHNyLT55OwotICAgIHN3ID0gc3ItPnc7Ci0gICAgc2ggPSBzci0+aDsKKyAgICBz
eCA9IHNjcm9sbFJlcXVlc3QtPng7CisgICAgc3kgPSBzY3JvbGxSZXF1ZXN0LT55OworICAgIHN3
ID0gc2Nyb2xsUmVxdWVzdC0+dzsKKyAgICBzaCA9IHNjcm9sbFJlcXVlc3QtPmg7CiAKLSAgICBp
ZiAoYWJzKHNyLT5keCkgPj0gc3cgfHwgYWJzKHNyLT5keSkgPj0gc2gpIHsKKyAgICBpZiAoYWJz
KHNjcm9sbFJlcXVlc3QtPmR4KSA+PSBzdyB8fCBhYnMoc2Nyb2xsUmVxdWVzdC0+ZHkpID49IHNo
KSB7CiAgICAgICAgIC8qIGRvdWJ0IHdlYmtpdCB3b3VsZCBiZSBzbyBzdHVwaWQuLi4gKi8KICAg
ICAgICAgREJHKCJmdWxsIHBhZ2Ugc2Nyb2xsICUrMDNkLCUrMDNkLiBjb252ZXJ0IHRvIHJlcGFp
bnQgJWQsJWQgKyAlZHglZCIsCi0gICAgICAgICAgICBzci0+ZHgsIHNyLT5keSwgc3gsIHN5LCBz
dywgc2gpOwotICAgICAgICBld2tfdmlld19yZXBhaW50X2FkZChzZC0+X3ByaXYsIHN4LCBzeSwg
c3csIHNoKTsKKyAgICAgICAgICAgIHNjcm9sbFJlcXVlc3QtPmR4LCBzY3JvbGxSZXF1ZXN0LT5k
eSwgc3gsIHN5LCBzdywgc2gpOworICAgICAgICBld2tfdmlld19yZXBhaW50X2FkZChzbWFydERh
dGEtPl9wcml2LCBzeCwgc3ksIHN3LCBzaCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAg
LTIzMiwxMCArMjMwLDEwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3ZpZXdfc2luZ2xlX3Nj
cm9sbF9wcm9jZXNzX3NpbmdsZShFd2tfVmlld19TbWFydF9EYXRhKiBzCiAgICAgICAgIHN5ID0g
MDsKICAgICB9CiAKLSAgICBpZiAoc3ggKyBzdyA+IG93KQotICAgICAgICBzdyA9IG93IC0gc3g7
Ci0gICAgaWYgKHN5ICsgc2ggPiBvaCkKLSAgICAgICAgc2ggPSBvaCAtIHN5OworICAgIGlmIChz
eCArIHN3ID4gd2lkdGgpCisgICAgICAgIHN3ID0gd2lkdGggLSBzeDsKKyAgICBpZiAoc3kgKyBz
aCA+IGhlaWdodCkKKyAgICAgICAgc2ggPSBoZWlnaHQgLSBzeTsKIAogICAgIGlmIChzdyA8IDAp
CiAgICAgICAgIHN3ID0gMDsKQEAgLTI0Myw4MyArMjQxLDgzIEBAIHN0YXRpYyBpbmxpbmUgdm9p
ZCBfZXdrX3ZpZXdfc2luZ2xlX3Njcm9sbF9wcm9jZXNzX3NpbmdsZShFd2tfVmlld19TbWFydF9E
YXRhKiBzCiAgICAgICAgIHNoID0gMDsKIAogICAgIEVJTkFfU0FGRVRZX09OX1RSVUVfUkVUVVJO
KCFzdyB8fCAhc2gpOwotICAgIGlmICghc3ItPmR4KSB7Ci0gICAgICAgIGlmIChzci0+ZHkgPCAw
KSB7CisgICAgaWYgKCFzY3JvbGxSZXF1ZXN0LT5keCkgeworICAgICAgICBpZiAoc2Nyb2xsUmVx
dWVzdC0+ZHkgPCAwKSB7CiAgICAgICAgICAgICBEQkcoInNjcm9sbCB1cDogJSswM2QsJSswM2Qg
dXBkYXRlPSVkLCVkKyVkeCVkLCAiCiAgICAgICAgICAgICAgICAgInJlcGFpbnQ9JWQsJWQrJWR4
JWQiLAotICAgICAgICAgICAgICAgIHNyLT5keCwgc3ItPmR5LCBzeCwgc3ksIHN3LCBzaCArIHNy
LT5keSwKLSAgICAgICAgICAgICAgICBzeCwgc3kgKyBzaCArIHNyLT5keSwgc3csIC1zci0+ZHkp
OworICAgICAgICAgICAgICAgIHNjcm9sbFJlcXVlc3QtPmR4LCBzY3JvbGxSZXF1ZXN0LT5keSwg
c3gsIHN5LCBzdywgc2ggKyBzY3JvbGxSZXF1ZXN0LT5keSwKKyAgICAgICAgICAgICAgICBzeCwg
c3kgKyBzaCArIHNjcm9sbFJlcXVlc3QtPmR5LCBzdywgLXNjcm9sbFJlcXVlc3QtPmR5KTsKIAog
ICAgICAgICAgICAgX2V3a192aWV3XzRiX21vdmVfcmVnaW9uX3VwCi0gICAgICAgICAgICAgICAg
KHN0YXRpY19jYXN0PHVpbnQzMl90Kj4ocGl4ZWxzKSwgLXNyLT5keSwgc3gsIHN5LCBzdywgc2gs
IG93KTsKKyAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dWludDMyX3QqPihwaXhlbHMpLCAt
c2Nyb2xsUmVxdWVzdC0+ZHksIHN4LCBzeSwgc3csIHNoLCB3aWR0aCk7CiAgICAgICAgICAgICBl
dmFzX29iamVjdF9pbWFnZV9kYXRhX3VwZGF0ZV9hZGQKLSAgICAgICAgICAgICAgICAoc2QtPmJh
Y2tpbmdfc3RvcmUsIHN4LCBzeSwgc3csIHNoICsgc3ItPmR5KTsKKyAgICAgICAgICAgICAgICAo
c21hcnREYXRhLT5iYWNraW5nX3N0b3JlLCBzeCwgc3ksIHN3LCBzaCArIHNjcm9sbFJlcXVlc3Qt
PmR5KTsKIAotICAgICAgICAgICAgZXdrX3ZpZXdfcmVwYWludF9hZGQoc2QtPl9wcml2LCBzeCwg
c3kgKyBzaCArIHNyLT5keSwgc3csIC1zci0+ZHkpOwotICAgICAgICB9IGVsc2UgaWYgKHNyLT5k
eSA+IDApIHsKKyAgICAgICAgICAgIGV3a192aWV3X3JlcGFpbnRfYWRkKHNtYXJ0RGF0YS0+X3By
aXYsIHN4LCBzeSArIHNoICsgc2Nyb2xsUmVxdWVzdC0+ZHksIHN3LCAtc2Nyb2xsUmVxdWVzdC0+
ZHkpOworICAgICAgICB9IGVsc2UgaWYgKHNjcm9sbFJlcXVlc3QtPmR5ID4gMCkgewogICAgICAg
ICAgICAgREJHKCJzY3JvbGwgZG93bjogJSswM2QsJSswM2QgdXBkYXRlPSVkLCVkKyVkeCVkLCAi
CiAgICAgICAgICAgICAgICAgInJlcGFpbnQ9JWQsJWQrJWR4JWQiLAotICAgICAgICAgICAgICAg
IHNyLT5keCwgc3ItPmR5LCBzeCwgc3kgKyBzci0+ZHksIHN3LCBzaCAtIHNyLT5keSwKLSAgICAg
ICAgICAgICAgICBzeCwgc3ksIHN3LCBzci0+ZHkpOworICAgICAgICAgICAgICAgIHNjcm9sbFJl
cXVlc3QtPmR4LCBzY3JvbGxSZXF1ZXN0LT5keSwgc3gsIHN5ICsgc2Nyb2xsUmVxdWVzdC0+ZHks
IHN3LCBzaCAtIHNjcm9sbFJlcXVlc3QtPmR5LAorICAgICAgICAgICAgICAgIHN4LCBzeSwgc3cs
IHNjcm9sbFJlcXVlc3QtPmR5KTsKIAogICAgICAgICAgICAgX2V3a192aWV3XzRiX21vdmVfcmVn
aW9uX2Rvd24KLSAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dWludDMyX3QqPihwaXhlbHMp
LCBzci0+ZHksIHN4LCBzeSwgc3csIHNoLCBvdyk7CisgICAgICAgICAgICAgICAgKHN0YXRpY19j
YXN0PHVpbnQzMl90Kj4ocGl4ZWxzKSwgc2Nyb2xsUmVxdWVzdC0+ZHksIHN4LCBzeSwgc3csIHNo
LCB3aWR0aCk7CiAgICAgICAgICAgICBldmFzX29iamVjdF9pbWFnZV9kYXRhX3VwZGF0ZV9hZGQK
LSAgICAgICAgICAgICAgICAoc2QtPmJhY2tpbmdfc3RvcmUsIHN4LCBzeSArIHNyLT5keSwgc3cs
IHNoIC0gc3ItPmR5KTsKKyAgICAgICAgICAgICAgICAoc21hcnREYXRhLT5iYWNraW5nX3N0b3Jl
LCBzeCwgc3kgKyBzY3JvbGxSZXF1ZXN0LT5keSwgc3csIHNoIC0gc2Nyb2xsUmVxdWVzdC0+ZHkp
OwogCi0gICAgICAgICAgICBld2tfdmlld19yZXBhaW50X2FkZChzZC0+X3ByaXYsIHN4LCBzeSwg
c3csIHNyLT5keSk7CisgICAgICAgICAgICBld2tfdmlld19yZXBhaW50X2FkZChzbWFydERhdGEt
Pl9wcml2LCBzeCwgc3ksIHN3LCBzY3JvbGxSZXF1ZXN0LT5keSk7CiAgICAgICAgIH0KLSAgICB9
IGVsc2UgaWYgKCFzci0+ZHkpIHsKLSAgICAgICAgaWYgKHNyLT5keCA8IDApIHsKKyAgICB9IGVs
c2UgaWYgKCFzY3JvbGxSZXF1ZXN0LT5keSkgeworICAgICAgICBpZiAoc2Nyb2xsUmVxdWVzdC0+
ZHggPCAwKSB7CiAgICAgICAgICAgICBEQkcoInNjcm9sbCBsZWZ0OiAlKzAzZCwlKzAzZCB1cGRh
dGU9JWQsJWQrJWR4JWQsICIKICAgICAgICAgICAgICAgICAicmVwYWludD0lZCwlZCslZHglZCIs
Ci0gICAgICAgICAgICAgICAgc3ItPmR4LCBzci0+ZHksIHN4LCBzeSwgc3cgKyBzci0+ZHgsIHNo
LAotICAgICAgICAgICAgICAgIHN4ICsgc3cgKyBzci0+ZHgsIHN5LCAtc3ItPmR4LCBzaCk7Cisg
ICAgICAgICAgICAgICAgc2Nyb2xsUmVxdWVzdC0+ZHgsIHNjcm9sbFJlcXVlc3QtPmR5LCBzeCwg
c3ksIHN3ICsgc2Nyb2xsUmVxdWVzdC0+ZHgsIHNoLAorICAgICAgICAgICAgICAgIHN4ICsgc3cg
KyBzY3JvbGxSZXF1ZXN0LT5keCwgc3ksIC1zY3JvbGxSZXF1ZXN0LT5keCwgc2gpOwogCiAgICAg
ICAgICAgICBfZXdrX3ZpZXdfNGJfbW92ZV9yZWdpb25fbGVmdAotICAgICAgICAgICAgICAgIChz
dGF0aWNfY2FzdDx1aW50MzJfdCo+KHBpeGVscyksIC1zci0+ZHgsIHN4LCBzeSwgc3csIHNoLCBv
dyk7CisgICAgICAgICAgICAgICAgKHN0YXRpY19jYXN0PHVpbnQzMl90Kj4ocGl4ZWxzKSwgLXNj
cm9sbFJlcXVlc3QtPmR4LCBzeCwgc3ksIHN3LCBzaCwgd2lkdGgpOwogICAgICAgICAgICAgZXZh
c19vYmplY3RfaW1hZ2VfZGF0YV91cGRhdGVfYWRkCi0gICAgICAgICAgICAgICAgKHNkLT5iYWNr
aW5nX3N0b3JlLCBzeCwgc3ksIHN3ICsgc3ItPmR4LCBzaCk7CisgICAgICAgICAgICAgICAgKHNt
YXJ0RGF0YS0+YmFja2luZ19zdG9yZSwgc3gsIHN5LCBzdyArIHNjcm9sbFJlcXVlc3QtPmR4LCBz
aCk7CiAKLSAgICAgICAgICAgIGV3a192aWV3X3JlcGFpbnRfYWRkKHNkLT5fcHJpdiwgc3ggKyBz
dyArIHNyLT5keCwgc3ksIC1zci0+ZHgsIHNoKTsKLSAgICAgICAgfSBlbHNlIGlmIChzci0+ZHgg
PiAwKSB7CisgICAgICAgICAgICBld2tfdmlld19yZXBhaW50X2FkZChzbWFydERhdGEtPl9wcml2
LCBzeCArIHN3ICsgc2Nyb2xsUmVxdWVzdC0+ZHgsIHN5LCAtc2Nyb2xsUmVxdWVzdC0+ZHgsIHNo
KTsKKyAgICAgICAgfSBlbHNlIGlmIChzY3JvbGxSZXF1ZXN0LT5keCA+IDApIHsKICAgICAgICAg
ICAgIERCRygic2Nyb2xsIHVwOiAlKzAzZCwlKzAzZCB1cGRhdGU9JWQsJWQrJWR4JWQsICIKICAg
ICAgICAgICAgICAgICAicmVwYWludD0lZCwlZCslZHglZCIsCi0gICAgICAgICAgICAgICAgc3It
PmR4LCBzci0+ZHksIHN4ICsgc3ItPmR4LCBzeSwgc3cgLSBzci0+ZHgsIHNoLAotICAgICAgICAg
ICAgICAgIHN4LCBzeSwgc3ItPmR4LCBzaCk7CisgICAgICAgICAgICAgICAgc2Nyb2xsUmVxdWVz
dC0+ZHgsIHNjcm9sbFJlcXVlc3QtPmR5LCBzeCArIHNjcm9sbFJlcXVlc3QtPmR4LCBzeSwgc3cg
LSBzY3JvbGxSZXF1ZXN0LT5keCwgc2gsCisgICAgICAgICAgICAgICAgc3gsIHN5LCBzY3JvbGxS
ZXF1ZXN0LT5keCwgc2gpOwogCiAgICAgICAgICAgICBfZXdrX3ZpZXdfNGJfbW92ZV9yZWdpb25f
cmlnaHQKLSAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dWludDMyX3QqPihwaXhlbHMpLCBz
ci0+ZHgsIHN4LCBzeSwgc3csIHNoLCBvdyk7CisgICAgICAgICAgICAgICAgKHN0YXRpY19jYXN0
PHVpbnQzMl90Kj4ocGl4ZWxzKSwgc2Nyb2xsUmVxdWVzdC0+ZHgsIHN4LCBzeSwgc3csIHNoLCB3
aWR0aCk7CiAgICAgICAgICAgICBldmFzX29iamVjdF9pbWFnZV9kYXRhX3VwZGF0ZV9hZGQKLSAg
ICAgICAgICAgICAgICAoc2QtPmJhY2tpbmdfc3RvcmUsIHN4ICsgc3ItPmR4LCBzeSwgc3cgLSBz
ci0+ZHgsIHNoKTsKKyAgICAgICAgICAgICAgICAoc21hcnREYXRhLT5iYWNraW5nX3N0b3JlLCBz
eCArIHNjcm9sbFJlcXVlc3QtPmR4LCBzeSwgc3cgLSBzY3JvbGxSZXF1ZXN0LT5keCwgc2gpOwog
Ci0gICAgICAgICAgICBld2tfdmlld19yZXBhaW50X2FkZChzZC0+X3ByaXYsIHN4LCBzeSwgc3It
PmR4LCBzaCk7CisgICAgICAgICAgICBld2tfdmlld19yZXBhaW50X2FkZChzbWFydERhdGEtPl9w
cml2LCBzeCwgc3ksIHNjcm9sbFJlcXVlc3QtPmR4LCBzaCk7CiAgICAgICAgIH0KICAgICB9IGVs
c2UgewogICAgICAgICBFdmFzX0Nvb3JkIG14LCBteSwgbXcsIG1oLCBheCwgYXksIGF3LCBhaCwg
YngsIGJ5LCBidywgYmg7CiAKLSAgICAgICAgaWYgKHNyLT5keCA8IDApIHsKKyAgICAgICAgaWYg
KHNjcm9sbFJlcXVlc3QtPmR4IDwgMCkgewogICAgICAgICAgICAgbXggPSBzeDsKLSAgICAgICAg
ICAgIG13ID0gc3cgKyBzci0+ZHg7CisgICAgICAgICAgICBtdyA9IHN3ICsgc2Nyb2xsUmVxdWVz
dC0+ZHg7CiAgICAgICAgICAgICBheCA9IG14ICsgbXc7Ci0gICAgICAgICAgICBhdyA9IC1zci0+
ZHg7CisgICAgICAgICAgICBhdyA9IC1zY3JvbGxSZXF1ZXN0LT5keDsKICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgIGF4ID0gc3g7Ci0gICAgICAgICAgICBhdyA9IHNyLT5keDsKKyAgICAg
ICAgICAgIGF3ID0gc2Nyb2xsUmVxdWVzdC0+ZHg7CiAgICAgICAgICAgICBteCA9IGF4ICsgYXc7
Ci0gICAgICAgICAgICBtdyA9IHN3IC0gc3ItPmR4OworICAgICAgICAgICAgbXcgPSBzdyAtIHNj
cm9sbFJlcXVlc3QtPmR4OwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKHNyLT5keSA8IDApIHsK
KyAgICAgICAgaWYgKHNjcm9sbFJlcXVlc3QtPmR5IDwgMCkgewogICAgICAgICAgICAgbXkgPSBz
eTsKLSAgICAgICAgICAgIG1oID0gc2ggKyBzci0+ZHk7CisgICAgICAgICAgICBtaCA9IHNoICsg
c2Nyb2xsUmVxdWVzdC0+ZHk7CiAgICAgICAgICAgICBieSA9IG15ICsgbWg7Ci0gICAgICAgICAg
ICBiaCA9IC1zci0+ZHk7CisgICAgICAgICAgICBiaCA9IC1zY3JvbGxSZXF1ZXN0LT5keTsKICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGJ5ID0gc3k7Ci0gICAgICAgICAgICBiaCA9IHNy
LT5keTsKKyAgICAgICAgICAgIGJoID0gc2Nyb2xsUmVxdWVzdC0+ZHk7CiAgICAgICAgICAgICBt
eSA9IGJ5ICsgYmg7Ci0gICAgICAgICAgICBtaCA9IHNoIC0gc3ItPmR5OworICAgICAgICAgICAg
bWggPSBzaCAtIHNjcm9sbFJlcXVlc3QtPmR5OwogICAgICAgICB9CiAKICAgICAgICAgYXkgPSBt
eTsKQEAgLTMyOSwzNyArMzI3LDM3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3ZpZXdfc2lu
Z2xlX3Njcm9sbF9wcm9jZXNzX3NpbmdsZShFd2tfVmlld19TbWFydF9EYXRhKiBzCiAKICAgICAg
ICAgREJHKCJzY3JvbGwgZGlhZ29uYWw6ICUrMDNkLCUrMDNkIHVwZGF0ZT0lZCwlZCslZHglZCwg
IgogICAgICAgICAgICAgInJlcGFpbnRzOiBoPSVkLCVkKyVkeCVkIHY9JWQsJWQrJWR4JWQiLAot
ICAgICAgICAgICAgc3ItPmR4LCBzci0+ZHksIG14LCBteSwgbXcsIG1oLCBheCwgYXksIGF3LCBh
aCwgYngsIGJ5LCBidywgYmgpOworICAgICAgICAgICAgc2Nyb2xsUmVxdWVzdC0+ZHgsIHNjcm9s
bFJlcXVlc3QtPmR5LCBteCwgbXksIG13LCBtaCwgYXgsIGF5LCBhdywgYWgsIGJ4LCBieSwgYncs
IGJoKTsKIAogICAgICAgICBfZXdrX3ZpZXdfNGJfbW92ZV9yZWdpb24KLSAgICAgICAgICAgIChz
dGF0aWNfY2FzdDx1aW50MzJfdCo+KHBpeGVscyksIHNyLT5keCwgc3ItPmR5LCBzeCwgc3ksIHN3
LCBzaCwgb3cpOworICAgICAgICAgICAgKHN0YXRpY19jYXN0PHVpbnQzMl90Kj4ocGl4ZWxzKSwg
c2Nyb2xsUmVxdWVzdC0+ZHgsIHNjcm9sbFJlcXVlc3QtPmR5LCBzeCwgc3ksIHN3LCBzaCwgd2lk
dGgpOwogCi0gICAgICAgIGV2YXNfb2JqZWN0X2ltYWdlX2RhdGFfdXBkYXRlX2FkZChzZC0+YmFj
a2luZ19zdG9yZSwgbXgsIG15LCBtdywgbWgpOwotICAgICAgICBld2tfdmlld19yZXBhaW50X2Fk
ZChzZC0+X3ByaXYsIGF4LCBheSwgYXcsIGFoKTsKLSAgICAgICAgZXdrX3ZpZXdfcmVwYWludF9h
ZGQoc2QtPl9wcml2LCBieCwgYnksIGJ3LCBiaCk7CisgICAgICAgIGV2YXNfb2JqZWN0X2ltYWdl
X2RhdGFfdXBkYXRlX2FkZChzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUsIG14LCBteSwgbXcsIG1o
KTsKKyAgICAgICAgZXdrX3ZpZXdfcmVwYWludF9hZGQoc21hcnREYXRhLT5fcHJpdiwgYXgsIGF5
LCBhdywgYWgpOworICAgICAgICBld2tfdmlld19yZXBhaW50X2FkZChzbWFydERhdGEtPl9wcml2
LCBieCwgYnksIGJ3LCBiaCk7CiAgICAgfQogfQogCi1zdGF0aWMgRWluYV9Cb29sIF9ld2tfdmll
d19zaW5nbGVfc21hcnRfc2Nyb2xsc19wcm9jZXNzKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkKQor
c3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0X3Njcm9sbHNfcHJvY2VzcyhF
d2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEpCiB7CiAgICAgY29uc3QgRXdrX1Njcm9sbF9S
ZXF1ZXN0KiBzcjsKICAgICBjb25zdCBFd2tfU2Nyb2xsX1JlcXVlc3QqIHNyX2VuZDsKICAgICBF
dmFzX0Nvb3JkIG93LCBvaDsKICAgICBzaXplX3QgY291bnQ7Ci0gICAgdm9pZCogcGl4ZWxzID0g
ZXZhc19vYmplY3RfaW1hZ2VfZGF0YV9nZXQoc2QtPmJhY2tpbmdfc3RvcmUsIDEpOwotICAgIGV2
YXNfb2JqZWN0X2ltYWdlX3NpemVfZ2V0KHNkLT5iYWNraW5nX3N0b3JlLCAmb3csICZvaCk7Cisg
ICAgdm9pZCogcGl4ZWxzID0gZXZhc19vYmplY3RfaW1hZ2VfZGF0YV9nZXQoc21hcnREYXRhLT5i
YWNraW5nX3N0b3JlLCAxKTsKKyAgICBldmFzX29iamVjdF9pbWFnZV9zaXplX2dldChzbWFydERh
dGEtPmJhY2tpbmdfc3RvcmUsICZvdywgJm9oKTsKIAotICAgIHNyID0gZXdrX3ZpZXdfc2Nyb2xs
X3JlcXVlc3RzX2dldChzZC0+X3ByaXYsICZjb3VudCk7CisgICAgc3IgPSBld2tfdmlld19zY3Jv
bGxfcmVxdWVzdHNfZ2V0KHNtYXJ0RGF0YS0+X3ByaXYsICZjb3VudCk7CiAgICAgc3JfZW5kID0g
c3IgKyBjb3VudDsKICAgICBmb3IgKDsgc3IgPCBzcl9lbmQ7IHNyKyspCi0gICAgICAgIF9ld2tf
dmlld19zaW5nbGVfc2Nyb2xsX3Byb2Nlc3Nfc2luZ2xlKHNkLCBwaXhlbHMsIG93LCBvaCwgc3Ip
OworICAgICAgICBfZXdrX3ZpZXdfc2luZ2xlX3Njcm9sbF9wcm9jZXNzX3NpbmdsZShzbWFydERh
dGEsIHBpeGVscywgb3csIG9oLCBzcik7CiAKLSAgICBldmFzX29iamVjdF9pbWFnZV9kYXRhX3Nl
dChzZC0+YmFja2luZ19zdG9yZSwgcGl4ZWxzKTsKKyAgICBldmFzX29iamVjdF9pbWFnZV9kYXRh
X3NldChzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUsIHBpeGVscyk7CiAKICAgICByZXR1cm4gRUlO
QV9UUlVFOwogfQogCi1zdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19zaW5nbGVfc21hcnRfcmVw
YWludHNfcHJvY2VzcyhFd2tfVmlld19TbWFydF9EYXRhKiBzZCkKK3N0YXRpYyBFaW5hX0Jvb2wg
X2V3a192aWV3X3NpbmdsZV9zbWFydF9yZXBhaW50c19wcm9jZXNzKEV3a19WaWV3X1NtYXJ0X0Rh
dGEqIHNtYXJ0RGF0YSkKIHsKICAgICBFd2tfVmlld19QYWludF9Db250ZXh0KiBjdHh0OwogICAg
IEV2YXNfQ29vcmQgb3csIG9oOwpAQCAtMzc2LDE4ICszNzQsMTggQEAgc3RhdGljIEVpbmFfQm9v
bCBfZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0X3JlcGFpbnRzX3Byb2Nlc3MoRXdrX1ZpZXdfU21hcnRf
RGF0YSogc2QKICAgICBzaXplX3QgY291bnQ7CiAgICAgRWluYV9Cb29sIHJldCA9IEVJTkFfVFJV
RTsKIAotICAgIGlmIChzZC0+YW5pbWF0ZWRfem9vbS56b29tLmN1cnJlbnQgPCAwLjAwMDAxKSB7
Ci0gICAgICAgIEV2YXNfT2JqZWN0KiBjbGlwID0gZXZhc19vYmplY3RfY2xpcF9nZXQoc2QtPmJh
Y2tpbmdfc3RvcmUpOworICAgIGlmIChzbWFydERhdGEtPmFuaW1hdGVkX3pvb20uem9vbS5jdXJy
ZW50IDwgMC4wMDAwMSkgeworICAgICAgICBFdmFzX09iamVjdCogY2xpcCA9IGV2YXNfb2JqZWN0
X2NsaXBfZ2V0KHNtYXJ0RGF0YS0+YmFja2luZ19zdG9yZSk7CiAgICAgICAgIEV2YXNfQ29vcmQg
dywgaCwgY3csIGNoOwogICAgICAgICAvLyByZXNldCBlZmZlY3RzIG9mIHpvb21fd2Vha19zZXQo
KQogICAgICAgICBldmFzX29iamVjdF9pbWFnZV9maWxsX3NldAotICAgICAgICAgICAgKHNkLT5i
YWNraW5nX3N0b3JlLCAwLCAwLCBzZC0+dmlldy53LCBzZC0+dmlldy5oKTsKLSAgICAgICAgZXZh
c19vYmplY3RfbW92ZShjbGlwLCBzZC0+dmlldy54LCBzZC0+dmlldy55KTsKKyAgICAgICAgICAg
IChzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUsIDAsIDAsIHNtYXJ0RGF0YS0+dmlldy53LCBzbWFy
dERhdGEtPnZpZXcuaCk7CisgICAgICAgIGV2YXNfb2JqZWN0X21vdmUoY2xpcCwgc21hcnREYXRh
LT52aWV3LngsIHNtYXJ0RGF0YS0+dmlldy55KTsKIAotICAgICAgICB3ID0gc2QtPnZpZXcudzsK
LSAgICAgICAgaCA9IHNkLT52aWV3Lmg7CisgICAgICAgIHcgPSBzbWFydERhdGEtPnZpZXcudzsK
KyAgICAgICAgaCA9IHNtYXJ0RGF0YS0+dmlldy5oOwogCi0gICAgICAgIGV3a19mcmFtZV9jb250
ZW50c19zaXplX2dldChzZC0+bWFpbl9mcmFtZSwgJmN3LCAmY2gpOworICAgICAgICBld2tfZnJh
bWVfY29udGVudHNfc2l6ZV9nZXQoc21hcnREYXRhLT5tYWluX2ZyYW1lLCAmY3csICZjaCk7CiAg
ICAgICAgIGlmICh3ID4gY3cpCiAgICAgICAgICAgICB3ID0gY3c7CiAgICAgICAgIGlmIChoID4g
Y2gpCkBAIC0zOTUsOCArMzkzLDggQEAgc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfc2luZ2xl
X3NtYXJ0X3JlcGFpbnRzX3Byb2Nlc3MoRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QKICAgICAgICAg
ZXZhc19vYmplY3RfcmVzaXplKGNsaXAsIHcsIGgpOwogICAgIH0KIAotICAgIHBpeGVscyA9IGV2
YXNfb2JqZWN0X2ltYWdlX2RhdGFfZ2V0KHNkLT5iYWNraW5nX3N0b3JlLCAxKTsKLSAgICBldmFz
X29iamVjdF9pbWFnZV9zaXplX2dldChzZC0+YmFja2luZ19zdG9yZSwgJm93LCAmb2gpOworICAg
IHBpeGVscyA9IGV2YXNfb2JqZWN0X2ltYWdlX2RhdGFfZ2V0KHNtYXJ0RGF0YS0+YmFja2luZ19z
dG9yZSwgMSk7CisgICAgZXZhc19vYmplY3RfaW1hZ2Vfc2l6ZV9nZXQoc21hcnREYXRhLT5iYWNr
aW5nX3N0b3JlLCAmb3csICZvaCk7CiAgICAgZm9ybWF0ID0gQ0FJUk9fRk9STUFUX0FSR0IzMjsK
IAogICAgIHN1cmZhY2UgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YQpAQCAt
NDE3LDcgKzQxNSw3IEBAIHN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3NpbmdsZV9zbWFydF9y
ZXBhaW50c19wcm9jZXNzKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkCiAgICAgICAgIGdvdG8gZXJy
b3JfY2Fpcm87CiAgICAgfQogCi0gICAgY3R4dCA9IGV3a192aWV3X3BhaW50X2NvbnRleHRfbmV3
KHNkLT5fcHJpdiwgY2Fpcm8pOworICAgIGN0eHQgPSBld2tfdmlld19wYWludF9jb250ZXh0X25l
dyhzbWFydERhdGEtPl9wcml2LCBjYWlybyk7CiAgICAgaWYgKCFjdHh0KSB7CiAgICAgICAgIEVS
UigiY291bGQgbm90IGNyZWF0ZSBwYWludCBjb250ZXh0Iik7CiAgICAgICAgIHJldCA9IEVJTkFf
RkFMU0U7CkBAIC00MzEsNyArNDI5LDcgQEAgc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfc2lu
Z2xlX3NtYXJ0X3JlcGFpbnRzX3Byb2Nlc3MoRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QKICAgICAg
ICAgZ290byBlcnJvcl90aWxlcjsKICAgICB9CiAKLSAgICBwciA9IGV3a192aWV3X3JlcGFpbnRz
X2dldChzZC0+X3ByaXYsICZjb3VudCk7CisgICAgcHIgPSBld2tfdmlld19yZXBhaW50c19nZXQo
c21hcnREYXRhLT5fcHJpdiwgJmNvdW50KTsKICAgICBwcl9lbmQgPSBwciArIGNvdW50OwogICAg
IGZvciAoOyBwciA8IHByX2VuZDsgcHIrKykKICAgICAgICAgZWluYV90aWxlcl9yZWN0X2FkZCh0
aWxlciwgcHIpOwpAQCAtNDQzLDEwICs0NDEsMTAgQEAgc3RhdGljIEVpbmFfQm9vbCBfZXdrX3Zp
ZXdfc2luZ2xlX3NtYXJ0X3JlcGFpbnRzX3Byb2Nlc3MoRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QK
ICAgICAgICAgZ290byBlcnJvcl9pdGVyYXRvcjsKICAgICB9CiAKLSAgICBld2tfdmlld19sYXlv
dXRfaWZfbmVlZGVkX3JlY3Vyc2l2ZShzZC0+X3ByaXYpOworICAgIGV3a192aWV3X2xheW91dF9p
Zl9uZWVkZWRfcmVjdXJzaXZlKHNtYXJ0RGF0YS0+X3ByaXYpOwogCiAgICAgaW50IHN4LCBzeTsK
LSAgICBld2tfZnJhbWVfc2Nyb2xsX3Bvc19nZXQoc2QtPm1haW5fZnJhbWUsICZzeCwgJnN5KTsK
KyAgICBld2tfZnJhbWVfc2Nyb2xsX3Bvc19nZXQoc21hcnREYXRhLT5tYWluX2ZyYW1lLCAmc3gs
ICZzeSk7CiAKICAgICBFSU5BX0lURVJBVE9SX0ZPUkVBQ0goaXRyLCByKSB7CiAgICAgICAgIEVp
bmFfUmVjdGFuZ2xlIHNjcm9sbGVkX3JlY3QgPSB7CkBAIC00NjQsNyArNDYyLDcgQEAgc3RhdGlj
IEVpbmFfQm9vbCBfZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0X3JlcGFpbnRzX3Byb2Nlc3MoRXdrX1Zp
ZXdfU21hcnRfRGF0YSogc2QKIAogICAgICAgICBld2tfdmlld19wYWludF9jb250ZXh0X3Jlc3Rv
cmUoY3R4dCk7CiAgICAgICAgIGV2YXNfb2JqZWN0X2ltYWdlX2RhdGFfdXBkYXRlX2FkZAotICAg
ICAgICAgICAgKHNkLT5iYWNraW5nX3N0b3JlLCByLT54LCByLT55LCByLT53LCByLT5oKTsKKyAg
ICAgICAgICAgIChzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUsIHItPngsIHItPnksIHItPncsIHIt
PmgpOwogICAgIH0KICAgICBlaW5hX2l0ZXJhdG9yX2ZyZWUoaXRyKTsKIApAQCAtNDc3LDU2ICs0
NzUsNTYgQEAgZXJyb3JfcGFpbnRfY29udGV4dDoKIGVycm9yX2NhaXJvOgogICAgIGNhaXJvX3N1
cmZhY2VfZGVzdHJveShzdXJmYWNlKTsKIGVycm9yX2NhaXJvX3N1cmZhY2U6Ci0gICAgZXZhc19v
YmplY3RfaW1hZ2VfZGF0YV9zZXQoc2QtPmJhY2tpbmdfc3RvcmUsIHBpeGVscyk7IC8qIGRlYyBy
ZWZjb3VudCAqLworICAgIGV2YXNfb2JqZWN0X2ltYWdlX2RhdGFfc2V0KHNtYXJ0RGF0YS0+YmFj
a2luZ19zdG9yZSwgcGl4ZWxzKTsgLyogZGVjIHJlZmNvdW50ICovCiAKICAgICByZXR1cm4gcmV0
OwogfQogCi1zdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19zaW5nbGVfc21hcnRfem9vbV93ZWFr
X3NldChFd2tfVmlld19TbWFydF9EYXRhKiBzZCwgZmxvYXQgem9vbSwgRXZhc19Db29yZCBjeCwg
RXZhc19Db29yZCBjeSkKK3N0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3NpbmdsZV9zbWFydF96
b29tX3dlYWtfc2V0KEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSwgZmxvYXQgem9vbSwg
RXZhc19Db29yZCBjZW50ZXJYLCBFdmFzX0Nvb3JkIGNlbnRlclkpCiB7CiAgICAgLy8gVE9ETzog
cmV2aWV3Ci0gICAgZmxvYXQgc2NhbGUgPSB6b29tIC8gc2QtPmFuaW1hdGVkX3pvb20uem9vbS5z
dGFydDsKLSAgICBFdmFzX0Nvb3JkIHcgPSBzZC0+dmlldy53ICogc2NhbGU7Ci0gICAgRXZhc19D
b29yZCBoID0gc2QtPnZpZXcuaCAqIHNjYWxlOworICAgIGZsb2F0IHNjYWxlID0gem9vbSAvIHNt
YXJ0RGF0YS0+YW5pbWF0ZWRfem9vbS56b29tLnN0YXJ0OworICAgIEV2YXNfQ29vcmQgdyA9IHNt
YXJ0RGF0YS0+dmlldy53ICogc2NhbGU7CisgICAgRXZhc19Db29yZCBoID0gc21hcnREYXRhLT52
aWV3LmggKiBzY2FsZTsKICAgICBFdmFzX0Nvb3JkIGR4LCBkeSwgY3csIGNoOwotICAgIEV2YXNf
T2JqZWN0KiBjbGlwID0gZXZhc19vYmplY3RfY2xpcF9nZXQoc2QtPmJhY2tpbmdfc3RvcmUpOwor
ICAgIEV2YXNfT2JqZWN0KiBjbGlwID0gZXZhc19vYmplY3RfY2xpcF9nZXQoc21hcnREYXRhLT5i
YWNraW5nX3N0b3JlKTsKIAotICAgIGV3a19mcmFtZV9jb250ZW50c19zaXplX2dldChzZC0+bWFp
bl9mcmFtZSwgJmN3LCAmY2gpOwotICAgIGlmIChzZC0+dmlldy53ID4gMCAmJiBzZC0+dmlldy5o
ID4gMCkgewotICAgICAgICBkeCA9ICh3ICogKHNkLT52aWV3LncgLSBjeCkpIC8gc2QtPnZpZXcu
dzsKLSAgICAgICAgZHkgPSAoaCAqIChzZC0+dmlldy5oIC0gY3kpKSAvIHNkLT52aWV3Lmg7Cisg
ICAgZXdrX2ZyYW1lX2NvbnRlbnRzX3NpemVfZ2V0KHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSwgJmN3
LCAmY2gpOworICAgIGlmIChzbWFydERhdGEtPnZpZXcudyA+IDAgJiYgc21hcnREYXRhLT52aWV3
LmggPiAwKSB7CisgICAgICAgIGR4ID0gKHcgKiAoc21hcnREYXRhLT52aWV3LncgLSBjZW50ZXJY
KSkgLyBzbWFydERhdGEtPnZpZXcudzsKKyAgICAgICAgZHkgPSAoaCAqIChzbWFydERhdGEtPnZp
ZXcuaCAtIGNlbnRlclkpKSAvIHNtYXJ0RGF0YS0+dmlldy5oOwogICAgIH0gZWxzZSB7CiAgICAg
ICAgIGR4ID0gMDsKICAgICAgICAgZHkgPSAwOwogICAgIH0KIAotICAgIGV2YXNfb2JqZWN0X2lt
YWdlX2ZpbGxfc2V0KHNkLT5iYWNraW5nX3N0b3JlLCBjeCArIGR4LCBjeSArIGR5LCB3LCBoKTsK
KyAgICBldmFzX29iamVjdF9pbWFnZV9maWxsX3NldChzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUs
IGNlbnRlclggKyBkeCwgY2VudGVyWSArIGR5LCB3LCBoKTsKIAotICAgIGlmIChzZC0+dmlldy53
ID4gMCAmJiBzZC0+dmlldy5oID4gMCkgewotICAgICAgICBkeCA9ICgoc2QtPnZpZXcudyAtIHcp
ICogY3gpIC8gc2QtPnZpZXcudzsKLSAgICAgICAgZHkgPSAoKHNkLT52aWV3LmggLSBoKSAqIGN5
KSAvIHNkLT52aWV3Lmg7CisgICAgaWYgKHNtYXJ0RGF0YS0+dmlldy53ID4gMCAmJiBzbWFydERh
dGEtPnZpZXcuaCA+IDApIHsKKyAgICAgICAgZHggPSAoKHNtYXJ0RGF0YS0+dmlldy53IC0gdykg
KiBjZW50ZXJYKSAvIHNtYXJ0RGF0YS0+dmlldy53OworICAgICAgICBkeSA9ICgoc21hcnREYXRh
LT52aWV3LmggLSBoKSAqIGNlbnRlclkpIC8gc21hcnREYXRhLT52aWV3Lmg7CiAgICAgfSBlbHNl
IHsKICAgICAgICAgZHggPSAwOwogICAgICAgICBkeSA9IDA7CiAgICAgfQotICAgIGV2YXNfb2Jq
ZWN0X21vdmUoY2xpcCwgc2QtPnZpZXcueCArIGR4LCBzZC0+dmlldy55ICsgZHkpOworICAgIGV2
YXNfb2JqZWN0X21vdmUoY2xpcCwgc21hcnREYXRhLT52aWV3LnggKyBkeCwgc21hcnREYXRhLT52
aWV3LnkgKyBkeSk7CiAKLSAgICBpZiAoY3cgPCBzZC0+dmlldy53KQorICAgIGlmIChjdyA8IHNt
YXJ0RGF0YS0+dmlldy53KQogICAgICAgICB3ID0gY3cgKiBzY2FsZTsKLSAgICBpZiAoY2ggPCBz
ZC0+dmlldy5oKQorICAgIGlmIChjaCA8IHNtYXJ0RGF0YS0+dmlldy5oKQogICAgICAgICBoID0g
Y2ggKiBzY2FsZTsKICAgICBldmFzX29iamVjdF9yZXNpemUoY2xpcCwgdywgaCk7CiAgICAgcmV0
dXJuIEVJTkFfVFJVRTsKIH0KIAotc3RhdGljIHZvaWQgX2V3a192aWV3X3NpbmdsZV9zbWFydF96
b29tX3dlYWtfc21vb3RoX3NjYWxlX3NldChFd2tfVmlld19TbWFydF9EYXRhKiBzZCwgRWluYV9C
b29sIHNtb290aF9zY2FsZSkKK3N0YXRpYyB2b2lkIF9ld2tfdmlld19zaW5nbGVfc21hcnRfem9v
bV93ZWFrX3Ntb290aF9zY2FsZV9zZXQoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhLCBF
aW5hX0Jvb2wgc21vb3RoX3NjYWxlKQogewotICAgIGV2YXNfb2JqZWN0X2ltYWdlX3Ntb290aF9z
Y2FsZV9zZXQoc2QtPmJhY2tpbmdfc3RvcmUsIHNtb290aF9zY2FsZSk7CisgICAgZXZhc19vYmpl
Y3RfaW1hZ2Vfc21vb3RoX3NjYWxlX3NldChzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUsIHNtb290
aF9zY2FsZSk7CiB9CiAKLXN0YXRpYyB2b2lkIF9ld2tfdmlld19zaW5nbGVfc21hcnRfYmdfY29s
b3Jfc2V0KEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkLCB1bnNpZ25lZCBjaGFyIHIsIHVuc2lnbmVk
IGNoYXIgZywgdW5zaWduZWQgY2hhciBiLCB1bnNpZ25lZCBjaGFyIGEpCitzdGF0aWMgdm9pZCBf
ZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0X2JnX2NvbG9yX3NldChFd2tfVmlld19TbWFydF9EYXRhKiBz
bWFydERhdGEsIHVuc2lnbmVkIGNoYXIgcmVkLCB1bnNpZ25lZCBjaGFyIGdyZWVuLCB1bnNpZ25l
ZCBjaGFyIGJsdWUsIHVuc2lnbmVkIGNoYXIgYWxwaGEpCiB7Ci0gICAgZXZhc19vYmplY3RfaW1h
Z2VfYWxwaGFfc2V0KHNkLT5iYWNraW5nX3N0b3JlLCBhIDwgMjU1KTsKKyAgICBldmFzX29iamVj
dF9pbWFnZV9hbHBoYV9zZXQoc21hcnREYXRhLT5iYWNraW5nX3N0b3JlLCBhbHBoYSA8IDI1NSk7
CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19zaW5nbGVfc21hcnRfc2V0KEV3a19WaWV3X1NtYXJ0
X0NsYXNzKiBhcGkpCkBAIC01NjMsNyArNTYxLDcgQEAgc3RhdGljIGlubGluZSBFdmFzX1NtYXJ0
KiBfZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0X2NsYXNzX25ldyh2b2lkKQogICAgIHJldHVybiBzbWFy
dDsKIH0KIAotRXZhc19PYmplY3QqIGV3a192aWV3X3NpbmdsZV9hZGQoRXZhcyogZSkKK0V2YXNf
T2JqZWN0KiBld2tfdmlld19zaW5nbGVfYWRkKEV2YXMqIGNhbnZhcykKIHsKLSAgICByZXR1cm4g
ZXZhc19vYmplY3Rfc21hcnRfYWRkKGUsIF9ld2tfdmlld19zaW5nbGVfc21hcnRfY2xhc3NfbmV3
KCkpOworICAgIHJldHVybiBldmFzX29iamVjdF9zbWFydF9hZGQoY2FudmFzLCBfZXdrX3ZpZXdf
c2luZ2xlX3NtYXJ0X2NsYXNzX25ldygpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
ZWZsL2V3ay9ld2tfdmlld190aWxlZC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3Zp
ZXdfdGlsZWQuY3BwCmluZGV4IGY4N2Y0OGJkOWZhMzQwZTBiMzQ2OTIxMDZhZTRkYzI1ZWI1OWM1
ZTkuLjJhMDQ1YTA3ZGExYzJmMTg3ODE0YmExNjg2ZTY2ZTFlMDU0Mjg5NjEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlld190aWxlZC5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9lZmwvZXdrL2V3a192aWV3X3RpbGVkLmNwcApAQCAtMzAsNDggKzMwLDQ4IEBACiAKIHN0
YXRpYyBFd2tfVmlld19TbWFydF9DbGFzcyBfcGFyZW50X3NjID0gRVdLX1ZJRVdfU01BUlRfQ0xB
U1NfSU5JVF9OVUxMOwogCi1zdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld190aWxlZF9yZW5kZXJf
Y2Iodm9pZCogZGF0YSwgRXdrX1RpbGUqIHQsIGNvbnN0IEVpbmFfUmVjdGFuZ2xlKiBhcmVhKQor
c3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfdGlsZWRfcmVuZGVyX2NiKHZvaWQqIGRhdGEsIEV3
a19UaWxlKiB0aWxlLCBjb25zdCBFaW5hX1JlY3RhbmdsZSogYXJlYSkKIHsKICAgICBFd2tfVmll
d19Qcml2YXRlX0RhdGEqIHByaXYgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19Qcml2YXRlX0RhdGEq
PihkYXRhKTsKLSAgICBFaW5hX1JlY3RhbmdsZSByID0ge2FyZWEtPnggKyB0LT54LCBhcmVhLT55
ICsgdC0+eSwgYXJlYS0+dywgYXJlYS0+aH07CisgICAgRWluYV9SZWN0YW5nbGUgcmVjdCA9IHth
cmVhLT54ICsgdGlsZS0+eCwgYXJlYS0+eSArIHRpbGUtPnksIGFyZWEtPncsIGFyZWEtPmh9Owog
Ci0gICAgcmV0dXJuIGV3a192aWV3X3BhaW50X2NvbnRlbnRzKHByaXYsIHQtPmNhaXJvLCAmcik7
CisgICAgcmV0dXJuIGV3a192aWV3X3BhaW50X2NvbnRlbnRzKHByaXYsIHRpbGUtPmNhaXJvLCAm
cmVjdCk7CiB9CiAKLXN0YXRpYyB2b2lkKiBfZXdrX3ZpZXdfdGlsZWRfdXBkYXRlc19wcm9jZXNz
X3ByZSh2b2lkKiBkYXRhLCBFdmFzX09iamVjdCogbykKK3N0YXRpYyB2b2lkKiBfZXdrX3ZpZXdf
dGlsZWRfdXBkYXRlc19wcm9jZXNzX3ByZSh2b2lkKiBkYXRhLCBFdmFzX09iamVjdCogZXdrVGls
ZSkKIHsKICAgICBFd2tfVmlld19Qcml2YXRlX0RhdGEqIHByaXYgPSBzdGF0aWNfY2FzdDxFd2tf
Vmlld19Qcml2YXRlX0RhdGEqPihkYXRhKTsKICAgICBld2tfdmlld19sYXlvdXRfaWZfbmVlZGVk
X3JlY3Vyc2l2ZShwcml2KTsKICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIEV2YXNfT2JqZWN0
KiBfZXdrX3ZpZXdfdGlsZWRfc21hcnRfYmFja2luZ19zdG9yZV9hZGQoRXdrX1ZpZXdfU21hcnRf
RGF0YSogc2QpCitzdGF0aWMgRXZhc19PYmplY3QqIF9ld2tfdmlld190aWxlZF9zbWFydF9iYWNr
aW5nX3N0b3JlX2FkZChFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEpCiB7Ci0gICAgRXZh
c19PYmplY3QqIGJzID0gZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfYWRkKHNkLT5iYXNlLmV2YXMp
OworICAgIEV2YXNfT2JqZWN0KiBicyA9IGV3a190aWxlZF9iYWNraW5nX3N0b3JlX2FkZChzbWFy
dERhdGEtPmJhc2UuZXZhcyk7CiAgICAgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcmVuZGVyX2Ni
X3NldAotICAgICAgICAoYnMsIF9ld2tfdmlld190aWxlZF9yZW5kZXJfY2IsIHNkLT5fcHJpdik7
CisgICAgICAgIChicywgX2V3a192aWV3X3RpbGVkX3JlbmRlcl9jYiwgc21hcnREYXRhLT5fcHJp
dik7CiAgICAgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRlc19wcm9jZXNzX3ByZV9zZXQK
LSAgICAgICAgKGJzLCBfZXdrX3ZpZXdfdGlsZWRfdXBkYXRlc19wcm9jZXNzX3ByZSwgc2QtPl9w
cml2KTsKKyAgICAgICAgKGJzLCBfZXdrX3ZpZXdfdGlsZWRfdXBkYXRlc19wcm9jZXNzX3ByZSwg
c21hcnREYXRhLT5fcHJpdik7CiAgICAgcmV0dXJuIGJzOwogfQogCiBzdGF0aWMgdm9pZAotX2V3
a192aWV3X3RpbGVkX2NvbnRlbnRzX3NpemVfY2hhbmdlZF9jYih2b2lkKiBkYXRhLCBFdmFzX09i
amVjdCogbywgdm9pZCogZXZlbnRfaW5mbykKK19ld2tfdmlld190aWxlZF9jb250ZW50c19zaXpl
X2NoYW5nZWRfY2Iodm9pZCogZGF0YSwgRXZhc19PYmplY3QqIGV3a1RpbGUsIHZvaWQqIGV2ZW50
SW5mbykKIHsKLSAgICBFdmFzX0Nvb3JkKiBzaXplID0gc3RhdGljX2Nhc3Q8RXZhc19Db29yZCo+
KGV2ZW50X2luZm8pOwotICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0gc3RhdGljX2Nhc3Q8
RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEpOworICAgIEV2YXNfQ29vcmQqIHNpemUgPSBzdGF0
aWNfY2FzdDxFdmFzX0Nvb3JkKj4oZXZlbnRJbmZvKTsKKyAgICBFd2tfVmlld19TbWFydF9EYXRh
KiBzbWFydERhdGEgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZGF0YSk7CiAK
ICAgICBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9jb250ZW50c19yZXNpemUKLSAgICAgICAgKHNk
LT5iYWNraW5nX3N0b3JlLCBzaXplWzBdLCBzaXplWzFdKTsKKyAgICAgICAgKHNtYXJ0RGF0YS0+
YmFja2luZ19zdG9yZSwgc2l6ZVswXSwgc2l6ZVsxXSk7CiB9CiAKLXN0YXRpYyB2b2lkIF9ld2tf
dmlld190aWxlZF9zbWFydF9hZGQoRXZhc19PYmplY3QqIG8pCitzdGF0aWMgdm9pZCBfZXdrX3Zp
ZXdfdGlsZWRfc21hcnRfYWRkKEV2YXNfT2JqZWN0KiBld2tUaWxlKQogewogICAgIEV3a19WaWV3
X1NtYXJ0X0RhdGEqIHNkOwogCi0gICAgX3BhcmVudF9zYy5zYy5hZGQobyk7CisgICAgX3BhcmVu
dF9zYy5zYy5hZGQoZXdrVGlsZSk7CiAKLSAgICBzZCA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1Nt
YXJ0X0RhdGEqPihldmFzX29iamVjdF9zbWFydF9kYXRhX2dldChvKSk7CisgICAgc2QgPSBzdGF0
aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZXZhc19vYmplY3Rfc21hcnRfZGF0YV9nZXQo
ZXdrVGlsZSkpOwogICAgIGlmICghc2QpCiAgICAgICAgIHJldHVybjsKIApAQCAtODEsMjEgKzgx
LDIxIEBAIHN0YXRpYyB2b2lkIF9ld2tfdmlld190aWxlZF9zbWFydF9hZGQoRXZhc19PYmplY3Qq
IG8pCiAgICAgZXdrX2ZyYW1lX3BhaW50X2Z1bGxfc2V0KHNkLT5tYWluX2ZyYW1lLCBFSU5BX1RS
VUUpOwogfQogCi1zdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld190aWxlZF9zbWFydF9zY3JvbGxz
X3Byb2Nlc3MoRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QpCitzdGF0aWMgRWluYV9Cb29sIF9ld2tf
dmlld190aWxlZF9zbWFydF9zY3JvbGxzX3Byb2Nlc3MoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21h
cnREYXRhKQogewogICAgIGNvbnN0IEV3a19TY3JvbGxfUmVxdWVzdCogc3I7CiAgICAgY29uc3Qg
RXdrX1Njcm9sbF9SZXF1ZXN0KiBzcl9lbmQ7CiAgICAgc2l6ZV90IGNvdW50OwogICAgIEV2YXNf
Q29vcmQgdncsIHZoOwogCi0gICAgZXdrX2ZyYW1lX2NvbnRlbnRzX3NpemVfZ2V0KHNkLT5tYWlu
X2ZyYW1lLCAmdncsICZ2aCk7CisgICAgZXdrX2ZyYW1lX2NvbnRlbnRzX3NpemVfZ2V0KHNtYXJ0
RGF0YS0+bWFpbl9mcmFtZSwgJnZ3LCAmdmgpOwogCi0gICAgc3IgPSBld2tfdmlld19zY3JvbGxf
cmVxdWVzdHNfZ2V0KHNkLT5fcHJpdiwgJmNvdW50KTsKKyAgICBzciA9IGV3a192aWV3X3Njcm9s
bF9yZXF1ZXN0c19nZXQoc21hcnREYXRhLT5fcHJpdiwgJmNvdW50KTsKICAgICBzcl9lbmQgPSBz
ciArIGNvdW50OwogICAgIGZvciAoOyBzciA8IHNyX2VuZDsgc3IrKykgewogICAgICAgICBpZiAo
c3ItPm1haW5fc2Nyb2xsKQogICAgICAgICAgICAgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc2Ny
b2xsX2Z1bGxfb2Zmc2V0X2FkZAotICAgICAgICAgICAgICAgIChzZC0+YmFja2luZ19zdG9yZSwg
c3ItPmR4LCBzci0+ZHkpOworICAgICAgICAgICAgICAgIChzbWFydERhdGEtPmJhY2tpbmdfc3Rv
cmUsIHNyLT5keCwgc3ItPmR5KTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBFdmFzX0Nv
b3JkIHN4LCBzeSwgc3csIHNoOwogCkBAIC0xMDgsNyArMTA4LDcgQEAgc3RhdGljIEVpbmFfQm9v
bCBfZXdrX3ZpZXdfdGlsZWRfc21hcnRfc2Nyb2xsc19wcm9jZXNzKEV3a19WaWV3X1NtYXJ0X0Rh
dGEqIHNkKQogICAgICAgICAgICAgICAgIC8qIGRvdWJ0IHdlYmtpdCB3b3VsZCBiZSBzbyAgICAg
c3R1cGlkLi4uICovCiAgICAgICAgICAgICAgICAgREJHKCJmdWxsIHBhZ2Ugc2Nyb2xsICUrMDNk
LCUrMDNkLiBjb252ZXJ0IHRvIHJlcGFpbnQgJWQsJWQgKyAlZHglZCIsCiAgICAgICAgICAgICAg
ICAgICAgIHNyLT5keCwgc3ItPmR5LCBzeCwgc3ksIHN3LCBzaCk7Ci0gICAgICAgICAgICAgICAg
ZXdrX3ZpZXdfcmVwYWludF9hZGQoc2QtPl9wcml2LCBzeCwgc3ksIHN3LCBzaCk7CisgICAgICAg
ICAgICAgICAgZXdrX3ZpZXdfcmVwYWludF9hZGQoc21hcnREYXRhLT5fcHJpdiwgc3gsIHN5LCBz
dywgc2gpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQogCkBAIC0x
MjksNyArMTI5LDcgQEAgc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfdGlsZWRfc21hcnRfc2Ny
b2xsc19wcm9jZXNzKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkKQogICAgICAgICAgICAgc3kgLT0g
YWJzKHNyLT5keSk7CiAgICAgICAgICAgICBzdyArPSBhYnMoc3ItPmR4KTsKICAgICAgICAgICAg
IHNoICs9IGFicyhzci0+ZHkpOwotICAgICAgICAgICAgZXdrX3ZpZXdfcmVwYWludF9hZGQoc2Qt
Pl9wcml2LCBzeCwgc3ksIHN3LCBzaCk7CisgICAgICAgICAgICBld2tfdmlld19yZXBhaW50X2Fk
ZChzbWFydERhdGEtPl9wcml2LCBzeCwgc3ksIHN3LCBzaCk7CiAgICAgICAgICAgICBJTkYoInVz
aW5nIHJlcGFpbnQgZm9yIGlubmVyIGZyYW1lIHNjb2xsaW5nISIpOwogICAgICAgICB9CiAgICAg
fQpAQCAtMTM3LDE1ICsxMzcsMTUgQEAgc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfdGlsZWRf
c21hcnRfc2Nyb2xsc19wcm9jZXNzKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkKQogICAgIHJldHVy
biBFSU5BX1RSVUU7CiB9CiAKLXN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3RpbGVkX3NtYXJ0
X3JlcGFpbnRzX3Byb2Nlc3MoRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QpCitzdGF0aWMgRWluYV9C
b29sIF9ld2tfdmlld190aWxlZF9zbWFydF9yZXBhaW50c19wcm9jZXNzKEV3a19WaWV3X1NtYXJ0
X0RhdGEqIHNtYXJ0RGF0YSkKIHsKICAgICBjb25zdCBFaW5hX1JlY3RhbmdsZSogcHIsICogcHJf
ZW5kOwogICAgIHNpemVfdCBjb3VudDsKICAgICBpbnQgc3gsIHN5OwogCi0gICAgZXdrX2ZyYW1l
X3Njcm9sbF9wb3NfZ2V0KHNkLT5tYWluX2ZyYW1lLCAmc3gsICZzeSk7CisgICAgZXdrX2ZyYW1l
X3Njcm9sbF9wb3NfZ2V0KHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSwgJnN4LCAmc3kpOwogCi0gICAg
cHIgPSBld2tfdmlld19yZXBhaW50c19nZXQoc2QtPl9wcml2LCAmY291bnQpOworICAgIHByID0g
ZXdrX3ZpZXdfcmVwYWludHNfZ2V0KHNtYXJ0RGF0YS0+X3ByaXYsICZjb3VudCk7CiAgICAgcHJf
ZW5kID0gcHIgKyBjb3VudDsKICAgICBmb3IgKDsgcHIgPCBwcl9lbmQ7IHByKyspIHsKICAgICAg
ICAgRWluYV9SZWN0YW5nbGUgcjsKQEAgLTE1Myw4MCArMTUzLDgwIEBAIHN0YXRpYyBFaW5hX0Jv
b2wgX2V3a192aWV3X3RpbGVkX3NtYXJ0X3JlcGFpbnRzX3Byb2Nlc3MoRXdrX1ZpZXdfU21hcnRf
RGF0YSogc2QpCiAgICAgICAgIHIueSA9IHByLT55ICsgc3k7CiAgICAgICAgIHIudyA9IHByLT53
OwogICAgICAgICByLmggPSBwci0+aDsKLSAgICAgICAgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
dXBkYXRlKHNkLT5iYWNraW5nX3N0b3JlLCAmcik7CisgICAgICAgIGV3a190aWxlZF9iYWNraW5n
X3N0b3JlX3VwZGF0ZShzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUsICZyKTsKICAgICB9Ci0gICAg
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRlc19wcm9jZXNzKHNkLT5iYWNraW5nX3N0b3Jl
KTsKKyAgICBld2tfdGlsZWRfYmFja2luZ19zdG9yZV91cGRhdGVzX3Byb2Nlc3Moc21hcnREYXRh
LT5iYWNraW5nX3N0b3JlKTsKIAogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLXN0YXRpYyBF
aW5hX0Jvb2wgX2V3a192aWV3X3RpbGVkX3NtYXJ0X2NvbnRlbnRzX3Jlc2l6ZShFd2tfVmlld19T
bWFydF9EYXRhKiBzZCwgaW50IHcsIGludCBoKQorc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdf
dGlsZWRfc21hcnRfY29udGVudHNfcmVzaXplKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0
YSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogewotICAgIGV3a190aWxlZF9iYWNraW5nX3N0b3Jl
X2NvbnRlbnRzX3Jlc2l6ZShzZC0+YmFja2luZ19zdG9yZSwgdywgaCk7CisgICAgZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfY29udGVudHNfcmVzaXplKHNtYXJ0RGF0YS0+YmFja2luZ19zdG9yZSwg
d2lkdGgsIGhlaWdodCk7CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotc3RhdGljIEVpbmFf
Qm9vbCBfZXdrX3ZpZXdfdGlsZWRfc21hcnRfem9vbV9zZXQoRXdrX1ZpZXdfU21hcnRfRGF0YSog
c2QsIGZsb2F0IHpvb20sIEV2YXNfQ29vcmQgY3gsIEV2YXNfQ29vcmQgY3kpCitzdGF0aWMgRWlu
YV9Cb29sIF9ld2tfdmlld190aWxlZF9zbWFydF96b29tX3NldChFd2tfVmlld19TbWFydF9EYXRh
KiBzbWFydERhdGEsIGZsb2F0IHpvb20sIEV2YXNfQ29vcmQgY2VudGVyWCwgRXZhc19Db29yZCBj
ZW50ZXJZKQogewogICAgIEV2YXNfQ29vcmQgeCwgeSwgdywgaDsKICAgICBFaW5hX0Jvb2wgcjsK
LSAgICByID0gZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfem9vbV9zZXQoc2QtPmJhY2tpbmdfc3Rv
cmUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ6b29tLCBjeCwg
Y3ksICZ4LCAmeSk7CisgICAgciA9IGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3pvb21fc2V0KHNt
YXJ0RGF0YS0+YmFja2luZ19zdG9yZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJnpvb20sIGNlbnRlclgsIGNlbnRlclksICZ4LCAmeSk7CiAgICAgaWYgKCFyKQog
ICAgICAgICByZXR1cm4gcjsKLSAgICBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9kaXNhYmxlZF91
cGRhdGVfc2V0KHNkLT5iYWNraW5nX3N0b3JlLCBFSU5BX1RSVUUpOwotICAgIHIgPSBfcGFyZW50
X3NjLnpvb21fc2V0KHNkLCB6b29tLCBjeCwgY3kpOwotICAgIGV3a19mcmFtZV9zY3JvbGxfc2V0
KHNkLT5tYWluX2ZyYW1lLCAteCwgLXkpOwotICAgIGV3a19mcmFtZV9zY3JvbGxfc2l6ZV9nZXQo
c2QtPm1haW5fZnJhbWUsICZ3LCAmaCk7Ci0gICAgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZml4
X29mZnNldHMoc2QtPmJhY2tpbmdfc3RvcmUsIHcsIGgpOwotICAgIGV3a192aWV3X3Njcm9sbHNf
cHJvY2VzcyhzZCk7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsY3VsYXRlKHNkLT5iYWNraW5n
X3N0b3JlKTsKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxjdWxhdGUoc2QtPnNlbGYpOwotICAg
IGV3a190aWxlZF9iYWNraW5nX3N0b3JlX2Rpc2FibGVkX3VwZGF0ZV9zZXQoc2QtPmJhY2tpbmdf
c3RvcmUsIEVJTkFfRkFMU0UpOworICAgIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX2Rpc2FibGVk
X3VwZGF0ZV9zZXQoc21hcnREYXRhLT5iYWNraW5nX3N0b3JlLCBFSU5BX1RSVUUpOworICAgIHIg
PSBfcGFyZW50X3NjLnpvb21fc2V0KHNtYXJ0RGF0YSwgem9vbSwgY2VudGVyWCwgY2VudGVyWSk7
CisgICAgZXdrX2ZyYW1lX3Njcm9sbF9zZXQoc21hcnREYXRhLT5tYWluX2ZyYW1lLCAteCwgLXkp
OworICAgIGV3a19mcmFtZV9zY3JvbGxfc2l6ZV9nZXQoc21hcnREYXRhLT5tYWluX2ZyYW1lLCAm
dywgJmgpOworICAgIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX2ZpeF9vZmZzZXRzKHNtYXJ0RGF0
YS0+YmFja2luZ19zdG9yZSwgdywgaCk7CisgICAgZXdrX3ZpZXdfc2Nyb2xsc19wcm9jZXNzKHNt
YXJ0RGF0YSk7CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsY3VsYXRlKHNtYXJ0RGF0YS0+YmFj
a2luZ19zdG9yZSk7CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsY3VsYXRlKHNtYXJ0RGF0YS0+
c2VsZik7CisgICAgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZGlzYWJsZWRfdXBkYXRlX3NldChz
bWFydERhdGEtPmJhY2tpbmdfc3RvcmUsIEVJTkFfRkFMU0UpOwogICAgIHJldHVybiByOwogfQog
Ci1zdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld190aWxlZF9zbWFydF96b29tX3dlYWtfc2V0KEV3
a19WaWV3X1NtYXJ0X0RhdGEqIHNkLCBmbG9hdCB6b29tLCBFdmFzX0Nvb3JkIGN4LCBFdmFzX0Nv
b3JkIGN5KQorc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfdGlsZWRfc21hcnRfem9vbV93ZWFr
X3NldChFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEsIGZsb2F0IHpvb20sIEV2YXNfQ29v
cmQgY2VudGVyWCwgRXZhc19Db29yZCBjZW50ZXJZKQogewotICAgIHJldHVybiBld2tfdGlsZWRf
YmFja2luZ19zdG9yZV96b29tX3dlYWtfc2V0KHNkLT5iYWNraW5nX3N0b3JlLCB6b29tLCBjeCwg
Y3kpOworICAgIHJldHVybiBld2tfdGlsZWRfYmFja2luZ19zdG9yZV96b29tX3dlYWtfc2V0KHNt
YXJ0RGF0YS0+YmFja2luZ19zdG9yZSwgem9vbSwgY2VudGVyWCwgY2VudGVyWSk7CiB9CiAKLXN0
YXRpYyB2b2lkIF9ld2tfdmlld190aWxlZF9zbWFydF96b29tX3dlYWtfc21vb3RoX3NjYWxlX3Nl
dChFd2tfVmlld19TbWFydF9EYXRhKiBzZCwgRWluYV9Cb29sIHNtb290aF9zY2FsZSkKK3N0YXRp
YyB2b2lkIF9ld2tfdmlld190aWxlZF9zbWFydF96b29tX3dlYWtfc21vb3RoX3NjYWxlX3NldChF
d2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEsIEVpbmFfQm9vbCBzbW9vdGhTY2FsZSkKIHsK
LSAgICBld2tfdGlsZWRfYmFja2luZ19zdG9yZV96b29tX3dlYWtfc21vb3RoX3NjYWxlX3NldChz
ZC0+YmFja2luZ19zdG9yZSwgc21vb3RoX3NjYWxlKTsKKyAgICBld2tfdGlsZWRfYmFja2luZ19z
dG9yZV96b29tX3dlYWtfc21vb3RoX3NjYWxlX3NldChzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUs
IHNtb290aFNjYWxlKTsKIH0KIAotc3RhdGljIHZvaWQgX2V3a192aWV3X3RpbGVkX3NtYXJ0X2Zs
dXNoKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkKQorc3RhdGljIHZvaWQgX2V3a192aWV3X3RpbGVk
X3NtYXJ0X2ZsdXNoKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSkKIHsKLSAgICBld2tf
dGlsZWRfYmFja2luZ19zdG9yZV9mbHVzaChzZC0+YmFja2luZ19zdG9yZSk7Ci0gICAgX3BhcmVu
dF9zYy5mbHVzaChzZCk7CisgICAgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZmx1c2goc21hcnRE
YXRhLT5iYWNraW5nX3N0b3JlKTsKKyAgICBfcGFyZW50X3NjLmZsdXNoKHNtYXJ0RGF0YSk7CiB9
CiAKLXN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3RpbGVkX3NtYXJ0X3ByZV9yZW5kZXJfcmVn
aW9uKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkLCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwg
RXZhc19Db29yZCB3LCBFdmFzX0Nvb3JkIGgsIGZsb2F0IHpvb20pCitzdGF0aWMgRWluYV9Cb29s
IF9ld2tfdmlld190aWxlZF9zbWFydF9wcmVfcmVuZGVyX3JlZ2lvbihFd2tfVmlld19TbWFydF9E
YXRhKiBzbWFydERhdGEsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5LCBFdmFzX0Nvb3JkIHdp
ZHRoLCBFdmFzX0Nvb3JkIGhlaWdodCwgZmxvYXQgem9vbSkKIHsKICAgICByZXR1cm4gZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZWdpb24KLSAgICAgICAgICAgICAgIChzZC0+
YmFja2luZ19zdG9yZSwgeCwgeSwgdywgaCwgem9vbSk7CisgICAgICAgICAgICAgICAoc21hcnRE
YXRhLT5iYWNraW5nX3N0b3JlLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCB6b29tKTsKIH0KIAotc3Rh
dGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfdGlsZWRfc21hcnRfcHJlX3JlbmRlcl9yZWxhdGl2ZV9y
YWRpdXMoRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QsIHVuc2lnbmVkIGludCBuLCBmbG9hdCB6b29t
KQorc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfdGlsZWRfc21hcnRfcHJlX3JlbmRlcl9yZWxh
dGl2ZV9yYWRpdXMoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhLCB1bnNpZ25lZCBpbnQg
biwgZmxvYXQgem9vbSkKIHsKICAgICByZXR1cm4gZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJl
X3JlbmRlcl9yZWxhdGl2ZV9yYWRpdXMKLSAgICAgICAgICAgICAgIChzZC0+YmFja2luZ19zdG9y
ZSwgbiwgem9vbSk7CisgICAgICAgICAgICAgICAoc21hcnREYXRhLT5iYWNraW5nX3N0b3JlLCBu
LCB6b29tKTsKIH0KIAotc3RhdGljIHZvaWQgX2V3a192aWV3X3RpbGVkX3NtYXJ0X3ByZV9yZW5k
ZXJfY2FuY2VsKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkKQorc3RhdGljIHZvaWQgX2V3a192aWV3
X3RpbGVkX3NtYXJ0X3ByZV9yZW5kZXJfY2FuY2VsKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0
RGF0YSkKIHsKLSAgICBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX2NhbmNlbChz
ZC0+YmFja2luZ19zdG9yZSk7CisgICAgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRl
cl9jYW5jZWwoc21hcnREYXRhLT5iYWNraW5nX3N0b3JlKTsKIH0KIAotc3RhdGljIEVpbmFfQm9v
bCBfZXdrX3ZpZXdfdGlsZWRfc21hcnRfZGlzYWJsZV9yZW5kZXIoRXdrX1ZpZXdfU21hcnRfRGF0
YSogc2QpCitzdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld190aWxlZF9zbWFydF9kaXNhYmxlX3Jl
bmRlcihFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEpCiB7Ci0gICAgcmV0dXJuIGV3a190
aWxlZF9iYWNraW5nX3N0b3JlX2Rpc2FibGVfcmVuZGVyKHNkLT5iYWNraW5nX3N0b3JlKTsKKyAg
ICByZXR1cm4gZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZGlzYWJsZV9yZW5kZXIoc21hcnREYXRh
LT5iYWNraW5nX3N0b3JlKTsKIH0KIAotc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfdGlsZWRf
c21hcnRfZW5hYmxlX3JlbmRlcihFd2tfVmlld19TbWFydF9EYXRhKiBzZCkKK3N0YXRpYyBFaW5h
X0Jvb2wgX2V3a192aWV3X3RpbGVkX3NtYXJ0X2VuYWJsZV9yZW5kZXIoRXdrX1ZpZXdfU21hcnRf
RGF0YSogc21hcnREYXRhKQogewotICAgIHJldHVybiBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9l
bmFibGVfcmVuZGVyKHNkLT5iYWNraW5nX3N0b3JlKTsKKyAgICByZXR1cm4gZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfZW5hYmxlX3JlbmRlcihzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUpOwogfQog
CiBFaW5hX0Jvb2wgZXdrX3ZpZXdfdGlsZWRfc21hcnRfc2V0KEV3a19WaWV3X1NtYXJ0X0NsYXNz
KiBhcGkpCkBAIC0yNjgsMjEgKzI2OCwyMSBAQCBzdGF0aWMgaW5saW5lIEV2YXNfU21hcnQqIF9l
d2tfdmlld190aWxlZF9zbWFydF9jbGFzc19uZXcodm9pZCkKICAgICByZXR1cm4gc21hcnQ7CiB9
CiAKLUV2YXNfT2JqZWN0KiBld2tfdmlld190aWxlZF9hZGQoRXZhcyogZSkKK0V2YXNfT2JqZWN0
KiBld2tfdmlld190aWxlZF9hZGQoRXZhcyogY2FudmFzKQogewotICAgIHJldHVybiBldmFzX29i
amVjdF9zbWFydF9hZGQoZSwgX2V3a192aWV3X3RpbGVkX3NtYXJ0X2NsYXNzX25ldygpKTsKKyAg
ICByZXR1cm4gZXZhc19vYmplY3Rfc21hcnRfYWRkKGNhbnZhcywgX2V3a192aWV3X3RpbGVkX3Nt
YXJ0X2NsYXNzX25ldygpKTsKIH0KIAotRXdrX1RpbGVfVW51c2VkX0NhY2hlKiBld2tfdmlld190
aWxlZF91bnVzZWRfY2FjaGVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQorRXdrX1RpbGVfVW51
c2VkX0NhY2hlKiBld2tfdmlld190aWxlZF91bnVzZWRfY2FjaGVfZ2V0KGNvbnN0IEV2YXNfT2Jq
ZWN0KiBld2tUaWxlKQogewotICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0gZXdrX3ZpZXdf
c21hcnRfZGF0YV9nZXQobyk7CisgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QgPSBld2tfdmll
d19zbWFydF9kYXRhX2dldChld2tUaWxlKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
Tl9WQUwoc2QsIDApOwogICAgIHJldHVybiBld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX3Vu
dXNlZF9jYWNoZV9nZXQoc2QtPmJhY2tpbmdfc3RvcmUpOwogfQogCi12b2lkIGV3a192aWV3X3Rp
bGVkX3VudXNlZF9jYWNoZV9zZXQoRXZhc19PYmplY3QqIG8sIEV3a19UaWxlX1VudXNlZF9DYWNo
ZSogY2FjaGUpCit2b2lkIGV3a192aWV3X3RpbGVkX3VudXNlZF9jYWNoZV9zZXQoRXZhc19PYmpl
Y3QqIGV3a1RpbGUsIEV3a19UaWxlX1VudXNlZF9DYWNoZSogY2FjaGUpCiB7Ci0gICAgRXdrX1Zp
ZXdfU21hcnRfRGF0YSogc2QgPSBld2tfdmlld19zbWFydF9kYXRhX2dldChvKTsKKyAgICBFd2tf
Vmlld19TbWFydF9EYXRhKiBzZCA9IGV3a192aWV3X3NtYXJ0X2RhdGFfZ2V0KGV3a1RpbGUpOwog
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkKTsKICAgICBld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV90aWxlX3VudXNlZF9jYWNoZV9zZXQoc2QtPmJhY2tpbmdfc3RvcmUsIGNhY2hlKTsK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfd2luZG93X2ZlYXR1cmVz
LmNwcCBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfd2luZG93X2ZlYXR1cmVzLmNwcAppbmRl
eCA4MDlkMWU4NTMxYmZkMzNkNmVlNTRhMzQ0NDQwNmE0NGE5YWY2ODYwLi4wOWNmMjdiODQ4NmM2
YWUyODY4YWJmMjBkNDQyNTBhMWY1Yzk2MTAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Vm
bC9ld2svZXdrX3dpbmRvd19mZWF0dXJlcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9lZmwvZXdr
L2V3a193aW5kb3dfZmVhdHVyZXMuY3BwCkBAIC0zNSw2NSArMzUsNjUgQEAgc3RydWN0IF9Fd2tf
V2luZG93X0ZlYXR1cmVzIHsKICAgICBXZWJDb3JlOjpXaW5kb3dGZWF0dXJlcyogY29yZTsKIH07
CiAKLXZvaWQgZXdrX3dpbmRvd19mZWF0dXJlc191bnJlZihFd2tfV2luZG93X0ZlYXR1cmVzKiB3
aW5kb3dfZmVhdHVyZXMpCit2b2lkIGV3a193aW5kb3dfZmVhdHVyZXNfdW5yZWYoRXdrX1dpbmRv
d19GZWF0dXJlcyogd2luZG93RmVhdHVyZXMpCiB7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk4od2luZG93X2ZlYXR1cmVzKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9GQUxTRV9SRVRVUk4o
d2luZG93X2ZlYXR1cmVzLT5fX3JlZiA+IDApOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOKHdpbmRvd0ZlYXR1cmVzKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9GQUxTRV9SRVRVUk4od2lu
ZG93RmVhdHVyZXMtPl9fcmVmID4gMCk7CiAKLSAgICBpZiAoLS13aW5kb3dfZmVhdHVyZXMtPl9f
cmVmKQorICAgIGlmICgtLXdpbmRvd0ZlYXR1cmVzLT5fX3JlZikKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgZGVsZXRlIHdpbmRvd19mZWF0dXJlcy0+Y29yZTsKLSAgICB3aW5kb3dfZmVhdHVyZXMt
PmNvcmUgPSAwOwotICAgIGZyZWUod2luZG93X2ZlYXR1cmVzKTsKKyAgICBkZWxldGUgd2luZG93
RmVhdHVyZXMtPmNvcmU7CisgICAgd2luZG93RmVhdHVyZXMtPmNvcmUgPSAwOworICAgIGZyZWUo
d2luZG93RmVhdHVyZXMpOwogfQogCi12b2lkIGV3a193aW5kb3dfZmVhdHVyZXNfcmVmKEV3a19X
aW5kb3dfRmVhdHVyZXMqIHdpbmRvd19mZWF0dXJlcykKK3ZvaWQgZXdrX3dpbmRvd19mZWF0dXJl
c19yZWYoRXdrX1dpbmRvd19GZWF0dXJlcyogd2luZG93RmVhdHVyZXMpCiB7Ci0gICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk4od2luZG93X2ZlYXR1cmVzKTsKLSAgICB3aW5kb3dfZmVhdHVy
ZXMtPl9fcmVmKys7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4od2luZG93RmVhdHVy
ZXMpOworICAgIHdpbmRvd0ZlYXR1cmVzLT5fX3JlZisrOwogfQogCi12b2lkIGV3a193aW5kb3df
ZmVhdHVyZXNfYm9vbF9wcm9wZXJ0eV9nZXQoY29uc3QgRXdrX1dpbmRvd19GZWF0dXJlcyogd2lu
ZG93X2ZlYXR1cmVzLCBFaW5hX0Jvb2wqIHRvb2xiYXJfdmlzaWJsZSwgRWluYV9Cb29sKiBzdGF0
dXNiYXJfdmlzaWJsZSwgRWluYV9Cb29sKiBzY3JvbGxiYXJzX3Zpc2libGUsIEVpbmFfQm9vbCog
bWVudWJhcl92aXNpYmxlLCBFaW5hX0Jvb2wqIGxvY2F0aW9uYmFyX3Zpc2libGUsIEVpbmFfQm9v
bCogZnVsbHNjcmVlbikKK3ZvaWQgZXdrX3dpbmRvd19mZWF0dXJlc19ib29sX3Byb3BlcnR5X2dl
dChjb25zdCBFd2tfV2luZG93X0ZlYXR1cmVzKiB3aW5kb3dGZWF0dXJlcywgRWluYV9Cb29sKiB0
b29sYmFyVmlzaWJsZSwgRWluYV9Cb29sKiBzdGF0dXNiYXJWaXNpYmxlLCBFaW5hX0Jvb2wqIHNj
cm9sbGJhcnNWaXNpYmxlLCBFaW5hX0Jvb2wqIG1lbnViYXJWaXNpYmxlLCBFaW5hX0Jvb2wqIGxv
Y2F0aW9uYmFyVmlzaWJsZSwgRWluYV9Cb29sKiBmdWxsU2NyZWVuKQogewotICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOKHdpbmRvd19mZWF0dXJlcyk7Ci0gICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk4od2luZG93X2ZlYXR1cmVzLT5jb3JlKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTih3aW5kb3dGZWF0dXJlcyk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk4od2luZG93RmVhdHVyZXMtPmNvcmUpOwogCi0gICAgaWYgKHRvb2xiYXJfdmlzaWJsZSkKLSAg
ICAgICAgKnRvb2xiYXJfdmlzaWJsZSA9IHdpbmRvd19mZWF0dXJlcy0+Y29yZS0+dG9vbEJhclZp
c2libGU7CisgICAgaWYgKHRvb2xiYXJWaXNpYmxlKQorICAgICAgICAqdG9vbGJhclZpc2libGUg
PSB3aW5kb3dGZWF0dXJlcy0+Y29yZS0+dG9vbEJhclZpc2libGU7CiAKLSAgICBpZiAoc3RhdHVz
YmFyX3Zpc2libGUpCi0gICAgICAgICpzdGF0dXNiYXJfdmlzaWJsZSA9IHdpbmRvd19mZWF0dXJl
cy0+Y29yZS0+c3RhdHVzQmFyVmlzaWJsZTsKKyAgICBpZiAoc3RhdHVzYmFyVmlzaWJsZSkKKyAg
ICAgICAgKnN0YXR1c2JhclZpc2libGUgPSB3aW5kb3dGZWF0dXJlcy0+Y29yZS0+c3RhdHVzQmFy
VmlzaWJsZTsKIAotICAgIGlmIChzY3JvbGxiYXJzX3Zpc2libGUpCi0gICAgICAgICpzY3JvbGxi
YXJzX3Zpc2libGUgPSB3aW5kb3dfZmVhdHVyZXMtPmNvcmUtPnNjcm9sbGJhcnNWaXNpYmxlOwor
ICAgIGlmIChzY3JvbGxiYXJzVmlzaWJsZSkKKyAgICAgICAgKnNjcm9sbGJhcnNWaXNpYmxlID0g
d2luZG93RmVhdHVyZXMtPmNvcmUtPnNjcm9sbGJhcnNWaXNpYmxlOwogCi0gICAgaWYgKG1lbnVi
YXJfdmlzaWJsZSkKLSAgICAgICAgKm1lbnViYXJfdmlzaWJsZSA9IHdpbmRvd19mZWF0dXJlcy0+
Y29yZS0+bWVudUJhclZpc2libGU7CisgICAgaWYgKG1lbnViYXJWaXNpYmxlKQorICAgICAgICAq
bWVudWJhclZpc2libGUgPSB3aW5kb3dGZWF0dXJlcy0+Y29yZS0+bWVudUJhclZpc2libGU7CiAK
LSAgICBpZiAobG9jYXRpb25iYXJfdmlzaWJsZSkKLSAgICAgICAgKmxvY2F0aW9uYmFyX3Zpc2li
bGUgPSB3aW5kb3dfZmVhdHVyZXMtPmNvcmUtPmxvY2F0aW9uQmFyVmlzaWJsZTsKKyAgICBpZiAo
bG9jYXRpb25iYXJWaXNpYmxlKQorICAgICAgICAqbG9jYXRpb25iYXJWaXNpYmxlID0gd2luZG93
RmVhdHVyZXMtPmNvcmUtPmxvY2F0aW9uQmFyVmlzaWJsZTsKIAotICAgIGlmIChmdWxsc2NyZWVu
KQotICAgICAgICAqZnVsbHNjcmVlbiA9IHdpbmRvd19mZWF0dXJlcy0+Y29yZS0+ZnVsbHNjcmVl
bjsKKyAgICBpZiAoZnVsbFNjcmVlbikKKyAgICAgICAgKmZ1bGxTY3JlZW4gPSB3aW5kb3dGZWF0
dXJlcy0+Y29yZS0+ZnVsbHNjcmVlbjsKIH0KIAotdm9pZCBld2tfd2luZG93X2ZlYXR1cmVzX2lu
dF9wcm9wZXJ0eV9nZXQoY29uc3QgRXdrX1dpbmRvd19GZWF0dXJlcyogd2luZG93X2ZlYXR1cmVz
LCBpbnQqIHgsIGludCogeSwgaW50KiB3LCBpbnQqIGgpCit2b2lkIGV3a193aW5kb3dfZmVhdHVy
ZXNfaW50X3Byb3BlcnR5X2dldChjb25zdCBFd2tfV2luZG93X0ZlYXR1cmVzKiB3aW5kb3dGZWF0
dXJlcywgaW50KiB4LCBpbnQqIHksIGludCogd2lkdGgsIGludCogaGVpZ2h0KQogewotICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHdpbmRvd19mZWF0dXJlcyk7Ci0gICAgRUlOQV9TQUZF
VFlfT05fTlVMTF9SRVRVUk4od2luZG93X2ZlYXR1cmVzLT5jb3JlKTsKKyAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTih3aW5kb3dGZWF0dXJlcyk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk4od2luZG93RmVhdHVyZXMtPmNvcmUpOwogCiAgICAgaWYgKHgpCi0gICAgICAgICp4
ID0gd2luZG93X2ZlYXR1cmVzLT5jb3JlLT54U2V0ID8gc3RhdGljX2Nhc3Q8aW50Pih3aW5kb3df
ZmVhdHVyZXMtPmNvcmUtPngpIDogLTE7CisgICAgICAgICp4ID0gd2luZG93RmVhdHVyZXMtPmNv
cmUtPnhTZXQgPyBzdGF0aWNfY2FzdDxpbnQ+KHdpbmRvd0ZlYXR1cmVzLT5jb3JlLT54KSA6IC0x
OwogCiAgICAgaWYgKHkpCi0gICAgICAgICp5ID0gd2luZG93X2ZlYXR1cmVzLT5jb3JlLT55U2V0
ID8gc3RhdGljX2Nhc3Q8aW50Pih3aW5kb3dfZmVhdHVyZXMtPmNvcmUtPnkpIDogLTE7CisgICAg
ICAgICp5ID0gd2luZG93RmVhdHVyZXMtPmNvcmUtPnlTZXQgPyBzdGF0aWNfY2FzdDxpbnQ+KHdp
bmRvd0ZlYXR1cmVzLT5jb3JlLT55KSA6IC0xOwogCi0gICAgaWYgKHcpCi0gICAgICAgICp3ID0g
d2luZG93X2ZlYXR1cmVzLT5jb3JlLT53aWR0aFNldCA/IHN0YXRpY19jYXN0PGludD4od2luZG93
X2ZlYXR1cmVzLT5jb3JlLT53aWR0aCkgOiAtMTsKKyAgICBpZiAod2lkdGgpCisgICAgICAgICp3
aWR0aCA9IHdpbmRvd0ZlYXR1cmVzLT5jb3JlLT53aWR0aFNldCA/IHN0YXRpY19jYXN0PGludD4o
d2luZG93RmVhdHVyZXMtPmNvcmUtPndpZHRoKSA6IC0xOwogCi0gICAgaWYgKGgpCi0gICAgICAg
ICpoID0gd2luZG93X2ZlYXR1cmVzLT5jb3JlLT5oZWlnaHRTZXQgPyBzdGF0aWNfY2FzdDxpbnQ+
KHdpbmRvd19mZWF0dXJlcy0+Y29yZS0+aGVpZ2h0KSA6IC0xOworICAgIGlmIChoZWlnaHQpCisg
ICAgICAgICpoZWlnaHQgPSB3aW5kb3dGZWF0dXJlcy0+Y29yZS0+aGVpZ2h0U2V0ID8gc3RhdGlj
X2Nhc3Q8aW50Pih3aW5kb3dGZWF0dXJlcy0+Y29yZS0+aGVpZ2h0KSA6IC0xOwogfQogCiAvKiBp
bnRlcm5hbCBtZXRob2RzICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiovCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110624</attachid>
            <date>2011-10-11 18:23:49 -0700</date>
            <delta_ts>2011-10-11 19:38:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69073-20111012102350.patch</filename>
            <type>text/plain</type>
            <size>421314</size>
            <attacher name="Gyuyoung Kim">gyuyoung.kim</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTY5OTUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZs
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZwppbmRleCBiYjg1NzQxNjM3
YTVkZmUyY2I5OTcxMmZmNzEzODAxY2JmY2U2ODk2Li5kZTNhMjQ5ZGMxODI5ZDA2MGZlZjg3MTg3
NWM5Y2EyNjNhNzJhYjk2IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTIgQEAKKzIwMTEt
MTAtMDcgIEd5dXlvdW5nIEtpbSAgPGd5dXlvdW5nLmtpbUBzYW1zdW5nLmNvbT4KKworICAgICAg
ICBbRUZMXSBDaGFuZ2UgZWZsIHN0eWxlIHBhcmFtZXRlciB2YXJpYWJsZXMgd2l0aCBXZWJLaXQg
Y29kaW5nIFN0eWxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD02OTA3MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFRoaXMgaXMgYSB0aGlyZCBzdGVwIGluIG9yZGVyIHRvIGJlIG1vcmUgY29tcGxpYW50IHdp
dGggV2ViS2l0IGNvZGluZyBzdHlsZS4KKyAgICAgICAgV2UgaGF2ZSB1c2VkIG9uZS1sZXR0ZXJ8
IHR3by1sZXR0ZXIgcGFyYW1ldGVyIGFjY29yZGluZyB0byBlZmwgc3R5bGUuIEhvd2V2ZXIsIGl0
J3MgbW9yZSBkaWZmaWN1bHQKKyAgICAgICAgZm9yIG90aGVyIHJldmlld2VycyB0byByZXZpZXcg
RUZMIHBhdGNoZXMuIFNvLCB0aGlzIHBhdGNoIGNoYW5nZXMgZWZsIHN0eWxlIHBhcmFtZXRlcnMK
KyAgICAgICAgd2l0aCBtZWFuaW5nZnVsIG9uZS4KKworICAgICAgICBNYWpvcnMgY2hhbmdlcyBh
cmUgbGlzdGVkIGJlbG93LAorCisgICAgICAgIC0gVXNlIGV3a0ZyYW1lIGluc3RlYWQgb2YgbyBw
YXJhbWV0ZXIgaW4gZXdrX2ZyYW1lLmNwcC4KKyAgICAgICAgLSBVc2UgZXdrVmlldyBpbnN0ZWFk
IG9mIG8gcGFyYW1ldGVyIGluIGV3a192aWV3LmNwcC4KKyAgICAgICAgLSBVc2UgbWVudSBhbmQg
aXRlbSBpbnN0ZWFkIG9mIG8gcGFyYW1ldGVyIGluIGV3a19jb250ZXh0bWVudS5jcHAuCisgICAg
ICAgIC0gVXNlIGV3a1RpbGUgaW5zdGVhZCBvZiBvIHBhcmFtZXRlciBpbiBld2tfdGlsZV94eHgu
Y3BwLgorICAgICAgICAtIFVzZSB0aWxlIHBhcmFtZXRlciBuYW1lIGluc3RlYWQgb2YgdCBwYXJh
bWV0ZXIgaW4gZXdrX3RpbGVfeHh4LmNwcC4KKyAgICAgICAgLSBVc2Ugc21hcnREYXRhIGluc3Rl
YWQgb2Ygc2QgcGFyYW1ldGVyIGZvciBFd2tfWFhYWF9TbWFydF9EYXRhIHN0cnVjdC4KKyAgICAg
ICAgLSBVc2Ugd2lkdGgsIGhlaWdodCBpbnN0ZWFkIG9mIHcsIGggcGFyYW1ldGVyLgorICAgICAg
ICAtIFVzZSB4eHhFdmVudCBpbnN0ZWFkIG9mIGV2IHBhcmFtZXRlciBmb3IgZXZlbnQuIChlLmcu
IGRvd25FdmVudCwgdXBFdmVudCwgd2hlZWxFdmVudCkKKyAgICAgICAgLSBVc2Ugc2Nyb2xsWCwg
c2Nyb2xsWSwgc2Nyb2xsV2lkdGgsIHNjcm9sbEhlaWdodCwgY2VudGVyWCwgY2VudGVyWSwgZGVs
dGFYLCBkZWx0YVkgaW5zdGVhZCBvZiBzeCwgeHksIHN3LAorICAgICAgICBzaCwgY3gsIGN5LCBk
eCwgZHkuCisgICAgICAgIC0gVXNlIHRpbGVVbnVzZWRDYWNoZSBpbnN0ZWFkIG9mIHR1YyBwYXJh
bWV0ZXIgaW4gdGlsZWQgYmFja2luZyBzdG9yZS4KKyAgICAgICAgLSBVc2UgcmVkLCBncmVlbiwg
Ymx1ZSBhbmQgYWxwaGEgaW5zdGVhZCBvZiByLGcsYixhLgorICAgICAgICAtIFJlbW92ZSAiXyIg
ZnJvbSBwYXJhbWV0ZXIgdmFyaWFibGUuCisgICAgICAgIC0gUnVuIGRlbWFyY2hpJ3MgY29kaW5n
IHN0eWxlIHNjcmlwdCBmb3IgZXdrX3RpbGVfeHh4LmNwcCBmaWxlcy4KKyAgICAgICAgLSBSZW1v
dmUgKnZvaWQqIHBhcmFtZXRlciBpbiBld2tfdGlsZV94eHguY3BwJ3MgaW50ZXJuYWwgZnVuY3Rp
b25zLgorCisgICAgICAgICogZXdrL2V3a19hdXRoX3NvdXAuY3BwOgorICAgICAgICAqIGV3ay9l
d2tfY29udGV4dG1lbnUuY3BwOgorICAgICAgICAqIGV3ay9ld2tfY29va2llcy5jcHA6CisgICAg
ICAgICogZXdrL2V3a19mcmFtZS5jcHA6CisgICAgICAgICogZXdrL2V3a19oaXN0b3J5LmNwcDoK
KyAgICAgICAgKiBld2svZXdrX2pzLmNwcDoKKyAgICAgICAgKiBld2svZXdrX3Byb3RvY29sX2hh
bmRsZXJfc291cC5jcHA6CisgICAgICAgICogZXdrL2V3a19zZXR0aW5ncy5jcHA6CisgICAgICAg
ICogZXdrL2V3a190aWxlZF9iYWNraW5nX3N0b3JlLmNwcDoKKyAgICAgICAgKiBld2svZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmUuaDoKKyAgICAgICAgKiBld2svZXdrX3RpbGVkX21hdHJpeC5jcHA6
CisgICAgICAgICogZXdrL2V3a190aWxlZF9tYXRyaXguaDoKKyAgICAgICAgKiBld2svZXdrX3Rp
bGVkX21vZGVsLmNwcDoKKyAgICAgICAgKiBld2svZXdrX3RpbGVkX21vZGVsLmg6CisgICAgICAg
ICogZXdrL2V3a192aWV3LmNwcDoKKyAgICAgICAgKiBld2svZXdrX3ZpZXdfc2luZ2xlLmNwcDoK
KyAgICAgICAgKiBld2svZXdrX3ZpZXdfdGlsZWQuY3BwOgorICAgICAgICAqIGV3ay9ld2tfd2lu
ZG93X2ZlYXR1cmVzLmNwcDoKKwogMjAxMS0xMC0wNiAgR3l1eW91bmcgS2ltICA8Z3l1eW91bmcu
a2ltQHNhbXN1bmcuY29tPgogCiAgICAgICAgIFtFRkxdIENoYW5nZSBkYXRhIHR5cGUgb2YgcGFy
YW1ldGVyIGluIGV3a192aWV3X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfZ2V0KCkuCkBAIC0xOTk4LDcg
KzIwNDcsNyBAQAogICAgICAgICAoV2ViQ29yZTo6Q2hyb21lQ2xpZW50RWZsOjpydW5PcGVuUGFu
ZWwpOgogICAgICAgICAqIGV3ay9ld2tfdmlldy5jcHA6CiAgICAgICAgIChld2tfdmlld19ydW5f
b3Blbl9wYW5lbCk6Ci0gICAgICAgICogZXdrL2V3a192aWV3LmgKKyAgICAgICAgKiBld2svZXdr
X3ZpZXcuaDoKIAogMjAxMS0wNi0yNyAgR3l1eW91bmcgS2ltICA8Z3l1eW91bmcua2ltQHNhbXN1
bmcuY29tPgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2F1dGhfc291
cC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2F1dGhfc291cC5jcHAKaW5kZXggZmIz
NmE5MTU5ZjI3YjI3MmJhMWYzMDI2NDZkY2M3ZjAxZmYxNWFkMS4uY2JjODc1NmVkODVlYmMxNWU3
N2JjNDFiMzNlMDUzM2M0MjVhMTkyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvZXdr
L2V3a19hdXRoX3NvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfYXV0aF9z
b3VwLmNwcApAQCAtNjMsMTAgKzYzLDEwIEBAIHN0YXRpYyB2b2lkIGV3a19hdXRoX3NvdXBfZGlh
bG9nX2luaXQoRXdrX1NvdXBfQXV0aF9EaWFsb2cqIGluc3RhbmNlKQogewogfQogCi1zdGF0aWMg
dm9pZCBld2tfYXV0aF9zb3VwX2RpYWxvZ19zZXNzaW9uX2ZlYXR1cmVfaW5pdChTb3VwU2Vzc2lv
bkZlYXR1cmVJbnRlcmZhY2UqIGZlYXR1cmVfaW50ZXJmYWNlLCBncG9pbnRlciBpbnRlcmZhY2Vf
ZGF0YSkKK3N0YXRpYyB2b2lkIGV3a19hdXRoX3NvdXBfZGlhbG9nX3Nlc3Npb25fZmVhdHVyZV9p
bml0KFNvdXBTZXNzaW9uRmVhdHVyZUludGVyZmFjZSogZmVhdHVyZUludGVyZmFjZSwgZ3BvaW50
ZXIgaW50ZXJmYWNlRGF0YSkKIHsKLSAgICBmZWF0dXJlX2ludGVyZmFjZS0+YXR0YWNoID0gYXR0
YWNoOwotICAgIGZlYXR1cmVfaW50ZXJmYWNlLT5kZXRhY2ggPSBkZXRhY2g7CisgICAgZmVhdHVy
ZUludGVyZmFjZS0+YXR0YWNoID0gYXR0YWNoOworICAgIGZlYXR1cmVJbnRlcmZhY2UtPmRldGFj
aCA9IGRldGFjaDsKIH0KIAogdm9pZCBld2tfYXV0aF9zb3VwX3Nob3dfZGlhbG9nX2NhbGxiYWNr
X3NldChFd2tfQXV0aF9TaG93X0RpYWxvZ19DYWxsYmFjayBjYWxsYmFjaykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfY29udGV4dG1lbnUuY3BwIGIvU291cmNlL1dlYktp
dC9lZmwvZXdrL2V3a19jb250ZXh0bWVudS5jcHAKaW5kZXggYWExNjE5ZmQ5MThmMTI2MzBhMDE3
MDIyYjZlZGZlM2U3M2NjYzhlNi4uNjIxYzc5YzcwNTFkM2U4MDBkYTA3NTU5ZTk0OGRhNWU5Yzg0
OTkzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19jb250ZXh0bWVudS5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19jb250ZXh0bWVudS5jcHAKQEAgLTky
LDExICs5MiwxMSBAQCBFaW5hX0Jvb2wgZXdrX2NvbnRleHRfbWVudV9kZXN0cm95KEV3a19Db250
ZXh0X01lbnUqIG1lbnUpCiAjZW5kaWYKIH0KIAotY29uc3QgRWluYV9MaXN0KiBld2tfY29udGV4
dF9tZW51X2l0ZW1fbGlzdF9nZXQoY29uc3QgRXdrX0NvbnRleHRfTWVudSogbykKK2NvbnN0IEVp
bmFfTGlzdCogZXdrX2NvbnRleHRfbWVudV9pdGVtX2xpc3RfZ2V0KGNvbnN0IEV3a19Db250ZXh0
X01lbnUqIG1lbnUpCiB7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKG8sIDAp
OworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChtZW51LCAwKTsKIAotICAgIHJl
dHVybiBvLT5pdGVtczsKKyAgICByZXR1cm4gbWVudS0+aXRlbXM7CiB9CiAKIEV3a19Db250ZXh0
X01lbnVfSXRlbSogZXdrX2NvbnRleHRfbWVudV9pdGVtX25ldyhFd2tfQ29udGV4dF9NZW51X0l0
ZW1fVHlwZSB0eXBlLApAQCAtMTQyLDY4ICsxNDIsNjggQEAgdm9pZCBld2tfY29udGV4dF9tZW51
X2l0ZW1fZnJlZShFd2tfQ29udGV4dF9NZW51X0l0ZW0qIGl0ZW0pCiAgICAgZnJlZShpdGVtKTsK
IH0KIAotRXdrX0NvbnRleHRfTWVudV9JdGVtX1R5cGUgZXdrX2NvbnRleHRfbWVudV9pdGVtX3R5
cGVfZ2V0KGNvbnN0IEV3a19Db250ZXh0X01lbnVfSXRlbSogbykKK0V3a19Db250ZXh0X01lbnVf
SXRlbV9UeXBlIGV3a19jb250ZXh0X21lbnVfaXRlbV90eXBlX2dldChjb25zdCBFd2tfQ29udGV4
dF9NZW51X0l0ZW0qIGl0ZW0pCiB7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFM
KG8sIEVXS19BQ1RJT05fVFlQRSk7Ci0gICAgcmV0dXJuIG8tPnR5cGU7CisgICAgRUlOQV9TQUZF
VFlfT05fTlVMTF9SRVRVUk5fVkFMKGl0ZW0sIEVXS19BQ1RJT05fVFlQRSk7CisgICAgcmV0dXJu
IGl0ZW0tPnR5cGU7CiB9CiAKLUVpbmFfQm9vbCBld2tfY29udGV4dF9tZW51X2l0ZW1fdHlwZV9z
ZXQoRXdrX0NvbnRleHRfTWVudV9JdGVtKiBvLCBFd2tfQ29udGV4dF9NZW51X0l0ZW1fVHlwZSB0
eXBlKQorRWluYV9Cb29sIGV3a19jb250ZXh0X21lbnVfaXRlbV90eXBlX3NldChFd2tfQ29udGV4
dF9NZW51X0l0ZW0qIGl0ZW0sIEV3a19Db250ZXh0X01lbnVfSXRlbV9UeXBlIHR5cGUpCiB7Ci0g
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKG8sIEVJTkFfRkFMU0UpOwotICAgIG8t
PnR5cGUgPSB0eXBlOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChpdGVtLCBF
SU5BX0ZBTFNFKTsKKyAgICBpdGVtLT50eXBlID0gdHlwZTsKICAgICByZXR1cm4gRUlOQV9UUlVF
OwogfQogCi1Fd2tfQ29udGV4dF9NZW51X0FjdGlvbiBld2tfY29udGV4dF9tZW51X2l0ZW1fYWN0
aW9uX2dldChjb25zdCBFd2tfQ29udGV4dF9NZW51X0l0ZW0qIG8pCitFd2tfQ29udGV4dF9NZW51
X0FjdGlvbiBld2tfY29udGV4dF9tZW51X2l0ZW1fYWN0aW9uX2dldChjb25zdCBFd2tfQ29udGV4
dF9NZW51X0l0ZW0qIGl0ZW0pCiB7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFM
KG8sIEVXS19DT05URVhUX01FTlVfSVRFTV9UQUdfTk9fQUNUSU9OKTsKLSAgICByZXR1cm4gby0+
YWN0aW9uOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChpdGVtLCBFV0tfQ09O
VEVYVF9NRU5VX0lURU1fVEFHX05PX0FDVElPTik7CisgICAgcmV0dXJuIGl0ZW0tPmFjdGlvbjsK
IH0KIAotRWluYV9Cb29sIGV3a19jb250ZXh0X21lbnVfaXRlbV9hY3Rpb25fc2V0KEV3a19Db250
ZXh0X01lbnVfSXRlbSogbywgRXdrX0NvbnRleHRfTWVudV9BY3Rpb24gYWN0aW9uKQorRWluYV9C
b29sIGV3a19jb250ZXh0X21lbnVfaXRlbV9hY3Rpb25fc2V0KEV3a19Db250ZXh0X01lbnVfSXRl
bSogaXRlbSwgRXdrX0NvbnRleHRfTWVudV9BY3Rpb24gYWN0aW9uKQogewotICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOX1ZBTChvLCBFSU5BX0ZBTFNFKTsKLSAgICBvLT5hY3Rpb24gPSBh
Y3Rpb247CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGl0ZW0sIEVJTkFfRkFM
U0UpOworICAgIGl0ZW0tPmFjdGlvbiA9IGFjdGlvbjsKICAgICByZXR1cm4gRUlOQV9UUlVFOwog
fQogCi1jb25zdCBjaGFyKiBld2tfY29udGV4dF9tZW51X2l0ZW1fdGl0bGVfZ2V0KGNvbnN0IEV3
a19Db250ZXh0X01lbnVfSXRlbSogbykKK2NvbnN0IGNoYXIqIGV3a19jb250ZXh0X21lbnVfaXRl
bV90aXRsZV9nZXQoY29uc3QgRXdrX0NvbnRleHRfTWVudV9JdGVtKiBpdGVtKQogewotICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChvLCAwKTsKLSAgICByZXR1cm4gby0+dGl0bGU7
CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGl0ZW0sIDApOworICAgIHJldHVy
biBpdGVtLT50aXRsZTsKIH0KIAotY29uc3QgY2hhciogZXdrX2NvbnRleHRfbWVudV9pdGVtX3Rp
dGxlX3NldChFd2tfQ29udGV4dF9NZW51X0l0ZW0qIG8sIGNvbnN0IGNoYXIqIHRpdGxlKQorY29u
c3QgY2hhciogZXdrX2NvbnRleHRfbWVudV9pdGVtX3RpdGxlX3NldChFd2tfQ29udGV4dF9NZW51
X0l0ZW0qIGl0ZW0sIGNvbnN0IGNoYXIqIHRpdGxlKQogewotICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOX1ZBTChvLCAwKTsKLSAgICBlaW5hX3N0cmluZ3NoYXJlX3JlcGxhY2UoJm8tPnRp
dGxlLCB0aXRsZSk7Ci0gICAgcmV0dXJuIG8tPnRpdGxlOworICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOX1ZBTChpdGVtLCAwKTsKKyAgICBlaW5hX3N0cmluZ3NoYXJlX3JlcGxhY2UoJml0
ZW0tPnRpdGxlLCB0aXRsZSk7CisgICAgcmV0dXJuIGl0ZW0tPnRpdGxlOwogfQogCi1FaW5hX0Jv
b2wgZXdrX2NvbnRleHRfbWVudV9pdGVtX2NoZWNrZWRfZ2V0KGNvbnN0IEV3a19Db250ZXh0X01l
bnVfSXRlbSogbykKK0VpbmFfQm9vbCBld2tfY29udGV4dF9tZW51X2l0ZW1fY2hlY2tlZF9nZXQo
Y29uc3QgRXdrX0NvbnRleHRfTWVudV9JdGVtKiBpdGVtKQogewotICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOX1ZBTChvLCBFSU5BX0ZBTFNFKTsKLSAgICByZXR1cm4gby0+Y2hlY2tlZDsK
KyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoaXRlbSwgRUlOQV9GQUxTRSk7Cisg
ICAgcmV0dXJuIGl0ZW0tPmNoZWNrZWQ7CiB9CiAKLUVpbmFfQm9vbCBld2tfY29udGV4dF9tZW51
X2l0ZW1fY2hlY2tlZF9zZXQoRXdrX0NvbnRleHRfTWVudV9JdGVtKiBvLCBFaW5hX0Jvb2wgY2hl
Y2tlZCkKK0VpbmFfQm9vbCBld2tfY29udGV4dF9tZW51X2l0ZW1fY2hlY2tlZF9zZXQoRXdrX0Nv
bnRleHRfTWVudV9JdGVtKiBpdGVtLCBFaW5hX0Jvb2wgY2hlY2tlZCkKIHsKLSAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwobywgRUlOQV9GQUxTRSk7Ci0gICAgby0+Y2hlY2tlZCA9
IGNoZWNrZWQ7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGl0ZW0sIEVJTkFf
RkFMU0UpOworICAgIGl0ZW0tPmNoZWNrZWQgPSBjaGVja2VkOwogICAgIHJldHVybiBFSU5BX1RS
VUU7CiB9CiAKLUVpbmFfQm9vbCBld2tfY29udGV4dF9tZW51X2l0ZW1fZW5hYmxlZF9nZXQoY29u
c3QgRXdrX0NvbnRleHRfTWVudV9JdGVtKiBvKQorRWluYV9Cb29sIGV3a19jb250ZXh0X21lbnVf
aXRlbV9lbmFibGVkX2dldChjb25zdCBFd2tfQ29udGV4dF9NZW51X0l0ZW0qIGl0ZW0pCiB7Ci0g
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKG8sIEVJTkFfRkFMU0UpOwotICAgIHJl
dHVybiBvLT5lbmFibGVkOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChpdGVt
LCBFSU5BX0ZBTFNFKTsKKyAgICByZXR1cm4gaXRlbS0+ZW5hYmxlZDsKIH0KIAotRWluYV9Cb29s
IGV3a19jb250ZXh0X21lbnVfaXRlbV9lbmFibGVkX3NldChFd2tfQ29udGV4dF9NZW51X0l0ZW0q
IG8sIEVpbmFfQm9vbCBlbmFibGVkKQorRWluYV9Cb29sIGV3a19jb250ZXh0X21lbnVfaXRlbV9l
bmFibGVkX3NldChFd2tfQ29udGV4dF9NZW51X0l0ZW0qIGl0ZW0sIEVpbmFfQm9vbCBlbmFibGVk
KQogewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChvLCBFSU5BX0ZBTFNFKTsK
LSAgICBvLT5lbmFibGVkID0gZW5hYmxlZDsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
Tl9WQUwoaXRlbSwgRUlOQV9GQUxTRSk7CisgICAgaXRlbS0+ZW5hYmxlZCA9IGVuYWJsZWQ7CiAg
ICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIApAQCAtMjU2LDExICsyNTYsMTEgQEAgRXdrX0NvbnRl
eHRfTWVudSogZXdrX2NvbnRleHRfbWVudV9uZXcoRXZhc19PYmplY3QqIHZpZXcsIFdlYkNvcmU6
OkNvbnRleHRNZW51Q28KICAqIEBzZWUgZXdrX2NvbnRleHRfbWVudV91bnJlZgogICogQHNlZSBl
d2tfY29udGV4dF9tZW51X2Rlc3Ryb3kKICAqLwotRWluYV9Cb29sIGV3a19jb250ZXh0X21lbnVf
ZnJlZShFd2tfQ29udGV4dF9NZW51KiBvKQorRWluYV9Cb29sIGV3a19jb250ZXh0X21lbnVfZnJl
ZShFd2tfQ29udGV4dF9NZW51KiBtZW51KQogewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOX1ZBTChvLCBFSU5BX0ZBTFNFKTsKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19j
YWxsKG8tPnZpZXcsICJjb250ZXh0bWVudSxmcmVlIiwgbyk7Ci0gICAgZXdrX2NvbnRleHRfbWVu
dV91bnJlZihvKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwobWVudSwgRUlO
QV9GQUxTRSk7CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChtZW51LT52aWV3
LCAiY29udGV4dG1lbnUsZnJlZSIsIG1lbnUpOworICAgIGV3a19jb250ZXh0X21lbnVfdW5yZWYo
bWVudSk7CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIApAQCAtMjc1LDcgKzI3NSw3IEBAIEVp
bmFfQm9vbCBld2tfY29udGV4dF9tZW51X2ZyZWUoRXdrX0NvbnRleHRfTWVudSogbykKICAqCiAg
KiBAc2VlIGV3a19jb250ZXh0X21lbnVfaXRlbV9uZXcKICAqLwotdm9pZCBld2tfY29udGV4dF9t
ZW51X2l0ZW1fYXBwZW5kKEV3a19Db250ZXh0X01lbnUqIG8sIFdlYkNvcmU6OkNvbnRleHRNZW51
SXRlbSYgY29yZSkKK3ZvaWQgZXdrX2NvbnRleHRfbWVudV9pdGVtX2FwcGVuZChFd2tfQ29udGV4
dF9NZW51KiBtZW51LCBXZWJDb3JlOjpDb250ZXh0TWVudUl0ZW0mIGNvcmUpCiB7CiAgICAgRXdr
X0NvbnRleHRfTWVudV9JdGVtX1R5cGUgdHlwZSA9IHN0YXRpY19jYXN0PEV3a19Db250ZXh0X01l
bnVfSXRlbV9UeXBlPihjb3JlLnR5cGUoKSk7CiAgICAgRXdrX0NvbnRleHRfTWVudV9BY3Rpb24g
YWN0aW9uID0gc3RhdGljX2Nhc3Q8RXdrX0NvbnRleHRfTWVudV9BY3Rpb24+KGNvcmUuYWN0aW9u
KCkpOwpAQCAtMjg1LDggKzI4NSw4IEBAIHZvaWQgZXdrX2NvbnRleHRfbWVudV9pdGVtX2FwcGVu
ZChFd2tfQ29udGV4dF9NZW51KiBvLCBXZWJDb3JlOjpDb250ZXh0TWVudUl0ZW0mCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZS5lbmFibGVkKCkpOwogICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKG1lbnVfaXRlbSk7CiAKLSAgICBvLT5pdGVtcyA9
IGVpbmFfbGlzdF9hcHBlbmQoby0+aXRlbXMsIG1lbnVfaXRlbSk7Ci0gICAgZXZhc19vYmplY3Rf
c21hcnRfY2FsbGJhY2tfY2FsbChvLT52aWV3LCAiY29udGV4dG1lbnUsaXRlbSxhcHBlbmRlZCIs
IG8pOworICAgIG1lbnUtPml0ZW1zID0gZWluYV9saXN0X2FwcGVuZChtZW51LT5pdGVtcywgbWVu
dV9pdGVtKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKG1lbnUtPnZpZXcs
ICJjb250ZXh0bWVudSxpdGVtLGFwcGVuZGVkIiwgbWVudSk7CiB9CiAKIC8qKgpAQCAtMzAxLDEy
ICszMDEsMTIgQEAgdm9pZCBld2tfY29udGV4dF9tZW51X2l0ZW1fYXBwZW5kKEV3a19Db250ZXh0
X01lbnUqIG8sIFdlYkNvcmU6OkNvbnRleHRNZW51SXRlbSYKICAqCiAgKiBAc2VlIGV3a19jb250
ZXh0X21lbnVfaXRlbV9saXN0X2dldAogICovCi1Fd2tfQ29udGV4dF9NZW51KiBld2tfY29udGV4
dF9tZW51X2N1c3RvbV9nZXQoY29uc3QgRXdrX0NvbnRleHRfTWVudSogbykKK0V3a19Db250ZXh0
X01lbnUqIGV3a19jb250ZXh0X21lbnVfY3VzdG9tX2dldChjb25zdCBFd2tfQ29udGV4dF9NZW51
KiBtZW51KQogewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChvLCAwKTsKKyAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwobWVudSwgMCk7CiAKLSAgICBldmFzX29i
amVjdF9zbWFydF9jYWxsYmFja19jYWxsKG8tPnZpZXcsICJjb250ZXh0bWVudSxjdXN0b21pemUi
LCBvLT5pdGVtcyk7Ci0gICAgcmV0dXJuIG87CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJh
Y2tfY2FsbChtZW51LT52aWV3LCAiY29udGV4dG1lbnUsY3VzdG9taXplIiwgbWVudS0+aXRlbXMp
OworICAgIHJldHVybiBtZW51OwogfQogCiAvKioKQEAgLTMxNiwxMSArMzE2LDExIEBAIEV3a19D
b250ZXh0X01lbnUqIGV3a19jb250ZXh0X21lbnVfY3VzdG9tX2dldChjb25zdCBFd2tfQ29udGV4
dF9NZW51KiBvKQogICoKICAqIEBwYXJhbSBvIHRoZSBjb250ZXh0IG1lbnUgb2JqZWN0CiAgKi8K
LXZvaWQgZXdrX2NvbnRleHRfbWVudV9zaG93KGNvbnN0IEV3a19Db250ZXh0X01lbnUqIG8pCit2
b2lkIGV3a19jb250ZXh0X21lbnVfc2hvdyhjb25zdCBFd2tfQ29udGV4dF9NZW51KiBtZW51KQog
ewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKG8pOworICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOKG1lbnUpOwogCi0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2Fs
bChvLT52aWV3LCAiY29udGV4dG1lbnUsc2hvdyIsIG8pOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0
X2NhbGxiYWNrX2NhbGwobWVudS0+dmlldywgImNvbnRleHRtZW51LHNob3ciLCBtZW51KTsKIH0K
IAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2Nvb2tpZXMu
Y3BwIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19jb29raWVzLmNwcAppbmRleCBhYTlmMmM4
OTExOGE5ZjE2YjUzMWQyYzhhODMyZjUwNjQxZGVjMzU0Li4wNGQ3MDQxNTdkMzU4ZTNiODZjOTcy
NWZjOTU4M2I4M2FhYzA4NTVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdr
X2Nvb2tpZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfY29va2llcy5jcHAK
QEAgLTE0MiwxNCArMTQyLDE0IEBAIHZvaWQgZXdrX2Nvb2tpZXNfY29va2llX2ZyZWUoRXdrX0Nv
b2tpZSogY29va2llKQogI2VuZGlmCiB9CiAKLXZvaWQgZXdrX2Nvb2tpZXNfcG9saWN5X3NldChF
d2tfQ29va2llX1BvbGljeSBwKQordm9pZCBld2tfY29va2llc19wb2xpY3lfc2V0KEV3a19Db29r
aWVfUG9saWN5IGNvb2tpZVBvbGljeSkKIHsKICNpZiBVU0UoU09VUCkKICAgICBTb3VwQ29va2ll
SmFyKiBjb29raWVKYXIgPSBXZWJDb3JlOjpkZWZhdWx0Q29va2llSmFyKCk7CiAgICAgU291cENv
b2tpZUphckFjY2VwdFBvbGljeSBwb2xpY3k7CiAKICAgICBwb2xpY3kgPSBTT1VQX0NPT0tJRV9K
QVJfQUNDRVBUX0FMV0FZUzsKLSAgICBzd2l0Y2ggKHApIHsKKyAgICBzd2l0Y2ggKGNvb2tpZVBv
bGljeSkgewogICAgIGNhc2UgRVdLX0NPT0tJRV9KQVJfQUNDRVBUX05FVkVSOgogICAgICAgICBw
b2xpY3kgPSBTT1VQX0NPT0tJRV9KQVJfQUNDRVBUX05FVkVSOwogICAgICAgICBicmVhazsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfZnJhbWUuY3BwIGIvU291cmNlL1dl
YktpdC9lZmwvZXdrL2V3a19mcmFtZS5jcHAKaW5kZXggYmM4ZjhhZTY2ZTNlNjhhNzMwNWVhZmEx
ZjljOTIzOTQ4NjJmNTkxYS4uN2RhZWJkODhjMDBiYjEwMGVjYjQ1YjI1ZTViMzc0YzA2OTBlMTYy
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19mcmFtZS5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19mcmFtZS5jcHAKQEAgLTg2LDUzICs4Niw1MyBAQCBz
dHJ1Y3QgRWluYV9JdGVyYXRvcl9Fd2tfRnJhbWUgewogfTsKIAogI2lmbmRlZiBFV0tfVFlQRV9D
SEVDSwotI2RlZmluZSBFV0tfRlJBTUVfVFlQRV9DSEVDSyhvLCAuLi4pIGRvIHsgfSB3aGlsZSAo
MCkKKyNkZWZpbmUgRVdLX0ZSQU1FX1RZUEVfQ0hFQ0soZXdrRnJhbWUsIC4uLikgZG8geyB9IHdo
aWxlICgwKQogI2Vsc2UKLSNkZWZpbmUgRVdLX0ZSQU1FX1RZUEVfQ0hFQ0sobywgLi4uKSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyNkZWZpbmUgRVdLX0ZSQU1FX1RZUEVf
Q0hFQ0soZXdrRnJhbWUsIC4uLikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CiAgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGNvbnN0IGNoYXIqIF90bXBfb3R5cGUgPSBldmFz
X29iamVjdF90eXBlX2dldChvKTsgICAgICAgICAgICAgICBcCisgICAgICAgIGNvbnN0IGNoYXIq
IF90bXBfb3R5cGUgPSBldmFzX29iamVjdF90eXBlX2dldChld2tGcmFtZSk7ICAgICAgICAgICAg
ICAgXAogICAgICAgICBpZiAoRUlOQV9VTkxJS0VMWShfdG1wX290eXBlICE9IEVXS19GUkFNRV9U
WVBFX1NUUikpIHsgICAgICAgICAgXAogICAgICAgICAgICAgRUlOQV9MT0dfQ1JJVCAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAg
ICgiJXAgKCVzKSBpcyBub3Qgb2YgYW4gZXdrX2ZyYW1lISIsIG8sICAgICAgICAgICAgICAgICAg
XAorICAgICAgICAgICAgICAgICgiJXAgKCVzKSBpcyBub3Qgb2YgYW4gZXdrX2ZyYW1lISIsIGV3
a0ZyYW1lLCAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICBfdG1wX290eXBlID8g
X3RtcF9vdHlwZSA6ICIobnVsbCkiKTsgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAg
IHJldHVybiBfX1ZBX0FSR1NfXzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKICAgICB9IHdoaWxlICgwKQogI2VuZGlmCiAKLSNkZWZp
bmUgRVdLX0ZSQU1FX1NEX0dFVChvLCBwdHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCi0gICAgRXdrX0ZyYW1lX1NtYXJ0X0RhdGEqIHB0ciA9IHN0YXRpY19jYXN0PEV3a19GcmFt
ZV9TbWFydF9EYXRhKj4oZXZhc19vYmplY3Rfc21hcnRfZGF0YV9nZXQobykpCisjZGVmaW5lIEVX
S19GUkFNRV9TRF9HRVQoZXdrRnJhbWUsIHB0cikgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICBFd2tfRnJhbWVfU21hcnRfRGF0YSogcHRyID0gc3RhdGljX2Nhc3Q8RXdrX0Zy
YW1lX1NtYXJ0X0RhdGEqPihldmFzX29iamVjdF9zbWFydF9kYXRhX2dldChld2tGcmFtZSkpCiAK
LSNkZWZpbmUgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4obywgcHRyLCAuLi4pICAgICAgICAg
XAotICAgIEVXS19GUkFNRV9UWVBFX0NIRUNLKG8sIF9fVkFfQVJHU19fKTsgICAgICAgICAgICAg
ICBcCi0gICAgRVdLX0ZSQU1FX1NEX0dFVChvLCBwdHIpOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyNkZWZpbmUgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHB0ciwg
Li4uKSAgICAgICAgIFwKKyAgICBFV0tfRlJBTUVfVFlQRV9DSEVDSyhld2tGcmFtZSwgX19WQV9B
UkdTX18pOyAgICAgICAgICAgICAgIFwKKyAgICBFV0tfRlJBTUVfU0RfR0VUKGV3a0ZyYW1lLCBw
dHIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBpZiAoIXB0cikgeyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBDUklUSUNBTCgibm8g
c21hcnQgZGF0YSBmb3Igb2JqZWN0ICVwICglcykiLCAgICBcCi0gICAgICAgICAgICAgICAgIG8s
IGV2YXNfb2JqZWN0X3R5cGVfZ2V0KG8pKTsgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAg
ZXdrRnJhbWUsIGV2YXNfb2JqZWN0X3R5cGVfZ2V0KGV3a0ZyYW1lKSk7ICAgICAgICAgICBcCiAg
ICAgICAgIHJldHVybiBfX1ZBX0FSR1NfXzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
ICAgICB9CiAKIHN0YXRpYyBFdmFzX1NtYXJ0X0NsYXNzIF9wYXJlbnRfc2MgPSBFVkFTX1NNQVJU
X0NMQVNTX0lOSVRfTlVMTDsKIAogI2lmZGVmIEVXS19GUkFNRV9ERUJVRwotc3RhdGljIGlubGlu
ZSB2b2lkIF9ld2tfZnJhbWVfZGVidWcoRXZhc19PYmplY3QqIG8pCitzdGF0aWMgaW5saW5lIHZv
aWQgX2V3a19mcmFtZV9kZWJ1ZyhFdmFzX09iamVjdCogZXdrRnJhbWUpCiB7CiAgICAgRXZhc19P
YmplY3QqIGNsaXAsICogcGFyZW50OwogICAgIEV2YXNfQ29vcmQgeCwgeSwgdywgaCwgY3gsIGN5
LCBjdywgY2g7CiAgICAgaW50IHIsIGcsIGIsIGEsIGNyLCBjZywgY2IsIGNhOwogCi0gICAgZXZh
c19vYmplY3RfY29sb3JfZ2V0KG8sICZyLCAmZywgJmIsICZhKTsKLSAgICBldmFzX29iamVjdF9n
ZW9tZXRyeV9nZXQobywgJngsICZ5LCAmdywgJmgpOworICAgIGV2YXNfb2JqZWN0X2NvbG9yX2dl
dChld2tGcmFtZSwgJnIsICZnLCAmYiwgJmEpOworICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dl
dChld2tGcmFtZSwgJngsICZ5LCAmdywgJmgpOwogCi0gICAgY2xpcCA9IGV2YXNfb2JqZWN0X2Ns
aXBfZ2V0KG8pOworICAgIGNsaXAgPSBldmFzX29iamVjdF9jbGlwX2dldChld2tGcmFtZSk7CiAg
ICAgZXZhc19vYmplY3RfY29sb3JfZ2V0KGNsaXAsICZjciwgJmNnLCAmY2IsICZjYSk7CiAgICAg
ZXZhc19vYmplY3RfZ2VvbWV0cnlfZ2V0KGNsaXAsICZjeCwgJmN5LCAmY3csICZjaCk7CiAKICAg
ICBmcHJpbnRmKHN0ZGVyciwgIiVwOiB0eXBlPSVzIG5hbWU9JXMsIHZpc2libGU9JWQsIGNvbG9y
PSUwMnglMDJ4JTAyeCUwMngsICVkLCVkKyVkeCVkLCBjbGlwcGVyPSVwICglZCwgJTAyeCUwMngl
MDJ4JTAyeCwgJWQsJWQrJWR4JWQpXG4iLAotICAgICAgICAgICAgbywgZXZhc19vYmplY3RfdHlw
ZV9nZXQobyksIGV2YXNfb2JqZWN0X25hbWVfZ2V0KG8pLCBldmFzX29iamVjdF92aXNpYmxlX2dl
dChvKSwKKyAgICAgICAgICAgIGV3a0ZyYW1lLCBldmFzX29iamVjdF90eXBlX2dldChld2tGcmFt
ZSksIGV2YXNfb2JqZWN0X25hbWVfZ2V0KGV3a0ZyYW1lKSwgZXZhc19vYmplY3RfdmlzaWJsZV9n
ZXQoZXdrRnJhbWUpLAogICAgICAgICAgICAgciwgZywgYiwgYSwgeCwgeSwgdywgaCwKICAgICAg
ICAgICAgIGNsaXAsIGV2YXNfb2JqZWN0X3Zpc2libGVfZ2V0KGNsaXApLCBjciwgY2csIGNiLCBj
YSwgY3gsIGN5LCBjdywgY2gpOwotICAgIHBhcmVudCA9IGV2YXNfb2JqZWN0X3NtYXJ0X3BhcmVu
dF9nZXQobyk7CisgICAgcGFyZW50ID0gZXZhc19vYmplY3Rfc21hcnRfcGFyZW50X2dldChld2tG
cmFtZSk7CiAgICAgaWYgKCFwYXJlbnQpCiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiXG4iKTsK
ICAgICBlbHNlCkBAIC0xNzEsMTQgKzE3MSwxNCBAQCBzdGF0aWMgRWluYV9Cb29sIF9ld2tfZnJh
bWVfY2hpbGRyZW5faXRlcmF0b3JfbmV4dChFaW5hX0l0ZXJhdG9yX0V3a19GcmFtZSogaXQsCiAg
ICAgcmV0dXJuIEVJTkFfRkFMU0U7CiB9CiAKLXN0YXRpYyBFdmFzX09iamVjdCogX2V3a19mcmFt
ZV9jaGlsZHJlbl9pdGVyYXRvcl9nZXRfY29udGFpbmVyKEVpbmFfSXRlcmF0b3JfRXdrX0ZyYW1l
KiBpdCkKK3N0YXRpYyBFdmFzX09iamVjdCogX2V3a19mcmFtZV9jaGlsZHJlbl9pdGVyYXRvcl9n
ZXRfY29udGFpbmVyKEVpbmFfSXRlcmF0b3JfRXdrX0ZyYW1lKiBpdGVyYXRvcikKIHsKLSAgICBy
ZXR1cm4gaXQtPm9iajsKKyAgICByZXR1cm4gaXRlcmF0b3ItPm9iajsKIH0KIAotc3RhdGljIHZv
aWQgX2V3a19mcmFtZV9zbWFydF9hZGQoRXZhc19PYmplY3QqIG8pCitzdGF0aWMgdm9pZCBfZXdr
X2ZyYW1lX3NtYXJ0X2FkZChFdmFzX09iamVjdCogZXdrRnJhbWUpCiB7Ci0gICAgRVdLX0ZSQU1F
X1NEX0dFVChvLCBzZCk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVChld2tGcmFtZSwgc2QpOwogCiAg
ICAgaWYgKCFzZCkgewogICAgICAgICBzZCA9IHN0YXRpY19jYXN0PEV3a19GcmFtZV9TbWFydF9E
YXRhKj4oY2FsbG9jKDEsIHNpemVvZihFd2tfRnJhbWVfU21hcnRfRGF0YSkpKTsKQEAgLTE4Niwx
MiArMTg2LDEyIEBAIHN0YXRpYyB2b2lkIF9ld2tfZnJhbWVfc21hcnRfYWRkKEV2YXNfT2JqZWN0
KiBvKQogICAgICAgICAgICAgQ1JJVElDQUwoImNvdWxkIG5vdCBhbGxvY2F0ZSBFd2tfRnJhbWVf
U21hcnRfRGF0YSIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGV2
YXNfb2JqZWN0X3NtYXJ0X2RhdGFfc2V0KG8sIHNkKTsKKyAgICAgICAgZXZhc19vYmplY3Rfc21h
cnRfZGF0YV9zZXQoZXdrRnJhbWUsIHNkKTsKICAgICB9CiAKLSAgICBzZC0+c2VsZiA9IG87Cisg
ICAgc2QtPnNlbGYgPSBld2tGcmFtZTsKIAotICAgIF9wYXJlbnRfc2MuYWRkKG8pOworICAgIF9w
YXJlbnRfc2MuYWRkKGV3a0ZyYW1lKTsKICAgICBldmFzX29iamVjdF9zdGF0aWNfY2xpcF9zZXQo
c2QtPmJhc2UuY2xpcHBlciwgRUlOQV9GQUxTRSk7CiAgICAgZXZhc19vYmplY3RfbW92ZShzZC0+
YmFzZS5jbGlwcGVyLCAwLCAwKTsKICAgICBldmFzX29iamVjdF9yZXNpemUoc2QtPmJhc2UuY2xp
cHBlciwgMCwgMCk7CkBAIC0yMjgsMTUgKzIyOCwxNSBAQCBzdGF0aWMgdm9pZCBfZXdrX2ZyYW1l
X3NtYXJ0X2FkZChFdmFzX09iamVjdCogbykKICAgICBpZiAoaSA+IDYpCiAgICAgICAgIGkgPSAw
OwogCi0gICAgZXZhc19vYmplY3Rfc21hcnRfbWVtYmVyX2FkZChzZC0+cmVnaW9uLCBvKTsKKyAg
ICBldmFzX29iamVjdF9zbWFydF9tZW1iZXJfYWRkKHNkLT5yZWdpb24sIGV3a0ZyYW1lKTsKICAg
ICBldmFzX29iamVjdF9oaWRlKHNkLT5yZWdpb24pOwogI2VuZGlmCiB9CiAKLXN0YXRpYyB2b2lk
IF9ld2tfZnJhbWVfc21hcnRfZGVsKEV2YXNfT2JqZWN0KiBvKQorc3RhdGljIHZvaWQgX2V3a19m
cmFtZV9zbWFydF9kZWwoRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewotICAgIFdSTigibz0lcCIs
IG8pOyAvLyBYWFggUkVNT1ZFIE1FIExBVEVSCi0gICAgRVdLX0ZSQU1FX1NEX0dFVChvLCBzZCk7
CisgICAgV1JOKCJld2tGcmFtZT0lcCIsIGV3a0ZyYW1lKTsgLy8gWFhYIFJFTU9WRSBNRSBMQVRF
UgorICAgIEVXS19GUkFNRV9TRF9HRVQoZXdrRnJhbWUsIHNkKTsKIAogICAgIGlmIChzZCkgewog
ICAgICAgICBpZiAoc2QtPmZyYW1lKSB7CkBAIC0yNTIsMjEgKzI1MiwyMSBAQCBzdGF0aWMgdm9p
ZCBfZXdrX2ZyYW1lX3NtYXJ0X2RlbChFdmFzX09iamVjdCogbykKICAgICAgICAgZWluYV9zdHJp
bmdzaGFyZV9kZWwoc2QtPm5hbWUpOwogICAgIH0KIAotICAgIF9wYXJlbnRfc2MuZGVsKG8pOwor
ICAgIF9wYXJlbnRfc2MuZGVsKGV3a0ZyYW1lKTsKIH0KIAotc3RhdGljIHZvaWQgX2V3a19mcmFt
ZV9zbWFydF9yZXNpemUoRXZhc19PYmplY3QqIG8sIEV2YXNfQ29vcmQgdywgRXZhc19Db29yZCBo
KQorc3RhdGljIHZvaWQgX2V3a19mcmFtZV9zbWFydF9yZXNpemUoRXZhc19PYmplY3QqIGV3a0Zy
YW1lLCBFdmFzX0Nvb3JkIHdpZHRoLCBFdmFzX0Nvb3JkIGhlaWdodCkKIHsKLSAgICBFV0tfRlJB
TUVfU0RfR0VUKG8sIHNkKTsKLSAgICBldmFzX29iamVjdF9yZXNpemUoc2QtPmJhc2UuY2xpcHBl
ciwgdywgaCk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVChld2tGcmFtZSwgc2QpOworICAgIGV2YXNf
b2JqZWN0X3Jlc2l6ZShzZC0+YmFzZS5jbGlwcGVyLCB3aWR0aCwgaGVpZ2h0KTsKIAogI2lmZGVm
IEVXS19GUkFNRV9ERUJVRwotICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShzZC0+cmVnaW9uLCB3LCBo
KTsKKyAgICBldmFzX29iamVjdF9yZXNpemUoc2QtPnJlZ2lvbiwgd2lkdGgsIGhlaWdodCk7CiAg
ICAgRXZhc19Db29yZCB4LCB5OwotICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldChzZC0+cmVn
aW9uLCAmeCwgJnksICZ3LCAmaCk7CisgICAgZXZhc19vYmplY3RfZ2VvbWV0cnlfZ2V0KHNkLT5y
ZWdpb24sICZ4LCAmeSwgJndpZHRoLCAmaGVpZ2h0KTsKICAgICBJTkYoInJlZ2lvbj0lcCwgdmlz
aWJsZT0lZCwgZ2VvPSVkLCVkICsgJWR4JWQiLAotICAgICAgICBzZC0+cmVnaW9uLCBldmFzX29i
amVjdF92aXNpYmxlX2dldChzZC0+cmVnaW9uKSwgeCwgeSwgdywgaCk7Ci0gICAgX2V3a19mcmFt
ZV9kZWJ1ZyhvKTsKKyAgICAgICAgc2QtPnJlZ2lvbiwgZXZhc19vYmplY3RfdmlzaWJsZV9nZXQo
c2QtPnJlZ2lvbiksIHgsIHksIHdpZHRoLCBoZWlnaHQpOworICAgIF9ld2tfZnJhbWVfZGVidWco
ZXdrRnJhbWUpOwogI2VuZGlmCiB9CiAKQEAgLTI5MiwxNSArMjkyLDE1IEBAIHN0YXRpYyBpbmxp
bmUgRXZhc19TbWFydCogX2V3a19mcmFtZV9zbWFydF9jbGFzc19uZXcodm9pZCkKICAgICByZXR1
cm4gc21hcnQ7CiB9CiAKLUV2YXNfT2JqZWN0KiBld2tfZnJhbWVfdmlld19nZXQoY29uc3QgRXZh
c19PYmplY3QqIG8pCitFdmFzX09iamVjdCogZXdrX2ZyYW1lX3ZpZXdfZ2V0KGNvbnN0IEV2YXNf
T2JqZWN0KiBld2tGcmFtZSkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihvLCBz
ZCwgMCk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCAwKTsK
ICAgICByZXR1cm4gc2QtPnZpZXc7CiB9CiAKLUVpbmFfSXRlcmF0b3IqIGV3a19mcmFtZV9jaGls
ZHJlbl9pdGVyYXRvcl9uZXcoRXZhc19PYmplY3QqIG8pCitFaW5hX0l0ZXJhdG9yKiBld2tfZnJh
bWVfY2hpbGRyZW5faXRlcmF0b3JfbmV3KEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsKLSAgICBF
V0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgMCk7CisgICAgRVdLX0ZSQU1FX1NEX0dF
VF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCAwKTsKICAgICBFaW5hX0l0ZXJhdG9yX0V3a19GcmFt
ZSogaXQgPSBzdGF0aWNfY2FzdDxFaW5hX0l0ZXJhdG9yX0V3a19GcmFtZSo+CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKGNhbGxvYygxLCBzaXplb2YoRWluYV9JdGVyYXRvcl9F
d2tfRnJhbWUpKSk7CiAgICAgaWYgKCFpdCkKQEAgLTMxMCwyMyArMzEwLDIzIEBAIEVpbmFfSXRl
cmF0b3IqIGV3a19mcmFtZV9jaGlsZHJlbl9pdGVyYXRvcl9uZXcoRXZhc19PYmplY3QqIG8pCiAg
ICAgaXQtPmJhc2UubmV4dCA9IEZVTkNfSVRFUkFUT1JfTkVYVChfZXdrX2ZyYW1lX2NoaWxkcmVu
X2l0ZXJhdG9yX25leHQpOwogICAgIGl0LT5iYXNlLmdldF9jb250YWluZXIgPSBGVU5DX0lURVJB
VE9SX0dFVF9DT05UQUlORVIoX2V3a19mcmFtZV9jaGlsZHJlbl9pdGVyYXRvcl9nZXRfY29udGFp
bmVyKTsKICAgICBpdC0+YmFzZS5mcmVlID0gRlVOQ19JVEVSQVRPUl9GUkVFKGZyZWUpOwotICAg
IGl0LT5vYmogPSBvOworICAgIGl0LT5vYmogPSBld2tGcmFtZTsKICAgICBpdC0+Y3VycmVudElu
ZGV4ID0gMDsKICAgICByZXR1cm4gJml0LT5iYXNlOwogfQogCi1FdmFzX09iamVjdCogZXdrX2Zy
YW1lX2NoaWxkX2ZpbmQoRXZhc19PYmplY3QqIG8sIGNvbnN0IGNoYXIqIG5hbWUpCitFdmFzX09i
amVjdCogZXdrX2ZyYW1lX2NoaWxkX2ZpbmQoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBjb25zdCBj
aGFyKiBuYW1lKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAwKTsK
KyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIDApOwogICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChuYW1lLCAwKTsKICAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCAwKTsKICAgICBXVEY6OlN0cmluZyBzID0gV1RG
OjpTdHJpbmc6OmZyb21VVEY4KG5hbWUpOwogICAgIHJldHVybiBraXQoc2QtPmZyYW1lLT50cmVl
KCktPmZpbmQoV1RGOjpBdG9taWNTdHJpbmcocykpKTsKIH0KIAotRWluYV9Cb29sIGV3a19mcmFt
ZV91cmlfc2V0KEV2YXNfT2JqZWN0KiBvLCBjb25zdCBjaGFyKiB1cmkpCitFaW5hX0Jvb2wgZXdr
X2ZyYW1lX3VyaV9zZXQoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBjb25zdCBjaGFyKiB1cmkpCiB7
Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAg
IEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7CiAg
ICAgV2ViQ29yZTo6S1VSTCBrdXJsKFdlYkNvcmU6OktVUkwoKSwgV1RGOjpTdHJpbmc6OmZyb21V
VEY4KHVyaSkpOwogICAgIFdlYkNvcmU6OlJlc291cmNlUmVxdWVzdCByZXEoa3VybCk7CiAgICAg
V2ViQ29yZTo6RnJhbWVMb2FkZXIqIGxvYWRlciA9IHNkLT5mcmFtZS0+bG9hZGVyKCk7CkBAIC0z
MzQsMjEgKzMzNCwyMSBAQCBFaW5hX0Jvb2wgZXdrX2ZyYW1lX3VyaV9zZXQoRXZhc19PYmplY3Qq
IG8sIGNvbnN0IGNoYXIqIHVyaSkKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi1jb25zdCBj
aGFyKiBld2tfZnJhbWVfdXJpX2dldChjb25zdCBFdmFzX09iamVjdCogbykKK2NvbnN0IGNoYXIq
IGV3a19mcmFtZV91cmlfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsKLSAgICBF
V0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgMCk7CisgICAgRVdLX0ZSQU1FX1NEX0dF
VF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCAwKTsKICAgICByZXR1cm4gc2QtPnVyaTsKIH0KIAot
Y29uc3QgY2hhciogZXdrX2ZyYW1lX3RpdGxlX2dldChjb25zdCBFdmFzX09iamVjdCogbykKK2Nv
bnN0IGNoYXIqIGV3a19mcmFtZV90aXRsZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1l
KQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAwKTsKKyAgICBFV0tf
RlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIDApOwogICAgIHJldHVybiBzZC0+
dGl0bGU7CiB9CiAKLWNvbnN0IGNoYXIqIGV3a19mcmFtZV9uYW1lX2dldChjb25zdCBFdmFzX09i
amVjdCogbykKK2NvbnN0IGNoYXIqIGV3a19mcmFtZV9uYW1lX2dldChjb25zdCBFdmFzX09iamVj
dCogZXdrRnJhbWUpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIDAp
OworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgMCk7CiAKICAg
ICBpZiAoIXNkLT5mcmFtZSkgewogICAgICAgICBFUlIoImNvdWxkIG5vdCBnZXQgbmFtZSBvZiB1
bmluaXRpYWxpemVkIGZyYW1lLiIpOwpAQCAtMzY1LDkwICszNjUsOTAgQEAgY29uc3QgY2hhciog
ZXdrX2ZyYW1lX25hbWVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQogICAgIHJldHVybiBzZC0+
bmFtZTsKIH0KIAotRWluYV9Cb29sIGV3a19mcmFtZV9jb250ZW50c19zaXplX2dldChjb25zdCBF
dmFzX09iamVjdCogbywgRXZhc19Db29yZCogdywgRXZhc19Db29yZCogaCkKK0VpbmFfQm9vbCBl
d2tfZnJhbWVfY29udGVudHNfc2l6ZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBF
dmFzX0Nvb3JkKiB3aWR0aCwgRXZhc19Db29yZCogaGVpZ2h0KQogewotICAgIGlmICh3KQotICAg
ICAgICAqdyA9IDA7Ci0gICAgaWYgKGgpCi0gICAgICAgICpoID0gMDsKLSAgICBFV0tfRlJBTUVf
U0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgaWYgKHcpCi0gICAgICAg
ICp3ID0gc2QtPmNvbnRlbnRzX3NpemUudzsKLSAgICBpZiAoaCkKLSAgICAgICAgKmggPSBzZC0+
Y29udGVudHNfc2l6ZS5oOworICAgIGlmICh3aWR0aCkKKyAgICAgICAgKndpZHRoID0gMDsKKyAg
ICBpZiAoaGVpZ2h0KQorICAgICAgICAqaGVpZ2h0ID0gMDsKKyAgICBFV0tfRlJBTUVfU0RfR0VU
X09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOworICAgIGlmICh3aWR0aCkKKyAg
ICAgICAgKndpZHRoID0gc2QtPmNvbnRlbnRzX3NpemUudzsKKyAgICBpZiAoaGVpZ2h0KQorICAg
ICAgICAqaGVpZ2h0ID0gc2QtPmNvbnRlbnRzX3NpemUuaDsKICAgICByZXR1cm4gRUlOQV9UUlVF
OwogfQogCi1zdGF0aWMgRWluYV9Cb29sIF9ld2tfZnJhbWVfY29udGVudHNfc2V0X2ludGVybmFs
KEV3a19GcmFtZV9TbWFydF9EYXRhKiBzZCwgY29uc3QgY2hhciogY29udGVudHMsIHNpemVfdCBj
b250ZW50c19zaXplLCBjb25zdCBjaGFyKiBtaW1lX3R5cGUsIGNvbnN0IGNoYXIqIGVuY29kaW5n
LCBjb25zdCBjaGFyKiBiYXNlX3VyaSwgY29uc3QgY2hhciogdW5yZWFjaGFibGVfdXJpKQorc3Rh
dGljIEVpbmFfQm9vbCBfZXdrX2ZyYW1lX2NvbnRlbnRzX3NldF9pbnRlcm5hbChFd2tfRnJhbWVf
U21hcnRfRGF0YSogc21hcnREYXRhLCBjb25zdCBjaGFyKiBjb250ZW50cywgc2l6ZV90IGNvbnRl
bnRzU2l6ZSwgY29uc3QgY2hhciogbWltZVR5cGUsIGNvbnN0IGNoYXIqIGVuY29kaW5nLCBjb25z
dCBjaGFyKiBiYXNlVXJpLCBjb25zdCBjaGFyKiB1bnJlYWNoYWJsZVVyaSkKIHsKICAgICBzaXpl
X3QgbGVuID0gc3RybGVuKGNvbnRlbnRzKTsKLSAgICBpZiAoY29udGVudHNfc2l6ZSA8IDEgfHwg
Y29udGVudHNfc2l6ZSA+IGxlbikKLSAgICAgICAgY29udGVudHNfc2l6ZSA9IGxlbjsKLSAgICBp
ZiAoIW1pbWVfdHlwZSkKLSAgICAgICAgbWltZV90eXBlID0gInRleHQvaHRtbCI7CisgICAgaWYg
KGNvbnRlbnRzU2l6ZSA8IDEgfHwgY29udGVudHNTaXplID4gbGVuKQorICAgICAgICBjb250ZW50
c1NpemUgPSBsZW47CisgICAgaWYgKCFtaW1lVHlwZSkKKyAgICAgICAgbWltZVR5cGUgPSAidGV4
dC9odG1sIjsKICAgICBpZiAoIWVuY29kaW5nKQogICAgICAgICBlbmNvZGluZyA9ICJVVEYtOCI7
Ci0gICAgaWYgKCFiYXNlX3VyaSkKLSAgICAgICAgYmFzZV91cmkgPSAiYWJvdXQ6YmxhbmsiOwor
ICAgIGlmICghYmFzZVVyaSkKKyAgICAgICAgYmFzZVVyaSA9ICJhYm91dDpibGFuayI7CiAKLSAg
ICBXZWJDb3JlOjpLVVJMIGJhc2VLVVJMKFdlYkNvcmU6OktVUkwoKSwgV1RGOjpTdHJpbmc6OmZy
b21VVEY4KGJhc2VfdXJpKSk7CisgICAgV2ViQ29yZTo6S1VSTCBiYXNlS1VSTChXZWJDb3JlOjpL
VVJMKCksIFdURjo6U3RyaW5nOjpmcm9tVVRGOChiYXNlVXJpKSk7CiAgICAgV2ViQ29yZTo6S1VS
TCB1bnJlYWNoYWJsZUtVUkw7Ci0gICAgaWYgKHVucmVhY2hhYmxlX3VyaSkKLSAgICAgICAgdW5y
ZWFjaGFibGVLVVJMID0gV2ViQ29yZTo6S1VSTChXZWJDb3JlOjpLVVJMKCksIFdURjo6U3RyaW5n
Ojpmcm9tVVRGOCh1bnJlYWNoYWJsZV91cmkpKTsKKyAgICBpZiAodW5yZWFjaGFibGVVcmkpCisg
ICAgICAgIHVucmVhY2hhYmxlS1VSTCA9IFdlYkNvcmU6OktVUkwoV2ViQ29yZTo6S1VSTCgpLCBX
VEY6OlN0cmluZzo6ZnJvbVVURjgodW5yZWFjaGFibGVVcmkpKTsKICAgICBlbHNlCiAgICAgICAg
IHVucmVhY2hhYmxlS1VSTCA9IFdlYkNvcmU6OktVUkwoKTsKIAotICAgIFdURjo6UmVmUHRyPFdl
YkNvcmU6OlNoYXJlZEJ1ZmZlcj4gYnVmZmVyID0gV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpjcmVh
dGUoY29udGVudHMsIGNvbnRlbnRzX3NpemUpOworICAgIFdURjo6UmVmUHRyPFdlYkNvcmU6OlNo
YXJlZEJ1ZmZlcj4gYnVmZmVyID0gV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpjcmVhdGUoY29udGVu
dHMsIGNvbnRlbnRzU2l6ZSk7CiAgICAgV2ViQ29yZTo6U3Vic3RpdHV0ZURhdGEgc3Vic3RpdHV0
ZURhdGEKICAgICAgICAgKGJ1ZmZlci5yZWxlYXNlKCksCi0gICAgICAgIFdURjo6U3RyaW5nOjpm
cm9tVVRGOChtaW1lX3R5cGUpLAorICAgICAgICBXVEY6OlN0cmluZzo6ZnJvbVVURjgobWltZVR5
cGUpLAogICAgICAgICBXVEY6OlN0cmluZzo6ZnJvbVVURjgoZW5jb2RpbmcpLAogICAgICAgICBi
YXNlS1VSTCwgdW5yZWFjaGFibGVLVVJMKTsKICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVlc3Qg
cmVxdWVzdChiYXNlS1VSTCk7CiAKLSAgICBzZC0+ZnJhbWUtPmxvYWRlcigpLT5sb2FkKHJlcXVl
c3QsIHN1YnN0aXR1dGVEYXRhLCBmYWxzZSk7CisgICAgc21hcnREYXRhLT5mcmFtZS0+bG9hZGVy
KCktPmxvYWQocmVxdWVzdCwgc3Vic3RpdHV0ZURhdGEsIGZhbHNlKTsKICAgICByZXR1cm4gRUlO
QV9UUlVFOwogfQogCi1FaW5hX0Jvb2wgZXdrX2ZyYW1lX2NvbnRlbnRzX3NldChFdmFzX09iamVj
dCogbywgY29uc3QgY2hhciogY29udGVudHMsIHNpemVfdCBjb250ZW50c19zaXplLCBjb25zdCBj
aGFyKiBtaW1lX3R5cGUsIGNvbnN0IGNoYXIqIGVuY29kaW5nLCBjb25zdCBjaGFyKiBiYXNlX3Vy
aSkKK0VpbmFfQm9vbCBld2tfZnJhbWVfY29udGVudHNfc2V0KEV2YXNfT2JqZWN0KiBld2tGcmFt
ZSwgY29uc3QgY2hhciogY29udGVudHMsIHNpemVfdCBjb250ZW50c1NpemUsIGNvbnN0IGNoYXIq
IG1pbWVUeXBlLCBjb25zdCBjaGFyKiBlbmNvZGluZywgY29uc3QgY2hhciogYmFzZVVyaSkKIHsK
LSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAg
RVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsKICAg
ICBFSU5BX1NBRkVUWV9PTl9GQUxTRV9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7
CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGNvbnRlbnRzLCBFSU5BX0ZBTFNF
KTsKICAgICByZXR1cm4gX2V3a19mcmFtZV9jb250ZW50c19zZXRfaW50ZXJuYWwKLSAgICAgICAg
ICAgICAgIChzZCwgY29udGVudHMsIGNvbnRlbnRzX3NpemUsIG1pbWVfdHlwZSwgZW5jb2Rpbmcs
IGJhc2VfdXJpLCAwKTsKKyAgICAgICAgICAgICAgIChzZCwgY29udGVudHMsIGNvbnRlbnRzU2l6
ZSwgbWltZVR5cGUsIGVuY29kaW5nLCBiYXNlVXJpLCAwKTsKIH0KIAotRWluYV9Cb29sIGV3a19m
cmFtZV9jb250ZW50c19hbHRlcm5hdGVfc2V0KEV2YXNfT2JqZWN0KiBvLCBjb25zdCBjaGFyKiBj
b250ZW50cywgc2l6ZV90IGNvbnRlbnRzX3NpemUsIGNvbnN0IGNoYXIqIG1pbWVfdHlwZSwgY29u
c3QgY2hhciogZW5jb2RpbmcsIGNvbnN0IGNoYXIqIGJhc2VfdXJpLCBjb25zdCBjaGFyKiB1bnJl
YWNoYWJsZV91cmkpCitFaW5hX0Jvb2wgZXdrX2ZyYW1lX2NvbnRlbnRzX2FsdGVybmF0ZV9zZXQo
RXZhc19PYmplY3QqIGV3a0ZyYW1lLCBjb25zdCBjaGFyKiBjb250ZW50cywgc2l6ZV90IGNvbnRl
bnRzU2l6ZSwgY29uc3QgY2hhciogbWltZVR5cGUsIGNvbnN0IGNoYXIqIGVuY29kaW5nLCBjb25z
dCBjaGFyKiBiYXNlVXJpLCBjb25zdCBjaGFyKiB1bnJlYWNoYWJsZVVyaSkKIHsKLSAgICBFV0tf
RlJBTUVfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX0ZSQU1F
X1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NB
RkVUWV9PTl9GQUxTRV9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7CiAgICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGNvbnRlbnRzLCBFSU5BX0ZBTFNFKTsKLSAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodW5yZWFjaGFibGVfdXJpLCBFSU5BX0ZBTFNF
KTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodW5yZWFjaGFibGVVcmksIEVJ
TkFfRkFMU0UpOwogICAgIHJldHVybiBfZXdrX2ZyYW1lX2NvbnRlbnRzX3NldF9pbnRlcm5hbAot
ICAgICAgICAgICAgICAgKHNkLCBjb250ZW50cywgY29udGVudHNfc2l6ZSwgbWltZV90eXBlLCBl
bmNvZGluZywgYmFzZV91cmksCi0gICAgICAgICAgICAgICB1bnJlYWNoYWJsZV91cmkpOworICAg
ICAgICAgICAgICAgKHNkLCBjb250ZW50cywgY29udGVudHNTaXplLCBtaW1lVHlwZSwgZW5jb2Rp
bmcsIGJhc2VVcmksCisgICAgICAgICAgICAgICB1bnJlYWNoYWJsZVVyaSk7CiB9CiAKLUVpbmFf
Qm9vbCBld2tfZnJhbWVfc2NyaXB0X2V4ZWN1dGUoRXZhc19PYmplY3QqIG8sIGNvbnN0IGNoYXIq
IHNjcmlwdCkKK0VpbmFfQm9vbCBld2tfZnJhbWVfc2NyaXB0X2V4ZWN1dGUoRXZhc19PYmplY3Qq
IGV3a0ZyYW1lLCBjb25zdCBjaGFyKiBzY3JpcHQpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9P
Ul9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVU
VVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05fRkFMU0Vf
UkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOX1ZBTChzY3JpcHQsIEVJTkFfRkFMU0UpOwogICAgIHNkLT5mcmFtZS0+c2NyaXB0
KCktPmV4ZWN1dGVTY3JpcHQoV1RGOjpTdHJpbmc6OmZyb21VVEY4KHNjcmlwdCksIHRydWUpOwog
ICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLUVpbmFfQm9vbCBld2tfZnJhbWVfZWRpdGFibGVf
Z2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQorRWluYV9Cb29sIGV3a19mcmFtZV9lZGl0YWJsZV9n
ZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRf
T1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JF
VFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOwogICAgIHJldHVybiBzZC0+ZWRpdGFi
bGU7CiB9CiAKLUVpbmFfQm9vbCBld2tfZnJhbWVfZWRpdGFibGVfc2V0KEV2YXNfT2JqZWN0KiBv
LCBFaW5hX0Jvb2wgZWRpdGFibGUpCitFaW5hX0Jvb2wgZXdrX2ZyYW1lX2VkaXRhYmxlX3NldChF
dmFzX09iamVjdCogZXdrRnJhbWUsIEVpbmFfQm9vbCBlZGl0YWJsZSkKIHsKLSAgICBFV0tfRlJB
TUVfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX0ZSQU1FX1NE
X0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKICAgICBlZGl0YWJs
ZSA9ICEhZWRpdGFibGU7CiAgICAgaWYgKHNkLT5lZGl0YWJsZSA9PSBlZGl0YWJsZSkKQEAgLTQ1
OCw5ICs0NTgsOSBAQCBFaW5hX0Jvb2wgZXdrX2ZyYW1lX2VkaXRhYmxlX3NldChFdmFzX09iamVj
dCogbywgRWluYV9Cb29sIGVkaXRhYmxlKQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLWNo
YXIqIGV3a19mcmFtZV9zZWxlY3Rpb25fZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQorY2hhciog
ZXdrX2ZyYW1lX3NlbGVjdGlvbl9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewot
ICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAwKTsKKyAgICBFV0tfRlJBTUVf
U0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIDApOwogICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIDApOwogICAgIFdURjo6Q1N0cmluZyBzID0gc2QtPmZy
YW1lLT5lZGl0b3IoKS0+c2VsZWN0ZWRUZXh0KCkudXRmOCgpOwogICAgIGlmIChzLmlzTnVsbCgp
KQpAQCAtNDY4LDQ1ICs0NjgsNDUgQEAgY2hhciogZXdrX2ZyYW1lX3NlbGVjdGlvbl9nZXQoY29u
c3QgRXZhc19PYmplY3QqIG8pCiAgICAgcmV0dXJuIHN0cmR1cChzLmRhdGEoKSk7CiB9CiAKLUVp
bmFfQm9vbCBld2tfZnJhbWVfdGV4dF9zZWFyY2goY29uc3QgRXZhc19PYmplY3QqIG8sIGNvbnN0
IGNoYXIqIHN0cmluZywgRWluYV9Cb29sIGNhc2Vfc2Vuc2l0aXZlLCBFaW5hX0Jvb2wgZm9yd2Fy
ZCwgRWluYV9Cb29sIHdyYXApCitFaW5hX0Jvb2wgZXdrX2ZyYW1lX3RleHRfc2VhcmNoKGNvbnN0
IEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgY29uc3QgY2hhciogdGV4dCwgRWluYV9Cb29sIGNhc2VT
ZW5zaXRpdmUsIEVpbmFfQm9vbCBmb3J3YXJkLCBFaW5hX0Jvb2wgd3JhcCkKIHsKLSAgICBFV0tf
RlJBTUVfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX0ZSQU1F
X1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc3RyaW5nLCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodGV4dCwgRUlOQV9GQUxTRSk7CiAKLSAgICByZXR1
cm4gc2QtPmZyYW1lLT5lZGl0b3IoKS0+ZmluZFN0cmluZyhXVEY6OlN0cmluZzo6ZnJvbVVURjgo
c3RyaW5nKSwgZm9yd2FyZCwgY2FzZV9zZW5zaXRpdmUsIHdyYXAsIHRydWUpOworICAgIHJldHVy
biBzZC0+ZnJhbWUtPmVkaXRvcigpLT5maW5kU3RyaW5nKFdURjo6U3RyaW5nOjpmcm9tVVRGOCh0
ZXh0KSwgZm9yd2FyZCwgY2FzZVNlbnNpdGl2ZSwgd3JhcCwgdHJ1ZSk7CiB9CiAKLXVuc2lnbmVk
IGludCBld2tfZnJhbWVfdGV4dF9tYXRjaGVzX21hcmsoRXZhc19PYmplY3QqIG8sIGNvbnN0IGNo
YXIqIHN0cmluZywgRWluYV9Cb29sIGNhc2Vfc2Vuc2l0aXZlLCBFaW5hX0Jvb2wgaGlnaGxpZ2h0
LCB1bnNpZ25lZCBpbnQgbGltaXQpCit1bnNpZ25lZCBpbnQgZXdrX2ZyYW1lX3RleHRfbWF0Y2hl
c19tYXJrKEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgY29uc3QgY2hhciogc3RyaW5nLCBFaW5hX0Jv
b2wgY2FzZVNlbnNpdGl2ZSwgRWluYV9Cb29sIGhpZ2hsaWdodCwgdW5zaWduZWQgaW50IGxpbWl0
KQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAwKTsKKyAgICBFV0tf
RlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIDApOwogICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOX1ZBTChzdHJpbmcsIDApOwogCiAgICAgc2QtPmZyYW1lLT5lZGl0
b3IoKS0+c2V0TWFya2VkVGV4dE1hdGNoZXNBcmVIaWdobGlnaHRlZChoaWdobGlnaHQpOwotICAg
IHJldHVybiBzZC0+ZnJhbWUtPmVkaXRvcigpLT5jb3VudE1hdGNoZXNGb3JUZXh0KFdURjo6U3Ry
aW5nOjpmcm9tVVRGOChzdHJpbmcpLCBjYXNlX3NlbnNpdGl2ZSwgbGltaXQsIHRydWUpOworICAg
IHJldHVybiBzZC0+ZnJhbWUtPmVkaXRvcigpLT5jb3VudE1hdGNoZXNGb3JUZXh0KFdURjo6U3Ry
aW5nOjpmcm9tVVRGOChzdHJpbmcpLCBjYXNlU2Vuc2l0aXZlLCBsaW1pdCwgdHJ1ZSk7CiB9CiAK
LUVpbmFfQm9vbCBld2tfZnJhbWVfdGV4dF9tYXRjaGVzX3VubWFya19hbGwoRXZhc19PYmplY3Qq
IG8pCitFaW5hX0Jvb2wgZXdrX2ZyYW1lX3RleHRfbWF0Y2hlc191bm1hcmtfYWxsKEV2YXNfT2Jq
ZWN0KiBld2tGcmFtZSkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwg
RUlOQV9GQUxTRSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNk
LCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZy
YW1lLCBFSU5BX0ZBTFNFKTsKIAogICAgIHNkLT5mcmFtZS0+ZG9jdW1lbnQoKS0+bWFya2Vycygp
LT5yZW1vdmVNYXJrZXJzKFdlYkNvcmU6OkRvY3VtZW50TWFya2VyOjpUZXh0TWF0Y2gpOwogICAg
IHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLUVpbmFfQm9vbCBld2tfZnJhbWVfdGV4dF9tYXRjaGVz
X2hpZ2hsaWdodF9zZXQoRXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCBoaWdobGlnaHQpCitFaW5h
X0Jvb2wgZXdrX2ZyYW1lX3RleHRfbWF0Y2hlc19oaWdobGlnaHRfc2V0KEV2YXNfT2JqZWN0KiBl
d2tGcmFtZSwgRWluYV9Cb29sIGhpZ2hsaWdodCkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09S
X1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRV
Uk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKICAgICBzZC0+ZnJhbWUtPmVkaXRvcigp
LT5zZXRNYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkKGhpZ2hsaWdodCk7CiAgICAgcmV0
dXJuIEVJTkFfVFJVRTsKIH0KIAotRWluYV9Cb29sIGV3a19mcmFtZV90ZXh0X21hdGNoZXNfaGln
aGxpZ2h0X2dldChjb25zdCBFdmFzX09iamVjdCogbykKK0VpbmFfQm9vbCBld2tfZnJhbWVfdGV4
dF9tYXRjaGVzX2hpZ2hsaWdodF9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewot
ICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBF
V0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOwogICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOwog
ICAgIHJldHVybiBzZC0+ZnJhbWUtPmVkaXRvcigpLT5tYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hs
aWdodGVkKCk7CiB9CkBAIC01MTQsMjIgKzUxNCwyMiBAQCBFaW5hX0Jvb2wgZXdrX2ZyYW1lX3Rl
eHRfbWF0Y2hlc19oaWdobGlnaHRfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQogLyoqCiAgKiBD
b21wYXJpc29uIGZ1bmN0aW9uIHVzZWQgYnkgZXdrX2ZyYW1lX3RleHRfbWF0Y2hlc19udGhfcG9z
X2dldAogICovCi1zdGF0aWMgYm9vbCBfZXdrX2ZyYW1lX3JlY3RfY21wX2xlc3NfdGhhbihjb25z
dCBXZWJDb3JlOjpJbnRSZWN0JiBpLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBqKQorc3RhdGlj
IGJvb2wgX2V3a19mcmFtZV9yZWN0X2NtcF9sZXNzX3RoYW4oY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYgYmVnaW4sIGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGVuZCkKIHsKLSAgICByZXR1cm4gKGku
eSgpIDwgai55KCkgfHwgKGkueSgpID09IGoueSgpICYmIGkueCgpIDwgai54KCkpKTsKKyAgICBy
ZXR1cm4gKGJlZ2luLnkoKSA8IGVuZC55KCkgfHwgKGJlZ2luLnkoKSA9PSBlbmQueSgpICYmIGJl
Z2luLngoKSA8IGVuZC54KCkpKTsKIH0KIAogLyoqCiAgKiBQcmVkaWNhdGUgdXNlZCBieSBld2tf
ZnJhbWVfdGV4dF9tYXRjaGVzX250aF9wb3NfZ2V0CiAgKi8KLXN0YXRpYyBib29sIF9ld2tfZnJh
bWVfcmVjdF9pc19uZWdhdGl2ZV92YWx1ZShjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBpKQorc3Rh
dGljIGJvb2wgX2V3a19mcmFtZV9yZWN0X2lzX25lZ2F0aXZlX3ZhbHVlKGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmIHJlY3QpCiB7Ci0gICAgcmV0dXJuIChpLngoKSA8IDAgfHwgaS55KCkgPCAwKTsK
KyAgICByZXR1cm4gKHJlY3QueCgpIDwgMCB8fCByZWN0LnkoKSA8IDApOwogfQogCi1FaW5hX0Jv
b2wgZXdrX2ZyYW1lX3RleHRfbWF0Y2hlc19udGhfcG9zX2dldChjb25zdCBFdmFzX09iamVjdCog
bywgc2l6ZV90IG4sIGludCogeCwgaW50KiB5KQorRWluYV9Cb29sIGV3a19mcmFtZV90ZXh0X21h
dGNoZXNfbnRoX3Bvc19nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBzaXplX3QgbnVt
YmVyLCBpbnQqIHgsIGludCogeSkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihv
LCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJh
bWUsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwo
c2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKIAogICAgIFZlY3RvcjxXZWJDb3JlOjpJbnRSZWN0PiBp
bnRSZWN0cyA9IHNkLT5mcmFtZS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5yZW5kZXJlZFJlY3Rz
Rm9yTWFya2VycyhXZWJDb3JlOjpEb2N1bWVudE1hcmtlcjo6VGV4dE1hdGNoKTsKQEAgLTUzNyw1
NSArNTM3LDU1IEBAIEVpbmFfQm9vbCBld2tfZnJhbWVfdGV4dF9tYXRjaGVzX250aF9wb3NfZ2V0
KGNvbnN0IEV2YXNfT2JqZWN0KiBvLCBzaXplX3QgbiwgaW50CiAgICAgLyogcmVtb3ZlIHVzZWxl
c3MgdmFsdWVzICovCiAgICAgc3RkOjpyZW1vdmVfaWYoaW50UmVjdHMuYmVnaW4oKSwgaW50UmVj
dHMuZW5kKCksIF9ld2tfZnJhbWVfcmVjdF9pc19uZWdhdGl2ZV92YWx1ZSk7CiAKLSAgICBpZiAo
aW50UmVjdHMuaXNFbXB0eSgpIHx8IG4gPiBpbnRSZWN0cy5zaXplKCkpCisgICAgaWYgKGludFJl
Y3RzLmlzRW1wdHkoKSB8fCBudW1iZXIgPiBpbnRSZWN0cy5zaXplKCkpCiAgICAgICAgIHJldHVy
biBFSU5BX0ZBTFNFOwogCiAgICAgc3RkOjpzb3J0KGludFJlY3RzLmJlZ2luKCksIGludFJlY3Rz
LmVuZCgpLCBfZXdrX2ZyYW1lX3JlY3RfY21wX2xlc3NfdGhhbik7CiAKICAgICBpZiAoeCkKLSAg
ICAgICAgKnggPSBpbnRSZWN0c1tuIC0gMV0ueCgpOworICAgICAgICAqeCA9IGludFJlY3RzW251
bWJlciAtIDFdLngoKTsKICAgICBpZiAoeSkKLSAgICAgICAgKnkgPSBpbnRSZWN0c1tuIC0gMV0u
eSgpOworICAgICAgICAqeSA9IGludFJlY3RzW251bWJlciAtIDFdLnkoKTsKICAgICByZXR1cm4g
RUlOQV9UUlVFOwogfQogCi1FaW5hX0Jvb2wgZXdrX2ZyYW1lX3N0b3AoRXZhc19PYmplY3QqIG8p
CitFaW5hX0Jvb2wgZXdrX2ZyYW1lX3N0b3AoRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewotICAg
IEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tf
RlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOwogICAg
IHNkLT5mcmFtZS0+bG9hZGVyKCktPnN0b3BBbGxMb2FkZXJzKCk7CiAgICAgcmV0dXJuIEVJTkFf
VFJVRTsKIH0KIAotRWluYV9Cb29sIGV3a19mcmFtZV9yZWxvYWQoRXZhc19PYmplY3QqIG8pCitF
aW5hX0Jvb2wgZXdrX2ZyYW1lX3JlbG9hZChFdmFzX09iamVjdCogZXdrRnJhbWUpCiB7Ci0gICAg
RVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19G
UkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7CiAgICAg
c2QtPmZyYW1lLT5sb2FkZXIoKS0+cmVsb2FkKCk7CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0K
IAotRWluYV9Cb29sIGV3a19mcmFtZV9yZWxvYWRfZnVsbChFdmFzX09iamVjdCogbykKK0VpbmFf
Qm9vbCBld2tfZnJhbWVfcmVsb2FkX2Z1bGwoRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewotICAg
IEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tf
RlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOwogICAg
IHNkLT5mcmFtZS0+bG9hZGVyKCktPnJlbG9hZCh0cnVlKTsKICAgICByZXR1cm4gRUlOQV9UUlVF
OwogfQogCi1FaW5hX0Jvb2wgZXdrX2ZyYW1lX2JhY2soRXZhc19PYmplY3QqIG8pCitFaW5hX0Jv
b2wgZXdrX2ZyYW1lX2JhY2soRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewotICAgIHJldHVybiBl
d2tfZnJhbWVfbmF2aWdhdGUobywgLTEpOworICAgIHJldHVybiBld2tfZnJhbWVfbmF2aWdhdGUo
ZXdrRnJhbWUsIC0xKTsKIH0KIAotRWluYV9Cb29sIGV3a19mcmFtZV9mb3J3YXJkKEV2YXNfT2Jq
ZWN0KiBvKQorRWluYV9Cb29sIGV3a19mcmFtZV9mb3J3YXJkKEV2YXNfT2JqZWN0KiBld2tGcmFt
ZSkKIHsKLSAgICByZXR1cm4gZXdrX2ZyYW1lX25hdmlnYXRlKG8sIDEpOworICAgIHJldHVybiBl
d2tfZnJhbWVfbmF2aWdhdGUoZXdrRnJhbWUsIDEpOwogfQogCi1FaW5hX0Jvb2wgZXdrX2ZyYW1l
X25hdmlnYXRlKEV2YXNfT2JqZWN0KiBvLCBpbnQgc3RlcHMpCitFaW5hX0Jvb2wgZXdrX2ZyYW1l
X25hdmlnYXRlKEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgaW50IHN0ZXBzKQogewotICAgIEVXS19G
UkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfRlJBTUVf
U0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOwogICAgIFdlYkNv
cmU6OlBhZ2UqIHBhZ2UgPSBzZC0+ZnJhbWUtPnBhZ2UoKTsKICAgICBpZiAoIXBhZ2UtPmNhbkdv
QmFja09yRm9yd2FyZChzdGVwcykpCkBAIC01OTQsMjcgKzU5NCwyNyBAQCBFaW5hX0Jvb2wgZXdr
X2ZyYW1lX25hdmlnYXRlKEV2YXNfT2JqZWN0KiBvLCBpbnQgc3RlcHMpCiAgICAgcmV0dXJuIEVJ
TkFfVFJVRTsKIH0KIAotRWluYV9Cb29sIGV3a19mcmFtZV9iYWNrX3Bvc3NpYmxlKEV2YXNfT2Jq
ZWN0KiBvKQorRWluYV9Cb29sIGV3a19mcmFtZV9iYWNrX3Bvc3NpYmxlKEV2YXNfT2JqZWN0KiBl
d2tGcmFtZSkKIHsKLSAgICByZXR1cm4gZXdrX2ZyYW1lX25hdmlnYXRlX3Bvc3NpYmxlKG8sIC0x
KTsKKyAgICByZXR1cm4gZXdrX2ZyYW1lX25hdmlnYXRlX3Bvc3NpYmxlKGV3a0ZyYW1lLCAtMSk7
CiB9CiAKLUVpbmFfQm9vbCBld2tfZnJhbWVfZm9yd2FyZF9wb3NzaWJsZShFdmFzX09iamVjdCog
bykKK0VpbmFfQm9vbCBld2tfZnJhbWVfZm9yd2FyZF9wb3NzaWJsZShFdmFzX09iamVjdCogZXdr
RnJhbWUpCiB7Ci0gICAgcmV0dXJuIGV3a19mcmFtZV9uYXZpZ2F0ZV9wb3NzaWJsZShvLCAxKTsK
KyAgICByZXR1cm4gZXdrX2ZyYW1lX25hdmlnYXRlX3Bvc3NpYmxlKGV3a0ZyYW1lLCAxKTsKIH0K
IAotRWluYV9Cb29sIGV3a19mcmFtZV9uYXZpZ2F0ZV9wb3NzaWJsZShFdmFzX09iamVjdCogbywg
aW50IHN0ZXBzKQorRWluYV9Cb29sIGV3a19mcmFtZV9uYXZpZ2F0ZV9wb3NzaWJsZShFdmFzX09i
amVjdCogZXdrRnJhbWUsIGludCBzdGVwcykKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JF
VFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
Tl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKICAgICBXZWJDb3JlOjpQYWdlKiBwYWdlID0g
c2QtPmZyYW1lLT5wYWdlKCk7CiAgICAgcmV0dXJuIHBhZ2UtPmNhbkdvQmFja09yRm9yd2FyZChz
dGVwcyk7CiB9CiAKLWZsb2F0IGV3a19mcmFtZV96b29tX2dldChjb25zdCBFdmFzX09iamVjdCog
bykKK2Zsb2F0IGV3a19mcmFtZV96b29tX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrRnJhbWUp
CiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIC0xLjApOworICAgIEVX
S19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgLTEuMCk7CiAgICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgLTEuMCk7CiAKICAgICBpZiAoc2Qt
PnRleHRab29tKQpAQCAtNjIyLDkgKzYyMiw5IEBAIGZsb2F0IGV3a19mcmFtZV96b29tX2dldChj
b25zdCBFdmFzX09iamVjdCogbykKICAgICByZXR1cm4gc2QtPmZyYW1lLT5wYWdlWm9vbUZhY3Rv
cigpOwogfQogCi1FaW5hX0Jvb2wgZXdrX2ZyYW1lX3pvb21fc2V0KEV2YXNfT2JqZWN0KiBvLCBm
bG9hdCB6b29tKQorRWluYV9Cb29sIGV3a19mcmFtZV96b29tX3NldChFdmFzX09iamVjdCogZXdr
RnJhbWUsIGZsb2F0IHpvb20pCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4obywg
c2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1l
LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNk
LT5mcmFtZSwgRUlOQV9GQUxTRSk7CiAgICAgaWYgKHNkLT50ZXh0Wm9vbSkKICAgICAgICAgc2Qt
PmZyYW1lLT5zZXRUZXh0Wm9vbUZhY3Rvcih6b29tKTsKQEAgLTYzMywxNSArNjMzLDE1IEBAIEVp
bmFfQm9vbCBld2tfZnJhbWVfem9vbV9zZXQoRXZhc19PYmplY3QqIG8sIGZsb2F0IHpvb20pCiAg
ICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotRWluYV9Cb29sIGV3a19mcmFtZV96b29tX3RleHRf
b25seV9nZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCitFaW5hX0Jvb2wgZXdrX2ZyYW1lX3pvb21f
dGV4dF9vbmx5X2dldChjb25zdCBFdmFzX09iamVjdCogZXdrRnJhbWUpCiB7Ci0gICAgRVdLX0ZS
QU1FX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19GUkFNRV9T
RF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgcmV0dXJuIHNk
LT50ZXh0Wm9vbTsKIH0KIAotRWluYV9Cb29sIGV3a19mcmFtZV96b29tX3RleHRfb25seV9zZXQo
RXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCBzZXR0aW5nKQorRWluYV9Cb29sIGV3a19mcmFtZV96
b29tX3RleHRfb25seV9zZXQoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBFaW5hX0Jvb2wgc2V0dGlu
ZykKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7
CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNF
KTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZB
TFNFKTsKICAgICBpZiAoc2QtPnRleHRab29tID09IHNldHRpbmcpCiAgICAgICAgIHJldHVybiBF
SU5BX1RSVUU7CkBAIC02NTUsMjIgKzY1NSwyMiBAQCBFaW5hX0Jvb2wgZXdrX2ZyYW1lX3pvb21f
dGV4dF9vbmx5X3NldChFdmFzX09iamVjdCogbywgRWluYV9Cb29sIHNldHRpbmcpCiAgICAgcmV0
dXJuIEVJTkFfVFJVRTsKIH0KIAotdm9pZCBld2tfZnJhbWVfaGl0X3Rlc3RfZnJlZShFd2tfSGl0
X1Rlc3QqIGhpdF90ZXN0KQordm9pZCBld2tfZnJhbWVfaGl0X3Rlc3RfZnJlZShFd2tfSGl0X1Rl
c3QqIGhpdFRlc3QpCiB7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oaGl0X3Rlc3Qp
OwotICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVsKGhpdF90ZXN0LT50aXRsZSk7Ci0gICAgZWluYV9z
dHJpbmdzaGFyZV9kZWwoaGl0X3Rlc3QtPmFsdGVybmF0ZV90ZXh0KTsKLSAgICBlaW5hX3N0cmlu
Z3NoYXJlX2RlbChoaXRfdGVzdC0+bGluay50ZXh0KTsKLSAgICBlaW5hX3N0cmluZ3NoYXJlX2Rl
bChoaXRfdGVzdC0+bGluay51cmwpOwotICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVsKGhpdF90ZXN0
LT5saW5rLnRpdGxlKTsKLSAgICBlaW5hX3N0cmluZ3NoYXJlX2RlbChoaXRfdGVzdC0+aW1hZ2Vf
dXJpKTsKLSAgICBlaW5hX3N0cmluZ3NoYXJlX2RlbChoaXRfdGVzdC0+bWVkaWFfdXJpKTsKLSAg
ICBmcmVlKGhpdF90ZXN0KTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihoaXRUZXN0
KTsKKyAgICBlaW5hX3N0cmluZ3NoYXJlX2RlbChoaXRUZXN0LT50aXRsZSk7CisgICAgZWluYV9z
dHJpbmdzaGFyZV9kZWwoaGl0VGVzdC0+YWx0ZXJuYXRlX3RleHQpOworICAgIGVpbmFfc3RyaW5n
c2hhcmVfZGVsKGhpdFRlc3QtPmxpbmsudGV4dCk7CisgICAgZWluYV9zdHJpbmdzaGFyZV9kZWwo
aGl0VGVzdC0+bGluay51cmwpOworICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVsKGhpdFRlc3QtPmxp
bmsudGl0bGUpOworICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVsKGhpdFRlc3QtPmltYWdlX3VyaSk7
CisgICAgZWluYV9zdHJpbmdzaGFyZV9kZWwoaGl0VGVzdC0+bWVkaWFfdXJpKTsKKyAgICBmcmVl
KGhpdFRlc3QpOwogfQogCi1Fd2tfSGl0X1Rlc3QqIGV3a19mcmFtZV9oaXRfdGVzdF9uZXcoY29u
c3QgRXZhc19PYmplY3QqIG8sIGludCB4LCBpbnQgeSkKK0V3a19IaXRfVGVzdCogZXdrX2ZyYW1l
X2hpdF90ZXN0X25ldyhjb25zdCBFdmFzX09iamVjdCogZXdrRnJhbWUsIGludCB4LCBpbnQgeSkK
IHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgMCk7CisgICAgRVdLX0ZS
QU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCAwKTsKICAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCAwKTsKIAogICAgIFdlYkNvcmU6OkZyYW1lVmll
dyogdmlldyA9IHNkLT5mcmFtZS0+dmlldygpOwpAQCAtNzQxLDE5ICs3NDEsMTkgQEAgRXdrX0hp
dF9UZXN0KiBld2tfZnJhbWVfaGl0X3Rlc3RfbmV3KGNvbnN0IEV2YXNfT2JqZWN0KiBvLCBpbnQg
eCwgaW50IHkpCiB9CiAKIEVpbmFfQm9vbAotZXdrX2ZyYW1lX3Njcm9sbF9hZGQoRXZhc19PYmpl
Y3QqIG8sIGludCBkeCwgaW50IGR5KQorZXdrX2ZyYW1lX3Njcm9sbF9hZGQoRXZhc19PYmplY3Qq
IGV3a0ZyYW1lLCBpbnQgZGVsdGFYLCBpbnQgZGVsdGFZKQogewotICAgIEVXS19GUkFNRV9TRF9H
RVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09S
X1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUtPnZpZXcoKSwgRUlOQV9GQUxTRSk7Ci0gICAgc2Qt
PmZyYW1lLT52aWV3KCktPnNjcm9sbEJ5KFdlYkNvcmU6OkludFNpemUoZHgsIGR5KSk7CisgICAg
c2QtPmZyYW1lLT52aWV3KCktPnNjcm9sbEJ5KFdlYkNvcmU6OkludFNpemUoZGVsdGFYLCBkZWx0
YVkpKTsKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCiBFaW5hX0Jvb2wKLWV3a19mcmFtZV9z
Y3JvbGxfc2V0KEV2YXNfT2JqZWN0KiBvLCBpbnQgeCwgaW50IHkpCitld2tfZnJhbWVfc2Nyb2xs
X3NldChFdmFzX09iamVjdCogZXdrRnJhbWUsIGludCB4LCBpbnQgeSkKIHsKLSAgICBFV0tfRlJB
TUVfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX0ZSQU1FX1NE
X0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLT52aWV3KCksIEVJTkFfRkFMU0UpOwog
ICAgIHNkLT5mcmFtZS0+dmlldygpLT5zZXRTY3JvbGxQb3NpdGlvbihXZWJDb3JlOjpJbnRQb2lu
dCh4LCB5KSk7CkBAIC03NjEsMzEgKzc2MSwzMSBAQCBld2tfZnJhbWVfc2Nyb2xsX3NldChFdmFz
X09iamVjdCogbywgaW50IHgsIGludCB5KQogfQogCiBFaW5hX0Jvb2wKLWV3a19mcmFtZV9zY3Jv
bGxfc2l6ZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIG8sIGludCogdywgaW50KiBoKQorZXdrX2Zy
YW1lX3Njcm9sbF9zaXplX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrRnJhbWUsIGludCogd2lk
dGgsIGludCogaGVpZ2h0KQogewotICAgIGlmICh3KQotICAgICAgICAqdyA9IDA7Ci0gICAgaWYg
KGgpCi0gICAgICAgICpoID0gMDsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihvLCBz
ZCwgRUlOQV9GQUxTRSk7CisgICAgaWYgKHdpZHRoKQorICAgICAgICAqd2lkdGggPSAwOworICAg
IGlmIChoZWlnaHQpCisgICAgICAgICpoZWlnaHQgPSAwOworICAgIEVXS19GUkFNRV9TRF9HRVRf
T1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZS0+dmlldygpLCBFSU5BX0ZBTFNFKTsKICAgICBX
ZWJDb3JlOjpJbnRQb2ludCBwb2ludCA9IHNkLT5mcmFtZS0+dmlldygpLT5tYXhpbXVtU2Nyb2xs
UG9zaXRpb24oKTsKLSAgICBpZiAodykKLSAgICAgICAgKncgPSBwb2ludC54KCk7Ci0gICAgaWYg
KGgpCi0gICAgICAgICpoID0gcG9pbnQueSgpOworICAgIGlmICh3aWR0aCkKKyAgICAgICAgKndp
ZHRoID0gcG9pbnQueCgpOworICAgIGlmIChoZWlnaHQpCisgICAgICAgICpoZWlnaHQgPSBwb2lu
dC55KCk7CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAogRWluYV9Cb29sCi1ld2tfZnJhbWVf
c2Nyb2xsX3Bvc19nZXQoY29uc3QgRXZhc19PYmplY3QqIG8sIGludCogeCwgaW50KiB5KQorZXdr
X2ZyYW1lX3Njcm9sbF9wb3NfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgaW50KiB4
LCBpbnQqIHkpCiB7CiAgICAgaWYgKHgpCiAgICAgICAgICp4ID0gMDsKICAgICBpZiAoeSkKICAg
ICAgICAgKnkgPSAwOwotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5B
X0ZBTFNFKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJ
TkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUs
IEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJh
bWUtPnZpZXcoKSwgRUlOQV9GQUxTRSk7CiAgICAgV2ViQ29yZTo6SW50UG9pbnQgcG9zID0gc2Qt
PmZyYW1lLT52aWV3KCktPnNjcm9sbFBvc2l0aW9uKCk7CkBAIC03OTYsMTQwICs3OTYsMTQwIEBA
IGV3a19mcmFtZV9zY3JvbGxfcG9zX2dldChjb25zdCBFdmFzX09iamVjdCogbywgaW50KiB4LCBp
bnQqIHkpCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotRWluYV9Cb29sIGV3a19mcmFtZV92
aXNpYmxlX2NvbnRlbnRfZ2VvbWV0cnlfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jv
b2wgaW5jbHVkZV9zY3JvbGxiYXJzLCBpbnQqIHgsIGludCogeSwgaW50KiB3LCBpbnQqIGgpCitF
aW5hX0Jvb2wgZXdrX2ZyYW1lX3Zpc2libGVfY29udGVudF9nZW9tZXRyeV9nZXQoY29uc3QgRXZh
c19PYmplY3QqIGV3a0ZyYW1lLCBFaW5hX0Jvb2wgaW5jbHVkZVNjcm9sbGJhcnMsIGludCogeCwg
aW50KiB5LCBpbnQqIHdpZHRoLCBpbnQqIGhlaWdodCkKIHsKICAgICBpZiAoeCkKICAgICAgICAg
KnggPSAwOwogICAgIGlmICh5KQogICAgICAgICAqeSA9IDA7Ci0gICAgaWYgKHcpCi0gICAgICAg
ICp3ID0gMDsKLSAgICBpZiAoaCkKLSAgICAgICAgKmggPSAwOwotICAgIEVXS19GUkFNRV9TRF9H
RVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBpZiAod2lkdGgpCisgICAgICAg
ICp3aWR0aCA9IDA7CisgICAgaWYgKGhlaWdodCkKKyAgICAgICAgKmhlaWdodCA9IDA7CisgICAg
RVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsKICAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsK
ICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLT52aWV3KCksIEVJ
TkFfRkFMU0UpOwotICAgIFdlYkNvcmU6OkludFJlY3QgcmVjdCA9IHNkLT5mcmFtZS0+dmlldygp
LT52aXNpYmxlQ29udGVudFJlY3QoaW5jbHVkZV9zY3JvbGxiYXJzKTsKKyAgICBXZWJDb3JlOjpJ
bnRSZWN0IHJlY3QgPSBzZC0+ZnJhbWUtPnZpZXcoKS0+dmlzaWJsZUNvbnRlbnRSZWN0KGluY2x1
ZGVTY3JvbGxiYXJzKTsKICAgICBpZiAoeCkKICAgICAgICAgKnggPSByZWN0LngoKTsKICAgICBp
ZiAoeSkKICAgICAgICAgKnkgPSByZWN0LnkoKTsKLSAgICBpZiAodykKLSAgICAgICAgKncgPSBy
ZWN0LndpZHRoKCk7Ci0gICAgaWYgKGgpCi0gICAgICAgICpoID0gcmVjdC5oZWlnaHQoKTsKKyAg
ICBpZiAod2lkdGgpCisgICAgICAgICp3aWR0aCA9IHJlY3Qud2lkdGgoKTsKKyAgICBpZiAoaGVp
Z2h0KQorICAgICAgICAqaGVpZ2h0ID0gcmVjdC5oZWlnaHQoKTsKICAgICByZXR1cm4gRUlOQV9U
UlVFOwogfQogCi1FaW5hX0Jvb2wgZXdrX2ZyYW1lX3BhaW50X2Z1bGxfZ2V0KGNvbnN0IEV2YXNf
T2JqZWN0KiBvKQorRWluYV9Cb29sIGV3a19mcmFtZV9wYWludF9mdWxsX2dldChjb25zdCBFdmFz
X09iamVjdCogZXdrRnJhbWUpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4obywg
c2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1l
LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNk
LT5mcmFtZSwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFM
KHNkLT5mcmFtZS0+dmlldygpLCBFSU5BX0ZBTFNFKTsKICAgICByZXR1cm4gc2QtPmZyYW1lLT52
aWV3KCktPnBhaW50c0VudGlyZUNvbnRlbnRzKCk7CiB9CiAKLXZvaWQgZXdrX2ZyYW1lX3BhaW50
X2Z1bGxfc2V0KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wgZmxhZykKK3ZvaWQgZXdrX2ZyYW1l
X3BhaW50X2Z1bGxfc2V0KEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgRWluYV9Cb29sIGZsYWcpCiB7
Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4obywgc2QpOworICAgIEVXS19GUkFNRV9T
RF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk4oc2QtPmZyYW1lKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+ZnJh
bWUtPnZpZXcoKSk7CiAgICAgc2QtPmZyYW1lLT52aWV3KCktPnNldFBhaW50c0VudGlyZUNvbnRl
bnRzKGZsYWcpOwogfQogCi1FaW5hX0Jvb2wgZXdrX2ZyYW1lX2ZlZWRfZm9jdXNfaW4oRXZhc19P
YmplY3QqIG8pCitFaW5hX0Jvb2wgZXdrX2ZyYW1lX2ZlZWRfZm9jdXNfaW4oRXZhc19PYmplY3Qq
IGV3a0ZyYW1lKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5B
X0ZBTFNFKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJ
TkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUs
IEVJTkFfRkFMU0UpOwogICAgIFdlYkNvcmU6OkZvY3VzQ29udHJvbGxlciogYyA9IHNkLT5mcmFt
ZS0+cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKTsKICAgICBjLT5zZXRGb2N1c2VkRnJhbWUoc2Qt
PmZyYW1lKTsKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi1FaW5hX0Jvb2wgZXdrX2ZyYW1l
X2ZlZWRfZm9jdXNfb3V0KEV2YXNfT2JqZWN0KiBvKQorRWluYV9Cb29sIGV3a19mcmFtZV9mZWVk
X2ZvY3VzX291dChFdmFzX09iamVjdCogZXdrRnJhbWUpCiB7CiAgICAgLy8gVE9ETzogd2hhdCB0
byBkbyBvbiBmb2N1cyBvdXQ/CiAgICAgRVJSKCJ3aGF0IHRvIGRvPyIpOwogICAgIHJldHVybiBF
SU5BX0ZBTFNFOwogfQogCi1FaW5hX0Jvb2wgZXdrX2ZyYW1lX2ZlZWRfbW91c2Vfd2hlZWwoRXZh
c19PYmplY3QqIG8sIGNvbnN0IEV2YXNfRXZlbnRfTW91c2VfV2hlZWwqIGV2KQorRWluYV9Cb29s
IGV3a19mcmFtZV9mZWVkX21vdXNlX3doZWVsKEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgY29uc3Qg
RXZhc19FdmVudF9Nb3VzZV9XaGVlbCogd2hlZWxFdmVudCkKIHsKLSAgICBFV0tfRlJBTUVfU0Rf
R0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9P
Ul9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTl9WQUwoZXYsIEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOX1ZBTCh3aGVlbEV2ZW50LCBFSU5BX0ZBTFNFKTsKIAogICAgIFdlYkNvcmU6OkZy
YW1lVmlldyogdmlldyA9IHNkLT5mcmFtZS0+dmlldygpOwotICAgIERCRygibz0lcCwgdmlldz0l
cCwgZGlyZWN0aW9uPSVkLCB6PSVkLCBwb3M9JWQsJWQiLAotICAgICAgICBvLCB2aWV3LCBldi0+
ZGlyZWN0aW9uLCBldi0+eiwgZXYtPmNhbnZhcy54LCBldi0+Y2FudmFzLnkpOworICAgIERCRygi
ZXdrRnJhbWU9JXAsIHZpZXc9JXAsIGRpcmVjdGlvbj0lZCwgej0lZCwgcG9zPSVkLCVkIiwKKyAg
ICAgICAgZXdrRnJhbWUsIHZpZXcsIHdoZWVsRXZlbnQtPmRpcmVjdGlvbiwgd2hlZWxFdmVudC0+
eiwgd2hlZWxFdmVudC0+Y2FudmFzLngsIHdoZWVsRXZlbnQtPmNhbnZhcy55KTsKICAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodmlldywgRUlOQV9GQUxTRSk7CiAKLSAgICBXZWJD
b3JlOjpQbGF0Zm9ybVdoZWVsRXZlbnQgZXZlbnQoZXYpOworICAgIFdlYkNvcmU6OlBsYXRmb3Jt
V2hlZWxFdmVudCBldmVudCh3aGVlbEV2ZW50KTsKICAgICByZXR1cm4gc2QtPmZyYW1lLT5ldmVu
dEhhbmRsZXIoKS0+aGFuZGxlV2hlZWxFdmVudChldmVudCk7CiB9CiAKLUVpbmFfQm9vbCBld2tf
ZnJhbWVfZmVlZF9tb3VzZV9kb3duKEV2YXNfT2JqZWN0KiBvLCBjb25zdCBFdmFzX0V2ZW50X01v
dXNlX0Rvd24qIGV2KQorRWluYV9Cb29sIGV3a19mcmFtZV9mZWVkX21vdXNlX2Rvd24oRXZhc19P
YmplY3QqIGV3a0ZyYW1lLCBjb25zdCBFdmFzX0V2ZW50X01vdXNlX0Rvd24qIGRvd25FdmVudCkK
IHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7Cisg
ICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsK
ICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNF
KTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZXYsIEVJTkFfRkFMU0UpOwor
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChkb3duRXZlbnQsIEVJTkFfRkFMU0Up
OwogCiAgICAgV2ViQ29yZTo6RnJhbWVWaWV3KiB2aWV3ID0gc2QtPmZyYW1lLT52aWV3KCk7Ci0g
ICAgREJHKCJvPSVwLCB2aWV3PSVwLCBidXR0b249JWQsIHBvcz0lZCwlZCIsCi0gICAgICAgIG8s
IHZpZXcsIGV2LT5idXR0b24sIGV2LT5jYW52YXMueCwgZXYtPmNhbnZhcy55KTsKKyAgICBEQkco
ImV3a0ZyYW1lPSVwLCB2aWV3PSVwLCBidXR0b249JWQsIHBvcz0lZCwlZCIsCisgICAgICAgIGV3
a0ZyYW1lLCB2aWV3LCBkb3duRXZlbnQtPmJ1dHRvbiwgZG93bkV2ZW50LT5jYW52YXMueCwgZG93
bkV2ZW50LT5jYW52YXMueSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHZp
ZXcsIEVJTkFfRkFMU0UpOwogCiAgICAgRXZhc19Db29yZCB4LCB5OwogICAgIGV2YXNfb2JqZWN0
X2dlb21ldHJ5X2dldChzZC0+dmlldywgJngsICZ5LCAwLCAwKTsKIAotICAgIFdlYkNvcmU6OlBs
YXRmb3JtTW91c2VFdmVudCBldmVudChldiwgV2ViQ29yZTo6SW50UG9pbnQoeCwgeSkpOworICAg
IFdlYkNvcmU6OlBsYXRmb3JtTW91c2VFdmVudCBldmVudChkb3duRXZlbnQsIFdlYkNvcmU6Oklu
dFBvaW50KHgsIHkpKTsKICAgICByZXR1cm4gc2QtPmZyYW1lLT5ldmVudEhhbmRsZXIoKS0+aGFu
ZGxlTW91c2VQcmVzc0V2ZW50KGV2ZW50KTsKIH0KIAotRWluYV9Cb29sIGV3a19mcmFtZV9mZWVk
X21vdXNlX3VwKEV2YXNfT2JqZWN0KiBvLCBjb25zdCBFdmFzX0V2ZW50X01vdXNlX1VwKiBldikK
K0VpbmFfQm9vbCBld2tfZnJhbWVfZmVlZF9tb3VzZV91cChFdmFzX09iamVjdCogZXdrRnJhbWUs
IGNvbnN0IEV2YXNfRXZlbnRfTW91c2VfVXAqIHVwRXZlbnQpCiB7Ci0gICAgRVdLX0ZSQU1FX1NE
X0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19GUkFNRV9TRF9HRVRf
T1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk5fVkFMKGV2LCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTl9WQUwodXBFdmVudCwgRUlOQV9GQUxTRSk7CiAKICAgICBXZWJDb3JlOjpGcmFt
ZVZpZXcqIHZpZXcgPSBzZC0+ZnJhbWUtPnZpZXcoKTsKLSAgICBEQkcoIm89JXAsIHZpZXc9JXAs
IGJ1dHRvbj0lZCwgcG9zPSVkLCVkIiwKLSAgICAgICAgbywgdmlldywgZXYtPmJ1dHRvbiwgZXYt
PmNhbnZhcy54LCBldi0+Y2FudmFzLnkpOworICAgIERCRygiZXdrRnJhbWU9JXAsIHZpZXc9JXAs
IGJ1dHRvbj0lZCwgcG9zPSVkLCVkIiwKKyAgICAgICAgZXdrRnJhbWUsIHZpZXcsIHVwRXZlbnQt
PmJ1dHRvbiwgdXBFdmVudC0+Y2FudmFzLngsIHVwRXZlbnQtPmNhbnZhcy55KTsKICAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodmlldywgRUlOQV9GQUxTRSk7CiAKICAgICBFdmFz
X0Nvb3JkIHgsIHk7CiAgICAgZXZhc19vYmplY3RfZ2VvbWV0cnlfZ2V0KHNkLT52aWV3LCAmeCwg
JnksIDAsIDApOwogCi0gICAgV2ViQ29yZTo6UGxhdGZvcm1Nb3VzZUV2ZW50IGV2ZW50KGV2LCBX
ZWJDb3JlOjpJbnRQb2ludCh4LCB5KSk7CisgICAgV2ViQ29yZTo6UGxhdGZvcm1Nb3VzZUV2ZW50
IGV2ZW50KHVwRXZlbnQsIFdlYkNvcmU6OkludFBvaW50KHgsIHkpKTsKICAgICByZXR1cm4gc2Qt
PmZyYW1lLT5ldmVudEhhbmRsZXIoKS0+aGFuZGxlTW91c2VSZWxlYXNlRXZlbnQoZXZlbnQpOwog
fQogCi1FaW5hX0Jvb2wgZXdrX2ZyYW1lX2ZlZWRfbW91c2VfbW92ZShFdmFzX09iamVjdCogbywg
Y29uc3QgRXZhc19FdmVudF9Nb3VzZV9Nb3ZlKiBldikKK0VpbmFfQm9vbCBld2tfZnJhbWVfZmVl
ZF9tb3VzZV9tb3ZlKEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgY29uc3QgRXZhc19FdmVudF9Nb3Vz
ZV9Nb3ZlKiBtb3ZlRXZlbnQpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4obywg
c2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1l
LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNk
LT5mcmFtZSwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFM
KGV2LCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwobW92
ZUV2ZW50LCBFSU5BX0ZBTFNFKTsKIAogICAgIFdlYkNvcmU6OkZyYW1lVmlldyogdmlldyA9IHNk
LT5mcmFtZS0+dmlldygpOwotICAgIERCRygibz0lcCwgdmlldz0lcCwgcG9zOiBvbGQ9JWQsJWQs
IG5ldz0lZCwlZCwgYnV0dG9ucz0lZCIsCi0gICAgICAgIG8sIHZpZXcsIGV2LT5jdXIuY2FudmFz
LngsIGV2LT5jdXIuY2FudmFzLnksCi0gICAgICAgIGV2LT5wcmV2LmNhbnZhcy54LCBldi0+cHJl
di5jYW52YXMueSwgZXYtPmJ1dHRvbnMpOworICAgIERCRygiZXdrRnJhbWU9JXAsIHZpZXc9JXAs
IHBvczogb2xkPSVkLCVkLCBuZXc9JWQsJWQsIGJ1dHRvbnM9JWQiLAorICAgICAgICBld2tGcmFt
ZSwgdmlldywgbW92ZUV2ZW50LT5jdXIuY2FudmFzLngsIG1vdmVFdmVudC0+Y3VyLmNhbnZhcy55
LAorICAgICAgICBtb3ZlRXZlbnQtPnByZXYuY2FudmFzLngsIG1vdmVFdmVudC0+cHJldi5jYW52
YXMueSwgbW92ZUV2ZW50LT5idXR0b25zKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
Tl9WQUwodmlldywgRUlOQV9GQUxTRSk7CiAKICAgICBFdmFzX0Nvb3JkIHgsIHk7CiAgICAgZXZh
c19vYmplY3RfZ2VvbWV0cnlfZ2V0KHNkLT52aWV3LCAmeCwgJnksIDAsIDApOwogCi0gICAgV2Vi
Q29yZTo6UGxhdGZvcm1Nb3VzZUV2ZW50IGV2ZW50KGV2LCBXZWJDb3JlOjpJbnRQb2ludCh4LCB5
KSk7CisgICAgV2ViQ29yZTo6UGxhdGZvcm1Nb3VzZUV2ZW50IGV2ZW50KG1vdmVFdmVudCwgV2Vi
Q29yZTo6SW50UG9pbnQoeCwgeSkpOwogICAgIHJldHVybiBzZC0+ZnJhbWUtPmV2ZW50SGFuZGxl
cigpLT5tb3VzZU1vdmVkKGV2ZW50KTsKIH0KIAotRWluYV9Cb29sIGV3a19mcmFtZV9mZWVkX3Rv
dWNoX2V2ZW50KEV2YXNfT2JqZWN0KiBvLCBFd2tfVG91Y2hfRXZlbnRfVHlwZSBhY3Rpb24sIEVp
bmFfTGlzdCogcG9pbnRzLCBpbnQgbWV0YVN0YXRlKQorRWluYV9Cb29sIGV3a19mcmFtZV9mZWVk
X3RvdWNoX2V2ZW50KEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgRXdrX1RvdWNoX0V2ZW50X1R5cGUg
YWN0aW9uLCBFaW5hX0xpc3QqIHBvaW50cywgaW50IG1ldGFTdGF0ZSkKIHsKICAgICBFaW5hX0Jv
b2wgcmV0ID0gRUlOQV9GQUxTRTsKIAogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCiAgICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHBvaW50cywgRUlOQV9GQUxTRSk7Ci0gICAgRVdL
X0ZSQU1FX1NEX0dFVChvLCBzZCk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVChld2tGcmFtZSwgc2Qp
OwogCiAgICAgaWYgKCFzZCB8fCAhc2QtPmZyYW1lIHx8ICFld2tfdmlld19uZWVkX3RvdWNoX2V2
ZW50c19nZXQoc2QtPnZpZXcpKQogICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKQEAgLTk2MSwx
NyArOTYxLDE3IEBAIEVpbmFfQm9vbCBld2tfZnJhbWVfZmVlZF90b3VjaF9ldmVudChFdmFzX09i
amVjdCogbywgRXdrX1RvdWNoX0V2ZW50X1R5cGUgYWN0aW9uCiAgICAgcmV0dXJuIHJldDsKIH0K
IAotc3RhdGljIGlubGluZSBFaW5hX0Jvb2wgX2V3a19mcmFtZV9oYW5kbGVfa2V5X3Njcm9sbGlu
ZyhXZWJDb3JlOjpGcmFtZSogZnJhbWUsIGNvbnN0IFdlYkNvcmU6OlBsYXRmb3JtS2V5Ym9hcmRF
dmVudCYgZXZlbnQpCitzdGF0aWMgaW5saW5lIEVpbmFfQm9vbCBfZXdrX2ZyYW1lX2hhbmRsZV9r
ZXlfc2Nyb2xsaW5nKFdlYkNvcmU6OkZyYW1lKiBmcmFtZSwgY29uc3QgV2ViQ29yZTo6UGxhdGZv
cm1LZXlib2FyZEV2ZW50JiBrZXlFdmVudCkKIHsKICAgICBXZWJDb3JlOjpTY3JvbGxEaXJlY3Rp
b24gZGlyZWN0aW9uOwogICAgIFdlYkNvcmU6OlNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5
OwogCi0gICAgaW50IGtleUNvZGUgPSBldmVudC53aW5kb3dzVmlydHVhbEtleUNvZGUoKTsKKyAg
ICBpbnQga2V5Q29kZSA9IGtleUV2ZW50LndpbmRvd3NWaXJ0dWFsS2V5Q29kZSgpOwogCiAgICAg
c3dpdGNoIChrZXlDb2RlKSB7CiAgICAgY2FzZSBWS19TUEFDRToKICAgICAgICAgZ3JhbnVsYXJp
dHkgPSBXZWJDb3JlOjpTY3JvbGxCeVBhZ2U7Ci0gICAgICAgIGlmIChldmVudC5zaGlmdEtleSgp
KQorICAgICAgICBpZiAoa2V5RXZlbnQuc2hpZnRLZXkoKSkKICAgICAgICAgICAgIGRpcmVjdGlv
biA9IFdlYkNvcmU6OlNjcm9sbFVwOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBkaXJlY3Rp
b24gPSBXZWJDb3JlOjpTY3JvbGxEb3duOwpAQCAtMTAwMiwxNCArMTAwMiwxNCBAQCBzdGF0aWMg
aW5saW5lIEVpbmFfQm9vbCBfZXdrX2ZyYW1lX2hhbmRsZV9rZXlfc2Nyb2xsaW5nKFdlYkNvcmU6
OkZyYW1lKiBmcmFtZSwgYwogICAgICAgICBicmVhazsKICAgICBjYXNlIFZLX1VQOgogICAgICAg
ICBkaXJlY3Rpb24gPSBXZWJDb3JlOjpTY3JvbGxVcDsKLSAgICAgICAgaWYgKGV2ZW50LmN0cmxL
ZXkoKSkKKyAgICAgICAgaWYgKGtleUV2ZW50LmN0cmxLZXkoKSkKICAgICAgICAgICAgIGdyYW51
bGFyaXR5ID0gV2ViQ29yZTo6U2Nyb2xsQnlEb2N1bWVudDsKICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgZ3JhbnVsYXJpdHkgPSBXZWJDb3JlOjpTY3JvbGxCeUxpbmU7CiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgVktfRE9XTjoKICAgICAgICAgZGlyZWN0aW9uID0gV2ViQ29yZTo6U2Nyb2xs
RG93bjsKLSAgICAgICAgaWYgKGV2ZW50LmN0cmxLZXkoKSkKKyAgICAgICAgaWYgKGtleUV2ZW50
LmN0cmxLZXkoKSkKICAgICAgICAgICAgIGdyYW51bGFyaXR5ID0gV2ViQ29yZTo6U2Nyb2xsQnlE
b2N1bWVudDsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgZ3JhbnVsYXJpdHkgPSBXZWJDb3Jl
OjpTY3JvbGxCeUxpbmU7CkBAIC0xMDI1LDM4ICsxMDI1LDM4IEBAIHN0YXRpYyBpbmxpbmUgRWlu
YV9Cb29sIF9ld2tfZnJhbWVfaGFuZGxlX2tleV9zY3JvbGxpbmcoV2ViQ29yZTo6RnJhbWUqIGZy
YW1lLCBjCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotRWluYV9Cb29sIGV3a19mcmFtZV9m
ZWVkX2tleV9kb3duKEV2YXNfT2JqZWN0KiBvLCBjb25zdCBFdmFzX0V2ZW50X0tleV9Eb3duKiBl
dikKK0VpbmFfQm9vbCBld2tfZnJhbWVfZmVlZF9rZXlfZG93bihFdmFzX09iamVjdCogZXdrRnJh
bWUsIGNvbnN0IEV2YXNfRXZlbnRfS2V5X0Rvd24qIGRvd25FdmVudCkKIHsKLSAgICBFV0tfRlJB
TUVfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX0ZSQU1FX1NE
X0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZXYsIEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOX1ZBTChkb3duRXZlbnQsIEVJTkFfRkFMU0UpOwogCi0gICAgREJHKCJv
PSVwIGtleW5hbWU9JXMgKGtleT0lcywgc3RyaW5nPSVzKSIsCi0gICAgICAgIG8sIGV2LT5rZXlu
YW1lLCBldi0+a2V5ID8gZXYtPmtleSA6ICIiLCBldi0+c3RyaW5nID8gZXYtPnN0cmluZyA6ICIi
KTsKKyAgICBEQkcoImV3a0ZyYW1lPSVwIGtleW5hbWU9JXMgKGtleT0lcywgc3RyaW5nPSVzKSIs
CisgICAgICAgIGV3a0ZyYW1lLCBkb3duRXZlbnQtPmtleW5hbWUsIGRvd25FdmVudC0+a2V5ID8g
ZG93bkV2ZW50LT5rZXkgOiAiIiwgZG93bkV2ZW50LT5zdHJpbmcgPyBkb3duRXZlbnQtPnN0cmlu
ZyA6ICIiKTsKIAotICAgIFdlYkNvcmU6OlBsYXRmb3JtS2V5Ym9hcmRFdmVudCBldmVudChldik7
CisgICAgV2ViQ29yZTo6UGxhdGZvcm1LZXlib2FyZEV2ZW50IGV2ZW50KGRvd25FdmVudCk7CiAg
ICAgaWYgKHNkLT5mcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmtleUV2ZW50KGV2ZW50KSkKICAgICAg
ICAgcmV0dXJuIEVJTkFfVFJVRTsKIAogICAgIHJldHVybiBfZXdrX2ZyYW1lX2hhbmRsZV9rZXlf
c2Nyb2xsaW5nKHNkLT5mcmFtZSwgZXZlbnQpOwogfQogCi1FaW5hX0Jvb2wgZXdrX2ZyYW1lX2Zl
ZWRfa2V5X3VwKEV2YXNfT2JqZWN0KiBvLCBjb25zdCBFdmFzX0V2ZW50X0tleV9VcCogZXYpCitF
aW5hX0Jvb2wgZXdrX2ZyYW1lX2ZlZWRfa2V5X3VwKEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgY29u
c3QgRXZhc19FdmVudF9LZXlfVXAqIHVwRXZlbnQpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9P
Ul9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVU
VVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk5fVkFMKGV2LCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTl9WQUwodXBFdmVudCwgRUlOQV9GQUxTRSk7CiAKLSAgICBEQkcoIm89JXAga2V5bmFtZT0l
cyAoa2V5PSVzLCBzdHJpbmc9JXMpIiwKLSAgICAgICAgbywgZXYtPmtleW5hbWUsIGV2LT5rZXkg
PyBldi0+a2V5IDogIiIsIGV2LT5zdHJpbmcgPyBldi0+c3RyaW5nIDogIiIpOworICAgIERCRygi
ZXdrRnJhbWU9JXAga2V5bmFtZT0lcyAoa2V5PSVzLCBzdHJpbmc9JXMpIiwKKyAgICAgICAgZXdr
RnJhbWUsIHVwRXZlbnQtPmtleW5hbWUsIHVwRXZlbnQtPmtleSA/IHVwRXZlbnQtPmtleSA6ICIi
LCB1cEV2ZW50LT5zdHJpbmcgPyB1cEV2ZW50LT5zdHJpbmcgOiAiIik7CiAKLSAgICBXZWJDb3Jl
OjpQbGF0Zm9ybUtleWJvYXJkRXZlbnQgZXZlbnQoZXYpOworICAgIFdlYkNvcmU6OlBsYXRmb3Jt
S2V5Ym9hcmRFdmVudCBldmVudCh1cEV2ZW50KTsKICAgICByZXR1cm4gc2QtPmZyYW1lLT5ldmVu
dEhhbmRsZXIoKS0+a2V5RXZlbnQoZXZlbnQpOwogfQogCi1Fd2tfVGV4dF9TZWxlY3Rpb25fVHlw
ZSBld2tfZnJhbWVfdGV4dF9zZWxlY3Rpb25fdHlwZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIG8p
CitFd2tfVGV4dF9TZWxlY3Rpb25fVHlwZSBld2tfZnJhbWVfdGV4dF9zZWxlY3Rpb25fdHlwZV9n
ZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRf
T1JfUkVUVVJOKG8sIHNkLCBFV0tfVEVYVF9TRUxFQ1RJT05fTk9ORSk7CisgICAgRVdLX0ZSQU1F
X1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFV0tfVEVYVF9TRUxFQ1RJT05fTk9ORSk7
CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgRVdLX1RFWFRf
U0VMRUNUSU9OX05PTkUpOwogCiAgICAgV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb24qIGNvbnRyb2xs
ZXIgPSBzZC0+ZnJhbWUtPnNlbGVjdGlvbigpOwpAQCAtMTA4NCwxMyArMTA4NCwxMyBAQCBFd2tf
VGV4dF9TZWxlY3Rpb25fVHlwZSBld2tfZnJhbWVfdGV4dF9zZWxlY3Rpb25fdHlwZV9nZXQoY29u
c3QgRXZhc19PYmplY3QqIG8pCiAgKiBieSBhIHZpZXcuIFVzdWFsbHkgb25lIG9wZXJhdGVzIG9u
IHRoZSB2aWV3IGFuZCBub3QgZGlyZWN0bHkgb24gdGhlCiAgKiBmcmFtZS4KICAqCi0gKiBAcGFy
YW0gZSBjYW52YXMgd2hlcmUgdG8gY3JlYXRlIHRoZSBmcmFtZSBvYmplY3QKKyAqIEBwYXJhbSBj
YW52YXMgY2FudmFzIHdoZXJlIHRvIGNyZWF0ZSB0aGUgZnJhbWUgb2JqZWN0CiAgKgogICogQHJl
dHVybiBhIG5ldyBmcmFtZSBvYmplY3Qgb3IgQGMgMCBvbiBmYWlsdXJlCiAgKi8KLUV2YXNfT2Jq
ZWN0KiBld2tfZnJhbWVfYWRkKEV2YXMqIGUpCitFdmFzX09iamVjdCogZXdrX2ZyYW1lX2FkZChF
dmFzKiBjYW52YXMpCiB7Ci0gICAgcmV0dXJuIGV2YXNfb2JqZWN0X3NtYXJ0X2FkZChlLCBfZXdr
X2ZyYW1lX3NtYXJ0X2NsYXNzX25ldygpKTsKKyAgICByZXR1cm4gZXZhc19vYmplY3Rfc21hcnRf
YWRkKGNhbnZhcywgX2V3a19mcmFtZV9zbWFydF9jbGFzc19uZXcoKSk7CiB9CiAKIC8qKgpAQCAt
MTEwMCwxMiArMTEwMCwxMiBAQCBFdmFzX09iamVjdCogZXdrX2ZyYW1lX2FkZChFdmFzKiBlKQog
ICoKICAqIFRoaXMgaXMgaW50ZXJuYWwgYW5kIHNob3VsZCBuZXZlciBiZSBjYWxsZWQgYnkgZXh0
ZXJuYWwgdXNlcnMuCiAgKi8KLUVpbmFfQm9vbCBld2tfZnJhbWVfaW5pdChFdmFzX09iamVjdCog
bywgRXZhc19PYmplY3QqIHZpZXcsIFdlYkNvcmU6OkZyYW1lKiBmcmFtZSkKK0VpbmFfQm9vbCBl
d2tfZnJhbWVfaW5pdChFdmFzX09iamVjdCogZXdrRnJhbWUsIEV2YXNfT2JqZWN0KiB2aWV3LCBX
ZWJDb3JlOjpGcmFtZSogZnJhbWUpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4o
bywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0Zy
YW1lLCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgaWYgKCFzZC0+ZnJhbWUpIHsKICAgICAgICAgV2Vi
Q29yZTo6RnJhbWVMb2FkZXJDbGllbnRFZmwqIGZsYyA9IF9ld2tfZnJhbWVfbG9hZGVyX2VmbF9n
ZXQoZnJhbWUpOwotICAgICAgICBmbGMtPnNldFdlYkZyYW1lKG8pOworICAgICAgICBmbGMtPnNl
dFdlYkZyYW1lKGV3a0ZyYW1lKTsKICAgICAgICAgc2QtPmZyYW1lID0gZnJhbWU7CiAgICAgICAg
IHNkLT52aWV3ID0gdmlldzsKICAgICAgICAgZnJhbWUtPmluaXQoKTsKQEAgLTExMTMsNyArMTEx
Myw3IEBAIEVpbmFfQm9vbCBld2tfZnJhbWVfaW5pdChFdmFzX09iamVjdCogbywgRXZhc19PYmpl
Y3QqIHZpZXcsIFdlYkNvcmU6OkZyYW1lKiBmcmFtCiAgICAgfQogCiAgICAgRVJSKCJmcmFtZSAl
cCBhbHJlYWR5IHNldCBmb3IgJXAsIGlnbm9yZWQgbmV3ICVwIiwKLSAgICAgICAgc2QtPmZyYW1l
LCBvLCBmcmFtZSk7CisgICAgICAgIHNkLT5mcmFtZSwgZXdrRnJhbWUsIGZyYW1lKTsKICAgICBy
ZXR1cm4gRUlOQV9GQUxTRTsKIH0KIApAQCAtMTEyMiw5ICsxMTIyLDkgQEAgRWluYV9Cb29sIGV3
a19mcmFtZV9pbml0KEV2YXNfT2JqZWN0KiBvLCBFdmFzX09iamVjdCogdmlldywgV2ViQ29yZTo6
RnJhbWUqIGZyYW0KICAqCiAgKiBBZGRzIGNoaWxkIHRvIHRoZSBmcmFtZS4KICAqLwotRWluYV9C
b29sIGV3a19mcmFtZV9jaGlsZF9hZGQoRXZhc19PYmplY3QqIG8sIFdURjo6UGFzc1JlZlB0cjxX
ZWJDb3JlOjpGcmFtZT4gY2hpbGQsIGNvbnN0IFdURjo6U3RyaW5nJiBuYW1lLCBjb25zdCBXZWJD
b3JlOjpLVVJMJiB1cmwsIGNvbnN0IFdURjo6U3RyaW5nJiByZWZlcnJlcikKK0VpbmFfQm9vbCBl
d2tfZnJhbWVfY2hpbGRfYWRkKEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgV1RGOjpQYXNzUmVmUHRy
PFdlYkNvcmU6OkZyYW1lPiBjaGlsZCwgY29uc3QgV1RGOjpTdHJpbmcmIG5hbWUsIGNvbnN0IFdl
YkNvcmU6OktVUkwmIHVybCwgY29uc3QgV1RGOjpTdHJpbmcmIHJlZmVycmVyKQogewotICAgIEVX
S19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAwKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VU
X09SX1JFVFVSTihld2tGcmFtZSwgc2QsIDApOwogICAgIGNoYXIgYnVmWzI1Nl07CiAgICAgRXZh
c19PYmplY3QqIGZyYW1lOwogICAgIFdlYkNvcmU6OkZyYW1lKiBjZjsKQEAgLTExNDgsNyArMTE0
OCw3IEBAIEVpbmFfQm9vbCBld2tfZnJhbWVfY2hpbGRfYWRkKEV2YXNfT2JqZWN0KiBvLCBXVEY6
OlBhc3NSZWZQdHI8V2ViQ29yZTo6RnJhbWU+IGNoCiAgICAgfQogICAgIHNucHJpbnRmKGJ1Ziwg
c2l6ZW9mKGJ1ZiksICJFV0tfRnJhbWU6Y2hpbGQvJXMiLCBuYW1lLnV0ZjgoKS5kYXRhKCkpOwog
ICAgIGV2YXNfb2JqZWN0X25hbWVfc2V0KGZyYW1lLCBidWYpOwotICAgIGV2YXNfb2JqZWN0X3Nt
YXJ0X21lbWJlcl9hZGQoZnJhbWUsIG8pOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X21lbWJlcl9h
ZGQoZnJhbWUsIGV3a0ZyYW1lKTsKICAgICBldmFzX29iamVjdF9zaG93KGZyYW1lKTsKIAogICAg
IC8vIFRoZSBjcmVhdGlvbiBvZiB0aGUgZnJhbWUgbWF5IGhhdmUgcnVuIGFyYml0cmFyeSBKYXZh
U2NyaXB0IHRoYXQgcmVtb3ZlZCBpdCBmcm9tIHRoZSBwYWdlIGFscmVhZHkuCkBAIC0xMTc3LDEy
ICsxMTc3LDEyIEBAIEVpbmFfQm9vbCBld2tfZnJhbWVfY2hpbGRfYWRkKEV2YXNfT2JqZWN0KiBv
LCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6RnJhbWU+IGNoCiAgKiBAcGFyYW0gbyBUaGUgZXdr
IGZyYW1lIHRvIGFjdCB1cG9uLgogICogQHBhcmFtIG5ld1BhcmVudCBUaGUgbmV3IHZpZXcgdGhh
dCB3aWxsIGJlIHNldCBhcyB0aGUgcGFyZW50IG9mIHRoZSBmcmFtZS4KICAqLwotdm9pZCBld2tf
ZnJhbWVfdmlld19zZXQoRXZhc19PYmplY3QqIG8sIEV2YXNfT2JqZWN0KiBuZXdQYXJlbnQpCit2
b2lkIGV3a19mcmFtZV92aWV3X3NldChFdmFzX09iamVjdCogZXdrRnJhbWUsIEV2YXNfT2JqZWN0
KiBuZXdQYXJlbnQpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4obywgc2QpOwor
ICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCk7CiAKLSAgICBldmFz
X29iamVjdF9zbWFydF9tZW1iZXJfZGVsKG8pOwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X21lbWJl
cl9hZGQobywgbmV3UGFyZW50KTsKKyAgICBldmFzX29iamVjdF9zbWFydF9tZW1iZXJfZGVsKGV3
a0ZyYW1lKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9tZW1iZXJfYWRkKGV3a0ZyYW1lLCBuZXdQ
YXJlbnQpOwogCiAgICAgc2QtPnZpZXcgPSBuZXdQYXJlbnQ7CiB9CkBAIC0xMTkxLDEwICsxMTkx
LDEwIEBAIHZvaWQgZXdrX2ZyYW1lX3ZpZXdfc2V0KEV2YXNfT2JqZWN0KiBvLCBFdmFzX09iamVj
dCogbmV3UGFyZW50KQogICogQGludGVybmFsCiAgKiBGcmFtZSB3YXMgZGVzdHJveWVkIGJ5IGxv
YWRlciwgcmVtb3ZlIGludGVybmFsIHJlZmVyZW5jZS4KICAqLwotdm9pZCBld2tfZnJhbWVfY29y
ZV9nb25lKEV2YXNfT2JqZWN0KiBvKQordm9pZCBld2tfZnJhbWVfY29yZV9nb25lKEV2YXNfT2Jq
ZWN0KiBld2tGcmFtZSkKIHsKLSAgICBEQkcoIm89JXAiLCBvKTsKLSAgICBFV0tfRlJBTUVfU0Rf
R0VUX09SX1JFVFVSTihvLCBzZCk7CisgICAgREJHKCJld2tGcmFtZT0lcCIsIGV3a0ZyYW1lKTsK
KyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QpOwogICAgIHNkLT5m
cmFtZSA9IDA7CiB9CiAKQEAgLTEyMDUsOSArMTIwNSw5IEBAIHZvaWQgZXdrX2ZyYW1lX2NvcmVf
Z29uZShFdmFzX09iamVjdCogbykKICAqIEF2b2lkIHVzaW5nIHRoaXMgY2FsbCBmcm9tIG91dHNp
ZGUsIGFkZCBzcGVjaWZpYyBld2tfZnJhbWVfKgogICogYWN0aW9ucyBpbnN0ZWFkLgogICovCi1X
ZWJDb3JlOjpGcmFtZSogZXdrX2ZyYW1lX2NvcmVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQor
V2ViQ29yZTo6RnJhbWUqIGV3a19mcmFtZV9jb3JlX2dldChjb25zdCBFdmFzX09iamVjdCogZXdr
RnJhbWUpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIDApOworICAg
IEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgMCk7CiAgICAgcmV0dXJu
IHNkLT5mcmFtZTsKIH0KIApAQCAtMTIyNCw5ICsxMjI0LDkgQEAgV2ViQ29yZTo6RnJhbWUqIGV3
a19mcmFtZV9jb3JlX2dldChjb25zdCBFdmFzX09iamVjdCogbykKICAqCiAgKiBFbWl0cyBzaWdu
YWw6ICJyZXNvdXJjZSxyZXF1ZXN0LHdpbGxzZW5kIgogICovCi12b2lkIGV3a19mcmFtZV9yZXF1
ZXN0X3dpbGxfc2VuZChFdmFzX09iamVjdCogbywgRXdrX0ZyYW1lX1Jlc291cmNlX1JlcXVlc3Qq
IHJlcXVlc3QpCit2b2lkIGV3a19mcmFtZV9yZXF1ZXN0X3dpbGxfc2VuZChFdmFzX09iamVjdCog
ZXdrRnJhbWUsIEV3a19GcmFtZV9SZXNvdXJjZV9SZXF1ZXN0KiByZXF1ZXN0KQogewotICAgIGV2
YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwobywgInJlc291cmNlLHJlcXVlc3Qsd2lsbHNl
bmQiLCByZXF1ZXN0KTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKGV3a0Zy
YW1lLCAicmVzb3VyY2UscmVxdWVzdCx3aWxsc2VuZCIsIHJlcXVlc3QpOwogfQogCiAvKioKQEAg
LTEyMzgsOSArMTIzOCw5IEBAIHZvaWQgZXdrX2ZyYW1lX3JlcXVlc3Rfd2lsbF9zZW5kKEV2YXNf
T2JqZWN0KiBvLCBFd2tfRnJhbWVfUmVzb3VyY2VfUmVxdWVzdCogcmVxCiAgKgogICogRW1pdHMg
c2lnbmFsOiAicmVzb3VyY2UscmVxdWVzdCxuZXciCiAgKi8KLXZvaWQgZXdrX2ZyYW1lX3JlcXVl
c3RfYXNzaWduX2lkZW50aWZpZXIoRXZhc19PYmplY3QqIG8sIGNvbnN0IEV3a19GcmFtZV9SZXNv
dXJjZV9SZXF1ZXN0KiByZXF1ZXN0KQordm9pZCBld2tfZnJhbWVfcmVxdWVzdF9hc3NpZ25faWRl
bnRpZmllcihFdmFzX09iamVjdCogZXdrRnJhbWUsIGNvbnN0IEV3a19GcmFtZV9SZXNvdXJjZV9S
ZXF1ZXN0KiByZXF1ZXN0KQogewotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwo
bywgInJlc291cmNlLHJlcXVlc3QsbmV3IiwgKHZvaWQqKXJlcXVlc3QpOworICAgIGV2YXNfb2Jq
ZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdrRnJhbWUsICJyZXNvdXJjZSxyZXF1ZXN0LG5ldyIs
ICh2b2lkKilyZXF1ZXN0KTsKIH0KIAogLyoqCkBAIC0xMjUxLDkgKzEyNTEsOSBAQCB2b2lkIGV3
a19mcmFtZV9yZXF1ZXN0X2Fzc2lnbl9pZGVudGlmaWVyKEV2YXNfT2JqZWN0KiBvLCBjb25zdCBF
d2tfRnJhbWVfUmVzb3VyYwogICoKICAqIEVtaXRzIHNpZ25hbDogIm5hdmlnYXRpb24sZmlyc3Qi
CiAgKi8KLXZvaWQgZXdrX2ZyYW1lX2RpZF9wZXJmb3JtX2ZpcnN0X25hdmlnYXRpb24oRXZhc19P
YmplY3QqIG8pCit2b2lkIGV3a19mcmFtZV9kaWRfcGVyZm9ybV9maXJzdF9uYXZpZ2F0aW9uKEV2
YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19j
YWxsKG8sICJuYXZpZ2F0aW9uLGZpcnN0IiwgMCk7CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2Fs
bGJhY2tfY2FsbChld2tGcmFtZSwgIm5hdmlnYXRpb24sZmlyc3QiLCAwKTsKIH0KIAogLyoqCkBA
IC0xMjY1LDkgKzEyNjUsOSBAQCB2b2lkIGV3a19mcmFtZV9kaWRfcGVyZm9ybV9maXJzdF9uYXZp
Z2F0aW9uKEV2YXNfT2JqZWN0KiBvKQogICoKICAqIEVtaXRzIHNpZ25hbDogInN0YXRlLHNhdmUi
CiAgKi8KLXZvaWQgZXdrX2ZyYW1lX3ZpZXdfc3RhdGVfc2F2ZShFdmFzX09iamVjdCogbywgV2Vi
Q29yZTo6SGlzdG9yeUl0ZW0qIGl0ZW0pCit2b2lkIGV3a19mcmFtZV92aWV3X3N0YXRlX3NhdmUo
RXZhc19PYmplY3QqIGV3a0ZyYW1lLCBXZWJDb3JlOjpIaXN0b3J5SXRlbSogaXRlbSkKIHsKLSAg
ICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKG8sICJzdGF0ZSxzYXZlIiwgMCk7Cisg
ICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChld2tGcmFtZSwgInN0YXRlLHNhdmUi
LCAwKTsKIH0KIAogLyoqCkBAIC0xMjc2LDE2ICsxMjc2LDE2IEBAIHZvaWQgZXdrX2ZyYW1lX3Zp
ZXdfc3RhdGVfc2F2ZShFdmFzX09iamVjdCogbywgV2ViQ29yZTo6SGlzdG9yeUl0ZW0qIGl0ZW0p
CiAgKgogICogRW1pdHMgc2lnbmFsOiAibG9hZCxzdGFydGVkIiB3aXRoIG5vIHBhcmFtZXRlcnMu
CiAgKi8KLXZvaWQgZXdrX2ZyYW1lX2xvYWRfc3RhcnRlZChFdmFzX09iamVjdCogbykKK3ZvaWQg
ZXdrX2ZyYW1lX2xvYWRfc3RhcnRlZChFdmFzX09iamVjdCogZXdrRnJhbWUpCiB7CiAgICAgRXZh
c19PYmplY3QqIG1haW5fZnJhbWU7Ci0gICAgREJHKCJvPSVwIiwgbyk7Ci0gICAgZXZhc19vYmpl
Y3Rfc21hcnRfY2FsbGJhY2tfY2FsbChvLCAibG9hZCxzdGFydGVkIiwgMCk7Ci0gICAgRVdLX0ZS
QU1FX1NEX0dFVF9PUl9SRVRVUk4obywgc2QpOworICAgIERCRygiZXdrRnJhbWU9JXAiLCBld2tG
cmFtZSk7CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChld2tGcmFtZSwgImxv
YWQsc3RhcnRlZCIsIDApOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1l
LCBzZCk7CiAgICAgZXdrX3ZpZXdfbG9hZF9zdGFydGVkKHNkLT52aWV3KTsKIAogICAgIG1haW5f
ZnJhbWUgPSBld2tfdmlld19mcmFtZV9tYWluX2dldChzZC0+dmlldyk7Ci0gICAgaWYgKG1haW5f
ZnJhbWUgPT0gbykKKyAgICBpZiAobWFpbl9mcmFtZSA9PSBld2tGcmFtZSkKICAgICAgICAgZXdr
X3ZpZXdfZnJhbWVfbWFpbl9sb2FkX3N0YXJ0ZWQoc2QtPnZpZXcpOwogfQogCkBAIC0xMjk3LDkg
KzEyOTcsOSBAQCB2b2lkIGV3a19mcmFtZV9sb2FkX3N0YXJ0ZWQoRXZhc19PYmplY3QqIG8pCiAg
KgogICogRW1pdHMgc2lnbmFsOiAibG9hZCxwcm92aXNpb25hbCIgd2l0aCBubyBwYXJhbWV0ZXJz
LgogICovCi12b2lkIGV3a19mcmFtZV9sb2FkX3Byb3Zpc2lvbmFsKEV2YXNfT2JqZWN0KiBvKQor
dm9pZCBld2tfZnJhbWVfbG9hZF9wcm92aXNpb25hbChFdmFzX09iamVjdCogZXdrRnJhbWUpCiB7
Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChvLCAibG9hZCxwcm92aXNpb25h
bCIsIDApOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdrRnJhbWUsICJs
b2FkLHByb3Zpc2lvbmFsIiwgMCk7CiB9CiAKIC8qKgpAQCAtMTMxMCw5ICsxMzEwLDkgQEAgdm9p
ZCBld2tfZnJhbWVfbG9hZF9wcm92aXNpb25hbChFdmFzX09iamVjdCogbykKICAqCiAgKiBFbWl0
cyBzaWduYWw6ICJsb2FkLGZpcnN0bGF5b3V0LGZpbmlzaGVkIiB3aXRoIG5vIHBhcmFtZXRlcnMu
CiAgKi8KLXZvaWQgZXdrX2ZyYW1lX2xvYWRfZmlyc3RsYXlvdXRfZmluaXNoZWQoRXZhc19PYmpl
Y3QqIG8pCit2b2lkIGV3a19mcmFtZV9sb2FkX2ZpcnN0bGF5b3V0X2ZpbmlzaGVkKEV2YXNfT2Jq
ZWN0KiBld2tGcmFtZSkKIHsKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKG8s
ICJsb2FkLGZpcnN0bGF5b3V0LGZpbmlzaGVkIiwgMCk7CisgICAgZXZhc19vYmplY3Rfc21hcnRf
Y2FsbGJhY2tfY2FsbChld2tGcmFtZSwgImxvYWQsZmlyc3RsYXlvdXQsZmluaXNoZWQiLCAwKTsK
IH0KIAogLyoqCkBAIC0xMzIzLDkgKzEzMjMsOSBAQCB2b2lkIGV3a19mcmFtZV9sb2FkX2ZpcnN0
bGF5b3V0X2ZpbmlzaGVkKEV2YXNfT2JqZWN0KiBvKQogICoKICAqIEVtaXRzIHNpZ25hbDogImxv
YWQsbm9uZW1wdHlsYXlvdXQsZmluaXNoZWQiIHdpdGggbm8gcGFyYW1ldGVycy4KICAqLwotdm9p
ZCBld2tfZnJhbWVfbG9hZF9maXJzdGxheW91dF9ub25lbXB0eV9maW5pc2hlZChFdmFzX09iamVj
dCogbykKK3ZvaWQgZXdrX2ZyYW1lX2xvYWRfZmlyc3RsYXlvdXRfbm9uZW1wdHlfZmluaXNoZWQo
RXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNr
X2NhbGwobywgImxvYWQsbm9uZW1wdHlsYXlvdXQsZmluaXNoZWQiLCAwKTsKKyAgICBldmFzX29i
amVjdF9zbWFydF9jYWxsYmFja19jYWxsKGV3a0ZyYW1lLCAibG9hZCxub25lbXB0eWxheW91dCxm
aW5pc2hlZCIsIDApOwogfQogCiAvKioKQEAgLTEzMzYsMTEgKzEzMzYsMTEgQEAgdm9pZCBld2tf
ZnJhbWVfbG9hZF9maXJzdGxheW91dF9ub25lbXB0eV9maW5pc2hlZChFdmFzX09iamVjdCogbykK
ICAqCiAgKiBFbWl0cyBzaWduYWw6ICJsb2FkLGRvY3VtZW50LGZpbmlzaGVkIiB3aXRoIG5vIHBh
cmFtZXRlcnMuCiAgKi8KLXZvaWQgZXdrX2ZyYW1lX2xvYWRfZG9jdW1lbnRfZmluaXNoZWQoRXZh
c19PYmplY3QqIG8pCit2b2lkIGV3a19mcmFtZV9sb2FkX2RvY3VtZW50X2ZpbmlzaGVkKEV2YXNf
T2JqZWN0KiBld2tGcmFtZSkKIHsKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxs
KG8sICJsb2FkLGRvY3VtZW50LGZpbmlzaGVkIiwgMCk7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9P
Ul9SRVRVUk4obywgc2QpOwotICAgIGV3a192aWV3X2xvYWRfZG9jdW1lbnRfZmluaXNoZWQoc2Qt
PnZpZXcsIG8pOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdrRnJhbWUs
ICJsb2FkLGRvY3VtZW50LGZpbmlzaGVkIiwgMCk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9S
RVRVUk4oZXdrRnJhbWUsIHNkKTsKKyAgICBld2tfdmlld19sb2FkX2RvY3VtZW50X2ZpbmlzaGVk
KHNkLT52aWV3LCBld2tGcmFtZSk7CiB9CiAKIC8qKgpAQCAtMTM1MywyNyArMTM1MywyNyBAQCB2
b2lkIGV3a19mcmFtZV9sb2FkX2RvY3VtZW50X2ZpbmlzaGVkKEV2YXNfT2JqZWN0KiBvKQogICog
QG5vdGUgdGhlcmUgc2hvdWxkIG5vdGJlIGFueSBlcnJvciBzdHVmZiBoZXJlLCBidXQgdHJ5aW5n
IHRvIGJlCiAgKiAgICAgICBjb21wYXRpYmxlIHdpdGggcHJldmlvdXMgV2ViS2l0LgogICovCi12
b2lkIGV3a19mcmFtZV9sb2FkX2ZpbmlzaGVkKEV2YXNfT2JqZWN0KiBvLCBjb25zdCBjaGFyKiBl
cnJvcl9kb21haW4sIGludCBlcnJvcl9jb2RlLCBFaW5hX0Jvb2wgaXNfY2FuY2VsbGF0aW9uLCBj
b25zdCBjaGFyKiBlcnJvcl9kZXNjcmlwdGlvbiwgY29uc3QgY2hhciogZmFpbGluZ191cmwpCit2
b2lkIGV3a19mcmFtZV9sb2FkX2ZpbmlzaGVkKEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgY29uc3Qg
Y2hhciogZXJyb3JEb21haW4sIGludCBlcnJvckNvZGUsIEVpbmFfQm9vbCBpc0NhbmNlbGxhdGlv
biwgY29uc3QgY2hhciogZXJyb3JEZXNjcmlwdGlvbiwgY29uc3QgY2hhciogZmFpbGluZ1VybCkK
IHsKLSAgICBFd2tfRnJhbWVfTG9hZF9FcnJvciBidWYsICogZXJyb3I7Ci0gICAgaWYgKCFlcnJv
cl9kb21haW4pIHsKLSAgICAgICAgREJHKCJvPSVwLCBzdWNjZXNzLiIsIG8pOworICAgIEV3a19G
cmFtZV9Mb2FkX0Vycm9yIGJ1ZiwgKmVycm9yOworICAgIGlmICghZXJyb3JEb21haW4pIHsKKyAg
ICAgICAgREJHKCJld2tGcmFtZT0lcCwgc3VjY2Vzcy4iLCBld2tGcmFtZSk7CiAgICAgICAgIGVy
cm9yID0gMDsKICAgICB9IGVsc2UgewotICAgICAgICBEQkcoIm89JXAsIGVycm9yPSVzICglZCwg
Y2FuY2VsbGF0aW9uPSVoaHUpIFwiJXNcIiwgdXJsPSVzIiwKLSAgICAgICAgICAgIG8sIGVycm9y
X2RvbWFpbiwgZXJyb3JfY29kZSwgaXNfY2FuY2VsbGF0aW9uLAotICAgICAgICAgICAgZXJyb3Jf
ZGVzY3JpcHRpb24sIGZhaWxpbmdfdXJsKTsKLQotICAgICAgICBidWYuZG9tYWluID0gZXJyb3Jf
ZG9tYWluOwotICAgICAgICBidWYuY29kZSA9IGVycm9yX2NvZGU7Ci0gICAgICAgIGJ1Zi5pc19j
YW5jZWxsYXRpb24gPSBpc19jYW5jZWxsYXRpb247Ci0gICAgICAgIGJ1Zi5kZXNjcmlwdGlvbiA9
IGVycm9yX2Rlc2NyaXB0aW9uOwotICAgICAgICBidWYuZmFpbGluZ191cmwgPSBmYWlsaW5nX3Vy
bDsKLSAgICAgICAgYnVmLmZyYW1lID0gbzsKKyAgICAgICAgREJHKCJld2tGcmFtZT0lcCwgZXJy
b3I9JXMgKCVkLCBjYW5jZWxsYXRpb249JWhodSkgXCIlc1wiLCB1cmw9JXMiLAorICAgICAgICAg
ICAgZXdrRnJhbWUsIGVycm9yRG9tYWluLCBlcnJvckNvZGUsIGlzQ2FuY2VsbGF0aW9uLAorICAg
ICAgICAgICAgZXJyb3JEZXNjcmlwdGlvbiwgZmFpbGluZ1VybCk7CisKKyAgICAgICAgYnVmLmRv
bWFpbiA9IGVycm9yRG9tYWluOworICAgICAgICBidWYuY29kZSA9IGVycm9yQ29kZTsKKyAgICAg
ICAgYnVmLmlzX2NhbmNlbGxhdGlvbiA9IGlzQ2FuY2VsbGF0aW9uOworICAgICAgICBidWYuZGVz
Y3JpcHRpb24gPSBlcnJvckRlc2NyaXB0aW9uOworICAgICAgICBidWYuZmFpbGluZ191cmwgPSBm
YWlsaW5nVXJsOworICAgICAgICBidWYuZnJhbWUgPSBld2tGcmFtZTsKICAgICAgICAgZXJyb3Ig
PSAmYnVmOwogICAgIH0KLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKG8sICJs
b2FkLGZpbmlzaGVkIiwgZXJyb3IpOwotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8s
IHNkKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKGV3a0ZyYW1lLCAibG9h
ZCxmaW5pc2hlZCIsIGVycm9yKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tG
cmFtZSwgc2QpOwogICAgIGV3a192aWV3X2xvYWRfZmluaXNoZWQoc2QtPnZpZXcsIGVycm9yKTsK
IH0KIApAQCAtMTM4MywyNCArMTM4MywyNCBAQCB2b2lkIGV3a19mcmFtZV9sb2FkX2ZpbmlzaGVk
KEV2YXNfT2JqZWN0KiBvLCBjb25zdCBjaGFyKiBlcnJvcl9kb21haW4sIGludCBlcnJvcgogICoK
ICAqIEVtaXRzIHNpZ25hbDogImxvYWQsZXJyb3IiIHdpdGggcG9pbnRlciB0byBFd2tfRnJhbWVf
TG9hZF9FcnJvci4KICAqLwotdm9pZCBld2tfZnJhbWVfbG9hZF9lcnJvcihFdmFzX09iamVjdCog
bywgY29uc3QgY2hhciogZXJyb3JfZG9tYWluLCBpbnQgZXJyb3JfY29kZSwgRWluYV9Cb29sIGlz
X2NhbmNlbGxhdGlvbiwgY29uc3QgY2hhciogZXJyb3JfZGVzY3JpcHRpb24sIGNvbnN0IGNoYXIq
IGZhaWxpbmdfdXJsKQordm9pZCBld2tfZnJhbWVfbG9hZF9lcnJvcihFdmFzX09iamVjdCogZXdr
RnJhbWUsIGNvbnN0IGNoYXIqIGVycm9yRG9tYWluLCBpbnQgZXJyb3JDb2RlLCBFaW5hX0Jvb2wg
aXNDYW5jZWxsYXRpb24sIGNvbnN0IGNoYXIqIGVycm9yRGVzY3JpcHRpb24sIGNvbnN0IGNoYXIq
IGZhaWxpbmdVcmwpCiB7CiAgICAgRXdrX0ZyYW1lX0xvYWRfRXJyb3IgZXJyb3I7CiAKLSAgICBE
QkcoIm89JXAsIGVycm9yPSVzICglZCwgY2FuY2VsbGF0aW9uPSVoaHUpIFwiJXNcIiwgdXJsPSVz
IiwKLSAgICAgICAgbywgZXJyb3JfZG9tYWluLCBlcnJvcl9jb2RlLCBpc19jYW5jZWxsYXRpb24s
Ci0gICAgICAgIGVycm9yX2Rlc2NyaXB0aW9uLCBmYWlsaW5nX3VybCk7CisgICAgREJHKCJld2tG
cmFtZT0lcCwgZXJyb3I9JXMgKCVkLCBjYW5jZWxsYXRpb249JWhodSkgXCIlc1wiLCB1cmw9JXMi
LAorICAgICAgICBld2tGcmFtZSwgZXJyb3JEb21haW4sIGVycm9yQ29kZSwgaXNDYW5jZWxsYXRp
b24sCisgICAgICAgIGVycm9yRGVzY3JpcHRpb24sIGZhaWxpbmdVcmwpOwogCi0gICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk4oZXJyb3JfZG9tYWluKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTihlcnJvckRvbWFpbik7CiAKLSAgICBlcnJvci5jb2RlID0gZXJyb3JfY29kZTsK
LSAgICBlcnJvci5pc19jYW5jZWxsYXRpb24gPSBpc19jYW5jZWxsYXRpb247Ci0gICAgZXJyb3Iu
ZG9tYWluID0gZXJyb3JfZG9tYWluOwotICAgIGVycm9yLmRlc2NyaXB0aW9uID0gZXJyb3JfZGVz
Y3JpcHRpb247Ci0gICAgZXJyb3IuZmFpbGluZ191cmwgPSBmYWlsaW5nX3VybDsKLSAgICBlcnJv
ci5mcmFtZSA9IG87Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChvLCAibG9h
ZCxlcnJvciIsICZlcnJvcik7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4obywgc2Qp
OworICAgIGVycm9yLmNvZGUgPSBlcnJvckNvZGU7CisgICAgZXJyb3IuaXNfY2FuY2VsbGF0aW9u
ID0gaXNDYW5jZWxsYXRpb247CisgICAgZXJyb3IuZG9tYWluID0gZXJyb3JEb21haW47CisgICAg
ZXJyb3IuZGVzY3JpcHRpb24gPSBlcnJvckRlc2NyaXB0aW9uOworICAgIGVycm9yLmZhaWxpbmdf
dXJsID0gZmFpbGluZ1VybDsKKyAgICBlcnJvci5mcmFtZSA9IGV3a0ZyYW1lOworICAgIGV2YXNf
b2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdrRnJhbWUsICJsb2FkLGVycm9yIiwgJmVycm9y
KTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QpOwogICAgIGV3
a192aWV3X2xvYWRfZXJyb3Ioc2QtPnZpZXcsICZlcnJvcik7CiB9CiAKQEAgLTE0MTAsMTcgKzE0
MTAsMTcgQEAgdm9pZCBld2tfZnJhbWVfbG9hZF9lcnJvcihFdmFzX09iamVjdCogbywgY29uc3Qg
Y2hhciogZXJyb3JfZG9tYWluLCBpbnQgZXJyb3JfY28KICAqCiAgKiBFbWl0cyBzaWduYWw6ICJs
b2FkLHByb2dyZXNzIiB3aXRoIHBvaW50ZXIgdG8gYSBkb3VibGUgZnJvbSAwLjAgdG8gMS4wLgog
ICovCi12b2lkIGV3a19mcmFtZV9sb2FkX3Byb2dyZXNzX2NoYW5nZWQoRXZhc19PYmplY3QqIG8p
Cit2b2lkIGV3a19mcmFtZV9sb2FkX3Byb2dyZXNzX2NoYW5nZWQoRXZhc19PYmplY3QqIGV3a0Zy
YW1lKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkKTsKKyAgICBFV0tf
RlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QpOwogICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOKHNkLT5mcmFtZSk7CiAKICAgICAvLyBUT0RPOiB0aGlzIGlzIHBlciBwYWdl
LCB0aGVyZSBzaG91bGQgYmUgYSB3YXkgdG8gaGF2ZSBwZXItZnJhbWUuCiAgICAgZG91YmxlIHBy
b2dyZXNzID0gc2QtPmZyYW1lLT5wYWdlKCktPnByb2dyZXNzKCktPmVzdGltYXRlZFByb2dyZXNz
KCk7CiAKLSAgICBEQkcoIm89JXAgKHA9JTAuM2YpIiwgbywgcHJvZ3Jlc3MpOworICAgIERCRygi
ZXdrRnJhbWU9JXAgKHA9JTAuM2YpIiwgZXdrRnJhbWUsIHByb2dyZXNzKTsKIAotICAgIGV2YXNf
b2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwobywgImxvYWQscHJvZ3Jlc3MiLCAmcHJvZ3Jlc3Mp
OworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdrRnJhbWUsICJsb2FkLHBy
b2dyZXNzIiwgJnByb2dyZXNzKTsKICAgICBld2tfdmlld19sb2FkX3Byb2dyZXNzX2NoYW5nZWQo
c2QtPnZpZXcpOwogfQogCkBAIC0xNDMwLDE4ICsxNDMwLDE4IEBAIHZvaWQgZXdrX2ZyYW1lX2xv
YWRfcHJvZ3Jlc3NfY2hhbmdlZChFdmFzX09iamVjdCogbykKICAqCiAgKiBSZXBvcnRzIGNvbnRl
bnRzIHNpemUgY2hhbmdlZC4KICAqLwotdm9pZCBld2tfZnJhbWVfY29udGVudHNfc2l6ZV9jaGFu
Z2VkKEV2YXNfT2JqZWN0KiBvLCBFdmFzX0Nvb3JkIHcsIEV2YXNfQ29vcmQgaCkKK3ZvaWQgZXdr
X2ZyYW1lX2NvbnRlbnRzX3NpemVfY2hhbmdlZChFdmFzX09iamVjdCogZXdrRnJhbWUsIEV2YXNf
Q29vcmQgd2lkdGgsIEV2YXNfQ29vcmQgaGVpZ2h0KQogewotICAgIERCRygibz0lcDogJWR4JWQi
LCBvLCB3LCBoKTsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihvLCBzZCk7Ci0gICAg
aWYgKHNkLT5jb250ZW50c19zaXplLncgPT0gdyAmJiBzZC0+Y29udGVudHNfc2l6ZS5oID09IGgp
CisgICAgREJHKCJld2tGcmFtZT0lcDogJWR4JWQiLCBld2tGcmFtZSwgd2lkdGgsIGhlaWdodCk7
CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkKTsKKyAgICBpZiAo
c2QtPmNvbnRlbnRzX3NpemUudyA9PSB3aWR0aCAmJiBzZC0+Y29udGVudHNfc2l6ZS5oID09IGhl
aWdodCkKICAgICAgICAgcmV0dXJuOwotICAgIHNkLT5jb250ZW50c19zaXplLncgPSB3OwotICAg
IHNkLT5jb250ZW50c19zaXplLmggPSBoOworICAgIHNkLT5jb250ZW50c19zaXplLncgPSB3aWR0
aDsKKyAgICBzZC0+Y29udGVudHNfc2l6ZS5oID0gaGVpZ2h0OwogICAgIC8vIFRPRE86IHVwZGF0
ZSBzb21ldGhpbmcgZWxzZSBpbnRlcm5hbGx5PwogCi0gICAgRXZhc19Db29yZCBzaXplWzJdID0g
e3csIGh9OwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwobywgImNvbnRlbnRz
LHNpemUsY2hhbmdlZCIsIHNpemUpOworICAgIEV2YXNfQ29vcmQgc2l6ZVsyXSA9IHt3aWR0aCwg
aGVpZ2h0fTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKGV3a0ZyYW1lLCAi
Y29udGVudHMsc2l6ZSxjaGFuZ2VkIiwgc2l6ZSk7CiB9CiAKIC8qKgpAQCAtMTQ0OSwxMyArMTQ0
OSwxMyBAQCB2b2lkIGV3a19mcmFtZV9jb250ZW50c19zaXplX2NoYW5nZWQoRXZhc19PYmplY3Qq
IG8sIEV2YXNfQ29vcmQgdywgRXZhc19Db29yZCBoKQogICoKICAqIFJlcG9ydHMgdGl0bGUgY2hh
bmdlZC4KICAqLwotdm9pZCBld2tfZnJhbWVfdGl0bGVfc2V0KEV2YXNfT2JqZWN0KiBvLCBjb25z
dCBjaGFyKiB0aXRsZSkKK3ZvaWQgZXdrX2ZyYW1lX3RpdGxlX3NldChFdmFzX09iamVjdCogZXdr
RnJhbWUsIGNvbnN0IGNoYXIqIHRpdGxlKQogewotICAgIERCRygibz0lcCwgdGl0bGU9JXMiLCBv
LCB0aXRsZSA/IHRpdGxlIDogIihudWxsKSIpOwotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVU
VVJOKG8sIHNkKTsKKyAgICBEQkcoImV3a0ZyYW1lPSVwLCB0aXRsZT0lcyIsIGV3a0ZyYW1lLCB0
aXRsZSA/IHRpdGxlIDogIihudWxsKSIpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJO
KGV3a0ZyYW1lLCBzZCk7CiAgICAgaWYgKCFlaW5hX3N0cmluZ3NoYXJlX3JlcGxhY2UoJnNkLT50
aXRsZSwgdGl0bGUpKQogICAgICAgICByZXR1cm47Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2Fs
bGJhY2tfY2FsbChvLCAidGl0bGUsY2hhbmdlZCIsICh2b2lkKilzZC0+dGl0bGUpOworICAgIGV2
YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdrRnJhbWUsICJ0aXRsZSxjaGFuZ2VkIiwg
KHZvaWQqKXNkLT50aXRsZSk7CiB9CiAKIC8qKgpAQCAtMTQ2MywxMCArMTQ2MywxMCBAQCB2b2lk
IGV3a19mcmFtZV90aXRsZV9zZXQoRXZhc19PYmplY3QqIG8sIGNvbnN0IGNoYXIqIHRpdGxlKQog
ICoKICAqIENyZWF0ZXMgYSB2aWV3LgogICovCi12b2lkIGV3a19mcmFtZV92aWV3X2NyZWF0ZV9m
b3JfdmlldyhFdmFzX09iamVjdCogbywgRXZhc19PYmplY3QqIHZpZXcpCit2b2lkIGV3a19mcmFt
ZV92aWV3X2NyZWF0ZV9mb3JfdmlldyhFdmFzX09iamVjdCogZXdrRnJhbWUsIEV2YXNfT2JqZWN0
KiB2aWV3KQogewotICAgIERCRygibz0lcCwgdmlldz0lcCIsIG8sIHZpZXcpOwotICAgIEVXS19G
UkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkKTsKKyAgICBEQkcoImV3a0ZyYW1lPSVwLCB2aWV3
PSVwIiwgZXdrRnJhbWUsIHZpZXcpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3
a0ZyYW1lLCBzZCk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmZyYW1lKTsK
ICAgICBFdmFzX0Nvb3JkIHcsIGg7CiAKQEAgLTE0OTAsMTggKzE0OTAsMTggQEAgdm9pZCBld2tf
ZnJhbWVfdmlld19jcmVhdGVfZm9yX3ZpZXcoRXZhc19PYmplY3QqIG8sIEV2YXNfT2JqZWN0KiB2
aWV3KQogCiAgICAgY29uc3QgY2hhciogdGhlbWUgPSBld2tfdmlld190aGVtZV9nZXQodmlldyk7
CiAgICAgc2QtPmZyYW1lLT52aWV3KCktPnNldEVkamVUaGVtZSh0aGVtZSk7Ci0gICAgc2QtPmZy
YW1lLT52aWV3KCktPnNldEV2YXNPYmplY3Qobyk7CisgICAgc2QtPmZyYW1lLT52aWV3KCktPnNl
dEV2YXNPYmplY3QoZXdrRnJhbWUpOwogfQogCi1zc2l6ZV90IGV3a19mcmFtZV9zb3VyY2VfZ2V0
KGNvbnN0IEV2YXNfT2JqZWN0KiBvLCBjaGFyKiogZnJhbWVfc291cmNlKQorc3NpemVfdCBld2tf
ZnJhbWVfc291cmNlX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrRnJhbWUsIGNoYXIqKiBmcmFt
ZVNvdXJjZSkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgLTEpOwor
ICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgLTEpOwogICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIC0xKTsKICAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLT5kb2N1bWVudCgpLCAtMSk7Ci0gICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGZyYW1lX3NvdXJjZSwgLTEpOworICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChmcmFtZVNvdXJjZSwgLTEpOwogCiAgICAgV1RG
OjpTdHJpbmcgc291cmNlOwotICAgICpmcmFtZV9zb3VyY2UgPSAwOyAvLyBTYXZlcyAwIHRvIHBv
aW50ZXIgdW50aWwgaXQncyBub3QgYWxsb2NhdGVkLgorICAgICpmcmFtZVNvdXJjZSA9IDA7IC8v
IFNhdmVzIDAgdG8gcG9pbnRlciB1bnRpbCBpdCdzIG5vdCBhbGxvY2F0ZWQuCiAKICAgICBpZiAo
IXNkLT5mcmFtZS0+ZG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSkgewogICAgICAgICAvLyBG
SVhNRTogU3VwcG9ydCBvdGhlcnMgZG9jdW1lbnRzLgpAQCAtMTUzMSwyMSArMTUzMSwyMSBAQCBz
c2l6ZV90IGV3a19mcmFtZV9zb3VyY2VfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvLCBjaGFyKiog
ZnJhbWVfc291cmNlKQogICAgIH0KIAogICAgIHNpemVfdCBzb3VyY2VfbGVuZ3RoID0gc3RybGVu
KHNvdXJjZS51dGY4KCkuZGF0YSgpKTsKLSAgICAqZnJhbWVfc291cmNlID0gc3RhdGljX2Nhc3Q8
Y2hhcio+KG1hbGxvYyhzb3VyY2VfbGVuZ3RoICsgMSkpOwotICAgIGlmICghKmZyYW1lX3NvdXJj
ZSkgeworICAgICpmcmFtZVNvdXJjZSA9IHN0YXRpY19jYXN0PGNoYXIqPihtYWxsb2Moc291cmNl
X2xlbmd0aCArIDEpKTsKKyAgICBpZiAoISpmcmFtZVNvdXJjZSkgewogICAgICAgICBDUklUSUNB
TCgiQ291bGQgbm90IGFsbG9jYXRlIG1lbW9yeS4iKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAg
IH0KIAotICAgIHN0cm5jcHkoKmZyYW1lX3NvdXJjZSwgc291cmNlLnV0ZjgoKS5kYXRhKCksIHNv
dXJjZV9sZW5ndGgpOwotICAgICgqZnJhbWVfc291cmNlKVtzb3VyY2VfbGVuZ3RoXSA9ICdcMCc7
CisgICAgc3RybmNweSgqZnJhbWVTb3VyY2UsIHNvdXJjZS51dGY4KCkuZGF0YSgpLCBzb3VyY2Vf
bGVuZ3RoKTsKKyAgICAoKmZyYW1lU291cmNlKVtzb3VyY2VfbGVuZ3RoXSA9ICdcMCc7CiAKICAg
ICByZXR1cm4gc291cmNlX2xlbmd0aDsKIH0KIAotRWluYV9MaXN0KiBld2tfZnJhbWVfcmVzb3Vy
Y2VzX2xvY2F0aW9uX2dldChjb25zdCBFdmFzX09iamVjdCogbykKK0VpbmFfTGlzdCogZXdrX2Zy
YW1lX3Jlc291cmNlc19sb2NhdGlvbl9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lKQog
ewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAwKTsKKyAgICBFV0tfRlJB
TUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIDApOwogICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIDApOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOX1ZBTChzZC0+ZnJhbWUtPmRvY3VtZW50KCksIDApOwogCkBAIC0xNjA5LDkgKzE2MDks
OSBAQCBjaGFyKiBld2tfZnJhbWVfcGxhaW5fdGV4dF9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3
a0ZyYW1lKQogICoKICAqIEVtaXRzIHNpZ25hbDogInVyaSxjaGFuZ2VkIiB3aXRoIG5ldyB1cmkg
YXMgcGFyYW1ldGVyLgogICovCi1FaW5hX0Jvb2wgZXdrX2ZyYW1lX3VyaV9jaGFuZ2VkKEV2YXNf
T2JqZWN0KiBvKQorRWluYV9Cb29sIGV3a19mcmFtZV91cmlfY2hhbmdlZChFdmFzX09iamVjdCog
ZXdrRnJhbWUpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFf
RkFMU0UpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgRUlO
QV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwg
RUlOQV9GQUxTRSk7CiAgICAgV1RGOjpDU3RyaW5nIHVyaShzZC0+ZnJhbWUtPmRvY3VtZW50KCkt
PnVybCgpLnN0cmluZygpLnV0ZjgoKSk7CiAKQEAgLTE2MjIsNyArMTYyMiw3IEBAIEVpbmFfQm9v
bCBld2tfZnJhbWVfdXJpX2NoYW5nZWQoRXZhc19PYmplY3QqIG8pCiAgICAgfQogCiAgICAgZWlu
YV9zdHJpbmdzaGFyZV9yZXBsYWNlKCZzZC0+dXJpLCB1cmkuZGF0YSgpKTsKLSAgICBldmFzX29i
amVjdF9zbWFydF9jYWxsYmFja19jYWxsKG8sICJ1cmksY2hhbmdlZCIsICh2b2lkKilzZC0+dXJp
KTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKGV3a0ZyYW1lLCAidXJpLGNo
YW5nZWQiLCAodm9pZCopc2QtPnVyaSk7CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIApAQCAt
MTYzMSwxMCArMTYzMSwxMCBAQCBFaW5hX0Jvb2wgZXdrX2ZyYW1lX3VyaV9jaGFuZ2VkKEV2YXNf
T2JqZWN0KiBvKQogICoKICAqIEZvcmNlcyBsYXlvdXQgZm9yIGZyYW1lLgogICovCi12b2lkIGV3
a19mcmFtZV9mb3JjZV9sYXlvdXQoRXZhc19PYmplY3QqIG8pCit2b2lkIGV3a19mcmFtZV9mb3Jj
ZV9sYXlvdXQoRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewotICAgIERCRygibz0lcCIsIG8pOwot
ICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkKTsKKyAgICBEQkcoImV3a0ZyYW1l
PSVwIiwgZXdrRnJhbWUpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1l
LCBzZCk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmZyYW1lKTsKICAgICBX
ZWJDb3JlOjpGcmFtZVZpZXcqIHZpZXcgPSBzZC0+ZnJhbWUtPnZpZXcoKTsKICAgICBpZiAodmll
dykKQEAgLTE2NDYsNyArMTY0Niw3IEBAIHZvaWQgZXdrX2ZyYW1lX2ZvcmNlX2xheW91dChFdmFz
X09iamVjdCogbykKICAqCiAgKiBDcmVhdGVzIHBsdWdpbi4KICAqLwotV1RGOjpQYXNzUmVmUHRy
PFdlYkNvcmU6OldpZGdldD4gZXdrX2ZyYW1lX3BsdWdpbl9jcmVhdGUoRXZhc19PYmplY3QqIG8s
IGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHBsdWdpblNpemUsIFdlYkNvcmU6OkhUTUxQbHVnSW5F
bGVtZW50KiBlbGVtZW50LCBjb25zdCBXZWJDb3JlOjpLVVJMJiB1cmwsIGNvbnN0IFdURjo6VmVj
dG9yPFdURjo6U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgV1RGOjpWZWN0b3I8V1RGOjpTdHJp
bmc+JiBwYXJhbVZhbHVlcywgY29uc3QgV1RGOjpTdHJpbmcmIG1pbWVUeXBlLCBib29sIGxvYWRN
YW51YWxseSkKK1dURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpXaWRnZXQ+IGV3a19mcmFtZV9wbHVn
aW5fY3JlYXRlKEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYg
cGx1Z2luU2l6ZSwgV2ViQ29yZTo6SFRNTFBsdWdJbkVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFdl
YkNvcmU6OktVUkwmIHVybCwgY29uc3QgV1RGOjpWZWN0b3I8V1RGOjpTdHJpbmc+JiBwYXJhbU5h
bWVzLCBjb25zdCBXVEY6OlZlY3RvcjxXVEY6OlN0cmluZz4mIHBhcmFtVmFsdWVzLCBjb25zdCBX
VEY6OlN0cmluZyYgbWltZVR5cGUsIGJvb2wgbG9hZE1hbnVhbGx5KQogewogICAgIHJldHVybiAw
OwogfQpAQCAtMTY1OSwxMCArMTY1OSwxMCBAQCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6V2lk
Z2V0PiBld2tfZnJhbWVfcGx1Z2luX2NyZWF0ZShFdmFzX09iamVjdCogbywgY29uc3QgVwogICoK
ICAqIEVtaXRzIHNpZ25hbDogImVkaXRvcmNsaWVudHNlbGVjdGlvbixjaGFuZ2VkIiB3aXRoIG5v
IHBhcmFtZXRlcnMuCiAgKi8KLXZvaWQgZXdrX2ZyYW1lX2VkaXRvcl9jbGllbnRfc2VsZWN0aW9u
X2NoYW5nZWQoRXZhc19PYmplY3QqIG8pCit2b2lkIGV3a19mcmFtZV9lZGl0b3JfY2xpZW50X3Nl
bGVjdGlvbl9jaGFuZ2VkKEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsKLSAgICBldmFzX29iamVj
dF9zbWFydF9jYWxsYmFja19jYWxsKG8sICJlZGl0b3JjbGllbnQsc2VsZWN0aW9uLGNoYW5nZWQi
LCAwKTsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihvLCBzZCk7CisgICAgZXZhc19v
YmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChld2tGcmFtZSwgImVkaXRvcmNsaWVudCxzZWxlY3Rp
b24sY2hhbmdlZCIsIDApOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1l
LCBzZCk7CiAgICAgZXdrX3ZpZXdfZWRpdG9yX2NsaWVudF9zZWxlY3Rpb25fY2hhbmdlZChzZC0+
dmlldyk7CiB9CiAKQEAgLTE2NzQsOSArMTY3NCw5IEBAIHZvaWQgZXdrX2ZyYW1lX2VkaXRvcl9j
bGllbnRfc2VsZWN0aW9uX2NoYW5nZWQoRXZhc19PYmplY3QqIG8pCiAgKgogICogRW1pdHMgc2ln
bmFsOiAiZWRpdG9yY2xpZW50LGNvbnRlbnRzLGNoYW5nZWQiIHdpdGggbm8gcGFyYW1ldGVycy4K
ICAqLwotdm9pZCBld2tfZnJhbWVfZWRpdG9yX2NsaWVudF9jb250ZW50c19jaGFuZ2VkKEV2YXNf
T2JqZWN0KiBvKQordm9pZCBld2tfZnJhbWVfZWRpdG9yX2NsaWVudF9jb250ZW50c19jaGFuZ2Vk
KEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFj
a19jYWxsKG8sICJlZGl0b3JjbGllbnQsY29udGVudHMsY2hhbmdlZCIsIDApOwotICAgIEVXS19G
UkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxs
YmFja19jYWxsKGV3a0ZyYW1lLCAiZWRpdG9yY2xpZW50LGNvbnRlbnRzLGNoYW5nZWQiLCAwKTsK
KyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QpOwogICAgIGV3a192
aWV3X2VkaXRvcl9jbGllbnRfY29udGVudHNfY2hhbmdlZChzZC0+dmlldyk7CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2hpc3RvcnkuY3BwIGIvU291cmNlL1dlYktp
dC9lZmwvZXdrL2V3a19oaXN0b3J5LmNwcAppbmRleCA2MmQ3NzQyOTg2YzIzYTIyMjQ4YjM4ZWE3
MWIxNDk0OTQwZTE3OTYyLi4wNmUyMzY5NDk5ZGQ1OWE4YzE5OWYyMmMxZDI4OGNjNWEyZTY5OGY1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2hpc3RvcnkuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfaGlzdG9yeS5jcHAKQEAgLTk1LDE0ICs5NSwxNCBA
QCBzdGF0aWMgaW5saW5lIEV3a19IaXN0b3J5X0l0ZW0qIF9ld2tfaGlzdG9yeV9pdGVtX25ldyhX
ZWJDb3JlOjpIaXN0b3J5SXRlbSogY29yZQogICAgIHJldHVybiBpdGVtOwogfQogCi1zdGF0aWMg
aW5saW5lIEVpbmFfTGlzdCogX2V3a19oaXN0b3J5X2l0ZW1fbGlzdF9nZXQoY29uc3QgV2ViQ29y
ZTo6SGlzdG9yeUl0ZW1WZWN0b3ImIGNvcmVfaXRlbXMpCitzdGF0aWMgaW5saW5lIEVpbmFfTGlz
dCogX2V3a19oaXN0b3J5X2l0ZW1fbGlzdF9nZXQoY29uc3QgV2ViQ29yZTo6SGlzdG9yeUl0ZW1W
ZWN0b3ImIGNvcmVJdGVtcykKIHsKICAgICBFaW5hX0xpc3QqIHJldCA9IDA7CiAgICAgdW5zaWdu
ZWQgaW50IGksIHNpemU7CiAKLSAgICBzaXplID0gY29yZV9pdGVtcy5zaXplKCk7CisgICAgc2l6
ZSA9IGNvcmVJdGVtcy5zaXplKCk7CiAgICAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgewot
ICAgICAgICBFd2tfSGlzdG9yeV9JdGVtKiBpdGVtID0gX2V3a19oaXN0b3J5X2l0ZW1fbmV3KGNv
cmVfaXRlbXNbaV0uZ2V0KCkpOworICAgICAgICBFd2tfSGlzdG9yeV9JdGVtKiBpdGVtID0gX2V3
a19oaXN0b3J5X2l0ZW1fbmV3KGNvcmVJdGVtc1tpXS5nZXQoKSk7CiAgICAgICAgIGlmIChpdGVt
KQogICAgICAgICAgICAgcmV0ID0gZWluYV9saXN0X2FwcGVuZChyZXQsIGl0ZW0pOwogICAgIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfanMuY3BwIGIvU291cmNlL1dl
YktpdC9lZmwvZXdrL2V3a19qcy5jcHAKaW5kZXggZmY4YzM4MzkwZjA5NzFlY2MwNDY2ODc4MmE5
ZTVmZjQ2YWNjOTlmNy4uNDJjZmRmZWMxYTViNDgzZjRmYTEzZjVlOGM4YzQxNWQ0ZWY2MDFjMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19qcy5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9lZmwvZXdrL2V3a19qcy5jcHAKQEAgLTgzLDExICs4MywxMSBAQCBzdGF0aWMgRWlu
YV9Cb29sIGV3a19qc192YXJpYW50X3RvX25wdmFyaWFudChjb25zdCBFd2tfSlNfVmFyaWFudCog
ZGF0YSwgTlBWYXJpYQogfQogCiAvLyBUaGVzZSBtZXRob2RzIGFyZSB1c2VkIGJ5IE5QQUksIHRo
YXRzIHRoZSByZWFzb24gdG8gdXNlIGJvb2wgaW5zdGVhZCBvZiBFaW5hX0Jvb2wuCi1zdGF0aWMg
Ym9vbCBld2tfanNfcHJvcGVydHlfaGFzKE5QT2JqZWN0KiBucF9vYmosIE5QSWRlbnRpZmllciBu
YW1lKQorc3RhdGljIGJvb2wgZXdrX2pzX3Byb3BlcnR5X2hhcyhOUE9iamVjdCogbnBPYmplY3Qs
IE5QSWRlbnRpZmllciBuYW1lKQogewotICAgIEV3a19KU19PYmplY3QqIG9iaiA9IHJlaW50ZXJw
cmV0X2Nhc3Q8RXdrX0pTX09iamVjdCo+KG5wX29iaik7CisgICAgRXdrX0pTX09iamVjdCogb2Jq
ID0gcmVpbnRlcnByZXRfY2FzdDxFd2tfSlNfT2JqZWN0Kj4obnBPYmplY3QpOwogCi0gICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKG5wX29iaiwgZmFsc2UpOworICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOX1ZBTChucE9iamVjdCwgZmFsc2UpOwogICAgIEVJTkFfTUFHSUNf
Q0hFQ0tfT1JfUkVUVVJOKG9iaiwgZmFsc2UpOwogCiAgICAgaWYgKCFfTlBOX0lkZW50aWZpZXJJ
c1N0cmluZyhuYW1lKSkgewpAQCAtMTAyLDE0ICsxMDIsMTQgQEAgc3RhdGljIGJvb2wgZXdrX2pz
X3Byb3BlcnR5X2hhcyhOUE9iamVjdCogbnBfb2JqLCBOUElkZW50aWZpZXIgbmFtZSkKICAgICBy
ZXR1cm4gZmFpbDsKIH0KIAotc3RhdGljIGJvb2wgZXdrX2pzX3Byb3BlcnR5X2dldChOUE9iamVj
dCogbnBfb2JqLCBOUElkZW50aWZpZXIgbmFtZSwgTlBWYXJpYW50KiByZXN1bHQpCitzdGF0aWMg
Ym9vbCBld2tfanNfcHJvcGVydHlfZ2V0KE5QT2JqZWN0KiBucE9iamVjdCwgTlBJZGVudGlmaWVy
IG5hbWUsIE5QVmFyaWFudCogcmVzdWx0KQogewotICAgIEV3a19KU19PYmplY3QqIG9iaiA9IHJl
aW50ZXJwcmV0X2Nhc3Q8RXdrX0pTX09iamVjdCo+KG5wX29iaik7CisgICAgRXdrX0pTX09iamVj
dCogb2JqID0gcmVpbnRlcnByZXRfY2FzdDxFd2tfSlNfT2JqZWN0Kj4obnBPYmplY3QpOwogICAg
IEV3a19KU19WYXJpYW50KiB2YWx1ZTsKICAgICBFd2tfSlNfUHJvcGVydHkqIHByb3A7CiAgICAg
Ym9vbCBmYWlsID0gZmFsc2U7CiAKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwo
bnBfb2JqLCBmYWxzZSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKG5wT2Jq
ZWN0LCBmYWxzZSk7CiAgICAgRUlOQV9NQUdJQ19DSEVDS19PUl9SRVRVUk4ob2JqLCBmYWxzZSk7
CiAKICAgICBpZiAoIV9OUE5fSWRlbnRpZmllcklzU3RyaW5nKG5hbWUpKSB7CkBAIC0xNDUsMTQg
KzE0NSwxNCBAQCBzdGF0aWMgYm9vbCBld2tfanNfcHJvcGVydHlfZ2V0KE5QT2JqZWN0KiBucF9v
YmosIE5QSWRlbnRpZmllciBuYW1lLCBOUFZhcmlhbnQqCiAgICAgcmV0dXJuIGZhaWw7CiB9CiAK
LXN0YXRpYyBib29sIGV3a19qc19wcm9wZXJ0eV9zZXQoTlBPYmplY3QqIG5wX29iaiwgTlBJZGVu
dGlmaWVyIG5hbWUsIGNvbnN0IE5QVmFyaWFudCogbnBfdmFsdWUpCitzdGF0aWMgYm9vbCBld2tf
anNfcHJvcGVydHlfc2V0KE5QT2JqZWN0KiBucE9iamVjdCwgTlBJZGVudGlmaWVyIG5hbWUsIGNv
bnN0IE5QVmFyaWFudCogbnBWYWx1ZSkKIHsKLSAgICBFd2tfSlNfT2JqZWN0KiBvYmogPSByZWlu
dGVycHJldF9jYXN0PEV3a19KU19PYmplY3QqPihucF9vYmopOworICAgIEV3a19KU19PYmplY3Qq
IG9iaiA9IHJlaW50ZXJwcmV0X2Nhc3Q8RXdrX0pTX09iamVjdCo+KG5wT2JqZWN0KTsKICAgICBF
d2tfSlNfVmFyaWFudCogdmFsdWU7CiAgICAgRXdrX0pTX1Byb3BlcnR5KiBwcm9wOwogICAgIGJv
b2wgZmFpbCA9IGZhbHNlOwogCi0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKG5w
X29iaiwgZmFsc2UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChucE9iaiwg
ZmFsc2UpOwogICAgIEVJTkFfTUFHSUNfQ0hFQ0tfT1JfUkVUVVJOKG9iaiwgZmFsc2UpOwogCiAg
ICAgaWYgKCFfTlBOX0lkZW50aWZpZXJJc1N0cmluZyhuYW1lKSkgewpAQCAtMTY2LDcgKzE2Niw3
IEBAIHN0YXRpYyBib29sIGV3a19qc19wcm9wZXJ0eV9zZXQoTlBPYmplY3QqIG5wX29iaiwgTlBJ
ZGVudGlmaWVyIG5hbWUsIGNvbnN0IE5QVmFyCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CiAKLSAgICBld2tfanNfbnB2YXJpYW50X3RvX3ZhcmlhbnQodmFsdWUsIG5wX3ZhbHVlKTsKKyAg
ICBld2tfanNfbnB2YXJpYW50X3RvX3ZhcmlhbnQodmFsdWUsIG5wVmFsdWUpOwogICAgIGNoYXIq
IHByb3BfbmFtZSA9IF9OUE5fVVRGOEZyb21JZGVudGlmaWVyKG5hbWUpOwogICAgIHByb3AgPSBz
dGF0aWNfY2FzdDxFd2tfSlNfUHJvcGVydHkqPihlaW5hX2hhc2hfZmluZChvYmotPmNscy0+cHJv
cGVydGllcywgcHJvcF9uYW1lKSk7CiAgICAgaWYgKHByb3AgJiYgcHJvcC0+c2V0KQpAQCAtMTgz
LDEzICsxODMsMTMgQEAgc3RhdGljIGJvb2wgZXdrX2pzX3Byb3BlcnR5X3NldChOUE9iamVjdCog
bnBfb2JqLCBOUElkZW50aWZpZXIgbmFtZSwgY29uc3QgTlBWYXIKICAgICByZXR1cm4gZmFpbDsK
IH0KIAotc3RhdGljIGJvb2wgZXdrX2pzX3Byb3BlcnR5X3JlbW92ZShOUE9iamVjdCogbnBfb2Jq
LCBOUElkZW50aWZpZXIgbmFtZSkKK3N0YXRpYyBib29sIGV3a19qc19wcm9wZXJ0eV9yZW1vdmUo
TlBPYmplY3QqIG5wT2JqZWN0LCBOUElkZW50aWZpZXIgbmFtZSkKIHsKLSAgICBFd2tfSlNfT2Jq
ZWN0KiBvYmogPSByZWludGVycHJldF9jYXN0PEV3a19KU19PYmplY3QqPihucF9vYmopOworICAg
IEV3a19KU19PYmplY3QqIG9iaiA9IHJlaW50ZXJwcmV0X2Nhc3Q8RXdrX0pTX09iamVjdCo+KG5w
T2JqZWN0KTsKICAgICBFd2tfSlNfUHJvcGVydHkqIHByb3A7CiAgICAgYm9vbCBmYWlsID0gZmFs
c2U7CiAKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwobnBfb2JqLCBmYWxzZSk7
CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKG5wT2JqZWN0LCBmYWxzZSk7CiAg
ICAgRUlOQV9NQUdJQ19DSEVDS19PUl9SRVRVUk4ob2JqLCBmYWxzZSk7CiAKICAgICBpZiAoIV9O
UE5fSWRlbnRpZmllcklzU3RyaW5nKG5hbWUpKSB7CkBAIC0yMTAsMTQgKzIxMCwxNCBAQCBzdGF0
aWMgYm9vbCBld2tfanNfcHJvcGVydHlfcmVtb3ZlKE5QT2JqZWN0KiBucF9vYmosIE5QSWRlbnRp
ZmllciBuYW1lKQogICAgIHJldHVybiBmYWlsOwogfQogCi1zdGF0aWMgYm9vbCBld2tfanNfcHJv
cGVydGllc19lbnVtZXJhdGUoTlBPYmplY3QqIG5wX29iaiwgTlBJZGVudGlmaWVyKiogdmFsdWUs
IHVpbnQzMl90KiBjb3VudCkKK3N0YXRpYyBib29sIGV3a19qc19wcm9wZXJ0aWVzX2VudW1lcmF0
ZShOUE9iamVjdCogbnBPYmplY3QsIE5QSWRlbnRpZmllcioqIHZhbHVlLCB1aW50MzJfdCogY291
bnQpCiB7Ci0gICAgRXdrX0pTX09iamVjdCogb2JqID0gcmVpbnRlcnByZXRfY2FzdDxFd2tfSlNf
T2JqZWN0Kj4obnBfb2JqKTsKKyAgICBFd2tfSlNfT2JqZWN0KiBvYmogPSByZWludGVycHJldF9j
YXN0PEV3a19KU19PYmplY3QqPihucE9iamVjdCk7CiAgICAgRWluYV9JdGVyYXRvciogaXQ7CiAg
ICAgY2hhcioga2V5OwogICAgIGludCBpID0gMDsKIAotICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOX1ZBTChucF9vYmosIGZhbHNlKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
Tl9WQUwobnBPYmplY3QsIGZhbHNlKTsKICAgICBFSU5BX01BR0lDX0NIRUNLX09SX1JFVFVSTihv
YmosIGZhbHNlKTsKIAogICAgICpjb3VudCA9IGVpbmFfaGFzaF9wb3B1bGF0aW9uKG9iai0+cHJv
cGVydGllcyk7CkBAIC0yMzUsMTEgKzIzNSwxMSBAQCBzdGF0aWMgYm9vbCBld2tfanNfcHJvcGVy
dGllc19lbnVtZXJhdGUoTlBPYmplY3QqIG5wX29iaiwgTlBJZGVudGlmaWVyKiogdmFsdWUsCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBib29sIGV3a19qc19tZXRob2RfaGFzKE5QT2Jq
ZWN0KiBucF9vYmosIE5QSWRlbnRpZmllciBuYW1lKQorc3RhdGljIGJvb2wgZXdrX2pzX21ldGhv
ZF9oYXMoTlBPYmplY3QqIG5wT2JqZWN0LCBOUElkZW50aWZpZXIgbmFtZSkKIHsKLSAgICBFd2tf
SlNfT2JqZWN0KiBvYmogPSByZWludGVycHJldF9jYXN0PEV3a19KU19PYmplY3QqPihucF9vYmop
OworICAgIEV3a19KU19PYmplY3QqIG9iaiA9IHJlaW50ZXJwcmV0X2Nhc3Q8RXdrX0pTX09iamVj
dCo+KG5wT2JqZWN0KTsKIAotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChucF9v
YmosIGZhbHNlKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwobnBPYmplY3Qs
IGZhbHNlKTsKICAgICBFSU5BX01BR0lDX0NIRUNLX09SX1JFVFVSTihvYmosIGZhbHNlKTsKIAog
ICAgIGlmICghX05QTl9JZGVudGlmaWVySXNTdHJpbmcobmFtZSkpIHsKQEAgLTI0OSwxNCArMjQ5
LDE0IEBAIHN0YXRpYyBib29sIGV3a19qc19tZXRob2RfaGFzKE5QT2JqZWN0KiBucF9vYmosIE5Q
SWRlbnRpZmllciBuYW1lKQogICAgIHJldHVybiBlaW5hX2hhc2hfZmluZChvYmotPmNscy0+bWV0
aG9kcywgbmFtZSk7IC8vIFJldHVybnMgcG9pbnRlciBpZiBmb3VuZCh0cnVlKSwgMChmYWxzZSkg
b3RoZXJ3aXNlLgogfQogCi1zdGF0aWMgYm9vbCBld2tfanNfbWV0aG9kX2ludm9rZShOUE9iamVj
dCogbnBfb2JqLCBOUElkZW50aWZpZXIgbmFtZSwgY29uc3QgTlBWYXJpYW50KiBucF9hcmdzLCB1
aW50MzJfdCBucF9hcmdfY291bnQsIE5QVmFyaWFudCogcmVzdWx0KQorc3RhdGljIGJvb2wgZXdr
X2pzX21ldGhvZF9pbnZva2UoTlBPYmplY3QqIG5wT2JqZWN0LCBOUElkZW50aWZpZXIgbmFtZSwg
Y29uc3QgTlBWYXJpYW50KiBucEFyZ3MsIHVpbnQzMl90IG5wQXJnQ291bnQsIE5QVmFyaWFudCog
cmVzdWx0KQogewotICAgIEV3a19KU19PYmplY3QqIG9iaiA9IHJlaW50ZXJwcmV0X2Nhc3Q8RXdr
X0pTX09iamVjdCo+KG5wX29iaik7CisgICAgRXdrX0pTX09iamVjdCogb2JqID0gcmVpbnRlcnBy
ZXRfY2FzdDxFd2tfSlNfT2JqZWN0Kj4obnBPYmplY3QpOwogICAgIEV3a19KU19NZXRob2QqIG1l
dGhvZDsKICAgICBFd2tfSlNfVmFyaWFudCogYXJnczsKICAgICBFd2tfSlNfVmFyaWFudCogcmV0
X3ZhbDsKIAotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChucF9vYmosIGZhbHNl
KTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwobnBPYmplY3QsIGZhbHNlKTsK
ICAgICBFSU5BX01BR0lDX0NIRUNLX09SX1JFVFVSTihvYmosIGZhbHNlKTsKIAogICAgIGlmICgh
X05QTl9JZGVudGlmaWVySXNTdHJpbmcobmFtZSkpIHsKQEAgLTI2OCwxNSArMjY4LDE1IEBAIHN0
YXRpYyBib29sIGV3a19qc19tZXRob2RfaW52b2tlKE5QT2JqZWN0KiBucF9vYmosIE5QSWRlbnRp
ZmllciBuYW1lLCBjb25zdCBOUFZhCiAgICAgaWYgKCFtZXRob2QpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIGFyZ3MgPSBzdGF0aWNfY2FzdDxFd2tfSlNfVmFyaWFudCo+KG1hbGxvYyhz
aXplb2YoRXdrX0pTX1ZhcmlhbnQpICAqbnBfYXJnX2NvdW50KSk7CisgICAgYXJncyA9IHN0YXRp
Y19jYXN0PEV3a19KU19WYXJpYW50Kj4obWFsbG9jKHNpemVvZihFd2tfSlNfVmFyaWFudCkgICpu
cEFyZ0NvdW50KSk7CiAgICAgaWYgKCFhcmdzKSB7CiAgICAgICAgIEVSUigiQ291bGQgbm90IGFs
bG9jYXRlIG1lbW9yeSBmb3IgZXdrX2pzX3ZhcmlhbnQiKTsKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KIAotICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBucF9hcmdfY291bnQ7IGkr
KykKLSAgICAgICAgZXdrX2pzX25wdmFyaWFudF90b192YXJpYW50KCZhcmdzW2ldLCAmbnBfYXJn
c1tpXSk7Ci0gICAgcmV0X3ZhbCA9IG1ldGhvZC0+aW52b2tlKG9iaiwgYXJncywgbnBfYXJnX2Nv
dW50KTsKKyAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnBBcmdDb3VudDsgaSsrKQorICAg
ICAgICBld2tfanNfbnB2YXJpYW50X3RvX3ZhcmlhbnQoJmFyZ3NbaV0sICZucEFyZ3NbaV0pOwor
ICAgIHJldF92YWwgPSBtZXRob2QtPmludm9rZShvYmosIGFyZ3MsIG5wQXJnQ291bnQpOwogICAg
IGV3a19qc192YXJpYW50X3RvX25wdmFyaWFudChyZXRfdmFsLCByZXN1bHQpOwogCiAgICAgZXdr
X2pzX3ZhcmlhbnRfZnJlZShyZXRfdmFsKTsKQEAgLTI4NCwzMCArMjg0LDMwIEBAIHN0YXRpYyBi
b29sIGV3a19qc19tZXRob2RfaW52b2tlKE5QT2JqZWN0KiBucF9vYmosIE5QSWRlbnRpZmllciBu
YW1lLCBjb25zdCBOUFZhCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBFaW5hX0Jvb2wg
ZXdrX2pzX25wb2JqZWN0X3Byb3BlcnR5X2dldChFd2tfSlNfT2JqZWN0KiBvYmosIGNvbnN0IGNo
YXIqIG5hbWUsIEV3a19KU19WYXJpYW50KiB2YWx1ZSkKK3N0YXRpYyBFaW5hX0Jvb2wgZXdrX2pz
X25wb2JqZWN0X3Byb3BlcnR5X2dldChFd2tfSlNfT2JqZWN0KiBqc09iamVjdCwgY29uc3QgY2hh
ciogbmFtZSwgRXdrX0pTX1ZhcmlhbnQqIHZhbHVlKQogewogICAgIE5QSWRlbnRpZmllciBpZCA9
IF9OUE5fR2V0U3RyaW5nSWRlbnRpZmllcihuYW1lKTsKICAgICBOUFZhcmlhbnQgdmFyOwotICAg
IGJvb2wgZmFpbCA9IF9OUE5fR2V0UHJvcGVydHkoMCwgcmVpbnRlcnByZXRfY2FzdDxOUE9iamVj
dCo+KG9iaiksIGlkLCAmdmFyKTsKKyAgICBib29sIGZhaWwgPSBfTlBOX0dldFByb3BlcnR5KDAs
IHJlaW50ZXJwcmV0X2Nhc3Q8TlBPYmplY3QqPihqc09iamVjdCksIGlkLCAmdmFyKTsKICAgICBp
ZiAoIWZhaWwpCiAgICAgICAgIGZhaWwgPSBld2tfanNfbnB2YXJpYW50X3RvX3ZhcmlhbnQodmFs
dWUsICZ2YXIpOwogICAgIHJldHVybiBmYWlsOwogfQogCi1zdGF0aWMgRWluYV9Cb29sIGV3a19q
c19ucG9iamVjdF9wcm9wZXJ0eV9zZXQoRXdrX0pTX09iamVjdCogb2JqLCBjb25zdCBjaGFyKiBu
YW1lLCBjb25zdCBFd2tfSlNfVmFyaWFudCogdmFsdWUpCitzdGF0aWMgRWluYV9Cb29sIGV3a19q
c19ucG9iamVjdF9wcm9wZXJ0eV9zZXQoRXdrX0pTX09iamVjdCoganNPYmplY3QsIGNvbnN0IGNo
YXIqIG5hbWUsIGNvbnN0IEV3a19KU19WYXJpYW50KiB2YWx1ZSkKIHsKICAgICBOUElkZW50aWZp
ZXIgaWQgPSBfTlBOX0dldFN0cmluZ0lkZW50aWZpZXIobmFtZSk7CiAgICAgTlBWYXJpYW50IHZh
cjsKICAgICBib29sIGZhaWwgPSBld2tfanNfdmFyaWFudF90b19ucHZhcmlhbnQodmFsdWUsICZ2
YXIpOwogICAgIGlmIChmYWlsKQotICAgICAgICBmYWlsID0gX05QTl9TZXRQcm9wZXJ0eSgwLCBy
ZWludGVycHJldF9jYXN0PE5QT2JqZWN0Kj4ob2JqKSwgaWQsICZ2YXIpOworICAgICAgICBmYWls
ID0gX05QTl9TZXRQcm9wZXJ0eSgwLCByZWludGVycHJldF9jYXN0PE5QT2JqZWN0Kj4oanNPYmpl
Y3QpLCBpZCwgJnZhcik7CiAgICAgcmV0dXJuIGZhaWw7CiB9CiAKLXN0YXRpYyBFaW5hX0Jvb2wg
ZXdrX2pzX25wb2JqZWN0X3Byb3BlcnR5X2RlbChFd2tfSlNfT2JqZWN0KiBvYmosIGNvbnN0IGNo
YXIqIG5hbWUpCitzdGF0aWMgRWluYV9Cb29sIGV3a19qc19ucG9iamVjdF9wcm9wZXJ0eV9kZWwo
RXdrX0pTX09iamVjdCoganNPYmplY3QsIGNvbnN0IGNoYXIqIG5hbWUpCiB7CiAgICAgTlBJZGVu
dGlmaWVyIGlkID0gX05QTl9HZXRTdHJpbmdJZGVudGlmaWVyKG5hbWUpOwotICAgIHJldHVybiBf
TlBOX1JlbW92ZVByb3BlcnR5KDAsIHJlaW50ZXJwcmV0X2Nhc3Q8TlBPYmplY3QqPihvYmopLCBp
ZCk7CisgICAgcmV0dXJuIF9OUE5fUmVtb3ZlUHJvcGVydHkoMCwgcmVpbnRlcnByZXRfY2FzdDxO
UE9iamVjdCo+KGpzT2JqZWN0KSwgaWQpOwogfQogCiBzdGF0aWMgdm9pZCBld2tfanNfcHJvcGVy
dHlfZnJlZShFd2tfSlNfUHJvcGVydHkqIHByb3ApCkBAIC0zMjcsMTEgKzMyNywxMSBAQCBzdGF0
aWMgdm9pZCBld2tfanNfcHJvcGVydHlfZnJlZShFd2tfSlNfUHJvcGVydHkqIHByb3ApCiAgKgog
ICogQHJldHVybiBUaGUgRXdrX0pTX0NsYXNzIGNyZWF0ZWQuCiAgKi8KLUV3a19KU19DbGFzcyog
ZXdrX2pzX2NsYXNzX25ldyhjb25zdCBFd2tfSlNfQ2xhc3NfTWV0YSogbWV0YSkKK0V3a19KU19D
bGFzcyogZXdrX2pzX2NsYXNzX25ldyhjb25zdCBFd2tfSlNfQ2xhc3NfTWV0YSoganNNZXRhQ2xh
c3MpCiB7CiAgICAgRXdrX0pTX0NsYXNzKiBjbHM7CiAKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTl9WQUwobWV0YSwgMCk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFM
KGpzTWV0YUNsYXNzLCAwKTsKIAogICAgIGNscyA9IHN0YXRpY19jYXN0PEV3a19KU19DbGFzcyo+
KG1hbGxvYyhzaXplb2YoRXdrX0pTX0NsYXNzKSkpOwogICAgIGlmICghY2xzKSB7CkBAIC0zMzks
NyArMzM5LDcgQEAgRXdrX0pTX0NsYXNzKiBld2tfanNfY2xhc3NfbmV3KGNvbnN0IEV3a19KU19D
bGFzc19NZXRhKiBtZXRhKQogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBjbHMtPm1l
dGEgPSBtZXRhOworICAgIGNscy0+bWV0YSA9IGpzTWV0YUNsYXNzOwogICAgIGNscy0+ZGVmYXVs
dF9wcm9wID0gbWV0YS0+ZGVmYXVsdF9wcm9wOwogCiAgICAgLy8gRG9uJ3QgZnJlZSBtZXRob2Rz
IHNpbmNlIHRoZXkgcG9pbnQgdG8gbWV0YSBjbGFzcyBtZXRob2RzKHdpbGwgYmUgZnJlZWQgd2hl
biBtZXRhIGNsYXNzIGlzIGZyZWVkKS4KQEAgLTM2NCwxMiArMzY0LDEyIEBAIEV3a19KU19DbGFz
cyogZXdrX2pzX2NsYXNzX25ldyhjb25zdCBFd2tfSlNfQ2xhc3NfTWV0YSogbWV0YSkKICAqCiAg
KiBAcGFyYW0gY2xzIEBhIEV3a19KU19DbGFzcyB0byBiZSByZWxlYXNlZC4KICAqLwotdm9pZCBl
d2tfanNfY2xhc3NfZnJlZShFd2tfSlNfQ2xhc3MqIGNscykKK3ZvaWQgZXdrX2pzX2NsYXNzX2Zy
ZWUoRXdrX0pTX0NsYXNzKiBqc0NsYXNzKQogewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOKGNscyk7Ci0gICAgZWluYV9oYXNoX2ZyZWUoY2xzLT5tZXRob2RzKTsKLSAgICBlaW5hX2hh
c2hfZnJlZShjbHMtPnByb3BlcnRpZXMpOwotICAgIGZyZWUoY2xzKTsKKyAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTihqc0NsYXNzKTsKKyAgICBlaW5hX2hhc2hfZnJlZShqc0NsYXNzLT5t
ZXRob2RzKTsKKyAgICBlaW5hX2hhc2hfZnJlZShqc0NsYXNzLT5wcm9wZXJ0aWVzKTsKKyAgICBm
cmVlKGpzQ2xhc3MpOwogfQogCiBzdGF0aWMgTlBDbGFzcyBFV0tfTlBDTEFTUyA9IHsKQEAgLTM4
OCw3ICszODgsNyBAQCBzdGF0aWMgTlBDbGFzcyBFV0tfTlBDTEFTUyA9IHsKICAgICAwIC8vIE5Q
Q29uc3RydWN0RnVuY3Rpb24KIH07CiAKLXN0YXRpYyBFd2tfSlNfT2JqZWN0KiBld2tfanNfbnBv
YmplY3RfdG9fb2JqZWN0KE5QT2JqZWN0KiBucF9vYmopCitzdGF0aWMgRXdrX0pTX09iamVjdCog
ZXdrX2pzX25wb2JqZWN0X3RvX29iamVjdChOUE9iamVjdCogbnBPYmplY3QpCiB7CiAgICAgTlBJ
ZGVudGlmaWVyKiB2YWx1ZXM7CiAgICAgdWludDMyX3QgbnBfcHJvcHNfY291bnQ7CkBAIC0zOTgs
OCArMzk4LDggQEAgc3RhdGljIEV3a19KU19PYmplY3QqIGV3a19qc19ucG9iamVjdF90b19vYmpl
Y3QoTlBPYmplY3QqIG5wX29iaikKICAgICBFd2tfSlNfUHJvcGVydHkqIHByb3A7CiAgICAgSmF2
YVNjcmlwdE9iamVjdCoganNvOwogCi0gICAgaWYgKEVJTkFfTUFHSUNfQ0hFQ0socmVpbnRlcnBy
ZXRfY2FzdDxFd2tfSlNfT2JqZWN0Kj4obnBfb2JqKSwgRVdLX0pTX09CSkVDVF9NQUdJQykpCi0g
ICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEV3a19KU19PYmplY3QqPihucF9vYmopOwor
ICAgIGlmIChFSU5BX01BR0lDX0NIRUNLKHJlaW50ZXJwcmV0X2Nhc3Q8RXdrX0pTX09iamVjdCo+
KG5wT2JqZWN0KSwgRVdLX0pTX09CSkVDVF9NQUdJQykpCisgICAgICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PEV3a19KU19PYmplY3QqPihucE9iamVjdCk7CiAKICAgICBpZiAoIV9OUE5fRW51
bWVyYXRlKDAsIG5wX29iaiwgJnZhbHVlcywgJm5wX3Byb3BzX2NvdW50KSkKICAgICAgICAgcmV0
dXJuIDA7CkBAIC00NDgsNyArNDQ4LDcgQEAgc3RhdGljIEV3a19KU19PYmplY3QqIGV3a19qc19u
cG9iamVjdF90b19vYmplY3QoTlBPYmplY3QqIG5wX29iaikKICAgICBvYmotPmNscyA9IGNsczsK
ICAgICBvYmotPnZpZXcgPSAwOwogCi0gICAganNvID0gcmVpbnRlcnByZXRfY2FzdDxKYXZhU2Ny
aXB0T2JqZWN0Kj4obnBfb2JqKTsKKyAgICBqc28gPSByZWludGVycHJldF9jYXN0PEphdmFTY3Jp
cHRPYmplY3QqPihucE9iamVjdCk7CiAgICAgaWYgKCFzdHJjbXAoIkFycmF5IiwganNvLT5pbXAt
PmNsYXNzTmFtZSgpLmFzY2lpKCkuZGF0YSgpKSkKICAgICAgICAgb2JqLT50eXBlID0gRVdLX0pT
X09CSkVDVF9BUlJBWTsKICAgICBlbHNlIGlmICghc3RyY21wKCJGdW5jdGlvbiIsIGpzby0+aW1w
LT5jbGFzc05hbWUoKS5hc2NpaSgpLmRhdGEoKSkpCkBAIC00NjksNyArNDY5LDcgQEAgc3RhdGlj
IEV3a19KU19PYmplY3QqIGV3a19qc19ucG9iamVjdF90b19vYmplY3QoTlBPYmplY3QqIG5wX29i
aikKICAgICB9CiAKICAgICBlaW5hX2l0ZXJhdG9yX2ZyZWUoaXQpOwotICAgIG9iai0+YmFzZSA9
ICpyZWludGVycHJldF9jYXN0PEphdmFTY3JpcHRPYmplY3QqPihucF9vYmopOworICAgIG9iai0+
YmFzZSA9ICpyZWludGVycHJldF9jYXN0PEphdmFTY3JpcHRPYmplY3QqPihucE9iamVjdCk7CiAK
ICAgICByZXR1cm4gb2JqOwogCkBAIC01MjUsNyArNTI1LDcgQEAgc3RhdGljIEVpbmFfQm9vbCBl
d2tfanNfbnB2YXJpYW50X3RvX3ZhcmlhbnQoRXdrX0pTX1ZhcmlhbnQqIGRhdGEsIGNvbnN0IE5Q
VmFyaWEKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi1Fd2tfSlNfT2JqZWN0KiBld2tfanNf
b2JqZWN0X25ldyhjb25zdCBFd2tfSlNfQ2xhc3NfTWV0YSogbWV0YV9jbHMpCitFd2tfSlNfT2Jq
ZWN0KiBld2tfanNfb2JqZWN0X25ldyhjb25zdCBFd2tfSlNfQ2xhc3NfTWV0YSoganNNZXRhQ2xh
c3MpCiB7CiAgICAgRXdrX0pTX09iamVjdCogb2JqOwogCkBAIC01MzgsNyArNTM4LDcgQEAgRXdr
X0pTX09iamVjdCogZXdrX2pzX29iamVjdF9uZXcoY29uc3QgRXdrX0pTX0NsYXNzX01ldGEqIG1l
dGFfY2xzKQogICAgIH0KIAogICAgIEVJTkFfTUFHSUNfU0VUKG9iaiwgRVdLX0pTX09CSkVDVF9N
QUdJQyk7Ci0gICAgb2JqLT5jbHMgPSBld2tfanNfY2xhc3NfbmV3KG1ldGFfY2xzKTsKKyAgICBv
YmotPmNscyA9IGV3a19qc19jbGFzc19uZXcoanNNZXRhQ2xhc3MpOwogICAgIG9iai0+dmlldyA9
IDA7CiAgICAgb2JqLT5uYW1lID0gMDsKICAgICBvYmotPnR5cGUgPSBFV0tfSlNfT0JKRUNUX09C
SkVDVDsKQEAgLTU5NCw0NyArNTk0LDQ3IEBAIGVycm9yOgogICAgIHJldHVybiAwOwogfQogCi12
b2lkIGV3a19qc19vYmplY3RfZnJlZShFd2tfSlNfT2JqZWN0KiBvYmopCit2b2lkIGV3a19qc19v
YmplY3RfZnJlZShFd2tfSlNfT2JqZWN0KiBqc09iamVjdCkKIHsKLSAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTihvYmopOwotICAgIEVJTkFfTUFHSUNfQ0hFQ0tfT1JfUkVUVVJOKG9iaik7
Ci0gICAgRWluYV9Cb29sIHNjcmlwdF9vYmogPSAhb2JqLT5jbHMtPm1ldGE7CisgICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk4oanNPYmplY3QpOworICAgIEVJTkFfTUFHSUNfQ0hFQ0tfT1Jf
UkVUVVJOKGpzT2JqZWN0KTsKKyAgICBFaW5hX0Jvb2wgc2NyaXB0X29iaiA9ICFqc09iamVjdC0+
Y2xzLT5tZXRhOwogCi0gICAgZWluYV9oYXNoX2ZyZWUob2JqLT5wcm9wZXJ0aWVzKTsKLSAgICBl
aW5hX3N0cmluZ3NoYXJlX2RlbChvYmotPm5hbWUpOworICAgIGVpbmFfaGFzaF9mcmVlKGpzT2Jq
ZWN0LT5wcm9wZXJ0aWVzKTsKKyAgICBlaW5hX3N0cmluZ3NoYXJlX2RlbChqc09iamVjdC0+bmFt
ZSk7CiAKLSAgICBld2tfanNfY2xhc3NfZnJlZShjb25zdF9jYXN0PEV3a19KU19DbGFzcyo+KG9i
ai0+Y2xzKSk7CisgICAgZXdrX2pzX2NsYXNzX2ZyZWUoY29uc3RfY2FzdDxFd2tfSlNfQ2xhc3Mq
Pihqc09iamVjdC0+Y2xzKSk7CiAKLSAgICBFSU5BX01BR0lDX1NFVChvYmosIEVJTkFfTUFHSUNf
Tk9ORSk7CisgICAgRUlOQV9NQUdJQ19TRVQoanNPYmplY3QsIEVJTkFfTUFHSUNfTk9ORSk7CiAK
ICAgICBpZiAoc2NyaXB0X29iaikKLSAgICAgICAgZnJlZShvYmopOworICAgICAgICBmcmVlKGpz
T2JqZWN0KTsKIH0KIAotRWluYV9IYXNoKiBld2tfanNfb2JqZWN0X3Byb3BlcnRpZXNfZ2V0KGNv
bnN0IEV3a19KU19PYmplY3QqIG9iaikKK0VpbmFfSGFzaCogZXdrX2pzX29iamVjdF9wcm9wZXJ0
aWVzX2dldChjb25zdCBFd2tfSlNfT2JqZWN0KiBqc09iamVjdCkKIHsKLSAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTl9WQUwob2JqLCAwKTsKLSAgICBFSU5BX01BR0lDX0NIRUNLX09SX1JF
VFVSTihvYmosIDApOwotICAgIHJldHVybiBvYmotPnByb3BlcnRpZXM7CisgICAgRUlOQV9TQUZF
VFlfT05fTlVMTF9SRVRVUk5fVkFMKGpzT2JqZWN0LCAwKTsKKyAgICBFSU5BX01BR0lDX0NIRUNL
X09SX1JFVFVSTihqc09iamVjdCwgMCk7CisgICAgcmV0dXJuIGpzT2JqZWN0LT5wcm9wZXJ0aWVz
OwogfQogCi1jb25zdCBjaGFyKiBld2tfanNfb2JqZWN0X25hbWVfZ2V0KGNvbnN0IEV3a19KU19P
YmplY3QqIG9iaikKK2NvbnN0IGNoYXIqIGV3a19qc19vYmplY3RfbmFtZV9nZXQoY29uc3QgRXdr
X0pTX09iamVjdCoganNPYmplY3QpCiB7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5f
VkFMKG9iaiwgMCk7Ci0gICAgRUlOQV9NQUdJQ19DSEVDS19PUl9SRVRVUk4ob2JqLCAwKTsKLSAg
ICByZXR1cm4gb2JqLT5uYW1lOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChq
c09iamVjdCwgMCk7CisgICAgRUlOQV9NQUdJQ19DSEVDS19PUl9SRVRVUk4oanNPYmplY3QsIDAp
OworICAgIHJldHVybiBqc09iamVjdC0+bmFtZTsKIH0KIAotRWluYV9Cb29sIGV3a19qc19vYmpl
Y3RfaW52b2tlKEV3a19KU19PYmplY3QqIG9iaiwgRXdrX0pTX1ZhcmlhbnQqIGFyZ3MsIGludCBh
cmdfY291bnQsIEV3a19KU19WYXJpYW50KiByZXN1bHQpCitFaW5hX0Jvb2wgZXdrX2pzX29iamVj
dF9pbnZva2UoRXdrX0pTX09iamVjdCoganNPYmplY3QsIEV3a19KU19WYXJpYW50KiBhcmdzLCBp
bnQgYXJnQ291bnQsIEV3a19KU19WYXJpYW50KiByZXN1bHQpCiB7CiAgICAgTlBWYXJpYW50KiBu
cF9hcmdzOwogICAgIE5QVmFyaWFudCBucF9yZXN1bHQ7CiAgICAgYm9vbCBmYWlsID0gRUlOQV9G
QUxTRTsKIAotICAgIEVJTkFfTUFHSUNfQ0hFQ0tfT1JfUkVUVVJOKG9iaiwgRUlOQV9GQUxTRSk7
Ci0gICAgaWYgKGV3a19qc19vYmplY3RfdHlwZV9nZXQob2JqKSAhPSBFV0tfSlNfT0JKRUNUX0ZV
TkNUSU9OKQorICAgIEVJTkFfTUFHSUNfQ0hFQ0tfT1JfUkVUVVJOKGpzT2JqZWN0LCBFSU5BX0ZB
TFNFKTsKKyAgICBpZiAoZXdrX2pzX29iamVjdF90eXBlX2dldChqc09iamVjdCkgIT0gRVdLX0pT
X09CSkVDVF9GVU5DVElPTikKICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7Ci0gICAgaWYgKGFy
Z19jb3VudCkKKyAgICBpZiAoYXJnQ291bnQpCiAgICAgICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOX1ZBTChhcmdzLCBFSU5BX0ZBTFNFKTsKIAogICAgIG5wX2FyZ3MgPSBzdGF0aWNfY2Fz
dDxOUFZhcmlhbnQqPihtYWxsb2Moc2l6ZW9mKE5QVmFyaWFudCkgICphcmdfY291bnQpKTsKQEAg
LTY0MywxMSArNjQzLDExIEBAIEVpbmFfQm9vbCBld2tfanNfb2JqZWN0X2ludm9rZShFd2tfSlNf
T2JqZWN0KiBvYmosIEV3a19KU19WYXJpYW50KiBhcmdzLCBpbnQgYXJnCiAgICAgICAgIHJldHVy
biBFSU5BX0ZBTFNFOwogICAgIH0KIAotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJnX2NvdW50
OyBpKyspCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcmdDb3VudDsgaSsrKQogICAgICAgICBp
ZiAoIWV3a19qc192YXJpYW50X3RvX25wdmFyaWFudCgmYXJnc1tpXSwgJm5wX2FyZ3NbaV0pKQog
ICAgICAgICAgICAgZ290byBlbmQ7CiAKLSAgICBpZiAoIShmYWlsID0gX05QTl9JbnZva2VEZWZh
dWx0KDAsIHJlaW50ZXJwcmV0X2Nhc3Q8TlBPYmplY3QqPihvYmopLCBucF9hcmdzLCBhcmdfY291
bnQsICZucF9yZXN1bHQpKSkKKyAgICBpZiAoIShmYWlsID0gX05QTl9JbnZva2VEZWZhdWx0KDAs
IHJlaW50ZXJwcmV0X2Nhc3Q8TlBPYmplY3QqPihqc09iamVjdCksIG5wX2FyZ3MsIGFyZ0NvdW50
LCAmbnBfcmVzdWx0KSkpCiAgICAgICAgIGdvdG8gZW5kOwogICAgIGlmIChyZXN1bHQpCiAgICAg
ICAgIGZhaWwgPSBld2tfanNfbnB2YXJpYW50X3RvX3ZhcmlhbnQocmVzdWx0LCAmbnBfcmVzdWx0
KTsKQEAgLTY1Nyw4NCArNjU3LDg0IEBAIGVuZDoKICAgICByZXR1cm4gZmFpbDsKIH0KIAotRXdr
X0pTX09iamVjdF9UeXBlIGV3a19qc19vYmplY3RfdHlwZV9nZXQoRXdrX0pTX09iamVjdCogb2Jq
KQorRXdrX0pTX09iamVjdF9UeXBlIGV3a19qc19vYmplY3RfdHlwZV9nZXQoRXdrX0pTX09iamVj
dCoganNPYmplY3QpCiB7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKG9iaiwg
RVdLX0pTX09CSkVDVF9PQkpFQ1QpOwotICAgIEVJTkFfTUFHSUNfQ0hFQ0tfT1JfUkVUVVJOKG9i
aiwgRVdLX0pTX09CSkVDVF9PQkpFQ1QpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJO
X1ZBTChqc09iamVjdCwgRVdLX0pTX09CSkVDVF9PQkpFQ1QpOworICAgIEVJTkFfTUFHSUNfQ0hF
Q0tfT1JfUkVUVVJOKGpzT29iamVjdCwgRVdLX0pTX09CSkVDVF9PQkpFQ1QpOwogCiAgICAgcmV0
dXJuIG9iai0+dHlwZTsKIH0KIAotdm9pZCBld2tfanNfb2JqZWN0X3R5cGVfc2V0KEV3a19KU19P
YmplY3QqIG9iaiwgRXdrX0pTX09iamVjdF9UeXBlIHR5cGUpCit2b2lkIGV3a19qc19vYmplY3Rf
dHlwZV9zZXQoRXdrX0pTX09iamVjdCoganNPYmplY3QsIEV3a19KU19PYmplY3RfVHlwZSB0eXBl
KQogewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKG9iaik7Ci0gICAgRUlOQV9NQUdJ
Q19DSEVDS19PUl9SRVRVUk4ob2JqKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihq
c09iamVjdCk7CisgICAgRUlOQV9NQUdJQ19DSEVDS19PUl9SRVRVUk4oanNPYmplY3QpOwogCi0g
ICAgb2JqLT50eXBlID0gdHlwZTsKKyAgICBvYmplY3QtPnR5cGUgPSB0eXBlOwogfQogCi12b2lk
IGV3a19qc192YXJpYW50X2ZyZWUoRXdrX0pTX1ZhcmlhbnQqIHZhcikKK3ZvaWQgZXdrX2pzX3Zh
cmlhbnRfZnJlZShFd2tfSlNfVmFyaWFudCoganNWYXJpYW50KQogewotICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOKHZhcik7Ci0gICAgaWYgKHZhci0+dHlwZSA9PSBFV0tfSlNfVkFSSUFO
VF9TVFJJTkcpCi0gICAgICAgIGZyZWUodmFyLT52YWx1ZS5zKTsKLSAgICBlbHNlIGlmICh2YXIt
PnR5cGUgPT0gRVdLX0pTX1ZBUklBTlRfT0JKRUNUKQotICAgICAgICBld2tfanNfb2JqZWN0X2Zy
ZWUodmFyLT52YWx1ZS5vKTsKLSAgICBmcmVlKHZhcik7CisgICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk4oanNWYXJpYW50KTsKKyAgICBpZiAodmFyaWFudC0+dHlwZSA9PSBFV0tfSlNfVkFS
SUFOVF9TVFJJTkcpCisgICAgICAgIGZyZWUoanNWYXJpYW50LT52YWx1ZS5zKTsKKyAgICBlbHNl
IGlmIChqc1ZhcmlhbnQtPnR5cGUgPT0gRVdLX0pTX1ZBUklBTlRfT0JKRUNUKQorICAgICAgICBl
d2tfanNfb2JqZWN0X2ZyZWUoanNWYXJpYW50LT52YWx1ZS5vKTsKKyAgICBmcmVlKGpzVmFyaWFu
dCk7CiB9CiAKLXZvaWQgZXdrX2pzX3ZhcmlhbnRfYXJyYXlfZnJlZShFd2tfSlNfVmFyaWFudCog
dmFyLCBpbnQgY291bnQpCit2b2lkIGV3a19qc192YXJpYW50X2FycmF5X2ZyZWUoRXdrX0pTX1Zh
cmlhbnQqIGpzVmFyaWFudCwgaW50IGNvdW50KQogewotICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOKHZhcik7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oanNWYXJpYW50KTsK
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLSAgICAgICAgaWYgKHZhcltp
XS50eXBlID09IEVXS19KU19WQVJJQU5UX1NUUklORykKLSAgICAgICAgICAgIGZyZWUodmFyW2ld
LnZhbHVlLnMpOwotICAgICAgICBlbHNlIGlmICh2YXJbaV0udHlwZSA9PSBFV0tfSlNfVkFSSUFO
VF9PQkpFQ1QpCi0gICAgICAgICAgICBld2tfanNfb2JqZWN0X2ZyZWUodmFyW2ldLnZhbHVlLm8p
OworICAgICAgICBpZiAoanNWYXJpYW50W2ldLnR5cGUgPT0gRVdLX0pTX1ZBUklBTlRfU1RSSU5H
KQorICAgICAgICAgICAgZnJlZShqc1ZhcmlhbnRbaV0udmFsdWUucyk7CisgICAgICAgIGVsc2Ug
aWYgKGpzVmFyaWFudFtpXS50eXBlID09IEVXS19KU19WQVJJQU5UX09CSkVDVCkKKyAgICAgICAg
ICAgIGV3a19qc19vYmplY3RfZnJlZShqc1ZhcmlhbnRbaV0udmFsdWUubyk7CiAgICAgfQotICAg
IGZyZWUodmFyKTsKKyAgICBmcmVlKGpzVmFyaWFudCk7CiB9CiAKICNlbHNlCiAKLUVpbmFfSGFz
aCogZXdrX2pzX29iamVjdF9wcm9wZXJ0aWVzX2dldChjb25zdCBFd2tfSlNfT2JqZWN0KiBvYmop
CitFaW5hX0hhc2gqIGV3a19qc19vYmplY3RfcHJvcGVydGllc19nZXQoY29uc3QgRXdrX0pTX09i
amVjdCoganNPYmplY3QpCiB7CiAgICAgcmV0dXJuIDA7CiB9CiAKLWNvbnN0IGNoYXIqIGV3a19q
c19vYmplY3RfbmFtZV9nZXQoY29uc3QgRXdrX0pTX09iamVjdCogb2JqKQorY29uc3QgY2hhciog
ZXdrX2pzX29iamVjdF9uYW1lX2dldChjb25zdCBFd2tfSlNfT2JqZWN0KiBqc09iamVjdCkKIHsK
ICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBld2tfanNfdmFyaWFudF9mcmVlKEV3a19KU19WYXJp
YW50KiB2YXIpCit2b2lkIGV3a19qc192YXJpYW50X2ZyZWUoRXdrX0pTX1ZhcmlhbnQqIGpzVmFy
aWFudCkKIHsKIH0KIAotdm9pZCBld2tfanNfdmFyaWFudF9hcnJheV9mcmVlKEV3a19KU19WYXJp
YW50KiB2YXIsIGludCBjb3VudCkKK3ZvaWQgZXdrX2pzX3ZhcmlhbnRfYXJyYXlfZnJlZShFd2tf
SlNfVmFyaWFudCoganNWYXJpYW50LCBpbnQgY291bnQpCiB7CiB9CiAKLUV3a19KU19PYmplY3Qq
IGV3a19qc19vYmplY3RfbmV3KGNvbnN0IEV3a19KU19DbGFzc19NZXRhKiBtZXRhX2NscykKK0V3
a19KU19PYmplY3QqIGV3a19qc19vYmplY3RfbmV3KGNvbnN0IEV3a19KU19DbGFzc19NZXRhKiBq
c01ldGFDbGFzcykKIHsKICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBld2tfanNfb2JqZWN0X2Zy
ZWUoRXdrX0pTX09iamVjdCogb2JqKQordm9pZCBld2tfanNfb2JqZWN0X2ZyZWUoRXdrX0pTX09i
amVjdCoganNPYmplY3QpCiB7CiB9CiAKLUVpbmFfQm9vbCBld2tfanNfb2JqZWN0X2ludm9rZShF
d2tfSlNfT2JqZWN0KiBvYmosIEV3a19KU19WYXJpYW50KiBhcmdzLCBpbnQgYXJnX2NvdW50LCBF
d2tfSlNfVmFyaWFudCogcmVzdWx0KQorRWluYV9Cb29sIGV3a19qc19vYmplY3RfaW52b2tlKEV3
a19KU19PYmplY3QqIGpzT2JqZWN0LCBFd2tfSlNfVmFyaWFudCogYXJncywgaW50IGFyZ0NvdW50
LCBFd2tfSlNfVmFyaWFudCogcmVzdWx0KQogewogICAgIHJldHVybiBFSU5BX0ZBTFNFOwogfQog
Ci1Fd2tfSlNfT2JqZWN0X1R5cGUgZXdrX2pzX29iamVjdF90eXBlX2dldChFd2tfSlNfT2JqZWN0
KiBvYmopCitFd2tfSlNfT2JqZWN0X1R5cGUgZXdrX2pzX29iamVjdF90eXBlX2dldChFd2tfSlNf
T2JqZWN0KiBqc09iamVjdCkKIHsKICAgICByZXR1cm4gRVdLX0pTX09CSkVDVF9JTlZBTElEOwog
fQogCi12b2lkIGV3a19qc19vYmplY3RfdHlwZV9zZXQoRXdrX0pTX09iamVjdCogb2JqLCBFd2tf
SlNfT2JqZWN0X1R5cGUgdHlwZSkKK3ZvaWQgZXdrX2pzX29iamVjdF90eXBlX3NldChFd2tfSlNf
T2JqZWN0KiBqc09iamVjdCwgRXdrX0pTX09iamVjdF9UeXBlIHR5cGUpCiB7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfcHJvdG9jb2xfaGFuZGxlcl9zb3VwLmNw
cCBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfcHJvdG9jb2xfaGFuZGxlcl9zb3VwLmNwcApp
bmRleCBhZDNmOTIxZmZkYzBmMDE1ZTJjYTc5OTM4ZDkyZmNmYmJiZThkOTkzLi45ZDU5ZmRjOTc2
NGVlZmNiNTZjMmQ3ZjNlNmI4YWM3YjNkMzQwYWYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2VmbC9ld2svZXdrX3Byb3RvY29sX2hhbmRsZXJfc291cC5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9lZmwvZXdrL2V3a19wcm90b2NvbF9oYW5kbGVyX3NvdXAuY3BwCkBAIC01MSwxNCArNTEsMTQg
QEAgc3RhdGljIHZvaWQgZXdrX2N1c3RvbV9wcm90b2NvbF9oYW5kbGVyX2luaXQoRXdrQ3VzdG9t
UHJvdG9jb2xIYW5kbGVyKiBjdXN0b21Qcm8KICAgICBjdXN0b21Qcm90b2NvbEhhbmRsZXItPnBy
aXYtPmJ5dGVzUmVhZCA9IDA7CiB9CiAKLXN0YXRpYyB2b2lkIGV3a19jdXN0b21fcHJvdG9jb2xf
aGFuZGxlcl9maW5hbGl6ZShHT2JqZWN0KiBvYmopCitzdGF0aWMgdm9pZCBld2tfY3VzdG9tX3By
b3RvY29sX2hhbmRsZXJfZmluYWxpemUoR09iamVjdCogb2JqZWN0KQogewotICAgIEV3a1Byb3Rv
Y29sSGFuZGxlclByaXZhdGUqIHByaXYgID0gR19UWVBFX0lOU1RBTkNFX0dFVF9QUklWQVRFKG9i
aiwgRVdLX1RZUEVfQ1VTVE9NX1BST1RPQ09MX0hBTkRMRVIsCisgICAgRXdrUHJvdG9jb2xIYW5k
bGVyUHJpdmF0ZSogcHJpdiAgPSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUob2JqZWN0LCBF
V0tfVFlQRV9DVVNUT01fUFJPVE9DT0xfSEFORExFUiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFd2tQcm90b2NvbEhh
bmRsZXJQcml2YXRlKTsKICAgICBpZiAocHJpdikKICAgICAgICAgZnJlZShwcml2LT5taW1lKTsK
IAotICAgIEdfT0JKRUNUX0NMQVNTKGV3a19jdXN0b21fcHJvdG9jb2xfaGFuZGxlcl9wYXJlbnRf
Y2xhc3MpLT5maW5hbGl6ZShvYmopOworICAgIEdfT0JKRUNUX0NMQVNTKGV3a19jdXN0b21fcHJv
dG9jb2xfaGFuZGxlcl9wYXJlbnRfY2xhc3MpLT5maW5hbGl6ZShvYmplY3QpOwogfQogCiBzdGF0
aWMgZ2Jvb2xlYW4gZXdrX2N1c3RvbV9wcm90b2NvbF9oYW5kbGVyX2NoZWNrX3VyaShTb3VwUmVx
dWVzdCogcmVxdWVzdCwgU291cFVSSSogdXJpLCBHRXJyb3IqKiBlcnJvcikKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfc2V0dGluZ3MuY3BwIGIvU291cmNlL1dlYktpdC9l
ZmwvZXdrL2V3a19zZXR0aW5ncy5jcHAKaW5kZXggODNkYjUzODMwMjNmMTUyMjUxNzlmZjE3ZmY2
MGIyNTJiYjU3NDI5Yi4uZjBiYTZlYmNiMmY3ZTVkYzExMWZlYzQ1YjVmNmNjZDUwMzk4M2VhNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19zZXR0aW5ncy5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19zZXR0aW5ncy5jcHAKQEAgLTMxLDYgKzMxLDggQEAK
ICNpbmNsdWRlICJJbnRTaXplLmgiCiAjaW5jbHVkZSAiS1VSTC5oIgogI2luY2x1ZGUgIk1lbW9y
eUNhY2hlLmgiCisvLyBGSVhNRTogV2h5IGlzIHRoZXJlIGEgZGlyZWN0b3J5IGluIHRoaXMgaW5j
bHVkZT8KKyNpbmNsdWRlICJhcHBjYWNoZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFnZS5oIgogI2lu
Y2x1ZGUgImV3a19wcml2YXRlLmgiCiAKICNpbmNsdWRlIDxFaW5hLmg+CkBAIC00NCw5ICs0Niw2
IEBACiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ0NvbmNhdGVuYXRlLmg+CiAKLS8vIEZJWE1FOiBXaHkgaXMgdGhlcmUgYSBkaXJlY3Rvcnkg
aW4gdGhpcyBpbmNsdWRlPwotI2luY2x1ZGUgImFwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9y
YWdlLmgiCi0KIHN0YXRpYyBjb25zdCBjaGFyKiBfZXdrX2NhY2hlX2RpcmVjdG9yeV9wYXRoID0g
MDsKIAogc3RhdGljIGNvbnN0IGNoYXIqIF9ld2tfaWNvbl9kYXRhYmFzZV9wYXRoID0gMDsKQEAg
LTIyOSwxMiArMjI4LDEyIEBAIHZvaWQgZXdrX3NldHRpbmdzX2NhY2hlX2NhcGFjaXR5X3NldCh1
bnNpZ25lZCBjYXBhY2l0eSkKICAgICBjYWNoZS0+c2V0Q2FwYWNpdGllcygwLCBjYXBhY2l0eSwg
Y2FwYWNpdHkpOwogfQogCi12b2lkIGV3a19zZXR0aW5nc19yZXBhaW50X3Rocm90dGxpbmdfc2V0
KGRvdWJsZSBkZWZlcnJlZF9yZXBhaW50X2RlbGF5LCBkb3VibGUgaW5pdGlhbF9kZWZlcnJlZF9y
ZXBhaW50X2RlbGF5X2R1cmluZ19sb2FkaW5nLCBkb3VibGUgbWF4X2RlZmVycmVkX3JlcGFpbnRf
ZGVsYXlfZHVyaW5nX2xvYWRpbmcsIGRvdWJsZSBkZWZlcnJlZF9yZXBhaW50X2RlbGF5X2luY3Jl
bWVudF9kdXJpbmdfbG9hZGluZykKK3ZvaWQgZXdrX3NldHRpbmdzX3JlcGFpbnRfdGhyb3R0bGlu
Z19zZXQoZG91YmxlIGRlZmVycmVkUmVwYWludERlbGF5LCBkb3VibGUgaW5pdGlhbERlZmVycmVk
UmVwYWludERlbGF5RHVyaW5nTG9hZGluZywgZG91YmxlIG1heERlZmVycmVkUmVwYWludERlbGF5
RHVyaW5nTG9hZGluZywgZG91YmxlIGRlZmVycmVkUmVwYWludERlbGF5SW5jcmVtZW50RHVyaW5n
TG9hZGluZykKIHsKLSAgICBXZWJDb3JlOjpGcmFtZVZpZXc6OnNldFJlcGFpbnRUaHJvdHRsaW5n
RGVmZXJyZWRSZXBhaW50RGVsYXkoZGVmZXJyZWRfcmVwYWludF9kZWxheSk7Ci0gICAgV2ViQ29y
ZTo6RnJhbWVWaWV3OjpzZXRSZXBhaW50VGhyb3R0bGluZ25Jbml0aWFsRGVmZXJyZWRSZXBhaW50
RGVsYXlEdXJpbmdMb2FkaW5nKGluaXRpYWxfZGVmZXJyZWRfcmVwYWludF9kZWxheV9kdXJpbmdf
bG9hZGluZyk7Ci0gICAgV2ViQ29yZTo6RnJhbWVWaWV3OjpzZXRSZXBhaW50VGhyb3R0bGluZ01h
eERlZmVycmVkUmVwYWludERlbGF5RHVyaW5nTG9hZGluZyhtYXhfZGVmZXJyZWRfcmVwYWludF9k
ZWxheV9kdXJpbmdfbG9hZGluZyk7Ci0gICAgV2ViQ29yZTo6RnJhbWVWaWV3OjpzZXRSZXBhaW50
VGhyb3R0bGluZ0RlZmVycmVkUmVwYWludERlbGF5SW5jcmVtZW50RHVyaW5nTG9hZGluZyhkZWZl
cnJlZF9yZXBhaW50X2RlbGF5X2luY3JlbWVudF9kdXJpbmdfbG9hZGluZyk7CisgICAgV2ViQ29y
ZTo6RnJhbWVWaWV3OjpzZXRSZXBhaW50VGhyb3R0bGluZ0RlZmVycmVkUmVwYWludERlbGF5KGRl
ZmVycmVkUmVwYWludERlbGF5KTsKKyAgICBXZWJDb3JlOjpGcmFtZVZpZXc6OnNldFJlcGFpbnRU
aHJvdHRsaW5nbkluaXRpYWxEZWZlcnJlZFJlcGFpbnREZWxheUR1cmluZ0xvYWRpbmcoaW5pdGlh
bERlZmVycmVkUmVwYWludERlbGF5RHVyaW5nTG9hZGluZyk7CisgICAgV2ViQ29yZTo6RnJhbWVW
aWV3OjpzZXRSZXBhaW50VGhyb3R0bGluZ01heERlZmVycmVkUmVwYWludERlbGF5RHVyaW5nTG9h
ZGluZyhtYXhEZWZlcnJlZFJlcGFpbnREZWxheUR1cmluZ0xvYWRpbmcpOworICAgIFdlYkNvcmU6
OkZyYW1lVmlldzo6c2V0UmVwYWludFRocm90dGxpbmdEZWZlcnJlZFJlcGFpbnREZWxheUluY3Jl
bWVudER1cmluZ0xvYWRpbmcoZGVmZXJyZWRSZXBhaW50RGVsYXlJbmNyZW1lbnREdXJpbmdMb2Fk
aW5nKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmUuY3BwIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a190aWxlZF9i
YWNraW5nX3N0b3JlLmNwcAppbmRleCBkNzEyZjdhYTMzZDU5YjE5ZDkzNDAyMmQxODM2MDc5YzM2
MGIxNTE5Li43OTRhOTBjNTc0NmY2MGU1MjNiNmRlNWUyNTJiYmNiMDUxYjA3NTY0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmUuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfYmFja2luZ19zdG9yZS5jcHAKQEAg
LTQ2LDkgKzQ2LDkgQEAgdHlwZWRlZiBlbnVtIF9Fd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVf
UmVuZGVyX1ByaW9yaXR5IEV3a19UaWxlZF9CYWNraW5nX1N0b3IKIAogc3RydWN0IF9Fd2tfVGls
ZWRfQmFja2luZ19TdG9yZV9JdGVtIHsKICAgICBFSU5BX0lOTElTVDsKLSAgICBFd2tfVGlsZSAq
dGlsZTsKKyAgICBFd2tfVGlsZSogdGlsZTsKICAgICBzdHJ1Y3QgewotICAgICAgICBFdmFzX0Nv
b3JkIHgsIHksIHcsIGg7CisgICAgICAgIEV2YXNfQ29vcmQgeCwgeSwgd2lkdGgsIGhlaWdodDsK
ICAgICB9IGdlb21ldHJ5OwogICAgIEVpbmFfQm9vbCBzbW9vdGhfc2NhbGU7CiB9OwpAQCAtNjEs
MTYgKzYxLDE2IEBAIHN0cnVjdCBfRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9S
ZXF1ZXN0IHsKIAogc3RydWN0IF9Fd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhIHsKICAgICBF
dmFzX09iamVjdF9TbWFydF9DbGlwcGVkX0RhdGEgYmFzZTsKLSAgICBFdmFzX09iamVjdCAqc2Vs
ZjsKLSAgICBFdmFzX09iamVjdCAqY29udGVudHNfY2xpcHBlcjsKKyAgICBFdmFzX09iamVjdCog
c2VsZjsKKyAgICBFdmFzX09iamVjdCogY29udGVudHNfY2xpcHBlcjsKICAgICBzdHJ1Y3Qgewot
ICAgICAgICBFaW5hX0lubGlzdCAqKml0ZW1zOwotICAgICAgICBFdmFzX0Nvb3JkIHgsIHksIHcs
IGg7CisgICAgICAgIEVpbmFfSW5saXN0KiogaXRlbXM7CisgICAgICAgIEV2YXNfQ29vcmQgeCwg
eSwgd2lkdGgsIGhlaWdodDsKICAgICAgICAgbG9uZyBjb2xzLCByb3dzOwogICAgICAgICBzdHJ1
Y3QgewotICAgICAgICAgICAgRXZhc19Db29yZCB3LCBoOworICAgICAgICAgICAgRXZhc19Db29y
ZCB3aWR0aCwgaGVpZ2h0OwogICAgICAgICAgICAgZmxvYXQgem9vbTsKLSAgICAgICAgICAgIEVp
bmFfQm9vbCB6b29tX3dlYWtfc21vb3RoX3NjYWxlOjE7CisgICAgICAgICAgICBFaW5hX0Jvb2wg
em9vbV93ZWFrX3Ntb290aF9zY2FsZSA6IDE7CiAgICAgICAgIH0gdGlsZTsKICAgICAgICAgc3Ry
dWN0IHsKICAgICAgICAgICAgIHN0cnVjdCB7CkBAIC04MCw3ICs4MCw3IEBAIHN0cnVjdCBfRXdr
X1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSB7CiAgICAgfSB2aWV3OwogICAgIEV2YXNfQ29sb3Jz
cGFjZSBjc3BhY2U7CiAgICAgc3RydWN0IHsKLSAgICAgICAgRXdrX1RpbGVfTWF0cml4ICptYXRy
aXg7CisgICAgICAgIEV3a19UaWxlX01hdHJpeCogbWF0cml4OwogICAgICAgICBzdHJ1Y3Qgewog
ICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBjb2wsIHJvdzsKICAgICAgICAgfSBiYXNlOwpAQCAt
OTAsMjggKzkwLDI4IEBAIHN0cnVjdCBfRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSB7CiAg
ICAgICAgIEV2YXNfQ29vcmQgd2lkdGgsIGhlaWdodDsKICAgICB9IG1vZGVsOwogICAgIHN0cnVj
dCB7Ci0gICAgICAgIEVpbmFfQm9vbCAoKmNiKSh2b2lkICpkYXRhLCBFd2tfVGlsZSAqdCwgY29u
c3QgRWluYV9SZWN0YW5nbGUgKmFyZWEpOwotICAgICAgICB2b2lkICpkYXRhOwotICAgICAgICBF
aW5hX0lubGlzdCAqcHJlX3JlbmRlcl9yZXF1ZXN0czsKLSAgICAgICAgRWNvcmVfSWRsZXIgKmlk
bGVyOworICAgICAgICBFaW5hX0Jvb2wgKCpjYikodm9pZCogZGF0YSwgRXdrX1RpbGUqIHRpbGUs
IGNvbnN0IEVpbmFfUmVjdGFuZ2xlKiBhcmVhKTsKKyAgICAgICAgdm9pZCogZGF0YTsKKyAgICAg
ICAgRWluYV9Jbmxpc3QqIHByZV9yZW5kZXJfcmVxdWVzdHM7CisgICAgICAgIEVjb3JlX0lkbGVy
KiBpZGxlcjsKICAgICAgICAgRWluYV9Cb29sIGRpc2FibGVkOwotICAgICAgICBFaW5hX0Jvb2wg
c3VzcGVuZDoxOworICAgICAgICBFaW5hX0Jvb2wgc3VzcGVuZCA6IDE7CiAgICAgfSByZW5kZXI7
CiAgICAgc3RydWN0IHsKLSAgICAgICAgdm9pZCAqKCpwcmVfY2IpKHZvaWQgKmRhdGEsIEV2YXNf
T2JqZWN0ICpvKTsKLSAgICAgICAgdm9pZCAqcHJlX2RhdGE7Ci0gICAgICAgIHZvaWQgKigqcG9z
dF9jYikodm9pZCAqZGF0YSwgdm9pZCAqcHJlX2RhdGEsIEV2YXNfT2JqZWN0ICpvKTsKLSAgICAg
ICAgdm9pZCAqcG9zdF9kYXRhOworICAgICAgICB2b2lkKiAoKnByZV9jYikodm9pZCogZGF0YSwg
RXZhc19PYmplY3QqIGV3a1RpbGUpOworICAgICAgICB2b2lkKiBwcmVfZGF0YTsKKyAgICAgICAg
dm9pZCogKCpwb3N0X2NiKSh2b2lkKiBkYXRhLCB2b2lkKiBwcmVfZGF0YSwgRXZhc19PYmplY3Qq
IGV3a1RpbGUpOworICAgICAgICB2b2lkKiBwb3N0X2RhdGE7CiAgICAgfSBwcm9jZXNzOwogICAg
IHN0cnVjdCB7Ci0gICAgICAgIEVpbmFfQm9vbCBhbnk6MTsKLSAgICAgICAgRWluYV9Cb29sIHBv
czoxOwotICAgICAgICBFaW5hX0Jvb2wgc2l6ZToxOwotICAgICAgICBFaW5hX0Jvb2wgbW9kZWw6
MTsKLSAgICAgICAgRWluYV9Cb29sIG9mZnNldDoxOworICAgICAgICBFaW5hX0Jvb2wgYW55IDog
MTsKKyAgICAgICAgRWluYV9Cb29sIHBvcyA6IDE7CisgICAgICAgIEVpbmFfQm9vbCBzaXplIDog
MTsKKyAgICAgICAgRWluYV9Cb29sIG1vZGVsIDogMTsKKyAgICAgICAgRWluYV9Cb29sIG9mZnNl
dCA6IDE7CiAgICAgfSBjaGFuZ2VkOwogI2lmZGVmIERFQlVHX01FTV9MRUFLUwotICAgIEVjb3Jl
X0V2ZW50X0hhbmRsZXIgKnNpZ191c3I7CisgICAgRWNvcmVfRXZlbnRfSGFuZGxlciogc2lnX3Vz
cjsKICNlbmRpZgogfTsKIApAQCAtMTI1LDEzICsxMjUsMTMgQEAgaW50IF9ld2tfdGlsZWRfbG9n
X2RvbSA9IC0xOwogICAgICAgICByZXR1cm4gX19WQV9BUkdTX187ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIH0KIAotc3RhdGljIHZvaWQgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX2ZpbGxfcmVuZGVyZXJzKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0Rh
dGEgKnByaXYpOwotc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92
aWV3X2RiZyhjb25zdCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2KTsKLXN0YXRp
YyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfY2hhbmdlZChFd2tfVGlsZWRf
QmFja2luZ19TdG9yZV9EYXRhICpwcml2KTsKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9maWxsX3JlbmRlcmVycyhFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2
KTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19kYmco
Y29uc3QgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdik7CitzdGF0aWMgaW5saW5l
IHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2NoYW5nZWQoRXdrX1RpbGVkX0JhY2tpbmdf
U3RvcmVfRGF0YSogcHJpdik7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfdXBkYXRlc19wcm9jZXNzKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnBy
aXYpCitzdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3VwZGF0ZXNf
cHJvY2VzcyhFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2KQogewotICAgIHZvaWQg
KmRhdGEgPSAwOworICAgIHZvaWQqIGRhdGEgPSAwOwogCiAgICAgLyogRG8gbm90IHByb2Nlc3Mg
dXBkYXRlcy4gTm90ZSB0aGF0IHdlIHN0aWxsIHdhbnQgdG8gZ2V0IHVwZGF0ZXMgcmVxdWVzdHMK
ICAgICAgKiBpbiB0aGUgcXVldWUgaW4gb3JkZXIgdG8gbm90IG1pc3MgYW55IHVwZGF0ZXMgYWZ0
ZXIgdGhlIHJlbmRlciBpcwpAQCAtMTQ5LDEwICsxNDksMTAgQEAgc3RhdGljIGlubGluZSB2b2lk
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV91cGRhdGVzX3Byb2Nlc3MoRXdrX1RpbGVkX0JhY2tp
bmdfU3QKICAgICAgICAgcHJpdi0+cHJvY2Vzcy5wb3N0X2NiKHByaXYtPnByb2Nlc3MucG9zdF9k
YXRhLCBkYXRhLCBwcml2LT5zZWxmKTsKIH0KIAotc3RhdGljIGludCBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfZmx1c2godm9pZCAqZGF0YSkKK3N0YXRpYyBpbnQgX2V3a190aWxlZF9iYWNraW5n
X3N0b3JlX2ZsdXNoKHZvaWQqIGRhdGEpCiB7CiAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVf
RGF0YSogcHJpdiA9IHN0YXRpY19jYXN0PEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqPihk
YXRhKTsKLSAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YyA9IGV3a190aWxlX21hdHJpeF91
bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7CisgICAgRXdrX1RpbGVfVW51c2Vk
X0NhY2hlKiB0dWMgPSBld2tfdGlsZV9tYXRyaXhfdW51c2VkX2NhY2hlX2dldChwcml2LT5tb2Rl
bC5tYXRyaXgpOwogCiAgICAgaWYgKHR1YykgewogICAgICAgICBEQkcoImZsdXNoIHVudXNlZCB0
aWxlIGNhY2hlLiIpOwpAQCAtMTYzLDgwICsxNjMsODAgQEAgc3RhdGljIGludCBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfZmx1c2godm9pZCAqZGF0YSkKICAgICByZXR1cm4gMDsKIH0KIAotc3Rh
dGljIEV3a19UaWxlICpfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9uZXcoRXdrX1RpbGVk
X0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgdW5zaWduZWQgbG9uZyBjb2wsIHVuc2lnbmVkIGxv
bmcgcm93LCBmbG9hdCB6b29tKQorc3RhdGljIEV3a19UaWxlKiBfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfdGlsZV9uZXcoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdiwgdW5zaWdu
ZWQgbG9uZyBjb2x1bW4sIHVuc2lnbmVkIGxvbmcgcm93LCBmbG9hdCB6b29tKQogewotICAgIEV3
a19UaWxlICp0OwotICAgIEV2YXMgKmV2YXMgPSBldmFzX29iamVjdF9ldmFzX2dldChwcml2LT5z
ZWxmKTsKKyAgICBFd2tfVGlsZSogdGlsZTsKKyAgICBFdmFzKiBldmFzID0gZXZhc19vYmplY3Rf
ZXZhc19nZXQocHJpdi0+c2VsZik7CiAgICAgaWYgKCFldmFzKSB7CiAgICAgICAgIENSSVRJQ0FM
KCJldmFzX29iamVjdF9ldmFzX2dldCBmYWlsZWQhIik7CiAgICAgICAgIHJldHVybiAwOwogICAg
IH0KIAotICAgIHQgPSBld2tfdGlsZV9tYXRyaXhfdGlsZV9uZXcKLSAgICAgICAgKHByaXYtPm1v
ZGVsLm1hdHJpeCwgZXZhcywgY29sLCByb3csIHpvb20pOworICAgIHRpbGUgPSBld2tfdGlsZV9t
YXRyaXhfdGlsZV9uZXcKKyAgICAgICAgICAgICAgIChwcml2LT5tb2RlbC5tYXRyaXgsIGV2YXMs
IGNvbHVtbiwgcm93LCB6b29tKTsKIAotICAgIGlmICghdCkgeworICAgIGlmICghdGlsZSkgewog
ICAgICAgICBDUklUSUNBTCgiZXdrX3RpbGVfbWF0cml4X3RpbGVfbmV3IGZhaWxlZCEiKTsKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgcmV0dXJuIHQ7CisgICAgcmV0dXJuIHRpbGU7
CiB9CiAKLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX21vdmUoRXdr
X1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5
KQorc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fbW92ZShFd2tfVGls
ZWRfQmFja2luZ19TdG9yZV9JdGVtKiBpdGVtLCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSkK
IHsKLSAgICBpdC0+Z2VvbWV0cnkueCA9IHg7Ci0gICAgaXQtPmdlb21ldHJ5LnkgPSB5OworICAg
IGl0ZW0tPmdlb21ldHJ5LnggPSB4OworICAgIGl0ZW0tPmdlb21ldHJ5LnkgPSB5OwogCi0gICAg
aWYgKGl0LT50aWxlKQotICAgICAgICBldmFzX29iamVjdF9tb3ZlKGl0LT50aWxlLT5pbWFnZSwg
eCwgeSk7CisgICAgaWYgKGl0ZW0tPnRpbGUpCisgICAgICAgIGV2YXNfb2JqZWN0X21vdmUoaXRl
bS0+dGlsZS0+aW1hZ2UsIHgsIHkpOwogfQogCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfaXRlbV9yZXNpemUoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQsIEV2
YXNfQ29vcmQgdywgRXZhc19Db29yZCBoKQorc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5n
X3N0b3JlX2l0ZW1fcmVzaXplKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0qIGl0ZW0sIEV2
YXNfQ29vcmQgd2lkdGgsIEV2YXNfQ29vcmQgaGVpZ2h0KQogewotICAgIGl0LT5nZW9tZXRyeS53
ID0gdzsKLSAgICBpdC0+Z2VvbWV0cnkuaCA9IGg7CisgICAgaXRlbS0+Z2VvbWV0cnkud2lkdGgg
PSB3aWR0aDsKKyAgICBpdGVtLT5nZW9tZXRyeS5oZWlnaHQgPSBoZWlnaHQ7CiAKLSAgICBpZiAo
aXQtPnRpbGUpIHsKLSAgICAgICAgZXZhc19vYmplY3RfcmVzaXplKGl0LT50aWxlLT5pbWFnZSwg
dywgaCk7Ci0gICAgICAgIGV2YXNfb2JqZWN0X2ltYWdlX2ZpbGxfc2V0KGl0LT50aWxlLT5pbWFn
ZSwgMCwgMCwgdywgaCk7CisgICAgaWYgKGl0ZW0tPnRpbGUpIHsKKyAgICAgICAgZXZhc19vYmpl
Y3RfcmVzaXplKGl0ZW0tPnRpbGUtPmltYWdlLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgZXZh
c19vYmplY3RfaW1hZ2VfZmlsbF9zZXQoaXRlbS0+dGlsZS0+aW1hZ2UsIDAsIDAsIHdpZHRoLCBo
ZWlnaHQpOwogICAgIH0KIH0KIAotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3RpbGVfYXNzb2NpYXRlKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIEV3a19U
aWxlICp0LCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdCkKK3N0YXRpYyB2b2lkIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2Fzc29jaWF0ZShFd2tfVGlsZWRfQmFja2luZ19T
dG9yZV9EYXRhKiBwcml2LCBFd2tfVGlsZSogdGlsZSwgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVf
SXRlbSogaXRlbSkKIHsKLSAgICBpZiAoaXQtPnRpbGUpCi0gICAgICAgIENSSVRJQ0FMKCJpdC0+
dGlsZT0lcCwgYnV0IGl0IHNob3VsZCBiZSAwISIsIGl0LT50aWxlKTsKLSAgICBpdC0+dGlsZSA9
IHQ7Ci0gICAgZXZhc19vYmplY3RfbW92ZShpdC0+dGlsZS0+aW1hZ2UsIGl0LT5nZW9tZXRyeS54
LCBpdC0+Z2VvbWV0cnkueSk7Ci0gICAgZXZhc19vYmplY3RfcmVzaXplKGl0LT50aWxlLT5pbWFn
ZSwgaXQtPmdlb21ldHJ5LncsIGl0LT5nZW9tZXRyeS5oKTsKKyAgICBpZiAoaXRlbS0+dGlsZSkK
KyAgICAgICAgQ1JJVElDQUwoIml0LT50aWxlPSVwLCBidXQgaXQgc2hvdWxkIGJlIDAhIiwgaXRl
bS0+dGlsZSk7CisgICAgaXRlbS0+dGlsZSA9IHRpbGU7CisgICAgZXZhc19vYmplY3RfbW92ZShp
dGVtLT50aWxlLT5pbWFnZSwgaXRlbS0+Z2VvbWV0cnkueCwgaXRlbS0+Z2VvbWV0cnkueSk7Cisg
ICAgZXZhc19vYmplY3RfcmVzaXplKGl0ZW0tPnRpbGUtPmltYWdlLCBpdGVtLT5nZW9tZXRyeS53
aWR0aCwgaXRlbS0+Z2VvbWV0cnkuaGVpZ2h0KTsKICAgICBldmFzX29iamVjdF9pbWFnZV9maWxs
X3NldAotICAgICAgICAoaXQtPnRpbGUtPmltYWdlLCAwLCAwLCBpdC0+Z2VvbWV0cnkudywgaXQt
Pmdlb21ldHJ5LmgpOwotICAgIGV2YXNfb2JqZWN0X2ltYWdlX3Ntb290aF9zY2FsZV9zZXQoaXQt
PnRpbGUtPmltYWdlLCBpdC0+c21vb3RoX3NjYWxlKTsKKyAgICAgICAgKGl0ZW0tPnRpbGUtPmlt
YWdlLCAwLCAwLCBpdGVtLT5nZW9tZXRyeS53aWR0aCwgaXRlbS0+Z2VvbWV0cnkuaGVpZ2h0KTsK
KyAgICBldmFzX29iamVjdF9pbWFnZV9zbW9vdGhfc2NhbGVfc2V0KGl0ZW0tPnRpbGUtPmltYWdl
LCBpdGVtLT5zbW9vdGhfc2NhbGUpOwogCi0gICAgaWYgKCFld2tfdGlsZV92aXNpYmxlX2dldCh0
KSkKLSAgICAgICAgZXZhc19vYmplY3Rfc21hcnRfbWVtYmVyX2FkZCh0LT5pbWFnZSwgcHJpdi0+
c2VsZik7CisgICAgaWYgKCFld2tfdGlsZV92aXNpYmxlX2dldCh0aWxlKSkKKyAgICAgICAgZXZh
c19vYmplY3Rfc21hcnRfbWVtYmVyX2FkZCh0aWxlLT5pbWFnZSwgcHJpdi0+c2VsZik7CiAKLSAg
ICBld2tfdGlsZV9zaG93KHQpOworICAgIGV3a190aWxlX3Nob3codGlsZSk7CiB9CiAKLXN0YXRp
YyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2Rpc3NvY2lhdGUoRXdrX1RpbGVk
X0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAq
aXQsIGRvdWJsZSBsYXN0X3VzZWQpCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfdGlsZV9kaXNzb2NpYXRlKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYsIEV3
a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0qIGl0ZW0sIGRvdWJsZSBsYXN0VXNlZCkKIHsKLSAg
ICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YzsKLSAgICBld2tfdGlsZV9oaWRlKGl0LT50aWxl
KTsKLSAgICBpZiAoIWV3a190aWxlX3Zpc2libGVfZ2V0KGl0LT50aWxlKSkKLSAgICAgICAgZXZh
c19vYmplY3Rfc21hcnRfbWVtYmVyX2RlbChpdC0+dGlsZS0+aW1hZ2UpOwotICAgIGV3a190aWxl
X21hdHJpeF90aWxlX3B1dChwcml2LT5tb2RlbC5tYXRyaXgsIGl0LT50aWxlLCBsYXN0X3VzZWQp
OworICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSogdHVjOworICAgIGV3a190aWxlX2hpZGUoaXRl
bS0+dGlsZSk7CisgICAgaWYgKCFld2tfdGlsZV92aXNpYmxlX2dldChpdGVtLT50aWxlKSkKKyAg
ICAgICAgZXZhc19vYmplY3Rfc21hcnRfbWVtYmVyX2RlbChpdGVtLT50aWxlLT5pbWFnZSk7Cisg
ICAgZXdrX3RpbGVfbWF0cml4X3RpbGVfcHV0KHByaXYtPm1vZGVsLm1hdHJpeCwgaXRlbS0+dGls
ZSwgbGFzdFVzZWQpOwogICAgIHR1YyA9IGV3a190aWxlX21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0
KHByaXYtPm1vZGVsLm1hdHJpeCk7CiAgICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2F1dG9fZmx1
c2godHVjKTsKIAotICAgIGl0LT50aWxlID0gMDsKKyAgICBpdGVtLT50aWxlID0gMDsKIH0KIAot
c3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfZGlzc29jaWF0ZV9hbGwo
RXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdikKK3N0YXRpYyB2b2lkIF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV90aWxlX2Rpc3NvY2lhdGVfYWxsKEV3a19UaWxlZF9CYWNraW5nX1N0
b3JlX0RhdGEqIHByaXYpCiB7Ci0gICAgRWluYV9Jbmxpc3QgKml0OwotICAgIEV3a19UaWxlZF9C
YWNraW5nX1N0b3JlX0l0ZW0gKml0ZW07CisgICAgRWluYV9Jbmxpc3QqIGl0OworICAgIEV3a19U
aWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0qIGl0ZW07CiAgICAgaW50IGk7CiAgICAgZG91YmxlIGxh
c3RfdXNlZCA9IGVjb3JlX2xvb3BfdGltZV9nZXQoKTsKIApAQCAtMjQ4LDkgKzI0OCw5IEBAIHN0
YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2Rpc3NvY2lhdGVfYWxsKEV3
a19UaWxlZF9CYWNraW5nX1N0b3JlCiAgICAgfQogfQogCi1zdGF0aWMgaW5saW5lIEVpbmFfQm9v
bCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2FkZChFd2tfVGls
ZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCB1bnNpZ25lZCBsb25nIGNvbCwgdW5zaWduZWQg
bG9uZyByb3csIGZsb2F0IHpvb20sIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJf
UHJpb3JpdHkgcHJpb3JpdHkpCitzdGF0aWMgaW5saW5lIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2FkZChFd2tfVGlsZWRfQmFja2luZ19TdG9y
ZV9EYXRhKiBwcml2LCB1bnNpZ25lZCBsb25nIGNvbHVtbiwgdW5zaWduZWQgbG9uZyByb3csIGZs
b2F0IHpvb20sIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUHJpb3JpdHkgcHJp
b3JpdHkpCiB7Ci0gICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0
ICpyOworICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUmVxdWVzdCogcjsK
IAogICAgIHIgPSBzdGF0aWNfY2FzdDxFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVy
X1JlcXVlc3QqPihtYWxsb2Moc2l6ZW9mKCpyKSkpOwogICAgIGlmICghcikKQEAgLTI1OCw0OSAr
MjU4LDQ5IEBAIHN0YXRpYyBpbmxpbmUgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV9wcmVfcmVuZGVyX3JlcXVlc3RfYWRkKEV3a19UaWxlCiAKICAgICBpZiAocHJpb3JpdHkgPT0g
UFJFX1JFTkRFUl9QUklPUklUWV9ISUdIKQogICAgICAgICBwcml2LT5yZW5kZXIucHJlX3JlbmRl
cl9yZXF1ZXN0cyA9IGVpbmFfaW5saXN0X3ByZXBlbmQKLSAgICAgICAgICAgIChwcml2LT5yZW5k
ZXIucHJlX3JlbmRlcl9yZXF1ZXN0cywgRUlOQV9JTkxJU1RfR0VUKHIpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHByaXYtPnJlbmRlci5wcmVfcmVu
ZGVyX3JlcXVlc3RzLCBFSU5BX0lOTElTVF9HRVQocikpOwogICAgIGVsc2UKICAgICAgICAgcHJp
di0+cmVuZGVyLnByZV9yZW5kZXJfcmVxdWVzdHMgPSBlaW5hX2lubGlzdF9hcHBlbmQKLSAgICAg
ICAgICAgIChwcml2LT5yZW5kZXIucHJlX3JlbmRlcl9yZXF1ZXN0cywgRUlOQV9JTkxJU1RfR0VU
KHIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBy
aXYtPnJlbmRlci5wcmVfcmVuZGVyX3JlcXVlc3RzLCBFSU5BX0lOTElTVF9HRVQocikpOwogCi0g
ICAgci0+Y29sID0gY29sOworICAgIHItPmNvbCA9IGNvbHVtbjsKICAgICByLT5yb3cgPSByb3c7
CiAgICAgci0+em9vbSA9IHpvb207CiAKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi1zdGF0
aWMgaW5saW5lIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVz
dF9kZWwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0ICpyKQorc3RhdGljIGlubGluZSB2b2lkIF9ld2tf
dGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfZGVsKEV3a19UaWxlZF9CYWNr
aW5nX1N0b3JlX0RhdGEqIHByaXYsIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJf
UmVxdWVzdCogcmVxdWVzdCkKIHsKICAgICBwcml2LT5yZW5kZXIucHJlX3JlbmRlcl9yZXF1ZXN0
cyA9IGVpbmFfaW5saXN0X3JlbW92ZQotICAgICAgICAocHJpdi0+cmVuZGVyLnByZV9yZW5kZXJf
cmVxdWVzdHMsIEVJTkFfSU5MSVNUX0dFVChyKSk7Ci0gICAgZnJlZShyKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocHJpdi0+cmVuZGVyLnByZV9yZW5kZXJf
cmVxdWVzdHMsIEVJTkFfSU5MSVNUX0dFVChyZXF1ZXN0KSk7CisgICAgZnJlZShyZXF1ZXN0KTsK
IH0KIAotc3RhdGljIGlubGluZSBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1Jl
cXVlc3QgKl9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfZmlyc3Qo
Y29uc3QgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdikKK3N0YXRpYyBpbmxpbmUg
RXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0KiBfZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2ZpcnN0KGNvbnN0IEV3a19UaWxlZF9CYWNr
aW5nX1N0b3JlX0RhdGEqIHByaXYpCiB7CiAgICAgcmV0dXJuIEVJTkFfSU5MSVNUX0NPTlRBSU5F
Ul9HRVQoCi0gICAgICAgIHByaXYtPnJlbmRlci5wcmVfcmVuZGVyX3JlcXVlc3RzLAotICAgICAg
ICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QpOworICAgICAgICAg
ICAgICAgcHJpdi0+cmVuZGVyLnByZV9yZW5kZXJfcmVxdWVzdHMsCisgICAgICAgICAgICAgICBF
d2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QpOwogfQogCi1zdGF0aWMg
dm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2ZsdXNoKEV3
a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYpCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2ZsdXNoKEV3a19UaWxlZF9CYWNraW5n
X1N0b3JlX0RhdGEqIHByaXYpCiB7Ci0gICAgRWluYV9Jbmxpc3QgKipwbCA9ICZwcml2LT5yZW5k
ZXIucHJlX3JlbmRlcl9yZXF1ZXN0czsKKyAgICBFaW5hX0lubGlzdCoqIHBsID0gJnByaXYtPnJl
bmRlci5wcmVfcmVuZGVyX3JlcXVlc3RzOwogICAgIHdoaWxlICgqcGwpIHsKLSAgICAgICAgRXdr
X1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0ICpyOworICAgICAgICBFd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QqIHI7CiAgICAgICAgIHIgPSBf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2ZpcnN0KHByaXYpOwog
ICAgICAgICAqcGwgPSBlaW5hX2lubGlzdF9yZW1vdmUoKnBsLCAqcGwpOwogICAgICAgICBmcmVl
KHIpOwogICAgIH0KIH0KIAotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3By
ZV9yZW5kZXJfcmVxdWVzdF9jbGVhcihFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2
KQorc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVz
dF9jbGVhcihFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2KQogewotICAgIEVpbmFf
SW5saXN0ICoqcGwgPSAmcHJpdi0+cmVuZGVyLnByZV9yZW5kZXJfcmVxdWVzdHM7Ci0gICAgRWlu
YV9Jbmxpc3QgKml0ZXIgPSAqcGwsICp0bXA7CisgICAgRWluYV9Jbmxpc3QqKiBwbCA9ICZwcml2
LT5yZW5kZXIucHJlX3JlbmRlcl9yZXF1ZXN0czsKKyAgICBFaW5hX0lubGlzdCogaXRlciA9ICpw
bCwgKiB0bXA7CiAgICAgd2hpbGUgKGl0ZXIpIHsKLSAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdf
U3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0ICpyID0KKyAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdf
U3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0KiByID0KICAgICAgICAgICAgIEVJTkFfSU5MSVNUX0NP
TlRBSU5FUl9HRVQoCiAgICAgICAgICAgICAgICAgaXRlciwgRXdrX1RpbGVkX0JhY2tpbmdfU3Rv
cmVfUHJlX1JlbmRlcl9SZXF1ZXN0KTsKICAgICAgICAgdG1wID0gaXRlci0+bmV4dDsKQEAgLTMx
MSwxMyArMzExLDEzIEBAIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVf
cmVuZGVyX3JlcXVlc3RfY2xlYXIoRXdrX1RpbGVkX0JhY2tpbmdfCiB9CiAKIC8qIGFzc3VtZXMg
cHJpdi0+cHJvY2Vzcy5wcmVfY2Igd2FzIGNhbGxlZCBpZiByZXF1aXJlZCEgKi8KLXN0YXRpYyB2
b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfcHJvY2Vzc19z
aW5nbGUoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdikKK3N0YXRpYyB2b2lkIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfcHJvY2Vzc19zaW5nbGUo
RXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdikKIHsKLSAgICBFd2tfVGlsZWRfQmFj
a2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QgKnJlcTsKKyAgICBFd2tfVGlsZWRfQmFja2lu
Z19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QqIHJlcTsKICAgICBFaW5hX1JlY3RhbmdsZSBhcmVh
OwotICAgIEV3a19UaWxlX01hdHJpeCAqdG0gPSBwcml2LT5tb2RlbC5tYXRyaXg7Ci0gICAgRXdr
X1RpbGUgKnQ7Ci0gICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWM7CisgICAgRXdrX1RpbGVf
TWF0cml4KiB0bSA9IHByaXYtPm1vZGVsLm1hdHJpeDsKKyAgICBFd2tfVGlsZSogdGlsZTsKKyAg
ICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHR1YzsKICAgICB1bnNpZ25lZCBsb25nIGNvbCwgcm93
OwogICAgIGZsb2F0IHpvb207CiAgICAgZG91YmxlIGxhc3RfdXNlZCA9IGVjb3JlX2xvb3BfdGlt
ZV9nZXQoKTsKQEAgLTMzNSwyMiArMzM1LDIyIEBAIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfcHJvY2Vzc19zaW5nbGUoRXdrX1RpbGVkCiAg
ICAgICAgIGdvdG8gZW5kOwogICAgIH0KIAotICAgIHQgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfdGlsZV9uZXcocHJpdiwgY29sLCByb3csIHpvb20pOwotICAgIGlmICghdCkKKyAgICB0aWxl
ID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfbmV3KHByaXYsIGNvbCwgcm93LCB6b29t
KTsKKyAgICBpZiAoIXRpbGUpCiAgICAgICAgIGdvdG8gZW5kOwogCiAgICAgYXJlYS54ID0gMDsK
ICAgICBhcmVhLnkgPSAwOwotICAgIGFyZWEudyA9IHByaXYtPnZpZXcudGlsZS53OwotICAgIGFy
ZWEuaCA9IHByaXYtPnZpZXcudGlsZS5oOworICAgIGFyZWEudyA9IHByaXYtPnZpZXcudGlsZS53
aWR0aDsKKyAgICBhcmVhLmggPSBwcml2LT52aWV3LnRpbGUuaGVpZ2h0OwogCi0gICAgcHJpdi0+
cmVuZGVyLmNiKHByaXYtPnJlbmRlci5kYXRhLCB0LCAmYXJlYSk7CisgICAgcHJpdi0+cmVuZGVy
LmNiKHByaXYtPnJlbmRlci5kYXRhLCB0aWxlLCAmYXJlYSk7CiAgICAgZXZhc19vYmplY3RfaW1h
Z2VfZGF0YV91cGRhdGVfYWRkKAotICAgICAgICB0LT5pbWFnZSwKKyAgICAgICAgdGlsZS0+aW1h
Z2UsCiAgICAgICAgIGFyZWEueCwgYXJlYS55LCBhcmVhLncsIGFyZWEuaCk7Ci0gICAgZXdrX3Rp
bGVfbWF0cml4X3RpbGVfdXBkYXRlc19jbGVhcih0bSwgdCk7CisgICAgZXdrX3RpbGVfbWF0cml4
X3RpbGVfdXBkYXRlc19jbGVhcih0bSwgdGlsZSk7CiAKLSAgICBld2tfdGlsZV9tYXRyaXhfdGls
ZV9wdXQodG0sIHQsIGxhc3RfdXNlZCk7CisgICAgZXdrX3RpbGVfbWF0cml4X3RpbGVfcHV0KHRt
LCB0aWxlLCBsYXN0X3VzZWQpOwogCiBlbmQ6CiAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3ByZV9yZW5kZXJfcmVxdWVzdF9kZWwocHJpdiwgcmVxKTsKQEAgLTM1OCw3ICszNTgsNyBAQCBl
bmQ6CiAgICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2F1dG9fZmx1c2godHVjKTsKIH0KIAotc3Rh
dGljIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9wcm9jZXNzX2lkbGVy
X2NiKHZvaWQgKmRhdGEpCitzdGF0aWMgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV9pdGVtX3Byb2Nlc3NfaWRsZXJfY2Iodm9pZCogZGF0YSkKIHsKICAgICBFd2tfVGlsZWRfQmFj
a2luZ19TdG9yZV9EYXRhKiBwcml2ID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGVkX0JhY2tpbmdfU3Rv
cmVfRGF0YSo+KGRhdGEpOwogCkBAIC0zNzgsNyArMzc4LDcgQEAgc3RhdGljIEVpbmFfQm9vbCBf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9wcm9jZXNzX2lkbGVyX2NiKHZvaWQgKmRhdGEp
CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9pdGVtX3Byb2Nlc3NfaWRsZXJfc3RvcChFd2tfVGlsZWRfQmFja2lu
Z19TdG9yZV9EYXRhICpwcml2KQorc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9pdGVtX3Byb2Nlc3NfaWRsZXJfc3RvcChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9E
YXRhKiBwcml2KQogewogICAgIGlmICghcHJpdi0+cmVuZGVyLmlkbGVyKQogICAgICAgICByZXR1
cm47CkBAIC0zODcsNyArMzg3LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9pdGVtX3Byb2Nlc3NfaWRsZXJfc3RvcChFd2tfVGlsZWRfQmEKICAgICBwcml2
LT5yZW5kZXIuaWRsZXIgPSAwOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX2l0ZW1fcHJvY2Vzc19pZGxlcl9zdGFydChFd2tfVGlsZWRfQmFja2luZ19T
dG9yZV9EYXRhICpwcml2KQorc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9pdGVtX3Byb2Nlc3NfaWRsZXJfc3RhcnQoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0
YSogcHJpdikKIHsKICAgICBpZiAocHJpdi0+cmVuZGVyLmlkbGVyKQogICAgICAgICByZXR1cm47
CkBAIC0zOTUsNyArMzk1LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9pdGVtX3Byb2Nlc3NfaWRsZXJfc3RhcnQoRXdrX1RpbGVkX0IKICAgICAgICAgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcHJvY2Vzc19pZGxlcl9jYiwgcHJpdik7CiB9CiAK
LXN0YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2Rpc2FibGVfcmVuZGVy
KEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYpCitzdGF0aWMgRWluYV9Cb29sIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9kaXNhYmxlX3JlbmRlcihFd2tfVGlsZWRfQmFja2luZ19T
dG9yZV9EYXRhKiBwcml2KQogewogICAgIGlmIChwcml2LT5yZW5kZXIuc3VzcGVuZCkKICAgICAg
ICAgcmV0dXJuIEVJTkFfVFJVRTsKQEAgLTQwNSw3ICs0MDUsNyBAQCBzdGF0aWMgRWluYV9Cb29s
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9kaXNhYmxlX3JlbmRlcihFd2tfVGlsZWRfQmFja2lu
Z19TdG9yZQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLXN0YXRpYyBFaW5hX0Jvb2wgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX2VuYWJsZV9yZW5kZXIoRXdrX1RpbGVkX0JhY2tpbmdfU3Rv
cmVfRGF0YSAqcHJpdikKK3N0YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X2VuYWJsZV9yZW5kZXIoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdikKIHsKICAg
ICBpZiAoIXByaXYtPnJlbmRlci5zdXNwZW5kKQogICAgICAgICByZXR1cm4gRUlOQV9UUlVFOwpA
QCAtNDE4LDUyICs0MTgsNTIgQEAgc3RhdGljIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfZW5hYmxlX3JlbmRlcihFd2tfVGlsZWRfQmFja2luZ19TdG9yZV8KICAgICByZXR1cm4g
RUlOQV9UUlVFOwogfQogCi1zdGF0aWMgaW5saW5lIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfaXRlbV9maWxsKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIEV3
a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0LCB1bnNpZ25lZCBsb25nIGNvbCwgdW5zaWdu
ZWQgbG9uZyByb3cpCitzdGF0aWMgaW5saW5lIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfaXRlbV9maWxsKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYsIEV3a19U
aWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0qIGl0ZW0sIHVuc2lnbmVkIGxvbmcgY29sdW1uLCB1bnNp
Z25lZCBsb25nIHJvdykKIHsKLSAgICB1bnNpZ25lZCBsb25nIG1fY29sID0gcHJpdi0+bW9kZWwu
YmFzZS5jb2wgKyBjb2w7CisgICAgdW5zaWduZWQgbG9uZyBtX2NvbCA9IHByaXYtPm1vZGVsLmJh
c2UuY29sICsgY29sdW1uOwogICAgIHVuc2lnbmVkIGxvbmcgbV9yb3cgPSBwcml2LT5tb2RlbC5i
YXNlLnJvdyArIHJvdzsKICAgICBkb3VibGUgbGFzdF91c2VkID0gZWNvcmVfbG9vcF90aW1lX2dl
dCgpOwogCiAgICAgaWYgKG1fY29sID49IHByaXYtPm1vZGVsLmN1ci5jb2xzIHx8IG1fcm93ID49
IHByaXYtPm1vZGVsLmN1ci5yb3dzKSB7Ci0gICAgICAgIGlmIChpdC0+dGlsZSkKLSAgICAgICAg
ICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2Rpc3NvY2lhdGUocHJpdiwgaXQsIGxh
c3RfdXNlZCk7CisgICAgICAgIGlmIChpdGVtLT50aWxlKQorICAgICAgICAgICAgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX3RpbGVfZGlzc29jaWF0ZShwcml2LCBpdGVtLCBsYXN0X3VzZWQpOwog
ICAgIH0gZWxzZSB7Ci0gICAgICAgIEV3a19UaWxlICp0OworICAgICAgICBFd2tfVGlsZSogdGls
ZTsKICAgICAgICAgY29uc3QgZmxvYXQgem9vbSA9IHByaXYtPnZpZXcudGlsZS56b29tOwogCi0g
ICAgICAgIGlmIChpdC0+dGlsZSkgewotICAgICAgICAgICAgRXdrX1RpbGUgKm9sZCA9IGl0LT50
aWxlOworICAgICAgICBpZiAoaXRlbS0+dGlsZSkgeworICAgICAgICAgICAgRXdrX1RpbGUqIG9s
ZCA9IGl0ZW0tPnRpbGU7CiAgICAgICAgICAgICBpZiAob2xkLT5yb3cgIT0gbV9yb3cgfHwgb2xk
LT5jb2wgIT0gbV9jb2wgfHwgb2xkLT56b29tICE9IHpvb20pCi0gICAgICAgICAgICAgICAgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfZGlzc29jaWF0ZShwcml2LCBpdCwgbGFzdF91c2Vk
KTsKKyAgICAgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9kaXNzb2Np
YXRlKHByaXYsIGl0ZW0sIGxhc3RfdXNlZCk7CiAgICAgICAgICAgICBlbHNlIGlmIChvbGQtPnJv
dyA9PSBtX3JvdyAmJiBvbGQtPmNvbCA9PSBtX2NvbCAmJiBvbGQtPnpvb20gPT0gem9vbSkKICAg
ICAgICAgICAgICAgICBnb3RvIGVuZDsKICAgICAgICAgfQogCi0gICAgICAgIHQgPSBld2tfdGls
ZV9tYXRyaXhfdGlsZV9leGFjdF9nZXQocHJpdi0+bW9kZWwubWF0cml4LCBtX2NvbCwgbV9yb3cs
IHpvb20pOworICAgICAgICB0aWxlID0gZXdrX3RpbGVfbWF0cml4X3RpbGVfZXhhY3RfZ2V0KHBy
aXYtPm1vZGVsLm1hdHJpeCwgbV9jb2wsIG1fcm93LCB6b29tKTsKIAotICAgICAgICBpZiAoIXQp
IHsKKyAgICAgICAgaWYgKCF0aWxlKSB7CiAgICAgICAgICAgICAvKiBOT1RFOiBpdCBuZXZlciBy
ZXR1cm5zIDAgaWYgaXQtPnRpbGUgd2FzIHNldCEgKi8KLSAgICAgICAgICAgIGlmIChpdC0+dGls
ZSkgewotICAgICAgICAgICAgICAgIENSSVRJQ0FMKCJpdC0+dGlsZT0lcCwgYnV0IGl0IHNob3Vs
ZCBiZSAwISIsIGl0LT50aWxlKTsKLSAgICAgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfdGlsZV9kaXNzb2NpYXRlKHByaXYsIGl0LAorICAgICAgICAgICAgaWYgKGl0ZW0tPnRp
bGUpIHsKKyAgICAgICAgICAgICAgICBDUklUSUNBTCgiaXQtPnRpbGU9JXAsIGJ1dCBpdCBzaG91
bGQgYmUgMCEiLCBpdGVtLT50aWxlKTsKKyAgICAgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfdGlsZV9kaXNzb2NpYXRlKHByaXYsIGl0ZW0sCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0X3VzZWQpOwogICAgICAg
ICAgICAgfQogCiAgICAgICAgICAgICAvKiBEbyBub3QgYWRkIG5ldyByZXF1ZXN0cyB0byB0aGUg
cmVuZGVyIHF1ZXVlICovCiAgICAgICAgICAgICBpZiAoIXByaXYtPnJlbmRlci5zdXNwZW5kKSB7
Ci0gICAgICAgICAgICAgICAgdCA9IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX25ldyhw
cml2LCBtX2NvbCwgbV9yb3csIHpvb20pOwotICAgICAgICAgICAgICAgIGlmICghdCkKKyAgICAg
ICAgICAgICAgICB0aWxlID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfbmV3KHByaXYs
IG1fY29sLCBtX3Jvdywgem9vbSk7CisgICAgICAgICAgICAgICAgaWYgKCF0aWxlKQogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKLSAgICAgICAgICAgICAgICBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9hc3NvY2lhdGUocHJpdiwgdCwgaXQpOworICAgICAgICAg
ICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2Fzc29jaWF0ZShwcml2LCB0aWxl
LCBpdGVtKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmICh0ICE9IGl0LT50aWxl
KSB7Ci0gICAgICAgICAgICBpZiAoaXQtPnRpbGUpCisgICAgICAgIH0gZWxzZSBpZiAodGlsZSAh
PSBpdGVtLT50aWxlKSB7CisgICAgICAgICAgICBpZiAoaXRlbS0+dGlsZSkKICAgICAgICAgICAg
ICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9kaXNzb2NpYXRlKHByaXYsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aXQsIGxhc3RfdXNlZCk7Ci0gICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGls
ZV9hc3NvY2lhdGUocHJpdiwgdCwgaXQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbSwgbGFzdF91c2VkKTsKKyAgICAgICAgICAg
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2Fzc29jaWF0ZShwcml2LCB0aWxlLCBpdGVt
KTsKICAgICAgICAgfQogCi0gICAgICBlbmQ6CitlbmQ6CiAKICAgICAgICAgcmV0dXJuIEVJTkFf
VFJVRTsKICAgICB9CkBAIC00NzEsOSArNDcxLDkgQEAgc3RhdGljIGlubGluZSBFaW5hX0Jvb2wg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZmlsbChFd2tfVGlsZWRfQmFja2luZ19TdG8K
ICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi1zdGF0aWMgRXdrX1RpbGVkX0JhY2tpbmdfU3Rv
cmVfSXRlbSAqX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fYWRkKEV3a19UaWxlZF9CYWNr
aW5nX1N0b3JlX0RhdGEgKnByaXYsIHVuc2lnbmVkIGxvbmcgY29sLCB1bnNpZ25lZCBsb25nIHJv
dykKK3N0YXRpYyBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKiBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfaXRlbV9hZGQoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdiwgdW5z
aWduZWQgbG9uZyBjb2x1bW4sIHVuc2lnbmVkIGxvbmcgcm93KQogewotICAgIEV3a19UaWxlZF9C
YWNraW5nX1N0b3JlX0l0ZW0gKml0OworICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0q
IGl0OwogICAgIEV2YXNfQ29vcmQgeCwgeSwgdHcsIHRoOwogCiAgICAgREJHKCJvPSVwIiwgcHJp
di0+c2VsZik7CkBAIC00ODIsOSArNDgyLDkgQEAgc3RhdGljIEV3a19UaWxlZF9CYWNraW5nX1N0
b3JlX0l0ZW0gKl9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2FkZChFd2tfVGlsZWQKICAg
ICBpZiAoIWl0KQogICAgICAgICByZXR1cm4gMDsKIAotICAgIHR3ID0gcHJpdi0+dmlldy50aWxl
Lnc7Ci0gICAgdGggPSBwcml2LT52aWV3LnRpbGUuaDsKLSAgICB4ID0gcHJpdi0+dmlldy5vZmZz
ZXQuYmFzZS54ICsgcHJpdi0+dmlldy54ICsgdHcgICpjb2w7CisgICAgdHcgPSBwcml2LT52aWV3
LnRpbGUud2lkdGg7CisgICAgdGggPSBwcml2LT52aWV3LnRpbGUuaGVpZ2h0OworICAgIHggPSBw
cml2LT52aWV3Lm9mZnNldC5iYXNlLnggKyBwcml2LT52aWV3LnggKyB0dyAgKmNvbHVtbjsKICAg
ICB5ID0gcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ICsgcHJpdi0+dmlldy55ICsgdGggICpyb3c7
CiAKICAgICBpdC0+dGlsZSA9IDA7CkBAIC00OTIsNyArNDkyLDcgQEAgc3RhdGljIEV3a19UaWxl
ZF9CYWNraW5nX1N0b3JlX0l0ZW0gKl9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2FkZChF
d2tfVGlsZWQKICAgICBpdC0+c21vb3RoX3NjYWxlID0gcHJpdi0+dmlldy50aWxlLnpvb21fd2Vh
a19zbW9vdGhfc2NhbGU7CiAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fbW92ZShp
dCwgeCwgeSk7CiAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcmVzaXplKGl0LCB0
dywgdGgpOwotICAgIGlmICghX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZmlsbChwcml2
LCBpdCwgY29sLCByb3cpKSB7CisgICAgaWYgKCFfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRl
bV9maWxsKHByaXYsIGl0LCBjb2x1bW4sIHJvdykpIHsKICAgICAgICAgZnJlZShpdCk7CiAgICAg
ICAgIHJldHVybiAwOwogICAgIH0KQEAgLTUwMCwyNiArNTAwLDI2IEBAIHN0YXRpYyBFd2tfVGls
ZWRfQmFja2luZ19TdG9yZV9JdGVtICpfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9hZGQo
RXdrX1RpbGVkCiAgICAgcmV0dXJuIGl0OwogfQogCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfaXRlbV9kZWwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwg
RXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQpCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfaXRlbV9kZWwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJp
diwgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSogaXRlbSkKIHsKLSAgICBpZiAoaXQtPnRp
bGUpIHsKKyAgICBpZiAoaXRlbS0+dGlsZSkgewogICAgICAgICBkb3VibGUgbGFzdF91c2VkID0g
ZWNvcmVfbG9vcF90aW1lX2dldCgpOwotICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
dGlsZV9kaXNzb2NpYXRlKHByaXYsIGl0LCBsYXN0X3VzZWQpOworICAgICAgICBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfdGlsZV9kaXNzb2NpYXRlKHByaXYsIGl0ZW0sIGxhc3RfdXNlZCk7CiAg
ICAgfQogCi0gICAgZnJlZShpdCk7CisgICAgZnJlZShpdGVtKTsKIH0KIAotc3RhdGljIHZvaWQg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fc21vb3RoX3NjYWxlX3NldChFd2tfVGlsZWRf
QmFja2luZ19TdG9yZV9JdGVtICppdCwgRWluYV9Cb29sIHNtb290aF9zY2FsZSkKK3N0YXRpYyB2
b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Ntb290aF9zY2FsZV9zZXQoRXdrX1Rp
bGVkX0JhY2tpbmdfU3RvcmVfSXRlbSogaXRlbSwgRWluYV9Cb29sIHNtb290aFNjYWxlKQogewot
ICAgIGlmIChpdC0+c21vb3RoX3NjYWxlID09IHNtb290aF9zY2FsZSkKKyAgICBpZiAoaXRlbS0+
c21vb3RoX3NjYWxlID09IHNtb290aFNjYWxlKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAo
aXQtPnRpbGUpCi0gICAgICAgIGV2YXNfb2JqZWN0X2ltYWdlX3Ntb290aF9zY2FsZV9zZXQoaXQt
PnRpbGUtPmltYWdlLCBzbW9vdGhfc2NhbGUpOworICAgIGlmIChpdGVtLT50aWxlKQorICAgICAg
ICBldmFzX29iamVjdF9pbWFnZV9zbW9vdGhfc2NhbGVfc2V0KGl0ZW0tPnRpbGUtPmltYWdlLCBz
bW9vdGhTY2FsZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfY2hhbmdlZChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2KQorc3RhdGlj
IGlubGluZSB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9jaGFuZ2VkKEV3a19UaWxlZF9C
YWNraW5nX1N0b3JlX0RhdGEqIHByaXYpCiB7CiAgICAgaWYgKHByaXYtPmNoYW5nZWQuYW55KQog
ICAgICAgICByZXR1cm47CkBAIC01MjcsOSArNTI3LDkgQEAgc3RhdGljIGlubGluZSB2b2lkIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9jaGFuZ2VkKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0Rh
dGEKICAgICBwcml2LT5jaGFuZ2VkLmFueSA9IEVJTkFfVFJVRTsKIH0KIAotc3RhdGljIHZvaWQg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfY29sc19lbmRfZGVsKEV3a19UaWxlZF9CYWNr
aW5nX1N0b3JlX0RhdGEgKnByaXYsIEVpbmFfSW5saXN0ICoqcF9yb3csIHVuc2lnbmVkIGludCBj
b3VudCkKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X2NvbHNfZW5k
X2RlbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2LCBFaW5hX0lubGlzdCoqIHBf
cm93LCB1bnNpZ25lZCBpbnQgY291bnQpCiB7Ci0gICAgRWluYV9Jbmxpc3QgKm47CisgICAgRWlu
YV9Jbmxpc3QqIG47CiAgICAgdW5zaWduZWQgaW50IGk7CiAKICAgICBpZiAoIWNvdW50KQpAQCAt
NTM4LDcgKzUzOCw3IEBAIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3
X2NvbHNfZW5kX2RlbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9ECiAgICAgbiA9ICgqcF9yb3cp
LT5sYXN0OwogCiAgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLSAgICAgICAgRXdr
X1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQ7CisgICAgICAgIEV3a19UaWxlZF9CYWNraW5n
X1N0b3JlX0l0ZW0qIGl0OwogICAgICAgICBpdCA9IEVJTkFfSU5MSVNUX0NPTlRBSU5FUl9HRVQo
biwgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSk7CiAgICAgICAgIG4gPSBuLT5wcmV2Owog
ICAgICAgICAqcF9yb3cgPSBlaW5hX2lubGlzdF9yZW1vdmUoKnBfcm93LCBFSU5BX0lOTElTVF9H
RVQoaXQpKTsKQEAgLTU0NiwxNCArNTQ2LDE0IEBAIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV92aWV3X2NvbHNfZW5kX2RlbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9ECiAg
ICAgfQogfQogCi1zdGF0aWMgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3
X2NvbHNfZW5kX2FkZChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFaW5hX0lu
bGlzdCAqKnBfcm93LCB1bnNpZ25lZCBpbnQgYmFzZV9jb2wsIHVuc2lnbmVkIGludCBjb3VudCkK
K3N0YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfY29sc19lbmRf
YWRkKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYsIEVpbmFfSW5saXN0KiogcF9y
b3csIHVuc2lnbmVkIGludCBiYXNlX2NvbHVtbiwgdW5zaWduZWQgaW50IGNvdW50KQogewogICAg
IHVuc2lnbmVkIGludCBpLCByID0gcF9yb3cgLSBwcml2LT52aWV3Lml0ZW1zOwogCi0gICAgZm9y
IChpID0gMDsgaSA8IGNvdW50OyBpKyssIGJhc2VfY29sKyspIHsKLSAgICAgICAgRXdrX1RpbGVk
X0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQ7CisgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyss
IGJhc2VfY29sdW1uKyspIHsKKyAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSog
aXQ7CiAKLSAgICAgICAgaXQgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9hZGQocHJp
diwgYmFzZV9jb2wsIHIpOworICAgICAgICBpdCA9IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9p
dGVtX2FkZChwcml2LCBiYXNlX2NvbHVtbiwgcik7CiAgICAgICAgIGlmICghaXQpIHsKICAgICAg
ICAgICAgIENSSVRJQ0FMKCJmYWlsZWQgdG8gYWRkIGNvbHVtbiAldSBvZiAldSBpbiByb3cgJXUu
IiwgaSwgY291bnQsIHIpOwogICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3Zp
ZXdfY29sc19lbmRfZGVsKHByaXYsIHBfcm93LCBpKTsKQEAgLTU2NSwxNyArNTY1LDE3IEBAIHN0
YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfY29sc19lbmRfYWRk
KEV3a19UaWxlZF9CYWNraW5nX1N0CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotc3RhdGlj
IHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcm93X2RlbChFd2tfVGlsZWRfQmFj
a2luZ19TdG9yZV9EYXRhICpwcml2LCBFaW5hX0lubGlzdCAqcm93KQorc3RhdGljIHZvaWQgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcm93X2RlbChFd2tfVGlsZWRfQmFja2luZ19TdG9y
ZV9EYXRhKiBwcml2LCBFaW5hX0lubGlzdCogcm93KQogewogICAgIHdoaWxlIChyb3cpIHsKLSAg
ICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQ7CisgICAgICAgIEV3a19UaWxl
ZF9CYWNraW5nX1N0b3JlX0l0ZW0qIGl0OwogICAgICAgICBpdCA9IEVJTkFfSU5MSVNUX0NPTlRB
SU5FUl9HRVQocm93LCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKTsKICAgICAgICAgcm93
ID0gcm93LT5uZXh0OwogICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9kZWwo
cHJpdiwgaXQpOwogICAgIH0KIH0KIAotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX3ZpZXdfcm93c19yYW5nZV9kZWwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJp
diwgRWluYV9Jbmxpc3QgKipzdGFydCwgRWluYV9Jbmxpc3QgKiplbmQpCitzdGF0aWMgdm9pZCBf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19yb3dzX3JhbmdlX2RlbChFd2tfVGlsZWRfQmFj
a2luZ19TdG9yZV9EYXRhKiBwcml2LCBFaW5hX0lubGlzdCoqIHN0YXJ0LCBFaW5hX0lubGlzdCoq
IGVuZCkKIHsKICAgICBmb3IgKDsgc3RhcnQgPCBlbmQ7IHN0YXJ0KyspIHsKICAgICAgICAgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcm93X2RlbChwcml2LCAqc3RhcnQpOwpAQCAtNTgz
LDEwICs1ODMsMTAgQEAgc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdf
cm93c19yYW5nZV9kZWwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmUKICAgICB9CiB9CiAKLXN0YXRp
YyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3Jvd3NfYWxsX2RlbChFd2tfVGls
ZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2KQorc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNr
aW5nX3N0b3JlX3ZpZXdfcm93c19hbGxfZGVsKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEq
IHByaXYpCiB7Ci0gICAgRWluYV9Jbmxpc3QgKipzdGFydDsKLSAgICBFaW5hX0lubGlzdCAqKmVu
ZDsKKyAgICBFaW5hX0lubGlzdCoqIHN0YXJ0OworICAgIEVpbmFfSW5saXN0KiogZW5kOwogCiAg
ICAgc3RhcnQgPSBwcml2LT52aWV3Lml0ZW1zOwogICAgIGVuZCA9IHByaXYtPnZpZXcuaXRlbXMg
KyBwcml2LT52aWV3LnJvd3M7CkBAIC01OTgsMjcgKzU5OCwyNyBAQCBzdGF0aWMgdm9pZCBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19yb3dzX2FsbF9kZWwoRXdrX1RpbGVkX0JhY2tpbmdf
U3RvcmVfRAogICAgIHByaXYtPnZpZXcucm93cyA9IDA7CiB9CiAKLXN0YXRpYyB2b2lkIF9ld2tf
dGlsZWRfYmFja2luZ19zdG9yZV9yZW5kZXIodm9pZCAqZGF0YSwgRXdrX1RpbGUgKnQsIGNvbnN0
IEVpbmFfUmVjdGFuZ2xlICphcmVhKQorc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX3JlbmRlcih2b2lkKiBkYXRhLCBFd2tfVGlsZSogdGlsZSwgY29uc3QgRWluYV9SZWN0YW5n
bGUqIGFyZWEpCiB7CiAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdiA9IHN0
YXRpY19jYXN0PEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqPihkYXRhKTsKIAogICAgIElO
RigiVE9ETyAlcCAodmlzaWJsZT8gJWQpIFslbHUsJWx1XSAlZCwlZCArICVkeCVkIiwKLSAgICAg
ICAgdCwgdC0+dmlzaWJsZSwgdC0+Y29sLCB0LT5yb3csIGFyZWEtPngsIGFyZWEtPnksIGFyZWEt
PncsIGFyZWEtPmgpOworICAgICAgICB0aWxlLCB0aWxlLT52aXNpYmxlLCB0aWxlLT5jb2wsIHRp
bGUtPnJvdywgYXJlYS0+eCwgYXJlYS0+eSwgYXJlYS0+dywgYXJlYS0+aCk7CiAKLSAgICBpZiAo
IXQtPnZpc2libGUpCisgICAgaWYgKCF0aWxlLT52aXNpYmxlKQogICAgICAgICByZXR1cm47CiAK
LSAgICBpZiAocHJpdi0+dmlldy50aWxlLncgIT0gdC0+dyB8fCBwcml2LT52aWV3LnRpbGUuaCAh
PSB0LT5oKQorICAgIGlmIChwcml2LT52aWV3LnRpbGUud2lkdGggIT0gdGlsZS0+d2lkdGggfHwg
cHJpdi0+dmlldy50aWxlLmhlaWdodCAhPSB0aWxlLT5oZWlnaHQpCiAgICAgICAgIHJldHVybjsg
Ly8gdG9kbzogcmVtb3ZlIG1lIGxhdGVyLCBkb24ndCBldmVuIGZsYWcgYXMgZGlydHkhCiAKICAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihwcml2LT5yZW5kZXIuY2IpOwotICAgIGlmICgh
cHJpdi0+cmVuZGVyLmNiKHByaXYtPnJlbmRlci5kYXRhLCB0LCBhcmVhKSkKKyAgICBpZiAoIXBy
aXYtPnJlbmRlci5jYihwcml2LT5yZW5kZXIuZGF0YSwgdGlsZSwgYXJlYSkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIGV2YXNfb2JqZWN0X2ltYWdlX2RhdGFfdXBkYXRlX2FkZCh0LT5pbWFnZSwg
YXJlYS0+eCwgYXJlYS0+eSwgYXJlYS0+dywgYXJlYS0+aCk7CisgICAgZXZhc19vYmplY3RfaW1h
Z2VfZGF0YV91cGRhdGVfYWRkKHRpbGUtPmltYWdlLCBhcmVhLT54LCBhcmVhLT55LCBhcmVhLT53
LCBhcmVhLT5oKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9tb2RlbF9tYXRyaXhfY3JlYXRlKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnBy
aXYsIEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjKQorc3RhdGljIGlubGluZSB2b2lkIF9ld2tf
dGlsZWRfYmFja2luZ19zdG9yZV9tb2RlbF9tYXRyaXhfY3JlYXRlKEV3a19UaWxlZF9CYWNraW5n
X1N0b3JlX0RhdGEqIHByaXYsIEV3a19UaWxlX1VudXNlZF9DYWNoZSogdGlsZVVudXNlZENhY2hl
KQogewogICAgIGlmIChwcml2LT5tb2RlbC5tYXRyaXgpIHsKICAgICAgICAgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX3ZpZXdfcm93c19hbGxfZGVsKHByaXYpOwpAQCAtNjI5LDEyICs2MjksMTIg
QEAgc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9tb2RlbF9tYXRy
aXhfY3JlYXRlKEV3a19UaWxlZF9CYWNraW4KICAgICAgICAgZXdrX3RpbGVfbWF0cml4X2ZyZWUo
cHJpdi0+bW9kZWwubWF0cml4KTsKICAgICB9CiAKLSAgICBwcml2LT5tb2RlbC5tYXRyaXggPSBl
d2tfdGlsZV9tYXRyaXhfbmV3KHR1YywgcHJpdi0+bW9kZWwuY3VyLmNvbHMsIHByaXYtPm1vZGVs
LmN1ci5yb3dzLCBwcml2LT5jc3BhY2UsIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9yZW5kZXIs
IHByaXYpOworICAgIHByaXYtPm1vZGVsLm1hdHJpeCA9IGV3a190aWxlX21hdHJpeF9uZXcodGls
ZVVudXNlZENhY2hlLCBwcml2LT5tb2RlbC5jdXIuY29scywgcHJpdi0+bW9kZWwuY3VyLnJvd3Ms
IHByaXYtPmNzcGFjZSwgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3JlbmRlciwgcHJpdik7CiB9
CiAKLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9tZW1iZXJfZGVs
KEV2YXNfT2JqZWN0ICpvLCBFdmFzX09iamVjdCAqbWVtYmVyKQorc3RhdGljIHZvaWQgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X21lbWJlcl9kZWwoRXZhc19PYmplY3QqIGV3a1RpbGUs
IEV2YXNfT2JqZWN0KiBtZW1iZXIpCiB7Ci0gICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywg
cHJpdik7CisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4oZXdrVGlsZSwgcHJpdik7CiAgICAg
aWYgKCFwcml2LT5jb250ZW50c19jbGlwcGVyKQogICAgICAgICByZXR1cm47CiAgICAgZXZhc19v
YmplY3RfY2xpcF91bnNldChtZW1iZXIpOwpAQCAtNjQyLDE4ICs2NDIsMTggQEAgc3RhdGljIHZv
aWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X21lbWJlcl9kZWwoRXZhc19PYmplY3Qg
Km8sIEV2YXNfT2JqZWMKICAgICAgICAgZXZhc19vYmplY3RfaGlkZShwcml2LT5jb250ZW50c19j
bGlwcGVyKTsKIH0KIAotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0
X21lbWJlcl9hZGQoRXZhc19PYmplY3QgKm8sIEV2YXNfT2JqZWN0ICptZW1iZXIpCitzdGF0aWMg
dm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfbWVtYmVyX2FkZChFdmFzX09iamVj
dCogZXdrVGlsZSwgRXZhc19PYmplY3QqIG1lbWJlcikKIHsKLSAgICBQUklWX0RBVEFfR0VUX09S
X1JFVFVSTihvLCBwcml2KTsKKyAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihld2tUaWxlLCBw
cml2KTsKICAgICBpZiAoIXByaXYtPmNvbnRlbnRzX2NsaXBwZXIpCiAgICAgICAgIHJldHVybjsK
ICAgICBldmFzX29iamVjdF9jbGlwX3NldChtZW1iZXIsIHByaXYtPmNvbnRlbnRzX2NsaXBwZXIp
OwotICAgIGlmIChldmFzX29iamVjdF92aXNpYmxlX2dldChvKSkKKyAgICBpZiAoZXZhc19vYmpl
Y3RfdmlzaWJsZV9nZXQoZXdrVGlsZSkpCiAgICAgICAgIGV2YXNfb2JqZWN0X3Nob3cocHJpdi0+
Y29udGVudHNfY2xpcHBlcik7CiB9CiAKICNpZmRlZiBERUJVR19NRU1fTEVBS1MKLXN0YXRpYyB2
b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9tZW1fZGJnKEV3a19UaWxlZF9CYWNraW5nX1N0
b3JlX0RhdGEgKnByaXYpCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfbWVt
X2RiZyhFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2KQogewogICAgIHN0YXRpYyBp
bnQgcnVuID0gMDsKIApAQCAtNjcwLDEzICs2NzAsMTMgQEAgc3RhdGljIHZvaWQgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX21lbV9kYmcoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJp
dikKICAgICBwcmludGYoIi0tLSBFTkQgREVCVUcgVElMRUQgQkFDS0lORyBTVE9SRSBNRU1PUlkg
WyVkXSAtLVxuXG4iLCBydW4pOwogfQogCi1zdGF0aWMgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9zaWdfdXNyKHZvaWQgKmRhdGEsIGludCB0eXBlLCB2b2lkICpldmVudCkKK3N0
YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NpZ191c3Iodm9pZCogZGF0
YSwgaW50IHR5cGUsIHZvaWQqIGV2ZW50KQogewotICAgIEVjb3JlX0V2ZW50X1NpZ25hbF9Vc2Vy
ICpzaWcgPSAoRWNvcmVfRXZlbnRfU2lnbmFsX1VzZXIqKWV2ZW50OwotICAgIEV3a19UaWxlZF9C
YWNraW5nX1N0b3JlX0RhdGEgKnByaXYgPSAoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSop
ZGF0YTsKKyAgICBFY29yZV9FdmVudF9TaWduYWxfVXNlciogc2lnID0gKEVjb3JlX0V2ZW50X1Np
Z25hbF9Vc2VyKilldmVudDsKKyAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2
ID0gKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqKWRhdGE7CiAKICAgICBpZiAoc2lnLT5u
dW1iZXIgPT0gMikgewotICAgICAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YzsKKyAgICAg
ICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0dWM7CiAgICAgICAgIHR1YyA9IGV3a190aWxlX21h
dHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7CiAgICAgICAgIGV3a190
aWxlX3VudXNlZF9jYWNoZV9hdXRvX2ZsdXNoKHR1Yyk7CiAgICAgfQpAQCAtNjg3LDIwICs2ODcs
MjAgQEAgc3RhdGljIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc2lnX3Vzcih2
b2lkICpkYXRhLCBpbnQgdHlwZSwgdm9pZCAqZXYKIH0KICNlbmRpZgogCi1zdGF0aWMgdm9pZCBf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfYWRkKEV2YXNfT2JqZWN0ICpvKQorc3RhdGlj
IHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2FkZChFdmFzX09iamVjdCogZXdr
VGlsZSkKIHsKLSAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2OworICAgIEV3
a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXY7CiAKLSAgICBEQkcoIm89JXAiLCBvKTsK
KyAgICBEQkcoIm89JXAiLCBld2tUaWxlKTsKIAogICAgIHByaXYgPSBzdGF0aWNfY2FzdDxFd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKj4oY2FsbG9jKDEsIHNpemVvZigqcHJpdikpKTsKICAg
ICBpZiAoIXByaXYpCiAgICAgICAgIHJldHVybjsKIAotICAgIHByaXYtPnNlbGYgPSBvOworICAg
IHByaXYtPnNlbGYgPSBld2tUaWxlOwogICAgIHByaXYtPnZpZXcudGlsZS56b29tID0gMS4wOwot
ICAgIHByaXYtPnZpZXcudGlsZS53ID0gREVGQVVMVF9USUxFX1c7Ci0gICAgcHJpdi0+dmlldy50
aWxlLmggPSBERUZBVUxUX1RJTEVfSDsKKyAgICBwcml2LT52aWV3LnRpbGUud2lkdGggPSBERUZB
VUxUX1RJTEVfVzsKKyAgICBwcml2LT52aWV3LnRpbGUuaGVpZ2h0ID0gREVGQVVMVF9USUxFX0g7
CiAgICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggPSAwOwogICAgIHByaXYtPnZpZXcub2Zmc2V0
LmN1ci55ID0gMDsKICAgICBwcml2LT52aWV3Lm9mZnNldC5vbGQueCA9IDA7CkBAIC03MTksMTcg
KzcxOSwxNyBAQCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfYWRk
KEV2YXNfT2JqZWN0ICpvKQogICAgIHByaXYtPnJlbmRlci5zdXNwZW5kID0gRUlOQV9GQUxTRTsK
ICAgICBwcml2LT5jc3BhY2UgPSBFVkFTX0NPTE9SU1BBQ0VfQVJHQjg4ODg7IC8vIFRPRE86IGRl
dGVjdCBpdC4KIAotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2RhdGFfc2V0KG8sIHByaXYpOwotICAg
IF9wYXJlbnRfc2MuYWRkKG8pOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2RhdGFfc2V0KGV3a1Rp
bGUsIHByaXYpOworICAgIF9wYXJlbnRfc2MuYWRkKGV3a1RpbGUpOwogCiAgICAgcHJpdi0+Y29u
dGVudHNfY2xpcHBlciA9IGV2YXNfb2JqZWN0X3JlY3RhbmdsZV9hZGQoCi0gICAgICAgIGV2YXNf
b2JqZWN0X2V2YXNfZ2V0KG8pKTsKKyAgICAgICAgZXZhc19vYmplY3RfZXZhc19nZXQoZXdrVGls
ZSkpOwogICAgIGV2YXNfb2JqZWN0X21vdmUocHJpdi0+Y29udGVudHNfY2xpcHBlciwgMCwgMCk7
CiAgICAgZXZhc19vYmplY3RfcmVzaXplKHByaXYtPmNvbnRlbnRzX2NsaXBwZXIsCiAgICAgICAg
ICAgICAgICAgICAgICAgIHByaXYtPm1vZGVsLndpZHRoLCBwcml2LT5tb2RlbC5oZWlnaHQpOwog
ICAgIGV2YXNfb2JqZWN0X2NvbG9yX3NldChwcml2LT5jb250ZW50c19jbGlwcGVyLCAyNTUsIDI1
NSwgMjU1LCAyNTUpOwogICAgIGV2YXNfb2JqZWN0X3Nob3cocHJpdi0+Y29udGVudHNfY2xpcHBl
cik7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfbWVtYmVyX2FkZChwcml2LT5jb250ZW50c19jbGlw
cGVyLCBvKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9tZW1iZXJfYWRkKHByaXYtPmNvbnRlbnRz
X2NsaXBwZXIsIGV3a1RpbGUpOwogCiAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX21vZGVs
X21hdHJpeF9jcmVhdGUocHJpdiwgMCk7CiAgICAgZXZhc19vYmplY3RfbW92ZShwcml2LT5iYXNl
LmNsaXBwZXIsIDAsIDApOwpAQCAtNzM4LDE1ICs3MzgsMTUgQEAgc3RhdGljIHZvaWQgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2FkZChFdmFzX09iamVjdCAqbykKIAogI2lmZGVmIERF
QlVHX01FTV9MRUFLUwogICAgIHByaXYtPnNpZ191c3IgPSBlY29yZV9ldmVudF9oYW5kbGVyX2Fk
ZAotICAgICAgICAoRUNPUkVfRVZFTlRfU0lHTkFMX1VTRVIsIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9zaWdfdXNyLCBwcml2KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIChFQ09SRV9FVkVO
VF9TSUdOQUxfVVNFUiwgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NpZ191c3IsIHByaXYpOwog
I2VuZGlmCiB9CiAKLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9k
ZWwoRXZhc19PYmplY3QgKm8pCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
c21hcnRfZGVsKEV2YXNfT2JqZWN0KiBld2tUaWxlKQogewotICAgIFBSSVZfREFUQV9HRVRfT1Jf
UkVUVVJOKG8sIHByaXYpOwotICAgIERCRygibz0lcCIsIG8pOwotICAgIEV3a19UaWxlX1VudXNl
ZF9DYWNoZSAqdHVjOworICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKGV3a1RpbGUsIHByaXYp
OworICAgIERCRygibz0lcCIsIGV3a1RpbGUpOworICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSog
dHVjOwogCiAgICAgdHVjID0gZXdrX3RpbGVfbWF0cml4X3VudXNlZF9jYWNoZV9nZXQocHJpdi0+
bW9kZWwubWF0cml4KTsKICAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfdW5sb2NrX2FyZWEodHVj
KTsKQEAgLTc2Nyw3ICs3NjcsNyBAQCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfc21hcnRfZGVsKEV2YXNfT2JqZWN0ICpvKQogICAgIGV2YXNfb2JqZWN0X3NtYXJ0X21lbWJl
cl9kZWwocHJpdi0+Y29udGVudHNfY2xpcHBlcik7CiAgICAgZXZhc19vYmplY3RfZGVsKHByaXYt
PmNvbnRlbnRzX2NsaXBwZXIpOwogCi0gICAgX3BhcmVudF9zYy5kZWwobyk7CisgICAgX3BhcmVu
dF9zYy5kZWwoZXdrVGlsZSk7CiAKICNpZmRlZiBERUJVR19NRU1fTEVBS1MKICAgICBwcmludGYo
IlxuSU1QT1JUQU5UOiBUSUxFRCBCQUNLSU5HIFNUT1JFIERFTEVURUQgKG1heSBiZSByZWFsIGxl
YWtzKVxuIik7CkBAIC03NzUsMTEgKzc3NSwxMSBAQCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfc21hcnRfZGVsKEV2YXNfT2JqZWN0ICpvKQogI2VuZGlmCiB9CiAKLXN0YXRp
YyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9tb3ZlKEV2YXNfT2JqZWN0ICpv
LCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSkKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9zbWFydF9tb3ZlKEV2YXNfT2JqZWN0KiBld2tUaWxlLCBFdmFzX0Nvb3JkIHgs
IEV2YXNfQ29vcmQgeSkKIHsKLSAgICBEQkcoIm89JXAsIG5ldyBwb3M6ICVkeCVkIiwgbywgeCwg
eSk7CisgICAgREJHKCJvPSVwLCBuZXcgcG9zOiAlZHglZCIsIGV3a1RpbGUsIHgsIHkpOwogCi0g
ICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdik7CisgICAgUFJJVl9EQVRBX0dFVF9P
Ul9SRVRVUk4oZXdrVGlsZSwgcHJpdik7CiAKICAgICBpZiAocHJpdi0+Y2hhbmdlZC5wb3MpCiAg
ICAgICAgIHJldHVybjsKQEAgLTc5MSwyOSArNzkxLDI5IEBAIHN0YXRpYyB2b2lkIF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9zbWFydF9tb3ZlKEV2YXNfT2JqZWN0ICpvLCBFdmFzX0Nvb3JkIHgs
IEV2CiAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2NoYW5nZWQocHJpdik7CiB9CiAKLXN0
YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9yZXNpemUoRXZhc19PYmpl
Y3QgKm8sIEV2YXNfQ29vcmQgdywgRXZhc19Db29yZCBoKQorc3RhdGljIHZvaWQgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX3NtYXJ0X3Jlc2l6ZShFdmFzX09iamVjdCogZXdrVGlsZSwgRXZhc19D
b29yZCB3aWR0aCwgRXZhc19Db29yZCBoZWlnaHQpCiB7Ci0gICAgREJHKCJvPSVwLCBuZXcgc2l6
ZTogJWR4JWQiLCBvLCB3LCBoKTsKKyAgICBEQkcoIm89JXAsIG5ldyBzaXplOiAlZHglZCIsIGV3
a1RpbGUsIHdpZHRoLCBoZWlnaHQpOwogCi0gICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywg
cHJpdik7CisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4oZXdrVGlsZSwgcHJpdik7CiAKICAg
ICBpZiAocHJpdi0+Y2hhbmdlZC5zaXplKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAocHJp
di0+dmlldy53ID09IHcgJiYgcHJpdi0+dmlldy5oID09IGgpCisgICAgaWYgKHByaXYtPnZpZXcu
d2lkdGggPT0gd2lkdGggJiYgcHJpdi0+dmlldy5oZWlnaHQgPT0gaGVpZ2h0KQogICAgICAgICBy
ZXR1cm47CiAKICAgICBwcml2LT5jaGFuZ2VkLnNpemUgPSBFSU5BX1RSVUU7CiAgICAgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX2NoYW5nZWQocHJpdik7CiB9CiAKLXN0YXRpYyB2b2lkIF9ld2tf
dGlsZWRfYmFja2luZ19zdG9yZV9yZWNhbGNfcmVuZGVyZXJzKEV3a19UaWxlZF9CYWNraW5nX1N0
b3JlX0RhdGEgKnByaXYsIEV2YXNfQ29vcmQgdywgRXZhc19Db29yZCBoLCBFdmFzX0Nvb3JkIHR3
LCBFdmFzX0Nvb3JkIHRoKQorc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3Jl
Y2FsY19yZW5kZXJlcnMoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdiwgRXZhc19D
b29yZCB3aWR0aCwgRXZhc19Db29yZCBoZWlnaHQsIEV2YXNfQ29vcmQgdGlsZVdpZHRoLCBFdmFz
X0Nvb3JkIHRpbGVIZWlnaHQpCiB7CiAgICAgbG9uZyBjb2xzLCByb3dzLCBvbGRfcm93cywgb2xk
X2NvbHM7Ci0gICAgSU5GKCJvPSVwLCBuZXcgc2l6ZTogJWR4JWQiLCBwcml2LT5zZWxmLCB3LCBo
KTsKKyAgICBJTkYoIm89JXAsIG5ldyBzaXplOiAlZHglZCIsIHByaXYtPnNlbGYsIHdpZHRoLCBo
ZWlnaHQpOwogCi0gICAgY29scyA9IDEgKyAoaW50KWNlaWwoKGZsb2F0KXcgLyAoZmxvYXQpdHcp
OwotICAgIHJvd3MgPSAxICsgKGludCljZWlsKChmbG9hdCloIC8gKGZsb2F0KXRoKTsKKyAgICBj
b2xzID0gMSArIHN0YXRpY19jYXN0PGludD4oY2VpbChzdGF0aWNfY2FzdDxmbG9hdD4od2lkdGgg
LyB0aWxlV2lkdGgpKSk7CisgICAgcm93cyA9IDEgKyBzdGF0aWNfY2FzdDxpbnQ+KGNlaWwoc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KGhlaWdodCAvIHRpbGVIZWlnaHQpKSk7CiAKICAgICBJTkYoIm89JXAg
bmV3IGdyaWQgc2l6ZSBjb2xzOiAlbGQsIHJvd3M6ICVsZCwgd2FzICVsZCwgJWxkIiwKICAgICAg
ICAgcHJpdi0+c2VsZiwgY29scywgcm93cywgcHJpdi0+dmlldy5jb2xzLCBwcml2LT52aWV3LnJv
d3MpOwpAQCAtODI1LDcgKzgyNSw3IEBAIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9yZWNhbGNfcmVuZGVyZXJzKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhCiAgICAgb2xk
X3Jvd3MgPSBwcml2LT52aWV3LnJvd3M7CiAKICAgICBpZiAocm93cyA8IG9sZF9yb3dzKSB7Ci0g
ICAgICAgIEVpbmFfSW5saXN0ICoqc3RhcnQsICoqZW5kOworICAgICAgICBFaW5hX0lubGlzdCoq
IHN0YXJ0LCAqKmVuZDsKICAgICAgICAgc3RhcnQgPSBwcml2LT52aWV3Lml0ZW1zICsgcm93czsK
ICAgICAgICAgZW5kID0gcHJpdi0+dmlldy5pdGVtcyArIG9sZF9yb3dzOwogICAgICAgICBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19yb3dzX3JhbmdlX2RlbChwcml2LCBzdGFydCwgZW5k
KTsKQEAgLTgzOSwxOCArODM5LDE0IEBAIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9yZWNhbGNfcmVuZGVyZXJzKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhCiAgICAgcHJp
di0+dmlldy5yb3dzID0gcm93czsKICAgICBwcml2LT52aWV3LmNvbHMgPSBjb2xzOwogICAgIGlm
IChyb3dzID4gb2xkX3Jvd3MpIHsKLSAgICAgICAgRWluYV9Jbmxpc3QgKipzdGFydCwgKiplbmQ7
Ci0gICAgICAgIHN0YXJ0ID0gcHJpdi0+dmlldy5pdGVtcyArIG9sZF9yb3dzOwotICAgICAgICBl
bmQgPSBwcml2LT52aWV3Lml0ZW1zICsgcm93czsKKyAgICAgICAgRWluYV9Jbmxpc3QqKiBzdGFy
dCA9IHByaXYtPnZpZXcuaXRlbXMgKyBvbGRfcm93czsKKyAgICAgICAgRWluYV9Jbmxpc3QqKiBl
bmQgPSBwcml2LT52aWV3Lml0ZW1zICsgcm93czsKICAgICAgICAgZm9yICg7IHN0YXJ0IDwgZW5k
OyBzdGFydCsrKSB7Ci0gICAgICAgICAgICBFaW5hX0Jvb2wgcjsKICAgICAgICAgICAgICpzdGFy
dCA9IDA7Ci0gICAgICAgICAgICByID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfY29s
c19lbmRfYWRkCi0gICAgICAgICAgICAgICAgKHByaXYsIHN0YXJ0LCAwLCBjb2xzKTsKKyAgICAg
ICAgICAgIEVpbmFfQm9vbCByID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfY29sc19l
bmRfYWRkKHByaXYsIHN0YXJ0LCAwLCBjb2xzKTsKICAgICAgICAgICAgIGlmICghcikgewogICAg
ICAgICAgICAgICAgIENSSVRJQ0FMKCJmYWlsZWQgdG8gYWxsb2NhdGUgJWxkIGNvbHVtbnMiLCBj
b2xzKTsKLSAgICAgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19yb3dz
X3JhbmdlX2RlbAotICAgICAgICAgICAgICAgICAgICAocHJpdiwgcHJpdi0+dmlldy5pdGVtcyAr
IG9sZF9yb3dzLCBzdGFydCk7CisgICAgICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX3ZpZXdfcm93c19yYW5nZV9kZWwocHJpdiwgcHJpdi0+dmlldy5pdGVtcyArIG9sZF9yb3dz
LCBzdGFydCk7CiAgICAgICAgICAgICAgICAgcHJpdi0+dmlldy5yb3dzID0gb2xkX3Jvd3M7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQpAQCAtODU4LDE1ICs4NTQsMTIg
QEAgc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3JlY2FsY19yZW5kZXJlcnMo
RXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGEKICAgICB9CiAKICAgICBpZiAoY29scyAhPSBvbGRf
Y29scykgewotICAgICAgICBFaW5hX0lubGlzdCAqKnN0YXJ0LCAqKmVuZDsKICAgICAgICAgaW50
IHRvZG8gPSBjb2xzIC0gb2xkX2NvbHM7Ci0gICAgICAgIHN0YXJ0ID0gcHJpdi0+dmlldy5pdGVt
czsKLSAgICAgICAgZW5kID0gc3RhcnQgKyBzdGQ6Om1pbihvbGRfcm93cywgcm93cyk7CisgICAg
ICAgIEVpbmFfSW5saXN0Kiogc3RhcnQgPSBwcml2LT52aWV3Lml0ZW1zOworICAgICAgICBFaW5h
X0lubGlzdCoqIGVuZCA9IHN0YXJ0ICsgc3RkOjptaW4ob2xkX3Jvd3MsIHJvd3MpOwogICAgICAg
ICBpZiAodG9kbyA+IDApIHsKICAgICAgICAgICAgIGZvciAoOyBzdGFydCA8IGVuZDsgc3RhcnQr
KykgewotICAgICAgICAgICAgICAgIEVpbmFfQm9vbCByOwotICAgICAgICAgICAgICAgIHIgPSBf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19jb2xzX2VuZF9hZGQKLSAgICAgICAgICAgICAg
ICAgICAgKHByaXYsIHN0YXJ0LCBvbGRfY29scywgdG9kbyk7CisgICAgICAgICAgICAgICAgRWlu
YV9Cb29sIHIgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19jb2xzX2VuZF9hZGQocHJp
diwgc3RhcnQsIG9sZF9jb2xzLCB0b2RvKTsKICAgICAgICAgICAgICAgICBpZiAoIXIpIHsKICAg
ICAgICAgICAgICAgICAgICAgQ1JJVElDQUwoImZhaWxlZCB0byBhbGxvY2F0ZSAlZCBjb2x1bW5z
ISIsIHRvZG8pOwogCkBAIC04OTEsMjEgKzg4NCwyMSBAQCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfcmVjYWxjX3JlbmRlcmVycyhFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9E
YQogICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9maWxsX3JlbmRlcmVycyhwcml2KTsKIH0K
IAotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZV9z
aXplKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIEV2YXNfQ29vcmQgdywgRXZh
c19Db29yZCBoKQorc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2Nh
bGN1bGF0ZV9zaXplKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYsIEV2YXNfQ29v
cmQgd2lkdGgsIEV2YXNfQ29vcmQgaGVpZ2h0KQogewotICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShw
cml2LT5iYXNlLmNsaXBwZXIsIHcsIGgpOworICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShwcml2LT5i
YXNlLmNsaXBwZXIsIHdpZHRoLCBoZWlnaHQpOwogCi0gICAgcHJpdi0+dmlldy53ID0gdzsKLSAg
ICBwcml2LT52aWV3LmggPSBoOworICAgIHByaXYtPnZpZXcud2lkdGggPSB3aWR0aDsKKyAgICBw
cml2LT52aWV3LmhlaWdodCA9IGhlaWdodDsKIAogICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV9yZWNhbGNfcmVuZGVyZXJzKAotICAgICAgICBwcml2LCB3LCBoLCBwcml2LT52aWV3LnRpbGUu
dywgcHJpdi0+dmlldy50aWxlLmgpOworICAgICAgICBwcml2LCB3aWR0aCwgaGVpZ2h0LCBwcml2
LT52aWV3LnRpbGUud2lkdGgsIHByaXYtPnZpZXcudGlsZS5oZWlnaHQpOwogfQogCiAvLyBUT0RP
OiByZW1vdmUgbWUgbGF0ZXIuCi1zdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlZF9iYWNraW5n
X3N0b3JlX3ZpZXdfZGJnKGNvbnN0IEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYp
CitzdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfZGJnKGNv
bnN0IEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYpCiB7Ci0gICAgRWluYV9Jbmxp
c3QgKipzdGFydCwgKiplbmQ7CisgICAgRWluYV9Jbmxpc3QqKiBzdGFydCwgKiplbmQ7CiAgICAg
cHJpbnRmKCJ0aWxlcz0lMmxkLCUybGQgIG1vZGVsPSUybGQsJTJsZCBbJWR4JWRdIGJhc2U9JSsz
bGQsJSs0bGQgb2Zmc2V0PSUrNGQsJSs0ZCBvbGQ9JSs0ZCwlKzRkIGJhc2U9JSszZCwlKzNkXG4i
LAogICAgICAgICAgICBwcml2LT52aWV3LmNvbHMsIHByaXYtPnZpZXcucm93cywKICAgICAgICAg
ICAgcHJpdi0+bW9kZWwuY3VyLmNvbHMsIHByaXYtPm1vZGVsLmN1ci5yb3dzLApAQCAtOTE4LDcg
KzkxMSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmll
d19kYmcoY29uc3QgRXdrX1RpbGVkX0JhY2tpbmdfU3RvCiAgICAgc3RhcnQgPSBwcml2LT52aWV3
Lml0ZW1zOwogICAgIGVuZCA9IHByaXYtPnZpZXcuaXRlbXMgKyBwcml2LT52aWV3LnJvd3M7CiAg
ICAgZm9yICg7IHN0YXJ0IDwgZW5kOyBzdGFydCsrKSB7Ci0gICAgICAgIGNvbnN0IEV3a19UaWxl
ZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0OworICAgICAgICBjb25zdCBFd2tfVGlsZWRfQmFja2lu
Z19TdG9yZV9JdGVtKiBpdDsKIAogICAgICAgICBFSU5BX0lOTElTVF9GT1JFQUNIKCpzdGFydCwg
aXQpIHsKICAgICAgICAgICAgIHByaW50ZigiICUrNGQsJSs0ZCAiLCBpdC0+Z2VvbWV0cnkueCwg
aXQtPmdlb21ldHJ5LnkpOwpAQCAtOTQ2LDIyICs5MzksMjIgQEAgc3RhdGljIGlubGluZSB2b2lk
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X2RiZyhjb25zdCBFd2tfVGlsZWRfQmFja2lu
Z19TdG8KICAqCiAgKiBAcGFyYW0gY291bnQgdGhlIG51bWJlciBvZiB0aW1lcyB0byByZXBlYXQg
dGhlIHByb2Nlc3MuCiAgKi8KLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92
aWV3X3dyYXBfdXAoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgRXZhc19Db29y
ZCB4LCBFdmFzX0Nvb3JkIHksIHVuc2lnbmVkIGludCBjb3VudCkKK3N0YXRpYyB2b2lkIF9ld2tf
dGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3dyYXBfdXAoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVf
RGF0YSogcHJpdiwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHksIHVuc2lnbmVkIGludCBjb3Vu
dCkKIHsKICAgICB1bnNpZ25lZCBpbnQgbGFzdF9yb3cgPSBwcml2LT52aWV3LnJvd3MgLSAxOwot
ICAgIEV2YXNfQ29vcmQgdHcgPSBwcml2LT52aWV3LnRpbGUudzsKLSAgICBFdmFzX0Nvb3JkIHRo
ID0gcHJpdi0+dmlldy50aWxlLmg7CisgICAgRXZhc19Db29yZCB0dyA9IHByaXYtPnZpZXcudGls
ZS53aWR0aDsKKyAgICBFdmFzX0Nvb3JkIHRoID0gcHJpdi0+dmlldy50aWxlLmhlaWdodDsKICAg
ICBFdmFzX0Nvb3JkIG9mZl95ID0gcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ICsgY291bnQgKiB0
aDsKICAgICBFdmFzX0Nvb3JkIG95ID0geSArIChsYXN0X3JvdyAtIGNvdW50ICsgMSkgKiB0aCAr
IG9mZl95OwotICAgIEVpbmFfSW5saXN0ICoqaXRyX3N0YXJ0LCAqKml0cl9lbmQ7CisgICAgRWlu
YV9Jbmxpc3QqKiBpdHJfc3RhcnQsICoqaXRyX2VuZDsKIAogICAgIGl0cl9zdGFydCA9IHByaXYt
PnZpZXcuaXRlbXM7CiAgICAgaXRyX2VuZCA9IGl0cl9zdGFydCArIGxhc3Rfcm93OwogCiAgICAg
Zm9yICg7IGNvdW50ID4gMDsgY291bnQtLSkgewotICAgICAgICBFaW5hX0lubGlzdCAqKml0cjsK
LSAgICAgICAgRWluYV9Jbmxpc3QgKnRtcCA9ICppdHJfc3RhcnQ7Ci0gICAgICAgIEV3a19UaWxl
ZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0OworICAgICAgICBFaW5hX0lubGlzdCoqIGl0cjsKKyAg
ICAgICAgRWluYV9Jbmxpc3QqIHRtcCA9ICppdHJfc3RhcnQ7CisgICAgICAgIEV3a19UaWxlZF9C
YWNraW5nX1N0b3JlX0l0ZW0qIGl0OwogICAgICAgICBFdmFzX0Nvb3JkIG94ID0geCArIHByaXYt
PnZpZXcub2Zmc2V0LmJhc2UueDsKICAgICAgICAgaW50IGMgPSAwOwogCkBAIC05OTQsMjEgKzk4
NywyMSBAQCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld193cmFwX3Vw
KEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKgogICoKICAqIEBwYXJhbSBjb3VudCB0aGUg
bnVtYmVyIG9mIHRpbWVzIHRvIHJlcGVhdCB0aGUgcHJvY2Vzcy4KICAqLwotc3RhdGljIHZvaWQg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfd3JhcF9kb3duKEV3a19UaWxlZF9CYWNraW5n
X1N0b3JlX0RhdGEgKnByaXYsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5LCB1bnNpZ25lZCBp
bnQgY291bnQpCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld193cmFw
X2Rvd24oRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdiwgRXZhc19Db29yZCB4LCBF
dmFzX0Nvb3JkIHksIHVuc2lnbmVkIGludCBjb3VudCkKIHsKLSAgICBFdmFzX0Nvb3JkIHR3ID0g
cHJpdi0+dmlldy50aWxlLnc7Ci0gICAgRXZhc19Db29yZCB0aCA9IHByaXYtPnZpZXcudGlsZS5o
OworICAgIEV2YXNfQ29vcmQgdHcgPSBwcml2LT52aWV3LnRpbGUud2lkdGg7CisgICAgRXZhc19D
b29yZCB0aCA9IHByaXYtPnZpZXcudGlsZS5oZWlnaHQ7CiAgICAgRXZhc19Db29yZCBvZmZfeSA9
IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSAtIGNvdW50ICogdGg7CiAgICAgRXZhc19Db29yZCBv
eSA9IHkgKyBvZmZfeSArIChjb3VudCAtIDEpICogdGg7Ci0gICAgRWluYV9Jbmxpc3QgKippdHJf
c3RhcnQsICoqaXRyX2VuZDsKKyAgICBFaW5hX0lubGlzdCoqIGl0cl9zdGFydCwgKippdHJfZW5k
OwogCiAgICAgaXRyX3N0YXJ0ID0gcHJpdi0+dmlldy5pdGVtcyArIHByaXYtPnZpZXcucm93cyAt
IDE7CiAgICAgaXRyX2VuZCA9IHByaXYtPnZpZXcuaXRlbXM7CiAKICAgICBmb3IgKDsgY291bnQg
PiAwOyBjb3VudC0tKSB7Ci0gICAgICAgIEVpbmFfSW5saXN0ICoqaXRyOwotICAgICAgICBFaW5h
X0lubGlzdCAqdG1wID0gKml0cl9zdGFydDsKLSAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3Rv
cmVfSXRlbSAqaXQ7CisgICAgICAgIEVpbmFfSW5saXN0KiogaXRyOworICAgICAgICBFaW5hX0lu
bGlzdCogdG1wID0gKml0cl9zdGFydDsKKyAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVf
SXRlbSogaXQ7CiAgICAgICAgIEV2YXNfQ29vcmQgb3ggPSB4ICsgcHJpdi0+dmlldy5vZmZzZXQu
YmFzZS54OwogICAgICAgICBpbnQgYyA9IDA7CiAKQEAgLTEwNDEsMTUgKzEwMzQsMTUgQEAgc3Rh
dGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfd3JhcF9kb3duKEV3a19UaWxl
ZF9CYWNraW5nX1N0b3JlX0RhdGEKICAqCiAgKiBAcGFyYW0gY291bnQgdGhlIG51bWJlciBvZiB0
aW1lcyB0byByZXBlYXQgdGhlIHByb2Nlc3MuCiAgKi8KLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV92aWV3X3dyYXBfbGVmdChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRh
ICpwcml2LCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwgdW5zaWduZWQgaW50IGNvdW50KQor
c3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfd3JhcF9sZWZ0KEV3a19U
aWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5
LCB1bnNpZ25lZCBpbnQgY291bnQpCiB7CiAgICAgdW5zaWduZWQgaW50IHIsIGxhc3RfY29sID0g
cHJpdi0+dmlldy5jb2xzIC0gMTsKLSAgICBFdmFzX0Nvb3JkIHR3ID0gcHJpdi0+dmlldy50aWxl
Lnc7Ci0gICAgRXZhc19Db29yZCB0aCA9IHByaXYtPnZpZXcudGlsZS5oOworICAgIEV2YXNfQ29v
cmQgdHcgPSBwcml2LT52aWV3LnRpbGUud2lkdGg7CisgICAgRXZhc19Db29yZCB0aCA9IHByaXYt
PnZpZXcudGlsZS5oZWlnaHQ7CiAgICAgRXZhc19Db29yZCBvZmZfeCA9IHByaXYtPnZpZXcub2Zm
c2V0LmJhc2UueCArIGNvdW50ICogdHc7CiAgICAgRXZhc19Db29yZCBveSA9IHkgKyBwcml2LT52
aWV3Lm9mZnNldC5iYXNlLnk7Ci0gICAgRWluYV9Jbmxpc3QgKippdHI7Ci0gICAgRWluYV9Jbmxp
c3QgKippdHJfZW5kOworICAgIEVpbmFfSW5saXN0KiogaXRyOworICAgIEVpbmFfSW5saXN0Kiog
aXRyX2VuZDsKIAogICAgIGl0ciA9IHByaXYtPnZpZXcuaXRlbXM7CiAgICAgaXRyX2VuZCA9IGl0
ciArIHByaXYtPnZpZXcucm93czsKQEAgLTEwNjIsNyArMTA1NSw3IEBAIHN0YXRpYyB2b2lkIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3dyYXBfbGVmdChFd2tfVGlsZWRfQmFja2luZ19T
dG9yZV9EYXRhCiAgICAgICAgIHVuc2lnbmVkIGludCBpLCBjID0gbGFzdF9jb2wgLSBjb3VudCAr
IDE7CiAKICAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyssIGMrKywgb3ggKz0gdHcp
IHsKLSAgICAgICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0OworICAgICAg
ICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSogaXQ7CiAgICAgICAgICAgICBpdCA9
IEVJTkFfSU5MSVNUX0NPTlRBSU5FUl9HRVQoKml0ciwgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVf
SXRlbSk7CiAgICAgICAgICAgICAqaXRyID0gZWluYV9pbmxpc3RfZGVtb3RlKCppdHIsICppdHIp
OwogCkBAIC0xMDg4LDE0ICsxMDgxLDE0IEBAIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV92aWV3X3dyYXBfbGVmdChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhCiAgKgog
ICogQHBhcmFtIGNvdW50IHRoZSBudW1iZXIgb2YgdGltZXMgdG8gcmVwZWF0IHRoZSBwcm9jZXNz
LgogICovCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld193cmFwX3Jp
Z2h0KEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIEV2YXNfQ29vcmQgeCwgRXZh
c19Db29yZCB5LCB1bnNpZ25lZCBpbnQgY291bnQpCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfdmlld193cmFwX3JpZ2h0KEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEq
IHByaXYsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5LCB1bnNpZ25lZCBpbnQgY291bnQpCiB7
CiAgICAgdW5zaWduZWQgaW50IHI7Ci0gICAgRXZhc19Db29yZCB0dyA9IHByaXYtPnZpZXcudGls
ZS53OwotICAgIEV2YXNfQ29vcmQgdGggPSBwcml2LT52aWV3LnRpbGUuaDsKKyAgICBFdmFzX0Nv
b3JkIHR3ID0gcHJpdi0+dmlldy50aWxlLndpZHRoOworICAgIEV2YXNfQ29vcmQgdGggPSBwcml2
LT52aWV3LnRpbGUuaGVpZ2h0OwogICAgIEV2YXNfQ29vcmQgb2ZmX3ggPSBwcml2LT52aWV3Lm9m
ZnNldC5iYXNlLnggLSBjb3VudCAqIHR3OwogICAgIEV2YXNfQ29vcmQgb3kgPSB5ICsgcHJpdi0+
dmlldy5vZmZzZXQuYmFzZS55OwotICAgIEVpbmFfSW5saXN0ICoqaXRyLCAqKml0cl9lbmQ7Cisg
ICAgRWluYV9Jbmxpc3QqKiBpdHIsICoqIGl0cl9lbmQ7CiAKICAgICBpdHIgPSBwcml2LT52aWV3
Lml0ZW1zOwogICAgIGl0cl9lbmQgPSBpdHIgKyBwcml2LT52aWV3LnJvd3M7CkBAIC0xMTA4LDcg
KzExMDEsNyBAQCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld193cmFw
X3JpZ2h0KEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdAogICAgICAgICB1bnNpZ25lZCBpbnQg
aSwgYyA9IGNvdW50IC0gMTsKIAogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKywg
Yy0tLCBveCAtPSB0dykgewotICAgICAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRl
bSAqaXQ7CisgICAgICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKiBpdDsKICAg
ICAgICAgICAgIGl0ID0gRUlOQV9JTkxJU1RfQ09OVEFJTkVSX0dFVCgoKml0ciktPmxhc3QsIEV3
a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0pOwogICAgICAgICAgICAgKml0ciA9IGVpbmFfaW5s
aXN0X3Byb21vdGUoKml0ciwgKCppdHIpLT5sYXN0KTsKIApAQCAtMTEyMSwxNiArMTExNCwxNiBA
QCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld193cmFwX3JpZ2h0KEV3
a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdAogICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCA9
IG9mZl94OwogfQogCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19y
ZWZpbGwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgRXZhc19Db29yZCB4LCBF
dmFzX0Nvb3JkIHksIGludCBzdGVwX3gsIGludCBzdGVwX3kpCitzdGF0aWMgdm9pZCBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfdmlld19yZWZpbGwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0
YSogcHJpdiwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHksIGludCBzdGVwWCwgaW50IHN0ZXBZ
KQogewotICAgIEVpbmFfSW5saXN0ICoqaXRyLCAqKml0cl9lbmQ7CisgICAgRWluYV9Jbmxpc3Qq
KiBpdHIsICoqaXRyX2VuZDsKICAgICBFdmFzX0Nvb3JkIGJhc2Vfb3gsIG95LCB0dywgdGg7CiAg
ICAgdW5zaWduZWQgaW50IHI7CiAKICAgICBldmFzX29iamVjdF9tb3ZlKHByaXYtPmJhc2UuY2xp
cHBlciwgeCwgeSk7CiAKLSAgICB0dyA9IHByaXYtPnZpZXcudGlsZS53OwotICAgIHRoID0gcHJp
di0+dmlldy50aWxlLmg7CisgICAgdHcgPSBwcml2LT52aWV3LnRpbGUud2lkdGg7CisgICAgdGgg
PSBwcml2LT52aWV3LnRpbGUuaGVpZ2h0OwogCiAgICAgYmFzZV9veCA9IHggKyBwcml2LT52aWV3
Lm9mZnNldC5iYXNlLng7CiAgICAgb3kgPSB5ICsgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55OwpA
QCAtMTEzOSwxMSArMTEzMiwxMSBAQCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfdmlld19yZWZpbGwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcAogICAgIGl0cl9l
bmQgPSBpdHIgKyBwcml2LT52aWV3LnJvd3M7CiAgICAgciA9IDA7CiAKLSAgICBwcml2LT5tb2Rl
bC5iYXNlLmNvbCAtPSBzdGVwX3g7Ci0gICAgcHJpdi0+bW9kZWwuYmFzZS5yb3cgLT0gc3RlcF95
OworICAgIHByaXYtPm1vZGVsLmJhc2UuY29sIC09IHN0ZXBYOworICAgIHByaXYtPm1vZGVsLmJh
c2Uucm93IC09IHN0ZXBZOwogCiAgICAgZm9yICg7IGl0ciA8IGl0cl9lbmQ7IGl0cisrLCByKysp
IHsKLSAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQ7CisgICAgICAgIEV3
a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0qIGl0OwogICAgICAgICBFdmFzX0Nvb3JkIG94ID0g
YmFzZV9veDsKICAgICAgICAgdW5zaWduZWQgaW50IGMgPSAwOwogICAgICAgICBFSU5BX0lOTElT
VF9GT1JFQUNIKCppdHIsIGl0KSB7CkBAIC0xMTU2LDE1ICsxMTQ5LDE1IEBAIHN0YXRpYyB2b2lk
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3JlZmlsbChFd2tfVGlsZWRfQmFja2luZ19T
dG9yZV9EYXRhICpwCiAgICAgfQogfQogCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfdmlld19wb3NfYXBwbHkoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwg
RXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHkpCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfdmlld19wb3NfYXBwbHkoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJp
diwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHkpCiB7Ci0gICAgRWluYV9Jbmxpc3QgKippdHIs
ICoqaXRyX2VuZDsKKyAgICBFaW5hX0lubGlzdCoqIGl0ciwgKippdHJfZW5kOwogICAgIEV2YXNf
Q29vcmQgYmFzZV9veCwgb3ksIHR3LCB0aDsKIAogICAgIGV2YXNfb2JqZWN0X21vdmUocHJpdi0+
YmFzZS5jbGlwcGVyLCB4LCB5KTsKIAotICAgIHR3ID0gcHJpdi0+dmlldy50aWxlLnc7Ci0gICAg
dGggPSBwcml2LT52aWV3LnRpbGUuaDsKKyAgICB0dyA9IHByaXYtPnZpZXcudGlsZS53aWR0aDsK
KyAgICB0aCA9IHByaXYtPnZpZXcudGlsZS5oZWlnaHQ7CiAKICAgICBiYXNlX294ID0geCArIHBy
aXYtPnZpZXcub2Zmc2V0LmJhc2UueDsKICAgICBveSA9IHkgKyBwcml2LT52aWV3Lm9mZnNldC5i
YXNlLnk7CkBAIC0xMTcyLDcgKzExNjUsNyBAQCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfdmlld19wb3NfYXBwbHkoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YQogICAg
IGl0ciA9IHByaXYtPnZpZXcuaXRlbXM7CiAgICAgaXRyX2VuZCA9IGl0ciArIHByaXYtPnZpZXcu
cm93czsKICAgICBmb3IgKDsgaXRyIDwgaXRyX2VuZDsgaXRyKyspIHsKLSAgICAgICAgRXdrX1Rp
bGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQ7CisgICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0
b3JlX0l0ZW0qIGl0OwogICAgICAgICBFdmFzX0Nvb3JkIG94ID0gYmFzZV9veDsKICAgICAgICAg
RUlOQV9JTkxJU1RfRk9SRUFDSCgqaXRyLCBpdCkgewogICAgICAgICAgICAgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX2l0ZW1fbW92ZShpdCwgb3gsIG95KTsKQEAgLTExODIsNyArMTE3NSw3IEBA
IHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3Bvc19hcHBseShFd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9EYXRhCiAgICAgfQogfQogCi1zdGF0aWMgdm9pZCBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfY2FsY3VsYXRlX29mZnNldF9mb3JjZShFd2tfVGlsZWRf
QmFja2luZ19TdG9yZV9EYXRhICpwcml2KQorc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5n
X3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZV9vZmZzZXRfZm9yY2UoRXdrX1RpbGVkX0JhY2tpbmdfU3Rv
cmVfRGF0YSogcHJpdikKIHsKICAgICBFdmFzX0Nvb3JkIGR4ID0gcHJpdi0+dmlldy5vZmZzZXQu
Y3VyLnggLSBwcml2LT52aWV3Lm9mZnNldC5vbGQueDsKICAgICBFdmFzX0Nvb3JkIGR5ID0gcHJp
di0+dmlldy5vZmZzZXQuY3VyLnkgLSBwcml2LT52aWV3Lm9mZnNldC5vbGQueTsKQEAgLTExOTIs
OCArMTE4NSw4IEBAIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9j
YWxjdWxhdGVfb2Zmc2V0X2ZvcmNlKEV3a19UaWxlZF9CYWNrCiAgICAgSU5GKCJvPSVwLCBvZmZz
ZXQ6ICUrNGQsICUrNGQgKCUrNGQsICUrNGQpIiwKICAgICAgICAgcHJpdi0+c2VsZiwgZHgsIGR5
LCBwcml2LT52aWV3Lm9mZnNldC5jdXIueCwgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkpOwogCi0g
ICAgdHcgPSBwcml2LT52aWV3LnRpbGUudzsKLSAgICB0aCA9IHByaXYtPnZpZXcudGlsZS5oOwor
ICAgIHR3ID0gcHJpdi0+dmlldy50aWxlLndpZHRoOworICAgIHRoID0gcHJpdi0+dmlldy50aWxl
LmhlaWdodDsKIAogICAgIGxvbmcgbmV3X2NvbCA9IC1wcml2LT52aWV3Lm9mZnNldC5jdXIueCAv
IHR3OwogICAgIHN0ZXBfeCA9IHByaXYtPm1vZGVsLmJhc2UuY29sIC0gbmV3X2NvbDsKQEAgLTEy
MTQsNyArMTIwNyw3IEBAIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFy
dF9jYWxjdWxhdGVfb2Zmc2V0X2ZvcmNlKEV3a19UaWxlZF9CYWNrCiAgICAgICAgIChwcml2LCBw
cml2LT52aWV3LngsIHByaXYtPnZpZXcueSwgc3RlcF94LCBzdGVwX3kpOwogfQogCi1zdGF0aWMg
dm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfY2FsY3VsYXRlX29mZnNldChFd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQg
eSkKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9jYWxjdWxhdGVf
b2Zmc2V0KEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYsIEV2YXNfQ29vcmQgeCwg
RXZhc19Db29yZCB5KQogewogICAgIEV2YXNfQ29vcmQgZHggPSBwcml2LT52aWV3Lm9mZnNldC5j
dXIueCAtIHByaXYtPnZpZXcub2Zmc2V0Lm9sZC54OwogICAgIEV2YXNfQ29vcmQgZHkgPSBwcml2
LT52aWV3Lm9mZnNldC5jdXIueSAtIHByaXYtPnZpZXcub2Zmc2V0Lm9sZC55OwpAQCAtMTIyNyw4
ICsxMjIwLDggQEAgc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2Nh
bGN1bGF0ZV9vZmZzZXQoRXdrX1RpbGVkX0JhY2tpbmdfU3QKICAgICBpZiAoIWR4ICYmICFkeSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgdHcgPSBwcml2LT52aWV3LnRpbGUudzsKLSAgICB0aCA9
IHByaXYtPnZpZXcudGlsZS5oOworICAgIHR3ID0gcHJpdi0+dmlldy50aWxlLndpZHRoOworICAg
IHRoID0gcHJpdi0+dmlldy50aWxlLmhlaWdodDsKIAogICAgIGxvbmcgbmV3X2NvbCA9IC1wcml2
LT52aWV3Lm9mZnNldC5jdXIueCAvIHR3OwogICAgIHN0ZXBfeCA9IHByaXYtPm1vZGVsLmJhc2Uu
Y29sIC0gbmV3X2NvbDsKQEAgLTEyNzEsNyArMTI2NCw3IEBAIHN0YXRpYyB2b2lkIF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9zbWFydF9jYWxjdWxhdGVfb2Zmc2V0KEV3a19UaWxlZF9CYWNraW5n
X1N0CiAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcG9zX2FwcGx5KHByaXYsIHgs
IHkpOwogfQogCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfY2Fs
Y3VsYXRlX3BvcyhFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFdmFzX0Nvb3Jk
IHgsIEV2YXNfQ29vcmQgeSkKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9z
bWFydF9jYWxjdWxhdGVfcG9zKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYsIEV2
YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5KQogewogICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV92aWV3X3Bvc19hcHBseShwcml2LCB4LCB5KTsKICAgICBwcml2LT52aWV3LnggPSB4OwpAQCAt
MTI4MiwxMCArMTI3NSwxMCBAQCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
c21hcnRfY2FsY3VsYXRlX3BvcyhFd2tfVGlsZWRfQmFja2luZ19TdG9yZQogICAgICAgICBwcml2
LT52aWV3Lm9mZnNldC5jdXIueSArIHByaXYtPnZpZXcueSk7CiB9CiAKLXN0YXRpYyB2b2lkIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9maWxsX3JlbmRlcmVycyhFd2tfVGlsZWRfQmFja2luZ19T
dG9yZV9EYXRhICpwcml2KQorc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2Zp
bGxfcmVuZGVyZXJzKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYpCiB7Ci0gICAg
RWluYV9Jbmxpc3QgKml0OwotICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0ZW07
CisgICAgRWluYV9Jbmxpc3QqIGl0OworICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0q
IGl0ZW07CiAgICAgaW50IGksIGo7CiAKICAgICBmb3IgKGkgPSAwOyBpIDwgcHJpdi0+dmlldy5y
b3dzOyBpKyspIHsKQEAgLTEyOTYsMTQgKzEyODksMTQgQEAgc3RhdGljIHZvaWQgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX2ZpbGxfcmVuZGVyZXJzKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0Rh
dGEKICAgICB9CiB9CiAKLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFy
dF9jYWxjdWxhdGUoRXZhc19PYmplY3QgKm8pCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfc21hcnRfY2FsY3VsYXRlKEV2YXNfT2JqZWN0KiBld2tUaWxlKQogewogICAgIEV2
YXNfQ29vcmQgeCwgeSwgdywgaDsKIAotICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldChvLCAm
eCwgJnksICZ3LCAmaCk7Ci0gICAgREJHKCJvPSVwIGF0ICVkLCVkICsgJWR4JWQiLCBvLCB4LCB5
LCB3LCBoKTsKKyAgICBldmFzX29iamVjdF9nZW9tZXRyeV9nZXQoZXdrVGlsZSwgJngsICZ5LCAm
dywgJmgpOworICAgIERCRygibz0lcCBhdCAlZCwlZCArICVkeCVkIiwgZXdrVGlsZSwgeCwgeSwg
dywgaCk7CiAKLSAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2KTsKKyAgICBQUklW
X0RBVEFfR0VUX09SX1JFVFVSTihld2tUaWxlLCBwcml2KTsKIAogICAgIHByaXYtPmNoYW5nZWQu
YW55ID0gRUlOQV9GQUxTRTsKIApAQCAtMTMxMiw4ICsxMzA1LDggQEAgc3RhdGljIHZvaWQgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZShFdmFzX09iamVjdCAqbykKICAg
ICBpZiAoIXByaXYtPnJlbmRlci5zdXNwZW5kICYmIHByaXYtPmNoYW5nZWQubW9kZWwpIHsKICAg
ICAgICAgdW5zaWduZWQgbG9uZyBjb2xzLCByb3dzOwogCi0gICAgICAgIGNvbHMgPSBwcml2LT5t
b2RlbC53aWR0aCAvIHByaXYtPnZpZXcudGlsZS53ICsgMTsKLSAgICAgICAgcm93cyA9IHByaXYt
Pm1vZGVsLmhlaWdodCAvIHByaXYtPnZpZXcudGlsZS5oICsgMTsKKyAgICAgICAgY29scyA9IHBy
aXYtPm1vZGVsLndpZHRoIC8gcHJpdi0+dmlldy50aWxlLndpZHRoICsgMTsKKyAgICAgICAgcm93
cyA9IHByaXYtPm1vZGVsLmhlaWdodCAvIHByaXYtPnZpZXcudGlsZS5oZWlnaHQgKyAxOwogCiAg
ICAgICAgIHByaXYtPm1vZGVsLm9sZC5jb2xzID0gcHJpdi0+bW9kZWwuY3VyLmNvbHM7CiAgICAg
ICAgIHByaXYtPm1vZGVsLm9sZC5yb3dzID0gcHJpdi0+bW9kZWwuY3VyLnJvd3M7CkBAIC0xMzQ4
LDggKzEzNDEsOCBAQCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRf
Y2FsY3VsYXRlKEV2YXNfT2JqZWN0ICpvKQogICAgICAgICByZWN0LmggPSBwcml2LT5tb2RlbC5o
ZWlnaHQ7CiAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9maWxsX3JlbmRlcmVycyhw
cml2KTsKICAgICAgICAgZXdrX3RpbGVfbWF0cml4X3Jlc2l6ZShwcml2LT5tb2RlbC5tYXRyaXgs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBwcml2LT5tb2RlbC5jdXIuY29scywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHByaXYtPm1vZGVsLmN1ci5yb3dzKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwcml2LT5tb2RlbC5jdXIuY29scywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwcml2LT5tb2RlbC5jdXIucm93cyk7CiAgICAgICAgIHByaXYtPmNo
YW5nZWQubW9kZWwgPSBFSU5BX0ZBTFNFOwogICAgICAgICBldmFzX29iamVjdF9yZXNpemUocHJp
di0+Y29udGVudHNfY2xpcHBlciwgcHJpdi0+bW9kZWwud2lkdGgsIHByaXYtPm1vZGVsLmhlaWdo
dCk7CiAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9jYWxjdWxhdGVfb2Zm
c2V0X2ZvcmNlKHByaXYpOwpAQCAtMTM1Nyw3ICsxMzUwLDcgQEAgc3RhdGljIHZvaWQgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZShFdmFzX09iamVjdCAqbykKICAgICAg
ICAgLyogTWFrZSBzdXJlIHdlIGRvIG5vdCBtaXNzIGFueSBpbXBvcnRhbnQgcmVwYWludCBieQog
ICAgICAgICAgKiByZXBhaW50aW5nIHRoZSB3aG9sZSB2aWV3cG9ydCAqLwogICAgICAgICBjb25z
dCBFaW5hX1JlY3RhbmdsZSByID0KLSAgICAgICAgICAgIHsgMCwgMCwgcHJpdi0+bW9kZWwud2lk
dGgsIHByaXYtPm1vZGVsLmhlaWdodCB9OworICAgICAgICB7IDAsIDAsIHByaXYtPm1vZGVsLndp
ZHRoLCBwcml2LT5tb2RlbC5oZWlnaHQgfTsKICAgICAgICAgZXdrX3RpbGVfbWF0cml4X3VwZGF0
ZShwcml2LT5tb2RlbC5tYXRyaXgsICZyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHByaXYtPnZpZXcudGlsZS56b29tKTsKICAgICB9CkBAIC0xMzY3LDE5ICsxMzYwLDE5IEBAIHN0
YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9jYWxjdWxhdGUoRXZhc19P
YmplY3QgKm8pCiAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3VwZGF0ZXNfcHJvY2Vzcyhw
cml2KTsKIAogICAgIGlmIChwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggPiAwCi0gICAgICAgIHx8
IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCA8PSAtIHByaXYtPnZpZXcudGlsZS53CisgICAgICAg
IHx8IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCA8PSAtIHByaXYtPnZpZXcudGlsZS53aWR0aAog
ICAgICAgICB8fCBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgPiAwCi0gICAgICAgIHx8IHByaXYt
PnZpZXcub2Zmc2V0LmJhc2UueSA8PSAtIHByaXYtPnZpZXcudGlsZS5oKQorICAgICAgICB8fCBw
cml2LT52aWV3Lm9mZnNldC5iYXNlLnkgPD0gLSBwcml2LT52aWV3LnRpbGUuaGVpZ2h0KQogICAg
ICAgICBFUlIoImluY29ycmVjdCBiYXNlIG9mZnNldCAlKzRkLCUrNGQsIHRpbGU9JWR4JWQsIGN1
cj0lKzRkLCUrNGRcbiIsCiAgICAgICAgICAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLngsIHBy
aXYtPnZpZXcub2Zmc2V0LmJhc2UueSwKLSAgICAgICAgICAgIHByaXYtPnZpZXcudGlsZS53LCBw
cml2LT52aWV3LnRpbGUuaCwKKyAgICAgICAgICAgIHByaXYtPnZpZXcudGlsZS53aWR0aCwgcHJp
di0+dmlldy50aWxlLmhlaWdodCwKICAgICAgICAgICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1ci54
LCBwcml2LT52aWV3Lm9mZnNldC5jdXIueSk7CiAKIH0KIAotRXZhc19PYmplY3QgKmV3a190aWxl
ZF9iYWNraW5nX3N0b3JlX2FkZChFdmFzICplKQorRXZhc19PYmplY3QqIGV3a190aWxlZF9iYWNr
aW5nX3N0b3JlX2FkZChFdmFzKiBjYW52YXMpCiB7Ci0gICAgc3RhdGljIEV2YXNfU21hcnQgKnNt
YXJ0ID0gMDsKKyAgICBzdGF0aWMgRXZhc19TbWFydCogc21hcnQgPSAwOwogCiAgICAgaWYgKF9l
d2tfdGlsZWRfbG9nX2RvbSA8IDApCiAgICAgICAgIF9ld2tfdGlsZWRfbG9nX2RvbSA9IGVpbmFf
bG9nX2RvbWFpbl9yZWdpc3RlcigiRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmUiLCAwKTsKQEAgLTE0
MDIsMzQgKzEzOTUsMzQgQEAgRXZhc19PYmplY3QgKmV3a190aWxlZF9iYWNraW5nX3N0b3JlX2Fk
ZChFdmFzICplKQogICAgICAgICBzbWFydCA9IGV2YXNfc21hcnRfY2xhc3NfbmV3KCZzYyk7CiAg
ICAgfQogCi0gICAgcmV0dXJuIGV2YXNfb2JqZWN0X3NtYXJ0X2FkZChlLCBzbWFydCk7CisgICAg
cmV0dXJuIGV2YXNfb2JqZWN0X3NtYXJ0X2FkZChjYW52YXMsIHNtYXJ0KTsKIH0KIAotdm9pZCBl
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9yZW5kZXJfY2Jfc2V0KEV2YXNfT2JqZWN0ICpvLCBFaW5h
X0Jvb2wgKCpjYikodm9pZCAqZGF0YSwgRXdrX1RpbGUgKnQsIGNvbnN0IEVpbmFfUmVjdGFuZ2xl
ICphcmVhKSwgY29uc3Qgdm9pZCAqZGF0YSkKK3ZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
cmVuZGVyX2NiX3NldChFdmFzX09iamVjdCogZXdrVGlsZSwgRWluYV9Cb29sICgqY2FsbGJhY2sp
KHZvaWQqIGRhdGEsIEV3a19UaWxlKiB0aWxlLCBjb25zdCBFaW5hX1JlY3RhbmdsZSogYXJlYSks
IGNvbnN0IHZvaWQqIGRhdGEpCiB7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oY2Ip
OwotICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYpOwotICAgIHByaXYtPnJlbmRl
ci5jYiA9IGNiOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGNhbGxiYWNrKTsKKyAg
ICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihld2tUaWxlLCBwcml2KTsKKyAgICBwcml2LT5yZW5k
ZXIuY2IgPSBjYWxsYmFjazsKICAgICBwcml2LT5yZW5kZXIuZGF0YSA9ICh2b2lkKilkYXRhOwog
fQogCi1Fd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKmV3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVf
dW51c2VkX2NhY2hlX2dldChjb25zdCBFdmFzX09iamVjdCAqbykKK0V3a19UaWxlX1VudXNlZF9D
YWNoZSogZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV91bnVzZWRfY2FjaGVfZ2V0KGNvbnN0
IEV2YXNfT2JqZWN0KiBld2tUaWxlKQogewotICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8s
IHByaXYsIDApOworICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKGV3a1RpbGUsIHByaXYsIDAp
OwogICAgIHJldHVybiBld2tfdGlsZV9tYXRyaXhfdW51c2VkX2NhY2hlX2dldChwcml2LT5tb2Rl
bC5tYXRyaXgpOwogfQogCi12b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfdW51c2Vk
X2NhY2hlX3NldChFdmFzX09iamVjdCAqbywgRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMpCit2
b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfdW51c2VkX2NhY2hlX3NldChFdmFzX09i
amVjdCogZXdrVGlsZSwgRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0aWxlVW51c2VkQ2FjaGUpCiB7
Ci0gICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdik7CisgICAgUFJJVl9EQVRBX0dF
VF9PUl9SRVRVUk4oZXdrVGlsZSwgcHJpdik7CiAKLSAgICBpZiAoZXdrX3RpbGVfbWF0cml4X3Vu
dXNlZF9jYWNoZV9nZXQocHJpdi0+bW9kZWwubWF0cml4KSA9PSB0dWMpCisgICAgaWYgKGV3a190
aWxlX21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCkgPT0gdGlsZVVu
dXNlZENhY2hlKQogICAgICAgICByZXR1cm47CiAKLSAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfbW9kZWxfbWF0cml4X2NyZWF0ZShwcml2LCB0dWMpOworICAgIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9tb2RlbF9tYXRyaXhfY3JlYXRlKHByaXYsIHRpbGVVbnVzZWRDYWNoZSk7CiB9CiAK
LXN0YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3Njcm9sbF9mdWxsX29m
ZnNldF9zZXRfaW50ZXJuYWwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgRXZh
c19Db29yZCB4LCBFdmFzX0Nvb3JkIHkpCitzdGF0aWMgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9zY3JvbGxfZnVsbF9vZmZzZXRfc2V0X2ludGVybmFsKEV3a19UaWxlZF9CYWNr
aW5nX1N0b3JlX0RhdGEqIHByaXYsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5KQogewogICAg
IC8qIFRPRE86IGNoZWNrIG9mZnNldCBnbyBvdXQgb2YgYm91bmRzLCBjbGFtcCAqLwogICAgIGlm
IChwcml2LT5yZW5kZXIuZGlzYWJsZWQpCkBAIC0xNDQ0LDMzICsxNDM3LDMzIEBAIHN0YXRpYyBF
aW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3Njcm9sbF9mdWxsX29mZnNldF9zZXRf
aW50ZXJuYWwoRXdrX1RpCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotRWluYV9Cb29sIGV3
a190aWxlZF9iYWNraW5nX3N0b3JlX3Njcm9sbF9mdWxsX29mZnNldF9zZXQoRXZhc19PYmplY3Qg
Km8sIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5KQorRWluYV9Cb29sIGV3a190aWxlZF9iYWNr
aW5nX3N0b3JlX3Njcm9sbF9mdWxsX29mZnNldF9zZXQoRXZhc19PYmplY3QqIGV3a1RpbGUsIEV2
YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5KQogewotICAgIERCRygibz0lcCwgeD0lZCwgeT0lZCIs
IG8sIHgsIHkpOworICAgIERCRygibz0lcCwgeD0lZCwgeT0lZCIsIGV3a1RpbGUsIHgsIHkpOwog
Ci0gICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAg
UFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4oZXdrVGlsZSwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAg
aWYgKHggPT0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggJiYgeSA9PSBwcml2LT52aWV3Lm9mZnNl
dC5jdXIueSkKICAgICAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIAogICAgIHJldHVybiBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfc2Nyb2xsX2Z1bGxfb2Zmc2V0X3NldF9pbnRlcm5hbChwcml2LCB4
LCB5KTsKIH0KIAotRWluYV9Cb29sIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3Njcm9sbF9mdWxs
X29mZnNldF9hZGQoRXZhc19PYmplY3QgKm8sIEV2YXNfQ29vcmQgZHgsIEV2YXNfQ29vcmQgZHkp
CitFaW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc2Nyb2xsX2Z1bGxfb2Zmc2V0X2Fk
ZChFdmFzX09iamVjdCogZXdrVGlsZSwgRXZhc19Db29yZCBkeCwgRXZhc19Db29yZCBkeSkKIHsK
LSAgICBEQkcoIm89JXAsIGR4PSVkLCBkeT0lZCIsIG8sIGR4LCBkeSk7CisgICAgREJHKCJvPSVw
LCBkeD0lZCwgZHk9JWQiLCBld2tUaWxlLCBkeCwgZHkpOwogCi0gICAgUFJJVl9EQVRBX0dFVF9P
Ul9SRVRVUk4obywgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRV
Uk4oZXdrVGlsZSwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgaWYgKCFkeCAmJiAhZHkpCiAgICAg
ICAgIHJldHVybiBFSU5BX1RSVUU7CiAKICAgICByZXR1cm4gX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX3Njcm9sbF9mdWxsX29mZnNldF9zZXRfaW50ZXJuYWwKLSAgICAgICAgKHByaXYsIHByaXYt
PnZpZXcub2Zmc2V0LmN1ci54ICsgZHgsIHByaXYtPnZpZXcub2Zmc2V0LmN1ci55ICsgZHkpOwor
ICAgICAgICAgICAgICAgKHByaXYsIHByaXYtPnZpZXcub2Zmc2V0LmN1ci54ICsgZHgsIHByaXYt
PnZpZXcub2Zmc2V0LmN1ci55ICsgZHkpOwogfQogCi1zdGF0aWMgRWluYV9Cb29sIF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV96b29tX3NldF9pbnRlcm5hbChFd2tfVGlsZWRfQmFja2luZ19TdG9y
ZV9EYXRhICpwcml2LCBmbG9hdCAqem9vbSwgRXZhc19Db29yZCBjeCwgRXZhc19Db29yZCBjeSwg
RXZhc19Db29yZCAqb2ZmeCwgRXZhc19Db29yZCAqb2ZmeSkKK3N0YXRpYyBFaW5hX0Jvb2wgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX3pvb21fc2V0X2ludGVybmFsKEV3a19UaWxlZF9CYWNraW5n
X1N0b3JlX0RhdGEqIHByaXYsIGZsb2F0KiB6b29tLCBFdmFzX0Nvb3JkIGN1cnJlbnRYLCBFdmFz
X0Nvb3JkIGN1cnJlbnRZLCBFdmFzX0Nvb3JkKiBvZmZzZXRYLCBFdmFzX0Nvb3JkKiBvZmZzZXRZ
KQogewotICAgICpvZmZ4ID0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLng7Ci0gICAgKm9mZnkgPSBw
cml2LT52aWV3Lm9mZnNldC5jdXIueTsKKyAgICAqb2Zmc2V0WCA9IHByaXYtPnZpZXcub2Zmc2V0
LmN1ci54OworICAgICpvZmZzZXRZID0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLnk7CiAKICAgICBp
ZiAoZmFic2YocHJpdi0+dmlldy50aWxlLnpvb20gLSAqem9vbSkgPCBaT09NX1NURVBfTUlOKSB7
CiAgICAgICAgIERCRygiaWdub3JlZCBhcyB6b29tIGRpZmZlcmVuY2UgaXMgPCAlZjogJWYiLApA
QCAtMTQ4MSw0MiArMTQ3NCw0MiBAQCBzdGF0aWMgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV96b29tX3NldF9pbnRlcm5hbChFd2tfVGlsZWRfQmFja2luZ19TdAogICAgIF9ld2tf
dGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfZmx1c2gocHJpdik7CiAgICAg
RXZhc19Db29yZCB0dywgdGg7CiAKLSAgICAqem9vbSA9IFJPVU5ERURfWk9PTShwcml2LT52aWV3
LnRpbGUudywgKnpvb20pOworICAgICp6b29tID0gUk9VTkRFRF9aT09NKHByaXYtPnZpZXcudGls
ZS53aWR0aCwgKnpvb20pOwogCi0gICAgdHcgPSBwcml2LT52aWV3LnRpbGUudzsKLSAgICB0aCA9
IHByaXYtPnZpZXcudGlsZS5oOworICAgIHR3ID0gcHJpdi0+dmlldy50aWxlLndpZHRoOworICAg
IHRoID0gcHJpdi0+dmlldy50aWxlLmhlaWdodDsKIAogICAgIGZsb2F0IHNjYWxlID0gKnpvb20g
LyBwcml2LT52aWV3LnRpbGUuem9vbTsKIAogICAgIHByaXYtPnZpZXcudGlsZS56b29tID0gKnpv
b207Ci0gICAgLy8gdG9kbzogY2hlY2sgY3ggWzAsIHddLi4uCi0gICAgcHJpdi0+dmlldy5vZmZz
ZXQuem9vbV9jZW50ZXIueCA9IGN4OwotICAgIHByaXYtPnZpZXcub2Zmc2V0Lnpvb21fY2VudGVy
LnkgPSBjeTsKKyAgICAvLyB0b2RvOiBjaGVjayBjdXJyZW50WCBbMCwgd10uLi4KKyAgICBwcml2
LT52aWV3Lm9mZnNldC56b29tX2NlbnRlci54ID0gY3VycmVudFg7CisgICAgcHJpdi0+dmlldy5v
ZmZzZXQuem9vbV9jZW50ZXIueSA9IGN1cnJlbnRZOwogCiAKLSAgICBpZiAoIXByaXYtPnZpZXcu
dyB8fCAhcHJpdi0+dmlldy5oKSB7CisgICAgaWYgKCFwcml2LT52aWV3LndpZHRoIHx8ICFwcml2
LT52aWV3LmhlaWdodCkgewogICAgICAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggPSAwOwog
ICAgICAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgPSAwOwogICAgICAgICByZXR1cm4gRUlO
QV9UUlVFOwogICAgIH0KLSAgICBFaW5hX0lubGlzdCAqKml0ciwgKippdHJfZW5kOwotICAgIEV3
a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0OworICAgIEVpbmFfSW5saXN0KiogaXRyLCAq
Kml0cl9lbmQ7CisgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSogaXQ7CiAKLSAgICBF
dmFzX0Nvb3JkIG5ld194ID0gY3ggKyAocHJpdi0+dmlldy5vZmZzZXQuY3VyLnggLSBjeCkgKiBz
Y2FsZTsKLSAgICBFdmFzX0Nvb3JkIG5ld195ID0gY3kgKyAocHJpdi0+dmlldy5vZmZzZXQuY3Vy
LnkgLSBjeSkgKiBzY2FsZTsKKyAgICBFdmFzX0Nvb3JkIG5ld194ID0gY3VycmVudFggKyAocHJp
di0+dmlldy5vZmZzZXQuY3VyLnggLSBjdXJyZW50WCkgKiBzY2FsZTsKKyAgICBFdmFzX0Nvb3Jk
IG5ld195ID0gY3VycmVudFkgKyAocHJpdi0+dmlldy5vZmZzZXQuY3VyLnkgLSBjdXJyZW50WSkg
KiBzY2FsZTsKIAotICAgIEV2YXNfQ29vcmQgbW9kZWxfd2lkdGggPSBwcml2LT5tb2RlbC53aWR0
aCAqIHNjYWxlOwotICAgIEV2YXNfQ29vcmQgbW9kZWxfaGVpZ2h0ID0gcHJpdi0+bW9kZWwuaGVp
Z2h0ICogc2NhbGU7CisgICAgRXZhc19Db29yZCBtb2RlbF93ID0gcHJpdi0+bW9kZWwud2lkdGgg
KiBzY2FsZTsKKyAgICBFdmFzX0Nvb3JkIG1vZGVsX2ggPSBwcml2LT5tb2RlbC5oZWlnaHQgKiBz
Y2FsZTsKIAotICAgIGlmIChtb2RlbF93aWR0aCA8IHByaXYtPnZpZXcudyB8fCBuZXdfeCA+PSAw
KQorICAgIGlmIChtb2RlbF93IDwgcHJpdi0+dmlldy53aWR0aCB8fCBuZXdfeCA+PSAwKQogICAg
ICAgICBuZXdfeCA9IDA7Ci0gICAgZWxzZSBpZiAoLW5ld194ICsgcHJpdi0+dmlldy53ID49IG1v
ZGVsX3dpZHRoKQotICAgICAgICBuZXdfeCA9IC1tb2RlbF93aWR0aCArIHByaXYtPnZpZXcudzsK
KyAgICBlbHNlIGlmICgtbmV3X3ggKyBwcml2LT52aWV3LndpZHRoID49IG1vZGVsX3cpCisgICAg
ICAgIG5ld194ID0gLW1vZGVsX3cgKyBwcml2LT52aWV3LndpZHRoOwogCi0gICAgaWYgKG1vZGVs
X2hlaWdodCA8IHByaXYtPnZpZXcuaCB8fCBuZXdfeSA+PSAwKQorICAgIGlmIChtb2RlbF9oIDwg
cHJpdi0+dmlldy5oZWlnaHQgfHwgbmV3X3kgPj0gMCkKICAgICAgICAgbmV3X3kgPSAwOwotICAg
IGVsc2UgaWYgKC1uZXdfeSArIHByaXYtPnZpZXcuaCA+PSBtb2RlbF9oZWlnaHQpCi0gICAgICAg
IG5ld195ID0gLW1vZGVsX2hlaWdodCArIHByaXYtPnZpZXcuaDsKKyAgICBlbHNlIGlmICgtbmV3
X3kgKyBwcml2LT52aWV3LmhlaWdodCA+PSBtb2RlbF9oKQorICAgICAgICBuZXdfeSA9IC1tb2Rl
bF9oICsgcHJpdi0+dmlldy5oZWlnaHQ7CiAKICAgICBFdmFzX0Nvb3JkIGJ4ID0gbmV3X3ggJSB0
dzsKICAgICBFdmFzX0Nvb3JkIGJ5ID0gbmV3X3kgJSB0aDsKQEAgLTE1MzQsOCArMTUyNyw4IEBA
IHN0YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3pvb21fc2V0X2ludGVy
bmFsKEV3a19UaWxlZF9CYWNraW5nX1N0CiAKICAgICBwcml2LT52aWV3Lm9mZnNldC5vbGQueCA9
IHByaXYtPnZpZXcub2Zmc2V0LmN1ci54OwogICAgIHByaXYtPnZpZXcub2Zmc2V0Lm9sZC55ID0g
cHJpdi0+dmlldy5vZmZzZXQuY3VyLnk7Ci0gICAgKm9mZnggPSBwcml2LT52aWV3Lm9mZnNldC5j
dXIueDsKLSAgICAqb2ZmeSA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci55OworICAgICpvZmZzZXRY
ID0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLng7CisgICAgKm9mZnNldFkgPSBwcml2LT52aWV3Lm9m
ZnNldC5jdXIueTsKIAogICAgIGV2YXNfb2JqZWN0X21vdmUoCiAgICAgICAgIHByaXYtPmNvbnRl
bnRzX2NsaXBwZXIsCkBAIC0xNTUyLDcgKzE1NDUsNyBAQCBzdGF0aWMgRWluYV9Cb29sIF9ld2tf
dGlsZWRfYmFja2luZ19zdG9yZV96b29tX3NldF9pbnRlcm5hbChFd2tfVGlsZWRfQmFja2luZ19T
dAogCiAgICAgZm9yICg7IGl0ciA8IGl0cl9lbmQ7IGl0cisrKSB7CiAgICAgICAgIEV2YXNfQ29v
cmQgb3ggPSBiYXNlX294OwotICAgICAgICBFaW5hX0lubGlzdCAqbHN0ID0gKml0cjsKKyAgICAg
ICAgRWluYV9Jbmxpc3QqIGxzdCA9ICppdHI7CiAKICAgICAgICAgRUlOQV9JTkxJU1RfRk9SRUFD
SChsc3QsIGl0KSB7CiAgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9t
b3ZlKGl0LCBveCwgb3kpOwpAQCAtMTU2NSw0MiArMTU1OCw0MiBAQCBzdGF0aWMgRWluYV9Cb29s
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV96b29tX3NldF9pbnRlcm5hbChFd2tfVGlsZWRfQmFj
a2luZ19TdAogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLUVpbmFfQm9vbCBld2tfdGlsZWRf
YmFja2luZ19zdG9yZV96b29tX3NldChFdmFzX09iamVjdCAqbywgZmxvYXQgKnpvb20sIEV2YXNf
Q29vcmQgY3gsIEV2YXNfQ29vcmQgY3ksIEV2YXNfQ29vcmQgKm9mZngsIEV2YXNfQ29vcmQgKm9m
ZnkpCitFaW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfem9vbV9zZXQoRXZhc19PYmpl
Y3QqIGV3a1RpbGUsIGZsb2F0KiB6b29tLCBFdmFzX0Nvb3JkIGN1cnJlbnRYLCBFdmFzX0Nvb3Jk
IGN1cnJlbnRZLCBFdmFzX0Nvb3JkKiBvZmZzZXRYLCBFdmFzX0Nvb3JkKiBvZmZzZXRZKQogewot
ICAgIERCRygibz0lcCwgem9vbT0lZiIsIG8sIChkb3VibGUpKnpvb20pOworICAgIERCRygibz0l
cCwgem9vbT0lZiIsIGV3a1RpbGUsICp6b29tKTsKIAotICAgIFBSSVZfREFUQV9HRVRfT1JfUkVU
VVJOKG8sIHByaXYsIEVJTkFfRkFMU0UpOworICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKGV3
a1RpbGUsIHByaXYsIEVJTkFfRkFMU0UpOwogCi0gICAgcmV0dXJuIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV96b29tX3NldF9pbnRlcm5hbChwcml2LCB6b29tLCBjeCwgY3ksIG9mZngsIG9mZnkp
OworICAgIHJldHVybiBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfem9vbV9zZXRfaW50ZXJuYWwo
cHJpdiwgem9vbSwgY3VycmVudFgsIGN1cnJlbnRZLCBvZmZzZXRYLCBvZmZzZXRZKTsKIH0KIAot
RWluYV9Cb29sIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3pvb21fd2Vha19zZXQoRXZhc19PYmpl
Y3QgKm8sIGZsb2F0IHpvb20sIEV2YXNfQ29vcmQgY3gsIEV2YXNfQ29vcmQgY3kpCitFaW5hX0Jv
b2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfem9vbV93ZWFrX3NldChFdmFzX09iamVjdCogZXdr
VGlsZSwgZmxvYXQgem9vbSwgRXZhc19Db29yZCBjdXJyZW50WCwgRXZhc19Db29yZCBjdXJyZW50
WSkKIHsKLSAgICBEQkcoIm89JXAsIHpvb209JWYiLCBvLCAoZG91YmxlKXpvb20pOwotICAgIFBS
SVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYsIEVJTkFfRkFMU0UpOwotICAgIGlmICghcHJp
di0+dmlldy53IHx8ICFwcml2LT52aWV3LmgpCisgICAgREJHKCJvPSVwLCB6b29tPSVmIiwgZXdr
VGlsZSwgem9vbSk7CisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4oZXdrVGlsZSwgcHJpdiwg
RUlOQV9GQUxTRSk7CisgICAgaWYgKCFwcml2LT52aWV3LndpZHRoIHx8ICFwcml2LT52aWV3Lmhl
aWdodCkKICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7Ci0gICAgRWluYV9Jbmxpc3QgKippdHIs
ICoqaXRyX2VuZDsKLSAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdDsKKyAgICBF
aW5hX0lubGlzdCoqIGl0ciwgKiogaXRyX2VuZDsKKyAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9y
ZV9JdGVtKiBpdDsKICAgICBFdmFzX0Nvb3JkIHR3LCB0aDsKICAgICBFaW5hX0Jvb2wgcmVjYWxj
ID0gRUlOQV9GQUxTRTsKIAogICAgIGZsb2F0IHNjYWxlID0gem9vbSAvIHByaXYtPnZpZXcudGls
ZS56b29tOwogCi0gICAgdHcgPSBUSUxFX1NJWkVfQVRfWk9PTShwcml2LT52aWV3LnRpbGUudywg
c2NhbGUpOwotICAgIHNjYWxlID0gVElMRV9aT09NX0FUX1NJWkUodHcsIHByaXYtPnZpZXcudGls
ZS53KTsKLSAgICB0aCA9IFRJTEVfU0laRV9BVF9aT09NKHByaXYtPnZpZXcudGlsZS5oLCBzY2Fs
ZSk7CisgICAgdHcgPSBUSUxFX1NJWkVfQVRfWk9PTShwcml2LT52aWV3LnRpbGUud2lkdGgsIHNj
YWxlKTsKKyAgICBzY2FsZSA9IFRJTEVfWk9PTV9BVF9TSVpFKHR3LCBwcml2LT52aWV3LnRpbGUu
d2lkdGgpOworICAgIHRoID0gVElMRV9TSVpFX0FUX1pPT00ocHJpdi0+dmlldy50aWxlLmhlaWdo
dCwgc2NhbGUpOwogICAgIHpvb20gPSBzY2FsZSAqIHByaXYtPnZpZXcudGlsZS56b29tOwogCi0g
ICAgRXZhc19Db29yZCBtb2RlbF93aWR0aCA9IHByaXYtPm1vZGVsLndpZHRoICogc2NhbGU7Ci0g
ICAgRXZhc19Db29yZCBtb2RlbF9oZWlnaHQgPSBwcml2LT5tb2RlbC5oZWlnaHQgKiBzY2FsZTsK
KyAgICBFdmFzX0Nvb3JkIG1vZGVsX3cgPSBwcml2LT5tb2RlbC53aWR0aCAqIHNjYWxlOworICAg
IEV2YXNfQ29vcmQgbW9kZWxfaCA9IHByaXYtPm1vZGVsLmhlaWdodCAqIHNjYWxlOwogCi0gICAg
ZXZhc19vYmplY3RfcmVzaXplKHByaXYtPmNvbnRlbnRzX2NsaXBwZXIsIG1vZGVsX3dpZHRoLCBt
b2RlbF9oZWlnaHQpOworICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShwcml2LT5jb250ZW50c19jbGlw
cGVyLCBtb2RlbF93LCBtb2RlbF9oKTsKIAotICAgIGludCB2cm93cyA9IGNlaWwoKGZsb2F0KXBy
aXYtPnZpZXcuaCAvIChmbG9hdCl0aCkgKyAxOwotICAgIGludCB2Y29scyA9IGNlaWwoKGZsb2F0
KXByaXYtPnZpZXcudyAvIChmbG9hdCl0dykgKyAxOwotICAgIEV2YXNfQ29vcmQgbmV3X3ggPSBj
eCArIChwcml2LT52aWV3Lm9mZnNldC5jdXIueCAtIGN4KSAqIHNjYWxlOwotICAgIEV2YXNfQ29v
cmQgbmV3X3kgPSBjeSArIChwcml2LT52aWV3Lm9mZnNldC5jdXIueSAtIGN5KSAqIHNjYWxlOwor
ICAgIGludCB2cm93cyA9IHN0YXRpY19jYXN0PGludD4oY2VpbChzdGF0aWNfY2FzdDxmbG9hdD4o
cHJpdi0+dmlldy5oZWlnaHQgLyB0aCkpICsgMSk7CisgICAgaW50IHZjb2xzID0gc3RhdGljX2Nh
c3Q8aW50PihjZWlsKHN0YXRpY19jYXN0PGZsb2F0Pihwcml2LT52aWV3LndpZHRoIC8gdHcpKSAr
IDEpOworICAgIEV2YXNfQ29vcmQgbmV3X3ggPSBjdXJyZW50WCArIChwcml2LT52aWV3Lm9mZnNl
dC5jdXIueCAtIGN1cnJlbnRYKSAqIHNjYWxlOworICAgIEV2YXNfQ29vcmQgbmV3X3kgPSBjdXJy
ZW50WSArIChwcml2LT52aWV3Lm9mZnNldC5jdXIueSAtIGN1cnJlbnRZKSAqIHNjYWxlOwogICAg
IEV2YXNfQ29vcmQgYnggPSBuZXdfeCAlIHR3OwogICAgIEV2YXNfQ29vcmQgYnkgPSBuZXdfeSAl
IHRoOwogICAgIHVuc2lnbmVkIGxvbmcgYmFzZV9yb3cgPSAtbmV3X3kgLyB0aDsKQEAgLTE2MTYs
OSArMTYwOSw5IEBAIEVpbmFfQm9vbCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV96b29tX3dlYWtf
c2V0KEV2YXNfT2JqZWN0ICpvLCBmbG9hdCB6b29tLCBFdmFzCiAgICAgICAgIHJlY2FsYyA9IEVJ
TkFfVFJVRTsKIAogICAgIGlmIChyZWNhbGMpIHsKLSAgICAgICAgRXZhc19Db29yZCB3LCBoOwot
ICAgICAgICBldmFzX29iamVjdF9nZW9tZXRyeV9nZXQobywgMCwgMCwgJncsICZoKTsKLSAgICAg
ICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3JlY2FsY19yZW5kZXJlcnMocHJpdiwgdywgaCwg
dHcsIHRoKTsKKyAgICAgICAgRXZhc19Db29yZCB3aWR0aCwgaGVpZ2h0OworICAgICAgICBldmFz
X29iamVjdF9nZW9tZXRyeV9nZXQoZXdrVGlsZSwgMCwgMCwgJndpZHRoLCAmaGVpZ2h0KTsKKyAg
ICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3JlY2FsY19yZW5kZXJlcnMocHJpdiwgd2lk
dGgsIGhlaWdodCwgdHcsIHRoKTsKICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2Zp
bGxfcmVuZGVyZXJzKHByaXYpOwogICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdXBk
YXRlc19wcm9jZXNzKHByaXYpOwogICAgIH0KQEAgLTE2MzUsNyArMTYyOCw3IEBAIEVpbmFfQm9v
bCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV96b29tX3dlYWtfc2V0KEV2YXNfT2JqZWN0ICpvLCBm
bG9hdCB6b29tLCBFdmFzCiAKICAgICBmb3IgKDsgaXRyIDwgaXRyX2VuZDsgaXRyKyspIHsKICAg
ICAgICAgRXZhc19Db29yZCBveCA9IGJhc2Vfb3g7Ci0gICAgICAgIEVpbmFfSW5saXN0ICpsc3Qg
PSAqaXRyOworICAgICAgICBFaW5hX0lubGlzdCogbHN0ID0gKml0cjsKIAogICAgICAgICBFSU5B
X0lOTElTVF9GT1JFQUNIKGxzdCwgaXQpIHsKICAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9pdGVtX21vdmUoaXQsIG94LCBveSk7CkBAIC0xNjQ4LDM2ICsxNjQxLDM2IEBAIEVp
bmFfQm9vbCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV96b29tX3dlYWtfc2V0KEV2YXNfT2JqZWN0
ICpvLCBmbG9hdCB6b29tLCBFdmFzCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotdm9pZCBl
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9maXhfb2Zmc2V0cyhFdmFzX09iamVjdCAqbywgRXZhc19D
b29yZCB3LCBFdmFzX0Nvb3JkIGgpCit2b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX2ZpeF9v
ZmZzZXRzKEV2YXNfT2JqZWN0KiBld2tUaWxlLCBFdmFzX0Nvb3JkIHdpZHRoLCBFdmFzX0Nvb3Jk
IGhlaWdodCkKIHsKLSAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2KTsKLSAgICBF
aW5hX0lubGlzdCAqKml0ciwgKippdHJfZW5kOwotICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3Jl
X0l0ZW0gKml0OworICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKGV3a1RpbGUsIHByaXYpOwor
ICAgIEVpbmFfSW5saXN0KiogaXRyLCAqKml0cl9lbmQ7CisgICAgRXdrX1RpbGVkX0JhY2tpbmdf
U3RvcmVfSXRlbSogaXQ7CiAgICAgRXZhc19Db29yZCBuZXdfeCA9IHByaXYtPnZpZXcub2Zmc2V0
LmN1ci54OwogICAgIEV2YXNfQ29vcmQgbmV3X3kgPSBwcml2LT52aWV3Lm9mZnNldC5jdXIueTsK
ICAgICBFdmFzX0Nvb3JkIGJ4ID0gcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54OwogICAgIEV2YXNf
Q29vcmQgYnkgPSBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnk7Ci0gICAgRXZhc19Db29yZCB0dyA9
IHByaXYtPnZpZXcudGlsZS53OwotICAgIEV2YXNfQ29vcmQgdGggPSBwcml2LT52aWV3LnRpbGUu
aDsKKyAgICBFdmFzX0Nvb3JkIHR3ID0gcHJpdi0+dmlldy50aWxlLndpZHRoOworICAgIEV2YXNf
Q29vcmQgdGggPSBwcml2LT52aWV3LnRpbGUuaGVpZ2h0OwogCi0gICAgaWYgKC1uZXdfeCA+IHcp
IHsKLSAgICAgICAgbmV3X3ggPSAtdzsKKyAgICBpZiAoLW5ld194ID4gd2lkdGgpIHsKKyAgICAg
ICAgbmV3X3ggPSAtd2lkdGg7CiAgICAgICAgIGJ4ID0gbmV3X3ggJSB0dzsKICAgICAgICAgcHJp
di0+bW9kZWwuYmFzZS5jb2wgPSAtbmV3X3ggLyB0dzsKICAgICB9CiAKLSAgICBpZiAoLW5ld195
ID4gaCkgewotICAgICAgICBuZXdfeSA9IC1oOworICAgIGlmICgtbmV3X3kgPiBoZWlnaHQpIHsK
KyAgICAgICAgbmV3X3kgPSAtaGVpZ2h0OwogICAgICAgICBieSA9IG5ld195ICUgdGg7CiAgICAg
ICAgIHByaXYtPm1vZGVsLmJhc2Uucm93ID0gLW5ld195IC8gdGg7CiAgICAgfQogCi0gICAgaWYg
KGJ4ID49IDAgfHwgYnggPD0gLTIgKiBwcml2LT52aWV3LnRpbGUudykgeworICAgIGlmIChieCA+
PSAwIHx8IGJ4IDw9IC0yICogcHJpdi0+dmlldy50aWxlLndpZHRoKSB7CiAgICAgICAgIGJ4ID0g
bmV3X3ggJSB0dzsKICAgICAgICAgcHJpdi0+bW9kZWwuYmFzZS5jb2wgPSAtbmV3X3ggLyB0dzsK
ICAgICB9CiAKLSAgICBpZiAoYnkgPj0gMCB8fCBieSA8PSAtMiAqIHByaXYtPnZpZXcudGlsZS5o
KSB7CisgICAgaWYgKGJ5ID49IDAgfHwgYnkgPD0gLTIgKiBwcml2LT52aWV3LnRpbGUuaGVpZ2h0
KSB7CiAgICAgICAgIGJ5ID0gbmV3X3kgJSB0aDsKICAgICAgICAgcHJpdi0+bW9kZWwuYmFzZS5y
b3cgPSAtbmV3X3kgLyB0aDsKICAgICB9CkBAIC0xNzAwLDcgKzE2OTMsNyBAQCB2b2lkIGV3a190
aWxlZF9iYWNraW5nX3N0b3JlX2ZpeF9vZmZzZXRzKEV2YXNfT2JqZWN0ICpvLCBFdmFzX0Nvb3Jk
IHcsIEV2YXNfQ29vcgogCiAgICAgZm9yICg7IGl0ciA8IGl0cl9lbmQ7IGl0cisrKSB7CiAgICAg
ICAgIEV2YXNfQ29vcmQgb3ggPSBiYXNlX294OwotICAgICAgICBFaW5hX0lubGlzdCAqbHN0ID0g
Kml0cjsKKyAgICAgICAgRWluYV9Jbmxpc3QqIGxzdCA9ICppdHI7CiAKICAgICAgICAgRUlOQV9J
TkxJU1RfRk9SRUFDSChsc3QsIGl0KSB7CiAgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfaXRlbV9tb3ZlKGl0LCBveCwgb3kpOwpAQCAtMTcxMSwyNyArMTcwNCwyNyBAQCB2b2lk
IGV3a190aWxlZF9iYWNraW5nX3N0b3JlX2ZpeF9vZmZzZXRzKEV2YXNfT2JqZWN0ICpvLCBFdmFz
X0Nvb3JkIHcsIEV2YXNfQ29vcgogICAgIH0KIH0KIAotdm9pZCBld2tfdGlsZWRfYmFja2luZ19z
dG9yZV96b29tX3dlYWtfc21vb3RoX3NjYWxlX3NldChFdmFzX09iamVjdCAqbywgRWluYV9Cb29s
IHNtb290aF9zY2FsZSkKK3ZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfem9vbV93ZWFrX3Nt
b290aF9zY2FsZV9zZXQoRXZhc19PYmplY3QqIGV3a1RpbGUsIEVpbmFfQm9vbCBzbW9vdGhTY2Fs
ZSkKIHsKLSAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2KTsKLSAgICBFaW5hX0lu
bGlzdCAqKml0ciwgKippdHJfZW5kOworICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKGV3a1Rp
bGUsIHByaXYpOworICAgIEVpbmFfSW5saXN0KiogaXRyLCAqKml0cl9lbmQ7CiAKICAgICBpdHIg
PSBwcml2LT52aWV3Lml0ZW1zOwogICAgIGl0cl9lbmQgPSBpdHIgKyBwcml2LT52aWV3LnJvd3M7
Ci0gICAgcHJpdi0+dmlldy50aWxlLnpvb21fd2Vha19zbW9vdGhfc2NhbGUgPSBzbW9vdGhfc2Nh
bGU7CisgICAgcHJpdi0+dmlldy50aWxlLnpvb21fd2Vha19zbW9vdGhfc2NhbGUgPSBzbW9vdGhT
Y2FsZTsKIAogICAgIGZvciAoOyBpdHI8IGl0cl9lbmQ7IGl0cisrKSB7Ci0gICAgICAgIEV3a19U
aWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0OworICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19T
dG9yZV9JdGVtKiBpdDsKICAgICAgICAgRUlOQV9JTkxJU1RfRk9SRUFDSCgqaXRyLCBpdCkKICAg
ICAgICAgICAgIGlmIChpdC0+dGlsZSkKICAgICAgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfaXRlbV9zbW9vdGhfc2NhbGVfc2V0Ci0gICAgICAgICAgICAgICAgICAgIChpdCwg
c21vb3RoX3NjYWxlKTsKKyAgICAgICAgICAgICAgICAgICAgKGl0LCBzbW9vdGhTY2FsZSk7CiAg
ICAgfQogfQogCi1FaW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRlKEV2YXNf
T2JqZWN0ICpvLCBjb25zdCBFaW5hX1JlY3RhbmdsZSAqdXBkYXRlKQorRWluYV9Cb29sIGV3a190
aWxlZF9iYWNraW5nX3N0b3JlX3VwZGF0ZShFdmFzX09iamVjdCogZXdrVGlsZSwgY29uc3QgRWlu
YV9SZWN0YW5nbGUqIHVwZGF0ZSkKIHsKLSAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBw
cml2LCBFSU5BX0ZBTFNFKTsKKyAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihld2tUaWxlLCBw
cml2LCBFSU5BX0ZBTFNFKTsKIAogICAgIGlmIChwcml2LT5yZW5kZXIuZGlzYWJsZWQpCiAgICAg
ICAgIHJldHVybiBFSU5BX0ZBTFNFOwpAQCAtMTc0MCwzNiArMTczMywzNiBAQCBFaW5hX0Jvb2wg
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRlKEV2YXNfT2JqZWN0ICpvLCBjb25zdCBFaW5h
X1JlY3RhbmdsZSAqdQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaXYtPnZp
ZXcudGlsZS56b29tKTsKIH0KIAotdm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV91cGRhdGVz
X3Byb2Nlc3NfcHJlX3NldChFdmFzX09iamVjdCAqbywgdm9pZCAqKCpjYikodm9pZCAqZGF0YSwg
RXZhc19PYmplY3QgKm8pLCBjb25zdCB2b2lkICpkYXRhKQordm9pZCBld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV91cGRhdGVzX3Byb2Nlc3NfcHJlX3NldChFdmFzX09iamVjdCogZXdrVGlsZSwgdm9p
ZCogKCpjYWxsYmFjaykodm9pZCogZGF0YSwgRXZhc19PYmplY3QgKmV3a1RpbGUpLCBjb25zdCB2
b2lkKiBkYXRhKQogewotICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYpOwotICAg
IHByaXYtPnByb2Nlc3MucHJlX2NiID0gY2I7CisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4o
ZXdrVGlsZSwgcHJpdik7CisgICAgcHJpdi0+cHJvY2Vzcy5wcmVfY2IgPSBjYWxsYmFjazsKICAg
ICBwcml2LT5wcm9jZXNzLnByZV9kYXRhID0gKHZvaWQqKWRhdGE7CiB9CiAKLXZvaWQgZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRlc19wcm9jZXNzX3Bvc3Rfc2V0KEV2YXNfT2JqZWN0ICpv
LCB2b2lkICooKmNiKSh2b2lkICpkYXRhLCB2b2lkICpwcmVfZGF0YSwgRXZhc19PYmplY3QgKm8p
LCBjb25zdCB2b2lkICpkYXRhKQordm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV91cGRhdGVz
X3Byb2Nlc3NfcG9zdF9zZXQoRXZhc19PYmplY3QqIGV3a1RpbGUsIHZvaWQqICgqY2FsbGJhY2sp
KHZvaWQqIGRhdGEsIHZvaWQqIHByZV9kYXRhLCBFdmFzX09iamVjdCAqZXdrVGlsZSksIGNvbnN0
IHZvaWQqIGRhdGEpCiB7Ci0gICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdik7Ci0g
ICAgcHJpdi0+cHJvY2Vzcy5wb3N0X2NiID0gY2I7CisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRV
Uk4oZXdrVGlsZSwgcHJpdik7CisgICAgcHJpdi0+cHJvY2Vzcy5wb3N0X2NiID0gY2FsbGJhY2s7
CiAgICAgcHJpdi0+cHJvY2Vzcy5wb3N0X2RhdGEgPSAodm9pZCopZGF0YTsKIH0KIAotdm9pZCBl
d2tfdGlsZWRfYmFja2luZ19zdG9yZV91cGRhdGVzX3Byb2Nlc3MoRXZhc19PYmplY3QgKm8pCit2
b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3VwZGF0ZXNfcHJvY2VzcyhFdmFzX09iamVjdCog
ZXdrVGlsZSkKIHsKLSAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2KTsKKyAgICBQ
UklWX0RBVEFfR0VUX09SX1JFVFVSTihld2tUaWxlLCBwcml2KTsKICAgICBfZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfdXBkYXRlc19wcm9jZXNzKHByaXYpOwogfQogCi12b2lkIGV3a190aWxlZF9i
YWNraW5nX3N0b3JlX3VwZGF0ZXNfY2xlYXIoRXZhc19PYmplY3QgKm8pCit2b2lkIGV3a190aWxl
ZF9iYWNraW5nX3N0b3JlX3VwZGF0ZXNfY2xlYXIoRXZhc19PYmplY3QqIGV3a1RpbGUpCiB7Ci0g
ICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdik7CisgICAgUFJJVl9EQVRBX0dFVF9P
Ul9SRVRVUk4oZXdrVGlsZSwgcHJpdik7CiAKICAgICBld2tfdGlsZV9tYXRyaXhfdXBkYXRlc19j
bGVhcihwcml2LT5tb2RlbC5tYXRyaXgpOwogfQogCi12b2lkIGV3a190aWxlZF9iYWNraW5nX3N0
b3JlX2NvbnRlbnRzX3Jlc2l6ZShFdmFzX09iamVjdCAqbywgRXZhc19Db29yZCB3aWR0aCwgRXZh
c19Db29yZCBoZWlnaHQpCit2b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX2NvbnRlbnRzX3Jl
c2l6ZShFdmFzX09iamVjdCogZXdrVGlsZSwgRXZhc19Db29yZCB3aWR0aCwgRXZhc19Db29yZCBo
ZWlnaHQpCiB7Ci0gICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdik7CisgICAgUFJJ
Vl9EQVRBX0dFVF9PUl9SRVRVUk4oZXdrVGlsZSwgcHJpdik7CiAKICAgICBpZiAod2lkdGggPT0g
cHJpdi0+bW9kZWwud2lkdGggJiYgaGVpZ2h0ID09IHByaXYtPm1vZGVsLmhlaWdodCkKICAgICAg
ICAgcmV0dXJuOwpAQCAtMTc3OCwyMiArMTc3MSwyMiBAQCB2b2lkIGV3a190aWxlZF9iYWNraW5n
X3N0b3JlX2NvbnRlbnRzX3Jlc2l6ZShFdmFzX09iamVjdCAqbywgRXZhc19Db29yZCB3aWR0aCwg
RQogICAgIHByaXYtPm1vZGVsLmhlaWdodCA9IGhlaWdodDsKICAgICBwcml2LT5jaGFuZ2VkLm1v
ZGVsID0gRUlOQV9UUlVFOwogCi0gICAgREJHKCJ3aWR0aCxoZWlnaHQ9JWQsICVkIiwgd2lkdGgs
IGhlaWdodCk7CisgICAgREJHKCJ3LGg9JWQsICVkIiwgd2lkdGgsIGhlaWdodCk7CiAgICAgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX2NoYW5nZWQocHJpdik7CiB9CiAKLXZvaWQgZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfZGlzYWJsZWRfdXBkYXRlX3NldChFdmFzX09iamVjdCAqbywgRWluYV9C
b29sIHZhbHVlKQordm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9kaXNhYmxlZF91cGRhdGVf
c2V0KEV2YXNfT2JqZWN0KiBld2tUaWxlLCBFaW5hX0Jvb2wgdmFsdWUpCiB7Ci0gICAgUFJJVl9E
QVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdik7CisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4o
ZXdrVGlsZSwgcHJpdik7CiAKICAgICBpZiAodmFsdWUgIT0gcHJpdi0+cmVuZGVyLmRpc2FibGVk
KQogICAgICAgICBwcml2LT5yZW5kZXIuZGlzYWJsZWQgPSB2YWx1ZTsKIH0KIAotdm9pZCBld2tf
dGlsZWRfYmFja2luZ19zdG9yZV9mbHVzaChFdmFzX09iamVjdCAqbykKK3ZvaWQgZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfZmx1c2goRXZhc19PYmplY3QqIGV3a1RpbGUpCiB7Ci0gICAgUFJJVl9E
QVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdik7Ci0gICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0
dWMgPSAwOworICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKGV3a1RpbGUsIHByaXYpOworICAg
IEV3a19UaWxlX1VudXNlZF9DYWNoZSogdHVjID0gMDsKIAogICAgIHByaXYtPnZpZXcub2Zmc2V0
LmN1ci54ID0gMDsKICAgICBwcml2LT52aWV3Lm9mZnNldC5jdXIueSA9IDA7CkBAIC0xODI1LDIx
ICsxODE4LDIxIEBAIHZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZmx1c2goRXZhc19PYmpl
Y3QgKm8pCiAjZW5kaWYKIH0KIAotRWluYV9Cb29sIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3By
ZV9yZW5kZXJfcmVnaW9uKEV2YXNfT2JqZWN0ICpvLCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQg
eSwgRXZhc19Db29yZCB3LCBFdmFzX0Nvb3JkIGgsIGZsb2F0IHpvb20pCitFaW5hX0Jvb2wgZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZWdpb24oRXZhc19PYmplY3QqIGV3a1Rp
bGUsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5LCBFdmFzX0Nvb3JkIHdpZHRoLCBFdmFzX0Nv
b3JkIGhlaWdodCwgZmxvYXQgem9vbSkKIHsKLSAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihv
LCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihld2tUaWxl
LCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBFaW5hX1RpbGVfR3JpZF9TbGljZXIgc2xpY2VyOwot
ICAgIGNvbnN0IEVpbmFfVGlsZV9HcmlkX0luZm8gKmluZm87CisgICAgY29uc3QgRWluYV9UaWxl
X0dyaWRfSW5mbyogaW5mbzsKICAgICBFdmFzX0Nvb3JkIHR3LCB0aDsKLSAgICBFd2tfVGlsZV9V
bnVzZWRfQ2FjaGUgKnR1YzsKKyAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHR1YzsKIAotICAg
IHR3ID0gcHJpdi0+dmlldy50aWxlLnc7Ci0gICAgdGggPSBwcml2LT52aWV3LnRpbGUuaDsKLSAg
ICB6b29tID0gUk9VTkRFRF9aT09NKHByaXYtPnZpZXcudGlsZS53LCB6b29tKTsKKyAgICB0dyA9
IHByaXYtPnZpZXcudGlsZS53aWR0aDsKKyAgICB0aCA9IHByaXYtPnZpZXcudGlsZS5oZWlnaHQ7
CisgICAgem9vbSA9IFJPVU5ERURfWk9PTShwcml2LT52aWV3LnRpbGUud2lkdGgsIHpvb20pOwog
Ci0gICAgaWYgKCFlaW5hX3RpbGVfZ3JpZF9zbGljZXJfc2V0dXAoJnNsaWNlciwgeCwgeSwgdywg
aCwgdHcsIHRoKSkgeworICAgIGlmICghZWluYV90aWxlX2dyaWRfc2xpY2VyX3NldHVwKCZzbGlj
ZXIsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHR3LCB0aCkpIHsKICAgICAgICAgRVJSKCJjb3VsZCBu
b3Qgc2V0dXAgZ3JpZCBzbGljZXIgZm9yICVkLCVkKyVkeCVkIHRpbGU9JWR4JWQiLAotICAgICAg
ICAgICAgeCwgeSwgdywgaCwgdHcsIHRoKTsKKyAgICAgICAgICAgIHgsIHksIHdpZHRoLCBoZWln
aHQsIHR3LCB0aCk7CiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwogICAgIH0KIApAQCAtMTg1
MywyOSArMTg0NiwyOSBAQCBFaW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3Jl
bmRlcl9yZWdpb24oRXZhc19PYmplY3QgKm8sIEV2YXNfQ29vcmQgeAogICAgIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV9pdGVtX3Byb2Nlc3NfaWRsZXJfc3RhcnQocHJpdik7CiAKICAgICB0dWMg
PSBld2tfdGlsZV9tYXRyaXhfdW51c2VkX2NhY2hlX2dldChwcml2LT5tb2RlbC5tYXRyaXgpOwot
ICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9sb2NrX2FyZWEodHVjLCB4LCB5LCB3LCBoLCB6b29t
KTsKKyAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfbG9ja19hcmVhKHR1YywgeCwgeSwgd2lkdGgs
IGhlaWdodCwgem9vbSk7CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotRWluYV9Cb29sIGV3
a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVsYXRpdmVfcmFkaXVzKEV2YXNfT2Jq
ZWN0ICpvLCB1bnNpZ25lZCBpbnQgbiwgZmxvYXQgem9vbSkKK0VpbmFfQm9vbCBld2tfdGlsZWRf
YmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlbGF0aXZlX3JhZGl1cyhFdmFzX09iamVjdCogZXdr
VGlsZSwgdW5zaWduZWQgaW50IG4sIGZsb2F0IHpvb20pCiB7Ci0gICAgUFJJVl9EQVRBX0dFVF9P
Ul9SRVRVUk4obywgcHJpdiwgRUlOQV9GQUxTRSk7Ci0gICAgdW5zaWduZWQgbG9uZyBzdGFydF9y
b3csIGVuZF9yb3csIHN0YXJ0X2NvbCwgZW5kX2NvbCwgaSwgaiwgdywgaDsKLSAgICBFd2tfVGls
ZV9VbnVzZWRfQ2FjaGUgKnR1YzsKKyAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihld2tUaWxl
LCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICB1bnNpZ25lZCBsb25nIHN0YXJ0X3JvdywgZW5kX3Jv
dywgc3RhcnRfY29sLCBlbmRfY29sLCBpLCBqLCB3aWR0aCwgaGVpZ2h0OworICAgIEV3a19UaWxl
X1VudXNlZF9DYWNoZSogdHVjOwogCiAgICAgSU5GKCJwcml2LT5tb2RlbC5iYXNlLnJvdyA9JWxk
LCBuPSV1IHByaXYtPnZpZXcucm93cz0lbHUiLAotICAgICAgICAgICAgcHJpdi0+bW9kZWwuYmFz
ZS5yb3csIG4sIHByaXYtPnZpZXcucm93cyk7CisgICAgICAgIHByaXYtPm1vZGVsLmJhc2Uucm93
LCBuLCBwcml2LT52aWV3LnJvd3MpOwogICAgIHN0YXJ0X3JvdyA9IChsb25nKXByaXYtPm1vZGVs
LmJhc2Uucm93IC0gbjsKICAgICBzdGFydF9jb2wgPSAobG9uZylwcml2LT5tb2RlbC5iYXNlLmNv
bCAtIG47CiAgICAgZW5kX3JvdyA9IHN0ZDo6bWluKHByaXYtPm1vZGVsLmN1ci5yb3dzIC0gMSwK
LSAgICAgICAgICAgICAgICAgIHByaXYtPm1vZGVsLmJhc2Uucm93ICsgcHJpdi0+dmlldy5yb3dz
ICsgbiAtIDEpOworICAgICAgICAgICAgICAgICAgICAgICBwcml2LT5tb2RlbC5iYXNlLnJvdyAr
IHByaXYtPnZpZXcucm93cyArIG4gLSAxKTsKICAgICBlbmRfY29sID0gc3RkOjptaW4ocHJpdi0+
bW9kZWwuY3VyLmNvbHMgLSAxLAotICAgICAgICAgICAgICAgICAgcHJpdi0+bW9kZWwuYmFzZS5j
b2wgKyBwcml2LT52aWV3LmNvbHMgKyBuIC0gMSk7CisgICAgICAgICAgICAgICAgICAgICAgIHBy
aXYtPm1vZGVsLmJhc2UuY29sICsgcHJpdi0+dmlldy5jb2xzICsgbiAtIDEpOwogCiAgICAgSU5G
KCJzdGFydF9yb3c9JWx1LCBlbmRfcm93PSVsdSwgc3RhcnRfY29sPSVsdSwgZW5kX2NvbD0lbHUi
LAotICAgICAgICAgc3RhcnRfcm93LCBlbmRfcm93LCBzdGFydF9jb2wsIGVuZF9jb2wpOworICAg
ICAgICBzdGFydF9yb3csIGVuZF9yb3csIHN0YXJ0X2NvbCwgZW5kX2NvbCk7CiAKLSAgICB6b29t
ID0gUk9VTkRFRF9aT09NKHByaXYtPnZpZXcudGlsZS53LCB6b29tKTsKKyAgICB6b29tID0gUk9V
TkRFRF9aT09NKHByaXYtPnZpZXcudGlsZS53aWR0aCwgem9vbSk7CiAKICAgICBmb3IgKGkgPSBz
dGFydF9yb3c7IGkgPD0gZW5kX3JvdzsgaSsrKQogICAgICAgICBmb3IgKGogPSBzdGFydF9jb2w7
IGogPD0gZW5kX2NvbDsgaisrKQpAQCAtMTg4NiwxOSArMTg3OSwxOSBAQCBzdGFydF9wcm9jZXNz
aW5nOgogICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Byb2Nlc3NfaWRsZXJfc3Rh
cnQocHJpdik7CiAKICAgICB0dWMgPSBld2tfdGlsZV9tYXRyaXhfdW51c2VkX2NhY2hlX2dldChw
cml2LT5tb2RlbC5tYXRyaXgpOwotICAgIGggPSAoZW5kX3JvdyAtIHN0YXJ0X3JvdyArIDEpICog
VElMRV9TSVpFX0FUX1pPT00ocHJpdi0+dmlldy50aWxlLmgsIHpvb20pOwotICAgIHcgPSAoZW5k
X2NvbCAtIHN0YXJ0X2NvbCArIDEpICogVElMRV9TSVpFX0FUX1pPT00ocHJpdi0+dmlldy50aWxl
LncsIHpvb20pOworICAgIGhlaWdodCA9IChlbmRfcm93IC0gc3RhcnRfcm93ICsgMSkgKiBUSUxF
X1NJWkVfQVRfWk9PTShwcml2LT52aWV3LnRpbGUuaGVpZ2h0LCB6b29tKTsKKyAgICB3aWR0aCA9
IChlbmRfY29sIC0gc3RhcnRfY29sICsgMSkgKiBUSUxFX1NJWkVfQVRfWk9PTShwcml2LT52aWV3
LnRpbGUud2lkdGgsIHpvb20pOwogICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9sb2NrX2FyZWEo
dHVjLAotICAgICAgICAgICAgc3RhcnRfY29sICogVElMRV9TSVpFX0FUX1pPT00ocHJpdi0+dmll
dy50aWxlLncsIHpvb20pLAotICAgICAgICAgICAgc3RhcnRfcm93ICogVElMRV9TSVpFX0FUX1pP
T00ocHJpdi0+dmlldy50aWxlLmgsIHpvb20pLCB3LCBoLCB6b29tKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0X2NvbCAqIFRJTEVfU0laRV9BVF9aT09NKHByaXYt
PnZpZXcudGlsZS53aWR0aCwgem9vbSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdGFydF9yb3cgKiBUSUxFX1NJWkVfQVRfWk9PTShwcml2LT52aWV3LnRpbGUuaGVpZ2h0
LCB6b29tKSwgd2lkdGgsIGhlaWdodCwgem9vbSk7CiAKICAgICByZXR1cm4gRUlOQV9UUlVFOwog
fQogCi12b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfY2FuY2VsKEV2YXNf
T2JqZWN0ICpvKQordm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX2NhbmNl
bChFdmFzX09iamVjdCogZXdrVGlsZSkKIHsKLSAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihv
LCBwcml2KTsKLSAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YzsKKyAgICBQUklWX0RBVEFf
R0VUX09SX1JFVFVSTihld2tUaWxlLCBwcml2KTsKKyAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUq
IHR1YzsKIAogICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3Rf
Y2xlYXIocHJpdik7CiAKQEAgLTE5MDYsMTUgKzE4OTksMTUgQEAgdm9pZCBld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9wcmVfcmVuZGVyX2NhbmNlbChFdmFzX09iamVjdCAqbykKICAgICBld2tfdGls
ZV91bnVzZWRfY2FjaGVfdW5sb2NrX2FyZWEodHVjKTsKIH0KIAotRWluYV9Cb29sIGV3a190aWxl
ZF9iYWNraW5nX3N0b3JlX2Rpc2FibGVfcmVuZGVyKEV2YXNfT2JqZWN0ICpvKQorRWluYV9Cb29s
IGV3a190aWxlZF9iYWNraW5nX3N0b3JlX2Rpc2FibGVfcmVuZGVyKEV2YXNfT2JqZWN0KiBld2tU
aWxlKQogewotICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYsIEVJTkFfRkFMU0Up
OworICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKGV3a1RpbGUsIHByaXYsIEVJTkFfRkFMU0Up
OwogICAgIHJldHVybiBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZGlzYWJsZV9yZW5kZXIocHJp
dik7CiB9CiAKLUVpbmFfQm9vbCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9lbmFibGVfcmVuZGVy
KEV2YXNfT2JqZWN0ICpvKQorRWluYV9Cb29sIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX2VuYWJs
ZV9yZW5kZXIoRXZhc19PYmplY3QqIGV3a1RpbGUpCiB7Ci0gICAgUFJJVl9EQVRBX0dFVF9PUl9S
RVRVUk4obywgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4o
ZXdrVGlsZSwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X2NoYW5nZWQocHJpdik7CiAgICAgcmV0dXJuIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9lbmFi
bGVfcmVuZGVyKHByaXYpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3
a190aWxlZF9iYWNraW5nX3N0b3JlLmggYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmUuaAppbmRleCAzMDEwM2VkMWQzMGQ2OWQxYmY1NTIwZDQyZWY0OWY3MzU4
YzY0YzMyLi43OTQ1MWFlZjIwM2NmOTVkYzJjYWFhZGRjODg4YWIxZWRiZDNjM2ZkIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmUuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmUuaApAQCAtNzIs
NyArNzIsNyBAQCBzdHJ1Y3QgX0V3a19UaWxlIHsKICAgICBjYWlyb190KiBjYWlybzsKIAogICAg
IC8qKiBOZXZlciBldmVyIGNoYW5nZSB0aG9zZSBhZnRlciB0aWxlIGlzIGNyZWF0ZWQgKHJlc3Bl
Y3QgY29uc3QhKSAqLwotICAgIGNvbnN0IEV2YXNfQ29vcmQgdywgaDsgICAgICAgIC8qKjwgdGls
ZSBzaXplIChzZWUgVElMRV9TSVpFX0FUX1pPT00oKSkgKi8KKyAgICBjb25zdCBFdmFzX0Nvb3Jk
IHdpZHRoLCBoZWlnaHQ7ICAgICAgICAvKio8IHRpbGUgc2l6ZSAoc2VlIFRJTEVfU0laRV9BVF9a
T09NKCkpICovCiAgICAgY29uc3QgRXZhc19Db2xvcnNwYWNlIGNzcGFjZTsgLyoqPCBjb2xvcnNw
YWNlICovCiAgICAgY29uc3QgZmxvYXQgem9vbTsgICAgICAgICAgICAgLyoqPCB6b29tIGxldmVs
IGNvbnRlbnRzIHdlcmUgcmVuZGVyZWQgYXQgKi8KICAgICBjb25zdCBzaXplX3QgYnl0ZXM7ICAg
ICAgICAgICAvKio8IGJ5dGVzIHVzZWQgaW4gcGl4ZWxzLiBrZWVwCkBAIC05MCw3ICs5MCw3IEBA
IHN0cnVjdCBfRXdrX1RpbGUgewogLyogdmlldyAqLwogRXZhc19PYmplY3QqIGV3a190aWxlZF9i
YWNraW5nX3N0b3JlX2FkZChFdmFzKiBlKTsKIAotdm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV9yZW5kZXJfY2Jfc2V0KEV2YXNfT2JqZWN0ICpvLCBFaW5hX0Jvb2wgKCogY2IpKHZvaWQqIGRh
dGEsIEV3a19UaWxlKiB0LCBjb25zdCBFaW5hX1JlY3RhbmdsZSogYXJlYSksIGNvbnN0IHZvaWQq
IGRhdGEpOwordm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9yZW5kZXJfY2Jfc2V0KEV2YXNf
T2JqZWN0ICpvLCBFaW5hX0Jvb2wgKCpjYikodm9pZCogZGF0YSwgRXdrX1RpbGUqIHQsIGNvbnN0
IEVpbmFfUmVjdGFuZ2xlKiBhcmVhKSwgY29uc3Qgdm9pZCogZGF0YSk7CiAKIEVpbmFfQm9vbCBl
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9zY3JvbGxfZnVsbF9vZmZzZXRfc2V0KEV2YXNfT2JqZWN0
KiBvLCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSk7CiBFaW5hX0Jvb2wgZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfc2Nyb2xsX2Z1bGxfb2Zmc2V0X2FkZChFdmFzX09iamVjdCogbywgRXZhc19D
b29yZCBkeCwgRXZhc19Db29yZCBkeSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9l
d2svZXdrX3RpbGVkX21hdHJpeC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVk
X21hdHJpeC5jcHAKaW5kZXggZmY0YzQxYzcxOTEzNDdmMDFhNjE5YjNkMWNiZWU5YmNiNTRhNjJj
ZS4uZTkxYmQ3Nzc3N2UxMDVkMGZlMjJkY2FmOGYyZDZhYTAwMTZkMjI0ZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9lZmwvZXdrL2V3a190aWxlZF9tYXRyaXguY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfbWF0cml4LmNwcApAQCAtMzIsMTcgKzMyLDE3IEBACiAj
aW5jbHVkZSA8c3RyaW5nLmg+CiAKIHN0cnVjdCBfRXdrX1RpbGVfTWF0cml4IHsKLSAgICBFaW5h
X01hdHJpeHNwYXJzZSAqbWF0cml4OwotICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjOwor
ICAgIEVpbmFfTWF0cml4c3BhcnNlKiBtYXRyaXg7CisgICAgRXdrX1RpbGVfVW51c2VkX0NhY2hl
KiB0dWM7CiAgICAgRXZhc19Db2xvcnNwYWNlIGNzcGFjZTsKICAgICBzdHJ1Y3QgewotICAgICAg
ICB2b2lkICgqY2IpKHZvaWQgKmRhdGEsIEV3a19UaWxlICp0LCBjb25zdCBFaW5hX1JlY3Rhbmds
ZSAqdXBkYXRlKTsKLSAgICAgICAgdm9pZCAqZGF0YTsKKyAgICAgICAgdm9pZCAoKmNiKSh2b2lk
KiBkYXRhLCBFd2tfVGlsZSogdGlsZSwgY29uc3QgRWluYV9SZWN0YW5nbGUqIHVwZGF0ZSk7Cisg
ICAgICAgIHZvaWQqIGRhdGE7CiAgICAgfSByZW5kZXI7CiAgICAgdW5zaWduZWQgaW50IGZyb3pl
bjsKLSAgICBFaW5hX0xpc3QgKnVwZGF0ZXM7CisgICAgRWluYV9MaXN0KiB1cGRhdGVzOwogICAg
IHN0cnVjdCB7Ci0gICAgICAgIEV2YXNfQ29vcmQgdywgaDsKKyAgICAgICAgRXZhc19Db29yZCB3
aWR0aCwgaGVpZ2h0OwogICAgIH0gdGlsZTsKICNpZmRlZiBERUJVR19NRU1fTEVBS1MKICAgICBz
dHJ1Y3QgewpAQCAtNTksMzEgKzU5LDMxIEBAIHN0YXRpYyB1aW50NjRfdCBieXRlc19sZWFrZWQg
PSAwOwogI2VuZGlmCiAKIC8qIGNhbGxlZCB3aGVuIG1hdHJpeHNwYXJzZSBpcyByZXNpemVkIG9y
IGZyZWVkICovCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVfbWF0cml4X2NlbGxfZnJlZSh2b2lkICp1
c2VyX2RhdGEsIHZvaWQgKmNlbGxfZGF0YSkKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZV9tYXRyaXhf
Y2VsbF9mcmVlKHZvaWQqIHVzZXJEYXRhLCB2b2lkKiBjZWxsRGF0YSkKIHsKLSAgICBFd2tfVGls
ZV9NYXRyaXgqIHRtID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGVfTWF0cml4Kj4odXNlcl9kYXRhKTsK
LSAgICBFd2tfVGlsZSogdCA9IHN0YXRpY19jYXN0PEV3a19UaWxlKj4oY2VsbF9kYXRhKTsKKyAg
ICBFd2tfVGlsZV9NYXRyaXgqIHRtID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGVfTWF0cml4Kj4odXNl
ckRhdGEpOworICAgIEV3a19UaWxlKiB0aWxlID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGUqPihjZWxs
RGF0YSk7CiAKLSAgICBpZiAoIXQpCisgICAgaWYgKCF0aWxlKQogICAgICAgICByZXR1cm47CiAK
ICAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfZnJlZXplKHRtLT50dWMpOwogCi0gICAgaWYgKHQt
PnVwZGF0ZXMgfHwgdC0+c3RhdHMuZnVsbF91cGRhdGUpCi0gICAgICAgIHRtLT51cGRhdGVzID0g
ZWluYV9saXN0X3JlbW92ZSh0bS0+dXBkYXRlcywgdCk7CisgICAgaWYgKHRpbGUtPnVwZGF0ZXMg
fHwgdGlsZS0+c3RhdHMuZnVsbF91cGRhdGUpCisgICAgICAgIHRtLT51cGRhdGVzID0gZWluYV9s
aXN0X3JlbW92ZSh0bS0+dXBkYXRlcywgdGlsZSk7CiAKLSAgICBpZiAodC0+dmlzaWJsZSkKLSAg
ICAgICAgRVJSKCJmcmVlaW5nIGNlbGwgdGhhdCBpcyB2aXNpYmxlLCBsZWFraW5nIHRpbGUgJXAi
LCB0KTsKKyAgICBpZiAodGlsZS0+dmlzaWJsZSkKKyAgICAgICAgRVJSKCJmcmVlaW5nIGNlbGwg
dGhhdCBpcyB2aXNpYmxlLCBsZWFraW5nIHRpbGUgJXAiLCB0aWxlKTsKICAgICBlbHNlIHsKLSAg
ICAgICAgaWYgKCFld2tfdGlsZV91bnVzZWRfY2FjaGVfdGlsZV9nZXQodG0tPnR1YywgdCkpCi0g
ICAgICAgICAgICBFUlIoInRpbGUgJXAgd2FzIG5vdCBpbiBjYWNoZSAlcD8gbGVha2luZy4uLiIs
IHQsIHRtLT50dWMpOworICAgICAgICBpZiAoIWV3a190aWxlX3VudXNlZF9jYWNoZV90aWxlX2dl
dCh0bS0+dHVjLCB0aWxlKSkKKyAgICAgICAgICAgIEVSUigidGlsZSAlcCB3YXMgbm90IGluIGNh
Y2hlICVwPyBsZWFraW5nLi4uIiwgdGlsZSwgdG0tPnR1Yyk7CiAgICAgICAgIGVsc2UgewotICAg
ICAgICAgICAgREJHKCJ0aWxlIGNlbGwgZG9lcyBub3QgZXhpc3QgYW55bW9yZSwgZnJlZSBpdCAl
cCIsIHQpOworICAgICAgICAgICAgREJHKCJ0aWxlIGNlbGwgZG9lcyBub3QgZXhpc3QgYW55bW9y
ZSwgZnJlZSBpdCAlcCIsIHRpbGUpOwogI2lmZGVmIERFQlVHX01FTV9MRUFLUwotICAgICAgICAg
ICAgdG0tPnN0YXRzLmJ5dGVzLmZyZWVkICs9IHQtPmJ5dGVzOworICAgICAgICAgICAgdG0tPnN0
YXRzLmJ5dGVzLmZyZWVkICs9IHRpbGUtPmJ5dGVzOwogICAgICAgICAgICAgdG0tPnN0YXRzLnRp
bGVzLmZyZWVkKys7CiAjZW5kaWYKLSAgICAgICAgICAgIGV3a190aWxlX2ZyZWUodCk7CisgICAg
ICAgICAgICBld2tfdGlsZV9mcmVlKHRpbGUpOwogICAgICAgICB9CiAgICAgfQogCkBAIC05MSw0
MCArOTEsNDAgQEAgc3RhdGljIHZvaWQgX2V3a190aWxlX21hdHJpeF9jZWxsX2ZyZWUodm9pZCAq
dXNlcl9kYXRhLCB2b2lkICpjZWxsX2RhdGEpCiB9CiAKIC8qIGNhbGxlZCB3aGVuIGNhY2hlIG9m
IHVudXNlZCB0aWxlIGlzIGZsdXNoZWQgKi8KLXN0YXRpYyB2b2lkIF9ld2tfdGlsZV9tYXRyaXhf
dGlsZV9mcmVlKHZvaWQgKmRhdGEsIEV3a19UaWxlICp0KQorc3RhdGljIHZvaWQgX2V3a190aWxl
X21hdHJpeF90aWxlX2ZyZWUodm9pZCogZGF0YSwgRXdrX1RpbGUqIHRpbGUpCiB7CiAgICAgRXdr
X1RpbGVfTWF0cml4KiB0bSA9IHN0YXRpY19jYXN0PEV3a19UaWxlX01hdHJpeCo+KGRhdGEpOwot
ICAgIEVpbmFfTWF0cml4c3BhcnNlX0NlbGwgKmNlbGw7Ci0gCi0gICAgaWYgKCFlaW5hX21hdHJp
eHNwYXJzZV9jZWxsX2lkeF9nZXQodG0tPm1hdHJpeCwgdC0+cm93LCB0LT5jb2wsICZjZWxsKSkg
ewotICAgICAgICBFUlIoInJlbW92aW5nIHRpbGUgJXAgdGhhdCB3YXMgbm90IGluIHRoZSBtYXRy
aXg/IExlYWtpbmcuLi4iLCB0KTsKKyAgICBFaW5hX01hdHJpeHNwYXJzZV9DZWxsKiBjZWxsOwor
CisgICAgaWYgKCFlaW5hX21hdHJpeHNwYXJzZV9jZWxsX2lkeF9nZXQodG0tPm1hdHJpeCwgdGls
ZS0+cm93LCB0aWxlLT5jb2wsICZjZWxsKSkgeworICAgICAgICBFUlIoInJlbW92aW5nIHRpbGUg
JXAgdGhhdCB3YXMgbm90IGluIHRoZSBtYXRyaXg/IExlYWtpbmcuLi4iLCB0aWxlKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAogICAgIGlmICghY2VsbCkgewotICAgICAgICBFUlIoInJlbW92
aW5nIHRpbGUgJXAgdGhhdCB3YXMgbm90IGluIHRoZSBtYXRyaXg/IExlYWtpbmcuLi4iLCB0KTsK
KyAgICAgICAgRVJSKCJyZW1vdmluZyB0aWxlICVwIHRoYXQgd2FzIG5vdCBpbiB0aGUgbWF0cml4
PyBMZWFraW5nLi4uIiwgdGlsZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAo
dC0+dXBkYXRlcyB8fCB0LT5zdGF0cy5mdWxsX3VwZGF0ZSkKLSAgICAgICAgdG0tPnVwZGF0ZXMg
PSBlaW5hX2xpc3RfcmVtb3ZlKHRtLT51cGRhdGVzLCB0KTsKKyAgICBpZiAodGlsZS0+dXBkYXRl
cyB8fCB0aWxlLT5zdGF0cy5mdWxsX3VwZGF0ZSkKKyAgICAgICAgdG0tPnVwZGF0ZXMgPSBlaW5h
X2xpc3RfcmVtb3ZlKHRtLT51cGRhdGVzLCB0aWxlKTsKIAogICAgIC8qIHNldCB0byBudWxsIHRv
IGF2b2lkIGRvdWJsZSBmcmVlICovCiAgICAgZWluYV9tYXRyaXhzcGFyc2VfY2VsbF9kYXRhX3Jl
cGxhY2UoY2VsbCwgMCwgMCk7CiAgICAgZWluYV9tYXRyaXhzcGFyc2VfY2VsbF9jbGVhcihjZWxs
KTsKIAotICAgIGlmIChFSU5BX1VOTElLRUxZKCEhdC0+dmlzaWJsZSkpIHsKKyAgICBpZiAoRUlO
QV9VTkxJS0VMWSghIXRpbGUtPnZpc2libGUpKSB7CiAgICAgICAgIEVSUigiY2FjaGUgb2YgdW51
c2VkIHRpbGVzIHJlcXVlc3RpbmcgZGVsZXRpb24gb2YgdXNlZCB0aWxlICVwPyAiCi0gICAgICAg
ICAgICAiTGVha2luZy4uLiIsIHQpOworICAgICAgICAgICAgIkxlYWtpbmcuLi4iLCB0aWxlKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogI2lmZGVmIERFQlVHX01FTV9MRUFLUwotICAgIHRt
LT5zdGF0cy5ieXRlcy5mcmVlZCArPSB0LT5ieXRlczsKKyAgICB0bS0+c3RhdHMuYnl0ZXMuZnJl
ZWQgKz0gdGlsZS0+Ynl0ZXM7CiAgICAgdG0tPnN0YXRzLnRpbGVzLmZyZWVkKys7CiAjZW5kaWYK
IAotICAgIGV3a190aWxlX2ZyZWUodCk7CisgICAgZXdrX3RpbGVfZnJlZSh0aWxlKTsKIH0KIAog
LyoqCkBAIC0xMzcsNyArMTM3LDcgQEAgc3RhdGljIHZvaWQgX2V3a190aWxlX21hdHJpeF90aWxl
X2ZyZWUodm9pZCAqZGF0YSwgRXdrX1RpbGUgKnQpCiAgKgogICogQHBhcmFtIHR1YyBjYWNoZSBv
ZiB1bnVzZWQgdGlsZXMgb3IgQGMgMCB0byBjcmVhdGUgb25lCiAgKiAgICAgICAgYXV0b21hdGlj
YWxseS4KLSAqIEBwYXJhbSBjb2xzIG51bWJlciBvZiBjb2x1bW5zIGluIHRoZSBtYXRyaXguCisg
KiBAcGFyYW0gY29sdW1ucyBudW1iZXIgb2YgY29sdW1ucyBpbiB0aGUgbWF0cml4LgogICogQHBh
cmFtIHJvd3MgbnVtYmVyIG9mIHJvd3MgaW4gdGhlIG1hdHJpeC4KICAqIEBwYXJhbSBjc3BhY2Ug
dGhlIGNvbG9yIHNwYWNlIHVzZWQgdG8gY3JlYXRlIHRpbGVzIGluIHRoaXMgbWF0cml4LgogICog
QHBhcmFtIHJlbmRlcl9jYiBmdW5jdGlvbiB1c2VkIHRvIHJlbmRlciBnaXZlbiB0aWxlIHVwZGF0
ZS4KQEAgLTE0NSwyMSArMTQ1LDIxIEBAIHN0YXRpYyB2b2lkIF9ld2tfdGlsZV9tYXRyaXhfdGls
ZV9mcmVlKHZvaWQgKmRhdGEsIEV3a19UaWxlICp0KQogICoKICAqIEByZXR1cm4gbmV3bHkgYWxs
b2NhdGVkIGluc3RhbmNlIG9uIHN1Y2Nlc3MsIEBjIDAgb24gZmFpbHVyZS4KICAqLwotRXdrX1Rp
bGVfTWF0cml4ICpld2tfdGlsZV9tYXRyaXhfbmV3KEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVj
LCB1bnNpZ25lZCBsb25nIGNvbHMsIHVuc2lnbmVkIGxvbmcgcm93cywgRXZhc19Db2xvcnNwYWNl
IGNzcGFjZSwgdm9pZCAoKnJlbmRlcl9jYikodm9pZCAqZGF0YSwgRXdrX1RpbGUgKnQsIGNvbnN0
IEVpbmFfUmVjdGFuZ2xlICp1cGRhdGUpLCBjb25zdCB2b2lkICpyZW5kZXJfZGF0YSkKK0V3a19U
aWxlX01hdHJpeCogZXdrX3RpbGVfbWF0cml4X25ldyhFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHRp
bGVVbnVzZWRDYWNoZSwgdW5zaWduZWQgbG9uZyBjb2x1bW5zLCB1bnNpZ25lZCBsb25nIHJvd3Ms
IEV2YXNfQ29sb3JzcGFjZSBjb2xvclNwYWNlLCB2b2lkICgqcmVuZGVyX2NhbGxiYWNrKSh2b2lk
KiBkYXRhLCBFd2tfVGlsZSogdGlsZSwgY29uc3QgRWluYV9SZWN0YW5nbGUqIHVwZGF0ZSksIGNv
bnN0IHZvaWQqIHJlbmRlckRhdGEpCiB7CiAgICAgRXdrX1RpbGVfTWF0cml4KiB0bSA9IHN0YXRp
Y19jYXN0PEV3a19UaWxlX01hdHJpeCo+KGNhbGxvYygxLCBzaXplb2YoRXdrX1RpbGVfTWF0cml4
KSkpOwogICAgIGlmICghdG0pCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgdG0tPm1hdHJpeCA9
IGVpbmFfbWF0cml4c3BhcnNlX25ldyhyb3dzLCBjb2xzLCBfZXdrX3RpbGVfbWF0cml4X2NlbGxf
ZnJlZSwgdG0pOworICAgIHRtLT5tYXRyaXggPSBlaW5hX21hdHJpeHNwYXJzZV9uZXcocm93cywg
Y29sdW1ucywgX2V3a190aWxlX21hdHJpeF9jZWxsX2ZyZWUsIHRtKTsKICAgICBpZiAoIXRtLT5t
YXRyaXgpIHsKICAgICAgICAgRVJSKCJjb3VsZCBub3QgY3JlYXRlIHNwYXJzZSBtYXRyaXguIik7
CiAgICAgICAgIGZyZWUodG0pOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBpZiAo
dHVjKQotICAgICAgICB0bS0+dHVjID0gZXdrX3RpbGVfdW51c2VkX2NhY2hlX3JlZih0dWMpOwor
ICAgIGlmICh0aWxlVW51c2VkQ2FjaGUpCisgICAgICAgIHRtLT50dWMgPSBld2tfdGlsZV91bnVz
ZWRfY2FjaGVfcmVmKHRpbGVVbnVzZWRDYWNoZSk7CiAgICAgZWxzZSB7CiAgICAgICAgIHRtLT50
dWMgPSBld2tfdGlsZV91bnVzZWRfY2FjaGVfbmV3KDQwOTYwMDAwKTsKICAgICAgICAgaWYgKCF0
bS0+dHVjKSB7CkBAIC0xNzAsMTEgKzE3MCwxMSBAQCBFd2tfVGlsZV9NYXRyaXggKmV3a190aWxl
X21hdHJpeF9uZXcoRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMsIHVuc2lnbmVkIGxvbmcgYwog
ICAgICAgICB9CiAgICAgfQogCi0gICAgdG0tPmNzcGFjZSA9IGNzcGFjZTsKLSAgICB0bS0+cmVu
ZGVyLmNiID0gcmVuZGVyX2NiOwotICAgIHRtLT5yZW5kZXIuZGF0YSA9ICh2b2lkICopcmVuZGVy
X2RhdGE7Ci0gICAgdG0tPnRpbGUudyA9IERFRkFVTFRfVElMRV9XOwotICAgIHRtLT50aWxlLmgg
PSBERUZBVUxUX1RJTEVfSDsKKyAgICB0bS0+Y3NwYWNlID0gY29sb3JTcGFjZTsKKyAgICB0bS0+
cmVuZGVyLmNiID0gcmVuZGVyX2NhbGxiYWNrOworICAgIHRtLT5yZW5kZXIuZGF0YSA9ICh2b2lk
KilyZW5kZXJEYXRhOworICAgIHRtLT50aWxlLndpZHRoID0gREVGQVVMVF9USUxFX1c7CisgICAg
dG0tPnRpbGUuaGVpZ2h0ID0gREVGQVVMVF9USUxFX0g7CiAKICAgICByZXR1cm4gdG07CiB9CkBA
IC0xODQsNTYgKzE4NCw1NiBAQCBFd2tfVGlsZV9NYXRyaXggKmV3a190aWxlX21hdHJpeF9uZXco
RXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMsIHVuc2lnbmVkIGxvbmcgYwogICoKICAqIFRoZSBj
YWNoZSBpbnN0YW5jZSBpcyB1bnJlZmVyZW5jZWQsIHBvc3NpYmx5IGZyZWVpbmcgaXQuCiAgKi8K
LXZvaWQgZXdrX3RpbGVfbWF0cml4X2ZyZWUoRXdrX1RpbGVfTWF0cml4ICp0bSkKK3ZvaWQgZXdr
X3RpbGVfbWF0cml4X2ZyZWUoRXdrX1RpbGVfTWF0cml4KiB0aWxlTWF0cml4KQogewogI2lmZGVm
IERFQlVHX01FTV9MRUFLUwogICAgIHVpbnQ2NF90IHRpbGVzLCBieXRlczsKICNlbmRpZgogCi0g
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4odG0pOwotICAgIGV3a190aWxlX3VudXNlZF9j
YWNoZV9mcmVlemUodG0tPnR1Yyk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4odGls
ZU1hdHJpeCk7CisgICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2ZyZWV6ZSh0aWxlTWF0cml4LT50
dWMpOwogCi0gICAgZWluYV9tYXRyaXhzcGFyc2VfZnJlZSh0bS0+bWF0cml4KTsKKyAgICBlaW5h
X21hdHJpeHNwYXJzZV9mcmVlKHRpbGVNYXRyaXgtPm1hdHJpeCk7CiAKLSAgICBld2tfdGlsZV91
bnVzZWRfY2FjaGVfdGhhdyh0bS0+dHVjKTsKLSAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfdW5y
ZWYodG0tPnR1Yyk7CisgICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3RoYXcodGlsZU1hdHJpeC0+
dHVjKTsKKyAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfdW5yZWYodGlsZU1hdHJpeC0+dHVjKTsK
IAogI2lmZGVmIERFQlVHX01FTV9MRUFLUwotICAgIHRpbGVzID0gdG0tPnN0YXRzLnRpbGVzLmFs
bG9jYXRlZCAtIHRtLT5zdGF0cy50aWxlcy5mcmVlZDsKLSAgICBieXRlcyA9IHRtLT5zdGF0cy5i
eXRlcy5hbGxvY2F0ZWQgLSB0bS0+c3RhdHMuYnl0ZXMuZnJlZWQ7CisgICAgdGlsZXMgPSB0aWxl
TWF0cml4LT5zdGF0cy50aWxlcy5hbGxvY2F0ZWQgLSB0aWxlTWF0cml4LT5zdGF0cy50aWxlcy5m
cmVlZDsKKyAgICBieXRlcyA9IHRpbGVNYXRyaXgtPnN0YXRzLmJ5dGVzLmFsbG9jYXRlZCAtIHRp
bGVNYXRyaXgtPnN0YXRzLmJ5dGVzLmZyZWVkOwogCiAgICAgdGlsZXNfbGVha2VkICs9IHRpbGVz
OwogICAgIGJ5dGVzX2xlYWtlZCArPSBieXRlczsKIAogICAgIGlmICh0aWxlcyB8fCBieXRlcykK
LSAgICAgICAgRVJSKCJ0aWxlZCBtYXRyaXggbGVha2VkOiB0aWxlc1srJSJQUkl1NjQiLC0lIlBS
SXU2NCI6JSJQUkl1NjQiXSAiCi0gICAgICAgICAgICJieXRlc1srJSJQUkl1NjQiLC0lIlBSSXU2
NCI6JSJQUkl1NjQiXSIsCi0gICAgICAgICAgICB0bS0+c3RhdHMudGlsZXMuYWxsb2NhdGVkLCB0
bS0+c3RhdHMudGlsZXMuZnJlZWQsIHRpbGVzLAotICAgICAgICAgICAgdG0tPnN0YXRzLmJ5dGVz
LmFsbG9jYXRlZCwgdG0tPnN0YXRzLmJ5dGVzLmZyZWVkLCBieXRlcyk7CisgICAgICAgIEVSUigi
dGlsZWQgbWF0cml4IGxlYWtlZDogdGlsZXNbKyUiIFBSSXU2NCAiLC0lIiBQUkl1NjQgIjolIiBQ
Ukl1NjQgIl0gIgorICAgICAgICAgICAgImJ5dGVzWyslIiBQUkl1NjQgIiwtJSIgUFJJdTY0ICI6
JSIgUFJJdTY0ICJdIiwKKyAgICAgICAgICAgIHRpbGVNYXRyaXgtPnN0YXRzLnRpbGVzLmFsbG9j
YXRlZCwgdGlsZU1hdHJpeC0+c3RhdHMudGlsZXMuZnJlZWQsIHRpbGVzLAorICAgICAgICAgICAg
dGlsZU1hdHJpeC0+c3RhdHMuYnl0ZXMuYWxsb2NhdGVkLCB0aWxlTWF0cml4LT5zdGF0cy5ieXRl
cy5mcmVlZCwgYnl0ZXMpOwogICAgIGVsc2UgaWYgKHRpbGVzX2xlYWtlZCB8fCBieXRlc19sZWFr
ZWQpCi0gICAgICAgIFdSTigidGlsZWQgbWF0cml4IGhhZCBubyBsZWFrczogdGlsZXNbKyUiUFJJ
dTY0IiwtJSJQUkl1NjQiXSAiCi0gICAgICAgICAgICJieXRlc1srJSJQUkl1NjQiLC0lIlBSSXU2
NCJdLCBidXQgc29tZSBvdGhlciBsZWFrZWQgIgotICAgICAgICAgICAgIiUiUFJJdTY0IiB0aWxl
cyAoJSJQUkl1NjQiIGJ5dGVzKSIsCi0gICAgICAgICAgICB0bS0+c3RhdHMudGlsZXMuYWxsb2Nh
dGVkLCB0bS0+c3RhdHMudGlsZXMuZnJlZWQsCi0gICAgICAgICAgICB0bS0+c3RhdHMuYnl0ZXMu
YWxsb2NhdGVkLCB0bS0+c3RhdHMuYnl0ZXMuZnJlZWQsCisgICAgICAgIFdSTigidGlsZWQgbWF0
cml4IGhhZCBubyBsZWFrczogdGlsZXNbKyUiIFBSSXU2NCAiLC0lIiBQUkl1NjQgIl0gIgorICAg
ICAgICAgICAgImJ5dGVzWyslIiBQUkl1NjQgIiwtJSIgUFJJdTY0ICJdLCBidXQgc29tZSBvdGhl
ciBsZWFrZWQgIgorICAgICAgICAgICAgIiUiIFBSSXU2NCAiIHRpbGVzICglIiBQUkl1NjQgIiBi
eXRlcykiLAorICAgICAgICAgICAgdGlsZU1hdHJpeC0+c3RhdHMudGlsZXMuYWxsb2NhdGVkLCB0
aWxlTWF0cml4LT5zdGF0cy50aWxlcy5mcmVlZCwKKyAgICAgICAgICAgIHRpbGVNYXRyaXgtPnN0
YXRzLmJ5dGVzLmFsbG9jYXRlZCwgdGlsZU1hdHJpeG0tPnN0YXRzLmJ5dGVzLmZyZWVkLAogICAg
ICAgICAgICAgdGlsZXNfbGVha2VkLCBieXRlc19sZWFrZWQpOwogICAgIGVsc2UKLSAgICAgICAg
SU5GKCJ0aWxlZCBtYXRyaXggaGFkIG5vIGxlYWtzOiB0aWxlc1srJSJQUkl1NjQiLC0lIlBSSXU2
NCJdICIKLSAgICAgICAgICAgImJ5dGVzWyslIlBSSXU2NCIsLSUiUFJJdTY0Il0iLAotICAgICAg
ICAgICAgdG0tPnN0YXRzLnRpbGVzLmFsbG9jYXRlZCwgdG0tPnN0YXRzLnRpbGVzLmZyZWVkLAot
ICAgICAgICAgICAgdG0tPnN0YXRzLmJ5dGVzLmFsbG9jYXRlZCwgdG0tPnN0YXRzLmJ5dGVzLmZy
ZWVkKTsKKyAgICAgICAgSU5GKCJ0aWxlZCBtYXRyaXggaGFkIG5vIGxlYWtzOiB0aWxlc1srJSIg
UFJJdTY0ICIsLSUiIFBSSXU2NCAiXSAiCisgICAgICAgICAgICAiYnl0ZXNbKyUiIFBSSXU2NCAi
LC0lIiBQUkl1NjQgIl0iLAorICAgICAgICAgICAgdGlsZU1hdHJpeC0+c3RhdHMudGlsZXMuYWxs
b2NhdGVkLCB0aWxlTWF0cml4LT5zdGF0cy50aWxlcy5mcmVlZCwKKyAgICAgICAgICAgIHRpbGVN
YXRyaXgtPnN0YXRzLmJ5dGVzLmFsbG9jYXRlZCwgdGlsZU1hdHJpeC0+c3RhdHMuYnl0ZXMuZnJl
ZWQpOwogI2VuZGlmCiAKLSAgICBmcmVlKHRtKTsKKyAgICBmcmVlKHRpbGVNYXRyaXgpOwogfQog
CiAvKioKICAqIFJlc2l6ZSBtYXRyaXggdG8gZ2l2ZW4gbnVtYmVyIG9mIHJvd3MgYW5kIGNvbHVt
bnMuCiAgKi8KLXZvaWQgZXdrX3RpbGVfbWF0cml4X3Jlc2l6ZShFd2tfVGlsZV9NYXRyaXggKnRt
LCB1bnNpZ25lZCBsb25nIGNvbHMsIHVuc2lnbmVkIGxvbmcgcm93cykKK3ZvaWQgZXdrX3RpbGVf
bWF0cml4X3Jlc2l6ZShFd2tfVGlsZV9NYXRyaXgqIHRpbGVNYXRyaXgsIHVuc2lnbmVkIGxvbmcg
Y29scywgdW5zaWduZWQgbG9uZyByb3dzKQogewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOKHRtKTsKLSAgICBlaW5hX21hdHJpeHNwYXJzZV9zaXplX3NldCh0bS0+bWF0cml4LCByb3dz
LCBjb2xzKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0aWxlTWF0cml4KTsKKyAg
ICBlaW5hX21hdHJpeHNwYXJzZV9zaXplX3NldCh0aWxlTWF0cml4LT5tYXRyaXgsIHJvd3MsIGNv
bHMpOwogfQogCiAvKioKQEAgLTI0MSwyMyArMjQxLDIzIEBAIHZvaWQgZXdrX3RpbGVfbWF0cml4
X3Jlc2l6ZShFd2tfVGlsZV9NYXRyaXggKnRtLCB1bnNpZ25lZCBsb25nIGNvbHMsIHVuc2lnbmVk
IGxvCiAgKgogICogTm8gcmVmZXJlbmNlIGlzIHRha2VuIHRvIHRoZSBjYWNoZS4KICAqLwotRXdr
X1RpbGVfVW51c2VkX0NhY2hlICpld2tfdGlsZV9tYXRyaXhfdW51c2VkX2NhY2hlX2dldChjb25z
dCBFd2tfVGlsZV9NYXRyaXggKnRtKQorRXdrX1RpbGVfVW51c2VkX0NhY2hlKiBld2tfdGlsZV9t
YXRyaXhfdW51c2VkX2NhY2hlX2dldChjb25zdCBFd2tfVGlsZV9NYXRyaXgqIHRpbGVNYXRyaXgp
CiB7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHRtLCAwKTsKLSAgICByZXR1
cm4gdG0tPnR1YzsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodGlsZU1hdHJp
eCwgMCk7CisgICAgcmV0dXJuIHRpbGVNYXRyaXgtPnR1YzsKIH0KIAogLyoqCiAgKiBHZXQgdGhl
IGV4YWN0IHRpbGUgZm9yIHRoZSBnaXZlbiBwb3NpdGlvbiBhbmQgem9vbS4KICAqCi0gKiBJZiB0
aGUgdGlsZSB3YXMgdW51c2VkIHRoZW4gaXQncyByZW1vdmVkIGZyb20gdGhlIGNhY2hlLgorICog
SWYgdGhlIHRpbGUud2lkdGhhcyB1bnVzZWQgdGhlbiBpdCdzIHJlbW92ZWQgZnJvbSB0aGUgY2Fj
aGUuCiAgKgogICogQWZ0ZXIgdXNhZ2UsIHBsZWFzZSBnaXZlIGl0IGJhY2sgdXNpbmcKICAqIGV3
a190aWxlX21hdHJpeF90aWxlX3B1dCgpLiBJZiB5b3UganVzdCB3YW50IHRvIGNoZWNrIGlmIGl0
IGV4aXN0cywKICAqIHRoZW4gdXNlIGV3a190aWxlX21hdHJpeF90aWxlX2V4YWN0X2V4aXN0cygp
LgogICoKLSAqIEBwYXJhbSB0bSB0aGUgdGlsZSBtYXRyaXggdG8gZ2V0IHRpbGUgZnJvbS4KLSAq
IEBwYXJhbSBjb2wgdGhlIGNvbHVtbiBudW1iZXIuCisgKiBAcGFyYW0gdGlsZU1hdHJpeCB0aGUg
dGlsZSBtYXRyaXggdG8gZ2V0IHRpbGUgZnJvbS4KKyAqIEBwYXJhbSBjb2x1bW4gdGhlIGNvbHVt
biBudW1iZXIuCiAgKiBAcGFyYW0gcm93IHRoZSByb3cgbnVtYmVyLgogICogQHBhcmFtIHpvb20g
dGhlIGV4YWN0IHpvb20gdG8gdXNlLgogICoKQEAgLTI2OCwyOSArMjY4LDI5IEBAIEV3a19UaWxl
X1VudXNlZF9DYWNoZSAqZXdrX3RpbGVfbWF0cml4X3VudXNlZF9jYWNoZV9nZXQoY29uc3QgRXdr
X1RpbGVfTWF0cml4ICp0CiAgKgogICogQHNlZSBld2tfdGlsZV9tYXRyaXhfdGlsZV9leGFjdF9n
ZXQoKQogICovCi1Fd2tfVGlsZSAqZXdrX3RpbGVfbWF0cml4X3RpbGVfZXhhY3RfZ2V0KEV3a19U
aWxlX01hdHJpeCAqdG0sIHVuc2lnbmVkIGxvbmcgY29sLCB1bnNpZ25lZCBsb25nIHJvdywgZmxv
YXQgem9vbSkKK0V3a19UaWxlKiBld2tfdGlsZV9tYXRyaXhfdGlsZV9leGFjdF9nZXQoRXdrX1Rp
bGVfTWF0cml4KiB0aWxlTWF0cml4LCB1bnNpZ25lZCBsb25nIGNvbHVtbiwgdW5zaWduZWQgbG9u
ZyByb3csIGZsb2F0IHpvb20pCiB7Ci0gICAgRXdrX1RpbGUqIHQgPSBzdGF0aWNfY2FzdDxFd2tf
VGlsZSo+KGVpbmFfbWF0cml4c3BhcnNlX2RhdGFfaWR4X2dldCh0bS0+bWF0cml4LCByb3csIGNv
bCkpOwotICAgIGlmICghdCkKKyAgICBFd2tfVGlsZSogdGlsZSA9IHN0YXRpY19jYXN0PEV3a19U
aWxlKj4oZWluYV9tYXRyaXhzcGFyc2VfZGF0YV9pZHhfZ2V0KHRpbGVNYXRyaXgtPm1hdHJpeCwg
cm93LCBjb2x1bW4pKTsKKyAgICBpZiAoIXRpbGUpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAg
aWYgKHQtPnpvb20gPT0gem9vbSkKKyAgICBpZiAodGlsZS0+em9vbSA9PSB6b29tKQogICAgICAg
ICBnb3RvIGVuZDsKIAotICBlbmQ6Ci0gICAgaWYgKCF0LT52aXNpYmxlKSB7Ci0gICAgICAgIGlm
ICghZXdrX3RpbGVfdW51c2VkX2NhY2hlX3RpbGVfZ2V0KHRtLT50dWMsIHQpKQorZW5kOgorICAg
IGlmICghdGlsZS0+dmlzaWJsZSkgeworICAgICAgICBpZiAoIWV3a190aWxlX3VudXNlZF9jYWNo
ZV90aWxlX2dldCh0aWxlTWF0cml4LT50dWMsIHRpbGUpKQogICAgICAgICAgICAgV1JOKCJFd2tf
VGlsZSB3YXMgdW51c2VkIGJ1dCBub3QgaW4gY2FjaGU/IGJ1ZyEiKTsKICAgICB9CiAKLSAgICBy
ZXR1cm4gdDsKKyAgICByZXR1cm4gdGlsZTsKIH0KIAogLyoqCiAgKiBDaGVja3MgaWYgdGlsZSBv
ZiBnaXZlbiB6b29tIGV4aXN0cyBpbiBtYXRyaXguCiAgKgotICogQHBhcmFtIHRtIHRoZSB0aWxl
IG1hdHJpeCB0byBjaGVjayB0aWxlIGV4aXN0ZW5jZS4KLSAqIEBwYXJhbSBjb2wgdGhlIGNvbHVt
biBudW1iZXIuCisgKiBAcGFyYW0gdGlsZU1hdHJpeCB0aGUgdGlsZSBtYXRyaXggdG8gY2hlY2sg
dGlsZSBleGlzdGVuY2UuCisgKiBAcGFyYW0gY29sdW1uIHRoZSBjb2x1bW4gbnVtYmVyLgogICog
QHBhcmFtIHJvdyB0aGUgcm93IG51bWJlci4KICAqIEBwYXJhbSB6b29tIHRoZSBleGFjdCB6b29t
IHRvIHF1ZXJ5LgogICoKQEAgLTI5OCw5ICsyOTgsOSBAQCBFd2tfVGlsZSAqZXdrX3RpbGVfbWF0
cml4X3RpbGVfZXhhY3RfZ2V0KEV3a19UaWxlX01hdHJpeCAqdG0sIHVuc2lnbmVkIGxvbmcgY29s
LAogICoKICAqIEBzZWUgZXdrX3RpbGVfbWF0cml4X3RpbGVfZXhhY3RfZ2V0KCkKICAqLwotRWlu
YV9Cb29sIGV3a190aWxlX21hdHJpeF90aWxlX2V4YWN0X2V4aXN0cyhFd2tfVGlsZV9NYXRyaXgg
KnRtLCB1bnNpZ25lZCBsb25nIGNvbCwgdW5zaWduZWQgbG9uZyByb3csIGZsb2F0IHpvb20pCitF
aW5hX0Jvb2wgZXdrX3RpbGVfbWF0cml4X3RpbGVfZXhhY3RfZXhpc3RzKEV3a19UaWxlX01hdHJp
eCogdGlsZU1hdHJpeCwgdW5zaWduZWQgbG9uZyBjb2x1bW4sIHVuc2lnbmVkIGxvbmcgcm93LCBm
bG9hdCB6b29tKQogewotICAgIGlmICghZWluYV9tYXRyaXhzcGFyc2VfZGF0YV9pZHhfZ2V0KHRt
LT5tYXRyaXgsIHJvdywgY29sKSkKKyAgICBpZiAoIWVpbmFfbWF0cml4c3BhcnNlX2RhdGFfaWR4
X2dldCh0aWxlTWF0cml4LT5tYXRyaXgsIHJvdywgY29sdW1uKSkKICAgICAgICAgcmV0dXJuIEVJ
TkFfRkFMU0U7CiAKICAgICByZXR1cm4gRUlOQV9UUlVFOwpAQCAtMzEzLDUwICszMTMsNTAgQEAg
RWluYV9Cb29sIGV3a190aWxlX21hdHJpeF90aWxlX2V4YWN0X2V4aXN0cyhFd2tfVGlsZV9NYXRy
aXggKnRtLCB1bnNpZ25lZCBsb25nIGMKICAqIG9mIHVudXNlZCB0aWxlcy4gQWZ0ZXIgaXQgaXMg
dXNlZCBvbmUgc2hvdWxkIGNhbGwKICAqIGV3a190aWxlX21hdHJpeF90aWxlX3B1dCgpIHRvIGdp
dmUgaXQgYmFjayB0byBtYXRyaXguCiAgKgotICogQHBhcmFtIHRtIHRoZSB0aWxlIG1hdHJpeCB0
byBjcmVhdGUgdGlsZSBvbi4KLSAqIEBwYXJhbSBjb2wgdGhlIGNvbHVtbiBudW1iZXIuCisgKiBA
cGFyYW0gdGlsZU1hdHJpeCB0aGUgdGlsZSBtYXRyaXggdG8gY3JlYXRlIHRpbGUgb24uCisgKiBA
cGFyYW0gY29sdW1uIHRoZSBjb2x1bW4gbnVtYmVyLgogICogQHBhcmFtIHJvdyB0aGUgcm93IG51
bWJlci4KICAqIEBwYXJhbSB6b29tIHRoZSBsZXZlbCB0byBjcmVhdGUgdGlsZSwgdXNlZCB0byBk
ZXRlcm1pbmUgdGlsZSBzaXplLgogICovCi1Fd2tfVGlsZSAqZXdrX3RpbGVfbWF0cml4X3RpbGVf
bmV3KEV3a19UaWxlX01hdHJpeCAqdG0sIEV2YXMgKmV2YXMsIHVuc2lnbmVkIGxvbmcgY29sLCB1
bnNpZ25lZCBsb25nIHJvdywgZmxvYXQgem9vbSkKK0V3a19UaWxlKiBld2tfdGlsZV9tYXRyaXhf
dGlsZV9uZXcoRXdrX1RpbGVfTWF0cml4KiB0aWxlTWF0cml4LCBFdmFzKiBjYW52YXMsIHVuc2ln
bmVkIGxvbmcgY29sdW1uLCB1bnNpZ25lZCBsb25nIHJvdywgZmxvYXQgem9vbSkKIHsKICAgICBF
dmFzX0Nvb3JkIHR3LCB0aDsKLSAgICBFd2tfVGlsZSAqdDsKKyAgICBFd2tfVGlsZSogdGlsZTsK
IAotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh0bSwgMCk7CisgICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHRpbGVNYXRyaXgsIDApOwogICAgIEVJTkFfU0FGRVRZ
X09OX0ZBTFNFX1JFVFVSTl9WQUwoem9vbSA+IDAuMCwgMCk7CiAKLSAgICB0dyA9IHRtLT50aWxl
Lnc7Ci0gICAgdGggPSB0bS0+dGlsZS5oOworICAgIHR3ID0gdGlsZU1hdHJpeC0+dGlsZS53aWR0
aDsKKyAgICB0aCA9IHRpbGVNYXRyaXgtPnRpbGUuaGVpZ2h0OwogCi0gICAgdCA9IGV3a190aWxl
X25ldyhldmFzLCB0dywgdGgsIHpvb20sIHRtLT5jc3BhY2UpOwotICAgIGlmICghdCkgewotICAg
ICAgICBFUlIoImNvdWxkIG5vdCBjcmVhdGUgdGlsZSAlZHglZCBhdCAlZiwgY3NwYWNlPSVkIiwg
dHcsIHRoLCAoZG91YmxlKXpvb20sIHRtLT5jc3BhY2UpOworICAgIHRpbGUgPSBld2tfdGlsZV9u
ZXcoY2FudmFzLCB0dywgdGgsIHpvb20sIHRpbGVNYXRyaXgtPmNzcGFjZSk7CisgICAgaWYgKCF0
aWxlKSB7CisgICAgICAgIEVSUigiY291bGQgbm90IGNyZWF0ZSB0aWxlICVkeCVkIGF0ICVmLCBj
c3BhY2U9JWQiLCB0dywgdGgsIChkb3VibGUpem9vbSwgdGlsZU1hdHJpeC0+Y3NwYWNlKTsKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgaWYgKCFlaW5hX21hdHJpeHNwYXJzZV9kYXRh
X2lkeF9zZXQodG0tPm1hdHJpeCwgcm93LCBjb2wsIHQpKSB7CisgICAgaWYgKCFlaW5hX21hdHJp
eHNwYXJzZV9kYXRhX2lkeF9zZXQodGlsZU1hdHJpeC0+bWF0cml4LCByb3csIGNvbHVtbiwgdGls
ZSkpIHsKICAgICAgICAgRVJSKCJjb3VsZCBub3Qgc2V0IG1hdHJpeCBjZWxsLCByb3cvY29sIG91
dHNpZGUgbWF0cml4IGRpbWVuc2lvbnMhIik7Ci0gICAgICAgIGV3a190aWxlX2ZyZWUodCk7Cisg
ICAgICAgIGV3a190aWxlX2ZyZWUodGlsZSk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAot
ICAgIHQtPmNvbCA9IGNvbDsKLSAgICB0LT5yb3cgPSByb3c7Ci0gICAgdC0+eCA9IGNvbCAqIHR3
OwotICAgIHQtPnkgPSByb3cgKiB0aDsKKyAgICB0aWxlLT5jb2wgPSBjb2x1bW47CisgICAgdGls
ZS0+cm93ID0gcm93OworICAgIHRpbGUtPnggPSBjb2x1bW4gKiB0dzsKKyAgICB0aWxlLT55ID0g
cm93ICogdGg7CiAKLSAgICBjYWlyb190cmFuc2xhdGUodC0+Y2Fpcm8sIC10LT54LCAtdC0+eSk7
CisgICAgY2Fpcm9fdHJhbnNsYXRlKHRpbGUtPmNhaXJvLCAtdGlsZS0+eCwgLXRpbGUtPnkpOwog
Ci0gICAgdC0+c3RhdHMuZnVsbF91cGRhdGUgPSBFSU5BX1RSVUU7Ci0gICAgdG0tPnVwZGF0ZXMg
PSBlaW5hX2xpc3RfYXBwZW5kKHRtLT51cGRhdGVzLCB0KTsKKyAgICB0aWxlLT5zdGF0cy5mdWxs
X3VwZGF0ZSA9IEVJTkFfVFJVRTsKKyAgICB0aWxlTWF0cml4LT51cGRhdGVzID0gZWluYV9saXN0
X2FwcGVuZCh0aWxlTWF0cml4LT51cGRhdGVzLCB0aWxlKTsKIAogI2lmZGVmIERFQlVHX01FTV9M
RUFLUwotICAgIHRtLT5zdGF0cy5ieXRlcy5hbGxvY2F0ZWQgKz0gdC0+Ynl0ZXM7Ci0gICAgdG0t
PnN0YXRzLnRpbGVzLmFsbG9jYXRlZCsrOworICAgIHRpbGVNYXRyaXgtPnN0YXRzLmJ5dGVzLmFs
bG9jYXRlZCArPSB0aWxlLT5ieXRlczsKKyAgICB0aWxlTWF0cml4LT5zdGF0cy50aWxlcy5hbGxv
Y2F0ZWQrKzsKICNlbmRpZgogCi0gICAgcmV0dXJuIHQ7CisgICAgcmV0dXJuIHRpbGU7CiB9CiAK
IC8qKgpAQCAtMzY2LDMyICszNjYsMzIgQEAgRXdrX1RpbGUgKmV3a190aWxlX21hdHJpeF90aWxl
X25ldyhFd2tfVGlsZV9NYXRyaXggKnRtLCBFdmFzICpldmFzLCB1bnNpZ25lZCBsb24KICAqIGl0
IHdpdGggZXdrX3RpbGVfbWF0cml4X3RpbGVfZXhhY3RfZ2V0KCkuCiAgKgogICogQW55IHByZXZp
b3VzIHJlZmVyZW5jZSB0byB0aWxlIHNob3VsZCBiZSByZWxlYXNlZAotICogKGV3a190aWxlX2hp
ZGUoKSkgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiwgc28gaXQgd2lsbAorICogKGV3a190
aWxlLmhlaWdodGlkZSgpKSBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLCBzbyBpdCB3aWxs
CiAgKiBiZSBrbm93biBpZiBpdCBpcyBub3QgdmlzaWJpbGUgYW55bW9yZSBhbmQgdGh1cyBjYW4g
YmUgcHV0IGludG8gdGhlCiAgKiB1bnVzZWQgY2FjaGUuCiAgKgotICogQHBhcmFtIHRtIHRoZSB0
aWxlIG1hdHJpeCB0byByZXR1cm4gdGlsZSB0by4KKyAqIEBwYXJhbSB0aWxlTWF0cml4IHRoZSB0
aWxlIG1hdHJpeCB0byByZXR1cm4gdGlsZSB0by4KICAqIEBwYXJhbSB0IHRoZSB0aWxlIGluc3Rh
bmNlIHRvIHJldHVybiwgbXVzdCBAYiBub3QgYmUgQGMgMC4KLSAqIEBwYXJhbSBsYXN0X3VzZWQg
dGltZSBpbiB3aGljaCB0aWxlIHdhcyBsYXN0IHVzZWQuCisgKiBAcGFyYW0gbGFzdF91c2VkIHRp
bWUgaW4gd2hpY2ggdGlsZS53aWR0aGFzIGxhc3QgdXNlZC4KICAqCiAgKiBAcmV0dXJuICNFSU5B
X1RSVUUgb24gc3VjY2VzcyBvciAjRUlOQV9GQUxTRSBvbiBmYWlsdXJlLgogICovCi1FaW5hX0Jv
b2wgZXdrX3RpbGVfbWF0cml4X3RpbGVfcHV0KEV3a19UaWxlX01hdHJpeCAqdG0sIEV3a19UaWxl
ICp0LCBkb3VibGUgbGFzdF91c2VkKQorRWluYV9Cb29sIGV3a190aWxlX21hdHJpeF90aWxlX3B1
dChFd2tfVGlsZV9NYXRyaXgqIHRpbGVNYXRyaXgsIEV3a19UaWxlKiB0aWxlLCBkb3VibGUgbGFz
dFVzZWQpCiB7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHRtLCBFSU5BX0ZB
TFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodCwgRUlOQV9GQUxTRSk7
CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHRpbGVNYXRyaXgsIEVJTkFfRkFM
U0UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh0aWxlLCBFSU5BX0ZBTFNF
KTsKIAotICAgIGlmICh0LT52aXNpYmxlKQorICAgIGlmICh0aWxlLT52aXNpYmxlKQogICAgICAg
ICByZXR1cm4gRUlOQV9UUlVFOwogCi0gICAgdC0+c3RhdHMubGFzdF91c2VkID0gbGFzdF91c2Vk
OwotICAgIHJldHVybiBld2tfdGlsZV91bnVzZWRfY2FjaGVfdGlsZV9wdXQodG0tPnR1YywgdCwg
X2V3a190aWxlX21hdHJpeF90aWxlX2ZyZWUsIHRtKTsKKyAgICB0aWxlLT5zdGF0cy5sYXN0X3Vz
ZWQgPSBsYXN0VXNlZDsKKyAgICByZXR1cm4gZXdrX3RpbGVfdW51c2VkX2NhY2hlX3RpbGVfcHV0
KHRpbGVNYXRyaXgtPnR1YywgdGlsZSwgX2V3a190aWxlX21hdHJpeF90aWxlX2ZyZWUsIHRpbGVN
YXRyaXgpOwogfQogCi1FaW5hX0Jvb2wgZXdrX3RpbGVfbWF0cml4X3RpbGVfdXBkYXRlKEV3a19U
aWxlX01hdHJpeCAqdG0sIHVuc2lnbmVkIGxvbmcgY29sLCB1bnNpZ25lZCBsb25nIHJvdywgY29u
c3QgRWluYV9SZWN0YW5nbGUgKnVwZGF0ZSkKK0VpbmFfQm9vbCBld2tfdGlsZV9tYXRyaXhfdGls
ZV91cGRhdGUoRXdrX1RpbGVfTWF0cml4KiB0aWxlTWF0cml4LCB1bnNpZ25lZCBsb25nIGNvbCwg
dW5zaWduZWQgbG9uZyByb3csIGNvbnN0IEVpbmFfUmVjdGFuZ2xlKiB1cGRhdGUpCiB7CiAgICAg
RWluYV9SZWN0YW5nbGUgbmV3X3VwZGF0ZTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
Tl9WQUwodG0sIEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZB
TCh0aWxlTWF0cml4LCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
Tl9WQUwodXBkYXRlLCBFSU5BX0ZBTFNFKTsKIAogICAgIG1lbWNweSgmbmV3X3VwZGF0ZSwgdXBk
YXRlLCBzaXplb2YobmV3X3VwZGF0ZSkpOwpAQCAtNDAxLDU5ICs0MDEsNTkgQEAgRWluYV9Cb29s
IGV3a190aWxlX21hdHJpeF90aWxlX3VwZGF0ZShFd2tfVGlsZV9NYXRyaXggKnRtLCB1bnNpZ25l
ZCBsb25nIGNvbCwgdW4KICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CiAgICAgfQogCi0gICAg
aWYgKHVwZGF0ZS0+eCArIHVwZGF0ZS0+dyAtIDEgPj0gdG0tPnRpbGUudykKLSAgICAgICAgbmV3
X3VwZGF0ZS53ID0gdG0tPnRpbGUudyAtIHVwZGF0ZS0+eDsKLSAgICBpZiAodXBkYXRlLT55ICsg
dXBkYXRlLT5oIC0gMSA+PSB0bS0+dGlsZS5oKQotICAgICAgICBuZXdfdXBkYXRlLmggPSB0bS0+
dGlsZS5oIC0gdXBkYXRlLT55OworICAgIGlmICh1cGRhdGUtPnggKyB1cGRhdGUtPncgLSAxID49
IHRpbGVNYXRyaXgtPnRpbGUud2lkdGgpCisgICAgICAgIG5ld191cGRhdGUudyA9IHRpbGVNYXRy
aXgtPnRpbGUud2lkdGggLSB1cGRhdGUtPng7CisgICAgaWYgKHVwZGF0ZS0+eSArIHVwZGF0ZS0+
aCAtIDEgPj0gdGlsZU1hdHJpeC0+dGlsZS5oZWlnaHQpCisgICAgICAgIG5ld191cGRhdGUuaCA9
IHRpbGVNYXRyaXgtPnRpbGUuaGVpZ2h0IC0gdXBkYXRlLT55OwogCi0gICAgRXdrX1RpbGUqIHQg
PSBzdGF0aWNfY2FzdDxFd2tfVGlsZSo+KGVpbmFfbWF0cml4c3BhcnNlX2RhdGFfaWR4X2dldCh0
bS0+bWF0cml4LCByb3csIGNvbCkpOwotICAgIGlmICghdCkKKyAgICBFd2tfVGlsZSogdGlsZSA9
IHN0YXRpY19jYXN0PEV3a19UaWxlKj4oZWluYV9tYXRyaXhzcGFyc2VfZGF0YV9pZHhfZ2V0KHRp
bGVNYXRyaXgtPm1hdHJpeCwgcm93LCBjb2wpKTsKKyAgICBpZiAoIXRpbGUpCiAgICAgICAgIHJl
dHVybiBFSU5BX1RSVUU7CiAKLSAgICBpZiAoIXQtPnVwZGF0ZXMgJiYgIXQtPnN0YXRzLmZ1bGxf
dXBkYXRlKQotICAgICAgICB0bS0+dXBkYXRlcyA9IGVpbmFfbGlzdF9hcHBlbmQodG0tPnVwZGF0
ZXMsIHQpOwotICAgIGV3a190aWxlX3VwZGF0ZV9hcmVhKHQsICZuZXdfdXBkYXRlKTsKKyAgICBp
ZiAoIXRpbGUtPnVwZGF0ZXMgJiYgIXRpbGUtPnN0YXRzLmZ1bGxfdXBkYXRlKQorICAgICAgICB0
aWxlTWF0cml4LT51cGRhdGVzID0gZWluYV9saXN0X2FwcGVuZCh0aWxlTWF0cml4LT51cGRhdGVz
LCB0aWxlKTsKKyAgICBld2tfdGlsZV91cGRhdGVfYXJlYSh0aWxlLCAmbmV3X3VwZGF0ZSk7CiAK
ICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi1FaW5hX0Jvb2wgZXdrX3RpbGVfbWF0cml4X3Rp
bGVfdXBkYXRlX2Z1bGwoRXdrX1RpbGVfTWF0cml4ICp0bSwgdW5zaWduZWQgbG9uZyBjb2wsIHVu
c2lnbmVkIGxvbmcgcm93KQorRWluYV9Cb29sIGV3a190aWxlX21hdHJpeF90aWxlX3VwZGF0ZV9m
dWxsKEV3a19UaWxlX01hdHJpeCogdGlsZU1hdHJpeCwgdW5zaWduZWQgbG9uZyBjb2x1bW4sIHVu
c2lnbmVkIGxvbmcgcm93KQogewotICAgIEVpbmFfTWF0cml4c3BhcnNlX0NlbGwgKmNlbGw7Ci0g
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHRtLCBFSU5BX0ZBTFNFKTsKKyAgICBF
aW5hX01hdHJpeHNwYXJzZV9DZWxsKiBjZWxsOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOX1ZBTCh0aWxlTWF0cml4LCBFSU5BX0ZBTFNFKTsKIAotICAgIGlmICghZWluYV9tYXRyaXhz
cGFyc2VfY2VsbF9pZHhfZ2V0KHRtLT5tYXRyaXgsIHJvdywgY29sLCAmY2VsbCkpCisgICAgaWYg
KCFlaW5hX21hdHJpeHNwYXJzZV9jZWxsX2lkeF9nZXQodGlsZU1hdHJpeC0+bWF0cml4LCByb3cs
IGNvbHVtbiwgJmNlbGwpKQogICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKIAogICAgIGlmICgh
Y2VsbCkKICAgICAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIAotICAgIEV3a19UaWxlKiB0ID0gc3Rh
dGljX2Nhc3Q8RXdrX1RpbGUqPihlaW5hX21hdHJpeHNwYXJzZV9jZWxsX2RhdGFfZ2V0KGNlbGwp
KTsKLSAgICBpZiAoIXQpIHsKKyAgICBFd2tfVGlsZSogdGlsZSA9IHN0YXRpY19jYXN0PEV3a19U
aWxlKj4oZWluYV9tYXRyaXhzcGFyc2VfY2VsbF9kYXRhX2dldChjZWxsKSk7CisgICAgaWYgKCF0
aWxlKSB7CiAgICAgICAgIENSSVRJQ0FMKCJtYXRyaXggY2VsbCB3aXRoIG5vIHRpbGUhIik7CiAg
ICAgICAgIHJldHVybiBFSU5BX1RSVUU7CiAgICAgfQogCi0gICAgaWYgKCF0LT51cGRhdGVzICYm
ICF0LT5zdGF0cy5mdWxsX3VwZGF0ZSkKLSAgICAgICAgdG0tPnVwZGF0ZXMgPSBlaW5hX2xpc3Rf
YXBwZW5kKHRtLT51cGRhdGVzLCB0KTsKLSAgICBld2tfdGlsZV91cGRhdGVfZnVsbCh0KTsKKyAg
ICBpZiAoIXRpbGUtPnVwZGF0ZXMgJiYgIXRpbGUtPnN0YXRzLmZ1bGxfdXBkYXRlKQorICAgICAg
ICB0aWxlTWF0cml4LT51cGRhdGVzID0gZWluYV9saXN0X2FwcGVuZCh0aWxlTWF0cml4LT51cGRh
dGVzLCB0aWxlKTsKKyAgICBld2tfdGlsZV91cGRhdGVfZnVsbCh0aWxlKTsKIAogICAgIHJldHVy
biBFSU5BX1RSVUU7CiB9CiAKLXZvaWQgZXdrX3RpbGVfbWF0cml4X3RpbGVfdXBkYXRlc19jbGVh
cihFd2tfVGlsZV9NYXRyaXggKnRtLCBFd2tfVGlsZSAqdCkKK3ZvaWQgZXdrX3RpbGVfbWF0cml4
X3RpbGVfdXBkYXRlc19jbGVhcihFd2tfVGlsZV9NYXRyaXgqIHRpbGVNYXRyaXgsIEV3a19UaWxl
KiB0aWxlKQogewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHRtKTsKLSAgICBpZiAo
IXQtPnVwZGF0ZXMgJiYgIXQtPnN0YXRzLmZ1bGxfdXBkYXRlKQorICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOKHRpbGVNYXRyaXgpOworICAgIGlmICghdGlsZS0+dXBkYXRlcyAmJiAhdGls
ZS0+c3RhdHMuZnVsbF91cGRhdGUpCiAgICAgICAgIHJldHVybjsKLSAgICBld2tfdGlsZV91cGRh
dGVzX2NsZWFyKHQpOwotICAgIHRtLT51cGRhdGVzID0gZWluYV9saXN0X3JlbW92ZSh0bS0+dXBk
YXRlcywgdCk7CisgICAgZXdrX3RpbGVfdXBkYXRlc19jbGVhcih0aWxlKTsKKyAgICB0aWxlTWF0
cml4LT51cGRhdGVzID0gZWluYV9saXN0X3JlbW92ZSh0aWxlTWF0cml4LT51cGRhdGVzLCB0aWxl
KTsKIH0KIAotc3RhdGljIEVpbmFfQm9vbCBfZXdrX3RpbGVfbWF0cml4X3NsaWNlcl9zZXR1cChF
d2tfVGlsZV9NYXRyaXggKnRtLCBjb25zdCBFaW5hX1JlY3RhbmdsZSAqYXJlYSwgZmxvYXQgem9v
bSwgRWluYV9UaWxlX0dyaWRfU2xpY2VyICpzbGljZXIpCitzdGF0aWMgRWluYV9Cb29sIF9ld2tf
dGlsZV9tYXRyaXhfc2xpY2VyX3NldHVwKEV3a19UaWxlX01hdHJpeCogdGlsZU1hdHJpeCwgY29u
c3QgRWluYV9SZWN0YW5nbGUqIGFyZWEsIGZsb2F0IHpvb20sIEVpbmFfVGlsZV9HcmlkX1NsaWNl
ciogc2xpY2VyKQogewogICAgIHVuc2lnbmVkIGxvbmcgcm93cywgY29sczsKLSAgICBFdmFzX0Nv
b3JkIHgsIHksIHcsIGgsIHR3LCB0aDsKKyAgICBFdmFzX0Nvb3JkIHgsIHksIHdpZHRoLCBoZWln
aHQsIHR3LCB0aDsKIAogICAgIGlmIChhcmVhLT53IDw9IDAgfHwgYXJlYS0+aCA8PSAwKSB7CiAg
ICAgICAgIFdSTigiaW52YWxpZCBhcmVhIHJlZ2lvbjogJWQsJWQrJWR4JWQuIiwKQEAgLTQ2Mywz
NyArNDYzLDM3IEBAIHN0YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxlX21hdHJpeF9zbGljZXJfc2V0
dXAoRXdrX1RpbGVfTWF0cml4ICp0bSwgY29uc3QgRWluYV9SCiAKICAgICB4ID0gYXJlYS0+eDsK
ICAgICB5ID0gYXJlYS0+eTsKLSAgICB3ID0gYXJlYS0+dzsKLSAgICBoID0gYXJlYS0+aDsKKyAg
ICB3aWR0aCA9IGFyZWEtPnc7CisgICAgaGVpZ2h0ID0gYXJlYS0+aDsKIAotICAgIHR3ID0gdG0t
PnRpbGUudzsKLSAgICB0aCA9IHRtLT50aWxlLmg7CisgICAgdHcgPSB0aWxlTWF0cml4LT50aWxl
LndpZHRoOworICAgIHRoID0gdGlsZU1hdHJpeC0+dGlsZS5oZWlnaHQ7CiAKICAgICAvLyBjcm9w
cGluZyBhcmVhIHJlZ2lvbiB0byBmaXQgbWF0cml4Ci0gICAgZWluYV9tYXRyaXhzcGFyc2Vfc2l6
ZV9nZXQodG0tPm1hdHJpeCwgJnJvd3MsICZjb2xzKTsKKyAgICBlaW5hX21hdHJpeHNwYXJzZV9z
aXplX2dldCh0aWxlTWF0cml4LT5tYXRyaXgsICZyb3dzLCAmY29scyk7CiAgICAgaWYgKHggPCAw
KSB7Ci0gICAgICAgIHcgKz0geDsKKyAgICAgICAgd2lkdGggKz0geDsKICAgICAgICAgeCA9IDA7
CiAgICAgfQogICAgIGlmICh5IDwgMCkgewotICAgICAgICBoICs9IHk7CisgICAgICAgIGhlaWdo
dCArPSB5OwogICAgICAgICB5ID0gMDsKICAgICB9CiAKLSAgICBpZiAoeSArIGggLSAxID4gKGxv
bmcpKHJvd3MgKiB0aCkpCi0gICAgICAgIGggPSByb3dzICogdGggLSB5OwotICAgIGlmICh4ICsg
dyAtIDEgPiAobG9uZykoY29scyAqIHR3KSkKLSAgICAgICAgdyA9IGNvbHMgKiB0dyAtIHg7Cisg
ICAgaWYgKHkgKyBoZWlnaHQgLSAxID4gKGxvbmcpKHJvd3MgKiB0aCkpCisgICAgICAgIGhlaWdo
dCA9IHJvd3MgKiB0aCAtIHk7CisgICAgaWYgKHggKyB3aWR0aCAtIDEgPiAobG9uZykoY29scyAq
IHR3KSkKKyAgICAgICAgd2lkdGggPSBjb2xzICogdHcgLSB4OwogCi0gICAgcmV0dXJuIGVpbmFf
dGlsZV9ncmlkX3NsaWNlcl9zZXR1cChzbGljZXIsIHgsIHksIHcsIGgsIHR3LCB0aCk7CisgICAg
cmV0dXJuIGVpbmFfdGlsZV9ncmlkX3NsaWNlcl9zZXR1cChzbGljZXIsIHgsIHksIHdpZHRoLCBo
ZWlnaHQsIHR3LCB0aCk7CiB9CiAKIAotRWluYV9Cb29sIGV3a190aWxlX21hdHJpeF91cGRhdGUo
RXdrX1RpbGVfTWF0cml4ICp0bSwgY29uc3QgRWluYV9SZWN0YW5nbGUgKnVwZGF0ZSwgZmxvYXQg
em9vbSkKK0VpbmFfQm9vbCBld2tfdGlsZV9tYXRyaXhfdXBkYXRlKEV3a19UaWxlX01hdHJpeCog
dGlsZU1hdHJpeCwgY29uc3QgRWluYV9SZWN0YW5nbGUqIHVwZGF0ZSwgZmxvYXQgem9vbSkKIHsK
LSAgICBjb25zdCBFaW5hX1RpbGVfR3JpZF9JbmZvICppbmZvOworICAgIGNvbnN0IEVpbmFfVGls
ZV9HcmlkX0luZm8qIGluZm87CiAgICAgRWluYV9UaWxlX0dyaWRfU2xpY2VyIHNsaWNlcjsKLSAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodG0sIEVJTkFfRkFMU0UpOworICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh0aWxlTWF0cml4LCBFSU5BX0ZBTFNFKTsKICAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodXBkYXRlLCBFSU5BX0ZBTFNFKTsKIAog
ICAgIGlmICh1cGRhdGUtPncgPCAxIHx8IHVwZGF0ZS0+aCA8IDEpIHsKQEAgLTUwMiw3ICs1MDIs
NyBAQCBFaW5hX0Jvb2wgZXdrX3RpbGVfbWF0cml4X3VwZGF0ZShFd2tfVGlsZV9NYXRyaXggKnRt
LCBjb25zdCBFaW5hX1JlY3RhbmdsZSAqdXBkYQogICAgICAgICByZXR1cm4gRUlOQV9UUlVFOwog
ICAgIH0KIAotICAgIGlmICghX2V3a190aWxlX21hdHJpeF9zbGljZXJfc2V0dXAodG0sIHVwZGF0
ZSwgem9vbSwgJnNsaWNlcikpIHsKKyAgICBpZiAoIV9ld2tfdGlsZV9tYXRyaXhfc2xpY2VyX3Nl
dHVwKHRpbGVNYXRyaXgsIHVwZGF0ZSwgem9vbSwgJnNsaWNlcikpIHsKICAgICAgICAgRVJSKCJD
b3VsZCBub3Qgc2V0dXAgc2xpY2VyIGZvciB1cGRhdGUgJWQsJWQrJWR4JWQgYXQgem9vbSAlZiIs
CiAgICAgICAgICAgICB1cGRhdGUtPngsIHVwZGF0ZS0+eSwgdXBkYXRlLT53LCB1cGRhdGUtPmgs
IHpvb20pOwogICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKQEAgLTUxMyw1OSArNTEzLDU5IEBA
IEVpbmFfQm9vbCBld2tfdGlsZV9tYXRyaXhfdXBkYXRlKEV3a19UaWxlX01hdHJpeCAqdG0sIGNv
bnN0IEVpbmFfUmVjdGFuZ2xlICp1cGRhCiAgICAgICAgIGNvbCA9IGluZm8tPmNvbDsKICAgICAg
ICAgcm93ID0gaW5mby0+cm93OwogCi0gICAgICAgIEV3a19UaWxlKiB0ID0gc3RhdGljX2Nhc3Q8
RXdrX1RpbGUqPihlaW5hX21hdHJpeHNwYXJzZV9kYXRhX2lkeF9nZXQodG0tPm1hdHJpeCwgcm93
LCBjb2wpKTsKLSAgICAgICAgaWYgKCF0KQorICAgICAgICBFd2tfVGlsZSogdGlsZSA9IHN0YXRp
Y19jYXN0PEV3a19UaWxlKj4oZWluYV9tYXRyaXhzcGFyc2VfZGF0YV9pZHhfZ2V0KHRpbGVNYXRy
aXgtPm1hdHJpeCwgcm93LCBjb2wpKTsKKyAgICAgICAgaWYgKCF0aWxlKQogICAgICAgICAgICAg
Y29udGludWU7CiAKLSAgICAgICAgaWYgKCF0LT51cGRhdGVzICYmICF0LT5zdGF0cy5mdWxsX3Vw
ZGF0ZSkKLSAgICAgICAgICAgIHRtLT51cGRhdGVzID0gZWluYV9saXN0X2FwcGVuZCh0bS0+dXBk
YXRlcywgdCk7CisgICAgICAgIGlmICghdGlsZS0+dXBkYXRlcyAmJiAhdGlsZS0+c3RhdHMuZnVs
bF91cGRhdGUpCisgICAgICAgICAgICB0aWxlTWF0cml4LT51cGRhdGVzID0gZWluYV9saXN0X2Fw
cGVuZCh0aWxlTWF0cml4LT51cGRhdGVzLCB0aWxlKTsKICAgICAgICAgaWYgKGluZm8tPmZ1bGwp
Ci0gICAgICAgICAgICBld2tfdGlsZV91cGRhdGVfZnVsbCh0KTsKKyAgICAgICAgICAgIGV3a190
aWxlX3VwZGF0ZV9mdWxsKHRpbGUpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBld2tfdGls
ZV91cGRhdGVfYXJlYSh0LCAmaW5mby0+cmVjdCk7CisgICAgICAgICAgICBld2tfdGlsZV91cGRh
dGVfYXJlYSh0aWxlLCAmaW5mby0+cmVjdCk7CiAgICAgfQogCiAKICAgICByZXR1cm4gRUlOQV9U
UlVFOwogfQogCi12b2lkIGV3a190aWxlX21hdHJpeF91cGRhdGVzX3Byb2Nlc3MoRXdrX1RpbGVf
TWF0cml4ICp0bSkKK3ZvaWQgZXdrX3RpbGVfbWF0cml4X3VwZGF0ZXNfcHJvY2VzcyhFd2tfVGls
ZV9NYXRyaXgqIHRpbGVNYXRyaXgpCiB7Ci0gICAgRWluYV9MaXN0ICpsLCAqbF9uZXh0OworICAg
IEVpbmFfTGlzdCogbCwgKiBsX25leHQ7CiAgICAgdm9pZCogaXRlbTsKLSAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTih0bSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4odGls
ZU1hdHJpeCk7CiAKICAgICAvLyBwcm9jZXNzIHVwZGF0ZXMsIHVuZmxhZyB0aWxlcwotICAgIEVJ
TkFfTElTVF9GT1JFQUNIX1NBRkUodG0tPnVwZGF0ZXMsIGwsIGxfbmV4dCwgaXRlbSkgeworICAg
IEVJTkFfTElTVF9GT1JFQUNIX1NBRkUodGlsZU1hdHJpeC0+dXBkYXRlcywgbCwgbF9uZXh0LCBp
dGVtKSB7CiAgICAgICAgIEV3a19UaWxlKiB0aWxlID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGUqPihp
dGVtKTsKLSAgICAgICAgZXdrX3RpbGVfdXBkYXRlc19wcm9jZXNzKHRpbGUsIHRtLT5yZW5kZXIu
Y2IsIHRtLT5yZW5kZXIuZGF0YSk7CisgICAgICAgIGV3a190aWxlX3VwZGF0ZXNfcHJvY2Vzcyh0
aWxlLCB0aWxlTWF0cml4LT5yZW5kZXIuY2IsIHRpbGVNYXRyaXgtPnJlbmRlci5kYXRhKTsKICAg
ICAgICAgaWYgKHRpbGUtPnZpc2libGUpIHsKICAgICAgICAgICAgIGV3a190aWxlX3VwZGF0ZXNf
Y2xlYXIodGlsZSk7Ci0gICAgICAgICAgICB0bS0+dXBkYXRlcyA9IGVpbmFfbGlzdF9yZW1vdmVf
bGlzdCh0bS0+dXBkYXRlcywgbCk7CisgICAgICAgICAgICB0aWxlTWF0cml4LT51cGRhdGVzID0g
ZWluYV9saXN0X3JlbW92ZV9saXN0KHRpbGVNYXRyaXgtPnVwZGF0ZXMsIGwpOwogICAgICAgICB9
CiAgICAgfQogfQogCi12b2lkIGV3a190aWxlX21hdHJpeF91cGRhdGVzX2NsZWFyKEV3a19UaWxl
X01hdHJpeCAqdG0pCit2b2lkIGV3a190aWxlX21hdHJpeF91cGRhdGVzX2NsZWFyKEV3a19UaWxl
X01hdHJpeCogdGlsZU1hdHJpeCkKIHsKICAgICB2b2lkKiBpdGVtOwotICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOKHRtKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0aWxl
TWF0cml4KTsKIAotICAgIEVJTkFfTElTVF9GUkVFKHRtLT51cGRhdGVzLCBpdGVtKQorICAgIEVJ
TkFfTElTVF9GUkVFKHRpbGVNYXRyaXgtPnVwZGF0ZXMsIGl0ZW0pCiAgICAgICAgIGV3a190aWxl
X3VwZGF0ZXNfY2xlYXIoc3RhdGljX2Nhc3Q8RXdrX1RpbGUqPihpdGVtKSk7Ci0gICAgdG0tPnVw
ZGF0ZXMgPSAwOworICAgIHRpbGVNYXRyaXgtPnVwZGF0ZXMgPSAwOwogfQogCiAvLyByZW1vdmUg
bWUgbGF0ZXIhCi12b2lkIGV3a190aWxlX21hdHJpeF9kYmcoY29uc3QgRXdrX1RpbGVfTWF0cml4
ICp0bSkKK3ZvaWQgZXdrX3RpbGVfbWF0cml4X2RiZyhjb25zdCBFd2tfVGlsZV9NYXRyaXgqIHRp
bGVNYXRyaXgpCiB7Ci0gICAgRWluYV9JdGVyYXRvciAqaXQgPSBlaW5hX21hdHJpeHNwYXJzZV9p
dGVyYXRvcl9jb21wbGV0ZV9uZXcodG0tPm1hdHJpeCk7Ci0gICAgRWluYV9NYXRyaXhzcGFyc2Vf
Q2VsbCAqY2VsbDsKKyAgICBFaW5hX0l0ZXJhdG9yKiBpdCA9IGVpbmFfbWF0cml4c3BhcnNlX2l0
ZXJhdG9yX2NvbXBsZXRlX25ldyh0aWxlTWF0cml4LT5tYXRyaXgpOworICAgIEVpbmFfTWF0cml4
c3BhcnNlX0NlbGwqIGNlbGw7CiAgICAgRWluYV9Cb29sIGxhc3RfZW1wdHkgPSBFSU5BX0ZBTFNF
OwogCiAjaWZkZWYgREVCVUdfTUVNX0xFQUtTCi0gICAgcHJpbnRmKCJFd2tfVGlsZSBNYXRyaXg6
IHRpbGVzWyslIlBSSXU2NCIsLSUiUFJJdTY0IjolIlBSSXU2NCJdICIKLSAgICAgICAgICAgImJ5
dGVzWyslIlBSSXU2NCIsLSUiUFJJdTY0IjolIlBSSXU2NCJdXG4iLAorICAgIHByaW50ZigiRXdr
X1RpbGUgTWF0cml4OiB0aWxlc1srJSIgUFJJdTY0ICIsLSUiIFBSSXU2NCAiOiUiIFBSSXU2NCAi
XSAiCisgICAgICAgICAgICJieXRlc1srJSIgUFJJdTY0ICIsLSUiIFBSSXU2NCAiOiUiIFBSSXU2
NCAiXVxuIiwKICAgICAgICAgICAgdG0tPnN0YXRzLnRpbGVzLmFsbG9jYXRlZCwgdG0tPnN0YXRz
LnRpbGVzLmZyZWVkLAogICAgICAgICAgICB0bS0+c3RhdHMudGlsZXMuYWxsb2NhdGVkIC0gdG0t
PnN0YXRzLnRpbGVzLmZyZWVkLAogICAgICAgICAgICB0bS0+c3RhdHMuYnl0ZXMuYWxsb2NhdGVk
LCB0bS0+c3RhdHMuYnl0ZXMuZnJlZWQsCkBAIC01NzgsOCArNTc4LDggQEAgdm9pZCBld2tfdGls
ZV9tYXRyaXhfZGJnKGNvbnN0IEV3a19UaWxlX01hdHJpeCAqdG0pCiAgICAgICAgIHVuc2lnbmVk
IGxvbmcgcm93LCBjb2w7CiAgICAgICAgIGVpbmFfbWF0cml4c3BhcnNlX2NlbGxfcG9zaXRpb25f
Z2V0KGNlbGwsICZyb3csICZjb2wpOwogCi0gICAgICAgIEV3a19UaWxlKiB0ID0gc3RhdGljX2Nh
c3Q8RXdrX1RpbGUqPihlaW5hX21hdHJpeHNwYXJzZV9jZWxsX2RhdGFfZ2V0KGNlbGwpKTsKLSAg
ICAgICAgaWYgKCF0KSB7CisgICAgICAgIEV3a19UaWxlKiB0aWxlID0gc3RhdGljX2Nhc3Q8RXdr
X1RpbGUqPihlaW5hX21hdHJpeHNwYXJzZV9jZWxsX2RhdGFfZ2V0KGNlbGwpKTsKKyAgICAgICAg
aWYgKCF0aWxlKSB7CiAgICAgICAgICAgICBpZiAoIWxhc3RfZW1wdHkpIHsKICAgICAgICAgICAg
ICAgICBsYXN0X2VtcHR5ID0gRUlOQV9UUlVFOwogICAgICAgICAgICAgICAgIHByaW50ZigiRW1w
dHk6Iik7CkBAIC01OTAsOCArNTkwLDggQEAgdm9pZCBld2tfdGlsZV9tYXRyaXhfZGJnKGNvbnN0
IEV3a19UaWxlX01hdHJpeCAqdG0pCiAgICAgICAgICAgICAgICAgbGFzdF9lbXB0eSA9IEVJTkFf
RkFMU0U7CiAgICAgICAgICAgICAgICAgcHJpbnRmKCJcbiIpOwogICAgICAgICAgICAgfQotICAg
ICAgICAgICAgcHJpbnRmKCIlM2x1LCUzbHUgJTEwcDoiLCBjb2wsIHJvdywgdCk7Ci0gICAgICAg
ICAgICBwcmludGYoIiBbJTNsdSwlM2x1ICsgJWR4JWQgQCAlMC4zZl0lYyIsIHQtPmNvbCwgdC0+
cm93LCB0LT53LCB0LT5oLCB0LT56b29tLCB0LT52aXNpYmxlID8gJyonOiAnICcpOworICAgICAg
ICAgICAgcHJpbnRmKCIlM2x1LCUzbHUgJTEwcDoiLCBjb2wsIHJvdywgdGlsZSk7CisgICAgICAg
ICAgICBwcmludGYoIiBbJTNsdSwlM2x1ICsgJWR4JWQgQCAlMC4zZl0lYyIsIHRpbGUtPmNvbCwg
dGlsZS0+cm93LCB0aWxlLT53aWR0aCwgdGlsZS0+aGVpZ2h0LCB0aWxlLT56b29tLCB0aWxlLT52
aXNpYmxlID8gJyonIDogJyAnKTsKICAgICAgICAgICAgIHByaW50ZigiXG4iKTsKICAgICAgICAg
fQogICAgIH0KQEAgLTU5OSw3ICs1OTksNyBAQCB2b2lkIGV3a190aWxlX21hdHJpeF9kYmcoY29u
c3QgRXdrX1RpbGVfTWF0cml4ICp0bSkKICAgICAgICAgcHJpbnRmKCJcbiIpOwogICAgIGVpbmFf
aXRlcmF0b3JfZnJlZShpdCk7CiAKLSAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfZGJnKHRtLT50
dWMpOworICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9kYmcodGlsZU1hdHJpeC0+dHVjKTsKIH0K
IAogLyoqCkBAIC02MTEsMTIgKzYxMSwxMiBAQCB2b2lkIGV3a190aWxlX21hdHJpeF9kYmcoY29u
c3QgRXdrX1RpbGVfTWF0cml4ICp0bSkKICAqCiAgKiBAc2VlIGV3a190aWxlX21hdHJpeF90aGF3
KCkKICAqLwotdm9pZCBld2tfdGlsZV9tYXRyaXhfZnJlZXplKEV3a19UaWxlX01hdHJpeCAqdG0p
Cit2b2lkIGV3a190aWxlX21hdHJpeF9mcmVlemUoRXdrX1RpbGVfTWF0cml4KiB0aWxlTWF0cml4
KQogewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHRtKTsKLSAgICBpZiAoIXRtLT5m
cm96ZW4pCi0gICAgICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9mcmVlemUodG0tPnR1Yyk7Ci0g
ICAgdG0tPmZyb3plbisrOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHRpbGVNYXRy
aXgpOworICAgIGlmICghdGlsZU1hdHJpeC0+ZnJvemVuKQorICAgICAgICBld2tfdGlsZV91bnVz
ZWRfY2FjaGVfZnJlZXplKHRpbGVNYXRyaXgtPnR1Yyk7CisgICAgdGlsZU1hdHJpeC0+ZnJvemVu
Kys7CiB9CiAKIC8qKgpAQCAtNjI1LDE1ICs2MjUsMTUgQEAgdm9pZCBld2tfdGlsZV9tYXRyaXhf
ZnJlZXplKEV3a19UaWxlX01hdHJpeCAqdG0pCiAgKiBJZiB0aGlzIGlzIHRoZSBsYXN0IGNvdW50
ZXJwYXJ0IG9mIGZyZWV6ZSwgdGhlbiBtYWludGVuYW5jZSB0YXNrcwogICogd2lsbCBydW4gaW1t
ZWRpYXRlbHkuCiAgKi8KLXZvaWQgZXdrX3RpbGVfbWF0cml4X3RoYXcoRXdrX1RpbGVfTWF0cml4
ICp0bSkKK3ZvaWQgZXdrX3RpbGVfbWF0cml4X3RoYXcoRXdrX1RpbGVfTWF0cml4KiB0aWxlTWF0
cml4KQogewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHRtKTsKLSAgICBpZiAoIXRt
LT5mcm96ZW4pIHsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0aWxlTWF0cml4KTsK
KyAgICBpZiAoIXRpbGVNYXRyaXgtPmZyb3plbikgewogICAgICAgICBFUlIoInRoYXdpbmcgbW9y
ZSB0aGFuIGZyZWV6aW5nISIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgdG0tPmZy
b3plbi0tOwotICAgIGlmICghdG0tPmZyb3plbikKLSAgICAgICAgZXdrX3RpbGVfdW51c2VkX2Nh
Y2hlX3RoYXcodG0tPnR1Yyk7CisgICAgdGlsZU1hdHJpeC0+ZnJvemVuLS07CisgICAgaWYgKCF0
aWxlTWF0cml4LT5mcm96ZW4pCisgICAgICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV90aGF3KHRp
bGVNYXRyaXgtPnR1Yyk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdr
X3RpbGVkX21hdHJpeC5oIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a190aWxlZF9tYXRyaXgu
aAppbmRleCBjNDM3YzM3YmM5Mjk2Nzg4YWE1ZjM4MTczMjVkMmE0ZjFhODg1YWE0Li5kM2RjNTE3
MTI1NjIzMDQ3NjgwYmY3NmQ5NjJkNGMwNGZmYzIyYThiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2VmbC9ld2svZXdrX3RpbGVkX21hdHJpeC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3
ay9ld2tfdGlsZWRfbWF0cml4LmgKQEAgLTUyLDcgKzUyLDcgQEAgdm9pZCBld2tfdGlsZV9tYXRy
aXhfdGhhdyhFd2tfVGlsZV9NYXRyaXgqIHRtKTsKIC8vIHJlbW92ZSBtZSEKIHZvaWQgZXdrX3Rp
bGVfbWF0cml4X2RiZyhjb25zdCBFd2tfVGlsZV9NYXRyaXgqIHRtKTsKIHZvaWQgZXdrX3RpbGVf
dW51c2VkX2NhY2hlX2RiZyhjb25zdCBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHR1Yyk7Ci12b2lk
IGV3a190aWxlX2FjY291bnRpbmdfZGJnKHZvaWQpOwordm9pZCBld2tfdGlsZV9hY2NvdW50aW5n
X2RiZygpOwogCiAKICNlbmRpZiAvLyBld2tfdGlsZWRfbWF0cml4X2gKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfbW9kZWwuY3BwIGIvU291cmNlL1dlYktpdC9l
ZmwvZXdrL2V3a190aWxlZF9tb2RlbC5jcHAKaW5kZXggNjE2ODU3Mjk0MDg5OWJkYmU4NzFkNjMw
MWZmZGNiMTRhYzQ1M2JiZC4uMjA5YjBjMzlmMTY3OGVhYjEzODI5YjY1OGE1YzM3YjlhMDQwYWUz
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a190aWxlZF9tb2RlbC5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a190aWxlZF9tb2RlbC5jcHAKQEAgLTM2LDcg
KzM2LDcgQEAKICNpbmNsdWRlIDxzeXMvdGltZS5oPgogI2VuZGlmCiAKLSNkZWZpbmUgSURYKGNv
bCwgcm93LCByb3dzcGFuKSAoY29sICsgKHJvdyAqIHJvd3NwYW4pKQorI2RlZmluZSBJRFgoY29s
LCByb3csIHJvd3NwYW4pIChjb2wgKyAocm93aWR0aCAqIHJvd3NwYW4pKQogCiAjaWZkZWYgREVC
VUdfTUVNX0xFQUtTCiBzdGF0aWMgdWludDY0X3QgdGlsZXNfYWxsb2NhdGVkID0gMDsKQEAgLTUz
LDE1ICs1MywxNSBAQCBzdHJ1Y3QgdGlsZV9hY2NvdW50IHsKIH07CiAKIHN0YXRpYyBzaXplX3Qg
YWNjb3VudGluZ19sZW4gPSAwOwotc3RhdGljIHN0cnVjdCB0aWxlX2FjY291bnQgKmFjY291bnRp
bmcgPSAwOworc3RhdGljIHN0cnVjdCB0aWxlX2FjY291bnQqIGFjY291bnRpbmcgPSAwOwogCi1z
dGF0aWMgaW5saW5lIHN0cnVjdCB0aWxlX2FjY291bnQgKl9ld2tfdGlsZV9hY2NvdW50X2dldChj
b25zdCBFd2tfVGlsZSAqdCkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHRpbGVfYWNjb3VudCogX2V3
a190aWxlX2FjY291bnRfZ2V0KGNvbnN0IEV3a19UaWxlKiB0aWxlKQogewotICAgIHN0cnVjdCB0
aWxlX2FjY291bnQgKmFjYzsKKyAgICBzdHJ1Y3QgdGlsZV9hY2NvdW50KiBhY2M7CiAgICAgc2l6
ZV90IGk7CiAKICAgICBmb3IgKGkgPSAwOyBpIDwgYWNjb3VudGluZ19sZW47IGkrKykgewotICAg
ICAgICBpZiAoYWNjb3VudGluZ1tpXS5zaXplID09IHQtPncpCisgICAgICAgIGlmIChhY2NvdW50
aW5nW2ldLnNpemUgPT0gdGlsZS0+d2lkdGgpCiAgICAgICAgICAgICByZXR1cm4gYWNjb3VudGlu
ZyArIGk7CiAgICAgfQogCkBAIC02OSw3ICs2OSw3IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IHRp
bGVfYWNjb3VudCAqX2V3a190aWxlX2FjY291bnRfZ2V0KGNvbnN0IEV3a19UaWxlICp0KQogICAg
IFJFQUxMT0NfT1JfT09NX1JFVChhY2NvdW50aW5nLCBpLCAwKTsKIAogICAgIGFjYyA9IGFjY291
bnRpbmcgKyBhY2NvdW50aW5nX2xlbjsKLSAgICBhY2MtPnNpemUgPSB0LT53OworICAgIGFjYy0+
c2l6ZSA9IHRpbGUtPndpZHRoOwogICAgIGFjYy0+dGlsZXMuYWxsb2NhdGVkID0gMDsKICAgICBh
Y2MtPnRpbGVzLmZyZWVkID0gMDsKICAgICBhY2MtPmJ5dGVzLmFsbG9jYXRlZCA9IDA7CkBAIC04
MCw0MCArODAsNDAgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgdGlsZV9hY2NvdW50ICpfZXdrX3Rp
bGVfYWNjb3VudF9nZXQoY29uc3QgRXdrX1RpbGUgKnQpCiAgICAgcmV0dXJuIGFjYzsKIH0KIAot
c3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZV9hY2NvdW50X2FsbG9jYXRlZChjb25zdCBFd2tf
VGlsZSAqdCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVfYWNjb3VudF9hbGxvY2F0ZWQo
Y29uc3QgRXdrX1RpbGUqIHRpbGUpCiB7Ci0gICAgc3RydWN0IHRpbGVfYWNjb3VudCAqYWNjID0g
X2V3a190aWxlX2FjY291bnRfZ2V0KHQpOworICAgIHN0cnVjdCB0aWxlX2FjY291bnQqIGFjYyA9
IF9ld2tfdGlsZV9hY2NvdW50X2dldCh0aWxlKTsKICAgICBpZiAoIWFjYykKICAgICAgICAgcmV0
dXJuOwotICAgIGFjYy0+Ynl0ZXMuYWxsb2NhdGVkICs9IHQtPmJ5dGVzOworICAgIGFjYy0+Ynl0
ZXMuYWxsb2NhdGVkICs9IHRpbGUtPmJ5dGVzOwogICAgIGFjYy0+dGlsZXMuYWxsb2NhdGVkKys7
CiAKLSAgICBieXRlc19hbGxvY2F0ZWQgKz0gdC0+Ynl0ZXM7CisgICAgYnl0ZXNfYWxsb2NhdGVk
ICs9IHRpbGUtPmJ5dGVzOwogICAgIHRpbGVzX2FsbG9jYXRlZCsrOwogfQogCi1zdGF0aWMgaW5s
aW5lIHZvaWQgX2V3a190aWxlX2FjY291bnRfZnJlZWQoY29uc3QgRXdrX1RpbGUgKnQpCitzdGF0
aWMgaW5saW5lIHZvaWQgX2V3a190aWxlX2FjY291bnRfZnJlZWQoY29uc3QgRXdrX1RpbGUqIHRp
bGUpCiB7Ci0gICAgc3RydWN0IHRpbGVfYWNjb3VudCAqYWNjID0gX2V3a190aWxlX2FjY291bnRf
Z2V0KHQpOworICAgIHN0cnVjdCB0aWxlX2FjY291bnQqIGFjYyA9IF9ld2tfdGlsZV9hY2NvdW50
X2dldCh0aWxlKTsKICAgICBpZiAoIWFjYykKICAgICAgICAgcmV0dXJuOwogCi0gICAgYWNjLT5i
eXRlcy5mcmVlZCArPSB0LT5ieXRlczsKKyAgICBhY2MtPmJ5dGVzLmZyZWVkICs9IHRpbGUtPmJ5
dGVzOwogICAgIGFjYy0+dGlsZXMuZnJlZWQrKzsKIAotICAgIGJ5dGVzX2ZyZWVkICs9IHQtPmJ5
dGVzOworICAgIGJ5dGVzX2ZyZWVkICs9IHRpbGUtPmJ5dGVzOwogICAgIHRpbGVzX2ZyZWVkKys7
CiB9CiAKLXZvaWQgZXdrX3RpbGVfYWNjb3VudGluZ19kYmcodm9pZCkKK3ZvaWQgZXdrX3RpbGVf
YWNjb3VudGluZ19kYmcoKQogewotICAgIHN0cnVjdCB0aWxlX2FjY291bnQgKmFjYzsKLSAgICBz
dHJ1Y3QgdGlsZV9hY2NvdW50ICphY2NfZW5kOworICAgIHN0cnVjdCB0aWxlX2FjY291bnQqIGFj
YzsKKyAgICBzdHJ1Y3QgdGlsZV9hY2NvdW50KiBhY2NfZW5kOwogCi0gICAgcHJpbnRmKCJUSUxF
IEJBTEFOQ0U6IHRpbGVzWyslIlBSSXU2NCIsLSUiUFJJdTY0IjolIlBSSXU2NCJdICIKLSAgICAg
ICAgICAgImJ5dGVzWyslIlBSSXU2NCIsLSUiUFJJdTY0IjolIlBSSXU2NCJdXG4iLAotICAgICAg
ICAgICAgdGlsZXNfYWxsb2NhdGVkLCB0aWxlc19mcmVlZCwgdGlsZXNfYWxsb2NhdGVkIC0gdGls
ZXNfZnJlZWQsCi0gICAgICAgICAgICBieXRlc19hbGxvY2F0ZWQsIGJ5dGVzX2ZyZWVkLCBieXRl
c19hbGxvY2F0ZWQgLSBieXRlc19mcmVlZCk7CisgICAgcHJpbnRmKCJUSUxFIEJBTEFOQ0U6IHRp
bGVzWyslIiBQUkl1NjQgIiwtJSIgUFJJdTY0ICI6JSIgUFJJdTY0ICJdICIKKyAgICAgICAgICAg
ImJ5dGVzWyslIiBQUkl1NjQgIiwtJSIgUFJJdTY0ICI6JSIgUFJJdTY0ICJdXG4iLAorICAgICAg
ICAgICB0aWxlc19hbGxvY2F0ZWQsIHRpbGVzX2ZyZWVkLCB0aWxlc19hbGxvY2F0ZWQgLSB0aWxl
c19mcmVlZCwKKyAgICAgICAgICAgYnl0ZXNfYWxsb2NhdGVkLCBieXRlc19mcmVlZCwgYnl0ZXNf
YWxsb2NhdGVkIC0gYnl0ZXNfZnJlZWQpOwogCiAgICAgaWYgKCFhY2NvdW50aW5nX2xlbikKICAg
ICAgICAgcmV0dXJuOwpAQCAtMTI3LDggKzEyNyw4IEBAIHZvaWQgZXdrX3RpbGVfYWNjb3VudGlu
Z19kYmcodm9pZCkKICAgICAgICAgdGlsZXMgPSBhY2MtPnRpbGVzLmFsbG9jYXRlZCAtIGFjYy0+
dGlsZXMuZnJlZWQ7CiAgICAgICAgIGJ5dGVzID0gYWNjLT5ieXRlcy5hbGxvY2F0ZWQgLSBhY2Mt
PmJ5dGVzLmZyZWVkOwogCi0gICAgICAgIHByaW50ZigiICAgJTRkOiB0aWxlc1srJTQiUFJJdTY0
IiwtJTQiUFJJdTY0IjolNCJQUkl1NjQiXSAiCi0gICAgICAgICAgICAgICAiYnl0ZXNbKyU4IlBS
SXU2NCIsLSU4IlBSSXU2NCI6JTgiUFJJdTY0Il0lc1xuIiwKKyAgICAgICAgcHJpbnRmKCIgICAl
NGQ6IHRpbGVzWyslNCIgUFJJdTY0ICIsLSU0IiBQUkl1NjQgIjolNCIgUFJJdTY0ICJdICIKKyAg
ICAgICAgICAgICAgICJieXRlc1srJTgiIFBSSXU2NCAiLC0lOCIgUFJJdTY0ICI6JTgiIFBSSXU2
NCAiXSVzXG4iLAogICAgICAgICAgICAgICAgYWNjLT5zaXplLAogICAgICAgICAgICAgICAgYWNj
LT50aWxlcy5hbGxvY2F0ZWQsIGFjYy0+dGlsZXMuZnJlZWQsIHRpbGVzLAogICAgICAgICAgICAg
ICAgYWNjLT5ieXRlcy5hbGxvY2F0ZWQsIGFjYy0+Ynl0ZXMuZnJlZWQsIGJ5dGVzLApAQCAtMTM4
LDI1ICsxMzgsMjIgQEAgdm9pZCBld2tfdGlsZV9hY2NvdW50aW5nX2RiZyh2b2lkKQogfQogI2Vs
c2UKIAotc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZV9hY2NvdW50X2FsbG9jYXRlZChjb25z
dCBFd2tfVGlsZSAqdCkgeyB9Ci1zdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlX2FjY291bnRf
ZnJlZWQoY29uc3QgRXdrX1RpbGUgKnQpIHsgfQorc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGls
ZV9hY2NvdW50X2FsbG9jYXRlZChjb25zdCBFd2tfVGlsZSogdGlsZSkgeyB9CitzdGF0aWMgaW5s
aW5lIHZvaWQgX2V3a190aWxlX2FjY291bnRfZnJlZWQoY29uc3QgRXdrX1RpbGUqIHRpbGUpIHsg
fQogCi12b2lkIGV3a190aWxlX2FjY291bnRpbmdfZGJnKHZvaWQpCit2b2lkIGV3a190aWxlX2Fj
Y291bnRpbmdfZGJnKCkKIHsKICAgICBwcmludGYoImNvbXBpbGUgd2Via2l0IHdpdGggREVCVUdf
TUVNX0xFQUtTIGRlZmluZWQhXG4iKTsKIH0KICNlbmRpZgogCi1zdGF0aWMgaW5saW5lIHZvaWQg
X2V3a190aWxlX3BhaW50X3JnYjg4OChFd2tfVGlsZSAqdCwgdWludDhfdCByLCB1aW50OF90IGcs
IHVpbnQ4X3QgYikKK3N0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVfcGFpbnRfcmdiODg4KEV3
a19UaWxlKiB0aWxlLCB1aW50OF90IHJlZCwgdWludDhfdCBncmVlbiwgdWludDhfdCBibHVlKQog
ewotICAgIHVpbnQzMl90ICpkc3QzMiwgKmRzdDMyX2VuZCwgYzE7Ci0gICAgdWludDY0X3QgKmRz
dDY0LCAqZHN0NjRfZW5kLCBjMjsKKyAgICB1aW50MzJfdCBjMSA9IDB4ZmYwMDAwMDAgfCAoKHVp
bnQzMl90KXJlZCA8PCAxNikgfCAoKHVpbnQzMl90KWdyZWVuIDw8IDgpIHwgYmx1ZTsKKyAgICB1
aW50MzJfdCBjMiA9ICgodWludDY0X3QpYzEgPDwgMzIpIHwgYzE7CiAKLSAgICBjMSA9IDB4ZmYw
MDAwMDAgfCAoKHVpbnQzMl90KXIgPDwgMTYpIHwgKCh1aW50MzJfdClnIDw8IDgpIHwgYjsKLSAg
ICBjMiA9ICgodWludDY0X3QpYzEgPDwgMzIpIHwgYzE7Ci0KLSAgICBkc3Q2NCA9ICh1aW50NjRf
dCAqKXQtPnBpeGVsczsKLSAgICBkc3Q2NF9lbmQgPSBkc3Q2NCArICgodC0+Ynl0ZXMgLyA4KSAm
IH43KTsKKyAgICB1aW50NjRfdCogZHN0NjQgPSAodWludDY0X3QqKXRpbGUtPnBpeGVsczsKKyAg
ICB1aW50NjRfdCogZHN0NjRfZW5kID0gZHN0NjQgKyAoKHRpbGUtPmJ5dGVzIC8gOCkgJiB+Nyk7
CiAgICAgZm9yICg7IGRzdDY0IDwgZHN0NjRfZW5kOyBkc3Q2NCArPSA4KSB7CiAgICAgICAgIC8q
IFRPRE86IEFSTSBhZGQgcGxkIG9yIE5FT04gaW5zdHJ1Y3Rpb25zICovCiAgICAgICAgIGRzdDY0
WzBdID0gYzI7CkBAIC0xNjksMjYgKzE2NiwyNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgX2V3a190
aWxlX3BhaW50X3JnYjg4OChFd2tfVGlsZSAqdCwgdWludDhfdCByLCB1aW50OF90IGcsIHVpbgog
ICAgICAgICBkc3Q2NFs3XSA9IGMyOwogICAgIH0KIAotICAgIGRzdDMyID0gKHVpbnQzMl90ICop
ZHN0NjRfZW5kOwotICAgIGRzdDMyX2VuZCA9ICh1aW50MzJfdCAqKSh0LT5waXhlbHMgKyB0LT5i
eXRlcyk7CisgICAgdWludDMyX3QqIGRzdDMyID0gKHVpbnQzMl90Kilkc3Q2NF9lbmQ7CisgICAg
dWludDMyX3QqIGRzdDMyX2VuZCA9ICh1aW50MzJfdCopKHRpbGUtPnBpeGVscyArIHRpbGUtPmJ5
dGVzKTsKICAgICBmb3IgKDsgZHN0MzIgPCBkc3QzMl9lbmQ7IGRzdDMyKyspCiAgICAgICAgICpk
c3QzMiA9IGMxOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlX3BhaW50X3JnYjU2
NShFd2tfVGlsZSAqdCwgdWludDhfdCByLCB1aW50OF90IGcsIHVpbnQ4X3QgYikKK3N0YXRpYyBp
bmxpbmUgdm9pZCBfZXdrX3RpbGVfcGFpbnRfcmdiNTY1KEV3a19UaWxlKiB0aWxlLCB1aW50OF90
IHJlZCwgdWludDhfdCBncmVlbiwgdWludDhfdCBibHVlKQogewotICAgIHVpbnQxNl90ICpkc3Qx
NiwgKmRzdDE2X2VuZCwgYzE7Ci0gICAgdWludDY0X3QgKmRzdDY0LCAqZHN0NjRfZW5kLCBjMjsK
KyAgICB1aW50MTZfdCogZHN0MTYsICogZHN0MTZfZW5kLCBjMTsKKyAgICB1aW50NjRfdCogZHN0
NjQsICogZHN0NjRfZW5kLCBjMjsKIAotICAgIGMxID0gKCgoKHIgPj4gMykgJiAweDFmKSA8PCAx
MSkgfAotICAgICAgICAgICgoKGcgPj4gMikgJiAweDNmKSA8PCA1KSB8Ci0gICAgICAgICAgKChi
ID4+IDMpICYgMHgxZikpOworICAgIGMxID0gKCgoKHJlZCA+PiAzKSAmIDB4MWYpIDw8IDExKSB8
CisgICAgICAgICAgKCgoZ3JlZW4gPj4gMikgJiAweDNmKSA8PCA1KSB8CisgICAgICAgICAgKChi
bHVlID4+IDMpICYgMHgxZikpOwogCiAgICAgYzIgPSAoKCh1aW50NjRfdCljMSA8PCA0OCkgfCAo
KHVpbnQ2NF90KWMxIDw8IDMyKSB8CiAgICAgICAgICAgKCh1aW50NjRfdCljMSA8PCAxNikgfCBj
MSk7CiAKLSAgICBkc3Q2NCA9ICh1aW50NjRfdCAqKXQtPnBpeGVsczsKLSAgICBkc3Q2NF9lbmQg
PSBkc3Q2NCArICgodC0+Ynl0ZXMgLyA4KSAmIH43KTsKKyAgICBkc3Q2NCA9ICh1aW50NjRfdCop
dGlsZS0+cGl4ZWxzOworICAgIGRzdDY0X2VuZCA9IGRzdDY0ICsgKCh0aWxlLT5ieXRlcyAvIDgp
ICYgfjcpOwogICAgIGZvciAoOyBkc3Q2NCA8IGRzdDY0X2VuZDsgZHN0NjQgKz0gOCkgewogICAg
ICAgICAvKiBUT0RPOiBBUk0gYWRkIHBsZCBvciBORU9OIGluc3RydWN0aW9ucyAqLwogICAgICAg
ICBkc3Q2NFswXSA9IGMyOwpAQCAtMjAxLDIwICsxOTgsMjAgQEAgc3RhdGljIGlubGluZSB2b2lk
IF9ld2tfdGlsZV9wYWludF9yZ2I1NjUoRXdrX1RpbGUgKnQsIHVpbnQ4X3QgciwgdWludDhfdCBn
LCB1aW4KICAgICAgICAgZHN0NjRbN10gPSBjMjsKICAgICB9CiAKLSAgICBkc3QxNiA9ICh1aW50
MTZfdCAqKWRzdDE2X2VuZDsKLSAgICBkc3QxNl9lbmQgPSAodWludDE2X3QgKikodC0+cGl4ZWxz
ICsgdC0+Ynl0ZXMpOworICAgIGRzdDE2ID0gKHVpbnQxNl90Kilkc3QxNl9lbmQ7CisgICAgZHN0
MTZfZW5kID0gKHVpbnQxNl90KikodGlsZS0+cGl4ZWxzICsgdGlsZS0+Ynl0ZXMpOwogICAgIGZv
ciAoOyBkc3QxNiA8IGRzdDE2X2VuZDsgZHN0MTYrKykKICAgICAgICAgKmRzdDE2ID0gYzE7CiB9
CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVfcGFpbnQoRXdrX1RpbGUgKnQsIHVpbnQ4
X3QgciwgdWludDhfdCBnLCB1aW50OF90IGIpCitzdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxl
X3BhaW50KEV3a19UaWxlKiB0aWxlLCB1aW50OF90IHJlZCwgdWludDhfdCBncmVlbiwgdWludDhf
dCBibHVlKQogewotICAgIGlmICh0LT5jc3BhY2UgPT0gRVZBU19DT0xPUlNQQUNFX0FSR0I4ODg4
KQotICAgICAgICBfZXdrX3RpbGVfcGFpbnRfcmdiODg4KHQsIHIsIGcsIGIpOwotICAgIGVsc2Ug
aWYgKHQtPmNzcGFjZSA9PSBFVkFTX0NPTE9SU1BBQ0VfUkdCNTY1X0E1UCkKLSAgICAgICAgX2V3
a190aWxlX3BhaW50X3JnYjU2NSh0LCByLCBnLCBiKTsKKyAgICBpZiAodGlsZS0+Y3NwYWNlID09
IEVWQVNfQ09MT1JTUEFDRV9BUkdCODg4OCkKKyAgICAgICAgX2V3a190aWxlX3BhaW50X3JnYjg4
OCh0aWxlLCByZWQsIGdyZWVuLCBibHVlKTsKKyAgICBlbHNlIGlmICh0aWxlLT5jc3BhY2UgPT0g
RVZBU19DT0xPUlNQQUNFX1JHQjU2NV9BNVApCisgICAgICAgIF9ld2tfdGlsZV9wYWludF9yZ2I1
NjUodGlsZSwgcmVkLCBncmVlbiwgYmx1ZSk7CiAgICAgZWxzZQotICAgICAgICBFUlIoInVua25v
d24gY29sb3Igc3BhY2U6ICVkIiwgdC0+Y3NwYWNlKTsKKyAgICAgICAgRVJSKCJ1bmtub3duIGNv
bG9yIHNwYWNlOiAlZCIsIHRpbGUtPmNzcGFjZSk7CiB9CiAKIC8qKgpAQCAtMjMyLDE1NCArMjI5
LDE1NCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlX3BhaW50KEV3a19UaWxlICp0LCB1
aW50OF90IHIsIHVpbnQ4X3QgZywgdWludDhfdCBiKQogICogZXdrX3RpbGVfdXBkYXRlc19jbGVh
cigpIHRvIGNoYW5nZSBAYyBzdGF0cy5taXNzZXMsCiAgKiBAYyBzdGF0cy5mdWxsX3VwZGF0ZSBh
bmQgQGMgdXBkYXRlcy4KICAqLwotRXdrX1RpbGUgKmV3a190aWxlX25ldyhFdmFzICpldmFzLCBF
dmFzX0Nvb3JkIHcsIEV2YXNfQ29vcmQgaCwgZmxvYXQgem9vbSwgRXZhc19Db2xvcnNwYWNlIGNz
cGFjZSkKK0V3a19UaWxlKiBld2tfdGlsZV9uZXcoRXZhcyogZXZhcywgRXZhc19Db29yZCB3aWR0
aCwgRXZhc19Db29yZCBoZWlnaHQsIGZsb2F0IHpvb20sIEV2YXNfQ29sb3JzcGFjZSBjb2xvclNw
YWNlKQogewotICAgIEV2YXNfQ29vcmQgKmVjOwotICAgIEV2YXNfQ29sb3JzcGFjZSAqZWNzOwot
ICAgIGZsb2F0ICpmOwotICAgIHNpemVfdCAqczsKLSAgICBFd2tfVGlsZSAqdDsKKyAgICBFdmFz
X0Nvb3JkKiBlYzsKKyAgICBFdmFzX0NvbG9yc3BhY2UqIGVjczsKKyAgICBmbG9hdCogZjsKKyAg
ICBzaXplX3QqIHM7CisgICAgRXdrX1RpbGUqIHRpbGU7CiAgICAgdW5zaWduZWQgaW50IGFyZWE7
CiAgICAgc2l6ZV90IGJ5dGVzOwogICAgIGNhaXJvX2Zvcm1hdF90IGZvcm1hdDsKICAgICBjYWly
b19zdGF0dXNfdCBzdGF0dXM7CiAgICAgaW50IHN0cmlkZTsKLSAgICBFY29yZV9FdmFzICplZTsK
LSAgICBjb25zdCBjaGFyICplbmdpbmU7CisgICAgRWNvcmVfRXZhcyogZWU7CisgICAgY29uc3Qg
Y2hhciogZW5naW5lOwogCi0gICAgYXJlYSA9IHcgKiBoOworICAgIGFyZWEgPSB3aWR0aCAqIGhl
aWdodDsKIAotICAgIGlmIChjc3BhY2UgPT0gRVZBU19DT0xPUlNQQUNFX0FSR0I4ODg4KSB7Cisg
ICAgaWYgKGNvbG9yU3BhY2UgPT0gRVZBU19DT0xPUlNQQUNFX0FSR0I4ODg4KSB7CiAgICAgICAg
IGJ5dGVzID0gYXJlYSAqIDQ7Ci0gICAgICAgIHN0cmlkZSA9IHcgKiA0OworICAgICAgICBzdHJp
ZGUgPSB3aWR0aCAqIDQ7CiAgICAgICAgIGZvcm1hdCA9IENBSVJPX0ZPUk1BVF9BUkdCMzI7Ci0g
ICAgfSBlbHNlIGlmIChjc3BhY2UgPT0gRVZBU19DT0xPUlNQQUNFX1JHQjU2NV9BNVApIHsKKyAg
ICB9IGVsc2UgaWYgKGNvbG9yU3BhY2UgPT0gRVZBU19DT0xPUlNQQUNFX1JHQjU2NV9BNVApIHsK
ICAgICAgICAgYnl0ZXMgPSBhcmVhICogMjsKLSAgICAgICAgc3RyaWRlID0gdyAqIDI7CisgICAg
ICAgIHN0cmlkZSA9IHdpZHRoICogMjsKICAgICAgICAgZm9ybWF0ID0gQ0FJUk9fRk9STUFUX1JH
QjE2XzU2NTsKICAgICB9IGVsc2UgewotICAgICAgICBFUlIoInVua25vd24gY29sb3Igc3BhY2U6
ICVkIiwgY3NwYWNlKTsKKyAgICAgICAgRVJSKCJ1bmtub3duIGNvbG9yIHNwYWNlOiAlZCIsIGNv
bG9yU3BhY2UpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBEQkcoInNpemU6ICVk
eCVkICglZCksIHpvb206ICVmLCBjc3BhY2U9JWQiLCB3LCBoLCBhcmVhLCAoZG91YmxlKXpvb20s
IGNzcGFjZSk7CisgICAgREJHKCJzaXplOiAlZHglZCAoJWQpLCB6b29tOiAlZiwgY3NwYWNlPSVk
Iiwgd2lkdGgsIGhlaWdodCwgYXJlYSwgKGRvdWJsZSl6b29tLCBjb2xvclNwYWNlKTsKIAotICAg
IHQgPSBzdGF0aWNfY2FzdDxFd2tfVGlsZSo+KG1hbGxvYyhzaXplb2YoRXdrX1RpbGUpKSk7Ci0g
ICAgaWYgKCF0KQorICAgIHRpbGUgPSBzdGF0aWNfY2FzdDxFd2tfVGlsZSo+KG1hbGxvYyhzaXpl
b2YoRXdrX1RpbGUpKSk7CisgICAgaWYgKCF0aWxlKQogICAgICAgICByZXR1cm4gMDsKIAotICAg
IHQtPmltYWdlID0gZXZhc19vYmplY3RfaW1hZ2VfYWRkKGV2YXMpOworICAgIHRpbGUtPmltYWdl
ID0gZXZhc19vYmplY3RfaW1hZ2VfYWRkKGV2YXMpOwogCiAgICAgZWUgPSBlY29yZV9ldmFzX2Vj
b3JlX2V2YXNfZ2V0KGV2YXMpOwogICAgIGVuZ2luZSA9IGVjb3JlX2V2YXNfZW5naW5lX25hbWVf
Z2V0KGVlKTsKICAgICBpZiAoZW5naW5lICYmICFzdHJjbXAoZW5naW5lLCAib3BlbmdsX3gxMSIp
KQotICAgICAgICBldmFzX29iamVjdF9pbWFnZV9jb250ZW50X2hpbnRfc2V0KHQtPmltYWdlLCBF
VkFTX0lNQUdFX0NPTlRFTlRfSElOVF9EWU5BTUlDKTsKKyAgICAgICAgZXZhc19vYmplY3RfaW1h
Z2VfY29udGVudF9oaW50X3NldCh0aWxlLT5pbWFnZSwgRVZBU19JTUFHRV9DT05URU5UX0hJTlRf
RFlOQU1JQyk7CiAKLSAgICB0LT52aXNpYmxlID0gMDsKLSAgICB0LT51cGRhdGVzID0gMDsKKyAg
ICB0aWxlLT52aXNpYmxlID0gMDsKKyAgICB0aWxlLT51cGRhdGVzID0gMDsKIAotICAgIG1lbXNl
dCgmdC0+c3RhdHMsIDAsIHNpemVvZihFd2tfVGlsZV9TdGF0cykpOwotICAgIHQtPnN0YXRzLmFy
ZWEgPSBhcmVhOworICAgIG1lbXNldCgmdGlsZS0+c3RhdHMsIDAsIHNpemVvZihFd2tfVGlsZV9T
dGF0cykpOworICAgIHRpbGUtPnN0YXRzLmFyZWEgPSBhcmVhOwogCiAgICAgLyogdWdseSwgYnV0
IGxldCdzIGF2b2lkIGF0IGFsbCBjb3N0cyBoYXZpbmcgdXNlcnMgdG8gbW9kaWZ5IHRob3NlICov
Ci0gICAgZWMgPSAoRXZhc19Db29yZCAqKSZ0LT53OwotICAgICplYyA9IHc7CisgICAgZWMgPSAo
RXZhc19Db29yZCopJnRpbGUtPndpZHRoOworICAgICplYyA9IHdpZHRoOwogCi0gICAgZWMgPSAo
RXZhc19Db29yZCAqKSZ0LT5oOwotICAgICplYyA9IGg7CisgICAgZWMgPSAoRXZhc19Db29yZCop
JnRpbGUtPmhlaWdodDsKKyAgICAqZWMgPSBoZWlnaHQ7CiAKLSAgICBlY3MgPSAoRXZhc19Db2xv
cnNwYWNlICopJnQtPmNzcGFjZTsKLSAgICAqZWNzID0gY3NwYWNlOworICAgIGVjcyA9IChFdmFz
X0NvbG9yc3BhY2UqKSZ0aWxlLT5jc3BhY2U7CisgICAgKmVjcyA9IGNvbG9yU3BhY2U7CiAKLSAg
ICBmID0gKGZsb2F0ICopJnQtPnpvb207CisgICAgZiA9IChmbG9hdCopJnRpbGUtPnpvb207CiAg
ICAgKmYgPSB6b29tOwogCi0gICAgcyA9IChzaXplX3QgKikmdC0+Ynl0ZXM7CisgICAgcyA9IChz
aXplX3QqKSZ0aWxlLT5ieXRlczsKICAgICAqcyA9IGJ5dGVzOwogCi0gICAgZXZhc19vYmplY3Rf
aW1hZ2Vfc2l6ZV9zZXQodC0+aW1hZ2UsIHQtPncsIHQtPmgpOwotICAgIGV2YXNfb2JqZWN0X2lt
YWdlX2NvbG9yc3BhY2Vfc2V0KHQtPmltYWdlLCB0LT5jc3BhY2UpOwotICAgIHQtPnBpeGVscyA9
IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihldmFzX29iamVjdF9pbWFnZV9kYXRhX2dldCh0LT5pbWFn
ZSwgRUlOQV9UUlVFKSk7Ci0gICAgdC0+c3VyZmFjZSA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfY3Jl
YXRlX2Zvcl9kYXRhKHQtPnBpeGVscywgZm9ybWF0LCB3LCBoLCBzdHJpZGUpOwotICAgIHN0YXR1
cyA9IGNhaXJvX3N1cmZhY2Vfc3RhdHVzKHQtPnN1cmZhY2UpOworICAgIGV2YXNfb2JqZWN0X2lt
YWdlX3NpemVfc2V0KHRpbGUtPmltYWdlLCB0aWxlLT53aWR0aCwgdGlsZS0+aGVpZ2h0KTsKKyAg
ICBldmFzX29iamVjdF9pbWFnZV9jb2xvcnNwYWNlX3NldCh0aWxlLT5pbWFnZSwgdGlsZS0+Y3Nw
YWNlKTsKKyAgICB0aWxlLT5waXhlbHMgPSBzdGF0aWNfY2FzdDx1aW50OF90Kj4oZXZhc19vYmpl
Y3RfaW1hZ2VfZGF0YV9nZXQodGlsZS0+aW1hZ2UsIEVJTkFfVFJVRSkpOworICAgIHRpbGUtPnN1
cmZhY2UgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YSh0aWxlLT5waXhlbHMs
IGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgc3RyaWRlKTsKKyAgICBzdGF0dXMgPSBjYWlyb19zdXJm
YWNlX3N0YXR1cyh0aWxlLT5zdXJmYWNlKTsKICAgICBpZiAoc3RhdHVzICE9IENBSVJPX1NUQVRV
U19TVUNDRVNTKSB7CiAgICAgICAgIEVSUigiZmFpbGVkIHRvIGNyZWF0ZSBjYWlybyBzdXJmYWNl
OiAlcyIsCiAgICAgICAgICAgICBjYWlyb19zdGF0dXNfdG9fc3RyaW5nKHN0YXR1cykpOwotICAg
ICAgICBmcmVlKHQpOworICAgICAgICBmcmVlKHRpbGUpOwogICAgICAgICByZXR1cm4gMDsKICAg
ICB9CiAKLSAgICB0LT5jYWlybyA9IGNhaXJvX2NyZWF0ZSh0LT5zdXJmYWNlKTsKLSAgICBzdGF0
dXMgPSBjYWlyb19zdGF0dXModC0+Y2Fpcm8pOworICAgIHRpbGUtPmNhaXJvID0gY2Fpcm9fY3Jl
YXRlKHRpbGUtPnN1cmZhY2UpOworICAgIHN0YXR1cyA9IGNhaXJvX3N0YXR1cyh0aWxlLT5jYWly
byk7CiAgICAgaWYgKHN0YXR1cyAhPSBDQUlST19TVEFUVVNfU1VDQ0VTUykgewogICAgICAgICBF
UlIoImZhaWxlZCB0byBjcmVhdGUgY2Fpcm86ICVzIiwgY2Fpcm9fc3RhdHVzX3RvX3N0cmluZyhz
dGF0dXMpKTsKLSAgICAgICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95KHQtPnN1cmZhY2UpOwotICAg
ICAgICBldmFzX29iamVjdF9kZWwodC0+aW1hZ2UpOwotICAgICAgICBmcmVlKHQpOworICAgICAg
ICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3kodGlsZS0+c3VyZmFjZSk7CisgICAgICAgIGV2YXNfb2Jq
ZWN0X2RlbCh0aWxlLT5pbWFnZSk7CisgICAgICAgIGZyZWUodGlsZSk7CiAgICAgICAgIHJldHVy
biAwOwogICAgIH0KIAotICAgIF9ld2tfdGlsZV9hY2NvdW50X2FsbG9jYXRlZCh0KTsKKyAgICBf
ZXdrX3RpbGVfYWNjb3VudF9hbGxvY2F0ZWQodGlsZSk7CiAKLSAgICByZXR1cm4gdDsKKyAgICBy
ZXR1cm4gdGlsZTsKIH0KIAogLyoqCiAgKiBGcmVlIHRpbGUgbWVtb3J5LgogICovCi12b2lkIGV3
a190aWxlX2ZyZWUoRXdrX1RpbGUgKnQpCit2b2lkIGV3a190aWxlX2ZyZWUoRXdrX1RpbGUqIHRp
bGUpCiB7Ci0gICAgX2V3a190aWxlX2FjY291bnRfZnJlZWQodCk7CisgICAgX2V3a190aWxlX2Fj
Y291bnRfZnJlZWQodGlsZSk7CiAKLSAgICBpZiAodC0+dXBkYXRlcykKLSAgICAgICAgZWluYV90
aWxlcl9mcmVlKHQtPnVwZGF0ZXMpOworICAgIGlmICh0aWxlLT51cGRhdGVzKQorICAgICAgICBl
aW5hX3RpbGVyX2ZyZWUodGlsZS0+dXBkYXRlcyk7CiAKLSAgICBjYWlyb19zdXJmYWNlX2Rlc3Ry
b3kodC0+c3VyZmFjZSk7Ci0gICAgY2Fpcm9fZGVzdHJveSh0LT5jYWlybyk7Ci0gICAgZXZhc19v
YmplY3RfZGVsKHQtPmltYWdlKTsKLSAgICBmcmVlKHQpOworICAgIGNhaXJvX3N1cmZhY2VfZGVz
dHJveSh0aWxlLT5zdXJmYWNlKTsKKyAgICBjYWlyb19kZXN0cm95KHRpbGUtPmNhaXJvKTsKKyAg
ICBldmFzX29iamVjdF9kZWwodGlsZS0+aW1hZ2UpOworICAgIGZyZWUodGlsZSk7CiB9CiAKIC8q
KgogICogTWFrZSB0aGUgdGlsZSB2aXNpYmxlLCBpbmNyZW1lbnRpbmcgaXRzIGNvdW50ZXIuCiAg
Ki8KLXZvaWQgZXdrX3RpbGVfc2hvdyhFd2tfVGlsZSAqdCkKK3ZvaWQgZXdrX3RpbGVfc2hvdyhF
d2tfVGlsZSogdGlsZSkKIHsKLSAgICB0LT52aXNpYmxlKys7Ci0gICAgZXZhc19vYmplY3Rfc2hv
dyh0LT5pbWFnZSk7CisgICAgdGlsZS0+dmlzaWJsZSsrOworICAgIGV2YXNfb2JqZWN0X3Nob3co
dGlsZS0+aW1hZ2UpOwogfQogCiAvKioKICAqIERlY3JlbWVudCB0aGUgdmlzaWJpbGl0eSBjb3Vu
dGVyLCBtYWtpbmcgaXQgaW52aXNpYmxlIGlmIG5lY2Vzc2FyeS4KICAqLwotdm9pZCBld2tfdGls
ZV9oaWRlKEV3a19UaWxlICp0KQordm9pZCBld2tfdGlsZV9oaWRlKEV3a19UaWxlKiB0aWxlKQog
ewotICAgIHQtPnZpc2libGUtLTsKLSAgICBpZiAoIXQtPnZpc2libGUpCi0gICAgICAgIGV2YXNf
b2JqZWN0X2hpZGUodC0+aW1hZ2UpOworICAgIHRpbGUtPnZpc2libGUtLTsKKyAgICBpZiAoIXRp
bGUtPnZpc2libGUpCisgICAgICAgIGV2YXNfb2JqZWN0X2hpZGUodGlsZS0+aW1hZ2UpOwogfQog
CiAvKioKICAqIFJldHVybnMgRUlOQV9UUlVFIGlmIHRoZSB0aWxlIGlzIHZpc2libGUsIEVJTkFf
RkFMU0Ugb3RoZXJ3aXNlLgogICovCi1FaW5hX0Jvb2wgZXdrX3RpbGVfdmlzaWJsZV9nZXQoRXdr
X1RpbGUgKnQpCitFaW5hX0Jvb2wgZXdrX3RpbGVfdmlzaWJsZV9nZXQoRXdrX1RpbGUqIHRpbGUp
CiB7Ci0gICAgcmV0dXJuICEhdC0+dmlzaWJsZTsKKyAgICByZXR1cm4gISF0aWxlLT52aXNpYmxl
OwogfQogCiAvKioKICAqIE1hcmsgd2hvbGUgdGlsZSBhcyBkaXJ0eSBhbmQgcmVxdWlyaW5nIHVw
ZGF0ZS4KICAqLwotdm9pZCBld2tfdGlsZV91cGRhdGVfZnVsbChFd2tfVGlsZSAqdCkKK3ZvaWQg
ZXdrX3RpbGVfdXBkYXRlX2Z1bGwoRXdrX1RpbGUqIHRpbGUpCiB7CiAgICAgLyogVE9ETzogbGlz
dCBvZiB0aWxlcyBwZW5kaW5nIHVwZGF0ZXM/ICovCi0gICAgdC0+c3RhdHMubWlzc2VzKys7Cisg
ICAgdGlsZS0+c3RhdHMubWlzc2VzKys7CiAKLSAgICBpZiAoIXQtPnN0YXRzLmZ1bGxfdXBkYXRl
KSB7Ci0gICAgICAgIHQtPnN0YXRzLmZ1bGxfdXBkYXRlID0gRUlOQV9UUlVFOwotICAgICAgICBp
ZiAodC0+dXBkYXRlcykgewotICAgICAgICAgICAgZWluYV90aWxlcl9mcmVlKHQtPnVwZGF0ZXMp
OwotICAgICAgICAgICAgdC0+dXBkYXRlcyA9IDA7CisgICAgaWYgKCF0aWxlLT5zdGF0cy5mdWxs
X3VwZGF0ZSkgeworICAgICAgICB0aWxlLT5zdGF0cy5mdWxsX3VwZGF0ZSA9IEVJTkFfVFJVRTsK
KyAgICAgICAgaWYgKHRpbGUtPnVwZGF0ZXMpIHsKKyAgICAgICAgICAgIGVpbmFfdGlsZXJfZnJl
ZSh0aWxlLT51cGRhdGVzKTsKKyAgICAgICAgICAgIHRpbGUtPnVwZGF0ZXMgPSAwOwogICAgICAg
ICB9CiAgICAgfQogfQpAQCAtMzg3LDMyICszODQsMzIgQEAgdm9pZCBld2tfdGlsZV91cGRhdGVf
ZnVsbChFd2tfVGlsZSAqdCkKIC8qKgogICogTWFyayB0aGUgc3BlY2lmaWMgc3ViYXJlYSBhcyBk
aXJ0eSBhbmQgcmVxdWlyaW5nIHVwZGF0ZS4KICAqLwotdm9pZCBld2tfdGlsZV91cGRhdGVfYXJl
YShFd2tfVGlsZSAqdCwgY29uc3QgRWluYV9SZWN0YW5nbGUgKnIpCit2b2lkIGV3a190aWxlX3Vw
ZGF0ZV9hcmVhKEV3a19UaWxlKiB0aWxlLCBjb25zdCBFaW5hX1JlY3RhbmdsZSogcmVjdCkKIHsK
ICAgICAvKiBUT0RPOiBsaXN0IG9mIHRpbGVzIHBlbmRpbmcgdXBkYXRlcz8gKi8KLSAgICB0LT5z
dGF0cy5taXNzZXMrKzsKKyAgICB0aWxlLT5zdGF0cy5taXNzZXMrKzsKIAotICAgIGlmICh0LT5z
dGF0cy5mdWxsX3VwZGF0ZSkKKyAgICBpZiAodGlsZS0+c3RhdHMuZnVsbF91cGRhdGUpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIGlmICghci0+eCAmJiAhci0+eSAmJiByLT53ID09IHQtPncgJiYg
ci0+aCA9PSB0LT5oKSB7Ci0gICAgICAgIHQtPnN0YXRzLmZ1bGxfdXBkYXRlID0gRUlOQV9UUlVF
OwotICAgICAgICBpZiAodC0+dXBkYXRlcykgewotICAgICAgICAgICAgZWluYV90aWxlcl9mcmVl
KHQtPnVwZGF0ZXMpOwotICAgICAgICAgICAgdC0+dXBkYXRlcyA9IDA7CisgICAgaWYgKCFyZWN0
LT54ICYmICFyZWN0LT55ICYmIHJlY3QtPncgPT0gdGlsZS0+d2lkdGggJiYgcmVjdC0+aCA9PSB0
aWxlLT5oZWlnaHQpIHsKKyAgICAgICAgdGlsZS0+c3RhdHMuZnVsbF91cGRhdGUgPSBFSU5BX1RS
VUU7CisgICAgICAgIGlmICh0aWxlLT51cGRhdGVzKSB7CisgICAgICAgICAgICBlaW5hX3RpbGVy
X2ZyZWUodGlsZS0+dXBkYXRlcyk7CisgICAgICAgICAgICB0aWxlLT51cGRhdGVzID0gMDsKICAg
ICAgICAgfQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCF0LT51cGRhdGVzKSB7
Ci0gICAgICAgIHQtPnVwZGF0ZXMgPSBlaW5hX3RpbGVyX25ldyh0LT53LCB0LT5oKTsKLSAgICAg
ICAgaWYgKCF0LT51cGRhdGVzKSB7Ci0gICAgICAgICAgICBDUklUSUNBTCgiY291bGQgbm90IGNy
ZWF0ZSBlaW5hX3RpbGVyICVkeCVkLiIsIHQtPncsIHQtPmgpOworICAgIGlmICghdGlsZS0+dXBk
YXRlcykgeworICAgICAgICB0aWxlLT51cGRhdGVzID0gZWluYV90aWxlcl9uZXcodGlsZS0+d2lk
dGgsIHRpbGUtPmhlaWdodCk7CisgICAgICAgIGlmICghdGlsZS0+dXBkYXRlcykgeworICAgICAg
ICAgICAgQ1JJVElDQUwoImNvdWxkIG5vdCBjcmVhdGUgZWluYV90aWxlciAlZHglZC4iLCB0aWxl
LT53aWR0aCwgdGlsZS0+aGVpZ2h0KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
ICAgIH0KIAotICAgIGVpbmFfdGlsZXJfcmVjdF9hZGQodC0+dXBkYXRlcywgcik7CisgICAgZWlu
YV90aWxlcl9yZWN0X2FkZCh0aWxlLT51cGRhdGVzLCByZWN0KTsKIH0KIAogLyoqCkBAIC00MjEs
MzYgKzQxOCwzNiBAQCB2b2lkIGV3a190aWxlX3VwZGF0ZV9hcmVhKEV3a19UaWxlICp0LCBjb25z
dCBFaW5hX1JlY3RhbmdsZSAqcikKICAqIFRoaXMgd2lsbCBub3QgY2hhbmdlIHRoZSB0aWxlIHN0
YXRpc3RpY3Mgb3IgY2xlYXIgdGhlIHByb2Nlc3NlZAogICogdXBkYXRlcywgdXNlIGV3a190aWxl
X3VwZGF0ZXNfY2xlYXIoKSBmb3IgdGhhdC4KICAqLwotdm9pZCBld2tfdGlsZV91cGRhdGVzX3By
b2Nlc3MoRXdrX1RpbGUgKnQsIHZvaWQgKCpjYikodm9pZCAqZGF0YSwgRXdrX1RpbGUgKnQsIGNv
bnN0IEVpbmFfUmVjdGFuZ2xlICp1cGRhdGUpLCBjb25zdCB2b2lkICpkYXRhKQotewotICAgIGlm
ICh0LT5zdGF0cy5mdWxsX3VwZGF0ZSkgewotICAgICAgICBFaW5hX1JlY3RhbmdsZSByOwotICAg
ICAgICByLnggPSAwOwotICAgICAgICByLnkgPSAwOwotICAgICAgICByLncgPSB0LT53OwotICAg
ICAgICByLmggPSB0LT5oOwordm9pZCBld2tfdGlsZV91cGRhdGVzX3Byb2Nlc3MoRXdrX1RpbGUq
IHRpbGUsIHZvaWQgKCpjYWxsYmFjaykodm9pZCogZGF0YSwgRXdrX1RpbGUqIHRpbGUsIGNvbnN0
IEVpbmFfUmVjdGFuZ2xlKiB1cGRhdGUpLCBjb25zdCB2b2lkKiBkYXRhKQoreworICAgIGlmICh0
aWxlLT5zdGF0cy5mdWxsX3VwZGF0ZSkgeworICAgICAgICBFaW5hX1JlY3RhbmdsZSByZWN0Owor
ICAgICAgICByZWN0LnggPSAwOworICAgICAgICByZWN0LnkgPSAwOworICAgICAgICByZWN0Lncg
PSB0aWxlLT53aWR0aDsKKyAgICAgICAgcmVjdC5oID0gdGlsZS0+aGVpZ2h0OwogI2lmZGVmIFRJ
TEVfU1RBVFNfQUNDT1VOVF9SRU5ERVJfVElNRQogICAgICAgICBzdHJ1Y3QgdGltZXZhbCB0aW1l
djsKICAgICAgICAgZG91YmxlIHJlbmRlcl9zdGFydDsKICAgICAgICAgZ2V0dGltZW9mZGF5KCZ0
aW1ldiwgMCk7Ci0gICAgICAgIHJlbmRlcl9zdGFydCA9IChkb3VibGUpdGltZXYudHZfc2VjICsK
LSAgICAgICAgICAgICgoKGRvdWJsZSl0aW1ldi50dl91c2VjKSAvIDEwMDAwMDApOworICAgICAg
ICByZW5kZXJfc3RhcnRpbGUgPSAoZG91YmxlKXRpbWV2LnR2X3NlYyArCisgICAgICAgICAgICAg
ICAgICAgICAgICgoKGRvdWJsZSl0aW1ldi50dl91c2VjKSAvIDEwMDAwMDApOwogI2VuZGlmCi0g
ICAgICAgIGNiKCh2b2lkICopZGF0YSwgdCwgJnIpOworICAgICAgICBjYWxsYmFjaygodm9pZCop
ZGF0YSwgdGlsZSwgJnJlY3QpOwogI2lmZGVmIFRJTEVfU1RBVFNfQUNDT1VOVF9SRU5ERVJfVElN
RQogICAgICAgICBnZXR0aW1lb2ZkYXkoJnRpbWV2LCAwKTsKLSAgICAgICAgdC0+c3RhdHMucmVu
ZGVyX3RpbWUgPSAoZG91YmxlKXRpbWV2LnR2X3NlYyArCi0gICAgICAgICAgICAoKChkb3VibGUp
dGltZXYudHZfdXNlYykgLyAxMDAwMDAwKSAtIHJlbmRlcl9zdGFydDsKKyAgICAgICAgdGlsZS0+
c3RhdHMucmVuZGVyX3RpbWUgPSAoZG91YmxlKXRpbWV2LnR2X3NlYyArCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKCgoZG91YmxlKXRpbWV2LnR2X3VzZWMpIC8gMTAwMDAwMCkgLSBy
ZW5kZXJfc3RhcnQ7CiAjZW5kaWYKLSAgICB9IGVsc2UgaWYgKHQtPnVwZGF0ZXMpIHsKLSAgICAg
ICAgRWluYV9JdGVyYXRvciAqaXRyID0gZWluYV90aWxlcl9pdGVyYXRvcl9uZXcodC0+dXBkYXRl
cyk7Ci0gICAgICAgIEVpbmFfUmVjdGFuZ2xlICpyOworICAgIH0gZWxzZSBpZiAodGlsZS0+dXBk
YXRlcykgeworICAgICAgICBFaW5hX0l0ZXJhdG9yKiBpdHIgPSBlaW5hX3RpbGVyX2l0ZXJhdG9y
X25ldyh0aWxlLT51cGRhdGVzKTsKKyAgICAgICAgRWluYV9SZWN0YW5nbGUqIHJlY3Q7CiAgICAg
ICAgIGlmICghaXRyKSB7CiAgICAgICAgICAgICBDUklUSUNBTCgiY291bGQgbm90IGNyZWF0ZSB0
aWxlciBpdGVyYXRvciEiKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAg
ICBFSU5BX0lURVJBVE9SX0ZPUkVBQ0goaXRyLCByKQotICAgICAgICAgICAgY2IoKHZvaWQgKilk
YXRhLCB0LCByKTsKKyAgICAgICAgRUlOQV9JVEVSQVRPUl9GT1JFQUNIKGl0ciwgcmVjdCkKKyAg
ICAgICAgICAgIGNhbGxiYWNrKCh2b2lkKilkYXRhLCB0aWxlLCByZWN0KTsKICAgICAgICAgZWlu
YV9pdGVyYXRvcl9mcmVlKGl0cik7CiAgICAgfQogfQpAQCAtNDU5LDM4ICs0NTYsMzggQEAgdm9p
ZCBld2tfdGlsZV91cGRhdGVzX3Byb2Nlc3MoRXdrX1RpbGUgKnQsIHZvaWQgKCpjYikodm9pZCAq
ZGF0YSwgRXdrX1RpbGUgKnQsIGMKICAqIENsZWFyIGFsbCB1cGRhdGVzIGluIHJlZ2lvbiwgaWYg
YW55LgogICoKICAqIFRoaXMgd2lsbCBjaGFuZ2UgdGhlIHRpbGUgc3RhdGlzdGljcywgc3BlY2lh
bGx5IHplcm8gc3RhdC5taXNzZXMKLSAqIGFuZCB1bnNldCBzdGF0cy5mdWxsX3VwZGF0ZS4gSWYg
dC0+dXBkYXRlcyBleGlzdGVkLCB0aGVuIGl0IHdpbGwgYmUKKyAqIGFuZCB1bnNldCBzdGF0cy5m
dWxsX3VwZGF0ZS4gSWYgdGlsZS0+dXBkYXRlcyBleGlzdGVkLCB0aGVuIGl0IHdpbGwgYmUKICAq
IGRlc3Ryb3llZC4KICAqCiAgKiBUaGlzIGZ1bmN0aW9uIGlzIHVzdWFsbHkgY2FsbGVkIGFmdGVy
IGV3a190aWxlX3VwZGF0ZXNfcHJvY2VzcygpIGlzCiAgKiBjYWxsZWQuCiAgKi8KLXZvaWQgZXdr
X3RpbGVfdXBkYXRlc19jbGVhcihFd2tfVGlsZSAqdCkKK3ZvaWQgZXdrX3RpbGVfdXBkYXRlc19j
bGVhcihFd2tfVGlsZSogdGlsZSkKIHsKICAgICAvKiBUT0RPOiByZW1vdmUgZnJvbSBsaXN0IG9m
IHBlbmRpbmcgdXBkYXRlcz8gKi8KLSAgICB0LT5zdGF0cy5taXNzZXMgPSAwOworICAgIHRpbGUt
PnN0YXRzLm1pc3NlcyA9IDA7CiAKLSAgICBpZiAodC0+c3RhdHMuZnVsbF91cGRhdGUpCi0gICAg
ICAgIHQtPnN0YXRzLmZ1bGxfdXBkYXRlID0gMDsKLSAgICBlbHNlIGlmICh0LT51cGRhdGVzKSB7
Ci0gICAgICAgIGVpbmFfdGlsZXJfZnJlZSh0LT51cGRhdGVzKTsKLSAgICAgICAgdC0+dXBkYXRl
cyA9IDA7CisgICAgaWYgKHRpbGUtPnN0YXRzLmZ1bGxfdXBkYXRlKQorICAgICAgICB0aWxlLT5z
dGF0cy5mdWxsX3VwZGF0ZSA9IDA7CisgICAgZWxzZSBpZiAodGlsZS0+dXBkYXRlcykgeworICAg
ICAgICBlaW5hX3RpbGVyX2ZyZWUodGlsZS0+dXBkYXRlcyk7CisgICAgICAgIHRpbGUtPnVwZGF0
ZXMgPSAwOwogICAgIH0KIH0KIAogdHlwZWRlZiBzdHJ1Y3QgX0V3a19UaWxlX1VudXNlZF9DYWNo
ZV9FbnRyeSBFd2tfVGlsZV9VbnVzZWRfQ2FjaGVfRW50cnk7CiBzdHJ1Y3QgX0V3a19UaWxlX1Vu
dXNlZF9DYWNoZV9FbnRyeSB7Ci0gICAgRXdrX1RpbGUgKnRpbGU7CisgICAgRXdrX1RpbGUqIHRp
bGU7CiAgICAgaW50IHdlaWdodDsKICAgICBzdHJ1Y3QgewotICAgICAgICB2b2lkICgqY2IpKHZv
aWQgKmRhdGEsIEV3a19UaWxlICp0KTsKLSAgICAgICAgdm9pZCAqZGF0YTsKKyAgICAgICAgdm9p
ZCAoKmNiKSh2b2lkKiBkYXRhLCBFd2tfVGlsZSogdGlsZSk7CisgICAgICAgIHZvaWQqIGRhdGE7
CiAgICAgfSB0aWxlX2ZyZWU7CiB9OwogCiBzdHJ1Y3QgX0V3a19UaWxlX1VudXNlZF9DYWNoZSB7
CiAgICAgc3RydWN0IHsKLSAgICAgICAgRWluYV9MaXN0ICpsaXN0OworICAgICAgICBFaW5hX0xp
c3QqIGxpc3Q7CiAgICAgICAgIHNpemVfdCBjb3VudDsKICAgICAgICAgc2l6ZV90IGFsbG9jYXRl
ZDsKICAgICB9IGVudHJpZXM7CkBAIC01MjIsMzcgKzUxOSwzNyBAQCBzdGF0aWMgY29uc3Qgc2l6
ZV90IFRJTEVfVU5VU0VEX0NBQ0hFX01BWF9GUkVFID0gMzI7CiAgKiAgICAgICAgIGV3a190aWxl
X3VudXNlZF9jYWNoZV9mcmVlKCkgdG8gcmVsZWFzZSByZXNvdXJjZXMuIElmIG5vdAogICogICAg
ICAgICBwb3NzaWJsZSB0byBhbGxvY2F0ZSBtZW1vcnksIEBjIDAgaXMgcmV0dXJuZWQuCiAgKi8K
LUV3a19UaWxlX1VudXNlZF9DYWNoZSAqZXdrX3RpbGVfdW51c2VkX2NhY2hlX25ldyhzaXplX3Qg
bWF4KQorRXdrX1RpbGVfVW51c2VkX0NhY2hlKiBld2tfdGlsZV91bnVzZWRfY2FjaGVfbmV3KHNp
emVfdCBtYXgpCiB7Ci0gICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWM7CisgICAgRXdrX1Rp
bGVfVW51c2VkX0NhY2hlKiB0aWxlVW51c2VkQ2FjaGU7CiAKLSAgICB0dWMgPSBzdGF0aWNfY2Fz
dDxFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqPihjYWxsb2MoMSwgc2l6ZW9mKEV3a19UaWxlX1VudXNl
ZF9DYWNoZSkpKTsKLSAgICBpZiAoIXR1YykKKyAgICB0aWxlVW51c2VkQ2FjaGUgPSBzdGF0aWNf
Y2FzdDxFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqPihjYWxsb2MoMSwgc2l6ZW9mKEV3a19UaWxlX1Vu
dXNlZF9DYWNoZSkpKTsKKyAgICBpZiAoIXRpbGVVbnVzZWRDYWNoZSkKICAgICAgICAgcmV0dXJu
IDA7CiAKLSAgICBEQkcoInR1Yz0lcCIsIHR1Yyk7Ci0gICAgdHVjLT5tZW1vcnkubWF4ID0gbWF4
OwotICAgIHR1Yy0+cmVmZXJlbmNlcyA9IDE7Ci0gICAgcmV0dXJuIHR1YzsKKyAgICBEQkcoInRp
bGVVbnVzZWRDYWNoZT0lcCIsIHRpbGVVbnVzZWRDYWNoZSk7CisgICAgdGlsZVVudXNlZENhY2hl
LT5tZW1vcnkubWF4ID0gbWF4OworICAgIHRpbGVVbnVzZWRDYWNoZS0+cmVmZXJlbmNlcyA9IDE7
CisgICAgcmV0dXJuIHRpbGVVbnVzZWRDYWNoZTsKIH0KIAotdm9pZCBld2tfdGlsZV91bnVzZWRf
Y2FjaGVfbG9ja19hcmVhKEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjLCBFdmFzX0Nvb3JkIHgs
IEV2YXNfQ29vcmQgeSwgRXZhc19Db29yZCB3LCBFdmFzX0Nvb3JkIGgsIGZsb2F0IHpvb20pCit2
b2lkIGV3a190aWxlX3VudXNlZF9jYWNoZV9sb2NrX2FyZWEoRXdrX1RpbGVfVW51c2VkX0NhY2hl
KiB0aWxlVW51c2VkQ2FjaGUsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5LCBFdmFzX0Nvb3Jk
IHdpZHRoLCBFdmFzX0Nvb3JkIGhlaWdodCwgZmxvYXQgem9vbSkKIHsKLSAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTih0dWMpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHRp
bGVVbnVzZWRDYWNoZSk7CiAKLSAgICB0dWMtPmxvY2tlZC5sb2NrZWQgPSBFSU5BX1RSVUU7Ci0g
ICAgdHVjLT5sb2NrZWQueCA9IHg7Ci0gICAgdHVjLT5sb2NrZWQueSA9IHk7Ci0gICAgdHVjLT5s
b2NrZWQudyA9IHc7Ci0gICAgdHVjLT5sb2NrZWQuaCA9IGg7Ci0gICAgdHVjLT5sb2NrZWQuem9v
bSA9IHpvb207CisgICAgdGlsZVVudXNlZENhY2hlLT5sb2NrZWQubG9ja2VkID0gRUlOQV9UUlVF
OworICAgIHRpbGVVbnVzZWRDYWNoZS0+bG9ja2VkLnggPSB4OworICAgIHRpbGVVbnVzZWRDYWNo
ZS0+bG9ja2VkLnkgPSB5OworICAgIHRpbGVVbnVzZWRDYWNoZS0+bG9ja2VkLncgPSB3aWR0aDsK
KyAgICB0aWxlVW51c2VkQ2FjaGUtPmxvY2tlZC5oID0gaGVpZ2h0OworICAgIHRpbGVVbnVzZWRD
YWNoZS0+bG9ja2VkLnpvb20gPSB6b29tOwogfQogCi12b2lkIGV3a190aWxlX3VudXNlZF9jYWNo
ZV91bmxvY2tfYXJlYShFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YykKK3ZvaWQgZXdrX3RpbGVf
dW51c2VkX2NhY2hlX3VubG9ja19hcmVhKEV3a19UaWxlX1VudXNlZF9DYWNoZSogdGlsZVVudXNl
ZENhY2hlKQogewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHR1Yyk7CisgICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk4odGlsZVVudXNlZENhY2hlKTsKIAotICAgIHR1Yy0+bG9j
a2VkLmxvY2tlZCA9IEVJTkFfRkFMU0U7CisgICAgdGlsZVVudXNlZENhY2hlLT5sb2NrZWQubG9j
a2VkID0gRUlOQV9GQUxTRTsKIH0KIAogLyoqCkBAIC01NjcsMTggKzU2NCwxOCBAQCB2b2lkIGV3
a190aWxlX3VudXNlZF9jYWNoZV91bmxvY2tfYXJlYShFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1
YykKICAqCiAgKiBAc2VlIGV3a190aWxlX3VudXNlZF9jYWNoZV91bnJlZigpCiAgKi8KLXN0YXRp
YyB2b2lkIF9ld2tfdGlsZV91bnVzZWRfY2FjaGVfZnJlZShFd2tfVGlsZV9VbnVzZWRfQ2FjaGUg
KnR1YykKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZV91bnVzZWRfY2FjaGVfZnJlZShFd2tfVGlsZV9V
bnVzZWRfQ2FjaGUqIHRpbGVVbnVzZWRDYWNoZSkKIHsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTih0dWMpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHRpbGVVbnVzZWRD
YWNoZSk7CiAKLSAgICBEQkcoInR1Yz0lcCwgIgorICAgIERCRygidGlsZVVudXNlZENhY2hlPSVw
LCAiCiAgICAgICAgICJlbnRyaWVzPShjb3VudDolemQsIGFsbG9jYXRlZDolemQpLCAiCiAgICAg
ICAgICJtZW1vcnk9KG1heDolemQsIHVzZWQ6JXpkKSIsCi0gICAgICAgIHR1YywgdHVjLT5lbnRy
aWVzLmNvdW50LCB0dWMtPmVudHJpZXMuYWxsb2NhdGVkLAotICAgICAgICB0dWMtPm1lbW9yeS5t
YXgsIHR1Yy0+bWVtb3J5LnVzZWQpOworICAgICAgICB0aWxlVW51c2VkQ2FjaGUsIHRpbGVVbnVz
ZWRDYWNoZS0+ZW50cmllcy5jb3VudCwgdGlsZVVudXNlZENhY2hlLT5lbnRyaWVzLmFsbG9jYXRl
ZCwKKyAgICAgICAgdGlsZVVudXNlZENhY2hlLT5tZW1vcnkubWF4LCB0aWxlVW51c2VkQ2FjaGUt
Pm1lbW9yeS51c2VkKTsKIAotICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9jbGVhcih0dWMpOwot
ICAgIGZyZWUodHVjKTsKKyAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfY2xlYXIodGlsZVVudXNl
ZENhY2hlKTsKKyAgICBmcmVlKHRpbGVVbnVzZWRDYWNoZSk7CiB9CiAKIC8qKgpAQCAtNTg3LDM2
ICs1ODQsMzYgQEAgc3RhdGljIHZvaWQgX2V3a190aWxlX3VudXNlZF9jYWNoZV9mcmVlKEV3a19U
aWxlX1VudXNlZF9DYWNoZSAqdHVjKQogICogQW55IHRpbGVzIHRoYXQgYXJlIGluIHRoZSBjYWNo
ZSBhcmUgZnJlZWQuIFRoZSBvbmx5IHRpbGVzIHRoYXQgYXJlCiAgKiBrZXB0IGFyZSB0aG9zZSB0
aGF0IGFyZW4ndCBpbiB0aGUgY2FjaGUgKGkuZS4gdGhhdCBhcmUgdmlzaWJsZSkuCiAgKi8KLXZv
aWQgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2NsZWFyKEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVj
KQordm9pZCBld2tfdGlsZV91bnVzZWRfY2FjaGVfY2xlYXIoRXdrX1RpbGVfVW51c2VkX0NhY2hl
KiB0aWxlVW51c2VkQ2FjaGUpCiB7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4odHVj
KTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0aWxlVW51c2VkQ2FjaGUpOwogCi0g
ICAgaWYgKCF0dWMtPmVudHJpZXMuY291bnQpCisgICAgaWYgKCF0aWxlVW51c2VkQ2FjaGUtPmVu
dHJpZXMuY291bnQpCiAgICAgICAgIHJldHVybjsKIAogICAgIHZvaWQqIGl0ZW07Ci0gICAgRUlO
QV9MSVNUX0ZSRUUodHVjLT5lbnRyaWVzLmxpc3QsIGl0ZW0pIHsKKyAgICBFSU5BX0xJU1RfRlJF
RSh0aWxlVW51c2VkQ2FjaGUtPmVudHJpZXMubGlzdCwgaXRlbSkgewogICAgICAgICBFd2tfVGls
ZV9VbnVzZWRfQ2FjaGVfRW50cnkqIGl0ciA9IHN0YXRpY19jYXN0PEV3a19UaWxlX1VudXNlZF9D
YWNoZV9FbnRyeSo+KGl0ZW0pOwogICAgICAgICBpdHItPnRpbGVfZnJlZS5jYihpdHItPnRpbGVf
ZnJlZS5kYXRhLCBpdHItPnRpbGUpOwogICAgICAgICBmcmVlKGl0cik7CiAgICAgfQogCi0gICAg
dHVjLT5tZW1vcnkudXNlZCA9IDA7Ci0gICAgdHVjLT5lbnRyaWVzLmNvdW50ID0gMDsKKyAgICB0
aWxlVW51c2VkQ2FjaGUtPm1lbW9yeS51c2VkID0gMDsKKyAgICB0aWxlVW51c2VkQ2FjaGUtPmVu
dHJpZXMuY291bnQgPSAwOwogfQogCiAvKioKLSAqIEhvbGQgcmVmZXJlbmNlIHRvIGNhY2hlLgor
ICogaGVpZ2h0b2xkIHJlZmVyZW5jZSB0byBjYWNoZS4KICAqCiAgKiBAcmV0dXJuIHNhbWUgcG9p
bnRlciBhcyB0YWtlbi4KICAqCiAgKiBAc2VlIGV3a190aWxlX3VudXNlZF9jYWNoZV91bnJlZigp
CiAgKi8KLUV3a19UaWxlX1VudXNlZF9DYWNoZSAqZXdrX3RpbGVfdW51c2VkX2NhY2hlX3JlZihF
d2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YykKK0V3a19UaWxlX1VudXNlZF9DYWNoZSogZXdrX3Rp
bGVfdW51c2VkX2NhY2hlX3JlZihFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHRpbGVVbnVzZWRDYWNo
ZSkKIHsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodHVjLCAwKTsKLSAgICB0
dWMtPnJlZmVyZW5jZXMrKzsKLSAgICByZXR1cm4gdHVjOworICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOX1ZBTCh0aWxlVW51c2VkQ2FjaGUsIDApOworICAgIHRpbGVVbnVzZWRDYWNoZS0+
cmVmZXJlbmNlcysrOworICAgIHJldHVybiB0aWxlVW51c2VkQ2FjaGU7CiB9CiAKIC8qKgpAQCAt
NjI1LDQwICs2MjIsNDAgQEAgRXdrX1RpbGVfVW51c2VkX0NhY2hlICpld2tfdGlsZV91bnVzZWRf
Y2FjaGVfcmVmKEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjKQogICogQHNlZSBld2tfdGlsZV91
bnVzZWRfY2FjaGVfcmVmKCkKICAqIEBzZWUgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2ZyZWUoKQog
ICovCi12b2lkIGV3a190aWxlX3VudXNlZF9jYWNoZV91bnJlZihFd2tfVGlsZV9VbnVzZWRfQ2Fj
aGUgKnR1YykKK3ZvaWQgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3VucmVmKEV3a19UaWxlX1VudXNl
ZF9DYWNoZSogdGlsZVVudXNlZENhY2hlKQogewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOKHR1Yyk7Ci0gICAgdHVjLT5yZWZlcmVuY2VzLS07Ci0gICAgaWYgKCF0dWMtPnJlZmVyZW5j
ZXMpCi0gICAgICAgIF9ld2tfdGlsZV91bnVzZWRfY2FjaGVfZnJlZSh0dWMpOworICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOKHRpbGVVbnVzZWRDYWNoZSk7CisgICAgdGlsZVVudXNlZENh
Y2hlLT5yZWZlcmVuY2VzLS07CisgICAgaWYgKCF0aWxlVW51c2VkQ2FjaGUtPnJlZmVyZW5jZXMp
CisgICAgICAgIF9ld2tfdGlsZV91bnVzZWRfY2FjaGVfZnJlZSh0aWxlVW51c2VkQ2FjaGUpOwog
fQogCi12b2lkIGV3a190aWxlX3VudXNlZF9jYWNoZV9tYXhfc2V0KEV3a19UaWxlX1VudXNlZF9D
YWNoZSAqdHVjLCBzaXplX3QgbWF4KQordm9pZCBld2tfdGlsZV91bnVzZWRfY2FjaGVfbWF4X3Nl
dChFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHRpbGVVbnVzZWRDYWNoZSwgc2l6ZV90IG1heCkKIHsK
LSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0dWMpOwotICAgIHR1Yy0+bWVtb3J5Lm1h
eCA9IG1heDsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0aWxlVW51c2VkQ2FjaGUp
OworICAgIHRpbGVVbnVzZWRDYWNoZS0+bWVtb3J5Lm1heCA9IG1heDsKIH0KIAotc2l6ZV90IGV3
a190aWxlX3VudXNlZF9jYWNoZV9tYXhfZ2V0KGNvbnN0IEV3a19UaWxlX1VudXNlZF9DYWNoZSAq
dHVjKQorc2l6ZV90IGV3a190aWxlX3VudXNlZF9jYWNoZV9tYXhfZ2V0KGNvbnN0IEV3a19UaWxl
X1VudXNlZF9DYWNoZSogdGlsZVVudXNlZENhY2hlKQogewotICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOX1ZBTCh0dWMsIDApOwotICAgIHJldHVybiB0dWMtPm1lbW9yeS5tYXg7CisgICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHRpbGVVbnVzZWRDYWNoZSwgMCk7CisgICAg
cmV0dXJuIHRpbGVVbnVzZWRDYWNoZS0+bWVtb3J5Lm1heDsKIH0KIAotc2l6ZV90IGV3a190aWxl
X3VudXNlZF9jYWNoZV91c2VkX2dldChjb25zdCBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YykK
K3NpemVfdCBld2tfdGlsZV91bnVzZWRfY2FjaGVfdXNlZF9nZXQoY29uc3QgRXdrX1RpbGVfVW51
c2VkX0NhY2hlKiB0aWxlVW51c2VkQ2FjaGUpCiB7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk5fVkFMKHR1YywgMCk7Ci0gICAgcmV0dXJuIHR1Yy0+bWVtb3J5LnVzZWQ7CisgICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHRpbGVVbnVzZWRDYWNoZSwgMCk7CisgICAgcmV0
dXJuIHRpbGVVbnVzZWRDYWNoZS0+bWVtb3J5LnVzZWQ7CiB9CiAKLXNpemVfdCBld2tfdGlsZV91
bnVzZWRfY2FjaGVfZmx1c2goRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMsIHNpemVfdCBieXRl
cykKK3NpemVfdCBld2tfdGlsZV91bnVzZWRfY2FjaGVfZmx1c2goRXdrX1RpbGVfVW51c2VkX0Nh
Y2hlKiB0aWxlVW51c2VkQ2FjaGUsIHNpemVfdCBieXRlcykKIHsKLSAgICBFaW5hX0xpc3QgKmws
ICpsX25leHQ7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHR1YywgMCk7Cisg
ICAgRWluYV9MaXN0KiBsLCAqIGxfbmV4dDsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
Tl9WQUwodGlsZVVudXNlZENhY2hlLCAwKTsKICAgICBzaXplX3QgZG9uZTsKICAgICB1bnNpZ25l
ZCBpbnQgY291bnQ7CiAKLSAgICBpZiAoIXR1Yy0+ZW50cmllcy5jb3VudCkKKyAgICBpZiAoIXRp
bGVVbnVzZWRDYWNoZS0+ZW50cmllcy5jb3VudCkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgaWYg
KGJ5dGVzIDwgMSkKICAgICAgICAgcmV0dXJuIDA7CkBAIC02NzEsNTUgKzY2OCw1NSBAQCBzaXpl
X3QgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2ZsdXNoKEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVj
LCBzaXplX3QgYnl0ZXMpCiAgICAgdm9pZCogaXRlbTsKICAgICBkb25lID0gMDsKICAgICBjb3Vu
dCA9IDA7Ci0gICAgRUlOQV9MSVNUX0ZPUkVBQ0hfU0FGRSh0dWMtPmVudHJpZXMubGlzdCwgbCwg
bF9uZXh0LCBpdGVtKSB7CisgICAgRUlOQV9MSVNUX0ZPUkVBQ0hfU0FGRSh0aWxlVW51c2VkQ2Fj
aGUtPmVudHJpZXMubGlzdCwgbCwgbF9uZXh0LCBpdGVtKSB7CiAgICAgICAgIEV3a19UaWxlX1Vu
dXNlZF9DYWNoZV9FbnRyeSogaXRyID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGVfVW51c2VkX0NhY2hl
X0VudHJ5Kj4oaXRlbSk7Ci0gICAgICAgIEV3a19UaWxlICp0ID0gaXRyLT50aWxlOworICAgICAg
ICBFd2tfVGlsZSogdGlsZSA9IGl0ci0+dGlsZTsKICAgICAgICAgaWYgKGRvbmUgPiBieXRlcykK
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBpZiAodHVjLT5sb2NrZWQubG9ja2VkCi0gICAg
ICAgICAgICAmJiB0LT54ICsgdC0+dyA+IHR1Yy0+bG9ja2VkLngKLSAgICAgICAgICAgICYmIHQt
PnkgKyB0LT5oID4gdHVjLT5sb2NrZWQueQotICAgICAgICAgICAgJiYgdC0+eCA8IHR1Yy0+bG9j
a2VkLnggKyB0dWMtPmxvY2tlZC53Ci0gICAgICAgICAgICAmJiB0LT55IDwgdHVjLT5sb2NrZWQu
eSArIHR1Yy0+bG9ja2VkLmgKLSAgICAgICAgICAgICYmIHQtPnpvb20gPT0gdHVjLT5sb2NrZWQu
em9vbSkgeworICAgICAgICBpZiAodGlsZVVudXNlZENhY2hlLT5sb2NrZWQubG9ja2VkCisgICAg
ICAgICAgICAmJiB0aWxlLT54ICsgdGlsZS0+d2lkdGggPiB0aWxlVW51c2VkQ2FjaGUtPmxvY2tl
ZC54CisgICAgICAgICAgICAmJiB0aWxlLT55ICsgdGlsZS0+aGVpZ2h0ID4gdGlsZVVudXNlZENh
Y2hlLT5sb2NrZWQueQorICAgICAgICAgICAgJiYgdGlsZS0+eCA8IHRpbGVVbnVzZWRDYWNoZS0+
bG9ja2VkLnggKyB0aWxlVW51c2VkQ2FjaGUtPmxvY2tlZC53CisgICAgICAgICAgICAmJiB0aWxl
LT55IDwgdGlsZVVudXNlZENhY2hlLT5sb2NrZWQueSArIHRpbGVVbnVzZWRDYWNoZS0+bG9ja2Vk
LmgKKyAgICAgICAgICAgICYmIHRpbGUtPnpvb20gPT0gdGlsZVVudXNlZENhY2hlLT5sb2NrZWQu
em9vbSkgewogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgZG9uZSAr
PSBzaXplb2YoRXdrX1RpbGUpICsgaXRyLT50aWxlLT5ieXRlczsKICAgICAgICAgaXRyLT50aWxl
X2ZyZWUuY2IoaXRyLT50aWxlX2ZyZWUuZGF0YSwgaXRyLT50aWxlKTsKLSAgICAgICAgdHVjLT5l
bnRyaWVzLmxpc3QgPSBlaW5hX2xpc3RfcmVtb3ZlX2xpc3QodHVjLT5lbnRyaWVzLmxpc3QsIGwp
OworICAgICAgICB0aWxlVW51c2VkQ2FjaGUtPmVudHJpZXMubGlzdCA9IGVpbmFfbGlzdF9yZW1v
dmVfbGlzdCh0aWxlVW51c2VkQ2FjaGUtPmVudHJpZXMubGlzdCwgbCk7CiAgICAgICAgIGZyZWUo
aXRyKTsKICAgICAgICAgY291bnQrKzsKICAgICB9CiAKLSAgICB0dWMtPm1lbW9yeS51c2VkIC09
IGRvbmU7Ci0gICAgdHVjLT5lbnRyaWVzLmNvdW50IC09IGNvdW50OworICAgIHRpbGVVbnVzZWRD
YWNoZS0+bWVtb3J5LnVzZWQgLT0gZG9uZTsKKyAgICB0aWxlVW51c2VkQ2FjaGUtPmVudHJpZXMu
Y291bnQgLT0gY291bnQ7CiAKICAgICByZXR1cm4gZG9uZTsKIH0KIAotdm9pZCBld2tfdGlsZV91
bnVzZWRfY2FjaGVfYXV0b19mbHVzaChFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YykKK3ZvaWQg
ZXdrX3RpbGVfdW51c2VkX2NhY2hlX2F1dG9fZmx1c2goRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0
aWxlVW51c2VkQ2FjaGUpCiB7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4odHVjKTsK
LSAgICBpZiAodHVjLT5tZW1vcnkudXNlZCA8PSB0dWMtPm1lbW9yeS5tYXgpCisgICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk4odGlsZVVudXNlZENhY2hlKTsKKyAgICBpZiAodGlsZVVudXNl
ZENhY2hlLT5tZW1vcnkudXNlZCA8PSB0aWxlVW51c2VkQ2FjaGUtPm1lbW9yeS5tYXgpCiAgICAg
ICAgIHJldHVybjsKLSAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfZmx1c2godHVjLCB0dWMtPm1l
bW9yeS51c2VkIC0gdHVjLT5tZW1vcnkubWF4KTsKLSAgICBpZiAodHVjLT5tZW1vcnkudXNlZCA+
IHR1Yy0+bWVtb3J5Lm1heCkKKyAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfZmx1c2godGlsZVVu
dXNlZENhY2hlLCB0aWxlVW51c2VkQ2FjaGUtPm1lbW9yeS51c2VkIC0gdGlsZVVudXNlZENhY2hl
LT5tZW1vcnkubWF4KTsKKyAgICBpZiAodGlsZVVudXNlZENhY2hlLT5tZW1vcnkudXNlZCA+IHRp
bGVVbnVzZWRDYWNoZS0+bWVtb3J5Lm1heCkKICAgICAgICAgQ1JJVElDQUwoIkNhY2hlIHN0aWxs
IHVzaW5nIHRvbyBtdWNoIG1lbW9yeTogJXpkIEtCOyBtYXg6ICV6ZCBLQiIsCi0gICAgICAgICAg
ICAgICAgIHR1Yy0+bWVtb3J5LnVzZWQsIHR1Yy0+bWVtb3J5Lm1heCk7CisgICAgICAgICAgICAg
ICAgIHRpbGVVbnVzZWRDYWNoZS0+bWVtb3J5LnVzZWQsIHRpbGVVbnVzZWRDYWNoZS0+bWVtb3J5
Lm1heCk7CiB9CiAKIC8qKgogICogRnJlZXplIGNhY2hlIHRvIG5vdCBkbyBtYWludGVuYW5jZSB0
YXNrcy4KICAqCiAgKiBNYWludGVuYW5jZSB0YXNrcyBvcHRpbWl6ZSBjYWNoZSB1c2FnZSwgYnV0
IG1heWJlIHdlIGtub3cgd2Ugc2hvdWxkCi0gKiBob2xkIG9uIHRoZW0gdW50aWwgd2UgZG8gdGhl
IGxhc3Qgb3BlcmF0aW9uLCBpbiB0aGlzIGNhc2Ugd2UgZnJlZXplCisgKiBoZWlnaHRvbGQgb24g
dGhlbSB1bnRpbCB3ZSBkbyB0aGUgbGFzdCBvcGVyYXRpb24sIGluIHRoaXMgY2FzZSB3ZSBmcmVl
emUKICAqIHdoaWxlIG9wZXJhdGluZyBhbmQgdGhlbiB0aGF3IHdoZW4gd2UncmUgZG9uZS4KICAq
CiAgKiBAc2VlIGV3a190aWxlX3VudXNlZF9jYWNoZV90aGF3KCkKICAqLwotdm9pZCBld2tfdGls
ZV91bnVzZWRfY2FjaGVfZnJlZXplKEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjKQordm9pZCBl
d2tfdGlsZV91bnVzZWRfY2FjaGVfZnJlZXplKEV3a19UaWxlX1VudXNlZF9DYWNoZSogdGlsZVVu
dXNlZENhY2hlKQogewotICAgIHR1Yy0+ZnJvemVuKys7CisgICAgdGlsZVVudXNlZENhY2hlLT5m
cm96ZW4rKzsKIH0KIAogLyoqCkBAIC03MjgsMTQgKzcyNSwxNCBAQCB2b2lkIGV3a190aWxlX3Vu
dXNlZF9jYWNoZV9mcmVlemUoRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMpCiAgKiBJZiB0aGlz
IGlzIHRoZSBsYXN0IGNvdW50ZXJwYXJ0IG9mIGZyZWV6ZSwgdGhlbiBtYWludGVuYW5jZSB0YXNr
cwogICogd2lsbCBydW4gaW1tZWRpYXRlbHkuCiAgKi8KLXZvaWQgZXdrX3RpbGVfdW51c2VkX2Nh
Y2hlX3RoYXcoRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMpCit2b2lkIGV3a190aWxlX3VudXNl
ZF9jYWNoZV90aGF3KEV3a19UaWxlX1VudXNlZF9DYWNoZSogdGlsZVVudXNlZENhY2hlKQogewot
ICAgIGlmICghdHVjLT5mcm96ZW4pIHsKKyAgICBpZiAoIXRpbGVVbnVzZWRDYWNoZS0+ZnJvemVu
KSB7CiAgICAgICAgIEVSUigidGhhd2luZyBtb3JlIHRoYW4gZnJlZXppbmchIik7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICB0dWMtPmZyb3plbi0tOworICAgIHRpbGVVbnVzZWRDYWNo
ZS0+ZnJvemVuLS07CiB9CiAKIC8qKgpAQCAtNzQ1LDMyICs3NDIsMzIgQEAgdm9pZCBld2tfdGls
ZV91bnVzZWRfY2FjaGVfdGhhdyhFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YykKICAqIGlzIHJl
bW92ZWQgZnJvbSB0aGUgY2FjaGUgYW5kIG1heSBiZSBnaXZlbiBiYWNrIHdpdGgKICAqIGV3a190
aWxlX3VudXNlZF9jYWNoZV90aWxlX3B1dCgpLgogICoKLSAqIEBwYXJhbSB0dWMgY2FjaGUgb2Yg
dW51c2VkIHRpbGVzCisgKiBAcGFyYW0gdGlsZVVudXNlZENhY2hlIGNhY2hlIG9mIHVudXNlZCB0
aWxlcwogICogQHBhcmFtIHQgdGhlIHRpbGUgdG8gYmUgcmVtb3ZlZCBmcm9tIEV3a19UaWxlX1Vu
dXNlZF9DYWNoZS4KICAqCiAgKiBAcmV0dXJuICNFSU5BX1RSVUUgb24gc3VjY2VzcywgI0VJTkFf
RkFMU0Ugb3RoZXJ3aXNlLgogICovCi1FaW5hX0Jvb2wgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3Rp
bGVfZ2V0KEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjLCBFd2tfVGlsZSAqdCkKK0VpbmFfQm9v
bCBld2tfdGlsZV91bnVzZWRfY2FjaGVfdGlsZV9nZXQoRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0
aWxlVW51c2VkQ2FjaGUsIEV3a19UaWxlKiB0aWxlKQogewotICAgIEVpbmFfTGlzdCAqZSwgKmw7
CisgICAgRWluYV9MaXN0KiBlLCAqIGw7CiAKICAgICB2b2lkKiBpdGVtOwogICAgIGUgPSAwOwot
ICAgIEVJTkFfTElTVF9GT1JFQUNIKHR1Yy0+ZW50cmllcy5saXN0LCBsLCBpdGVtKSB7CisgICAg
RUlOQV9MSVNUX0ZPUkVBQ0godGlsZVVudXNlZENhY2hlLT5lbnRyaWVzLmxpc3QsIGwsIGl0ZW0p
IHsKICAgICAgICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlX0VudHJ5KiBlbnRyeSA9IHN0YXRpY19j
YXN0PEV3a19UaWxlX1VudXNlZF9DYWNoZV9FbnRyeSo+KGl0ZW0pOwotICAgICAgICBpZiAoZW50
cnktPnRpbGUgPT0gdCkgeworICAgICAgICBpZiAoZW50cnktPnRpbGUgPT0gdGlsZSkgewogICAg
ICAgICAgICAgZSA9IGw7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KICAg
ICBpZiAoIWUpIHsKLSAgICAgICAgRVJSKCJ0aWxlICVwIG5vdCBmb3VuZCBpbiBjYWNoZSAlcCIs
IHQsIHR1Yyk7CisgICAgICAgIEVSUigidGlsZSAlcCBub3QgZm91bmQgaW4gY2FjaGUgJXAiLCB0
aWxlLCB0aWxlVW51c2VkQ2FjaGUpOwogICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKICAgICB9
CiAKLSAgICB0dWMtPmVudHJpZXMuY291bnQtLTsKLSAgICB0dWMtPm1lbW9yeS51c2VkIC09IHNp
emVvZihFd2tfVGlsZSkgKyB0LT5ieXRlczsKLSAgICB0dWMtPmVudHJpZXMubGlzdCA9IGVpbmFf
bGlzdF9yZW1vdmVfbGlzdCh0dWMtPmVudHJpZXMubGlzdCwgZSk7CisgICAgdGlsZVVudXNlZENh
Y2hlLT5lbnRyaWVzLmNvdW50LS07CisgICAgdGlsZVVudXNlZENhY2hlLT5tZW1vcnkudXNlZCAt
PSBzaXplb2YoRXdrX1RpbGUpICsgdGlsZS0+Ynl0ZXM7CisgICAgdGlsZVVudXNlZENhY2hlLT5l
bnRyaWVzLmxpc3QgPSBlaW5hX2xpc3RfcmVtb3ZlX2xpc3QodGlsZVVudXNlZENhY2hlLT5lbnRy
aWVzLmxpc3QsIGUpOwogICAgIGZyZWUoaXRlbSk7CiAKICAgICByZXR1cm4gRUlOQV9UUlVFOwpA
QCAtNzc5LDcgKzc3Niw3IEBAIEVpbmFfQm9vbCBld2tfdGlsZV91bnVzZWRfY2FjaGVfdGlsZV9n
ZXQoRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMsIEV3a19UaWxlICp0CiAvKioKICAqIFB1dCB0
aWxlIGludG8gY2FjaGUgb2YgdW51c2VkIHRpbGVzLCBhZGRpbmcgaXQgdG8gdGhlIGNhY2hlLgog
ICoKLSAqIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCB3aGVuIEBjIHQtPnZpc2libGUgaXMgQGMgMCBh
bmQgbm8gb2JqZWN0cyBhcmUKKyAqIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCB3aGVuIEBjIHRpbGUt
PnZpc2libGUgaXMgQGMgMCBhbmQgbm8gb2JqZWN0cyBhcmUKICAqIHVzaW5nIHRoZSB0aWxlIGFu
eW1vcmUsIG1ha2luZyBpdCBhdmFpbGFibGUgdG8gYmUgZXhwaXJlZCBhbmQgaGF2ZQogICogaXRz
IG1lbW9yeSByZXBsYWNlZC4KICAqCkBAIC03ODgsNjAgKzc4NSw2MCBAQCBFaW5hX0Jvb2wgZXdr
X3RpbGVfdW51c2VkX2NhY2hlX3RpbGVfZ2V0KEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjLCBF
d2tfVGlsZSAqdAogICogY2FuIGNhbGwgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2F1dG9fZmx1c2go
KSB0byBmcmVlIHRoZW0uIFRoaXMgaXMgZG9uZQogICogYmVjYXVzZSB1c3VhbGx5IHdlIHdhbnQg
YSBsYXp5IG9wZXJhdGlvbiBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlLgogICoKLSAqIEBwYXJhbSB0
dWMgY2FjaGUgb2YgdW51c2VkIHRpbGVzCisgKiBAcGFyYW0gdGlsZVVudXNlZENhY2hlIGNhY2hl
IG9mIHVudXNlZCB0aWxlcwogICogQHBhcmFtIHQgdGlsZSB0byBiZSBhZGRlZCB0byBjYWNoZS4K
ICAqIEBwYXJhbSB0aWxlX2ZyZWVfY2IgZnVuY3Rpb24gdXNlZCB0byBmcmVlIHRpbGVzLgogICog
QHBhcmFtIGRhdGEgY29udGV4dCB0byBnaXZlIGJhY2sgdG8gQGEgdGlsZV9mcmVlX2NiIGFzIGZp
cnN0IGFyZ3VtZW50LgogICoKLSAqIEByZXR1cm4gI0VJTkFfVFJVRSBvbiBzdWNjZXNzLCAjRUlO
QV9GQUxTRSBvdGhlcndpc2UuIElmIEBjIHQtPnZpc2libGUKKyAqIEByZXR1cm4gI0VJTkFfVFJV
RSBvbiBzdWNjZXNzLCAjRUlOQV9GQUxTRSBvdGhlcndpc2UuIElmIEBjIHRpbGUtPnZpc2libGUK
ICAqICAgICAgICAgaXMgbm90ICNFSU5BX0ZBTFNFLCB0aGVuIGl0IHdpbGwgcmV0dXJuICNFSU5B
X0ZBTFNFLgogICoKICAqIEBzZWUgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2F1dG9fZmx1c2goKQog
ICovCi1FaW5hX0Jvb2wgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3RpbGVfcHV0KEV3a19UaWxlX1Vu
dXNlZF9DYWNoZSAqdHVjLCBFd2tfVGlsZSAqdCwgdm9pZCAoKnRpbGVfZnJlZV9jYikodm9pZCAq
ZGF0YSwgRXdrX1RpbGUgKnQpLCBjb25zdCB2b2lkICpkYXRhKQorRWluYV9Cb29sIGV3a190aWxl
X3VudXNlZF9jYWNoZV90aWxlX3B1dChFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHRpbGVVbnVzZWRD
YWNoZSwgRXdrX1RpbGUqIHRpbGUsIHZvaWQgKCogdGlsZV9mcmVlX2NiKSh2b2lkKiBkYXRhLCBF
d2tfVGlsZSogdGlsZSksIGNvbnN0IHZvaWQqIGRhdGEpCiB7Ci0gICAgRXdrX1RpbGVfVW51c2Vk
X0NhY2hlX0VudHJ5ICplOworICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZV9FbnRyeSogdWNlOwog
Ci0gICAgaWYgKHQtPnZpc2libGUpIHsKLSAgICAgICAgRVJSKCJ0aWxlPSVwIGlzIG5vdCB1bnVz
ZWQgKHZpc2libGU9JWQpIiwgdCwgdC0+dmlzaWJsZSk7CisgICAgaWYgKHRpbGUtPnZpc2libGUp
IHsKKyAgICAgICAgRVJSKCJ0aWxlPSVwIGlzIG5vdCB1bnVzZWQgKHZpc2libGU9JWQpIiwgdGls
ZSwgdGlsZS0+dmlzaWJsZSk7CiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwogICAgIH0KIAot
ICAgIGUgPSBzdGF0aWNfY2FzdDxFd2tfVGlsZV9VbnVzZWRfQ2FjaGVfRW50cnkqPihtYWxsb2Mo
c2l6ZW9mKEV3a19UaWxlX1VudXNlZF9DYWNoZV9FbnRyeSkpKTsKLSAgICBpZiAoIWUpCisgICAg
dWNlID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGVfVW51c2VkX0NhY2hlX0VudHJ5Kj4obWFsbG9jKHNp
emVvZihFd2tfVGlsZV9VbnVzZWRfQ2FjaGVfRW50cnkpKSk7CisgICAgaWYgKCF1Y2UpCiAgICAg
ICAgIHJldHVybiBFSU5BX0ZBTFNFOwogCi0gICAgdHVjLT5lbnRyaWVzLmxpc3QgPSBlaW5hX2xp
c3RfYXBwZW5kKHR1Yy0+ZW50cmllcy5saXN0LCBlKTsKKyAgICB0aWxlVW51c2VkQ2FjaGUtPmVu
dHJpZXMubGlzdCA9IGVpbmFfbGlzdF9hcHBlbmQodGlsZVVudXNlZENhY2hlLT5lbnRyaWVzLmxp
c3QsIHVjZSk7CiAgICAgaWYgKGVpbmFfZXJyb3JfZ2V0KCkpIHsKICAgICAgICAgRVJSKCJMaXN0
IGFsbG9jYXRpb24gZmFpbGVkIik7CiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwogICAgIH0K
IAotICAgIGUtPnRpbGUgPSB0OwotICAgIGUtPndlaWdodCA9IDA7IC8qIGNhbGN1bGF0ZWQganVz
dCBiZWZvcmUgc29ydCAqLwotICAgIGUtPnRpbGVfZnJlZS5jYiA9IHRpbGVfZnJlZV9jYjsKLSAg
ICBlLT50aWxlX2ZyZWUuZGF0YSA9ICh2b2lkICopZGF0YTsKKyAgICB1Y2UtPnRpbGUgPSB0aWxl
OworICAgIHVjZS0+d2VpZ2h0ID0gMDsgLyogY2FsY3VsYXRlZCBqdXN0IGJlZm9yZSBzb3J0ICov
CisgICAgdWNlLT50aWxlX2ZyZWUuY2IgPSB0aWxlX2ZyZWVfY2I7CisgICAgdWNlLT50aWxlX2Zy
ZWUuZGF0YSA9ICh2b2lkKilkYXRhOwogCi0gICAgdHVjLT5lbnRyaWVzLmNvdW50Kys7Ci0gICAg
dHVjLT5tZW1vcnkudXNlZCArPSBzaXplb2YoRXdrX1RpbGUpICsgdC0+Ynl0ZXM7CisgICAgdGls
ZVVudXNlZENhY2hlLT5lbnRyaWVzLmNvdW50Kys7CisgICAgdGlsZVVudXNlZENhY2hlLT5tZW1v
cnkudXNlZCArPSBzaXplb2YoRXdrX1RpbGUpICsgdGlsZS0+Ynl0ZXM7CiAKICAgICByZXR1cm4g
RUlOQV9UUlVFOwogfQogCi12b2lkIGV3a190aWxlX3VudXNlZF9jYWNoZV9kYmcoY29uc3QgRXdr
X1RpbGVfVW51c2VkX0NhY2hlICp0dWMpCit2b2lkIGV3a190aWxlX3VudXNlZF9jYWNoZV9kYmco
Y29uc3QgRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0aWxlVW51c2VkQ2FjaGUpCiB7CiAgICAgdm9p
ZCogaXRlbTsKLSAgICBFaW5hX0xpc3QgKmw7CisgICAgRWluYV9MaXN0KiBsOwogICAgIGludCBj
b3VudCA9IDA7CiAgICAgcHJpbnRmKCJDYWNoZSBvZiB1bnVzZWQgdGlsZXM6IGVudHJpZXM6ICV6
dS8lenUsIG1lbW9yeTogJXp1LyV6dVxuIiwKLSAgICAgICAgICAgdHVjLT5lbnRyaWVzLmNvdW50
LCB0dWMtPmVudHJpZXMuYWxsb2NhdGVkLAotICAgICAgICAgICB0dWMtPm1lbW9yeS51c2VkLCB0
dWMtPm1lbW9yeS5tYXgpOworICAgICAgICAgICB0aWxlVW51c2VkQ2FjaGUtPmVudHJpZXMuY291
bnQsIHRpbGVVbnVzZWRDYWNoZS0+ZW50cmllcy5hbGxvY2F0ZWQsCisgICAgICAgICAgIHRpbGVV
bnVzZWRDYWNoZS0+bWVtb3J5LnVzZWQsIHRpbGVVbnVzZWRDYWNoZS0+bWVtb3J5Lm1heCk7CiAK
LSAgICBFSU5BX0xJU1RfRk9SRUFDSCh0dWMtPmVudHJpZXMubGlzdCwgbCwgaXRlbSkgewotICAg
ICAgICBjb25zdCBFd2tfVGlsZSAqdCA9IHN0YXRpY19jYXN0PEV3a19UaWxlX1VudXNlZF9DYWNo
ZV9FbnRyeSo+KGl0ZW0pLT50aWxlOworICAgIEVJTkFfTElTVF9GT1JFQUNIKHRpbGVVbnVzZWRD
YWNoZS0+ZW50cmllcy5saXN0LCBsLCBpdGVtKSB7CisgICAgICAgIGNvbnN0IEV3a19UaWxlKiB0
aWxlID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGVfVW51c2VkX0NhY2hlX0VudHJ5Kj4oaXRlbSktPnRp
bGU7CiAgICAgICAgIHByaW50ZigiIFslM2x1LCUzbHUgKyAlZHglZCBAICUwLjNmXSVjIiwKLSAg
ICAgICAgICAgICAgIHQtPmNvbCwgdC0+cm93LCB0LT53LCB0LT5oLCB0LT56b29tLAotICAgICAg
ICAgICAgICAgdC0+dmlzaWJsZSA/ICcqJzogJyAnKTsKKyAgICAgICAgICAgICAgIHRpbGUtPmNv
bCwgdGlsZS0+cm93LCB0aWxlLT53aWR0aCwgdGlsZS0+aGVpZ2h0LCB0aWxlLT56b29tLAorICAg
ICAgICAgICAgICAgdGlsZS0+dmlzaWJsZSA/ICcqJyA6ICcgJyk7CiAKICAgICAgICAgaWYgKCEo
Y291bnQgJSA0KSkKICAgICAgICAgICAgIHByaW50ZigiXG4iKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfbW9kZWwuaCBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3
ay9ld2tfdGlsZWRfbW9kZWwuaAppbmRleCBlNjVmMzEwYmUwZWQwMmQ1ZGU4MWY4NWZmOTdiMDk0
NTA2M2U4YWU0Li44NWRlMDE2ODczMTFjNjU2M2VmOGZiMDFlMGYyMDUxYzUyMmI2NGFkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX21vZGVsLmgKKysrIGIvU291
cmNlL1dlYktpdC9lZmwvZXdrL2V3a190aWxlZF9tb2RlbC5oCkBAIC0zNCw3ICszNCw3IEBAIHZv
aWQgZXdrX3RpbGVfaGlkZShFd2tfVGlsZSogdCk7CiBFaW5hX0Jvb2wgZXdrX3RpbGVfdmlzaWJs
ZV9nZXQoRXdrX1RpbGUqIHQpOwogdm9pZCBld2tfdGlsZV91cGRhdGVfZnVsbChFd2tfVGlsZSog
dCk7CiB2b2lkIGV3a190aWxlX3VwZGF0ZV9hcmVhKEV3a19UaWxlKiB0LCBjb25zdCBFaW5hX1Jl
Y3RhbmdsZSogcik7Ci12b2lkIGV3a190aWxlX3VwZGF0ZXNfcHJvY2VzcyhFd2tfVGlsZSogdCwg
dm9pZCAoKiBjYikodm9pZCogZGF0YSwgRXdrX1RpbGUqIHQsIGNvbnN0IEVpbmFfUmVjdGFuZ2xl
KiB1cGRhdGUpLCBjb25zdCB2b2lkKiBkYXRhKTsKK3ZvaWQgZXdrX3RpbGVfdXBkYXRlc19wcm9j
ZXNzKEV3a19UaWxlKiB0LCB2b2lkICgqY2IpKHZvaWQqIGRhdGEsIEV3a19UaWxlKiB0LCBjb25z
dCBFaW5hX1JlY3RhbmdsZSogdXBkYXRlKSwgY29uc3Qgdm9pZCogZGF0YSk7CiB2b2lkIGV3a190
aWxlX3VwZGF0ZXNfY2xlYXIoRXdrX1RpbGUqIHQpOwogCiAvKiBjYWNoZSBvZiB1bnVzZWQgdGls
ZXMgKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5jcHAgYi9T
b3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXcuY3BwCmluZGV4IGRlOGQ4ZDNjYzIwMjEwNDgy
YmE3ZTEzYTViMWFhZmZmNTQ0ZWE4OTYuLmY3ZjJlN2UxZDUwMTE1ZDU3ZTQ0OThlODJiMjhjNzAz
NDg2ZTk0MzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a192aWV3LmNwcApAQCAtMTc3LDQ0ICsxNzcs
NDQgQEAgc3RydWN0IF9Fd2tfVmlld19Qcml2YXRlX0RhdGEgewogfTsKIAogI2lmbmRlZiBFV0tf
VFlQRV9DSEVDSwotI2RlZmluZSBFV0tfVklFV19UWVBFX0NIRUNLKG8sIC4uLikgZG8geyB9IHdo
aWxlICgwKQorI2RlZmluZSBFV0tfVklFV19UWVBFX0NIRUNLKGV3a1ZpZXcsIC4uLikgZG8geyB9
IHdoaWxlICgwKQogI2Vsc2UKLSNkZWZpbmUgRVdLX1ZJRVdfVFlQRV9DSEVDSyhvLCAuLi4pICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyNkZWZpbmUgRVdLX1ZJRVdfVFlQ
RV9DSEVDSyhld2tWaWV3LCAuLi4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKICAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgY29uc3QgY2hhciogX3RtcF9vdHlwZSA9IGV2
YXNfb2JqZWN0X3R5cGVfZ2V0KG8pOyAgICAgICAgICAgICAgIFwKLSAgICAgICAgY29uc3QgRXZh
c19TbWFydCogX3RtcF9zID0gZXZhc19vYmplY3Rfc21hcnRfc21hcnRfZ2V0KG8pOyAgICAgIFwK
KyAgICAgICAgY29uc3QgY2hhciogX3RtcF9vdHlwZSA9IGV2YXNfb2JqZWN0X3R5cGVfZ2V0KGV3
a1ZpZXcpOyAgICAgICAgICAgICAgIFwKKyAgICAgICAgY29uc3QgRXZhc19TbWFydCogX3RtcF9z
ID0gZXZhc19vYmplY3Rfc21hcnRfc21hcnRfZ2V0KGV3a1ZpZXcpOyAgICAgIFwKICAgICAgICAg
aWYgKEVJTkFfVU5MSUtFTFkoIV90bXBfcykpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKICAgICAgICAgICAgIEVJTkFfTE9HX0NSSVQgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAoIiVwICglcykgaXMg
bm90IGEgc21hcnQgb2JqZWN0ISIsIG8sICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAg
ICAgICAoIiVwICglcykgaXMgbm90IGEgc21hcnQgb2JqZWN0ISIsIGV3a1ZpZXcsICAgICAgICAg
ICAgICAgICAgIFwKICAgICAgICAgICAgICAgICBfdG1wX290eXBlID8gX3RtcF9vdHlwZSA6ICIo
bnVsbCkiKTsgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgcmV0dXJuIF9fVkFfQVJH
U19fOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICB9
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAogICAgICAgICBjb25zdCBFdmFzX1NtYXJ0X0NsYXNzKiBfdG1wX3NjID0gZXZhc19z
bWFydF9jbGFzc19nZXQoX3RtcF9zKTsgXAogICAgICAgICBpZiAoRUlOQV9VTkxJS0VMWSghX3Rt
cF9zYykpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAg
RUlOQV9MT0dfQ1JJVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotICAgICAgICAgICAgICAgICgiJXAgKCVzKSBpcyBub3QgYSBzbWFydCBvYmplY3QhIiwg
bywgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICgiJXAgKCVzKSBpcyBub3Qg
YSBzbWFydCBvYmplY3QhIiwgZXdrVmlldywgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAg
ICAgICAgIF90bXBfb3R5cGUgPyBfdG1wX290eXBlIDogIihudWxsKSIpOyAgICAgICAgICAgICAg
ICAgICBcCiAgICAgICAgICAgICByZXR1cm4gX19WQV9BUkdTX187ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIGlmIChF
SU5BX1VOTElLRUxZKF90bXBfc2MtPmRhdGEgIT0gRVdLX1ZJRVdfVFlQRV9TVFIpKSB7ICAgICAg
ICBcCiAgICAgICAgICAgICBFSU5BX0xPR19DUklUICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgKCIlcCAoJXMpIGlzIG5vdCBv
ZiBhbiBld2tfdmlldyAobmVlZCAlcCwgZ290ICVwKSEiLCAgICBcCi0gICAgICAgICAgICAgICAg
bywgX3RtcF9vdHlwZSA/IF90bXBfb3R5cGUgOiAiKG51bGwpIiwgICAgICAgICAgICAgICAgIFwK
KyAgICAgICAgICAgICAgICBld2tWaWV3LCBfdG1wX290eXBlID8gX3RtcF9vdHlwZSA6ICIobnVs
bCkiLCAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgICAgIEVXS19WSUVXX1RZUEVfU1RS
LCBfdG1wX3NjLT5kYXRhKTsgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICByZXR1
cm4gX19WQV9BUkdTX187ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CiAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCiAgICAgfSB3aGlsZSAoMCkKICNlbmRpZgogCi0jZGVmaW5lIEVX
S19WSUVXX1NEX0dFVChvLCBwdHIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
ICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHB0ciA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0
X0RhdGEqPihldmFzX29iamVjdF9zbWFydF9kYXRhX2dldChvKSkKKyNkZWZpbmUgRVdLX1ZJRVdf
U0RfR0VUKGV3a1ZpZXcsIHB0cikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogcHRyID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRf
RGF0YSo+KGV2YXNfb2JqZWN0X3NtYXJ0X2RhdGFfZ2V0KGV3a1ZpZXcpKQogCi0jZGVmaW5lIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgcHRyLCAuLi4pICAgICAgICAgIFwKLSAgICBFV0tf
VklFV19UWVBFX0NIRUNLKG8sIF9fVkFfQVJHU19fKTsgICAgICAgICAgICAgICAgXAotICAgIEVX
S19WSUVXX1NEX0dFVChvLCBwdHIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisjZGVm
aW5lIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgcHRyLCAuLi4pICAgICAgICAg
IFwKKyAgICBFV0tfVklFV19UWVBFX0NIRUNLKGV3a1ZpZXcsIF9fVkFfQVJHU19fKTsgICAgICAg
ICAgICAgICAgXAorICAgIEVXS19WSUVXX1NEX0dFVChld2tWaWV3LCBwdHIpOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCiAgICAgaWYgKCFwdHIpIHsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgQ1JJVElDQUwoIm5vIHNtYXJ0IGRhdGEgZm9y
IG9iamVjdCAlcCAoJXMpIiwgICAgXAotICAgICAgICAgICAgICAgICBvLCBldmFzX29iamVjdF90
eXBlX2dldChvKSk7ICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgIGV3a1ZpZXcsIGV2YXNf
b2JqZWN0X3R5cGVfZ2V0KGV3a1ZpZXcpKTsgICAgICAgICAgIFwKICAgICAgICAgcmV0dXJuIF9f
VkFfQVJHU19fOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIH0KIApAQCAtMjI5
LDEyICsyMjksMTIgQEAgc3RydWN0IF9Fd2tfVmlld19Qcml2YXRlX0RhdGEgewogICAgICAgICBy
ZXR1cm4gX19WQV9BUkdTX187ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
ICAgICB9CiAKLXN0YXRpYyB2b2lkIF9ld2tfdmlld19zbWFydF9jaGFuZ2VkKEV3a19WaWV3X1Nt
YXJ0X0RhdGEqIHNkKQorc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X2NoYW5nZWQoRXdrX1Zp
ZXdfU21hcnRfRGF0YSogc21hcnREYXRhKQogewotICAgIGlmIChzZC0+Y2hhbmdlZC5hbnkpCisg
ICAgaWYgKHNtYXJ0RGF0YS0+Y2hhbmdlZC5hbnkpCiAgICAgICAgIHJldHVybjsKLSAgICBzZC0+
Y2hhbmdlZC5hbnkgPSBFSU5BX1RSVUU7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2hhbmdlZChz
ZC0+c2VsZik7CisgICAgc21hcnREYXRhLT5jaGFuZ2VkLmFueSA9IEVJTkFfVFJVRTsKKyAgICBl
dmFzX29iamVjdF9zbWFydF9jaGFuZ2VkKHNtYXJ0RGF0YS0+c2VsZik7CiB9CiAKIHN0YXRpYyBF
aW5hX0Jvb2wgX2V3a192aWV3X3JlcGFpbnRzX3Jlc2l6ZShFd2tfVmlld19Qcml2YXRlX0RhdGEq
IHByaXYsIHNpemVfdCBzaXplKQpAQCAtMjQ5LDcgKzI0OSw3IEBAIHN0YXRpYyBFaW5hX0Jvb2wg
X2V3a192aWV3X3JlcGFpbnRzX3Jlc2l6ZShFd2tfVmlld19Qcml2YXRlX0RhdGEqIHByaXYsIHNp
emVfdCBzCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotc3RhdGljIHZvaWQgX2V3a192aWV3
X3JlcGFpbnRfYWRkKEV3a19WaWV3X1ByaXZhdGVfRGF0YSogcHJpdiwgRXZhc19Db29yZCB4LCBF
dmFzX0Nvb3JkIHksIEV2YXNfQ29vcmQgdywgRXZhc19Db29yZCBoKQorc3RhdGljIHZvaWQgX2V3
a192aWV3X3JlcGFpbnRfYWRkKEV3a19WaWV3X1ByaXZhdGVfRGF0YSogcHJpdiwgRXZhc19Db29y
ZCB4LCBFdmFzX0Nvb3JkIHksIEV2YXNfQ29vcmQgd2lkdGgsIEV2YXNfQ29vcmQgaGVpZ2h0KQog
ewogICAgIEVpbmFfUmVjdGFuZ2xlKiByOwogCkBAIC0yNjksMTAgKzI2OSwxMCBAQCBzdGF0aWMg
dm9pZCBfZXdrX3ZpZXdfcmVwYWludF9hZGQoRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKiBwcml2LCBF
dmFzX0Nvb3JkIHgsIEV2YQogCiAgICAgci0+eCA9IHg7CiAgICAgci0+eSA9IHk7Ci0gICAgci0+
dyA9IHc7Ci0gICAgci0+aCA9IGg7CisgICAgci0+dyA9IHdpZHRoOworICAgIHItPmggPSBoZWln
aHQ7CiAKLSAgICBEQkcoImFkZCByZXBhaW50ICVkLCAlZCslZHglZCIsIHgsIHksIHcsIGgpOwor
ICAgIERCRygiYWRkIHJlcGFpbnQgJWQsICVkKyVkeCVkIiwgeCwgeSwgd2lkdGgsIGhlaWdodCk7
CiB9CiAKIHN0YXRpYyB2b2lkIF9ld2tfdmlld19yZXBhaW50c19mbHVzaChFd2tfVmlld19Qcml2
YXRlX0RhdGEqIHByaXYpCkBAIC0yOTUsMTYgKzI5NSwxNiBAQCBzdGF0aWMgRWluYV9Cb29sIF9l
d2tfdmlld19zY3JvbGxzX3Jlc2l6ZShFd2tfVmlld19Qcml2YXRlX0RhdGEqIHByaXYsIHNpemVf
dCBzaQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLXN0YXRpYyB2b2lkIF9ld2tfdmlld19z
Y3JvbGxfYWRkKEV3a19WaWV3X1ByaXZhdGVfRGF0YSogcHJpdiwgRXZhc19Db29yZCBkeCwgRXZh
c19Db29yZCBkeSwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHksIEV2YXNfQ29vcmQgdywgRXZh
c19Db29yZCBoLCBFaW5hX0Jvb2wgbWFpbl9zY3JvbGwpCitzdGF0aWMgdm9pZCBfZXdrX3ZpZXdf
c2Nyb2xsX2FkZChFd2tfVmlld19Qcml2YXRlX0RhdGEqIHByaXYsIEV2YXNfQ29vcmQgZHgsIEV2
YXNfQ29vcmQgZHksIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5LCBFdmFzX0Nvb3JkIHdpZHRo
LCBFdmFzX0Nvb3JkIGhlaWdodCwgRWluYV9Cb29sIG1haW5TY3JvbGwpCiB7CiAgICAgRXdrX1Nj
cm9sbF9SZXF1ZXN0KiByOwogICAgIEV3a19TY3JvbGxfUmVxdWVzdCogcl9lbmQ7Ci0gICAgRXZh
c19Db29yZCB4MiA9IHggKyB3LCB5MiA9IHkgKyBoOworICAgIEV2YXNfQ29vcmQgeDIgPSB4ICsg
d2lkdGgsIHkyID0geSArIGhlaWdodDsKIAogICAgIHIgPSBwcml2LT5zY3JvbGxzLmFycmF5Owog
ICAgIHJfZW5kID0gciArIHByaXYtPnNjcm9sbHMuY291bnQ7CiAgICAgZm9yICg7IHIgPCByX2Vu
ZDsgcisrKSB7Ci0gICAgICAgIGlmIChyLT54ID09IHggJiYgci0+eSA9PSB5ICYmIHItPncgPT0g
dyAmJiByLT5oID09IGgpIHsKKyAgICAgICAgaWYgKHItPnggPT0geCAmJiByLT55ID09IHkgJiYg
ci0+dyA9PSB3aWR0aCAmJiByLT5oID09IGhlaWdodCkgewogICAgICAgICAgICAgREJHKCJyZWdp
b24gYWxyZWFkeSBzY3JvbGxlZCAlZCwlZCslZHglZCAlKzAzZCwlKzAzZCBhZGQgIgogICAgICAg
ICAgICAgICAgICIlKzAzZCwlKzAzZCIsCiAgICAgICAgICAgICAgICAgci0+eCwgci0+eSwgci0+
dywgci0+aCwgci0+ZHgsIHItPmR5LCBkeCwgZHkpOwpAQCAtMzM2LDE0ICszMzYsMTQgQEAgc3Rh
dGljIHZvaWQgX2V3a192aWV3X3Njcm9sbF9hZGQoRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKiBwcml2
LCBFdmFzX0Nvb3JkIGR4LCBFdmEKIAogICAgIHItPnggPSB4OwogICAgIHItPnkgPSB5OwotICAg
IHItPncgPSB3OwotICAgIHItPmggPSBoOworICAgIHItPncgPSB3aWR0aDsKKyAgICByLT5oID0g
aGVpZ2h0OwogICAgIHItPngyID0geDI7CiAgICAgci0+eTIgPSB5MjsKICAgICByLT5keCA9IGR4
OwogICAgIHItPmR5ID0gZHk7Ci0gICAgci0+bWFpbl9zY3JvbGwgPSBtYWluX3Njcm9sbDsKLSAg
ICBEQkcoImFkZCBzY3JvbGwgaW4gcmVnaW9uOiAlZCwgJWQrJWR4JWQgJSswM2QsICUrMDNkIiwg
eCwgeSwgdywgaCwgZHgsIGR5KTsKKyAgICByLT5tYWluX3Njcm9sbCA9IG1haW5TY3JvbGw7Cisg
ICAgREJHKCJhZGQgc2Nyb2xsIGluIHJlZ2lvbjogJWQsICVkKyVkeCVkICUrMDNkLCAlKzAzZCIs
IHgsIHksIHdpZHRoLCBoZWlnaHQsIGR4LCBkeSk7CiAKICAgICBFaW5hX1JlY3RhbmdsZSogcHI7
CiAgICAgRWluYV9SZWN0YW5nbGUqIHByX2VuZDsKQEAgLTM2NiwxMSArMzY2LDExIEBAIHN0YXRp
YyB2b2lkIF9ld2tfdmlld19zY3JvbGxzX2ZsdXNoKEV3a19WaWV3X1ByaXZhdGVfRGF0YSogcHJp
dikKIH0KIAogLy8gRGVmYXVsdCBFdmVudCBIYW5kbGluZyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi1zdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19zbWFy
dF9mb2N1c19pbihFd2tfVmlld19TbWFydF9EYXRhKiBzZCkKK3N0YXRpYyBFaW5hX0Jvb2wgX2V3
a192aWV3X3NtYXJ0X2ZvY3VzX2luKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSkKIHsK
LSAgICBFV0tfVklFV19QUklWX0dFVChzZCwgcHJpdik7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVQo
c21hcnREYXRhLCBwcml2KTsKICAgICBXZWJDb3JlOjpGb2N1c0NvbnRyb2xsZXIqIGZjID0gcHJp
di0+cGFnZS0+Zm9jdXNDb250cm9sbGVyKCk7Ci0gICAgREJHKCJvPSVwLCBmYz0lcCIsIHNkLT5z
ZWxmLCBmYyk7CisgICAgREJHKCJld2tWaWV3PSVwLCBmYz0lcCIsIHNtYXJ0RGF0YS0+c2VsZiwg
ZmMpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChmYywgRUlOQV9GQUxTRSk7
CiAKICAgICBmYy0+c2V0QWN0aXZlKHRydWUpOwpAQCAtMzc4LDExICszNzgsMTEgQEAgc3RhdGlj
IEVpbmFfQm9vbCBfZXdrX3ZpZXdfc21hcnRfZm9jdXNfaW4oRXdrX1ZpZXdfU21hcnRfRGF0YSog
c2QpCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotc3RhdGljIEVpbmFfQm9vbCBfZXdrX3Zp
ZXdfc21hcnRfZm9jdXNfb3V0KEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkKQorc3RhdGljIEVpbmFf
Qm9vbCBfZXdrX3ZpZXdfc21hcnRfZm9jdXNfb3V0KEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0
RGF0YSkKIHsKLSAgICBFV0tfVklFV19QUklWX0dFVChzZCwgcHJpdik7CisgICAgRVdLX1ZJRVdf
UFJJVl9HRVQoc21hcnREYXRhLCBwcml2KTsKICAgICBXZWJDb3JlOjpGb2N1c0NvbnRyb2xsZXIq
IGZjID0gcHJpdi0+cGFnZS0+Zm9jdXNDb250cm9sbGVyKCk7Ci0gICAgREJHKCJvPSVwLCBmYz0l
cCIsIHNkLT5zZWxmLCBmYyk7CisgICAgREJHKCJld2tWaWV3PSVwLCBmYz0lcCIsIHNtYXJ0RGF0
YS0+c2VsZiwgZmMpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChmYywgRUlO
QV9GQUxTRSk7CiAKICAgICBmYy0+c2V0QWN0aXZlKGZhbHNlKTsKQEAgLTM5MCw3MSArMzkwLDcx
IEBAIHN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3NtYXJ0X2ZvY3VzX291dChFd2tfVmlld19T
bWFydF9EYXRhKiBzZCkKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi1zdGF0aWMgRWluYV9C
b29sIF9ld2tfdmlld19zbWFydF9tb3VzZV93aGVlbChFd2tfVmlld19TbWFydF9EYXRhKiBzZCwg
Y29uc3QgRXZhc19FdmVudF9Nb3VzZV9XaGVlbCogZXYpCitzdGF0aWMgRWluYV9Cb29sIF9ld2tf
dmlld19zbWFydF9tb3VzZV93aGVlbChFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEsIGNv
bnN0IEV2YXNfRXZlbnRfTW91c2VfV2hlZWwqIHdoZWVsRXZlbnQpCiB7Ci0gICAgcmV0dXJuIGV3
a19mcmFtZV9mZWVkX21vdXNlX3doZWVsKHNkLT5tYWluX2ZyYW1lLCBldik7CisgICAgcmV0dXJu
IGV3a19mcmFtZV9mZWVkX21vdXNlX3doZWVsKHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSwgd2hlZWxF
dmVudCk7CiB9CiAKLXN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3NtYXJ0X21vdXNlX2Rvd24o
RXdrX1ZpZXdfU21hcnRfRGF0YSogc2QsIGNvbnN0IEV2YXNfRXZlbnRfTW91c2VfRG93biogZXYp
CitzdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19zbWFydF9tb3VzZV9kb3duKEV3a19WaWV3X1Nt
YXJ0X0RhdGEqIHNtYXJ0RGF0YSwgY29uc3QgRXZhc19FdmVudF9Nb3VzZV9Eb3duKiBkb3duRXZl
bnQpCiB7Ci0gICAgcmV0dXJuIGV3a19mcmFtZV9mZWVkX21vdXNlX2Rvd24oc2QtPm1haW5fZnJh
bWUsIGV2KTsKKyAgICByZXR1cm4gZXdrX2ZyYW1lX2ZlZWRfbW91c2VfZG93bihzbWFydERhdGEt
Pm1haW5fZnJhbWUsIGRvd25FdmVudCk7CiB9CiAKLXN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3
X3NtYXJ0X21vdXNlX3VwKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkLCBjb25zdCBFdmFzX0V2ZW50
X01vdXNlX1VwKiBldikKK3N0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3NtYXJ0X21vdXNlX3Vw
KEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSwgY29uc3QgRXZhc19FdmVudF9Nb3VzZV9V
cCogdXBFdmVudCkKIHsKLSAgICByZXR1cm4gZXdrX2ZyYW1lX2ZlZWRfbW91c2VfdXAoc2QtPm1h
aW5fZnJhbWUsIGV2KTsKKyAgICByZXR1cm4gZXdrX2ZyYW1lX2ZlZWRfbW91c2VfdXAoc21hcnRE
YXRhLT5tYWluX2ZyYW1lLCB1cEV2ZW50KTsKIH0KIAotc3RhdGljIEVpbmFfQm9vbCBfZXdrX3Zp
ZXdfc21hcnRfbW91c2VfbW92ZShFd2tfVmlld19TbWFydF9EYXRhKiBzZCwgY29uc3QgRXZhc19F
dmVudF9Nb3VzZV9Nb3ZlKiBldikKK3N0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3NtYXJ0X21v
dXNlX21vdmUoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhLCBjb25zdCBFdmFzX0V2ZW50
X01vdXNlX01vdmUqIG1vdmVFdmVudCkKIHsKLSAgICByZXR1cm4gZXdrX2ZyYW1lX2ZlZWRfbW91
c2VfbW92ZShzZC0+bWFpbl9mcmFtZSwgZXYpOworICAgIHJldHVybiBld2tfZnJhbWVfZmVlZF9t
b3VzZV9tb3ZlKHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSwgbW92ZUV2ZW50KTsKIH0KIAotc3RhdGlj
IEVpbmFfQm9vbCBfZXdrX3ZpZXdfc21hcnRfa2V5X2Rvd24oRXdrX1ZpZXdfU21hcnRfRGF0YSog
c2QsIGNvbnN0IEV2YXNfRXZlbnRfS2V5X0Rvd24qIGV2KQorc3RhdGljIEVpbmFfQm9vbCBfZXdr
X3ZpZXdfc21hcnRfa2V5X2Rvd24oRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhLCBjb25z
dCBFdmFzX0V2ZW50X0tleV9Eb3duKiBkb3duRXZlbnQpCiB7Ci0gICAgRXZhc19PYmplY3QqIGZy
YW1lID0gZXdrX3ZpZXdfZnJhbWVfZm9jdXNlZF9nZXQoc2QtPnNlbGYpOworICAgIEV2YXNfT2Jq
ZWN0KiBmcmFtZSA9IGV3a192aWV3X2ZyYW1lX2ZvY3VzZWRfZ2V0KHNtYXJ0RGF0YS0+c2VsZik7
CiAKICAgICBpZiAoIWZyYW1lKQotICAgICAgICBmcmFtZSA9IHNkLT5tYWluX2ZyYW1lOworICAg
ICAgICBmcmFtZSA9IHNtYXJ0RGF0YS0+bWFpbl9mcmFtZTsKIAotICAgIHJldHVybiBld2tfZnJh
bWVfZmVlZF9rZXlfZG93bihmcmFtZSwgZXYpOworICAgIHJldHVybiBld2tfZnJhbWVfZmVlZF9r
ZXlfZG93bihmcmFtZSwgZG93bkV2ZW50KTsKIH0KIAotc3RhdGljIEVpbmFfQm9vbCBfZXdrX3Zp
ZXdfc21hcnRfa2V5X3VwKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkLCBjb25zdCBFdmFzX0V2ZW50
X0tleV9VcCogZXYpCitzdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19zbWFydF9rZXlfdXAoRXdr
X1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhLCBjb25zdCBFdmFzX0V2ZW50X0tleV9VcCogdXBF
dmVudCkKIHsKLSAgICBFdmFzX09iamVjdCogZnJhbWUgPSBld2tfdmlld19mcmFtZV9mb2N1c2Vk
X2dldChzZC0+c2VsZik7CisgICAgRXZhc19PYmplY3QqIGZyYW1lID0gZXdrX3ZpZXdfZnJhbWVf
Zm9jdXNlZF9nZXQoc21hcnREYXRhLT5zZWxmKTsKIAogICAgIGlmICghZnJhbWUpCi0gICAgICAg
IGZyYW1lID0gc2QtPm1haW5fZnJhbWU7CisgICAgICAgIGZyYW1lID0gc21hcnREYXRhLT5tYWlu
X2ZyYW1lOwogCi0gICAgcmV0dXJuIGV3a19mcmFtZV9mZWVkX2tleV91cChmcmFtZSwgZXYpOwor
ICAgIHJldHVybiBld2tfZnJhbWVfZmVlZF9rZXlfdXAoZnJhbWUsIHVwRXZlbnQpOwogfQogCi1z
dGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21hcnRfYWRkX2NvbnNvbGVfbWVzc2FnZShFd2tfVmlld19T
bWFydF9EYXRhKiBzZCwgY29uc3QgY2hhciogbWVzc2FnZSwgdW5zaWduZWQgaW50IGxpbmVOdW1i
ZXIsIGNvbnN0IGNoYXIqIHNvdXJjZUlEKQorc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X2Fk
ZF9jb25zb2xlX21lc3NhZ2UoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhLCBjb25zdCBj
aGFyKiBtZXNzYWdlLCB1bnNpZ25lZCBpbnQgbGluZU51bWJlciwgY29uc3QgY2hhciogc291cmNl
SUQpCiB7CiAgICAgSU5GKCJjb25zb2xlIG1lc3NhZ2U6ICVzIEAlZDogJXNcbiIsIHNvdXJjZUlE
LCBsaW5lTnVtYmVyLCBtZXNzYWdlKTsKIH0KIAotc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0
X3J1bl9qYXZhc2NyaXB0X2FsZXJ0KEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkLCBFdmFzX09iamVj
dCogZnJhbWUsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpCitzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21h
cnRfcnVuX2phdmFzY3JpcHRfYWxlcnQoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhLCBF
dmFzX09iamVjdCogZnJhbWUsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpCiB7CiAgICAgSU5GKCJqYXZh
c2NyaXB0IGFsZXJ0OiAlc1xuIiwgbWVzc2FnZSk7CiB9CiAKLXN0YXRpYyBFaW5hX0Jvb2wgX2V3
a192aWV3X3NtYXJ0X3J1bl9qYXZhc2NyaXB0X2NvbmZpcm0oRXdrX1ZpZXdfU21hcnRfRGF0YSog
c2QsIEV2YXNfT2JqZWN0KiBmcmFtZSwgY29uc3QgY2hhciogbWVzc2FnZSkKK3N0YXRpYyBFaW5h
X0Jvb2wgX2V3a192aWV3X3NtYXJ0X3J1bl9qYXZhc2NyaXB0X2NvbmZpcm0oRXdrX1ZpZXdfU21h
cnRfRGF0YSogc21hcnREYXRhLCBFdmFzX09iamVjdCogZnJhbWUsIGNvbnN0IGNoYXIqIG1lc3Nh
Z2UpCiB7CiAgICAgSU5GKCJqYXZhc2NyaXB0IGNvbmZpcm06ICVzIiwgbWVzc2FnZSk7CiAgICAg
SU5GKCJqYXZhc2NyaXB0IGNvbmZpcm0gKEhBUkQgQ09ERUQpPyBZRVMiKTsKICAgICByZXR1cm4g
RUlOQV9UUlVFOwogfQogCi1zdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19zbWFydF9zaG91bGRf
aW50ZXJydXB0X2phdmFzY3JpcHQoRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QpCitzdGF0aWMgRWlu
YV9Cb29sIF9ld2tfdmlld19zbWFydF9zaG91bGRfaW50ZXJydXB0X2phdmFzY3JpcHQoRXdrX1Zp
ZXdfU21hcnRfRGF0YSogc21hcnREYXRhKQogewogICAgIElORigic2hvdWxkIGludGVycnVwdCBq
YXZhc2NyaXB0P1xuIgogICAgICAgICAiXHQoSEFSRCBDT0RFRCkgTk8iKTsKICAgICByZXR1cm4g
RUlOQV9GQUxTRTsKIH0KIAotc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfc21hcnRfcnVuX2ph
dmFzY3JpcHRfcHJvbXB0KEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkLCBFdmFzX09iamVjdCogZnJh
bWUsIGNvbnN0IGNoYXIqIG1lc3NhZ2UsIGNvbnN0IGNoYXIqIGRlZmF1bHRWYWx1ZSwgY2hhcioq
IHZhbHVlKQorc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfc21hcnRfcnVuX2phdmFzY3JpcHRf
cHJvbXB0KEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSwgRXZhc19PYmplY3QqIGZyYW1l
LCBjb25zdCBjaGFyKiBtZXNzYWdlLCBjb25zdCBjaGFyKiBkZWZhdWx0VmFsdWUsIGNoYXIqKiB2
YWx1ZSkKIHsKICAgICAqdmFsdWUgPSBzdHJkdXAoInRlc3QiKTsKICAgICBFaW5hX0Jvb2wgcmV0
ID0gRUlOQV9UUlVFOwpAQCAtNDY4LDcgKzQ2OCw3IEBAIHN0YXRpYyBFaW5hX0Jvb2wgX2V3a192
aWV3X3NtYXJ0X3J1bl9qYXZhc2NyaXB0X3Byb21wdChFd2tfVmlld19TbWFydF9EYXRhKiBzZCwK
IH0KIAogLy8gRXZlbnQgSGFuZGxpbmcgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vCi1zdGF0aWMgdm9pZCBfZXdrX3ZpZXdfb25fZm9jdXNfaW4o
dm9pZCogZGF0YSwgRXZhcyogZSwgRXZhc19PYmplY3QqIG8sIHZvaWQqIGV2ZW50X2luZm8pCitz
dGF0aWMgdm9pZCBfZXdrX3ZpZXdfb25fZm9jdXNfaW4odm9pZCogZGF0YSwgRXZhcyogZXZlbnRU
eXBlLCBFdmFzX09iamVjdCogY2FsbGJhY2ssIHZvaWQqIGV2ZW50SW5mbykKIHsKICAgICBFd2tf
Vmlld19TbWFydF9EYXRhKiBzZCA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihk
YXRhKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpKTsKQEAgLTQ3Niw3
ICs0NzYsNyBAQCBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfb25fZm9jdXNfaW4odm9pZCogZGF0YSwg
RXZhcyogZSwgRXZhc19PYmplY3QqIG8sIHZvaWQqIGV2ZQogICAgIHNkLT5hcGktPmZvY3VzX2lu
KHNkKTsKIH0KIAotc3RhdGljIHZvaWQgX2V3a192aWV3X29uX2ZvY3VzX291dCh2b2lkKiBkYXRh
LCBFdmFzKiBlLCBFdmFzX09iamVjdCogbywgdm9pZCogZXZlbnRfaW5mbykKK3N0YXRpYyB2b2lk
IF9ld2tfdmlld19vbl9mb2N1c19vdXQodm9pZCogZGF0YSwgRXZhcyogZXZlbnRUeXBlLCBFdmFz
X09iamVjdCogY2FsbGJhY2ssIHZvaWQqIGV2ZW50SW5mbykKIHsKICAgICBFd2tfVmlld19TbWFy
dF9EYXRhKiBzZCA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihkYXRhKTsKICAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpKTsKQEAgLTQ4NCw2MyArNDg0LDYz
IEBAIHN0YXRpYyB2b2lkIF9ld2tfdmlld19vbl9mb2N1c19vdXQodm9pZCogZGF0YSwgRXZhcyog
ZSwgRXZhc19PYmplY3QqIG8sIHZvaWQqIGV2CiAgICAgc2QtPmFwaS0+Zm9jdXNfb3V0KHNkKTsK
IH0KIAotc3RhdGljIHZvaWQgX2V3a192aWV3X29uX21vdXNlX3doZWVsKHZvaWQqIGRhdGEsIEV2
YXMqIGUsIEV2YXNfT2JqZWN0KiBvLCB2b2lkKiBldmVudF9pbmZvKQorc3RhdGljIHZvaWQgX2V3
a192aWV3X29uX21vdXNlX3doZWVsKHZvaWQqIGRhdGEsIEV2YXMqIGV2ZW50VHlwZSwgRXZhc19P
YmplY3QqIGNhbGxiYWNrLCB2b2lkKiBldmVudEluZm8pCiB7Ci0gICAgRXZhc19FdmVudF9Nb3Vz
ZV9XaGVlbCogZXYgPSBzdGF0aWNfY2FzdDxFdmFzX0V2ZW50X01vdXNlX1doZWVsKj4oZXZlbnRf
aW5mbyk7CisgICAgRXZhc19FdmVudF9Nb3VzZV9XaGVlbCogZXYgPSBzdGF0aWNfY2FzdDxFdmFz
X0V2ZW50X01vdXNlX1doZWVsKj4oZXZlbnRJbmZvKTsKICAgICBFd2tfVmlld19TbWFydF9EYXRh
KiBzZCA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihkYXRhKTsKICAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTihzZC0+YXBpLT5tb3VzZV93aGVlbCk7CiAgICAgc2QtPmFwaS0+bW91c2Vfd2hlZWwo
c2QsIGV2KTsKIH0KIAotc3RhdGljIHZvaWQgX2V3a192aWV3X29uX21vdXNlX2Rvd24odm9pZCog
ZGF0YSwgRXZhcyogZSwgRXZhc19PYmplY3QqIG8sIHZvaWQqIGV2ZW50X2luZm8pCitzdGF0aWMg
dm9pZCBfZXdrX3ZpZXdfb25fbW91c2VfZG93bih2b2lkKiBkYXRhLCBFdmFzKiBldmVudFR5cGUs
IEV2YXNfT2JqZWN0KiBjYWxsYmFjaywgdm9pZCogZXZlbnRJbmZvKQogewotICAgIEV2YXNfRXZl
bnRfTW91c2VfRG93biogZXYgPSBzdGF0aWNfY2FzdDxFdmFzX0V2ZW50X01vdXNlX0Rvd24qPihl
dmVudF9pbmZvKTsKKyAgICBFdmFzX0V2ZW50X01vdXNlX0Rvd24qIGV2ID0gc3RhdGljX2Nhc3Q8
RXZhc19FdmVudF9Nb3VzZV9Eb3duKj4oZXZlbnRJbmZvKTsKICAgICBFd2tfVmlld19TbWFydF9E
YXRhKiBzZCA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihkYXRhKTsKICAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpKTsKICAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTihzZC0+YXBpLT5tb3VzZV9kb3duKTsKICAgICBzZC0+YXBpLT5tb3VzZV9kb3du
KHNkLCBldik7CiB9CiAKLXN0YXRpYyB2b2lkIF9ld2tfdmlld19vbl9tb3VzZV91cCh2b2lkKiBk
YXRhLCBFdmFzKiBlLCBFdmFzX09iamVjdCogbywgdm9pZCogZXZlbnRfaW5mbykKK3N0YXRpYyB2
b2lkIF9ld2tfdmlld19vbl9tb3VzZV91cCh2b2lkKiBkYXRhLCBFdmFzKiBldmVudFR5cGUsIEV2
YXNfT2JqZWN0KiBjYWxsYmFjaywgdm9pZCogZXZlbnRJbmZvKQogewotICAgIEV2YXNfRXZlbnRf
TW91c2VfVXAqIGV2ID0gc3RhdGljX2Nhc3Q8RXZhc19FdmVudF9Nb3VzZV9VcCo+KGV2ZW50X2lu
Zm8pOworICAgIEV2YXNfRXZlbnRfTW91c2VfVXAqIGV2ID0gc3RhdGljX2Nhc3Q8RXZhc19FdmVu
dF9Nb3VzZV9VcCo+KGV2ZW50SW5mbyk7CiAgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QgPSBz
dGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZGF0YSk7CiAgICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk4oc2QtPmFwaSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4o
c2QtPmFwaS0+bW91c2VfdXApOwogICAgIHNkLT5hcGktPm1vdXNlX3VwKHNkLCBldik7CiB9CiAK
LXN0YXRpYyB2b2lkIF9ld2tfdmlld19vbl9tb3VzZV9tb3ZlKHZvaWQqIGRhdGEsIEV2YXMqIGUs
IEV2YXNfT2JqZWN0KiBvLCB2b2lkKiBldmVudF9pbmZvKQorc3RhdGljIHZvaWQgX2V3a192aWV3
X29uX21vdXNlX21vdmUodm9pZCogZGF0YSwgRXZhcyogZXZlbnRUeXBlLCBFdmFzX09iamVjdCog
Y2FsbGJhY2ssIHZvaWQqIGV2ZW50SW5mbykKIHsKLSAgICBFdmFzX0V2ZW50X01vdXNlX01vdmUq
IGV2ID0gc3RhdGljX2Nhc3Q8RXZhc19FdmVudF9Nb3VzZV9Nb3ZlKj4oZXZlbnRfaW5mbyk7Cisg
ICAgRXZhc19FdmVudF9Nb3VzZV9Nb3ZlKiBldiA9IHN0YXRpY19jYXN0PEV2YXNfRXZlbnRfTW91
c2VfTW92ZSo+KGV2ZW50SW5mbyk7CiAgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QgPSBzdGF0
aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZGF0YSk7CiAgICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk4oc2QtPmFwaSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2Qt
PmFwaS0+bW91c2VfbW92ZSk7CiAgICAgc2QtPmFwaS0+bW91c2VfbW92ZShzZCwgZXYpOwogfQog
Ci1zdGF0aWMgdm9pZCBfZXdrX3ZpZXdfb25fa2V5X2Rvd24odm9pZCogZGF0YSwgRXZhcyogZSwg
RXZhc19PYmplY3QqIG8sIHZvaWQqIGV2ZW50X2luZm8pCitzdGF0aWMgdm9pZCBfZXdrX3ZpZXdf
b25fa2V5X2Rvd24odm9pZCogZGF0YSwgRXZhcyogZXZlbnRUeXBlLCBFdmFzX09iamVjdCogY2Fs
bGJhY2ssIHZvaWQqIGV2ZW50SW5mbykKIHsKLSAgICBFdmFzX0V2ZW50X0tleV9Eb3duKiBldiA9
IHN0YXRpY19jYXN0PEV2YXNfRXZlbnRfS2V5X0Rvd24qPihldmVudF9pbmZvKTsKKyAgICBFdmFz
X0V2ZW50X0tleV9Eb3duKiBldiA9IHN0YXRpY19jYXN0PEV2YXNfRXZlbnRfS2V5X0Rvd24qPihl
dmVudEluZm8pOwogICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0gc3RhdGljX2Nhc3Q8RXdr
X1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJO
KHNkLT5hcGkpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGktPmtleV9k
b3duKTsKICAgICBzZC0+YXBpLT5rZXlfZG93bihzZCwgZXYpOwogfQogCi1zdGF0aWMgdm9pZCBf
ZXdrX3ZpZXdfb25fa2V5X3VwKHZvaWQqIGRhdGEsIEV2YXMqIGUsIEV2YXNfT2JqZWN0KiBvLCB2
b2lkKiBldmVudF9pbmZvKQorc3RhdGljIHZvaWQgX2V3a192aWV3X29uX2tleV91cCh2b2lkKiBk
YXRhLCBFdmFzKiBldmVudFR5cGUsIEV2YXNfT2JqZWN0KiBjYWxsYmFjaywgdm9pZCogZXZlbnRJ
bmZvKQogewotICAgIEV2YXNfRXZlbnRfS2V5X1VwKiBldiA9IHN0YXRpY19jYXN0PEV2YXNfRXZl
bnRfS2V5X1VwKj4oZXZlbnRfaW5mbyk7CisgICAgRXZhc19FdmVudF9LZXlfVXAqIGV2ID0gc3Rh
dGljX2Nhc3Q8RXZhc19FdmVudF9LZXlfVXAqPihldmVudEluZm8pOwogICAgIEV3a19WaWV3X1Nt
YXJ0X0RhdGEqIHNkID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEpOwog
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGkpOwogICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOKHNkLT5hcGktPmtleV91cCk7CiAgICAgc2QtPmFwaS0+a2V5X3VwKHNk
LCBldik7CiB9CiAKLXN0YXRpYyBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6RnJhbWU+IF9ld2tf
dmlld19jb3JlX2ZyYW1lX25ldyhFd2tfVmlld19TbWFydF9EYXRhKiBzZCwgRXdrX1ZpZXdfUHJp
dmF0ZV9EYXRhKiBwcml2LCBXZWJDb3JlOjpIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVyKQor
c3RhdGljIFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpGcmFtZT4gX2V3a192aWV3X2NvcmVfZnJh
bWVfbmV3KEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSwgRXdrX1ZpZXdfUHJpdmF0ZV9E
YXRhKiBwcml2LCBXZWJDb3JlOjpIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVyKQogewotICAg
IFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50RWZsKiBmbGMgPSBuZXcgV2ViQ29yZTo6RnJhbWVM
b2FkZXJDbGllbnRFZmwoc2QtPnNlbGYpOworICAgIFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50
RWZsKiBmbGMgPSBuZXcgV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRFZmwoc21hcnREYXRhLT5z
ZWxmKTsKICAgICBpZiAoIWZsYykgewogICAgICAgICBDUklUSUNBTCgiQ291bGQgbm90IGNyZWF0
ZSBmcmFtZSBsb2FkZXIgY2xpZW50LiIpOwogICAgICAgICByZXR1cm4gMDsKQEAgLTU1Miw3ICs1
NTIsNyBAQCBzdGF0aWMgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkZyYW1lPiBfZXdrX3ZpZXdf
Y29yZV9mcmFtZV9uZXcoRXdrX1ZpZXdfU21hcnRfRAogCiBzdGF0aWMgRXZhc19TbWFydF9DbGFz
cyBfcGFyZW50X3NjID0gRVZBU19TTUFSVF9DTEFTU19JTklUX05VTEw7CiAKLXN0YXRpYyBFd2tf
Vmlld19Qcml2YXRlX0RhdGEqIF9ld2tfdmlld19wcml2X25ldyhFd2tfVmlld19TbWFydF9EYXRh
KiBzZCkKK3N0YXRpYyBFd2tfVmlld19Qcml2YXRlX0RhdGEqIF9ld2tfdmlld19wcml2X25ldyhF
d2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEpCiB7CiAgICAgRXdrX1ZpZXdfUHJpdmF0ZV9E
YXRhKiBwcml2ID0KICAgICAgICAgc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKj4o
Y2FsbG9jKDEsIHNpemVvZihFd2tfVmlld19Qcml2YXRlX0RhdGEpKSk7CkBAIC01NjUsOCArNTY1
LDggQEAgc3RhdGljIEV3a19WaWV3X1ByaXZhdGVfRGF0YSogX2V3a192aWV3X3ByaXZfbmV3KEV3
a19WaWV3X1NtYXJ0X0RhdGEqIHNkKQogICAgIH0KIAogICAgIFdlYkNvcmU6OlBhZ2U6OlBhZ2VD
bGllbnRzIHBhZ2VDbGllbnRzOwotICAgIHBhZ2VDbGllbnRzLmNocm9tZUNsaWVudCA9IHN0YXRp
Y19jYXN0PFdlYkNvcmU6OkNocm9tZUNsaWVudCo+KG5ldyBXZWJDb3JlOjpDaHJvbWVDbGllbnRF
Zmwoc2QtPnNlbGYpKTsKLSAgICBwYWdlQ2xpZW50cy5lZGl0b3JDbGllbnQgPSBzdGF0aWNfY2Fz
dDxXZWJDb3JlOjpFZGl0b3JDbGllbnQqPihuZXcgV2ViQ29yZTo6RWRpdG9yQ2xpZW50RWZsKHNk
LT5zZWxmKSk7CisgICAgcGFnZUNsaWVudHMuY2hyb21lQ2xpZW50ID0gc3RhdGljX2Nhc3Q8V2Vi
Q29yZTo6Q2hyb21lQ2xpZW50Kj4obmV3IFdlYkNvcmU6OkNocm9tZUNsaWVudEVmbChzbWFydERh
dGEtPnNlbGYpKTsKKyAgICBwYWdlQ2xpZW50cy5lZGl0b3JDbGllbnQgPSBzdGF0aWNfY2FzdDxX
ZWJDb3JlOjpFZGl0b3JDbGllbnQqPihuZXcgV2ViQ29yZTo6RWRpdG9yQ2xpZW50RWZsKHNtYXJ0
RGF0YS0+c2VsZikpOwogICAgIHBhZ2VDbGllbnRzLmRyYWdDbGllbnQgPSBzdGF0aWNfY2FzdDxX
ZWJDb3JlOjpEcmFnQ2xpZW50Kj4obmV3IFdlYkNvcmU6OkRyYWdDbGllbnRFZmwpOwogICAgIHBh
Z2VDbGllbnRzLmluc3BlY3RvckNsaWVudCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6Okluc3BlY3Rv
ckNsaWVudCo+KG5ldyBXZWJDb3JlOjpJbnNwZWN0b3JDbGllbnRFZmwpOwogI2lmIEVOQUJMRShE
RVZJQ0VfT1JJRU5UQVRJT04pCkBAIC01OTQsOCArNTk0LDggQEAgc3RhdGljIEV3a19WaWV3X1By
aXZhdGVfRGF0YSogX2V3a192aWV3X3ByaXZfbmV3KEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkKQog
ICAgIHByaXYtPnZpZXdwb3J0X2FyZ3VtZW50cy51c2VyU2NhbGFibGUgPSBFSU5BX1RSVUU7CiAK
ICAgICBwcml2LT5wYWdlX3NldHRpbmdzLT5zZXRMb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkodHJ1
ZSk7Ci0gICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0RGVmYXVsdEZpeGVkRm9udFNpemUoMTIp
OwotICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNldERlZmF1bHRGb250U2l6ZSgxNik7CisgICAg
cHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0RGVmYXVsdEZpeGVkRm9udFNpemUoMTApOworICAgIHBy
aXYtPnBhZ2Vfc2V0dGluZ3MtPnNldERlZmF1bHRGb250U2l6ZSgxMyk7CiAgICAgcHJpdi0+cGFn
ZV9zZXR0aW5ncy0+c2V0U2VyaWZGb250RmFtaWx5KCJzZXJpZiIpOwogICAgIHByaXYtPnBhZ2Vf
c2V0dGluZ3MtPnNldEZpeGVkRm9udEZhbWlseSgibW9ub3R5cGUiKTsKICAgICBwcml2LT5wYWdl
X3NldHRpbmdzLT5zZXRTYW5zU2VyaWZGb250RmFtaWx5KCJzYW5zIik7CkBAIC02NjUsNyArNjY1
LDcgQEAgc3RhdGljIEV3a19WaWV3X1ByaXZhdGVfRGF0YSogX2V3a192aWV3X3ByaXZfbmV3KEV3
a19WaWV3X1NtYXJ0X0RhdGEqIHNkKQogCiAgICAgcHJpdi0+c2V0dGluZ3MuZG9tX3RpbWVyX2lu
dGVydmFsID0gcHJpdi0+cGFnZV9zZXR0aW5ncy0+ZGVmYXVsdE1pbkRPTVRpbWVySW50ZXJ2YWwo
KTsKIAotICAgIHByaXYtPm1haW5fZnJhbWUgPSBfZXdrX3ZpZXdfY29yZV9mcmFtZV9uZXcoc2Qs
IHByaXYsIDApLmdldCgpOworICAgIHByaXYtPm1haW5fZnJhbWUgPSBfZXdrX3ZpZXdfY29yZV9m
cmFtZV9uZXcoc21hcnREYXRhLCBwcml2LCAwKS5nZXQoKTsKICAgICBpZiAoIXByaXYtPm1haW5f
ZnJhbWUpIHsKICAgICAgICAgQ1JJVElDQUwoIkNvdWxkIG5vdCBjcmVhdGUgbWFpbiBmcmFtZS4i
KTsKICAgICAgICAgZ290byBlcnJvcl9tYWluX2ZyYW1lOwpAQCAtNzIwLDEzICs3MjAsMTMgQEAg
c3RhdGljIHZvaWQgX2V3a192aWV3X3ByaXZfZGVsKEV3a19WaWV3X1ByaXZhdGVfRGF0YSogcHJp
dikKICAgICBmcmVlKHByaXYpOwogfQogCi1zdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21hcnRfYWRk
KEV2YXNfT2JqZWN0KiBvKQorc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X2FkZChFdmFzX09i
amVjdCogZXdrVmlldykKIHsKLSAgICBjb25zdCBFdmFzX1NtYXJ0KiBzbWFydCA9IGV2YXNfb2Jq
ZWN0X3NtYXJ0X3NtYXJ0X2dldChvKTsKKyAgICBjb25zdCBFdmFzX1NtYXJ0KiBzbWFydCA9IGV2
YXNfb2JqZWN0X3NtYXJ0X3NtYXJ0X2dldChld2tWaWV3KTsKICAgICBjb25zdCBFdmFzX1NtYXJ0
X0NsYXNzKiBzYyA9IGV2YXNfc21hcnRfY2xhc3NfZ2V0KHNtYXJ0KTsKICAgICBjb25zdCBFd2tf
Vmlld19TbWFydF9DbGFzcyogYXBpID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBFd2tfVmlld19T
bWFydF9DbGFzcyo+KHNjKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihhcGktPmJh
Y2tpbmdfc3RvcmVfYWRkKTsKLSAgICBFV0tfVklFV19TRF9HRVQobywgc2QpOworICAgIEVXS19W
SUVXX1NEX0dFVChld2tWaWV3LCBzZCk7CiAKICAgICBpZiAoIXNkKSB7CiAgICAgICAgIHNkID0g
c3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGNhbGxvYygxLCBzaXplb2YoRXdrX1Zp
ZXdfU21hcnRfRGF0YSkpKTsKQEAgLTczNCw3ICs3MzQsNyBAQCBzdGF0aWMgdm9pZCBfZXdrX3Zp
ZXdfc21hcnRfYWRkKEV2YXNfT2JqZWN0KiBvKQogICAgICAgICAgICAgQ1JJVElDQUwoImNvdWxk
IG5vdCBhbGxvY2F0ZSBFd2tfVmlld19TbWFydF9EYXRhIik7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KLSAgICAgICAgZXZhc19vYmplY3Rfc21hcnRfZGF0YV9zZXQobywgc2QpOwor
ICAgICAgICBldmFzX29iamVjdF9zbWFydF9kYXRhX3NldChld2tWaWV3LCBzZCk7CiAgICAgfQog
CiAgICAgc2QtPmJnX2NvbG9yLnIgPSAyNTU7CkBAIC03NDIsMTEgKzc0MiwxMSBAQCBzdGF0aWMg
dm9pZCBfZXdrX3ZpZXdfc21hcnRfYWRkKEV2YXNfT2JqZWN0KiBvKQogICAgIHNkLT5iZ19jb2xv
ci5iID0gMjU1OwogICAgIHNkLT5iZ19jb2xvci5hID0gMjU1OwogCi0gICAgc2QtPnNlbGYgPSBv
OworICAgIHNkLT5zZWxmID0gZXdrVmlldzsKICAgICBzZC0+X3ByaXYgPSBfZXdrX3ZpZXdfcHJp
dl9uZXcoc2QpOwogICAgIHNkLT5hcGkgPSBhcGk7CiAKLSAgICBfcGFyZW50X3NjLmFkZChvKTsK
KyAgICBfcGFyZW50X3NjLmFkZChld2tWaWV3KTsKIAogICAgIGlmICghc2QtPl9wcml2KQogICAg
ICAgICByZXR1cm47CkBAIC03NTksMTMgKzc1OSwxMyBAQCBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdf
c21hcnRfYWRkKEV2YXNfT2JqZWN0KiBvKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
ZXZhc19vYmplY3Rfc21hcnRfbWVtYmVyX2FkZChzZC0+YmFja2luZ19zdG9yZSwgbyk7CisgICAg
ZXZhc19vYmplY3Rfc21hcnRfbWVtYmVyX2FkZChzZC0+YmFja2luZ19zdG9yZSwgZXdrVmlldyk7
CiAgICAgZXZhc19vYmplY3Rfc2hvdyhzZC0+YmFja2luZ19zdG9yZSk7CiAgICAgZXZhc19vYmpl
Y3RfcGFzc19ldmVudHNfc2V0KHNkLT5iYWNraW5nX3N0b3JlLCBFSU5BX1RSVUUpOwogCiAgICAg
c2QtPmV2ZW50c19yZWN0ID0gZXZhc19vYmplY3RfcmVjdGFuZ2xlX2FkZChzZC0+YmFzZS5ldmFz
KTsKICAgICBldmFzX29iamVjdF9jb2xvcl9zZXQoc2QtPmV2ZW50c19yZWN0LCAwLCAwLCAwLCAw
KTsKLSAgICBldmFzX29iamVjdF9zbWFydF9tZW1iZXJfYWRkKHNkLT5ldmVudHNfcmVjdCwgbyk7
CisgICAgZXZhc19vYmplY3Rfc21hcnRfbWVtYmVyX2FkZChzZC0+ZXZlbnRzX3JlY3QsIGV3a1Zp
ZXcpOwogICAgIGV2YXNfb2JqZWN0X3Nob3coc2QtPmV2ZW50c19yZWN0KTsKIAogICAgIHNkLT5t
YWluX2ZyYW1lID0gZXdrX2ZyYW1lX2FkZChzZC0+YmFzZS5ldmFzKTsKQEAgLTc3NCw3ICs3NzQs
NyBAQCBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21hcnRfYWRkKEV2YXNfT2JqZWN0KiBvKQogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCFld2tfZnJhbWVfaW5pdChzZC0+bWFpbl9m
cmFtZSwgbywgcHJpdi0+bWFpbl9mcmFtZSkpIHsKKyAgICBpZiAoIWV3a19mcmFtZV9pbml0KHNk
LT5tYWluX2ZyYW1lLCBld2tWaWV3LCBwcml2LT5tYWluX2ZyYW1lKSkgewogICAgICAgICBFUlIo
IkNvdWxkIG5vdCBpbml0aWFsaXplIG1haW4gZnJtZSBvYmplY3QuIik7CiAgICAgICAgIGV2YXNf
b2JqZWN0X2RlbChzZC0+bWFpbl9mcmFtZSk7CiAgICAgICAgIHNkLT5tYWluX2ZyYW1lID0gMDsK
QEAgLTc4NSwxMCArNzg1LDEwIEBAIHN0YXRpYyB2b2lkIF9ld2tfdmlld19zbWFydF9hZGQoRXZh
c19PYmplY3QqIG8pCiAgICAgfQogCiAgICAgZXZhc19vYmplY3RfbmFtZV9zZXQoc2QtPm1haW5f
ZnJhbWUsICJFV0tfRnJhbWU6bWFpbiIpOwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X21lbWJlcl9h
ZGQoc2QtPm1haW5fZnJhbWUsIG8pOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X21lbWJlcl9hZGQo
c2QtPm1haW5fZnJhbWUsIGV3a1ZpZXcpOwogICAgIGV2YXNfb2JqZWN0X3Nob3coc2QtPm1haW5f
ZnJhbWUpOwogCi0jZGVmaW5lIENPTk5FQ1QocywgYykgZXZhc19vYmplY3RfZXZlbnRfY2FsbGJh
Y2tfYWRkKG8sIHMsIGMsIHNkKQorI2RlZmluZSBDT05ORUNUKHMsIGMpIGV2YXNfb2JqZWN0X2V2
ZW50X2NhbGxiYWNrX2FkZChld2tWaWV3LCBzLCBjLCBzZCkKICAgICBDT05ORUNUKEVWQVNfQ0FM
TEJBQ0tfRk9DVVNfSU4sIF9ld2tfdmlld19vbl9mb2N1c19pbik7CiAgICAgQ09OTkVDVChFVkFT
X0NBTExCQUNLX0ZPQ1VTX09VVCwgX2V3a192aWV3X29uX2ZvY3VzX291dCk7CiAgICAgQ09OTkVD
VChFVkFTX0NBTExCQUNLX01PVVNFX1dIRUVMLCBfZXdrX3ZpZXdfb25fbW91c2Vfd2hlZWwpOwpA
QCAtODAwLDE5ICs4MDAsMTkgQEAgc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X2FkZChFdmFz
X09iamVjdCogbykKICN1bmRlZiBDT05ORUNUCiB9CiAKLXN0YXRpYyB2b2lkIF9ld2tfdmlld19z
bWFydF9kZWwoRXZhc19PYmplY3QqIG8pCitzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21hcnRfZGVs
KEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVChvLCBzZCk7Cisg
ICAgRVdLX1ZJRVdfU0RfR0VUKGV3a1ZpZXcsIHNkKTsKICAgICBFd2tfVmlld19Qcml2YXRlX0Rh
dGEqIHByaXYgPSBzZCA/IHNkLT5fcHJpdiA6IDA7CiAKLSAgICBld2tfdmlld19zdG9wKG8pOwot
ICAgIF9wYXJlbnRfc2MuZGVsKG8pOworICAgIGV3a192aWV3X3N0b3AoZXdrVmlldyk7CisgICAg
X3BhcmVudF9zYy5kZWwoZXdrVmlldyk7CiAgICAgX2V3a192aWV3X3ByaXZfZGVsKHByaXYpOwog
fQogCi1zdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21hcnRfcmVzaXplKEV2YXNfT2JqZWN0KiBvLCBF
dmFzX0Nvb3JkIHcsIEV2YXNfQ29vcmQgaCkKK3N0YXRpYyB2b2lkIF9ld2tfdmlld19zbWFydF9y
ZXNpemUoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV2YXNfQ29vcmQgdywgRXZhc19Db29yZCBoKQog
ewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QpOworICAgIEVXS19WSUVXX1NE
X0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QpOwogCiAgICAgLy8gdGhlc2Ugc2hvdWxkIGJlIHF1
ZXVlZCBhbmQgcHJvY2Vzc2VkIGluIGNhbGN1bGF0ZSBhcyB3ZWxsIQogICAgIGV2YXNfb2JqZWN0
X3Jlc2l6ZShzZC0+YmFja2luZ19zdG9yZSwgdywgaCk7CkBAIC04MjEsMTYgKzgyMSwxNiBAQCBz
dGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21hcnRfcmVzaXplKEV2YXNfT2JqZWN0KiBvLCBFdmFzX0Nv
b3JkIHcsIEV2YXNfQ29vcmQgaCkKICAgICBfZXdrX3ZpZXdfc21hcnRfY2hhbmdlZChzZCk7CiB9
CiAKLXN0YXRpYyB2b2lkIF9ld2tfdmlld19zbWFydF9tb3ZlKEV2YXNfT2JqZWN0KiBvLCBFdmFz
X0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSkKK3N0YXRpYyB2b2lkIF9ld2tfdmlld19zbWFydF9tb3Zl
KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSkKIHsKLSAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkKTsKKyAgICBFV0tfVklFV19TRF9HRVRf
T1JfUkVUVVJOKGV3a1ZpZXcsIHNkKTsKICAgICBzZC0+Y2hhbmdlZC5wb3NpdGlvbiA9IEVJTkFf
VFJVRTsKICAgICBfZXdrX3ZpZXdfc21hcnRfY2hhbmdlZChzZCk7CiB9CiAKLXN0YXRpYyB2b2lk
IF9ld2tfdmlld19zbWFydF9jYWxjdWxhdGUoRXZhc19PYmplY3QqIG8pCitzdGF0aWMgdm9pZCBf
ZXdrX3ZpZXdfc21hcnRfY2FsY3VsYXRlKEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVX
S19WSUVXX1NEX0dFVChvLCBzZCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUKGV3a1ZpZXcsIHNkKTsK
ICAgICBFV0tfVklFV19QUklWX0dFVChzZCwgcHJpdik7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk4oc2QtPmFwaS0+Y29udGVudHNfcmVzaXplKTsKICAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTihzZC0+YXBpLT5zY3JvbGxzX3Byb2Nlc3MpOwpAQCAtODQyLDExICs4NDIsMTEg
QEAgc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X2NhbGN1bGF0ZShFdmFzX09iamVjdCogbykK
ICAgICBpZiAoIXNkLT5tYWluX2ZyYW1lIHx8ICFwcml2LT5tYWluX2ZyYW1lKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBldmFzX29iamVjdF9nZW9tZXRyeV9nZXQobywgJngsICZ5LCAmdywgJmgp
OworICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldChld2tWaWV3LCAmeCwgJnksICZ3LCAmaCk7
CiAKLSAgICBEQkcoIm89JXAgZ2VvPVslZCwgJWQgKyAlZHglZF0sIGNoYW5nZWQ6IHNpemU9JWho
dSwgIgorICAgIERCRygiZXdrVmlldz0lcCBnZW89WyVkLCAlZCArICVkeCVkXSwgY2hhbmdlZDog
c2l6ZT0laGh1LCAiCiAgICAgICAgICJzY3JvbGxzPSV6dSwgcmVwYWludHM9JXp1IiwKLSAgICAg
ICAgbywgeCwgeSwgdywgaCwgc2QtPmNoYW5nZWQuc2l6ZSwKKyAgICAgICAgZXdrVmlldywgeCwg
eSwgdywgaCwgc2QtPmNoYW5nZWQuc2l6ZSwKICAgICAgICAgcHJpdi0+c2Nyb2xscy5jb3VudCwg
cHJpdi0+cmVwYWludHMuY291bnQpOwogCiAgICAgaWYgKHNkLT5jaGFuZ2VkLnNpemUgJiYgKCh3
ICE9IHNkLT52aWV3LncpIHx8IChoICE9IHNkLT52aWV3LmgpKSkgewpAQCAtODY1LDcgKzg2NSw3
IEBAIHN0YXRpYyB2b2lkIF9ld2tfdmlld19zbWFydF9jYWxjdWxhdGUoRXZhc19PYmplY3QqIG8p
CiAgICAgICAgIF9ld2tfdmlld19yZXBhaW50X2FkZChwcml2LCAwLCAwLCB3LCBoKTsKIAogICAg
ICAgICAvLyBUaGlzIGNhbGxiYWNrIGlzIGEgZ29vZCBwbGFjZSBlLmcuIHRvIGNoYW5nZSBmaXhl
ZCBsYXlvdXQgc2l6ZSAoZXdrX3ZpZXdfZml4ZWRfbGF5b3V0X3NpemVfc2V0KS4KLSAgICAgICAg
ZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChvLCAidmlldyxyZXNpemVkIiwgMCk7Cisg
ICAgICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdrVmlldywgInZpZXcscmVz
aXplZCIsIDApOwogICAgIH0KICAgICBzZC0+Y2hhbmdlZC5zaXplID0gRUlOQV9GQUxTRTsKIApA
QCAtODk0LDk2ICs4OTQsOTYgQEAgc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X2NhbGN1bGF0
ZShFdmFzX09iamVjdCogbykKICAgICB9CiB9CiAKLXN0YXRpYyB2b2lkIF9ld2tfdmlld19zbWFy
dF9zaG93KEV2YXNfT2JqZWN0KiBvKQorc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X3Nob3co
RXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihv
LCBzZCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCk7CiAKICAg
ICBpZiAoZXZhc19vYmplY3RfY2xpcGVlc19nZXQoc2QtPmJhc2UuY2xpcHBlcikpCiAgICAgICAg
IGV2YXNfb2JqZWN0X3Nob3coc2QtPmJhc2UuY2xpcHBlcik7CiAgICAgZXZhc19vYmplY3Rfc2hv
dyhzZC0+YmFja2luZ19zdG9yZSk7CiB9CiAKLXN0YXRpYyB2b2lkIF9ld2tfdmlld19zbWFydF9o
aWRlKEV2YXNfT2JqZWN0KiBvKQorc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X2hpZGUoRXZh
c19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBz
ZCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCk7CiAKICAgICBl
dmFzX29iamVjdF9oaWRlKHNkLT5iYXNlLmNsaXBwZXIpOwogICAgIGV2YXNfb2JqZWN0X2hpZGUo
c2QtPmJhY2tpbmdfc3RvcmUpOwogfQogCi1zdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19zbWFy
dF9jb250ZW50c19yZXNpemUoRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QsIGludCB3LCBpbnQgaCkK
K3N0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3NtYXJ0X2NvbnRlbnRzX3Jlc2l6ZShFd2tfVmll
d19TbWFydF9EYXRhKiBzbWFydERhdGEsIGludCB3aWR0aCwgaW50IGhlaWdodCkKIHsKICAgICBy
ZXR1cm4gRUlOQV9UUlVFOwogfQogCi1zdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19zbWFydF96
b29tX3NldChFd2tfVmlld19TbWFydF9EYXRhKiBzZCwgZmxvYXQgem9vbSwgRXZhc19Db29yZCBj
eCwgRXZhc19Db29yZCBjeSkKK3N0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3NtYXJ0X3pvb21f
c2V0KEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSwgZmxvYXQgem9vbSwgRXZhc19Db29y
ZCBjZW50ZXJYLCBFdmFzX0Nvb3JkIGNlbnRlclkpCiB7CiAgICAgZG91YmxlIHB4LCBweTsKICAg
ICBFdmFzX0Nvb3JkIHgsIHksIHcsIGg7CiAgICAgRWluYV9Cb29sIHJldDsKIAotICAgIGV3a19m
cmFtZV9zY3JvbGxfc2l6ZV9nZXQoc2QtPm1haW5fZnJhbWUsICZ3LCAmaCk7Ci0gICAgZXdrX2Zy
YW1lX3Njcm9sbF9wb3NfZ2V0KHNkLT5tYWluX2ZyYW1lLCAmeCwgJnkpOworICAgIGV3a19mcmFt
ZV9zY3JvbGxfc2l6ZV9nZXQoc21hcnREYXRhLT5tYWluX2ZyYW1lLCAmdywgJmgpOworICAgIGV3
a19mcmFtZV9zY3JvbGxfcG9zX2dldChzbWFydERhdGEtPm1haW5fZnJhbWUsICZ4LCAmeSk7CiAK
LSAgICBpZiAodyArIHNkLT52aWV3LncgPiAwKQotICAgICAgICBweCA9IHN0YXRpY19jYXN0PGRv
dWJsZT4oeCArIGN4KSAvICh3ICsgc2QtPnZpZXcudyk7CisgICAgaWYgKHcgKyBzbWFydERhdGEt
PnZpZXcudyA+IDApCisgICAgICAgIHB4ID0gc3RhdGljX2Nhc3Q8ZG91YmxlPih4ICsgY2VudGVy
WCkgLyAodyArIHNtYXJ0RGF0YS0+dmlldy53KTsKICAgICBlbHNlCiAgICAgICAgIHB4ID0gMC4w
OwogCi0gICAgaWYgKGggKyBzZC0+dmlldy5oID4gMCkKLSAgICAgICAgcHkgPSBzdGF0aWNfY2Fz
dDxkb3VibGU+KHkgKyBjeSkgLyAoaCArIHNkLT52aWV3LmgpOworICAgIGlmIChoICsgc21hcnRE
YXRhLT52aWV3LmggPiAwKQorICAgICAgICBweSA9IHN0YXRpY19jYXN0PGRvdWJsZT4oeSArIGNl
bnRlclkpIC8gKGggKyBzbWFydERhdGEtPnZpZXcuaCk7CiAgICAgZWxzZQogICAgICAgICBweSA9
IDAuMDsKIAotICAgIHJldCA9IGV3a19mcmFtZV96b29tX3NldChzZC0+bWFpbl9mcmFtZSwgem9v
bSk7CisgICAgcmV0ID0gZXdrX2ZyYW1lX3pvb21fc2V0KHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSwg
em9vbSk7CiAKLSAgICBld2tfZnJhbWVfc2Nyb2xsX3NpemVfZ2V0KHNkLT5tYWluX2ZyYW1lLCAm
dywgJmgpOwotICAgIHggPSAodyArIHNkLT52aWV3LncpICogcHggLSBjeDsKLSAgICB5ID0gKGgg
KyBzZC0+dmlldy5oKSAqIHB5IC0gY3k7Ci0gICAgZXdrX2ZyYW1lX3Njcm9sbF9zZXQoc2QtPm1h
aW5fZnJhbWUsIHgsIHkpOworICAgIGV3a19mcmFtZV9zY3JvbGxfc2l6ZV9nZXQoc21hcnREYXRh
LT5tYWluX2ZyYW1lLCAmdywgJmgpOworICAgIHggPSAodyArIHNtYXJ0RGF0YS0+dmlldy53KSAq
IHB4IC0gY2VudGVyWDsKKyAgICB5ID0gKGggKyBzbWFydERhdGEtPnZpZXcuaCkgKiBweSAtIGNl
bnRlclk7CisgICAgZXdrX2ZyYW1lX3Njcm9sbF9zZXQoc21hcnREYXRhLT5tYWluX2ZyYW1lLCB4
LCB5KTsKICAgICByZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21hcnRf
Zmx1c2goRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QpCitzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21h
cnRfZmx1c2goRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhKQogewotICAgIEVXS19WSUVX
X1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdik7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1Jf
UkVUVVJOKHNtYXJ0RGF0YSwgcHJpdik7CiAgICAgX2V3a192aWV3X3JlcGFpbnRzX2ZsdXNoKHBy
aXYpOwogICAgIF9ld2tfdmlld19zY3JvbGxzX2ZsdXNoKHByaXYpOwogfQogCi1zdGF0aWMgRWlu
YV9Cb29sIF9ld2tfdmlld19zbWFydF9wcmVfcmVuZGVyX3JlZ2lvbihFd2tfVmlld19TbWFydF9E
YXRhKiBzZCwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHksIEV2YXNfQ29vcmQgdywgRXZhc19D
b29yZCBoLCBmbG9hdCB6b29tKQorc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfc21hcnRfcHJl
X3JlbmRlcl9yZWdpb24oRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhLCBFdmFzX0Nvb3Jk
IHgsIEV2YXNfQ29vcmQgeSwgRXZhc19Db29yZCB3aWR0aCwgRXZhc19Db29yZCBoZWlnaHQsIGZs
b2F0IHpvb20pCiB7CiAgICAgV1JOKCJub3Qgc3VwcG9ydGVkIGJ5IGVuZ2luZS4gc2Q9JXAgYXJl
YT0lZCwlZCslZHglZCwgem9vbT0lZiIsCi0gICAgICAgIHNkLCB4LCB5LCB3LCBoLCB6b29tKTsK
KyAgICAgICAgc21hcnREYXRhLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCB6b29tKTsKICAgICByZXR1
cm4gRUlOQV9GQUxTRTsKIH0KIAotc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfc21hcnRfcHJl
X3JlbmRlcl9yZWxhdGl2ZV9yYWRpdXMoRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QsIHVuc2lnbmVk
IGludCBuLCBmbG9hdCB6b29tKQorc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfc21hcnRfcHJl
X3JlbmRlcl9yZWxhdGl2ZV9yYWRpdXMoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhLCB1
bnNpZ25lZCBpbnQgbnVtYmVyLCBmbG9hdCB6b29tKQogewogICAgIFdSTigibm90IHN1cHBvcnRl
ZCBieSBlbmdpbmUuIHNkPSVwLCBuPSV1IHpvb209JWYiLAotICAgICAgICBzZCwgbiwgem9vbSk7
CisgICAgICAgIHNtYXJ0RGF0YSwgbnVtYmVyLCB6b29tKTsKICAgICByZXR1cm4gRUlOQV9GQUxT
RTsKIH0KIAotc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X3ByZV9yZW5kZXJfY2FuY2VsKEV3
a19WaWV3X1NtYXJ0X0RhdGEqIHNkKQorc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X3ByZV9y
ZW5kZXJfY2FuY2VsKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSkKIHsKLSAgICBXUk4o
Im5vdCBzdXBwb3J0ZWQgYnkgZW5naW5lLiBzZD0lcCIsIHNkKTsKKyAgICBXUk4oIm5vdCBzdXBw
b3J0ZWQgYnkgZW5naW5lLiBzZD0lcCIsIHNtYXJ0RGF0YSk7CiB9CiAKLXN0YXRpYyB2b2lkIF9l
d2tfdmlld196b29tX2FuaW1hdGVkX21hcmtfc3RvcChFd2tfVmlld19TbWFydF9EYXRhKiBzZCkK
K3N0YXRpYyB2b2lkIF9ld2tfdmlld196b29tX2FuaW1hdGVkX21hcmtfc3RvcChFd2tfVmlld19T
bWFydF9EYXRhKiBzbWFydERhdGEpCiB7Ci0gICAgc2QtPmFuaW1hdGVkX3pvb20uem9vbS5zdGFy
dCA9IDAuMDsKLSAgICBzZC0+YW5pbWF0ZWRfem9vbS56b29tLmVuZCA9IDAuMDsKLSAgICBzZC0+
YW5pbWF0ZWRfem9vbS56b29tLmN1cnJlbnQgPSAwLjA7CisgICAgc21hcnREYXRhLT5hbmltYXRl
ZF96b29tLnpvb20uc3RhcnQgPSAwLjA7CisgICAgc21hcnREYXRhLT5hbmltYXRlZF96b29tLnpv
b20uZW5kID0gMC4wOworICAgIHNtYXJ0RGF0YS0+YW5pbWF0ZWRfem9vbS56b29tLmN1cnJlbnQg
PSAwLjA7CiB9CiAKLXN0YXRpYyB2b2lkIF9ld2tfdmlld196b29tX2FuaW1hdGVkX2ZpbmlzaChF
d2tfVmlld19TbWFydF9EYXRhKiBzZCkKK3N0YXRpYyB2b2lkIF9ld2tfdmlld196b29tX2FuaW1h
dGVkX2ZpbmlzaChFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEpCiB7Ci0gICAgRVdLX1ZJ
RVdfUFJJVl9HRVQoc2QsIHByaXYpOworICAgIEVXS19WSUVXX1BSSVZfR0VUKHNtYXJ0RGF0YSwg
cHJpdik7CiAgICAgZWNvcmVfYW5pbWF0b3JfZGVsKHByaXYtPmFuaW1hdGVkX3pvb20uYW5pbWF0
b3IpOwogICAgIHByaXYtPmFuaW1hdGVkX3pvb20uYW5pbWF0b3IgPSAwOwotICAgIF9ld2tfdmll
d196b29tX2FuaW1hdGVkX21hcmtfc3RvcChzZCk7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2Fs
bGJhY2tfY2FsbChzZC0+c2VsZiwgInpvb20sYW5pbWF0ZWQsZW5kIiwgMCk7CisgICAgX2V3a192
aWV3X3pvb21fYW5pbWF0ZWRfbWFya19zdG9wKHNtYXJ0RGF0YSk7CisgICAgZXZhc19vYmplY3Rf
c21hcnRfY2FsbGJhY2tfY2FsbChzbWFydERhdGEtPnNlbGYsICJ6b29tLGFuaW1hdGVkLGVuZCIs
IDApOwogfQogCiBzdGF0aWMgZmxvYXQgX2V3a192aWV3X3pvb21fYW5pbWF0ZWRfY3VycmVudChF
d2tfVmlld19Qcml2YXRlX0RhdGEqIHByaXYpCkBAIC0xMDMxLDE4ICsxMDMxLDE4IEBAIHN0YXRp
YyBFaW5hX0Jvb2wgX2V3a192aWV3X3pvb21fYW5pbWF0b3JfY2Iodm9pZCogZGF0YSkKICAgICBy
ZXR1cm4gRUlOQV9UUlVFOwogfQogCi1zdGF0aWMgdm9pZCBfZXdrX3ZpZXdfem9vbV9hbmltYXRp
b25fc3RhcnQoRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QpCitzdGF0aWMgdm9pZCBfZXdrX3ZpZXdf
em9vbV9hbmltYXRpb25fc3RhcnQoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhKQogewot
ICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdik7CisgICAgRVdLX1ZJRVdf
UFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdik7CiAgICAgaWYgKHByaXYtPmFuaW1h
dGVkX3pvb20uYW5pbWF0b3IpCiAgICAgICAgIHJldHVybjsKICAgICBwcml2LT5hbmltYXRlZF96
b29tLmFuaW1hdG9yID0gZWNvcmVfYW5pbWF0b3JfYWRkCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAoX2V3a192aWV3X3pvb21fYW5pbWF0b3JfY2IsIHNkKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfZXdrX3ZpZXdfem9vbV9hbmltYXRv
cl9jYiwgc21hcnREYXRhKTsKIH0KIAotc3RhdGljIFdlYkNvcmU6OlZpZXdwb3J0QXR0cmlidXRl
cyBfZXdrX3ZpZXdfdmlld3BvcnRfYXR0cmlidXRlc19jb21wdXRlKGNvbnN0IEV2YXNfT2JqZWN0
KiBvKQorc3RhdGljIFdlYkNvcmU6OlZpZXdwb3J0QXR0cmlidXRlcyBfZXdrX3ZpZXdfdmlld3Bv
cnRfYXR0cmlidXRlc19jb21wdXRlKGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAg
IEVXS19WSUVXX1NEX0dFVChvLCBzZCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUKGV3a1ZpZXcsIHNk
KTsKICAgICBFV0tfVklFV19QUklWX0dFVChzZCwgcHJpdik7CiAKICAgICBpbnQgZGVza3RvcF93
aWR0aCA9IDk4MDsKQEAgLTEwNTYsMTUgKzEwNTYsMTUgQEAgc3RhdGljIFdlYkNvcmU6OlZpZXdw
b3J0QXR0cmlidXRlcyBfZXdrX3ZpZXdfdmlld3BvcnRfYXR0cmlidXRlc19jb21wdXRlKGNvbnN0
IEUKICAgICByZXR1cm4gYXR0cmlidXRlczsKIH0KIAotc3RhdGljIEVpbmFfQm9vbCBfZXdrX3Zp
ZXdfc21hcnRfZGlzYWJsZV9yZW5kZXIoRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QpCitzdGF0aWMg
RWluYV9Cb29sIF9ld2tfdmlld19zbWFydF9kaXNhYmxlX3JlbmRlcihFd2tfVmlld19TbWFydF9E
YXRhKiBzbWFydERhdGEpCiB7Ci0gICAgV1JOKCJub3Qgc3VwcG9ydGVkIGJ5IGVuZ2luZS4gc2Q9
JXAiLCBzZCk7CisgICAgV1JOKCJub3Qgc3VwcG9ydGVkIGJ5IGVuZ2luZS4gc2Q9JXAiLCBzbWFy
dERhdGEpOwogICAgIHJldHVybiBFSU5BX0ZBTFNFOwogfQogCi1zdGF0aWMgRWluYV9Cb29sIF9l
d2tfdmlld19zbWFydF9lbmFibGVfcmVuZGVyKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkKQorc3Rh
dGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfc21hcnRfZW5hYmxlX3JlbmRlcihFd2tfVmlld19TbWFy
dF9EYXRhKiBzbWFydERhdGEpCiB7Ci0gICAgV1JOKCJub3Qgc3VwcG9ydGVkIGJ5IGVuZ2luZS4g
c2Q9JXAiLCBzZCk7CisgICAgV1JOKCJub3Qgc3VwcG9ydGVkIGJ5IGVuZ2luZS4gc2Q9JXAiLCBz
bWFydERhdGEpOwogICAgIHJldHVybiBFSU5BX0ZBTFNFOwogfQogCkBAIC0xMTE5LDIyICsxMTE5
LDIyIEBAIEVpbmFfQm9vbCBld2tfdmlld19iYXNlX3NtYXJ0X3NldChFd2tfVmlld19TbWFydF9D
bGFzcyogYXBpKQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLXZvaWQgZXdrX3ZpZXdfZml4
ZWRfbGF5b3V0X3NpemVfc2V0KEV2YXNfT2JqZWN0KiBvLCBFdmFzX0Nvb3JkIHcsIEV2YXNfQ29v
cmQgaCkKK3ZvaWQgZXdrX3ZpZXdfZml4ZWRfbGF5b3V0X3NpemVfc2V0KEV2YXNfT2JqZWN0KiBl
d2tWaWV3LCBFdmFzX0Nvb3JkIHdpZHRoLCBFdmFzX0Nvb3JkIGhlaWdodCkKIHsKLSAgICBFV0tf
VklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVU
VVJOKGV3a1ZpZXcsIHNkKTsKICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHBy
aXYpOwogCiAgICAgV2ViQ29yZTo6RnJhbWVWaWV3KiB2aWV3ID0gcHJpdi0+bWFpbl9mcmFtZS0+
dmlldygpOwotICAgIGlmICh3IDw9IDAgJiYgaCA8PSAwKSB7CisgICAgaWYgKHdpZHRoIDw9IDAg
JiYgaGVpZ2h0IDw9IDApIHsKICAgICAgICAgaWYgKCF2aWV3LT51c2VGaXhlZExheW91dCgpKQog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB2aWV3LT5zZXRVc2VGaXhlZExheW91dChFSU5B
X0ZBTFNFKTsKICAgICB9IGVsc2UgewogICAgICAgICBXZWJDb3JlOjpJbnRTaXplIHNpemUgPSB2
aWV3LT5maXhlZExheW91dFNpemUoKTsKLSAgICAgICAgaWYgKHNpemUud2lkdGgoKSA9PSB3ICYm
IHNpemUuaGVpZ2h0KCkgPT0gaCkKKyAgICAgICAgaWYgKHNpemUud2lkdGgoKSA9PSB3aWR0aCAm
JiBzaXplLmhlaWdodCgpID09IGhlaWdodCkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
aWYgKHZpZXcpCi0gICAgICAgICAgICB2aWV3LT5zZXRGaXhlZExheW91dFNpemUoV2ViQ29yZTo6
SW50U2l6ZSh3LCBoKSk7CisgICAgICAgICAgICB2aWV3LT5zZXRGaXhlZExheW91dFNpemUoV2Vi
Q29yZTo6SW50U2l6ZSh3aWR0aCwgaGVpZ2h0KSk7CiAgICAgfQogCiAgICAgaWYgKCF2aWV3KQpA
QCAtMTE0MywyNyArMTE0MywyNyBAQCB2b2lkIGV3a192aWV3X2ZpeGVkX2xheW91dF9zaXplX3Nl
dChFdmFzX09iamVjdCogbywgRXZhc19Db29yZCB3LCBFdmFzX0Nvb3JkIGgpCiAgICAgdmlldy0+
Zm9yY2VMYXlvdXQoKTsKIH0KIAotdm9pZCBld2tfdmlld19maXhlZF9sYXlvdXRfc2l6ZV9nZXQo
Y29uc3QgRXZhc19PYmplY3QqIG8sIEV2YXNfQ29vcmQqIHcsIEV2YXNfQ29vcmQqIGgpCit2b2lk
IGV3a192aWV3X2ZpeGVkX2xheW91dF9zaXplX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmll
dywgRXZhc19Db29yZCogd2lkdGgsIEV2YXNfQ29vcmQqIGhlaWdodCkKIHsKLSAgICBpZiAodykK
LSAgICAgICAgKncgPSAwOwotICAgIGlmIChoKQotICAgICAgICAqaCA9IDA7Ci0gICAgRVdLX1ZJ
RVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCk7CisgICAgaWYgKHdpZHRoKQorICAgICAgICAqd2lk
dGggPSAwOworICAgIGlmIChoZWlnaHQpCisgICAgICAgICpoZWlnaHQgPSAwOworICAgIEVXS19W
SUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QpOwogICAgIEVXS19WSUVXX1BSSVZfR0VU
X09SX1JFVFVSTihzZCwgcHJpdik7CiAgICAgV2ViQ29yZTo6RnJhbWVWaWV3KiB2aWV3ID0gcHJp
di0+bWFpbl9mcmFtZS0+dmlldygpOwogICAgIGlmICh2aWV3LT51c2VGaXhlZExheW91dCgpKSB7
CiAgICAgICAgIFdlYkNvcmU6OkludFNpemUgc2l6ZSA9IHZpZXctPmZpeGVkTGF5b3V0U2l6ZSgp
OwotICAgICAgICBpZiAodykKLSAgICAgICAgICAgICp3ID0gc2l6ZS53aWR0aCgpOwotICAgICAg
ICBpZiAoaCkKLSAgICAgICAgICAgICpoID0gc2l6ZS5oZWlnaHQoKTsKKyAgICAgICAgaWYgKHdp
ZHRoKQorICAgICAgICAgICAgKndpZHRoID0gc2l6ZS53aWR0aCgpOworICAgICAgICBpZiAoaGVp
Z2h0KQorICAgICAgICAgICAgKmhlaWdodCA9IHNpemUuaGVpZ2h0KCk7CiAgICAgfQogfQogCi12
b2lkIGV3a192aWV3X3RoZW1lX3NldChFdmFzX09iamVjdCogbywgY29uc3QgY2hhciogcGF0aCkK
K3ZvaWQgZXdrX3ZpZXdfdGhlbWVfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBjaGFy
KiBwYXRoKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QpOworICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QpOwogICAgIEVXS19WSUVXX1BSSVZf
R0VUX09SX1JFVFVSTihzZCwgcHJpdik7CiAgICAgaWYgKCFlaW5hX3N0cmluZ3NoYXJlX3JlcGxh
Y2UoJnByaXYtPnNldHRpbmdzLnRoZW1lLCBwYXRoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTE3
NiwyMiArMTE3NiwyMiBAQCB2b2lkIGV3a192aWV3X3RoZW1lX3NldChFdmFzX09iamVjdCogbywg
Y29uc3QgY2hhciogcGF0aCkKIAogfQogCi1jb25zdCBjaGFyKiBld2tfdmlld190aGVtZV9nZXQo
Y29uc3QgRXZhc19PYmplY3QqIG8pCitjb25zdCBjaGFyKiBld2tfdmlld190aGVtZV9nZXQoY29u
c3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
TihvLCBzZCwgMCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwg
MCk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCAwKTsKICAgICBy
ZXR1cm4gcHJpdi0+c2V0dGluZ3MudGhlbWU7CiB9CiAKLUV2YXNfT2JqZWN0KiBld2tfdmlld19m
cmFtZV9tYWluX2dldChjb25zdCBFdmFzX09iamVjdCogbykKK0V2YXNfT2JqZWN0KiBld2tfdmll
d19mcmFtZV9tYWluX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tf
VklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAwKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1Jf
UkVUVVJOKGV3a1ZpZXcsIHNkLCAwKTsKICAgICByZXR1cm4gc2QtPm1haW5fZnJhbWU7CiB9CiAK
LUV2YXNfT2JqZWN0KiBld2tfdmlld19mcmFtZV9mb2N1c2VkX2dldChjb25zdCBFdmFzX09iamVj
dCogbykKK0V2YXNfT2JqZWN0KiBld2tfdmlld19mcmFtZV9mb2N1c2VkX2dldChjb25zdCBFdmFz
X09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNk
LCAwKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAwKTsKICAg
ICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIDApOwogCiAgICAgV2ViQ29y
ZTo6RnJhbWUqIGNvcmUgPSBwcml2LT5wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZEZy
YW1lKCk7CkBAIC0xMjA0LDQyICsxMjA0LDQyIEBAIEV2YXNfT2JqZWN0KiBld2tfdmlld19mcmFt
ZV9mb2N1c2VkX2dldChjb25zdCBFdmFzX09iamVjdCogbykKICAgICByZXR1cm4gY2xpZW50LT53
ZWJGcmFtZSgpOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfdXJpX3NldChFdmFzX09iamVjdCog
bywgY29uc3QgY2hhciogdXJpKQorRWluYV9Cb29sIGV3a192aWV3X3VyaV9zZXQoRXZhc19PYmpl
Y3QqIGV3a1ZpZXcsIGNvbnN0IGNoYXIqIHVyaSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1Jf
UkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJO
KGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICByZXR1cm4gZXdrX2ZyYW1lX3VyaV9zZXQo
c2QtPm1haW5fZnJhbWUsIHVyaSk7CiB9CiAKLWNvbnN0IGNoYXIqIGV3a192aWV3X3VyaV9nZXQo
Y29uc3QgRXZhc19PYmplY3QqIG8pCitjb25zdCBjaGFyKiBld2tfdmlld191cmlfZ2V0KGNvbnN0
IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
bywgc2QsIDApOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIDAp
OwogICAgIHJldHVybiBld2tfZnJhbWVfdXJpX2dldChzZC0+bWFpbl9mcmFtZSk7CiB9CiAKLWNv
bnN0IGNoYXIqIGV3a192aWV3X3RpdGxlX2dldChjb25zdCBFdmFzX09iamVjdCogbykKK2NvbnN0
IGNoYXIqIGV3a192aWV3X3RpdGxlX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsK
LSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAwKTsKKyAgICBFV0tfVklFV19T
RF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAwKTsKICAgICByZXR1cm4gZXdrX2ZyYW1lX3Rp
dGxlX2dldChzZC0+bWFpbl9mcmFtZSk7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld19lZGl0YWJs
ZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCitFaW5hX0Jvb2wgZXdrX3ZpZXdfZWRpdGFibGVf
Z2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9P
Ul9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRV
Uk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAgIHJldHVybiBld2tfZnJhbWVfZWRpdGFi
bGVfZ2V0KHNkLT5tYWluX2ZyYW1lKTsKIH0KIAotdm9pZCBld2tfdmlld19iZ19jb2xvcl9zZXQo
RXZhc19PYmplY3QqIG8sIGludCByLCBpbnQgZywgaW50IGIsIGludCBhKQordm9pZCBld2tfdmll
d19iZ19jb2xvcl9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGludCByZWQsIGludCBncmVlbiwg
aW50IGJsdWUsIGludCBhbHBoYSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8s
IHNkKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkKTsKICAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpKTsKICAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTihzZC0+YXBpLT5iZ19jb2xvcl9zZXQpOwogCi0gICAgaWYgKGEgPCAwKSB7Ci0g
ICAgICAgIFdSTigiQWxwaGEgbGVzcyB0aGFuIHplcm8gKCVkKS4iLCBhKTsKLSAgICAgICAgYSA9
IDA7Ci0gICAgfSBlbHNlIGlmIChhID4gMjU1KSB7Ci0gICAgICAgIFdSTigiQWxwaGEgaXMgbGFy
Z2VyIHRoYW4gMjU1ICglZCkuIiwgYSk7Ci0gICAgICAgIGEgPSAyNTU7CisgICAgaWYgKGFscGhh
IDwgMCkgeworICAgICAgICBXUk4oIkFscGhhIGxlc3MgdGhhbiB6ZXJvICglZCkuIiwgYWxwaGEp
OworICAgICAgICBhbHBoYSA9IDA7CisgICAgfSBlbHNlIGlmIChhbHBoYSA+IDI1NSkgeworICAg
ICAgICBXUk4oIkFscGhhIGlzIGxhcmdlciB0aGFuIDI1NSAoJWQpLiIsIGFscGhhKTsKKyAgICAg
ICAgYWxwaGEgPSAyNTU7CiAgICAgfQogCiAjZGVmaW5lIENIRUNLX1BSRU1VTF9DT0xPUihjLCBh
KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC0xMjUxLDYzICsx
MjUxLDYzIEBAIHZvaWQgZXdrX3ZpZXdfYmdfY29sb3Jfc2V0KEV2YXNfT2JqZWN0KiBvLCBpbnQg
ciwgaW50IGcsIGludCBiLCBpbnQgYSkKICAgICAgICAgICAgIGMsIGEpOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgYyA9IGE7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKICAgICB9Ci0gICAgQ0hFQ0tfUFJFTVVMX0NPTE9SKHIsIGEpOwotICAgIENIRUNLX1BSRU1V
TF9DT0xPUihnLCBhKTsKLSAgICBDSEVDS19QUkVNVUxfQ09MT1IoYiwgYSk7CisgICAgQ0hFQ0tf
UFJFTVVMX0NPTE9SKHJlZCwgYWxwaGEpOworICAgIENIRUNLX1BSRU1VTF9DT0xPUihncmVlbiwg
YWxwaGEpOworICAgIENIRUNLX1BSRU1VTF9DT0xPUihibHVlLCBhbHBoYSk7CiAjdW5kZWYgQ0hF
Q0tfUFJFTVVMX0NPTE9SCiAKLSAgICBzZC0+YmdfY29sb3IuciA9IHI7Ci0gICAgc2QtPmJnX2Nv
bG9yLmcgPSBnOwotICAgIHNkLT5iZ19jb2xvci5iID0gYjsKLSAgICBzZC0+YmdfY29sb3IuYSA9
IGE7CisgICAgc2QtPmJnX2NvbG9yLnIgPSByZWQ7CisgICAgc2QtPmJnX2NvbG9yLmcgPSBncmVl
bjsKKyAgICBzZC0+YmdfY29sb3IuYiA9IGJsdWU7CisgICAgc2QtPmJnX2NvbG9yLmEgPSBhbHBo
YTsKIAotICAgIHNkLT5hcGktPmJnX2NvbG9yX3NldChzZCwgciwgZywgYiwgYSk7CisgICAgc2Qt
PmFwaS0+YmdfY29sb3Jfc2V0KHNkLCByZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7CiAKICAgICBX
ZWJDb3JlOjpGcmFtZVZpZXcqIHZpZXcgPSBzZC0+X3ByaXYtPm1haW5fZnJhbWUtPnZpZXcoKTsK
ICAgICBpZiAodmlldykgewogICAgICAgICBXZWJDb3JlOjpDb2xvciBjb2xvcjsKIAotICAgICAg
ICBpZiAoIWEpCisgICAgICAgIGlmICghYWxwaGEpCiAgICAgICAgICAgICBjb2xvciA9IFdlYkNv
cmU6OkNvbG9yKDAsIDAsIDAsIDApOwotICAgICAgICBlbHNlIGlmIChhID09IDI1NSkKLSAgICAg
ICAgICAgIGNvbG9yID0gV2ViQ29yZTo6Q29sb3IociwgZywgYiwgYSk7CisgICAgICAgIGVsc2Ug
aWYgKGFscGhhID09IDI1NSkKKyAgICAgICAgICAgIGNvbG9yID0gV2ViQ29yZTo6Q29sb3IocmVk
LCBncmVlbiwgYmx1ZSwgYWxwaGEpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb2xvciA9
IFdlYkNvcmU6OkNvbG9yKHIgKiAyNTUgLyBhLCBnICogMjU1IC8gYSwgYiAqIDI1NSAvIGEsIGEp
OworICAgICAgICAgICAgY29sb3IgPSBXZWJDb3JlOjpDb2xvcihyZWQgKiAyNTUgLyBhbHBoYSwg
Z3JlZW4gKiAyNTUgLyBhbHBoYSwgYmx1ZSAqIDI1NSAvIGFscGhhLCBhbHBoYSk7CiAKLSAgICAg
ICAgdmlldy0+dXBkYXRlQmFja2dyb3VuZFJlY3Vyc2l2ZWx5KGNvbG9yLCAhYSk7CisgICAgICAg
IHZpZXctPnVwZGF0ZUJhY2tncm91bmRSZWN1cnNpdmVseShjb2xvciwgIWFscGhhKTsKICAgICB9
CiB9CiAKLXZvaWQgZXdrX3ZpZXdfYmdfY29sb3JfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvLCBp
bnQqIHIsIGludCogZywgaW50KiBiLCBpbnQqIGEpCit2b2lkIGV3a192aWV3X2JnX2NvbG9yX2dl
dChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldywgaW50KiByZWQsIGludCogZ3JlZW4sIGludCog
Ymx1ZSwgaW50KiBhbHBoYSkKIHsKLSAgICBpZiAocikKLSAgICAgICAgKnIgPSAwOwotICAgIGlm
IChnKQotICAgICAgICAqZyA9IDA7Ci0gICAgaWYgKGIpCi0gICAgICAgICpiID0gMDsKLSAgICBp
ZiAoYSkKLSAgICAgICAgKmEgPSAwOwotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywg
c2QpOwotICAgIGlmIChyKQotICAgICAgICAqciA9IHNkLT5iZ19jb2xvci5yOwotICAgIGlmIChn
KQotICAgICAgICAqZyA9IHNkLT5iZ19jb2xvci5nOwotICAgIGlmIChiKQotICAgICAgICAqYiA9
IHNkLT5iZ19jb2xvci5iOwotICAgIGlmIChhKQotICAgICAgICAqYSA9IHNkLT5iZ19jb2xvci5h
OworICAgIGlmIChyZWQpCisgICAgICAgICpyZWQgPSAwOworICAgIGlmIChncmVlbikKKyAgICAg
ICAgKmdyZWVuID0gMDsKKyAgICBpZiAoYmx1ZSkKKyAgICAgICAgKmJsdWUgPSAwOworICAgIGlm
IChhbHBoYSkKKyAgICAgICAgKmFscGhhID0gMDsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVU
VVJOKGV3a1ZpZXcsIHNkKTsKKyAgICBpZiAocmVkKQorICAgICAgICAqcmVkID0gc2QtPmJnX2Nv
bG9yLnI7CisgICAgaWYgKGdyZWVuKQorICAgICAgICAqZ3JlZW4gPSBzZC0+YmdfY29sb3IuZzsK
KyAgICBpZiAoYmx1ZSkKKyAgICAgICAgKmJsdWUgPSBzZC0+YmdfY29sb3IuYjsKKyAgICBpZiAo
YWxwaGEpCisgICAgICAgICphbHBoYSA9IHNkLT5iZ19jb2xvci5hOwogfQogCi1FaW5hX0Jvb2wg
ZXdrX3ZpZXdfdGV4dF9zZWFyY2goY29uc3QgRXZhc19PYmplY3QqIG8sIGNvbnN0IGNoYXIqIHN0
cmluZywgRWluYV9Cb29sIGNhc2Vfc2Vuc2l0aXZlLCBFaW5hX0Jvb2wgZm9yd2FyZCwgRWluYV9C
b29sIHdyYXApCitFaW5hX0Jvb2wgZXdrX3ZpZXdfdGV4dF9zZWFyY2goY29uc3QgRXZhc19PYmpl
Y3QqIGV3a1ZpZXcsIGNvbnN0IGNoYXIqIHN0cmluZywgRWluYV9Cb29sIGNhc2VTZW5zaXRpdmUs
IEVpbmFfQm9vbCBmb3J3YXJkLCBFaW5hX0Jvb2wgd3JhcCkKIHsKLSAgICBFV0tfVklFV19TRF9H
RVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1Jf
UkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFV0tfVklFV19QUklWX0dFVF9P
Ul9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOX1ZBTChzdHJpbmcsIEVJTkFfRkFMU0UpOwogICAgIFdURjo6VGV4dENhc2VTZW5zaXRp
dml0eSBzZW5zaXRpdmU7CiAgICAgV2ViQ29yZTo6RmluZERpcmVjdGlvbiBkaXJlY3Rpb247CiAK
LSAgICBpZiAoY2FzZV9zZW5zaXRpdmUpCisgICAgaWYgKGNhc2VTZW5zaXRpdmUpCiAgICAgICAg
IHNlbnNpdGl2ZSA9IFdURjo6VGV4dENhc2VTZW5zaXRpdmU7CiAgICAgZWxzZQogICAgICAgICBz
ZW5zaXRpdmUgPSBXVEY6OlRleHRDYXNlSW5zZW5zaXRpdmU7CkBAIC0xMzI1LDIwICsxMzI1LDIw
IEBAIEVpbmFfQm9vbCBld2tfdmlld190ZXh0X3NlYXJjaChjb25zdCBFdmFzX09iamVjdCogbywg
Y29uc3QgY2hhciogc3RyaW5nLCBFaW5hX0JvCiAgKgogICogQHBhcmFtIG8gdmlldyBvYmplY3Qg
d2hlcmUgdG8gc2VhcmNoIHRleHQuCiAgKiBAcGFyYW0gc3RyaW5nIHJlZmVyZW5jZSBzdHJpbmcg
dG8gbWF0Y2guCi0gKiBAcGFyYW0gY2FzZV9zZW5zaXRpdmUgaWYgbWF0Y2ggc2hvdWxkIGJlIGNh
c2Ugc2Vuc2l0aXZlIG9yIG5vdC4KKyAqIEBwYXJhbSBjYXNlU2Vuc2l0aXZlIGlmIG1hdGNoIHNo
b3VsZCBiZSBjYXNlIHNlbnNpdGl2ZSBvciBub3QuCiAgKiBAcGFyYW0gaGlnaGxpZ2h0IGlmIG1h
dGNoZXMgc2hvdWxkIGJlIGhpZ2hsaWdodGVkLgogICogQHBhcmFtIGxpbWl0IG1heGltdW0gYW1v
dW50IG9mIG1hdGNoZXMsIG9yIHplcm8gdG8gdW5saW1pdGVkLgogICoKICAqIEByZXR1cm4gbnVt
YmVyIG9mIG1hdGNoZXMuCiAgKi8KLXVuc2lnbmVkIGludCBld2tfdmlld190ZXh0X21hdGNoZXNf
bWFyayhFdmFzX09iamVjdCogbywgY29uc3QgY2hhciogc3RyaW5nLCBFaW5hX0Jvb2wgY2FzZV9z
ZW5zaXRpdmUsIEVpbmFfQm9vbCBoaWdobGlnaHQsIHVuc2lnbmVkIGludCBsaW1pdCkKK3Vuc2ln
bmVkIGludCBld2tfdmlld190ZXh0X21hdGNoZXNfbWFyayhFdmFzX09iamVjdCogZXdrVmlldywg
Y29uc3QgY2hhciogc3RyaW5nLCBFaW5hX0Jvb2wgY2FzZVNlbnNpdGl2ZSwgRWluYV9Cb29sIGhp
Z2hsaWdodCwgdW5zaWduZWQgaW50IGxpbWl0KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9S
RVRVUk4obywgc2QsIDApOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywg
c2QsIDApOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgMCk7CiAg
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHN0cmluZywgMCk7CiAgICAgV1RGOjpU
ZXh0Q2FzZVNlbnNpdGl2aXR5IHNlbnNpdGl2ZTsKIAotICAgIGlmIChjYXNlX3NlbnNpdGl2ZSkK
KyAgICBpZiAoY2FzZVNlbnNpdGl2ZSkKICAgICAgICAgc2Vuc2l0aXZlID0gV1RGOjpUZXh0Q2Fz
ZVNlbnNpdGl2ZTsKICAgICBlbHNlCiAgICAgICAgIHNlbnNpdGl2ZSA9IFdURjo6VGV4dENhc2VJ
bnNlbnNpdGl2ZTsKQEAgLTEzNDYsMzUgKzEzNDYsMzUgQEAgdW5zaWduZWQgaW50IGV3a192aWV3
X3RleHRfbWF0Y2hlc19tYXJrKEV2YXNfT2JqZWN0KiBvLCBjb25zdCBjaGFyKiBzdHJpbmcsIEVp
bmEKICAgICByZXR1cm4gcHJpdi0+cGFnZS0+bWFya0FsbE1hdGNoZXNGb3JUZXh0KFN0cmluZzo6
ZnJvbVVURjgoc3RyaW5nKSwgc2Vuc2l0aXZlLCBoaWdobGlnaHQsIGxpbWl0KTsKIH0KIAotRWlu
YV9Cb29sIGV3a192aWV3X3RleHRfbWF0Y2hlc191bm1hcmtfYWxsKEV2YXNfT2JqZWN0KiBvKQor
RWluYV9Cb29sIGV3a192aWV3X3RleHRfbWF0Y2hlc191bm1hcmtfYWxsKEV2YXNfT2JqZWN0KiBl
d2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFM
U0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFM
U0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxT
RSk7CiAgICAgcHJpdi0+cGFnZS0+dW5tYXJrQWxsVGV4dE1hdGNoZXMoKTsKICAgICByZXR1cm4g
RUlOQV9UUlVFOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfdGV4dF9tYXRjaGVzX2hpZ2hsaWdo
dF9zZXQoRXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCBoaWdobGlnaHQpCitFaW5hX0Jvb2wgZXdr
X3ZpZXdfdGV4dF9tYXRjaGVzX2hpZ2hsaWdodF9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVp
bmFfQm9vbCBoaWdobGlnaHQpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBz
ZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBz
ZCwgRUlOQV9GQUxTRSk7CiAgICAgcmV0dXJuIGV3a19mcmFtZV90ZXh0X21hdGNoZXNfaGlnaGxp
Z2h0X3NldChzZC0+bWFpbl9mcmFtZSwgaGlnaGxpZ2h0KTsKIH0KIAotRWluYV9Cb29sIGV3a192
aWV3X3RleHRfbWF0Y2hlc19oaWdobGlnaHRfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQorRWlu
YV9Cb29sIGV3a192aWV3X3RleHRfbWF0Y2hlc19oaWdobGlnaHRfZ2V0KGNvbnN0IEV2YXNfT2Jq
ZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJ
TkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJ
TkFfRkFMU0UpOwogICAgIHJldHVybiBld2tfZnJhbWVfdGV4dF9tYXRjaGVzX2hpZ2hsaWdodF9n
ZXQoc2QtPm1haW5fZnJhbWUpOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfZWRpdGFibGVfc2V0
KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wgZWRpdGFibGUpCitFaW5hX0Jvb2wgZXdrX3ZpZXdf
ZWRpdGFibGVfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wgZWRpdGFibGUpCiB7
Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAg
RVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAg
cmV0dXJuIGV3a19mcmFtZV9lZGl0YWJsZV9zZXQoc2QtPm1haW5fZnJhbWUsIGVkaXRhYmxlKTsK
IH0KIAotY2hhciogZXdrX3ZpZXdfc2VsZWN0aW9uX2dldChjb25zdCBFdmFzX09iamVjdCogbykK
K2NoYXIqIGV3a192aWV3X3NlbGVjdGlvbl9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcp
CiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgMCk7CisgICAgRVdLX1ZJ
RVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgMCk7CiAgICAgRVdLX1ZJRVdfUFJJVl9H
RVRfT1JfUkVUVVJOKHNkLCBwcml2LCAwKTsKICAgICBDU3RyaW5nIHMgPSBwcml2LT5wYWdlLT5m
b2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCktPmVkaXRvcigpLT5zZWxlY3Rl
ZFRleHQoKS51dGY4KCk7CiAgICAgaWYgKHMuaXNOdWxsKCkpCkBAIC0xMzg3LDkgKzEzODcsOSBA
QCBzdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19lZGl0b3JfY29tbWFuZChFd2tfVmlld19Qcml2
YXRlX0RhdGEqIHByaXYsIGNvbnN0IGNoYQogICAgIHJldHVybiBwcml2LT5wYWdlLT5mb2N1c0Nv
bnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCktPmVkaXRvcigpLT5jb21tYW5kKFdURjo6
U3RyaW5nOjpmcm9tVVRGOChjb21tYW5kKSkuZXhlY3V0ZSh2YWx1ZSk7CiB9CiAKLUVpbmFfQm9v
bCBld2tfdmlld19leGVjdXRlX2VkaXRvcl9jb21tYW5kKEV2YXNfT2JqZWN0KiBvLCBjb25zdCBF
d2tfRWRpdG9yX0NvbW1hbmQgY29tbWFuZCwgY29uc3QgY2hhciogdmFsdWUpCitFaW5hX0Jvb2wg
ZXdrX3ZpZXdfZXhlY3V0ZV9lZGl0b3JfY29tbWFuZChFdmFzX09iamVjdCogZXdrVmlldywgY29u
c3QgRXdrX0VkaXRvcl9Db21tYW5kIGNvbW1hbmQsIGNvbnN0IGNoYXIqIHZhbHVlKQogewotICAg
IEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19W
SUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVXS19W
SUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CiAKICAgICBzd2l0
Y2ggKGNvbW1hbmQpIHsKQEAgLTE0MTQsMTAgKzE0MTQsMTAgQEAgRWluYV9Cb29sIGV3a192aWV3
X2V4ZWN1dGVfZWRpdG9yX2NvbW1hbmQoRXZhc19PYmplY3QqIG8sIGNvbnN0IEV3a19FZGl0b3Jf
Q29tbWEKICAgICB9CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld19jb250ZXh0X21lbnVfZm9yd2Fy
ZF9ldmVudChFdmFzX09iamVjdCogbywgY29uc3QgRXZhc19FdmVudF9Nb3VzZV9Eb3duKiBldikK
K0VpbmFfQm9vbCBld2tfdmlld19jb250ZXh0X21lbnVfZm9yd2FyZF9ldmVudChFdmFzX09iamVj
dCogZXdrVmlldywgY29uc3QgRXZhc19FdmVudF9Nb3VzZV9Eb3duKiBkb3duRXZlbnQpCiB7CiAj
aWYgRU5BQkxFKENPTlRFWFRfTUVOVVMpCi0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihv
LCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3
LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBw
cml2LCBFSU5BX0ZBTFNFKTsKICAgICBFaW5hX0Jvb2wgbW91c2VfcHJlc3NfaGFuZGxlZCA9IEVJ
TkFfRkFMU0U7CiAKQEAgLTE0MjYsNyArMTQyNiw3IEBAIEVpbmFfQm9vbCBld2tfdmlld19jb250
ZXh0X21lbnVfZm9yd2FyZF9ldmVudChFdmFzX09iamVjdCogbywgY29uc3QgRXZhc19FdmVudF9N
CiAgICAgRXZhc19Db29yZCB4LCB5OwogICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldChzZC0+
c2VsZiwgJngsICZ5LCAwLCAwKTsKIAotICAgIFdlYkNvcmU6OlBsYXRmb3JtTW91c2VFdmVudCBl
dmVudChldiwgV2ViQ29yZTo6SW50UG9pbnQoeCwgeSkpOworICAgIFdlYkNvcmU6OlBsYXRmb3Jt
TW91c2VFdmVudCBldmVudChkb3duRXZlbnQsIFdlYkNvcmU6OkludFBvaW50KHgsIHkpKTsKIAog
ICAgIGlmIChtYWluX2ZyYW1lLT52aWV3KCkpIHsKICAgICAgICAgbW91c2VfcHJlc3NfaGFuZGxl
ZCA9CkBAIC0xNDUwLDg1ICsxNDUwLDg1IEBAIEVpbmFfQm9vbCBld2tfdmlld19jb250ZXh0X21l
bnVfZm9yd2FyZF9ldmVudChFdmFzX09iamVjdCogbywgY29uc3QgRXZhc19FdmVudF9NCiAjZW5k
aWYKIH0KIAotZG91YmxlIGV3a192aWV3X2xvYWRfcHJvZ3Jlc3NfZ2V0KGNvbnN0IEV2YXNfT2Jq
ZWN0KiBvKQorZG91YmxlIGV3a192aWV3X2xvYWRfcHJvZ3Jlc3NfZ2V0KGNvbnN0IEV2YXNfT2Jq
ZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIC0x
LjApOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIC0xLjApOwog
ICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgLTEuMCk7CiAgICAgcmV0
dXJuIHByaXYtPnBhZ2UtPnByb2dyZXNzKCktPmVzdGltYXRlZFByb2dyZXNzKCk7CiB9CiAKLUVp
bmFfQm9vbCBld2tfdmlld19zdG9wKEV2YXNfT2JqZWN0KiBvKQorRWluYV9Cb29sIGV3a192aWV3
X3N0b3AoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JF
VFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihl
d2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgcmV0dXJuIGV3a19mcmFtZV9zdG9wKHNkLT5t
YWluX2ZyYW1lKTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3JlbG9hZChFdmFzX09iamVjdCog
bykKK0VpbmFfQm9vbCBld2tfdmlld19yZWxvYWQoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0g
ICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdL
X1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgcmV0
dXJuIGV3a19mcmFtZV9yZWxvYWQoc2QtPm1haW5fZnJhbWUpOwogfQogCi1FaW5hX0Jvb2wgZXdr
X3ZpZXdfcmVsb2FkX2Z1bGwoRXZhc19PYmplY3QqIG8pCitFaW5hX0Jvb2wgZXdrX3ZpZXdfcmVs
b2FkX2Z1bGwoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
Tihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgcmV0dXJuIGV3a19mcmFtZV9yZWxvYWRf
ZnVsbChzZC0+bWFpbl9mcmFtZSk7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld19iYWNrKEV2YXNf
T2JqZWN0KiBvKQorRWluYV9Cb29sIGV3a192aWV3X2JhY2soRXZhc19PYmplY3QqIGV3a1ZpZXcp
CiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7Cisg
ICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAg
ICAgcmV0dXJuIGV3a19mcmFtZV9iYWNrKHNkLT5tYWluX2ZyYW1lKTsKIH0KIAotRWluYV9Cb29s
IGV3a192aWV3X2ZvcndhcmQoRXZhc19PYmplY3QqIG8pCitFaW5hX0Jvb2wgZXdrX3ZpZXdfZm9y
d2FyZChFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVU
VVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3
a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICByZXR1cm4gZXdrX2ZyYW1lX2ZvcndhcmQoc2Qt
Pm1haW5fZnJhbWUpOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfbmF2aWdhdGUoRXZhc19PYmpl
Y3QqIG8sIGludCBzdGVwcykKK0VpbmFfQm9vbCBld2tfdmlld19uYXZpZ2F0ZShFdmFzX09iamVj
dCogZXdrVmlldywgaW50IHN0ZXBzKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
bywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmll
dywgc2QsIEVJTkFfRkFMU0UpOwogICAgIHJldHVybiBld2tfZnJhbWVfbmF2aWdhdGUoc2QtPm1h
aW5fZnJhbWUsIHN0ZXBzKTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X2JhY2tfcG9zc2libGUo
RXZhc19PYmplY3QqIG8pCitFaW5hX0Jvb2wgZXdrX3ZpZXdfYmFja19wb3NzaWJsZShFdmFzX09i
amVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBF
SU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBF
SU5BX0ZBTFNFKTsKICAgICByZXR1cm4gZXdrX2ZyYW1lX2JhY2tfcG9zc2libGUoc2QtPm1haW5f
ZnJhbWUpOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfZm9yd2FyZF9wb3NzaWJsZShFdmFzX09i
amVjdCogbykKK0VpbmFfQm9vbCBld2tfdmlld19mb3J3YXJkX3Bvc3NpYmxlKEV2YXNfT2JqZWN0
KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFf
RkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFf
RkFMU0UpOwogICAgIHJldHVybiBld2tfZnJhbWVfZm9yd2FyZF9wb3NzaWJsZShzZC0+bWFpbl9m
cmFtZSk7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld19uYXZpZ2F0ZV9wb3NzaWJsZShFdmFzX09i
amVjdCogbywgaW50IHN0ZXBzKQorRWluYV9Cb29sIGV3a192aWV3X25hdmlnYXRlX3Bvc3NpYmxl
KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBpbnQgc3RlcHMpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JF
VFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgcmV0dXJuIGV3a19mcmFtZV9uYXZp
Z2F0ZV9wb3NzaWJsZShzZC0+bWFpbl9mcmFtZSwgc3RlcHMpOwogfQogCi1FaW5hX0Jvb2wgZXdr
X3ZpZXdfaGlzdG9yeV9lbmFibGVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQorRWluYV9Cb29s
IGV3a192aWV3X2hpc3RvcnlfZW5hYmxlX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykK
IHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAg
ICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwogICAg
IHJldHVybiBzdGF0aWNfY2FzdDxXZWJDb3JlOjpCYWNrRm9yd2FyZExpc3RJbXBsKj4ocHJpdi0+
cGFnZS0+YmFja0ZvcndhcmRMaXN0KCkpLT5lbmFibGVkKCk7CiB9CiAKLUVpbmFfQm9vbCBld2tf
dmlld19oaXN0b3J5X2VuYWJsZV9zZXQoRXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCBlbmFibGUp
CitFaW5hX0Jvb2wgZXdrX3ZpZXdfaGlzdG9yeV9lbmFibGVfc2V0KEV2YXNfT2JqZWN0KiBld2tW
aWV3LCBFaW5hX0Jvb2wgZW5hYmxlKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
bywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmll
dywgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwg
cHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgc3RhdGljX2Nhc3Q8V2ViQ29yZTo6QmFja0ZvcndhcmRM
aXN0SW1wbCo+KHByaXYtPnBhZ2UtPmJhY2tGb3J3YXJkTGlzdCgpKS0+c2V0RW5hYmxlZChlbmFi
bGUpOwogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLUV3a19IaXN0b3J5KiBld2tfdmlld19o
aXN0b3J5X2dldChjb25zdCBFdmFzX09iamVjdCogbykKK0V3a19IaXN0b3J5KiBld2tfdmlld19o
aXN0b3J5X2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19T
RF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAwKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJO
KGV3a1ZpZXcsIHNkLCAwKTsKICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHBy
aXYsIDApOwogICAgIGlmICghc3RhdGljX2Nhc3Q8V2ViQ29yZTo6QmFja0ZvcndhcmRMaXN0SW1w
bCo+KHByaXYtPnBhZ2UtPmJhY2tGb3J3YXJkTGlzdCgpKS0+ZW5hYmxlZCgpKSB7CiAgICAgICAg
IEVSUigiYXNrZWQgaGlzdG9yeSwgYnV0IGl0J3MgZGlzYWJsZWQhIFJldHVybmluZyAwISIpOwpA
QCAtMTUzNywxNSArMTUzNywxNSBAQCBFd2tfSGlzdG9yeSogZXdrX3ZpZXdfaGlzdG9yeV9nZXQo
Y29uc3QgRXZhc19PYmplY3QqIG8pCiAgICAgcmV0dXJuIHByaXYtPmhpc3Rvcnk7CiB9CiAKLWZs
b2F0IGV3a192aWV3X3pvb21fZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQorZmxvYXQgZXdrX3Zp
ZXdfem9vbV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihvLCBzZCwgLTEuMCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JF
VFVSTihld2tWaWV3LCBzZCwgLTEuMCk7CiAgICAgcmV0dXJuIGV3a19mcmFtZV96b29tX2dldChz
ZC0+bWFpbl9mcmFtZSk7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld196b29tX3NldChFdmFzX09i
amVjdCogbywgZmxvYXQgem9vbSwgRXZhc19Db29yZCBjeCwgRXZhc19Db29yZCBjeSkKK0VpbmFf
Qm9vbCBld2tfdmlld196b29tX3NldChFdmFzX09iamVjdCogZXdrVmlldywgZmxvYXQgem9vbSwg
RXZhc19Db29yZCBjeCwgRXZhc19Db29yZCBjeSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1Jf
UkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJO
KGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFV0tfVklFV19QUklWX0dFVChzZCwgcHJp
dik7CiAKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmFwaSwgRUlOQV9G
QUxTRSk7CkBAIC0xNTY5LDI3ICsxNTY5LDI3IEBAIEVpbmFfQm9vbCBld2tfdmlld196b29tX3Nl
dChFdmFzX09iamVjdCogbywgZmxvYXQgem9vbSwgRXZhc19Db29yZCBjeCwgRXZhc19Db29yCiAg
ICAgcmV0dXJuIHNkLT5hcGktPnpvb21fc2V0KHNkLCB6b29tLCBjeCwgY3kpOwogfQogCi1FaW5h
X0Jvb2wgZXdrX3ZpZXdfem9vbV93ZWFrX3Ntb290aF9zY2FsZV9nZXQoY29uc3QgRXZhc19PYmpl
Y3QqIG8pCitFaW5hX0Jvb2wgZXdrX3ZpZXdfem9vbV93ZWFrX3Ntb290aF9zY2FsZV9nZXQoY29u
c3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
TihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tW
aWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgcmV0dXJuIHNkLT56b29tX3dlYWtfc21vb3RoX3Nj
YWxlOwogfQogCi12b2lkIGV3a192aWV3X3pvb21fd2Vha19zbW9vdGhfc2NhbGVfc2V0KEV2YXNf
T2JqZWN0KiBvLCBFaW5hX0Jvb2wgc21vb3RoX3NjYWxlKQordm9pZCBld2tfdmlld196b29tX3dl
YWtfc21vb3RoX3NjYWxlX3NldChFdmFzX09iamVjdCogZXdrVmlldywgRWluYV9Cb29sIHNtb290
aFNjYWxlKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QpOwotICAgIHNt
b290aF9zY2FsZSA9ICEhc21vb3RoX3NjYWxlOwotICAgIGlmIChzZC0+em9vbV93ZWFrX3Ntb290
aF9zY2FsZSA9PSBzbW9vdGhfc2NhbGUpCisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihl
d2tWaWV3LCBzZCk7CisgICAgc21vb3RoU2NhbGUgPSAhIXNtb290aFNjYWxlOworICAgIGlmIChz
ZC0+em9vbV93ZWFrX3Ntb290aF9zY2FsZSA9PSBzbW9vdGhTY2FsZSkKICAgICAgICAgcmV0dXJu
OwotICAgIHNkLT56b29tX3dlYWtfc21vb3RoX3NjYWxlID0gc21vb3RoX3NjYWxlOworICAgIHNk
LT56b29tX3dlYWtfc21vb3RoX3NjYWxlID0gc21vb3RoU2NhbGU7CiAgICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk4oc2QtPmFwaSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4o
c2QtPmFwaS0+em9vbV93ZWFrX3Ntb290aF9zY2FsZV9zZXQpOwotICAgIHNkLT5hcGktPnpvb21f
d2Vha19zbW9vdGhfc2NhbGVfc2V0KHNkLCBzbW9vdGhfc2NhbGUpOworICAgIHNkLT5hcGktPnpv
b21fd2Vha19zbW9vdGhfc2NhbGVfc2V0KHNkLCBzbW9vdGhTY2FsZSk7CiB9CiAKLUVpbmFfQm9v
bCBld2tfdmlld196b29tX3dlYWtfc2V0KEV2YXNfT2JqZWN0KiBvLCBmbG9hdCB6b29tLCBFdmFz
X0Nvb3JkIGN4LCBFdmFzX0Nvb3JkIGN5KQorRWluYV9Cb29sIGV3a192aWV3X3pvb21fd2Vha19z
ZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGZsb2F0IHpvb20sIEV2YXNfQ29vcmQgY2VudGVyWCwg
RXZhc19Db29yZCBjZW50ZXJZKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywg
c2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywg
c2QsIEVJTkFfRkFMU0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUKHNkLCBwcml2KTsKIAogICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+YXBpLCBFSU5BX0ZBTFNFKTsKQEAg
LTE2MTIsNDEgKzE2MTIsNDEgQEAgRWluYV9Cb29sIGV3a192aWV3X3pvb21fd2Vha19zZXQoRXZh
c19PYmplY3QqIG8sIGZsb2F0IHpvb20sIEV2YXNfQ29vcmQgY3gsIEV2YXMKICAgICBzZC0+YW5p
bWF0ZWRfem9vbS56b29tLnN0YXJ0ID0gZXdrX2ZyYW1lX3pvb21fZ2V0KHNkLT5tYWluX2ZyYW1l
KTsKICAgICBzZC0+YW5pbWF0ZWRfem9vbS56b29tLmVuZCA9IHpvb207CiAgICAgc2QtPmFuaW1h
dGVkX3pvb20uem9vbS5jdXJyZW50ID0gem9vbTsKLSAgICByZXR1cm4gc2QtPmFwaS0+em9vbV93
ZWFrX3NldChzZCwgem9vbSwgY3gsIGN5KTsKKyAgICByZXR1cm4gc2QtPmFwaS0+em9vbV93ZWFr
X3NldChzZCwgem9vbSwgY2VudGVyWCwgY2VudGVyWSk7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmll
d196b29tX2FuaW1hdGVkX21hcmtfc3RhcnQoRXZhc19PYmplY3QqIG8sIGZsb2F0IHpvb20pCitF
aW5hX0Jvb2wgZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9tYXJrX3N0YXJ0KEV2YXNfT2JqZWN0KiBl
d2tWaWV3LCBmbG9hdCB6b29tKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywg
c2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywg
c2QsIEVJTkFfRkFMU0UpOwogICAgIHNkLT5hbmltYXRlZF96b29tLnpvb20uc3RhcnQgPSB6b29t
OwogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld196b29tX2Fu
aW1hdGVkX21hcmtfZW5kKEV2YXNfT2JqZWN0KiBvLCBmbG9hdCB6b29tKQorRWluYV9Cb29sIGV3
a192aWV3X3pvb21fYW5pbWF0ZWRfbWFya19lbmQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGZsb2F0
IHpvb20pCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxT
RSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxT
RSk7CiAgICAgc2QtPmFuaW1hdGVkX3pvb20uem9vbS5lbmQgPSB6b29tOwogICAgIHJldHVybiBF
SU5BX1RSVUU7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld196b29tX2FuaW1hdGVkX21hcmtfY3Vy
cmVudChFdmFzX09iamVjdCogbywgZmxvYXQgem9vbSkKK0VpbmFfQm9vbCBld2tfdmlld196b29t
X2FuaW1hdGVkX21hcmtfY3VycmVudChFdmFzX09iamVjdCogZXdrVmlldywgZmxvYXQgem9vbSkK
IHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAg
ICBzZC0+YW5pbWF0ZWRfem9vbS56b29tLmN1cnJlbnQgPSB6b29tOwogICAgIHJldHVybiBFSU5B
X1RSVUU7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld196b29tX2FuaW1hdGVkX21hcmtfc3RvcChF
dmFzX09iamVjdCogbykKK0VpbmFfQm9vbCBld2tfdmlld196b29tX2FuaW1hdGVkX21hcmtfc3Rv
cChFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJO
KG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1Zp
ZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBfZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9tYXJrX3N0
b3Aoc2QpOwogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld196
b29tX2FuaW1hdGVkX3NldChFdmFzX09iamVjdCogbywgZmxvYXQgem9vbSwgZmxvYXQgZHVyYXRp
b24sIEV2YXNfQ29vcmQgY3gsIEV2YXNfQ29vcmQgY3kpCitFaW5hX0Jvb2wgZXdrX3ZpZXdfem9v
bV9hbmltYXRlZF9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGZsb2F0IHpvb20sIGZsb2F0IGR1
cmF0aW9uLCBFdmFzX0Nvb3JkIGNlbnRlclgsIEV2YXNfQ29vcmQgY2VudGVyWSkKIHsKICAgICBk
b3VibGUgbm93OwotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFM
U0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFM
U0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxT
RSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5hcGksIEVJTkFfRkFM
U0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+YXBpLT56b29tX3dl
YWtfc2V0LCBFSU5BX0ZBTFNFKTsKQEAgLTE2NzIsMTAgKzE2NzIsMTAgQEAgRWluYV9Cb29sIGV3
a192aWV3X3pvb21fYW5pbWF0ZWRfc2V0KEV2YXNfT2JqZWN0KiBvLCBmbG9hdCB6b29tLCBmbG9h
dCBkdXJhdGlvbiwKICAgICAgICAgX2V3a192aWV3X3pvb21fYW5pbWF0aW9uX3N0YXJ0KHNkKTsK
ICAgICB9CiAKLSAgICBpZiAoY3ggPCAwKQotICAgICAgICBjeCA9IDA7Ci0gICAgaWYgKGN5IDwg
MCkKLSAgICAgICAgY3kgPSAwOworICAgIGlmIChjZW50ZXJYIDwgMCkKKyAgICAgICAgY2VudGVy
WCA9IDA7CisgICAgaWYgKGNlbnRlclkgPCAwKQorICAgICAgICBjZW50ZXJZID0gMDsKIAogICAg
IG5vdyA9IGVjb3JlX2xvb3BfdGltZV9nZXQoKTsKICAgICBwcml2LT5hbmltYXRlZF96b29tLnRp
bWUuc3RhcnQgPSBub3c7CkBAIC0xNjgzLDggKzE2ODMsOCBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdf
em9vbV9hbmltYXRlZF9zZXQoRXZhc19PYmplY3QqIG8sIGZsb2F0IHpvb20sIGZsb2F0IGR1cmF0
aW9uLAogICAgIHByaXYtPmFuaW1hdGVkX3pvb20udGltZS5kdXJhdGlvbiA9IGR1cmF0aW9uOwog
ICAgIHByaXYtPmFuaW1hdGVkX3pvb20uem9vbS5lbmQgPSB6b29tOwogICAgIHByaXYtPmFuaW1h
dGVkX3pvb20uem9vbS5yYW5nZSA9IChwcml2LT5hbmltYXRlZF96b29tLnpvb20uZW5kIC0gcHJp
di0+YW5pbWF0ZWRfem9vbS56b29tLnN0YXJ0KTsKLSAgICBwcml2LT5hbmltYXRlZF96b29tLmNl
bnRlci54ID0gY3g7Ci0gICAgcHJpdi0+YW5pbWF0ZWRfem9vbS5jZW50ZXIueSA9IGN5OworICAg
IHByaXYtPmFuaW1hdGVkX3pvb20uY2VudGVyLnggPSBjZW50ZXJYOworICAgIHByaXYtPmFuaW1h
dGVkX3pvb20uY2VudGVyLnkgPSBjZW50ZXJZOwogICAgIHNkLT5hbmltYXRlZF96b29tLnpvb20u
Y3VycmVudCA9IHByaXYtPmFuaW1hdGVkX3pvb20uem9vbS5zdGFydDsKICAgICBzZC0+YW5pbWF0
ZWRfem9vbS56b29tLnN0YXJ0ID0gcHJpdi0+YW5pbWF0ZWRfem9vbS56b29tLnN0YXJ0OwogICAg
IHNkLT5hbmltYXRlZF96b29tLnpvb20uZW5kID0gcHJpdi0+YW5pbWF0ZWRfem9vbS56b29tLmVu
ZDsKQEAgLTE2OTIsMjEgKzE2OTIsMjEgQEAgRWluYV9Cb29sIGV3a192aWV3X3pvb21fYW5pbWF0
ZWRfc2V0KEV2YXNfT2JqZWN0KiBvLCBmbG9hdCB6b29tLCBmbG9hdCBkdXJhdGlvbiwKICAgICBy
ZXR1cm4gRUlOQV9UUlVFOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfem9vbV90ZXh0X29ubHlf
Z2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQorRWluYV9Cb29sIGV3a192aWV3X3pvb21fdGV4dF9v
bmx5X2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9H
RVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1Jf
UkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICByZXR1cm4gZXdrX2ZyYW1lX3pv
b21fdGV4dF9vbmx5X2dldChzZC0+bWFpbl9mcmFtZSk7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmll
d196b29tX3RleHRfb25seV9zZXQoRXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCBzZXR0aW5nKQor
RWluYV9Cb29sIGV3a192aWV3X3pvb21fdGV4dF9vbmx5X3NldChFdmFzX09iamVjdCogZXdrVmll
dywgRWluYV9Cb29sIHNldHRpbmcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihv
LCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3
LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgcmV0dXJuIGV3a19mcmFtZV96b29tX3RleHRfb25seV9z
ZXQoc2QtPm1haW5fZnJhbWUsIHNldHRpbmcpOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfcHJl
X3JlbmRlcl9yZWdpb24oRXZhc19PYmplY3QqIG8sIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5
LCBFdmFzX0Nvb3JkIHcsIEV2YXNfQ29vcmQgaCwgZmxvYXQgem9vbSkKK0VpbmFfQm9vbCBld2tf
dmlld19wcmVfcmVuZGVyX3JlZ2lvbihFdmFzX09iamVjdCogZXdrVmlldywgRXZhc19Db29yZCB4
LCBFdmFzX0Nvb3JkIHksIEV2YXNfQ29vcmQgd2lkdGgsIEV2YXNfQ29vcmQgaGVpZ2h0LCBmbG9h
dCB6b29tKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFM
U0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFM
U0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxT
RSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5hcGktPnByZV9yZW5k
ZXJfcmVnaW9uLCBFSU5BX0ZBTFNFKTsKICAgICBmbG9hdCBjdXJfem9vbTsKQEAgLTE3MjcsMjkg
KzE3MjcsMjkgQEAgRWluYV9Cb29sIGV3a192aWV3X3ByZV9yZW5kZXJfcmVnaW9uKEV2YXNfT2Jq
ZWN0KiBvLCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwKIAogICAgIGN3ICo9IHpvb20gLyBj
dXJfem9vbTsKICAgICBjaCAqPSB6b29tIC8gY3VyX3pvb207Ci0gICAgREJHKCJyZWdpb24gJWQs
JWQrJWR4JWQgQCAlZiBjb250ZW50cz0lZHglZCIsIHgsIHksIHcsIGgsIHpvb20sIGN3LCBjaCk7
CisgICAgREJHKCJyZWdpb24gJWQsJWQrJWR4JWQgQCAlZiBjb250ZW50cz0lZHglZCIsIHgsIHks
IHdpZHRoLCBoZWlnaHQsIHpvb20sIGN3LCBjaCk7CiAKLSAgICBpZiAoeCArIHcgPiBjdykKLSAg
ICAgICAgdyA9IGN3IC0geDsKKyAgICBpZiAoeCArIHdpZHRoID4gY3cpCisgICAgICAgIHdpZHRo
ID0gY3cgLSB4OwogCi0gICAgaWYgKHkgKyBoID4gY2gpCi0gICAgICAgIGggPSBjaCAtIHk7Cisg
ICAgaWYgKHkgKyBoZWlnaHQgPiBjaCkKKyAgICAgICAgaGVpZ2h0ID0gY2ggLSB5OwogCiAgICAg
aWYgKHggPCAwKSB7Ci0gICAgICAgIHcgKz0geDsKKyAgICAgICAgd2lkdGggKz0geDsKICAgICAg
ICAgeCA9IDA7CiAgICAgfQogICAgIGlmICh5IDwgMCkgewotICAgICAgICBoICs9IHk7CisgICAg
ICAgIGhlaWdodCArPSB5OwogICAgICAgICB5ID0gMDsKICAgICB9CiAKLSAgICByZXR1cm4gc2Qt
PmFwaS0+cHJlX3JlbmRlcl9yZWdpb24oc2QsIHgsIHksIHcsIGgsIHpvb20pOworICAgIHJldHVy
biBzZC0+YXBpLT5wcmVfcmVuZGVyX3JlZ2lvbihzZCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgem9v
bSk7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld19wcmVfcmVuZGVyX3JlbGF0aXZlX3JhZGl1cyhF
dmFzX09iamVjdCogbywgdW5zaWduZWQgaW50IG4pCitFaW5hX0Jvb2wgZXdrX3ZpZXdfcHJlX3Jl
bmRlcl9yZWxhdGl2ZV9yYWRpdXMoRXZhc19PYmplY3QqIGV3a1ZpZXcsIHVuc2lnbmVkIGludCBu
dW1iZXIpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxT
RSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxT
RSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNF
KTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmFwaS0+cHJlX3JlbmRl
cl9yZWxhdGl2ZV9yYWRpdXMsIEVJTkFfRkFMU0UpOwogICAgIGZsb2F0IGN1cl96b29tOwpAQCAt
MTc1OCw2NSArMTc1OCw2NSBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfcHJlX3JlbmRlcl9yZWxhdGl2
ZV9yYWRpdXMoRXZhc19PYmplY3QqIG8sIHVuc2lnbmVkIGludCBuKQogICAgICAgICByZXR1cm4g
RUlOQV9GQUxTRTsKIAogICAgIGN1cl96b29tID0gZXdrX2ZyYW1lX3pvb21fZ2V0KHNkLT5tYWlu
X2ZyYW1lKTsKLSAgICByZXR1cm4gc2QtPmFwaS0+cHJlX3JlbmRlcl9yZWxhdGl2ZV9yYWRpdXMo
c2QsIG4sIGN1cl96b29tKTsKKyAgICByZXR1cm4gc2QtPmFwaS0+cHJlX3JlbmRlcl9yZWxhdGl2
ZV9yYWRpdXMoc2QsIG51bWJlciwgY3VyX3pvb20pOwogfQogCi11bnNpZ25lZCBpbnQgZXdrX3Zp
ZXdfaW1oX2dldChjb25zdCBFdmFzX09iamVjdCogbykKK3Vuc2lnbmVkIGludCBld2tfdmlld19p
bWhfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dF
VF9PUl9SRVRVUk4obywgc2QsIDApOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdr
Vmlldywgc2QsIDApOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwg
MCk7CiAgICAgcmV0dXJuIHByaXYtPmltaDsKIH0KIAotdm9pZCBld2tfdmlld19wcmVfcmVuZGVy
X2NhbmNlbChFdmFzX09iamVjdCogbykKK3ZvaWQgZXdrX3ZpZXdfcHJlX3JlbmRlcl9jYW5jZWwo
RXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihv
LCBzZCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCk7CiAgICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFwaS0+cHJlX3JlbmRlcl9jYW5jZWwpOwog
ICAgIHNkLT5hcGktPnByZV9yZW5kZXJfY2FuY2VsKHNkKTsKIH0KIAotRWluYV9Cb29sIGV3a192
aWV3X2VuYWJsZV9yZW5kZXIoY29uc3QgRXZhc19PYmplY3QqIG8pCitFaW5hX0Jvb2wgZXdrX3Zp
ZXdfZW5hYmxlX3JlbmRlcihjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tf
VklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19T
RF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmFwaS0+ZW5hYmxlX3JlbmRlciwgRUlOQV9GQUxTRSk7
CiAgICAgcmV0dXJuIHNkLT5hcGktPmVuYWJsZV9yZW5kZXIoc2QpOwogfQogCi1FaW5hX0Jvb2wg
ZXdrX3ZpZXdfZGlzYWJsZV9yZW5kZXIoY29uc3QgRXZhc19PYmplY3QqIG8pCitFaW5hX0Jvb2wg
ZXdrX3ZpZXdfZGlzYWJsZV9yZW5kZXIoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0g
ICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdL
X1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5hcGktPmRpc2FibGVfcmVuZGVyLCBFSU5B
X0ZBTFNFKTsKICAgICByZXR1cm4gc2QtPmFwaS0+ZGlzYWJsZV9yZW5kZXIoc2QpOwogfQogCi1j
b25zdCBjaGFyKiBld2tfdmlld19zZXR0aW5nX3VzZXJfYWdlbnRfZ2V0KGNvbnN0IEV2YXNfT2Jq
ZWN0KiBvKQorY29uc3QgY2hhciogZXdrX3ZpZXdfc2V0dGluZ191c2VyX2FnZW50X2dldChjb25z
dCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJO
KG8sIHNkLCAwKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAw
KTsKICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIDApOwogICAgIHJl
dHVybiBwcml2LT5zZXR0aW5ncy51c2VyX2FnZW50OwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdf
c2V0dGluZ191c2VyX2FnZW50X3NldChFdmFzX09iamVjdCogbywgY29uc3QgY2hhciogdXNlcl9h
Z2VudCkKK0VpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX3VzZXJfYWdlbnRfc2V0KEV2YXNfT2Jq
ZWN0KiBld2tWaWV3LCBjb25zdCBjaGFyKiB1c2VyQWdlbnQpCiB7Ci0gICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRf
T1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKLSAgICBpZiAoZWluYV9zdHJpbmdzaGFy
ZV9yZXBsYWNlKCZwcml2LT5zZXR0aW5ncy51c2VyX2FnZW50LCB1c2VyX2FnZW50KSkgeworICAg
IGlmIChlaW5hX3N0cmluZ3NoYXJlX3JlcGxhY2UoJnByaXYtPnNldHRpbmdzLnVzZXJfYWdlbnQs
IHVzZXJBZ2VudCkpIHsKICAgICAgICAgV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRFZmwqIGNs
aWVudCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50RWZsKj4ocHJpdi0+
bWFpbl9mcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpKTsKLSAgICAgICAgY2xpZW50LT5zZXRDdXN0
b21Vc2VyQWdlbnQoU3RyaW5nOjpmcm9tVVRGOCh1c2VyX2FnZW50KSk7CisgICAgICAgIGNsaWVu
dC0+c2V0Q3VzdG9tVXNlckFnZW50KFN0cmluZzo6ZnJvbVVURjgodXNlckFnZW50KSk7CiAgICAg
fQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLWNvbnN0IGNoYXIqIGV3a192aWV3X3NldHRp
bmdfdXNlcl9zdHlsZXNoZWV0X2dldChjb25zdCBFdmFzX09iamVjdCogbykKK2NvbnN0IGNoYXIq
IGV3a192aWV3X3NldHRpbmdfdXNlcl9zdHlsZXNoZWV0X2dldChjb25zdCBFdmFzX09iamVjdCog
ZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAwKTsKKyAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAwKTsKICAgICBFV0tfVklF
V19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIDApOwogICAgIHJldHVybiBwcml2LT5zZXR0
aW5ncy51c2VyX3N0eWxlc2hlZXQ7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX3Vz
ZXJfc3R5bGVzaGVldF9zZXQoRXZhc19PYmplY3QqIG8sIGNvbnN0IGNoYXIqIHVyaSkKK0VpbmFf
Qm9vbCBld2tfdmlld19zZXR0aW5nX3VzZXJfc3R5bGVzaGVldF9zZXQoRXZhc19PYmplY3QqIGV3
a1ZpZXcsIGNvbnN0IGNoYXIqIHVyaSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJO
KG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1Zp
ZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2Qs
IHByaXYsIEVJTkFfRkFMU0UpOwogICAgIGlmIChlaW5hX3N0cmluZ3NoYXJlX3JlcGxhY2UoJnBy
aXYtPnNldHRpbmdzLnVzZXJfc3R5bGVzaGVldCwgdXJpKSkgewogICAgICAgICBXZWJDb3JlOjpL
VVJMIGt1cmwoV2ViQ29yZTo6S1VSTCgpLCBTdHJpbmc6OmZyb21VVEY4KHVyaSkpOwpAQCAtMTgy
NSwxNiArMTgyNSwxNiBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ191c2VyX3N0eWxlc2hl
ZXRfc2V0KEV2YXNfT2JqZWN0KiBvLCBjb25zdCBjaGFyKiB1cmkpCiAgICAgcmV0dXJuIEVJTkFf
VFJVRTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfYXV0b19sb2FkX2ltYWdlc19n
ZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCitFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19hdXRv
X2xvYWRfaW1hZ2VzX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tf
VklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19T
RF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFV0tfVklFV19Q
UklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIHJldHVybiBwcml2
LT5zZXR0aW5ncy5hdXRvX2xvYWRfaW1hZ2VzOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0
dGluZ19hdXRvX2xvYWRfaW1hZ2VzX3NldChFdmFzX09iamVjdCogbywgRWluYV9Cb29sIGF1dG9t
YXRpYykKK0VpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2F1dG9fbG9hZF9pbWFnZXNfc2V0KEV2
YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wgYXV0b21hdGljKQogewotICAgIEVXS19WSUVX
X1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dF
VF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVXS19WSUVXX1BSSVZf
R0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgYXV0b21hdGljID0gISFh
dXRvbWF0aWM7CiAgICAgaWYgKHByaXYtPnNldHRpbmdzLmF1dG9fbG9hZF9pbWFnZXMgIT0gYXV0
b21hdGljKSB7CkBAIC0xODQ0LDE2ICsxODQ0LDE2IEBAIEVpbmFfQm9vbCBld2tfdmlld19zZXR0
aW5nX2F1dG9fbG9hZF9pbWFnZXNfc2V0KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wgYXV0b21h
CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdf
YXV0b19zaHJpbmtfaW1hZ2VzX2dldChjb25zdCBFdmFzX09iamVjdCogbykKK0VpbmFfQm9vbCBl
d2tfdmlld19zZXR0aW5nX2F1dG9fc2hyaW5rX2ltYWdlc19nZXQoY29uc3QgRXZhc19PYmplY3Qq
IGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9G
QUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9G
QUxTRSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZB
TFNFKTsKICAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuYXV0b19zaHJpbmtfaW1hZ2VzOwogfQog
Ci1FaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19hdXRvX3Nocmlua19pbWFnZXNfc2V0KEV2YXNf
T2JqZWN0KiBvLCBFaW5hX0Jvb2wgYXV0b21hdGljKQorRWluYV9Cb29sIGV3a192aWV3X3NldHRp
bmdfYXV0b19zaHJpbmtfaW1hZ2VzX3NldChFdmFzX09iamVjdCogZXdrVmlldywgRWluYV9Cb29s
IGF1dG9tYXRpYykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5B
X0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5B
X0ZBTFNFKTsKICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFf
RkFMU0UpOwogICAgIGF1dG9tYXRpYyA9ICEhYXV0b21hdGljOwogICAgIGlmIChwcml2LT5zZXR0
aW5ncy5hdXRvX3Nocmlua19pbWFnZXMgIT0gYXV0b21hdGljKSB7CkBAIC0xODYzLDMxICsxODYz
LDMxIEBAIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2F1dG9fc2hyaW5rX2ltYWdlc19zZXQo
RXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCBhdXRvCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0K
IAotRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfZW5hYmxlX2F1dG9fcmVzaXplX3dpbmRvd19n
ZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCitFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19lbmFi
bGVfYXV0b19yZXNpemVfd2luZG93X2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsK
LSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBF
V0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBF
V0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIHJl
dHVybiBwcml2LT5zZXR0aW5ncy5lbmFibGVfYXV0b19yZXNpemVfd2luZG93OwogfQogCi1FaW5h
X0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19lbmFibGVfYXV0b19yZXNpemVfd2luZG93X3NldChFdmFz
X09iamVjdCogbywgRWluYV9Cb29sIHJlc2l6YWJsZSkKK0VpbmFfQm9vbCBld2tfdmlld19zZXR0
aW5nX2VuYWJsZV9hdXRvX3Jlc2l6ZV93aW5kb3dfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBF
aW5hX0Jvb2wgcmVzaXphYmxlKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywg
c2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywg
c2QsIEVJTkFfRkFMU0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJp
diwgRUlOQV9GQUxTRSk7CiAgICAgcHJpdi0+c2V0dGluZ3MuZW5hYmxlX2F1dG9fcmVzaXplX3dp
bmRvdyA9IHJlc2l6YWJsZTsKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi1FaW5hX0Jvb2wg
ZXdrX3ZpZXdfc2V0dGluZ19lbmFibGVfc2NyaXB0c19nZXQoY29uc3QgRXZhc19PYmplY3QqIG8p
CitFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19lbmFibGVfc2NyaXB0c19nZXQoY29uc3QgRXZh
c19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBz
ZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBz
ZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2
LCBFSU5BX0ZBTFNFKTsKICAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZW5hYmxlX3NjcmlwdHM7
CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2VuYWJsZV9zY3JpcHRzX3NldChFdmFz
X09iamVjdCogbywgRWluYV9Cb29sIGVuYWJsZSkKK0VpbmFfQm9vbCBld2tfdmlld19zZXR0aW5n
X2VuYWJsZV9zY3JpcHRzX3NldChFdmFzX09iamVjdCogZXdrVmlldywgRWluYV9Cb29sIGVuYWJs
ZSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsK
KyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsK
ICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwog
ICAgIGVuYWJsZSA9ICEhZW5hYmxlOwogICAgIGlmIChwcml2LT5zZXR0aW5ncy5lbmFibGVfc2Ny
aXB0cyAhPSBlbmFibGUpIHsKQEAgLTE4OTcsMTYgKzE4OTcsMTYgQEAgRWluYV9Cb29sIGV3a192
aWV3X3NldHRpbmdfZW5hYmxlX3NjcmlwdHNfc2V0KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wg
ZW5hYmxlKQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld19z
ZXR0aW5nX2VuYWJsZV9wbHVnaW5zX2dldChjb25zdCBFdmFzX09iamVjdCogbykKK0VpbmFfQm9v
bCBld2tfdmlld19zZXR0aW5nX2VuYWJsZV9wbHVnaW5zX2dldChjb25zdCBFdmFzX09iamVjdCog
ZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZB
TFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZB
TFNFKTsKICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFM
U0UpOwogICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5lbmFibGVfcGx1Z2luczsKIH0KIAotRWlu
YV9Cb29sIGV3a192aWV3X3NldHRpbmdfZW5hYmxlX3BsdWdpbnNfc2V0KEV2YXNfT2JqZWN0KiBv
LCBFaW5hX0Jvb2wgZW5hYmxlKQorRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfZW5hYmxlX3Bs
dWdpbnNfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wgZW5hYmxlKQogewotICAg
IEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19W
SUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVXS19W
SUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgZW5hYmxl
ID0gISFlbmFibGU7CiAgICAgaWYgKHByaXYtPnNldHRpbmdzLmVuYWJsZV9wbHVnaW5zICE9IGVu
YWJsZSkgewpAQCAtMTkxNiwxNiArMTkxNiwxNiBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGlu
Z19lbmFibGVfcGx1Z2luc19zZXQoRXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCBlbmFibGUpCiAg
ICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfZW5h
YmxlX2ZyYW1lX2ZsYXR0ZW5pbmdfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQorRWluYV9Cb29s
IGV3a192aWV3X3NldHRpbmdfZW5hYmxlX2ZyYW1lX2ZsYXR0ZW5pbmdfZ2V0KGNvbnN0IEV2YXNf
T2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2Qs
IEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2Qs
IEVJTkFfRkFMU0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwg
RUlOQV9GQUxTRSk7CiAgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmVuYWJsZV9mcmFtZV9mbGF0
dGVuaW5nOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19lbmFibGVfZnJhbWVfZmxh
dHRlbmluZ19zZXQoRXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCBlbmFibGUpCitFaW5hX0Jvb2wg
ZXdrX3ZpZXdfc2V0dGluZ19lbmFibGVfZnJhbWVfZmxhdHRlbmluZ19zZXQoRXZhc19PYmplY3Qq
IGV3a1ZpZXcsIEVpbmFfQm9vbCBlbmFibGUpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JF
VFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihl
d2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJO
KHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBlbmFibGUgPSAhIWVuYWJsZTsKICAgICBpZiAo
cHJpdi0+c2V0dGluZ3MuZW5hYmxlX2ZyYW1lX2ZsYXR0ZW5pbmcgIT0gZW5hYmxlKSB7CkBAIC0x
OTM1LDE2ICsxOTM1LDE2IEBAIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2VuYWJsZV9mcmFt
ZV9mbGF0dGVuaW5nX3NldChFdmFzX09iamVjdCogbywgRWluYV9Cb29sCiAgICAgcmV0dXJuIEVJ
TkFfVFJVRTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfc2NyaXB0c193aW5kb3df
b3Blbl9nZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCitFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGlu
Z19zY3JpcHRzX3dpbmRvd19vcGVuX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsK
LSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBF
V0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBF
V0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIHJl
dHVybiBwcml2LT5zZXR0aW5ncy5zY3JpcHRzX3dpbmRvd19vcGVuOwogfQogCi1FaW5hX0Jvb2wg
ZXdrX3ZpZXdfc2V0dGluZ19zY3JpcHRzX3dpbmRvd19vcGVuX3NldChFdmFzX09iamVjdCogbywg
RWluYV9Cb29sIGFsbG93KQorRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfc2NyaXB0c193aW5k
b3dfb3Blbl9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCBhbGxvdykKIHsKLSAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tf
VklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFV0tf
VklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIGFsbG93
ID0gISFhbGxvdzsKICAgICBpZiAocHJpdi0+c2V0dGluZ3Muc2NyaXB0c193aW5kb3dfb3BlbiAh
PSBhbGxvdykgewpAQCAtMTk1NCwxNiArMTk1NCwxNiBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0
dGluZ19zY3JpcHRzX3dpbmRvd19vcGVuX3NldChFdmFzX09iamVjdCogbywgRWluYV9Cb29sIGFs
bAogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5n
X3NjcmlwdHNfY2FuX2Nsb3NlX3dpbmRvd3NfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQorRWlu
YV9Cb29sIGV3a192aWV3X3NldHRpbmdfc2NyaXB0c19jYW5fY2xvc2Vfd2luZG93c19nZXQoY29u
c3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
TihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tW
aWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNk
LCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3Muc2NyaXB0c19j
YW5fY2xvc2Vfd2luZG93czsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfc2NyaXB0
c19jYW5fY2xvc2Vfd2luZG93c19zZXQoRXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCBhbGxvdykK
K0VpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX3NjcmlwdHNfY2FuX2Nsb3NlX3dpbmRvd3Nfc2V0
KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wgYWxsb3cpCiB7Ci0gICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9H
RVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBhbGxvdyA9ICEhYWxsb3c7
CiAgICAgaWYgKHByaXYtPnNldHRpbmdzLnNjcmlwdHNfY2FuX2Nsb3NlX3dpbmRvd3MgIT0gYWxs
b3cpIHsKQEAgLTE5NzMsMTYgKzE5NzMsMTYgQEAgRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdf
c2NyaXB0c19jYW5fY2xvc2Vfd2luZG93c19zZXQoRXZhc19PYmplY3QqIG8sIEVpbmFfQm8KICAg
ICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19yZXNp
emFibGVfdGV4dGFyZWFzX2dldChjb25zdCBFdmFzX09iamVjdCogbykKK0VpbmFfQm9vbCBld2tf
dmlld19zZXR0aW5nX3Jlc2l6YWJsZV90ZXh0YXJlYXNfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBl
d2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFM
U0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFM
U0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxT
RSk7CiAgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLnJlc2l6YWJsZV90ZXh0YXJlYXM7CiB9CiAK
LUVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX3Jlc2l6YWJsZV90ZXh0YXJlYXNfc2V0KEV2YXNf
T2JqZWN0KiBvLCBFaW5hX0Jvb2wgZW5hYmxlKQorRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdf
cmVzaXphYmxlX3RleHRhcmVhc19zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCBl
bmFibGUpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxT
RSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxT
RSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNF
KTsKICAgICBlbmFibGUgPSAhIWVuYWJsZTsKICAgICBpZiAocHJpdi0+c2V0dGluZ3MucmVzaXph
YmxlX3RleHRhcmVhcyAhPSBlbmFibGUpIHsKQEAgLTE5OTIsMTYgKzE5OTIsMTYgQEAgRWluYV9C
b29sIGV3a192aWV3X3NldHRpbmdfcmVzaXphYmxlX3RleHRhcmVhc19zZXQoRXZhc19PYmplY3Qq
IG8sIEVpbmFfQm9vbCBlbmEKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi1FaW5hX0Jvb2wg
ZXdrX3ZpZXdfc2V0dGluZ19wcml2YXRlX2Jyb3dzaW5nX2dldChjb25zdCBFdmFzX09iamVjdCog
bykKK0VpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX3ByaXZhdGVfYnJvd3NpbmdfZ2V0KGNvbnN0
IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
bywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmll
dywgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwg
cHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLnByaXZhdGVfYnJv
d3Npbmc7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX3ByaXZhdGVfYnJvd3Npbmdf
c2V0KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wgZW5hYmxlKQorRWluYV9Cb29sIGV3a192aWV3
X3NldHRpbmdfcHJpdmF0ZV9icm93c2luZ19zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFf
Qm9vbCBlbmFibGUpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlO
QV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlO
QV9GQUxTRSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5B
X0ZBTFNFKTsKICAgICBlbmFibGUgPSAhIWVuYWJsZTsKICAgICBpZiAocHJpdi0+c2V0dGluZ3Mu
cHJpdmF0ZV9icm93c2luZyAhPSBlbmFibGUpIHsKQEAgLTIwMTEsMTYgKzIwMTEsMTYgQEAgRWlu
YV9Cb29sIGV3a192aWV3X3NldHRpbmdfcHJpdmF0ZV9icm93c2luZ19zZXQoRXZhc19PYmplY3Qq
IG8sIEVpbmFfQm9vbCBlbmFibGUKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi1FaW5hX0Jv
b2wgZXdrX3ZpZXdfc2V0dGluZ19vZmZsaW5lX2FwcF9jYWNoZV9nZXQoY29uc3QgRXZhc19PYmpl
Y3QqIG8pCitFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19vZmZsaW5lX2FwcF9jYWNoZV9nZXQo
Y29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JF
VFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihl
d2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJO
KHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3Mub2ZmbGlu
ZV9hcHBfY2FjaGU7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX29mZmxpbmVfYXBw
X2NhY2hlX3NldChFdmFzX09iamVjdCogbywgRWluYV9Cb29sIGVuYWJsZSkKK0VpbmFfQm9vbCBl
d2tfdmlld19zZXR0aW5nX29mZmxpbmVfYXBwX2NhY2hlX3NldChFdmFzX09iamVjdCogZXdrVmll
dywgRWluYV9Cb29sIGVuYWJsZSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8s
IHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcs
IHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHBy
aXYsIEVJTkFfRkFMU0UpOwogICAgIGVuYWJsZSA9ICEhZW5hYmxlOwogICAgIGlmIChwcml2LT5z
ZXR0aW5ncy5vZmZsaW5lX2FwcF9jYWNoZSAhPSBlbmFibGUpIHsKQEAgLTIwMzEsMTYgKzIwMzEs
MTYgQEAgRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfb2ZmbGluZV9hcHBfY2FjaGVfc2V0KEV2
YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wgZW5hYmwKIH0KIAogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdf
c2V0dGluZ19jYXJldF9icm93c2luZ19nZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCitFaW5hX0Jv
b2wgZXdrX3ZpZXdfc2V0dGluZ19jYXJldF9icm93c2luZ19nZXQoY29uc3QgRXZhc19PYmplY3Qq
IGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9G
QUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9G
QUxTRSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZB
TFNFKTsKICAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuY2FyZXRfYnJvd3Npbmc7CiB9CiAKLUVp
bmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2NhcmV0X2Jyb3dzaW5nX3NldChFdmFzX09iamVjdCog
bywgRWluYV9Cb29sIGVuYWJsZSkKK0VpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2NhcmV0X2Jy
b3dzaW5nX3NldChFdmFzX09iamVjdCogZXdrVmlldywgRWluYV9Cb29sIGVuYWJsZSkKIHsKLSAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tf
VklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFV0tf
VklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIGVuYWJs
ZSA9ICEhZW5hYmxlOwogICAgIGlmIChwcml2LT5zZXR0aW5ncy5jYXJldF9icm93c2luZyAhPSBl
bmFibGUpIHsKQEAgLTIwNTAsMTEgKzIwNTAsMTEgQEAgRWluYV9Cb29sIGV3a192aWV3X3NldHRp
bmdfY2FyZXRfYnJvd3Npbmdfc2V0KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wgZW5hYmxlKQog
ICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLWNvbnN0IGNoYXIqIGV3a192aWV3X3NldHRpbmdf
ZW5jb2RpbmdfY3VzdG9tX2dldChjb25zdCBFdmFzX09iamVjdCogbykKK2NvbnN0IGNoYXIqIGV3
a192aWV3X3NldHRpbmdfZW5jb2RpbmdfY3VzdG9tX2dldChjb25zdCBFdmFzX09iamVjdCogZXdr
VmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAwKTsKKyAgICBF
V0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAwKTsKICAgICBFV0tfVklFV19Q
UklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIDApOwotICAgIEV2YXNfT2JqZWN0KiBtYWluX2Zy
YW1lID0gZXdrX3ZpZXdfZnJhbWVfbWFpbl9nZXQobyk7CisgICAgRXZhc19PYmplY3QqIG1haW5f
ZnJhbWUgPSBld2tfdmlld19mcmFtZV9tYWluX2dldChld2tWaWV3KTsKICAgICBXZWJDb3JlOjpG
cmFtZSogY29yZV9mcmFtZSA9IGV3a19mcmFtZV9jb3JlX2dldChtYWluX2ZyYW1lKTsKIAogICAg
IFN0cmluZyBvdmVycmlkZUVuY29kaW5nID0gY29yZV9mcmFtZS0+bG9hZGVyKCktPmRvY3VtZW50
TG9hZGVyKCktPm92ZXJyaWRlRW5jb2RpbmcoKTsKQEAgLTIwNjYsMTEgKzIwNjYsMTEgQEAgY29u
c3QgY2hhciogZXdrX3ZpZXdfc2V0dGluZ19lbmNvZGluZ19jdXN0b21fZ2V0KGNvbnN0IEV2YXNf
T2JqZWN0KiBvKQogICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5lbmNvZGluZ19jdXN0b207CiB9
CiAKLUVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2VuY29kaW5nX2N1c3RvbV9zZXQoRXZhc19P
YmplY3QqIG8sIGNvbnN0IGNoYXIqIGVuY29kaW5nKQorRWluYV9Cb29sIGV3a192aWV3X3NldHRp
bmdfZW5jb2RpbmdfY3VzdG9tX3NldChFdmFzX09iamVjdCogZXdrVmlldywgY29uc3QgY2hhciog
ZW5jb2RpbmcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9G
QUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9G
QUxTRSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZB
TFNFKTsKLSAgICBFdmFzX09iamVjdCogbWFpbl9mcmFtZSA9IGV3a192aWV3X2ZyYW1lX21haW5f
Z2V0KG8pOworICAgIEV2YXNfT2JqZWN0KiBtYWluX2ZyYW1lID0gZXdrX3ZpZXdfZnJhbWVfbWFp
bl9nZXQoZXdrVmlldyk7CiAgICAgV2ViQ29yZTo6RnJhbWUqIGNvcmVfZnJhbWUgPSBld2tfZnJh
bWVfY29yZV9nZXQobWFpbl9mcmFtZSk7CiAgICAgREJHKCIlcyIsIGVuY29kaW5nKTsKICAgICBp
ZiAoZWluYV9zdHJpbmdzaGFyZV9yZXBsYWNlKCZwcml2LT5zZXR0aW5ncy5lbmNvZGluZ19jdXN0
b20sIGVuY29kaW5nKSkKQEAgLTIwNzgsMjUgKzIwNzgsMjUgQEAgRWluYV9Cb29sIGV3a192aWV3
X3NldHRpbmdfZW5jb2RpbmdfY3VzdG9tX3NldChFdmFzX09iamVjdCogbywgY29uc3QgY2hhciog
ZW5jb2QKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi1jb25zdCBjaGFyKiBld2tfdmlld19z
ZXR0aW5nX2VuY29kaW5nX2RlZmF1bHRfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQorY29uc3Qg
Y2hhciogZXdrX3ZpZXdfc2V0dGluZ19lbmNvZGluZ19kZWZhdWx0X2dldChjb25zdCBFdmFzX09i
amVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAw
KTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAwKTsKICAgICBF
V0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIDApOwogICAgIHJldHVybiBwcml2
LT5zZXR0aW5ncy5lbmNvZGluZ19kZWZhdWx0OwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0
dGluZ19lbmNvZGluZ19kZWZhdWx0X3NldChFdmFzX09iamVjdCogbywgY29uc3QgY2hhciogZW5j
b2RpbmcpCitFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19lbmNvZGluZ19kZWZhdWx0X3NldChF
dmFzX09iamVjdCogZXdrVmlldywgY29uc3QgY2hhciogZW5jb2RpbmcpCiB7Ci0gICAgRVdLX1ZJ
RVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJRVdfUFJJ
Vl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBpZiAoZWluYV9zdHJp
bmdzaGFyZV9yZXBsYWNlKCZwcml2LT5zZXR0aW5ncy5lbmNvZGluZ19kZWZhdWx0LCBlbmNvZGlu
ZykpCiAgICAgICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNldERlZmF1bHRUZXh0RW5jb2RpbmdO
YW1lKFN0cmluZzo6ZnJvbVVURjgoZW5jb2RpbmcpKTsKICAgICByZXR1cm4gRUlOQV9UUlVFOwog
fQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19lbmNvZGluZ19kZXRlY3Rvcl9zZXQoRXZh
c19PYmplY3QqIG8sIEVpbmFfQm9vbCBlbmFibGUpCitFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGlu
Z19lbmNvZGluZ19kZXRlY3Rvcl9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCBl
bmFibGUpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxT
RSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxT
RSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNF
KTsKICAgICBlbmFibGUgPSAhIWVuYWJsZTsKICAgICBpZiAocHJpdi0+c2V0dGluZ3MuZW5jb2Rp
bmdfZGV0ZWN0b3IgIT0gZW5hYmxlKSB7CkBAIC0yMTA2LDIzICsyMTA2LDIzIEBAIEVpbmFfQm9v
bCBld2tfdmlld19zZXR0aW5nX2VuY29kaW5nX2RldGVjdG9yX3NldChFdmFzX09iamVjdCogbywg
RWluYV9Cb29sIGVuYWJsCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotRWluYV9Cb29sIGV3
a192aWV3X3NldHRpbmdfZW5jb2RpbmdfZGV0ZWN0b3JfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBv
KQorRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfZW5jb2RpbmdfZGV0ZWN0b3JfZ2V0KGNvbnN0
IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
bywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmll
dywgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwg
cHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmVuY29kaW5nX2Rl
dGVjdG9yOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19lbmFibGVfZGV2ZWxvcGVy
X2V4dHJhc19nZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCitFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0
dGluZ19lbmFibGVfZGV2ZWxvcGVyX2V4dHJhc19nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1Zp
ZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7
CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7
CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsK
ICAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZW5hYmxlX2RldmVsb3Blcl9leHRyYXM7CiB9CiAK
LUVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2VuYWJsZV9kZXZlbG9wZXJfZXh0cmFzX3NldChF
dmFzX09iamVjdCogbywgRWluYV9Cb29sIGVuYWJsZSkKK0VpbmFfQm9vbCBld2tfdmlld19zZXR0
aW5nX2VuYWJsZV9kZXZlbG9wZXJfZXh0cmFzX3NldChFdmFzX09iamVjdCogZXdrVmlldywgRWlu
YV9Cb29sIGVuYWJsZSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBF
SU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBF
SU5BX0ZBTFNFKTsKICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJ
TkFfRkFMU0UpOwogICAgIGVuYWJsZSA9ICEhZW5hYmxlOwogICAgIGlmIChwcml2LT5zZXR0aW5n
cy5lbmFibGVfZGV2ZWxvcGVyX2V4dHJhcyAhPSBlbmFibGUpIHsKQEAgLTIxMzIsMTYgKzIxMzIs
MTYgQEAgRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfZW5hYmxlX2RldmVsb3Blcl9leHRyYXNf
c2V0KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQog
Ci1pbnQgZXdrX3ZpZXdfc2V0dGluZ19mb250X21pbmltdW1fc2l6ZV9nZXQoY29uc3QgRXZhc19P
YmplY3QqIG8pCitpbnQgZXdrX3ZpZXdfc2V0dGluZ19mb250X21pbmltdW1fc2l6ZV9nZXQoY29u
c3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
TihvLCBzZCwgMCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwg
MCk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCAwKTsKICAgICBy
ZXR1cm4gcHJpdi0+c2V0dGluZ3MuZm9udF9taW5pbXVtX3NpemU7CiB9CiAKLUVpbmFfQm9vbCBl
d2tfdmlld19zZXR0aW5nX2ZvbnRfbWluaW11bV9zaXplX3NldChFdmFzX09iamVjdCogbywgaW50
IHNpemUpCitFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19mb250X21pbmltdW1fc2l6ZV9zZXQo
RXZhc19PYmplY3QqIGV3a1ZpZXcsIGludCBzaXplKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9P
Ul9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRV
Uk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JF
VFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgaWYgKHByaXYtPnNldHRpbmdzLmZvbnRf
bWluaW11bV9zaXplICE9IHNpemUpIHsKICAgICAgICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0
TWluaW11bUZvbnRTaXplKHNpemUpOwpAQCAtMjE1MCwxNiArMjE1MCwxNiBAQCBFaW5hX0Jvb2wg
ZXdrX3ZpZXdfc2V0dGluZ19mb250X21pbmltdW1fc2l6ZV9zZXQoRXZhc19PYmplY3QqIG8sIGlu
dCBzaXplKQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLWludCBld2tfdmlld19zZXR0aW5n
X2ZvbnRfbWluaW11bV9sb2dpY2FsX3NpemVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQoraW50
IGV3a192aWV3X3NldHRpbmdfZm9udF9taW5pbXVtX2xvZ2ljYWxfc2l6ZV9nZXQoY29uc3QgRXZh
c19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBz
ZCwgMCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgMCk7CiAg
ICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCAwKTsKICAgICByZXR1cm4g
cHJpdi0+c2V0dGluZ3MuZm9udF9taW5pbXVtX2xvZ2ljYWxfc2l6ZTsKIH0KIAotRWluYV9Cb29s
IGV3a192aWV3X3NldHRpbmdfZm9udF9taW5pbXVtX2xvZ2ljYWxfc2l6ZV9zZXQoRXZhc19PYmpl
Y3QqIG8sIGludCBzaXplKQorRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfZm9udF9taW5pbXVt
X2xvZ2ljYWxfc2l6ZV9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGludCBzaXplKQogewotICAg
IEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19W
SUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVXS19W
SUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgaWYgKHBy
aXYtPnNldHRpbmdzLmZvbnRfbWluaW11bV9sb2dpY2FsX3NpemUgIT0gc2l6ZSkgewogICAgICAg
ICBwcml2LT5wYWdlX3NldHRpbmdzLT5zZXRNaW5pbXVtTG9naWNhbEZvbnRTaXplKHNpemUpOwpA
QCAtMjE2OCwxNiArMjE2OCwxNiBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19mb250X21p
bmltdW1fbG9naWNhbF9zaXplX3NldChFdmFzX09iamVjdCogbywgaW50IHNpegogICAgIHJldHVy
biBFSU5BX1RSVUU7CiB9CiAKLWludCBld2tfdmlld19zZXR0aW5nX2ZvbnRfZGVmYXVsdF9zaXpl
X2dldChjb25zdCBFdmFzX09iamVjdCogbykKK2ludCBld2tfdmlld19zZXR0aW5nX2ZvbnRfZGVm
YXVsdF9zaXplX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklF
V19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAwKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVU
VVJOKGV3a1ZpZXcsIHNkLCAwKTsKICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2Qs
IHByaXYsIDApOwogICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5mb250X2RlZmF1bHRfc2l6ZTsK
IH0KIAotRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfZm9udF9kZWZhdWx0X3NpemVfc2V0KEV2
YXNfT2JqZWN0KiBvLCBpbnQgc2l6ZSkKK0VpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2ZvbnRf
ZGVmYXVsdF9zaXplX3NldChFdmFzX09iamVjdCogZXdrVmlldywgaW50IHNpemUpCiB7Ci0gICAg
RVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJ
RVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJ
RVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBpZiAocHJp
di0+c2V0dGluZ3MuZm9udF9kZWZhdWx0X3NpemUgIT0gc2l6ZSkgewogICAgICAgICBwcml2LT5w
YWdlX3NldHRpbmdzLT5zZXREZWZhdWx0Rm9udFNpemUoc2l6ZSk7CkBAIC0yMTg2LDE2ICsyMTg2
LDE2IEBAIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2ZvbnRfZGVmYXVsdF9zaXplX3NldChF
dmFzX09iamVjdCogbywgaW50IHNpemUpCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotaW50
IGV3a192aWV3X3NldHRpbmdfZm9udF9tb25vc3BhY2Vfc2l6ZV9nZXQoY29uc3QgRXZhc19PYmpl
Y3QqIG8pCitpbnQgZXdrX3ZpZXdfc2V0dGluZ19mb250X21vbm9zcGFjZV9zaXplX2dldChjb25z
dCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJO
KG8sIHNkLCAwKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAw
KTsKICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIDApOwogICAgIHJl
dHVybiBwcml2LT5zZXR0aW5ncy5mb250X21vbm9zcGFjZV9zaXplOwogfQogCi1FaW5hX0Jvb2wg
ZXdrX3ZpZXdfc2V0dGluZ19mb250X21vbm9zcGFjZV9zaXplX3NldChFdmFzX09iamVjdCogbywg
aW50IHNpemUpCitFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19mb250X21vbm9zcGFjZV9zaXpl
X3NldChFdmFzX09iamVjdCogZXdrVmlldywgaW50IHNpemUpCiB7Ci0gICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRf
T1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBpZiAocHJpdi0+c2V0dGluZ3Mu
Zm9udF9tb25vc3BhY2Vfc2l6ZSAhPSBzaXplKSB7CiAgICAgICAgIHByaXYtPnBhZ2Vfc2V0dGlu
Z3MtPnNldERlZmF1bHRGaXhlZEZvbnRTaXplKHNpemUpOwpAQCAtMjIwNCwxMiArMjIwNCwxMiBA
QCBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19mb250X21vbm9zcGFjZV9zaXplX3NldChFdmFz
X09iamVjdCogbywgaW50IHNpemUpCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotY29uc3Qg
Y2hhciogZXdrX3ZpZXdfZm9udF9mYW1pbHlfbmFtZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIG8s
IEV3a19Gb250X0ZhbWlseSBmb250X2ZhbWlseSkKK2NvbnN0IGNoYXIqIGV3a192aWV3X2ZvbnRf
ZmFtaWx5X25hbWVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFd2tfRm9udF9GYW1p
bHkgZm9udEZhbWlseSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAw
KTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAwKTsKICAgICBF
V0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIDApOwogCi0gICAgc3dpdGNoIChm
b250X2ZhbWlseSkgeworICAgIHN3aXRjaCAoZm9udEZhbWlseSkgewogICAgIGNhc2UgRVdLX0ZP
TlRfRkFNSUxZX1NUQU5EQVJEOgogICAgICAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZm9udF9z
dGFuZGFyZDsKICAgICBjYXNlIEVXS19GT05UX0ZBTUlMWV9DVVJTSVZFOgpAQCAtMjIyNiwxMiAr
MjIyNiwxMiBAQCBjb25zdCBjaGFyKiBld2tfdmlld19mb250X2ZhbWlseV9uYW1lX2dldChjb25z
dCBFdmFzX09iamVjdCogbywgRXdrX0ZvbnRfRmFtaWx5CiAgICAgcmV0dXJuIDA7CiB9CiAKLUVp
bmFfQm9vbCBld2tfdmlld19mb250X2ZhbWlseV9uYW1lX3NldChFdmFzX09iamVjdCogbywgRXdr
X0ZvbnRfRmFtaWx5IGZvbnRfZmFtaWx5LCBjb25zdCBjaGFyKiBuYW1lKQorRWluYV9Cb29sIGV3
a192aWV3X2ZvbnRfZmFtaWx5X25hbWVfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFd2tfRm9u
dF9GYW1pbHkgZm9udEZhbWlseSwgY29uc3QgY2hhciogbmFtZSkKIHsKLSAgICBFV0tfVklFV19T
RF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRf
T1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFV0tfVklFV19QUklWX0dF
VF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwogCi0gICAgc3dpdGNoIChmb250X2Zh
bWlseSkgeworICAgIHN3aXRjaCAoZm9udEZhbWlseSkgewogICAgIGNhc2UgRVdLX0ZPTlRfRkFN
SUxZX1NUQU5EQVJEOgogICAgICAgICBpZiAoZWluYV9zdHJpbmdzaGFyZV9yZXBsYWNlKCZwcml2
LT5zZXR0aW5ncy5mb250X3N0YW5kYXJkLCBuYW1lKSkKICAgICAgICAgICAgIHByaXYtPnBhZ2Vf
c2V0dGluZ3MtPnNldFN0YW5kYXJkRm9udEZhbWlseShBdG9taWNTdHJpbmc6OmZyb21VVEY4KG5h
bWUpKTsKQEAgLTIyNjMsMTYgKzIyNjMsMTYgQEAgRWluYV9Cb29sIGV3a192aWV3X2ZvbnRfZmFt
aWx5X25hbWVfc2V0KEV2YXNfT2JqZWN0KiBvLCBFd2tfRm9udF9GYW1pbHkgZm9udF9mYW0KICAg
ICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19zcGF0
aWFsX25hdmlnYXRpb25fZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQorRWluYV9Cb29sIGV3a192
aWV3X3NldHRpbmdfc3BhdGlhbF9uYXZpZ2F0aW9uX2dldChjb25zdCBFdmFzX09iamVjdCogZXdr
VmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNF
KTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNF
KTsKICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0Up
OwogICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5zcGF0aWFsX25hdmlnYXRpb247CiB9CiAKLUVp
bmFfQm9vbCBld2tfdmlld19zZXR0aW5nX3NwYXRpYWxfbmF2aWdhdGlvbl9zZXQoRXZhc19PYmpl
Y3QqIG8sIEVpbmFfQm9vbCBlbmFibGUpCitFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19zcGF0
aWFsX25hdmlnYXRpb25fc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wgZW5hYmxl
KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOwor
ICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwog
ICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CiAg
ICAgZW5hYmxlID0gISFlbmFibGU7CiAgICAgaWYgKHByaXYtPnNldHRpbmdzLnNwYXRpYWxfbmF2
aWdhdGlvbiAhPSBlbmFibGUpIHsKQEAgLTIyODIsMTYgKzIyODIsMTYgQEAgRWluYV9Cb29sIGV3
a192aWV3X3NldHRpbmdfc3BhdGlhbF9uYXZpZ2F0aW9uX3NldChFdmFzX09iamVjdCogbywgRWlu
YV9Cb29sIGVuYWIKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi1FaW5hX0Jvb2wgZXdrX3Zp
ZXdfc2V0dGluZ19sb2NhbF9zdG9yYWdlX2dldChjb25zdCBFdmFzX09iamVjdCogbykKK0VpbmFf
Qm9vbCBld2tfdmlld19zZXR0aW5nX2xvY2FsX3N0b3JhZ2VfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0
KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFf
RkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFf
RkFMU0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9G
QUxTRSk7CiAgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmxvY2FsX3N0b3JhZ2U7CiB9CiAKLUVp
bmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2xvY2FsX3N0b3JhZ2Vfc2V0KEV2YXNfT2JqZWN0KiBv
LCBFaW5hX0Jvb2wgZW5hYmxlKQorRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfbG9jYWxfc3Rv
cmFnZV9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCBlbmFibGUpCiB7Ci0gICAg
RVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJ
RVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJ
RVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBlbmFibGUg
PSAhIWVuYWJsZTsKICAgICBpZiAocHJpdi0+c2V0dGluZ3MubG9jYWxfc3RvcmFnZSAhPSBlbmFi
bGUpIHsKQEAgLTIzMDEsMTYgKzIzMDEsMTYgQEAgRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdf
bG9jYWxfc3RvcmFnZV9zZXQoRXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCBlbmFibGUpCiAgICAg
cmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfcGFnZV9j
YWNoZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCitFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGlu
Z19wYWdlX2NhY2hlX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tf
VklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19T
RF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFV0tfVklFV19Q
UklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIHJldHVybiBwcml2
LT5zZXR0aW5ncy5wYWdlX2NhY2hlOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19w
YWdlX2NhY2hlX3NldChFdmFzX09iamVjdCogbywgRWluYV9Cb29sIGVuYWJsZSkKK0VpbmFfQm9v
bCBld2tfdmlld19zZXR0aW5nX3BhZ2VfY2FjaGVfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBF
aW5hX0Jvb2wgZW5hYmxlKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2Qs
IEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2Qs
IEVJTkFfRkFMU0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwg
RUlOQV9GQUxTRSk7CiAgICAgZW5hYmxlID0gISFlbmFibGU7CiAgICAgaWYgKHByaXYtPnNldHRp
bmdzLnBhZ2VfY2FjaGUgIT0gZW5hYmxlKSB7CkBAIC0yMzIwLDI1ICsyMzIwLDI1IEBAIEVpbmFf
Qm9vbCBld2tfdmlld19zZXR0aW5nX3BhZ2VfY2FjaGVfc2V0KEV2YXNfT2JqZWN0KiBvLCBFaW5h
X0Jvb2wgZW5hYmxlKQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLWNvbnN0IGNoYXIqIGV3
a192aWV3X3NldHRpbmdfbG9jYWxfc3RvcmFnZV9kYXRhYmFzZV9wYXRoX2dldChjb25zdCBFdmFz
X09iamVjdCogbykKK2NvbnN0IGNoYXIqIGV3a192aWV3X3NldHRpbmdfbG9jYWxfc3RvcmFnZV9k
YXRhYmFzZV9wYXRoX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tf
VklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAwKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1Jf
UkVUVVJOKGV3a1ZpZXcsIHNkLCAwKTsKICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4o
c2QsIHByaXYsIDApOwogICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5sb2NhbF9zdG9yYWdlX2Rh
dGFiYXNlX3BhdGg7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2xvY2FsX3N0b3Jh
Z2VfZGF0YWJhc2VfcGF0aF9zZXQoRXZhc19PYmplY3QqIG8sIGNvbnN0IGNoYXIqIHBhdGgpCitF
aW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19sb2NhbF9zdG9yYWdlX2RhdGFiYXNlX3BhdGhfc2V0
KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBjaGFyKiBwYXRoKQogewotICAgIEVXS19WSUVX
X1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dF
VF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVXS19WSUVXX1BSSVZf
R0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgaWYgKGVpbmFfc3RyaW5n
c2hhcmVfcmVwbGFjZSgmcHJpdi0+c2V0dGluZ3MubG9jYWxfc3RvcmFnZV9kYXRhYmFzZV9wYXRo
LCBwYXRoKSkKICAgICAgICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0TG9jYWxTdG9yYWdlRGF0
YWJhc2VQYXRoKFN0cmluZzo6ZnJvbVVURjgocGF0aCkpOwogICAgIHJldHVybiBFSU5BX1RSVUU7
CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX21pbmltdW1fdGltZXJfaW50ZXJ2YWxf
c2V0KEV2YXNfT2JqZWN0KiBvLCBkb3VibGUgaW50ZXJ2YWwpCitFaW5hX0Jvb2wgZXdrX3ZpZXdf
c2V0dGluZ19taW5pbXVtX3RpbWVyX2ludGVydmFsX3NldChFdmFzX09iamVjdCogZXdrVmlldywg
ZG91YmxlIGludGVydmFsKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2Qs
IEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2Qs
IEVJTkFfRkFMU0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwg
RUlOQV9GQUxTRSk7CiAgICAgaWYgKGZhYnMocHJpdi0+c2V0dGluZ3MuZG9tX3RpbWVyX2ludGVy
dmFsIC0gaW50ZXJ2YWwpID49IHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6ZXBzaWxvbigp
KSB7CiAgICAgICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNldE1pbkRPTVRpbWVySW50ZXJ2YWwo
aW50ZXJ2YWwpOwpAQCAtMjM0NywxNiArMjM0NywxNiBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0
dGluZ19taW5pbXVtX3RpbWVyX2ludGVydmFsX3NldChFdmFzX09iamVjdCogbywgZG91YmxlIGlu
dAogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLWRvdWJsZSBld2tfdmlld19zZXR0aW5nX21p
bmltdW1fdGltZXJfaW50ZXJ2YWxfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQorZG91YmxlIGV3
a192aWV3X3NldHRpbmdfbWluaW11bV90aW1lcl9pbnRlcnZhbF9nZXQoY29uc3QgRXZhc19PYmpl
Y3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlO
QV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlO
QV9GQUxTRSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5B
X0ZBTFNFKTsKICAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZG9tX3RpbWVyX2ludGVydmFsOwog
fQogCi1Fd2tfVmlld19TbWFydF9EYXRhKiBld2tfdmlld19zbWFydF9kYXRhX2dldChjb25zdCBF
dmFzX09iamVjdCogbykKK0V3a19WaWV3X1NtYXJ0X0RhdGEqIGV3a192aWV3X3NtYXJ0X2RhdGFf
Z2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9P
Ul9SRVRVUk4obywgc2QsIDApOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmll
dywgc2QsIDApOwogICAgIHJldHVybiBzZDsKIH0KIApAQCAtMjQyOCwxMCArMjQyOCwxMCBAQCBj
b25zdCBFd2tfU2Nyb2xsX1JlcXVlc3QqIGV3a192aWV3X3Njcm9sbF9yZXF1ZXN0c19nZXQoY29u
c3QgRXdrX1ZpZXdfUHJpdmF0ZV9EYQogICogQG5vdGUgdGhpcyBpcyBub3QgZm9yIGdlbmVyYWwg
dXNlIGJ1dCBqdXN0IGZvciBzdWJjbGFzc2VzIHRoYXQgd2FudAogICogICAgICAgdG8gZGVmaW5l
IHRoZWlyIG93biBiYWNraW5nIHN0b3JlLgogICovCi12b2lkIGV3a192aWV3X3JlcGFpbnRfYWRk
KEV3a19WaWV3X1ByaXZhdGVfRGF0YSogcHJpdiwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHks
IEV2YXNfQ29vcmQgdywgRXZhc19Db29yZCBoKQordm9pZCBld2tfdmlld19yZXBhaW50X2FkZChF
d2tfVmlld19Qcml2YXRlX0RhdGEqIHByaXYsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5LCBF
dmFzX0Nvb3JkIHdpZHRoLCBFdmFzX0Nvb3JkIGhlaWdodCkKIHsKICAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTihwcml2KTsKLSAgICBfZXdrX3ZpZXdfcmVwYWludF9hZGQocHJpdiwgeCwg
eSwgdywgaCk7CisgICAgX2V3a192aWV3X3JlcGFpbnRfYWRkKHByaXYsIHgsIHksIHdpZHRoLCBo
ZWlnaHQpOwogfQogCiAvKioKQEAgLTI0NTQsMTEgKzI0NTQsMTEgQEAgdm9pZCBld2tfdmlld19s
YXlvdXRfaWZfbmVlZGVkX3JlY3Vyc2l2ZShFd2tfVmlld19Qcml2YXRlX0RhdGEqIHByaXYpCiAg
ICAgdi0+dXBkYXRlTGF5b3V0QW5kU3R5bGVJZk5lZWRlZFJlY3Vyc2l2ZSgpOwogfQogCi12b2lk
IGV3a192aWV3X3Njcm9sbHNfcHJvY2VzcyhFd2tfVmlld19TbWFydF9EYXRhKiBzZCkKK3ZvaWQg
ZXdrX3ZpZXdfc2Nyb2xsc19wcm9jZXNzKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSkK
IHsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZCk7Ci0gICAgRVdLX1ZJRVdfUFJJ
Vl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2KTsKLSAgICBpZiAoIXNkLT5hcGktPnNjcm9sbHNfcHJv
Y2VzcyhzZCkpCisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRhKTsKKyAg
ICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2KTsKKyAgICBpZiAo
IXNtYXJ0RGF0YS0+YXBpLT5zY3JvbGxzX3Byb2Nlc3Moc21hcnREYXRhKSkKICAgICAgICAgRVJS
KCJmYWlsZWQgdG8gcHJvY2VzcyBzY3JvbGxzLiIpOwogICAgIF9ld2tfdmlld19zY3JvbGxzX2Zs
dXNoKHByaXYpOwogfQpAQCAtMjQ5Nyw3MiArMjQ5Nyw3MiBAQCBFd2tfVmlld19QYWludF9Db250
ZXh0KiBld2tfdmlld19wYWludF9jb250ZXh0X25ldyhFd2tfVmlld19Qcml2YXRlX0RhdGEqIHBy
aXYsCiAgICAgcmV0dXJuIGN0eHQ7CiB9CiAKLXZvaWQgZXdrX3ZpZXdfcGFpbnRfY29udGV4dF9m
cmVlKEV3a19WaWV3X1BhaW50X0NvbnRleHQqIGN0eHQpCit2b2lkIGV3a192aWV3X3BhaW50X2Nv
bnRleHRfZnJlZShFd2tfVmlld19QYWludF9Db250ZXh0KiBjb250ZXh0KQogewotICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOKGN0eHQpOwotICAgIGRlbGV0ZSBjdHh0LT5nYzsKLSAgICBj
YWlyb19kZXN0cm95KGN0eHQtPmNyKTsKLSAgICBmcmVlKGN0eHQpOworICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOKGNvbnRleHQpOworICAgIGRlbGV0ZSBjb250ZXh0LT5nYzsKKyAgICBj
YWlyb19kZXN0cm95KGNvbnRleHQtPmNyKTsKKyAgICBmcmVlKGNvbnRleHQpOwogfQogCi12b2lk
IGV3a192aWV3X3BhaW50X2NvbnRleHRfc2F2ZShFd2tfVmlld19QYWludF9Db250ZXh0KiBjdHh0
KQordm9pZCBld2tfdmlld19wYWludF9jb250ZXh0X3NhdmUoRXdrX1ZpZXdfUGFpbnRfQ29udGV4
dCogY29udGV4dCkKIHsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihjdHh0KTsKLSAg
ICBjYWlyb19zYXZlKGN0eHQtPmNyKTsKLSAgICBjdHh0LT5nYy0+c2F2ZSgpOworICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOKGNvbnRleHQpOworICAgIGNhaXJvX3NhdmUoY29udGV4dC0+
Y3IpOworICAgIGNvbnRleHQtPmdjLT5zYXZlKCk7CiB9CiAKLXZvaWQgZXdrX3ZpZXdfcGFpbnRf
Y29udGV4dF9yZXN0b3JlKEV3a19WaWV3X1BhaW50X0NvbnRleHQqIGN0eHQpCit2b2lkIGV3a192
aWV3X3BhaW50X2NvbnRleHRfcmVzdG9yZShFd2tfVmlld19QYWludF9Db250ZXh0KiBjb250ZXh0
KQogewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGN0eHQpOwotICAgIGN0eHQtPmdj
LT5yZXN0b3JlKCk7Ci0gICAgY2Fpcm9fcmVzdG9yZShjdHh0LT5jcik7CisgICAgRUlOQV9TQUZF
VFlfT05fTlVMTF9SRVRVUk4oY29udGV4dCk7CisgICAgY29udGV4dC0+Z2MtPnJlc3RvcmUoKTsK
KyAgICBjYWlyb19yZXN0b3JlKGNvbnRleHQtPmNyKTsKIH0KIAotdm9pZCBld2tfdmlld19wYWlu
dF9jb250ZXh0X2NsaXAoRXdrX1ZpZXdfUGFpbnRfQ29udGV4dCogY3R4dCwgY29uc3QgRWluYV9S
ZWN0YW5nbGUqIGFyZWEpCit2b2lkIGV3a192aWV3X3BhaW50X2NvbnRleHRfY2xpcChFd2tfVmll
d19QYWludF9Db250ZXh0KiBjb250ZXh0LCBjb25zdCBFaW5hX1JlY3RhbmdsZSogYXJlYSkKIHsK
LSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihjdHh0KTsKKyAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTihjb250ZXh0KTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihh
cmVhKTsKLSAgICBjdHh0LT5nYy0+Y2xpcChXZWJDb3JlOjpJbnRSZWN0KGFyZWEtPngsIGFyZWEt
PnksIGFyZWEtPncsIGFyZWEtPmgpKTsKKyAgICBjb250ZXh0LT5nYy0+Y2xpcChXZWJDb3JlOjpJ
bnRSZWN0KGFyZWEtPngsIGFyZWEtPnksIGFyZWEtPncsIGFyZWEtPmgpKTsKIH0KIAotdm9pZCBl
d2tfdmlld19wYWludF9jb250ZXh0X3BhaW50KEV3a19WaWV3X1BhaW50X0NvbnRleHQqIGN0eHQs
IGNvbnN0IEVpbmFfUmVjdGFuZ2xlKiBhcmVhKQordm9pZCBld2tfdmlld19wYWludF9jb250ZXh0
X3BhaW50KEV3a19WaWV3X1BhaW50X0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEVpbmFfUmVjdGFu
Z2xlKiBhcmVhKQogewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGN0eHQpOworICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGNvbnRleHQpOwogICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOKGFyZWEpOwogCiAgICAgV2ViQ29yZTo6SW50UmVjdCByZWN0KGFyZWEtPngs
IGFyZWEtPnksIGFyZWEtPncsIGFyZWEtPmgpOwogCi0gICAgaWYgKGN0eHQtPnZpZXctPmlzVHJh
bnNwYXJlbnQoKSkKLSAgICAgICAgY3R4dC0+Z2MtPmNsZWFyUmVjdChyZWN0KTsKLSAgICBjdHh0
LT52aWV3LT5wYWludChjdHh0LT5nYywgcmVjdCk7CisgICAgaWYgKGNvbnRleHQtPnZpZXctPmlz
VHJhbnNwYXJlbnQoKSkKKyAgICAgICAgY29udGV4dC0+Z2MtPmNsZWFyUmVjdChyZWN0KTsKKyAg
ICBjb250ZXh0LT52aWV3LT5wYWludChjb250ZXh0LT5nYywgcmVjdCk7CiB9CiAKLXZvaWQgZXdr
X3ZpZXdfcGFpbnRfY29udGV4dF9wYWludF9jb250ZW50cyhFd2tfVmlld19QYWludF9Db250ZXh0
KiBjdHh0LCBjb25zdCBFaW5hX1JlY3RhbmdsZSogYXJlYSkKK3ZvaWQgZXdrX3ZpZXdfcGFpbnRf
Y29udGV4dF9wYWludF9jb250ZW50cyhFd2tfVmlld19QYWludF9Db250ZXh0KiBjb250ZXh0LCBj
b25zdCBFaW5hX1JlY3RhbmdsZSogYXJlYSkKIHsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTihjdHh0KTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihjb250ZXh0KTsKICAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihhcmVhKTsKIAogICAgIFdlYkNvcmU6OkludFJl
Y3QgcmVjdChhcmVhLT54LCBhcmVhLT55LCBhcmVhLT53LCBhcmVhLT5oKTsKIAotICAgIGlmIChj
dHh0LT52aWV3LT5pc1RyYW5zcGFyZW50KCkpCi0gICAgICAgIGN0eHQtPmdjLT5jbGVhclJlY3Qo
cmVjdCk7CisgICAgaWYgKGNvbnRleHQtPnZpZXctPmlzVHJhbnNwYXJlbnQoKSkKKyAgICAgICAg
Y29udGV4dC0+Z2MtPmNsZWFyUmVjdChyZWN0KTsKIAotICAgIGN0eHQtPnZpZXctPnBhaW50Q29u
dGVudHMoY3R4dC0+Z2MsIHJlY3QpOworICAgIGNvbnRleHQtPnZpZXctPnBhaW50Q29udGVudHMo
Y29udGV4dC0+Z2MsIHJlY3QpOwogfQogCi12b2lkIGV3a192aWV3X3BhaW50X2NvbnRleHRfc2Nh
bGUoRXdrX1ZpZXdfUGFpbnRfQ29udGV4dCogY3R4dCwgZmxvYXQgc2NhbGVfeCwgZmxvYXQgc2Nh
bGVfeSkKK3ZvaWQgZXdrX3ZpZXdfcGFpbnRfY29udGV4dF9zY2FsZShFd2tfVmlld19QYWludF9D
b250ZXh0KiBjb250ZXh0LCBmbG9hdCBzY2FsZVgsIGZsb2F0IHNjYWxlWSkKIHsKLSAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTihjdHh0KTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTihjb250ZXh0KTsKIAotICAgIGN0eHQtPmdjLT5zY2FsZShXZWJDb3JlOjpGbG9hdFNpemUo
c2NhbGVfeCwgc2NhbGVfeSkpOworICAgIGNvbnRleHQtPmdjLT5zY2FsZShXZWJDb3JlOjpGbG9h
dFNpemUoc2NhbGVYLCBzY2FsZVkpKTsKIH0KIAotdm9pZCBld2tfdmlld19wYWludF9jb250ZXh0
X3RyYW5zbGF0ZShFd2tfVmlld19QYWludF9Db250ZXh0KiBjdHh0LCBmbG9hdCB4LCBmbG9hdCB5
KQordm9pZCBld2tfdmlld19wYWludF9jb250ZXh0X3RyYW5zbGF0ZShFd2tfVmlld19QYWludF9D
b250ZXh0KiBjb250ZXh0LCBmbG9hdCB4LCBmbG9hdCB5KQogewotICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOKGN0eHQpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGNvbnRl
eHQpOwogCi0gICAgY3R4dC0+Z2MtPnRyYW5zbGF0ZSh4LCB5KTsKKyAgICBjb250ZXh0LT5nYy0+
dHJhbnNsYXRlKHgsIHkpOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfcGFpbnQoRXdrX1ZpZXdf
UHJpdmF0ZV9EYXRhKiBwcml2LCBjYWlyb190KiBjciwgY29uc3QgRWluYV9SZWN0YW5nbGUqIGFy
ZWEpCkBAIC0yNjIxLDEwICsyNjIxLDEwIEBAIEVpbmFfQm9vbCBld2tfdmlld19wYWludF9jb250
ZW50cyhFd2tfVmlld19Qcml2YXRlX0RhdGEqIHByaXYsIGNhaXJvX3QqIGNyLCBjb25zCiAgKgog
ICogRW1pdHMgc2lnbmFsOiAicmVhZHkiIHdpdGggbm8gcGFyYW1ldGVycy4KICAqLwotdm9pZCBl
d2tfdmlld19yZWFkeShFdmFzX09iamVjdCogbykKK3ZvaWQgZXdrX3ZpZXdfcmVhZHkoRXZhc19P
YmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgREJHKCJvPSVwIiwgbyk7Ci0gICAgZXZhc19vYmplY3Rf
c21hcnRfY2FsbGJhY2tfY2FsbChvLCAicmVhZHkiLCAwKTsKKyAgICBEQkcoImV3a1ZpZXc9JXAi
LCBld2tWaWV3KTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKGV3a1ZpZXcs
ICJyZWFkeSIsIDApOwogfQogCiAvKioKQEAgLTI2MzUsOSArMjYzNSw5IEBAIHZvaWQgZXdrX3Zp
ZXdfcmVhZHkoRXZhc19PYmplY3QqIG8pCiAgKiBFbWl0cyBzaWduYWw6ICJpbnB1dG1ldGhvZCxj
aGFuZ2VkIiB3aXRoIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgaXQncwogICogZW5hYmxl
ZCBvciBub3QuCiAgKi8KLXZvaWQgZXdrX3ZpZXdfaW5wdXRfbWV0aG9kX3N0YXRlX3NldChFdmFz
X09iamVjdCogbywgRWluYV9Cb29sIGFjdGl2ZSkKK3ZvaWQgZXdrX3ZpZXdfaW5wdXRfbWV0aG9k
X3N0YXRlX3NldChFdmFzX09iamVjdCogZXdrVmlldywgRWluYV9Cb29sIGFjdGl2ZSkKIHsKLSAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkKTsKKyAgICBFV0tfVklFV19TRF9HRVRf
T1JfUkVUVVJOKGV3a1ZpZXcsIHNkKTsKICAgICBFV0tfVklFV19QUklWX0dFVChzZCwgcHJpdik7
CiAgICAgV2ViQ29yZTo6RnJhbWUqIGZvY3VzZWRGcmFtZSA9IHByaXYtPnBhZ2UtPmZvY3VzQ29u
dHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKTsKIApAQCAtMjY2NCw3ICsyNjY0LDcgQEAg
dm9pZCBld2tfdmlld19pbnB1dF9tZXRob2Rfc3RhdGVfc2V0KEV2YXNfT2JqZWN0KiBvLCBFaW5h
X0Jvb2wgYWN0aXZlKQogICAgICAgICB9CiAgICAgfQogCi0gICAgZXZhc19vYmplY3Rfc21hcnRf
Y2FsbGJhY2tfY2FsbChvLCAiaW5wdXRtZXRob2QsY2hhbmdlZCIsICh2b2lkKilhY3RpdmUpOwor
ICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdrVmlldywgImlucHV0bWV0aG9k
LGNoYW5nZWQiLCAodm9pZCopYWN0aXZlKTsKIH0KIAogLyoqCkBAIC0yNjczLDEwICsyNjczLDEw
IEBAIHZvaWQgZXdrX3ZpZXdfaW5wdXRfbWV0aG9kX3N0YXRlX3NldChFdmFzX09iamVjdCogbywg
RWluYV9Cb29sIGFjdGl2ZSkKICAqCiAgKiBFbWl0cyBzaWduYWw6ICJ0aXRsZSxjaGFuZ2VkIiB3
aXRoIHBvaW50ZXIgdG8gbmV3IHRpdGxlIHN0cmluZy4KICAqLwotdm9pZCBld2tfdmlld190aXRs
ZV9zZXQoRXZhc19PYmplY3QqIG8sIGNvbnN0IGNoYXIqIHRpdGxlKQordm9pZCBld2tfdmlld190
aXRsZV9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGNvbnN0IGNoYXIqIHRpdGxlKQogewotICAg
IERCRygibz0lcCwgdGl0bGU9JXMiLCBvLCB0aXRsZSA/IHRpdGxlIDogIihudWxsKSIpOwotICAg
IGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwobywgInRpdGxlLGNoYW5nZWQiLCAodm9p
ZCopdGl0bGUpOworICAgIERCRygiZXdrVmlldz0lcCwgdGl0bGU9JXMiLCBld2tWaWV3LCB0aXRs
ZSA/IHRpdGxlIDogIihudWxsKSIpOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2Nh
bGwoZXdrVmlldywgInRpdGxlLGNoYW5nZWQiLCAodm9pZCopdGl0bGUpOwogfQogCiAvKioKQEAg
LTI2ODUsMTIgKzI2ODUsMTIgQEAgdm9pZCBld2tfdmlld190aXRsZV9zZXQoRXZhc19PYmplY3Qq
IG8sIGNvbnN0IGNoYXIqIHRpdGxlKQogICoKICAqIEVtaXRzIHNpZ25hbDogInVyaSxjaGFuZ2Vk
IiB3aXRoIHBvaW50ZXIgdG8gdGhlIG5ldyB1cmkgc3RyaW5nLgogICovCi12b2lkIGV3a192aWV3
X3VyaV9jaGFuZ2VkKEV2YXNfT2JqZWN0KiBvKQordm9pZCBld2tfdmlld191cmlfY2hhbmdlZChF
dmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8s
IHNkKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkKTsKICAgICBj
b25zdCBjaGFyKiB1cmkgPSBld2tfZnJhbWVfdXJpX2dldChzZC0+bWFpbl9mcmFtZSk7Ci0gICAg
REJHKCJvPSVwLCB1cmk9JXMiLCBvLCB1cmkgPyB1cmkgOiAiKG51bGwpIik7Ci0gICAgZXZhc19v
YmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChvLCAidXJpLGNoYW5nZWQiLCAodm9pZCopdXJpKTsK
KyAgICBEQkcoImV3a1ZpZXc9JXAsIHVyaT0lcyIsIGV3a1ZpZXcsIHVyaSA/IHVyaSA6ICIobnVs
bCkiKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKGV3a1ZpZXcsICJ1cmks
Y2hhbmdlZCIsICh2b2lkKil1cmkpOwogfQogCiAvKioKQEAgLTI3MDIsOSArMjcwMiw5IEBAIHZv
aWQgZXdrX3ZpZXdfdXJpX2NoYW5nZWQoRXZhc19PYmplY3QqIG8pCiAgKgogICogRW1pdHMgc2ln
bmFsOiAibG9hZCxkb2N1bWVudCxmaW5pc2hlZCIgd2l0aCBAcCBmcmFtZSBhcyB0aGUgcGFyYW1l
dGVyLgogICovCi12b2lkIGV3a192aWV3X2xvYWRfZG9jdW1lbnRfZmluaXNoZWQoRXZhc19PYmpl
Y3QqIG8sIEV2YXNfT2JqZWN0KiBmcmFtZSkKK3ZvaWQgZXdrX3ZpZXdfbG9hZF9kb2N1bWVudF9m
aW5pc2hlZChFdmFzX09iamVjdCogZXdrVmlldywgRXZhc19PYmplY3QqIGZyYW1lKQogewotICAg
IGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwobywgImxvYWQsZG9jdW1lbnQsZmluaXNo
ZWQiLCBmcmFtZSk7CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChld2tWaWV3
LCAibG9hZCxkb2N1bWVudCxmaW5pc2hlZCIsIGZyYW1lKTsKIH0KIAogLyoqCkBAIC0yNzE1LDEw
ICsyNzE1LDEwIEBAIHZvaWQgZXdrX3ZpZXdfbG9hZF9kb2N1bWVudF9maW5pc2hlZChFdmFzX09i
amVjdCogbywgRXZhc19PYmplY3QqIGZyYW1lKQogICoKICAqIEVtaXRzIHNpZ25hbDogImxvYWQs
c3RhcnRlZCIgd2l0aCBubyBwYXJhbWV0ZXJzLgogICovCi12b2lkIGV3a192aWV3X2xvYWRfc3Rh
cnRlZChFdmFzX09iamVjdCogbykKK3ZvaWQgZXdrX3ZpZXdfbG9hZF9zdGFydGVkKEV2YXNfT2Jq
ZWN0KiBld2tWaWV3KQogewotICAgIERCRygibz0lcCIsIG8pOwotICAgIGV2YXNfb2JqZWN0X3Nt
YXJ0X2NhbGxiYWNrX2NhbGwobywgImxvYWQsc3RhcnRlZCIsIDApOworICAgIERCRygiZXdrVmll
dz0lcCIsIGV3a1ZpZXcpOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdr
VmlldywgImxvYWQsc3RhcnRlZCIsIDApOwogfQogCiAvKioKQEAgLTI3MjgsMTAgKzI3MjgsMTAg
QEAgdm9pZCBld2tfdmlld19sb2FkX3N0YXJ0ZWQoRXZhc19PYmplY3QqIG8pCiAgKgogICogRW1p
dHMgc2lnbmFsOiAibG9hZCxzdGFydGVkIiBvbiBtYWluIGZyYW1lIHdpdGggbm8gcGFyYW1ldGVy
cy4KICAqLwotdm9pZCBld2tfdmlld19mcmFtZV9tYWluX2xvYWRfc3RhcnRlZChFdmFzX09iamVj
dCogbykKK3ZvaWQgZXdrX3ZpZXdfZnJhbWVfbWFpbl9sb2FkX3N0YXJ0ZWQoRXZhc19PYmplY3Qq
IGV3a1ZpZXcpCiB7Ci0gICAgREJHKCJvPSVwIiwgbyk7Ci0gICAgRXZhc19PYmplY3QqIGZyYW1l
ID0gZXdrX3ZpZXdfZnJhbWVfbWFpbl9nZXQobyk7CisgICAgREJHKCJld2tWaWV3PSVwIiwgZXdr
Vmlldyk7CisgICAgRXZhc19PYmplY3QqIGZyYW1lID0gZXdrX3ZpZXdfZnJhbWVfbWFpbl9nZXQo
ZXdrVmlldyk7CiAgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChmcmFtZSwgImxv
YWQsc3RhcnRlZCIsIDApOwogfQogCkBAIC0yNzQzLDEwICsyNzQzLDEwIEBAIHZvaWQgZXdrX3Zp
ZXdfZnJhbWVfbWFpbl9sb2FkX3N0YXJ0ZWQoRXZhc19PYmplY3QqIG8pCiAgKgogICogRW1pdHMg
c2lnbmFsOiAibG9hZCxwcm92aXNpb25hbCIgb24gVmlldyB3aXRoIG5vIHBhcmFtZXRlcnMuCiAg
Ki8KLXZvaWQgZXdrX3ZpZXdfbG9hZF9wcm92aXNpb25hbChFdmFzX09iamVjdCogbykKK3ZvaWQg
ZXdrX3ZpZXdfbG9hZF9wcm92aXNpb25hbChFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBE
QkcoIm89JXAiLCBvKTsKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKG8sICJs
b2FkLHByb3Zpc2lvbmFsIiwgMCk7CisgICAgREJHKCJld2tWaWV3PSVwIiwgZXdrVmlldyk7Cisg
ICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChld2tWaWV3LCAibG9hZCxwcm92aXNp
b25hbCIsIDApOwogfQogCiAvKioKQEAgLTI3NTcsMTAgKzI3NTcsMTAgQEAgdm9pZCBld2tfdmll
d19sb2FkX3Byb3Zpc2lvbmFsKEV2YXNfT2JqZWN0KiBvKQogICoKICAqIEVtaXRzIHNpZ25hbDog
ImxvYWQsbmV3d2luZG93LHNob3ciIG9uIHZpZXcgd2l0aCBubyBwYXJhbWV0ZXJzLgogICovCi12
b2lkIGV3a192aWV3X2xvYWRfc2hvdyhFdmFzX09iamVjdCogbykKK3ZvaWQgZXdrX3ZpZXdfbG9h
ZF9zaG93KEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIERCRygibz0lcCIsIG8pOwotICAg
IGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwobywgImxvYWQsbmV3d2luZG93LHNob3ci
LCAwKTsKKyAgICBEQkcoImV3a1ZpZXc9JXAiLCBld2tWaWV3KTsKKyAgICBldmFzX29iamVjdF9z
bWFydF9jYWxsYmFja19jYWxsKGV3a1ZpZXcsICJsb2FkLG5ld3dpbmRvdyxzaG93IiwgMCk7CiB9
CiAKIApAQCAtMjc3MCwxMCArMjc3MCwxMCBAQCB2b2lkIGV3a192aWV3X2xvYWRfc2hvdyhFdmFz
X09iamVjdCogbykKICAqCiAgKiBAcGFyYW0gbyBWaWV3LgogICovCi12b2lkIGV3a192aWV3X2Zy
YW1lX21haW5fY2xlYXJlZChFdmFzX09iamVjdCogbykKK3ZvaWQgZXdrX3ZpZXdfZnJhbWVfbWFp
bl9jbGVhcmVkKEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIERCRygibz0lcCIsIG8pOwot
ICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QpOworICAgIERCRygiZXdrVmlldz0l
cCIsIGV3a1ZpZXcpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2Qp
OwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGktPmZsdXNoKTsKICAgICBz
ZC0+YXBpLT5mbHVzaChzZCk7CiB9CkBAIC0yNzg2LDEwICsyNzg2LDEwIEBAIHZvaWQgZXdrX3Zp
ZXdfZnJhbWVfbWFpbl9jbGVhcmVkKEV2YXNfT2JqZWN0KiBvKQogICoKICAqIEVtaXRzIHNpZ25h
bDogImljb24scmVjZWl2ZWQiIHdpdGggbm8gcGFyYW1ldGVycy4KICAqLwotdm9pZCBld2tfdmll
d19mcmFtZV9tYWluX2ljb25fcmVjZWl2ZWQoRXZhc19PYmplY3QqIG8pCit2b2lkIGV3a192aWV3
X2ZyYW1lX21haW5faWNvbl9yZWNlaXZlZChFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBE
QkcoIm89JXAiLCBvKTsKLSAgICBFdmFzX09iamVjdCogZnJhbWUgPSBld2tfdmlld19mcmFtZV9t
YWluX2dldChvKTsKKyAgICBEQkcoImV3a1ZpZXc9JXAiLCBld2tWaWV3KTsKKyAgICBFdmFzX09i
amVjdCogZnJhbWUgPSBld2tfdmlld19mcmFtZV9tYWluX2dldChld2tWaWV3KTsKICAgICBldmFz
X29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKGZyYW1lLCAiaWNvbixyZWNlaXZlZCIsIDApOwog
fQogCkBAIC0yODAzLDEwICsyODAzLDEwIEBAIHZvaWQgZXdrX3ZpZXdfZnJhbWVfbWFpbl9pY29u
X3JlY2VpdmVkKEV2YXNfT2JqZWN0KiBvKQogICogQG5vdGUgdGhlcmUgc2hvdWxkIG5vdCBiZSBh
bnkgZXJyb3Igc3R1ZmYgaGVyZSwgYnV0IHRyeWluZyB0byBiZQogICogICAgICAgY29tcGF0aWJs
ZSB3aXRoIHByZXZpb3VzIFdlYktpdC4KICAqLwotdm9pZCBld2tfdmlld19sb2FkX2ZpbmlzaGVk
KEV2YXNfT2JqZWN0KiBvLCBjb25zdCBFd2tfRnJhbWVfTG9hZF9FcnJvciogZXJyb3IpCit2b2lk
IGV3a192aWV3X2xvYWRfZmluaXNoZWQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGNvbnN0IEV3a19G
cmFtZV9Mb2FkX0Vycm9yKiBlcnJvcikKIHsKLSAgICBEQkcoIm89JXAsIGVycm9yPSVwIiwgbywg
ZXJyb3IpOwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwobywgImxvYWQsZmlu
aXNoZWQiLCAodm9pZCopZXJyb3IpOworICAgIERCRygiZXdrVmlldz0lcCwgZXJyb3I9JXAiLCBl
d2tWaWV3LCBlcnJvcik7CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChld2tW
aWV3LCAibG9hZCxmaW5pc2hlZCIsICh2b2lkKillcnJvcik7CiB9CiAKIC8qKgpAQCAtMjgxNSwx
MCArMjgxNSwxMCBAQCB2b2lkIGV3a192aWV3X2xvYWRfZmluaXNoZWQoRXZhc19PYmplY3QqIG8s
IGNvbnN0IEV3a19GcmFtZV9Mb2FkX0Vycm9yKiBlcnJvcikKICAqCiAgKiBFbWl0cyBzaWduYWw6
ICJsb2FkLGVycm9yIiB3aXRoIHBvaW50ZXIgdG8gRXdrX0ZyYW1lX0xvYWRfRXJyb3IuCiAgKi8K
LXZvaWQgZXdrX3ZpZXdfbG9hZF9lcnJvcihFdmFzX09iamVjdCogbywgY29uc3QgRXdrX0ZyYW1l
X0xvYWRfRXJyb3IqIGVycm9yKQordm9pZCBld2tfdmlld19sb2FkX2Vycm9yKEV2YXNfT2JqZWN0
KiBld2tWaWV3LCBjb25zdCBFd2tfRnJhbWVfTG9hZF9FcnJvciogZXJyb3IpCiB7Ci0gICAgREJH
KCJvPSVwLCBlcnJvcj0lcCIsIG8sIGVycm9yKTsKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxs
YmFja19jYWxsKG8sICJsb2FkLGVycm9yIiwgKHZvaWQqKWVycm9yKTsKKyAgICBEQkcoImV3a1Zp
ZXc9JXAsIGVycm9yPSVwIiwgZXdrVmlldywgZXJyb3IpOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0
X2NhbGxiYWNrX2NhbGwoZXdrVmlldywgImxvYWQsZXJyb3IiLCAodm9pZCopZXJyb3IpOwogfQog
CiAvKioKQEAgLTI4MjcsMTcgKzI4MjcsMTcgQEAgdm9pZCBld2tfdmlld19sb2FkX2Vycm9yKEV2
YXNfT2JqZWN0KiBvLCBjb25zdCBFd2tfRnJhbWVfTG9hZF9FcnJvciogZXJyb3IpCiAgKgogICog
RW1pdHMgc2lnbmFsOiAibG9hZCxwcm9ncmVzcyIgd2l0aCBwb2ludGVyIHRvIGEgZG91YmxlIGZy
b20gMC4wIHRvIDEuMC4KICAqLwotdm9pZCBld2tfdmlld19sb2FkX3Byb2dyZXNzX2NoYW5nZWQo
RXZhc19PYmplY3QqIG8pCit2b2lkIGV3a192aWV3X2xvYWRfcHJvZ3Jlc3NfY2hhbmdlZChFdmFz
X09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNk
KTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkKTsKICAgICBFV0tf
VklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYpOwogCiAgICAgLy8gRXZhc19Db29yZCB3
LCBoOwogICAgIGRvdWJsZSBwcm9ncmVzcyA9IHByaXYtPnBhZ2UtPnByb2dyZXNzKCktPmVzdGlt
YXRlZFByb2dyZXNzKCk7CiAKLSAgICBEQkcoIm89JXAgKHA9JTAuM2YpIiwgbywgcHJvZ3Jlc3Mp
OworICAgIERCRygiZXdrVmlldz0lcCAocD0lMC4zZikiLCBld2tWaWV3LCBwcm9ncmVzcyk7CiAK
LSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKG8sICJsb2FkLHByb2dyZXNzIiwg
JnByb2dyZXNzKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKGV3a1ZpZXcs
ICJsb2FkLHByb2dyZXNzIiwgJnByb2dyZXNzKTsKIH0KIAogLyoqCkBAIC0yODQ5LDkgKzI4NDks
OSBAQCB2b2lkIGV3a192aWV3X2xvYWRfcHJvZ3Jlc3NfY2hhbmdlZChFdmFzX09iamVjdCogbykK
ICAqCiAgKiBFbWl0cyBzaWduYWw6ICJyZXN0b3JlIiB3aXRoIGZyYW1lLgogICovCi12b2lkIGV3
a192aWV3X3Jlc3RvcmVfc3RhdGUoRXZhc19PYmplY3QqIG8sIEV2YXNfT2JqZWN0KiBmcmFtZSkK
K3ZvaWQgZXdrX3ZpZXdfcmVzdG9yZV9zdGF0ZShFdmFzX09iamVjdCogZXdrVmlldywgRXZhc19P
YmplY3QqIGZyYW1lKQogewotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwobywg
InJlc3RvcmUiLCBmcmFtZSk7CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChl
d2tWaWV3LCAicmVzdG9yZSIsIGZyYW1lKTsKIH0KIAogLyoqCkBAIC0yODc1LDEyICsyODc1LDEy
IEBAIHZvaWQgZXdrX3ZpZXdfcmVzdG9yZV9zdGF0ZShFdmFzX09iamVjdCogbywgRXZhc19PYmpl
Y3QqIGZyYW1lKQogICoKICAqIEBzZWUgZXdrX3dpbmRvd19mZWF0dXJlc19yZWYoKS4KICAqLwot
RXZhc19PYmplY3QqIGV3a192aWV3X3dpbmRvd19jcmVhdGUoRXZhc19PYmplY3QqIG8sIEVpbmFf
Qm9vbCBqYXZhc2NyaXB0LCBjb25zdCBXZWJDb3JlOjpXaW5kb3dGZWF0dXJlcyogY29yZUZlYXR1
cmVzKQorRXZhc19PYmplY3QqIGV3a192aWV3X3dpbmRvd19jcmVhdGUoRXZhc19PYmplY3QqIGV3
a1ZpZXcsIEVpbmFfQm9vbCBqYXZhc2NyaXB0LCBjb25zdCBXZWJDb3JlOjpXaW5kb3dGZWF0dXJl
cyogY29yZUZlYXR1cmVzKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2Qs
IDApOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIDApOwogCiAg
ICAgaWYgKCFzZC0+YXBpLT53aW5kb3dfY3JlYXRlKQotICAgICAgICByZXR1cm4gbzsKKyAgICAg
ICAgcmV0dXJuIGV3a1ZpZXc7CiAKICAgICBFd2tfV2luZG93X0ZlYXR1cmVzKiB3aW5kb3dfZmVh
dHVyZXMgPSBld2tfd2luZG93X2ZlYXR1cmVzX25ld19mcm9tX2NvcmUoY29yZUZlYXR1cmVzKTsK
ICAgICBpZiAoIXdpbmRvd19mZWF0dXJlcykKQEAgLTI5MDMsMTEgKzI5MDMsMTEgQEAgRXZhc19P
YmplY3QqIGV3a192aWV3X3dpbmRvd19jcmVhdGUoRXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCBq
YXZhc2NyaXB0LCBjb25zdAogICoKICAqIEBwYXJhbSBvIFZpZXcgdG8gYmUgY2xvc2VkLgogICov
Ci12b2lkIGV3a192aWV3X3dpbmRvd19jbG9zZShFdmFzX09iamVjdCogbykKK3ZvaWQgZXdrX3Zp
ZXdfd2luZG93X2Nsb3NlKEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NE
X0dFVF9PUl9SRVRVUk4obywgc2QpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdr
Vmlldywgc2QpOwogCi0gICAgZXdrX3ZpZXdfc3RvcChvKTsKKyAgICBld2tfdmlld19zdG9wKGV3
a1ZpZXcpOwogICAgIGlmICghc2QtPmFwaS0+d2luZG93X2Nsb3NlKQogICAgICAgICByZXR1cm47
CiAgICAgc2QtPmFwaS0+d2luZG93X2Nsb3NlKHNkKTsKQEAgLTI5MTksOSArMjkxOSw5IEBAIHZv
aWQgZXdrX3ZpZXdfd2luZG93X2Nsb3NlKEV2YXNfT2JqZWN0KiBvKQogICoKICAqIEVtaXRzIHNp
Z25hbDogImxpbmssaG92ZXIsaW4iCiAgKi8KLXZvaWQgZXdrX3ZpZXdfbW91c2VfbGlua19ob3Zl
cl9pbihFdmFzX09iamVjdCogbywgdm9pZCogZGF0YSkKK3ZvaWQgZXdrX3ZpZXdfbW91c2VfbGlu
a19ob3Zlcl9pbihFdmFzX09iamVjdCogZXdrVmlldywgdm9pZCogZGF0YSkKIHsKLSAgICBldmFz
X29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKG8sICJsaW5rLGhvdmVyLGluIiwgZGF0YSk7Cisg
ICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChld2tWaWV3LCAibGluayxob3Zlcixp
biIsIGRhdGEpOwogfQogCiAvKioKQEAgLTI5MzAsOSArMjkzMCw5IEBAIHZvaWQgZXdrX3ZpZXdf
bW91c2VfbGlua19ob3Zlcl9pbihFdmFzX09iamVjdCogbywgdm9pZCogZGF0YSkKICAqCiAgKiBF
bWl0cyBzaWduYWw6ICJsaW5rLGhvdmVyLG91dCIKICAqLwotdm9pZCBld2tfdmlld19tb3VzZV9s
aW5rX2hvdmVyX291dChFdmFzX09iamVjdCogbykKK3ZvaWQgZXdrX3ZpZXdfbW91c2VfbGlua19o
b3Zlcl9vdXQoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRf
Y2FsbGJhY2tfY2FsbChvLCAibGluayxob3ZlcixvdXQiLCAwKTsKKyAgICBldmFzX29iamVjdF9z
bWFydF9jYWxsYmFja19jYWxsKGV3a1ZpZXcsICJsaW5rLGhvdmVyLG91dCIsIDApOwogfQogCiAv
KioKQEAgLTI5NDEsMTAgKzI5NDEsMTAgQEAgdm9pZCBld2tfdmlld19tb3VzZV9saW5rX2hvdmVy
X291dChFdmFzX09iamVjdCogbykKICAqCiAgKiBFbWl0cyBzaWduYWw6ICJ0b29sYmFycyx2aXNp
YmxlLHNldCIgd2l0aCBhIHBvaW50ZXIgdG8gYSBib29sZWFuLgogICovCi12b2lkIGV3a192aWV3
X3Rvb2xiYXJzX3Zpc2libGVfc2V0KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wgdmlzaWJsZSkK
K3ZvaWQgZXdrX3ZpZXdfdG9vbGJhcnNfdmlzaWJsZV9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcs
IEVpbmFfQm9vbCB2aXNpYmxlKQogewotICAgIERCRygibz0lcCAodmlzaWJsZT0lZCkiLCBvLCAh
IXZpc2libGUpOwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwobywgInRvb2xi
YXJzLHZpc2libGUsc2V0IiwgJnZpc2libGUpOworICAgIERCRygiZXdrVmlldz0lcCAodmlzaWJs
ZT0lZCkiLCBld2tWaWV3LCAhIXZpc2libGUpOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxi
YWNrX2NhbGwoZXdrVmlldywgInRvb2xiYXJzLHZpc2libGUsc2V0IiwgJnZpc2libGUpOwogfQog
CiAvKioKQEAgLTI5NTgsMTEgKzI5NTgsMTEgQEAgdm9pZCBld2tfdmlld190b29sYmFyc192aXNp
YmxlX3NldChFdmFzX09iamVjdCogbywgRWluYV9Cb29sIHZpc2libGUpCiAgKgogICogRW1pdHMg
c2lnbmFsOiAidG9vbGJhcnMsdmlzaWJsZSxnZXQiIHdpdGggYSBwb2ludGVyIHRvIGEgYm9vbGVh
bi4KICAqLwotdm9pZCBld2tfdmlld190b29sYmFyc192aXNpYmxlX2dldChFdmFzX09iamVjdCog
bywgRWluYV9Cb29sKiB2aXNpYmxlKQordm9pZCBld2tfdmlld190b29sYmFyc192aXNpYmxlX2dl
dChFdmFzX09iamVjdCogZXdrVmlldywgRWluYV9Cb29sKiB2aXNpYmxlKQogewotICAgIERCRygi
JXMsIG89JXAiLCBfX2Z1bmNfXywgbyk7CisgICAgREJHKCIlcywgbz0lcCIsIF9fZnVuY19fLCBl
d2tWaWV3KTsKICAgICAqdmlzaWJsZSA9IEVJTkFfRkFMU0U7Ci0gICAgZXZhc19vYmplY3Rfc21h
cnRfY2FsbGJhY2tfY2FsbChvLCAidG9vbGJhcnMsdmlzaWJsZSxnZXQiLCB2aXNpYmxlKTsKKyAg
ICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKGV3a1ZpZXcsICJ0b29sYmFycyx2aXNp
YmxlLGdldCIsIHZpc2libGUpOwogfQogCiAvKioKQEAgLTI5NzQsMTAgKzI5NzQsMTAgQEAgdm9p
ZCBld2tfdmlld190b29sYmFyc192aXNpYmxlX2dldChFdmFzX09iamVjdCogbywgRWluYV9Cb29s
KiB2aXNpYmxlKQogICoKICAqIEVtaXRzIHNpZ25hbDogInN0YXR1c2Jhcix2aXNpYmxlLHNldCIg
d2l0aCBhIHBvaW50ZXIgdG8gYSBib29sZWFuLgogICovCi12b2lkIGV3a192aWV3X3N0YXR1c2Jh
cl92aXNpYmxlX3NldChFdmFzX09iamVjdCogbywgRWluYV9Cb29sIHZpc2libGUpCit2b2lkIGV3
a192aWV3X3N0YXR1c2Jhcl92aXNpYmxlX3NldChFdmFzX09iamVjdCogZXdrVmlldywgRWluYV9C
b29sIHZpc2libGUpCiB7Ci0gICAgREJHKCJvPSVwICh2aXNpYmxlPSVkKSIsIG8sICEhdmlzaWJs
ZSk7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChvLCAic3RhdHVzYmFyLHZp
c2libGUsc2V0IiwgJnZpc2libGUpOworICAgIERCRygiZXdrVmlldz0lcCAodmlzaWJsZT0lZCki
LCBld2tWaWV3LCAhIXZpc2libGUpOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2Nh
bGwoZXdrVmlldywgInN0YXR1c2Jhcix2aXNpYmxlLHNldCIsICZ2aXNpYmxlKTsKIH0KIAogLyoq
CkBAIC0yOTkxLDExICsyOTkxLDExIEBAIHZvaWQgZXdrX3ZpZXdfc3RhdHVzYmFyX3Zpc2libGVf
c2V0KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wgdmlzaWJsZSkKICAqCiAgKiBFbWl0cyBzaWdu
YWw6ICJzdGF0dXNiYXIsdmlzaWJsZSxnZXQiIHdpdGggYSBwb2ludGVyIHRvIGEgYm9vbGVhbi4K
ICAqLwotdm9pZCBld2tfdmlld19zdGF0dXNiYXJfdmlzaWJsZV9nZXQoRXZhc19PYmplY3QqIG8s
IEVpbmFfQm9vbCogdmlzaWJsZSkKK3ZvaWQgZXdrX3ZpZXdfc3RhdHVzYmFyX3Zpc2libGVfZ2V0
KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wqIHZpc2libGUpCiB7Ci0gICAgREJHKCIl
cywgbz0lcCIsIF9fZnVuY19fLCBvKTsKKyAgICBEQkcoIiVzLCBvPSVwIiwgX19mdW5jX18sIGV3
a1ZpZXcpOwogICAgICp2aXNpYmxlID0gRUlOQV9GQUxTRTsKLSAgICBldmFzX29iamVjdF9zbWFy
dF9jYWxsYmFja19jYWxsKG8sICJzdGF0dXNiYXIsdmlzaWJsZSxnZXQiLCB2aXNpYmxlKTsKKyAg
ICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKGV3a1ZpZXcsICJzdGF0dXNiYXIsdmlz
aWJsZSxnZXQiLCB2aXNpYmxlKTsKIH0KIAogLyoqCkBAIC0zMDA3LDExICszMDA3LDExIEBAIHZv
aWQgZXdrX3ZpZXdfc3RhdHVzYmFyX3Zpc2libGVfZ2V0KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jv
b2wqIHZpc2libGUpCiAgKgogICogRW1pdHMgc2lnbmFsOiAic3RhdHVzYmFyLHRleHQsc2V0IiB3
aXRoIGEgc3RyaW5nLgogICovCi12b2lkIGV3a192aWV3X3N0YXR1c2Jhcl90ZXh0X3NldChFdmFz
X09iamVjdCogbywgY29uc3QgY2hhciogdGV4dCkKK3ZvaWQgZXdrX3ZpZXdfc3RhdHVzYmFyX3Rl
eHRfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBjaGFyKiB0ZXh0KQogewotICAgIERC
Rygibz0lcCAodGV4dD0lcykiLCBvLCB0ZXh0KTsKKyAgICBEQkcoImV3a1ZpZXc9JXAgKHRleHQ9
JXMpIiwgZXdrVmlldywgdGV4dCk7CiAgICAgSU5GKCJzdGF0dXMgYmFyIHRleHQgc2V0OiAlcyIs
IHRleHQpOwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwobywgInN0YXR1c2Jh
cix0ZXh0LHNldCIsICh2b2lkKil0ZXh0KTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFj
a19jYWxsKGV3a1ZpZXcsICJzdGF0dXNiYXIsdGV4dCxzZXQiLCAodm9pZCopdGV4dCk7CiB9CiAK
IC8qKgpAQCAtMzAyMywxMCArMzAyMywxMCBAQCB2b2lkIGV3a192aWV3X3N0YXR1c2Jhcl90ZXh0
X3NldChFdmFzX09iamVjdCogbywgY29uc3QgY2hhciogdGV4dCkKICAqCiAgKiBFbWl0cyBzaWdu
YWw6ICJzY3JvbGxiYXJzLHZpc2libGUsc2V0IiB3aXRoIGEgcG9pbnRlciB0byBhIGJvb2xlYW4u
CiAgKi8KLXZvaWQgZXdrX3ZpZXdfc2Nyb2xsYmFyc192aXNpYmxlX3NldChFdmFzX09iamVjdCog
bywgRWluYV9Cb29sIHZpc2libGUpCit2b2lkIGV3a192aWV3X3Njcm9sbGJhcnNfdmlzaWJsZV9z
ZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCB2aXNpYmxlKQogewotICAgIERCRygi
bz0lcCAodmlzaWJsZT0lZCkiLCBvLCAhIXZpc2libGUpOwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0
X2NhbGxiYWNrX2NhbGwobywgInNjcm9sbGJhcnMsdmlzaWJsZSxzZXQiLCAmdmlzaWJsZSk7Cisg
ICAgREJHKCJld2tWaWV3PSVwICh2aXNpYmxlPSVkKSIsIGV3a1ZpZXcsICEhdmlzaWJsZSk7Cisg
ICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChld2tWaWV3LCAic2Nyb2xsYmFycyx2
aXNpYmxlLHNldCIsICZ2aXNpYmxlKTsKIH0KIAogLyoqCkBAIC0zMDQwLDExICszMDQwLDExIEBA
IHZvaWQgZXdrX3ZpZXdfc2Nyb2xsYmFyc192aXNpYmxlX3NldChFdmFzX09iamVjdCogbywgRWlu
YV9Cb29sIHZpc2libGUpCiAgKgogICogRW1pdHMgc2lnbmFsOiAic2Nyb2xsYmFycyx2aXNpYmxl
LGdldCIgd2l0aCBhIHBvaW50ZXIgdG8gYSBib29sZWFuLgogICovCi12b2lkIGV3a192aWV3X3Nj
cm9sbGJhcnNfdmlzaWJsZV9nZXQoRXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCogdmlzaWJsZSkK
K3ZvaWQgZXdrX3ZpZXdfc2Nyb2xsYmFyc192aXNpYmxlX2dldChFdmFzX09iamVjdCogZXdrVmll
dywgRWluYV9Cb29sKiB2aXNpYmxlKQogewotICAgIERCRygiJXMsIG89JXAiLCBfX2Z1bmNfXywg
byk7CisgICAgREJHKCIlcywgbz0lcCIsIF9fZnVuY19fLCBld2tWaWV3KTsKICAgICAqdmlzaWJs
ZSA9IEVJTkFfRkFMU0U7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChvLCAi
c2Nyb2xsYmFycyx2aXNpYmxlLGdldCIsIHZpc2libGUpOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0
X2NhbGxiYWNrX2NhbGwoZXdrVmlldywgInNjcm9sbGJhcnMsdmlzaWJsZSxnZXQiLCB2aXNpYmxl
KTsKIH0KIAogLyoqCkBAIC0zMDU2LDEwICszMDU2LDEwIEBAIHZvaWQgZXdrX3ZpZXdfc2Nyb2xs
YmFyc192aXNpYmxlX2dldChFdmFzX09iamVjdCogbywgRWluYV9Cb29sKiB2aXNpYmxlKQogICoK
ICAqIEVtaXRzIHNpZ25hbDogIm1lbnViYXIsdmlzaWJsZSxzZXQiIHdpdGggYSBwb2ludGVyIHRv
IGEgYm9vbGVhbi4KICAqLwotdm9pZCBld2tfdmlld19tZW51YmFyX3Zpc2libGVfc2V0KEV2YXNf
T2JqZWN0KiBvLCBFaW5hX0Jvb2wgdmlzaWJsZSkKK3ZvaWQgZXdrX3ZpZXdfbWVudWJhcl92aXNp
YmxlX3NldChFdmFzX09iamVjdCogZXdrVmlldywgRWluYV9Cb29sIHZpc2libGUpCiB7Ci0gICAg
REJHKCJvPSVwICh2aXNpYmxlPSVkKSIsIG8sICEhdmlzaWJsZSk7Ci0gICAgZXZhc19vYmplY3Rf
c21hcnRfY2FsbGJhY2tfY2FsbChvLCAibWVudWJhcix2aXNpYmxlLHNldCIsICZ2aXNpYmxlKTsK
KyAgICBEQkcoImV3a1ZpZXc9JXAgKHZpc2libGU9JWQpIiwgZXdrVmlldywgISF2aXNpYmxlKTsK
KyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKGV3a1ZpZXcsICJtZW51YmFyLHZp
c2libGUsc2V0IiwgJnZpc2libGUpOwogfQogCiAvKioKQEAgLTMwNzMsMTEgKzMwNzMsMTEgQEAg
dm9pZCBld2tfdmlld19tZW51YmFyX3Zpc2libGVfc2V0KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jv
b2wgdmlzaWJsZSkKICAqCiAgKiBFbWl0cyBzaWduYWw6ICJtZW51YmFyLHZpc2libGUsZ2V0IiB3
aXRoIGEgcG9pbnRlciB0byBhIGJvb2xlYW4uCiAgKi8KLXZvaWQgZXdrX3ZpZXdfbWVudWJhcl92
aXNpYmxlX2dldChFdmFzX09iamVjdCogbywgRWluYV9Cb29sKiB2aXNpYmxlKQordm9pZCBld2tf
dmlld19tZW51YmFyX3Zpc2libGVfZ2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wq
IHZpc2libGUpCiB7Ci0gICAgREJHKCIlcywgbz0lcCIsIF9fZnVuY19fLCBvKTsKKyAgICBEQkco
IiVzLCBvPSVwIiwgX19mdW5jX18sIGV3a1ZpZXcpOwogICAgICp2aXNpYmxlID0gRUlOQV9GQUxT
RTsKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKG8sICJtZW51YmFyLHZpc2li
bGUsZ2V0IiwgdmlzaWJsZSk7CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChl
d2tWaWV3LCAibWVudWJhcix2aXNpYmxlLGdldCIsIHZpc2libGUpOwogfQogCiAvKioKQEAgLTMw
OTAsMTAgKzMwOTAsMTAgQEAgdm9pZCBld2tfdmlld19tZW51YmFyX3Zpc2libGVfZ2V0KEV2YXNf
T2JqZWN0KiBvLCBFaW5hX0Jvb2wqIHZpc2libGUpCiAgKiBFbWl0cyBzaWduYWw6ICJ0b29sdGlw
LHRleHQsc2V0IiB3aXRoIGEgc3RyaW5nLiBJZiB0b29sdGlwIG11c3QgYmUgYWN0dWFsbHkKICAq
IHJlbW92ZWQsIHRleHQgd2lsbCBiZSAwIG9yICdcMCcKICAqLwotdm9pZCBld2tfdmlld190b29s
dGlwX3RleHRfc2V0KEV2YXNfT2JqZWN0KiBvLCBjb25zdCBjaGFyKiB0ZXh0KQordm9pZCBld2tf
dmlld190b29sdGlwX3RleHRfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBjaGFyKiB0
ZXh0KQogewotICAgIERCRygibz0lcCB0ZXh0PSVzIiwgbywgdGV4dCk7Ci0gICAgZXZhc19vYmpl
Y3Rfc21hcnRfY2FsbGJhY2tfY2FsbChvLCAidG9vbHRpcCx0ZXh0LHNldCIsICh2b2lkKil0ZXh0
KTsKKyAgICBEQkcoImV3a1ZpZXc9JXAgdGV4dD0lcyIsIGV3a1ZpZXcsIHRleHQpOworICAgIGV2
YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdrVmlldywgInRvb2x0aXAsdGV4dCxzZXQi
LCAodm9pZCopdGV4dCk7CiB9CiAKIC8qKgpAQCAtMzEwNSwxOSArMzEwNSwxOSBAQCB2b2lkIGV3
a192aWV3X3Rvb2x0aXBfdGV4dF9zZXQoRXZhc19PYmplY3QqIG8sIGNvbnN0IGNoYXIqIHRleHQp
CiAgKiBAc291cmNlSUQgU291cmNlIGlkLgogICoKICAqLwotdm9pZCBld2tfdmlld19hZGRfY29u
c29sZV9tZXNzYWdlKEV2YXNfT2JqZWN0KiBvLCBjb25zdCBjaGFyKiBtZXNzYWdlLCB1bnNpZ25l
ZCBpbnQgbGluZU51bWJlciwgY29uc3QgY2hhciogc291cmNlSUQpCit2b2lkIGV3a192aWV3X2Fk
ZF9jb25zb2xlX21lc3NhZ2UoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGNvbnN0IGNoYXIqIG1lc3Nh
Z2UsIHVuc2lnbmVkIGludCBsaW5lTnVtYmVyLCBjb25zdCBjaGFyKiBzb3VyY2VJRCkKIHsKLSAg
ICBEQkcoIm89JXAgbWVzc2FnZT0lcyBsaW5lTnVtYmVyPSV1IHNvdXJjZUlEPSVzIiwgbywgbWVz
c2FnZSwgbGluZU51bWJlciwgc291cmNlSUQpOwotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRV
Uk4obywgc2QpOworICAgIERCRygiZXdrVmlldz0lcCBtZXNzYWdlPSVzIGxpbmVOdW1iZXI9JXUg
c291cmNlSUQ9JXMiLCBld2tWaWV3LCBtZXNzYWdlLCBsaW5lTnVtYmVyLCBzb3VyY2VJRCk7Cisg
ICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCk7CiAgICAgRUlOQV9TQUZF
VFlfT05fTlVMTF9SRVRVUk4oc2QtPmFwaSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk4oc2QtPmFwaS0+YWRkX2NvbnNvbGVfbWVzc2FnZSk7CiAgICAgc2QtPmFwaS0+YWRkX2NvbnNv
bGVfbWVzc2FnZShzZCwgbWVzc2FnZSwgbGluZU51bWJlciwgc291cmNlSUQpOwogfQogCi1ib29s
IGV3a192aWV3X2ZvY3VzX2Nhbl9jeWNsZShFdmFzX09iamVjdCogbywgRXdrX0ZvY3VzX0RpcmVj
dGlvbiBkaXJlY3Rpb24pCitib29sIGV3a192aWV3X2ZvY3VzX2Nhbl9jeWNsZShFdmFzX09iamVj
dCogZXdrVmlldywgRXdrX0ZvY3VzX0RpcmVjdGlvbiBkaXJlY3Rpb24pCiB7Ci0gICAgREJHKCJv
PSVwIGRpcmVjdGlvbj0lZCIsIG8sIGRpcmVjdGlvbik7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihvLCBzZCwgZmFsc2UpOworICAgIERCRygiZXdrVmlldz0lcCBkaXJlY3Rpb249JWQi
LCBld2tWaWV3LCBkaXJlY3Rpb24pOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdr
Vmlldywgc2QsIGZhbHNlKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2Qt
PmFwaSwgZmFsc2UpOwogCiAgICAgaWYgKCFzZC0+YXBpLT5mb2N1c19jYW5fY3ljbGUpCkBAIC0z
MTI2LDEwICszMTI2LDEwIEBAIGJvb2wgZXdrX3ZpZXdfZm9jdXNfY2FuX2N5Y2xlKEV2YXNfT2Jq
ZWN0KiBvLCBFd2tfRm9jdXNfRGlyZWN0aW9uIGRpcmVjdGlvbikKICAgICByZXR1cm4gc2QtPmFw
aS0+Zm9jdXNfY2FuX2N5Y2xlKHNkLCBkaXJlY3Rpb24pOwogfQogCi12b2lkIGV3a192aWV3X3J1
bl9qYXZhc2NyaXB0X2FsZXJ0KEV2YXNfT2JqZWN0KiBvLCBFdmFzX09iamVjdCogZnJhbWUsIGNv
bnN0IGNoYXIqIG1lc3NhZ2UpCit2b2lkIGV3a192aWV3X3J1bl9qYXZhc2NyaXB0X2FsZXJ0KEV2
YXNfT2JqZWN0KiBld2tWaWV3LCBFdmFzX09iamVjdCogZnJhbWUsIGNvbnN0IGNoYXIqIG1lc3Nh
Z2UpCiB7Ci0gICAgREJHKCJvPSVwIGZyYW1lPSVwIG1lc3NhZ2U9JXMiLCBvLCBmcmFtZSwgbWVz
c2FnZSk7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCk7CisgICAgREJHKCJl
d2tWaWV3PSVwIGZyYW1lPSVwIG1lc3NhZ2U9JXMiLCBld2tWaWV3LCBmcmFtZSwgbWVzc2FnZSk7
CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCk7CiAgICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFwaSk7CiAKICAgICBpZiAoIXNkLT5hcGktPnJ1bl9q
YXZhc2NyaXB0X2FsZXJ0KQpAQCAtMzEzOCwxMCArMzEzOCwxMCBAQCB2b2lkIGV3a192aWV3X3J1
bl9qYXZhc2NyaXB0X2FsZXJ0KEV2YXNfT2JqZWN0KiBvLCBFdmFzX09iamVjdCogZnJhbWUsIGNv
bnN0IGNoYQogICAgIHNkLT5hcGktPnJ1bl9qYXZhc2NyaXB0X2FsZXJ0KHNkLCBmcmFtZSwgbWVz
c2FnZSk7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld19ydW5famF2YXNjcmlwdF9jb25maXJtKEV2
YXNfT2JqZWN0KiBvLCBFdmFzX09iamVjdCogZnJhbWUsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpCitF
aW5hX0Jvb2wgZXdrX3ZpZXdfcnVuX2phdmFzY3JpcHRfY29uZmlybShFdmFzX09iamVjdCogZXdr
VmlldywgRXZhc19PYmplY3QqIGZyYW1lLCBjb25zdCBjaGFyKiBtZXNzYWdlKQogewotICAgIERC
Rygibz0lcCBmcmFtZT0lcCBtZXNzYWdlPSVzIiwgbywgZnJhbWUsIG1lc3NhZ2UpOwotICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIERCRygiZXdr
Vmlldz0lcCBmcmFtZT0lcCBtZXNzYWdlPSVzIiwgZXdrVmlldywgZnJhbWUsIG1lc3NhZ2UpOwor
ICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwog
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+YXBpLCBFSU5BX0ZBTFNFKTsK
IAogICAgIGlmICghc2QtPmFwaS0+cnVuX2phdmFzY3JpcHRfY29uZmlybSkKQEAgLTMxNTAsMTAg
KzMxNTAsMTAgQEAgRWluYV9Cb29sIGV3a192aWV3X3J1bl9qYXZhc2NyaXB0X2NvbmZpcm0oRXZh
c19PYmplY3QqIG8sIEV2YXNfT2JqZWN0KiBmcmFtZSwgY28KICAgICByZXR1cm4gc2QtPmFwaS0+
cnVuX2phdmFzY3JpcHRfY29uZmlybShzZCwgZnJhbWUsIG1lc3NhZ2UpOwogfQogCi1FaW5hX0Jv
b2wgZXdrX3ZpZXdfcnVuX2phdmFzY3JpcHRfcHJvbXB0KEV2YXNfT2JqZWN0KiBvLCBFdmFzX09i
amVjdCogZnJhbWUsIGNvbnN0IGNoYXIqIG1lc3NhZ2UsIGNvbnN0IGNoYXIqIGRlZmF1bHRWYWx1
ZSwgY2hhcioqIHZhbHVlKQorRWluYV9Cb29sIGV3a192aWV3X3J1bl9qYXZhc2NyaXB0X3Byb21w
dChFdmFzX09iamVjdCogZXdrVmlldywgRXZhc19PYmplY3QqIGZyYW1lLCBjb25zdCBjaGFyKiBt
ZXNzYWdlLCBjb25zdCBjaGFyKiBkZWZhdWx0VmFsdWUsIGNoYXIqKiB2YWx1ZSkKIHsKLSAgICBE
QkcoIm89JXAgZnJhbWU9JXAgbWVzc2FnZT0lcyIsIG8sIGZyYW1lLCBtZXNzYWdlKTsKLSAgICBF
V0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBEQkcoImV3
a1ZpZXc9JXAgZnJhbWU9JXAgbWVzc2FnZT0lcyIsIGV3a1ZpZXcsIGZyYW1lLCBtZXNzYWdlKTsK
KyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsK
ICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmFwaSwgRUlOQV9GQUxTRSk7
CiAKICAgICBpZiAoIXNkLT5hcGktPnJ1bl9qYXZhc2NyaXB0X3Byb21wdCkKQEAgLTMxNzMsMTAg
KzMxNzMsMTAgQEAgRWluYV9Cb29sIGV3a192aWV3X3J1bl9qYXZhc2NyaXB0X3Byb21wdChFdmFz
X09iamVjdCogbywgRXZhc19PYmplY3QqIGZyYW1lLCBjb24KICAqCiAgKiBAcmV0dXJuIEBjIEVJ
TkFfVFJVRSBpZiBzY3JpcHQgc2hvdWxkIGJlIHN0b3BwZWQ7IEBjIEVJTkFfRkFMU0Ugb3RoZXJ3
aXNlCiAgKi8KLUVpbmFfQm9vbCBld2tfdmlld19zaG91bGRfaW50ZXJydXB0X2phdmFzY3JpcHQo
RXZhc19PYmplY3QqIG8pCitFaW5hX0Jvb2wgZXdrX3ZpZXdfc2hvdWxkX2ludGVycnVwdF9qYXZh
c2NyaXB0KEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIERCRygibz0lcCIsIG8pOwotICAg
IEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIERCRygi
ZXdrVmlldz0lcCIsIGV3a1ZpZXcpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdr
Vmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZB
TChzZC0+YXBpLCBFSU5BX0ZBTFNFKTsKIAogICAgIGlmICghc2QtPmFwaS0+c2hvdWxkX2ludGVy
cnVwdF9qYXZhc2NyaXB0KQpAQCAtMzE5OSwxNiArMzE5OSwxNiBAQCBFaW5hX0Jvb2wgZXdrX3Zp
ZXdfc2hvdWxkX2ludGVycnVwdF9qYXZhc2NyaXB0KEV2YXNfT2JqZWN0KiBvKQogICogQHBhcmFt
IGV4cGVjdGVkX3NpemUgVGhlIGV4cGVjdGVkIHNpemUgb2YgdGhpcyBkYXRhYmFzZSBpbiBvcmRl
ciB0byBmdWxmaWxsCiAgKiBzaXRlJ3MgcmVxdWlyZW1lbnQuCiAgKi8KLXVpbnQ2NF90IGV3a192
aWV3X2V4Y2VlZGVkX2RhdGFiYXNlX3F1b3RhKEV2YXNfT2JqZWN0KiBvLCBFdmFzX09iamVjdCog
ZnJhbWUsIGNvbnN0IGNoYXIqIGRhdGFiYXNlTmFtZSwgdWludDY0X3QgY3VycmVudF9zaXplLCB1
aW50NjRfdCBleHBlY3RlZF9zaXplKQordWludDY0X3QgZXdrX3ZpZXdfZXhjZWVkZWRfZGF0YWJh
c2VfcXVvdGEoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV2YXNfT2JqZWN0KiBmcmFtZSwgY29uc3Qg
Y2hhciogZGF0YWJhc2VOYW1lLCB1aW50NjRfdCBjdXJyZW50U2l6ZSwgdWludDY0X3QgZXhwZWN0
ZWRTaXplKQogewotICAgIERCRygibz0lcCIsIG8pOwotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9S
RVRVUk4obywgc2QsIDApOworICAgIERCRygiZXdrVmlldz0lcCIsIGV3a1ZpZXcpOworICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIDApOwogICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOX1ZBTChzZC0+YXBpLCAwKTsKICAgICBpZiAoIXNkLT5hcGktPmV4Y2Vl
ZGVkX2RhdGFiYXNlX3F1b3RhKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIElORigiY3VycmVu
dF9zaXplPSUiIFBSSXU2NCAiIGV4cGVjdGVkX3NpemU9JSIgUFJJdTY0LCBjdXJyZW50X3NpemUs
IGV4cGVjdGVkX3NpemUpOwotICAgIHJldHVybiBzZC0+YXBpLT5leGNlZWRlZF9kYXRhYmFzZV9x
dW90YShzZCwgZnJhbWUsIGRhdGFiYXNlTmFtZSwgY3VycmVudF9zaXplLCBleHBlY3RlZF9zaXpl
KTsKKyAgICBJTkYoImN1cnJlbnRfc2l6ZT0lIiBQUkl1NjQgIiBleHBlY3RlZF9zaXplPSUiIFBS
SXU2NCwgY3VycmVudFNpemUsIGV4cGVjdGVkU2l6ZSk7CisgICAgcmV0dXJuIHNkLT5hcGktPmV4
Y2VlZGVkX2RhdGFiYXNlX3F1b3RhKHNkLCBmcmFtZSwgZGF0YWJhc2VOYW1lLCBjdXJyZW50U2l6
ZSwgZXhwZWN0ZWRTaXplKTsKIH0KIAogLyoqCkBAIC0zMjI0LDI4ICszMjI0LDI4IEBAIHVpbnQ2
NF90IGV3a192aWV3X2V4Y2VlZGVkX2RhdGFiYXNlX3F1b3RhKEV2YXNfT2JqZWN0KiBvLCBFdmFz
X09iamVjdCogZnJhbWUsIGNvCiAgKgogICogQHJldHVybiBARUlOQV9GQUxTRSBpZiB1c2VyIGNh
bmNlbGVkIGZpbGUgc2VsZWN0aW9uOyBARUlOQV9UUlVFIGlmIGNvbmZpcm1lZC4KICAqLwotRWlu
YV9Cb29sIGV3a192aWV3X3J1bl9vcGVuX3BhbmVsKEV2YXNfT2JqZWN0KiBvLCBFdmFzX09iamVj
dCogZnJhbWUsIEVpbmFfQm9vbCBhbGxvd3NfbXVsdGlwbGVfZmlsZXMsIGNvbnN0IGNoYXIqIGFj
Y2VwdF90eXBlcywgRWluYV9MaXN0Kiogc2VsZWN0ZWRfZmlsZW5hbWVzKQorRWluYV9Cb29sIGV3
a192aWV3X3J1bl9vcGVuX3BhbmVsKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFdmFzX09iamVjdCog
ZnJhbWUsIEVpbmFfQm9vbCBhbGxvd3NNdWx0aXBsZUZpbGVzLCBjb25zdCBjaGFyKiBhY2NlcHRU
eXBlcywgRWluYV9MaXN0Kiogc2VsZWN0ZWRGaWxlbmFtZXMpCiB7Ci0gICAgREJHKCJvPSVwIGZy
YW1lPSVwIGFsbG93c19tdWx0aXBsZV9maWxlcz0lZCIsIG8sIGZyYW1lLCBhbGxvd3NfbXVsdGlw
bGVfZmlsZXMpOwotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFM
U0UpOworICAgIERCRygiZXdrVmlldz0lcCBmcmFtZT0lcCBhbGxvd3NfbXVsdGlwbGVfZmlsZXM9
JWQiLCBld2tWaWV3LCBmcmFtZSwgYWxsb3dzTXVsdGlwbGVGaWxlcyk7CisgICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZF
VFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5hcGksIEVJTkFfRkFMU0UpOwogICAgIEVpbmFfQm9v
bCBjb25maXJtOwogCiAgICAgaWYgKCFzZC0+YXBpLT5ydW5fb3Blbl9wYW5lbCkKICAgICAgICAg
cmV0dXJuIEVJTkFfRkFMU0U7CiAKLSAgICAqc2VsZWN0ZWRfZmlsZW5hbWVzID0gMDsKKyAgICAq
c2VsZWN0ZWRGaWxlbmFtZXMgPSAwOwogCi0gICAgY29uZmlybSA9IHNkLT5hcGktPnJ1bl9vcGVu
X3BhbmVsKHNkLCBmcmFtZSwgYWxsb3dzX211bHRpcGxlX2ZpbGVzLCBhY2NlcHRfdHlwZXMsIHNl
bGVjdGVkX2ZpbGVuYW1lcyk7Ci0gICAgaWYgKCFjb25maXJtICYmICpzZWxlY3RlZF9maWxlbmFt
ZXMpCisgICAgY29uZmlybSA9IHNkLT5hcGktPnJ1bl9vcGVuX3BhbmVsKHNkLCBmcmFtZSwgYWxs
b3dzTXVsdGlwbGVGaWxlcywgYWNjZXB0VHlwZXMsIHNlbGVjdGVkRmlsZW5hbWVzKTsKKyAgICBp
ZiAoIWNvbmZpcm0gJiYgKnNlbGVjdGVkRmlsZW5hbWVzKQogICAgICAgICBFUlIoIkNhbmNlbGVk
IGZpbGUgc2VsZWN0aW9uLCBidXQgc2VsZWN0ZWQgZmlsZW5hbWVzICE9IDAuIEZyZWUgbmFtZXMg
YmVmb3JlIHJldHVybi4iKTsKICAgICByZXR1cm4gY29uZmlybTsKIH0KIAotdm9pZCBld2tfdmll
d19yZXBhaW50KEV2YXNfT2JqZWN0KiBvLCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwgRXZh
c19Db29yZCB3LCBFdmFzX0Nvb3JkIGgpCit2b2lkIGV3a192aWV3X3JlcGFpbnQoRXZhc19PYmpl
Y3QqIGV3a1ZpZXcsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5LCBFdmFzX0Nvb3JkIHdpZHRo
LCBFdmFzX0Nvb3JkIGhlaWdodCkKIHsKLSAgICBEQkcoIm89JXAsIHJlZ2lvbj0lZCwlZCArICVk
eCVkIiwgbywgeCwgeSwgdywgaCk7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBz
ZCk7CisgICAgREJHKCJld2tWaWV3PSVwLCByZWdpb249JWQsJWQgKyAlZHglZCIsIGV3a1ZpZXcs
IHgsIHksIHdpZHRoLCBoZWlnaHQpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdr
Vmlldywgc2QpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdik7CiAK
ICAgICBpZiAoIXByaXYtPm1haW5fZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigpKSB7CkBAIC0zMjUz
LDMxICszMjUzLDMxIEBAIHZvaWQgZXdrX3ZpZXdfcmVwYWludChFdmFzX09iamVjdCogbywgRXZh
c19Db29yZCB4LCBFdmFzX0Nvb3JkIHksIEV2YXNfQ29vcmQgdywKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIF9ld2tfdmlld19yZXBhaW50X2FkZChwcml2LCB4LCB5LCB3LCBoKTsKKyAg
ICBfZXdrX3ZpZXdfcmVwYWludF9hZGQocHJpdiwgeCwgeSwgd2lkdGgsIGhlaWdodCk7CiAgICAg
X2V3a192aWV3X3NtYXJ0X2NoYW5nZWQoc2QpOwogfQogCi12b2lkIGV3a192aWV3X3Njcm9sbChF
dmFzX09iamVjdCogbywgRXZhc19Db29yZCBkeCwgRXZhc19Db29yZCBkeSwgRXZhc19Db29yZCBz
eCwgRXZhc19Db29yZCBzeSwgRXZhc19Db29yZCBzdywgRXZhc19Db29yZCBzaCwgRXZhc19Db29y
ZCBjeCwgRXZhc19Db29yZCBjeSwgRXZhc19Db29yZCBjdywgRXZhc19Db29yZCBjaCwgRWluYV9C
b29sIG1haW5fZnJhbWUpCit2b2lkIGV3a192aWV3X3Njcm9sbChFdmFzX09iamVjdCogZXdrVmll
dywgRXZhc19Db29yZCBkeCwgRXZhc19Db29yZCBkeSwgRXZhc19Db29yZCBzY3JvbGxYLCBFdmFz
X0Nvb3JkIHNjcm9sbFksIEV2YXNfQ29vcmQgc2Nyb2xsV2lkdGgsIEV2YXNfQ29vcmQgc2Nyb2xs
SGVpZ2h0LCBFdmFzX0Nvb3JkIGNlbnRlclgsIEV2YXNfQ29vcmQgY2VudGVyWSwgRXZhc19Db29y
ZCBjZW50ZXJXaWR0aCwgRXZhc19Db29yZCBjZW50ZXJIZWlnaHQsIEVpbmFfQm9vbCBtYWluRnJh
bWUpCiB7Ci0gICAgREJHKCJvPSVwLCBkZWx0YTogJWQsJWQsIHNjcm9sbDogJWQsJWQrJWR4JWQs
IGNsaXA6ICVkLCVkKyVkeCVkIiwKLSAgICAgICAgbywgZHgsIGR5LCBzeCwgc3ksIHN3LCBzaCwg
Y3gsIGN5LCBjdywgY2gpOworICAgIERCRygiZXdrVmlldz0lcCwgZGVsdGE6ICVkLCVkLCBzY3Jv
bGw6ICVkLCVkKyVkeCVkLCBjbGlwOiAlZCwlZCslZHglZCIsCisgICAgICAgIGV3a1ZpZXcsIGR4
LCBkeSwgc2Nyb2xsWCwgc2Nyb2xsWSwgc2Nyb2xsV2lkdGgsIHNjcm9sbEhlaWdodCwgY2VudGVy
WCwgY2VudGVyWSwgY2VudGVyV2lkdGgsIGNlbnRlckhlaWdodCk7CiAKLSAgICBpZiAoKHN4ICE9
IGN4KSB8fCAoc3kgIT0gY3kpIHx8IChzdyAhPSBjdykgfHwgKHNoICE9IGNoKSkKKyAgICBpZiAo
KHNjcm9sbFggIT0gY2VudGVyWCkgfHwgKHNjcm9sbFkgIT0gY2VudGVyWSkgfHwgKHNjcm9sbFdp
ZHRoICE9IGNlbnRlcldpZHRoKSB8fCAoc2Nyb2xsSGVpZ2h0ICE9IGNlbnRlckhlaWdodCkpCiAg
ICAgICAgIFdSTigic2Nyb2xsIHJlZ2lvbiBhbmQgY2xpcCBhcmUgZGlmZmVyZW50ISAlZCwlZCsl
ZHglZCBhbmQgJWQsJWQrJWR4JWQiLAotICAgICAgICAgICAgc3gsIHN5LCBzdywgc2gsIGN4LCBj
eSwgY3csIGNoKTsKKyAgICAgICAgICAgIHNjcm9sbFgsIHNjcm9sbFksIHNjcm9sbFdpZHRoLCBz
Y3JvbGxIZWlnaHQsIGNlbnRlclgsIGNlbnRlclksIGNlbnRlcldpZHRoLCBjZW50ZXJIZWlnaHQp
OwogCi0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCk7CisgICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1Jf
UkVUVVJOKHNkLCBwcml2KTsKICAgICBFSU5BX1NBRkVUWV9PTl9UUlVFX1JFVFVSTighZHggJiYg
IWR5KTsKIAotICAgIF9ld2tfdmlld19zY3JvbGxfYWRkKHByaXYsIGR4LCBkeSwgc3gsIHN5LCBz
dywgc2gsIG1haW5fZnJhbWUpOworICAgIF9ld2tfdmlld19zY3JvbGxfYWRkKHByaXYsIGR4LCBk
eSwgc2Nyb2xsWCwgc2Nyb2xsWSwgc2Nyb2xsV2lkdGgsIHNjcm9sbEhlaWdodCwgbWFpbkZyYW1l
KTsKIAogICAgIF9ld2tfdmlld19zbWFydF9jaGFuZ2VkKHNkKTsKIH0KIAotV2ViQ29yZTo6UGFn
ZSogZXdrX3ZpZXdfY29yZV9wYWdlX2dldChjb25zdCBFdmFzX09iamVjdCogbykKK1dlYkNvcmU6
OlBhZ2UqIGV3a192aWV3X2NvcmVfcGFnZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcp
CiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgMCk7CisgICAgRVdLX1ZJ
RVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgMCk7CiAgICAgRVdLX1ZJRVdfUFJJVl9H
RVRfT1JfUkVUVVJOKHNkLCBwcml2LCAwKTsKICAgICByZXR1cm4gcHJpdi0+cGFnZTsKIH0KQEAg
LTMyODcsMTMgKzMyODcsMTMgQEAgV2ViQ29yZTo6UGFnZSogZXdrX3ZpZXdfY29yZV9wYWdlX2dl
dChjb25zdCBFdmFzX09iamVjdCogbykKICAqCiAgKiBFbWl0cyAiZnJhbWUsY3JlYXRlZCIgd2l0
aCB0aGUgbmV3IGZyYW1lIG9iamVjdCBvbiBzdWNjZXNzLgogICovCi1XVEY6OlBhc3NSZWZQdHI8
V2ViQ29yZTo6RnJhbWU+IGV3a192aWV3X2ZyYW1lX2NyZWF0ZShFdmFzX09iamVjdCogbywgRXZh
c19PYmplY3QqIGZyYW1lLCBjb25zdCBXVEY6OlN0cmluZyYgbmFtZSwgV2ViQ29yZTo6SFRNTEZy
YW1lT3duZXJFbGVtZW50KiBvd25lckVsZW1lbnQsIGNvbnN0IFdlYkNvcmU6OktVUkwmIHVybCwg
Y29uc3QgV1RGOjpTdHJpbmcmIHJlZmVycmVyKQorV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkZy
YW1lPiBld2tfdmlld19mcmFtZV9jcmVhdGUoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV2YXNfT2Jq
ZWN0KiBmcmFtZSwgY29uc3QgV1RGOjpTdHJpbmcmIG5hbWUsIFdlYkNvcmU6OkhUTUxGcmFtZU93
bmVyRWxlbWVudCogb3duZXJFbGVtZW50LCBjb25zdCBXZWJDb3JlOjpLVVJMJiB1cmwsIGNvbnN0
IFdURjo6U3RyaW5nJiByZWZlcnJlcikKIHsKLSAgICBEQkcoIm89JXAsIGZyYW1lPSVwLCBuYW1l
PSVzLCBvd25lckVsZW1lbnQ9JXAsIHVybD0lcywgcmVmZXJyZXI9JXMiLAotICAgICAgICBvLCBm
cmFtZSwgbmFtZS51dGY4KCkuZGF0YSgpLCBvd25lckVsZW1lbnQsCisgICAgREJHKCJld2tWaWV3
PSVwLCBmcmFtZT0lcCwgbmFtZT0lcywgb3duZXJFbGVtZW50PSVwLCB1cmw9JXMsIHJlZmVycmVy
PSVzIiwKKyAgICAgICAgZXdrVmlldywgZnJhbWUsIG5hbWUudXRmOCgpLmRhdGEoKSwgb3duZXJF
bGVtZW50LAogICAgICAgICB1cmwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgcmVmZXJyZXIudXRm
OCgpLmRhdGEoKSk7CiAKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAwKTsK
KyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAwKTsKICAgICBFV0tf
VklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIDApOwogCiAgICAgV1RGOjpSZWZQdHI8
V2ViQ29yZTo6RnJhbWU+IGNmID0gX2V3a192aWV3X2NvcmVfZnJhbWVfbmV3CkBAIC0zMzE1LDE3
ICszMzE1LDE3IEBAIFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpGcmFtZT4gZXdrX3ZpZXdfZnJh
bWVfY3JlYXRlKEV2YXNfT2JqZWN0KiBvLCBFdmFzX09iamVjCiAgICAgc2QtPmNoYW5nZWQuZnJh
bWVfcmVjdCA9IEVJTkFfVFJVRTsKICAgICBfZXdrX3ZpZXdfc21hcnRfY2hhbmdlZChzZCk7CiAK
LSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKG8sICJmcmFtZSxjcmVhdGVkIiwg
ZnJhbWUpOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdrVmlldywgImZy
YW1lLGNyZWF0ZWQiLCBmcmFtZSk7CiAgICAgcmV0dXJuIGNmLnJlbGVhc2UoKTsKIH0KIAotV1RG
OjpQYXNzUmVmUHRyPFdlYkNvcmU6OldpZGdldD4gZXdrX3ZpZXdfcGx1Z2luX2NyZWF0ZShFdmFz
X09iamVjdCogbywgRXZhc19PYmplY3QqIGZyYW1lLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBw
bHVnaW5TaXplLCBXZWJDb3JlOjpIVE1MUGx1Z0luRWxlbWVudCogZWxlbWVudCwgY29uc3QgV2Vi
Q29yZTo6S1VSTCYgdXJsLCBjb25zdCBXVEY6OlZlY3RvcjxXVEY6OlN0cmluZz4mIHBhcmFtTmFt
ZXMsIGNvbnN0IFdURjo6VmVjdG9yPFdURjo6U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0IFdU
Rjo6U3RyaW5nJiBtaW1lVHlwZSwgYm9vbCBsb2FkTWFudWFsbHkpCitXVEY6OlBhc3NSZWZQdHI8
V2ViQ29yZTo6V2lkZ2V0PiBld2tfdmlld19wbHVnaW5fY3JlYXRlKEV2YXNfT2JqZWN0KiBld2tW
aWV3LCBFdmFzX09iamVjdCogZnJhbWUsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHBsdWdpblNp
emUsIFdlYkNvcmU6OkhUTUxQbHVnSW5FbGVtZW50KiBlbGVtZW50LCBjb25zdCBXZWJDb3JlOjpL
VVJMJiB1cmwsIGNvbnN0IFdURjo6VmVjdG9yPFdURjo6U3RyaW5nPiYgcGFyYW1OYW1lcywgY29u
c3QgV1RGOjpWZWN0b3I8V1RGOjpTdHJpbmc+JiBwYXJhbVZhbHVlcywgY29uc3QgV1RGOjpTdHJp
bmcmIG1pbWVUeXBlLCBib29sIGxvYWRNYW51YWxseSkKIHsKLSAgICBEQkcoIm89JXAsIGZyYW1l
PSVwLCBzaXplPSVkeCVkLCBlbGVtZW50PSVwLCB1cmw9JXMsIG1pbWVUeXBlPSVzIiwKLSAgICAg
ICAgbywgZnJhbWUsIHBsdWdpblNpemUud2lkdGgoKSwgcGx1Z2luU2l6ZS5oZWlnaHQoKSwgZWxl
bWVudCwKKyAgICBEQkcoImV3a1ZpZXc9JXAsIGZyYW1lPSVwLCBzaXplPSVkeCVkLCBlbGVtZW50
PSVwLCB1cmw9JXMsIG1pbWVUeXBlPSVzIiwKKyAgICAgICAgZXdrVmlldywgZnJhbWUsIHBsdWdp
blNpemUud2lkdGgoKSwgcGx1Z2luU2l6ZS5oZWlnaHQoKSwgZWxlbWVudCwKICAgICAgICAgdXJs
LnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIG1pbWVUeXBlLnV0ZjgoKS5kYXRhKCkpOwogCi0gICAg
RVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgMCk7CisgICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihld2tWaWV3LCBzZCwgMCk7CiAgICAgc2QtPmNoYW5nZWQuZnJhbWVfcmVjdCA9
IEVJTkFfVFJVRTsKICAgICBfZXdrX3ZpZXdfc21hcnRfY2hhbmdlZChzZCk7CiAKQEAgLTMzNDUs
MTQgKzMzNDUsMTQgQEAgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OldpZGdldD4gZXdrX3ZpZXdf
cGx1Z2luX2NyZWF0ZShFdmFzX09iamVjdCogbywgRXZhc19PYmoKICAqCiAgKiBFbWl0czogInBv
cHVwLGNyZWF0ZSIgd2l0aCBhIGxpc3Qgb2YgRXdrX01lbnUgY29udGFpbmluZyBlYWNoIGl0ZW0n
cyBkYXRhCiAgKi8KLXZvaWQgZXdrX3ZpZXdfcG9wdXBfbmV3KEV2YXNfT2JqZWN0KiBvLCBXZWJD
b3JlOjpQb3B1cE1lbnVDbGllbnQqIGNsaWVudCwgaW50IHNlbGVjdGVkLCBjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JiByZWN0KQordm9pZCBld2tfdmlld19wb3B1cF9uZXcoRXZhc19PYmplY3QqIGV3
a1ZpZXcsIFdlYkNvcmU6OlBvcHVwTWVudUNsaWVudCogY2xpZW50LCBpbnQgc2VsZWN0ZWQsIGNv
bnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3QpCiB7Ci0gICAgSU5GKCJvPSVwIiwgbyk7Ci0gICAg
RVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCk7CisgICAgSU5GKCJld2tWaWV3PSVwIiwg
ZXdrVmlldyk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCk7CiAg
ICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2KTsKIAogICAgIGlmIChwcml2
LT5wb3B1cC5tZW51X2NsaWVudCkKLSAgICAgICAgZXdrX3ZpZXdfcG9wdXBfZGVzdHJveShvKTsK
KyAgICAgICAgZXdrX3ZpZXdfcG9wdXBfZGVzdHJveShld2tWaWV3KTsKIAogICAgIHByaXYtPnBv
cHVwLm1lbnVfY2xpZW50ID0gY2xpZW50OwogCkBAIC0zMzc1LDE5ICszMzc1LDE5IEBAIHZvaWQg
ZXdrX3ZpZXdfcG9wdXBfbmV3KEV2YXNfT2JqZWN0KiBvLCBXZWJDb3JlOjpQb3B1cE1lbnVDbGll
bnQqIGNsaWVudCwgaW50IHNlCiAgICAgcHJpdi0+cG9wdXAubWVudS55ID0gcmVjdC55KCk7CiAg
ICAgcHJpdi0+cG9wdXAubWVudS53aWR0aCA9IHJlY3Qud2lkdGgoKTsKICAgICBwcml2LT5wb3B1
cC5tZW51LmhlaWdodCA9IHJlY3QuaGVpZ2h0KCk7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2Fs
bGJhY2tfY2FsbChvLCAicG9wdXAsY3JlYXRlIiwgJnByaXYtPnBvcHVwLm1lbnUpOworICAgIGV2
YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdrVmlldywgInBvcHVwLGNyZWF0ZSIsICZw
cml2LT5wb3B1cC5tZW51KTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3BvcHVwX2Rlc3Ryb3ko
RXZhc19PYmplY3QqIG8pCitFaW5hX0Jvb2wgZXdrX3ZpZXdfcG9wdXBfZGVzdHJveShFdmFzX09i
amVjdCogZXdrVmlldykKIHsKLSAgICBJTkYoIm89JXAiLCBvKTsKLSAgICBFV0tfVklFV19TRF9H
RVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBJTkYoImV3a1ZpZXc9JXAiLCBl
d2tWaWV3KTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5B
X0ZBTFNFKTsKICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFf
RkFMU0UpOwogCiAgICAgaWYgKCFwcml2LT5wb3B1cC5tZW51X2NsaWVudCkKICAgICAgICAgcmV0
dXJuIEVJTkFfRkFMU0U7CiAKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKG8s
ICJwb3B1cCx3aWxsZGVsZXRlIiwgJnByaXYtPnBvcHVwLm1lbnUpOworICAgIGV2YXNfb2JqZWN0
X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdrVmlldywgInBvcHVwLHdpbGxkZWxldGUiLCAmcHJpdi0+
cG9wdXAubWVudSk7CiAKICAgICB2b2lkKiBpdGVtdjsKICAgICBFSU5BX0xJU1RfRlJFRShwcml2
LT5wb3B1cC5tZW51Lml0ZW1zLCBpdGVtdikgewpAQCAtMzQwMSwxMCArMzQwMSwxMCBAQCBFaW5h
X0Jvb2wgZXdrX3ZpZXdfcG9wdXBfZGVzdHJveShFdmFzX09iamVjdCogbykKICAgICByZXR1cm4g
RUlOQV9UUlVFOwogfQogCi12b2lkIGV3a192aWV3X3BvcHVwX3NlbGVjdGVkX3NldChFdmFzX09i
amVjdCogbywgaW50IGluZGV4KQordm9pZCBld2tfdmlld19wb3B1cF9zZWxlY3RlZF9zZXQoRXZh
c19PYmplY3QqIGV3a1ZpZXcsIGludCBpbmRleCkKIHsKLSAgICBJTkYoIm89JXAiLCBvKTsKLSAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkKTsKKyAgICBJTkYoImV3a1ZpZXc9JXAi
LCBld2tWaWV3KTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkKTsK
ICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYpOwogICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOKHByaXYtPnBvcHVwLm1lbnVfY2xpZW50KTsKIApAQCAtMzQyMSwx
MCArMzQyMSwxMCBAQCB2b2lkIGV3a192aWV3X3BvcHVwX3NlbGVjdGVkX3NldChFdmFzX09iamVj
dCogbywgaW50IGluZGV4KQogICogRW1pdHM6ICJkb3dubG9hZCxyZXF1ZXN0IiB3aXRoIGFuIEV3
a19Eb3dubG9hZCBjb250YWluaW5nIHRoZSBkZXRhaWxzIG9mIHRoZQogICogcmVxdWVzdGVkIGRv
d25sb2FkLiBUaGUgZG93bmxvYWQgcGVyIHNlIG11c3QgYmUgaGFuZGxlZCBvdXRzaWRlIG9mIHdl
YmtpdC4KICAqLwotdm9pZCBld2tfdmlld19kb3dubG9hZF9yZXF1ZXN0KEV2YXNfT2JqZWN0KiBv
LCBFd2tfRG93bmxvYWQqIGRvd25sb2FkKQordm9pZCBld2tfdmlld19kb3dubG9hZF9yZXF1ZXN0
KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFd2tfRG93bmxvYWQqIGRvd25sb2FkKQogewotICAgIERC
Rygidmlldz0lcCIsIG8pOwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwobywg
ImRvd25sb2FkLHJlcXVlc3QiLCBkb3dubG9hZCk7CisgICAgREJHKCJld2tWaWV3PSVwIiwgZXdr
Vmlldyk7CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChld2tWaWV3LCAiZG93
bmxvYWQscmVxdWVzdCIsIGRvd25sb2FkKTsKIH0KIAogLyoqCkBAIC0zNDM0LDkgKzM0MzQsOSBA
QCB2b2lkIGV3a192aWV3X2Rvd25sb2FkX3JlcXVlc3QoRXZhc19PYmplY3QqIG8sIEV3a19Eb3du
bG9hZCogZG93bmxvYWQpCiAgKiBAcGFyYW0gbyB2aWV3LgogICogQHBhcmFtIGZyYW1lIHRoZSBm
cmFtZS4KICAqLwotdm9pZCBld2tfdmlld19qc193aW5kb3dfb2JqZWN0X2NsZWFyKEV2YXNfT2Jq
ZWN0KiBvLCBFdmFzX09iamVjdCogZnJhbWUpCit2b2lkIGV3a192aWV3X2pzX3dpbmRvd19vYmpl
Y3RfY2xlYXIoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV2YXNfT2JqZWN0KiBmcmFtZSkKIHsKLSAg
ICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKG8sICJqcyx3aW5kb3dvYmplY3QsY2xl
YXIiLCBmcmFtZSk7CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChld2tWaWV3
LCAianMsd2luZG93b2JqZWN0LGNsZWFyIiwgZnJhbWUpOwogfQogCiAvKioKQEAgLTM0NDcsMTAw
ICszNDQ3LDEwMCBAQCB2b2lkIGV3a192aWV3X2pzX3dpbmRvd19vYmplY3RfY2xlYXIoRXZhc19P
YmplY3QqIG8sIEV2YXNfT2JqZWN0KiBmcmFtZSkKICAqCiAgKiBFbWl0cyBzaWduYWw6ICJ2aWV3
cG9ydCxjaGFuZ2VkIiB3aXRoIG5vIHBhcmFtZXRlcnMuCiAgKi8KLXZvaWQgZXdrX3ZpZXdfdmll
d3BvcnRfYXR0cmlidXRlc19zZXQoRXZhc19PYmplY3QqIG8sIGNvbnN0IFdlYkNvcmU6OlZpZXdw
b3J0QXJndW1lbnRzJiBhcmd1bWVudHMpCit2b2lkIGV3a192aWV3X3ZpZXdwb3J0X2F0dHJpYnV0
ZXNfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBXZWJDb3JlOjpWaWV3cG9ydEFyZ3Vt
ZW50cyYgYXJndW1lbnRzKQogewotICAgIEVXS19WSUVXX1NEX0dFVChvLCBzZCk7CisgICAgRVdL
X1ZJRVdfU0RfR0VUKGV3a1ZpZXcsIHNkKTsKICAgICBFV0tfVklFV19QUklWX0dFVChzZCwgcHJp
dik7CiAKICAgICBwcml2LT52aWV3cG9ydF9hcmd1bWVudHMgPSBhcmd1bWVudHM7Ci0gICAgZXZh
c19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChvLCAidmlld3BvcnQsY2hhbmdlZCIsIDApOwor
ICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdrVmlldywgInZpZXdwb3J0LGNo
YW5nZWQiLCAwKTsKIH0KIAotdm9pZCBld2tfdmlld192aWV3cG9ydF9hdHRyaWJ1dGVzX2dldChj
b25zdCBFdmFzX09iamVjdCogbywgaW50KiB3LCBpbnQqIGgsIGZsb2F0KiBpbml0X3NjYWxlLCBm
bG9hdCogbWF4X3NjYWxlLCBmbG9hdCogbWluX3NjYWxlLCBmbG9hdCogZGV2aWNlX3BpeGVsX3Jh
dGlvLCBFaW5hX0Jvb2wqIHVzZXJfc2NhbGFibGUpCit2b2lkIGV3a192aWV3X3ZpZXdwb3J0X2F0
dHJpYnV0ZXNfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3LCBpbnQqIHdpZHRoLCBpbnQq
IGhlaWdodCwgZmxvYXQqIGluaXRTY2FsZSwgZmxvYXQqIG1heFNjYWxlLCBmbG9hdCogbWluU2Nh
bGUsIGZsb2F0KiBkZXZpY2VQaXhlbFJhdGlvLCBFaW5hX0Jvb2wqIHVzZXJTY2FsYWJsZSkKIHsK
LSAgICBXZWJDb3JlOjpWaWV3cG9ydEF0dHJpYnV0ZXMgYXR0cmlidXRlcyA9IF9ld2tfdmlld192
aWV3cG9ydF9hdHRyaWJ1dGVzX2NvbXB1dGUobyk7CisgICAgV2ViQ29yZTo6Vmlld3BvcnRBdHRy
aWJ1dGVzIGF0dHJpYnV0ZXMgPSBfZXdrX3ZpZXdfdmlld3BvcnRfYXR0cmlidXRlc19jb21wdXRl
KGV3a1ZpZXcpOwogCi0gICAgaWYgKHcpCi0gICAgICAgICp3ID0gYXR0cmlidXRlcy5sYXlvdXRT
aXplLndpZHRoKCk7Ci0gICAgaWYgKGgpCi0gICAgICAgICpoID0gYXR0cmlidXRlcy5sYXlvdXRT
aXplLmhlaWdodCgpOwotICAgIGlmIChpbml0X3NjYWxlKQotICAgICAgICAqaW5pdF9zY2FsZSA9
IGF0dHJpYnV0ZXMuaW5pdGlhbFNjYWxlOwotICAgIGlmIChtYXhfc2NhbGUpCi0gICAgICAgICpt
YXhfc2NhbGUgPSBhdHRyaWJ1dGVzLm1heGltdW1TY2FsZTsKLSAgICBpZiAobWluX3NjYWxlKQot
ICAgICAgICAqbWluX3NjYWxlID0gYXR0cmlidXRlcy5taW5pbXVtU2NhbGU7Ci0gICAgaWYgKGRl
dmljZV9waXhlbF9yYXRpbykKLSAgICAgICAgKmRldmljZV9waXhlbF9yYXRpbyA9IGF0dHJpYnV0
ZXMuZGV2aWNlUGl4ZWxSYXRpbzsKLSAgICBpZiAodXNlcl9zY2FsYWJsZSkKLSAgICAgICAgKnVz
ZXJfc2NhbGFibGUgPSBzdGF0aWNfY2FzdDxib29sPihhdHRyaWJ1dGVzLnVzZXJTY2FsYWJsZSk7
CisgICAgaWYgKHdpZHRoKQorICAgICAgICAqd2lkdGggPSBhdHRyaWJ1dGVzLmxheW91dFNpemUu
d2lkdGgoKTsKKyAgICBpZiAoaGVpZ2h0KQorICAgICAgICAqaGVpZ2h0ID0gYXR0cmlidXRlcy5s
YXlvdXRTaXplLmhlaWdodCgpOworICAgIGlmIChpbml0U2NhbGUpCisgICAgICAgICppbml0U2Nh
bGUgPSBhdHRyaWJ1dGVzLmluaXRpYWxTY2FsZTsKKyAgICBpZiAobWF4U2NhbGUpCisgICAgICAg
ICptYXhTY2FsZSA9IGF0dHJpYnV0ZXMubWF4aW11bVNjYWxlOworICAgIGlmIChtaW5TY2FsZSkK
KyAgICAgICAgKm1pblNjYWxlID0gYXR0cmlidXRlcy5taW5pbXVtU2NhbGU7CisgICAgaWYgKGRl
dmljZVBpeGVsUmF0aW8pCisgICAgICAgICpkZXZpY2VQaXhlbFJhdGlvID0gYXR0cmlidXRlcy5k
ZXZpY2VQaXhlbFJhdGlvOworICAgIGlmICh1c2VyU2NhbGFibGUpCisgICAgICAgICp1c2VyU2Nh
bGFibGUgPSBzdGF0aWNfY2FzdDxib29sPihhdHRyaWJ1dGVzLnVzZXJTY2FsYWJsZSk7CiB9CiAK
LUVpbmFfQm9vbCBld2tfdmlld196b29tX3JhbmdlX3NldChFdmFzX09iamVjdCogbywgZmxvYXQg
bWluX3NjYWxlLCBmbG9hdCBtYXhfc2NhbGUpCitFaW5hX0Jvb2wgZXdrX3ZpZXdfem9vbV9yYW5n
ZV9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGZsb2F0IG1pblNjYWxlLCBmbG9hdCBtYXhTY2Fs
ZSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsK
KyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsK
ICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwog
Ci0gICAgaWYgKG1heF9zY2FsZSA8IG1pbl9zY2FsZSkgeworICAgIGlmIChtYXhTY2FsZSA8IG1p
blNjYWxlKSB7CiAgICAgICAgIFdSTigibWluX3NjYWxlIGlzIGxhcmdlciB0aGFuIG1heF9zY2Fs
ZSIpOwogICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKICAgICB9CiAKLSAgICBwcml2LT5zZXR0
aW5ncy56b29tX3JhbmdlLm1pbl9zY2FsZSA9IG1pbl9zY2FsZTsKLSAgICBwcml2LT5zZXR0aW5n
cy56b29tX3JhbmdlLm1heF9zY2FsZSA9IG1heF9zY2FsZTsKKyAgICBwcml2LT5zZXR0aW5ncy56
b29tX3JhbmdlLm1pbl9zY2FsZSA9IG1pblNjYWxlOworICAgIHByaXYtPnNldHRpbmdzLnpvb21f
cmFuZ2UubWF4X3NjYWxlID0gbWF4U2NhbGU7CiAKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQog
Ci1mbG9hdCBld2tfdmlld196b29tX3JhbmdlX21pbl9nZXQoY29uc3QgRXZhc19PYmplY3QqIG8p
CitmbG9hdCBld2tfdmlld196b29tX3JhbmdlX21pbl9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3
a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgLTEuMCk7Cisg
ICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgLTEuMCk7CiAgICAgRVdL
X1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCAtMS4wKTsKIAogICAgIHJldHVybiBw
cml2LT5zZXR0aW5ncy56b29tX3JhbmdlLm1pbl9zY2FsZTsKIH0KIAotZmxvYXQgZXdrX3ZpZXdf
em9vbV9yYW5nZV9tYXhfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQorZmxvYXQgZXdrX3ZpZXdf
em9vbV9yYW5nZV9tYXhfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIC0xLjApOworICAgIEVXS19WSUVXX1NEX0dF
VF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIC0xLjApOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09S
X1JFVFVSTihzZCwgcHJpdiwgLTEuMCk7CiAKICAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3Muem9v
bV9yYW5nZS5tYXhfc2NhbGU7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld191c2VyX3NjYWxhYmxl
X3NldChFdmFzX09iamVjdCogbywgRWluYV9Cb29sIHVzZXJfc2NhbGFibGUpCitFaW5hX0Jvb2wg
ZXdrX3ZpZXdfdXNlcl9zY2FsYWJsZV9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9v
bCB1c2VyU2NhbGFibGUpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwg
RUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwg
RUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBF
SU5BX0ZBTFNFKTsKIAotICAgIHByaXYtPnNldHRpbmdzLnpvb21fcmFuZ2UudXNlcl9zY2FsYWJs
ZSA9IHVzZXJfc2NhbGFibGU7CisgICAgcHJpdi0+c2V0dGluZ3Muem9vbV9yYW5nZS51c2VyX3Nj
YWxhYmxlID0gdXNlclNjYWxhYmxlOwogCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotRWlu
YV9Cb29sIGV3a192aWV3X3VzZXJfc2NhbGFibGVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQor
RWluYV9Cb29sIGV3a192aWV3X3VzZXJfc2NhbGFibGVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBl
d2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFM
U0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFM
U0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxT
RSk7CiAKICAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3Muem9vbV9yYW5nZS51c2VyX3NjYWxhYmxl
OwogfQogCi1mbG9hdCBld2tfdmlld19kZXZpY2VfcGl4ZWxfcmF0aW9fZ2V0KGNvbnN0IEV2YXNf
T2JqZWN0KiBvKQorZmxvYXQgZXdrX3ZpZXdfZGV2aWNlX3BpeGVsX3JhdGlvX2dldChjb25zdCBF
dmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8s
IHNkLCAtMS4wKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAt
MS4wKTsKICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIC0xLjApOwog
CiAgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmRldmljZV9waXhlbF9yYXRpbzsKIH0KIAotdm9p
ZCBld2tfdmlld19kaWRfZmlyc3RfdmlzdWFsbHlfbm9uZW1wdHlfbGF5b3V0KEV2YXNfT2JqZWN0
KiBvKQordm9pZCBld2tfdmlld19kaWRfZmlyc3RfdmlzdWFsbHlfbm9uZW1wdHlfbGF5b3V0KEV2
YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywg
c2QpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QpOwogICAgIEVX
S19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdik7CiAgICAgaWYgKCFwcml2LT5mbGFn
cy52aWV3X2NsZWFyZWQpIHsKLSAgICAgICAgZXdrX3ZpZXdfZnJhbWVfbWFpbl9jbGVhcmVkKG8p
OwotICAgICAgICBld2tfdmlld19lbmFibGVfcmVuZGVyKG8pOworICAgICAgICBld2tfdmlld19m
cmFtZV9tYWluX2NsZWFyZWQoZXdrVmlldyk7CisgICAgICAgIGV3a192aWV3X2VuYWJsZV9yZW5k
ZXIoZXdrVmlldyk7CiAgICAgICAgIHByaXYtPmZsYWdzLnZpZXdfY2xlYXJlZCA9IEVJTkFfVFJV
RTsKICAgICB9CiB9CkBAIC0zNTUxLDIxICszNTUxLDIxIEBAIHZvaWQgZXdrX3ZpZXdfZGlkX2Zp
cnN0X3Zpc3VhbGx5X25vbmVtcHR5X2xheW91dChFdmFzX09iamVjdCogbykKICAqCiAgKiBAcGFy
YW0gbyB2aWV3LgogICovCi12b2lkIGV3a192aWV3X2Rpc3BhdGNoX2RpZF9maW5pc2hfbG9hZGlu
ZyhFdmFzX09iamVjdCogbykKK3ZvaWQgZXdrX3ZpZXdfZGlzcGF0Y2hfZGlkX2ZpbmlzaF9sb2Fk
aW5nKEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewogICAgIC8qIElmIHdlIHJlYWNoIHRoaXMgcG9p
bnQgYW5kIHJlbmRlcmluZyBpcyBzdGlsbCBkaXNhYmxlZCwgV2ViQ29yZSB3aWxsIG5vdAogICAg
ICAqIHRyaWdnZXIgdGhlIGRpZEZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dCBzaWduYWwgYW55
bW9yZS4gU28sIHdlCiAgICAgICogZm9yY2VmdWxseSByZS1lbmFibGUgdGhlIHJlbmRlcmluZy4K
ICAgICAgKi8KLSAgICBld2tfdmlld19kaWRfZmlyc3RfdmlzdWFsbHlfbm9uZW1wdHlfbGF5b3V0
KG8pOworICAgIGV3a192aWV3X2RpZF9maXJzdF92aXN1YWxseV9ub25lbXB0eV9sYXlvdXQoZXdr
Vmlldyk7CiB9CiAKLXZvaWQgZXdrX3ZpZXdfdHJhbnNpdGlvbl90b19jb21taXRlZF9mb3JfbmV3
cGFnZShFdmFzX09iamVjdCogbykKK3ZvaWQgZXdrX3ZpZXdfdHJhbnNpdGlvbl90b19jb21taXRl
ZF9mb3JfbmV3cGFnZShFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9H
RVRfT1JfUkVUVVJOKG8sIHNkKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1Zp
ZXcsIHNkKTsKICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYpOwogCi0g
ICAgZXdrX3ZpZXdfZGlzYWJsZV9yZW5kZXIobyk7CisgICAgZXdrX3ZpZXdfZGlzYWJsZV9yZW5k
ZXIoZXdrVmlldyk7CiAgICAgcHJpdi0+ZmxhZ3Mudmlld19jbGVhcmVkID0gRUlOQV9GQUxTRTsK
IH0KIApAQCAtMzU3OSw5ICszNTc5LDkgQEAgdm9pZCBld2tfdmlld190cmFuc2l0aW9uX3RvX2Nv
bW1pdGVkX2Zvcl9uZXdwYWdlKEV2YXNfT2JqZWN0KiBvKQogICogQHBhcmFtIG8gVmlldyB0byBs
b2FkCiAgKiBAcGFyYW0gcmVxdWVzdCBSZXF1ZXN0IHdoaWNoIGNvbnRhaW4gdXJsIHRvIG5hdmln
YXRlCiAgKi8KLUVpbmFfQm9vbCBld2tfdmlld19uYXZpZ2F0aW9uX3BvbGljeV9kZWNpc2lvbihF
dmFzX09iamVjdCogbywgRXdrX0ZyYW1lX1Jlc291cmNlX1JlcXVlc3QqIHJlcXVlc3QpCitFaW5h
X0Jvb2wgZXdrX3ZpZXdfbmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb24oRXZhc19PYmplY3QqIGV3
a1ZpZXcsIEV3a19GcmFtZV9SZXNvdXJjZV9SZXF1ZXN0KiByZXF1ZXN0KQogewotICAgIEVXS19W
SUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfVFJVRSk7CisgICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9UUlVFKTsKICAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTl9WQUwoc2QtPmFwaSwgRUlOQV9UUlVFKTsKIAogICAgIGlmICghc2QtPmFw
aS0+bmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb24pCkBAIC0zNTkwLDEzICszNTkwLDEzIEBAIEVp
bmFfQm9vbCBld2tfdmlld19uYXZpZ2F0aW9uX3BvbGljeV9kZWNpc2lvbihFdmFzX09iamVjdCog
bywgRXdrX0ZyYW1lX1Jlc291cmNlCiAgICAgcmV0dXJuIHNkLT5hcGktPm5hdmlnYXRpb25fcG9s
aWN5X2RlY2lzaW9uKHNkLCByZXF1ZXN0KTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X2pzX29i
amVjdF9hZGQoRXZhc19PYmplY3QqIG8sIEV3a19KU19PYmplY3QqIG9iaiwgY29uc3QgY2hhciog
b2JqX25hbWUpCitFaW5hX0Jvb2wgZXdrX3ZpZXdfanNfb2JqZWN0X2FkZChFdmFzX09iamVjdCog
ZXdrVmlldywgRXdrX0pTX09iamVjdCogb2JqZWN0LCBjb25zdCBjaGFyKiBvYmplY3ROYW1lKQog
ewogI2lmIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5fQVBJKQotICAgIGlmIChvYmotPnZpZXcpIC8v
IG9iamVjdCBoYXMgYWxyZWFkeSBiZWVuIGFkZGVkIHRvIGFub3RoZXIgZXdrX3ZpZXcKKyAgICBp
ZiAob2JqZWN0LT52aWV3KSAvLyBvYmplY3QgaGFzIGFscmVhZHkgYmVlbiBhZGRlZCB0byBhbm90
aGVyIGV3a192aWV3CiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwotICAgIG9iai0+bmFtZSA9
IGVpbmFfc3RyaW5nc2hhcmVfYWRkKG9ial9uYW1lKTsKLSAgICBFV0tfVklFV19TRF9HRVRfT1Jf
UkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBvYmplY3QtPm5hbWUgPSBlaW5hX3N0cmlu
Z3NoYXJlX2FkZChvYmplY3RfbmFtZSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihl
d2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJO
KHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKIAogICAgIEpTQzo6SlNMb2NrIGxvY2soSlNDOjpTaWxl
bmNlQXNzZXJ0aW9uc09ubHkpOwpAQCAtMzYxMSw3ICszNjExLDcgQEAgRWluYV9Cb29sIGV3a192
aWV3X2pzX29iamVjdF9hZGQoRXZhc19PYmplY3QqIG8sIEV3a19KU19PYmplY3QqIG9iaiwgY29u
c3QgY2hhcioKIAogICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gd2luZG93LT5nbG9iYWxFeGVj
KCk7CiAKLSAgICBvYmotPnZpZXcgPSBvOworICAgIG9iai0+dmlldyA9IGV3a1ZpZXc7CiAgICAg
SlNDOjpKU09iamVjdCogcnVudGltZU9iamVjdCA9IChKU0M6OkpTT2JqZWN0KilKU0M6OkJpbmRp
bmdzOjpDSW5zdGFuY2U6OmNyZWF0ZSgoTlBPYmplY3QqKW9iaiwgcm9vdCktPmNyZWF0ZVJ1bnRp
bWVPYmplY3QoZXhlYyk7CiAgICAgSlNDOjpJZGVudGlmaWVyIGlkID0gSlNDOjpJZGVudGlmaWVy
KGV4ZWMsIG9ial9uYW1lKTsKIApAQCAtMzYyMyw5ICszNjIzLDkgQEAgRWluYV9Cb29sIGV3a192
aWV3X2pzX29iamVjdF9hZGQoRXZhc19PYmplY3QqIG8sIEV3a19KU19PYmplY3QqIG9iaiwgY29u
c3QgY2hhcioKICNlbmRpZiAvLyBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKIH0KIAotRWlu
YV9Cb29sIGV3a192aWV3X3Byb3RvY29sX2hhbmRsZXJfc2V0KEV2YXNfT2JqZWN0KiBvLCBjb25z
dCBjaGFyKiogcHJvdG9jb2xzLCBFd2tfVmlld19SZXNvdXJjZV9IYW5kbGVyX0NiIGhhbmRsZXIs
IHZvaWQqIGNvbnRleHQpCitFaW5hX0Jvb2wgZXdrX3ZpZXdfcHJvdG9jb2xfaGFuZGxlcl9zZXQo
RXZhc19PYmplY3QqIGV3a1ZpZXcsIGNvbnN0IGNoYXIqKiBwcm90b2NvbHMsIEV3a19WaWV3X1Jl
c291cmNlX0hhbmRsZXJfQ2IgaGFuZGxlciwgdm9pZCogY29udGV4dCkKIHsKLSAgICBFV0tfVklF
V19TRF9HRVQobywgc2QpOworICAgIEVXS19WSUVXX1NEX0dFVChld2tWaWV3LCBzZCk7CiAgICAg
RVdLX1ZJRVdfUFJJVl9HRVQoc2QsIHByaXYpOwogCiAgICAgaWYgKCFoYW5kbGVyKQpAQCAtMzYz
Nyw5ICszNjM3LDkgQEAgRWluYV9Cb29sIGV3a192aWV3X3Byb3RvY29sX2hhbmRsZXJfc2V0KEV2
YXNfT2JqZWN0KiBvLCBjb25zdCBjaGFyKiogcHJvdG9jb2xzLAogICAgIHJldHVybiBld2tfY3Vz
dG9tX3Byb3RvY29sX2hhbmRsZXJfc2V0KHByb3RvY29scyk7CiB9CiAKLUVpbmFfQm9vbCBld2tf
dmlld19wcm90b2NvbF9oYW5kbGVyX3Vuc2V0KEV2YXNfT2JqZWN0KiBvKQorRWluYV9Cb29sIGV3
a192aWV3X3Byb3RvY29sX2hhbmRsZXJfdW5zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0g
ICAgRVdLX1ZJRVdfU0RfR0VUKG8sIHNkKTsKKyAgICBFV0tfVklFV19TRF9HRVQoZXdrVmlldywg
c2QpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUKHNkLCBwcml2KTsKICAgICBFaW5hX0Jvb2wgcmV0
ID0gZXdrX2N1c3RvbV9wcm90b2NvbF9oYW5kbGVyX2FsbF91bnNldCgpOwogCkBAIC0zNjUxLDkg
KzM2NTEsOSBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfcHJvdG9jb2xfaGFuZGxlcl91bnNldChFdmFz
X09iamVjdCogbykKICAgICByZXR1cm4gcmV0OwogfQogCi12b2lkKiBld2tfdmlld19wcm90b2Nv
bF9oYW5kbGVyX3Jlc291cmNlX2dldChFdmFzX09iamVjdCogbywgc2l6ZV90KiBieXRlc1JlYWQs
IGNoYXIqKiBtaW1lLCBjb25zdCBjaGFyKiBmaWxlKQordm9pZCogZXdrX3ZpZXdfcHJvdG9jb2xf
aGFuZGxlcl9yZXNvdXJjZV9nZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIHNpemVfdCogYnl0ZXNS
ZWFkLCBjaGFyKiogbWltZSwgY29uc3QgY2hhciogZmlsZSkKIHsKLSAgICBFV0tfVklFV19TRF9H
RVQobywgc2QpOworICAgIEVXS19WSUVXX1NEX0dFVChld2tWaWV3LCBzZCk7CiAgICAgRVdLX1ZJ
RVdfUFJJVl9HRVQoc2QsIHByaXYpOwogCiAgICAgRXdrX1ZpZXdfUmVzb3VyY2VfSGFuZGxlcl9D
YiBmdW5jdGlvbiA9IHByaXYtPmN1c3RvbV9yZXNvdXJjZV9oYW5kbGVyLmZ1bmN0aW9uOwpAQCAt
MzY3MiwxNCArMzY3MiwxNCBAQCB2b2lkKiBld2tfdmlld19wcm90b2NvbF9oYW5kbGVyX3Jlc291
cmNlX2dldChFdmFzX09iamVjdCogbywgc2l6ZV90KiBieXRlc1JlYWQsCiAgKiBAcGFyYW0gdyBu
ZXcgY29udGVudCB3aWR0aC4KICAqIEBwYXJhbSBoIG5ldyBjb250ZW50IGhlaWdodC4KICAqLwot
dm9pZCBld2tfdmlld19jb250ZW50c19zaXplX2NoYW5nZWQoRXZhc19PYmplY3QqIG8sIGludCB3
LCBpbnQgaCkKK3ZvaWQgZXdrX3ZpZXdfY29udGVudHNfc2l6ZV9jaGFuZ2VkKEV2YXNfT2JqZWN0
KiBld2tWaWV3LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihvLCBzZCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3
LCBzZCk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFwaSk7CiAgICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFwaS0+Y29udGVudHNfcmVzaXplKTsKIAotICAg
IGlmICghc2QtPmFwaS0+Y29udGVudHNfcmVzaXplKHNkLCB3LCBoKSkKLSAgICAgICAgRVJSKCJm
YWlsZWQgdG8gcmVzaXplIGNvbnRlbnRzIHRvICVkeCVkIiwgdywgaCk7CisgICAgaWYgKCFzZC0+
YXBpLT5jb250ZW50c19yZXNpemUoc2QsIHdpZHRoLCBoZWlnaHQpKQorICAgICAgICBFUlIoImZh
aWxlZCB0byByZXNpemUgY29udGVudHMgdG8gJWR4JWQiLCB3aWR0aCwgaGVpZ2h0KTsKIH0KIAog
LyoqCkBAIC0zNjkwLDkgKzM2OTAsOSBAQCB2b2lkIGV3a192aWV3X2NvbnRlbnRzX3NpemVfY2hh
bmdlZChFdmFzX09iamVjdCogbywgaW50IHcsIGludCBoKQogICoKICAqIEByZXR1cm4gcGFnZSBz
aXplLgogICovCi1XZWJDb3JlOjpGbG9hdFJlY3QgZXdrX3ZpZXdfcGFnZV9yZWN0X2dldChjb25z
dCBFdmFzX09iamVjdCogbykKK1dlYkNvcmU6OkZsb2F0UmVjdCBld2tfdmlld19wYWdlX3JlY3Rf
Z2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVChv
LCBzZCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUKGV3a1ZpZXcsIHNkKTsKICAgICBFV0tfVklFV19Q
UklWX0dFVChzZCwgcHJpdik7CiAKICAgICBXZWJDb3JlOjpGcmFtZSogbWFpbl9mcmFtZSA9IHBy
aXYtPnBhZ2UtPm1haW5GcmFtZSgpOwpAQCAtMzcwMCwyOCArMzcwMCwyOCBAQCBXZWJDb3JlOjpG
bG9hdFJlY3QgZXdrX3ZpZXdfcGFnZV9yZWN0X2dldChjb25zdCBFdmFzX09iamVjdCogbykKIH0K
IAogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi12b2lkIGV3a192aWV3X25lZWRfdG91Y2hfZXZl
bnRzX3NldChFdmFzX09iamVjdCogbywgYm9vbCBuZWVkZWQpCit2b2lkIGV3a192aWV3X25lZWRf
dG91Y2hfZXZlbnRzX3NldChFdmFzX09iamVjdCogZXdrVmlldywgYm9vbCBuZWVkZWQpCiB7Ci0g
ICAgRVdLX1ZJRVdfU0RfR0VUKG8sIHNkKTsKKyAgICBFV0tfVklFV19TRF9HRVQoZXdrVmlldywg
c2QpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUKHNkLCBwcml2KTsKIAogICAgIHByaXYtPmZsYWdz
Lm5lZWRfdG91Y2hfZXZlbnRzID0gbmVlZGVkOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfbmVl
ZF90b3VjaF9ldmVudHNfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQorRWluYV9Cb29sIGV3a192
aWV3X25lZWRfdG91Y2hfZXZlbnRzX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsK
LSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBF
V0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBF
V0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIHJl
dHVybiBwcml2LT5mbGFncy5uZWVkX3RvdWNoX2V2ZW50czsKIH0KICNlbmRpZgogCi1FaW5hX0Jv
b2wgZXdrX3ZpZXdfbW9kZV9zZXQoRXZhc19PYmplY3QqIG8sIEV3a19WaWV3X01vZGUgdmlld19t
b2RlKQorRWluYV9Cb29sIGV3a192aWV3X21vZGVfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBF
d2tfVmlld19Nb2RlIHZpZXdNb2RlKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
bywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmll
dywgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwg
cHJpdiwgRUlOQV9GQUxTRSk7CiAKLSAgICBzd2l0Y2ggKHZpZXdfbW9kZSkgeworICAgIHN3aXRj
aCAodmlld01vZGUpIHsKICAgICBjYXNlIEVXS19WSUVXX01PREVfV0lORE9XRUQ6CiAgICAgICAg
IHByaXYtPnBhZ2UtPnNldFZpZXdNb2RlKFdlYkNvcmU6OlBhZ2U6OlZpZXdNb2RlV2luZG93ZWQp
OwogICAgICAgICBicmVhazsKQEAgLTM3NDQsMTEgKzM3NDQsMTEgQEAgRWluYV9Cb29sIGV3a192
aWV3X21vZGVfc2V0KEV2YXNfT2JqZWN0KiBvLCBFd2tfVmlld19Nb2RlIHZpZXdfbW9kZSkKICAg
ICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi1Fd2tfVmlld19Nb2RlIGV3a192aWV3X21vZGVfZ2V0
KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQorRXdrX1ZpZXdfTW9kZSBld2tfdmlld19tb2RlX2dldChj
b25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKICAgICBFd2tfVmlld19Nb2RlIG1vZGUgPSBF
V0tfVklFV19NT0RFX1dJTkRPV0VEOwogCi0gICAgRVdLX1ZJRVdfU0RfR0VUKG8sIHNkKTsKKyAg
ICBFV0tfVklFV19TRF9HRVQoZXdrVmlldywgc2QpOwogICAgIGlmICghc2QpCiAgICAgICAgIHJl
dHVybiBtb2RlOwogICAgIEVXS19WSUVXX1BSSVZfR0VUKHNkLCBwcml2KTsKQEAgLTM3ODMsOSAr
Mzc4Myw5IEBAIEV3a19WaWV3X01vZGUgZXdrX3ZpZXdfbW9kZV9nZXQoY29uc3QgRXZhc19PYmpl
Y3QqIG8pCiAgKgogICogRW1pdHMgc2lnbmFsOiAiZWRpdG9yY2xpZW50c2VsZWN0aW9uLGNoYW5n
ZWQiIHdpdGggbm8gcGFyYW1ldGVycy4KICAqLwotdm9pZCBld2tfdmlld19lZGl0b3JfY2xpZW50
X3NlbGVjdGlvbl9jaGFuZ2VkKEV2YXNfT2JqZWN0KiBvKQordm9pZCBld2tfdmlld19lZGl0b3Jf
Y2xpZW50X3NlbGVjdGlvbl9jaGFuZ2VkKEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIGV2
YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwobywgImVkaXRvcmNsaWVudCxzZWxlY3Rpb24s
Y2hhbmdlZCIsIDApOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdrVmll
dywgImVkaXRvcmNsaWVudCxzZWxlY3Rpb24sY2hhbmdlZCIsIDApOwogfQogCiAvKioKQEAgLTM3
OTYsNyArMzc5Niw3IEBAIHZvaWQgZXdrX3ZpZXdfZWRpdG9yX2NsaWVudF9zZWxlY3Rpb25fY2hh
bmdlZChFdmFzX09iamVjdCogbykKICAqCiAgKiBFbWl0cyBzaWduYWw6ICJlZGl0b3JjbGllbnQs
Y29udGVudHMsY2hhbmdlZCIgd2l0aCBubyBwYXJhbWV0ZXJzLgogICovCi12b2lkIGV3a192aWV3
X2VkaXRvcl9jbGllbnRfY29udGVudHNfY2hhbmdlZChFdmFzX09iamVjdCogbykKK3ZvaWQgZXdr
X3ZpZXdfZWRpdG9yX2NsaWVudF9jb250ZW50c19jaGFuZ2VkKEV2YXNfT2JqZWN0KiBld2tWaWV3
KQogewotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwobywgImVkaXRvcmNsaWVu
dCxjb250ZW50cyxjaGFuZ2VkIiwgMCk7CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tf
Y2FsbChld2tWaWV3LCAiZWRpdG9yY2xpZW50LGNvbnRlbnRzLGNoYW5nZWQiLCAwKTsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlld19zaW5nbGUuY3BwIGIvU291
cmNlL1dlYktpdC9lZmwvZXdrL2V3a192aWV3X3NpbmdsZS5jcHAKaW5kZXggNWFkNjdmZWFkMzNh
NjkwODU3OThlNTUzNmE1MTVhOWFjNjUyNjhiMC4uNGQzNWU5MzU4MzljODk0NWFkNDc5NjRhN2I5
YjJhMzc4OTEwMmJhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a192aWV3
X3NpbmdsZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a192aWV3X3NpbmdsZS5j
cHAKQEAgLTksNyArOSw3IEBACiAKICAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICAgICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgICAgTUVSY2hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKICAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KIAogICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKQEAgLTMxLDg5ICszMSw4NyBAQAog
CiBzdGF0aWMgRXdrX1ZpZXdfU21hcnRfQ2xhc3MgX3BhcmVudF9zYyA9IEVXS19WSUVXX1NNQVJU
X0NMQVNTX0lOSVRfTlVMTDsKIAotc3RhdGljIHZvaWQgX2V3a192aWV3X3NpbmdsZV9vbl9kZWwo
dm9pZCogZGF0YSwgRXZhcyogZSwgRXZhc19PYmplY3QqIG8sIHZvaWQqIGV2ZW50X2luZm8pCitz
dGF0aWMgdm9pZCBfZXdrX3ZpZXdfc2luZ2xlX29uX2RlbCh2b2lkKiBkYXRhLCBFdmFzKiBldmVu
dFR5cGUsIEV2YXNfT2JqZWN0KiBjYWxsYmFjaywgdm9pZCogZXZlbnRJbmZvKQogewogICAgIEV2
YXNfT2JqZWN0KiBjbGlwID0gKEV2YXNfT2JqZWN0KilkYXRhOwogICAgIGV2YXNfb2JqZWN0X2Rl
bChjbGlwKTsKIH0KIAotc3RhdGljIHZvaWQgX2V3a192aWV3X3NpbmdsZV9zbWFydF9hZGQoRXZh
c19PYmplY3QqIG8pCitzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0X2FkZChFdmFz
X09iamVjdCogZXdrU2luZ2xlKQogewogICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkOwogCi0g
ICAgX3BhcmVudF9zYy5zYy5hZGQobyk7CisgICAgX3BhcmVudF9zYy5zYy5hZGQoZXdrU2luZ2xl
KTsKIAotICAgIHNkID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGV2YXNfb2Jq
ZWN0X3NtYXJ0X2RhdGFfZ2V0KG8pKTsKKyAgICBzZCA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1Nt
YXJ0X0RhdGEqPihldmFzX29iamVjdF9zbWFydF9kYXRhX2dldChld2tTaW5nbGUpKTsKICAgICBp
ZiAoIXNkKQogICAgICAgICByZXR1cm47CiAKICAgICBFdmFzX09iamVjdCogY2xpcCA9IGV2YXNf
b2JqZWN0X3JlY3RhbmdsZV9hZGQoc2QtPmJhc2UuZXZhcyk7Ci0gICAgZXZhc19vYmplY3RfY2xp
cF9zZXQoc2QtPmJhY2tpbmdfc3RvcmUsIGNsaXApOwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X21l
bWJlcl9hZGQoY2xpcCwgbyk7CiAgICAgZXZhc19vYmplY3Rfc2hvdyhjbGlwKTsKIAogICAgIGV2
YXNfb2JqZWN0X2V2ZW50X2NhbGxiYWNrX2FkZAogICAgICAgICAoc2QtPmJhY2tpbmdfc3RvcmUs
IEVWQVNfQ0FMTEJBQ0tfREVMLCBfZXdrX3ZpZXdfc2luZ2xlX29uX2RlbCwgY2xpcCk7CiB9CiAK
LXN0YXRpYyBFdmFzX09iamVjdCogX2V3a192aWV3X3NpbmdsZV9zbWFydF9iYWNraW5nX3N0b3Jl
X2FkZChFd2tfVmlld19TbWFydF9EYXRhKiBzZCkKK3N0YXRpYyBFdmFzX09iamVjdCogX2V3a192
aWV3X3NpbmdsZV9zbWFydF9iYWNraW5nX3N0b3JlX2FkZChFd2tfVmlld19TbWFydF9EYXRhKiBz
bWFydERhdGEpCiB7Ci0gICAgRXZhc19PYmplY3QqIGJzID0gZXZhc19vYmplY3RfaW1hZ2VfYWRk
KHNkLT5iYXNlLmV2YXMpOworICAgIEV2YXNfT2JqZWN0KiBicyA9IGV2YXNfb2JqZWN0X2ltYWdl
X2FkZChzbWFydERhdGEtPmJhc2UuZXZhcyk7CiAgICAgZXZhc19vYmplY3RfaW1hZ2VfYWxwaGFf
c2V0KGJzLCBFSU5BX0ZBTFNFKTsKLSAgICBldmFzX29iamVjdF9pbWFnZV9zbW9vdGhfc2NhbGVf
c2V0KGJzLCBzZC0+em9vbV93ZWFrX3Ntb290aF9zY2FsZSk7CisgICAgZXZhc19vYmplY3RfaW1h
Z2Vfc21vb3RoX3NjYWxlX3NldChicywgc21hcnREYXRhLT56b29tX3dlYWtfc21vb3RoX3NjYWxl
KTsKIAogICAgIHJldHVybiBiczsKIH0KIAotc3RhdGljIHZvaWQgX2V3a192aWV3X3NpbmdsZV9z
bWFydF9yZXNpemUoRXZhc19PYmplY3QqIG8sIEV2YXNfQ29vcmQgdywgRXZhc19Db29yZCBoKQor
c3RhdGljIHZvaWQgX2V3a192aWV3X3NpbmdsZV9zbWFydF9yZXNpemUoRXZhc19PYmplY3QqIGV3
a1NpbmdsZSwgRXZhc19Db29yZCB3aWR0aCwgRXZhc19Db29yZCBoZWlnaHQpCiB7Ci0gICAgRXdr
X1ZpZXdfU21hcnRfRGF0YSogc2QgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4o
ZXZhc19vYmplY3Rfc21hcnRfZGF0YV9nZXQobykpOwotICAgIF9wYXJlbnRfc2Muc2MucmVzaXpl
KG8sIHcsIGgpOworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0gc3RhdGljX2Nhc3Q8RXdr
X1ZpZXdfU21hcnRfRGF0YSo+KGV2YXNfb2JqZWN0X3NtYXJ0X2RhdGFfZ2V0KGV3a1NpbmdsZSkp
OworICAgIF9wYXJlbnRfc2Muc2MucmVzaXplKGV3a1NpbmdsZSwgd2lkdGgsIGhlaWdodCk7CiAK
ICAgICBpZiAoIXNkKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyB0aGVzZSBzaG91bGQgYmUg
cXVldWVkIGFuZCBwcm9jZXNzZWQgaW4gY2FsY3VsYXRlIGFzIHdlbGwhCi0gICAgZXZhc19vYmpl
Y3RfaW1hZ2Vfc2l6ZV9zZXQoc2QtPmJhY2tpbmdfc3RvcmUsIHcsIGgpOworICAgIGV2YXNfb2Jq
ZWN0X2ltYWdlX3NpemVfc2V0KHNkLT5iYWNraW5nX3N0b3JlLCB3aWR0aCwgaGVpZ2h0KTsKICAg
ICBpZiAoc2QtPmFuaW1hdGVkX3pvb20uem9vbS5jdXJyZW50IDwgMC4wMDAwMSkgewogICAgICAg
ICBFdmFzX09iamVjdCogY2xpcCA9IGV2YXNfb2JqZWN0X2NsaXBfZ2V0KHNkLT5iYWNraW5nX3N0
b3JlKTsKICAgICAgICAgRXZhc19Db29yZCB4LCB5LCBjdywgY2g7Ci0gICAgICAgIGV2YXNfb2Jq
ZWN0X2ltYWdlX2ZpbGxfc2V0KHNkLT5iYWNraW5nX3N0b3JlLCAwLCAwLCB3LCBoKTsKKyAgICAg
ICAgZXZhc19vYmplY3RfaW1hZ2VfZmlsbF9zZXQoc2QtPmJhY2tpbmdfc3RvcmUsIDAsIDAsIHdp
ZHRoLCBoZWlnaHQpOwogICAgICAgICBldmFzX29iamVjdF9nZW9tZXRyeV9nZXQoc2QtPmJhY2tp
bmdfc3RvcmUsICZ4LCAmeSwgMCwgMCk7CiAgICAgICAgIGV2YXNfb2JqZWN0X21vdmUoY2xpcCwg
eCwgeSk7CiAgICAgICAgIGV3a19mcmFtZV9jb250ZW50c19zaXplX2dldChzZC0+bWFpbl9mcmFt
ZSwgJmN3LCAmY2gpOwotICAgICAgICBpZiAodyA+IGN3KQotICAgICAgICAgICAgdyA9IGN3Owot
ICAgICAgICBpZiAoaCA+IGNoKQotICAgICAgICAgICAgaCA9IGNoOwotICAgICAgICBldmFzX29i
amVjdF9yZXNpemUoY2xpcCwgdywgaCk7CisgICAgICAgIGlmICh3aWR0aCA+IGN3KQorICAgICAg
ICAgICAgd2lkdGggPSBjdzsKKyAgICAgICAgaWYgKGhlaWdodCA+IGNoKQorICAgICAgICAgICAg
aGVpZ2h0ID0gY2g7CisgICAgICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShjbGlwLCB3aWR0aCwgaGVp
Z2h0KTsKICAgICB9CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3ZpZXdfNGJfbW92ZV9y
ZWdpb25fdXAodWludDMyX3QqIGltYWdlLCBzaXplX3Qgcm93cywgc2l6ZV90IHgsIHNpemVfdCB5
LCBzaXplX3Qgdywgc2l6ZV90IGgsIHNpemVfdCByb3dzaXplKQorc3RhdGljIGlubGluZSB2b2lk
IF9ld2tfdmlld180Yl9tb3ZlX3JlZ2lvbl91cCh1aW50MzJfdCogaW1hZ2UsIHNpemVfdCByb3dz
LCBzaXplX3QgeCwgc2l6ZV90IHksIHNpemVfdCB3aWR0aCwgc2l6ZV90IGhlaWdodCwgc2l6ZV90
IHJvd1NpemUpCiB7CiAgICAgdWludDMyX3QqIHNyYzsKICAgICB1aW50MzJfdCogZHN0OwogCi0g
ICAgZHN0ID0gaW1hZ2UgKyB4ICsgeSAqIHJvd3NpemU7Ci0gICAgc3JjID0gZHN0ICsgcm93cyAq
IHJvd3NpemU7Ci0gICAgaCAtPSByb3dzOworICAgIGRzdCA9IGltYWdlICsgeCArIHkgKiByb3dT
aXplOworICAgIHNyYyA9IGRzdCArIHJvd3MgKiByb3dTaXplOworICAgIGhlaWdodCAtPSByb3dz
OwogCi0gICAgZm9yICg7IGggPiAwOyBoLS0sIGRzdCArPSByb3dzaXplLCBzcmMgKz0gcm93c2l6
ZSkKLSAgICAgICAgbWVtY3B5KGRzdCwgc3JjLCB3ICogNCk7CisgICAgZm9yICg7IGhlaWdodCA+
IDA7IGhlaWdodC0tLCBkc3QgKz0gcm93U2l6ZSwgc3JjICs9IHJvd1NpemUpCisgICAgICAgIG1l
bWNweShkc3QsIHNyYywgd2lkdGggKiA0KTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIF9ld2tf
dmlld180Yl9tb3ZlX3JlZ2lvbl9kb3duKHVpbnQzMl90KiBpbWFnZSwgc2l6ZV90IHJvd3MsIHNp
emVfdCB4LCBzaXplX3QgeSwgc2l6ZV90IHcsIHNpemVfdCBoLCBzaXplX3Qgcm93c2l6ZSkKK3N0
YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3ZpZXdfNGJfbW92ZV9yZWdpb25fZG93bih1aW50MzJfdCog
aW1hZ2UsIHNpemVfdCByb3dzLCBzaXplX3QgeCwgc2l6ZV90IHksIHNpemVfdCB3aWR0aCwgc2l6
ZV90IGhlaWdodCwgc2l6ZV90IHJvd1NpemUpCiB7CiAgICAgdWludDMyX3QqIHNyYzsKICAgICB1
aW50MzJfdCogZHN0OwogCi0gICAgaCAtPSByb3dzOwotICAgIHNyYyA9IGltYWdlICsgeCArICh5
ICsgaCAtIDEpICogcm93c2l6ZTsKLSAgICBkc3QgPSBzcmMgKyByb3dzICogcm93c2l6ZTsKKyAg
ICBoZWlnaHQgLT0gcm93czsKKyAgICBzcmMgPSBpbWFnZSArIHggKyAoeSArIGhlaWdodCAtIDEp
ICogcm93U2l6ZTsKKyAgICBkc3QgPSBzcmMgKyByb3dzICogcm93U2l6ZTsKIAotICAgIGZvciAo
OyBoID4gMDsgaC0tLCBkc3QgLT0gcm93c2l6ZSwgc3JjIC09IHJvd3NpemUpCi0gICAgICAgIG1l
bWNweShkc3QsIHNyYywgdyAqIDQpOworICAgIGZvciAoOyBoZWlnaHQgPiAwOyBoZWlnaHQtLSwg
ZHN0IC09IHJvd1NpemUsIHNyYyAtPSByb3dTaXplKQorICAgICAgICBtZW1jcHkoZHN0LCBzcmMs
IHdpZHRoICogNCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3ZpZXdfNGJfbW92ZV9s
aW5lX2xlZnQodWludDMyX3QqIGRzdCwgY29uc3QgdWludDMyX3QqIHNyYywgc2l6ZV90IGNvdW50
KQpAQCAtMTM2LDkwICsxMzQsOTAgQEAgc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdmlld180Yl9t
b3ZlX2xpbmVfcmlnaHQodWludDMyX3QqIGRzdCwgdWludDMyX3QqIHNyYywgc2kKICAgICAgICAg
KmRzdCA9ICpzcmM7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3ZpZXdfNGJfbW92ZV9y
ZWdpb25fbGVmdCh1aW50MzJfdCogaW1hZ2UsIHNpemVfdCBjb2xzLCBzaXplX3QgeCwgc2l6ZV90
IHksIHNpemVfdCB3LCBzaXplX3QgaCwgc2l6ZV90IHJvd3NpemUpCitzdGF0aWMgaW5saW5lIHZv
aWQgX2V3a192aWV3XzRiX21vdmVfcmVnaW9uX2xlZnQodWludDMyX3QqIGltYWdlLCBzaXplX3Qg
Y29scywgc2l6ZV90IHgsIHNpemVfdCB5LCBzaXplX3Qgd2lkdGgsIHNpemVfdCBoZWlnaHQsIHNp
emVfdCByb3dTaXplKQogewogICAgIHVpbnQzMl90KiBzcmM7CiAgICAgdWludDMyX3QqIGRzdDsK
IAotICAgIGRzdCA9IGltYWdlICsgeCArIHkgKiByb3dzaXplOworICAgIGRzdCA9IGltYWdlICsg
eCArIHkgKiByb3dTaXplOwogICAgIHNyYyA9IGRzdCArIGNvbHM7Ci0gICAgdyAtPSBjb2xzOwor
ICAgIHdpZHRoIC09IGNvbHM7CiAKLSAgICBmb3IgKDsgaCA+IDA7IGgtLSwgZHN0ICs9IHJvd3Np
emUsIHNyYyArPSByb3dzaXplKQotICAgICAgICBfZXdrX3ZpZXdfNGJfbW92ZV9saW5lX2xlZnQo
ZHN0LCBzcmMsIHcpOworICAgIGZvciAoOyBoZWlnaHQgPiAwOyBoZWlnaHQtLSwgZHN0ICs9IHJv
d1NpemUsIHNyYyArPSByb3dTaXplKQorICAgICAgICBfZXdrX3ZpZXdfNGJfbW92ZV9saW5lX2xl
ZnQoZHN0LCBzcmMsIHdpZHRoKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdmlld180
Yl9tb3ZlX3JlZ2lvbl9yaWdodCh1aW50MzJfdCogaW1hZ2UsIHNpemVfdCBjb2xzLCBzaXplX3Qg
eCwgc2l6ZV90IHksIHNpemVfdCB3LCBzaXplX3QgaCwgc2l6ZV90IHJvd3NpemUpCitzdGF0aWMg
aW5saW5lIHZvaWQgX2V3a192aWV3XzRiX21vdmVfcmVnaW9uX3JpZ2h0KHVpbnQzMl90KiBpbWFn
ZSwgc2l6ZV90IGNvbHVtbnMsIHNpemVfdCB4LCBzaXplX3QgeSwgc2l6ZV90IHdpZHRoLCBzaXpl
X3QgaGVpZ2h0LCBzaXplX3Qgcm93U2l6ZSkKIHsKICAgICB1aW50MzJfdCogc3JjOwogICAgIHVp
bnQzMl90KiBkc3Q7CiAKLSAgICB3IC09IGNvbHM7Ci0gICAgc3JjID0gaW1hZ2UgKyAoeCArIHcg
LSAxKSArIHkgKiByb3dzaXplOwotICAgIGRzdCA9IHNyYyArIGNvbHM7CisgICAgd2lkdGggLT0g
Y29sdW1uczsKKyAgICBzcmMgPSBpbWFnZSArICh4ICsgd2lkdGggLSAxKSArIHkgKiByb3dTaXpl
OworICAgIGRzdCA9IHNyYyArIGNvbHVtbnM7CiAKLSAgICBmb3IgKDsgaCA+IDA7IGgtLSwgZHN0
ICs9IHJvd3NpemUsIHNyYyArPSByb3dzaXplKQotICAgICAgICBfZXdrX3ZpZXdfNGJfbW92ZV9s
aW5lX3JpZ2h0KGRzdCwgc3JjLCB3KTsKKyAgICBmb3IgKDsgaGVpZ2h0ID4gMDsgaGVpZ2h0LS0s
IGRzdCArPSByb3dTaXplLCBzcmMgKz0gcm93U2l6ZSkKKyAgICAgICAgX2V3a192aWV3XzRiX21v
dmVfbGluZV9yaWdodChkc3QsIHNyYywgd2lkdGgpOwogfQogCiAvKiBjYXRjaC1hbGwgZnVuY3Rp
b24sIG5vdCBhcyBvcHRpbWl6ZWQgYXMgdGhlIG90aGVycywgYnV0IGRvZXMgdGhlIHdvcmsuICov
Ci1zdGF0aWMgaW5saW5lIHZvaWQgX2V3a192aWV3XzRiX21vdmVfcmVnaW9uKHVpbnQzMl90KiBp
bWFnZSwgaW50IGR4LCBpbnQgZHksIHNpemVfdCB4LCBzaXplX3QgeSwgc2l6ZV90IHcsIHNpemVf
dCBoLCBzaXplX3Qgcm93c2l6ZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3ZpZXdfNGJfbW92
ZV9yZWdpb24odWludDMyX3QqIGltYWdlLCBpbnQgZGVsdGFYLCBpbnQgZGVsdGFZLCBzaXplX3Qg
eCwgc2l6ZV90IHksIHNpemVfdCB3aWR0aCwgc2l6ZV90IGhlaWdodCwgc2l6ZV90IHJvd1NpemUp
CiB7CiAgICAgdWludDMyX3QqIHNyYzsKICAgICB1aW50MzJfdCogZHN0OwogCi0gICAgaWYgKGR5
IDwgMCkgewotICAgICAgICBoICs9IGR5OwotICAgICAgICBkc3QgPSBpbWFnZSArIHggKyB5ICog
cm93c2l6ZTsKLSAgICAgICAgc3JjID0gZHN0IC0gZHkgKiByb3dzaXplOwotICAgICAgICBpZiAo
ZHggPD0gMCkgewotICAgICAgICAgICAgdyArPSBkeDsKLSAgICAgICAgICAgIHNyYyAtPSBkeDsK
LSAgICAgICAgICAgIGZvciAoOyBoID4gMDsgaC0tLCBkc3QgKz0gcm93c2l6ZSwgc3JjICs9IHJv
d3NpemUpCi0gICAgICAgICAgICAgICAgX2V3a192aWV3XzRiX21vdmVfbGluZV9sZWZ0KGRzdCwg
c3JjLCB3KTsKKyAgICBpZiAoZGVsdGFZIDwgMCkgeworICAgICAgICBoZWlnaHQgKz0gZGVsdGFZ
OworICAgICAgICBkc3QgPSBpbWFnZSArIHggKyB5ICogcm93U2l6ZTsKKyAgICAgICAgc3JjID0g
ZHN0IC0gZGVsdGFZICogcm93U2l6ZTsKKyAgICAgICAgaWYgKGRlbHRhWCA8PSAwKSB7CisgICAg
ICAgICAgICB3aWR0aCArPSBkZWx0YVg7CisgICAgICAgICAgICBzcmMgLT0gZGVsdGFYOworICAg
ICAgICAgICAgZm9yICg7IGhlaWdodCA+IDA7IGhlaWdodC0tLCBkc3QgKz0gcm93U2l6ZSwgc3Jj
ICs9IHJvd1NpemUpCisgICAgICAgICAgICAgICAgX2V3a192aWV3XzRiX21vdmVfbGluZV9sZWZ0
KGRzdCwgc3JjLCB3aWR0aCk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB3IC09IGR4
OwotICAgICAgICAgICAgc3JjICs9IHcgLSAxOwotICAgICAgICAgICAgZHN0ICs9IHcgKyBkeCAt
MTsKLSAgICAgICAgICAgIGZvciAoOyBoID4gMDsgaC0tLCBkc3QgKz0gcm93c2l6ZSwgc3JjICs9
IHJvd3NpemUpCi0gICAgICAgICAgICAgICAgX2V3a192aWV3XzRiX21vdmVfbGluZV9yaWdodChk
c3QsIHNyYywgdyk7CisgICAgICAgICAgICB3aWR0aCAtPSBkZWx0YVg7CisgICAgICAgICAgICBz
cmMgKz0gd2lkdGggLSAxOworICAgICAgICAgICAgZHN0ICs9IHdpZHRoICsgZGVsdGFYIC0xOwor
ICAgICAgICAgICAgZm9yICg7IGhlaWdodCA+IDA7IGhlaWdodC0tLCBkc3QgKz0gcm93U2l6ZSwg
c3JjICs9IHJvd1NpemUpCisgICAgICAgICAgICAgICAgX2V3a192aWV3XzRiX21vdmVfbGluZV9y
aWdodChkc3QsIHNyYywgd2lkdGgpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAg
aCAtPSBkeTsKLSAgICAgICAgc3JjID0gaW1hZ2UgKyB4ICsgKHkgKyBoIC0gMSkgKiByb3dzaXpl
OwotICAgICAgICBkc3QgPSBzcmMgKyBkeSAqIHJvd3NpemU7Ci0gICAgICAgIGlmIChkeCA8PSAw
KSB7Ci0gICAgICAgICAgICB3ICs9IGR4OwotICAgICAgICAgICAgc3JjIC09IGR4OwotICAgICAg
ICAgICAgZm9yICg7IGggPiAwOyBoLS0sIGRzdCAtPSByb3dzaXplLCBzcmMgLT0gcm93c2l6ZSkK
LSAgICAgICAgICAgICAgICBfZXdrX3ZpZXdfNGJfbW92ZV9saW5lX2xlZnQoZHN0LCBzcmMsIHcp
OworICAgICAgICBoZWlnaHQgLT0gZGVsdGFZOworICAgICAgICBzcmMgPSBpbWFnZSArIHggKyAo
eSArIGhlaWdodCAtIDEpICogcm93U2l6ZTsKKyAgICAgICAgZHN0ID0gc3JjICsgZGVsdGFZICog
cm93U2l6ZTsKKyAgICAgICAgaWYgKGRlbHRhWCA8PSAwKSB7CisgICAgICAgICAgICB3aWR0aCAr
PSBkZWx0YVg7CisgICAgICAgICAgICBzcmMgLT0gZGVsdGFYOworICAgICAgICAgICAgZm9yICg7
IGhlaWdodCA+IDA7IGhlaWdodC0tLCBkc3QgLT0gcm93U2l6ZSwgc3JjIC09IHJvd1NpemUpCisg
ICAgICAgICAgICAgICAgX2V3a192aWV3XzRiX21vdmVfbGluZV9sZWZ0KGRzdCwgc3JjLCB3aWR0
aCk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB3IC09IGR4OwotICAgICAgICAgICAg
c3JjICs9IHcgLSAxOwotICAgICAgICAgICAgZHN0ICs9IHcgKyBkeCAtIDE7Ci0gICAgICAgICAg
ICBmb3IgKDsgaCA+IDA7IGgtLSwgZHN0IC09IHJvd3NpemUsIHNyYyAtPSByb3dzaXplKQotICAg
ICAgICAgICAgICAgIF9ld2tfdmlld180Yl9tb3ZlX2xpbmVfcmlnaHQoZHN0LCBzcmMsIHcpOwor
ICAgICAgICAgICAgd2lkdGggLT0gZGVsdGFYOworICAgICAgICAgICAgc3JjICs9IHdpZHRoIC0g
MTsKKyAgICAgICAgICAgIGRzdCArPSB3aWR0aCArIGRlbHRhWCAtIDE7CisgICAgICAgICAgICBm
b3IgKDsgaGVpZ2h0ID4gMDsgaGVpZ2h0LS0sIGRzdCAtPSByb3dTaXplLCBzcmMgLT0gcm93U2l6
ZSkKKyAgICAgICAgICAgICAgICBfZXdrX3ZpZXdfNGJfbW92ZV9saW5lX3JpZ2h0KGRzdCwgc3Jj
LCB3aWR0aCk7CiAgICAgICAgIH0KICAgICB9CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfZXdr
X3ZpZXdfc2luZ2xlX3Njcm9sbF9wcm9jZXNzX3NpbmdsZShFd2tfVmlld19TbWFydF9EYXRhKiBz
ZCwgdm9pZCogcGl4ZWxzLCBFdmFzX0Nvb3JkIG93LCBFdmFzX0Nvb3JkIG9oLCBjb25zdCBFd2tf
U2Nyb2xsX1JlcXVlc3QqIHNyKQorc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdmlld19zaW5nbGVf
c2Nyb2xsX3Byb2Nlc3Nfc2luZ2xlKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSwgdm9p
ZCogcGl4ZWxzLCBFdmFzX0Nvb3JkIHdpZHRoLCBFdmFzX0Nvb3JkIGhlaWdodCwgY29uc3QgRXdr
X1Njcm9sbF9SZXF1ZXN0KiBzY3JvbGxSZXF1ZXN0KQogewogICAgIEV2YXNfQ29vcmQgc3gsIHN5
LCBzdywgc2g7CiAKICAgICBEQkcoIiVkLCVkICsgJWQsJWQgJSswM2QsJSswM2QsIHN0b3JlOiAl
cCAlZHglZCIsCi0gICAgICAgIHNyLT54LCBzci0+eSwgc3ItPncsIHNyLT5oLCBzci0+ZHgsIHNy
LT5keSwgcGl4ZWxzLCBvdywgb2gpOworICAgICAgICBzY3JvbGxSZXF1ZXN0LT54LCBzY3JvbGxS
ZXF1ZXN0LT55LCBzY3JvbGxSZXF1ZXN0LT53LCBzY3JvbGxSZXF1ZXN0LT5oLCBzY3JvbGxSZXF1
ZXN0LT5keCwgc2Nyb2xsUmVxdWVzdC0+ZHksIHBpeGVscywgd2lkdGgsIGhlaWdodCk7CiAKLSAg
ICBzeCA9IHNyLT54OwotICAgIHN5ID0gc3ItPnk7Ci0gICAgc3cgPSBzci0+dzsKLSAgICBzaCA9
IHNyLT5oOworICAgIHN4ID0gc2Nyb2xsUmVxdWVzdC0+eDsKKyAgICBzeSA9IHNjcm9sbFJlcXVl
c3QtPnk7CisgICAgc3cgPSBzY3JvbGxSZXF1ZXN0LT53OworICAgIHNoID0gc2Nyb2xsUmVxdWVz
dC0+aDsKIAotICAgIGlmIChhYnMoc3ItPmR4KSA+PSBzdyB8fCBhYnMoc3ItPmR5KSA+PSBzaCkg
eworICAgIGlmIChhYnMoc2Nyb2xsUmVxdWVzdC0+ZHgpID49IHN3IHx8IGFicyhzY3JvbGxSZXF1
ZXN0LT5keSkgPj0gc2gpIHsKICAgICAgICAgLyogZG91YnQgd2Via2l0IHdvdWxkIGJlIHNvIHN0
dXBpZC4uLiAqLwogICAgICAgICBEQkcoImZ1bGwgcGFnZSBzY3JvbGwgJSswM2QsJSswM2QuIGNv
bnZlcnQgdG8gcmVwYWludCAlZCwlZCArICVkeCVkIiwKLSAgICAgICAgICAgIHNyLT5keCwgc3It
PmR5LCBzeCwgc3ksIHN3LCBzaCk7Ci0gICAgICAgIGV3a192aWV3X3JlcGFpbnRfYWRkKHNkLT5f
cHJpdiwgc3gsIHN5LCBzdywgc2gpOworICAgICAgICAgICAgc2Nyb2xsUmVxdWVzdC0+ZHgsIHNj
cm9sbFJlcXVlc3QtPmR5LCBzeCwgc3ksIHN3LCBzaCk7CisgICAgICAgIGV3a192aWV3X3JlcGFp
bnRfYWRkKHNtYXJ0RGF0YS0+X3ByaXYsIHN4LCBzeSwgc3csIHNoKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIApAQCAtMjMyLDEwICsyMzAsMTAgQEAgc3RhdGljIGlubGluZSB2b2lkIF9ld2tf
dmlld19zaW5nbGVfc2Nyb2xsX3Byb2Nlc3Nfc2luZ2xlKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHMK
ICAgICAgICAgc3kgPSAwOwogICAgIH0KIAotICAgIGlmIChzeCArIHN3ID4gb3cpCi0gICAgICAg
IHN3ID0gb3cgLSBzeDsKLSAgICBpZiAoc3kgKyBzaCA+IG9oKQotICAgICAgICBzaCA9IG9oIC0g
c3k7CisgICAgaWYgKHN4ICsgc3cgPiB3aWR0aCkKKyAgICAgICAgc3cgPSB3aWR0aCAtIHN4Owor
ICAgIGlmIChzeSArIHNoID4gaGVpZ2h0KQorICAgICAgICBzaCA9IGhlaWdodCAtIHN5OwogCiAg
ICAgaWYgKHN3IDwgMCkKICAgICAgICAgc3cgPSAwOwpAQCAtMjQzLDgzICsyNDEsODMgQEAgc3Rh
dGljIGlubGluZSB2b2lkIF9ld2tfdmlld19zaW5nbGVfc2Nyb2xsX3Byb2Nlc3Nfc2luZ2xlKEV3
a19WaWV3X1NtYXJ0X0RhdGEqIHMKICAgICAgICAgc2ggPSAwOwogCiAgICAgRUlOQV9TQUZFVFlf
T05fVFJVRV9SRVRVUk4oIXN3IHx8ICFzaCk7Ci0gICAgaWYgKCFzci0+ZHgpIHsKLSAgICAgICAg
aWYgKHNyLT5keSA8IDApIHsKKyAgICBpZiAoIXNjcm9sbFJlcXVlc3QtPmR4KSB7CisgICAgICAg
IGlmIChzY3JvbGxSZXF1ZXN0LT5keSA8IDApIHsKICAgICAgICAgICAgIERCRygic2Nyb2xsIHVw
OiAlKzAzZCwlKzAzZCB1cGRhdGU9JWQsJWQrJWR4JWQsICIKICAgICAgICAgICAgICAgICAicmVw
YWludD0lZCwlZCslZHglZCIsCi0gICAgICAgICAgICAgICAgc3ItPmR4LCBzci0+ZHksIHN4LCBz
eSwgc3csIHNoICsgc3ItPmR5LAotICAgICAgICAgICAgICAgIHN4LCBzeSArIHNoICsgc3ItPmR5
LCBzdywgLXNyLT5keSk7CisgICAgICAgICAgICAgICAgc2Nyb2xsUmVxdWVzdC0+ZHgsIHNjcm9s
bFJlcXVlc3QtPmR5LCBzeCwgc3ksIHN3LCBzaCArIHNjcm9sbFJlcXVlc3QtPmR5LAorICAgICAg
ICAgICAgICAgIHN4LCBzeSArIHNoICsgc2Nyb2xsUmVxdWVzdC0+ZHksIHN3LCAtc2Nyb2xsUmVx
dWVzdC0+ZHkpOwogCiAgICAgICAgICAgICBfZXdrX3ZpZXdfNGJfbW92ZV9yZWdpb25fdXAKLSAg
ICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dWludDMyX3QqPihwaXhlbHMpLCAtc3ItPmR5LCBz
eCwgc3ksIHN3LCBzaCwgb3cpOworICAgICAgICAgICAgICAgIChzdGF0aWNfY2FzdDx1aW50MzJf
dCo+KHBpeGVscyksIC1zY3JvbGxSZXF1ZXN0LT5keSwgc3gsIHN5LCBzdywgc2gsIHdpZHRoKTsK
ICAgICAgICAgICAgIGV2YXNfb2JqZWN0X2ltYWdlX2RhdGFfdXBkYXRlX2FkZAotICAgICAgICAg
ICAgICAgIChzZC0+YmFja2luZ19zdG9yZSwgc3gsIHN5LCBzdywgc2ggKyBzci0+ZHkpOworICAg
ICAgICAgICAgICAgIChzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUsIHN4LCBzeSwgc3csIHNoICsg
c2Nyb2xsUmVxdWVzdC0+ZHkpOwogCi0gICAgICAgICAgICBld2tfdmlld19yZXBhaW50X2FkZChz
ZC0+X3ByaXYsIHN4LCBzeSArIHNoICsgc3ItPmR5LCBzdywgLXNyLT5keSk7Ci0gICAgICAgIH0g
ZWxzZSBpZiAoc3ItPmR5ID4gMCkgeworICAgICAgICAgICAgZXdrX3ZpZXdfcmVwYWludF9hZGQo
c21hcnREYXRhLT5fcHJpdiwgc3gsIHN5ICsgc2ggKyBzY3JvbGxSZXF1ZXN0LT5keSwgc3csIC1z
Y3JvbGxSZXF1ZXN0LT5keSk7CisgICAgICAgIH0gZWxzZSBpZiAoc2Nyb2xsUmVxdWVzdC0+ZHkg
PiAwKSB7CiAgICAgICAgICAgICBEQkcoInNjcm9sbCBkb3duOiAlKzAzZCwlKzAzZCB1cGRhdGU9
JWQsJWQrJWR4JWQsICIKICAgICAgICAgICAgICAgICAicmVwYWludD0lZCwlZCslZHglZCIsCi0g
ICAgICAgICAgICAgICAgc3ItPmR4LCBzci0+ZHksIHN4LCBzeSArIHNyLT5keSwgc3csIHNoIC0g
c3ItPmR5LAotICAgICAgICAgICAgICAgIHN4LCBzeSwgc3csIHNyLT5keSk7CisgICAgICAgICAg
ICAgICAgc2Nyb2xsUmVxdWVzdC0+ZHgsIHNjcm9sbFJlcXVlc3QtPmR5LCBzeCwgc3kgKyBzY3Jv
bGxSZXF1ZXN0LT5keSwgc3csIHNoIC0gc2Nyb2xsUmVxdWVzdC0+ZHksCisgICAgICAgICAgICAg
ICAgc3gsIHN5LCBzdywgc2Nyb2xsUmVxdWVzdC0+ZHkpOwogCiAgICAgICAgICAgICBfZXdrX3Zp
ZXdfNGJfbW92ZV9yZWdpb25fZG93bgotICAgICAgICAgICAgICAgIChzdGF0aWNfY2FzdDx1aW50
MzJfdCo+KHBpeGVscyksIHNyLT5keSwgc3gsIHN5LCBzdywgc2gsIG93KTsKKyAgICAgICAgICAg
ICAgICAoc3RhdGljX2Nhc3Q8dWludDMyX3QqPihwaXhlbHMpLCBzY3JvbGxSZXF1ZXN0LT5keSwg
c3gsIHN5LCBzdywgc2gsIHdpZHRoKTsKICAgICAgICAgICAgIGV2YXNfb2JqZWN0X2ltYWdlX2Rh
dGFfdXBkYXRlX2FkZAotICAgICAgICAgICAgICAgIChzZC0+YmFja2luZ19zdG9yZSwgc3gsIHN5
ICsgc3ItPmR5LCBzdywgc2ggLSBzci0+ZHkpOworICAgICAgICAgICAgICAgIChzbWFydERhdGEt
PmJhY2tpbmdfc3RvcmUsIHN4LCBzeSArIHNjcm9sbFJlcXVlc3QtPmR5LCBzdywgc2ggLSBzY3Jv
bGxSZXF1ZXN0LT5keSk7CiAKLSAgICAgICAgICAgIGV3a192aWV3X3JlcGFpbnRfYWRkKHNkLT5f
cHJpdiwgc3gsIHN5LCBzdywgc3ItPmR5KTsKKyAgICAgICAgICAgIGV3a192aWV3X3JlcGFpbnRf
YWRkKHNtYXJ0RGF0YS0+X3ByaXYsIHN4LCBzeSwgc3csIHNjcm9sbFJlcXVlc3QtPmR5KTsKICAg
ICAgICAgfQotICAgIH0gZWxzZSBpZiAoIXNyLT5keSkgewotICAgICAgICBpZiAoc3ItPmR4IDwg
MCkgeworICAgIH0gZWxzZSBpZiAoIXNjcm9sbFJlcXVlc3QtPmR5KSB7CisgICAgICAgIGlmIChz
Y3JvbGxSZXF1ZXN0LT5keCA8IDApIHsKICAgICAgICAgICAgIERCRygic2Nyb2xsIGxlZnQ6ICUr
MDNkLCUrMDNkIHVwZGF0ZT0lZCwlZCslZHglZCwgIgogICAgICAgICAgICAgICAgICJyZXBhaW50
PSVkLCVkKyVkeCVkIiwKLSAgICAgICAgICAgICAgICBzci0+ZHgsIHNyLT5keSwgc3gsIHN5LCBz
dyArIHNyLT5keCwgc2gsCi0gICAgICAgICAgICAgICAgc3ggKyBzdyArIHNyLT5keCwgc3ksIC1z
ci0+ZHgsIHNoKTsKKyAgICAgICAgICAgICAgICBzY3JvbGxSZXF1ZXN0LT5keCwgc2Nyb2xsUmVx
dWVzdC0+ZHksIHN4LCBzeSwgc3cgKyBzY3JvbGxSZXF1ZXN0LT5keCwgc2gsCisgICAgICAgICAg
ICAgICAgc3ggKyBzdyArIHNjcm9sbFJlcXVlc3QtPmR4LCBzeSwgLXNjcm9sbFJlcXVlc3QtPmR4
LCBzaCk7CiAKICAgICAgICAgICAgIF9ld2tfdmlld180Yl9tb3ZlX3JlZ2lvbl9sZWZ0Ci0gICAg
ICAgICAgICAgICAgKHN0YXRpY19jYXN0PHVpbnQzMl90Kj4ocGl4ZWxzKSwgLXNyLT5keCwgc3gs
IHN5LCBzdywgc2gsIG93KTsKKyAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dWludDMyX3Qq
PihwaXhlbHMpLCAtc2Nyb2xsUmVxdWVzdC0+ZHgsIHN4LCBzeSwgc3csIHNoLCB3aWR0aCk7CiAg
ICAgICAgICAgICBldmFzX29iamVjdF9pbWFnZV9kYXRhX3VwZGF0ZV9hZGQKLSAgICAgICAgICAg
ICAgICAoc2QtPmJhY2tpbmdfc3RvcmUsIHN4LCBzeSwgc3cgKyBzci0+ZHgsIHNoKTsKKyAgICAg
ICAgICAgICAgICAoc21hcnREYXRhLT5iYWNraW5nX3N0b3JlLCBzeCwgc3ksIHN3ICsgc2Nyb2xs
UmVxdWVzdC0+ZHgsIHNoKTsKIAotICAgICAgICAgICAgZXdrX3ZpZXdfcmVwYWludF9hZGQoc2Qt
Pl9wcml2LCBzeCArIHN3ICsgc3ItPmR4LCBzeSwgLXNyLT5keCwgc2gpOwotICAgICAgICB9IGVs
c2UgaWYgKHNyLT5keCA+IDApIHsKKyAgICAgICAgICAgIGV3a192aWV3X3JlcGFpbnRfYWRkKHNt
YXJ0RGF0YS0+X3ByaXYsIHN4ICsgc3cgKyBzY3JvbGxSZXF1ZXN0LT5keCwgc3ksIC1zY3JvbGxS
ZXF1ZXN0LT5keCwgc2gpOworICAgICAgICB9IGVsc2UgaWYgKHNjcm9sbFJlcXVlc3QtPmR4ID4g
MCkgewogICAgICAgICAgICAgREJHKCJzY3JvbGwgdXA6ICUrMDNkLCUrMDNkIHVwZGF0ZT0lZCwl
ZCslZHglZCwgIgogICAgICAgICAgICAgICAgICJyZXBhaW50PSVkLCVkKyVkeCVkIiwKLSAgICAg
ICAgICAgICAgICBzci0+ZHgsIHNyLT5keSwgc3ggKyBzci0+ZHgsIHN5LCBzdyAtIHNyLT5keCwg
c2gsCi0gICAgICAgICAgICAgICAgc3gsIHN5LCBzci0+ZHgsIHNoKTsKKyAgICAgICAgICAgICAg
ICBzY3JvbGxSZXF1ZXN0LT5keCwgc2Nyb2xsUmVxdWVzdC0+ZHksIHN4ICsgc2Nyb2xsUmVxdWVz
dC0+ZHgsIHN5LCBzdyAtIHNjcm9sbFJlcXVlc3QtPmR4LCBzaCwKKyAgICAgICAgICAgICAgICBz
eCwgc3ksIHNjcm9sbFJlcXVlc3QtPmR4LCBzaCk7CiAKICAgICAgICAgICAgIF9ld2tfdmlld180
Yl9tb3ZlX3JlZ2lvbl9yaWdodAotICAgICAgICAgICAgICAgIChzdGF0aWNfY2FzdDx1aW50MzJf
dCo+KHBpeGVscyksIHNyLT5keCwgc3gsIHN5LCBzdywgc2gsIG93KTsKKyAgICAgICAgICAgICAg
ICAoc3RhdGljX2Nhc3Q8dWludDMyX3QqPihwaXhlbHMpLCBzY3JvbGxSZXF1ZXN0LT5keCwgc3gs
IHN5LCBzdywgc2gsIHdpZHRoKTsKICAgICAgICAgICAgIGV2YXNfb2JqZWN0X2ltYWdlX2RhdGFf
dXBkYXRlX2FkZAotICAgICAgICAgICAgICAgIChzZC0+YmFja2luZ19zdG9yZSwgc3ggKyBzci0+
ZHgsIHN5LCBzdyAtIHNyLT5keCwgc2gpOworICAgICAgICAgICAgICAgIChzbWFydERhdGEtPmJh
Y2tpbmdfc3RvcmUsIHN4ICsgc2Nyb2xsUmVxdWVzdC0+ZHgsIHN5LCBzdyAtIHNjcm9sbFJlcXVl
c3QtPmR4LCBzaCk7CiAKLSAgICAgICAgICAgIGV3a192aWV3X3JlcGFpbnRfYWRkKHNkLT5fcHJp
diwgc3gsIHN5LCBzci0+ZHgsIHNoKTsKKyAgICAgICAgICAgIGV3a192aWV3X3JlcGFpbnRfYWRk
KHNtYXJ0RGF0YS0+X3ByaXYsIHN4LCBzeSwgc2Nyb2xsUmVxdWVzdC0+ZHgsIHNoKTsKICAgICAg
ICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIEV2YXNfQ29vcmQgbXgsIG15LCBtdywgbWgsIGF4
LCBheSwgYXcsIGFoLCBieCwgYnksIGJ3LCBiaDsKIAotICAgICAgICBpZiAoc3ItPmR4IDwgMCkg
eworICAgICAgICBpZiAoc2Nyb2xsUmVxdWVzdC0+ZHggPCAwKSB7CiAgICAgICAgICAgICBteCA9
IHN4OwotICAgICAgICAgICAgbXcgPSBzdyArIHNyLT5keDsKKyAgICAgICAgICAgIG13ID0gc3cg
KyBzY3JvbGxSZXF1ZXN0LT5keDsKICAgICAgICAgICAgIGF4ID0gbXggKyBtdzsKLSAgICAgICAg
ICAgIGF3ID0gLXNyLT5keDsKKyAgICAgICAgICAgIGF3ID0gLXNjcm9sbFJlcXVlc3QtPmR4Owog
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgYXggPSBzeDsKLSAgICAgICAgICAgIGF3ID0g
c3ItPmR4OworICAgICAgICAgICAgYXcgPSBzY3JvbGxSZXF1ZXN0LT5keDsKICAgICAgICAgICAg
IG14ID0gYXggKyBhdzsKLSAgICAgICAgICAgIG13ID0gc3cgLSBzci0+ZHg7CisgICAgICAgICAg
ICBtdyA9IHN3IC0gc2Nyb2xsUmVxdWVzdC0+ZHg7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAo
c3ItPmR5IDwgMCkgeworICAgICAgICBpZiAoc2Nyb2xsUmVxdWVzdC0+ZHkgPCAwKSB7CiAgICAg
ICAgICAgICBteSA9IHN5OwotICAgICAgICAgICAgbWggPSBzaCArIHNyLT5keTsKKyAgICAgICAg
ICAgIG1oID0gc2ggKyBzY3JvbGxSZXF1ZXN0LT5keTsKICAgICAgICAgICAgIGJ5ID0gbXkgKyBt
aDsKLSAgICAgICAgICAgIGJoID0gLXNyLT5keTsKKyAgICAgICAgICAgIGJoID0gLXNjcm9sbFJl
cXVlc3QtPmR5OwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgYnkgPSBzeTsKLSAgICAg
ICAgICAgIGJoID0gc3ItPmR5OworICAgICAgICAgICAgYmggPSBzY3JvbGxSZXF1ZXN0LT5keTsK
ICAgICAgICAgICAgIG15ID0gYnkgKyBiaDsKLSAgICAgICAgICAgIG1oID0gc2ggLSBzci0+ZHk7
CisgICAgICAgICAgICBtaCA9IHNoIC0gc2Nyb2xsUmVxdWVzdC0+ZHk7CiAgICAgICAgIH0KIAog
ICAgICAgICBheSA9IG15OwpAQCAtMzI5LDM3ICszMjcsMzcgQEAgc3RhdGljIGlubGluZSB2b2lk
IF9ld2tfdmlld19zaW5nbGVfc2Nyb2xsX3Byb2Nlc3Nfc2luZ2xlKEV3a19WaWV3X1NtYXJ0X0Rh
dGEqIHMKIAogICAgICAgICBEQkcoInNjcm9sbCBkaWFnb25hbDogJSswM2QsJSswM2QgdXBkYXRl
PSVkLCVkKyVkeCVkLCAiCiAgICAgICAgICAgICAicmVwYWludHM6IGg9JWQsJWQrJWR4JWQgdj0l
ZCwlZCslZHglZCIsCi0gICAgICAgICAgICBzci0+ZHgsIHNyLT5keSwgbXgsIG15LCBtdywgbWgs
IGF4LCBheSwgYXcsIGFoLCBieCwgYnksIGJ3LCBiaCk7CisgICAgICAgICAgICBzY3JvbGxSZXF1
ZXN0LT5keCwgc2Nyb2xsUmVxdWVzdC0+ZHksIG14LCBteSwgbXcsIG1oLCBheCwgYXksIGF3LCBh
aCwgYngsIGJ5LCBidywgYmgpOwogCiAgICAgICAgIF9ld2tfdmlld180Yl9tb3ZlX3JlZ2lvbgot
ICAgICAgICAgICAgKHN0YXRpY19jYXN0PHVpbnQzMl90Kj4ocGl4ZWxzKSwgc3ItPmR4LCBzci0+
ZHksIHN4LCBzeSwgc3csIHNoLCBvdyk7CisgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dWludDMy
X3QqPihwaXhlbHMpLCBzY3JvbGxSZXF1ZXN0LT5keCwgc2Nyb2xsUmVxdWVzdC0+ZHksIHN4LCBz
eSwgc3csIHNoLCB3aWR0aCk7CiAKLSAgICAgICAgZXZhc19vYmplY3RfaW1hZ2VfZGF0YV91cGRh
dGVfYWRkKHNkLT5iYWNraW5nX3N0b3JlLCBteCwgbXksIG13LCBtaCk7Ci0gICAgICAgIGV3a192
aWV3X3JlcGFpbnRfYWRkKHNkLT5fcHJpdiwgYXgsIGF5LCBhdywgYWgpOwotICAgICAgICBld2tf
dmlld19yZXBhaW50X2FkZChzZC0+X3ByaXYsIGJ4LCBieSwgYncsIGJoKTsKKyAgICAgICAgZXZh
c19vYmplY3RfaW1hZ2VfZGF0YV91cGRhdGVfYWRkKHNtYXJ0RGF0YS0+YmFja2luZ19zdG9yZSwg
bXgsIG15LCBtdywgbWgpOworICAgICAgICBld2tfdmlld19yZXBhaW50X2FkZChzbWFydERhdGEt
Pl9wcml2LCBheCwgYXksIGF3LCBhaCk7CisgICAgICAgIGV3a192aWV3X3JlcGFpbnRfYWRkKHNt
YXJ0RGF0YS0+X3ByaXYsIGJ4LCBieSwgYncsIGJoKTsKICAgICB9CiB9CiAKLXN0YXRpYyBFaW5h
X0Jvb2wgX2V3a192aWV3X3NpbmdsZV9zbWFydF9zY3JvbGxzX3Byb2Nlc3MoRXdrX1ZpZXdfU21h
cnRfRGF0YSogc2QpCitzdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19zaW5nbGVfc21hcnRfc2Ny
b2xsc19wcm9jZXNzKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSkKIHsKICAgICBjb25z
dCBFd2tfU2Nyb2xsX1JlcXVlc3QqIHNyOwogICAgIGNvbnN0IEV3a19TY3JvbGxfUmVxdWVzdCog
c3JfZW5kOwogICAgIEV2YXNfQ29vcmQgb3csIG9oOwogICAgIHNpemVfdCBjb3VudDsKLSAgICB2
b2lkKiBwaXhlbHMgPSBldmFzX29iamVjdF9pbWFnZV9kYXRhX2dldChzZC0+YmFja2luZ19zdG9y
ZSwgMSk7Ci0gICAgZXZhc19vYmplY3RfaW1hZ2Vfc2l6ZV9nZXQoc2QtPmJhY2tpbmdfc3RvcmUs
ICZvdywgJm9oKTsKKyAgICB2b2lkKiBwaXhlbHMgPSBldmFzX29iamVjdF9pbWFnZV9kYXRhX2dl
dChzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUsIDEpOworICAgIGV2YXNfb2JqZWN0X2ltYWdlX3Np
emVfZ2V0KHNtYXJ0RGF0YS0+YmFja2luZ19zdG9yZSwgJm93LCAmb2gpOwogCi0gICAgc3IgPSBl
d2tfdmlld19zY3JvbGxfcmVxdWVzdHNfZ2V0KHNkLT5fcHJpdiwgJmNvdW50KTsKKyAgICBzciA9
IGV3a192aWV3X3Njcm9sbF9yZXF1ZXN0c19nZXQoc21hcnREYXRhLT5fcHJpdiwgJmNvdW50KTsK
ICAgICBzcl9lbmQgPSBzciArIGNvdW50OwogICAgIGZvciAoOyBzciA8IHNyX2VuZDsgc3IrKykK
LSAgICAgICAgX2V3a192aWV3X3NpbmdsZV9zY3JvbGxfcHJvY2Vzc19zaW5nbGUoc2QsIHBpeGVs
cywgb3csIG9oLCBzcik7CisgICAgICAgIF9ld2tfdmlld19zaW5nbGVfc2Nyb2xsX3Byb2Nlc3Nf
c2luZ2xlKHNtYXJ0RGF0YSwgcGl4ZWxzLCBvdywgb2gsIHNyKTsKIAotICAgIGV2YXNfb2JqZWN0
X2ltYWdlX2RhdGFfc2V0KHNkLT5iYWNraW5nX3N0b3JlLCBwaXhlbHMpOworICAgIGV2YXNfb2Jq
ZWN0X2ltYWdlX2RhdGFfc2V0KHNtYXJ0RGF0YS0+YmFja2luZ19zdG9yZSwgcGl4ZWxzKTsKIAog
ICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLXN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3Np
bmdsZV9zbWFydF9yZXBhaW50c19wcm9jZXNzKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkKQorc3Rh
dGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0X3JlcGFpbnRzX3Byb2Nlc3MoRXdr
X1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhKQogewogICAgIEV3a19WaWV3X1BhaW50X0NvbnRl
eHQqIGN0eHQ7CiAgICAgRXZhc19Db29yZCBvdywgb2g7CkBAIC0zNzYsMTggKzM3NCwxOCBAQCBz
dGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19zaW5nbGVfc21hcnRfcmVwYWludHNfcHJvY2VzcyhF
d2tfVmlld19TbWFydF9EYXRhKiBzZAogICAgIHNpemVfdCBjb3VudDsKICAgICBFaW5hX0Jvb2wg
cmV0ID0gRUlOQV9UUlVFOwogCi0gICAgaWYgKHNkLT5hbmltYXRlZF96b29tLnpvb20uY3VycmVu
dCA8IDAuMDAwMDEpIHsKLSAgICAgICAgRXZhc19PYmplY3QqIGNsaXAgPSBldmFzX29iamVjdF9j
bGlwX2dldChzZC0+YmFja2luZ19zdG9yZSk7CisgICAgaWYgKHNtYXJ0RGF0YS0+YW5pbWF0ZWRf
em9vbS56b29tLmN1cnJlbnQgPCAwLjAwMDAxKSB7CisgICAgICAgIEV2YXNfT2JqZWN0KiBjbGlw
ID0gZXZhc19vYmplY3RfY2xpcF9nZXQoc21hcnREYXRhLT5iYWNraW5nX3N0b3JlKTsKICAgICAg
ICAgRXZhc19Db29yZCB3LCBoLCBjdywgY2g7CiAgICAgICAgIC8vIHJlc2V0IGVmZmVjdHMgb2Yg
em9vbV93ZWFrX3NldCgpCiAgICAgICAgIGV2YXNfb2JqZWN0X2ltYWdlX2ZpbGxfc2V0Ci0gICAg
ICAgICAgICAoc2QtPmJhY2tpbmdfc3RvcmUsIDAsIDAsIHNkLT52aWV3LncsIHNkLT52aWV3Lmgp
OwotICAgICAgICBldmFzX29iamVjdF9tb3ZlKGNsaXAsIHNkLT52aWV3LngsIHNkLT52aWV3Lnkp
OworICAgICAgICAgICAgKHNtYXJ0RGF0YS0+YmFja2luZ19zdG9yZSwgMCwgMCwgc21hcnREYXRh
LT52aWV3LncsIHNtYXJ0RGF0YS0+dmlldy5oKTsKKyAgICAgICAgZXZhc19vYmplY3RfbW92ZShj
bGlwLCBzbWFydERhdGEtPnZpZXcueCwgc21hcnREYXRhLT52aWV3LnkpOwogCi0gICAgICAgIHcg
PSBzZC0+dmlldy53OwotICAgICAgICBoID0gc2QtPnZpZXcuaDsKKyAgICAgICAgdyA9IHNtYXJ0
RGF0YS0+dmlldy53OworICAgICAgICBoID0gc21hcnREYXRhLT52aWV3Lmg7CiAKLSAgICAgICAg
ZXdrX2ZyYW1lX2NvbnRlbnRzX3NpemVfZ2V0KHNkLT5tYWluX2ZyYW1lLCAmY3csICZjaCk7Cisg
ICAgICAgIGV3a19mcmFtZV9jb250ZW50c19zaXplX2dldChzbWFydERhdGEtPm1haW5fZnJhbWUs
ICZjdywgJmNoKTsKICAgICAgICAgaWYgKHcgPiBjdykKICAgICAgICAgICAgIHcgPSBjdzsKICAg
ICAgICAgaWYgKGggPiBjaCkKQEAgLTM5NSw4ICszOTMsOCBAQCBzdGF0aWMgRWluYV9Cb29sIF9l
d2tfdmlld19zaW5nbGVfc21hcnRfcmVwYWludHNfcHJvY2VzcyhFd2tfVmlld19TbWFydF9EYXRh
KiBzZAogICAgICAgICBldmFzX29iamVjdF9yZXNpemUoY2xpcCwgdywgaCk7CiAgICAgfQogCi0g
ICAgcGl4ZWxzID0gZXZhc19vYmplY3RfaW1hZ2VfZGF0YV9nZXQoc2QtPmJhY2tpbmdfc3RvcmUs
IDEpOwotICAgIGV2YXNfb2JqZWN0X2ltYWdlX3NpemVfZ2V0KHNkLT5iYWNraW5nX3N0b3JlLCAm
b3csICZvaCk7CisgICAgcGl4ZWxzID0gZXZhc19vYmplY3RfaW1hZ2VfZGF0YV9nZXQoc21hcnRE
YXRhLT5iYWNraW5nX3N0b3JlLCAxKTsKKyAgICBldmFzX29iamVjdF9pbWFnZV9zaXplX2dldChz
bWFydERhdGEtPmJhY2tpbmdfc3RvcmUsICZvdywgJm9oKTsKICAgICBmb3JtYXQgPSBDQUlST19G
T1JNQVRfQVJHQjMyOwogCiAgICAgc3VyZmFjZSA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRl
X2Zvcl9kYXRhCkBAIC00MTcsNyArNDE1LDcgQEAgc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdf
c2luZ2xlX3NtYXJ0X3JlcGFpbnRzX3Byb2Nlc3MoRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QKICAg
ICAgICAgZ290byBlcnJvcl9jYWlybzsKICAgICB9CiAKLSAgICBjdHh0ID0gZXdrX3ZpZXdfcGFp
bnRfY29udGV4dF9uZXcoc2QtPl9wcml2LCBjYWlybyk7CisgICAgY3R4dCA9IGV3a192aWV3X3Bh
aW50X2NvbnRleHRfbmV3KHNtYXJ0RGF0YS0+X3ByaXYsIGNhaXJvKTsKICAgICBpZiAoIWN0eHQp
IHsKICAgICAgICAgRVJSKCJjb3VsZCBub3QgY3JlYXRlIHBhaW50IGNvbnRleHQiKTsKICAgICAg
ICAgcmV0ID0gRUlOQV9GQUxTRTsKQEAgLTQzMSw3ICs0MjksNyBAQCBzdGF0aWMgRWluYV9Cb29s
IF9ld2tfdmlld19zaW5nbGVfc21hcnRfcmVwYWludHNfcHJvY2VzcyhFd2tfVmlld19TbWFydF9E
YXRhKiBzZAogICAgICAgICBnb3RvIGVycm9yX3RpbGVyOwogICAgIH0KIAotICAgIHByID0gZXdr
X3ZpZXdfcmVwYWludHNfZ2V0KHNkLT5fcHJpdiwgJmNvdW50KTsKKyAgICBwciA9IGV3a192aWV3
X3JlcGFpbnRzX2dldChzbWFydERhdGEtPl9wcml2LCAmY291bnQpOwogICAgIHByX2VuZCA9IHBy
ICsgY291bnQ7CiAgICAgZm9yICg7IHByIDwgcHJfZW5kOyBwcisrKQogICAgICAgICBlaW5hX3Rp
bGVyX3JlY3RfYWRkKHRpbGVyLCBwcik7CkBAIC00NDMsMTAgKzQ0MSwxMCBAQCBzdGF0aWMgRWlu
YV9Cb29sIF9ld2tfdmlld19zaW5nbGVfc21hcnRfcmVwYWludHNfcHJvY2VzcyhFd2tfVmlld19T
bWFydF9EYXRhKiBzZAogICAgICAgICBnb3RvIGVycm9yX2l0ZXJhdG9yOwogICAgIH0KIAotICAg
IGV3a192aWV3X2xheW91dF9pZl9uZWVkZWRfcmVjdXJzaXZlKHNkLT5fcHJpdik7CisgICAgZXdr
X3ZpZXdfbGF5b3V0X2lmX25lZWRlZF9yZWN1cnNpdmUoc21hcnREYXRhLT5fcHJpdik7CiAKICAg
ICBpbnQgc3gsIHN5OwotICAgIGV3a19mcmFtZV9zY3JvbGxfcG9zX2dldChzZC0+bWFpbl9mcmFt
ZSwgJnN4LCAmc3kpOworICAgIGV3a19mcmFtZV9zY3JvbGxfcG9zX2dldChzbWFydERhdGEtPm1h
aW5fZnJhbWUsICZzeCwgJnN5KTsKIAogICAgIEVJTkFfSVRFUkFUT1JfRk9SRUFDSChpdHIsIHIp
IHsKICAgICAgICAgRWluYV9SZWN0YW5nbGUgc2Nyb2xsZWRfcmVjdCA9IHsKQEAgLTQ2NCw3ICs0
NjIsNyBAQCBzdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19zaW5nbGVfc21hcnRfcmVwYWludHNf
cHJvY2VzcyhFd2tfVmlld19TbWFydF9EYXRhKiBzZAogCiAgICAgICAgIGV3a192aWV3X3BhaW50
X2NvbnRleHRfcmVzdG9yZShjdHh0KTsKICAgICAgICAgZXZhc19vYmplY3RfaW1hZ2VfZGF0YV91
cGRhdGVfYWRkCi0gICAgICAgICAgICAoc2QtPmJhY2tpbmdfc3RvcmUsIHItPngsIHItPnksIHIt
PncsIHItPmgpOworICAgICAgICAgICAgKHNtYXJ0RGF0YS0+YmFja2luZ19zdG9yZSwgci0+eCwg
ci0+eSwgci0+dywgci0+aCk7CiAgICAgfQogICAgIGVpbmFfaXRlcmF0b3JfZnJlZShpdHIpOwog
CkBAIC00NzcsNTYgKzQ3NSw1NiBAQCBlcnJvcl9wYWludF9jb250ZXh0OgogZXJyb3JfY2Fpcm86
CiAgICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95KHN1cmZhY2UpOwogZXJyb3JfY2Fpcm9fc3VyZmFj
ZToKLSAgICBldmFzX29iamVjdF9pbWFnZV9kYXRhX3NldChzZC0+YmFja2luZ19zdG9yZSwgcGl4
ZWxzKTsgLyogZGVjIHJlZmNvdW50ICovCisgICAgZXZhc19vYmplY3RfaW1hZ2VfZGF0YV9zZXQo
c21hcnREYXRhLT5iYWNraW5nX3N0b3JlLCBwaXhlbHMpOyAvKiBkZWMgcmVmY291bnQgKi8KIAog
ICAgIHJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3NpbmdsZV9z
bWFydF96b29tX3dlYWtfc2V0KEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkLCBmbG9hdCB6b29tLCBF
dmFzX0Nvb3JkIGN4LCBFdmFzX0Nvb3JkIGN5KQorc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdf
c2luZ2xlX3NtYXJ0X3pvb21fd2Vha19zZXQoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRh
LCBmbG9hdCB6b29tLCBFdmFzX0Nvb3JkIGNlbnRlclgsIEV2YXNfQ29vcmQgY2VudGVyWSkKIHsK
ICAgICAvLyBUT0RPOiByZXZpZXcKLSAgICBmbG9hdCBzY2FsZSA9IHpvb20gLyBzZC0+YW5pbWF0
ZWRfem9vbS56b29tLnN0YXJ0OwotICAgIEV2YXNfQ29vcmQgdyA9IHNkLT52aWV3LncgKiBzY2Fs
ZTsKLSAgICBFdmFzX0Nvb3JkIGggPSBzZC0+dmlldy5oICogc2NhbGU7CisgICAgZmxvYXQgc2Nh
bGUgPSB6b29tIC8gc21hcnREYXRhLT5hbmltYXRlZF96b29tLnpvb20uc3RhcnQ7CisgICAgRXZh
c19Db29yZCB3ID0gc21hcnREYXRhLT52aWV3LncgKiBzY2FsZTsKKyAgICBFdmFzX0Nvb3JkIGgg
PSBzbWFydERhdGEtPnZpZXcuaCAqIHNjYWxlOwogICAgIEV2YXNfQ29vcmQgZHgsIGR5LCBjdywg
Y2g7Ci0gICAgRXZhc19PYmplY3QqIGNsaXAgPSBldmFzX29iamVjdF9jbGlwX2dldChzZC0+YmFj
a2luZ19zdG9yZSk7CisgICAgRXZhc19PYmplY3QqIGNsaXAgPSBldmFzX29iamVjdF9jbGlwX2dl
dChzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUpOwogCi0gICAgZXdrX2ZyYW1lX2NvbnRlbnRzX3Np
emVfZ2V0KHNkLT5tYWluX2ZyYW1lLCAmY3csICZjaCk7Ci0gICAgaWYgKHNkLT52aWV3LncgPiAw
ICYmIHNkLT52aWV3LmggPiAwKSB7Ci0gICAgICAgIGR4ID0gKHcgKiAoc2QtPnZpZXcudyAtIGN4
KSkgLyBzZC0+dmlldy53OwotICAgICAgICBkeSA9IChoICogKHNkLT52aWV3LmggLSBjeSkpIC8g
c2QtPnZpZXcuaDsKKyAgICBld2tfZnJhbWVfY29udGVudHNfc2l6ZV9nZXQoc21hcnREYXRhLT5t
YWluX2ZyYW1lLCAmY3csICZjaCk7CisgICAgaWYgKHNtYXJ0RGF0YS0+dmlldy53ID4gMCAmJiBz
bWFydERhdGEtPnZpZXcuaCA+IDApIHsKKyAgICAgICAgZHggPSAodyAqIChzbWFydERhdGEtPnZp
ZXcudyAtIGNlbnRlclgpKSAvIHNtYXJ0RGF0YS0+dmlldy53OworICAgICAgICBkeSA9IChoICog
KHNtYXJ0RGF0YS0+dmlldy5oIC0gY2VudGVyWSkpIC8gc21hcnREYXRhLT52aWV3Lmg7CiAgICAg
fSBlbHNlIHsKICAgICAgICAgZHggPSAwOwogICAgICAgICBkeSA9IDA7CiAgICAgfQogCi0gICAg
ZXZhc19vYmplY3RfaW1hZ2VfZmlsbF9zZXQoc2QtPmJhY2tpbmdfc3RvcmUsIGN4ICsgZHgsIGN5
ICsgZHksIHcsIGgpOworICAgIGV2YXNfb2JqZWN0X2ltYWdlX2ZpbGxfc2V0KHNtYXJ0RGF0YS0+
YmFja2luZ19zdG9yZSwgY2VudGVyWCArIGR4LCBjZW50ZXJZICsgZHksIHcsIGgpOwogCi0gICAg
aWYgKHNkLT52aWV3LncgPiAwICYmIHNkLT52aWV3LmggPiAwKSB7Ci0gICAgICAgIGR4ID0gKChz
ZC0+dmlldy53IC0gdykgKiBjeCkgLyBzZC0+dmlldy53OwotICAgICAgICBkeSA9ICgoc2QtPnZp
ZXcuaCAtIGgpICogY3kpIC8gc2QtPnZpZXcuaDsKKyAgICBpZiAoc21hcnREYXRhLT52aWV3Lncg
PiAwICYmIHNtYXJ0RGF0YS0+dmlldy5oID4gMCkgeworICAgICAgICBkeCA9ICgoc21hcnREYXRh
LT52aWV3LncgLSB3KSAqIGNlbnRlclgpIC8gc21hcnREYXRhLT52aWV3Lnc7CisgICAgICAgIGR5
ID0gKChzbWFydERhdGEtPnZpZXcuaCAtIGgpICogY2VudGVyWSkgLyBzbWFydERhdGEtPnZpZXcu
aDsKICAgICB9IGVsc2UgewogICAgICAgICBkeCA9IDA7CiAgICAgICAgIGR5ID0gMDsKICAgICB9
Ci0gICAgZXZhc19vYmplY3RfbW92ZShjbGlwLCBzZC0+dmlldy54ICsgZHgsIHNkLT52aWV3Lnkg
KyBkeSk7CisgICAgZXZhc19vYmplY3RfbW92ZShjbGlwLCBzbWFydERhdGEtPnZpZXcueCArIGR4
LCBzbWFydERhdGEtPnZpZXcueSArIGR5KTsKIAotICAgIGlmIChjdyA8IHNkLT52aWV3LncpCisg
ICAgaWYgKGN3IDwgc21hcnREYXRhLT52aWV3LncpCiAgICAgICAgIHcgPSBjdyAqIHNjYWxlOwot
ICAgIGlmIChjaCA8IHNkLT52aWV3LmgpCisgICAgaWYgKGNoIDwgc21hcnREYXRhLT52aWV3Lmgp
CiAgICAgICAgIGggPSBjaCAqIHNjYWxlOwogICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShjbGlwLCB3
LCBoKTsKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi1zdGF0aWMgdm9pZCBfZXdrX3ZpZXdf
c2luZ2xlX3NtYXJ0X3pvb21fd2Vha19zbW9vdGhfc2NhbGVfc2V0KEV3a19WaWV3X1NtYXJ0X0Rh
dGEqIHNkLCBFaW5hX0Jvb2wgc21vb3RoX3NjYWxlKQorc3RhdGljIHZvaWQgX2V3a192aWV3X3Np
bmdsZV9zbWFydF96b29tX3dlYWtfc21vb3RoX3NjYWxlX3NldChFd2tfVmlld19TbWFydF9EYXRh
KiBzbWFydERhdGEsIEVpbmFfQm9vbCBzbW9vdGhfc2NhbGUpCiB7Ci0gICAgZXZhc19vYmplY3Rf
aW1hZ2Vfc21vb3RoX3NjYWxlX3NldChzZC0+YmFja2luZ19zdG9yZSwgc21vb3RoX3NjYWxlKTsK
KyAgICBldmFzX29iamVjdF9pbWFnZV9zbW9vdGhfc2NhbGVfc2V0KHNtYXJ0RGF0YS0+YmFja2lu
Z19zdG9yZSwgc21vb3RoX3NjYWxlKTsKIH0KIAotc3RhdGljIHZvaWQgX2V3a192aWV3X3Npbmds
ZV9zbWFydF9iZ19jb2xvcl9zZXQoRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QsIHVuc2lnbmVkIGNo
YXIgciwgdW5zaWduZWQgY2hhciBnLCB1bnNpZ25lZCBjaGFyIGIsIHVuc2lnbmVkIGNoYXIgYSkK
K3N0YXRpYyB2b2lkIF9ld2tfdmlld19zaW5nbGVfc21hcnRfYmdfY29sb3Jfc2V0KEV3a19WaWV3
X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSwgdW5zaWduZWQgY2hhciByZWQsIHVuc2lnbmVkIGNoYXIg
Z3JlZW4sIHVuc2lnbmVkIGNoYXIgYmx1ZSwgdW5zaWduZWQgY2hhciBhbHBoYSkKIHsKLSAgICBl
dmFzX29iamVjdF9pbWFnZV9hbHBoYV9zZXQoc2QtPmJhY2tpbmdfc3RvcmUsIGEgPCAyNTUpOwor
ICAgIGV2YXNfb2JqZWN0X2ltYWdlX2FscGhhX3NldChzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUs
IGFscGhhIDwgMjU1KTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3NpbmdsZV9zbWFydF9zZXQo
RXdrX1ZpZXdfU21hcnRfQ2xhc3MqIGFwaSkKQEAgLTU2Myw3ICs1NjEsNyBAQCBzdGF0aWMgaW5s
aW5lIEV2YXNfU21hcnQqIF9ld2tfdmlld19zaW5nbGVfc21hcnRfY2xhc3NfbmV3KHZvaWQpCiAg
ICAgcmV0dXJuIHNtYXJ0OwogfQogCi1FdmFzX09iamVjdCogZXdrX3ZpZXdfc2luZ2xlX2FkZChF
dmFzKiBlKQorRXZhc19PYmplY3QqIGV3a192aWV3X3NpbmdsZV9hZGQoRXZhcyogY2FudmFzKQog
ewotICAgIHJldHVybiBldmFzX29iamVjdF9zbWFydF9hZGQoZSwgX2V3a192aWV3X3NpbmdsZV9z
bWFydF9jbGFzc19uZXcoKSk7CisgICAgcmV0dXJuIGV2YXNfb2JqZWN0X3NtYXJ0X2FkZChjYW52
YXMsIF9ld2tfdmlld19zaW5nbGVfc21hcnRfY2xhc3NfbmV3KCkpOwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9lZmwvZXdrL2V3a192aWV3X3RpbGVkLmNwcCBiL1NvdXJjZS9XZWJLaXQv
ZWZsL2V3ay9ld2tfdmlld190aWxlZC5jcHAKaW5kZXggZjg3ZjQ4YmQ5ZmEzNDBlMGIzNDY5MjEw
NmFlNGRjMjVlYjU5YzVlOS4uMmEwNDVhMDdkYTFjMmYxODc4MTRiYTE2ODZlNjZlMWUwNTQyODk2
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a192aWV3X3RpbGVkLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXdfdGlsZWQuY3BwCkBAIC0zMCw0OCAr
MzAsNDggQEAKIAogc3RhdGljIEV3a19WaWV3X1NtYXJ0X0NsYXNzIF9wYXJlbnRfc2MgPSBFV0tf
VklFV19TTUFSVF9DTEFTU19JTklUX05VTEw7CiAKLXN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3
X3RpbGVkX3JlbmRlcl9jYih2b2lkKiBkYXRhLCBFd2tfVGlsZSogdCwgY29uc3QgRWluYV9SZWN0
YW5nbGUqIGFyZWEpCitzdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld190aWxlZF9yZW5kZXJfY2Io
dm9pZCogZGF0YSwgRXdrX1RpbGUqIHRpbGUsIGNvbnN0IEVpbmFfUmVjdGFuZ2xlKiBhcmVhKQog
ewogICAgIEV3a19WaWV3X1ByaXZhdGVfRGF0YSogcHJpdiA9IHN0YXRpY19jYXN0PEV3a19WaWV3
X1ByaXZhdGVfRGF0YSo+KGRhdGEpOwotICAgIEVpbmFfUmVjdGFuZ2xlIHIgPSB7YXJlYS0+eCAr
IHQtPngsIGFyZWEtPnkgKyB0LT55LCBhcmVhLT53LCBhcmVhLT5ofTsKKyAgICBFaW5hX1JlY3Rh
bmdsZSByZWN0ID0ge2FyZWEtPnggKyB0aWxlLT54LCBhcmVhLT55ICsgdGlsZS0+eSwgYXJlYS0+
dywgYXJlYS0+aH07CiAKLSAgICByZXR1cm4gZXdrX3ZpZXdfcGFpbnRfY29udGVudHMocHJpdiwg
dC0+Y2Fpcm8sICZyKTsKKyAgICByZXR1cm4gZXdrX3ZpZXdfcGFpbnRfY29udGVudHMocHJpdiwg
dGlsZS0+Y2Fpcm8sICZyZWN0KTsKIH0KIAotc3RhdGljIHZvaWQqIF9ld2tfdmlld190aWxlZF91
cGRhdGVzX3Byb2Nlc3NfcHJlKHZvaWQqIGRhdGEsIEV2YXNfT2JqZWN0KiBvKQorc3RhdGljIHZv
aWQqIF9ld2tfdmlld190aWxlZF91cGRhdGVzX3Byb2Nlc3NfcHJlKHZvaWQqIGRhdGEsIEV2YXNf
T2JqZWN0KiBld2tUaWxlKQogewogICAgIEV3a19WaWV3X1ByaXZhdGVfRGF0YSogcHJpdiA9IHN0
YXRpY19jYXN0PEV3a19WaWV3X1ByaXZhdGVfRGF0YSo+KGRhdGEpOwogICAgIGV3a192aWV3X2xh
eW91dF9pZl9uZWVkZWRfcmVjdXJzaXZlKHByaXYpOwogICAgIHJldHVybiAwOwogfQogCi1zdGF0
aWMgRXZhc19PYmplY3QqIF9ld2tfdmlld190aWxlZF9zbWFydF9iYWNraW5nX3N0b3JlX2FkZChF
d2tfVmlld19TbWFydF9EYXRhKiBzZCkKK3N0YXRpYyBFdmFzX09iamVjdCogX2V3a192aWV3X3Rp
bGVkX3NtYXJ0X2JhY2tpbmdfc3RvcmVfYWRkKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0
YSkKIHsKLSAgICBFdmFzX09iamVjdCogYnMgPSBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9hZGQo
c2QtPmJhc2UuZXZhcyk7CisgICAgRXZhc19PYmplY3QqIGJzID0gZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfYWRkKHNtYXJ0RGF0YS0+YmFzZS5ldmFzKTsKICAgICBld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9yZW5kZXJfY2Jfc2V0Ci0gICAgICAgIChicywgX2V3a192aWV3X3RpbGVkX3JlbmRlcl9j
Yiwgc2QtPl9wcml2KTsKKyAgICAgICAgKGJzLCBfZXdrX3ZpZXdfdGlsZWRfcmVuZGVyX2NiLCBz
bWFydERhdGEtPl9wcml2KTsKICAgICBld2tfdGlsZWRfYmFja2luZ19zdG9yZV91cGRhdGVzX3By
b2Nlc3NfcHJlX3NldAotICAgICAgICAoYnMsIF9ld2tfdmlld190aWxlZF91cGRhdGVzX3Byb2Nl
c3NfcHJlLCBzZC0+X3ByaXYpOworICAgICAgICAoYnMsIF9ld2tfdmlld190aWxlZF91cGRhdGVz
X3Byb2Nlc3NfcHJlLCBzbWFydERhdGEtPl9wcml2KTsKICAgICByZXR1cm4gYnM7CiB9CiAKIHN0
YXRpYyB2b2lkCi1fZXdrX3ZpZXdfdGlsZWRfY29udGVudHNfc2l6ZV9jaGFuZ2VkX2NiKHZvaWQq
IGRhdGEsIEV2YXNfT2JqZWN0KiBvLCB2b2lkKiBldmVudF9pbmZvKQorX2V3a192aWV3X3RpbGVk
X2NvbnRlbnRzX3NpemVfY2hhbmdlZF9jYih2b2lkKiBkYXRhLCBFdmFzX09iamVjdCogZXdrVGls
ZSwgdm9pZCogZXZlbnRJbmZvKQogewotICAgIEV2YXNfQ29vcmQqIHNpemUgPSBzdGF0aWNfY2Fz
dDxFdmFzX0Nvb3JkKj4oZXZlbnRfaW5mbyk7Ci0gICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc2Qg
PSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZGF0YSk7CisgICAgRXZhc19Db29y
ZCogc2l6ZSA9IHN0YXRpY19jYXN0PEV2YXNfQ29vcmQqPihldmVudEluZm8pOworICAgIEV3a19W
aWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0Rh
dGEqPihkYXRhKTsKIAogICAgIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX2NvbnRlbnRzX3Jlc2l6
ZQotICAgICAgICAoc2QtPmJhY2tpbmdfc3RvcmUsIHNpemVbMF0sIHNpemVbMV0pOworICAgICAg
ICAoc21hcnREYXRhLT5iYWNraW5nX3N0b3JlLCBzaXplWzBdLCBzaXplWzFdKTsKIH0KIAotc3Rh
dGljIHZvaWQgX2V3a192aWV3X3RpbGVkX3NtYXJ0X2FkZChFdmFzX09iamVjdCogbykKK3N0YXRp
YyB2b2lkIF9ld2tfdmlld190aWxlZF9zbWFydF9hZGQoRXZhc19PYmplY3QqIGV3a1RpbGUpCiB7
CiAgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc2Q7CiAKLSAgICBfcGFyZW50X3NjLnNjLmFkZChv
KTsKKyAgICBfcGFyZW50X3NjLnNjLmFkZChld2tUaWxlKTsKIAotICAgIHNkID0gc3RhdGljX2Nh
c3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGV2YXNfb2JqZWN0X3NtYXJ0X2RhdGFfZ2V0KG8pKTsK
KyAgICBzZCA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihldmFzX29iamVjdF9z
bWFydF9kYXRhX2dldChld2tUaWxlKSk7CiAgICAgaWYgKCFzZCkKICAgICAgICAgcmV0dXJuOwog
CkBAIC04MSwyMSArODEsMjEgQEAgc3RhdGljIHZvaWQgX2V3a192aWV3X3RpbGVkX3NtYXJ0X2Fk
ZChFdmFzX09iamVjdCogbykKICAgICBld2tfZnJhbWVfcGFpbnRfZnVsbF9zZXQoc2QtPm1haW5f
ZnJhbWUsIEVJTkFfVFJVRSk7CiB9CiAKLXN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3RpbGVk
X3NtYXJ0X3Njcm9sbHNfcHJvY2VzcyhFd2tfVmlld19TbWFydF9EYXRhKiBzZCkKK3N0YXRpYyBF
aW5hX0Jvb2wgX2V3a192aWV3X3RpbGVkX3NtYXJ0X3Njcm9sbHNfcHJvY2VzcyhFd2tfVmlld19T
bWFydF9EYXRhKiBzbWFydERhdGEpCiB7CiAgICAgY29uc3QgRXdrX1Njcm9sbF9SZXF1ZXN0KiBz
cjsKICAgICBjb25zdCBFd2tfU2Nyb2xsX1JlcXVlc3QqIHNyX2VuZDsKICAgICBzaXplX3QgY291
bnQ7CiAgICAgRXZhc19Db29yZCB2dywgdmg7CiAKLSAgICBld2tfZnJhbWVfY29udGVudHNfc2l6
ZV9nZXQoc2QtPm1haW5fZnJhbWUsICZ2dywgJnZoKTsKKyAgICBld2tfZnJhbWVfY29udGVudHNf
c2l6ZV9nZXQoc21hcnREYXRhLT5tYWluX2ZyYW1lLCAmdncsICZ2aCk7CiAKLSAgICBzciA9IGV3
a192aWV3X3Njcm9sbF9yZXF1ZXN0c19nZXQoc2QtPl9wcml2LCAmY291bnQpOworICAgIHNyID0g
ZXdrX3ZpZXdfc2Nyb2xsX3JlcXVlc3RzX2dldChzbWFydERhdGEtPl9wcml2LCAmY291bnQpOwog
ICAgIHNyX2VuZCA9IHNyICsgY291bnQ7CiAgICAgZm9yICg7IHNyIDwgc3JfZW5kOyBzcisrKSB7
CiAgICAgICAgIGlmIChzci0+bWFpbl9zY3JvbGwpCiAgICAgICAgICAgICBld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9zY3JvbGxfZnVsbF9vZmZzZXRfYWRkCi0gICAgICAgICAgICAgICAgKHNkLT5i
YWNraW5nX3N0b3JlLCBzci0+ZHgsIHNyLT5keSk7CisgICAgICAgICAgICAgICAgKHNtYXJ0RGF0
YS0+YmFja2luZ19zdG9yZSwgc3ItPmR4LCBzci0+ZHkpOwogICAgICAgICBlbHNlIHsKICAgICAg
ICAgICAgIEV2YXNfQ29vcmQgc3gsIHN5LCBzdywgc2g7CiAKQEAgLTEwOCw3ICsxMDgsNyBAQCBz
dGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld190aWxlZF9zbWFydF9zY3JvbGxzX3Byb2Nlc3MoRXdr
X1ZpZXdfU21hcnRfRGF0YSogc2QpCiAgICAgICAgICAgICAgICAgLyogZG91YnQgd2Via2l0IHdv
dWxkIGJlIHNvICAgICBzdHVwaWQuLi4gKi8KICAgICAgICAgICAgICAgICBEQkcoImZ1bGwgcGFn
ZSBzY3JvbGwgJSswM2QsJSswM2QuIGNvbnZlcnQgdG8gcmVwYWludCAlZCwlZCArICVkeCVkIiwK
ICAgICAgICAgICAgICAgICAgICAgc3ItPmR4LCBzci0+ZHksIHN4LCBzeSwgc3csIHNoKTsKLSAg
ICAgICAgICAgICAgICBld2tfdmlld19yZXBhaW50X2FkZChzZC0+X3ByaXYsIHN4LCBzeSwgc3cs
IHNoKTsKKyAgICAgICAgICAgICAgICBld2tfdmlld19yZXBhaW50X2FkZChzbWFydERhdGEtPl9w
cml2LCBzeCwgc3ksIHN3LCBzaCk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
ICAgICB9CiAKQEAgLTEyOSw3ICsxMjksNyBAQCBzdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld190
aWxlZF9zbWFydF9zY3JvbGxzX3Byb2Nlc3MoRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QpCiAgICAg
ICAgICAgICBzeSAtPSBhYnMoc3ItPmR5KTsKICAgICAgICAgICAgIHN3ICs9IGFicyhzci0+ZHgp
OwogICAgICAgICAgICAgc2ggKz0gYWJzKHNyLT5keSk7Ci0gICAgICAgICAgICBld2tfdmlld19y
ZXBhaW50X2FkZChzZC0+X3ByaXYsIHN4LCBzeSwgc3csIHNoKTsKKyAgICAgICAgICAgIGV3a192
aWV3X3JlcGFpbnRfYWRkKHNtYXJ0RGF0YS0+X3ByaXYsIHN4LCBzeSwgc3csIHNoKTsKICAgICAg
ICAgICAgIElORigidXNpbmcgcmVwYWludCBmb3IgaW5uZXIgZnJhbWUgc2NvbGxpbmchIik7CiAg
ICAgICAgIH0KICAgICB9CkBAIC0xMzcsMTUgKzEzNywxNSBAQCBzdGF0aWMgRWluYV9Cb29sIF9l
d2tfdmlld190aWxlZF9zbWFydF9zY3JvbGxzX3Byb2Nlc3MoRXdrX1ZpZXdfU21hcnRfRGF0YSog
c2QpCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotc3RhdGljIEVpbmFfQm9vbCBfZXdrX3Zp
ZXdfdGlsZWRfc21hcnRfcmVwYWludHNfcHJvY2VzcyhFd2tfVmlld19TbWFydF9EYXRhKiBzZCkK
K3N0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3RpbGVkX3NtYXJ0X3JlcGFpbnRzX3Byb2Nlc3Mo
RXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhKQogewogICAgIGNvbnN0IEVpbmFfUmVjdGFu
Z2xlKiBwciwgKiBwcl9lbmQ7CiAgICAgc2l6ZV90IGNvdW50OwogICAgIGludCBzeCwgc3k7CiAK
LSAgICBld2tfZnJhbWVfc2Nyb2xsX3Bvc19nZXQoc2QtPm1haW5fZnJhbWUsICZzeCwgJnN5KTsK
KyAgICBld2tfZnJhbWVfc2Nyb2xsX3Bvc19nZXQoc21hcnREYXRhLT5tYWluX2ZyYW1lLCAmc3gs
ICZzeSk7CiAKLSAgICBwciA9IGV3a192aWV3X3JlcGFpbnRzX2dldChzZC0+X3ByaXYsICZjb3Vu
dCk7CisgICAgcHIgPSBld2tfdmlld19yZXBhaW50c19nZXQoc21hcnREYXRhLT5fcHJpdiwgJmNv
dW50KTsKICAgICBwcl9lbmQgPSBwciArIGNvdW50OwogICAgIGZvciAoOyBwciA8IHByX2VuZDsg
cHIrKykgewogICAgICAgICBFaW5hX1JlY3RhbmdsZSByOwpAQCAtMTUzLDgwICsxNTMsODAgQEAg
c3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfdGlsZWRfc21hcnRfcmVwYWludHNfcHJvY2VzcyhF
d2tfVmlld19TbWFydF9EYXRhKiBzZCkKICAgICAgICAgci55ID0gcHItPnkgKyBzeTsKICAgICAg
ICAgci53ID0gcHItPnc7CiAgICAgICAgIHIuaCA9IHByLT5oOwotICAgICAgICBld2tfdGlsZWRf
YmFja2luZ19zdG9yZV91cGRhdGUoc2QtPmJhY2tpbmdfc3RvcmUsICZyKTsKKyAgICAgICAgZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRlKHNtYXJ0RGF0YS0+YmFja2luZ19zdG9yZSwgJnIp
OwogICAgIH0KLSAgICBld2tfdGlsZWRfYmFja2luZ19zdG9yZV91cGRhdGVzX3Byb2Nlc3Moc2Qt
PmJhY2tpbmdfc3RvcmUpOworICAgIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3VwZGF0ZXNfcHJv
Y2VzcyhzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUpOwogCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsK
IH0KIAotc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfdGlsZWRfc21hcnRfY29udGVudHNfcmVz
aXplKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkLCBpbnQgdywgaW50IGgpCitzdGF0aWMgRWluYV9C
b29sIF9ld2tfdmlld190aWxlZF9zbWFydF9jb250ZW50c19yZXNpemUoRXdrX1ZpZXdfU21hcnRf
RGF0YSogc21hcnREYXRhLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCiB7Ci0gICAgZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfY29udGVudHNfcmVzaXplKHNkLT5iYWNraW5nX3N0b3JlLCB3LCBoKTsK
KyAgICBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9jb250ZW50c19yZXNpemUoc21hcnREYXRhLT5i
YWNraW5nX3N0b3JlLCB3aWR0aCwgaGVpZ2h0KTsKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQog
Ci1zdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld190aWxlZF9zbWFydF96b29tX3NldChFd2tfVmll
d19TbWFydF9EYXRhKiBzZCwgZmxvYXQgem9vbSwgRXZhc19Db29yZCBjeCwgRXZhc19Db29yZCBj
eSkKK3N0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3RpbGVkX3NtYXJ0X3pvb21fc2V0KEV3a19W
aWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSwgZmxvYXQgem9vbSwgRXZhc19Db29yZCBjZW50ZXJY
LCBFdmFzX0Nvb3JkIGNlbnRlclkpCiB7CiAgICAgRXZhc19Db29yZCB4LCB5LCB3LCBoOwogICAg
IEVpbmFfQm9vbCByOwotICAgIHIgPSBld2tfdGlsZWRfYmFja2luZ19zdG9yZV96b29tX3NldChz
ZC0+YmFja2luZ19zdG9yZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJnpvb20sIGN4LCBjeSwgJngsICZ5KTsKKyAgICByID0gZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfem9vbV9zZXQoc21hcnREYXRhLT5iYWNraW5nX3N0b3JlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAmem9vbSwgY2VudGVyWCwgY2VudGVyWSwgJngsICZ5KTsK
ICAgICBpZiAoIXIpCiAgICAgICAgIHJldHVybiByOwotICAgIGV3a190aWxlZF9iYWNraW5nX3N0
b3JlX2Rpc2FibGVkX3VwZGF0ZV9zZXQoc2QtPmJhY2tpbmdfc3RvcmUsIEVJTkFfVFJVRSk7Ci0g
ICAgciA9IF9wYXJlbnRfc2Muem9vbV9zZXQoc2QsIHpvb20sIGN4LCBjeSk7Ci0gICAgZXdrX2Zy
YW1lX3Njcm9sbF9zZXQoc2QtPm1haW5fZnJhbWUsIC14LCAteSk7Ci0gICAgZXdrX2ZyYW1lX3Nj
cm9sbF9zaXplX2dldChzZC0+bWFpbl9mcmFtZSwgJncsICZoKTsKLSAgICBld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9maXhfb2Zmc2V0cyhzZC0+YmFja2luZ19zdG9yZSwgdywgaCk7Ci0gICAgZXdr
X3ZpZXdfc2Nyb2xsc19wcm9jZXNzKHNkKTsKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxjdWxh
dGUoc2QtPmJhY2tpbmdfc3RvcmUpOwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGN1bGF0ZShz
ZC0+c2VsZik7Ci0gICAgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZGlzYWJsZWRfdXBkYXRlX3Nl
dChzZC0+YmFja2luZ19zdG9yZSwgRUlOQV9GQUxTRSk7CisgICAgZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfZGlzYWJsZWRfdXBkYXRlX3NldChzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUsIEVJTkFf
VFJVRSk7CisgICAgciA9IF9wYXJlbnRfc2Muem9vbV9zZXQoc21hcnREYXRhLCB6b29tLCBjZW50
ZXJYLCBjZW50ZXJZKTsKKyAgICBld2tfZnJhbWVfc2Nyb2xsX3NldChzbWFydERhdGEtPm1haW5f
ZnJhbWUsIC14LCAteSk7CisgICAgZXdrX2ZyYW1lX3Njcm9sbF9zaXplX2dldChzbWFydERhdGEt
Pm1haW5fZnJhbWUsICZ3LCAmaCk7CisgICAgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZml4X29m
ZnNldHMoc21hcnREYXRhLT5iYWNraW5nX3N0b3JlLCB3LCBoKTsKKyAgICBld2tfdmlld19zY3Jv
bGxzX3Byb2Nlc3Moc21hcnREYXRhKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxjdWxhdGUo
c21hcnREYXRhLT5iYWNraW5nX3N0b3JlKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxjdWxh
dGUoc21hcnREYXRhLT5zZWxmKTsKKyAgICBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9kaXNhYmxl
ZF91cGRhdGVfc2V0KHNtYXJ0RGF0YS0+YmFja2luZ19zdG9yZSwgRUlOQV9GQUxTRSk7CiAgICAg
cmV0dXJuIHI7CiB9CiAKLXN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3RpbGVkX3NtYXJ0X3pv
b21fd2Vha19zZXQoRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QsIGZsb2F0IHpvb20sIEV2YXNfQ29v
cmQgY3gsIEV2YXNfQ29vcmQgY3kpCitzdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld190aWxlZF9z
bWFydF96b29tX3dlYWtfc2V0KEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSwgZmxvYXQg
em9vbSwgRXZhc19Db29yZCBjZW50ZXJYLCBFdmFzX0Nvb3JkIGNlbnRlclkpCiB7Ci0gICAgcmV0
dXJuIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3pvb21fd2Vha19zZXQoc2QtPmJhY2tpbmdfc3Rv
cmUsIHpvb20sIGN4LCBjeSk7CisgICAgcmV0dXJuIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3pv
b21fd2Vha19zZXQoc21hcnREYXRhLT5iYWNraW5nX3N0b3JlLCB6b29tLCBjZW50ZXJYLCBjZW50
ZXJZKTsKIH0KIAotc3RhdGljIHZvaWQgX2V3a192aWV3X3RpbGVkX3NtYXJ0X3pvb21fd2Vha19z
bW9vdGhfc2NhbGVfc2V0KEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkLCBFaW5hX0Jvb2wgc21vb3Ro
X3NjYWxlKQorc3RhdGljIHZvaWQgX2V3a192aWV3X3RpbGVkX3NtYXJ0X3pvb21fd2Vha19zbW9v
dGhfc2NhbGVfc2V0KEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSwgRWluYV9Cb29sIHNt
b290aFNjYWxlKQogewotICAgIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3pvb21fd2Vha19zbW9v
dGhfc2NhbGVfc2V0KHNkLT5iYWNraW5nX3N0b3JlLCBzbW9vdGhfc2NhbGUpOworICAgIGV3a190
aWxlZF9iYWNraW5nX3N0b3JlX3pvb21fd2Vha19zbW9vdGhfc2NhbGVfc2V0KHNtYXJ0RGF0YS0+
YmFja2luZ19zdG9yZSwgc21vb3RoU2NhbGUpOwogfQogCi1zdGF0aWMgdm9pZCBfZXdrX3ZpZXdf
dGlsZWRfc21hcnRfZmx1c2goRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QpCitzdGF0aWMgdm9pZCBf
ZXdrX3ZpZXdfdGlsZWRfc21hcnRfZmx1c2goRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRh
KQogewotICAgIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX2ZsdXNoKHNkLT5iYWNraW5nX3N0b3Jl
KTsKLSAgICBfcGFyZW50X3NjLmZsdXNoKHNkKTsKKyAgICBld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV9mbHVzaChzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUpOworICAgIF9wYXJlbnRfc2MuZmx1c2go
c21hcnREYXRhKTsKIH0KIAotc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfdGlsZWRfc21hcnRf
cHJlX3JlbmRlcl9yZWdpb24oRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QsIEV2YXNfQ29vcmQgeCwg
RXZhc19Db29yZCB5LCBFdmFzX0Nvb3JkIHcsIEV2YXNfQ29vcmQgaCwgZmxvYXQgem9vbSkKK3N0
YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3RpbGVkX3NtYXJ0X3ByZV9yZW5kZXJfcmVnaW9uKEV3
a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHks
IEV2YXNfQ29vcmQgd2lkdGgsIEV2YXNfQ29vcmQgaGVpZ2h0LCBmbG9hdCB6b29tKQogewogICAg
IHJldHVybiBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlZ2lvbgotICAgICAg
ICAgICAgICAgKHNkLT5iYWNraW5nX3N0b3JlLCB4LCB5LCB3LCBoLCB6b29tKTsKKyAgICAgICAg
ICAgICAgIChzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHpv
b20pOwogfQogCi1zdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld190aWxlZF9zbWFydF9wcmVfcmVu
ZGVyX3JlbGF0aXZlX3JhZGl1cyhFd2tfVmlld19TbWFydF9EYXRhKiBzZCwgdW5zaWduZWQgaW50
IG4sIGZsb2F0IHpvb20pCitzdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld190aWxlZF9zbWFydF9w
cmVfcmVuZGVyX3JlbGF0aXZlX3JhZGl1cyhFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEs
IHVuc2lnbmVkIGludCBuLCBmbG9hdCB6b29tKQogewogICAgIHJldHVybiBld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlbGF0aXZlX3JhZGl1cwotICAgICAgICAgICAgICAgKHNk
LT5iYWNraW5nX3N0b3JlLCBuLCB6b29tKTsKKyAgICAgICAgICAgICAgIChzbWFydERhdGEtPmJh
Y2tpbmdfc3RvcmUsIG4sIHpvb20pOwogfQogCi1zdGF0aWMgdm9pZCBfZXdrX3ZpZXdfdGlsZWRf
c21hcnRfcHJlX3JlbmRlcl9jYW5jZWwoRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QpCitzdGF0aWMg
dm9pZCBfZXdrX3ZpZXdfdGlsZWRfc21hcnRfcHJlX3JlbmRlcl9jYW5jZWwoRXdrX1ZpZXdfU21h
cnRfRGF0YSogc21hcnREYXRhKQogewotICAgIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9y
ZW5kZXJfY2FuY2VsKHNkLT5iYWNraW5nX3N0b3JlKTsKKyAgICBld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9wcmVfcmVuZGVyX2NhbmNlbChzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUpOwogfQogCi1z
dGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld190aWxlZF9zbWFydF9kaXNhYmxlX3JlbmRlcihFd2tf
Vmlld19TbWFydF9EYXRhKiBzZCkKK3N0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3RpbGVkX3Nt
YXJ0X2Rpc2FibGVfcmVuZGVyKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSkKIHsKLSAg
ICByZXR1cm4gZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZGlzYWJsZV9yZW5kZXIoc2QtPmJhY2tp
bmdfc3RvcmUpOworICAgIHJldHVybiBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9kaXNhYmxlX3Jl
bmRlcihzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUpOwogfQogCi1zdGF0aWMgRWluYV9Cb29sIF9l
d2tfdmlld190aWxlZF9zbWFydF9lbmFibGVfcmVuZGVyKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNk
KQorc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfdGlsZWRfc21hcnRfZW5hYmxlX3JlbmRlcihF
d2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEpCiB7Ci0gICAgcmV0dXJuIGV3a190aWxlZF9i
YWNraW5nX3N0b3JlX2VuYWJsZV9yZW5kZXIoc2QtPmJhY2tpbmdfc3RvcmUpOworICAgIHJldHVy
biBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9lbmFibGVfcmVuZGVyKHNtYXJ0RGF0YS0+YmFja2lu
Z19zdG9yZSk7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld190aWxlZF9zbWFydF9zZXQoRXdrX1Zp
ZXdfU21hcnRfQ2xhc3MqIGFwaSkKQEAgLTI2OCwyMSArMjY4LDIxIEBAIHN0YXRpYyBpbmxpbmUg
RXZhc19TbWFydCogX2V3a192aWV3X3RpbGVkX3NtYXJ0X2NsYXNzX25ldyh2b2lkKQogICAgIHJl
dHVybiBzbWFydDsKIH0KIAotRXZhc19PYmplY3QqIGV3a192aWV3X3RpbGVkX2FkZChFdmFzKiBl
KQorRXZhc19PYmplY3QqIGV3a192aWV3X3RpbGVkX2FkZChFdmFzKiBjYW52YXMpCiB7Ci0gICAg
cmV0dXJuIGV2YXNfb2JqZWN0X3NtYXJ0X2FkZChlLCBfZXdrX3ZpZXdfdGlsZWRfc21hcnRfY2xh
c3NfbmV3KCkpOworICAgIHJldHVybiBldmFzX29iamVjdF9zbWFydF9hZGQoY2FudmFzLCBfZXdr
X3ZpZXdfdGlsZWRfc21hcnRfY2xhc3NfbmV3KCkpOwogfQogCi1Fd2tfVGlsZV9VbnVzZWRfQ2Fj
aGUqIGV3a192aWV3X3RpbGVkX3VudXNlZF9jYWNoZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIG8p
CitFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIGV3a192aWV3X3RpbGVkX3VudXNlZF9jYWNoZV9nZXQo
Y29uc3QgRXZhc19PYmplY3QqIGV3a1RpbGUpCiB7Ci0gICAgRXdrX1ZpZXdfU21hcnRfRGF0YSog
c2QgPSBld2tfdmlld19zbWFydF9kYXRhX2dldChvKTsKKyAgICBFd2tfVmlld19TbWFydF9EYXRh
KiBzZCA9IGV3a192aWV3X3NtYXJ0X2RhdGFfZ2V0KGV3a1RpbGUpOwogICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOX1ZBTChzZCwgMCk7CiAgICAgcmV0dXJuIGV3a190aWxlZF9iYWNraW5n
X3N0b3JlX3RpbGVfdW51c2VkX2NhY2hlX2dldChzZC0+YmFja2luZ19zdG9yZSk7CiB9CiAKLXZv
aWQgZXdrX3ZpZXdfdGlsZWRfdW51c2VkX2NhY2hlX3NldChFdmFzX09iamVjdCogbywgRXdrX1Rp
bGVfVW51c2VkX0NhY2hlKiBjYWNoZSkKK3ZvaWQgZXdrX3ZpZXdfdGlsZWRfdW51c2VkX2NhY2hl
X3NldChFdmFzX09iamVjdCogZXdrVGlsZSwgRXdrX1RpbGVfVW51c2VkX0NhY2hlKiBjYWNoZSkK
IHsKLSAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzZCA9IGV3a192aWV3X3NtYXJ0X2RhdGFfZ2V0
KG8pOworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0gZXdrX3ZpZXdfc21hcnRfZGF0YV9n
ZXQoZXdrVGlsZSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QpOwogICAgIGV3
a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfdW51c2VkX2NhY2hlX3NldChzZC0+YmFja2luZ19z
dG9yZSwgY2FjaGUpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a193
aW5kb3dfZmVhdHVyZXMuY3BwIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a193aW5kb3dfZmVh
dHVyZXMuY3BwCmluZGV4IDgwOWQxZTg1MzFiZmQzM2Q2ZWU1NGEzNDQ0NDA2YTQ0YTlhZjY4NjAu
LjA5Y2YyN2I4NDg2YzZhZTI4NjhhYmYyMGQ0NDI1MGExZjVjOTYxMDAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfd2luZG93X2ZlYXR1cmVzLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2VmbC9ld2svZXdrX3dpbmRvd19mZWF0dXJlcy5jcHAKQEAgLTM1LDY1ICszNSw2NSBA
QCBzdHJ1Y3QgX0V3a19XaW5kb3dfRmVhdHVyZXMgewogICAgIFdlYkNvcmU6OldpbmRvd0ZlYXR1
cmVzKiBjb3JlOwogfTsKIAotdm9pZCBld2tfd2luZG93X2ZlYXR1cmVzX3VucmVmKEV3a19XaW5k
b3dfRmVhdHVyZXMqIHdpbmRvd19mZWF0dXJlcykKK3ZvaWQgZXdrX3dpbmRvd19mZWF0dXJlc191
bnJlZihFd2tfV2luZG93X0ZlYXR1cmVzKiB3aW5kb3dGZWF0dXJlcykKIHsKLSAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTih3aW5kb3dfZmVhdHVyZXMpOwotICAgIEVJTkFfU0FGRVRZX09O
X0ZBTFNFX1JFVFVSTih3aW5kb3dfZmVhdHVyZXMtPl9fcmVmID4gMCk7CisgICAgRUlOQV9TQUZF
VFlfT05fTlVMTF9SRVRVUk4od2luZG93RmVhdHVyZXMpOworICAgIEVJTkFfU0FGRVRZX09OX0ZB
TFNFX1JFVFVSTih3aW5kb3dGZWF0dXJlcy0+X19yZWYgPiAwKTsKIAotICAgIGlmICgtLXdpbmRv
d19mZWF0dXJlcy0+X19yZWYpCisgICAgaWYgKC0td2luZG93RmVhdHVyZXMtPl9fcmVmKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBkZWxldGUgd2luZG93X2ZlYXR1cmVzLT5jb3JlOwotICAgIHdp
bmRvd19mZWF0dXJlcy0+Y29yZSA9IDA7Ci0gICAgZnJlZSh3aW5kb3dfZmVhdHVyZXMpOworICAg
IGRlbGV0ZSB3aW5kb3dGZWF0dXJlcy0+Y29yZTsKKyAgICB3aW5kb3dGZWF0dXJlcy0+Y29yZSA9
IDA7CisgICAgZnJlZSh3aW5kb3dGZWF0dXJlcyk7CiB9CiAKLXZvaWQgZXdrX3dpbmRvd19mZWF0
dXJlc19yZWYoRXdrX1dpbmRvd19GZWF0dXJlcyogd2luZG93X2ZlYXR1cmVzKQordm9pZCBld2tf
d2luZG93X2ZlYXR1cmVzX3JlZihFd2tfV2luZG93X0ZlYXR1cmVzKiB3aW5kb3dGZWF0dXJlcykK
IHsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih3aW5kb3dfZmVhdHVyZXMpOwotICAg
IHdpbmRvd19mZWF0dXJlcy0+X19yZWYrKzsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
Tih3aW5kb3dGZWF0dXJlcyk7CisgICAgd2luZG93RmVhdHVyZXMtPl9fcmVmKys7CiB9CiAKLXZv
aWQgZXdrX3dpbmRvd19mZWF0dXJlc19ib29sX3Byb3BlcnR5X2dldChjb25zdCBFd2tfV2luZG93
X0ZlYXR1cmVzKiB3aW5kb3dfZmVhdHVyZXMsIEVpbmFfQm9vbCogdG9vbGJhcl92aXNpYmxlLCBF
aW5hX0Jvb2wqIHN0YXR1c2Jhcl92aXNpYmxlLCBFaW5hX0Jvb2wqIHNjcm9sbGJhcnNfdmlzaWJs
ZSwgRWluYV9Cb29sKiBtZW51YmFyX3Zpc2libGUsIEVpbmFfQm9vbCogbG9jYXRpb25iYXJfdmlz
aWJsZSwgRWluYV9Cb29sKiBmdWxsc2NyZWVuKQordm9pZCBld2tfd2luZG93X2ZlYXR1cmVzX2Jv
b2xfcHJvcGVydHlfZ2V0KGNvbnN0IEV3a19XaW5kb3dfRmVhdHVyZXMqIHdpbmRvd0ZlYXR1cmVz
LCBFaW5hX0Jvb2wqIHRvb2xiYXJWaXNpYmxlLCBFaW5hX0Jvb2wqIHN0YXR1c2JhclZpc2libGUs
IEVpbmFfQm9vbCogc2Nyb2xsYmFyc1Zpc2libGUsIEVpbmFfQm9vbCogbWVudWJhclZpc2libGUs
IEVpbmFfQm9vbCogbG9jYXRpb25iYXJWaXNpYmxlLCBFaW5hX0Jvb2wqIGZ1bGxTY3JlZW4pCiB7
Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4od2luZG93X2ZlYXR1cmVzKTsKLSAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih3aW5kb3dfZmVhdHVyZXMtPmNvcmUpOworICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHdpbmRvd0ZlYXR1cmVzKTsKKyAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTih3aW5kb3dGZWF0dXJlcy0+Y29yZSk7CiAKLSAgICBpZiAodG9vbGJh
cl92aXNpYmxlKQotICAgICAgICAqdG9vbGJhcl92aXNpYmxlID0gd2luZG93X2ZlYXR1cmVzLT5j
b3JlLT50b29sQmFyVmlzaWJsZTsKKyAgICBpZiAodG9vbGJhclZpc2libGUpCisgICAgICAgICp0
b29sYmFyVmlzaWJsZSA9IHdpbmRvd0ZlYXR1cmVzLT5jb3JlLT50b29sQmFyVmlzaWJsZTsKIAot
ICAgIGlmIChzdGF0dXNiYXJfdmlzaWJsZSkKLSAgICAgICAgKnN0YXR1c2Jhcl92aXNpYmxlID0g
d2luZG93X2ZlYXR1cmVzLT5jb3JlLT5zdGF0dXNCYXJWaXNpYmxlOworICAgIGlmIChzdGF0dXNi
YXJWaXNpYmxlKQorICAgICAgICAqc3RhdHVzYmFyVmlzaWJsZSA9IHdpbmRvd0ZlYXR1cmVzLT5j
b3JlLT5zdGF0dXNCYXJWaXNpYmxlOwogCi0gICAgaWYgKHNjcm9sbGJhcnNfdmlzaWJsZSkKLSAg
ICAgICAgKnNjcm9sbGJhcnNfdmlzaWJsZSA9IHdpbmRvd19mZWF0dXJlcy0+Y29yZS0+c2Nyb2xs
YmFyc1Zpc2libGU7CisgICAgaWYgKHNjcm9sbGJhcnNWaXNpYmxlKQorICAgICAgICAqc2Nyb2xs
YmFyc1Zpc2libGUgPSB3aW5kb3dGZWF0dXJlcy0+Y29yZS0+c2Nyb2xsYmFyc1Zpc2libGU7CiAK
LSAgICBpZiAobWVudWJhcl92aXNpYmxlKQotICAgICAgICAqbWVudWJhcl92aXNpYmxlID0gd2lu
ZG93X2ZlYXR1cmVzLT5jb3JlLT5tZW51QmFyVmlzaWJsZTsKKyAgICBpZiAobWVudWJhclZpc2li
bGUpCisgICAgICAgICptZW51YmFyVmlzaWJsZSA9IHdpbmRvd0ZlYXR1cmVzLT5jb3JlLT5tZW51
QmFyVmlzaWJsZTsKIAotICAgIGlmIChsb2NhdGlvbmJhcl92aXNpYmxlKQotICAgICAgICAqbG9j
YXRpb25iYXJfdmlzaWJsZSA9IHdpbmRvd19mZWF0dXJlcy0+Y29yZS0+bG9jYXRpb25CYXJWaXNp
YmxlOworICAgIGlmIChsb2NhdGlvbmJhclZpc2libGUpCisgICAgICAgICpsb2NhdGlvbmJhclZp
c2libGUgPSB3aW5kb3dGZWF0dXJlcy0+Y29yZS0+bG9jYXRpb25CYXJWaXNpYmxlOwogCi0gICAg
aWYgKGZ1bGxzY3JlZW4pCi0gICAgICAgICpmdWxsc2NyZWVuID0gd2luZG93X2ZlYXR1cmVzLT5j
b3JlLT5mdWxsc2NyZWVuOworICAgIGlmIChmdWxsU2NyZWVuKQorICAgICAgICAqZnVsbFNjcmVl
biA9IHdpbmRvd0ZlYXR1cmVzLT5jb3JlLT5mdWxsc2NyZWVuOwogfQogCi12b2lkIGV3a193aW5k
b3dfZmVhdHVyZXNfaW50X3Byb3BlcnR5X2dldChjb25zdCBFd2tfV2luZG93X0ZlYXR1cmVzKiB3
aW5kb3dfZmVhdHVyZXMsIGludCogeCwgaW50KiB5LCBpbnQqIHcsIGludCogaCkKK3ZvaWQgZXdr
X3dpbmRvd19mZWF0dXJlc19pbnRfcHJvcGVydHlfZ2V0KGNvbnN0IEV3a19XaW5kb3dfRmVhdHVy
ZXMqIHdpbmRvd0ZlYXR1cmVzLCBpbnQqIHgsIGludCogeSwgaW50KiB3aWR0aCwgaW50KiBoZWln
aHQpCiB7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4od2luZG93X2ZlYXR1cmVzKTsK
LSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih3aW5kb3dfZmVhdHVyZXMtPmNvcmUpOwor
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHdpbmRvd0ZlYXR1cmVzKTsKKyAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTih3aW5kb3dGZWF0dXJlcy0+Y29yZSk7CiAKICAgICBpZiAo
eCkKLSAgICAgICAgKnggPSB3aW5kb3dfZmVhdHVyZXMtPmNvcmUtPnhTZXQgPyBzdGF0aWNfY2Fz
dDxpbnQ+KHdpbmRvd19mZWF0dXJlcy0+Y29yZS0+eCkgOiAtMTsKKyAgICAgICAgKnggPSB3aW5k
b3dGZWF0dXJlcy0+Y29yZS0+eFNldCA/IHN0YXRpY19jYXN0PGludD4od2luZG93RmVhdHVyZXMt
PmNvcmUtPngpIDogLTE7CiAKICAgICBpZiAoeSkKLSAgICAgICAgKnkgPSB3aW5kb3dfZmVhdHVy
ZXMtPmNvcmUtPnlTZXQgPyBzdGF0aWNfY2FzdDxpbnQ+KHdpbmRvd19mZWF0dXJlcy0+Y29yZS0+
eSkgOiAtMTsKKyAgICAgICAgKnkgPSB3aW5kb3dGZWF0dXJlcy0+Y29yZS0+eVNldCA/IHN0YXRp
Y19jYXN0PGludD4od2luZG93RmVhdHVyZXMtPmNvcmUtPnkpIDogLTE7CiAKLSAgICBpZiAodykK
LSAgICAgICAgKncgPSB3aW5kb3dfZmVhdHVyZXMtPmNvcmUtPndpZHRoU2V0ID8gc3RhdGljX2Nh
c3Q8aW50Pih3aW5kb3dfZmVhdHVyZXMtPmNvcmUtPndpZHRoKSA6IC0xOworICAgIGlmICh3aWR0
aCkKKyAgICAgICAgKndpZHRoID0gd2luZG93RmVhdHVyZXMtPmNvcmUtPndpZHRoU2V0ID8gc3Rh
dGljX2Nhc3Q8aW50Pih3aW5kb3dGZWF0dXJlcy0+Y29yZS0+d2lkdGgpIDogLTE7CiAKLSAgICBp
ZiAoaCkKLSAgICAgICAgKmggPSB3aW5kb3dfZmVhdHVyZXMtPmNvcmUtPmhlaWdodFNldCA/IHN0
YXRpY19jYXN0PGludD4od2luZG93X2ZlYXR1cmVzLT5jb3JlLT5oZWlnaHQpIDogLTE7CisgICAg
aWYgKGhlaWdodCkKKyAgICAgICAgKmhlaWdodCA9IHdpbmRvd0ZlYXR1cmVzLT5jb3JlLT5oZWln
aHRTZXQgPyBzdGF0aWNfY2FzdDxpbnQ+KHdpbmRvd0ZlYXR1cmVzLT5jb3JlLT5oZWlnaHQpIDog
LTE7CiB9CiAKIC8qIGludGVybmFsIG1ldGhvZHMgKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKi8K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110629</attachid>
            <date>2011-10-11 19:38:45 -0700</date>
            <delta_ts>2011-10-12 18:22:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69073-20111012113845.patch</filename>
            <type>text/plain</type>
            <size>418535</size>
            <attacher name="Gyuyoung Kim">gyuyoung.kim</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTcyMTgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZs
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZwppbmRleCBjY2IyODhlZjZh
MDM2YmY2YTBiNTMyMWM2OTA1YTQ0Y2YyZmEwNmE2Li5lYWYxYzYyOThlNTRhNjQzNDQ2ZTZhMDk5
NDY5ZWI3NzE2NjgxYTBkIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTIgQEAKKzIwMTEt
MTAtMDcgIEd5dXlvdW5nIEtpbSAgPGd5dXlvdW5nLmtpbUBzYW1zdW5nLmNvbT4KKworICAgICAg
ICBbRUZMXSBDaGFuZ2UgZWZsIHN0eWxlIHBhcmFtZXRlciB2YXJpYWJsZXMgd2l0aCBXZWJLaXQg
Y29kaW5nIFN0eWxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD02OTA3MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFRoaXMgaXMgYSB0aGlyZCBzdGVwIGluIG9yZGVyIHRvIGJlIG1vcmUgY29tcGxpYW50IHdp
dGggV2ViS2l0IGNvZGluZyBzdHlsZS4KKyAgICAgICAgV2UgaGF2ZSB1c2VkIG9uZS1sZXR0ZXJ8
IHR3by1sZXR0ZXIgcGFyYW1ldGVyIGFjY29yZGluZyB0byBlZmwgc3R5bGUuIEhvd2V2ZXIsIGl0
J3MgbW9yZSBkaWZmaWN1bHQKKyAgICAgICAgZm9yIG90aGVyIHJldmlld2VycyB0byByZXZpZXcg
RUZMIHBhdGNoZXMuIFNvLCB0aGlzIHBhdGNoIGNoYW5nZXMgZWZsIHN0eWxlIHBhcmFtZXRlcnMK
KyAgICAgICAgd2l0aCBtZWFuaW5nZnVsIG9uZS4KKworICAgICAgICBNYWpvcnMgY2hhbmdlcyBh
cmUgbGlzdGVkIGJlbG93LAorCisgICAgICAgIC0gVXNlIGV3a0ZyYW1lIGluc3RlYWQgb2YgbyBw
YXJhbWV0ZXIgaW4gZXdrX2ZyYW1lLmNwcC4KKyAgICAgICAgLSBVc2UgZXdrVmlldyBpbnN0ZWFk
IG9mIG8gcGFyYW1ldGVyIGluIGV3a192aWV3LmNwcC4KKyAgICAgICAgLSBVc2UgbWVudSBhbmQg
aXRlbSBpbnN0ZWFkIG9mIG8gcGFyYW1ldGVyIGluIGV3a19jb250ZXh0bWVudS5jcHAuCisgICAg
ICAgIC0gVXNlIGV3a1RpbGUgaW5zdGVhZCBvZiBvIHBhcmFtZXRlciBpbiBld2tfdGlsZV94eHgu
Y3BwLgorICAgICAgICAtIFVzZSB0aWxlIHBhcmFtZXRlciBuYW1lIGluc3RlYWQgb2YgdCBwYXJh
bWV0ZXIgaW4gZXdrX3RpbGVfeHh4LmNwcC4KKyAgICAgICAgLSBVc2Ugc21hcnREYXRhIGluc3Rl
YWQgb2Ygc2QgcGFyYW1ldGVyIGZvciBFd2tfWFhYWF9TbWFydF9EYXRhIHN0cnVjdC4KKyAgICAg
ICAgLSBVc2Ugd2lkdGgsIGhlaWdodCBpbnN0ZWFkIG9mIHcsIGggcGFyYW1ldGVyLgorICAgICAg
ICAtIFVzZSB4eHhFdmVudCBpbnN0ZWFkIG9mIGV2IHBhcmFtZXRlciBmb3IgZXZlbnQuIChlLmcu
IGRvd25FdmVudCwgdXBFdmVudCwgd2hlZWxFdmVudCkKKyAgICAgICAgLSBVc2Ugc2Nyb2xsWCwg
c2Nyb2xsWSwgc2Nyb2xsV2lkdGgsIHNjcm9sbEhlaWdodCwgY2VudGVyWCwgY2VudGVyWSwgZGVs
dGFYLCBkZWx0YVkgaW5zdGVhZCBvZiBzeCwgeHksIHN3LAorICAgICAgICBzaCwgY3gsIGN5LCBk
eCwgZHkuCisgICAgICAgIC0gVXNlIHRpbGVVbnVzZWRDYWNoZSBpbnN0ZWFkIG9mIHR1YyBwYXJh
bWV0ZXIgaW4gdGlsZWQgYmFja2luZyBzdG9yZS4KKyAgICAgICAgLSBVc2UgcmVkLCBncmVlbiwg
Ymx1ZSBhbmQgYWxwaGEgaW5zdGVhZCBvZiByLGcsYixhLgorICAgICAgICAtIFJlbW92ZSAiXyIg
ZnJvbSBwYXJhbWV0ZXIgdmFyaWFibGUuCisgICAgICAgIC0gUnVuIGRlbWFyY2hpJ3MgY29kaW5n
IHN0eWxlIHNjcmlwdCBmb3IgZXdrX3RpbGVfeHh4LmNwcCBmaWxlcy4KKyAgICAgICAgLSBSZW1v
dmUgKnZvaWQqIHBhcmFtZXRlciBpbiBld2tfdGlsZV94eHguY3BwJ3MgaW50ZXJuYWwgZnVuY3Rp
b25zLgorCisgICAgICAgICogZXdrL2V3a19hdXRoX3NvdXAuY3BwOgorICAgICAgICAqIGV3ay9l
d2tfY29udGV4dG1lbnUuY3BwOgorICAgICAgICAqIGV3ay9ld2tfY29va2llcy5jcHA6CisgICAg
ICAgICogZXdrL2V3a19mcmFtZS5jcHA6CisgICAgICAgICogZXdrL2V3a19oaXN0b3J5LmNwcDoK
KyAgICAgICAgKiBld2svZXdrX2pzLmNwcDoKKyAgICAgICAgKiBld2svZXdrX3Byb3RvY29sX2hh
bmRsZXJfc291cC5jcHA6CisgICAgICAgICogZXdrL2V3a19zZXR0aW5ncy5jcHA6CisgICAgICAg
ICogZXdrL2V3a190aWxlZF9iYWNraW5nX3N0b3JlLmNwcDoKKyAgICAgICAgKiBld2svZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmUuaDoKKyAgICAgICAgKiBld2svZXdrX3RpbGVkX21hdHJpeC5jcHA6
CisgICAgICAgICogZXdrL2V3a190aWxlZF9tYXRyaXguaDoKKyAgICAgICAgKiBld2svZXdrX3Rp
bGVkX21vZGVsLmNwcDoKKyAgICAgICAgKiBld2svZXdrX3RpbGVkX21vZGVsLmg6CisgICAgICAg
ICogZXdrL2V3a192aWV3LmNwcDoKKyAgICAgICAgKiBld2svZXdrX3ZpZXdfc2luZ2xlLmNwcDoK
KyAgICAgICAgKiBld2svZXdrX3ZpZXdfdGlsZWQuY3BwOgorICAgICAgICAqIGV3ay9ld2tfd2lu
ZG93X2ZlYXR1cmVzLmNwcDoKKwogMjAxMS0xMC0xMCAgUmFwaGFlbCBLdWJvIGRhIENvc3RhICA8
a3Vib0Bwcm9mdXNpb24ubW9iaT4KIAogICAgICAgICBbRUZMXSBEbyBub3QgY2FjaGUgYSBmcmFt
ZSdzIGNvbnRlbnRzIHNpemUuCkBAIC0yMDU3LDcgKzIxMDYsNyBAQAogICAgICAgICAoV2ViQ29y
ZTo6Q2hyb21lQ2xpZW50RWZsOjpydW5PcGVuUGFuZWwpOgogICAgICAgICAqIGV3ay9ld2tfdmll
dy5jcHA6CiAgICAgICAgIChld2tfdmlld19ydW5fb3Blbl9wYW5lbCk6Ci0gICAgICAgICogZXdr
L2V3a192aWV3LmgKKyAgICAgICAgKiBld2svZXdrX3ZpZXcuaDoKIAogMjAxMS0wNi0yNyAgR3l1
eW91bmcgS2ltICA8Z3l1eW91bmcua2ltQHNhbXN1bmcuY29tPgogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2VmbC9ld2svZXdrX2F1dGhfc291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC9l
d2svZXdrX2F1dGhfc291cC5jcHAKaW5kZXggZmIzNmE5MTU5ZjI3YjI3MmJhMWYzMDI2NDZkY2M3
ZjAxZmYxNWFkMS4uY2JjODc1NmVkODVlYmMxNWU3N2JjNDFiMzNlMDUzM2M0MjVhMTkyZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19hdXRoX3NvdXAuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfYXV0aF9zb3VwLmNwcApAQCAtNjMsMTAgKzYzLDEwIEBA
IHN0YXRpYyB2b2lkIGV3a19hdXRoX3NvdXBfZGlhbG9nX2luaXQoRXdrX1NvdXBfQXV0aF9EaWFs
b2cqIGluc3RhbmNlKQogewogfQogCi1zdGF0aWMgdm9pZCBld2tfYXV0aF9zb3VwX2RpYWxvZ19z
ZXNzaW9uX2ZlYXR1cmVfaW5pdChTb3VwU2Vzc2lvbkZlYXR1cmVJbnRlcmZhY2UqIGZlYXR1cmVf
aW50ZXJmYWNlLCBncG9pbnRlciBpbnRlcmZhY2VfZGF0YSkKK3N0YXRpYyB2b2lkIGV3a19hdXRo
X3NvdXBfZGlhbG9nX3Nlc3Npb25fZmVhdHVyZV9pbml0KFNvdXBTZXNzaW9uRmVhdHVyZUludGVy
ZmFjZSogZmVhdHVyZUludGVyZmFjZSwgZ3BvaW50ZXIgaW50ZXJmYWNlRGF0YSkKIHsKLSAgICBm
ZWF0dXJlX2ludGVyZmFjZS0+YXR0YWNoID0gYXR0YWNoOwotICAgIGZlYXR1cmVfaW50ZXJmYWNl
LT5kZXRhY2ggPSBkZXRhY2g7CisgICAgZmVhdHVyZUludGVyZmFjZS0+YXR0YWNoID0gYXR0YWNo
OworICAgIGZlYXR1cmVJbnRlcmZhY2UtPmRldGFjaCA9IGRldGFjaDsKIH0KIAogdm9pZCBld2tf
YXV0aF9zb3VwX3Nob3dfZGlhbG9nX2NhbGxiYWNrX3NldChFd2tfQXV0aF9TaG93X0RpYWxvZ19D
YWxsYmFjayBjYWxsYmFjaykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tf
Y29udGV4dG1lbnUuY3BwIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19jb250ZXh0bWVudS5j
cHAKaW5kZXggYWExNjE5ZmQ5MThmMTI2MzBhMDE3MDIyYjZlZGZlM2U3M2NjYzhlNi4uNjIxYzc5
YzcwNTFkM2U4MDBkYTA3NTU5ZTk0OGRhNWU5Yzg0OTkzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9lZmwvZXdrL2V3a19jb250ZXh0bWVudS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9lZmwv
ZXdrL2V3a19jb250ZXh0bWVudS5jcHAKQEAgLTkyLDExICs5MiwxMSBAQCBFaW5hX0Jvb2wgZXdr
X2NvbnRleHRfbWVudV9kZXN0cm95KEV3a19Db250ZXh0X01lbnUqIG1lbnUpCiAjZW5kaWYKIH0K
IAotY29uc3QgRWluYV9MaXN0KiBld2tfY29udGV4dF9tZW51X2l0ZW1fbGlzdF9nZXQoY29uc3Qg
RXdrX0NvbnRleHRfTWVudSogbykKK2NvbnN0IEVpbmFfTGlzdCogZXdrX2NvbnRleHRfbWVudV9p
dGVtX2xpc3RfZ2V0KGNvbnN0IEV3a19Db250ZXh0X01lbnUqIG1lbnUpCiB7Ci0gICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKG8sIDApOworICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOX1ZBTChtZW51LCAwKTsKIAotICAgIHJldHVybiBvLT5pdGVtczsKKyAgICByZXR1cm4g
bWVudS0+aXRlbXM7CiB9CiAKIEV3a19Db250ZXh0X01lbnVfSXRlbSogZXdrX2NvbnRleHRfbWVu
dV9pdGVtX25ldyhFd2tfQ29udGV4dF9NZW51X0l0ZW1fVHlwZSB0eXBlLApAQCAtMTQyLDY4ICsx
NDIsNjggQEAgdm9pZCBld2tfY29udGV4dF9tZW51X2l0ZW1fZnJlZShFd2tfQ29udGV4dF9NZW51
X0l0ZW0qIGl0ZW0pCiAgICAgZnJlZShpdGVtKTsKIH0KIAotRXdrX0NvbnRleHRfTWVudV9JdGVt
X1R5cGUgZXdrX2NvbnRleHRfbWVudV9pdGVtX3R5cGVfZ2V0KGNvbnN0IEV3a19Db250ZXh0X01l
bnVfSXRlbSogbykKK0V3a19Db250ZXh0X01lbnVfSXRlbV9UeXBlIGV3a19jb250ZXh0X21lbnVf
aXRlbV90eXBlX2dldChjb25zdCBFd2tfQ29udGV4dF9NZW51X0l0ZW0qIGl0ZW0pCiB7Ci0gICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKG8sIEVXS19BQ1RJT05fVFlQRSk7Ci0gICAg
cmV0dXJuIG8tPnR5cGU7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGl0ZW0s
IEVXS19BQ1RJT05fVFlQRSk7CisgICAgcmV0dXJuIGl0ZW0tPnR5cGU7CiB9CiAKLUVpbmFfQm9v
bCBld2tfY29udGV4dF9tZW51X2l0ZW1fdHlwZV9zZXQoRXdrX0NvbnRleHRfTWVudV9JdGVtKiBv
LCBFd2tfQ29udGV4dF9NZW51X0l0ZW1fVHlwZSB0eXBlKQorRWluYV9Cb29sIGV3a19jb250ZXh0
X21lbnVfaXRlbV90eXBlX3NldChFd2tfQ29udGV4dF9NZW51X0l0ZW0qIGl0ZW0sIEV3a19Db250
ZXh0X01lbnVfSXRlbV9UeXBlIHR5cGUpCiB7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk5fVkFMKG8sIEVJTkFfRkFMU0UpOwotICAgIG8tPnR5cGUgPSB0eXBlOworICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOX1ZBTChpdGVtLCBFSU5BX0ZBTFNFKTsKKyAgICBpdGVtLT50eXBl
ID0gdHlwZTsKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi1Fd2tfQ29udGV4dF9NZW51X0Fj
dGlvbiBld2tfY29udGV4dF9tZW51X2l0ZW1fYWN0aW9uX2dldChjb25zdCBFd2tfQ29udGV4dF9N
ZW51X0l0ZW0qIG8pCitFd2tfQ29udGV4dF9NZW51X0FjdGlvbiBld2tfY29udGV4dF9tZW51X2l0
ZW1fYWN0aW9uX2dldChjb25zdCBFd2tfQ29udGV4dF9NZW51X0l0ZW0qIGl0ZW0pCiB7Ci0gICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKG8sIEVXS19DT05URVhUX01FTlVfSVRFTV9U
QUdfTk9fQUNUSU9OKTsKLSAgICByZXR1cm4gby0+YWN0aW9uOworICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOX1ZBTChpdGVtLCBFV0tfQ09OVEVYVF9NRU5VX0lURU1fVEFHX05PX0FDVElP
Tik7CisgICAgcmV0dXJuIGl0ZW0tPmFjdGlvbjsKIH0KIAotRWluYV9Cb29sIGV3a19jb250ZXh0
X21lbnVfaXRlbV9hY3Rpb25fc2V0KEV3a19Db250ZXh0X01lbnVfSXRlbSogbywgRXdrX0NvbnRl
eHRfTWVudV9BY3Rpb24gYWN0aW9uKQorRWluYV9Cb29sIGV3a19jb250ZXh0X21lbnVfaXRlbV9h
Y3Rpb25fc2V0KEV3a19Db250ZXh0X01lbnVfSXRlbSogaXRlbSwgRXdrX0NvbnRleHRfTWVudV9B
Y3Rpb24gYWN0aW9uKQogewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChvLCBF
SU5BX0ZBTFNFKTsKLSAgICBvLT5hY3Rpb24gPSBhY3Rpb247CisgICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk5fVkFMKGl0ZW0sIEVJTkFfRkFMU0UpOworICAgIGl0ZW0tPmFjdGlvbiA9IGFj
dGlvbjsKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi1jb25zdCBjaGFyKiBld2tfY29udGV4
dF9tZW51X2l0ZW1fdGl0bGVfZ2V0KGNvbnN0IEV3a19Db250ZXh0X01lbnVfSXRlbSogbykKK2Nv
bnN0IGNoYXIqIGV3a19jb250ZXh0X21lbnVfaXRlbV90aXRsZV9nZXQoY29uc3QgRXdrX0NvbnRl
eHRfTWVudV9JdGVtKiBpdGVtKQogewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZB
TChvLCAwKTsKLSAgICByZXR1cm4gby0+dGl0bGU7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk5fVkFMKGl0ZW0sIDApOworICAgIHJldHVybiBpdGVtLT50aXRsZTsKIH0KIAotY29uc3Qg
Y2hhciogZXdrX2NvbnRleHRfbWVudV9pdGVtX3RpdGxlX3NldChFd2tfQ29udGV4dF9NZW51X0l0
ZW0qIG8sIGNvbnN0IGNoYXIqIHRpdGxlKQorY29uc3QgY2hhciogZXdrX2NvbnRleHRfbWVudV9p
dGVtX3RpdGxlX3NldChFd2tfQ29udGV4dF9NZW51X0l0ZW0qIGl0ZW0sIGNvbnN0IGNoYXIqIHRp
dGxlKQogewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChvLCAwKTsKLSAgICBl
aW5hX3N0cmluZ3NoYXJlX3JlcGxhY2UoJm8tPnRpdGxlLCB0aXRsZSk7Ci0gICAgcmV0dXJuIG8t
PnRpdGxlOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChpdGVtLCAwKTsKKyAg
ICBlaW5hX3N0cmluZ3NoYXJlX3JlcGxhY2UoJml0ZW0tPnRpdGxlLCB0aXRsZSk7CisgICAgcmV0
dXJuIGl0ZW0tPnRpdGxlOwogfQogCi1FaW5hX0Jvb2wgZXdrX2NvbnRleHRfbWVudV9pdGVtX2No
ZWNrZWRfZ2V0KGNvbnN0IEV3a19Db250ZXh0X01lbnVfSXRlbSogbykKK0VpbmFfQm9vbCBld2tf
Y29udGV4dF9tZW51X2l0ZW1fY2hlY2tlZF9nZXQoY29uc3QgRXdrX0NvbnRleHRfTWVudV9JdGVt
KiBpdGVtKQogewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChvLCBFSU5BX0ZB
TFNFKTsKLSAgICByZXR1cm4gby0+Y2hlY2tlZDsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTl9WQUwoaXRlbSwgRUlOQV9GQUxTRSk7CisgICAgcmV0dXJuIGl0ZW0tPmNoZWNrZWQ7CiB9
CiAKLUVpbmFfQm9vbCBld2tfY29udGV4dF9tZW51X2l0ZW1fY2hlY2tlZF9zZXQoRXdrX0NvbnRl
eHRfTWVudV9JdGVtKiBvLCBFaW5hX0Jvb2wgY2hlY2tlZCkKK0VpbmFfQm9vbCBld2tfY29udGV4
dF9tZW51X2l0ZW1fY2hlY2tlZF9zZXQoRXdrX0NvbnRleHRfTWVudV9JdGVtKiBpdGVtLCBFaW5h
X0Jvb2wgY2hlY2tlZCkKIHsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwobywg
RUlOQV9GQUxTRSk7Ci0gICAgby0+Y2hlY2tlZCA9IGNoZWNrZWQ7CisgICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk5fVkFMKGl0ZW0sIEVJTkFfRkFMU0UpOworICAgIGl0ZW0tPmNoZWNrZWQg
PSBjaGVja2VkOwogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLUVpbmFfQm9vbCBld2tfY29u
dGV4dF9tZW51X2l0ZW1fZW5hYmxlZF9nZXQoY29uc3QgRXdrX0NvbnRleHRfTWVudV9JdGVtKiBv
KQorRWluYV9Cb29sIGV3a19jb250ZXh0X21lbnVfaXRlbV9lbmFibGVkX2dldChjb25zdCBFd2tf
Q29udGV4dF9NZW51X0l0ZW0qIGl0ZW0pCiB7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk5fVkFMKG8sIEVJTkFfRkFMU0UpOwotICAgIHJldHVybiBvLT5lbmFibGVkOworICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChpdGVtLCBFSU5BX0ZBTFNFKTsKKyAgICByZXR1cm4g
aXRlbS0+ZW5hYmxlZDsKIH0KIAotRWluYV9Cb29sIGV3a19jb250ZXh0X21lbnVfaXRlbV9lbmFi
bGVkX3NldChFd2tfQ29udGV4dF9NZW51X0l0ZW0qIG8sIEVpbmFfQm9vbCBlbmFibGVkKQorRWlu
YV9Cb29sIGV3a19jb250ZXh0X21lbnVfaXRlbV9lbmFibGVkX3NldChFd2tfQ29udGV4dF9NZW51
X0l0ZW0qIGl0ZW0sIEVpbmFfQm9vbCBlbmFibGVkKQogewotICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOX1ZBTChvLCBFSU5BX0ZBTFNFKTsKLSAgICBvLT5lbmFibGVkID0gZW5hYmxlZDsK
KyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoaXRlbSwgRUlOQV9GQUxTRSk7Cisg
ICAgaXRlbS0+ZW5hYmxlZCA9IGVuYWJsZWQ7CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIApA
QCAtMjU2LDExICsyNTYsMTEgQEAgRXdrX0NvbnRleHRfTWVudSogZXdrX2NvbnRleHRfbWVudV9u
ZXcoRXZhc19PYmplY3QqIHZpZXcsIFdlYkNvcmU6OkNvbnRleHRNZW51Q28KICAqIEBzZWUgZXdr
X2NvbnRleHRfbWVudV91bnJlZgogICogQHNlZSBld2tfY29udGV4dF9tZW51X2Rlc3Ryb3kKICAq
LwotRWluYV9Cb29sIGV3a19jb250ZXh0X21lbnVfZnJlZShFd2tfQ29udGV4dF9NZW51KiBvKQor
RWluYV9Cb29sIGV3a19jb250ZXh0X21lbnVfZnJlZShFd2tfQ29udGV4dF9NZW51KiBtZW51KQog
ewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChvLCBFSU5BX0ZBTFNFKTsKLSAg
ICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKG8tPnZpZXcsICJjb250ZXh0bWVudSxm
cmVlIiwgbyk7Ci0gICAgZXdrX2NvbnRleHRfbWVudV91bnJlZihvKTsKKyAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTl9WQUwobWVudSwgRUlOQV9GQUxTRSk7CisgICAgZXZhc19vYmplY3Rf
c21hcnRfY2FsbGJhY2tfY2FsbChtZW51LT52aWV3LCAiY29udGV4dG1lbnUsZnJlZSIsIG1lbnUp
OworICAgIGV3a19jb250ZXh0X21lbnVfdW5yZWYobWVudSk7CiAgICAgcmV0dXJuIEVJTkFfVFJV
RTsKIH0KIApAQCAtMjc1LDcgKzI3NSw3IEBAIEVpbmFfQm9vbCBld2tfY29udGV4dF9tZW51X2Zy
ZWUoRXdrX0NvbnRleHRfTWVudSogbykKICAqCiAgKiBAc2VlIGV3a19jb250ZXh0X21lbnVfaXRl
bV9uZXcKICAqLwotdm9pZCBld2tfY29udGV4dF9tZW51X2l0ZW1fYXBwZW5kKEV3a19Db250ZXh0
X01lbnUqIG8sIFdlYkNvcmU6OkNvbnRleHRNZW51SXRlbSYgY29yZSkKK3ZvaWQgZXdrX2NvbnRl
eHRfbWVudV9pdGVtX2FwcGVuZChFd2tfQ29udGV4dF9NZW51KiBtZW51LCBXZWJDb3JlOjpDb250
ZXh0TWVudUl0ZW0mIGNvcmUpCiB7CiAgICAgRXdrX0NvbnRleHRfTWVudV9JdGVtX1R5cGUgdHlw
ZSA9IHN0YXRpY19jYXN0PEV3a19Db250ZXh0X01lbnVfSXRlbV9UeXBlPihjb3JlLnR5cGUoKSk7
CiAgICAgRXdrX0NvbnRleHRfTWVudV9BY3Rpb24gYWN0aW9uID0gc3RhdGljX2Nhc3Q8RXdrX0Nv
bnRleHRfTWVudV9BY3Rpb24+KGNvcmUuYWN0aW9uKCkpOwpAQCAtMjg1LDggKzI4NSw4IEBAIHZv
aWQgZXdrX2NvbnRleHRfbWVudV9pdGVtX2FwcGVuZChFd2tfQ29udGV4dF9NZW51KiBvLCBXZWJD
b3JlOjpDb250ZXh0TWVudUl0ZW0mCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29yZS5lbmFibGVkKCkpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJO
KG1lbnVfaXRlbSk7CiAKLSAgICBvLT5pdGVtcyA9IGVpbmFfbGlzdF9hcHBlbmQoby0+aXRlbXMs
IG1lbnVfaXRlbSk7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChvLT52aWV3
LCAiY29udGV4dG1lbnUsaXRlbSxhcHBlbmRlZCIsIG8pOworICAgIG1lbnUtPml0ZW1zID0gZWlu
YV9saXN0X2FwcGVuZChtZW51LT5pdGVtcywgbWVudV9pdGVtKTsKKyAgICBldmFzX29iamVjdF9z
bWFydF9jYWxsYmFja19jYWxsKG1lbnUtPnZpZXcsICJjb250ZXh0bWVudSxpdGVtLGFwcGVuZGVk
IiwgbWVudSk7CiB9CiAKIC8qKgpAQCAtMzAxLDEyICszMDEsMTIgQEAgdm9pZCBld2tfY29udGV4
dF9tZW51X2l0ZW1fYXBwZW5kKEV3a19Db250ZXh0X01lbnUqIG8sIFdlYkNvcmU6OkNvbnRleHRN
ZW51SXRlbSYKICAqCiAgKiBAc2VlIGV3a19jb250ZXh0X21lbnVfaXRlbV9saXN0X2dldAogICov
Ci1Fd2tfQ29udGV4dF9NZW51KiBld2tfY29udGV4dF9tZW51X2N1c3RvbV9nZXQoY29uc3QgRXdr
X0NvbnRleHRfTWVudSogbykKK0V3a19Db250ZXh0X01lbnUqIGV3a19jb250ZXh0X21lbnVfY3Vz
dG9tX2dldChjb25zdCBFd2tfQ29udGV4dF9NZW51KiBtZW51KQogewotICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOX1ZBTChvLCAwKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
Tl9WQUwobWVudSwgMCk7CiAKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKG8t
PnZpZXcsICJjb250ZXh0bWVudSxjdXN0b21pemUiLCBvLT5pdGVtcyk7Ci0gICAgcmV0dXJuIG87
CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChtZW51LT52aWV3LCAiY29udGV4
dG1lbnUsY3VzdG9taXplIiwgbWVudS0+aXRlbXMpOworICAgIHJldHVybiBtZW51OwogfQogCiAv
KioKQEAgLTMxNiwxMSArMzE2LDExIEBAIEV3a19Db250ZXh0X01lbnUqIGV3a19jb250ZXh0X21l
bnVfY3VzdG9tX2dldChjb25zdCBFd2tfQ29udGV4dF9NZW51KiBvKQogICoKICAqIEBwYXJhbSBv
IHRoZSBjb250ZXh0IG1lbnUgb2JqZWN0CiAgKi8KLXZvaWQgZXdrX2NvbnRleHRfbWVudV9zaG93
KGNvbnN0IEV3a19Db250ZXh0X01lbnUqIG8pCit2b2lkIGV3a19jb250ZXh0X21lbnVfc2hvdyhj
b25zdCBFd2tfQ29udGV4dF9NZW51KiBtZW51KQogewotICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOKG8pOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKG1lbnUpOwogCi0gICAg
ZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChvLT52aWV3LCAiY29udGV4dG1lbnUsc2hv
dyIsIG8pOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwobWVudS0+dmlldywg
ImNvbnRleHRtZW51LHNob3ciLCBtZW51KTsKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2VmbC9ld2svZXdrX2Nvb2tpZXMuY3BwIGIvU291cmNlL1dlYktpdC9lZmwvZXdr
L2V3a19jb29raWVzLmNwcAppbmRleCBhYTlmMmM4OTExOGE5ZjE2YjUzMWQyYzhhODMyZjUwNjQx
ZGVjMzU0Li4wNGQ3MDQxNTdkMzU4ZTNiODZjOTcyNWZjOTU4M2I4M2FhYzA4NTVmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2Nvb2tpZXMuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvZWZsL2V3ay9ld2tfY29va2llcy5jcHAKQEAgLTE0MiwxNCArMTQyLDE0IEBAIHZvaWQg
ZXdrX2Nvb2tpZXNfY29va2llX2ZyZWUoRXdrX0Nvb2tpZSogY29va2llKQogI2VuZGlmCiB9CiAK
LXZvaWQgZXdrX2Nvb2tpZXNfcG9saWN5X3NldChFd2tfQ29va2llX1BvbGljeSBwKQordm9pZCBl
d2tfY29va2llc19wb2xpY3lfc2V0KEV3a19Db29raWVfUG9saWN5IGNvb2tpZVBvbGljeSkKIHsK
ICNpZiBVU0UoU09VUCkKICAgICBTb3VwQ29va2llSmFyKiBjb29raWVKYXIgPSBXZWJDb3JlOjpk
ZWZhdWx0Q29va2llSmFyKCk7CiAgICAgU291cENvb2tpZUphckFjY2VwdFBvbGljeSBwb2xpY3k7
CiAKICAgICBwb2xpY3kgPSBTT1VQX0NPT0tJRV9KQVJfQUNDRVBUX0FMV0FZUzsKLSAgICBzd2l0
Y2ggKHApIHsKKyAgICBzd2l0Y2ggKGNvb2tpZVBvbGljeSkgewogICAgIGNhc2UgRVdLX0NPT0tJ
RV9KQVJfQUNDRVBUX05FVkVSOgogICAgICAgICBwb2xpY3kgPSBTT1VQX0NPT0tJRV9KQVJfQUND
RVBUX05FVkVSOwogICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZs
L2V3ay9ld2tfZnJhbWUuY3BwIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19mcmFtZS5jcHAK
aW5kZXggNjNjY2Q4MWQ2MDg0OTNmYzQzMzBiYmRmMDcyMWIzY2FmMjRhMWJkOC4uZWRmNTU5OTZh
YjdlZmEwMGU5OTlmODYwNGE1MTAzM2QzZTY3YmQzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9lZmwvZXdrL2V3a19mcmFtZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19m
cmFtZS5jcHAKQEAgLTgyLDUzICs4Miw1MyBAQCBzdHJ1Y3QgRWluYV9JdGVyYXRvcl9Fd2tfRnJh
bWUgewogfTsKIAogI2lmbmRlZiBFV0tfVFlQRV9DSEVDSwotI2RlZmluZSBFV0tfRlJBTUVfVFlQ
RV9DSEVDSyhvLCAuLi4pIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgRVdLX0ZSQU1FX1RZUEVf
Q0hFQ0soZXdrRnJhbWUsIC4uLikgZG8geyB9IHdoaWxlICgwKQogI2Vsc2UKLSNkZWZpbmUgRVdL
X0ZSQU1FX1RZUEVfQ0hFQ0sobywgLi4uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyNkZWZpbmUgRVdLX0ZSQU1FX1RZUEVfQ0hFQ0soZXdrRnJhbWUsIC4uLikgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgZG8geyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAg
IGNvbnN0IGNoYXIqIF90bXBfb3R5cGUgPSBldmFzX29iamVjdF90eXBlX2dldChvKTsgICAgICAg
ICAgICAgICBcCisgICAgICAgIGNvbnN0IGNoYXIqIF90bXBfb3R5cGUgPSBldmFzX29iamVjdF90
eXBlX2dldChld2tGcmFtZSk7ICAgICAgICAgICAgICAgXAogICAgICAgICBpZiAoRUlOQV9VTkxJ
S0VMWShfdG1wX290eXBlICE9IEVXS19GUkFNRV9UWVBFX1NUUikpIHsgICAgICAgICAgXAogICAg
ICAgICAgICAgRUlOQV9MT0dfQ1JJVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICgiJXAgKCVzKSBpcyBub3Qgb2YgYW4gZXdr
X2ZyYW1lISIsIG8sICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICgiJXAgKCVz
KSBpcyBub3Qgb2YgYW4gZXdrX2ZyYW1lISIsIGV3a0ZyYW1lLCAgICAgICAgICAgICAgICAgIFwK
ICAgICAgICAgICAgICAgICBfdG1wX290eXBlID8gX3RtcF9vdHlwZSA6ICIobnVsbCkiKTsgICAg
ICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgIHJldHVybiBfX1ZBX0FSR1NfXzsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgfSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAg
ICB9IHdoaWxlICgwKQogI2VuZGlmCiAKLSNkZWZpbmUgRVdLX0ZSQU1FX1NEX0dFVChvLCBwdHIp
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgRXdrX0ZyYW1lX1NtYXJ0X0Rh
dGEqIHB0ciA9IHN0YXRpY19jYXN0PEV3a19GcmFtZV9TbWFydF9EYXRhKj4oZXZhc19vYmplY3Rf
c21hcnRfZGF0YV9nZXQobykpCisjZGVmaW5lIEVXS19GUkFNRV9TRF9HRVQoZXdrRnJhbWUsIHB0
cikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBFd2tfRnJhbWVfU21hcnRf
RGF0YSogcHRyID0gc3RhdGljX2Nhc3Q8RXdrX0ZyYW1lX1NtYXJ0X0RhdGEqPihldmFzX29iamVj
dF9zbWFydF9kYXRhX2dldChld2tGcmFtZSkpCiAKLSNkZWZpbmUgRVdLX0ZSQU1FX1NEX0dFVF9P
Ul9SRVRVUk4obywgcHRyLCAuLi4pICAgICAgICAgXAotICAgIEVXS19GUkFNRV9UWVBFX0NIRUNL
KG8sIF9fVkFfQVJHU19fKTsgICAgICAgICAgICAgICBcCi0gICAgRVdLX0ZSQU1FX1NEX0dFVChv
LCBwdHIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyNkZWZpbmUgRVdLX0ZSQU1FX1NE
X0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHB0ciwgLi4uKSAgICAgICAgIFwKKyAgICBFV0tfRlJB
TUVfVFlQRV9DSEVDSyhld2tGcmFtZSwgX19WQV9BUkdTX18pOyAgICAgICAgICAgICAgIFwKKyAg
ICBFV0tfRlJBTUVfU0RfR0VUKGV3a0ZyYW1lLCBwdHIpOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKICAgICBpZiAoIXB0cikgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAogICAgICAgICBDUklUSUNBTCgibm8gc21hcnQgZGF0YSBmb3Igb2JqZWN0ICVwICgl
cykiLCAgICBcCi0gICAgICAgICAgICAgICAgIG8sIGV2YXNfb2JqZWN0X3R5cGVfZ2V0KG8pKTsg
ICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgZXdrRnJhbWUsIGV2YXNfb2JqZWN0X3R5cGVf
Z2V0KGV3a0ZyYW1lKSk7ICAgICAgICAgICBcCiAgICAgICAgIHJldHVybiBfX1ZBX0FSR1NfXzsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICB9CiAKIHN0YXRpYyBFdmFzX1NtYXJ0
X0NsYXNzIF9wYXJlbnRfc2MgPSBFVkFTX1NNQVJUX0NMQVNTX0lOSVRfTlVMTDsKIAogI2lmZGVm
IEVXS19GUkFNRV9ERUJVRwotc3RhdGljIGlubGluZSB2b2lkIF9ld2tfZnJhbWVfZGVidWcoRXZh
c19PYmplY3QqIG8pCitzdGF0aWMgaW5saW5lIHZvaWQgX2V3a19mcmFtZV9kZWJ1ZyhFdmFzX09i
amVjdCogZXdrRnJhbWUpCiB7CiAgICAgRXZhc19PYmplY3QqIGNsaXAsICogcGFyZW50OwogICAg
IEV2YXNfQ29vcmQgeCwgeSwgdywgaCwgY3gsIGN5LCBjdywgY2g7CiAgICAgaW50IHIsIGcsIGIs
IGEsIGNyLCBjZywgY2IsIGNhOwogCi0gICAgZXZhc19vYmplY3RfY29sb3JfZ2V0KG8sICZyLCAm
ZywgJmIsICZhKTsKLSAgICBldmFzX29iamVjdF9nZW9tZXRyeV9nZXQobywgJngsICZ5LCAmdywg
JmgpOworICAgIGV2YXNfb2JqZWN0X2NvbG9yX2dldChld2tGcmFtZSwgJnIsICZnLCAmYiwgJmEp
OworICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldChld2tGcmFtZSwgJngsICZ5LCAmdywgJmgp
OwogCi0gICAgY2xpcCA9IGV2YXNfb2JqZWN0X2NsaXBfZ2V0KG8pOworICAgIGNsaXAgPSBldmFz
X29iamVjdF9jbGlwX2dldChld2tGcmFtZSk7CiAgICAgZXZhc19vYmplY3RfY29sb3JfZ2V0KGNs
aXAsICZjciwgJmNnLCAmY2IsICZjYSk7CiAgICAgZXZhc19vYmplY3RfZ2VvbWV0cnlfZ2V0KGNs
aXAsICZjeCwgJmN5LCAmY3csICZjaCk7CiAKICAgICBmcHJpbnRmKHN0ZGVyciwgIiVwOiB0eXBl
PSVzIG5hbWU9JXMsIHZpc2libGU9JWQsIGNvbG9yPSUwMnglMDJ4JTAyeCUwMngsICVkLCVkKyVk
eCVkLCBjbGlwcGVyPSVwICglZCwgJTAyeCUwMnglMDJ4JTAyeCwgJWQsJWQrJWR4JWQpXG4iLAot
ICAgICAgICAgICAgbywgZXZhc19vYmplY3RfdHlwZV9nZXQobyksIGV2YXNfb2JqZWN0X25hbWVf
Z2V0KG8pLCBldmFzX29iamVjdF92aXNpYmxlX2dldChvKSwKKyAgICAgICAgICAgIGV3a0ZyYW1l
LCBldmFzX29iamVjdF90eXBlX2dldChld2tGcmFtZSksIGV2YXNfb2JqZWN0X25hbWVfZ2V0KGV3
a0ZyYW1lKSwgZXZhc19vYmplY3RfdmlzaWJsZV9nZXQoZXdrRnJhbWUpLAogICAgICAgICAgICAg
ciwgZywgYiwgYSwgeCwgeSwgdywgaCwKICAgICAgICAgICAgIGNsaXAsIGV2YXNfb2JqZWN0X3Zp
c2libGVfZ2V0KGNsaXApLCBjciwgY2csIGNiLCBjYSwgY3gsIGN5LCBjdywgY2gpOwotICAgIHBh
cmVudCA9IGV2YXNfb2JqZWN0X3NtYXJ0X3BhcmVudF9nZXQobyk7CisgICAgcGFyZW50ID0gZXZh
c19vYmplY3Rfc21hcnRfcGFyZW50X2dldChld2tGcmFtZSk7CiAgICAgaWYgKCFwYXJlbnQpCiAg
ICAgICAgIGZwcmludGYoc3RkZXJyLCAiXG4iKTsKICAgICBlbHNlCkBAIC0xNjcsMTQgKzE2Nywx
NCBAQCBzdGF0aWMgRWluYV9Cb29sIF9ld2tfZnJhbWVfY2hpbGRyZW5faXRlcmF0b3JfbmV4dChF
aW5hX0l0ZXJhdG9yX0V3a19GcmFtZSogaXQsCiAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CiB9CiAK
LXN0YXRpYyBFdmFzX09iamVjdCogX2V3a19mcmFtZV9jaGlsZHJlbl9pdGVyYXRvcl9nZXRfY29u
dGFpbmVyKEVpbmFfSXRlcmF0b3JfRXdrX0ZyYW1lKiBpdCkKK3N0YXRpYyBFdmFzX09iamVjdCog
X2V3a19mcmFtZV9jaGlsZHJlbl9pdGVyYXRvcl9nZXRfY29udGFpbmVyKEVpbmFfSXRlcmF0b3Jf
RXdrX0ZyYW1lKiBpdGVyYXRvcikKIHsKLSAgICByZXR1cm4gaXQtPm9iajsKKyAgICByZXR1cm4g
aXRlcmF0b3ItPm9iajsKIH0KIAotc3RhdGljIHZvaWQgX2V3a19mcmFtZV9zbWFydF9hZGQoRXZh
c19PYmplY3QqIG8pCitzdGF0aWMgdm9pZCBfZXdrX2ZyYW1lX3NtYXJ0X2FkZChFdmFzX09iamVj
dCogZXdrRnJhbWUpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVChvLCBzZCk7CisgICAgRVdLX0ZS
QU1FX1NEX0dFVChld2tGcmFtZSwgc2QpOwogCiAgICAgaWYgKCFzZCkgewogICAgICAgICBzZCA9
IHN0YXRpY19jYXN0PEV3a19GcmFtZV9TbWFydF9EYXRhKj4oY2FsbG9jKDEsIHNpemVvZihFd2tf
RnJhbWVfU21hcnRfRGF0YSkpKTsKQEAgLTE4MiwxMiArMTgyLDEyIEBAIHN0YXRpYyB2b2lkIF9l
d2tfZnJhbWVfc21hcnRfYWRkKEV2YXNfT2JqZWN0KiBvKQogICAgICAgICAgICAgQ1JJVElDQUwo
ImNvdWxkIG5vdCBhbGxvY2F0ZSBFd2tfRnJhbWVfU21hcnRfRGF0YSIpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2RhdGFfc2V0KG8s
IHNkKTsKKyAgICAgICAgZXZhc19vYmplY3Rfc21hcnRfZGF0YV9zZXQoZXdrRnJhbWUsIHNkKTsK
ICAgICB9CiAKLSAgICBzZC0+c2VsZiA9IG87CisgICAgc2QtPnNlbGYgPSBld2tGcmFtZTsKIAot
ICAgIF9wYXJlbnRfc2MuYWRkKG8pOworICAgIF9wYXJlbnRfc2MuYWRkKGV3a0ZyYW1lKTsKICAg
ICBldmFzX29iamVjdF9zdGF0aWNfY2xpcF9zZXQoc2QtPmJhc2UuY2xpcHBlciwgRUlOQV9GQUxT
RSk7CiAgICAgZXZhc19vYmplY3RfbW92ZShzZC0+YmFzZS5jbGlwcGVyLCAwLCAwKTsKICAgICBl
dmFzX29iamVjdF9yZXNpemUoc2QtPmJhc2UuY2xpcHBlciwgMCwgMCk7CkBAIC0yMjQsMTUgKzIy
NCwxNSBAQCBzdGF0aWMgdm9pZCBfZXdrX2ZyYW1lX3NtYXJ0X2FkZChFdmFzX09iamVjdCogbykK
ICAgICBpZiAoaSA+IDYpCiAgICAgICAgIGkgPSAwOwogCi0gICAgZXZhc19vYmplY3Rfc21hcnRf
bWVtYmVyX2FkZChzZC0+cmVnaW9uLCBvKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9tZW1iZXJf
YWRkKHNkLT5yZWdpb24sIGV3a0ZyYW1lKTsKICAgICBldmFzX29iamVjdF9oaWRlKHNkLT5yZWdp
b24pOwogI2VuZGlmCiB9CiAKLXN0YXRpYyB2b2lkIF9ld2tfZnJhbWVfc21hcnRfZGVsKEV2YXNf
T2JqZWN0KiBvKQorc3RhdGljIHZvaWQgX2V3a19mcmFtZV9zbWFydF9kZWwoRXZhc19PYmplY3Qq
IGV3a0ZyYW1lKQogewotICAgIFdSTigibz0lcCIsIG8pOyAvLyBYWFggUkVNT1ZFIE1FIExBVEVS
Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVChvLCBzZCk7CisgICAgV1JOKCJld2tGcmFtZT0lcCIsIGV3
a0ZyYW1lKTsgLy8gWFhYIFJFTU9WRSBNRSBMQVRFUgorICAgIEVXS19GUkFNRV9TRF9HRVQoZXdr
RnJhbWUsIHNkKTsKIAogICAgIGlmIChzZCkgewogICAgICAgICBpZiAoc2QtPmZyYW1lKSB7CkBA
IC0yNDgsMjEgKzI0OCwyMSBAQCBzdGF0aWMgdm9pZCBfZXdrX2ZyYW1lX3NtYXJ0X2RlbChFdmFz
X09iamVjdCogbykKICAgICAgICAgZWluYV9zdHJpbmdzaGFyZV9kZWwoc2QtPm5hbWUpOwogICAg
IH0KIAotICAgIF9wYXJlbnRfc2MuZGVsKG8pOworICAgIF9wYXJlbnRfc2MuZGVsKGV3a0ZyYW1l
KTsKIH0KIAotc3RhdGljIHZvaWQgX2V3a19mcmFtZV9zbWFydF9yZXNpemUoRXZhc19PYmplY3Qq
IG8sIEV2YXNfQ29vcmQgdywgRXZhc19Db29yZCBoKQorc3RhdGljIHZvaWQgX2V3a19mcmFtZV9z
bWFydF9yZXNpemUoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBFdmFzX0Nvb3JkIHdpZHRoLCBFdmFz
X0Nvb3JkIGhlaWdodCkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUKG8sIHNkKTsKLSAgICBldmFz
X29iamVjdF9yZXNpemUoc2QtPmJhc2UuY2xpcHBlciwgdywgaCk7CisgICAgRVdLX0ZSQU1FX1NE
X0dFVChld2tGcmFtZSwgc2QpOworICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShzZC0+YmFzZS5jbGlw
cGVyLCB3aWR0aCwgaGVpZ2h0KTsKIAogI2lmZGVmIEVXS19GUkFNRV9ERUJVRwotICAgIGV2YXNf
b2JqZWN0X3Jlc2l6ZShzZC0+cmVnaW9uLCB3LCBoKTsKKyAgICBldmFzX29iamVjdF9yZXNpemUo
c2QtPnJlZ2lvbiwgd2lkdGgsIGhlaWdodCk7CiAgICAgRXZhc19Db29yZCB4LCB5OwotICAgIGV2
YXNfb2JqZWN0X2dlb21ldHJ5X2dldChzZC0+cmVnaW9uLCAmeCwgJnksICZ3LCAmaCk7CisgICAg
ZXZhc19vYmplY3RfZ2VvbWV0cnlfZ2V0KHNkLT5yZWdpb24sICZ4LCAmeSwgJndpZHRoLCAmaGVp
Z2h0KTsKICAgICBJTkYoInJlZ2lvbj0lcCwgdmlzaWJsZT0lZCwgZ2VvPSVkLCVkICsgJWR4JWQi
LAotICAgICAgICBzZC0+cmVnaW9uLCBldmFzX29iamVjdF92aXNpYmxlX2dldChzZC0+cmVnaW9u
KSwgeCwgeSwgdywgaCk7Ci0gICAgX2V3a19mcmFtZV9kZWJ1ZyhvKTsKKyAgICAgICAgc2QtPnJl
Z2lvbiwgZXZhc19vYmplY3RfdmlzaWJsZV9nZXQoc2QtPnJlZ2lvbiksIHgsIHksIHdpZHRoLCBo
ZWlnaHQpOworICAgIF9ld2tfZnJhbWVfZGVidWcoZXdrRnJhbWUpOwogI2VuZGlmCiB9CiAKQEAg
LTI4OCwxNSArMjg4LDE1IEBAIHN0YXRpYyBpbmxpbmUgRXZhc19TbWFydCogX2V3a19mcmFtZV9z
bWFydF9jbGFzc19uZXcodm9pZCkKICAgICByZXR1cm4gc21hcnQ7CiB9CiAKLUV2YXNfT2JqZWN0
KiBld2tfZnJhbWVfdmlld19nZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCitFdmFzX09iamVjdCog
ZXdrX2ZyYW1lX3ZpZXdfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsKLSAgICBF
V0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgMCk7CisgICAgRVdLX0ZSQU1FX1NEX0dF
VF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCAwKTsKICAgICByZXR1cm4gc2QtPnZpZXc7CiB9CiAK
LUVpbmFfSXRlcmF0b3IqIGV3a19mcmFtZV9jaGlsZHJlbl9pdGVyYXRvcl9uZXcoRXZhc19PYmpl
Y3QqIG8pCitFaW5hX0l0ZXJhdG9yKiBld2tfZnJhbWVfY2hpbGRyZW5faXRlcmF0b3JfbmV3KEV2
YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihv
LCBzZCwgMCk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCAw
KTsKICAgICBFaW5hX0l0ZXJhdG9yX0V3a19GcmFtZSogaXQgPSBzdGF0aWNfY2FzdDxFaW5hX0l0
ZXJhdG9yX0V3a19GcmFtZSo+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNh
bGxvYygxLCBzaXplb2YoRWluYV9JdGVyYXRvcl9Fd2tfRnJhbWUpKSk7CiAgICAgaWYgKCFpdCkK
QEAgLTMwNiwyMyArMzA2LDIzIEBAIEVpbmFfSXRlcmF0b3IqIGV3a19mcmFtZV9jaGlsZHJlbl9p
dGVyYXRvcl9uZXcoRXZhc19PYmplY3QqIG8pCiAgICAgaXQtPmJhc2UubmV4dCA9IEZVTkNfSVRF
UkFUT1JfTkVYVChfZXdrX2ZyYW1lX2NoaWxkcmVuX2l0ZXJhdG9yX25leHQpOwogICAgIGl0LT5i
YXNlLmdldF9jb250YWluZXIgPSBGVU5DX0lURVJBVE9SX0dFVF9DT05UQUlORVIoX2V3a19mcmFt
ZV9jaGlsZHJlbl9pdGVyYXRvcl9nZXRfY29udGFpbmVyKTsKICAgICBpdC0+YmFzZS5mcmVlID0g
RlVOQ19JVEVSQVRPUl9GUkVFKGZyZWUpOwotICAgIGl0LT5vYmogPSBvOworICAgIGl0LT5vYmog
PSBld2tGcmFtZTsKICAgICBpdC0+Y3VycmVudEluZGV4ID0gMDsKICAgICByZXR1cm4gJml0LT5i
YXNlOwogfQogCi1FdmFzX09iamVjdCogZXdrX2ZyYW1lX2NoaWxkX2ZpbmQoRXZhc19PYmplY3Qq
IG8sIGNvbnN0IGNoYXIqIG5hbWUpCitFdmFzX09iamVjdCogZXdrX2ZyYW1lX2NoaWxkX2ZpbmQo
RXZhc19PYmplY3QqIGV3a0ZyYW1lLCBjb25zdCBjaGFyKiBuYW1lKQogewotICAgIEVXS19GUkFN
RV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAwKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JF
VFVSTihld2tGcmFtZSwgc2QsIDApOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZB
TChuYW1lLCAwKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1l
LCAwKTsKICAgICBXVEY6OlN0cmluZyBzID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KG5hbWUpOwog
ICAgIHJldHVybiBraXQoc2QtPmZyYW1lLT50cmVlKCktPmZpbmQoV1RGOjpBdG9taWNTdHJpbmco
cykpKTsKIH0KIAotRWluYV9Cb29sIGV3a19mcmFtZV91cmlfc2V0KEV2YXNfT2JqZWN0KiBvLCBj
b25zdCBjaGFyKiB1cmkpCitFaW5hX0Jvb2wgZXdrX2ZyYW1lX3VyaV9zZXQoRXZhc19PYmplY3Qq
IGV3a0ZyYW1lLCBjb25zdCBjaGFyKiB1cmkpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9S
RVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJO
KGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgV2ViQ29yZTo6S1VSTCBrdXJsKFdlYkNv
cmU6OktVUkwoKSwgV1RGOjpTdHJpbmc6OmZyb21VVEY4KHVyaSkpOwogICAgIFdlYkNvcmU6OlJl
c291cmNlUmVxdWVzdCByZXEoa3VybCk7CiAgICAgV2ViQ29yZTo6RnJhbWVMb2FkZXIqIGxvYWRl
ciA9IHNkLT5mcmFtZS0+bG9hZGVyKCk7CkBAIC0zMzAsMjEgKzMzMCwyMSBAQCBFaW5hX0Jvb2wg
ZXdrX2ZyYW1lX3VyaV9zZXQoRXZhc19PYmplY3QqIG8sIGNvbnN0IGNoYXIqIHVyaSkKICAgICBy
ZXR1cm4gRUlOQV9UUlVFOwogfQogCi1jb25zdCBjaGFyKiBld2tfZnJhbWVfdXJpX2dldChjb25z
dCBFdmFzX09iamVjdCogbykKK2NvbnN0IGNoYXIqIGV3a19mcmFtZV91cmlfZ2V0KGNvbnN0IEV2
YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihv
LCBzZCwgMCk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCAw
KTsKICAgICByZXR1cm4gc2QtPnVyaTsKIH0KIAotY29uc3QgY2hhciogZXdrX2ZyYW1lX3RpdGxl
X2dldChjb25zdCBFdmFzX09iamVjdCogbykKK2NvbnN0IGNoYXIqIGV3a19mcmFtZV90aXRsZV9n
ZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRf
T1JfUkVUVVJOKG8sIHNkLCAwKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tG
cmFtZSwgc2QsIDApOwogICAgIHJldHVybiBzZC0+dGl0bGU7CiB9CiAKLWNvbnN0IGNoYXIqIGV3
a19mcmFtZV9uYW1lX2dldChjb25zdCBFdmFzX09iamVjdCogbykKK2NvbnN0IGNoYXIqIGV3a19m
cmFtZV9uYW1lX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrRnJhbWUpCiB7Ci0gICAgRVdLX0ZS
QU1FX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIDApOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1Jf
UkVUVVJOKGV3a0ZyYW1lLCBzZCwgMCk7CiAKICAgICBpZiAoIXNkLT5mcmFtZSkgewogICAgICAg
ICBFUlIoImNvdWxkIG5vdCBnZXQgbmFtZSBvZiB1bmluaXRpYWxpemVkIGZyYW1lLiIpOwpAQCAt
MzYxLDkyICszNjEsOTAgQEAgY29uc3QgY2hhciogZXdrX2ZyYW1lX25hbWVfZ2V0KGNvbnN0IEV2
YXNfT2JqZWN0KiBvKQogICAgIHJldHVybiBzZC0+bmFtZTsKIH0KIAotRWluYV9Cb29sIGV3a19m
cmFtZV9jb250ZW50c19zaXplX2dldChjb25zdCBFdmFzX09iamVjdCogbywgRXZhc19Db29yZCog
dywgRXZhc19Db29yZCogaCkKK0VpbmFfQm9vbCBld2tfZnJhbWVfY29udGVudHNfc2l6ZV9nZXQo
Y29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBFdmFzX0Nvb3JkKiB3aWR0aCwgRXZhc19Db29y
ZCogaGVpZ2h0KQogewotICAgIGlmICh3KQotICAgICAgICAqdyA9IDA7Ci0gICAgaWYgKGgpCi0g
ICAgICAgICpoID0gMDsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlO
QV9GQUxTRSk7Ci0gICAgaWYgKCFzZC0+ZnJhbWUgfHwgIXNkLT5mcmFtZS0+dmlldygpKQotICAg
ICAgICByZXR1cm4gRUlOQV9GQUxTRTsKLSAgICBpZiAodykKLSAgICAgICAgKncgPSBzZC0+ZnJh
bWUtPnZpZXcoKS0+Y29udGVudHNXaWR0aCgpOwotICAgIGlmIChoKQotICAgICAgICAqaCA9IHNk
LT5mcmFtZS0+dmlldygpLT5jb250ZW50c0hlaWdodCgpOworICAgIGlmICh3aWR0aCkKKyAgICAg
ICAgKndpZHRoID0gMDsKKyAgICBpZiAoaGVpZ2h0KQorICAgICAgICAqaGVpZ2h0ID0gMDsKKyAg
ICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOwor
ICAgIGlmICh3aWR0aCkKKyAgICAgICAgKndpZHRoID0gc2QtPmZyYW1lLT52aWV3KCktPmNvbnRl
bnRzV2lkdGgoKTsKKyAgICBpZiAoaGVpZ2h0KQorICAgICAgICAqaGVpZ2h0ID0gc2QtPmZyYW1l
LT52aWV3KCktPmNvbnRlbnRzSGVpZ2h0KCk7CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAot
c3RhdGljIEVpbmFfQm9vbCBfZXdrX2ZyYW1lX2NvbnRlbnRzX3NldF9pbnRlcm5hbChFd2tfRnJh
bWVfU21hcnRfRGF0YSogc2QsIGNvbnN0IGNoYXIqIGNvbnRlbnRzLCBzaXplX3QgY29udGVudHNf
c2l6ZSwgY29uc3QgY2hhciogbWltZV90eXBlLCBjb25zdCBjaGFyKiBlbmNvZGluZywgY29uc3Qg
Y2hhciogYmFzZV91cmksIGNvbnN0IGNoYXIqIHVucmVhY2hhYmxlX3VyaSkKK3N0YXRpYyBFaW5h
X0Jvb2wgX2V3a19mcmFtZV9jb250ZW50c19zZXRfaW50ZXJuYWwoRXdrX0ZyYW1lX1NtYXJ0X0Rh
dGEqIHNtYXJ0RGF0YSwgY29uc3QgY2hhciogY29udGVudHMsIHNpemVfdCBjb250ZW50c1NpemUs
IGNvbnN0IGNoYXIqIG1pbWVUeXBlLCBjb25zdCBjaGFyKiBlbmNvZGluZywgY29uc3QgY2hhciog
YmFzZVVyaSwgY29uc3QgY2hhciogdW5yZWFjaGFibGVVcmkpCiB7CiAgICAgc2l6ZV90IGxlbiA9
IHN0cmxlbihjb250ZW50cyk7Ci0gICAgaWYgKGNvbnRlbnRzX3NpemUgPCAxIHx8IGNvbnRlbnRz
X3NpemUgPiBsZW4pCi0gICAgICAgIGNvbnRlbnRzX3NpemUgPSBsZW47Ci0gICAgaWYgKCFtaW1l
X3R5cGUpCi0gICAgICAgIG1pbWVfdHlwZSA9ICJ0ZXh0L2h0bWwiOworICAgIGlmIChjb250ZW50
c1NpemUgPCAxIHx8IGNvbnRlbnRzU2l6ZSA+IGxlbikKKyAgICAgICAgY29udGVudHNTaXplID0g
bGVuOworICAgIGlmICghbWltZVR5cGUpCisgICAgICAgIG1pbWVUeXBlID0gInRleHQvaHRtbCI7
CiAgICAgaWYgKCFlbmNvZGluZykKICAgICAgICAgZW5jb2RpbmcgPSAiVVRGLTgiOwotICAgIGlm
ICghYmFzZV91cmkpCi0gICAgICAgIGJhc2VfdXJpID0gImFib3V0OmJsYW5rIjsKKyAgICBpZiAo
IWJhc2VVcmkpCisgICAgICAgIGJhc2VVcmkgPSAiYWJvdXQ6YmxhbmsiOwogCi0gICAgV2ViQ29y
ZTo6S1VSTCBiYXNlS1VSTChXZWJDb3JlOjpLVVJMKCksIFdURjo6U3RyaW5nOjpmcm9tVVRGOChi
YXNlX3VyaSkpOworICAgIFdlYkNvcmU6OktVUkwgYmFzZUtVUkwoV2ViQ29yZTo6S1VSTCgpLCBX
VEY6OlN0cmluZzo6ZnJvbVVURjgoYmFzZVVyaSkpOwogICAgIFdlYkNvcmU6OktVUkwgdW5yZWFj
aGFibGVLVVJMOwotICAgIGlmICh1bnJlYWNoYWJsZV91cmkpCi0gICAgICAgIHVucmVhY2hhYmxl
S1VSTCA9IFdlYkNvcmU6OktVUkwoV2ViQ29yZTo6S1VSTCgpLCBXVEY6OlN0cmluZzo6ZnJvbVVU
RjgodW5yZWFjaGFibGVfdXJpKSk7CisgICAgaWYgKHVucmVhY2hhYmxlVXJpKQorICAgICAgICB1
bnJlYWNoYWJsZUtVUkwgPSBXZWJDb3JlOjpLVVJMKFdlYkNvcmU6OktVUkwoKSwgV1RGOjpTdHJp
bmc6OmZyb21VVEY4KHVucmVhY2hhYmxlVXJpKSk7CiAgICAgZWxzZQogICAgICAgICB1bnJlYWNo
YWJsZUtVUkwgPSBXZWJDb3JlOjpLVVJMKCk7CiAKLSAgICBXVEY6OlJlZlB0cjxXZWJDb3JlOjpT
aGFyZWRCdWZmZXI+IGJ1ZmZlciA9IFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGNvbnRl
bnRzLCBjb250ZW50c19zaXplKTsKKyAgICBXVEY6OlJlZlB0cjxXZWJDb3JlOjpTaGFyZWRCdWZm
ZXI+IGJ1ZmZlciA9IFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGNvbnRlbnRzLCBjb250
ZW50c1NpemUpOwogICAgIFdlYkNvcmU6OlN1YnN0aXR1dGVEYXRhIHN1YnN0aXR1dGVEYXRhCiAg
ICAgICAgIChidWZmZXIucmVsZWFzZSgpLAotICAgICAgICBXVEY6OlN0cmluZzo6ZnJvbVVURjgo
bWltZV90eXBlKSwKKyAgICAgICAgV1RGOjpTdHJpbmc6OmZyb21VVEY4KG1pbWVUeXBlKSwKICAg
ICAgICAgV1RGOjpTdHJpbmc6OmZyb21VVEY4KGVuY29kaW5nKSwKICAgICAgICAgYmFzZUtVUkws
IHVucmVhY2hhYmxlS1VSTCk7CiAgICAgV2ViQ29yZTo6UmVzb3VyY2VSZXF1ZXN0IHJlcXVlc3Qo
YmFzZUtVUkwpOwogCi0gICAgc2QtPmZyYW1lLT5sb2FkZXIoKS0+bG9hZChyZXF1ZXN0LCBzdWJz
dGl0dXRlRGF0YSwgZmFsc2UpOworICAgIHNtYXJ0RGF0YS0+ZnJhbWUtPmxvYWRlcigpLT5sb2Fk
KHJlcXVlc3QsIHN1YnN0aXR1dGVEYXRhLCBmYWxzZSk7CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsK
IH0KIAotRWluYV9Cb29sIGV3a19mcmFtZV9jb250ZW50c19zZXQoRXZhc19PYmplY3QqIG8sIGNv
bnN0IGNoYXIqIGNvbnRlbnRzLCBzaXplX3QgY29udGVudHNfc2l6ZSwgY29uc3QgY2hhciogbWlt
ZV90eXBlLCBjb25zdCBjaGFyKiBlbmNvZGluZywgY29uc3QgY2hhciogYmFzZV91cmkpCitFaW5h
X0Jvb2wgZXdrX2ZyYW1lX2NvbnRlbnRzX3NldChFdmFzX09iamVjdCogZXdrRnJhbWUsIGNvbnN0
IGNoYXIqIGNvbnRlbnRzLCBzaXplX3QgY29udGVudHNTaXplLCBjb25zdCBjaGFyKiBtaW1lVHlw
ZSwgY29uc3QgY2hhciogZW5jb2RpbmcsIGNvbnN0IGNoYXIqIGJhc2VVcmkpCiB7Ci0gICAgRVdL
X0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19GUkFN
RV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9T
QUZFVFlfT05fRkFMU0VfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOwogICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChjb250ZW50cywgRUlOQV9GQUxTRSk7CiAgICAg
cmV0dXJuIF9ld2tfZnJhbWVfY29udGVudHNfc2V0X2ludGVybmFsCi0gICAgICAgICAgICAgICAo
c2QsIGNvbnRlbnRzLCBjb250ZW50c19zaXplLCBtaW1lX3R5cGUsIGVuY29kaW5nLCBiYXNlX3Vy
aSwgMCk7CisgICAgICAgICAgICAgICAoc2QsIGNvbnRlbnRzLCBjb250ZW50c1NpemUsIG1pbWVU
eXBlLCBlbmNvZGluZywgYmFzZVVyaSwgMCk7CiB9CiAKLUVpbmFfQm9vbCBld2tfZnJhbWVfY29u
dGVudHNfYWx0ZXJuYXRlX3NldChFdmFzX09iamVjdCogbywgY29uc3QgY2hhciogY29udGVudHMs
IHNpemVfdCBjb250ZW50c19zaXplLCBjb25zdCBjaGFyKiBtaW1lX3R5cGUsIGNvbnN0IGNoYXIq
IGVuY29kaW5nLCBjb25zdCBjaGFyKiBiYXNlX3VyaSwgY29uc3QgY2hhciogdW5yZWFjaGFibGVf
dXJpKQorRWluYV9Cb29sIGV3a19mcmFtZV9jb250ZW50c19hbHRlcm5hdGVfc2V0KEV2YXNfT2Jq
ZWN0KiBld2tGcmFtZSwgY29uc3QgY2hhciogY29udGVudHMsIHNpemVfdCBjb250ZW50c1NpemUs
IGNvbnN0IGNoYXIqIG1pbWVUeXBlLCBjb25zdCBjaGFyKiBlbmNvZGluZywgY29uc3QgY2hhciog
YmFzZVVyaSwgY29uc3QgY2hhciogdW5yZWFjaGFibGVVcmkpCiB7Ci0gICAgRVdLX0ZSQU1FX1NE
X0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19GUkFNRV9TRF9HRVRf
T1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05f
RkFMU0VfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOX1ZBTChjb250ZW50cywgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZF
VFlfT05fTlVMTF9SRVRVUk5fVkFMKHVucmVhY2hhYmxlX3VyaSwgRUlOQV9GQUxTRSk7CisgICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHVucmVhY2hhYmxlVXJpLCBFSU5BX0ZBTFNF
KTsKICAgICByZXR1cm4gX2V3a19mcmFtZV9jb250ZW50c19zZXRfaW50ZXJuYWwKLSAgICAgICAg
ICAgICAgIChzZCwgY29udGVudHMsIGNvbnRlbnRzX3NpemUsIG1pbWVfdHlwZSwgZW5jb2Rpbmcs
IGJhc2VfdXJpLAotICAgICAgICAgICAgICAgdW5yZWFjaGFibGVfdXJpKTsKKyAgICAgICAgICAg
ICAgIChzZCwgY29udGVudHMsIGNvbnRlbnRzU2l6ZSwgbWltZVR5cGUsIGVuY29kaW5nLCBiYXNl
VXJpLAorICAgICAgICAgICAgICAgdW5yZWFjaGFibGVVcmkpOwogfQogCi1FaW5hX0Jvb2wgZXdr
X2ZyYW1lX3NjcmlwdF9leGVjdXRlKEV2YXNfT2JqZWN0KiBvLCBjb25zdCBjaGFyKiBzY3JpcHQp
CitFaW5hX0Jvb2wgZXdrX2ZyYW1lX3NjcmlwdF9leGVjdXRlKEV2YXNfT2JqZWN0KiBld2tGcmFt
ZSwgY29uc3QgY2hhciogc2NyaXB0KQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJO
KG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tG
cmFtZSwgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09OX0ZBTFNFX1JFVFVSTl9W
QUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
Tl9WQUwoc2NyaXB0LCBFSU5BX0ZBTFNFKTsKICAgICBzZC0+ZnJhbWUtPnNjcmlwdCgpLT5leGVj
dXRlU2NyaXB0KFdURjo6U3RyaW5nOjpmcm9tVVRGOChzY3JpcHQpLCB0cnVlKTsKICAgICByZXR1
cm4gRUlOQV9UUlVFOwogfQogCi1FaW5hX0Jvb2wgZXdrX2ZyYW1lX2VkaXRhYmxlX2dldChjb25z
dCBFdmFzX09iamVjdCogbykKK0VpbmFfQm9vbCBld2tfZnJhbWVfZWRpdGFibGVfZ2V0KGNvbnN0
IEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVS
TihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdr
RnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9W
QUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKICAgICByZXR1cm4gc2QtPmVkaXRhYmxlOwogfQog
Ci1FaW5hX0Jvb2wgZXdrX2ZyYW1lX2VkaXRhYmxlX3NldChFdmFzX09iamVjdCogbywgRWluYV9C
b29sIGVkaXRhYmxlKQorRWluYV9Cb29sIGV3a19mcmFtZV9lZGl0YWJsZV9zZXQoRXZhc19PYmpl
Y3QqIGV3a0ZyYW1lLCBFaW5hX0Jvb2wgZWRpdGFibGUpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dF
VF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1Jf
UkVUVVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7CiAgICAgZWRpdGFibGUgPSAhIWVk
aXRhYmxlOwogICAgIGlmIChzZC0+ZWRpdGFibGUgPT0gZWRpdGFibGUpCkBAIC00NTYsOSArNDU0
LDkgQEAgRWluYV9Cb29sIGV3a19mcmFtZV9lZGl0YWJsZV9zZXQoRXZhc19PYmplY3QqIG8sIEVp
bmFfQm9vbCBlZGl0YWJsZSkKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi1jaGFyKiBld2tf
ZnJhbWVfc2VsZWN0aW9uX2dldChjb25zdCBFdmFzX09iamVjdCogbykKK2NoYXIqIGV3a19mcmFt
ZV9zZWxlY3Rpb25fZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsKLSAgICBFV0tf
RlJBTUVfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgMCk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9P
Ul9SRVRVUk4oZXdrRnJhbWUsIHNkLCAwKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
Tl9WQUwoc2QtPmZyYW1lLCAwKTsKICAgICBXVEY6OkNTdHJpbmcgcyA9IHNkLT5mcmFtZS0+ZWRp
dG9yKCktPnNlbGVjdGVkVGV4dCgpLnV0ZjgoKTsKICAgICBpZiAocy5pc051bGwoKSkKQEAgLTQ2
Niw0NSArNDY0LDQ1IEBAIGNoYXIqIGV3a19mcmFtZV9zZWxlY3Rpb25fZ2V0KGNvbnN0IEV2YXNf
T2JqZWN0KiBvKQogICAgIHJldHVybiBzdHJkdXAocy5kYXRhKCkpOwogfQogCi1FaW5hX0Jvb2wg
ZXdrX2ZyYW1lX3RleHRfc2VhcmNoKGNvbnN0IEV2YXNfT2JqZWN0KiBvLCBjb25zdCBjaGFyKiBz
dHJpbmcsIEVpbmFfQm9vbCBjYXNlX3NlbnNpdGl2ZSwgRWluYV9Cb29sIGZvcndhcmQsIEVpbmFf
Qm9vbCB3cmFwKQorRWluYV9Cb29sIGV3a19mcmFtZV90ZXh0X3NlYXJjaChjb25zdCBFdmFzX09i
amVjdCogZXdrRnJhbWUsIGNvbnN0IGNoYXIqIHRleHQsIEVpbmFfQm9vbCBjYXNlU2Vuc2l0aXZl
LCBFaW5hX0Jvb2wgZm9yd2FyZCwgRWluYV9Cb29sIHdyYXApCiB7Ci0gICAgRVdLX0ZSQU1FX1NE
X0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19GUkFNRV9TRF9HRVRf
T1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk5fVkFMKHN0cmluZywgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk5fVkFMKHRleHQsIEVJTkFfRkFMU0UpOwogCi0gICAgcmV0dXJuIHNkLT5m
cmFtZS0+ZWRpdG9yKCktPmZpbmRTdHJpbmcoV1RGOjpTdHJpbmc6OmZyb21VVEY4KHN0cmluZyks
IGZvcndhcmQsIGNhc2Vfc2Vuc2l0aXZlLCB3cmFwLCB0cnVlKTsKKyAgICByZXR1cm4gc2QtPmZy
YW1lLT5lZGl0b3IoKS0+ZmluZFN0cmluZyhXVEY6OlN0cmluZzo6ZnJvbVVURjgodGV4dCksIGZv
cndhcmQsIGNhc2VTZW5zaXRpdmUsIHdyYXAsIHRydWUpOwogfQogCi11bnNpZ25lZCBpbnQgZXdr
X2ZyYW1lX3RleHRfbWF0Y2hlc19tYXJrKEV2YXNfT2JqZWN0KiBvLCBjb25zdCBjaGFyKiBzdHJp
bmcsIEVpbmFfQm9vbCBjYXNlX3NlbnNpdGl2ZSwgRWluYV9Cb29sIGhpZ2hsaWdodCwgdW5zaWdu
ZWQgaW50IGxpbWl0KQordW5zaWduZWQgaW50IGV3a19mcmFtZV90ZXh0X21hdGNoZXNfbWFyayhF
dmFzX09iamVjdCogZXdrRnJhbWUsIGNvbnN0IGNoYXIqIHN0cmluZywgRWluYV9Cb29sIGNhc2VT
ZW5zaXRpdmUsIEVpbmFfQm9vbCBoaWdobGlnaHQsIHVuc2lnbmVkIGludCBsaW1pdCkKIHsKLSAg
ICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgMCk7CisgICAgRVdLX0ZSQU1FX1NE
X0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCAwKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTl9WQUwoc3RyaW5nLCAwKTsKIAogICAgIHNkLT5mcmFtZS0+ZWRpdG9yKCktPnNl
dE1hcmtlZFRleHRNYXRjaGVzQXJlSGlnaGxpZ2h0ZWQoaGlnaGxpZ2h0KTsKLSAgICByZXR1cm4g
c2QtPmZyYW1lLT5lZGl0b3IoKS0+Y291bnRNYXRjaGVzRm9yVGV4dChXVEY6OlN0cmluZzo6ZnJv
bVVURjgoc3RyaW5nKSwgY2FzZV9zZW5zaXRpdmUsIGxpbWl0LCB0cnVlKTsKKyAgICByZXR1cm4g
c2QtPmZyYW1lLT5lZGl0b3IoKS0+Y291bnRNYXRjaGVzRm9yVGV4dChXVEY6OlN0cmluZzo6ZnJv
bVVURjgoc3RyaW5nKSwgY2FzZVNlbnNpdGl2ZSwgbGltaXQsIHRydWUpOwogfQogCi1FaW5hX0Jv
b2wgZXdrX2ZyYW1lX3RleHRfbWF0Y2hlc191bm1hcmtfYWxsKEV2YXNfT2JqZWN0KiBvKQorRWlu
YV9Cb29sIGV3a19mcmFtZV90ZXh0X21hdGNoZXNfdW5tYXJrX2FsbChFdmFzX09iamVjdCogZXdr
RnJhbWUpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFM
U0UpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9G
QUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgRUlO
QV9GQUxTRSk7CiAKICAgICBzZC0+ZnJhbWUtPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+cmVtb3Zl
TWFya2VycyhXZWJDb3JlOjpEb2N1bWVudE1hcmtlcjo6VGV4dE1hdGNoKTsKICAgICByZXR1cm4g
RUlOQV9UUlVFOwogfQogCi1FaW5hX0Jvb2wgZXdrX2ZyYW1lX3RleHRfbWF0Y2hlc19oaWdobGln
aHRfc2V0KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wgaGlnaGxpZ2h0KQorRWluYV9Cb29sIGV3
a19mcmFtZV90ZXh0X21hdGNoZXNfaGlnaGxpZ2h0X3NldChFdmFzX09iamVjdCogZXdrRnJhbWUs
IEVpbmFfQm9vbCBoaWdobGlnaHQpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4o
bywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0Zy
YW1lLCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFM
KHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7CiAgICAgc2QtPmZyYW1lLT5lZGl0b3IoKS0+c2V0TWFy
a2VkVGV4dE1hdGNoZXNBcmVIaWdobGlnaHRlZChoaWdobGlnaHQpOwogICAgIHJldHVybiBFSU5B
X1RSVUU7CiB9CiAKLUVpbmFfQm9vbCBld2tfZnJhbWVfdGV4dF9tYXRjaGVzX2hpZ2hsaWdodF9n
ZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCitFaW5hX0Jvb2wgZXdrX2ZyYW1lX3RleHRfbWF0Y2hl
c19oaWdobGlnaHRfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsKLSAgICBFV0tf
RlJBTUVfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX0ZSQU1F
X1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKICAgICByZXR1
cm4gc2QtPmZyYW1lLT5lZGl0b3IoKS0+bWFya2VkVGV4dE1hdGNoZXNBcmVIaWdobGlnaHRlZCgp
OwogfQpAQCAtNTEyLDIyICs1MTAsMjIgQEAgRWluYV9Cb29sIGV3a19mcmFtZV90ZXh0X21hdGNo
ZXNfaGlnaGxpZ2h0X2dldChjb25zdCBFdmFzX09iamVjdCogbykKIC8qKgogICogQ29tcGFyaXNv
biBmdW5jdGlvbiB1c2VkIGJ5IGV3a19mcmFtZV90ZXh0X21hdGNoZXNfbnRoX3Bvc19nZXQKICAq
Lwotc3RhdGljIGJvb2wgX2V3a19mcmFtZV9yZWN0X2NtcF9sZXNzX3RoYW4oY29uc3QgV2ViQ29y
ZTo6SW50UmVjdCYgaSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgaikKK3N0YXRpYyBib29sIF9l
d2tfZnJhbWVfcmVjdF9jbXBfbGVzc190aGFuKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIGJlZ2lu
LCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiBlbmQpCiB7Ci0gICAgcmV0dXJuIChpLnkoKSA8IGou
eSgpIHx8IChpLnkoKSA9PSBqLnkoKSAmJiBpLngoKSA8IGoueCgpKSk7CisgICAgcmV0dXJuIChi
ZWdpbi55KCkgPCBlbmQueSgpIHx8IChiZWdpbi55KCkgPT0gZW5kLnkoKSAmJiBiZWdpbi54KCkg
PCBlbmQueCgpKSk7CiB9CiAKIC8qKgogICogUHJlZGljYXRlIHVzZWQgYnkgZXdrX2ZyYW1lX3Rl
eHRfbWF0Y2hlc19udGhfcG9zX2dldAogICovCi1zdGF0aWMgYm9vbCBfZXdrX2ZyYW1lX3JlY3Rf
aXNfbmVnYXRpdmVfdmFsdWUoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgaSkKK3N0YXRpYyBib29s
IF9ld2tfZnJhbWVfcmVjdF9pc19uZWdhdGl2ZV92YWx1ZShjb25zdCBXZWJDb3JlOjpJbnRSZWN0
JiByZWN0KQogewotICAgIHJldHVybiAoaS54KCkgPCAwIHx8IGkueSgpIDwgMCk7CisgICAgcmV0
dXJuIChyZWN0LngoKSA8IDAgfHwgcmVjdC55KCkgPCAwKTsKIH0KIAotRWluYV9Cb29sIGV3a19m
cmFtZV90ZXh0X21hdGNoZXNfbnRoX3Bvc19nZXQoY29uc3QgRXZhc19PYmplY3QqIG8sIHNpemVf
dCBuLCBpbnQqIHgsIGludCogeSkKK0VpbmFfQm9vbCBld2tfZnJhbWVfdGV4dF9tYXRjaGVzX250
aF9wb3NfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgc2l6ZV90IG51bWJlciwgaW50
KiB4LCBpbnQqIHkpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJ
TkFfRkFMU0UpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwg
RUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFt
ZSwgRUlOQV9GQUxTRSk7CiAKICAgICBWZWN0b3I8V2ViQ29yZTo6SW50UmVjdD4gaW50UmVjdHMg
PSBzZC0+ZnJhbWUtPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+cmVuZGVyZWRSZWN0c0Zvck1hcmtl
cnMoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXI6OlRleHRNYXRjaCk7CkBAIC01MzUsNTUgKzUzMyw1
NSBAQCBFaW5hX0Jvb2wgZXdrX2ZyYW1lX3RleHRfbWF0Y2hlc19udGhfcG9zX2dldChjb25zdCBF
dmFzX09iamVjdCogbywgc2l6ZV90IG4sIGludAogICAgIC8qIHJlbW92ZSB1c2VsZXNzIHZhbHVl
cyAqLwogICAgIHN0ZDo6cmVtb3ZlX2lmKGludFJlY3RzLmJlZ2luKCksIGludFJlY3RzLmVuZCgp
LCBfZXdrX2ZyYW1lX3JlY3RfaXNfbmVnYXRpdmVfdmFsdWUpOwogCi0gICAgaWYgKGludFJlY3Rz
LmlzRW1wdHkoKSB8fCBuID4gaW50UmVjdHMuc2l6ZSgpKQorICAgIGlmIChpbnRSZWN0cy5pc0Vt
cHR5KCkgfHwgbnVtYmVyID4gaW50UmVjdHMuc2l6ZSgpKQogICAgICAgICByZXR1cm4gRUlOQV9G
QUxTRTsKIAogICAgIHN0ZDo6c29ydChpbnRSZWN0cy5iZWdpbigpLCBpbnRSZWN0cy5lbmQoKSwg
X2V3a19mcmFtZV9yZWN0X2NtcF9sZXNzX3RoYW4pOwogCiAgICAgaWYgKHgpCi0gICAgICAgICp4
ID0gaW50UmVjdHNbbiAtIDFdLngoKTsKKyAgICAgICAgKnggPSBpbnRSZWN0c1tudW1iZXIgLSAx
XS54KCk7CiAgICAgaWYgKHkpCi0gICAgICAgICp5ID0gaW50UmVjdHNbbiAtIDFdLnkoKTsKKyAg
ICAgICAgKnkgPSBpbnRSZWN0c1tudW1iZXIgLSAxXS55KCk7CiAgICAgcmV0dXJuIEVJTkFfVFJV
RTsKIH0KIAotRWluYV9Cb29sIGV3a19mcmFtZV9zdG9wKEV2YXNfT2JqZWN0KiBvKQorRWluYV9C
b29sIGV3a19mcmFtZV9zdG9wKEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsKLSAgICBFV0tfRlJB
TUVfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX0ZSQU1FX1NE
X0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKICAgICBzZC0+ZnJh
bWUtPmxvYWRlcigpLT5zdG9wQWxsTG9hZGVycygpOwogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9
CiAKLUVpbmFfQm9vbCBld2tfZnJhbWVfcmVsb2FkKEV2YXNfT2JqZWN0KiBvKQorRWluYV9Cb29s
IGV3a19mcmFtZV9yZWxvYWQoRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewotICAgIEVXS19GUkFN
RV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfRlJBTUVfU0Rf
R0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOwogICAgIHNkLT5mcmFt
ZS0+bG9hZGVyKCktPnJlbG9hZCgpOwogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLUVpbmFf
Qm9vbCBld2tfZnJhbWVfcmVsb2FkX2Z1bGwoRXZhc19PYmplY3QqIG8pCitFaW5hX0Jvb2wgZXdr
X2ZyYW1lX3JlbG9hZF9mdWxsKEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsKLSAgICBFV0tfRlJB
TUVfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX0ZSQU1FX1NE
X0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKICAgICBzZC0+ZnJh
bWUtPmxvYWRlcigpLT5yZWxvYWQodHJ1ZSk7CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAot
RWluYV9Cb29sIGV3a19mcmFtZV9iYWNrKEV2YXNfT2JqZWN0KiBvKQorRWluYV9Cb29sIGV3a19m
cmFtZV9iYWNrKEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsKLSAgICByZXR1cm4gZXdrX2ZyYW1l
X25hdmlnYXRlKG8sIC0xKTsKKyAgICByZXR1cm4gZXdrX2ZyYW1lX25hdmlnYXRlKGV3a0ZyYW1l
LCAtMSk7CiB9CiAKLUVpbmFfQm9vbCBld2tfZnJhbWVfZm9yd2FyZChFdmFzX09iamVjdCogbykK
K0VpbmFfQm9vbCBld2tfZnJhbWVfZm9yd2FyZChFdmFzX09iamVjdCogZXdrRnJhbWUpCiB7Ci0g
ICAgcmV0dXJuIGV3a19mcmFtZV9uYXZpZ2F0ZShvLCAxKTsKKyAgICByZXR1cm4gZXdrX2ZyYW1l
X25hdmlnYXRlKGV3a0ZyYW1lLCAxKTsKIH0KIAotRWluYV9Cb29sIGV3a19mcmFtZV9uYXZpZ2F0
ZShFdmFzX09iamVjdCogbywgaW50IHN0ZXBzKQorRWluYV9Cb29sIGV3a19mcmFtZV9uYXZpZ2F0
ZShFdmFzX09iamVjdCogZXdrRnJhbWUsIGludCBzdGVwcykKIHsKLSAgICBFV0tfRlJBTUVfU0Rf
R0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9P
Ul9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKICAgICBXZWJDb3JlOjpQYWdl
KiBwYWdlID0gc2QtPmZyYW1lLT5wYWdlKCk7CiAgICAgaWYgKCFwYWdlLT5jYW5Hb0JhY2tPckZv
cndhcmQoc3RlcHMpKQpAQCAtNTkyLDE5ICs1OTAsMTkgQEAgRWluYV9Cb29sIGV3a19mcmFtZV9u
YXZpZ2F0ZShFdmFzX09iamVjdCogbywgaW50IHN0ZXBzKQogICAgIHJldHVybiBFSU5BX1RSVUU7
CiB9CiAKLUVpbmFfQm9vbCBld2tfZnJhbWVfYmFja19wb3NzaWJsZShFdmFzX09iamVjdCogbykK
K0VpbmFfQm9vbCBld2tfZnJhbWVfYmFja19wb3NzaWJsZShFdmFzX09iamVjdCogZXdrRnJhbWUp
CiB7Ci0gICAgcmV0dXJuIGV3a19mcmFtZV9uYXZpZ2F0ZV9wb3NzaWJsZShvLCAtMSk7CisgICAg
cmV0dXJuIGV3a19mcmFtZV9uYXZpZ2F0ZV9wb3NzaWJsZShld2tGcmFtZSwgLTEpOwogfQogCi1F
aW5hX0Jvb2wgZXdrX2ZyYW1lX2ZvcndhcmRfcG9zc2libGUoRXZhc19PYmplY3QqIG8pCitFaW5h
X0Jvb2wgZXdrX2ZyYW1lX2ZvcndhcmRfcG9zc2libGUoRXZhc19PYmplY3QqIGV3a0ZyYW1lKQog
ewotICAgIHJldHVybiBld2tfZnJhbWVfbmF2aWdhdGVfcG9zc2libGUobywgMSk7CisgICAgcmV0
dXJuIGV3a19mcmFtZV9uYXZpZ2F0ZV9wb3NzaWJsZShld2tGcmFtZSwgMSk7CiB9CiAKLUVpbmFf
Qm9vbCBld2tfZnJhbWVfbmF2aWdhdGVfcG9zc2libGUoRXZhc19PYmplY3QqIG8sIGludCBzdGVw
cykKK0VpbmFfQm9vbCBld2tfZnJhbWVfbmF2aWdhdGVfcG9zc2libGUoRXZhc19PYmplY3QqIGV3
a0ZyYW1lLCBpbnQgc3RlcHMpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4obywg
c2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1l
LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNk
LT5mcmFtZSwgRUlOQV9GQUxTRSk7CiAgICAgV2ViQ29yZTo6UGFnZSogcGFnZSA9IHNkLT5mcmFt
ZS0+cGFnZSgpOwogICAgIHJldHVybiBwYWdlLT5jYW5Hb0JhY2tPckZvcndhcmQoc3RlcHMpOwpA
QCAtNjQwLDIyICs2MzgsMjIgQEAgRWluYV9Cb29sIGV3a19mcmFtZV90ZXh0X3pvb21fc2V0KEV2
YXNfT2JqZWN0KiBld2tGcmFtZSwgZmxvYXQgdGV4dFpvb21GYWN0b3IpCiAgICAgcmV0dXJuIEVJ
TkFfVFJVRTsKIH0KIAotdm9pZCBld2tfZnJhbWVfaGl0X3Rlc3RfZnJlZShFd2tfSGl0X1Rlc3Qq
IGhpdF90ZXN0KQordm9pZCBld2tfZnJhbWVfaGl0X3Rlc3RfZnJlZShFd2tfSGl0X1Rlc3QqIGhp
dFRlc3QpCiB7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oaGl0X3Rlc3QpOwotICAg
IGVpbmFfc3RyaW5nc2hhcmVfZGVsKGhpdF90ZXN0LT50aXRsZSk7Ci0gICAgZWluYV9zdHJpbmdz
aGFyZV9kZWwoaGl0X3Rlc3QtPmFsdGVybmF0ZV90ZXh0KTsKLSAgICBlaW5hX3N0cmluZ3NoYXJl
X2RlbChoaXRfdGVzdC0+bGluay50ZXh0KTsKLSAgICBlaW5hX3N0cmluZ3NoYXJlX2RlbChoaXRf
dGVzdC0+bGluay51cmwpOwotICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVsKGhpdF90ZXN0LT5saW5r
LnRpdGxlKTsKLSAgICBlaW5hX3N0cmluZ3NoYXJlX2RlbChoaXRfdGVzdC0+aW1hZ2VfdXJpKTsK
LSAgICBlaW5hX3N0cmluZ3NoYXJlX2RlbChoaXRfdGVzdC0+bWVkaWFfdXJpKTsKLSAgICBmcmVl
KGhpdF90ZXN0KTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihoaXRUZXN0KTsKKyAg
ICBlaW5hX3N0cmluZ3NoYXJlX2RlbChoaXRUZXN0LT50aXRsZSk7CisgICAgZWluYV9zdHJpbmdz
aGFyZV9kZWwoaGl0VGVzdC0+YWx0ZXJuYXRlX3RleHQpOworICAgIGVpbmFfc3RyaW5nc2hhcmVf
ZGVsKGhpdFRlc3QtPmxpbmsudGV4dCk7CisgICAgZWluYV9zdHJpbmdzaGFyZV9kZWwoaGl0VGVz
dC0+bGluay51cmwpOworICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVsKGhpdFRlc3QtPmxpbmsudGl0
bGUpOworICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVsKGhpdFRlc3QtPmltYWdlX3VyaSk7CisgICAg
ZWluYV9zdHJpbmdzaGFyZV9kZWwoaGl0VGVzdC0+bWVkaWFfdXJpKTsKKyAgICBmcmVlKGhpdFRl
c3QpOwogfQogCi1Fd2tfSGl0X1Rlc3QqIGV3a19mcmFtZV9oaXRfdGVzdF9uZXcoY29uc3QgRXZh
c19PYmplY3QqIG8sIGludCB4LCBpbnQgeSkKK0V3a19IaXRfVGVzdCogZXdrX2ZyYW1lX2hpdF90
ZXN0X25ldyhjb25zdCBFdmFzX09iamVjdCogZXdrRnJhbWUsIGludCB4LCBpbnQgeSkKIHsKLSAg
ICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgMCk7CisgICAgRVdLX0ZSQU1FX1NE
X0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCAwKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTl9WQUwoc2QtPmZyYW1lLCAwKTsKIAogICAgIFdlYkNvcmU6OkZyYW1lVmlldyogdmll
dyA9IHNkLT5mcmFtZS0+dmlldygpOwpAQCAtNzI2LDE5ICs3MjQsMTkgQEAgRXdrX0hpdF9UZXN0
KiBld2tfZnJhbWVfaGl0X3Rlc3RfbmV3KGNvbnN0IEV2YXNfT2JqZWN0KiBvLCBpbnQgeCwgaW50
IHkpCiB9CiAKIEVpbmFfQm9vbAotZXdrX2ZyYW1lX3Njcm9sbF9hZGQoRXZhc19PYmplY3QqIG8s
IGludCBkeCwgaW50IGR5KQorZXdrX2ZyYW1lX3Njcm9sbF9hZGQoRXZhc19PYmplY3QqIGV3a0Zy
YW1lLCBpbnQgZGVsdGFYLCBpbnQgZGVsdGFZKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1Jf
UkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVS
Tihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOX1ZBTChzZC0+ZnJhbWUtPnZpZXcoKSwgRUlOQV9GQUxTRSk7Ci0gICAgc2QtPmZyYW1l
LT52aWV3KCktPnNjcm9sbEJ5KFdlYkNvcmU6OkludFNpemUoZHgsIGR5KSk7CisgICAgc2QtPmZy
YW1lLT52aWV3KCktPnNjcm9sbEJ5KFdlYkNvcmU6OkludFNpemUoZGVsdGFYLCBkZWx0YVkpKTsK
ICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCiBFaW5hX0Jvb2wKLWV3a19mcmFtZV9zY3JvbGxf
c2V0KEV2YXNfT2JqZWN0KiBvLCBpbnQgeCwgaW50IHkpCitld2tfZnJhbWVfc2Nyb2xsX3NldChF
dmFzX09iamVjdCogZXdrRnJhbWUsIGludCB4LCBpbnQgeSkKIHsKLSAgICBFV0tfRlJBTUVfU0Rf
R0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9P
Ul9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLT52aWV3KCksIEVJTkFfRkFMU0UpOwogICAgIHNk
LT5mcmFtZS0+dmlldygpLT5zZXRTY3JvbGxQb3NpdGlvbihXZWJDb3JlOjpJbnRQb2ludCh4LCB5
KSk7CkBAIC03NDYsMzEgKzc0NCwzMSBAQCBld2tfZnJhbWVfc2Nyb2xsX3NldChFdmFzX09iamVj
dCogbywgaW50IHgsIGludCB5KQogfQogCiBFaW5hX0Jvb2wKLWV3a19mcmFtZV9zY3JvbGxfc2l6
ZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIG8sIGludCogdywgaW50KiBoKQorZXdrX2ZyYW1lX3Nj
cm9sbF9zaXplX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrRnJhbWUsIGludCogd2lkdGgsIGlu
dCogaGVpZ2h0KQogewotICAgIGlmICh3KQotICAgICAgICAqdyA9IDA7Ci0gICAgaWYgKGgpCi0g
ICAgICAgICpoID0gMDsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlO
QV9GQUxTRSk7CisgICAgaWYgKHdpZHRoKQorICAgICAgICAqd2lkdGggPSAwOworICAgIGlmICho
ZWlnaHQpCisgICAgICAgICpoZWlnaHQgPSAwOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVU
VVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk5fVkFMKHNkLT5mcmFtZS0+dmlldygpLCBFSU5BX0ZBTFNFKTsKICAgICBXZWJDb3Jl
OjpJbnRQb2ludCBwb2ludCA9IHNkLT5mcmFtZS0+dmlldygpLT5tYXhpbXVtU2Nyb2xsUG9zaXRp
b24oKTsKLSAgICBpZiAodykKLSAgICAgICAgKncgPSBwb2ludC54KCk7Ci0gICAgaWYgKGgpCi0g
ICAgICAgICpoID0gcG9pbnQueSgpOworICAgIGlmICh3aWR0aCkKKyAgICAgICAgKndpZHRoID0g
cG9pbnQueCgpOworICAgIGlmIChoZWlnaHQpCisgICAgICAgICpoZWlnaHQgPSBwb2ludC55KCk7
CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAogRWluYV9Cb29sCi1ld2tfZnJhbWVfc2Nyb2xs
X3Bvc19nZXQoY29uc3QgRXZhc19PYmplY3QqIG8sIGludCogeCwgaW50KiB5KQorZXdrX2ZyYW1l
X3Njcm9sbF9wb3NfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgaW50KiB4LCBpbnQq
IHkpCiB7CiAgICAgaWYgKHgpCiAgICAgICAgICp4ID0gMDsKICAgICBpZiAoeSkKICAgICAgICAg
KnkgPSAwOwotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNF
KTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFM
U0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFf
RkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUtPnZp
ZXcoKSwgRUlOQV9GQUxTRSk7CiAgICAgV2ViQ29yZTo6SW50UG9pbnQgcG9zID0gc2QtPmZyYW1l
LT52aWV3KCktPnNjcm9sbFBvc2l0aW9uKCk7CkBAIC03ODEsMTQwICs3NzksMTQwIEBAIGV3a19m
cmFtZV9zY3JvbGxfcG9zX2dldChjb25zdCBFdmFzX09iamVjdCogbywgaW50KiB4LCBpbnQqIHkp
CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotRWluYV9Cb29sIGV3a19mcmFtZV92aXNpYmxl
X2NvbnRlbnRfZ2VvbWV0cnlfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wgaW5j
bHVkZV9zY3JvbGxiYXJzLCBpbnQqIHgsIGludCogeSwgaW50KiB3LCBpbnQqIGgpCitFaW5hX0Jv
b2wgZXdrX2ZyYW1lX3Zpc2libGVfY29udGVudF9nZW9tZXRyeV9nZXQoY29uc3QgRXZhc19PYmpl
Y3QqIGV3a0ZyYW1lLCBFaW5hX0Jvb2wgaW5jbHVkZVNjcm9sbGJhcnMsIGludCogeCwgaW50KiB5
LCBpbnQqIHdpZHRoLCBpbnQqIGhlaWdodCkKIHsKICAgICBpZiAoeCkKICAgICAgICAgKnggPSAw
OwogICAgIGlmICh5KQogICAgICAgICAqeSA9IDA7Ci0gICAgaWYgKHcpCi0gICAgICAgICp3ID0g
MDsKLSAgICBpZiAoaCkKLSAgICAgICAgKmggPSAwOwotICAgIEVXS19GUkFNRV9TRF9HRVRfT1Jf
UkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBpZiAod2lkdGgpCisgICAgICAgICp3aWR0
aCA9IDA7CisgICAgaWYgKGhlaWdodCkKKyAgICAgICAgKmhlaWdodCA9IDA7CisgICAgRVdLX0ZS
QU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKICAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLT52aWV3KCksIEVJTkFfRkFM
U0UpOwotICAgIFdlYkNvcmU6OkludFJlY3QgcmVjdCA9IHNkLT5mcmFtZS0+dmlldygpLT52aXNp
YmxlQ29udGVudFJlY3QoaW5jbHVkZV9zY3JvbGxiYXJzKTsKKyAgICBXZWJDb3JlOjpJbnRSZWN0
IHJlY3QgPSBzZC0+ZnJhbWUtPnZpZXcoKS0+dmlzaWJsZUNvbnRlbnRSZWN0KGluY2x1ZGVTY3Jv
bGxiYXJzKTsKICAgICBpZiAoeCkKICAgICAgICAgKnggPSByZWN0LngoKTsKICAgICBpZiAoeSkK
ICAgICAgICAgKnkgPSByZWN0LnkoKTsKLSAgICBpZiAodykKLSAgICAgICAgKncgPSByZWN0Lndp
ZHRoKCk7Ci0gICAgaWYgKGgpCi0gICAgICAgICpoID0gcmVjdC5oZWlnaHQoKTsKKyAgICBpZiAo
d2lkdGgpCisgICAgICAgICp3aWR0aCA9IHJlY3Qud2lkdGgoKTsKKyAgICBpZiAoaGVpZ2h0KQor
ICAgICAgICAqaGVpZ2h0ID0gcmVjdC5oZWlnaHQoKTsKICAgICByZXR1cm4gRUlOQV9UUlVFOwog
fQogCi1FaW5hX0Jvb2wgZXdrX2ZyYW1lX3BhaW50X2Z1bGxfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0
KiBvKQorRWluYV9Cb29sIGV3a19mcmFtZV9wYWludF9mdWxsX2dldChjb25zdCBFdmFzX09iamVj
dCogZXdrRnJhbWUpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJ
TkFfRkFMU0UpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwg
RUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFt
ZSwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5m
cmFtZS0+dmlldygpLCBFSU5BX0ZBTFNFKTsKICAgICByZXR1cm4gc2QtPmZyYW1lLT52aWV3KCkt
PnBhaW50c0VudGlyZUNvbnRlbnRzKCk7CiB9CiAKLXZvaWQgZXdrX2ZyYW1lX3BhaW50X2Z1bGxf
c2V0KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wgZmxhZykKK3ZvaWQgZXdrX2ZyYW1lX3BhaW50
X2Z1bGxfc2V0KEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgRWluYV9Cb29sIGZsYWcpCiB7Ci0gICAg
RVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4obywgc2QpOworICAgIEVXS19GUkFNRV9TRF9HRVRf
T1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4o
c2QtPmZyYW1lKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+ZnJhbWUtPnZp
ZXcoKSk7CiAgICAgc2QtPmZyYW1lLT52aWV3KCktPnNldFBhaW50c0VudGlyZUNvbnRlbnRzKGZs
YWcpOwogfQogCi1FaW5hX0Jvb2wgZXdrX2ZyYW1lX2ZlZWRfZm9jdXNfaW4oRXZhc19PYmplY3Qq
IG8pCitFaW5hX0Jvb2wgZXdrX2ZyYW1lX2ZlZWRfZm9jdXNfaW4oRXZhc19PYmplY3QqIGV3a0Zy
YW1lKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNF
KTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFM
U0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFf
RkFMU0UpOwogICAgIFdlYkNvcmU6OkZvY3VzQ29udHJvbGxlciogYyA9IHNkLT5mcmFtZS0+cGFn
ZSgpLT5mb2N1c0NvbnRyb2xsZXIoKTsKICAgICBjLT5zZXRGb2N1c2VkRnJhbWUoc2QtPmZyYW1l
KTsKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi1FaW5hX0Jvb2wgZXdrX2ZyYW1lX2ZlZWRf
Zm9jdXNfb3V0KEV2YXNfT2JqZWN0KiBvKQorRWluYV9Cb29sIGV3a19mcmFtZV9mZWVkX2ZvY3Vz
X291dChFdmFzX09iamVjdCogZXdrRnJhbWUpCiB7CiAgICAgLy8gVE9ETzogd2hhdCB0byBkbyBv
biBmb2N1cyBvdXQ/CiAgICAgRVJSKCJ3aGF0IHRvIGRvPyIpOwogICAgIHJldHVybiBFSU5BX0ZB
TFNFOwogfQogCi1FaW5hX0Jvb2wgZXdrX2ZyYW1lX2ZlZWRfbW91c2Vfd2hlZWwoRXZhc19PYmpl
Y3QqIG8sIGNvbnN0IEV2YXNfRXZlbnRfTW91c2VfV2hlZWwqIGV2KQorRWluYV9Cb29sIGV3a19m
cmFtZV9mZWVkX21vdXNlX3doZWVsKEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgY29uc3QgRXZhc19F
dmVudF9Nb3VzZV9XaGVlbCogd2hlZWxFdmVudCkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09S
X1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRV
Uk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTl9WQUwoZXYsIEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOX1ZBTCh3aGVlbEV2ZW50LCBFSU5BX0ZBTFNFKTsKIAogICAgIFdlYkNvcmU6OkZyYW1lVmll
dyogdmlldyA9IHNkLT5mcmFtZS0+dmlldygpOwotICAgIERCRygibz0lcCwgdmlldz0lcCwgZGly
ZWN0aW9uPSVkLCB6PSVkLCBwb3M9JWQsJWQiLAotICAgICAgICBvLCB2aWV3LCBldi0+ZGlyZWN0
aW9uLCBldi0+eiwgZXYtPmNhbnZhcy54LCBldi0+Y2FudmFzLnkpOworICAgIERCRygiZXdrRnJh
bWU9JXAsIHZpZXc9JXAsIGRpcmVjdGlvbj0lZCwgej0lZCwgcG9zPSVkLCVkIiwKKyAgICAgICAg
ZXdrRnJhbWUsIHZpZXcsIHdoZWVsRXZlbnQtPmRpcmVjdGlvbiwgd2hlZWxFdmVudC0+eiwgd2hl
ZWxFdmVudC0+Y2FudmFzLngsIHdoZWVsRXZlbnQtPmNhbnZhcy55KTsKICAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTl9WQUwodmlldywgRUlOQV9GQUxTRSk7CiAKLSAgICBXZWJDb3JlOjpQ
bGF0Zm9ybVdoZWVsRXZlbnQgZXZlbnQoZXYpOworICAgIFdlYkNvcmU6OlBsYXRmb3JtV2hlZWxF
dmVudCBldmVudCh3aGVlbEV2ZW50KTsKICAgICByZXR1cm4gc2QtPmZyYW1lLT5ldmVudEhhbmRs
ZXIoKS0+aGFuZGxlV2hlZWxFdmVudChldmVudCk7CiB9CiAKLUVpbmFfQm9vbCBld2tfZnJhbWVf
ZmVlZF9tb3VzZV9kb3duKEV2YXNfT2JqZWN0KiBvLCBjb25zdCBFdmFzX0V2ZW50X01vdXNlX0Rv
d24qIGV2KQorRWluYV9Cb29sIGV3a19mcmFtZV9mZWVkX21vdXNlX2Rvd24oRXZhc19PYmplY3Qq
IGV3a0ZyYW1lLCBjb25zdCBFdmFzX0V2ZW50X01vdXNlX0Rvd24qIGRvd25FdmVudCkKIHsKLSAg
ICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdL
X0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKLSAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZXYsIEVJTkFfRkFMU0UpOworICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChkb3duRXZlbnQsIEVJTkFfRkFMU0UpOwogCiAg
ICAgV2ViQ29yZTo6RnJhbWVWaWV3KiB2aWV3ID0gc2QtPmZyYW1lLT52aWV3KCk7Ci0gICAgREJH
KCJvPSVwLCB2aWV3PSVwLCBidXR0b249JWQsIHBvcz0lZCwlZCIsCi0gICAgICAgIG8sIHZpZXcs
IGV2LT5idXR0b24sIGV2LT5jYW52YXMueCwgZXYtPmNhbnZhcy55KTsKKyAgICBEQkcoImV3a0Zy
YW1lPSVwLCB2aWV3PSVwLCBidXR0b249JWQsIHBvcz0lZCwlZCIsCisgICAgICAgIGV3a0ZyYW1l
LCB2aWV3LCBkb3duRXZlbnQtPmJ1dHRvbiwgZG93bkV2ZW50LT5jYW52YXMueCwgZG93bkV2ZW50
LT5jYW52YXMueSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHZpZXcsIEVJ
TkFfRkFMU0UpOwogCiAgICAgRXZhc19Db29yZCB4LCB5OwogICAgIGV2YXNfb2JqZWN0X2dlb21l
dHJ5X2dldChzZC0+dmlldywgJngsICZ5LCAwLCAwKTsKIAotICAgIFdlYkNvcmU6OlBsYXRmb3Jt
TW91c2VFdmVudCBldmVudChldiwgV2ViQ29yZTo6SW50UG9pbnQoeCwgeSkpOworICAgIFdlYkNv
cmU6OlBsYXRmb3JtTW91c2VFdmVudCBldmVudChkb3duRXZlbnQsIFdlYkNvcmU6OkludFBvaW50
KHgsIHkpKTsKICAgICByZXR1cm4gc2QtPmZyYW1lLT5ldmVudEhhbmRsZXIoKS0+aGFuZGxlTW91
c2VQcmVzc0V2ZW50KGV2ZW50KTsKIH0KIAotRWluYV9Cb29sIGV3a19mcmFtZV9mZWVkX21vdXNl
X3VwKEV2YXNfT2JqZWN0KiBvLCBjb25zdCBFdmFzX0V2ZW50X01vdXNlX1VwKiBldikKK0VpbmFf
Qm9vbCBld2tfZnJhbWVfZmVlZF9tb3VzZV91cChFdmFzX09iamVjdCogZXdrRnJhbWUsIGNvbnN0
IEV2YXNfRXZlbnRfTW91c2VfVXAqIHVwRXZlbnQpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9P
Ul9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVU
VVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk5fVkFMKGV2LCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTl9WQUwodXBFdmVudCwgRUlOQV9GQUxTRSk7CiAKICAgICBXZWJDb3JlOjpGcmFtZVZpZXcq
IHZpZXcgPSBzZC0+ZnJhbWUtPnZpZXcoKTsKLSAgICBEQkcoIm89JXAsIHZpZXc9JXAsIGJ1dHRv
bj0lZCwgcG9zPSVkLCVkIiwKLSAgICAgICAgbywgdmlldywgZXYtPmJ1dHRvbiwgZXYtPmNhbnZh
cy54LCBldi0+Y2FudmFzLnkpOworICAgIERCRygiZXdrRnJhbWU9JXAsIHZpZXc9JXAsIGJ1dHRv
bj0lZCwgcG9zPSVkLCVkIiwKKyAgICAgICAgZXdrRnJhbWUsIHZpZXcsIHVwRXZlbnQtPmJ1dHRv
biwgdXBFdmVudC0+Y2FudmFzLngsIHVwRXZlbnQtPmNhbnZhcy55KTsKICAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTl9WQUwodmlldywgRUlOQV9GQUxTRSk7CiAKICAgICBFdmFzX0Nvb3Jk
IHgsIHk7CiAgICAgZXZhc19vYmplY3RfZ2VvbWV0cnlfZ2V0KHNkLT52aWV3LCAmeCwgJnksIDAs
IDApOwogCi0gICAgV2ViQ29yZTo6UGxhdGZvcm1Nb3VzZUV2ZW50IGV2ZW50KGV2LCBXZWJDb3Jl
OjpJbnRQb2ludCh4LCB5KSk7CisgICAgV2ViQ29yZTo6UGxhdGZvcm1Nb3VzZUV2ZW50IGV2ZW50
KHVwRXZlbnQsIFdlYkNvcmU6OkludFBvaW50KHgsIHkpKTsKICAgICByZXR1cm4gc2QtPmZyYW1l
LT5ldmVudEhhbmRsZXIoKS0+aGFuZGxlTW91c2VSZWxlYXNlRXZlbnQoZXZlbnQpOwogfQogCi1F
aW5hX0Jvb2wgZXdrX2ZyYW1lX2ZlZWRfbW91c2VfbW92ZShFdmFzX09iamVjdCogbywgY29uc3Qg
RXZhc19FdmVudF9Nb3VzZV9Nb3ZlKiBldikKK0VpbmFfQm9vbCBld2tfZnJhbWVfZmVlZF9tb3Vz
ZV9tb3ZlKEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgY29uc3QgRXZhc19FdmVudF9Nb3VzZV9Nb3Zl
KiBtb3ZlRXZlbnQpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJ
TkFfRkFMU0UpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwg
RUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFt
ZSwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGV2LCBF
SU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwobW92ZUV2ZW50
LCBFSU5BX0ZBTFNFKTsKIAogICAgIFdlYkNvcmU6OkZyYW1lVmlldyogdmlldyA9IHNkLT5mcmFt
ZS0+dmlldygpOwotICAgIERCRygibz0lcCwgdmlldz0lcCwgcG9zOiBvbGQ9JWQsJWQsIG5ldz0l
ZCwlZCwgYnV0dG9ucz0lZCIsCi0gICAgICAgIG8sIHZpZXcsIGV2LT5jdXIuY2FudmFzLngsIGV2
LT5jdXIuY2FudmFzLnksCi0gICAgICAgIGV2LT5wcmV2LmNhbnZhcy54LCBldi0+cHJldi5jYW52
YXMueSwgZXYtPmJ1dHRvbnMpOworICAgIERCRygiZXdrRnJhbWU9JXAsIHZpZXc9JXAsIHBvczog
b2xkPSVkLCVkLCBuZXc9JWQsJWQsIGJ1dHRvbnM9JWQiLAorICAgICAgICBld2tGcmFtZSwgdmll
dywgbW92ZUV2ZW50LT5jdXIuY2FudmFzLngsIG1vdmVFdmVudC0+Y3VyLmNhbnZhcy55LAorICAg
ICAgICBtb3ZlRXZlbnQtPnByZXYuY2FudmFzLngsIG1vdmVFdmVudC0+cHJldi5jYW52YXMueSwg
bW92ZUV2ZW50LT5idXR0b25zKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwo
dmlldywgRUlOQV9GQUxTRSk7CiAKICAgICBFdmFzX0Nvb3JkIHgsIHk7CiAgICAgZXZhc19vYmpl
Y3RfZ2VvbWV0cnlfZ2V0KHNkLT52aWV3LCAmeCwgJnksIDAsIDApOwogCi0gICAgV2ViQ29yZTo6
UGxhdGZvcm1Nb3VzZUV2ZW50IGV2ZW50KGV2LCBXZWJDb3JlOjpJbnRQb2ludCh4LCB5KSk7Cisg
ICAgV2ViQ29yZTo6UGxhdGZvcm1Nb3VzZUV2ZW50IGV2ZW50KG1vdmVFdmVudCwgV2ViQ29yZTo6
SW50UG9pbnQoeCwgeSkpOwogICAgIHJldHVybiBzZC0+ZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5t
b3VzZU1vdmVkKGV2ZW50KTsKIH0KIAotRWluYV9Cb29sIGV3a19mcmFtZV9mZWVkX3RvdWNoX2V2
ZW50KEV2YXNfT2JqZWN0KiBvLCBFd2tfVG91Y2hfRXZlbnRfVHlwZSBhY3Rpb24sIEVpbmFfTGlz
dCogcG9pbnRzLCBpbnQgbWV0YVN0YXRlKQorRWluYV9Cb29sIGV3a19mcmFtZV9mZWVkX3RvdWNo
X2V2ZW50KEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgRXdrX1RvdWNoX0V2ZW50X1R5cGUgYWN0aW9u
LCBFaW5hX0xpc3QqIHBvaW50cywgaW50IG1ldGFTdGF0ZSkKIHsKICAgICBFaW5hX0Jvb2wgcmV0
ID0gRUlOQV9GQUxTRTsKIAogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCiAgICAgRUlOQV9TQUZF
VFlfT05fTlVMTF9SRVRVUk5fVkFMKHBvaW50cywgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX0ZSQU1F
X1NEX0dFVChvLCBzZCk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVChld2tGcmFtZSwgc2QpOwogCiAg
ICAgaWYgKCFzZCB8fCAhc2QtPmZyYW1lIHx8ICFld2tfdmlld19uZWVkX3RvdWNoX2V2ZW50c19n
ZXQoc2QtPnZpZXcpKQogICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKQEAgLTk0NiwxNyArOTQ0
LDE3IEBAIEVpbmFfQm9vbCBld2tfZnJhbWVfZmVlZF90b3VjaF9ldmVudChFdmFzX09iamVjdCog
bywgRXdrX1RvdWNoX0V2ZW50X1R5cGUgYWN0aW9uCiAgICAgcmV0dXJuIHJldDsKIH0KIAotc3Rh
dGljIGlubGluZSBFaW5hX0Jvb2wgX2V3a19mcmFtZV9oYW5kbGVfa2V5X3Njcm9sbGluZyhXZWJD
b3JlOjpGcmFtZSogZnJhbWUsIGNvbnN0IFdlYkNvcmU6OlBsYXRmb3JtS2V5Ym9hcmRFdmVudCYg
ZXZlbnQpCitzdGF0aWMgaW5saW5lIEVpbmFfQm9vbCBfZXdrX2ZyYW1lX2hhbmRsZV9rZXlfc2Ny
b2xsaW5nKFdlYkNvcmU6OkZyYW1lKiBmcmFtZSwgY29uc3QgV2ViQ29yZTo6UGxhdGZvcm1LZXli
b2FyZEV2ZW50JiBrZXlFdmVudCkKIHsKICAgICBXZWJDb3JlOjpTY3JvbGxEaXJlY3Rpb24gZGly
ZWN0aW9uOwogICAgIFdlYkNvcmU6OlNjcm9sbEdyYW51bGFyaXR5IGdyYW51bGFyaXR5OwogCi0g
ICAgaW50IGtleUNvZGUgPSBldmVudC53aW5kb3dzVmlydHVhbEtleUNvZGUoKTsKKyAgICBpbnQg
a2V5Q29kZSA9IGtleUV2ZW50LndpbmRvd3NWaXJ0dWFsS2V5Q29kZSgpOwogCiAgICAgc3dpdGNo
IChrZXlDb2RlKSB7CiAgICAgY2FzZSBWS19TUEFDRToKICAgICAgICAgZ3JhbnVsYXJpdHkgPSBX
ZWJDb3JlOjpTY3JvbGxCeVBhZ2U7Ci0gICAgICAgIGlmIChldmVudC5zaGlmdEtleSgpKQorICAg
ICAgICBpZiAoa2V5RXZlbnQuc2hpZnRLZXkoKSkKICAgICAgICAgICAgIGRpcmVjdGlvbiA9IFdl
YkNvcmU6OlNjcm9sbFVwOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBkaXJlY3Rpb24gPSBX
ZWJDb3JlOjpTY3JvbGxEb3duOwpAQCAtOTg3LDE0ICs5ODUsMTQgQEAgc3RhdGljIGlubGluZSBF
aW5hX0Jvb2wgX2V3a19mcmFtZV9oYW5kbGVfa2V5X3Njcm9sbGluZyhXZWJDb3JlOjpGcmFtZSog
ZnJhbWUsIGMKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBWS19VUDoKICAgICAgICAgZGlyZWN0
aW9uID0gV2ViQ29yZTo6U2Nyb2xsVXA7Ci0gICAgICAgIGlmIChldmVudC5jdHJsS2V5KCkpCisg
ICAgICAgIGlmIChrZXlFdmVudC5jdHJsS2V5KCkpCiAgICAgICAgICAgICBncmFudWxhcml0eSA9
IFdlYkNvcmU6OlNjcm9sbEJ5RG9jdW1lbnQ7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGdy
YW51bGFyaXR5ID0gV2ViQ29yZTo6U2Nyb2xsQnlMaW5lOwogICAgICAgICBicmVhazsKICAgICBj
YXNlIFZLX0RPV046CiAgICAgICAgIGRpcmVjdGlvbiA9IFdlYkNvcmU6OlNjcm9sbERvd247Ci0g
ICAgICAgIGlmIChldmVudC5jdHJsS2V5KCkpCisgICAgICAgIGlmIChrZXlFdmVudC5jdHJsS2V5
KCkpCiAgICAgICAgICAgICBncmFudWxhcml0eSA9IFdlYkNvcmU6OlNjcm9sbEJ5RG9jdW1lbnQ7
CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGdyYW51bGFyaXR5ID0gV2ViQ29yZTo6U2Nyb2xs
QnlMaW5lOwpAQCAtMTAxMCwzOCArMTAwOCwzOCBAQCBzdGF0aWMgaW5saW5lIEVpbmFfQm9vbCBf
ZXdrX2ZyYW1lX2hhbmRsZV9rZXlfc2Nyb2xsaW5nKFdlYkNvcmU6OkZyYW1lKiBmcmFtZSwgYwog
ICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLUVpbmFfQm9vbCBld2tfZnJhbWVfZmVlZF9rZXlf
ZG93bihFdmFzX09iamVjdCogbywgY29uc3QgRXZhc19FdmVudF9LZXlfRG93biogZXYpCitFaW5h
X0Jvb2wgZXdrX2ZyYW1lX2ZlZWRfa2V5X2Rvd24oRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBjb25z
dCBFdmFzX0V2ZW50X0tleV9Eb3duKiBkb3duRXZlbnQpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dF
VF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1Jf
UkVUVVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk5fVkFMKGV2LCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTl9WQUwoZG93bkV2ZW50LCBFSU5BX0ZBTFNFKTsKIAotICAgIERCRygibz0lcCBrZXlu
YW1lPSVzIChrZXk9JXMsIHN0cmluZz0lcykiLAotICAgICAgICBvLCBldi0+a2V5bmFtZSwgZXYt
PmtleSA/IGV2LT5rZXkgOiAiIiwgZXYtPnN0cmluZyA/IGV2LT5zdHJpbmcgOiAiIik7CisgICAg
REJHKCJld2tGcmFtZT0lcCBrZXluYW1lPSVzIChrZXk9JXMsIHN0cmluZz0lcykiLAorICAgICAg
ICBld2tGcmFtZSwgZG93bkV2ZW50LT5rZXluYW1lLCBkb3duRXZlbnQtPmtleSA/IGRvd25FdmVu
dC0+a2V5IDogIiIsIGRvd25FdmVudC0+c3RyaW5nID8gZG93bkV2ZW50LT5zdHJpbmcgOiAiIik7
CiAKLSAgICBXZWJDb3JlOjpQbGF0Zm9ybUtleWJvYXJkRXZlbnQgZXZlbnQoZXYpOworICAgIFdl
YkNvcmU6OlBsYXRmb3JtS2V5Ym9hcmRFdmVudCBldmVudChkb3duRXZlbnQpOwogICAgIGlmIChz
ZC0+ZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5rZXlFdmVudChldmVudCkpCiAgICAgICAgIHJldHVy
biBFSU5BX1RSVUU7CiAKICAgICByZXR1cm4gX2V3a19mcmFtZV9oYW5kbGVfa2V5X3Njcm9sbGlu
ZyhzZC0+ZnJhbWUsIGV2ZW50KTsKIH0KIAotRWluYV9Cb29sIGV3a19mcmFtZV9mZWVkX2tleV91
cChFdmFzX09iamVjdCogbywgY29uc3QgRXZhc19FdmVudF9LZXlfVXAqIGV2KQorRWluYV9Cb29s
IGV3a19mcmFtZV9mZWVkX2tleV91cChFdmFzX09iamVjdCogZXdrRnJhbWUsIGNvbnN0IEV2YXNf
RXZlbnRfS2V5X1VwKiB1cEV2ZW50KQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJO
KG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tG
cmFtZSwgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZB
TChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJO
X1ZBTChldiwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFM
KHVwRXZlbnQsIEVJTkFfRkFMU0UpOwogCi0gICAgREJHKCJvPSVwIGtleW5hbWU9JXMgKGtleT0l
cywgc3RyaW5nPSVzKSIsCi0gICAgICAgIG8sIGV2LT5rZXluYW1lLCBldi0+a2V5ID8gZXYtPmtl
eSA6ICIiLCBldi0+c3RyaW5nID8gZXYtPnN0cmluZyA6ICIiKTsKKyAgICBEQkcoImV3a0ZyYW1l
PSVwIGtleW5hbWU9JXMgKGtleT0lcywgc3RyaW5nPSVzKSIsCisgICAgICAgIGV3a0ZyYW1lLCB1
cEV2ZW50LT5rZXluYW1lLCB1cEV2ZW50LT5rZXkgPyB1cEV2ZW50LT5rZXkgOiAiIiwgdXBFdmVu
dC0+c3RyaW5nID8gdXBFdmVudC0+c3RyaW5nIDogIiIpOwogCi0gICAgV2ViQ29yZTo6UGxhdGZv
cm1LZXlib2FyZEV2ZW50IGV2ZW50KGV2KTsKKyAgICBXZWJDb3JlOjpQbGF0Zm9ybUtleWJvYXJk
RXZlbnQgZXZlbnQodXBFdmVudCk7CiAgICAgcmV0dXJuIHNkLT5mcmFtZS0+ZXZlbnRIYW5kbGVy
KCktPmtleUV2ZW50KGV2ZW50KTsKIH0KIAotRXdrX1RleHRfU2VsZWN0aW9uX1R5cGUgZXdrX2Zy
YW1lX3RleHRfc2VsZWN0aW9uX3R5cGVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQorRXdrX1Rl
eHRfU2VsZWN0aW9uX1R5cGUgZXdrX2ZyYW1lX3RleHRfc2VsZWN0aW9uX3R5cGVfZ2V0KGNvbnN0
IEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVS
TihvLCBzZCwgRVdLX1RFWFRfU0VMRUNUSU9OX05PTkUpOworICAgIEVXS19GUkFNRV9TRF9HRVRf
T1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgRVdLX1RFWFRfU0VMRUNUSU9OX05PTkUpOwogICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVXS19URVhUX1NFTEVDVElP
Tl9OT05FKTsKIAogICAgIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uKiBjb250cm9sbGVyID0gc2Qt
PmZyYW1lLT5zZWxlY3Rpb24oKTsKQEAgLTEwNjksMTMgKzEwNjcsMTMgQEAgRXdrX1RleHRfU2Vs
ZWN0aW9uX1R5cGUgZXdrX2ZyYW1lX3RleHRfc2VsZWN0aW9uX3R5cGVfZ2V0KGNvbnN0IEV2YXNf
T2JqZWN0KiBvKQogICogYnkgYSB2aWV3LiBVc3VhbGx5IG9uZSBvcGVyYXRlcyBvbiB0aGUgdmll
dyBhbmQgbm90IGRpcmVjdGx5IG9uIHRoZQogICogZnJhbWUuCiAgKgotICogQHBhcmFtIGUgY2Fu
dmFzIHdoZXJlIHRvIGNyZWF0ZSB0aGUgZnJhbWUgb2JqZWN0CisgKiBAcGFyYW0gY2FudmFzIGNh
bnZhcyB3aGVyZSB0byBjcmVhdGUgdGhlIGZyYW1lIG9iamVjdAogICoKICAqIEByZXR1cm4gYSBu
ZXcgZnJhbWUgb2JqZWN0IG9yIEBjIDAgb24gZmFpbHVyZQogICovCi1FdmFzX09iamVjdCogZXdr
X2ZyYW1lX2FkZChFdmFzKiBlKQorRXZhc19PYmplY3QqIGV3a19mcmFtZV9hZGQoRXZhcyogY2Fu
dmFzKQogewotICAgIHJldHVybiBldmFzX29iamVjdF9zbWFydF9hZGQoZSwgX2V3a19mcmFtZV9z
bWFydF9jbGFzc19uZXcoKSk7CisgICAgcmV0dXJuIGV2YXNfb2JqZWN0X3NtYXJ0X2FkZChjYW52
YXMsIF9ld2tfZnJhbWVfc21hcnRfY2xhc3NfbmV3KCkpOwogfQogCiAvKioKQEAgLTEwODUsMTIg
KzEwODMsMTIgQEAgRXZhc19PYmplY3QqIGV3a19mcmFtZV9hZGQoRXZhcyogZSkKICAqCiAgKiBU
aGlzIGlzIGludGVybmFsIGFuZCBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIGJ5IGV4dGVybmFsIHVz
ZXJzLgogICovCi1FaW5hX0Jvb2wgZXdrX2ZyYW1lX2luaXQoRXZhc19PYmplY3QqIG8sIEV2YXNf
T2JqZWN0KiB2aWV3LCBXZWJDb3JlOjpGcmFtZSogZnJhbWUpCitFaW5hX0Jvb2wgZXdrX2ZyYW1l
X2luaXQoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBFdmFzX09iamVjdCogdmlldywgV2ViQ29yZTo6
RnJhbWUqIGZyYW1lKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBF
SU5BX0ZBTFNFKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2Qs
IEVJTkFfRkFMU0UpOwogICAgIGlmICghc2QtPmZyYW1lKSB7CiAgICAgICAgIFdlYkNvcmU6OkZy
YW1lTG9hZGVyQ2xpZW50RWZsKiBmbGMgPSBfZXdrX2ZyYW1lX2xvYWRlcl9lZmxfZ2V0KGZyYW1l
KTsKLSAgICAgICAgZmxjLT5zZXRXZWJGcmFtZShvKTsKKyAgICAgICAgZmxjLT5zZXRXZWJGcmFt
ZShld2tGcmFtZSk7CiAgICAgICAgIHNkLT5mcmFtZSA9IGZyYW1lOwogICAgICAgICBzZC0+dmll
dyA9IHZpZXc7CiAgICAgICAgIGZyYW1lLT5pbml0KCk7CkBAIC0xMDk4LDcgKzEwOTYsNyBAQCBF
aW5hX0Jvb2wgZXdrX2ZyYW1lX2luaXQoRXZhc19PYmplY3QqIG8sIEV2YXNfT2JqZWN0KiB2aWV3
LCBXZWJDb3JlOjpGcmFtZSogZnJhbQogICAgIH0KIAogICAgIEVSUigiZnJhbWUgJXAgYWxyZWFk
eSBzZXQgZm9yICVwLCBpZ25vcmVkIG5ldyAlcCIsCi0gICAgICAgIHNkLT5mcmFtZSwgbywgZnJh
bWUpOworICAgICAgICBzZC0+ZnJhbWUsIGV3a0ZyYW1lLCBmcmFtZSk7CiAgICAgcmV0dXJuIEVJ
TkFfRkFMU0U7CiB9CiAKQEAgLTExMDcsOSArMTEwNSw5IEBAIEVpbmFfQm9vbCBld2tfZnJhbWVf
aW5pdChFdmFzX09iamVjdCogbywgRXZhc19PYmplY3QqIHZpZXcsIFdlYkNvcmU6OkZyYW1lKiBm
cmFtCiAgKgogICogQWRkcyBjaGlsZCB0byB0aGUgZnJhbWUuCiAgKi8KLUVpbmFfQm9vbCBld2tf
ZnJhbWVfY2hpbGRfYWRkKEV2YXNfT2JqZWN0KiBvLCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6
RnJhbWU+IGNoaWxkLCBjb25zdCBXVEY6OlN0cmluZyYgbmFtZSwgY29uc3QgV2ViQ29yZTo6S1VS
TCYgdXJsLCBjb25zdCBXVEY6OlN0cmluZyYgcmVmZXJyZXIpCitFaW5hX0Jvb2wgZXdrX2ZyYW1l
X2NoaWxkX2FkZChFdmFzX09iamVjdCogZXdrRnJhbWUsIFdURjo6UGFzc1JlZlB0cjxXZWJDb3Jl
OjpGcmFtZT4gY2hpbGQsIGNvbnN0IFdURjo6U3RyaW5nJiBuYW1lLCBjb25zdCBXZWJDb3JlOjpL
VVJMJiB1cmwsIGNvbnN0IFdURjo6U3RyaW5nJiByZWZlcnJlcikKIHsKLSAgICBFV0tfRlJBTUVf
U0RfR0VUX09SX1JFVFVSTihvLCBzZCwgMCk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRV
Uk4oZXdrRnJhbWUsIHNkLCAwKTsKICAgICBjaGFyIGJ1ZlsyNTZdOwogICAgIEV2YXNfT2JqZWN0
KiBmcmFtZTsKICAgICBXZWJDb3JlOjpGcmFtZSogY2Y7CkBAIC0xMTMzLDcgKzExMzEsNyBAQCBF
aW5hX0Jvb2wgZXdrX2ZyYW1lX2NoaWxkX2FkZChFdmFzX09iamVjdCogbywgV1RGOjpQYXNzUmVm
UHRyPFdlYkNvcmU6OkZyYW1lPiBjaAogICAgIH0KICAgICBzbnByaW50ZihidWYsIHNpemVvZihi
dWYpLCAiRVdLX0ZyYW1lOmNoaWxkLyVzIiwgbmFtZS51dGY4KCkuZGF0YSgpKTsKICAgICBldmFz
X29iamVjdF9uYW1lX3NldChmcmFtZSwgYnVmKTsKLSAgICBldmFzX29iamVjdF9zbWFydF9tZW1i
ZXJfYWRkKGZyYW1lLCBvKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9tZW1iZXJfYWRkKGZyYW1l
LCBld2tGcmFtZSk7CiAgICAgZXZhc19vYmplY3Rfc2hvdyhmcmFtZSk7CiAKICAgICAvLyBUaGUg
Y3JlYXRpb24gb2YgdGhlIGZyYW1lIG1heSBoYXZlIHJ1biBhcmJpdHJhcnkgSmF2YVNjcmlwdCB0
aGF0IHJlbW92ZWQgaXQgZnJvbSB0aGUgcGFnZSBhbHJlYWR5LgpAQCAtMTE2MiwxMiArMTE2MCwx
MiBAQCBFaW5hX0Jvb2wgZXdrX2ZyYW1lX2NoaWxkX2FkZChFdmFzX09iamVjdCogbywgV1RGOjpQ
YXNzUmVmUHRyPFdlYkNvcmU6OkZyYW1lPiBjaAogICogQHBhcmFtIG8gVGhlIGV3ayBmcmFtZSB0
byBhY3QgdXBvbi4KICAqIEBwYXJhbSBuZXdQYXJlbnQgVGhlIG5ldyB2aWV3IHRoYXQgd2lsbCBi
ZSBzZXQgYXMgdGhlIHBhcmVudCBvZiB0aGUgZnJhbWUuCiAgKi8KLXZvaWQgZXdrX2ZyYW1lX3Zp
ZXdfc2V0KEV2YXNfT2JqZWN0KiBvLCBFdmFzX09iamVjdCogbmV3UGFyZW50KQordm9pZCBld2tf
ZnJhbWVfdmlld19zZXQoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBFdmFzX09iamVjdCogbmV3UGFy
ZW50KQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkKTsKKyAgICBFV0tf
RlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QpOwogCi0gICAgZXZhc19vYmplY3Rf
c21hcnRfbWVtYmVyX2RlbChvKTsKLSAgICBldmFzX29iamVjdF9zbWFydF9tZW1iZXJfYWRkKG8s
IG5ld1BhcmVudCk7CisgICAgZXZhc19vYmplY3Rfc21hcnRfbWVtYmVyX2RlbChld2tGcmFtZSk7
CisgICAgZXZhc19vYmplY3Rfc21hcnRfbWVtYmVyX2FkZChld2tGcmFtZSwgbmV3UGFyZW50KTsK
IAogICAgIHNkLT52aWV3ID0gbmV3UGFyZW50OwogfQpAQCAtMTE3NiwxMCArMTE3NCwxMCBAQCB2
b2lkIGV3a19mcmFtZV92aWV3X3NldChFdmFzX09iamVjdCogbywgRXZhc19PYmplY3QqIG5ld1Bh
cmVudCkKICAqIEBpbnRlcm5hbAogICogRnJhbWUgd2FzIGRlc3Ryb3llZCBieSBsb2FkZXIsIHJl
bW92ZSBpbnRlcm5hbCByZWZlcmVuY2UuCiAgKi8KLXZvaWQgZXdrX2ZyYW1lX2NvcmVfZ29uZShF
dmFzX09iamVjdCogbykKK3ZvaWQgZXdrX2ZyYW1lX2NvcmVfZ29uZShFdmFzX09iamVjdCogZXdr
RnJhbWUpCiB7Ci0gICAgREJHKCJvPSVwIiwgbyk7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9S
RVRVUk4obywgc2QpOworICAgIERCRygiZXdrRnJhbWU9JXAiLCBld2tGcmFtZSk7CisgICAgRVdL
X0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkKTsKICAgICBzZC0+ZnJhbWUgPSAw
OwogfQogCkBAIC0xMTkwLDkgKzExODgsOSBAQCB2b2lkIGV3a19mcmFtZV9jb3JlX2dvbmUoRXZh
c19PYmplY3QqIG8pCiAgKiBBdm9pZCB1c2luZyB0aGlzIGNhbGwgZnJvbSBvdXRzaWRlLCBhZGQg
c3BlY2lmaWMgZXdrX2ZyYW1lXyoKICAqIGFjdGlvbnMgaW5zdGVhZC4KICAqLwotV2ViQ29yZTo6
RnJhbWUqIGV3a19mcmFtZV9jb3JlX2dldChjb25zdCBFdmFzX09iamVjdCogbykKK1dlYkNvcmU6
OkZyYW1lKiBld2tfZnJhbWVfY29yZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lKQog
ewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAwKTsKKyAgICBFV0tfRlJB
TUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIDApOwogICAgIHJldHVybiBzZC0+ZnJh
bWU7CiB9CiAKQEAgLTEyMDksOSArMTIwNyw5IEBAIFdlYkNvcmU6OkZyYW1lKiBld2tfZnJhbWVf
Y29yZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCiAgKgogICogRW1pdHMgc2lnbmFsOiAicmVz
b3VyY2UscmVxdWVzdCx3aWxsc2VuZCIKICAqLwotdm9pZCBld2tfZnJhbWVfcmVxdWVzdF93aWxs
X3NlbmQoRXZhc19PYmplY3QqIG8sIEV3a19GcmFtZV9SZXNvdXJjZV9SZXF1ZXN0KiByZXF1ZXN0
KQordm9pZCBld2tfZnJhbWVfcmVxdWVzdF93aWxsX3NlbmQoRXZhc19PYmplY3QqIGV3a0ZyYW1l
LCBFd2tfRnJhbWVfUmVzb3VyY2VfUmVxdWVzdCogcmVxdWVzdCkKIHsKLSAgICBldmFzX29iamVj
dF9zbWFydF9jYWxsYmFja19jYWxsKG8sICJyZXNvdXJjZSxyZXF1ZXN0LHdpbGxzZW5kIiwgcmVx
dWVzdCk7CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChld2tGcmFtZSwgInJl
c291cmNlLHJlcXVlc3Qsd2lsbHNlbmQiLCByZXF1ZXN0KTsKIH0KIAogLyoqCkBAIC0xMjIzLDkg
KzEyMjEsOSBAQCB2b2lkIGV3a19mcmFtZV9yZXF1ZXN0X3dpbGxfc2VuZChFdmFzX09iamVjdCog
bywgRXdrX0ZyYW1lX1Jlc291cmNlX1JlcXVlc3QqIHJlcQogICoKICAqIEVtaXRzIHNpZ25hbDog
InJlc291cmNlLHJlcXVlc3QsbmV3IgogICovCi12b2lkIGV3a19mcmFtZV9yZXF1ZXN0X2Fzc2ln
bl9pZGVudGlmaWVyKEV2YXNfT2JqZWN0KiBvLCBjb25zdCBFd2tfRnJhbWVfUmVzb3VyY2VfUmVx
dWVzdCogcmVxdWVzdCkKK3ZvaWQgZXdrX2ZyYW1lX3JlcXVlc3RfYXNzaWduX2lkZW50aWZpZXIo
RXZhc19PYmplY3QqIGV3a0ZyYW1lLCBjb25zdCBFd2tfRnJhbWVfUmVzb3VyY2VfUmVxdWVzdCog
cmVxdWVzdCkKIHsKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKG8sICJyZXNv
dXJjZSxyZXF1ZXN0LG5ldyIsICh2b2lkKilyZXF1ZXN0KTsKKyAgICBldmFzX29iamVjdF9zbWFy
dF9jYWxsYmFja19jYWxsKGV3a0ZyYW1lLCAicmVzb3VyY2UscmVxdWVzdCxuZXciLCAodm9pZCop
cmVxdWVzdCk7CiB9CiAKIC8qKgpAQCAtMTIzNiw5ICsxMjM0LDkgQEAgdm9pZCBld2tfZnJhbWVf
cmVxdWVzdF9hc3NpZ25faWRlbnRpZmllcihFdmFzX09iamVjdCogbywgY29uc3QgRXdrX0ZyYW1l
X1Jlc291cmMKICAqCiAgKiBFbWl0cyBzaWduYWw6ICJuYXZpZ2F0aW9uLGZpcnN0IgogICovCi12
b2lkIGV3a19mcmFtZV9kaWRfcGVyZm9ybV9maXJzdF9uYXZpZ2F0aW9uKEV2YXNfT2JqZWN0KiBv
KQordm9pZCBld2tfZnJhbWVfZGlkX3BlcmZvcm1fZmlyc3RfbmF2aWdhdGlvbihFdmFzX09iamVj
dCogZXdrRnJhbWUpCiB7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChvLCAi
bmF2aWdhdGlvbixmaXJzdCIsIDApOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2Nh
bGwoZXdrRnJhbWUsICJuYXZpZ2F0aW9uLGZpcnN0IiwgMCk7CiB9CiAKIC8qKgpAQCAtMTI1MCw5
ICsxMjQ4LDkgQEAgdm9pZCBld2tfZnJhbWVfZGlkX3BlcmZvcm1fZmlyc3RfbmF2aWdhdGlvbihF
dmFzX09iamVjdCogbykKICAqCiAgKiBFbWl0cyBzaWduYWw6ICJzdGF0ZSxzYXZlIgogICovCi12
b2lkIGV3a19mcmFtZV92aWV3X3N0YXRlX3NhdmUoRXZhc19PYmplY3QqIG8sIFdlYkNvcmU6Okhp
c3RvcnlJdGVtKiBpdGVtKQordm9pZCBld2tfZnJhbWVfdmlld19zdGF0ZV9zYXZlKEV2YXNfT2Jq
ZWN0KiBld2tGcmFtZSwgV2ViQ29yZTo6SGlzdG9yeUl0ZW0qIGl0ZW0pCiB7Ci0gICAgZXZhc19v
YmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChvLCAic3RhdGUsc2F2ZSIsIDApOworICAgIGV2YXNf
b2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdrRnJhbWUsICJzdGF0ZSxzYXZlIiwgMCk7CiB9
CiAKIC8qKgpAQCAtMTI2MSwxNiArMTI1OSwxNiBAQCB2b2lkIGV3a19mcmFtZV92aWV3X3N0YXRl
X3NhdmUoRXZhc19PYmplY3QqIG8sIFdlYkNvcmU6Okhpc3RvcnlJdGVtKiBpdGVtKQogICoKICAq
IEVtaXRzIHNpZ25hbDogImxvYWQsc3RhcnRlZCIgd2l0aCBubyBwYXJhbWV0ZXJzLgogICovCi12
b2lkIGV3a19mcmFtZV9sb2FkX3N0YXJ0ZWQoRXZhc19PYmplY3QqIG8pCit2b2lkIGV3a19mcmFt
ZV9sb2FkX3N0YXJ0ZWQoRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewogICAgIEV2YXNfT2JqZWN0
KiBtYWluX2ZyYW1lOwotICAgIERCRygibz0lcCIsIG8pOwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0
X2NhbGxiYWNrX2NhbGwobywgImxvYWQsc3RhcnRlZCIsIDApOwotICAgIEVXS19GUkFNRV9TRF9H
RVRfT1JfUkVUVVJOKG8sIHNkKTsKKyAgICBEQkcoImV3a0ZyYW1lPSVwIiwgZXdrRnJhbWUpOwor
ICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdrRnJhbWUsICJsb2FkLHN0YXJ0
ZWQiLCAwKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QpOwog
ICAgIGV3a192aWV3X2xvYWRfc3RhcnRlZChzZC0+dmlldyk7CiAKICAgICBtYWluX2ZyYW1lID0g
ZXdrX3ZpZXdfZnJhbWVfbWFpbl9nZXQoc2QtPnZpZXcpOwotICAgIGlmIChtYWluX2ZyYW1lID09
IG8pCisgICAgaWYgKG1haW5fZnJhbWUgPT0gZXdrRnJhbWUpCiAgICAgICAgIGV3a192aWV3X2Zy
YW1lX21haW5fbG9hZF9zdGFydGVkKHNkLT52aWV3KTsKIH0KIApAQCAtMTI4Miw5ICsxMjgwLDkg
QEAgdm9pZCBld2tfZnJhbWVfbG9hZF9zdGFydGVkKEV2YXNfT2JqZWN0KiBvKQogICoKICAqIEVt
aXRzIHNpZ25hbDogImxvYWQscHJvdmlzaW9uYWwiIHdpdGggbm8gcGFyYW1ldGVycy4KICAqLwot
dm9pZCBld2tfZnJhbWVfbG9hZF9wcm92aXNpb25hbChFdmFzX09iamVjdCogbykKK3ZvaWQgZXdr
X2ZyYW1lX2xvYWRfcHJvdmlzaW9uYWwoRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewotICAgIGV2
YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwobywgImxvYWQscHJvdmlzaW9uYWwiLCAwKTsK
KyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKGV3a0ZyYW1lLCAibG9hZCxwcm92
aXNpb25hbCIsIDApOwogfQogCiAvKioKQEAgLTEyOTUsOSArMTI5Myw5IEBAIHZvaWQgZXdrX2Zy
YW1lX2xvYWRfcHJvdmlzaW9uYWwoRXZhc19PYmplY3QqIG8pCiAgKgogICogRW1pdHMgc2lnbmFs
OiAibG9hZCxmaXJzdGxheW91dCxmaW5pc2hlZCIgd2l0aCBubyBwYXJhbWV0ZXJzLgogICovCi12
b2lkIGV3a19mcmFtZV9sb2FkX2ZpcnN0bGF5b3V0X2ZpbmlzaGVkKEV2YXNfT2JqZWN0KiBvKQor
dm9pZCBld2tfZnJhbWVfbG9hZF9maXJzdGxheW91dF9maW5pc2hlZChFdmFzX09iamVjdCogZXdr
RnJhbWUpCiB7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChvLCAibG9hZCxm
aXJzdGxheW91dCxmaW5pc2hlZCIsIDApOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNr
X2NhbGwoZXdrRnJhbWUsICJsb2FkLGZpcnN0bGF5b3V0LGZpbmlzaGVkIiwgMCk7CiB9CiAKIC8q
KgpAQCAtMTMwOCw5ICsxMzA2LDkgQEAgdm9pZCBld2tfZnJhbWVfbG9hZF9maXJzdGxheW91dF9m
aW5pc2hlZChFdmFzX09iamVjdCogbykKICAqCiAgKiBFbWl0cyBzaWduYWw6ICJsb2FkLG5vbmVt
cHR5bGF5b3V0LGZpbmlzaGVkIiB3aXRoIG5vIHBhcmFtZXRlcnMuCiAgKi8KLXZvaWQgZXdrX2Zy
YW1lX2xvYWRfZmlyc3RsYXlvdXRfbm9uZW1wdHlfZmluaXNoZWQoRXZhc19PYmplY3QqIG8pCit2
b2lkIGV3a19mcmFtZV9sb2FkX2ZpcnN0bGF5b3V0X25vbmVtcHR5X2ZpbmlzaGVkKEV2YXNfT2Jq
ZWN0KiBld2tGcmFtZSkKIHsKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKG8s
ICJsb2FkLG5vbmVtcHR5bGF5b3V0LGZpbmlzaGVkIiwgMCk7CisgICAgZXZhc19vYmplY3Rfc21h
cnRfY2FsbGJhY2tfY2FsbChld2tGcmFtZSwgImxvYWQsbm9uZW1wdHlsYXlvdXQsZmluaXNoZWQi
LCAwKTsKIH0KIAogLyoqCkBAIC0xMzIxLDExICsxMzE5LDExIEBAIHZvaWQgZXdrX2ZyYW1lX2xv
YWRfZmlyc3RsYXlvdXRfbm9uZW1wdHlfZmluaXNoZWQoRXZhc19PYmplY3QqIG8pCiAgKgogICog
RW1pdHMgc2lnbmFsOiAibG9hZCxkb2N1bWVudCxmaW5pc2hlZCIgd2l0aCBubyBwYXJhbWV0ZXJz
LgogICovCi12b2lkIGV3a19mcmFtZV9sb2FkX2RvY3VtZW50X2ZpbmlzaGVkKEV2YXNfT2JqZWN0
KiBvKQordm9pZCBld2tfZnJhbWVfbG9hZF9kb2N1bWVudF9maW5pc2hlZChFdmFzX09iamVjdCog
ZXdrRnJhbWUpCiB7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChvLCAibG9h
ZCxkb2N1bWVudCxmaW5pc2hlZCIsIDApOwotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJO
KG8sIHNkKTsKLSAgICBld2tfdmlld19sb2FkX2RvY3VtZW50X2ZpbmlzaGVkKHNkLT52aWV3LCBv
KTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKGV3a0ZyYW1lLCAibG9hZCxk
b2N1bWVudCxmaW5pc2hlZCIsIDApOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3
a0ZyYW1lLCBzZCk7CisgICAgZXdrX3ZpZXdfbG9hZF9kb2N1bWVudF9maW5pc2hlZChzZC0+dmll
dywgZXdrRnJhbWUpOwogfQogCiAvKioKQEAgLTEzMzgsMjcgKzEzMzYsMjcgQEAgdm9pZCBld2tf
ZnJhbWVfbG9hZF9kb2N1bWVudF9maW5pc2hlZChFdmFzX09iamVjdCogbykKICAqIEBub3RlIHRo
ZXJlIHNob3VsZCBub3RiZSBhbnkgZXJyb3Igc3R1ZmYgaGVyZSwgYnV0IHRyeWluZyB0byBiZQog
ICogICAgICAgY29tcGF0aWJsZSB3aXRoIHByZXZpb3VzIFdlYktpdC4KICAqLwotdm9pZCBld2tf
ZnJhbWVfbG9hZF9maW5pc2hlZChFdmFzX09iamVjdCogbywgY29uc3QgY2hhciogZXJyb3JfZG9t
YWluLCBpbnQgZXJyb3JfY29kZSwgRWluYV9Cb29sIGlzX2NhbmNlbGxhdGlvbiwgY29uc3QgY2hh
ciogZXJyb3JfZGVzY3JpcHRpb24sIGNvbnN0IGNoYXIqIGZhaWxpbmdfdXJsKQordm9pZCBld2tf
ZnJhbWVfbG9hZF9maW5pc2hlZChFdmFzX09iamVjdCogZXdrRnJhbWUsIGNvbnN0IGNoYXIqIGVy
cm9yRG9tYWluLCBpbnQgZXJyb3JDb2RlLCBFaW5hX0Jvb2wgaXNDYW5jZWxsYXRpb24sIGNvbnN0
IGNoYXIqIGVycm9yRGVzY3JpcHRpb24sIGNvbnN0IGNoYXIqIGZhaWxpbmdVcmwpCiB7Ci0gICAg
RXdrX0ZyYW1lX0xvYWRfRXJyb3IgYnVmLCAqIGVycm9yOwotICAgIGlmICghZXJyb3JfZG9tYWlu
KSB7Ci0gICAgICAgIERCRygibz0lcCwgc3VjY2Vzcy4iLCBvKTsKKyAgICBFd2tfRnJhbWVfTG9h
ZF9FcnJvciBidWYsICplcnJvcjsKKyAgICBpZiAoIWVycm9yRG9tYWluKSB7CisgICAgICAgIERC
RygiZXdrRnJhbWU9JXAsIHN1Y2Nlc3MuIiwgZXdrRnJhbWUpOwogICAgICAgICBlcnJvciA9IDA7
CiAgICAgfSBlbHNlIHsKLSAgICAgICAgREJHKCJvPSVwLCBlcnJvcj0lcyAoJWQsIGNhbmNlbGxh
dGlvbj0laGh1KSBcIiVzXCIsIHVybD0lcyIsCi0gICAgICAgICAgICBvLCBlcnJvcl9kb21haW4s
IGVycm9yX2NvZGUsIGlzX2NhbmNlbGxhdGlvbiwKLSAgICAgICAgICAgIGVycm9yX2Rlc2NyaXB0
aW9uLCBmYWlsaW5nX3VybCk7Ci0KLSAgICAgICAgYnVmLmRvbWFpbiA9IGVycm9yX2RvbWFpbjsK
LSAgICAgICAgYnVmLmNvZGUgPSBlcnJvcl9jb2RlOwotICAgICAgICBidWYuaXNfY2FuY2VsbGF0
aW9uID0gaXNfY2FuY2VsbGF0aW9uOwotICAgICAgICBidWYuZGVzY3JpcHRpb24gPSBlcnJvcl9k
ZXNjcmlwdGlvbjsKLSAgICAgICAgYnVmLmZhaWxpbmdfdXJsID0gZmFpbGluZ191cmw7Ci0gICAg
ICAgIGJ1Zi5mcmFtZSA9IG87CisgICAgICAgIERCRygiZXdrRnJhbWU9JXAsIGVycm9yPSVzICgl
ZCwgY2FuY2VsbGF0aW9uPSVoaHUpIFwiJXNcIiwgdXJsPSVzIiwKKyAgICAgICAgICAgIGV3a0Zy
YW1lLCBlcnJvckRvbWFpbiwgZXJyb3JDb2RlLCBpc0NhbmNlbGxhdGlvbiwKKyAgICAgICAgICAg
IGVycm9yRGVzY3JpcHRpb24sIGZhaWxpbmdVcmwpOworCisgICAgICAgIGJ1Zi5kb21haW4gPSBl
cnJvckRvbWFpbjsKKyAgICAgICAgYnVmLmNvZGUgPSBlcnJvckNvZGU7CisgICAgICAgIGJ1Zi5p
c19jYW5jZWxsYXRpb24gPSBpc0NhbmNlbGxhdGlvbjsKKyAgICAgICAgYnVmLmRlc2NyaXB0aW9u
ID0gZXJyb3JEZXNjcmlwdGlvbjsKKyAgICAgICAgYnVmLmZhaWxpbmdfdXJsID0gZmFpbGluZ1Vy
bDsKKyAgICAgICAgYnVmLmZyYW1lID0gZXdrRnJhbWU7CiAgICAgICAgIGVycm9yID0gJmJ1ZjsK
ICAgICB9Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChvLCAibG9hZCxmaW5p
c2hlZCIsIGVycm9yKTsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihvLCBzZCk7Cisg
ICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChld2tGcmFtZSwgImxvYWQsZmluaXNo
ZWQiLCBlcnJvcik7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNk
KTsKICAgICBld2tfdmlld19sb2FkX2ZpbmlzaGVkKHNkLT52aWV3LCBlcnJvcik7CiB9CiAKQEAg
LTEzNjgsMjQgKzEzNjYsMjQgQEAgdm9pZCBld2tfZnJhbWVfbG9hZF9maW5pc2hlZChFdmFzX09i
amVjdCogbywgY29uc3QgY2hhciogZXJyb3JfZG9tYWluLCBpbnQgZXJyb3IKICAqCiAgKiBFbWl0
cyBzaWduYWw6ICJsb2FkLGVycm9yIiB3aXRoIHBvaW50ZXIgdG8gRXdrX0ZyYW1lX0xvYWRfRXJy
b3IuCiAgKi8KLXZvaWQgZXdrX2ZyYW1lX2xvYWRfZXJyb3IoRXZhc19PYmplY3QqIG8sIGNvbnN0
IGNoYXIqIGVycm9yX2RvbWFpbiwgaW50IGVycm9yX2NvZGUsIEVpbmFfQm9vbCBpc19jYW5jZWxs
YXRpb24sIGNvbnN0IGNoYXIqIGVycm9yX2Rlc2NyaXB0aW9uLCBjb25zdCBjaGFyKiBmYWlsaW5n
X3VybCkKK3ZvaWQgZXdrX2ZyYW1lX2xvYWRfZXJyb3IoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBj
b25zdCBjaGFyKiBlcnJvckRvbWFpbiwgaW50IGVycm9yQ29kZSwgRWluYV9Cb29sIGlzQ2FuY2Vs
bGF0aW9uLCBjb25zdCBjaGFyKiBlcnJvckRlc2NyaXB0aW9uLCBjb25zdCBjaGFyKiBmYWlsaW5n
VXJsKQogewogICAgIEV3a19GcmFtZV9Mb2FkX0Vycm9yIGVycm9yOwogCi0gICAgREJHKCJvPSVw
LCBlcnJvcj0lcyAoJWQsIGNhbmNlbGxhdGlvbj0laGh1KSBcIiVzXCIsIHVybD0lcyIsCi0gICAg
ICAgIG8sIGVycm9yX2RvbWFpbiwgZXJyb3JfY29kZSwgaXNfY2FuY2VsbGF0aW9uLAotICAgICAg
ICBlcnJvcl9kZXNjcmlwdGlvbiwgZmFpbGluZ191cmwpOworICAgIERCRygiZXdrRnJhbWU9JXAs
IGVycm9yPSVzICglZCwgY2FuY2VsbGF0aW9uPSVoaHUpIFwiJXNcIiwgdXJsPSVzIiwKKyAgICAg
ICAgZXdrRnJhbWUsIGVycm9yRG9tYWluLCBlcnJvckNvZGUsIGlzQ2FuY2VsbGF0aW9uLAorICAg
ICAgICBlcnJvckRlc2NyaXB0aW9uLCBmYWlsaW5nVXJsKTsKIAotICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOKGVycm9yX2RvbWFpbik7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk4oZXJyb3JEb21haW4pOwogCi0gICAgZXJyb3IuY29kZSA9IGVycm9yX2NvZGU7Ci0gICAgZXJy
b3IuaXNfY2FuY2VsbGF0aW9uID0gaXNfY2FuY2VsbGF0aW9uOwotICAgIGVycm9yLmRvbWFpbiA9
IGVycm9yX2RvbWFpbjsKLSAgICBlcnJvci5kZXNjcmlwdGlvbiA9IGVycm9yX2Rlc2NyaXB0aW9u
OwotICAgIGVycm9yLmZhaWxpbmdfdXJsID0gZmFpbGluZ191cmw7Ci0gICAgZXJyb3IuZnJhbWUg
PSBvOwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwobywgImxvYWQsZXJyb3Ii
LCAmZXJyb3IpOwotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkKTsKKyAgICBl
cnJvci5jb2RlID0gZXJyb3JDb2RlOworICAgIGVycm9yLmlzX2NhbmNlbGxhdGlvbiA9IGlzQ2Fu
Y2VsbGF0aW9uOworICAgIGVycm9yLmRvbWFpbiA9IGVycm9yRG9tYWluOworICAgIGVycm9yLmRl
c2NyaXB0aW9uID0gZXJyb3JEZXNjcmlwdGlvbjsKKyAgICBlcnJvci5mYWlsaW5nX3VybCA9IGZh
aWxpbmdVcmw7CisgICAgZXJyb3IuZnJhbWUgPSBld2tGcmFtZTsKKyAgICBldmFzX29iamVjdF9z
bWFydF9jYWxsYmFja19jYWxsKGV3a0ZyYW1lLCAibG9hZCxlcnJvciIsICZlcnJvcik7CisgICAg
RVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkKTsKICAgICBld2tfdmlld19s
b2FkX2Vycm9yKHNkLT52aWV3LCAmZXJyb3IpOwogfQogCkBAIC0xMzk1LDE3ICsxMzkzLDE3IEBA
IHZvaWQgZXdrX2ZyYW1lX2xvYWRfZXJyb3IoRXZhc19PYmplY3QqIG8sIGNvbnN0IGNoYXIqIGVy
cm9yX2RvbWFpbiwgaW50IGVycm9yX2NvCiAgKgogICogRW1pdHMgc2lnbmFsOiAibG9hZCxwcm9n
cmVzcyIgd2l0aCBwb2ludGVyIHRvIGEgZG91YmxlIGZyb20gMC4wIHRvIDEuMC4KICAqLwotdm9p
ZCBld2tfZnJhbWVfbG9hZF9wcm9ncmVzc19jaGFuZ2VkKEV2YXNfT2JqZWN0KiBvKQordm9pZCBl
d2tfZnJhbWVfbG9hZF9wcm9ncmVzc19jaGFuZ2VkKEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsK
LSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihvLCBzZCk7CisgICAgRVdLX0ZSQU1FX1NE
X0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTihzZC0+ZnJhbWUpOwogCiAgICAgLy8gVE9ETzogdGhpcyBpcyBwZXIgcGFnZSwgdGhlcmUg
c2hvdWxkIGJlIGEgd2F5IHRvIGhhdmUgcGVyLWZyYW1lLgogICAgIGRvdWJsZSBwcm9ncmVzcyA9
IHNkLT5mcmFtZS0+cGFnZSgpLT5wcm9ncmVzcygpLT5lc3RpbWF0ZWRQcm9ncmVzcygpOwogCi0g
ICAgREJHKCJvPSVwIChwPSUwLjNmKSIsIG8sIHByb2dyZXNzKTsKKyAgICBEQkcoImV3a0ZyYW1l
PSVwIChwPSUwLjNmKSIsIGV3a0ZyYW1lLCBwcm9ncmVzcyk7CiAKLSAgICBldmFzX29iamVjdF9z
bWFydF9jYWxsYmFja19jYWxsKG8sICJsb2FkLHByb2dyZXNzIiwgJnByb2dyZXNzKTsKKyAgICBl
dmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKGV3a0ZyYW1lLCAibG9hZCxwcm9ncmVzcyIs
ICZwcm9ncmVzcyk7CiAgICAgZXdrX3ZpZXdfbG9hZF9wcm9ncmVzc19jaGFuZ2VkKHNkLT52aWV3
KTsKIH0KIApAQCAtMTQxNSwxMCArMTQxMywxMCBAQCB2b2lkIGV3a19mcmFtZV9sb2FkX3Byb2dy
ZXNzX2NoYW5nZWQoRXZhc19PYmplY3QqIG8pCiAgKgogICogUmVwb3J0cyBjb250ZW50cyBzaXpl
IGNoYW5nZWQuCiAgKi8KLXZvaWQgZXdrX2ZyYW1lX2NvbnRlbnRzX3NpemVfY2hhbmdlZChFdmFz
X09iamVjdCogbywgRXZhc19Db29yZCB3LCBFdmFzX0Nvb3JkIGgpCit2b2lkIGV3a19mcmFtZV9j
b250ZW50c19zaXplX2NoYW5nZWQoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBFdmFzX0Nvb3JkIHdp
ZHRoLCBFdmFzX0Nvb3JkIGhlaWdodCkKIHsKLSAgICBFdmFzX0Nvb3JkIHNpemVbMl0gPSB7dywg
aH07Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChvLCAiY29udGVudHMsc2l6
ZSxjaGFuZ2VkIiwgc2l6ZSk7CisgICAgRXZhc19Db29yZCBzaXplWzJdID0ge3dpZHRoLCBoZWln
aHR9OworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdrRnJhbWUsICJjb250
ZW50cyxzaXplLGNoYW5nZWQiLCBzaXplKTsKIH0KIAogLyoqCkBAIC0xNDI2LDEzICsxNDI0LDEz
IEBAIHZvaWQgZXdrX2ZyYW1lX2NvbnRlbnRzX3NpemVfY2hhbmdlZChFdmFzX09iamVjdCogbywg
RXZhc19Db29yZCB3LCBFdmFzX0Nvb3JkIGgpCiAgKgogICogUmVwb3J0cyB0aXRsZSBjaGFuZ2Vk
LgogICovCi12b2lkIGV3a19mcmFtZV90aXRsZV9zZXQoRXZhc19PYmplY3QqIG8sIGNvbnN0IGNo
YXIqIHRpdGxlKQordm9pZCBld2tfZnJhbWVfdGl0bGVfc2V0KEV2YXNfT2JqZWN0KiBld2tGcmFt
ZSwgY29uc3QgY2hhciogdGl0bGUpCiB7Ci0gICAgREJHKCJvPSVwLCB0aXRsZT0lcyIsIG8sIHRp
dGxlID8gdGl0bGUgOiAiKG51bGwpIik7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4o
bywgc2QpOworICAgIERCRygiZXdrRnJhbWU9JXAsIHRpdGxlPSVzIiwgZXdrRnJhbWUsIHRpdGxl
ID8gdGl0bGUgOiAiKG51bGwpIik7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdr
RnJhbWUsIHNkKTsKICAgICBpZiAoIWVpbmFfc3RyaW5nc2hhcmVfcmVwbGFjZSgmc2QtPnRpdGxl
LCB0aXRsZSkpCiAgICAgICAgIHJldHVybjsKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFj
a19jYWxsKG8sICJ0aXRsZSxjaGFuZ2VkIiwgKHZvaWQqKXNkLT50aXRsZSk7CisgICAgZXZhc19v
YmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChld2tGcmFtZSwgInRpdGxlLGNoYW5nZWQiLCAodm9p
ZCopc2QtPnRpdGxlKTsKIH0KIAogLyoqCkBAIC0xNDQwLDEwICsxNDM4LDEwIEBAIHZvaWQgZXdr
X2ZyYW1lX3RpdGxlX3NldChFdmFzX09iamVjdCogbywgY29uc3QgY2hhciogdGl0bGUpCiAgKgog
ICogQ3JlYXRlcyBhIHZpZXcuCiAgKi8KLXZvaWQgZXdrX2ZyYW1lX3ZpZXdfY3JlYXRlX2Zvcl92
aWV3KEV2YXNfT2JqZWN0KiBvLCBFdmFzX09iamVjdCogdmlldykKK3ZvaWQgZXdrX2ZyYW1lX3Zp
ZXdfY3JlYXRlX2Zvcl92aWV3KEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgRXZhc19PYmplY3QqIHZp
ZXcpCiB7Ci0gICAgREJHKCJvPSVwLCB2aWV3PSVwIiwgbywgdmlldyk7Ci0gICAgRVdLX0ZSQU1F
X1NEX0dFVF9PUl9SRVRVUk4obywgc2QpOworICAgIERCRygiZXdrRnJhbWU9JXAsIHZpZXc9JXAi
LCBld2tGcmFtZSwgdmlldyk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJh
bWUsIHNkKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+ZnJhbWUpOwogICAg
IEV2YXNfQ29vcmQgdywgaDsKIApAQCAtMTQ2NywxOCArMTQ2NSwxOCBAQCB2b2lkIGV3a19mcmFt
ZV92aWV3X2NyZWF0ZV9mb3JfdmlldyhFdmFzX09iamVjdCogbywgRXZhc19PYmplY3QqIHZpZXcp
CiAKICAgICBjb25zdCBjaGFyKiB0aGVtZSA9IGV3a192aWV3X3RoZW1lX2dldCh2aWV3KTsKICAg
ICBzZC0+ZnJhbWUtPnZpZXcoKS0+c2V0RWRqZVRoZW1lKHRoZW1lKTsKLSAgICBzZC0+ZnJhbWUt
PnZpZXcoKS0+c2V0RXZhc09iamVjdChvKTsKKyAgICBzZC0+ZnJhbWUtPnZpZXcoKS0+c2V0RXZh
c09iamVjdChld2tGcmFtZSk7CiB9CiAKLXNzaXplX3QgZXdrX2ZyYW1lX3NvdXJjZV9nZXQoY29u
c3QgRXZhc19PYmplY3QqIG8sIGNoYXIqKiBmcmFtZV9zb3VyY2UpCitzc2l6ZV90IGV3a19mcmFt
ZV9zb3VyY2VfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgY2hhcioqIGZyYW1lU291
cmNlKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAtMSk7CisgICAg
RVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCAtMSk7CiAgICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgLTEpOwogICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUtPmRvY3VtZW50KCksIC0xKTsKLSAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZnJhbWVfc291cmNlLCAtMSk7CisgICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGZyYW1lU291cmNlLCAtMSk7CiAKICAgICBXVEY6OlN0
cmluZyBzb3VyY2U7Ci0gICAgKmZyYW1lX3NvdXJjZSA9IDA7IC8vIFNhdmVzIDAgdG8gcG9pbnRl
ciB1bnRpbCBpdCdzIG5vdCBhbGxvY2F0ZWQuCisgICAgKmZyYW1lU291cmNlID0gMDsgLy8gU2F2
ZXMgMCB0byBwb2ludGVyIHVudGlsIGl0J3Mgbm90IGFsbG9jYXRlZC4KIAogICAgIGlmICghc2Qt
PmZyYW1lLT5kb2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpKSB7CiAgICAgICAgIC8vIEZJWE1F
OiBTdXBwb3J0IG90aGVycyBkb2N1bWVudHMuCkBAIC0xNTA4LDIxICsxNTA2LDIxIEBAIHNzaXpl
X3QgZXdrX2ZyYW1lX3NvdXJjZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIG8sIGNoYXIqKiBmcmFt
ZV9zb3VyY2UpCiAgICAgfQogCiAgICAgc2l6ZV90IHNvdXJjZV9sZW5ndGggPSBzdHJsZW4oc291
cmNlLnV0ZjgoKS5kYXRhKCkpOwotICAgICpmcmFtZV9zb3VyY2UgPSBzdGF0aWNfY2FzdDxjaGFy
Kj4obWFsbG9jKHNvdXJjZV9sZW5ndGggKyAxKSk7Ci0gICAgaWYgKCEqZnJhbWVfc291cmNlKSB7
CisgICAgKmZyYW1lU291cmNlID0gc3RhdGljX2Nhc3Q8Y2hhcio+KG1hbGxvYyhzb3VyY2VfbGVu
Z3RoICsgMSkpOworICAgIGlmICghKmZyYW1lU291cmNlKSB7CiAgICAgICAgIENSSVRJQ0FMKCJD
b3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5LiIpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQog
Ci0gICAgc3RybmNweSgqZnJhbWVfc291cmNlLCBzb3VyY2UudXRmOCgpLmRhdGEoKSwgc291cmNl
X2xlbmd0aCk7Ci0gICAgKCpmcmFtZV9zb3VyY2UpW3NvdXJjZV9sZW5ndGhdID0gJ1wwJzsKKyAg
ICBzdHJuY3B5KCpmcmFtZVNvdXJjZSwgc291cmNlLnV0ZjgoKS5kYXRhKCksIHNvdXJjZV9sZW5n
dGgpOworICAgICgqZnJhbWVTb3VyY2UpW3NvdXJjZV9sZW5ndGhdID0gJ1wwJzsKIAogICAgIHJl
dHVybiBzb3VyY2VfbGVuZ3RoOwogfQogCi1FaW5hX0xpc3QqIGV3a19mcmFtZV9yZXNvdXJjZXNf
bG9jYXRpb25fZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQorRWluYV9MaXN0KiBld2tfZnJhbWVf
cmVzb3VyY2VzX2xvY2F0aW9uX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrRnJhbWUpCiB7Ci0g
ICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIDApOworICAgIEVXS19GUkFNRV9T
RF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgMCk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgMCk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk5fVkFMKHNkLT5mcmFtZS0+ZG9jdW1lbnQoKSwgMCk7CiAKQEAgLTE1ODYsOSArMTU4NCw5IEBA
IGNoYXIqIGV3a19mcmFtZV9wbGFpbl90ZXh0X2dldChjb25zdCBFdmFzX09iamVjdCogZXdrRnJh
bWUpCiAgKgogICogRW1pdHMgc2lnbmFsOiAidXJpLGNoYW5nZWQiIHdpdGggbmV3IHVyaSBhcyBw
YXJhbWV0ZXIuCiAgKi8KLUVpbmFfQm9vbCBld2tfZnJhbWVfdXJpX2NoYW5nZWQoRXZhc19PYmpl
Y3QqIG8pCitFaW5hX0Jvb2wgZXdrX2ZyYW1lX3VyaV9jaGFuZ2VkKEV2YXNfT2JqZWN0KiBld2tG
cmFtZSkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxT
RSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZB
TFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5B
X0ZBTFNFKTsKICAgICBXVEY6OkNTdHJpbmcgdXJpKHNkLT5mcmFtZS0+ZG9jdW1lbnQoKS0+dXJs
KCkuc3RyaW5nKCkudXRmOCgpKTsKIApAQCAtMTU5OSw3ICsxNTk3LDcgQEAgRWluYV9Cb29sIGV3
a19mcmFtZV91cmlfY2hhbmdlZChFdmFzX09iamVjdCogbykKICAgICB9CiAKICAgICBlaW5hX3N0
cmluZ3NoYXJlX3JlcGxhY2UoJnNkLT51cmksIHVyaS5kYXRhKCkpOwotICAgIGV2YXNfb2JqZWN0
X3NtYXJ0X2NhbGxiYWNrX2NhbGwobywgInVyaSxjaGFuZ2VkIiwgKHZvaWQqKXNkLT51cmkpOwor
ICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdrRnJhbWUsICJ1cmksY2hhbmdl
ZCIsICh2b2lkKilzZC0+dXJpKTsKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCkBAIC0xNjA4
LDEwICsxNjA2LDEwIEBAIEVpbmFfQm9vbCBld2tfZnJhbWVfdXJpX2NoYW5nZWQoRXZhc19PYmpl
Y3QqIG8pCiAgKgogICogRm9yY2VzIGxheW91dCBmb3IgZnJhbWUuCiAgKi8KLXZvaWQgZXdrX2Zy
YW1lX2ZvcmNlX2xheW91dChFdmFzX09iamVjdCogbykKK3ZvaWQgZXdrX2ZyYW1lX2ZvcmNlX2xh
eW91dChFdmFzX09iamVjdCogZXdrRnJhbWUpCiB7Ci0gICAgREJHKCJvPSVwIiwgbyk7Ci0gICAg
RVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4obywgc2QpOworICAgIERCRygiZXdrRnJhbWU9JXAi
LCBld2tGcmFtZSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNk
KTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+ZnJhbWUpOwogICAgIFdlYkNv
cmU6OkZyYW1lVmlldyogdmlldyA9IHNkLT5mcmFtZS0+dmlldygpOwogICAgIGlmICh2aWV3KQpA
QCAtMTYyMyw3ICsxNjIxLDcgQEAgdm9pZCBld2tfZnJhbWVfZm9yY2VfbGF5b3V0KEV2YXNfT2Jq
ZWN0KiBvKQogICoKICAqIENyZWF0ZXMgcGx1Z2luLgogICovCi1XVEY6OlBhc3NSZWZQdHI8V2Vi
Q29yZTo6V2lkZ2V0PiBld2tfZnJhbWVfcGx1Z2luX2NyZWF0ZShFdmFzX09iamVjdCogbywgY29u
c3QgV2ViQ29yZTo6SW50U2l6ZSYgcGx1Z2luU2l6ZSwgV2ViQ29yZTo6SFRNTFBsdWdJbkVsZW1l
bnQqIGVsZW1lbnQsIGNvbnN0IFdlYkNvcmU6OktVUkwmIHVybCwgY29uc3QgV1RGOjpWZWN0b3I8
V1RGOjpTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25zdCBXVEY6OlZlY3RvcjxXVEY6OlN0cmluZz4m
IHBhcmFtVmFsdWVzLCBjb25zdCBXVEY6OlN0cmluZyYgbWltZVR5cGUsIGJvb2wgbG9hZE1hbnVh
bGx5KQorV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OldpZGdldD4gZXdrX2ZyYW1lX3BsdWdpbl9j
cmVhdGUoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBwbHVn
aW5TaXplLCBXZWJDb3JlOjpIVE1MUGx1Z0luRWxlbWVudCogZWxlbWVudCwgY29uc3QgV2ViQ29y
ZTo6S1VSTCYgdXJsLCBjb25zdCBXVEY6OlZlY3RvcjxXVEY6OlN0cmluZz4mIHBhcmFtTmFtZXMs
IGNvbnN0IFdURjo6VmVjdG9yPFdURjo6U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0IFdURjo6
U3RyaW5nJiBtaW1lVHlwZSwgYm9vbCBsb2FkTWFudWFsbHkpCiB7CiAgICAgcmV0dXJuIDA7CiB9
CkBAIC0xNjM2LDEwICsxNjM0LDEwIEBAIFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpXaWRnZXQ+
IGV3a19mcmFtZV9wbHVnaW5fY3JlYXRlKEV2YXNfT2JqZWN0KiBvLCBjb25zdCBXCiAgKgogICog
RW1pdHMgc2lnbmFsOiAiZWRpdG9yY2xpZW50c2VsZWN0aW9uLGNoYW5nZWQiIHdpdGggbm8gcGFy
YW1ldGVycy4KICAqLwotdm9pZCBld2tfZnJhbWVfZWRpdG9yX2NsaWVudF9zZWxlY3Rpb25fY2hh
bmdlZChFdmFzX09iamVjdCogbykKK3ZvaWQgZXdrX2ZyYW1lX2VkaXRvcl9jbGllbnRfc2VsZWN0
aW9uX2NoYW5nZWQoRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewotICAgIGV2YXNfb2JqZWN0X3Nt
YXJ0X2NhbGxiYWNrX2NhbGwobywgImVkaXRvcmNsaWVudCxzZWxlY3Rpb24sY2hhbmdlZCIsIDAp
OwotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKG8sIHNkKTsKKyAgICBldmFzX29iamVj
dF9zbWFydF9jYWxsYmFja19jYWxsKGV3a0ZyYW1lLCAiZWRpdG9yY2xpZW50LHNlbGVjdGlvbixj
aGFuZ2VkIiwgMCk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNk
KTsKICAgICBld2tfdmlld19lZGl0b3JfY2xpZW50X3NlbGVjdGlvbl9jaGFuZ2VkKHNkLT52aWV3
KTsKIH0KIApAQCAtMTY1MSw5ICsxNjQ5LDkgQEAgdm9pZCBld2tfZnJhbWVfZWRpdG9yX2NsaWVu
dF9zZWxlY3Rpb25fY2hhbmdlZChFdmFzX09iamVjdCogbykKICAqCiAgKiBFbWl0cyBzaWduYWw6
ICJlZGl0b3JjbGllbnQsY29udGVudHMsY2hhbmdlZCIgd2l0aCBubyBwYXJhbWV0ZXJzLgogICov
Ci12b2lkIGV3a19mcmFtZV9lZGl0b3JfY2xpZW50X2NvbnRlbnRzX2NoYW5nZWQoRXZhc19PYmpl
Y3QqIG8pCit2b2lkIGV3a19mcmFtZV9lZGl0b3JfY2xpZW50X2NvbnRlbnRzX2NoYW5nZWQoRXZh
c19PYmplY3QqIGV3a0ZyYW1lKQogewotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2Nh
bGwobywgImVkaXRvcmNsaWVudCxjb250ZW50cyxjaGFuZ2VkIiwgMCk7Ci0gICAgRVdLX0ZSQU1F
X1NEX0dFVF9PUl9SRVRVUk4obywgc2QpOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNr
X2NhbGwoZXdrRnJhbWUsICJlZGl0b3JjbGllbnQsY29udGVudHMsY2hhbmdlZCIsIDApOworICAg
IEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCk7CiAgICAgZXdrX3ZpZXdf
ZWRpdG9yX2NsaWVudF9jb250ZW50c19jaGFuZ2VkKHNkLT52aWV3KTsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfaGlzdG9yeS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Vm
bC9ld2svZXdrX2hpc3RvcnkuY3BwCmluZGV4IDYyZDc3NDI5ODZjMjNhMjIyNDhiMzhlYTcxYjE0
OTQ5NDBlMTc5NjIuLjA2ZTIzNjk0OTlkZDU5YThjMTk5ZjIyYzFkMjg4Y2M1YTJlNjk4ZjUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfaGlzdG9yeS5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9lZmwvZXdrL2V3a19oaXN0b3J5LmNwcApAQCAtOTUsMTQgKzk1LDE0IEBAIHN0
YXRpYyBpbmxpbmUgRXdrX0hpc3RvcnlfSXRlbSogX2V3a19oaXN0b3J5X2l0ZW1fbmV3KFdlYkNv
cmU6Okhpc3RvcnlJdGVtKiBjb3JlCiAgICAgcmV0dXJuIGl0ZW07CiB9CiAKLXN0YXRpYyBpbmxp
bmUgRWluYV9MaXN0KiBfZXdrX2hpc3RvcnlfaXRlbV9saXN0X2dldChjb25zdCBXZWJDb3JlOjpI
aXN0b3J5SXRlbVZlY3RvciYgY29yZV9pdGVtcykKK3N0YXRpYyBpbmxpbmUgRWluYV9MaXN0KiBf
ZXdrX2hpc3RvcnlfaXRlbV9saXN0X2dldChjb25zdCBXZWJDb3JlOjpIaXN0b3J5SXRlbVZlY3Rv
ciYgY29yZUl0ZW1zKQogewogICAgIEVpbmFfTGlzdCogcmV0ID0gMDsKICAgICB1bnNpZ25lZCBp
bnQgaSwgc2l6ZTsKIAotICAgIHNpemUgPSBjb3JlX2l0ZW1zLnNpemUoKTsKKyAgICBzaXplID0g
Y29yZUl0ZW1zLnNpemUoKTsKICAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAg
ICAgIEV3a19IaXN0b3J5X0l0ZW0qIGl0ZW0gPSBfZXdrX2hpc3RvcnlfaXRlbV9uZXcoY29yZV9p
dGVtc1tpXS5nZXQoKSk7CisgICAgICAgIEV3a19IaXN0b3J5X0l0ZW0qIGl0ZW0gPSBfZXdrX2hp
c3RvcnlfaXRlbV9uZXcoY29yZUl0ZW1zW2ldLmdldCgpKTsKICAgICAgICAgaWYgKGl0ZW0pCiAg
ICAgICAgICAgICByZXQgPSBlaW5hX2xpc3RfYXBwZW5kKHJldCwgaXRlbSk7CiAgICAgfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19qcy5jcHAgYi9Tb3VyY2UvV2ViS2l0
L2VmbC9ld2svZXdrX2pzLmNwcAppbmRleCBmZjhjMzgzOTBmMDk3MWVjYzA0NjY4NzgyYTllNWZm
NDZhY2M5OWY3Li40MmNmZGZlYzFhNWI0ODNmNGZhMTNmNWU4YzhjNDE1ZDRlZjYwMWMxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2pzLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2VmbC9ld2svZXdrX2pzLmNwcApAQCAtODMsMTEgKzgzLDExIEBAIHN0YXRpYyBFaW5hX0Jv
b2wgZXdrX2pzX3ZhcmlhbnRfdG9fbnB2YXJpYW50KGNvbnN0IEV3a19KU19WYXJpYW50KiBkYXRh
LCBOUFZhcmlhCiB9CiAKIC8vIFRoZXNlIG1ldGhvZHMgYXJlIHVzZWQgYnkgTlBBSSwgdGhhdHMg
dGhlIHJlYXNvbiB0byB1c2UgYm9vbCBpbnN0ZWFkIG9mIEVpbmFfQm9vbC4KLXN0YXRpYyBib29s
IGV3a19qc19wcm9wZXJ0eV9oYXMoTlBPYmplY3QqIG5wX29iaiwgTlBJZGVudGlmaWVyIG5hbWUp
CitzdGF0aWMgYm9vbCBld2tfanNfcHJvcGVydHlfaGFzKE5QT2JqZWN0KiBucE9iamVjdCwgTlBJ
ZGVudGlmaWVyIG5hbWUpCiB7Ci0gICAgRXdrX0pTX09iamVjdCogb2JqID0gcmVpbnRlcnByZXRf
Y2FzdDxFd2tfSlNfT2JqZWN0Kj4obnBfb2JqKTsKKyAgICBFd2tfSlNfT2JqZWN0KiBvYmogPSBy
ZWludGVycHJldF9jYXN0PEV3a19KU19PYmplY3QqPihucE9iamVjdCk7CiAKLSAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwobnBfb2JqLCBmYWxzZSk7CisgICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk5fVkFMKG5wT2JqZWN0LCBmYWxzZSk7CiAgICAgRUlOQV9NQUdJQ19DSEVD
S19PUl9SRVRVUk4ob2JqLCBmYWxzZSk7CiAKICAgICBpZiAoIV9OUE5fSWRlbnRpZmllcklzU3Ry
aW5nKG5hbWUpKSB7CkBAIC0xMDIsMTQgKzEwMiwxNCBAQCBzdGF0aWMgYm9vbCBld2tfanNfcHJv
cGVydHlfaGFzKE5QT2JqZWN0KiBucF9vYmosIE5QSWRlbnRpZmllciBuYW1lKQogICAgIHJldHVy
biBmYWlsOwogfQogCi1zdGF0aWMgYm9vbCBld2tfanNfcHJvcGVydHlfZ2V0KE5QT2JqZWN0KiBu
cF9vYmosIE5QSWRlbnRpZmllciBuYW1lLCBOUFZhcmlhbnQqIHJlc3VsdCkKK3N0YXRpYyBib29s
IGV3a19qc19wcm9wZXJ0eV9nZXQoTlBPYmplY3QqIG5wT2JqZWN0LCBOUElkZW50aWZpZXIgbmFt
ZSwgTlBWYXJpYW50KiByZXN1bHQpCiB7Ci0gICAgRXdrX0pTX09iamVjdCogb2JqID0gcmVpbnRl
cnByZXRfY2FzdDxFd2tfSlNfT2JqZWN0Kj4obnBfb2JqKTsKKyAgICBFd2tfSlNfT2JqZWN0KiBv
YmogPSByZWludGVycHJldF9jYXN0PEV3a19KU19PYmplY3QqPihucE9iamVjdCk7CiAgICAgRXdr
X0pTX1ZhcmlhbnQqIHZhbHVlOwogICAgIEV3a19KU19Qcm9wZXJ0eSogcHJvcDsKICAgICBib29s
IGZhaWwgPSBmYWxzZTsKIAotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChucF9v
YmosIGZhbHNlKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwobnBPYmplY3Qs
IGZhbHNlKTsKICAgICBFSU5BX01BR0lDX0NIRUNLX09SX1JFVFVSTihvYmosIGZhbHNlKTsKIAog
ICAgIGlmICghX05QTl9JZGVudGlmaWVySXNTdHJpbmcobmFtZSkpIHsKQEAgLTE0NSwxNCArMTQ1
LDE0IEBAIHN0YXRpYyBib29sIGV3a19qc19wcm9wZXJ0eV9nZXQoTlBPYmplY3QqIG5wX29iaiwg
TlBJZGVudGlmaWVyIG5hbWUsIE5QVmFyaWFudCoKICAgICByZXR1cm4gZmFpbDsKIH0KIAotc3Rh
dGljIGJvb2wgZXdrX2pzX3Byb3BlcnR5X3NldChOUE9iamVjdCogbnBfb2JqLCBOUElkZW50aWZp
ZXIgbmFtZSwgY29uc3QgTlBWYXJpYW50KiBucF92YWx1ZSkKK3N0YXRpYyBib29sIGV3a19qc19w
cm9wZXJ0eV9zZXQoTlBPYmplY3QqIG5wT2JqZWN0LCBOUElkZW50aWZpZXIgbmFtZSwgY29uc3Qg
TlBWYXJpYW50KiBucFZhbHVlKQogewotICAgIEV3a19KU19PYmplY3QqIG9iaiA9IHJlaW50ZXJw
cmV0X2Nhc3Q8RXdrX0pTX09iamVjdCo+KG5wX29iaik7CisgICAgRXdrX0pTX09iamVjdCogb2Jq
ID0gcmVpbnRlcnByZXRfY2FzdDxFd2tfSlNfT2JqZWN0Kj4obnBPYmplY3QpOwogICAgIEV3a19K
U19WYXJpYW50KiB2YWx1ZTsKICAgICBFd2tfSlNfUHJvcGVydHkqIHByb3A7CiAgICAgYm9vbCBm
YWlsID0gZmFsc2U7CiAKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwobnBfb2Jq
LCBmYWxzZSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKG5wT2JqLCBmYWxz
ZSk7CiAgICAgRUlOQV9NQUdJQ19DSEVDS19PUl9SRVRVUk4ob2JqLCBmYWxzZSk7CiAKICAgICBp
ZiAoIV9OUE5fSWRlbnRpZmllcklzU3RyaW5nKG5hbWUpKSB7CkBAIC0xNjYsNyArMTY2LDcgQEAg
c3RhdGljIGJvb2wgZXdrX2pzX3Byb3BlcnR5X3NldChOUE9iamVjdCogbnBfb2JqLCBOUElkZW50
aWZpZXIgbmFtZSwgY29uc3QgTlBWYXIKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAot
ICAgIGV3a19qc19ucHZhcmlhbnRfdG9fdmFyaWFudCh2YWx1ZSwgbnBfdmFsdWUpOworICAgIGV3
a19qc19ucHZhcmlhbnRfdG9fdmFyaWFudCh2YWx1ZSwgbnBWYWx1ZSk7CiAgICAgY2hhciogcHJv
cF9uYW1lID0gX05QTl9VVEY4RnJvbUlkZW50aWZpZXIobmFtZSk7CiAgICAgcHJvcCA9IHN0YXRp
Y19jYXN0PEV3a19KU19Qcm9wZXJ0eSo+KGVpbmFfaGFzaF9maW5kKG9iai0+Y2xzLT5wcm9wZXJ0
aWVzLCBwcm9wX25hbWUpKTsKICAgICBpZiAocHJvcCAmJiBwcm9wLT5zZXQpCkBAIC0xODMsMTMg
KzE4MywxMyBAQCBzdGF0aWMgYm9vbCBld2tfanNfcHJvcGVydHlfc2V0KE5QT2JqZWN0KiBucF9v
YmosIE5QSWRlbnRpZmllciBuYW1lLCBjb25zdCBOUFZhcgogICAgIHJldHVybiBmYWlsOwogfQog
Ci1zdGF0aWMgYm9vbCBld2tfanNfcHJvcGVydHlfcmVtb3ZlKE5QT2JqZWN0KiBucF9vYmosIE5Q
SWRlbnRpZmllciBuYW1lKQorc3RhdGljIGJvb2wgZXdrX2pzX3Byb3BlcnR5X3JlbW92ZShOUE9i
amVjdCogbnBPYmplY3QsIE5QSWRlbnRpZmllciBuYW1lKQogewotICAgIEV3a19KU19PYmplY3Qq
IG9iaiA9IHJlaW50ZXJwcmV0X2Nhc3Q8RXdrX0pTX09iamVjdCo+KG5wX29iaik7CisgICAgRXdr
X0pTX09iamVjdCogb2JqID0gcmVpbnRlcnByZXRfY2FzdDxFd2tfSlNfT2JqZWN0Kj4obnBPYmpl
Y3QpOwogICAgIEV3a19KU19Qcm9wZXJ0eSogcHJvcDsKICAgICBib29sIGZhaWwgPSBmYWxzZTsK
IAotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChucF9vYmosIGZhbHNlKTsKKyAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwobnBPYmplY3QsIGZhbHNlKTsKICAgICBF
SU5BX01BR0lDX0NIRUNLX09SX1JFVFVSTihvYmosIGZhbHNlKTsKIAogICAgIGlmICghX05QTl9J
ZGVudGlmaWVySXNTdHJpbmcobmFtZSkpIHsKQEAgLTIxMCwxNCArMjEwLDE0IEBAIHN0YXRpYyBi
b29sIGV3a19qc19wcm9wZXJ0eV9yZW1vdmUoTlBPYmplY3QqIG5wX29iaiwgTlBJZGVudGlmaWVy
IG5hbWUpCiAgICAgcmV0dXJuIGZhaWw7CiB9CiAKLXN0YXRpYyBib29sIGV3a19qc19wcm9wZXJ0
aWVzX2VudW1lcmF0ZShOUE9iamVjdCogbnBfb2JqLCBOUElkZW50aWZpZXIqKiB2YWx1ZSwgdWlu
dDMyX3QqIGNvdW50KQorc3RhdGljIGJvb2wgZXdrX2pzX3Byb3BlcnRpZXNfZW51bWVyYXRlKE5Q
T2JqZWN0KiBucE9iamVjdCwgTlBJZGVudGlmaWVyKiogdmFsdWUsIHVpbnQzMl90KiBjb3VudCkK
IHsKLSAgICBFd2tfSlNfT2JqZWN0KiBvYmogPSByZWludGVycHJldF9jYXN0PEV3a19KU19PYmpl
Y3QqPihucF9vYmopOworICAgIEV3a19KU19PYmplY3QqIG9iaiA9IHJlaW50ZXJwcmV0X2Nhc3Q8
RXdrX0pTX09iamVjdCo+KG5wT2JqZWN0KTsKICAgICBFaW5hX0l0ZXJhdG9yKiBpdDsKICAgICBj
aGFyKiBrZXk7CiAgICAgaW50IGkgPSAwOwogCi0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk5fVkFMKG5wX29iaiwgZmFsc2UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZB
TChucE9iamVjdCwgZmFsc2UpOwogICAgIEVJTkFfTUFHSUNfQ0hFQ0tfT1JfUkVUVVJOKG9iaiwg
ZmFsc2UpOwogCiAgICAgKmNvdW50ID0gZWluYV9oYXNoX3BvcHVsYXRpb24ob2JqLT5wcm9wZXJ0
aWVzKTsKQEAgLTIzNSwxMSArMjM1LDExIEBAIHN0YXRpYyBib29sIGV3a19qc19wcm9wZXJ0aWVz
X2VudW1lcmF0ZShOUE9iamVjdCogbnBfb2JqLCBOUElkZW50aWZpZXIqKiB2YWx1ZSwKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGJvb2wgZXdrX2pzX21ldGhvZF9oYXMoTlBPYmplY3Qq
IG5wX29iaiwgTlBJZGVudGlmaWVyIG5hbWUpCitzdGF0aWMgYm9vbCBld2tfanNfbWV0aG9kX2hh
cyhOUE9iamVjdCogbnBPYmplY3QsIE5QSWRlbnRpZmllciBuYW1lKQogewotICAgIEV3a19KU19P
YmplY3QqIG9iaiA9IHJlaW50ZXJwcmV0X2Nhc3Q8RXdrX0pTX09iamVjdCo+KG5wX29iaik7Cisg
ICAgRXdrX0pTX09iamVjdCogb2JqID0gcmVpbnRlcnByZXRfY2FzdDxFd2tfSlNfT2JqZWN0Kj4o
bnBPYmplY3QpOwogCi0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKG5wX29iaiwg
ZmFsc2UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChucE9iamVjdCwgZmFs
c2UpOwogICAgIEVJTkFfTUFHSUNfQ0hFQ0tfT1JfUkVUVVJOKG9iaiwgZmFsc2UpOwogCiAgICAg
aWYgKCFfTlBOX0lkZW50aWZpZXJJc1N0cmluZyhuYW1lKSkgewpAQCAtMjQ5LDE0ICsyNDksMTQg
QEAgc3RhdGljIGJvb2wgZXdrX2pzX21ldGhvZF9oYXMoTlBPYmplY3QqIG5wX29iaiwgTlBJZGVu
dGlmaWVyIG5hbWUpCiAgICAgcmV0dXJuIGVpbmFfaGFzaF9maW5kKG9iai0+Y2xzLT5tZXRob2Rz
LCBuYW1lKTsgLy8gUmV0dXJucyBwb2ludGVyIGlmIGZvdW5kKHRydWUpLCAwKGZhbHNlKSBvdGhl
cndpc2UuCiB9CiAKLXN0YXRpYyBib29sIGV3a19qc19tZXRob2RfaW52b2tlKE5QT2JqZWN0KiBu
cF9vYmosIE5QSWRlbnRpZmllciBuYW1lLCBjb25zdCBOUFZhcmlhbnQqIG5wX2FyZ3MsIHVpbnQz
Ml90IG5wX2FyZ19jb3VudCwgTlBWYXJpYW50KiByZXN1bHQpCitzdGF0aWMgYm9vbCBld2tfanNf
bWV0aG9kX2ludm9rZShOUE9iamVjdCogbnBPYmplY3QsIE5QSWRlbnRpZmllciBuYW1lLCBjb25z
dCBOUFZhcmlhbnQqIG5wQXJncywgdWludDMyX3QgbnBBcmdDb3VudCwgTlBWYXJpYW50KiByZXN1
bHQpCiB7Ci0gICAgRXdrX0pTX09iamVjdCogb2JqID0gcmVpbnRlcnByZXRfY2FzdDxFd2tfSlNf
T2JqZWN0Kj4obnBfb2JqKTsKKyAgICBFd2tfSlNfT2JqZWN0KiBvYmogPSByZWludGVycHJldF9j
YXN0PEV3a19KU19PYmplY3QqPihucE9iamVjdCk7CiAgICAgRXdrX0pTX01ldGhvZCogbWV0aG9k
OwogICAgIEV3a19KU19WYXJpYW50KiBhcmdzOwogICAgIEV3a19KU19WYXJpYW50KiByZXRfdmFs
OwogCi0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKG5wX29iaiwgZmFsc2UpOwor
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChucE9iamVjdCwgZmFsc2UpOwogICAg
IEVJTkFfTUFHSUNfQ0hFQ0tfT1JfUkVUVVJOKG9iaiwgZmFsc2UpOwogCiAgICAgaWYgKCFfTlBO
X0lkZW50aWZpZXJJc1N0cmluZyhuYW1lKSkgewpAQCAtMjY4LDE1ICsyNjgsMTUgQEAgc3RhdGlj
IGJvb2wgZXdrX2pzX21ldGhvZF9pbnZva2UoTlBPYmplY3QqIG5wX29iaiwgTlBJZGVudGlmaWVy
IG5hbWUsIGNvbnN0IE5QVmEKICAgICBpZiAoIW1ldGhvZCkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgYXJncyA9IHN0YXRpY19jYXN0PEV3a19KU19WYXJpYW50Kj4obWFsbG9jKHNpemVv
ZihFd2tfSlNfVmFyaWFudCkgICpucF9hcmdfY291bnQpKTsKKyAgICBhcmdzID0gc3RhdGljX2Nh
c3Q8RXdrX0pTX1ZhcmlhbnQqPihtYWxsb2Moc2l6ZW9mKEV3a19KU19WYXJpYW50KSAgKm5wQXJn
Q291bnQpKTsKICAgICBpZiAoIWFyZ3MpIHsKICAgICAgICAgRVJSKCJDb3VsZCBub3QgYWxsb2Nh
dGUgbWVtb3J5IGZvciBld2tfanNfdmFyaWFudCIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQogCi0gICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG5wX2FyZ19jb3VudDsgaSsrKQot
ICAgICAgICBld2tfanNfbnB2YXJpYW50X3RvX3ZhcmlhbnQoJmFyZ3NbaV0sICZucF9hcmdzW2ld
KTsKLSAgICByZXRfdmFsID0gbWV0aG9kLT5pbnZva2Uob2JqLCBhcmdzLCBucF9hcmdfY291bnQp
OworICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBucEFyZ0NvdW50OyBpKyspCisgICAgICAg
IGV3a19qc19ucHZhcmlhbnRfdG9fdmFyaWFudCgmYXJnc1tpXSwgJm5wQXJnc1tpXSk7CisgICAg
cmV0X3ZhbCA9IG1ldGhvZC0+aW52b2tlKG9iaiwgYXJncywgbnBBcmdDb3VudCk7CiAgICAgZXdr
X2pzX3ZhcmlhbnRfdG9fbnB2YXJpYW50KHJldF92YWwsIHJlc3VsdCk7CiAKICAgICBld2tfanNf
dmFyaWFudF9mcmVlKHJldF92YWwpOwpAQCAtMjg0LDMwICsyODQsMzAgQEAgc3RhdGljIGJvb2wg
ZXdrX2pzX21ldGhvZF9pbnZva2UoTlBPYmplY3QqIG5wX29iaiwgTlBJZGVudGlmaWVyIG5hbWUs
IGNvbnN0IE5QVmEKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIEVpbmFfQm9vbCBld2tf
anNfbnBvYmplY3RfcHJvcGVydHlfZ2V0KEV3a19KU19PYmplY3QqIG9iaiwgY29uc3QgY2hhciog
bmFtZSwgRXdrX0pTX1ZhcmlhbnQqIHZhbHVlKQorc3RhdGljIEVpbmFfQm9vbCBld2tfanNfbnBv
YmplY3RfcHJvcGVydHlfZ2V0KEV3a19KU19PYmplY3QqIGpzT2JqZWN0LCBjb25zdCBjaGFyKiBu
YW1lLCBFd2tfSlNfVmFyaWFudCogdmFsdWUpCiB7CiAgICAgTlBJZGVudGlmaWVyIGlkID0gX05Q
Tl9HZXRTdHJpbmdJZGVudGlmaWVyKG5hbWUpOwogICAgIE5QVmFyaWFudCB2YXI7Ci0gICAgYm9v
bCBmYWlsID0gX05QTl9HZXRQcm9wZXJ0eSgwLCByZWludGVycHJldF9jYXN0PE5QT2JqZWN0Kj4o
b2JqKSwgaWQsICZ2YXIpOworICAgIGJvb2wgZmFpbCA9IF9OUE5fR2V0UHJvcGVydHkoMCwgcmVp
bnRlcnByZXRfY2FzdDxOUE9iamVjdCo+KGpzT2JqZWN0KSwgaWQsICZ2YXIpOwogICAgIGlmICgh
ZmFpbCkKICAgICAgICAgZmFpbCA9IGV3a19qc19ucHZhcmlhbnRfdG9fdmFyaWFudCh2YWx1ZSwg
JnZhcik7CiAgICAgcmV0dXJuIGZhaWw7CiB9CiAKLXN0YXRpYyBFaW5hX0Jvb2wgZXdrX2pzX25w
b2JqZWN0X3Byb3BlcnR5X3NldChFd2tfSlNfT2JqZWN0KiBvYmosIGNvbnN0IGNoYXIqIG5hbWUs
IGNvbnN0IEV3a19KU19WYXJpYW50KiB2YWx1ZSkKK3N0YXRpYyBFaW5hX0Jvb2wgZXdrX2pzX25w
b2JqZWN0X3Byb3BlcnR5X3NldChFd2tfSlNfT2JqZWN0KiBqc09iamVjdCwgY29uc3QgY2hhciog
bmFtZSwgY29uc3QgRXdrX0pTX1ZhcmlhbnQqIHZhbHVlKQogewogICAgIE5QSWRlbnRpZmllciBp
ZCA9IF9OUE5fR2V0U3RyaW5nSWRlbnRpZmllcihuYW1lKTsKICAgICBOUFZhcmlhbnQgdmFyOwog
ICAgIGJvb2wgZmFpbCA9IGV3a19qc192YXJpYW50X3RvX25wdmFyaWFudCh2YWx1ZSwgJnZhcik7
CiAgICAgaWYgKGZhaWwpCi0gICAgICAgIGZhaWwgPSBfTlBOX1NldFByb3BlcnR5KDAsIHJlaW50
ZXJwcmV0X2Nhc3Q8TlBPYmplY3QqPihvYmopLCBpZCwgJnZhcik7CisgICAgICAgIGZhaWwgPSBf
TlBOX1NldFByb3BlcnR5KDAsIHJlaW50ZXJwcmV0X2Nhc3Q8TlBPYmplY3QqPihqc09iamVjdCks
IGlkLCAmdmFyKTsKICAgICByZXR1cm4gZmFpbDsKIH0KIAotc3RhdGljIEVpbmFfQm9vbCBld2tf
anNfbnBvYmplY3RfcHJvcGVydHlfZGVsKEV3a19KU19PYmplY3QqIG9iaiwgY29uc3QgY2hhciog
bmFtZSkKK3N0YXRpYyBFaW5hX0Jvb2wgZXdrX2pzX25wb2JqZWN0X3Byb3BlcnR5X2RlbChFd2tf
SlNfT2JqZWN0KiBqc09iamVjdCwgY29uc3QgY2hhciogbmFtZSkKIHsKICAgICBOUElkZW50aWZp
ZXIgaWQgPSBfTlBOX0dldFN0cmluZ0lkZW50aWZpZXIobmFtZSk7Ci0gICAgcmV0dXJuIF9OUE5f
UmVtb3ZlUHJvcGVydHkoMCwgcmVpbnRlcnByZXRfY2FzdDxOUE9iamVjdCo+KG9iaiksIGlkKTsK
KyAgICByZXR1cm4gX05QTl9SZW1vdmVQcm9wZXJ0eSgwLCByZWludGVycHJldF9jYXN0PE5QT2Jq
ZWN0Kj4oanNPYmplY3QpLCBpZCk7CiB9CiAKIHN0YXRpYyB2b2lkIGV3a19qc19wcm9wZXJ0eV9m
cmVlKEV3a19KU19Qcm9wZXJ0eSogcHJvcCkKQEAgLTMyNywxMSArMzI3LDExIEBAIHN0YXRpYyB2
b2lkIGV3a19qc19wcm9wZXJ0eV9mcmVlKEV3a19KU19Qcm9wZXJ0eSogcHJvcCkKICAqCiAgKiBA
cmV0dXJuIFRoZSBFd2tfSlNfQ2xhc3MgY3JlYXRlZC4KICAqLwotRXdrX0pTX0NsYXNzKiBld2tf
anNfY2xhc3NfbmV3KGNvbnN0IEV3a19KU19DbGFzc19NZXRhKiBtZXRhKQorRXdrX0pTX0NsYXNz
KiBld2tfanNfY2xhc3NfbmV3KGNvbnN0IEV3a19KU19DbGFzc19NZXRhKiBqc01ldGFDbGFzcykK
IHsKICAgICBFd2tfSlNfQ2xhc3MqIGNsczsKIAotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOX1ZBTChtZXRhLCAwKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoanNN
ZXRhQ2xhc3MsIDApOwogCiAgICAgY2xzID0gc3RhdGljX2Nhc3Q8RXdrX0pTX0NsYXNzKj4obWFs
bG9jKHNpemVvZihFd2tfSlNfQ2xhc3MpKSk7CiAgICAgaWYgKCFjbHMpIHsKQEAgLTMzOSw3ICsz
MzksNyBAQCBFd2tfSlNfQ2xhc3MqIGV3a19qc19jbGFzc19uZXcoY29uc3QgRXdrX0pTX0NsYXNz
X01ldGEqIG1ldGEpCiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIGNscy0+bWV0YSA9
IG1ldGE7CisgICAgY2xzLT5tZXRhID0ganNNZXRhQ2xhc3M7CiAgICAgY2xzLT5kZWZhdWx0X3By
b3AgPSBtZXRhLT5kZWZhdWx0X3Byb3A7CiAKICAgICAvLyBEb24ndCBmcmVlIG1ldGhvZHMgc2lu
Y2UgdGhleSBwb2ludCB0byBtZXRhIGNsYXNzIG1ldGhvZHMod2lsbCBiZSBmcmVlZCB3aGVuIG1l
dGEgY2xhc3MgaXMgZnJlZWQpLgpAQCAtMzY0LDEyICszNjQsMTIgQEAgRXdrX0pTX0NsYXNzKiBl
d2tfanNfY2xhc3NfbmV3KGNvbnN0IEV3a19KU19DbGFzc19NZXRhKiBtZXRhKQogICoKICAqIEBw
YXJhbSBjbHMgQGEgRXdrX0pTX0NsYXNzIHRvIGJlIHJlbGVhc2VkLgogICovCi12b2lkIGV3a19q
c19jbGFzc19mcmVlKEV3a19KU19DbGFzcyogY2xzKQordm9pZCBld2tfanNfY2xhc3NfZnJlZShF
d2tfSlNfQ2xhc3MqIGpzQ2xhc3MpCiB7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4o
Y2xzKTsKLSAgICBlaW5hX2hhc2hfZnJlZShjbHMtPm1ldGhvZHMpOwotICAgIGVpbmFfaGFzaF9m
cmVlKGNscy0+cHJvcGVydGllcyk7Ci0gICAgZnJlZShjbHMpOworICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOKGpzQ2xhc3MpOworICAgIGVpbmFfaGFzaF9mcmVlKGpzQ2xhc3MtPm1ldGhv
ZHMpOworICAgIGVpbmFfaGFzaF9mcmVlKGpzQ2xhc3MtPnByb3BlcnRpZXMpOworICAgIGZyZWUo
anNDbGFzcyk7CiB9CiAKIHN0YXRpYyBOUENsYXNzIEVXS19OUENMQVNTID0gewpAQCAtMzg4LDcg
KzM4OCw3IEBAIHN0YXRpYyBOUENsYXNzIEVXS19OUENMQVNTID0gewogICAgIDAgLy8gTlBDb25z
dHJ1Y3RGdW5jdGlvbgogfTsKIAotc3RhdGljIEV3a19KU19PYmplY3QqIGV3a19qc19ucG9iamVj
dF90b19vYmplY3QoTlBPYmplY3QqIG5wX29iaikKK3N0YXRpYyBFd2tfSlNfT2JqZWN0KiBld2tf
anNfbnBvYmplY3RfdG9fb2JqZWN0KE5QT2JqZWN0KiBucE9iamVjdCkKIHsKICAgICBOUElkZW50
aWZpZXIqIHZhbHVlczsKICAgICB1aW50MzJfdCBucF9wcm9wc19jb3VudDsKQEAgLTM5OCw4ICsz
OTgsOCBAQCBzdGF0aWMgRXdrX0pTX09iamVjdCogZXdrX2pzX25wb2JqZWN0X3RvX29iamVjdChO
UE9iamVjdCogbnBfb2JqKQogICAgIEV3a19KU19Qcm9wZXJ0eSogcHJvcDsKICAgICBKYXZhU2Ny
aXB0T2JqZWN0KiBqc287CiAKLSAgICBpZiAoRUlOQV9NQUdJQ19DSEVDSyhyZWludGVycHJldF9j
YXN0PEV3a19KU19PYmplY3QqPihucF9vYmopLCBFV0tfSlNfT0JKRUNUX01BR0lDKSkKLSAgICAg
ICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8RXdrX0pTX09iamVjdCo+KG5wX29iaik7CisgICAg
aWYgKEVJTkFfTUFHSUNfQ0hFQ0socmVpbnRlcnByZXRfY2FzdDxFd2tfSlNfT2JqZWN0Kj4obnBP
YmplY3QpLCBFV0tfSlNfT0JKRUNUX01BR0lDKSkKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8RXdrX0pTX09iamVjdCo+KG5wT2JqZWN0KTsKIAogICAgIGlmICghX05QTl9FbnVtZXJh
dGUoMCwgbnBfb2JqLCAmdmFsdWVzLCAmbnBfcHJvcHNfY291bnQpKQogICAgICAgICByZXR1cm4g
MDsKQEAgLTQ0OCw3ICs0NDgsNyBAQCBzdGF0aWMgRXdrX0pTX09iamVjdCogZXdrX2pzX25wb2Jq
ZWN0X3RvX29iamVjdChOUE9iamVjdCogbnBfb2JqKQogICAgIG9iai0+Y2xzID0gY2xzOwogICAg
IG9iai0+dmlldyA9IDA7CiAKLSAgICBqc28gPSByZWludGVycHJldF9jYXN0PEphdmFTY3JpcHRP
YmplY3QqPihucF9vYmopOworICAgIGpzbyA9IHJlaW50ZXJwcmV0X2Nhc3Q8SmF2YVNjcmlwdE9i
amVjdCo+KG5wT2JqZWN0KTsKICAgICBpZiAoIXN0cmNtcCgiQXJyYXkiLCBqc28tPmltcC0+Y2xh
c3NOYW1lKCkuYXNjaWkoKS5kYXRhKCkpKQogICAgICAgICBvYmotPnR5cGUgPSBFV0tfSlNfT0JK
RUNUX0FSUkFZOwogICAgIGVsc2UgaWYgKCFzdHJjbXAoIkZ1bmN0aW9uIiwganNvLT5pbXAtPmNs
YXNzTmFtZSgpLmFzY2lpKCkuZGF0YSgpKSkKQEAgLTQ2OSw3ICs0NjksNyBAQCBzdGF0aWMgRXdr
X0pTX09iamVjdCogZXdrX2pzX25wb2JqZWN0X3RvX29iamVjdChOUE9iamVjdCogbnBfb2JqKQog
ICAgIH0KIAogICAgIGVpbmFfaXRlcmF0b3JfZnJlZShpdCk7Ci0gICAgb2JqLT5iYXNlID0gKnJl
aW50ZXJwcmV0X2Nhc3Q8SmF2YVNjcmlwdE9iamVjdCo+KG5wX29iaik7CisgICAgb2JqLT5iYXNl
ID0gKnJlaW50ZXJwcmV0X2Nhc3Q8SmF2YVNjcmlwdE9iamVjdCo+KG5wT2JqZWN0KTsKIAogICAg
IHJldHVybiBvYmo7CiAKQEAgLTUyNSw3ICs1MjUsNyBAQCBzdGF0aWMgRWluYV9Cb29sIGV3a19q
c19ucHZhcmlhbnRfdG9fdmFyaWFudChFd2tfSlNfVmFyaWFudCogZGF0YSwgY29uc3QgTlBWYXJp
YQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLUV3a19KU19PYmplY3QqIGV3a19qc19vYmpl
Y3RfbmV3KGNvbnN0IEV3a19KU19DbGFzc19NZXRhKiBtZXRhX2NscykKK0V3a19KU19PYmplY3Qq
IGV3a19qc19vYmplY3RfbmV3KGNvbnN0IEV3a19KU19DbGFzc19NZXRhKiBqc01ldGFDbGFzcykK
IHsKICAgICBFd2tfSlNfT2JqZWN0KiBvYmo7CiAKQEAgLTUzOCw3ICs1MzgsNyBAQCBFd2tfSlNf
T2JqZWN0KiBld2tfanNfb2JqZWN0X25ldyhjb25zdCBFd2tfSlNfQ2xhc3NfTWV0YSogbWV0YV9j
bHMpCiAgICAgfQogCiAgICAgRUlOQV9NQUdJQ19TRVQob2JqLCBFV0tfSlNfT0JKRUNUX01BR0lD
KTsKLSAgICBvYmotPmNscyA9IGV3a19qc19jbGFzc19uZXcobWV0YV9jbHMpOworICAgIG9iai0+
Y2xzID0gZXdrX2pzX2NsYXNzX25ldyhqc01ldGFDbGFzcyk7CiAgICAgb2JqLT52aWV3ID0gMDsK
ICAgICBvYmotPm5hbWUgPSAwOwogICAgIG9iai0+dHlwZSA9IEVXS19KU19PQkpFQ1RfT0JKRUNU
OwpAQCAtNTk0LDQ3ICs1OTQsNDcgQEAgZXJyb3I6CiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQg
ZXdrX2pzX29iamVjdF9mcmVlKEV3a19KU19PYmplY3QqIG9iaikKK3ZvaWQgZXdrX2pzX29iamVj
dF9mcmVlKEV3a19KU19PYmplY3QqIGpzT2JqZWN0KQogewotICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOKG9iaik7Ci0gICAgRUlOQV9NQUdJQ19DSEVDS19PUl9SRVRVUk4ob2JqKTsKLSAg
ICBFaW5hX0Jvb2wgc2NyaXB0X29iaiA9ICFvYmotPmNscy0+bWV0YTsKKyAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTihqc09iamVjdCk7CisgICAgRUlOQV9NQUdJQ19DSEVDS19PUl9SRVRV
Uk4oanNPYmplY3QpOworICAgIEVpbmFfQm9vbCBzY3JpcHRfb2JqID0gIWpzT2JqZWN0LT5jbHMt
Pm1ldGE7CiAKLSAgICBlaW5hX2hhc2hfZnJlZShvYmotPnByb3BlcnRpZXMpOwotICAgIGVpbmFf
c3RyaW5nc2hhcmVfZGVsKG9iai0+bmFtZSk7CisgICAgZWluYV9oYXNoX2ZyZWUoanNPYmplY3Qt
PnByb3BlcnRpZXMpOworICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVsKGpzT2JqZWN0LT5uYW1lKTsK
IAotICAgIGV3a19qc19jbGFzc19mcmVlKGNvbnN0X2Nhc3Q8RXdrX0pTX0NsYXNzKj4ob2JqLT5j
bHMpKTsKKyAgICBld2tfanNfY2xhc3NfZnJlZShjb25zdF9jYXN0PEV3a19KU19DbGFzcyo+KGpz
T2JqZWN0LT5jbHMpKTsKIAotICAgIEVJTkFfTUFHSUNfU0VUKG9iaiwgRUlOQV9NQUdJQ19OT05F
KTsKKyAgICBFSU5BX01BR0lDX1NFVChqc09iamVjdCwgRUlOQV9NQUdJQ19OT05FKTsKIAogICAg
IGlmIChzY3JpcHRfb2JqKQotICAgICAgICBmcmVlKG9iaik7CisgICAgICAgIGZyZWUoanNPYmpl
Y3QpOwogfQogCi1FaW5hX0hhc2gqIGV3a19qc19vYmplY3RfcHJvcGVydGllc19nZXQoY29uc3Qg
RXdrX0pTX09iamVjdCogb2JqKQorRWluYV9IYXNoKiBld2tfanNfb2JqZWN0X3Byb3BlcnRpZXNf
Z2V0KGNvbnN0IEV3a19KU19PYmplY3QqIGpzT2JqZWN0KQogewotICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOX1ZBTChvYmosIDApOwotICAgIEVJTkFfTUFHSUNfQ0hFQ0tfT1JfUkVUVVJO
KG9iaiwgMCk7Ci0gICAgcmV0dXJuIG9iai0+cHJvcGVydGllczsKKyAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTl9WQUwoanNPYmplY3QsIDApOworICAgIEVJTkFfTUFHSUNfQ0hFQ0tfT1Jf
UkVUVVJOKGpzT2JqZWN0LCAwKTsKKyAgICByZXR1cm4ganNPYmplY3QtPnByb3BlcnRpZXM7CiB9
CiAKLWNvbnN0IGNoYXIqIGV3a19qc19vYmplY3RfbmFtZV9nZXQoY29uc3QgRXdrX0pTX09iamVj
dCogb2JqKQorY29uc3QgY2hhciogZXdrX2pzX29iamVjdF9uYW1lX2dldChjb25zdCBFd2tfSlNf
T2JqZWN0KiBqc09iamVjdCkKIHsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwo
b2JqLCAwKTsKLSAgICBFSU5BX01BR0lDX0NIRUNLX09SX1JFVFVSTihvYmosIDApOwotICAgIHJl
dHVybiBvYmotPm5hbWU7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGpzT2Jq
ZWN0LCAwKTsKKyAgICBFSU5BX01BR0lDX0NIRUNLX09SX1JFVFVSTihqc09iamVjdCwgMCk7Cisg
ICAgcmV0dXJuIGpzT2JqZWN0LT5uYW1lOwogfQogCi1FaW5hX0Jvb2wgZXdrX2pzX29iamVjdF9p
bnZva2UoRXdrX0pTX09iamVjdCogb2JqLCBFd2tfSlNfVmFyaWFudCogYXJncywgaW50IGFyZ19j
b3VudCwgRXdrX0pTX1ZhcmlhbnQqIHJlc3VsdCkKK0VpbmFfQm9vbCBld2tfanNfb2JqZWN0X2lu
dm9rZShFd2tfSlNfT2JqZWN0KiBqc09iamVjdCwgRXdrX0pTX1ZhcmlhbnQqIGFyZ3MsIGludCBh
cmdDb3VudCwgRXdrX0pTX1ZhcmlhbnQqIHJlc3VsdCkKIHsKICAgICBOUFZhcmlhbnQqIG5wX2Fy
Z3M7CiAgICAgTlBWYXJpYW50IG5wX3Jlc3VsdDsKICAgICBib29sIGZhaWwgPSBFSU5BX0ZBTFNF
OwogCi0gICAgRUlOQV9NQUdJQ19DSEVDS19PUl9SRVRVUk4ob2JqLCBFSU5BX0ZBTFNFKTsKLSAg
ICBpZiAoZXdrX2pzX29iamVjdF90eXBlX2dldChvYmopICE9IEVXS19KU19PQkpFQ1RfRlVOQ1RJ
T04pCisgICAgRUlOQV9NQUdJQ19DSEVDS19PUl9SRVRVUk4oanNPYmplY3QsIEVJTkFfRkFMU0Up
OworICAgIGlmIChld2tfanNfb2JqZWN0X3R5cGVfZ2V0KGpzT2JqZWN0KSAhPSBFV0tfSlNfT0JK
RUNUX0ZVTkNUSU9OKQogICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKLSAgICBpZiAoYXJnX2Nv
dW50KQorICAgIGlmIChhcmdDb3VudCkKICAgICAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk5fVkFMKGFyZ3MsIEVJTkFfRkFMU0UpOwogCiAgICAgbnBfYXJncyA9IHN0YXRpY19jYXN0PE5Q
VmFyaWFudCo+KG1hbGxvYyhzaXplb2YoTlBWYXJpYW50KSAgKmFyZ19jb3VudCkpOwpAQCAtNjQz
LDExICs2NDMsMTEgQEAgRWluYV9Cb29sIGV3a19qc19vYmplY3RfaW52b2tlKEV3a19KU19PYmpl
Y3QqIG9iaiwgRXdrX0pTX1ZhcmlhbnQqIGFyZ3MsIGludCBhcmcKICAgICAgICAgcmV0dXJuIEVJ
TkFfRkFMU0U7CiAgICAgfQogCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcmdfY291bnQ7IGkr
KykKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGFyZ0NvdW50OyBpKyspCiAgICAgICAgIGlmICgh
ZXdrX2pzX3ZhcmlhbnRfdG9fbnB2YXJpYW50KCZhcmdzW2ldLCAmbnBfYXJnc1tpXSkpCiAgICAg
ICAgICAgICBnb3RvIGVuZDsKIAotICAgIGlmICghKGZhaWwgPSBfTlBOX0ludm9rZURlZmF1bHQo
MCwgcmVpbnRlcnByZXRfY2FzdDxOUE9iamVjdCo+KG9iaiksIG5wX2FyZ3MsIGFyZ19jb3VudCwg
Jm5wX3Jlc3VsdCkpKQorICAgIGlmICghKGZhaWwgPSBfTlBOX0ludm9rZURlZmF1bHQoMCwgcmVp
bnRlcnByZXRfY2FzdDxOUE9iamVjdCo+KGpzT2JqZWN0KSwgbnBfYXJncywgYXJnQ291bnQsICZu
cF9yZXN1bHQpKSkKICAgICAgICAgZ290byBlbmQ7CiAgICAgaWYgKHJlc3VsdCkKICAgICAgICAg
ZmFpbCA9IGV3a19qc19ucHZhcmlhbnRfdG9fdmFyaWFudChyZXN1bHQsICZucF9yZXN1bHQpOwpA
QCAtNjU3LDg0ICs2NTcsODQgQEAgZW5kOgogICAgIHJldHVybiBmYWlsOwogfQogCi1Fd2tfSlNf
T2JqZWN0X1R5cGUgZXdrX2pzX29iamVjdF90eXBlX2dldChFd2tfSlNfT2JqZWN0KiBvYmopCitF
d2tfSlNfT2JqZWN0X1R5cGUgZXdrX2pzX29iamVjdF90eXBlX2dldChFd2tfSlNfT2JqZWN0KiBq
c09iamVjdCkKIHsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwob2JqLCBFV0tf
SlNfT0JKRUNUX09CSkVDVCk7Ci0gICAgRUlOQV9NQUdJQ19DSEVDS19PUl9SRVRVUk4ob2JqLCBF
V0tfSlNfT0JKRUNUX09CSkVDVCk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFM
KGpzT2JqZWN0LCBFV0tfSlNfT0JKRUNUX09CSkVDVCk7CisgICAgRUlOQV9NQUdJQ19DSEVDS19P
Ul9SRVRVUk4oanNPb2JqZWN0LCBFV0tfSlNfT0JKRUNUX09CSkVDVCk7CiAKICAgICByZXR1cm4g
b2JqLT50eXBlOwogfQogCi12b2lkIGV3a19qc19vYmplY3RfdHlwZV9zZXQoRXdrX0pTX09iamVj
dCogb2JqLCBFd2tfSlNfT2JqZWN0X1R5cGUgdHlwZSkKK3ZvaWQgZXdrX2pzX29iamVjdF90eXBl
X3NldChFd2tfSlNfT2JqZWN0KiBqc09iamVjdCwgRXdrX0pTX09iamVjdF9UeXBlIHR5cGUpCiB7
Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4ob2JqKTsKLSAgICBFSU5BX01BR0lDX0NI
RUNLX09SX1JFVFVSTihvYmopOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGpzT2Jq
ZWN0KTsKKyAgICBFSU5BX01BR0lDX0NIRUNLX09SX1JFVFVSTihqc09iamVjdCk7CiAKLSAgICBv
YmotPnR5cGUgPSB0eXBlOworICAgIG9iamVjdC0+dHlwZSA9IHR5cGU7CiB9CiAKLXZvaWQgZXdr
X2pzX3ZhcmlhbnRfZnJlZShFd2tfSlNfVmFyaWFudCogdmFyKQordm9pZCBld2tfanNfdmFyaWFu
dF9mcmVlKEV3a19KU19WYXJpYW50KiBqc1ZhcmlhbnQpCiB7Ci0gICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk4odmFyKTsKLSAgICBpZiAodmFyLT50eXBlID09IEVXS19KU19WQVJJQU5UX1NU
UklORykKLSAgICAgICAgZnJlZSh2YXItPnZhbHVlLnMpOwotICAgIGVsc2UgaWYgKHZhci0+dHlw
ZSA9PSBFV0tfSlNfVkFSSUFOVF9PQkpFQ1QpCi0gICAgICAgIGV3a19qc19vYmplY3RfZnJlZSh2
YXItPnZhbHVlLm8pOwotICAgIGZyZWUodmFyKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTihqc1ZhcmlhbnQpOworICAgIGlmICh2YXJpYW50LT50eXBlID09IEVXS19KU19WQVJJQU5U
X1NUUklORykKKyAgICAgICAgZnJlZShqc1ZhcmlhbnQtPnZhbHVlLnMpOworICAgIGVsc2UgaWYg
KGpzVmFyaWFudC0+dHlwZSA9PSBFV0tfSlNfVkFSSUFOVF9PQkpFQ1QpCisgICAgICAgIGV3a19q
c19vYmplY3RfZnJlZShqc1ZhcmlhbnQtPnZhbHVlLm8pOworICAgIGZyZWUoanNWYXJpYW50KTsK
IH0KIAotdm9pZCBld2tfanNfdmFyaWFudF9hcnJheV9mcmVlKEV3a19KU19WYXJpYW50KiB2YXIs
IGludCBjb3VudCkKK3ZvaWQgZXdrX2pzX3ZhcmlhbnRfYXJyYXlfZnJlZShFd2tfSlNfVmFyaWFu
dCoganNWYXJpYW50LCBpbnQgY291bnQpCiB7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk4odmFyKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihqc1ZhcmlhbnQpOwogICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotICAgICAgICBpZiAodmFyW2ldLnR5
cGUgPT0gRVdLX0pTX1ZBUklBTlRfU1RSSU5HKQotICAgICAgICAgICAgZnJlZSh2YXJbaV0udmFs
dWUucyk7Ci0gICAgICAgIGVsc2UgaWYgKHZhcltpXS50eXBlID09IEVXS19KU19WQVJJQU5UX09C
SkVDVCkKLSAgICAgICAgICAgIGV3a19qc19vYmplY3RfZnJlZSh2YXJbaV0udmFsdWUubyk7Cisg
ICAgICAgIGlmIChqc1ZhcmlhbnRbaV0udHlwZSA9PSBFV0tfSlNfVkFSSUFOVF9TVFJJTkcpCisg
ICAgICAgICAgICBmcmVlKGpzVmFyaWFudFtpXS52YWx1ZS5zKTsKKyAgICAgICAgZWxzZSBpZiAo
anNWYXJpYW50W2ldLnR5cGUgPT0gRVdLX0pTX1ZBUklBTlRfT0JKRUNUKQorICAgICAgICAgICAg
ZXdrX2pzX29iamVjdF9mcmVlKGpzVmFyaWFudFtpXS52YWx1ZS5vKTsKICAgICB9Ci0gICAgZnJl
ZSh2YXIpOworICAgIGZyZWUoanNWYXJpYW50KTsKIH0KIAogI2Vsc2UKIAotRWluYV9IYXNoKiBl
d2tfanNfb2JqZWN0X3Byb3BlcnRpZXNfZ2V0KGNvbnN0IEV3a19KU19PYmplY3QqIG9iaikKK0Vp
bmFfSGFzaCogZXdrX2pzX29iamVjdF9wcm9wZXJ0aWVzX2dldChjb25zdCBFd2tfSlNfT2JqZWN0
KiBqc09iamVjdCkKIHsKICAgICByZXR1cm4gMDsKIH0KIAotY29uc3QgY2hhciogZXdrX2pzX29i
amVjdF9uYW1lX2dldChjb25zdCBFd2tfSlNfT2JqZWN0KiBvYmopCitjb25zdCBjaGFyKiBld2tf
anNfb2JqZWN0X25hbWVfZ2V0KGNvbnN0IEV3a19KU19PYmplY3QqIGpzT2JqZWN0KQogewogICAg
IHJldHVybiAwOwogfQogCi12b2lkIGV3a19qc192YXJpYW50X2ZyZWUoRXdrX0pTX1ZhcmlhbnQq
IHZhcikKK3ZvaWQgZXdrX2pzX3ZhcmlhbnRfZnJlZShFd2tfSlNfVmFyaWFudCoganNWYXJpYW50
KQogewogfQogCi12b2lkIGV3a19qc192YXJpYW50X2FycmF5X2ZyZWUoRXdrX0pTX1ZhcmlhbnQq
IHZhciwgaW50IGNvdW50KQordm9pZCBld2tfanNfdmFyaWFudF9hcnJheV9mcmVlKEV3a19KU19W
YXJpYW50KiBqc1ZhcmlhbnQsIGludCBjb3VudCkKIHsKIH0KIAotRXdrX0pTX09iamVjdCogZXdr
X2pzX29iamVjdF9uZXcoY29uc3QgRXdrX0pTX0NsYXNzX01ldGEqIG1ldGFfY2xzKQorRXdrX0pT
X09iamVjdCogZXdrX2pzX29iamVjdF9uZXcoY29uc3QgRXdrX0pTX0NsYXNzX01ldGEqIGpzTWV0
YUNsYXNzKQogewogICAgIHJldHVybiAwOwogfQogCi12b2lkIGV3a19qc19vYmplY3RfZnJlZShF
d2tfSlNfT2JqZWN0KiBvYmopCit2b2lkIGV3a19qc19vYmplY3RfZnJlZShFd2tfSlNfT2JqZWN0
KiBqc09iamVjdCkKIHsKIH0KIAotRWluYV9Cb29sIGV3a19qc19vYmplY3RfaW52b2tlKEV3a19K
U19PYmplY3QqIG9iaiwgRXdrX0pTX1ZhcmlhbnQqIGFyZ3MsIGludCBhcmdfY291bnQsIEV3a19K
U19WYXJpYW50KiByZXN1bHQpCitFaW5hX0Jvb2wgZXdrX2pzX29iamVjdF9pbnZva2UoRXdrX0pT
X09iamVjdCoganNPYmplY3QsIEV3a19KU19WYXJpYW50KiBhcmdzLCBpbnQgYXJnQ291bnQsIEV3
a19KU19WYXJpYW50KiByZXN1bHQpCiB7CiAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CiB9CiAKLUV3
a19KU19PYmplY3RfVHlwZSBld2tfanNfb2JqZWN0X3R5cGVfZ2V0KEV3a19KU19PYmplY3QqIG9i
aikKK0V3a19KU19PYmplY3RfVHlwZSBld2tfanNfb2JqZWN0X3R5cGVfZ2V0KEV3a19KU19PYmpl
Y3QqIGpzT2JqZWN0KQogewogICAgIHJldHVybiBFV0tfSlNfT0JKRUNUX0lOVkFMSUQ7CiB9CiAK
LXZvaWQgZXdrX2pzX29iamVjdF90eXBlX3NldChFd2tfSlNfT2JqZWN0KiBvYmosIEV3a19KU19P
YmplY3RfVHlwZSB0eXBlKQordm9pZCBld2tfanNfb2JqZWN0X3R5cGVfc2V0KEV3a19KU19PYmpl
Y3QqIGpzT2JqZWN0LCBFd2tfSlNfT2JqZWN0X1R5cGUgdHlwZSkKIHsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19wcm90b2NvbF9oYW5kbGVyX3NvdXAuY3BwIGIv
U291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19wcm90b2NvbF9oYW5kbGVyX3NvdXAuY3BwCmluZGV4
IGFkM2Y5MjFmZmRjMGYwMTVlMmNhNzk5MzhkOTJmY2ZiYmJlOGQ5OTMuLjlkNTlmZGM5NzY0ZWVm
Y2I1NmMyZDdmM2U2YjhhYzdiM2QzNDBhZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZs
L2V3ay9ld2tfcHJvdG9jb2xfaGFuZGxlcl9zb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Vm
bC9ld2svZXdrX3Byb3RvY29sX2hhbmRsZXJfc291cC5jcHAKQEAgLTUxLDE0ICs1MSwxNCBAQCBz
dGF0aWMgdm9pZCBld2tfY3VzdG9tX3Byb3RvY29sX2hhbmRsZXJfaW5pdChFd2tDdXN0b21Qcm90
b2NvbEhhbmRsZXIqIGN1c3RvbVBybwogICAgIGN1c3RvbVByb3RvY29sSGFuZGxlci0+cHJpdi0+
Ynl0ZXNSZWFkID0gMDsKIH0KIAotc3RhdGljIHZvaWQgZXdrX2N1c3RvbV9wcm90b2NvbF9oYW5k
bGVyX2ZpbmFsaXplKEdPYmplY3QqIG9iaikKK3N0YXRpYyB2b2lkIGV3a19jdXN0b21fcHJvdG9j
b2xfaGFuZGxlcl9maW5hbGl6ZShHT2JqZWN0KiBvYmplY3QpCiB7Ci0gICAgRXdrUHJvdG9jb2xI
YW5kbGVyUHJpdmF0ZSogcHJpdiAgPSBHX1RZUEVfSU5TVEFOQ0VfR0VUX1BSSVZBVEUob2JqLCBF
V0tfVFlQRV9DVVNUT01fUFJPVE9DT0xfSEFORExFUiwKKyAgICBFd2tQcm90b2NvbEhhbmRsZXJQ
cml2YXRlKiBwcml2ICA9IEdfVFlQRV9JTlNUQU5DRV9HRVRfUFJJVkFURShvYmplY3QsIEVXS19U
WVBFX0NVU1RPTV9QUk9UT0NPTF9IQU5ETEVSLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV3a1Byb3RvY29sSGFuZGxl
clByaXZhdGUpOwogICAgIGlmIChwcml2KQogICAgICAgICBmcmVlKHByaXYtPm1pbWUpOwogCi0g
ICAgR19PQkpFQ1RfQ0xBU1MoZXdrX2N1c3RvbV9wcm90b2NvbF9oYW5kbGVyX3BhcmVudF9jbGFz
cyktPmZpbmFsaXplKG9iaik7CisgICAgR19PQkpFQ1RfQ0xBU1MoZXdrX2N1c3RvbV9wcm90b2Nv
bF9oYW5kbGVyX3BhcmVudF9jbGFzcyktPmZpbmFsaXplKG9iamVjdCk7CiB9CiAKIHN0YXRpYyBn
Ym9vbGVhbiBld2tfY3VzdG9tX3Byb3RvY29sX2hhbmRsZXJfY2hlY2tfdXJpKFNvdXBSZXF1ZXN0
KiByZXF1ZXN0LCBTb3VwVVJJKiB1cmksIEdFcnJvcioqIGVycm9yKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9lZmwvZXdrL2V3a19zZXR0aW5ncy5jcHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC9l
d2svZXdrX3NldHRpbmdzLmNwcAppbmRleCA4M2RiNTM4MzAyM2YxNTIyNTE3OWZmMTdmZjYwYjI1
MmJiNTc0MjliLi5mMGJhNmViY2IyZjdlNWRjMTExZmVjNDViNWY2Y2NkNTAzOTgzZWE2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3NldHRpbmdzLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2VmbC9ld2svZXdrX3NldHRpbmdzLmNwcApAQCAtMzEsNiArMzEsOCBAQAogI2lu
Y2x1ZGUgIkludFNpemUuaCIKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiTWVtb3J5Q2Fj
aGUuaCIKKy8vIEZJWE1FOiBXaHkgaXMgdGhlcmUgYSBkaXJlY3RvcnkgaW4gdGhpcyBpbmNsdWRl
PworI2luY2x1ZGUgImFwcGNhY2hlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmgiCiAjaW5jbHVk
ZSAiZXdrX3ByaXZhdGUuaCIKIAogI2luY2x1ZGUgPEVpbmEuaD4KQEAgLTQ0LDkgKzQ2LDYgQEAK
ICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5n
Q29uY2F0ZW5hdGUuaD4KIAotLy8gRklYTUU6IFdoeSBpcyB0aGVyZSBhIGRpcmVjdG9yeSBpbiB0
aGlzIGluY2x1ZGU/Ci0jaW5jbHVkZSAiYXBwY2FjaGUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2Uu
aCIKLQogc3RhdGljIGNvbnN0IGNoYXIqIF9ld2tfY2FjaGVfZGlyZWN0b3J5X3BhdGggPSAwOwog
CiBzdGF0aWMgY29uc3QgY2hhciogX2V3a19pY29uX2RhdGFiYXNlX3BhdGggPSAwOwpAQCAtMjI5
LDEyICsyMjgsMTIgQEAgdm9pZCBld2tfc2V0dGluZ3NfY2FjaGVfY2FwYWNpdHlfc2V0KHVuc2ln
bmVkIGNhcGFjaXR5KQogICAgIGNhY2hlLT5zZXRDYXBhY2l0aWVzKDAsIGNhcGFjaXR5LCBjYXBh
Y2l0eSk7CiB9CiAKLXZvaWQgZXdrX3NldHRpbmdzX3JlcGFpbnRfdGhyb3R0bGluZ19zZXQoZG91
YmxlIGRlZmVycmVkX3JlcGFpbnRfZGVsYXksIGRvdWJsZSBpbml0aWFsX2RlZmVycmVkX3JlcGFp
bnRfZGVsYXlfZHVyaW5nX2xvYWRpbmcsIGRvdWJsZSBtYXhfZGVmZXJyZWRfcmVwYWludF9kZWxh
eV9kdXJpbmdfbG9hZGluZywgZG91YmxlIGRlZmVycmVkX3JlcGFpbnRfZGVsYXlfaW5jcmVtZW50
X2R1cmluZ19sb2FkaW5nKQordm9pZCBld2tfc2V0dGluZ3NfcmVwYWludF90aHJvdHRsaW5nX3Nl
dChkb3VibGUgZGVmZXJyZWRSZXBhaW50RGVsYXksIGRvdWJsZSBpbml0aWFsRGVmZXJyZWRSZXBh
aW50RGVsYXlEdXJpbmdMb2FkaW5nLCBkb3VibGUgbWF4RGVmZXJyZWRSZXBhaW50RGVsYXlEdXJp
bmdMb2FkaW5nLCBkb3VibGUgZGVmZXJyZWRSZXBhaW50RGVsYXlJbmNyZW1lbnREdXJpbmdMb2Fk
aW5nKQogewotICAgIFdlYkNvcmU6OkZyYW1lVmlldzo6c2V0UmVwYWludFRocm90dGxpbmdEZWZl
cnJlZFJlcGFpbnREZWxheShkZWZlcnJlZF9yZXBhaW50X2RlbGF5KTsKLSAgICBXZWJDb3JlOjpG
cmFtZVZpZXc6OnNldFJlcGFpbnRUaHJvdHRsaW5nbkluaXRpYWxEZWZlcnJlZFJlcGFpbnREZWxh
eUR1cmluZ0xvYWRpbmcoaW5pdGlhbF9kZWZlcnJlZF9yZXBhaW50X2RlbGF5X2R1cmluZ19sb2Fk
aW5nKTsKLSAgICBXZWJDb3JlOjpGcmFtZVZpZXc6OnNldFJlcGFpbnRUaHJvdHRsaW5nTWF4RGVm
ZXJyZWRSZXBhaW50RGVsYXlEdXJpbmdMb2FkaW5nKG1heF9kZWZlcnJlZF9yZXBhaW50X2RlbGF5
X2R1cmluZ19sb2FkaW5nKTsKLSAgICBXZWJDb3JlOjpGcmFtZVZpZXc6OnNldFJlcGFpbnRUaHJv
dHRsaW5nRGVmZXJyZWRSZXBhaW50RGVsYXlJbmNyZW1lbnREdXJpbmdMb2FkaW5nKGRlZmVycmVk
X3JlcGFpbnRfZGVsYXlfaW5jcmVtZW50X2R1cmluZ19sb2FkaW5nKTsKKyAgICBXZWJDb3JlOjpG
cmFtZVZpZXc6OnNldFJlcGFpbnRUaHJvdHRsaW5nRGVmZXJyZWRSZXBhaW50RGVsYXkoZGVmZXJy
ZWRSZXBhaW50RGVsYXkpOworICAgIFdlYkNvcmU6OkZyYW1lVmlldzo6c2V0UmVwYWludFRocm90
dGxpbmduSW5pdGlhbERlZmVycmVkUmVwYWludERlbGF5RHVyaW5nTG9hZGluZyhpbml0aWFsRGVm
ZXJyZWRSZXBhaW50RGVsYXlEdXJpbmdMb2FkaW5nKTsKKyAgICBXZWJDb3JlOjpGcmFtZVZpZXc6
OnNldFJlcGFpbnRUaHJvdHRsaW5nTWF4RGVmZXJyZWRSZXBhaW50RGVsYXlEdXJpbmdMb2FkaW5n
KG1heERlZmVycmVkUmVwYWludERlbGF5RHVyaW5nTG9hZGluZyk7CisgICAgV2ViQ29yZTo6RnJh
bWVWaWV3OjpzZXRSZXBhaW50VGhyb3R0bGluZ0RlZmVycmVkUmVwYWludERlbGF5SW5jcmVtZW50
RHVyaW5nTG9hZGluZyhkZWZlcnJlZFJlcGFpbnREZWxheUluY3JlbWVudER1cmluZ0xvYWRpbmcp
OwogfQogCiAvKioKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmUuY3BwCmluZGV4IGQ3MTJmN2FhMzNkNTliMTlkOTM0MDIyZDE4MzYwNzljMzYwYjE1
MTkuLjc5NGE5MGM1NzQ2ZjYwZTUyM2I2ZGU1ZTI1MmJiY2IwNTFiMDc1NjQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfYmFja2luZ19zdG9yZS5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9lZmwvZXdrL2V3a190aWxlZF9iYWNraW5nX3N0b3JlLmNwcApAQCAtNDYs
OSArNDYsOSBAQCB0eXBlZGVmIGVudW0gX0V3a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5k
ZXJfUHJpb3JpdHkgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcgogCiBzdHJ1Y3QgX0V3a19UaWxlZF9C
YWNraW5nX1N0b3JlX0l0ZW0gewogICAgIEVJTkFfSU5MSVNUOwotICAgIEV3a19UaWxlICp0aWxl
OworICAgIEV3a19UaWxlKiB0aWxlOwogICAgIHN0cnVjdCB7Ci0gICAgICAgIEV2YXNfQ29vcmQg
eCwgeSwgdywgaDsKKyAgICAgICAgRXZhc19Db29yZCB4LCB5LCB3aWR0aCwgaGVpZ2h0OwogICAg
IH0gZ2VvbWV0cnk7CiAgICAgRWluYV9Cb29sIHNtb290aF9zY2FsZTsKIH07CkBAIC02MSwxNiAr
NjEsMTYgQEAgc3RydWN0IF9Fd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVl
c3QgewogCiBzdHJ1Y3QgX0V3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgewogICAgIEV2YXNf
T2JqZWN0X1NtYXJ0X0NsaXBwZWRfRGF0YSBiYXNlOwotICAgIEV2YXNfT2JqZWN0ICpzZWxmOwot
ICAgIEV2YXNfT2JqZWN0ICpjb250ZW50c19jbGlwcGVyOworICAgIEV2YXNfT2JqZWN0KiBzZWxm
OworICAgIEV2YXNfT2JqZWN0KiBjb250ZW50c19jbGlwcGVyOwogICAgIHN0cnVjdCB7Ci0gICAg
ICAgIEVpbmFfSW5saXN0ICoqaXRlbXM7Ci0gICAgICAgIEV2YXNfQ29vcmQgeCwgeSwgdywgaDsK
KyAgICAgICAgRWluYV9Jbmxpc3QqKiBpdGVtczsKKyAgICAgICAgRXZhc19Db29yZCB4LCB5LCB3
aWR0aCwgaGVpZ2h0OwogICAgICAgICBsb25nIGNvbHMsIHJvd3M7CiAgICAgICAgIHN0cnVjdCB7
Ci0gICAgICAgICAgICBFdmFzX0Nvb3JkIHcsIGg7CisgICAgICAgICAgICBFdmFzX0Nvb3JkIHdp
ZHRoLCBoZWlnaHQ7CiAgICAgICAgICAgICBmbG9hdCB6b29tOwotICAgICAgICAgICAgRWluYV9C
b29sIHpvb21fd2Vha19zbW9vdGhfc2NhbGU6MTsKKyAgICAgICAgICAgIEVpbmFfQm9vbCB6b29t
X3dlYWtfc21vb3RoX3NjYWxlIDogMTsKICAgICAgICAgfSB0aWxlOwogICAgICAgICBzdHJ1Y3Qg
ewogICAgICAgICAgICAgc3RydWN0IHsKQEAgLTgwLDcgKzgwLDcgQEAgc3RydWN0IF9Fd2tfVGls
ZWRfQmFja2luZ19TdG9yZV9EYXRhIHsKICAgICB9IHZpZXc7CiAgICAgRXZhc19Db2xvcnNwYWNl
IGNzcGFjZTsKICAgICBzdHJ1Y3QgewotICAgICAgICBFd2tfVGlsZV9NYXRyaXggKm1hdHJpeDsK
KyAgICAgICAgRXdrX1RpbGVfTWF0cml4KiBtYXRyaXg7CiAgICAgICAgIHN0cnVjdCB7CiAgICAg
ICAgICAgICB1bnNpZ25lZCBsb25nIGNvbCwgcm93OwogICAgICAgICB9IGJhc2U7CkBAIC05MCwy
OCArOTAsMjggQEAgc3RydWN0IF9Fd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhIHsKICAgICAg
ICAgRXZhc19Db29yZCB3aWR0aCwgaGVpZ2h0OwogICAgIH0gbW9kZWw7CiAgICAgc3RydWN0IHsK
LSAgICAgICAgRWluYV9Cb29sICgqY2IpKHZvaWQgKmRhdGEsIEV3a19UaWxlICp0LCBjb25zdCBF
aW5hX1JlY3RhbmdsZSAqYXJlYSk7Ci0gICAgICAgIHZvaWQgKmRhdGE7Ci0gICAgICAgIEVpbmFf
SW5saXN0ICpwcmVfcmVuZGVyX3JlcXVlc3RzOwotICAgICAgICBFY29yZV9JZGxlciAqaWRsZXI7
CisgICAgICAgIEVpbmFfQm9vbCAoKmNiKSh2b2lkKiBkYXRhLCBFd2tfVGlsZSogdGlsZSwgY29u
c3QgRWluYV9SZWN0YW5nbGUqIGFyZWEpOworICAgICAgICB2b2lkKiBkYXRhOworICAgICAgICBF
aW5hX0lubGlzdCogcHJlX3JlbmRlcl9yZXF1ZXN0czsKKyAgICAgICAgRWNvcmVfSWRsZXIqIGlk
bGVyOwogICAgICAgICBFaW5hX0Jvb2wgZGlzYWJsZWQ7Ci0gICAgICAgIEVpbmFfQm9vbCBzdXNw
ZW5kOjE7CisgICAgICAgIEVpbmFfQm9vbCBzdXNwZW5kIDogMTsKICAgICB9IHJlbmRlcjsKICAg
ICBzdHJ1Y3QgewotICAgICAgICB2b2lkICooKnByZV9jYikodm9pZCAqZGF0YSwgRXZhc19PYmpl
Y3QgKm8pOwotICAgICAgICB2b2lkICpwcmVfZGF0YTsKLSAgICAgICAgdm9pZCAqKCpwb3N0X2Ni
KSh2b2lkICpkYXRhLCB2b2lkICpwcmVfZGF0YSwgRXZhc19PYmplY3QgKm8pOwotICAgICAgICB2
b2lkICpwb3N0X2RhdGE7CisgICAgICAgIHZvaWQqICgqcHJlX2NiKSh2b2lkKiBkYXRhLCBFdmFz
X09iamVjdCogZXdrVGlsZSk7CisgICAgICAgIHZvaWQqIHByZV9kYXRhOworICAgICAgICB2b2lk
KiAoKnBvc3RfY2IpKHZvaWQqIGRhdGEsIHZvaWQqIHByZV9kYXRhLCBFdmFzX09iamVjdCogZXdr
VGlsZSk7CisgICAgICAgIHZvaWQqIHBvc3RfZGF0YTsKICAgICB9IHByb2Nlc3M7CiAgICAgc3Ry
dWN0IHsKLSAgICAgICAgRWluYV9Cb29sIGFueToxOwotICAgICAgICBFaW5hX0Jvb2wgcG9zOjE7
Ci0gICAgICAgIEVpbmFfQm9vbCBzaXplOjE7Ci0gICAgICAgIEVpbmFfQm9vbCBtb2RlbDoxOwot
ICAgICAgICBFaW5hX0Jvb2wgb2Zmc2V0OjE7CisgICAgICAgIEVpbmFfQm9vbCBhbnkgOiAxOwor
ICAgICAgICBFaW5hX0Jvb2wgcG9zIDogMTsKKyAgICAgICAgRWluYV9Cb29sIHNpemUgOiAxOwor
ICAgICAgICBFaW5hX0Jvb2wgbW9kZWwgOiAxOworICAgICAgICBFaW5hX0Jvb2wgb2Zmc2V0IDog
MTsKICAgICB9IGNoYW5nZWQ7CiAjaWZkZWYgREVCVUdfTUVNX0xFQUtTCi0gICAgRWNvcmVfRXZl
bnRfSGFuZGxlciAqc2lnX3VzcjsKKyAgICBFY29yZV9FdmVudF9IYW5kbGVyKiBzaWdfdXNyOwog
I2VuZGlmCiB9OwogCkBAIC0xMjUsMTMgKzEyNSwxMyBAQCBpbnQgX2V3a190aWxlZF9sb2dfZG9t
ID0gLTE7CiAgICAgICAgIHJldHVybiBfX1ZBX0FSR1NfXzsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCiAgICAgfQogCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfZmlsbF9yZW5kZXJlcnMoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAq
cHJpdik7Ci1zdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdf
ZGJnKGNvbnN0IEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYpOwotc3RhdGljIGlu
bGluZSB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9jaGFuZ2VkKEV3a19UaWxlZF9CYWNr
aW5nX1N0b3JlX0RhdGEgKnByaXYpOworc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX2ZpbGxfcmVuZGVyZXJzKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYpOwor
c3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X2RiZyhjb25z
dCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2KTsKK3N0YXRpYyBpbmxpbmUgdm9p
ZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfY2hhbmdlZChFd2tfVGlsZWRfQmFja2luZ19TdG9y
ZV9EYXRhKiBwcml2KTsKIAotc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV91cGRhdGVzX3Byb2Nlc3MoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdikK
K3N0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRlc19wcm9j
ZXNzKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYpCiB7Ci0gICAgdm9pZCAqZGF0
YSA9IDA7CisgICAgdm9pZCogZGF0YSA9IDA7CiAKICAgICAvKiBEbyBub3QgcHJvY2VzcyB1cGRh
dGVzLiBOb3RlIHRoYXQgd2Ugc3RpbGwgd2FudCB0byBnZXQgdXBkYXRlcyByZXF1ZXN0cwogICAg
ICAqIGluIHRoZSBxdWV1ZSBpbiBvcmRlciB0byBub3QgbWlzcyBhbnkgdXBkYXRlcyBhZnRlciB0
aGUgcmVuZGVyIGlzCkBAIC0xNDksMTAgKzE0OSwxMCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX3VwZGF0ZXNfcHJvY2VzcyhFd2tfVGlsZWRfQmFja2luZ19T
dAogICAgICAgICBwcml2LT5wcm9jZXNzLnBvc3RfY2IocHJpdi0+cHJvY2Vzcy5wb3N0X2RhdGEs
IGRhdGEsIHByaXYtPnNlbGYpOwogfQogCi1zdGF0aWMgaW50IF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9mbHVzaCh2b2lkICpkYXRhKQorc3RhdGljIGludCBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfZmx1c2godm9pZCogZGF0YSkKIHsKICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRh
KiBwcml2ID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSo+KGRhdGEp
OwotICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjID0gZXdrX3RpbGVfbWF0cml4X3VudXNl
ZF9jYWNoZV9nZXQocHJpdi0+bW9kZWwubWF0cml4KTsKKyAgICBFd2tfVGlsZV9VbnVzZWRfQ2Fj
aGUqIHR1YyA9IGV3a190aWxlX21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1h
dHJpeCk7CiAKICAgICBpZiAodHVjKSB7CiAgICAgICAgIERCRygiZmx1c2ggdW51c2VkIHRpbGUg
Y2FjaGUuIik7CkBAIC0xNjMsODAgKzE2Myw4MCBAQCBzdGF0aWMgaW50IF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9mbHVzaCh2b2lkICpkYXRhKQogICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMg
RXdrX1RpbGUgKl9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX25ldyhFd2tfVGlsZWRfQmFj
a2luZ19TdG9yZV9EYXRhICpwcml2LCB1bnNpZ25lZCBsb25nIGNvbCwgdW5zaWduZWQgbG9uZyBy
b3csIGZsb2F0IHpvb20pCitzdGF0aWMgRXdrX1RpbGUqIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV90aWxlX25ldyhFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2LCB1bnNpZ25lZCBs
b25nIGNvbHVtbiwgdW5zaWduZWQgbG9uZyByb3csIGZsb2F0IHpvb20pCiB7Ci0gICAgRXdrX1Rp
bGUgKnQ7Ci0gICAgRXZhcyAqZXZhcyA9IGV2YXNfb2JqZWN0X2V2YXNfZ2V0KHByaXYtPnNlbGYp
OworICAgIEV3a19UaWxlKiB0aWxlOworICAgIEV2YXMqIGV2YXMgPSBldmFzX29iamVjdF9ldmFz
X2dldChwcml2LT5zZWxmKTsKICAgICBpZiAoIWV2YXMpIHsKICAgICAgICAgQ1JJVElDQUwoImV2
YXNfb2JqZWN0X2V2YXNfZ2V0IGZhaWxlZCEiKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQog
Ci0gICAgdCA9IGV3a190aWxlX21hdHJpeF90aWxlX25ldwotICAgICAgICAocHJpdi0+bW9kZWwu
bWF0cml4LCBldmFzLCBjb2wsIHJvdywgem9vbSk7CisgICAgdGlsZSA9IGV3a190aWxlX21hdHJp
eF90aWxlX25ldworICAgICAgICAgICAgICAgKHByaXYtPm1vZGVsLm1hdHJpeCwgZXZhcywgY29s
dW1uLCByb3csIHpvb20pOwogCi0gICAgaWYgKCF0KSB7CisgICAgaWYgKCF0aWxlKSB7CiAgICAg
ICAgIENSSVRJQ0FMKCJld2tfdGlsZV9tYXRyaXhfdGlsZV9uZXcgZmFpbGVkISIpOwogICAgICAg
ICByZXR1cm4gMDsKICAgICB9CiAKLSAgICByZXR1cm4gdDsKKyAgICByZXR1cm4gdGlsZTsKIH0K
IAotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fbW92ZShFd2tfVGls
ZWRfQmFja2luZ19TdG9yZV9JdGVtICppdCwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHkpCitz
dGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9tb3ZlKEV3a19UaWxlZF9C
YWNraW5nX1N0b3JlX0l0ZW0qIGl0ZW0sIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5KQogewot
ICAgIGl0LT5nZW9tZXRyeS54ID0geDsKLSAgICBpdC0+Z2VvbWV0cnkueSA9IHk7CisgICAgaXRl
bS0+Z2VvbWV0cnkueCA9IHg7CisgICAgaXRlbS0+Z2VvbWV0cnkueSA9IHk7CiAKLSAgICBpZiAo
aXQtPnRpbGUpCi0gICAgICAgIGV2YXNfb2JqZWN0X21vdmUoaXQtPnRpbGUtPmltYWdlLCB4LCB5
KTsKKyAgICBpZiAoaXRlbS0+dGlsZSkKKyAgICAgICAgZXZhc19vYmplY3RfbW92ZShpdGVtLT50
aWxlLT5pbWFnZSwgeCwgeSk7CiB9CiAKLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9pdGVtX3Jlc2l6ZShFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdCwgRXZhc19D
b29yZCB3LCBFdmFzX0Nvb3JkIGgpCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfaXRlbV9yZXNpemUoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSogaXRlbSwgRXZhc19D
b29yZCB3aWR0aCwgRXZhc19Db29yZCBoZWlnaHQpCiB7Ci0gICAgaXQtPmdlb21ldHJ5LncgPSB3
OwotICAgIGl0LT5nZW9tZXRyeS5oID0gaDsKKyAgICBpdGVtLT5nZW9tZXRyeS53aWR0aCA9IHdp
ZHRoOworICAgIGl0ZW0tPmdlb21ldHJ5LmhlaWdodCA9IGhlaWdodDsKIAotICAgIGlmIChpdC0+
dGlsZSkgewotICAgICAgICBldmFzX29iamVjdF9yZXNpemUoaXQtPnRpbGUtPmltYWdlLCB3LCBo
KTsKLSAgICAgICAgZXZhc19vYmplY3RfaW1hZ2VfZmlsbF9zZXQoaXQtPnRpbGUtPmltYWdlLCAw
LCAwLCB3LCBoKTsKKyAgICBpZiAoaXRlbS0+dGlsZSkgeworICAgICAgICBldmFzX29iamVjdF9y
ZXNpemUoaXRlbS0+dGlsZS0+aW1hZ2UsIHdpZHRoLCBoZWlnaHQpOworICAgICAgICBldmFzX29i
amVjdF9pbWFnZV9maWxsX3NldChpdGVtLT50aWxlLT5pbWFnZSwgMCwgMCwgd2lkdGgsIGhlaWdo
dCk7CiAgICAgfQogfQogCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGls
ZV9hc3NvY2lhdGUoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgRXdrX1RpbGUg
KnQsIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0KQorc3RhdGljIHZvaWQgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfYXNzb2NpYXRlKEV3a19UaWxlZF9CYWNraW5nX1N0b3Jl
X0RhdGEqIHByaXYsIEV3a19UaWxlKiB0aWxlLCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVt
KiBpdGVtKQogewotICAgIGlmIChpdC0+dGlsZSkKLSAgICAgICAgQ1JJVElDQUwoIml0LT50aWxl
PSVwLCBidXQgaXQgc2hvdWxkIGJlIDAhIiwgaXQtPnRpbGUpOwotICAgIGl0LT50aWxlID0gdDsK
LSAgICBldmFzX29iamVjdF9tb3ZlKGl0LT50aWxlLT5pbWFnZSwgaXQtPmdlb21ldHJ5LngsIGl0
LT5nZW9tZXRyeS55KTsKLSAgICBldmFzX29iamVjdF9yZXNpemUoaXQtPnRpbGUtPmltYWdlLCBp
dC0+Z2VvbWV0cnkudywgaXQtPmdlb21ldHJ5LmgpOworICAgIGlmIChpdGVtLT50aWxlKQorICAg
ICAgICBDUklUSUNBTCgiaXQtPnRpbGU9JXAsIGJ1dCBpdCBzaG91bGQgYmUgMCEiLCBpdGVtLT50
aWxlKTsKKyAgICBpdGVtLT50aWxlID0gdGlsZTsKKyAgICBldmFzX29iamVjdF9tb3ZlKGl0ZW0t
PnRpbGUtPmltYWdlLCBpdGVtLT5nZW9tZXRyeS54LCBpdGVtLT5nZW9tZXRyeS55KTsKKyAgICBl
dmFzX29iamVjdF9yZXNpemUoaXRlbS0+dGlsZS0+aW1hZ2UsIGl0ZW0tPmdlb21ldHJ5LndpZHRo
LCBpdGVtLT5nZW9tZXRyeS5oZWlnaHQpOwogICAgIGV2YXNfb2JqZWN0X2ltYWdlX2ZpbGxfc2V0
Ci0gICAgICAgIChpdC0+dGlsZS0+aW1hZ2UsIDAsIDAsIGl0LT5nZW9tZXRyeS53LCBpdC0+Z2Vv
bWV0cnkuaCk7Ci0gICAgZXZhc19vYmplY3RfaW1hZ2Vfc21vb3RoX3NjYWxlX3NldChpdC0+dGls
ZS0+aW1hZ2UsIGl0LT5zbW9vdGhfc2NhbGUpOworICAgICAgICAoaXRlbS0+dGlsZS0+aW1hZ2Us
IDAsIDAsIGl0ZW0tPmdlb21ldHJ5LndpZHRoLCBpdGVtLT5nZW9tZXRyeS5oZWlnaHQpOworICAg
IGV2YXNfb2JqZWN0X2ltYWdlX3Ntb290aF9zY2FsZV9zZXQoaXRlbS0+dGlsZS0+aW1hZ2UsIGl0
ZW0tPnNtb290aF9zY2FsZSk7CiAKLSAgICBpZiAoIWV3a190aWxlX3Zpc2libGVfZ2V0KHQpKQot
ICAgICAgICBldmFzX29iamVjdF9zbWFydF9tZW1iZXJfYWRkKHQtPmltYWdlLCBwcml2LT5zZWxm
KTsKKyAgICBpZiAoIWV3a190aWxlX3Zpc2libGVfZ2V0KHRpbGUpKQorICAgICAgICBldmFzX29i
amVjdF9zbWFydF9tZW1iZXJfYWRkKHRpbGUtPmltYWdlLCBwcml2LT5zZWxmKTsKIAotICAgIGV3
a190aWxlX3Nob3codCk7CisgICAgZXdrX3RpbGVfc2hvdyh0aWxlKTsKIH0KIAotc3RhdGljIHZv
aWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfZGlzc29jaWF0ZShFd2tfVGlsZWRfQmFj
a2luZ19TdG9yZV9EYXRhICpwcml2LCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdCwg
ZG91YmxlIGxhc3RfdXNlZCkKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90
aWxlX2Rpc3NvY2lhdGUoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdiwgRXdrX1Rp
bGVkX0JhY2tpbmdfU3RvcmVfSXRlbSogaXRlbSwgZG91YmxlIGxhc3RVc2VkKQogewotICAgIEV3
a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjOwotICAgIGV3a190aWxlX2hpZGUoaXQtPnRpbGUpOwot
ICAgIGlmICghZXdrX3RpbGVfdmlzaWJsZV9nZXQoaXQtPnRpbGUpKQotICAgICAgICBldmFzX29i
amVjdF9zbWFydF9tZW1iZXJfZGVsKGl0LT50aWxlLT5pbWFnZSk7Ci0gICAgZXdrX3RpbGVfbWF0
cml4X3RpbGVfcHV0KHByaXYtPm1vZGVsLm1hdHJpeCwgaXQtPnRpbGUsIGxhc3RfdXNlZCk7Cisg
ICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0dWM7CisgICAgZXdrX3RpbGVfaGlkZShpdGVtLT50
aWxlKTsKKyAgICBpZiAoIWV3a190aWxlX3Zpc2libGVfZ2V0KGl0ZW0tPnRpbGUpKQorICAgICAg
ICBldmFzX29iamVjdF9zbWFydF9tZW1iZXJfZGVsKGl0ZW0tPnRpbGUtPmltYWdlKTsKKyAgICBl
d2tfdGlsZV9tYXRyaXhfdGlsZV9wdXQocHJpdi0+bW9kZWwubWF0cml4LCBpdGVtLT50aWxlLCBs
YXN0VXNlZCk7CiAgICAgdHVjID0gZXdrX3RpbGVfbWF0cml4X3VudXNlZF9jYWNoZV9nZXQocHJp
di0+bW9kZWwubWF0cml4KTsKICAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfYXV0b19mbHVzaCh0
dWMpOwogCi0gICAgaXQtPnRpbGUgPSAwOworICAgIGl0ZW0tPnRpbGUgPSAwOwogfQogCi1zdGF0
aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9kaXNzb2NpYXRlX2FsbChFd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2KQorc3RhdGljIHZvaWQgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX3RpbGVfZGlzc29jaWF0ZV9hbGwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVf
RGF0YSogcHJpdikKIHsKLSAgICBFaW5hX0lubGlzdCAqaXQ7Ci0gICAgRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfSXRlbSAqaXRlbTsKKyAgICBFaW5hX0lubGlzdCogaXQ7CisgICAgRXdrX1RpbGVk
X0JhY2tpbmdfU3RvcmVfSXRlbSogaXRlbTsKICAgICBpbnQgaTsKICAgICBkb3VibGUgbGFzdF91
c2VkID0gZWNvcmVfbG9vcF90aW1lX2dldCgpOwogCkBAIC0yNDgsOSArMjQ4LDkgQEAgc3RhdGlj
IHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfZGlzc29jaWF0ZV9hbGwoRXdrX1Rp
bGVkX0JhY2tpbmdfU3RvcmUKICAgICB9CiB9CiAKLXN0YXRpYyBpbmxpbmUgRWluYV9Cb29sIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfYWRkKEV3a19UaWxlZF9C
YWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIHVuc2lnbmVkIGxvbmcgY29sLCB1bnNpZ25lZCBsb25n
IHJvdywgZmxvYXQgem9vbSwgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9Qcmlv
cml0eSBwcmlvcml0eSkKK3N0YXRpYyBpbmxpbmUgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfYWRkKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0Rh
dGEqIHByaXYsIHVuc2lnbmVkIGxvbmcgY29sdW1uLCB1bnNpZ25lZCBsb25nIHJvdywgZmxvYXQg
em9vbSwgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9Qcmlvcml0eSBwcmlvcml0
eSkKIHsKLSAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QgKnI7
CisgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0KiByOwogCiAg
ICAgciA9IHN0YXRpY19jYXN0PEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUmVx
dWVzdCo+KG1hbGxvYyhzaXplb2YoKnIpKSk7CiAgICAgaWYgKCFyKQpAQCAtMjU4LDQ5ICsyNTgs
NDkgQEAgc3RhdGljIGlubGluZSBFaW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3By
ZV9yZW5kZXJfcmVxdWVzdF9hZGQoRXdrX1RpbGUKIAogICAgIGlmIChwcmlvcml0eSA9PSBQUkVf
UkVOREVSX1BSSU9SSVRZX0hJR0gpCiAgICAgICAgIHByaXYtPnJlbmRlci5wcmVfcmVuZGVyX3Jl
cXVlc3RzID0gZWluYV9pbmxpc3RfcHJlcGVuZAotICAgICAgICAgICAgKHByaXYtPnJlbmRlci5w
cmVfcmVuZGVyX3JlcXVlc3RzLCBFSU5BX0lOTElTVF9HRVQocikpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocHJpdi0+cmVuZGVyLnByZV9yZW5kZXJf
cmVxdWVzdHMsIEVJTkFfSU5MSVNUX0dFVChyKSk7CiAgICAgZWxzZQogICAgICAgICBwcml2LT5y
ZW5kZXIucHJlX3JlbmRlcl9yZXF1ZXN0cyA9IGVpbmFfaW5saXN0X2FwcGVuZAotICAgICAgICAg
ICAgKHByaXYtPnJlbmRlci5wcmVfcmVuZGVyX3JlcXVlc3RzLCBFSU5BX0lOTElTVF9HRVQocikp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocHJpdi0+
cmVuZGVyLnByZV9yZW5kZXJfcmVxdWVzdHMsIEVJTkFfSU5MSVNUX0dFVChyKSk7CiAKLSAgICBy
LT5jb2wgPSBjb2w7CisgICAgci0+Y29sID0gY29sdW1uOwogICAgIHItPnJvdyA9IHJvdzsKICAg
ICByLT56b29tID0gem9vbTsKIAogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLXN0YXRpYyBp
bmxpbmUgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2Rl
bChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFd2tfVGlsZWRfQmFja2luZ19T
dG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QgKnIpCitzdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9kZWwoRXdrX1RpbGVkX0JhY2tpbmdf
U3RvcmVfRGF0YSogcHJpdiwgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1
ZXN0KiByZXF1ZXN0KQogewogICAgIHByaXYtPnJlbmRlci5wcmVfcmVuZGVyX3JlcXVlc3RzID0g
ZWluYV9pbmxpc3RfcmVtb3ZlCi0gICAgICAgIChwcml2LT5yZW5kZXIucHJlX3JlbmRlcl9yZXF1
ZXN0cywgRUlOQV9JTkxJU1RfR0VUKHIpKTsKLSAgICBmcmVlKHIpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwcml2LT5yZW5kZXIucHJlX3JlbmRlcl9yZXF1
ZXN0cywgRUlOQV9JTkxJU1RfR0VUKHJlcXVlc3QpKTsKKyAgICBmcmVlKHJlcXVlc3QpOwogfQog
Ci1zdGF0aWMgaW5saW5lIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUmVxdWVz
dCAqX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9maXJzdChjb25z
dCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2KQorc3RhdGljIGlubGluZSBFd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QqIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfZmlyc3QoY29uc3QgRXdrX1RpbGVkX0JhY2tpbmdf
U3RvcmVfRGF0YSogcHJpdikKIHsKICAgICByZXR1cm4gRUlOQV9JTkxJU1RfQ09OVEFJTkVSX0dF
VCgKLSAgICAgICAgcHJpdi0+cmVuZGVyLnByZV9yZW5kZXJfcmVxdWVzdHMsCi0gICAgICAgIEV3
a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUmVxdWVzdCk7CisgICAgICAgICAgICAg
ICBwcml2LT5yZW5kZXIucHJlX3JlbmRlcl9yZXF1ZXN0cywKKyAgICAgICAgICAgICAgIEV3a19U
aWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUmVxdWVzdCk7CiB9CiAKLXN0YXRpYyB2b2lk
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfZmx1c2goRXdrX1Rp
bGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdikKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfZmx1c2goRXdrX1RpbGVkX0JhY2tpbmdfU3Rv
cmVfRGF0YSogcHJpdikKIHsKLSAgICBFaW5hX0lubGlzdCAqKnBsID0gJnByaXYtPnJlbmRlci5w
cmVfcmVuZGVyX3JlcXVlc3RzOworICAgIEVpbmFfSW5saXN0KiogcGwgPSAmcHJpdi0+cmVuZGVy
LnByZV9yZW5kZXJfcmVxdWVzdHM7CiAgICAgd2hpbGUgKCpwbCkgewotICAgICAgICBFd2tfVGls
ZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QgKnI7CisgICAgICAgIEV3a19UaWxl
ZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUmVxdWVzdCogcjsKICAgICAgICAgciA9IF9ld2tf
dGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfZmlyc3QocHJpdik7CiAgICAg
ICAgICpwbCA9IGVpbmFfaW5saXN0X3JlbW92ZSgqcGwsICpwbCk7CiAgICAgICAgIGZyZWUocik7
CiAgICAgfQogfQogCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3Jl
bmRlcl9yZXF1ZXN0X2NsZWFyKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYpCitz
dGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2Ns
ZWFyKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYpCiB7Ci0gICAgRWluYV9Jbmxp
c3QgKipwbCA9ICZwcml2LT5yZW5kZXIucHJlX3JlbmRlcl9yZXF1ZXN0czsKLSAgICBFaW5hX0lu
bGlzdCAqaXRlciA9ICpwbCwgKnRtcDsKKyAgICBFaW5hX0lubGlzdCoqIHBsID0gJnByaXYtPnJl
bmRlci5wcmVfcmVuZGVyX3JlcXVlc3RzOworICAgIEVpbmFfSW5saXN0KiBpdGVyID0gKnBsLCAq
IHRtcDsKICAgICB3aGlsZSAoaXRlcikgewotICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9y
ZV9QcmVfUmVuZGVyX1JlcXVlc3QgKnIgPQorICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9y
ZV9QcmVfUmVuZGVyX1JlcXVlc3QqIHIgPQogICAgICAgICAgICAgRUlOQV9JTkxJU1RfQ09OVEFJ
TkVSX0dFVCgKICAgICAgICAgICAgICAgICBpdGVyLCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9Q
cmVfUmVuZGVyX1JlcXVlc3QpOwogICAgICAgICB0bXAgPSBpdGVyLT5uZXh0OwpAQCAtMzExLDEz
ICszMTEsMTMgQEAgc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5k
ZXJfcmVxdWVzdF9jbGVhcihFd2tfVGlsZWRfQmFja2luZ18KIH0KIAogLyogYXNzdW1lcyBwcml2
LT5wcm9jZXNzLnByZV9jYiB3YXMgY2FsbGVkIGlmIHJlcXVpcmVkISAqLwotc3RhdGljIHZvaWQg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9wcm9jZXNzX3Npbmds
ZShFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2KQorc3RhdGljIHZvaWQgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9wcm9jZXNzX3NpbmdsZShFd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2KQogewotICAgIEV3a19UaWxlZF9CYWNraW5n
X1N0b3JlX1ByZV9SZW5kZXJfUmVxdWVzdCAqcmVxOworICAgIEV3a19UaWxlZF9CYWNraW5nX1N0
b3JlX1ByZV9SZW5kZXJfUmVxdWVzdCogcmVxOwogICAgIEVpbmFfUmVjdGFuZ2xlIGFyZWE7Ci0g
ICAgRXdrX1RpbGVfTWF0cml4ICp0bSA9IHByaXYtPm1vZGVsLm1hdHJpeDsKLSAgICBFd2tfVGls
ZSAqdDsKLSAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YzsKKyAgICBFd2tfVGlsZV9NYXRy
aXgqIHRtID0gcHJpdi0+bW9kZWwubWF0cml4OworICAgIEV3a19UaWxlKiB0aWxlOworICAgIEV3
a19UaWxlX1VudXNlZF9DYWNoZSogdHVjOwogICAgIHVuc2lnbmVkIGxvbmcgY29sLCByb3c7CiAg
ICAgZmxvYXQgem9vbTsKICAgICBkb3VibGUgbGFzdF91c2VkID0gZWNvcmVfbG9vcF90aW1lX2dl
dCgpOwpAQCAtMzM1LDIyICszMzUsMjIgQEAgc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5n
X3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9wcm9jZXNzX3NpbmdsZShFd2tfVGlsZWQKICAgICAg
ICAgZ290byBlbmQ7CiAgICAgfQogCi0gICAgdCA9IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90
aWxlX25ldyhwcml2LCBjb2wsIHJvdywgem9vbSk7Ci0gICAgaWYgKCF0KQorICAgIHRpbGUgPSBf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9uZXcocHJpdiwgY29sLCByb3csIHpvb20pOwor
ICAgIGlmICghdGlsZSkKICAgICAgICAgZ290byBlbmQ7CiAKICAgICBhcmVhLnggPSAwOwogICAg
IGFyZWEueSA9IDA7Ci0gICAgYXJlYS53ID0gcHJpdi0+dmlldy50aWxlLnc7Ci0gICAgYXJlYS5o
ID0gcHJpdi0+dmlldy50aWxlLmg7CisgICAgYXJlYS53ID0gcHJpdi0+dmlldy50aWxlLndpZHRo
OworICAgIGFyZWEuaCA9IHByaXYtPnZpZXcudGlsZS5oZWlnaHQ7CiAKLSAgICBwcml2LT5yZW5k
ZXIuY2IocHJpdi0+cmVuZGVyLmRhdGEsIHQsICZhcmVhKTsKKyAgICBwcml2LT5yZW5kZXIuY2Io
cHJpdi0+cmVuZGVyLmRhdGEsIHRpbGUsICZhcmVhKTsKICAgICBldmFzX29iamVjdF9pbWFnZV9k
YXRhX3VwZGF0ZV9hZGQoCi0gICAgICAgIHQtPmltYWdlLAorICAgICAgICB0aWxlLT5pbWFnZSwK
ICAgICAgICAgYXJlYS54LCBhcmVhLnksIGFyZWEudywgYXJlYS5oKTsKLSAgICBld2tfdGlsZV9t
YXRyaXhfdGlsZV91cGRhdGVzX2NsZWFyKHRtLCB0KTsKKyAgICBld2tfdGlsZV9tYXRyaXhfdGls
ZV91cGRhdGVzX2NsZWFyKHRtLCB0aWxlKTsKIAotICAgIGV3a190aWxlX21hdHJpeF90aWxlX3B1
dCh0bSwgdCwgbGFzdF91c2VkKTsKKyAgICBld2tfdGlsZV9tYXRyaXhfdGlsZV9wdXQodG0sIHRp
bGUsIGxhc3RfdXNlZCk7CiAKIGVuZDoKICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJl
X3JlbmRlcl9yZXF1ZXN0X2RlbChwcml2LCByZXEpOwpAQCAtMzU4LDcgKzM1OCw3IEBAIGVuZDoK
ICAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfYXV0b19mbHVzaCh0dWMpOwogfQogCi1zdGF0aWMg
RWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Byb2Nlc3NfaWRsZXJfY2Io
dm9pZCAqZGF0YSkKK3N0YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0
ZW1fcHJvY2Vzc19pZGxlcl9jYih2b2lkKiBkYXRhKQogewogICAgIEV3a19UaWxlZF9CYWNraW5n
X1N0b3JlX0RhdGEqIHByaXYgPSBzdGF0aWNfY2FzdDxFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9E
YXRhKj4oZGF0YSk7CiAKQEAgLTM3OCw3ICszNzgsNyBAQCBzdGF0aWMgRWluYV9Cb29sIF9ld2tf
dGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Byb2Nlc3NfaWRsZXJfY2Iodm9pZCAqZGF0YSkKICAg
ICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX2l0ZW1fcHJvY2Vzc19pZGxlcl9zdG9wKEV3a19UaWxlZF9CYWNraW5nX1N0
b3JlX0RhdGEgKnByaXYpCitzdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX2l0ZW1fcHJvY2Vzc19pZGxlcl9zdG9wKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEq
IHByaXYpCiB7CiAgICAgaWYgKCFwcml2LT5yZW5kZXIuaWRsZXIpCiAgICAgICAgIHJldHVybjsK
QEAgLTM4Nyw3ICszODcsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlZF9iYWNraW5n
X3N0b3JlX2l0ZW1fcHJvY2Vzc19pZGxlcl9zdG9wKEV3a19UaWxlZF9CYQogICAgIHByaXYtPnJl
bmRlci5pZGxlciA9IDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfaXRlbV9wcm9jZXNzX2lkbGVyX3N0YXJ0KEV3a19UaWxlZF9CYWNraW5nX1N0b3Jl
X0RhdGEgKnByaXYpCitzdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X2l0ZW1fcHJvY2Vzc19pZGxlcl9zdGFydChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBw
cml2KQogewogICAgIGlmIChwcml2LT5yZW5kZXIuaWRsZXIpCiAgICAgICAgIHJldHVybjsKQEAg
LTM5NSw3ICszOTUsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX2l0ZW1fcHJvY2Vzc19pZGxlcl9zdGFydChFd2tfVGlsZWRfQgogICAgICAgICBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9wcm9jZXNzX2lkbGVyX2NiLCBwcml2KTsKIH0KIAotc3Rh
dGljIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZGlzYWJsZV9yZW5kZXIoRXdr
X1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdikKK3N0YXRpYyBFaW5hX0Jvb2wgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX2Rpc2FibGVfcmVuZGVyKEV3a19UaWxlZF9CYWNraW5nX1N0b3Jl
X0RhdGEqIHByaXYpCiB7CiAgICAgaWYgKHByaXYtPnJlbmRlci5zdXNwZW5kKQogICAgICAgICBy
ZXR1cm4gRUlOQV9UUlVFOwpAQCAtNDA1LDcgKzQwNSw3IEBAIHN0YXRpYyBFaW5hX0Jvb2wgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX2Rpc2FibGVfcmVuZGVyKEV3a19UaWxlZF9CYWNraW5nX1N0
b3JlCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotc3RhdGljIEVpbmFfQm9vbCBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfZW5hYmxlX3JlbmRlcihFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9E
YXRhICpwcml2KQorc3RhdGljIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZW5h
YmxlX3JlbmRlcihFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2KQogewogICAgIGlm
ICghcHJpdi0+cmVuZGVyLnN1c3BlbmQpCiAgICAgICAgIHJldHVybiBFSU5BX1RSVUU7CkBAIC00
MTgsNTIgKzQxOCw1MiBAQCBzdGF0aWMgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV9lbmFibGVfcmVuZGVyKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlXwogICAgIHJldHVybiBFSU5B
X1RSVUU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9pdGVtX2ZpbGwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgRXdrX1Rp
bGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQsIHVuc2lnbmVkIGxvbmcgY29sLCB1bnNpZ25lZCBs
b25nIHJvdykKK3N0YXRpYyBpbmxpbmUgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV9pdGVtX2ZpbGwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdiwgRXdrX1RpbGVk
X0JhY2tpbmdfU3RvcmVfSXRlbSogaXRlbSwgdW5zaWduZWQgbG9uZyBjb2x1bW4sIHVuc2lnbmVk
IGxvbmcgcm93KQogewotICAgIHVuc2lnbmVkIGxvbmcgbV9jb2wgPSBwcml2LT5tb2RlbC5iYXNl
LmNvbCArIGNvbDsKKyAgICB1bnNpZ25lZCBsb25nIG1fY29sID0gcHJpdi0+bW9kZWwuYmFzZS5j
b2wgKyBjb2x1bW47CiAgICAgdW5zaWduZWQgbG9uZyBtX3JvdyA9IHByaXYtPm1vZGVsLmJhc2Uu
cm93ICsgcm93OwogICAgIGRvdWJsZSBsYXN0X3VzZWQgPSBlY29yZV9sb29wX3RpbWVfZ2V0KCk7
CiAKICAgICBpZiAobV9jb2wgPj0gcHJpdi0+bW9kZWwuY3VyLmNvbHMgfHwgbV9yb3cgPj0gcHJp
di0+bW9kZWwuY3VyLnJvd3MpIHsKLSAgICAgICAgaWYgKGl0LT50aWxlKQotICAgICAgICAgICAg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfZGlzc29jaWF0ZShwcml2LCBpdCwgbGFzdF91
c2VkKTsKKyAgICAgICAgaWYgKGl0ZW0tPnRpbGUpCisgICAgICAgICAgICBfZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfdGlsZV9kaXNzb2NpYXRlKHByaXYsIGl0ZW0sIGxhc3RfdXNlZCk7CiAgICAg
fSBlbHNlIHsKLSAgICAgICAgRXdrX1RpbGUgKnQ7CisgICAgICAgIEV3a19UaWxlKiB0aWxlOwog
ICAgICAgICBjb25zdCBmbG9hdCB6b29tID0gcHJpdi0+dmlldy50aWxlLnpvb207CiAKLSAgICAg
ICAgaWYgKGl0LT50aWxlKSB7Ci0gICAgICAgICAgICBFd2tfVGlsZSAqb2xkID0gaXQtPnRpbGU7
CisgICAgICAgIGlmIChpdGVtLT50aWxlKSB7CisgICAgICAgICAgICBFd2tfVGlsZSogb2xkID0g
aXRlbS0+dGlsZTsKICAgICAgICAgICAgIGlmIChvbGQtPnJvdyAhPSBtX3JvdyB8fCBvbGQtPmNv
bCAhPSBtX2NvbCB8fCBvbGQtPnpvb20gIT0gem9vbSkKLSAgICAgICAgICAgICAgICBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9kaXNzb2NpYXRlKHByaXYsIGl0LCBsYXN0X3VzZWQpOwor
ICAgICAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2Rpc3NvY2lhdGUo
cHJpdiwgaXRlbSwgbGFzdF91c2VkKTsKICAgICAgICAgICAgIGVsc2UgaWYgKG9sZC0+cm93ID09
IG1fcm93ICYmIG9sZC0+Y29sID09IG1fY29sICYmIG9sZC0+em9vbSA9PSB6b29tKQogICAgICAg
ICAgICAgICAgIGdvdG8gZW5kOwogICAgICAgICB9CiAKLSAgICAgICAgdCA9IGV3a190aWxlX21h
dHJpeF90aWxlX2V4YWN0X2dldChwcml2LT5tb2RlbC5tYXRyaXgsIG1fY29sLCBtX3Jvdywgem9v
bSk7CisgICAgICAgIHRpbGUgPSBld2tfdGlsZV9tYXRyaXhfdGlsZV9leGFjdF9nZXQocHJpdi0+
bW9kZWwubWF0cml4LCBtX2NvbCwgbV9yb3csIHpvb20pOwogCi0gICAgICAgIGlmICghdCkgewor
ICAgICAgICBpZiAoIXRpbGUpIHsKICAgICAgICAgICAgIC8qIE5PVEU6IGl0IG5ldmVyIHJldHVy
bnMgMCBpZiBpdC0+dGlsZSB3YXMgc2V0ISAqLwotICAgICAgICAgICAgaWYgKGl0LT50aWxlKSB7
Ci0gICAgICAgICAgICAgICAgQ1JJVElDQUwoIml0LT50aWxlPSVwLCBidXQgaXQgc2hvdWxkIGJl
IDAhIiwgaXQtPnRpbGUpOwotICAgICAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV90aWxlX2Rpc3NvY2lhdGUocHJpdiwgaXQsCisgICAgICAgICAgICBpZiAoaXRlbS0+dGlsZSkg
eworICAgICAgICAgICAgICAgIENSSVRJQ0FMKCJpdC0+dGlsZT0lcCwgYnV0IGl0IHNob3VsZCBi
ZSAwISIsIGl0ZW0tPnRpbGUpOworICAgICAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV90aWxlX2Rpc3NvY2lhdGUocHJpdiwgaXRlbSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RfdXNlZCk7CiAgICAgICAgICAg
ICB9CiAKICAgICAgICAgICAgIC8qIERvIG5vdCBhZGQgbmV3IHJlcXVlc3RzIHRvIHRoZSByZW5k
ZXIgcXVldWUgKi8KICAgICAgICAgICAgIGlmICghcHJpdi0+cmVuZGVyLnN1c3BlbmQpIHsKLSAg
ICAgICAgICAgICAgICB0ID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfbmV3KHByaXYs
IG1fY29sLCBtX3Jvdywgem9vbSk7Ci0gICAgICAgICAgICAgICAgaWYgKCF0KQorICAgICAgICAg
ICAgICAgIHRpbGUgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9uZXcocHJpdiwgbV9j
b2wsIG1fcm93LCB6b29tKTsKKyAgICAgICAgICAgICAgICBpZiAoIXRpbGUpCiAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwotICAgICAgICAgICAgICAgIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV90aWxlX2Fzc29jaWF0ZShwcml2LCB0LCBpdCk7CisgICAgICAgICAgICAg
ICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfYXNzb2NpYXRlKHByaXYsIHRpbGUsIGl0
ZW0pOwogICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKHQgIT0gaXQtPnRpbGUpIHsK
LSAgICAgICAgICAgIGlmIChpdC0+dGlsZSkKKyAgICAgICAgfSBlbHNlIGlmICh0aWxlICE9IGl0
ZW0tPnRpbGUpIHsKKyAgICAgICAgICAgIGlmIChpdGVtLT50aWxlKQogICAgICAgICAgICAgICAg
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2Rpc3NvY2lhdGUocHJpdiwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdCwg
bGFzdF91c2VkKTsKLSAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2Fz
c29jaWF0ZShwcml2LCB0LCBpdCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpdGVtLCBsYXN0X3VzZWQpOworICAgICAgICAgICAgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfYXNzb2NpYXRlKHByaXYsIHRpbGUsIGl0ZW0pOwog
ICAgICAgICB9CiAKLSAgICAgIGVuZDoKK2VuZDoKIAogICAgICAgICByZXR1cm4gRUlOQV9UUlVF
OwogICAgIH0KQEAgLTQ3MSw5ICs0NzEsOSBAQCBzdGF0aWMgaW5saW5lIEVpbmFfQm9vbCBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9maWxsKEV3a19UaWxlZF9CYWNraW5nX1N0bwogICAg
IHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLXN0YXRpYyBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9J
dGVtICpfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9hZGQoRXdrX1RpbGVkX0JhY2tpbmdf
U3RvcmVfRGF0YSAqcHJpdiwgdW5zaWduZWQgbG9uZyBjb2wsIHVuc2lnbmVkIGxvbmcgcm93KQor
c3RhdGljIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0qIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9pdGVtX2FkZChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2LCB1bnNpZ25l
ZCBsb25nIGNvbHVtbiwgdW5zaWduZWQgbG9uZyByb3cpCiB7Ci0gICAgRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfSXRlbSAqaXQ7CisgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSogaXQ7
CiAgICAgRXZhc19Db29yZCB4LCB5LCB0dywgdGg7CiAKICAgICBEQkcoIm89JXAiLCBwcml2LT5z
ZWxmKTsKQEAgLTQ4Miw5ICs0ODIsOSBAQCBzdGF0aWMgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVf
SXRlbSAqX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fYWRkKEV3a19UaWxlZAogICAgIGlm
ICghaXQpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgdHcgPSBwcml2LT52aWV3LnRpbGUudzsK
LSAgICB0aCA9IHByaXYtPnZpZXcudGlsZS5oOwotICAgIHggPSBwcml2LT52aWV3Lm9mZnNldC5i
YXNlLnggKyBwcml2LT52aWV3LnggKyB0dyAgKmNvbDsKKyAgICB0dyA9IHByaXYtPnZpZXcudGls
ZS53aWR0aDsKKyAgICB0aCA9IHByaXYtPnZpZXcudGlsZS5oZWlnaHQ7CisgICAgeCA9IHByaXYt
PnZpZXcub2Zmc2V0LmJhc2UueCArIHByaXYtPnZpZXcueCArIHR3ICAqY29sdW1uOwogICAgIHkg
PSBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgKyBwcml2LT52aWV3LnkgKyB0aCAgKnJvdzsKIAog
ICAgIGl0LT50aWxlID0gMDsKQEAgLTQ5Miw3ICs0OTIsNyBAQCBzdGF0aWMgRXdrX1RpbGVkX0Jh
Y2tpbmdfU3RvcmVfSXRlbSAqX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fYWRkKEV3a19U
aWxlZAogICAgIGl0LT5zbW9vdGhfc2NhbGUgPSBwcml2LT52aWV3LnRpbGUuem9vbV93ZWFrX3Nt
b290aF9zY2FsZTsKICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9tb3ZlKGl0LCB4
LCB5KTsKICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9yZXNpemUoaXQsIHR3LCB0
aCk7Ci0gICAgaWYgKCFfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9maWxsKHByaXYsIGl0
LCBjb2wsIHJvdykpIHsKKyAgICBpZiAoIV9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2Zp
bGwocHJpdiwgaXQsIGNvbHVtbiwgcm93KSkgewogICAgICAgICBmcmVlKGl0KTsKICAgICAgICAg
cmV0dXJuIDA7CiAgICAgfQpAQCAtNTAwLDI2ICs1MDAsMjYgQEAgc3RhdGljIEV3a19UaWxlZF9C
YWNraW5nX1N0b3JlX0l0ZW0gKl9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2FkZChFd2tf
VGlsZWQKICAgICByZXR1cm4gaXQ7CiB9CiAKLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9pdGVtX2RlbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdCkKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9pdGVtX2RlbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2LCBF
d2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKiBpdGVtKQogewotICAgIGlmIChpdC0+dGlsZSkg
eworICAgIGlmIChpdGVtLT50aWxlKSB7CiAgICAgICAgIGRvdWJsZSBsYXN0X3VzZWQgPSBlY29y
ZV9sb29wX3RpbWVfZ2V0KCk7Ci0gICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxl
X2Rpc3NvY2lhdGUocHJpdiwgaXQsIGxhc3RfdXNlZCk7CisgICAgICAgIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV90aWxlX2Rpc3NvY2lhdGUocHJpdiwgaXRlbSwgbGFzdF91c2VkKTsKICAgICB9
CiAKLSAgICBmcmVlKGl0KTsKKyAgICBmcmVlKGl0ZW0pOwogfQogCi1zdGF0aWMgdm9pZCBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9zbW9vdGhfc2NhbGVfc2V0KEV3a19UaWxlZF9CYWNr
aW5nX1N0b3JlX0l0ZW0gKml0LCBFaW5hX0Jvb2wgc21vb3RoX3NjYWxlKQorc3RhdGljIHZvaWQg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fc21vb3RoX3NjYWxlX3NldChFd2tfVGlsZWRf
QmFja2luZ19TdG9yZV9JdGVtKiBpdGVtLCBFaW5hX0Jvb2wgc21vb3RoU2NhbGUpCiB7Ci0gICAg
aWYgKGl0LT5zbW9vdGhfc2NhbGUgPT0gc21vb3RoX3NjYWxlKQorICAgIGlmIChpdGVtLT5zbW9v
dGhfc2NhbGUgPT0gc21vb3RoU2NhbGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChpdC0+
dGlsZSkKLSAgICAgICAgZXZhc19vYmplY3RfaW1hZ2Vfc21vb3RoX3NjYWxlX3NldChpdC0+dGls
ZS0+aW1hZ2UsIHNtb290aF9zY2FsZSk7CisgICAgaWYgKGl0ZW0tPnRpbGUpCisgICAgICAgIGV2
YXNfb2JqZWN0X2ltYWdlX3Ntb290aF9zY2FsZV9zZXQoaXRlbS0+dGlsZS0+aW1hZ2UsIHNtb290
aFNjYWxlKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV9jaGFuZ2VkKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYpCitzdGF0aWMgaW5s
aW5lIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2NoYW5nZWQoRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfRGF0YSogcHJpdikKIHsKICAgICBpZiAocHJpdi0+Y2hhbmdlZC5hbnkpCiAgICAg
ICAgIHJldHVybjsKQEAgLTUyNyw5ICs1MjcsOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX2NoYW5nZWQoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YQog
ICAgIHByaXYtPmNoYW5nZWQuYW55ID0gRUlOQV9UUlVFOwogfQogCi1zdGF0aWMgdm9pZCBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19jb2xzX2VuZF9kZWwoRXdrX1RpbGVkX0JhY2tpbmdf
U3RvcmVfRGF0YSAqcHJpdiwgRWluYV9Jbmxpc3QgKipwX3JvdywgdW5zaWduZWQgaW50IGNvdW50
KQorc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfY29sc19lbmRfZGVs
KEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYsIEVpbmFfSW5saXN0KiogcF9yb3cs
IHVuc2lnbmVkIGludCBjb3VudCkKIHsKLSAgICBFaW5hX0lubGlzdCAqbjsKKyAgICBFaW5hX0lu
bGlzdCogbjsKICAgICB1bnNpZ25lZCBpbnQgaTsKIAogICAgIGlmICghY291bnQpCkBAIC01Mzgs
NyArNTM4LDcgQEAgc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfY29s
c19lbmRfZGVsKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0QKICAgICBuID0gKCpwX3JvdyktPmxh
c3Q7CiAKICAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotICAgICAgICBFd2tfVGls
ZWRfQmFja2luZ19TdG9yZV9JdGVtICppdDsKKyAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3Rv
cmVfSXRlbSogaXQ7CiAgICAgICAgIGl0ID0gRUlOQV9JTkxJU1RfQ09OVEFJTkVSX0dFVChuLCBF
d2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKTsKICAgICAgICAgbiA9IG4tPnByZXY7CiAgICAg
ICAgICpwX3JvdyA9IGVpbmFfaW5saXN0X3JlbW92ZSgqcF9yb3csIEVJTkFfSU5MSVNUX0dFVChp
dCkpOwpAQCAtNTQ2LDE0ICs1NDYsMTQgQEAgc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5n
X3N0b3JlX3ZpZXdfY29sc19lbmRfZGVsKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0QKICAgICB9
CiB9CiAKLXN0YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfY29s
c19lbmRfYWRkKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIEVpbmFfSW5saXN0
ICoqcF9yb3csIHVuc2lnbmVkIGludCBiYXNlX2NvbCwgdW5zaWduZWQgaW50IGNvdW50KQorc3Rh
dGljIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19jb2xzX2VuZF9hZGQo
RXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdiwgRWluYV9Jbmxpc3QqKiBwX3Jvdywg
dW5zaWduZWQgaW50IGJhc2VfY29sdW1uLCB1bnNpZ25lZCBpbnQgY291bnQpCiB7CiAgICAgdW5z
aWduZWQgaW50IGksIHIgPSBwX3JvdyAtIHByaXYtPnZpZXcuaXRlbXM7CiAKLSAgICBmb3IgKGkg
PSAwOyBpIDwgY291bnQ7IGkrKywgYmFzZV9jb2wrKykgewotICAgICAgICBFd2tfVGlsZWRfQmFj
a2luZ19TdG9yZV9JdGVtICppdDsKKyAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKywgYmFz
ZV9jb2x1bW4rKykgeworICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKiBpdDsK
IAotICAgICAgICBpdCA9IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2FkZChwcml2LCBi
YXNlX2NvbCwgcik7CisgICAgICAgIGl0ID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1f
YWRkKHByaXYsIGJhc2VfY29sdW1uLCByKTsKICAgICAgICAgaWYgKCFpdCkgewogICAgICAgICAg
ICAgQ1JJVElDQUwoImZhaWxlZCB0byBhZGQgY29sdW1uICV1IG9mICV1IGluIHJvdyAldS4iLCBp
LCBjb3VudCwgcik7CiAgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19j
b2xzX2VuZF9kZWwocHJpdiwgcF9yb3csIGkpOwpAQCAtNTY1LDE3ICs1NjUsMTcgQEAgc3RhdGlj
IEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19jb2xzX2VuZF9hZGQoRXdr
X1RpbGVkX0JhY2tpbmdfU3QKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi1zdGF0aWMgdm9p
ZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19yb3dfZGVsKEV3a19UaWxlZF9CYWNraW5n
X1N0b3JlX0RhdGEgKnByaXYsIEVpbmFfSW5saXN0ICpyb3cpCitzdGF0aWMgdm9pZCBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfdmlld19yb3dfZGVsKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0Rh
dGEqIHByaXYsIEVpbmFfSW5saXN0KiByb3cpCiB7CiAgICAgd2hpbGUgKHJvdykgewotICAgICAg
ICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdDsKKyAgICAgICAgRXdrX1RpbGVkX0Jh
Y2tpbmdfU3RvcmVfSXRlbSogaXQ7CiAgICAgICAgIGl0ID0gRUlOQV9JTkxJU1RfQ09OVEFJTkVS
X0dFVChyb3csIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0pOwogICAgICAgICByb3cgPSBy
b3ctPm5leHQ7CiAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2RlbChwcml2
LCBpdCk7CiAgICAgfQogfQogCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
dmlld19yb3dzX3JhbmdlX2RlbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBF
aW5hX0lubGlzdCAqKnN0YXJ0LCBFaW5hX0lubGlzdCAqKmVuZCkKK3N0YXRpYyB2b2lkIF9ld2tf
dGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3Jvd3NfcmFuZ2VfZGVsKEV3a19UaWxlZF9CYWNraW5n
X1N0b3JlX0RhdGEqIHByaXYsIEVpbmFfSW5saXN0Kiogc3RhcnQsIEVpbmFfSW5saXN0KiogZW5k
KQogewogICAgIGZvciAoOyBzdGFydCA8IGVuZDsgc3RhcnQrKykgewogICAgICAgICBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfdmlld19yb3dfZGVsKHByaXYsICpzdGFydCk7CkBAIC01ODMsMTAg
KzU4MywxMCBAQCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19yb3dz
X3JhbmdlX2RlbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZQogICAgIH0KIH0KIAotc3RhdGljIHZv
aWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcm93c19hbGxfZGVsKEV3a19UaWxlZF9C
YWNraW5nX1N0b3JlX0RhdGEgKnByaXYpCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfdmlld19yb3dzX2FsbF9kZWwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJp
dikKIHsKLSAgICBFaW5hX0lubGlzdCAqKnN0YXJ0OwotICAgIEVpbmFfSW5saXN0ICoqZW5kOwor
ICAgIEVpbmFfSW5saXN0Kiogc3RhcnQ7CisgICAgRWluYV9Jbmxpc3QqKiBlbmQ7CiAKICAgICBz
dGFydCA9IHByaXYtPnZpZXcuaXRlbXM7CiAgICAgZW5kID0gcHJpdi0+dmlldy5pdGVtcyArIHBy
aXYtPnZpZXcucm93czsKQEAgLTU5OCwyNyArNTk4LDI3IEBAIHN0YXRpYyB2b2lkIF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV92aWV3X3Jvd3NfYWxsX2RlbChFd2tfVGlsZWRfQmFja2luZ19TdG9y
ZV9ECiAgICAgcHJpdi0+dmlldy5yb3dzID0gMDsKIH0KIAotc3RhdGljIHZvaWQgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX3JlbmRlcih2b2lkICpkYXRhLCBFd2tfVGlsZSAqdCwgY29uc3QgRWlu
YV9SZWN0YW5nbGUgKmFyZWEpCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
cmVuZGVyKHZvaWQqIGRhdGEsIEV3a19UaWxlKiB0aWxlLCBjb25zdCBFaW5hX1JlY3RhbmdsZSog
YXJlYSkKIHsKICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2ID0gc3RhdGlj
X2Nhc3Q8RXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSo+KGRhdGEpOwogCiAgICAgSU5GKCJU
T0RPICVwICh2aXNpYmxlPyAlZCkgWyVsdSwlbHVdICVkLCVkICsgJWR4JWQiLAotICAgICAgICB0
LCB0LT52aXNpYmxlLCB0LT5jb2wsIHQtPnJvdywgYXJlYS0+eCwgYXJlYS0+eSwgYXJlYS0+dywg
YXJlYS0+aCk7CisgICAgICAgIHRpbGUsIHRpbGUtPnZpc2libGUsIHRpbGUtPmNvbCwgdGlsZS0+
cm93LCBhcmVhLT54LCBhcmVhLT55LCBhcmVhLT53LCBhcmVhLT5oKTsKIAotICAgIGlmICghdC0+
dmlzaWJsZSkKKyAgICBpZiAoIXRpbGUtPnZpc2libGUpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGlmIChwcml2LT52aWV3LnRpbGUudyAhPSB0LT53IHx8IHByaXYtPnZpZXcudGlsZS5oICE9IHQt
PmgpCisgICAgaWYgKHByaXYtPnZpZXcudGlsZS53aWR0aCAhPSB0aWxlLT53aWR0aCB8fCBwcml2
LT52aWV3LnRpbGUuaGVpZ2h0ICE9IHRpbGUtPmhlaWdodCkKICAgICAgICAgcmV0dXJuOyAvLyB0
b2RvOiByZW1vdmUgbWUgbGF0ZXIsIGRvbid0IGV2ZW4gZmxhZyBhcyBkaXJ0eSEKIAogICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHByaXYtPnJlbmRlci5jYik7Ci0gICAgaWYgKCFwcml2
LT5yZW5kZXIuY2IocHJpdi0+cmVuZGVyLmRhdGEsIHQsIGFyZWEpKQorICAgIGlmICghcHJpdi0+
cmVuZGVyLmNiKHByaXYtPnJlbmRlci5kYXRhLCB0aWxlLCBhcmVhKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgZXZhc19vYmplY3RfaW1hZ2VfZGF0YV91cGRhdGVfYWRkKHQtPmltYWdlLCBhcmVh
LT54LCBhcmVhLT55LCBhcmVhLT53LCBhcmVhLT5oKTsKKyAgICBldmFzX29iamVjdF9pbWFnZV9k
YXRhX3VwZGF0ZV9hZGQodGlsZS0+aW1hZ2UsIGFyZWEtPngsIGFyZWEtPnksIGFyZWEtPncsIGFy
ZWEtPmgpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X21vZGVsX21hdHJpeF9jcmVhdGUoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwg
RXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMpCitzdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX21vZGVsX21hdHJpeF9jcmVhdGUoRXdrX1RpbGVkX0JhY2tpbmdfU3Rv
cmVfRGF0YSogcHJpdiwgRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0aWxlVW51c2VkQ2FjaGUpCiB7
CiAgICAgaWYgKHByaXYtPm1vZGVsLm1hdHJpeCkgewogICAgICAgICBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfdmlld19yb3dzX2FsbF9kZWwocHJpdik7CkBAIC02MjksMTIgKzYyOSwxMiBAQCBz
dGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX21vZGVsX21hdHJpeF9j
cmVhdGUoRXdrX1RpbGVkX0JhY2tpbgogICAgICAgICBld2tfdGlsZV9tYXRyaXhfZnJlZShwcml2
LT5tb2RlbC5tYXRyaXgpOwogICAgIH0KIAotICAgIHByaXYtPm1vZGVsLm1hdHJpeCA9IGV3a190
aWxlX21hdHJpeF9uZXcodHVjLCBwcml2LT5tb2RlbC5jdXIuY29scywgcHJpdi0+bW9kZWwuY3Vy
LnJvd3MsIHByaXYtPmNzcGFjZSwgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3JlbmRlciwgcHJp
dik7CisgICAgcHJpdi0+bW9kZWwubWF0cml4ID0gZXdrX3RpbGVfbWF0cml4X25ldyh0aWxlVW51
c2VkQ2FjaGUsIHByaXYtPm1vZGVsLmN1ci5jb2xzLCBwcml2LT5tb2RlbC5jdXIucm93cywgcHJp
di0+Y3NwYWNlLCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcmVuZGVyLCBwcml2KTsKIH0KIAot
c3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X21lbWJlcl9kZWwoRXZh
c19PYmplY3QgKm8sIEV2YXNfT2JqZWN0ICptZW1iZXIpCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfc21hcnRfbWVtYmVyX2RlbChFdmFzX09iamVjdCogZXdrVGlsZSwgRXZh
c19PYmplY3QqIG1lbWJlcikKIHsKLSAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2
KTsKKyAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihld2tUaWxlLCBwcml2KTsKICAgICBpZiAo
IXByaXYtPmNvbnRlbnRzX2NsaXBwZXIpCiAgICAgICAgIHJldHVybjsKICAgICBldmFzX29iamVj
dF9jbGlwX3Vuc2V0KG1lbWJlcik7CkBAIC02NDIsMTggKzY0MiwxOCBAQCBzdGF0aWMgdm9pZCBf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfbWVtYmVyX2RlbChFdmFzX09iamVjdCAqbywg
RXZhc19PYmplYwogICAgICAgICBldmFzX29iamVjdF9oaWRlKHByaXYtPmNvbnRlbnRzX2NsaXBw
ZXIpOwogfQogCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfbWVt
YmVyX2FkZChFdmFzX09iamVjdCAqbywgRXZhc19PYmplY3QgKm1lbWJlcikKK3N0YXRpYyB2b2lk
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9tZW1iZXJfYWRkKEV2YXNfT2JqZWN0KiBl
d2tUaWxlLCBFdmFzX09iamVjdCogbWVtYmVyKQogewotICAgIFBSSVZfREFUQV9HRVRfT1JfUkVU
VVJOKG8sIHByaXYpOworICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKGV3a1RpbGUsIHByaXYp
OwogICAgIGlmICghcHJpdi0+Y29udGVudHNfY2xpcHBlcikKICAgICAgICAgcmV0dXJuOwogICAg
IGV2YXNfb2JqZWN0X2NsaXBfc2V0KG1lbWJlciwgcHJpdi0+Y29udGVudHNfY2xpcHBlcik7Ci0g
ICAgaWYgKGV2YXNfb2JqZWN0X3Zpc2libGVfZ2V0KG8pKQorICAgIGlmIChldmFzX29iamVjdF92
aXNpYmxlX2dldChld2tUaWxlKSkKICAgICAgICAgZXZhc19vYmplY3Rfc2hvdyhwcml2LT5jb250
ZW50c19jbGlwcGVyKTsKIH0KIAogI2lmZGVmIERFQlVHX01FTV9MRUFLUwotc3RhdGljIHZvaWQg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX21lbV9kYmcoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVf
RGF0YSAqcHJpdikKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9tZW1fZGJn
KEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYpCiB7CiAgICAgc3RhdGljIGludCBy
dW4gPSAwOwogCkBAIC02NzAsMTMgKzY3MCwxMyBAQCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfbWVtX2RiZyhFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2KQog
ICAgIHByaW50ZigiLS0tIEVORCBERUJVRyBUSUxFRCBCQUNLSU5HIFNUT1JFIE1FTU9SWSBbJWRd
IC0tXG5cbiIsIHJ1bik7CiB9CiAKLXN0YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5n
X3N0b3JlX3NpZ191c3Iodm9pZCAqZGF0YSwgaW50IHR5cGUsIHZvaWQgKmV2ZW50KQorc3RhdGlj
IEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc2lnX3Vzcih2b2lkKiBkYXRhLCBp
bnQgdHlwZSwgdm9pZCogZXZlbnQpCiB7Ci0gICAgRWNvcmVfRXZlbnRfU2lnbmFsX1VzZXIgKnNp
ZyA9IChFY29yZV9FdmVudF9TaWduYWxfVXNlciopZXZlbnQ7Ci0gICAgRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfRGF0YSAqcHJpdiA9IChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKilkYXRh
OworICAgIEVjb3JlX0V2ZW50X1NpZ25hbF9Vc2VyKiBzaWcgPSAoRWNvcmVfRXZlbnRfU2lnbmFs
X1VzZXIqKWV2ZW50OworICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYgPSAo
RXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSopZGF0YTsKIAogICAgIGlmIChzaWctPm51bWJl
ciA9PSAyKSB7Ci0gICAgICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjOworICAgICAgICBF
d2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHR1YzsKICAgICAgICAgdHVjID0gZXdrX3RpbGVfbWF0cml4
X3VudXNlZF9jYWNoZV9nZXQocHJpdi0+bW9kZWwubWF0cml4KTsKICAgICAgICAgZXdrX3RpbGVf
dW51c2VkX2NhY2hlX2F1dG9fZmx1c2godHVjKTsKICAgICB9CkBAIC02ODcsMjAgKzY4NywyMCBA
QCBzdGF0aWMgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zaWdfdXNyKHZvaWQg
KmRhdGEsIGludCB0eXBlLCB2b2lkICpldgogfQogI2VuZGlmCiAKLXN0YXRpYyB2b2lkIF9ld2tf
dGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9hZGQoRXZhc19PYmplY3QgKm8pCitzdGF0aWMgdm9p
ZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfYWRkKEV2YXNfT2JqZWN0KiBld2tUaWxl
KQogewotICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXY7CisgICAgRXdrX1Rp
bGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdjsKIAotICAgIERCRygibz0lcCIsIG8pOworICAg
IERCRygibz0lcCIsIGV3a1RpbGUpOwogCiAgICAgcHJpdiA9IHN0YXRpY19jYXN0PEV3a19UaWxl
ZF9CYWNraW5nX1N0b3JlX0RhdGEqPihjYWxsb2MoMSwgc2l6ZW9mKCpwcml2KSkpOwogICAgIGlm
ICghcHJpdikKICAgICAgICAgcmV0dXJuOwogCi0gICAgcHJpdi0+c2VsZiA9IG87CisgICAgcHJp
di0+c2VsZiA9IGV3a1RpbGU7CiAgICAgcHJpdi0+dmlldy50aWxlLnpvb20gPSAxLjA7Ci0gICAg
cHJpdi0+dmlldy50aWxlLncgPSBERUZBVUxUX1RJTEVfVzsKLSAgICBwcml2LT52aWV3LnRpbGUu
aCA9IERFRkFVTFRfVElMRV9IOworICAgIHByaXYtPnZpZXcudGlsZS53aWR0aCA9IERFRkFVTFRf
VElMRV9XOworICAgIHByaXYtPnZpZXcudGlsZS5oZWlnaHQgPSBERUZBVUxUX1RJTEVfSDsKICAg
ICBwcml2LT52aWV3Lm9mZnNldC5jdXIueCA9IDA7CiAgICAgcHJpdi0+dmlldy5vZmZzZXQuY3Vy
LnkgPSAwOwogICAgIHByaXYtPnZpZXcub2Zmc2V0Lm9sZC54ID0gMDsKQEAgLTcxOSwxNyArNzE5
LDE3IEBAIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9hZGQoRXZh
c19PYmplY3QgKm8pCiAgICAgcHJpdi0+cmVuZGVyLnN1c3BlbmQgPSBFSU5BX0ZBTFNFOwogICAg
IHByaXYtPmNzcGFjZSA9IEVWQVNfQ09MT1JTUEFDRV9BUkdCODg4ODsgLy8gVE9ETzogZGV0ZWN0
IGl0LgogCi0gICAgZXZhc19vYmplY3Rfc21hcnRfZGF0YV9zZXQobywgcHJpdik7Ci0gICAgX3Bh
cmVudF9zYy5hZGQobyk7CisgICAgZXZhc19vYmplY3Rfc21hcnRfZGF0YV9zZXQoZXdrVGlsZSwg
cHJpdik7CisgICAgX3BhcmVudF9zYy5hZGQoZXdrVGlsZSk7CiAKICAgICBwcml2LT5jb250ZW50
c19jbGlwcGVyID0gZXZhc19vYmplY3RfcmVjdGFuZ2xlX2FkZCgKLSAgICAgICAgZXZhc19vYmpl
Y3RfZXZhc19nZXQobykpOworICAgICAgICBldmFzX29iamVjdF9ldmFzX2dldChld2tUaWxlKSk7
CiAgICAgZXZhc19vYmplY3RfbW92ZShwcml2LT5jb250ZW50c19jbGlwcGVyLCAwLCAwKTsKICAg
ICBldmFzX29iamVjdF9yZXNpemUocHJpdi0+Y29udGVudHNfY2xpcHBlciwKICAgICAgICAgICAg
ICAgICAgICAgICAgcHJpdi0+bW9kZWwud2lkdGgsIHByaXYtPm1vZGVsLmhlaWdodCk7CiAgICAg
ZXZhc19vYmplY3RfY29sb3Jfc2V0KHByaXYtPmNvbnRlbnRzX2NsaXBwZXIsIDI1NSwgMjU1LCAy
NTUsIDI1NSk7CiAgICAgZXZhc19vYmplY3Rfc2hvdyhwcml2LT5jb250ZW50c19jbGlwcGVyKTsK
LSAgICBldmFzX29iamVjdF9zbWFydF9tZW1iZXJfYWRkKHByaXYtPmNvbnRlbnRzX2NsaXBwZXIs
IG8pOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X21lbWJlcl9hZGQocHJpdi0+Y29udGVudHNfY2xp
cHBlciwgZXdrVGlsZSk7CiAKICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfbW9kZWxfbWF0
cml4X2NyZWF0ZShwcml2LCAwKTsKICAgICBldmFzX29iamVjdF9tb3ZlKHByaXYtPmJhc2UuY2xp
cHBlciwgMCwgMCk7CkBAIC03MzgsMTUgKzczOCwxNSBAQCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfc21hcnRfYWRkKEV2YXNfT2JqZWN0ICpvKQogCiAjaWZkZWYgREVCVUdf
TUVNX0xFQUtTCiAgICAgcHJpdi0+c2lnX3VzciA9IGVjb3JlX2V2ZW50X2hhbmRsZXJfYWRkCi0g
ICAgICAgIChFQ09SRV9FVkVOVF9TSUdOQUxfVVNFUiwgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3NpZ191c3IsIHByaXYpOworICAgICAgICAgICAgICAgICAgICAgICAgKEVDT1JFX0VWRU5UX1NJ
R05BTF9VU0VSLCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc2lnX3VzciwgcHJpdik7CiAjZW5k
aWYKIH0KIAotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2RlbChF
dmFzX09iamVjdCAqbykKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFy
dF9kZWwoRXZhc19PYmplY3QqIGV3a1RpbGUpCiB7Ci0gICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRV
Uk4obywgcHJpdik7Ci0gICAgREJHKCJvPSVwIiwgbyk7Ci0gICAgRXdrX1RpbGVfVW51c2VkX0Nh
Y2hlICp0dWM7CisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4oZXdrVGlsZSwgcHJpdik7Cisg
ICAgREJHKCJvPSVwIiwgZXdrVGlsZSk7CisgICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0dWM7
CiAKICAgICB0dWMgPSBld2tfdGlsZV9tYXRyaXhfdW51c2VkX2NhY2hlX2dldChwcml2LT5tb2Rl
bC5tYXRyaXgpOwogICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV91bmxvY2tfYXJlYSh0dWMpOwpA
QCAtNzY3LDcgKzc2Nyw3IEBAIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9z
bWFydF9kZWwoRXZhc19PYmplY3QgKm8pCiAgICAgZXZhc19vYmplY3Rfc21hcnRfbWVtYmVyX2Rl
bChwcml2LT5jb250ZW50c19jbGlwcGVyKTsKICAgICBldmFzX29iamVjdF9kZWwocHJpdi0+Y29u
dGVudHNfY2xpcHBlcik7CiAKLSAgICBfcGFyZW50X3NjLmRlbChvKTsKKyAgICBfcGFyZW50X3Nj
LmRlbChld2tUaWxlKTsKIAogI2lmZGVmIERFQlVHX01FTV9MRUFLUwogICAgIHByaW50ZigiXG5J
TVBPUlRBTlQ6IFRJTEVEIEJBQ0tJTkcgU1RPUkUgREVMRVRFRCAobWF5IGJlIHJlYWwgbGVha3Mp
XG4iKTsKQEAgLTc3NSwxMSArNzc1LDExIEBAIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9zbWFydF9kZWwoRXZhc19PYmplY3QgKm8pCiAjZW5kaWYKIH0KIAotc3RhdGljIHZv
aWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X21vdmUoRXZhc19PYmplY3QgKm8sIEV2
YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5KQorc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5n
X3N0b3JlX3NtYXJ0X21vdmUoRXZhc19PYmplY3QqIGV3a1RpbGUsIEV2YXNfQ29vcmQgeCwgRXZh
c19Db29yZCB5KQogewotICAgIERCRygibz0lcCwgbmV3IHBvczogJWR4JWQiLCBvLCB4LCB5KTsK
KyAgICBEQkcoIm89JXAsIG5ldyBwb3M6ICVkeCVkIiwgZXdrVGlsZSwgeCwgeSk7CiAKLSAgICBQ
UklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2KTsKKyAgICBQUklWX0RBVEFfR0VUX09SX1JF
VFVSTihld2tUaWxlLCBwcml2KTsKIAogICAgIGlmIChwcml2LT5jaGFuZ2VkLnBvcykKICAgICAg
ICAgcmV0dXJuOwpAQCAtNzkxLDI5ICs3OTEsMjkgQEAgc3RhdGljIHZvaWQgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX3NtYXJ0X21vdmUoRXZhc19PYmplY3QgKm8sIEV2YXNfQ29vcmQgeCwgRXYK
ICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfY2hhbmdlZChwcml2KTsKIH0KIAotc3RhdGlj
IHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X3Jlc2l6ZShFdmFzX09iamVjdCAq
bywgRXZhc19Db29yZCB3LCBFdmFzX0Nvb3JkIGgpCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfc21hcnRfcmVzaXplKEV2YXNfT2JqZWN0KiBld2tUaWxlLCBFdmFzX0Nvb3Jk
IHdpZHRoLCBFdmFzX0Nvb3JkIGhlaWdodCkKIHsKLSAgICBEQkcoIm89JXAsIG5ldyBzaXplOiAl
ZHglZCIsIG8sIHcsIGgpOworICAgIERCRygibz0lcCwgbmV3IHNpemU6ICVkeCVkIiwgZXdrVGls
ZSwgd2lkdGgsIGhlaWdodCk7CiAKLSAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2
KTsKKyAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihld2tUaWxlLCBwcml2KTsKIAogICAgIGlm
IChwcml2LT5jaGFuZ2VkLnNpemUpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmIChwcml2LT52
aWV3LncgPT0gdyAmJiBwcml2LT52aWV3LmggPT0gaCkKKyAgICBpZiAocHJpdi0+dmlldy53aWR0
aCA9PSB3aWR0aCAmJiBwcml2LT52aWV3LmhlaWdodCA9PSBoZWlnaHQpCiAgICAgICAgIHJldHVy
bjsKIAogICAgIHByaXYtPmNoYW5nZWQuc2l6ZSA9IEVJTkFfVFJVRTsKICAgICBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfY2hhbmdlZChwcml2KTsKIH0KIAotc3RhdGljIHZvaWQgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX3JlY2FsY19yZW5kZXJlcnMoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVf
RGF0YSAqcHJpdiwgRXZhc19Db29yZCB3LCBFdmFzX0Nvb3JkIGgsIEV2YXNfQ29vcmQgdHcsIEV2
YXNfQ29vcmQgdGgpCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcmVjYWxj
X3JlbmRlcmVycyhFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2LCBFdmFzX0Nvb3Jk
IHdpZHRoLCBFdmFzX0Nvb3JkIGhlaWdodCwgRXZhc19Db29yZCB0aWxlV2lkdGgsIEV2YXNfQ29v
cmQgdGlsZUhlaWdodCkKIHsKICAgICBsb25nIGNvbHMsIHJvd3MsIG9sZF9yb3dzLCBvbGRfY29s
czsKLSAgICBJTkYoIm89JXAsIG5ldyBzaXplOiAlZHglZCIsIHByaXYtPnNlbGYsIHcsIGgpOwor
ICAgIElORigibz0lcCwgbmV3IHNpemU6ICVkeCVkIiwgcHJpdi0+c2VsZiwgd2lkdGgsIGhlaWdo
dCk7CiAKLSAgICBjb2xzID0gMSArIChpbnQpY2VpbCgoZmxvYXQpdyAvIChmbG9hdCl0dyk7Ci0g
ICAgcm93cyA9IDEgKyAoaW50KWNlaWwoKGZsb2F0KWggLyAoZmxvYXQpdGgpOworICAgIGNvbHMg
PSAxICsgc3RhdGljX2Nhc3Q8aW50PihjZWlsKHN0YXRpY19jYXN0PGZsb2F0Pih3aWR0aCAvIHRp
bGVXaWR0aCkpKTsKKyAgICByb3dzID0gMSArIHN0YXRpY19jYXN0PGludD4oY2VpbChzdGF0aWNf
Y2FzdDxmbG9hdD4oaGVpZ2h0IC8gdGlsZUhlaWdodCkpKTsKIAogICAgIElORigibz0lcCBuZXcg
Z3JpZCBzaXplIGNvbHM6ICVsZCwgcm93czogJWxkLCB3YXMgJWxkLCAlbGQiLAogICAgICAgICBw
cml2LT5zZWxmLCBjb2xzLCByb3dzLCBwcml2LT52aWV3LmNvbHMsIHByaXYtPnZpZXcucm93cyk7
CkBAIC04MjUsNyArODI1LDcgQEAgc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3JlY2FsY19yZW5kZXJlcnMoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGEKICAgICBvbGRfcm93
cyA9IHByaXYtPnZpZXcucm93czsKIAogICAgIGlmIChyb3dzIDwgb2xkX3Jvd3MpIHsKLSAgICAg
ICAgRWluYV9Jbmxpc3QgKipzdGFydCwgKiplbmQ7CisgICAgICAgIEVpbmFfSW5saXN0Kiogc3Rh
cnQsICoqZW5kOwogICAgICAgICBzdGFydCA9IHByaXYtPnZpZXcuaXRlbXMgKyByb3dzOwogICAg
ICAgICBlbmQgPSBwcml2LT52aWV3Lml0ZW1zICsgb2xkX3Jvd3M7CiAgICAgICAgIF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV92aWV3X3Jvd3NfcmFuZ2VfZGVsKHByaXYsIHN0YXJ0LCBlbmQpOwpA
QCAtODM5LDE4ICs4MzksMTQgQEAgc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3JlY2FsY19yZW5kZXJlcnMoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGEKICAgICBwcml2LT52
aWV3LnJvd3MgPSByb3dzOwogICAgIHByaXYtPnZpZXcuY29scyA9IGNvbHM7CiAgICAgaWYgKHJv
d3MgPiBvbGRfcm93cykgewotICAgICAgICBFaW5hX0lubGlzdCAqKnN0YXJ0LCAqKmVuZDsKLSAg
ICAgICAgc3RhcnQgPSBwcml2LT52aWV3Lml0ZW1zICsgb2xkX3Jvd3M7Ci0gICAgICAgIGVuZCA9
IHByaXYtPnZpZXcuaXRlbXMgKyByb3dzOworICAgICAgICBFaW5hX0lubGlzdCoqIHN0YXJ0ID0g
cHJpdi0+dmlldy5pdGVtcyArIG9sZF9yb3dzOworICAgICAgICBFaW5hX0lubGlzdCoqIGVuZCA9
IHByaXYtPnZpZXcuaXRlbXMgKyByb3dzOwogICAgICAgICBmb3IgKDsgc3RhcnQgPCBlbmQ7IHN0
YXJ0KyspIHsKLSAgICAgICAgICAgIEVpbmFfQm9vbCByOwogICAgICAgICAgICAgKnN0YXJ0ID0g
MDsKLSAgICAgICAgICAgIHIgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19jb2xzX2Vu
ZF9hZGQKLSAgICAgICAgICAgICAgICAocHJpdiwgc3RhcnQsIDAsIGNvbHMpOworICAgICAgICAg
ICAgRWluYV9Cb29sIHIgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19jb2xzX2VuZF9h
ZGQocHJpdiwgc3RhcnQsIDAsIGNvbHMpOwogICAgICAgICAgICAgaWYgKCFyKSB7CiAgICAgICAg
ICAgICAgICAgQ1JJVElDQUwoImZhaWxlZCB0byBhbGxvY2F0ZSAlbGQgY29sdW1ucyIsIGNvbHMp
OwotICAgICAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3Jvd3NfcmFu
Z2VfZGVsCi0gICAgICAgICAgICAgICAgICAgIChwcml2LCBwcml2LT52aWV3Lml0ZW1zICsgb2xk
X3Jvd3MsIHN0YXJ0KTsKKyAgICAgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
dmlld19yb3dzX3JhbmdlX2RlbChwcml2LCBwcml2LT52aWV3Lml0ZW1zICsgb2xkX3Jvd3MsIHN0
YXJ0KTsKICAgICAgICAgICAgICAgICBwcml2LT52aWV3LnJvd3MgPSBvbGRfcm93czsKICAgICAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CkBAIC04NTgsMTUgKzg1NCwxMiBAQCBz
dGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcmVjYWxjX3JlbmRlcmVycyhFd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9EYQogICAgIH0KIAogICAgIGlmIChjb2xzICE9IG9sZF9jb2xz
KSB7Ci0gICAgICAgIEVpbmFfSW5saXN0ICoqc3RhcnQsICoqZW5kOwogICAgICAgICBpbnQgdG9k
byA9IGNvbHMgLSBvbGRfY29sczsKLSAgICAgICAgc3RhcnQgPSBwcml2LT52aWV3Lml0ZW1zOwot
ICAgICAgICBlbmQgPSBzdGFydCArIHN0ZDo6bWluKG9sZF9yb3dzLCByb3dzKTsKKyAgICAgICAg
RWluYV9Jbmxpc3QqKiBzdGFydCA9IHByaXYtPnZpZXcuaXRlbXM7CisgICAgICAgIEVpbmFfSW5s
aXN0KiogZW5kID0gc3RhcnQgKyBzdGQ6Om1pbihvbGRfcm93cywgcm93cyk7CiAgICAgICAgIGlm
ICh0b2RvID4gMCkgewogICAgICAgICAgICAgZm9yICg7IHN0YXJ0IDwgZW5kOyBzdGFydCsrKSB7
Ci0gICAgICAgICAgICAgICAgRWluYV9Cb29sIHI7Ci0gICAgICAgICAgICAgICAgciA9IF9ld2tf
dGlsZWRfYmFja2luZ19zdG9yZV92aWV3X2NvbHNfZW5kX2FkZAotICAgICAgICAgICAgICAgICAg
ICAocHJpdiwgc3RhcnQsIG9sZF9jb2xzLCB0b2RvKTsKKyAgICAgICAgICAgICAgICBFaW5hX0Jv
b2wgciA9IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X2NvbHNfZW5kX2FkZChwcml2LCBz
dGFydCwgb2xkX2NvbHMsIHRvZG8pOwogICAgICAgICAgICAgICAgIGlmICghcikgewogICAgICAg
ICAgICAgICAgICAgICBDUklUSUNBTCgiZmFpbGVkIHRvIGFsbG9jYXRlICVkIGNvbHVtbnMhIiwg
dG9kbyk7CiAKQEAgLTg5MSwyMSArODg0LDIxIEBAIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9yZWNhbGNfcmVuZGVyZXJzKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhCiAg
ICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2ZpbGxfcmVuZGVyZXJzKHByaXYpOwogfQogCi1z
dGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfY2FsY3VsYXRlX3NpemUo
RXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgRXZhc19Db29yZCB3LCBFdmFzX0Nv
b3JkIGgpCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfY2FsY3Vs
YXRlX3NpemUoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdiwgRXZhc19Db29yZCB3
aWR0aCwgRXZhc19Db29yZCBoZWlnaHQpCiB7Ci0gICAgZXZhc19vYmplY3RfcmVzaXplKHByaXYt
PmJhc2UuY2xpcHBlciwgdywgaCk7CisgICAgZXZhc19vYmplY3RfcmVzaXplKHByaXYtPmJhc2Uu
Y2xpcHBlciwgd2lkdGgsIGhlaWdodCk7CiAKLSAgICBwcml2LT52aWV3LncgPSB3OwotICAgIHBy
aXYtPnZpZXcuaCA9IGg7CisgICAgcHJpdi0+dmlldy53aWR0aCA9IHdpZHRoOworICAgIHByaXYt
PnZpZXcuaGVpZ2h0ID0gaGVpZ2h0OwogCiAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3Jl
Y2FsY19yZW5kZXJlcnMoCi0gICAgICAgIHByaXYsIHcsIGgsIHByaXYtPnZpZXcudGlsZS53LCBw
cml2LT52aWV3LnRpbGUuaCk7CisgICAgICAgIHByaXYsIHdpZHRoLCBoZWlnaHQsIHByaXYtPnZp
ZXcudGlsZS53aWR0aCwgcHJpdi0+dmlldy50aWxlLmhlaWdodCk7CiB9CiAKIC8vIFRPRE86IHJl
bW92ZSBtZSBsYXRlci4KLXN0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfdmlld19kYmcoY29uc3QgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdikKK3N0
YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19kYmcoY29uc3Qg
RXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdikKIHsKLSAgICBFaW5hX0lubGlzdCAq
KnN0YXJ0LCAqKmVuZDsKKyAgICBFaW5hX0lubGlzdCoqIHN0YXJ0LCAqKmVuZDsKICAgICBwcmlu
dGYoInRpbGVzPSUybGQsJTJsZCAgbW9kZWw9JTJsZCwlMmxkIFslZHglZF0gYmFzZT0lKzNsZCwl
KzRsZCBvZmZzZXQ9JSs0ZCwlKzRkIG9sZD0lKzRkLCUrNGQgYmFzZT0lKzNkLCUrM2RcbiIsCiAg
ICAgICAgICAgIHByaXYtPnZpZXcuY29scywgcHJpdi0+dmlldy5yb3dzLAogICAgICAgICAgICBw
cml2LT5tb2RlbC5jdXIuY29scywgcHJpdi0+bW9kZWwuY3VyLnJvd3MsCkBAIC05MTgsNyArOTEx
LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X2Ri
Zyhjb25zdCBFd2tfVGlsZWRfQmFja2luZ19TdG8KICAgICBzdGFydCA9IHByaXYtPnZpZXcuaXRl
bXM7CiAgICAgZW5kID0gcHJpdi0+dmlldy5pdGVtcyArIHByaXYtPnZpZXcucm93czsKICAgICBm
b3IgKDsgc3RhcnQgPCBlbmQ7IHN0YXJ0KyspIHsKLSAgICAgICAgY29uc3QgRXdrX1RpbGVkX0Jh
Y2tpbmdfU3RvcmVfSXRlbSAqaXQ7CisgICAgICAgIGNvbnN0IEV3a19UaWxlZF9CYWNraW5nX1N0
b3JlX0l0ZW0qIGl0OwogCiAgICAgICAgIEVJTkFfSU5MSVNUX0ZPUkVBQ0goKnN0YXJ0LCBpdCkg
ewogICAgICAgICAgICAgcHJpbnRmKCIgJSs0ZCwlKzRkICIsIGl0LT5nZW9tZXRyeS54LCBpdC0+
Z2VvbWV0cnkueSk7CkBAIC05NDYsMjIgKzkzOSwyMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfZGJnKGNvbnN0IEV3a19UaWxlZF9CYWNraW5nX1N0
bwogICoKICAqIEBwYXJhbSBjb3VudCB0aGUgbnVtYmVyIG9mIHRpbWVzIHRvIHJlcGVhdCB0aGUg
cHJvY2Vzcy4KICAqLwotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdf
d3JhcF91cChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFdmFzX0Nvb3JkIHgs
IEV2YXNfQ29vcmQgeSwgdW5zaWduZWQgaW50IGNvdW50KQorc3RhdGljIHZvaWQgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX3ZpZXdfd3JhcF91cChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRh
KiBwcml2LCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwgdW5zaWduZWQgaW50IGNvdW50KQog
ewogICAgIHVuc2lnbmVkIGludCBsYXN0X3JvdyA9IHByaXYtPnZpZXcucm93cyAtIDE7Ci0gICAg
RXZhc19Db29yZCB0dyA9IHByaXYtPnZpZXcudGlsZS53OwotICAgIEV2YXNfQ29vcmQgdGggPSBw
cml2LT52aWV3LnRpbGUuaDsKKyAgICBFdmFzX0Nvb3JkIHR3ID0gcHJpdi0+dmlldy50aWxlLndp
ZHRoOworICAgIEV2YXNfQ29vcmQgdGggPSBwcml2LT52aWV3LnRpbGUuaGVpZ2h0OwogICAgIEV2
YXNfQ29vcmQgb2ZmX3kgPSBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgKyBjb3VudCAqIHRoOwog
ICAgIEV2YXNfQ29vcmQgb3kgPSB5ICsgKGxhc3Rfcm93IC0gY291bnQgKyAxKSAqIHRoICsgb2Zm
X3k7Ci0gICAgRWluYV9Jbmxpc3QgKippdHJfc3RhcnQsICoqaXRyX2VuZDsKKyAgICBFaW5hX0lu
bGlzdCoqIGl0cl9zdGFydCwgKippdHJfZW5kOwogCiAgICAgaXRyX3N0YXJ0ID0gcHJpdi0+dmll
dy5pdGVtczsKICAgICBpdHJfZW5kID0gaXRyX3N0YXJ0ICsgbGFzdF9yb3c7CiAKICAgICBmb3Ig
KDsgY291bnQgPiAwOyBjb3VudC0tKSB7Ci0gICAgICAgIEVpbmFfSW5saXN0ICoqaXRyOwotICAg
ICAgICBFaW5hX0lubGlzdCAqdG1wID0gKml0cl9zdGFydDsKLSAgICAgICAgRXdrX1RpbGVkX0Jh
Y2tpbmdfU3RvcmVfSXRlbSAqaXQ7CisgICAgICAgIEVpbmFfSW5saXN0KiogaXRyOworICAgICAg
ICBFaW5hX0lubGlzdCogdG1wID0gKml0cl9zdGFydDsKKyAgICAgICAgRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfSXRlbSogaXQ7CiAgICAgICAgIEV2YXNfQ29vcmQgb3ggPSB4ICsgcHJpdi0+dmll
dy5vZmZzZXQuYmFzZS54OwogICAgICAgICBpbnQgYyA9IDA7CiAKQEAgLTk5NCwyMSArOTg3LDIx
IEBAIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3dyYXBfdXAoRXdr
X1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqCiAgKgogICogQHBhcmFtIGNvdW50IHRoZSBudW1i
ZXIgb2YgdGltZXMgdG8gcmVwZWF0IHRoZSBwcm9jZXNzLgogICovCi1zdGF0aWMgdm9pZCBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld193cmFwX2Rvd24oRXdrX1RpbGVkX0JhY2tpbmdfU3Rv
cmVfRGF0YSAqcHJpdiwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHksIHVuc2lnbmVkIGludCBj
b3VudCkKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3dyYXBfZG93
bihFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2LCBFdmFzX0Nvb3JkIHgsIEV2YXNf
Q29vcmQgeSwgdW5zaWduZWQgaW50IGNvdW50KQogewotICAgIEV2YXNfQ29vcmQgdHcgPSBwcml2
LT52aWV3LnRpbGUudzsKLSAgICBFdmFzX0Nvb3JkIHRoID0gcHJpdi0+dmlldy50aWxlLmg7Cisg
ICAgRXZhc19Db29yZCB0dyA9IHByaXYtPnZpZXcudGlsZS53aWR0aDsKKyAgICBFdmFzX0Nvb3Jk
IHRoID0gcHJpdi0+dmlldy50aWxlLmhlaWdodDsKICAgICBFdmFzX0Nvb3JkIG9mZl95ID0gcHJp
di0+dmlldy5vZmZzZXQuYmFzZS55IC0gY291bnQgKiB0aDsKICAgICBFdmFzX0Nvb3JkIG95ID0g
eSArIG9mZl95ICsgKGNvdW50IC0gMSkgKiB0aDsKLSAgICBFaW5hX0lubGlzdCAqKml0cl9zdGFy
dCwgKippdHJfZW5kOworICAgIEVpbmFfSW5saXN0KiogaXRyX3N0YXJ0LCAqKml0cl9lbmQ7CiAK
ICAgICBpdHJfc3RhcnQgPSBwcml2LT52aWV3Lml0ZW1zICsgcHJpdi0+dmlldy5yb3dzIC0gMTsK
ICAgICBpdHJfZW5kID0gcHJpdi0+dmlldy5pdGVtczsKIAogICAgIGZvciAoOyBjb3VudCA+IDA7
IGNvdW50LS0pIHsKLSAgICAgICAgRWluYV9Jbmxpc3QgKippdHI7Ci0gICAgICAgIEVpbmFfSW5s
aXN0ICp0bXAgPSAqaXRyX3N0YXJ0OwotICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9J
dGVtICppdDsKKyAgICAgICAgRWluYV9Jbmxpc3QqKiBpdHI7CisgICAgICAgIEVpbmFfSW5saXN0
KiB0bXAgPSAqaXRyX3N0YXJ0OworICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVt
KiBpdDsKICAgICAgICAgRXZhc19Db29yZCBveCA9IHggKyBwcml2LT52aWV3Lm9mZnNldC5iYXNl
Lng7CiAgICAgICAgIGludCBjID0gMDsKIApAQCAtMTA0MSwxNSArMTAzNCwxNSBAQCBzdGF0aWMg
dm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld193cmFwX2Rvd24oRXdrX1RpbGVkX0Jh
Y2tpbmdfU3RvcmVfRGF0YQogICoKICAqIEBwYXJhbSBjb3VudCB0aGUgbnVtYmVyIG9mIHRpbWVz
IHRvIHJlcGVhdCB0aGUgcHJvY2Vzcy4KICAqLwotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNr
aW5nX3N0b3JlX3ZpZXdfd3JhcF9sZWZ0KEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnBy
aXYsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5LCB1bnNpZ25lZCBpbnQgY291bnQpCitzdGF0
aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld193cmFwX2xlZnQoRXdrX1RpbGVk
X0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdiwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHksIHVu
c2lnbmVkIGludCBjb3VudCkKIHsKICAgICB1bnNpZ25lZCBpbnQgciwgbGFzdF9jb2wgPSBwcml2
LT52aWV3LmNvbHMgLSAxOwotICAgIEV2YXNfQ29vcmQgdHcgPSBwcml2LT52aWV3LnRpbGUudzsK
LSAgICBFdmFzX0Nvb3JkIHRoID0gcHJpdi0+dmlldy50aWxlLmg7CisgICAgRXZhc19Db29yZCB0
dyA9IHByaXYtPnZpZXcudGlsZS53aWR0aDsKKyAgICBFdmFzX0Nvb3JkIHRoID0gcHJpdi0+dmll
dy50aWxlLmhlaWdodDsKICAgICBFdmFzX0Nvb3JkIG9mZl94ID0gcHJpdi0+dmlldy5vZmZzZXQu
YmFzZS54ICsgY291bnQgKiB0dzsKICAgICBFdmFzX0Nvb3JkIG95ID0geSArIHByaXYtPnZpZXcu
b2Zmc2V0LmJhc2UueTsKLSAgICBFaW5hX0lubGlzdCAqKml0cjsKLSAgICBFaW5hX0lubGlzdCAq
Kml0cl9lbmQ7CisgICAgRWluYV9Jbmxpc3QqKiBpdHI7CisgICAgRWluYV9Jbmxpc3QqKiBpdHJf
ZW5kOwogCiAgICAgaXRyID0gcHJpdi0+dmlldy5pdGVtczsKICAgICBpdHJfZW5kID0gaXRyICsg
cHJpdi0+dmlldy5yb3dzOwpAQCAtMTA2Miw3ICsxMDU1LDcgQEAgc3RhdGljIHZvaWQgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfd3JhcF9sZWZ0KEV3a19UaWxlZF9CYWNraW5nX1N0b3Jl
X0RhdGEKICAgICAgICAgdW5zaWduZWQgaW50IGksIGMgPSBsYXN0X2NvbCAtIGNvdW50ICsgMTsK
IAogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKywgYysrLCBveCArPSB0dykgewot
ICAgICAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQ7CisgICAgICAgICAg
ICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKiBpdDsKICAgICAgICAgICAgIGl0ID0gRUlO
QV9JTkxJU1RfQ09OVEFJTkVSX0dFVCgqaXRyLCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVt
KTsKICAgICAgICAgICAgICppdHIgPSBlaW5hX2lubGlzdF9kZW1vdGUoKml0ciwgKml0cik7CiAK
QEAgLTEwODgsMTQgKzEwODEsMTQgQEAgc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX3ZpZXdfd3JhcF9sZWZ0KEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEKICAqCiAgKiBA
cGFyYW0gY291bnQgdGhlIG51bWJlciBvZiB0aW1lcyB0byByZXBlYXQgdGhlIHByb2Nlc3MuCiAg
Ki8KLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3dyYXBfcmlnaHQo
RXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSAqcHJpdiwgRXZhc19Db29yZCB4LCBFdmFzX0Nv
b3JkIHksIHVuc2lnbmVkIGludCBjb3VudCkKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV92aWV3X3dyYXBfcmlnaHQoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJp
diwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHksIHVuc2lnbmVkIGludCBjb3VudCkKIHsKICAg
ICB1bnNpZ25lZCBpbnQgcjsKLSAgICBFdmFzX0Nvb3JkIHR3ID0gcHJpdi0+dmlldy50aWxlLnc7
Ci0gICAgRXZhc19Db29yZCB0aCA9IHByaXYtPnZpZXcudGlsZS5oOworICAgIEV2YXNfQ29vcmQg
dHcgPSBwcml2LT52aWV3LnRpbGUud2lkdGg7CisgICAgRXZhc19Db29yZCB0aCA9IHByaXYtPnZp
ZXcudGlsZS5oZWlnaHQ7CiAgICAgRXZhc19Db29yZCBvZmZfeCA9IHByaXYtPnZpZXcub2Zmc2V0
LmJhc2UueCAtIGNvdW50ICogdHc7CiAgICAgRXZhc19Db29yZCBveSA9IHkgKyBwcml2LT52aWV3
Lm9mZnNldC5iYXNlLnk7Ci0gICAgRWluYV9Jbmxpc3QgKippdHIsICoqaXRyX2VuZDsKKyAgICBF
aW5hX0lubGlzdCoqIGl0ciwgKiogaXRyX2VuZDsKIAogICAgIGl0ciA9IHByaXYtPnZpZXcuaXRl
bXM7CiAgICAgaXRyX2VuZCA9IGl0ciArIHByaXYtPnZpZXcucm93czsKQEAgLTExMDgsNyArMTEw
MSw3IEBAIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3dyYXBfcmln
aHQoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0CiAgICAgICAgIHVuc2lnbmVkIGludCBpLCBj
ID0gY291bnQgLSAxOwogCiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrLCBjLS0s
IG94IC09IHR3KSB7Ci0gICAgICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICpp
dDsKKyAgICAgICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0qIGl0OwogICAgICAg
ICAgICAgaXQgPSBFSU5BX0lOTElTVF9DT05UQUlORVJfR0VUKCgqaXRyKS0+bGFzdCwgRXdrX1Rp
bGVkX0JhY2tpbmdfU3RvcmVfSXRlbSk7CiAgICAgICAgICAgICAqaXRyID0gZWluYV9pbmxpc3Rf
cHJvbW90ZSgqaXRyLCAoKml0ciktPmxhc3QpOwogCkBAIC0xMTIxLDE2ICsxMTE0LDE2IEBAIHN0
YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3dyYXBfcmlnaHQoRXdrX1Rp
bGVkX0JhY2tpbmdfU3RvcmVfRGF0CiAgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54ID0gb2Zm
X3g7CiB9CiAKLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3JlZmls
bChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFdmFzX0Nvb3JkIHgsIEV2YXNf
Q29vcmQgeSwgaW50IHN0ZXBfeCwgaW50IHN0ZXBfeSkKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV92aWV3X3JlZmlsbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBw
cml2LCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwgaW50IHN0ZXBYLCBpbnQgc3RlcFkpCiB7
Ci0gICAgRWluYV9Jbmxpc3QgKippdHIsICoqaXRyX2VuZDsKKyAgICBFaW5hX0lubGlzdCoqIGl0
ciwgKippdHJfZW5kOwogICAgIEV2YXNfQ29vcmQgYmFzZV9veCwgb3ksIHR3LCB0aDsKICAgICB1
bnNpZ25lZCBpbnQgcjsKIAogICAgIGV2YXNfb2JqZWN0X21vdmUocHJpdi0+YmFzZS5jbGlwcGVy
LCB4LCB5KTsKIAotICAgIHR3ID0gcHJpdi0+dmlldy50aWxlLnc7Ci0gICAgdGggPSBwcml2LT52
aWV3LnRpbGUuaDsKKyAgICB0dyA9IHByaXYtPnZpZXcudGlsZS53aWR0aDsKKyAgICB0aCA9IHBy
aXYtPnZpZXcudGlsZS5oZWlnaHQ7CiAKICAgICBiYXNlX294ID0geCArIHByaXYtPnZpZXcub2Zm
c2V0LmJhc2UueDsKICAgICBveSA9IHkgKyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnk7CkBAIC0x
MTM5LDExICsxMTMyLDExIEBAIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92
aWV3X3JlZmlsbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwCiAgICAgaXRyX2VuZCA9
IGl0ciArIHByaXYtPnZpZXcucm93czsKICAgICByID0gMDsKIAotICAgIHByaXYtPm1vZGVsLmJh
c2UuY29sIC09IHN0ZXBfeDsKLSAgICBwcml2LT5tb2RlbC5iYXNlLnJvdyAtPSBzdGVwX3k7Cisg
ICAgcHJpdi0+bW9kZWwuYmFzZS5jb2wgLT0gc3RlcFg7CisgICAgcHJpdi0+bW9kZWwuYmFzZS5y
b3cgLT0gc3RlcFk7CiAKICAgICBmb3IgKDsgaXRyIDwgaXRyX2VuZDsgaXRyKyssIHIrKykgewot
ICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtICppdDsKKyAgICAgICAgRXdrX1Rp
bGVkX0JhY2tpbmdfU3RvcmVfSXRlbSogaXQ7CiAgICAgICAgIEV2YXNfQ29vcmQgb3ggPSBiYXNl
X294OwogICAgICAgICB1bnNpZ25lZCBpbnQgYyA9IDA7CiAgICAgICAgIEVJTkFfSU5MSVNUX0ZP
UkVBQ0goKml0ciwgaXQpIHsKQEAgLTExNTYsMTUgKzExNDksMTUgQEAgc3RhdGljIHZvaWQgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcmVmaWxsKEV3a19UaWxlZF9CYWNraW5nX1N0b3Jl
X0RhdGEgKnAKICAgICB9CiB9CiAKLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV92aWV3X3Bvc19hcHBseShFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFdmFz
X0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSkKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV92aWV3X3Bvc19hcHBseShFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2LCBF
dmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSkKIHsKLSAgICBFaW5hX0lubGlzdCAqKml0ciwgKipp
dHJfZW5kOworICAgIEVpbmFfSW5saXN0KiogaXRyLCAqKml0cl9lbmQ7CiAgICAgRXZhc19Db29y
ZCBiYXNlX294LCBveSwgdHcsIHRoOwogCiAgICAgZXZhc19vYmplY3RfbW92ZShwcml2LT5iYXNl
LmNsaXBwZXIsIHgsIHkpOwogCi0gICAgdHcgPSBwcml2LT52aWV3LnRpbGUudzsKLSAgICB0aCA9
IHByaXYtPnZpZXcudGlsZS5oOworICAgIHR3ID0gcHJpdi0+dmlldy50aWxlLndpZHRoOworICAg
IHRoID0gcHJpdi0+dmlldy50aWxlLmhlaWdodDsKIAogICAgIGJhc2Vfb3ggPSB4ICsgcHJpdi0+
dmlldy5vZmZzZXQuYmFzZS54OwogICAgIG95ID0geSArIHByaXYtPnZpZXcub2Zmc2V0LmJhc2Uu
eTsKQEAgLTExNzIsNyArMTE2NSw3IEBAIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV92aWV3X3Bvc19hcHBseShFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhCiAgICAgaXRy
ID0gcHJpdi0+dmlldy5pdGVtczsKICAgICBpdHJfZW5kID0gaXRyICsgcHJpdi0+dmlldy5yb3dz
OwogICAgIGZvciAoOyBpdHIgPCBpdHJfZW5kOyBpdHIrKykgewotICAgICAgICBFd2tfVGlsZWRf
QmFja2luZ19TdG9yZV9JdGVtICppdDsKKyAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVf
SXRlbSogaXQ7CiAgICAgICAgIEV2YXNfQ29vcmQgb3ggPSBiYXNlX294OwogICAgICAgICBFSU5B
X0lOTElTVF9GT1JFQUNIKCppdHIsIGl0KSB7CiAgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfaXRlbV9tb3ZlKGl0LCBveCwgb3kpOwpAQCAtMTE4Miw3ICsxMTc1LDcgQEAgc3Rh
dGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcG9zX2FwcGx5KEV3a19UaWxl
ZF9CYWNraW5nX1N0b3JlX0RhdGEKICAgICB9CiB9CiAKLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV9zbWFydF9jYWxjdWxhdGVfb2Zmc2V0X2ZvcmNlKEV3a19UaWxlZF9CYWNr
aW5nX1N0b3JlX0RhdGEgKnByaXYpCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfc21hcnRfY2FsY3VsYXRlX29mZnNldF9mb3JjZShFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9E
YXRhKiBwcml2KQogewogICAgIEV2YXNfQ29vcmQgZHggPSBwcml2LT52aWV3Lm9mZnNldC5jdXIu
eCAtIHByaXYtPnZpZXcub2Zmc2V0Lm9sZC54OwogICAgIEV2YXNfQ29vcmQgZHkgPSBwcml2LT52
aWV3Lm9mZnNldC5jdXIueSAtIHByaXYtPnZpZXcub2Zmc2V0Lm9sZC55OwpAQCAtMTE5Miw4ICsx
MTg1LDggQEAgc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1
bGF0ZV9vZmZzZXRfZm9yY2UoRXdrX1RpbGVkX0JhY2sKICAgICBJTkYoIm89JXAsIG9mZnNldDog
JSs0ZCwgJSs0ZCAoJSs0ZCwgJSs0ZCkiLAogICAgICAgICBwcml2LT5zZWxmLCBkeCwgZHksIHBy
aXYtPnZpZXcub2Zmc2V0LmN1ci54LCBwcml2LT52aWV3Lm9mZnNldC5jdXIueSk7CiAKLSAgICB0
dyA9IHByaXYtPnZpZXcudGlsZS53OwotICAgIHRoID0gcHJpdi0+dmlldy50aWxlLmg7CisgICAg
dHcgPSBwcml2LT52aWV3LnRpbGUud2lkdGg7CisgICAgdGggPSBwcml2LT52aWV3LnRpbGUuaGVp
Z2h0OwogCiAgICAgbG9uZyBuZXdfY29sID0gLXByaXYtPnZpZXcub2Zmc2V0LmN1ci54IC8gdHc7
CiAgICAgc3RlcF94ID0gcHJpdi0+bW9kZWwuYmFzZS5jb2wgLSBuZXdfY29sOwpAQCAtMTIxNCw3
ICsxMjA3LDcgQEAgc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2Nh
bGN1bGF0ZV9vZmZzZXRfZm9yY2UoRXdrX1RpbGVkX0JhY2sKICAgICAgICAgKHByaXYsIHByaXYt
PnZpZXcueCwgcHJpdi0+dmlldy55LCBzdGVwX3gsIHN0ZXBfeSk7CiB9CiAKLXN0YXRpYyB2b2lk
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9jYWxjdWxhdGVfb2Zmc2V0KEV3a19UaWxl
ZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5KQor
c3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZV9vZmZz
ZXQoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdiwgRXZhc19Db29yZCB4LCBFdmFz
X0Nvb3JkIHkpCiB7CiAgICAgRXZhc19Db29yZCBkeCA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci54
IC0gcHJpdi0+dmlldy5vZmZzZXQub2xkLng7CiAgICAgRXZhc19Db29yZCBkeSA9IHByaXYtPnZp
ZXcub2Zmc2V0LmN1ci55IC0gcHJpdi0+dmlldy5vZmZzZXQub2xkLnk7CkBAIC0xMjI3LDggKzEy
MjAsOCBAQCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfY2FsY3Vs
YXRlX29mZnNldChFd2tfVGlsZWRfQmFja2luZ19TdAogICAgIGlmICghZHggJiYgIWR5KQogICAg
ICAgICByZXR1cm47CiAKLSAgICB0dyA9IHByaXYtPnZpZXcudGlsZS53OwotICAgIHRoID0gcHJp
di0+dmlldy50aWxlLmg7CisgICAgdHcgPSBwcml2LT52aWV3LnRpbGUud2lkdGg7CisgICAgdGgg
PSBwcml2LT52aWV3LnRpbGUuaGVpZ2h0OwogCiAgICAgbG9uZyBuZXdfY29sID0gLXByaXYtPnZp
ZXcub2Zmc2V0LmN1ci54IC8gdHc7CiAgICAgc3RlcF94ID0gcHJpdi0+bW9kZWwuYmFzZS5jb2wg
LSBuZXdfY29sOwpAQCAtMTI3MSw3ICsxMjY0LDcgQEAgc3RhdGljIHZvaWQgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZV9vZmZzZXQoRXdrX1RpbGVkX0JhY2tpbmdfU3QK
ICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19wb3NfYXBwbHkocHJpdiwgeCwgeSk7
CiB9CiAKLXN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9jYWxjdWxh
dGVfcG9zKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgKnByaXYsIEV2YXNfQ29vcmQgeCwg
RXZhc19Db29yZCB5KQorc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0
X2NhbGN1bGF0ZV9wb3MoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdiwgRXZhc19D
b29yZCB4LCBFdmFzX0Nvb3JkIHkpCiB7CiAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3Zp
ZXdfcG9zX2FwcGx5KHByaXYsIHgsIHkpOwogICAgIHByaXYtPnZpZXcueCA9IHg7CkBAIC0xMjgy
LDEwICsxMjc1LDEwIEBAIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFy
dF9jYWxjdWxhdGVfcG9zKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlCiAgICAgICAgIHByaXYtPnZp
ZXcub2Zmc2V0LmN1ci55ICsgcHJpdi0+dmlldy55KTsKIH0KIAotc3RhdGljIHZvaWQgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX2ZpbGxfcmVuZGVyZXJzKEV3a19UaWxlZF9CYWNraW5nX1N0b3Jl
X0RhdGEgKnByaXYpCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZmlsbF9y
ZW5kZXJlcnMoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdikKIHsKLSAgICBFaW5h
X0lubGlzdCAqaXQ7Ci0gICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXRlbTsKKyAg
ICBFaW5hX0lubGlzdCogaXQ7CisgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSogaXRl
bTsKICAgICBpbnQgaSwgajsKIAogICAgIGZvciAoaSA9IDA7IGkgPCBwcml2LT52aWV3LnJvd3M7
IGkrKykgewpAQCAtMTI5NiwxNCArMTI4OSwxNCBAQCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfZmlsbF9yZW5kZXJlcnMoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YQog
ICAgIH0KIH0KIAotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2Nh
bGN1bGF0ZShFdmFzX09iamVjdCAqbykKK3N0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9zbWFydF9jYWxjdWxhdGUoRXZhc19PYmplY3QqIGV3a1RpbGUpCiB7CiAgICAgRXZhc19D
b29yZCB4LCB5LCB3LCBoOwogCi0gICAgZXZhc19vYmplY3RfZ2VvbWV0cnlfZ2V0KG8sICZ4LCAm
eSwgJncsICZoKTsKLSAgICBEQkcoIm89JXAgYXQgJWQsJWQgKyAlZHglZCIsIG8sIHgsIHksIHcs
IGgpOworICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldChld2tUaWxlLCAmeCwgJnksICZ3LCAm
aCk7CisgICAgREJHKCJvPSVwIGF0ICVkLCVkICsgJWR4JWQiLCBld2tUaWxlLCB4LCB5LCB3LCBo
KTsKIAotICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYpOworICAgIFBSSVZfREFU
QV9HRVRfT1JfUkVUVVJOKGV3a1RpbGUsIHByaXYpOwogCiAgICAgcHJpdi0+Y2hhbmdlZC5hbnkg
PSBFSU5BX0ZBTFNFOwogCkBAIC0xMzEyLDggKzEzMDUsOCBAQCBzdGF0aWMgdm9pZCBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfY2FsY3VsYXRlKEV2YXNfT2JqZWN0ICpvKQogICAgIGlm
ICghcHJpdi0+cmVuZGVyLnN1c3BlbmQgJiYgcHJpdi0+Y2hhbmdlZC5tb2RlbCkgewogICAgICAg
ICB1bnNpZ25lZCBsb25nIGNvbHMsIHJvd3M7CiAKLSAgICAgICAgY29scyA9IHByaXYtPm1vZGVs
LndpZHRoIC8gcHJpdi0+dmlldy50aWxlLncgKyAxOwotICAgICAgICByb3dzID0gcHJpdi0+bW9k
ZWwuaGVpZ2h0IC8gcHJpdi0+dmlldy50aWxlLmggKyAxOworICAgICAgICBjb2xzID0gcHJpdi0+
bW9kZWwud2lkdGggLyBwcml2LT52aWV3LnRpbGUud2lkdGggKyAxOworICAgICAgICByb3dzID0g
cHJpdi0+bW9kZWwuaGVpZ2h0IC8gcHJpdi0+dmlldy50aWxlLmhlaWdodCArIDE7CiAKICAgICAg
ICAgcHJpdi0+bW9kZWwub2xkLmNvbHMgPSBwcml2LT5tb2RlbC5jdXIuY29sczsKICAgICAgICAg
cHJpdi0+bW9kZWwub2xkLnJvd3MgPSBwcml2LT5tb2RlbC5jdXIucm93czsKQEAgLTEzNDgsOCAr
MTM0MSw4IEBAIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9jYWxj
dWxhdGUoRXZhc19PYmplY3QgKm8pCiAgICAgICAgIHJlY3QuaCA9IHByaXYtPm1vZGVsLmhlaWdo
dDsKICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2ZpbGxfcmVuZGVyZXJzKHByaXYp
OwogICAgICAgICBld2tfdGlsZV9tYXRyaXhfcmVzaXplKHByaXYtPm1vZGVsLm1hdHJpeCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHByaXYtPm1vZGVsLmN1ci5jb2xzLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcHJpdi0+bW9kZWwuY3VyLnJvd3MpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHByaXYtPm1vZGVsLmN1ci5jb2xzLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHByaXYtPm1vZGVsLmN1ci5yb3dzKTsKICAgICAgICAgcHJpdi0+Y2hhbmdl
ZC5tb2RlbCA9IEVJTkFfRkFMU0U7CiAgICAgICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShwcml2LT5j
b250ZW50c19jbGlwcGVyLCBwcml2LT5tb2RlbC53aWR0aCwgcHJpdi0+bW9kZWwuaGVpZ2h0KTsK
ICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZV9vZmZzZXRf
Zm9yY2UocHJpdik7CkBAIC0xMzU3LDcgKzEzNTAsNyBAQCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfc21hcnRfY2FsY3VsYXRlKEV2YXNfT2JqZWN0ICpvKQogICAgICAgICAv
KiBNYWtlIHN1cmUgd2UgZG8gbm90IG1pc3MgYW55IGltcG9ydGFudCByZXBhaW50IGJ5CiAgICAg
ICAgICAqIHJlcGFpbnRpbmcgdGhlIHdob2xlIHZpZXdwb3J0ICovCiAgICAgICAgIGNvbnN0IEVp
bmFfUmVjdGFuZ2xlIHIgPQotICAgICAgICAgICAgeyAwLCAwLCBwcml2LT5tb2RlbC53aWR0aCwg
cHJpdi0+bW9kZWwuaGVpZ2h0IH07CisgICAgICAgIHsgMCwgMCwgcHJpdi0+bW9kZWwud2lkdGgs
IHByaXYtPm1vZGVsLmhlaWdodCB9OwogICAgICAgICBld2tfdGlsZV9tYXRyaXhfdXBkYXRlKHBy
aXYtPm1vZGVsLm1hdHJpeCwgJnIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJp
di0+dmlldy50aWxlLnpvb20pOwogICAgIH0KQEAgLTEzNjcsMTkgKzEzNjAsMTkgQEAgc3RhdGlj
IHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZShFdmFzX09iamVj
dCAqbykKICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRlc19wcm9jZXNzKHByaXYp
OwogCiAgICAgaWYgKHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCA+IDAKLSAgICAgICAgfHwgcHJp
di0+dmlldy5vZmZzZXQuYmFzZS54IDw9IC0gcHJpdi0+dmlldy50aWxlLncKKyAgICAgICAgfHwg
cHJpdi0+dmlldy5vZmZzZXQuYmFzZS54IDw9IC0gcHJpdi0+dmlldy50aWxlLndpZHRoCiAgICAg
ICAgIHx8IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSA+IDAKLSAgICAgICAgfHwgcHJpdi0+dmll
dy5vZmZzZXQuYmFzZS55IDw9IC0gcHJpdi0+dmlldy50aWxlLmgpCisgICAgICAgIHx8IHByaXYt
PnZpZXcub2Zmc2V0LmJhc2UueSA8PSAtIHByaXYtPnZpZXcudGlsZS5oZWlnaHQpCiAgICAgICAg
IEVSUigiaW5jb3JyZWN0IGJhc2Ugb2Zmc2V0ICUrNGQsJSs0ZCwgdGlsZT0lZHglZCwgY3VyPSUr
NGQsJSs0ZFxuIiwKICAgICAgICAgICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCwgcHJpdi0+
dmlldy5vZmZzZXQuYmFzZS55LAotICAgICAgICAgICAgcHJpdi0+dmlldy50aWxlLncsIHByaXYt
PnZpZXcudGlsZS5oLAorICAgICAgICAgICAgcHJpdi0+dmlldy50aWxlLndpZHRoLCBwcml2LT52
aWV3LnRpbGUuaGVpZ2h0LAogICAgICAgICAgICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLngsIHBy
aXYtPnZpZXcub2Zmc2V0LmN1ci55KTsKIAogfQogCi1FdmFzX09iamVjdCAqZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfYWRkKEV2YXMgKmUpCitFdmFzX09iamVjdCogZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfYWRkKEV2YXMqIGNhbnZhcykKIHsKLSAgICBzdGF0aWMgRXZhc19TbWFydCAqc21hcnQg
PSAwOworICAgIHN0YXRpYyBFdmFzX1NtYXJ0KiBzbWFydCA9IDA7CiAKICAgICBpZiAoX2V3a190
aWxlZF9sb2dfZG9tIDwgMCkKICAgICAgICAgX2V3a190aWxlZF9sb2dfZG9tID0gZWluYV9sb2df
ZG9tYWluX3JlZ2lzdGVyKCJFd2tfVGlsZWRfQmFja2luZ19TdG9yZSIsIDApOwpAQCAtMTQwMiwz
NCArMTM5NSwzNCBAQCBFdmFzX09iamVjdCAqZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfYWRkKEV2
YXMgKmUpCiAgICAgICAgIHNtYXJ0ID0gZXZhc19zbWFydF9jbGFzc19uZXcoJnNjKTsKICAgICB9
CiAKLSAgICByZXR1cm4gZXZhc19vYmplY3Rfc21hcnRfYWRkKGUsIHNtYXJ0KTsKKyAgICByZXR1
cm4gZXZhc19vYmplY3Rfc21hcnRfYWRkKGNhbnZhcywgc21hcnQpOwogfQogCi12b2lkIGV3a190
aWxlZF9iYWNraW5nX3N0b3JlX3JlbmRlcl9jYl9zZXQoRXZhc19PYmplY3QgKm8sIEVpbmFfQm9v
bCAoKmNiKSh2b2lkICpkYXRhLCBFd2tfVGlsZSAqdCwgY29uc3QgRWluYV9SZWN0YW5nbGUgKmFy
ZWEpLCBjb25zdCB2b2lkICpkYXRhKQordm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9yZW5k
ZXJfY2Jfc2V0KEV2YXNfT2JqZWN0KiBld2tUaWxlLCBFaW5hX0Jvb2wgKCpjYWxsYmFjaykodm9p
ZCogZGF0YSwgRXdrX1RpbGUqIHRpbGUsIGNvbnN0IEVpbmFfUmVjdGFuZ2xlKiBhcmVhKSwgY29u
c3Qgdm9pZCogZGF0YSkKIHsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihjYik7Ci0g
ICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdik7Ci0gICAgcHJpdi0+cmVuZGVyLmNi
ID0gY2I7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oY2FsbGJhY2spOworICAgIFBS
SVZfREFUQV9HRVRfT1JfUkVUVVJOKGV3a1RpbGUsIHByaXYpOworICAgIHByaXYtPnJlbmRlci5j
YiA9IGNhbGxiYWNrOwogICAgIHByaXYtPnJlbmRlci5kYXRhID0gKHZvaWQqKWRhdGE7CiB9CiAK
LUV3a19UaWxlX1VudXNlZF9DYWNoZSAqZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV91bnVz
ZWRfY2FjaGVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0ICpvKQorRXdrX1RpbGVfVW51c2VkX0NhY2hl
KiBld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX3VudXNlZF9jYWNoZV9nZXQoY29uc3QgRXZh
c19PYmplY3QqIGV3a1RpbGUpCiB7Ci0gICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJp
diwgMCk7CisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4oZXdrVGlsZSwgcHJpdiwgMCk7CiAg
ICAgcmV0dXJuIGV3a190aWxlX21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1h
dHJpeCk7CiB9CiAKLXZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV91bnVzZWRfY2Fj
aGVfc2V0KEV2YXNfT2JqZWN0ICpvLCBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YykKK3ZvaWQg
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV91bnVzZWRfY2FjaGVfc2V0KEV2YXNfT2JqZWN0
KiBld2tUaWxlLCBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHRpbGVVbnVzZWRDYWNoZSkKIHsKLSAg
ICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2KTsKKyAgICBQUklWX0RBVEFfR0VUX09S
X1JFVFVSTihld2tUaWxlLCBwcml2KTsKIAotICAgIGlmIChld2tfdGlsZV9tYXRyaXhfdW51c2Vk
X2NhY2hlX2dldChwcml2LT5tb2RlbC5tYXRyaXgpID09IHR1YykKKyAgICBpZiAoZXdrX3RpbGVf
bWF0cml4X3VudXNlZF9jYWNoZV9nZXQocHJpdi0+bW9kZWwubWF0cml4KSA9PSB0aWxlVW51c2Vk
Q2FjaGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9t
b2RlbF9tYXRyaXhfY3JlYXRlKHByaXYsIHR1Yyk7CisgICAgX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX21vZGVsX21hdHJpeF9jcmVhdGUocHJpdiwgdGlsZVVudXNlZENhY2hlKTsKIH0KIAotc3Rh
dGljIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc2Nyb2xsX2Z1bGxfb2Zmc2V0
X3NldF9pbnRlcm5hbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhICpwcml2LCBFdmFzX0Nv
b3JkIHgsIEV2YXNfQ29vcmQgeSkKK3N0YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5n
X3N0b3JlX3Njcm9sbF9mdWxsX29mZnNldF9zZXRfaW50ZXJuYWwoRXdrX1RpbGVkX0JhY2tpbmdf
U3RvcmVfRGF0YSogcHJpdiwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHkpCiB7CiAgICAgLyog
VE9ETzogY2hlY2sgb2Zmc2V0IGdvIG91dCBvZiBib3VuZHMsIGNsYW1wICovCiAgICAgaWYgKHBy
aXYtPnJlbmRlci5kaXNhYmxlZCkKQEAgLTE0NDQsMzMgKzE0MzcsMzMgQEAgc3RhdGljIEVpbmFf
Qm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc2Nyb2xsX2Z1bGxfb2Zmc2V0X3NldF9pbnRl
cm5hbChFd2tfVGkKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi1FaW5hX0Jvb2wgZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfc2Nyb2xsX2Z1bGxfb2Zmc2V0X3NldChFdmFzX09iamVjdCAqbywg
RXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHkpCitFaW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfc2Nyb2xsX2Z1bGxfb2Zmc2V0X3NldChFdmFzX09iamVjdCogZXdrVGlsZSwgRXZhc19D
b29yZCB4LCBFdmFzX0Nvb3JkIHkpCiB7Ci0gICAgREJHKCJvPSVwLCB4PSVkLCB5PSVkIiwgbywg
eCwgeSk7CisgICAgREJHKCJvPSVwLCB4PSVkLCB5PSVkIiwgZXdrVGlsZSwgeCwgeSk7CiAKLSAg
ICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBQUklW
X0RBVEFfR0VUX09SX1JFVFVSTihld2tUaWxlLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBpZiAo
eCA9PSBwcml2LT52aWV3Lm9mZnNldC5jdXIueCAmJiB5ID09IHByaXYtPnZpZXcub2Zmc2V0LmN1
ci55KQogICAgICAgICByZXR1cm4gRUlOQV9UUlVFOwogCiAgICAgcmV0dXJuIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV9zY3JvbGxfZnVsbF9vZmZzZXRfc2V0X2ludGVybmFsKHByaXYsIHgsIHkp
OwogfQogCi1FaW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc2Nyb2xsX2Z1bGxfb2Zm
c2V0X2FkZChFdmFzX09iamVjdCAqbywgRXZhc19Db29yZCBkeCwgRXZhc19Db29yZCBkeSkKK0Vp
bmFfQm9vbCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zY3JvbGxfZnVsbF9vZmZzZXRfYWRkKEV2
YXNfT2JqZWN0KiBld2tUaWxlLCBFdmFzX0Nvb3JkIGR4LCBFdmFzX0Nvb3JkIGR5KQogewotICAg
IERCRygibz0lcCwgZHg9JWQsIGR5PSVkIiwgbywgZHgsIGR5KTsKKyAgICBEQkcoIm89JXAsIGR4
PSVkLCBkeT0lZCIsIGV3a1RpbGUsIGR4LCBkeSk7CiAKLSAgICBQUklWX0RBVEFfR0VUX09SX1JF
VFVSTihvLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihl
d2tUaWxlLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBpZiAoIWR4ICYmICFkeSkKICAgICAgICAg
cmV0dXJuIEVJTkFfVFJVRTsKIAogICAgIHJldHVybiBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
c2Nyb2xsX2Z1bGxfb2Zmc2V0X3NldF9pbnRlcm5hbAotICAgICAgICAocHJpdiwgcHJpdi0+dmll
dy5vZmZzZXQuY3VyLnggKyBkeCwgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkgKyBkeSk7CisgICAg
ICAgICAgICAgICAocHJpdiwgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggKyBkeCwgcHJpdi0+dmll
dy5vZmZzZXQuY3VyLnkgKyBkeSk7CiB9CiAKLXN0YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX3pvb21fc2V0X2ludGVybmFsKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0Rh
dGEgKnByaXYsIGZsb2F0ICp6b29tLCBFdmFzX0Nvb3JkIGN4LCBFdmFzX0Nvb3JkIGN5LCBFdmFz
X0Nvb3JkICpvZmZ4LCBFdmFzX0Nvb3JkICpvZmZ5KQorc3RhdGljIEVpbmFfQm9vbCBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfem9vbV9zZXRfaW50ZXJuYWwoRXdrX1RpbGVkX0JhY2tpbmdfU3Rv
cmVfRGF0YSogcHJpdiwgZmxvYXQqIHpvb20sIEV2YXNfQ29vcmQgY3VycmVudFgsIEV2YXNfQ29v
cmQgY3VycmVudFksIEV2YXNfQ29vcmQqIG9mZnNldFgsIEV2YXNfQ29vcmQqIG9mZnNldFkpCiB7
Ci0gICAgKm9mZnggPSBwcml2LT52aWV3Lm9mZnNldC5jdXIueDsKLSAgICAqb2ZmeSA9IHByaXYt
PnZpZXcub2Zmc2V0LmN1ci55OworICAgICpvZmZzZXRYID0gcHJpdi0+dmlldy5vZmZzZXQuY3Vy
Lng7CisgICAgKm9mZnNldFkgPSBwcml2LT52aWV3Lm9mZnNldC5jdXIueTsKIAogICAgIGlmIChm
YWJzZihwcml2LT52aWV3LnRpbGUuem9vbSAtICp6b29tKSA8IFpPT01fU1RFUF9NSU4pIHsKICAg
ICAgICAgREJHKCJpZ25vcmVkIGFzIHpvb20gZGlmZmVyZW5jZSBpcyA8ICVmOiAlZiIsCkBAIC0x
NDgxLDQyICsxNDc0LDQyIEBAIHN0YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX3pvb21fc2V0X2ludGVybmFsKEV3a19UaWxlZF9CYWNraW5nX1N0CiAgICAgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9mbHVzaChwcml2KTsKICAgICBFdmFz
X0Nvb3JkIHR3LCB0aDsKIAotICAgICp6b29tID0gUk9VTkRFRF9aT09NKHByaXYtPnZpZXcudGls
ZS53LCAqem9vbSk7CisgICAgKnpvb20gPSBST1VOREVEX1pPT00ocHJpdi0+dmlldy50aWxlLndp
ZHRoLCAqem9vbSk7CiAKLSAgICB0dyA9IHByaXYtPnZpZXcudGlsZS53OwotICAgIHRoID0gcHJp
di0+dmlldy50aWxlLmg7CisgICAgdHcgPSBwcml2LT52aWV3LnRpbGUud2lkdGg7CisgICAgdGgg
PSBwcml2LT52aWV3LnRpbGUuaGVpZ2h0OwogCiAgICAgZmxvYXQgc2NhbGUgPSAqem9vbSAvIHBy
aXYtPnZpZXcudGlsZS56b29tOwogCiAgICAgcHJpdi0+dmlldy50aWxlLnpvb20gPSAqem9vbTsK
LSAgICAvLyB0b2RvOiBjaGVjayBjeCBbMCwgd10uLi4KLSAgICBwcml2LT52aWV3Lm9mZnNldC56
b29tX2NlbnRlci54ID0gY3g7Ci0gICAgcHJpdi0+dmlldy5vZmZzZXQuem9vbV9jZW50ZXIueSA9
IGN5OworICAgIC8vIHRvZG86IGNoZWNrIGN1cnJlbnRYIFswLCB3XS4uLgorICAgIHByaXYtPnZp
ZXcub2Zmc2V0Lnpvb21fY2VudGVyLnggPSBjdXJyZW50WDsKKyAgICBwcml2LT52aWV3Lm9mZnNl
dC56b29tX2NlbnRlci55ID0gY3VycmVudFk7CiAKIAotICAgIGlmICghcHJpdi0+dmlldy53IHx8
ICFwcml2LT52aWV3LmgpIHsKKyAgICBpZiAoIXByaXYtPnZpZXcud2lkdGggfHwgIXByaXYtPnZp
ZXcuaGVpZ2h0KSB7CiAgICAgICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCA9IDA7CiAgICAg
ICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSA9IDA7CiAgICAgICAgIHJldHVybiBFSU5BX1RS
VUU7CiAgICAgfQotICAgIEVpbmFfSW5saXN0ICoqaXRyLCAqKml0cl9lbmQ7Ci0gICAgRXdrX1Rp
bGVkX0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQ7CisgICAgRWluYV9Jbmxpc3QqKiBpdHIsICoqaXRy
X2VuZDsKKyAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKiBpdDsKIAotICAgIEV2YXNf
Q29vcmQgbmV3X3ggPSBjeCArIChwcml2LT52aWV3Lm9mZnNldC5jdXIueCAtIGN4KSAqIHNjYWxl
OwotICAgIEV2YXNfQ29vcmQgbmV3X3kgPSBjeSArIChwcml2LT52aWV3Lm9mZnNldC5jdXIueSAt
IGN5KSAqIHNjYWxlOworICAgIEV2YXNfQ29vcmQgbmV3X3ggPSBjdXJyZW50WCArIChwcml2LT52
aWV3Lm9mZnNldC5jdXIueCAtIGN1cnJlbnRYKSAqIHNjYWxlOworICAgIEV2YXNfQ29vcmQgbmV3
X3kgPSBjdXJyZW50WSArIChwcml2LT52aWV3Lm9mZnNldC5jdXIueSAtIGN1cnJlbnRZKSAqIHNj
YWxlOwogCi0gICAgRXZhc19Db29yZCBtb2RlbF93aWR0aCA9IHByaXYtPm1vZGVsLndpZHRoICog
c2NhbGU7Ci0gICAgRXZhc19Db29yZCBtb2RlbF9oZWlnaHQgPSBwcml2LT5tb2RlbC5oZWlnaHQg
KiBzY2FsZTsKKyAgICBFdmFzX0Nvb3JkIG1vZGVsX3cgPSBwcml2LT5tb2RlbC53aWR0aCAqIHNj
YWxlOworICAgIEV2YXNfQ29vcmQgbW9kZWxfaCA9IHByaXYtPm1vZGVsLmhlaWdodCAqIHNjYWxl
OwogCi0gICAgaWYgKG1vZGVsX3dpZHRoIDwgcHJpdi0+dmlldy53IHx8IG5ld194ID49IDApCisg
ICAgaWYgKG1vZGVsX3cgPCBwcml2LT52aWV3LndpZHRoIHx8IG5ld194ID49IDApCiAgICAgICAg
IG5ld194ID0gMDsKLSAgICBlbHNlIGlmICgtbmV3X3ggKyBwcml2LT52aWV3LncgPj0gbW9kZWxf
d2lkdGgpCi0gICAgICAgIG5ld194ID0gLW1vZGVsX3dpZHRoICsgcHJpdi0+dmlldy53OworICAg
IGVsc2UgaWYgKC1uZXdfeCArIHByaXYtPnZpZXcud2lkdGggPj0gbW9kZWxfdykKKyAgICAgICAg
bmV3X3ggPSAtbW9kZWxfdyArIHByaXYtPnZpZXcud2lkdGg7CiAKLSAgICBpZiAobW9kZWxfaGVp
Z2h0IDwgcHJpdi0+dmlldy5oIHx8IG5ld195ID49IDApCisgICAgaWYgKG1vZGVsX2ggPCBwcml2
LT52aWV3LmhlaWdodCB8fCBuZXdfeSA+PSAwKQogICAgICAgICBuZXdfeSA9IDA7Ci0gICAgZWxz
ZSBpZiAoLW5ld195ICsgcHJpdi0+dmlldy5oID49IG1vZGVsX2hlaWdodCkKLSAgICAgICAgbmV3
X3kgPSAtbW9kZWxfaGVpZ2h0ICsgcHJpdi0+dmlldy5oOworICAgIGVsc2UgaWYgKC1uZXdfeSAr
IHByaXYtPnZpZXcuaGVpZ2h0ID49IG1vZGVsX2gpCisgICAgICAgIG5ld195ID0gLW1vZGVsX2gg
KyBwcml2LT52aWV3LmhlaWdodDsKIAogICAgIEV2YXNfQ29vcmQgYnggPSBuZXdfeCAlIHR3Owog
ICAgIEV2YXNfQ29vcmQgYnkgPSBuZXdfeSAlIHRoOwpAQCAtMTUzNCw4ICsxNTI3LDggQEAgc3Rh
dGljIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfem9vbV9zZXRfaW50ZXJuYWwo
RXdrX1RpbGVkX0JhY2tpbmdfU3QKIAogICAgIHByaXYtPnZpZXcub2Zmc2V0Lm9sZC54ID0gcHJp
di0+dmlldy5vZmZzZXQuY3VyLng7CiAgICAgcHJpdi0+dmlldy5vZmZzZXQub2xkLnkgPSBwcml2
LT52aWV3Lm9mZnNldC5jdXIueTsKLSAgICAqb2ZmeCA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci54
OwotICAgICpvZmZ5ID0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLnk7CisgICAgKm9mZnNldFggPSBw
cml2LT52aWV3Lm9mZnNldC5jdXIueDsKKyAgICAqb2Zmc2V0WSA9IHByaXYtPnZpZXcub2Zmc2V0
LmN1ci55OwogCiAgICAgZXZhc19vYmplY3RfbW92ZSgKICAgICAgICAgcHJpdi0+Y29udGVudHNf
Y2xpcHBlciwKQEAgLTE1NTIsNyArMTU0NSw3IEBAIHN0YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX3pvb21fc2V0X2ludGVybmFsKEV3a19UaWxlZF9CYWNraW5nX1N0CiAK
ICAgICBmb3IgKDsgaXRyIDwgaXRyX2VuZDsgaXRyKyspIHsKICAgICAgICAgRXZhc19Db29yZCBv
eCA9IGJhc2Vfb3g7Ci0gICAgICAgIEVpbmFfSW5saXN0ICpsc3QgPSAqaXRyOworICAgICAgICBF
aW5hX0lubGlzdCogbHN0ID0gKml0cjsKIAogICAgICAgICBFSU5BX0lOTElTVF9GT1JFQUNIKGxz
dCwgaXQpIHsKICAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX21vdmUo
aXQsIG94LCBveSk7CkBAIC0xNTY1LDQyICsxNTU4LDQyIEBAIHN0YXRpYyBFaW5hX0Jvb2wgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX3pvb21fc2V0X2ludGVybmFsKEV3a19UaWxlZF9CYWNraW5n
X1N0CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotRWluYV9Cb29sIGV3a190aWxlZF9iYWNr
aW5nX3N0b3JlX3pvb21fc2V0KEV2YXNfT2JqZWN0ICpvLCBmbG9hdCAqem9vbSwgRXZhc19Db29y
ZCBjeCwgRXZhc19Db29yZCBjeSwgRXZhc19Db29yZCAqb2ZmeCwgRXZhc19Db29yZCAqb2ZmeSkK
K0VpbmFfQm9vbCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV96b29tX3NldChFdmFzX09iamVjdCog
ZXdrVGlsZSwgZmxvYXQqIHpvb20sIEV2YXNfQ29vcmQgY3VycmVudFgsIEV2YXNfQ29vcmQgY3Vy
cmVudFksIEV2YXNfQ29vcmQqIG9mZnNldFgsIEV2YXNfQ29vcmQqIG9mZnNldFkpCiB7Ci0gICAg
REJHKCJvPSVwLCB6b29tPSVmIiwgbywgKGRvdWJsZSkqem9vbSk7CisgICAgREJHKCJvPSVwLCB6
b29tPSVmIiwgZXdrVGlsZSwgKnpvb20pOwogCi0gICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4o
bywgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4oZXdrVGls
ZSwgcHJpdiwgRUlOQV9GQUxTRSk7CiAKLSAgICByZXR1cm4gX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX3pvb21fc2V0X2ludGVybmFsKHByaXYsIHpvb20sIGN4LCBjeSwgb2ZmeCwgb2ZmeSk7Cisg
ICAgcmV0dXJuIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV96b29tX3NldF9pbnRlcm5hbChwcml2
LCB6b29tLCBjdXJyZW50WCwgY3VycmVudFksIG9mZnNldFgsIG9mZnNldFkpOwogfQogCi1FaW5h
X0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfem9vbV93ZWFrX3NldChFdmFzX09iamVjdCAq
bywgZmxvYXQgem9vbSwgRXZhc19Db29yZCBjeCwgRXZhc19Db29yZCBjeSkKK0VpbmFfQm9vbCBl
d2tfdGlsZWRfYmFja2luZ19zdG9yZV96b29tX3dlYWtfc2V0KEV2YXNfT2JqZWN0KiBld2tUaWxl
LCBmbG9hdCB6b29tLCBFdmFzX0Nvb3JkIGN1cnJlbnRYLCBFdmFzX0Nvb3JkIGN1cnJlbnRZKQog
ewotICAgIERCRygibz0lcCwgem9vbT0lZiIsIG8sIChkb3VibGUpem9vbSk7Ci0gICAgUFJJVl9E
QVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdiwgRUlOQV9GQUxTRSk7Ci0gICAgaWYgKCFwcml2LT52
aWV3LncgfHwgIXByaXYtPnZpZXcuaCkKKyAgICBEQkcoIm89JXAsIHpvb209JWYiLCBld2tUaWxl
LCB6b29tKTsKKyAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihld2tUaWxlLCBwcml2LCBFSU5B
X0ZBTFNFKTsKKyAgICBpZiAoIXByaXYtPnZpZXcud2lkdGggfHwgIXByaXYtPnZpZXcuaGVpZ2h0
KQogICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKLSAgICBFaW5hX0lubGlzdCAqKml0ciwgKipp
dHJfZW5kOwotICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gKml0OworICAgIEVpbmFf
SW5saXN0KiogaXRyLCAqKiBpdHJfZW5kOworICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0
ZW0qIGl0OwogICAgIEV2YXNfQ29vcmQgdHcsIHRoOwogICAgIEVpbmFfQm9vbCByZWNhbGMgPSBF
SU5BX0ZBTFNFOwogCiAgICAgZmxvYXQgc2NhbGUgPSB6b29tIC8gcHJpdi0+dmlldy50aWxlLnpv
b207CiAKLSAgICB0dyA9IFRJTEVfU0laRV9BVF9aT09NKHByaXYtPnZpZXcudGlsZS53LCBzY2Fs
ZSk7Ci0gICAgc2NhbGUgPSBUSUxFX1pPT01fQVRfU0laRSh0dywgcHJpdi0+dmlldy50aWxlLncp
OwotICAgIHRoID0gVElMRV9TSVpFX0FUX1pPT00ocHJpdi0+dmlldy50aWxlLmgsIHNjYWxlKTsK
KyAgICB0dyA9IFRJTEVfU0laRV9BVF9aT09NKHByaXYtPnZpZXcudGlsZS53aWR0aCwgc2NhbGUp
OworICAgIHNjYWxlID0gVElMRV9aT09NX0FUX1NJWkUodHcsIHByaXYtPnZpZXcudGlsZS53aWR0
aCk7CisgICAgdGggPSBUSUxFX1NJWkVfQVRfWk9PTShwcml2LT52aWV3LnRpbGUuaGVpZ2h0LCBz
Y2FsZSk7CiAgICAgem9vbSA9IHNjYWxlICogcHJpdi0+dmlldy50aWxlLnpvb207CiAKLSAgICBF
dmFzX0Nvb3JkIG1vZGVsX3dpZHRoID0gcHJpdi0+bW9kZWwud2lkdGggKiBzY2FsZTsKLSAgICBF
dmFzX0Nvb3JkIG1vZGVsX2hlaWdodCA9IHByaXYtPm1vZGVsLmhlaWdodCAqIHNjYWxlOworICAg
IEV2YXNfQ29vcmQgbW9kZWxfdyA9IHByaXYtPm1vZGVsLndpZHRoICogc2NhbGU7CisgICAgRXZh
c19Db29yZCBtb2RlbF9oID0gcHJpdi0+bW9kZWwuaGVpZ2h0ICogc2NhbGU7CiAKLSAgICBldmFz
X29iamVjdF9yZXNpemUocHJpdi0+Y29udGVudHNfY2xpcHBlciwgbW9kZWxfd2lkdGgsIG1vZGVs
X2hlaWdodCk7CisgICAgZXZhc19vYmplY3RfcmVzaXplKHByaXYtPmNvbnRlbnRzX2NsaXBwZXIs
IG1vZGVsX3csIG1vZGVsX2gpOwogCi0gICAgaW50IHZyb3dzID0gY2VpbCgoZmxvYXQpcHJpdi0+
dmlldy5oIC8gKGZsb2F0KXRoKSArIDE7Ci0gICAgaW50IHZjb2xzID0gY2VpbCgoZmxvYXQpcHJp
di0+dmlldy53IC8gKGZsb2F0KXR3KSArIDE7Ci0gICAgRXZhc19Db29yZCBuZXdfeCA9IGN4ICsg
KHByaXYtPnZpZXcub2Zmc2V0LmN1ci54IC0gY3gpICogc2NhbGU7Ci0gICAgRXZhc19Db29yZCBu
ZXdfeSA9IGN5ICsgKHByaXYtPnZpZXcub2Zmc2V0LmN1ci55IC0gY3kpICogc2NhbGU7CisgICAg
aW50IHZyb3dzID0gc3RhdGljX2Nhc3Q8aW50PihjZWlsKHN0YXRpY19jYXN0PGZsb2F0Pihwcml2
LT52aWV3LmhlaWdodCAvIHRoKSkgKyAxKTsKKyAgICBpbnQgdmNvbHMgPSBzdGF0aWNfY2FzdDxp
bnQ+KGNlaWwoc3RhdGljX2Nhc3Q8ZmxvYXQ+KHByaXYtPnZpZXcud2lkdGggLyB0dykpICsgMSk7
CisgICAgRXZhc19Db29yZCBuZXdfeCA9IGN1cnJlbnRYICsgKHByaXYtPnZpZXcub2Zmc2V0LmN1
ci54IC0gY3VycmVudFgpICogc2NhbGU7CisgICAgRXZhc19Db29yZCBuZXdfeSA9IGN1cnJlbnRZ
ICsgKHByaXYtPnZpZXcub2Zmc2V0LmN1ci55IC0gY3VycmVudFkpICogc2NhbGU7CiAgICAgRXZh
c19Db29yZCBieCA9IG5ld194ICUgdHc7CiAgICAgRXZhc19Db29yZCBieSA9IG5ld195ICUgdGg7
CiAgICAgdW5zaWduZWQgbG9uZyBiYXNlX3JvdyA9IC1uZXdfeSAvIHRoOwpAQCAtMTYxNiw5ICsx
NjA5LDkgQEAgRWluYV9Cb29sIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3pvb21fd2Vha19zZXQo
RXZhc19PYmplY3QgKm8sIGZsb2F0IHpvb20sIEV2YXMKICAgICAgICAgcmVjYWxjID0gRUlOQV9U
UlVFOwogCiAgICAgaWYgKHJlY2FsYykgewotICAgICAgICBFdmFzX0Nvb3JkIHcsIGg7Ci0gICAg
ICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldChvLCAwLCAwLCAmdywgJmgpOwotICAgICAgICBf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcmVjYWxjX3JlbmRlcmVycyhwcml2LCB3LCBoLCB0dywg
dGgpOworICAgICAgICBFdmFzX0Nvb3JkIHdpZHRoLCBoZWlnaHQ7CisgICAgICAgIGV2YXNfb2Jq
ZWN0X2dlb21ldHJ5X2dldChld2tUaWxlLCAwLCAwLCAmd2lkdGgsICZoZWlnaHQpOworICAgICAg
ICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcmVjYWxjX3JlbmRlcmVycyhwcml2LCB3aWR0aCwg
aGVpZ2h0LCB0dywgdGgpOwogICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZmlsbF9y
ZW5kZXJlcnMocHJpdik7CiAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV91cGRhdGVz
X3Byb2Nlc3MocHJpdik7CiAgICAgfQpAQCAtMTYzNSw3ICsxNjI4LDcgQEAgRWluYV9Cb29sIGV3
a190aWxlZF9iYWNraW5nX3N0b3JlX3pvb21fd2Vha19zZXQoRXZhc19PYmplY3QgKm8sIGZsb2F0
IHpvb20sIEV2YXMKIAogICAgIGZvciAoOyBpdHIgPCBpdHJfZW5kOyBpdHIrKykgewogICAgICAg
ICBFdmFzX0Nvb3JkIG94ID0gYmFzZV9veDsKLSAgICAgICAgRWluYV9Jbmxpc3QgKmxzdCA9ICpp
dHI7CisgICAgICAgIEVpbmFfSW5saXN0KiBsc3QgPSAqaXRyOwogCiAgICAgICAgIEVJTkFfSU5M
SVNUX0ZPUkVBQ0gobHN0LCBpdCkgewogICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX2l0ZW1fbW92ZShpdCwgb3gsIG95KTsKQEAgLTE2NDgsMzYgKzE2NDEsMzYgQEAgRWluYV9C
b29sIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3pvb21fd2Vha19zZXQoRXZhc19PYmplY3QgKm8s
IGZsb2F0IHpvb20sIEV2YXMKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi12b2lkIGV3a190
aWxlZF9iYWNraW5nX3N0b3JlX2ZpeF9vZmZzZXRzKEV2YXNfT2JqZWN0ICpvLCBFdmFzX0Nvb3Jk
IHcsIEV2YXNfQ29vcmQgaCkKK3ZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZml4X29mZnNl
dHMoRXZhc19PYmplY3QqIGV3a1RpbGUsIEV2YXNfQ29vcmQgd2lkdGgsIEV2YXNfQ29vcmQgaGVp
Z2h0KQogewotICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYpOwotICAgIEVpbmFf
SW5saXN0ICoqaXRyLCAqKml0cl9lbmQ7Ci0gICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRl
bSAqaXQ7CisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4oZXdrVGlsZSwgcHJpdik7CisgICAg
RWluYV9Jbmxpc3QqKiBpdHIsICoqaXRyX2VuZDsKKyAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9y
ZV9JdGVtKiBpdDsKICAgICBFdmFzX0Nvb3JkIG5ld194ID0gcHJpdi0+dmlldy5vZmZzZXQuY3Vy
Lng7CiAgICAgRXZhc19Db29yZCBuZXdfeSA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci55OwogICAg
IEV2YXNfQ29vcmQgYnggPSBwcml2LT52aWV3Lm9mZnNldC5iYXNlLng7CiAgICAgRXZhc19Db29y
ZCBieSA9IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueTsKLSAgICBFdmFzX0Nvb3JkIHR3ID0gcHJp
di0+dmlldy50aWxlLnc7Ci0gICAgRXZhc19Db29yZCB0aCA9IHByaXYtPnZpZXcudGlsZS5oOwor
ICAgIEV2YXNfQ29vcmQgdHcgPSBwcml2LT52aWV3LnRpbGUud2lkdGg7CisgICAgRXZhc19Db29y
ZCB0aCA9IHByaXYtPnZpZXcudGlsZS5oZWlnaHQ7CiAKLSAgICBpZiAoLW5ld194ID4gdykgewot
ICAgICAgICBuZXdfeCA9IC13OworICAgIGlmICgtbmV3X3ggPiB3aWR0aCkgeworICAgICAgICBu
ZXdfeCA9IC13aWR0aDsKICAgICAgICAgYnggPSBuZXdfeCAlIHR3OwogICAgICAgICBwcml2LT5t
b2RlbC5iYXNlLmNvbCA9IC1uZXdfeCAvIHR3OwogICAgIH0KIAotICAgIGlmICgtbmV3X3kgPiBo
KSB7Ci0gICAgICAgIG5ld195ID0gLWg7CisgICAgaWYgKC1uZXdfeSA+IGhlaWdodCkgeworICAg
ICAgICBuZXdfeSA9IC1oZWlnaHQ7CiAgICAgICAgIGJ5ID0gbmV3X3kgJSB0aDsKICAgICAgICAg
cHJpdi0+bW9kZWwuYmFzZS5yb3cgPSAtbmV3X3kgLyB0aDsKICAgICB9CiAKLSAgICBpZiAoYngg
Pj0gMCB8fCBieCA8PSAtMiAqIHByaXYtPnZpZXcudGlsZS53KSB7CisgICAgaWYgKGJ4ID49IDAg
fHwgYnggPD0gLTIgKiBwcml2LT52aWV3LnRpbGUud2lkdGgpIHsKICAgICAgICAgYnggPSBuZXdf
eCAlIHR3OwogICAgICAgICBwcml2LT5tb2RlbC5iYXNlLmNvbCA9IC1uZXdfeCAvIHR3OwogICAg
IH0KIAotICAgIGlmIChieSA+PSAwIHx8IGJ5IDw9IC0yICogcHJpdi0+dmlldy50aWxlLmgpIHsK
KyAgICBpZiAoYnkgPj0gMCB8fCBieSA8PSAtMiAqIHByaXYtPnZpZXcudGlsZS5oZWlnaHQpIHsK
ICAgICAgICAgYnkgPSBuZXdfeSAlIHRoOwogICAgICAgICBwcml2LT5tb2RlbC5iYXNlLnJvdyA9
IC1uZXdfeSAvIHRoOwogICAgIH0KQEAgLTE3MDAsNyArMTY5Myw3IEBAIHZvaWQgZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfZml4X29mZnNldHMoRXZhc19PYmplY3QgKm8sIEV2YXNfQ29vcmQgdywg
RXZhc19Db29yCiAKICAgICBmb3IgKDsgaXRyIDwgaXRyX2VuZDsgaXRyKyspIHsKICAgICAgICAg
RXZhc19Db29yZCBveCA9IGJhc2Vfb3g7Ci0gICAgICAgIEVpbmFfSW5saXN0ICpsc3QgPSAqaXRy
OworICAgICAgICBFaW5hX0lubGlzdCogbHN0ID0gKml0cjsKIAogICAgICAgICBFSU5BX0lOTElT
VF9GT1JFQUNIKGxzdCwgaXQpIHsKICAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV9pdGVtX21vdmUoaXQsIG94LCBveSk7CkBAIC0xNzExLDI3ICsxNzA0LDI3IEBAIHZvaWQgZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfZml4X29mZnNldHMoRXZhc19PYmplY3QgKm8sIEV2YXNfQ29v
cmQgdywgRXZhc19Db29yCiAgICAgfQogfQogCi12b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3pvb21fd2Vha19zbW9vdGhfc2NhbGVfc2V0KEV2YXNfT2JqZWN0ICpvLCBFaW5hX0Jvb2wgc21v
b3RoX3NjYWxlKQordm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV96b29tX3dlYWtfc21vb3Ro
X3NjYWxlX3NldChFdmFzX09iamVjdCogZXdrVGlsZSwgRWluYV9Cb29sIHNtb290aFNjYWxlKQog
ewotICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYpOwotICAgIEVpbmFfSW5saXN0
ICoqaXRyLCAqKml0cl9lbmQ7CisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4oZXdrVGlsZSwg
cHJpdik7CisgICAgRWluYV9Jbmxpc3QqKiBpdHIsICoqaXRyX2VuZDsKIAogICAgIGl0ciA9IHBy
aXYtPnZpZXcuaXRlbXM7CiAgICAgaXRyX2VuZCA9IGl0ciArIHByaXYtPnZpZXcucm93czsKLSAg
ICBwcml2LT52aWV3LnRpbGUuem9vbV93ZWFrX3Ntb290aF9zY2FsZSA9IHNtb290aF9zY2FsZTsK
KyAgICBwcml2LT52aWV3LnRpbGUuem9vbV93ZWFrX3Ntb290aF9zY2FsZSA9IHNtb290aFNjYWxl
OwogCiAgICAgZm9yICg7IGl0cjwgaXRyX2VuZDsgaXRyKyspIHsKLSAgICAgICAgRXdrX1RpbGVk
X0JhY2tpbmdfU3RvcmVfSXRlbSAqaXQ7CisgICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3Jl
X0l0ZW0qIGl0OwogICAgICAgICBFSU5BX0lOTElTVF9GT1JFQUNIKCppdHIsIGl0KQogICAgICAg
ICAgICAgaWYgKGl0LT50aWxlKQogICAgICAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9pdGVtX3Ntb290aF9zY2FsZV9zZXQKLSAgICAgICAgICAgICAgICAgICAgKGl0LCBzbW9v
dGhfc2NhbGUpOworICAgICAgICAgICAgICAgICAgICAoaXQsIHNtb290aFNjYWxlKTsKICAgICB9
CiB9CiAKLUVpbmFfQm9vbCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV91cGRhdGUoRXZhc19PYmpl
Y3QgKm8sIGNvbnN0IEVpbmFfUmVjdGFuZ2xlICp1cGRhdGUpCitFaW5hX0Jvb2wgZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfdXBkYXRlKEV2YXNfT2JqZWN0KiBld2tUaWxlLCBjb25zdCBFaW5hX1Jl
Y3RhbmdsZSogdXBkYXRlKQogewotICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYs
IEVJTkFfRkFMU0UpOworICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKGV3a1RpbGUsIHByaXYs
IEVJTkFfRkFMU0UpOwogCiAgICAgaWYgKHByaXYtPnJlbmRlci5kaXNhYmxlZCkKICAgICAgICAg
cmV0dXJuIEVJTkFfRkFMU0U7CkBAIC0xNzQwLDM2ICsxNzMzLDM2IEBAIEVpbmFfQm9vbCBld2tf
dGlsZWRfYmFja2luZ19zdG9yZV91cGRhdGUoRXZhc19PYmplY3QgKm8sIGNvbnN0IEVpbmFfUmVj
dGFuZ2xlICp1CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpdi0+dmlldy50
aWxlLnpvb20pOwogfQogCi12b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3VwZGF0ZXNfcHJv
Y2Vzc19wcmVfc2V0KEV2YXNfT2JqZWN0ICpvLCB2b2lkICooKmNiKSh2b2lkICpkYXRhLCBFdmFz
X09iamVjdCAqbyksIGNvbnN0IHZvaWQgKmRhdGEpCit2b2lkIGV3a190aWxlZF9iYWNraW5nX3N0
b3JlX3VwZGF0ZXNfcHJvY2Vzc19wcmVfc2V0KEV2YXNfT2JqZWN0KiBld2tUaWxlLCB2b2lkKiAo
KmNhbGxiYWNrKSh2b2lkKiBkYXRhLCBFdmFzX09iamVjdCAqZXdrVGlsZSksIGNvbnN0IHZvaWQq
IGRhdGEpCiB7Ci0gICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdik7Ci0gICAgcHJp
di0+cHJvY2Vzcy5wcmVfY2IgPSBjYjsKKyAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihld2tU
aWxlLCBwcml2KTsKKyAgICBwcml2LT5wcm9jZXNzLnByZV9jYiA9IGNhbGxiYWNrOwogICAgIHBy
aXYtPnByb2Nlc3MucHJlX2RhdGEgPSAodm9pZCopZGF0YTsKIH0KIAotdm9pZCBld2tfdGlsZWRf
YmFja2luZ19zdG9yZV91cGRhdGVzX3Byb2Nlc3NfcG9zdF9zZXQoRXZhc19PYmplY3QgKm8sIHZv
aWQgKigqY2IpKHZvaWQgKmRhdGEsIHZvaWQgKnByZV9kYXRhLCBFdmFzX09iamVjdCAqbyksIGNv
bnN0IHZvaWQgKmRhdGEpCit2b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3VwZGF0ZXNfcHJv
Y2Vzc19wb3N0X3NldChFdmFzX09iamVjdCogZXdrVGlsZSwgdm9pZCogKCpjYWxsYmFjaykodm9p
ZCogZGF0YSwgdm9pZCogcHJlX2RhdGEsIEV2YXNfT2JqZWN0ICpld2tUaWxlKSwgY29uc3Qgdm9p
ZCogZGF0YSkKIHsKLSAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2KTsKLSAgICBw
cml2LT5wcm9jZXNzLnBvc3RfY2IgPSBjYjsKKyAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihl
d2tUaWxlLCBwcml2KTsKKyAgICBwcml2LT5wcm9jZXNzLnBvc3RfY2IgPSBjYWxsYmFjazsKICAg
ICBwcml2LT5wcm9jZXNzLnBvc3RfZGF0YSA9ICh2b2lkKilkYXRhOwogfQogCi12b2lkIGV3a190
aWxlZF9iYWNraW5nX3N0b3JlX3VwZGF0ZXNfcHJvY2VzcyhFdmFzX09iamVjdCAqbykKK3ZvaWQg
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRlc19wcm9jZXNzKEV2YXNfT2JqZWN0KiBld2tU
aWxlKQogewotICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHByaXYpOworICAgIFBSSVZf
REFUQV9HRVRfT1JfUkVUVVJOKGV3a1RpbGUsIHByaXYpOwogICAgIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV91cGRhdGVzX3Byb2Nlc3MocHJpdik7CiB9CiAKLXZvaWQgZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfdXBkYXRlc19jbGVhcihFdmFzX09iamVjdCAqbykKK3ZvaWQgZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfdXBkYXRlc19jbGVhcihFdmFzX09iamVjdCogZXdrVGlsZSkKIHsKLSAgICBQ
UklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2KTsKKyAgICBQUklWX0RBVEFfR0VUX09SX1JF
VFVSTihld2tUaWxlLCBwcml2KTsKIAogICAgIGV3a190aWxlX21hdHJpeF91cGRhdGVzX2NsZWFy
KHByaXYtPm1vZGVsLm1hdHJpeCk7CiB9CiAKLXZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
Y29udGVudHNfcmVzaXplKEV2YXNfT2JqZWN0ICpvLCBFdmFzX0Nvb3JkIHdpZHRoLCBFdmFzX0Nv
b3JkIGhlaWdodCkKK3ZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfY29udGVudHNfcmVzaXpl
KEV2YXNfT2JqZWN0KiBld2tUaWxlLCBFdmFzX0Nvb3JkIHdpZHRoLCBFdmFzX0Nvb3JkIGhlaWdo
dCkKIHsKLSAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvLCBwcml2KTsKKyAgICBQUklWX0RB
VEFfR0VUX09SX1JFVFVSTihld2tUaWxlLCBwcml2KTsKIAogICAgIGlmICh3aWR0aCA9PSBwcml2
LT5tb2RlbC53aWR0aCAmJiBoZWlnaHQgPT0gcHJpdi0+bW9kZWwuaGVpZ2h0KQogICAgICAgICBy
ZXR1cm47CkBAIC0xNzc4LDIyICsxNzcxLDIyIEBAIHZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfY29udGVudHNfcmVzaXplKEV2YXNfT2JqZWN0ICpvLCBFdmFzX0Nvb3JkIHdpZHRoLCBFCiAg
ICAgcHJpdi0+bW9kZWwuaGVpZ2h0ID0gaGVpZ2h0OwogICAgIHByaXYtPmNoYW5nZWQubW9kZWwg
PSBFSU5BX1RSVUU7CiAKLSAgICBEQkcoIndpZHRoLGhlaWdodD0lZCwgJWQiLCB3aWR0aCwgaGVp
Z2h0KTsKKyAgICBEQkcoIncsaD0lZCwgJWQiLCB3aWR0aCwgaGVpZ2h0KTsKICAgICBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfY2hhbmdlZChwcml2KTsKIH0KIAotdm9pZCBld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9kaXNhYmxlZF91cGRhdGVfc2V0KEV2YXNfT2JqZWN0ICpvLCBFaW5hX0Jvb2wg
dmFsdWUpCit2b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX2Rpc2FibGVkX3VwZGF0ZV9zZXQo
RXZhc19PYmplY3QqIGV3a1RpbGUsIEVpbmFfQm9vbCB2YWx1ZSkKIHsKLSAgICBQUklWX0RBVEFf
R0VUX09SX1JFVFVSTihvLCBwcml2KTsKKyAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihld2tU
aWxlLCBwcml2KTsKIAogICAgIGlmICh2YWx1ZSAhPSBwcml2LT5yZW5kZXIuZGlzYWJsZWQpCiAg
ICAgICAgIHByaXYtPnJlbmRlci5kaXNhYmxlZCA9IHZhbHVlOwogfQogCi12b2lkIGV3a190aWxl
ZF9iYWNraW5nX3N0b3JlX2ZsdXNoKEV2YXNfT2JqZWN0ICpvKQordm9pZCBld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9mbHVzaChFdmFzX09iamVjdCogZXdrVGlsZSkKIHsKLSAgICBQUklWX0RBVEFf
R0VUX09SX1JFVFVSTihvLCBwcml2KTsKLSAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YyA9
IDA7CisgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4oZXdrVGlsZSwgcHJpdik7CisgICAgRXdr
X1RpbGVfVW51c2VkX0NhY2hlKiB0dWMgPSAwOwogCiAgICAgcHJpdi0+dmlldy5vZmZzZXQuY3Vy
LnggPSAwOwogICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1ci55ID0gMDsKQEAgLTE4MjUsMjEgKzE4
MTgsMjEgQEAgdm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9mbHVzaChFdmFzX09iamVjdCAq
bykKICNlbmRpZgogfQogCi1FaW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3Jl
bmRlcl9yZWdpb24oRXZhc19PYmplY3QgKm8sIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5LCBF
dmFzX0Nvb3JkIHcsIEV2YXNfQ29vcmQgaCwgZmxvYXQgem9vbSkKK0VpbmFfQm9vbCBld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlZ2lvbihFdmFzX09iamVjdCogZXdrVGlsZSwg
RXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHksIEV2YXNfQ29vcmQgd2lkdGgsIEV2YXNfQ29vcmQg
aGVpZ2h0LCBmbG9hdCB6b29tKQogewotICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHBy
aXYsIEVJTkFfRkFMU0UpOworICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKGV3a1RpbGUsIHBy
aXYsIEVJTkFfRkFMU0UpOwogICAgIEVpbmFfVGlsZV9HcmlkX1NsaWNlciBzbGljZXI7Ci0gICAg
Y29uc3QgRWluYV9UaWxlX0dyaWRfSW5mbyAqaW5mbzsKKyAgICBjb25zdCBFaW5hX1RpbGVfR3Jp
ZF9JbmZvKiBpbmZvOwogICAgIEV2YXNfQ29vcmQgdHcsIHRoOwotICAgIEV3a19UaWxlX1VudXNl
ZF9DYWNoZSAqdHVjOworICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSogdHVjOwogCi0gICAgdHcg
PSBwcml2LT52aWV3LnRpbGUudzsKLSAgICB0aCA9IHByaXYtPnZpZXcudGlsZS5oOwotICAgIHpv
b20gPSBST1VOREVEX1pPT00ocHJpdi0+dmlldy50aWxlLncsIHpvb20pOworICAgIHR3ID0gcHJp
di0+dmlldy50aWxlLndpZHRoOworICAgIHRoID0gcHJpdi0+dmlldy50aWxlLmhlaWdodDsKKyAg
ICB6b29tID0gUk9VTkRFRF9aT09NKHByaXYtPnZpZXcudGlsZS53aWR0aCwgem9vbSk7CiAKLSAg
ICBpZiAoIWVpbmFfdGlsZV9ncmlkX3NsaWNlcl9zZXR1cCgmc2xpY2VyLCB4LCB5LCB3LCBoLCB0
dywgdGgpKSB7CisgICAgaWYgKCFlaW5hX3RpbGVfZ3JpZF9zbGljZXJfc2V0dXAoJnNsaWNlciwg
eCwgeSwgd2lkdGgsIGhlaWdodCwgdHcsIHRoKSkgewogICAgICAgICBFUlIoImNvdWxkIG5vdCBz
ZXR1cCBncmlkIHNsaWNlciBmb3IgJWQsJWQrJWR4JWQgdGlsZT0lZHglZCIsCi0gICAgICAgICAg
ICB4LCB5LCB3LCBoLCB0dywgdGgpOworICAgICAgICAgICAgeCwgeSwgd2lkdGgsIGhlaWdodCwg
dHcsIHRoKTsKICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CiAgICAgfQogCkBAIC0xODUzLDI5
ICsxODQ2LDI5IEBAIEVpbmFfQm9vbCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVy
X3JlZ2lvbihFdmFzX09iamVjdCAqbywgRXZhc19Db29yZCB4CiAgICAgX2V3a190aWxlZF9iYWNr
aW5nX3N0b3JlX2l0ZW1fcHJvY2Vzc19pZGxlcl9zdGFydChwcml2KTsKIAogICAgIHR1YyA9IGV3
a190aWxlX21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7Ci0gICAg
ZXdrX3RpbGVfdW51c2VkX2NhY2hlX2xvY2tfYXJlYSh0dWMsIHgsIHksIHcsIGgsIHpvb20pOwor
ICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9sb2NrX2FyZWEodHVjLCB4LCB5LCB3aWR0aCwgaGVp
Z2h0LCB6b29tKTsKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi1FaW5hX0Jvb2wgZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZWxhdGl2ZV9yYWRpdXMoRXZhc19PYmplY3Qg
Km8sIHVuc2lnbmVkIGludCBuLCBmbG9hdCB6b29tKQorRWluYV9Cb29sIGV3a190aWxlZF9iYWNr
aW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVsYXRpdmVfcmFkaXVzKEV2YXNfT2JqZWN0KiBld2tUaWxl
LCB1bnNpZ25lZCBpbnQgbiwgZmxvYXQgem9vbSkKIHsKLSAgICBQUklWX0RBVEFfR0VUX09SX1JF
VFVSTihvLCBwcml2LCBFSU5BX0ZBTFNFKTsKLSAgICB1bnNpZ25lZCBsb25nIHN0YXJ0X3Jvdywg
ZW5kX3Jvdywgc3RhcnRfY29sLCBlbmRfY29sLCBpLCBqLCB3LCBoOwotICAgIEV3a19UaWxlX1Vu
dXNlZF9DYWNoZSAqdHVjOworICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKGV3a1RpbGUsIHBy
aXYsIEVJTkFfRkFMU0UpOworICAgIHVuc2lnbmVkIGxvbmcgc3RhcnRfcm93LCBlbmRfcm93LCBz
dGFydF9jb2wsIGVuZF9jb2wsIGksIGosIHdpZHRoLCBoZWlnaHQ7CisgICAgRXdrX1RpbGVfVW51
c2VkX0NhY2hlKiB0dWM7CiAKICAgICBJTkYoInByaXYtPm1vZGVsLmJhc2Uucm93ID0lbGQsIG49
JXUgcHJpdi0+dmlldy5yb3dzPSVsdSIsCi0gICAgICAgICAgICBwcml2LT5tb2RlbC5iYXNlLnJv
dywgbiwgcHJpdi0+dmlldy5yb3dzKTsKKyAgICAgICAgcHJpdi0+bW9kZWwuYmFzZS5yb3csIG4s
IHByaXYtPnZpZXcucm93cyk7CiAgICAgc3RhcnRfcm93ID0gKGxvbmcpcHJpdi0+bW9kZWwuYmFz
ZS5yb3cgLSBuOwogICAgIHN0YXJ0X2NvbCA9IChsb25nKXByaXYtPm1vZGVsLmJhc2UuY29sIC0g
bjsKICAgICBlbmRfcm93ID0gc3RkOjptaW4ocHJpdi0+bW9kZWwuY3VyLnJvd3MgLSAxLAotICAg
ICAgICAgICAgICAgICAgcHJpdi0+bW9kZWwuYmFzZS5yb3cgKyBwcml2LT52aWV3LnJvd3MgKyBu
IC0gMSk7CisgICAgICAgICAgICAgICAgICAgICAgIHByaXYtPm1vZGVsLmJhc2Uucm93ICsgcHJp
di0+dmlldy5yb3dzICsgbiAtIDEpOwogICAgIGVuZF9jb2wgPSBzdGQ6Om1pbihwcml2LT5tb2Rl
bC5jdXIuY29scyAtIDEsCi0gICAgICAgICAgICAgICAgICBwcml2LT5tb2RlbC5iYXNlLmNvbCAr
IHByaXYtPnZpZXcuY29scyArIG4gLSAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgcHJpdi0+
bW9kZWwuYmFzZS5jb2wgKyBwcml2LT52aWV3LmNvbHMgKyBuIC0gMSk7CiAKICAgICBJTkYoInN0
YXJ0X3Jvdz0lbHUsIGVuZF9yb3c9JWx1LCBzdGFydF9jb2w9JWx1LCBlbmRfY29sPSVsdSIsCi0g
ICAgICAgICBzdGFydF9yb3csIGVuZF9yb3csIHN0YXJ0X2NvbCwgZW5kX2NvbCk7CisgICAgICAg
IHN0YXJ0X3JvdywgZW5kX3Jvdywgc3RhcnRfY29sLCBlbmRfY29sKTsKIAotICAgIHpvb20gPSBS
T1VOREVEX1pPT00ocHJpdi0+dmlldy50aWxlLncsIHpvb20pOworICAgIHpvb20gPSBST1VOREVE
X1pPT00ocHJpdi0+dmlldy50aWxlLndpZHRoLCB6b29tKTsKIAogICAgIGZvciAoaSA9IHN0YXJ0
X3JvdzsgaSA8PSBlbmRfcm93OyBpKyspCiAgICAgICAgIGZvciAoaiA9IHN0YXJ0X2NvbDsgaiA8
PSBlbmRfY29sOyBqKyspCkBAIC0xODg2LDE5ICsxODc5LDE5IEBAIHN0YXJ0X3Byb2Nlc3Npbmc6
CiAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcHJvY2Vzc19pZGxlcl9zdGFydChw
cml2KTsKIAogICAgIHR1YyA9IGV3a190aWxlX21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYt
Pm1vZGVsLm1hdHJpeCk7Ci0gICAgaCA9IChlbmRfcm93IC0gc3RhcnRfcm93ICsgMSkgKiBUSUxF
X1NJWkVfQVRfWk9PTShwcml2LT52aWV3LnRpbGUuaCwgem9vbSk7Ci0gICAgdyA9IChlbmRfY29s
IC0gc3RhcnRfY29sICsgMSkgKiBUSUxFX1NJWkVfQVRfWk9PTShwcml2LT52aWV3LnRpbGUudywg
em9vbSk7CisgICAgaGVpZ2h0ID0gKGVuZF9yb3cgLSBzdGFydF9yb3cgKyAxKSAqIFRJTEVfU0la
RV9BVF9aT09NKHByaXYtPnZpZXcudGlsZS5oZWlnaHQsIHpvb20pOworICAgIHdpZHRoID0gKGVu
ZF9jb2wgLSBzdGFydF9jb2wgKyAxKSAqIFRJTEVfU0laRV9BVF9aT09NKHByaXYtPnZpZXcudGls
ZS53aWR0aCwgem9vbSk7CiAgICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2xvY2tfYXJlYSh0dWMs
Ci0gICAgICAgICAgICBzdGFydF9jb2wgKiBUSUxFX1NJWkVfQVRfWk9PTShwcml2LT52aWV3LnRp
bGUudywgem9vbSksCi0gICAgICAgICAgICBzdGFydF9yb3cgKiBUSUxFX1NJWkVfQVRfWk9PTShw
cml2LT52aWV3LnRpbGUuaCwgem9vbSksIHcsIGgsIHpvb20pOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RhcnRfY29sICogVElMRV9TSVpFX0FUX1pPT00ocHJpdi0+dmll
dy50aWxlLndpZHRoLCB6b29tKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0YXJ0X3JvdyAqIFRJTEVfU0laRV9BVF9aT09NKHByaXYtPnZpZXcudGlsZS5oZWlnaHQsIHpv
b20pLCB3aWR0aCwgaGVpZ2h0LCB6b29tKTsKIAogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAK
LXZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9jYW5jZWwoRXZhc19PYmpl
Y3QgKm8pCit2b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfY2FuY2VsKEV2
YXNfT2JqZWN0KiBld2tUaWxlKQogewotICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKG8sIHBy
aXYpOwotICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjOworICAgIFBSSVZfREFUQV9HRVRf
T1JfUkVUVVJOKGV3a1RpbGUsIHByaXYpOworICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSogdHVj
OwogCiAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9jbGVh
cihwcml2KTsKIApAQCAtMTkwNiwxNSArMTg5OSwxNSBAQCB2b2lkIGV3a190aWxlZF9iYWNraW5n
X3N0b3JlX3ByZV9yZW5kZXJfY2FuY2VsKEV2YXNfT2JqZWN0ICpvKQogICAgIGV3a190aWxlX3Vu
dXNlZF9jYWNoZV91bmxvY2tfYXJlYSh0dWMpOwogfQogCi1FaW5hX0Jvb2wgZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfZGlzYWJsZV9yZW5kZXIoRXZhc19PYmplY3QgKm8pCitFaW5hX0Jvb2wgZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfZGlzYWJsZV9yZW5kZXIoRXZhc19PYmplY3QqIGV3a1RpbGUp
CiB7Ci0gICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4obywgcHJpdiwgRUlOQV9GQUxTRSk7Cisg
ICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4oZXdrVGlsZSwgcHJpdiwgRUlOQV9GQUxTRSk7CiAg
ICAgcmV0dXJuIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9kaXNhYmxlX3JlbmRlcihwcml2KTsK
IH0KIAotRWluYV9Cb29sIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX2VuYWJsZV9yZW5kZXIoRXZh
c19PYmplY3QgKm8pCitFaW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZW5hYmxlX3Jl
bmRlcihFdmFzX09iamVjdCogZXdrVGlsZSkKIHsKLSAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVS
TihvLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihld2tU
aWxlLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfY2hh
bmdlZChwcml2KTsKICAgICByZXR1cm4gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2VuYWJsZV9y
ZW5kZXIocHJpdik7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmUuaCBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZS5oCmluZGV4IDMwMTAzZWQxZDMwZDY5ZDFiZjU1MjBkNDJlZjQ5ZjczNThjNjRj
MzIuLjc5NDUxYWVmMjAzY2Y5NWRjMmNhYWFkZGM4ODhhYjFlZGJkM2MzZmQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfYmFja2luZ19zdG9yZS5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfYmFja2luZ19zdG9yZS5oCkBAIC03Miw3ICs3
Miw3IEBAIHN0cnVjdCBfRXdrX1RpbGUgewogICAgIGNhaXJvX3QqIGNhaXJvOwogCiAgICAgLyoq
IE5ldmVyIGV2ZXIgY2hhbmdlIHRob3NlIGFmdGVyIHRpbGUgaXMgY3JlYXRlZCAocmVzcGVjdCBj
b25zdCEpICovCi0gICAgY29uc3QgRXZhc19Db29yZCB3LCBoOyAgICAgICAgLyoqPCB0aWxlIHNp
emUgKHNlZSBUSUxFX1NJWkVfQVRfWk9PTSgpKSAqLworICAgIGNvbnN0IEV2YXNfQ29vcmQgd2lk
dGgsIGhlaWdodDsgICAgICAgIC8qKjwgdGlsZSBzaXplIChzZWUgVElMRV9TSVpFX0FUX1pPT00o
KSkgKi8KICAgICBjb25zdCBFdmFzX0NvbG9yc3BhY2UgY3NwYWNlOyAvKio8IGNvbG9yc3BhY2Ug
Ki8KICAgICBjb25zdCBmbG9hdCB6b29tOyAgICAgICAgICAgICAvKio8IHpvb20gbGV2ZWwgY29u
dGVudHMgd2VyZSByZW5kZXJlZCBhdCAqLwogICAgIGNvbnN0IHNpemVfdCBieXRlczsgICAgICAg
ICAgIC8qKjwgYnl0ZXMgdXNlZCBpbiBwaXhlbHMuIGtlZXAKQEAgLTkwLDcgKzkwLDcgQEAgc3Ry
dWN0IF9Fd2tfVGlsZSB7CiAvKiB2aWV3ICovCiBFdmFzX09iamVjdCogZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfYWRkKEV2YXMqIGUpOwogCi12b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3Jl
bmRlcl9jYl9zZXQoRXZhc19PYmplY3QgKm8sIEVpbmFfQm9vbCAoKiBjYikodm9pZCogZGF0YSwg
RXdrX1RpbGUqIHQsIGNvbnN0IEVpbmFfUmVjdGFuZ2xlKiBhcmVhKSwgY29uc3Qgdm9pZCogZGF0
YSk7Cit2b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3JlbmRlcl9jYl9zZXQoRXZhc19PYmpl
Y3QgKm8sIEVpbmFfQm9vbCAoKmNiKSh2b2lkKiBkYXRhLCBFd2tfVGlsZSogdCwgY29uc3QgRWlu
YV9SZWN0YW5nbGUqIGFyZWEpLCBjb25zdCB2b2lkKiBkYXRhKTsKIAogRWluYV9Cb29sIGV3a190
aWxlZF9iYWNraW5nX3N0b3JlX3Njcm9sbF9mdWxsX29mZnNldF9zZXQoRXZhc19PYmplY3QqIG8s
IEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5KTsKIEVpbmFfQm9vbCBld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9zY3JvbGxfZnVsbF9vZmZzZXRfYWRkKEV2YXNfT2JqZWN0KiBvLCBFdmFzX0Nvb3Jk
IGR4LCBFdmFzX0Nvb3JkIGR5KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9l
d2tfdGlsZWRfbWF0cml4LmNwcCBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfbWF0
cml4LmNwcAppbmRleCBmZjRjNDFjNzE5MTM0N2YwMWE2MTliM2QxY2JlZTliY2I1NGE2MmNlLi5l
OTFiZDc3Nzc3ZTEwNWQwZmUyMmRjYWY4ZjJkNmFhMDAxNmQyMjRlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX21hdHJpeC5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9lZmwvZXdrL2V3a190aWxlZF9tYXRyaXguY3BwCkBAIC0zMiwxNyArMzIsMTcgQEAKICNpbmNs
dWRlIDxzdHJpbmcuaD4KIAogc3RydWN0IF9Fd2tfVGlsZV9NYXRyaXggewotICAgIEVpbmFfTWF0
cml4c3BhcnNlICptYXRyaXg7Ci0gICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWM7CisgICAg
RWluYV9NYXRyaXhzcGFyc2UqIG1hdHJpeDsKKyAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHR1
YzsKICAgICBFdmFzX0NvbG9yc3BhY2UgY3NwYWNlOwogICAgIHN0cnVjdCB7Ci0gICAgICAgIHZv
aWQgKCpjYikodm9pZCAqZGF0YSwgRXdrX1RpbGUgKnQsIGNvbnN0IEVpbmFfUmVjdGFuZ2xlICp1
cGRhdGUpOwotICAgICAgICB2b2lkICpkYXRhOworICAgICAgICB2b2lkICgqY2IpKHZvaWQqIGRh
dGEsIEV3a19UaWxlKiB0aWxlLCBjb25zdCBFaW5hX1JlY3RhbmdsZSogdXBkYXRlKTsKKyAgICAg
ICAgdm9pZCogZGF0YTsKICAgICB9IHJlbmRlcjsKICAgICB1bnNpZ25lZCBpbnQgZnJvemVuOwot
ICAgIEVpbmFfTGlzdCAqdXBkYXRlczsKKyAgICBFaW5hX0xpc3QqIHVwZGF0ZXM7CiAgICAgc3Ry
dWN0IHsKLSAgICAgICAgRXZhc19Db29yZCB3LCBoOworICAgICAgICBFdmFzX0Nvb3JkIHdpZHRo
LCBoZWlnaHQ7CiAgICAgfSB0aWxlOwogI2lmZGVmIERFQlVHX01FTV9MRUFLUwogICAgIHN0cnVj
dCB7CkBAIC01OSwzMSArNTksMzEgQEAgc3RhdGljIHVpbnQ2NF90IGJ5dGVzX2xlYWtlZCA9IDA7
CiAjZW5kaWYKIAogLyogY2FsbGVkIHdoZW4gbWF0cml4c3BhcnNlIGlzIHJlc2l6ZWQgb3IgZnJl
ZWQgKi8KLXN0YXRpYyB2b2lkIF9ld2tfdGlsZV9tYXRyaXhfY2VsbF9mcmVlKHZvaWQgKnVzZXJf
ZGF0YSwgdm9pZCAqY2VsbF9kYXRhKQorc3RhdGljIHZvaWQgX2V3a190aWxlX21hdHJpeF9jZWxs
X2ZyZWUodm9pZCogdXNlckRhdGEsIHZvaWQqIGNlbGxEYXRhKQogewotICAgIEV3a19UaWxlX01h
dHJpeCogdG0gPSBzdGF0aWNfY2FzdDxFd2tfVGlsZV9NYXRyaXgqPih1c2VyX2RhdGEpOwotICAg
IEV3a19UaWxlKiB0ID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGUqPihjZWxsX2RhdGEpOworICAgIEV3
a19UaWxlX01hdHJpeCogdG0gPSBzdGF0aWNfY2FzdDxFd2tfVGlsZV9NYXRyaXgqPih1c2VyRGF0
YSk7CisgICAgRXdrX1RpbGUqIHRpbGUgPSBzdGF0aWNfY2FzdDxFd2tfVGlsZSo+KGNlbGxEYXRh
KTsKIAotICAgIGlmICghdCkKKyAgICBpZiAoIXRpbGUpCiAgICAgICAgIHJldHVybjsKIAogICAg
IGV3a190aWxlX3VudXNlZF9jYWNoZV9mcmVlemUodG0tPnR1Yyk7CiAKLSAgICBpZiAodC0+dXBk
YXRlcyB8fCB0LT5zdGF0cy5mdWxsX3VwZGF0ZSkKLSAgICAgICAgdG0tPnVwZGF0ZXMgPSBlaW5h
X2xpc3RfcmVtb3ZlKHRtLT51cGRhdGVzLCB0KTsKKyAgICBpZiAodGlsZS0+dXBkYXRlcyB8fCB0
aWxlLT5zdGF0cy5mdWxsX3VwZGF0ZSkKKyAgICAgICAgdG0tPnVwZGF0ZXMgPSBlaW5hX2xpc3Rf
cmVtb3ZlKHRtLT51cGRhdGVzLCB0aWxlKTsKIAotICAgIGlmICh0LT52aXNpYmxlKQotICAgICAg
ICBFUlIoImZyZWVpbmcgY2VsbCB0aGF0IGlzIHZpc2libGUsIGxlYWtpbmcgdGlsZSAlcCIsIHQp
OworICAgIGlmICh0aWxlLT52aXNpYmxlKQorICAgICAgICBFUlIoImZyZWVpbmcgY2VsbCB0aGF0
IGlzIHZpc2libGUsIGxlYWtpbmcgdGlsZSAlcCIsIHRpbGUpOwogICAgIGVsc2UgewotICAgICAg
ICBpZiAoIWV3a190aWxlX3VudXNlZF9jYWNoZV90aWxlX2dldCh0bS0+dHVjLCB0KSkKLSAgICAg
ICAgICAgIEVSUigidGlsZSAlcCB3YXMgbm90IGluIGNhY2hlICVwPyBsZWFraW5nLi4uIiwgdCwg
dG0tPnR1Yyk7CisgICAgICAgIGlmICghZXdrX3RpbGVfdW51c2VkX2NhY2hlX3RpbGVfZ2V0KHRt
LT50dWMsIHRpbGUpKQorICAgICAgICAgICAgRVJSKCJ0aWxlICVwIHdhcyBub3QgaW4gY2FjaGUg
JXA/IGxlYWtpbmcuLi4iLCB0aWxlLCB0bS0+dHVjKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgICBEQkcoInRpbGUgY2VsbCBkb2VzIG5vdCBleGlzdCBhbnltb3JlLCBmcmVlIGl0ICVwIiwg
dCk7CisgICAgICAgICAgICBEQkcoInRpbGUgY2VsbCBkb2VzIG5vdCBleGlzdCBhbnltb3JlLCBm
cmVlIGl0ICVwIiwgdGlsZSk7CiAjaWZkZWYgREVCVUdfTUVNX0xFQUtTCi0gICAgICAgICAgICB0
bS0+c3RhdHMuYnl0ZXMuZnJlZWQgKz0gdC0+Ynl0ZXM7CisgICAgICAgICAgICB0bS0+c3RhdHMu
Ynl0ZXMuZnJlZWQgKz0gdGlsZS0+Ynl0ZXM7CiAgICAgICAgICAgICB0bS0+c3RhdHMudGlsZXMu
ZnJlZWQrKzsKICNlbmRpZgotICAgICAgICAgICAgZXdrX3RpbGVfZnJlZSh0KTsKKyAgICAgICAg
ICAgIGV3a190aWxlX2ZyZWUodGlsZSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTkxLDQwICs5
MSw0MCBAQCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVfbWF0cml4X2NlbGxfZnJlZSh2b2lkICp1c2Vy
X2RhdGEsIHZvaWQgKmNlbGxfZGF0YSkKIH0KIAogLyogY2FsbGVkIHdoZW4gY2FjaGUgb2YgdW51
c2VkIHRpbGUgaXMgZmx1c2hlZCAqLwotc3RhdGljIHZvaWQgX2V3a190aWxlX21hdHJpeF90aWxl
X2ZyZWUodm9pZCAqZGF0YSwgRXdrX1RpbGUgKnQpCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVfbWF0
cml4X3RpbGVfZnJlZSh2b2lkKiBkYXRhLCBFd2tfVGlsZSogdGlsZSkKIHsKICAgICBFd2tfVGls
ZV9NYXRyaXgqIHRtID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGVfTWF0cml4Kj4oZGF0YSk7Ci0gICAg
RWluYV9NYXRyaXhzcGFyc2VfQ2VsbCAqY2VsbDsKLSAKLSAgICBpZiAoIWVpbmFfbWF0cml4c3Bh
cnNlX2NlbGxfaWR4X2dldCh0bS0+bWF0cml4LCB0LT5yb3csIHQtPmNvbCwgJmNlbGwpKSB7Ci0g
ICAgICAgIEVSUigicmVtb3ZpbmcgdGlsZSAlcCB0aGF0IHdhcyBub3QgaW4gdGhlIG1hdHJpeD8g
TGVha2luZy4uLiIsIHQpOworICAgIEVpbmFfTWF0cml4c3BhcnNlX0NlbGwqIGNlbGw7CisKKyAg
ICBpZiAoIWVpbmFfbWF0cml4c3BhcnNlX2NlbGxfaWR4X2dldCh0bS0+bWF0cml4LCB0aWxlLT5y
b3csIHRpbGUtPmNvbCwgJmNlbGwpKSB7CisgICAgICAgIEVSUigicmVtb3ZpbmcgdGlsZSAlcCB0
aGF0IHdhcyBub3QgaW4gdGhlIG1hdHJpeD8gTGVha2luZy4uLiIsIHRpbGUpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCiAgICAgaWYgKCFjZWxsKSB7Ci0gICAgICAgIEVSUigicmVtb3Zpbmcg
dGlsZSAlcCB0aGF0IHdhcyBub3QgaW4gdGhlIG1hdHJpeD8gTGVha2luZy4uLiIsIHQpOworICAg
ICAgICBFUlIoInJlbW92aW5nIHRpbGUgJXAgdGhhdCB3YXMgbm90IGluIHRoZSBtYXRyaXg/IExl
YWtpbmcuLi4iLCB0aWxlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICh0LT51
cGRhdGVzIHx8IHQtPnN0YXRzLmZ1bGxfdXBkYXRlKQotICAgICAgICB0bS0+dXBkYXRlcyA9IGVp
bmFfbGlzdF9yZW1vdmUodG0tPnVwZGF0ZXMsIHQpOworICAgIGlmICh0aWxlLT51cGRhdGVzIHx8
IHRpbGUtPnN0YXRzLmZ1bGxfdXBkYXRlKQorICAgICAgICB0bS0+dXBkYXRlcyA9IGVpbmFfbGlz
dF9yZW1vdmUodG0tPnVwZGF0ZXMsIHRpbGUpOwogCiAgICAgLyogc2V0IHRvIG51bGwgdG8gYXZv
aWQgZG91YmxlIGZyZWUgKi8KICAgICBlaW5hX21hdHJpeHNwYXJzZV9jZWxsX2RhdGFfcmVwbGFj
ZShjZWxsLCAwLCAwKTsKICAgICBlaW5hX21hdHJpeHNwYXJzZV9jZWxsX2NsZWFyKGNlbGwpOwog
Ci0gICAgaWYgKEVJTkFfVU5MSUtFTFkoISF0LT52aXNpYmxlKSkgeworICAgIGlmIChFSU5BX1VO
TElLRUxZKCEhdGlsZS0+dmlzaWJsZSkpIHsKICAgICAgICAgRVJSKCJjYWNoZSBvZiB1bnVzZWQg
dGlsZXMgcmVxdWVzdGluZyBkZWxldGlvbiBvZiB1c2VkIHRpbGUgJXA/ICIKLSAgICAgICAgICAg
ICJMZWFraW5nLi4uIiwgdCk7CisgICAgICAgICAgICAiTGVha2luZy4uLiIsIHRpbGUpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCiAjaWZkZWYgREVCVUdfTUVNX0xFQUtTCi0gICAgdG0tPnN0
YXRzLmJ5dGVzLmZyZWVkICs9IHQtPmJ5dGVzOworICAgIHRtLT5zdGF0cy5ieXRlcy5mcmVlZCAr
PSB0aWxlLT5ieXRlczsKICAgICB0bS0+c3RhdHMudGlsZXMuZnJlZWQrKzsKICNlbmRpZgogCi0g
ICAgZXdrX3RpbGVfZnJlZSh0KTsKKyAgICBld2tfdGlsZV9mcmVlKHRpbGUpOwogfQogCiAvKioK
QEAgLTEzNyw3ICsxMzcsNyBAQCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVfbWF0cml4X3RpbGVfZnJl
ZSh2b2lkICpkYXRhLCBFd2tfVGlsZSAqdCkKICAqCiAgKiBAcGFyYW0gdHVjIGNhY2hlIG9mIHVu
dXNlZCB0aWxlcyBvciBAYyAwIHRvIGNyZWF0ZSBvbmUKICAqICAgICAgICBhdXRvbWF0aWNhbGx5
LgotICogQHBhcmFtIGNvbHMgbnVtYmVyIG9mIGNvbHVtbnMgaW4gdGhlIG1hdHJpeC4KKyAqIEBw
YXJhbSBjb2x1bW5zIG51bWJlciBvZiBjb2x1bW5zIGluIHRoZSBtYXRyaXguCiAgKiBAcGFyYW0g
cm93cyBudW1iZXIgb2Ygcm93cyBpbiB0aGUgbWF0cml4LgogICogQHBhcmFtIGNzcGFjZSB0aGUg
Y29sb3Igc3BhY2UgdXNlZCB0byBjcmVhdGUgdGlsZXMgaW4gdGhpcyBtYXRyaXguCiAgKiBAcGFy
YW0gcmVuZGVyX2NiIGZ1bmN0aW9uIHVzZWQgdG8gcmVuZGVyIGdpdmVuIHRpbGUgdXBkYXRlLgpA
QCAtMTQ1LDIxICsxNDUsMjEgQEAgc3RhdGljIHZvaWQgX2V3a190aWxlX21hdHJpeF90aWxlX2Zy
ZWUodm9pZCAqZGF0YSwgRXdrX1RpbGUgKnQpCiAgKgogICogQHJldHVybiBuZXdseSBhbGxvY2F0
ZWQgaW5zdGFuY2Ugb24gc3VjY2VzcywgQGMgMCBvbiBmYWlsdXJlLgogICovCi1Fd2tfVGlsZV9N
YXRyaXggKmV3a190aWxlX21hdHJpeF9uZXcoRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMsIHVu
c2lnbmVkIGxvbmcgY29scywgdW5zaWduZWQgbG9uZyByb3dzLCBFdmFzX0NvbG9yc3BhY2UgY3Nw
YWNlLCB2b2lkICgqcmVuZGVyX2NiKSh2b2lkICpkYXRhLCBFd2tfVGlsZSAqdCwgY29uc3QgRWlu
YV9SZWN0YW5nbGUgKnVwZGF0ZSksIGNvbnN0IHZvaWQgKnJlbmRlcl9kYXRhKQorRXdrX1RpbGVf
TWF0cml4KiBld2tfdGlsZV9tYXRyaXhfbmV3KEV3a19UaWxlX1VudXNlZF9DYWNoZSogdGlsZVVu
dXNlZENhY2hlLCB1bnNpZ25lZCBsb25nIGNvbHVtbnMsIHVuc2lnbmVkIGxvbmcgcm93cywgRXZh
c19Db2xvcnNwYWNlIGNvbG9yU3BhY2UsIHZvaWQgKCpyZW5kZXJfY2FsbGJhY2spKHZvaWQqIGRh
dGEsIEV3a19UaWxlKiB0aWxlLCBjb25zdCBFaW5hX1JlY3RhbmdsZSogdXBkYXRlKSwgY29uc3Qg
dm9pZCogcmVuZGVyRGF0YSkKIHsKICAgICBFd2tfVGlsZV9NYXRyaXgqIHRtID0gc3RhdGljX2Nh
c3Q8RXdrX1RpbGVfTWF0cml4Kj4oY2FsbG9jKDEsIHNpemVvZihFd2tfVGlsZV9NYXRyaXgpKSk7
CiAgICAgaWYgKCF0bSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICB0bS0+bWF0cml4ID0gZWlu
YV9tYXRyaXhzcGFyc2VfbmV3KHJvd3MsIGNvbHMsIF9ld2tfdGlsZV9tYXRyaXhfY2VsbF9mcmVl
LCB0bSk7CisgICAgdG0tPm1hdHJpeCA9IGVpbmFfbWF0cml4c3BhcnNlX25ldyhyb3dzLCBjb2x1
bW5zLCBfZXdrX3RpbGVfbWF0cml4X2NlbGxfZnJlZSwgdG0pOwogICAgIGlmICghdG0tPm1hdHJp
eCkgewogICAgICAgICBFUlIoImNvdWxkIG5vdCBjcmVhdGUgc3BhcnNlIG1hdHJpeC4iKTsKICAg
ICAgICAgZnJlZSh0bSk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIGlmICh0dWMp
Ci0gICAgICAgIHRtLT50dWMgPSBld2tfdGlsZV91bnVzZWRfY2FjaGVfcmVmKHR1Yyk7CisgICAg
aWYgKHRpbGVVbnVzZWRDYWNoZSkKKyAgICAgICAgdG0tPnR1YyA9IGV3a190aWxlX3VudXNlZF9j
YWNoZV9yZWYodGlsZVVudXNlZENhY2hlKTsKICAgICBlbHNlIHsKICAgICAgICAgdG0tPnR1YyA9
IGV3a190aWxlX3VudXNlZF9jYWNoZV9uZXcoNDA5NjAwMDApOwogICAgICAgICBpZiAoIXRtLT50
dWMpIHsKQEAgLTE3MCwxMSArMTcwLDExIEBAIEV3a19UaWxlX01hdHJpeCAqZXdrX3RpbGVfbWF0
cml4X25ldyhFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YywgdW5zaWduZWQgbG9uZyBjCiAgICAg
ICAgIH0KICAgICB9CiAKLSAgICB0bS0+Y3NwYWNlID0gY3NwYWNlOwotICAgIHRtLT5yZW5kZXIu
Y2IgPSByZW5kZXJfY2I7Ci0gICAgdG0tPnJlbmRlci5kYXRhID0gKHZvaWQgKilyZW5kZXJfZGF0
YTsKLSAgICB0bS0+dGlsZS53ID0gREVGQVVMVF9USUxFX1c7Ci0gICAgdG0tPnRpbGUuaCA9IERF
RkFVTFRfVElMRV9IOworICAgIHRtLT5jc3BhY2UgPSBjb2xvclNwYWNlOworICAgIHRtLT5yZW5k
ZXIuY2IgPSByZW5kZXJfY2FsbGJhY2s7CisgICAgdG0tPnJlbmRlci5kYXRhID0gKHZvaWQqKXJl
bmRlckRhdGE7CisgICAgdG0tPnRpbGUud2lkdGggPSBERUZBVUxUX1RJTEVfVzsKKyAgICB0bS0+
dGlsZS5oZWlnaHQgPSBERUZBVUxUX1RJTEVfSDsKIAogICAgIHJldHVybiB0bTsKIH0KQEAgLTE4
NCw1NiArMTg0LDU2IEBAIEV3a19UaWxlX01hdHJpeCAqZXdrX3RpbGVfbWF0cml4X25ldyhFd2tf
VGlsZV9VbnVzZWRfQ2FjaGUgKnR1YywgdW5zaWduZWQgbG9uZyBjCiAgKgogICogVGhlIGNhY2hl
IGluc3RhbmNlIGlzIHVucmVmZXJlbmNlZCwgcG9zc2libHkgZnJlZWluZyBpdC4KICAqLwotdm9p
ZCBld2tfdGlsZV9tYXRyaXhfZnJlZShFd2tfVGlsZV9NYXRyaXggKnRtKQordm9pZCBld2tfdGls
ZV9tYXRyaXhfZnJlZShFd2tfVGlsZV9NYXRyaXgqIHRpbGVNYXRyaXgpCiB7CiAjaWZkZWYgREVC
VUdfTUVNX0xFQUtTCiAgICAgdWludDY0X3QgdGlsZXMsIGJ5dGVzOwogI2VuZGlmCiAKLSAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0bSk7Ci0gICAgZXdrX3RpbGVfdW51c2VkX2NhY2hl
X2ZyZWV6ZSh0bS0+dHVjKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0aWxlTWF0
cml4KTsKKyAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfZnJlZXplKHRpbGVNYXRyaXgtPnR1Yyk7
CiAKLSAgICBlaW5hX21hdHJpeHNwYXJzZV9mcmVlKHRtLT5tYXRyaXgpOworICAgIGVpbmFfbWF0
cml4c3BhcnNlX2ZyZWUodGlsZU1hdHJpeC0+bWF0cml4KTsKIAotICAgIGV3a190aWxlX3VudXNl
ZF9jYWNoZV90aGF3KHRtLT50dWMpOwotICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV91bnJlZih0
bS0+dHVjKTsKKyAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfdGhhdyh0aWxlTWF0cml4LT50dWMp
OworICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV91bnJlZih0aWxlTWF0cml4LT50dWMpOwogCiAj
aWZkZWYgREVCVUdfTUVNX0xFQUtTCi0gICAgdGlsZXMgPSB0bS0+c3RhdHMudGlsZXMuYWxsb2Nh
dGVkIC0gdG0tPnN0YXRzLnRpbGVzLmZyZWVkOwotICAgIGJ5dGVzID0gdG0tPnN0YXRzLmJ5dGVz
LmFsbG9jYXRlZCAtIHRtLT5zdGF0cy5ieXRlcy5mcmVlZDsKKyAgICB0aWxlcyA9IHRpbGVNYXRy
aXgtPnN0YXRzLnRpbGVzLmFsbG9jYXRlZCAtIHRpbGVNYXRyaXgtPnN0YXRzLnRpbGVzLmZyZWVk
OworICAgIGJ5dGVzID0gdGlsZU1hdHJpeC0+c3RhdHMuYnl0ZXMuYWxsb2NhdGVkIC0gdGlsZU1h
dHJpeC0+c3RhdHMuYnl0ZXMuZnJlZWQ7CiAKICAgICB0aWxlc19sZWFrZWQgKz0gdGlsZXM7CiAg
ICAgYnl0ZXNfbGVha2VkICs9IGJ5dGVzOwogCiAgICAgaWYgKHRpbGVzIHx8IGJ5dGVzKQotICAg
ICAgICBFUlIoInRpbGVkIG1hdHJpeCBsZWFrZWQ6IHRpbGVzWyslIlBSSXU2NCIsLSUiUFJJdTY0
IjolIlBSSXU2NCJdICIKLSAgICAgICAgICAgImJ5dGVzWyslIlBSSXU2NCIsLSUiUFJJdTY0Ijol
IlBSSXU2NCJdIiwKLSAgICAgICAgICAgIHRtLT5zdGF0cy50aWxlcy5hbGxvY2F0ZWQsIHRtLT5z
dGF0cy50aWxlcy5mcmVlZCwgdGlsZXMsCi0gICAgICAgICAgICB0bS0+c3RhdHMuYnl0ZXMuYWxs
b2NhdGVkLCB0bS0+c3RhdHMuYnl0ZXMuZnJlZWQsIGJ5dGVzKTsKKyAgICAgICAgRVJSKCJ0aWxl
ZCBtYXRyaXggbGVha2VkOiB0aWxlc1srJSIgUFJJdTY0ICIsLSUiIFBSSXU2NCAiOiUiIFBSSXU2
NCAiXSAiCisgICAgICAgICAgICAiYnl0ZXNbKyUiIFBSSXU2NCAiLC0lIiBQUkl1NjQgIjolIiBQ
Ukl1NjQgIl0iLAorICAgICAgICAgICAgdGlsZU1hdHJpeC0+c3RhdHMudGlsZXMuYWxsb2NhdGVk
LCB0aWxlTWF0cml4LT5zdGF0cy50aWxlcy5mcmVlZCwgdGlsZXMsCisgICAgICAgICAgICB0aWxl
TWF0cml4LT5zdGF0cy5ieXRlcy5hbGxvY2F0ZWQsIHRpbGVNYXRyaXgtPnN0YXRzLmJ5dGVzLmZy
ZWVkLCBieXRlcyk7CiAgICAgZWxzZSBpZiAodGlsZXNfbGVha2VkIHx8IGJ5dGVzX2xlYWtlZCkK
LSAgICAgICAgV1JOKCJ0aWxlZCBtYXRyaXggaGFkIG5vIGxlYWtzOiB0aWxlc1srJSJQUkl1NjQi
LC0lIlBSSXU2NCJdICIKLSAgICAgICAgICAgImJ5dGVzWyslIlBSSXU2NCIsLSUiUFJJdTY0Il0s
IGJ1dCBzb21lIG90aGVyIGxlYWtlZCAiCi0gICAgICAgICAgICAiJSJQUkl1NjQiIHRpbGVzICgl
IlBSSXU2NCIgYnl0ZXMpIiwKLSAgICAgICAgICAgIHRtLT5zdGF0cy50aWxlcy5hbGxvY2F0ZWQs
IHRtLT5zdGF0cy50aWxlcy5mcmVlZCwKLSAgICAgICAgICAgIHRtLT5zdGF0cy5ieXRlcy5hbGxv
Y2F0ZWQsIHRtLT5zdGF0cy5ieXRlcy5mcmVlZCwKKyAgICAgICAgV1JOKCJ0aWxlZCBtYXRyaXgg
aGFkIG5vIGxlYWtzOiB0aWxlc1srJSIgUFJJdTY0ICIsLSUiIFBSSXU2NCAiXSAiCisgICAgICAg
ICAgICAiYnl0ZXNbKyUiIFBSSXU2NCAiLC0lIiBQUkl1NjQgIl0sIGJ1dCBzb21lIG90aGVyIGxl
YWtlZCAiCisgICAgICAgICAgICAiJSIgUFJJdTY0ICIgdGlsZXMgKCUiIFBSSXU2NCAiIGJ5dGVz
KSIsCisgICAgICAgICAgICB0aWxlTWF0cml4LT5zdGF0cy50aWxlcy5hbGxvY2F0ZWQsIHRpbGVN
YXRyaXgtPnN0YXRzLnRpbGVzLmZyZWVkLAorICAgICAgICAgICAgdGlsZU1hdHJpeC0+c3RhdHMu
Ynl0ZXMuYWxsb2NhdGVkLCB0aWxlTWF0cml4bS0+c3RhdHMuYnl0ZXMuZnJlZWQsCiAgICAgICAg
ICAgICB0aWxlc19sZWFrZWQsIGJ5dGVzX2xlYWtlZCk7CiAgICAgZWxzZQotICAgICAgICBJTkYo
InRpbGVkIG1hdHJpeCBoYWQgbm8gbGVha3M6IHRpbGVzWyslIlBSSXU2NCIsLSUiUFJJdTY0Il0g
IgotICAgICAgICAgICAiYnl0ZXNbKyUiUFJJdTY0IiwtJSJQUkl1NjQiXSIsCi0gICAgICAgICAg
ICB0bS0+c3RhdHMudGlsZXMuYWxsb2NhdGVkLCB0bS0+c3RhdHMudGlsZXMuZnJlZWQsCi0gICAg
ICAgICAgICB0bS0+c3RhdHMuYnl0ZXMuYWxsb2NhdGVkLCB0bS0+c3RhdHMuYnl0ZXMuZnJlZWQp
OworICAgICAgICBJTkYoInRpbGVkIG1hdHJpeCBoYWQgbm8gbGVha3M6IHRpbGVzWyslIiBQUkl1
NjQgIiwtJSIgUFJJdTY0ICJdICIKKyAgICAgICAgICAgICJieXRlc1srJSIgUFJJdTY0ICIsLSUi
IFBSSXU2NCAiXSIsCisgICAgICAgICAgICB0aWxlTWF0cml4LT5zdGF0cy50aWxlcy5hbGxvY2F0
ZWQsIHRpbGVNYXRyaXgtPnN0YXRzLnRpbGVzLmZyZWVkLAorICAgICAgICAgICAgdGlsZU1hdHJp
eC0+c3RhdHMuYnl0ZXMuYWxsb2NhdGVkLCB0aWxlTWF0cml4LT5zdGF0cy5ieXRlcy5mcmVlZCk7
CiAjZW5kaWYKIAotICAgIGZyZWUodG0pOworICAgIGZyZWUodGlsZU1hdHJpeCk7CiB9CiAKIC8q
KgogICogUmVzaXplIG1hdHJpeCB0byBnaXZlbiBudW1iZXIgb2Ygcm93cyBhbmQgY29sdW1ucy4K
ICAqLwotdm9pZCBld2tfdGlsZV9tYXRyaXhfcmVzaXplKEV3a19UaWxlX01hdHJpeCAqdG0sIHVu
c2lnbmVkIGxvbmcgY29scywgdW5zaWduZWQgbG9uZyByb3dzKQordm9pZCBld2tfdGlsZV9tYXRy
aXhfcmVzaXplKEV3a19UaWxlX01hdHJpeCogdGlsZU1hdHJpeCwgdW5zaWduZWQgbG9uZyBjb2xz
LCB1bnNpZ25lZCBsb25nIHJvd3MpCiB7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4o
dG0pOwotICAgIGVpbmFfbWF0cml4c3BhcnNlX3NpemVfc2V0KHRtLT5tYXRyaXgsIHJvd3MsIGNv
bHMpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHRpbGVNYXRyaXgpOworICAgIGVp
bmFfbWF0cml4c3BhcnNlX3NpemVfc2V0KHRpbGVNYXRyaXgtPm1hdHJpeCwgcm93cywgY29scyk7
CiB9CiAKIC8qKgpAQCAtMjQxLDIzICsyNDEsMjMgQEAgdm9pZCBld2tfdGlsZV9tYXRyaXhfcmVz
aXplKEV3a19UaWxlX01hdHJpeCAqdG0sIHVuc2lnbmVkIGxvbmcgY29scywgdW5zaWduZWQgbG8K
ICAqCiAgKiBObyByZWZlcmVuY2UgaXMgdGFrZW4gdG8gdGhlIGNhY2hlLgogICovCi1Fd2tfVGls
ZV9VbnVzZWRfQ2FjaGUgKmV3a190aWxlX21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KGNvbnN0IEV3
a19UaWxlX01hdHJpeCAqdG0pCitFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIGV3a190aWxlX21hdHJp
eF91bnVzZWRfY2FjaGVfZ2V0KGNvbnN0IEV3a19UaWxlX01hdHJpeCogdGlsZU1hdHJpeCkKIHsK
LSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodG0sIDApOwotICAgIHJldHVybiB0
bS0+dHVjOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh0aWxlTWF0cml4LCAw
KTsKKyAgICByZXR1cm4gdGlsZU1hdHJpeC0+dHVjOwogfQogCiAvKioKICAqIEdldCB0aGUgZXhh
Y3QgdGlsZSBmb3IgdGhlIGdpdmVuIHBvc2l0aW9uIGFuZCB6b29tLgogICoKLSAqIElmIHRoZSB0
aWxlIHdhcyB1bnVzZWQgdGhlbiBpdCdzIHJlbW92ZWQgZnJvbSB0aGUgY2FjaGUuCisgKiBJZiB0
aGUgdGlsZS53aWR0aGFzIHVudXNlZCB0aGVuIGl0J3MgcmVtb3ZlZCBmcm9tIHRoZSBjYWNoZS4K
ICAqCiAgKiBBZnRlciB1c2FnZSwgcGxlYXNlIGdpdmUgaXQgYmFjayB1c2luZwogICogZXdrX3Rp
bGVfbWF0cml4X3RpbGVfcHV0KCkuIElmIHlvdSBqdXN0IHdhbnQgdG8gY2hlY2sgaWYgaXQgZXhp
c3RzLAogICogdGhlbiB1c2UgZXdrX3RpbGVfbWF0cml4X3RpbGVfZXhhY3RfZXhpc3RzKCkuCiAg
KgotICogQHBhcmFtIHRtIHRoZSB0aWxlIG1hdHJpeCB0byBnZXQgdGlsZSBmcm9tLgotICogQHBh
cmFtIGNvbCB0aGUgY29sdW1uIG51bWJlci4KKyAqIEBwYXJhbSB0aWxlTWF0cml4IHRoZSB0aWxl
IG1hdHJpeCB0byBnZXQgdGlsZSBmcm9tLgorICogQHBhcmFtIGNvbHVtbiB0aGUgY29sdW1uIG51
bWJlci4KICAqIEBwYXJhbSByb3cgdGhlIHJvdyBudW1iZXIuCiAgKiBAcGFyYW0gem9vbSB0aGUg
ZXhhY3Qgem9vbSB0byB1c2UuCiAgKgpAQCAtMjY4LDI5ICsyNjgsMjkgQEAgRXdrX1RpbGVfVW51
c2VkX0NhY2hlICpld2tfdGlsZV9tYXRyaXhfdW51c2VkX2NhY2hlX2dldChjb25zdCBFd2tfVGls
ZV9NYXRyaXggKnQKICAqCiAgKiBAc2VlIGV3a190aWxlX21hdHJpeF90aWxlX2V4YWN0X2dldCgp
CiAgKi8KLUV3a19UaWxlICpld2tfdGlsZV9tYXRyaXhfdGlsZV9leGFjdF9nZXQoRXdrX1RpbGVf
TWF0cml4ICp0bSwgdW5zaWduZWQgbG9uZyBjb2wsIHVuc2lnbmVkIGxvbmcgcm93LCBmbG9hdCB6
b29tKQorRXdrX1RpbGUqIGV3a190aWxlX21hdHJpeF90aWxlX2V4YWN0X2dldChFd2tfVGlsZV9N
YXRyaXgqIHRpbGVNYXRyaXgsIHVuc2lnbmVkIGxvbmcgY29sdW1uLCB1bnNpZ25lZCBsb25nIHJv
dywgZmxvYXQgem9vbSkKIHsKLSAgICBFd2tfVGlsZSogdCA9IHN0YXRpY19jYXN0PEV3a19UaWxl
Kj4oZWluYV9tYXRyaXhzcGFyc2VfZGF0YV9pZHhfZ2V0KHRtLT5tYXRyaXgsIHJvdywgY29sKSk7
Ci0gICAgaWYgKCF0KQorICAgIEV3a19UaWxlKiB0aWxlID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGUq
PihlaW5hX21hdHJpeHNwYXJzZV9kYXRhX2lkeF9nZXQodGlsZU1hdHJpeC0+bWF0cml4LCByb3cs
IGNvbHVtbikpOworICAgIGlmICghdGlsZSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBpZiAo
dC0+em9vbSA9PSB6b29tKQorICAgIGlmICh0aWxlLT56b29tID09IHpvb20pCiAgICAgICAgIGdv
dG8gZW5kOwogCi0gIGVuZDoKLSAgICBpZiAoIXQtPnZpc2libGUpIHsKLSAgICAgICAgaWYgKCFl
d2tfdGlsZV91bnVzZWRfY2FjaGVfdGlsZV9nZXQodG0tPnR1YywgdCkpCitlbmQ6CisgICAgaWYg
KCF0aWxlLT52aXNpYmxlKSB7CisgICAgICAgIGlmICghZXdrX3RpbGVfdW51c2VkX2NhY2hlX3Rp
bGVfZ2V0KHRpbGVNYXRyaXgtPnR1YywgdGlsZSkpCiAgICAgICAgICAgICBXUk4oIkV3a19UaWxl
IHdhcyB1bnVzZWQgYnV0IG5vdCBpbiBjYWNoZT8gYnVnISIpOwogICAgIH0KIAotICAgIHJldHVy
biB0OworICAgIHJldHVybiB0aWxlOwogfQogCiAvKioKICAqIENoZWNrcyBpZiB0aWxlIG9mIGdp
dmVuIHpvb20gZXhpc3RzIGluIG1hdHJpeC4KICAqCi0gKiBAcGFyYW0gdG0gdGhlIHRpbGUgbWF0
cml4IHRvIGNoZWNrIHRpbGUgZXhpc3RlbmNlLgotICogQHBhcmFtIGNvbCB0aGUgY29sdW1uIG51
bWJlci4KKyAqIEBwYXJhbSB0aWxlTWF0cml4IHRoZSB0aWxlIG1hdHJpeCB0byBjaGVjayB0aWxl
IGV4aXN0ZW5jZS4KKyAqIEBwYXJhbSBjb2x1bW4gdGhlIGNvbHVtbiBudW1iZXIuCiAgKiBAcGFy
YW0gcm93IHRoZSByb3cgbnVtYmVyLgogICogQHBhcmFtIHpvb20gdGhlIGV4YWN0IHpvb20gdG8g
cXVlcnkuCiAgKgpAQCAtMjk4LDkgKzI5OCw5IEBAIEV3a19UaWxlICpld2tfdGlsZV9tYXRyaXhf
dGlsZV9leGFjdF9nZXQoRXdrX1RpbGVfTWF0cml4ICp0bSwgdW5zaWduZWQgbG9uZyBjb2wsCiAg
KgogICogQHNlZSBld2tfdGlsZV9tYXRyaXhfdGlsZV9leGFjdF9nZXQoKQogICovCi1FaW5hX0Jv
b2wgZXdrX3RpbGVfbWF0cml4X3RpbGVfZXhhY3RfZXhpc3RzKEV3a19UaWxlX01hdHJpeCAqdG0s
IHVuc2lnbmVkIGxvbmcgY29sLCB1bnNpZ25lZCBsb25nIHJvdywgZmxvYXQgem9vbSkKK0VpbmFf
Qm9vbCBld2tfdGlsZV9tYXRyaXhfdGlsZV9leGFjdF9leGlzdHMoRXdrX1RpbGVfTWF0cml4KiB0
aWxlTWF0cml4LCB1bnNpZ25lZCBsb25nIGNvbHVtbiwgdW5zaWduZWQgbG9uZyByb3csIGZsb2F0
IHpvb20pCiB7Ci0gICAgaWYgKCFlaW5hX21hdHJpeHNwYXJzZV9kYXRhX2lkeF9nZXQodG0tPm1h
dHJpeCwgcm93LCBjb2wpKQorICAgIGlmICghZWluYV9tYXRyaXhzcGFyc2VfZGF0YV9pZHhfZ2V0
KHRpbGVNYXRyaXgtPm1hdHJpeCwgcm93LCBjb2x1bW4pKQogICAgICAgICByZXR1cm4gRUlOQV9G
QUxTRTsKIAogICAgIHJldHVybiBFSU5BX1RSVUU7CkBAIC0zMTMsNTAgKzMxMyw1MCBAQCBFaW5h
X0Jvb2wgZXdrX3RpbGVfbWF0cml4X3RpbGVfZXhhY3RfZXhpc3RzKEV3a19UaWxlX01hdHJpeCAq
dG0sIHVuc2lnbmVkIGxvbmcgYwogICogb2YgdW51c2VkIHRpbGVzLiBBZnRlciBpdCBpcyB1c2Vk
IG9uZSBzaG91bGQgY2FsbAogICogZXdrX3RpbGVfbWF0cml4X3RpbGVfcHV0KCkgdG8gZ2l2ZSBp
dCBiYWNrIHRvIG1hdHJpeC4KICAqCi0gKiBAcGFyYW0gdG0gdGhlIHRpbGUgbWF0cml4IHRvIGNy
ZWF0ZSB0aWxlIG9uLgotICogQHBhcmFtIGNvbCB0aGUgY29sdW1uIG51bWJlci4KKyAqIEBwYXJh
bSB0aWxlTWF0cml4IHRoZSB0aWxlIG1hdHJpeCB0byBjcmVhdGUgdGlsZSBvbi4KKyAqIEBwYXJh
bSBjb2x1bW4gdGhlIGNvbHVtbiBudW1iZXIuCiAgKiBAcGFyYW0gcm93IHRoZSByb3cgbnVtYmVy
LgogICogQHBhcmFtIHpvb20gdGhlIGxldmVsIHRvIGNyZWF0ZSB0aWxlLCB1c2VkIHRvIGRldGVy
bWluZSB0aWxlIHNpemUuCiAgKi8KLUV3a19UaWxlICpld2tfdGlsZV9tYXRyaXhfdGlsZV9uZXco
RXdrX1RpbGVfTWF0cml4ICp0bSwgRXZhcyAqZXZhcywgdW5zaWduZWQgbG9uZyBjb2wsIHVuc2ln
bmVkIGxvbmcgcm93LCBmbG9hdCB6b29tKQorRXdrX1RpbGUqIGV3a190aWxlX21hdHJpeF90aWxl
X25ldyhFd2tfVGlsZV9NYXRyaXgqIHRpbGVNYXRyaXgsIEV2YXMqIGNhbnZhcywgdW5zaWduZWQg
bG9uZyBjb2x1bW4sIHVuc2lnbmVkIGxvbmcgcm93LCBmbG9hdCB6b29tKQogewogICAgIEV2YXNf
Q29vcmQgdHcsIHRoOwotICAgIEV3a19UaWxlICp0OworICAgIEV3a19UaWxlKiB0aWxlOwogCi0g
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHRtLCAwKTsKKyAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTl9WQUwodGlsZU1hdHJpeCwgMCk7CiAgICAgRUlOQV9TQUZFVFlfT05f
RkFMU0VfUkVUVVJOX1ZBTCh6b29tID4gMC4wLCAwKTsKIAotICAgIHR3ID0gdG0tPnRpbGUudzsK
LSAgICB0aCA9IHRtLT50aWxlLmg7CisgICAgdHcgPSB0aWxlTWF0cml4LT50aWxlLndpZHRoOwor
ICAgIHRoID0gdGlsZU1hdHJpeC0+dGlsZS5oZWlnaHQ7CiAKLSAgICB0ID0gZXdrX3RpbGVfbmV3
KGV2YXMsIHR3LCB0aCwgem9vbSwgdG0tPmNzcGFjZSk7Ci0gICAgaWYgKCF0KSB7Ci0gICAgICAg
IEVSUigiY291bGQgbm90IGNyZWF0ZSB0aWxlICVkeCVkIGF0ICVmLCBjc3BhY2U9JWQiLCB0dywg
dGgsIChkb3VibGUpem9vbSwgdG0tPmNzcGFjZSk7CisgICAgdGlsZSA9IGV3a190aWxlX25ldyhj
YW52YXMsIHR3LCB0aCwgem9vbSwgdGlsZU1hdHJpeC0+Y3NwYWNlKTsKKyAgICBpZiAoIXRpbGUp
IHsKKyAgICAgICAgRVJSKCJjb3VsZCBub3QgY3JlYXRlIHRpbGUgJWR4JWQgYXQgJWYsIGNzcGFj
ZT0lZCIsIHR3LCB0aCwgKGRvdWJsZSl6b29tLCB0aWxlTWF0cml4LT5jc3BhY2UpOwogICAgICAg
ICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBpZiAoIWVpbmFfbWF0cml4c3BhcnNlX2RhdGFfaWR4
X3NldCh0bS0+bWF0cml4LCByb3csIGNvbCwgdCkpIHsKKyAgICBpZiAoIWVpbmFfbWF0cml4c3Bh
cnNlX2RhdGFfaWR4X3NldCh0aWxlTWF0cml4LT5tYXRyaXgsIHJvdywgY29sdW1uLCB0aWxlKSkg
ewogICAgICAgICBFUlIoImNvdWxkIG5vdCBzZXQgbWF0cml4IGNlbGwsIHJvdy9jb2wgb3V0c2lk
ZSBtYXRyaXggZGltZW5zaW9ucyEiKTsKLSAgICAgICAgZXdrX3RpbGVfZnJlZSh0KTsKKyAgICAg
ICAgZXdrX3RpbGVfZnJlZSh0aWxlKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAg
dC0+Y29sID0gY29sOwotICAgIHQtPnJvdyA9IHJvdzsKLSAgICB0LT54ID0gY29sICogdHc7Ci0g
ICAgdC0+eSA9IHJvdyAqIHRoOworICAgIHRpbGUtPmNvbCA9IGNvbHVtbjsKKyAgICB0aWxlLT5y
b3cgPSByb3c7CisgICAgdGlsZS0+eCA9IGNvbHVtbiAqIHR3OworICAgIHRpbGUtPnkgPSByb3cg
KiB0aDsKIAotICAgIGNhaXJvX3RyYW5zbGF0ZSh0LT5jYWlybywgLXQtPngsIC10LT55KTsKKyAg
ICBjYWlyb190cmFuc2xhdGUodGlsZS0+Y2Fpcm8sIC10aWxlLT54LCAtdGlsZS0+eSk7CiAKLSAg
ICB0LT5zdGF0cy5mdWxsX3VwZGF0ZSA9IEVJTkFfVFJVRTsKLSAgICB0bS0+dXBkYXRlcyA9IGVp
bmFfbGlzdF9hcHBlbmQodG0tPnVwZGF0ZXMsIHQpOworICAgIHRpbGUtPnN0YXRzLmZ1bGxfdXBk
YXRlID0gRUlOQV9UUlVFOworICAgIHRpbGVNYXRyaXgtPnVwZGF0ZXMgPSBlaW5hX2xpc3RfYXBw
ZW5kKHRpbGVNYXRyaXgtPnVwZGF0ZXMsIHRpbGUpOwogCiAjaWZkZWYgREVCVUdfTUVNX0xFQUtT
Ci0gICAgdG0tPnN0YXRzLmJ5dGVzLmFsbG9jYXRlZCArPSB0LT5ieXRlczsKLSAgICB0bS0+c3Rh
dHMudGlsZXMuYWxsb2NhdGVkKys7CisgICAgdGlsZU1hdHJpeC0+c3RhdHMuYnl0ZXMuYWxsb2Nh
dGVkICs9IHRpbGUtPmJ5dGVzOworICAgIHRpbGVNYXRyaXgtPnN0YXRzLnRpbGVzLmFsbG9jYXRl
ZCsrOwogI2VuZGlmCiAKLSAgICByZXR1cm4gdDsKKyAgICByZXR1cm4gdGlsZTsKIH0KIAogLyoq
CkBAIC0zNjYsMzIgKzM2NiwzMiBAQCBFd2tfVGlsZSAqZXdrX3RpbGVfbWF0cml4X3RpbGVfbmV3
KEV3a19UaWxlX01hdHJpeCAqdG0sIEV2YXMgKmV2YXMsIHVuc2lnbmVkIGxvbgogICogaXQgd2l0
aCBld2tfdGlsZV9tYXRyaXhfdGlsZV9leGFjdF9nZXQoKS4KICAqCiAgKiBBbnkgcHJldmlvdXMg
cmVmZXJlbmNlIHRvIHRpbGUgc2hvdWxkIGJlIHJlbGVhc2VkCi0gKiAoZXdrX3RpbGVfaGlkZSgp
KSBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLCBzbyBpdCB3aWxsCisgKiAoZXdrX3RpbGUu
aGVpZ2h0aWRlKCkpIGJlZm9yZSBjYWxsaW5nIHRoaXMgZnVuY3Rpb24sIHNvIGl0IHdpbGwKICAq
IGJlIGtub3duIGlmIGl0IGlzIG5vdCB2aXNpYmlsZSBhbnltb3JlIGFuZCB0aHVzIGNhbiBiZSBw
dXQgaW50byB0aGUKICAqIHVudXNlZCBjYWNoZS4KICAqCi0gKiBAcGFyYW0gdG0gdGhlIHRpbGUg
bWF0cml4IHRvIHJldHVybiB0aWxlIHRvLgorICogQHBhcmFtIHRpbGVNYXRyaXggdGhlIHRpbGUg
bWF0cml4IHRvIHJldHVybiB0aWxlIHRvLgogICogQHBhcmFtIHQgdGhlIHRpbGUgaW5zdGFuY2Ug
dG8gcmV0dXJuLCBtdXN0IEBiIG5vdCBiZSBAYyAwLgotICogQHBhcmFtIGxhc3RfdXNlZCB0aW1l
IGluIHdoaWNoIHRpbGUgd2FzIGxhc3QgdXNlZC4KKyAqIEBwYXJhbSBsYXN0X3VzZWQgdGltZSBp
biB3aGljaCB0aWxlLndpZHRoYXMgbGFzdCB1c2VkLgogICoKICAqIEByZXR1cm4gI0VJTkFfVFJV
RSBvbiBzdWNjZXNzIG9yICNFSU5BX0ZBTFNFIG9uIGZhaWx1cmUuCiAgKi8KLUVpbmFfQm9vbCBl
d2tfdGlsZV9tYXRyaXhfdGlsZV9wdXQoRXdrX1RpbGVfTWF0cml4ICp0bSwgRXdrX1RpbGUgKnQs
IGRvdWJsZSBsYXN0X3VzZWQpCitFaW5hX0Jvb2wgZXdrX3RpbGVfbWF0cml4X3RpbGVfcHV0KEV3
a19UaWxlX01hdHJpeCogdGlsZU1hdHJpeCwgRXdrX1RpbGUqIHRpbGUsIGRvdWJsZSBsYXN0VXNl
ZCkKIHsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodG0sIEVJTkFfRkFMU0Up
OwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh0LCBFSU5BX0ZBTFNFKTsKKyAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodGlsZU1hdHJpeCwgRUlOQV9GQUxTRSk7
CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHRpbGUsIEVJTkFfRkFMU0UpOwog
Ci0gICAgaWYgKHQtPnZpc2libGUpCisgICAgaWYgKHRpbGUtPnZpc2libGUpCiAgICAgICAgIHJl
dHVybiBFSU5BX1RSVUU7CiAKLSAgICB0LT5zdGF0cy5sYXN0X3VzZWQgPSBsYXN0X3VzZWQ7Ci0g
ICAgcmV0dXJuIGV3a190aWxlX3VudXNlZF9jYWNoZV90aWxlX3B1dCh0bS0+dHVjLCB0LCBfZXdr
X3RpbGVfbWF0cml4X3RpbGVfZnJlZSwgdG0pOworICAgIHRpbGUtPnN0YXRzLmxhc3RfdXNlZCA9
IGxhc3RVc2VkOworICAgIHJldHVybiBld2tfdGlsZV91bnVzZWRfY2FjaGVfdGlsZV9wdXQodGls
ZU1hdHJpeC0+dHVjLCB0aWxlLCBfZXdrX3RpbGVfbWF0cml4X3RpbGVfZnJlZSwgdGlsZU1hdHJp
eCk7CiB9CiAKLUVpbmFfQm9vbCBld2tfdGlsZV9tYXRyaXhfdGlsZV91cGRhdGUoRXdrX1RpbGVf
TWF0cml4ICp0bSwgdW5zaWduZWQgbG9uZyBjb2wsIHVuc2lnbmVkIGxvbmcgcm93LCBjb25zdCBF
aW5hX1JlY3RhbmdsZSAqdXBkYXRlKQorRWluYV9Cb29sIGV3a190aWxlX21hdHJpeF90aWxlX3Vw
ZGF0ZShFd2tfVGlsZV9NYXRyaXgqIHRpbGVNYXRyaXgsIHVuc2lnbmVkIGxvbmcgY29sLCB1bnNp
Z25lZCBsb25nIHJvdywgY29uc3QgRWluYV9SZWN0YW5nbGUqIHVwZGF0ZSkKIHsKICAgICBFaW5h
X1JlY3RhbmdsZSBuZXdfdXBkYXRlOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZB
TCh0bSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHRp
bGVNYXRyaXgsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZB
TCh1cGRhdGUsIEVJTkFfRkFMU0UpOwogCiAgICAgbWVtY3B5KCZuZXdfdXBkYXRlLCB1cGRhdGUs
IHNpemVvZihuZXdfdXBkYXRlKSk7CkBAIC00MDEsNTkgKzQwMSw1OSBAQCBFaW5hX0Jvb2wgZXdr
X3RpbGVfbWF0cml4X3RpbGVfdXBkYXRlKEV3a19UaWxlX01hdHJpeCAqdG0sIHVuc2lnbmVkIGxv
bmcgY29sLCB1bgogICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKICAgICB9CiAKLSAgICBpZiAo
dXBkYXRlLT54ICsgdXBkYXRlLT53IC0gMSA+PSB0bS0+dGlsZS53KQotICAgICAgICBuZXdfdXBk
YXRlLncgPSB0bS0+dGlsZS53IC0gdXBkYXRlLT54OwotICAgIGlmICh1cGRhdGUtPnkgKyB1cGRh
dGUtPmggLSAxID49IHRtLT50aWxlLmgpCi0gICAgICAgIG5ld191cGRhdGUuaCA9IHRtLT50aWxl
LmggLSB1cGRhdGUtPnk7CisgICAgaWYgKHVwZGF0ZS0+eCArIHVwZGF0ZS0+dyAtIDEgPj0gdGls
ZU1hdHJpeC0+dGlsZS53aWR0aCkKKyAgICAgICAgbmV3X3VwZGF0ZS53ID0gdGlsZU1hdHJpeC0+
dGlsZS53aWR0aCAtIHVwZGF0ZS0+eDsKKyAgICBpZiAodXBkYXRlLT55ICsgdXBkYXRlLT5oIC0g
MSA+PSB0aWxlTWF0cml4LT50aWxlLmhlaWdodCkKKyAgICAgICAgbmV3X3VwZGF0ZS5oID0gdGls
ZU1hdHJpeC0+dGlsZS5oZWlnaHQgLSB1cGRhdGUtPnk7CiAKLSAgICBFd2tfVGlsZSogdCA9IHN0
YXRpY19jYXN0PEV3a19UaWxlKj4oZWluYV9tYXRyaXhzcGFyc2VfZGF0YV9pZHhfZ2V0KHRtLT5t
YXRyaXgsIHJvdywgY29sKSk7Ci0gICAgaWYgKCF0KQorICAgIEV3a19UaWxlKiB0aWxlID0gc3Rh
dGljX2Nhc3Q8RXdrX1RpbGUqPihlaW5hX21hdHJpeHNwYXJzZV9kYXRhX2lkeF9nZXQodGlsZU1h
dHJpeC0+bWF0cml4LCByb3csIGNvbCkpOworICAgIGlmICghdGlsZSkKICAgICAgICAgcmV0dXJu
IEVJTkFfVFJVRTsKIAotICAgIGlmICghdC0+dXBkYXRlcyAmJiAhdC0+c3RhdHMuZnVsbF91cGRh
dGUpCi0gICAgICAgIHRtLT51cGRhdGVzID0gZWluYV9saXN0X2FwcGVuZCh0bS0+dXBkYXRlcywg
dCk7Ci0gICAgZXdrX3RpbGVfdXBkYXRlX2FyZWEodCwgJm5ld191cGRhdGUpOworICAgIGlmICgh
dGlsZS0+dXBkYXRlcyAmJiAhdGlsZS0+c3RhdHMuZnVsbF91cGRhdGUpCisgICAgICAgIHRpbGVN
YXRyaXgtPnVwZGF0ZXMgPSBlaW5hX2xpc3RfYXBwZW5kKHRpbGVNYXRyaXgtPnVwZGF0ZXMsIHRp
bGUpOworICAgIGV3a190aWxlX3VwZGF0ZV9hcmVhKHRpbGUsICZuZXdfdXBkYXRlKTsKIAogICAg
IHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLUVpbmFfQm9vbCBld2tfdGlsZV9tYXRyaXhfdGlsZV91
cGRhdGVfZnVsbChFd2tfVGlsZV9NYXRyaXggKnRtLCB1bnNpZ25lZCBsb25nIGNvbCwgdW5zaWdu
ZWQgbG9uZyByb3cpCitFaW5hX0Jvb2wgZXdrX3RpbGVfbWF0cml4X3RpbGVfdXBkYXRlX2Z1bGwo
RXdrX1RpbGVfTWF0cml4KiB0aWxlTWF0cml4LCB1bnNpZ25lZCBsb25nIGNvbHVtbiwgdW5zaWdu
ZWQgbG9uZyByb3cpCiB7Ci0gICAgRWluYV9NYXRyaXhzcGFyc2VfQ2VsbCAqY2VsbDsKLSAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodG0sIEVJTkFfRkFMU0UpOworICAgIEVpbmFf
TWF0cml4c3BhcnNlX0NlbGwqIGNlbGw7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5f
VkFMKHRpbGVNYXRyaXgsIEVJTkFfRkFMU0UpOwogCi0gICAgaWYgKCFlaW5hX21hdHJpeHNwYXJz
ZV9jZWxsX2lkeF9nZXQodG0tPm1hdHJpeCwgcm93LCBjb2wsICZjZWxsKSkKKyAgICBpZiAoIWVp
bmFfbWF0cml4c3BhcnNlX2NlbGxfaWR4X2dldCh0aWxlTWF0cml4LT5tYXRyaXgsIHJvdywgY29s
dW1uLCAmY2VsbCkpCiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwogCiAgICAgaWYgKCFjZWxs
KQogICAgICAgICByZXR1cm4gRUlOQV9UUlVFOwogCi0gICAgRXdrX1RpbGUqIHQgPSBzdGF0aWNf
Y2FzdDxFd2tfVGlsZSo+KGVpbmFfbWF0cml4c3BhcnNlX2NlbGxfZGF0YV9nZXQoY2VsbCkpOwot
ICAgIGlmICghdCkgeworICAgIEV3a19UaWxlKiB0aWxlID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGUq
PihlaW5hX21hdHJpeHNwYXJzZV9jZWxsX2RhdGFfZ2V0KGNlbGwpKTsKKyAgICBpZiAoIXRpbGUp
IHsKICAgICAgICAgQ1JJVElDQUwoIm1hdHJpeCBjZWxsIHdpdGggbm8gdGlsZSEiKTsKICAgICAg
ICAgcmV0dXJuIEVJTkFfVFJVRTsKICAgICB9CiAKLSAgICBpZiAoIXQtPnVwZGF0ZXMgJiYgIXQt
PnN0YXRzLmZ1bGxfdXBkYXRlKQotICAgICAgICB0bS0+dXBkYXRlcyA9IGVpbmFfbGlzdF9hcHBl
bmQodG0tPnVwZGF0ZXMsIHQpOwotICAgIGV3a190aWxlX3VwZGF0ZV9mdWxsKHQpOworICAgIGlm
ICghdGlsZS0+dXBkYXRlcyAmJiAhdGlsZS0+c3RhdHMuZnVsbF91cGRhdGUpCisgICAgICAgIHRp
bGVNYXRyaXgtPnVwZGF0ZXMgPSBlaW5hX2xpc3RfYXBwZW5kKHRpbGVNYXRyaXgtPnVwZGF0ZXMs
IHRpbGUpOworICAgIGV3a190aWxlX3VwZGF0ZV9mdWxsKHRpbGUpOwogCiAgICAgcmV0dXJuIEVJ
TkFfVFJVRTsKIH0KIAotdm9pZCBld2tfdGlsZV9tYXRyaXhfdGlsZV91cGRhdGVzX2NsZWFyKEV3
a19UaWxlX01hdHJpeCAqdG0sIEV3a19UaWxlICp0KQordm9pZCBld2tfdGlsZV9tYXRyaXhfdGls
ZV91cGRhdGVzX2NsZWFyKEV3a19UaWxlX01hdHJpeCogdGlsZU1hdHJpeCwgRXdrX1RpbGUqIHRp
bGUpCiB7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4odG0pOwotICAgIGlmICghdC0+
dXBkYXRlcyAmJiAhdC0+c3RhdHMuZnVsbF91cGRhdGUpCisgICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk4odGlsZU1hdHJpeCk7CisgICAgaWYgKCF0aWxlLT51cGRhdGVzICYmICF0aWxlLT5z
dGF0cy5mdWxsX3VwZGF0ZSkKICAgICAgICAgcmV0dXJuOwotICAgIGV3a190aWxlX3VwZGF0ZXNf
Y2xlYXIodCk7Ci0gICAgdG0tPnVwZGF0ZXMgPSBlaW5hX2xpc3RfcmVtb3ZlKHRtLT51cGRhdGVz
LCB0KTsKKyAgICBld2tfdGlsZV91cGRhdGVzX2NsZWFyKHRpbGUpOworICAgIHRpbGVNYXRyaXgt
PnVwZGF0ZXMgPSBlaW5hX2xpc3RfcmVtb3ZlKHRpbGVNYXRyaXgtPnVwZGF0ZXMsIHRpbGUpOwog
fQogCi1zdGF0aWMgRWluYV9Cb29sIF9ld2tfdGlsZV9tYXRyaXhfc2xpY2VyX3NldHVwKEV3a19U
aWxlX01hdHJpeCAqdG0sIGNvbnN0IEVpbmFfUmVjdGFuZ2xlICphcmVhLCBmbG9hdCB6b29tLCBF
aW5hX1RpbGVfR3JpZF9TbGljZXIgKnNsaWNlcikKK3N0YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxl
X21hdHJpeF9zbGljZXJfc2V0dXAoRXdrX1RpbGVfTWF0cml4KiB0aWxlTWF0cml4LCBjb25zdCBF
aW5hX1JlY3RhbmdsZSogYXJlYSwgZmxvYXQgem9vbSwgRWluYV9UaWxlX0dyaWRfU2xpY2VyKiBz
bGljZXIpCiB7CiAgICAgdW5zaWduZWQgbG9uZyByb3dzLCBjb2xzOwotICAgIEV2YXNfQ29vcmQg
eCwgeSwgdywgaCwgdHcsIHRoOworICAgIEV2YXNfQ29vcmQgeCwgeSwgd2lkdGgsIGhlaWdodCwg
dHcsIHRoOwogCiAgICAgaWYgKGFyZWEtPncgPD0gMCB8fCBhcmVhLT5oIDw9IDApIHsKICAgICAg
ICAgV1JOKCJpbnZhbGlkIGFyZWEgcmVnaW9uOiAlZCwlZCslZHglZC4iLApAQCAtNDYzLDM3ICs0
NjMsMzcgQEAgc3RhdGljIEVpbmFfQm9vbCBfZXdrX3RpbGVfbWF0cml4X3NsaWNlcl9zZXR1cChF
d2tfVGlsZV9NYXRyaXggKnRtLCBjb25zdCBFaW5hX1IKIAogICAgIHggPSBhcmVhLT54OwogICAg
IHkgPSBhcmVhLT55OwotICAgIHcgPSBhcmVhLT53OwotICAgIGggPSBhcmVhLT5oOworICAgIHdp
ZHRoID0gYXJlYS0+dzsKKyAgICBoZWlnaHQgPSBhcmVhLT5oOwogCi0gICAgdHcgPSB0bS0+dGls
ZS53OwotICAgIHRoID0gdG0tPnRpbGUuaDsKKyAgICB0dyA9IHRpbGVNYXRyaXgtPnRpbGUud2lk
dGg7CisgICAgdGggPSB0aWxlTWF0cml4LT50aWxlLmhlaWdodDsKIAogICAgIC8vIGNyb3BwaW5n
IGFyZWEgcmVnaW9uIHRvIGZpdCBtYXRyaXgKLSAgICBlaW5hX21hdHJpeHNwYXJzZV9zaXplX2dl
dCh0bS0+bWF0cml4LCAmcm93cywgJmNvbHMpOworICAgIGVpbmFfbWF0cml4c3BhcnNlX3NpemVf
Z2V0KHRpbGVNYXRyaXgtPm1hdHJpeCwgJnJvd3MsICZjb2xzKTsKICAgICBpZiAoeCA8IDApIHsK
LSAgICAgICAgdyArPSB4OworICAgICAgICB3aWR0aCArPSB4OwogICAgICAgICB4ID0gMDsKICAg
ICB9CiAgICAgaWYgKHkgPCAwKSB7Ci0gICAgICAgIGggKz0geTsKKyAgICAgICAgaGVpZ2h0ICs9
IHk7CiAgICAgICAgIHkgPSAwOwogICAgIH0KIAotICAgIGlmICh5ICsgaCAtIDEgPiAobG9uZyko
cm93cyAqIHRoKSkKLSAgICAgICAgaCA9IHJvd3MgKiB0aCAtIHk7Ci0gICAgaWYgKHggKyB3IC0g
MSA+IChsb25nKShjb2xzICogdHcpKQotICAgICAgICB3ID0gY29scyAqIHR3IC0geDsKKyAgICBp
ZiAoeSArIGhlaWdodCAtIDEgPiAobG9uZykocm93cyAqIHRoKSkKKyAgICAgICAgaGVpZ2h0ID0g
cm93cyAqIHRoIC0geTsKKyAgICBpZiAoeCArIHdpZHRoIC0gMSA+IChsb25nKShjb2xzICogdHcp
KQorICAgICAgICB3aWR0aCA9IGNvbHMgKiB0dyAtIHg7CiAKLSAgICByZXR1cm4gZWluYV90aWxl
X2dyaWRfc2xpY2VyX3NldHVwKHNsaWNlciwgeCwgeSwgdywgaCwgdHcsIHRoKTsKKyAgICByZXR1
cm4gZWluYV90aWxlX2dyaWRfc2xpY2VyX3NldHVwKHNsaWNlciwgeCwgeSwgd2lkdGgsIGhlaWdo
dCwgdHcsIHRoKTsKIH0KIAogCi1FaW5hX0Jvb2wgZXdrX3RpbGVfbWF0cml4X3VwZGF0ZShFd2tf
VGlsZV9NYXRyaXggKnRtLCBjb25zdCBFaW5hX1JlY3RhbmdsZSAqdXBkYXRlLCBmbG9hdCB6b29t
KQorRWluYV9Cb29sIGV3a190aWxlX21hdHJpeF91cGRhdGUoRXdrX1RpbGVfTWF0cml4KiB0aWxl
TWF0cml4LCBjb25zdCBFaW5hX1JlY3RhbmdsZSogdXBkYXRlLCBmbG9hdCB6b29tKQogewotICAg
IGNvbnN0IEVpbmFfVGlsZV9HcmlkX0luZm8gKmluZm87CisgICAgY29uc3QgRWluYV9UaWxlX0dy
aWRfSW5mbyogaW5mbzsKICAgICBFaW5hX1RpbGVfR3JpZF9TbGljZXIgc2xpY2VyOwotICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh0bSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHRpbGVNYXRyaXgsIEVJTkFfRkFMU0UpOwogICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh1cGRhdGUsIEVJTkFfRkFMU0UpOwogCiAgICAg
aWYgKHVwZGF0ZS0+dyA8IDEgfHwgdXBkYXRlLT5oIDwgMSkgewpAQCAtNTAyLDcgKzUwMiw3IEBA
IEVpbmFfQm9vbCBld2tfdGlsZV9tYXRyaXhfdXBkYXRlKEV3a19UaWxlX01hdHJpeCAqdG0sIGNv
bnN0IEVpbmFfUmVjdGFuZ2xlICp1cGRhCiAgICAgICAgIHJldHVybiBFSU5BX1RSVUU7CiAgICAg
fQogCi0gICAgaWYgKCFfZXdrX3RpbGVfbWF0cml4X3NsaWNlcl9zZXR1cCh0bSwgdXBkYXRlLCB6
b29tLCAmc2xpY2VyKSkgeworICAgIGlmICghX2V3a190aWxlX21hdHJpeF9zbGljZXJfc2V0dXAo
dGlsZU1hdHJpeCwgdXBkYXRlLCB6b29tLCAmc2xpY2VyKSkgewogICAgICAgICBFUlIoIkNvdWxk
IG5vdCBzZXR1cCBzbGljZXIgZm9yIHVwZGF0ZSAlZCwlZCslZHglZCBhdCB6b29tICVmIiwKICAg
ICAgICAgICAgIHVwZGF0ZS0+eCwgdXBkYXRlLT55LCB1cGRhdGUtPncsIHVwZGF0ZS0+aCwgem9v
bSk7CiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwpAQCAtNTEzLDU5ICs1MTMsNTkgQEAgRWlu
YV9Cb29sIGV3a190aWxlX21hdHJpeF91cGRhdGUoRXdrX1RpbGVfTWF0cml4ICp0bSwgY29uc3Qg
RWluYV9SZWN0YW5nbGUgKnVwZGEKICAgICAgICAgY29sID0gaW5mby0+Y29sOwogICAgICAgICBy
b3cgPSBpbmZvLT5yb3c7CiAKLSAgICAgICAgRXdrX1RpbGUqIHQgPSBzdGF0aWNfY2FzdDxFd2tf
VGlsZSo+KGVpbmFfbWF0cml4c3BhcnNlX2RhdGFfaWR4X2dldCh0bS0+bWF0cml4LCByb3csIGNv
bCkpOwotICAgICAgICBpZiAoIXQpCisgICAgICAgIEV3a19UaWxlKiB0aWxlID0gc3RhdGljX2Nh
c3Q8RXdrX1RpbGUqPihlaW5hX21hdHJpeHNwYXJzZV9kYXRhX2lkeF9nZXQodGlsZU1hdHJpeC0+
bWF0cml4LCByb3csIGNvbCkpOworICAgICAgICBpZiAoIXRpbGUpCiAgICAgICAgICAgICBjb250
aW51ZTsKIAotICAgICAgICBpZiAoIXQtPnVwZGF0ZXMgJiYgIXQtPnN0YXRzLmZ1bGxfdXBkYXRl
KQotICAgICAgICAgICAgdG0tPnVwZGF0ZXMgPSBlaW5hX2xpc3RfYXBwZW5kKHRtLT51cGRhdGVz
LCB0KTsKKyAgICAgICAgaWYgKCF0aWxlLT51cGRhdGVzICYmICF0aWxlLT5zdGF0cy5mdWxsX3Vw
ZGF0ZSkKKyAgICAgICAgICAgIHRpbGVNYXRyaXgtPnVwZGF0ZXMgPSBlaW5hX2xpc3RfYXBwZW5k
KHRpbGVNYXRyaXgtPnVwZGF0ZXMsIHRpbGUpOwogICAgICAgICBpZiAoaW5mby0+ZnVsbCkKLSAg
ICAgICAgICAgIGV3a190aWxlX3VwZGF0ZV9mdWxsKHQpOworICAgICAgICAgICAgZXdrX3RpbGVf
dXBkYXRlX2Z1bGwodGlsZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGV3a190aWxlX3Vw
ZGF0ZV9hcmVhKHQsICZpbmZvLT5yZWN0KTsKKyAgICAgICAgICAgIGV3a190aWxlX3VwZGF0ZV9h
cmVhKHRpbGUsICZpbmZvLT5yZWN0KTsKICAgICB9CiAKIAogICAgIHJldHVybiBFSU5BX1RSVUU7
CiB9CiAKLXZvaWQgZXdrX3RpbGVfbWF0cml4X3VwZGF0ZXNfcHJvY2VzcyhFd2tfVGlsZV9NYXRy
aXggKnRtKQordm9pZCBld2tfdGlsZV9tYXRyaXhfdXBkYXRlc19wcm9jZXNzKEV3a19UaWxlX01h
dHJpeCogdGlsZU1hdHJpeCkKIHsKLSAgICBFaW5hX0xpc3QgKmwsICpsX25leHQ7CisgICAgRWlu
YV9MaXN0KiBsLCAqIGxfbmV4dDsKICAgICB2b2lkKiBpdGVtOwotICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOKHRtKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0aWxlTWF0
cml4KTsKIAogICAgIC8vIHByb2Nlc3MgdXBkYXRlcywgdW5mbGFnIHRpbGVzCi0gICAgRUlOQV9M
SVNUX0ZPUkVBQ0hfU0FGRSh0bS0+dXBkYXRlcywgbCwgbF9uZXh0LCBpdGVtKSB7CisgICAgRUlO
QV9MSVNUX0ZPUkVBQ0hfU0FGRSh0aWxlTWF0cml4LT51cGRhdGVzLCBsLCBsX25leHQsIGl0ZW0p
IHsKICAgICAgICAgRXdrX1RpbGUqIHRpbGUgPSBzdGF0aWNfY2FzdDxFd2tfVGlsZSo+KGl0ZW0p
OwotICAgICAgICBld2tfdGlsZV91cGRhdGVzX3Byb2Nlc3ModGlsZSwgdG0tPnJlbmRlci5jYiwg
dG0tPnJlbmRlci5kYXRhKTsKKyAgICAgICAgZXdrX3RpbGVfdXBkYXRlc19wcm9jZXNzKHRpbGUs
IHRpbGVNYXRyaXgtPnJlbmRlci5jYiwgdGlsZU1hdHJpeC0+cmVuZGVyLmRhdGEpOwogICAgICAg
ICBpZiAodGlsZS0+dmlzaWJsZSkgewogICAgICAgICAgICAgZXdrX3RpbGVfdXBkYXRlc19jbGVh
cih0aWxlKTsKLSAgICAgICAgICAgIHRtLT51cGRhdGVzID0gZWluYV9saXN0X3JlbW92ZV9saXN0
KHRtLT51cGRhdGVzLCBsKTsKKyAgICAgICAgICAgIHRpbGVNYXRyaXgtPnVwZGF0ZXMgPSBlaW5h
X2xpc3RfcmVtb3ZlX2xpc3QodGlsZU1hdHJpeC0+dXBkYXRlcywgbCk7CiAgICAgICAgIH0KICAg
ICB9CiB9CiAKLXZvaWQgZXdrX3RpbGVfbWF0cml4X3VwZGF0ZXNfY2xlYXIoRXdrX1RpbGVfTWF0
cml4ICp0bSkKK3ZvaWQgZXdrX3RpbGVfbWF0cml4X3VwZGF0ZXNfY2xlYXIoRXdrX1RpbGVfTWF0
cml4KiB0aWxlTWF0cml4KQogewogICAgIHZvaWQqIGl0ZW07Ci0gICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk4odG0pOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHRpbGVNYXRy
aXgpOwogCi0gICAgRUlOQV9MSVNUX0ZSRUUodG0tPnVwZGF0ZXMsIGl0ZW0pCisgICAgRUlOQV9M
SVNUX0ZSRUUodGlsZU1hdHJpeC0+dXBkYXRlcywgaXRlbSkKICAgICAgICAgZXdrX3RpbGVfdXBk
YXRlc19jbGVhcihzdGF0aWNfY2FzdDxFd2tfVGlsZSo+KGl0ZW0pKTsKLSAgICB0bS0+dXBkYXRl
cyA9IDA7CisgICAgdGlsZU1hdHJpeC0+dXBkYXRlcyA9IDA7CiB9CiAKIC8vIHJlbW92ZSBtZSBs
YXRlciEKLXZvaWQgZXdrX3RpbGVfbWF0cml4X2RiZyhjb25zdCBFd2tfVGlsZV9NYXRyaXggKnRt
KQordm9pZCBld2tfdGlsZV9tYXRyaXhfZGJnKGNvbnN0IEV3a19UaWxlX01hdHJpeCogdGlsZU1h
dHJpeCkKIHsKLSAgICBFaW5hX0l0ZXJhdG9yICppdCA9IGVpbmFfbWF0cml4c3BhcnNlX2l0ZXJh
dG9yX2NvbXBsZXRlX25ldyh0bS0+bWF0cml4KTsKLSAgICBFaW5hX01hdHJpeHNwYXJzZV9DZWxs
ICpjZWxsOworICAgIEVpbmFfSXRlcmF0b3IqIGl0ID0gZWluYV9tYXRyaXhzcGFyc2VfaXRlcmF0
b3JfY29tcGxldGVfbmV3KHRpbGVNYXRyaXgtPm1hdHJpeCk7CisgICAgRWluYV9NYXRyaXhzcGFy
c2VfQ2VsbCogY2VsbDsKICAgICBFaW5hX0Jvb2wgbGFzdF9lbXB0eSA9IEVJTkFfRkFMU0U7CiAK
ICNpZmRlZiBERUJVR19NRU1fTEVBS1MKLSAgICBwcmludGYoIkV3a19UaWxlIE1hdHJpeDogdGls
ZXNbKyUiUFJJdTY0IiwtJSJQUkl1NjQiOiUiUFJJdTY0Il0gIgotICAgICAgICAgICAiYnl0ZXNb
KyUiUFJJdTY0IiwtJSJQUkl1NjQiOiUiUFJJdTY0Il1cbiIsCisgICAgcHJpbnRmKCJFd2tfVGls
ZSBNYXRyaXg6IHRpbGVzWyslIiBQUkl1NjQgIiwtJSIgUFJJdTY0ICI6JSIgUFJJdTY0ICJdICIK
KyAgICAgICAgICAgImJ5dGVzWyslIiBQUkl1NjQgIiwtJSIgUFJJdTY0ICI6JSIgUFJJdTY0ICJd
XG4iLAogICAgICAgICAgICB0bS0+c3RhdHMudGlsZXMuYWxsb2NhdGVkLCB0bS0+c3RhdHMudGls
ZXMuZnJlZWQsCiAgICAgICAgICAgIHRtLT5zdGF0cy50aWxlcy5hbGxvY2F0ZWQgLSB0bS0+c3Rh
dHMudGlsZXMuZnJlZWQsCiAgICAgICAgICAgIHRtLT5zdGF0cy5ieXRlcy5hbGxvY2F0ZWQsIHRt
LT5zdGF0cy5ieXRlcy5mcmVlZCwKQEAgLTU3OCw4ICs1NzgsOCBAQCB2b2lkIGV3a190aWxlX21h
dHJpeF9kYmcoY29uc3QgRXdrX1RpbGVfTWF0cml4ICp0bSkKICAgICAgICAgdW5zaWduZWQgbG9u
ZyByb3csIGNvbDsKICAgICAgICAgZWluYV9tYXRyaXhzcGFyc2VfY2VsbF9wb3NpdGlvbl9nZXQo
Y2VsbCwgJnJvdywgJmNvbCk7CiAKLSAgICAgICAgRXdrX1RpbGUqIHQgPSBzdGF0aWNfY2FzdDxF
d2tfVGlsZSo+KGVpbmFfbWF0cml4c3BhcnNlX2NlbGxfZGF0YV9nZXQoY2VsbCkpOwotICAgICAg
ICBpZiAoIXQpIHsKKyAgICAgICAgRXdrX1RpbGUqIHRpbGUgPSBzdGF0aWNfY2FzdDxFd2tfVGls
ZSo+KGVpbmFfbWF0cml4c3BhcnNlX2NlbGxfZGF0YV9nZXQoY2VsbCkpOworICAgICAgICBpZiAo
IXRpbGUpIHsKICAgICAgICAgICAgIGlmICghbGFzdF9lbXB0eSkgewogICAgICAgICAgICAgICAg
IGxhc3RfZW1wdHkgPSBFSU5BX1RSVUU7CiAgICAgICAgICAgICAgICAgcHJpbnRmKCJFbXB0eToi
KTsKQEAgLTU5MCw4ICs1OTAsOCBAQCB2b2lkIGV3a190aWxlX21hdHJpeF9kYmcoY29uc3QgRXdr
X1RpbGVfTWF0cml4ICp0bSkKICAgICAgICAgICAgICAgICBsYXN0X2VtcHR5ID0gRUlOQV9GQUxT
RTsKICAgICAgICAgICAgICAgICBwcmludGYoIlxuIik7CiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBwcmludGYoIiUzbHUsJTNsdSAlMTBwOiIsIGNvbCwgcm93LCB0KTsKLSAgICAgICAgICAg
IHByaW50ZigiIFslM2x1LCUzbHUgKyAlZHglZCBAICUwLjNmXSVjIiwgdC0+Y29sLCB0LT5yb3cs
IHQtPncsIHQtPmgsIHQtPnpvb20sIHQtPnZpc2libGUgPyAnKic6ICcgJyk7CisgICAgICAgICAg
ICBwcmludGYoIiUzbHUsJTNsdSAlMTBwOiIsIGNvbCwgcm93LCB0aWxlKTsKKyAgICAgICAgICAg
IHByaW50ZigiIFslM2x1LCUzbHUgKyAlZHglZCBAICUwLjNmXSVjIiwgdGlsZS0+Y29sLCB0aWxl
LT5yb3csIHRpbGUtPndpZHRoLCB0aWxlLT5oZWlnaHQsIHRpbGUtPnpvb20sIHRpbGUtPnZpc2li
bGUgPyAnKicgOiAnICcpOwogICAgICAgICAgICAgcHJpbnRmKCJcbiIpOwogICAgICAgICB9CiAg
ICAgfQpAQCAtNTk5LDcgKzU5OSw3IEBAIHZvaWQgZXdrX3RpbGVfbWF0cml4X2RiZyhjb25zdCBF
d2tfVGlsZV9NYXRyaXggKnRtKQogICAgICAgICBwcmludGYoIlxuIik7CiAgICAgZWluYV9pdGVy
YXRvcl9mcmVlKGl0KTsKIAotICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9kYmcodG0tPnR1Yyk7
CisgICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2RiZyh0aWxlTWF0cml4LT50dWMpOwogfQogCiAv
KioKQEAgLTYxMSwxMiArNjExLDEyIEBAIHZvaWQgZXdrX3RpbGVfbWF0cml4X2RiZyhjb25zdCBF
d2tfVGlsZV9NYXRyaXggKnRtKQogICoKICAqIEBzZWUgZXdrX3RpbGVfbWF0cml4X3RoYXcoKQog
ICovCi12b2lkIGV3a190aWxlX21hdHJpeF9mcmVlemUoRXdrX1RpbGVfTWF0cml4ICp0bSkKK3Zv
aWQgZXdrX3RpbGVfbWF0cml4X2ZyZWV6ZShFd2tfVGlsZV9NYXRyaXgqIHRpbGVNYXRyaXgpCiB7
Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4odG0pOwotICAgIGlmICghdG0tPmZyb3pl
bikKLSAgICAgICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2ZyZWV6ZSh0bS0+dHVjKTsKLSAgICB0
bS0+ZnJvemVuKys7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4odGlsZU1hdHJpeCk7
CisgICAgaWYgKCF0aWxlTWF0cml4LT5mcm96ZW4pCisgICAgICAgIGV3a190aWxlX3VudXNlZF9j
YWNoZV9mcmVlemUodGlsZU1hdHJpeC0+dHVjKTsKKyAgICB0aWxlTWF0cml4LT5mcm96ZW4rKzsK
IH0KIAogLyoqCkBAIC02MjUsMTUgKzYyNSwxNSBAQCB2b2lkIGV3a190aWxlX21hdHJpeF9mcmVl
emUoRXdrX1RpbGVfTWF0cml4ICp0bSkKICAqIElmIHRoaXMgaXMgdGhlIGxhc3QgY291bnRlcnBh
cnQgb2YgZnJlZXplLCB0aGVuIG1haW50ZW5hbmNlIHRhc2tzCiAgKiB3aWxsIHJ1biBpbW1lZGlh
dGVseS4KICAqLwotdm9pZCBld2tfdGlsZV9tYXRyaXhfdGhhdyhFd2tfVGlsZV9NYXRyaXggKnRt
KQordm9pZCBld2tfdGlsZV9tYXRyaXhfdGhhdyhFd2tfVGlsZV9NYXRyaXgqIHRpbGVNYXRyaXgp
CiB7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4odG0pOwotICAgIGlmICghdG0tPmZy
b3plbikgeworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHRpbGVNYXRyaXgpOworICAg
IGlmICghdGlsZU1hdHJpeC0+ZnJvemVuKSB7CiAgICAgICAgIEVSUigidGhhd2luZyBtb3JlIHRo
YW4gZnJlZXppbmchIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICB0bS0+ZnJvemVu
LS07Ci0gICAgaWYgKCF0bS0+ZnJvemVuKQotICAgICAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVf
dGhhdyh0bS0+dHVjKTsKKyAgICB0aWxlTWF0cml4LT5mcm96ZW4tLTsKKyAgICBpZiAoIXRpbGVN
YXRyaXgtPmZyb3plbikKKyAgICAgICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3RoYXcodGlsZU1h
dHJpeC0+dHVjKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGls
ZWRfbWF0cml4LmggYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX21hdHJpeC5oCmlu
ZGV4IGM0MzdjMzdiYzkyOTY3ODhhYTVmMzgxNzMyNWQyYTRmMWE4ODVhYTQuLmQzZGM1MTcxMjU2
MjMwNDc2ODBiZjc2ZDk2MmQ0YzA0ZmZjMjJhOGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
ZWZsL2V3ay9ld2tfdGlsZWRfbWF0cml4LmgKKysrIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3
a190aWxlZF9tYXRyaXguaApAQCAtNTIsNyArNTIsNyBAQCB2b2lkIGV3a190aWxlX21hdHJpeF90
aGF3KEV3a19UaWxlX01hdHJpeCogdG0pOwogLy8gcmVtb3ZlIG1lIQogdm9pZCBld2tfdGlsZV9t
YXRyaXhfZGJnKGNvbnN0IEV3a19UaWxlX01hdHJpeCogdG0pOwogdm9pZCBld2tfdGlsZV91bnVz
ZWRfY2FjaGVfZGJnKGNvbnN0IEV3a19UaWxlX1VudXNlZF9DYWNoZSogdHVjKTsKLXZvaWQgZXdr
X3RpbGVfYWNjb3VudGluZ19kYmcodm9pZCk7Cit2b2lkIGV3a190aWxlX2FjY291bnRpbmdfZGJn
KCk7CiAKIAogI2VuZGlmIC8vIGV3a190aWxlZF9tYXRyaXhfaApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9lZmwvZXdrL2V3a190aWxlZF9tb2RlbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC9l
d2svZXdrX3RpbGVkX21vZGVsLmNwcAppbmRleCA2MTY4NTcyOTQwODk5YmRiZTg3MWQ2MzAxZmZk
Y2IxNGFjNDUzYmJkLi4yMDliMGMzOWYxNjc4ZWFiMTM4MjliNjU4YTVjMzdiOWEwNDBhZTNlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX21vZGVsLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX21vZGVsLmNwcApAQCAtMzYsNyArMzYs
NyBAQAogI2luY2x1ZGUgPHN5cy90aW1lLmg+CiAjZW5kaWYKIAotI2RlZmluZSBJRFgoY29sLCBy
b3csIHJvd3NwYW4pIChjb2wgKyAocm93ICogcm93c3BhbikpCisjZGVmaW5lIElEWChjb2wsIHJv
dywgcm93c3BhbikgKGNvbCArIChyb3dpZHRoICogcm93c3BhbikpCiAKICNpZmRlZiBERUJVR19N
RU1fTEVBS1MKIHN0YXRpYyB1aW50NjRfdCB0aWxlc19hbGxvY2F0ZWQgPSAwOwpAQCAtNTMsMTUg
KzUzLDE1IEBAIHN0cnVjdCB0aWxlX2FjY291bnQgewogfTsKIAogc3RhdGljIHNpemVfdCBhY2Nv
dW50aW5nX2xlbiA9IDA7Ci1zdGF0aWMgc3RydWN0IHRpbGVfYWNjb3VudCAqYWNjb3VudGluZyA9
IDA7CitzdGF0aWMgc3RydWN0IHRpbGVfYWNjb3VudCogYWNjb3VudGluZyA9IDA7CiAKLXN0YXRp
YyBpbmxpbmUgc3RydWN0IHRpbGVfYWNjb3VudCAqX2V3a190aWxlX2FjY291bnRfZ2V0KGNvbnN0
IEV3a19UaWxlICp0KQorc3RhdGljIGlubGluZSBzdHJ1Y3QgdGlsZV9hY2NvdW50KiBfZXdrX3Rp
bGVfYWNjb3VudF9nZXQoY29uc3QgRXdrX1RpbGUqIHRpbGUpCiB7Ci0gICAgc3RydWN0IHRpbGVf
YWNjb3VudCAqYWNjOworICAgIHN0cnVjdCB0aWxlX2FjY291bnQqIGFjYzsKICAgICBzaXplX3Qg
aTsKIAogICAgIGZvciAoaSA9IDA7IGkgPCBhY2NvdW50aW5nX2xlbjsgaSsrKSB7Ci0gICAgICAg
IGlmIChhY2NvdW50aW5nW2ldLnNpemUgPT0gdC0+dykKKyAgICAgICAgaWYgKGFjY291bnRpbmdb
aV0uc2l6ZSA9PSB0aWxlLT53aWR0aCkKICAgICAgICAgICAgIHJldHVybiBhY2NvdW50aW5nICsg
aTsKICAgICB9CiAKQEAgLTY5LDcgKzY5LDcgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3QgdGlsZV9h
Y2NvdW50ICpfZXdrX3RpbGVfYWNjb3VudF9nZXQoY29uc3QgRXdrX1RpbGUgKnQpCiAgICAgUkVB
TExPQ19PUl9PT01fUkVUKGFjY291bnRpbmcsIGksIDApOwogCiAgICAgYWNjID0gYWNjb3VudGlu
ZyArIGFjY291bnRpbmdfbGVuOwotICAgIGFjYy0+c2l6ZSA9IHQtPnc7CisgICAgYWNjLT5zaXpl
ID0gdGlsZS0+d2lkdGg7CiAgICAgYWNjLT50aWxlcy5hbGxvY2F0ZWQgPSAwOwogICAgIGFjYy0+
dGlsZXMuZnJlZWQgPSAwOwogICAgIGFjYy0+Ynl0ZXMuYWxsb2NhdGVkID0gMDsKQEAgLTgwLDQw
ICs4MCw0MCBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCB0aWxlX2FjY291bnQgKl9ld2tfdGlsZV9h
Y2NvdW50X2dldChjb25zdCBFd2tfVGlsZSAqdCkKICAgICByZXR1cm4gYWNjOwogfQogCi1zdGF0
aWMgaW5saW5lIHZvaWQgX2V3a190aWxlX2FjY291bnRfYWxsb2NhdGVkKGNvbnN0IEV3a19UaWxl
ICp0KQorc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZV9hY2NvdW50X2FsbG9jYXRlZChjb25z
dCBFd2tfVGlsZSogdGlsZSkKIHsKLSAgICBzdHJ1Y3QgdGlsZV9hY2NvdW50ICphY2MgPSBfZXdr
X3RpbGVfYWNjb3VudF9nZXQodCk7CisgICAgc3RydWN0IHRpbGVfYWNjb3VudCogYWNjID0gX2V3
a190aWxlX2FjY291bnRfZ2V0KHRpbGUpOwogICAgIGlmICghYWNjKQogICAgICAgICByZXR1cm47
Ci0gICAgYWNjLT5ieXRlcy5hbGxvY2F0ZWQgKz0gdC0+Ynl0ZXM7CisgICAgYWNjLT5ieXRlcy5h
bGxvY2F0ZWQgKz0gdGlsZS0+Ynl0ZXM7CiAgICAgYWNjLT50aWxlcy5hbGxvY2F0ZWQrKzsKIAot
ICAgIGJ5dGVzX2FsbG9jYXRlZCArPSB0LT5ieXRlczsKKyAgICBieXRlc19hbGxvY2F0ZWQgKz0g
dGlsZS0+Ynl0ZXM7CiAgICAgdGlsZXNfYWxsb2NhdGVkKys7CiB9CiAKLXN0YXRpYyBpbmxpbmUg
dm9pZCBfZXdrX3RpbGVfYWNjb3VudF9mcmVlZChjb25zdCBFd2tfVGlsZSAqdCkKK3N0YXRpYyBp
bmxpbmUgdm9pZCBfZXdrX3RpbGVfYWNjb3VudF9mcmVlZChjb25zdCBFd2tfVGlsZSogdGlsZSkK
IHsKLSAgICBzdHJ1Y3QgdGlsZV9hY2NvdW50ICphY2MgPSBfZXdrX3RpbGVfYWNjb3VudF9nZXQo
dCk7CisgICAgc3RydWN0IHRpbGVfYWNjb3VudCogYWNjID0gX2V3a190aWxlX2FjY291bnRfZ2V0
KHRpbGUpOwogICAgIGlmICghYWNjKQogICAgICAgICByZXR1cm47CiAKLSAgICBhY2MtPmJ5dGVz
LmZyZWVkICs9IHQtPmJ5dGVzOworICAgIGFjYy0+Ynl0ZXMuZnJlZWQgKz0gdGlsZS0+Ynl0ZXM7
CiAgICAgYWNjLT50aWxlcy5mcmVlZCsrOwogCi0gICAgYnl0ZXNfZnJlZWQgKz0gdC0+Ynl0ZXM7
CisgICAgYnl0ZXNfZnJlZWQgKz0gdGlsZS0+Ynl0ZXM7CiAgICAgdGlsZXNfZnJlZWQrKzsKIH0K
IAotdm9pZCBld2tfdGlsZV9hY2NvdW50aW5nX2RiZyh2b2lkKQordm9pZCBld2tfdGlsZV9hY2Nv
dW50aW5nX2RiZygpCiB7Ci0gICAgc3RydWN0IHRpbGVfYWNjb3VudCAqYWNjOwotICAgIHN0cnVj
dCB0aWxlX2FjY291bnQgKmFjY19lbmQ7CisgICAgc3RydWN0IHRpbGVfYWNjb3VudCogYWNjOwor
ICAgIHN0cnVjdCB0aWxlX2FjY291bnQqIGFjY19lbmQ7CiAKLSAgICBwcmludGYoIlRJTEUgQkFM
QU5DRTogdGlsZXNbKyUiUFJJdTY0IiwtJSJQUkl1NjQiOiUiUFJJdTY0Il0gIgotICAgICAgICAg
ICAiYnl0ZXNbKyUiUFJJdTY0IiwtJSJQUkl1NjQiOiUiUFJJdTY0Il1cbiIsCi0gICAgICAgICAg
ICB0aWxlc19hbGxvY2F0ZWQsIHRpbGVzX2ZyZWVkLCB0aWxlc19hbGxvY2F0ZWQgLSB0aWxlc19m
cmVlZCwKLSAgICAgICAgICAgIGJ5dGVzX2FsbG9jYXRlZCwgYnl0ZXNfZnJlZWQsIGJ5dGVzX2Fs
bG9jYXRlZCAtIGJ5dGVzX2ZyZWVkKTsKKyAgICBwcmludGYoIlRJTEUgQkFMQU5DRTogdGlsZXNb
KyUiIFBSSXU2NCAiLC0lIiBQUkl1NjQgIjolIiBQUkl1NjQgIl0gIgorICAgICAgICAgICAiYnl0
ZXNbKyUiIFBSSXU2NCAiLC0lIiBQUkl1NjQgIjolIiBQUkl1NjQgIl1cbiIsCisgICAgICAgICAg
IHRpbGVzX2FsbG9jYXRlZCwgdGlsZXNfZnJlZWQsIHRpbGVzX2FsbG9jYXRlZCAtIHRpbGVzX2Zy
ZWVkLAorICAgICAgICAgICBieXRlc19hbGxvY2F0ZWQsIGJ5dGVzX2ZyZWVkLCBieXRlc19hbGxv
Y2F0ZWQgLSBieXRlc19mcmVlZCk7CiAKICAgICBpZiAoIWFjY291bnRpbmdfbGVuKQogICAgICAg
ICByZXR1cm47CkBAIC0xMjcsOCArMTI3LDggQEAgdm9pZCBld2tfdGlsZV9hY2NvdW50aW5nX2Ri
Zyh2b2lkKQogICAgICAgICB0aWxlcyA9IGFjYy0+dGlsZXMuYWxsb2NhdGVkIC0gYWNjLT50aWxl
cy5mcmVlZDsKICAgICAgICAgYnl0ZXMgPSBhY2MtPmJ5dGVzLmFsbG9jYXRlZCAtIGFjYy0+Ynl0
ZXMuZnJlZWQ7CiAKLSAgICAgICAgcHJpbnRmKCIgICAlNGQ6IHRpbGVzWyslNCJQUkl1NjQiLC0l
NCJQUkl1NjQiOiU0IlBSSXU2NCJdICIKLSAgICAgICAgICAgICAgICJieXRlc1srJTgiUFJJdTY0
IiwtJTgiUFJJdTY0IjolOCJQUkl1NjQiXSVzXG4iLAorICAgICAgICBwcmludGYoIiAgICU0ZDog
dGlsZXNbKyU0IiBQUkl1NjQgIiwtJTQiIFBSSXU2NCAiOiU0IiBQUkl1NjQgIl0gIgorICAgICAg
ICAgICAgICAgImJ5dGVzWyslOCIgUFJJdTY0ICIsLSU4IiBQUkl1NjQgIjolOCIgUFJJdTY0ICJd
JXNcbiIsCiAgICAgICAgICAgICAgICBhY2MtPnNpemUsCiAgICAgICAgICAgICAgICBhY2MtPnRp
bGVzLmFsbG9jYXRlZCwgYWNjLT50aWxlcy5mcmVlZCwgdGlsZXMsCiAgICAgICAgICAgICAgICBh
Y2MtPmJ5dGVzLmFsbG9jYXRlZCwgYWNjLT5ieXRlcy5mcmVlZCwgYnl0ZXMsCkBAIC0xMzgsMjUg
KzEzOCwyMiBAQCB2b2lkIGV3a190aWxlX2FjY291bnRpbmdfZGJnKHZvaWQpCiB9CiAjZWxzZQog
Ci1zdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlX2FjY291bnRfYWxsb2NhdGVkKGNvbnN0IEV3
a19UaWxlICp0KSB7IH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVfYWNjb3VudF9mcmVl
ZChjb25zdCBFd2tfVGlsZSAqdCkgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlX2Fj
Y291bnRfYWxsb2NhdGVkKGNvbnN0IEV3a19UaWxlKiB0aWxlKSB7IH0KK3N0YXRpYyBpbmxpbmUg
dm9pZCBfZXdrX3RpbGVfYWNjb3VudF9mcmVlZChjb25zdCBFd2tfVGlsZSogdGlsZSkgeyB9CiAK
LXZvaWQgZXdrX3RpbGVfYWNjb3VudGluZ19kYmcodm9pZCkKK3ZvaWQgZXdrX3RpbGVfYWNjb3Vu
dGluZ19kYmcoKQogewogICAgIHByaW50ZigiY29tcGlsZSB3ZWJraXQgd2l0aCBERUJVR19NRU1f
TEVBS1MgZGVmaW5lZCFcbiIpOwogfQogI2VuZGlmCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfZXdr
X3RpbGVfcGFpbnRfcmdiODg4KEV3a19UaWxlICp0LCB1aW50OF90IHIsIHVpbnQ4X3QgZywgdWlu
dDhfdCBiKQorc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZV9wYWludF9yZ2I4ODgoRXdrX1Rp
bGUqIHRpbGUsIHVpbnQ4X3QgcmVkLCB1aW50OF90IGdyZWVuLCB1aW50OF90IGJsdWUpCiB7Ci0g
ICAgdWludDMyX3QgKmRzdDMyLCAqZHN0MzJfZW5kLCBjMTsKLSAgICB1aW50NjRfdCAqZHN0NjQs
ICpkc3Q2NF9lbmQsIGMyOworICAgIHVpbnQzMl90IGMxID0gMHhmZjAwMDAwMCB8ICgodWludDMy
X3QpcmVkIDw8IDE2KSB8ICgodWludDMyX3QpZ3JlZW4gPDwgOCkgfCBibHVlOworICAgIHVpbnQz
Ml90IGMyID0gKCh1aW50NjRfdCljMSA8PCAzMikgfCBjMTsKIAotICAgIGMxID0gMHhmZjAwMDAw
MCB8ICgodWludDMyX3QpciA8PCAxNikgfCAoKHVpbnQzMl90KWcgPDwgOCkgfCBiOwotICAgIGMy
ID0gKCh1aW50NjRfdCljMSA8PCAzMikgfCBjMTsKLQotICAgIGRzdDY0ID0gKHVpbnQ2NF90ICop
dC0+cGl4ZWxzOwotICAgIGRzdDY0X2VuZCA9IGRzdDY0ICsgKCh0LT5ieXRlcyAvIDgpICYgfjcp
OworICAgIHVpbnQ2NF90KiBkc3Q2NCA9ICh1aW50NjRfdCopdGlsZS0+cGl4ZWxzOworICAgIHVp
bnQ2NF90KiBkc3Q2NF9lbmQgPSBkc3Q2NCArICgodGlsZS0+Ynl0ZXMgLyA4KSAmIH43KTsKICAg
ICBmb3IgKDsgZHN0NjQgPCBkc3Q2NF9lbmQ7IGRzdDY0ICs9IDgpIHsKICAgICAgICAgLyogVE9E
TzogQVJNIGFkZCBwbGQgb3IgTkVPTiBpbnN0cnVjdGlvbnMgKi8KICAgICAgICAgZHN0NjRbMF0g
PSBjMjsKQEAgLTE2OSwyNiArMTY2LDI2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVf
cGFpbnRfcmdiODg4KEV3a19UaWxlICp0LCB1aW50OF90IHIsIHVpbnQ4X3QgZywgdWluCiAgICAg
ICAgIGRzdDY0WzddID0gYzI7CiAgICAgfQogCi0gICAgZHN0MzIgPSAodWludDMyX3QgKilkc3Q2
NF9lbmQ7Ci0gICAgZHN0MzJfZW5kID0gKHVpbnQzMl90ICopKHQtPnBpeGVscyArIHQtPmJ5dGVz
KTsKKyAgICB1aW50MzJfdCogZHN0MzIgPSAodWludDMyX3QqKWRzdDY0X2VuZDsKKyAgICB1aW50
MzJfdCogZHN0MzJfZW5kID0gKHVpbnQzMl90KikodGlsZS0+cGl4ZWxzICsgdGlsZS0+Ynl0ZXMp
OwogICAgIGZvciAoOyBkc3QzMiA8IGRzdDMyX2VuZDsgZHN0MzIrKykKICAgICAgICAgKmRzdDMy
ID0gYzE7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVfcGFpbnRfcmdiNTY1KEV3
a19UaWxlICp0LCB1aW50OF90IHIsIHVpbnQ4X3QgZywgdWludDhfdCBiKQorc3RhdGljIGlubGlu
ZSB2b2lkIF9ld2tfdGlsZV9wYWludF9yZ2I1NjUoRXdrX1RpbGUqIHRpbGUsIHVpbnQ4X3QgcmVk
LCB1aW50OF90IGdyZWVuLCB1aW50OF90IGJsdWUpCiB7Ci0gICAgdWludDE2X3QgKmRzdDE2LCAq
ZHN0MTZfZW5kLCBjMTsKLSAgICB1aW50NjRfdCAqZHN0NjQsICpkc3Q2NF9lbmQsIGMyOworICAg
IHVpbnQxNl90KiBkc3QxNiwgKiBkc3QxNl9lbmQsIGMxOworICAgIHVpbnQ2NF90KiBkc3Q2NCwg
KiBkc3Q2NF9lbmQsIGMyOwogCi0gICAgYzEgPSAoKCgociA+PiAzKSAmIDB4MWYpIDw8IDExKSB8
Ci0gICAgICAgICAgKCgoZyA+PiAyKSAmIDB4M2YpIDw8IDUpIHwKLSAgICAgICAgICAoKGIgPj4g
MykgJiAweDFmKSk7CisgICAgYzEgPSAoKCgocmVkID4+IDMpICYgMHgxZikgPDwgMTEpIHwKKyAg
ICAgICAgICAoKChncmVlbiA+PiAyKSAmIDB4M2YpIDw8IDUpIHwKKyAgICAgICAgICAoKGJsdWUg
Pj4gMykgJiAweDFmKSk7CiAKICAgICBjMiA9ICgoKHVpbnQ2NF90KWMxIDw8IDQ4KSB8ICgodWlu
dDY0X3QpYzEgPDwgMzIpIHwKICAgICAgICAgICAoKHVpbnQ2NF90KWMxIDw8IDE2KSB8IGMxKTsK
IAotICAgIGRzdDY0ID0gKHVpbnQ2NF90ICopdC0+cGl4ZWxzOwotICAgIGRzdDY0X2VuZCA9IGRz
dDY0ICsgKCh0LT5ieXRlcyAvIDgpICYgfjcpOworICAgIGRzdDY0ID0gKHVpbnQ2NF90Kil0aWxl
LT5waXhlbHM7CisgICAgZHN0NjRfZW5kID0gZHN0NjQgKyAoKHRpbGUtPmJ5dGVzIC8gOCkgJiB+
Nyk7CiAgICAgZm9yICg7IGRzdDY0IDwgZHN0NjRfZW5kOyBkc3Q2NCArPSA4KSB7CiAgICAgICAg
IC8qIFRPRE86IEFSTSBhZGQgcGxkIG9yIE5FT04gaW5zdHJ1Y3Rpb25zICovCiAgICAgICAgIGRz
dDY0WzBdID0gYzI7CkBAIC0yMDEsMjAgKzE5OCwyMCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgX2V3
a190aWxlX3BhaW50X3JnYjU2NShFd2tfVGlsZSAqdCwgdWludDhfdCByLCB1aW50OF90IGcsIHVp
bgogICAgICAgICBkc3Q2NFs3XSA9IGMyOwogICAgIH0KIAotICAgIGRzdDE2ID0gKHVpbnQxNl90
ICopZHN0MTZfZW5kOwotICAgIGRzdDE2X2VuZCA9ICh1aW50MTZfdCAqKSh0LT5waXhlbHMgKyB0
LT5ieXRlcyk7CisgICAgZHN0MTYgPSAodWludDE2X3QqKWRzdDE2X2VuZDsKKyAgICBkc3QxNl9l
bmQgPSAodWludDE2X3QqKSh0aWxlLT5waXhlbHMgKyB0aWxlLT5ieXRlcyk7CiAgICAgZm9yICg7
IGRzdDE2IDwgZHN0MTZfZW5kOyBkc3QxNisrKQogICAgICAgICAqZHN0MTYgPSBjMTsKIH0KIAot
c3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZV9wYWludChFd2tfVGlsZSAqdCwgdWludDhfdCBy
LCB1aW50OF90IGcsIHVpbnQ4X3QgYikKK3N0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVfcGFp
bnQoRXdrX1RpbGUqIHRpbGUsIHVpbnQ4X3QgcmVkLCB1aW50OF90IGdyZWVuLCB1aW50OF90IGJs
dWUpCiB7Ci0gICAgaWYgKHQtPmNzcGFjZSA9PSBFVkFTX0NPTE9SU1BBQ0VfQVJHQjg4ODgpCi0g
ICAgICAgIF9ld2tfdGlsZV9wYWludF9yZ2I4ODgodCwgciwgZywgYik7Ci0gICAgZWxzZSBpZiAo
dC0+Y3NwYWNlID09IEVWQVNfQ09MT1JTUEFDRV9SR0I1NjVfQTVQKQotICAgICAgICBfZXdrX3Rp
bGVfcGFpbnRfcmdiNTY1KHQsIHIsIGcsIGIpOworICAgIGlmICh0aWxlLT5jc3BhY2UgPT0gRVZB
U19DT0xPUlNQQUNFX0FSR0I4ODg4KQorICAgICAgICBfZXdrX3RpbGVfcGFpbnRfcmdiODg4KHRp
bGUsIHJlZCwgZ3JlZW4sIGJsdWUpOworICAgIGVsc2UgaWYgKHRpbGUtPmNzcGFjZSA9PSBFVkFT
X0NPTE9SU1BBQ0VfUkdCNTY1X0E1UCkKKyAgICAgICAgX2V3a190aWxlX3BhaW50X3JnYjU2NSh0
aWxlLCByZWQsIGdyZWVuLCBibHVlKTsKICAgICBlbHNlCi0gICAgICAgIEVSUigidW5rbm93biBj
b2xvciBzcGFjZTogJWQiLCB0LT5jc3BhY2UpOworICAgICAgICBFUlIoInVua25vd24gY29sb3Ig
c3BhY2U6ICVkIiwgdGlsZS0+Y3NwYWNlKTsKIH0KIAogLyoqCkBAIC0yMzIsMTU0ICsyMjksMTU0
IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVfcGFpbnQoRXdrX1RpbGUgKnQsIHVpbnQ4
X3QgciwgdWludDhfdCBnLCB1aW50OF90IGIpCiAgKiBld2tfdGlsZV91cGRhdGVzX2NsZWFyKCkg
dG8gY2hhbmdlIEBjIHN0YXRzLm1pc3NlcywKICAqIEBjIHN0YXRzLmZ1bGxfdXBkYXRlIGFuZCBA
YyB1cGRhdGVzLgogICovCi1Fd2tfVGlsZSAqZXdrX3RpbGVfbmV3KEV2YXMgKmV2YXMsIEV2YXNf
Q29vcmQgdywgRXZhc19Db29yZCBoLCBmbG9hdCB6b29tLCBFdmFzX0NvbG9yc3BhY2UgY3NwYWNl
KQorRXdrX1RpbGUqIGV3a190aWxlX25ldyhFdmFzKiBldmFzLCBFdmFzX0Nvb3JkIHdpZHRoLCBF
dmFzX0Nvb3JkIGhlaWdodCwgZmxvYXQgem9vbSwgRXZhc19Db2xvcnNwYWNlIGNvbG9yU3BhY2Up
CiB7Ci0gICAgRXZhc19Db29yZCAqZWM7Ci0gICAgRXZhc19Db2xvcnNwYWNlICplY3M7Ci0gICAg
ZmxvYXQgKmY7Ci0gICAgc2l6ZV90ICpzOwotICAgIEV3a19UaWxlICp0OworICAgIEV2YXNfQ29v
cmQqIGVjOworICAgIEV2YXNfQ29sb3JzcGFjZSogZWNzOworICAgIGZsb2F0KiBmOworICAgIHNp
emVfdCogczsKKyAgICBFd2tfVGlsZSogdGlsZTsKICAgICB1bnNpZ25lZCBpbnQgYXJlYTsKICAg
ICBzaXplX3QgYnl0ZXM7CiAgICAgY2Fpcm9fZm9ybWF0X3QgZm9ybWF0OwogICAgIGNhaXJvX3N0
YXR1c190IHN0YXR1czsKICAgICBpbnQgc3RyaWRlOwotICAgIEVjb3JlX0V2YXMgKmVlOwotICAg
IGNvbnN0IGNoYXIgKmVuZ2luZTsKKyAgICBFY29yZV9FdmFzKiBlZTsKKyAgICBjb25zdCBjaGFy
KiBlbmdpbmU7CiAKLSAgICBhcmVhID0gdyAqIGg7CisgICAgYXJlYSA9IHdpZHRoICogaGVpZ2h0
OwogCi0gICAgaWYgKGNzcGFjZSA9PSBFVkFTX0NPTE9SU1BBQ0VfQVJHQjg4ODgpIHsKKyAgICBp
ZiAoY29sb3JTcGFjZSA9PSBFVkFTX0NPTE9SU1BBQ0VfQVJHQjg4ODgpIHsKICAgICAgICAgYnl0
ZXMgPSBhcmVhICogNDsKLSAgICAgICAgc3RyaWRlID0gdyAqIDQ7CisgICAgICAgIHN0cmlkZSA9
IHdpZHRoICogNDsKICAgICAgICAgZm9ybWF0ID0gQ0FJUk9fRk9STUFUX0FSR0IzMjsKLSAgICB9
IGVsc2UgaWYgKGNzcGFjZSA9PSBFVkFTX0NPTE9SU1BBQ0VfUkdCNTY1X0E1UCkgeworICAgIH0g
ZWxzZSBpZiAoY29sb3JTcGFjZSA9PSBFVkFTX0NPTE9SU1BBQ0VfUkdCNTY1X0E1UCkgewogICAg
ICAgICBieXRlcyA9IGFyZWEgKiAyOwotICAgICAgICBzdHJpZGUgPSB3ICogMjsKKyAgICAgICAg
c3RyaWRlID0gd2lkdGggKiAyOwogICAgICAgICBmb3JtYXQgPSBDQUlST19GT1JNQVRfUkdCMTZf
NTY1OwogICAgIH0gZWxzZSB7Ci0gICAgICAgIEVSUigidW5rbm93biBjb2xvciBzcGFjZTogJWQi
LCBjc3BhY2UpOworICAgICAgICBFUlIoInVua25vd24gY29sb3Igc3BhY2U6ICVkIiwgY29sb3JT
cGFjZSk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIERCRygic2l6ZTogJWR4JWQg
KCVkKSwgem9vbTogJWYsIGNzcGFjZT0lZCIsIHcsIGgsIGFyZWEsIChkb3VibGUpem9vbSwgY3Nw
YWNlKTsKKyAgICBEQkcoInNpemU6ICVkeCVkICglZCksIHpvb206ICVmLCBjc3BhY2U9JWQiLCB3
aWR0aCwgaGVpZ2h0LCBhcmVhLCAoZG91YmxlKXpvb20sIGNvbG9yU3BhY2UpOwogCi0gICAgdCA9
IHN0YXRpY19jYXN0PEV3a19UaWxlKj4obWFsbG9jKHNpemVvZihFd2tfVGlsZSkpKTsKLSAgICBp
ZiAoIXQpCisgICAgdGlsZSA9IHN0YXRpY19jYXN0PEV3a19UaWxlKj4obWFsbG9jKHNpemVvZihF
d2tfVGlsZSkpKTsKKyAgICBpZiAoIXRpbGUpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgdC0+
aW1hZ2UgPSBldmFzX29iamVjdF9pbWFnZV9hZGQoZXZhcyk7CisgICAgdGlsZS0+aW1hZ2UgPSBl
dmFzX29iamVjdF9pbWFnZV9hZGQoZXZhcyk7CiAKICAgICBlZSA9IGVjb3JlX2V2YXNfZWNvcmVf
ZXZhc19nZXQoZXZhcyk7CiAgICAgZW5naW5lID0gZWNvcmVfZXZhc19lbmdpbmVfbmFtZV9nZXQo
ZWUpOwogICAgIGlmIChlbmdpbmUgJiYgIXN0cmNtcChlbmdpbmUsICJvcGVuZ2xfeDExIikpCi0g
ICAgICAgIGV2YXNfb2JqZWN0X2ltYWdlX2NvbnRlbnRfaGludF9zZXQodC0+aW1hZ2UsIEVWQVNf
SU1BR0VfQ09OVEVOVF9ISU5UX0RZTkFNSUMpOworICAgICAgICBldmFzX29iamVjdF9pbWFnZV9j
b250ZW50X2hpbnRfc2V0KHRpbGUtPmltYWdlLCBFVkFTX0lNQUdFX0NPTlRFTlRfSElOVF9EWU5B
TUlDKTsKIAotICAgIHQtPnZpc2libGUgPSAwOwotICAgIHQtPnVwZGF0ZXMgPSAwOworICAgIHRp
bGUtPnZpc2libGUgPSAwOworICAgIHRpbGUtPnVwZGF0ZXMgPSAwOwogCi0gICAgbWVtc2V0KCZ0
LT5zdGF0cywgMCwgc2l6ZW9mKEV3a19UaWxlX1N0YXRzKSk7Ci0gICAgdC0+c3RhdHMuYXJlYSA9
IGFyZWE7CisgICAgbWVtc2V0KCZ0aWxlLT5zdGF0cywgMCwgc2l6ZW9mKEV3a19UaWxlX1N0YXRz
KSk7CisgICAgdGlsZS0+c3RhdHMuYXJlYSA9IGFyZWE7CiAKICAgICAvKiB1Z2x5LCBidXQgbGV0
J3MgYXZvaWQgYXQgYWxsIGNvc3RzIGhhdmluZyB1c2VycyB0byBtb2RpZnkgdGhvc2UgKi8KLSAg
ICBlYyA9IChFdmFzX0Nvb3JkICopJnQtPnc7Ci0gICAgKmVjID0gdzsKKyAgICBlYyA9IChFdmFz
X0Nvb3JkKikmdGlsZS0+d2lkdGg7CisgICAgKmVjID0gd2lkdGg7CiAKLSAgICBlYyA9IChFdmFz
X0Nvb3JkICopJnQtPmg7Ci0gICAgKmVjID0gaDsKKyAgICBlYyA9IChFdmFzX0Nvb3JkKikmdGls
ZS0+aGVpZ2h0OworICAgICplYyA9IGhlaWdodDsKIAotICAgIGVjcyA9IChFdmFzX0NvbG9yc3Bh
Y2UgKikmdC0+Y3NwYWNlOwotICAgICplY3MgPSBjc3BhY2U7CisgICAgZWNzID0gKEV2YXNfQ29s
b3JzcGFjZSopJnRpbGUtPmNzcGFjZTsKKyAgICAqZWNzID0gY29sb3JTcGFjZTsKIAotICAgIGYg
PSAoZmxvYXQgKikmdC0+em9vbTsKKyAgICBmID0gKGZsb2F0KikmdGlsZS0+em9vbTsKICAgICAq
ZiA9IHpvb207CiAKLSAgICBzID0gKHNpemVfdCAqKSZ0LT5ieXRlczsKKyAgICBzID0gKHNpemVf
dCopJnRpbGUtPmJ5dGVzOwogICAgICpzID0gYnl0ZXM7CiAKLSAgICBldmFzX29iamVjdF9pbWFn
ZV9zaXplX3NldCh0LT5pbWFnZSwgdC0+dywgdC0+aCk7Ci0gICAgZXZhc19vYmplY3RfaW1hZ2Vf
Y29sb3JzcGFjZV9zZXQodC0+aW1hZ2UsIHQtPmNzcGFjZSk7Ci0gICAgdC0+cGl4ZWxzID0gc3Rh
dGljX2Nhc3Q8dWludDhfdCo+KGV2YXNfb2JqZWN0X2ltYWdlX2RhdGFfZ2V0KHQtPmltYWdlLCBF
SU5BX1RSVUUpKTsKLSAgICB0LT5zdXJmYWNlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVf
Zm9yX2RhdGEodC0+cGl4ZWxzLCBmb3JtYXQsIHcsIGgsIHN0cmlkZSk7Ci0gICAgc3RhdHVzID0g
Y2Fpcm9fc3VyZmFjZV9zdGF0dXModC0+c3VyZmFjZSk7CisgICAgZXZhc19vYmplY3RfaW1hZ2Vf
c2l6ZV9zZXQodGlsZS0+aW1hZ2UsIHRpbGUtPndpZHRoLCB0aWxlLT5oZWlnaHQpOworICAgIGV2
YXNfb2JqZWN0X2ltYWdlX2NvbG9yc3BhY2Vfc2V0KHRpbGUtPmltYWdlLCB0aWxlLT5jc3BhY2Up
OworICAgIHRpbGUtPnBpeGVscyA9IHN0YXRpY19jYXN0PHVpbnQ4X3QqPihldmFzX29iamVjdF9p
bWFnZV9kYXRhX2dldCh0aWxlLT5pbWFnZSwgRUlOQV9UUlVFKSk7CisgICAgdGlsZS0+c3VyZmFj
ZSA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlX2Zvcl9kYXRhKHRpbGUtPnBpeGVscywgZm9y
bWF0LCB3aWR0aCwgaGVpZ2h0LCBzdHJpZGUpOworICAgIHN0YXR1cyA9IGNhaXJvX3N1cmZhY2Vf
c3RhdHVzKHRpbGUtPnN1cmZhY2UpOwogICAgIGlmIChzdGF0dXMgIT0gQ0FJUk9fU1RBVFVTX1NV
Q0NFU1MpIHsKICAgICAgICAgRVJSKCJmYWlsZWQgdG8gY3JlYXRlIGNhaXJvIHN1cmZhY2U6ICVz
IiwKICAgICAgICAgICAgIGNhaXJvX3N0YXR1c190b19zdHJpbmcoc3RhdHVzKSk7Ci0gICAgICAg
IGZyZWUodCk7CisgICAgICAgIGZyZWUodGlsZSk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0K
IAotICAgIHQtPmNhaXJvID0gY2Fpcm9fY3JlYXRlKHQtPnN1cmZhY2UpOwotICAgIHN0YXR1cyA9
IGNhaXJvX3N0YXR1cyh0LT5jYWlybyk7CisgICAgdGlsZS0+Y2Fpcm8gPSBjYWlyb19jcmVhdGUo
dGlsZS0+c3VyZmFjZSk7CisgICAgc3RhdHVzID0gY2Fpcm9fc3RhdHVzKHRpbGUtPmNhaXJvKTsK
ICAgICBpZiAoc3RhdHVzICE9IENBSVJPX1NUQVRVU19TVUNDRVNTKSB7CiAgICAgICAgIEVSUigi
ZmFpbGVkIHRvIGNyZWF0ZSBjYWlybzogJXMiLCBjYWlyb19zdGF0dXNfdG9fc3RyaW5nKHN0YXR1
cykpOwotICAgICAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3kodC0+c3VyZmFjZSk7Ci0gICAgICAg
IGV2YXNfb2JqZWN0X2RlbCh0LT5pbWFnZSk7Ci0gICAgICAgIGZyZWUodCk7CisgICAgICAgIGNh
aXJvX3N1cmZhY2VfZGVzdHJveSh0aWxlLT5zdXJmYWNlKTsKKyAgICAgICAgZXZhc19vYmplY3Rf
ZGVsKHRpbGUtPmltYWdlKTsKKyAgICAgICAgZnJlZSh0aWxlKTsKICAgICAgICAgcmV0dXJuIDA7
CiAgICAgfQogCi0gICAgX2V3a190aWxlX2FjY291bnRfYWxsb2NhdGVkKHQpOworICAgIF9ld2tf
dGlsZV9hY2NvdW50X2FsbG9jYXRlZCh0aWxlKTsKIAotICAgIHJldHVybiB0OworICAgIHJldHVy
biB0aWxlOwogfQogCiAvKioKICAqIEZyZWUgdGlsZSBtZW1vcnkuCiAgKi8KLXZvaWQgZXdrX3Rp
bGVfZnJlZShFd2tfVGlsZSAqdCkKK3ZvaWQgZXdrX3RpbGVfZnJlZShFd2tfVGlsZSogdGlsZSkK
IHsKLSAgICBfZXdrX3RpbGVfYWNjb3VudF9mcmVlZCh0KTsKKyAgICBfZXdrX3RpbGVfYWNjb3Vu
dF9mcmVlZCh0aWxlKTsKIAotICAgIGlmICh0LT51cGRhdGVzKQotICAgICAgICBlaW5hX3RpbGVy
X2ZyZWUodC0+dXBkYXRlcyk7CisgICAgaWYgKHRpbGUtPnVwZGF0ZXMpCisgICAgICAgIGVpbmFf
dGlsZXJfZnJlZSh0aWxlLT51cGRhdGVzKTsKIAotICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveSh0
LT5zdXJmYWNlKTsKLSAgICBjYWlyb19kZXN0cm95KHQtPmNhaXJvKTsKLSAgICBldmFzX29iamVj
dF9kZWwodC0+aW1hZ2UpOwotICAgIGZyZWUodCk7CisgICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95
KHRpbGUtPnN1cmZhY2UpOworICAgIGNhaXJvX2Rlc3Ryb3kodGlsZS0+Y2Fpcm8pOworICAgIGV2
YXNfb2JqZWN0X2RlbCh0aWxlLT5pbWFnZSk7CisgICAgZnJlZSh0aWxlKTsKIH0KIAogLyoqCiAg
KiBNYWtlIHRoZSB0aWxlIHZpc2libGUsIGluY3JlbWVudGluZyBpdHMgY291bnRlci4KICAqLwot
dm9pZCBld2tfdGlsZV9zaG93KEV3a19UaWxlICp0KQordm9pZCBld2tfdGlsZV9zaG93KEV3a19U
aWxlKiB0aWxlKQogewotICAgIHQtPnZpc2libGUrKzsKLSAgICBldmFzX29iamVjdF9zaG93KHQt
PmltYWdlKTsKKyAgICB0aWxlLT52aXNpYmxlKys7CisgICAgZXZhc19vYmplY3Rfc2hvdyh0aWxl
LT5pbWFnZSk7CiB9CiAKIC8qKgogICogRGVjcmVtZW50IHRoZSB2aXNpYmlsaXR5IGNvdW50ZXIs
IG1ha2luZyBpdCBpbnZpc2libGUgaWYgbmVjZXNzYXJ5LgogICovCi12b2lkIGV3a190aWxlX2hp
ZGUoRXdrX1RpbGUgKnQpCit2b2lkIGV3a190aWxlX2hpZGUoRXdrX1RpbGUqIHRpbGUpCiB7Ci0g
ICAgdC0+dmlzaWJsZS0tOwotICAgIGlmICghdC0+dmlzaWJsZSkKLSAgICAgICAgZXZhc19vYmpl
Y3RfaGlkZSh0LT5pbWFnZSk7CisgICAgdGlsZS0+dmlzaWJsZS0tOworICAgIGlmICghdGlsZS0+
dmlzaWJsZSkKKyAgICAgICAgZXZhc19vYmplY3RfaGlkZSh0aWxlLT5pbWFnZSk7CiB9CiAKIC8q
KgogICogUmV0dXJucyBFSU5BX1RSVUUgaWYgdGhlIHRpbGUgaXMgdmlzaWJsZSwgRUlOQV9GQUxT
RSBvdGhlcndpc2UuCiAgKi8KLUVpbmFfQm9vbCBld2tfdGlsZV92aXNpYmxlX2dldChFd2tfVGls
ZSAqdCkKK0VpbmFfQm9vbCBld2tfdGlsZV92aXNpYmxlX2dldChFd2tfVGlsZSogdGlsZSkKIHsK
LSAgICByZXR1cm4gISF0LT52aXNpYmxlOworICAgIHJldHVybiAhIXRpbGUtPnZpc2libGU7CiB9
CiAKIC8qKgogICogTWFyayB3aG9sZSB0aWxlIGFzIGRpcnR5IGFuZCByZXF1aXJpbmcgdXBkYXRl
LgogICovCi12b2lkIGV3a190aWxlX3VwZGF0ZV9mdWxsKEV3a19UaWxlICp0KQordm9pZCBld2tf
dGlsZV91cGRhdGVfZnVsbChFd2tfVGlsZSogdGlsZSkKIHsKICAgICAvKiBUT0RPOiBsaXN0IG9m
IHRpbGVzIHBlbmRpbmcgdXBkYXRlcz8gKi8KLSAgICB0LT5zdGF0cy5taXNzZXMrKzsKKyAgICB0
aWxlLT5zdGF0cy5taXNzZXMrKzsKIAotICAgIGlmICghdC0+c3RhdHMuZnVsbF91cGRhdGUpIHsK
LSAgICAgICAgdC0+c3RhdHMuZnVsbF91cGRhdGUgPSBFSU5BX1RSVUU7Ci0gICAgICAgIGlmICh0
LT51cGRhdGVzKSB7Ci0gICAgICAgICAgICBlaW5hX3RpbGVyX2ZyZWUodC0+dXBkYXRlcyk7Ci0g
ICAgICAgICAgICB0LT51cGRhdGVzID0gMDsKKyAgICBpZiAoIXRpbGUtPnN0YXRzLmZ1bGxfdXBk
YXRlKSB7CisgICAgICAgIHRpbGUtPnN0YXRzLmZ1bGxfdXBkYXRlID0gRUlOQV9UUlVFOworICAg
ICAgICBpZiAodGlsZS0+dXBkYXRlcykgeworICAgICAgICAgICAgZWluYV90aWxlcl9mcmVlKHRp
bGUtPnVwZGF0ZXMpOworICAgICAgICAgICAgdGlsZS0+dXBkYXRlcyA9IDA7CiAgICAgICAgIH0K
ICAgICB9CiB9CkBAIC0zODcsMzIgKzM4NCwzMiBAQCB2b2lkIGV3a190aWxlX3VwZGF0ZV9mdWxs
KEV3a19UaWxlICp0KQogLyoqCiAgKiBNYXJrIHRoZSBzcGVjaWZpYyBzdWJhcmVhIGFzIGRpcnR5
IGFuZCByZXF1aXJpbmcgdXBkYXRlLgogICovCi12b2lkIGV3a190aWxlX3VwZGF0ZV9hcmVhKEV3
a19UaWxlICp0LCBjb25zdCBFaW5hX1JlY3RhbmdsZSAqcikKK3ZvaWQgZXdrX3RpbGVfdXBkYXRl
X2FyZWEoRXdrX1RpbGUqIHRpbGUsIGNvbnN0IEVpbmFfUmVjdGFuZ2xlKiByZWN0KQogewogICAg
IC8qIFRPRE86IGxpc3Qgb2YgdGlsZXMgcGVuZGluZyB1cGRhdGVzPyAqLwotICAgIHQtPnN0YXRz
Lm1pc3NlcysrOworICAgIHRpbGUtPnN0YXRzLm1pc3NlcysrOwogCi0gICAgaWYgKHQtPnN0YXRz
LmZ1bGxfdXBkYXRlKQorICAgIGlmICh0aWxlLT5zdGF0cy5mdWxsX3VwZGF0ZSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgaWYgKCFyLT54ICYmICFyLT55ICYmIHItPncgPT0gdC0+dyAmJiByLT5o
ID09IHQtPmgpIHsKLSAgICAgICAgdC0+c3RhdHMuZnVsbF91cGRhdGUgPSBFSU5BX1RSVUU7Ci0g
ICAgICAgIGlmICh0LT51cGRhdGVzKSB7Ci0gICAgICAgICAgICBlaW5hX3RpbGVyX2ZyZWUodC0+
dXBkYXRlcyk7Ci0gICAgICAgICAgICB0LT51cGRhdGVzID0gMDsKKyAgICBpZiAoIXJlY3QtPngg
JiYgIXJlY3QtPnkgJiYgcmVjdC0+dyA9PSB0aWxlLT53aWR0aCAmJiByZWN0LT5oID09IHRpbGUt
PmhlaWdodCkgeworICAgICAgICB0aWxlLT5zdGF0cy5mdWxsX3VwZGF0ZSA9IEVJTkFfVFJVRTsK
KyAgICAgICAgaWYgKHRpbGUtPnVwZGF0ZXMpIHsKKyAgICAgICAgICAgIGVpbmFfdGlsZXJfZnJl
ZSh0aWxlLT51cGRhdGVzKTsKKyAgICAgICAgICAgIHRpbGUtPnVwZGF0ZXMgPSAwOwogICAgICAg
ICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoIXQtPnVwZGF0ZXMpIHsKLSAg
ICAgICAgdC0+dXBkYXRlcyA9IGVpbmFfdGlsZXJfbmV3KHQtPncsIHQtPmgpOwotICAgICAgICBp
ZiAoIXQtPnVwZGF0ZXMpIHsKLSAgICAgICAgICAgIENSSVRJQ0FMKCJjb3VsZCBub3QgY3JlYXRl
IGVpbmFfdGlsZXIgJWR4JWQuIiwgdC0+dywgdC0+aCk7CisgICAgaWYgKCF0aWxlLT51cGRhdGVz
KSB7CisgICAgICAgIHRpbGUtPnVwZGF0ZXMgPSBlaW5hX3RpbGVyX25ldyh0aWxlLT53aWR0aCwg
dGlsZS0+aGVpZ2h0KTsKKyAgICAgICAgaWYgKCF0aWxlLT51cGRhdGVzKSB7CisgICAgICAgICAg
ICBDUklUSUNBTCgiY291bGQgbm90IGNyZWF0ZSBlaW5hX3RpbGVyICVkeCVkLiIsIHRpbGUtPndp
ZHRoLCB0aWxlLT5oZWlnaHQpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAg
fQogCi0gICAgZWluYV90aWxlcl9yZWN0X2FkZCh0LT51cGRhdGVzLCByKTsKKyAgICBlaW5hX3Rp
bGVyX3JlY3RfYWRkKHRpbGUtPnVwZGF0ZXMsIHJlY3QpOwogfQogCiAvKioKQEAgLTQyMSwzNiAr
NDE4LDM2IEBAIHZvaWQgZXdrX3RpbGVfdXBkYXRlX2FyZWEoRXdrX1RpbGUgKnQsIGNvbnN0IEVp
bmFfUmVjdGFuZ2xlICpyKQogICogVGhpcyB3aWxsIG5vdCBjaGFuZ2UgdGhlIHRpbGUgc3RhdGlz
dGljcyBvciBjbGVhciB0aGUgcHJvY2Vzc2VkCiAgKiB1cGRhdGVzLCB1c2UgZXdrX3RpbGVfdXBk
YXRlc19jbGVhcigpIGZvciB0aGF0LgogICovCi12b2lkIGV3a190aWxlX3VwZGF0ZXNfcHJvY2Vz
cyhFd2tfVGlsZSAqdCwgdm9pZCAoKmNiKSh2b2lkICpkYXRhLCBFd2tfVGlsZSAqdCwgY29uc3Qg
RWluYV9SZWN0YW5nbGUgKnVwZGF0ZSksIGNvbnN0IHZvaWQgKmRhdGEpCi17Ci0gICAgaWYgKHQt
PnN0YXRzLmZ1bGxfdXBkYXRlKSB7Ci0gICAgICAgIEVpbmFfUmVjdGFuZ2xlIHI7Ci0gICAgICAg
IHIueCA9IDA7Ci0gICAgICAgIHIueSA9IDA7Ci0gICAgICAgIHIudyA9IHQtPnc7Ci0gICAgICAg
IHIuaCA9IHQtPmg7Cit2b2lkIGV3a190aWxlX3VwZGF0ZXNfcHJvY2VzcyhFd2tfVGlsZSogdGls
ZSwgdm9pZCAoKmNhbGxiYWNrKSh2b2lkKiBkYXRhLCBFd2tfVGlsZSogdGlsZSwgY29uc3QgRWlu
YV9SZWN0YW5nbGUqIHVwZGF0ZSksIGNvbnN0IHZvaWQqIGRhdGEpCit7CisgICAgaWYgKHRpbGUt
PnN0YXRzLmZ1bGxfdXBkYXRlKSB7CisgICAgICAgIEVpbmFfUmVjdGFuZ2xlIHJlY3Q7CisgICAg
ICAgIHJlY3QueCA9IDA7CisgICAgICAgIHJlY3QueSA9IDA7CisgICAgICAgIHJlY3QudyA9IHRp
bGUtPndpZHRoOworICAgICAgICByZWN0LmggPSB0aWxlLT5oZWlnaHQ7CiAjaWZkZWYgVElMRV9T
VEFUU19BQ0NPVU5UX1JFTkRFUl9USU1FCiAgICAgICAgIHN0cnVjdCB0aW1ldmFsIHRpbWV2Owog
ICAgICAgICBkb3VibGUgcmVuZGVyX3N0YXJ0OwogICAgICAgICBnZXR0aW1lb2ZkYXkoJnRpbWV2
LCAwKTsKLSAgICAgICAgcmVuZGVyX3N0YXJ0ID0gKGRvdWJsZSl0aW1ldi50dl9zZWMgKwotICAg
ICAgICAgICAgKCgoZG91YmxlKXRpbWV2LnR2X3VzZWMpIC8gMTAwMDAwMCk7CisgICAgICAgIHJl
bmRlcl9zdGFydGlsZSA9IChkb3VibGUpdGltZXYudHZfc2VjICsKKyAgICAgICAgICAgICAgICAg
ICAgICAgKCgoZG91YmxlKXRpbWV2LnR2X3VzZWMpIC8gMTAwMDAwMCk7CiAjZW5kaWYKLSAgICAg
ICAgY2IoKHZvaWQgKilkYXRhLCB0LCAmcik7CisgICAgICAgIGNhbGxiYWNrKCh2b2lkKilkYXRh
LCB0aWxlLCAmcmVjdCk7CiAjaWZkZWYgVElMRV9TVEFUU19BQ0NPVU5UX1JFTkRFUl9USU1FCiAg
ICAgICAgIGdldHRpbWVvZmRheSgmdGltZXYsIDApOwotICAgICAgICB0LT5zdGF0cy5yZW5kZXJf
dGltZSA9IChkb3VibGUpdGltZXYudHZfc2VjICsKLSAgICAgICAgICAgICgoKGRvdWJsZSl0aW1l
di50dl91c2VjKSAvIDEwMDAwMDApIC0gcmVuZGVyX3N0YXJ0OworICAgICAgICB0aWxlLT5zdGF0
cy5yZW5kZXJfdGltZSA9IChkb3VibGUpdGltZXYudHZfc2VjICsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAoKChkb3VibGUpdGltZXYudHZfdXNlYykgLyAxMDAwMDAwKSAtIHJlbmRl
cl9zdGFydDsKICNlbmRpZgotICAgIH0gZWxzZSBpZiAodC0+dXBkYXRlcykgewotICAgICAgICBF
aW5hX0l0ZXJhdG9yICppdHIgPSBlaW5hX3RpbGVyX2l0ZXJhdG9yX25ldyh0LT51cGRhdGVzKTsK
LSAgICAgICAgRWluYV9SZWN0YW5nbGUgKnI7CisgICAgfSBlbHNlIGlmICh0aWxlLT51cGRhdGVz
KSB7CisgICAgICAgIEVpbmFfSXRlcmF0b3IqIGl0ciA9IGVpbmFfdGlsZXJfaXRlcmF0b3JfbmV3
KHRpbGUtPnVwZGF0ZXMpOworICAgICAgICBFaW5hX1JlY3RhbmdsZSogcmVjdDsKICAgICAgICAg
aWYgKCFpdHIpIHsKICAgICAgICAgICAgIENSSVRJQ0FMKCJjb3VsZCBub3QgY3JlYXRlIHRpbGVy
IGl0ZXJhdG9yISIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIEVJ
TkFfSVRFUkFUT1JfRk9SRUFDSChpdHIsIHIpCi0gICAgICAgICAgICBjYigodm9pZCAqKWRhdGEs
IHQsIHIpOworICAgICAgICBFSU5BX0lURVJBVE9SX0ZPUkVBQ0goaXRyLCByZWN0KQorICAgICAg
ICAgICAgY2FsbGJhY2soKHZvaWQqKWRhdGEsIHRpbGUsIHJlY3QpOwogICAgICAgICBlaW5hX2l0
ZXJhdG9yX2ZyZWUoaXRyKTsKICAgICB9CiB9CkBAIC00NTksMzggKzQ1NiwzOCBAQCB2b2lkIGV3
a190aWxlX3VwZGF0ZXNfcHJvY2VzcyhFd2tfVGlsZSAqdCwgdm9pZCAoKmNiKSh2b2lkICpkYXRh
LCBFd2tfVGlsZSAqdCwgYwogICogQ2xlYXIgYWxsIHVwZGF0ZXMgaW4gcmVnaW9uLCBpZiBhbnku
CiAgKgogICogVGhpcyB3aWxsIGNoYW5nZSB0aGUgdGlsZSBzdGF0aXN0aWNzLCBzcGVjaWFsbHkg
emVybyBzdGF0Lm1pc3NlcwotICogYW5kIHVuc2V0IHN0YXRzLmZ1bGxfdXBkYXRlLiBJZiB0LT51
cGRhdGVzIGV4aXN0ZWQsIHRoZW4gaXQgd2lsbCBiZQorICogYW5kIHVuc2V0IHN0YXRzLmZ1bGxf
dXBkYXRlLiBJZiB0aWxlLT51cGRhdGVzIGV4aXN0ZWQsIHRoZW4gaXQgd2lsbCBiZQogICogZGVz
dHJveWVkLgogICoKICAqIFRoaXMgZnVuY3Rpb24gaXMgdXN1YWxseSBjYWxsZWQgYWZ0ZXIgZXdr
X3RpbGVfdXBkYXRlc19wcm9jZXNzKCkgaXMKICAqIGNhbGxlZC4KICAqLwotdm9pZCBld2tfdGls
ZV91cGRhdGVzX2NsZWFyKEV3a19UaWxlICp0KQordm9pZCBld2tfdGlsZV91cGRhdGVzX2NsZWFy
KEV3a19UaWxlKiB0aWxlKQogewogICAgIC8qIFRPRE86IHJlbW92ZSBmcm9tIGxpc3Qgb2YgcGVu
ZGluZyB1cGRhdGVzPyAqLwotICAgIHQtPnN0YXRzLm1pc3NlcyA9IDA7CisgICAgdGlsZS0+c3Rh
dHMubWlzc2VzID0gMDsKIAotICAgIGlmICh0LT5zdGF0cy5mdWxsX3VwZGF0ZSkKLSAgICAgICAg
dC0+c3RhdHMuZnVsbF91cGRhdGUgPSAwOwotICAgIGVsc2UgaWYgKHQtPnVwZGF0ZXMpIHsKLSAg
ICAgICAgZWluYV90aWxlcl9mcmVlKHQtPnVwZGF0ZXMpOwotICAgICAgICB0LT51cGRhdGVzID0g
MDsKKyAgICBpZiAodGlsZS0+c3RhdHMuZnVsbF91cGRhdGUpCisgICAgICAgIHRpbGUtPnN0YXRz
LmZ1bGxfdXBkYXRlID0gMDsKKyAgICBlbHNlIGlmICh0aWxlLT51cGRhdGVzKSB7CisgICAgICAg
IGVpbmFfdGlsZXJfZnJlZSh0aWxlLT51cGRhdGVzKTsKKyAgICAgICAgdGlsZS0+dXBkYXRlcyA9
IDA7CiAgICAgfQogfQogCiB0eXBlZGVmIHN0cnVjdCBfRXdrX1RpbGVfVW51c2VkX0NhY2hlX0Vu
dHJ5IEV3a19UaWxlX1VudXNlZF9DYWNoZV9FbnRyeTsKIHN0cnVjdCBfRXdrX1RpbGVfVW51c2Vk
X0NhY2hlX0VudHJ5IHsKLSAgICBFd2tfVGlsZSAqdGlsZTsKKyAgICBFd2tfVGlsZSogdGlsZTsK
ICAgICBpbnQgd2VpZ2h0OwogICAgIHN0cnVjdCB7Ci0gICAgICAgIHZvaWQgKCpjYikodm9pZCAq
ZGF0YSwgRXdrX1RpbGUgKnQpOwotICAgICAgICB2b2lkICpkYXRhOworICAgICAgICB2b2lkICgq
Y2IpKHZvaWQqIGRhdGEsIEV3a19UaWxlKiB0aWxlKTsKKyAgICAgICAgdm9pZCogZGF0YTsKICAg
ICB9IHRpbGVfZnJlZTsKIH07CiAKIHN0cnVjdCBfRXdrX1RpbGVfVW51c2VkX0NhY2hlIHsKICAg
ICBzdHJ1Y3QgewotICAgICAgICBFaW5hX0xpc3QgKmxpc3Q7CisgICAgICAgIEVpbmFfTGlzdCog
bGlzdDsKICAgICAgICAgc2l6ZV90IGNvdW50OwogICAgICAgICBzaXplX3QgYWxsb2NhdGVkOwog
ICAgIH0gZW50cmllczsKQEAgLTUyMiwzNyArNTE5LDM3IEBAIHN0YXRpYyBjb25zdCBzaXplX3Qg
VElMRV9VTlVTRURfQ0FDSEVfTUFYX0ZSRUUgPSAzMjsKICAqICAgICAgICAgZXdrX3RpbGVfdW51
c2VkX2NhY2hlX2ZyZWUoKSB0byByZWxlYXNlIHJlc291cmNlcy4gSWYgbm90CiAgKiAgICAgICAg
IHBvc3NpYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSwgQGMgMCBpcyByZXR1cm5lZC4KICAqLwotRXdr
X1RpbGVfVW51c2VkX0NhY2hlICpld2tfdGlsZV91bnVzZWRfY2FjaGVfbmV3KHNpemVfdCBtYXgp
CitFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIGV3a190aWxlX3VudXNlZF9jYWNoZV9uZXcoc2l6ZV90
IG1heCkKIHsKLSAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YzsKKyAgICBFd2tfVGlsZV9V
bnVzZWRfQ2FjaGUqIHRpbGVVbnVzZWRDYWNoZTsKIAotICAgIHR1YyA9IHN0YXRpY19jYXN0PEV3
a19UaWxlX1VudXNlZF9DYWNoZSo+KGNhbGxvYygxLCBzaXplb2YoRXdrX1RpbGVfVW51c2VkX0Nh
Y2hlKSkpOwotICAgIGlmICghdHVjKQorICAgIHRpbGVVbnVzZWRDYWNoZSA9IHN0YXRpY19jYXN0
PEV3a19UaWxlX1VudXNlZF9DYWNoZSo+KGNhbGxvYygxLCBzaXplb2YoRXdrX1RpbGVfVW51c2Vk
X0NhY2hlKSkpOworICAgIGlmICghdGlsZVVudXNlZENhY2hlKQogICAgICAgICByZXR1cm4gMDsK
IAotICAgIERCRygidHVjPSVwIiwgdHVjKTsKLSAgICB0dWMtPm1lbW9yeS5tYXggPSBtYXg7Ci0g
ICAgdHVjLT5yZWZlcmVuY2VzID0gMTsKLSAgICByZXR1cm4gdHVjOworICAgIERCRygidGlsZVVu
dXNlZENhY2hlPSVwIiwgdGlsZVVudXNlZENhY2hlKTsKKyAgICB0aWxlVW51c2VkQ2FjaGUtPm1l
bW9yeS5tYXggPSBtYXg7CisgICAgdGlsZVVudXNlZENhY2hlLT5yZWZlcmVuY2VzID0gMTsKKyAg
ICByZXR1cm4gdGlsZVVudXNlZENhY2hlOwogfQogCi12b2lkIGV3a190aWxlX3VudXNlZF9jYWNo
ZV9sb2NrX2FyZWEoRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMsIEV2YXNfQ29vcmQgeCwgRXZh
c19Db29yZCB5LCBFdmFzX0Nvb3JkIHcsIEV2YXNfQ29vcmQgaCwgZmxvYXQgem9vbSkKK3ZvaWQg
ZXdrX3RpbGVfdW51c2VkX2NhY2hlX2xvY2tfYXJlYShFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHRp
bGVVbnVzZWRDYWNoZSwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHksIEV2YXNfQ29vcmQgd2lk
dGgsIEV2YXNfQ29vcmQgaGVpZ2h0LCBmbG9hdCB6b29tKQogewotICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOKHR1Yyk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4odGlsZVVu
dXNlZENhY2hlKTsKIAotICAgIHR1Yy0+bG9ja2VkLmxvY2tlZCA9IEVJTkFfVFJVRTsKLSAgICB0
dWMtPmxvY2tlZC54ID0geDsKLSAgICB0dWMtPmxvY2tlZC55ID0geTsKLSAgICB0dWMtPmxvY2tl
ZC53ID0gdzsKLSAgICB0dWMtPmxvY2tlZC5oID0gaDsKLSAgICB0dWMtPmxvY2tlZC56b29tID0g
em9vbTsKKyAgICB0aWxlVW51c2VkQ2FjaGUtPmxvY2tlZC5sb2NrZWQgPSBFSU5BX1RSVUU7Cisg
ICAgdGlsZVVudXNlZENhY2hlLT5sb2NrZWQueCA9IHg7CisgICAgdGlsZVVudXNlZENhY2hlLT5s
b2NrZWQueSA9IHk7CisgICAgdGlsZVVudXNlZENhY2hlLT5sb2NrZWQudyA9IHdpZHRoOworICAg
IHRpbGVVbnVzZWRDYWNoZS0+bG9ja2VkLmggPSBoZWlnaHQ7CisgICAgdGlsZVVudXNlZENhY2hl
LT5sb2NrZWQuem9vbSA9IHpvb207CiB9CiAKLXZvaWQgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3Vu
bG9ja19hcmVhKEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjKQordm9pZCBld2tfdGlsZV91bnVz
ZWRfY2FjaGVfdW5sb2NrX2FyZWEoRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0aWxlVW51c2VkQ2Fj
aGUpCiB7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4odHVjKTsKKyAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTih0aWxlVW51c2VkQ2FjaGUpOwogCi0gICAgdHVjLT5sb2NrZWQu
bG9ja2VkID0gRUlOQV9GQUxTRTsKKyAgICB0aWxlVW51c2VkQ2FjaGUtPmxvY2tlZC5sb2NrZWQg
PSBFSU5BX0ZBTFNFOwogfQogCiAvKioKQEAgLTU2NywxOCArNTY0LDE4IEBAIHZvaWQgZXdrX3Rp
bGVfdW51c2VkX2NhY2hlX3VubG9ja19hcmVhKEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjKQog
ICoKICAqIEBzZWUgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3VucmVmKCkKICAqLwotc3RhdGljIHZv
aWQgX2V3a190aWxlX3VudXNlZF9jYWNoZV9mcmVlKEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVj
KQorc3RhdGljIHZvaWQgX2V3a190aWxlX3VudXNlZF9jYWNoZV9mcmVlKEV3a19UaWxlX1VudXNl
ZF9DYWNoZSogdGlsZVVudXNlZENhY2hlKQogewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOKHR1Yyk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4odGlsZVVudXNlZENhY2hl
KTsKIAotICAgIERCRygidHVjPSVwLCAiCisgICAgREJHKCJ0aWxlVW51c2VkQ2FjaGU9JXAsICIK
ICAgICAgICAgImVudHJpZXM9KGNvdW50OiV6ZCwgYWxsb2NhdGVkOiV6ZCksICIKICAgICAgICAg
Im1lbW9yeT0obWF4OiV6ZCwgdXNlZDolemQpIiwKLSAgICAgICAgdHVjLCB0dWMtPmVudHJpZXMu
Y291bnQsIHR1Yy0+ZW50cmllcy5hbGxvY2F0ZWQsCi0gICAgICAgIHR1Yy0+bWVtb3J5Lm1heCwg
dHVjLT5tZW1vcnkudXNlZCk7CisgICAgICAgIHRpbGVVbnVzZWRDYWNoZSwgdGlsZVVudXNlZENh
Y2hlLT5lbnRyaWVzLmNvdW50LCB0aWxlVW51c2VkQ2FjaGUtPmVudHJpZXMuYWxsb2NhdGVkLAor
ICAgICAgICB0aWxlVW51c2VkQ2FjaGUtPm1lbW9yeS5tYXgsIHRpbGVVbnVzZWRDYWNoZS0+bWVt
b3J5LnVzZWQpOwogCi0gICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2NsZWFyKHR1Yyk7Ci0gICAg
ZnJlZSh0dWMpOworICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9jbGVhcih0aWxlVW51c2VkQ2Fj
aGUpOworICAgIGZyZWUodGlsZVVudXNlZENhY2hlKTsKIH0KIAogLyoqCkBAIC01ODcsMzYgKzU4
NCwzNiBAQCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVfdW51c2VkX2NhY2hlX2ZyZWUoRXdrX1RpbGVf
VW51c2VkX0NhY2hlICp0dWMpCiAgKiBBbnkgdGlsZXMgdGhhdCBhcmUgaW4gdGhlIGNhY2hlIGFy
ZSBmcmVlZC4gVGhlIG9ubHkgdGlsZXMgdGhhdCBhcmUKICAqIGtlcHQgYXJlIHRob3NlIHRoYXQg
YXJlbid0IGluIHRoZSBjYWNoZSAoaS5lLiB0aGF0IGFyZSB2aXNpYmxlKS4KICAqLwotdm9pZCBl
d2tfdGlsZV91bnVzZWRfY2FjaGVfY2xlYXIoRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMpCit2
b2lkIGV3a190aWxlX3VudXNlZF9jYWNoZV9jbGVhcihFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHRp
bGVVbnVzZWRDYWNoZSkKIHsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0dWMpOwor
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHRpbGVVbnVzZWRDYWNoZSk7CiAKLSAgICBp
ZiAoIXR1Yy0+ZW50cmllcy5jb3VudCkKKyAgICBpZiAoIXRpbGVVbnVzZWRDYWNoZS0+ZW50cmll
cy5jb3VudCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgdm9pZCogaXRlbTsKLSAgICBFSU5BX0xJ
U1RfRlJFRSh0dWMtPmVudHJpZXMubGlzdCwgaXRlbSkgeworICAgIEVJTkFfTElTVF9GUkVFKHRp
bGVVbnVzZWRDYWNoZS0+ZW50cmllcy5saXN0LCBpdGVtKSB7CiAgICAgICAgIEV3a19UaWxlX1Vu
dXNlZF9DYWNoZV9FbnRyeSogaXRyID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGVfVW51c2VkX0NhY2hl
X0VudHJ5Kj4oaXRlbSk7CiAgICAgICAgIGl0ci0+dGlsZV9mcmVlLmNiKGl0ci0+dGlsZV9mcmVl
LmRhdGEsIGl0ci0+dGlsZSk7CiAgICAgICAgIGZyZWUoaXRyKTsKICAgICB9CiAKLSAgICB0dWMt
Pm1lbW9yeS51c2VkID0gMDsKLSAgICB0dWMtPmVudHJpZXMuY291bnQgPSAwOworICAgIHRpbGVV
bnVzZWRDYWNoZS0+bWVtb3J5LnVzZWQgPSAwOworICAgIHRpbGVVbnVzZWRDYWNoZS0+ZW50cmll
cy5jb3VudCA9IDA7CiB9CiAKIC8qKgotICogSG9sZCByZWZlcmVuY2UgdG8gY2FjaGUuCisgKiBo
ZWlnaHRvbGQgcmVmZXJlbmNlIHRvIGNhY2hlLgogICoKICAqIEByZXR1cm4gc2FtZSBwb2ludGVy
IGFzIHRha2VuLgogICoKICAqIEBzZWUgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3VucmVmKCkKICAq
LwotRXdrX1RpbGVfVW51c2VkX0NhY2hlICpld2tfdGlsZV91bnVzZWRfY2FjaGVfcmVmKEV3a19U
aWxlX1VudXNlZF9DYWNoZSAqdHVjKQorRXdrX1RpbGVfVW51c2VkX0NhY2hlKiBld2tfdGlsZV91
bnVzZWRfY2FjaGVfcmVmKEV3a19UaWxlX1VudXNlZF9DYWNoZSogdGlsZVVudXNlZENhY2hlKQog
ewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh0dWMsIDApOwotICAgIHR1Yy0+
cmVmZXJlbmNlcysrOwotICAgIHJldHVybiB0dWM7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk5fVkFMKHRpbGVVbnVzZWRDYWNoZSwgMCk7CisgICAgdGlsZVVudXNlZENhY2hlLT5yZWZl
cmVuY2VzKys7CisgICAgcmV0dXJuIHRpbGVVbnVzZWRDYWNoZTsKIH0KIAogLyoqCkBAIC02MjUs
NDAgKzYyMiw0MCBAQCBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKmV3a190aWxlX3VudXNlZF9jYWNo
ZV9yZWYoRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMpCiAgKiBAc2VlIGV3a190aWxlX3VudXNl
ZF9jYWNoZV9yZWYoKQogICogQHNlZSBld2tfdGlsZV91bnVzZWRfY2FjaGVfZnJlZSgpCiAgKi8K
LXZvaWQgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3VucmVmKEV3a19UaWxlX1VudXNlZF9DYWNoZSAq
dHVjKQordm9pZCBld2tfdGlsZV91bnVzZWRfY2FjaGVfdW5yZWYoRXdrX1RpbGVfVW51c2VkX0Nh
Y2hlKiB0aWxlVW51c2VkQ2FjaGUpCiB7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4o
dHVjKTsKLSAgICB0dWMtPnJlZmVyZW5jZXMtLTsKLSAgICBpZiAoIXR1Yy0+cmVmZXJlbmNlcykK
LSAgICAgICAgX2V3a190aWxlX3VudXNlZF9jYWNoZV9mcmVlKHR1Yyk7CisgICAgRUlOQV9TQUZF
VFlfT05fTlVMTF9SRVRVUk4odGlsZVVudXNlZENhY2hlKTsKKyAgICB0aWxlVW51c2VkQ2FjaGUt
PnJlZmVyZW5jZXMtLTsKKyAgICBpZiAoIXRpbGVVbnVzZWRDYWNoZS0+cmVmZXJlbmNlcykKKyAg
ICAgICAgX2V3a190aWxlX3VudXNlZF9jYWNoZV9mcmVlKHRpbGVVbnVzZWRDYWNoZSk7CiB9CiAK
LXZvaWQgZXdrX3RpbGVfdW51c2VkX2NhY2hlX21heF9zZXQoRXdrX1RpbGVfVW51c2VkX0NhY2hl
ICp0dWMsIHNpemVfdCBtYXgpCit2b2lkIGV3a190aWxlX3VudXNlZF9jYWNoZV9tYXhfc2V0KEV3
a19UaWxlX1VudXNlZF9DYWNoZSogdGlsZVVudXNlZENhY2hlLCBzaXplX3QgbWF4KQogewotICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHR1Yyk7Ci0gICAgdHVjLT5tZW1vcnkubWF4ID0g
bWF4OworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHRpbGVVbnVzZWRDYWNoZSk7Cisg
ICAgdGlsZVVudXNlZENhY2hlLT5tZW1vcnkubWF4ID0gbWF4OwogfQogCi1zaXplX3QgZXdrX3Rp
bGVfdW51c2VkX2NhY2hlX21heF9nZXQoY29uc3QgRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMp
CitzaXplX3QgZXdrX3RpbGVfdW51c2VkX2NhY2hlX21heF9nZXQoY29uc3QgRXdrX1RpbGVfVW51
c2VkX0NhY2hlKiB0aWxlVW51c2VkQ2FjaGUpCiB7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk5fVkFMKHR1YywgMCk7Ci0gICAgcmV0dXJuIHR1Yy0+bWVtb3J5Lm1heDsKKyAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodGlsZVVudXNlZENhY2hlLCAwKTsKKyAgICByZXR1
cm4gdGlsZVVudXNlZENhY2hlLT5tZW1vcnkubWF4OwogfQogCi1zaXplX3QgZXdrX3RpbGVfdW51
c2VkX2NhY2hlX3VzZWRfZ2V0KGNvbnN0IEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjKQorc2l6
ZV90IGV3a190aWxlX3VudXNlZF9jYWNoZV91c2VkX2dldChjb25zdCBFd2tfVGlsZV9VbnVzZWRf
Q2FjaGUqIHRpbGVVbnVzZWRDYWNoZSkKIHsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
Tl9WQUwodHVjLCAwKTsKLSAgICByZXR1cm4gdHVjLT5tZW1vcnkudXNlZDsKKyAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodGlsZVVudXNlZENhY2hlLCAwKTsKKyAgICByZXR1cm4g
dGlsZVVudXNlZENhY2hlLT5tZW1vcnkudXNlZDsKIH0KIAotc2l6ZV90IGV3a190aWxlX3VudXNl
ZF9jYWNoZV9mbHVzaChFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1Yywgc2l6ZV90IGJ5dGVzKQor
c2l6ZV90IGV3a190aWxlX3VudXNlZF9jYWNoZV9mbHVzaChFd2tfVGlsZV9VbnVzZWRfQ2FjaGUq
IHRpbGVVbnVzZWRDYWNoZSwgc2l6ZV90IGJ5dGVzKQogewotICAgIEVpbmFfTGlzdCAqbCwgKmxf
bmV4dDsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodHVjLCAwKTsKKyAgICBF
aW5hX0xpc3QqIGwsICogbF9uZXh0OworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZB
TCh0aWxlVW51c2VkQ2FjaGUsIDApOwogICAgIHNpemVfdCBkb25lOwogICAgIHVuc2lnbmVkIGlu
dCBjb3VudDsKIAotICAgIGlmICghdHVjLT5lbnRyaWVzLmNvdW50KQorICAgIGlmICghdGlsZVVu
dXNlZENhY2hlLT5lbnRyaWVzLmNvdW50KQogICAgICAgICByZXR1cm4gMDsKICAgICBpZiAoYnl0
ZXMgPCAxKQogICAgICAgICByZXR1cm4gMDsKQEAgLTY3MSw1NSArNjY4LDU1IEBAIHNpemVfdCBl
d2tfdGlsZV91bnVzZWRfY2FjaGVfZmx1c2goRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMsIHNp
emVfdCBieXRlcykKICAgICB2b2lkKiBpdGVtOwogICAgIGRvbmUgPSAwOwogICAgIGNvdW50ID0g
MDsKLSAgICBFSU5BX0xJU1RfRk9SRUFDSF9TQUZFKHR1Yy0+ZW50cmllcy5saXN0LCBsLCBsX25l
eHQsIGl0ZW0pIHsKKyAgICBFSU5BX0xJU1RfRk9SRUFDSF9TQUZFKHRpbGVVbnVzZWRDYWNoZS0+
ZW50cmllcy5saXN0LCBsLCBsX25leHQsIGl0ZW0pIHsKICAgICAgICAgRXdrX1RpbGVfVW51c2Vk
X0NhY2hlX0VudHJ5KiBpdHIgPSBzdGF0aWNfY2FzdDxFd2tfVGlsZV9VbnVzZWRfQ2FjaGVfRW50
cnkqPihpdGVtKTsKLSAgICAgICAgRXdrX1RpbGUgKnQgPSBpdHItPnRpbGU7CisgICAgICAgIEV3
a19UaWxlKiB0aWxlID0gaXRyLT50aWxlOwogICAgICAgICBpZiAoZG9uZSA+IGJ5dGVzKQogICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGlmICh0dWMtPmxvY2tlZC5sb2NrZWQKLSAgICAgICAg
ICAgICYmIHQtPnggKyB0LT53ID4gdHVjLT5sb2NrZWQueAotICAgICAgICAgICAgJiYgdC0+eSAr
IHQtPmggPiB0dWMtPmxvY2tlZC55Ci0gICAgICAgICAgICAmJiB0LT54IDwgdHVjLT5sb2NrZWQu
eCArIHR1Yy0+bG9ja2VkLncKLSAgICAgICAgICAgICYmIHQtPnkgPCB0dWMtPmxvY2tlZC55ICsg
dHVjLT5sb2NrZWQuaAotICAgICAgICAgICAgJiYgdC0+em9vbSA9PSB0dWMtPmxvY2tlZC56b29t
KSB7CisgICAgICAgIGlmICh0aWxlVW51c2VkQ2FjaGUtPmxvY2tlZC5sb2NrZWQKKyAgICAgICAg
ICAgICYmIHRpbGUtPnggKyB0aWxlLT53aWR0aCA+IHRpbGVVbnVzZWRDYWNoZS0+bG9ja2VkLngK
KyAgICAgICAgICAgICYmIHRpbGUtPnkgKyB0aWxlLT5oZWlnaHQgPiB0aWxlVW51c2VkQ2FjaGUt
PmxvY2tlZC55CisgICAgICAgICAgICAmJiB0aWxlLT54IDwgdGlsZVVudXNlZENhY2hlLT5sb2Nr
ZWQueCArIHRpbGVVbnVzZWRDYWNoZS0+bG9ja2VkLncKKyAgICAgICAgICAgICYmIHRpbGUtPnkg
PCB0aWxlVW51c2VkQ2FjaGUtPmxvY2tlZC55ICsgdGlsZVVudXNlZENhY2hlLT5sb2NrZWQuaAor
ICAgICAgICAgICAgJiYgdGlsZS0+em9vbSA9PSB0aWxlVW51c2VkQ2FjaGUtPmxvY2tlZC56b29t
KSB7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICBkb25lICs9IHNp
emVvZihFd2tfVGlsZSkgKyBpdHItPnRpbGUtPmJ5dGVzOwogICAgICAgICBpdHItPnRpbGVfZnJl
ZS5jYihpdHItPnRpbGVfZnJlZS5kYXRhLCBpdHItPnRpbGUpOwotICAgICAgICB0dWMtPmVudHJp
ZXMubGlzdCA9IGVpbmFfbGlzdF9yZW1vdmVfbGlzdCh0dWMtPmVudHJpZXMubGlzdCwgbCk7Cisg
ICAgICAgIHRpbGVVbnVzZWRDYWNoZS0+ZW50cmllcy5saXN0ID0gZWluYV9saXN0X3JlbW92ZV9s
aXN0KHRpbGVVbnVzZWRDYWNoZS0+ZW50cmllcy5saXN0LCBsKTsKICAgICAgICAgZnJlZShpdHIp
OwogICAgICAgICBjb3VudCsrOwogICAgIH0KIAotICAgIHR1Yy0+bWVtb3J5LnVzZWQgLT0gZG9u
ZTsKLSAgICB0dWMtPmVudHJpZXMuY291bnQgLT0gY291bnQ7CisgICAgdGlsZVVudXNlZENhY2hl
LT5tZW1vcnkudXNlZCAtPSBkb25lOworICAgIHRpbGVVbnVzZWRDYWNoZS0+ZW50cmllcy5jb3Vu
dCAtPSBjb3VudDsKIAogICAgIHJldHVybiBkb25lOwogfQogCi12b2lkIGV3a190aWxlX3VudXNl
ZF9jYWNoZV9hdXRvX2ZsdXNoKEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjKQordm9pZCBld2tf
dGlsZV91bnVzZWRfY2FjaGVfYXV0b19mbHVzaChFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHRpbGVV
bnVzZWRDYWNoZSkKIHsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0dWMpOwotICAg
IGlmICh0dWMtPm1lbW9yeS51c2VkIDw9IHR1Yy0+bWVtb3J5Lm1heCkKKyAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTih0aWxlVW51c2VkQ2FjaGUpOworICAgIGlmICh0aWxlVW51c2VkQ2Fj
aGUtPm1lbW9yeS51c2VkIDw9IHRpbGVVbnVzZWRDYWNoZS0+bWVtb3J5Lm1heCkKICAgICAgICAg
cmV0dXJuOwotICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9mbHVzaCh0dWMsIHR1Yy0+bWVtb3J5
LnVzZWQgLSB0dWMtPm1lbW9yeS5tYXgpOwotICAgIGlmICh0dWMtPm1lbW9yeS51c2VkID4gdHVj
LT5tZW1vcnkubWF4KQorICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9mbHVzaCh0aWxlVW51c2Vk
Q2FjaGUsIHRpbGVVbnVzZWRDYWNoZS0+bWVtb3J5LnVzZWQgLSB0aWxlVW51c2VkQ2FjaGUtPm1l
bW9yeS5tYXgpOworICAgIGlmICh0aWxlVW51c2VkQ2FjaGUtPm1lbW9yeS51c2VkID4gdGlsZVVu
dXNlZENhY2hlLT5tZW1vcnkubWF4KQogICAgICAgICBDUklUSUNBTCgiQ2FjaGUgc3RpbGwgdXNp
bmcgdG9vIG11Y2ggbWVtb3J5OiAlemQgS0I7IG1heDogJXpkIEtCIiwKLSAgICAgICAgICAgICAg
ICAgdHVjLT5tZW1vcnkudXNlZCwgdHVjLT5tZW1vcnkubWF4KTsKKyAgICAgICAgICAgICAgICAg
dGlsZVVudXNlZENhY2hlLT5tZW1vcnkudXNlZCwgdGlsZVVudXNlZENhY2hlLT5tZW1vcnkubWF4
KTsKIH0KIAogLyoqCiAgKiBGcmVlemUgY2FjaGUgdG8gbm90IGRvIG1haW50ZW5hbmNlIHRhc2tz
LgogICoKICAqIE1haW50ZW5hbmNlIHRhc2tzIG9wdGltaXplIGNhY2hlIHVzYWdlLCBidXQgbWF5
YmUgd2Uga25vdyB3ZSBzaG91bGQKLSAqIGhvbGQgb24gdGhlbSB1bnRpbCB3ZSBkbyB0aGUgbGFz
dCBvcGVyYXRpb24sIGluIHRoaXMgY2FzZSB3ZSBmcmVlemUKKyAqIGhlaWdodG9sZCBvbiB0aGVt
IHVudGlsIHdlIGRvIHRoZSBsYXN0IG9wZXJhdGlvbiwgaW4gdGhpcyBjYXNlIHdlIGZyZWV6ZQog
ICogd2hpbGUgb3BlcmF0aW5nIGFuZCB0aGVuIHRoYXcgd2hlbiB3ZSdyZSBkb25lLgogICoKICAq
IEBzZWUgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3RoYXcoKQogICovCi12b2lkIGV3a190aWxlX3Vu
dXNlZF9jYWNoZV9mcmVlemUoRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMpCit2b2lkIGV3a190
aWxlX3VudXNlZF9jYWNoZV9mcmVlemUoRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0aWxlVW51c2Vk
Q2FjaGUpCiB7Ci0gICAgdHVjLT5mcm96ZW4rKzsKKyAgICB0aWxlVW51c2VkQ2FjaGUtPmZyb3pl
bisrOwogfQogCiAvKioKQEAgLTcyOCwxNCArNzI1LDE0IEBAIHZvaWQgZXdrX3RpbGVfdW51c2Vk
X2NhY2hlX2ZyZWV6ZShFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YykKICAqIElmIHRoaXMgaXMg
dGhlIGxhc3QgY291bnRlcnBhcnQgb2YgZnJlZXplLCB0aGVuIG1haW50ZW5hbmNlIHRhc2tzCiAg
KiB3aWxsIHJ1biBpbW1lZGlhdGVseS4KICAqLwotdm9pZCBld2tfdGlsZV91bnVzZWRfY2FjaGVf
dGhhdyhFd2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YykKK3ZvaWQgZXdrX3RpbGVfdW51c2VkX2Nh
Y2hlX3RoYXcoRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0aWxlVW51c2VkQ2FjaGUpCiB7Ci0gICAg
aWYgKCF0dWMtPmZyb3plbikgeworICAgIGlmICghdGlsZVVudXNlZENhY2hlLT5mcm96ZW4pIHsK
ICAgICAgICAgRVJSKCJ0aGF3aW5nIG1vcmUgdGhhbiBmcmVlemluZyEiKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIAotICAgIHR1Yy0+ZnJvemVuLS07CisgICAgdGlsZVVudXNlZENhY2hlLT5m
cm96ZW4tLTsKIH0KIAogLyoqCkBAIC03NDUsMzIgKzc0MiwzMiBAQCB2b2lkIGV3a190aWxlX3Vu
dXNlZF9jYWNoZV90aGF3KEV3a19UaWxlX1VudXNlZF9DYWNoZSAqdHVjKQogICogaXMgcmVtb3Zl
ZCBmcm9tIHRoZSBjYWNoZSBhbmQgbWF5IGJlIGdpdmVuIGJhY2sgd2l0aAogICogZXdrX3RpbGVf
dW51c2VkX2NhY2hlX3RpbGVfcHV0KCkuCiAgKgotICogQHBhcmFtIHR1YyBjYWNoZSBvZiB1bnVz
ZWQgdGlsZXMKKyAqIEBwYXJhbSB0aWxlVW51c2VkQ2FjaGUgY2FjaGUgb2YgdW51c2VkIHRpbGVz
CiAgKiBAcGFyYW0gdCB0aGUgdGlsZSB0byBiZSByZW1vdmVkIGZyb20gRXdrX1RpbGVfVW51c2Vk
X0NhY2hlLgogICoKICAqIEByZXR1cm4gI0VJTkFfVFJVRSBvbiBzdWNjZXNzLCAjRUlOQV9GQUxT
RSBvdGhlcndpc2UuCiAgKi8KLUVpbmFfQm9vbCBld2tfdGlsZV91bnVzZWRfY2FjaGVfdGlsZV9n
ZXQoRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMsIEV3a19UaWxlICp0KQorRWluYV9Cb29sIGV3
a190aWxlX3VudXNlZF9jYWNoZV90aWxlX2dldChFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHRpbGVV
bnVzZWRDYWNoZSwgRXdrX1RpbGUqIHRpbGUpCiB7Ci0gICAgRWluYV9MaXN0ICplLCAqbDsKKyAg
ICBFaW5hX0xpc3QqIGUsICogbDsKIAogICAgIHZvaWQqIGl0ZW07CiAgICAgZSA9IDA7Ci0gICAg
RUlOQV9MSVNUX0ZPUkVBQ0godHVjLT5lbnRyaWVzLmxpc3QsIGwsIGl0ZW0pIHsKKyAgICBFSU5B
X0xJU1RfRk9SRUFDSCh0aWxlVW51c2VkQ2FjaGUtPmVudHJpZXMubGlzdCwgbCwgaXRlbSkgewog
ICAgICAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGVfRW50cnkqIGVudHJ5ID0gc3RhdGljX2Nhc3Q8
RXdrX1RpbGVfVW51c2VkX0NhY2hlX0VudHJ5Kj4oaXRlbSk7Ci0gICAgICAgIGlmIChlbnRyeS0+
dGlsZSA9PSB0KSB7CisgICAgICAgIGlmIChlbnRyeS0+dGlsZSA9PSB0aWxlKSB7CiAgICAgICAg
ICAgICBlID0gbDsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQogICAgIGlm
ICghZSkgewotICAgICAgICBFUlIoInRpbGUgJXAgbm90IGZvdW5kIGluIGNhY2hlICVwIiwgdCwg
dHVjKTsKKyAgICAgICAgRVJSKCJ0aWxlICVwIG5vdCBmb3VuZCBpbiBjYWNoZSAlcCIsIHRpbGUs
IHRpbGVVbnVzZWRDYWNoZSk7CiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwogICAgIH0KIAot
ICAgIHR1Yy0+ZW50cmllcy5jb3VudC0tOwotICAgIHR1Yy0+bWVtb3J5LnVzZWQgLT0gc2l6ZW9m
KEV3a19UaWxlKSArIHQtPmJ5dGVzOwotICAgIHR1Yy0+ZW50cmllcy5saXN0ID0gZWluYV9saXN0
X3JlbW92ZV9saXN0KHR1Yy0+ZW50cmllcy5saXN0LCBlKTsKKyAgICB0aWxlVW51c2VkQ2FjaGUt
PmVudHJpZXMuY291bnQtLTsKKyAgICB0aWxlVW51c2VkQ2FjaGUtPm1lbW9yeS51c2VkIC09IHNp
emVvZihFd2tfVGlsZSkgKyB0aWxlLT5ieXRlczsKKyAgICB0aWxlVW51c2VkQ2FjaGUtPmVudHJp
ZXMubGlzdCA9IGVpbmFfbGlzdF9yZW1vdmVfbGlzdCh0aWxlVW51c2VkQ2FjaGUtPmVudHJpZXMu
bGlzdCwgZSk7CiAgICAgZnJlZShpdGVtKTsKIAogICAgIHJldHVybiBFSU5BX1RSVUU7CkBAIC03
NzksNyArNzc2LDcgQEAgRWluYV9Cb29sIGV3a190aWxlX3VudXNlZF9jYWNoZV90aWxlX2dldChF
d2tfVGlsZV9VbnVzZWRfQ2FjaGUgKnR1YywgRXdrX1RpbGUgKnQKIC8qKgogICogUHV0IHRpbGUg
aW50byBjYWNoZSBvZiB1bnVzZWQgdGlsZXMsIGFkZGluZyBpdCB0byB0aGUgY2FjaGUuCiAgKgot
ICogVGhpcyBzaG91bGQgYmUgY2FsbGVkIHdoZW4gQGMgdC0+dmlzaWJsZSBpcyBAYyAwIGFuZCBu
byBvYmplY3RzIGFyZQorICogVGhpcyBzaG91bGQgYmUgY2FsbGVkIHdoZW4gQGMgdGlsZS0+dmlz
aWJsZSBpcyBAYyAwIGFuZCBubyBvYmplY3RzIGFyZQogICogdXNpbmcgdGhlIHRpbGUgYW55bW9y
ZSwgbWFraW5nIGl0IGF2YWlsYWJsZSB0byBiZSBleHBpcmVkIGFuZCBoYXZlCiAgKiBpdHMgbWVt
b3J5IHJlcGxhY2VkLgogICoKQEAgLTc4OCw2MCArNzg1LDYwIEBAIEVpbmFfQm9vbCBld2tfdGls
ZV91bnVzZWRfY2FjaGVfdGlsZV9nZXQoRXdrX1RpbGVfVW51c2VkX0NhY2hlICp0dWMsIEV3a19U
aWxlICp0CiAgKiBjYW4gY2FsbCBld2tfdGlsZV91bnVzZWRfY2FjaGVfYXV0b19mbHVzaCgpIHRv
IGZyZWUgdGhlbS4gVGhpcyBpcyBkb25lCiAgKiBiZWNhdXNlIHVzdWFsbHkgd2Ugd2FudCBhIGxh
enkgb3BlcmF0aW9uIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2UuCiAgKgotICogQHBhcmFtIHR1YyBj
YWNoZSBvZiB1bnVzZWQgdGlsZXMKKyAqIEBwYXJhbSB0aWxlVW51c2VkQ2FjaGUgY2FjaGUgb2Yg
dW51c2VkIHRpbGVzCiAgKiBAcGFyYW0gdCB0aWxlIHRvIGJlIGFkZGVkIHRvIGNhY2hlLgogICog
QHBhcmFtIHRpbGVfZnJlZV9jYiBmdW5jdGlvbiB1c2VkIHRvIGZyZWUgdGlsZXMuCiAgKiBAcGFy
YW0gZGF0YSBjb250ZXh0IHRvIGdpdmUgYmFjayB0byBAYSB0aWxlX2ZyZWVfY2IgYXMgZmlyc3Qg
YXJndW1lbnQuCiAgKgotICogQHJldHVybiAjRUlOQV9UUlVFIG9uIHN1Y2Nlc3MsICNFSU5BX0ZB
TFNFIG90aGVyd2lzZS4gSWYgQGMgdC0+dmlzaWJsZQorICogQHJldHVybiAjRUlOQV9UUlVFIG9u
IHN1Y2Nlc3MsICNFSU5BX0ZBTFNFIG90aGVyd2lzZS4gSWYgQGMgdGlsZS0+dmlzaWJsZQogICog
ICAgICAgICBpcyBub3QgI0VJTkFfRkFMU0UsIHRoZW4gaXQgd2lsbCByZXR1cm4gI0VJTkFfRkFM
U0UuCiAgKgogICogQHNlZSBld2tfdGlsZV91bnVzZWRfY2FjaGVfYXV0b19mbHVzaCgpCiAgKi8K
LUVpbmFfQm9vbCBld2tfdGlsZV91bnVzZWRfY2FjaGVfdGlsZV9wdXQoRXdrX1RpbGVfVW51c2Vk
X0NhY2hlICp0dWMsIEV3a19UaWxlICp0LCB2b2lkICgqdGlsZV9mcmVlX2NiKSh2b2lkICpkYXRh
LCBFd2tfVGlsZSAqdCksIGNvbnN0IHZvaWQgKmRhdGEpCitFaW5hX0Jvb2wgZXdrX3RpbGVfdW51
c2VkX2NhY2hlX3RpbGVfcHV0KEV3a19UaWxlX1VudXNlZF9DYWNoZSogdGlsZVVudXNlZENhY2hl
LCBFd2tfVGlsZSogdGlsZSwgdm9pZCAoKiB0aWxlX2ZyZWVfY2IpKHZvaWQqIGRhdGEsIEV3a19U
aWxlKiB0aWxlKSwgY29uc3Qgdm9pZCogZGF0YSkKIHsKLSAgICBFd2tfVGlsZV9VbnVzZWRfQ2Fj
aGVfRW50cnkgKmU7CisgICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlX0VudHJ5KiB1Y2U7CiAKLSAg
ICBpZiAodC0+dmlzaWJsZSkgewotICAgICAgICBFUlIoInRpbGU9JXAgaXMgbm90IHVudXNlZCAo
dmlzaWJsZT0lZCkiLCB0LCB0LT52aXNpYmxlKTsKKyAgICBpZiAodGlsZS0+dmlzaWJsZSkgewor
ICAgICAgICBFUlIoInRpbGU9JXAgaXMgbm90IHVudXNlZCAodmlzaWJsZT0lZCkiLCB0aWxlLCB0
aWxlLT52aXNpYmxlKTsKICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CiAgICAgfQogCi0gICAg
ZSA9IHN0YXRpY19jYXN0PEV3a19UaWxlX1VudXNlZF9DYWNoZV9FbnRyeSo+KG1hbGxvYyhzaXpl
b2YoRXdrX1RpbGVfVW51c2VkX0NhY2hlX0VudHJ5KSkpOwotICAgIGlmICghZSkKKyAgICB1Y2Ug
PSBzdGF0aWNfY2FzdDxFd2tfVGlsZV9VbnVzZWRfQ2FjaGVfRW50cnkqPihtYWxsb2Moc2l6ZW9m
KEV3a19UaWxlX1VudXNlZF9DYWNoZV9FbnRyeSkpKTsKKyAgICBpZiAoIXVjZSkKICAgICAgICAg
cmV0dXJuIEVJTkFfRkFMU0U7CiAKLSAgICB0dWMtPmVudHJpZXMubGlzdCA9IGVpbmFfbGlzdF9h
cHBlbmQodHVjLT5lbnRyaWVzLmxpc3QsIGUpOworICAgIHRpbGVVbnVzZWRDYWNoZS0+ZW50cmll
cy5saXN0ID0gZWluYV9saXN0X2FwcGVuZCh0aWxlVW51c2VkQ2FjaGUtPmVudHJpZXMubGlzdCwg
dWNlKTsKICAgICBpZiAoZWluYV9lcnJvcl9nZXQoKSkgewogICAgICAgICBFUlIoIkxpc3QgYWxs
b2NhdGlvbiBmYWlsZWQiKTsKICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CiAgICAgfQogCi0g
ICAgZS0+dGlsZSA9IHQ7Ci0gICAgZS0+d2VpZ2h0ID0gMDsgLyogY2FsY3VsYXRlZCBqdXN0IGJl
Zm9yZSBzb3J0ICovCi0gICAgZS0+dGlsZV9mcmVlLmNiID0gdGlsZV9mcmVlX2NiOwotICAgIGUt
PnRpbGVfZnJlZS5kYXRhID0gKHZvaWQgKilkYXRhOworICAgIHVjZS0+dGlsZSA9IHRpbGU7Cisg
ICAgdWNlLT53ZWlnaHQgPSAwOyAvKiBjYWxjdWxhdGVkIGp1c3QgYmVmb3JlIHNvcnQgKi8KKyAg
ICB1Y2UtPnRpbGVfZnJlZS5jYiA9IHRpbGVfZnJlZV9jYjsKKyAgICB1Y2UtPnRpbGVfZnJlZS5k
YXRhID0gKHZvaWQqKWRhdGE7CiAKLSAgICB0dWMtPmVudHJpZXMuY291bnQrKzsKLSAgICB0dWMt
Pm1lbW9yeS51c2VkICs9IHNpemVvZihFd2tfVGlsZSkgKyB0LT5ieXRlczsKKyAgICB0aWxlVW51
c2VkQ2FjaGUtPmVudHJpZXMuY291bnQrKzsKKyAgICB0aWxlVW51c2VkQ2FjaGUtPm1lbW9yeS51
c2VkICs9IHNpemVvZihFd2tfVGlsZSkgKyB0aWxlLT5ieXRlczsKIAogICAgIHJldHVybiBFSU5B
X1RSVUU7CiB9CiAKLXZvaWQgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2RiZyhjb25zdCBFd2tfVGls
ZV9VbnVzZWRfQ2FjaGUgKnR1YykKK3ZvaWQgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2RiZyhjb25z
dCBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHRpbGVVbnVzZWRDYWNoZSkKIHsKICAgICB2b2lkKiBp
dGVtOwotICAgIEVpbmFfTGlzdCAqbDsKKyAgICBFaW5hX0xpc3QqIGw7CiAgICAgaW50IGNvdW50
ID0gMDsKICAgICBwcmludGYoIkNhY2hlIG9mIHVudXNlZCB0aWxlczogZW50cmllczogJXp1LyV6
dSwgbWVtb3J5OiAlenUvJXp1XG4iLAotICAgICAgICAgICB0dWMtPmVudHJpZXMuY291bnQsIHR1
Yy0+ZW50cmllcy5hbGxvY2F0ZWQsCi0gICAgICAgICAgIHR1Yy0+bWVtb3J5LnVzZWQsIHR1Yy0+
bWVtb3J5Lm1heCk7CisgICAgICAgICAgIHRpbGVVbnVzZWRDYWNoZS0+ZW50cmllcy5jb3VudCwg
dGlsZVVudXNlZENhY2hlLT5lbnRyaWVzLmFsbG9jYXRlZCwKKyAgICAgICAgICAgdGlsZVVudXNl
ZENhY2hlLT5tZW1vcnkudXNlZCwgdGlsZVVudXNlZENhY2hlLT5tZW1vcnkubWF4KTsKIAotICAg
IEVJTkFfTElTVF9GT1JFQUNIKHR1Yy0+ZW50cmllcy5saXN0LCBsLCBpdGVtKSB7Ci0gICAgICAg
IGNvbnN0IEV3a19UaWxlICp0ID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGVfVW51c2VkX0NhY2hlX0Vu
dHJ5Kj4oaXRlbSktPnRpbGU7CisgICAgRUlOQV9MSVNUX0ZPUkVBQ0godGlsZVVudXNlZENhY2hl
LT5lbnRyaWVzLmxpc3QsIGwsIGl0ZW0pIHsKKyAgICAgICAgY29uc3QgRXdrX1RpbGUqIHRpbGUg
PSBzdGF0aWNfY2FzdDxFd2tfVGlsZV9VbnVzZWRfQ2FjaGVfRW50cnkqPihpdGVtKS0+dGlsZTsK
ICAgICAgICAgcHJpbnRmKCIgWyUzbHUsJTNsdSArICVkeCVkIEAgJTAuM2ZdJWMiLAotICAgICAg
ICAgICAgICAgdC0+Y29sLCB0LT5yb3csIHQtPncsIHQtPmgsIHQtPnpvb20sCi0gICAgICAgICAg
ICAgICB0LT52aXNpYmxlID8gJyonOiAnICcpOworICAgICAgICAgICAgICAgdGlsZS0+Y29sLCB0
aWxlLT5yb3csIHRpbGUtPndpZHRoLCB0aWxlLT5oZWlnaHQsIHRpbGUtPnpvb20sCisgICAgICAg
ICAgICAgICB0aWxlLT52aXNpYmxlID8gJyonIDogJyAnKTsKIAogICAgICAgICBpZiAoIShjb3Vu
dCAlIDQpKQogICAgICAgICAgICAgcHJpbnRmKCJcbiIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9lZmwvZXdrL2V3a190aWxlZF9tb2RlbC5oIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3
a190aWxlZF9tb2RlbC5oCmluZGV4IGU2NWYzMTBiZTBlZDAyZDVkZTgxZjg1ZmY5N2IwOTQ1MDYz
ZThhZTQuLjg1ZGUwMTY4NzMxMWM2NTYzZWY4ZmIwMWUwZjIwNTFjNTIyYjY0YWQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfbW9kZWwuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX21vZGVsLmgKQEAgLTM0LDcgKzM0LDcgQEAgdm9pZCBl
d2tfdGlsZV9oaWRlKEV3a19UaWxlKiB0KTsKIEVpbmFfQm9vbCBld2tfdGlsZV92aXNpYmxlX2dl
dChFd2tfVGlsZSogdCk7CiB2b2lkIGV3a190aWxlX3VwZGF0ZV9mdWxsKEV3a19UaWxlKiB0KTsK
IHZvaWQgZXdrX3RpbGVfdXBkYXRlX2FyZWEoRXdrX1RpbGUqIHQsIGNvbnN0IEVpbmFfUmVjdGFu
Z2xlKiByKTsKLXZvaWQgZXdrX3RpbGVfdXBkYXRlc19wcm9jZXNzKEV3a19UaWxlKiB0LCB2b2lk
ICgqIGNiKSh2b2lkKiBkYXRhLCBFd2tfVGlsZSogdCwgY29uc3QgRWluYV9SZWN0YW5nbGUqIHVw
ZGF0ZSksIGNvbnN0IHZvaWQqIGRhdGEpOwordm9pZCBld2tfdGlsZV91cGRhdGVzX3Byb2Nlc3Mo
RXdrX1RpbGUqIHQsIHZvaWQgKCpjYikodm9pZCogZGF0YSwgRXdrX1RpbGUqIHQsIGNvbnN0IEVp
bmFfUmVjdGFuZ2xlKiB1cGRhdGUpLCBjb25zdCB2b2lkKiBkYXRhKTsKIHZvaWQgZXdrX3RpbGVf
dXBkYXRlc19jbGVhcihFd2tfVGlsZSogdCk7CiAKIC8qIGNhY2hlIG9mIHVudXNlZCB0aWxlcyAq
LwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a192aWV3LmNwcCBiL1NvdXJj
ZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5jcHAKaW5kZXggYzEzNzZhOTAwODJiNGJhYTAyYzZk
OTNmYjcwN2ViYjVlNmFjMzJlYy4uZjE5NzNlNDNkZDRlN2FjMGE2YWJmY2EwMWQ1NjdmODBiNDNl
ZDc1NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a192aWV3LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXcuY3BwCkBAIC0xNzgsNDQgKzE3OCw0NCBA
QCBzdHJ1Y3QgX0V3a19WaWV3X1ByaXZhdGVfRGF0YSB7CiB9OwogCiAjaWZuZGVmIEVXS19UWVBF
X0NIRUNLCi0jZGVmaW5lIEVXS19WSUVXX1RZUEVfQ0hFQ0sobywgLi4uKSBkbyB7IH0gd2hpbGUg
KDApCisjZGVmaW5lIEVXS19WSUVXX1RZUEVfQ0hFQ0soZXdrVmlldywgLi4uKSBkbyB7IH0gd2hp
bGUgKDApCiAjZWxzZQotI2RlZmluZSBFV0tfVklFV19UWVBFX0NIRUNLKG8sIC4uLikgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBFV0tfVklFV19UWVBFX0NI
RUNLKGV3a1ZpZXcsIC4uLikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAog
ICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgICAgICBjb25zdCBjaGFyKiBfdG1wX290eXBlID0gZXZhc19v
YmplY3RfdHlwZV9nZXQobyk7ICAgICAgICAgICAgICAgXAotICAgICAgICBjb25zdCBFdmFzX1Nt
YXJ0KiBfdG1wX3MgPSBldmFzX29iamVjdF9zbWFydF9zbWFydF9nZXQobyk7ICAgICAgXAorICAg
ICAgICBjb25zdCBjaGFyKiBfdG1wX290eXBlID0gZXZhc19vYmplY3RfdHlwZV9nZXQoZXdrVmll
dyk7ICAgICAgICAgICAgICAgXAorICAgICAgICBjb25zdCBFdmFzX1NtYXJ0KiBfdG1wX3MgPSBl
dmFzX29iamVjdF9zbWFydF9zbWFydF9nZXQoZXdrVmlldyk7ICAgICAgXAogICAgICAgICBpZiAo
RUlOQV9VTkxJS0VMWSghX3RtcF9zKSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAogICAgICAgICAgICAgRUlOQV9MT0dfQ1JJVCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICgiJXAgKCVzKSBpcyBub3Qg
YSBzbWFydCBvYmplY3QhIiwgbywgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAg
ICgiJXAgKCVzKSBpcyBub3QgYSBzbWFydCBvYmplY3QhIiwgZXdrVmlldywgICAgICAgICAgICAg
ICAgICAgXAogICAgICAgICAgICAgICAgIF90bXBfb3R5cGUgPyBfdG1wX290eXBlIDogIihudWxs
KSIpOyAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICByZXR1cm4gX19WQV9BUkdTX187
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIH0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCiAgICAgICAgIGNvbnN0IEV2YXNfU21hcnRfQ2xhc3MqIF90bXBfc2MgPSBldmFzX3NtYXJ0
X2NsYXNzX2dldChfdG1wX3MpOyBcCiAgICAgICAgIGlmIChFSU5BX1VOTElLRUxZKCFfdG1wX3Nj
KSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICBFSU5B
X0xPR19DUklUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0gICAgICAgICAgICAgICAgKCIlcCAoJXMpIGlzIG5vdCBhIHNtYXJ0IG9iamVjdCEiLCBvLCAg
ICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgKCIlcCAoJXMpIGlzIG5vdCBhIHNt
YXJ0IG9iamVjdCEiLCBld2tWaWV3LCAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAg
ICAgX3RtcF9vdHlwZSA/IF90bXBfb3R5cGUgOiAiKG51bGwpIik7ICAgICAgICAgICAgICAgICAg
IFwKICAgICAgICAgICAgIHJldHVybiBfX1ZBX0FSR1NfXzsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgaWYgKEVJTkFf
VU5MSUtFTFkoX3RtcF9zYy0+ZGF0YSAhPSBFV0tfVklFV19UWVBFX1NUUikpIHsgICAgICAgIFwK
ICAgICAgICAgICAgIEVJTkFfTE9HX0NSSVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgICAgICAoIiVwICglcykgaXMgbm90IG9mIGFu
IGV3a192aWV3IChuZWVkICVwLCBnb3QgJXApISIsICAgIFwKLSAgICAgICAgICAgICAgICBvLCBf
dG1wX290eXBlID8gX3RtcF9vdHlwZSA6ICIobnVsbCkiLCAgICAgICAgICAgICAgICAgXAorICAg
ICAgICAgICAgICAgIGV3a1ZpZXcsIF90bXBfb3R5cGUgPyBfdG1wX290eXBlIDogIihudWxsKSIs
ICAgICAgICAgICAgICAgICBcCiAgICAgICAgICAgICAgICAgRVdLX1ZJRVdfVFlQRV9TVFIsIF90
bXBfc2MtPmRhdGEpOyAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgICAgIHJldHVybiBf
X1ZBX0FSR1NfXzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAg
ICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKICAgICB9IHdoaWxlICgwKQogI2VuZGlmCiAKLSNkZWZpbmUgRVdLX1ZJ
RVdfU0RfR0VUKG8sIHB0cikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
RXdrX1ZpZXdfU21hcnRfRGF0YSogcHRyID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0
YSo+KGV2YXNfb2JqZWN0X3NtYXJ0X2RhdGFfZ2V0KG8pKQorI2RlZmluZSBFV0tfVklFV19TRF9H
RVQoZXdrVmlldywgcHRyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBF
d2tfVmlld19TbWFydF9EYXRhKiBwdHIgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRh
Kj4oZXZhc19vYmplY3Rfc21hcnRfZGF0YV9nZXQoZXdrVmlldykpCiAKLSNkZWZpbmUgRVdLX1ZJ
RVdfU0RfR0VUX09SX1JFVFVSTihvLCBwdHIsIC4uLikgICAgICAgICAgXAotICAgIEVXS19WSUVX
X1RZUEVfQ0hFQ0sobywgX19WQV9BUkdTX18pOyAgICAgICAgICAgICAgICBcCi0gICAgRVdLX1ZJ
RVdfU0RfR0VUKG8sIHB0cik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyNkZWZpbmUg
RVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBwdHIsIC4uLikgICAgICAgICAgXAor
ICAgIEVXS19WSUVXX1RZUEVfQ0hFQ0soZXdrVmlldywgX19WQV9BUkdTX18pOyAgICAgICAgICAg
ICAgICBcCisgICAgRVdLX1ZJRVdfU0RfR0VUKGV3a1ZpZXcsIHB0cik7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKICAgICBpZiAoIXB0cikgeyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAogICAgICAgICBDUklUSUNBTCgibm8gc21hcnQgZGF0YSBmb3Igb2Jq
ZWN0ICVwICglcykiLCAgICBcCi0gICAgICAgICAgICAgICAgIG8sIGV2YXNfb2JqZWN0X3R5cGVf
Z2V0KG8pKTsgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgZXdrVmlldywgZXZhc19vYmpl
Y3RfdHlwZV9nZXQoZXdrVmlldykpOyAgICAgICAgICAgXAogICAgICAgICByZXR1cm4gX19WQV9B
UkdTX187ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgfQogCkBAIC0yMzAsMTIg
KzIzMCwxMiBAQCBzdHJ1Y3QgX0V3a19WaWV3X1ByaXZhdGVfRGF0YSB7CiAgICAgICAgIHJldHVy
biBfX1ZBX0FSR1NfXzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAg
IH0KIAotc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X2NoYW5nZWQoRXdrX1ZpZXdfU21hcnRf
RGF0YSogc2QpCitzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21hcnRfY2hhbmdlZChFd2tfVmlld19T
bWFydF9EYXRhKiBzbWFydERhdGEpCiB7Ci0gICAgaWYgKHNkLT5jaGFuZ2VkLmFueSkKKyAgICBp
ZiAoc21hcnREYXRhLT5jaGFuZ2VkLmFueSkKICAgICAgICAgcmV0dXJuOwotICAgIHNkLT5jaGFu
Z2VkLmFueSA9IEVJTkFfVFJVRTsKLSAgICBldmFzX29iamVjdF9zbWFydF9jaGFuZ2VkKHNkLT5z
ZWxmKTsKKyAgICBzbWFydERhdGEtPmNoYW5nZWQuYW55ID0gRUlOQV9UUlVFOworICAgIGV2YXNf
b2JqZWN0X3NtYXJ0X2NoYW5nZWQoc21hcnREYXRhLT5zZWxmKTsKIH0KIAogc3RhdGljIEVpbmFf
Qm9vbCBfZXdrX3ZpZXdfcmVwYWludHNfcmVzaXplKEV3a19WaWV3X1ByaXZhdGVfRGF0YSogcHJp
diwgc2l6ZV90IHNpemUpCkBAIC0yNTAsNyArMjUwLDcgQEAgc3RhdGljIEVpbmFfQm9vbCBfZXdr
X3ZpZXdfcmVwYWludHNfcmVzaXplKEV3a19WaWV3X1ByaXZhdGVfRGF0YSogcHJpdiwgc2l6ZV90
IHMKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi1zdGF0aWMgdm9pZCBfZXdrX3ZpZXdfcmVw
YWludF9hZGQoRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKiBwcml2LCBFdmFzX0Nvb3JkIHgsIEV2YXNf
Q29vcmQgeSwgRXZhc19Db29yZCB3LCBFdmFzX0Nvb3JkIGgpCitzdGF0aWMgdm9pZCBfZXdrX3Zp
ZXdfcmVwYWludF9hZGQoRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKiBwcml2LCBFdmFzX0Nvb3JkIHgs
IEV2YXNfQ29vcmQgeSwgRXZhc19Db29yZCB3aWR0aCwgRXZhc19Db29yZCBoZWlnaHQpCiB7CiAg
ICAgRWluYV9SZWN0YW5nbGUqIHI7CiAKQEAgLTI3MCwxMCArMjcwLDEwIEBAIHN0YXRpYyB2b2lk
IF9ld2tfdmlld19yZXBhaW50X2FkZChFd2tfVmlld19Qcml2YXRlX0RhdGEqIHByaXYsIEV2YXNf
Q29vcmQgeCwgRXZhCiAKICAgICByLT54ID0geDsKICAgICByLT55ID0geTsKLSAgICByLT53ID0g
dzsKLSAgICByLT5oID0gaDsKKyAgICByLT53ID0gd2lkdGg7CisgICAgci0+aCA9IGhlaWdodDsK
IAotICAgIERCRygiYWRkIHJlcGFpbnQgJWQsICVkKyVkeCVkIiwgeCwgeSwgdywgaCk7CisgICAg
REJHKCJhZGQgcmVwYWludCAlZCwgJWQrJWR4JWQiLCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKIH0K
IAogc3RhdGljIHZvaWQgX2V3a192aWV3X3JlcGFpbnRzX2ZsdXNoKEV3a19WaWV3X1ByaXZhdGVf
RGF0YSogcHJpdikKQEAgLTI5NiwxNiArMjk2LDE2IEBAIHN0YXRpYyBFaW5hX0Jvb2wgX2V3a192
aWV3X3Njcm9sbHNfcmVzaXplKEV3a19WaWV3X1ByaXZhdGVfRGF0YSogcHJpdiwgc2l6ZV90IHNp
CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotc3RhdGljIHZvaWQgX2V3a192aWV3X3Njcm9s
bF9hZGQoRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKiBwcml2LCBFdmFzX0Nvb3JkIGR4LCBFdmFzX0Nv
b3JkIGR5LCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwgRXZhc19Db29yZCB3LCBFdmFzX0Nv
b3JkIGgsIEVpbmFfQm9vbCBtYWluX3Njcm9sbCkKK3N0YXRpYyB2b2lkIF9ld2tfdmlld19zY3Jv
bGxfYWRkKEV3a19WaWV3X1ByaXZhdGVfRGF0YSogcHJpdiwgRXZhc19Db29yZCBkeCwgRXZhc19D
b29yZCBkeSwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHksIEV2YXNfQ29vcmQgd2lkdGgsIEV2
YXNfQ29vcmQgaGVpZ2h0LCBFaW5hX0Jvb2wgbWFpblNjcm9sbCkKIHsKICAgICBFd2tfU2Nyb2xs
X1JlcXVlc3QqIHI7CiAgICAgRXdrX1Njcm9sbF9SZXF1ZXN0KiByX2VuZDsKLSAgICBFdmFzX0Nv
b3JkIHgyID0geCArIHcsIHkyID0geSArIGg7CisgICAgRXZhc19Db29yZCB4MiA9IHggKyB3aWR0
aCwgeTIgPSB5ICsgaGVpZ2h0OwogCiAgICAgciA9IHByaXYtPnNjcm9sbHMuYXJyYXk7CiAgICAg
cl9lbmQgPSByICsgcHJpdi0+c2Nyb2xscy5jb3VudDsKICAgICBmb3IgKDsgciA8IHJfZW5kOyBy
KyspIHsKLSAgICAgICAgaWYgKHItPnggPT0geCAmJiByLT55ID09IHkgJiYgci0+dyA9PSB3ICYm
IHItPmggPT0gaCkgeworICAgICAgICBpZiAoci0+eCA9PSB4ICYmIHItPnkgPT0geSAmJiByLT53
ID09IHdpZHRoICYmIHItPmggPT0gaGVpZ2h0KSB7CiAgICAgICAgICAgICBEQkcoInJlZ2lvbiBh
bHJlYWR5IHNjcm9sbGVkICVkLCVkKyVkeCVkICUrMDNkLCUrMDNkIGFkZCAiCiAgICAgICAgICAg
ICAgICAgIiUrMDNkLCUrMDNkIiwKICAgICAgICAgICAgICAgICByLT54LCByLT55LCByLT53LCBy
LT5oLCByLT5keCwgci0+ZHksIGR4LCBkeSk7CkBAIC0zMzcsMTQgKzMzNywxNCBAQCBzdGF0aWMg
dm9pZCBfZXdrX3ZpZXdfc2Nyb2xsX2FkZChFd2tfVmlld19Qcml2YXRlX0RhdGEqIHByaXYsIEV2
YXNfQ29vcmQgZHgsIEV2YQogCiAgICAgci0+eCA9IHg7CiAgICAgci0+eSA9IHk7Ci0gICAgci0+
dyA9IHc7Ci0gICAgci0+aCA9IGg7CisgICAgci0+dyA9IHdpZHRoOworICAgIHItPmggPSBoZWln
aHQ7CiAgICAgci0+eDIgPSB4MjsKICAgICByLT55MiA9IHkyOwogICAgIHItPmR4ID0gZHg7CiAg
ICAgci0+ZHkgPSBkeTsKLSAgICByLT5tYWluX3Njcm9sbCA9IG1haW5fc2Nyb2xsOwotICAgIERC
RygiYWRkIHNjcm9sbCBpbiByZWdpb246ICVkLCAlZCslZHglZCAlKzAzZCwgJSswM2QiLCB4LCB5
LCB3LCBoLCBkeCwgZHkpOworICAgIHItPm1haW5fc2Nyb2xsID0gbWFpblNjcm9sbDsKKyAgICBE
QkcoImFkZCBzY3JvbGwgaW4gcmVnaW9uOiAlZCwgJWQrJWR4JWQgJSswM2QsICUrMDNkIiwgeCwg
eSwgd2lkdGgsIGhlaWdodCwgZHgsIGR5KTsKIAogICAgIEVpbmFfUmVjdGFuZ2xlKiBwcjsKICAg
ICBFaW5hX1JlY3RhbmdsZSogcHJfZW5kOwpAQCAtMzY3LDExICszNjcsMTEgQEAgc3RhdGljIHZv
aWQgX2V3a192aWV3X3Njcm9sbHNfZmx1c2goRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKiBwcml2KQog
fQogCiAvLyBEZWZhdWx0IEV2ZW50IEhhbmRsaW5nIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8KLXN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3NtYXJ0X2Zv
Y3VzX2luKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkKQorc3RhdGljIEVpbmFfQm9vbCBfZXdrX3Zp
ZXdfc21hcnRfZm9jdXNfaW4oRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhKQogewotICAg
IEVXS19WSUVXX1BSSVZfR0VUKHNkLCBwcml2KTsKKyAgICBFV0tfVklFV19QUklWX0dFVChzbWFy
dERhdGEsIHByaXYpOwogICAgIFdlYkNvcmU6OkZvY3VzQ29udHJvbGxlciogZmMgPSBwcml2LT5w
YWdlLT5mb2N1c0NvbnRyb2xsZXIoKTsKLSAgICBEQkcoIm89JXAsIGZjPSVwIiwgc2QtPnNlbGYs
IGZjKTsKKyAgICBEQkcoImV3a1ZpZXc9JXAsIGZjPSVwIiwgc21hcnREYXRhLT5zZWxmLCBmYyk7
CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGZjLCBFSU5BX0ZBTFNFKTsKIAog
ICAgIGZjLT5zZXRBY3RpdmUodHJ1ZSk7CkBAIC0zNzksMTEgKzM3OSwxMSBAQCBzdGF0aWMgRWlu
YV9Cb29sIF9ld2tfdmlld19zbWFydF9mb2N1c19pbihFd2tfVmlld19TbWFydF9EYXRhKiBzZCkK
ICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi1zdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19z
bWFydF9mb2N1c19vdXQoRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QpCitzdGF0aWMgRWluYV9Cb29s
IF9ld2tfdmlld19zbWFydF9mb2N1c19vdXQoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRh
KQogewotICAgIEVXS19WSUVXX1BSSVZfR0VUKHNkLCBwcml2KTsKKyAgICBFV0tfVklFV19QUklW
X0dFVChzbWFydERhdGEsIHByaXYpOwogICAgIFdlYkNvcmU6OkZvY3VzQ29udHJvbGxlciogZmMg
PSBwcml2LT5wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKTsKLSAgICBEQkcoIm89JXAsIGZjPSVwIiwg
c2QtPnNlbGYsIGZjKTsKKyAgICBEQkcoImV3a1ZpZXc9JXAsIGZjPSVwIiwgc21hcnREYXRhLT5z
ZWxmLCBmYyk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGZjLCBFSU5BX0ZB
TFNFKTsKIAogICAgIGZjLT5zZXRBY3RpdmUoZmFsc2UpOwpAQCAtMzkxLDcxICszOTEsNzEgQEAg
c3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfc21hcnRfZm9jdXNfb3V0KEV3a19WaWV3X1NtYXJ0
X0RhdGEqIHNkKQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLXN0YXRpYyBFaW5hX0Jvb2wg
X2V3a192aWV3X3NtYXJ0X21vdXNlX3doZWVsKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkLCBjb25z
dCBFdmFzX0V2ZW50X01vdXNlX1doZWVsKiBldikKK3N0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3
X3NtYXJ0X21vdXNlX3doZWVsKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSwgY29uc3Qg
RXZhc19FdmVudF9Nb3VzZV9XaGVlbCogd2hlZWxFdmVudCkKIHsKLSAgICByZXR1cm4gZXdrX2Zy
YW1lX2ZlZWRfbW91c2Vfd2hlZWwoc2QtPm1haW5fZnJhbWUsIGV2KTsKKyAgICByZXR1cm4gZXdr
X2ZyYW1lX2ZlZWRfbW91c2Vfd2hlZWwoc21hcnREYXRhLT5tYWluX2ZyYW1lLCB3aGVlbEV2ZW50
KTsKIH0KIAotc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfc21hcnRfbW91c2VfZG93bihFd2tf
Vmlld19TbWFydF9EYXRhKiBzZCwgY29uc3QgRXZhc19FdmVudF9Nb3VzZV9Eb3duKiBldikKK3N0
YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3NtYXJ0X21vdXNlX2Rvd24oRXdrX1ZpZXdfU21hcnRf
RGF0YSogc21hcnREYXRhLCBjb25zdCBFdmFzX0V2ZW50X01vdXNlX0Rvd24qIGRvd25FdmVudCkK
IHsKLSAgICByZXR1cm4gZXdrX2ZyYW1lX2ZlZWRfbW91c2VfZG93bihzZC0+bWFpbl9mcmFtZSwg
ZXYpOworICAgIHJldHVybiBld2tfZnJhbWVfZmVlZF9tb3VzZV9kb3duKHNtYXJ0RGF0YS0+bWFp
bl9mcmFtZSwgZG93bkV2ZW50KTsKIH0KIAotc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfc21h
cnRfbW91c2VfdXAoRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QsIGNvbnN0IEV2YXNfRXZlbnRfTW91
c2VfVXAqIGV2KQorc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfc21hcnRfbW91c2VfdXAoRXdr
X1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhLCBjb25zdCBFdmFzX0V2ZW50X01vdXNlX1VwKiB1
cEV2ZW50KQogewotICAgIHJldHVybiBld2tfZnJhbWVfZmVlZF9tb3VzZV91cChzZC0+bWFpbl9m
cmFtZSwgZXYpOworICAgIHJldHVybiBld2tfZnJhbWVfZmVlZF9tb3VzZV91cChzbWFydERhdGEt
Pm1haW5fZnJhbWUsIHVwRXZlbnQpOwogfQogCi1zdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19z
bWFydF9tb3VzZV9tb3ZlKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkLCBjb25zdCBFdmFzX0V2ZW50
X01vdXNlX01vdmUqIGV2KQorc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfc21hcnRfbW91c2Vf
bW92ZShFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEsIGNvbnN0IEV2YXNfRXZlbnRfTW91
c2VfTW92ZSogbW92ZUV2ZW50KQogewotICAgIHJldHVybiBld2tfZnJhbWVfZmVlZF9tb3VzZV9t
b3ZlKHNkLT5tYWluX2ZyYW1lLCBldik7CisgICAgcmV0dXJuIGV3a19mcmFtZV9mZWVkX21vdXNl
X21vdmUoc21hcnREYXRhLT5tYWluX2ZyYW1lLCBtb3ZlRXZlbnQpOwogfQogCi1zdGF0aWMgRWlu
YV9Cb29sIF9ld2tfdmlld19zbWFydF9rZXlfZG93bihFd2tfVmlld19TbWFydF9EYXRhKiBzZCwg
Y29uc3QgRXZhc19FdmVudF9LZXlfRG93biogZXYpCitzdGF0aWMgRWluYV9Cb29sIF9ld2tfdmll
d19zbWFydF9rZXlfZG93bihFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEsIGNvbnN0IEV2
YXNfRXZlbnRfS2V5X0Rvd24qIGRvd25FdmVudCkKIHsKLSAgICBFdmFzX09iamVjdCogZnJhbWUg
PSBld2tfdmlld19mcmFtZV9mb2N1c2VkX2dldChzZC0+c2VsZik7CisgICAgRXZhc19PYmplY3Qq
IGZyYW1lID0gZXdrX3ZpZXdfZnJhbWVfZm9jdXNlZF9nZXQoc21hcnREYXRhLT5zZWxmKTsKIAog
ICAgIGlmICghZnJhbWUpCi0gICAgICAgIGZyYW1lID0gc2QtPm1haW5fZnJhbWU7CisgICAgICAg
IGZyYW1lID0gc21hcnREYXRhLT5tYWluX2ZyYW1lOwogCi0gICAgcmV0dXJuIGV3a19mcmFtZV9m
ZWVkX2tleV9kb3duKGZyYW1lLCBldik7CisgICAgcmV0dXJuIGV3a19mcmFtZV9mZWVkX2tleV9k
b3duKGZyYW1lLCBkb3duRXZlbnQpOwogfQogCi1zdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19z
bWFydF9rZXlfdXAoRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QsIGNvbnN0IEV2YXNfRXZlbnRfS2V5
X1VwKiBldikKK3N0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3NtYXJ0X2tleV91cChFd2tfVmll
d19TbWFydF9EYXRhKiBzbWFydERhdGEsIGNvbnN0IEV2YXNfRXZlbnRfS2V5X1VwKiB1cEV2ZW50
KQogewotICAgIEV2YXNfT2JqZWN0KiBmcmFtZSA9IGV3a192aWV3X2ZyYW1lX2ZvY3VzZWRfZ2V0
KHNkLT5zZWxmKTsKKyAgICBFdmFzX09iamVjdCogZnJhbWUgPSBld2tfdmlld19mcmFtZV9mb2N1
c2VkX2dldChzbWFydERhdGEtPnNlbGYpOwogCiAgICAgaWYgKCFmcmFtZSkKLSAgICAgICAgZnJh
bWUgPSBzZC0+bWFpbl9mcmFtZTsKKyAgICAgICAgZnJhbWUgPSBzbWFydERhdGEtPm1haW5fZnJh
bWU7CiAKLSAgICByZXR1cm4gZXdrX2ZyYW1lX2ZlZWRfa2V5X3VwKGZyYW1lLCBldik7CisgICAg
cmV0dXJuIGV3a19mcmFtZV9mZWVkX2tleV91cChmcmFtZSwgdXBFdmVudCk7CiB9CiAKLXN0YXRp
YyB2b2lkIF9ld2tfdmlld19zbWFydF9hZGRfY29uc29sZV9tZXNzYWdlKEV3a19WaWV3X1NtYXJ0
X0RhdGEqIHNkLCBjb25zdCBjaGFyKiBtZXNzYWdlLCB1bnNpZ25lZCBpbnQgbGluZU51bWJlciwg
Y29uc3QgY2hhciogc291cmNlSUQpCitzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21hcnRfYWRkX2Nv
bnNvbGVfbWVzc2FnZShFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEsIGNvbnN0IGNoYXIq
IG1lc3NhZ2UsIHVuc2lnbmVkIGludCBsaW5lTnVtYmVyLCBjb25zdCBjaGFyKiBzb3VyY2VJRCkK
IHsKICAgICBJTkYoImNvbnNvbGUgbWVzc2FnZTogJXMgQCVkOiAlc1xuIiwgc291cmNlSUQsIGxp
bmVOdW1iZXIsIG1lc3NhZ2UpOwogfQogCi1zdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21hcnRfcnVu
X2phdmFzY3JpcHRfYWxlcnQoRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QsIEV2YXNfT2JqZWN0KiBm
cmFtZSwgY29uc3QgY2hhciogbWVzc2FnZSkKK3N0YXRpYyB2b2lkIF9ld2tfdmlld19zbWFydF9y
dW5famF2YXNjcmlwdF9hbGVydChFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEsIEV2YXNf
T2JqZWN0KiBmcmFtZSwgY29uc3QgY2hhciogbWVzc2FnZSkKIHsKICAgICBJTkYoImphdmFzY3Jp
cHQgYWxlcnQ6ICVzXG4iLCBtZXNzYWdlKTsKIH0KIAotc3RhdGljIEVpbmFfQm9vbCBfZXdrX3Zp
ZXdfc21hcnRfcnVuX2phdmFzY3JpcHRfY29uZmlybShFd2tfVmlld19TbWFydF9EYXRhKiBzZCwg
RXZhc19PYmplY3QqIGZyYW1lLCBjb25zdCBjaGFyKiBtZXNzYWdlKQorc3RhdGljIEVpbmFfQm9v
bCBfZXdrX3ZpZXdfc21hcnRfcnVuX2phdmFzY3JpcHRfY29uZmlybShFd2tfVmlld19TbWFydF9E
YXRhKiBzbWFydERhdGEsIEV2YXNfT2JqZWN0KiBmcmFtZSwgY29uc3QgY2hhciogbWVzc2FnZSkK
IHsKICAgICBJTkYoImphdmFzY3JpcHQgY29uZmlybTogJXMiLCBtZXNzYWdlKTsKICAgICBJTkYo
ImphdmFzY3JpcHQgY29uZmlybSAoSEFSRCBDT0RFRCk/IFlFUyIpOwogICAgIHJldHVybiBFSU5B
X1RSVUU7CiB9CiAKLXN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3NtYXJ0X3Nob3VsZF9pbnRl
cnJ1cHRfamF2YXNjcmlwdChFd2tfVmlld19TbWFydF9EYXRhKiBzZCkKK3N0YXRpYyBFaW5hX0Jv
b2wgX2V3a192aWV3X3NtYXJ0X3Nob3VsZF9pbnRlcnJ1cHRfamF2YXNjcmlwdChFd2tfVmlld19T
bWFydF9EYXRhKiBzbWFydERhdGEpCiB7CiAgICAgSU5GKCJzaG91bGQgaW50ZXJydXB0IGphdmFz
Y3JpcHQ/XG4iCiAgICAgICAgICJcdChIQVJEIENPREVEKSBOTyIpOwogICAgIHJldHVybiBFSU5B
X0ZBTFNFOwogfQogCi1zdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19zbWFydF9ydW5famF2YXNj
cmlwdF9wcm9tcHQoRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QsIEV2YXNfT2JqZWN0KiBmcmFtZSwg
Y29uc3QgY2hhciogbWVzc2FnZSwgY29uc3QgY2hhciogZGVmYXVsdFZhbHVlLCBjaGFyKiogdmFs
dWUpCitzdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19zbWFydF9ydW5famF2YXNjcmlwdF9wcm9t
cHQoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhLCBFdmFzX09iamVjdCogZnJhbWUsIGNv
bnN0IGNoYXIqIG1lc3NhZ2UsIGNvbnN0IGNoYXIqIGRlZmF1bHRWYWx1ZSwgY2hhcioqIHZhbHVl
KQogewogICAgICp2YWx1ZSA9IHN0cmR1cCgidGVzdCIpOwogICAgIEVpbmFfQm9vbCByZXQgPSBF
SU5BX1RSVUU7CkBAIC00NjksNyArNDY5LDcgQEAgc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdf
c21hcnRfcnVuX2phdmFzY3JpcHRfcHJvbXB0KEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkLAogfQog
CiAvLyBFdmVudCBIYW5kbGluZyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8KLXN0YXRpYyB2b2lkIF9ld2tfdmlld19vbl9mb2N1c19pbih2b2lk
KiBkYXRhLCBFdmFzKiBlLCBFdmFzX09iamVjdCogbywgdm9pZCogZXZlbnRfaW5mbykKK3N0YXRp
YyB2b2lkIF9ld2tfdmlld19vbl9mb2N1c19pbih2b2lkKiBkYXRhLCBFdmFzKiBldmVudFR5cGUs
IEV2YXNfT2JqZWN0KiBjYWxsYmFjaywgdm9pZCogZXZlbnRJbmZvKQogewogICAgIEV3a19WaWV3
X1NtYXJ0X0RhdGEqIHNkID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEp
OwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGkpOwpAQCAtNDc3LDcgKzQ3
Nyw3IEBAIHN0YXRpYyB2b2lkIF9ld2tfdmlld19vbl9mb2N1c19pbih2b2lkKiBkYXRhLCBFdmFz
KiBlLCBFdmFzX09iamVjdCogbywgdm9pZCogZXZlCiAgICAgc2QtPmFwaS0+Zm9jdXNfaW4oc2Qp
OwogfQogCi1zdGF0aWMgdm9pZCBfZXdrX3ZpZXdfb25fZm9jdXNfb3V0KHZvaWQqIGRhdGEsIEV2
YXMqIGUsIEV2YXNfT2JqZWN0KiBvLCB2b2lkKiBldmVudF9pbmZvKQorc3RhdGljIHZvaWQgX2V3
a192aWV3X29uX2ZvY3VzX291dCh2b2lkKiBkYXRhLCBFdmFzKiBldmVudFR5cGUsIEV2YXNfT2Jq
ZWN0KiBjYWxsYmFjaywgdm9pZCogZXZlbnRJbmZvKQogewogICAgIEV3a19WaWV3X1NtYXJ0X0Rh
dGEqIHNkID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEpOwogICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGkpOwpAQCAtNDg1LDYzICs0ODUsNjMgQEAg
c3RhdGljIHZvaWQgX2V3a192aWV3X29uX2ZvY3VzX291dCh2b2lkKiBkYXRhLCBFdmFzKiBlLCBF
dmFzX09iamVjdCogbywgdm9pZCogZXYKICAgICBzZC0+YXBpLT5mb2N1c19vdXQoc2QpOwogfQog
Ci1zdGF0aWMgdm9pZCBfZXdrX3ZpZXdfb25fbW91c2Vfd2hlZWwodm9pZCogZGF0YSwgRXZhcyog
ZSwgRXZhc19PYmplY3QqIG8sIHZvaWQqIGV2ZW50X2luZm8pCitzdGF0aWMgdm9pZCBfZXdrX3Zp
ZXdfb25fbW91c2Vfd2hlZWwodm9pZCogZGF0YSwgRXZhcyogZXZlbnRUeXBlLCBFdmFzX09iamVj
dCogY2FsbGJhY2ssIHZvaWQqIGV2ZW50SW5mbykKIHsKLSAgICBFdmFzX0V2ZW50X01vdXNlX1do
ZWVsKiBldiA9IHN0YXRpY19jYXN0PEV2YXNfRXZlbnRfTW91c2VfV2hlZWwqPihldmVudF9pbmZv
KTsKKyAgICBFdmFzX0V2ZW50X01vdXNlX1doZWVsKiBldiA9IHN0YXRpY19jYXN0PEV2YXNfRXZl
bnRfTW91c2VfV2hlZWwqPihldmVudEluZm8pOwogICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNk
ID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEpOwogICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGkpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOKHNkLT5hcGktPm1vdXNlX3doZWVsKTsKICAgICBzZC0+YXBpLT5tb3VzZV93aGVlbChzZCwg
ZXYpOwogfQogCi1zdGF0aWMgdm9pZCBfZXdrX3ZpZXdfb25fbW91c2VfZG93bih2b2lkKiBkYXRh
LCBFdmFzKiBlLCBFdmFzX09iamVjdCogbywgdm9pZCogZXZlbnRfaW5mbykKK3N0YXRpYyB2b2lk
IF9ld2tfdmlld19vbl9tb3VzZV9kb3duKHZvaWQqIGRhdGEsIEV2YXMqIGV2ZW50VHlwZSwgRXZh
c19PYmplY3QqIGNhbGxiYWNrLCB2b2lkKiBldmVudEluZm8pCiB7Ci0gICAgRXZhc19FdmVudF9N
b3VzZV9Eb3duKiBldiA9IHN0YXRpY19jYXN0PEV2YXNfRXZlbnRfTW91c2VfRG93bio+KGV2ZW50
X2luZm8pOworICAgIEV2YXNfRXZlbnRfTW91c2VfRG93biogZXYgPSBzdGF0aWNfY2FzdDxFdmFz
X0V2ZW50X01vdXNlX0Rvd24qPihldmVudEluZm8pOwogICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEq
IHNkID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEpOwogICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGkpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOKHNkLT5hcGktPm1vdXNlX2Rvd24pOwogICAgIHNkLT5hcGktPm1vdXNlX2Rvd24oc2Qs
IGV2KTsKIH0KIAotc3RhdGljIHZvaWQgX2V3a192aWV3X29uX21vdXNlX3VwKHZvaWQqIGRhdGEs
IEV2YXMqIGUsIEV2YXNfT2JqZWN0KiBvLCB2b2lkKiBldmVudF9pbmZvKQorc3RhdGljIHZvaWQg
X2V3a192aWV3X29uX21vdXNlX3VwKHZvaWQqIGRhdGEsIEV2YXMqIGV2ZW50VHlwZSwgRXZhc19P
YmplY3QqIGNhbGxiYWNrLCB2b2lkKiBldmVudEluZm8pCiB7Ci0gICAgRXZhc19FdmVudF9Nb3Vz
ZV9VcCogZXYgPSBzdGF0aWNfY2FzdDxFdmFzX0V2ZW50X01vdXNlX1VwKj4oZXZlbnRfaW5mbyk7
CisgICAgRXZhc19FdmVudF9Nb3VzZV9VcCogZXYgPSBzdGF0aWNfY2FzdDxFdmFzX0V2ZW50X01v
dXNlX1VwKj4oZXZlbnRJbmZvKTsKICAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzZCA9IHN0YXRp
Y19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihkYXRhKTsKICAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTihzZC0+YXBpKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+
YXBpLT5tb3VzZV91cCk7CiAgICAgc2QtPmFwaS0+bW91c2VfdXAoc2QsIGV2KTsKIH0KIAotc3Rh
dGljIHZvaWQgX2V3a192aWV3X29uX21vdXNlX21vdmUodm9pZCogZGF0YSwgRXZhcyogZSwgRXZh
c19PYmplY3QqIG8sIHZvaWQqIGV2ZW50X2luZm8pCitzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfb25f
bW91c2VfbW92ZSh2b2lkKiBkYXRhLCBFdmFzKiBldmVudFR5cGUsIEV2YXNfT2JqZWN0KiBjYWxs
YmFjaywgdm9pZCogZXZlbnRJbmZvKQogewotICAgIEV2YXNfRXZlbnRfTW91c2VfTW92ZSogZXYg
PSBzdGF0aWNfY2FzdDxFdmFzX0V2ZW50X01vdXNlX01vdmUqPihldmVudF9pbmZvKTsKKyAgICBF
dmFzX0V2ZW50X01vdXNlX01vdmUqIGV2ID0gc3RhdGljX2Nhc3Q8RXZhc19FdmVudF9Nb3VzZV9N
b3ZlKj4oZXZlbnRJbmZvKTsKICAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzZCA9IHN0YXRpY19j
YXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihkYXRhKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTihzZC0+YXBpKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBp
LT5tb3VzZV9tb3ZlKTsKICAgICBzZC0+YXBpLT5tb3VzZV9tb3ZlKHNkLCBldik7CiB9CiAKLXN0
YXRpYyB2b2lkIF9ld2tfdmlld19vbl9rZXlfZG93bih2b2lkKiBkYXRhLCBFdmFzKiBlLCBFdmFz
X09iamVjdCogbywgdm9pZCogZXZlbnRfaW5mbykKK3N0YXRpYyB2b2lkIF9ld2tfdmlld19vbl9r
ZXlfZG93bih2b2lkKiBkYXRhLCBFdmFzKiBldmVudFR5cGUsIEV2YXNfT2JqZWN0KiBjYWxsYmFj
aywgdm9pZCogZXZlbnRJbmZvKQogewotICAgIEV2YXNfRXZlbnRfS2V5X0Rvd24qIGV2ID0gc3Rh
dGljX2Nhc3Q8RXZhc19FdmVudF9LZXlfRG93bio+KGV2ZW50X2luZm8pOworICAgIEV2YXNfRXZl
bnRfS2V5X0Rvd24qIGV2ID0gc3RhdGljX2Nhc3Q8RXZhc19FdmVudF9LZXlfRG93bio+KGV2ZW50
SW5mbyk7CiAgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QgPSBzdGF0aWNfY2FzdDxFd2tfVmll
d19TbWFydF9EYXRhKj4oZGF0YSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2Qt
PmFwaSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFwaS0+a2V5X2Rvd24p
OwogICAgIHNkLT5hcGktPmtleV9kb3duKHNkLCBldik7CiB9CiAKLXN0YXRpYyB2b2lkIF9ld2tf
dmlld19vbl9rZXlfdXAodm9pZCogZGF0YSwgRXZhcyogZSwgRXZhc19PYmplY3QqIG8sIHZvaWQq
IGV2ZW50X2luZm8pCitzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfb25fa2V5X3VwKHZvaWQqIGRhdGEs
IEV2YXMqIGV2ZW50VHlwZSwgRXZhc19PYmplY3QqIGNhbGxiYWNrLCB2b2lkKiBldmVudEluZm8p
CiB7Ci0gICAgRXZhc19FdmVudF9LZXlfVXAqIGV2ID0gc3RhdGljX2Nhc3Q8RXZhc19FdmVudF9L
ZXlfVXAqPihldmVudF9pbmZvKTsKKyAgICBFdmFzX0V2ZW50X0tleV9VcCogZXYgPSBzdGF0aWNf
Y2FzdDxFdmFzX0V2ZW50X0tleV9VcCo+KGV2ZW50SW5mbyk7CiAgICAgRXdrX1ZpZXdfU21hcnRf
RGF0YSogc2QgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZGF0YSk7CiAgICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFwaSk7CiAgICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk4oc2QtPmFwaS0+a2V5X3VwKTsKICAgICBzZC0+YXBpLT5rZXlfdXAoc2QsIGV2
KTsKIH0KIAotc3RhdGljIFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpGcmFtZT4gX2V3a192aWV3
X2NvcmVfZnJhbWVfbmV3KEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkLCBFd2tfVmlld19Qcml2YXRl
X0RhdGEqIHByaXYsIFdlYkNvcmU6OkhUTUxGcmFtZU93bmVyRWxlbWVudCogb3duZXIpCitzdGF0
aWMgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkZyYW1lPiBfZXdrX3ZpZXdfY29yZV9mcmFtZV9u
ZXcoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhLCBFd2tfVmlld19Qcml2YXRlX0RhdGEq
IHByaXYsIFdlYkNvcmU6OkhUTUxGcmFtZU93bmVyRWxlbWVudCogb3duZXIpCiB7Ci0gICAgV2Vi
Q29yZTo6RnJhbWVMb2FkZXJDbGllbnRFZmwqIGZsYyA9IG5ldyBXZWJDb3JlOjpGcmFtZUxvYWRl
ckNsaWVudEVmbChzZC0+c2VsZik7CisgICAgV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRFZmwq
IGZsYyA9IG5ldyBXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEVmbChzbWFydERhdGEtPnNlbGYp
OwogICAgIGlmICghZmxjKSB7CiAgICAgICAgIENSSVRJQ0FMKCJDb3VsZCBub3QgY3JlYXRlIGZy
YW1lIGxvYWRlciBjbGllbnQuIik7CiAgICAgICAgIHJldHVybiAwOwpAQCAtNTUzLDcgKzU1Myw3
IEBAIHN0YXRpYyBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6RnJhbWU+IF9ld2tfdmlld19jb3Jl
X2ZyYW1lX25ldyhFd2tfVmlld19TbWFydF9ECiAKIHN0YXRpYyBFdmFzX1NtYXJ0X0NsYXNzIF9w
YXJlbnRfc2MgPSBFVkFTX1NNQVJUX0NMQVNTX0lOSVRfTlVMTDsKIAotc3RhdGljIEV3a19WaWV3
X1ByaXZhdGVfRGF0YSogX2V3a192aWV3X3ByaXZfbmV3KEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNk
KQorc3RhdGljIEV3a19WaWV3X1ByaXZhdGVfRGF0YSogX2V3a192aWV3X3ByaXZfbmV3KEV3a19W
aWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSkKIHsKICAgICBFd2tfVmlld19Qcml2YXRlX0RhdGEq
IHByaXYgPQogICAgICAgICBzdGF0aWNfY2FzdDxFd2tfVmlld19Qcml2YXRlX0RhdGEqPihjYWxs
b2MoMSwgc2l6ZW9mKEV3a19WaWV3X1ByaXZhdGVfRGF0YSkpKTsKQEAgLTU2Niw4ICs1NjYsOCBA
QCBzdGF0aWMgRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKiBfZXdrX3ZpZXdfcHJpdl9uZXcoRXdrX1Zp
ZXdfU21hcnRfRGF0YSogc2QpCiAgICAgfQogCiAgICAgV2ViQ29yZTo6UGFnZTo6UGFnZUNsaWVu
dHMgcGFnZUNsaWVudHM7Ci0gICAgcGFnZUNsaWVudHMuY2hyb21lQ2xpZW50ID0gc3RhdGljX2Nh
c3Q8V2ViQ29yZTo6Q2hyb21lQ2xpZW50Kj4obmV3IFdlYkNvcmU6OkNocm9tZUNsaWVudEVmbChz
ZC0+c2VsZikpOwotICAgIHBhZ2VDbGllbnRzLmVkaXRvckNsaWVudCA9IHN0YXRpY19jYXN0PFdl
YkNvcmU6OkVkaXRvckNsaWVudCo+KG5ldyBXZWJDb3JlOjpFZGl0b3JDbGllbnRFZmwoc2QtPnNl
bGYpKTsKKyAgICBwYWdlQ2xpZW50cy5jaHJvbWVDbGllbnQgPSBzdGF0aWNfY2FzdDxXZWJDb3Jl
OjpDaHJvbWVDbGllbnQqPihuZXcgV2ViQ29yZTo6Q2hyb21lQ2xpZW50RWZsKHNtYXJ0RGF0YS0+
c2VsZikpOworICAgIHBhZ2VDbGllbnRzLmVkaXRvckNsaWVudCA9IHN0YXRpY19jYXN0PFdlYkNv
cmU6OkVkaXRvckNsaWVudCo+KG5ldyBXZWJDb3JlOjpFZGl0b3JDbGllbnRFZmwoc21hcnREYXRh
LT5zZWxmKSk7CiAgICAgcGFnZUNsaWVudHMuZHJhZ0NsaWVudCA9IHN0YXRpY19jYXN0PFdlYkNv
cmU6OkRyYWdDbGllbnQqPihuZXcgV2ViQ29yZTo6RHJhZ0NsaWVudEVmbCk7CiAgICAgcGFnZUNs
aWVudHMuaW5zcGVjdG9yQ2xpZW50ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SW5zcGVjdG9yQ2xp
ZW50Kj4obmV3IFdlYkNvcmU6Okluc3BlY3RvckNsaWVudEVmbCk7CiAjaWYgRU5BQkxFKERFVklD
RV9PUklFTlRBVElPTikKQEAgLTU5NSw4ICs1OTUsOCBAQCBzdGF0aWMgRXdrX1ZpZXdfUHJpdmF0
ZV9EYXRhKiBfZXdrX3ZpZXdfcHJpdl9uZXcoRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QpCiAgICAg
cHJpdi0+dmlld3BvcnRfYXJndW1lbnRzLnVzZXJTY2FsYWJsZSA9IEVJTkFfVFJVRTsKIAogICAg
IHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNldExvYWRzSW1hZ2VzQXV0b21hdGljYWxseSh0cnVlKTsK
LSAgICBwcml2LT5wYWdlX3NldHRpbmdzLT5zZXREZWZhdWx0Rml4ZWRGb250U2l6ZSgxMik7Ci0g
ICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0RGVmYXVsdEZvbnRTaXplKDE2KTsKKyAgICBwcml2
LT5wYWdlX3NldHRpbmdzLT5zZXREZWZhdWx0Rml4ZWRGb250U2l6ZSgxMCk7CisgICAgcHJpdi0+
cGFnZV9zZXR0aW5ncy0+c2V0RGVmYXVsdEZvbnRTaXplKDEzKTsKICAgICBwcml2LT5wYWdlX3Nl
dHRpbmdzLT5zZXRTZXJpZkZvbnRGYW1pbHkoInNlcmlmIik7CiAgICAgcHJpdi0+cGFnZV9zZXR0
aW5ncy0+c2V0Rml4ZWRGb250RmFtaWx5KCJtb25vdHlwZSIpOwogICAgIHByaXYtPnBhZ2Vfc2V0
dGluZ3MtPnNldFNhbnNTZXJpZkZvbnRGYW1pbHkoInNhbnMiKTsKQEAgLTY2Niw3ICs2NjYsNyBA
QCBzdGF0aWMgRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKiBfZXdrX3ZpZXdfcHJpdl9uZXcoRXdrX1Zp
ZXdfU21hcnRfRGF0YSogc2QpCiAKICAgICBwcml2LT5zZXR0aW5ncy5kb21fdGltZXJfaW50ZXJ2
YWwgPSBwcml2LT5wYWdlX3NldHRpbmdzLT5kZWZhdWx0TWluRE9NVGltZXJJbnRlcnZhbCgpOwog
Ci0gICAgcHJpdi0+bWFpbl9mcmFtZSA9IF9ld2tfdmlld19jb3JlX2ZyYW1lX25ldyhzZCwgcHJp
diwgMCkuZ2V0KCk7CisgICAgcHJpdi0+bWFpbl9mcmFtZSA9IF9ld2tfdmlld19jb3JlX2ZyYW1l
X25ldyhzbWFydERhdGEsIHByaXYsIDApLmdldCgpOwogICAgIGlmICghcHJpdi0+bWFpbl9mcmFt
ZSkgewogICAgICAgICBDUklUSUNBTCgiQ291bGQgbm90IGNyZWF0ZSBtYWluIGZyYW1lLiIpOwog
ICAgICAgICBnb3RvIGVycm9yX21haW5fZnJhbWU7CkBAIC03MjEsMTMgKzcyMSwxMyBAQCBzdGF0
aWMgdm9pZCBfZXdrX3ZpZXdfcHJpdl9kZWwoRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKiBwcml2KQog
ICAgIGZyZWUocHJpdik7CiB9CiAKLXN0YXRpYyB2b2lkIF9ld2tfdmlld19zbWFydF9hZGQoRXZh
c19PYmplY3QqIG8pCitzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21hcnRfYWRkKEV2YXNfT2JqZWN0
KiBld2tWaWV3KQogewotICAgIGNvbnN0IEV2YXNfU21hcnQqIHNtYXJ0ID0gZXZhc19vYmplY3Rf
c21hcnRfc21hcnRfZ2V0KG8pOworICAgIGNvbnN0IEV2YXNfU21hcnQqIHNtYXJ0ID0gZXZhc19v
YmplY3Rfc21hcnRfc21hcnRfZ2V0KGV3a1ZpZXcpOwogICAgIGNvbnN0IEV2YXNfU21hcnRfQ2xh
c3MqIHNjID0gZXZhc19zbWFydF9jbGFzc19nZXQoc21hcnQpOwogICAgIGNvbnN0IEV3a19WaWV3
X1NtYXJ0X0NsYXNzKiBhcGkgPSByZWludGVycHJldF9jYXN0PGNvbnN0IEV3a19WaWV3X1NtYXJ0
X0NsYXNzKj4oc2MpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGFwaS0+YmFja2lu
Z19zdG9yZV9hZGQpOwotICAgIEVXS19WSUVXX1NEX0dFVChvLCBzZCk7CisgICAgRVdLX1ZJRVdf
U0RfR0VUKGV3a1ZpZXcsIHNkKTsKIAogICAgIGlmICghc2QpIHsKICAgICAgICAgc2QgPSBzdGF0
aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oY2FsbG9jKDEsIHNpemVvZihFd2tfVmlld19T
bWFydF9EYXRhKSkpOwpAQCAtNzM1LDcgKzczNSw3IEBAIHN0YXRpYyB2b2lkIF9ld2tfdmlld19z
bWFydF9hZGQoRXZhc19PYmplY3QqIG8pCiAgICAgICAgICAgICBDUklUSUNBTCgiY291bGQgbm90
IGFsbG9jYXRlIEV3a19WaWV3X1NtYXJ0X0RhdGEiKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQotICAgICAgICBldmFzX29iamVjdF9zbWFydF9kYXRhX3NldChvLCBzZCk7CisgICAg
ICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2RhdGFfc2V0KGV3a1ZpZXcsIHNkKTsKICAgICB9CiAKICAg
ICBzZC0+YmdfY29sb3IuciA9IDI1NTsKQEAgLTc0MywxMSArNzQzLDExIEBAIHN0YXRpYyB2b2lk
IF9ld2tfdmlld19zbWFydF9hZGQoRXZhc19PYmplY3QqIG8pCiAgICAgc2QtPmJnX2NvbG9yLmIg
PSAyNTU7CiAgICAgc2QtPmJnX2NvbG9yLmEgPSAyNTU7CiAKLSAgICBzZC0+c2VsZiA9IG87Cisg
ICAgc2QtPnNlbGYgPSBld2tWaWV3OwogICAgIHNkLT5fcHJpdiA9IF9ld2tfdmlld19wcml2X25l
dyhzZCk7CiAgICAgc2QtPmFwaSA9IGFwaTsKIAotICAgIF9wYXJlbnRfc2MuYWRkKG8pOworICAg
IF9wYXJlbnRfc2MuYWRkKGV3a1ZpZXcpOwogCiAgICAgaWYgKCFzZC0+X3ByaXYpCiAgICAgICAg
IHJldHVybjsKQEAgLTc2MCwxMyArNzYwLDEzIEBAIHN0YXRpYyB2b2lkIF9ld2tfdmlld19zbWFy
dF9hZGQoRXZhc19PYmplY3QqIG8pCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBldmFz
X29iamVjdF9zbWFydF9tZW1iZXJfYWRkKHNkLT5iYWNraW5nX3N0b3JlLCBvKTsKKyAgICBldmFz
X29iamVjdF9zbWFydF9tZW1iZXJfYWRkKHNkLT5iYWNraW5nX3N0b3JlLCBld2tWaWV3KTsKICAg
ICBldmFzX29iamVjdF9zaG93KHNkLT5iYWNraW5nX3N0b3JlKTsKICAgICBldmFzX29iamVjdF9w
YXNzX2V2ZW50c19zZXQoc2QtPmJhY2tpbmdfc3RvcmUsIEVJTkFfVFJVRSk7CiAKICAgICBzZC0+
ZXZlbnRzX3JlY3QgPSBldmFzX29iamVjdF9yZWN0YW5nbGVfYWRkKHNkLT5iYXNlLmV2YXMpOwog
ICAgIGV2YXNfb2JqZWN0X2NvbG9yX3NldChzZC0+ZXZlbnRzX3JlY3QsIDAsIDAsIDAsIDApOwot
ICAgIGV2YXNfb2JqZWN0X3NtYXJ0X21lbWJlcl9hZGQoc2QtPmV2ZW50c19yZWN0LCBvKTsKKyAg
ICBldmFzX29iamVjdF9zbWFydF9tZW1iZXJfYWRkKHNkLT5ldmVudHNfcmVjdCwgZXdrVmlldyk7
CiAgICAgZXZhc19vYmplY3Rfc2hvdyhzZC0+ZXZlbnRzX3JlY3QpOwogCiAgICAgc2QtPm1haW5f
ZnJhbWUgPSBld2tfZnJhbWVfYWRkKHNkLT5iYXNlLmV2YXMpOwpAQCAtNzc1LDcgKzc3NSw3IEBA
IHN0YXRpYyB2b2lkIF9ld2tfdmlld19zbWFydF9hZGQoRXZhc19PYmplY3QqIG8pCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoIWV3a19mcmFtZV9pbml0KHNkLT5tYWluX2ZyYW1l
LCBvLCBwcml2LT5tYWluX2ZyYW1lKSkgeworICAgIGlmICghZXdrX2ZyYW1lX2luaXQoc2QtPm1h
aW5fZnJhbWUsIGV3a1ZpZXcsIHByaXYtPm1haW5fZnJhbWUpKSB7CiAgICAgICAgIEVSUigiQ291
bGQgbm90IGluaXRpYWxpemUgbWFpbiBmcm1lIG9iamVjdC4iKTsKICAgICAgICAgZXZhc19vYmpl
Y3RfZGVsKHNkLT5tYWluX2ZyYW1lKTsKICAgICAgICAgc2QtPm1haW5fZnJhbWUgPSAwOwpAQCAt
Nzg2LDEwICs3ODYsMTAgQEAgc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X2FkZChFdmFzX09i
amVjdCogbykKICAgICB9CiAKICAgICBldmFzX29iamVjdF9uYW1lX3NldChzZC0+bWFpbl9mcmFt
ZSwgIkVXS19GcmFtZTptYWluIik7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfbWVtYmVyX2FkZChz
ZC0+bWFpbl9mcmFtZSwgbyk7CisgICAgZXZhc19vYmplY3Rfc21hcnRfbWVtYmVyX2FkZChzZC0+
bWFpbl9mcmFtZSwgZXdrVmlldyk7CiAgICAgZXZhc19vYmplY3Rfc2hvdyhzZC0+bWFpbl9mcmFt
ZSk7CiAKLSNkZWZpbmUgQ09OTkVDVChzLCBjKSBldmFzX29iamVjdF9ldmVudF9jYWxsYmFja19h
ZGQobywgcywgYywgc2QpCisjZGVmaW5lIENPTk5FQ1QocywgYykgZXZhc19vYmplY3RfZXZlbnRf
Y2FsbGJhY2tfYWRkKGV3a1ZpZXcsIHMsIGMsIHNkKQogICAgIENPTk5FQ1QoRVZBU19DQUxMQkFD
S19GT0NVU19JTiwgX2V3a192aWV3X29uX2ZvY3VzX2luKTsKICAgICBDT05ORUNUKEVWQVNfQ0FM
TEJBQ0tfRk9DVVNfT1VULCBfZXdrX3ZpZXdfb25fZm9jdXNfb3V0KTsKICAgICBDT05ORUNUKEVW
QVNfQ0FMTEJBQ0tfTU9VU0VfV0hFRUwsIF9ld2tfdmlld19vbl9tb3VzZV93aGVlbCk7CkBAIC04
MDEsMTkgKzgwMSwxOSBAQCBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21hcnRfYWRkKEV2YXNfT2Jq
ZWN0KiBvKQogI3VuZGVmIENPTk5FQ1QKIH0KIAotc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0
X2RlbChFdmFzX09iamVjdCogbykKK3N0YXRpYyB2b2lkIF9ld2tfdmlld19zbWFydF9kZWwoRXZh
c19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUKG8sIHNkKTsKKyAgICBF
V0tfVklFV19TRF9HRVQoZXdrVmlldywgc2QpOwogICAgIEV3a19WaWV3X1ByaXZhdGVfRGF0YSog
cHJpdiA9IHNkID8gc2QtPl9wcml2IDogMDsKIAotICAgIGV3a192aWV3X3N0b3Aobyk7Ci0gICAg
X3BhcmVudF9zYy5kZWwobyk7CisgICAgZXdrX3ZpZXdfc3RvcChld2tWaWV3KTsKKyAgICBfcGFy
ZW50X3NjLmRlbChld2tWaWV3KTsKICAgICBfZXdrX3ZpZXdfcHJpdl9kZWwocHJpdik7CiB9CiAK
LXN0YXRpYyB2b2lkIF9ld2tfdmlld19zbWFydF9yZXNpemUoRXZhc19PYmplY3QqIG8sIEV2YXNf
Q29vcmQgdywgRXZhc19Db29yZCBoKQorc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X3Jlc2l6
ZShFdmFzX09iamVjdCogZXdrVmlldywgRXZhc19Db29yZCB3LCBFdmFzX0Nvb3JkIGgpCiB7Ci0g
ICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCk7CisgICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihld2tWaWV3LCBzZCk7CiAKICAgICAvLyB0aGVzZSBzaG91bGQgYmUgcXVldWVk
IGFuZCBwcm9jZXNzZWQgaW4gY2FsY3VsYXRlIGFzIHdlbGwhCiAgICAgZXZhc19vYmplY3RfcmVz
aXplKHNkLT5iYWNraW5nX3N0b3JlLCB3LCBoKTsKQEAgLTgyMiwxNiArODIyLDE2IEBAIHN0YXRp
YyB2b2lkIF9ld2tfdmlld19zbWFydF9yZXNpemUoRXZhc19PYmplY3QqIG8sIEV2YXNfQ29vcmQg
dywgRXZhc19Db29yZCBoKQogICAgIF9ld2tfdmlld19zbWFydF9jaGFuZ2VkKHNkKTsKIH0KIAot
c3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X21vdmUoRXZhc19PYmplY3QqIG8sIEV2YXNfQ29v
cmQgeCwgRXZhc19Db29yZCB5KQorc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X21vdmUoRXZh
c19PYmplY3QqIGV3a1ZpZXcsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5KQogewotICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9S
RVRVUk4oZXdrVmlldywgc2QpOwogICAgIHNkLT5jaGFuZ2VkLnBvc2l0aW9uID0gRUlOQV9UUlVF
OwogICAgIF9ld2tfdmlld19zbWFydF9jaGFuZ2VkKHNkKTsKIH0KIAotc3RhdGljIHZvaWQgX2V3
a192aWV3X3NtYXJ0X2NhbGN1bGF0ZShFdmFzX09iamVjdCogbykKK3N0YXRpYyB2b2lkIF9ld2tf
dmlld19zbWFydF9jYWxjdWxhdGUoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJ
RVdfU0RfR0VUKG8sIHNkKTsKKyAgICBFV0tfVklFV19TRF9HRVQoZXdrVmlldywgc2QpOwogICAg
IEVXS19WSUVXX1BSSVZfR0VUKHNkLCBwcml2KTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTihzZC0+YXBpLT5jb250ZW50c19yZXNpemUpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOKHNkLT5hcGktPnNjcm9sbHNfcHJvY2Vzcyk7CkBAIC04NDMsMTEgKzg0MywxMSBAQCBz
dGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21hcnRfY2FsY3VsYXRlKEV2YXNfT2JqZWN0KiBvKQogICAg
IGlmICghc2QtPm1haW5fZnJhbWUgfHwgIXByaXYtPm1haW5fZnJhbWUpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldChvLCAmeCwgJnksICZ3LCAmaCk7Cisg
ICAgZXZhc19vYmplY3RfZ2VvbWV0cnlfZ2V0KGV3a1ZpZXcsICZ4LCAmeSwgJncsICZoKTsKIAot
ICAgIERCRygibz0lcCBnZW89WyVkLCAlZCArICVkeCVkXSwgY2hhbmdlZDogc2l6ZT0laGh1LCAi
CisgICAgREJHKCJld2tWaWV3PSVwIGdlbz1bJWQsICVkICsgJWR4JWRdLCBjaGFuZ2VkOiBzaXpl
PSVoaHUsICIKICAgICAgICAgInNjcm9sbHM9JXp1LCByZXBhaW50cz0lenUiLAotICAgICAgICBv
LCB4LCB5LCB3LCBoLCBzZC0+Y2hhbmdlZC5zaXplLAorICAgICAgICBld2tWaWV3LCB4LCB5LCB3
LCBoLCBzZC0+Y2hhbmdlZC5zaXplLAogICAgICAgICBwcml2LT5zY3JvbGxzLmNvdW50LCBwcml2
LT5yZXBhaW50cy5jb3VudCk7CiAKICAgICBpZiAoc2QtPmNoYW5nZWQuc2l6ZSAmJiAoKHcgIT0g
c2QtPnZpZXcudykgfHwgKGggIT0gc2QtPnZpZXcuaCkpKSB7CkBAIC04NjYsNyArODY2LDcgQEAg
c3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X2NhbGN1bGF0ZShFdmFzX09iamVjdCogbykKICAg
ICAgICAgX2V3a192aWV3X3JlcGFpbnRfYWRkKHByaXYsIDAsIDAsIHcsIGgpOwogCiAgICAgICAg
IC8vIFRoaXMgY2FsbGJhY2sgaXMgYSBnb29kIHBsYWNlIGUuZy4gdG8gY2hhbmdlIGZpeGVkIGxh
eW91dCBzaXplIChld2tfdmlld19maXhlZF9sYXlvdXRfc2l6ZV9zZXQpLgotICAgICAgICBldmFz
X29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKG8sICJ2aWV3LHJlc2l6ZWQiLCAwKTsKKyAgICAg
ICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChld2tWaWV3LCAidmlldyxyZXNpemVk
IiwgMCk7CiAgICAgfQogICAgIHNkLT5jaGFuZ2VkLnNpemUgPSBFSU5BX0ZBTFNFOwogCkBAIC04
OTUsOTYgKzg5NSw5NiBAQCBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21hcnRfY2FsY3VsYXRlKEV2
YXNfT2JqZWN0KiBvKQogICAgIH0KIH0KIAotc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X3No
b3coRXZhc19PYmplY3QqIG8pCitzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21hcnRfc2hvdyhFdmFz
X09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNk
KTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkKTsKIAogICAgIGlm
IChldmFzX29iamVjdF9jbGlwZWVzX2dldChzZC0+YmFzZS5jbGlwcGVyKSkKICAgICAgICAgZXZh
c19vYmplY3Rfc2hvdyhzZC0+YmFzZS5jbGlwcGVyKTsKICAgICBldmFzX29iamVjdF9zaG93KHNk
LT5iYWNraW5nX3N0b3JlKTsKIH0KIAotc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X2hpZGUo
RXZhc19PYmplY3QqIG8pCitzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21hcnRfaGlkZShFdmFzX09i
amVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkKTsK
KyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkKTsKIAogICAgIGV2YXNf
b2JqZWN0X2hpZGUoc2QtPmJhc2UuY2xpcHBlcik7CiAgICAgZXZhc19vYmplY3RfaGlkZShzZC0+
YmFja2luZ19zdG9yZSk7CiB9CiAKLXN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3NtYXJ0X2Nv
bnRlbnRzX3Jlc2l6ZShFd2tfVmlld19TbWFydF9EYXRhKiBzZCwgaW50IHcsIGludCBoKQorc3Rh
dGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfc21hcnRfY29udGVudHNfcmVzaXplKEV3a19WaWV3X1Nt
YXJ0X0RhdGEqIHNtYXJ0RGF0YSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogewogICAgIHJldHVy
biBFSU5BX1RSVUU7CiB9CiAKLXN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3NtYXJ0X3pvb21f
c2V0KEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkLCBmbG9hdCB6b29tLCBFdmFzX0Nvb3JkIGN4LCBF
dmFzX0Nvb3JkIGN5KQorc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfc21hcnRfem9vbV9zZXQo
RXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhLCBmbG9hdCB6b29tLCBFdmFzX0Nvb3JkIGNl
bnRlclgsIEV2YXNfQ29vcmQgY2VudGVyWSkKIHsKICAgICBkb3VibGUgcHgsIHB5OwogICAgIEV2
YXNfQ29vcmQgeCwgeSwgdywgaDsKICAgICBFaW5hX0Jvb2wgcmV0OwogCi0gICAgZXdrX2ZyYW1l
X3Njcm9sbF9zaXplX2dldChzZC0+bWFpbl9mcmFtZSwgJncsICZoKTsKLSAgICBld2tfZnJhbWVf
c2Nyb2xsX3Bvc19nZXQoc2QtPm1haW5fZnJhbWUsICZ4LCAmeSk7CisgICAgZXdrX2ZyYW1lX3Nj
cm9sbF9zaXplX2dldChzbWFydERhdGEtPm1haW5fZnJhbWUsICZ3LCAmaCk7CisgICAgZXdrX2Zy
YW1lX3Njcm9sbF9wb3NfZ2V0KHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSwgJngsICZ5KTsKIAotICAg
IGlmICh3ICsgc2QtPnZpZXcudyA+IDApCi0gICAgICAgIHB4ID0gc3RhdGljX2Nhc3Q8ZG91Ymxl
Pih4ICsgY3gpIC8gKHcgKyBzZC0+dmlldy53KTsKKyAgICBpZiAodyArIHNtYXJ0RGF0YS0+dmll
dy53ID4gMCkKKyAgICAgICAgcHggPSBzdGF0aWNfY2FzdDxkb3VibGU+KHggKyBjZW50ZXJYKSAv
ICh3ICsgc21hcnREYXRhLT52aWV3LncpOwogICAgIGVsc2UKICAgICAgICAgcHggPSAwLjA7CiAK
LSAgICBpZiAoaCArIHNkLT52aWV3LmggPiAwKQotICAgICAgICBweSA9IHN0YXRpY19jYXN0PGRv
dWJsZT4oeSArIGN5KSAvIChoICsgc2QtPnZpZXcuaCk7CisgICAgaWYgKGggKyBzbWFydERhdGEt
PnZpZXcuaCA+IDApCisgICAgICAgIHB5ID0gc3RhdGljX2Nhc3Q8ZG91YmxlPih5ICsgY2VudGVy
WSkgLyAoaCArIHNtYXJ0RGF0YS0+dmlldy5oKTsKICAgICBlbHNlCiAgICAgICAgIHB5ID0gMC4w
OwogCi0gICAgcmV0ID0gZXdrX2ZyYW1lX3BhZ2Vfem9vbV9zZXQoc2QtPm1haW5fZnJhbWUsIHpv
b20pOworICAgIHJldCA9IGV3a19mcmFtZV9wYWdlX3pvb21fc2V0KHNtYXJ0RGF0YS0+bWFpbl9m
cmFtZSwgem9vbSk7CiAKLSAgICBld2tfZnJhbWVfc2Nyb2xsX3NpemVfZ2V0KHNkLT5tYWluX2Zy
YW1lLCAmdywgJmgpOwotICAgIHggPSAodyArIHNkLT52aWV3LncpICogcHggLSBjeDsKLSAgICB5
ID0gKGggKyBzZC0+dmlldy5oKSAqIHB5IC0gY3k7Ci0gICAgZXdrX2ZyYW1lX3Njcm9sbF9zZXQo
c2QtPm1haW5fZnJhbWUsIHgsIHkpOworICAgIGV3a19mcmFtZV9zY3JvbGxfc2l6ZV9nZXQoc21h
cnREYXRhLT5tYWluX2ZyYW1lLCAmdywgJmgpOworICAgIHggPSAodyArIHNtYXJ0RGF0YS0+dmll
dy53KSAqIHB4IC0gY2VudGVyWDsKKyAgICB5ID0gKGggKyBzbWFydERhdGEtPnZpZXcuaCkgKiBw
eSAtIGNlbnRlclk7CisgICAgZXdrX2ZyYW1lX3Njcm9sbF9zZXQoc21hcnREYXRhLT5tYWluX2Zy
YW1lLCB4LCB5KTsKICAgICByZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCBfZXdrX3ZpZXdf
c21hcnRfZmx1c2goRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QpCitzdGF0aWMgdm9pZCBfZXdrX3Zp
ZXdfc21hcnRfZmx1c2goRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhKQogewotICAgIEVX
S19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdik7CisgICAgRVdLX1ZJRVdfUFJJVl9H
RVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdik7CiAgICAgX2V3a192aWV3X3JlcGFpbnRzX2Zs
dXNoKHByaXYpOwogICAgIF9ld2tfdmlld19zY3JvbGxzX2ZsdXNoKHByaXYpOwogfQogCi1zdGF0
aWMgRWluYV9Cb29sIF9ld2tfdmlld19zbWFydF9wcmVfcmVuZGVyX3JlZ2lvbihFd2tfVmlld19T
bWFydF9EYXRhKiBzZCwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHksIEV2YXNfQ29vcmQgdywg
RXZhc19Db29yZCBoLCBmbG9hdCB6b29tKQorc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfc21h
cnRfcHJlX3JlbmRlcl9yZWdpb24oRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhLCBFdmFz
X0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwgRXZhc19Db29yZCB3aWR0aCwgRXZhc19Db29yZCBoZWln
aHQsIGZsb2F0IHpvb20pCiB7CiAgICAgV1JOKCJub3Qgc3VwcG9ydGVkIGJ5IGVuZ2luZS4gc2Q9
JXAgYXJlYT0lZCwlZCslZHglZCwgem9vbT0lZiIsCi0gICAgICAgIHNkLCB4LCB5LCB3LCBoLCB6
b29tKTsKKyAgICAgICAgc21hcnREYXRhLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCB6b29tKTsKICAg
ICByZXR1cm4gRUlOQV9GQUxTRTsKIH0KIAotc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfc21h
cnRfcHJlX3JlbmRlcl9yZWxhdGl2ZV9yYWRpdXMoRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QsIHVu
c2lnbmVkIGludCBuLCBmbG9hdCB6b29tKQorc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfc21h
cnRfcHJlX3JlbmRlcl9yZWxhdGl2ZV9yYWRpdXMoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnRE
YXRhLCB1bnNpZ25lZCBpbnQgbnVtYmVyLCBmbG9hdCB6b29tKQogewogICAgIFdSTigibm90IHN1
cHBvcnRlZCBieSBlbmdpbmUuIHNkPSVwLCBuPSV1IHpvb209JWYiLAotICAgICAgICBzZCwgbiwg
em9vbSk7CisgICAgICAgIHNtYXJ0RGF0YSwgbnVtYmVyLCB6b29tKTsKICAgICByZXR1cm4gRUlO
QV9GQUxTRTsKIH0KIAotc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X3ByZV9yZW5kZXJfY2Fu
Y2VsKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkKQorc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0
X3ByZV9yZW5kZXJfY2FuY2VsKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSkKIHsKLSAg
ICBXUk4oIm5vdCBzdXBwb3J0ZWQgYnkgZW5naW5lLiBzZD0lcCIsIHNkKTsKKyAgICBXUk4oIm5v
dCBzdXBwb3J0ZWQgYnkgZW5naW5lLiBzZD0lcCIsIHNtYXJ0RGF0YSk7CiB9CiAKLXN0YXRpYyB2
b2lkIF9ld2tfdmlld196b29tX2FuaW1hdGVkX21hcmtfc3RvcChFd2tfVmlld19TbWFydF9EYXRh
KiBzZCkKK3N0YXRpYyB2b2lkIF9ld2tfdmlld196b29tX2FuaW1hdGVkX21hcmtfc3RvcChFd2tf
Vmlld19TbWFydF9EYXRhKiBzbWFydERhdGEpCiB7Ci0gICAgc2QtPmFuaW1hdGVkX3pvb20uem9v
bS5zdGFydCA9IDAuMDsKLSAgICBzZC0+YW5pbWF0ZWRfem9vbS56b29tLmVuZCA9IDAuMDsKLSAg
ICBzZC0+YW5pbWF0ZWRfem9vbS56b29tLmN1cnJlbnQgPSAwLjA7CisgICAgc21hcnREYXRhLT5h
bmltYXRlZF96b29tLnpvb20uc3RhcnQgPSAwLjA7CisgICAgc21hcnREYXRhLT5hbmltYXRlZF96
b29tLnpvb20uZW5kID0gMC4wOworICAgIHNtYXJ0RGF0YS0+YW5pbWF0ZWRfem9vbS56b29tLmN1
cnJlbnQgPSAwLjA7CiB9CiAKLXN0YXRpYyB2b2lkIF9ld2tfdmlld196b29tX2FuaW1hdGVkX2Zp
bmlzaChFd2tfVmlld19TbWFydF9EYXRhKiBzZCkKK3N0YXRpYyB2b2lkIF9ld2tfdmlld196b29t
X2FuaW1hdGVkX2ZpbmlzaChFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEpCiB7Ci0gICAg
RVdLX1ZJRVdfUFJJVl9HRVQoc2QsIHByaXYpOworICAgIEVXS19WSUVXX1BSSVZfR0VUKHNtYXJ0
RGF0YSwgcHJpdik7CiAgICAgZWNvcmVfYW5pbWF0b3JfZGVsKHByaXYtPmFuaW1hdGVkX3pvb20u
YW5pbWF0b3IpOwogICAgIHByaXYtPmFuaW1hdGVkX3pvb20uYW5pbWF0b3IgPSAwOwotICAgIF9l
d2tfdmlld196b29tX2FuaW1hdGVkX21hcmtfc3RvcChzZCk7Ci0gICAgZXZhc19vYmplY3Rfc21h
cnRfY2FsbGJhY2tfY2FsbChzZC0+c2VsZiwgInpvb20sYW5pbWF0ZWQsZW5kIiwgMCk7CisgICAg
X2V3a192aWV3X3pvb21fYW5pbWF0ZWRfbWFya19zdG9wKHNtYXJ0RGF0YSk7CisgICAgZXZhc19v
YmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChzbWFydERhdGEtPnNlbGYsICJ6b29tLGFuaW1hdGVk
LGVuZCIsIDApOwogfQogCiBzdGF0aWMgZmxvYXQgX2V3a192aWV3X3pvb21fYW5pbWF0ZWRfY3Vy
cmVudChFd2tfVmlld19Qcml2YXRlX0RhdGEqIHByaXYpCkBAIC0xMDMyLDE4ICsxMDMyLDE4IEBA
IHN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3pvb21fYW5pbWF0b3JfY2Iodm9pZCogZGF0YSkK
ICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi1zdGF0aWMgdm9pZCBfZXdrX3ZpZXdfem9vbV9h
bmltYXRpb25fc3RhcnQoRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QpCitzdGF0aWMgdm9pZCBfZXdr
X3ZpZXdfem9vbV9hbmltYXRpb25fc3RhcnQoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRh
KQogewotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdik7CisgICAgRVdL
X1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdik7CiAgICAgaWYgKHByaXYt
PmFuaW1hdGVkX3pvb20uYW5pbWF0b3IpCiAgICAgICAgIHJldHVybjsKICAgICBwcml2LT5hbmlt
YXRlZF96b29tLmFuaW1hdG9yID0gZWNvcmVfYW5pbWF0b3JfYWRkCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoX2V3a192aWV3X3pvb21fYW5pbWF0b3JfY2IsIHNkKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfZXdrX3ZpZXdfem9vbV9h
bmltYXRvcl9jYiwgc21hcnREYXRhKTsKIH0KIAotc3RhdGljIFdlYkNvcmU6OlZpZXdwb3J0QXR0
cmlidXRlcyBfZXdrX3ZpZXdfdmlld3BvcnRfYXR0cmlidXRlc19jb21wdXRlKGNvbnN0IEV2YXNf
T2JqZWN0KiBvKQorc3RhdGljIFdlYkNvcmU6OlZpZXdwb3J0QXR0cmlidXRlcyBfZXdrX3ZpZXdf
dmlld3BvcnRfYXR0cmlidXRlc19jb21wdXRlKGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQog
ewotICAgIEVXS19WSUVXX1NEX0dFVChvLCBzZCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUKGV3a1Zp
ZXcsIHNkKTsKICAgICBFV0tfVklFV19QUklWX0dFVChzZCwgcHJpdik7CiAKICAgICBpbnQgZGVz
a3RvcF93aWR0aCA9IDk4MDsKQEAgLTEwNTcsMTUgKzEwNTcsMTUgQEAgc3RhdGljIFdlYkNvcmU6
OlZpZXdwb3J0QXR0cmlidXRlcyBfZXdrX3ZpZXdfdmlld3BvcnRfYXR0cmlidXRlc19jb21wdXRl
KGNvbnN0IEUKICAgICByZXR1cm4gYXR0cmlidXRlczsKIH0KIAotc3RhdGljIEVpbmFfQm9vbCBf
ZXdrX3ZpZXdfc21hcnRfZGlzYWJsZV9yZW5kZXIoRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QpCitz
dGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19zbWFydF9kaXNhYmxlX3JlbmRlcihFd2tfVmlld19T
bWFydF9EYXRhKiBzbWFydERhdGEpCiB7Ci0gICAgV1JOKCJub3Qgc3VwcG9ydGVkIGJ5IGVuZ2lu
ZS4gc2Q9JXAiLCBzZCk7CisgICAgV1JOKCJub3Qgc3VwcG9ydGVkIGJ5IGVuZ2luZS4gc2Q9JXAi
LCBzbWFydERhdGEpOwogICAgIHJldHVybiBFSU5BX0ZBTFNFOwogfQogCi1zdGF0aWMgRWluYV9C
b29sIF9ld2tfdmlld19zbWFydF9lbmFibGVfcmVuZGVyKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNk
KQorc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfc21hcnRfZW5hYmxlX3JlbmRlcihFd2tfVmll
d19TbWFydF9EYXRhKiBzbWFydERhdGEpCiB7Ci0gICAgV1JOKCJub3Qgc3VwcG9ydGVkIGJ5IGVu
Z2luZS4gc2Q9JXAiLCBzZCk7CisgICAgV1JOKCJub3Qgc3VwcG9ydGVkIGJ5IGVuZ2luZS4gc2Q9
JXAiLCBzbWFydERhdGEpOwogICAgIHJldHVybiBFSU5BX0ZBTFNFOwogfQogCkBAIC0xMTIwLDIy
ICsxMTIwLDIyIEBAIEVpbmFfQm9vbCBld2tfdmlld19iYXNlX3NtYXJ0X3NldChFd2tfVmlld19T
bWFydF9DbGFzcyogYXBpKQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLXZvaWQgZXdrX3Zp
ZXdfZml4ZWRfbGF5b3V0X3NpemVfc2V0KEV2YXNfT2JqZWN0KiBvLCBFdmFzX0Nvb3JkIHcsIEV2
YXNfQ29vcmQgaCkKK3ZvaWQgZXdrX3ZpZXdfZml4ZWRfbGF5b3V0X3NpemVfc2V0KEV2YXNfT2Jq
ZWN0KiBld2tWaWV3LCBFdmFzX0Nvb3JkIHdpZHRoLCBFdmFzX0Nvb3JkIGhlaWdodCkKIHsKLSAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkKTsKKyAgICBFV0tfVklFV19TRF9HRVRf
T1JfUkVUVVJOKGV3a1ZpZXcsIHNkKTsKICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4o
c2QsIHByaXYpOwogCiAgICAgV2ViQ29yZTo6RnJhbWVWaWV3KiB2aWV3ID0gcHJpdi0+bWFpbl9m
cmFtZS0+dmlldygpOwotICAgIGlmICh3IDw9IDAgJiYgaCA8PSAwKSB7CisgICAgaWYgKHdpZHRo
IDw9IDAgJiYgaGVpZ2h0IDw9IDApIHsKICAgICAgICAgaWYgKCF2aWV3LT51c2VGaXhlZExheW91
dCgpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB2aWV3LT5zZXRVc2VGaXhlZExheW91
dChFSU5BX0ZBTFNFKTsKICAgICB9IGVsc2UgewogICAgICAgICBXZWJDb3JlOjpJbnRTaXplIHNp
emUgPSB2aWV3LT5maXhlZExheW91dFNpemUoKTsKLSAgICAgICAgaWYgKHNpemUud2lkdGgoKSA9
PSB3ICYmIHNpemUuaGVpZ2h0KCkgPT0gaCkKKyAgICAgICAgaWYgKHNpemUud2lkdGgoKSA9PSB3
aWR0aCAmJiBzaXplLmhlaWdodCgpID09IGhlaWdodCkKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgaWYgKHZpZXcpCi0gICAgICAgICAgICB2aWV3LT5zZXRGaXhlZExheW91dFNpemUoV2Vi
Q29yZTo6SW50U2l6ZSh3LCBoKSk7CisgICAgICAgICAgICB2aWV3LT5zZXRGaXhlZExheW91dFNp
emUoV2ViQ29yZTo6SW50U2l6ZSh3aWR0aCwgaGVpZ2h0KSk7CiAgICAgfQogCiAgICAgaWYgKCF2
aWV3KQpAQCAtMTE0NCwyNyArMTE0NCwyNyBAQCB2b2lkIGV3a192aWV3X2ZpeGVkX2xheW91dF9z
aXplX3NldChFdmFzX09iamVjdCogbywgRXZhc19Db29yZCB3LCBFdmFzX0Nvb3JkIGgpCiAgICAg
dmlldy0+Zm9yY2VMYXlvdXQoKTsKIH0KIAotdm9pZCBld2tfdmlld19maXhlZF9sYXlvdXRfc2l6
ZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIG8sIEV2YXNfQ29vcmQqIHcsIEV2YXNfQ29vcmQqIGgp
Cit2b2lkIGV3a192aWV3X2ZpeGVkX2xheW91dF9zaXplX2dldChjb25zdCBFdmFzX09iamVjdCog
ZXdrVmlldywgRXZhc19Db29yZCogd2lkdGgsIEV2YXNfQ29vcmQqIGhlaWdodCkKIHsKLSAgICBp
ZiAodykKLSAgICAgICAgKncgPSAwOwotICAgIGlmIChoKQotICAgICAgICAqaCA9IDA7Ci0gICAg
RVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCk7CisgICAgaWYgKHdpZHRoKQorICAgICAg
ICAqd2lkdGggPSAwOworICAgIGlmIChoZWlnaHQpCisgICAgICAgICpoZWlnaHQgPSAwOworICAg
IEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QpOwogICAgIEVXS19WSUVXX1BS
SVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdik7CiAgICAgV2ViQ29yZTo6RnJhbWVWaWV3KiB2aWV3
ID0gcHJpdi0+bWFpbl9mcmFtZS0+dmlldygpOwogICAgIGlmICh2aWV3LT51c2VGaXhlZExheW91
dCgpKSB7CiAgICAgICAgIFdlYkNvcmU6OkludFNpemUgc2l6ZSA9IHZpZXctPmZpeGVkTGF5b3V0
U2l6ZSgpOwotICAgICAgICBpZiAodykKLSAgICAgICAgICAgICp3ID0gc2l6ZS53aWR0aCgpOwot
ICAgICAgICBpZiAoaCkKLSAgICAgICAgICAgICpoID0gc2l6ZS5oZWlnaHQoKTsKKyAgICAgICAg
aWYgKHdpZHRoKQorICAgICAgICAgICAgKndpZHRoID0gc2l6ZS53aWR0aCgpOworICAgICAgICBp
ZiAoaGVpZ2h0KQorICAgICAgICAgICAgKmhlaWdodCA9IHNpemUuaGVpZ2h0KCk7CiAgICAgfQog
fQogCi12b2lkIGV3a192aWV3X3RoZW1lX3NldChFdmFzX09iamVjdCogbywgY29uc3QgY2hhciog
cGF0aCkKK3ZvaWQgZXdrX3ZpZXdfdGhlbWVfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25z
dCBjaGFyKiBwYXRoKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QpOwor
ICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QpOwogICAgIEVXS19WSUVX
X1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdik7CiAgICAgaWYgKCFlaW5hX3N0cmluZ3NoYXJl
X3JlcGxhY2UoJnByaXYtPnNldHRpbmdzLnRoZW1lLCBwYXRoKSkKICAgICAgICAgcmV0dXJuOwpA
QCAtMTE3NywyMiArMTE3NywyMiBAQCB2b2lkIGV3a192aWV3X3RoZW1lX3NldChFdmFzX09iamVj
dCogbywgY29uc3QgY2hhciogcGF0aCkKIAogfQogCi1jb25zdCBjaGFyKiBld2tfdmlld190aGVt
ZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCitjb25zdCBjaGFyKiBld2tfdmlld190aGVtZV9n
ZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihvLCBzZCwgMCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3
LCBzZCwgMCk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCAwKTsK
ICAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MudGhlbWU7CiB9CiAKLUV2YXNfT2JqZWN0KiBld2tf
dmlld19mcmFtZV9tYWluX2dldChjb25zdCBFdmFzX09iamVjdCogbykKK0V2YXNfT2JqZWN0KiBl
d2tfdmlld19mcmFtZV9tYWluX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAwKTsKKyAgICBFV0tfVklFV19TRF9H
RVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAwKTsKICAgICByZXR1cm4gc2QtPm1haW5fZnJhbWU7
CiB9CiAKLUV2YXNfT2JqZWN0KiBld2tfdmlld19mcmFtZV9mb2N1c2VkX2dldChjb25zdCBFdmFz
X09iamVjdCogbykKK0V2YXNfT2JqZWN0KiBld2tfdmlld19mcmFtZV9mb2N1c2VkX2dldChjb25z
dCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJO
KG8sIHNkLCAwKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAw
KTsKICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIDApOwogCiAgICAg
V2ViQ29yZTo6RnJhbWUqIGNvcmUgPSBwcml2LT5wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9j
dXNlZEZyYW1lKCk7CkBAIC0xMjA1LDQyICsxMjA1LDQyIEBAIEV2YXNfT2JqZWN0KiBld2tfdmll
d19mcmFtZV9mb2N1c2VkX2dldChjb25zdCBFdmFzX09iamVjdCogbykKICAgICByZXR1cm4gY2xp
ZW50LT53ZWJGcmFtZSgpOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfdXJpX3NldChFdmFzX09i
amVjdCogbywgY29uc3QgY2hhciogdXJpKQorRWluYV9Cb29sIGV3a192aWV3X3VyaV9zZXQoRXZh
c19PYmplY3QqIGV3a1ZpZXcsIGNvbnN0IGNoYXIqIHVyaSkKIHsKLSAgICBFV0tfVklFV19TRF9H
RVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1Jf
UkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICByZXR1cm4gZXdrX2ZyYW1lX3Vy
aV9zZXQoc2QtPm1haW5fZnJhbWUsIHVyaSk7CiB9CiAKLWNvbnN0IGNoYXIqIGV3a192aWV3X3Vy
aV9nZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCitjb25zdCBjaGFyKiBld2tfdmlld191cmlfZ2V0
KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9S
RVRVUk4obywgc2QsIDApOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywg
c2QsIDApOwogICAgIHJldHVybiBld2tfZnJhbWVfdXJpX2dldChzZC0+bWFpbl9mcmFtZSk7CiB9
CiAKLWNvbnN0IGNoYXIqIGV3a192aWV3X3RpdGxlX2dldChjb25zdCBFdmFzX09iamVjdCogbykK
K2NvbnN0IGNoYXIqIGV3a192aWV3X3RpdGxlX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmll
dykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAwKTsKKyAgICBFV0tf
VklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAwKTsKICAgICByZXR1cm4gZXdrX2Zy
YW1lX3RpdGxlX2dldChzZC0+bWFpbl9mcmFtZSk7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld19l
ZGl0YWJsZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCitFaW5hX0Jvb2wgZXdrX3ZpZXdfZWRp
dGFibGVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NE
X0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9P
Ul9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAgIHJldHVybiBld2tfZnJhbWVf
ZWRpdGFibGVfZ2V0KHNkLT5tYWluX2ZyYW1lKTsKIH0KIAotdm9pZCBld2tfdmlld19iZ19jb2xv
cl9zZXQoRXZhc19PYmplY3QqIG8sIGludCByLCBpbnQgZywgaW50IGIsIGludCBhKQordm9pZCBl
d2tfdmlld19iZ19jb2xvcl9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGludCByZWQsIGludCBn
cmVlbiwgaW50IGJsdWUsIGludCBhbHBoYSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVU
VVJOKG8sIHNkKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkKTsK
ICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpKTsKICAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpLT5iZ19jb2xvcl9zZXQpOwogCi0gICAgaWYgKGEgPCAw
KSB7Ci0gICAgICAgIFdSTigiQWxwaGEgbGVzcyB0aGFuIHplcm8gKCVkKS4iLCBhKTsKLSAgICAg
ICAgYSA9IDA7Ci0gICAgfSBlbHNlIGlmIChhID4gMjU1KSB7Ci0gICAgICAgIFdSTigiQWxwaGEg
aXMgbGFyZ2VyIHRoYW4gMjU1ICglZCkuIiwgYSk7Ci0gICAgICAgIGEgPSAyNTU7CisgICAgaWYg
KGFscGhhIDwgMCkgeworICAgICAgICBXUk4oIkFscGhhIGxlc3MgdGhhbiB6ZXJvICglZCkuIiwg
YWxwaGEpOworICAgICAgICBhbHBoYSA9IDA7CisgICAgfSBlbHNlIGlmIChhbHBoYSA+IDI1NSkg
eworICAgICAgICBXUk4oIkFscGhhIGlzIGxhcmdlciB0aGFuIDI1NSAoJWQpLiIsIGFscGhhKTsK
KyAgICAgICAgYWxwaGEgPSAyNTU7CiAgICAgfQogCiAjZGVmaW5lIENIRUNLX1BSRU1VTF9DT0xP
UihjLCBhKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCkBAIC0xMjUy
LDYzICsxMjUyLDYzIEBAIHZvaWQgZXdrX3ZpZXdfYmdfY29sb3Jfc2V0KEV2YXNfT2JqZWN0KiBv
LCBpbnQgciwgaW50IGcsIGludCBiLCBpbnQgYSkKICAgICAgICAgICAgIGMsIGEpOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAg
YyA9IGE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKICAgICB9Ci0gICAgQ0hFQ0tfUFJFTVVMX0NPTE9SKHIsIGEpOwotICAgIENIRUNL
X1BSRU1VTF9DT0xPUihnLCBhKTsKLSAgICBDSEVDS19QUkVNVUxfQ09MT1IoYiwgYSk7CisgICAg
Q0hFQ0tfUFJFTVVMX0NPTE9SKHJlZCwgYWxwaGEpOworICAgIENIRUNLX1BSRU1VTF9DT0xPUihn
cmVlbiwgYWxwaGEpOworICAgIENIRUNLX1BSRU1VTF9DT0xPUihibHVlLCBhbHBoYSk7CiAjdW5k
ZWYgQ0hFQ0tfUFJFTVVMX0NPTE9SCiAKLSAgICBzZC0+YmdfY29sb3IuciA9IHI7Ci0gICAgc2Qt
PmJnX2NvbG9yLmcgPSBnOwotICAgIHNkLT5iZ19jb2xvci5iID0gYjsKLSAgICBzZC0+YmdfY29s
b3IuYSA9IGE7CisgICAgc2QtPmJnX2NvbG9yLnIgPSByZWQ7CisgICAgc2QtPmJnX2NvbG9yLmcg
PSBncmVlbjsKKyAgICBzZC0+YmdfY29sb3IuYiA9IGJsdWU7CisgICAgc2QtPmJnX2NvbG9yLmEg
PSBhbHBoYTsKIAotICAgIHNkLT5hcGktPmJnX2NvbG9yX3NldChzZCwgciwgZywgYiwgYSk7Cisg
ICAgc2QtPmFwaS0+YmdfY29sb3Jfc2V0KHNkLCByZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7CiAK
ICAgICBXZWJDb3JlOjpGcmFtZVZpZXcqIHZpZXcgPSBzZC0+X3ByaXYtPm1haW5fZnJhbWUtPnZp
ZXcoKTsKICAgICBpZiAodmlldykgewogICAgICAgICBXZWJDb3JlOjpDb2xvciBjb2xvcjsKIAot
ICAgICAgICBpZiAoIWEpCisgICAgICAgIGlmICghYWxwaGEpCiAgICAgICAgICAgICBjb2xvciA9
IFdlYkNvcmU6OkNvbG9yKDAsIDAsIDAsIDApOwotICAgICAgICBlbHNlIGlmIChhID09IDI1NSkK
LSAgICAgICAgICAgIGNvbG9yID0gV2ViQ29yZTo6Q29sb3IociwgZywgYiwgYSk7CisgICAgICAg
IGVsc2UgaWYgKGFscGhhID09IDI1NSkKKyAgICAgICAgICAgIGNvbG9yID0gV2ViQ29yZTo6Q29s
b3IocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBj
b2xvciA9IFdlYkNvcmU6OkNvbG9yKHIgKiAyNTUgLyBhLCBnICogMjU1IC8gYSwgYiAqIDI1NSAv
IGEsIGEpOworICAgICAgICAgICAgY29sb3IgPSBXZWJDb3JlOjpDb2xvcihyZWQgKiAyNTUgLyBh
bHBoYSwgZ3JlZW4gKiAyNTUgLyBhbHBoYSwgYmx1ZSAqIDI1NSAvIGFscGhhLCBhbHBoYSk7CiAK
LSAgICAgICAgdmlldy0+dXBkYXRlQmFja2dyb3VuZFJlY3Vyc2l2ZWx5KGNvbG9yLCAhYSk7Cisg
ICAgICAgIHZpZXctPnVwZGF0ZUJhY2tncm91bmRSZWN1cnNpdmVseShjb2xvciwgIWFscGhhKTsK
ICAgICB9CiB9CiAKLXZvaWQgZXdrX3ZpZXdfYmdfY29sb3JfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0
KiBvLCBpbnQqIHIsIGludCogZywgaW50KiBiLCBpbnQqIGEpCit2b2lkIGV3a192aWV3X2JnX2Nv
bG9yX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldywgaW50KiByZWQsIGludCogZ3JlZW4s
IGludCogYmx1ZSwgaW50KiBhbHBoYSkKIHsKLSAgICBpZiAocikKLSAgICAgICAgKnIgPSAwOwot
ICAgIGlmIChnKQotICAgICAgICAqZyA9IDA7Ci0gICAgaWYgKGIpCi0gICAgICAgICpiID0gMDsK
LSAgICBpZiAoYSkKLSAgICAgICAgKmEgPSAwOwotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRV
Uk4obywgc2QpOwotICAgIGlmIChyKQotICAgICAgICAqciA9IHNkLT5iZ19jb2xvci5yOwotICAg
IGlmIChnKQotICAgICAgICAqZyA9IHNkLT5iZ19jb2xvci5nOwotICAgIGlmIChiKQotICAgICAg
ICAqYiA9IHNkLT5iZ19jb2xvci5iOwotICAgIGlmIChhKQotICAgICAgICAqYSA9IHNkLT5iZ19j
b2xvci5hOworICAgIGlmIChyZWQpCisgICAgICAgICpyZWQgPSAwOworICAgIGlmIChncmVlbikK
KyAgICAgICAgKmdyZWVuID0gMDsKKyAgICBpZiAoYmx1ZSkKKyAgICAgICAgKmJsdWUgPSAwOwor
ICAgIGlmIChhbHBoYSkKKyAgICAgICAgKmFscGhhID0gMDsKKyAgICBFV0tfVklFV19TRF9HRVRf
T1JfUkVUVVJOKGV3a1ZpZXcsIHNkKTsKKyAgICBpZiAocmVkKQorICAgICAgICAqcmVkID0gc2Qt
PmJnX2NvbG9yLnI7CisgICAgaWYgKGdyZWVuKQorICAgICAgICAqZ3JlZW4gPSBzZC0+YmdfY29s
b3IuZzsKKyAgICBpZiAoYmx1ZSkKKyAgICAgICAgKmJsdWUgPSBzZC0+YmdfY29sb3IuYjsKKyAg
ICBpZiAoYWxwaGEpCisgICAgICAgICphbHBoYSA9IHNkLT5iZ19jb2xvci5hOwogfQogCi1FaW5h
X0Jvb2wgZXdrX3ZpZXdfdGV4dF9zZWFyY2goY29uc3QgRXZhc19PYmplY3QqIG8sIGNvbnN0IGNo
YXIqIHN0cmluZywgRWluYV9Cb29sIGNhc2Vfc2Vuc2l0aXZlLCBFaW5hX0Jvb2wgZm9yd2FyZCwg
RWluYV9Cb29sIHdyYXApCitFaW5hX0Jvb2wgZXdrX3ZpZXdfdGV4dF9zZWFyY2goY29uc3QgRXZh
c19PYmplY3QqIGV3a1ZpZXcsIGNvbnN0IGNoYXIqIHN0cmluZywgRWluYV9Cb29sIGNhc2VTZW5z
aXRpdmUsIEVpbmFfQm9vbCBmb3J3YXJkLCBFaW5hX0Jvb2wgd3JhcCkKIHsKLSAgICBFV0tfVklF
V19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9H
RVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFV0tfVklFV19QUklW
X0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOX1ZBTChzdHJpbmcsIEVJTkFfRkFMU0UpOwogICAgIFdURjo6VGV4dENhc2VT
ZW5zaXRpdml0eSBzZW5zaXRpdmU7CiAgICAgV2ViQ29yZTo6RmluZERpcmVjdGlvbiBkaXJlY3Rp
b247CiAKLSAgICBpZiAoY2FzZV9zZW5zaXRpdmUpCisgICAgaWYgKGNhc2VTZW5zaXRpdmUpCiAg
ICAgICAgIHNlbnNpdGl2ZSA9IFdURjo6VGV4dENhc2VTZW5zaXRpdmU7CiAgICAgZWxzZQogICAg
ICAgICBzZW5zaXRpdmUgPSBXVEY6OlRleHRDYXNlSW5zZW5zaXRpdmU7CkBAIC0xMzI2LDIwICsx
MzI2LDIwIEBAIEVpbmFfQm9vbCBld2tfdmlld190ZXh0X3NlYXJjaChjb25zdCBFdmFzX09iamVj
dCogbywgY29uc3QgY2hhciogc3RyaW5nLCBFaW5hX0JvCiAgKgogICogQHBhcmFtIG8gdmlldyBv
YmplY3Qgd2hlcmUgdG8gc2VhcmNoIHRleHQuCiAgKiBAcGFyYW0gc3RyaW5nIHJlZmVyZW5jZSBz
dHJpbmcgdG8gbWF0Y2guCi0gKiBAcGFyYW0gY2FzZV9zZW5zaXRpdmUgaWYgbWF0Y2ggc2hvdWxk
IGJlIGNhc2Ugc2Vuc2l0aXZlIG9yIG5vdC4KKyAqIEBwYXJhbSBjYXNlU2Vuc2l0aXZlIGlmIG1h
dGNoIHNob3VsZCBiZSBjYXNlIHNlbnNpdGl2ZSBvciBub3QuCiAgKiBAcGFyYW0gaGlnaGxpZ2h0
IGlmIG1hdGNoZXMgc2hvdWxkIGJlIGhpZ2hsaWdodGVkLgogICogQHBhcmFtIGxpbWl0IG1heGlt
dW0gYW1vdW50IG9mIG1hdGNoZXMsIG9yIHplcm8gdG8gdW5saW1pdGVkLgogICoKICAqIEByZXR1
cm4gbnVtYmVyIG9mIG1hdGNoZXMuCiAgKi8KLXVuc2lnbmVkIGludCBld2tfdmlld190ZXh0X21h
dGNoZXNfbWFyayhFdmFzX09iamVjdCogbywgY29uc3QgY2hhciogc3RyaW5nLCBFaW5hX0Jvb2wg
Y2FzZV9zZW5zaXRpdmUsIEVpbmFfQm9vbCBoaWdobGlnaHQsIHVuc2lnbmVkIGludCBsaW1pdCkK
K3Vuc2lnbmVkIGludCBld2tfdmlld190ZXh0X21hdGNoZXNfbWFyayhFdmFzX09iamVjdCogZXdr
VmlldywgY29uc3QgY2hhciogc3RyaW5nLCBFaW5hX0Jvb2wgY2FzZVNlbnNpdGl2ZSwgRWluYV9C
b29sIGhpZ2hsaWdodCwgdW5zaWduZWQgaW50IGxpbWl0KQogewotICAgIEVXS19WSUVXX1NEX0dF
VF9PUl9SRVRVUk4obywgc2QsIDApOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdr
Vmlldywgc2QsIDApOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwg
MCk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHN0cmluZywgMCk7CiAgICAg
V1RGOjpUZXh0Q2FzZVNlbnNpdGl2aXR5IHNlbnNpdGl2ZTsKIAotICAgIGlmIChjYXNlX3NlbnNp
dGl2ZSkKKyAgICBpZiAoY2FzZVNlbnNpdGl2ZSkKICAgICAgICAgc2Vuc2l0aXZlID0gV1RGOjpU
ZXh0Q2FzZVNlbnNpdGl2ZTsKICAgICBlbHNlCiAgICAgICAgIHNlbnNpdGl2ZSA9IFdURjo6VGV4
dENhc2VJbnNlbnNpdGl2ZTsKQEAgLTEzNDcsMzUgKzEzNDcsMzUgQEAgdW5zaWduZWQgaW50IGV3
a192aWV3X3RleHRfbWF0Y2hlc19tYXJrKEV2YXNfT2JqZWN0KiBvLCBjb25zdCBjaGFyKiBzdHJp
bmcsIEVpbmEKICAgICByZXR1cm4gcHJpdi0+cGFnZS0+bWFya0FsbE1hdGNoZXNGb3JUZXh0KFN0
cmluZzo6ZnJvbVVURjgoc3RyaW5nKSwgc2Vuc2l0aXZlLCBoaWdobGlnaHQsIGxpbWl0KTsKIH0K
IAotRWluYV9Cb29sIGV3a192aWV3X3RleHRfbWF0Y2hlc191bm1hcmtfYWxsKEV2YXNfT2JqZWN0
KiBvKQorRWluYV9Cb29sIGV3a192aWV3X3RleHRfbWF0Y2hlc191bm1hcmtfYWxsKEV2YXNfT2Jq
ZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJ
TkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJ
TkFfRkFMU0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlO
QV9GQUxTRSk7CiAgICAgcHJpdi0+cGFnZS0+dW5tYXJrQWxsVGV4dE1hdGNoZXMoKTsKICAgICBy
ZXR1cm4gRUlOQV9UUlVFOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfdGV4dF9tYXRjaGVzX2hp
Z2hsaWdodF9zZXQoRXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCBoaWdobGlnaHQpCitFaW5hX0Jv
b2wgZXdrX3ZpZXdfdGV4dF9tYXRjaGVzX2hpZ2hsaWdodF9zZXQoRXZhc19PYmplY3QqIGV3a1Zp
ZXcsIEVpbmFfQm9vbCBoaWdobGlnaHQpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
TihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tW
aWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgcmV0dXJuIGV3a19mcmFtZV90ZXh0X21hdGNoZXNf
aGlnaGxpZ2h0X3NldChzZC0+bWFpbl9mcmFtZSwgaGlnaGxpZ2h0KTsKIH0KIAotRWluYV9Cb29s
IGV3a192aWV3X3RleHRfbWF0Y2hlc19oaWdobGlnaHRfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBv
KQorRWluYV9Cb29sIGV3a192aWV3X3RleHRfbWF0Y2hlc19oaWdobGlnaHRfZ2V0KGNvbnN0IEV2
YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywg
c2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywg
c2QsIEVJTkFfRkFMU0UpOwogICAgIHJldHVybiBld2tfZnJhbWVfdGV4dF9tYXRjaGVzX2hpZ2hs
aWdodF9nZXQoc2QtPm1haW5fZnJhbWUpOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfZWRpdGFi
bGVfc2V0KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wgZWRpdGFibGUpCitFaW5hX0Jvb2wgZXdr
X3ZpZXdfZWRpdGFibGVfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wgZWRpdGFi
bGUpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7
CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7
CiAgICAgcmV0dXJuIGV3a19mcmFtZV9lZGl0YWJsZV9zZXQoc2QtPm1haW5fZnJhbWUsIGVkaXRh
YmxlKTsKIH0KIAotY2hhciogZXdrX3ZpZXdfc2VsZWN0aW9uX2dldChjb25zdCBFdmFzX09iamVj
dCogbykKK2NoYXIqIGV3a192aWV3X3NlbGVjdGlvbl9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3
a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgMCk7CisgICAg
RVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgMCk7CiAgICAgRVdLX1ZJRVdf
UFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCAwKTsKICAgICBDU3RyaW5nIHMgPSBwcml2LT5w
YWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCktPmVkaXRvcigpLT5z
ZWxlY3RlZFRleHQoKS51dGY4KCk7CiAgICAgaWYgKHMuaXNOdWxsKCkpCkBAIC0xMzg4LDkgKzEz
ODgsOSBAQCBzdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19lZGl0b3JfY29tbWFuZChFd2tfVmll
d19Qcml2YXRlX0RhdGEqIHByaXYsIGNvbnN0IGNoYQogICAgIHJldHVybiBwcml2LT5wYWdlLT5m
b2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCktPmVkaXRvcigpLT5jb21tYW5k
KFdURjo6U3RyaW5nOjpmcm9tVVRGOChjb21tYW5kKSkuZXhlY3V0ZSh2YWx1ZSk7CiB9CiAKLUVp
bmFfQm9vbCBld2tfdmlld19leGVjdXRlX2VkaXRvcl9jb21tYW5kKEV2YXNfT2JqZWN0KiBvLCBj
b25zdCBFd2tfRWRpdG9yX0NvbW1hbmQgY29tbWFuZCwgY29uc3QgY2hhciogdmFsdWUpCitFaW5h
X0Jvb2wgZXdrX3ZpZXdfZXhlY3V0ZV9lZGl0b3JfY29tbWFuZChFdmFzX09iamVjdCogZXdrVmll
dywgY29uc3QgRXdrX0VkaXRvcl9Db21tYW5kIGNvbW1hbmQsIGNvbnN0IGNoYXIqIHZhbHVlKQog
ewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAg
IEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAg
IEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CiAKICAg
ICBzd2l0Y2ggKGNvbW1hbmQpIHsKQEAgLTE0MTUsMTAgKzE0MTUsMTAgQEAgRWluYV9Cb29sIGV3
a192aWV3X2V4ZWN1dGVfZWRpdG9yX2NvbW1hbmQoRXZhc19PYmplY3QqIG8sIGNvbnN0IEV3a19F
ZGl0b3JfQ29tbWEKICAgICB9CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld19jb250ZXh0X21lbnVf
Zm9yd2FyZF9ldmVudChFdmFzX09iamVjdCogbywgY29uc3QgRXZhc19FdmVudF9Nb3VzZV9Eb3du
KiBldikKK0VpbmFfQm9vbCBld2tfdmlld19jb250ZXh0X21lbnVfZm9yd2FyZF9ldmVudChFdmFz
X09iamVjdCogZXdrVmlldywgY29uc3QgRXZhc19FdmVudF9Nb3VzZV9Eb3duKiBkb3duRXZlbnQp
CiB7CiAjaWYgRU5BQkxFKENPTlRFWFRfTUVOVVMpCi0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JF
VFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihl
d2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJO
KHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBFaW5hX0Jvb2wgbW91c2VfcHJlc3NfaGFuZGxl
ZCA9IEVJTkFfRkFMU0U7CiAKQEAgLTE0MjcsNyArMTQyNyw3IEBAIEVpbmFfQm9vbCBld2tfdmll
d19jb250ZXh0X21lbnVfZm9yd2FyZF9ldmVudChFdmFzX09iamVjdCogbywgY29uc3QgRXZhc19F
dmVudF9NCiAgICAgRXZhc19Db29yZCB4LCB5OwogICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dl
dChzZC0+c2VsZiwgJngsICZ5LCAwLCAwKTsKIAotICAgIFdlYkNvcmU6OlBsYXRmb3JtTW91c2VF
dmVudCBldmVudChldiwgV2ViQ29yZTo6SW50UG9pbnQoeCwgeSkpOworICAgIFdlYkNvcmU6OlBs
YXRmb3JtTW91c2VFdmVudCBldmVudChkb3duRXZlbnQsIFdlYkNvcmU6OkludFBvaW50KHgsIHkp
KTsKIAogICAgIGlmIChtYWluX2ZyYW1lLT52aWV3KCkpIHsKICAgICAgICAgbW91c2VfcHJlc3Nf
aGFuZGxlZCA9CkBAIC0xNDUxLDg1ICsxNDUxLDg1IEBAIEVpbmFfQm9vbCBld2tfdmlld19jb250
ZXh0X21lbnVfZm9yd2FyZF9ldmVudChFdmFzX09iamVjdCogbywgY29uc3QgRXZhc19FdmVudF9N
CiAjZW5kaWYKIH0KIAotZG91YmxlIGV3a192aWV3X2xvYWRfcHJvZ3Jlc3NfZ2V0KGNvbnN0IEV2
YXNfT2JqZWN0KiBvKQorZG91YmxlIGV3a192aWV3X2xvYWRfcHJvZ3Jlc3NfZ2V0KGNvbnN0IEV2
YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywg
c2QsIC0xLjApOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIC0x
LjApOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgLTEuMCk7CiAg
ICAgcmV0dXJuIHByaXYtPnBhZ2UtPnByb2dyZXNzKCktPmVzdGltYXRlZFByb2dyZXNzKCk7CiB9
CiAKLUVpbmFfQm9vbCBld2tfdmlld19zdG9wKEV2YXNfT2JqZWN0KiBvKQorRWluYV9Cb29sIGV3
a192aWV3X3N0b3AoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JF
VFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgcmV0dXJuIGV3a19mcmFtZV9zdG9w
KHNkLT5tYWluX2ZyYW1lKTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3JlbG9hZChFdmFzX09i
amVjdCogbykKK0VpbmFfQm9vbCBld2tfdmlld19yZWxvYWQoRXZhc19PYmplY3QqIGV3a1ZpZXcp
CiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7Cisg
ICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAg
ICAgcmV0dXJuIGV3a19mcmFtZV9yZWxvYWQoc2QtPm1haW5fZnJhbWUpOwogfQogCi1FaW5hX0Jv
b2wgZXdrX3ZpZXdfcmVsb2FkX2Z1bGwoRXZhc19PYmplY3QqIG8pCitFaW5hX0Jvb2wgZXdrX3Zp
ZXdfcmVsb2FkX2Z1bGwoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgcmV0dXJuIGV3a19mcmFtZV9y
ZWxvYWRfZnVsbChzZC0+bWFpbl9mcmFtZSk7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld19iYWNr
KEV2YXNfT2JqZWN0KiBvKQorRWluYV9Cb29sIGV3a192aWV3X2JhY2soRXZhc19PYmplY3QqIGV3
a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxT
RSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxT
RSk7CiAgICAgcmV0dXJuIGV3a19mcmFtZV9iYWNrKHNkLT5tYWluX2ZyYW1lKTsKIH0KIAotRWlu
YV9Cb29sIGV3a192aWV3X2ZvcndhcmQoRXZhc19PYmplY3QqIG8pCitFaW5hX0Jvb2wgZXdrX3Zp
ZXdfZm9yd2FyZChFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRf
T1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVU
VVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICByZXR1cm4gZXdrX2ZyYW1lX2Zvcndh
cmQoc2QtPm1haW5fZnJhbWUpOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfbmF2aWdhdGUoRXZh
c19PYmplY3QqIG8sIGludCBzdGVwcykKK0VpbmFfQm9vbCBld2tfdmlld19uYXZpZ2F0ZShFdmFz
X09iamVjdCogZXdrVmlldywgaW50IHN0ZXBzKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9S
RVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAgIHJldHVybiBld2tfZnJhbWVfbmF2aWdhdGUo
c2QtPm1haW5fZnJhbWUsIHN0ZXBzKTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X2JhY2tfcG9z
c2libGUoRXZhc19PYmplY3QqIG8pCitFaW5hX0Jvb2wgZXdrX3ZpZXdfYmFja19wb3NzaWJsZShF
dmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8s
IHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcs
IHNkLCBFSU5BX0ZBTFNFKTsKICAgICByZXR1cm4gZXdrX2ZyYW1lX2JhY2tfcG9zc2libGUoc2Qt
Pm1haW5fZnJhbWUpOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfZm9yd2FyZF9wb3NzaWJsZShF
dmFzX09iamVjdCogbykKK0VpbmFfQm9vbCBld2tfdmlld19mb3J3YXJkX3Bvc3NpYmxlKEV2YXNf
T2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2Qs
IEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2Qs
IEVJTkFfRkFMU0UpOwogICAgIHJldHVybiBld2tfZnJhbWVfZm9yd2FyZF9wb3NzaWJsZShzZC0+
bWFpbl9mcmFtZSk7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld19uYXZpZ2F0ZV9wb3NzaWJsZShF
dmFzX09iamVjdCogbywgaW50IHN0ZXBzKQorRWluYV9Cb29sIGV3a192aWV3X25hdmlnYXRlX3Bv
c3NpYmxlKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBpbnQgc3RlcHMpCiB7Ci0gICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgcmV0dXJuIGV3a19mcmFt
ZV9uYXZpZ2F0ZV9wb3NzaWJsZShzZC0+bWFpbl9mcmFtZSwgc3RlcHMpOwogfQogCi1FaW5hX0Jv
b2wgZXdrX3ZpZXdfaGlzdG9yeV9lbmFibGVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQorRWlu
YV9Cb29sIGV3a192aWV3X2hpc3RvcnlfZW5hYmxlX2dldChjb25zdCBFdmFzX09iamVjdCogZXdr
VmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNF
KTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNF
KTsKICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0Up
OwogICAgIHJldHVybiBzdGF0aWNfY2FzdDxXZWJDb3JlOjpCYWNrRm9yd2FyZExpc3RJbXBsKj4o
cHJpdi0+cGFnZS0+YmFja0ZvcndhcmRMaXN0KCkpLT5lbmFibGVkKCk7CiB9CiAKLUVpbmFfQm9v
bCBld2tfdmlld19oaXN0b3J5X2VuYWJsZV9zZXQoRXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCBl
bmFibGUpCitFaW5hX0Jvb2wgZXdrX3ZpZXdfaGlzdG9yeV9lbmFibGVfc2V0KEV2YXNfT2JqZWN0
KiBld2tWaWV3LCBFaW5hX0Jvb2wgZW5hYmxlKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9S
RVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVS
TihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgc3RhdGljX2Nhc3Q8V2ViQ29yZTo6QmFja0Zv
cndhcmRMaXN0SW1wbCo+KHByaXYtPnBhZ2UtPmJhY2tGb3J3YXJkTGlzdCgpKS0+c2V0RW5hYmxl
ZChlbmFibGUpOwogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLUV3a19IaXN0b3J5KiBld2tf
dmlld19oaXN0b3J5X2dldChjb25zdCBFdmFzX09iamVjdCogbykKK0V3a19IaXN0b3J5KiBld2tf
dmlld19oaXN0b3J5X2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tf
VklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAwKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1Jf
UkVUVVJOKGV3a1ZpZXcsIHNkLCAwKTsKICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4o
c2QsIHByaXYsIDApOwogICAgIGlmICghc3RhdGljX2Nhc3Q8V2ViQ29yZTo6QmFja0ZvcndhcmRM
aXN0SW1wbCo+KHByaXYtPnBhZ2UtPmJhY2tGb3J3YXJkTGlzdCgpKS0+ZW5hYmxlZCgpKSB7CiAg
ICAgICAgIEVSUigiYXNrZWQgaGlzdG9yeSwgYnV0IGl0J3MgZGlzYWJsZWQhIFJldHVybmluZyAw
ISIpOwpAQCAtMTU0NCw5ICsxNTQ0LDkgQEAgZmxvYXQgZXdrX3ZpZXdfem9vbV9nZXQoY29uc3Qg
RXZhc19PYmplY3QqIGV3a1ZpZXcpCiAgICAgcmV0dXJuIGV3a19mcmFtZV9wYWdlX3pvb21fZ2V0
KHNkLT5tYWluX2ZyYW1lKTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3pvb21fc2V0KEV2YXNf
T2JqZWN0KiBvLCBmbG9hdCB6b29tLCBFdmFzX0Nvb3JkIGN4LCBFdmFzX0Nvb3JkIGN5KQorRWlu
YV9Cb29sIGV3a192aWV3X3pvb21fc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBmbG9hdCB6b29t
LCBFdmFzX0Nvb3JkIGN4LCBFdmFzX0Nvb3JkIGN5KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9P
Ul9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRV
Uk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUKHNkLCBw
cml2KTsKIAogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+YXBpLCBFSU5B
X0ZBTFNFKTsKQEAgLTE2MTksMjcgKzE2MTksMjcgQEAgRWluYV9Cb29sIGV3a192aWV3X3RleHRf
em9vbV9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGZsb2F0IHRleHRab29tRmFjdG9yKQogICAg
IHJldHVybiBld2tfZnJhbWVfdGV4dF96b29tX3NldChzZC0+bWFpbl9mcmFtZSwgdGV4dFpvb21G
YWN0b3IpOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfem9vbV93ZWFrX3Ntb290aF9zY2FsZV9n
ZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCitFaW5hX0Jvb2wgZXdrX3ZpZXdfem9vbV93ZWFrX3Nt
b290aF9zY2FsZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJ
RVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgcmV0dXJuIHNkLT56
b29tX3dlYWtfc21vb3RoX3NjYWxlOwogfQogCi12b2lkIGV3a192aWV3X3pvb21fd2Vha19zbW9v
dGhfc2NhbGVfc2V0KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wgc21vb3RoX3NjYWxlKQordm9p
ZCBld2tfdmlld196b29tX3dlYWtfc21vb3RoX3NjYWxlX3NldChFdmFzX09iamVjdCogZXdrVmll
dywgRWluYV9Cb29sIHNtb290aFNjYWxlKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRV
Uk4obywgc2QpOwotICAgIHNtb290aF9zY2FsZSA9ICEhc21vb3RoX3NjYWxlOwotICAgIGlmIChz
ZC0+em9vbV93ZWFrX3Ntb290aF9zY2FsZSA9PSBzbW9vdGhfc2NhbGUpCisgICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCk7CisgICAgc21vb3RoU2NhbGUgPSAhIXNtb290
aFNjYWxlOworICAgIGlmIChzZC0+em9vbV93ZWFrX3Ntb290aF9zY2FsZSA9PSBzbW9vdGhTY2Fs
ZSkKICAgICAgICAgcmV0dXJuOwotICAgIHNkLT56b29tX3dlYWtfc21vb3RoX3NjYWxlID0gc21v
b3RoX3NjYWxlOworICAgIHNkLT56b29tX3dlYWtfc21vb3RoX3NjYWxlID0gc21vb3RoU2NhbGU7
CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFwaSk7CiAgICAgRUlOQV9TQUZF
VFlfT05fTlVMTF9SRVRVUk4oc2QtPmFwaS0+em9vbV93ZWFrX3Ntb290aF9zY2FsZV9zZXQpOwot
ICAgIHNkLT5hcGktPnpvb21fd2Vha19zbW9vdGhfc2NhbGVfc2V0KHNkLCBzbW9vdGhfc2NhbGUp
OworICAgIHNkLT5hcGktPnpvb21fd2Vha19zbW9vdGhfc2NhbGVfc2V0KHNkLCBzbW9vdGhTY2Fs
ZSk7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld196b29tX3dlYWtfc2V0KEV2YXNfT2JqZWN0KiBv
LCBmbG9hdCB6b29tLCBFdmFzX0Nvb3JkIGN4LCBFdmFzX0Nvb3JkIGN5KQorRWluYV9Cb29sIGV3
a192aWV3X3pvb21fd2Vha19zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGZsb2F0IHpvb20sIEV2
YXNfQ29vcmQgY2VudGVyWCwgRXZhc19Db29yZCBjZW50ZXJZKQogewotICAgIEVXS19WSUVXX1NE
X0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9P
Ul9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VU
KHNkLCBwcml2KTsKIAogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+YXBp
LCBFSU5BX0ZBTFNFKTsKQEAgLTE2NjIsNDEgKzE2NjIsNDEgQEAgRWluYV9Cb29sIGV3a192aWV3
X3pvb21fd2Vha19zZXQoRXZhc19PYmplY3QqIG8sIGZsb2F0IHpvb20sIEV2YXNfQ29vcmQgY3gs
IEV2YXMKICAgICBzZC0+YW5pbWF0ZWRfem9vbS56b29tLnN0YXJ0ID0gZXdrX2ZyYW1lX3BhZ2Vf
em9vbV9nZXQoc2QtPm1haW5fZnJhbWUpOwogICAgIHNkLT5hbmltYXRlZF96b29tLnpvb20uZW5k
ID0gem9vbTsKICAgICBzZC0+YW5pbWF0ZWRfem9vbS56b29tLmN1cnJlbnQgPSB6b29tOwotICAg
IHJldHVybiBzZC0+YXBpLT56b29tX3dlYWtfc2V0KHNkLCB6b29tLCBjeCwgY3kpOworICAgIHJl
dHVybiBzZC0+YXBpLT56b29tX3dlYWtfc2V0KHNkLCB6b29tLCBjZW50ZXJYLCBjZW50ZXJZKTsK
IH0KIAotRWluYV9Cb29sIGV3a192aWV3X3pvb21fYW5pbWF0ZWRfbWFya19zdGFydChFdmFzX09i
amVjdCogbywgZmxvYXQgem9vbSkKK0VpbmFfQm9vbCBld2tfdmlld196b29tX2FuaW1hdGVkX21h
cmtfc3RhcnQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGZsb2F0IHpvb20pCiB7Ci0gICAgRVdLX1ZJ
RVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgc2QtPmFuaW1hdGVk
X3pvb20uem9vbS5zdGFydCA9IHpvb207CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotRWlu
YV9Cb29sIGV3a192aWV3X3pvb21fYW5pbWF0ZWRfbWFya19lbmQoRXZhc19PYmplY3QqIG8sIGZs
b2F0IHpvb20pCitFaW5hX0Jvb2wgZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9tYXJrX2VuZChFdmFz
X09iamVjdCogZXdrVmlldywgZmxvYXQgem9vbSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1Jf
UkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJO
KGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBzZC0+YW5pbWF0ZWRfem9vbS56b29tLmVu
ZCA9IHpvb207CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3
X3pvb21fYW5pbWF0ZWRfbWFya19jdXJyZW50KEV2YXNfT2JqZWN0KiBvLCBmbG9hdCB6b29tKQor
RWluYV9Cb29sIGV3a192aWV3X3pvb21fYW5pbWF0ZWRfbWFya19jdXJyZW50KEV2YXNfT2JqZWN0
KiBld2tWaWV3LCBmbG9hdCB6b29tKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
bywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmll
dywgc2QsIEVJTkFfRkFMU0UpOwogICAgIHNkLT5hbmltYXRlZF96b29tLnpvb20uY3VycmVudCA9
IHpvb207CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3pv
b21fYW5pbWF0ZWRfbWFya19zdG9wKEV2YXNfT2JqZWN0KiBvKQorRWluYV9Cb29sIGV3a192aWV3
X3pvb21fYW5pbWF0ZWRfbWFya19zdG9wKEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVX
X1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAgIF9ld2tfdmll
d196b29tX2FuaW1hdGVkX21hcmtfc3RvcChzZCk7CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0K
IAotRWluYV9Cb29sIGV3a192aWV3X3pvb21fYW5pbWF0ZWRfc2V0KEV2YXNfT2JqZWN0KiBvLCBm
bG9hdCB6b29tLCBmbG9hdCBkdXJhdGlvbiwgRXZhc19Db29yZCBjeCwgRXZhc19Db29yZCBjeSkK
K0VpbmFfQm9vbCBld2tfdmlld196b29tX2FuaW1hdGVkX3NldChFdmFzX09iamVjdCogZXdrVmll
dywgZmxvYXQgem9vbSwgZmxvYXQgZHVyYXRpb24sIEV2YXNfQ29vcmQgY2VudGVyWCwgRXZhc19D
b29yZCBjZW50ZXJZKQogewogICAgIGRvdWJsZSBub3c7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
Tihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVU
VVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
Tl9WQUwoc2QtPmFwaSwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk5fVkFMKHNkLT5hcGktPnpvb21fd2Vha19zZXQsIEVJTkFfRkFMU0UpOwpAQCAtMTcyMiwxMCAr
MTcyMiwxMCBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9zZXQoRXZhc19PYmpl
Y3QqIG8sIGZsb2F0IHpvb20sIGZsb2F0IGR1cmF0aW9uLAogICAgICAgICBfZXdrX3ZpZXdfem9v
bV9hbmltYXRpb25fc3RhcnQoc2QpOwogICAgIH0KIAotICAgIGlmIChjeCA8IDApCi0gICAgICAg
IGN4ID0gMDsKLSAgICBpZiAoY3kgPCAwKQotICAgICAgICBjeSA9IDA7CisgICAgaWYgKGNlbnRl
clggPCAwKQorICAgICAgICBjZW50ZXJYID0gMDsKKyAgICBpZiAoY2VudGVyWSA8IDApCisgICAg
ICAgIGNlbnRlclkgPSAwOwogCiAgICAgbm93ID0gZWNvcmVfbG9vcF90aW1lX2dldCgpOwogICAg
IHByaXYtPmFuaW1hdGVkX3pvb20udGltZS5zdGFydCA9IG5vdzsKQEAgLTE3MzMsOCArMTczMyw4
IEBAIEVpbmFfQm9vbCBld2tfdmlld196b29tX2FuaW1hdGVkX3NldChFdmFzX09iamVjdCogbywg
ZmxvYXQgem9vbSwgZmxvYXQgZHVyYXRpb24sCiAgICAgcHJpdi0+YW5pbWF0ZWRfem9vbS50aW1l
LmR1cmF0aW9uID0gZHVyYXRpb247CiAgICAgcHJpdi0+YW5pbWF0ZWRfem9vbS56b29tLmVuZCA9
IHpvb207CiAgICAgcHJpdi0+YW5pbWF0ZWRfem9vbS56b29tLnJhbmdlID0gKHByaXYtPmFuaW1h
dGVkX3pvb20uem9vbS5lbmQgLSBwcml2LT5hbmltYXRlZF96b29tLnpvb20uc3RhcnQpOwotICAg
IHByaXYtPmFuaW1hdGVkX3pvb20uY2VudGVyLnggPSBjeDsKLSAgICBwcml2LT5hbmltYXRlZF96
b29tLmNlbnRlci55ID0gY3k7CisgICAgcHJpdi0+YW5pbWF0ZWRfem9vbS5jZW50ZXIueCA9IGNl
bnRlclg7CisgICAgcHJpdi0+YW5pbWF0ZWRfem9vbS5jZW50ZXIueSA9IGNlbnRlclk7CiAgICAg
c2QtPmFuaW1hdGVkX3pvb20uem9vbS5jdXJyZW50ID0gcHJpdi0+YW5pbWF0ZWRfem9vbS56b29t
LnN0YXJ0OwogICAgIHNkLT5hbmltYXRlZF96b29tLnpvb20uc3RhcnQgPSBwcml2LT5hbmltYXRl
ZF96b29tLnpvb20uc3RhcnQ7CiAgICAgc2QtPmFuaW1hdGVkX3pvb20uem9vbS5lbmQgPSBwcml2
LT5hbmltYXRlZF96b29tLnpvb20uZW5kOwpAQCAtMTc0Miw5ICsxNzQyLDkgQEAgRWluYV9Cb29s
IGV3a192aWV3X3pvb21fYW5pbWF0ZWRfc2V0KEV2YXNfT2JqZWN0KiBvLCBmbG9hdCB6b29tLCBm
bG9hdCBkdXJhdGlvbiwKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi1FaW5hX0Jvb2wgZXdr
X3ZpZXdfcHJlX3JlbmRlcl9yZWdpb24oRXZhc19PYmplY3QqIG8sIEV2YXNfQ29vcmQgeCwgRXZh
c19Db29yZCB5LCBFdmFzX0Nvb3JkIHcsIEV2YXNfQ29vcmQgaCwgZmxvYXQgem9vbSkKK0VpbmFf
Qm9vbCBld2tfdmlld19wcmVfcmVuZGVyX3JlZ2lvbihFdmFzX09iamVjdCogZXdrVmlldywgRXZh
c19Db29yZCB4LCBFdmFzX0Nvb3JkIHksIEV2YXNfQ29vcmQgd2lkdGgsIEV2YXNfQ29vcmQgaGVp
Z2h0LCBmbG9hdCB6b29tKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2Qs
IEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2Qs
IEVJTkFfRkFMU0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwg
RUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5hcGkt
PnByZV9yZW5kZXJfcmVnaW9uLCBFSU5BX0ZBTFNFKTsKICAgICBmbG9hdCBjdXJfem9vbTsKQEAg
LTE3NjUsMjkgKzE3NjUsMjkgQEAgRWluYV9Cb29sIGV3a192aWV3X3ByZV9yZW5kZXJfcmVnaW9u
KEV2YXNfT2JqZWN0KiBvLCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwKIAogICAgIGN3ICo9
IHpvb20gLyBjdXJfem9vbTsKICAgICBjaCAqPSB6b29tIC8gY3VyX3pvb207Ci0gICAgREJHKCJy
ZWdpb24gJWQsJWQrJWR4JWQgQCAlZiBjb250ZW50cz0lZHglZCIsIHgsIHksIHcsIGgsIHpvb20s
IGN3LCBjaCk7CisgICAgREJHKCJyZWdpb24gJWQsJWQrJWR4JWQgQCAlZiBjb250ZW50cz0lZHgl
ZCIsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHpvb20sIGN3LCBjaCk7CiAKLSAgICBpZiAoeCArIHcg
PiBjdykKLSAgICAgICAgdyA9IGN3IC0geDsKKyAgICBpZiAoeCArIHdpZHRoID4gY3cpCisgICAg
ICAgIHdpZHRoID0gY3cgLSB4OwogCi0gICAgaWYgKHkgKyBoID4gY2gpCi0gICAgICAgIGggPSBj
aCAtIHk7CisgICAgaWYgKHkgKyBoZWlnaHQgPiBjaCkKKyAgICAgICAgaGVpZ2h0ID0gY2ggLSB5
OwogCiAgICAgaWYgKHggPCAwKSB7Ci0gICAgICAgIHcgKz0geDsKKyAgICAgICAgd2lkdGggKz0g
eDsKICAgICAgICAgeCA9IDA7CiAgICAgfQogICAgIGlmICh5IDwgMCkgewotICAgICAgICBoICs9
IHk7CisgICAgICAgIGhlaWdodCArPSB5OwogICAgICAgICB5ID0gMDsKICAgICB9CiAKLSAgICBy
ZXR1cm4gc2QtPmFwaS0+cHJlX3JlbmRlcl9yZWdpb24oc2QsIHgsIHksIHcsIGgsIHpvb20pOwor
ICAgIHJldHVybiBzZC0+YXBpLT5wcmVfcmVuZGVyX3JlZ2lvbihzZCwgeCwgeSwgd2lkdGgsIGhl
aWdodCwgem9vbSk7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld19wcmVfcmVuZGVyX3JlbGF0aXZl
X3JhZGl1cyhFdmFzX09iamVjdCogbywgdW5zaWduZWQgaW50IG4pCitFaW5hX0Jvb2wgZXdrX3Zp
ZXdfcHJlX3JlbmRlcl9yZWxhdGl2ZV9yYWRpdXMoRXZhc19PYmplY3QqIGV3a1ZpZXcsIHVuc2ln
bmVkIGludCBudW1iZXIpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwg
RUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwg
RUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBF
SU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmFwaS0+
cHJlX3JlbmRlcl9yZWxhdGl2ZV9yYWRpdXMsIEVJTkFfRkFMU0UpOwogICAgIGZsb2F0IGN1cl96
b29tOwpAQCAtMTc5Niw2NSArMTc5Niw2NSBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfcHJlX3JlbmRl
cl9yZWxhdGl2ZV9yYWRpdXMoRXZhc19PYmplY3QqIG8sIHVuc2lnbmVkIGludCBuKQogICAgICAg
ICByZXR1cm4gRUlOQV9GQUxTRTsKIAogICAgIGN1cl96b29tID0gZXdrX2ZyYW1lX3BhZ2Vfem9v
bV9nZXQoc2QtPm1haW5fZnJhbWUpOwotICAgIHJldHVybiBzZC0+YXBpLT5wcmVfcmVuZGVyX3Jl
bGF0aXZlX3JhZGl1cyhzZCwgbiwgY3VyX3pvb20pOworICAgIHJldHVybiBzZC0+YXBpLT5wcmVf
cmVuZGVyX3JlbGF0aXZlX3JhZGl1cyhzZCwgbnVtYmVyLCBjdXJfem9vbSk7CiB9CiAKLXVuc2ln
bmVkIGludCBld2tfdmlld19pbWhfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQordW5zaWduZWQg
aW50IGV3a192aWV3X2ltaF9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAg
RVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgMCk7CisgICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihld2tWaWV3LCBzZCwgMCk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVU
VVJOKHNkLCBwcml2LCAwKTsKICAgICByZXR1cm4gcHJpdi0+aW1oOwogfQogCi12b2lkIGV3a192
aWV3X3ByZV9yZW5kZXJfY2FuY2VsKEV2YXNfT2JqZWN0KiBvKQordm9pZCBld2tfdmlld19wcmVf
cmVuZGVyX2NhbmNlbChFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9H
RVRfT1JfUkVUVVJOKG8sIHNkKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1Zp
ZXcsIHNkKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpLT5wcmVfcmVu
ZGVyX2NhbmNlbCk7CiAgICAgc2QtPmFwaS0+cHJlX3JlbmRlcl9jYW5jZWwoc2QpOwogfQogCi1F
aW5hX0Jvb2wgZXdrX3ZpZXdfZW5hYmxlX3JlbmRlcihjb25zdCBFdmFzX09iamVjdCogbykKK0Vp
bmFfQm9vbCBld2tfdmlld19lbmFibGVfcmVuZGVyKGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3
KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOwor
ICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwog
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+YXBpLT5lbmFibGVfcmVuZGVy
LCBFSU5BX0ZBTFNFKTsKICAgICByZXR1cm4gc2QtPmFwaS0+ZW5hYmxlX3JlbmRlcihzZCk7CiB9
CiAKLUVpbmFfQm9vbCBld2tfdmlld19kaXNhYmxlX3JlbmRlcihjb25zdCBFdmFzX09iamVjdCog
bykKK0VpbmFfQm9vbCBld2tfdmlld19kaXNhYmxlX3JlbmRlcihjb25zdCBFdmFzX09iamVjdCog
ZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZB
TFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZB
TFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmFwaS0+ZGlzYWJs
ZV9yZW5kZXIsIEVJTkFfRkFMU0UpOwogICAgIHJldHVybiBzZC0+YXBpLT5kaXNhYmxlX3JlbmRl
cihzZCk7CiB9CiAKLWNvbnN0IGNoYXIqIGV3a192aWV3X3NldHRpbmdfdXNlcl9hZ2VudF9nZXQo
Y29uc3QgRXZhc19PYmplY3QqIG8pCitjb25zdCBjaGFyKiBld2tfdmlld19zZXR0aW5nX3VzZXJf
YWdlbnRfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NE
X0dFVF9PUl9SRVRVUk4obywgc2QsIDApOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrVmlldywgc2QsIDApOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJp
diwgMCk7CiAgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLnVzZXJfYWdlbnQ7CiB9CiAKLUVpbmFf
Qm9vbCBld2tfdmlld19zZXR0aW5nX3VzZXJfYWdlbnRfc2V0KEV2YXNfT2JqZWN0KiBvLCBjb25z
dCBjaGFyKiB1c2VyX2FnZW50KQorRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfdXNlcl9hZ2Vu
dF9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGNvbnN0IGNoYXIqIHVzZXJBZ2VudCkKIHsKLSAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tf
VklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFV0tf
VklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwotICAgIGlmIChl
aW5hX3N0cmluZ3NoYXJlX3JlcGxhY2UoJnByaXYtPnNldHRpbmdzLnVzZXJfYWdlbnQsIHVzZXJf
YWdlbnQpKSB7CisgICAgaWYgKGVpbmFfc3RyaW5nc2hhcmVfcmVwbGFjZSgmcHJpdi0+c2V0dGlu
Z3MudXNlcl9hZ2VudCwgdXNlckFnZW50KSkgewogICAgICAgICBXZWJDb3JlOjpGcmFtZUxvYWRl
ckNsaWVudEVmbCogY2xpZW50ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RnJhbWVMb2FkZXJDbGll
bnRFZmwqPihwcml2LT5tYWluX2ZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCkpOwotICAgICAgICBj
bGllbnQtPnNldEN1c3RvbVVzZXJBZ2VudChTdHJpbmc6OmZyb21VVEY4KHVzZXJfYWdlbnQpKTsK
KyAgICAgICAgY2xpZW50LT5zZXRDdXN0b21Vc2VyQWdlbnQoU3RyaW5nOjpmcm9tVVRGOCh1c2Vy
QWdlbnQpKTsKICAgICB9CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotY29uc3QgY2hhciog
ZXdrX3ZpZXdfc2V0dGluZ191c2VyX3N0eWxlc2hlZXRfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBv
KQorY29uc3QgY2hhciogZXdrX3ZpZXdfc2V0dGluZ191c2VyX3N0eWxlc2hlZXRfZ2V0KGNvbnN0
IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
bywgc2QsIDApOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIDAp
OwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgMCk7CiAgICAgcmV0
dXJuIHByaXYtPnNldHRpbmdzLnVzZXJfc3R5bGVzaGVldDsKIH0KIAotRWluYV9Cb29sIGV3a192
aWV3X3NldHRpbmdfdXNlcl9zdHlsZXNoZWV0X3NldChFdmFzX09iamVjdCogbywgY29uc3QgY2hh
ciogdXJpKQorRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfdXNlcl9zdHlsZXNoZWV0X3NldChF
dmFzX09iamVjdCogZXdrVmlldywgY29uc3QgY2hhciogdXJpKQogewotICAgIEVXS19WSUVXX1NE
X0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9P
Ul9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VU
X09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgaWYgKGVpbmFfc3RyaW5nc2hh
cmVfcmVwbGFjZSgmcHJpdi0+c2V0dGluZ3MudXNlcl9zdHlsZXNoZWV0LCB1cmkpKSB7CiAgICAg
ICAgIFdlYkNvcmU6OktVUkwga3VybChXZWJDb3JlOjpLVVJMKCksIFN0cmluZzo6ZnJvbVVURjgo
dXJpKSk7CkBAIC0xODYzLDE2ICsxODYzLDE2IEBAIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5n
X3VzZXJfc3R5bGVzaGVldF9zZXQoRXZhc19PYmplY3QqIG8sIGNvbnN0IGNoYXIqIHVyaSkKICAg
ICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19hdXRv
X2xvYWRfaW1hZ2VzX2dldChjb25zdCBFdmFzX09iamVjdCogbykKK0VpbmFfQm9vbCBld2tfdmll
d19zZXR0aW5nX2F1dG9fbG9hZF9pbWFnZXNfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3
KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOwor
ICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwog
ICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CiAg
ICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmF1dG9fbG9hZF9pbWFnZXM7CiB9CiAKLUVpbmFfQm9v
bCBld2tfdmlld19zZXR0aW5nX2F1dG9fbG9hZF9pbWFnZXNfc2V0KEV2YXNfT2JqZWN0KiBvLCBF
aW5hX0Jvb2wgYXV0b21hdGljKQorRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfYXV0b19sb2Fk
X2ltYWdlc19zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCBhdXRvbWF0aWMpCiB7
Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAg
RVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAg
RVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBh
dXRvbWF0aWMgPSAhIWF1dG9tYXRpYzsKICAgICBpZiAocHJpdi0+c2V0dGluZ3MuYXV0b19sb2Fk
X2ltYWdlcyAhPSBhdXRvbWF0aWMpIHsKQEAgLTE4ODIsMTYgKzE4ODIsMTYgQEAgRWluYV9Cb29s
IGV3a192aWV3X3NldHRpbmdfYXV0b19sb2FkX2ltYWdlc19zZXQoRXZhc19PYmplY3QqIG8sIEVp
bmFfQm9vbCBhdXRvbWEKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi1FaW5hX0Jvb2wgZXdr
X3ZpZXdfc2V0dGluZ19hdXRvX3Nocmlua19pbWFnZXNfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBv
KQorRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfYXV0b19zaHJpbmtfaW1hZ2VzX2dldChjb25z
dCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJO
KG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1Zp
ZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2Qs
IHByaXYsIEVJTkFfRkFMU0UpOwogICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5hdXRvX3Nocmlu
a19pbWFnZXM7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2F1dG9fc2hyaW5rX2lt
YWdlc19zZXQoRXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCBhdXRvbWF0aWMpCitFaW5hX0Jvb2wg
ZXdrX3ZpZXdfc2V0dGluZ19hdXRvX3Nocmlua19pbWFnZXNfc2V0KEV2YXNfT2JqZWN0KiBld2tW
aWV3LCBFaW5hX0Jvb2wgYXV0b21hdGljKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRV
Uk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdr
Vmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihz
ZCwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgYXV0b21hdGljID0gISFhdXRvbWF0aWM7CiAgICAg
aWYgKHByaXYtPnNldHRpbmdzLmF1dG9fc2hyaW5rX2ltYWdlcyAhPSBhdXRvbWF0aWMpIHsKQEAg
LTE5MDEsMzEgKzE5MDEsMzEgQEAgRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfYXV0b19zaHJp
bmtfaW1hZ2VzX3NldChFdmFzX09iamVjdCogbywgRWluYV9Cb29sIGF1dG8KICAgICByZXR1cm4g
RUlOQV9UUlVFOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19lbmFibGVfYXV0b19y
ZXNpemVfd2luZG93X2dldChjb25zdCBFdmFzX09iamVjdCogbykKK0VpbmFfQm9vbCBld2tfdmll
d19zZXR0aW5nX2VuYWJsZV9hdXRvX3Jlc2l6ZV93aW5kb3dfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0
KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFf
RkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFf
RkFMU0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9G
QUxTRSk7CiAgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmVuYWJsZV9hdXRvX3Jlc2l6ZV93aW5k
b3c7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2VuYWJsZV9hdXRvX3Jlc2l6ZV93
aW5kb3dfc2V0KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wgcmVzaXphYmxlKQorRWluYV9Cb29s
IGV3a192aWV3X3NldHRpbmdfZW5hYmxlX2F1dG9fcmVzaXplX3dpbmRvd19zZXQoRXZhc19PYmpl
Y3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCByZXNpemFibGUpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JF
VFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1Jf
UkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBwcml2LT5zZXR0aW5ncy5lbmFibGVf
YXV0b19yZXNpemVfd2luZG93ID0gcmVzaXphYmxlOwogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9
CiAKLUVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2VuYWJsZV9zY3JpcHRzX2dldChjb25zdCBF
dmFzX09iamVjdCogbykKK0VpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2VuYWJsZV9zY3JpcHRz
X2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRf
T1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVU
VVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9S
RVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5l
bmFibGVfc2NyaXB0czsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfZW5hYmxlX3Nj
cmlwdHNfc2V0KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wgZW5hYmxlKQorRWluYV9Cb29sIGV3
a192aWV3X3NldHRpbmdfZW5hYmxlX3NjcmlwdHNfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBF
aW5hX0Jvb2wgZW5hYmxlKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2Qs
IEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2Qs
IEVJTkFfRkFMU0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwg
RUlOQV9GQUxTRSk7CiAgICAgZW5hYmxlID0gISFlbmFibGU7CiAgICAgaWYgKHByaXYtPnNldHRp
bmdzLmVuYWJsZV9zY3JpcHRzICE9IGVuYWJsZSkgewpAQCAtMTkzNSwxNiArMTkzNSwxNiBAQCBF
aW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19lbmFibGVfc2NyaXB0c19zZXQoRXZhc19PYmplY3Qq
IG8sIEVpbmFfQm9vbCBlbmFibGUpCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotRWluYV9C
b29sIGV3a192aWV3X3NldHRpbmdfZW5hYmxlX3BsdWdpbnNfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0
KiBvKQorRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfZW5hYmxlX3BsdWdpbnNfZ2V0KGNvbnN0
IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
bywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmll
dywgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwg
cHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmVuYWJsZV9wbHVn
aW5zOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19lbmFibGVfcGx1Z2luc19zZXQo
RXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCBlbmFibGUpCitFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0
dGluZ19lbmFibGVfcGx1Z2luc19zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCBl
bmFibGUpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxT
RSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxT
RSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNF
KTsKICAgICBlbmFibGUgPSAhIWVuYWJsZTsKICAgICBpZiAocHJpdi0+c2V0dGluZ3MuZW5hYmxl
X3BsdWdpbnMgIT0gZW5hYmxlKSB7CkBAIC0xOTU0LDE2ICsxOTU0LDE2IEBAIEVpbmFfQm9vbCBl
d2tfdmlld19zZXR0aW5nX2VuYWJsZV9wbHVnaW5zX3NldChFdmFzX09iamVjdCogbywgRWluYV9C
b29sIGVuYWJsZSkKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi1FaW5hX0Jvb2wgZXdrX3Zp
ZXdfc2V0dGluZ19lbmFibGVfZnJhbWVfZmxhdHRlbmluZ19nZXQoY29uc3QgRXZhc19PYmplY3Qq
IG8pCitFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19lbmFibGVfZnJhbWVfZmxhdHRlbmluZ19n
ZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
Tihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVU
VVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZW5h
YmxlX2ZyYW1lX2ZsYXR0ZW5pbmc7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2Vu
YWJsZV9mcmFtZV9mbGF0dGVuaW5nX3NldChFdmFzX09iamVjdCogbywgRWluYV9Cb29sIGVuYWJs
ZSkKK0VpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2VuYWJsZV9mcmFtZV9mbGF0dGVuaW5nX3Nl
dChFdmFzX09iamVjdCogZXdrVmlldywgRWluYV9Cb29sIGVuYWJsZSkKIHsKLSAgICBFV0tfVklF
V19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9H
RVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFV0tfVklFV19QUklW
X0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIGVuYWJsZSA9ICEhZW5h
YmxlOwogICAgIGlmIChwcml2LT5zZXR0aW5ncy5lbmFibGVfZnJhbWVfZmxhdHRlbmluZyAhPSBl
bmFibGUpIHsKQEAgLTE5NzMsMTYgKzE5NzMsMTYgQEAgRWluYV9Cb29sIGV3a192aWV3X3NldHRp
bmdfZW5hYmxlX2ZyYW1lX2ZsYXR0ZW5pbmdfc2V0KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wK
ICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19z
Y3JpcHRzX3dpbmRvd19vcGVuX2dldChjb25zdCBFdmFzX09iamVjdCogbykKK0VpbmFfQm9vbCBl
d2tfdmlld19zZXR0aW5nX3NjcmlwdHNfd2luZG93X29wZW5fZ2V0KGNvbnN0IEV2YXNfT2JqZWN0
KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFf
RkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFf
RkFMU0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9G
QUxTRSk7CiAgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLnNjcmlwdHNfd2luZG93X29wZW47CiB9
CiAKLUVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX3NjcmlwdHNfd2luZG93X29wZW5fc2V0KEV2
YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wgYWxsb3cpCitFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGlu
Z19zY3JpcHRzX3dpbmRvd19vcGVuX3NldChFdmFzX09iamVjdCogZXdrVmlldywgRWluYV9Cb29s
IGFsbG93KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFM
U0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFM
U0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxT
RSk7CiAgICAgYWxsb3cgPSAhIWFsbG93OwogICAgIGlmIChwcml2LT5zZXR0aW5ncy5zY3JpcHRz
X3dpbmRvd19vcGVuICE9IGFsbG93KSB7CkBAIC0xOTkyLDE2ICsxOTkyLDE2IEBAIEVpbmFfQm9v
bCBld2tfdmlld19zZXR0aW5nX3NjcmlwdHNfd2luZG93X29wZW5fc2V0KEV2YXNfT2JqZWN0KiBv
LCBFaW5hX0Jvb2wgYWxsCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotRWluYV9Cb29sIGV3
a192aWV3X3NldHRpbmdfc2NyaXB0c19jYW5fY2xvc2Vfd2luZG93c19nZXQoY29uc3QgRXZhc19P
YmplY3QqIG8pCitFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19zY3JpcHRzX2Nhbl9jbG9zZV93
aW5kb3dzX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19T
RF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRf
T1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFV0tfVklFV19QUklWX0dF
VF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIHJldHVybiBwcml2LT5zZXR0
aW5ncy5zY3JpcHRzX2Nhbl9jbG9zZV93aW5kb3dzOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdf
c2V0dGluZ19zY3JpcHRzX2Nhbl9jbG9zZV93aW5kb3dzX3NldChFdmFzX09iamVjdCogbywgRWlu
YV9Cb29sIGFsbG93KQorRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfc2NyaXB0c19jYW5fY2xv
c2Vfd2luZG93c19zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCBhbGxvdykKIHsK
LSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBF
V0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBF
V0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIGFs
bG93ID0gISFhbGxvdzsKICAgICBpZiAocHJpdi0+c2V0dGluZ3Muc2NyaXB0c19jYW5fY2xvc2Vf
d2luZG93cyAhPSBhbGxvdykgewpAQCAtMjAxMSwxNiArMjAxMSwxNiBAQCBFaW5hX0Jvb2wgZXdr
X3ZpZXdfc2V0dGluZ19zY3JpcHRzX2Nhbl9jbG9zZV93aW5kb3dzX3NldChFdmFzX09iamVjdCog
bywgRWluYV9CbwogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmll
d19zZXR0aW5nX3Jlc2l6YWJsZV90ZXh0YXJlYXNfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQor
RWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfcmVzaXphYmxlX3RleHRhcmVhc19nZXQoY29uc3Qg
RXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihv
LCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3
LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBw
cml2LCBFSU5BX0ZBTFNFKTsKICAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MucmVzaXphYmxlX3Rl
eHRhcmVhczsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfcmVzaXphYmxlX3RleHRh
cmVhc19zZXQoRXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCBlbmFibGUpCitFaW5hX0Jvb2wgZXdr
X3ZpZXdfc2V0dGluZ19yZXNpemFibGVfdGV4dGFyZWFzX3NldChFdmFzX09iamVjdCogZXdrVmll
dywgRWluYV9Cb29sIGVuYWJsZSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8s
IHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcs
IHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHBy
aXYsIEVJTkFfRkFMU0UpOwogICAgIGVuYWJsZSA9ICEhZW5hYmxlOwogICAgIGlmIChwcml2LT5z
ZXR0aW5ncy5yZXNpemFibGVfdGV4dGFyZWFzICE9IGVuYWJsZSkgewpAQCAtMjAzMCwxNiArMjAz
MCwxNiBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19yZXNpemFibGVfdGV4dGFyZWFzX3Nl
dChFdmFzX09iamVjdCogbywgRWluYV9Cb29sIGVuYQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9
CiAKLUVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX3ByaXZhdGVfYnJvd3NpbmdfZ2V0KGNvbnN0
IEV2YXNfT2JqZWN0KiBvKQorRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfcHJpdmF0ZV9icm93
c2luZ19nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRf
T1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICByZXR1cm4gcHJpdi0+c2V0dGlu
Z3MucHJpdmF0ZV9icm93c2luZzsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfcHJp
dmF0ZV9icm93c2luZ19zZXQoRXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCBlbmFibGUpCitFaW5h
X0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19wcml2YXRlX2Jyb3dzaW5nX3NldChFdmFzX09iamVjdCog
ZXdrVmlldywgRWluYV9Cb29sIGVuYWJsZSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVU
VVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3
a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4o
c2QsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIGVuYWJsZSA9ICEhZW5hYmxlOwogICAgIGlmIChw
cml2LT5zZXR0aW5ncy5wcml2YXRlX2Jyb3dzaW5nICE9IGVuYWJsZSkgewpAQCAtMjA0OSwxNiAr
MjA0OSwxNiBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19wcml2YXRlX2Jyb3dzaW5nX3Nl
dChFdmFzX09iamVjdCogbywgRWluYV9Cb29sIGVuYWJsZQogICAgIHJldHVybiBFSU5BX1RSVUU7
CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX29mZmxpbmVfYXBwX2NhY2hlX2dldChj
b25zdCBFdmFzX09iamVjdCogbykKK0VpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX29mZmxpbmVf
YXBwX2NhY2hlX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklF
V19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9H
RVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFV0tfVklFV19QUklW
X0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIHJldHVybiBwcml2LT5z
ZXR0aW5ncy5vZmZsaW5lX2FwcF9jYWNoZTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3NldHRp
bmdfb2ZmbGluZV9hcHBfY2FjaGVfc2V0KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wgZW5hYmxl
KQorRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfb2ZmbGluZV9hcHBfY2FjaGVfc2V0KEV2YXNf
T2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wgZW5hYmxlKQogewotICAgIEVXS19WSUVXX1NEX0dF
VF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9S
RVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09S
X1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgZW5hYmxlID0gISFlbmFibGU7CiAg
ICAgaWYgKHByaXYtPnNldHRpbmdzLm9mZmxpbmVfYXBwX2NhY2hlICE9IGVuYWJsZSkgewpAQCAt
MjA2OSwxNiArMjA2OSwxNiBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19vZmZsaW5lX2Fw
cF9jYWNoZV9zZXQoRXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCBlbmFibAogfQogCiAKLUVpbmFf
Qm9vbCBld2tfdmlld19zZXR0aW5nX2NhcmV0X2Jyb3dzaW5nX2dldChjb25zdCBFdmFzX09iamVj
dCogbykKK0VpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2NhcmV0X2Jyb3dzaW5nX2dldChjb25z
dCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJO
KG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1Zp
ZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2Qs
IHByaXYsIEVJTkFfRkFMU0UpOwogICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5jYXJldF9icm93
c2luZzsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfY2FyZXRfYnJvd3Npbmdfc2V0
KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wgZW5hYmxlKQorRWluYV9Cb29sIGV3a192aWV3X3Nl
dHRpbmdfY2FyZXRfYnJvd3Npbmdfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wg
ZW5hYmxlKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFM
U0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFM
U0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxT
RSk7CiAgICAgZW5hYmxlID0gISFlbmFibGU7CiAgICAgaWYgKHByaXYtPnNldHRpbmdzLmNhcmV0
X2Jyb3dzaW5nICE9IGVuYWJsZSkgewpAQCAtMjA4OCwxMSArMjA4OCwxMSBAQCBFaW5hX0Jvb2wg
ZXdrX3ZpZXdfc2V0dGluZ19jYXJldF9icm93c2luZ19zZXQoRXZhc19PYmplY3QqIG8sIEVpbmFf
Qm9vbCBlbmFibGUpCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotY29uc3QgY2hhciogZXdr
X3ZpZXdfc2V0dGluZ19lbmNvZGluZ19jdXN0b21fZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQor
Y29uc3QgY2hhciogZXdrX3ZpZXdfc2V0dGluZ19lbmNvZGluZ19jdXN0b21fZ2V0KGNvbnN0IEV2
YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywg
c2QsIDApOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIDApOwog
ICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgMCk7Ci0gICAgRXZhc19P
YmplY3QqIG1haW5fZnJhbWUgPSBld2tfdmlld19mcmFtZV9tYWluX2dldChvKTsKKyAgICBFdmFz
X09iamVjdCogbWFpbl9mcmFtZSA9IGV3a192aWV3X2ZyYW1lX21haW5fZ2V0KGV3a1ZpZXcpOwog
ICAgIFdlYkNvcmU6OkZyYW1lKiBjb3JlX2ZyYW1lID0gZXdrX2ZyYW1lX2NvcmVfZ2V0KG1haW5f
ZnJhbWUpOwogCiAgICAgU3RyaW5nIG92ZXJyaWRlRW5jb2RpbmcgPSBjb3JlX2ZyYW1lLT5sb2Fk
ZXIoKS0+ZG9jdW1lbnRMb2FkZXIoKS0+b3ZlcnJpZGVFbmNvZGluZygpOwpAQCAtMjEwNCwxMSAr
MjEwNCwxMSBAQCBjb25zdCBjaGFyKiBld2tfdmlld19zZXR0aW5nX2VuY29kaW5nX2N1c3RvbV9n
ZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCiAgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmVuY29k
aW5nX2N1c3RvbTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfZW5jb2RpbmdfY3Vz
dG9tX3NldChFdmFzX09iamVjdCogbywgY29uc3QgY2hhciogZW5jb2RpbmcpCitFaW5hX0Jvb2wg
ZXdrX3ZpZXdfc2V0dGluZ19lbmNvZGluZ19jdXN0b21fc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3
LCBjb25zdCBjaGFyKiBlbmNvZGluZykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJO
KG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1Zp
ZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2Qs
IHByaXYsIEVJTkFfRkFMU0UpOwotICAgIEV2YXNfT2JqZWN0KiBtYWluX2ZyYW1lID0gZXdrX3Zp
ZXdfZnJhbWVfbWFpbl9nZXQobyk7CisgICAgRXZhc19PYmplY3QqIG1haW5fZnJhbWUgPSBld2tf
dmlld19mcmFtZV9tYWluX2dldChld2tWaWV3KTsKICAgICBXZWJDb3JlOjpGcmFtZSogY29yZV9m
cmFtZSA9IGV3a19mcmFtZV9jb3JlX2dldChtYWluX2ZyYW1lKTsKICAgICBEQkcoIiVzIiwgZW5j
b2RpbmcpOwogICAgIGlmIChlaW5hX3N0cmluZ3NoYXJlX3JlcGxhY2UoJnByaXYtPnNldHRpbmdz
LmVuY29kaW5nX2N1c3RvbSwgZW5jb2RpbmcpKQpAQCAtMjExNiwyNSArMjExNiwyNSBAQCBFaW5h
X0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19lbmNvZGluZ19jdXN0b21fc2V0KEV2YXNfT2JqZWN0KiBv
LCBjb25zdCBjaGFyKiBlbmNvZAogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLWNvbnN0IGNo
YXIqIGV3a192aWV3X3NldHRpbmdfZW5jb2RpbmdfZGVmYXVsdF9nZXQoY29uc3QgRXZhc19PYmpl
Y3QqIG8pCitjb25zdCBjaGFyKiBld2tfdmlld19zZXR0aW5nX2VuY29kaW5nX2RlZmF1bHRfZ2V0
KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9S
RVRVUk4obywgc2QsIDApOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywg
c2QsIDApOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgMCk7CiAg
ICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmVuY29kaW5nX2RlZmF1bHQ7CiB9CiAKLUVpbmFfQm9v
bCBld2tfdmlld19zZXR0aW5nX2VuY29kaW5nX2RlZmF1bHRfc2V0KEV2YXNfT2JqZWN0KiBvLCBj
b25zdCBjaGFyKiBlbmNvZGluZykKK0VpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2VuY29kaW5n
X2RlZmF1bHRfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBjaGFyKiBlbmNvZGluZykK
IHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAg
ICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwogICAg
IGlmIChlaW5hX3N0cmluZ3NoYXJlX3JlcGxhY2UoJnByaXYtPnNldHRpbmdzLmVuY29kaW5nX2Rl
ZmF1bHQsIGVuY29kaW5nKSkKICAgICAgICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0RGVmYXVs
dFRleHRFbmNvZGluZ05hbWUoU3RyaW5nOjpmcm9tVVRGOChlbmNvZGluZykpOwogICAgIHJldHVy
biBFSU5BX1RSVUU7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2VuY29kaW5nX2Rl
dGVjdG9yX3NldChFdmFzX09iamVjdCogbywgRWluYV9Cb29sIGVuYWJsZSkKK0VpbmFfQm9vbCBl
d2tfdmlld19zZXR0aW5nX2VuY29kaW5nX2RldGVjdG9yX3NldChFdmFzX09iamVjdCogZXdrVmll
dywgRWluYV9Cb29sIGVuYWJsZSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8s
IHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcs
IHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHBy
aXYsIEVJTkFfRkFMU0UpOwogICAgIGVuYWJsZSA9ICEhZW5hYmxlOwogICAgIGlmIChwcml2LT5z
ZXR0aW5ncy5lbmNvZGluZ19kZXRlY3RvciAhPSBlbmFibGUpIHsKQEAgLTIxNDQsMjMgKzIxNDQs
MjMgQEAgRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfZW5jb2RpbmdfZGV0ZWN0b3Jfc2V0KEV2
YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wgZW5hYmwKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQog
Ci1FaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19lbmNvZGluZ19kZXRlY3Rvcl9nZXQoY29uc3Qg
RXZhc19PYmplY3QqIG8pCitFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19lbmNvZGluZ19kZXRl
Y3Rvcl9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRf
T1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICByZXR1cm4gcHJpdi0+c2V0dGlu
Z3MuZW5jb2RpbmdfZGV0ZWN0b3I7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2Vu
YWJsZV9kZXZlbG9wZXJfZXh0cmFzX2dldChjb25zdCBFdmFzX09iamVjdCogbykKK0VpbmFfQm9v
bCBld2tfdmlld19zZXR0aW5nX2VuYWJsZV9kZXZlbG9wZXJfZXh0cmFzX2dldChjb25zdCBFdmFz
X09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNk
LCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNk
LCBFSU5BX0ZBTFNFKTsKICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYs
IEVJTkFfRkFMU0UpOwogICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5lbmFibGVfZGV2ZWxvcGVy
X2V4dHJhczsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfZW5hYmxlX2RldmVsb3Bl
cl9leHRyYXNfc2V0KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wgZW5hYmxlKQorRWluYV9Cb29s
IGV3a192aWV3X3NldHRpbmdfZW5hYmxlX2RldmVsb3Blcl9leHRyYXNfc2V0KEV2YXNfT2JqZWN0
KiBld2tWaWV3LCBFaW5hX0Jvb2wgZW5hYmxlKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9S
RVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVS
TihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgZW5hYmxlID0gISFlbmFibGU7CiAgICAgaWYg
KHByaXYtPnNldHRpbmdzLmVuYWJsZV9kZXZlbG9wZXJfZXh0cmFzICE9IGVuYWJsZSkgewpAQCAt
MjE3MCwxNiArMjE3MCwxNiBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19lbmFibGVfZGV2
ZWxvcGVyX2V4dHJhc19zZXQoRXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbAogICAgIHJldHVybiBF
SU5BX1RSVUU7CiB9CiAKLWludCBld2tfdmlld19zZXR0aW5nX2ZvbnRfbWluaW11bV9zaXplX2dl
dChjb25zdCBFdmFzX09iamVjdCogbykKK2ludCBld2tfdmlld19zZXR0aW5nX2ZvbnRfbWluaW11
bV9zaXplX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19T
RF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAwKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJO
KGV3a1ZpZXcsIHNkLCAwKTsKICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHBy
aXYsIDApOwogICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5mb250X21pbmltdW1fc2l6ZTsKIH0K
IAotRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfZm9udF9taW5pbXVtX3NpemVfc2V0KEV2YXNf
T2JqZWN0KiBvLCBpbnQgc2l6ZSkKK0VpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2ZvbnRfbWlu
aW11bV9zaXplX3NldChFdmFzX09iamVjdCogZXdrVmlldywgaW50IHNpemUpCiB7Ci0gICAgRVdL
X1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJRVdf
UFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBpZiAocHJpdi0+
c2V0dGluZ3MuZm9udF9taW5pbXVtX3NpemUgIT0gc2l6ZSkgewogICAgICAgICBwcml2LT5wYWdl
X3NldHRpbmdzLT5zZXRNaW5pbXVtRm9udFNpemUoc2l6ZSk7CkBAIC0yMTg4LDE2ICsyMTg4LDE2
IEBAIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2ZvbnRfbWluaW11bV9zaXplX3NldChFdmFz
X09iamVjdCogbywgaW50IHNpemUpCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotaW50IGV3
a192aWV3X3NldHRpbmdfZm9udF9taW5pbXVtX2xvZ2ljYWxfc2l6ZV9nZXQoY29uc3QgRXZhc19P
YmplY3QqIG8pCitpbnQgZXdrX3ZpZXdfc2V0dGluZ19mb250X21pbmltdW1fbG9naWNhbF9zaXpl
X2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRf
T1JfUkVUVVJOKG8sIHNkLCAwKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1Zp
ZXcsIHNkLCAwKTsKICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIDAp
OwogICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5mb250X21pbmltdW1fbG9naWNhbF9zaXplOwog
fQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19mb250X21pbmltdW1fbG9naWNhbF9zaXpl
X3NldChFdmFzX09iamVjdCogbywgaW50IHNpemUpCitFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGlu
Z19mb250X21pbmltdW1fbG9naWNhbF9zaXplX3NldChFdmFzX09iamVjdCogZXdrVmlldywgaW50
IHNpemUpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxT
RSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxT
RSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNF
KTsKICAgICBpZiAocHJpdi0+c2V0dGluZ3MuZm9udF9taW5pbXVtX2xvZ2ljYWxfc2l6ZSAhPSBz
aXplKSB7CiAgICAgICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNldE1pbmltdW1Mb2dpY2FsRm9u
dFNpemUoc2l6ZSk7CkBAIC0yMjA2LDE2ICsyMjA2LDE2IEBAIEVpbmFfQm9vbCBld2tfdmlld19z
ZXR0aW5nX2ZvbnRfbWluaW11bV9sb2dpY2FsX3NpemVfc2V0KEV2YXNfT2JqZWN0KiBvLCBpbnQg
c2l6CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotaW50IGV3a192aWV3X3NldHRpbmdfZm9u
dF9kZWZhdWx0X3NpemVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQoraW50IGV3a192aWV3X3Nl
dHRpbmdfZm9udF9kZWZhdWx0X3NpemVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQog
ewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIDApOworICAgIEVXS19WSUVX
X1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIDApOwogICAgIEVXS19WSUVXX1BSSVZfR0VU
X09SX1JFVFVSTihzZCwgcHJpdiwgMCk7CiAgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmZvbnRf
ZGVmYXVsdF9zaXplOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19mb250X2RlZmF1
bHRfc2l6ZV9zZXQoRXZhc19PYmplY3QqIG8sIGludCBzaXplKQorRWluYV9Cb29sIGV3a192aWV3
X3NldHRpbmdfZm9udF9kZWZhdWx0X3NpemVfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBpbnQg
c2l6ZSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNF
KTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNF
KTsKICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0Up
OwogICAgIGlmIChwcml2LT5zZXR0aW5ncy5mb250X2RlZmF1bHRfc2l6ZSAhPSBzaXplKSB7CiAg
ICAgICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNldERlZmF1bHRGb250U2l6ZShzaXplKTsKQEAg
LTIyMjQsMTYgKzIyMjQsMTYgQEAgRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfZm9udF9kZWZh
dWx0X3NpemVfc2V0KEV2YXNfT2JqZWN0KiBvLCBpbnQgc2l6ZSkKICAgICByZXR1cm4gRUlOQV9U
UlVFOwogfQogCi1pbnQgZXdrX3ZpZXdfc2V0dGluZ19mb250X21vbm9zcGFjZV9zaXplX2dldChj
b25zdCBFdmFzX09iamVjdCogbykKK2ludCBld2tfdmlld19zZXR0aW5nX2ZvbnRfbW9ub3NwYWNl
X3NpemVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NE
X0dFVF9PUl9SRVRVUk4obywgc2QsIDApOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrVmlldywgc2QsIDApOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJp
diwgMCk7CiAgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmZvbnRfbW9ub3NwYWNlX3NpemU7CiB9
CiAKLUVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2ZvbnRfbW9ub3NwYWNlX3NpemVfc2V0KEV2
YXNfT2JqZWN0KiBvLCBpbnQgc2l6ZSkKK0VpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2ZvbnRf
bW9ub3NwYWNlX3NpemVfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBpbnQgc2l6ZSkKIHsKLSAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tf
VklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFV0tf
VklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIGlmIChw
cml2LT5zZXR0aW5ncy5mb250X21vbm9zcGFjZV9zaXplICE9IHNpemUpIHsKICAgICAgICAgcHJp
di0+cGFnZV9zZXR0aW5ncy0+c2V0RGVmYXVsdEZpeGVkRm9udFNpemUoc2l6ZSk7CkBAIC0yMjQy
LDEyICsyMjQyLDEyIEBAIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2ZvbnRfbW9ub3NwYWNl
X3NpemVfc2V0KEV2YXNfT2JqZWN0KiBvLCBpbnQgc2l6ZSkKICAgICByZXR1cm4gRUlOQV9UUlVF
OwogfQogCi1jb25zdCBjaGFyKiBld2tfdmlld19mb250X2ZhbWlseV9uYW1lX2dldChjb25zdCBF
dmFzX09iamVjdCogbywgRXdrX0ZvbnRfRmFtaWx5IGZvbnRfZmFtaWx5KQorY29uc3QgY2hhciog
ZXdrX3ZpZXdfZm9udF9mYW1pbHlfbmFtZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcs
IEV3a19Gb250X0ZhbWlseSBmb250RmFtaWx5KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9S
RVRVUk4obywgc2QsIDApOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywg
c2QsIDApOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgMCk7CiAK
LSAgICBzd2l0Y2ggKGZvbnRfZmFtaWx5KSB7CisgICAgc3dpdGNoIChmb250RmFtaWx5KSB7CiAg
ICAgY2FzZSBFV0tfRk9OVF9GQU1JTFlfU1RBTkRBUkQ6CiAgICAgICAgIHJldHVybiBwcml2LT5z
ZXR0aW5ncy5mb250X3N0YW5kYXJkOwogICAgIGNhc2UgRVdLX0ZPTlRfRkFNSUxZX0NVUlNJVkU6
CkBAIC0yMjY0LDEyICsyMjY0LDEyIEBAIGNvbnN0IGNoYXIqIGV3a192aWV3X2ZvbnRfZmFtaWx5
X25hbWVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvLCBFd2tfRm9udF9GYW1pbHkKICAgICByZXR1
cm4gMDsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X2ZvbnRfZmFtaWx5X25hbWVfc2V0KEV2YXNf
T2JqZWN0KiBvLCBFd2tfRm9udF9GYW1pbHkgZm9udF9mYW1pbHksIGNvbnN0IGNoYXIqIG5hbWUp
CitFaW5hX0Jvb2wgZXdrX3ZpZXdfZm9udF9mYW1pbHlfbmFtZV9zZXQoRXZhc19PYmplY3QqIGV3
a1ZpZXcsIEV3a19Gb250X0ZhbWlseSBmb250RmFtaWx5LCBjb25zdCBjaGFyKiBuYW1lKQogewot
ICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVX
S19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CiAKLSAgICBz
d2l0Y2ggKGZvbnRfZmFtaWx5KSB7CisgICAgc3dpdGNoIChmb250RmFtaWx5KSB7CiAgICAgY2Fz
ZSBFV0tfRk9OVF9GQU1JTFlfU1RBTkRBUkQ6CiAgICAgICAgIGlmIChlaW5hX3N0cmluZ3NoYXJl
X3JlcGxhY2UoJnByaXYtPnNldHRpbmdzLmZvbnRfc3RhbmRhcmQsIG5hbWUpKQogICAgICAgICAg
ICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0U3RhbmRhcmRGb250RmFtaWx5KEF0b21pY1N0cmlu
Zzo6ZnJvbVVURjgobmFtZSkpOwpAQCAtMjMwMSwxNiArMjMwMSwxNiBAQCBFaW5hX0Jvb2wgZXdr
X3ZpZXdfZm9udF9mYW1pbHlfbmFtZV9zZXQoRXZhc19PYmplY3QqIG8sIEV3a19Gb250X0ZhbWls
eSBmb250X2ZhbQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmll
d19zZXR0aW5nX3NwYXRpYWxfbmF2aWdhdGlvbl9nZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCitF
aW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19zcGF0aWFsX25hdmlnYXRpb25fZ2V0KGNvbnN0IEV2
YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywg
c2QsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywg
c2QsIEVJTkFfRkFMU0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJp
diwgRUlOQV9GQUxTRSk7CiAgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLnNwYXRpYWxfbmF2aWdh
dGlvbjsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfc3BhdGlhbF9uYXZpZ2F0aW9u
X3NldChFdmFzX09iamVjdCogbywgRWluYV9Cb29sIGVuYWJsZSkKK0VpbmFfQm9vbCBld2tfdmll
d19zZXR0aW5nX3NwYXRpYWxfbmF2aWdhdGlvbl9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVp
bmFfQm9vbCBlbmFibGUpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwg
RUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwg
RUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBF
SU5BX0ZBTFNFKTsKICAgICBlbmFibGUgPSAhIWVuYWJsZTsKICAgICBpZiAocHJpdi0+c2V0dGlu
Z3Muc3BhdGlhbF9uYXZpZ2F0aW9uICE9IGVuYWJsZSkgewpAQCAtMjMyMCwxNiArMjMyMCwxNiBA
QCBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19zcGF0aWFsX25hdmlnYXRpb25fc2V0KEV2YXNf
T2JqZWN0KiBvLCBFaW5hX0Jvb2wgZW5hYgogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLUVp
bmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2xvY2FsX3N0b3JhZ2VfZ2V0KGNvbnN0IEV2YXNfT2Jq
ZWN0KiBvKQorRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfbG9jYWxfc3RvcmFnZV9nZXQoY29u
c3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
TihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tW
aWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNk
LCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MubG9jYWxfc3Rv
cmFnZTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfbG9jYWxfc3RvcmFnZV9zZXQo
RXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCBlbmFibGUpCitFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0
dGluZ19sb2NhbF9zdG9yYWdlX3NldChFdmFzX09iamVjdCogZXdrVmlldywgRWluYV9Cb29sIGVu
YWJsZSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNF
KTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNF
KTsKICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0Up
OwogICAgIGVuYWJsZSA9ICEhZW5hYmxlOwogICAgIGlmIChwcml2LT5zZXR0aW5ncy5sb2NhbF9z
dG9yYWdlICE9IGVuYWJsZSkgewpAQCAtMjMzOSwxNiArMjMzOSwxNiBAQCBFaW5hX0Jvb2wgZXdr
X3ZpZXdfc2V0dGluZ19sb2NhbF9zdG9yYWdlX3NldChFdmFzX09iamVjdCogbywgRWluYV9Cb29s
IGVuYWJsZSkKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdf
c2V0dGluZ19wYWdlX2NhY2hlX2dldChjb25zdCBFdmFzX09iamVjdCogbykKK0VpbmFfQm9vbCBl
d2tfdmlld19zZXR0aW5nX3BhZ2VfY2FjaGVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3
KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOwor
ICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwog
ICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CiAg
ICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLnBhZ2VfY2FjaGU7CiB9CiAKLUVpbmFfQm9vbCBld2tf
dmlld19zZXR0aW5nX3BhZ2VfY2FjaGVfc2V0KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wgZW5h
YmxlKQorRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfcGFnZV9jYWNoZV9zZXQoRXZhc19PYmpl
Y3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCBlbmFibGUpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
Tihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVU
VVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBlbmFibGUgPSAhIWVuYWJsZTsKICAgICBp
ZiAocHJpdi0+c2V0dGluZ3MucGFnZV9jYWNoZSAhPSBlbmFibGUpIHsKQEAgLTIzNTgsMjUgKzIz
NTgsMjUgQEAgRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfcGFnZV9jYWNoZV9zZXQoRXZhc19P
YmplY3QqIG8sIEVpbmFfQm9vbCBlbmFibGUpCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAot
Y29uc3QgY2hhciogZXdrX3ZpZXdfc2V0dGluZ19sb2NhbF9zdG9yYWdlX2RhdGFiYXNlX3BhdGhf
Z2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQorY29uc3QgY2hhciogZXdrX3ZpZXdfc2V0dGluZ19s
b2NhbF9zdG9yYWdlX2RhdGFiYXNlX3BhdGhfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3
KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIDApOworICAgIEVXS19W
SUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIDApOwogICAgIEVXS19WSUVXX1BSSVZf
R0VUX09SX1JFVFVSTihzZCwgcHJpdiwgMCk7CiAgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmxv
Y2FsX3N0b3JhZ2VfZGF0YWJhc2VfcGF0aDsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3NldHRp
bmdfbG9jYWxfc3RvcmFnZV9kYXRhYmFzZV9wYXRoX3NldChFdmFzX09iamVjdCogbywgY29uc3Qg
Y2hhciogcGF0aCkKK0VpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2xvY2FsX3N0b3JhZ2VfZGF0
YWJhc2VfcGF0aF9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGNvbnN0IGNoYXIqIHBhdGgpCiB7
Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAg
RVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAg
RVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBp
ZiAoZWluYV9zdHJpbmdzaGFyZV9yZXBsYWNlKCZwcml2LT5zZXR0aW5ncy5sb2NhbF9zdG9yYWdl
X2RhdGFiYXNlX3BhdGgsIHBhdGgpKQogICAgICAgICBwcml2LT5wYWdlX3NldHRpbmdzLT5zZXRM
b2NhbFN0b3JhZ2VEYXRhYmFzZVBhdGgoU3RyaW5nOjpmcm9tVVRGOChwYXRoKSk7CiAgICAgcmV0
dXJuIEVJTkFfVFJVRTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfbWluaW11bV90
aW1lcl9pbnRlcnZhbF9zZXQoRXZhc19PYmplY3QqIG8sIGRvdWJsZSBpbnRlcnZhbCkKK0VpbmFf
Qm9vbCBld2tfdmlld19zZXR0aW5nX21pbmltdW1fdGltZXJfaW50ZXJ2YWxfc2V0KEV2YXNfT2Jq
ZWN0KiBld2tWaWV3LCBkb3VibGUgaW50ZXJ2YWwpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
Tihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVU
VVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBpZiAoZmFicyhwcml2LT5zZXR0aW5ncy5k
b21fdGltZXJfaW50ZXJ2YWwgLSBpbnRlcnZhbCkgPj0gc3RkOjpudW1lcmljX2xpbWl0czxkb3Vi
bGU+OjplcHNpbG9uKCkpIHsKICAgICAgICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0TWluRE9N
VGltZXJJbnRlcnZhbChpbnRlcnZhbCk7CkBAIC0yMzg1LDE2ICsyMzg1LDE2IEBAIEVpbmFfQm9v
bCBld2tfdmlld19zZXR0aW5nX21pbmltdW1fdGltZXJfaW50ZXJ2YWxfc2V0KEV2YXNfT2JqZWN0
KiBvLCBkb3VibGUgaW50CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotZG91YmxlIGV3a192
aWV3X3NldHRpbmdfbWluaW11bV90aW1lcl9pbnRlcnZhbF9nZXQoY29uc3QgRXZhc19PYmplY3Qq
IG8pCitkb3VibGUgZXdrX3ZpZXdfc2V0dGluZ19taW5pbXVtX3RpbWVyX2ludGVydmFsX2dldChj
b25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVU
VVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3
a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4o
c2QsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5kb21fdGlt
ZXJfaW50ZXJ2YWw7CiB9CiAKLUV3a19WaWV3X1NtYXJ0X0RhdGEqIGV3a192aWV3X3NtYXJ0X2Rh
dGFfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQorRXdrX1ZpZXdfU21hcnRfRGF0YSogZXdrX3Zp
ZXdfc21hcnRfZGF0YV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdL
X1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgMCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihld2tWaWV3LCBzZCwgMCk7CiAgICAgcmV0dXJuIHNkOwogfQogCkBAIC0yNDY2LDEw
ICsyNDY2LDEwIEBAIGNvbnN0IEV3a19TY3JvbGxfUmVxdWVzdCogZXdrX3ZpZXdfc2Nyb2xsX3Jl
cXVlc3RzX2dldChjb25zdCBFd2tfVmlld19Qcml2YXRlX0RhCiAgKiBAbm90ZSB0aGlzIGlzIG5v
dCBmb3IgZ2VuZXJhbCB1c2UgYnV0IGp1c3QgZm9yIHN1YmNsYXNzZXMgdGhhdCB3YW50CiAgKiAg
ICAgICB0byBkZWZpbmUgdGhlaXIgb3duIGJhY2tpbmcgc3RvcmUuCiAgKi8KLXZvaWQgZXdrX3Zp
ZXdfcmVwYWludF9hZGQoRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKiBwcml2LCBFdmFzX0Nvb3JkIHgs
IEV2YXNfQ29vcmQgeSwgRXZhc19Db29yZCB3LCBFdmFzX0Nvb3JkIGgpCit2b2lkIGV3a192aWV3
X3JlcGFpbnRfYWRkKEV3a19WaWV3X1ByaXZhdGVfRGF0YSogcHJpdiwgRXZhc19Db29yZCB4LCBF
dmFzX0Nvb3JkIHksIEV2YXNfQ29vcmQgd2lkdGgsIEV2YXNfQ29vcmQgaGVpZ2h0KQogewogICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHByaXYpOwotICAgIF9ld2tfdmlld19yZXBhaW50
X2FkZChwcml2LCB4LCB5LCB3LCBoKTsKKyAgICBfZXdrX3ZpZXdfcmVwYWludF9hZGQocHJpdiwg
eCwgeSwgd2lkdGgsIGhlaWdodCk7CiB9CiAKIC8qKgpAQCAtMjQ5MiwxMSArMjQ5MiwxMSBAQCB2
b2lkIGV3a192aWV3X2xheW91dF9pZl9uZWVkZWRfcmVjdXJzaXZlKEV3a19WaWV3X1ByaXZhdGVf
RGF0YSogcHJpdikKICAgICB2LT51cGRhdGVMYXlvdXRBbmRTdHlsZUlmTmVlZGVkUmVjdXJzaXZl
KCk7CiB9CiAKLXZvaWQgZXdrX3ZpZXdfc2Nyb2xsc19wcm9jZXNzKEV3a19WaWV3X1NtYXJ0X0Rh
dGEqIHNkKQordm9pZCBld2tfdmlld19zY3JvbGxzX3Byb2Nlc3MoRXdrX1ZpZXdfU21hcnRfRGF0
YSogc21hcnREYXRhKQogewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkKTsKLSAg
ICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYpOwotICAgIGlmICghc2QtPmFw
aS0+c2Nyb2xsc19wcm9jZXNzKHNkKSkKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihz
bWFydERhdGEpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHBy
aXYpOworICAgIGlmICghc21hcnREYXRhLT5hcGktPnNjcm9sbHNfcHJvY2VzcyhzbWFydERhdGEp
KQogICAgICAgICBFUlIoImZhaWxlZCB0byBwcm9jZXNzIHNjcm9sbHMuIik7CiAgICAgX2V3a192
aWV3X3Njcm9sbHNfZmx1c2gocHJpdik7CiB9CkBAIC0yNTM1LDcyICsyNTM1LDcyIEBAIEV3a19W
aWV3X1BhaW50X0NvbnRleHQqIGV3a192aWV3X3BhaW50X2NvbnRleHRfbmV3KEV3a19WaWV3X1By
aXZhdGVfRGF0YSogcHJpdiwKICAgICByZXR1cm4gY3R4dDsKIH0KIAotdm9pZCBld2tfdmlld19w
YWludF9jb250ZXh0X2ZyZWUoRXdrX1ZpZXdfUGFpbnRfQ29udGV4dCogY3R4dCkKK3ZvaWQgZXdr
X3ZpZXdfcGFpbnRfY29udGV4dF9mcmVlKEV3a19WaWV3X1BhaW50X0NvbnRleHQqIGNvbnRleHQp
CiB7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oY3R4dCk7Ci0gICAgZGVsZXRlIGN0
eHQtPmdjOwotICAgIGNhaXJvX2Rlc3Ryb3koY3R4dC0+Y3IpOwotICAgIGZyZWUoY3R4dCk7Cisg
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oY29udGV4dCk7CisgICAgZGVsZXRlIGNvbnRl
eHQtPmdjOworICAgIGNhaXJvX2Rlc3Ryb3koY29udGV4dC0+Y3IpOworICAgIGZyZWUoY29udGV4
dCk7CiB9CiAKLXZvaWQgZXdrX3ZpZXdfcGFpbnRfY29udGV4dF9zYXZlKEV3a19WaWV3X1BhaW50
X0NvbnRleHQqIGN0eHQpCit2b2lkIGV3a192aWV3X3BhaW50X2NvbnRleHRfc2F2ZShFd2tfVmll
d19QYWludF9Db250ZXh0KiBjb250ZXh0KQogewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOKGN0eHQpOwotICAgIGNhaXJvX3NhdmUoY3R4dC0+Y3IpOwotICAgIGN0eHQtPmdjLT5zYXZl
KCk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oY29udGV4dCk7CisgICAgY2Fpcm9f
c2F2ZShjb250ZXh0LT5jcik7CisgICAgY29udGV4dC0+Z2MtPnNhdmUoKTsKIH0KIAotdm9pZCBl
d2tfdmlld19wYWludF9jb250ZXh0X3Jlc3RvcmUoRXdrX1ZpZXdfUGFpbnRfQ29udGV4dCogY3R4
dCkKK3ZvaWQgZXdrX3ZpZXdfcGFpbnRfY29udGV4dF9yZXN0b3JlKEV3a19WaWV3X1BhaW50X0Nv
bnRleHQqIGNvbnRleHQpCiB7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oY3R4dCk7
Ci0gICAgY3R4dC0+Z2MtPnJlc3RvcmUoKTsKLSAgICBjYWlyb19yZXN0b3JlKGN0eHQtPmNyKTsK
KyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihjb250ZXh0KTsKKyAgICBjb250ZXh0LT5n
Yy0+cmVzdG9yZSgpOworICAgIGNhaXJvX3Jlc3RvcmUoY29udGV4dC0+Y3IpOwogfQogCi12b2lk
IGV3a192aWV3X3BhaW50X2NvbnRleHRfY2xpcChFd2tfVmlld19QYWludF9Db250ZXh0KiBjdHh0
LCBjb25zdCBFaW5hX1JlY3RhbmdsZSogYXJlYSkKK3ZvaWQgZXdrX3ZpZXdfcGFpbnRfY29udGV4
dF9jbGlwKEV3a19WaWV3X1BhaW50X0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEVpbmFfUmVjdGFu
Z2xlKiBhcmVhKQogewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGN0eHQpOworICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGNvbnRleHQpOwogICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOKGFyZWEpOwotICAgIGN0eHQtPmdjLT5jbGlwKFdlYkNvcmU6OkludFJlY3Qo
YXJlYS0+eCwgYXJlYS0+eSwgYXJlYS0+dywgYXJlYS0+aCkpOworICAgIGNvbnRleHQtPmdjLT5j
bGlwKFdlYkNvcmU6OkludFJlY3QoYXJlYS0+eCwgYXJlYS0+eSwgYXJlYS0+dywgYXJlYS0+aCkp
OwogfQogCi12b2lkIGV3a192aWV3X3BhaW50X2NvbnRleHRfcGFpbnQoRXdrX1ZpZXdfUGFpbnRf
Q29udGV4dCogY3R4dCwgY29uc3QgRWluYV9SZWN0YW5nbGUqIGFyZWEpCit2b2lkIGV3a192aWV3
X3BhaW50X2NvbnRleHRfcGFpbnQoRXdrX1ZpZXdfUGFpbnRfQ29udGV4dCogY29udGV4dCwgY29u
c3QgRWluYV9SZWN0YW5nbGUqIGFyZWEpCiB7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk4oY3R4dCk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oY29udGV4dCk7CiAgICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oYXJlYSk7CiAKICAgICBXZWJDb3JlOjpJbnRSZWN0
IHJlY3QoYXJlYS0+eCwgYXJlYS0+eSwgYXJlYS0+dywgYXJlYS0+aCk7CiAKLSAgICBpZiAoY3R4
dC0+dmlldy0+aXNUcmFuc3BhcmVudCgpKQotICAgICAgICBjdHh0LT5nYy0+Y2xlYXJSZWN0KHJl
Y3QpOwotICAgIGN0eHQtPnZpZXctPnBhaW50KGN0eHQtPmdjLCByZWN0KTsKKyAgICBpZiAoY29u
dGV4dC0+dmlldy0+aXNUcmFuc3BhcmVudCgpKQorICAgICAgICBjb250ZXh0LT5nYy0+Y2xlYXJS
ZWN0KHJlY3QpOworICAgIGNvbnRleHQtPnZpZXctPnBhaW50KGNvbnRleHQtPmdjLCByZWN0KTsK
IH0KIAotdm9pZCBld2tfdmlld19wYWludF9jb250ZXh0X3BhaW50X2NvbnRlbnRzKEV3a19WaWV3
X1BhaW50X0NvbnRleHQqIGN0eHQsIGNvbnN0IEVpbmFfUmVjdGFuZ2xlKiBhcmVhKQordm9pZCBl
d2tfdmlld19wYWludF9jb250ZXh0X3BhaW50X2NvbnRlbnRzKEV3a19WaWV3X1BhaW50X0NvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IEVpbmFfUmVjdGFuZ2xlKiBhcmVhKQogewotICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOKGN0eHQpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJO
KGNvbnRleHQpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGFyZWEpOwogCiAgICAg
V2ViQ29yZTo6SW50UmVjdCByZWN0KGFyZWEtPngsIGFyZWEtPnksIGFyZWEtPncsIGFyZWEtPmgp
OwogCi0gICAgaWYgKGN0eHQtPnZpZXctPmlzVHJhbnNwYXJlbnQoKSkKLSAgICAgICAgY3R4dC0+
Z2MtPmNsZWFyUmVjdChyZWN0KTsKKyAgICBpZiAoY29udGV4dC0+dmlldy0+aXNUcmFuc3BhcmVu
dCgpKQorICAgICAgICBjb250ZXh0LT5nYy0+Y2xlYXJSZWN0KHJlY3QpOwogCi0gICAgY3R4dC0+
dmlldy0+cGFpbnRDb250ZW50cyhjdHh0LT5nYywgcmVjdCk7CisgICAgY29udGV4dC0+dmlldy0+
cGFpbnRDb250ZW50cyhjb250ZXh0LT5nYywgcmVjdCk7CiB9CiAKLXZvaWQgZXdrX3ZpZXdfcGFp
bnRfY29udGV4dF9zY2FsZShFd2tfVmlld19QYWludF9Db250ZXh0KiBjdHh0LCBmbG9hdCBzY2Fs
ZV94LCBmbG9hdCBzY2FsZV95KQordm9pZCBld2tfdmlld19wYWludF9jb250ZXh0X3NjYWxlKEV3
a19WaWV3X1BhaW50X0NvbnRleHQqIGNvbnRleHQsIGZsb2F0IHNjYWxlWCwgZmxvYXQgc2NhbGVZ
KQogewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGN0eHQpOworICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOKGNvbnRleHQpOwogCi0gICAgY3R4dC0+Z2MtPnNjYWxlKFdlYkNv
cmU6OkZsb2F0U2l6ZShzY2FsZV94LCBzY2FsZV95KSk7CisgICAgY29udGV4dC0+Z2MtPnNjYWxl
KFdlYkNvcmU6OkZsb2F0U2l6ZShzY2FsZVgsIHNjYWxlWSkpOwogfQogCi12b2lkIGV3a192aWV3
X3BhaW50X2NvbnRleHRfdHJhbnNsYXRlKEV3a19WaWV3X1BhaW50X0NvbnRleHQqIGN0eHQsIGZs
b2F0IHgsIGZsb2F0IHkpCit2b2lkIGV3a192aWV3X3BhaW50X2NvbnRleHRfdHJhbnNsYXRlKEV3
a19WaWV3X1BhaW50X0NvbnRleHQqIGNvbnRleHQsIGZsb2F0IHgsIGZsb2F0IHkpCiB7Ci0gICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oY3R4dCk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk4oY29udGV4dCk7CiAKLSAgICBjdHh0LT5nYy0+dHJhbnNsYXRlKHgsIHkpOworICAg
IGNvbnRleHQtPmdjLT50cmFuc2xhdGUoeCwgeSk7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19w
YWludChFd2tfVmlld19Qcml2YXRlX0RhdGEqIHByaXYsIGNhaXJvX3QqIGNyLCBjb25zdCBFaW5h
X1JlY3RhbmdsZSogYXJlYSkKQEAgLTI2NTksMTAgKzI2NTksMTAgQEAgRWluYV9Cb29sIGV3a192
aWV3X3BhaW50X2NvbnRlbnRzKEV3a19WaWV3X1ByaXZhdGVfRGF0YSogcHJpdiwgY2Fpcm9fdCog
Y3IsIGNvbnMKICAqCiAgKiBFbWl0cyBzaWduYWw6ICJyZWFkeSIgd2l0aCBubyBwYXJhbWV0ZXJz
LgogICovCi12b2lkIGV3a192aWV3X3JlYWR5KEV2YXNfT2JqZWN0KiBvKQordm9pZCBld2tfdmll
d19yZWFkeShFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBEQkcoIm89JXAiLCBvKTsKLSAg
ICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKG8sICJyZWFkeSIsIDApOworICAgIERC
RygiZXdrVmlldz0lcCIsIGV3a1ZpZXcpOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNr
X2NhbGwoZXdrVmlldywgInJlYWR5IiwgMCk7CiB9CiAKIC8qKgpAQCAtMjY3Myw5ICsyNjczLDkg
QEAgdm9pZCBld2tfdmlld19yZWFkeShFdmFzX09iamVjdCogbykKICAqIEVtaXRzIHNpZ25hbDog
ImlucHV0bWV0aG9kLGNoYW5nZWQiIHdpdGggYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBp
dCdzCiAgKiBlbmFibGVkIG9yIG5vdC4KICAqLwotdm9pZCBld2tfdmlld19pbnB1dF9tZXRob2Rf
c3RhdGVfc2V0KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wgYWN0aXZlKQordm9pZCBld2tfdmll
d19pbnB1dF9tZXRob2Rfc3RhdGVfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wg
YWN0aXZlKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QpOworICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QpOwogICAgIEVXS19WSUVXX1BSSVZf
R0VUKHNkLCBwcml2KTsKICAgICBXZWJDb3JlOjpGcmFtZSogZm9jdXNlZEZyYW1lID0gcHJpdi0+
cGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpOwogCkBAIC0yNzAy
LDcgKzI3MDIsNyBAQCB2b2lkIGV3a192aWV3X2lucHV0X21ldGhvZF9zdGF0ZV9zZXQoRXZhc19P
YmplY3QqIG8sIEVpbmFfQm9vbCBhY3RpdmUpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBldmFz
X29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKG8sICJpbnB1dG1ldGhvZCxjaGFuZ2VkIiwgKHZv
aWQqKWFjdGl2ZSk7CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChld2tWaWV3
LCAiaW5wdXRtZXRob2QsY2hhbmdlZCIsICh2b2lkKilhY3RpdmUpOwogfQogCiAvKioKQEAgLTI3
MTEsMTAgKzI3MTEsMTAgQEAgdm9pZCBld2tfdmlld19pbnB1dF9tZXRob2Rfc3RhdGVfc2V0KEV2
YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wgYWN0aXZlKQogICoKICAqIEVtaXRzIHNpZ25hbDogInRp
dGxlLGNoYW5nZWQiIHdpdGggcG9pbnRlciB0byBuZXcgdGl0bGUgc3RyaW5nLgogICovCi12b2lk
IGV3a192aWV3X3RpdGxlX3NldChFdmFzX09iamVjdCogbywgY29uc3QgY2hhciogdGl0bGUpCit2
b2lkIGV3a192aWV3X3RpdGxlX3NldChFdmFzX09iamVjdCogZXdrVmlldywgY29uc3QgY2hhciog
dGl0bGUpCiB7Ci0gICAgREJHKCJvPSVwLCB0aXRsZT0lcyIsIG8sIHRpdGxlID8gdGl0bGUgOiAi
KG51bGwpIik7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChvLCAidGl0bGUs
Y2hhbmdlZCIsICh2b2lkKil0aXRsZSk7CisgICAgREJHKCJld2tWaWV3PSVwLCB0aXRsZT0lcyIs
IGV3a1ZpZXcsIHRpdGxlID8gdGl0bGUgOiAiKG51bGwpIik7CisgICAgZXZhc19vYmplY3Rfc21h
cnRfY2FsbGJhY2tfY2FsbChld2tWaWV3LCAidGl0bGUsY2hhbmdlZCIsICh2b2lkKil0aXRsZSk7
CiB9CiAKIC8qKgpAQCAtMjcyMywxMiArMjcyMywxMiBAQCB2b2lkIGV3a192aWV3X3RpdGxlX3Nl
dChFdmFzX09iamVjdCogbywgY29uc3QgY2hhciogdGl0bGUpCiAgKgogICogRW1pdHMgc2lnbmFs
OiAidXJpLGNoYW5nZWQiIHdpdGggcG9pbnRlciB0byB0aGUgbmV3IHVyaSBzdHJpbmcuCiAgKi8K
LXZvaWQgZXdrX3ZpZXdfdXJpX2NoYW5nZWQoRXZhc19PYmplY3QqIG8pCit2b2lkIGV3a192aWV3
X3VyaV9jaGFuZ2VkKEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dF
VF9PUl9SRVRVUk4obywgc2QpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmll
dywgc2QpOwogICAgIGNvbnN0IGNoYXIqIHVyaSA9IGV3a19mcmFtZV91cmlfZ2V0KHNkLT5tYWlu
X2ZyYW1lKTsKLSAgICBEQkcoIm89JXAsIHVyaT0lcyIsIG8sIHVyaSA/IHVyaSA6ICIobnVsbCki
KTsKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKG8sICJ1cmksY2hhbmdlZCIs
ICh2b2lkKil1cmkpOworICAgIERCRygiZXdrVmlldz0lcCwgdXJpPSVzIiwgZXdrVmlldywgdXJp
ID8gdXJpIDogIihudWxsKSIpOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwo
ZXdrVmlldywgInVyaSxjaGFuZ2VkIiwgKHZvaWQqKXVyaSk7CiB9CiAKIC8qKgpAQCAtMjc0MCw5
ICsyNzQwLDkgQEAgdm9pZCBld2tfdmlld191cmlfY2hhbmdlZChFdmFzX09iamVjdCogbykKICAq
CiAgKiBFbWl0cyBzaWduYWw6ICJsb2FkLGRvY3VtZW50LGZpbmlzaGVkIiB3aXRoIEBwIGZyYW1l
IGFzIHRoZSBwYXJhbWV0ZXIuCiAgKi8KLXZvaWQgZXdrX3ZpZXdfbG9hZF9kb2N1bWVudF9maW5p
c2hlZChFdmFzX09iamVjdCogbywgRXZhc19PYmplY3QqIGZyYW1lKQordm9pZCBld2tfdmlld19s
b2FkX2RvY3VtZW50X2ZpbmlzaGVkKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFdmFzX09iamVjdCog
ZnJhbWUpCiB7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChvLCAibG9hZCxk
b2N1bWVudCxmaW5pc2hlZCIsIGZyYW1lKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFj
a19jYWxsKGV3a1ZpZXcsICJsb2FkLGRvY3VtZW50LGZpbmlzaGVkIiwgZnJhbWUpOwogfQogCiAv
KioKQEAgLTI3NTMsMTAgKzI3NTMsMTAgQEAgdm9pZCBld2tfdmlld19sb2FkX2RvY3VtZW50X2Zp
bmlzaGVkKEV2YXNfT2JqZWN0KiBvLCBFdmFzX09iamVjdCogZnJhbWUpCiAgKgogICogRW1pdHMg
c2lnbmFsOiAibG9hZCxzdGFydGVkIiB3aXRoIG5vIHBhcmFtZXRlcnMuCiAgKi8KLXZvaWQgZXdr
X3ZpZXdfbG9hZF9zdGFydGVkKEV2YXNfT2JqZWN0KiBvKQordm9pZCBld2tfdmlld19sb2FkX3N0
YXJ0ZWQoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgREJHKCJvPSVwIiwgbyk7Ci0gICAg
ZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChvLCAibG9hZCxzdGFydGVkIiwgMCk7Cisg
ICAgREJHKCJld2tWaWV3PSVwIiwgZXdrVmlldyk7CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2Fs
bGJhY2tfY2FsbChld2tWaWV3LCAibG9hZCxzdGFydGVkIiwgMCk7CiB9CiAKIC8qKgpAQCAtMjc2
NiwxMCArMjc2NiwxMCBAQCB2b2lkIGV3a192aWV3X2xvYWRfc3RhcnRlZChFdmFzX09iamVjdCog
bykKICAqCiAgKiBFbWl0cyBzaWduYWw6ICJsb2FkLHN0YXJ0ZWQiIG9uIG1haW4gZnJhbWUgd2l0
aCBubyBwYXJhbWV0ZXJzLgogICovCi12b2lkIGV3a192aWV3X2ZyYW1lX21haW5fbG9hZF9zdGFy
dGVkKEV2YXNfT2JqZWN0KiBvKQordm9pZCBld2tfdmlld19mcmFtZV9tYWluX2xvYWRfc3RhcnRl
ZChFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBEQkcoIm89JXAiLCBvKTsKLSAgICBFdmFz
X09iamVjdCogZnJhbWUgPSBld2tfdmlld19mcmFtZV9tYWluX2dldChvKTsKKyAgICBEQkcoImV3
a1ZpZXc9JXAiLCBld2tWaWV3KTsKKyAgICBFdmFzX09iamVjdCogZnJhbWUgPSBld2tfdmlld19m
cmFtZV9tYWluX2dldChld2tWaWV3KTsKICAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19j
YWxsKGZyYW1lLCAibG9hZCxzdGFydGVkIiwgMCk7CiB9CiAKQEAgLTI3ODEsMTAgKzI3ODEsMTAg
QEAgdm9pZCBld2tfdmlld19mcmFtZV9tYWluX2xvYWRfc3RhcnRlZChFdmFzX09iamVjdCogbykK
ICAqCiAgKiBFbWl0cyBzaWduYWw6ICJsb2FkLHByb3Zpc2lvbmFsIiBvbiBWaWV3IHdpdGggbm8g
cGFyYW1ldGVycy4KICAqLwotdm9pZCBld2tfdmlld19sb2FkX3Byb3Zpc2lvbmFsKEV2YXNfT2Jq
ZWN0KiBvKQordm9pZCBld2tfdmlld19sb2FkX3Byb3Zpc2lvbmFsKEV2YXNfT2JqZWN0KiBld2tW
aWV3KQogewotICAgIERCRygibz0lcCIsIG8pOwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxi
YWNrX2NhbGwobywgImxvYWQscHJvdmlzaW9uYWwiLCAwKTsKKyAgICBEQkcoImV3a1ZpZXc9JXAi
LCBld2tWaWV3KTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKGV3a1ZpZXcs
ICJsb2FkLHByb3Zpc2lvbmFsIiwgMCk7CiB9CiAKIC8qKgpAQCAtMjc5NSwxMCArMjc5NSwxMCBA
QCB2b2lkIGV3a192aWV3X2xvYWRfcHJvdmlzaW9uYWwoRXZhc19PYmplY3QqIG8pCiAgKgogICog
RW1pdHMgc2lnbmFsOiAibG9hZCxuZXd3aW5kb3csc2hvdyIgb24gdmlldyB3aXRoIG5vIHBhcmFt
ZXRlcnMuCiAgKi8KLXZvaWQgZXdrX3ZpZXdfbG9hZF9zaG93KEV2YXNfT2JqZWN0KiBvKQordm9p
ZCBld2tfdmlld19sb2FkX3Nob3coRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgREJHKCJv
PSVwIiwgbyk7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChvLCAibG9hZCxu
ZXd3aW5kb3csc2hvdyIsIDApOworICAgIERCRygiZXdrVmlldz0lcCIsIGV3a1ZpZXcpOworICAg
IGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdrVmlldywgImxvYWQsbmV3d2luZG93
LHNob3ciLCAwKTsKIH0KIAogCkBAIC0yODA4LDEwICsyODA4LDEwIEBAIHZvaWQgZXdrX3ZpZXdf
bG9hZF9zaG93KEV2YXNfT2JqZWN0KiBvKQogICoKICAqIEBwYXJhbSBvIFZpZXcuCiAgKi8KLXZv
aWQgZXdrX3ZpZXdfZnJhbWVfbWFpbl9jbGVhcmVkKEV2YXNfT2JqZWN0KiBvKQordm9pZCBld2tf
dmlld19mcmFtZV9tYWluX2NsZWFyZWQoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgREJH
KCJvPSVwIiwgbyk7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCk7CisgICAg
REJHKCJld2tWaWV3PSVwIiwgZXdrVmlldyk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
Tihld2tWaWV3LCBzZCk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFwaS0+
Zmx1c2gpOwogICAgIHNkLT5hcGktPmZsdXNoKHNkKTsKIH0KQEAgLTI4MjQsMTAgKzI4MjQsMTAg
QEAgdm9pZCBld2tfdmlld19mcmFtZV9tYWluX2NsZWFyZWQoRXZhc19PYmplY3QqIG8pCiAgKgog
ICogRW1pdHMgc2lnbmFsOiAiaWNvbixyZWNlaXZlZCIgd2l0aCBubyBwYXJhbWV0ZXJzLgogICov
Ci12b2lkIGV3a192aWV3X2ZyYW1lX21haW5faWNvbl9yZWNlaXZlZChFdmFzX09iamVjdCogbykK
K3ZvaWQgZXdrX3ZpZXdfZnJhbWVfbWFpbl9pY29uX3JlY2VpdmVkKEV2YXNfT2JqZWN0KiBld2tW
aWV3KQogewotICAgIERCRygibz0lcCIsIG8pOwotICAgIEV2YXNfT2JqZWN0KiBmcmFtZSA9IGV3
a192aWV3X2ZyYW1lX21haW5fZ2V0KG8pOworICAgIERCRygiZXdrVmlldz0lcCIsIGV3a1ZpZXcp
OworICAgIEV2YXNfT2JqZWN0KiBmcmFtZSA9IGV3a192aWV3X2ZyYW1lX21haW5fZ2V0KGV3a1Zp
ZXcpOwogICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZnJhbWUsICJpY29uLHJl
Y2VpdmVkIiwgMCk7CiB9CiAKQEAgLTI4NDEsMTAgKzI4NDEsMTAgQEAgdm9pZCBld2tfdmlld19m
cmFtZV9tYWluX2ljb25fcmVjZWl2ZWQoRXZhc19PYmplY3QqIG8pCiAgKiBAbm90ZSB0aGVyZSBz
aG91bGQgbm90IGJlIGFueSBlcnJvciBzdHVmZiBoZXJlLCBidXQgdHJ5aW5nIHRvIGJlCiAgKiAg
ICAgICBjb21wYXRpYmxlIHdpdGggcHJldmlvdXMgV2ViS2l0LgogICovCi12b2lkIGV3a192aWV3
X2xvYWRfZmluaXNoZWQoRXZhc19PYmplY3QqIG8sIGNvbnN0IEV3a19GcmFtZV9Mb2FkX0Vycm9y
KiBlcnJvcikKK3ZvaWQgZXdrX3ZpZXdfbG9hZF9maW5pc2hlZChFdmFzX09iamVjdCogZXdrVmll
dywgY29uc3QgRXdrX0ZyYW1lX0xvYWRfRXJyb3IqIGVycm9yKQogewotICAgIERCRygibz0lcCwg
ZXJyb3I9JXAiLCBvLCBlcnJvcik7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2Fs
bChvLCAibG9hZCxmaW5pc2hlZCIsICh2b2lkKillcnJvcik7CisgICAgREJHKCJld2tWaWV3PSVw
LCBlcnJvcj0lcCIsIGV3a1ZpZXcsIGVycm9yKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxs
YmFja19jYWxsKGV3a1ZpZXcsICJsb2FkLGZpbmlzaGVkIiwgKHZvaWQqKWVycm9yKTsKIH0KIAog
LyoqCkBAIC0yODUzLDEwICsyODUzLDEwIEBAIHZvaWQgZXdrX3ZpZXdfbG9hZF9maW5pc2hlZChF
dmFzX09iamVjdCogbywgY29uc3QgRXdrX0ZyYW1lX0xvYWRfRXJyb3IqIGVycm9yKQogICoKICAq
IEVtaXRzIHNpZ25hbDogImxvYWQsZXJyb3IiIHdpdGggcG9pbnRlciB0byBFd2tfRnJhbWVfTG9h
ZF9FcnJvci4KICAqLwotdm9pZCBld2tfdmlld19sb2FkX2Vycm9yKEV2YXNfT2JqZWN0KiBvLCBj
b25zdCBFd2tfRnJhbWVfTG9hZF9FcnJvciogZXJyb3IpCit2b2lkIGV3a192aWV3X2xvYWRfZXJy
b3IoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGNvbnN0IEV3a19GcmFtZV9Mb2FkX0Vycm9yKiBlcnJv
cikKIHsKLSAgICBEQkcoIm89JXAsIGVycm9yPSVwIiwgbywgZXJyb3IpOwotICAgIGV2YXNfb2Jq
ZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwobywgImxvYWQsZXJyb3IiLCAodm9pZCopZXJyb3IpOwor
ICAgIERCRygiZXdrVmlldz0lcCwgZXJyb3I9JXAiLCBld2tWaWV3LCBlcnJvcik7CisgICAgZXZh
c19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChld2tWaWV3LCAibG9hZCxlcnJvciIsICh2b2lk
KillcnJvcik7CiB9CiAKIC8qKgpAQCAtMjg2NSwxNyArMjg2NSwxNyBAQCB2b2lkIGV3a192aWV3
X2xvYWRfZXJyb3IoRXZhc19PYmplY3QqIG8sIGNvbnN0IEV3a19GcmFtZV9Mb2FkX0Vycm9yKiBl
cnJvcikKICAqCiAgKiBFbWl0cyBzaWduYWw6ICJsb2FkLHByb2dyZXNzIiB3aXRoIHBvaW50ZXIg
dG8gYSBkb3VibGUgZnJvbSAwLjAgdG8gMS4wLgogICovCi12b2lkIGV3a192aWV3X2xvYWRfcHJv
Z3Jlc3NfY2hhbmdlZChFdmFzX09iamVjdCogbykKK3ZvaWQgZXdrX3ZpZXdfbG9hZF9wcm9ncmVz
c19jaGFuZ2VkKEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9P
Ul9SRVRVUk4obywgc2QpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywg
c2QpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdik7CiAKICAgICAv
LyBFdmFzX0Nvb3JkIHcsIGg7CiAgICAgZG91YmxlIHByb2dyZXNzID0gcHJpdi0+cGFnZS0+cHJv
Z3Jlc3MoKS0+ZXN0aW1hdGVkUHJvZ3Jlc3MoKTsKIAotICAgIERCRygibz0lcCAocD0lMC4zZiki
LCBvLCBwcm9ncmVzcyk7CisgICAgREJHKCJld2tWaWV3PSVwIChwPSUwLjNmKSIsIGV3a1ZpZXcs
IHByb2dyZXNzKTsKIAotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwobywgImxv
YWQscHJvZ3Jlc3MiLCAmcHJvZ3Jlc3MpOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNr
X2NhbGwoZXdrVmlldywgImxvYWQscHJvZ3Jlc3MiLCAmcHJvZ3Jlc3MpOwogfQogCiAvKioKQEAg
LTI4ODcsOSArMjg4Nyw5IEBAIHZvaWQgZXdrX3ZpZXdfbG9hZF9wcm9ncmVzc19jaGFuZ2VkKEV2
YXNfT2JqZWN0KiBvKQogICoKICAqIEVtaXRzIHNpZ25hbDogInJlc3RvcmUiIHdpdGggZnJhbWUu
CiAgKi8KLXZvaWQgZXdrX3ZpZXdfcmVzdG9yZV9zdGF0ZShFdmFzX09iamVjdCogbywgRXZhc19P
YmplY3QqIGZyYW1lKQordm9pZCBld2tfdmlld19yZXN0b3JlX3N0YXRlKEV2YXNfT2JqZWN0KiBl
d2tWaWV3LCBFdmFzX09iamVjdCogZnJhbWUpCiB7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2Fs
bGJhY2tfY2FsbChvLCAicmVzdG9yZSIsIGZyYW1lKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9j
YWxsYmFja19jYWxsKGV3a1ZpZXcsICJyZXN0b3JlIiwgZnJhbWUpOwogfQogCiAvKioKQEAgLTI5
MTMsMTIgKzI5MTMsMTIgQEAgdm9pZCBld2tfdmlld19yZXN0b3JlX3N0YXRlKEV2YXNfT2JqZWN0
KiBvLCBFdmFzX09iamVjdCogZnJhbWUpCiAgKgogICogQHNlZSBld2tfd2luZG93X2ZlYXR1cmVz
X3JlZigpLgogICovCi1FdmFzX09iamVjdCogZXdrX3ZpZXdfd2luZG93X2NyZWF0ZShFdmFzX09i
amVjdCogbywgRWluYV9Cb29sIGphdmFzY3JpcHQsIGNvbnN0IFdlYkNvcmU6OldpbmRvd0ZlYXR1
cmVzKiBjb3JlRmVhdHVyZXMpCitFdmFzX09iamVjdCogZXdrX3ZpZXdfd2luZG93X2NyZWF0ZShF
dmFzX09iamVjdCogZXdrVmlldywgRWluYV9Cb29sIGphdmFzY3JpcHQsIGNvbnN0IFdlYkNvcmU6
OldpbmRvd0ZlYXR1cmVzKiBjb3JlRmVhdHVyZXMpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihvLCBzZCwgMCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3
LCBzZCwgMCk7CiAKICAgICBpZiAoIXNkLT5hcGktPndpbmRvd19jcmVhdGUpCi0gICAgICAgIHJl
dHVybiBvOworICAgICAgICByZXR1cm4gZXdrVmlldzsKIAogICAgIEV3a19XaW5kb3dfRmVhdHVy
ZXMqIHdpbmRvd19mZWF0dXJlcyA9IGV3a193aW5kb3dfZmVhdHVyZXNfbmV3X2Zyb21fY29yZShj
b3JlRmVhdHVyZXMpOwogICAgIGlmICghd2luZG93X2ZlYXR1cmVzKQpAQCAtMjk0MSwxMSArMjk0
MSwxMSBAQCBFdmFzX09iamVjdCogZXdrX3ZpZXdfd2luZG93X2NyZWF0ZShFdmFzX09iamVjdCog
bywgRWluYV9Cb29sIGphdmFzY3JpcHQsIGNvbnN0CiAgKgogICogQHBhcmFtIG8gVmlldyB0byBi
ZSBjbG9zZWQuCiAgKi8KLXZvaWQgZXdrX3ZpZXdfd2luZG93X2Nsb3NlKEV2YXNfT2JqZWN0KiBv
KQordm9pZCBld2tfdmlld193aW5kb3dfY2xvc2UoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0g
ICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCk7CisgICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihld2tWaWV3LCBzZCk7CiAKLSAgICBld2tfdmlld19zdG9wKG8pOworICAgIGV3
a192aWV3X3N0b3AoZXdrVmlldyk7CiAgICAgaWYgKCFzZC0+YXBpLT53aW5kb3dfY2xvc2UpCiAg
ICAgICAgIHJldHVybjsKICAgICBzZC0+YXBpLT53aW5kb3dfY2xvc2Uoc2QpOwpAQCAtMjk1Nyw5
ICsyOTU3LDkgQEAgdm9pZCBld2tfdmlld193aW5kb3dfY2xvc2UoRXZhc19PYmplY3QqIG8pCiAg
KgogICogRW1pdHMgc2lnbmFsOiAibGluayxob3ZlcixpbiIKICAqLwotdm9pZCBld2tfdmlld19t
b3VzZV9saW5rX2hvdmVyX2luKEV2YXNfT2JqZWN0KiBvLCB2b2lkKiBkYXRhKQordm9pZCBld2tf
dmlld19tb3VzZV9saW5rX2hvdmVyX2luKEV2YXNfT2JqZWN0KiBld2tWaWV3LCB2b2lkKiBkYXRh
KQogewotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwobywgImxpbmssaG92ZXIs
aW4iLCBkYXRhKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKGV3a1ZpZXcs
ICJsaW5rLGhvdmVyLGluIiwgZGF0YSk7CiB9CiAKIC8qKgpAQCAtMjk2OCw5ICsyOTY4LDkgQEAg
dm9pZCBld2tfdmlld19tb3VzZV9saW5rX2hvdmVyX2luKEV2YXNfT2JqZWN0KiBvLCB2b2lkKiBk
YXRhKQogICoKICAqIEVtaXRzIHNpZ25hbDogImxpbmssaG92ZXIsb3V0IgogICovCi12b2lkIGV3
a192aWV3X21vdXNlX2xpbmtfaG92ZXJfb3V0KEV2YXNfT2JqZWN0KiBvKQordm9pZCBld2tfdmll
d19tb3VzZV9saW5rX2hvdmVyX291dChFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBldmFz
X29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKG8sICJsaW5rLGhvdmVyLG91dCIsIDApOworICAg
IGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdrVmlldywgImxpbmssaG92ZXIsb3V0
IiwgMCk7CiB9CiAKIC8qKgpAQCAtMjk3OSwxMCArMjk3OSwxMCBAQCB2b2lkIGV3a192aWV3X21v
dXNlX2xpbmtfaG92ZXJfb3V0KEV2YXNfT2JqZWN0KiBvKQogICoKICAqIEVtaXRzIHNpZ25hbDog
InRvb2xiYXJzLHZpc2libGUsc2V0IiB3aXRoIGEgcG9pbnRlciB0byBhIGJvb2xlYW4uCiAgKi8K
LXZvaWQgZXdrX3ZpZXdfdG9vbGJhcnNfdmlzaWJsZV9zZXQoRXZhc19PYmplY3QqIG8sIEVpbmFf
Qm9vbCB2aXNpYmxlKQordm9pZCBld2tfdmlld190b29sYmFyc192aXNpYmxlX3NldChFdmFzX09i
amVjdCogZXdrVmlldywgRWluYV9Cb29sIHZpc2libGUpCiB7Ci0gICAgREJHKCJvPSVwICh2aXNp
YmxlPSVkKSIsIG8sICEhdmlzaWJsZSk7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tf
Y2FsbChvLCAidG9vbGJhcnMsdmlzaWJsZSxzZXQiLCAmdmlzaWJsZSk7CisgICAgREJHKCJld2tW
aWV3PSVwICh2aXNpYmxlPSVkKSIsIGV3a1ZpZXcsICEhdmlzaWJsZSk7CisgICAgZXZhc19vYmpl
Y3Rfc21hcnRfY2FsbGJhY2tfY2FsbChld2tWaWV3LCAidG9vbGJhcnMsdmlzaWJsZSxzZXQiLCAm
dmlzaWJsZSk7CiB9CiAKIC8qKgpAQCAtMjk5NiwxMSArMjk5NiwxMSBAQCB2b2lkIGV3a192aWV3
X3Rvb2xiYXJzX3Zpc2libGVfc2V0KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wgdmlzaWJsZSkK
ICAqCiAgKiBFbWl0cyBzaWduYWw6ICJ0b29sYmFycyx2aXNpYmxlLGdldCIgd2l0aCBhIHBvaW50
ZXIgdG8gYSBib29sZWFuLgogICovCi12b2lkIGV3a192aWV3X3Rvb2xiYXJzX3Zpc2libGVfZ2V0
KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wqIHZpc2libGUpCit2b2lkIGV3a192aWV3X3Rvb2xi
YXJzX3Zpc2libGVfZ2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wqIHZpc2libGUp
CiB7Ci0gICAgREJHKCIlcywgbz0lcCIsIF9fZnVuY19fLCBvKTsKKyAgICBEQkcoIiVzLCBvPSVw
IiwgX19mdW5jX18sIGV3a1ZpZXcpOwogICAgICp2aXNpYmxlID0gRUlOQV9GQUxTRTsKLSAgICBl
dmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKG8sICJ0b29sYmFycyx2aXNpYmxlLGdldCIs
IHZpc2libGUpOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdrVmlldywg
InRvb2xiYXJzLHZpc2libGUsZ2V0IiwgdmlzaWJsZSk7CiB9CiAKIC8qKgpAQCAtMzAxMiwxMCAr
MzAxMiwxMCBAQCB2b2lkIGV3a192aWV3X3Rvb2xiYXJzX3Zpc2libGVfZ2V0KEV2YXNfT2JqZWN0
KiBvLCBFaW5hX0Jvb2wqIHZpc2libGUpCiAgKgogICogRW1pdHMgc2lnbmFsOiAic3RhdHVzYmFy
LHZpc2libGUsc2V0IiB3aXRoIGEgcG9pbnRlciB0byBhIGJvb2xlYW4uCiAgKi8KLXZvaWQgZXdr
X3ZpZXdfc3RhdHVzYmFyX3Zpc2libGVfc2V0KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wgdmlz
aWJsZSkKK3ZvaWQgZXdrX3ZpZXdfc3RhdHVzYmFyX3Zpc2libGVfc2V0KEV2YXNfT2JqZWN0KiBl
d2tWaWV3LCBFaW5hX0Jvb2wgdmlzaWJsZSkKIHsKLSAgICBEQkcoIm89JXAgKHZpc2libGU9JWQp
IiwgbywgISF2aXNpYmxlKTsKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKG8s
ICJzdGF0dXNiYXIsdmlzaWJsZSxzZXQiLCAmdmlzaWJsZSk7CisgICAgREJHKCJld2tWaWV3PSVw
ICh2aXNpYmxlPSVkKSIsIGV3a1ZpZXcsICEhdmlzaWJsZSk7CisgICAgZXZhc19vYmplY3Rfc21h
cnRfY2FsbGJhY2tfY2FsbChld2tWaWV3LCAic3RhdHVzYmFyLHZpc2libGUsc2V0IiwgJnZpc2li
bGUpOwogfQogCiAvKioKQEAgLTMwMjksMTEgKzMwMjksMTEgQEAgdm9pZCBld2tfdmlld19zdGF0
dXNiYXJfdmlzaWJsZV9zZXQoRXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCB2aXNpYmxlKQogICoK
ICAqIEVtaXRzIHNpZ25hbDogInN0YXR1c2Jhcix2aXNpYmxlLGdldCIgd2l0aCBhIHBvaW50ZXIg
dG8gYSBib29sZWFuLgogICovCi12b2lkIGV3a192aWV3X3N0YXR1c2Jhcl92aXNpYmxlX2dldChF
dmFzX09iamVjdCogbywgRWluYV9Cb29sKiB2aXNpYmxlKQordm9pZCBld2tfdmlld19zdGF0dXNi
YXJfdmlzaWJsZV9nZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCogdmlzaWJsZSkK
IHsKLSAgICBEQkcoIiVzLCBvPSVwIiwgX19mdW5jX18sIG8pOworICAgIERCRygiJXMsIG89JXAi
LCBfX2Z1bmNfXywgZXdrVmlldyk7CiAgICAgKnZpc2libGUgPSBFSU5BX0ZBTFNFOwotICAgIGV2
YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwobywgInN0YXR1c2Jhcix2aXNpYmxlLGdldCIs
IHZpc2libGUpOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdrVmlldywg
InN0YXR1c2Jhcix2aXNpYmxlLGdldCIsIHZpc2libGUpOwogfQogCiAvKioKQEAgLTMwNDUsMTEg
KzMwNDUsMTEgQEAgdm9pZCBld2tfdmlld19zdGF0dXNiYXJfdmlzaWJsZV9nZXQoRXZhc19PYmpl
Y3QqIG8sIEVpbmFfQm9vbCogdmlzaWJsZSkKICAqCiAgKiBFbWl0cyBzaWduYWw6ICJzdGF0dXNi
YXIsdGV4dCxzZXQiIHdpdGggYSBzdHJpbmcuCiAgKi8KLXZvaWQgZXdrX3ZpZXdfc3RhdHVzYmFy
X3RleHRfc2V0KEV2YXNfT2JqZWN0KiBvLCBjb25zdCBjaGFyKiB0ZXh0KQordm9pZCBld2tfdmll
d19zdGF0dXNiYXJfdGV4dF9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGNvbnN0IGNoYXIqIHRl
eHQpCiB7Ci0gICAgREJHKCJvPSVwICh0ZXh0PSVzKSIsIG8sIHRleHQpOworICAgIERCRygiZXdr
Vmlldz0lcCAodGV4dD0lcykiLCBld2tWaWV3LCB0ZXh0KTsKICAgICBJTkYoInN0YXR1cyBiYXIg
dGV4dCBzZXQ6ICVzIiwgdGV4dCk7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2Fs
bChvLCAic3RhdHVzYmFyLHRleHQsc2V0IiwgKHZvaWQqKXRleHQpOworICAgIGV2YXNfb2JqZWN0
X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdrVmlldywgInN0YXR1c2Jhcix0ZXh0LHNldCIsICh2b2lk
Kil0ZXh0KTsKIH0KIAogLyoqCkBAIC0zMDYxLDEwICszMDYxLDEwIEBAIHZvaWQgZXdrX3ZpZXdf
c3RhdHVzYmFyX3RleHRfc2V0KEV2YXNfT2JqZWN0KiBvLCBjb25zdCBjaGFyKiB0ZXh0KQogICoK
ICAqIEVtaXRzIHNpZ25hbDogInNjcm9sbGJhcnMsdmlzaWJsZSxzZXQiIHdpdGggYSBwb2ludGVy
IHRvIGEgYm9vbGVhbi4KICAqLwotdm9pZCBld2tfdmlld19zY3JvbGxiYXJzX3Zpc2libGVfc2V0
KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wgdmlzaWJsZSkKK3ZvaWQgZXdrX3ZpZXdfc2Nyb2xs
YmFyc192aXNpYmxlX3NldChFdmFzX09iamVjdCogZXdrVmlldywgRWluYV9Cb29sIHZpc2libGUp
CiB7Ci0gICAgREJHKCJvPSVwICh2aXNpYmxlPSVkKSIsIG8sICEhdmlzaWJsZSk7Ci0gICAgZXZh
c19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChvLCAic2Nyb2xsYmFycyx2aXNpYmxlLHNldCIs
ICZ2aXNpYmxlKTsKKyAgICBEQkcoImV3a1ZpZXc9JXAgKHZpc2libGU9JWQpIiwgZXdrVmlldywg
ISF2aXNpYmxlKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKGV3a1ZpZXcs
ICJzY3JvbGxiYXJzLHZpc2libGUsc2V0IiwgJnZpc2libGUpOwogfQogCiAvKioKQEAgLTMwNzgs
MTEgKzMwNzgsMTEgQEAgdm9pZCBld2tfdmlld19zY3JvbGxiYXJzX3Zpc2libGVfc2V0KEV2YXNf
T2JqZWN0KiBvLCBFaW5hX0Jvb2wgdmlzaWJsZSkKICAqCiAgKiBFbWl0cyBzaWduYWw6ICJzY3Jv
bGxiYXJzLHZpc2libGUsZ2V0IiB3aXRoIGEgcG9pbnRlciB0byBhIGJvb2xlYW4uCiAgKi8KLXZv
aWQgZXdrX3ZpZXdfc2Nyb2xsYmFyc192aXNpYmxlX2dldChFdmFzX09iamVjdCogbywgRWluYV9C
b29sKiB2aXNpYmxlKQordm9pZCBld2tfdmlld19zY3JvbGxiYXJzX3Zpc2libGVfZ2V0KEV2YXNf
T2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wqIHZpc2libGUpCiB7Ci0gICAgREJHKCIlcywgbz0l
cCIsIF9fZnVuY19fLCBvKTsKKyAgICBEQkcoIiVzLCBvPSVwIiwgX19mdW5jX18sIGV3a1ZpZXcp
OwogICAgICp2aXNpYmxlID0gRUlOQV9GQUxTRTsKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxs
YmFja19jYWxsKG8sICJzY3JvbGxiYXJzLHZpc2libGUsZ2V0IiwgdmlzaWJsZSk7CisgICAgZXZh
c19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChld2tWaWV3LCAic2Nyb2xsYmFycyx2aXNpYmxl
LGdldCIsIHZpc2libGUpOwogfQogCiAvKioKQEAgLTMwOTQsMTAgKzMwOTQsMTAgQEAgdm9pZCBl
d2tfdmlld19zY3JvbGxiYXJzX3Zpc2libGVfZ2V0KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wq
IHZpc2libGUpCiAgKgogICogRW1pdHMgc2lnbmFsOiAibWVudWJhcix2aXNpYmxlLHNldCIgd2l0
aCBhIHBvaW50ZXIgdG8gYSBib29sZWFuLgogICovCi12b2lkIGV3a192aWV3X21lbnViYXJfdmlz
aWJsZV9zZXQoRXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCB2aXNpYmxlKQordm9pZCBld2tfdmll
d19tZW51YmFyX3Zpc2libGVfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wgdmlz
aWJsZSkKIHsKLSAgICBEQkcoIm89JXAgKHZpc2libGU9JWQpIiwgbywgISF2aXNpYmxlKTsKLSAg
ICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKG8sICJtZW51YmFyLHZpc2libGUsc2V0
IiwgJnZpc2libGUpOworICAgIERCRygiZXdrVmlldz0lcCAodmlzaWJsZT0lZCkiLCBld2tWaWV3
LCAhIXZpc2libGUpOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdrVmll
dywgIm1lbnViYXIsdmlzaWJsZSxzZXQiLCAmdmlzaWJsZSk7CiB9CiAKIC8qKgpAQCAtMzExMSwx
MSArMzExMSwxMSBAQCB2b2lkIGV3a192aWV3X21lbnViYXJfdmlzaWJsZV9zZXQoRXZhc19PYmpl
Y3QqIG8sIEVpbmFfQm9vbCB2aXNpYmxlKQogICoKICAqIEVtaXRzIHNpZ25hbDogIm1lbnViYXIs
dmlzaWJsZSxnZXQiIHdpdGggYSBwb2ludGVyIHRvIGEgYm9vbGVhbi4KICAqLwotdm9pZCBld2tf
dmlld19tZW51YmFyX3Zpc2libGVfZ2V0KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wqIHZpc2li
bGUpCit2b2lkIGV3a192aWV3X21lbnViYXJfdmlzaWJsZV9nZXQoRXZhc19PYmplY3QqIGV3a1Zp
ZXcsIEVpbmFfQm9vbCogdmlzaWJsZSkKIHsKLSAgICBEQkcoIiVzLCBvPSVwIiwgX19mdW5jX18s
IG8pOworICAgIERCRygiJXMsIG89JXAiLCBfX2Z1bmNfXywgZXdrVmlldyk7CiAgICAgKnZpc2li
bGUgPSBFSU5BX0ZBTFNFOwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwobywg
Im1lbnViYXIsdmlzaWJsZSxnZXQiLCB2aXNpYmxlKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9j
YWxsYmFja19jYWxsKGV3a1ZpZXcsICJtZW51YmFyLHZpc2libGUsZ2V0IiwgdmlzaWJsZSk7CiB9
CiAKIC8qKgpAQCAtMzEyOCwxMCArMzEyOCwxMCBAQCB2b2lkIGV3a192aWV3X21lbnViYXJfdmlz
aWJsZV9nZXQoRXZhc19PYmplY3QqIG8sIEVpbmFfQm9vbCogdmlzaWJsZSkKICAqIEVtaXRzIHNp
Z25hbDogInRvb2x0aXAsdGV4dCxzZXQiIHdpdGggYSBzdHJpbmcuIElmIHRvb2x0aXAgbXVzdCBi
ZSBhY3R1YWxseQogICogcmVtb3ZlZCwgdGV4dCB3aWxsIGJlIDAgb3IgJ1wwJwogICovCi12b2lk
IGV3a192aWV3X3Rvb2x0aXBfdGV4dF9zZXQoRXZhc19PYmplY3QqIG8sIGNvbnN0IGNoYXIqIHRl
eHQpCit2b2lkIGV3a192aWV3X3Rvb2x0aXBfdGV4dF9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcs
IGNvbnN0IGNoYXIqIHRleHQpCiB7Ci0gICAgREJHKCJvPSVwIHRleHQ9JXMiLCBvLCB0ZXh0KTsK
LSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKG8sICJ0b29sdGlwLHRleHQsc2V0
IiwgKHZvaWQqKXRleHQpOworICAgIERCRygiZXdrVmlldz0lcCB0ZXh0PSVzIiwgZXdrVmlldywg
dGV4dCk7CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChld2tWaWV3LCAidG9v
bHRpcCx0ZXh0LHNldCIsICh2b2lkKil0ZXh0KTsKIH0KIAogLyoqCkBAIC0zMTQzLDE5ICszMTQz
LDE5IEBAIHZvaWQgZXdrX3ZpZXdfdG9vbHRpcF90ZXh0X3NldChFdmFzX09iamVjdCogbywgY29u
c3QgY2hhciogdGV4dCkKICAqIEBzb3VyY2VJRCBTb3VyY2UgaWQuCiAgKgogICovCi12b2lkIGV3
a192aWV3X2FkZF9jb25zb2xlX21lc3NhZ2UoRXZhc19PYmplY3QqIG8sIGNvbnN0IGNoYXIqIG1l
c3NhZ2UsIHVuc2lnbmVkIGludCBsaW5lTnVtYmVyLCBjb25zdCBjaGFyKiBzb3VyY2VJRCkKK3Zv
aWQgZXdrX3ZpZXdfYWRkX2NvbnNvbGVfbWVzc2FnZShFdmFzX09iamVjdCogZXdrVmlldywgY29u
c3QgY2hhciogbWVzc2FnZSwgdW5zaWduZWQgaW50IGxpbmVOdW1iZXIsIGNvbnN0IGNoYXIqIHNv
dXJjZUlEKQogewotICAgIERCRygibz0lcCBtZXNzYWdlPSVzIGxpbmVOdW1iZXI9JXUgc291cmNl
SUQ9JXMiLCBvLCBtZXNzYWdlLCBsaW5lTnVtYmVyLCBzb3VyY2VJRCk7Ci0gICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihvLCBzZCk7CisgICAgREJHKCJld2tWaWV3PSVwIG1lc3NhZ2U9JXMg
bGluZU51bWJlcj0ldSBzb3VyY2VJRD0lcyIsIGV3a1ZpZXcsIG1lc3NhZ2UsIGxpbmVOdW1iZXIs
IHNvdXJjZUlEKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkKTsK
ICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpKTsKICAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpLT5hZGRfY29uc29sZV9tZXNzYWdlKTsKICAgICBzZC0+
YXBpLT5hZGRfY29uc29sZV9tZXNzYWdlKHNkLCBtZXNzYWdlLCBsaW5lTnVtYmVyLCBzb3VyY2VJ
RCk7CiB9CiAKLWJvb2wgZXdrX3ZpZXdfZm9jdXNfY2FuX2N5Y2xlKEV2YXNfT2JqZWN0KiBvLCBF
d2tfRm9jdXNfRGlyZWN0aW9uIGRpcmVjdGlvbikKK2Jvb2wgZXdrX3ZpZXdfZm9jdXNfY2FuX2N5
Y2xlKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFd2tfRm9jdXNfRGlyZWN0aW9uIGRpcmVjdGlvbikK
IHsKLSAgICBEQkcoIm89JXAgZGlyZWN0aW9uPSVkIiwgbywgZGlyZWN0aW9uKTsKLSAgICBFV0tf
VklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCBmYWxzZSk7CisgICAgREJHKCJld2tWaWV3PSVw
IGRpcmVjdGlvbj0lZCIsIGV3a1ZpZXcsIGRpcmVjdGlvbik7CisgICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihld2tWaWV3LCBzZCwgZmFsc2UpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOX1ZBTChzZC0+YXBpLCBmYWxzZSk7CiAKICAgICBpZiAoIXNkLT5hcGktPmZvY3VzX2Nh
bl9jeWNsZSkKQEAgLTMxNjQsMTAgKzMxNjQsMTAgQEAgYm9vbCBld2tfdmlld19mb2N1c19jYW5f
Y3ljbGUoRXZhc19PYmplY3QqIG8sIEV3a19Gb2N1c19EaXJlY3Rpb24gZGlyZWN0aW9uKQogICAg
IHJldHVybiBzZC0+YXBpLT5mb2N1c19jYW5fY3ljbGUoc2QsIGRpcmVjdGlvbik7CiB9CiAKLXZv
aWQgZXdrX3ZpZXdfcnVuX2phdmFzY3JpcHRfYWxlcnQoRXZhc19PYmplY3QqIG8sIEV2YXNfT2Jq
ZWN0KiBmcmFtZSwgY29uc3QgY2hhciogbWVzc2FnZSkKK3ZvaWQgZXdrX3ZpZXdfcnVuX2phdmFz
Y3JpcHRfYWxlcnQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV2YXNfT2JqZWN0KiBmcmFtZSwgY29u
c3QgY2hhciogbWVzc2FnZSkKIHsKLSAgICBEQkcoIm89JXAgZnJhbWU9JXAgbWVzc2FnZT0lcyIs
IG8sIGZyYW1lLCBtZXNzYWdlKTsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNk
KTsKKyAgICBEQkcoImV3a1ZpZXc9JXAgZnJhbWU9JXAgbWVzc2FnZT0lcyIsIGV3a1ZpZXcsIGZy
YW1lLCBtZXNzYWdlKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNk
KTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpKTsKIAogICAgIGlmICgh
c2QtPmFwaS0+cnVuX2phdmFzY3JpcHRfYWxlcnQpCkBAIC0zMTc2LDEwICszMTc2LDEwIEBAIHZv
aWQgZXdrX3ZpZXdfcnVuX2phdmFzY3JpcHRfYWxlcnQoRXZhc19PYmplY3QqIG8sIEV2YXNfT2Jq
ZWN0KiBmcmFtZSwgY29uc3QgY2hhCiAgICAgc2QtPmFwaS0+cnVuX2phdmFzY3JpcHRfYWxlcnQo
c2QsIGZyYW1lLCBtZXNzYWdlKTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3J1bl9qYXZhc2Ny
aXB0X2NvbmZpcm0oRXZhc19PYmplY3QqIG8sIEV2YXNfT2JqZWN0KiBmcmFtZSwgY29uc3QgY2hh
ciogbWVzc2FnZSkKK0VpbmFfQm9vbCBld2tfdmlld19ydW5famF2YXNjcmlwdF9jb25maXJtKEV2
YXNfT2JqZWN0KiBld2tWaWV3LCBFdmFzX09iamVjdCogZnJhbWUsIGNvbnN0IGNoYXIqIG1lc3Nh
Z2UpCiB7Ci0gICAgREJHKCJvPSVwIGZyYW1lPSVwIG1lc3NhZ2U9JXMiLCBvLCBmcmFtZSwgbWVz
c2FnZSk7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7
CisgICAgREJHKCJld2tWaWV3PSVwIGZyYW1lPSVwIG1lc3NhZ2U9JXMiLCBld2tWaWV3LCBmcmFt
ZSwgbWVzc2FnZSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwg
RUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5hcGks
IEVJTkFfRkFMU0UpOwogCiAgICAgaWYgKCFzZC0+YXBpLT5ydW5famF2YXNjcmlwdF9jb25maXJt
KQpAQCAtMzE4OCwxMCArMzE4OCwxMCBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfcnVuX2phdmFzY3Jp
cHRfY29uZmlybShFdmFzX09iamVjdCogbywgRXZhc19PYmplY3QqIGZyYW1lLCBjbwogICAgIHJl
dHVybiBzZC0+YXBpLT5ydW5famF2YXNjcmlwdF9jb25maXJtKHNkLCBmcmFtZSwgbWVzc2FnZSk7
CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld19ydW5famF2YXNjcmlwdF9wcm9tcHQoRXZhc19PYmpl
Y3QqIG8sIEV2YXNfT2JqZWN0KiBmcmFtZSwgY29uc3QgY2hhciogbWVzc2FnZSwgY29uc3QgY2hh
ciogZGVmYXVsdFZhbHVlLCBjaGFyKiogdmFsdWUpCitFaW5hX0Jvb2wgZXdrX3ZpZXdfcnVuX2ph
dmFzY3JpcHRfcHJvbXB0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFdmFzX09iamVjdCogZnJhbWUs
IGNvbnN0IGNoYXIqIG1lc3NhZ2UsIGNvbnN0IGNoYXIqIGRlZmF1bHRWYWx1ZSwgY2hhcioqIHZh
bHVlKQogewotICAgIERCRygibz0lcCBmcmFtZT0lcCBtZXNzYWdlPSVzIiwgbywgZnJhbWUsIG1l
c3NhZ2UpOwotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0Up
OworICAgIERCRygiZXdrVmlldz0lcCBmcmFtZT0lcCBtZXNzYWdlPSVzIiwgZXdrVmlldywgZnJh
bWUsIG1lc3NhZ2UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2Qs
IEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+YXBp
LCBFSU5BX0ZBTFNFKTsKIAogICAgIGlmICghc2QtPmFwaS0+cnVuX2phdmFzY3JpcHRfcHJvbXB0
KQpAQCAtMzIxMSwxMCArMzIxMSwxMCBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfcnVuX2phdmFzY3Jp
cHRfcHJvbXB0KEV2YXNfT2JqZWN0KiBvLCBFdmFzX09iamVjdCogZnJhbWUsIGNvbgogICoKICAq
IEByZXR1cm4gQGMgRUlOQV9UUlVFIGlmIHNjcmlwdCBzaG91bGQgYmUgc3RvcHBlZDsgQGMgRUlO
QV9GQUxTRSBvdGhlcndpc2UKICAqLwotRWluYV9Cb29sIGV3a192aWV3X3Nob3VsZF9pbnRlcnJ1
cHRfamF2YXNjcmlwdChFdmFzX09iamVjdCogbykKK0VpbmFfQm9vbCBld2tfdmlld19zaG91bGRf
aW50ZXJydXB0X2phdmFzY3JpcHQoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgREJHKCJv
PSVwIiwgbyk7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxT
RSk7CisgICAgREJHKCJld2tWaWV3PSVwIiwgZXdrVmlldyk7CisgICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk5fVkFMKHNkLT5hcGksIEVJTkFfRkFMU0UpOwogCiAgICAgaWYgKCFzZC0+YXBp
LT5zaG91bGRfaW50ZXJydXB0X2phdmFzY3JpcHQpCkBAIC0zMjM3LDE2ICszMjM3LDE2IEBAIEVp
bmFfQm9vbCBld2tfdmlld19zaG91bGRfaW50ZXJydXB0X2phdmFzY3JpcHQoRXZhc19PYmplY3Qq
IG8pCiAgKiBAcGFyYW0gZXhwZWN0ZWRfc2l6ZSBUaGUgZXhwZWN0ZWQgc2l6ZSBvZiB0aGlzIGRh
dGFiYXNlIGluIG9yZGVyIHRvIGZ1bGZpbGwKICAqIHNpdGUncyByZXF1aXJlbWVudC4KICAqLwot
dWludDY0X3QgZXdrX3ZpZXdfZXhjZWVkZWRfZGF0YWJhc2VfcXVvdGEoRXZhc19PYmplY3QqIG8s
IEV2YXNfT2JqZWN0KiBmcmFtZSwgY29uc3QgY2hhciogZGF0YWJhc2VOYW1lLCB1aW50NjRfdCBj
dXJyZW50X3NpemUsIHVpbnQ2NF90IGV4cGVjdGVkX3NpemUpCit1aW50NjRfdCBld2tfdmlld19l
eGNlZWRlZF9kYXRhYmFzZV9xdW90YShFdmFzX09iamVjdCogZXdrVmlldywgRXZhc19PYmplY3Qq
IGZyYW1lLCBjb25zdCBjaGFyKiBkYXRhYmFzZU5hbWUsIHVpbnQ2NF90IGN1cnJlbnRTaXplLCB1
aW50NjRfdCBleHBlY3RlZFNpemUpCiB7Ci0gICAgREJHKCJvPSVwIiwgbyk7Ci0gICAgRVdLX1ZJ
RVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgMCk7CisgICAgREJHKCJld2tWaWV3PSVwIiwgZXdr
Vmlldyk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgMCk7CiAg
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5hcGksIDApOwogICAgIGlmICgh
c2QtPmFwaS0+ZXhjZWVkZWRfZGF0YWJhc2VfcXVvdGEpCiAgICAgICAgIHJldHVybiAwOwogCi0g
ICAgSU5GKCJjdXJyZW50X3NpemU9JSIgUFJJdTY0ICIgZXhwZWN0ZWRfc2l6ZT0lIiBQUkl1NjQs
IGN1cnJlbnRfc2l6ZSwgZXhwZWN0ZWRfc2l6ZSk7Ci0gICAgcmV0dXJuIHNkLT5hcGktPmV4Y2Vl
ZGVkX2RhdGFiYXNlX3F1b3RhKHNkLCBmcmFtZSwgZGF0YWJhc2VOYW1lLCBjdXJyZW50X3NpemUs
IGV4cGVjdGVkX3NpemUpOworICAgIElORigiY3VycmVudF9zaXplPSUiIFBSSXU2NCAiIGV4cGVj
dGVkX3NpemU9JSIgUFJJdTY0LCBjdXJyZW50U2l6ZSwgZXhwZWN0ZWRTaXplKTsKKyAgICByZXR1
cm4gc2QtPmFwaS0+ZXhjZWVkZWRfZGF0YWJhc2VfcXVvdGEoc2QsIGZyYW1lLCBkYXRhYmFzZU5h
bWUsIGN1cnJlbnRTaXplLCBleHBlY3RlZFNpemUpOwogfQogCiAvKioKQEAgLTMyNjIsMjggKzMy
NjIsMjggQEAgdWludDY0X3QgZXdrX3ZpZXdfZXhjZWVkZWRfZGF0YWJhc2VfcXVvdGEoRXZhc19P
YmplY3QqIG8sIEV2YXNfT2JqZWN0KiBmcmFtZSwgY28KICAqCiAgKiBAcmV0dXJuIEBFSU5BX0ZB
TFNFIGlmIHVzZXIgY2FuY2VsZWQgZmlsZSBzZWxlY3Rpb247IEBFSU5BX1RSVUUgaWYgY29uZmly
bWVkLgogICovCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfcnVuX29wZW5fcGFuZWwoRXZhc19PYmplY3Qq
IG8sIEV2YXNfT2JqZWN0KiBmcmFtZSwgRWluYV9Cb29sIGFsbG93c19tdWx0aXBsZV9maWxlcywg
Y29uc3QgY2hhciogYWNjZXB0X3R5cGVzLCBFaW5hX0xpc3QqKiBzZWxlY3RlZF9maWxlbmFtZXMp
CitFaW5hX0Jvb2wgZXdrX3ZpZXdfcnVuX29wZW5fcGFuZWwoRXZhc19PYmplY3QqIGV3a1ZpZXcs
IEV2YXNfT2JqZWN0KiBmcmFtZSwgRWluYV9Cb29sIGFsbG93c011bHRpcGxlRmlsZXMsIGNvbnN0
IGNoYXIqIGFjY2VwdFR5cGVzLCBFaW5hX0xpc3QqKiBzZWxlY3RlZEZpbGVuYW1lcykKIHsKLSAg
ICBEQkcoIm89JXAgZnJhbWU9JXAgYWxsb3dzX211bHRpcGxlX2ZpbGVzPSVkIiwgbywgZnJhbWUs
IGFsbG93c19tdWx0aXBsZV9maWxlcyk7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihv
LCBzZCwgRUlOQV9GQUxTRSk7CisgICAgREJHKCJld2tWaWV3PSVwIGZyYW1lPSVwIGFsbG93c19t
dWx0aXBsZV9maWxlcz0lZCIsIGV3a1ZpZXcsIGZyYW1lLCBhbGxvd3NNdWx0aXBsZUZpbGVzKTsK
KyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsK
ICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmFwaSwgRUlOQV9GQUxTRSk7
CiAgICAgRWluYV9Cb29sIGNvbmZpcm07CiAKICAgICBpZiAoIXNkLT5hcGktPnJ1bl9vcGVuX3Bh
bmVsKQogICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKIAotICAgICpzZWxlY3RlZF9maWxlbmFt
ZXMgPSAwOworICAgICpzZWxlY3RlZEZpbGVuYW1lcyA9IDA7CiAKLSAgICBjb25maXJtID0gc2Qt
PmFwaS0+cnVuX29wZW5fcGFuZWwoc2QsIGZyYW1lLCBhbGxvd3NfbXVsdGlwbGVfZmlsZXMsIGFj
Y2VwdF90eXBlcywgc2VsZWN0ZWRfZmlsZW5hbWVzKTsKLSAgICBpZiAoIWNvbmZpcm0gJiYgKnNl
bGVjdGVkX2ZpbGVuYW1lcykKKyAgICBjb25maXJtID0gc2QtPmFwaS0+cnVuX29wZW5fcGFuZWwo
c2QsIGZyYW1lLCBhbGxvd3NNdWx0aXBsZUZpbGVzLCBhY2NlcHRUeXBlcywgc2VsZWN0ZWRGaWxl
bmFtZXMpOworICAgIGlmICghY29uZmlybSAmJiAqc2VsZWN0ZWRGaWxlbmFtZXMpCiAgICAgICAg
IEVSUigiQ2FuY2VsZWQgZmlsZSBzZWxlY3Rpb24sIGJ1dCBzZWxlY3RlZCBmaWxlbmFtZXMgIT0g
MC4gRnJlZSBuYW1lcyBiZWZvcmUgcmV0dXJuLiIpOwogICAgIHJldHVybiBjb25maXJtOwogfQog
Ci12b2lkIGV3a192aWV3X3JlcGFpbnQoRXZhc19PYmplY3QqIG8sIEV2YXNfQ29vcmQgeCwgRXZh
c19Db29yZCB5LCBFdmFzX0Nvb3JkIHcsIEV2YXNfQ29vcmQgaCkKK3ZvaWQgZXdrX3ZpZXdfcmVw
YWludChFdmFzX09iamVjdCogZXdrVmlldywgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHksIEV2
YXNfQ29vcmQgd2lkdGgsIEV2YXNfQ29vcmQgaGVpZ2h0KQogewotICAgIERCRygibz0lcCwgcmVn
aW9uPSVkLCVkICsgJWR4JWQiLCBvLCB4LCB5LCB3LCBoKTsKLSAgICBFV0tfVklFV19TRF9HRVRf
T1JfUkVUVVJOKG8sIHNkKTsKKyAgICBEQkcoImV3a1ZpZXc9JXAsIHJlZ2lvbj0lZCwlZCArICVk
eCVkIiwgZXdrVmlldywgeCwgeSwgd2lkdGgsIGhlaWdodCk7CisgICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihld2tWaWV3LCBzZCk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJO
KHNkLCBwcml2KTsKIAogICAgIGlmICghcHJpdi0+bWFpbl9mcmFtZS0+Y29udGVudFJlbmRlcmVy
KCkpIHsKQEAgLTMyOTEsMzEgKzMyOTEsMzEgQEAgdm9pZCBld2tfdmlld19yZXBhaW50KEV2YXNf
T2JqZWN0KiBvLCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwgRXZhc19Db29yZCB3LAogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgX2V3a192aWV3X3JlcGFpbnRfYWRkKHByaXYsIHgs
IHksIHcsIGgpOworICAgIF9ld2tfdmlld19yZXBhaW50X2FkZChwcml2LCB4LCB5LCB3aWR0aCwg
aGVpZ2h0KTsKICAgICBfZXdrX3ZpZXdfc21hcnRfY2hhbmdlZChzZCk7CiB9CiAKLXZvaWQgZXdr
X3ZpZXdfc2Nyb2xsKEV2YXNfT2JqZWN0KiBvLCBFdmFzX0Nvb3JkIGR4LCBFdmFzX0Nvb3JkIGR5
LCBFdmFzX0Nvb3JkIHN4LCBFdmFzX0Nvb3JkIHN5LCBFdmFzX0Nvb3JkIHN3LCBFdmFzX0Nvb3Jk
IHNoLCBFdmFzX0Nvb3JkIGN4LCBFdmFzX0Nvb3JkIGN5LCBFdmFzX0Nvb3JkIGN3LCBFdmFzX0Nv
b3JkIGNoLCBFaW5hX0Jvb2wgbWFpbl9mcmFtZSkKK3ZvaWQgZXdrX3ZpZXdfc2Nyb2xsKEV2YXNf
T2JqZWN0KiBld2tWaWV3LCBFdmFzX0Nvb3JkIGR4LCBFdmFzX0Nvb3JkIGR5LCBFdmFzX0Nvb3Jk
IHNjcm9sbFgsIEV2YXNfQ29vcmQgc2Nyb2xsWSwgRXZhc19Db29yZCBzY3JvbGxXaWR0aCwgRXZh
c19Db29yZCBzY3JvbGxIZWlnaHQsIEV2YXNfQ29vcmQgY2VudGVyWCwgRXZhc19Db29yZCBjZW50
ZXJZLCBFdmFzX0Nvb3JkIGNlbnRlcldpZHRoLCBFdmFzX0Nvb3JkIGNlbnRlckhlaWdodCwgRWlu
YV9Cb29sIG1haW5GcmFtZSkKIHsKLSAgICBEQkcoIm89JXAsIGRlbHRhOiAlZCwlZCwgc2Nyb2xs
OiAlZCwlZCslZHglZCwgY2xpcDogJWQsJWQrJWR4JWQiLAotICAgICAgICBvLCBkeCwgZHksIHN4
LCBzeSwgc3csIHNoLCBjeCwgY3ksIGN3LCBjaCk7CisgICAgREJHKCJld2tWaWV3PSVwLCBkZWx0
YTogJWQsJWQsIHNjcm9sbDogJWQsJWQrJWR4JWQsIGNsaXA6ICVkLCVkKyVkeCVkIiwKKyAgICAg
ICAgZXdrVmlldywgZHgsIGR5LCBzY3JvbGxYLCBzY3JvbGxZLCBzY3JvbGxXaWR0aCwgc2Nyb2xs
SGVpZ2h0LCBjZW50ZXJYLCBjZW50ZXJZLCBjZW50ZXJXaWR0aCwgY2VudGVySGVpZ2h0KTsKIAot
ICAgIGlmICgoc3ggIT0gY3gpIHx8IChzeSAhPSBjeSkgfHwgKHN3ICE9IGN3KSB8fCAoc2ggIT0g
Y2gpKQorICAgIGlmICgoc2Nyb2xsWCAhPSBjZW50ZXJYKSB8fCAoc2Nyb2xsWSAhPSBjZW50ZXJZ
KSB8fCAoc2Nyb2xsV2lkdGggIT0gY2VudGVyV2lkdGgpIHx8IChzY3JvbGxIZWlnaHQgIT0gY2Vu
dGVySGVpZ2h0KSkKICAgICAgICAgV1JOKCJzY3JvbGwgcmVnaW9uIGFuZCBjbGlwIGFyZSBkaWZm
ZXJlbnQhICVkLCVkKyVkeCVkIGFuZCAlZCwlZCslZHglZCIsCi0gICAgICAgICAgICBzeCwgc3ks
IHN3LCBzaCwgY3gsIGN5LCBjdywgY2gpOworICAgICAgICAgICAgc2Nyb2xsWCwgc2Nyb2xsWSwg
c2Nyb2xsV2lkdGgsIHNjcm9sbEhlaWdodCwgY2VudGVyWCwgY2VudGVyWSwgY2VudGVyV2lkdGgs
IGNlbnRlckhlaWdodCk7CiAKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkKTsK
KyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkKTsKICAgICBFV0tfVklF
V19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYpOwogICAgIEVJTkFfU0FGRVRZX09OX1RSVUVf
UkVUVVJOKCFkeCAmJiAhZHkpOwogCi0gICAgX2V3a192aWV3X3Njcm9sbF9hZGQocHJpdiwgZHgs
IGR5LCBzeCwgc3ksIHN3LCBzaCwgbWFpbl9mcmFtZSk7CisgICAgX2V3a192aWV3X3Njcm9sbF9h
ZGQocHJpdiwgZHgsIGR5LCBzY3JvbGxYLCBzY3JvbGxZLCBzY3JvbGxXaWR0aCwgc2Nyb2xsSGVp
Z2h0LCBtYWluRnJhbWUpOwogCiAgICAgX2V3a192aWV3X3NtYXJ0X2NoYW5nZWQoc2QpOwogfQog
Ci1XZWJDb3JlOjpQYWdlKiBld2tfdmlld19jb3JlX3BhZ2VfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0
KiBvKQorV2ViQ29yZTo6UGFnZSogZXdrX3ZpZXdfY29yZV9wYWdlX2dldChjb25zdCBFdmFzX09i
amVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAw
KTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAwKTsKICAgICBF
V0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIDApOwogICAgIHJldHVybiBwcml2
LT5wYWdlOwogfQpAQCAtMzMyNSwxMyArMzMyNSwxMyBAQCBXZWJDb3JlOjpQYWdlKiBld2tfdmll
d19jb3JlX3BhZ2VfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQogICoKICAqIEVtaXRzICJmcmFt
ZSxjcmVhdGVkIiB3aXRoIHRoZSBuZXcgZnJhbWUgb2JqZWN0IG9uIHN1Y2Nlc3MuCiAgKi8KLVdU
Rjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpGcmFtZT4gZXdrX3ZpZXdfZnJhbWVfY3JlYXRlKEV2YXNf
T2JqZWN0KiBvLCBFdmFzX09iamVjdCogZnJhbWUsIGNvbnN0IFdURjo6U3RyaW5nJiBuYW1lLCBX
ZWJDb3JlOjpIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVyRWxlbWVudCwgY29uc3QgV2ViQ29y
ZTo6S1VSTCYgdXJsLCBjb25zdCBXVEY6OlN0cmluZyYgcmVmZXJyZXIpCitXVEY6OlBhc3NSZWZQ
dHI8V2ViQ29yZTo6RnJhbWU+IGV3a192aWV3X2ZyYW1lX2NyZWF0ZShFdmFzX09iamVjdCogZXdr
VmlldywgRXZhc19PYmplY3QqIGZyYW1lLCBjb25zdCBXVEY6OlN0cmluZyYgbmFtZSwgV2ViQ29y
ZTo6SFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lckVsZW1lbnQsIGNvbnN0IFdlYkNvcmU6OktV
UkwmIHVybCwgY29uc3QgV1RGOjpTdHJpbmcmIHJlZmVycmVyKQogewotICAgIERCRygibz0lcCwg
ZnJhbWU9JXAsIG5hbWU9JXMsIG93bmVyRWxlbWVudD0lcCwgdXJsPSVzLCByZWZlcnJlcj0lcyIs
Ci0gICAgICAgIG8sIGZyYW1lLCBuYW1lLnV0ZjgoKS5kYXRhKCksIG93bmVyRWxlbWVudCwKKyAg
ICBEQkcoImV3a1ZpZXc9JXAsIGZyYW1lPSVwLCBuYW1lPSVzLCBvd25lckVsZW1lbnQ9JXAsIHVy
bD0lcywgcmVmZXJyZXI9JXMiLAorICAgICAgICBld2tWaWV3LCBmcmFtZSwgbmFtZS51dGY4KCku
ZGF0YSgpLCBvd25lckVsZW1lbnQsCiAgICAgICAgIHVybC5zdHJpbmcoKS51dGY4KCkuZGF0YSgp
LCByZWZlcnJlci51dGY4KCkuZGF0YSgpKTsKIAotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRV
Uk4obywgc2QsIDApOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2Qs
IDApOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgMCk7CiAKICAg
ICBXVEY6OlJlZlB0cjxXZWJDb3JlOjpGcmFtZT4gY2YgPSBfZXdrX3ZpZXdfY29yZV9mcmFtZV9u
ZXcKQEAgLTMzNTMsMTcgKzMzNTMsMTcgQEAgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkZyYW1l
PiBld2tfdmlld19mcmFtZV9jcmVhdGUoRXZhc19PYmplY3QqIG8sIEV2YXNfT2JqZWMKICAgICBz
ZC0+Y2hhbmdlZC5mcmFtZV9yZWN0ID0gRUlOQV9UUlVFOwogICAgIF9ld2tfdmlld19zbWFydF9j
aGFuZ2VkKHNkKTsKIAotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwobywgImZy
YW1lLGNyZWF0ZWQiLCBmcmFtZSk7CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2Fs
bChld2tWaWV3LCAiZnJhbWUsY3JlYXRlZCIsIGZyYW1lKTsKICAgICByZXR1cm4gY2YucmVsZWFz
ZSgpOwogfQogCi1XVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6V2lkZ2V0PiBld2tfdmlld19wbHVn
aW5fY3JlYXRlKEV2YXNfT2JqZWN0KiBvLCBFdmFzX09iamVjdCogZnJhbWUsIGNvbnN0IFdlYkNv
cmU6OkludFNpemUmIHBsdWdpblNpemUsIFdlYkNvcmU6OkhUTUxQbHVnSW5FbGVtZW50KiBlbGVt
ZW50LCBjb25zdCBXZWJDb3JlOjpLVVJMJiB1cmwsIGNvbnN0IFdURjo6VmVjdG9yPFdURjo6U3Ry
aW5nPiYgcGFyYW1OYW1lcywgY29uc3QgV1RGOjpWZWN0b3I8V1RGOjpTdHJpbmc+JiBwYXJhbVZh
bHVlcywgY29uc3QgV1RGOjpTdHJpbmcmIG1pbWVUeXBlLCBib29sIGxvYWRNYW51YWxseSkKK1dU
Rjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpXaWRnZXQ+IGV3a192aWV3X3BsdWdpbl9jcmVhdGUoRXZh
c19PYmplY3QqIGV3a1ZpZXcsIEV2YXNfT2JqZWN0KiBmcmFtZSwgY29uc3QgV2ViQ29yZTo6SW50
U2l6ZSYgcGx1Z2luU2l6ZSwgV2ViQ29yZTo6SFRNTFBsdWdJbkVsZW1lbnQqIGVsZW1lbnQsIGNv
bnN0IFdlYkNvcmU6OktVUkwmIHVybCwgY29uc3QgV1RGOjpWZWN0b3I8V1RGOjpTdHJpbmc+JiBw
YXJhbU5hbWVzLCBjb25zdCBXVEY6OlZlY3RvcjxXVEY6OlN0cmluZz4mIHBhcmFtVmFsdWVzLCBj
b25zdCBXVEY6OlN0cmluZyYgbWltZVR5cGUsIGJvb2wgbG9hZE1hbnVhbGx5KQogewotICAgIERC
Rygibz0lcCwgZnJhbWU9JXAsIHNpemU9JWR4JWQsIGVsZW1lbnQ9JXAsIHVybD0lcywgbWltZVR5
cGU9JXMiLAotICAgICAgICBvLCBmcmFtZSwgcGx1Z2luU2l6ZS53aWR0aCgpLCBwbHVnaW5TaXpl
LmhlaWdodCgpLCBlbGVtZW50LAorICAgIERCRygiZXdrVmlldz0lcCwgZnJhbWU9JXAsIHNpemU9
JWR4JWQsIGVsZW1lbnQ9JXAsIHVybD0lcywgbWltZVR5cGU9JXMiLAorICAgICAgICBld2tWaWV3
LCBmcmFtZSwgcGx1Z2luU2l6ZS53aWR0aCgpLCBwbHVnaW5TaXplLmhlaWdodCgpLCBlbGVtZW50
LAogICAgICAgICB1cmwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgbWltZVR5cGUudXRmOCgpLmRh
dGEoKSk7CiAKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkLCAwKTsKKyAgICBF
V0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAwKTsKICAgICBzZC0+Y2hhbmdl
ZC5mcmFtZV9yZWN0ID0gRUlOQV9UUlVFOwogICAgIF9ld2tfdmlld19zbWFydF9jaGFuZ2VkKHNk
KTsKIApAQCAtMzM4MywxNCArMzM4MywxNCBAQCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6V2lk
Z2V0PiBld2tfdmlld19wbHVnaW5fY3JlYXRlKEV2YXNfT2JqZWN0KiBvLCBFdmFzX09iagogICoK
ICAqIEVtaXRzOiAicG9wdXAsY3JlYXRlIiB3aXRoIGEgbGlzdCBvZiBFd2tfTWVudSBjb250YWlu
aW5nIGVhY2ggaXRlbSdzIGRhdGEKICAqLwotdm9pZCBld2tfdmlld19wb3B1cF9uZXcoRXZhc19P
YmplY3QqIG8sIFdlYkNvcmU6OlBvcHVwTWVudUNsaWVudCogY2xpZW50LCBpbnQgc2VsZWN0ZWQs
IGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3QpCit2b2lkIGV3a192aWV3X3BvcHVwX25ldyhF
dmFzX09iamVjdCogZXdrVmlldywgV2ViQ29yZTo6UG9wdXBNZW51Q2xpZW50KiBjbGllbnQsIGlu
dCBzZWxlY3RlZCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdCkKIHsKLSAgICBJTkYoIm89
JXAiLCBvKTsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkKTsKKyAgICBJTkYo
ImV3a1ZpZXc9JXAiLCBld2tWaWV3KTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3
a1ZpZXcsIHNkKTsKICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYpOwog
CiAgICAgaWYgKHByaXYtPnBvcHVwLm1lbnVfY2xpZW50KQotICAgICAgICBld2tfdmlld19wb3B1
cF9kZXN0cm95KG8pOworICAgICAgICBld2tfdmlld19wb3B1cF9kZXN0cm95KGV3a1ZpZXcpOwog
CiAgICAgcHJpdi0+cG9wdXAubWVudV9jbGllbnQgPSBjbGllbnQ7CiAKQEAgLTM0MTMsMTkgKzM0
MTMsMTkgQEAgdm9pZCBld2tfdmlld19wb3B1cF9uZXcoRXZhc19PYmplY3QqIG8sIFdlYkNvcmU6
OlBvcHVwTWVudUNsaWVudCogY2xpZW50LCBpbnQgc2UKICAgICBwcml2LT5wb3B1cC5tZW51Lnkg
PSByZWN0LnkoKTsKICAgICBwcml2LT5wb3B1cC5tZW51LndpZHRoID0gcmVjdC53aWR0aCgpOwog
ICAgIHByaXYtPnBvcHVwLm1lbnUuaGVpZ2h0ID0gcmVjdC5oZWlnaHQoKTsKLSAgICBldmFzX29i
amVjdF9zbWFydF9jYWxsYmFja19jYWxsKG8sICJwb3B1cCxjcmVhdGUiLCAmcHJpdi0+cG9wdXAu
bWVudSk7CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChld2tWaWV3LCAicG9w
dXAsY3JlYXRlIiwgJnByaXYtPnBvcHVwLm1lbnUpOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdf
cG9wdXBfZGVzdHJveShFdmFzX09iamVjdCogbykKK0VpbmFfQm9vbCBld2tfdmlld19wb3B1cF9k
ZXN0cm95KEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIElORigibz0lcCIsIG8pOwotICAg
IEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIElORigi
ZXdrVmlldz0lcCIsIGV3a1ZpZXcpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdr
Vmlldywgc2QsIEVJTkFfRkFMU0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihz
ZCwgcHJpdiwgRUlOQV9GQUxTRSk7CiAKICAgICBpZiAoIXByaXYtPnBvcHVwLm1lbnVfY2xpZW50
KQogICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKIAotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2Nh
bGxiYWNrX2NhbGwobywgInBvcHVwLHdpbGxkZWxldGUiLCAmcHJpdi0+cG9wdXAubWVudSk7Cisg
ICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChld2tWaWV3LCAicG9wdXAsd2lsbGRl
bGV0ZSIsICZwcml2LT5wb3B1cC5tZW51KTsKIAogICAgIHZvaWQqIGl0ZW12OwogICAgIEVJTkFf
TElTVF9GUkVFKHByaXYtPnBvcHVwLm1lbnUuaXRlbXMsIGl0ZW12KSB7CkBAIC0zNDM5LDEwICsz
NDM5LDEwIEBAIEVpbmFfQm9vbCBld2tfdmlld19wb3B1cF9kZXN0cm95KEV2YXNfT2JqZWN0KiBv
KQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLXZvaWQgZXdrX3ZpZXdfcG9wdXBfc2VsZWN0
ZWRfc2V0KEV2YXNfT2JqZWN0KiBvLCBpbnQgaW5kZXgpCit2b2lkIGV3a192aWV3X3BvcHVwX3Nl
bGVjdGVkX3NldChFdmFzX09iamVjdCogZXdrVmlldywgaW50IGluZGV4KQogewotICAgIElORigi
bz0lcCIsIG8pOwotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QpOworICAgIElO
RigiZXdrVmlldz0lcCIsIGV3a1ZpZXcpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrVmlldywgc2QpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdik7
CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4ocHJpdi0+cG9wdXAubWVudV9jbGllbnQp
OwogCkBAIC0zNDU5LDEwICszNDU5LDEwIEBAIHZvaWQgZXdrX3ZpZXdfcG9wdXBfc2VsZWN0ZWRf
c2V0KEV2YXNfT2JqZWN0KiBvLCBpbnQgaW5kZXgpCiAgKiBFbWl0czogImRvd25sb2FkLHJlcXVl
c3QiIHdpdGggYW4gRXdrX0Rvd25sb2FkIGNvbnRhaW5pbmcgdGhlIGRldGFpbHMgb2YgdGhlCiAg
KiByZXF1ZXN0ZWQgZG93bmxvYWQuIFRoZSBkb3dubG9hZCBwZXIgc2UgbXVzdCBiZSBoYW5kbGVk
IG91dHNpZGUgb2Ygd2Via2l0LgogICovCi12b2lkIGV3a192aWV3X2Rvd25sb2FkX3JlcXVlc3Qo
RXZhc19PYmplY3QqIG8sIEV3a19Eb3dubG9hZCogZG93bmxvYWQpCit2b2lkIGV3a192aWV3X2Rv
d25sb2FkX3JlcXVlc3QoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV3a19Eb3dubG9hZCogZG93bmxv
YWQpCiB7Ci0gICAgREJHKCJ2aWV3PSVwIiwgbyk7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2Fs
bGJhY2tfY2FsbChvLCAiZG93bmxvYWQscmVxdWVzdCIsIGRvd25sb2FkKTsKKyAgICBEQkcoImV3
a1ZpZXc9JXAiLCBld2tWaWV3KTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxs
KGV3a1ZpZXcsICJkb3dubG9hZCxyZXF1ZXN0IiwgZG93bmxvYWQpOwogfQogCiAvKioKQEAgLTM0
NzIsOSArMzQ3Miw5IEBAIHZvaWQgZXdrX3ZpZXdfZG93bmxvYWRfcmVxdWVzdChFdmFzX09iamVj
dCogbywgRXdrX0Rvd25sb2FkKiBkb3dubG9hZCkKICAqIEBwYXJhbSBvIHZpZXcuCiAgKiBAcGFy
YW0gZnJhbWUgdGhlIGZyYW1lLgogICovCi12b2lkIGV3a192aWV3X2pzX3dpbmRvd19vYmplY3Rf
Y2xlYXIoRXZhc19PYmplY3QqIG8sIEV2YXNfT2JqZWN0KiBmcmFtZSkKK3ZvaWQgZXdrX3ZpZXdf
anNfd2luZG93X29iamVjdF9jbGVhcihFdmFzX09iamVjdCogZXdrVmlldywgRXZhc19PYmplY3Qq
IGZyYW1lKQogewotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwobywgImpzLHdp
bmRvd29iamVjdCxjbGVhciIsIGZyYW1lKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFj
a19jYWxsKGV3a1ZpZXcsICJqcyx3aW5kb3dvYmplY3QsY2xlYXIiLCBmcmFtZSk7CiB9CiAKIC8q
KgpAQCAtMzQ4NSwxMDAgKzM0ODUsMTAwIEBAIHZvaWQgZXdrX3ZpZXdfanNfd2luZG93X29iamVj
dF9jbGVhcihFdmFzX09iamVjdCogbywgRXZhc19PYmplY3QqIGZyYW1lKQogICoKICAqIEVtaXRz
IHNpZ25hbDogInZpZXdwb3J0LGNoYW5nZWQiIHdpdGggbm8gcGFyYW1ldGVycy4KICAqLwotdm9p
ZCBld2tfdmlld192aWV3cG9ydF9hdHRyaWJ1dGVzX3NldChFdmFzX09iamVjdCogbywgY29uc3Qg
V2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHMmIGFyZ3VtZW50cykKK3ZvaWQgZXdrX3ZpZXdfdmll
d3BvcnRfYXR0cmlidXRlc19zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGNvbnN0IFdlYkNvcmU6
OlZpZXdwb3J0QXJndW1lbnRzJiBhcmd1bWVudHMpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUKG8s
IHNkKTsKKyAgICBFV0tfVklFV19TRF9HRVQoZXdrVmlldywgc2QpOwogICAgIEVXS19WSUVXX1BS
SVZfR0VUKHNkLCBwcml2KTsKIAogICAgIHByaXYtPnZpZXdwb3J0X2FyZ3VtZW50cyA9IGFyZ3Vt
ZW50czsKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKG8sICJ2aWV3cG9ydCxj
aGFuZ2VkIiwgMCk7CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChld2tWaWV3
LCAidmlld3BvcnQsY2hhbmdlZCIsIDApOwogfQogCi12b2lkIGV3a192aWV3X3ZpZXdwb3J0X2F0
dHJpYnV0ZXNfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvLCBpbnQqIHcsIGludCogaCwgZmxvYXQq
IGluaXRfc2NhbGUsIGZsb2F0KiBtYXhfc2NhbGUsIGZsb2F0KiBtaW5fc2NhbGUsIGZsb2F0KiBk
ZXZpY2VfcGl4ZWxfcmF0aW8sIEVpbmFfQm9vbCogdXNlcl9zY2FsYWJsZSkKK3ZvaWQgZXdrX3Zp
ZXdfdmlld3BvcnRfYXR0cmlidXRlc19nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcsIGlu
dCogd2lkdGgsIGludCogaGVpZ2h0LCBmbG9hdCogaW5pdFNjYWxlLCBmbG9hdCogbWF4U2NhbGUs
IGZsb2F0KiBtaW5TY2FsZSwgZmxvYXQqIGRldmljZVBpeGVsUmF0aW8sIEVpbmFfQm9vbCogdXNl
clNjYWxhYmxlKQogewotICAgIFdlYkNvcmU6OlZpZXdwb3J0QXR0cmlidXRlcyBhdHRyaWJ1dGVz
ID0gX2V3a192aWV3X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfY29tcHV0ZShvKTsKKyAgICBXZWJDb3Jl
OjpWaWV3cG9ydEF0dHJpYnV0ZXMgYXR0cmlidXRlcyA9IF9ld2tfdmlld192aWV3cG9ydF9hdHRy
aWJ1dGVzX2NvbXB1dGUoZXdrVmlldyk7CiAKLSAgICBpZiAodykKLSAgICAgICAgKncgPSBhdHRy
aWJ1dGVzLmxheW91dFNpemUud2lkdGgoKTsKLSAgICBpZiAoaCkKLSAgICAgICAgKmggPSBhdHRy
aWJ1dGVzLmxheW91dFNpemUuaGVpZ2h0KCk7Ci0gICAgaWYgKGluaXRfc2NhbGUpCi0gICAgICAg
ICppbml0X3NjYWxlID0gYXR0cmlidXRlcy5pbml0aWFsU2NhbGU7Ci0gICAgaWYgKG1heF9zY2Fs
ZSkKLSAgICAgICAgKm1heF9zY2FsZSA9IGF0dHJpYnV0ZXMubWF4aW11bVNjYWxlOwotICAgIGlm
IChtaW5fc2NhbGUpCi0gICAgICAgICptaW5fc2NhbGUgPSBhdHRyaWJ1dGVzLm1pbmltdW1TY2Fs
ZTsKLSAgICBpZiAoZGV2aWNlX3BpeGVsX3JhdGlvKQotICAgICAgICAqZGV2aWNlX3BpeGVsX3Jh
dGlvID0gYXR0cmlidXRlcy5kZXZpY2VQaXhlbFJhdGlvOwotICAgIGlmICh1c2VyX3NjYWxhYmxl
KQotICAgICAgICAqdXNlcl9zY2FsYWJsZSA9IHN0YXRpY19jYXN0PGJvb2w+KGF0dHJpYnV0ZXMu
dXNlclNjYWxhYmxlKTsKKyAgICBpZiAod2lkdGgpCisgICAgICAgICp3aWR0aCA9IGF0dHJpYnV0
ZXMubGF5b3V0U2l6ZS53aWR0aCgpOworICAgIGlmIChoZWlnaHQpCisgICAgICAgICpoZWlnaHQg
PSBhdHRyaWJ1dGVzLmxheW91dFNpemUuaGVpZ2h0KCk7CisgICAgaWYgKGluaXRTY2FsZSkKKyAg
ICAgICAgKmluaXRTY2FsZSA9IGF0dHJpYnV0ZXMuaW5pdGlhbFNjYWxlOworICAgIGlmIChtYXhT
Y2FsZSkKKyAgICAgICAgKm1heFNjYWxlID0gYXR0cmlidXRlcy5tYXhpbXVtU2NhbGU7CisgICAg
aWYgKG1pblNjYWxlKQorICAgICAgICAqbWluU2NhbGUgPSBhdHRyaWJ1dGVzLm1pbmltdW1TY2Fs
ZTsKKyAgICBpZiAoZGV2aWNlUGl4ZWxSYXRpbykKKyAgICAgICAgKmRldmljZVBpeGVsUmF0aW8g
PSBhdHRyaWJ1dGVzLmRldmljZVBpeGVsUmF0aW87CisgICAgaWYgKHVzZXJTY2FsYWJsZSkKKyAg
ICAgICAgKnVzZXJTY2FsYWJsZSA9IHN0YXRpY19jYXN0PGJvb2w+KGF0dHJpYnV0ZXMudXNlclNj
YWxhYmxlKTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3pvb21fcmFuZ2Vfc2V0KEV2YXNfT2Jq
ZWN0KiBvLCBmbG9hdCBtaW5fc2NhbGUsIGZsb2F0IG1heF9zY2FsZSkKK0VpbmFfQm9vbCBld2tf
dmlld196b29tX3JhbmdlX3NldChFdmFzX09iamVjdCogZXdrVmlldywgZmxvYXQgbWluU2NhbGUs
IGZsb2F0IG1heFNjYWxlKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2Qs
IEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2Qs
IEVJTkFfRkFMU0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwg
RUlOQV9GQUxTRSk7CiAKLSAgICBpZiAobWF4X3NjYWxlIDwgbWluX3NjYWxlKSB7CisgICAgaWYg
KG1heFNjYWxlIDwgbWluU2NhbGUpIHsKICAgICAgICAgV1JOKCJtaW5fc2NhbGUgaXMgbGFyZ2Vy
IHRoYW4gbWF4X3NjYWxlIik7CiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwogICAgIH0KIAot
ICAgIHByaXYtPnNldHRpbmdzLnpvb21fcmFuZ2UubWluX3NjYWxlID0gbWluX3NjYWxlOwotICAg
IHByaXYtPnNldHRpbmdzLnpvb21fcmFuZ2UubWF4X3NjYWxlID0gbWF4X3NjYWxlOworICAgIHBy
aXYtPnNldHRpbmdzLnpvb21fcmFuZ2UubWluX3NjYWxlID0gbWluU2NhbGU7CisgICAgcHJpdi0+
c2V0dGluZ3Muem9vbV9yYW5nZS5tYXhfc2NhbGUgPSBtYXhTY2FsZTsKIAogICAgIHJldHVybiBF
SU5BX1RSVUU7CiB9CiAKLWZsb2F0IGV3a192aWV3X3pvb21fcmFuZ2VfbWluX2dldChjb25zdCBF
dmFzX09iamVjdCogbykKK2Zsb2F0IGV3a192aWV3X3pvb21fcmFuZ2VfbWluX2dldChjb25zdCBF
dmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8s
IHNkLCAtMS4wKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAt
MS4wKTsKICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIC0xLjApOwog
CiAgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLnpvb21fcmFuZ2UubWluX3NjYWxlOwogfQogCi1m
bG9hdCBld2tfdmlld196b29tX3JhbmdlX21heF9nZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCitm
bG9hdCBld2tfdmlld196b29tX3JhbmdlX21heF9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1Zp
ZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgLTEuMCk7CisgICAg
RVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgLTEuMCk7CiAgICAgRVdLX1ZJ
RVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCAtMS4wKTsKIAogICAgIHJldHVybiBwcml2
LT5zZXR0aW5ncy56b29tX3JhbmdlLm1heF9zY2FsZTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3
X3VzZXJfc2NhbGFibGVfc2V0KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jvb2wgdXNlcl9zY2FsYWJs
ZSkKK0VpbmFfQm9vbCBld2tfdmlld191c2VyX3NjYWxhYmxlX3NldChFdmFzX09iamVjdCogZXdr
VmlldywgRWluYV9Cb29sIHVzZXJTY2FsYWJsZSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1Jf
UkVUVVJOKG8sIHNkLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJO
KGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRV
Uk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwogCi0gICAgcHJpdi0+c2V0dGluZ3Muem9vbV9yYW5n
ZS51c2VyX3NjYWxhYmxlID0gdXNlcl9zY2FsYWJsZTsKKyAgICBwcml2LT5zZXR0aW5ncy56b29t
X3JhbmdlLnVzZXJfc2NhbGFibGUgPSB1c2VyU2NhbGFibGU7CiAKICAgICByZXR1cm4gRUlOQV9U
UlVFOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfdXNlcl9zY2FsYWJsZV9nZXQoY29uc3QgRXZh
c19PYmplY3QqIG8pCitFaW5hX0Jvb2wgZXdrX3ZpZXdfdXNlcl9zY2FsYWJsZV9nZXQoY29uc3Qg
RXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihv
LCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3
LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBw
cml2LCBFSU5BX0ZBTFNFKTsKIAogICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy56b29tX3Jhbmdl
LnVzZXJfc2NhbGFibGU7CiB9CiAKLWZsb2F0IGV3a192aWV3X2RldmljZV9waXhlbF9yYXRpb19n
ZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCitmbG9hdCBld2tfdmlld19kZXZpY2VfcGl4ZWxfcmF0
aW9fZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dF
VF9PUl9SRVRVUk4obywgc2QsIC0xLjApOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrVmlldywgc2QsIC0xLjApOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwg
cHJpdiwgLTEuMCk7CiAKICAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZGV2aWNlX3BpeGVsX3Jh
dGlvOwogfQogCi12b2lkIGV3a192aWV3X2RpZF9maXJzdF92aXN1YWxseV9ub25lbXB0eV9sYXlv
dXQoRXZhc19PYmplY3QqIG8pCit2b2lkIGV3a192aWV3X2RpZF9maXJzdF92aXN1YWxseV9ub25l
bXB0eV9sYXlvdXQoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihvLCBzZCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3
LCBzZCk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2KTsKICAgICBp
ZiAoIXByaXYtPmZsYWdzLnZpZXdfY2xlYXJlZCkgewotICAgICAgICBld2tfdmlld19mcmFtZV9t
YWluX2NsZWFyZWQobyk7Ci0gICAgICAgIGV3a192aWV3X2VuYWJsZV9yZW5kZXIobyk7CisgICAg
ICAgIGV3a192aWV3X2ZyYW1lX21haW5fY2xlYXJlZChld2tWaWV3KTsKKyAgICAgICAgZXdrX3Zp
ZXdfZW5hYmxlX3JlbmRlcihld2tWaWV3KTsKICAgICAgICAgcHJpdi0+ZmxhZ3Mudmlld19jbGVh
cmVkID0gRUlOQV9UUlVFOwogICAgIH0KIH0KQEAgLTM1ODksMjEgKzM1ODksMjEgQEAgdm9pZCBl
d2tfdmlld19kaWRfZmlyc3RfdmlzdWFsbHlfbm9uZW1wdHlfbGF5b3V0KEV2YXNfT2JqZWN0KiBv
KQogICoKICAqIEBwYXJhbSBvIHZpZXcuCiAgKi8KLXZvaWQgZXdrX3ZpZXdfZGlzcGF0Y2hfZGlk
X2ZpbmlzaF9sb2FkaW5nKEV2YXNfT2JqZWN0KiBvKQordm9pZCBld2tfdmlld19kaXNwYXRjaF9k
aWRfZmluaXNoX2xvYWRpbmcoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7CiAgICAgLyogSWYgd2Ug
cmVhY2ggdGhpcyBwb2ludCBhbmQgcmVuZGVyaW5nIGlzIHN0aWxsIGRpc2FibGVkLCBXZWJDb3Jl
IHdpbGwgbm90CiAgICAgICogdHJpZ2dlciB0aGUgZGlkRmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5
b3V0IHNpZ25hbCBhbnltb3JlLiBTbywgd2UKICAgICAgKiBmb3JjZWZ1bGx5IHJlLWVuYWJsZSB0
aGUgcmVuZGVyaW5nLgogICAgICAqLwotICAgIGV3a192aWV3X2RpZF9maXJzdF92aXN1YWxseV9u
b25lbXB0eV9sYXlvdXQobyk7CisgICAgZXdrX3ZpZXdfZGlkX2ZpcnN0X3Zpc3VhbGx5X25vbmVt
cHR5X2xheW91dChld2tWaWV3KTsKIH0KIAotdm9pZCBld2tfdmlld190cmFuc2l0aW9uX3RvX2Nv
bW1pdGVkX2Zvcl9uZXdwYWdlKEV2YXNfT2JqZWN0KiBvKQordm9pZCBld2tfdmlld190cmFuc2l0
aW9uX3RvX2NvbW1pdGVkX2Zvcl9uZXdwYWdlKEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAg
IEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QpOworICAgIEVXS19WSUVXX1NEX0dFVF9P
Ul9SRVRVUk4oZXdrVmlldywgc2QpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihz
ZCwgcHJpdik7CiAKLSAgICBld2tfdmlld19kaXNhYmxlX3JlbmRlcihvKTsKKyAgICBld2tfdmll
d19kaXNhYmxlX3JlbmRlcihld2tWaWV3KTsKICAgICBwcml2LT5mbGFncy52aWV3X2NsZWFyZWQg
PSBFSU5BX0ZBTFNFOwogfQogCkBAIC0zNjE3LDkgKzM2MTcsOSBAQCB2b2lkIGV3a192aWV3X3Ry
YW5zaXRpb25fdG9fY29tbWl0ZWRfZm9yX25ld3BhZ2UoRXZhc19PYmplY3QqIG8pCiAgKiBAcGFy
YW0gbyBWaWV3IHRvIGxvYWQKICAqIEBwYXJhbSByZXF1ZXN0IFJlcXVlc3Qgd2hpY2ggY29udGFp
biB1cmwgdG8gbmF2aWdhdGUKICAqLwotRWluYV9Cb29sIGV3a192aWV3X25hdmlnYXRpb25fcG9s
aWN5X2RlY2lzaW9uKEV2YXNfT2JqZWN0KiBvLCBFd2tfRnJhbWVfUmVzb3VyY2VfUmVxdWVzdCog
cmVxdWVzdCkKK0VpbmFfQm9vbCBld2tfdmlld19uYXZpZ2F0aW9uX3BvbGljeV9kZWNpc2lvbihF
dmFzX09iamVjdCogZXdrVmlldywgRXdrX0ZyYW1lX1Jlc291cmNlX1JlcXVlc3QqIHJlcXVlc3Qp
CiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9UUlVFKTsKKyAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX1RSVUUpOwogICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+YXBpLCBFSU5BX1RSVUUpOwogCiAg
ICAgaWYgKCFzZC0+YXBpLT5uYXZpZ2F0aW9uX3BvbGljeV9kZWNpc2lvbikKQEAgLTM2MjgsMTMg
KzM2MjgsMTMgQEAgRWluYV9Cb29sIGV3a192aWV3X25hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9u
KEV2YXNfT2JqZWN0KiBvLCBFd2tfRnJhbWVfUmVzb3VyY2UKICAgICByZXR1cm4gc2QtPmFwaS0+
bmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb24oc2QsIHJlcXVlc3QpOwogfQogCi1FaW5hX0Jvb2wg
ZXdrX3ZpZXdfanNfb2JqZWN0X2FkZChFdmFzX09iamVjdCogbywgRXdrX0pTX09iamVjdCogb2Jq
LCBjb25zdCBjaGFyKiBvYmpfbmFtZSkKK0VpbmFfQm9vbCBld2tfdmlld19qc19vYmplY3RfYWRk
KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFd2tfSlNfT2JqZWN0KiBvYmplY3QsIGNvbnN0IGNoYXIq
IG9iamVjdE5hbWUpCiB7CiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCi0gICAgaWYg
KG9iai0+dmlldykgLy8gb2JqZWN0IGhhcyBhbHJlYWR5IGJlZW4gYWRkZWQgdG8gYW5vdGhlciBl
d2tfdmlldworICAgIGlmIChvYmplY3QtPnZpZXcpIC8vIG9iamVjdCBoYXMgYWxyZWFkeSBiZWVu
IGFkZGVkIHRvIGFub3RoZXIgZXdrX3ZpZXcKICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7Ci0g
ICAgb2JqLT5uYW1lID0gZWluYV9zdHJpbmdzaGFyZV9hZGQob2JqX25hbWUpOwotICAgIEVXS19W
SUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFfRkFMU0UpOworICAgIG9iamVjdC0+bmFt
ZSA9IGVpbmFfc3RyaW5nc2hhcmVfYWRkKG9iamVjdF9uYW1lKTsKKyAgICBFV0tfVklFV19TRF9H
RVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKICAgICBFV0tfVklFV19QUklW
X0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwogCiAgICAgSlNDOjpKU0xvY2sg
bG9jayhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7CkBAIC0zNjQ5LDcgKzM2NDksNyBAQCBF
aW5hX0Jvb2wgZXdrX3ZpZXdfanNfb2JqZWN0X2FkZChFdmFzX09iamVjdCogbywgRXdrX0pTX09i
amVjdCogb2JqLCBjb25zdCBjaGFyKgogCiAgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSB3aW5k
b3ctPmdsb2JhbEV4ZWMoKTsKIAotICAgIG9iai0+dmlldyA9IG87CisgICAgb2JqLT52aWV3ID0g
ZXdrVmlldzsKICAgICBKU0M6OkpTT2JqZWN0KiBydW50aW1lT2JqZWN0ID0gKEpTQzo6SlNPYmpl
Y3QqKUpTQzo6QmluZGluZ3M6OkNJbnN0YW5jZTo6Y3JlYXRlKChOUE9iamVjdCopb2JqLCByb290
KS0+Y3JlYXRlUnVudGltZU9iamVjdChleGVjKTsKICAgICBKU0M6OklkZW50aWZpZXIgaWQgPSBK
U0M6OklkZW50aWZpZXIoZXhlYywgb2JqX25hbWUpOwogCkBAIC0zNjYxLDkgKzM2NjEsOSBAQCBF
aW5hX0Jvb2wgZXdrX3ZpZXdfanNfb2JqZWN0X2FkZChFdmFzX09iamVjdCogbywgRXdrX0pTX09i
amVjdCogb2JqLCBjb25zdCBjaGFyKgogI2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVHSU5f
QVBJKQogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfcHJvdG9jb2xfaGFuZGxlcl9zZXQoRXZhc19P
YmplY3QqIG8sIGNvbnN0IGNoYXIqKiBwcm90b2NvbHMsIEV3a19WaWV3X1Jlc291cmNlX0hhbmRs
ZXJfQ2IgaGFuZGxlciwgdm9pZCogY29udGV4dCkKK0VpbmFfQm9vbCBld2tfdmlld19wcm90b2Nv
bF9oYW5kbGVyX3NldChFdmFzX09iamVjdCogZXdrVmlldywgY29uc3QgY2hhcioqIHByb3RvY29s
cywgRXdrX1ZpZXdfUmVzb3VyY2VfSGFuZGxlcl9DYiBoYW5kbGVyLCB2b2lkKiBjb250ZXh0KQog
ewotICAgIEVXS19WSUVXX1NEX0dFVChvLCBzZCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUKGV3a1Zp
ZXcsIHNkKTsKICAgICBFV0tfVklFV19QUklWX0dFVChzZCwgcHJpdik7CiAKICAgICBpZiAoIWhh
bmRsZXIpCkBAIC0zNjc1LDkgKzM2NzUsOSBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfcHJvdG9jb2xf
aGFuZGxlcl9zZXQoRXZhc19PYmplY3QqIG8sIGNvbnN0IGNoYXIqKiBwcm90b2NvbHMsCiAgICAg
cmV0dXJuIGV3a19jdXN0b21fcHJvdG9jb2xfaGFuZGxlcl9zZXQocHJvdG9jb2xzKTsKIH0KIAot
RWluYV9Cb29sIGV3a192aWV3X3Byb3RvY29sX2hhbmRsZXJfdW5zZXQoRXZhc19PYmplY3QqIG8p
CitFaW5hX0Jvb2wgZXdrX3ZpZXdfcHJvdG9jb2xfaGFuZGxlcl91bnNldChFdmFzX09iamVjdCog
ZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVQobywgc2QpOworICAgIEVXS19WSUVXX1NE
X0dFVChld2tWaWV3LCBzZCk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVQoc2QsIHByaXYpOwogICAg
IEVpbmFfQm9vbCByZXQgPSBld2tfY3VzdG9tX3Byb3RvY29sX2hhbmRsZXJfYWxsX3Vuc2V0KCk7
CiAKQEAgLTM2ODksOSArMzY4OSw5IEBAIEVpbmFfQm9vbCBld2tfdmlld19wcm90b2NvbF9oYW5k
bGVyX3Vuc2V0KEV2YXNfT2JqZWN0KiBvKQogICAgIHJldHVybiByZXQ7CiB9CiAKLXZvaWQqIGV3
a192aWV3X3Byb3RvY29sX2hhbmRsZXJfcmVzb3VyY2VfZ2V0KEV2YXNfT2JqZWN0KiBvLCBzaXpl
X3QqIGJ5dGVzUmVhZCwgY2hhcioqIG1pbWUsIGNvbnN0IGNoYXIqIGZpbGUpCit2b2lkKiBld2tf
dmlld19wcm90b2NvbF9oYW5kbGVyX3Jlc291cmNlX2dldChFdmFzX09iamVjdCogZXdrVmlldywg
c2l6ZV90KiBieXRlc1JlYWQsIGNoYXIqKiBtaW1lLCBjb25zdCBjaGFyKiBmaWxlKQogewotICAg
IEVXS19WSUVXX1NEX0dFVChvLCBzZCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUKGV3a1ZpZXcsIHNk
KTsKICAgICBFV0tfVklFV19QUklWX0dFVChzZCwgcHJpdik7CiAKICAgICBFd2tfVmlld19SZXNv
dXJjZV9IYW5kbGVyX0NiIGZ1bmN0aW9uID0gcHJpdi0+Y3VzdG9tX3Jlc291cmNlX2hhbmRsZXIu
ZnVuY3Rpb247CkBAIC0zNzEwLDE0ICszNzEwLDE0IEBAIHZvaWQqIGV3a192aWV3X3Byb3RvY29s
X2hhbmRsZXJfcmVzb3VyY2VfZ2V0KEV2YXNfT2JqZWN0KiBvLCBzaXplX3QqIGJ5dGVzUmVhZCwK
ICAqIEBwYXJhbSB3IG5ldyBjb250ZW50IHdpZHRoLgogICogQHBhcmFtIGggbmV3IGNvbnRlbnQg
aGVpZ2h0LgogICovCi12b2lkIGV3a192aWV3X2NvbnRlbnRzX3NpemVfY2hhbmdlZChFdmFzX09i
amVjdCogbywgaW50IHcsIGludCBoKQordm9pZCBld2tfdmlld19jb250ZW50c19zaXplX2NoYW5n
ZWQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGludCB3aWR0aCwgaW50IGhlaWdodCkKIHsKLSAgICBF
V0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKG8sIHNkKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1Jf
UkVUVVJOKGV3a1ZpZXcsIHNkKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+
YXBpKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpLT5jb250ZW50c19y
ZXNpemUpOwogCi0gICAgaWYgKCFzZC0+YXBpLT5jb250ZW50c19yZXNpemUoc2QsIHcsIGgpKQot
ICAgICAgICBFUlIoImZhaWxlZCB0byByZXNpemUgY29udGVudHMgdG8gJWR4JWQiLCB3LCBoKTsK
KyAgICBpZiAoIXNkLT5hcGktPmNvbnRlbnRzX3Jlc2l6ZShzZCwgd2lkdGgsIGhlaWdodCkpCisg
ICAgICAgIEVSUigiZmFpbGVkIHRvIHJlc2l6ZSBjb250ZW50cyB0byAlZHglZCIsIHdpZHRoLCBo
ZWlnaHQpOwogfQogCiAvKioKQEAgLTM3MjgsOSArMzcyOCw5IEBAIHZvaWQgZXdrX3ZpZXdfY29u
dGVudHNfc2l6ZV9jaGFuZ2VkKEV2YXNfT2JqZWN0KiBvLCBpbnQgdywgaW50IGgpCiAgKgogICog
QHJldHVybiBwYWdlIHNpemUuCiAgKi8KLVdlYkNvcmU6OkZsb2F0UmVjdCBld2tfdmlld19wYWdl
X3JlY3RfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBvKQorV2ViQ29yZTo6RmxvYXRSZWN0IGV3a192
aWV3X3BhZ2VfcmVjdF9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdL
X1ZJRVdfU0RfR0VUKG8sIHNkKTsKKyAgICBFV0tfVklFV19TRF9HRVQoZXdrVmlldywgc2QpOwog
ICAgIEVXS19WSUVXX1BSSVZfR0VUKHNkLCBwcml2KTsKIAogICAgIFdlYkNvcmU6OkZyYW1lKiBt
YWluX2ZyYW1lID0gcHJpdi0+cGFnZS0+bWFpbkZyYW1lKCk7CkBAIC0zNzM4LDI4ICszNzM4LDI4
IEBAIFdlYkNvcmU6OkZsb2F0UmVjdCBld2tfdmlld19wYWdlX3JlY3RfZ2V0KGNvbnN0IEV2YXNf
T2JqZWN0KiBvKQogfQogCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKLXZvaWQgZXdrX3ZpZXdf
bmVlZF90b3VjaF9ldmVudHNfc2V0KEV2YXNfT2JqZWN0KiBvLCBib29sIG5lZWRlZCkKK3ZvaWQg
ZXdrX3ZpZXdfbmVlZF90b3VjaF9ldmVudHNfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBib29s
IG5lZWRlZCkKIHsKLSAgICBFV0tfVklFV19TRF9HRVQobywgc2QpOworICAgIEVXS19WSUVXX1NE
X0dFVChld2tWaWV3LCBzZCk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVQoc2QsIHByaXYpOwogCiAg
ICAgcHJpdi0+ZmxhZ3MubmVlZF90b3VjaF9ldmVudHMgPSBuZWVkZWQ7CiB9CiAKLUVpbmFfQm9v
bCBld2tfdmlld19uZWVkX3RvdWNoX2V2ZW50c19nZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCitF
aW5hX0Jvb2wgZXdrX3ZpZXdfbmVlZF90b3VjaF9ldmVudHNfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0
KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4obywgc2QsIEVJTkFf
RkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFf
RkFMU0UpOwogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9G
QUxTRSk7CiAgICAgcmV0dXJuIHByaXYtPmZsYWdzLm5lZWRfdG91Y2hfZXZlbnRzOwogfQogI2Vu
ZGlmCiAKLUVpbmFfQm9vbCBld2tfdmlld19tb2RlX3NldChFdmFzX09iamVjdCogbywgRXdrX1Zp
ZXdfTW9kZSB2aWV3X21vZGUpCitFaW5hX0Jvb2wgZXdrX3ZpZXdfbW9kZV9zZXQoRXZhc19PYmpl
Y3QqIGV3a1ZpZXcsIEV3a19WaWV3X01vZGUgdmlld01vZGUpCiB7Ci0gICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihvLCBzZCwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRf
T1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKIAotICAgIHN3aXRjaCAodmlld19tb2Rl
KSB7CisgICAgc3dpdGNoICh2aWV3TW9kZSkgewogICAgIGNhc2UgRVdLX1ZJRVdfTU9ERV9XSU5E
T1dFRDoKICAgICAgICAgcHJpdi0+cGFnZS0+c2V0Vmlld01vZGUoV2ViQ29yZTo6UGFnZTo6Vmll
d01vZGVXaW5kb3dlZCk7CiAgICAgICAgIGJyZWFrOwpAQCAtMzc4MiwxMSArMzc4MiwxMSBAQCBF
aW5hX0Jvb2wgZXdrX3ZpZXdfbW9kZV9zZXQoRXZhc19PYmplY3QqIG8sIEV3a19WaWV3X01vZGUg
dmlld19tb2RlKQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLUV3a19WaWV3X01vZGUgZXdr
X3ZpZXdfbW9kZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIG8pCitFd2tfVmlld19Nb2RlIGV3a192
aWV3X21vZGVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewogICAgIEV3a19WaWV3
X01vZGUgbW9kZSA9IEVXS19WSUVXX01PREVfV0lORE9XRUQ7CiAKLSAgICBFV0tfVklFV19TRF9H
RVQobywgc2QpOworICAgIEVXS19WSUVXX1NEX0dFVChld2tWaWV3LCBzZCk7CiAgICAgaWYgKCFz
ZCkKICAgICAgICAgcmV0dXJuIG1vZGU7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVQoc2QsIHByaXYp
OwpAQCAtMzgyMSw5ICszODIxLDkgQEAgRXdrX1ZpZXdfTW9kZSBld2tfdmlld19tb2RlX2dldChj
b25zdCBFdmFzX09iamVjdCogbykKICAqCiAgKiBFbWl0cyBzaWduYWw6ICJlZGl0b3JjbGllbnRz
ZWxlY3Rpb24sY2hhbmdlZCIgd2l0aCBubyBwYXJhbWV0ZXJzLgogICovCi12b2lkIGV3a192aWV3
X2VkaXRvcl9jbGllbnRfc2VsZWN0aW9uX2NoYW5nZWQoRXZhc19PYmplY3QqIG8pCit2b2lkIGV3
a192aWV3X2VkaXRvcl9jbGllbnRfc2VsZWN0aW9uX2NoYW5nZWQoRXZhc19PYmplY3QqIGV3a1Zp
ZXcpCiB7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChvLCAiZWRpdG9yY2xp
ZW50LHNlbGVjdGlvbixjaGFuZ2VkIiwgMCk7CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJh
Y2tfY2FsbChld2tWaWV3LCAiZWRpdG9yY2xpZW50LHNlbGVjdGlvbixjaGFuZ2VkIiwgMCk7CiB9
CiAKIC8qKgpAQCAtMzgzNCw3ICszODM0LDcgQEAgdm9pZCBld2tfdmlld19lZGl0b3JfY2xpZW50
X3NlbGVjdGlvbl9jaGFuZ2VkKEV2YXNfT2JqZWN0KiBvKQogICoKICAqIEVtaXRzIHNpZ25hbDog
ImVkaXRvcmNsaWVudCxjb250ZW50cyxjaGFuZ2VkIiB3aXRoIG5vIHBhcmFtZXRlcnMuCiAgKi8K
LXZvaWQgZXdrX3ZpZXdfZWRpdG9yX2NsaWVudF9jb250ZW50c19jaGFuZ2VkKEV2YXNfT2JqZWN0
KiBvKQordm9pZCBld2tfdmlld19lZGl0b3JfY2xpZW50X2NvbnRlbnRzX2NoYW5nZWQoRXZhc19P
YmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChv
LCAiZWRpdG9yY2xpZW50LGNvbnRlbnRzLGNoYW5nZWQiLCAwKTsKKyAgICBldmFzX29iamVjdF9z
bWFydF9jYWxsYmFja19jYWxsKGV3a1ZpZXcsICJlZGl0b3JjbGllbnQsY29udGVudHMsY2hhbmdl
ZCIsIDApOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a192aWV3X3Np
bmdsZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXdfc2luZ2xlLmNwcAppbmRl
eCA1YWQ2N2ZlYWQzM2E2OTA4NTc5OGU1NTM2YTUxNWE5YWM2NTI2OGIwLi40ZDM1ZTkzNTgzOWM4
OTQ1YWQ0Nzk2NGE3YjliMmEzNzg5MTAyYmEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Vm
bC9ld2svZXdrX3ZpZXdfc2luZ2xlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdr
X3ZpZXdfc2luZ2xlLmNwcApAQCAtOSw3ICs5LDcgQEAKIAogICAgIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICAgIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
Ci0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAgICBNRVJjaEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogCiAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpAQCAtMzEs
ODkgKzMxLDg3IEBACiAKIHN0YXRpYyBFd2tfVmlld19TbWFydF9DbGFzcyBfcGFyZW50X3NjID0g
RVdLX1ZJRVdfU01BUlRfQ0xBU1NfSU5JVF9OVUxMOwogCi1zdGF0aWMgdm9pZCBfZXdrX3ZpZXdf
c2luZ2xlX29uX2RlbCh2b2lkKiBkYXRhLCBFdmFzKiBlLCBFdmFzX09iamVjdCogbywgdm9pZCog
ZXZlbnRfaW5mbykKK3N0YXRpYyB2b2lkIF9ld2tfdmlld19zaW5nbGVfb25fZGVsKHZvaWQqIGRh
dGEsIEV2YXMqIGV2ZW50VHlwZSwgRXZhc19PYmplY3QqIGNhbGxiYWNrLCB2b2lkKiBldmVudElu
Zm8pCiB7CiAgICAgRXZhc19PYmplY3QqIGNsaXAgPSAoRXZhc19PYmplY3QqKWRhdGE7CiAgICAg
ZXZhc19vYmplY3RfZGVsKGNsaXApOwogfQogCi1zdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc2luZ2xl
X3NtYXJ0X2FkZChFdmFzX09iamVjdCogbykKK3N0YXRpYyB2b2lkIF9ld2tfdmlld19zaW5nbGVf
c21hcnRfYWRkKEV2YXNfT2JqZWN0KiBld2tTaW5nbGUpCiB7CiAgICAgRXdrX1ZpZXdfU21hcnRf
RGF0YSogc2Q7CiAKLSAgICBfcGFyZW50X3NjLnNjLmFkZChvKTsKKyAgICBfcGFyZW50X3NjLnNj
LmFkZChld2tTaW5nbGUpOwogCi0gICAgc2QgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9E
YXRhKj4oZXZhc19vYmplY3Rfc21hcnRfZGF0YV9nZXQobykpOworICAgIHNkID0gc3RhdGljX2Nh
c3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGV2YXNfb2JqZWN0X3NtYXJ0X2RhdGFfZ2V0KGV3a1Np
bmdsZSkpOwogICAgIGlmICghc2QpCiAgICAgICAgIHJldHVybjsKIAogICAgIEV2YXNfT2JqZWN0
KiBjbGlwID0gZXZhc19vYmplY3RfcmVjdGFuZ2xlX2FkZChzZC0+YmFzZS5ldmFzKTsKLSAgICBl
dmFzX29iamVjdF9jbGlwX3NldChzZC0+YmFja2luZ19zdG9yZSwgY2xpcCk7Ci0gICAgZXZhc19v
YmplY3Rfc21hcnRfbWVtYmVyX2FkZChjbGlwLCBvKTsKICAgICBldmFzX29iamVjdF9zaG93KGNs
aXApOwogCiAgICAgZXZhc19vYmplY3RfZXZlbnRfY2FsbGJhY2tfYWRkCiAgICAgICAgIChzZC0+
YmFja2luZ19zdG9yZSwgRVZBU19DQUxMQkFDS19ERUwsIF9ld2tfdmlld19zaW5nbGVfb25fZGVs
LCBjbGlwKTsKIH0KIAotc3RhdGljIEV2YXNfT2JqZWN0KiBfZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0
X2JhY2tpbmdfc3RvcmVfYWRkKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkKQorc3RhdGljIEV2YXNf
T2JqZWN0KiBfZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0X2JhY2tpbmdfc3RvcmVfYWRkKEV3a19WaWV3
X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSkKIHsKLSAgICBFdmFzX09iamVjdCogYnMgPSBldmFzX29i
amVjdF9pbWFnZV9hZGQoc2QtPmJhc2UuZXZhcyk7CisgICAgRXZhc19PYmplY3QqIGJzID0gZXZh
c19vYmplY3RfaW1hZ2VfYWRkKHNtYXJ0RGF0YS0+YmFzZS5ldmFzKTsKICAgICBldmFzX29iamVj
dF9pbWFnZV9hbHBoYV9zZXQoYnMsIEVJTkFfRkFMU0UpOwotICAgIGV2YXNfb2JqZWN0X2ltYWdl
X3Ntb290aF9zY2FsZV9zZXQoYnMsIHNkLT56b29tX3dlYWtfc21vb3RoX3NjYWxlKTsKKyAgICBl
dmFzX29iamVjdF9pbWFnZV9zbW9vdGhfc2NhbGVfc2V0KGJzLCBzbWFydERhdGEtPnpvb21fd2Vh
a19zbW9vdGhfc2NhbGUpOwogCiAgICAgcmV0dXJuIGJzOwogfQogCi1zdGF0aWMgdm9pZCBfZXdr
X3ZpZXdfc2luZ2xlX3NtYXJ0X3Jlc2l6ZShFdmFzX09iamVjdCogbywgRXZhc19Db29yZCB3LCBF
dmFzX0Nvb3JkIGgpCitzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0X3Jlc2l6ZShF
dmFzX09iamVjdCogZXdrU2luZ2xlLCBFdmFzX0Nvb3JkIHdpZHRoLCBFdmFzX0Nvb3JkIGhlaWdo
dCkKIHsKLSAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzZCA9IHN0YXRpY19jYXN0PEV3a19WaWV3
X1NtYXJ0X0RhdGEqPihldmFzX29iamVjdF9zbWFydF9kYXRhX2dldChvKSk7Ci0gICAgX3BhcmVu
dF9zYy5zYy5yZXNpemUobywgdywgaCk7CisgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QgPSBz
dGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZXZhc19vYmplY3Rfc21hcnRfZGF0YV9n
ZXQoZXdrU2luZ2xlKSk7CisgICAgX3BhcmVudF9zYy5zYy5yZXNpemUoZXdrU2luZ2xlLCB3aWR0
aCwgaGVpZ2h0KTsKIAogICAgIGlmICghc2QpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIHRo
ZXNlIHNob3VsZCBiZSBxdWV1ZWQgYW5kIHByb2Nlc3NlZCBpbiBjYWxjdWxhdGUgYXMgd2VsbCEK
LSAgICBldmFzX29iamVjdF9pbWFnZV9zaXplX3NldChzZC0+YmFja2luZ19zdG9yZSwgdywgaCk7
CisgICAgZXZhc19vYmplY3RfaW1hZ2Vfc2l6ZV9zZXQoc2QtPmJhY2tpbmdfc3RvcmUsIHdpZHRo
LCBoZWlnaHQpOwogICAgIGlmIChzZC0+YW5pbWF0ZWRfem9vbS56b29tLmN1cnJlbnQgPCAwLjAw
MDAxKSB7CiAgICAgICAgIEV2YXNfT2JqZWN0KiBjbGlwID0gZXZhc19vYmplY3RfY2xpcF9nZXQo
c2QtPmJhY2tpbmdfc3RvcmUpOwogICAgICAgICBFdmFzX0Nvb3JkIHgsIHksIGN3LCBjaDsKLSAg
ICAgICAgZXZhc19vYmplY3RfaW1hZ2VfZmlsbF9zZXQoc2QtPmJhY2tpbmdfc3RvcmUsIDAsIDAs
IHcsIGgpOworICAgICAgICBldmFzX29iamVjdF9pbWFnZV9maWxsX3NldChzZC0+YmFja2luZ19z
dG9yZSwgMCwgMCwgd2lkdGgsIGhlaWdodCk7CiAgICAgICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5
X2dldChzZC0+YmFja2luZ19zdG9yZSwgJngsICZ5LCAwLCAwKTsKICAgICAgICAgZXZhc19vYmpl
Y3RfbW92ZShjbGlwLCB4LCB5KTsKICAgICAgICAgZXdrX2ZyYW1lX2NvbnRlbnRzX3NpemVfZ2V0
KHNkLT5tYWluX2ZyYW1lLCAmY3csICZjaCk7Ci0gICAgICAgIGlmICh3ID4gY3cpCi0gICAgICAg
ICAgICB3ID0gY3c7Ci0gICAgICAgIGlmIChoID4gY2gpCi0gICAgICAgICAgICBoID0gY2g7Ci0g
ICAgICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShjbGlwLCB3LCBoKTsKKyAgICAgICAgaWYgKHdpZHRo
ID4gY3cpCisgICAgICAgICAgICB3aWR0aCA9IGN3OworICAgICAgICBpZiAoaGVpZ2h0ID4gY2gp
CisgICAgICAgICAgICBoZWlnaHQgPSBjaDsKKyAgICAgICAgZXZhc19vYmplY3RfcmVzaXplKGNs
aXAsIHdpZHRoLCBoZWlnaHQpOwogICAgIH0KIH0KIAotc3RhdGljIGlubGluZSB2b2lkIF9ld2tf
dmlld180Yl9tb3ZlX3JlZ2lvbl91cCh1aW50MzJfdCogaW1hZ2UsIHNpemVfdCByb3dzLCBzaXpl
X3QgeCwgc2l6ZV90IHksIHNpemVfdCB3LCBzaXplX3QgaCwgc2l6ZV90IHJvd3NpemUpCitzdGF0
aWMgaW5saW5lIHZvaWQgX2V3a192aWV3XzRiX21vdmVfcmVnaW9uX3VwKHVpbnQzMl90KiBpbWFn
ZSwgc2l6ZV90IHJvd3MsIHNpemVfdCB4LCBzaXplX3QgeSwgc2l6ZV90IHdpZHRoLCBzaXplX3Qg
aGVpZ2h0LCBzaXplX3Qgcm93U2l6ZSkKIHsKICAgICB1aW50MzJfdCogc3JjOwogICAgIHVpbnQz
Ml90KiBkc3Q7CiAKLSAgICBkc3QgPSBpbWFnZSArIHggKyB5ICogcm93c2l6ZTsKLSAgICBzcmMg
PSBkc3QgKyByb3dzICogcm93c2l6ZTsKLSAgICBoIC09IHJvd3M7CisgICAgZHN0ID0gaW1hZ2Ug
KyB4ICsgeSAqIHJvd1NpemU7CisgICAgc3JjID0gZHN0ICsgcm93cyAqIHJvd1NpemU7CisgICAg
aGVpZ2h0IC09IHJvd3M7CiAKLSAgICBmb3IgKDsgaCA+IDA7IGgtLSwgZHN0ICs9IHJvd3NpemUs
IHNyYyArPSByb3dzaXplKQotICAgICAgICBtZW1jcHkoZHN0LCBzcmMsIHcgKiA0KTsKKyAgICBm
b3IgKDsgaGVpZ2h0ID4gMDsgaGVpZ2h0LS0sIGRzdCArPSByb3dTaXplLCBzcmMgKz0gcm93U2l6
ZSkKKyAgICAgICAgbWVtY3B5KGRzdCwgc3JjLCB3aWR0aCAqIDQpOwogfQogCi1zdGF0aWMgaW5s
aW5lIHZvaWQgX2V3a192aWV3XzRiX21vdmVfcmVnaW9uX2Rvd24odWludDMyX3QqIGltYWdlLCBz
aXplX3Qgcm93cywgc2l6ZV90IHgsIHNpemVfdCB5LCBzaXplX3Qgdywgc2l6ZV90IGgsIHNpemVf
dCByb3dzaXplKQorc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdmlld180Yl9tb3ZlX3JlZ2lvbl9k
b3duKHVpbnQzMl90KiBpbWFnZSwgc2l6ZV90IHJvd3MsIHNpemVfdCB4LCBzaXplX3QgeSwgc2l6
ZV90IHdpZHRoLCBzaXplX3QgaGVpZ2h0LCBzaXplX3Qgcm93U2l6ZSkKIHsKICAgICB1aW50MzJf
dCogc3JjOwogICAgIHVpbnQzMl90KiBkc3Q7CiAKLSAgICBoIC09IHJvd3M7Ci0gICAgc3JjID0g
aW1hZ2UgKyB4ICsgKHkgKyBoIC0gMSkgKiByb3dzaXplOwotICAgIGRzdCA9IHNyYyArIHJvd3Mg
KiByb3dzaXplOworICAgIGhlaWdodCAtPSByb3dzOworICAgIHNyYyA9IGltYWdlICsgeCArICh5
ICsgaGVpZ2h0IC0gMSkgKiByb3dTaXplOworICAgIGRzdCA9IHNyYyArIHJvd3MgKiByb3dTaXpl
OwogCi0gICAgZm9yICg7IGggPiAwOyBoLS0sIGRzdCAtPSByb3dzaXplLCBzcmMgLT0gcm93c2l6
ZSkKLSAgICAgICAgbWVtY3B5KGRzdCwgc3JjLCB3ICogNCk7CisgICAgZm9yICg7IGhlaWdodCA+
IDA7IGhlaWdodC0tLCBkc3QgLT0gcm93U2l6ZSwgc3JjIC09IHJvd1NpemUpCisgICAgICAgIG1l
bWNweShkc3QsIHNyYywgd2lkdGggKiA0KTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIF9ld2tf
dmlld180Yl9tb3ZlX2xpbmVfbGVmdCh1aW50MzJfdCogZHN0LCBjb25zdCB1aW50MzJfdCogc3Jj
LCBzaXplX3QgY291bnQpCkBAIC0xMzYsOTAgKzEzNCw5MCBAQCBzdGF0aWMgaW5saW5lIHZvaWQg
X2V3a192aWV3XzRiX21vdmVfbGluZV9yaWdodCh1aW50MzJfdCogZHN0LCB1aW50MzJfdCogc3Jj
LCBzaQogICAgICAgICAqZHN0ID0gKnNyYzsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIF9ld2tf
dmlld180Yl9tb3ZlX3JlZ2lvbl9sZWZ0KHVpbnQzMl90KiBpbWFnZSwgc2l6ZV90IGNvbHMsIHNp
emVfdCB4LCBzaXplX3QgeSwgc2l6ZV90IHcsIHNpemVfdCBoLCBzaXplX3Qgcm93c2l6ZSkKK3N0
YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3ZpZXdfNGJfbW92ZV9yZWdpb25fbGVmdCh1aW50MzJfdCog
aW1hZ2UsIHNpemVfdCBjb2xzLCBzaXplX3QgeCwgc2l6ZV90IHksIHNpemVfdCB3aWR0aCwgc2l6
ZV90IGhlaWdodCwgc2l6ZV90IHJvd1NpemUpCiB7CiAgICAgdWludDMyX3QqIHNyYzsKICAgICB1
aW50MzJfdCogZHN0OwogCi0gICAgZHN0ID0gaW1hZ2UgKyB4ICsgeSAqIHJvd3NpemU7CisgICAg
ZHN0ID0gaW1hZ2UgKyB4ICsgeSAqIHJvd1NpemU7CiAgICAgc3JjID0gZHN0ICsgY29sczsKLSAg
ICB3IC09IGNvbHM7CisgICAgd2lkdGggLT0gY29sczsKIAotICAgIGZvciAoOyBoID4gMDsgaC0t
LCBkc3QgKz0gcm93c2l6ZSwgc3JjICs9IHJvd3NpemUpCi0gICAgICAgIF9ld2tfdmlld180Yl9t
b3ZlX2xpbmVfbGVmdChkc3QsIHNyYywgdyk7CisgICAgZm9yICg7IGhlaWdodCA+IDA7IGhlaWdo
dC0tLCBkc3QgKz0gcm93U2l6ZSwgc3JjICs9IHJvd1NpemUpCisgICAgICAgIF9ld2tfdmlld180
Yl9tb3ZlX2xpbmVfbGVmdChkc3QsIHNyYywgd2lkdGgpOwogfQogCi1zdGF0aWMgaW5saW5lIHZv
aWQgX2V3a192aWV3XzRiX21vdmVfcmVnaW9uX3JpZ2h0KHVpbnQzMl90KiBpbWFnZSwgc2l6ZV90
IGNvbHMsIHNpemVfdCB4LCBzaXplX3QgeSwgc2l6ZV90IHcsIHNpemVfdCBoLCBzaXplX3Qgcm93
c2l6ZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3ZpZXdfNGJfbW92ZV9yZWdpb25fcmlnaHQo
dWludDMyX3QqIGltYWdlLCBzaXplX3QgY29sdW1ucywgc2l6ZV90IHgsIHNpemVfdCB5LCBzaXpl
X3Qgd2lkdGgsIHNpemVfdCBoZWlnaHQsIHNpemVfdCByb3dTaXplKQogewogICAgIHVpbnQzMl90
KiBzcmM7CiAgICAgdWludDMyX3QqIGRzdDsKIAotICAgIHcgLT0gY29sczsKLSAgICBzcmMgPSBp
bWFnZSArICh4ICsgdyAtIDEpICsgeSAqIHJvd3NpemU7Ci0gICAgZHN0ID0gc3JjICsgY29sczsK
KyAgICB3aWR0aCAtPSBjb2x1bW5zOworICAgIHNyYyA9IGltYWdlICsgKHggKyB3aWR0aCAtIDEp
ICsgeSAqIHJvd1NpemU7CisgICAgZHN0ID0gc3JjICsgY29sdW1uczsKIAotICAgIGZvciAoOyBo
ID4gMDsgaC0tLCBkc3QgKz0gcm93c2l6ZSwgc3JjICs9IHJvd3NpemUpCi0gICAgICAgIF9ld2tf
dmlld180Yl9tb3ZlX2xpbmVfcmlnaHQoZHN0LCBzcmMsIHcpOworICAgIGZvciAoOyBoZWlnaHQg
PiAwOyBoZWlnaHQtLSwgZHN0ICs9IHJvd1NpemUsIHNyYyArPSByb3dTaXplKQorICAgICAgICBf
ZXdrX3ZpZXdfNGJfbW92ZV9saW5lX3JpZ2h0KGRzdCwgc3JjLCB3aWR0aCk7CiB9CiAKIC8qIGNh
dGNoLWFsbCBmdW5jdGlvbiwgbm90IGFzIG9wdGltaXplZCBhcyB0aGUgb3RoZXJzLCBidXQgZG9l
cyB0aGUgd29yay4gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3ZpZXdfNGJfbW92ZV9yZWdp
b24odWludDMyX3QqIGltYWdlLCBpbnQgZHgsIGludCBkeSwgc2l6ZV90IHgsIHNpemVfdCB5LCBz
aXplX3Qgdywgc2l6ZV90IGgsIHNpemVfdCByb3dzaXplKQorc3RhdGljIGlubGluZSB2b2lkIF9l
d2tfdmlld180Yl9tb3ZlX3JlZ2lvbih1aW50MzJfdCogaW1hZ2UsIGludCBkZWx0YVgsIGludCBk
ZWx0YVksIHNpemVfdCB4LCBzaXplX3QgeSwgc2l6ZV90IHdpZHRoLCBzaXplX3QgaGVpZ2h0LCBz
aXplX3Qgcm93U2l6ZSkKIHsKICAgICB1aW50MzJfdCogc3JjOwogICAgIHVpbnQzMl90KiBkc3Q7
CiAKLSAgICBpZiAoZHkgPCAwKSB7Ci0gICAgICAgIGggKz0gZHk7Ci0gICAgICAgIGRzdCA9IGlt
YWdlICsgeCArIHkgKiByb3dzaXplOwotICAgICAgICBzcmMgPSBkc3QgLSBkeSAqIHJvd3NpemU7
Ci0gICAgICAgIGlmIChkeCA8PSAwKSB7Ci0gICAgICAgICAgICB3ICs9IGR4OwotICAgICAgICAg
ICAgc3JjIC09IGR4OwotICAgICAgICAgICAgZm9yICg7IGggPiAwOyBoLS0sIGRzdCArPSByb3dz
aXplLCBzcmMgKz0gcm93c2l6ZSkKLSAgICAgICAgICAgICAgICBfZXdrX3ZpZXdfNGJfbW92ZV9s
aW5lX2xlZnQoZHN0LCBzcmMsIHcpOworICAgIGlmIChkZWx0YVkgPCAwKSB7CisgICAgICAgIGhl
aWdodCArPSBkZWx0YVk7CisgICAgICAgIGRzdCA9IGltYWdlICsgeCArIHkgKiByb3dTaXplOwor
ICAgICAgICBzcmMgPSBkc3QgLSBkZWx0YVkgKiByb3dTaXplOworICAgICAgICBpZiAoZGVsdGFY
IDw9IDApIHsKKyAgICAgICAgICAgIHdpZHRoICs9IGRlbHRhWDsKKyAgICAgICAgICAgIHNyYyAt
PSBkZWx0YVg7CisgICAgICAgICAgICBmb3IgKDsgaGVpZ2h0ID4gMDsgaGVpZ2h0LS0sIGRzdCAr
PSByb3dTaXplLCBzcmMgKz0gcm93U2l6ZSkKKyAgICAgICAgICAgICAgICBfZXdrX3ZpZXdfNGJf
bW92ZV9saW5lX2xlZnQoZHN0LCBzcmMsIHdpZHRoKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgIHcgLT0gZHg7Ci0gICAgICAgICAgICBzcmMgKz0gdyAtIDE7Ci0gICAgICAgICAgICBk
c3QgKz0gdyArIGR4IC0xOwotICAgICAgICAgICAgZm9yICg7IGggPiAwOyBoLS0sIGRzdCArPSBy
b3dzaXplLCBzcmMgKz0gcm93c2l6ZSkKLSAgICAgICAgICAgICAgICBfZXdrX3ZpZXdfNGJfbW92
ZV9saW5lX3JpZ2h0KGRzdCwgc3JjLCB3KTsKKyAgICAgICAgICAgIHdpZHRoIC09IGRlbHRhWDsK
KyAgICAgICAgICAgIHNyYyArPSB3aWR0aCAtIDE7CisgICAgICAgICAgICBkc3QgKz0gd2lkdGgg
KyBkZWx0YVggLTE7CisgICAgICAgICAgICBmb3IgKDsgaGVpZ2h0ID4gMDsgaGVpZ2h0LS0sIGRz
dCArPSByb3dTaXplLCBzcmMgKz0gcm93U2l6ZSkKKyAgICAgICAgICAgICAgICBfZXdrX3ZpZXdf
NGJfbW92ZV9saW5lX3JpZ2h0KGRzdCwgc3JjLCB3aWR0aCk7CiAgICAgICAgIH0KICAgICB9IGVs
c2UgewotICAgICAgICBoIC09IGR5OwotICAgICAgICBzcmMgPSBpbWFnZSArIHggKyAoeSArIGgg
LSAxKSAqIHJvd3NpemU7Ci0gICAgICAgIGRzdCA9IHNyYyArIGR5ICogcm93c2l6ZTsKLSAgICAg
ICAgaWYgKGR4IDw9IDApIHsKLSAgICAgICAgICAgIHcgKz0gZHg7Ci0gICAgICAgICAgICBzcmMg
LT0gZHg7Ci0gICAgICAgICAgICBmb3IgKDsgaCA+IDA7IGgtLSwgZHN0IC09IHJvd3NpemUsIHNy
YyAtPSByb3dzaXplKQotICAgICAgICAgICAgICAgIF9ld2tfdmlld180Yl9tb3ZlX2xpbmVfbGVm
dChkc3QsIHNyYywgdyk7CisgICAgICAgIGhlaWdodCAtPSBkZWx0YVk7CisgICAgICAgIHNyYyA9
IGltYWdlICsgeCArICh5ICsgaGVpZ2h0IC0gMSkgKiByb3dTaXplOworICAgICAgICBkc3QgPSBz
cmMgKyBkZWx0YVkgKiByb3dTaXplOworICAgICAgICBpZiAoZGVsdGFYIDw9IDApIHsKKyAgICAg
ICAgICAgIHdpZHRoICs9IGRlbHRhWDsKKyAgICAgICAgICAgIHNyYyAtPSBkZWx0YVg7CisgICAg
ICAgICAgICBmb3IgKDsgaGVpZ2h0ID4gMDsgaGVpZ2h0LS0sIGRzdCAtPSByb3dTaXplLCBzcmMg
LT0gcm93U2l6ZSkKKyAgICAgICAgICAgICAgICBfZXdrX3ZpZXdfNGJfbW92ZV9saW5lX2xlZnQo
ZHN0LCBzcmMsIHdpZHRoKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHcgLT0gZHg7
Ci0gICAgICAgICAgICBzcmMgKz0gdyAtIDE7Ci0gICAgICAgICAgICBkc3QgKz0gdyArIGR4IC0g
MTsKLSAgICAgICAgICAgIGZvciAoOyBoID4gMDsgaC0tLCBkc3QgLT0gcm93c2l6ZSwgc3JjIC09
IHJvd3NpemUpCi0gICAgICAgICAgICAgICAgX2V3a192aWV3XzRiX21vdmVfbGluZV9yaWdodChk
c3QsIHNyYywgdyk7CisgICAgICAgICAgICB3aWR0aCAtPSBkZWx0YVg7CisgICAgICAgICAgICBz
cmMgKz0gd2lkdGggLSAxOworICAgICAgICAgICAgZHN0ICs9IHdpZHRoICsgZGVsdGFYIC0gMTsK
KyAgICAgICAgICAgIGZvciAoOyBoZWlnaHQgPiAwOyBoZWlnaHQtLSwgZHN0IC09IHJvd1NpemUs
IHNyYyAtPSByb3dTaXplKQorICAgICAgICAgICAgICAgIF9ld2tfdmlld180Yl9tb3ZlX2xpbmVf
cmlnaHQoZHN0LCBzcmMsIHdpZHRoKTsKICAgICAgICAgfQogICAgIH0KIH0KIAotc3RhdGljIGlu
bGluZSB2b2lkIF9ld2tfdmlld19zaW5nbGVfc2Nyb2xsX3Byb2Nlc3Nfc2luZ2xlKEV3a19WaWV3
X1NtYXJ0X0RhdGEqIHNkLCB2b2lkKiBwaXhlbHMsIEV2YXNfQ29vcmQgb3csIEV2YXNfQ29vcmQg
b2gsIGNvbnN0IEV3a19TY3JvbGxfUmVxdWVzdCogc3IpCitzdGF0aWMgaW5saW5lIHZvaWQgX2V3
a192aWV3X3NpbmdsZV9zY3JvbGxfcHJvY2Vzc19zaW5nbGUoRXdrX1ZpZXdfU21hcnRfRGF0YSog
c21hcnREYXRhLCB2b2lkKiBwaXhlbHMsIEV2YXNfQ29vcmQgd2lkdGgsIEV2YXNfQ29vcmQgaGVp
Z2h0LCBjb25zdCBFd2tfU2Nyb2xsX1JlcXVlc3QqIHNjcm9sbFJlcXVlc3QpCiB7CiAgICAgRXZh
c19Db29yZCBzeCwgc3ksIHN3LCBzaDsKIAogICAgIERCRygiJWQsJWQgKyAlZCwlZCAlKzAzZCwl
KzAzZCwgc3RvcmU6ICVwICVkeCVkIiwKLSAgICAgICAgc3ItPngsIHNyLT55LCBzci0+dywgc3It
PmgsIHNyLT5keCwgc3ItPmR5LCBwaXhlbHMsIG93LCBvaCk7CisgICAgICAgIHNjcm9sbFJlcXVl
c3QtPngsIHNjcm9sbFJlcXVlc3QtPnksIHNjcm9sbFJlcXVlc3QtPncsIHNjcm9sbFJlcXVlc3Qt
PmgsIHNjcm9sbFJlcXVlc3QtPmR4LCBzY3JvbGxSZXF1ZXN0LT5keSwgcGl4ZWxzLCB3aWR0aCwg
aGVpZ2h0KTsKIAotICAgIHN4ID0gc3ItPng7Ci0gICAgc3kgPSBzci0+eTsKLSAgICBzdyA9IHNy
LT53OwotICAgIHNoID0gc3ItPmg7CisgICAgc3ggPSBzY3JvbGxSZXF1ZXN0LT54OworICAgIHN5
ID0gc2Nyb2xsUmVxdWVzdC0+eTsKKyAgICBzdyA9IHNjcm9sbFJlcXVlc3QtPnc7CisgICAgc2gg
PSBzY3JvbGxSZXF1ZXN0LT5oOwogCi0gICAgaWYgKGFicyhzci0+ZHgpID49IHN3IHx8IGFicyhz
ci0+ZHkpID49IHNoKSB7CisgICAgaWYgKGFicyhzY3JvbGxSZXF1ZXN0LT5keCkgPj0gc3cgfHwg
YWJzKHNjcm9sbFJlcXVlc3QtPmR5KSA+PSBzaCkgewogICAgICAgICAvKiBkb3VidCB3ZWJraXQg
d291bGQgYmUgc28gc3R1cGlkLi4uICovCiAgICAgICAgIERCRygiZnVsbCBwYWdlIHNjcm9sbCAl
KzAzZCwlKzAzZC4gY29udmVydCB0byByZXBhaW50ICVkLCVkICsgJWR4JWQiLAotICAgICAgICAg
ICAgc3ItPmR4LCBzci0+ZHksIHN4LCBzeSwgc3csIHNoKTsKLSAgICAgICAgZXdrX3ZpZXdfcmVw
YWludF9hZGQoc2QtPl9wcml2LCBzeCwgc3ksIHN3LCBzaCk7CisgICAgICAgICAgICBzY3JvbGxS
ZXF1ZXN0LT5keCwgc2Nyb2xsUmVxdWVzdC0+ZHksIHN4LCBzeSwgc3csIHNoKTsKKyAgICAgICAg
ZXdrX3ZpZXdfcmVwYWludF9hZGQoc21hcnREYXRhLT5fcHJpdiwgc3gsIHN5LCBzdywgc2gpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0yMzIsMTAgKzIzMCwxMCBAQCBzdGF0aWMgaW5s
aW5lIHZvaWQgX2V3a192aWV3X3NpbmdsZV9zY3JvbGxfcHJvY2Vzc19zaW5nbGUoRXdrX1ZpZXdf
U21hcnRfRGF0YSogcwogICAgICAgICBzeSA9IDA7CiAgICAgfQogCi0gICAgaWYgKHN4ICsgc3cg
PiBvdykKLSAgICAgICAgc3cgPSBvdyAtIHN4OwotICAgIGlmIChzeSArIHNoID4gb2gpCi0gICAg
ICAgIHNoID0gb2ggLSBzeTsKKyAgICBpZiAoc3ggKyBzdyA+IHdpZHRoKQorICAgICAgICBzdyA9
IHdpZHRoIC0gc3g7CisgICAgaWYgKHN5ICsgc2ggPiBoZWlnaHQpCisgICAgICAgIHNoID0gaGVp
Z2h0IC0gc3k7CiAKICAgICBpZiAoc3cgPCAwKQogICAgICAgICBzdyA9IDA7CkBAIC0yNDMsODMg
KzI0MSw4MyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgX2V3a192aWV3X3NpbmdsZV9zY3JvbGxfcHJv
Y2Vzc19zaW5nbGUoRXdrX1ZpZXdfU21hcnRfRGF0YSogcwogICAgICAgICBzaCA9IDA7CiAKICAg
ICBFSU5BX1NBRkVUWV9PTl9UUlVFX1JFVFVSTighc3cgfHwgIXNoKTsKLSAgICBpZiAoIXNyLT5k
eCkgewotICAgICAgICBpZiAoc3ItPmR5IDwgMCkgeworICAgIGlmICghc2Nyb2xsUmVxdWVzdC0+
ZHgpIHsKKyAgICAgICAgaWYgKHNjcm9sbFJlcXVlc3QtPmR5IDwgMCkgewogICAgICAgICAgICAg
REJHKCJzY3JvbGwgdXA6ICUrMDNkLCUrMDNkIHVwZGF0ZT0lZCwlZCslZHglZCwgIgogICAgICAg
ICAgICAgICAgICJyZXBhaW50PSVkLCVkKyVkeCVkIiwKLSAgICAgICAgICAgICAgICBzci0+ZHgs
IHNyLT5keSwgc3gsIHN5LCBzdywgc2ggKyBzci0+ZHksCi0gICAgICAgICAgICAgICAgc3gsIHN5
ICsgc2ggKyBzci0+ZHksIHN3LCAtc3ItPmR5KTsKKyAgICAgICAgICAgICAgICBzY3JvbGxSZXF1
ZXN0LT5keCwgc2Nyb2xsUmVxdWVzdC0+ZHksIHN4LCBzeSwgc3csIHNoICsgc2Nyb2xsUmVxdWVz
dC0+ZHksCisgICAgICAgICAgICAgICAgc3gsIHN5ICsgc2ggKyBzY3JvbGxSZXF1ZXN0LT5keSwg
c3csIC1zY3JvbGxSZXF1ZXN0LT5keSk7CiAKICAgICAgICAgICAgIF9ld2tfdmlld180Yl9tb3Zl
X3JlZ2lvbl91cAotICAgICAgICAgICAgICAgIChzdGF0aWNfY2FzdDx1aW50MzJfdCo+KHBpeGVs
cyksIC1zci0+ZHksIHN4LCBzeSwgc3csIHNoLCBvdyk7CisgICAgICAgICAgICAgICAgKHN0YXRp
Y19jYXN0PHVpbnQzMl90Kj4ocGl4ZWxzKSwgLXNjcm9sbFJlcXVlc3QtPmR5LCBzeCwgc3ksIHN3
LCBzaCwgd2lkdGgpOwogICAgICAgICAgICAgZXZhc19vYmplY3RfaW1hZ2VfZGF0YV91cGRhdGVf
YWRkCi0gICAgICAgICAgICAgICAgKHNkLT5iYWNraW5nX3N0b3JlLCBzeCwgc3ksIHN3LCBzaCAr
IHNyLT5keSk7CisgICAgICAgICAgICAgICAgKHNtYXJ0RGF0YS0+YmFja2luZ19zdG9yZSwgc3gs
IHN5LCBzdywgc2ggKyBzY3JvbGxSZXF1ZXN0LT5keSk7CiAKLSAgICAgICAgICAgIGV3a192aWV3
X3JlcGFpbnRfYWRkKHNkLT5fcHJpdiwgc3gsIHN5ICsgc2ggKyBzci0+ZHksIHN3LCAtc3ItPmR5
KTsKLSAgICAgICAgfSBlbHNlIGlmIChzci0+ZHkgPiAwKSB7CisgICAgICAgICAgICBld2tfdmll
d19yZXBhaW50X2FkZChzbWFydERhdGEtPl9wcml2LCBzeCwgc3kgKyBzaCArIHNjcm9sbFJlcXVl
c3QtPmR5LCBzdywgLXNjcm9sbFJlcXVlc3QtPmR5KTsKKyAgICAgICAgfSBlbHNlIGlmIChzY3Jv
bGxSZXF1ZXN0LT5keSA+IDApIHsKICAgICAgICAgICAgIERCRygic2Nyb2xsIGRvd246ICUrMDNk
LCUrMDNkIHVwZGF0ZT0lZCwlZCslZHglZCwgIgogICAgICAgICAgICAgICAgICJyZXBhaW50PSVk
LCVkKyVkeCVkIiwKLSAgICAgICAgICAgICAgICBzci0+ZHgsIHNyLT5keSwgc3gsIHN5ICsgc3It
PmR5LCBzdywgc2ggLSBzci0+ZHksCi0gICAgICAgICAgICAgICAgc3gsIHN5LCBzdywgc3ItPmR5
KTsKKyAgICAgICAgICAgICAgICBzY3JvbGxSZXF1ZXN0LT5keCwgc2Nyb2xsUmVxdWVzdC0+ZHks
IHN4LCBzeSArIHNjcm9sbFJlcXVlc3QtPmR5LCBzdywgc2ggLSBzY3JvbGxSZXF1ZXN0LT5keSwK
KyAgICAgICAgICAgICAgICBzeCwgc3ksIHN3LCBzY3JvbGxSZXF1ZXN0LT5keSk7CiAKICAgICAg
ICAgICAgIF9ld2tfdmlld180Yl9tb3ZlX3JlZ2lvbl9kb3duCi0gICAgICAgICAgICAgICAgKHN0
YXRpY19jYXN0PHVpbnQzMl90Kj4ocGl4ZWxzKSwgc3ItPmR5LCBzeCwgc3ksIHN3LCBzaCwgb3cp
OworICAgICAgICAgICAgICAgIChzdGF0aWNfY2FzdDx1aW50MzJfdCo+KHBpeGVscyksIHNjcm9s
bFJlcXVlc3QtPmR5LCBzeCwgc3ksIHN3LCBzaCwgd2lkdGgpOwogICAgICAgICAgICAgZXZhc19v
YmplY3RfaW1hZ2VfZGF0YV91cGRhdGVfYWRkCi0gICAgICAgICAgICAgICAgKHNkLT5iYWNraW5n
X3N0b3JlLCBzeCwgc3kgKyBzci0+ZHksIHN3LCBzaCAtIHNyLT5keSk7CisgICAgICAgICAgICAg
ICAgKHNtYXJ0RGF0YS0+YmFja2luZ19zdG9yZSwgc3gsIHN5ICsgc2Nyb2xsUmVxdWVzdC0+ZHks
IHN3LCBzaCAtIHNjcm9sbFJlcXVlc3QtPmR5KTsKIAotICAgICAgICAgICAgZXdrX3ZpZXdfcmVw
YWludF9hZGQoc2QtPl9wcml2LCBzeCwgc3ksIHN3LCBzci0+ZHkpOworICAgICAgICAgICAgZXdr
X3ZpZXdfcmVwYWludF9hZGQoc21hcnREYXRhLT5fcHJpdiwgc3gsIHN5LCBzdywgc2Nyb2xsUmVx
dWVzdC0+ZHkpOwogICAgICAgICB9Ci0gICAgfSBlbHNlIGlmICghc3ItPmR5KSB7Ci0gICAgICAg
IGlmIChzci0+ZHggPCAwKSB7CisgICAgfSBlbHNlIGlmICghc2Nyb2xsUmVxdWVzdC0+ZHkpIHsK
KyAgICAgICAgaWYgKHNjcm9sbFJlcXVlc3QtPmR4IDwgMCkgewogICAgICAgICAgICAgREJHKCJz
Y3JvbGwgbGVmdDogJSswM2QsJSswM2QgdXBkYXRlPSVkLCVkKyVkeCVkLCAiCiAgICAgICAgICAg
ICAgICAgInJlcGFpbnQ9JWQsJWQrJWR4JWQiLAotICAgICAgICAgICAgICAgIHNyLT5keCwgc3It
PmR5LCBzeCwgc3ksIHN3ICsgc3ItPmR4LCBzaCwKLSAgICAgICAgICAgICAgICBzeCArIHN3ICsg
c3ItPmR4LCBzeSwgLXNyLT5keCwgc2gpOworICAgICAgICAgICAgICAgIHNjcm9sbFJlcXVlc3Qt
PmR4LCBzY3JvbGxSZXF1ZXN0LT5keSwgc3gsIHN5LCBzdyArIHNjcm9sbFJlcXVlc3QtPmR4LCBz
aCwKKyAgICAgICAgICAgICAgICBzeCArIHN3ICsgc2Nyb2xsUmVxdWVzdC0+ZHgsIHN5LCAtc2Ny
b2xsUmVxdWVzdC0+ZHgsIHNoKTsKIAogICAgICAgICAgICAgX2V3a192aWV3XzRiX21vdmVfcmVn
aW9uX2xlZnQKLSAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dWludDMyX3QqPihwaXhlbHMp
LCAtc3ItPmR4LCBzeCwgc3ksIHN3LCBzaCwgb3cpOworICAgICAgICAgICAgICAgIChzdGF0aWNf
Y2FzdDx1aW50MzJfdCo+KHBpeGVscyksIC1zY3JvbGxSZXF1ZXN0LT5keCwgc3gsIHN5LCBzdywg
c2gsIHdpZHRoKTsKICAgICAgICAgICAgIGV2YXNfb2JqZWN0X2ltYWdlX2RhdGFfdXBkYXRlX2Fk
ZAotICAgICAgICAgICAgICAgIChzZC0+YmFja2luZ19zdG9yZSwgc3gsIHN5LCBzdyArIHNyLT5k
eCwgc2gpOworICAgICAgICAgICAgICAgIChzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUsIHN4LCBz
eSwgc3cgKyBzY3JvbGxSZXF1ZXN0LT5keCwgc2gpOwogCi0gICAgICAgICAgICBld2tfdmlld19y
ZXBhaW50X2FkZChzZC0+X3ByaXYsIHN4ICsgc3cgKyBzci0+ZHgsIHN5LCAtc3ItPmR4LCBzaCk7
Ci0gICAgICAgIH0gZWxzZSBpZiAoc3ItPmR4ID4gMCkgeworICAgICAgICAgICAgZXdrX3ZpZXdf
cmVwYWludF9hZGQoc21hcnREYXRhLT5fcHJpdiwgc3ggKyBzdyArIHNjcm9sbFJlcXVlc3QtPmR4
LCBzeSwgLXNjcm9sbFJlcXVlc3QtPmR4LCBzaCk7CisgICAgICAgIH0gZWxzZSBpZiAoc2Nyb2xs
UmVxdWVzdC0+ZHggPiAwKSB7CiAgICAgICAgICAgICBEQkcoInNjcm9sbCB1cDogJSswM2QsJSsw
M2QgdXBkYXRlPSVkLCVkKyVkeCVkLCAiCiAgICAgICAgICAgICAgICAgInJlcGFpbnQ9JWQsJWQr
JWR4JWQiLAotICAgICAgICAgICAgICAgIHNyLT5keCwgc3ItPmR5LCBzeCArIHNyLT5keCwgc3ks
IHN3IC0gc3ItPmR4LCBzaCwKLSAgICAgICAgICAgICAgICBzeCwgc3ksIHNyLT5keCwgc2gpOwor
ICAgICAgICAgICAgICAgIHNjcm9sbFJlcXVlc3QtPmR4LCBzY3JvbGxSZXF1ZXN0LT5keSwgc3gg
KyBzY3JvbGxSZXF1ZXN0LT5keCwgc3ksIHN3IC0gc2Nyb2xsUmVxdWVzdC0+ZHgsIHNoLAorICAg
ICAgICAgICAgICAgIHN4LCBzeSwgc2Nyb2xsUmVxdWVzdC0+ZHgsIHNoKTsKIAogICAgICAgICAg
ICAgX2V3a192aWV3XzRiX21vdmVfcmVnaW9uX3JpZ2h0Ci0gICAgICAgICAgICAgICAgKHN0YXRp
Y19jYXN0PHVpbnQzMl90Kj4ocGl4ZWxzKSwgc3ItPmR4LCBzeCwgc3ksIHN3LCBzaCwgb3cpOwor
ICAgICAgICAgICAgICAgIChzdGF0aWNfY2FzdDx1aW50MzJfdCo+KHBpeGVscyksIHNjcm9sbFJl
cXVlc3QtPmR4LCBzeCwgc3ksIHN3LCBzaCwgd2lkdGgpOwogICAgICAgICAgICAgZXZhc19vYmpl
Y3RfaW1hZ2VfZGF0YV91cGRhdGVfYWRkCi0gICAgICAgICAgICAgICAgKHNkLT5iYWNraW5nX3N0
b3JlLCBzeCArIHNyLT5keCwgc3ksIHN3IC0gc3ItPmR4LCBzaCk7CisgICAgICAgICAgICAgICAg
KHNtYXJ0RGF0YS0+YmFja2luZ19zdG9yZSwgc3ggKyBzY3JvbGxSZXF1ZXN0LT5keCwgc3ksIHN3
IC0gc2Nyb2xsUmVxdWVzdC0+ZHgsIHNoKTsKIAotICAgICAgICAgICAgZXdrX3ZpZXdfcmVwYWlu
dF9hZGQoc2QtPl9wcml2LCBzeCwgc3ksIHNyLT5keCwgc2gpOworICAgICAgICAgICAgZXdrX3Zp
ZXdfcmVwYWludF9hZGQoc21hcnREYXRhLT5fcHJpdiwgc3gsIHN5LCBzY3JvbGxSZXF1ZXN0LT5k
eCwgc2gpOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgRXZhc19Db29yZCBteCwg
bXksIG13LCBtaCwgYXgsIGF5LCBhdywgYWgsIGJ4LCBieSwgYncsIGJoOwogCi0gICAgICAgIGlm
IChzci0+ZHggPCAwKSB7CisgICAgICAgIGlmIChzY3JvbGxSZXF1ZXN0LT5keCA8IDApIHsKICAg
ICAgICAgICAgIG14ID0gc3g7Ci0gICAgICAgICAgICBtdyA9IHN3ICsgc3ItPmR4OworICAgICAg
ICAgICAgbXcgPSBzdyArIHNjcm9sbFJlcXVlc3QtPmR4OwogICAgICAgICAgICAgYXggPSBteCAr
IG13OwotICAgICAgICAgICAgYXcgPSAtc3ItPmR4OworICAgICAgICAgICAgYXcgPSAtc2Nyb2xs
UmVxdWVzdC0+ZHg7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBheCA9IHN4OwotICAg
ICAgICAgICAgYXcgPSBzci0+ZHg7CisgICAgICAgICAgICBhdyA9IHNjcm9sbFJlcXVlc3QtPmR4
OwogICAgICAgICAgICAgbXggPSBheCArIGF3OwotICAgICAgICAgICAgbXcgPSBzdyAtIHNyLT5k
eDsKKyAgICAgICAgICAgIG13ID0gc3cgLSBzY3JvbGxSZXF1ZXN0LT5keDsKICAgICAgICAgfQog
Ci0gICAgICAgIGlmIChzci0+ZHkgPCAwKSB7CisgICAgICAgIGlmIChzY3JvbGxSZXF1ZXN0LT5k
eSA8IDApIHsKICAgICAgICAgICAgIG15ID0gc3k7Ci0gICAgICAgICAgICBtaCA9IHNoICsgc3It
PmR5OworICAgICAgICAgICAgbWggPSBzaCArIHNjcm9sbFJlcXVlc3QtPmR5OwogICAgICAgICAg
ICAgYnkgPSBteSArIG1oOwotICAgICAgICAgICAgYmggPSAtc3ItPmR5OworICAgICAgICAgICAg
YmggPSAtc2Nyb2xsUmVxdWVzdC0+ZHk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBi
eSA9IHN5OwotICAgICAgICAgICAgYmggPSBzci0+ZHk7CisgICAgICAgICAgICBiaCA9IHNjcm9s
bFJlcXVlc3QtPmR5OwogICAgICAgICAgICAgbXkgPSBieSArIGJoOwotICAgICAgICAgICAgbWgg
PSBzaCAtIHNyLT5keTsKKyAgICAgICAgICAgIG1oID0gc2ggLSBzY3JvbGxSZXF1ZXN0LT5keTsK
ICAgICAgICAgfQogCiAgICAgICAgIGF5ID0gbXk7CkBAIC0zMjksMzcgKzMyNywzNyBAQCBzdGF0
aWMgaW5saW5lIHZvaWQgX2V3a192aWV3X3NpbmdsZV9zY3JvbGxfcHJvY2Vzc19zaW5nbGUoRXdr
X1ZpZXdfU21hcnRfRGF0YSogcwogCiAgICAgICAgIERCRygic2Nyb2xsIGRpYWdvbmFsOiAlKzAz
ZCwlKzAzZCB1cGRhdGU9JWQsJWQrJWR4JWQsICIKICAgICAgICAgICAgICJyZXBhaW50czogaD0l
ZCwlZCslZHglZCB2PSVkLCVkKyVkeCVkIiwKLSAgICAgICAgICAgIHNyLT5keCwgc3ItPmR5LCBt
eCwgbXksIG13LCBtaCwgYXgsIGF5LCBhdywgYWgsIGJ4LCBieSwgYncsIGJoKTsKKyAgICAgICAg
ICAgIHNjcm9sbFJlcXVlc3QtPmR4LCBzY3JvbGxSZXF1ZXN0LT5keSwgbXgsIG15LCBtdywgbWgs
IGF4LCBheSwgYXcsIGFoLCBieCwgYnksIGJ3LCBiaCk7CiAKICAgICAgICAgX2V3a192aWV3XzRi
X21vdmVfcmVnaW9uCi0gICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dWludDMyX3QqPihwaXhlbHMp
LCBzci0+ZHgsIHNyLT5keSwgc3gsIHN5LCBzdywgc2gsIG93KTsKKyAgICAgICAgICAgIChzdGF0
aWNfY2FzdDx1aW50MzJfdCo+KHBpeGVscyksIHNjcm9sbFJlcXVlc3QtPmR4LCBzY3JvbGxSZXF1
ZXN0LT5keSwgc3gsIHN5LCBzdywgc2gsIHdpZHRoKTsKIAotICAgICAgICBldmFzX29iamVjdF9p
bWFnZV9kYXRhX3VwZGF0ZV9hZGQoc2QtPmJhY2tpbmdfc3RvcmUsIG14LCBteSwgbXcsIG1oKTsK
LSAgICAgICAgZXdrX3ZpZXdfcmVwYWludF9hZGQoc2QtPl9wcml2LCBheCwgYXksIGF3LCBhaCk7
Ci0gICAgICAgIGV3a192aWV3X3JlcGFpbnRfYWRkKHNkLT5fcHJpdiwgYngsIGJ5LCBidywgYmgp
OworICAgICAgICBldmFzX29iamVjdF9pbWFnZV9kYXRhX3VwZGF0ZV9hZGQoc21hcnREYXRhLT5i
YWNraW5nX3N0b3JlLCBteCwgbXksIG13LCBtaCk7CisgICAgICAgIGV3a192aWV3X3JlcGFpbnRf
YWRkKHNtYXJ0RGF0YS0+X3ByaXYsIGF4LCBheSwgYXcsIGFoKTsKKyAgICAgICAgZXdrX3ZpZXdf
cmVwYWludF9hZGQoc21hcnREYXRhLT5fcHJpdiwgYngsIGJ5LCBidywgYmgpOwogICAgIH0KIH0K
IAotc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0X3Njcm9sbHNfcHJvY2Vz
cyhFd2tfVmlld19TbWFydF9EYXRhKiBzZCkKK3N0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3Np
bmdsZV9zbWFydF9zY3JvbGxzX3Byb2Nlc3MoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRh
KQogewogICAgIGNvbnN0IEV3a19TY3JvbGxfUmVxdWVzdCogc3I7CiAgICAgY29uc3QgRXdrX1Nj
cm9sbF9SZXF1ZXN0KiBzcl9lbmQ7CiAgICAgRXZhc19Db29yZCBvdywgb2g7CiAgICAgc2l6ZV90
IGNvdW50OwotICAgIHZvaWQqIHBpeGVscyA9IGV2YXNfb2JqZWN0X2ltYWdlX2RhdGFfZ2V0KHNk
LT5iYWNraW5nX3N0b3JlLCAxKTsKLSAgICBldmFzX29iamVjdF9pbWFnZV9zaXplX2dldChzZC0+
YmFja2luZ19zdG9yZSwgJm93LCAmb2gpOworICAgIHZvaWQqIHBpeGVscyA9IGV2YXNfb2JqZWN0
X2ltYWdlX2RhdGFfZ2V0KHNtYXJ0RGF0YS0+YmFja2luZ19zdG9yZSwgMSk7CisgICAgZXZhc19v
YmplY3RfaW1hZ2Vfc2l6ZV9nZXQoc21hcnREYXRhLT5iYWNraW5nX3N0b3JlLCAmb3csICZvaCk7
CiAKLSAgICBzciA9IGV3a192aWV3X3Njcm9sbF9yZXF1ZXN0c19nZXQoc2QtPl9wcml2LCAmY291
bnQpOworICAgIHNyID0gZXdrX3ZpZXdfc2Nyb2xsX3JlcXVlc3RzX2dldChzbWFydERhdGEtPl9w
cml2LCAmY291bnQpOwogICAgIHNyX2VuZCA9IHNyICsgY291bnQ7CiAgICAgZm9yICg7IHNyIDwg
c3JfZW5kOyBzcisrKQotICAgICAgICBfZXdrX3ZpZXdfc2luZ2xlX3Njcm9sbF9wcm9jZXNzX3Np
bmdsZShzZCwgcGl4ZWxzLCBvdywgb2gsIHNyKTsKKyAgICAgICAgX2V3a192aWV3X3NpbmdsZV9z
Y3JvbGxfcHJvY2Vzc19zaW5nbGUoc21hcnREYXRhLCBwaXhlbHMsIG93LCBvaCwgc3IpOwogCi0g
ICAgZXZhc19vYmplY3RfaW1hZ2VfZGF0YV9zZXQoc2QtPmJhY2tpbmdfc3RvcmUsIHBpeGVscyk7
CisgICAgZXZhc19vYmplY3RfaW1hZ2VfZGF0YV9zZXQoc21hcnREYXRhLT5iYWNraW5nX3N0b3Jl
LCBwaXhlbHMpOwogCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotc3RhdGljIEVpbmFfQm9v
bCBfZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0X3JlcGFpbnRzX3Byb2Nlc3MoRXdrX1ZpZXdfU21hcnRf
RGF0YSogc2QpCitzdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19zaW5nbGVfc21hcnRfcmVwYWlu
dHNfcHJvY2VzcyhFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEpCiB7CiAgICAgRXdrX1Zp
ZXdfUGFpbnRfQ29udGV4dCogY3R4dDsKICAgICBFdmFzX0Nvb3JkIG93LCBvaDsKQEAgLTM3Niwx
OCArMzc0LDE4IEBAIHN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3NpbmdsZV9zbWFydF9yZXBh
aW50c19wcm9jZXNzKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkCiAgICAgc2l6ZV90IGNvdW50Owog
ICAgIEVpbmFfQm9vbCByZXQgPSBFSU5BX1RSVUU7CiAKLSAgICBpZiAoc2QtPmFuaW1hdGVkX3pv
b20uem9vbS5jdXJyZW50IDwgMC4wMDAwMSkgewotICAgICAgICBFdmFzX09iamVjdCogY2xpcCA9
IGV2YXNfb2JqZWN0X2NsaXBfZ2V0KHNkLT5iYWNraW5nX3N0b3JlKTsKKyAgICBpZiAoc21hcnRE
YXRhLT5hbmltYXRlZF96b29tLnpvb20uY3VycmVudCA8IDAuMDAwMDEpIHsKKyAgICAgICAgRXZh
c19PYmplY3QqIGNsaXAgPSBldmFzX29iamVjdF9jbGlwX2dldChzbWFydERhdGEtPmJhY2tpbmdf
c3RvcmUpOwogICAgICAgICBFdmFzX0Nvb3JkIHcsIGgsIGN3LCBjaDsKICAgICAgICAgLy8gcmVz
ZXQgZWZmZWN0cyBvZiB6b29tX3dlYWtfc2V0KCkKICAgICAgICAgZXZhc19vYmplY3RfaW1hZ2Vf
ZmlsbF9zZXQKLSAgICAgICAgICAgIChzZC0+YmFja2luZ19zdG9yZSwgMCwgMCwgc2QtPnZpZXcu
dywgc2QtPnZpZXcuaCk7Ci0gICAgICAgIGV2YXNfb2JqZWN0X21vdmUoY2xpcCwgc2QtPnZpZXcu
eCwgc2QtPnZpZXcueSk7CisgICAgICAgICAgICAoc21hcnREYXRhLT5iYWNraW5nX3N0b3JlLCAw
LCAwLCBzbWFydERhdGEtPnZpZXcudywgc21hcnREYXRhLT52aWV3LmgpOworICAgICAgICBldmFz
X29iamVjdF9tb3ZlKGNsaXAsIHNtYXJ0RGF0YS0+dmlldy54LCBzbWFydERhdGEtPnZpZXcueSk7
CiAKLSAgICAgICAgdyA9IHNkLT52aWV3Lnc7Ci0gICAgICAgIGggPSBzZC0+dmlldy5oOworICAg
ICAgICB3ID0gc21hcnREYXRhLT52aWV3Lnc7CisgICAgICAgIGggPSBzbWFydERhdGEtPnZpZXcu
aDsKIAotICAgICAgICBld2tfZnJhbWVfY29udGVudHNfc2l6ZV9nZXQoc2QtPm1haW5fZnJhbWUs
ICZjdywgJmNoKTsKKyAgICAgICAgZXdrX2ZyYW1lX2NvbnRlbnRzX3NpemVfZ2V0KHNtYXJ0RGF0
YS0+bWFpbl9mcmFtZSwgJmN3LCAmY2gpOwogICAgICAgICBpZiAodyA+IGN3KQogICAgICAgICAg
ICAgdyA9IGN3OwogICAgICAgICBpZiAoaCA+IGNoKQpAQCAtMzk1LDggKzM5Myw4IEBAIHN0YXRp
YyBFaW5hX0Jvb2wgX2V3a192aWV3X3NpbmdsZV9zbWFydF9yZXBhaW50c19wcm9jZXNzKEV3a19W
aWV3X1NtYXJ0X0RhdGEqIHNkCiAgICAgICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShjbGlwLCB3LCBo
KTsKICAgICB9CiAKLSAgICBwaXhlbHMgPSBldmFzX29iamVjdF9pbWFnZV9kYXRhX2dldChzZC0+
YmFja2luZ19zdG9yZSwgMSk7Ci0gICAgZXZhc19vYmplY3RfaW1hZ2Vfc2l6ZV9nZXQoc2QtPmJh
Y2tpbmdfc3RvcmUsICZvdywgJm9oKTsKKyAgICBwaXhlbHMgPSBldmFzX29iamVjdF9pbWFnZV9k
YXRhX2dldChzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUsIDEpOworICAgIGV2YXNfb2JqZWN0X2lt
YWdlX3NpemVfZ2V0KHNtYXJ0RGF0YS0+YmFja2luZ19zdG9yZSwgJm93LCAmb2gpOwogICAgIGZv
cm1hdCA9IENBSVJPX0ZPUk1BVF9BUkdCMzI7CiAKICAgICBzdXJmYWNlID0gY2Fpcm9faW1hZ2Vf
c3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEKQEAgLTQxNyw3ICs0MTUsNyBAQCBzdGF0aWMgRWluYV9C
b29sIF9ld2tfdmlld19zaW5nbGVfc21hcnRfcmVwYWludHNfcHJvY2VzcyhFd2tfVmlld19TbWFy
dF9EYXRhKiBzZAogICAgICAgICBnb3RvIGVycm9yX2NhaXJvOwogICAgIH0KIAotICAgIGN0eHQg
PSBld2tfdmlld19wYWludF9jb250ZXh0X25ldyhzZC0+X3ByaXYsIGNhaXJvKTsKKyAgICBjdHh0
ID0gZXdrX3ZpZXdfcGFpbnRfY29udGV4dF9uZXcoc21hcnREYXRhLT5fcHJpdiwgY2Fpcm8pOwog
ICAgIGlmICghY3R4dCkgewogICAgICAgICBFUlIoImNvdWxkIG5vdCBjcmVhdGUgcGFpbnQgY29u
dGV4dCIpOwogICAgICAgICByZXQgPSBFSU5BX0ZBTFNFOwpAQCAtNDMxLDcgKzQyOSw3IEBAIHN0
YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3NpbmdsZV9zbWFydF9yZXBhaW50c19wcm9jZXNzKEV3
a19WaWV3X1NtYXJ0X0RhdGEqIHNkCiAgICAgICAgIGdvdG8gZXJyb3JfdGlsZXI7CiAgICAgfQog
Ci0gICAgcHIgPSBld2tfdmlld19yZXBhaW50c19nZXQoc2QtPl9wcml2LCAmY291bnQpOworICAg
IHByID0gZXdrX3ZpZXdfcmVwYWludHNfZ2V0KHNtYXJ0RGF0YS0+X3ByaXYsICZjb3VudCk7CiAg
ICAgcHJfZW5kID0gcHIgKyBjb3VudDsKICAgICBmb3IgKDsgcHIgPCBwcl9lbmQ7IHByKyspCiAg
ICAgICAgIGVpbmFfdGlsZXJfcmVjdF9hZGQodGlsZXIsIHByKTsKQEAgLTQ0MywxMCArNDQxLDEw
IEBAIHN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3NpbmdsZV9zbWFydF9yZXBhaW50c19wcm9j
ZXNzKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkCiAgICAgICAgIGdvdG8gZXJyb3JfaXRlcmF0b3I7
CiAgICAgfQogCi0gICAgZXdrX3ZpZXdfbGF5b3V0X2lmX25lZWRlZF9yZWN1cnNpdmUoc2QtPl9w
cml2KTsKKyAgICBld2tfdmlld19sYXlvdXRfaWZfbmVlZGVkX3JlY3Vyc2l2ZShzbWFydERhdGEt
Pl9wcml2KTsKIAogICAgIGludCBzeCwgc3k7Ci0gICAgZXdrX2ZyYW1lX3Njcm9sbF9wb3NfZ2V0
KHNkLT5tYWluX2ZyYW1lLCAmc3gsICZzeSk7CisgICAgZXdrX2ZyYW1lX3Njcm9sbF9wb3NfZ2V0
KHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSwgJnN4LCAmc3kpOwogCiAgICAgRUlOQV9JVEVSQVRPUl9G
T1JFQUNIKGl0ciwgcikgewogICAgICAgICBFaW5hX1JlY3RhbmdsZSBzY3JvbGxlZF9yZWN0ID0g
ewpAQCAtNDY0LDcgKzQ2Miw3IEBAIHN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3NpbmdsZV9z
bWFydF9yZXBhaW50c19wcm9jZXNzKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkCiAKICAgICAgICAg
ZXdrX3ZpZXdfcGFpbnRfY29udGV4dF9yZXN0b3JlKGN0eHQpOwogICAgICAgICBldmFzX29iamVj
dF9pbWFnZV9kYXRhX3VwZGF0ZV9hZGQKLSAgICAgICAgICAgIChzZC0+YmFja2luZ19zdG9yZSwg
ci0+eCwgci0+eSwgci0+dywgci0+aCk7CisgICAgICAgICAgICAoc21hcnREYXRhLT5iYWNraW5n
X3N0b3JlLCByLT54LCByLT55LCByLT53LCByLT5oKTsKICAgICB9CiAgICAgZWluYV9pdGVyYXRv
cl9mcmVlKGl0cik7CiAKQEAgLTQ3Nyw1NiArNDc1LDU2IEBAIGVycm9yX3BhaW50X2NvbnRleHQ6
CiBlcnJvcl9jYWlybzoKICAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3koc3VyZmFjZSk7CiBlcnJv
cl9jYWlyb19zdXJmYWNlOgotICAgIGV2YXNfb2JqZWN0X2ltYWdlX2RhdGFfc2V0KHNkLT5iYWNr
aW5nX3N0b3JlLCBwaXhlbHMpOyAvKiBkZWMgcmVmY291bnQgKi8KKyAgICBldmFzX29iamVjdF9p
bWFnZV9kYXRhX3NldChzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUsIHBpeGVscyk7IC8qIGRlYyBy
ZWZjb3VudCAqLwogCiAgICAgcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIEVpbmFfQm9vbCBfZXdr
X3ZpZXdfc2luZ2xlX3NtYXJ0X3pvb21fd2Vha19zZXQoRXdrX1ZpZXdfU21hcnRfRGF0YSogc2Qs
IGZsb2F0IHpvb20sIEV2YXNfQ29vcmQgY3gsIEV2YXNfQ29vcmQgY3kpCitzdGF0aWMgRWluYV9C
b29sIF9ld2tfdmlld19zaW5nbGVfc21hcnRfem9vbV93ZWFrX3NldChFd2tfVmlld19TbWFydF9E
YXRhKiBzbWFydERhdGEsIGZsb2F0IHpvb20sIEV2YXNfQ29vcmQgY2VudGVyWCwgRXZhc19Db29y
ZCBjZW50ZXJZKQogewogICAgIC8vIFRPRE86IHJldmlldwotICAgIGZsb2F0IHNjYWxlID0gem9v
bSAvIHNkLT5hbmltYXRlZF96b29tLnpvb20uc3RhcnQ7Ci0gICAgRXZhc19Db29yZCB3ID0gc2Qt
PnZpZXcudyAqIHNjYWxlOwotICAgIEV2YXNfQ29vcmQgaCA9IHNkLT52aWV3LmggKiBzY2FsZTsK
KyAgICBmbG9hdCBzY2FsZSA9IHpvb20gLyBzbWFydERhdGEtPmFuaW1hdGVkX3pvb20uem9vbS5z
dGFydDsKKyAgICBFdmFzX0Nvb3JkIHcgPSBzbWFydERhdGEtPnZpZXcudyAqIHNjYWxlOworICAg
IEV2YXNfQ29vcmQgaCA9IHNtYXJ0RGF0YS0+dmlldy5oICogc2NhbGU7CiAgICAgRXZhc19Db29y
ZCBkeCwgZHksIGN3LCBjaDsKLSAgICBFdmFzX09iamVjdCogY2xpcCA9IGV2YXNfb2JqZWN0X2Ns
aXBfZ2V0KHNkLT5iYWNraW5nX3N0b3JlKTsKKyAgICBFdmFzX09iamVjdCogY2xpcCA9IGV2YXNf
b2JqZWN0X2NsaXBfZ2V0KHNtYXJ0RGF0YS0+YmFja2luZ19zdG9yZSk7CiAKLSAgICBld2tfZnJh
bWVfY29udGVudHNfc2l6ZV9nZXQoc2QtPm1haW5fZnJhbWUsICZjdywgJmNoKTsKLSAgICBpZiAo
c2QtPnZpZXcudyA+IDAgJiYgc2QtPnZpZXcuaCA+IDApIHsKLSAgICAgICAgZHggPSAodyAqIChz
ZC0+dmlldy53IC0gY3gpKSAvIHNkLT52aWV3Lnc7Ci0gICAgICAgIGR5ID0gKGggKiAoc2QtPnZp
ZXcuaCAtIGN5KSkgLyBzZC0+dmlldy5oOworICAgIGV3a19mcmFtZV9jb250ZW50c19zaXplX2dl
dChzbWFydERhdGEtPm1haW5fZnJhbWUsICZjdywgJmNoKTsKKyAgICBpZiAoc21hcnREYXRhLT52
aWV3LncgPiAwICYmIHNtYXJ0RGF0YS0+dmlldy5oID4gMCkgeworICAgICAgICBkeCA9ICh3ICog
KHNtYXJ0RGF0YS0+dmlldy53IC0gY2VudGVyWCkpIC8gc21hcnREYXRhLT52aWV3Lnc7CisgICAg
ICAgIGR5ID0gKGggKiAoc21hcnREYXRhLT52aWV3LmggLSBjZW50ZXJZKSkgLyBzbWFydERhdGEt
PnZpZXcuaDsKICAgICB9IGVsc2UgewogICAgICAgICBkeCA9IDA7CiAgICAgICAgIGR5ID0gMDsK
ICAgICB9CiAKLSAgICBldmFzX29iamVjdF9pbWFnZV9maWxsX3NldChzZC0+YmFja2luZ19zdG9y
ZSwgY3ggKyBkeCwgY3kgKyBkeSwgdywgaCk7CisgICAgZXZhc19vYmplY3RfaW1hZ2VfZmlsbF9z
ZXQoc21hcnREYXRhLT5iYWNraW5nX3N0b3JlLCBjZW50ZXJYICsgZHgsIGNlbnRlclkgKyBkeSwg
dywgaCk7CiAKLSAgICBpZiAoc2QtPnZpZXcudyA+IDAgJiYgc2QtPnZpZXcuaCA+IDApIHsKLSAg
ICAgICAgZHggPSAoKHNkLT52aWV3LncgLSB3KSAqIGN4KSAvIHNkLT52aWV3Lnc7Ci0gICAgICAg
IGR5ID0gKChzZC0+dmlldy5oIC0gaCkgKiBjeSkgLyBzZC0+dmlldy5oOworICAgIGlmIChzbWFy
dERhdGEtPnZpZXcudyA+IDAgJiYgc21hcnREYXRhLT52aWV3LmggPiAwKSB7CisgICAgICAgIGR4
ID0gKChzbWFydERhdGEtPnZpZXcudyAtIHcpICogY2VudGVyWCkgLyBzbWFydERhdGEtPnZpZXcu
dzsKKyAgICAgICAgZHkgPSAoKHNtYXJ0RGF0YS0+dmlldy5oIC0gaCkgKiBjZW50ZXJZKSAvIHNt
YXJ0RGF0YS0+dmlldy5oOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGR4ID0gMDsKICAgICAgICAg
ZHkgPSAwOwogICAgIH0KLSAgICBldmFzX29iamVjdF9tb3ZlKGNsaXAsIHNkLT52aWV3LnggKyBk
eCwgc2QtPnZpZXcueSArIGR5KTsKKyAgICBldmFzX29iamVjdF9tb3ZlKGNsaXAsIHNtYXJ0RGF0
YS0+dmlldy54ICsgZHgsIHNtYXJ0RGF0YS0+dmlldy55ICsgZHkpOwogCi0gICAgaWYgKGN3IDwg
c2QtPnZpZXcudykKKyAgICBpZiAoY3cgPCBzbWFydERhdGEtPnZpZXcudykKICAgICAgICAgdyA9
IGN3ICogc2NhbGU7Ci0gICAgaWYgKGNoIDwgc2QtPnZpZXcuaCkKKyAgICBpZiAoY2ggPCBzbWFy
dERhdGEtPnZpZXcuaCkKICAgICAgICAgaCA9IGNoICogc2NhbGU7CiAgICAgZXZhc19vYmplY3Rf
cmVzaXplKGNsaXAsIHcsIGgpOwogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKLXN0YXRpYyB2
b2lkIF9ld2tfdmlld19zaW5nbGVfc21hcnRfem9vbV93ZWFrX3Ntb290aF9zY2FsZV9zZXQoRXdr
X1ZpZXdfU21hcnRfRGF0YSogc2QsIEVpbmFfQm9vbCBzbW9vdGhfc2NhbGUpCitzdGF0aWMgdm9p
ZCBfZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0X3pvb21fd2Vha19zbW9vdGhfc2NhbGVfc2V0KEV3a19W
aWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSwgRWluYV9Cb29sIHNtb290aF9zY2FsZSkKIHsKLSAg
ICBldmFzX29iamVjdF9pbWFnZV9zbW9vdGhfc2NhbGVfc2V0KHNkLT5iYWNraW5nX3N0b3JlLCBz
bW9vdGhfc2NhbGUpOworICAgIGV2YXNfb2JqZWN0X2ltYWdlX3Ntb290aF9zY2FsZV9zZXQoc21h
cnREYXRhLT5iYWNraW5nX3N0b3JlLCBzbW9vdGhfc2NhbGUpOwogfQogCi1zdGF0aWMgdm9pZCBf
ZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0X2JnX2NvbG9yX3NldChFd2tfVmlld19TbWFydF9EYXRhKiBz
ZCwgdW5zaWduZWQgY2hhciByLCB1bnNpZ25lZCBjaGFyIGcsIHVuc2lnbmVkIGNoYXIgYiwgdW5z
aWduZWQgY2hhciBhKQorc3RhdGljIHZvaWQgX2V3a192aWV3X3NpbmdsZV9zbWFydF9iZ19jb2xv
cl9zZXQoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhLCB1bnNpZ25lZCBjaGFyIHJlZCwg
dW5zaWduZWQgY2hhciBncmVlbiwgdW5zaWduZWQgY2hhciBibHVlLCB1bnNpZ25lZCBjaGFyIGFs
cGhhKQogewotICAgIGV2YXNfb2JqZWN0X2ltYWdlX2FscGhhX3NldChzZC0+YmFja2luZ19zdG9y
ZSwgYSA8IDI1NSk7CisgICAgZXZhc19vYmplY3RfaW1hZ2VfYWxwaGFfc2V0KHNtYXJ0RGF0YS0+
YmFja2luZ19zdG9yZSwgYWxwaGEgPCAyNTUpOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2lu
Z2xlX3NtYXJ0X3NldChFd2tfVmlld19TbWFydF9DbGFzcyogYXBpKQpAQCAtNTYzLDcgKzU2MSw3
IEBAIHN0YXRpYyBpbmxpbmUgRXZhc19TbWFydCogX2V3a192aWV3X3NpbmdsZV9zbWFydF9jbGFz
c19uZXcodm9pZCkKICAgICByZXR1cm4gc21hcnQ7CiB9CiAKLUV2YXNfT2JqZWN0KiBld2tfdmll
d19zaW5nbGVfYWRkKEV2YXMqIGUpCitFdmFzX09iamVjdCogZXdrX3ZpZXdfc2luZ2xlX2FkZChF
dmFzKiBjYW52YXMpCiB7Ci0gICAgcmV0dXJuIGV2YXNfb2JqZWN0X3NtYXJ0X2FkZChlLCBfZXdr
X3ZpZXdfc2luZ2xlX3NtYXJ0X2NsYXNzX25ldygpKTsKKyAgICByZXR1cm4gZXZhc19vYmplY3Rf
c21hcnRfYWRkKGNhbnZhcywgX2V3a192aWV3X3NpbmdsZV9zbWFydF9jbGFzc19uZXcoKSk7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXdfdGlsZWQuY3BwIGIv
U291cmNlL1dlYktpdC9lZmwvZXdrL2V3a192aWV3X3RpbGVkLmNwcAppbmRleCBmODdmNDhiZDlm
YTM0MGUwYjM0NjkyMTA2YWU0ZGMyNWViNTljNWU5Li4yYTA0NWEwN2RhMWMyZjE4NzgxNGJhMTY4
NmU2NmUxZTA1NDI4OTYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3Zp
ZXdfdGlsZWQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlld190aWxlZC5j
cHAKQEAgLTMwLDQ4ICszMCw0OCBAQAogCiBzdGF0aWMgRXdrX1ZpZXdfU21hcnRfQ2xhc3MgX3Bh
cmVudF9zYyA9IEVXS19WSUVXX1NNQVJUX0NMQVNTX0lOSVRfTlVMTDsKIAotc3RhdGljIEVpbmFf
Qm9vbCBfZXdrX3ZpZXdfdGlsZWRfcmVuZGVyX2NiKHZvaWQqIGRhdGEsIEV3a19UaWxlKiB0LCBj
b25zdCBFaW5hX1JlY3RhbmdsZSogYXJlYSkKK3N0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3Rp
bGVkX3JlbmRlcl9jYih2b2lkKiBkYXRhLCBFd2tfVGlsZSogdGlsZSwgY29uc3QgRWluYV9SZWN0
YW5nbGUqIGFyZWEpCiB7CiAgICAgRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKiBwcml2ID0gc3RhdGlj
X2Nhc3Q8RXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKj4oZGF0YSk7Ci0gICAgRWluYV9SZWN0YW5nbGUg
ciA9IHthcmVhLT54ICsgdC0+eCwgYXJlYS0+eSArIHQtPnksIGFyZWEtPncsIGFyZWEtPmh9Owor
ICAgIEVpbmFfUmVjdGFuZ2xlIHJlY3QgPSB7YXJlYS0+eCArIHRpbGUtPngsIGFyZWEtPnkgKyB0
aWxlLT55LCBhcmVhLT53LCBhcmVhLT5ofTsKIAotICAgIHJldHVybiBld2tfdmlld19wYWludF9j
b250ZW50cyhwcml2LCB0LT5jYWlybywgJnIpOworICAgIHJldHVybiBld2tfdmlld19wYWludF9j
b250ZW50cyhwcml2LCB0aWxlLT5jYWlybywgJnJlY3QpOwogfQogCi1zdGF0aWMgdm9pZCogX2V3
a192aWV3X3RpbGVkX3VwZGF0ZXNfcHJvY2Vzc19wcmUodm9pZCogZGF0YSwgRXZhc19PYmplY3Qq
IG8pCitzdGF0aWMgdm9pZCogX2V3a192aWV3X3RpbGVkX3VwZGF0ZXNfcHJvY2Vzc19wcmUodm9p
ZCogZGF0YSwgRXZhc19PYmplY3QqIGV3a1RpbGUpCiB7CiAgICAgRXdrX1ZpZXdfUHJpdmF0ZV9E
YXRhKiBwcml2ID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKj4oZGF0YSk7CiAg
ICAgZXdrX3ZpZXdfbGF5b3V0X2lmX25lZWRlZF9yZWN1cnNpdmUocHJpdik7CiAgICAgcmV0dXJu
IDA7CiB9CiAKLXN0YXRpYyBFdmFzX09iamVjdCogX2V3a192aWV3X3RpbGVkX3NtYXJ0X2JhY2tp
bmdfc3RvcmVfYWRkKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkKQorc3RhdGljIEV2YXNfT2JqZWN0
KiBfZXdrX3ZpZXdfdGlsZWRfc21hcnRfYmFja2luZ19zdG9yZV9hZGQoRXdrX1ZpZXdfU21hcnRf
RGF0YSogc21hcnREYXRhKQogewotICAgIEV2YXNfT2JqZWN0KiBicyA9IGV3a190aWxlZF9iYWNr
aW5nX3N0b3JlX2FkZChzZC0+YmFzZS5ldmFzKTsKKyAgICBFdmFzX09iamVjdCogYnMgPSBld2tf
dGlsZWRfYmFja2luZ19zdG9yZV9hZGQoc21hcnREYXRhLT5iYXNlLmV2YXMpOwogICAgIGV3a190
aWxlZF9iYWNraW5nX3N0b3JlX3JlbmRlcl9jYl9zZXQKLSAgICAgICAgKGJzLCBfZXdrX3ZpZXdf
dGlsZWRfcmVuZGVyX2NiLCBzZC0+X3ByaXYpOworICAgICAgICAoYnMsIF9ld2tfdmlld190aWxl
ZF9yZW5kZXJfY2IsIHNtYXJ0RGF0YS0+X3ByaXYpOwogICAgIGV3a190aWxlZF9iYWNraW5nX3N0
b3JlX3VwZGF0ZXNfcHJvY2Vzc19wcmVfc2V0Ci0gICAgICAgIChicywgX2V3a192aWV3X3RpbGVk
X3VwZGF0ZXNfcHJvY2Vzc19wcmUsIHNkLT5fcHJpdik7CisgICAgICAgIChicywgX2V3a192aWV3
X3RpbGVkX3VwZGF0ZXNfcHJvY2Vzc19wcmUsIHNtYXJ0RGF0YS0+X3ByaXYpOwogICAgIHJldHVy
biBiczsKIH0KIAogc3RhdGljIHZvaWQKLV9ld2tfdmlld190aWxlZF9jb250ZW50c19zaXplX2No
YW5nZWRfY2Iodm9pZCogZGF0YSwgRXZhc19PYmplY3QqIG8sIHZvaWQqIGV2ZW50X2luZm8pCitf
ZXdrX3ZpZXdfdGlsZWRfY29udGVudHNfc2l6ZV9jaGFuZ2VkX2NiKHZvaWQqIGRhdGEsIEV2YXNf
T2JqZWN0KiBld2tUaWxlLCB2b2lkKiBldmVudEluZm8pCiB7Ci0gICAgRXZhc19Db29yZCogc2l6
ZSA9IHN0YXRpY19jYXN0PEV2YXNfQ29vcmQqPihldmVudF9pbmZvKTsKLSAgICBFd2tfVmlld19T
bWFydF9EYXRhKiBzZCA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihkYXRhKTsK
KyAgICBFdmFzX0Nvb3JkKiBzaXplID0gc3RhdGljX2Nhc3Q8RXZhc19Db29yZCo+KGV2ZW50SW5m
byk7CisgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhID0gc3RhdGljX2Nhc3Q8RXdr
X1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEpOwogCiAgICAgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
Y29udGVudHNfcmVzaXplCi0gICAgICAgIChzZC0+YmFja2luZ19zdG9yZSwgc2l6ZVswXSwgc2l6
ZVsxXSk7CisgICAgICAgIChzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUsIHNpemVbMF0sIHNpemVb
MV0pOwogfQogCi1zdGF0aWMgdm9pZCBfZXdrX3ZpZXdfdGlsZWRfc21hcnRfYWRkKEV2YXNfT2Jq
ZWN0KiBvKQorc3RhdGljIHZvaWQgX2V3a192aWV3X3RpbGVkX3NtYXJ0X2FkZChFdmFzX09iamVj
dCogZXdrVGlsZSkKIHsKICAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzZDsKIAotICAgIF9wYXJl
bnRfc2Muc2MuYWRkKG8pOworICAgIF9wYXJlbnRfc2Muc2MuYWRkKGV3a1RpbGUpOwogCi0gICAg
c2QgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZXZhc19vYmplY3Rfc21hcnRf
ZGF0YV9nZXQobykpOworICAgIHNkID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+
KGV2YXNfb2JqZWN0X3NtYXJ0X2RhdGFfZ2V0KGV3a1RpbGUpKTsKICAgICBpZiAoIXNkKQogICAg
ICAgICByZXR1cm47CiAKQEAgLTgxLDIxICs4MSwyMSBAQCBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdf
dGlsZWRfc21hcnRfYWRkKEV2YXNfT2JqZWN0KiBvKQogICAgIGV3a19mcmFtZV9wYWludF9mdWxs
X3NldChzZC0+bWFpbl9mcmFtZSwgRUlOQV9UUlVFKTsKIH0KIAotc3RhdGljIEVpbmFfQm9vbCBf
ZXdrX3ZpZXdfdGlsZWRfc21hcnRfc2Nyb2xsc19wcm9jZXNzKEV3a19WaWV3X1NtYXJ0X0RhdGEq
IHNkKQorc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfdGlsZWRfc21hcnRfc2Nyb2xsc19wcm9j
ZXNzKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSkKIHsKICAgICBjb25zdCBFd2tfU2Ny
b2xsX1JlcXVlc3QqIHNyOwogICAgIGNvbnN0IEV3a19TY3JvbGxfUmVxdWVzdCogc3JfZW5kOwog
ICAgIHNpemVfdCBjb3VudDsKICAgICBFdmFzX0Nvb3JkIHZ3LCB2aDsKIAotICAgIGV3a19mcmFt
ZV9jb250ZW50c19zaXplX2dldChzZC0+bWFpbl9mcmFtZSwgJnZ3LCAmdmgpOworICAgIGV3a19m
cmFtZV9jb250ZW50c19zaXplX2dldChzbWFydERhdGEtPm1haW5fZnJhbWUsICZ2dywgJnZoKTsK
IAotICAgIHNyID0gZXdrX3ZpZXdfc2Nyb2xsX3JlcXVlc3RzX2dldChzZC0+X3ByaXYsICZjb3Vu
dCk7CisgICAgc3IgPSBld2tfdmlld19zY3JvbGxfcmVxdWVzdHNfZ2V0KHNtYXJ0RGF0YS0+X3By
aXYsICZjb3VudCk7CiAgICAgc3JfZW5kID0gc3IgKyBjb3VudDsKICAgICBmb3IgKDsgc3IgPCBz
cl9lbmQ7IHNyKyspIHsKICAgICAgICAgaWYgKHNyLT5tYWluX3Njcm9sbCkKICAgICAgICAgICAg
IGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3Njcm9sbF9mdWxsX29mZnNldF9hZGQKLSAgICAgICAg
ICAgICAgICAoc2QtPmJhY2tpbmdfc3RvcmUsIHNyLT5keCwgc3ItPmR5KTsKKyAgICAgICAgICAg
ICAgICAoc21hcnREYXRhLT5iYWNraW5nX3N0b3JlLCBzci0+ZHgsIHNyLT5keSk7CiAgICAgICAg
IGVsc2UgewogICAgICAgICAgICAgRXZhc19Db29yZCBzeCwgc3ksIHN3LCBzaDsKIApAQCAtMTA4
LDcgKzEwOCw3IEBAIHN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3RpbGVkX3NtYXJ0X3Njcm9s
bHNfcHJvY2VzcyhFd2tfVmlld19TbWFydF9EYXRhKiBzZCkKICAgICAgICAgICAgICAgICAvKiBk
b3VidCB3ZWJraXQgd291bGQgYmUgc28gICAgIHN0dXBpZC4uLiAqLwogICAgICAgICAgICAgICAg
IERCRygiZnVsbCBwYWdlIHNjcm9sbCAlKzAzZCwlKzAzZC4gY29udmVydCB0byByZXBhaW50ICVk
LCVkICsgJWR4JWQiLAogICAgICAgICAgICAgICAgICAgICBzci0+ZHgsIHNyLT5keSwgc3gsIHN5
LCBzdywgc2gpOwotICAgICAgICAgICAgICAgIGV3a192aWV3X3JlcGFpbnRfYWRkKHNkLT5fcHJp
diwgc3gsIHN5LCBzdywgc2gpOworICAgICAgICAgICAgICAgIGV3a192aWV3X3JlcGFpbnRfYWRk
KHNtYXJ0RGF0YS0+X3ByaXYsIHN4LCBzeSwgc3csIHNoKTsKICAgICAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgICAgIH0KIApAQCAtMTI5LDcgKzEyOSw3IEBAIHN0YXRpYyBFaW5hX0Jv
b2wgX2V3a192aWV3X3RpbGVkX3NtYXJ0X3Njcm9sbHNfcHJvY2VzcyhFd2tfVmlld19TbWFydF9E
YXRhKiBzZCkKICAgICAgICAgICAgIHN5IC09IGFicyhzci0+ZHkpOwogICAgICAgICAgICAgc3cg
Kz0gYWJzKHNyLT5keCk7CiAgICAgICAgICAgICBzaCArPSBhYnMoc3ItPmR5KTsKLSAgICAgICAg
ICAgIGV3a192aWV3X3JlcGFpbnRfYWRkKHNkLT5fcHJpdiwgc3gsIHN5LCBzdywgc2gpOworICAg
ICAgICAgICAgZXdrX3ZpZXdfcmVwYWludF9hZGQoc21hcnREYXRhLT5fcHJpdiwgc3gsIHN5LCBz
dywgc2gpOwogICAgICAgICAgICAgSU5GKCJ1c2luZyByZXBhaW50IGZvciBpbm5lciBmcmFtZSBz
Y29sbGluZyEiKTsKICAgICAgICAgfQogICAgIH0KQEAgLTEzNywxNSArMTM3LDE1IEBAIHN0YXRp
YyBFaW5hX0Jvb2wgX2V3a192aWV3X3RpbGVkX3NtYXJ0X3Njcm9sbHNfcHJvY2VzcyhFd2tfVmll
d19TbWFydF9EYXRhKiBzZCkKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi1zdGF0aWMgRWlu
YV9Cb29sIF9ld2tfdmlld190aWxlZF9zbWFydF9yZXBhaW50c19wcm9jZXNzKEV3a19WaWV3X1Nt
YXJ0X0RhdGEqIHNkKQorc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfdGlsZWRfc21hcnRfcmVw
YWludHNfcHJvY2VzcyhFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEpCiB7CiAgICAgY29u
c3QgRWluYV9SZWN0YW5nbGUqIHByLCAqIHByX2VuZDsKICAgICBzaXplX3QgY291bnQ7CiAgICAg
aW50IHN4LCBzeTsKIAotICAgIGV3a19mcmFtZV9zY3JvbGxfcG9zX2dldChzZC0+bWFpbl9mcmFt
ZSwgJnN4LCAmc3kpOworICAgIGV3a19mcmFtZV9zY3JvbGxfcG9zX2dldChzbWFydERhdGEtPm1h
aW5fZnJhbWUsICZzeCwgJnN5KTsKIAotICAgIHByID0gZXdrX3ZpZXdfcmVwYWludHNfZ2V0KHNk
LT5fcHJpdiwgJmNvdW50KTsKKyAgICBwciA9IGV3a192aWV3X3JlcGFpbnRzX2dldChzbWFydERh
dGEtPl9wcml2LCAmY291bnQpOwogICAgIHByX2VuZCA9IHByICsgY291bnQ7CiAgICAgZm9yICg7
IHByIDwgcHJfZW5kOyBwcisrKSB7CiAgICAgICAgIEVpbmFfUmVjdGFuZ2xlIHI7CkBAIC0xNTMs
ODAgKzE1Myw4MCBAQCBzdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld190aWxlZF9zbWFydF9yZXBh
aW50c19wcm9jZXNzKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkKQogICAgICAgICByLnkgPSBwci0+
eSArIHN5OwogICAgICAgICByLncgPSBwci0+dzsKICAgICAgICAgci5oID0gcHItPmg7Ci0gICAg
ICAgIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3VwZGF0ZShzZC0+YmFja2luZ19zdG9yZSwgJnIp
OworICAgICAgICBld2tfdGlsZWRfYmFja2luZ19zdG9yZV91cGRhdGUoc21hcnREYXRhLT5iYWNr
aW5nX3N0b3JlLCAmcik7CiAgICAgfQotICAgIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3VwZGF0
ZXNfcHJvY2VzcyhzZC0+YmFja2luZ19zdG9yZSk7CisgICAgZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfdXBkYXRlc19wcm9jZXNzKHNtYXJ0RGF0YS0+YmFja2luZ19zdG9yZSk7CiAKICAgICByZXR1
cm4gRUlOQV9UUlVFOwogfQogCi1zdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld190aWxlZF9zbWFy
dF9jb250ZW50c19yZXNpemUoRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QsIGludCB3LCBpbnQgaCkK
K3N0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3RpbGVkX3NtYXJ0X2NvbnRlbnRzX3Jlc2l6ZShF
d2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEsIGludCB3aWR0aCwgaW50IGhlaWdodCkKIHsK
LSAgICBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9jb250ZW50c19yZXNpemUoc2QtPmJhY2tpbmdf
c3RvcmUsIHcsIGgpOworICAgIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX2NvbnRlbnRzX3Jlc2l6
ZShzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUsIHdpZHRoLCBoZWlnaHQpOwogICAgIHJldHVybiBF
SU5BX1RSVUU7CiB9CiAKLXN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3RpbGVkX3NtYXJ0X3pv
b21fc2V0KEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkLCBmbG9hdCB6b29tLCBFdmFzX0Nvb3JkIGN4
LCBFdmFzX0Nvb3JkIGN5KQorc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfdGlsZWRfc21hcnRf
em9vbV9zZXQoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhLCBmbG9hdCB6b29tLCBFdmFz
X0Nvb3JkIGNlbnRlclgsIEV2YXNfQ29vcmQgY2VudGVyWSkKIHsKICAgICBFdmFzX0Nvb3JkIHgs
IHksIHcsIGg7CiAgICAgRWluYV9Cb29sIHI7Ci0gICAgciA9IGV3a190aWxlZF9iYWNraW5nX3N0
b3JlX3pvb21fc2V0KHNkLT5iYWNraW5nX3N0b3JlLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAmem9vbSwgY3gsIGN5LCAmeCwgJnkpOworICAgIHIgPSBld2tfdGls
ZWRfYmFja2luZ19zdG9yZV96b29tX3NldChzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ6b29tLCBjZW50ZXJYLCBjZW50
ZXJZLCAmeCwgJnkpOwogICAgIGlmICghcikKICAgICAgICAgcmV0dXJuIHI7Ci0gICAgZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfZGlzYWJsZWRfdXBkYXRlX3NldChzZC0+YmFja2luZ19zdG9yZSwg
RUlOQV9UUlVFKTsKLSAgICByID0gX3BhcmVudF9zYy56b29tX3NldChzZCwgem9vbSwgY3gsIGN5
KTsKLSAgICBld2tfZnJhbWVfc2Nyb2xsX3NldChzZC0+bWFpbl9mcmFtZSwgLXgsIC15KTsKLSAg
ICBld2tfZnJhbWVfc2Nyb2xsX3NpemVfZ2V0KHNkLT5tYWluX2ZyYW1lLCAmdywgJmgpOwotICAg
IGV3a190aWxlZF9iYWNraW5nX3N0b3JlX2ZpeF9vZmZzZXRzKHNkLT5iYWNraW5nX3N0b3JlLCB3
LCBoKTsKLSAgICBld2tfdmlld19zY3JvbGxzX3Byb2Nlc3Moc2QpOwotICAgIGV2YXNfb2JqZWN0
X3NtYXJ0X2NhbGN1bGF0ZShzZC0+YmFja2luZ19zdG9yZSk7Ci0gICAgZXZhc19vYmplY3Rfc21h
cnRfY2FsY3VsYXRlKHNkLT5zZWxmKTsKLSAgICBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9kaXNh
YmxlZF91cGRhdGVfc2V0KHNkLT5iYWNraW5nX3N0b3JlLCBFSU5BX0ZBTFNFKTsKKyAgICBld2tf
dGlsZWRfYmFja2luZ19zdG9yZV9kaXNhYmxlZF91cGRhdGVfc2V0KHNtYXJ0RGF0YS0+YmFja2lu
Z19zdG9yZSwgRUlOQV9UUlVFKTsKKyAgICByID0gX3BhcmVudF9zYy56b29tX3NldChzbWFydERh
dGEsIHpvb20sIGNlbnRlclgsIGNlbnRlclkpOworICAgIGV3a19mcmFtZV9zY3JvbGxfc2V0KHNt
YXJ0RGF0YS0+bWFpbl9mcmFtZSwgLXgsIC15KTsKKyAgICBld2tfZnJhbWVfc2Nyb2xsX3NpemVf
Z2V0KHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSwgJncsICZoKTsKKyAgICBld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9maXhfb2Zmc2V0cyhzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUsIHcsIGgpOworICAg
IGV3a192aWV3X3Njcm9sbHNfcHJvY2VzcyhzbWFydERhdGEpOworICAgIGV2YXNfb2JqZWN0X3Nt
YXJ0X2NhbGN1bGF0ZShzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUpOworICAgIGV2YXNfb2JqZWN0
X3NtYXJ0X2NhbGN1bGF0ZShzbWFydERhdGEtPnNlbGYpOworICAgIGV3a190aWxlZF9iYWNraW5n
X3N0b3JlX2Rpc2FibGVkX3VwZGF0ZV9zZXQoc21hcnREYXRhLT5iYWNraW5nX3N0b3JlLCBFSU5B
X0ZBTFNFKTsKICAgICByZXR1cm4gcjsKIH0KIAotc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdf
dGlsZWRfc21hcnRfem9vbV93ZWFrX3NldChFd2tfVmlld19TbWFydF9EYXRhKiBzZCwgZmxvYXQg
em9vbSwgRXZhc19Db29yZCBjeCwgRXZhc19Db29yZCBjeSkKK3N0YXRpYyBFaW5hX0Jvb2wgX2V3
a192aWV3X3RpbGVkX3NtYXJ0X3pvb21fd2Vha19zZXQoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21h
cnREYXRhLCBmbG9hdCB6b29tLCBFdmFzX0Nvb3JkIGNlbnRlclgsIEV2YXNfQ29vcmQgY2VudGVy
WSkKIHsKLSAgICByZXR1cm4gZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfem9vbV93ZWFrX3NldChz
ZC0+YmFja2luZ19zdG9yZSwgem9vbSwgY3gsIGN5KTsKKyAgICByZXR1cm4gZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfem9vbV93ZWFrX3NldChzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUsIHpvb20s
IGNlbnRlclgsIGNlbnRlclkpOwogfQogCi1zdGF0aWMgdm9pZCBfZXdrX3ZpZXdfdGlsZWRfc21h
cnRfem9vbV93ZWFrX3Ntb290aF9zY2FsZV9zZXQoRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QsIEVp
bmFfQm9vbCBzbW9vdGhfc2NhbGUpCitzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfdGlsZWRfc21hcnRf
em9vbV93ZWFrX3Ntb290aF9zY2FsZV9zZXQoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRh
LCBFaW5hX0Jvb2wgc21vb3RoU2NhbGUpCiB7Ci0gICAgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
em9vbV93ZWFrX3Ntb290aF9zY2FsZV9zZXQoc2QtPmJhY2tpbmdfc3RvcmUsIHNtb290aF9zY2Fs
ZSk7CisgICAgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfem9vbV93ZWFrX3Ntb290aF9zY2FsZV9z
ZXQoc21hcnREYXRhLT5iYWNraW5nX3N0b3JlLCBzbW9vdGhTY2FsZSk7CiB9CiAKLXN0YXRpYyB2
b2lkIF9ld2tfdmlld190aWxlZF9zbWFydF9mbHVzaChFd2tfVmlld19TbWFydF9EYXRhKiBzZCkK
K3N0YXRpYyB2b2lkIF9ld2tfdmlld190aWxlZF9zbWFydF9mbHVzaChFd2tfVmlld19TbWFydF9E
YXRhKiBzbWFydERhdGEpCiB7Ci0gICAgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZmx1c2goc2Qt
PmJhY2tpbmdfc3RvcmUpOwotICAgIF9wYXJlbnRfc2MuZmx1c2goc2QpOworICAgIGV3a190aWxl
ZF9iYWNraW5nX3N0b3JlX2ZsdXNoKHNtYXJ0RGF0YS0+YmFja2luZ19zdG9yZSk7CisgICAgX3Bh
cmVudF9zYy5mbHVzaChzbWFydERhdGEpOwogfQogCi1zdGF0aWMgRWluYV9Cb29sIF9ld2tfdmll
d190aWxlZF9zbWFydF9wcmVfcmVuZGVyX3JlZ2lvbihFd2tfVmlld19TbWFydF9EYXRhKiBzZCwg
RXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHksIEV2YXNfQ29vcmQgdywgRXZhc19Db29yZCBoLCBm
bG9hdCB6b29tKQorc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfdGlsZWRfc21hcnRfcHJlX3Jl
bmRlcl9yZWdpb24oRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhLCBFdmFzX0Nvb3JkIHgs
IEV2YXNfQ29vcmQgeSwgRXZhc19Db29yZCB3aWR0aCwgRXZhc19Db29yZCBoZWlnaHQsIGZsb2F0
IHpvb20pCiB7CiAgICAgcmV0dXJuIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJf
cmVnaW9uCi0gICAgICAgICAgICAgICAoc2QtPmJhY2tpbmdfc3RvcmUsIHgsIHksIHcsIGgsIHpv
b20pOworICAgICAgICAgICAgICAgKHNtYXJ0RGF0YS0+YmFja2luZ19zdG9yZSwgeCwgeSwgd2lk
dGgsIGhlaWdodCwgem9vbSk7CiB9CiAKLXN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3RpbGVk
X3NtYXJ0X3ByZV9yZW5kZXJfcmVsYXRpdmVfcmFkaXVzKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNk
LCB1bnNpZ25lZCBpbnQgbiwgZmxvYXQgem9vbSkKK3N0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3
X3RpbGVkX3NtYXJ0X3ByZV9yZW5kZXJfcmVsYXRpdmVfcmFkaXVzKEV3a19WaWV3X1NtYXJ0X0Rh
dGEqIHNtYXJ0RGF0YSwgdW5zaWduZWQgaW50IG4sIGZsb2F0IHpvb20pCiB7CiAgICAgcmV0dXJu
IGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVsYXRpdmVfcmFkaXVzCi0gICAg
ICAgICAgICAgICAoc2QtPmJhY2tpbmdfc3RvcmUsIG4sIHpvb20pOworICAgICAgICAgICAgICAg
KHNtYXJ0RGF0YS0+YmFja2luZ19zdG9yZSwgbiwgem9vbSk7CiB9CiAKLXN0YXRpYyB2b2lkIF9l
d2tfdmlld190aWxlZF9zbWFydF9wcmVfcmVuZGVyX2NhbmNlbChFd2tfVmlld19TbWFydF9EYXRh
KiBzZCkKK3N0YXRpYyB2b2lkIF9ld2tfdmlld190aWxlZF9zbWFydF9wcmVfcmVuZGVyX2NhbmNl
bChFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEpCiB7Ci0gICAgZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfcHJlX3JlbmRlcl9jYW5jZWwoc2QtPmJhY2tpbmdfc3RvcmUpOworICAgIGV3a190
aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfY2FuY2VsKHNtYXJ0RGF0YS0+YmFja2luZ19z
dG9yZSk7CiB9CiAKLXN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3RpbGVkX3NtYXJ0X2Rpc2Fi
bGVfcmVuZGVyKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkKQorc3RhdGljIEVpbmFfQm9vbCBfZXdr
X3ZpZXdfdGlsZWRfc21hcnRfZGlzYWJsZV9yZW5kZXIoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21h
cnREYXRhKQogewotICAgIHJldHVybiBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9kaXNhYmxlX3Jl
bmRlcihzZC0+YmFja2luZ19zdG9yZSk7CisgICAgcmV0dXJuIGV3a190aWxlZF9iYWNraW5nX3N0
b3JlX2Rpc2FibGVfcmVuZGVyKHNtYXJ0RGF0YS0+YmFja2luZ19zdG9yZSk7CiB9CiAKLXN0YXRp
YyBFaW5hX0Jvb2wgX2V3a192aWV3X3RpbGVkX3NtYXJ0X2VuYWJsZV9yZW5kZXIoRXdrX1ZpZXdf
U21hcnRfRGF0YSogc2QpCitzdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld190aWxlZF9zbWFydF9l
bmFibGVfcmVuZGVyKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSkKIHsKLSAgICByZXR1
cm4gZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZW5hYmxlX3JlbmRlcihzZC0+YmFja2luZ19zdG9y
ZSk7CisgICAgcmV0dXJuIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX2VuYWJsZV9yZW5kZXIoc21h
cnREYXRhLT5iYWNraW5nX3N0b3JlKTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3RpbGVkX3Nt
YXJ0X3NldChFd2tfVmlld19TbWFydF9DbGFzcyogYXBpKQpAQCAtMjY4LDIxICsyNjgsMjEgQEAg
c3RhdGljIGlubGluZSBFdmFzX1NtYXJ0KiBfZXdrX3ZpZXdfdGlsZWRfc21hcnRfY2xhc3NfbmV3
KHZvaWQpCiAgICAgcmV0dXJuIHNtYXJ0OwogfQogCi1FdmFzX09iamVjdCogZXdrX3ZpZXdfdGls
ZWRfYWRkKEV2YXMqIGUpCitFdmFzX09iamVjdCogZXdrX3ZpZXdfdGlsZWRfYWRkKEV2YXMqIGNh
bnZhcykKIHsKLSAgICByZXR1cm4gZXZhc19vYmplY3Rfc21hcnRfYWRkKGUsIF9ld2tfdmlld190
aWxlZF9zbWFydF9jbGFzc19uZXcoKSk7CisgICAgcmV0dXJuIGV2YXNfb2JqZWN0X3NtYXJ0X2Fk
ZChjYW52YXMsIF9ld2tfdmlld190aWxlZF9zbWFydF9jbGFzc19uZXcoKSk7CiB9CiAKLUV3a19U
aWxlX1VudXNlZF9DYWNoZSogZXdrX3ZpZXdfdGlsZWRfdW51c2VkX2NhY2hlX2dldChjb25zdCBF
dmFzX09iamVjdCogbykKK0V3a19UaWxlX1VudXNlZF9DYWNoZSogZXdrX3ZpZXdfdGlsZWRfdW51
c2VkX2NhY2hlX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVGlsZSkKIHsKLSAgICBFd2tfVmll
d19TbWFydF9EYXRhKiBzZCA9IGV3a192aWV3X3NtYXJ0X2RhdGFfZ2V0KG8pOworICAgIEV3a19W
aWV3X1NtYXJ0X0RhdGEqIHNkID0gZXdrX3ZpZXdfc21hcnRfZGF0YV9nZXQoZXdrVGlsZSk7CiAg
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLCAwKTsKICAgICByZXR1cm4gZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV91bnVzZWRfY2FjaGVfZ2V0KHNkLT5iYWNraW5nX3N0
b3JlKTsKIH0KIAotdm9pZCBld2tfdmlld190aWxlZF91bnVzZWRfY2FjaGVfc2V0KEV2YXNfT2Jq
ZWN0KiBvLCBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIGNhY2hlKQordm9pZCBld2tfdmlld190aWxl
ZF91bnVzZWRfY2FjaGVfc2V0KEV2YXNfT2JqZWN0KiBld2tUaWxlLCBFd2tfVGlsZV9VbnVzZWRf
Q2FjaGUqIGNhY2hlKQogewotICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0gZXdrX3ZpZXdf
c21hcnRfZGF0YV9nZXQobyk7CisgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QgPSBld2tfdmll
d19zbWFydF9kYXRhX2dldChld2tUaWxlKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
TihzZCk7CiAgICAgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV91bnVzZWRfY2FjaGVfc2V0
KHNkLT5iYWNraW5nX3N0b3JlLCBjYWNoZSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2VmbC9ld2svZXdrX3dpbmRvd19mZWF0dXJlcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2sv
ZXdrX3dpbmRvd19mZWF0dXJlcy5jcHAKaW5kZXggODA5ZDFlODUzMWJmZDMzZDZlZTU0YTM0NDQ0
MDZhNDRhOWFmNjg2MC4uMDljZjI3Yjg0ODZjNmFlMjg2OGFiZjIwZDQ0MjUwYTFmNWM5NjEwMCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a193aW5kb3dfZmVhdHVyZXMuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfd2luZG93X2ZlYXR1cmVzLmNwcApAQCAt
MzUsNjUgKzM1LDY1IEBAIHN0cnVjdCBfRXdrX1dpbmRvd19GZWF0dXJlcyB7CiAgICAgV2ViQ29y
ZTo6V2luZG93RmVhdHVyZXMqIGNvcmU7CiB9OwogCi12b2lkIGV3a193aW5kb3dfZmVhdHVyZXNf
dW5yZWYoRXdrX1dpbmRvd19GZWF0dXJlcyogd2luZG93X2ZlYXR1cmVzKQordm9pZCBld2tfd2lu
ZG93X2ZlYXR1cmVzX3VucmVmKEV3a19XaW5kb3dfRmVhdHVyZXMqIHdpbmRvd0ZlYXR1cmVzKQog
ewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHdpbmRvd19mZWF0dXJlcyk7Ci0gICAg
RUlOQV9TQUZFVFlfT05fRkFMU0VfUkVUVVJOKHdpbmRvd19mZWF0dXJlcy0+X19yZWYgPiAwKTsK
KyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih3aW5kb3dGZWF0dXJlcyk7CisgICAgRUlO
QV9TQUZFVFlfT05fRkFMU0VfUkVUVVJOKHdpbmRvd0ZlYXR1cmVzLT5fX3JlZiA+IDApOwogCi0g
ICAgaWYgKC0td2luZG93X2ZlYXR1cmVzLT5fX3JlZikKKyAgICBpZiAoLS13aW5kb3dGZWF0dXJl
cy0+X19yZWYpCiAgICAgICAgIHJldHVybjsKIAotICAgIGRlbGV0ZSB3aW5kb3dfZmVhdHVyZXMt
PmNvcmU7Ci0gICAgd2luZG93X2ZlYXR1cmVzLT5jb3JlID0gMDsKLSAgICBmcmVlKHdpbmRvd19m
ZWF0dXJlcyk7CisgICAgZGVsZXRlIHdpbmRvd0ZlYXR1cmVzLT5jb3JlOworICAgIHdpbmRvd0Zl
YXR1cmVzLT5jb3JlID0gMDsKKyAgICBmcmVlKHdpbmRvd0ZlYXR1cmVzKTsKIH0KIAotdm9pZCBl
d2tfd2luZG93X2ZlYXR1cmVzX3JlZihFd2tfV2luZG93X0ZlYXR1cmVzKiB3aW5kb3dfZmVhdHVy
ZXMpCit2b2lkIGV3a193aW5kb3dfZmVhdHVyZXNfcmVmKEV3a19XaW5kb3dfRmVhdHVyZXMqIHdp
bmRvd0ZlYXR1cmVzKQogewotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHdpbmRvd19m
ZWF0dXJlcyk7Ci0gICAgd2luZG93X2ZlYXR1cmVzLT5fX3JlZisrOworICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOKHdpbmRvd0ZlYXR1cmVzKTsKKyAgICB3aW5kb3dGZWF0dXJlcy0+X19y
ZWYrKzsKIH0KIAotdm9pZCBld2tfd2luZG93X2ZlYXR1cmVzX2Jvb2xfcHJvcGVydHlfZ2V0KGNv
bnN0IEV3a19XaW5kb3dfRmVhdHVyZXMqIHdpbmRvd19mZWF0dXJlcywgRWluYV9Cb29sKiB0b29s
YmFyX3Zpc2libGUsIEVpbmFfQm9vbCogc3RhdHVzYmFyX3Zpc2libGUsIEVpbmFfQm9vbCogc2Ny
b2xsYmFyc192aXNpYmxlLCBFaW5hX0Jvb2wqIG1lbnViYXJfdmlzaWJsZSwgRWluYV9Cb29sKiBs
b2NhdGlvbmJhcl92aXNpYmxlLCBFaW5hX0Jvb2wqIGZ1bGxzY3JlZW4pCit2b2lkIGV3a193aW5k
b3dfZmVhdHVyZXNfYm9vbF9wcm9wZXJ0eV9nZXQoY29uc3QgRXdrX1dpbmRvd19GZWF0dXJlcyog
d2luZG93RmVhdHVyZXMsIEVpbmFfQm9vbCogdG9vbGJhclZpc2libGUsIEVpbmFfQm9vbCogc3Rh
dHVzYmFyVmlzaWJsZSwgRWluYV9Cb29sKiBzY3JvbGxiYXJzVmlzaWJsZSwgRWluYV9Cb29sKiBt
ZW51YmFyVmlzaWJsZSwgRWluYV9Cb29sKiBsb2NhdGlvbmJhclZpc2libGUsIEVpbmFfQm9vbCog
ZnVsbFNjcmVlbikKIHsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih3aW5kb3dfZmVh
dHVyZXMpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHdpbmRvd19mZWF0dXJlcy0+
Y29yZSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4od2luZG93RmVhdHVyZXMpOwor
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHdpbmRvd0ZlYXR1cmVzLT5jb3JlKTsKIAot
ICAgIGlmICh0b29sYmFyX3Zpc2libGUpCi0gICAgICAgICp0b29sYmFyX3Zpc2libGUgPSB3aW5k
b3dfZmVhdHVyZXMtPmNvcmUtPnRvb2xCYXJWaXNpYmxlOworICAgIGlmICh0b29sYmFyVmlzaWJs
ZSkKKyAgICAgICAgKnRvb2xiYXJWaXNpYmxlID0gd2luZG93RmVhdHVyZXMtPmNvcmUtPnRvb2xC
YXJWaXNpYmxlOwogCi0gICAgaWYgKHN0YXR1c2Jhcl92aXNpYmxlKQotICAgICAgICAqc3RhdHVz
YmFyX3Zpc2libGUgPSB3aW5kb3dfZmVhdHVyZXMtPmNvcmUtPnN0YXR1c0JhclZpc2libGU7Cisg
ICAgaWYgKHN0YXR1c2JhclZpc2libGUpCisgICAgICAgICpzdGF0dXNiYXJWaXNpYmxlID0gd2lu
ZG93RmVhdHVyZXMtPmNvcmUtPnN0YXR1c0JhclZpc2libGU7CiAKLSAgICBpZiAoc2Nyb2xsYmFy
c192aXNpYmxlKQotICAgICAgICAqc2Nyb2xsYmFyc192aXNpYmxlID0gd2luZG93X2ZlYXR1cmVz
LT5jb3JlLT5zY3JvbGxiYXJzVmlzaWJsZTsKKyAgICBpZiAoc2Nyb2xsYmFyc1Zpc2libGUpCisg
ICAgICAgICpzY3JvbGxiYXJzVmlzaWJsZSA9IHdpbmRvd0ZlYXR1cmVzLT5jb3JlLT5zY3JvbGxi
YXJzVmlzaWJsZTsKIAotICAgIGlmIChtZW51YmFyX3Zpc2libGUpCi0gICAgICAgICptZW51YmFy
X3Zpc2libGUgPSB3aW5kb3dfZmVhdHVyZXMtPmNvcmUtPm1lbnVCYXJWaXNpYmxlOworICAgIGlm
IChtZW51YmFyVmlzaWJsZSkKKyAgICAgICAgKm1lbnViYXJWaXNpYmxlID0gd2luZG93RmVhdHVy
ZXMtPmNvcmUtPm1lbnVCYXJWaXNpYmxlOwogCi0gICAgaWYgKGxvY2F0aW9uYmFyX3Zpc2libGUp
Ci0gICAgICAgICpsb2NhdGlvbmJhcl92aXNpYmxlID0gd2luZG93X2ZlYXR1cmVzLT5jb3JlLT5s
b2NhdGlvbkJhclZpc2libGU7CisgICAgaWYgKGxvY2F0aW9uYmFyVmlzaWJsZSkKKyAgICAgICAg
KmxvY2F0aW9uYmFyVmlzaWJsZSA9IHdpbmRvd0ZlYXR1cmVzLT5jb3JlLT5sb2NhdGlvbkJhclZp
c2libGU7CiAKLSAgICBpZiAoZnVsbHNjcmVlbikKLSAgICAgICAgKmZ1bGxzY3JlZW4gPSB3aW5k
b3dfZmVhdHVyZXMtPmNvcmUtPmZ1bGxzY3JlZW47CisgICAgaWYgKGZ1bGxTY3JlZW4pCisgICAg
ICAgICpmdWxsU2NyZWVuID0gd2luZG93RmVhdHVyZXMtPmNvcmUtPmZ1bGxzY3JlZW47CiB9CiAK
LXZvaWQgZXdrX3dpbmRvd19mZWF0dXJlc19pbnRfcHJvcGVydHlfZ2V0KGNvbnN0IEV3a19XaW5k
b3dfRmVhdHVyZXMqIHdpbmRvd19mZWF0dXJlcywgaW50KiB4LCBpbnQqIHksIGludCogdywgaW50
KiBoKQordm9pZCBld2tfd2luZG93X2ZlYXR1cmVzX2ludF9wcm9wZXJ0eV9nZXQoY29uc3QgRXdr
X1dpbmRvd19GZWF0dXJlcyogd2luZG93RmVhdHVyZXMsIGludCogeCwgaW50KiB5LCBpbnQqIHdp
ZHRoLCBpbnQqIGhlaWdodCkKIHsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih3aW5k
b3dfZmVhdHVyZXMpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHdpbmRvd19mZWF0
dXJlcy0+Y29yZSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4od2luZG93RmVhdHVy
ZXMpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHdpbmRvd0ZlYXR1cmVzLT5jb3Jl
KTsKIAogICAgIGlmICh4KQotICAgICAgICAqeCA9IHdpbmRvd19mZWF0dXJlcy0+Y29yZS0+eFNl
dCA/IHN0YXRpY19jYXN0PGludD4od2luZG93X2ZlYXR1cmVzLT5jb3JlLT54KSA6IC0xOworICAg
ICAgICAqeCA9IHdpbmRvd0ZlYXR1cmVzLT5jb3JlLT54U2V0ID8gc3RhdGljX2Nhc3Q8aW50Pih3
aW5kb3dGZWF0dXJlcy0+Y29yZS0+eCkgOiAtMTsKIAogICAgIGlmICh5KQotICAgICAgICAqeSA9
IHdpbmRvd19mZWF0dXJlcy0+Y29yZS0+eVNldCA/IHN0YXRpY19jYXN0PGludD4od2luZG93X2Zl
YXR1cmVzLT5jb3JlLT55KSA6IC0xOworICAgICAgICAqeSA9IHdpbmRvd0ZlYXR1cmVzLT5jb3Jl
LT55U2V0ID8gc3RhdGljX2Nhc3Q8aW50Pih3aW5kb3dGZWF0dXJlcy0+Y29yZS0+eSkgOiAtMTsK
IAotICAgIGlmICh3KQotICAgICAgICAqdyA9IHdpbmRvd19mZWF0dXJlcy0+Y29yZS0+d2lkdGhT
ZXQgPyBzdGF0aWNfY2FzdDxpbnQ+KHdpbmRvd19mZWF0dXJlcy0+Y29yZS0+d2lkdGgpIDogLTE7
CisgICAgaWYgKHdpZHRoKQorICAgICAgICAqd2lkdGggPSB3aW5kb3dGZWF0dXJlcy0+Y29yZS0+
d2lkdGhTZXQgPyBzdGF0aWNfY2FzdDxpbnQ+KHdpbmRvd0ZlYXR1cmVzLT5jb3JlLT53aWR0aCkg
OiAtMTsKIAotICAgIGlmIChoKQotICAgICAgICAqaCA9IHdpbmRvd19mZWF0dXJlcy0+Y29yZS0+
aGVpZ2h0U2V0ID8gc3RhdGljX2Nhc3Q8aW50Pih3aW5kb3dfZmVhdHVyZXMtPmNvcmUtPmhlaWdo
dCkgOiAtMTsKKyAgICBpZiAoaGVpZ2h0KQorICAgICAgICAqaGVpZ2h0ID0gd2luZG93RmVhdHVy
ZXMtPmNvcmUtPmhlaWdodFNldCA/IHN0YXRpY19jYXN0PGludD4od2luZG93RmVhdHVyZXMtPmNv
cmUtPmhlaWdodCkgOiAtMTsKIH0KIAogLyogaW50ZXJuYWwgbWV0aG9kcyAqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>