<?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>69988</bug_id>
          
          <creation_ts>2011-10-12 18:55:45 -0700</creation_ts>
          <short_desc>[EFL] Change efl style local variables with WebKit coding Style.</short_desc>
          <delta_ts>2011-10-21 22:31:31 -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>antognolli+webkit</cc>
    
    <cc>g.czajkowski</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hyuki.kim</cc>
    
    <cc>kenneth</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>482949</commentid>
    <comment_count>0</comment_count>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-10-12 18:55:45 -0700</bug_when>
    <thetext>Parameter variables name was changed with WebKit coding style in Bug 69073. So, we need to change local variables name according to WebKit coding style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483833</commentid>
    <comment_count>1</comment_count>
      <attachid>110975</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-10-14 01:27:41 -0700</bug_when>
    <thetext>Created attachment 110975
Prototype

I make a prototype for this bug. Though I know well this patch is also very giant, I think it is better to change coding style as soon as possible. 

Major changes are as below,

  - Use ewkFrame instead of o parameter in ewk_frame.cpp.
  - Use ewkView instead of o parameter in ewk_view.cpp.
  - Use ewkTile instead of o 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 scrollX, scrollY, scrollWidth, scrollHeight, centerX, centerY, deltaX, deltaY instead of sx, xy, sw, sh, cx, cy, dx, dy.
  - Use red, green, blue and alpha instead of r,g,b,a.
  - Remove &quot;_&quot; from parameter variable.

However, backing store&apos;s variables is almost encrypt. Backing Store guys should review this patch. Because, this patch is initial prototype, I will modify this patch according to efl guys&apos;s comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483836</commentid>
    <comment_count>2</comment_count>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-10-14 01:30:48 -0700</bug_when>
    <thetext>CC&apos;ing Ryuan, Kwang, Grzegorz, Lukasz, antognolli and Antonio.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483853</commentid>
    <comment_count>3</comment_count>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-10-14 01:49:23 -0700</bug_when>
    <thetext>Oops, there were wrong comments in #1.  So, I list major changes up again.

  - Use *menu* instead of *o* in comment of ewk_contextmenu.cpp.
  - Use *list* instead of *l* local variable
  - Use *ewkPolicy* instead of *ewk_policy* in ewk_cookies.cpp
  - Use *smartData* instead of *sd* local variable for Ewk_XXXX_Smart_Data struct.
  - Use *width*, *height* instead of *w*, *h* local variables.
  - Use scrollX, scrollY, scrollWidth, scrollHeight, centerX, centerY, deltaX, deltaY, baseX, baseY instead of sx, xy, sw, sh, cx, cy, dx, dy, bx, by.
  - Use red, green, blue, alpha, contentRed, contentGreen, contentBlue and contentAlpha instead of r,g,b,a, cr, cg, cb, ca.
  - Use *object* instead of *obj* 
  - Use *length* instead of *len*
  - Use *coreFrame* instead of *cf*
  - Use *buffer* instead of *buf*
  - Use *item* instead of *i*
  - Remove &quot;_&quot; in local variable.
  - And so on.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>483911</commentid>
    <comment_count>4</comment_count>
    <who name="Raphael Kubo da Costa (:rakuco)">rakuco</who>
    <bug_when>2011-10-14 04:57:05 -0700</bug_when>
    <thetext>It&apos;s impossible to review this patch, so informal rs+ from my side.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485951</commentid>
    <comment_count>5</comment_count>
      <attachid>111422</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-10-18 04:23:27 -0700</bug_when>
    <thetext>Created attachment 111422
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485953</commentid>
    <comment_count>6</comment_count>
      <attachid>111423</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-10-18 04:28:35 -0700</bug_when>
    <thetext>Created attachment 111423
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485957</commentid>
    <comment_count>7</comment_count>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-10-18 04:32:35 -0700</bug_when>
    <thetext>I update patch with below changes. Though I know very well it is difficult to review this patch, I hope to help to review this patch.

  - Use *menu* instead of *o* in comment of ewk_contextmenu.cpp.
  - Use *list* instead of *l* local variable
  - Use *ewkPolicy* instead of *ewk_policy* in ewk_cookies.cpp
  - Use *smartData* instead of *sd* local variable for Ewk_XXXX_Smart_Data struct.
  - Use *width*, *height* instead of *w*, *h* local variables.
  - Use *scrollX*, *scrollY*, *scrollWidth*, *scrollHeight*, *centerX*, *centerY*, *deltaX*, *deltaY*, *baseX*, *baseY* instead of *sx*, *sy*, *sw*, *sh*, *cx*, *cy*, *dx*, *dy*, *bx*, *by*.
  - Use *red*, *green*, *blue*, *alpha*, *contentRed*, *contentGreen*, *contentBlue* and *contentAlpha* instead of *r*,*g*,*b*,*a*,*cr*,*cg*,*cb*,*ca*.
  - Use *tilePositionX*, *tilePositionY* instead of *ox*,*oy* in tiled backingstore files.
  - Use *object* instead of *obj* 
  - Use *length* instead of *len*
  - Use *coreFrame* instead of *cf* 
  - Use *buffer* instead of *buf*
  - Use *item* instead of *i*
  - Remove &quot;_&quot; in local variable.
  - And so on.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485970</commentid>
    <comment_count>8</comment_count>
      <attachid>111425</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-10-18 05:06:34 -0700</bug_when>
    <thetext>Created attachment 111425
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485971</commentid>
    <comment_count>9</comment_count>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-10-18 05:11:32 -0700</bug_when>
    <thetext>patch is re-based with latest trunk.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>485991</commentid>
    <comment_count>10</comment_count>
      <attachid>111425</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-10-18 06:07:02 -0700</bug_when>
    <thetext>Comment on attachment 111425
Patch

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

&gt; Source/WebKit/efl/ewk/ewk_auth_soup.cpp:82
&gt; +    Ewk_Auth_Data* authData = static_cast&lt;Ewk_Auth_Data*&gt;(data);

authenticationData ?

&gt; Source/WebKit/efl/ewk/ewk_auth_soup.cpp:92
&gt; +    const char* realMessage;

what is a real message?

&gt; Source/WebKit/efl/ewk/ewk_cookies.cpp:93
&gt; +        Ewk_Cookie* ewkCookie = static_cast&lt;Ewk_Cookie*&gt;(malloc(sizeof(*ewkCookie)));

Why don&apos;t you do something like

#define e_new(struct_type) (static_cast&lt;struct_type*&gt;(malloc(sizeof(struct_type)))

similar to glib.

then Ewk_Cookie* ewkCookie = cnew(Ewk_Cookie).

Using templates it might be able to do something like cnew&lt;Ewk_Cookie&gt;(4) as well.

template &lt;typename struct_type&gt;
struct_type* cnew(size_t amount = 1) {
    return static_cast&lt;struct_type*&gt;malloc(amount * sizeof(struct_type));
}

Ewk_Cookie* cookies = cnew&lt;Ewk_Cookie&gt;(10);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486497</commentid>
    <comment_count>11</comment_count>
      <attachid>111546</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-10-18 18:25:09 -0700</bug_when>
    <thetext>Created attachment 111546
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486498</commentid>
    <comment_count>12</comment_count>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-10-18 18:30:19 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 111425 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=111425&amp;action=review
&gt; 
&gt; &gt; Source/WebKit/efl/ewk/ewk_auth_soup.cpp:82
&gt; &gt; +    Ewk_Auth_Data* authData = static_cast&lt;Ewk_Auth_Data*&gt;(data);
&gt; 
&gt; authenticationData ?

Fixed.

&gt; &gt; Source/WebKit/efl/ewk/ewk_auth_soup.cpp:92
&gt; &gt; +    const char* realMessage;
&gt; 
&gt; what is a real message?

Oops, I knew realm is abbreviation for realMessage. This is fixed.

&gt; &gt; Source/WebKit/efl/ewk/ewk_cookies.cpp:93
&gt; &gt; +        Ewk_Cookie* ewkCookie = static_cast&lt;Ewk_Cookie*&gt;(malloc(sizeof(*ewkCookie)));
&gt; 
&gt; Why don&apos;t you do something like
&gt; 
&gt; #define e_new(struct_type) (static_cast&lt;struct_type*&gt;(malloc(sizeof(struct_type)))
&gt; 
&gt; similar to glib.
&gt; 
&gt; then Ewk_Cookie* ewkCookie = cnew(Ewk_Cookie).
&gt; 
&gt; Using templates it might be able to do something like cnew&lt;Ewk_Cookie&gt;(4) as well.
&gt; 
&gt; template &lt;typename struct_type&gt;
&gt; struct_type* cnew(size_t amount = 1) {
&gt;     return static_cast&lt;struct_type*&gt;malloc(amount * sizeof(struct_type));
&gt; }
&gt; 
&gt; Ewk_Cookie* cookies = cnew&lt;Ewk_Cookie&gt;(10);

Looks good for me this template for memory allocation until using smart pointer. However, other ewk files also need to be adjusted. So, I would like to adjust this template into all ewk files after fixing this bug. If you agree with my opinion, I will file a new bug as soon as this bug is closed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486627</commentid>
    <comment_count>13</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-10-19 01:58:34 -0700</bug_when>
    <thetext>
&gt; &gt; template &lt;typename struct_type&gt;
&gt; &gt; struct_type* cnew(size_t amount = 1) {
&gt; &gt;     return static_cast&lt;struct_type*&gt;malloc(amount * sizeof(struct_type));
&gt; &gt; }
&gt; &gt; 
&gt; &gt; Ewk_Cookie* cookies = cnew&lt;Ewk_Cookie&gt;(10);
&gt; 
&gt; Looks good for me this template for memory allocation until using smart pointer. However, other ewk files also need to be adjusted. So, I would like to adjust this template into all ewk files after fixing this bug. If you agree with my opinion, I will file a new bug as soon as this bug is closed.

You could add it for the EFL port in Platform.h or similar, I guess.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486641</commentid>
    <comment_count>14</comment_count>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-10-19 02:45:38 -0700</bug_when>
    <thetext>(In reply to comment #13)

&gt; You could add it for the EFL port in Platform.h or similar, I guess.

Do you mean it is better to add your suggestion to this patch together ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>486646</commentid>
    <comment_count>15</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2011-10-19 02:59:12 -0700</bug_when>
    <thetext>separate is better</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487394</commentid>
    <comment_count>16</comment_count>
      <attachid>111737</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-10-20 00:48:57 -0700</bug_when>
    <thetext>Created attachment 111737
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487395</commentid>
    <comment_count>17</comment_count>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-10-20 00:50:32 -0700</bug_when>
    <thetext>There are local variables looks like member variables. So, I fix it with currentColumn and currentRow thanks to Kwang.


static inline Eina_Bool _ewk_tiled_backing_store_item_fill(Ewk_Tiled_Backing_Store_Data* priv, Ewk_Tiled_Backing_Store_Item* item, unsigned long column, unsigned long row)
{
    unsigned long m_col = priv-&gt;model.base.column + column;
    unsigned long m_row = priv-&gt;model.base.row + row;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487398</commentid>
    <comment_count>18</comment_count>
      <attachid>111738</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-10-20 00:55:27 -0700</bug_when>
    <thetext>Created attachment 111738
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487400</commentid>
    <comment_count>19</comment_count>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-10-20 01:01:58 -0700</bug_when>
    <thetext>Patch is re-based. This patch should be re-based whenever modified because of too giant.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>487536</commentid>
    <comment_count>20</comment_count>
      <attachid>111738</attachid>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2011-10-20 06:45:01 -0700</bug_when>
    <thetext>Comment on attachment 111738
Patch

feel free to land it when it is agreed it is in good shape by others.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488075</commentid>
    <comment_count>21</comment_count>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-10-20 18:45:56 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; (From update of attachment 111738 [details])
&gt; feel free to land it when it is agreed it is in good shape by others.

Antonio, Thank you. 

Hello CC&apos;ing guys, could you please review this patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488366</commentid>
    <comment_count>22</comment_count>
    <who name="Raphael Kubo da Costa (:rakuco)">rakuco</who>
    <bug_when>2011-10-21 07:15:30 -0700</bug_when>
    <thetext>I can&apos;t review the patch, but I guess the changes are OK. Go ahead and cq+ it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488402</commentid>
    <comment_count>23</comment_count>
      <attachid>111738</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-10-21 08:38:56 -0700</bug_when>
    <thetext>Comment on attachment 111738
Patch

Ok, let&apos;s go ahead. If there are problems, let&apos;s reopen this bug or file a new bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488406</commentid>
    <comment_count>24</comment_count>
      <attachid>111738</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-21 08:42:06 -0700</bug_when>
    <thetext>Comment on attachment 111738
Patch

Rejecting attachment 111738 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 2

Last 500 characters of output:
patching file Source/WebKit/efl/ewk/ewk_tiled_matrix.cpp
patching file Source/WebKit/efl/ewk/ewk_tiled_model.cpp
patching file Source/WebKit/efl/ewk/ewk_view.cpp
Hunk #96 FAILED at 3789.
Hunk #97 succeeded at 3815 (offset -5 lines).
Hunk #98 succeeded at 3828 (offset -5 lines).
1 out of 98 hunks FAILED -- saving rejects to file Source/WebKit/efl/ewk/ewk_view.cpp.rej

Failed to run &quot;[u&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/svn-apply&apos;, u&apos;--reviewer&apos;, u&apos;Antonio Gomes&apos;, u&apos;--fo...&quot; exit_code: 1

Full output: http://queues.webkit.org/results/10183936</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488431</commentid>
    <comment_count>25</comment_count>
      <attachid>111975</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-10-21 09:20:04 -0700</bug_when>
    <thetext>Created attachment 111975
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488468</commentid>
    <comment_count>26</comment_count>
      <attachid>111975</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-21 10:31:51 -0700</bug_when>
    <thetext>Comment on attachment 111975
Patch

Clearing flags on attachment: 111975

Committed r98109: &lt;http://trac.webkit.org/changeset/98109&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488469</commentid>
    <comment_count>27</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-21 10:32:00 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488856</commentid>
    <comment_count>28</comment_count>
      <attachid>112069</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-10-21 21:16:16 -0700</bug_when>
    <thetext>Created attachment 112069
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488858</commentid>
    <comment_count>29</comment_count>
      <attachid>112069</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-10-21 21:17:09 -0700</bug_when>
    <thetext>Comment on attachment 112069
Patch

*sd* variables were changed by this bug. So, I fix them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488861</commentid>
    <comment_count>30</comment_count>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-10-21 21:26:11 -0700</bug_when>
    <thetext>As mentioned Comment #29, this patch need to be re-opened.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488882</commentid>
    <comment_count>31</comment_count>
      <attachid>112069</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-21 22:31:21 -0700</bug_when>
    <thetext>Comment on attachment 112069
Patch

Clearing flags on attachment: 112069

Committed r98190: &lt;http://trac.webkit.org/changeset/98190&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>488883</commentid>
    <comment_count>32</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-10-21 22:31:31 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110975</attachid>
            <date>2011-10-14 01:27:41 -0700</date>
            <delta_ts>2011-10-18 04:23:19 -0700</delta_ts>
            <desc>Prototype</desc>
            <filename>local-var-prototype.patch</filename>
            <type>text/plain</type>
            <size>342206</size>
            <attacher name="Gyuyoung Kim">gyuyoung.kim</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfYXV0aF9zb3VwLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfYXV0aF9zb3VwLmNwcAppbmRleCBjYmM4NzU2Li5mMDVm
ZDNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2F1dGhfc291cC5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19hdXRoX3NvdXAuY3BwCkBAIC00MCw3ICs0
MCw3IEBAIGV4dGVybiAiQyIgewogICovCiAKIHR5cGVkZWYgc3RydWN0IF9Fd2tfQXV0aF9EYXRh
IHsKLSAgICBTb3VwTWVzc2FnZSogbXNnOworICAgIFNvdXBNZXNzYWdlKiBtZXNzYWdlOwogICAg
IFNvdXBBdXRoKiBhdXRoOwogICAgIFNvdXBTZXNzaW9uKiBzZXNzaW9uOwogfSBFd2tfQXV0aF9E
YXRhOwpAQCAtNzksNTEgKzc5LDUxIEBAIHZvaWQgZXdrX2F1dGhfc291cF9jcmVkZW50aWFsc19z
ZXQoY29uc3QgY2hhciogdXNlcm5hbWUsIGNvbnN0IGNoYXIqIHBhc3N3b3JkLCB2CiAgICAgaWYg
KCFkYXRhKQogICAgICAgICByZXR1cm47CiAKLSAgICBFd2tfQXV0aF9EYXRhKiBhdXRoX2RhdGEg
PSBzdGF0aWNfY2FzdDxFd2tfQXV0aF9EYXRhKj4oZGF0YSk7Ci0gICAgc291cF9hdXRoX2F1dGhl
bnRpY2F0ZShhdXRoX2RhdGEtPmF1dGgsIHVzZXJuYW1lLCBwYXNzd29yZCk7Ci0gICAgc291cF9z
ZXNzaW9uX3VucGF1c2VfbWVzc2FnZShhdXRoX2RhdGEtPnNlc3Npb24sIGF1dGhfZGF0YS0+bXNn
KTsKLSAgICBmcmVlX2F1dGhfZGF0YShhdXRoX2RhdGEpOworICAgIEV3a19BdXRoX0RhdGEqIGF1
dGhEYXRhID0gc3RhdGljX2Nhc3Q8RXdrX0F1dGhfRGF0YSo+KGRhdGEpOworICAgIHNvdXBfYXV0
aF9hdXRoZW50aWNhdGUoYXV0aERhdGEtPmF1dGgsIHVzZXJuYW1lLCBwYXNzd29yZCk7CisgICAg
c291cF9zZXNzaW9uX3VucGF1c2VfbWVzc2FnZShhdXRoRGF0YS0+c2Vzc2lvbiwgYXV0aERhdGEt
Pm1lc3NhZ2UpOworICAgIGZyZWVfYXV0aF9kYXRhKGF1dGhEYXRhKTsKIH0KIAotc3RhdGljIHZv
aWQgc2Vzc2lvbl9hdXRoZW50aWNhdGUoU291cFNlc3Npb24qIHNlc3Npb24sIFNvdXBNZXNzYWdl
KiBtc2csIFNvdXBBdXRoKiBhdXRoLCBnYm9vbGVhbiByZXRyeWluZywgZ3BvaW50ZXIgLyogdXNl
cl9kYXRhICovKQorc3RhdGljIHZvaWQgc2Vzc2lvbl9hdXRoZW50aWNhdGUoU291cFNlc3Npb24q
IHNlc3Npb24sIFNvdXBNZXNzYWdlKiBtZXNzYWdlLCBTb3VwQXV0aCogYXV0aCwgZ2Jvb2xlYW4g
cmV0cnlpbmcsIGdwb2ludGVyIC8qIHVzZXJfZGF0YSAqLykKIHsKICAgICBTb3VwVVJJKiB1cmk7
Ci0gICAgRXdrX0F1dGhfRGF0YSogYXV0aF9kYXRhOwotICAgIGNvbnN0IGNoYXIqIHJlYWxtOwor
ICAgIEV3a19BdXRoX0RhdGEqIGF1dGhEYXRhOworICAgIGNvbnN0IGNoYXIqIHJlYWxNZXNzYWdl
OwogCiAgICAgaWYgKCFld2tfYXV0aF9zaG93X2RpYWxvZ19jYWxsYmFjaykKICAgICAgICAgcmV0
dXJuOwogCi0gICAgYXV0aF9kYXRhID0gc3RhdGljX2Nhc3Q8RXdrX0F1dGhfRGF0YSo+KGNhbGxv
YygxLCBzaXplb2YoRXdrX0F1dGhfRGF0YSkpKTsKKyAgICBhdXRoRGF0YSA9IHN0YXRpY19jYXN0
PEV3a19BdXRoX0RhdGEqPihjYWxsb2MoMSwgc2l6ZW9mKEV3a19BdXRoX0RhdGEpKSk7CiAKLSAg
ICBpZiAoIWF1dGhfZGF0YSkgeworICAgIGlmICghYXV0aERhdGEpIHsKICAgICAgICAgQ1JJVElD
QUwoImNvdWxkIG5vdCBhbGxvY2F0ZSBFd2tfQXV0aF9EYXRhIik7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBzb3VwX3Nlc3Npb25fcGF1c2VfbWVzc2FnZShzZXNzaW9uLCBtc2cpOwor
ICAgIHNvdXBfc2Vzc2lvbl9wYXVzZV9tZXNzYWdlKHNlc3Npb24sIG1lc3NhZ2UpOwogICAgIC8v
IFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBtZXNzYWdlIHN0aWNrcyBhcm91bmQgd2hlbiBwYXVz
aW5nIGl0LgotICAgIGdfb2JqZWN0X3JlZihtc2cpOworICAgIGdfb2JqZWN0X3JlZihtZXNzYWdl
KTsKICAgICBnX29iamVjdF9yZWYoc2Vzc2lvbik7CiAgICAgZ19vYmplY3RfcmVmKGF1dGgpOwog
Ci0gICAgYXV0aF9kYXRhLT5tc2cgPSBtc2c7Ci0gICAgYXV0aF9kYXRhLT5hdXRoID0gYXV0aDsK
LSAgICBhdXRoX2RhdGEtPnNlc3Npb24gPSBzZXNzaW9uOworICAgIGF1dGhEYXRhLT5tZXNzYWdl
ID0gbWVzc2FnZTsKKyAgICBhdXRoRGF0YS0+YXV0aCA9IGF1dGg7CisgICAgYXV0aERhdGEtPnNl
c3Npb24gPSBzZXNzaW9uOwogCi0gICAgdXJpID0gc291cF9tZXNzYWdlX2dldF91cmkoYXV0aF9k
YXRhLT5tc2cpOwotICAgIHJlYWxtID0gc291cF9hdXRoX2dldF9yZWFsbShhdXRoX2RhdGEtPmF1
dGgpOworICAgIHVyaSA9IHNvdXBfbWVzc2FnZV9nZXRfdXJpKGF1dGhEYXRhLT5tZXNzYWdlKTsK
KyAgICByZWFsTWVzc2FnZSA9IHNvdXBfYXV0aF9nZXRfcmVhbG0oYXV0aERhdGEtPmF1dGgpOwog
CiAgICAgLy8gQ2FsbCBhcHBsaWNhdGlvbiBtZXRob2QgcmVzcG9uc2libGUgZm9yIHNob3dpbmcg
YXV0aGVudGljYXRpb24gZGlhbG9nIGFuZCBzZW5kaW5nIGJhY2sgYXV0aG9yaXphdGlvbiBkYXRh
LgotICAgIGV3a19hdXRoX3Nob3dfZGlhbG9nX2NhbGxiYWNrKHJlYWxtLCBzb3VwX3VyaV90b19z
dHJpbmcodXJpLCBUUlVFKSwgYXV0aF9kYXRhKTsKKyAgICBld2tfYXV0aF9zaG93X2RpYWxvZ19j
YWxsYmFjayhyZWFsTWVzc2FnZSwgc291cF91cmlfdG9fc3RyaW5nKHVyaSwgVFJVRSksIGF1dGhE
YXRhKTsKIH0KIAotc3RhdGljIHZvaWQgZnJlZV9hdXRoX2RhdGEoRXdrX0F1dGhfRGF0YSogYXV0
aF9kYXRhKQorc3RhdGljIHZvaWQgZnJlZV9hdXRoX2RhdGEoRXdrX0F1dGhfRGF0YSogYXV0aERh
dGEpCiB7Ci0gICAgZ19vYmplY3RfdW5yZWYoYXV0aF9kYXRhLT5tc2cpOwotICAgIGdfb2JqZWN0
X3VucmVmKGF1dGhfZGF0YS0+c2Vzc2lvbik7Ci0gICAgZ19vYmplY3RfdW5yZWYoYXV0aF9kYXRh
LT5hdXRoKTsKLSAgICBmcmVlKGF1dGhfZGF0YSk7CisgICAgZ19vYmplY3RfdW5yZWYoYXV0aERh
dGEtPm1lc3NhZ2UpOworICAgIGdfb2JqZWN0X3VucmVmKGF1dGhEYXRhLT5zZXNzaW9uKTsKKyAg
ICBnX29iamVjdF91bnJlZihhdXRoRGF0YS0+YXV0aCk7CisgICAgZnJlZShhdXRoRGF0YSk7CiB9
CiAKIHN0YXRpYyB2b2lkIGF0dGFjaChTb3VwU2Vzc2lvbkZlYXR1cmUqIG1hbmFnZXIsIFNvdXBT
ZXNzaW9uKiBzZXNzaW9uKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19j
b250ZXh0bWVudS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2NvbnRleHRtZW51LmNw
cAppbmRleCA2MjFjNzljLi5mYTczNjIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9l
d2svZXdrX2NvbnRleHRtZW51LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2Nv
bnRleHRtZW51LmNwcApAQCAtMjQ4LDcgKzI0OCw3IEBAIEV3a19Db250ZXh0X01lbnUqIGV3a19j
b250ZXh0X21lbnVfbmV3KEV2YXNfT2JqZWN0KiB2aWV3LCBXZWJDb3JlOjpDb250ZXh0TWVudUNv
CiAgKgogICogRnJlZXMgdGhlIGNvbnRleHQgbWVudS4KICAqCi0gKiBAcGFyYW0gbyB0aGUgdmll
dyBvYmplY3QKKyAqIEBwYXJhbSBtZW51IHRoZSB2aWV3IG9iamVjdAogICogQHJldHVybiBAYyBF
SU5BX1RSVUUgb24gc3VjY2Vzcywgb3IgQGMgRUlOQV9GQUxTRSBvbiBmYWlsdXJlCiAgKgogICog
QG5vdGUgZW1pdHMgYSBzaWduYWwgImNvbnRleHRtZW51LGZyZWUiCkBAIC0yNjksNyArMjY5LDcg
QEAgRWluYV9Cb29sIGV3a19jb250ZXh0X21lbnVfZnJlZShFd2tfQ29udGV4dF9NZW51KiBtZW51
KQogICoKICAqIEFwcGVuZHMgdGhlIFdlYkNvcmUncyBpdGVtIHRvIHRoZSBjb250ZXh0IG1lbnUg
b2JqZWN0LgogICoKLSAqIEBwYXJhbSBvIHRoZSBjb250ZXh0IG1lbnUgb2JqZWN0CisgKiBAcGFy
YW0gbWVudSB0aGUgY29udGV4dCBtZW51IG9iamVjdAogICogQHBhcmFtIGNvcmUgdGhlIFdlYkNv
cmUncyBjb250ZXh0IG1lbnUgaXRlbSB0aGF0IHdpbGwgYmUgYWRkZWQgdG8gdGhlIGNvbnRleHQg
bWVudQogICogQG5vdGUgZW1pdHMgYSBzaWduYWwgImNvbnRleHRtZW51LGl0ZW0sYXBwZW5kZWQi
CiAgKgpAQCAtMjk0LDcgKzI5NCw3IEBAIHZvaWQgZXdrX2NvbnRleHRfbWVudV9pdGVtX2FwcGVu
ZChFd2tfQ29udGV4dF9NZW51KiBtZW51LCBXZWJDb3JlOjpDb250ZXh0TWVudUl0CiAgKgogICog
RW1pdHMgYSBzaWduYWwgd2l0aCB0aGUgaXRlbXMgb2YgdGhlIGNvbnRleHQgbWVudS4KICAqCi0g
KiBAcGFyYW0gbyB0aGUgY29udGV4dCBtZW51IG9iamVjdAorICogQHBhcmFtIG1lbnUgdGhlIGNv
bnRleHQgbWVudSBvYmplY3QKICAqIEByZXR1cm4gdGhlIHNhbWUgY29udGV4dCBtZW51IG9iamVj
dCB0aGF0IHdhcyBnaXZlbiB0aHJvdWdoIHBhcmFtZXRlcgogICoKICAqIEBub3RlIGVtaXRzIGEg
c2lnbmFsICJjb250ZXh0bWVudSxjdXN0b21pemUiCkBAIC0zMTQsNyArMzE0LDcgQEAgRXdrX0Nv
bnRleHRfTWVudSogZXdrX2NvbnRleHRfbWVudV9jdXN0b21fZ2V0KGNvbnN0IEV3a19Db250ZXh0
X01lbnUqIG1lbnUpCiAgKgogICogRW1pdHMgYSBzaWduYWwgImNvbnRleHRtZW51LHNob3ciCiAg
KgotICogQHBhcmFtIG8gdGhlIGNvbnRleHQgbWVudSBvYmplY3QKKyAqIEBwYXJhbSBtZW51IHRo
ZSBjb250ZXh0IG1lbnUgb2JqZWN0CiAgKi8KIHZvaWQgZXdrX2NvbnRleHRfbWVudV9zaG93KGNv
bnN0IEV3a19Db250ZXh0X01lbnUqIG1lbnUpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2VmbC9ld2svZXdrX2Nvb2tpZXMuY3BwIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19jb29r
aWVzLmNwcAppbmRleCAwNGQ3MDQxLi5mNmY0ZTg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2VmbC9ld2svZXdrX2Nvb2tpZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tf
Y29va2llcy5jcHAKQEAgLTY3LDY2ICs2Nyw2NiBAQCBFaW5hX0Jvb2wgZXdrX2Nvb2tpZXNfZmls
ZV9zZXQoY29uc3QgY2hhciogZmlsZW5hbWUpCiB2b2lkIGV3a19jb29raWVzX2NsZWFyKHZvaWQp
CiB7CiAjaWYgVVNFKFNPVVApCi0gICAgR1NMaXN0KiBsOworICAgIEdTTGlzdCogbGlzdDsKICAg
ICBHU0xpc3QqIHA7CiAgICAgU291cENvb2tpZUphciogY29va2llSmFyID0gV2ViQ29yZTo6ZGVm
YXVsdENvb2tpZUphcigpOwogCi0gICAgbCA9IHNvdXBfY29va2llX2phcl9hbGxfY29va2llcyhj
b29raWVKYXIpOwotICAgIGZvciAocCA9IGw7IHA7IHAgPSBwLT5uZXh0KQorICAgIGxpc3QgPSBz
b3VwX2Nvb2tpZV9qYXJfYWxsX2Nvb2tpZXMoY29va2llSmFyKTsKKyAgICBmb3IgKHAgPSBsaXN0
OyBwOyBwID0gcC0+bmV4dCkKICAgICAgICAgc291cF9jb29raWVfamFyX2RlbGV0ZV9jb29raWUo
Y29va2llSmFyLCAoU291cENvb2tpZSopcC0+ZGF0YSk7CiAKLSAgICBzb3VwX2Nvb2tpZXNfZnJl
ZShsKTsKKyAgICBzb3VwX2Nvb2tpZXNfZnJlZShsaXN0KTsKICNlbmRpZgogfQogCiBFaW5hX0xp
c3QqIGV3a19jb29raWVzX2dldF9hbGwodm9pZCkKIHsKLSAgICBFaW5hX0xpc3QqIGVsID0gMDsK
KyAgICBFaW5hX0xpc3QqIHJlc3VsdCA9IDA7CiAjaWYgVVNFKFNPVVApCi0gICAgR1NMaXN0KiBs
OworICAgIEdTTGlzdCogbGlzdDsKICAgICBHU0xpc3QqIHA7CiAgICAgU291cENvb2tpZUphciog
Y29va2llSmFyID0gV2ViQ29yZTo6ZGVmYXVsdENvb2tpZUphcigpOwogCi0gICAgbCA9IHNvdXBf
Y29va2llX2phcl9hbGxfY29va2llcyhjb29raWVKYXIpOwotICAgIGZvciAocCA9IGw7IHA7IHAg
PSBwLT5uZXh0KSB7CisgICAgbGlzdCA9IHNvdXBfY29va2llX2phcl9hbGxfY29va2llcyhjb29r
aWVKYXIpOworICAgIGZvciAocCA9IGxpc3Q7IHA7IHAgPSBwLT5uZXh0KSB7CiAgICAgICAgIFNv
dXBDb29raWUqIGNvb2tpZSA9IHN0YXRpY19jYXN0PFNvdXBDb29raWUqPihwLT5kYXRhKTsKLSAg
ICAgICAgRXdrX0Nvb2tpZSogYyA9IHN0YXRpY19jYXN0PEV3a19Db29raWUqPihtYWxsb2Moc2l6
ZW9mKCpjKSkpOwotICAgICAgICBjLT5uYW1lID0gc3RyZHVwKGNvb2tpZS0+bmFtZSk7Ci0gICAg
ICAgIGMtPnZhbHVlID0gc3RyZHVwKGNvb2tpZS0+dmFsdWUpOwotICAgICAgICBjLT5kb21haW4g
PSBzdHJkdXAoY29va2llLT5kb21haW4pOwotICAgICAgICBjLT5wYXRoID0gc3RyZHVwKGNvb2tp
ZS0+cGF0aCk7Ci0gICAgICAgIGMtPmV4cGlyZXMgPSBzb3VwX2RhdGVfdG9fdGltZV90KGNvb2tp
ZS0+ZXhwaXJlcyk7Ci0gICAgICAgIGMtPnNlY3VyZSA9IHN0YXRpY19jYXN0PEVpbmFfQm9vbD4o
Y29va2llLT5zZWN1cmUpOwotICAgICAgICBjLT5odHRwX29ubHkgPSBzdGF0aWNfY2FzdDxFaW5h
X0Jvb2w+KGNvb2tpZS0+aHR0cF9vbmx5KTsKLSAgICAgICAgZWwgPSBlaW5hX2xpc3RfYXBwZW5k
KGVsLCBjKTsKKyAgICAgICAgRXdrX0Nvb2tpZSogZXdrQ29va2llID0gc3RhdGljX2Nhc3Q8RXdr
X0Nvb2tpZSo+KG1hbGxvYyhzaXplb2YoKmV3a0Nvb2tpZSkpKTsKKyAgICAgICAgZXdrQ29va2ll
LT5uYW1lID0gc3RyZHVwKGNvb2tpZS0+bmFtZSk7CisgICAgICAgIGV3a0Nvb2tpZS0+dmFsdWUg
PSBzdHJkdXAoY29va2llLT52YWx1ZSk7CisgICAgICAgIGV3a0Nvb2tpZS0+ZG9tYWluID0gc3Ry
ZHVwKGNvb2tpZS0+ZG9tYWluKTsKKyAgICAgICAgZXdrQ29va2llLT5wYXRoID0gc3RyZHVwKGNv
b2tpZS0+cGF0aCk7CisgICAgICAgIGV3a0Nvb2tpZS0+ZXhwaXJlcyA9IHNvdXBfZGF0ZV90b190
aW1lX3QoY29va2llLT5leHBpcmVzKTsKKyAgICAgICAgZXdrQ29va2llLT5zZWN1cmUgPSBzdGF0
aWNfY2FzdDxFaW5hX0Jvb2w+KGNvb2tpZS0+c2VjdXJlKTsKKyAgICAgICAgZXdrQ29va2llLT5o
dHRwX29ubHkgPSBzdGF0aWNfY2FzdDxFaW5hX0Jvb2w+KGNvb2tpZS0+aHR0cF9vbmx5KTsKKyAg
ICAgICAgcmVzdWx0ID0gZWluYV9saXN0X2FwcGVuZChyZXN1bHQsIGV3a0Nvb2tpZSk7CiAgICAg
fQogCi0gICAgc291cF9jb29raWVzX2ZyZWUobCk7CisgICAgc291cF9jb29raWVzX2ZyZWUobGlz
dCk7CiAjZW5kaWYKLSAgICByZXR1cm4gZWw7Ci19CisgICAgcmV0dXJuIHJlc3VsdDsKKwl9CiAK
IHZvaWQgZXdrX2Nvb2tpZXNfY29va2llX2RlbChFd2tfQ29va2llKiBjb29raWUpCiB7CiAjaWYg
VVNFKFNPVVApCiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oY29va2llKTsKLSAgICBH
U0xpc3QqIGw7CisgICAgR1NMaXN0KiBsaXN0OwogICAgIEdTTGlzdCogcDsKICAgICBTb3VwQ29v
a2llSmFyKiBjb29raWVKYXIgPSBXZWJDb3JlOjpkZWZhdWx0Q29va2llSmFyKCk7Ci0gICAgU291
cENvb2tpZSogYzEgPSBzb3VwX2Nvb2tpZV9uZXcoCisgICAgU291cENvb2tpZSogY29va2llMSA9
IHNvdXBfY29va2llX25ldygKICAgICAgICAgY29va2llLT5uYW1lLCBjb29raWUtPnZhbHVlLCBj
b29raWUtPmRvbWFpbiwgY29va2llLT5wYXRoLCAtMSk7CiAKLSAgICBsID0gc291cF9jb29raWVf
amFyX2FsbF9jb29raWVzKGNvb2tpZUphcik7Ci0gICAgZm9yIChwID0gbDsgcDsgcCA9IHAtPm5l
eHQpIHsKLSAgICAgICAgU291cENvb2tpZSogYzIgPSBzdGF0aWNfY2FzdDxTb3VwQ29va2llKj4o
cC0+ZGF0YSk7Ci0gICAgICAgIGlmIChzb3VwX2Nvb2tpZV9lcXVhbChjMSwgYzIpKSB7Ci0gICAg
ICAgICAgICBzb3VwX2Nvb2tpZV9qYXJfZGVsZXRlX2Nvb2tpZShjb29raWVKYXIsIGMyKTsKKyAg
ICBsaXN0ID0gc291cF9jb29raWVfamFyX2FsbF9jb29raWVzKGNvb2tpZUphcik7CisgICAgZm9y
IChwID0gbGlzdDsgcDsgcCA9IHAtPm5leHQpIHsKKyAgICAgICAgU291cENvb2tpZSogY29va2ll
MiA9IHN0YXRpY19jYXN0PFNvdXBDb29raWUqPihwLT5kYXRhKTsKKyAgICAgICAgaWYgKHNvdXBf
Y29va2llX2VxdWFsKGNvb2tpZTEsIGNvb2tpZTIpKSB7CisgICAgICAgICAgICBzb3VwX2Nvb2tp
ZV9qYXJfZGVsZXRlX2Nvb2tpZShjb29raWVKYXIsIGNvb2tpZTIpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBzb3VwX2Nvb2tpZV9mcmVlKGMxKTsKLSAgICBz
b3VwX2Nvb2tpZXNfZnJlZShsKTsKKyAgICBzb3VwX2Nvb2tpZV9mcmVlKGNvb2tpZTEpOworICAg
IHNvdXBfY29va2llc19mcmVlKGxpc3QpOwogI2VuZGlmCiB9CiAKQEAgLTE2Nyw3ICsxNjcsNyBA
QCB2b2lkIGV3a19jb29raWVzX3BvbGljeV9zZXQoRXdrX0Nvb2tpZV9Qb2xpY3kgY29va2llUG9s
aWN5KQogCiBFd2tfQ29va2llX1BvbGljeSBld2tfY29va2llc19wb2xpY3lfZ2V0KHZvaWQpCiB7
Ci0gICAgRXdrX0Nvb2tpZV9Qb2xpY3kgZXdrX3BvbGljeSA9IEVXS19DT09LSUVfSkFSX0FDQ0VQ
VF9BTFdBWVM7CisgICAgRXdrX0Nvb2tpZV9Qb2xpY3kgZXdrUG9saWN5ID0gRVdLX0NPT0tJRV9K
QVJfQUNDRVBUX0FMV0FZUzsKICNpZiBVU0UoU09VUCkKICAgICBTb3VwQ29va2llSmFyKiBjb29r
aWVKYXIgPSBXZWJDb3JlOjpkZWZhdWx0Q29va2llSmFyKCk7CiAgICAgU291cENvb2tpZUphckFj
Y2VwdFBvbGljeSBwb2xpY3k7CkBAIC0xNzUsMTYgKzE3NSwxNiBAQCBFd2tfQ29va2llX1BvbGlj
eSBld2tfY29va2llc19wb2xpY3lfZ2V0KHZvaWQpCiAgICAgcG9saWN5ID0gc291cF9jb29raWVf
amFyX2dldF9hY2NlcHRfcG9saWN5KGNvb2tpZUphcik7CiAgICAgc3dpdGNoIChwb2xpY3kpIHsK
ICAgICBjYXNlIFNPVVBfQ09PS0lFX0pBUl9BQ0NFUFRfTkVWRVI6Ci0gICAgICAgIGV3a19wb2xp
Y3kgPSBFV0tfQ09PS0lFX0pBUl9BQ0NFUFRfTkVWRVI7CisgICAgICAgIGV3a1BvbGljeSA9IEVX
S19DT09LSUVfSkFSX0FDQ0VQVF9ORVZFUjsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTT1VQ
X0NPT0tJRV9KQVJfQUNDRVBUX0FMV0FZUzoKLSAgICAgICAgZXdrX3BvbGljeSA9IEVXS19DT09L
SUVfSkFSX0FDQ0VQVF9BTFdBWVM7CisgICAgICAgIGV3a1BvbGljeSA9IEVXS19DT09LSUVfSkFS
X0FDQ0VQVF9BTFdBWVM7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgU09VUF9DT09LSUVfSkFS
X0FDQ0VQVF9OT19USElSRF9QQVJUWToKLSAgICAgICAgZXdrX3BvbGljeSA9IEVXS19DT09LSUVf
SkFSX0FDQ0VQVF9OT19USElSRF9QQVJUWTsKKyAgICAgICAgZXdrUG9saWN5ID0gRVdLX0NPT0tJ
RV9KQVJfQUNDRVBUX05PX1RISVJEX1BBUlRZOwogICAgICAgICBicmVhazsKICAgICB9CiAjZW5k
aWYKIAotICAgIHJldHVybiBld2tfcG9saWN5OworICAgIHJldHVybiBld2tQb2xpY3k7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2ZyYW1lLmNwcCBiL1NvdXJjZS9X
ZWJLaXQvZWZsL2V3ay9ld2tfZnJhbWUuY3BwCmluZGV4IGVkZjU1OTkuLjdhOTU4Y2EgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfZnJhbWUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvZWZsL2V3ay9ld2tfZnJhbWUuY3BwCkBAIC03Nyw3ICs3Nyw3IEBAIHN0cnVjdCBFd2tf
RnJhbWVfU21hcnRfRGF0YSB7CiAKIHN0cnVjdCBFaW5hX0l0ZXJhdG9yX0V3a19GcmFtZSB7CiAg
ICAgRWluYV9JdGVyYXRvciBiYXNlOwotICAgIEV2YXNfT2JqZWN0KiBvYmo7CisgICAgRXZhc19P
YmplY3QqIG9iamVjdDsKICAgICB1bnNpZ25lZCBjdXJyZW50SW5kZXg7CiB9OwogCkBAIC0xMTQs
MjAgKzExNCwyMCBAQCBzdGF0aWMgRXZhc19TbWFydF9DbGFzcyBfcGFyZW50X3NjID0gRVZBU19T
TUFSVF9DTEFTU19JTklUX05VTEw7CiBzdGF0aWMgaW5saW5lIHZvaWQgX2V3a19mcmFtZV9kZWJ1
ZyhFdmFzX09iamVjdCogZXdrRnJhbWUpCiB7CiAgICAgRXZhc19PYmplY3QqIGNsaXAsICogcGFy
ZW50OwotICAgIEV2YXNfQ29vcmQgeCwgeSwgdywgaCwgY3gsIGN5LCBjdywgY2g7Ci0gICAgaW50
IHIsIGcsIGIsIGEsIGNyLCBjZywgY2IsIGNhOworICAgIEV2YXNfQ29vcmQgeCwgeSwgd2lkdGgs
IGhlaWdodCwgY29udGVudFgsIGNvbnRlbnRZLCBjb250ZW50V2lkdGgsIGNvbnRlbnRIZWlnaHQ7
CisgICAgaW50IHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhLCBjb250ZW50UmVkLCBjb250ZW50R3Jl
ZW4sIGNvbnRlbnRCbHVlLCBjb250ZW50QWxwaGE7CiAKLSAgICBldmFzX29iamVjdF9jb2xvcl9n
ZXQoZXdrRnJhbWUsICZyLCAmZywgJmIsICZhKTsKLSAgICBldmFzX29iamVjdF9nZW9tZXRyeV9n
ZXQoZXdrRnJhbWUsICZ4LCAmeSwgJncsICZoKTsKKyAgICBldmFzX29iamVjdF9jb2xvcl9nZXQo
ZXdrRnJhbWUsICZyZWQsICZncmVlbiwgJmJsdWUsICZhbHBoYSk7CisgICAgZXZhc19vYmplY3Rf
Z2VvbWV0cnlfZ2V0KGV3a0ZyYW1lLCAmeCwgJnksICZ3aWR0aCwgJmhlaWdodCk7CiAKICAgICBj
bGlwID0gZXZhc19vYmplY3RfY2xpcF9nZXQoZXdrRnJhbWUpOwotICAgIGV2YXNfb2JqZWN0X2Nv
bG9yX2dldChjbGlwLCAmY3IsICZjZywgJmNiLCAmY2EpOwotICAgIGV2YXNfb2JqZWN0X2dlb21l
dHJ5X2dldChjbGlwLCAmY3gsICZjeSwgJmN3LCAmY2gpOworICAgIGV2YXNfb2JqZWN0X2NvbG9y
X2dldChjbGlwLCAmY29udGVudFJlZCwgJmNvbnRlbnRHcmVlbiwgJmNvbnRlbnRCbHVlLCAmY29u
dGVudEFscGhhKTsKKyAgICBldmFzX29iamVjdF9nZW9tZXRyeV9nZXQoY2xpcCwgJmNvbnRlbnRY
LCAmY29udGVudFksICZjb250ZW50V2lkdGgsICZjb250ZW50SGVpZ2h0KTsKIAogICAgIGZwcmlu
dGYoc3RkZXJyLCAiJXA6IHR5cGU9JXMgbmFtZT0lcywgdmlzaWJsZT0lZCwgY29sb3I9JTAyeCUw
MnglMDJ4JTAyeCwgJWQsJWQrJWR4JWQsIGNsaXBwZXI9JXAgKCVkLCAlMDJ4JTAyeCUwMnglMDJ4
LCAlZCwlZCslZHglZClcbiIsCiAgICAgICAgICAgICBld2tGcmFtZSwgZXZhc19vYmplY3RfdHlw
ZV9nZXQoZXdrRnJhbWUpLCBldmFzX29iamVjdF9uYW1lX2dldChld2tGcmFtZSksIGV2YXNfb2Jq
ZWN0X3Zpc2libGVfZ2V0KGV3a0ZyYW1lKSwKLSAgICAgICAgICAgIHIsIGcsIGIsIGEsIHgsIHks
IHcsIGgsCi0gICAgICAgICAgICBjbGlwLCBldmFzX29iamVjdF92aXNpYmxlX2dldChjbGlwKSwg
Y3IsIGNnLCBjYiwgY2EsIGN4LCBjeSwgY3csIGNoKTsKKyAgICAgICAgICAgIHJlZCwgZ3JlZW4s
IGJsdWUsIGFscGhhLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LAorICAgICAgICAgICAgY2xpcCwgZXZh
c19vYmplY3RfdmlzaWJsZV9nZXQoY2xpcCksIGNvbnRlbnRSZWQsIGNvbnRlbnRHcmVlbiwgY29u
dGVudEJsdWUsIGNvbnRlbnRBbHBoYSwgY29udGVudFgsIGNvbnRlbnRZLCBjb250ZW50V2lkdGgs
IGNvbnRlbnRIZWlnaHQpOwogICAgIHBhcmVudCA9IGV2YXNfb2JqZWN0X3NtYXJ0X3BhcmVudF9n
ZXQoZXdrRnJhbWUpOwogICAgIGlmICghcGFyZW50KQogICAgICAgICBmcHJpbnRmKHN0ZGVyciwg
IlxuIik7CkBAIC0xNDUsMjIgKzE0NSwyMiBAQCBzdGF0aWMgaW5saW5lIEV2YXNfT2JqZWN0KiBr
aXQoV2ViQ29yZTo6RnJhbWUqIGZyYW1lKQogewogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJl
dHVybiAwOwotICAgIFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50RWZsKiBmbCA9IF9ld2tfZnJh
bWVfbG9hZGVyX2VmbF9nZXQoZnJhbWUpOwotICAgIGlmICghZmwpCisgICAgV2ViQ29yZTo6RnJh
bWVMb2FkZXJDbGllbnRFZmwqIGZyYW1lTG9hZGVyQ2xpZW50ID0gX2V3a19mcmFtZV9sb2FkZXJf
ZWZsX2dldChmcmFtZSk7CisgICAgaWYgKCFmcmFtZUxvYWRlckNsaWVudCkKICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgcmV0dXJuIGZsLT53ZWJGcmFtZSgpOworICAgIHJldHVybiBmcmFtZUxvYWRl
ckNsaWVudC0+d2ViRnJhbWUoKTsKIH0KIAotc3RhdGljIEVpbmFfQm9vbCBfZXdrX2ZyYW1lX2No
aWxkcmVuX2l0ZXJhdG9yX25leHQoRWluYV9JdGVyYXRvcl9Fd2tfRnJhbWUqIGl0LCBFdmFzX09i
amVjdCoqIGRhdGEpCitzdGF0aWMgRWluYV9Cb29sIF9ld2tfZnJhbWVfY2hpbGRyZW5faXRlcmF0
b3JfbmV4dChFaW5hX0l0ZXJhdG9yX0V3a19GcmFtZSogaXRlcmF0b3IsIEV2YXNfT2JqZWN0Kiog
ZGF0YSkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihpdC0+b2JqLCBzZCwgRUlO
QV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwg
RUlOQV9GQUxTRSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oaXRlcmF0b3ItPm9i
amVjdCwgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTl9WQUwoc21hcnREYXRhLT5mcmFtZSwgRUlOQV9GQUxTRSk7CiAKLSAgICBXZWJDb3JlOjpG
cmFtZVRyZWUqIHRyZWUgPSBzZC0+ZnJhbWUtPnRyZWUoKTsgLy8gY2hlY2sgaWYgaXQncyBzdGls
bCB2YWxpZAorICAgIFdlYkNvcmU6OkZyYW1lVHJlZSogdHJlZSA9IHNtYXJ0RGF0YS0+ZnJhbWUt
PnRyZWUoKTsgLy8gY2hlY2sgaWYgaXQncyBzdGlsbCB2YWxpZAogICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOX1ZBTCh0cmVlLCBFSU5BX0ZBTFNFKTsKIAotICAgIGlmIChpdC0+Y3VycmVu
dEluZGV4IDwgdHJlZS0+Y2hpbGRDb3VudCgpKSB7Ci0gICAgICAgICpkYXRhID0ga2l0KHRyZWUt
PmNoaWxkKGl0LT5jdXJyZW50SW5kZXgrKykpOworICAgIGlmIChpdGVyYXRvci0+Y3VycmVudElu
ZGV4IDwgdHJlZS0+Y2hpbGRDb3VudCgpKSB7CisgICAgICAgICpkYXRhID0ga2l0KHRyZWUtPmNo
aWxkKGl0ZXJhdG9yLT5jdXJyZW50SW5kZXgrKykpOwogICAgICAgICByZXR1cm4gRUlOQV9UUlVF
OwogICAgIH0KIApAQCAtMTY5LDUzICsxNjksNTMgQEAgc3RhdGljIEVpbmFfQm9vbCBfZXdrX2Zy
YW1lX2NoaWxkcmVuX2l0ZXJhdG9yX25leHQoRWluYV9JdGVyYXRvcl9Fd2tfRnJhbWUqIGl0LAog
CiBzdGF0aWMgRXZhc19PYmplY3QqIF9ld2tfZnJhbWVfY2hpbGRyZW5faXRlcmF0b3JfZ2V0X2Nv
bnRhaW5lcihFaW5hX0l0ZXJhdG9yX0V3a19GcmFtZSogaXRlcmF0b3IpCiB7Ci0gICAgcmV0dXJu
IGl0ZXJhdG9yLT5vYmo7CisgICAgcmV0dXJuIGl0ZXJhdG9yLT5vYmplY3Q7CiB9CiAKIHN0YXRp
YyB2b2lkIF9ld2tfZnJhbWVfc21hcnRfYWRkKEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsKLSAg
ICBFV0tfRlJBTUVfU0RfR0VUKGV3a0ZyYW1lLCBzZCk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVChl
d2tGcmFtZSwgc21hcnREYXRhKTsKIAotICAgIGlmICghc2QpIHsKLSAgICAgICAgc2QgPSBzdGF0
aWNfY2FzdDxFd2tfRnJhbWVfU21hcnRfRGF0YSo+KGNhbGxvYygxLCBzaXplb2YoRXdrX0ZyYW1l
X1NtYXJ0X0RhdGEpKSk7Ci0gICAgICAgIGlmICghc2QpIHsKKyAgICBpZiAoIXNtYXJ0RGF0YSkg
eworICAgICAgICBzbWFydERhdGEgPSBzdGF0aWNfY2FzdDxFd2tfRnJhbWVfU21hcnRfRGF0YSo+
KGNhbGxvYygxLCBzaXplb2YoRXdrX0ZyYW1lX1NtYXJ0X0RhdGEpKSk7CisgICAgICAgIGlmICgh
c21hcnREYXRhKSB7CiAgICAgICAgICAgICBDUklUSUNBTCgiY291bGQgbm90IGFsbG9jYXRlIEV3
a19GcmFtZV9TbWFydF9EYXRhIik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAg
ICAgICAgZXZhc19vYmplY3Rfc21hcnRfZGF0YV9zZXQoZXdrRnJhbWUsIHNkKTsKKyAgICAgICAg
ZXZhc19vYmplY3Rfc21hcnRfZGF0YV9zZXQoZXdrRnJhbWUsIHNtYXJ0RGF0YSk7CiAgICAgfQog
Ci0gICAgc2QtPnNlbGYgPSBld2tGcmFtZTsKKyAgICBzbWFydERhdGEtPnNlbGYgPSBld2tGcmFt
ZTsKIAogICAgIF9wYXJlbnRfc2MuYWRkKGV3a0ZyYW1lKTsKLSAgICBldmFzX29iamVjdF9zdGF0
aWNfY2xpcF9zZXQoc2QtPmJhc2UuY2xpcHBlciwgRUlOQV9GQUxTRSk7Ci0gICAgZXZhc19vYmpl
Y3RfbW92ZShzZC0+YmFzZS5jbGlwcGVyLCAwLCAwKTsKLSAgICBldmFzX29iamVjdF9yZXNpemUo
c2QtPmJhc2UuY2xpcHBlciwgMCwgMCk7CisgICAgZXZhc19vYmplY3Rfc3RhdGljX2NsaXBfc2V0
KHNtYXJ0RGF0YS0+YmFzZS5jbGlwcGVyLCBFSU5BX0ZBTFNFKTsKKyAgICBldmFzX29iamVjdF9t
b3ZlKHNtYXJ0RGF0YS0+YmFzZS5jbGlwcGVyLCAwLCAwKTsKKyAgICBldmFzX29iamVjdF9yZXNp
emUoc21hcnREYXRhLT5iYXNlLmNsaXBwZXIsIDAsIDApOwogCiAjaWZkZWYgRVdLX0ZSQU1FX0RF
QlVHCi0gICAgc2QtPnJlZ2lvbiA9IGV2YXNfb2JqZWN0X3JlY3RhbmdsZV9hZGQoc2QtPmJhc2Uu
ZXZhcyk7CisgICAgc21hcnREYXRhLT5yZWdpb24gPSBldmFzX29iamVjdF9yZWN0YW5nbGVfYWRk
KHNtYXJ0RGF0YS0+YmFzZS5ldmFzKTsKICAgICBzdGF0aWMgaW50IGkgPSAwOwogICAgIHN3aXRj
aCAoaSkgewogICAgIGNhc2UgMDoKLSAgICAgICAgZXZhc19vYmplY3RfY29sb3Jfc2V0KHNkLT5y
ZWdpb24sIDEyOCwgMCwgMCwgMTI4KTsKKyAgICAgICAgZXZhc19vYmplY3RfY29sb3Jfc2V0KHNt
YXJ0RGF0YS0+cmVnaW9uLCAxMjgsIDAsIDAsIDEyOCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgMToKLSAgICAgICAgZXZhc19vYmplY3RfY29sb3Jfc2V0KHNkLT5yZWdpb24sIDAsIDEyOCwg
MCwgMTI4KTsKKyAgICAgICAgZXZhc19vYmplY3RfY29sb3Jfc2V0KHNtYXJ0RGF0YS0+cmVnaW9u
LCAwLCAxMjgsIDAsIDEyOCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgMjoKLSAgICAgICAg
ZXZhc19vYmplY3RfY29sb3Jfc2V0KHNkLT5yZWdpb24sIDAsIDAsIDEyOCwgMTI4KTsKKyAgICAg
ICAgZXZhc19vYmplY3RfY29sb3Jfc2V0KHNtYXJ0RGF0YS0+cmVnaW9uLCAwLCAwLCAxMjgsIDEy
OCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgMzoKLSAgICAgICAgZXZhc19vYmplY3RfY29s
b3Jfc2V0KHNkLT5yZWdpb24sIDEyOCwgMCwgMCwgMTI4KTsKKyAgICAgICAgZXZhc19vYmplY3Rf
Y29sb3Jfc2V0KHNtYXJ0RGF0YS0+cmVnaW9uLCAxMjgsIDAsIDAsIDEyOCk7CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgNDoKLSAgICAgICAgZXZhc19vYmplY3RfY29sb3Jfc2V0KHNkLT5yZWdp
b24sIDEyOCwgMTI4LCAwLCAxMjgpOworICAgICAgICBldmFzX29iamVjdF9jb2xvcl9zZXQoc21h
cnREYXRhLT5yZWdpb24sIDEyOCwgMTI4LCAwLCAxMjgpOwogICAgICAgICBicmVhazsKICAgICBj
YXNlIDU6Ci0gICAgICAgIGV2YXNfb2JqZWN0X2NvbG9yX3NldChzZC0+cmVnaW9uLCAxMjgsIDAs
IDEyOCwgMTI4KTsKKyAgICAgICAgZXZhc19vYmplY3RfY29sb3Jfc2V0KHNtYXJ0RGF0YS0+cmVn
aW9uLCAxMjgsIDAsIDEyOCwgMTI4KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSA2OgotICAg
ICAgICBldmFzX29iamVjdF9jb2xvcl9zZXQoc2QtPnJlZ2lvbiwgMCwgMTI4LCAxMjgsIDEyOCk7
CisgICAgICAgIGV2YXNfb2JqZWN0X2NvbG9yX3NldChzbWFydERhdGEtPnJlZ2lvbiwgMCwgMTI4
LCAxMjgsIDEyOCk7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFr
OwpAQCAtMjI0LDI4ICsyMjQsMjggQEAgc3RhdGljIHZvaWQgX2V3a19mcmFtZV9zbWFydF9hZGQo
RXZhc19PYmplY3QqIGV3a0ZyYW1lKQogICAgIGlmIChpID4gNikKICAgICAgICAgaSA9IDA7CiAK
LSAgICBldmFzX29iamVjdF9zbWFydF9tZW1iZXJfYWRkKHNkLT5yZWdpb24sIGV3a0ZyYW1lKTsK
LSAgICBldmFzX29iamVjdF9oaWRlKHNkLT5yZWdpb24pOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0
X21lbWJlcl9hZGQoc21hcnREYXRhLT5yZWdpb24sIGV3a0ZyYW1lKTsKKyAgICBldmFzX29iamVj
dF9oaWRlKHNtYXJ0RGF0YS0+cmVnaW9uKTsKICNlbmRpZgogfQogCiBzdGF0aWMgdm9pZCBfZXdr
X2ZyYW1lX3NtYXJ0X2RlbChFdmFzX09iamVjdCogZXdrRnJhbWUpCiB7CiAgICAgV1JOKCJld2tG
cmFtZT0lcCIsIGV3a0ZyYW1lKTsgLy8gWFhYIFJFTU9WRSBNRSBMQVRFUgotICAgIEVXS19GUkFN
RV9TRF9HRVQoZXdrRnJhbWUsIHNkKTsKLQotICAgIGlmIChzZCkgewotICAgICAgICBpZiAoc2Qt
PmZyYW1lKSB7Ci0gICAgICAgICAgICBXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEVmbCogZmxj
ID0gX2V3a19mcmFtZV9sb2FkZXJfZWZsX2dldChzZC0+ZnJhbWUpOwotICAgICAgICAgICAgZmxj
LT5zZXRXZWJGcmFtZSgwKTsKLSAgICAgICAgICAgIHNkLT5mcmFtZS0+bG9hZGVyKCktPmRldGFj
aEZyb21QYXJlbnQoKTsKLSAgICAgICAgICAgIHNkLT5mcmFtZS0+bG9hZGVyKCktPmNhbmNlbEFu
ZENsZWFyKCk7Ci0gICAgICAgICAgICBzZC0+ZnJhbWUgPSAwOworICAgIEVXS19GUkFNRV9TRF9H
RVQoZXdrRnJhbWUsIHNtYXJ0RGF0YSk7CisKKyAgICBpZiAoc21hcnREYXRhKSB7CisgICAgICAg
IGlmIChzbWFydERhdGEtPmZyYW1lKSB7CisgICAgICAgICAgICBXZWJDb3JlOjpGcmFtZUxvYWRl
ckNsaWVudEVmbCogZnJhbWVMb2FkZXJDbGllbnQgPSBfZXdrX2ZyYW1lX2xvYWRlcl9lZmxfZ2V0
KHNtYXJ0RGF0YS0+ZnJhbWUpOworICAgICAgICAgICAgZnJhbWVMb2FkZXJDbGllbnQtPnNldFdl
YkZyYW1lKDApOworICAgICAgICAgICAgc21hcnREYXRhLT5mcmFtZS0+bG9hZGVyKCktPmRldGFj
aEZyb21QYXJlbnQoKTsKKyAgICAgICAgICAgIHNtYXJ0RGF0YS0+ZnJhbWUtPmxvYWRlcigpLT5j
YW5jZWxBbmRDbGVhcigpOworICAgICAgICAgICAgc21hcnREYXRhLT5mcmFtZSA9IDA7CiAgICAg
ICAgIH0KIAotICAgICAgICBlaW5hX3N0cmluZ3NoYXJlX2RlbChzZC0+dGl0bGUpOwotICAgICAg
ICBlaW5hX3N0cmluZ3NoYXJlX2RlbChzZC0+dXJpKTsKLSAgICAgICAgZWluYV9zdHJpbmdzaGFy
ZV9kZWwoc2QtPm5hbWUpOworICAgICAgICBlaW5hX3N0cmluZ3NoYXJlX2RlbChzbWFydERhdGEt
PnRpdGxlKTsKKyAgICAgICAgZWluYV9zdHJpbmdzaGFyZV9kZWwoc21hcnREYXRhLT51cmkpOwor
ICAgICAgICBlaW5hX3N0cmluZ3NoYXJlX2RlbChzbWFydERhdGEtPm5hbWUpOwogICAgIH0KIAog
ICAgIF9wYXJlbnRfc2MuZGVsKGV3a0ZyYW1lKTsKQEAgLTI1MywxNSArMjUzLDE1IEBAIHN0YXRp
YyB2b2lkIF9ld2tfZnJhbWVfc21hcnRfZGVsKEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIAogc3Rh
dGljIHZvaWQgX2V3a19mcmFtZV9zbWFydF9yZXNpemUoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBF
dmFzX0Nvb3JkIHdpZHRoLCBFdmFzX0Nvb3JkIGhlaWdodCkKIHsKLSAgICBFV0tfRlJBTUVfU0Rf
R0VUKGV3a0ZyYW1lLCBzZCk7Ci0gICAgZXZhc19vYmplY3RfcmVzaXplKHNkLT5iYXNlLmNsaXBw
ZXIsIHdpZHRoLCBoZWlnaHQpOworICAgIEVXS19GUkFNRV9TRF9HRVQoZXdrRnJhbWUsIHNtYXJ0
RGF0YSk7CisgICAgZXZhc19vYmplY3RfcmVzaXplKHNtYXJ0RGF0YS0+YmFzZS5jbGlwcGVyLCB3
aWR0aCwgaGVpZ2h0KTsKIAogI2lmZGVmIEVXS19GUkFNRV9ERUJVRwotICAgIGV2YXNfb2JqZWN0
X3Jlc2l6ZShzZC0+cmVnaW9uLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBldmFzX29iamVjdF9yZXNp
emUoc21hcnREYXRhLT5yZWdpb24sIHdpZHRoLCBoZWlnaHQpOwogICAgIEV2YXNfQ29vcmQgeCwg
eTsKLSAgICBldmFzX29iamVjdF9nZW9tZXRyeV9nZXQoc2QtPnJlZ2lvbiwgJngsICZ5LCAmd2lk
dGgsICZoZWlnaHQpOworICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldChzbWFydERhdGEtPnJl
Z2lvbiwgJngsICZ5LCAmd2lkdGgsICZoZWlnaHQpOwogICAgIElORigicmVnaW9uPSVwLCB2aXNp
YmxlPSVkLCBnZW89JWQsJWQgKyAlZHglZCIsCi0gICAgICAgIHNkLT5yZWdpb24sIGV2YXNfb2Jq
ZWN0X3Zpc2libGVfZ2V0KHNkLT5yZWdpb24pLCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAg
ICAgc21hcnREYXRhLT5yZWdpb24sIGV2YXNfb2JqZWN0X3Zpc2libGVfZ2V0KHNtYXJ0RGF0YS0+
cmVnaW9uKSwgeCwgeSwgd2lkdGgsIGhlaWdodCk7CiAgICAgX2V3a19mcmFtZV9kZWJ1Zyhld2tG
cmFtZSk7CiAjZW5kaWYKIH0KQEAgLTI3NiwxMyArMjc2LDEzIEBAIHN0YXRpYyB2b2lkIF9ld2tf
ZnJhbWVfc21hcnRfc2V0KEV2YXNfU21hcnRfQ2xhc3MqIGFwaSkKIAogc3RhdGljIGlubGluZSBF
dmFzX1NtYXJ0KiBfZXdrX2ZyYW1lX3NtYXJ0X2NsYXNzX25ldyh2b2lkKQogewotICAgIHN0YXRp
YyBFdmFzX1NtYXJ0X0NsYXNzIHNjID0gRVZBU19TTUFSVF9DTEFTU19JTklUX05BTUVfVkVSU0lP
TihFV0tfRlJBTUVfVFlQRV9TVFIpOworICAgIHN0YXRpYyBFdmFzX1NtYXJ0X0NsYXNzIHNtYXJ0
Q2xhc3MgPSBFVkFTX1NNQVJUX0NMQVNTX0lOSVRfTkFNRV9WRVJTSU9OKEVXS19GUkFNRV9UWVBF
X1NUUik7CiAgICAgc3RhdGljIEV2YXNfU21hcnQqIHNtYXJ0ID0gMDsKIAogICAgIGlmIChFSU5B
X1VOTElLRUxZKCFzbWFydCkpIHsKICAgICAgICAgZXZhc19vYmplY3Rfc21hcnRfY2xpcHBlZF9z
bWFydF9zZXQoJl9wYXJlbnRfc2MpOwotICAgICAgICBfZXdrX2ZyYW1lX3NtYXJ0X3NldCgmc2Mp
OwotICAgICAgICBzbWFydCA9IGV2YXNfc21hcnRfY2xhc3NfbmV3KCZzYyk7CisgICAgICAgIF9l
d2tfZnJhbWVfc21hcnRfc2V0KCZzbWFydENsYXNzKTsKKyAgICAgICAgc21hcnQgPSBldmFzX3Nt
YXJ0X2NsYXNzX25ldygmc21hcnRDbGFzcyk7CiAgICAgfQogCiAgICAgcmV0dXJuIHNtYXJ0OwpA
QCAtMjk2LDI4ICsyOTYsMjggQEAgRXZhc19PYmplY3QqIGV3a19mcmFtZV92aWV3X2dldChjb25z
dCBFdmFzX09iamVjdCogZXdrRnJhbWUpCiAKIEVpbmFfSXRlcmF0b3IqIGV3a19mcmFtZV9jaGls
ZHJlbl9pdGVyYXRvcl9uZXcoRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewotICAgIEVXS19GUkFN
RV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgMCk7Ci0gICAgRWluYV9JdGVyYXRvcl9F
d2tfRnJhbWUqIGl0ID0gc3RhdGljX2Nhc3Q8RWluYV9JdGVyYXRvcl9Fd2tfRnJhbWUqPgorICAg
IEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzbWFydERhdGEsIDApOworICAg
IEVpbmFfSXRlcmF0b3JfRXdrX0ZyYW1lKiBpdGVyYXRvciA9IHN0YXRpY19jYXN0PEVpbmFfSXRl
cmF0b3JfRXdrX0ZyYW1lKj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2Fs
bG9jKDEsIHNpemVvZihFaW5hX0l0ZXJhdG9yX0V3a19GcmFtZSkpKTsKLSAgICBpZiAoIWl0KQor
ICAgIGlmICghaXRlcmF0b3IpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgRUlOQV9NQUdJQ19T
RVQoJml0LT5iYXNlLCBFSU5BX01BR0lDX0lURVJBVE9SKTsKLSAgICBpdC0+YmFzZS5uZXh0ID0g
RlVOQ19JVEVSQVRPUl9ORVhUKF9ld2tfZnJhbWVfY2hpbGRyZW5faXRlcmF0b3JfbmV4dCk7Ci0g
ICAgaXQtPmJhc2UuZ2V0X2NvbnRhaW5lciA9IEZVTkNfSVRFUkFUT1JfR0VUX0NPTlRBSU5FUihf
ZXdrX2ZyYW1lX2NoaWxkcmVuX2l0ZXJhdG9yX2dldF9jb250YWluZXIpOwotICAgIGl0LT5iYXNl
LmZyZWUgPSBGVU5DX0lURVJBVE9SX0ZSRUUoZnJlZSk7Ci0gICAgaXQtPm9iaiA9IGV3a0ZyYW1l
OwotICAgIGl0LT5jdXJyZW50SW5kZXggPSAwOwotICAgIHJldHVybiAmaXQtPmJhc2U7CisgICAg
RUlOQV9NQUdJQ19TRVQoJml0ZXJhdG9yLT5iYXNlLCBFSU5BX01BR0lDX0lURVJBVE9SKTsKKyAg
ICBpdGVyYXRvci0+YmFzZS5uZXh0ID0gRlVOQ19JVEVSQVRPUl9ORVhUKF9ld2tfZnJhbWVfY2hp
bGRyZW5faXRlcmF0b3JfbmV4dCk7CisgICAgaXRlcmF0b3ItPmJhc2UuZ2V0X2NvbnRhaW5lciA9
IEZVTkNfSVRFUkFUT1JfR0VUX0NPTlRBSU5FUihfZXdrX2ZyYW1lX2NoaWxkcmVuX2l0ZXJhdG9y
X2dldF9jb250YWluZXIpOworICAgIGl0ZXJhdG9yLT5iYXNlLmZyZWUgPSBGVU5DX0lURVJBVE9S
X0ZSRUUoZnJlZSk7CisgICAgaXRlcmF0b3ItPm9iamVjdCA9IGV3a0ZyYW1lOworICAgIGl0ZXJh
dG9yLT5jdXJyZW50SW5kZXggPSAwOworICAgIHJldHVybiAmaXRlcmF0b3ItPmJhc2U7CiB9CiAK
IEV2YXNfT2JqZWN0KiBld2tfZnJhbWVfY2hpbGRfZmluZChFdmFzX09iamVjdCogZXdrRnJhbWUs
IGNvbnN0IGNoYXIqIG5hbWUpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdr
RnJhbWUsIHNkLCAwKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwg
c21hcnREYXRhLCAwKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwobmFtZSwg
MCk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgMCk7Ci0g
ICAgV1RGOjpTdHJpbmcgcyA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChuYW1lKTsKLSAgICByZXR1
cm4ga2l0KHNkLT5mcmFtZS0+dHJlZSgpLT5maW5kKFdURjo6QXRvbWljU3RyaW5nKHMpKSk7Cisg
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUsIDApOwor
ICAgIFdURjo6U3RyaW5nIHN0cmluZyA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChuYW1lKTsKKyAg
ICByZXR1cm4ga2l0KHNtYXJ0RGF0YS0+ZnJhbWUtPnRyZWUoKS0+ZmluZChXVEY6OkF0b21pY1N0
cmluZyhzdHJpbmcpKSk7CiB9CiAKIEVpbmFfQm9vbCBld2tfZnJhbWVfdXJpX3NldChFdmFzX09i
amVjdCogZXdrRnJhbWUsIGNvbnN0IGNoYXIqIHVyaSkKQEAgLTMzOCwyNyArMzM4LDI3IEBAIGNv
bnN0IGNoYXIqIGV3a19mcmFtZV91cmlfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSkK
IAogY29uc3QgY2hhciogZXdrX2ZyYW1lX3RpdGxlX2dldChjb25zdCBFdmFzX09iamVjdCogZXdr
RnJhbWUpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCAw
KTsKLSAgICByZXR1cm4gc2QtPnRpdGxlOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJO
KGV3a0ZyYW1lLCBzbWFydERhdGEsIDApOworICAgIHJldHVybiBzbWFydERhdGEtPnRpdGxlOwog
fQogCiBjb25zdCBjaGFyKiBld2tfZnJhbWVfbmFtZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3
a0ZyYW1lKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwg
MCk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSwg
MCk7CiAKLSAgICBpZiAoIXNkLT5mcmFtZSkgeworICAgIGlmICghc21hcnREYXRhLT5mcmFtZSkg
ewogICAgICAgICBFUlIoImNvdWxkIG5vdCBnZXQgbmFtZSBvZiB1bmluaXRpYWxpemVkIGZyYW1l
LiIpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBjb25zdCBXVEY6OlN0cmluZyBm
cmFtZU5hbWUgPSBzZC0+ZnJhbWUtPnRyZWUoKS0+dW5pcXVlTmFtZSgpOworICAgIGNvbnN0IFdU
Rjo6U3RyaW5nIGZyYW1lTmFtZSA9IHNtYXJ0RGF0YS0+ZnJhbWUtPnRyZWUoKS0+dW5pcXVlTmFt
ZSgpOwogCi0gICAgaWYgKChzZC0+bmFtZSkgJiYgKHNkLT5uYW1lID09IGZyYW1lTmFtZSkpCi0g
ICAgICAgIHJldHVybiBzZC0+bmFtZTsKKyAgICBpZiAoKHNtYXJ0RGF0YS0+bmFtZSkgJiYgKHNt
YXJ0RGF0YS0+bmFtZSA9PSBmcmFtZU5hbWUpKQorICAgICAgICByZXR1cm4gc21hcnREYXRhLT5u
YW1lOwogCi0gICAgZWluYV9zdHJpbmdzaGFyZV9yZXBsYWNlX2xlbmd0aCgmKHNkLT5uYW1lKSwg
ZnJhbWVOYW1lLnV0ZjgoKS5kYXRhKCksIGZyYW1lTmFtZS5sZW5ndGgoKSk7CisgICAgZWluYV9z
dHJpbmdzaGFyZV9yZXBsYWNlX2xlbmd0aCgmKHNtYXJ0RGF0YS0+bmFtZSksIGZyYW1lTmFtZS51
dGY4KCkuZGF0YSgpLCBmcmFtZU5hbWUubGVuZ3RoKCkpOwogCi0gICAgcmV0dXJuIHNkLT5uYW1l
OworICAgIHJldHVybiBzbWFydERhdGEtPm5hbWU7CiB9CiAKIEVpbmFfQm9vbCBld2tfZnJhbWVf
Y29udGVudHNfc2l6ZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBFdmFzX0Nvb3Jk
KiB3aWR0aCwgRXZhc19Db29yZCogaGVpZ2h0KQpAQCAtMzc3LDkgKzM3Nyw5IEBAIEVpbmFfQm9v
bCBld2tfZnJhbWVfY29udGVudHNfc2l6ZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1l
LCBFdmFzX0Nvb3JkKiB3CiAKIHN0YXRpYyBFaW5hX0Jvb2wgX2V3a19mcmFtZV9jb250ZW50c19z
ZXRfaW50ZXJuYWwoRXdrX0ZyYW1lX1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSwgY29uc3QgY2hhciog
Y29udGVudHMsIHNpemVfdCBjb250ZW50c1NpemUsIGNvbnN0IGNoYXIqIG1pbWVUeXBlLCBjb25z
dCBjaGFyKiBlbmNvZGluZywgY29uc3QgY2hhciogYmFzZVVyaSwgY29uc3QgY2hhciogdW5yZWFj
aGFibGVVcmkpCiB7Ci0gICAgc2l6ZV90IGxlbiA9IHN0cmxlbihjb250ZW50cyk7Ci0gICAgaWYg
KGNvbnRlbnRzU2l6ZSA8IDEgfHwgY29udGVudHNTaXplID4gbGVuKQotICAgICAgICBjb250ZW50
c1NpemUgPSBsZW47CisgICAgc2l6ZV90IGxlbmd0aCA9IHN0cmxlbihjb250ZW50cyk7CisgICAg
aWYgKGNvbnRlbnRzU2l6ZSA8IDEgfHwgY29udGVudHNTaXplID4gbGVuZ3RoKQorICAgICAgICBj
b250ZW50c1NpemUgPSBsZW5ndGg7CiAgICAgaWYgKCFtaW1lVHlwZSkKICAgICAgICAgbWltZVR5
cGUgPSAidGV4dC9odG1sIjsKICAgICBpZiAoIWVuY29kaW5nKQpAQCAtNDA4LDU3ICs0MDgsNTcg
QEAgc3RhdGljIEVpbmFfQm9vbCBfZXdrX2ZyYW1lX2NvbnRlbnRzX3NldF9pbnRlcm5hbChFd2tf
RnJhbWVfU21hcnRfRGF0YSogc21hcnREYXQKIAogRWluYV9Cb29sIGV3a19mcmFtZV9jb250ZW50
c19zZXQoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBjb25zdCBjaGFyKiBjb250ZW50cywgc2l6ZV90
IGNvbnRlbnRzU2l6ZSwgY29uc3QgY2hhciogbWltZVR5cGUsIGNvbnN0IGNoYXIqIGVuY29kaW5n
LCBjb25zdCBjaGFyKiBiYXNlVXJpKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJO
KGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fRkFMU0VfUkVU
VVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1Jf
UkVUVVJOKGV3a0ZyYW1lLCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZ
X09OX0ZBTFNFX1JFVFVSTl9WQUwoc21hcnREYXRhLT5mcmFtZSwgRUlOQV9GQUxTRSk7CiAgICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGNvbnRlbnRzLCBFSU5BX0ZBTFNFKTsKICAg
ICByZXR1cm4gX2V3a19mcmFtZV9jb250ZW50c19zZXRfaW50ZXJuYWwKLSAgICAgICAgICAgICAg
IChzZCwgY29udGVudHMsIGNvbnRlbnRzU2l6ZSwgbWltZVR5cGUsIGVuY29kaW5nLCBiYXNlVXJp
LCAwKTsKKyAgICAgICAgICAgICAgIChzbWFydERhdGEsIGNvbnRlbnRzLCBjb250ZW50c1NpemUs
IG1pbWVUeXBlLCBlbmNvZGluZywgYmFzZVVyaSwgMCk7CiB9CiAKIEVpbmFfQm9vbCBld2tfZnJh
bWVfY29udGVudHNfYWx0ZXJuYXRlX3NldChFdmFzX09iamVjdCogZXdrRnJhbWUsIGNvbnN0IGNo
YXIqIGNvbnRlbnRzLCBzaXplX3QgY29udGVudHNTaXplLCBjb25zdCBjaGFyKiBtaW1lVHlwZSwg
Y29uc3QgY2hhciogZW5jb2RpbmcsIGNvbnN0IGNoYXIqIGJhc2VVcmksIGNvbnN0IGNoYXIqIHVu
cmVhY2hhYmxlVXJpKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1l
LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fRkFMU0VfUkVUVVJOX1ZBTChz
ZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3
a0ZyYW1lLCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09OX0ZBTFNF
X1JFVFVSTl9WQUwoc21hcnREYXRhLT5mcmFtZSwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZF
VFlfT05fTlVMTF9SRVRVUk5fVkFMKGNvbnRlbnRzLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodW5yZWFjaGFibGVVcmksIEVJTkFfRkFMU0UpOwogICAg
IHJldHVybiBfZXdrX2ZyYW1lX2NvbnRlbnRzX3NldF9pbnRlcm5hbAotICAgICAgICAgICAgICAg
KHNkLCBjb250ZW50cywgY29udGVudHNTaXplLCBtaW1lVHlwZSwgZW5jb2RpbmcsIGJhc2VVcmks
CisgICAgICAgICAgICAgICAoc21hcnREYXRhLCBjb250ZW50cywgY29udGVudHNTaXplLCBtaW1l
VHlwZSwgZW5jb2RpbmcsIGJhc2VVcmksCiAgICAgICAgICAgICAgICB1bnJlYWNoYWJsZVVyaSk7
CiB9CiAKIEVpbmFfQm9vbCBld2tfZnJhbWVfc2NyaXB0X2V4ZWN1dGUoRXZhc19PYmplY3QqIGV3
a0ZyYW1lLCBjb25zdCBjaGFyKiBzY3JpcHQpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9S
RVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9GQUxT
RV9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX0ZSQU1FX1NEX0dF
VF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9T
QUZFVFlfT05fRkFMU0VfUkVUVVJOX1ZBTChzbWFydERhdGEtPmZyYW1lLCBFSU5BX0ZBTFNFKTsK
ICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2NyaXB0LCBFSU5BX0ZBTFNFKTsK
LSAgICBzZC0+ZnJhbWUtPnNjcmlwdCgpLT5leGVjdXRlU2NyaXB0KFdURjo6U3RyaW5nOjpmcm9t
VVRGOChzY3JpcHQpLCB0cnVlKTsKKyAgICBzbWFydERhdGEtPmZyYW1lLT5zY3JpcHQoKS0+ZXhl
Y3V0ZVNjcmlwdChXVEY6OlN0cmluZzo6ZnJvbVVURjgoc2NyaXB0KSwgdHJ1ZSk7CiAgICAgcmV0
dXJuIEVJTkFfVFJVRTsKIH0KIAogRWluYV9Cb29sIGV3a19mcmFtZV9lZGl0YWJsZV9nZXQoY29u
c3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVU
VVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7Ci0gICAgcmV0dXJuIHNkLT5lZGl0YWJs
ZTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRhLCBF
SU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRh
LT5mcmFtZSwgRUlOQV9GQUxTRSk7CisgICAgcmV0dXJuIHNtYXJ0RGF0YS0+ZWRpdGFibGU7CiB9
CiAKIEVpbmFfQm9vbCBld2tfZnJhbWVfZWRpdGFibGVfc2V0KEV2YXNfT2JqZWN0KiBld2tGcmFt
ZSwgRWluYV9Cb29sIGVkaXRhYmxlKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJO
KGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9S
RVRVUk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUsIEVJTkFfRkFMU0UpOwogICAgIGVk
aXRhYmxlID0gISFlZGl0YWJsZTsKLSAgICBpZiAoc2QtPmVkaXRhYmxlID09IGVkaXRhYmxlKQor
ICAgIGlmIChzbWFydERhdGEtPmVkaXRhYmxlID09IGVkaXRhYmxlKQogICAgICAgICByZXR1cm4g
RUlOQV9UUlVFOwogICAgIGlmIChlZGl0YWJsZSkKLSAgICAgICAgc2QtPmZyYW1lLT5lZGl0b3Io
KS0+YXBwbHlFZGl0aW5nU3R5bGVUb0JvZHlFbGVtZW50KCk7CisgICAgICAgIHNtYXJ0RGF0YS0+
ZnJhbWUtPmVkaXRvcigpLT5hcHBseUVkaXRpbmdTdHlsZVRvQm9keUVsZW1lbnQoKTsKICAgICBy
ZXR1cm4gRUlOQV9UUlVFOwogfQogCiBjaGFyKiBld2tfZnJhbWVfc2VsZWN0aW9uX2dldChjb25z
dCBFdmFzX09iamVjdCogZXdrRnJhbWUpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRV
Uk4oZXdrRnJhbWUsIHNkLCAwKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwo
c2QtPmZyYW1lLCAwKTsKLSAgICBXVEY6OkNTdHJpbmcgcyA9IHNkLT5mcmFtZS0+ZWRpdG9yKCkt
PnNlbGVjdGVkVGV4dCgpLnV0ZjgoKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihl
d2tGcmFtZSwgc21hcnREYXRhLCAwKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9W
QUwoc21hcnREYXRhLT5mcmFtZSwgMCk7CisgICAgV1RGOjpDU3RyaW5nIHMgPSBzbWFydERhdGEt
PmZyYW1lLT5lZGl0b3IoKS0+c2VsZWN0ZWRUZXh0KCkudXRmOCgpOwogICAgIGlmIChzLmlzTnVs
bCgpKQogICAgICAgICByZXR1cm4gMDsKICAgICByZXR1cm4gc3RyZHVwKHMuZGF0YSgpKTsKQEAg
LTQ2Niw0NSArNDY2LDQ1IEBAIGNoYXIqIGV3a19mcmFtZV9zZWxlY3Rpb25fZ2V0KGNvbnN0IEV2
YXNfT2JqZWN0KiBld2tGcmFtZSkKIAogRWluYV9Cb29sIGV3a19mcmFtZV90ZXh0X3NlYXJjaChj
b25zdCBFdmFzX09iamVjdCogZXdrRnJhbWUsIGNvbnN0IGNoYXIqIHRleHQsIEVpbmFfQm9vbCBj
YXNlU2Vuc2l0aXZlLCBFaW5hX0Jvb2wgZm9yd2FyZCwgRWluYV9Cb29sIHdyYXApCiB7Ci0gICAg
RVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsKLSAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsK
KyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRhLCBFSU5B
X0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5m
cmFtZSwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHRl
eHQsIEVJTkFfRkFMU0UpOwogCi0gICAgcmV0dXJuIHNkLT5mcmFtZS0+ZWRpdG9yKCktPmZpbmRT
dHJpbmcoV1RGOjpTdHJpbmc6OmZyb21VVEY4KHRleHQpLCBmb3J3YXJkLCBjYXNlU2Vuc2l0aXZl
LCB3cmFwLCB0cnVlKTsKKyAgICByZXR1cm4gc21hcnREYXRhLT5mcmFtZS0+ZWRpdG9yKCktPmZp
bmRTdHJpbmcoV1RGOjpTdHJpbmc6OmZyb21VVEY4KHRleHQpLCBmb3J3YXJkLCBjYXNlU2Vuc2l0
aXZlLCB3cmFwLCB0cnVlKTsKIH0KIAogdW5zaWduZWQgaW50IGV3a19mcmFtZV90ZXh0X21hdGNo
ZXNfbWFyayhFdmFzX09iamVjdCogZXdrRnJhbWUsIGNvbnN0IGNoYXIqIHN0cmluZywgRWluYV9C
b29sIGNhc2VTZW5zaXRpdmUsIEVpbmFfQm9vbCBoaWdobGlnaHQsIHVuc2lnbmVkIGludCBsaW1p
dCkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIDApOwot
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0Up
OworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzbWFydERhdGEsIDAp
OworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmZyYW1lLCBF
SU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc3RyaW5nLCAw
KTsKIAotICAgIHNkLT5mcmFtZS0+ZWRpdG9yKCktPnNldE1hcmtlZFRleHRNYXRjaGVzQXJlSGln
aGxpZ2h0ZWQoaGlnaGxpZ2h0KTsKLSAgICByZXR1cm4gc2QtPmZyYW1lLT5lZGl0b3IoKS0+Y291
bnRNYXRjaGVzRm9yVGV4dChXVEY6OlN0cmluZzo6ZnJvbVVURjgoc3RyaW5nKSwgY2FzZVNlbnNp
dGl2ZSwgbGltaXQsIHRydWUpOworICAgIHNtYXJ0RGF0YS0+ZnJhbWUtPmVkaXRvcigpLT5zZXRN
YXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkKGhpZ2hsaWdodCk7CisgICAgcmV0dXJuIHNt
YXJ0RGF0YS0+ZnJhbWUtPmVkaXRvcigpLT5jb3VudE1hdGNoZXNGb3JUZXh0KFdURjo6U3RyaW5n
Ojpmcm9tVVRGOChzdHJpbmcpLCBjYXNlU2Vuc2l0aXZlLCBsaW1pdCwgdHJ1ZSk7CiB9CiAKIEVp
bmFfQm9vbCBld2tfZnJhbWVfdGV4dF9tYXRjaGVzX3VubWFya19hbGwoRXZhc19PYmplY3QqIGV3
a0ZyYW1lKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwg
RUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFt
ZSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUs
IHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5f
VkFMKHNtYXJ0RGF0YS0+ZnJhbWUsIEVJTkFfRkFMU0UpOwogCi0gICAgc2QtPmZyYW1lLT5kb2N1
bWVudCgpLT5tYXJrZXJzKCktPnJlbW92ZU1hcmtlcnMoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXI6
OlRleHRNYXRjaCk7CisgICAgc21hcnREYXRhLT5mcmFtZS0+ZG9jdW1lbnQoKS0+bWFya2Vycygp
LT5yZW1vdmVNYXJrZXJzKFdlYkNvcmU6OkRvY3VtZW50TWFya2VyOjpUZXh0TWF0Y2gpOwogICAg
IHJldHVybiBFSU5BX1RSVUU7CiB9CiAKIEVpbmFfQm9vbCBld2tfZnJhbWVfdGV4dF9tYXRjaGVz
X2hpZ2hsaWdodF9zZXQoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBFaW5hX0Jvb2wgaGlnaGxpZ2h0
KQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9G
QUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgRUlO
QV9GQUxTRSk7Ci0gICAgc2QtPmZyYW1lLT5lZGl0b3IoKS0+c2V0TWFya2VkVGV4dE1hdGNoZXNB
cmVIaWdobGlnaHRlZChoaWdobGlnaHQpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJO
KGV3a0ZyYW1lLCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKKyAgICBzbWFydERh
dGEtPmZyYW1lLT5lZGl0b3IoKS0+c2V0TWFya2VkVGV4dE1hdGNoZXNBcmVIaWdobGlnaHRlZCho
aWdobGlnaHQpOwogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKIEVpbmFfQm9vbCBld2tfZnJh
bWVfdGV4dF9tYXRjaGVzX2hpZ2hsaWdodF9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1l
KQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9G
QUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgRUlO
QV9GQUxTRSk7Ci0gICAgcmV0dXJuIHNkLT5mcmFtZS0+ZWRpdG9yKCktPm1hcmtlZFRleHRNYXRj
aGVzQXJlSGlnaGxpZ2h0ZWQoKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tG
cmFtZSwgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTl9WQUwoc21hcnREYXRhLT5mcmFtZSwgRUlOQV9GQUxTRSk7CisgICAgcmV0dXJuIHNtYXJ0
RGF0YS0+ZnJhbWUtPmVkaXRvcigpLT5tYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkKCk7
CiB9CiAKIC8qKgpAQCAtNTI1LDEwICs1MjUsMTAgQEAgc3RhdGljIGJvb2wgX2V3a19mcmFtZV9y
ZWN0X2lzX25lZ2F0aXZlX3ZhbHVlKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3QpCiAKIEVp
bmFfQm9vbCBld2tfZnJhbWVfdGV4dF9tYXRjaGVzX250aF9wb3NfZ2V0KGNvbnN0IEV2YXNfT2Jq
ZWN0KiBld2tGcmFtZSwgc2l6ZV90IG51bWJlciwgaW50KiB4LCBpbnQqIHkpCiB7Ci0gICAgRVdL
X0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKKyAg
ICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRhLCBFSU5BX0ZB
TFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5mcmFt
ZSwgRUlOQV9GQUxTRSk7CiAKLSAgICBWZWN0b3I8V2ViQ29yZTo6SW50UmVjdD4gaW50UmVjdHMg
PSBzZC0+ZnJhbWUtPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+cmVuZGVyZWRSZWN0c0Zvck1hcmtl
cnMoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXI6OlRleHRNYXRjaCk7CisgICAgVmVjdG9yPFdlYkNv
cmU6OkludFJlY3Q+IGludFJlY3RzID0gc21hcnREYXRhLT5mcmFtZS0+ZG9jdW1lbnQoKS0+bWFy
a2VycygpLT5yZW5kZXJlZFJlY3RzRm9yTWFya2VycyhXZWJDb3JlOjpEb2N1bWVudE1hcmtlcjo6
VGV4dE1hdGNoKTsKIAogICAgIC8qIHJlbW92ZSB1c2VsZXNzIHZhbHVlcyAqLwogICAgIHN0ZDo6
cmVtb3ZlX2lmKGludFJlY3RzLmJlZ2luKCksIGludFJlY3RzLmVuZCgpLCBfZXdrX2ZyYW1lX3Jl
Y3RfaXNfbmVnYXRpdmVfdmFsdWUpOwpAQCAtNTQ3LDI1ICs1NDcsMjUgQEAgRWluYV9Cb29sIGV3
a19mcmFtZV90ZXh0X21hdGNoZXNfbnRoX3Bvc19nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a0Zy
YW1lLCBzaXplX3QKIAogRWluYV9Cb29sIGV3a19mcmFtZV9zdG9wKEV2YXNfT2JqZWN0KiBld2tG
cmFtZSkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJ
TkFfRkFMU0UpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUs
IEVJTkFfRkFMU0UpOwotICAgIHNkLT5mcmFtZS0+bG9hZGVyKCktPnN0b3BBbGxMb2FkZXJzKCk7
CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSwgRUlO
QV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+
ZnJhbWUsIEVJTkFfRkFMU0UpOworICAgIHNtYXJ0RGF0YS0+ZnJhbWUtPmxvYWRlcigpLT5zdG9w
QWxsTG9hZGVycygpOwogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKIEVpbmFfQm9vbCBld2tf
ZnJhbWVfcmVsb2FkKEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsKLSAgICBFV0tfRlJBTUVfU0Rf
R0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOwotICAgIHNkLT5mcmFt
ZS0+bG9hZGVyKCktPnJlbG9hZCgpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3
a0ZyYW1lLCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOX1ZBTChzbWFydERhdGEtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKKyAgICBzbWFydERhdGEt
PmZyYW1lLT5sb2FkZXIoKS0+cmVsb2FkKCk7CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAog
RWluYV9Cb29sIGV3a19mcmFtZV9yZWxvYWRfZnVsbChFdmFzX09iamVjdCogZXdrRnJhbWUpCiB7
Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNF
KTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZB
TFNFKTsKLSAgICBzZC0+ZnJhbWUtPmxvYWRlcigpLT5yZWxvYWQodHJ1ZSk7CisgICAgRVdLX0ZS
QU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7Cisg
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUsIEVJTkFf
RkFMU0UpOworICAgIHNtYXJ0RGF0YS0+ZnJhbWUtPmxvYWRlcigpLT5yZWxvYWQodHJ1ZSk7CiAg
ICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIApAQCAtNTgxLDkgKzU4MSw5IEBAIEVpbmFfQm9vbCBl
d2tfZnJhbWVfZm9yd2FyZChFdmFzX09iamVjdCogZXdrRnJhbWUpCiAKIEVpbmFfQm9vbCBld2tf
ZnJhbWVfbmF2aWdhdGUoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBpbnQgc3RlcHMpCiB7Ci0gICAg
RVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsKLSAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsK
LSAgICBXZWJDb3JlOjpQYWdlKiBwYWdlID0gc2QtPmZyYW1lLT5wYWdlKCk7CisgICAgRVdLX0ZS
QU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7Cisg
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUsIEVJTkFf
RkFMU0UpOworICAgIFdlYkNvcmU6OlBhZ2UqIHBhZ2UgPSBzbWFydERhdGEtPmZyYW1lLT5wYWdl
KCk7CiAgICAgaWYgKCFwYWdlLT5jYW5Hb0JhY2tPckZvcndhcmQoc3RlcHMpKQogICAgICAgICBy
ZXR1cm4gRUlOQV9GQUxTRTsKICAgICBwYWdlLT5nb0JhY2tPckZvcndhcmQoc3RlcHMpOwpAQCAt
NjAyLDM5ICs2MDIsMzkgQEAgRWluYV9Cb29sIGV3a19mcmFtZV9mb3J3YXJkX3Bvc3NpYmxlKEV2
YXNfT2JqZWN0KiBld2tGcmFtZSkKIAogRWluYV9Cb29sIGV3a19mcmFtZV9uYXZpZ2F0ZV9wb3Nz
aWJsZShFdmFzX09iamVjdCogZXdrRnJhbWUsIGludCBzdGVwcykKIHsKLSAgICBFV0tfRlJBTUVf
U0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOwotICAgIFdlYkNv
cmU6OlBhZ2UqIHBhZ2UgPSBzZC0+ZnJhbWUtPnBhZ2UoKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VU
X09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5mcmFtZSwgRUlOQV9GQUxTRSk7Cisg
ICAgV2ViQ29yZTo6UGFnZSogcGFnZSA9IHNtYXJ0RGF0YS0+ZnJhbWUtPnBhZ2UoKTsKICAgICBy
ZXR1cm4gcGFnZS0+Y2FuR29CYWNrT3JGb3J3YXJkKHN0ZXBzKTsKIH0KIAogZmxvYXQgZXdrX2Zy
YW1lX3BhZ2Vfem9vbV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewotICAgIEVX
S19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgLTEuMCk7Ci0gICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgLTEuMCk7Ci0gICAgcmV0dXJuIHNk
LT5mcmFtZS0+cGFnZVpvb21GYWN0b3IoKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVS
Tihld2tGcmFtZSwgc21hcnREYXRhLCAtMS4wKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTl9WQUwoc21hcnREYXRhLT5mcmFtZSwgLTEuMCk7CisgICAgcmV0dXJuIHNtYXJ0RGF0YS0+
ZnJhbWUtPnBhZ2Vab29tRmFjdG9yKCk7CiB9CiAKIEVpbmFfQm9vbCBld2tfZnJhbWVfcGFnZV96
b29tX3NldChFdmFzX09iamVjdCogZXdrRnJhbWUsIGZsb2F0IHBhZ2Vab29tRmFjdG9yKQogewot
ICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7
Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxT
RSk7Ci0gICAgc2QtPmZyYW1lLT5zZXRQYWdlWm9vbUZhY3RvcihwYWdlWm9vbUZhY3Rvcik7Cisg
ICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSwgRUlOQV9G
QUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJh
bWUsIEVJTkFfRkFMU0UpOworICAgIHNtYXJ0RGF0YS0+ZnJhbWUtPnNldFBhZ2Vab29tRmFjdG9y
KHBhZ2Vab29tRmFjdG9yKTsKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCiBmbG9hdCBld2tf
ZnJhbWVfdGV4dF96b29tX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrRnJhbWUpCiB7Ci0gICAg
RVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCAtMS4wKTsKLSAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCAtMS4wKTsKLSAgICByZXR1cm4g
c2QtPmZyYW1lLT50ZXh0Wm9vbUZhY3RvcigpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVU
VVJOKGV3a0ZyYW1lLCBzbWFydERhdGEsIC0xLjApOworICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOX1ZBTChzbWFydERhdGEtPmZyYW1lLCAtMS4wKTsKKyAgICByZXR1cm4gc21hcnREYXRh
LT5mcmFtZS0+dGV4dFpvb21GYWN0b3IoKTsKIH0KIAogRWluYV9Cb29sIGV3a19mcmFtZV90ZXh0
X3pvb21fc2V0KEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgZmxvYXQgdGV4dFpvb21GYWN0b3IpCiB7
Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNF
KTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZB
TFNFKTsKLSAgICBzZC0+ZnJhbWUtPnNldFRleHRab29tRmFjdG9yKHRleHRab29tRmFjdG9yKTsK
KyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRhLCBFSU5B
X0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5m
cmFtZSwgRUlOQV9GQUxTRSk7CisgICAgc21hcnREYXRhLT5mcmFtZS0+c2V0VGV4dFpvb21GYWN0
b3IodGV4dFpvb21GYWN0b3IpOwogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKQEAgLTY1Mywx
NCArNjUzLDE0IEBAIHZvaWQgZXdrX2ZyYW1lX2hpdF90ZXN0X2ZyZWUoRXdrX0hpdF9UZXN0KiBo
aXRUZXN0KQogCiBFd2tfSGl0X1Rlc3QqIGV3a19mcmFtZV9oaXRfdGVzdF9uZXcoY29uc3QgRXZh
c19PYmplY3QqIGV3a0ZyYW1lLCBpbnQgeCwgaW50IHkpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dF
VF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCAwKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTl9WQUwoc2QtPmZyYW1lLCAwKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihl
d2tGcmFtZSwgc21hcnREYXRhLCAwKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9W
QUwoc21hcnREYXRhLT5mcmFtZSwgMCk7CiAKLSAgICBXZWJDb3JlOjpGcmFtZVZpZXcqIHZpZXcg
PSBzZC0+ZnJhbWUtPnZpZXcoKTsKKyAgICBXZWJDb3JlOjpGcmFtZVZpZXcqIHZpZXcgPSBzbWFy
dERhdGEtPmZyYW1lLT52aWV3KCk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFM
KHZpZXcsIDApOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUt
PmNvbnRlbnRSZW5kZXJlcigpLCAwKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9W
QUwoc21hcnREYXRhLT5mcmFtZS0+Y29udGVudFJlbmRlcmVyKCksIDApOwogCi0gICAgV2ViQ29y
ZTo6SGl0VGVzdFJlc3VsdCByZXN1bHQgPSBzZC0+ZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5oaXRU
ZXN0UmVzdWx0QXRQb2ludAorICAgIFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQgcmVzdWx0ID0gc21h
cnREYXRhLT5mcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmhpdFRlc3RSZXN1bHRBdFBvaW50CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZpZXctPndpbmRvd1RvQ29udGVu
dHMoV2ViQ29yZTo6SW50UG9pbnQoeCwgeSkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8qYWxsb3dTaGFkb3dDb250ZW50Ki8gZmFsc2UsIC8qaWdub3JlQ2xpcHBp
bmcqLyB0cnVlKTsKIApAQCAtNjY5LDQxICs2NjksNDEgQEAgRXdrX0hpdF9UZXN0KiBld2tfZnJh
bWVfaGl0X3Rlc3RfbmV3KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgaW50IHgsIGludCB5
KQogICAgIGlmICghcmVzdWx0LmlubmVyTm9kZSgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAg
IEV3a19IaXRfVGVzdCogaGl0X3Rlc3QgPSBzdGF0aWNfY2FzdDxFd2tfSGl0X1Rlc3QqPihjYWxs
b2MoMSwgc2l6ZW9mKEV3a19IaXRfVGVzdCkpKTsKLSAgICBpZiAoIWhpdF90ZXN0KSB7CisgICAg
RXdrX0hpdF9UZXN0KiBoaXRUZXN0ID0gc3RhdGljX2Nhc3Q8RXdrX0hpdF9UZXN0Kj4oY2FsbG9j
KDEsIHNpemVvZihFd2tfSGl0X1Rlc3QpKSk7CisgICAgaWYgKCFoaXRUZXN0KSB7CiAgICAgICAg
IENSSVRJQ0FMKCJDb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBoaXQgdGVzdC4iKTsKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgaGl0X3Rlc3QtPnggPSByZXN1bHQucG9pbnQo
KS54KCk7Ci0gICAgaGl0X3Rlc3QtPnkgPSByZXN1bHQucG9pbnQoKS55KCk7CisgICAgaGl0VGVz
dC0+eCA9IHJlc3VsdC5wb2ludCgpLngoKTsKKyAgICBoaXRUZXN0LT55ID0gcmVzdWx0LnBvaW50
KCkueSgpOwogI2lmIDAKICAgICAvLyBGSVhNRQotICAgIGhpdF90ZXN0LT5ib3VuZGluZ19ib3gu
eCA9IHJlc3VsdC5ib3VuZGluZ0JveCgpLngoKTsKLSAgICBoaXRfdGVzdC0+Ym91bmRpbmdfYm94
LnkgPSByZXN1bHQuYm91bmRpbmdCb3goKS55KCk7Ci0gICAgaGl0X3Rlc3QtPmJvdW5kaW5nX2Jv
eC53ID0gcmVzdWx0LmJvdW5kaW5nQm94KCkud2lkdGgoKTsKLSAgICBoaXRfdGVzdC0+Ym91bmRp
bmdfYm94LmggPSByZXN1bHQuYm91bmRpbmdCb3goKS5oZWlnaHQoKTsKKyAgICBoaXRUZXN0LT5i
b3VuZGluZ19ib3gueCA9IHJlc3VsdC5ib3VuZGluZ0JveCgpLngoKTsKKyAgICBoaXRUZXN0LT5i
b3VuZGluZ19ib3gueSA9IHJlc3VsdC5ib3VuZGluZ0JveCgpLnkoKTsKKyAgICBoaXRUZXN0LT5i
b3VuZGluZ19ib3gudyA9IHJlc3VsdC5ib3VuZGluZ0JveCgpLndpZHRoKCk7CisgICAgaGl0VGVz
dC0+Ym91bmRpbmdfYm94LmggPSByZXN1bHQuYm91bmRpbmdCb3goKS5oZWlnaHQoKTsKICNlbHNl
Ci0gICAgaGl0X3Rlc3QtPmJvdW5kaW5nX2JveC54ID0gMDsKLSAgICBoaXRfdGVzdC0+Ym91bmRp
bmdfYm94LnkgPSAwOwotICAgIGhpdF90ZXN0LT5ib3VuZGluZ19ib3gudyA9IDA7Ci0gICAgaGl0
X3Rlc3QtPmJvdW5kaW5nX2JveC5oID0gMDsKKyAgICBoaXRUZXN0LT5ib3VuZGluZ19ib3gueCA9
IDA7CisgICAgaGl0VGVzdC0+Ym91bmRpbmdfYm94LnkgPSAwOworICAgIGhpdFRlc3QtPmJvdW5k
aW5nX2JveC53ID0gMDsKKyAgICBoaXRUZXN0LT5ib3VuZGluZ19ib3guaCA9IDA7CiAjZW5kaWYK
IAotICAgIFdlYkNvcmU6OlRleHREaXJlY3Rpb24gZGlyOwotICAgIGhpdF90ZXN0LT50aXRsZSA9
IGVpbmFfc3RyaW5nc2hhcmVfYWRkKHJlc3VsdC50aXRsZShkaXIpLnV0ZjgoKS5kYXRhKCkpOwot
ICAgIGhpdF90ZXN0LT5hbHRlcm5hdGVfdGV4dCA9IGVpbmFfc3RyaW5nc2hhcmVfYWRkKHJlc3Vs
dC5hbHREaXNwbGF5U3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgV2ViQ29yZTo6VGV4dERp
cmVjdGlvbiBkaXJlY3Rpb247CisgICAgaGl0VGVzdC0+dGl0bGUgPSBlaW5hX3N0cmluZ3NoYXJl
X2FkZChyZXN1bHQudGl0bGUoZGlyZWN0aW9uKS51dGY4KCkuZGF0YSgpKTsKKyAgICBoaXRUZXN0
LT5hbHRlcm5hdGVfdGV4dCA9IGVpbmFfc3RyaW5nc2hhcmVfYWRkKHJlc3VsdC5hbHREaXNwbGF5
U3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiAgICAgaWYgKHJlc3VsdC5pbm5lck5vblNoYXJlZE5v
ZGUoKSAmJiByZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCktPmRvY3VtZW50KCkKICAgICAgICAg
JiYgcmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpLT5kb2N1bWVudCgpLT5mcmFtZSgpKQotICAg
ICAgICBoaXRfdGVzdC0+ZnJhbWUgPSBraXQocmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpLT5k
b2N1bWVudCgpLT5mcmFtZSgpKTsKKyAgICAgICAgaGl0VGVzdC0+ZnJhbWUgPSBraXQocmVzdWx0
LmlubmVyTm9uU2hhcmVkTm9kZSgpLT5kb2N1bWVudCgpLT5mcmFtZSgpKTsKIAotICAgIGhpdF90
ZXN0LT5saW5rLnRleHQgPSBlaW5hX3N0cmluZ3NoYXJlX2FkZChyZXN1bHQudGV4dENvbnRlbnQo
KS51dGY4KCkuZGF0YSgpKTsKLSAgICBoaXRfdGVzdC0+bGluay51cmwgPSBlaW5hX3N0cmluZ3No
YXJlX2FkZChyZXN1bHQuYWJzb2x1dGVMaW5rVVJMKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7
Ci0gICAgaGl0X3Rlc3QtPmxpbmsudGl0bGUgPSBlaW5hX3N0cmluZ3NoYXJlX2FkZChyZXN1bHQu
dGl0bGVEaXNwbGF5U3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgaGl0X3Rlc3QtPmxpbmsu
dGFyZ2V0X2ZyYW1lID0ga2l0KHJlc3VsdC50YXJnZXRGcmFtZSgpKTsKKyAgICBoaXRUZXN0LT5s
aW5rLnRleHQgPSBlaW5hX3N0cmluZ3NoYXJlX2FkZChyZXN1bHQudGV4dENvbnRlbnQoKS51dGY4
KCkuZGF0YSgpKTsKKyAgICBoaXRUZXN0LT5saW5rLnVybCA9IGVpbmFfc3RyaW5nc2hhcmVfYWRk
KHJlc3VsdC5hYnNvbHV0ZUxpbmtVUkwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBo
aXRUZXN0LT5saW5rLnRpdGxlID0gZWluYV9zdHJpbmdzaGFyZV9hZGQocmVzdWx0LnRpdGxlRGlz
cGxheVN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgIGhpdFRlc3QtPmxpbmsudGFyZ2V0X2Zy
YW1lID0ga2l0KHJlc3VsdC50YXJnZXRGcmFtZSgpKTsKIAotICAgIGhpdF90ZXN0LT5pbWFnZV91
cmkgPSBlaW5hX3N0cmluZ3NoYXJlX2FkZChyZXN1bHQuYWJzb2x1dGVJbWFnZVVSTCgpLnN0cmlu
ZygpLnV0ZjgoKS5kYXRhKCkpOwotICAgIGhpdF90ZXN0LT5tZWRpYV91cmkgPSBlaW5hX3N0cmlu
Z3NoYXJlX2FkZChyZXN1bHQuYWJzb2x1dGVNZWRpYVVSTCgpLnN0cmluZygpLnV0ZjgoKS5kYXRh
KCkpOworICAgIGhpdFRlc3QtPmltYWdlX3VyaSA9IGVpbmFfc3RyaW5nc2hhcmVfYWRkKHJlc3Vs
dC5hYnNvbHV0ZUltYWdlVVJMKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgaGl0VGVz
dC0+bWVkaWFfdXJpID0gZWluYV9zdHJpbmdzaGFyZV9hZGQocmVzdWx0LmFic29sdXRlTWVkaWFV
UkwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKIAogICAgIGludCBjb250ZXh0ID0gRVdLX0hJ
VF9URVNUX1JFU1VMVF9DT05URVhUX0RPQ1VNRU5UOwogCkBAIC03MTgsMjggKzcxOCwyOCBAQCBF
d2tfSGl0X1Rlc3QqIGV3a19mcmFtZV9oaXRfdGVzdF9uZXcoY29uc3QgRXZhc19PYmplY3QqIGV3
a0ZyYW1lLCBpbnQgeCwgaW50IHkpCiAgICAgaWYgKHJlc3VsdC5pc0NvbnRlbnRFZGl0YWJsZSgp
KQogICAgICAgICBjb250ZXh0IHw9IEVXS19ISVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9FRElUQUJM
RTsKIAotICAgIGhpdF90ZXN0LT5jb250ZXh0ID0gc3RhdGljX2Nhc3Q8RXdrX0hpdF9UZXN0X1Jl
c3VsdF9Db250ZXh0Pihjb250ZXh0KTsKKyAgICBoaXRUZXN0LT5jb250ZXh0ID0gc3RhdGljX2Nh
c3Q8RXdrX0hpdF9UZXN0X1Jlc3VsdF9Db250ZXh0Pihjb250ZXh0KTsKIAotICAgIHJldHVybiBo
aXRfdGVzdDsKKyAgICByZXR1cm4gaGl0VGVzdDsKIH0KIAogRWluYV9Cb29sCiBld2tfZnJhbWVf
c2Nyb2xsX2FkZChFdmFzX09iamVjdCogZXdrRnJhbWUsIGludCBkZWx0YVgsIGludCBkZWx0YVkp
CiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZB
TFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5B
X0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLT52
aWV3KCksIEVJTkFfRkFMU0UpOwotICAgIHNkLT5mcmFtZS0+dmlldygpLT5zY3JvbGxCeShXZWJD
b3JlOjpJbnRTaXplKGRlbHRhWCwgZGVsdGFZKSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9S
RVRVUk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUsIEVJTkFfRkFMU0UpOworICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmZyYW1lLT52aWV3KCksIEVJ
TkFfRkFMU0UpOworICAgIHNtYXJ0RGF0YS0+ZnJhbWUtPnZpZXcoKS0+c2Nyb2xsQnkoV2ViQ29y
ZTo6SW50U2l6ZShkZWx0YVgsIGRlbHRhWSkpOwogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAK
IEVpbmFfQm9vbAogZXdrX2ZyYW1lX3Njcm9sbF9zZXQoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBp
bnQgeCwgaW50IHkpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUs
IHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2Qt
PmZyYW1lLCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwo
c2QtPmZyYW1lLT52aWV3KCksIEVJTkFfRkFMU0UpOwotICAgIHNkLT5mcmFtZS0+dmlldygpLT5z
ZXRTY3JvbGxQb3NpdGlvbihXZWJDb3JlOjpJbnRQb2ludCh4LCB5KSk7CisgICAgRVdLX0ZSQU1F
X1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUsIEVJTkFfRkFM
U0UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmZyYW1l
LT52aWV3KCksIEVJTkFfRkFMU0UpOworICAgIHNtYXJ0RGF0YS0+ZnJhbWUtPnZpZXcoKS0+c2V0
U2Nyb2xsUG9zaXRpb24oV2ViQ29yZTo6SW50UG9pbnQoeCwgeSkpOwogICAgIHJldHVybiBFSU5B
X1RSVUU7CiB9CiAKQEAgLTc1MCwxMCArNzUwLDEwIEBAIGV3a19mcmFtZV9zY3JvbGxfc2l6ZV9n
ZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBpbnQqIHdpZHRoLCBpbnQqIGhlaWdodCkK
ICAgICAgICAgKndpZHRoID0gMDsKICAgICBpZiAoaGVpZ2h0KQogICAgICAgICAqaGVpZ2h0ID0g
MDsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFM
U0UpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFf
RkFMU0UpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUtPnZp
ZXcoKSwgRUlOQV9GQUxTRSk7Ci0gICAgV2ViQ29yZTo6SW50UG9pbnQgcG9pbnQgPSBzZC0+ZnJh
bWUtPnZpZXcoKS0+bWF4aW11bVNjcm9sbFBvc2l0aW9uKCk7CisgICAgRVdLX0ZSQU1FX1NEX0dF
VF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUsIEVJTkFfRkFMU0UpOwor
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmZyYW1lLT52aWV3
KCksIEVJTkFfRkFMU0UpOworICAgIFdlYkNvcmU6OkludFBvaW50IHBvaW50ID0gc21hcnREYXRh
LT5mcmFtZS0+dmlldygpLT5tYXhpbXVtU2Nyb2xsUG9zaXRpb24oKTsKICAgICBpZiAod2lkdGgp
CiAgICAgICAgICp3aWR0aCA9IHBvaW50LngoKTsKICAgICBpZiAoaGVpZ2h0KQpAQCAtNzY4LDEw
ICs3NjgsMTAgQEAgZXdrX2ZyYW1lX3Njcm9sbF9wb3NfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBl
d2tGcmFtZSwgaW50KiB4LCBpbnQqIHkpCiAgICAgICAgICp4ID0gMDsKICAgICBpZiAoeSkKICAg
ICAgICAgKnkgPSAwOwotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBz
ZCwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5m
cmFtZSwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNk
LT5mcmFtZS0+dmlldygpLCBFSU5BX0ZBTFNFKTsKLSAgICBXZWJDb3JlOjpJbnRQb2ludCBwb3Mg
PSBzZC0+ZnJhbWUtPnZpZXcoKS0+c2Nyb2xsUG9zaXRpb24oKTsKKyAgICBFV0tfRlJBTUVfU0Rf
R0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5mcmFtZSwgRUlOQV9GQUxTRSk7
CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUtPnZp
ZXcoKSwgRUlOQV9GQUxTRSk7CisgICAgV2ViQ29yZTo6SW50UG9pbnQgcG9zID0gc21hcnREYXRh
LT5mcmFtZS0+dmlldygpLT5zY3JvbGxQb3NpdGlvbigpOwogICAgIGlmICh4KQogICAgICAgICAq
eCA9IHBvcy54KCk7CiAgICAgaWYgKHkpCkBAIC03ODksMTAgKzc4OSwxMCBAQCBFaW5hX0Jvb2wg
ZXdrX2ZyYW1lX3Zpc2libGVfY29udGVudF9nZW9tZXRyeV9nZXQoY29uc3QgRXZhc19PYmplY3Qq
IGV3a0ZyYW1lLCBFaQogICAgICAgICAqd2lkdGggPSAwOwogICAgIGlmIChoZWlnaHQpCiAgICAg
ICAgICpoZWlnaHQgPSAwOwotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1l
LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNk
LT5mcmFtZSwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFM
KHNkLT5mcmFtZS0+dmlldygpLCBFSU5BX0ZBTFNFKTsKLSAgICBXZWJDb3JlOjpJbnRSZWN0IHJl
Y3QgPSBzZC0+ZnJhbWUtPnZpZXcoKS0+dmlzaWJsZUNvbnRlbnRSZWN0KGluY2x1ZGVTY3JvbGxi
YXJzKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRh
LCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnRE
YXRhLT5mcmFtZSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5f
VkFMKHNtYXJ0RGF0YS0+ZnJhbWUtPnZpZXcoKSwgRUlOQV9GQUxTRSk7CisgICAgV2ViQ29yZTo6
SW50UmVjdCByZWN0ID0gc21hcnREYXRhLT5mcmFtZS0+dmlldygpLT52aXNpYmxlQ29udGVudFJl
Y3QoaW5jbHVkZVNjcm9sbGJhcnMpOwogICAgIGlmICh4KQogICAgICAgICAqeCA9IHJlY3QueCgp
OwogICAgIGlmICh5KQpAQCAtODA2LDI2ICs4MDYsMjYgQEAgRWluYV9Cb29sIGV3a19mcmFtZV92
aXNpYmxlX2NvbnRlbnRfZ2VvbWV0cnlfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSwg
RWkKIAogRWluYV9Cb29sIGV3a19mcmFtZV9wYWludF9mdWxsX2dldChjb25zdCBFdmFzX09iamVj
dCogZXdrRnJhbWUpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUs
IHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2Qt
PmZyYW1lLCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwo
c2QtPmZyYW1lLT52aWV3KCksIEVJTkFfRkFMU0UpOwotICAgIHJldHVybiBzZC0+ZnJhbWUtPnZp
ZXcoKS0+cGFpbnRzRW50aXJlQ29udGVudHMoKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JF
VFVSTihld2tGcmFtZSwgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5mcmFtZSwgRUlOQV9GQUxTRSk7CisgICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUtPnZpZXcoKSwgRUlO
QV9GQUxTRSk7CisgICAgcmV0dXJuIHNtYXJ0RGF0YS0+ZnJhbWUtPnZpZXcoKS0+cGFpbnRzRW50
aXJlQ29udGVudHMoKTsKIH0KIAogdm9pZCBld2tfZnJhbWVfcGFpbnRfZnVsbF9zZXQoRXZhc19P
YmplY3QqIGV3a0ZyYW1lLCBFaW5hX0Jvb2wgZmxhZykKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VU
X09SX1JFVFVSTihld2tGcmFtZSwgc2QpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJO
KHNkLT5mcmFtZSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmZyYW1lLT52
aWV3KCkpOwotICAgIHNkLT5mcmFtZS0+dmlldygpLT5zZXRQYWludHNFbnRpcmVDb250ZW50cyhm
bGFnKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRh
KTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmZyYW1lKTsKKyAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmZyYW1lLT52aWV3KCkpOwor
ICAgIHNtYXJ0RGF0YS0+ZnJhbWUtPnZpZXcoKS0+c2V0UGFpbnRzRW50aXJlQ29udGVudHMoZmxh
Zyk7CiB9CiAKIEVpbmFfQm9vbCBld2tfZnJhbWVfZmVlZF9mb2N1c19pbihFdmFzX09iamVjdCog
ZXdrRnJhbWUpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNk
LCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZy
YW1lLCBFSU5BX0ZBTFNFKTsKLSAgICBXZWJDb3JlOjpGb2N1c0NvbnRyb2xsZXIqIGMgPSBzZC0+
ZnJhbWUtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCk7Ci0gICAgYy0+c2V0Rm9jdXNlZEZyYW1l
KHNkLT5mcmFtZSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNt
YXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFM
KHNtYXJ0RGF0YS0+ZnJhbWUsIEVJTkFfRkFMU0UpOworICAgIFdlYkNvcmU6OkZvY3VzQ29udHJv
bGxlciogYyA9IHNtYXJ0RGF0YS0+ZnJhbWUtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCk7Cisg
ICAgYy0+c2V0Rm9jdXNlZEZyYW1lKHNtYXJ0RGF0YS0+ZnJhbWUpOwogICAgIHJldHVybiBFSU5B
X1RSVUU7CiB9CiAKQEAgLTgzOCw4NyArODM4LDg3IEBAIEVpbmFfQm9vbCBld2tfZnJhbWVfZmVl
ZF9mb2N1c19vdXQoRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogCiBFaW5hX0Jvb2wgZXdrX2ZyYW1l
X2ZlZWRfbW91c2Vfd2hlZWwoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBjb25zdCBFdmFzX0V2ZW50
X01vdXNlX1doZWVsKiB3aGVlbEV2ZW50KQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVU
VVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9P
Ul9SRVRVUk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZF
VFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUsIEVJTkFfRkFMU0UpOwogICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh3aGVlbEV2ZW50LCBFSU5BX0ZBTFNFKTsK
IAotICAgIFdlYkNvcmU6OkZyYW1lVmlldyogdmlldyA9IHNkLT5mcmFtZS0+dmlldygpOworICAg
IFdlYkNvcmU6OkZyYW1lVmlldyogdmlldyA9IHNtYXJ0RGF0YS0+ZnJhbWUtPnZpZXcoKTsKICAg
ICBEQkcoImV3a0ZyYW1lPSVwLCB2aWV3PSVwLCBkaXJlY3Rpb249JWQsIHo9JWQsIHBvcz0lZCwl
ZCIsCiAgICAgICAgIGV3a0ZyYW1lLCB2aWV3LCB3aGVlbEV2ZW50LT5kaXJlY3Rpb24sIHdoZWVs
RXZlbnQtPnosIHdoZWVsRXZlbnQtPmNhbnZhcy54LCB3aGVlbEV2ZW50LT5jYW52YXMueSk7CiAg
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHZpZXcsIEVJTkFfRkFMU0UpOwogCiAg
ICAgV2ViQ29yZTo6UGxhdGZvcm1XaGVlbEV2ZW50IGV2ZW50KHdoZWVsRXZlbnQpOwotICAgIHJl
dHVybiBzZC0+ZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5oYW5kbGVXaGVlbEV2ZW50KGV2ZW50KTsK
KyAgICByZXR1cm4gc21hcnREYXRhLT5mcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmhhbmRsZVdoZWVs
RXZlbnQoZXZlbnQpOwogfQogCiBFaW5hX0Jvb2wgZXdrX2ZyYW1lX2ZlZWRfbW91c2VfZG93bihF
dmFzX09iamVjdCogZXdrRnJhbWUsIGNvbnN0IEV2YXNfRXZlbnRfTW91c2VfRG93biogZG93bkV2
ZW50KQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgRUlO
QV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwg
RUlOQV9GQUxTRSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNt
YXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFM
KHNtYXJ0RGF0YS0+ZnJhbWUsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOX1ZBTChkb3duRXZlbnQsIEVJTkFfRkFMU0UpOwogCi0gICAgV2ViQ29yZTo6RnJhbWVW
aWV3KiB2aWV3ID0gc2QtPmZyYW1lLT52aWV3KCk7CisgICAgV2ViQ29yZTo6RnJhbWVWaWV3KiB2
aWV3ID0gc21hcnREYXRhLT5mcmFtZS0+dmlldygpOwogICAgIERCRygiZXdrRnJhbWU9JXAsIHZp
ZXc9JXAsIGJ1dHRvbj0lZCwgcG9zPSVkLCVkIiwKICAgICAgICAgZXdrRnJhbWUsIHZpZXcsIGRv
d25FdmVudC0+YnV0dG9uLCBkb3duRXZlbnQtPmNhbnZhcy54LCBkb3duRXZlbnQtPmNhbnZhcy55
KTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodmlldywgRUlOQV9GQUxTRSk7
CiAKICAgICBFdmFzX0Nvb3JkIHgsIHk7Ci0gICAgZXZhc19vYmplY3RfZ2VvbWV0cnlfZ2V0KHNk
LT52aWV3LCAmeCwgJnksIDAsIDApOworICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldChzbWFy
dERhdGEtPnZpZXcsICZ4LCAmeSwgMCwgMCk7CiAKICAgICBXZWJDb3JlOjpQbGF0Zm9ybU1vdXNl
RXZlbnQgZXZlbnQoZG93bkV2ZW50LCBXZWJDb3JlOjpJbnRQb2ludCh4LCB5KSk7Ci0gICAgcmV0
dXJuIHNkLT5mcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmhhbmRsZU1vdXNlUHJlc3NFdmVudChldmVu
dCk7CisgICAgcmV0dXJuIHNtYXJ0RGF0YS0+ZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5oYW5kbGVN
b3VzZVByZXNzRXZlbnQoZXZlbnQpOwogfQogCiBFaW5hX0Jvb2wgZXdrX2ZyYW1lX2ZlZWRfbW91
c2VfdXAoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBjb25zdCBFdmFzX0V2ZW50X01vdXNlX1VwKiB1
cEV2ZW50KQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwg
RUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFt
ZSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUs
IHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5f
VkFMKHNtYXJ0RGF0YS0+ZnJhbWUsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOX1ZBTCh1cEV2ZW50LCBFSU5BX0ZBTFNFKTsKIAotICAgIFdlYkNvcmU6OkZyYW1l
VmlldyogdmlldyA9IHNkLT5mcmFtZS0+dmlldygpOworICAgIFdlYkNvcmU6OkZyYW1lVmlldyog
dmlldyA9IHNtYXJ0RGF0YS0+ZnJhbWUtPnZpZXcoKTsKICAgICBEQkcoImV3a0ZyYW1lPSVwLCB2
aWV3PSVwLCBidXR0b249JWQsIHBvcz0lZCwlZCIsCiAgICAgICAgIGV3a0ZyYW1lLCB2aWV3LCB1
cEV2ZW50LT5idXR0b24sIHVwRXZlbnQtPmNhbnZhcy54LCB1cEV2ZW50LT5jYW52YXMueSk7CiAg
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHZpZXcsIEVJTkFfRkFMU0UpOwogCiAg
ICAgRXZhc19Db29yZCB4LCB5OwotICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldChzZC0+dmll
dywgJngsICZ5LCAwLCAwKTsKKyAgICBldmFzX29iamVjdF9nZW9tZXRyeV9nZXQoc21hcnREYXRh
LT52aWV3LCAmeCwgJnksIDAsIDApOwogCiAgICAgV2ViQ29yZTo6UGxhdGZvcm1Nb3VzZUV2ZW50
IGV2ZW50KHVwRXZlbnQsIFdlYkNvcmU6OkludFBvaW50KHgsIHkpKTsKLSAgICByZXR1cm4gc2Qt
PmZyYW1lLT5ldmVudEhhbmRsZXIoKS0+aGFuZGxlTW91c2VSZWxlYXNlRXZlbnQoZXZlbnQpOwor
ICAgIHJldHVybiBzbWFydERhdGEtPmZyYW1lLT5ldmVudEhhbmRsZXIoKS0+aGFuZGxlTW91c2VS
ZWxlYXNlRXZlbnQoZXZlbnQpOwogfQogCiBFaW5hX0Jvb2wgZXdrX2ZyYW1lX2ZlZWRfbW91c2Vf
bW92ZShFdmFzX09iamVjdCogZXdrRnJhbWUsIGNvbnN0IEV2YXNfRXZlbnRfTW91c2VfTW92ZSog
bW92ZUV2ZW50KQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBz
ZCwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5m
cmFtZSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJh
bWUsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOX1ZBTChtb3ZlRXZlbnQsIEVJTkFfRkFMU0UpOwogCi0gICAgV2ViQ29yZTo6
RnJhbWVWaWV3KiB2aWV3ID0gc2QtPmZyYW1lLT52aWV3KCk7CisgICAgV2ViQ29yZTo6RnJhbWVW
aWV3KiB2aWV3ID0gc21hcnREYXRhLT5mcmFtZS0+dmlldygpOwogICAgIERCRygiZXdrRnJhbWU9
JXAsIHZpZXc9JXAsIHBvczogb2xkPSVkLCVkLCBuZXc9JWQsJWQsIGJ1dHRvbnM9JWQiLAogICAg
ICAgICBld2tGcmFtZSwgdmlldywgbW92ZUV2ZW50LT5jdXIuY2FudmFzLngsIG1vdmVFdmVudC0+
Y3VyLmNhbnZhcy55LAogICAgICAgICBtb3ZlRXZlbnQtPnByZXYuY2FudmFzLngsIG1vdmVFdmVu
dC0+cHJldi5jYW52YXMueSwgbW92ZUV2ZW50LT5idXR0b25zKTsKICAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTl9WQUwodmlldywgRUlOQV9GQUxTRSk7CiAKICAgICBFdmFzX0Nvb3JkIHgs
IHk7Ci0gICAgZXZhc19vYmplY3RfZ2VvbWV0cnlfZ2V0KHNkLT52aWV3LCAmeCwgJnksIDAsIDAp
OworICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldChzbWFydERhdGEtPnZpZXcsICZ4LCAmeSwg
MCwgMCk7CiAKICAgICBXZWJDb3JlOjpQbGF0Zm9ybU1vdXNlRXZlbnQgZXZlbnQobW92ZUV2ZW50
LCBXZWJDb3JlOjpJbnRQb2ludCh4LCB5KSk7Ci0gICAgcmV0dXJuIHNkLT5mcmFtZS0+ZXZlbnRI
YW5kbGVyKCktPm1vdXNlTW92ZWQoZXZlbnQpOworICAgIHJldHVybiBzbWFydERhdGEtPmZyYW1l
LT5ldmVudEhhbmRsZXIoKS0+bW91c2VNb3ZlZChldmVudCk7CiB9CiAKIEVpbmFfQm9vbCBld2tf
ZnJhbWVfZmVlZF90b3VjaF9ldmVudChFdmFzX09iamVjdCogZXdrRnJhbWUsIEV3a19Ub3VjaF9F
dmVudF9UeXBlIGFjdGlvbiwgRWluYV9MaXN0KiBwb2ludHMsIGludCBtZXRhU3RhdGUpCiB7Ci0g
ICAgRWluYV9Cb29sIHJldCA9IEVJTkFfRkFMU0U7CisgICAgRWluYV9Cb29sIHJlc3VsdCA9IEVJ
TkFfRkFMU0U7CiAKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOX1ZBTChwb2ludHMsIEVJTkFfRkFMU0UpOwotICAgIEVXS19GUkFNRV9TRF9H
RVQoZXdrRnJhbWUsIHNkKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUKGV3a0ZyYW1lLCBzbWFydERh
dGEpOwogCi0gICAgaWYgKCFzZCB8fCAhc2QtPmZyYW1lIHx8ICFld2tfdmlld19uZWVkX3RvdWNo
X2V2ZW50c19nZXQoc2QtPnZpZXcpKQorICAgIGlmICghc21hcnREYXRhIHx8ICFzbWFydERhdGEt
PmZyYW1lIHx8ICFld2tfdmlld19uZWVkX3RvdWNoX2V2ZW50c19nZXQoc21hcnREYXRhLT52aWV3
KSkKICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CiAKICAgICBFdmFzX0Nvb3JkIHgsIHk7Ci0g
ICAgZXZhc19vYmplY3RfZ2VvbWV0cnlfZ2V0KHNkLT52aWV3LCAmeCwgJnksIDAsIDApOworICAg
IGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldChzbWFydERhdGEtPnZpZXcsICZ4LCAmeSwgMCwgMCk7
CiAKICAgICBXZWJDb3JlOjpUb3VjaEV2ZW50VHlwZSB0eXBlID0gV2ViQ29yZTo6VG91Y2hTdGFy
dDsKICAgICBzd2l0Y2ggKGFjdGlvbikgewpAQCAtOTM4LDEwICs5MzgsMTAgQEAgRWluYV9Cb29s
IGV3a19mcmFtZV9mZWVkX3RvdWNoX2V2ZW50KEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgRXdrX1Rv
dWNoX0V2ZW50X1R5cGUKICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CiAgICAgfQogCi0gICAg
V2ViQ29yZTo6UGxhdGZvcm1Ub3VjaEV2ZW50IHRlKHBvaW50cywgV2ViQ29yZTo6SW50UG9pbnQo
eCwgeSksIHR5cGUsIG1ldGFTdGF0ZSk7Ci0gICAgcmV0ID0gc2QtPmZyYW1lLT5ldmVudEhhbmRs
ZXIoKS0+aGFuZGxlVG91Y2hFdmVudCh0ZSk7CisgICAgV2ViQ29yZTo6UGxhdGZvcm1Ub3VjaEV2
ZW50IHRvdWNoRXZlbnQocG9pbnRzLCBXZWJDb3JlOjpJbnRQb2ludCh4LCB5KSwgdHlwZSwgbWV0
YVN0YXRlKTsKKyAgICByZXN1bHQgPSBzbWFydERhdGEtPmZyYW1lLT5ldmVudEhhbmRsZXIoKS0+
aGFuZGxlVG91Y2hFdmVudCh0b3VjaEV2ZW50KTsKICNlbmRpZgotICAgIHJldHVybiByZXQ7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogc3RhdGljIGlubGluZSBFaW5hX0Jvb2wgX2V3a19mcmFt
ZV9oYW5kbGVfa2V5X3Njcm9sbGluZyhXZWJDb3JlOjpGcmFtZSogZnJhbWUsIGNvbnN0IFdlYkNv
cmU6OlBsYXRmb3JtS2V5Ym9hcmRFdmVudCYga2V5RXZlbnQpCkBAIC0xMDEwLDM5ICsxMDEwLDM5
IEBAIHN0YXRpYyBpbmxpbmUgRWluYV9Cb29sIF9ld2tfZnJhbWVfaGFuZGxlX2tleV9zY3JvbGxp
bmcoV2ViQ29yZTo6RnJhbWUqIGZyYW1lLCBjCiAKIEVpbmFfQm9vbCBld2tfZnJhbWVfZmVlZF9r
ZXlfZG93bihFdmFzX09iamVjdCogZXdrRnJhbWUsIGNvbnN0IEV2YXNfRXZlbnRfS2V5X0Rvd24q
IGRvd25FdmVudCkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwg
c2QsIEVJTkFfRkFMU0UpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+
ZnJhbWUsIEVJTkFfRkFMU0UpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0Zy
YW1lLCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOX1ZBTChzbWFydERhdGEtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTl9WQUwoZG93bkV2ZW50LCBFSU5BX0ZBTFNFKTsKIAogICAgIERCRygiZXdr
RnJhbWU9JXAga2V5bmFtZT0lcyAoa2V5PSVzLCBzdHJpbmc9JXMpIiwKICAgICAgICAgZXdrRnJh
bWUsIGRvd25FdmVudC0+a2V5bmFtZSwgZG93bkV2ZW50LT5rZXkgPyBkb3duRXZlbnQtPmtleSA6
ICIiLCBkb3duRXZlbnQtPnN0cmluZyA/IGRvd25FdmVudC0+c3RyaW5nIDogIiIpOwogCiAgICAg
V2ViQ29yZTo6UGxhdGZvcm1LZXlib2FyZEV2ZW50IGV2ZW50KGRvd25FdmVudCk7Ci0gICAgaWYg
KHNkLT5mcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmtleUV2ZW50KGV2ZW50KSkKKyAgICBpZiAoc21h
cnREYXRhLT5mcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmtleUV2ZW50KGV2ZW50KSkKICAgICAgICAg
cmV0dXJuIEVJTkFfVFJVRTsKIAotICAgIHJldHVybiBfZXdrX2ZyYW1lX2hhbmRsZV9rZXlfc2Ny
b2xsaW5nKHNkLT5mcmFtZSwgZXZlbnQpOworICAgIHJldHVybiBfZXdrX2ZyYW1lX2hhbmRsZV9r
ZXlfc2Nyb2xsaW5nKHNtYXJ0RGF0YS0+ZnJhbWUsIGV2ZW50KTsKIH0KIAogRWluYV9Cb29sIGV3
a19mcmFtZV9mZWVkX2tleV91cChFdmFzX09iamVjdCogZXdrRnJhbWUsIGNvbnN0IEV2YXNfRXZl
bnRfS2V5X1VwKiB1cEV2ZW50KQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3
a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5f
VkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRV
Uk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh1cEV2ZW50LCBFSU5BX0ZBTFNFKTsKIAogICAgIERC
RygiZXdrRnJhbWU9JXAga2V5bmFtZT0lcyAoa2V5PSVzLCBzdHJpbmc9JXMpIiwKICAgICAgICAg
ZXdrRnJhbWUsIHVwRXZlbnQtPmtleW5hbWUsIHVwRXZlbnQtPmtleSA/IHVwRXZlbnQtPmtleSA6
ICIiLCB1cEV2ZW50LT5zdHJpbmcgPyB1cEV2ZW50LT5zdHJpbmcgOiAiIik7CiAKICAgICBXZWJD
b3JlOjpQbGF0Zm9ybUtleWJvYXJkRXZlbnQgZXZlbnQodXBFdmVudCk7Ci0gICAgcmV0dXJuIHNk
LT5mcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmtleUV2ZW50KGV2ZW50KTsKKyAgICByZXR1cm4gc21h
cnREYXRhLT5mcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmtleUV2ZW50KGV2ZW50KTsKIH0KIAogRXdr
X1RleHRfU2VsZWN0aW9uX1R5cGUgZXdrX2ZyYW1lX3RleHRfc2VsZWN0aW9uX3R5cGVfZ2V0KGNv
bnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JF
VFVSTihld2tGcmFtZSwgc2QsIEVXS19URVhUX1NFTEVDVElPTl9OT05FKTsKLSAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFV0tfVEVYVF9TRUxFQ1RJT05fTk9O
RSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSwg
RVdLX1RFWFRfU0VMRUNUSU9OX05PTkUpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJO
X1ZBTChzbWFydERhdGEtPmZyYW1lLCBFV0tfVEVYVF9TRUxFQ1RJT05fTk9ORSk7CiAKLSAgICBX
ZWJDb3JlOjpGcmFtZVNlbGVjdGlvbiogY29udHJvbGxlciA9IHNkLT5mcmFtZS0+c2VsZWN0aW9u
KCk7CisgICAgV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb24qIGNvbnRyb2xsZXIgPSBzbWFydERhdGEt
PmZyYW1lLT5zZWxlY3Rpb24oKTsKICAgICBpZiAoIWNvbnRyb2xsZXIpCiAgICAgICAgIHJldHVy
biBFV0tfVEVYVF9TRUxFQ1RJT05fTk9ORTsKIApAQCAtMTA4NSwxOCArMTA4NSwxOCBAQCBFdmFz
X09iamVjdCogZXdrX2ZyYW1lX2FkZChFdmFzKiBjYW52YXMpCiAgKi8KIEVpbmFfQm9vbCBld2tf
ZnJhbWVfaW5pdChFdmFzX09iamVjdCogZXdrRnJhbWUsIEV2YXNfT2JqZWN0KiB2aWV3LCBXZWJD
b3JlOjpGcmFtZSogZnJhbWUpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdr
RnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBpZiAoIXNkLT5mcmFtZSkgewotICAgICAgICBX
ZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEVmbCogZmxjID0gX2V3a19mcmFtZV9sb2FkZXJfZWZs
X2dldChmcmFtZSk7Ci0gICAgICAgIGZsYy0+c2V0V2ViRnJhbWUoZXdrRnJhbWUpOwotICAgICAg
ICBzZC0+ZnJhbWUgPSBmcmFtZTsKLSAgICAgICAgc2QtPnZpZXcgPSB2aWV3OworICAgIEVXS19G
UkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOwor
ICAgIGlmICghc21hcnREYXRhLT5mcmFtZSkgeworICAgICAgICBXZWJDb3JlOjpGcmFtZUxvYWRl
ckNsaWVudEVmbCogZnJhbWVMb2FkZXJDbGllbnQgPSBfZXdrX2ZyYW1lX2xvYWRlcl9lZmxfZ2V0
KGZyYW1lKTsKKyAgICAgICAgZnJhbWVMb2FkZXJDbGllbnQtPnNldFdlYkZyYW1lKGV3a0ZyYW1l
KTsKKyAgICAgICAgc21hcnREYXRhLT5mcmFtZSA9IGZyYW1lOworICAgICAgICBzbWFydERhdGEt
PnZpZXcgPSB2aWV3OwogICAgICAgICBmcmFtZS0+aW5pdCgpOwogICAgICAgICByZXR1cm4gRUlO
QV9UUlVFOwogICAgIH0KIAogICAgIEVSUigiZnJhbWUgJXAgYWxyZWFkeSBzZXQgZm9yICVwLCBp
Z25vcmVkIG5ldyAlcCIsCi0gICAgICAgIHNkLT5mcmFtZSwgZXdrRnJhbWUsIGZyYW1lKTsKKyAg
ICAgICAgc21hcnREYXRhLT5mcmFtZSwgZXdrRnJhbWUsIGZyYW1lKTsKICAgICByZXR1cm4gRUlO
QV9GQUxTRTsKIH0KIApAQCAtMTEwNyw0NCArMTEwNyw0NCBAQCBFaW5hX0Jvb2wgZXdrX2ZyYW1l
X2luaXQoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBFdmFzX09iamVjdCogdmlldywgV2ViQ29yZTo6
RnJhbQogICovCiBFaW5hX0Jvb2wgZXdrX2ZyYW1lX2NoaWxkX2FkZChFdmFzX09iamVjdCogZXdr
RnJhbWUsIFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpGcmFtZT4gY2hpbGQsIGNvbnN0IFdURjo6
U3RyaW5nJiBuYW1lLCBjb25zdCBXZWJDb3JlOjpLVVJMJiB1cmwsIGNvbnN0IFdURjo6U3RyaW5n
JiByZWZlcnJlcikKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwg
c2QsIDApOwotICAgIGNoYXIgYnVmWzI1Nl07CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRV
Uk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSwgMCk7CisgICAgY2hhciBidWZmZXJbMjU2XTsKICAgICBF
dmFzX09iamVjdCogZnJhbWU7Ci0gICAgV2ViQ29yZTo6RnJhbWUqIGNmOworICAgIFdlYkNvcmU6
OkZyYW1lKiBjb3JlRnJhbWU7CiAKLSAgICBmcmFtZSA9IGV3a19mcmFtZV9hZGQoc2QtPmJhc2Uu
ZXZhcyk7CisgICAgZnJhbWUgPSBld2tfZnJhbWVfYWRkKHNtYXJ0RGF0YS0+YmFzZS5ldmFzKTsK
ICAgICBpZiAoIWZyYW1lKSB7CiAgICAgICAgIEVSUigiQ291bGQgbm90IGNyZWF0ZSBld2tfZnJh
bWUgb2JqZWN0LiIpOwogICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKICAgICB9CiAKLSAgICBj
ZiA9IGNoaWxkLmdldCgpOwotICAgIGlmIChjZi0+dHJlZSgpKQotICAgICAgICBjZi0+dHJlZSgp
LT5zZXROYW1lKG5hbWUpOworICAgIGNvcmVGcmFtZSA9IGNoaWxkLmdldCgpOworICAgIGlmIChj
b3JlRnJhbWUtPnRyZWUoKSkKKyAgICAgICAgY29yZUZyYW1lLT50cmVlKCktPnNldE5hbWUobmFt
ZSk7CiAgICAgZWxzZQogICAgICAgICBFUlIoIm5vIHRyZWUgZm9yIGNoaWxkIG9iamVjdCIpOwot
ICAgIHNkLT5mcmFtZS0+dHJlZSgpLT5hcHBlbmRDaGlsZChjaGlsZCk7CisgICAgc21hcnREYXRh
LT5mcmFtZS0+dHJlZSgpLT5hcHBlbmRDaGlsZChjaGlsZCk7CiAKLSAgICBpZiAoIWV3a19mcmFt
ZV9pbml0KGZyYW1lLCBzZC0+dmlldywgY2YpKSB7CisgICAgaWYgKCFld2tfZnJhbWVfaW5pdChm
cmFtZSwgc21hcnREYXRhLT52aWV3LCBjb3JlRnJhbWUpKSB7CiAgICAgICAgIGV2YXNfb2JqZWN0
X2RlbChmcmFtZSk7CiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwogICAgIH0KLSAgICBzbnBy
aW50ZihidWYsIHNpemVvZihidWYpLCAiRVdLX0ZyYW1lOmNoaWxkLyVzIiwgbmFtZS51dGY4KCku
ZGF0YSgpKTsKLSAgICBldmFzX29iamVjdF9uYW1lX3NldChmcmFtZSwgYnVmKTsKKyAgICBzbnBy
aW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpLCAiRVdLX0ZyYW1lOmNoaWxkLyVzIiwgbmFtZS51
dGY4KCkuZGF0YSgpKTsKKyAgICBldmFzX29iamVjdF9uYW1lX3NldChmcmFtZSwgYnVmZmVyKTsK
ICAgICBldmFzX29iamVjdF9zbWFydF9tZW1iZXJfYWRkKGZyYW1lLCBld2tGcmFtZSk7CiAgICAg
ZXZhc19vYmplY3Rfc2hvdyhmcmFtZSk7CiAKICAgICAvLyBUaGUgY3JlYXRpb24gb2YgdGhlIGZy
YW1lIG1heSBoYXZlIHJ1biBhcmJpdHJhcnkgSmF2YVNjcmlwdCB0aGF0IHJlbW92ZWQgaXQgZnJv
bSB0aGUgcGFnZSBhbHJlYWR5LgotICAgIGlmICghY2YtPnBhZ2UoKSkgeworICAgIGlmICghY29y
ZUZyYW1lLT5wYWdlKCkpIHsKICAgICAgICAgZXZhc19vYmplY3RfZGVsKGZyYW1lKTsKICAgICAg
ICAgcmV0dXJuIEVJTkFfVFJVRTsKICAgICB9CiAKLSAgICBzZC0+ZnJhbWUtPmxvYWRlcigpLT5s
b2FkVVJMSW50b0NoaWxkRnJhbWUodXJsLCByZWZlcnJlciwgY2YpOworICAgIHNtYXJ0RGF0YS0+
ZnJhbWUtPmxvYWRlcigpLT5sb2FkVVJMSW50b0NoaWxkRnJhbWUodXJsLCByZWZlcnJlciwgY29y
ZUZyYW1lKTsKIAogICAgIC8vIFRoZSBmcmFtZSdzIG9ubG9hZCBoYW5kbGVyIG1heSBoYXZlIHJl
bW92ZWQgaXQgZnJvbSB0aGUgZG9jdW1lbnQuCiAgICAgLy8gU2VlIGZhc3QvZG9tL251bGwtcGFn
ZS1zaG93LW1vZGFsLWRpYWxvZy1jcmFzaC5odG1sIGZvciBhbiBleGFtcGxlLgotICAgIGlmICgh
Y2YtPnRyZWUoKS0+cGFyZW50KCkpIHsKKyAgICBpZiAoIWNvcmVGcmFtZS0+dHJlZSgpLT5wYXJl
bnQoKSkgewogICAgICAgICBldmFzX29iamVjdF9kZWwoZnJhbWUpOwogICAgICAgICByZXR1cm4g
RUlOQV9UUlVFOwogICAgIH0KQEAgLTExNTcsMTcgKzExNTcsMTcgQEAgRWluYV9Cb29sIGV3a19m
cmFtZV9jaGlsZF9hZGQoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBXVEY6OlBhc3NSZWZQdHI8V2Vi
Q29yZTo6RnIKICAqIEBpbnRlcm5hbAogICogQ2hhbmdlIHRoZSBld2sgdmlldyB0aGlzIGZyYW1l
IGlzIGFzc29jaWF0ZWQgd2l0aC4KICAqCi0gKiBAcGFyYW0gbyBUaGUgZXdrIGZyYW1lIHRvIGFj
dCB1cG9uLgorICogQHBhcmFtIGV3a0ZyYW1lIFRoZSBld2sgZnJhbWUgdG8gYWN0IHVwb24uCiAg
KiBAcGFyYW0gbmV3UGFyZW50IFRoZSBuZXcgdmlldyB0aGF0IHdpbGwgYmUgc2V0IGFzIHRoZSBw
YXJlbnQgb2YgdGhlIGZyYW1lLgogICovCiB2b2lkIGV3a19mcmFtZV92aWV3X3NldChFdmFzX09i
amVjdCogZXdrRnJhbWUsIEV2YXNfT2JqZWN0KiBuZXdQYXJlbnQpCiB7Ci0gICAgRVdLX0ZSQU1F
X1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09S
X1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRhKTsKIAogICAgIGV2YXNfb2JqZWN0X3NtYXJ0X21l
bWJlcl9kZWwoZXdrRnJhbWUpOwogICAgIGV2YXNfb2JqZWN0X3NtYXJ0X21lbWJlcl9hZGQoZXdr
RnJhbWUsIG5ld1BhcmVudCk7CiAKLSAgICBzZC0+dmlldyA9IG5ld1BhcmVudDsKKyAgICBzbWFy
dERhdGEtPnZpZXcgPSBuZXdQYXJlbnQ7CiB9CiAKIC8qKgpAQCAtMTE3Nyw4ICsxMTc3LDggQEAg
dm9pZCBld2tfZnJhbWVfdmlld19zZXQoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBFdmFzX09iamVj
dCogbmV3UGFyZW50KQogdm9pZCBld2tfZnJhbWVfY29yZV9nb25lKEV2YXNfT2JqZWN0KiBld2tG
cmFtZSkKIHsKICAgICBEQkcoImV3a0ZyYW1lPSVwIiwgZXdrRnJhbWUpOwotICAgIEVXS19GUkFN
RV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCk7Ci0gICAgc2QtPmZyYW1lID0gMDsKKyAg
ICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRhKTsKKyAgICBz
bWFydERhdGEtPmZyYW1lID0gMDsKIH0KIAogLyoqCkBAIC0xMTkwLDggKzExOTAsOCBAQCB2b2lk
IGV3a19mcmFtZV9jb3JlX2dvbmUoRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogICovCiBXZWJDb3Jl
OjpGcmFtZSogZXdrX2ZyYW1lX2NvcmVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSkK
IHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIDApOwotICAg
IHJldHVybiBzZC0+ZnJhbWU7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJh
bWUsIHNtYXJ0RGF0YSwgMCk7CisgICAgcmV0dXJuIHNtYXJ0RGF0YS0+ZnJhbWU7CiB9CiAKIApA
QCAtMTIwMCw3ICsxMjAwLDcgQEAgV2ViQ29yZTo6RnJhbWUqIGV3a19mcmFtZV9jb3JlX2dldChj
b25zdCBFdmFzX09iamVjdCogZXdrRnJhbWUpCiAgKiBSZXBvcnRzIGEgcmVzb3VyY2Ugd2lsbCBi
ZSByZXF1ZXN0ZWQuIFVzZXIgbWF5IG92ZXJyaWRlIGJlaGF2aW9yIG9mIHdlYmtpdCBieQogICog
Y2hhbmdpbmcgdmFsdWVzIGluIEBwYXJhbSByZXF1ZXN0LgogICoKLSAqIEBwYXJhbSBvIEZyYW1l
LgorICogQHBhcmFtIGV3a0ZyYW1lIEZyYW1lLgogICogQHBhcmFtIHJlcXVlc3QgUmVxdWVzdCBk
ZXRhaWxzIHRoYXQgdXNlciBtYXkgb3ZlcnJpZGUuIFdoZW5ldmVyIHZhbHVlcyBvbgogICogdGhp
cyBzdHJ1Y3QgY2hhbmdlcywgaXQgbXVzdCBiZSBwcm9wZXJseSBtYWxsb2MnZCBhcyBpdCB3aWxs
IGJlIGZyZWVkCiAgKiBhZnRlcndhcmRzLgpAQCAtMTIxNiw3ICsxMjE2LDcgQEAgdm9pZCBld2tf
ZnJhbWVfcmVxdWVzdF93aWxsX3NlbmQoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBFd2tfRnJhbWVf
UmVzb3VyY2VfUmVxdWUKICAqIEBpbnRlcm5hbAogICogUmVwb3J0cyB0aGF0IHRoZXJlJ3MgYSBu
ZXcgcmVzb3VyY2UuCiAgKgotICogQHBhcmFtIG8gRnJhbWUuCisgKiBAcGFyYW0gZXdrRnJhbWUg
RnJhbWUuCiAgKiBAcGFyYW0gcmVxdWVzdCBOZXcgcmVxdWVzdCBkZXRhaWxzLiBObyBjaGFuZ2Vz
IGFyZSBhbGxvd2VkIHRvIGZpZWxkcy4KICAqCiAgKiBFbWl0cyBzaWduYWw6ICJyZXNvdXJjZSxy
ZXF1ZXN0LG5ldyIKQEAgLTEyMzAsNyArMTIzMCw3IEBAIHZvaWQgZXdrX2ZyYW1lX3JlcXVlc3Rf
YXNzaWduX2lkZW50aWZpZXIoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBjb25zdCBFd2tfRnJhbWVf
CiAgKiBAaW50ZXJuYWwKICAqIFJlcG9ydHMgdGhhdCBmaXJzdCBuYXZpZ2F0aW9uIG9jY3VycmVk
CiAgKgotICogQHBhcmFtIG8gRnJhbWUuCisgKiBAcGFyYW0gZXdrRnJhbWUgRnJhbWUuCiAgKgog
ICogRW1pdHMgc2lnbmFsOiAibmF2aWdhdGlvbixmaXJzdCIKICAqLwpAQCAtMTI0Myw3ICsxMjQz
LDcgQEAgdm9pZCBld2tfZnJhbWVfZGlkX3BlcmZvcm1fZmlyc3RfbmF2aWdhdGlvbihFdmFzX09i
amVjdCogZXdrRnJhbWUpCiAgKiBAaW50ZXJuYWwKICAqIFJlcG9ydHMgZnJhbWUgd2lsbCBiZSBz
YXZlZCB0byBjdXJyZW50IHN0YXRlCiAgKgotICogQHBhcmFtIG8gRnJhbWUuCisgKiBAcGFyYW0g
ZXdrRnJhbWUgRnJhbWUuCiAgKiBAcGFyYW0gaXRlbSBIaXN0b3J5IGl0ZW0gdG8gc2F2ZSBkZXRh
aWxzIHRvLgogICoKICAqIEVtaXRzIHNpZ25hbDogInN0YXRlLHNhdmUiCkBAIC0xMjYxLDIyICsx
MjYxLDIyIEBAIHZvaWQgZXdrX2ZyYW1lX3ZpZXdfc3RhdGVfc2F2ZShFdmFzX09iamVjdCogZXdr
RnJhbWUsIFdlYkNvcmU6Okhpc3RvcnlJdGVtKiBpdGVtCiAgKi8KIHZvaWQgZXdrX2ZyYW1lX2xv
YWRfc3RhcnRlZChFdmFzX09iamVjdCogZXdrRnJhbWUpCiB7Ci0gICAgRXZhc19PYmplY3QqIG1h
aW5fZnJhbWU7CisgICAgRXZhc19PYmplY3QqIG1haW5GcmFtZTsKICAgICBEQkcoImV3a0ZyYW1l
PSVwIiwgZXdrRnJhbWUpOwogICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdr
RnJhbWUsICJsb2FkLHN0YXJ0ZWQiLCAwKTsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVS
Tihld2tGcmFtZSwgc2QpOwotICAgIGV3a192aWV3X2xvYWRfc3RhcnRlZChzZC0+dmlldyk7Cisg
ICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSk7CisgICAg
ZXdrX3ZpZXdfbG9hZF9zdGFydGVkKHNtYXJ0RGF0YS0+dmlldyk7CiAKLSAgICBtYWluX2ZyYW1l
ID0gZXdrX3ZpZXdfZnJhbWVfbWFpbl9nZXQoc2QtPnZpZXcpOwotICAgIGlmIChtYWluX2ZyYW1l
ID09IGV3a0ZyYW1lKQotICAgICAgICBld2tfdmlld19mcmFtZV9tYWluX2xvYWRfc3RhcnRlZChz
ZC0+dmlldyk7CisgICAgbWFpbkZyYW1lID0gZXdrX3ZpZXdfZnJhbWVfbWFpbl9nZXQoc21hcnRE
YXRhLT52aWV3KTsKKyAgICBpZiAobWFpbkZyYW1lID09IGV3a0ZyYW1lKQorICAgICAgICBld2tf
dmlld19mcmFtZV9tYWluX2xvYWRfc3RhcnRlZChzbWFydERhdGEtPnZpZXcpOwogfQogCiAvKioK
ICAqIEBpbnRlcm5hbAogICogUmVwb3J0cyB0aGUgZnJhbWUgc3RhcnRlZCBwcm92aXNpb25hbCBs
b2FkLgogICoKLSAqIEBwYXJhbSBvIEZyYW1lLgorICogQHBhcmFtIGV3a0ZyYW1lIEZyYW1lLgog
ICoKICAqIEVtaXRzIHNpZ25hbDogImxvYWQscHJvdmlzaW9uYWwiIHdpdGggbm8gcGFyYW1ldGVy
cy4KICAqLwpAQCAtMTI4OSw3ICsxMjg5LDcgQEAgdm9pZCBld2tfZnJhbWVfbG9hZF9wcm92aXNp
b25hbChFdmFzX09iamVjdCogZXdrRnJhbWUpCiAgKiBAaW50ZXJuYWwKICAqIFJlcG9ydHMgdGhl
IGZyYW1lIGZpbmlzaGVkIGZpcnN0IGxheW91dC4KICAqCi0gKiBAcGFyYW0gbyBGcmFtZS4KKyAq
IEBwYXJhbSBld2tGcmFtZSBGcmFtZS4KICAqCiAgKiBFbWl0cyBzaWduYWw6ICJsb2FkLGZpcnN0
bGF5b3V0LGZpbmlzaGVkIiB3aXRoIG5vIHBhcmFtZXRlcnMuCiAgKi8KQEAgLTEzMDIsNyArMTMw
Miw3IEBAIHZvaWQgZXdrX2ZyYW1lX2xvYWRfZmlyc3RsYXlvdXRfZmluaXNoZWQoRXZhc19PYmpl
Y3QqIGV3a0ZyYW1lKQogICogQGludGVybmFsCiAgKiBSZXBvcnRzIHRoZSBmcmFtZSBmaW5pc2hl
ZCBmaXJzdCBub24gZW1wdHkgbGF5b3V0LgogICoKLSAqIEBwYXJhbSBvIEZyYW1lLgorICogQHBh
cmFtIGV3a0ZyYW1lIEZyYW1lLgogICoKICAqIEVtaXRzIHNpZ25hbDogImxvYWQsbm9uZW1wdHls
YXlvdXQsZmluaXNoZWQiIHdpdGggbm8gcGFyYW1ldGVycy4KICAqLwpAQCAtMTMxNSw3ICsxMzE1
LDcgQEAgdm9pZCBld2tfZnJhbWVfbG9hZF9maXJzdGxheW91dF9ub25lbXB0eV9maW5pc2hlZChF
dmFzX09iamVjdCogZXdrRnJhbWUpCiAgKiBAaW50ZXJuYWwKICAqIFJlcG9ydHMgdGhlIGxvYWRp
bmcgb2YgYSBkb2N1bWVudCBoYXMgZmluaXNoZWQgb24gZnJhbWUuCiAgKgotICogQHBhcmFtIG8g
RnJhbWUuCisgKiBAcGFyYW0gZXdrRnJhbWUgRnJhbWUuCiAgKgogICogRW1pdHMgc2lnbmFsOiAi
bG9hZCxkb2N1bWVudCxmaW5pc2hlZCIgd2l0aCBubyBwYXJhbWV0ZXJzLgogICovCkBAIC0xMzM4
LDcgKzEzMzgsNyBAQCB2b2lkIGV3a19mcmFtZV9sb2FkX2RvY3VtZW50X2ZpbmlzaGVkKEV2YXNf
T2JqZWN0KiBld2tGcmFtZSkKICAqLwogdm9pZCBld2tfZnJhbWVfbG9hZF9maW5pc2hlZChFdmFz
X09iamVjdCogZXdrRnJhbWUsIGNvbnN0IGNoYXIqIGVycm9yRG9tYWluLCBpbnQgZXJyb3JDb2Rl
LCBFaW5hX0Jvb2wgaXNDYW5jZWxsYXRpb24sIGNvbnN0IGNoYXIqIGVycm9yRGVzY3JpcHRpb24s
IGNvbnN0IGNoYXIqIGZhaWxpbmdVcmwpCiB7Ci0gICAgRXdrX0ZyYW1lX0xvYWRfRXJyb3IgYnVm
LCAqZXJyb3I7CisgICAgRXdrX0ZyYW1lX0xvYWRfRXJyb3IgYnVmZmVyLCAqZXJyb3I7CiAgICAg
aWYgKCFlcnJvckRvbWFpbikgewogICAgICAgICBEQkcoImV3a0ZyYW1lPSVwLCBzdWNjZXNzLiIs
IGV3a0ZyYW1lKTsKICAgICAgICAgZXJyb3IgPSAwOwpAQCAtMTM0NywxNyArMTM0NywxNyBAQCB2
b2lkIGV3a19mcmFtZV9sb2FkX2ZpbmlzaGVkKEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgY29uc3Qg
Y2hhciogZXJyb3JEb21haW4sIGludAogICAgICAgICAgICAgZXdrRnJhbWUsIGVycm9yRG9tYWlu
LCBlcnJvckNvZGUsIGlzQ2FuY2VsbGF0aW9uLAogICAgICAgICAgICAgZXJyb3JEZXNjcmlwdGlv
biwgZmFpbGluZ1VybCk7CiAKLSAgICAgICAgYnVmLmRvbWFpbiA9IGVycm9yRG9tYWluOwotICAg
ICAgICBidWYuY29kZSA9IGVycm9yQ29kZTsKLSAgICAgICAgYnVmLmlzX2NhbmNlbGxhdGlvbiA9
IGlzQ2FuY2VsbGF0aW9uOwotICAgICAgICBidWYuZGVzY3JpcHRpb24gPSBlcnJvckRlc2NyaXB0
aW9uOwotICAgICAgICBidWYuZmFpbGluZ191cmwgPSBmYWlsaW5nVXJsOwotICAgICAgICBidWYu
ZnJhbWUgPSBld2tGcmFtZTsKLSAgICAgICAgZXJyb3IgPSAmYnVmOworICAgICAgICBidWZmZXIu
ZG9tYWluID0gZXJyb3JEb21haW47CisgICAgICAgIGJ1ZmZlci5jb2RlID0gZXJyb3JDb2RlOwor
ICAgICAgICBidWZmZXIuaXNfY2FuY2VsbGF0aW9uID0gaXNDYW5jZWxsYXRpb247CisgICAgICAg
IGJ1ZmZlci5kZXNjcmlwdGlvbiA9IGVycm9yRGVzY3JpcHRpb247CisgICAgICAgIGJ1ZmZlci5m
YWlsaW5nX3VybCA9IGZhaWxpbmdVcmw7CisgICAgICAgIGJ1ZmZlci5mcmFtZSA9IGV3a0ZyYW1l
OworICAgICAgICBlcnJvciA9ICZidWZmZXI7CiAgICAgfQogICAgIGV2YXNfb2JqZWN0X3NtYXJ0
X2NhbGxiYWNrX2NhbGwoZXdrRnJhbWUsICJsb2FkLGZpbmlzaGVkIiwgZXJyb3IpOwotICAgIEVX
S19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCk7Ci0gICAgZXdrX3ZpZXdfbG9h
ZF9maW5pc2hlZChzZC0+dmlldywgZXJyb3IpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVU
VVJOKGV3a0ZyYW1lLCBzbWFydERhdGEpOworICAgIGV3a192aWV3X2xvYWRfZmluaXNoZWQoc21h
cnREYXRhLT52aWV3LCBlcnJvcik7CiB9CiAKIC8qKgpAQCAtMTM5NSwxNiArMTM5NSwxNiBAQCB2
b2lkIGV3a19mcmFtZV9sb2FkX2Vycm9yKEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgY29uc3QgY2hh
ciogZXJyb3JEb21haW4sIGludCBlcgogICovCiB2b2lkIGV3a19mcmFtZV9sb2FkX3Byb2dyZXNz
X2NoYW5nZWQoRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRf
T1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4o
c2QtPmZyYW1lKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21h
cnREYXRhKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmZyYW1l
KTsKIAogICAgIC8vIFRPRE86IHRoaXMgaXMgcGVyIHBhZ2UsIHRoZXJlIHNob3VsZCBiZSBhIHdh
eSB0byBoYXZlIHBlci1mcmFtZS4KLSAgICBkb3VibGUgcHJvZ3Jlc3MgPSBzZC0+ZnJhbWUtPnBh
Z2UoKS0+cHJvZ3Jlc3MoKS0+ZXN0aW1hdGVkUHJvZ3Jlc3MoKTsKKyAgICBkb3VibGUgcHJvZ3Jl
c3MgPSBzbWFydERhdGEtPmZyYW1lLT5wYWdlKCktPnByb2dyZXNzKCktPmVzdGltYXRlZFByb2dy
ZXNzKCk7CiAKICAgICBEQkcoImV3a0ZyYW1lPSVwIChwPSUwLjNmKSIsIGV3a0ZyYW1lLCBwcm9n
cmVzcyk7CiAKICAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKGV3a0ZyYW1lLCAi
bG9hZCxwcm9ncmVzcyIsICZwcm9ncmVzcyk7Ci0gICAgZXdrX3ZpZXdfbG9hZF9wcm9ncmVzc19j
aGFuZ2VkKHNkLT52aWV3KTsKKyAgICBld2tfdmlld19sb2FkX3Byb2dyZXNzX2NoYW5nZWQoc21h
cnREYXRhLT52aWV3KTsKIH0KIAogCkBAIC0xNDQxLDUxICsxNDQxLDUxIEBAIHZvaWQgZXdrX2Zy
YW1lX3RpdGxlX3NldChFdmFzX09iamVjdCogZXdrRnJhbWUsIGNvbnN0IGNoYXIqIHRpdGxlKQog
dm9pZCBld2tfZnJhbWVfdmlld19jcmVhdGVfZm9yX3ZpZXcoRXZhc19PYmplY3QqIGV3a0ZyYW1l
LCBFdmFzX09iamVjdCogdmlldykKIHsKICAgICBEQkcoImV3a0ZyYW1lPSVwLCB2aWV3PSVwIiwg
ZXdrRnJhbWUsIHZpZXcpOwotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1l
LCBzZCk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmZyYW1lKTsKLSAgICBF
dmFzX0Nvb3JkIHcsIGg7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUs
IHNtYXJ0RGF0YSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRhLT5m
cmFtZSk7CisgICAgRXZhc19Db29yZCB3aWR0aCwgaGVpZ2h0OwogCi0gICAgZXZhc19vYmplY3Rf
Z2VvbWV0cnlfZ2V0KHZpZXcsIDAsIDAsICZ3LCAmaCk7CisgICAgZXZhc19vYmplY3RfZ2VvbWV0
cnlfZ2V0KHZpZXcsIDAsIDAsICZ3aWR0aCwgJmhlaWdodCk7CiAKLSAgICBXZWJDb3JlOjpJbnRT
aXplIHNpemUodywgaCk7Ci0gICAgaW50IHIsIGcsIGIsIGE7Ci0gICAgV2ViQ29yZTo6Q29sb3Ig
Ymc7CisgICAgV2ViQ29yZTo6SW50U2l6ZSBzaXplKHdpZHRoLCBoZWlnaHQpOworICAgIGludCBy
ZWQsIGdyZWVuLCBibHVlLCBhbHBoYTsKKyAgICBXZWJDb3JlOjpDb2xvciBiYWNrZ3JvdW5kOwog
Ci0gICAgZXdrX3ZpZXdfYmdfY29sb3JfZ2V0KHZpZXcsICZyLCAmZywgJmIsICZhKTsKLSAgICBp
ZiAoIWEpCi0gICAgICAgIGJnID0gV2ViQ29yZTo6Q29sb3IoMCwgMCwgMCwgMCk7Ci0gICAgZWxz
ZSBpZiAoYSA9PSAyNTUpCi0gICAgICAgIGJnID0gV2ViQ29yZTo6Q29sb3IociwgZywgYiwgYSk7
CisgICAgZXdrX3ZpZXdfYmdfY29sb3JfZ2V0KHZpZXcsICZyZWQsICZncmVlbiwgJmJsdWUsICZh
bHBoYSk7CisgICAgaWYgKCFhbHBoYSkKKyAgICAgICAgYmFja2dyb3VuZCA9IFdlYkNvcmU6OkNv
bG9yKDAsIDAsIDAsIDApOworICAgIGVsc2UgaWYgKGFscGhhID09IDI1NSkKKyAgICAgICAgYmFj
a2dyb3VuZCA9IFdlYkNvcmU6OkNvbG9yKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKICAgICBl
bHNlCi0gICAgICAgIGJnID0gV2ViQ29yZTo6Q29sb3IociAqIDI1NSAvIGEsIGcgKiAyNTUgLyBh
LCBiICogMjU1IC8gYSwgYSk7CisgICAgICAgIGJhY2tncm91bmQgPSBXZWJDb3JlOjpDb2xvcihy
ZWQgKiAyNTUgLyBhbHBoYSwgZ3JlZW4gKiAyNTUgLyBhbHBoYSwgYmx1ZSAqIDI1NSAvIGFscGhh
LCBhbHBoYSk7CiAKLSAgICBzZC0+ZnJhbWUtPmNyZWF0ZVZpZXcoc2l6ZSwgYmcsICFhLCBXZWJD
b3JlOjpJbnRTaXplKCksIGZhbHNlKTsKLSAgICBpZiAoIXNkLT5mcmFtZS0+dmlldygpKQorICAg
IHNtYXJ0RGF0YS0+ZnJhbWUtPmNyZWF0ZVZpZXcoc2l6ZSwgYmFja2dyb3VuZCwgIWFscGhhLCBX
ZWJDb3JlOjpJbnRTaXplKCksIGZhbHNlKTsKKyAgICBpZiAoIXNtYXJ0RGF0YS0+ZnJhbWUtPnZp
ZXcoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgY29uc3QgY2hhciogdGhlbWUgPSBld2tfdmll
d190aGVtZV9nZXQodmlldyk7Ci0gICAgc2QtPmZyYW1lLT52aWV3KCktPnNldEVkamVUaGVtZSh0
aGVtZSk7Ci0gICAgc2QtPmZyYW1lLT52aWV3KCktPnNldEV2YXNPYmplY3QoZXdrRnJhbWUpOwor
ICAgIHNtYXJ0RGF0YS0+ZnJhbWUtPnZpZXcoKS0+c2V0RWRqZVRoZW1lKHRoZW1lKTsKKyAgICBz
bWFydERhdGEtPmZyYW1lLT52aWV3KCktPnNldEV2YXNPYmplY3QoZXdrRnJhbWUpOwogfQogCiBz
c2l6ZV90IGV3a19mcmFtZV9zb3VyY2VfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSwg
Y2hhcioqIGZyYW1lU291cmNlKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3
a0ZyYW1lLCBzZCwgLTEpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+
ZnJhbWUsIC0xKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1l
LT5kb2N1bWVudCgpLCAtMSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJh
bWUsIHNtYXJ0RGF0YSwgLTEpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChz
bWFydERhdGEtPmZyYW1lLCAtMSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFM
KHNtYXJ0RGF0YS0+ZnJhbWUtPmRvY3VtZW50KCksIC0xKTsKICAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTl9WQUwoZnJhbWVTb3VyY2UsIC0xKTsKIAogICAgIFdURjo6U3RyaW5nIHNvdXJj
ZTsKICAgICAqZnJhbWVTb3VyY2UgPSAwOyAvLyBTYXZlcyAwIHRvIHBvaW50ZXIgdW50aWwgaXQn
cyBub3QgYWxsb2NhdGVkLgogCi0gICAgaWYgKCFzZC0+ZnJhbWUtPmRvY3VtZW50KCktPmlzSFRN
TERvY3VtZW50KCkpIHsKKyAgICBpZiAoIXNtYXJ0RGF0YS0+ZnJhbWUtPmRvY3VtZW50KCktPmlz
SFRNTERvY3VtZW50KCkpIHsKICAgICAgICAgLy8gRklYTUU6IFN1cHBvcnQgb3RoZXJzIGRvY3Vt
ZW50cy4KICAgICAgICAgV1JOKCJPbmx5IEhUTUwgZG9jdW1lbnRzIGFyZSBzdXBwb3J0ZWQiKTsK
ICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIAogICAgIC8vIExvb2sgZm9yIDxodG1sPiB0YWcu
IElmIGl0IGV4aXN0cywgdGhlIG5vZGUgY29udGF0aW5zIGFsbCBkb2N1bWVudCdzIHNvdXJjZS4K
LSAgICBXZWJDb3JlOjpOb2RlKiBkb2N1bWVudE5vZGUgPSBzZC0+ZnJhbWUtPmRvY3VtZW50KCkt
PmRvY3VtZW50RWxlbWVudCgpOworICAgIFdlYkNvcmU6Ok5vZGUqIGRvY3VtZW50Tm9kZSA9IHNt
YXJ0RGF0YS0+ZnJhbWUtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpOwogICAgIGlmIChk
b2N1bWVudE5vZGUpCiAgICAgICAgIGZvciAoV2ViQ29yZTo6Tm9kZSogbm9kZSA9IGRvY3VtZW50
Tm9kZS0+Zmlyc3RDaGlsZCgpOyBub2RlOyBub2RlID0gbm9kZS0+cGFyZW50RWxlbWVudCgpKSB7
CiAgICAgICAgICAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShXZWJDb3JlOjpIVE1MTmFtZXM6Omh0
bWxUYWcpKSB7CkBAIC0xNDk4LDM2ICsxNDk4LDM2IEBAIHNzaXplX3QgZXdrX2ZyYW1lX3NvdXJj
ZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBjaGFyKiogZnJhbWVTb3VyY2UpCiAK
ICAgICAvLyBUcnkgdG8gZ2V0IDxoZWFkPiBhbmQgPGJvZHk+IHRhZ3MgaWYgPGh0bWw+IHRhZyB3
YXMgbm90IGZvdW5kLgogICAgIGlmIChzb3VyY2UuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGlmIChz
ZC0+ZnJhbWUtPmRvY3VtZW50KCktPmhlYWQoKSkKLSAgICAgICAgICAgIHNvdXJjZSA9IHNkLT5m
cmFtZS0+ZG9jdW1lbnQoKS0+aGVhZCgpLT5vdXRlckhUTUwoKTsKKyAgICAgICAgaWYgKHNtYXJ0
RGF0YS0+ZnJhbWUtPmRvY3VtZW50KCktPmhlYWQoKSkKKyAgICAgICAgICAgIHNvdXJjZSA9IHNt
YXJ0RGF0YS0+ZnJhbWUtPmRvY3VtZW50KCktPmhlYWQoKS0+b3V0ZXJIVE1MKCk7CiAKLSAgICAg
ICAgaWYgKHNkLT5mcmFtZS0+ZG9jdW1lbnQoKS0+Ym9keSgpKQotICAgICAgICAgICAgc291cmNl
ICs9IHNkLT5mcmFtZS0+ZG9jdW1lbnQoKS0+Ym9keSgpLT5vdXRlckhUTUwoKTsKKyAgICAgICAg
aWYgKHNtYXJ0RGF0YS0+ZnJhbWUtPmRvY3VtZW50KCktPmJvZHkoKSkKKyAgICAgICAgICAgIHNv
dXJjZSArPSBzbWFydERhdGEtPmZyYW1lLT5kb2N1bWVudCgpLT5ib2R5KCktPm91dGVySFRNTCgp
OwogICAgIH0KIAotICAgIHNpemVfdCBzb3VyY2VfbGVuZ3RoID0gc3RybGVuKHNvdXJjZS51dGY4
KCkuZGF0YSgpKTsKLSAgICAqZnJhbWVTb3VyY2UgPSBzdGF0aWNfY2FzdDxjaGFyKj4obWFsbG9j
KHNvdXJjZV9sZW5ndGggKyAxKSk7CisgICAgc2l6ZV90IHNvdXJjZUxlbmd0aCA9IHN0cmxlbihz
b3VyY2UudXRmOCgpLmRhdGEoKSk7CisgICAgKmZyYW1lU291cmNlID0gc3RhdGljX2Nhc3Q8Y2hh
cio+KG1hbGxvYyhzb3VyY2VMZW5ndGggKyAxKSk7CiAgICAgaWYgKCEqZnJhbWVTb3VyY2UpIHsK
ICAgICAgICAgQ1JJVElDQUwoIkNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkuIik7CiAgICAgICAg
IHJldHVybiAtMTsKICAgICB9CiAKLSAgICBzdHJuY3B5KCpmcmFtZVNvdXJjZSwgc291cmNlLnV0
ZjgoKS5kYXRhKCksIHNvdXJjZV9sZW5ndGgpOwotICAgICgqZnJhbWVTb3VyY2UpW3NvdXJjZV9s
ZW5ndGhdID0gJ1wwJzsKKyAgICBzdHJuY3B5KCpmcmFtZVNvdXJjZSwgc291cmNlLnV0ZjgoKS5k
YXRhKCksIHNvdXJjZUxlbmd0aCk7CisgICAgKCpmcmFtZVNvdXJjZSlbc291cmNlTGVuZ3RoXSA9
ICdcMCc7CiAKLSAgICByZXR1cm4gc291cmNlX2xlbmd0aDsKKyAgICByZXR1cm4gc291cmNlTGVu
Z3RoOwogfQogCiBFaW5hX0xpc3QqIGV3a19mcmFtZV9yZXNvdXJjZXNfbG9jYXRpb25fZ2V0KGNv
bnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JF
VFVSTihld2tGcmFtZSwgc2QsIDApOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZB
TChzZC0+ZnJhbWUsIDApOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+
ZnJhbWUtPmRvY3VtZW50KCksIDApOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3
a0ZyYW1lLCBzbWFydERhdGEsIDApOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZB
TChzbWFydERhdGEtPmZyYW1lLCAwKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9W
QUwoc21hcnREYXRhLT5mcmFtZS0+ZG9jdW1lbnQoKSwgMCk7CiAKICAgICBFaW5hX0xpc3QqIGxp
c3RPZkltYWdlc0xvY2F0aW9uID0gMDsKIAogICAgIC8vIEdldCBzcmMgYXR0aWJ1dGUgb2YgaW1h
Z2VzIGFuZCBzYXZlcyB0aGVtIHRvIHRoZSBFaW5hX0xpc3QuCi0gICAgUmVmUHRyPFdlYkNvcmU6
OkhUTUxDb2xsZWN0aW9uPiBpbWFnZXMgPSBzZC0+ZnJhbWUtPmRvY3VtZW50KCktPmltYWdlcygp
OworICAgIFJlZlB0cjxXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbj4gaW1hZ2VzID0gc21hcnREYXRh
LT5mcmFtZS0+ZG9jdW1lbnQoKS0+aW1hZ2VzKCk7CiAgICAgZm9yIChzaXplX3QgaW5kZXggPSAw
OyBpbmRleCA8IGltYWdlcy0+bGVuZ3RoKCk7ICsraW5kZXgpIHsKICAgICAgICAgV2ViQ29yZTo6
SFRNTEltYWdlRWxlbWVudCogaW1hZ2VFbGVtZW50ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRN
TEltYWdlRWxlbWVudCo+KGltYWdlcy0+aXRlbShpbmRleCkpOwogICAgICAgICBpZiAoIWltYWdl
RWxlbWVudCB8fCBpbWFnZUVsZW1lbnQtPnNyYygpLmlzTnVsbCgpIHx8IGltYWdlRWxlbWVudC0+
c3JjKCkuaXNFbXB0eSgpKQpAQCAtMTU2NCwxMyArMTU2NCwxMyBAQCBvdXRfb2ZfbWVtb3J5X2hh
bmRsZXI6CiAKIGNoYXIqIGV3a19mcmFtZV9wbGFpbl90ZXh0X2dldChjb25zdCBFdmFzX09iamVj
dCogZXdrRnJhbWUpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUs
IHNkLCAwKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCAw
KTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRhLCAw
KTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5mcmFtZSwg
MCk7CiAKLSAgICBpZiAoIXNkLT5mcmFtZS0+ZG9jdW1lbnQoKSkKKyAgICBpZiAoIXNtYXJ0RGF0
YS0+ZnJhbWUtPmRvY3VtZW50KCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgV2ViQ29yZTo6
RWxlbWVudCogZG9jdW1lbnRFbGVtZW50ID0gc2QtPmZyYW1lLT5kb2N1bWVudCgpLT5kb2N1bWVu
dEVsZW1lbnQoKTsKKyAgICBXZWJDb3JlOjpFbGVtZW50KiBkb2N1bWVudEVsZW1lbnQgPSBzbWFy
dERhdGEtPmZyYW1lLT5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKTsKIAogICAgIGlmICgh
ZG9jdW1lbnRFbGVtZW50KQogICAgICAgICByZXR1cm4gMDsKQEAgLTE2MDksOSArMTYwOSw5IEBA
IEVpbmFfQm9vbCBld2tfZnJhbWVfdXJpX2NoYW5nZWQoRXZhc19PYmplY3QqIGV3a0ZyYW1lKQog
dm9pZCBld2tfZnJhbWVfZm9yY2VfbGF5b3V0KEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsKICAg
ICBEQkcoImV3a0ZyYW1lPSVwIiwgZXdrRnJhbWUpOwotICAgIEVXS19GUkFNRV9TRF9HRVRfT1Jf
UkVUVVJOKGV3a0ZyYW1lLCBzZCk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2Qt
PmZyYW1lKTsKLSAgICBXZWJDb3JlOjpGcmFtZVZpZXcqIHZpZXcgPSBzZC0+ZnJhbWUtPnZpZXco
KTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRhKTsK
KyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmZyYW1lKTsKKyAgICBX
ZWJDb3JlOjpGcmFtZVZpZXcqIHZpZXcgPSBzbWFydERhdGEtPmZyYW1lLT52aWV3KCk7CiAgICAg
aWYgKHZpZXcpCiAgICAgICAgIHZpZXctPmZvcmNlTGF5b3V0KHRydWUpOwogfQpAQCAtMTYzMCw3
ICsxNjMwLDcgQEAgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OldpZGdldD4gZXdrX2ZyYW1lX3Bs
dWdpbl9jcmVhdGUoRXZhc19PYmplY3QqIGV3a0ZyYW1lLAogICogQGludGVybmFsCiAgKiBSZXBv
cnRzIHRoYXQgZWRpdG9yIGNsaWVudCBzZWxlY3Rpb24gd2FzIGNoYW5nZWQuCiAgKgotICogQHBh
cmFtIG8gRnJhbWUKKyAqIEBwYXJhbSBld2tGcmFtZSBGcmFtZQogICoKICAqIEVtaXRzIHNpZ25h
bDogImVkaXRvcmNsaWVudHNlbGVjdGlvbixjaGFuZ2VkIiB3aXRoIG5vIHBhcmFtZXRlcnMuCiAg
Ki8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfaGlzdG9yeS5jcHAgYi9T
b3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2hpc3RvcnkuY3BwCmluZGV4IDA2ZTIzNjkuLmI1NThj
NmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfaGlzdG9yeS5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19oaXN0b3J5LmNwcApAQCAtNTcsOSArNTcsOSBA
QCBzdHJ1Y3QgX0V3a19IaXN0b3J5X0l0ZW0gewogICAgIFdlYkNvcmU6Okhpc3RvcnlJdGVtKiBj
b3JlOwogCiAgICAgY29uc3QgY2hhciogdGl0bGU7Ci0gICAgY29uc3QgY2hhciogYWx0ZXJuYXRl
X3RpdGxlOworICAgIGNvbnN0IGNoYXIqIGFsdGVybmF0ZVRpdGxlOwogICAgIGNvbnN0IGNoYXIq
IHVyaTsKLSAgICBjb25zdCBjaGFyKiBvcmlnaW5hbF91cmk7CisgICAgY29uc3QgY2hhciogb3Jp
Z2luYWxVcmk7CiB9OwogCiAjZGVmaW5lIEVXS19ISVNUT1JZX0lURU1fQ09SRV9HRVRfT1JfUkVU
VVJOKGl0ZW0sIGNvcmVfLCAuLi4pIFwKQEAgLTk3LDE3ICs5NywxNyBAQCBzdGF0aWMgaW5saW5l
IEV3a19IaXN0b3J5X0l0ZW0qIF9ld2tfaGlzdG9yeV9pdGVtX25ldyhXZWJDb3JlOjpIaXN0b3J5
SXRlbSogY29yZQogCiBzdGF0aWMgaW5saW5lIEVpbmFfTGlzdCogX2V3a19oaXN0b3J5X2l0ZW1f
bGlzdF9nZXQoY29uc3QgV2ViQ29yZTo6SGlzdG9yeUl0ZW1WZWN0b3ImIGNvcmVJdGVtcykKIHsK
LSAgICBFaW5hX0xpc3QqIHJldCA9IDA7Ci0gICAgdW5zaWduZWQgaW50IGksIHNpemU7CisgICAg
RWluYV9MaXN0KiByZXN1bHQgPSAwOworICAgIHVuc2lnbmVkIGludCBzaXplOwogCiAgICAgc2l6
ZSA9IGNvcmVJdGVtcy5zaXplKCk7Ci0gICAgZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgewor
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CiAgICAgICAgIEV3a19IaXN0b3J5
X0l0ZW0qIGl0ZW0gPSBfZXdrX2hpc3RvcnlfaXRlbV9uZXcoY29yZUl0ZW1zW2ldLmdldCgpKTsK
ICAgICAgICAgaWYgKGl0ZW0pCi0gICAgICAgICAgICByZXQgPSBlaW5hX2xpc3RfYXBwZW5kKHJl
dCwgaXRlbSk7CisgICAgICAgICAgICByZXN1bHQgPSBlaW5hX2xpc3RfYXBwZW5kKHJlc3VsdCwg
aXRlbSk7CiAgICAgfQogCi0gICAgcmV0dXJuIHJldDsKKyAgICByZXR1cm4gcmVzdWx0OwogfQog
CiBFaW5hX0Jvb2wgZXdrX2hpc3RvcnlfZm9yd2FyZChFd2tfSGlzdG9yeSogaGlzdG9yeSkKQEAg
LTI2MCw5ICsyNjAsOSBAQCB2b2lkIGV3a19oaXN0b3J5X2l0ZW1fZnJlZShFd2tfSGlzdG9yeV9J
dGVtKiBpdGVtKQogCiB2b2lkIGV3a19oaXN0b3J5X2l0ZW1fbGlzdF9mcmVlKEVpbmFfTGlzdCog
aGlzdG9yeV9pdGVtcykKIHsKLSAgICB2b2lkKiBkOwotICAgIEVJTkFfTElTVF9GUkVFKGhpc3Rv
cnlfaXRlbXMsIGQpIHsKLSAgICAgICAgRXdrX0hpc3RvcnlfSXRlbSogaXRlbSA9IChFd2tfSGlz
dG9yeV9JdGVtKilkOworICAgIHZvaWQqIGRlbGV0ZUl0ZW07CisgICAgRUlOQV9MSVNUX0ZSRUUo
aGlzdG9yeV9pdGVtcywgZGVsZXRlSXRlbSkgeworICAgICAgICBFd2tfSGlzdG9yeV9JdGVtKiBp
dGVtID0gKEV3a19IaXN0b3J5X0l0ZW0qKWRlbGV0ZUl0ZW07CiAgICAgICAgIF9ld2tfaGlzdG9y
eV9pdGVtX2ZyZWUoaXRlbSwgaXRlbS0+Y29yZSk7CiAgICAgfQogfQpAQCAtMjcxLDI1ICsyNzEs
MjUgQEAgY29uc3QgY2hhciogZXdrX2hpc3RvcnlfaXRlbV90aXRsZV9nZXQoY29uc3QgRXdrX0hp
c3RvcnlfSXRlbSogaXRlbSkKIHsKICAgICBFV0tfSElTVE9SWV9JVEVNX0NPUkVfR0VUX09SX1JF
VFVSTihpdGVtLCBjb3JlLCAwKTsKICAgICAvLyBoaWRlIHRoZSBmb2xsb3dpbmcgb3B0aW16YXRp
b24gZnJvbSBvdXRzaWRlCi0gICAgRXdrX0hpc3RvcnlfSXRlbSogaSA9IGNvbnN0X2Nhc3Q8RXdr
X0hpc3RvcnlfSXRlbSo+KGl0ZW0pOwotICAgIGVpbmFfc3RyaW5nc2hhcmVfcmVwbGFjZSgmaS0+
dGl0bGUsIGNvcmUtPnRpdGxlKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgcmV0dXJuIGktPnRpdGxl
OworICAgIEV3a19IaXN0b3J5X0l0ZW0qIGl0ZW0xID0gY29uc3RfY2FzdDxFd2tfSGlzdG9yeV9J
dGVtKj4oaXRlbSk7CisgICAgZWluYV9zdHJpbmdzaGFyZV9yZXBsYWNlKCZpdGVtMS0+dGl0bGUs
IGNvcmUtPnRpdGxlKCkudXRmOCgpLmRhdGEoKSk7CisgICAgcmV0dXJuIGl0ZW0xLT50aXRsZTsK
IH0KIAogY29uc3QgY2hhciogZXdrX2hpc3RvcnlfaXRlbV90aXRsZV9hbHRlcm5hdGVfZ2V0KGNv
bnN0IEV3a19IaXN0b3J5X0l0ZW0qIGl0ZW0pCiB7CiAgICAgRVdLX0hJU1RPUllfSVRFTV9DT1JF
X0dFVF9PUl9SRVRVUk4oaXRlbSwgY29yZSwgMCk7CiAgICAgLy8gaGlkZSB0aGUgZm9sbG93aW5n
IG9wdGltemF0aW9uIGZyb20gb3V0c2lkZQotICAgIEV3a19IaXN0b3J5X0l0ZW0qIGkgPSBjb25z
dF9jYXN0PEV3a19IaXN0b3J5X0l0ZW0qPihpdGVtKTsKLSAgICBlaW5hX3N0cmluZ3NoYXJlX3Jl
cGxhY2UoJmktPmFsdGVybmF0ZV90aXRsZSwKKyAgICBFd2tfSGlzdG9yeV9JdGVtKiBpdGVtMSA9
IGNvbnN0X2Nhc3Q8RXdrX0hpc3RvcnlfSXRlbSo+KGl0ZW0pOworICAgIGVpbmFfc3RyaW5nc2hh
cmVfcmVwbGFjZSgmaXRlbTEtPmFsdGVybmF0ZVRpdGxlLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb3JlLT5hbHRlcm5hdGVUaXRsZSgpLnV0ZjgoKS5kYXRhKCkpOwotICAgIHJldHVy
biBpLT5hbHRlcm5hdGVfdGl0bGU7CisgICAgcmV0dXJuIGl0ZW0xLT5hbHRlcm5hdGVUaXRsZTsK
IH0KIAogdm9pZCBld2tfaGlzdG9yeV9pdGVtX3RpdGxlX2FsdGVybmF0ZV9zZXQoRXdrX0hpc3Rv
cnlfSXRlbSogaXRlbSwgY29uc3QgY2hhciogdGl0bGUpCiB7CiAgICAgRVdLX0hJU1RPUllfSVRF
TV9DT1JFX0dFVF9PUl9SRVRVUk4oaXRlbSwgY29yZSk7Ci0gICAgaWYgKCFlaW5hX3N0cmluZ3No
YXJlX3JlcGxhY2UoJml0ZW0tPmFsdGVybmF0ZV90aXRsZSwgdGl0bGUpKQorICAgIGlmICghZWlu
YV9zdHJpbmdzaGFyZV9yZXBsYWNlKCZpdGVtLT5hbHRlcm5hdGVUaXRsZSwgdGl0bGUpKQogICAg
ICAgICByZXR1cm47CiAgICAgY29yZS0+c2V0QWx0ZXJuYXRlVGl0bGUoV1RGOjpTdHJpbmc6OmZy
b21VVEY4KHRpdGxlKSk7CiB9CkBAIC0zMDgsOSArMzA4LDkgQEAgY29uc3QgY2hhciogZXdrX2hp
c3RvcnlfaXRlbV91cmlfb3JpZ2luYWxfZ2V0KGNvbnN0IEV3a19IaXN0b3J5X0l0ZW0qIGl0ZW0p
CiAgICAgRVdLX0hJU1RPUllfSVRFTV9DT1JFX0dFVF9PUl9SRVRVUk4oaXRlbSwgY29yZSwgMCk7
CiAgICAgLy8gaGlkZSB0aGUgZm9sbG93aW5nIG9wdGltemF0aW9uIGZyb20gb3V0c2lkZQogICAg
IEV3a19IaXN0b3J5X0l0ZW0qIGkgPSBjb25zdF9jYXN0PEV3a19IaXN0b3J5X0l0ZW0qPihpdGVt
KTsKLSAgICBlaW5hX3N0cmluZ3NoYXJlX3JlcGxhY2UoJmktPm9yaWdpbmFsX3VyaSwKKyAgICBl
aW5hX3N0cmluZ3NoYXJlX3JlcGxhY2UoJmktPm9yaWdpbmFsVXJpLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb3JlLT5vcmlnaW5hbFVSTFN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwot
ICAgIHJldHVybiBpLT5vcmlnaW5hbF91cmk7CisgICAgcmV0dXJuIGktPm9yaWdpbmFsVXJpOwog
fQogCiBkb3VibGUgZXdrX2hpc3RvcnlfaXRlbV90aW1lX2xhc3RfdmlzaXRlZF9nZXQoY29uc3Qg
RXdrX0hpc3RvcnlfSXRlbSogaXRlbSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3
ay9ld2tfanMuY3BwIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19qcy5jcHAKaW5kZXggNDJj
ZmRmZS4uZjViM2FlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19qcy5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19qcy5jcHAKQEAgLTg1LDEwICs4NSwx
MCBAQCBzdGF0aWMgRWluYV9Cb29sIGV3a19qc192YXJpYW50X3RvX25wdmFyaWFudChjb25zdCBF
d2tfSlNfVmFyaWFudCogZGF0YSwgTlBWYXJpYQogLy8gVGhlc2UgbWV0aG9kcyBhcmUgdXNlZCBi
eSBOUEFJLCB0aGF0cyB0aGUgcmVhc29uIHRvIHVzZSBib29sIGluc3RlYWQgb2YgRWluYV9Cb29s
Lgogc3RhdGljIGJvb2wgZXdrX2pzX3Byb3BlcnR5X2hhcyhOUE9iamVjdCogbnBPYmplY3QsIE5Q
SWRlbnRpZmllciBuYW1lKQogewotICAgIEV3a19KU19PYmplY3QqIG9iaiA9IHJlaW50ZXJwcmV0
X2Nhc3Q8RXdrX0pTX09iamVjdCo+KG5wT2JqZWN0KTsKKyAgICBFd2tfSlNfT2JqZWN0KiBvYmpl
Y3QgPSByZWludGVycHJldF9jYXN0PEV3a19KU19PYmplY3QqPihucE9iamVjdCk7CiAKICAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwobnBPYmplY3QsIGZhbHNlKTsKLSAgICBFSU5B
X01BR0lDX0NIRUNLX09SX1JFVFVSTihvYmosIGZhbHNlKTsKKyAgICBFSU5BX01BR0lDX0NIRUNL
X09SX1JFVFVSTihvYmplY3QsIGZhbHNlKTsKIAogICAgIGlmICghX05QTl9JZGVudGlmaWVySXNT
dHJpbmcobmFtZSkpIHsKICAgICAgICAgRVJSKCJpbnQgTlBJZGVudGlmaWVyIGlzIG5vdCBzdXBw
b3J0ZWQuIik7CkBAIC05Niw3ICs5Niw3IEBAIHN0YXRpYyBib29sIGV3a19qc19wcm9wZXJ0eV9o
YXMoTlBPYmplY3QqIG5wT2JqZWN0LCBOUElkZW50aWZpZXIgbmFtZSkKICAgICB9CiAKICAgICBj
aGFyKiBwcm9wX25hbWUgPSBfTlBOX1VURjhGcm9tSWRlbnRpZmllcihuYW1lKTsKLSAgICBib29s
IGZhaWwgPSBlaW5hX2hhc2hfZmluZChvYmotPnByb3BlcnRpZXMsIHByb3BfbmFtZSk7IC8vIEZJ
WE1FOiBzaG91bGQgc2VhcmNoIG1ldGhvZHMgdG9vPworICAgIGJvb2wgZmFpbCA9IGVpbmFfaGFz
aF9maW5kKG9iamVjdC0+cHJvcGVydGllcywgcHJvcF9uYW1lKTsgLy8gRklYTUU6IHNob3VsZCBz
ZWFyY2ggbWV0aG9kcyB0b28/CiAgICAgZnJlZShwcm9wX25hbWUpOwogCiAgICAgcmV0dXJuIGZh
aWw7CkBAIC0xMDQsMTMgKzEwNCwxMyBAQCBzdGF0aWMgYm9vbCBld2tfanNfcHJvcGVydHlfaGFz
KE5QT2JqZWN0KiBucE9iamVjdCwgTlBJZGVudGlmaWVyIG5hbWUpCiAKIHN0YXRpYyBib29sIGV3
a19qc19wcm9wZXJ0eV9nZXQoTlBPYmplY3QqIG5wT2JqZWN0LCBOUElkZW50aWZpZXIgbmFtZSwg
TlBWYXJpYW50KiByZXN1bHQpCiB7Ci0gICAgRXdrX0pTX09iamVjdCogb2JqID0gcmVpbnRlcnBy
ZXRfY2FzdDxFd2tfSlNfT2JqZWN0Kj4obnBPYmplY3QpOworICAgIEV3a19KU19PYmplY3QqIG9i
amVjdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8RXdrX0pTX09iamVjdCo+KG5wT2JqZWN0KTsKICAgICBF
d2tfSlNfVmFyaWFudCogdmFsdWU7CiAgICAgRXdrX0pTX1Byb3BlcnR5KiBwcm9wOwogICAgIGJv
b2wgZmFpbCA9IGZhbHNlOwogCiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKG5w
T2JqZWN0LCBmYWxzZSk7Ci0gICAgRUlOQV9NQUdJQ19DSEVDS19PUl9SRVRVUk4ob2JqLCBmYWxz
ZSk7CisgICAgRUlOQV9NQUdJQ19DSEVDS19PUl9SRVRVUk4ob2JqZWN0LCBmYWxzZSk7CiAKICAg
ICBpZiAoIV9OUE5fSWRlbnRpZmllcklzU3RyaW5nKG5hbWUpKSB7CiAgICAgICAgIEVSUigiaW50
IE5QSWRlbnRpZmllciBpcyBub3Qgc3VwcG9ydGVkLiIpOwpAQCAtMTIzLDE5ICsxMjMsMTkgQEAg
c3RhdGljIGJvb2wgZXdrX2pzX3Byb3BlcnR5X2dldChOUE9iamVjdCogbnBPYmplY3QsIE5QSWRl
bnRpZmllciBuYW1lLCBOUFZhcmlhbnQKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAot
ICAgIHByb3AgPSBzdGF0aWNfY2FzdDxFd2tfSlNfUHJvcGVydHkqPihlaW5hX2hhc2hfZmluZChv
YmotPmNscy0+cHJvcGVydGllcywgbmFtZSkpOworICAgIHByb3AgPSBzdGF0aWNfY2FzdDxFd2tf
SlNfUHJvcGVydHkqPihlaW5hX2hhc2hfZmluZChvYmplY3QtPmNscy0+cHJvcGVydGllcywgbmFt
ZSkpOwogICAgIGlmIChwcm9wICYmIHByb3AtPmdldCkgeyAvLyBDbGFzcyBoYXMgcHJvcGVydHkg
YW5kIHByb3BlcnR5IGhhcyBnZXR0ZXIuCi0gICAgICAgIGZhaWwgPSBwcm9wLT5nZXQob2JqLCBw
cm9wLT5uYW1lLCB2YWx1ZSk7CisgICAgICAgIGZhaWwgPSBwcm9wLT5nZXQob2JqZWN0LCBwcm9w
LT5uYW1lLCB2YWx1ZSk7CiAgICAgICAgIGlmICghZmFpbCkKICAgICAgICAgICAgIGZhaWwgPSBl
d2tfanNfdmFyaWFudF90b19ucHZhcmlhbnQodmFsdWUsIHJlc3VsdCk7Ci0gICAgfSBlbHNlIGlm
IChvYmotPmNscy0+ZGVmYXVsdF9wcm9wLmdldCkgeyAvLyBEZWZhdWx0IGdldHRlciBleGlzdHMu
Ci0gICAgICAgIGZhaWwgPSBvYmotPmNscy0+ZGVmYXVsdF9wcm9wLmdldChvYmosIHByb3AtPm5h
bWUsIHZhbHVlKTsKKyAgICB9IGVsc2UgaWYgKG9iamVjdC0+Y2xzLT5kZWZhdWx0X3Byb3AuZ2V0
KSB7IC8vIERlZmF1bHQgZ2V0dGVyIGV4aXN0cy4KKyAgICAgICAgZmFpbCA9IG9iamVjdC0+Y2xz
LT5kZWZhdWx0X3Byb3AuZ2V0KG9iamVjdCwgcHJvcC0+bmFtZSwgdmFsdWUpOwogICAgICAgICBp
ZiAoIWZhaWwpCiAgICAgICAgICAgICBmYWlsID0gZXdrX2pzX3ZhcmlhbnRfdG9fbnB2YXJpYW50
KHZhbHVlLCByZXN1bHQpOwogICAgIH0gZWxzZSB7IC8vIEZhbGxiYWNrIHRvIG9iamVjdHMgaGFz
aCBtYXAuCiAgICAgICAgIGNoYXIqIHByb3BfbmFtZSA9IF9OUE5fVVRGOEZyb21JZGVudGlmaWVy
KG5hbWUpOwogICAgICAgICBmcmVlKHZhbHVlKTsKLSAgICAgICAgdmFsdWUgPSBzdGF0aWNfY2Fz
dDxFd2tfSlNfVmFyaWFudCo+KGVpbmFfaGFzaF9maW5kKG9iai0+cHJvcGVydGllcywgcHJvcF9u
YW1lKSk7CisgICAgICAgIHZhbHVlID0gc3RhdGljX2Nhc3Q8RXdrX0pTX1ZhcmlhbnQqPihlaW5h
X2hhc2hfZmluZChvYmplY3QtPnByb3BlcnRpZXMsIHByb3BfbmFtZSkpOwogICAgICAgICBmcmVl
KHByb3BfbmFtZSk7CiAgICAgICAgIGlmICh2YWx1ZSkKICAgICAgICAgICAgIHJldHVybiBld2tf
anNfdmFyaWFudF90b19ucHZhcmlhbnQodmFsdWUsIHJlc3VsdCk7CkBAIC0xNDcsMTMgKzE0Nywx
MyBAQCBzdGF0aWMgYm9vbCBld2tfanNfcHJvcGVydHlfZ2V0KE5QT2JqZWN0KiBucE9iamVjdCwg
TlBJZGVudGlmaWVyIG5hbWUsIE5QVmFyaWFudAogCiBzdGF0aWMgYm9vbCBld2tfanNfcHJvcGVy
dHlfc2V0KE5QT2JqZWN0KiBucE9iamVjdCwgTlBJZGVudGlmaWVyIG5hbWUsIGNvbnN0IE5QVmFy
aWFudCogbnBWYWx1ZSkKIHsKLSAgICBFd2tfSlNfT2JqZWN0KiBvYmogPSByZWludGVycHJldF9j
YXN0PEV3a19KU19PYmplY3QqPihucE9iamVjdCk7CisgICAgRXdrX0pTX09iamVjdCogb2JqZWN0
ID0gcmVpbnRlcnByZXRfY2FzdDxFd2tfSlNfT2JqZWN0Kj4obnBPYmplY3QpOwogICAgIEV3a19K
U19WYXJpYW50KiB2YWx1ZTsKICAgICBFd2tfSlNfUHJvcGVydHkqIHByb3A7CiAgICAgYm9vbCBm
YWlsID0gZmFsc2U7CiAKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwobnBPYmos
IGZhbHNlKTsKLSAgICBFSU5BX01BR0lDX0NIRUNLX09SX1JFVFVSTihvYmosIGZhbHNlKTsKKyAg
ICBFSU5BX01BR0lDX0NIRUNLX09SX1JFVFVSTihvYmplY3QsIGZhbHNlKTsKIAogICAgIGlmICgh
X05QTl9JZGVudGlmaWVySXNTdHJpbmcobmFtZSkpIHsKICAgICAgICAgRVJSKCJpbnQgTlBJZGVu
dGlmaWVyIGlzIG5vdCBzdXBwb3J0ZWQuIik7CkBAIC0xNjgsMTMgKzE2OCwxMyBAQCBzdGF0aWMg
Ym9vbCBld2tfanNfcHJvcGVydHlfc2V0KE5QT2JqZWN0KiBucE9iamVjdCwgTlBJZGVudGlmaWVy
IG5hbWUsIGNvbnN0IE5QVgogCiAgICAgZXdrX2pzX25wdmFyaWFudF90b192YXJpYW50KHZhbHVl
LCBucFZhbHVlKTsKICAgICBjaGFyKiBwcm9wX25hbWUgPSBfTlBOX1VURjhGcm9tSWRlbnRpZmll
cihuYW1lKTsKLSAgICBwcm9wID0gc3RhdGljX2Nhc3Q8RXdrX0pTX1Byb3BlcnR5Kj4oZWluYV9o
YXNoX2ZpbmQob2JqLT5jbHMtPnByb3BlcnRpZXMsIHByb3BfbmFtZSkpOworICAgIHByb3AgPSBz
dGF0aWNfY2FzdDxFd2tfSlNfUHJvcGVydHkqPihlaW5hX2hhc2hfZmluZChvYmplY3QtPmNscy0+
cHJvcGVydGllcywgcHJvcF9uYW1lKSk7CiAgICAgaWYgKHByb3AgJiYgcHJvcC0+c2V0KQotICAg
ICAgICBmYWlsID0gcHJvcC0+c2V0KG9iaiwgcHJvcC0+bmFtZSwgdmFsdWUpOyAvLyBDbGFzcyBo
YXMgcHJvcGVydHkgYW5kIHByb3BlcnR5IGhhcyBzZXR0ZXIuCi0gICAgZWxzZSBpZiAob2JqLT5j
bHMtPmRlZmF1bHRfcHJvcC5zZXQpCi0gICAgICAgIGZhaWwgPSBvYmotPmNscy0+ZGVmYXVsdF9w
cm9wLnNldChvYmosIHByb3BfbmFtZSwgdmFsdWUpOyAvLyBEZWZhdWx0IGdldHRlciBleGlzdHMu
CisgICAgICAgIGZhaWwgPSBwcm9wLT5zZXQob2JqZWN0LCBwcm9wLT5uYW1lLCB2YWx1ZSk7IC8v
IENsYXNzIGhhcyBwcm9wZXJ0eSBhbmQgcHJvcGVydHkgaGFzIHNldHRlci4KKyAgICBlbHNlIGlm
IChvYmplY3QtPmNscy0+ZGVmYXVsdF9wcm9wLnNldCkKKyAgICAgICAgZmFpbCA9IG9iamVjdC0+
Y2xzLT5kZWZhdWx0X3Byb3Auc2V0KG9iamVjdCwgcHJvcF9uYW1lLCB2YWx1ZSk7IC8vIERlZmF1
bHQgZ2V0dGVyIGV4aXN0cy4KICAgICBlbHNlIHsgLy8gRmFsbGJhY2sgdG8gb2JqZWN0cyBoYXNo
IG1hcC4KLSAgICAgICAgdm9pZCogb2xkID0gZWluYV9oYXNoX3NldChvYmotPnByb3BlcnRpZXMs
IHByb3BfbmFtZSwgdmFsdWUpOworICAgICAgICB2b2lkKiBvbGQgPSBlaW5hX2hhc2hfc2V0KG9i
amVjdC0+cHJvcGVydGllcywgcHJvcF9uYW1lLCB2YWx1ZSk7CiAgICAgICAgIGZyZWUob2xkKTsK
ICAgICAgICAgZmFpbCA9IHRydWU7CiAgICAgfQpAQCAtMTg1LDEyICsxODUsMTIgQEAgc3RhdGlj
IGJvb2wgZXdrX2pzX3Byb3BlcnR5X3NldChOUE9iamVjdCogbnBPYmplY3QsIE5QSWRlbnRpZmll
ciBuYW1lLCBjb25zdCBOUFYKIAogc3RhdGljIGJvb2wgZXdrX2pzX3Byb3BlcnR5X3JlbW92ZShO
UE9iamVjdCogbnBPYmplY3QsIE5QSWRlbnRpZmllciBuYW1lKQogewotICAgIEV3a19KU19PYmpl
Y3QqIG9iaiA9IHJlaW50ZXJwcmV0X2Nhc3Q8RXdrX0pTX09iamVjdCo+KG5wT2JqZWN0KTsKKyAg
ICBFd2tfSlNfT2JqZWN0KiBvYmplY3QgPSByZWludGVycHJldF9jYXN0PEV3a19KU19PYmplY3Qq
PihucE9iamVjdCk7CiAgICAgRXdrX0pTX1Byb3BlcnR5KiBwcm9wOwogICAgIGJvb2wgZmFpbCA9
IGZhbHNlOwogCiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKG5wT2JqZWN0LCBm
YWxzZSk7Ci0gICAgRUlOQV9NQUdJQ19DSEVDS19PUl9SRVRVUk4ob2JqLCBmYWxzZSk7CisgICAg
RUlOQV9NQUdJQ19DSEVDS19PUl9SRVRVUk4ob2JqZWN0LCBmYWxzZSk7CiAKICAgICBpZiAoIV9O
UE5fSWRlbnRpZmllcklzU3RyaW5nKG5hbWUpKSB7CiAgICAgICAgIEVSUigiaW50IE5QSWRlbnRp
ZmllciBpcyBub3Qgc3VwcG9ydGVkLiIpOwpAQCAtMTk4LDEzICsxOTgsMTMgQEAgc3RhdGljIGJv
b2wgZXdrX2pzX3Byb3BlcnR5X3JlbW92ZShOUE9iamVjdCogbnBPYmplY3QsIE5QSWRlbnRpZmll
ciBuYW1lKQogICAgIH0KIAogICAgIGNoYXIqIHByb3BfbmFtZSA9IF9OUE5fVVRGOEZyb21JZGVu
dGlmaWVyKG5hbWUpOwotICAgIHByb3AgPSBzdGF0aWNfY2FzdDxFd2tfSlNfUHJvcGVydHkqPihl
aW5hX2hhc2hfZmluZChvYmotPmNscy0+cHJvcGVydGllcywgcHJvcF9uYW1lKSk7CisgICAgcHJv
cCA9IHN0YXRpY19jYXN0PEV3a19KU19Qcm9wZXJ0eSo+KGVpbmFfaGFzaF9maW5kKG9iamVjdC0+
Y2xzLT5wcm9wZXJ0aWVzLCBwcm9wX25hbWUpKTsKICAgICBpZiAocHJvcCAmJiBwcm9wLT5kZWwp
Ci0gICAgICAgIGZhaWwgPSBwcm9wLT5kZWwob2JqLCBwcm9wLT5uYW1lKTsgLy8gQ2xhc3MgaGFz
IHByb3BlcnR5IGFuZCBwcm9wZXJ0eSBoYXMgZ2V0dGVyLgotICAgIGVsc2UgaWYgKG9iai0+Y2xz
LT5kZWZhdWx0X3Byb3AuZGVsKQotICAgICAgICBmYWlsID0gb2JqLT5jbHMtPmRlZmF1bHRfcHJv
cC5kZWwob2JqLCBwcm9wX25hbWUpOworICAgICAgICBmYWlsID0gcHJvcC0+ZGVsKG9iamVjdCwg
cHJvcC0+bmFtZSk7IC8vIENsYXNzIGhhcyBwcm9wZXJ0eSBhbmQgcHJvcGVydHkgaGFzIGdldHRl
ci4KKyAgICBlbHNlIGlmIChvYmplY3QtPmNscy0+ZGVmYXVsdF9wcm9wLmRlbCkKKyAgICAgICAg
ZmFpbCA9IG9iamVjdC0+Y2xzLT5kZWZhdWx0X3Byb3AuZGVsKG9iamVjdCwgcHJvcF9uYW1lKTsK
ICAgICBlbHNlCi0gICAgICAgIGZhaWwgPSBlaW5hX2hhc2hfZGVsKG9iai0+cHJvcGVydGllcywg
cHJvcF9uYW1lLCAwKTsKKyAgICAgICAgZmFpbCA9IGVpbmFfaGFzaF9kZWwob2JqZWN0LT5wcm9w
ZXJ0aWVzLCBwcm9wX25hbWUsIDApOwogCiAgICAgZnJlZShwcm9wX25hbWUpOwogICAgIHJldHVy
biBmYWlsOwpAQCAtMjEyLDIyICsyMTIsMjIgQEAgc3RhdGljIGJvb2wgZXdrX2pzX3Byb3BlcnR5
X3JlbW92ZShOUE9iamVjdCogbnBPYmplY3QsIE5QSWRlbnRpZmllciBuYW1lKQogCiBzdGF0aWMg
Ym9vbCBld2tfanNfcHJvcGVydGllc19lbnVtZXJhdGUoTlBPYmplY3QqIG5wT2JqZWN0LCBOUElk
ZW50aWZpZXIqKiB2YWx1ZSwgdWludDMyX3QqIGNvdW50KQogewotICAgIEV3a19KU19PYmplY3Qq
IG9iaiA9IHJlaW50ZXJwcmV0X2Nhc3Q8RXdrX0pTX09iamVjdCo+KG5wT2JqZWN0KTsKKyAgICBF
d2tfSlNfT2JqZWN0KiBvYmplY3QgPSByZWludGVycHJldF9jYXN0PEV3a19KU19PYmplY3QqPihu
cE9iamVjdCk7CiAgICAgRWluYV9JdGVyYXRvciogaXQ7CiAgICAgY2hhcioga2V5OwogICAgIGlu
dCBpID0gMDsKIAogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChucE9iamVjdCwg
ZmFsc2UpOwotICAgIEVJTkFfTUFHSUNfQ0hFQ0tfT1JfUkVUVVJOKG9iaiwgZmFsc2UpOworICAg
IEVJTkFfTUFHSUNfQ0hFQ0tfT1JfUkVUVVJOKG9iamVjdCwgZmFsc2UpOwogCi0gICAgKmNvdW50
ID0gZWluYV9oYXNoX3BvcHVsYXRpb24ob2JqLT5wcm9wZXJ0aWVzKTsKKyAgICAqY291bnQgPSBl
aW5hX2hhc2hfcG9wdWxhdGlvbihvYmplY3QtPnByb3BlcnRpZXMpOwogICAgICp2YWx1ZSA9IHN0
YXRpY19jYXN0PE5QSWRlbnRpZmllcio+KG1hbGxvYyhzaXplb2YoTlBJZGVudGlmaWVyKSAqICpj
b3VudCkpOwogICAgIGlmICghKnZhbHVlKSB7CiAgICAgICAgIEVSUigiQ291bGQgbm90IGFsbG9j
YXRlIG1lbW9yeSBmb3IgTlBJZGVudGlmaWVyIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9CiAKLSAgICBpdCA9IGVpbmFfaGFzaF9pdGVyYXRvcl9rZXlfbmV3KG9iai0+cHJvcGVydGll
cyk7CisgICAgaXQgPSBlaW5hX2hhc2hfaXRlcmF0b3Jfa2V5X25ldyhvYmplY3QtPnByb3BlcnRp
ZXMpOwogICAgIEVJTkFfSVRFUkFUT1JfRk9SRUFDSChpdCwga2V5KQogICAgICAgICAoKnZhbHVl
KVtpKytdID0gX05QTl9HZXRTdHJpbmdJZGVudGlmaWVyKGtleSk7CiAKQEAgLTIzNywzNCArMjM3
LDM0IEBAIHN0YXRpYyBib29sIGV3a19qc19wcm9wZXJ0aWVzX2VudW1lcmF0ZShOUE9iamVjdCog
bnBPYmplY3QsIE5QSWRlbnRpZmllcioqIHZhbHVlCiAKIHN0YXRpYyBib29sIGV3a19qc19tZXRo
b2RfaGFzKE5QT2JqZWN0KiBucE9iamVjdCwgTlBJZGVudGlmaWVyIG5hbWUpCiB7Ci0gICAgRXdr
X0pTX09iamVjdCogb2JqID0gcmVpbnRlcnByZXRfY2FzdDxFd2tfSlNfT2JqZWN0Kj4obnBPYmpl
Y3QpOworICAgIEV3a19KU19PYmplY3QqIG9iamVjdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8RXdrX0pT
X09iamVjdCo+KG5wT2JqZWN0KTsKIAogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZB
TChucE9iamVjdCwgZmFsc2UpOwotICAgIEVJTkFfTUFHSUNfQ0hFQ0tfT1JfUkVUVVJOKG9iaiwg
ZmFsc2UpOworICAgIEVJTkFfTUFHSUNfQ0hFQ0tfT1JfUkVUVVJOKG9iamVjdCwgZmFsc2UpOwog
CiAgICAgaWYgKCFfTlBOX0lkZW50aWZpZXJJc1N0cmluZyhuYW1lKSkgewogICAgICAgICBFUlIo
ImludCBOUElkZW50aWZpZXIgaXMgbm90IHN1cHBvcnRlZC4iKTsKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgIH0KLSAgICByZXR1cm4gZWluYV9oYXNoX2ZpbmQob2JqLT5jbHMtPm1ldGhvZHMs
IG5hbWUpOyAvLyBSZXR1cm5zIHBvaW50ZXIgaWYgZm91bmQodHJ1ZSksIDAoZmFsc2UpIG90aGVy
d2lzZS4KKyAgICByZXR1cm4gZWluYV9oYXNoX2ZpbmQob2JqZWN0LT5jbHMtPm1ldGhvZHMsIG5h
bWUpOyAvLyBSZXR1cm5zIHBvaW50ZXIgaWYgZm91bmQodHJ1ZSksIDAoZmFsc2UpIG90aGVyd2lz
ZS4KIH0KIAogc3RhdGljIGJvb2wgZXdrX2pzX21ldGhvZF9pbnZva2UoTlBPYmplY3QqIG5wT2Jq
ZWN0LCBOUElkZW50aWZpZXIgbmFtZSwgY29uc3QgTlBWYXJpYW50KiBucEFyZ3MsIHVpbnQzMl90
IG5wQXJnQ291bnQsIE5QVmFyaWFudCogcmVzdWx0KQogewotICAgIEV3a19KU19PYmplY3QqIG9i
aiA9IHJlaW50ZXJwcmV0X2Nhc3Q8RXdrX0pTX09iamVjdCo+KG5wT2JqZWN0KTsKKyAgICBFd2tf
SlNfT2JqZWN0KiBvYmplY3QgPSByZWludGVycHJldF9jYXN0PEV3a19KU19PYmplY3QqPihucE9i
amVjdCk7CiAgICAgRXdrX0pTX01ldGhvZCogbWV0aG9kOwogICAgIEV3a19KU19WYXJpYW50KiBh
cmdzOwogICAgIEV3a19KU19WYXJpYW50KiByZXRfdmFsOwogCiAgICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk5fVkFMKG5wT2JqZWN0LCBmYWxzZSk7Ci0gICAgRUlOQV9NQUdJQ19DSEVDS19P
Ul9SRVRVUk4ob2JqLCBmYWxzZSk7CisgICAgRUlOQV9NQUdJQ19DSEVDS19PUl9SRVRVUk4ob2Jq
ZWN0LCBmYWxzZSk7CiAKICAgICBpZiAoIV9OUE5fSWRlbnRpZmllcklzU3RyaW5nKG5hbWUpKSB7
CiAgICAgICAgIEVSUigiaW50IE5QSWRlbnRpZmllciBpcyBub3Qgc3VwcG9ydGVkLiIpOwogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgbWV0aG9kID0gc3RhdGljX2Nhc3Q8RXdr
X0pTX01ldGhvZCo+KGVpbmFfaGFzaF9maW5kKG9iai0+Y2xzLT5tZXRob2RzLCBuYW1lKSk7Cisg
ICAgbWV0aG9kID0gc3RhdGljX2Nhc3Q8RXdrX0pTX01ldGhvZCo+KGVpbmFfaGFzaF9maW5kKG9i
amVjdC0+Y2xzLT5tZXRob2RzLCBuYW1lKSk7CiAgICAgaWYgKCFtZXRob2QpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIApAQCAtMjc2LDcgKzI3Niw3IEBAIHN0YXRpYyBib29sIGV3a19qc19tZXRo
b2RfaW52b2tlKE5QT2JqZWN0KiBucE9iamVjdCwgTlBJZGVudGlmaWVyIG5hbWUsIGNvbnN0IE5Q
CiAKICAgICBmb3IgKHVpbnQzMl90IGkgPSAwOyBpIDwgbnBBcmdDb3VudDsgaSsrKQogICAgICAg
ICBld2tfanNfbnB2YXJpYW50X3RvX3ZhcmlhbnQoJmFyZ3NbaV0sICZucEFyZ3NbaV0pOwotICAg
IHJldF92YWwgPSBtZXRob2QtPmludm9rZShvYmosIGFyZ3MsIG5wQXJnQ291bnQpOworICAgIHJl
dF92YWwgPSBtZXRob2QtPmludm9rZShvYmplY3QsIGFyZ3MsIG5wQXJnQ291bnQpOwogICAgIGV3
a19qc192YXJpYW50X3RvX25wdmFyaWFudChyZXRfdmFsLCByZXN1bHQpOwogCiAgICAgZXdrX2pz
X3ZhcmlhbnRfZnJlZShyZXRfdmFsKTsKQEAgLTM5Myw3ICszOTMsNyBAQCBzdGF0aWMgRXdrX0pT
X09iamVjdCogZXdrX2pzX25wb2JqZWN0X3RvX29iamVjdChOUE9iamVjdCogbnBPYmplY3QpCiAg
ICAgTlBJZGVudGlmaWVyKiB2YWx1ZXM7CiAgICAgdWludDMyX3QgbnBfcHJvcHNfY291bnQ7CiAg
ICAgRXdrX0pTX0NsYXNzKiBjbHM7Ci0gICAgRXdrX0pTX09iamVjdCogb2JqOworICAgIEV3a19K
U19PYmplY3QqIG9iamVjdDsKICAgICBFaW5hX0l0ZXJhdG9yKiBpdDsKICAgICBFd2tfSlNfUHJv
cGVydHkqIHByb3A7CiAgICAgSmF2YVNjcmlwdE9iamVjdCoganNvOwpAQCAtNDM2LDQyICs0MzYs
NDIgQEAgc3RhdGljIEV3a19KU19PYmplY3QqIGV3a19qc19ucG9iamVjdF90b19vYmplY3QoTlBP
YmplY3QqIG5wT2JqZWN0KQogICAgIH0KIAogICAgIC8vIENhbid0IHVzZSBld2tfanNfb2JqZWN0
X25ldyhjbHMpIGJlY2F1c2UgaXQgZXhwZWN0cyBjbHMtPm1ldGEgdG8gZXhpc3QuCi0gICAgb2Jq
ID0gc3RhdGljX2Nhc3Q8RXdrX0pTX09iamVjdCo+KG1hbGxvYyhzaXplb2YoRXdrX0pTX09iamVj
dCkpKTsKLSAgICBpZiAoIW9iaikgeworICAgIG9iamVjdCA9IHN0YXRpY19jYXN0PEV3a19KU19P
YmplY3QqPihtYWxsb2Moc2l6ZW9mKEV3a19KU19PYmplY3QpKSk7CisgICAgaWYgKCFvYmplY3Qp
IHsKICAgICAgICAgRVJSKCJDb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBld2tfanNfb2Jq
ZWN0Iik7CiAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQogCiAgICAgZnJlZSh2YWx1ZXMpOwot
ICAgIEVJTkFfTUFHSUNfU0VUKG9iaiwgRVdLX0pTX09CSkVDVF9NQUdJQyk7Ci0gICAgb2JqLT5u
YW1lID0gMDsKLSAgICBvYmotPmNscyA9IGNsczsKLSAgICBvYmotPnZpZXcgPSAwOworICAgIEVJ
TkFfTUFHSUNfU0VUKG9iamVjdCwgRVdLX0pTX09CSkVDVF9NQUdJQyk7CisgICAgb2JqZWN0LT5u
YW1lID0gMDsKKyAgICBvYmplY3QtPmNscyA9IGNsczsKKyAgICBvYmplY3QtPnZpZXcgPSAwOwog
CiAgICAganNvID0gcmVpbnRlcnByZXRfY2FzdDxKYXZhU2NyaXB0T2JqZWN0Kj4obnBPYmplY3Qp
OwogICAgIGlmICghc3RyY21wKCJBcnJheSIsIGpzby0+aW1wLT5jbGFzc05hbWUoKS5hc2NpaSgp
LmRhdGEoKSkpCi0gICAgICAgIG9iai0+dHlwZSA9IEVXS19KU19PQkpFQ1RfQVJSQVk7CisgICAg
ICAgIG9iamVjdC0+dHlwZSA9IEVXS19KU19PQkpFQ1RfQVJSQVk7CiAgICAgZWxzZSBpZiAoIXN0
cmNtcCgiRnVuY3Rpb24iLCBqc28tPmltcC0+Y2xhc3NOYW1lKCkuYXNjaWkoKS5kYXRhKCkpKQot
ICAgICAgICBvYmotPnR5cGUgPSBFV0tfSlNfT0JKRUNUX0ZVTkNUSU9OOworICAgICAgICBvYmpl
Y3QtPnR5cGUgPSBFV0tfSlNfT0JKRUNUX0ZVTkNUSU9OOwogICAgIGVsc2UKLSAgICAgICAgb2Jq
LT50eXBlID0gRVdLX0pTX09CSkVDVF9PQkpFQ1Q7CisgICAgICAgIG9iamVjdC0+dHlwZSA9IEVX
S19KU19PQkpFQ1RfT0JKRUNUOwogCiAgICAgaWYgKGVpbmFfaGFzaF9wb3B1bGF0aW9uKGNscy0+
cHJvcGVydGllcykgPCAyNSkKLSAgICAgICAgb2JqLT5wcm9wZXJ0aWVzID0gZWluYV9oYXNoX3N0
cmluZ19zbWFsbF9uZXcoMCk7CisgICAgICAgIG9iamVjdC0+cHJvcGVydGllcyA9IGVpbmFfaGFz
aF9zdHJpbmdfc21hbGxfbmV3KDApOwogICAgIGVsc2UKLSAgICAgICAgb2JqLT5wcm9wZXJ0aWVz
ID0gZWluYV9oYXNoX3N0cmluZ19zdXBlcmZhc3RfbmV3KDApOworICAgICAgICBvYmplY3QtPnBy
b3BlcnRpZXMgPSBlaW5hX2hhc2hfc3RyaW5nX3N1cGVyZmFzdF9uZXcoMCk7CiAKICAgICBpdCA9
IGVpbmFfaGFzaF9pdGVyYXRvcl9kYXRhX25ldyhjbHMtPnByb3BlcnRpZXMpOwogICAgIEVJTkFf
SVRFUkFUT1JfRk9SRUFDSChpdCwgcHJvcCkgewogICAgICAgICBjb25zdCBjaGFyKiBrZXkgPSBw
cm9wLT5uYW1lOwogICAgICAgICBFd2tfSlNfVmFyaWFudCogdmFsdWUgPSAmcHJvcC0+dmFsdWU7
Ci0gICAgICAgIGVpbmFfaGFzaF9hZGQob2JqLT5wcm9wZXJ0aWVzLCBrZXksIHZhbHVlKTsKKyAg
ICAgICAgZWluYV9oYXNoX2FkZChvYmplY3QtPnByb3BlcnRpZXMsIGtleSwgdmFsdWUpOwogICAg
IH0KIAogICAgIGVpbmFfaXRlcmF0b3JfZnJlZShpdCk7Ci0gICAgb2JqLT5iYXNlID0gKnJlaW50
ZXJwcmV0X2Nhc3Q8SmF2YVNjcmlwdE9iamVjdCo+KG5wT2JqZWN0KTsKKyAgICBvYmplY3QtPmJh
c2UgPSAqcmVpbnRlcnByZXRfY2FzdDxKYXZhU2NyaXB0T2JqZWN0Kj4obnBPYmplY3QpOwogCi0g
ICAgcmV0dXJuIG9iajsKKyAgICByZXR1cm4gb2JqZWN0OwogCiBlcnJvcjoKICAgICBld2tfanNf
Y2xhc3NfZnJlZShjbHMpOwpAQCAtNTI3LDM3ICs1MjcsMzcgQEAgc3RhdGljIEVpbmFfQm9vbCBl
d2tfanNfbnB2YXJpYW50X3RvX3ZhcmlhbnQoRXdrX0pTX1ZhcmlhbnQqIGRhdGEsIGNvbnN0IE5Q
VmFyaWEKIAogRXdrX0pTX09iamVjdCogZXdrX2pzX29iamVjdF9uZXcoY29uc3QgRXdrX0pTX0Ns
YXNzX01ldGEqIGpzTWV0YUNsYXNzKQogewotICAgIEV3a19KU19PYmplY3QqIG9iajsKKyAgICBF
d2tfSlNfT2JqZWN0KiBvYmplY3Q7CiAKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9W
QUwobWV0YV9jbHMsIDApOwogCi0gICAgb2JqID0gc3RhdGljX2Nhc3Q8RXdrX0pTX09iamVjdCo+
KG1hbGxvYyhzaXplb2YoRXdrX0pTX09iamVjdCkpKTsKLSAgICBpZiAoIW9iaikgeworICAgIG9i
amVjdCA9IHN0YXRpY19jYXN0PEV3a19KU19PYmplY3QqPihtYWxsb2Moc2l6ZW9mKEV3a19KU19P
YmplY3QpKSk7CisgICAgaWYgKCFvYmplY3QpIHsKICAgICAgICAgRVJSKCJDb3VsZCBub3QgYWxs
b2NhdGUgbWVtb3J5IGZvciBld2tfanNfb2JqZWN0Iik7CiAgICAgICAgIHJldHVybiAwOwogICAg
IH0KIAotICAgIEVJTkFfTUFHSUNfU0VUKG9iaiwgRVdLX0pTX09CSkVDVF9NQUdJQyk7Ci0gICAg
b2JqLT5jbHMgPSBld2tfanNfY2xhc3NfbmV3KGpzTWV0YUNsYXNzKTsKLSAgICBvYmotPnZpZXcg
PSAwOwotICAgIG9iai0+bmFtZSA9IDA7Ci0gICAgb2JqLT50eXBlID0gRVdLX0pTX09CSkVDVF9P
QkpFQ1Q7CisgICAgRUlOQV9NQUdJQ19TRVQob2JqZWN0LCBFV0tfSlNfT0JKRUNUX01BR0lDKTsK
KyAgICBvYmplY3QtPmNscyA9IGV3a19qc19jbGFzc19uZXcoanNNZXRhQ2xhc3MpOworICAgIG9i
amVjdC0+dmlldyA9IDA7CisgICAgb2JqZWN0LT5uYW1lID0gMDsKKyAgICBvYmplY3QtPnR5cGUg
PSBFV0tfSlNfT0JKRUNUX09CSkVDVDsKIAotICAgIGlmIChlaW5hX2hhc2hfcG9wdWxhdGlvbihv
YmotPmNscy0+cHJvcGVydGllcykgPCAyNSkKLSAgICAgICAgb2JqLT5wcm9wZXJ0aWVzID0gZWlu
YV9oYXNoX3N0cmluZ19zbWFsbF9uZXcocmVpbnRlcnByZXRfY2FzdDxFaW5hX0ZyZWVfQ2I+KGV3
a19qc192YXJpYW50X2ZyZWUpKTsKKyAgICBpZiAoZWluYV9oYXNoX3BvcHVsYXRpb24ob2JqZWN0
LT5jbHMtPnByb3BlcnRpZXMpIDwgMjUpCisgICAgICAgIG9iamVjdC0+cHJvcGVydGllcyA9IGVp
bmFfaGFzaF9zdHJpbmdfc21hbGxfbmV3KHJlaW50ZXJwcmV0X2Nhc3Q8RWluYV9GcmVlX0NiPihl
d2tfanNfdmFyaWFudF9mcmVlKSk7CiAgICAgZWxzZQotICAgICAgICBvYmotPnByb3BlcnRpZXMg
PSBlaW5hX2hhc2hfc3RyaW5nX3N1cGVyZmFzdF9uZXcocmVpbnRlcnByZXRfY2FzdDxFaW5hX0Zy
ZWVfQ2I+KGV3a19qc192YXJpYW50X2ZyZWUpKTsKKyAgICAgICAgb2JqZWN0LT5wcm9wZXJ0aWVz
ID0gZWluYV9oYXNoX3N0cmluZ19zdXBlcmZhc3RfbmV3KHJlaW50ZXJwcmV0X2Nhc3Q8RWluYV9G
cmVlX0NiPihld2tfanNfdmFyaWFudF9mcmVlKSk7CiAKLSAgICBmb3IgKGludCBpID0gMDsgb2Jq
LT5jbHMtPm1ldGEtPnByb3BlcnRpZXMgJiYgb2JqLT5jbHMtPm1ldGEtPnByb3BlcnRpZXNbaV0u
bmFtZTsgaSsrKSB7Ci0gICAgICAgIEV3a19KU19Qcm9wZXJ0eSBwcm9wID0gb2JqLT5jbHMtPm1l
dGEtPnByb3BlcnRpZXNbaV07Ci0gICAgICAgIGNvbnN0IGNoYXIqIGtleSA9IG9iai0+Y2xzLT5t
ZXRhLT5wcm9wZXJ0aWVzW2ldLm5hbWU7CisgICAgZm9yIChpbnQgaSA9IDA7IG9iamVjdC0+Y2xz
LT5tZXRhLT5wcm9wZXJ0aWVzICYmIG9iamVjdC0+Y2xzLT5tZXRhLT5wcm9wZXJ0aWVzW2ldLm5h
bWU7IGkrKykgeworICAgICAgICBFd2tfSlNfUHJvcGVydHkgcHJvcCA9IG9iamVjdC0+Y2xzLT5t
ZXRhLT5wcm9wZXJ0aWVzW2ldOworICAgICAgICBjb25zdCBjaGFyKiBrZXkgPSBvYmplY3QtPmNs
cy0+bWV0YS0+cHJvcGVydGllc1tpXS5uYW1lOwogICAgICAgICBFd2tfSlNfVmFyaWFudCogdmFs
dWUgPSBzdGF0aWNfY2FzdDxFd2tfSlNfVmFyaWFudCo+KG1hbGxvYyhzaXplb2YoRXdrX0pTX1Zh
cmlhbnQpKSk7CiAgICAgICAgIGlmICghdmFsdWUpIHsKICAgICAgICAgICAgIEVSUigiQ291bGQg
bm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgZXdrX2pzX3ZhcmlhbnQiKTsKICAgICAgICAgICAgIGdv
dG8gZXJyb3I7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHByb3AuZ2V0KQotICAgICAgICAgICAg
cHJvcC5nZXQob2JqLCBrZXksIHZhbHVlKTsKKyAgICAgICAgICAgIHByb3AuZ2V0KG9iamVjdCwg
a2V5LCB2YWx1ZSk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgdmFsdWUtPnR5cGUgPSBw
cm9wLnZhbHVlLnR5cGU7CiAgICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLT50eXBlKSB7CkBAIC01
ODIsMTUgKzU4MiwxNSBAQCBFd2tfSlNfT2JqZWN0KiBld2tfanNfb2JqZWN0X25ldyhjb25zdCBF
d2tfSlNfQ2xhc3NfTWV0YSoganNNZXRhQ2xhc3MpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgZWluYV9oYXNoX2FkZChvYmotPnByb3Bl
cnRpZXMsIGtleSwgdmFsdWUpOworICAgICAgICBlaW5hX2hhc2hfYWRkKG9iamVjdC0+cHJvcGVy
dGllcywga2V5LCB2YWx1ZSk7CiAgICAgfQogCi0gICAgb2JqLT5iYXNlLm9iamVjdC5yZWZlcmVu
Y2VDb3VudCA9IDE7Ci0gICAgb2JqLT5iYXNlLm9iamVjdC5fY2xhc3MgPSAmRVdLX05QQ0xBU1M7
Ci0gICAgcmV0dXJuIG9iajsKKyAgICBvYmplY3QtPmJhc2Uub2JqZWN0LnJlZmVyZW5jZUNvdW50
ID0gMTsKKyAgICBvYmplY3QtPmJhc2Uub2JqZWN0Ll9jbGFzcyA9ICZFV0tfTlBDTEFTUzsKKyAg
ICByZXR1cm4gb2JqZWN0OwogCiBlcnJvcjoKLSAgICBld2tfanNfb2JqZWN0X2ZyZWUob2JqKTsK
KyAgICBld2tfanNfb2JqZWN0X2ZyZWUob2JqZWN0KTsKICAgICByZXR1cm4gMDsKIH0KIApAQCAt
NjYyLDcgKzY2Miw3IEBAIEV3a19KU19PYmplY3RfVHlwZSBld2tfanNfb2JqZWN0X3R5cGVfZ2V0
KEV3a19KU19PYmplY3QqIGpzT2JqZWN0KQogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJO
X1ZBTChqc09iamVjdCwgRVdLX0pTX09CSkVDVF9PQkpFQ1QpOwogICAgIEVJTkFfTUFHSUNfQ0hF
Q0tfT1JfUkVUVVJOKGpzT29iamVjdCwgRVdLX0pTX09CSkVDVF9PQkpFQ1QpOwogCi0gICAgcmV0
dXJuIG9iai0+dHlwZTsKKyAgICByZXR1cm4gb2JqZWN0LT50eXBlOwogfQogCiB2b2lkIGV3a19q
c19vYmplY3RfdHlwZV9zZXQoRXdrX0pTX09iamVjdCoganNPYmplY3QsIEV3a19KU19PYmplY3Rf
VHlwZSB0eXBlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19qcy5oIGIv
U291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19qcy5oCmluZGV4IDczMzFkYTIuLjg4ZDQ4ZDYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfanMuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2VmbC9ld2svZXdrX2pzLmgKQEAgLTQwLDEwICs0MCwxMCBAQCB0eXBlZGVmIHN0cnVjdCBf
RXdrX0pTX1ZhcmlhbnQgRXdrX0pTX1ZhcmlhbnQ7CiB0eXBlZGVmIHN0cnVjdCBfRXdrX0pTX01l
dGhvZCBFd2tfSlNfTWV0aG9kOwogdHlwZWRlZiBzdHJ1Y3QgX0V3a19KU19Qcm9wZXJ0eSBFd2tf
SlNfUHJvcGVydHk7CiB0eXBlZGVmIHN0cnVjdCBfRXdrX0pTX0RlZmF1bHQgRXdrX0pTX0RlZmF1
bHQ7Ci10eXBlZGVmIEVpbmFfQm9vbCAoKkV3a19KU19TZXRfQ2IpKEV3a19KU19PYmplY3QgKm9i
aiwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgRXdrX0pTX1ZhcmlhbnQgKnZhbHVlKTsKLXR5cGVk
ZWYgRWluYV9Cb29sICgqRXdrX0pTX0dldF9DYikoRXdrX0pTX09iamVjdCAqb2JqLCBjb25zdCBj
aGFyICpuYW1lLCBFd2tfSlNfVmFyaWFudCAqdmFsdWUpOwotdHlwZWRlZiBFaW5hX0Jvb2wgKCpF
d2tfSlNfRGVsX0NiKShFd2tfSlNfT2JqZWN0ICpvYmosIGNvbnN0IGNoYXIgKm5hbWUpOwotdHlw
ZWRlZiBFd2tfSlNfVmFyaWFudCogKCpFd2tfSlNfSW52b2tlX0NiKShFd2tfSlNfT2JqZWN0ICpv
YmosIEV3a19KU19WYXJpYW50ICphcmdzLCBpbnQgYXJnQ291bnQpOwordHlwZWRlZiBFaW5hX0Jv
b2wgKCpFd2tfSlNfU2V0X0NiKShFd2tfSlNfT2JqZWN0ICpvYmplY3QsIGNvbnN0IGNoYXIgKm5h
bWUsIGNvbnN0IEV3a19KU19WYXJpYW50ICp2YWx1ZSk7Cit0eXBlZGVmIEVpbmFfQm9vbCAoKkV3
a19KU19HZXRfQ2IpKEV3a19KU19PYmplY3QgKm9iamVjdCwgY29uc3QgY2hhciAqbmFtZSwgRXdr
X0pTX1ZhcmlhbnQgKnZhbHVlKTsKK3R5cGVkZWYgRWluYV9Cb29sICgqRXdrX0pTX0RlbF9DYiko
RXdrX0pTX09iamVjdCAqb2JqZWN0LCBjb25zdCBjaGFyICpuYW1lKTsKK3R5cGVkZWYgRXdrX0pT
X1ZhcmlhbnQqICgqRXdrX0pTX0ludm9rZV9DYikoRXdrX0pTX09iamVjdCAqb2JqZWN0LCBFd2tf
SlNfVmFyaWFudCAqYXJncywgaW50IGFyZ0NvdW50KTsKIAogdHlwZWRlZiBlbnVtIHsKICAgICBF
V0tfSlNfVkFSSUFOVF9WT0lELApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3
a19sb2dnaW5nLmggYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2xvZ2dpbmcuaAppbmRleCBm
OGE3ZjQxLi5hZmQ1NDZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2xv
Z2dpbmcuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2xvZ2dpbmcuaApAQCAtMjYs
MTEgKzI2LDExIEBACiAjaWZuZGVmIGV3a19sb2dnaW5nX2gKICNkZWZpbmUgZXdrX2xvZ2dpbmdf
aAogCi1leHRlcm4gaW50IF9ld2tfbG9nX2RvbTsKLSNkZWZpbmUgQ1JJVElDQUwoLi4uKSBFSU5B
X0xPR19ET01fQ1JJVChfZXdrX2xvZ19kb20sIF9fVkFfQVJHU19fKQotI2RlZmluZSBFUlIoLi4u
KSBFSU5BX0xPR19ET01fRVJSKF9ld2tfbG9nX2RvbSwgX19WQV9BUkdTX18pCi0jZGVmaW5lIFdS
TiguLi4pIEVJTkFfTE9HX0RPTV9XQVJOKF9ld2tfbG9nX2RvbSwgX19WQV9BUkdTX18pCi0jZGVm
aW5lIElORiguLi4pIEVJTkFfTE9HX0RPTV9JTkZPKF9ld2tfbG9nX2RvbSwgX19WQV9BUkdTX18p
Ci0jZGVmaW5lIERCRyguLi4pIEVJTkFfTE9HX0RPTV9EQkcoX2V3a19sb2dfZG9tLCBfX1ZBX0FS
R1NfXykKK2V4dGVybiBpbnQgX2V3a0xvZ0RvbTsKKyNkZWZpbmUgQ1JJVElDQUwoLi4uKSBFSU5B
X0xPR19ET01fQ1JJVChfZXdrTG9nRG9tLCBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgRVJSKC4uLikg
RUlOQV9MT0dfRE9NX0VSUihfZXdrTG9nRG9tLCBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgV1JOKC4u
LikgRUlOQV9MT0dfRE9NX1dBUk4oX2V3a0xvZ0RvbSwgX19WQV9BUkdTX18pCisjZGVmaW5lIElO
RiguLi4pIEVJTkFfTE9HX0RPTV9JTkZPKF9ld2tMb2dEb20sIF9fVkFfQVJHU19fKQorI2RlZmlu
ZSBEQkcoLi4uKSBFSU5BX0xPR19ET01fREJHKF9ld2tMb2dEb20sIF9fVkFfQVJHU19fKQogCiAj
ZW5kaWYgLy8gZXdrX2xvZ2dpbmdfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvZXdr
L2V3a19tYWluLmNwcCBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfbWFpbi5jcHAKaW5kZXgg
ZWIwMzIzMy4uZmE5OGQxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19t
YWluLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX21haW4uY3BwCkBAIC01Nywy
NiArNTcsMjYgQEAKICNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4KICNlbmRpZgogCi1zdGF0aWMg
aW50IF9ld2tfaW5pdF9jb3VudCA9IDA7CitzdGF0aWMgaW50IF9ld2tJbml0Q291bnQgPSAwOwog
CiAvKioKICAqIFx2YXIgICAgIF9ld2tfbG9nX2RvbQogICogQGJyaWVmICAgdGhlIGxvZyBkb21h
aW4gaWRlbnRpZmllciB0aGF0IGlzIHVzZWQgd2l0aCBFSU5BJ3MgbWFjcm9zCiAgKi8KLWludCBf
ZXdrX2xvZ19kb20gPSAtMTsKK2ludCBfZXdrTG9nRG9tID0gLTE7CiAKIHN0YXRpYyBFaW5hX0Jv
b2wgX2V3a19pbml0X2JvZHkodm9pZCk7CiAKIGludCBld2tfaW5pdCh2b2lkKQogewotICAgIGlm
IChfZXdrX2luaXRfY291bnQpCi0gICAgICAgIHJldHVybiArK19ld2tfaW5pdF9jb3VudDsKKyAg
ICBpZiAoX2V3a0luaXRDb3VudCkKKyAgICAgICAgcmV0dXJuICsrX2V3a0luaXRDb3VudDsKIAog
ICAgIGlmICghZWluYV9pbml0KCkpCiAgICAgICAgIGdvdG8gZXJyb3JfZWluYTsKIAotICAgIF9l
d2tfbG9nX2RvbSA9IGVpbmFfbG9nX2RvbWFpbl9yZWdpc3RlcigiZXdlYmtpdCIsIEVJTkFfQ09M
T1JfT1JBTkdFKTsKLSAgICBpZiAoX2V3a19sb2dfZG9tIDwgMCkgeworICAgIF9ld2tMb2dEb20g
PSBlaW5hX2xvZ19kb21haW5fcmVnaXN0ZXIoImV3ZWJraXQiLCBFSU5BX0NPTE9SX09SQU5HRSk7
CisgICAgaWYgKF9ld2tMb2dEb20gPCAwKSB7CiAgICAgICAgIEVJTkFfTE9HX0NSSVQoImNvdWxk
IG5vdCByZWdpc3RlciBsb2cgZG9tYWluICdld2Via2l0JyIpOwogICAgICAgICBnb3RvIGVycm9y
X2xvZ19kb21haW47CiAgICAgfQpAQCAtMTA2LDcgKzEwNiw3IEBAIGludCBld2tfaW5pdCh2b2lk
KQogICAgICAgICBnb3RvIGVycm9yX2VkamU7CiAgICAgfQogCi0gICAgcmV0dXJuICsrX2V3a19p
bml0X2NvdW50OworICAgIHJldHVybiArK19ld2tJbml0Q291bnQ7CiAKIGVycm9yX2VkamU6CiAg
ICAgZWNvcmVfZXZhc19zaHV0ZG93bigpOwpAQCAtMTE1LDggKzExNSw4IEBAIGVycm9yX2Vjb3Jl
X2V2YXM6CiBlcnJvcl9lY29yZToKICAgICBldmFzX3NodXRkb3duKCk7CiBlcnJvcl9ldmFzOgot
ICAgIGVpbmFfbG9nX2RvbWFpbl91bnJlZ2lzdGVyKF9ld2tfbG9nX2RvbSk7Ci0gICAgX2V3a19s
b2dfZG9tID0gLTE7CisgICAgZWluYV9sb2dfZG9tYWluX3VucmVnaXN0ZXIoX2V3a0xvZ0RvbSk7
CisgICAgX2V3a0xvZ0RvbSA9IC0xOwogZXJyb3JfbG9nX2RvbWFpbjoKICAgICBlaW5hX3NodXRk
b3duKCk7CiBlcnJvcl9laW5hOgpAQCAtMTI1LDE1ICsxMjUsMTUgQEAgZXJyb3JfZWluYToKIAog
aW50IGV3a19zaHV0ZG93bih2b2lkKQogewotICAgIF9ld2tfaW5pdF9jb3VudC0tOwotICAgIGlm
IChfZXdrX2luaXRfY291bnQpCi0gICAgICAgIHJldHVybiBfZXdrX2luaXRfY291bnQ7CisgICAg
X2V3a0luaXRDb3VudC0tOworICAgIGlmIChfZXdrSW5pdENvdW50KQorICAgICAgICByZXR1cm4g
X2V3a0luaXRDb3VudDsKIAogICAgIGVjb3JlX2V2YXNfc2h1dGRvd24oKTsKICAgICBlY29yZV9z
aHV0ZG93bigpOwogICAgIGV2YXNfc2h1dGRvd24oKTsKLSAgICBlaW5hX2xvZ19kb21haW5fdW5y
ZWdpc3RlcihfZXdrX2xvZ19kb20pOwotICAgIF9ld2tfbG9nX2RvbSA9IC0xOworICAgIGVpbmFf
bG9nX2RvbWFpbl91bnJlZ2lzdGVyKF9ld2tMb2dEb20pOworICAgIF9ld2tMb2dEb20gPSAtMTsK
ICAgICBlaW5hX3NodXRkb3duKCk7CiAKICAgICByZXR1cm4gMDsKQEAgLTE3OSwxMCArMTc5LDEw
IEBAIEVpbmFfQm9vbCBfZXdrX2luaXRfYm9keSh2b2lkKQogICAgICAgICByZXR1cm4gRUlOQV9G
QUxTRTsKICAgICB9CiAKLSAgICBXVEY6OlN0cmluZyB3a2RpciA9IGhvbWUgKyAiLy53ZWJraXQi
OwotICAgIGlmIChXZWJDb3JlOjptYWtlQWxsRGlyZWN0b3JpZXMod2tkaXIpKSB7Ci0gICAgICAg
IGV3a19zZXR0aW5nc193ZWJfZGF0YWJhc2VfcGF0aF9zZXQod2tkaXIudXRmOCgpLmRhdGEoKSk7
Ci0gICAgICAgIGV3a19zZXR0aW5nc19jYWNoZV9kaXJlY3RvcnlfcGF0aF9zZXQod2tkaXIudXRm
OCgpLmRhdGEoKSk7CisgICAgV1RGOjpTdHJpbmcgd2Via2l0RGlyZWN0b3J5ID0gaG9tZSArICIv
LndlYmtpdCI7CisgICAgaWYgKFdlYkNvcmU6Om1ha2VBbGxEaXJlY3Rvcmllcyh3ZWJraXREaXJl
Y3RvcnkpKSB7CisgICAgICAgIGV3a19zZXR0aW5nc193ZWJfZGF0YWJhc2VfcGF0aF9zZXQod2Vi
a2l0RGlyZWN0b3J5LnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBld2tfc2V0dGluZ3NfY2FjaGVf
ZGlyZWN0b3J5X3BhdGhfc2V0KHdlYmtpdERpcmVjdG9yeS51dGY4KCkuZGF0YSgpKTsKICAgICB9
CiAKICAgICAvLyBUT0RPOiB0aGlzIHNob3VsZCBtb3ZlIHRvIFdlYkNvcmUsIGFscmVhZHkgcmVw
b3J0ZWQgdG8gd2Via2l0LWd0ayBmb2xrczoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZs
L2V3ay9ld2tfc2V0dGluZ3MuY3BwIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19zZXR0aW5n
cy5jcHAKaW5kZXggZjBiYTZlYi4uNjRmMTRmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9l
ZmwvZXdrL2V3a19zZXR0aW5ncy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19z
ZXR0aW5ncy5jcHAKQEAgLTU2LDI2ICs1NiwyNiBAQCBzdGF0aWMgdWludDY0X3QgX2V3a19kZWZh
dWx0X3dlYl9kYXRhYmFzZV9xdW90YSA9IDEgKiAxMDI0ICogMTAyNDsKIAogc3RhdGljIFdURjo6
U3RyaW5nIF9ld2tfc2V0dGluZ3Nfd2Via2l0X3BsYXRmb3JtX2dldCgpCiB7Ci0gICAgV1RGOjpT
dHJpbmcgdWFfcGxhdGZvcm07CisgICAgV1RGOjpTdHJpbmcgdWFQbGF0Zm9ybTsKICNpZiBQTEFU
Rk9STShYMTEpCi0gICAgdWFfcGxhdGZvcm0gPSAiWDExIjsKKyAgICB1YVBsYXRmb3JtID0gIlgx
MSI7CiAjZWxzZQotICAgIHVhX3BsYXRmb3JtID0gIlVua25vd24iOworICAgIHVhUGxhdGZvcm0g
PSAiVW5rbm93biI7CiAjZW5kaWYKLSAgICByZXR1cm4gdWFfcGxhdGZvcm07CisgICAgcmV0dXJu
IHVhUGxhdGZvcm07CiB9CiAKIHN0YXRpYyBXVEY6OlN0cmluZyBfZXdrX3NldHRpbmdzX3dlYmtp
dF9vc192ZXJzaW9uX2dldCgpCiB7Ci0gICAgV1RGOjpTdHJpbmcgdWFfb3NfdmVyc2lvbjsKKyAg
ICBXVEY6OlN0cmluZyB1YU9zVmVyc2lvbjsKICAgICBzdHJ1Y3QgdXRzbmFtZSBuYW1lOwogCiAg
ICAgaWYgKHVuYW1lKCZuYW1lKSAhPSAtMSkKLSAgICAgICAgdWFfb3NfdmVyc2lvbiA9IG1ha2VT
dHJpbmcobmFtZS5zeXNuYW1lLCAnICcsIG5hbWUubWFjaGluZSk7CisgICAgICAgIHVhT3NWZXJz
aW9uID0gbWFrZVN0cmluZyhuYW1lLnN5c25hbWUsICcgJywgbmFtZS5tYWNoaW5lKTsKICAgICBl
bHNlCi0gICAgICAgIHVhX29zX3ZlcnNpb24gPSAiVW5rbm93biI7CisgICAgICAgIHVhT3NWZXJz
aW9uID0gIlVua25vd24iOwogCi0gICAgcmV0dXJuIHVhX29zX3ZlcnNpb247CisgICAgcmV0dXJu
IHVhT3NWZXJzaW9uOwogfQogCiB1aW50NjRfdCBld2tfc2V0dGluZ3Nfd2ViX2RhdGFiYXNlX2Rl
ZmF1bHRfcXVvdGFfZ2V0KCkKQEAgLTI0NSwxMCArMjQ1LDEwIEBAIHZvaWQgZXdrX3NldHRpbmdz
X3JlcGFpbnRfdGhyb3R0bGluZ19zZXQoZG91YmxlIGRlZmVycmVkUmVwYWludERlbGF5LCBkb3Vi
bGUgaW5pCiAgKi8KIGNvbnN0IGNoYXIqIGV3a19zZXR0aW5nc19kZWZhdWx0X3VzZXJfYWdlbnRf
Z2V0KHZvaWQpCiB7Ci0gICAgV1RGOjpTdHJpbmcgdWFfdmVyc2lvbiA9IG1ha2VTdHJpbmcoU3Ry
aW5nOjpudW1iZXIoV0VCS0lUX1VTRVJfQUdFTlRfTUFKT1JfVkVSU0lPTiksICcuJywgU3RyaW5n
OjpudW1iZXIoV0VCS0lUX1VTRVJfQUdFTlRfTUlOT1JfVkVSU0lPTiksICcrJyk7Ci0gICAgV1RG
OjpTdHJpbmcgc3RhdGljX3VhID0gbWFrZVN0cmluZygiTW96aWxsYS81LjAgKCIsIF9ld2tfc2V0
dGluZ3Nfd2Via2l0X3BsYXRmb3JtX2dldCgpLCAiOyAiLCBfZXdrX3NldHRpbmdzX3dlYmtpdF9v
c192ZXJzaW9uX2dldCgpLCAiKSBBcHBsZVdlYktpdC8iLCB1YV92ZXJzaW9uKSArIG1ha2VTdHJp
bmcoIiAoS0hUTUwsIGxpa2UgR2Vja28pIFZlcnNpb24vNS4wIFNhZmFyaS8iLCB1YV92ZXJzaW9u
KTsKKyAgICBXVEY6OlN0cmluZyB1YVZlcnNpb24gPSBtYWtlU3RyaW5nKFN0cmluZzo6bnVtYmVy
KFdFQktJVF9VU0VSX0FHRU5UX01BSk9SX1ZFUlNJT04pLCAnLicsIFN0cmluZzo6bnVtYmVyKFdF
QktJVF9VU0VSX0FHRU5UX01JTk9SX1ZFUlNJT04pLCAnKycpOworICAgIFdURjo6U3RyaW5nIHN0
YXRpY1VhID0gbWFrZVN0cmluZygiTW96aWxsYS81LjAgKCIsIF9ld2tfc2V0dGluZ3Nfd2Via2l0
X3BsYXRmb3JtX2dldCgpLCAiOyAiLCBfZXdrX3NldHRpbmdzX3dlYmtpdF9vc192ZXJzaW9uX2dl
dCgpLCAiKSBBcHBsZVdlYktpdC8iLCB1YVZlcnNpb24pICsgbWFrZVN0cmluZygiIChLSFRNTCwg
bGlrZSBHZWNrbykgVmVyc2lvbi81LjAgU2FmYXJpLyIsIHVhVmVyc2lvbik7CiAKLSAgICByZXR1
cm4gZWluYV9zdHJpbmdzaGFyZV9hZGQoc3RhdGljX3VhLnV0ZjgoKS5kYXRhKCkpOworICAgIHJl
dHVybiBlaW5hX3N0cmluZ3NoYXJlX2FkZChzdGF0aWNVYS51dGY4KCkuZGF0YSgpKTsKIH0KIAog
RWluYV9Cb29sIGV3a19zZXR0aW5nc19jYWNoZV9kaXJlY3RvcnlfcGF0aF9zZXQoY29uc3QgY2hh
ciogcGF0aCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmUuY3BwCmluZGV4IDc5NGE5MGMuLmE2MDg4MzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvZWZsL2V3ay9ld2tfdGlsZWRfYmFja2luZ19zdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9lZmwvZXdrL2V3a190aWxlZF9iYWNraW5nX3N0b3JlLmNwcApAQCAtNTUsMTQgKzU1LDE0IEBA
IHN0cnVjdCBfRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSB7CiAKIHN0cnVjdCBfRXdrX1Rp
bGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0IHsKICAgICBFSU5BX0lOTElTVDsK
LSAgICB1bnNpZ25lZCBsb25nIGNvbCwgcm93OworICAgIHVuc2lnbmVkIGxvbmcgY29sdW1uLCBy
b3c7CiAgICAgZmxvYXQgem9vbTsKIH07CiAKIHN0cnVjdCBfRXdrX1RpbGVkX0JhY2tpbmdfU3Rv
cmVfRGF0YSB7CiAgICAgRXZhc19PYmplY3RfU21hcnRfQ2xpcHBlZF9EYXRhIGJhc2U7CiAgICAg
RXZhc19PYmplY3QqIHNlbGY7Ci0gICAgRXZhc19PYmplY3QqIGNvbnRlbnRzX2NsaXBwZXI7Cisg
ICAgRXZhc19PYmplY3QqIGNvbnRlbnRzQ2xpcHBlcjsKICAgICBzdHJ1Y3QgewogICAgICAgICBF
aW5hX0lubGlzdCoqIGl0ZW1zOwogICAgICAgICBFdmFzX0Nvb3JkIHgsIHksIHdpZHRoLCBoZWln
aHQ7CkBAIC03MCw0MiArNzAsNDIgQEAgc3RydWN0IF9Fd2tfVGlsZWRfQmFja2luZ19TdG9yZV9E
YXRhIHsKICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgIEV2YXNfQ29vcmQgd2lkdGgsIGhl
aWdodDsKICAgICAgICAgICAgIGZsb2F0IHpvb207Ci0gICAgICAgICAgICBFaW5hX0Jvb2wgem9v
bV93ZWFrX3Ntb290aF9zY2FsZSA6IDE7CisgICAgICAgICAgICBFaW5hX0Jvb2wgem9vbVdlYWtT
bW9vdGhTY2FsZSA6IDE7CiAgICAgICAgIH0gdGlsZTsKICAgICAgICAgc3RydWN0IHsKICAgICAg
ICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICAgRXZhc19Db29yZCB4LCB5OwotICAgICAg
ICAgICAgfSBjdXIsIG9sZCwgYmFzZSwgem9vbV9jZW50ZXI7CisgICAgICAgICAgICB9IGN1ciwg
b2xkLCBiYXNlLCB6b29tQ2VudGVyOwogICAgICAgICB9IG9mZnNldDsKICAgICB9IHZpZXc7Ci0g
ICAgRXZhc19Db2xvcnNwYWNlIGNzcGFjZTsKKyAgICBFdmFzX0NvbG9yc3BhY2UgY29sb3JTcGFj
ZTsKICAgICBzdHJ1Y3QgewogICAgICAgICBFd2tfVGlsZV9NYXRyaXgqIG1hdHJpeDsKICAgICAg
ICAgc3RydWN0IHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgY29sLCByb3c7CisgICAgICAg
ICAgICB1bnNpZ25lZCBsb25nIGNvbHVtbiwgcm93OwogICAgICAgICB9IGJhc2U7CiAgICAgICAg
IHN0cnVjdCB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBsb25nIGNvbHMsIHJvd3M7Ci0gICAgICAg
IH0gY3VyLCBvbGQ7CisgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGNvbHVtbnMsIHJvd3M7Cisg
ICAgICAgIH0gY3VycmVudCwgb2xkOwogICAgICAgICBFdmFzX0Nvb3JkIHdpZHRoLCBoZWlnaHQ7
CiAgICAgfSBtb2RlbDsKICAgICBzdHJ1Y3QgewotICAgICAgICBFaW5hX0Jvb2wgKCpjYikodm9p
ZCogZGF0YSwgRXdrX1RpbGUqIHRpbGUsIGNvbnN0IEVpbmFfUmVjdGFuZ2xlKiBhcmVhKTsKKyAg
ICAgICAgRWluYV9Cb29sICgqY2FsbGJhY2spKHZvaWQqIGRhdGEsIEV3a19UaWxlKiB0aWxlLCBj
b25zdCBFaW5hX1JlY3RhbmdsZSogYXJlYSk7CiAgICAgICAgIHZvaWQqIGRhdGE7Ci0gICAgICAg
IEVpbmFfSW5saXN0KiBwcmVfcmVuZGVyX3JlcXVlc3RzOworICAgICAgICBFaW5hX0lubGlzdCog
cHJlUmVuZGVyUmVxdWVzdHM7CiAgICAgICAgIEVjb3JlX0lkbGVyKiBpZGxlcjsKICAgICAgICAg
RWluYV9Cb29sIGRpc2FibGVkOwogICAgICAgICBFaW5hX0Jvb2wgc3VzcGVuZCA6IDE7CiAgICAg
fSByZW5kZXI7CiAgICAgc3RydWN0IHsKLSAgICAgICAgdm9pZCogKCpwcmVfY2IpKHZvaWQqIGRh
dGEsIEV2YXNfT2JqZWN0KiBld2tUaWxlKTsKLSAgICAgICAgdm9pZCogcHJlX2RhdGE7Ci0gICAg
ICAgIHZvaWQqICgqcG9zdF9jYikodm9pZCogZGF0YSwgdm9pZCogcHJlX2RhdGEsIEV2YXNfT2Jq
ZWN0KiBld2tUaWxlKTsKLSAgICAgICAgdm9pZCogcG9zdF9kYXRhOworICAgICAgICB2b2lkKiAo
KnByZUNhbGxiYWNrKSh2b2lkKiBkYXRhLCBFdmFzX09iamVjdCogZXdrVGlsZSk7CisgICAgICAg
IHZvaWQqIHByZURhdGE7CisgICAgICAgIHZvaWQqICgqcG9zdENhbGxiYWNrKSh2b2lkKiBkYXRh
LCB2b2lkKiBwcmVEYXRhLCBFdmFzX09iamVjdCogZXdrVGlsZSk7CisgICAgICAgIHZvaWQqIHBv
c3REYXRhOwogICAgIH0gcHJvY2VzczsKICAgICBzdHJ1Y3QgewogICAgICAgICBFaW5hX0Jvb2wg
YW55IDogMTsKLSAgICAgICAgRWluYV9Cb29sIHBvcyA6IDE7CisgICAgICAgIEVpbmFfQm9vbCBw
b3NpdGlvbiA6IDE7CiAgICAgICAgIEVpbmFfQm9vbCBzaXplIDogMTsKICAgICAgICAgRWluYV9C
b29sIG1vZGVsIDogMTsKICAgICAgICAgRWluYV9Cb29sIG9mZnNldCA6IDE7CkBAIC0xMTYsNyAr
MTE2LDcgQEAgc3RydWN0IF9Fd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhIHsKIH07CiAKIHN0
YXRpYyBFdmFzX1NtYXJ0X0NsYXNzIF9wYXJlbnRfc2MgPSBFVkFTX1NNQVJUX0NMQVNTX0lOSVRf
TlVMTDsKLWludCBfZXdrX3RpbGVkX2xvZ19kb20gPSAtMTsKK2ludCBfZXdrVGlsZWRMb2dEb20g
PSAtMTsKIAogI2RlZmluZSBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihvYmosIHB0ciwgLi4uKSAg
ICAgICAgICAgICAgICAgICAgICAgXAogICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEq
IHB0ciA9IHN0YXRpY19jYXN0PEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqPihldmFzX29i
amVjdF9zbWFydF9kYXRhX2dldChvYmopKTsgXApAQCAtMTQwLDIzICsxNDAsMjMgQEAgc3RhdGlj
IGlubGluZSB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV91cGRhdGVzX3Byb2Nlc3MoRXdr
X1RpbGVkX0JhY2tpbmdfU3QKICAgICBpZiAocHJpdi0+cmVuZGVyLnN1c3BlbmQgfHwgIWV2YXNf
b2JqZWN0X3Zpc2libGVfZ2V0KHByaXYtPnNlbGYpKQogICAgICAgICByZXR1cm47CiAKLSAgICBp
ZiAocHJpdi0+cHJvY2Vzcy5wcmVfY2IpCi0gICAgICAgIGRhdGEgPSBwcml2LT5wcm9jZXNzLnBy
ZV9jYihwcml2LT5wcm9jZXNzLnByZV9kYXRhLCBwcml2LT5zZWxmKTsKKyAgICBpZiAocHJpdi0+
cHJvY2Vzcy5wcmVDYWxsYmFjaykKKyAgICAgICAgZGF0YSA9IHByaXYtPnByb2Nlc3MucHJlQ2Fs
bGJhY2socHJpdi0+cHJvY2Vzcy5wcmVEYXRhLCBwcml2LT5zZWxmKTsKIAogICAgIGV3a190aWxl
X21hdHJpeF91cGRhdGVzX3Byb2Nlc3MocHJpdi0+bW9kZWwubWF0cml4KTsKIAotICAgIGlmIChw
cml2LT5wcm9jZXNzLnBvc3RfY2IpCi0gICAgICAgIHByaXYtPnByb2Nlc3MucG9zdF9jYihwcml2
LT5wcm9jZXNzLnBvc3RfZGF0YSwgZGF0YSwgcHJpdi0+c2VsZik7CisgICAgaWYgKHByaXYtPnBy
b2Nlc3MucG9zdENhbGxiYWNrKQorICAgICAgICBwcml2LT5wcm9jZXNzLnBvc3RDYWxsYmFjayhw
cml2LT5wcm9jZXNzLnBvc3REYXRhLCBkYXRhLCBwcml2LT5zZWxmKTsKIH0KIAogc3RhdGljIGlu
dCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZmx1c2godm9pZCogZGF0YSkKIHsKICAgICBFd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2ID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGVkX0Jh
Y2tpbmdfU3RvcmVfRGF0YSo+KGRhdGEpOwotICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSogdHVj
ID0gZXdrX3RpbGVfbWF0cml4X3VudXNlZF9jYWNoZV9nZXQocHJpdi0+bW9kZWwubWF0cml4KTsK
KyAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHRpbGVkVW51c2VkQ2FjaGUgPSBld2tfdGlsZV9t
YXRyaXhfdW51c2VkX2NhY2hlX2dldChwcml2LT5tb2RlbC5tYXRyaXgpOwogCi0gICAgaWYgKHR1
YykgeworICAgIGlmICh0aWxlZFVudXNlZENhY2hlKSB7CiAgICAgICAgIERCRygiZmx1c2ggdW51
c2VkIHRpbGUgY2FjaGUuIik7Ci0gICAgICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9hdXRvX2Zs
dXNoKHR1Yyk7CisgICAgICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9hdXRvX2ZsdXNoKHRpbGVk
VW51c2VkQ2FjaGUpOwogICAgIH0gZWxzZQogICAgICAgICBFUlIoIm5vIGNhY2hlPyEiKTsKIApA
QCAtMjIyLDI3ICsyMjIsMjcgQEAgc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3RpbGVfYXNzb2NpYXRlKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEKIAogc3RhdGljIHZv
aWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfZGlzc29jaWF0ZShFd2tfVGlsZWRfQmFj
a2luZ19TdG9yZV9EYXRhKiBwcml2LCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKiBpdGVt
LCBkb3VibGUgbGFzdFVzZWQpCiB7Ci0gICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0dWM7Cisg
ICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0aWxlZFVudXNlZENhY2hlOwogICAgIGV3a190aWxl
X2hpZGUoaXRlbS0+dGlsZSk7CiAgICAgaWYgKCFld2tfdGlsZV92aXNpYmxlX2dldChpdGVtLT50
aWxlKSkKICAgICAgICAgZXZhc19vYmplY3Rfc21hcnRfbWVtYmVyX2RlbChpdGVtLT50aWxlLT5p
bWFnZSk7CiAgICAgZXdrX3RpbGVfbWF0cml4X3RpbGVfcHV0KHByaXYtPm1vZGVsLm1hdHJpeCwg
aXRlbS0+dGlsZSwgbGFzdFVzZWQpOwotICAgIHR1YyA9IGV3a190aWxlX21hdHJpeF91bnVzZWRf
Y2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7Ci0gICAgZXdrX3RpbGVfdW51c2VkX2NhY2hl
X2F1dG9fZmx1c2godHVjKTsKKyAgICB0aWxlZFVudXNlZENhY2hlID0gZXdrX3RpbGVfbWF0cml4
X3VudXNlZF9jYWNoZV9nZXQocHJpdi0+bW9kZWwubWF0cml4KTsKKyAgICBld2tfdGlsZV91bnVz
ZWRfY2FjaGVfYXV0b19mbHVzaCh0aWxlZFVudXNlZENhY2hlKTsKIAogICAgIGl0ZW0tPnRpbGUg
PSAwOwogfQogCiBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9kaXNz
b2NpYXRlX2FsbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2KQogewotICAgIEVp
bmFfSW5saXN0KiBpdDsKKyAgICBFaW5hX0lubGlzdCogbGlzdDsKICAgICBFd2tfVGlsZWRfQmFj
a2luZ19TdG9yZV9JdGVtKiBpdGVtOwogICAgIGludCBpOwogICAgIGRvdWJsZSBsYXN0X3VzZWQg
PSBlY29yZV9sb29wX3RpbWVfZ2V0KCk7CiAKICAgICBmb3IgKGkgPSAwOyBpIDwgcHJpdi0+dmll
dy5yb3dzOyBpKyspIHsKLSAgICAgICAgaXQgPSBwcml2LT52aWV3Lml0ZW1zW2ldOwotICAgICAg
ICBFSU5BX0lOTElTVF9GT1JFQUNIKGl0LCBpdGVtKQorICAgICAgICBsaXN0ID0gcHJpdi0+dmll
dy5pdGVtc1tpXTsKKyAgICAgICAgRUlOQV9JTkxJU1RfRk9SRUFDSChsaXN0LCBpdGVtKQogICAg
ICAgICAgICAgaWYgKGl0ZW0tPnRpbGUpCiAgICAgICAgICAgICAgICAgX2V3a190aWxlZF9iYWNr
aW5nX3N0b3JlX3RpbGVfZGlzc29jaWF0ZShwcml2LCBpdGVtLCBsYXN0X3VzZWQpOwogICAgIH0K
QEAgLTI1MCw0MyArMjUwLDQzIEBAIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV90aWxlX2Rpc3NvY2lhdGVfYWxsKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlCiAKIHN0YXRpYyBp
bmxpbmUgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVl
c3RfYWRkKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYsIHVuc2lnbmVkIGxvbmcg
Y29sdW1uLCB1bnNpZ25lZCBsb25nIHJvdywgZmxvYXQgem9vbSwgRXdrX1RpbGVkX0JhY2tpbmdf
U3RvcmVfUHJlX1JlbmRlcl9Qcmlvcml0eSBwcmlvcml0eSkKIHsKLSAgICBFd2tfVGlsZWRfQmFj
a2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QqIHI7CisgICAgRXdrX1RpbGVkX0JhY2tpbmdf
U3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0KiByZXF1ZXN0OwogCi0gICAgciA9IHN0YXRpY19jYXN0
PEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUmVxdWVzdCo+KG1hbGxvYyhzaXpl
b2YoKnIpKSk7Ci0gICAgaWYgKCFyKQorICAgIHJlcXVlc3QgPSBzdGF0aWNfY2FzdDxFd2tfVGls
ZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QqPihtYWxsb2Moc2l6ZW9mKCpyZXF1
ZXN0KSkpOworICAgIGlmICghcmVxdWVzdCkKICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CiAK
ICAgICBpZiAocHJpb3JpdHkgPT0gUFJFX1JFTkRFUl9QUklPUklUWV9ISUdIKQotICAgICAgICBw
cml2LT5yZW5kZXIucHJlX3JlbmRlcl9yZXF1ZXN0cyA9IGVpbmFfaW5saXN0X3ByZXBlbmQKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHByaXYtPnJlbmRl
ci5wcmVfcmVuZGVyX3JlcXVlc3RzLCBFSU5BX0lOTElTVF9HRVQocikpOworICAgICAgICBwcml2
LT5yZW5kZXIucHJlUmVuZGVyUmVxdWVzdHMgPSBlaW5hX2lubGlzdF9wcmVwZW5kCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwcml2LT5yZW5kZXIucHJl
UmVuZGVyUmVxdWVzdHMsIEVJTkFfSU5MSVNUX0dFVChyZXF1ZXN0KSk7CiAgICAgZWxzZQotICAg
ICAgICBwcml2LT5yZW5kZXIucHJlX3JlbmRlcl9yZXF1ZXN0cyA9IGVpbmFfaW5saXN0X2FwcGVu
ZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocHJpdi0+
cmVuZGVyLnByZV9yZW5kZXJfcmVxdWVzdHMsIEVJTkFfSU5MSVNUX0dFVChyKSk7CisgICAgICAg
IHByaXYtPnJlbmRlci5wcmVSZW5kZXJSZXF1ZXN0cyA9IGVpbmFfaW5saXN0X2FwcGVuZAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocHJpdi0+cmVuZGVy
LnByZVJlbmRlclJlcXVlc3RzLCBFSU5BX0lOTElTVF9HRVQocmVxdWVzdCkpOwogCi0gICAgci0+
Y29sID0gY29sdW1uOwotICAgIHItPnJvdyA9IHJvdzsKLSAgICByLT56b29tID0gem9vbTsKKyAg
ICByZXF1ZXN0LT5jb2x1bW4gPSBjb2x1bW47CisgICAgcmVxdWVzdC0+cm93ID0gcm93OworICAg
IHJlcXVlc3QtPnpvb20gPSB6b29tOwogCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAogc3Rh
dGljIGlubGluZSB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVl
c3RfZGVsKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYsIEV3a19UaWxlZF9CYWNr
aW5nX1N0b3JlX1ByZV9SZW5kZXJfUmVxdWVzdCogcmVxdWVzdCkKIHsKLSAgICBwcml2LT5yZW5k
ZXIucHJlX3JlbmRlcl9yZXF1ZXN0cyA9IGVpbmFfaW5saXN0X3JlbW92ZQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwcml2LT5yZW5kZXIucHJlX3JlbmRlcl9y
ZXF1ZXN0cywgRUlOQV9JTkxJU1RfR0VUKHJlcXVlc3QpKTsKKyAgICBwcml2LT5yZW5kZXIucHJl
UmVuZGVyUmVxdWVzdHMgPSBlaW5hX2lubGlzdF9yZW1vdmUKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAocHJpdi0+cmVuZGVyLnByZVJlbmRlclJlcXVlc3RzLCBF
SU5BX0lOTElTVF9HRVQocmVxdWVzdCkpOwogICAgIGZyZWUocmVxdWVzdCk7CiB9CiAKIHN0YXRp
YyBpbmxpbmUgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0KiBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2ZpcnN0KGNvbnN0IEV3a19U
aWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYpCiB7CiAgICAgcmV0dXJuIEVJTkFfSU5MSVNU
X0NPTlRBSU5FUl9HRVQoCi0gICAgICAgICAgICAgICBwcml2LT5yZW5kZXIucHJlX3JlbmRlcl9y
ZXF1ZXN0cywKKyAgICAgICAgICAgICAgIHByaXYtPnJlbmRlci5wcmVSZW5kZXJSZXF1ZXN0cywK
ICAgICAgICAgICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUmVxdWVz
dCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVy
X3JlcXVlc3RfZmx1c2goRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdikKIHsKLSAg
ICBFaW5hX0lubGlzdCoqIHBsID0gJnByaXYtPnJlbmRlci5wcmVfcmVuZGVyX3JlcXVlc3RzOwor
ICAgIEVpbmFfSW5saXN0KiogcGwgPSAmcHJpdi0+cmVuZGVyLnByZVJlbmRlclJlcXVlc3RzOwog
ICAgIHdoaWxlICgqcGwpIHsKICAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1Jl
bmRlcl9SZXF1ZXN0KiByOwogICAgICAgICByID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3By
ZV9yZW5kZXJfcmVxdWVzdF9maXJzdChwcml2KTsKQEAgLTI5Nyw0NSArMjk3LDQ1IEBAIHN0YXRp
YyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfZmx1c2go
RXdrX1RpbGVkX0JhY2tpbmdfCiAKIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV9wcmVfcmVuZGVyX3JlcXVlc3RfY2xlYXIoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSog
cHJpdikKIHsKLSAgICBFaW5hX0lubGlzdCoqIHBsID0gJnByaXYtPnJlbmRlci5wcmVfcmVuZGVy
X3JlcXVlc3RzOwotICAgIEVpbmFfSW5saXN0KiBpdGVyID0gKnBsLCAqIHRtcDsKKyAgICBFaW5h
X0lubGlzdCoqIHByZVJlbmRlckxpc3QgPSAmcHJpdi0+cmVuZGVyLnByZVJlbmRlclJlcXVlc3Rz
OworICAgIEVpbmFfSW5saXN0KiBpdGVyID0gKnByZVJlbmRlckxpc3QsICogdG1wOwogICAgIHdo
aWxlIChpdGVyKSB7Ci0gICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJf
UmVxdWVzdCogciA9CisgICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJf
UmVxdWVzdCogcmVxdWVzdCA9CiAgICAgICAgICAgICBFSU5BX0lOTElTVF9DT05UQUlORVJfR0VU
KAogICAgICAgICAgICAgICAgIGl0ZXIsIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5k
ZXJfUmVxdWVzdCk7CiAgICAgICAgIHRtcCA9IGl0ZXItPm5leHQ7Ci0gICAgICAgICpwbCA9IGVp
bmFfaW5saXN0X3JlbW92ZSgqcGwsIGl0ZXIpOworICAgICAgICAqcHJlUmVuZGVyTGlzdCA9IGVp
bmFfaW5saXN0X3JlbW92ZSgqcHJlUmVuZGVyTGlzdCwgaXRlcik7CiAgICAgICAgIGl0ZXIgPSB0
bXA7Ci0gICAgICAgIGZyZWUocik7CisgICAgICAgIGZyZWUocmVxdWVzdCk7CiAgICAgfQogfQog
CiAvKiBhc3N1bWVzIHByaXYtPnByb2Nlc3MucHJlX2NiIHdhcyBjYWxsZWQgaWYgcmVxdWlyZWQh
ICovCiBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1
ZXN0X3Byb2Nlc3Nfc2luZ2xlKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYpCiB7
Ci0gICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0KiByZXE7Cisg
ICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0KiByZXF1ZXN0Owog
ICAgIEVpbmFfUmVjdGFuZ2xlIGFyZWE7Ci0gICAgRXdrX1RpbGVfTWF0cml4KiB0bSA9IHByaXYt
Pm1vZGVsLm1hdHJpeDsKKyAgICBFd2tfVGlsZV9NYXRyaXgqIHRpbGVNYXRyaXggPSBwcml2LT5t
b2RlbC5tYXRyaXg7CiAgICAgRXdrX1RpbGUqIHRpbGU7Ci0gICAgRXdrX1RpbGVfVW51c2VkX0Nh
Y2hlKiB0dWM7Ci0gICAgdW5zaWduZWQgbG9uZyBjb2wsIHJvdzsKKyAgICBFd2tfVGlsZV9VbnVz
ZWRfQ2FjaGUqIHRpbGVkVW51c2VkQ2FjaGU7CisgICAgdW5zaWduZWQgbG9uZyBjb2x1bW4sIHJv
dzsKICAgICBmbG9hdCB6b29tOwogICAgIGRvdWJsZSBsYXN0X3VzZWQgPSBlY29yZV9sb29wX3Rp
bWVfZ2V0KCk7CiAKLSAgICByZXEgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRl
cl9yZXF1ZXN0X2ZpcnN0KHByaXYpOwotICAgIGlmICghcmVxKQorICAgIHJlcXVlc3QgPSBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2ZpcnN0KHByaXYpOworICAg
IGlmICghcmVxdWVzdCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgY29sID0gcmVxLT5jb2w7Ci0g
ICAgcm93ID0gcmVxLT5yb3c7Ci0gICAgem9vbSA9IHJlcS0+em9vbTsKKyAgICBjb2x1bW4gPSBy
ZXF1ZXN0LT5jb2x1bW47CisgICAgcm93ID0gcmVxdWVzdC0+cm93OworICAgIHpvb20gPSByZXF1
ZXN0LT56b29tOwogCi0gICAgaWYgKGV3a190aWxlX21hdHJpeF90aWxlX2V4YWN0X2V4aXN0cyh0
bSwgY29sLCByb3csIHpvb20pKSB7Ci0gICAgICAgIERCRygibm8gcHJlLXJlbmRlciByZXF1aXJl
ZCBmb3IgdGlsZSAlbHUsJWx1IEAgJWYuIiwgY29sLCByb3csIHpvb20pOworICAgIGlmIChld2tf
dGlsZV9tYXRyaXhfdGlsZV9leGFjdF9leGlzdHModGlsZU1hdHJpeCwgY29sdW1uLCByb3csIHpv
b20pKSB7CisgICAgICAgIERCRygibm8gcHJlLXJlbmRlciByZXF1aXJlZCBmb3IgdGlsZSAlbHUs
JWx1IEAgJWYuIiwgY29sdW1uLCByb3csIHpvb20pOwogICAgICAgICBnb3RvIGVuZDsKICAgICB9
CiAKLSAgICB0aWxlID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfbmV3KHByaXYsIGNv
bCwgcm93LCB6b29tKTsKKyAgICB0aWxlID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVf
bmV3KHByaXYsIGNvbHVtbiwgcm93LCB6b29tKTsKICAgICBpZiAoIXRpbGUpCiAgICAgICAgIGdv
dG8gZW5kOwogCkBAIC0zNDQsMzMgKzM0NCwzMyBAQCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X3Byb2Nlc3Nfc2luZ2xlKEV3a19UaWxlZAog
ICAgIGFyZWEudyA9IHByaXYtPnZpZXcudGlsZS53aWR0aDsKICAgICBhcmVhLmggPSBwcml2LT52
aWV3LnRpbGUuaGVpZ2h0OwogCi0gICAgcHJpdi0+cmVuZGVyLmNiKHByaXYtPnJlbmRlci5kYXRh
LCB0aWxlLCAmYXJlYSk7CisgICAgcHJpdi0+cmVuZGVyLmNhbGxiYWNrKHByaXYtPnJlbmRlci5k
YXRhLCB0aWxlLCAmYXJlYSk7CiAgICAgZXZhc19vYmplY3RfaW1hZ2VfZGF0YV91cGRhdGVfYWRk
KAogICAgICAgICB0aWxlLT5pbWFnZSwKICAgICAgICAgYXJlYS54LCBhcmVhLnksIGFyZWEudywg
YXJlYS5oKTsKLSAgICBld2tfdGlsZV9tYXRyaXhfdGlsZV91cGRhdGVzX2NsZWFyKHRtLCB0aWxl
KTsKKyAgICBld2tfdGlsZV9tYXRyaXhfdGlsZV91cGRhdGVzX2NsZWFyKHRpbGVNYXRyaXgsIHRp
bGUpOwogCi0gICAgZXdrX3RpbGVfbWF0cml4X3RpbGVfcHV0KHRtLCB0aWxlLCBsYXN0X3VzZWQp
OworICAgIGV3a190aWxlX21hdHJpeF90aWxlX3B1dCh0aWxlTWF0cml4LCB0aWxlLCBsYXN0X3Vz
ZWQpOwogCiBlbmQ6Ci0gICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVx
dWVzdF9kZWwocHJpdiwgcmVxKTsKLSAgICB0dWMgPSBld2tfdGlsZV9tYXRyaXhfdW51c2VkX2Nh
Y2hlX2dldChwcml2LT5tb2RlbC5tYXRyaXgpOwotICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9h
dXRvX2ZsdXNoKHR1Yyk7CisgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJf
cmVxdWVzdF9kZWwocHJpdiwgcmVxdWVzdCk7CisgICAgdGlsZWRVbnVzZWRDYWNoZSA9IGV3a190
aWxlX21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7CisgICAgZXdr
X3RpbGVfdW51c2VkX2NhY2hlX2F1dG9fZmx1c2godGlsZWRVbnVzZWRDYWNoZSk7CiB9CiAKIHN0
YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcHJvY2Vzc19pZGxl
cl9jYih2b2lkKiBkYXRhKQogewogICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHBy
aXYgPSBzdGF0aWNfY2FzdDxFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKj4oZGF0YSk7CiAK
LSAgICBpZiAocHJpdi0+cHJvY2Vzcy5wcmVfY2IpCi0gICAgICAgIGRhdGEgPSBwcml2LT5wcm9j
ZXNzLnByZV9jYihwcml2LT5wcm9jZXNzLnByZV9kYXRhLCBwcml2LT5zZWxmKTsKKyAgICBpZiAo
cHJpdi0+cHJvY2Vzcy5wcmVDYWxsYmFjaykKKyAgICAgICAgZGF0YSA9IHByaXYtPnByb2Nlc3Mu
cHJlQ2FsbGJhY2socHJpdi0+cHJvY2Vzcy5wcmVEYXRhLCBwcml2LT5zZWxmKTsKIAogICAgIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfcHJvY2Vzc19zaW5nbGUo
cHJpdik7CiAKLSAgICBpZiAocHJpdi0+cHJvY2Vzcy5wb3N0X2NiKQotICAgICAgICBwcml2LT5w
cm9jZXNzLnBvc3RfY2IocHJpdi0+cHJvY2Vzcy5wb3N0X2RhdGEsIGRhdGEsIHByaXYtPnNlbGYp
OworICAgIGlmIChwcml2LT5wcm9jZXNzLnBvc3RDYWxsYmFjaykKKyAgICAgICAgcHJpdi0+cHJv
Y2Vzcy5wb3N0Q2FsbGJhY2socHJpdi0+cHJvY2Vzcy5wb3N0RGF0YSwgZGF0YSwgcHJpdi0+c2Vs
Zik7CiAKLSAgICBpZiAoIXByaXYtPnJlbmRlci5wcmVfcmVuZGVyX3JlcXVlc3RzKSB7CisgICAg
aWYgKCFwcml2LT5yZW5kZXIucHJlUmVuZGVyUmVxdWVzdHMpIHsKICAgICAgICAgcHJpdi0+cmVu
ZGVyLmlkbGVyID0gMDsKICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CiAgICAgfQpAQCAtNDIw
LDM4ICs0MjAsMzggQEAgc3RhdGljIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
ZW5hYmxlX3JlbmRlcihFd2tfVGlsZWRfQmFja2luZ19TdG9yZV8KIAogc3RhdGljIGlubGluZSBF
aW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZmlsbChFd2tfVGlsZWRfQmFj
a2luZ19TdG9yZV9EYXRhKiBwcml2LCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKiBpdGVt
LCB1bnNpZ25lZCBsb25nIGNvbHVtbiwgdW5zaWduZWQgbG9uZyByb3cpCiB7Ci0gICAgdW5zaWdu
ZWQgbG9uZyBtX2NvbCA9IHByaXYtPm1vZGVsLmJhc2UuY29sICsgY29sdW1uOwotICAgIHVuc2ln
bmVkIGxvbmcgbV9yb3cgPSBwcml2LT5tb2RlbC5iYXNlLnJvdyArIHJvdzsKLSAgICBkb3VibGUg
bGFzdF91c2VkID0gZWNvcmVfbG9vcF90aW1lX2dldCgpOworICAgIHVuc2lnbmVkIGxvbmcgbUNv
bHVtbiA9IHByaXYtPm1vZGVsLmJhc2UuY29sdW1uICsgY29sdW1uOworICAgIHVuc2lnbmVkIGxv
bmcgbVJvdyA9IHByaXYtPm1vZGVsLmJhc2Uucm93ICsgcm93OworICAgIGRvdWJsZSBsYXN0VXNl
ZCA9IGVjb3JlX2xvb3BfdGltZV9nZXQoKTsKIAotICAgIGlmIChtX2NvbCA+PSBwcml2LT5tb2Rl
bC5jdXIuY29scyB8fCBtX3JvdyA+PSBwcml2LT5tb2RlbC5jdXIucm93cykgeworICAgIGlmICht
Q29sdW1uID49IHByaXYtPm1vZGVsLmN1cnJlbnQuY29sdW1ucyB8fCBtUm93ID49IHByaXYtPm1v
ZGVsLmN1cnJlbnQucm93cykgewogICAgICAgICBpZiAoaXRlbS0+dGlsZSkKLSAgICAgICAgICAg
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2Rpc3NvY2lhdGUocHJpdiwgaXRlbSwgbGFz
dF91c2VkKTsKKyAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2Rpc3Nv
Y2lhdGUocHJpdiwgaXRlbSwgbGFzdFVzZWQpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIEV3a19U
aWxlKiB0aWxlOwogICAgICAgICBjb25zdCBmbG9hdCB6b29tID0gcHJpdi0+dmlldy50aWxlLnpv
b207CiAKICAgICAgICAgaWYgKGl0ZW0tPnRpbGUpIHsKICAgICAgICAgICAgIEV3a19UaWxlKiBv
bGQgPSBpdGVtLT50aWxlOwotICAgICAgICAgICAgaWYgKG9sZC0+cm93ICE9IG1fcm93IHx8IG9s
ZC0+Y29sICE9IG1fY29sIHx8IG9sZC0+em9vbSAhPSB6b29tKQotICAgICAgICAgICAgICAgIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2Rpc3NvY2lhdGUocHJpdiwgaXRlbSwgbGFzdF91
c2VkKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKG9sZC0+cm93ID09IG1fcm93ICYmIG9sZC0+Y29s
ID09IG1fY29sICYmIG9sZC0+em9vbSA9PSB6b29tKQorICAgICAgICAgICAgaWYgKG9sZC0+cm93
ICE9IG1Sb3cgfHwgb2xkLT5jb2wgIT0gbUNvbHVtbiB8fCBvbGQtPnpvb20gIT0gem9vbSkKKyAg
ICAgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9kaXNzb2NpYXRlKHBy
aXYsIGl0ZW0sIGxhc3RVc2VkKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKG9sZC0+cm93ID09IG1S
b3cgJiYgb2xkLT5jb2wgPT0gbUNvbHVtbiAmJiBvbGQtPnpvb20gPT0gem9vbSkKICAgICAgICAg
ICAgICAgICBnb3RvIGVuZDsKICAgICAgICAgfQogCi0gICAgICAgIHRpbGUgPSBld2tfdGlsZV9t
YXRyaXhfdGlsZV9leGFjdF9nZXQocHJpdi0+bW9kZWwubWF0cml4LCBtX2NvbCwgbV9yb3csIHpv
b20pOworICAgICAgICB0aWxlID0gZXdrX3RpbGVfbWF0cml4X3RpbGVfZXhhY3RfZ2V0KHByaXYt
Pm1vZGVsLm1hdHJpeCwgbUNvbHVtbiwgbVJvdywgem9vbSk7CiAKICAgICAgICAgaWYgKCF0aWxl
KSB7CiAgICAgICAgICAgICAvKiBOT1RFOiBpdCBuZXZlciByZXR1cm5zIDAgaWYgaXQtPnRpbGUg
d2FzIHNldCEgKi8KICAgICAgICAgICAgIGlmIChpdGVtLT50aWxlKSB7CiAgICAgICAgICAgICAg
ICAgQ1JJVElDQUwoIml0LT50aWxlPSVwLCBidXQgaXQgc2hvdWxkIGJlIDAhIiwgaXRlbS0+dGls
ZSk7CiAgICAgICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfZGlzc29j
aWF0ZShwcml2LCBpdGVtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbGFzdF91c2VkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RVc2VkKTsKICAgICAgICAgICAgIH0K
IAogICAgICAgICAgICAgLyogRG8gbm90IGFkZCBuZXcgcmVxdWVzdHMgdG8gdGhlIHJlbmRlciBx
dWV1ZSAqLwogICAgICAgICAgICAgaWYgKCFwcml2LT5yZW5kZXIuc3VzcGVuZCkgewotICAgICAg
ICAgICAgICAgIHRpbGUgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9uZXcocHJpdiwg
bV9jb2wsIG1fcm93LCB6b29tKTsKKyAgICAgICAgICAgICAgICB0aWxlID0gX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX3RpbGVfbmV3KHByaXYsIG1Db2x1bW4sIG1Sb3csIHpvb20pOwogICAgICAg
ICAgICAgICAgIGlmICghdGlsZSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEVJTkFfRkFM
U0U7CiAgICAgICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfYXNzb2Np
YXRlKHByaXYsIHRpbGUsIGl0ZW0pOwpAQCAtNDU5LDcgKzQ1OSw3IEBAIHN0YXRpYyBpbmxpbmUg
RWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2ZpbGwoRXdrX1RpbGVkX0Jh
Y2tpbmdfU3RvCiAgICAgICAgIH0gZWxzZSBpZiAodGlsZSAhPSBpdGVtLT50aWxlKSB7CiAgICAg
ICAgICAgICBpZiAoaXRlbS0+dGlsZSkKICAgICAgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfdGlsZV9kaXNzb2NpYXRlKHByaXYsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLCBsYXN0X3VzZWQpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbSwg
bGFzdFVzZWQpOwogICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfYXNz
b2NpYXRlKHByaXYsIHRpbGUsIGl0ZW0pOwogICAgICAgICB9CiAKQEAgLTQ3MywzMSArNDczLDMx
IEBAIGVuZDoKIAogc3RhdGljIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0qIF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9pdGVtX2FkZChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBw
cml2LCB1bnNpZ25lZCBsb25nIGNvbHVtbiwgdW5zaWduZWQgbG9uZyByb3cpCiB7Ci0gICAgRXdr
X1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSogaXQ7Ci0gICAgRXZhc19Db29yZCB4LCB5LCB0dywg
dGg7CisgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSogaXRlbTsKKyAgICBFdmFzX0Nv
b3JkIHgsIHksIHRpbGVXaWR0aCwgdGlsZUhlaWdodDsKIAotICAgIERCRygibz0lcCIsIHByaXYt
PnNlbGYpOworICAgIERCRygiZXdrVGlsZSVwIiwgcHJpdi0+c2VsZik7CiAKLSAgICBpdCA9IHN0
YXRpY19jYXN0PEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0qPihtYWxsb2Moc2l6ZW9mKCpp
dCkpKTsKLSAgICBpZiAoIWl0KQorICAgIGl0ZW0gPSBzdGF0aWNfY2FzdDxFd2tfVGlsZWRfQmFj
a2luZ19TdG9yZV9JdGVtKj4obWFsbG9jKHNpemVvZigqaXRlbSkpKTsKKyAgICBpZiAoIWl0ZW0p
CiAgICAgICAgIHJldHVybiAwOwogCi0gICAgdHcgPSBwcml2LT52aWV3LnRpbGUud2lkdGg7Ci0g
ICAgdGggPSBwcml2LT52aWV3LnRpbGUuaGVpZ2h0OwotICAgIHggPSBwcml2LT52aWV3Lm9mZnNl
dC5iYXNlLnggKyBwcml2LT52aWV3LnggKyB0dyAgKmNvbHVtbjsKLSAgICB5ID0gcHJpdi0+dmll
dy5vZmZzZXQuYmFzZS55ICsgcHJpdi0+dmlldy55ICsgdGggICpyb3c7CisgICAgdGlsZVdpZHRo
ID0gcHJpdi0+dmlldy50aWxlLndpZHRoOworICAgIHRpbGVIZWlnaHQgPSBwcml2LT52aWV3LnRp
bGUuaGVpZ2h0OworICAgIHggPSBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggKyBwcml2LT52aWV3
LnggKyB0aWxlV2lkdGggICpjb2x1bW47CisgICAgeSA9IHByaXYtPnZpZXcub2Zmc2V0LmJhc2Uu
eSArIHByaXYtPnZpZXcueSArIHRpbGVIZWlnaHQgICpyb3c7CiAKLSAgICBpdC0+dGlsZSA9IDA7
CisgICAgaXRlbS0+dGlsZSA9IDA7CiAKLSAgICBpdC0+c21vb3RoX3NjYWxlID0gcHJpdi0+dmll
dy50aWxlLnpvb21fd2Vha19zbW9vdGhfc2NhbGU7Ci0gICAgX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX2l0ZW1fbW92ZShpdCwgeCwgeSk7Ci0gICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0
ZW1fcmVzaXplKGl0LCB0dywgdGgpOwotICAgIGlmICghX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X2l0ZW1fZmlsbChwcml2LCBpdCwgY29sdW1uLCByb3cpKSB7Ci0gICAgICAgIGZyZWUoaXQpOwor
ICAgIGl0ZW0tPnNtb290aF9zY2FsZSA9IHByaXYtPnZpZXcudGlsZS56b29tV2Vha1Ntb290aFNj
YWxlOworICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX21vdmUoaXRlbSwgeCwgeSk7
CisgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcmVzaXplKGl0ZW0sIHRpbGVXaWR0
aCwgdGlsZUhlaWdodCk7CisgICAgaWYgKCFfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9m
aWxsKHByaXYsIGl0ZW0sIGNvbHVtbiwgcm93KSkgeworICAgICAgICBmcmVlKGl0ZW0pOwogICAg
ICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICByZXR1cm4gaXQ7CisgICAgcmV0dXJuIGl0ZW07
CiB9CiAKIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2RlbChFd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2LCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9J
dGVtKiBpdGVtKQpAQCAtNTM4LDIyICs1MzgsMjIgQEAgc3RhdGljIHZvaWQgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX3ZpZXdfY29sc19lbmRfZGVsKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0QK
ICAgICBuID0gKCpwX3JvdyktPmxhc3Q7CiAKICAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkr
KykgewotICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKiBpdDsKLSAgICAgICAg
aXQgPSBFSU5BX0lOTElTVF9DT05UQUlORVJfR0VUKG4sIEV3a19UaWxlZF9CYWNraW5nX1N0b3Jl
X0l0ZW0pOworICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKiBpdGVtOworICAg
ICAgICBpdGVtID0gRUlOQV9JTkxJU1RfQ09OVEFJTkVSX0dFVChuLCBFd2tfVGlsZWRfQmFja2lu
Z19TdG9yZV9JdGVtKTsKICAgICAgICAgbiA9IG4tPnByZXY7Ci0gICAgICAgICpwX3JvdyA9IGVp
bmFfaW5saXN0X3JlbW92ZSgqcF9yb3csIEVJTkFfSU5MSVNUX0dFVChpdCkpOwotICAgICAgICBf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9kZWwocHJpdiwgaXQpOworICAgICAgICAqcF9y
b3cgPSBlaW5hX2lubGlzdF9yZW1vdmUoKnBfcm93LCBFSU5BX0lOTElTVF9HRVQoaXRlbSkpOwor
ICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9kZWwocHJpdiwgaXRlbSk7CiAg
ICAgfQogfQogCi1zdGF0aWMgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3
X2NvbHNfZW5kX2FkZChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2LCBFaW5hX0lu
bGlzdCoqIHBfcm93LCB1bnNpZ25lZCBpbnQgYmFzZV9jb2x1bW4sIHVuc2lnbmVkIGludCBjb3Vu
dCkKK3N0YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfY29sc19l
bmRfYWRkKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYsIEVpbmFfSW5saXN0Kiog
cF9yb3csIHVuc2lnbmVkIGludCBiYXNlQ29sdW1uLCB1bnNpZ25lZCBpbnQgY291bnQpCiB7CiAg
ICAgdW5zaWduZWQgaW50IGksIHIgPSBwX3JvdyAtIHByaXYtPnZpZXcuaXRlbXM7CiAKLSAgICBm
b3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKywgYmFzZV9jb2x1bW4rKykgeworICAgIGZvciAoaSA9
IDA7IGkgPCBjb3VudDsgaSsrLCBiYXNlQ29sdW1uKyspIHsKICAgICAgICAgRXdrX1RpbGVkX0Jh
Y2tpbmdfU3RvcmVfSXRlbSogaXQ7CiAKLSAgICAgICAgaXQgPSBfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfaXRlbV9hZGQocHJpdiwgYmFzZV9jb2x1bW4sIHIpOworICAgICAgICBpdCA9IF9ld2tf
dGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2FkZChwcml2LCBiYXNlQ29sdW1uLCByKTsKICAgICAg
ICAgaWYgKCFpdCkgewogICAgICAgICAgICAgQ1JJVElDQUwoImZhaWxlZCB0byBhZGQgY29sdW1u
ICV1IG9mICV1IGluIHJvdyAldS4iLCBpLCBjb3VudCwgcik7CiAgICAgICAgICAgICBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfdmlld19jb2xzX2VuZF9kZWwocHJpdiwgcF9yb3csIGkpOwpAQCAt
NTY4LDEwICs1NjgsMTAgQEAgc3RhdGljIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfdmlld19jb2xzX2VuZF9hZGQoRXdrX1RpbGVkX0JhY2tpbmdfU3QKIHN0YXRpYyB2b2lkIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3Jvd19kZWwoRXdrX1RpbGVkX0JhY2tpbmdfU3Rv
cmVfRGF0YSogcHJpdiwgRWluYV9Jbmxpc3QqIHJvdykKIHsKICAgICB3aGlsZSAocm93KSB7Ci0g
ICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0qIGl0OwotICAgICAgICBpdCA9IEVJ
TkFfSU5MSVNUX0NPTlRBSU5FUl9HRVQocm93LCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVt
KTsKKyAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSogaXRlbTsKKyAgICAgICAg
aXRlbSA9IEVJTkFfSU5MSVNUX0NPTlRBSU5FUl9HRVQocm93LCBFd2tfVGlsZWRfQmFja2luZ19T
dG9yZV9JdGVtKTsKICAgICAgICAgcm93ID0gcm93LT5uZXh0OwotICAgICAgICBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfaXRlbV9kZWwocHJpdiwgaXQpOworICAgICAgICBfZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfaXRlbV9kZWwocHJpdiwgaXRlbSk7CiAgICAgfQogfQogCkBAIC02MTEsOCAr
NjExLDggQEAgc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3JlbmRlcih2b2lk
KiBkYXRhLCBFd2tfVGlsZSogdGlsZSwgY29uc3QgRWkKICAgICBpZiAocHJpdi0+dmlldy50aWxl
LndpZHRoICE9IHRpbGUtPndpZHRoIHx8IHByaXYtPnZpZXcudGlsZS5oZWlnaHQgIT0gdGlsZS0+
aGVpZ2h0KQogICAgICAgICByZXR1cm47IC8vIHRvZG86IHJlbW92ZSBtZSBsYXRlciwgZG9uJ3Qg
ZXZlbiBmbGFnIGFzIGRpcnR5IQogCi0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4ocHJp
di0+cmVuZGVyLmNiKTsKLSAgICBpZiAoIXByaXYtPnJlbmRlci5jYihwcml2LT5yZW5kZXIuZGF0
YSwgdGlsZSwgYXJlYSkpCisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4ocHJpdi0+cmVu
ZGVyLmNhbGxiYWNrKTsKKyAgICBpZiAoIXByaXYtPnJlbmRlci5jYWxsYmFjayhwcml2LT5yZW5k
ZXIuZGF0YSwgdGlsZSwgYXJlYSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGV2YXNfb2JqZWN0
X2ltYWdlX2RhdGFfdXBkYXRlX2FkZCh0aWxlLT5pbWFnZSwgYXJlYS0+eCwgYXJlYS0+eSwgYXJl
YS0+dywgYXJlYS0+aCk7CkBAIC02MjksMjcgKzYyOSwyNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX21vZGVsX21hdHJpeF9jcmVhdGUoRXdrX1RpbGVkX0Jh
Y2tpbgogICAgICAgICBld2tfdGlsZV9tYXRyaXhfZnJlZShwcml2LT5tb2RlbC5tYXRyaXgpOwog
ICAgIH0KIAotICAgIHByaXYtPm1vZGVsLm1hdHJpeCA9IGV3a190aWxlX21hdHJpeF9uZXcodGls
ZVVudXNlZENhY2hlLCBwcml2LT5tb2RlbC5jdXIuY29scywgcHJpdi0+bW9kZWwuY3VyLnJvd3Ms
IHByaXYtPmNzcGFjZSwgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3JlbmRlciwgcHJpdik7Cisg
ICAgcHJpdi0+bW9kZWwubWF0cml4ID0gZXdrX3RpbGVfbWF0cml4X25ldyh0aWxlVW51c2VkQ2Fj
aGUsIHByaXYtPm1vZGVsLmN1cnJlbnQuY29sdW1ucywgcHJpdi0+bW9kZWwuY3VycmVudC5yb3dz
LCBwcml2LT5jb2xvclNwYWNlLCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcmVuZGVyLCBwcml2
KTsKIH0KIAogc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X21lbWJl
cl9kZWwoRXZhc19PYmplY3QqIGV3a1RpbGUsIEV2YXNfT2JqZWN0KiBtZW1iZXIpCiB7CiAgICAg
UFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4oZXdrVGlsZSwgcHJpdik7Ci0gICAgaWYgKCFwcml2LT5j
b250ZW50c19jbGlwcGVyKQorICAgIGlmICghcHJpdi0+Y29udGVudHNDbGlwcGVyKQogICAgICAg
ICByZXR1cm47CiAgICAgZXZhc19vYmplY3RfY2xpcF91bnNldChtZW1iZXIpOwotICAgIGlmICgh
ZXZhc19vYmplY3RfY2xpcGVlc19nZXQocHJpdi0+Y29udGVudHNfY2xpcHBlcikpCi0gICAgICAg
IGV2YXNfb2JqZWN0X2hpZGUocHJpdi0+Y29udGVudHNfY2xpcHBlcik7CisgICAgaWYgKCFldmFz
X29iamVjdF9jbGlwZWVzX2dldChwcml2LT5jb250ZW50c0NsaXBwZXIpKQorICAgICAgICBldmFz
X29iamVjdF9oaWRlKHByaXYtPmNvbnRlbnRzQ2xpcHBlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9tZW1iZXJfYWRkKEV2YXNfT2JqZWN0KiBld2tU
aWxlLCBFdmFzX09iamVjdCogbWVtYmVyKQogewogICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJO
KGV3a1RpbGUsIHByaXYpOwotICAgIGlmICghcHJpdi0+Y29udGVudHNfY2xpcHBlcikKKyAgICBp
ZiAoIXByaXYtPmNvbnRlbnRzQ2xpcHBlcikKICAgICAgICAgcmV0dXJuOwotICAgIGV2YXNfb2Jq
ZWN0X2NsaXBfc2V0KG1lbWJlciwgcHJpdi0+Y29udGVudHNfY2xpcHBlcik7CisgICAgZXZhc19v
YmplY3RfY2xpcF9zZXQobWVtYmVyLCBwcml2LT5jb250ZW50c0NsaXBwZXIpOwogICAgIGlmIChl
dmFzX29iamVjdF92aXNpYmxlX2dldChld2tUaWxlKSkKLSAgICAgICAgZXZhc19vYmplY3Rfc2hv
dyhwcml2LT5jb250ZW50c19jbGlwcGVyKTsKKyAgICAgICAgZXZhc19vYmplY3Rfc2hvdyhwcml2
LT5jb250ZW50c0NsaXBwZXIpOwogfQogCiAjaWZkZWYgREVCVUdfTUVNX0xFQUtTCkBAIC02OTEs
NyArNjkxLDcgQEAgc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2Fk
ZChFdmFzX09iamVjdCogZXdrVGlsZSkKIHsKICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9E
YXRhKiBwcml2OwogCi0gICAgREJHKCJvPSVwIiwgZXdrVGlsZSk7CisgICAgREJHKCJld2tUaWxl
PSVwIiwgZXdrVGlsZSk7CiAKICAgICBwcml2ID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfRGF0YSo+KGNhbGxvYygxLCBzaXplb2YoKnByaXYpKSk7CiAgICAgaWYgKCFwcml2
KQpAQCAtNzA4LDMzICs3MDgsMzMgQEAgc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX3NtYXJ0X2FkZChFdmFzX09iamVjdCogZXdrVGlsZSkKICAgICBwcml2LT52aWV3Lm9mZnNl
dC5iYXNlLnggPSAwOwogICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSA9IDA7CiAKLSAgICBw
cml2LT5tb2RlbC5iYXNlLmNvbCA9IDA7CisgICAgcHJpdi0+bW9kZWwuYmFzZS5jb2x1bW4gPSAw
OwogICAgIHByaXYtPm1vZGVsLmJhc2Uucm93ID0gMDsKLSAgICBwcml2LT5tb2RlbC5jdXIuY29s
cyA9IDE7Ci0gICAgcHJpdi0+bW9kZWwuY3VyLnJvd3MgPSAxOwotICAgIHByaXYtPm1vZGVsLm9s
ZC5jb2xzID0gMDsKKyAgICBwcml2LT5tb2RlbC5jdXJyZW50LmNvbHVtbnMgPSAxOworICAgIHBy
aXYtPm1vZGVsLmN1cnJlbnQucm93cyA9IDE7CisgICAgcHJpdi0+bW9kZWwub2xkLmNvbHVtbnMg
PSAwOwogICAgIHByaXYtPm1vZGVsLm9sZC5yb3dzID0gMDsKICAgICBwcml2LT5tb2RlbC53aWR0
aCA9IDA7CiAgICAgcHJpdi0+bW9kZWwuaGVpZ2h0ID0gMDsKICAgICBwcml2LT5yZW5kZXIuc3Vz
cGVuZCA9IEVJTkFfRkFMU0U7Ci0gICAgcHJpdi0+Y3NwYWNlID0gRVZBU19DT0xPUlNQQUNFX0FS
R0I4ODg4OyAvLyBUT0RPOiBkZXRlY3QgaXQuCisgICAgcHJpdi0+Y29sb3JTcGFjZSA9IEVWQVNf
Q09MT1JTUEFDRV9BUkdCODg4ODsgLy8gVE9ETzogZGV0ZWN0IGl0LgogCiAgICAgZXZhc19vYmpl
Y3Rfc21hcnRfZGF0YV9zZXQoZXdrVGlsZSwgcHJpdik7CiAgICAgX3BhcmVudF9zYy5hZGQoZXdr
VGlsZSk7CiAKLSAgICBwcml2LT5jb250ZW50c19jbGlwcGVyID0gZXZhc19vYmplY3RfcmVjdGFu
Z2xlX2FkZCgKKyAgICBwcml2LT5jb250ZW50c0NsaXBwZXIgPSBldmFzX29iamVjdF9yZWN0YW5n
bGVfYWRkKAogICAgICAgICBldmFzX29iamVjdF9ldmFzX2dldChld2tUaWxlKSk7Ci0gICAgZXZh
c19vYmplY3RfbW92ZShwcml2LT5jb250ZW50c19jbGlwcGVyLCAwLCAwKTsKLSAgICBldmFzX29i
amVjdF9yZXNpemUocHJpdi0+Y29udGVudHNfY2xpcHBlciwKKyAgICBldmFzX29iamVjdF9tb3Zl
KHByaXYtPmNvbnRlbnRzQ2xpcHBlciwgMCwgMCk7CisgICAgZXZhc19vYmplY3RfcmVzaXplKHBy
aXYtPmNvbnRlbnRzQ2xpcHBlciwKICAgICAgICAgICAgICAgICAgICAgICAgcHJpdi0+bW9kZWwu
d2lkdGgsIHByaXYtPm1vZGVsLmhlaWdodCk7Ci0gICAgZXZhc19vYmplY3RfY29sb3Jfc2V0KHBy
aXYtPmNvbnRlbnRzX2NsaXBwZXIsIDI1NSwgMjU1LCAyNTUsIDI1NSk7Ci0gICAgZXZhc19vYmpl
Y3Rfc2hvdyhwcml2LT5jb250ZW50c19jbGlwcGVyKTsKLSAgICBldmFzX29iamVjdF9zbWFydF9t
ZW1iZXJfYWRkKHByaXYtPmNvbnRlbnRzX2NsaXBwZXIsIGV3a1RpbGUpOworICAgIGV2YXNfb2Jq
ZWN0X2NvbG9yX3NldChwcml2LT5jb250ZW50c0NsaXBwZXIsIDI1NSwgMjU1LCAyNTUsIDI1NSk7
CisgICAgZXZhc19vYmplY3Rfc2hvdyhwcml2LT5jb250ZW50c0NsaXBwZXIpOworICAgIGV2YXNf
b2JqZWN0X3NtYXJ0X21lbWJlcl9hZGQocHJpdi0+Y29udGVudHNDbGlwcGVyLCBld2tUaWxlKTsK
IAogICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9tb2RlbF9tYXRyaXhfY3JlYXRlKHByaXYs
IDApOwogICAgIGV2YXNfb2JqZWN0X21vdmUocHJpdi0+YmFzZS5jbGlwcGVyLCAwLCAwKTsKICAg
ICBldmFzX29iamVjdF9yZXNpemUocHJpdi0+YmFzZS5jbGlwcGVyLCAwLCAwKTsKLSAgICBldmFz
X29iamVjdF9jbGlwX3NldChwcml2LT5jb250ZW50c19jbGlwcGVyLCBwcml2LT5iYXNlLmNsaXBw
ZXIpOworICAgIGV2YXNfb2JqZWN0X2NsaXBfc2V0KHByaXYtPmNvbnRlbnRzQ2xpcHBlciwgcHJp
di0+YmFzZS5jbGlwcGVyKTsKIAogI2lmZGVmIERFQlVHX01FTV9MRUFLUwogICAgIHByaXYtPnNp
Z191c3IgPSBlY29yZV9ldmVudF9oYW5kbGVyX2FkZApAQCAtNzQ1LDExICs3NDUsMTEgQEAgc3Rh
dGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2FkZChFdmFzX09iamVjdCog
ZXdrVGlsZSkKIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9kZWwo
RXZhc19PYmplY3QqIGV3a1RpbGUpCiB7CiAgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4oZXdr
VGlsZSwgcHJpdik7Ci0gICAgREJHKCJvPSVwIiwgZXdrVGlsZSk7Ci0gICAgRXdrX1RpbGVfVW51
c2VkX0NhY2hlKiB0dWM7CisgICAgREJHKCJld2tUaWxlJXAiLCBld2tUaWxlKTsKKyAgICBFd2tf
VGlsZV9VbnVzZWRfQ2FjaGUqIHRpbGVVbnVzZWRDYWNoZTsKIAotICAgIHR1YyA9IGV3a190aWxl
X21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7Ci0gICAgZXdrX3Rp
bGVfdW51c2VkX2NhY2hlX3VubG9ja19hcmVhKHR1Yyk7CisgICAgdGlsZVVudXNlZENhY2hlID0g
ZXdrX3RpbGVfbWF0cml4X3VudXNlZF9jYWNoZV9nZXQocHJpdi0+bW9kZWwubWF0cml4KTsKKyAg
ICBld2tfdGlsZV91bnVzZWRfY2FjaGVfdW5sb2NrX2FyZWEodGlsZVVudXNlZENhY2hlKTsKIAog
ICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9mbHVzaChwcml2KTsKIApAQCAtNzY0LDggKzc2
NCw4IEBAIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9kZWwoRXZh
c19PYmplY3QqIGV3a1RpbGUpCiAjZW5kaWYKIAogICAgIGV3a190aWxlX21hdHJpeF9mcmVlKHBy
aXYtPm1vZGVsLm1hdHJpeCk7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfbWVtYmVyX2RlbChwcml2
LT5jb250ZW50c19jbGlwcGVyKTsKLSAgICBldmFzX29iamVjdF9kZWwocHJpdi0+Y29udGVudHNf
Y2xpcHBlcik7CisgICAgZXZhc19vYmplY3Rfc21hcnRfbWVtYmVyX2RlbChwcml2LT5jb250ZW50
c0NsaXBwZXIpOworICAgIGV2YXNfb2JqZWN0X2RlbChwcml2LT5jb250ZW50c0NsaXBwZXIpOwog
CiAgICAgX3BhcmVudF9zYy5kZWwoZXdrVGlsZSk7CiAKQEAgLTc3NywyMyArNzc3LDIzIEBAIHN0
YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9kZWwoRXZhc19PYmplY3Qq
IGV3a1RpbGUpCiAKIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9t
b3ZlKEV2YXNfT2JqZWN0KiBld2tUaWxlLCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSkKIHsK
LSAgICBEQkcoIm89JXAsIG5ldyBwb3M6ICVkeCVkIiwgZXdrVGlsZSwgeCwgeSk7CisgICAgREJH
KCJld2tUaWxlJXAsIG5ldyBwb3M6ICVkeCVkIiwgZXdrVGlsZSwgeCwgeSk7CiAKICAgICBQUklW
X0RBVEFfR0VUX09SX1JFVFVSTihld2tUaWxlLCBwcml2KTsKIAotICAgIGlmIChwcml2LT5jaGFu
Z2VkLnBvcykKKyAgICBpZiAocHJpdi0+Y2hhbmdlZC5wb3NpdGlvbikKICAgICAgICAgcmV0dXJu
OwogCiAgICAgaWYgKHByaXYtPnZpZXcueCA9PSB4ICYmIHByaXYtPnZpZXcueSA9PSB5KQogICAg
ICAgICByZXR1cm47CiAKLSAgICBwcml2LT5jaGFuZ2VkLnBvcyA9IEVJTkFfVFJVRTsKKyAgICBw
cml2LT5jaGFuZ2VkLnBvc2l0aW9uID0gRUlOQV9UUlVFOwogICAgIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9jaGFuZ2VkKHByaXYpOwogfQogCiBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfc21hcnRfcmVzaXplKEV2YXNfT2JqZWN0KiBld2tUaWxlLCBFdmFzX0Nvb3JkIHdp
ZHRoLCBFdmFzX0Nvb3JkIGhlaWdodCkKIHsKLSAgICBEQkcoIm89JXAsIG5ldyBzaXplOiAlZHgl
ZCIsIGV3a1RpbGUsIHdpZHRoLCBoZWlnaHQpOworICAgIERCRygiZXdrVGlsZSVwLCBuZXcgc2l6
ZTogJWR4JWQiLCBld2tUaWxlLCB3aWR0aCwgaGVpZ2h0KTsKIAogICAgIFBSSVZfREFUQV9HRVRf
T1JfUkVUVVJOKGV3a1RpbGUsIHByaXYpOwogCkBAIC04MDksMjUgKzgwOSwyNSBAQCBzdGF0aWMg
dm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfcmVzaXplKEV2YXNfT2JqZWN0KiBl
d2tUaWxlLCBFdmFzX0NvbwogCiBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
cmVjYWxjX3JlbmRlcmVycyhFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2LCBFdmFz
X0Nvb3JkIHdpZHRoLCBFdmFzX0Nvb3JkIGhlaWdodCwgRXZhc19Db29yZCB0aWxlV2lkdGgsIEV2
YXNfQ29vcmQgdGlsZUhlaWdodCkKIHsKLSAgICBsb25nIGNvbHMsIHJvd3MsIG9sZF9yb3dzLCBv
bGRfY29sczsKLSAgICBJTkYoIm89JXAsIG5ldyBzaXplOiAlZHglZCIsIHByaXYtPnNlbGYsIHdp
ZHRoLCBoZWlnaHQpOworICAgIGxvbmcgY29sdW1ucywgcm93cywgb2xkUm93cywgb2xkQ29sczsK
KyAgICBJTkYoImV3a1RpbGUlcCwgbmV3IHNpemU6ICVkeCVkIiwgcHJpdi0+c2VsZiwgd2lkdGgs
IGhlaWdodCk7CiAKLSAgICBjb2xzID0gMSArIHN0YXRpY19jYXN0PGludD4oY2VpbChzdGF0aWNf
Y2FzdDxmbG9hdD4od2lkdGggLyB0aWxlV2lkdGgpKSk7CisgICAgY29sdW1ucyA9IDEgKyBzdGF0
aWNfY2FzdDxpbnQ+KGNlaWwoc3RhdGljX2Nhc3Q8ZmxvYXQ+KHdpZHRoIC8gdGlsZVdpZHRoKSkp
OwogICAgIHJvd3MgPSAxICsgc3RhdGljX2Nhc3Q8aW50PihjZWlsKHN0YXRpY19jYXN0PGZsb2F0
PihoZWlnaHQgLyB0aWxlSGVpZ2h0KSkpOwogCi0gICAgSU5GKCJvPSVwIG5ldyBncmlkIHNpemUg
Y29sczogJWxkLCByb3dzOiAlbGQsIHdhcyAlbGQsICVsZCIsCi0gICAgICAgIHByaXYtPnNlbGYs
IGNvbHMsIHJvd3MsIHByaXYtPnZpZXcuY29scywgcHJpdi0+dmlldy5yb3dzKTsKKyAgICBJTkYo
ImV3a1RpbGUlcCBuZXcgZ3JpZCBzaXplIGNvbHM6ICVsZCwgcm93czogJWxkLCB3YXMgJWxkLCAl
bGQiLAorICAgICAgICBwcml2LT5zZWxmLCBjb2x1bW5zLCByb3dzLCBwcml2LT52aWV3LmNvbHMs
IHByaXYtPnZpZXcucm93cyk7CiAKLSAgICBpZiAocHJpdi0+dmlldy5jb2xzID09IGNvbHMgJiYg
cHJpdi0+dmlldy5yb3dzID09IHJvd3MpCisgICAgaWYgKHByaXYtPnZpZXcuY29scyA9PSBjb2x1
bW5zICYmIHByaXYtPnZpZXcucm93cyA9PSByb3dzKQogICAgICAgICByZXR1cm47CiAKLSAgICBv
bGRfY29scyA9IHByaXYtPnZpZXcuY29sczsKLSAgICBvbGRfcm93cyA9IHByaXYtPnZpZXcucm93
czsKKyAgICBvbGRDb2xzID0gcHJpdi0+dmlldy5jb2xzOworICAgIG9sZFJvd3MgPSBwcml2LT52
aWV3LnJvd3M7CiAKLSAgICBpZiAocm93cyA8IG9sZF9yb3dzKSB7CisgICAgaWYgKHJvd3MgPCBv
bGRSb3dzKSB7CiAgICAgICAgIEVpbmFfSW5saXN0Kiogc3RhcnQsICoqZW5kOwogICAgICAgICBz
dGFydCA9IHByaXYtPnZpZXcuaXRlbXMgKyByb3dzOwotICAgICAgICBlbmQgPSBwcml2LT52aWV3
Lml0ZW1zICsgb2xkX3Jvd3M7CisgICAgICAgIGVuZCA9IHByaXYtPnZpZXcuaXRlbXMgKyBvbGRS
b3dzOwogICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19yb3dzX3JhbmdlX2Rl
bChwcml2LCBzdGFydCwgZW5kKTsKICAgICB9CiAKQEAgLTgzNywzNiArODM3LDM2IEBAIHN0YXRp
YyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9yZWNhbGNfcmVuZGVyZXJzKEV3a19UaWxl
ZF9CYWNraW5nX1N0b3JlX0RhCiAKICAgICBwcml2LT52aWV3Lml0ZW1zID0gc3RhdGljX2Nhc3Q8
RWluYV9Jbmxpc3QqKj4obmV3SXRlbXMpOwogICAgIHByaXYtPnZpZXcucm93cyA9IHJvd3M7Ci0g
ICAgcHJpdi0+dmlldy5jb2xzID0gY29sczsKLSAgICBpZiAocm93cyA+IG9sZF9yb3dzKSB7Ci0g
ICAgICAgIEVpbmFfSW5saXN0Kiogc3RhcnQgPSBwcml2LT52aWV3Lml0ZW1zICsgb2xkX3Jvd3M7
CisgICAgcHJpdi0+dmlldy5jb2xzID0gY29sdW1uczsKKyAgICBpZiAocm93cyA+IG9sZFJvd3Mp
IHsKKyAgICAgICAgRWluYV9Jbmxpc3QqKiBzdGFydCA9IHByaXYtPnZpZXcuaXRlbXMgKyBvbGRS
b3dzOwogICAgICAgICBFaW5hX0lubGlzdCoqIGVuZCA9IHByaXYtPnZpZXcuaXRlbXMgKyByb3dz
OwogICAgICAgICBmb3IgKDsgc3RhcnQgPCBlbmQ7IHN0YXJ0KyspIHsKICAgICAgICAgICAgICpz
dGFydCA9IDA7Ci0gICAgICAgICAgICBFaW5hX0Jvb2wgciA9IF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV92aWV3X2NvbHNfZW5kX2FkZChwcml2LCBzdGFydCwgMCwgY29scyk7CisgICAgICAgICAg
ICBFaW5hX0Jvb2wgciA9IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X2NvbHNfZW5kX2Fk
ZChwcml2LCBzdGFydCwgMCwgY29sdW1ucyk7CiAgICAgICAgICAgICBpZiAoIXIpIHsKLSAgICAg
ICAgICAgICAgICBDUklUSUNBTCgiZmFpbGVkIHRvIGFsbG9jYXRlICVsZCBjb2x1bW5zIiwgY29s
cyk7Ci0gICAgICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcm93c19y
YW5nZV9kZWwocHJpdiwgcHJpdi0+dmlldy5pdGVtcyArIG9sZF9yb3dzLCBzdGFydCk7Ci0gICAg
ICAgICAgICAgICAgcHJpdi0+dmlldy5yb3dzID0gb2xkX3Jvd3M7CisgICAgICAgICAgICAgICAg
Q1JJVElDQUwoImZhaWxlZCB0byBhbGxvY2F0ZSAlbGQgY29sdW1ucyIsIGNvbHVtbnMpOworICAg
ICAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3Jvd3NfcmFuZ2VfZGVs
KHByaXYsIHByaXYtPnZpZXcuaXRlbXMgKyBvbGRSb3dzLCBzdGFydCk7CisgICAgICAgICAgICAg
ICAgcHJpdi0+dmlldy5yb3dzID0gb2xkUm93czsKICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoY29scyAhPSBvbGRfY29s
cykgewotICAgICAgICBpbnQgdG9kbyA9IGNvbHMgLSBvbGRfY29sczsKKyAgICBpZiAoY29sdW1u
cyAhPSBvbGRDb2xzKSB7CisgICAgICAgIGludCB0b2RvID0gY29sdW1ucyAtIG9sZENvbHM7CiAg
ICAgICAgIEVpbmFfSW5saXN0Kiogc3RhcnQgPSBwcml2LT52aWV3Lml0ZW1zOwotICAgICAgICBF
aW5hX0lubGlzdCoqIGVuZCA9IHN0YXJ0ICsgc3RkOjptaW4ob2xkX3Jvd3MsIHJvd3MpOworICAg
ICAgICBFaW5hX0lubGlzdCoqIGVuZCA9IHN0YXJ0ICsgc3RkOjptaW4ob2xkUm93cywgcm93cyk7
CiAgICAgICAgIGlmICh0b2RvID4gMCkgewogICAgICAgICAgICAgZm9yICg7IHN0YXJ0IDwgZW5k
OyBzdGFydCsrKSB7Ci0gICAgICAgICAgICAgICAgRWluYV9Cb29sIHIgPSBfZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfdmlld19jb2xzX2VuZF9hZGQocHJpdiwgc3RhcnQsIG9sZF9jb2xzLCB0b2Rv
KTsKLSAgICAgICAgICAgICAgICBpZiAoIXIpIHsKKyAgICAgICAgICAgICAgICBFaW5hX0Jvb2wg
cmVzdWx0ID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfY29sc19lbmRfYWRkKHByaXYs
IHN0YXJ0LCBvbGRDb2xzLCB0b2RvKTsKKyAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdCkgewog
ICAgICAgICAgICAgICAgICAgICBDUklUSUNBTCgiZmFpbGVkIHRvIGFsbG9jYXRlICVkIGNvbHVt
bnMhIiwgdG9kbyk7CiAKICAgICAgICAgICAgICAgICAgICAgZm9yIChzdGFydC0tOyBzdGFydCA+
PSBwcml2LT52aWV3Lml0ZW1zOyBzdGFydC0tKQogICAgICAgICAgICAgICAgICAgICAgICAgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfY29sc19lbmRfZGVsKHByaXYsIHN0YXJ0LCB0b2Rv
KTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJvd3MgPiBvbGRfcm93cykgewotICAgICAgICAg
ICAgICAgICAgICAgICAgc3RhcnQgPSBwcml2LT52aWV3Lml0ZW1zICsgb2xkX3Jvd3M7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChyb3dzID4gb2xkUm93cykgeworICAgICAgICAgICAgICAgICAg
ICAgICAgc3RhcnQgPSBwcml2LT52aWV3Lml0ZW1zICsgb2xkUm93czsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGVuZCA9IHByaXYtPnZpZXcuaXRlbXMgKyByb3dzOwogICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yICg7IHN0YXJ0IDwgZW5kOyBzdGFydCsrKQogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X2NvbHNfZW5kX2RlbChwcml2
LCBzdGFydCwgdG9kbyk7CkBAIC05MDEsOSArOTAxLDkgQEAgc3RhdGljIGlubGluZSB2b2lkIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X2RiZyhjb25zdCBFd2tfVGlsZWRfQmFja2luZ19T
dG8KICAgICBFaW5hX0lubGlzdCoqIHN0YXJ0LCAqKmVuZDsKICAgICBwcmludGYoInRpbGVzPSUy
bGQsJTJsZCAgbW9kZWw9JTJsZCwlMmxkIFslZHglZF0gYmFzZT0lKzNsZCwlKzRsZCBvZmZzZXQ9
JSs0ZCwlKzRkIG9sZD0lKzRkLCUrNGQgYmFzZT0lKzNkLCUrM2RcbiIsCiAgICAgICAgICAgIHBy
aXYtPnZpZXcuY29scywgcHJpdi0+dmlldy5yb3dzLAotICAgICAgICAgICBwcml2LT5tb2RlbC5j
dXIuY29scywgcHJpdi0+bW9kZWwuY3VyLnJvd3MsCisgICAgICAgICAgIHByaXYtPm1vZGVsLmN1
cnJlbnQuY29sdW1ucywgcHJpdi0+bW9kZWwuY3VycmVudC5yb3dzLAogICAgICAgICAgICBwcml2
LT5tb2RlbC53aWR0aCwgcHJpdi0+bW9kZWwuaGVpZ2h0LAotICAgICAgICAgICBwcml2LT5tb2Rl
bC5iYXNlLmNvbCwgcHJpdi0+bW9kZWwuYmFzZS5yb3csCisgICAgICAgICAgIHByaXYtPm1vZGVs
LmJhc2UuY29sdW1uLCBwcml2LT5tb2RlbC5iYXNlLnJvdywKICAgICAgICAgICAgcHJpdi0+dmll
dy5vZmZzZXQuY3VyLngsIHByaXYtPnZpZXcub2Zmc2V0LmN1ci55LAogICAgICAgICAgICBwcml2
LT52aWV3Lm9mZnNldC5vbGQueCwgcHJpdi0+dmlldy5vZmZzZXQub2xkLnksCiAgICAgICAgICAg
IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCwgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55KTsKQEAg
LTkxMSwxNSArOTExLDE1IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfdmlld19kYmcoY29uc3QgRXdrX1RpbGVkX0JhY2tpbmdfU3RvCiAgICAgc3RhcnQgPSBw
cml2LT52aWV3Lml0ZW1zOwogICAgIGVuZCA9IHByaXYtPnZpZXcuaXRlbXMgKyBwcml2LT52aWV3
LnJvd3M7CiAgICAgZm9yICg7IHN0YXJ0IDwgZW5kOyBzdGFydCsrKSB7Ci0gICAgICAgIGNvbnN0
IEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0qIGl0OworICAgICAgICBjb25zdCBFd2tfVGls
ZWRfQmFja2luZ19TdG9yZV9JdGVtKiBpdGVtOwogCi0gICAgICAgIEVJTkFfSU5MSVNUX0ZPUkVB
Q0goKnN0YXJ0LCBpdCkgewotICAgICAgICAgICAgcHJpbnRmKCIgJSs0ZCwlKzRkICIsIGl0LT5n
ZW9tZXRyeS54LCBpdC0+Z2VvbWV0cnkueSk7CisgICAgICAgIEVJTkFfSU5MSVNUX0ZPUkVBQ0go
KnN0YXJ0LCBpdGVtKSB7CisgICAgICAgICAgICBwcmludGYoIiAlKzRkLCUrNGQgIiwgaXRlbS0+
Z2VvbWV0cnkueCwgaXRlbS0+Z2VvbWV0cnkueSk7CiAKLSAgICAgICAgICAgIGlmICghaXQtPnRp
bGUpCisgICAgICAgICAgICBpZiAoIWl0ZW0tPnRpbGUpCiAgICAgICAgICAgICAgICAgcHJpbnRm
KCIgICAgICAgICAgICA7Iik7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcHJp
bnRmKCIlOHAgJWx1LCVsdTsiLCBpdC0+dGlsZSwgaXQtPnRpbGUtPmNvbCwgaXQtPnRpbGUtPnJv
dyk7CisgICAgICAgICAgICAgICAgcHJpbnRmKCIlOHAgJWx1LCVsdTsiLCBpdGVtLT50aWxlLCBp
dGVtLT50aWxlLT5jb2wsIGl0ZW0tPnRpbGUtPnJvdyk7CiAgICAgICAgIH0KICAgICAgICAgcHJp
bnRmKCJcbiIpOwogICAgIH0KQEAgLTk0MSwzNyArOTQxLDM3IEBAIHN0YXRpYyBpbmxpbmUgdm9p
ZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19kYmcoY29uc3QgRXdrX1RpbGVkX0JhY2tp
bmdfU3RvCiAgKi8KIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3dy
YXBfdXAoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdiwgRXZhc19Db29yZCB4LCBF
dmFzX0Nvb3JkIHksIHVuc2lnbmVkIGludCBjb3VudCkKIHsKLSAgICB1bnNpZ25lZCBpbnQgbGFz
dF9yb3cgPSBwcml2LT52aWV3LnJvd3MgLSAxOwotICAgIEV2YXNfQ29vcmQgdHcgPSBwcml2LT52
aWV3LnRpbGUud2lkdGg7Ci0gICAgRXZhc19Db29yZCB0aCA9IHByaXYtPnZpZXcudGlsZS5oZWln
aHQ7Ci0gICAgRXZhc19Db29yZCBvZmZfeSA9IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSArIGNv
dW50ICogdGg7Ci0gICAgRXZhc19Db29yZCBveSA9IHkgKyAobGFzdF9yb3cgLSBjb3VudCArIDEp
ICogdGggKyBvZmZfeTsKLSAgICBFaW5hX0lubGlzdCoqIGl0cl9zdGFydCwgKippdHJfZW5kOwor
ICAgIHVuc2lnbmVkIGludCBsYXN0Um93ID0gcHJpdi0+dmlldy5yb3dzIC0gMTsKKyAgICBFdmFz
X0Nvb3JkIHRpbGVXaWR0aCA9IHByaXYtPnZpZXcudGlsZS53aWR0aDsKKyAgICBFdmFzX0Nvb3Jk
IHRpbGVIZWlnaHQgPSBwcml2LT52aWV3LnRpbGUuaGVpZ2h0OworICAgIEV2YXNfQ29vcmQgb2Zm
c2V0WSA9IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSArIGNvdW50ICogdGlsZUhlaWdodDsKKyAg
ICBFdmFzX0Nvb3JkIHRpbGVQb3NpdGlvblkgPSB5ICsgKGxhc3RSb3cgLSBjb3VudCArIDEpICog
dGlsZUhlaWdodCArIG9mZnNldFk7CisgICAgRWluYV9Jbmxpc3QqKiBpdGVyYXRvclN0YXJ0LCAq
Kml0ZXJhdG9yRW5kOwogCi0gICAgaXRyX3N0YXJ0ID0gcHJpdi0+dmlldy5pdGVtczsKLSAgICBp
dHJfZW5kID0gaXRyX3N0YXJ0ICsgbGFzdF9yb3c7CisgICAgaXRlcmF0b3JTdGFydCA9IHByaXYt
PnZpZXcuaXRlbXM7CisgICAgaXRlcmF0b3JFbmQgPSBpdGVyYXRvclN0YXJ0ICsgbGFzdFJvdzsK
IAogICAgIGZvciAoOyBjb3VudCA+IDA7IGNvdW50LS0pIHsKLSAgICAgICAgRWluYV9Jbmxpc3Qq
KiBpdHI7Ci0gICAgICAgIEVpbmFfSW5saXN0KiB0bXAgPSAqaXRyX3N0YXJ0OwotICAgICAgICBF
d2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKiBpdDsKLSAgICAgICAgRXZhc19Db29yZCBveCA9
IHggKyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLng7Ci0gICAgICAgIGludCBjID0gMDsKKyAgICAg
ICAgRWluYV9Jbmxpc3QqKiBpdGVyYXRvckxpc3Q7CisgICAgICAgIEVpbmFfSW5saXN0KiB0ZW1w
ID0gKml0ZXJhdG9yU3RhcnQ7CisgICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0q
IGl0ZW07CisgICAgICAgIEV2YXNfQ29vcmQgb3JpZ2lhbmxYID0geCArIHByaXYtPnZpZXcub2Zm
c2V0LmJhc2UueDsKKyAgICAgICAgaW50IGNvdW50MSA9IDA7CiAKLSAgICAgICAgZm9yIChpdHIg
PSBpdHJfc3RhcnQ7IGl0ciA8IGl0cl9lbmQ7IGl0cisrKQotICAgICAgICAgICAgKml0ciA9ICoo
aXRyICsgMSk7Ci0gICAgICAgICppdHIgPSB0bXA7CisgICAgICAgIGZvciAoaXRlcmF0b3JMaXN0
ID0gaXRlcmF0b3JTdGFydDsgaXRlcmF0b3JMaXN0IDwgaXRlcmF0b3JFbmQ7IGl0ZXJhdG9yTGlz
dCsrKQorICAgICAgICAgICAgKml0ZXJhdG9yTGlzdCA9ICooaXRlcmF0b3JMaXN0ICsgMSk7Cisg
ICAgICAgICppdGVyYXRvckxpc3QgPSB0ZW1wOwogCiAgICAgICAgIHByaXYtPm1vZGVsLmJhc2Uu
cm93Kys7Ci0gICAgICAgIEVJTkFfSU5MSVNUX0ZPUkVBQ0godG1wLCBpdCkgewotICAgICAgICAg
ICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fbW92ZShpdCwgb3gsIG95KTsKLSAgICAg
ICAgICAgIG94ICs9IHR3OwotICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0
ZW1fZmlsbChwcml2LCBpdCwgYywgbGFzdF9yb3cpOwotICAgICAgICAgICAgYysrOworICAgICAg
ICBFSU5BX0lOTElTVF9GT1JFQUNIKHRlbXAsIGl0ZW0pIHsKKyAgICAgICAgICAgIF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9pdGVtX21vdmUoaXRlbSwgb3JpZ2lhbmxYLCB0aWxlUG9zaXRpb25Z
KTsKKyAgICAgICAgICAgIG9yaWdpYW5sWCArPSB0aWxlV2lkdGg7CisgICAgICAgICAgICBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9maWxsKHByaXYsIGl0ZW0sIGNvdW50MSwgbGFzdFJv
dyk7CisgICAgICAgICAgICBjb3VudDErKzsKICAgICAgICAgfQotICAgICAgICBveSArPSB0aDsK
KyAgICAgICAgdGlsZVBvc2l0aW9uWSArPSB0aWxlSGVpZ2h0OwogICAgIH0KLSAgICBwcml2LT52
aWV3Lm9mZnNldC5iYXNlLnkgPSBvZmZfeTsKKyAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkg
PSBvZmZzZXRZOwogfQogCiAvKioKQEAgLTk4OSwzNiArOTg5LDM2IEBAIHN0YXRpYyB2b2lkIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3dyYXBfdXAoRXdrX1RpbGVkX0JhY2tpbmdfU3Rv
cmVfRGF0YSoKICAqLwogc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdf
d3JhcF9kb3duKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYsIEV2YXNfQ29vcmQg
eCwgRXZhc19Db29yZCB5LCB1bnNpZ25lZCBpbnQgY291bnQpCiB7Ci0gICAgRXZhc19Db29yZCB0
dyA9IHByaXYtPnZpZXcudGlsZS53aWR0aDsKLSAgICBFdmFzX0Nvb3JkIHRoID0gcHJpdi0+dmll
dy50aWxlLmhlaWdodDsKLSAgICBFdmFzX0Nvb3JkIG9mZl95ID0gcHJpdi0+dmlldy5vZmZzZXQu
YmFzZS55IC0gY291bnQgKiB0aDsKLSAgICBFdmFzX0Nvb3JkIG95ID0geSArIG9mZl95ICsgKGNv
dW50IC0gMSkgKiB0aDsKLSAgICBFaW5hX0lubGlzdCoqIGl0cl9zdGFydCwgKippdHJfZW5kOwor
ICAgIEV2YXNfQ29vcmQgdGlsZVdpZHRoID0gcHJpdi0+dmlldy50aWxlLndpZHRoOworICAgIEV2
YXNfQ29vcmQgdGlsZUhlaWdodCA9IHByaXYtPnZpZXcudGlsZS5oZWlnaHQ7CisgICAgRXZhc19D
b29yZCBvZmZzZXRZID0gcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55IC0gY291bnQgKiB0aWxlSGVp
Z2h0OworICAgIEV2YXNfQ29vcmQgdGlsZVBvc2l0aW9uWSA9IHkgKyBvZmZzZXRZICsgKGNvdW50
IC0gMSkgKiB0aWxlSGVpZ2h0OworICAgIEVpbmFfSW5saXN0KiogaXRlcmF0b3JTdGFydCwgKipp
dGVyYXRvckVuZDsKIAotICAgIGl0cl9zdGFydCA9IHByaXYtPnZpZXcuaXRlbXMgKyBwcml2LT52
aWV3LnJvd3MgLSAxOwotICAgIGl0cl9lbmQgPSBwcml2LT52aWV3Lml0ZW1zOworICAgIGl0ZXJh
dG9yU3RhcnQgPSBwcml2LT52aWV3Lml0ZW1zICsgcHJpdi0+dmlldy5yb3dzIC0gMTsKKyAgICBp
dGVyYXRvckVuZCA9IHByaXYtPnZpZXcuaXRlbXM7CiAKICAgICBmb3IgKDsgY291bnQgPiAwOyBj
b3VudC0tKSB7Ci0gICAgICAgIEVpbmFfSW5saXN0KiogaXRyOwotICAgICAgICBFaW5hX0lubGlz
dCogdG1wID0gKml0cl9zdGFydDsKLSAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRl
bSogaXQ7Ci0gICAgICAgIEV2YXNfQ29vcmQgb3ggPSB4ICsgcHJpdi0+dmlldy5vZmZzZXQuYmFz
ZS54OwotICAgICAgICBpbnQgYyA9IDA7CisgICAgICAgIEVpbmFfSW5saXN0KiogaXRlcmF0b3JM
aXN0OworICAgICAgICBFaW5hX0lubGlzdCogdGVtcCA9ICppdGVyYXRvclN0YXJ0OworICAgICAg
ICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKiBpdGVtOworICAgICAgICBFdmFzX0Nvb3Jk
IHRpbGVQb3NpdGlvblggPSB4ICsgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54OworICAgICAgICBp
bnQgY291bnQxID0gMDsKIAotICAgICAgICBmb3IgKGl0ciA9IGl0cl9zdGFydDsgaXRyID4gaXRy
X2VuZDsgaXRyLS0pCi0gICAgICAgICAgICAqaXRyID0gKihpdHIgLSAxKTsKLSAgICAgICAgKml0
ciA9IHRtcDsKKyAgICAgICAgZm9yIChpdGVyYXRvckxpc3QgPSBpdGVyYXRvclN0YXJ0OyBpdGVy
YXRvckxpc3QgPiBpdGVyYXRvckVuZDsgaXRlcmF0b3JMaXN0LS0pCisgICAgICAgICAgICAqaXRl
cmF0b3JMaXN0ID0gKihpdGVyYXRvckxpc3QgLSAxKTsKKyAgICAgICAgKml0ZXJhdG9yTGlzdCA9
IHRlbXA7CiAKICAgICAgICAgcHJpdi0+bW9kZWwuYmFzZS5yb3ctLTsKLSAgICAgICAgRUlOQV9J
TkxJU1RfRk9SRUFDSCh0bXAsIGl0KSB7Ci0gICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfaXRlbV9tb3ZlKGl0LCBveCwgb3kpOwotICAgICAgICAgICAgb3ggKz0gdHc7Ci0gICAg
ICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9maWxsKHByaXYsIGl0LCBjLCAw
KTsKLSAgICAgICAgICAgIGMrKzsKKyAgICAgICAgRUlOQV9JTkxJU1RfRk9SRUFDSCh0ZW1wLCBp
dGVtKSB7CisgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9tb3ZlKGl0
ZW0sIHRpbGVQb3NpdGlvblgsIHRpbGVQb3NpdGlvblkpOworICAgICAgICAgICAgdGlsZVBvc2l0
aW9uWCArPSB0aWxlV2lkdGg7CisgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
aXRlbV9maWxsKHByaXYsIGl0ZW0sIGNvdW50MSwgMCk7CisgICAgICAgICAgICBjb3VudDErKzsK
ICAgICAgICAgfQotICAgICAgICBveSAtPSB0aDsKKyAgICAgICAgdGlsZVBvc2l0aW9uWSAtPSB0
aWxlSGVpZ2h0OwogICAgIH0KLSAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgPSBvZmZfeTsK
KyAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgPSBvZmZzZXRZOwogfQogCiAvKioKQEAgLTEw
MzYsMzYgKzEwMzYsMzYgQEAgc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3Zp
ZXdfd3JhcF9kb3duKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEKICAqLwogc3RhdGljIHZv
aWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfd3JhcF9sZWZ0KEV3a19UaWxlZF9CYWNr
aW5nX1N0b3JlX0RhdGEqIHByaXYsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5LCB1bnNpZ25l
ZCBpbnQgY291bnQpCiB7Ci0gICAgdW5zaWduZWQgaW50IHIsIGxhc3RfY29sID0gcHJpdi0+dmll
dy5jb2xzIC0gMTsKLSAgICBFdmFzX0Nvb3JkIHR3ID0gcHJpdi0+dmlldy50aWxlLndpZHRoOwot
ICAgIEV2YXNfQ29vcmQgdGggPSBwcml2LT52aWV3LnRpbGUuaGVpZ2h0OwotICAgIEV2YXNfQ29v
cmQgb2ZmX3ggPSBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggKyBjb3VudCAqIHR3OworICAgIHVu
c2lnbmVkIGludCByb3csIGxhc3RDb2x1bW4gPSBwcml2LT52aWV3LmNvbHMgLSAxOworICAgIEV2
YXNfQ29vcmQgdGlsZVdpZHRoID0gcHJpdi0+dmlldy50aWxlLndpZHRoOworICAgIEV2YXNfQ29v
cmQgdGlsZUhlaWdodCA9IHByaXYtPnZpZXcudGlsZS5oZWlnaHQ7CisgICAgRXZhc19Db29yZCBv
ZmZzZXRYID0gcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54ICsgY291bnQgKiB0aWxlV2lkdGg7CiAg
ICAgRXZhc19Db29yZCBveSA9IHkgKyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnk7Ci0gICAgRWlu
YV9Jbmxpc3QqKiBpdHI7Ci0gICAgRWluYV9Jbmxpc3QqKiBpdHJfZW5kOworICAgIEVpbmFfSW5s
aXN0KiogaXRlcmF0b3I7CisgICAgRWluYV9Jbmxpc3QqKiBpdGVyYXRvckVuZDsKIAotICAgIGl0
ciA9IHByaXYtPnZpZXcuaXRlbXM7Ci0gICAgaXRyX2VuZCA9IGl0ciArIHByaXYtPnZpZXcucm93
czsKLSAgICByID0gMDsKKyAgICBpdGVyYXRvciA9IHByaXYtPnZpZXcuaXRlbXM7CisgICAgaXRl
cmF0b3JFbmQgPSBpdGVyYXRvciArIHByaXYtPnZpZXcucm93czsKKyAgICByb3cgPSAwOwogCi0g
ICAgcHJpdi0+bW9kZWwuYmFzZS5jb2wgKz0gY291bnQ7CisgICAgcHJpdi0+bW9kZWwuYmFzZS5j
b2x1bW4gKz0gY291bnQ7CiAKLSAgICBmb3IgKDsgaXRyIDwgaXRyX2VuZDsgaXRyKyssIHIrKykg
ewotICAgICAgICBFdmFzX0Nvb3JkIG94ID0geCArIChsYXN0X2NvbCAtIGNvdW50ICsgMSkgKiB0
dyArIG9mZl94OwotICAgICAgICB1bnNpZ25lZCBpbnQgaSwgYyA9IGxhc3RfY29sIC0gY291bnQg
KyAxOworICAgIGZvciAoOyBpdGVyYXRvciA8IGl0ZXJhdG9yRW5kOyBpdGVyYXRvcisrLCByb3cr
KykgeworICAgICAgICBFdmFzX0Nvb3JkIG94ID0geCArIChsYXN0Q29sdW1uIC0gY291bnQgKyAx
KSAqIHRpbGVXaWR0aCArIG9mZnNldFg7CisgICAgICAgIHVuc2lnbmVkIGludCBjID0gbGFzdENv
bHVtbiAtIGNvdW50ICsgMTsKIAotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKywg
YysrLCBveCArPSB0dykgeworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyss
IGMrKywgb3ggKz0gdGlsZVdpZHRoKSB7CiAgICAgICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19T
dG9yZV9JdGVtKiBpdDsKLSAgICAgICAgICAgIGl0ID0gRUlOQV9JTkxJU1RfQ09OVEFJTkVSX0dF
VCgqaXRyLCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKTsKLSAgICAgICAgICAgICppdHIg
PSBlaW5hX2lubGlzdF9kZW1vdGUoKml0ciwgKml0cik7CisgICAgICAgICAgICBpdCA9IEVJTkFf
SU5MSVNUX0NPTlRBSU5FUl9HRVQoKml0ZXJhdG9yLCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9J
dGVtKTsKKyAgICAgICAgICAgICppdGVyYXRvciA9IGVpbmFfaW5saXN0X2RlbW90ZSgqaXRlcmF0
b3IsICppdGVyYXRvcik7CiAKICAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9p
dGVtX21vdmUoaXQsIG94LCBveSk7Ci0gICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfaXRlbV9maWxsKHByaXYsIGl0LCBjLCByKTsKKyAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9pdGVtX2ZpbGwocHJpdiwgaXQsIGMsIHJvdyk7CiAgICAgICAgIH0KLSAgICAg
ICAgb3kgKz0gdGg7CisgICAgICAgIG95ICs9IHRpbGVIZWlnaHQ7CiAgICAgfQogCi0gICAgcHJp
di0+dmlldy5vZmZzZXQuYmFzZS54ID0gb2ZmX3g7CisgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFz
ZS54ID0gb2Zmc2V0WDsKIH0KIAogLyoqCkBAIC0xMDgzLDE4MyArMTA4MywxODMgQEAgc3RhdGlj
IHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfd3JhcF9sZWZ0KEV3a19UaWxlZF9C
YWNraW5nX1N0b3JlX0RhdGEKICAqLwogc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX3ZpZXdfd3JhcF9yaWdodChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2LCBF
dmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwgdW5zaWduZWQgaW50IGNvdW50KQogewotICAgIHVu
c2lnbmVkIGludCByOwotICAgIEV2YXNfQ29vcmQgdHcgPSBwcml2LT52aWV3LnRpbGUud2lkdGg7
Ci0gICAgRXZhc19Db29yZCB0aCA9IHByaXYtPnZpZXcudGlsZS5oZWlnaHQ7Ci0gICAgRXZhc19D
b29yZCBvZmZfeCA9IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCAtIGNvdW50ICogdHc7Ci0gICAg
RXZhc19Db29yZCBveSA9IHkgKyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnk7Ci0gICAgRWluYV9J
bmxpc3QqKiBpdHIsICoqIGl0cl9lbmQ7CisgICAgdW5zaWduZWQgaW50IHJvdzsKKyAgICBFdmFz
X0Nvb3JkIHRpbGVXaWR0aCA9IHByaXYtPnZpZXcudGlsZS53aWR0aDsKKyAgICBFdmFzX0Nvb3Jk
IHRpbGVIZWlnaHQgPSBwcml2LT52aWV3LnRpbGUuaGVpZ2h0OworICAgIEV2YXNfQ29vcmQgb2Zm
c2V0WCA9IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCAtIGNvdW50ICogdGlsZVdpZHRoOworICAg
IEV2YXNfQ29vcmQgdGlsZVBvc2l0aW9uWSA9IHkgKyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnk7
CisgICAgRWluYV9Jbmxpc3QqKiBpdGVyYXRvciwgKiogaXRlcmF0b3JFbmQ7CiAKLSAgICBpdHIg
PSBwcml2LT52aWV3Lml0ZW1zOwotICAgIGl0cl9lbmQgPSBpdHIgKyBwcml2LT52aWV3LnJvd3M7
Ci0gICAgciA9IDA7CisgICAgaXRlcmF0b3IgPSBwcml2LT52aWV3Lml0ZW1zOworICAgIGl0ZXJh
dG9yRW5kID0gaXRlcmF0b3IgKyBwcml2LT52aWV3LnJvd3M7CisgICAgcm93ID0gMDsKIAotICAg
IHByaXYtPm1vZGVsLmJhc2UuY29sIC09IGNvdW50OworICAgIHByaXYtPm1vZGVsLmJhc2UuY29s
dW1uIC09IGNvdW50OwogCi0gICAgZm9yICg7IGl0ciA8IGl0cl9lbmQ7IGl0cisrLCByKyspIHsK
LSAgICAgICAgRXZhc19Db29yZCBveCA9IHggKyAoY291bnQgLSAxKSAqIHR3ICsgb2ZmX3g7Ci0g
ICAgICAgIHVuc2lnbmVkIGludCBpLCBjID0gY291bnQgLSAxOworICAgIGZvciAoOyBpdGVyYXRv
ciA8IGl0ZXJhdG9yRW5kOyBpdGVyYXRvcisrLCByb3crKykgeworICAgICAgICBFdmFzX0Nvb3Jk
IG94ID0geCArIChjb3VudCAtIDEpICogdGlsZVdpZHRoICsgb2Zmc2V0WDsKKyAgICAgICAgdW5z
aWduZWQgaW50IGMgPSBjb3VudCAtIDE7CiAKLSAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvdW50
OyBpKyssIGMtLSwgb3ggLT0gdHcpIHsKLSAgICAgICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0
b3JlX0l0ZW0qIGl0OwotICAgICAgICAgICAgaXQgPSBFSU5BX0lOTElTVF9DT05UQUlORVJfR0VU
KCgqaXRyKS0+bGFzdCwgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSk7Ci0gICAgICAgICAg
ICAqaXRyID0gZWluYV9pbmxpc3RfcHJvbW90ZSgqaXRyLCAoKml0ciktPmxhc3QpOworICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyBpKyssIGMtLSwgb3ggLT0gdGlsZVdpZHRoKSB7
CisgICAgICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKiBpdGVtOworICAgICAg
ICAgICAgaXRlbSA9IEVJTkFfSU5MSVNUX0NPTlRBSU5FUl9HRVQoKCppdGVyYXRvciktPmxhc3Qs
IEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0pOworICAgICAgICAgICAgKml0ZXJhdG9yID0g
ZWluYV9pbmxpc3RfcHJvbW90ZSgqaXRlcmF0b3IsICgqaXRlcmF0b3IpLT5sYXN0KTsKIAotICAg
ICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fbW92ZShpdCwgb3gsIG95KTsK
LSAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2ZpbGwocHJpdiwgaXQs
IGMsIHIpOworICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fbW92ZShp
dGVtLCBveCwgdGlsZVBvc2l0aW9uWSk7CisgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfaXRlbV9maWxsKHByaXYsIGl0ZW0sIGMsIHJvdyk7CiAgICAgICAgIH0KLSAgICAgICAg
b3kgKz0gdGg7CisgICAgICAgIHRpbGVQb3NpdGlvblkgKz0gdGlsZUhlaWdodDsKICAgICB9CiAK
LSAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggPSBvZmZfeDsKKyAgICBwcml2LT52aWV3Lm9m
ZnNldC5iYXNlLnggPSBvZmZzZXRYOwogfQogCiBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfdmlld19yZWZpbGwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdiwg
RXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHksIGludCBzdGVwWCwgaW50IHN0ZXBZKQogewotICAg
IEVpbmFfSW5saXN0KiogaXRyLCAqKml0cl9lbmQ7Ci0gICAgRXZhc19Db29yZCBiYXNlX294LCBv
eSwgdHcsIHRoOworICAgIEVpbmFfSW5saXN0KiogaXRlcmF0b3IsICoqaXRlcmF0b3JFbmQ7Cisg
ICAgRXZhc19Db29yZCBiYXNlT3gsIG95LCB0aWxlV2lkdGgsIHRpbGVIZWlnaHQ7CiAgICAgdW5z
aWduZWQgaW50IHI7CiAKICAgICBldmFzX29iamVjdF9tb3ZlKHByaXYtPmJhc2UuY2xpcHBlciwg
eCwgeSk7CiAKLSAgICB0dyA9IHByaXYtPnZpZXcudGlsZS53aWR0aDsKLSAgICB0aCA9IHByaXYt
PnZpZXcudGlsZS5oZWlnaHQ7CisgICAgdGlsZVdpZHRoID0gcHJpdi0+dmlldy50aWxlLndpZHRo
OworICAgIHRpbGVIZWlnaHQgPSBwcml2LT52aWV3LnRpbGUuaGVpZ2h0OwogCi0gICAgYmFzZV9v
eCA9IHggKyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLng7CisgICAgYmFzZU94ID0geCArIHByaXYt
PnZpZXcub2Zmc2V0LmJhc2UueDsKICAgICBveSA9IHkgKyBwcml2LT52aWV3Lm9mZnNldC5iYXNl
Lnk7CiAKLSAgICBpdHIgPSBwcml2LT52aWV3Lml0ZW1zOwotICAgIGl0cl9lbmQgPSBpdHIgKyBw
cml2LT52aWV3LnJvd3M7CisgICAgaXRlcmF0b3IgPSBwcml2LT52aWV3Lml0ZW1zOworICAgIGl0
ZXJhdG9yRW5kID0gaXRlcmF0b3IgKyBwcml2LT52aWV3LnJvd3M7CiAgICAgciA9IDA7CiAKLSAg
ICBwcml2LT5tb2RlbC5iYXNlLmNvbCAtPSBzdGVwWDsKKyAgICBwcml2LT5tb2RlbC5iYXNlLmNv
bHVtbiAtPSBzdGVwWDsKICAgICBwcml2LT5tb2RlbC5iYXNlLnJvdyAtPSBzdGVwWTsKIAotICAg
IGZvciAoOyBpdHIgPCBpdHJfZW5kOyBpdHIrKywgcisrKSB7CisgICAgZm9yICg7IGl0ZXJhdG9y
IDwgaXRlcmF0b3JFbmQ7IGl0ZXJhdG9yKyssIHIrKykgewogICAgICAgICBFd2tfVGlsZWRfQmFj
a2luZ19TdG9yZV9JdGVtKiBpdDsKLSAgICAgICAgRXZhc19Db29yZCBveCA9IGJhc2Vfb3g7Ci0g
ICAgICAgIHVuc2lnbmVkIGludCBjID0gMDsKLSAgICAgICAgRUlOQV9JTkxJU1RfRk9SRUFDSCgq
aXRyLCBpdCkgewotICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZmls
bChwcml2LCBpdCwgYywgcik7Ci0gICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
aXRlbV9tb3ZlKGl0LCBveCwgb3kpOwotICAgICAgICAgICAgYysrOwotICAgICAgICAgICAgb3gg
Kz0gdHc7CisgICAgICAgIEV2YXNfQ29vcmQgbmV3VGlsZVBvc2l0aW9uWCA9IGJhc2VPeDsKKyAg
ICAgICAgdW5zaWduZWQgaW50IGNvdW50ID0gMDsKKyAgICAgICAgRUlOQV9JTkxJU1RfRk9SRUFD
SCgqaXRlcmF0b3IsIGl0KSB7CisgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
aXRlbV9maWxsKHByaXYsIGl0LCBjb3VudCwgcik7CisgICAgICAgICAgICBfZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfaXRlbV9tb3ZlKGl0LCBuZXdUaWxlUG9zaXRpb25YLCBveSk7CisgICAgICAg
ICAgICBjb3VudCsrOworICAgICAgICAgICAgbmV3VGlsZVBvc2l0aW9uWCArPSB0aWxlV2lkdGg7
CiAgICAgICAgIH0KLSAgICAgICAgb3kgKz0gdGg7CisgICAgICAgIG95ICs9IHRpbGVIZWlnaHQ7
CiAgICAgfQogfQogCiBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19w
b3NfYXBwbHkoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdiwgRXZhc19Db29yZCB4
LCBFdmFzX0Nvb3JkIHkpCiB7Ci0gICAgRWluYV9Jbmxpc3QqKiBpdHIsICoqaXRyX2VuZDsKLSAg
ICBFdmFzX0Nvb3JkIGJhc2Vfb3gsIG95LCB0dywgdGg7CisgICAgRWluYV9Jbmxpc3QqKiBpdGVy
YXRvciwgKippdGVyYXRvckVuZDsKKyAgICBFdmFzX0Nvb3JkIGJhc2Vfb3gsIG95LCB0aWxlV2lk
dGgsIHRpbGVIZWlnaHQ7CiAKICAgICBldmFzX29iamVjdF9tb3ZlKHByaXYtPmJhc2UuY2xpcHBl
ciwgeCwgeSk7CiAKLSAgICB0dyA9IHByaXYtPnZpZXcudGlsZS53aWR0aDsKLSAgICB0aCA9IHBy
aXYtPnZpZXcudGlsZS5oZWlnaHQ7CisgICAgdGlsZVdpZHRoID0gcHJpdi0+dmlldy50aWxlLndp
ZHRoOworICAgIHRpbGVIZWlnaHQgPSBwcml2LT52aWV3LnRpbGUuaGVpZ2h0OwogCiAgICAgYmFz
ZV9veCA9IHggKyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLng7CiAgICAgb3kgPSB5ICsgcHJpdi0+
dmlldy5vZmZzZXQuYmFzZS55OwogCi0gICAgaXRyID0gcHJpdi0+dmlldy5pdGVtczsKLSAgICBp
dHJfZW5kID0gaXRyICsgcHJpdi0+dmlldy5yb3dzOwotICAgIGZvciAoOyBpdHIgPCBpdHJfZW5k
OyBpdHIrKykgeworICAgIGl0ZXJhdG9yID0gcHJpdi0+dmlldy5pdGVtczsKKyAgICBpdGVyYXRv
ckVuZCA9IGl0ZXJhdG9yICsgcHJpdi0+dmlldy5yb3dzOworICAgIGZvciAoOyBpdGVyYXRvciA8
IGl0ZXJhdG9yRW5kOyBpdGVyYXRvcisrKSB7CiAgICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0
b3JlX0l0ZW0qIGl0OwogICAgICAgICBFdmFzX0Nvb3JkIG94ID0gYmFzZV9veDsKLSAgICAgICAg
RUlOQV9JTkxJU1RfRk9SRUFDSCgqaXRyLCBpdCkgeworICAgICAgICBFSU5BX0lOTElTVF9GT1JF
QUNIKCppdGVyYXRvciwgaXQpIHsKICAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV9pdGVtX21vdmUoaXQsIG94LCBveSk7Ci0gICAgICAgICAgICBveCArPSB0dzsKKyAgICAgICAg
ICAgIG94ICs9IHRpbGVXaWR0aDsKICAgICAgICAgfQotICAgICAgICBveSArPSB0aDsKKyAgICAg
ICAgb3kgKz0gdGlsZUhlaWdodDsKICAgICB9CiB9CiAKIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV9zbWFydF9jYWxjdWxhdGVfb2Zmc2V0X2ZvcmNlKEV3a19UaWxlZF9CYWNr
aW5nX1N0b3JlX0RhdGEqIHByaXYpCiB7Ci0gICAgRXZhc19Db29yZCBkeCA9IHByaXYtPnZpZXcu
b2Zmc2V0LmN1ci54IC0gcHJpdi0+dmlldy5vZmZzZXQub2xkLng7Ci0gICAgRXZhc19Db29yZCBk
eSA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci55IC0gcHJpdi0+dmlldy5vZmZzZXQub2xkLnk7Ci0g
ICAgRXZhc19Db29yZCB0dywgdGg7Ci0gICAgaW50IHN0ZXBfeSwgc3RlcF94OworICAgIEV2YXNf
Q29vcmQgZGVsdGFYID0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggLSBwcml2LT52aWV3Lm9mZnNl
dC5vbGQueDsKKyAgICBFdmFzX0Nvb3JkIGRlbHRhWSA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci55
IC0gcHJpdi0+dmlldy5vZmZzZXQub2xkLnk7CisgICAgRXZhc19Db29yZCB0aWxlV2lkdGgsIHRp
bGVIZWlnaHQ7CisgICAgaW50IHN0ZXBZLCBzdGVwWDsKIAotICAgIElORigibz0lcCwgb2Zmc2V0
OiAlKzRkLCAlKzRkICglKzRkLCAlKzRkKSIsCi0gICAgICAgIHByaXYtPnNlbGYsIGR4LCBkeSwg
cHJpdi0+dmlldy5vZmZzZXQuY3VyLngsIHByaXYtPnZpZXcub2Zmc2V0LmN1ci55KTsKKyAgICBJ
TkYoImV3a1RpbGUlcCwgb2Zmc2V0OiAlKzRkLCAlKzRkICglKzRkLCAlKzRkKSIsCisgICAgICAg
IHByaXYtPnNlbGYsIGRlbHRhWCwgZGVsdGFZLCBwcml2LT52aWV3Lm9mZnNldC5jdXIueCwgcHJp
di0+dmlldy5vZmZzZXQuY3VyLnkpOwogCi0gICAgdHcgPSBwcml2LT52aWV3LnRpbGUud2lkdGg7
Ci0gICAgdGggPSBwcml2LT52aWV3LnRpbGUuaGVpZ2h0OworICAgIHRpbGVXaWR0aCA9IHByaXYt
PnZpZXcudGlsZS53aWR0aDsKKyAgICB0aWxlSGVpZ2h0ID0gcHJpdi0+dmlldy50aWxlLmhlaWdo
dDsKIAotICAgIGxvbmcgbmV3X2NvbCA9IC1wcml2LT52aWV3Lm9mZnNldC5jdXIueCAvIHR3Owot
ICAgIHN0ZXBfeCA9IHByaXYtPm1vZGVsLmJhc2UuY29sIC0gbmV3X2NvbDsKLSAgICBsb25nIG5l
d19yb3cgPSAtcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkgLyB0aDsKLSAgICBzdGVwX3kgPSBwcml2
LT5tb2RlbC5iYXNlLnJvdyAtIG5ld19yb3c7CisgICAgbG9uZyBuZXdDb2x1bW4gPSAtcHJpdi0+
dmlldy5vZmZzZXQuY3VyLnggLyB0aWxlV2lkdGg7CisgICAgc3RlcFggPSBwcml2LT5tb2RlbC5i
YXNlLmNvbHVtbiAtIG5ld0NvbHVtbjsKKyAgICBsb25nIG5ld1JvdyA9IC1wcml2LT52aWV3Lm9m
ZnNldC5jdXIueSAvIHRpbGVIZWlnaHQ7CisgICAgc3RlcFkgPSBwcml2LT5tb2RlbC5iYXNlLnJv
dyAtIG5ld1JvdzsKIAogICAgIHByaXYtPnZpZXcub2Zmc2V0Lm9sZC54ID0gcHJpdi0+dmlldy5v
ZmZzZXQuY3VyLng7CiAgICAgcHJpdi0+dmlldy5vZmZzZXQub2xkLnkgPSBwcml2LT52aWV3Lm9m
ZnNldC5jdXIueTsKICAgICBldmFzX29iamVjdF9tb3ZlKAotICAgICAgICBwcml2LT5jb250ZW50
c19jbGlwcGVyLAorICAgICAgICBwcml2LT5jb250ZW50c0NsaXBwZXIsCiAgICAgICAgIHByaXYt
PnZpZXcub2Zmc2V0LmN1ci54ICsgcHJpdi0+dmlldy54LAogICAgICAgICBwcml2LT52aWV3Lm9m
ZnNldC5jdXIueSArIHByaXYtPnZpZXcueSk7CiAKLSAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNl
LnggKz0gZHggLSBzdGVwX3ggKiB0dzsKLSAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgKz0g
ZHkgLSBzdGVwX3kgKiB0aDsKKyAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggKz0gZGVsdGFY
IC0gc3RlcFggKiB0aWxlV2lkdGg7CisgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ICs9IGRl
bHRhWSAtIHN0ZXBZICogdGlsZUhlaWdodDsKIAogICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV92aWV3X3JlZmlsbAotICAgICAgICAocHJpdiwgcHJpdi0+dmlldy54LCBwcml2LT52aWV3Lnks
IHN0ZXBfeCwgc3RlcF95KTsKKyAgICAgICAgKHByaXYsIHByaXYtPnZpZXcueCwgcHJpdi0+dmll
dy55LCBzdGVwWCwgc3RlcFkpOwogfQogCiBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfc21hcnRfY2FsY3VsYXRlX29mZnNldChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRh
KiBwcml2LCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSkKIHsKLSAgICBFdmFzX0Nvb3JkIGR4
ID0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggLSBwcml2LT52aWV3Lm9mZnNldC5vbGQueDsKLSAg
ICBFdmFzX0Nvb3JkIGR5ID0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkgLSBwcml2LT52aWV3Lm9m
ZnNldC5vbGQueTsKLSAgICBFdmFzX0Nvb3JkIHR3LCB0aDsKLSAgICBpbnQgc3RlcF95LCBzdGVw
X3g7CisgICAgRXZhc19Db29yZCBkZWx0YVggPSBwcml2LT52aWV3Lm9mZnNldC5jdXIueCAtIHBy
aXYtPnZpZXcub2Zmc2V0Lm9sZC54OworICAgIEV2YXNfQ29vcmQgZGVsdGFZID0gcHJpdi0+dmll
dy5vZmZzZXQuY3VyLnkgLSBwcml2LT52aWV3Lm9mZnNldC5vbGQueTsKKyAgICBFdmFzX0Nvb3Jk
IHRpbGVXaWR0aCwgdGlsZUhlaWdodDsKKyAgICBpbnQgc3RlcFksIHN0ZXBYOwogCi0gICAgSU5G
KCJvPSVwLCBvZmZzZXQ6ICUrNGQsICUrNGQgKCUrNGQsICUrNGQpIiwKLSAgICAgICAgcHJpdi0+
c2VsZiwgZHgsIGR5LCBwcml2LT52aWV3Lm9mZnNldC5jdXIueCwgcHJpdi0+dmlldy5vZmZzZXQu
Y3VyLnkpOworICAgIElORigiZXdrVGlsZSVwLCBvZmZzZXQ6ICUrNGQsICUrNGQgKCUrNGQsICUr
NGQpIiwKKyAgICAgICAgcHJpdi0+c2VsZiwgZGVsdGFYLCBkZWx0YVksIHByaXYtPnZpZXcub2Zm
c2V0LmN1ci54LCBwcml2LT52aWV3Lm9mZnNldC5jdXIueSk7CiAKLSAgICBpZiAoIWR4ICYmICFk
eSkKKyAgICBpZiAoIWRlbHRhWCAmJiAhZGVsdGFZKQogICAgICAgICByZXR1cm47CiAKLSAgICB0
dyA9IHByaXYtPnZpZXcudGlsZS53aWR0aDsKLSAgICB0aCA9IHByaXYtPnZpZXcudGlsZS5oZWln
aHQ7CisgICAgdGlsZVdpZHRoID0gcHJpdi0+dmlldy50aWxlLndpZHRoOworICAgIHRpbGVIZWln
aHQgPSBwcml2LT52aWV3LnRpbGUuaGVpZ2h0OwogCi0gICAgbG9uZyBuZXdfY29sID0gLXByaXYt
PnZpZXcub2Zmc2V0LmN1ci54IC8gdHc7Ci0gICAgc3RlcF94ID0gcHJpdi0+bW9kZWwuYmFzZS5j
b2wgLSBuZXdfY29sOwotICAgIGxvbmcgbmV3X3JvdyA9IC1wcml2LT52aWV3Lm9mZnNldC5jdXIu
eSAvIHRoOwotICAgIHN0ZXBfeSA9IHByaXYtPm1vZGVsLmJhc2Uucm93IC0gbmV3X3JvdzsKKyAg
ICBsb25nIG5ld0NvbCA9IC1wcml2LT52aWV3Lm9mZnNldC5jdXIueCAvIHRpbGVXaWR0aDsKKyAg
ICBzdGVwWCA9IHByaXYtPm1vZGVsLmJhc2UuY29sdW1uIC0gbmV3Q29sOworICAgIGxvbmcgbmV3
Um93ID0gLXByaXYtPnZpZXcub2Zmc2V0LmN1ci55IC8gdGlsZUhlaWdodDsKKyAgICBzdGVwWSA9
IHByaXYtPm1vZGVsLmJhc2Uucm93IC0gbmV3Um93OwogCiAgICAgcHJpdi0+dmlldy5vZmZzZXQu
b2xkLnggPSBwcml2LT52aWV3Lm9mZnNldC5jdXIueDsKICAgICBwcml2LT52aWV3Lm9mZnNldC5v
bGQueSA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci55OwogICAgIGV2YXNfb2JqZWN0X21vdmUoCi0g
ICAgICAgIHByaXYtPmNvbnRlbnRzX2NsaXBwZXIsCisgICAgICAgIHByaXYtPmNvbnRlbnRzQ2xp
cHBlciwKICAgICAgICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggKyBwcml2LT52aWV3LngsCiAg
ICAgICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1ci55ICsgcHJpdi0+dmlldy55KTsKIAotICAgIGlm
ICgoc3RlcF94IDwgMCAmJiBzdGVwX3ggPD0gLXByaXYtPnZpZXcuY29scykKLSAgICAgICAgfHwg
KHN0ZXBfeCA+IDAgJiYgc3RlcF94ID49IHByaXYtPnZpZXcuY29scykKLSAgICAgICAgfHwgKHN0
ZXBfeSA8IDAgJiYgc3RlcF95IDw9IC1wcml2LT52aWV3LnJvd3MpCi0gICAgICAgIHx8IChzdGVw
X3kgPiAwICYmIHN0ZXBfeSA+PSBwcml2LT52aWV3LnJvd3MpKSB7CisgICAgaWYgKChzdGVwWCA8
IDAgJiYgc3RlcFggPD0gLXByaXYtPnZpZXcuY29scykKKyAgICAgICAgfHwgKHN0ZXBYID4gMCAm
JiBzdGVwWCA+PSBwcml2LT52aWV3LmNvbHMpCisgICAgICAgIHx8IChzdGVwWSA8IDAgJiYgc3Rl
cFkgPD0gLXByaXYtPnZpZXcucm93cykKKyAgICAgICAgfHwgKHN0ZXBZID4gMCAmJiBzdGVwWSA+
PSBwcml2LT52aWV3LnJvd3MpKSB7CiAKLSAgICAgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54
ICs9IGR4IC0gc3RlcF94ICogdHc7Ci0gICAgICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSAr
PSBkeSAtIHN0ZXBfeSAqIHRoOworICAgICAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggKz0g
ZGVsdGFYIC0gc3RlcFggKiB0aWxlV2lkdGg7CisgICAgICAgIHByaXYtPnZpZXcub2Zmc2V0LmJh
c2UueSArPSBkZWx0YVkgLSBzdGVwWSAqIHRpbGVIZWlnaHQ7CiAKICAgICAgICAgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX3ZpZXdfcmVmaWxsCi0gICAgICAgICAgICAocHJpdiwgcHJpdi0+dmll
dy54LCBwcml2LT52aWV3LnksIHN0ZXBfeCwgc3RlcF95KTsKKyAgICAgICAgICAgIChwcml2LCBw
cml2LT52aWV3LngsIHByaXYtPnZpZXcueSwgc3RlcFgsIHN0ZXBZKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCArPSBkeDsKLSAgICBwcml2
LT52aWV3Lm9mZnNldC5iYXNlLnkgKz0gZHk7CisgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54
ICs9IGRlbHRhWDsKKyAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgKz0gZGVsdGFZOwogCi0g
ICAgaWYgKHN0ZXBfeSA8IDApCi0gICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3
X3dyYXBfdXAocHJpdiwgeCwgeSwgLXN0ZXBfeSk7Ci0gICAgZWxzZSBpZiAoc3RlcF95ID4gMCkK
LSAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfd3JhcF9kb3duKHByaXYsIHgs
IHksIHN0ZXBfeSk7CisgICAgaWYgKHN0ZXBZIDwgMCkKKyAgICAgICAgX2V3a190aWxlZF9iYWNr
aW5nX3N0b3JlX3ZpZXdfd3JhcF91cChwcml2LCB4LCB5LCAtc3RlcFkpOworICAgIGVsc2UgaWYg
KHN0ZXBZID4gMCkKKyAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfd3JhcF9k
b3duKHByaXYsIHgsIHksIHN0ZXBZKTsKIAotICAgIGlmIChzdGVwX3ggPCAwKQotICAgICAgICBf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld193cmFwX2xlZnQocHJpdiwgeCwgeSwgLXN0ZXBf
eCk7Ci0gICAgZWxzZSBpZiAoc3RlcF94ID4gMCkKLSAgICAgICAgX2V3a190aWxlZF9iYWNraW5n
X3N0b3JlX3ZpZXdfd3JhcF9yaWdodChwcml2LCB4LCB5LCBzdGVwX3gpOworICAgIGlmIChzdGVw
WCA8IDApCisgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3dyYXBfbGVmdChw
cml2LCB4LCB5LCAtc3RlcFgpOworICAgIGVsc2UgaWYgKHN0ZXBYID4gMCkKKyAgICAgICAgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfd3JhcF9yaWdodChwcml2LCB4LCB5LCBzdGVwWCk7
CiAKICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19wb3NfYXBwbHkocHJpdiwgeCwg
eSk7CiB9CkBAIC0xMjcwLDMxICsxMjcwLDMxIEBAIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9zbWFydF9jYWxjdWxhdGVfcG9zKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlCiAg
ICAgcHJpdi0+dmlldy54ID0geDsKICAgICBwcml2LT52aWV3LnkgPSB5OwogICAgIGV2YXNfb2Jq
ZWN0X21vdmUoCi0gICAgICAgIHByaXYtPmNvbnRlbnRzX2NsaXBwZXIsCisgICAgICAgIHByaXYt
PmNvbnRlbnRzQ2xpcHBlciwKICAgICAgICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggKyBwcml2
LT52aWV3LngsCiAgICAgICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1ci55ICsgcHJpdi0+dmlldy55
KTsKIH0KIAogc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2ZpbGxfcmVuZGVy
ZXJzKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYpCiB7Ci0gICAgRWluYV9Jbmxp
c3QqIGl0OworICAgIEVpbmFfSW5saXN0KiBsaXN0OwogICAgIEV3a19UaWxlZF9CYWNraW5nX1N0
b3JlX0l0ZW0qIGl0ZW07CiAgICAgaW50IGksIGo7CiAKICAgICBmb3IgKGkgPSAwOyBpIDwgcHJp
di0+dmlldy5yb3dzOyBpKyspIHsKLSAgICAgICAgaXQgPSBwcml2LT52aWV3Lml0ZW1zW2ldOwor
ICAgICAgICBsaXN0ID0gcHJpdi0+dmlldy5pdGVtc1tpXTsKICAgICAgICAgaiA9IDA7Ci0gICAg
ICAgIEVJTkFfSU5MSVNUX0ZPUkVBQ0goaXQsIGl0ZW0pCisgICAgICAgIEVJTkFfSU5MSVNUX0ZP
UkVBQ0gobGlzdCwgaXRlbSkKICAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9p
dGVtX2ZpbGwocHJpdiwgaXRlbSwgaisrLCBpKTsKICAgICB9CiB9CiAKIHN0YXRpYyB2b2lkIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9jYWxjdWxhdGUoRXZhc19PYmplY3QqIGV3a1Rp
bGUpCiB7Ci0gICAgRXZhc19Db29yZCB4LCB5LCB3LCBoOworICAgIEV2YXNfQ29vcmQgeCwgeSwg
d2lkdGgsIGhlaWdodDsKIAotICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldChld2tUaWxlLCAm
eCwgJnksICZ3LCAmaCk7Ci0gICAgREJHKCJvPSVwIGF0ICVkLCVkICsgJWR4JWQiLCBld2tUaWxl
LCB4LCB5LCB3LCBoKTsKKyAgICBldmFzX29iamVjdF9nZW9tZXRyeV9nZXQoZXdrVGlsZSwgJngs
ICZ5LCAmd2lkdGgsICZoZWlnaHQpOworICAgIERCRygiZXdrVGlsZSVwIGF0ICVkLCVkICsgJWR4
JWQiLCBld2tUaWxlLCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKIAogICAgIFBSSVZfREFUQV9HRVRf
T1JfUkVUVVJOKGV3a1RpbGUsIHByaXYpOwogCkBAIC0xMzAzLDI1ICsxMzAzLDI1IEBAIHN0YXRp
YyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9jYWxjdWxhdGUoRXZhc19PYmpl
Y3QqIGV3a1RpbGUpCiAgICAgZXdrX3RpbGVfbWF0cml4X2ZyZWV6ZShwcml2LT5tb2RlbC5tYXRy
aXgpOwogCiAgICAgaWYgKCFwcml2LT5yZW5kZXIuc3VzcGVuZCAmJiBwcml2LT5jaGFuZ2VkLm1v
ZGVsKSB7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgY29scywgcm93czsKKyAgICAgICAgdW5zaWdu
ZWQgbG9uZyBjb2x1bW5zLCByb3dzOwogCi0gICAgICAgIGNvbHMgPSBwcml2LT5tb2RlbC53aWR0
aCAvIHByaXYtPnZpZXcudGlsZS53aWR0aCArIDE7CisgICAgICAgIGNvbHVtbnMgPSBwcml2LT5t
b2RlbC53aWR0aCAvIHByaXYtPnZpZXcudGlsZS53aWR0aCArIDE7CiAgICAgICAgIHJvd3MgPSBw
cml2LT5tb2RlbC5oZWlnaHQgLyBwcml2LT52aWV3LnRpbGUuaGVpZ2h0ICsgMTsKIAotICAgICAg
ICBwcml2LT5tb2RlbC5vbGQuY29scyA9IHByaXYtPm1vZGVsLmN1ci5jb2xzOwotICAgICAgICBw
cml2LT5tb2RlbC5vbGQucm93cyA9IHByaXYtPm1vZGVsLmN1ci5yb3dzOwotICAgICAgICBwcml2
LT5tb2RlbC5jdXIuY29scyA9IGNvbHM7Ci0gICAgICAgIHByaXYtPm1vZGVsLmN1ci5yb3dzID0g
cm93czsKLSAgICAgICAgaWYgKHByaXYtPm1vZGVsLm9sZC5jb2xzID4gY29scykKLSAgICAgICAg
ICAgIGNvbHMgPSBwcml2LT5tb2RlbC5vbGQuY29sczsKKyAgICAgICAgcHJpdi0+bW9kZWwub2xk
LmNvbHVtbnMgPSBwcml2LT5tb2RlbC5jdXJyZW50LmNvbHVtbnM7CisgICAgICAgIHByaXYtPm1v
ZGVsLm9sZC5yb3dzID0gcHJpdi0+bW9kZWwuY3VycmVudC5yb3dzOworICAgICAgICBwcml2LT5t
b2RlbC5jdXJyZW50LmNvbHVtbnMgPSBjb2x1bW5zOworICAgICAgICBwcml2LT5tb2RlbC5jdXJy
ZW50LnJvd3MgPSByb3dzOworICAgICAgICBpZiAocHJpdi0+bW9kZWwub2xkLmNvbHVtbnMgPiBj
b2x1bW5zKQorICAgICAgICAgICAgY29sdW1ucyA9IHByaXYtPm1vZGVsLm9sZC5jb2x1bW5zOwog
ICAgICAgICBpZiAocHJpdi0+bW9kZWwub2xkLnJvd3MgPiByb3dzKQogICAgICAgICAgICAgcm93
cyA9IHByaXYtPm1vZGVsLm9sZC5yb3dzOwotICAgICAgICBld2tfdGlsZV9tYXRyaXhfcmVzaXpl
KHByaXYtPm1vZGVsLm1hdHJpeCwgY29scywgcm93cyk7CisgICAgICAgIGV3a190aWxlX21hdHJp
eF9yZXNpemUocHJpdi0+bW9kZWwubWF0cml4LCBjb2x1bW5zLCByb3dzKTsKICAgICB9CiAKLSAg
ICBpZiAocHJpdi0+Y2hhbmdlZC5wb3MgJiYgKHByaXYtPnZpZXcueCAhPSB4IHx8IHByaXYtPnZp
ZXcueSAhPSB5KSkgeworICAgIGlmIChwcml2LT5jaGFuZ2VkLnBvc2l0aW9uICYmIChwcml2LT52
aWV3LnggIT0geCB8fCBwcml2LT52aWV3LnkgIT0geSkpIHsKICAgICAgICAgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZV9wb3MocHJpdiwgeCwgeSk7Ci0gICAgICAgIHBy
aXYtPmNoYW5nZWQucG9zID0gRUlOQV9GQUxTRTsKKyAgICAgICAgcHJpdi0+Y2hhbmdlZC5wb3Np
dGlvbiA9IEVJTkFfRkFMU0U7CiAgICAgfQogICAgIGlmIChwcml2LT5jaGFuZ2VkLm9mZnNldCkg
ewogICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfY2FsY3VsYXRlX29mZnNl
dChwcml2LCB4LCB5KTsKQEAgLTEzMjksNyArMTMyOSw3IEBAIHN0YXRpYyB2b2lkIF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9zbWFydF9jYWxjdWxhdGUoRXZhc19PYmplY3QqIGV3a1RpbGUpCiAg
ICAgfQogCiAgICAgaWYgKHByaXYtPmNoYW5nZWQuc2l6ZSkgewotICAgICAgICBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfc21hcnRfY2FsY3VsYXRlX3NpemUocHJpdiwgdywgaCk7CisgICAgICAg
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9jYWxjdWxhdGVfc2l6ZShwcml2LCB3aWR0
aCwgaGVpZ2h0KTsKICAgICAgICAgcHJpdi0+Y2hhbmdlZC5zaXplID0gRUlOQV9GQUxTRTsKICAg
ICB9CiAKQEAgLTEzNDEsMTcgKzEzNDEsMTcgQEAgc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNr
aW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZShFdmFzX09iamVjdCogZXdrVGlsZSkKICAgICAgICAg
cmVjdC5oID0gcHJpdi0+bW9kZWwuaGVpZ2h0OwogICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfZmlsbF9yZW5kZXJlcnMocHJpdik7CiAgICAgICAgIGV3a190aWxlX21hdHJpeF9yZXNp
emUocHJpdi0+bW9kZWwubWF0cml4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBy
aXYtPm1vZGVsLmN1ci5jb2xzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaXYt
Pm1vZGVsLmN1ci5yb3dzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcml2LT5t
b2RlbC5jdXJyZW50LmNvbHVtbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJp
di0+bW9kZWwuY3VycmVudC5yb3dzKTsKICAgICAgICAgcHJpdi0+Y2hhbmdlZC5tb2RlbCA9IEVJ
TkFfRkFMU0U7Ci0gICAgICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShwcml2LT5jb250ZW50c19jbGlw
cGVyLCBwcml2LT5tb2RlbC53aWR0aCwgcHJpdi0+bW9kZWwuaGVpZ2h0KTsKKyAgICAgICAgZXZh
c19vYmplY3RfcmVzaXplKHByaXYtPmNvbnRlbnRzQ2xpcHBlciwgcHJpdi0+bW9kZWwud2lkdGgs
IHByaXYtPm1vZGVsLmhlaWdodCk7CiAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9z
bWFydF9jYWxjdWxhdGVfb2Zmc2V0X2ZvcmNlKHByaXYpOwogCiAgICAgICAgIC8qIE1ha2Ugc3Vy
ZSB3ZSBkbyBub3QgbWlzcyBhbnkgaW1wb3J0YW50IHJlcGFpbnQgYnkKICAgICAgICAgICogcmVw
YWludGluZyB0aGUgd2hvbGUgdmlld3BvcnQgKi8KLSAgICAgICAgY29uc3QgRWluYV9SZWN0YW5n
bGUgciA9CisgICAgICAgIGNvbnN0IEVpbmFfUmVjdGFuZ2xlIHJlY3QxID0KICAgICAgICAgeyAw
LCAwLCBwcml2LT5tb2RlbC53aWR0aCwgcHJpdi0+bW9kZWwuaGVpZ2h0IH07Ci0gICAgICAgIGV3
a190aWxlX21hdHJpeF91cGRhdGUocHJpdi0+bW9kZWwubWF0cml4LCAmciwKKyAgICAgICAgZXdr
X3RpbGVfbWF0cml4X3VwZGF0ZShwcml2LT5tb2RlbC5tYXRyaXgsICZyZWN0MSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwcml2LT52aWV3LnRpbGUuem9vbSk7CiAgICAgfQogCkBA
IC0xMzc0LDggKzEzNzQsOCBAQCBFdmFzX09iamVjdCogZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
YWRkKEV2YXMqIGNhbnZhcykKIHsKICAgICBzdGF0aWMgRXZhc19TbWFydCogc21hcnQgPSAwOwog
Ci0gICAgaWYgKF9ld2tfdGlsZWRfbG9nX2RvbSA8IDApCi0gICAgICAgIF9ld2tfdGlsZWRfbG9n
X2RvbSA9IGVpbmFfbG9nX2RvbWFpbl9yZWdpc3RlcigiRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmUi
LCAwKTsKKyAgICBpZiAoX2V3a1RpbGVkTG9nRG9tIDwgMCkKKyAgICAgICAgX2V3a1RpbGVkTG9n
RG9tID0gZWluYV9sb2dfZG9tYWluX3JlZ2lzdGVyKCJFd2tfVGlsZWRfQmFja2luZ19TdG9yZSIs
IDApOwogCiAgICAgaWYgKCFzbWFydCkgewogICAgICAgICBzdGF0aWMgRXZhc19TbWFydF9DbGFz
cyBzYyA9CkBAIC0xNDAyLDcgKzE0MDIsNyBAQCB2b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3JlbmRlcl9jYl9zZXQoRXZhc19PYmplY3QqIGV3a1RpbGUsIEVpbmFfQm9vbCAoKmNhbAogewog
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGNhbGxiYWNrKTsKICAgICBQUklWX0RBVEFf
R0VUX09SX1JFVFVSTihld2tUaWxlLCBwcml2KTsKLSAgICBwcml2LT5yZW5kZXIuY2IgPSBjYWxs
YmFjazsKKyAgICBwcml2LT5yZW5kZXIuY2FsbGJhY2sgPSBjYWxsYmFjazsKICAgICBwcml2LT5y
ZW5kZXIuZGF0YSA9ICh2b2lkKilkYXRhOwogfQogCkBAIC0xNDM5LDcgKzE0MzksNyBAQCBzdGF0
aWMgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zY3JvbGxfZnVsbF9vZmZzZXRf
c2V0X2ludGVybmFsKEV3a19UaQogCiBFaW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
c2Nyb2xsX2Z1bGxfb2Zmc2V0X3NldChFdmFzX09iamVjdCogZXdrVGlsZSwgRXZhc19Db29yZCB4
LCBFdmFzX0Nvb3JkIHkpCiB7Ci0gICAgREJHKCJvPSVwLCB4PSVkLCB5PSVkIiwgZXdrVGlsZSwg
eCwgeSk7CisgICAgREJHKCJld2tUaWxlJXAsIHg9JWQsIHk9JWQiLCBld2tUaWxlLCB4LCB5KTsK
IAogICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKGV3a1RpbGUsIHByaXYsIEVJTkFfRkFMU0Up
OwogICAgIGlmICh4ID09IHByaXYtPnZpZXcub2Zmc2V0LmN1ci54ICYmIHkgPT0gcHJpdi0+dmll
dy5vZmZzZXQuY3VyLnkpCkBAIC0xNDQ4LDE2ICsxNDQ4LDE2IEBAIEVpbmFfQm9vbCBld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9zY3JvbGxfZnVsbF9vZmZzZXRfc2V0KEV2YXNfT2JqZWN0KiBld2tU
aWxlLCBFCiAgICAgcmV0dXJuIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zY3JvbGxfZnVsbF9v
ZmZzZXRfc2V0X2ludGVybmFsKHByaXYsIHgsIHkpOwogfQogCi1FaW5hX0Jvb2wgZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfc2Nyb2xsX2Z1bGxfb2Zmc2V0X2FkZChFdmFzX09iamVjdCogZXdrVGls
ZSwgRXZhc19Db29yZCBkeCwgRXZhc19Db29yZCBkeSkKK0VpbmFfQm9vbCBld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9zY3JvbGxfZnVsbF9vZmZzZXRfYWRkKEV2YXNfT2JqZWN0KiBld2tUaWxlLCBF
dmFzX0Nvb3JkIGRlbHRhWCwgRXZhc19Db29yZCBkZWx0YVkpCiB7Ci0gICAgREJHKCJvPSVwLCBk
eD0lZCwgZHk9JWQiLCBld2tUaWxlLCBkeCwgZHkpOworICAgIERCRygiZXdrVGlsZSVwLCBkZWx0
YVg9JWQsIGRlbHRhWT0lZCIsIGV3a1RpbGUsIGRlbHRhWCwgZGVsdGFZKTsKIAogICAgIFBSSVZf
REFUQV9HRVRfT1JfUkVUVVJOKGV3a1RpbGUsIHByaXYsIEVJTkFfRkFMU0UpOwotICAgIGlmICgh
ZHggJiYgIWR5KQorICAgIGlmICghZGVsdGFYICYmICFkZWx0YVkpCiAgICAgICAgIHJldHVybiBF
SU5BX1RSVUU7CiAKICAgICByZXR1cm4gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3Njcm9sbF9m
dWxsX29mZnNldF9zZXRfaW50ZXJuYWwKLSAgICAgICAgICAgICAgIChwcml2LCBwcml2LT52aWV3
Lm9mZnNldC5jdXIueCArIGR4LCBwcml2LT52aWV3Lm9mZnNldC5jdXIueSArIGR5KTsKKyAgICAg
ICAgICAgICAgIChwcml2LCBwcml2LT52aWV3Lm9mZnNldC5jdXIueCArIGRlbHRhWCwgcHJpdi0+
dmlldy5vZmZzZXQuY3VyLnkgKyBkZWx0YVkpOwogfQogCiBzdGF0aWMgRWluYV9Cb29sIF9ld2tf
dGlsZWRfYmFja2luZ19zdG9yZV96b29tX3NldF9pbnRlcm5hbChFd2tfVGlsZWRfQmFja2luZ19T
dG9yZV9EYXRhKiBwcml2LCBmbG9hdCogem9vbSwgRXZhc19Db29yZCBjdXJyZW50WCwgRXZhc19D
b29yZCBjdXJyZW50WSwgRXZhc19Db29yZCogb2Zmc2V0WCwgRXZhc19Db29yZCogb2Zmc2V0WSkK
QEAgLTE0NzIsMTkgKzE0NzIsMTkgQEAgc3RhdGljIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfem9vbV9zZXRfaW50ZXJuYWwoRXdrX1RpbGVkX0JhY2tpbmdfU3QKICAgICB9CiAK
ICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2ZsdXNoKHBy
aXYpOwotICAgIEV2YXNfQ29vcmQgdHcsIHRoOworICAgIEV2YXNfQ29vcmQgdGlsZVdpZHRoLCB0
aWxlSGVpZ2h0OwogCiAgICAgKnpvb20gPSBST1VOREVEX1pPT00ocHJpdi0+dmlldy50aWxlLndp
ZHRoLCAqem9vbSk7CiAKLSAgICB0dyA9IHByaXYtPnZpZXcudGlsZS53aWR0aDsKLSAgICB0aCA9
IHByaXYtPnZpZXcudGlsZS5oZWlnaHQ7CisgICAgdGlsZVdpZHRoID0gcHJpdi0+dmlldy50aWxl
LndpZHRoOworICAgIHRpbGVIZWlnaHQgPSBwcml2LT52aWV3LnRpbGUuaGVpZ2h0OwogCiAgICAg
ZmxvYXQgc2NhbGUgPSAqem9vbSAvIHByaXYtPnZpZXcudGlsZS56b29tOwogCiAgICAgcHJpdi0+
dmlldy50aWxlLnpvb20gPSAqem9vbTsKICAgICAvLyB0b2RvOiBjaGVjayBjdXJyZW50WCBbMCwg
d10uLi4KLSAgICBwcml2LT52aWV3Lm9mZnNldC56b29tX2NlbnRlci54ID0gY3VycmVudFg7Ci0g
ICAgcHJpdi0+dmlldy5vZmZzZXQuem9vbV9jZW50ZXIueSA9IGN1cnJlbnRZOworICAgIHByaXYt
PnZpZXcub2Zmc2V0Lnpvb21DZW50ZXIueCA9IGN1cnJlbnRYOworICAgIHByaXYtPnZpZXcub2Zm
c2V0Lnpvb21DZW50ZXIueSA9IGN1cnJlbnRZOwogCiAKICAgICBpZiAoIXByaXYtPnZpZXcud2lk
dGggfHwgIXByaXYtPnZpZXcuaGVpZ2h0KSB7CkBAIC0xNDkyLDM4ICsxNDkyLDM4IEBAIHN0YXRp
YyBFaW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3pvb21fc2V0X2ludGVybmFsKEV3
a19UaWxlZF9CYWNraW5nX1N0CiAgICAgICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSA9IDA7
CiAgICAgICAgIHJldHVybiBFSU5BX1RSVUU7CiAgICAgfQotICAgIEVpbmFfSW5saXN0KiogaXRy
LCAqKml0cl9lbmQ7CisgICAgRWluYV9Jbmxpc3QqKiBpdGVyYXRvciwgKippdGVyYXRvckVuZDsK
ICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKiBpdDsKIAotICAgIEV2YXNfQ29vcmQg
bmV3X3ggPSBjdXJyZW50WCArIChwcml2LT52aWV3Lm9mZnNldC5jdXIueCAtIGN1cnJlbnRYKSAq
IHNjYWxlOwotICAgIEV2YXNfQ29vcmQgbmV3X3kgPSBjdXJyZW50WSArIChwcml2LT52aWV3Lm9m
ZnNldC5jdXIueSAtIGN1cnJlbnRZKSAqIHNjYWxlOworICAgIEV2YXNfQ29vcmQgbmV3WCA9IGN1
cnJlbnRYICsgKHByaXYtPnZpZXcub2Zmc2V0LmN1ci54IC0gY3VycmVudFgpICogc2NhbGU7Cisg
ICAgRXZhc19Db29yZCBuZXdZID0gY3VycmVudFkgKyAocHJpdi0+dmlldy5vZmZzZXQuY3VyLnkg
LSBjdXJyZW50WSkgKiBzY2FsZTsKIAotICAgIEV2YXNfQ29vcmQgbW9kZWxfdyA9IHByaXYtPm1v
ZGVsLndpZHRoICogc2NhbGU7Ci0gICAgRXZhc19Db29yZCBtb2RlbF9oID0gcHJpdi0+bW9kZWwu
aGVpZ2h0ICogc2NhbGU7CisgICAgRXZhc19Db29yZCBtb2RlbFdpZHRoID0gcHJpdi0+bW9kZWwu
d2lkdGggKiBzY2FsZTsKKyAgICBFdmFzX0Nvb3JkIG1vZGVsSGVpZ2h0ID0gcHJpdi0+bW9kZWwu
aGVpZ2h0ICogc2NhbGU7CiAKLSAgICBpZiAobW9kZWxfdyA8IHByaXYtPnZpZXcud2lkdGggfHwg
bmV3X3ggPj0gMCkKLSAgICAgICAgbmV3X3ggPSAwOwotICAgIGVsc2UgaWYgKC1uZXdfeCArIHBy
aXYtPnZpZXcud2lkdGggPj0gbW9kZWxfdykKLSAgICAgICAgbmV3X3ggPSAtbW9kZWxfdyArIHBy
aXYtPnZpZXcud2lkdGg7CisgICAgaWYgKG1vZGVsV2lkdGggPCBwcml2LT52aWV3LndpZHRoIHx8
IG5ld1ggPj0gMCkKKyAgICAgICAgbmV3WCA9IDA7CisgICAgZWxzZSBpZiAoLW5ld1ggKyBwcml2
LT52aWV3LndpZHRoID49IG1vZGVsV2lkdGgpCisgICAgICAgIG5ld1ggPSAtbW9kZWxXaWR0aCAr
IHByaXYtPnZpZXcud2lkdGg7CiAKLSAgICBpZiAobW9kZWxfaCA8IHByaXYtPnZpZXcuaGVpZ2h0
IHx8IG5ld195ID49IDApCi0gICAgICAgIG5ld195ID0gMDsKLSAgICBlbHNlIGlmICgtbmV3X3kg
KyBwcml2LT52aWV3LmhlaWdodCA+PSBtb2RlbF9oKQotICAgICAgICBuZXdfeSA9IC1tb2RlbF9o
ICsgcHJpdi0+dmlldy5oZWlnaHQ7CisgICAgaWYgKG1vZGVsSGVpZ2h0IDwgcHJpdi0+dmlldy5o
ZWlnaHQgfHwgbmV3WSA+PSAwKQorICAgICAgICBuZXdZID0gMDsKKyAgICBlbHNlIGlmICgtbmV3
WSArIHByaXYtPnZpZXcuaGVpZ2h0ID49IG1vZGVsSGVpZ2h0KQorICAgICAgICBuZXdZID0gLW1v
ZGVsSGVpZ2h0ICsgcHJpdi0+dmlldy5oZWlnaHQ7CiAKLSAgICBFdmFzX0Nvb3JkIGJ4ID0gbmV3
X3ggJSB0dzsKLSAgICBFdmFzX0Nvb3JkIGJ5ID0gbmV3X3kgJSB0aDsKLSAgICBwcml2LT5tb2Rl
bC5iYXNlLmNvbCA9IC1uZXdfeCAvIHR3OwotICAgIHByaXYtPm1vZGVsLmJhc2Uucm93ID0gLW5l
d195IC8gdGg7CisgICAgRXZhc19Db29yZCBiYXNlWCA9IG5ld1ggJSB0aWxlV2lkdGg7CisgICAg
RXZhc19Db29yZCBiYXNlWSA9IG5ld1kgJSB0aWxlSGVpZ2h0OworICAgIHByaXYtPm1vZGVsLmJh
c2UuY29sdW1uID0gLW5ld1ggLyB0aWxlV2lkdGg7CisgICAgcHJpdi0+bW9kZWwuYmFzZS5yb3cg
PSAtbmV3WSAvIHRpbGVIZWlnaHQ7CiAKICAgICBwcml2LT5jaGFuZ2VkLnNpemUgPSBFSU5BX1RS
VUU7CiAgICAgcHJpdi0+Y2hhbmdlZC5tb2RlbCA9IEVJTkFfVFJVRTsKICAgICBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfY2hhbmdlZChwcml2KTsKIAotICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1
ci54ID0gbmV3X3g7Ci0gICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkgPSBuZXdfeTsKLSAgICBw
cml2LT52aWV3Lm9mZnNldC5iYXNlLnggPSBieDsKLSAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNl
LnkgPSBieTsKKyAgICBwcml2LT52aWV3Lm9mZnNldC5jdXIueCA9IG5ld1g7CisgICAgcHJpdi0+
dmlldy5vZmZzZXQuY3VyLnkgPSBuZXdZOworICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCA9
IGJhc2VYOworICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSA9IGJhc2VZOwogCiAgICAgcHJp
di0+dmlldy5vZmZzZXQub2xkLnggPSBwcml2LT52aWV3Lm9mZnNldC5jdXIueDsKICAgICBwcml2
LT52aWV3Lm9mZnNldC5vbGQueSA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci55OwpAQCAtMTUzMSwy
OCArMTUzMSwyOCBAQCBzdGF0aWMgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV96
b29tX3NldF9pbnRlcm5hbChFd2tfVGlsZWRfQmFja2luZ19TdAogICAgICpvZmZzZXRZID0gcHJp
di0+dmlldy5vZmZzZXQuY3VyLnk7CiAKICAgICBldmFzX29iamVjdF9tb3ZlKAotICAgICAgICBw
cml2LT5jb250ZW50c19jbGlwcGVyLAotICAgICAgICBuZXdfeCArIHByaXYtPnZpZXcueCwKLSAg
ICAgICAgbmV3X3kgKyBwcml2LT52aWV3LnkpOworICAgICAgICBwcml2LT5jb250ZW50c0NsaXBw
ZXIsCisgICAgICAgIG5ld1ggKyBwcml2LT52aWV3LngsCisgICAgICAgIG5ld1kgKyBwcml2LT52
aWV3LnkpOwogCiAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2ZpbGxfcmVuZGVyZXJzKHBy
aXYpOwogCi0gICAgRXZhc19Db29yZCBveSA9IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSArIHBy
aXYtPnZpZXcueTsKLSAgICBFdmFzX0Nvb3JkIGJhc2Vfb3ggPSBwcml2LT52aWV3LnggKyBwcml2
LT52aWV3Lm9mZnNldC5iYXNlLng7CisgICAgRXZhc19Db29yZCB0aWxlUG9zaXRpb25ZID0gcHJp
di0+dmlldy5vZmZzZXQuYmFzZS55ICsgcHJpdi0+dmlldy55OworICAgIEV2YXNfQ29vcmQgYmFz
ZVRpbGVQb3NpdGlvblggPSBwcml2LT52aWV3LnggKyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLng7
CiAKLSAgICBpdHIgPSBwcml2LT52aWV3Lml0ZW1zOwotICAgIGl0cl9lbmQgPSBpdHIgKyBwcml2
LT52aWV3LnJvd3M7CisgICAgaXRlcmF0b3IgPSBwcml2LT52aWV3Lml0ZW1zOworICAgIGl0ZXJh
dG9yRW5kID0gaXRlcmF0b3IgKyBwcml2LT52aWV3LnJvd3M7CiAKLSAgICBmb3IgKDsgaXRyIDwg
aXRyX2VuZDsgaXRyKyspIHsKLSAgICAgICAgRXZhc19Db29yZCBveCA9IGJhc2Vfb3g7Ci0gICAg
ICAgIEVpbmFfSW5saXN0KiBsc3QgPSAqaXRyOworICAgIGZvciAoOyBpdGVyYXRvciA8IGl0ZXJh
dG9yRW5kOyBpdGVyYXRvcisrKSB7CisgICAgICAgIEV2YXNfQ29vcmQgb3ggPSBiYXNlVGlsZVBv
c2l0aW9uWDsKKyAgICAgICAgRWluYV9Jbmxpc3QqIGxzdCA9ICppdGVyYXRvcjsKIAogICAgICAg
ICBFSU5BX0lOTElTVF9GT1JFQUNIKGxzdCwgaXQpIHsKLSAgICAgICAgICAgIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV9pdGVtX21vdmUoaXQsIG94LCBveSk7Ci0gICAgICAgICAgICBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9yZXNpemUoaXQsIHR3LCB0aCk7Ci0gICAgICAgICAgICBv
eCArPSB0dzsKKyAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX21vdmUo
aXQsIG94LCB0aWxlUG9zaXRpb25ZKTsKKyAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9pdGVtX3Jlc2l6ZShpdCwgdGlsZVdpZHRoLCB0aWxlSGVpZ2h0KTsKKyAgICAgICAgICAg
IG94ICs9IHRpbGVXaWR0aDsKICAgICAgICAgfQotICAgICAgICBveSArPSB0aDsKKyAgICAgICAg
dGlsZVBvc2l0aW9uWSArPSB0aWxlSGVpZ2h0OwogICAgIH0KIAogICAgIHJldHVybiBFSU5BX1RS
VUU7CkBAIC0xNTYwLDcgKzE1NjAsNyBAQCBzdGF0aWMgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV96b29tX3NldF9pbnRlcm5hbChFd2tfVGlsZWRfQmFja2luZ19TdAogCiBFaW5h
X0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfem9vbV9zZXQoRXZhc19PYmplY3QqIGV3a1Rp
bGUsIGZsb2F0KiB6b29tLCBFdmFzX0Nvb3JkIGN1cnJlbnRYLCBFdmFzX0Nvb3JkIGN1cnJlbnRZ
LCBFdmFzX0Nvb3JkKiBvZmZzZXRYLCBFdmFzX0Nvb3JkKiBvZmZzZXRZKQogewotICAgIERCRygi
bz0lcCwgem9vbT0lZiIsIGV3a1RpbGUsICp6b29tKTsKKyAgICBEQkcoImV3a1RpbGUlcCwgem9v
bT0lZiIsIGV3a1RpbGUsICp6b29tKTsKIAogICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKGV3
a1RpbGUsIHByaXYsIEVJTkFfRkFMU0UpOwogCkBAIC0xNTY5LDczICsxNTY5LDczIEBAIEVpbmFf
Qm9vbCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV96b29tX3NldChFdmFzX09iamVjdCogZXdrVGls
ZSwgZmxvYXQqIHpvb20sIEV2CiAKIEVpbmFfQm9vbCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV96
b29tX3dlYWtfc2V0KEV2YXNfT2JqZWN0KiBld2tUaWxlLCBmbG9hdCB6b29tLCBFdmFzX0Nvb3Jk
IGN1cnJlbnRYLCBFdmFzX0Nvb3JkIGN1cnJlbnRZKQogewotICAgIERCRygibz0lcCwgem9vbT0l
ZiIsIGV3a1RpbGUsIHpvb20pOworICAgIERCRygiZXdrVGlsZSVwLCB6b29tPSVmIiwgZXdrVGls
ZSwgem9vbSk7CiAgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4oZXdrVGlsZSwgcHJpdiwgRUlO
QV9GQUxTRSk7CiAgICAgaWYgKCFwcml2LT52aWV3LndpZHRoIHx8ICFwcml2LT52aWV3LmhlaWdo
dCkKICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7Ci0gICAgRWluYV9Jbmxpc3QqKiBpdHIsICoq
IGl0cl9lbmQ7Ci0gICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSogaXQ7Ci0gICAgRXZh
c19Db29yZCB0dywgdGg7Ci0gICAgRWluYV9Cb29sIHJlY2FsYyA9IEVJTkFfRkFMU0U7CisgICAg
RWluYV9Jbmxpc3QqKiBpdGVyYXRvciwgKiogaXRlcmF0b3JFbmQ7CisgICAgRXdrX1RpbGVkX0Jh
Y2tpbmdfU3RvcmVfSXRlbSogaXRlbTsKKyAgICBFdmFzX0Nvb3JkIHRpbGVXaWR0aCwgdGlsZUhl
aWdodDsKKyAgICBFaW5hX0Jvb2wgcmVDYWxjdWxhdGUgPSBFSU5BX0ZBTFNFOwogCiAgICAgZmxv
YXQgc2NhbGUgPSB6b29tIC8gcHJpdi0+dmlldy50aWxlLnpvb207CiAKLSAgICB0dyA9IFRJTEVf
U0laRV9BVF9aT09NKHByaXYtPnZpZXcudGlsZS53aWR0aCwgc2NhbGUpOwotICAgIHNjYWxlID0g
VElMRV9aT09NX0FUX1NJWkUodHcsIHByaXYtPnZpZXcudGlsZS53aWR0aCk7Ci0gICAgdGggPSBU
SUxFX1NJWkVfQVRfWk9PTShwcml2LT52aWV3LnRpbGUuaGVpZ2h0LCBzY2FsZSk7CisgICAgdGls
ZVdpZHRoID0gVElMRV9TSVpFX0FUX1pPT00ocHJpdi0+dmlldy50aWxlLndpZHRoLCBzY2FsZSk7
CisgICAgc2NhbGUgPSBUSUxFX1pPT01fQVRfU0laRSh0aWxlV2lkdGgsIHByaXYtPnZpZXcudGls
ZS53aWR0aCk7CisgICAgdGlsZUhlaWdodCA9IFRJTEVfU0laRV9BVF9aT09NKHByaXYtPnZpZXcu
dGlsZS5oZWlnaHQsIHNjYWxlKTsKICAgICB6b29tID0gc2NhbGUgKiBwcml2LT52aWV3LnRpbGUu
em9vbTsKIAotICAgIEV2YXNfQ29vcmQgbW9kZWxfdyA9IHByaXYtPm1vZGVsLndpZHRoICogc2Nh
bGU7Ci0gICAgRXZhc19Db29yZCBtb2RlbF9oID0gcHJpdi0+bW9kZWwuaGVpZ2h0ICogc2NhbGU7
CisgICAgRXZhc19Db29yZCBtb2RlbFdpZHRoID0gcHJpdi0+bW9kZWwud2lkdGggKiBzY2FsZTsK
KyAgICBFdmFzX0Nvb3JkIG1vZGVsSGVpZ2h0ID0gcHJpdi0+bW9kZWwuaGVpZ2h0ICogc2NhbGU7
CiAKLSAgICBldmFzX29iamVjdF9yZXNpemUocHJpdi0+Y29udGVudHNfY2xpcHBlciwgbW9kZWxf
dywgbW9kZWxfaCk7CisgICAgZXZhc19vYmplY3RfcmVzaXplKHByaXYtPmNvbnRlbnRzQ2xpcHBl
ciwgbW9kZWxXaWR0aCwgbW9kZWxIZWlnaHQpOwogCi0gICAgaW50IHZyb3dzID0gc3RhdGljX2Nh
c3Q8aW50PihjZWlsKHN0YXRpY19jYXN0PGZsb2F0Pihwcml2LT52aWV3LmhlaWdodCAvIHRoKSkg
KyAxKTsKLSAgICBpbnQgdmNvbHMgPSBzdGF0aWNfY2FzdDxpbnQ+KGNlaWwoc3RhdGljX2Nhc3Q8
ZmxvYXQ+KHByaXYtPnZpZXcud2lkdGggLyB0dykpICsgMSk7Ci0gICAgRXZhc19Db29yZCBuZXdf
eCA9IGN1cnJlbnRYICsgKHByaXYtPnZpZXcub2Zmc2V0LmN1ci54IC0gY3VycmVudFgpICogc2Nh
bGU7Ci0gICAgRXZhc19Db29yZCBuZXdfeSA9IGN1cnJlbnRZICsgKHByaXYtPnZpZXcub2Zmc2V0
LmN1ci55IC0gY3VycmVudFkpICogc2NhbGU7Ci0gICAgRXZhc19Db29yZCBieCA9IG5ld194ICUg
dHc7Ci0gICAgRXZhc19Db29yZCBieSA9IG5ld195ICUgdGg7Ci0gICAgdW5zaWduZWQgbG9uZyBi
YXNlX3JvdyA9IC1uZXdfeSAvIHRoOwotICAgIHVuc2lnbmVkIGxvbmcgYmFzZV9jb2wgPSAtbmV3
X3ggLyB0dzsKKyAgICBpbnQgdnJvd3MgPSBzdGF0aWNfY2FzdDxpbnQ+KGNlaWwoc3RhdGljX2Nh
c3Q8ZmxvYXQ+KHByaXYtPnZpZXcuaGVpZ2h0IC8gdGlsZUhlaWdodCkpICsgMSk7CisgICAgaW50
IHZjb2xzID0gc3RhdGljX2Nhc3Q8aW50PihjZWlsKHN0YXRpY19jYXN0PGZsb2F0Pihwcml2LT52
aWV3LndpZHRoIC8gdGlsZVdpZHRoKSkgKyAxKTsKKyAgICBFdmFzX0Nvb3JkIG5ld1ggPSBjdXJy
ZW50WCArIChwcml2LT52aWV3Lm9mZnNldC5jdXIueCAtIGN1cnJlbnRYKSAqIHNjYWxlOworICAg
IEV2YXNfQ29vcmQgbmV3WSA9IGN1cnJlbnRZICsgKHByaXYtPnZpZXcub2Zmc2V0LmN1ci55IC0g
Y3VycmVudFkpICogc2NhbGU7CisgICAgRXZhc19Db29yZCBiYXNlWCA9IG5ld1ggJSB0aWxlV2lk
dGg7CisgICAgRXZhc19Db29yZCBiYXNlWSA9IG5ld1kgJSB0aWxlSGVpZ2h0OworICAgIHVuc2ln
bmVkIGxvbmcgYmFzZVJvdyA9IC1uZXdZIC8gdGlsZUhlaWdodDsKKyAgICB1bnNpZ25lZCBsb25n
IGJhc2VDb2x1bW4gPSAtbmV3WCAvIHRpbGVXaWR0aDsKIAotICAgIGlmIChiYXNlX3JvdyAhPSBw
cml2LT5tb2RlbC5iYXNlLnJvdyB8fCBiYXNlX2NvbCAhPSBwcml2LT5tb2RlbC5iYXNlLmNvbCkg
ewotICAgICAgICBwcml2LT5tb2RlbC5iYXNlLnJvdyA9IGJhc2Vfcm93OwotICAgICAgICBwcml2
LT5tb2RlbC5iYXNlLmNvbCA9IGJhc2VfY29sOwotICAgICAgICByZWNhbGMgPSBFSU5BX1RSVUU7
CisgICAgaWYgKGJhc2VSb3cgIT0gcHJpdi0+bW9kZWwuYmFzZS5yb3cgfHwgYmFzZUNvbHVtbiAh
PSBwcml2LT5tb2RlbC5iYXNlLmNvbHVtbikgeworICAgICAgICBwcml2LT5tb2RlbC5iYXNlLnJv
dyA9IGJhc2VSb3c7CisgICAgICAgIHByaXYtPm1vZGVsLmJhc2UuY29sdW1uID0gYmFzZUNvbHVt
bjsKKyAgICAgICAgcmVDYWxjdWxhdGUgPSBFSU5BX1RSVUU7CiAgICAgfQogCiAgICAgaWYgKHZy
b3dzID4gcHJpdi0+dmlldy5yb3dzIHx8IHZjb2xzID4gcHJpdi0+dmlldy5jb2xzKQotICAgICAg
ICByZWNhbGMgPSBFSU5BX1RSVUU7CisgICAgICAgIHJlQ2FsY3VsYXRlID0gRUlOQV9UUlVFOwog
Ci0gICAgaWYgKHJlY2FsYykgeworICAgIGlmIChyZUNhbGN1bGF0ZSkgewogICAgICAgICBFdmFz
X0Nvb3JkIHdpZHRoLCBoZWlnaHQ7CiAgICAgICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldChl
d2tUaWxlLCAwLCAwLCAmd2lkdGgsICZoZWlnaHQpOwotICAgICAgICBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfcmVjYWxjX3JlbmRlcmVycyhwcml2LCB3aWR0aCwgaGVpZ2h0LCB0dywgdGgpOwor
ICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcmVjYWxjX3JlbmRlcmVycyhwcml2LCB3
aWR0aCwgaGVpZ2h0LCB0aWxlV2lkdGgsIHRpbGVIZWlnaHQpOwogICAgICAgICBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfZmlsbF9yZW5kZXJlcnMocHJpdik7CiAgICAgICAgIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV91cGRhdGVzX3Byb2Nlc3MocHJpdik7CiAgICAgfQogCi0gICAgRXZhc19D
b29yZCBiYXNlX294ID0gYnggKyBwcml2LT52aWV3Lng7Ci0gICAgRXZhc19Db29yZCBveSA9IGJ5
ICsgcHJpdi0+dmlldy55OworICAgIEV2YXNfQ29vcmQgYmFzZU94ID0gYmFzZVggKyBwcml2LT52
aWV3Lng7CisgICAgRXZhc19Db29yZCBveSA9IGJhc2VZICsgcHJpdi0+dmlldy55OwogCi0gICAg
ZXZhc19vYmplY3RfbW92ZShwcml2LT5jb250ZW50c19jbGlwcGVyLAotICAgICAgICAgICAgICAg
ICAgICAgbmV3X3ggKyBwcml2LT52aWV3LngsCi0gICAgICAgICAgICAgICAgICAgICBuZXdfeSAr
IHByaXYtPnZpZXcueSk7CisgICAgZXZhc19vYmplY3RfbW92ZShwcml2LT5jb250ZW50c0NsaXBw
ZXIsCisgICAgICAgICAgICAgICAgICAgICBuZXdYICsgcHJpdi0+dmlldy54LAorICAgICAgICAg
ICAgICAgICAgICAgbmV3WSArIHByaXYtPnZpZXcueSk7CiAKLSAgICBpdHIgPSBwcml2LT52aWV3
Lml0ZW1zOwotICAgIGl0cl9lbmQgPSBpdHIgKyBwcml2LT52aWV3LnJvd3M7CisgICAgaXRlcmF0
b3IgPSBwcml2LT52aWV3Lml0ZW1zOworICAgIGl0ZXJhdG9yRW5kID0gaXRlcmF0b3IgKyBwcml2
LT52aWV3LnJvd3M7CiAKLSAgICBmb3IgKDsgaXRyIDwgaXRyX2VuZDsgaXRyKyspIHsKLSAgICAg
ICAgRXZhc19Db29yZCBveCA9IGJhc2Vfb3g7Ci0gICAgICAgIEVpbmFfSW5saXN0KiBsc3QgPSAq
aXRyOworICAgIGZvciAoOyBpdGVyYXRvciA8IGl0ZXJhdG9yRW5kOyBpdGVyYXRvcisrKSB7Cisg
ICAgICAgIEV2YXNfQ29vcmQgb3ggPSBiYXNlT3g7CisgICAgICAgIEVpbmFfSW5saXN0KiBsaXN0
ID0gKml0ZXJhdG9yOwogCi0gICAgICAgIEVJTkFfSU5MSVNUX0ZPUkVBQ0gobHN0LCBpdCkgewot
ICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fbW92ZShpdCwgb3gsIG95
KTsKLSAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Jlc2l6ZShpdCwg
dHcsIHRoKTsKLSAgICAgICAgICAgIG94ICs9IHR3OworICAgICAgICBFSU5BX0lOTElTVF9GT1JF
QUNIKGxpc3QsIGl0ZW0pIHsKKyAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9p
dGVtX21vdmUoaXRlbSwgb3gsIG95KTsKKyAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9pdGVtX3Jlc2l6ZShpdGVtLCB0aWxlV2lkdGgsIHRpbGVIZWlnaHQpOworICAgICAgICAg
ICAgb3ggKz0gdGlsZVdpZHRoOwogICAgICAgICB9Ci0gICAgICAgIG95ICs9IHRoOworICAgICAg
ICBveSArPSB0aWxlSGVpZ2h0OwogICAgIH0KIAogICAgIHJldHVybiBFSU5BX1RSVUU7CkBAIC0x
NjQ0LDgxICsxNjQ0LDgxIEBAIEVpbmFfQm9vbCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV96b29t
X3dlYWtfc2V0KEV2YXNfT2JqZWN0KiBld2tUaWxlLCBmbG9hdCB6b29tCiB2b2lkIGV3a190aWxl
ZF9iYWNraW5nX3N0b3JlX2ZpeF9vZmZzZXRzKEV2YXNfT2JqZWN0KiBld2tUaWxlLCBFdmFzX0Nv
b3JkIHdpZHRoLCBFdmFzX0Nvb3JkIGhlaWdodCkKIHsKICAgICBQUklWX0RBVEFfR0VUX09SX1JF
VFVSTihld2tUaWxlLCBwcml2KTsKLSAgICBFaW5hX0lubGlzdCoqIGl0ciwgKippdHJfZW5kOwot
ICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0qIGl0OwotICAgIEV2YXNfQ29vcmQgbmV3
X3ggPSBwcml2LT52aWV3Lm9mZnNldC5jdXIueDsKLSAgICBFdmFzX0Nvb3JkIG5ld195ID0gcHJp
di0+dmlldy5vZmZzZXQuY3VyLnk7Ci0gICAgRXZhc19Db29yZCBieCA9IHByaXYtPnZpZXcub2Zm
c2V0LmJhc2UueDsKLSAgICBFdmFzX0Nvb3JkIGJ5ID0gcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55
OwotICAgIEV2YXNfQ29vcmQgdHcgPSBwcml2LT52aWV3LnRpbGUud2lkdGg7Ci0gICAgRXZhc19D
b29yZCB0aCA9IHByaXYtPnZpZXcudGlsZS5oZWlnaHQ7Ci0KLSAgICBpZiAoLW5ld194ID4gd2lk
dGgpIHsKLSAgICAgICAgbmV3X3ggPSAtd2lkdGg7Ci0gICAgICAgIGJ4ID0gbmV3X3ggJSB0dzsK
LSAgICAgICAgcHJpdi0+bW9kZWwuYmFzZS5jb2wgPSAtbmV3X3ggLyB0dzsKKyAgICBFaW5hX0lu
bGlzdCoqIGl0ZXJhdG9yLCAqKml0ZXJhdG9yRW5kOworICAgIEV3a19UaWxlZF9CYWNraW5nX1N0
b3JlX0l0ZW0qIGl0ZW07CisgICAgRXZhc19Db29yZCBuZXdYID0gcHJpdi0+dmlldy5vZmZzZXQu
Y3VyLng7CisgICAgRXZhc19Db29yZCBuZXdZID0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLnk7Cisg
ICAgRXZhc19Db29yZCBiYXNlWCA9IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueDsKKyAgICBFdmFz
X0Nvb3JkIGJhc2VZID0gcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55OworICAgIEV2YXNfQ29vcmQg
dGlsZVdpZHRoID0gcHJpdi0+dmlldy50aWxlLndpZHRoOworICAgIEV2YXNfQ29vcmQgdGlsZUhl
aWdodCA9IHByaXYtPnZpZXcudGlsZS5oZWlnaHQ7CisKKyAgICBpZiAoLW5ld1ggPiB3aWR0aCkg
eworICAgICAgICBuZXdYID0gLXdpZHRoOworICAgICAgICBiYXNlWCA9IG5ld1ggJSB0aWxlV2lk
dGg7CisgICAgICAgIHByaXYtPm1vZGVsLmJhc2UuY29sdW1uID0gLW5ld1ggLyB0aWxlV2lkdGg7
CiAgICAgfQogCi0gICAgaWYgKC1uZXdfeSA+IGhlaWdodCkgewotICAgICAgICBuZXdfeSA9IC1o
ZWlnaHQ7Ci0gICAgICAgIGJ5ID0gbmV3X3kgJSB0aDsKLSAgICAgICAgcHJpdi0+bW9kZWwuYmFz
ZS5yb3cgPSAtbmV3X3kgLyB0aDsKKyAgICBpZiAoLW5ld1kgPiBoZWlnaHQpIHsKKyAgICAgICAg
bmV3WSA9IC1oZWlnaHQ7CisgICAgICAgIGJhc2VZID0gbmV3WSAlIHRpbGVIZWlnaHQ7CisgICAg
ICAgIHByaXYtPm1vZGVsLmJhc2Uucm93ID0gLW5ld1kgLyB0aWxlSGVpZ2h0OwogICAgIH0KIAot
ICAgIGlmIChieCA+PSAwIHx8IGJ4IDw9IC0yICogcHJpdi0+dmlldy50aWxlLndpZHRoKSB7Ci0g
ICAgICAgIGJ4ID0gbmV3X3ggJSB0dzsKLSAgICAgICAgcHJpdi0+bW9kZWwuYmFzZS5jb2wgPSAt
bmV3X3ggLyB0dzsKKyAgICBpZiAoYmFzZVggPj0gMCB8fCBiYXNlWCA8PSAtMiAqIHByaXYtPnZp
ZXcudGlsZS53aWR0aCkgeworICAgICAgICBiYXNlWCA9IG5ld1ggJSB0aWxlV2lkdGg7CisgICAg
ICAgIHByaXYtPm1vZGVsLmJhc2UuY29sdW1uID0gLW5ld1ggLyB0aWxlV2lkdGg7CiAgICAgfQog
Ci0gICAgaWYgKGJ5ID49IDAgfHwgYnkgPD0gLTIgKiBwcml2LT52aWV3LnRpbGUuaGVpZ2h0KSB7
Ci0gICAgICAgIGJ5ID0gbmV3X3kgJSB0aDsKLSAgICAgICAgcHJpdi0+bW9kZWwuYmFzZS5yb3cg
PSAtbmV3X3kgLyB0aDsKKyAgICBpZiAoYmFzZVkgPj0gMCB8fCBiYXNlWSA8PSAtMiAqIHByaXYt
PnZpZXcudGlsZS5oZWlnaHQpIHsKKyAgICAgICAgYmFzZVkgPSBuZXdZICUgdGlsZUhlaWdodDsK
KyAgICAgICAgcHJpdi0+bW9kZWwuYmFzZS5yb3cgPSAtbmV3WSAvIHRpbGVIZWlnaHQ7CiAgICAg
fQogCi0gICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggPSBuZXdfeDsKLSAgICBwcml2LT52aWV3
Lm9mZnNldC5jdXIueSA9IG5ld195OwotICAgIHByaXYtPnZpZXcub2Zmc2V0Lm9sZC54ID0gbmV3
X3g7Ci0gICAgcHJpdi0+dmlldy5vZmZzZXQub2xkLnkgPSBuZXdfeTsKLSAgICBwcml2LT52aWV3
Lm9mZnNldC5iYXNlLnggPSBieDsKLSAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgPSBieTsK
LSAgICBldmFzX29iamVjdF9tb3ZlKHByaXYtPmNvbnRlbnRzX2NsaXBwZXIsCi0gICAgICAgICAg
ICAgICAgICAgICBuZXdfeCArIHByaXYtPnZpZXcueCwKLSAgICAgICAgICAgICAgICAgICAgIG5l
d195ICsgcHJpdi0+dmlldy55KTsKKyAgICBwcml2LT52aWV3Lm9mZnNldC5jdXIueCA9IG5ld1g7
CisgICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkgPSBuZXdZOworICAgIHByaXYtPnZpZXcub2Zm
c2V0Lm9sZC54ID0gbmV3WDsKKyAgICBwcml2LT52aWV3Lm9mZnNldC5vbGQueSA9IG5ld1k7Cisg
ICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54ID0gYmFzZVg7CisgICAgcHJpdi0+dmlldy5vZmZz
ZXQuYmFzZS55ID0gYmFzZVk7CisgICAgZXZhc19vYmplY3RfbW92ZShwcml2LT5jb250ZW50c0Ns
aXBwZXIsCisgICAgICAgICAgICAgICAgICAgICBuZXdYICsgcHJpdi0+dmlldy54LAorICAgICAg
ICAgICAgICAgICAgICAgbmV3WSArIHByaXYtPnZpZXcueSk7CiAKICAgICBFdmFzX0Nvb3JkIG95
ID0gcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ICsgcHJpdi0+dmlldy55OwogICAgIEV2YXNfQ29v
cmQgYmFzZV9veCA9IHByaXYtPnZpZXcueCArIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueDsKIAot
ICAgIGl0ciA9IHByaXYtPnZpZXcuaXRlbXM7Ci0gICAgaXRyX2VuZCA9IGl0ciArIHByaXYtPnZp
ZXcucm93czsKKyAgICBpdGVyYXRvciA9IHByaXYtPnZpZXcuaXRlbXM7CisgICAgaXRlcmF0b3JF
bmQgPSBpdGVyYXRvciArIHByaXYtPnZpZXcucm93czsKIAotICAgIGZvciAoOyBpdHIgPCBpdHJf
ZW5kOyBpdHIrKykgeworICAgIGZvciAoOyBpdGVyYXRvciA8IGl0ZXJhdG9yRW5kOyBpdGVyYXRv
cisrKSB7CiAgICAgICAgIEV2YXNfQ29vcmQgb3ggPSBiYXNlX294OwotICAgICAgICBFaW5hX0lu
bGlzdCogbHN0ID0gKml0cjsKKyAgICAgICAgRWluYV9Jbmxpc3QqIGxzdCA9ICppdGVyYXRvcjsK
IAotICAgICAgICBFSU5BX0lOTElTVF9GT1JFQUNIKGxzdCwgaXQpIHsKLSAgICAgICAgICAgIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX21vdmUoaXQsIG94LCBveSk7Ci0gICAgICAgICAg
ICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9yZXNpemUoaXQsIHR3LCB0aCk7Ci0gICAg
ICAgICAgICBveCArPSB0dzsKKyAgICAgICAgRUlOQV9JTkxJU1RfRk9SRUFDSChsc3QsIGl0ZW0p
IHsKKyAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX21vdmUoaXRlbSwg
b3gsIG95KTsKKyAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Jlc2l6
ZShpdGVtLCB0aWxlV2lkdGgsIHRpbGVIZWlnaHQpOworICAgICAgICAgICAgb3ggKz0gdGlsZVdp
ZHRoOwogICAgICAgICB9Ci0gICAgICAgIG95ICs9IHRoOworICAgICAgICBveSArPSB0aWxlSGVp
Z2h0OwogICAgIH0KIH0KIAogdm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV96b29tX3dlYWtf
c21vb3RoX3NjYWxlX3NldChFdmFzX09iamVjdCogZXdrVGlsZSwgRWluYV9Cb29sIHNtb290aFNj
YWxlKQogewogICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKGV3a1RpbGUsIHByaXYpOwotICAg
IEVpbmFfSW5saXN0KiogaXRyLCAqKml0cl9lbmQ7CisgICAgRWluYV9Jbmxpc3QqKiBpdGVyYXRv
ciwgKippdGVyYXRvckVuZDsKIAotICAgIGl0ciA9IHByaXYtPnZpZXcuaXRlbXM7Ci0gICAgaXRy
X2VuZCA9IGl0ciArIHByaXYtPnZpZXcucm93czsKLSAgICBwcml2LT52aWV3LnRpbGUuem9vbV93
ZWFrX3Ntb290aF9zY2FsZSA9IHNtb290aFNjYWxlOworICAgIGl0ZXJhdG9yID0gcHJpdi0+dmll
dy5pdGVtczsKKyAgICBpdGVyYXRvckVuZCA9IGl0ZXJhdG9yICsgcHJpdi0+dmlldy5yb3dzOwor
ICAgIHByaXYtPnZpZXcudGlsZS56b29tV2Vha1Ntb290aFNjYWxlID0gc21vb3RoU2NhbGU7CiAK
LSAgICBmb3IgKDsgaXRyPCBpdHJfZW5kOyBpdHIrKykgewotICAgICAgICBFd2tfVGlsZWRfQmFj
a2luZ19TdG9yZV9JdGVtKiBpdDsKLSAgICAgICAgRUlOQV9JTkxJU1RfRk9SRUFDSCgqaXRyLCBp
dCkKLSAgICAgICAgICAgIGlmIChpdC0+dGlsZSkKKyAgICBmb3IgKDsgaXRlcmF0b3I8IGl0ZXJh
dG9yRW5kOyBpdGVyYXRvcisrKSB7CisgICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0
ZW0qIGl0ZW07CisgICAgICAgIEVJTkFfSU5MSVNUX0ZPUkVBQ0goKml0ZXJhdG9yLCBpdGVtKQor
ICAgICAgICAgICAgaWYgKGl0ZW0tPnRpbGUpCiAgICAgICAgICAgICAgICAgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX2l0ZW1fc21vb3RoX3NjYWxlX3NldAotICAgICAgICAgICAgICAgICAgICAo
aXQsIHNtb290aFNjYWxlKTsKKyAgICAgICAgICAgICAgICAgICAgKGl0ZW0sIHNtb290aFNjYWxl
KTsKICAgICB9CiB9CiAKQEAgLTE3MzYsMTUgKzE3MzYsMTUgQEAgRWluYV9Cb29sIGV3a190aWxl
ZF9iYWNraW5nX3N0b3JlX3VwZGF0ZShFdmFzX09iamVjdCogZXdrVGlsZSwgY29uc3QgRWluYV9S
ZWN0YW4KIHZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRlc19wcm9jZXNzX3ByZV9z
ZXQoRXZhc19PYmplY3QqIGV3a1RpbGUsIHZvaWQqICgqY2FsbGJhY2spKHZvaWQqIGRhdGEsIEV2
YXNfT2JqZWN0ICpld2tUaWxlKSwgY29uc3Qgdm9pZCogZGF0YSkKIHsKICAgICBQUklWX0RBVEFf
R0VUX09SX1JFVFVSTihld2tUaWxlLCBwcml2KTsKLSAgICBwcml2LT5wcm9jZXNzLnByZV9jYiA9
IGNhbGxiYWNrOwotICAgIHByaXYtPnByb2Nlc3MucHJlX2RhdGEgPSAodm9pZCopZGF0YTsKKyAg
ICBwcml2LT5wcm9jZXNzLnByZUNhbGxiYWNrID0gY2FsbGJhY2s7CisgICAgcHJpdi0+cHJvY2Vz
cy5wcmVEYXRhID0gKHZvaWQqKWRhdGE7CiB9CiAKLXZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfdXBkYXRlc19wcm9jZXNzX3Bvc3Rfc2V0KEV2YXNfT2JqZWN0KiBld2tUaWxlLCB2b2lkKiAo
KmNhbGxiYWNrKSh2b2lkKiBkYXRhLCB2b2lkKiBwcmVfZGF0YSwgRXZhc19PYmplY3QgKmV3a1Rp
bGUpLCBjb25zdCB2b2lkKiBkYXRhKQordm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV91cGRh
dGVzX3Byb2Nlc3NfcG9zdF9zZXQoRXZhc19PYmplY3QqIGV3a1RpbGUsIHZvaWQqICgqY2FsbGJh
Y2spKHZvaWQqIGRhdGEsIHZvaWQqIHByZURhdGEsIEV2YXNfT2JqZWN0ICpld2tUaWxlKSwgY29u
c3Qgdm9pZCogZGF0YSkKIHsKICAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihld2tUaWxlLCBw
cml2KTsKLSAgICBwcml2LT5wcm9jZXNzLnBvc3RfY2IgPSBjYWxsYmFjazsKLSAgICBwcml2LT5w
cm9jZXNzLnBvc3RfZGF0YSA9ICh2b2lkKilkYXRhOworICAgIHByaXYtPnByb2Nlc3MucG9zdENh
bGxiYWNrID0gY2FsbGJhY2s7CisgICAgcHJpdi0+cHJvY2Vzcy5wb3N0RGF0YSA9ICh2b2lkKilk
YXRhOwogfQogCiB2b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3VwZGF0ZXNfcHJvY2VzcyhF
dmFzX09iamVjdCogZXdrVGlsZSkKQEAgLTE3ODYsNyArMTc4Niw3IEBAIHZvaWQgZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfZGlzYWJsZWRfdXBkYXRlX3NldChFdmFzX09iamVjdCogZXdrVGlsZSwg
RWluYV9Cb29sCiB2b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX2ZsdXNoKEV2YXNfT2JqZWN0
KiBld2tUaWxlKQogewogICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKGV3a1RpbGUsIHByaXYp
OwotICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSogdHVjID0gMDsKKyAgICBFd2tfVGlsZV9VbnVz
ZWRfQ2FjaGUqIHRpbGVVbnVzZWRDYWNoZSA9IDA7CiAKICAgICBwcml2LT52aWV3Lm9mZnNldC5j
dXIueCA9IDA7CiAgICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkgPSAwOwpAQCAtMTc5NCwxMSAr
MTc5NCwxMSBAQCB2b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX2ZsdXNoKEV2YXNfT2JqZWN0
KiBld2tUaWxlKQogICAgIHByaXYtPnZpZXcub2Zmc2V0Lm9sZC55ID0gMDsKICAgICBwcml2LT52
aWV3Lm9mZnNldC5iYXNlLnggPSAwOwogICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSA9IDA7
Ci0gICAgcHJpdi0+bW9kZWwuYmFzZS5jb2wgPSAwOworICAgIHByaXYtPm1vZGVsLmJhc2UuY29s
dW1uID0gMDsKICAgICBwcml2LT5tb2RlbC5iYXNlLnJvdyA9IDA7Ci0gICAgcHJpdi0+bW9kZWwu
Y3VyLmNvbHMgPSAxOwotICAgIHByaXYtPm1vZGVsLmN1ci5yb3dzID0gMTsKLSAgICBwcml2LT5t
b2RlbC5vbGQuY29scyA9IDA7CisgICAgcHJpdi0+bW9kZWwuY3VycmVudC5jb2x1bW5zID0gMTsK
KyAgICBwcml2LT5tb2RlbC5jdXJyZW50LnJvd3MgPSAxOworICAgIHByaXYtPm1vZGVsLm9sZC5j
b2x1bW5zID0gMDsKICAgICBwcml2LT5tb2RlbC5vbGQucm93cyA9IDA7CiAgICAgcHJpdi0+Y2hh
bmdlZC5zaXplID0gRUlOQV9UUlVFOwogCkBAIC0xODA5LDggKzE4MDksOCBAQCB2b2lkIGV3a190
aWxlZF9iYWNraW5nX3N0b3JlX2ZsdXNoKEV2YXNfT2JqZWN0KiBld2tUaWxlKQogCiAgICAgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9mbHVzaChwcml2KTsKICAg
ICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9kaXNzb2NpYXRlX2FsbChwcml2KTsKLSAg
ICB0dWMgPSBld2tfdGlsZV9tYXRyaXhfdW51c2VkX2NhY2hlX2dldChwcml2LT5tb2RlbC5tYXRy
aXgpOwotICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9jbGVhcih0dWMpOworICAgIHRpbGVVbnVz
ZWRDYWNoZSA9IGV3a190aWxlX21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1h
dHJpeCk7CisgICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2NsZWFyKHRpbGVVbnVzZWRDYWNoZSk7
CiAKICNpZmRlZiBERUJVR19NRU1fTEVBS1MKICAgICBwcmludGYoIlxuRkxVU0hFRCBCQUNLSU5H
IFNUT1JFLCBTVEFUVVMgQUZURVIgUkVDUkVBVElORyBUSUxFIE1BVFJJWDpcbiIpOwpAQCAtMTgy
MywxNiArMTgyMywxNiBAQCBFaW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3Jl
bmRlcl9yZWdpb24oRXZhc19PYmplY3QqIGV3a1RpbGUsIEV2YXNfQwogICAgIFBSSVZfREFUQV9H
RVRfT1JfUkVUVVJOKGV3a1RpbGUsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIEVpbmFfVGlsZV9H
cmlkX1NsaWNlciBzbGljZXI7CiAgICAgY29uc3QgRWluYV9UaWxlX0dyaWRfSW5mbyogaW5mbzsK
LSAgICBFdmFzX0Nvb3JkIHR3LCB0aDsKLSAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHR1YzsK
KyAgICBFdmFzX0Nvb3JkIHRpbGVXaWR0aCwgdGlsZUhlaWdodDsKKyAgICBFd2tfVGlsZV9VbnVz
ZWRfQ2FjaGUqIHRpbGVVbnVzZWRDYWNoZTsKIAotICAgIHR3ID0gcHJpdi0+dmlldy50aWxlLndp
ZHRoOwotICAgIHRoID0gcHJpdi0+dmlldy50aWxlLmhlaWdodDsKKyAgICB0aWxlV2lkdGggPSBw
cml2LT52aWV3LnRpbGUud2lkdGg7CisgICAgdGlsZUhlaWdodCA9IHByaXYtPnZpZXcudGlsZS5o
ZWlnaHQ7CiAgICAgem9vbSA9IFJPVU5ERURfWk9PTShwcml2LT52aWV3LnRpbGUud2lkdGgsIHpv
b20pOwogCi0gICAgaWYgKCFlaW5hX3RpbGVfZ3JpZF9zbGljZXJfc2V0dXAoJnNsaWNlciwgeCwg
eSwgd2lkdGgsIGhlaWdodCwgdHcsIHRoKSkgeworICAgIGlmICghZWluYV90aWxlX2dyaWRfc2xp
Y2VyX3NldHVwKCZzbGljZXIsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHRpbGVXaWR0aCwgdGlsZUhl
aWdodCkpIHsKICAgICAgICAgRVJSKCJjb3VsZCBub3Qgc2V0dXAgZ3JpZCBzbGljZXIgZm9yICVk
LCVkKyVkeCVkIHRpbGU9JWR4JWQiLAotICAgICAgICAgICAgeCwgeSwgd2lkdGgsIGhlaWdodCwg
dHcsIHRoKTsKKyAgICAgICAgICAgIHgsIHksIHdpZHRoLCBoZWlnaHQsIHRpbGVXaWR0aCwgdGls
ZUhlaWdodCk7CiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwogICAgIH0KIApAQCAtMTg0NSw0
NSArMTg0NSw0NSBAQCBFaW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRl
cl9yZWdpb24oRXZhc19PYmplY3QqIGV3a1RpbGUsIEV2YXNfQwogCiAgICAgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX2l0ZW1fcHJvY2Vzc19pZGxlcl9zdGFydChwcml2KTsKIAotICAgIHR1YyA9
IGV3a190aWxlX21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7Ci0g
ICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2xvY2tfYXJlYSh0dWMsIHgsIHksIHdpZHRoLCBoZWln
aHQsIHpvb20pOworICAgIHRpbGVVbnVzZWRDYWNoZSA9IGV3a190aWxlX21hdHJpeF91bnVzZWRf
Y2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7CisgICAgZXdrX3RpbGVfdW51c2VkX2NhY2hl
X2xvY2tfYXJlYSh0aWxlVW51c2VkQ2FjaGUsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHpvb20pOwog
ICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKIEVpbmFfQm9vbCBld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9wcmVfcmVuZGVyX3JlbGF0aXZlX3JhZGl1cyhFdmFzX09iamVjdCogZXdrVGlsZSwgdW5z
aWduZWQgaW50IG4sIGZsb2F0IHpvb20pCiB7CiAgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4o
ZXdrVGlsZSwgcHJpdiwgRUlOQV9GQUxTRSk7Ci0gICAgdW5zaWduZWQgbG9uZyBzdGFydF9yb3cs
IGVuZF9yb3csIHN0YXJ0X2NvbCwgZW5kX2NvbCwgaSwgaiwgd2lkdGgsIGhlaWdodDsKLSAgICBF
d2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHR1YzsKKyAgICB1bnNpZ25lZCBsb25nIHN0YXJ0Um93LCBl
bmRSb3csIHN0YXJ0Q29sLCBlbmRDb2wsIGksIGosIHdpZHRoLCBoZWlnaHQ7CisgICAgRXdrX1Rp
bGVfVW51c2VkX0NhY2hlKiB0aWxlVW51c2VkQ2FjaGU7CiAKICAgICBJTkYoInByaXYtPm1vZGVs
LmJhc2Uucm93ID0lbGQsIG49JXUgcHJpdi0+dmlldy5yb3dzPSVsdSIsCiAgICAgICAgIHByaXYt
Pm1vZGVsLmJhc2Uucm93LCBuLCBwcml2LT52aWV3LnJvd3MpOwotICAgIHN0YXJ0X3JvdyA9IChs
b25nKXByaXYtPm1vZGVsLmJhc2Uucm93IC0gbjsKLSAgICBzdGFydF9jb2wgPSAobG9uZylwcml2
LT5tb2RlbC5iYXNlLmNvbCAtIG47Ci0gICAgZW5kX3JvdyA9IHN0ZDo6bWluKHByaXYtPm1vZGVs
LmN1ci5yb3dzIC0gMSwKKyAgICBzdGFydFJvdyA9IChsb25nKXByaXYtPm1vZGVsLmJhc2Uucm93
IC0gbjsKKyAgICBzdGFydENvbCA9IChsb25nKXByaXYtPm1vZGVsLmJhc2UuY29sdW1uIC0gbjsK
KyAgICBlbmRSb3cgPSBzdGQ6Om1pbihwcml2LT5tb2RlbC5jdXJyZW50LnJvd3MgLSAxLAogICAg
ICAgICAgICAgICAgICAgICAgICBwcml2LT5tb2RlbC5iYXNlLnJvdyArIHByaXYtPnZpZXcucm93
cyArIG4gLSAxKTsKLSAgICBlbmRfY29sID0gc3RkOjptaW4ocHJpdi0+bW9kZWwuY3VyLmNvbHMg
LSAxLAotICAgICAgICAgICAgICAgICAgICAgICBwcml2LT5tb2RlbC5iYXNlLmNvbCArIHByaXYt
PnZpZXcuY29scyArIG4gLSAxKTsKKyAgICBlbmRDb2wgPSBzdGQ6Om1pbihwcml2LT5tb2RlbC5j
dXJyZW50LmNvbHVtbnMgLSAxLAorICAgICAgICAgICAgICAgICAgICAgICBwcml2LT5tb2RlbC5i
YXNlLmNvbHVtbiArIHByaXYtPnZpZXcuY29scyArIG4gLSAxKTsKIAotICAgIElORigic3RhcnRf
cm93PSVsdSwgZW5kX3Jvdz0lbHUsIHN0YXJ0X2NvbD0lbHUsIGVuZF9jb2w9JWx1IiwKLSAgICAg
ICAgc3RhcnRfcm93LCBlbmRfcm93LCBzdGFydF9jb2wsIGVuZF9jb2wpOworICAgIElORigic3Rh
cnRSb3c9JWx1LCBlbmRSb3c9JWx1LCBzdGFydENvbD0lbHUsIGVuZENvbD0lbHUiLAorICAgICAg
ICBzdGFydFJvdywgZW5kUm93LCBzdGFydENvbCwgZW5kQ29sKTsKIAogICAgIHpvb20gPSBST1VO
REVEX1pPT00ocHJpdi0+dmlldy50aWxlLndpZHRoLCB6b29tKTsKIAotICAgIGZvciAoaSA9IHN0
YXJ0X3JvdzsgaSA8PSBlbmRfcm93OyBpKyspCi0gICAgICAgIGZvciAoaiA9IHN0YXJ0X2NvbDsg
aiA8PSBlbmRfY29sOyBqKyspCisgICAgZm9yIChpID0gc3RhcnRSb3c7IGkgPD0gZW5kUm93OyBp
KyspCisgICAgICAgIGZvciAoaiA9IHN0YXJ0Q29sOyBqIDw9IGVuZENvbDsgaisrKQogICAgICAg
ICAgICAgaWYgKCFfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2Fk
ZChwcml2LCBqLCBpLCB6b29tLCBQUkVfUkVOREVSX1BSSU9SSVRZX0xPVykpCiAgICAgICAgICAg
ICAgICAgZ290byBzdGFydF9wcm9jZXNzaW5nOwogCiBzdGFydF9wcm9jZXNzaW5nOgogICAgIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Byb2Nlc3NfaWRsZXJfc3RhcnQocHJpdik7CiAK
LSAgICB0dWMgPSBld2tfdGlsZV9tYXRyaXhfdW51c2VkX2NhY2hlX2dldChwcml2LT5tb2RlbC5t
YXRyaXgpOwotICAgIGhlaWdodCA9IChlbmRfcm93IC0gc3RhcnRfcm93ICsgMSkgKiBUSUxFX1NJ
WkVfQVRfWk9PTShwcml2LT52aWV3LnRpbGUuaGVpZ2h0LCB6b29tKTsKLSAgICB3aWR0aCA9IChl
bmRfY29sIC0gc3RhcnRfY29sICsgMSkgKiBUSUxFX1NJWkVfQVRfWk9PTShwcml2LT52aWV3LnRp
bGUud2lkdGgsIHpvb20pOwotICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9sb2NrX2FyZWEodHVj
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRfY29sICogVElMRV9T
SVpFX0FUX1pPT00ocHJpdi0+dmlldy50aWxlLndpZHRoLCB6b29tKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0X3JvdyAqIFRJTEVfU0laRV9BVF9aT09NKHByaXYt
PnZpZXcudGlsZS5oZWlnaHQsIHpvb20pLCB3aWR0aCwgaGVpZ2h0LCB6b29tKTsKKyAgICB0aWxl
VW51c2VkQ2FjaGUgPSBld2tfdGlsZV9tYXRyaXhfdW51c2VkX2NhY2hlX2dldChwcml2LT5tb2Rl
bC5tYXRyaXgpOworICAgIGhlaWdodCA9IChlbmRSb3cgLSBzdGFydFJvdyArIDEpICogVElMRV9T
SVpFX0FUX1pPT00ocHJpdi0+dmlldy50aWxlLmhlaWdodCwgem9vbSk7CisgICAgd2lkdGggPSAo
ZW5kQ29sIC0gc3RhcnRDb2wgKyAxKSAqIFRJTEVfU0laRV9BVF9aT09NKHByaXYtPnZpZXcudGls
ZS53aWR0aCwgem9vbSk7CisgICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2xvY2tfYXJlYSh0aWxl
VW51c2VkQ2FjaGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydENv
bCAqIFRJTEVfU0laRV9BVF9aT09NKHByaXYtPnZpZXcudGlsZS53aWR0aCwgem9vbSksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFJvdyAqIFRJTEVfU0laRV9BVF9a
T09NKHByaXYtPnZpZXcudGlsZS5oZWlnaHQsIHpvb20pLCB3aWR0aCwgaGVpZ2h0LCB6b29tKTsK
IAogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CkBAIC0xODkxLDEyICsxODkxLDEyIEBAIHN0YXJ0
X3Byb2Nlc3Npbmc6CiB2b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfY2Fu
Y2VsKEV2YXNfT2JqZWN0KiBld2tUaWxlKQogewogICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJO
KGV3a1RpbGUsIHByaXYpOwotICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSogdHVjOworICAgIEV3
a19UaWxlX1VudXNlZF9DYWNoZSogdGlsZVVudXNlZENhY2hlOwogCiAgICAgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9jbGVhcihwcml2KTsKIAotICAgIHR1YyA9
IGV3a190aWxlX21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7Ci0g
ICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3VubG9ja19hcmVhKHR1Yyk7CisgICAgdGlsZVVudXNl
ZENhY2hlID0gZXdrX3RpbGVfbWF0cml4X3VudXNlZF9jYWNoZV9nZXQocHJpdi0+bW9kZWwubWF0
cml4KTsKKyAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfdW5sb2NrX2FyZWEodGlsZVVudXNlZENh
Y2hlKTsKIH0KIAogRWluYV9Cb29sIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX2Rpc2FibGVfcmVu
ZGVyKEV2YXNfT2JqZWN0KiBld2tUaWxlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwv
ZXdrL2V3a190aWxlZF9iYWNraW5nX3N0b3JlLmggYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmUuaAppbmRleCA3OTQ1MWFlLi4xOGNkMWFkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmUuaAorKysgYi9T
b3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmUuaApAQCAtMTAyLDcg
KzEwMiw3IEBAIHZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZml4X29mZnNldHMoRXZhc19P
YmplY3QqIG8sIEV2YXNfQ29vcmQgdywgRXZhc19Db29yCiB2b2lkIGV3a190aWxlZF9iYWNraW5n
X3N0b3JlX3pvb21fd2Vha19zbW9vdGhfc2NhbGVfc2V0KEV2YXNfT2JqZWN0KiBvLCBFaW5hX0Jv
b2wgc21vb3RoX3NjYWxlKTsKIEVpbmFfQm9vbCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV91cGRh
dGUoRXZhc19PYmplY3QqIG8sIGNvbnN0IEVpbmFfUmVjdGFuZ2xlKiB1cGRhdGUpOwogdm9pZCBl
d2tfdGlsZWRfYmFja2luZ19zdG9yZV91cGRhdGVzX3Byb2Nlc3NfcHJlX3NldChFdmFzX09iamVj
dCogbywgdm9pZCooKmNiKSh2b2lkKiBkYXRhLCBFdmFzX09iamVjdCAqbyksIGNvbnN0IHZvaWQq
IGRhdGEpOwotdm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV91cGRhdGVzX3Byb2Nlc3NfcG9z
dF9zZXQoRXZhc19PYmplY3QqIG8sIHZvaWQqKCpjYikodm9pZCogZGF0YSwgdm9pZCogcHJlX2Rh
dGEsIEV2YXNfT2JqZWN0ICpvKSwgY29uc3Qgdm9pZCogZGF0YSk7Cit2b2lkIGV3a190aWxlZF9i
YWNraW5nX3N0b3JlX3VwZGF0ZXNfcHJvY2Vzc19wb3N0X3NldChFdmFzX09iamVjdCogbywgdm9p
ZCooKmNiKSh2b2lkKiBkYXRhLCB2b2lkKiBwcmVEYXRhLCBFdmFzX09iamVjdCAqbyksIGNvbnN0
IHZvaWQqIGRhdGEpOwogdm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV91cGRhdGVzX3Byb2Nl
c3MoRXZhc19PYmplY3QqIG8pOwogdm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV91cGRhdGVz
X2NsZWFyKEV2YXNfT2JqZWN0KiBvKTsKIHZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfY29u
dGVudHNfcmVzaXplKEV2YXNfT2JqZWN0KiBvLCBFdmFzX0Nvb3JkIHdpZHRoLCBFdmFzX0Nvb3Jk
IGhlaWdodCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX21h
dHJpeC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX21hdHJpeC5jcHAKaW5k
ZXggZTkxYmQ3Ny4uZmU1ZjBjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3
a190aWxlZF9tYXRyaXguY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRf
bWF0cml4LmNwcApAQCAtNTc1LDggKzU3NSw4IEBAIHZvaWQgZXdrX3RpbGVfbWF0cml4X2RiZyhj
b25zdCBFd2tfVGlsZV9NYXRyaXgqIHRpbGVNYXRyaXgpCiAjZW5kaWYKIAogICAgIEVJTkFfSVRF
UkFUT1JfRk9SRUFDSChpdCwgY2VsbCkgewotICAgICAgICB1bnNpZ25lZCBsb25nIHJvdywgY29s
OwotICAgICAgICBlaW5hX21hdHJpeHNwYXJzZV9jZWxsX3Bvc2l0aW9uX2dldChjZWxsLCAmcm93
LCAmY29sKTsKKyAgICAgICAgdW5zaWduZWQgbG9uZyByb3csIGNvbHVtbjsKKyAgICAgICAgZWlu
YV9tYXRyaXhzcGFyc2VfY2VsbF9wb3NpdGlvbl9nZXQoY2VsbCwgJnJvdywgJmNvbHVtbik7CiAK
ICAgICAgICAgRXdrX1RpbGUqIHRpbGUgPSBzdGF0aWNfY2FzdDxFd2tfVGlsZSo+KGVpbmFfbWF0
cml4c3BhcnNlX2NlbGxfZGF0YV9nZXQoY2VsbCkpOwogICAgICAgICBpZiAoIXRpbGUpIHsKQEAg
LTU4NCwxMyArNTg0LDEzIEBAIHZvaWQgZXdrX3RpbGVfbWF0cml4X2RiZyhjb25zdCBFd2tfVGls
ZV9NYXRyaXgqIHRpbGVNYXRyaXgpCiAgICAgICAgICAgICAgICAgbGFzdF9lbXB0eSA9IEVJTkFf
VFJVRTsKICAgICAgICAgICAgICAgICBwcmludGYoIkVtcHR5OiIpOwogICAgICAgICAgICAgfQot
ICAgICAgICAgICAgcHJpbnRmKCIgWyVsdSwlbHVdIiwgY29sLCByb3cpOworICAgICAgICAgICAg
cHJpbnRmKCIgWyVsdSwlbHVdIiwgY29sdW1uLCByb3cpOwogICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgaWYgKGxhc3RfZW1wdHkpIHsKICAgICAgICAgICAgICAgICBsYXN0X2VtcHR5ID0g
RUlOQV9GQUxTRTsKICAgICAgICAgICAgICAgICBwcmludGYoIlxuIik7CiAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICBwcmludGYoIiUzbHUsJTNsdSAlMTBwOiIsIGNvbCwgcm93LCB0aWxlKTsK
KyAgICAgICAgICAgIHByaW50ZigiJTNsdSwlM2x1ICUxMHA6IiwgY29sdW1uLCByb3csIHRpbGUp
OwogICAgICAgICAgICAgcHJpbnRmKCIgWyUzbHUsJTNsdSArICVkeCVkIEAgJTAuM2ZdJWMiLCB0
aWxlLT5jb2wsIHRpbGUtPnJvdywgdGlsZS0+d2lkdGgsIHRpbGUtPmhlaWdodCwgdGlsZS0+em9v
bSwgdGlsZS0+dmlzaWJsZSA/ICcqJyA6ICcgJyk7CiAgICAgICAgICAgICBwcmludGYoIlxuIik7
CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRf
cHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a190aWxlZF9wcml2YXRlLmgKaW5k
ZXggOTQ4OTZjNC4uMTg2Yjg4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3
a190aWxlZF9wcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a190aWxlZF9w
cml2YXRlLmgKQEAgLTIyLDEzICsyMiwxMyBAQAogI2RlZmluZSBld2tfdGlsZWRfcHJpdmF0ZV9o
CiAKIC8qIGxvZ2dpbmcgKi8KLWV4dGVybiBpbnQgX2V3a190aWxlZF9sb2dfZG9tOworZXh0ZXJu
IGludCBfZXdrVGlsZWRMb2dEb207CiAKLSNkZWZpbmUgQ1JJVElDQUwoLi4uKSBFSU5BX0xPR19E
T01fQ1JJVChfZXdrX3RpbGVkX2xvZ19kb20sIF9fVkFfQVJHU19fKQotI2RlZmluZSBFUlIoLi4u
KSBFSU5BX0xPR19ET01fRVJSKF9ld2tfdGlsZWRfbG9nX2RvbSwgX19WQV9BUkdTX18pCi0jZGVm
aW5lIFdSTiguLi4pIEVJTkFfTE9HX0RPTV9XQVJOKF9ld2tfdGlsZWRfbG9nX2RvbSwgX19WQV9B
UkdTX18pCi0jZGVmaW5lIElORiguLi4pIEVJTkFfTE9HX0RPTV9JTkZPKF9ld2tfdGlsZWRfbG9n
X2RvbSwgX19WQV9BUkdTX18pCi0jZGVmaW5lIERCRyguLi4pIEVJTkFfTE9HX0RPTV9EQkcoX2V3
a190aWxlZF9sb2dfZG9tLCBfX1ZBX0FSR1NfXykKKyNkZWZpbmUgQ1JJVElDQUwoLi4uKSBFSU5B
X0xPR19ET01fQ1JJVChfZXdrVGlsZWRMb2dEb20sIF9fVkFfQVJHU19fKQorI2RlZmluZSBFUlIo
Li4uKSBFSU5BX0xPR19ET01fRVJSKF9ld2tUaWxlZExvZ0RvbSwgX19WQV9BUkdTX18pCisjZGVm
aW5lIFdSTiguLi4pIEVJTkFfTE9HX0RPTV9XQVJOKF9ld2tUaWxlZExvZ0RvbSwgX19WQV9BUkdT
X18pCisjZGVmaW5lIElORiguLi4pIEVJTkFfTE9HX0RPTV9JTkZPKF9ld2tUaWxlZExvZ0RvbSwg
X19WQV9BUkdTX18pCisjZGVmaW5lIERCRyguLi4pIEVJTkFfTE9HX0RPTV9EQkcoX2V3a1RpbGVk
TG9nRG9tLCBfX1ZBX0FSR1NfXykKICNkZWZpbmUgT09NKG9wLCBzaXplKSBDUklUSUNBTCgiY291
bGQgbm90ICVzICV6ZCBieXRlczogJXMiLCBvcCwgc2l6ZSwgc3RyZXJyb3IoZXJybm8pKQogI2Rl
ZmluZSBNQUxMT0NfT1JfT09NX1JFVChwdHIsIHNpemUsIC4uLikgICAgICAgXAogICAgIGRvIHsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9lZmwvZXdrL2V3a192aWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9l
d2tfdmlldy5jcHAKaW5kZXggZjE5NzNlNC4uYjVmMTRjMSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9lZmwvZXdrL2V3a192aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdr
X3ZpZXcuY3BwCkBAIC05MCwxNyArOTAsMTcgQEAgc3RhdGljIGNvbnN0IHNpemVfdCBFV0tfVklF
V19TQ1JPTExTX1NJWkVfTUFYX0ZSRUUgPSAzMjsKICAqLwogc3RydWN0IF9Fd2tfVmlld19Qcml2
YXRlX0RhdGEgewogICAgIFdlYkNvcmU6OlBhZ2UqIHBhZ2U7Ci0gICAgV2ViQ29yZTo6U2V0dGlu
Z3MqIHBhZ2Vfc2V0dGluZ3M7Ci0gICAgV2ViQ29yZTo6RnJhbWUqIG1haW5fZnJhbWU7Ci0gICAg
V2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHMgdmlld3BvcnRfYXJndW1lbnRzOworICAgIFdlYkNv
cmU6OlNldHRpbmdzKiBwYWdlU2V0dGluZ3M7CisgICAgV2ViQ29yZTo6RnJhbWUqIG1haW5GcmFt
ZTsKKyAgICBXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50cyB2aWV3cG9ydEFyZ3VtZW50czsKICAg
ICBFd2tfSGlzdG9yeSogaGlzdG9yeTsKICAgICBzdHJ1Y3QgewogICAgICAgICB2b2lkKiBjb250
ZXh0OwogICAgICAgICBFd2tfVmlld19SZXNvdXJjZV9IYW5kbGVyX0NiIGZ1bmN0aW9uOwotICAg
IH0gY3VzdG9tX3Jlc291cmNlX2hhbmRsZXI7CisgICAgfSBjdXN0b21SZXNvdXJjZUhhbmRsZXI7
CiAgICAgc3RydWN0IHsKICAgICAgICAgRXdrX01lbnUgbWVudTsKLSAgICAgICAgV2ViQ29yZTo6
UG9wdXBNZW51Q2xpZW50KiBtZW51X2NsaWVudDsKKyAgICAgICAgV2ViQ29yZTo6UG9wdXBNZW51
Q2xpZW50KiBtZW51Q2xpZW50OwogICAgIH0gcG9wdXA7CiAgICAgc3RydWN0IHsKICAgICAgICAg
RWluYV9SZWN0YW5nbGUqIGFycmF5OwpAQCAtMTE0LDUwICsxMTQsNTAgQEAgc3RydWN0IF9Fd2tf
Vmlld19Qcml2YXRlX0RhdGEgewogICAgIH0gc2Nyb2xsczsKICAgICB1bnNpZ25lZCBpbnQgaW1o
OyAvKio8IGlucHV0IG1ldGhvZCBoaW50cyAqLwogICAgIHN0cnVjdCB7Ci0gICAgICAgIEVpbmFf
Qm9vbCB2aWV3X2NsZWFyZWQgOiAxOwotICAgICAgICBFaW5hX0Jvb2wgbmVlZF90b3VjaF9ldmVu
dHMgOiAxOworICAgICAgICBFaW5hX0Jvb2wgdmlld0NsZWFyZWQgOiAxOworICAgICAgICBFaW5h
X0Jvb2wgbmVlZFRvdWNoRXZlbnRzIDogMTsKICAgICB9IGZsYWdzOwogICAgIHN0cnVjdCB7Ci0g
ICAgICAgIGNvbnN0IGNoYXIqIHVzZXJfYWdlbnQ7Ci0gICAgICAgIGNvbnN0IGNoYXIqIHVzZXJf
c3R5bGVzaGVldDsKLSAgICAgICAgY29uc3QgY2hhciogZW5jb2RpbmdfZGVmYXVsdDsKLSAgICAg
ICAgY29uc3QgY2hhciogZW5jb2RpbmdfY3VzdG9tOworICAgICAgICBjb25zdCBjaGFyKiB1c2Vy
QWdlbnQ7CisgICAgICAgIGNvbnN0IGNoYXIqIHVzZXJTdHlsZXNoZWV0OworICAgICAgICBjb25z
dCBjaGFyKiBlbmNvZGluZ0RlZmF1bHQ7CisgICAgICAgIGNvbnN0IGNoYXIqIGVuY29kaW5nQ3Vz
dG9tOwogICAgICAgICBjb25zdCBjaGFyKiB0aGVtZTsKLSAgICAgICAgY29uc3QgY2hhciogbG9j
YWxfc3RvcmFnZV9kYXRhYmFzZV9wYXRoOwotICAgICAgICBpbnQgZm9udF9taW5pbXVtX3NpemU7
Ci0gICAgICAgIGludCBmb250X21pbmltdW1fbG9naWNhbF9zaXplOwotICAgICAgICBpbnQgZm9u
dF9kZWZhdWx0X3NpemU7Ci0gICAgICAgIGludCBmb250X21vbm9zcGFjZV9zaXplOwotICAgICAg
ICBjb25zdCBjaGFyKiBmb250X3N0YW5kYXJkOwotICAgICAgICBjb25zdCBjaGFyKiBmb250X2N1
cnNpdmU7Ci0gICAgICAgIGNvbnN0IGNoYXIqIGZvbnRfbW9ub3NwYWNlOwotICAgICAgICBjb25z
dCBjaGFyKiBmb250X2ZhbnRhc3k7Ci0gICAgICAgIGNvbnN0IGNoYXIqIGZvbnRfc2VyaWY7Ci0g
ICAgICAgIGNvbnN0IGNoYXIqIGZvbnRfc2Fuc19zZXJpZjsKLSAgICAgICAgRWluYV9Cb29sIGF1
dG9fbG9hZF9pbWFnZXMgOiAxOwotICAgICAgICBFaW5hX0Jvb2wgYXV0b19zaHJpbmtfaW1hZ2Vz
IDogMTsKLSAgICAgICAgRWluYV9Cb29sIGVuYWJsZV9hdXRvX3Jlc2l6ZV93aW5kb3cgOiAxOwot
ICAgICAgICBFaW5hX0Jvb2wgZW5hYmxlX2RldmVsb3Blcl9leHRyYXMgOiAxOwotICAgICAgICBF
aW5hX0Jvb2wgZW5hYmxlX3NjcmlwdHMgOiAxOwotICAgICAgICBFaW5hX0Jvb2wgZW5hYmxlX3Bs
dWdpbnMgOiAxOwotICAgICAgICBFaW5hX0Jvb2wgZW5hYmxlX2ZyYW1lX2ZsYXR0ZW5pbmcgOiAx
OwotICAgICAgICBFaW5hX0Jvb2wgZW5jb2RpbmdfZGV0ZWN0b3IgOiAxOwotICAgICAgICBFaW5h
X0Jvb2wgc2NyaXB0c193aW5kb3dfb3BlbiA6IDE7Ci0gICAgICAgIEVpbmFfQm9vbCBzY3JpcHRz
X2Nhbl9jbG9zZV93aW5kb3dzIDogMTsKLSAgICAgICAgRWluYV9Cb29sIHJlc2l6YWJsZV90ZXh0
YXJlYXMgOiAxOwotICAgICAgICBFaW5hX0Jvb2wgcHJpdmF0ZV9icm93c2luZyA6IDE7Ci0gICAg
ICAgIEVpbmFfQm9vbCBjYXJldF9icm93c2luZyA6IDE7Ci0gICAgICAgIEVpbmFfQm9vbCBzcGF0
aWFsX25hdmlnYXRpb24gOiAxOwotICAgICAgICBFaW5hX0Jvb2wgbG9jYWxfc3RvcmFnZSA6IDE7
Ci0gICAgICAgIEVpbmFfQm9vbCBvZmZsaW5lX2FwcF9jYWNoZSA6IDE7Ci0gICAgICAgIEVpbmFf
Qm9vbCBwYWdlX2NhY2hlIDogMTsKKyAgICAgICAgY29uc3QgY2hhciogbG9jYWxTdG9yYWdlRGF0
YWJhc2VQYXRoOworICAgICAgICBpbnQgZm9udE1pbmltdW1TaXplOworICAgICAgICBpbnQgZm9u
dE1pbmltdW1Mb2dpY2FsU2l6ZTsKKyAgICAgICAgaW50IGZvbnREZWZhdWx0U2l6ZTsKKyAgICAg
ICAgaW50IGZvbnRNb25vc3BhY2VTaXplOworICAgICAgICBjb25zdCBjaGFyKiBmb250U3RhbmRh
cmQ7CisgICAgICAgIGNvbnN0IGNoYXIqIGZvbnRDdXJzaXZlOworICAgICAgICBjb25zdCBjaGFy
KiBmb250TW9ub3NwYWNlOworICAgICAgICBjb25zdCBjaGFyKiBmb250RmFudGFzeTsKKyAgICAg
ICAgY29uc3QgY2hhciogZm9udFNlcmlmOworICAgICAgICBjb25zdCBjaGFyKiBmb250U2Fuc1Nl
cmlmOworICAgICAgICBFaW5hX0Jvb2wgYXV0b0xvYWRJbWFnZXMgOiAxOworICAgICAgICBFaW5h
X0Jvb2wgYXV0b1Nocmlua0ltYWdlcyA6IDE7CisgICAgICAgIEVpbmFfQm9vbCBlbmFibGVBdXRv
UmVzaXplV2luZG93IDogMTsKKyAgICAgICAgRWluYV9Cb29sIGVuYWJsZURldmVsb3BlckV4dHJh
cyA6IDE7CisgICAgICAgIEVpbmFfQm9vbCBlbmFibGVTY3JpcHRzIDogMTsKKyAgICAgICAgRWlu
YV9Cb29sIGVuYWJsZVBsdWdpbnMgOiAxOworICAgICAgICBFaW5hX0Jvb2wgZW5hYmxlRnJhbWVG
bGF0dGVuaW5nIDogMTsKKyAgICAgICAgRWluYV9Cb29sIGVuY29kaW5nRGV0ZWN0b3IgOiAxOwor
ICAgICAgICBFaW5hX0Jvb2wgc2NyaXB0c1dpbmRvd09wZW4gOiAxOworICAgICAgICBFaW5hX0Jv
b2wgc2NyaXB0c0NhbkNsb3NlV2luZG93cyA6IDE7CisgICAgICAgIEVpbmFfQm9vbCByZXNpemFi
bGVUZXh0YXJlYXMgOiAxOworICAgICAgICBFaW5hX0Jvb2wgcHJpdmF0ZUJyb3dzaW5nIDogMTsK
KyAgICAgICAgRWluYV9Cb29sIGNhcmV0QnJvd3NpbmcgOiAxOworICAgICAgICBFaW5hX0Jvb2wg
c3BhdGlhbE5hdmlnYXRpb24gOiAxOworICAgICAgICBFaW5hX0Jvb2wgbG9jYWxTdG9yYWdlIDog
MTsKKyAgICAgICAgRWluYV9Cb29sIG9mZmxpbmVBcHBDYWNoZSA6IDE7CisgICAgICAgIEVpbmFf
Qm9vbCBwYWdlQ2FjaGUgOiAxOwogICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgZmxvYXQg
bWluX3NjYWxlOwotICAgICAgICAgICAgZmxvYXQgbWF4X3NjYWxlOwotICAgICAgICAgICAgRWlu
YV9Cb29sIHVzZXJfc2NhbGFibGUgOiAxOwotICAgICAgICB9IHpvb21fcmFuZ2U7Ci0gICAgICAg
IGZsb2F0IGRldmljZV9waXhlbF9yYXRpbzsKLSAgICAgICAgZG91YmxlIGRvbV90aW1lcl9pbnRl
cnZhbDsKKyAgICAgICAgICAgIGZsb2F0IG1pblNjYWxlOworICAgICAgICAgICAgZmxvYXQgbWF4
U2NhbGU7CisgICAgICAgICAgICBFaW5hX0Jvb2wgdXNlclNjYWxhYmxlIDogMTsKKyAgICAgICAg
fSB6b29tUmFuZ2U7CisgICAgICAgIGZsb2F0IGRldmljZVBpeGVsUmF0aW87CisgICAgICAgIGRv
dWJsZSBkb21UaW1lckludGVydmFsOwogICAgIH0gc2V0dGluZ3M7CiAgICAgc3RydWN0IHsKICAg
ICAgICAgc3RydWN0IHsKQEAgLTE3NCw3ICsxNzQsNyBAQCBzdHJ1Y3QgX0V3a19WaWV3X1ByaXZh
dGVfRGF0YSB7CiAgICAgICAgICAgICBFdmFzX0Nvb3JkIHgsIHk7CiAgICAgICAgIH0gY2VudGVy
OwogICAgICAgICBFY29yZV9BbmltYXRvciogYW5pbWF0b3I7Ci0gICAgfSBhbmltYXRlZF96b29t
OworICAgIH0gYW5pbWF0ZWRab29tOwogfTsKIAogI2lmbmRlZiBFV0tfVFlQRV9DSEVDSwpAQCAt
MjE5LDE0ICsyMTksMTQgQEAgc3RydWN0IF9Fd2tfVmlld19Qcml2YXRlX0RhdGEgewogICAgICAg
ICByZXR1cm4gX19WQV9BUkdTX187ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAg
fQogCi0jZGVmaW5lIEVXS19WSUVXX1BSSVZfR0VUKHNkLCBwdHIpICAgICAgICAgICAgICBcCi0g
ICAgRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhICpwdHIgPSBzZC0+X3ByaXYKKyNkZWZpbmUgRVdLX1ZJ
RVdfUFJJVl9HRVQoc21hcnREYXRhLCBwdHIpICAgICAgICAgICAgICBcCisgICAgRXdrX1ZpZXdf
UHJpdmF0ZV9EYXRhICpwdHIgPSBzbWFydERhdGEtPl9wcml2CiAKLSNkZWZpbmUgRVdLX1ZJRVdf
UFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwdHIsIC4uLikgICAgICAgICAgICAgICBcCi0gICAgRVdL
X1ZJRVdfUFJJVl9HRVQoc2QsIHB0cik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorI2RlZmluZSBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwdHIsIC4u
LikgICAgICAgICAgICAgICBcCisgICAgRVdLX1ZJRVdfUFJJVl9HRVQoc21hcnREYXRhLCBwdHIp
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBpZiAoIXB0cikgeyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIENS
SVRJQ0FMKCJubyBwcml2YXRlIGRhdGEgZm9yIG9iamVjdCAlcCAoJXMpIiwgICAgICAgICAgXAot
ICAgICAgICAgICAgICAgICBzZC0+c2VsZiwgZXZhc19vYmplY3RfdHlwZV9nZXQoc2QtPnNlbGYp
KTsgICAgIFwKKyAgICAgICAgICAgICAgICAgc21hcnREYXRhLT5zZWxmLCBldmFzX29iamVjdF90
eXBlX2dldChzbWFydERhdGEtPnNlbGYpKTsgICAgIFwKICAgICAgICAgcmV0dXJuIF9fVkFfQVJH
U19fOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgfQogCkBAIC0y
NTIsNyArMjUyLDcgQEAgc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfcmVwYWludHNfcmVzaXpl
KEV3a19WaWV3X1ByaXZhdGVfRGF0YSogcHJpdiwgc2l6ZV90IHMKIAogc3RhdGljIHZvaWQgX2V3
a192aWV3X3JlcGFpbnRfYWRkKEV3a19WaWV3X1ByaXZhdGVfRGF0YSogcHJpdiwgRXZhc19Db29y
ZCB4LCBFdmFzX0Nvb3JkIHksIEV2YXNfQ29vcmQgd2lkdGgsIEV2YXNfQ29vcmQgaGVpZ2h0KQog
ewotICAgIEVpbmFfUmVjdGFuZ2xlKiByOworICAgIEVpbmFfUmVjdGFuZ2xlKiByZWN0OwogCiAg
ICAgLy8gZnByaW50ZihzdGRlcnIsICI+Pj4gcmVwYWludCByZXF1ZXN0ZWQ6ICVkLCVkKyVkeCVk
XG4iLCB4LCB5LCB3LCBoKTsKICAgICBpZiAocHJpdi0+cmVwYWludHMuYWxsb2NhdGVkID09IHBy
aXYtPnJlcGFpbnRzLmNvdW50KSB7CkBAIC0yNjUsMTMgKzI2NSwxMyBAQCBzdGF0aWMgdm9pZCBf
ZXdrX3ZpZXdfcmVwYWludF9hZGQoRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKiBwcml2LCBFdmFzX0Nv
b3JkIHgsIEV2YQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHIgPSBwcml2LT5y
ZXBhaW50cy5hcnJheSArIHByaXYtPnJlcGFpbnRzLmNvdW50OworICAgIHJlY3QgPSBwcml2LT5y
ZXBhaW50cy5hcnJheSArIHByaXYtPnJlcGFpbnRzLmNvdW50OwogICAgIHByaXYtPnJlcGFpbnRz
LmNvdW50Kys7CiAKLSAgICByLT54ID0geDsKLSAgICByLT55ID0geTsKLSAgICByLT53ID0gd2lk
dGg7Ci0gICAgci0+aCA9IGhlaWdodDsKKyAgICByZWN0LT54ID0geDsKKyAgICByZWN0LT55ID0g
eTsKKyAgICByZWN0LT53ID0gd2lkdGg7CisgICAgcmVjdC0+aCA9IGhlaWdodDsKIAogICAgIERC
RygiYWRkIHJlcGFpbnQgJWQsICVkKyVkeCVkIiwgeCwgeSwgd2lkdGgsIGhlaWdodCk7CiB9CkBA
IC0yOTYsMjkgKzI5NiwyOSBAQCBzdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19zY3JvbGxzX3Jl
c2l6ZShFd2tfVmlld19Qcml2YXRlX0RhdGEqIHByaXYsIHNpemVfdCBzaQogICAgIHJldHVybiBF
SU5BX1RSVUU7CiB9CiAKLXN0YXRpYyB2b2lkIF9ld2tfdmlld19zY3JvbGxfYWRkKEV3a19WaWV3
X1ByaXZhdGVfRGF0YSogcHJpdiwgRXZhc19Db29yZCBkeCwgRXZhc19Db29yZCBkeSwgRXZhc19D
b29yZCB4LCBFdmFzX0Nvb3JkIHksIEV2YXNfQ29vcmQgd2lkdGgsIEV2YXNfQ29vcmQgaGVpZ2h0
LCBFaW5hX0Jvb2wgbWFpblNjcm9sbCkKK3N0YXRpYyB2b2lkIF9ld2tfdmlld19zY3JvbGxfYWRk
KEV3a19WaWV3X1ByaXZhdGVfRGF0YSogcHJpdiwgRXZhc19Db29yZCBkZWx0YVgsIEV2YXNfQ29v
cmQgZGVsdGFZLCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwgRXZhc19Db29yZCB3aWR0aCwg
RXZhc19Db29yZCBoZWlnaHQsIEVpbmFfQm9vbCBtYWluU2Nyb2xsKQogewotICAgIEV3a19TY3Jv
bGxfUmVxdWVzdCogcjsKLSAgICBFd2tfU2Nyb2xsX1JlcXVlc3QqIHJfZW5kOworICAgIEV3a19T
Y3JvbGxfUmVxdWVzdCogcmVjdDsKKyAgICBFd2tfU2Nyb2xsX1JlcXVlc3QqIHJlY3RfZW5kOwog
ICAgIEV2YXNfQ29vcmQgeDIgPSB4ICsgd2lkdGgsIHkyID0geSArIGhlaWdodDsKIAotICAgIHIg
PSBwcml2LT5zY3JvbGxzLmFycmF5OwotICAgIHJfZW5kID0gciArIHByaXYtPnNjcm9sbHMuY291
bnQ7Ci0gICAgZm9yICg7IHIgPCByX2VuZDsgcisrKSB7Ci0gICAgICAgIGlmIChyLT54ID09IHgg
JiYgci0+eSA9PSB5ICYmIHItPncgPT0gd2lkdGggJiYgci0+aCA9PSBoZWlnaHQpIHsKKyAgICBy
ZWN0ID0gcHJpdi0+c2Nyb2xscy5hcnJheTsKKyAgICByZWN0X2VuZCA9IHJlY3QgKyBwcml2LT5z
Y3JvbGxzLmNvdW50OworICAgIGZvciAoOyByZWN0IDwgcmVjdF9lbmQ7IHJlY3QrKykgeworICAg
ICAgICBpZiAocmVjdC0+eCA9PSB4ICYmIHJlY3QtPnkgPT0geSAmJiByZWN0LT53ID09IHdpZHRo
ICYmIHJlY3QtPmggPT0gaGVpZ2h0KSB7CiAgICAgICAgICAgICBEQkcoInJlZ2lvbiBhbHJlYWR5
IHNjcm9sbGVkICVkLCVkKyVkeCVkICUrMDNkLCUrMDNkIGFkZCAiCiAgICAgICAgICAgICAgICAg
IiUrMDNkLCUrMDNkIiwKLSAgICAgICAgICAgICAgICByLT54LCByLT55LCByLT53LCByLT5oLCBy
LT5keCwgci0+ZHksIGR4LCBkeSk7Ci0gICAgICAgICAgICByLT5keCArPSBkeDsKLSAgICAgICAg
ICAgIHItPmR5ICs9IGR5OworICAgICAgICAgICAgICAgIHJlY3QtPngsIHJlY3QtPnksIHJlY3Qt
PncsIHJlY3QtPmgsIHJlY3QtPmR4LCByZWN0LT5keSwgZGVsdGFYLCBkZWx0YVkpOworICAgICAg
ICAgICAgcmVjdC0+ZHggKz0gZGVsdGFYOworICAgICAgICAgICAgcmVjdC0+ZHkgKz0gZGVsdGFZ
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGlmICgoeCA8PSByLT54
ICYmIHgyID49IHItPngyKSAmJiAoeSA8PSByLT55ICYmIHkyID49IHItPnkyKSkgeworICAgICAg
ICBpZiAoKHggPD0gcmVjdC0+eCAmJiB4MiA+PSByZWN0LT54MikgJiYgKHkgPD0gcmVjdC0+eSAm
JiB5MiA+PSByZWN0LT55MikpIHsKICAgICAgICAgICAgIERCRygib2xkIHZpZXdwb3J0ICglZCwl
ZCslZHglZCAlKzAzZCwlKzAzZCkgd2FzIHNjcm9sbGVkIGl0c2VsZiwgIgogICAgICAgICAgICAg
ICAgICJhZGQgJSswM2QsJSswM2QiLAotICAgICAgICAgICAgICAgIHItPngsIHItPnksIHItPncs
IHItPmgsIHItPmR4LCByLT5keSwgZHgsIGR5KTsKLSAgICAgICAgICAgIHItPnggKz0gZHg7Ci0g
ICAgICAgICAgICByLT55ICs9IGR5OworICAgICAgICAgICAgICAgIHJlY3QtPngsIHJlY3QtPnks
IHJlY3QtPncsIHJlY3QtPmgsIHJlY3QtPmR4LCByZWN0LT5keSwgZGVsdGFYLCBkZWx0YVkpOwor
ICAgICAgICAgICAgcmVjdC0+eCArPSBkZWx0YVg7CisgICAgICAgICAgICByZWN0LT55ICs9IGRl
bHRhWTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMzMyLDE5ICszMzIsMTkgQEAgc3RhdGljIHZv
aWQgX2V3a192aWV3X3Njcm9sbF9hZGQoRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKiBwcml2LCBFdmFz
X0Nvb3JkIGR4LCBFdmEKICAgICAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICByID0gcHJp
di0+c2Nyb2xscy5hcnJheSArIHByaXYtPnNjcm9sbHMuY291bnQ7CisgICAgcmVjdCA9IHByaXYt
PnNjcm9sbHMuYXJyYXkgKyBwcml2LT5zY3JvbGxzLmNvdW50OwogICAgIHByaXYtPnNjcm9sbHMu
Y291bnQrKzsKIAotICAgIHItPnggPSB4OwotICAgIHItPnkgPSB5OwotICAgIHItPncgPSB3aWR0
aDsKLSAgICByLT5oID0gaGVpZ2h0OwotICAgIHItPngyID0geDI7Ci0gICAgci0+eTIgPSB5MjsK
LSAgICByLT5keCA9IGR4OwotICAgIHItPmR5ID0gZHk7Ci0gICAgci0+bWFpbl9zY3JvbGwgPSBt
YWluU2Nyb2xsOwotICAgIERCRygiYWRkIHNjcm9sbCBpbiByZWdpb246ICVkLCAlZCslZHglZCAl
KzAzZCwgJSswM2QiLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBkeCwgZHkpOworICAgIHJlY3QtPngg
PSB4OworICAgIHJlY3QtPnkgPSB5OworICAgIHJlY3QtPncgPSB3aWR0aDsKKyAgICByZWN0LT5o
ID0gaGVpZ2h0OworICAgIHJlY3QtPngyID0geDI7CisgICAgcmVjdC0+eTIgPSB5MjsKKyAgICBy
ZWN0LT5keCA9IGRlbHRhWDsKKyAgICByZWN0LT5keSA9IGRlbHRhWTsKKyAgICByZWN0LT5tYWlu
X3Njcm9sbCA9IG1haW5TY3JvbGw7CisgICAgREJHKCJhZGQgc2Nyb2xsIGluIHJlZ2lvbjogJWQs
ICVkKyVkeCVkICUrMDNkLCAlKzAzZCIsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGRlbHRhWCwgZGVs
dGFZKTsKIAogICAgIEVpbmFfUmVjdGFuZ2xlKiBwcjsKICAgICBFaW5hX1JlY3RhbmdsZSogcHJf
ZW5kOwpAQCAtMzUzLDggKzM1Myw4IEBAIHN0YXRpYyB2b2lkIF9ld2tfdmlld19zY3JvbGxfYWRk
KEV3a19WaWV3X1ByaXZhdGVfRGF0YSogcHJpdiwgRXZhc19Db29yZCBkeCwgRXZhCiAgICAgY291
bnQgPSBwcml2LT5yZXBhaW50cy5jb3VudDsKICAgICBwcl9lbmQgPSBwciArIGNvdW50OwogICAg
IGZvciAoOyBwciA8IHByX2VuZDsgcHIrKykgewotICAgICAgICBwci0+eCArPSBkeDsKLSAgICAg
ICAgcHItPnkgKz0gZHk7CisgICAgICAgIHByLT54ICs9IGRlbHRhWDsKKyAgICAgICAgcHItPnkg
Kz0gZGVsdGFZOwogICAgIH0KIH0KIApAQCAtMzgyLDEyICszODIsMTIgQEAgc3RhdGljIEVpbmFf
Qm9vbCBfZXdrX3ZpZXdfc21hcnRfZm9jdXNfaW4oRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnRE
YXRhKQogc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfc21hcnRfZm9jdXNfb3V0KEV3a19WaWV3
X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSkKIHsKICAgICBFV0tfVklFV19QUklWX0dFVChzbWFydERh
dGEsIHByaXYpOwotICAgIFdlYkNvcmU6OkZvY3VzQ29udHJvbGxlciogZmMgPSBwcml2LT5wYWdl
LT5mb2N1c0NvbnRyb2xsZXIoKTsKLSAgICBEQkcoImV3a1ZpZXc9JXAsIGZjPSVwIiwgc21hcnRE
YXRhLT5zZWxmLCBmYyk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGZjLCBF
SU5BX0ZBTFNFKTsKKyAgICBXZWJDb3JlOjpGb2N1c0NvbnRyb2xsZXIqIGZvY3VzQ29udHJvbGxl
ciA9IHByaXYtPnBhZ2UtPmZvY3VzQ29udHJvbGxlcigpOworICAgIERCRygiZXdrVmlldz0lcCwg
ZmM9JXAiLCBzbWFydERhdGEtPnNlbGYsIGZvY3VzQ29udHJvbGxlcik7CisgICAgRUlOQV9TQUZF
VFlfT05fTlVMTF9SRVRVUk5fVkFMKGZvY3VzQ29udHJvbGxlciwgRUlOQV9GQUxTRSk7CiAKLSAg
ICBmYy0+c2V0QWN0aXZlKGZhbHNlKTsKLSAgICBmYy0+c2V0Rm9jdXNlZChmYWxzZSk7CisgICAg
Zm9jdXNDb250cm9sbGVyLT5zZXRBY3RpdmUoZmFsc2UpOworICAgIGZvY3VzQ29udHJvbGxlci0+
c2V0Rm9jdXNlZChmYWxzZSk7CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIApAQCAtNDU4LDk3
ICs0NTgsOTcgQEAgc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfc21hcnRfc2hvdWxkX2ludGVy
cnVwdF9qYXZhc2NyaXB0KEV3a19WaWV3X1NtYXJ0X0RhdGEKIHN0YXRpYyBFaW5hX0Jvb2wgX2V3
a192aWV3X3NtYXJ0X3J1bl9qYXZhc2NyaXB0X3Byb21wdChFd2tfVmlld19TbWFydF9EYXRhKiBz
bWFydERhdGEsIEV2YXNfT2JqZWN0KiBmcmFtZSwgY29uc3QgY2hhciogbWVzc2FnZSwgY29uc3Qg
Y2hhciogZGVmYXVsdFZhbHVlLCBjaGFyKiogdmFsdWUpCiB7CiAgICAgKnZhbHVlID0gc3RyZHVw
KCJ0ZXN0Iik7Ci0gICAgRWluYV9Cb29sIHJldCA9IEVJTkFfVFJVRTsKKyAgICBFaW5hX0Jvb2wg
cmVzdWx0ID0gRUlOQV9UUlVFOwogICAgIElORigiamF2YXNjcmlwdCBwcm9tcHQ6XG4iCiAgICAg
ICAgICJcdCAgICAgIG1lc3NhZ2U6ICVzXG4iCiAgICAgICAgICJcdGRlZmF1bHQgdmFsdWU6ICVz
XG4iCiAgICAgICAgICJcdGdpdmluZyBhbnN3ZXI6ICVzXG4iCi0gICAgICAgICJcdCAgICAgICBi
dXR0b246ICVzIiwgbWVzc2FnZSwgZGVmYXVsdFZhbHVlLCAqdmFsdWUsIHJldCA/ICJvayIgOiAi
Y2FuY2VsIik7CisgICAgICAgICJcdCAgICAgICBidXR0b246ICVzIiwgbWVzc2FnZSwgZGVmYXVs
dFZhbHVlLCAqdmFsdWUsIHJlc3VsdCA/ICJvayIgOiAiY2FuY2VsIik7CiAKLSAgICByZXR1cm4g
cmV0OworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIC8vIEV2ZW50IEhhbmRsaW5nIC8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogc3RhdGljIHZv
aWQgX2V3a192aWV3X29uX2ZvY3VzX2luKHZvaWQqIGRhdGEsIEV2YXMqIGV2ZW50VHlwZSwgRXZh
c19PYmplY3QqIGNhbGxiYWNrLCB2b2lkKiBldmVudEluZm8pCiB7Ci0gICAgRXdrX1ZpZXdfU21h
cnRfRGF0YSogc2QgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZGF0YSk7Ci0g
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFwaSk7Ci0gICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk4oc2QtPmFwaS0+Zm9jdXNfaW4pOwotICAgIHNkLT5hcGktPmZvY3VzX2lu
KHNkKTsKKyAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEgPSBzdGF0aWNfY2FzdDxF
d2tfVmlld19TbWFydF9EYXRhKj4oZGF0YSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk4oc21hcnREYXRhLT5hcGkpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0
RGF0YS0+YXBpLT5mb2N1c19pbik7CisgICAgc21hcnREYXRhLT5hcGktPmZvY3VzX2luKHNtYXJ0
RGF0YSk7CiB9CiAKIHN0YXRpYyB2b2lkIF9ld2tfdmlld19vbl9mb2N1c19vdXQodm9pZCogZGF0
YSwgRXZhcyogZXZlbnRUeXBlLCBFdmFzX09iamVjdCogY2FsbGJhY2ssIHZvaWQqIGV2ZW50SW5m
bykKIHsKLSAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzZCA9IHN0YXRpY19jYXN0PEV3a19WaWV3
X1NtYXJ0X0RhdGEqPihkYXRhKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+
YXBpKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpLT5mb2N1c19vdXQp
OwotICAgIHNkLT5hcGktPmZvY3VzX291dChzZCk7CisgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSog
c21hcnREYXRhID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEpOworICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+YXBpKTsKKyAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmFwaS0+Zm9jdXNfb3V0KTsKKyAgICBzbWFy
dERhdGEtPmFwaS0+Zm9jdXNfb3V0KHNtYXJ0RGF0YSk7CiB9CiAKIHN0YXRpYyB2b2lkIF9ld2tf
dmlld19vbl9tb3VzZV93aGVlbCh2b2lkKiBkYXRhLCBFdmFzKiBldmVudFR5cGUsIEV2YXNfT2Jq
ZWN0KiBjYWxsYmFjaywgdm9pZCogZXZlbnRJbmZvKQogewotICAgIEV2YXNfRXZlbnRfTW91c2Vf
V2hlZWwqIGV2ID0gc3RhdGljX2Nhc3Q8RXZhc19FdmVudF9Nb3VzZV9XaGVlbCo+KGV2ZW50SW5m
byk7Ci0gICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19T
bWFydF9EYXRhKj4oZGF0YSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFw
aSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFwaS0+bW91c2Vfd2hlZWwp
OwotICAgIHNkLT5hcGktPm1vdXNlX3doZWVsKHNkLCBldik7CisgICAgRXZhc19FdmVudF9Nb3Vz
ZV9XaGVlbCogd2hlZWxFdmVudCA9IHN0YXRpY19jYXN0PEV2YXNfRXZlbnRfTW91c2VfV2hlZWwq
PihldmVudEluZm8pOworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IHN0YXRp
Y19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihkYXRhKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTihzbWFydERhdGEtPmFwaSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk4oc21hcnREYXRhLT5hcGktPm1vdXNlX3doZWVsKTsKKyAgICBzbWFydERhdGEtPmFwaS0+bW91
c2Vfd2hlZWwoc21hcnREYXRhLCB3aGVlbEV2ZW50KTsKIH0KIAogc3RhdGljIHZvaWQgX2V3a192
aWV3X29uX21vdXNlX2Rvd24odm9pZCogZGF0YSwgRXZhcyogZXZlbnRUeXBlLCBFdmFzX09iamVj
dCogY2FsbGJhY2ssIHZvaWQqIGV2ZW50SW5mbykKIHsKLSAgICBFdmFzX0V2ZW50X01vdXNlX0Rv
d24qIGV2ID0gc3RhdGljX2Nhc3Q8RXZhc19FdmVudF9Nb3VzZV9Eb3duKj4oZXZlbnRJbmZvKTsK
LSAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzZCA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0
X0RhdGEqPihkYXRhKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpKTsK
LSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpLT5tb3VzZV9kb3duKTsKLSAg
ICBzZC0+YXBpLT5tb3VzZV9kb3duKHNkLCBldik7CisgICAgRXZhc19FdmVudF9Nb3VzZV9Eb3du
KiBkb3duRXZlbnQgPSBzdGF0aWNfY2FzdDxFdmFzX0V2ZW50X01vdXNlX0Rvd24qPihldmVudElu
Zm8pOworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IHN0YXRpY19jYXN0PEV3
a19WaWV3X1NtYXJ0X0RhdGEqPihkYXRhKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
TihzbWFydERhdGEtPmFwaSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnRE
YXRhLT5hcGktPm1vdXNlX2Rvd24pOworICAgIHNtYXJ0RGF0YS0+YXBpLT5tb3VzZV9kb3duKHNt
YXJ0RGF0YSwgZG93bkV2ZW50KTsKIH0KIAogc3RhdGljIHZvaWQgX2V3a192aWV3X29uX21vdXNl
X3VwKHZvaWQqIGRhdGEsIEV2YXMqIGV2ZW50VHlwZSwgRXZhc19PYmplY3QqIGNhbGxiYWNrLCB2
b2lkKiBldmVudEluZm8pCiB7Ci0gICAgRXZhc19FdmVudF9Nb3VzZV9VcCogZXYgPSBzdGF0aWNf
Y2FzdDxFdmFzX0V2ZW50X01vdXNlX1VwKj4oZXZlbnRJbmZvKTsKLSAgICBFd2tfVmlld19TbWFy
dF9EYXRhKiBzZCA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihkYXRhKTsKLSAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpKTsKLSAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTihzZC0+YXBpLT5tb3VzZV91cCk7Ci0gICAgc2QtPmFwaS0+bW91c2VfdXAo
c2QsIGV2KTsKKyAgICBFdmFzX0V2ZW50X01vdXNlX1VwKiB1cEV2ZW50ID0gc3RhdGljX2Nhc3Q8
RXZhc19FdmVudF9Nb3VzZV9VcCo+KGV2ZW50SW5mbyk7CisgICAgRXdrX1ZpZXdfU21hcnRfRGF0
YSogc21hcnREYXRhID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEpOwor
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+YXBpKTsKKyAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmFwaS0+bW91c2VfdXApOworICAgIHNt
YXJ0RGF0YS0+YXBpLT5tb3VzZV91cChzbWFydERhdGEsIHVwRXZlbnQpOwogfQogCiBzdGF0aWMg
dm9pZCBfZXdrX3ZpZXdfb25fbW91c2VfbW92ZSh2b2lkKiBkYXRhLCBFdmFzKiBldmVudFR5cGUs
IEV2YXNfT2JqZWN0KiBjYWxsYmFjaywgdm9pZCogZXZlbnRJbmZvKQogewotICAgIEV2YXNfRXZl
bnRfTW91c2VfTW92ZSogZXYgPSBzdGF0aWNfY2FzdDxFdmFzX0V2ZW50X01vdXNlX01vdmUqPihl
dmVudEluZm8pOwotICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0gc3RhdGljX2Nhc3Q8RXdr
X1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJO
KHNkLT5hcGkpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGktPm1vdXNl
X21vdmUpOwotICAgIHNkLT5hcGktPm1vdXNlX21vdmUoc2QsIGV2KTsKKyAgICBFdmFzX0V2ZW50
X01vdXNlX01vdmUqIG1vdmVFdmVudCA9IHN0YXRpY19jYXN0PEV2YXNfRXZlbnRfTW91c2VfTW92
ZSo+KGV2ZW50SW5mbyk7CisgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhID0gc3Rh
dGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEpOworICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+YXBpKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTihzbWFydERhdGEtPmFwaS0+bW91c2VfbW92ZSk7CisgICAgc21hcnREYXRhLT5hcGktPm1v
dXNlX21vdmUoc21hcnREYXRhLCBtb3ZlRXZlbnQpOwogfQogCiBzdGF0aWMgdm9pZCBfZXdrX3Zp
ZXdfb25fa2V5X2Rvd24odm9pZCogZGF0YSwgRXZhcyogZXZlbnRUeXBlLCBFdmFzX09iamVjdCog
Y2FsbGJhY2ssIHZvaWQqIGV2ZW50SW5mbykKIHsKLSAgICBFdmFzX0V2ZW50X0tleV9Eb3duKiBl
diA9IHN0YXRpY19jYXN0PEV2YXNfRXZlbnRfS2V5X0Rvd24qPihldmVudEluZm8pOwotICAgIEV3
a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+
KGRhdGEpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGkpOwotICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGktPmtleV9kb3duKTsKLSAgICBzZC0+YXBp
LT5rZXlfZG93bihzZCwgZXYpOworICAgIEV2YXNfRXZlbnRfS2V5X0Rvd24qIGRvd25FdmVudCA9
IHN0YXRpY19jYXN0PEV2YXNfRXZlbnRfS2V5X0Rvd24qPihldmVudEluZm8pOworICAgIEV3a19W
aWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0Rh
dGEqPihkYXRhKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmFw
aSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRhLT5hcGktPmtleV9k
b3duKTsKKyAgICBzbWFydERhdGEtPmFwaS0+a2V5X2Rvd24oc21hcnREYXRhLCBkb3duRXZlbnQp
OwogfQogCiBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfb25fa2V5X3VwKHZvaWQqIGRhdGEsIEV2YXMq
IGV2ZW50VHlwZSwgRXZhc19PYmplY3QqIGNhbGxiYWNrLCB2b2lkKiBldmVudEluZm8pCiB7Ci0g
ICAgRXZhc19FdmVudF9LZXlfVXAqIGV2ID0gc3RhdGljX2Nhc3Q8RXZhc19FdmVudF9LZXlfVXAq
PihldmVudEluZm8pOwotICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0gc3RhdGljX2Nhc3Q8
RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOKHNkLT5hcGkpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGktPmtl
eV91cCk7Ci0gICAgc2QtPmFwaS0+a2V5X3VwKHNkLCBldik7CisgICAgRXZhc19FdmVudF9LZXlf
VXAqIHVwRXZlbnQgPSBzdGF0aWNfY2FzdDxFdmFzX0V2ZW50X0tleV9VcCo+KGV2ZW50SW5mbyk7
CisgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhID0gc3RhdGljX2Nhc3Q8RXdrX1Zp
ZXdfU21hcnRfRGF0YSo+KGRhdGEpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNt
YXJ0RGF0YS0+YXBpKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEt
PmFwaS0+a2V5X3VwKTsKKyAgICBzbWFydERhdGEtPmFwaS0+a2V5X3VwKHNtYXJ0RGF0YSwgdXBF
dmVudCk7CiB9CiAKIHN0YXRpYyBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6RnJhbWU+IF9ld2tf
dmlld19jb3JlX2ZyYW1lX25ldyhFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEsIEV3a19W
aWV3X1ByaXZhdGVfRGF0YSogcHJpdiwgV2ViQ29yZTo6SFRNTEZyYW1lT3duZXJFbGVtZW50KiBv
d25lcikKIHsKLSAgICBXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEVmbCogZmxjID0gbmV3IFdl
YkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50RWZsKHNtYXJ0RGF0YS0+c2VsZik7Ci0gICAgaWYgKCFm
bGMpIHsKKyAgICBXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEVmbCogZnJhbWVMb2FkZXJDbGll
bnQgPSBuZXcgV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRFZmwoc21hcnREYXRhLT5zZWxmKTsK
KyAgICBpZiAoIWZyYW1lTG9hZGVyQ2xpZW50KSB7CiAgICAgICAgIENSSVRJQ0FMKCJDb3VsZCBu
b3QgY3JlYXRlIGZyYW1lIGxvYWRlciBjbGllbnQuIik7CiAgICAgICAgIHJldHVybiAwOwogICAg
IH0KLSAgICBmbGMtPnNldEN1c3RvbVVzZXJBZ2VudChTdHJpbmc6OmZyb21VVEY4KHByaXYtPnNl
dHRpbmdzLnVzZXJfYWdlbnQpKTsKKyAgICBmcmFtZUxvYWRlckNsaWVudC0+c2V0Q3VzdG9tVXNl
ckFnZW50KFN0cmluZzo6ZnJvbVVURjgocHJpdi0+c2V0dGluZ3MudXNlckFnZW50KSk7CiAKLSAg
ICByZXR1cm4gV2ViQ29yZTo6RnJhbWU6OmNyZWF0ZShwcml2LT5wYWdlLCBvd25lciwgZmxjKTsK
KyAgICByZXR1cm4gV2ViQ29yZTo6RnJhbWU6OmNyZWF0ZShwcml2LT5wYWdlLCBvd25lciwgZnJh
bWVMb2FkZXJDbGllbnQpOwogfQogCiBzdGF0aWMgRXZhc19TbWFydF9DbGFzcyBfcGFyZW50X3Nj
ID0gRVZBU19TTUFSVF9DTEFTU19JTklUX05VTEw7CkBAIC01NTcsNyArNTU3LDcgQEAgc3RhdGlj
IEV3a19WaWV3X1ByaXZhdGVfRGF0YSogX2V3a192aWV3X3ByaXZfbmV3KEV3a19WaWV3X1NtYXJ0
X0RhdGEqIHNtYXJ0RGF0YSkKIHsKICAgICBFd2tfVmlld19Qcml2YXRlX0RhdGEqIHByaXYgPQog
ICAgICAgICBzdGF0aWNfY2FzdDxFd2tfVmlld19Qcml2YXRlX0RhdGEqPihjYWxsb2MoMSwgc2l6
ZW9mKEV3a19WaWV3X1ByaXZhdGVfRGF0YSkpKTsKLSAgICBBdG9taWNTdHJpbmcgczsKKyAgICBB
dG9taWNTdHJpbmcgc3RyaW5nOwogICAgIFdlYkNvcmU6OktVUkwgdXJsOwogCiAgICAgaWYgKCFw
cml2KSB7CkBAIC01ODAsOTQgKzU4MCw5NCBAQCBzdGF0aWMgRXdrX1ZpZXdfUHJpdmF0ZV9EYXRh
KiBfZXdrX3ZpZXdfcHJpdl9uZXcoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhKQogICAg
ICAgICBnb3RvIGVycm9yX3BhZ2U7CiAgICAgfQogCi0gICAgcHJpdi0+cGFnZV9zZXR0aW5ncyA9
IHByaXYtPnBhZ2UtPnNldHRpbmdzKCk7Ci0gICAgaWYgKCFwcml2LT5wYWdlX3NldHRpbmdzKSB7
CisgICAgcHJpdi0+cGFnZVNldHRpbmdzID0gcHJpdi0+cGFnZS0+c2V0dGluZ3MoKTsKKyAgICBp
ZiAoIXByaXYtPnBhZ2VTZXR0aW5ncykgewogICAgICAgICBDUklUSUNBTCgiQ291bGQgbm90IGdl
dCBwYWdlIHNldHRpbmdzLiIpOwogICAgICAgICBnb3RvIGVycm9yX3NldHRpbmdzOwogICAgIH0K
IAotICAgIHByaXYtPnZpZXdwb3J0X2FyZ3VtZW50cy53aWR0aCA9IFdlYkNvcmU6OlZpZXdwb3J0
QXJndW1lbnRzOjpWYWx1ZUF1dG87Ci0gICAgcHJpdi0+dmlld3BvcnRfYXJndW1lbnRzLmhlaWdo
dCA9IFdlYkNvcmU6OlZpZXdwb3J0QXJndW1lbnRzOjpWYWx1ZUF1dG87Ci0gICAgcHJpdi0+dmll
d3BvcnRfYXJndW1lbnRzLmluaXRpYWxTY2FsZSA9IFdlYkNvcmU6OlZpZXdwb3J0QXJndW1lbnRz
OjpWYWx1ZUF1dG87Ci0gICAgcHJpdi0+dmlld3BvcnRfYXJndW1lbnRzLm1pbmltdW1TY2FsZSA9
IFdlYkNvcmU6OlZpZXdwb3J0QXJndW1lbnRzOjpWYWx1ZUF1dG87Ci0gICAgcHJpdi0+dmlld3Bv
cnRfYXJndW1lbnRzLm1heGltdW1TY2FsZSA9IFdlYkNvcmU6OlZpZXdwb3J0QXJndW1lbnRzOjpW
YWx1ZUF1dG87Ci0gICAgcHJpdi0+dmlld3BvcnRfYXJndW1lbnRzLnRhcmdldERlbnNpdHlEcGkg
PSBXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50czo6VmFsdWVBdXRvOwotICAgIHByaXYtPnZpZXdw
b3J0X2FyZ3VtZW50cy51c2VyU2NhbGFibGUgPSBFSU5BX1RSVUU7Ci0KLSAgICBwcml2LT5wYWdl
X3NldHRpbmdzLT5zZXRMb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkodHJ1ZSk7Ci0gICAgcHJpdi0+
cGFnZV9zZXR0aW5ncy0+c2V0RGVmYXVsdEZpeGVkRm9udFNpemUoMTApOwotICAgIHByaXYtPnBh
Z2Vfc2V0dGluZ3MtPnNldERlZmF1bHRGb250U2l6ZSgxMyk7Ci0gICAgcHJpdi0+cGFnZV9zZXR0
aW5ncy0+c2V0U2VyaWZGb250RmFtaWx5KCJzZXJpZiIpOwotICAgIHByaXYtPnBhZ2Vfc2V0dGlu
Z3MtPnNldEZpeGVkRm9udEZhbWlseSgibW9ub3R5cGUiKTsKLSAgICBwcml2LT5wYWdlX3NldHRp
bmdzLT5zZXRTYW5zU2VyaWZGb250RmFtaWx5KCJzYW5zIik7Ci0gICAgcHJpdi0+cGFnZV9zZXR0
aW5ncy0+c2V0U3RhbmRhcmRGb250RmFtaWx5KCJzYW5zIik7Ci0gICAgcHJpdi0+cGFnZV9zZXR0
aW5ncy0+c2V0SmF2YVNjcmlwdEVuYWJsZWQodHJ1ZSk7Ci0gICAgcHJpdi0+cGFnZV9zZXR0aW5n
cy0+c2V0UGx1Z2luc0VuYWJsZWQodHJ1ZSk7Ci0gICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0
TG9jYWxTdG9yYWdlRW5hYmxlZCh0cnVlKTsKLSAgICBwcml2LT5wYWdlX3NldHRpbmdzLT5zZXRP
ZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZUVuYWJsZWQodHJ1ZSk7Ci0gICAgcHJpdi0+cGFnZV9z
ZXR0aW5ncy0+c2V0VXNlc1BhZ2VDYWNoZSh0cnVlKTsKLSAgICBwcml2LT5wYWdlX3NldHRpbmdz
LT5zZXRVc2VzRW5jb2RpbmdEZXRlY3RvcihmYWxzZSk7Ci0KLSAgICB1cmwgPSBwcml2LT5wYWdl
X3NldHRpbmdzLT51c2VyU3R5bGVTaGVldExvY2F0aW9uKCk7Ci0gICAgcHJpdi0+c2V0dGluZ3Mu
dXNlcl9zdHlsZXNoZWV0ID0gZWluYV9zdHJpbmdzaGFyZV9hZGQodXJsLnN0cmluZygpLnV0Zjgo
KS5kYXRhKCkpOwotCi0gICAgcHJpdi0+c2V0dGluZ3MuZW5jb2RpbmdfZGVmYXVsdCA9IGVpbmFf
c3RyaW5nc2hhcmVfYWRkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAocHJpdi0+cGFnZV9zZXR0aW5ncy0+ZGVmYXVsdFRleHRFbmNvZGluZ05hbWUoKS51dGY4KCku
ZGF0YSgpKTsKLSAgICBwcml2LT5zZXR0aW5ncy5lbmNvZGluZ19jdXN0b20gPSAwOwotCi0gICAg
cyA9IHByaXYtPnBhZ2Vfc2V0dGluZ3MtPmxvY2FsU3RvcmFnZURhdGFiYXNlUGF0aCgpOwotICAg
IHByaXYtPnNldHRpbmdzLmxvY2FsX3N0b3JhZ2VfZGF0YWJhc2VfcGF0aCA9IGVpbmFfc3RyaW5n
c2hhcmVfYWRkKHMuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0KLSAgICBwcml2LT5zZXR0aW5n
cy5mb250X21pbmltdW1fc2l6ZSA9IHByaXYtPnBhZ2Vfc2V0dGluZ3MtPm1pbmltdW1Gb250U2l6
ZSgpOwotICAgIHByaXYtPnNldHRpbmdzLmZvbnRfbWluaW11bV9sb2dpY2FsX3NpemUgPSBwcml2
LT5wYWdlX3NldHRpbmdzLT5taW5pbXVtTG9naWNhbEZvbnRTaXplKCk7Ci0gICAgcHJpdi0+c2V0
dGluZ3MuZm9udF9kZWZhdWx0X3NpemUgPSBwcml2LT5wYWdlX3NldHRpbmdzLT5kZWZhdWx0Rm9u
dFNpemUoKTsKLSAgICBwcml2LT5zZXR0aW5ncy5mb250X21vbm9zcGFjZV9zaXplID0gcHJpdi0+
cGFnZV9zZXR0aW5ncy0+ZGVmYXVsdEZpeGVkRm9udFNpemUoKTsKLQotICAgIHMgPSBwcml2LT5w
YWdlX3NldHRpbmdzLT5zdGFuZGFyZEZvbnRGYW1pbHkoKTsKLSAgICBwcml2LT5zZXR0aW5ncy5m
b250X3N0YW5kYXJkID0gZWluYV9zdHJpbmdzaGFyZV9hZGQocy5zdHJpbmcoKS51dGY4KCkuZGF0
YSgpKTsKLSAgICBzID0gcHJpdi0+cGFnZV9zZXR0aW5ncy0+Y3Vyc2l2ZUZvbnRGYW1pbHkoKTsK
LSAgICBwcml2LT5zZXR0aW5ncy5mb250X2N1cnNpdmUgPSBlaW5hX3N0cmluZ3NoYXJlX2FkZChz
LnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotICAgIHMgPSBwcml2LT5wYWdlX3NldHRpbmdzLT5m
aXhlZEZvbnRGYW1pbHkoKTsKLSAgICBwcml2LT5zZXR0aW5ncy5mb250X21vbm9zcGFjZSA9IGVp
bmFfc3RyaW5nc2hhcmVfYWRkKHMuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgcyA9IHBy
aXYtPnBhZ2Vfc2V0dGluZ3MtPmZhbnRhc3lGb250RmFtaWx5KCk7Ci0gICAgcHJpdi0+c2V0dGlu
Z3MuZm9udF9mYW50YXN5ID0gZWluYV9zdHJpbmdzaGFyZV9hZGQocy5zdHJpbmcoKS51dGY4KCku
ZGF0YSgpKTsKLSAgICBzID0gcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2VyaWZGb250RmFtaWx5KCk7
Ci0gICAgcHJpdi0+c2V0dGluZ3MuZm9udF9zZXJpZiA9IGVpbmFfc3RyaW5nc2hhcmVfYWRkKHMu
c3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgcyA9IHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNh
bnNTZXJpZkZvbnRGYW1pbHkoKTsKLSAgICBwcml2LT5zZXR0aW5ncy5mb250X3NhbnNfc2VyaWYg
PSBlaW5hX3N0cmluZ3NoYXJlX2FkZChzLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotCi0gICAg
cHJpdi0+c2V0dGluZ3MuYXV0b19sb2FkX2ltYWdlcyA9IHByaXYtPnBhZ2Vfc2V0dGluZ3MtPmxv
YWRzSW1hZ2VzQXV0b21hdGljYWxseSgpOwotICAgIHByaXYtPnNldHRpbmdzLmF1dG9fc2hyaW5r
X2ltYWdlcyA9IHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNocmlua3NTdGFuZGFsb25lSW1hZ2VzVG9G
aXQoKTsKLSAgICBwcml2LT5zZXR0aW5ncy5lbmFibGVfYXV0b19yZXNpemVfd2luZG93ID0gRUlO
QV9UUlVFOwotICAgIHByaXYtPnNldHRpbmdzLmVuYWJsZV9kZXZlbG9wZXJfZXh0cmFzID0gcHJp
di0+cGFnZV9zZXR0aW5ncy0+ZGV2ZWxvcGVyRXh0cmFzRW5hYmxlZCgpOwotICAgIHByaXYtPnNl
dHRpbmdzLmVuYWJsZV9zY3JpcHRzID0gcHJpdi0+cGFnZV9zZXR0aW5ncy0+aXNKYXZhU2NyaXB0
RW5hYmxlZCgpOwotICAgIHByaXYtPnNldHRpbmdzLmVuYWJsZV9wbHVnaW5zID0gcHJpdi0+cGFn
ZV9zZXR0aW5ncy0+YXJlUGx1Z2luc0VuYWJsZWQoKTsKLSAgICBwcml2LT5zZXR0aW5ncy5lbmFi
bGVfZnJhbWVfZmxhdHRlbmluZyA9IHByaXYtPnBhZ2Vfc2V0dGluZ3MtPmZyYW1lRmxhdHRlbmlu
Z0VuYWJsZWQoKTsKLSAgICBwcml2LT5zZXR0aW5ncy5zY3JpcHRzX3dpbmRvd19vcGVuID0gcHJp
di0+cGFnZV9zZXR0aW5ncy0+amF2YVNjcmlwdENhbk9wZW5XaW5kb3dzQXV0b21hdGljYWxseSgp
OwotICAgIHByaXYtPnNldHRpbmdzLnNjcmlwdHNfY2FuX2Nsb3NlX3dpbmRvd3MgPSBwcml2LT5w
YWdlX3NldHRpbmdzLT5hbGxvd1NjcmlwdHNUb0Nsb3NlV2luZG93cygpOwotICAgIHByaXYtPnNl
dHRpbmdzLnJlc2l6YWJsZV90ZXh0YXJlYXMgPSBwcml2LT5wYWdlX3NldHRpbmdzLT50ZXh0QXJl
YXNBcmVSZXNpemFibGUoKTsKLSAgICBwcml2LT5zZXR0aW5ncy5wcml2YXRlX2Jyb3dzaW5nID0g
cHJpdi0+cGFnZV9zZXR0aW5ncy0+cHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCgpOwotICAgIHByaXYt
PnNldHRpbmdzLmNhcmV0X2Jyb3dzaW5nID0gcHJpdi0+cGFnZV9zZXR0aW5ncy0+Y2FyZXRCcm93
c2luZ0VuYWJsZWQoKTsKLSAgICBwcml2LT5zZXR0aW5ncy5zcGF0aWFsX25hdmlnYXRpb24gPSBw
cml2LT5wYWdlX3NldHRpbmdzLT5pc1NwYXRpYWxOYXZpZ2F0aW9uRW5hYmxlZCgpOwotICAgIHBy
aXYtPnNldHRpbmdzLmxvY2FsX3N0b3JhZ2UgPSBwcml2LT5wYWdlX3NldHRpbmdzLT5sb2NhbFN0
b3JhZ2VFbmFibGVkKCk7Ci0gICAgcHJpdi0+c2V0dGluZ3Mub2ZmbGluZV9hcHBfY2FjaGUgPSB0
cnVlOyAvLyBYWFggbm8gZnVuY3Rpb24gdG8gcmVhZCBzZXR0aW5nOyB0aGlzIGtlZXBzIHRoZSBv
cmlnaW5hbCBzZXR0aW5nCi0gICAgcHJpdi0+c2V0dGluZ3MucGFnZV9jYWNoZSA9IHByaXYtPnBh
Z2Vfc2V0dGluZ3MtPnVzZXNQYWdlQ2FjaGUoKTsKLSAgICBwcml2LT5zZXR0aW5ncy5lbmNvZGlu
Z19kZXRlY3RvciA9IHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnVzZXNFbmNvZGluZ0RldGVjdG9yKCk7
Ci0KLSAgICBwcml2LT5zZXR0aW5ncy51c2VyX2FnZW50ID0gZXdrX3NldHRpbmdzX2RlZmF1bHRf
dXNlcl9hZ2VudF9nZXQoKTsKKyAgICBwcml2LT52aWV3cG9ydEFyZ3VtZW50cy53aWR0aCA9IFdl
YkNvcmU6OlZpZXdwb3J0QXJndW1lbnRzOjpWYWx1ZUF1dG87CisgICAgcHJpdi0+dmlld3BvcnRB
cmd1bWVudHMuaGVpZ2h0ID0gV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHM6OlZhbHVlQXV0bzsK
KyAgICBwcml2LT52aWV3cG9ydEFyZ3VtZW50cy5pbml0aWFsU2NhbGUgPSBXZWJDb3JlOjpWaWV3
cG9ydEFyZ3VtZW50czo6VmFsdWVBdXRvOworICAgIHByaXYtPnZpZXdwb3J0QXJndW1lbnRzLm1p
bmltdW1TY2FsZSA9IFdlYkNvcmU6OlZpZXdwb3J0QXJndW1lbnRzOjpWYWx1ZUF1dG87CisgICAg
cHJpdi0+dmlld3BvcnRBcmd1bWVudHMubWF4aW11bVNjYWxlID0gV2ViQ29yZTo6Vmlld3BvcnRB
cmd1bWVudHM6OlZhbHVlQXV0bzsKKyAgICBwcml2LT52aWV3cG9ydEFyZ3VtZW50cy50YXJnZXRE
ZW5zaXR5RHBpID0gV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHM6OlZhbHVlQXV0bzsKKyAgICBw
cml2LT52aWV3cG9ydEFyZ3VtZW50cy51c2VyU2NhbGFibGUgPSBFSU5BX1RSVUU7CisKKyAgICBw
cml2LT5wYWdlU2V0dGluZ3MtPnNldExvYWRzSW1hZ2VzQXV0b21hdGljYWxseSh0cnVlKTsKKyAg
ICBwcml2LT5wYWdlU2V0dGluZ3MtPnNldERlZmF1bHRGaXhlZEZvbnRTaXplKDEwKTsKKyAgICBw
cml2LT5wYWdlU2V0dGluZ3MtPnNldERlZmF1bHRGb250U2l6ZSgxMyk7CisgICAgcHJpdi0+cGFn
ZVNldHRpbmdzLT5zZXRTZXJpZkZvbnRGYW1pbHkoInNlcmlmIik7CisgICAgcHJpdi0+cGFnZVNl
dHRpbmdzLT5zZXRGaXhlZEZvbnRGYW1pbHkoIm1vbm90eXBlIik7CisgICAgcHJpdi0+cGFnZVNl
dHRpbmdzLT5zZXRTYW5zU2VyaWZGb250RmFtaWx5KCJzYW5zIik7CisgICAgcHJpdi0+cGFnZVNl
dHRpbmdzLT5zZXRTdGFuZGFyZEZvbnRGYW1pbHkoInNhbnMiKTsKKyAgICBwcml2LT5wYWdlU2V0
dGluZ3MtPnNldEphdmFTY3JpcHRFbmFibGVkKHRydWUpOworICAgIHByaXYtPnBhZ2VTZXR0aW5n
cy0+c2V0UGx1Z2luc0VuYWJsZWQodHJ1ZSk7CisgICAgcHJpdi0+cGFnZVNldHRpbmdzLT5zZXRM
b2NhbFN0b3JhZ2VFbmFibGVkKHRydWUpOworICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0T2Zm
bGluZVdlYkFwcGxpY2F0aW9uQ2FjaGVFbmFibGVkKHRydWUpOworICAgIHByaXYtPnBhZ2VTZXR0
aW5ncy0+c2V0VXNlc1BhZ2VDYWNoZSh0cnVlKTsKKyAgICBwcml2LT5wYWdlU2V0dGluZ3MtPnNl
dFVzZXNFbmNvZGluZ0RldGVjdG9yKGZhbHNlKTsKKworICAgIHVybCA9IHByaXYtPnBhZ2VTZXR0
aW5ncy0+dXNlclN0eWxlU2hlZXRMb2NhdGlvbigpOworICAgIHByaXYtPnNldHRpbmdzLnVzZXJT
dHlsZXNoZWV0ID0gZWluYV9zdHJpbmdzaGFyZV9hZGQodXJsLnN0cmluZygpLnV0ZjgoKS5kYXRh
KCkpOworCisgICAgcHJpdi0+c2V0dGluZ3MuZW5jb2RpbmdEZWZhdWx0ID0gZWluYV9zdHJpbmdz
aGFyZV9hZGQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwcml2
LT5wYWdlU2V0dGluZ3MtPmRlZmF1bHRUZXh0RW5jb2RpbmdOYW1lKCkudXRmOCgpLmRhdGEoKSk7
CisgICAgcHJpdi0+c2V0dGluZ3MuZW5jb2RpbmdDdXN0b20gPSAwOworCisgICAgc3RyaW5nID0g
cHJpdi0+cGFnZVNldHRpbmdzLT5sb2NhbFN0b3JhZ2VEYXRhYmFzZVBhdGgoKTsKKyAgICBwcml2
LT5zZXR0aW5ncy5sb2NhbFN0b3JhZ2VEYXRhYmFzZVBhdGggPSBlaW5hX3N0cmluZ3NoYXJlX2Fk
ZChzdHJpbmcuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisKKyAgICBwcml2LT5zZXR0aW5ncy5m
b250TWluaW11bVNpemUgPSBwcml2LT5wYWdlU2V0dGluZ3MtPm1pbmltdW1Gb250U2l6ZSgpOwor
ICAgIHByaXYtPnNldHRpbmdzLmZvbnRNaW5pbXVtTG9naWNhbFNpemUgPSBwcml2LT5wYWdlU2V0
dGluZ3MtPm1pbmltdW1Mb2dpY2FsRm9udFNpemUoKTsKKyAgICBwcml2LT5zZXR0aW5ncy5mb250
RGVmYXVsdFNpemUgPSBwcml2LT5wYWdlU2V0dGluZ3MtPmRlZmF1bHRGb250U2l6ZSgpOworICAg
IHByaXYtPnNldHRpbmdzLmZvbnRNb25vc3BhY2VTaXplID0gcHJpdi0+cGFnZVNldHRpbmdzLT5k
ZWZhdWx0Rml4ZWRGb250U2l6ZSgpOworCisgICAgc3RyaW5nID0gcHJpdi0+cGFnZVNldHRpbmdz
LT5zdGFuZGFyZEZvbnRGYW1pbHkoKTsKKyAgICBwcml2LT5zZXR0aW5ncy5mb250U3RhbmRhcmQg
PSBlaW5hX3N0cmluZ3NoYXJlX2FkZChzdHJpbmcuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Cisg
ICAgc3RyaW5nID0gcHJpdi0+cGFnZVNldHRpbmdzLT5jdXJzaXZlRm9udEZhbWlseSgpOworICAg
IHByaXYtPnNldHRpbmdzLmZvbnRDdXJzaXZlID0gZWluYV9zdHJpbmdzaGFyZV9hZGQoc3RyaW5n
LnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgIHN0cmluZyA9IHByaXYtPnBhZ2VTZXR0aW5n
cy0+Zml4ZWRGb250RmFtaWx5KCk7CisgICAgcHJpdi0+c2V0dGluZ3MuZm9udE1vbm9zcGFjZSA9
IGVpbmFfc3RyaW5nc2hhcmVfYWRkKHN0cmluZy5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAg
ICBzdHJpbmcgPSBwcml2LT5wYWdlU2V0dGluZ3MtPmZhbnRhc3lGb250RmFtaWx5KCk7CisgICAg
cHJpdi0+c2V0dGluZ3MuZm9udEZhbnRhc3kgPSBlaW5hX3N0cmluZ3NoYXJlX2FkZChzdHJpbmcu
c3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgc3RyaW5nID0gcHJpdi0+cGFnZVNldHRpbmdz
LT5zZXJpZkZvbnRGYW1pbHkoKTsKKyAgICBwcml2LT5zZXR0aW5ncy5mb250U2VyaWYgPSBlaW5h
X3N0cmluZ3NoYXJlX2FkZChzdHJpbmcuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgc3Ry
aW5nID0gcHJpdi0+cGFnZVNldHRpbmdzLT5zYW5zU2VyaWZGb250RmFtaWx5KCk7CisgICAgcHJp
di0+c2V0dGluZ3MuZm9udFNhbnNTZXJpZiA9IGVpbmFfc3RyaW5nc2hhcmVfYWRkKHN0cmluZy5z
dHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKworICAgIHByaXYtPnNldHRpbmdzLmF1dG9Mb2FkSW1h
Z2VzID0gcHJpdi0+cGFnZVNldHRpbmdzLT5sb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkoKTsKKyAg
ICBwcml2LT5zZXR0aW5ncy5hdXRvU2hyaW5rSW1hZ2VzID0gcHJpdi0+cGFnZVNldHRpbmdzLT5z
aHJpbmtzU3RhbmRhbG9uZUltYWdlc1RvRml0KCk7CisgICAgcHJpdi0+c2V0dGluZ3MuZW5hYmxl
QXV0b1Jlc2l6ZVdpbmRvdyA9IEVJTkFfVFJVRTsKKyAgICBwcml2LT5zZXR0aW5ncy5lbmFibGVE
ZXZlbG9wZXJFeHRyYXMgPSBwcml2LT5wYWdlU2V0dGluZ3MtPmRldmVsb3BlckV4dHJhc0VuYWJs
ZWQoKTsKKyAgICBwcml2LT5zZXR0aW5ncy5lbmFibGVTY3JpcHRzID0gcHJpdi0+cGFnZVNldHRp
bmdzLT5pc0phdmFTY3JpcHRFbmFibGVkKCk7CisgICAgcHJpdi0+c2V0dGluZ3MuZW5hYmxlUGx1
Z2lucyA9IHByaXYtPnBhZ2VTZXR0aW5ncy0+YXJlUGx1Z2luc0VuYWJsZWQoKTsKKyAgICBwcml2
LT5zZXR0aW5ncy5lbmFibGVGcmFtZUZsYXR0ZW5pbmcgPSBwcml2LT5wYWdlU2V0dGluZ3MtPmZy
YW1lRmxhdHRlbmluZ0VuYWJsZWQoKTsKKyAgICBwcml2LT5zZXR0aW5ncy5zY3JpcHRzV2luZG93
T3BlbiA9IHByaXYtPnBhZ2VTZXR0aW5ncy0+amF2YVNjcmlwdENhbk9wZW5XaW5kb3dzQXV0b21h
dGljYWxseSgpOworICAgIHByaXYtPnNldHRpbmdzLnNjcmlwdHNDYW5DbG9zZVdpbmRvd3MgPSBw
cml2LT5wYWdlU2V0dGluZ3MtPmFsbG93U2NyaXB0c1RvQ2xvc2VXaW5kb3dzKCk7CisgICAgcHJp
di0+c2V0dGluZ3MucmVzaXphYmxlVGV4dGFyZWFzID0gcHJpdi0+cGFnZVNldHRpbmdzLT50ZXh0
QXJlYXNBcmVSZXNpemFibGUoKTsKKyAgICBwcml2LT5zZXR0aW5ncy5wcml2YXRlQnJvd3Npbmcg
PSBwcml2LT5wYWdlU2V0dGluZ3MtPnByaXZhdGVCcm93c2luZ0VuYWJsZWQoKTsKKyAgICBwcml2
LT5zZXR0aW5ncy5jYXJldEJyb3dzaW5nID0gcHJpdi0+cGFnZVNldHRpbmdzLT5jYXJldEJyb3dz
aW5nRW5hYmxlZCgpOworICAgIHByaXYtPnNldHRpbmdzLnNwYXRpYWxOYXZpZ2F0aW9uID0gcHJp
di0+cGFnZVNldHRpbmdzLT5pc1NwYXRpYWxOYXZpZ2F0aW9uRW5hYmxlZCgpOworICAgIHByaXYt
PnNldHRpbmdzLmxvY2FsU3RvcmFnZSA9IHByaXYtPnBhZ2VTZXR0aW5ncy0+bG9jYWxTdG9yYWdl
RW5hYmxlZCgpOworICAgIHByaXYtPnNldHRpbmdzLm9mZmxpbmVBcHBDYWNoZSA9IHRydWU7IC8v
IFhYWCBubyBmdW5jdGlvbiB0byByZWFkIHNldHRpbmc7IHRoaXMga2VlcHMgdGhlIG9yaWdpbmFs
IHNldHRpbmcKKyAgICBwcml2LT5zZXR0aW5ncy5wYWdlQ2FjaGUgPSBwcml2LT5wYWdlU2V0dGlu
Z3MtPnVzZXNQYWdlQ2FjaGUoKTsKKyAgICBwcml2LT5zZXR0aW5ncy5lbmNvZGluZ0RldGVjdG9y
ID0gcHJpdi0+cGFnZVNldHRpbmdzLT51c2VzRW5jb2RpbmdEZXRlY3RvcigpOworCisgICAgcHJp
di0+c2V0dGluZ3MudXNlckFnZW50ID0gZXdrX3NldHRpbmdzX2RlZmF1bHRfdXNlcl9hZ2VudF9n
ZXQoKTsKIAogICAgIC8vIFNpbmNlIHRoZXJlJ3Mgbm8gc2NhbGUgc2VwYXJhdGVkIGZyb20gem9v
bWluZyBpbiB3ZWJraXQtZWZsLCB0aGlzIGZ1bmN0aW9uYWxpdHkgb2YKICAgICAvLyB2aWV3cG9y
dCBtZXRhIHRhZyBpcyBpbXBsZW1lbnRlZCB1c2luZyB6b29tLiBXaGVuIHNjYWxlIHpvb20gaXMg
c3VwcG9ydGVkIGJ5IHdlYmtpdC1lZmwsCiAgICAgLy8gdGhpcyBmdW5jdGlvbmFsaXR5IHdpbGwg
YmUgbW9kaWZpZWQgYnkgdGhlIHNjYWxlIHpvb20gcGF0Y2guCi0gICAgcHJpdi0+c2V0dGluZ3Mu
em9vbV9yYW5nZS5taW5fc2NhbGUgPSBaT09NX01JTjsKLSAgICBwcml2LT5zZXR0aW5ncy56b29t
X3JhbmdlLm1heF9zY2FsZSA9IFpPT01fTUFYOwotICAgIHByaXYtPnNldHRpbmdzLnpvb21fcmFu
Z2UudXNlcl9zY2FsYWJsZSA9IEVJTkFfVFJVRTsKLSAgICBwcml2LT5zZXR0aW5ncy5kZXZpY2Vf
cGl4ZWxfcmF0aW8gPSBERVZJQ0VfUElYRUxfUkFUSU87CisgICAgcHJpdi0+c2V0dGluZ3Muem9v
bVJhbmdlLm1pblNjYWxlID0gWk9PTV9NSU47CisgICAgcHJpdi0+c2V0dGluZ3Muem9vbVJhbmdl
Lm1heFNjYWxlID0gWk9PTV9NQVg7CisgICAgcHJpdi0+c2V0dGluZ3Muem9vbVJhbmdlLnVzZXJT
Y2FsYWJsZSA9IEVJTkFfVFJVRTsKKyAgICBwcml2LT5zZXR0aW5ncy5kZXZpY2VQaXhlbFJhdGlv
ID0gREVWSUNFX1BJWEVMX1JBVElPOwogCi0gICAgcHJpdi0+c2V0dGluZ3MuZG9tX3RpbWVyX2lu
dGVydmFsID0gcHJpdi0+cGFnZV9zZXR0aW5ncy0+ZGVmYXVsdE1pbkRPTVRpbWVySW50ZXJ2YWwo
KTsKKyAgICBwcml2LT5zZXR0aW5ncy5kb21UaW1lckludGVydmFsID0gcHJpdi0+cGFnZVNldHRp
bmdzLT5kZWZhdWx0TWluRE9NVGltZXJJbnRlcnZhbCgpOwogCi0gICAgcHJpdi0+bWFpbl9mcmFt
ZSA9IF9ld2tfdmlld19jb3JlX2ZyYW1lX25ldyhzbWFydERhdGEsIHByaXYsIDApLmdldCgpOwot
ICAgIGlmICghcHJpdi0+bWFpbl9mcmFtZSkgeworICAgIHByaXYtPm1haW5GcmFtZSA9IF9ld2tf
dmlld19jb3JlX2ZyYW1lX25ldyhzbWFydERhdGEsIHByaXYsIDApLmdldCgpOworICAgIGlmICgh
cHJpdi0+bWFpbkZyYW1lKSB7CiAgICAgICAgIENSSVRJQ0FMKCJDb3VsZCBub3QgY3JlYXRlIG1h
aW4gZnJhbWUuIik7CiAgICAgICAgIGdvdG8gZXJyb3JfbWFpbl9mcmFtZTsKICAgICB9CkBAIC03
MDAsMjAgKzcwMCwyMCBAQCBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfcHJpdl9kZWwoRXdrX1ZpZXdf
UHJpdmF0ZV9EYXRhKiBwcml2KQogICAgIGZyZWUocHJpdi0+cmVwYWludHMuYXJyYXkpOwogICAg
IGZyZWUocHJpdi0+c2Nyb2xscy5hcnJheSk7CiAKLSAgICBlaW5hX3N0cmluZ3NoYXJlX2RlbChw
cml2LT5zZXR0aW5ncy51c2VyX2FnZW50KTsKLSAgICBlaW5hX3N0cmluZ3NoYXJlX2RlbChwcml2
LT5zZXR0aW5ncy51c2VyX3N0eWxlc2hlZXQpOwotICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVsKHBy
aXYtPnNldHRpbmdzLmVuY29kaW5nX2RlZmF1bHQpOwotICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVs
KHByaXYtPnNldHRpbmdzLmVuY29kaW5nX2N1c3RvbSk7Ci0gICAgZWluYV9zdHJpbmdzaGFyZV9k
ZWwocHJpdi0+c2V0dGluZ3MuZm9udF9zdGFuZGFyZCk7Ci0gICAgZWluYV9zdHJpbmdzaGFyZV9k
ZWwocHJpdi0+c2V0dGluZ3MuZm9udF9jdXJzaXZlKTsKLSAgICBlaW5hX3N0cmluZ3NoYXJlX2Rl
bChwcml2LT5zZXR0aW5ncy5mb250X21vbm9zcGFjZSk7Ci0gICAgZWluYV9zdHJpbmdzaGFyZV9k
ZWwocHJpdi0+c2V0dGluZ3MuZm9udF9mYW50YXN5KTsKLSAgICBlaW5hX3N0cmluZ3NoYXJlX2Rl
bChwcml2LT5zZXR0aW5ncy5mb250X3NlcmlmKTsKLSAgICBlaW5hX3N0cmluZ3NoYXJlX2RlbChw
cml2LT5zZXR0aW5ncy5mb250X3NhbnNfc2VyaWYpOwotICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVs
KHByaXYtPnNldHRpbmdzLmxvY2FsX3N0b3JhZ2VfZGF0YWJhc2VfcGF0aCk7Ci0KLSAgICBpZiAo
cHJpdi0+YW5pbWF0ZWRfem9vbS5hbmltYXRvcikKLSAgICAgICAgZWNvcmVfYW5pbWF0b3JfZGVs
KHByaXYtPmFuaW1hdGVkX3pvb20uYW5pbWF0b3IpOworICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVs
KHByaXYtPnNldHRpbmdzLnVzZXJBZ2VudCk7CisgICAgZWluYV9zdHJpbmdzaGFyZV9kZWwocHJp
di0+c2V0dGluZ3MudXNlclN0eWxlc2hlZXQpOworICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVsKHBy
aXYtPnNldHRpbmdzLmVuY29kaW5nRGVmYXVsdCk7CisgICAgZWluYV9zdHJpbmdzaGFyZV9kZWwo
cHJpdi0+c2V0dGluZ3MuZW5jb2RpbmdDdXN0b20pOworICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVs
KHByaXYtPnNldHRpbmdzLmZvbnRTdGFuZGFyZCk7CisgICAgZWluYV9zdHJpbmdzaGFyZV9kZWwo
cHJpdi0+c2V0dGluZ3MuZm9udEN1cnNpdmUpOworICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVsKHBy
aXYtPnNldHRpbmdzLmZvbnRNb25vc3BhY2UpOworICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVsKHBy
aXYtPnNldHRpbmdzLmZvbnRGYW50YXN5KTsKKyAgICBlaW5hX3N0cmluZ3NoYXJlX2RlbChwcml2
LT5zZXR0aW5ncy5mb250U2VyaWYpOworICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVsKHByaXYtPnNl
dHRpbmdzLmZvbnRTYW5zU2VyaWYpOworICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVsKHByaXYtPnNl
dHRpbmdzLmxvY2FsU3RvcmFnZURhdGFiYXNlUGF0aCk7CisKKyAgICBpZiAocHJpdi0+YW5pbWF0
ZWRab29tLmFuaW1hdG9yKQorICAgICAgICBlY29yZV9hbmltYXRvcl9kZWwocHJpdi0+YW5pbWF0
ZWRab29tLmFuaW1hdG9yKTsKIAogICAgIGV3a19oaXN0b3J5X2ZyZWUocHJpdi0+aGlzdG9yeSk7
CiAKQEAgLTcyNCw3MiArNzI0LDcyIEBAIHN0YXRpYyB2b2lkIF9ld2tfdmlld19wcml2X2RlbChF
d2tfVmlld19Qcml2YXRlX0RhdGEqIHByaXYpCiBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21hcnRf
YWRkKEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewogICAgIGNvbnN0IEV2YXNfU21hcnQqIHNtYXJ0
ID0gZXZhc19vYmplY3Rfc21hcnRfc21hcnRfZ2V0KGV3a1ZpZXcpOwotICAgIGNvbnN0IEV2YXNf
U21hcnRfQ2xhc3MqIHNjID0gZXZhc19zbWFydF9jbGFzc19nZXQoc21hcnQpOwotICAgIGNvbnN0
IEV3a19WaWV3X1NtYXJ0X0NsYXNzKiBhcGkgPSByZWludGVycHJldF9jYXN0PGNvbnN0IEV3a19W
aWV3X1NtYXJ0X0NsYXNzKj4oc2MpOworICAgIGNvbnN0IEV2YXNfU21hcnRfQ2xhc3MqIHNtYXJ0
Q2xhc3MgPSBldmFzX3NtYXJ0X2NsYXNzX2dldChzbWFydCk7CisgICAgY29uc3QgRXdrX1ZpZXdf
U21hcnRfQ2xhc3MqIGFwaSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgRXdrX1ZpZXdfU21hcnRf
Q2xhc3MqPihzbWFydENsYXNzKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihhcGkt
PmJhY2tpbmdfc3RvcmVfYWRkKTsKLSAgICBFV0tfVklFV19TRF9HRVQoZXdrVmlldywgc2QpOwor
ICAgIEVXS19WSUVXX1NEX0dFVChld2tWaWV3LCBzbWFydERhdGEpOwogCi0gICAgaWYgKCFzZCkg
ewotICAgICAgICBzZCA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihjYWxsb2Mo
MSwgc2l6ZW9mKEV3a19WaWV3X1NtYXJ0X0RhdGEpKSk7Ci0gICAgICAgIGlmICghc2QpIHsKKyAg
ICBpZiAoIXNtYXJ0RGF0YSkgeworICAgICAgICBzbWFydERhdGEgPSBzdGF0aWNfY2FzdDxFd2tf
Vmlld19TbWFydF9EYXRhKj4oY2FsbG9jKDEsIHNpemVvZihFd2tfVmlld19TbWFydF9EYXRhKSkp
OworICAgICAgICBpZiAoIXNtYXJ0RGF0YSkgewogICAgICAgICAgICAgQ1JJVElDQUwoImNvdWxk
IG5vdCBhbGxvY2F0ZSBFd2tfVmlld19TbWFydF9EYXRhIik7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KLSAgICAgICAgZXZhc19vYmplY3Rfc21hcnRfZGF0YV9zZXQoZXdrVmlldywg
c2QpOworICAgICAgICBldmFzX29iamVjdF9zbWFydF9kYXRhX3NldChld2tWaWV3LCBzbWFydERh
dGEpOwogICAgIH0KIAotICAgIHNkLT5iZ19jb2xvci5yID0gMjU1OwotICAgIHNkLT5iZ19jb2xv
ci5nID0gMjU1OwotICAgIHNkLT5iZ19jb2xvci5iID0gMjU1OwotICAgIHNkLT5iZ19jb2xvci5h
ID0gMjU1OworICAgIHNtYXJ0RGF0YS0+YmdfY29sb3IuciA9IDI1NTsKKyAgICBzbWFydERhdGEt
PmJnX2NvbG9yLmcgPSAyNTU7CisgICAgc21hcnREYXRhLT5iZ19jb2xvci5iID0gMjU1OworICAg
IHNtYXJ0RGF0YS0+YmdfY29sb3IuYSA9IDI1NTsKIAotICAgIHNkLT5zZWxmID0gZXdrVmlldzsK
LSAgICBzZC0+X3ByaXYgPSBfZXdrX3ZpZXdfcHJpdl9uZXcoc2QpOwotICAgIHNkLT5hcGkgPSBh
cGk7CisgICAgc21hcnREYXRhLT5zZWxmID0gZXdrVmlldzsKKyAgICBzbWFydERhdGEtPl9wcml2
ID0gX2V3a192aWV3X3ByaXZfbmV3KHNtYXJ0RGF0YSk7CisgICAgc21hcnREYXRhLT5hcGkgPSBh
cGk7CiAKICAgICBfcGFyZW50X3NjLmFkZChld2tWaWV3KTsKIAotICAgIGlmICghc2QtPl9wcml2
KQorICAgIGlmICghc21hcnREYXRhLT5fcHJpdikKICAgICAgICAgcmV0dXJuOwogCi0gICAgRVdL
X1ZJRVdfUFJJVl9HRVQoc2QsIHByaXYpOworICAgIEVXS19WSUVXX1BSSVZfR0VUKHNtYXJ0RGF0
YSwgcHJpdik7CiAKLSAgICBzZC0+YmFja2luZ19zdG9yZSA9IGFwaS0+YmFja2luZ19zdG9yZV9h
ZGQoc2QpOwotICAgIGlmICghc2QtPmJhY2tpbmdfc3RvcmUpIHsKKyAgICBzbWFydERhdGEtPmJh
Y2tpbmdfc3RvcmUgPSBhcGktPmJhY2tpbmdfc3RvcmVfYWRkKHNtYXJ0RGF0YSk7CisgICAgaWYg
KCFzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUpIHsKICAgICAgICAgRVJSKCJDb3VsZCBub3QgY3Jl
YXRlIGJhY2tpbmcgc3RvcmUgb2JqZWN0LiIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgZXZhc19vYmplY3Rfc21hcnRfbWVtYmVyX2FkZChzZC0+YmFja2luZ19zdG9yZSwgZXdrVmll
dyk7Ci0gICAgZXZhc19vYmplY3Rfc2hvdyhzZC0+YmFja2luZ19zdG9yZSk7Ci0gICAgZXZhc19v
YmplY3RfcGFzc19ldmVudHNfc2V0KHNkLT5iYWNraW5nX3N0b3JlLCBFSU5BX1RSVUUpOworICAg
IGV2YXNfb2JqZWN0X3NtYXJ0X21lbWJlcl9hZGQoc21hcnREYXRhLT5iYWNraW5nX3N0b3JlLCBl
d2tWaWV3KTsKKyAgICBldmFzX29iamVjdF9zaG93KHNtYXJ0RGF0YS0+YmFja2luZ19zdG9yZSk7
CisgICAgZXZhc19vYmplY3RfcGFzc19ldmVudHNfc2V0KHNtYXJ0RGF0YS0+YmFja2luZ19zdG9y
ZSwgRUlOQV9UUlVFKTsKIAotICAgIHNkLT5ldmVudHNfcmVjdCA9IGV2YXNfb2JqZWN0X3JlY3Rh
bmdsZV9hZGQoc2QtPmJhc2UuZXZhcyk7Ci0gICAgZXZhc19vYmplY3RfY29sb3Jfc2V0KHNkLT5l
dmVudHNfcmVjdCwgMCwgMCwgMCwgMCk7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfbWVtYmVyX2Fk
ZChzZC0+ZXZlbnRzX3JlY3QsIGV3a1ZpZXcpOwotICAgIGV2YXNfb2JqZWN0X3Nob3coc2QtPmV2
ZW50c19yZWN0KTsKKyAgICBzbWFydERhdGEtPmV2ZW50c19yZWN0ID0gZXZhc19vYmplY3RfcmVj
dGFuZ2xlX2FkZChzbWFydERhdGEtPmJhc2UuZXZhcyk7CisgICAgZXZhc19vYmplY3RfY29sb3Jf
c2V0KHNtYXJ0RGF0YS0+ZXZlbnRzX3JlY3QsIDAsIDAsIDAsIDApOworICAgIGV2YXNfb2JqZWN0
X3NtYXJ0X21lbWJlcl9hZGQoc21hcnREYXRhLT5ldmVudHNfcmVjdCwgZXdrVmlldyk7CisgICAg
ZXZhc19vYmplY3Rfc2hvdyhzbWFydERhdGEtPmV2ZW50c19yZWN0KTsKIAotICAgIHNkLT5tYWlu
X2ZyYW1lID0gZXdrX2ZyYW1lX2FkZChzZC0+YmFzZS5ldmFzKTsKLSAgICBpZiAoIXNkLT5tYWlu
X2ZyYW1lKSB7CisgICAgc21hcnREYXRhLT5tYWluX2ZyYW1lID0gZXdrX2ZyYW1lX2FkZChzbWFy
dERhdGEtPmJhc2UuZXZhcyk7CisgICAgaWYgKCFzbWFydERhdGEtPm1haW5fZnJhbWUpIHsKICAg
ICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIG1haW4gZnJhbWUgb2JqZWN0LiIpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCFld2tfZnJhbWVfaW5pdChzZC0+bWFpbl9mcmFt
ZSwgZXdrVmlldywgcHJpdi0+bWFpbl9mcmFtZSkpIHsKKyAgICBpZiAoIWV3a19mcmFtZV9pbml0
KHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSwgZXdrVmlldywgcHJpdi0+bWFpbkZyYW1lKSkgewogICAg
ICAgICBFUlIoIkNvdWxkIG5vdCBpbml0aWFsaXplIG1haW4gZnJtZSBvYmplY3QuIik7Ci0gICAg
ICAgIGV2YXNfb2JqZWN0X2RlbChzZC0+bWFpbl9mcmFtZSk7Ci0gICAgICAgIHNkLT5tYWluX2Zy
YW1lID0gMDsKKyAgICAgICAgZXZhc19vYmplY3RfZGVsKHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSk7
CisgICAgICAgIHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSA9IDA7CiAKLSAgICAgICAgZGVsZXRlIHBy
aXYtPm1haW5fZnJhbWU7Ci0gICAgICAgIHByaXYtPm1haW5fZnJhbWUgPSAwOworICAgICAgICBk
ZWxldGUgcHJpdi0+bWFpbkZyYW1lOworICAgICAgICBwcml2LT5tYWluRnJhbWUgPSAwOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZXZhc19vYmplY3RfbmFtZV9zZXQoc2QtPm1haW5f
ZnJhbWUsICJFV0tfRnJhbWU6bWFpbiIpOwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X21lbWJlcl9h
ZGQoc2QtPm1haW5fZnJhbWUsIGV3a1ZpZXcpOwotICAgIGV2YXNfb2JqZWN0X3Nob3coc2QtPm1h
aW5fZnJhbWUpOworICAgIGV2YXNfb2JqZWN0X25hbWVfc2V0KHNtYXJ0RGF0YS0+bWFpbl9mcmFt
ZSwgIkVXS19GcmFtZTptYWluIik7CisgICAgZXZhc19vYmplY3Rfc21hcnRfbWVtYmVyX2FkZChz
bWFydERhdGEtPm1haW5fZnJhbWUsIGV3a1ZpZXcpOworICAgIGV2YXNfb2JqZWN0X3Nob3coc21h
cnREYXRhLT5tYWluX2ZyYW1lKTsKIAotI2RlZmluZSBDT05ORUNUKHMsIGMpIGV2YXNfb2JqZWN0
X2V2ZW50X2NhbGxiYWNrX2FkZChld2tWaWV3LCBzLCBjLCBzZCkKKyNkZWZpbmUgQ09OTkVDVChz
LCBjKSBldmFzX29iamVjdF9ldmVudF9jYWxsYmFja19hZGQoZXdrVmlldywgcywgYywgc21hcnRE
YXRhKQogICAgIENPTk5FQ1QoRVZBU19DQUxMQkFDS19GT0NVU19JTiwgX2V3a192aWV3X29uX2Zv
Y3VzX2luKTsKICAgICBDT05ORUNUKEVWQVNfQ0FMTEJBQ0tfRk9DVVNfT1VULCBfZXdrX3ZpZXdf
b25fZm9jdXNfb3V0KTsKICAgICBDT05ORUNUKEVWQVNfQ0FMTEJBQ0tfTU9VU0VfV0hFRUwsIF9l
d2tfdmlld19vbl9tb3VzZV93aGVlbCk7CkBAIC04MDMsOCArODAzLDggQEAgc3RhdGljIHZvaWQg
X2V3a192aWV3X3NtYXJ0X2FkZChFdmFzX09iamVjdCogZXdrVmlldykKIAogc3RhdGljIHZvaWQg
X2V3a192aWV3X3NtYXJ0X2RlbChFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklF
V19TRF9HRVQoZXdrVmlldywgc2QpOwotICAgIEV3a19WaWV3X1ByaXZhdGVfRGF0YSogcHJpdiA9
IHNkID8gc2QtPl9wcml2IDogMDsKKyAgICBFV0tfVklFV19TRF9HRVQoZXdrVmlldywgc21hcnRE
YXRhKTsKKyAgICBFd2tfVmlld19Qcml2YXRlX0RhdGEqIHByaXYgPSBzbWFydERhdGEgPyBzbWFy
dERhdGEtPl9wcml2IDogMDsKIAogICAgIGV3a192aWV3X3N0b3AoZXdrVmlldyk7CiAgICAgX3Bh
cmVudF9zYy5kZWwoZXdrVmlldyk7CkBAIC04MTMsMTAzICs4MTMsMTAzIEBAIHN0YXRpYyB2b2lk
IF9ld2tfdmlld19zbWFydF9kZWwoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiAKIHN0YXRpYyB2b2lk
IF9ld2tfdmlld19zbWFydF9yZXNpemUoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV2YXNfQ29vcmQg
dywgRXZhc19Db29yZCBoKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmll
dywgc2QpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRh
KTsKIAogICAgIC8vIHRoZXNlIHNob3VsZCBiZSBxdWV1ZWQgYW5kIHByb2Nlc3NlZCBpbiBjYWxj
dWxhdGUgYXMgd2VsbCEKLSAgICBldmFzX29iamVjdF9yZXNpemUoc2QtPmJhY2tpbmdfc3RvcmUs
IHcsIGgpOworICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUs
IHcsIGgpOwogCi0gICAgc2QtPmNoYW5nZWQuc2l6ZSA9IEVJTkFfVFJVRTsKLSAgICBfZXdrX3Zp
ZXdfc21hcnRfY2hhbmdlZChzZCk7CisgICAgc21hcnREYXRhLT5jaGFuZ2VkLnNpemUgPSBFSU5B
X1RSVUU7CisgICAgX2V3a192aWV3X3NtYXJ0X2NoYW5nZWQoc21hcnREYXRhKTsKIH0KIAogc3Rh
dGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X21vdmUoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV2YXNf
Q29vcmQgeCwgRXZhc19Db29yZCB5KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrVmlldywgc2QpOwotICAgIHNkLT5jaGFuZ2VkLnBvc2l0aW9uID0gRUlOQV9UUlVFOwotICAg
IF9ld2tfdmlld19zbWFydF9jaGFuZ2VkKHNkKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVU
VVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSk7CisgICAgc21hcnREYXRhLT5jaGFuZ2VkLnBvc2l0aW9u
ID0gRUlOQV9UUlVFOworICAgIF9ld2tfdmlld19zbWFydF9jaGFuZ2VkKHNtYXJ0RGF0YSk7CiB9
CiAKIHN0YXRpYyB2b2lkIF9ld2tfdmlld19zbWFydF9jYWxjdWxhdGUoRXZhc19PYmplY3QqIGV3
a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUKGV3a1ZpZXcsIHNkKTsKLSAgICBFV0tfVklF
V19QUklWX0dFVChzZCwgcHJpdik7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2Qt
PmFwaS0+Y29udGVudHNfcmVzaXplKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihz
ZC0+YXBpLT5zY3JvbGxzX3Byb2Nlc3MpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJO
KHNkLT5hcGktPnJlcGFpbnRzX3Byb2Nlc3MpOwotICAgIEV2YXNfQ29vcmQgeCwgeSwgdywgaDsK
KyAgICBFV0tfVklFV19TRF9HRVQoZXdrVmlldywgc21hcnREYXRhKTsKKyAgICBFV0tfVklFV19Q
UklWX0dFVChzbWFydERhdGEsIHByaXYpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJO
KHNtYXJ0RGF0YS0+YXBpLT5jb250ZW50c19yZXNpemUpOworICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOKHNtYXJ0RGF0YS0+YXBpLT5zY3JvbGxzX3Byb2Nlc3MpOworICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+YXBpLT5yZXBhaW50c19wcm9jZXNzKTsKKyAg
ICBFdmFzX0Nvb3JkIHgsIHksIHdpZHRoLCBoZWlnaHQ7CiAKLSAgICBzZC0+Y2hhbmdlZC5hbnkg
PSBFSU5BX0ZBTFNFOworICAgIHNtYXJ0RGF0YS0+Y2hhbmdlZC5hbnkgPSBFSU5BX0ZBTFNFOwog
Ci0gICAgaWYgKCFzZC0+bWFpbl9mcmFtZSB8fCAhcHJpdi0+bWFpbl9mcmFtZSkKKyAgICBpZiAo
IXNtYXJ0RGF0YS0+bWFpbl9mcmFtZSB8fCAhcHJpdi0+bWFpbkZyYW1lKQogICAgICAgICByZXR1
cm47CiAKLSAgICBldmFzX29iamVjdF9nZW9tZXRyeV9nZXQoZXdrVmlldywgJngsICZ5LCAmdywg
JmgpOworICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldChld2tWaWV3LCAmeCwgJnksICZ3aWR0
aCwgJmhlaWdodCk7CiAKICAgICBEQkcoImV3a1ZpZXc9JXAgZ2VvPVslZCwgJWQgKyAlZHglZF0s
IGNoYW5nZWQ6IHNpemU9JWhodSwgIgogICAgICAgICAic2Nyb2xscz0lenUsIHJlcGFpbnRzPSV6
dSIsCi0gICAgICAgIGV3a1ZpZXcsIHgsIHksIHcsIGgsIHNkLT5jaGFuZ2VkLnNpemUsCisgICAg
ICAgIGV3a1ZpZXcsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHNtYXJ0RGF0YS0+Y2hhbmdlZC5zaXpl
LAogICAgICAgICBwcml2LT5zY3JvbGxzLmNvdW50LCBwcml2LT5yZXBhaW50cy5jb3VudCk7CiAK
LSAgICBpZiAoc2QtPmNoYW5nZWQuc2l6ZSAmJiAoKHcgIT0gc2QtPnZpZXcudykgfHwgKGggIT0g
c2QtPnZpZXcuaCkpKSB7Ci0gICAgICAgIFdlYkNvcmU6OkZyYW1lVmlldyogdmlldyA9IHByaXYt
Pm1haW5fZnJhbWUtPnZpZXcoKTsKKyAgICBpZiAoc21hcnREYXRhLT5jaGFuZ2VkLnNpemUgJiYg
KCh3aWR0aCAhPSBzbWFydERhdGEtPnZpZXcudykgfHwgKGhlaWdodCAhPSBzbWFydERhdGEtPnZp
ZXcuaCkpKSB7CisgICAgICAgIFdlYkNvcmU6OkZyYW1lVmlldyogdmlldyA9IHByaXYtPm1haW5G
cmFtZS0+dmlldygpOwogICAgICAgICBpZiAodmlldykgewotICAgICAgICAgICAgdmlldy0+cmVz
aXplKHcsIGgpOworICAgICAgICAgICAgdmlldy0+cmVzaXplKHdpZHRoLCBoZWlnaHQpOwogICAg
ICAgICAgICAgdmlldy0+Zm9yY2VMYXlvdXQoKTsKICAgICAgICAgICAgIHZpZXctPmFkanVzdFZp
ZXdTaXplKCk7CiAgICAgICAgIH0KLSAgICAgICAgZXZhc19vYmplY3RfcmVzaXplKHNkLT5tYWlu
X2ZyYW1lLCB3LCBoKTsKLSAgICAgICAgZXZhc19vYmplY3RfcmVzaXplKHNkLT5ldmVudHNfcmVj
dCwgdywgaCk7Ci0gICAgICAgIHNkLT5jaGFuZ2VkLmZyYW1lX3JlY3QgPSBFSU5BX1RSVUU7Ci0g
ICAgICAgIHNkLT52aWV3LncgPSB3OwotICAgICAgICBzZC0+dmlldy5oID0gaDsKKyAgICAgICAg
ZXZhc19vYmplY3RfcmVzaXplKHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSwgd2lkdGgsIGhlaWdodCk7
CisgICAgICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShzbWFydERhdGEtPmV2ZW50c19yZWN0LCB3aWR0
aCwgaGVpZ2h0KTsKKyAgICAgICAgc21hcnREYXRhLT5jaGFuZ2VkLmZyYW1lX3JlY3QgPSBFSU5B
X1RSVUU7CisgICAgICAgIHNtYXJ0RGF0YS0+dmlldy53ID0gd2lkdGg7CisgICAgICAgIHNtYXJ0
RGF0YS0+dmlldy5oID0gaGVpZ2h0OwogCi0gICAgICAgIF9ld2tfdmlld19yZXBhaW50X2FkZChw
cml2LCAwLCAwLCB3LCBoKTsKKyAgICAgICAgX2V3a192aWV3X3JlcGFpbnRfYWRkKHByaXYsIDAs
IDAsIHdpZHRoLCBoZWlnaHQpOwogCiAgICAgICAgIC8vIFRoaXMgY2FsbGJhY2sgaXMgYSBnb29k
IHBsYWNlIGUuZy4gdG8gY2hhbmdlIGZpeGVkIGxheW91dCBzaXplIChld2tfdmlld19maXhlZF9s
YXlvdXRfc2l6ZV9zZXQpLgogICAgICAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxs
KGV3a1ZpZXcsICJ2aWV3LHJlc2l6ZWQiLCAwKTsKICAgICB9Ci0gICAgc2QtPmNoYW5nZWQuc2l6
ZSA9IEVJTkFfRkFMU0U7CisgICAgc21hcnREYXRhLT5jaGFuZ2VkLnNpemUgPSBFSU5BX0ZBTFNF
OwogCi0gICAgaWYgKHNkLT5jaGFuZ2VkLnBvc2l0aW9uICYmICgoeCAhPSBzZC0+dmlldy54KSB8
fCAoeSAhPSBzZC0+dmlldy55KSkpIHsKLSAgICAgICAgZXZhc19vYmplY3RfbW92ZShzZC0+bWFp
bl9mcmFtZSwgeCwgeSk7Ci0gICAgICAgIGV2YXNfb2JqZWN0X21vdmUoc2QtPmJhY2tpbmdfc3Rv
cmUsIHgsIHkpOwotICAgICAgICBldmFzX29iamVjdF9tb3ZlKHNkLT5ldmVudHNfcmVjdCwgeCwg
eSk7Ci0gICAgICAgIHNkLT5jaGFuZ2VkLmZyYW1lX3JlY3QgPSBFSU5BX1RSVUU7Ci0gICAgICAg
IHNkLT52aWV3LnggPSB4OwotICAgICAgICBzZC0+dmlldy55ID0geTsKKyAgICBpZiAoc21hcnRE
YXRhLT5jaGFuZ2VkLnBvc2l0aW9uICYmICgoeCAhPSBzbWFydERhdGEtPnZpZXcueCkgfHwgKHkg
IT0gc21hcnREYXRhLT52aWV3LnkpKSkgeworICAgICAgICBldmFzX29iamVjdF9tb3ZlKHNtYXJ0
RGF0YS0+bWFpbl9mcmFtZSwgeCwgeSk7CisgICAgICAgIGV2YXNfb2JqZWN0X21vdmUoc21hcnRE
YXRhLT5iYWNraW5nX3N0b3JlLCB4LCB5KTsKKyAgICAgICAgZXZhc19vYmplY3RfbW92ZShzbWFy
dERhdGEtPmV2ZW50c19yZWN0LCB4LCB5KTsKKyAgICAgICAgc21hcnREYXRhLT5jaGFuZ2VkLmZy
YW1lX3JlY3QgPSBFSU5BX1RSVUU7CisgICAgICAgIHNtYXJ0RGF0YS0+dmlldy54ID0geDsKKyAg
ICAgICAgc21hcnREYXRhLT52aWV3LnkgPSB5OwogICAgIH0KLSAgICBzZC0+Y2hhbmdlZC5wb3Np
dGlvbiA9IEVJTkFfRkFMU0U7CisgICAgc21hcnREYXRhLT5jaGFuZ2VkLnBvc2l0aW9uID0gRUlO
QV9GQUxTRTsKIAotICAgIGlmICghc2QtPmFwaS0+c2Nyb2xsc19wcm9jZXNzKHNkKSkKKyAgICBp
ZiAoIXNtYXJ0RGF0YS0+YXBpLT5zY3JvbGxzX3Byb2Nlc3Moc21hcnREYXRhKSkKICAgICAgICAg
RVJSKCJmYWlsZWQgdG8gcHJvY2VzcyBzY3JvbGxzLiIpOwogICAgIF9ld2tfdmlld19zY3JvbGxz
X2ZsdXNoKHByaXYpOwogCi0gICAgaWYgKCFzZC0+YXBpLT5yZXBhaW50c19wcm9jZXNzKHNkKSkK
KyAgICBpZiAoIXNtYXJ0RGF0YS0+YXBpLT5yZXBhaW50c19wcm9jZXNzKHNtYXJ0RGF0YSkpCiAg
ICAgICAgIEVSUigiZmFpbGVkIHRvIHByb2Nlc3MgcmVwYWludHMuIik7CiAgICAgX2V3a192aWV3
X3JlcGFpbnRzX2ZsdXNoKHByaXYpOwogCi0gICAgaWYgKHNkLT5jaGFuZ2VkLmZyYW1lX3JlY3Qp
IHsKLSAgICAgICAgV2ViQ29yZTo6RnJhbWVWaWV3KiB2aWV3ID0gcHJpdi0+bWFpbl9mcmFtZS0+
dmlldygpOworICAgIGlmIChzbWFydERhdGEtPmNoYW5nZWQuZnJhbWVfcmVjdCkgeworICAgICAg
ICBXZWJDb3JlOjpGcmFtZVZpZXcqIHZpZXcgPSBwcml2LT5tYWluRnJhbWUtPnZpZXcoKTsKICAg
ICAgICAgdmlldy0+ZnJhbWVSZWN0c0NoYW5nZWQoKTsgLyogZm9yY2UgdHJlZSB0byBnZXQgcG9z
aXRpb24gZnJvbSByb290ICovCi0gICAgICAgIHNkLT5jaGFuZ2VkLmZyYW1lX3JlY3QgPSBFSU5B
X0ZBTFNFOworICAgICAgICBzbWFydERhdGEtPmNoYW5nZWQuZnJhbWVfcmVjdCA9IEVJTkFfRkFM
U0U7CiAgICAgfQogfQogCiBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21hcnRfc2hvdyhFdmFzX09i
amVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcs
IHNkKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSk7
CiAKLSAgICBpZiAoZXZhc19vYmplY3RfY2xpcGVlc19nZXQoc2QtPmJhc2UuY2xpcHBlcikpCi0g
ICAgICAgIGV2YXNfb2JqZWN0X3Nob3coc2QtPmJhc2UuY2xpcHBlcik7Ci0gICAgZXZhc19vYmpl
Y3Rfc2hvdyhzZC0+YmFja2luZ19zdG9yZSk7CisgICAgaWYgKGV2YXNfb2JqZWN0X2NsaXBlZXNf
Z2V0KHNtYXJ0RGF0YS0+YmFzZS5jbGlwcGVyKSkKKyAgICAgICAgZXZhc19vYmplY3Rfc2hvdyhz
bWFydERhdGEtPmJhc2UuY2xpcHBlcik7CisgICAgZXZhc19vYmplY3Rfc2hvdyhzbWFydERhdGEt
PmJhY2tpbmdfc3RvcmUpOwogfQogCiBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21hcnRfaGlkZShF
dmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3
a1ZpZXcsIHNkKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0
RGF0YSk7CiAKLSAgICBldmFzX29iamVjdF9oaWRlKHNkLT5iYXNlLmNsaXBwZXIpOwotICAgIGV2
YXNfb2JqZWN0X2hpZGUoc2QtPmJhY2tpbmdfc3RvcmUpOworICAgIGV2YXNfb2JqZWN0X2hpZGUo
c21hcnREYXRhLT5iYXNlLmNsaXBwZXIpOworICAgIGV2YXNfb2JqZWN0X2hpZGUoc21hcnREYXRh
LT5iYWNraW5nX3N0b3JlKTsKIH0KIAogc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfc21hcnRf
Y29udGVudHNfcmVzaXplKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSwgaW50IHdpZHRo
LCBpbnQgaGVpZ2h0KQpAQCAtOTIwLDI5ICs5MjAsMjkgQEAgc3RhdGljIEVpbmFfQm9vbCBfZXdr
X3ZpZXdfc21hcnRfY29udGVudHNfcmVzaXplKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0
YSwKIHN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3NtYXJ0X3pvb21fc2V0KEV3a19WaWV3X1Nt
YXJ0X0RhdGEqIHNtYXJ0RGF0YSwgZmxvYXQgem9vbSwgRXZhc19Db29yZCBjZW50ZXJYLCBFdmFz
X0Nvb3JkIGNlbnRlclkpCiB7CiAgICAgZG91YmxlIHB4LCBweTsKLSAgICBFdmFzX0Nvb3JkIHgs
IHksIHcsIGg7Ci0gICAgRWluYV9Cb29sIHJldDsKKyAgICBFdmFzX0Nvb3JkIHgsIHksIHdpZHRo
LCBoZWlnaHQ7CisgICAgRWluYV9Cb29sIHJlc3VsdDsKIAotICAgIGV3a19mcmFtZV9zY3JvbGxf
c2l6ZV9nZXQoc21hcnREYXRhLT5tYWluX2ZyYW1lLCAmdywgJmgpOworICAgIGV3a19mcmFtZV9z
Y3JvbGxfc2l6ZV9nZXQoc21hcnREYXRhLT5tYWluX2ZyYW1lLCAmd2lkdGgsICZoZWlnaHQpOwog
ICAgIGV3a19mcmFtZV9zY3JvbGxfcG9zX2dldChzbWFydERhdGEtPm1haW5fZnJhbWUsICZ4LCAm
eSk7CiAKLSAgICBpZiAodyArIHNtYXJ0RGF0YS0+dmlldy53ID4gMCkKLSAgICAgICAgcHggPSBz
dGF0aWNfY2FzdDxkb3VibGU+KHggKyBjZW50ZXJYKSAvICh3ICsgc21hcnREYXRhLT52aWV3Lncp
OworICAgIGlmICh3aWR0aCArIHNtYXJ0RGF0YS0+dmlldy53ID4gMCkKKyAgICAgICAgcHggPSBz
dGF0aWNfY2FzdDxkb3VibGU+KHggKyBjZW50ZXJYKSAvICh3aWR0aCArIHNtYXJ0RGF0YS0+dmll
dy53KTsKICAgICBlbHNlCiAgICAgICAgIHB4ID0gMC4wOwogCi0gICAgaWYgKGggKyBzbWFydERh
dGEtPnZpZXcuaCA+IDApCi0gICAgICAgIHB5ID0gc3RhdGljX2Nhc3Q8ZG91YmxlPih5ICsgY2Vu
dGVyWSkgLyAoaCArIHNtYXJ0RGF0YS0+dmlldy5oKTsKKyAgICBpZiAoaGVpZ2h0ICsgc21hcnRE
YXRhLT52aWV3LmggPiAwKQorICAgICAgICBweSA9IHN0YXRpY19jYXN0PGRvdWJsZT4oeSArIGNl
bnRlclkpIC8gKGhlaWdodCArIHNtYXJ0RGF0YS0+dmlldy5oKTsKICAgICBlbHNlCiAgICAgICAg
IHB5ID0gMC4wOwogCi0gICAgcmV0ID0gZXdrX2ZyYW1lX3BhZ2Vfem9vbV9zZXQoc21hcnREYXRh
LT5tYWluX2ZyYW1lLCB6b29tKTsKKyAgICByZXN1bHQgPSBld2tfZnJhbWVfcGFnZV96b29tX3Nl
dChzbWFydERhdGEtPm1haW5fZnJhbWUsIHpvb20pOwogCi0gICAgZXdrX2ZyYW1lX3Njcm9sbF9z
aXplX2dldChzbWFydERhdGEtPm1haW5fZnJhbWUsICZ3LCAmaCk7Ci0gICAgeCA9ICh3ICsgc21h
cnREYXRhLT52aWV3LncpICogcHggLSBjZW50ZXJYOwotICAgIHkgPSAoaCArIHNtYXJ0RGF0YS0+
dmlldy5oKSAqIHB5IC0gY2VudGVyWTsKKyAgICBld2tfZnJhbWVfc2Nyb2xsX3NpemVfZ2V0KHNt
YXJ0RGF0YS0+bWFpbl9mcmFtZSwgJndpZHRoLCAmaGVpZ2h0KTsKKyAgICB4ID0gKHdpZHRoICsg
c21hcnREYXRhLT52aWV3LncpICogcHggLSBjZW50ZXJYOworICAgIHkgPSAoaGVpZ2h0ICsgc21h
cnREYXRhLT52aWV3LmgpICogcHkgLSBjZW50ZXJZOwogICAgIGV3a19mcmFtZV9zY3JvbGxfc2V0
KHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSwgeCwgeSk7Ci0gICAgcmV0dXJuIHJldDsKKyAgICByZXR1
cm4gcmVzdWx0OwogfQogCiBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21hcnRfZmx1c2goRXdrX1Zp
ZXdfU21hcnRfRGF0YSogc21hcnREYXRhKQpAQCAtOTgxLDggKzk4MSw4IEBAIHN0YXRpYyB2b2lk
IF9ld2tfdmlld196b29tX2FuaW1hdGVkX21hcmtfc3RvcChFd2tfVmlld19TbWFydF9EYXRhKiBz
bWFydERhdGEpCiBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9maW5pc2goRXdr
X1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhKQogewogICAgIEVXS19WSUVXX1BSSVZfR0VUKHNt
YXJ0RGF0YSwgcHJpdik7Ci0gICAgZWNvcmVfYW5pbWF0b3JfZGVsKHByaXYtPmFuaW1hdGVkX3pv
b20uYW5pbWF0b3IpOwotICAgIHByaXYtPmFuaW1hdGVkX3pvb20uYW5pbWF0b3IgPSAwOworICAg
IGVjb3JlX2FuaW1hdG9yX2RlbChwcml2LT5hbmltYXRlZFpvb20uYW5pbWF0b3IpOworICAgIHBy
aXYtPmFuaW1hdGVkWm9vbS5hbmltYXRvciA9IDA7CiAgICAgX2V3a192aWV3X3pvb21fYW5pbWF0
ZWRfbWFya19zdG9wKHNtYXJ0RGF0YSk7CiAgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tf
Y2FsbChzbWFydERhdGEtPnNlbGYsICJ6b29tLGFuaW1hdGVkLGVuZCIsIDApOwogfQpAQCAtOTkw
LDY5ICs5OTAsNjkgQEAgc3RhdGljIHZvaWQgX2V3a192aWV3X3pvb21fYW5pbWF0ZWRfZmluaXNo
KEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSkKIHN0YXRpYyBmbG9hdCBfZXdrX3ZpZXdf
em9vbV9hbmltYXRlZF9jdXJyZW50KEV3a19WaWV3X1ByaXZhdGVfRGF0YSogcHJpdikKIHsKICAg
ICBkb3VibGUgbm93ID0gZWNvcmVfbG9vcF90aW1lX2dldCgpOwotICAgIGRvdWJsZSBkZWx0YSA9
IG5vdyAtIHByaXYtPmFuaW1hdGVkX3pvb20udGltZS5zdGFydDsKKyAgICBkb3VibGUgZGVsdGEg
PSBub3cgLSBwcml2LT5hbmltYXRlZFpvb20udGltZS5zdGFydDsKIAotICAgIGlmIChkZWx0YSA+
IHByaXYtPmFuaW1hdGVkX3pvb20udGltZS5kdXJhdGlvbikKLSAgICAgICAgZGVsdGEgPSBwcml2
LT5hbmltYXRlZF96b29tLnRpbWUuZHVyYXRpb247CisgICAgaWYgKGRlbHRhID4gcHJpdi0+YW5p
bWF0ZWRab29tLnRpbWUuZHVyYXRpb24pCisgICAgICAgIGRlbHRhID0gcHJpdi0+YW5pbWF0ZWRa
b29tLnRpbWUuZHVyYXRpb247CiAgICAgaWYgKGRlbHRhIDwgMC4wKSAvLyB0aW1lIHdlbnQgYmFj
aywgY2xvY2sgYWRqdXN0ZWQ/CiAgICAgICAgIGRlbHRhID0gMC4wOwogCi0gICAgZGVsdGEgLz0g
cHJpdi0+YW5pbWF0ZWRfem9vbS50aW1lLmR1cmF0aW9uOworICAgIGRlbHRhIC89IHByaXYtPmFu
aW1hdGVkWm9vbS50aW1lLmR1cmF0aW9uOwogCi0gICAgcmV0dXJuICgocHJpdi0+YW5pbWF0ZWRf
em9vbS56b29tLnJhbmdlICogZGVsdGEpCi0gICAgICAgICAgICArIHByaXYtPmFuaW1hdGVkX3pv
b20uem9vbS5zdGFydCk7CisgICAgcmV0dXJuICgocHJpdi0+YW5pbWF0ZWRab29tLnpvb20ucmFu
Z2UgKiBkZWx0YSkKKyAgICAgICAgICAgICsgcHJpdi0+YW5pbWF0ZWRab29tLnpvb20uc3RhcnQp
OwogfQogCiBzdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld196b29tX2FuaW1hdG9yX2NiKHZvaWQq
IGRhdGEpCiB7Ci0gICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QgPSBzdGF0aWNfY2FzdDxFd2tf
Vmlld19TbWFydF9EYXRhKj4oZGF0YSk7Ci0gICAgRXZhc19Db29yZCBjeCwgY3k7Ci0gICAgRVdL
X1ZJRVdfUFJJVl9HRVQoc2QsIHByaXYpOworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0
RGF0YSA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihkYXRhKTsKKyAgICBFdmFz
X0Nvb3JkIGNlbnRlclgsIGNlbnRlclk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVQoc21hcnREYXRh
LCBwcml2KTsKICAgICBkb3VibGUgbm93ID0gZWNvcmVfbG9vcF90aW1lX2dldCgpOwogCi0gICAg
Y3ggPSBwcml2LT5hbmltYXRlZF96b29tLmNlbnRlci54OwotICAgIGN5ID0gcHJpdi0+YW5pbWF0
ZWRfem9vbS5jZW50ZXIueTsKKyAgICBjZW50ZXJYID0gcHJpdi0+YW5pbWF0ZWRab29tLmNlbnRl
ci54OworICAgIGNlbnRlclkgPSBwcml2LT5hbmltYXRlZFpvb20uY2VudGVyLnk7CiAKICAgICAv
LyBUT0RPOiBwcm9ncmVzc2l2ZWx5IGNlbnRlciAoY3gsIGN5KSAtPiAodmlldy54ICsgdmlldy5o
LzIsIHZpZXcueSArIHZpZXcuaC8yKQotICAgIGlmIChjeCA+PSBzZC0+dmlldy53KQotICAgICAg
ICBjeCA9IHNkLT52aWV3LncgLSAxOwotICAgIGlmIChjeSA+PSBzZC0+dmlldy5oKQotICAgICAg
ICBjeSA9IHNkLT52aWV3LmggLSAxOwotCi0gICAgaWYgKChub3cgPj0gcHJpdi0+YW5pbWF0ZWRf
em9vbS50aW1lLmVuZCkKLSAgICAgICAgfHwgKG5vdyA8IHByaXYtPmFuaW1hdGVkX3pvb20udGlt
ZS5zdGFydCkpIHsKLSAgICAgICAgX2V3a192aWV3X3pvb21fYW5pbWF0ZWRfZmluaXNoKHNkKTsK
LSAgICAgICAgZXdrX3ZpZXdfem9vbV9zZXQoc2QtPnNlbGYsIHByaXYtPmFuaW1hdGVkX3pvb20u
em9vbS5lbmQsIGN4LCBjeSk7Ci0gICAgICAgIHNkLT5hcGktPnNjLmNhbGN1bGF0ZShzZC0+c2Vs
Zik7CisgICAgaWYgKGNlbnRlclggPj0gc21hcnREYXRhLT52aWV3LncpCisgICAgICAgIGNlbnRl
clggPSBzbWFydERhdGEtPnZpZXcudyAtIDE7CisgICAgaWYgKGNlbnRlclkgPj0gc21hcnREYXRh
LT52aWV3LmgpCisgICAgICAgIGNlbnRlclkgPSBzbWFydERhdGEtPnZpZXcuaCAtIDE7CisKKyAg
ICBpZiAoKG5vdyA+PSBwcml2LT5hbmltYXRlZFpvb20udGltZS5lbmQpCisgICAgICAgIHx8IChu
b3cgPCBwcml2LT5hbmltYXRlZFpvb20udGltZS5zdGFydCkpIHsKKyAgICAgICAgX2V3a192aWV3
X3pvb21fYW5pbWF0ZWRfZmluaXNoKHNtYXJ0RGF0YSk7CisgICAgICAgIGV3a192aWV3X3pvb21f
c2V0KHNtYXJ0RGF0YS0+c2VsZiwgcHJpdi0+YW5pbWF0ZWRab29tLnpvb20uZW5kLCBjZW50ZXJY
LCBjZW50ZXJZKTsKKyAgICAgICAgc21hcnREYXRhLT5hcGktPnNjLmNhbGN1bGF0ZShzbWFydERh
dGEtPnNlbGYpOwogICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKICAgICB9CiAKLSAgICBzZC0+
YW5pbWF0ZWRfem9vbS56b29tLmN1cnJlbnQgPSBfZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9jdXJy
ZW50KHByaXYpOwotICAgIHNkLT5hcGktPnpvb21fd2Vha19zZXQoc2QsIHNkLT5hbmltYXRlZF96
b29tLnpvb20uY3VycmVudCwgY3gsIGN5KTsKKyAgICBzbWFydERhdGEtPmFuaW1hdGVkX3pvb20u
em9vbS5jdXJyZW50ID0gX2V3a192aWV3X3pvb21fYW5pbWF0ZWRfY3VycmVudChwcml2KTsKKyAg
ICBzbWFydERhdGEtPmFwaS0+em9vbV93ZWFrX3NldChzbWFydERhdGEsIHNtYXJ0RGF0YS0+YW5p
bWF0ZWRfem9vbS56b29tLmN1cnJlbnQsIGNlbnRlclgsIGNlbnRlclkpOwogICAgIHJldHVybiBF
SU5BX1RSVUU7CiB9CiAKIHN0YXRpYyB2b2lkIF9ld2tfdmlld196b29tX2FuaW1hdGlvbl9zdGFy
dChFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEpCiB7CiAgICAgRVdLX1ZJRVdfUFJJVl9H
RVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdik7Ci0gICAgaWYgKHByaXYtPmFuaW1hdGVkX3pv
b20uYW5pbWF0b3IpCisgICAgaWYgKHByaXYtPmFuaW1hdGVkWm9vbS5hbmltYXRvcikKICAgICAg
ICAgcmV0dXJuOwotICAgIHByaXYtPmFuaW1hdGVkX3pvb20uYW5pbWF0b3IgPSBlY29yZV9hbmlt
YXRvcl9hZGQKKyAgICBwcml2LT5hbmltYXRlZFpvb20uYW5pbWF0b3IgPSBlY29yZV9hbmltYXRv
cl9hZGQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfZXdrX3ZpZXdf
em9vbV9hbmltYXRvcl9jYiwgc21hcnREYXRhKTsKIH0KIAogc3RhdGljIFdlYkNvcmU6OlZpZXdw
b3J0QXR0cmlidXRlcyBfZXdrX3ZpZXdfdmlld3BvcnRfYXR0cmlidXRlc19jb21wdXRlKGNvbnN0
IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVChld2tWaWV3LCBz
ZCk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVQoc2QsIHByaXYpOworICAgIEVXS19WSUVXX1NEX0dF
VChld2tWaWV3LCBzbWFydERhdGEpOworICAgIEVXS19WSUVXX1BSSVZfR0VUKHNtYXJ0RGF0YSwg
cHJpdik7CiAKLSAgICBpbnQgZGVza3RvcF93aWR0aCA9IDk4MDsKLSAgICBpbnQgZGV2aWNlX2Rw
aSA9IGV3a191dGlsX2RwaV9nZXQoKTsKKyAgICBpbnQgZGVza3RvcFdpZHRoID0gOTgwOworICAg
IGludCBkZXZpY2VEUEkgPSBld2tfdXRpbF9kcGlfZ2V0KCk7CiAKLSAgICBXZWJDb3JlOjpJbnRS
ZWN0IGF2YWlsYWJsZV9yZWN0ID0gZW5jbG9zaW5nSW50UmVjdChwcml2LT5wYWdlLT5jaHJvbWUo
KS0+Y2xpZW50KCktPnBhZ2VSZWN0KCkpOwotICAgIFdlYkNvcmU6OkludFJlY3QgZGV2aWNlX3Jl
Y3QgPSBlbmNsb3NpbmdJbnRSZWN0KHByaXYtPnBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+d2lu
ZG93UmVjdCgpKTsKKyAgICBXZWJDb3JlOjpJbnRSZWN0IGF2YWlsYWJsZVJlY3QgPSBlbmNsb3Np
bmdJbnRSZWN0KHByaXYtPnBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+cGFnZVJlY3QoKSk7Cisg
ICAgV2ViQ29yZTo6SW50UmVjdCBkZXZpY2VSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChwcml2LT5w
YWdlLT5jaHJvbWUoKS0+Y2xpZW50KCktPndpbmRvd1JlY3QoKSk7CiAKLSAgICBXZWJDb3JlOjpW
aWV3cG9ydEF0dHJpYnV0ZXMgYXR0cmlidXRlcyA9IFdlYkNvcmU6OmNvbXB1dGVWaWV3cG9ydEF0
dHJpYnV0ZXMocHJpdi0+dmlld3BvcnRfYXJndW1lbnRzLCBkZXNrdG9wX3dpZHRoLCBkZXZpY2Vf
cmVjdC53aWR0aCgpLCBkZXZpY2VfcmVjdC5oZWlnaHQoKSwgZGV2aWNlX2RwaSwgYXZhaWxhYmxl
X3JlY3Quc2l6ZSgpKTsKKyAgICBXZWJDb3JlOjpWaWV3cG9ydEF0dHJpYnV0ZXMgYXR0cmlidXRl
cyA9IFdlYkNvcmU6OmNvbXB1dGVWaWV3cG9ydEF0dHJpYnV0ZXMocHJpdi0+dmlld3BvcnRBcmd1
bWVudHMsIGRlc2t0b3BXaWR0aCwgZGV2aWNlUmVjdC53aWR0aCgpLCBkZXZpY2VSZWN0LmhlaWdo
dCgpLCBkZXZpY2VEUEksIGF2YWlsYWJsZVJlY3Quc2l6ZSgpKTsKIAogICAgIHJldHVybiBhdHRy
aWJ1dGVzOwogfQpAQCAtMTEyMiwxMCArMTEyMiwxMCBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfYmFz
ZV9zbWFydF9zZXQoRXdrX1ZpZXdfU21hcnRfQ2xhc3MqIGFwaSkKIAogdm9pZCBld2tfdmlld19m
aXhlZF9sYXlvdXRfc2l6ZV9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV2YXNfQ29vcmQgd2lk
dGgsIEV2YXNfQ29vcmQgaGVpZ2h0KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrVmlldywgc2QpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdik7
CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEpOworICAg
IEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYpOwogCi0gICAgV2Vi
Q29yZTo6RnJhbWVWaWV3KiB2aWV3ID0gcHJpdi0+bWFpbl9mcmFtZS0+dmlldygpOworICAgIFdl
YkNvcmU6OkZyYW1lVmlldyogdmlldyA9IHByaXYtPm1haW5GcmFtZS0+dmlldygpOwogICAgIGlm
ICh3aWR0aCA8PSAwICYmIGhlaWdodCA8PSAwKSB7CiAgICAgICAgIGlmICghdmlldy0+dXNlRml4
ZWRMYXlvdXQoKSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTExNTAsOSArMTE1MCw5IEBAIHZv
aWQgZXdrX3ZpZXdfZml4ZWRfbGF5b3V0X3NpemVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tW
aWV3LCBFdmFzX0Nvb3JkKiB3aWR0CiAgICAgICAgICp3aWR0aCA9IDA7CiAgICAgaWYgKGhlaWdo
dCkKICAgICAgICAgKmhlaWdodCA9IDA7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihl
d2tWaWV3LCBzZCk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2KTsK
LSAgICBXZWJDb3JlOjpGcmFtZVZpZXcqIHZpZXcgPSBwcml2LT5tYWluX2ZyYW1lLT52aWV3KCk7
CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEpOworICAg
IEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYpOworICAgIFdlYkNv
cmU6OkZyYW1lVmlldyogdmlldyA9IHByaXYtPm1haW5GcmFtZS0+dmlldygpOwogICAgIGlmICh2
aWV3LT51c2VGaXhlZExheW91dCgpKSB7CiAgICAgICAgIFdlYkNvcmU6OkludFNpemUgc2l6ZSA9
IHZpZXctPmZpeGVkTGF5b3V0U2l6ZSgpOwogICAgICAgICBpZiAod2lkdGgpCkBAIC0xMTY0LDEy
ICsxMTY0LDEyIEBAIHZvaWQgZXdrX3ZpZXdfZml4ZWRfbGF5b3V0X3NpemVfZ2V0KGNvbnN0IEV2
YXNfT2JqZWN0KiBld2tWaWV3LCBFdmFzX0Nvb3JkKiB3aWR0CiAKIHZvaWQgZXdrX3ZpZXdfdGhl
bWVfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBjaGFyKiBwYXRoKQogewotICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QpOwotICAgIEVXS19WSUVXX1BSSVZf
R0VUX09SX1JFVFVSTihzZCwgcHJpdik7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihl
d2tWaWV3LCBzbWFydERhdGEpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFy
dERhdGEsIHByaXYpOwogICAgIGlmICghZWluYV9zdHJpbmdzaGFyZV9yZXBsYWNlKCZwcml2LT5z
ZXR0aW5ncy50aGVtZSwgcGF0aCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFdlYkNvcmU6OkZy
YW1lVmlldyogdmlldyA9IHByaXYtPm1haW5fZnJhbWUtPnZpZXcoKTsKKyAgICBXZWJDb3JlOjpG
cmFtZVZpZXcqIHZpZXcgPSBwcml2LT5tYWluRnJhbWUtPnZpZXcoKTsKICAgICBpZiAodmlldykg
ewogICAgICAgICB2aWV3LT5zZXRFZGplVGhlbWUoV1RGOjpTdHJpbmcocGF0aCkpOwogICAgICAg
ICBwcml2LT5wYWdlLT50aGVtZSgpLT50aGVtZUNoYW5nZWQoKTsKQEAgLTExNzksMjEgKzExNzks
MjEgQEAgdm9pZCBld2tfdmlld190aGVtZV9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGNvbnN0
IGNoYXIqIHBhdGgpCiAKIGNvbnN0IGNoYXIqIGV3a192aWV3X3RoZW1lX2dldChjb25zdCBFdmFz
X09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1Zp
ZXcsIHNkLCAwKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIDAp
OworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCAwKTsK
KyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCAwKTsKICAg
ICByZXR1cm4gcHJpdi0+c2V0dGluZ3MudGhlbWU7CiB9CiAKIEV2YXNfT2JqZWN0KiBld2tfdmll
d19mcmFtZV9tYWluX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tf
VklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAwKTsKLSAgICByZXR1cm4gc2QtPm1h
aW5fZnJhbWU7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERh
dGEsIDApOworICAgIHJldHVybiBzbWFydERhdGEtPm1haW5fZnJhbWU7CiB9CiAKIEV2YXNfT2Jq
ZWN0KiBld2tfdmlld19mcmFtZV9mb2N1c2VkX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmll
dykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAwKTsKLSAg
ICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIDApOworICAgIEVXS19WSUVX
X1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCAwKTsKKyAgICBFV0tfVklFV19Q
UklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCAwKTsKIAogICAgIFdlYkNvcmU6OkZy
YW1lKiBjb3JlID0gcHJpdi0+cGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRGcmFtZSgp
OwogICAgIGlmICghY29yZSkKQEAgLTEyMDcsMzMgKzEyMDcsMzMgQEAgRXZhc19PYmplY3QqIGV3
a192aWV3X2ZyYW1lX2ZvY3VzZWRfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogCiBF
aW5hX0Jvb2wgZXdrX3ZpZXdfdXJpX3NldChFdmFzX09iamVjdCogZXdrVmlldywgY29uc3QgY2hh
ciogdXJpKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJ
TkFfRkFMU0UpOwotICAgIHJldHVybiBld2tfZnJhbWVfdXJpX3NldChzZC0+bWFpbl9mcmFtZSwg
dXJpKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwg
RUlOQV9GQUxTRSk7CisgICAgcmV0dXJuIGV3a19mcmFtZV91cmlfc2V0KHNtYXJ0RGF0YS0+bWFp
bl9mcmFtZSwgdXJpKTsKIH0KIAogY29uc3QgY2hhciogZXdrX3ZpZXdfdXJpX2dldChjb25zdCBF
dmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3
a1ZpZXcsIHNkLCAwKTsKLSAgICByZXR1cm4gZXdrX2ZyYW1lX3VyaV9nZXQoc2QtPm1haW5fZnJh
bWUpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCAw
KTsKKyAgICByZXR1cm4gZXdrX2ZyYW1lX3VyaV9nZXQoc21hcnREYXRhLT5tYWluX2ZyYW1lKTsK
IH0KIAogY29uc3QgY2hhciogZXdrX3ZpZXdfdGl0bGVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBl
d2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIDAp
OwotICAgIHJldHVybiBld2tfZnJhbWVfdGl0bGVfZ2V0KHNkLT5tYWluX2ZyYW1lKTsKKyAgICBF
V0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgMCk7CisgICAgcmV0
dXJuIGV3a19mcmFtZV90aXRsZV9nZXQoc21hcnREYXRhLT5tYWluX2ZyYW1lKTsKIH0KIAogRWlu
YV9Cb29sIGV3a192aWV3X2VkaXRhYmxlX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykK
IHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNF
KTsKLSAgICByZXR1cm4gZXdrX2ZyYW1lX2VkaXRhYmxlX2dldChzZC0+bWFpbl9mcmFtZSk7Cisg
ICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFM
U0UpOworICAgIHJldHVybiBld2tfZnJhbWVfZWRpdGFibGVfZ2V0KHNtYXJ0RGF0YS0+bWFpbl9m
cmFtZSk7CiB9CiAKIHZvaWQgZXdrX3ZpZXdfYmdfY29sb3Jfc2V0KEV2YXNfT2JqZWN0KiBld2tW
aWV3LCBpbnQgcmVkLCBpbnQgZ3JlZW4sIGludCBibHVlLCBpbnQgYWxwaGEpCiB7Ci0gICAgRVdL
X1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCk7Ci0gICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk4oc2QtPmFwaSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2Qt
PmFwaS0+YmdfY29sb3Jfc2V0KTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1Zp
ZXcsIHNtYXJ0RGF0YSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRh
LT5hcGkpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+YXBpLT5i
Z19jb2xvcl9zZXQpOwogCiAgICAgaWYgKGFscGhhIDwgMCkgewogICAgICAgICBXUk4oIkFscGhh
IGxlc3MgdGhhbiB6ZXJvICglZCkuIiwgYWxwaGEpOwpAQCAtMTI0MywyOCArMTI0MywyOCBAQCB2
b2lkIGV3a192aWV3X2JnX2NvbG9yX3NldChFdmFzX09iamVjdCogZXdrVmlldywgaW50IHJlZCwg
aW50IGdyZWVuLCBpbnQgYmx1ZSwgaQogICAgICAgICBhbHBoYSA9IDI1NTsKICAgICB9CiAKLSNk
ZWZpbmUgQ0hFQ0tfUFJFTVVMX0NPTE9SKGMsIGEpICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICBpZiAoYyA8IDApIHsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgV1JOKCJDb2xvciBjb21w
b25lbnQgIiAjYyAiIGlzIGxlc3MgdGhhbiB6ZXJvICglZCkuIiwgYyk7ICAgICAgICAgXAotICAg
ICAgICBjID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotICAgIH0gZWxzZSBpZiAoYyA+IGEpIHsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBXUk4oIkNvbG9yIGNvbXBv
bmVudCAiICNjICIgaXMgZ3JlYXRlciB0aGFuIGFscGhhICglZCwgYWxwaGE9JWQpLiIsIFwKLSAg
ICAgICAgICAgIGMsIGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICAgICAgYyA9IGE7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyNkZWZpbmUgQ0hFQ0tfUFJFTVVMX0NP
TE9SKGNvbG9yLCBhbHBoYSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgIGlmIChjb2xvciA8IDApIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgV1JOKCJDb2xvciBjb21wb25lbnQgIiAj
Y29sb3IgIiBpcyBsZXNzIHRoYW4gemVybyAoJWQpLiIsIGNvbG9yKTsgICAgICAgICBcCisgICAg
ICAgIGNvbG9yID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgIH0gZWxzZSBpZiAoY29sb3IgPiBhbHBoYSkgeyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFdSTigi
Q29sb3IgY29tcG9uZW50ICIgI2NvbG9yICIgaXMgZ3JlYXRlciB0aGFuIGFscGhhICglZCwgYWxw
aGE9JWQpLiIsIFwKKyAgICAgICAgICAgIGNvbG9yLCBhbHBoYSk7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBjb2xvciA9IGFs
cGhhOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCiAgICAgfQogICAgIENIRUNLX1BSRU1VTF9DT0xPUihyZWQsIGFscGhhKTsKICAgICBD
SEVDS19QUkVNVUxfQ09MT1IoZ3JlZW4sIGFscGhhKTsKICAgICBDSEVDS19QUkVNVUxfQ09MT1Io
Ymx1ZSwgYWxwaGEpOwogI3VuZGVmIENIRUNLX1BSRU1VTF9DT0xPUgogCi0gICAgc2QtPmJnX2Nv
bG9yLnIgPSByZWQ7Ci0gICAgc2QtPmJnX2NvbG9yLmcgPSBncmVlbjsKLSAgICBzZC0+YmdfY29s
b3IuYiA9IGJsdWU7Ci0gICAgc2QtPmJnX2NvbG9yLmEgPSBhbHBoYTsKKyAgICBzbWFydERhdGEt
PmJnX2NvbG9yLnIgPSByZWQ7CisgICAgc21hcnREYXRhLT5iZ19jb2xvci5nID0gZ3JlZW47Cisg
ICAgc21hcnREYXRhLT5iZ19jb2xvci5iID0gYmx1ZTsKKyAgICBzbWFydERhdGEtPmJnX2NvbG9y
LmEgPSBhbHBoYTsKIAotICAgIHNkLT5hcGktPmJnX2NvbG9yX3NldChzZCwgcmVkLCBncmVlbiwg
Ymx1ZSwgYWxwaGEpOworICAgIHNtYXJ0RGF0YS0+YXBpLT5iZ19jb2xvcl9zZXQoc21hcnREYXRh
LCByZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7CiAKLSAgICBXZWJDb3JlOjpGcmFtZVZpZXcqIHZp
ZXcgPSBzZC0+X3ByaXYtPm1haW5fZnJhbWUtPnZpZXcoKTsKKyAgICBXZWJDb3JlOjpGcmFtZVZp
ZXcqIHZpZXcgPSBzbWFydERhdGEtPl9wcml2LT5tYWluRnJhbWUtPnZpZXcoKTsKICAgICBpZiAo
dmlldykgewogICAgICAgICBXZWJDb3JlOjpDb2xvciBjb2xvcjsKIApAQCAtMTI4OSwyMSArMTI4
OSwyMSBAQCB2b2lkIGV3a192aWV3X2JnX2NvbG9yX2dldChjb25zdCBFdmFzX09iamVjdCogZXdr
VmlldywgaW50KiByZWQsIGludCogZ3JlZW4sIGludAogICAgICAgICAqYmx1ZSA9IDA7CiAgICAg
aWYgKGFscGhhKQogICAgICAgICAqYWxwaGEgPSAwOwotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9S
RVRVUk4oZXdrVmlldywgc2QpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmll
dywgc21hcnREYXRhKTsKICAgICBpZiAocmVkKQotICAgICAgICAqcmVkID0gc2QtPmJnX2NvbG9y
LnI7CisgICAgICAgICpyZWQgPSBzbWFydERhdGEtPmJnX2NvbG9yLnI7CiAgICAgaWYgKGdyZWVu
KQotICAgICAgICAqZ3JlZW4gPSBzZC0+YmdfY29sb3IuZzsKKyAgICAgICAgKmdyZWVuID0gc21h
cnREYXRhLT5iZ19jb2xvci5nOwogICAgIGlmIChibHVlKQotICAgICAgICAqYmx1ZSA9IHNkLT5i
Z19jb2xvci5iOworICAgICAgICAqYmx1ZSA9IHNtYXJ0RGF0YS0+YmdfY29sb3IuYjsKICAgICBp
ZiAoYWxwaGEpCi0gICAgICAgICphbHBoYSA9IHNkLT5iZ19jb2xvci5hOworICAgICAgICAqYWxw
aGEgPSBzbWFydERhdGEtPmJnX2NvbG9yLmE7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld190ZXh0
X3NlYXJjaChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldywgY29uc3QgY2hhciogc3RyaW5nLCBF
aW5hX0Jvb2wgY2FzZVNlbnNpdGl2ZSwgRWluYV9Cb29sIGZvcndhcmQsIEVpbmFfQm9vbCB3cmFw
KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFM
U0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxT
RSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJ
TkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHBy
aXYsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzdHJp
bmcsIEVJTkFfRkFMU0UpOwogICAgIFdURjo6VGV4dENhc2VTZW5zaXRpdml0eSBzZW5zaXRpdmU7
CiAgICAgV2ViQ29yZTo6RmluZERpcmVjdGlvbiBkaXJlY3Rpb247CkBAIC0xMzI0LDE4ICsxMzI0
LDE4IEBAIEVpbmFfQm9vbCBld2tfdmlld190ZXh0X3NlYXJjaChjb25zdCBFdmFzX09iamVjdCog
ZXdrVmlldywgY29uc3QgY2hhciogc3RyaW5nLCBFCiAvKioKICAqIE1hcmsgbWF0Y2hlcyB0aGUg
Z2l2ZW4gdGV4dCBzdHJpbmcgaW4gZG9jdW1lbnQuCiAgKgotICogQHBhcmFtIG8gdmlldyBvYmpl
Y3Qgd2hlcmUgdG8gc2VhcmNoIHRleHQuCisgKiBAcGFyYW0gZXdrVmlldyB2aWV3IG9iamVjdCB3
aGVyZSB0byBzZWFyY2ggdGV4dC4KICAqIEBwYXJhbSBzdHJpbmcgcmVmZXJlbmNlIHN0cmluZyB0
byBtYXRjaC4KICAqIEBwYXJhbSBjYXNlU2Vuc2l0aXZlIGlmIG1hdGNoIHNob3VsZCBiZSBjYXNl
IHNlbnNpdGl2ZSBvciBub3QuCi0gKiBAcGFyYW0gaGlnaGxpZ2h0IGlmIG1hdGNoZXMgc2hvdWxk
IGJlIGhpZ2hsaWdodGVkLgorICogQHBhcmFtIGhlaWdodGlnaGxpZ2h0IGlmIG1hdGNoZXMgc2hv
dWxkIGJlIGhpZ2hsaWdodGVkLgogICogQHBhcmFtIGxpbWl0IG1heGltdW0gYW1vdW50IG9mIG1h
dGNoZXMsIG9yIHplcm8gdG8gdW5saW1pdGVkLgogICoKICAqIEByZXR1cm4gbnVtYmVyIG9mIG1h
dGNoZXMuCiAgKi8KIHVuc2lnbmVkIGludCBld2tfdmlld190ZXh0X21hdGNoZXNfbWFyayhFdmFz
X09iamVjdCogZXdrVmlldywgY29uc3QgY2hhciogc3RyaW5nLCBFaW5hX0Jvb2wgY2FzZVNlbnNp
dGl2ZSwgRWluYV9Cb29sIGhpZ2hsaWdodCwgdW5zaWduZWQgaW50IGxpbWl0KQogewotICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIDApOwotICAgIEVXS19WSUVXX1BS
SVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgMCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JF
VFVSTihld2tWaWV3LCBzbWFydERhdGEsIDApOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JF
VFVSTihzbWFydERhdGEsIHByaXYsIDApOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJO
X1ZBTChzdHJpbmcsIDApOwogICAgIFdURjo6VGV4dENhc2VTZW5zaXRpdml0eSBzZW5zaXRpdmU7
CiAKQEAgLTEzNDksMzggKzEzNDksMzggQEAgdW5zaWduZWQgaW50IGV3a192aWV3X3RleHRfbWF0
Y2hlc19tYXJrKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBjaGFyKiBzdHJpbmcKIAogRWlu
YV9Cb29sIGV3a192aWV3X3RleHRfbWF0Y2hlc191bm1hcmtfYWxsKEV2YXNfT2JqZWN0KiBld2tW
aWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFf
RkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9G
QUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEs
IEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEs
IHByaXYsIEVJTkFfRkFMU0UpOwogICAgIHByaXYtPnBhZ2UtPnVubWFya0FsbFRleHRNYXRjaGVz
KCk7CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3RleHRf
bWF0Y2hlc19oaWdobGlnaHRfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wgaGln
aGxpZ2h0KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJ
TkFfRkFMU0UpOwotICAgIHJldHVybiBld2tfZnJhbWVfdGV4dF9tYXRjaGVzX2hpZ2hsaWdodF9z
ZXQoc2QtPm1haW5fZnJhbWUsIGhpZ2hsaWdodCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JF
VFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIHJldHVybiBld2tfZnJh
bWVfdGV4dF9tYXRjaGVzX2hpZ2hsaWdodF9zZXQoc21hcnREYXRhLT5tYWluX2ZyYW1lLCBoaWdo
bGlnaHQpOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfdGV4dF9tYXRjaGVzX2hpZ2hsaWdodF9n
ZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgcmV0dXJuIGV3a19mcmFtZV90
ZXh0X21hdGNoZXNfaGlnaGxpZ2h0X2dldChzZC0+bWFpbl9mcmFtZSk7CisgICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIHJl
dHVybiBld2tfZnJhbWVfdGV4dF9tYXRjaGVzX2hpZ2hsaWdodF9nZXQoc21hcnREYXRhLT5tYWlu
X2ZyYW1lKTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X2VkaXRhYmxlX3NldChFdmFzX09iamVj
dCogZXdrVmlldywgRWluYV9Cb29sIGVkaXRhYmxlKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9P
Ul9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIHJldHVybiBld2tfZnJhbWVf
ZWRpdGFibGVfc2V0KHNkLT5tYWluX2ZyYW1lLCBlZGl0YWJsZSk7CisgICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIHJldHVy
biBld2tfZnJhbWVfZWRpdGFibGVfc2V0KHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSwgZWRpdGFibGUp
OwogfQogCiBjaGFyKiBld2tfdmlld19zZWxlY3Rpb25fZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBl
d2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIDAp
OwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgMCk7Ci0gICAgQ1N0
cmluZyBzID0gcHJpdi0+cGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFt
ZSgpLT5lZGl0b3IoKS0+c2VsZWN0ZWRUZXh0KCkudXRmOCgpOwotICAgIGlmIChzLmlzTnVsbCgp
KQorICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCAwKTsK
KyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCAwKTsKKyAg
ICBDU3RyaW5nIHNlbGVjdGVkU3RyaW5nID0gcHJpdi0+cGFnZS0+Zm9jdXNDb250cm9sbGVyKCkt
PmZvY3VzZWRPck1haW5GcmFtZSgpLT5lZGl0b3IoKS0+c2VsZWN0ZWRUZXh0KCkudXRmOCgpOwor
ICAgIGlmIChzZWxlY3RlZFN0cmluZy5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
cmV0dXJuIHN0cmR1cChzLmRhdGEoKSk7CisgICAgcmV0dXJuIHN0cmR1cChzZWxlY3RlZFN0cmlu
Zy5kYXRhKCkpOwogfQogCiBzdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19lZGl0b3JfY29tbWFu
ZChFd2tfVmlld19Qcml2YXRlX0RhdGEqIHByaXYsIGNvbnN0IGNoYXIqIGNvbW1hbmQsIGNvbnN0
IGNoYXIqIHZhbHVlID0gMCkKQEAgLTEzOTAsOCArMTM5MCw4IEBAIHN0YXRpYyBFaW5hX0Jvb2wg
X2V3a192aWV3X2VkaXRvcl9jb21tYW5kKEV3a19WaWV3X1ByaXZhdGVfRGF0YSogcHJpdiwgY29u
c3QgY2hhCiAKIEVpbmFfQm9vbCBld2tfdmlld19leGVjdXRlX2VkaXRvcl9jb21tYW5kKEV2YXNf
T2JqZWN0KiBld2tWaWV3LCBjb25zdCBFd2tfRWRpdG9yX0NvbW1hbmQgY29tbWFuZCwgY29uc3Qg
Y2hhciogdmFsdWUpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBz
ZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2
LCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNt
YXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNt
YXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CiAKICAgICBzd2l0Y2ggKGNvbW1hbmQpIHsKICAg
ICBjYXNlIEVXS19FRElUT1JfQ09NTUFORF9JTlNFUlRfSU1BR0U6CkBAIC0xNDE4LDIzICsxNDE4
LDIzIEBAIEVpbmFfQm9vbCBld2tfdmlld19leGVjdXRlX2VkaXRvcl9jb21tYW5kKEV2YXNfT2Jq
ZWN0KiBld2tWaWV3LCBjb25zdCBFd2tfRWRpdG9yCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfY29udGV4
dF9tZW51X2ZvcndhcmRfZXZlbnQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGNvbnN0IEV2YXNfRXZl
bnRfTW91c2VfRG93biogZG93bkV2ZW50KQogewogI2lmIEVOQUJMRShDT05URVhUX01FTlVTKQot
ICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwot
ICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7Cisg
ICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFM
U0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJ
TkFfRkFMU0UpOwogICAgIEVpbmFfQm9vbCBtb3VzZV9wcmVzc19oYW5kbGVkID0gRUlOQV9GQUxT
RTsKIAogICAgIHByaXYtPnBhZ2UtPmNvbnRleHRNZW51Q29udHJvbGxlcigpLT5jbGVhckNvbnRl
eHRNZW51KCk7Ci0gICAgV2ViQ29yZTo6RnJhbWUqIG1haW5fZnJhbWUgPSBwcml2LT5wYWdlLT5t
YWluRnJhbWUoKTsKKyAgICBXZWJDb3JlOjpGcmFtZSogbWFpbkZyYW1lID0gcHJpdi0+cGFnZS0+
bWFpbkZyYW1lKCk7CiAgICAgRXZhc19Db29yZCB4LCB5OwotICAgIGV2YXNfb2JqZWN0X2dlb21l
dHJ5X2dldChzZC0+c2VsZiwgJngsICZ5LCAwLCAwKTsKKyAgICBldmFzX29iamVjdF9nZW9tZXRy
eV9nZXQoc21hcnREYXRhLT5zZWxmLCAmeCwgJnksIDAsIDApOwogCiAgICAgV2ViQ29yZTo6UGxh
dGZvcm1Nb3VzZUV2ZW50IGV2ZW50KGRvd25FdmVudCwgV2ViQ29yZTo6SW50UG9pbnQoeCwgeSkp
OwogCi0gICAgaWYgKG1haW5fZnJhbWUtPnZpZXcoKSkgeworICAgIGlmIChtYWluRnJhbWUtPnZp
ZXcoKSkgewogICAgICAgICBtb3VzZV9wcmVzc19oYW5kbGVkID0KLSAgICAgICAgICAgIG1haW5f
ZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5oYW5kbGVNb3VzZVByZXNzRXZlbnQoZXZlbnQpOworICAg
ICAgICAgICAgbWFpbkZyYW1lLT5ldmVudEhhbmRsZXIoKS0+aGFuZGxlTW91c2VQcmVzc0V2ZW50
KGV2ZW50KTsKICAgICB9CiAKLSAgICBpZiAobWFpbl9mcmFtZS0+ZXZlbnRIYW5kbGVyKCktPnNl
bmRDb250ZXh0TWVudUV2ZW50KGV2ZW50KSkKKyAgICBpZiAobWFpbkZyYW1lLT5ldmVudEhhbmRs
ZXIoKS0+c2VuZENvbnRleHRNZW51RXZlbnQoZXZlbnQpKQogICAgICAgICByZXR1cm4gRUlOQV9G
QUxTRTsKIAogICAgIFdlYkNvcmU6OkNvbnRleHRNZW51KiBjb3JlTWVudSA9CkBAIC0xNDUzLDg0
ICsxNDUzLDg0IEBAIEVpbmFfQm9vbCBld2tfdmlld19jb250ZXh0X21lbnVfZm9yd2FyZF9ldmVu
dChFdmFzX09iamVjdCogZXdrVmlldywgY29uc3QgRXZhc19FCiAKIGRvdWJsZSBld2tfdmlld19s
b2FkX3Byb2dyZXNzX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tf
VklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAtMS4wKTsKLSAgICBFV0tfVklFV19Q
UklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIC0xLjApOworICAgIEVXS19WSUVXX1NEX0dFVF9P
Ul9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCAtMS4wKTsKKyAgICBFV0tfVklFV19QUklWX0dF
VF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCAtMS4wKTsKICAgICByZXR1cm4gcHJpdi0+cGFn
ZS0+cHJvZ3Jlc3MoKS0+ZXN0aW1hdGVkUHJvZ3Jlc3MoKTsKIH0KIAogRWluYV9Cb29sIGV3a192
aWV3X3N0b3AoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgcmV0dXJuIGV3a19mcmFtZV9z
dG9wKHNkLT5tYWluX2ZyYW1lKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1Zp
ZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgcmV0dXJuIGV3a19mcmFtZV9zdG9wKHNt
YXJ0RGF0YS0+bWFpbl9mcmFtZSk7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19yZWxvYWQoRXZh
c19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tW
aWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgcmV0dXJuIGV3a19mcmFtZV9yZWxvYWQoc2QtPm1h
aW5fZnJhbWUpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnRE
YXRhLCBFSU5BX0ZBTFNFKTsKKyAgICByZXR1cm4gZXdrX2ZyYW1lX3JlbG9hZChzbWFydERhdGEt
Pm1haW5fZnJhbWUpOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfcmVsb2FkX2Z1bGwoRXZhc19P
YmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3
LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgcmV0dXJuIGV3a19mcmFtZV9yZWxvYWRfZnVsbChzZC0+
bWFpbl9mcmFtZSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFy
dERhdGEsIEVJTkFfRkFMU0UpOworICAgIHJldHVybiBld2tfZnJhbWVfcmVsb2FkX2Z1bGwoc21h
cnREYXRhLT5tYWluX2ZyYW1lKTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X2JhY2soRXZhc19P
YmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3
LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgcmV0dXJuIGV3a19mcmFtZV9iYWNrKHNkLT5tYWluX2Zy
YW1lKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwg
RUlOQV9GQUxTRSk7CisgICAgcmV0dXJuIGV3a19mcmFtZV9iYWNrKHNtYXJ0RGF0YS0+bWFpbl9m
cmFtZSk7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19mb3J3YXJkKEV2YXNfT2JqZWN0KiBld2tW
aWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFf
RkFMU0UpOwotICAgIHJldHVybiBld2tfZnJhbWVfZm9yd2FyZChzZC0+bWFpbl9mcmFtZSk7Cisg
ICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFM
U0UpOworICAgIHJldHVybiBld2tfZnJhbWVfZm9yd2FyZChzbWFydERhdGEtPm1haW5fZnJhbWUp
OwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfbmF2aWdhdGUoRXZhc19PYmplY3QqIGV3a1ZpZXcs
IGludCBzdGVwcykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNk
LCBFSU5BX0ZBTFNFKTsKLSAgICByZXR1cm4gZXdrX2ZyYW1lX25hdmlnYXRlKHNkLT5tYWluX2Zy
YW1lLCBzdGVwcyk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFy
dERhdGEsIEVJTkFfRkFMU0UpOworICAgIHJldHVybiBld2tfZnJhbWVfbmF2aWdhdGUoc21hcnRE
YXRhLT5tYWluX2ZyYW1lLCBzdGVwcyk7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19iYWNrX3Bv
c3NpYmxlKEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9S
RVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIHJldHVybiBld2tfZnJhbWVfYmFj
a19wb3NzaWJsZShzZC0+bWFpbl9mcmFtZSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
Tihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIHJldHVybiBld2tfZnJhbWVf
YmFja19wb3NzaWJsZShzbWFydERhdGEtPm1haW5fZnJhbWUpOwogfQogCiBFaW5hX0Jvb2wgZXdr
X3ZpZXdfZm9yd2FyZF9wb3NzaWJsZShFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tf
VklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICByZXR1
cm4gZXdrX2ZyYW1lX2ZvcndhcmRfcG9zc2libGUoc2QtPm1haW5fZnJhbWUpOworICAgIEVXS19W
SUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAg
ICByZXR1cm4gZXdrX2ZyYW1lX2ZvcndhcmRfcG9zc2libGUoc21hcnREYXRhLT5tYWluX2ZyYW1l
KTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X25hdmlnYXRlX3Bvc3NpYmxlKEV2YXNfT2JqZWN0
KiBld2tWaWV3LCBpbnQgc3RlcHMpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihl
d2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgcmV0dXJuIGV3a19mcmFtZV9uYXZpZ2F0ZV9w
b3NzaWJsZShzZC0+bWFpbl9mcmFtZSwgc3RlcHMpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9S
RVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICByZXR1cm4gZXdrX2Zy
YW1lX25hdmlnYXRlX3Bvc3NpYmxlKHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSwgc3RlcHMpOwogfQog
CiBFaW5hX0Jvb2wgZXdrX3ZpZXdfaGlzdG9yeV9lbmFibGVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0
KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2Qs
IEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwg
RUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFy
dERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFy
dERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIHJldHVybiBzdGF0aWNfY2FzdDxXZWJDb3Jl
OjpCYWNrRm9yd2FyZExpc3RJbXBsKj4ocHJpdi0+cGFnZS0+YmFja0ZvcndhcmRMaXN0KCkpLT5l
bmFibGVkKCk7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19oaXN0b3J5X2VuYWJsZV9zZXQoRXZh
c19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCBlbmFibGUpCiB7Ci0gICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJ
Vl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9H
RVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJ
RVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAg
c3RhdGljX2Nhc3Q8V2ViQ29yZTo6QmFja0ZvcndhcmRMaXN0SW1wbCo+KHByaXYtPnBhZ2UtPmJh
Y2tGb3J3YXJkTGlzdCgpKS0+c2V0RW5hYmxlZChlbmFibGUpOwogICAgIHJldHVybiBFSU5BX1RS
VUU7CiB9CiAKIEV3a19IaXN0b3J5KiBld2tfdmlld19oaXN0b3J5X2dldChjb25zdCBFdmFzX09i
amVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcs
IHNkLCAwKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIDApOwor
ICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCAwKTsKKyAg
ICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCAwKTsKICAgICBp
ZiAoIXN0YXRpY19jYXN0PFdlYkNvcmU6OkJhY2tGb3J3YXJkTGlzdEltcGwqPihwcml2LT5wYWdl
LT5iYWNrRm9yd2FyZExpc3QoKSktPmVuYWJsZWQoKSkgewogICAgICAgICBFUlIoImFza2VkIGhp
c3RvcnksIGJ1dCBpdCdzIGRpc2FibGVkISBSZXR1cm5pbmcgMCEiKTsKICAgICAgICAgcmV0dXJu
IDA7CkBAIC0xNTQwLDE4NiArMTU0MCwxODYgQEAgRXdrX0hpc3RvcnkqIGV3a192aWV3X2hpc3Rv
cnlfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogCiBmbG9hdCBld2tfdmlld196b29t
X2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRf
T1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAtMS4wKTsKLSAgICByZXR1cm4gZXdrX2ZyYW1lX3BhZ2Vf
em9vbV9nZXQoc2QtPm1haW5fZnJhbWUpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrVmlldywgc21hcnREYXRhLCAtMS4wKTsKKyAgICByZXR1cm4gZXdrX2ZyYW1lX3BhZ2Vfem9v
bV9nZXQoc21hcnREYXRhLT5tYWluX2ZyYW1lKTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3pv
b21fc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBmbG9hdCB6b29tLCBFdmFzX0Nvb3JkIGN4LCBF
dmFzX0Nvb3JkIGN5KQorRWluYV9Cb29sIGV3a192aWV3X3pvb21fc2V0KEV2YXNfT2JqZWN0KiBl
d2tWaWV3LCBmbG9hdCB6b29tLCBFdmFzX0Nvb3JkIGNlbnRlclgsIEV2YXNfQ29vcmQgY2VudGVy
WSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZB
TFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVChzZCwgcHJpdik7CisgICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19W
SUVXX1BSSVZfR0VUKHNtYXJ0RGF0YSwgcHJpdik7CiAKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTl9WQUwoc2QtPmFwaSwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk5fVkFMKHNkLT5hcGktPnpvb21fc2V0LCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5hcGksIEVJTkFfRkFMU0UpOworICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmFwaS0+em9vbV9zZXQs
IEVJTkFfRkFMU0UpOwogCi0gICAgaWYgKCFwcml2LT5zZXR0aW5ncy56b29tX3JhbmdlLnVzZXJf
c2NhbGFibGUpIHsKKyAgICBpZiAoIXByaXYtPnNldHRpbmdzLnpvb21SYW5nZS51c2VyU2NhbGFi
bGUpIHsKICAgICAgICAgV1JOKCJ1c2VyU2NhbGFibGUgaXMgZmFsc2UiKTsKICAgICAgICAgcmV0
dXJuIEVJTkFfRkFMU0U7CiAgICAgfQogCi0gICAgaWYgKHpvb20gPCBwcml2LT5zZXR0aW5ncy56
b29tX3JhbmdlLm1pbl9zY2FsZSkgewotICAgICAgICBXUk4oInpvb20gbGV2ZWwgaXMgPCAlZiA6
ICVmIiwgcHJpdi0+c2V0dGluZ3Muem9vbV9yYW5nZS5taW5fc2NhbGUsIHpvb20pOworICAgIGlm
ICh6b29tIDwgcHJpdi0+c2V0dGluZ3Muem9vbVJhbmdlLm1pblNjYWxlKSB7CisgICAgICAgIFdS
Tigiem9vbSBsZXZlbCBpcyA8ICVmIDogJWYiLCBwcml2LT5zZXR0aW5ncy56b29tUmFuZ2UubWlu
U2NhbGUsIHpvb20pOwogICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKICAgICB9Ci0gICAgaWYg
KHpvb20gPiBwcml2LT5zZXR0aW5ncy56b29tX3JhbmdlLm1heF9zY2FsZSkgewotICAgICAgICBX
Uk4oInpvb20gbGV2ZWwgaXMgPiAlZiA6ICVmIiwgcHJpdi0+c2V0dGluZ3Muem9vbV9yYW5nZS5t
YXhfc2NhbGUsIHpvb20pOworICAgIGlmICh6b29tID4gcHJpdi0+c2V0dGluZ3Muem9vbVJhbmdl
Lm1heFNjYWxlKSB7CisgICAgICAgIFdSTigiem9vbSBsZXZlbCBpcyA+ICVmIDogJWYiLCBwcml2
LT5zZXR0aW5ncy56b29tUmFuZ2UubWF4U2NhbGUsIHpvb20pOwogICAgICAgICByZXR1cm4gRUlO
QV9GQUxTRTsKICAgICB9CiAKLSAgICBfZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9tYXJrX3N0b3Ao
c2QpOwotICAgIHJldHVybiBzZC0+YXBpLT56b29tX3NldChzZCwgem9vbSwgY3gsIGN5KTsKKyAg
ICBfZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9tYXJrX3N0b3Aoc21hcnREYXRhKTsKKyAgICByZXR1
cm4gc21hcnREYXRhLT5hcGktPnpvb21fc2V0KHNtYXJ0RGF0YSwgem9vbSwgY2VudGVyWCwgY2Vu
dGVyWSk7CiB9CiAKIGZsb2F0IGV3a192aWV3X3BhZ2Vfem9vbV9nZXQoY29uc3QgRXZhc19PYmpl
Y3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBz
ZCwgLTEuMCk7Ci0gICAgcmV0dXJuIGV3a19mcmFtZV9wYWdlX3pvb21fZ2V0KHNkLT5tYWluX2Zy
YW1lKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwg
LTEuMCk7CisgICAgcmV0dXJuIGV3a19mcmFtZV9wYWdlX3pvb21fZ2V0KHNtYXJ0RGF0YS0+bWFp
bl9mcmFtZSk7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19wYWdlX3pvb21fc2V0KEV2YXNfT2Jq
ZWN0KiBld2tWaWV3LCBmbG9hdCBwYWdlWm9vbUZhY3RvcikKIHsKLSAgICBFV0tfVklFV19TRF9H
RVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICByZXR1cm4gZXdrX2Zy
YW1lX3BhZ2Vfem9vbV9zZXQoc2QtPm1haW5fZnJhbWUsIHBhZ2Vab29tRmFjdG9yKTsKKyAgICBF
V0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7
CisgICAgcmV0dXJuIGV3a19mcmFtZV9wYWdlX3pvb21fc2V0KHNtYXJ0RGF0YS0+bWFpbl9mcmFt
ZSwgcGFnZVpvb21GYWN0b3IpOwogfQogCiBmbG9hdCBld2tfdmlld19zY2FsZV9nZXQoY29uc3Qg
RXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihl
d2tWaWV3LCBzZCwgLTEuMCk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBw
cml2LCAtMS4wKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0
RGF0YSwgLTEuMCk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwg
cHJpdiwgLTEuMCk7CiAgICAgcmV0dXJuIHByaXYtPnBhZ2UtPnBhZ2VTY2FsZUZhY3RvcigpOwog
fQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfc2NhbGVfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBm
bG9hdCBzY2FsZUZhY3RvciwgRXZhc19Db29yZCBjeCwgRXZhc19Db29yZCBjeSkKK0VpbmFfQm9v
bCBld2tfdmlld19zY2FsZV9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGZsb2F0IHNjYWxlRmFj
dG9yLCBFdmFzX0Nvb3JkIGNlbnRlclgsIEV2YXNfQ29vcmQgY2VudGVyWSkKIHsKLSAgICBFV0tf
VklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tf
VklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIEVXS19W
SUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAg
ICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNF
KTsKIAogICAgIGZsb2F0IGN1cnJlbnRTY2FsZUZhY3RvciA9IGV3a192aWV3X3NjYWxlX2dldChl
d2tWaWV3KTsKICAgICBpZiAoY3VycmVudFNjYWxlRmFjdG9yID09IC0xKQogICAgICAgICByZXR1
cm4gRUlOQV9GQUxTRTsKIAogICAgIGludCB4LCB5OwotICAgIGV3a19mcmFtZV9zY3JvbGxfcG9z
X2dldChzZC0+bWFpbl9mcmFtZSwgJngsICZ5KTsKKyAgICBld2tfZnJhbWVfc2Nyb2xsX3Bvc19n
ZXQoc21hcnREYXRhLT5tYWluX2ZyYW1lLCAmeCwgJnkpOwogCi0gICAgeCA9IHN0YXRpY19jYXN0
PGludD4oKCh4ICsgY3gpIC8gY3VycmVudFNjYWxlRmFjdG9yKSAqIHNjYWxlRmFjdG9yKSAtIGN4
OwotICAgIHkgPSBzdGF0aWNfY2FzdDxpbnQ+KCgoeSArIGN5KSAvIGN1cnJlbnRTY2FsZUZhY3Rv
cikgKiBzY2FsZUZhY3RvcikgLSBjeTsKKyAgICB4ID0gc3RhdGljX2Nhc3Q8aW50PigoKHggKyBj
ZW50ZXJYKSAvIGN1cnJlbnRTY2FsZUZhY3RvcikgKiBzY2FsZUZhY3RvcikgLSBjZW50ZXJYOwor
ICAgIHkgPSBzdGF0aWNfY2FzdDxpbnQ+KCgoeSArIGNlbnRlclkpIC8gY3VycmVudFNjYWxlRmFj
dG9yKSAqIHNjYWxlRmFjdG9yKSAtIGNlbnRlclk7CiAgICAgcHJpdi0+cGFnZS0+c2V0UGFnZVNj
YWxlRmFjdG9yKHNjYWxlRmFjdG9yLCBXZWJDb3JlOjpMYXlvdXRQb2ludCh4LCB5KSk7CiAgICAg
cmV0dXJuIEVJTkFfVFJVRTsKIH0KIAogZmxvYXQgZXdrX3ZpZXdfdGV4dF96b29tX2dldChjb25z
dCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJO
KGV3a1ZpZXcsIHNkLCAtMS4wKTsKLSAgICByZXR1cm4gZXdrX2ZyYW1lX3RleHRfem9vbV9nZXQo
c2QtPm1haW5fZnJhbWUpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywg
c21hcnREYXRhLCAtMS4wKTsKKyAgICByZXR1cm4gZXdrX2ZyYW1lX3RleHRfem9vbV9nZXQoc21h
cnREYXRhLT5tYWluX2ZyYW1lKTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3RleHRfem9vbV9z
ZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGZsb2F0IHRleHRab29tRmFjdG9yKQogewotICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIHJl
dHVybiBld2tfZnJhbWVfdGV4dF96b29tX3NldChzZC0+bWFpbl9mcmFtZSwgdGV4dFpvb21GYWN0
b3IpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBF
SU5BX0ZBTFNFKTsKKyAgICByZXR1cm4gZXdrX2ZyYW1lX3RleHRfem9vbV9zZXQoc21hcnREYXRh
LT5tYWluX2ZyYW1lLCB0ZXh0Wm9vbUZhY3Rvcik7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld196
b29tX3dlYWtfc21vb3RoX3NjYWxlX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsK
LSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsK
LSAgICByZXR1cm4gc2QtPnpvb21fd2Vha19zbW9vdGhfc2NhbGU7CisgICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIHJldHVy
biBzbWFydERhdGEtPnpvb21fd2Vha19zbW9vdGhfc2NhbGU7CiB9CiAKIHZvaWQgZXdrX3ZpZXdf
em9vbV93ZWFrX3Ntb290aF9zY2FsZV9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9v
bCBzbW9vdGhTY2FsZSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcs
IHNkKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSk7
CiAgICAgc21vb3RoU2NhbGUgPSAhIXNtb290aFNjYWxlOwotICAgIGlmIChzZC0+em9vbV93ZWFr
X3Ntb290aF9zY2FsZSA9PSBzbW9vdGhTY2FsZSkKKyAgICBpZiAoc21hcnREYXRhLT56b29tX3dl
YWtfc21vb3RoX3NjYWxlID09IHNtb290aFNjYWxlKQogICAgICAgICByZXR1cm47Ci0gICAgc2Qt
Pnpvb21fd2Vha19zbW9vdGhfc2NhbGUgPSBzbW9vdGhTY2FsZTsKLSAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTihzZC0+YXBpKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihz
ZC0+YXBpLT56b29tX3dlYWtfc21vb3RoX3NjYWxlX3NldCk7Ci0gICAgc2QtPmFwaS0+em9vbV93
ZWFrX3Ntb290aF9zY2FsZV9zZXQoc2QsIHNtb290aFNjYWxlKTsKKyAgICBzbWFydERhdGEtPnpv
b21fd2Vha19zbW9vdGhfc2NhbGUgPSBzbW9vdGhTY2FsZTsKKyAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTihzbWFydERhdGEtPmFwaSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk4oc21hcnREYXRhLT5hcGktPnpvb21fd2Vha19zbW9vdGhfc2NhbGVfc2V0KTsKKyAgICBzbWFy
dERhdGEtPmFwaS0+em9vbV93ZWFrX3Ntb290aF9zY2FsZV9zZXQoc21hcnREYXRhLCBzbW9vdGhT
Y2FsZSk7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld196b29tX3dlYWtfc2V0KEV2YXNfT2JqZWN0
KiBld2tWaWV3LCBmbG9hdCB6b29tLCBFdmFzX0Nvb3JkIGNlbnRlclgsIEV2YXNfQ29vcmQgY2Vu
dGVyWSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5B
X0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVChzZCwgcHJpdik7CisgICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVX
S19WSUVXX1BSSVZfR0VUKHNtYXJ0RGF0YSwgcHJpdik7CiAKLSAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTl9WQUwoc2QtPmFwaSwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk5fVkFMKHNkLT5hcGktPnpvb21fd2Vha19zZXQsIEVJTkFfRkFMU0UpOworICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmFwaSwgRUlOQV9GQUxT
RSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+YXBpLT56
b29tX3dlYWtfc2V0LCBFSU5BX0ZBTFNFKTsKIAotICAgIGlmICghcHJpdi0+c2V0dGluZ3Muem9v
bV9yYW5nZS51c2VyX3NjYWxhYmxlKSB7CisgICAgaWYgKCFwcml2LT5zZXR0aW5ncy56b29tUmFu
Z2UudXNlclNjYWxhYmxlKSB7CiAgICAgICAgIFdSTigidXNlclNjYWxhYmxlIGlzIGZhbHNlIik7
CiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwogICAgIH0KIAotICAgIGlmICh6b29tIDwgcHJp
di0+c2V0dGluZ3Muem9vbV9yYW5nZS5taW5fc2NhbGUpIHsKLSAgICAgICAgV1JOKCJ6b29tIGxl
dmVsIGlzIDwgJWYgOiAlZiIsIHByaXYtPnNldHRpbmdzLnpvb21fcmFuZ2UubWluX3NjYWxlLCB6
b29tKTsKKyAgICBpZiAoem9vbSA8IHByaXYtPnNldHRpbmdzLnpvb21SYW5nZS5taW5TY2FsZSkg
eworICAgICAgICBXUk4oInpvb20gbGV2ZWwgaXMgPCAlZiA6ICVmIiwgcHJpdi0+c2V0dGluZ3Mu
em9vbVJhbmdlLm1pblNjYWxlLCB6b29tKTsKICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CiAg
ICAgfQotICAgIGlmICh6b29tID4gcHJpdi0+c2V0dGluZ3Muem9vbV9yYW5nZS5tYXhfc2NhbGUp
IHsKLSAgICAgICAgV1JOKCJ6b29tIGxldmVsIGlzID4gJWYgOiAlZiIsIHByaXYtPnNldHRpbmdz
Lnpvb21fcmFuZ2UubWF4X3NjYWxlLCB6b29tKTsKKyAgICBpZiAoem9vbSA+IHByaXYtPnNldHRp
bmdzLnpvb21SYW5nZS5tYXhTY2FsZSkgeworICAgICAgICBXUk4oInpvb20gbGV2ZWwgaXMgPiAl
ZiA6ICVmIiwgcHJpdi0+c2V0dGluZ3Muem9vbVJhbmdlLm1heFNjYWxlLCB6b29tKTsKICAgICAg
ICAgcmV0dXJuIEVJTkFfRkFMU0U7CiAgICAgfQogCi0gICAgc2QtPmFuaW1hdGVkX3pvb20uem9v
bS5zdGFydCA9IGV3a19mcmFtZV9wYWdlX3pvb21fZ2V0KHNkLT5tYWluX2ZyYW1lKTsKLSAgICBz
ZC0+YW5pbWF0ZWRfem9vbS56b29tLmVuZCA9IHpvb207Ci0gICAgc2QtPmFuaW1hdGVkX3pvb20u
em9vbS5jdXJyZW50ID0gem9vbTsKLSAgICByZXR1cm4gc2QtPmFwaS0+em9vbV93ZWFrX3NldChz
ZCwgem9vbSwgY2VudGVyWCwgY2VudGVyWSk7CisgICAgc21hcnREYXRhLT5hbmltYXRlZF96b29t
Lnpvb20uc3RhcnQgPSBld2tfZnJhbWVfcGFnZV96b29tX2dldChzbWFydERhdGEtPm1haW5fZnJh
bWUpOworICAgIHNtYXJ0RGF0YS0+YW5pbWF0ZWRfem9vbS56b29tLmVuZCA9IHpvb207CisgICAg
c21hcnREYXRhLT5hbmltYXRlZF96b29tLnpvb20uY3VycmVudCA9IHpvb207CisgICAgcmV0dXJu
IHNtYXJ0RGF0YS0+YXBpLT56b29tX3dlYWtfc2V0KHNtYXJ0RGF0YSwgem9vbSwgY2VudGVyWCwg
Y2VudGVyWSk7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld196b29tX2FuaW1hdGVkX21hcmtfc3Rh
cnQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGZsb2F0IHpvb20pCiB7Ci0gICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgc2QtPmFuaW1hdGVk
X3pvb20uem9vbS5zdGFydCA9IHpvb207CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihl
d2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIHNtYXJ0RGF0YS0+YW5pbWF0ZWRf
em9vbS56b29tLnN0YXJ0ID0gem9vbTsKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCiBFaW5h
X0Jvb2wgZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9tYXJrX2VuZChFdmFzX09iamVjdCogZXdrVmll
dywgZmxvYXQgem9vbSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcs
IHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBzZC0+YW5pbWF0ZWRfem9vbS56b29tLmVuZCA9IHpvb207
CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFf
RkFMU0UpOworICAgIHNtYXJ0RGF0YS0+YW5pbWF0ZWRfem9vbS56b29tLmVuZCA9IHpvb207CiAg
ICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3pvb21fYW5pbWF0
ZWRfbWFya19jdXJyZW50KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBmbG9hdCB6b29tKQogewotICAg
IEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAg
IHNkLT5hbmltYXRlZF96b29tLnpvb20uY3VycmVudCA9IHpvb207CisgICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIHNtYXJ0
RGF0YS0+YW5pbWF0ZWRfem9vbS56b29tLmN1cnJlbnQgPSB6b29tOwogICAgIHJldHVybiBFSU5B
X1RSVUU7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld196b29tX2FuaW1hdGVkX21hcmtfc3RvcChF
dmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3
a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBfZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9tYXJr
X3N0b3Aoc2QpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnRE
YXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBfZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9tYXJrX3N0b3Ao
c21hcnREYXRhKTsKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCiBFaW5hX0Jvb2wgZXdrX3Zp
ZXdfem9vbV9hbmltYXRlZF9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGZsb2F0IHpvb20sIGZs
b2F0IGR1cmF0aW9uLCBFdmFzX0Nvb3JkIGNlbnRlclgsIEV2YXNfQ29vcmQgY2VudGVyWSkKIHsK
ICAgICBkb3VibGUgbm93OwotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywg
c2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJp
diwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5h
cGksIEVJTkFfRkFMU0UpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+
YXBpLT56b29tX3dlYWtfc2V0LCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1Jf
UkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJ
Vl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+YXBpLCBFSU5BX0ZBTFNFKTsKKyAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5hcGktPnpvb21fd2Vh
a19zZXQsIEVJTkFfRkFMU0UpOwogCi0gICAgaWYgKCFwcml2LT5zZXR0aW5ncy56b29tX3Jhbmdl
LnVzZXJfc2NhbGFibGUpIHsKKyAgICBpZiAoIXByaXYtPnNldHRpbmdzLnpvb21SYW5nZS51c2Vy
U2NhbGFibGUpIHsKICAgICAgICAgV1JOKCJ1c2VyU2NhbGFibGUgaXMgZmFsc2UiKTsKICAgICAg
ICAgcmV0dXJuIEVJTkFfRkFMU0U7CiAgICAgfQogCi0gICAgaWYgKHpvb20gPCBwcml2LT5zZXR0
aW5ncy56b29tX3JhbmdlLm1pbl9zY2FsZSkgewotICAgICAgICBXUk4oInpvb20gbGV2ZWwgaXMg
PCAlZiA6ICVmIiwgcHJpdi0+c2V0dGluZ3Muem9vbV9yYW5nZS5taW5fc2NhbGUsIHpvb20pOwor
ICAgIGlmICh6b29tIDwgcHJpdi0+c2V0dGluZ3Muem9vbVJhbmdlLm1pblNjYWxlKSB7CisgICAg
ICAgIFdSTigiem9vbSBsZXZlbCBpcyA8ICVmIDogJWYiLCBwcml2LT5zZXR0aW5ncy56b29tUmFu
Z2UubWluU2NhbGUsIHpvb20pOwogICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKICAgICB9Ci0g
ICAgaWYgKHpvb20gPiBwcml2LT5zZXR0aW5ncy56b29tX3JhbmdlLm1heF9zY2FsZSkgewotICAg
ICAgICBXUk4oInpvb20gbGV2ZWwgaXMgPiAlZiA6ICVmIiwgcHJpdi0+c2V0dGluZ3Muem9vbV9y
YW5nZS5tYXhfc2NhbGUsIHpvb20pOworICAgIGlmICh6b29tID4gcHJpdi0+c2V0dGluZ3Muem9v
bVJhbmdlLm1heFNjYWxlKSB7CisgICAgICAgIFdSTigiem9vbSBsZXZlbCBpcyA+ICVmIDogJWYi
LCBwcml2LT5zZXR0aW5ncy56b29tUmFuZ2UubWF4U2NhbGUsIHpvb20pOwogICAgICAgICByZXR1
cm4gRUlOQV9GQUxTRTsKICAgICB9CiAKLSAgICBpZiAocHJpdi0+YW5pbWF0ZWRfem9vbS5hbmlt
YXRvcikKLSAgICAgICAgcHJpdi0+YW5pbWF0ZWRfem9vbS56b29tLnN0YXJ0ID0gX2V3a192aWV3
X3pvb21fYW5pbWF0ZWRfY3VycmVudChwcml2KTsKKyAgICBpZiAocHJpdi0+YW5pbWF0ZWRab29t
LmFuaW1hdG9yKQorICAgICAgICBwcml2LT5hbmltYXRlZFpvb20uem9vbS5zdGFydCA9IF9ld2tf
dmlld196b29tX2FuaW1hdGVkX2N1cnJlbnQocHJpdik7CiAgICAgZWxzZSB7Ci0gICAgICAgIHBy
aXYtPmFuaW1hdGVkX3pvb20uem9vbS5zdGFydCA9IGV3a19mcmFtZV9wYWdlX3pvb21fZ2V0KHNk
LT5tYWluX2ZyYW1lKTsKLSAgICAgICAgX2V3a192aWV3X3pvb21fYW5pbWF0aW9uX3N0YXJ0KHNk
KTsKKyAgICAgICAgcHJpdi0+YW5pbWF0ZWRab29tLnpvb20uc3RhcnQgPSBld2tfZnJhbWVfcGFn
ZV96b29tX2dldChzbWFydERhdGEtPm1haW5fZnJhbWUpOworICAgICAgICBfZXdrX3ZpZXdfem9v
bV9hbmltYXRpb25fc3RhcnQoc21hcnREYXRhKTsKICAgICB9CiAKICAgICBpZiAoY2VudGVyWCA8
IDApCkBAIC0xNzI4LDUwICsxNzI4LDUwIEBAIEVpbmFfQm9vbCBld2tfdmlld196b29tX2FuaW1h
dGVkX3NldChFdmFzX09iamVjdCogZXdrVmlldywgZmxvYXQgem9vbSwgZmxvYXQgZHVyCiAgICAg
ICAgIGNlbnRlclkgPSAwOwogCiAgICAgbm93ID0gZWNvcmVfbG9vcF90aW1lX2dldCgpOwotICAg
IHByaXYtPmFuaW1hdGVkX3pvb20udGltZS5zdGFydCA9IG5vdzsKLSAgICBwcml2LT5hbmltYXRl
ZF96b29tLnRpbWUuZW5kID0gbm93ICsgZHVyYXRpb247Ci0gICAgcHJpdi0+YW5pbWF0ZWRfem9v
bS50aW1lLmR1cmF0aW9uID0gZHVyYXRpb247Ci0gICAgcHJpdi0+YW5pbWF0ZWRfem9vbS56b29t
LmVuZCA9IHpvb207Ci0gICAgcHJpdi0+YW5pbWF0ZWRfem9vbS56b29tLnJhbmdlID0gKHByaXYt
PmFuaW1hdGVkX3pvb20uem9vbS5lbmQgLSBwcml2LT5hbmltYXRlZF96b29tLnpvb20uc3RhcnQp
OwotICAgIHByaXYtPmFuaW1hdGVkX3pvb20uY2VudGVyLnggPSBjZW50ZXJYOwotICAgIHByaXYt
PmFuaW1hdGVkX3pvb20uY2VudGVyLnkgPSBjZW50ZXJZOwotICAgIHNkLT5hbmltYXRlZF96b29t
Lnpvb20uY3VycmVudCA9IHByaXYtPmFuaW1hdGVkX3pvb20uem9vbS5zdGFydDsKLSAgICBzZC0+
YW5pbWF0ZWRfem9vbS56b29tLnN0YXJ0ID0gcHJpdi0+YW5pbWF0ZWRfem9vbS56b29tLnN0YXJ0
OwotICAgIHNkLT5hbmltYXRlZF96b29tLnpvb20uZW5kID0gcHJpdi0+YW5pbWF0ZWRfem9vbS56
b29tLmVuZDsKKyAgICBwcml2LT5hbmltYXRlZFpvb20udGltZS5zdGFydCA9IG5vdzsKKyAgICBw
cml2LT5hbmltYXRlZFpvb20udGltZS5lbmQgPSBub3cgKyBkdXJhdGlvbjsKKyAgICBwcml2LT5h
bmltYXRlZFpvb20udGltZS5kdXJhdGlvbiA9IGR1cmF0aW9uOworICAgIHByaXYtPmFuaW1hdGVk
Wm9vbS56b29tLmVuZCA9IHpvb207CisgICAgcHJpdi0+YW5pbWF0ZWRab29tLnpvb20ucmFuZ2Ug
PSAocHJpdi0+YW5pbWF0ZWRab29tLnpvb20uZW5kIC0gcHJpdi0+YW5pbWF0ZWRab29tLnpvb20u
c3RhcnQpOworICAgIHByaXYtPmFuaW1hdGVkWm9vbS5jZW50ZXIueCA9IGNlbnRlclg7CisgICAg
cHJpdi0+YW5pbWF0ZWRab29tLmNlbnRlci55ID0gY2VudGVyWTsKKyAgICBzbWFydERhdGEtPmFu
aW1hdGVkX3pvb20uem9vbS5jdXJyZW50ID0gcHJpdi0+YW5pbWF0ZWRab29tLnpvb20uc3RhcnQ7
CisgICAgc21hcnREYXRhLT5hbmltYXRlZF96b29tLnpvb20uc3RhcnQgPSBwcml2LT5hbmltYXRl
ZFpvb20uem9vbS5zdGFydDsKKyAgICBzbWFydERhdGEtPmFuaW1hdGVkX3pvb20uem9vbS5lbmQg
PSBwcml2LT5hbmltYXRlZFpvb20uem9vbS5lbmQ7CiAKICAgICByZXR1cm4gRUlOQV9UUlVFOwog
fQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfcHJlX3JlbmRlcl9yZWdpb24oRXZhc19PYmplY3QqIGV3
a1ZpZXcsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5LCBFdmFzX0Nvb3JkIHdpZHRoLCBFdmFz
X0Nvb3JkIGhlaWdodCwgZmxvYXQgem9vbSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVU
VVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9S
RVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOX1ZBTChzZC0+YXBpLT5wcmVfcmVuZGVyX3JlZ2lvbiwgRUlOQV9GQUxTRSk7CisgICAgRVdL
X1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOwor
ICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFM
U0UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmFwaS0+
cHJlX3JlbmRlcl9yZWdpb24sIEVJTkFfRkFMU0UpOwogICAgIGZsb2F0IGN1cl96b29tOwotICAg
IEV2YXNfQ29vcmQgY3csIGNoOworICAgIEV2YXNfQ29vcmQgY29udGVudHNXaWR0aCwgY29udGVu
dHNIZWlnaHQ7CiAKICAgICAvKiBXaGVuIGRvaW5nIGFuaW1hdGVkIHpvb20gaXQncyBub3QgcG9z
c2libGUgdG8gY2FsbCBwcmUtcmVuZGVyIHNpbmNlIGl0CiAgICAgICogd291bGQgc2NyZXcgdXAg
cGFyYW1ldGVycyB0aGF0IGFuaW1hdGlvbiBpcyBjdXJyZW50bHkgdXNpbmcKICAgICAgKi8KLSAg
ICBpZiAocHJpdi0+YW5pbWF0ZWRfem9vbS5hbmltYXRvcikKKyAgICBpZiAocHJpdi0+YW5pbWF0
ZWRab29tLmFuaW1hdG9yKQogICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKIAotICAgIGN1cl96
b29tID0gZXdrX2ZyYW1lX3BhZ2Vfem9vbV9nZXQoc2QtPm1haW5fZnJhbWUpOworICAgIGN1cl96
b29tID0gZXdrX2ZyYW1lX3BhZ2Vfem9vbV9nZXQoc21hcnREYXRhLT5tYWluX2ZyYW1lKTsKIAog
ICAgIGlmIChjdXJfem9vbSA8IDAuMDAwMDEpCiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwot
ICAgIGlmICghZXdrX2ZyYW1lX2NvbnRlbnRzX3NpemVfZ2V0KHNkLT5tYWluX2ZyYW1lLCAmY3cs
ICZjaCkpCisgICAgaWYgKCFld2tfZnJhbWVfY29udGVudHNfc2l6ZV9nZXQoc21hcnREYXRhLT5t
YWluX2ZyYW1lLCAmY29udGVudHNXaWR0aCwgJmNvbnRlbnRzSGVpZ2h0KSkKICAgICAgICAgcmV0
dXJuIEVJTkFfRkFMU0U7CiAKLSAgICBjdyAqPSB6b29tIC8gY3VyX3pvb207Ci0gICAgY2ggKj0g
em9vbSAvIGN1cl96b29tOwotICAgIERCRygicmVnaW9uICVkLCVkKyVkeCVkIEAgJWYgY29udGVu
dHM9JWR4JWQiLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCB6b29tLCBjdywgY2gpOworICAgIGNvbnRl
bnRzV2lkdGggKj0gem9vbSAvIGN1cl96b29tOworICAgIGNvbnRlbnRzSGVpZ2h0ICo9IHpvb20g
LyBjdXJfem9vbTsKKyAgICBEQkcoInJlZ2lvbiAlZCwlZCslZHglZCBAICVmIGNvbnRlbnRzPSVk
eCVkIiwgeCwgeSwgd2lkdGgsIGhlaWdodCwgem9vbSwgY29udGVudHNXaWR0aCwgY29udGVudHNI
ZWlnaHQpOwogCi0gICAgaWYgKHggKyB3aWR0aCA+IGN3KQotICAgICAgICB3aWR0aCA9IGN3IC0g
eDsKKyAgICBpZiAoeCArIHdpZHRoID4gY29udGVudHNXaWR0aCkKKyAgICAgICAgd2lkdGggPSBj
b250ZW50c1dpZHRoIC0geDsKIAotICAgIGlmICh5ICsgaGVpZ2h0ID4gY2gpCi0gICAgICAgIGhl
aWdodCA9IGNoIC0geTsKKyAgICBpZiAoeSArIGhlaWdodCA+IGNvbnRlbnRzSGVpZ2h0KQorICAg
ICAgICBoZWlnaHQgPSBjb250ZW50c0hlaWdodCAtIHk7CiAKICAgICBpZiAoeCA8IDApIHsKICAg
ICAgICAgd2lkdGggKz0geDsKQEAgLTE3ODIsNjQgKzE3ODIsNjQgQEAgRWluYV9Cb29sIGV3a192
aWV3X3ByZV9yZW5kZXJfcmVnaW9uKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFdmFzX0Nvb3JkIHgs
IEV2YXNfQ28KICAgICAgICAgeSA9IDA7CiAgICAgfQogCi0gICAgcmV0dXJuIHNkLT5hcGktPnBy
ZV9yZW5kZXJfcmVnaW9uKHNkLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCB6b29tKTsKKyAgICByZXR1
cm4gc21hcnREYXRhLT5hcGktPnByZV9yZW5kZXJfcmVnaW9uKHNtYXJ0RGF0YSwgeCwgeSwgd2lk
dGgsIGhlaWdodCwgem9vbSk7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19wcmVfcmVuZGVyX3Jl
bGF0aXZlX3JhZGl1cyhFdmFzX09iamVjdCogZXdrVmlldywgdW5zaWduZWQgaW50IG51bWJlcikK
IHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNF
KTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0Up
OwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+YXBpLT5wcmVfcmVuZGVy
X3JlbGF0aXZlX3JhZGl1cywgRUlOQV9GQUxTRSk7Ci0gICAgZmxvYXQgY3VyX3pvb207CisgICAg
RVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0Up
OworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFf
RkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmFw
aS0+cHJlX3JlbmRlcl9yZWxhdGl2ZV9yYWRpdXMsIEVJTkFfRkFMU0UpOworICAgIGZsb2F0IGN1
cnJlbnRab29tOwogCi0gICAgaWYgKHByaXYtPmFuaW1hdGVkX3pvb20uYW5pbWF0b3IpCisgICAg
aWYgKHByaXYtPmFuaW1hdGVkWm9vbS5hbmltYXRvcikKICAgICAgICAgcmV0dXJuIEVJTkFfRkFM
U0U7CiAKLSAgICBjdXJfem9vbSA9IGV3a19mcmFtZV9wYWdlX3pvb21fZ2V0KHNkLT5tYWluX2Zy
YW1lKTsKLSAgICByZXR1cm4gc2QtPmFwaS0+cHJlX3JlbmRlcl9yZWxhdGl2ZV9yYWRpdXMoc2Qs
IG51bWJlciwgY3VyX3pvb20pOworICAgIGN1cnJlbnRab29tID0gZXdrX2ZyYW1lX3BhZ2Vfem9v
bV9nZXQoc21hcnREYXRhLT5tYWluX2ZyYW1lKTsKKyAgICByZXR1cm4gc21hcnREYXRhLT5hcGkt
PnByZV9yZW5kZXJfcmVsYXRpdmVfcmFkaXVzKHNtYXJ0RGF0YSwgbnVtYmVyLCBjdXJyZW50Wm9v
bSk7CiB9CiAKIHVuc2lnbmVkIGludCBld2tfdmlld19pbWhfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0
KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2Qs
IDApOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgMCk7CisgICAg
RVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIDApOworICAgIEVX
S19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIDApOwogICAgIHJldHVy
biBwcml2LT5pbWg7CiB9CiAKIHZvaWQgZXdrX3ZpZXdfcHJlX3JlbmRlcl9jYW5jZWwoRXZhc19P
YmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3
LCBzZCk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFwaS0+cHJlX3JlbmRl
cl9jYW5jZWwpOwotICAgIHNkLT5hcGktPnByZV9yZW5kZXJfY2FuY2VsKHNkKTsKKyAgICBFV0tf
VklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSk7CisgICAgRUlOQV9TQUZF
VFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRhLT5hcGktPnByZV9yZW5kZXJfY2FuY2VsKTsKKyAg
ICBzbWFydERhdGEtPmFwaS0+cHJlX3JlbmRlcl9jYW5jZWwoc21hcnREYXRhKTsKIH0KIAogRWlu
YV9Cb29sIGV3a192aWV3X2VuYWJsZV9yZW5kZXIoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcp
CiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxT
RSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5hcGktPmVuYWJsZV9y
ZW5kZXIsIEVJTkFfRkFMU0UpOwotICAgIHJldHVybiBzZC0+YXBpLT5lbmFibGVfcmVuZGVyKHNk
KTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlO
QV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+
YXBpLT5lbmFibGVfcmVuZGVyLCBFSU5BX0ZBTFNFKTsKKyAgICByZXR1cm4gc21hcnREYXRhLT5h
cGktPmVuYWJsZV9yZW5kZXIoc21hcnREYXRhKTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X2Rp
c2FibGVfcmVuZGVyKGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVX
X1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+YXBpLT5kaXNhYmxlX3JlbmRlciwgRUlOQV9GQUxT
RSk7Ci0gICAgcmV0dXJuIHNkLT5hcGktPmRpc2FibGVfcmVuZGVyKHNkKTsKKyAgICBFV0tfVklF
V19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+YXBpLT5kaXNhYmxlX3Jl
bmRlciwgRUlOQV9GQUxTRSk7CisgICAgcmV0dXJuIHNtYXJ0RGF0YS0+YXBpLT5kaXNhYmxlX3Jl
bmRlcihzbWFydERhdGEpOwogfQogCiBjb25zdCBjaGFyKiBld2tfdmlld19zZXR0aW5nX3VzZXJf
YWdlbnRfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NE
X0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIDApOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09S
X1JFVFVSTihzZCwgcHJpdiwgMCk7Ci0gICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLnVzZXJfYWdl
bnQ7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIDAp
OworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIDApOwor
ICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy51c2VyQWdlbnQ7CiB9CiAKIEVpbmFfQm9vbCBld2tf
dmlld19zZXR0aW5nX3VzZXJfYWdlbnRfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBj
aGFyKiB1c2VyQWdlbnQpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3
LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBw
cml2LCBFSU5BX0ZBTFNFKTsKLSAgICBpZiAoZWluYV9zdHJpbmdzaGFyZV9yZXBsYWNlKCZwcml2
LT5zZXR0aW5ncy51c2VyX2FnZW50LCB1c2VyQWdlbnQpKSB7Ci0gICAgICAgIFdlYkNvcmU6OkZy
YW1lTG9hZGVyQ2xpZW50RWZsKiBjbGllbnQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpGcmFtZUxv
YWRlckNsaWVudEVmbCo+KHByaXYtPm1haW5fZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKSk7Cisg
ICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFM
U0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJ
TkFfRkFMU0UpOworICAgIGlmIChlaW5hX3N0cmluZ3NoYXJlX3JlcGxhY2UoJnByaXYtPnNldHRp
bmdzLnVzZXJBZ2VudCwgdXNlckFnZW50KSkgeworICAgICAgICBXZWJDb3JlOjpGcmFtZUxvYWRl
ckNsaWVudEVmbCogY2xpZW50ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RnJhbWVMb2FkZXJDbGll
bnRFZmwqPihwcml2LT5tYWluRnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKSk7CiAgICAgICAgIGNs
aWVudC0+c2V0Q3VzdG9tVXNlckFnZW50KFN0cmluZzo6ZnJvbVVURjgodXNlckFnZW50KSk7CiAg
ICAgfQogICAgIHJldHVybiBFSU5BX1RSVUU7CkBAIC0xODQ3LDIyMyArMTg0NywyMjMgQEAgRWlu
YV9Cb29sIGV3a192aWV3X3NldHRpbmdfdXNlcl9hZ2VudF9zZXQoRXZhc19PYmplY3QqIGV3a1Zp
ZXcsIGNvbnN0IGNoYXIqIHVzZXIKIAogY29uc3QgY2hhciogZXdrX3ZpZXdfc2V0dGluZ191c2Vy
X3N0eWxlc2hlZXRfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19W
SUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIDApOwotICAgIEVXS19WSUVXX1BSSVZf
R0VUX09SX1JFVFVSTihzZCwgcHJpdiwgMCk7Ci0gICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLnVz
ZXJfc3R5bGVzaGVldDsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNt
YXJ0RGF0YSwgMCk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwg
cHJpdiwgMCk7CisgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLnVzZXJTdHlsZXNoZWV0OwogfQog
CiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ191c2VyX3N0eWxlc2hlZXRfc2V0KEV2YXNfT2Jq
ZWN0KiBld2tWaWV3LCBjb25zdCBjaGFyKiB1cmkpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRf
T1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKLSAgICBpZiAoZWluYV9zdHJpbmdzaGFy
ZV9yZXBsYWNlKCZwcml2LT5zZXR0aW5ncy51c2VyX3N0eWxlc2hlZXQsIHVyaSkpIHsKKyAgICBF
V0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7
CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9G
QUxTRSk7CisgICAgaWYgKGVpbmFfc3RyaW5nc2hhcmVfcmVwbGFjZSgmcHJpdi0+c2V0dGluZ3Mu
dXNlclN0eWxlc2hlZXQsIHVyaSkpIHsKICAgICAgICAgV2ViQ29yZTo6S1VSTCBrdXJsKFdlYkNv
cmU6OktVUkwoKSwgU3RyaW5nOjpmcm9tVVRGOCh1cmkpKTsKLSAgICAgICAgcHJpdi0+cGFnZV9z
ZXR0aW5ncy0+c2V0VXNlclN0eWxlU2hlZXRMb2NhdGlvbihrdXJsKTsKKyAgICAgICAgcHJpdi0+
cGFnZVNldHRpbmdzLT5zZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uKGt1cmwpOwogICAgIH0KICAg
ICByZXR1cm4gRUlOQV9UUlVFOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19hdXRv
X2xvYWRfaW1hZ2VzX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tf
VklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tf
VklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwotICAgIHJldHVy
biBwcml2LT5zZXR0aW5ncy5hdXRvX2xvYWRfaW1hZ2VzOworICAgIEVXS19WSUVXX1NEX0dFVF9P
Ul9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19Q
UklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICByZXR1
cm4gcHJpdi0+c2V0dGluZ3MuYXV0b0xvYWRJbWFnZXM7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmll
d19zZXR0aW5nX2F1dG9fbG9hZF9pbWFnZXNfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5h
X0Jvb2wgYXV0b21hdGljKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmll
dywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwg
cHJpdiwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3
LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVS
TihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIGF1dG9tYXRpYyA9ICEhYXV0b21h
dGljOwotICAgIGlmIChwcml2LT5zZXR0aW5ncy5hdXRvX2xvYWRfaW1hZ2VzICE9IGF1dG9tYXRp
YykgewotICAgICAgICBwcml2LT5wYWdlX3NldHRpbmdzLT5zZXRMb2Fkc0ltYWdlc0F1dG9tYXRp
Y2FsbHkoYXV0b21hdGljKTsKLSAgICAgICAgcHJpdi0+c2V0dGluZ3MuYXV0b19sb2FkX2ltYWdl
cyA9IGF1dG9tYXRpYzsKKyAgICBpZiAocHJpdi0+c2V0dGluZ3MuYXV0b0xvYWRJbWFnZXMgIT0g
YXV0b21hdGljKSB7CisgICAgICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0TG9hZHNJbWFnZXNB
dXRvbWF0aWNhbGx5KGF1dG9tYXRpYyk7CisgICAgICAgIHByaXYtPnNldHRpbmdzLmF1dG9Mb2Fk
SW1hZ2VzID0gYXV0b21hdGljOwogICAgIH0KICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCiBF
aW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19hdXRvX3Nocmlua19pbWFnZXNfZ2V0KGNvbnN0IEV2
YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdr
Vmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihz
ZCwgcHJpdiwgRUlOQV9GQUxTRSk7Ci0gICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmF1dG9fc2hy
aW5rX2ltYWdlczsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0
RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0
RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmF1dG9T
aHJpbmtJbWFnZXM7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2F1dG9fc2hyaW5r
X2ltYWdlc19zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCBhdXRvbWF0aWMpCiB7
Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7
Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsK
KyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9G
QUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwg
RUlOQV9GQUxTRSk7CiAgICAgYXV0b21hdGljID0gISFhdXRvbWF0aWM7Ci0gICAgaWYgKHByaXYt
PnNldHRpbmdzLmF1dG9fc2hyaW5rX2ltYWdlcyAhPSBhdXRvbWF0aWMpIHsKLSAgICAgICAgcHJp
di0+cGFnZV9zZXR0aW5ncy0+c2V0U2hyaW5rc1N0YW5kYWxvbmVJbWFnZXNUb0ZpdChhdXRvbWF0
aWMpOwotICAgICAgICBwcml2LT5zZXR0aW5ncy5hdXRvX3Nocmlua19pbWFnZXMgPSBhdXRvbWF0
aWM7CisgICAgaWYgKHByaXYtPnNldHRpbmdzLmF1dG9TaHJpbmtJbWFnZXMgIT0gYXV0b21hdGlj
KSB7CisgICAgICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0U2hyaW5rc1N0YW5kYWxvbmVJbWFn
ZXNUb0ZpdChhdXRvbWF0aWMpOworICAgICAgICBwcml2LT5zZXR0aW5ncy5hdXRvU2hyaW5rSW1h
Z2VzID0gYXV0b21hdGljOwogICAgIH0KICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCiBFaW5h
X0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19lbmFibGVfYXV0b19yZXNpemVfd2luZG93X2dldChjb25z
dCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJO
KGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRV
Uk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwotICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5lbmFi
bGVfYXV0b19yZXNpemVfd2luZG93OworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdr
Vmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9S
RVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICByZXR1cm4gcHJpdi0+c2V0
dGluZ3MuZW5hYmxlQXV0b1Jlc2l6ZVdpbmRvdzsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3Nl
dHRpbmdfZW5hYmxlX2F1dG9fcmVzaXplX3dpbmRvd19zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcs
IEVpbmFfQm9vbCByZXNpemFibGUpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihl
d2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJO
KHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKLSAgICBwcml2LT5zZXR0aW5ncy5lbmFibGVfYXV0b19y
ZXNpemVfd2luZG93ID0gcmVzaXphYmxlOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9P
Ul9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBwcml2LT5zZXR0aW5n
cy5lbmFibGVBdXRvUmVzaXplV2luZG93ID0gcmVzaXphYmxlOwogICAgIHJldHVybiBFSU5BX1RS
VUU7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2VuYWJsZV9zY3JpcHRzX2dldChj
b25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVU
VVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9S
RVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwotICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5l
bmFibGVfc2NyaXB0czsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNt
YXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNt
YXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmVu
YWJsZVNjcmlwdHM7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2VuYWJsZV9zY3Jp
cHRzX3NldChFdmFzX09iamVjdCogZXdrVmlldywgRWluYV9Cb29sIGVuYWJsZSkKIHsKLSAgICBF
V0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBF
V0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsK
KyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZB
TFNFKTsKICAgICBlbmFibGUgPSAhIWVuYWJsZTsKLSAgICBpZiAocHJpdi0+c2V0dGluZ3MuZW5h
YmxlX3NjcmlwdHMgIT0gZW5hYmxlKSB7Ci0gICAgICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNl
dEphdmFTY3JpcHRFbmFibGVkKGVuYWJsZSk7Ci0gICAgICAgIHByaXYtPnNldHRpbmdzLmVuYWJs
ZV9zY3JpcHRzID0gZW5hYmxlOworICAgIGlmIChwcml2LT5zZXR0aW5ncy5lbmFibGVTY3JpcHRz
ICE9IGVuYWJsZSkgeworICAgICAgICBwcml2LT5wYWdlU2V0dGluZ3MtPnNldEphdmFTY3JpcHRF
bmFibGVkKGVuYWJsZSk7CisgICAgICAgIHByaXYtPnNldHRpbmdzLmVuYWJsZVNjcmlwdHMgPSBl
bmFibGU7CiAgICAgfQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKIEVpbmFfQm9vbCBld2tf
dmlld19zZXR0aW5nX2VuYWJsZV9wbHVnaW5zX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmll
dykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZB
TFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFM
U0UpOwotICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5lbmFibGVfcGx1Z2luczsKKyAgICBFV0tf
VklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7Cisg
ICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxT
RSk7CisgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmVuYWJsZVBsdWdpbnM7CiB9CiAKIEVpbmFf
Qm9vbCBld2tfdmlld19zZXR0aW5nX2VuYWJsZV9wbHVnaW5zX3NldChFdmFzX09iamVjdCogZXdr
VmlldywgRWluYV9Cb29sIGVuYWJsZSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJO
KGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRV
Uk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9P
Ul9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBlbmFibGUgPSAhIWVu
YWJsZTsKLSAgICBpZiAocHJpdi0+c2V0dGluZ3MuZW5hYmxlX3BsdWdpbnMgIT0gZW5hYmxlKSB7
Ci0gICAgICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNldFBsdWdpbnNFbmFibGVkKGVuYWJsZSk7
Ci0gICAgICAgIHByaXYtPnNldHRpbmdzLmVuYWJsZV9wbHVnaW5zID0gZW5hYmxlOworICAgIGlm
IChwcml2LT5zZXR0aW5ncy5lbmFibGVQbHVnaW5zICE9IGVuYWJsZSkgeworICAgICAgICBwcml2
LT5wYWdlU2V0dGluZ3MtPnNldFBsdWdpbnNFbmFibGVkKGVuYWJsZSk7CisgICAgICAgIHByaXYt
PnNldHRpbmdzLmVuYWJsZVBsdWdpbnMgPSBlbmFibGU7CiAgICAgfQogICAgIHJldHVybiBFSU5B
X1RSVUU7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2VuYWJsZV9mcmFtZV9mbGF0
dGVuaW5nX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19T
RF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19Q
UklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwotICAgIHJldHVybiBwcml2
LT5zZXR0aW5ncy5lbmFibGVfZnJhbWVfZmxhdHRlbmluZzsKKyAgICBFV0tfVklFV19TRF9HRVRf
T1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdf
UFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgcmV0
dXJuIHByaXYtPnNldHRpbmdzLmVuYWJsZUZyYW1lRmxhdHRlbmluZzsKIH0KIAogRWluYV9Cb29s
IGV3a192aWV3X3NldHRpbmdfZW5hYmxlX2ZyYW1lX2ZsYXR0ZW5pbmdfc2V0KEV2YXNfT2JqZWN0
KiBld2tWaWV3LCBFaW5hX0Jvb2wgZW5hYmxlKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9S
RVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09S
X1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JF
VFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZf
R0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIGVuYWJsZSA9
ICEhZW5hYmxlOwotICAgIGlmIChwcml2LT5zZXR0aW5ncy5lbmFibGVfZnJhbWVfZmxhdHRlbmlu
ZyAhPSBlbmFibGUpIHsKLSAgICAgICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0RnJhbWVGbGF0
dGVuaW5nRW5hYmxlZChlbmFibGUpOwotICAgICAgICBwcml2LT5zZXR0aW5ncy5lbmFibGVfZnJh
bWVfZmxhdHRlbmluZyA9IGVuYWJsZTsKKyAgICBpZiAocHJpdi0+c2V0dGluZ3MuZW5hYmxlRnJh
bWVGbGF0dGVuaW5nICE9IGVuYWJsZSkgeworICAgICAgICBwcml2LT5wYWdlU2V0dGluZ3MtPnNl
dEZyYW1lRmxhdHRlbmluZ0VuYWJsZWQoZW5hYmxlKTsKKyAgICAgICAgcHJpdi0+c2V0dGluZ3Mu
ZW5hYmxlRnJhbWVGbGF0dGVuaW5nID0gZW5hYmxlOwogICAgIH0KICAgICByZXR1cm4gRUlOQV9U
UlVFOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19zY3JpcHRzX3dpbmRvd19vcGVu
X2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRf
T1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dF
VF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwotICAgIHJldHVybiBwcml2LT5zZXR0
aW5ncy5zY3JpcHRzX3dpbmRvd19vcGVuOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9P
Ul9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICByZXR1cm4gcHJpdi0+
c2V0dGluZ3Muc2NyaXB0c1dpbmRvd09wZW47CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19zZXR0
aW5nX3NjcmlwdHNfd2luZG93X29wZW5fc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jv
b2wgYWxsb3cpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwg
RUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBF
SU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0
RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0
RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgYWxsb3cgPSAhIWFsbG93OwotICAgIGlmIChw
cml2LT5zZXR0aW5ncy5zY3JpcHRzX3dpbmRvd19vcGVuICE9IGFsbG93KSB7Ci0gICAgICAgIHBy
aXYtPnBhZ2Vfc2V0dGluZ3MtPnNldEphdmFTY3JpcHRDYW5PcGVuV2luZG93c0F1dG9tYXRpY2Fs
bHkoYWxsb3cpOwotICAgICAgICBwcml2LT5zZXR0aW5ncy5zY3JpcHRzX3dpbmRvd19vcGVuID0g
YWxsb3c7CisgICAgaWYgKHByaXYtPnNldHRpbmdzLnNjcmlwdHNXaW5kb3dPcGVuICE9IGFsbG93
KSB7CisgICAgICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0SmF2YVNjcmlwdENhbk9wZW5XaW5k
b3dzQXV0b21hdGljYWxseShhbGxvdyk7CisgICAgICAgIHByaXYtPnNldHRpbmdzLnNjcmlwdHNX
aW5kb3dPcGVuID0gYWxsb3c7CiAgICAgfQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKIEVp
bmFfQm9vbCBld2tfdmlld19zZXR0aW5nX3NjcmlwdHNfY2FuX2Nsb3NlX3dpbmRvd3NfZ2V0KGNv
bnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRV
Uk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JF
VFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7Ci0gICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLnNj
cmlwdHNfY2FuX2Nsb3NlX3dpbmRvd3M7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihl
d2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09S
X1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIHJldHVybiBwcml2LT5z
ZXR0aW5ncy5zY3JpcHRzQ2FuQ2xvc2VXaW5kb3dzOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdf
c2V0dGluZ19zY3JpcHRzX2Nhbl9jbG9zZV93aW5kb3dzX3NldChFdmFzX09iamVjdCogZXdrVmll
dywgRWluYV9Cb29sIGFsbG93KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdr
Vmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihz
ZCwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tW
aWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JF
VFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIGFsbG93ID0gISFhbGxvdzsK
LSAgICBpZiAocHJpdi0+c2V0dGluZ3Muc2NyaXB0c19jYW5fY2xvc2Vfd2luZG93cyAhPSBhbGxv
dykgewotICAgICAgICBwcml2LT5wYWdlX3NldHRpbmdzLT5zZXRBbGxvd1NjcmlwdHNUb0Nsb3Nl
V2luZG93cyhhbGxvdyk7Ci0gICAgICAgIHByaXYtPnNldHRpbmdzLnNjcmlwdHNfY2FuX2Nsb3Nl
X3dpbmRvd3MgPSBhbGxvdzsKKyAgICBpZiAocHJpdi0+c2V0dGluZ3Muc2NyaXB0c0NhbkNsb3Nl
V2luZG93cyAhPSBhbGxvdykgeworICAgICAgICBwcml2LT5wYWdlU2V0dGluZ3MtPnNldEFsbG93
U2NyaXB0c1RvQ2xvc2VXaW5kb3dzKGFsbG93KTsKKyAgICAgICAgcHJpdi0+c2V0dGluZ3Muc2Ny
aXB0c0NhbkNsb3NlV2luZG93cyA9IGFsbG93OwogICAgIH0KICAgICByZXR1cm4gRUlOQV9UUlVF
OwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19yZXNpemFibGVfdGV4dGFyZWFzX2dl
dChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1Jf
UkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9P
Ul9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwotICAgIHJldHVybiBwcml2LT5zZXR0aW5n
cy5yZXNpemFibGVfdGV4dGFyZWFzOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdr
Vmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9S
RVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICByZXR1cm4gcHJpdi0+c2V0
dGluZ3MucmVzaXphYmxlVGV4dGFyZWFzOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGlu
Z19yZXNpemFibGVfdGV4dGFyZWFzX3NldChFdmFzX09iamVjdCogZXdrVmlldywgRWluYV9Cb29s
IGVuYWJsZSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBF
SU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJ
TkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnRE
YXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnRE
YXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBlbmFibGUgPSAhIWVuYWJsZTsKLSAgICBpZiAo
cHJpdi0+c2V0dGluZ3MucmVzaXphYmxlX3RleHRhcmVhcyAhPSBlbmFibGUpIHsKLSAgICAgICAg
cHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0VGV4dEFyZWFzQXJlUmVzaXphYmxlKGVuYWJsZSk7Ci0g
ICAgICAgIHByaXYtPnNldHRpbmdzLnJlc2l6YWJsZV90ZXh0YXJlYXMgPSBlbmFibGU7CisgICAg
aWYgKHByaXYtPnNldHRpbmdzLnJlc2l6YWJsZVRleHRhcmVhcyAhPSBlbmFibGUpIHsKKyAgICAg
ICAgcHJpdi0+cGFnZVNldHRpbmdzLT5zZXRUZXh0QXJlYXNBcmVSZXNpemFibGUoZW5hYmxlKTsK
KyAgICAgICAgcHJpdi0+c2V0dGluZ3MucmVzaXphYmxlVGV4dGFyZWFzID0gZW5hYmxlOwogICAg
IH0KICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGlu
Z19wcml2YXRlX2Jyb3dzaW5nX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAg
ICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwotICAg
IHJldHVybiBwcml2LT5zZXR0aW5ncy5wcml2YXRlX2Jyb3dzaW5nOworICAgIEVXS19WSUVXX1NE
X0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tf
VklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAg
ICByZXR1cm4gcHJpdi0+c2V0dGluZ3MucHJpdmF0ZUJyb3dzaW5nOwogfQogCiBFaW5hX0Jvb2wg
ZXdrX3ZpZXdfc2V0dGluZ19wcml2YXRlX2Jyb3dzaW5nX3NldChFdmFzX09iamVjdCogZXdrVmll
dywgRWluYV9Cb29sIGVuYWJsZSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3
a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4o
c2QsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdr
Vmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9S
RVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBlbmFibGUgPSAhIWVuYWJs
ZTsKLSAgICBpZiAocHJpdi0+c2V0dGluZ3MucHJpdmF0ZV9icm93c2luZyAhPSBlbmFibGUpIHsK
LSAgICAgICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChl
bmFibGUpOwotICAgICAgICBwcml2LT5zZXR0aW5ncy5wcml2YXRlX2Jyb3dzaW5nID0gZW5hYmxl
OworICAgIGlmIChwcml2LT5zZXR0aW5ncy5wcml2YXRlQnJvd3NpbmcgIT0gZW5hYmxlKSB7Cisg
ICAgICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChlbmFi
bGUpOworICAgICAgICBwcml2LT5zZXR0aW5ncy5wcml2YXRlQnJvd3NpbmcgPSBlbmFibGU7CiAg
ICAgfQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19zZXR0
aW5nX29mZmxpbmVfYXBwX2NhY2hlX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsK
LSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsK
LSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwot
ICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5vZmZsaW5lX2FwcF9jYWNoZTsKKyAgICBFV0tfVklF
V19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAg
RVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7
CisgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLm9mZmxpbmVBcHBDYWNoZTsKIH0KIAogRWluYV9C
b29sIGV3a192aWV3X3NldHRpbmdfb2ZmbGluZV9hcHBfY2FjaGVfc2V0KEV2YXNfT2JqZWN0KiBl
d2tWaWV3LCBFaW5hX0Jvb2wgZW5hYmxlKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRV
Uk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JF
VFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
Tihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VU
X09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIGVuYWJsZSA9ICEh
ZW5hYmxlOwotICAgIGlmIChwcml2LT5zZXR0aW5ncy5vZmZsaW5lX2FwcF9jYWNoZSAhPSBlbmFi
bGUpIHsKLSAgICAgICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0T2ZmbGluZVdlYkFwcGxpY2F0
aW9uQ2FjaGVFbmFibGVkKGVuYWJsZSk7Ci0gICAgICAgIHByaXYtPnNldHRpbmdzLm9mZmxpbmVf
YXBwX2NhY2hlID0gZW5hYmxlOworICAgIGlmIChwcml2LT5zZXR0aW5ncy5vZmZsaW5lQXBwQ2Fj
aGUgIT0gZW5hYmxlKSB7CisgICAgICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0T2ZmbGluZVdl
YkFwcGxpY2F0aW9uQ2FjaGVFbmFibGVkKGVuYWJsZSk7CisgICAgICAgIHByaXYtPnNldHRpbmdz
Lm9mZmxpbmVBcHBDYWNoZSA9IGVuYWJsZTsKICAgICB9CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsK
IH0KQEAgLTIwNzEsMjcgKzIwNzEsMjcgQEAgRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfb2Zm
bGluZV9hcHBfY2FjaGVfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wKIAogRWlu
YV9Cb29sIGV3a192aWV3X3NldHRpbmdfY2FyZXRfYnJvd3NpbmdfZ2V0KGNvbnN0IEV2YXNfT2Jq
ZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywg
c2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJp
diwgRUlOQV9GQUxTRSk7Ci0gICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmNhcmV0X2Jyb3dzaW5n
OworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5B
X0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2
LCBFSU5BX0ZBTFNFKTsKKyAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuY2FyZXRCcm93c2luZzsK
IH0KIAogRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfY2FyZXRfYnJvd3Npbmdfc2V0KEV2YXNf
T2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wgZW5hYmxlKQogewotICAgIEVXS19WSUVXX1NEX0dF
VF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZf
R0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVX
X1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIGVu
YWJsZSA9ICEhZW5hYmxlOwotICAgIGlmIChwcml2LT5zZXR0aW5ncy5jYXJldF9icm93c2luZyAh
PSBlbmFibGUpIHsKLSAgICAgICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0Q2FyZXRCcm93c2lu
Z0VuYWJsZWQoZW5hYmxlKTsKLSAgICAgICAgcHJpdi0+c2V0dGluZ3MuY2FyZXRfYnJvd3Npbmcg
PSBlbmFibGU7CisgICAgaWYgKHByaXYtPnNldHRpbmdzLmNhcmV0QnJvd3NpbmcgIT0gZW5hYmxl
KSB7CisgICAgICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0Q2FyZXRCcm93c2luZ0VuYWJsZWQo
ZW5hYmxlKTsKKyAgICAgICAgcHJpdi0+c2V0dGluZ3MuY2FyZXRCcm93c2luZyA9IGVuYWJsZTsK
ICAgICB9CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAogY29uc3QgY2hhciogZXdrX3ZpZXdf
c2V0dGluZ19lbmNvZGluZ19jdXN0b21fZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQog
ewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIDApOwotICAgIEVX
S19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgMCk7CisgICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIDApOworICAgIEVXS19WSUVXX1BSSVZf
R0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIDApOwogICAgIEV2YXNfT2JqZWN0KiBtYWlu
X2ZyYW1lID0gZXdrX3ZpZXdfZnJhbWVfbWFpbl9nZXQoZXdrVmlldyk7CiAgICAgV2ViQ29yZTo6
RnJhbWUqIGNvcmVfZnJhbWUgPSBld2tfZnJhbWVfY29yZV9nZXQobWFpbl9mcmFtZSk7CiAKQEAg
LTIxMDAsMTk5ICsyMTAwLDE5OSBAQCBjb25zdCBjaGFyKiBld2tfdmlld19zZXR0aW5nX2VuY29k
aW5nX2N1c3RvbV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiAgICAgaWYgKG92ZXJy
aWRlRW5jb2RpbmcuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIGVpbmFfc3Ry
aW5nc2hhcmVfcmVwbGFjZSgmcHJpdi0+c2V0dGluZ3MuZW5jb2RpbmdfY3VzdG9tLCBvdmVycmlk
ZUVuY29kaW5nLnV0ZjgoKS5kYXRhKCkpOwotICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5lbmNv
ZGluZ19jdXN0b207CisgICAgZWluYV9zdHJpbmdzaGFyZV9yZXBsYWNlKCZwcml2LT5zZXR0aW5n
cy5lbmNvZGluZ0N1c3RvbSwgb3ZlcnJpZGVFbmNvZGluZy51dGY4KCkuZGF0YSgpKTsKKyAgICBy
ZXR1cm4gcHJpdi0+c2V0dGluZ3MuZW5jb2RpbmdDdXN0b207CiB9CiAKIEVpbmFfQm9vbCBld2tf
dmlld19zZXR0aW5nX2VuY29kaW5nX2N1c3RvbV9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGNv
bnN0IGNoYXIqIGVuY29kaW5nKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdr
Vmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihz
ZCwgcHJpdiwgRUlOQV9GQUxTRSk7Ci0gICAgRXZhc19PYmplY3QqIG1haW5fZnJhbWUgPSBld2tf
dmlld19mcmFtZV9tYWluX2dldChld2tWaWV3KTsKLSAgICBXZWJDb3JlOjpGcmFtZSogY29yZV9m
cmFtZSA9IGV3a19mcmFtZV9jb3JlX2dldChtYWluX2ZyYW1lKTsKKyAgICBFV0tfVklFV19TRF9H
RVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJ
RVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAg
RXZhc19PYmplY3QqIG1haW5GcmFtZSA9IGV3a192aWV3X2ZyYW1lX21haW5fZ2V0KGV3a1ZpZXcp
OworICAgIFdlYkNvcmU6OkZyYW1lKiBjb3JlRnJhbWUgPSBld2tfZnJhbWVfY29yZV9nZXQobWFp
bkZyYW1lKTsKICAgICBEQkcoIiVzIiwgZW5jb2RpbmcpOwotICAgIGlmIChlaW5hX3N0cmluZ3No
YXJlX3JlcGxhY2UoJnByaXYtPnNldHRpbmdzLmVuY29kaW5nX2N1c3RvbSwgZW5jb2RpbmcpKQot
ICAgICAgICBjb3JlX2ZyYW1lLT5sb2FkZXIoKS0+cmVsb2FkV2l0aE92ZXJyaWRlRW5jb2Rpbmco
U3RyaW5nOjpmcm9tVVRGOChlbmNvZGluZykpOworICAgIGlmIChlaW5hX3N0cmluZ3NoYXJlX3Jl
cGxhY2UoJnByaXYtPnNldHRpbmdzLmVuY29kaW5nQ3VzdG9tLCBlbmNvZGluZykpCisgICAgICAg
IGNvcmVGcmFtZS0+bG9hZGVyKCktPnJlbG9hZFdpdGhPdmVycmlkZUVuY29kaW5nKFN0cmluZzo6
ZnJvbVVURjgoZW5jb2RpbmcpKTsKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCiBjb25zdCBj
aGFyKiBld2tfdmlld19zZXR0aW5nX2VuY29kaW5nX2RlZmF1bHRfZ2V0KGNvbnN0IEV2YXNfT2Jq
ZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywg
c2QsIDApOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgMCk7Ci0g
ICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmVuY29kaW5nX2RlZmF1bHQ7CisgICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIDApOworICAgIEVXS19WSUVXX1BS
SVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIDApOworICAgIHJldHVybiBwcml2LT5z
ZXR0aW5ncy5lbmNvZGluZ0RlZmF1bHQ7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5n
X2VuY29kaW5nX2RlZmF1bHRfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBjaGFyKiBl
bmNvZGluZykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBF
SU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJ
TkFfRkFMU0UpOwotICAgIGlmIChlaW5hX3N0cmluZ3NoYXJlX3JlcGxhY2UoJnByaXYtPnNldHRp
bmdzLmVuY29kaW5nX2RlZmF1bHQsIGVuY29kaW5nKSkKLSAgICAgICAgcHJpdi0+cGFnZV9zZXR0
aW5ncy0+c2V0RGVmYXVsdFRleHRFbmNvZGluZ05hbWUoU3RyaW5nOjpmcm9tVVRGOChlbmNvZGlu
ZykpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBF
SU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBw
cml2LCBFSU5BX0ZBTFNFKTsKKyAgICBpZiAoZWluYV9zdHJpbmdzaGFyZV9yZXBsYWNlKCZwcml2
LT5zZXR0aW5ncy5lbmNvZGluZ0RlZmF1bHQsIGVuY29kaW5nKSkKKyAgICAgICAgcHJpdi0+cGFn
ZVNldHRpbmdzLT5zZXREZWZhdWx0VGV4dEVuY29kaW5nTmFtZShTdHJpbmc6OmZyb21VVEY4KGVu
Y29kaW5nKSk7CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3
X3NldHRpbmdfZW5jb2RpbmdfZGV0ZWN0b3Jfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5h
X0Jvb2wgZW5hYmxlKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywg
c2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJp
diwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBz
bWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihz
bWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIGVuYWJsZSA9ICEhZW5hYmxlOwotICAg
IGlmIChwcml2LT5zZXR0aW5ncy5lbmNvZGluZ19kZXRlY3RvciAhPSBlbmFibGUpIHsKLSAgICAg
ICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0VXNlc0VuY29kaW5nRGV0ZWN0b3IoZW5hYmxlKTsK
LSAgICAgICAgcHJpdi0+c2V0dGluZ3MuZW5jb2RpbmdfZGV0ZWN0b3IgPSBlbmFibGU7CisgICAg
aWYgKHByaXYtPnNldHRpbmdzLmVuY29kaW5nRGV0ZWN0b3IgIT0gZW5hYmxlKSB7CisgICAgICAg
IHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0VXNlc0VuY29kaW5nRGV0ZWN0b3IoZW5hYmxlKTsKKyAg
ICAgICAgcHJpdi0+c2V0dGluZ3MuZW5jb2RpbmdEZXRlY3RvciA9IGVuYWJsZTsKICAgICB9CiAg
ICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfZW5j
b2RpbmdfZGV0ZWN0b3JfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVX
S19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7Ci0gICAgcmV0
dXJuIHByaXYtPnNldHRpbmdzLmVuY29kaW5nX2RldGVjdG9yOworICAgIEVXS19WSUVXX1NEX0dF
VF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklF
V19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBy
ZXR1cm4gcHJpdi0+c2V0dGluZ3MuZW5jb2RpbmdEZXRlY3RvcjsKIH0KIAogRWluYV9Cb29sIGV3
a192aWV3X3NldHRpbmdfZW5hYmxlX2RldmVsb3Blcl9leHRyYXNfZ2V0KGNvbnN0IEV2YXNfT2Jq
ZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywg
c2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJp
diwgRUlOQV9GQUxTRSk7Ci0gICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmVuYWJsZV9kZXZlbG9w
ZXJfZXh0cmFzOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnRE
YXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnRE
YXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZW5hYmxl
RGV2ZWxvcGVyRXh0cmFzOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19lbmFibGVf
ZGV2ZWxvcGVyX2V4dHJhc19zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCBlbmFi
bGUpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9G
QUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZB
TFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwg
RUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwg
cHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgZW5hYmxlID0gISFlbmFibGU7Ci0gICAgaWYgKHByaXYt
PnNldHRpbmdzLmVuYWJsZV9kZXZlbG9wZXJfZXh0cmFzICE9IGVuYWJsZSkgewotICAgICAgICBw
cml2LT5wYWdlX3NldHRpbmdzLT5zZXREZXZlbG9wZXJFeHRyYXNFbmFibGVkKGVuYWJsZSk7Ci0g
ICAgICAgIHByaXYtPnNldHRpbmdzLmVuYWJsZV9kZXZlbG9wZXJfZXh0cmFzID0gZW5hYmxlOwor
ICAgIGlmIChwcml2LT5zZXR0aW5ncy5lbmFibGVEZXZlbG9wZXJFeHRyYXMgIT0gZW5hYmxlKSB7
CisgICAgICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZChl
bmFibGUpOworICAgICAgICBwcml2LT5zZXR0aW5ncy5lbmFibGVEZXZlbG9wZXJFeHRyYXMgPSBl
bmFibGU7CiAgICAgfQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKIGludCBld2tfdmlld19z
ZXR0aW5nX2ZvbnRfbWluaW11bV9zaXplX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykK
IHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAwKTsKLSAgICBF
V0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIDApOwotICAgIHJldHVybiBwcml2
LT5zZXR0aW5ncy5mb250X21pbmltdW1fc2l6ZTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVU
VVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgMCk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVU
VVJOKHNtYXJ0RGF0YSwgcHJpdiwgMCk7CisgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmZvbnRN
aW5pbXVtU2l6ZTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfZm9udF9taW5pbXVt
X3NpemVfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBpbnQgc2l6ZSkKIHsKLSAgICBFV0tfVklF
V19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklF
V19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwotICAgIGlmIChwcml2
LT5zZXR0aW5ncy5mb250X21pbmltdW1fc2l6ZSAhPSBzaXplKSB7Ci0gICAgICAgIHByaXYtPnBh
Z2Vfc2V0dGluZ3MtPnNldE1pbmltdW1Gb250U2l6ZShzaXplKTsKLSAgICAgICAgcHJpdi0+c2V0
dGluZ3MuZm9udF9taW5pbXVtX3NpemUgPSBzaXplOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9S
RVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklW
X0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBpZiAocHJp
di0+c2V0dGluZ3MuZm9udE1pbmltdW1TaXplICE9IHNpemUpIHsKKyAgICAgICAgcHJpdi0+cGFn
ZVNldHRpbmdzLT5zZXRNaW5pbXVtRm9udFNpemUoc2l6ZSk7CisgICAgICAgIHByaXYtPnNldHRp
bmdzLmZvbnRNaW5pbXVtU2l6ZSA9IHNpemU7CiAgICAgfQogICAgIHJldHVybiBFSU5BX1RSVUU7
CiB9CiAKIGludCBld2tfdmlld19zZXR0aW5nX2ZvbnRfbWluaW11bV9sb2dpY2FsX3NpemVfZ2V0
KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9S
RVRVUk4oZXdrVmlldywgc2QsIDApOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihz
ZCwgcHJpdiwgMCk7Ci0gICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmZvbnRfbWluaW11bV9sb2dp
Y2FsX3NpemU7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERh
dGEsIDApOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYs
IDApOworICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5mb250TWluaW11bUxvZ2ljYWxTaXplOwog
fQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19mb250X21pbmltdW1fbG9naWNhbF9zaXpl
X3NldChFdmFzX09iamVjdCogZXdrVmlldywgaW50IHNpemUpCiB7Ci0gICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJ
Vl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKLSAgICBpZiAocHJpdi0+c2V0
dGluZ3MuZm9udF9taW5pbXVtX2xvZ2ljYWxfc2l6ZSAhPSBzaXplKSB7Ci0gICAgICAgIHByaXYt
PnBhZ2Vfc2V0dGluZ3MtPnNldE1pbmltdW1Mb2dpY2FsRm9udFNpemUoc2l6ZSk7Ci0gICAgICAg
IHByaXYtPnNldHRpbmdzLmZvbnRfbWluaW11bV9sb2dpY2FsX3NpemUgPSBzaXplOworICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsK
KyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZB
TFNFKTsKKyAgICBpZiAocHJpdi0+c2V0dGluZ3MuZm9udE1pbmltdW1Mb2dpY2FsU2l6ZSAhPSBz
aXplKSB7CisgICAgICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0TWluaW11bUxvZ2ljYWxGb250
U2l6ZShzaXplKTsKKyAgICAgICAgcHJpdi0+c2V0dGluZ3MuZm9udE1pbmltdW1Mb2dpY2FsU2l6
ZSA9IHNpemU7CiAgICAgfQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKIGludCBld2tfdmll
d19zZXR0aW5nX2ZvbnRfZGVmYXVsdF9zaXplX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmll
dykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAwKTsKLSAg
ICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIDApOwotICAgIHJldHVybiBw
cml2LT5zZXR0aW5ncy5mb250X2RlZmF1bHRfc2l6ZTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1Jf
UkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgMCk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1Jf
UkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgMCk7CisgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmZv
bnREZWZhdWx0U2l6ZTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfZm9udF9kZWZh
dWx0X3NpemVfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBpbnQgc2l6ZSkKIHsKLSAgICBFV0tf
VklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tf
VklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwotICAgIGlmIChw
cml2LT5zZXR0aW5ncy5mb250X2RlZmF1bHRfc2l6ZSAhPSBzaXplKSB7Ci0gICAgICAgIHByaXYt
PnBhZ2Vfc2V0dGluZ3MtPnNldERlZmF1bHRGb250U2l6ZShzaXplKTsKLSAgICAgICAgcHJpdi0+
c2V0dGluZ3MuZm9udF9kZWZhdWx0X3NpemUgPSBzaXplOworICAgIEVXS19WSUVXX1NEX0dFVF9P
Ul9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19Q
UklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBpZiAo
cHJpdi0+c2V0dGluZ3MuZm9udERlZmF1bHRTaXplICE9IHNpemUpIHsKKyAgICAgICAgcHJpdi0+
cGFnZVNldHRpbmdzLT5zZXREZWZhdWx0Rm9udFNpemUoc2l6ZSk7CisgICAgICAgIHByaXYtPnNl
dHRpbmdzLmZvbnREZWZhdWx0U2l6ZSA9IHNpemU7CiAgICAgfQogICAgIHJldHVybiBFSU5BX1RS
VUU7CiB9CiAKIGludCBld2tfdmlld19zZXR0aW5nX2ZvbnRfbW9ub3NwYWNlX3NpemVfZ2V0KGNv
bnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRV
Uk4oZXdrVmlldywgc2QsIDApOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwg
cHJpdiwgMCk7Ci0gICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmZvbnRfbW9ub3NwYWNlX3NpemU7
CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIDApOwor
ICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIDApOworICAg
IHJldHVybiBwcml2LT5zZXR0aW5ncy5mb250TW9ub3NwYWNlU2l6ZTsKIH0KIAogRWluYV9Cb29s
IGV3a192aWV3X3NldHRpbmdfZm9udF9tb25vc3BhY2Vfc2l6ZV9zZXQoRXZhc19PYmplY3QqIGV3
a1ZpZXcsIGludCBzaXplKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmll
dywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwg
cHJpdiwgRUlOQV9GQUxTRSk7Ci0gICAgaWYgKHByaXYtPnNldHRpbmdzLmZvbnRfbW9ub3NwYWNl
X3NpemUgIT0gc2l6ZSkgewotICAgICAgICBwcml2LT5wYWdlX3NldHRpbmdzLT5zZXREZWZhdWx0
Rml4ZWRGb250U2l6ZShzaXplKTsKLSAgICAgICAgcHJpdi0+c2V0dGluZ3MuZm9udF9tb25vc3Bh
Y2Vfc2l6ZSA9IHNpemU7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBz
bWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihz
bWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIGlmIChwcml2LT5zZXR0aW5ncy5mb250
TW9ub3NwYWNlU2l6ZSAhPSBzaXplKSB7CisgICAgICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0
RGVmYXVsdEZpeGVkRm9udFNpemUoc2l6ZSk7CisgICAgICAgIHByaXYtPnNldHRpbmdzLmZvbnRN
b25vc3BhY2VTaXplID0gc2l6ZTsKICAgICB9CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAog
Y29uc3QgY2hhciogZXdrX3ZpZXdfZm9udF9mYW1pbHlfbmFtZV9nZXQoY29uc3QgRXZhc19PYmpl
Y3QqIGV3a1ZpZXcsIEV3a19Gb250X0ZhbWlseSBmb250RmFtaWx5KQogewotICAgIEVXS19WSUVX
X1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIDApOwotICAgIEVXS19WSUVXX1BSSVZfR0VU
X09SX1JFVFVSTihzZCwgcHJpdiwgMCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihl
d2tWaWV3LCBzbWFydERhdGEsIDApOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihz
bWFydERhdGEsIHByaXYsIDApOwogCiAgICAgc3dpdGNoIChmb250RmFtaWx5KSB7CiAgICAgY2Fz
ZSBFV0tfRk9OVF9GQU1JTFlfU1RBTkRBUkQ6Ci0gICAgICAgIHJldHVybiBwcml2LT5zZXR0aW5n
cy5mb250X3N0YW5kYXJkOworICAgICAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZm9udFN0YW5k
YXJkOwogICAgIGNhc2UgRVdLX0ZPTlRfRkFNSUxZX0NVUlNJVkU6Ci0gICAgICAgIHJldHVybiBw
cml2LT5zZXR0aW5ncy5mb250X2N1cnNpdmU7CisgICAgICAgIHJldHVybiBwcml2LT5zZXR0aW5n
cy5mb250Q3Vyc2l2ZTsKICAgICBjYXNlIEVXS19GT05UX0ZBTUlMWV9GQU5UQVNZOgotICAgICAg
ICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZm9udF9mYW50YXN5OworICAgICAgICByZXR1cm4gcHJp
di0+c2V0dGluZ3MuZm9udEZhbnRhc3k7CiAgICAgY2FzZSBFV0tfRk9OVF9GQU1JTFlfTU9OT1NQ
QUNFOgotICAgICAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZm9udF9tb25vc3BhY2U7CisgICAg
ICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5mb250TW9ub3NwYWNlOwogICAgIGNhc2UgRVdLX0ZP
TlRfRkFNSUxZX1NFUklGOgotICAgICAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZm9udF9zZXJp
ZjsKKyAgICAgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmZvbnRTZXJpZjsKICAgICBjYXNlIEVX
S19GT05UX0ZBTUlMWV9TQU5TX1NFUklGOgotICAgICAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3Mu
Zm9udF9zYW5zX3NlcmlmOworICAgICAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZm9udFNhbnNT
ZXJpZjsKICAgICB9CiAgICAgcmV0dXJuIDA7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19mb250
X2ZhbWlseV9uYW1lX3NldChFdmFzX09iamVjdCogZXdrVmlldywgRXdrX0ZvbnRfRmFtaWx5IGZv
bnRGYW1pbHksIGNvbnN0IGNoYXIqIG5hbWUpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JF
VFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1Jf
UkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVU
VVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9H
RVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CiAKICAgICBzd2l0Y2gg
KGZvbnRGYW1pbHkpIHsKICAgICBjYXNlIEVXS19GT05UX0ZBTUlMWV9TVEFOREFSRDoKLSAgICAg
ICAgaWYgKGVpbmFfc3RyaW5nc2hhcmVfcmVwbGFjZSgmcHJpdi0+c2V0dGluZ3MuZm9udF9zdGFu
ZGFyZCwgbmFtZSkpCi0gICAgICAgICAgICBwcml2LT5wYWdlX3NldHRpbmdzLT5zZXRTdGFuZGFy
ZEZvbnRGYW1pbHkoQXRvbWljU3RyaW5nOjpmcm9tVVRGOChuYW1lKSk7CisgICAgICAgIGlmIChl
aW5hX3N0cmluZ3NoYXJlX3JlcGxhY2UoJnByaXYtPnNldHRpbmdzLmZvbnRTdGFuZGFyZCwgbmFt
ZSkpCisgICAgICAgICAgICBwcml2LT5wYWdlU2V0dGluZ3MtPnNldFN0YW5kYXJkRm9udEZhbWls
eShBdG9taWNTdHJpbmc6OmZyb21VVEY4KG5hbWUpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBFV0tfRk9OVF9GQU1JTFlfQ1VSU0lWRToKLSAgICAgICAgaWYgKGVpbmFfc3RyaW5nc2hhcmVf
cmVwbGFjZSgmcHJpdi0+c2V0dGluZ3MuZm9udF9jdXJzaXZlLCBuYW1lKSkKLSAgICAgICAgICAg
IHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNldEN1cnNpdmVGb250RmFtaWx5KEF0b21pY1N0cmluZzo6
ZnJvbVVURjgobmFtZSkpOworICAgICAgICBpZiAoZWluYV9zdHJpbmdzaGFyZV9yZXBsYWNlKCZw
cml2LT5zZXR0aW5ncy5mb250Q3Vyc2l2ZSwgbmFtZSkpCisgICAgICAgICAgICBwcml2LT5wYWdl
U2V0dGluZ3MtPnNldEN1cnNpdmVGb250RmFtaWx5KEF0b21pY1N0cmluZzo6ZnJvbVVURjgobmFt
ZSkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEVXS19GT05UX0ZBTUlMWV9GQU5UQVNZOgot
ICAgICAgICBpZiAoZWluYV9zdHJpbmdzaGFyZV9yZXBsYWNlKCZwcml2LT5zZXR0aW5ncy5mb250
X2ZhbnRhc3ksIG5hbWUpKQotICAgICAgICAgICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0RmFu
dGFzeUZvbnRGYW1pbHkoQXRvbWljU3RyaW5nOjpmcm9tVVRGOChuYW1lKSk7CisgICAgICAgIGlm
IChlaW5hX3N0cmluZ3NoYXJlX3JlcGxhY2UoJnByaXYtPnNldHRpbmdzLmZvbnRGYW50YXN5LCBu
YW1lKSkKKyAgICAgICAgICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0RmFudGFzeUZvbnRGYW1p
bHkoQXRvbWljU3RyaW5nOjpmcm9tVVRGOChuYW1lKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgRVdLX0ZPTlRfRkFNSUxZX01PTk9TUEFDRToKLSAgICAgICAgaWYgKGVpbmFfc3RyaW5nc2hh
cmVfcmVwbGFjZSgmcHJpdi0+c2V0dGluZ3MuZm9udF9tb25vc3BhY2UsIG5hbWUpKQotICAgICAg
ICAgICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0Rml4ZWRGb250RmFtaWx5KEF0b21pY1N0cmlu
Zzo6ZnJvbVVURjgobmFtZSkpOworICAgICAgICBpZiAoZWluYV9zdHJpbmdzaGFyZV9yZXBsYWNl
KCZwcml2LT5zZXR0aW5ncy5mb250TW9ub3NwYWNlLCBuYW1lKSkKKyAgICAgICAgICAgIHByaXYt
PnBhZ2VTZXR0aW5ncy0+c2V0Rml4ZWRGb250RmFtaWx5KEF0b21pY1N0cmluZzo6ZnJvbVVURjgo
bmFtZSkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEVXS19GT05UX0ZBTUlMWV9TRVJJRjoK
LSAgICAgICAgaWYgKGVpbmFfc3RyaW5nc2hhcmVfcmVwbGFjZSgmcHJpdi0+c2V0dGluZ3MuZm9u
dF9zZXJpZiwgbmFtZSkpCi0gICAgICAgICAgICBwcml2LT5wYWdlX3NldHRpbmdzLT5zZXRTZXJp
ZkZvbnRGYW1pbHkoQXRvbWljU3RyaW5nOjpmcm9tVVRGOChuYW1lKSk7CisgICAgICAgIGlmIChl
aW5hX3N0cmluZ3NoYXJlX3JlcGxhY2UoJnByaXYtPnNldHRpbmdzLmZvbnRTZXJpZiwgbmFtZSkp
CisgICAgICAgICAgICBwcml2LT5wYWdlU2V0dGluZ3MtPnNldFNlcmlmRm9udEZhbWlseShBdG9t
aWNTdHJpbmc6OmZyb21VVEY4KG5hbWUpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBFV0tf
Rk9OVF9GQU1JTFlfU0FOU19TRVJJRjoKLSAgICAgICAgaWYgKGVpbmFfc3RyaW5nc2hhcmVfcmVw
bGFjZSgmcHJpdi0+c2V0dGluZ3MuZm9udF9zYW5zX3NlcmlmLCBuYW1lKSkKLSAgICAgICAgICAg
IHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNldFNhbnNTZXJpZkZvbnRGYW1pbHkoQXRvbWljU3RyaW5n
Ojpmcm9tVVRGOChuYW1lKSk7CisgICAgICAgIGlmIChlaW5hX3N0cmluZ3NoYXJlX3JlcGxhY2Uo
JnByaXYtPnNldHRpbmdzLmZvbnRTYW5zU2VyaWYsIG5hbWUpKQorICAgICAgICAgICAgcHJpdi0+
cGFnZVNldHRpbmdzLT5zZXRTYW5zU2VyaWZGb250RmFtaWx5KEF0b21pY1N0cmluZzo6ZnJvbVVU
RjgobmFtZSkpOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4g
RUlOQV9GQUxTRTsKQEAgLTIzMDMsOTkgKzIzMDMsOTkgQEAgRWluYV9Cb29sIGV3a192aWV3X2Zv
bnRfZmFtaWx5X25hbWVfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFd2tfRm9udF9GYW1pbHkg
Zm8KIAogRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfc3BhdGlhbF9uYXZpZ2F0aW9uX2dldChj
b25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVU
VVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9S
RVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwotICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5z
cGF0aWFsX25hdmlnYXRpb247CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3
LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVS
TihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIHJldHVybiBwcml2LT5zZXR0aW5n
cy5zcGF0aWFsTmF2aWdhdGlvbjsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfc3Bh
dGlhbF9uYXZpZ2F0aW9uX3NldChFdmFzX09iamVjdCogZXdrVmlldywgRWluYV9Cb29sIGVuYWJs
ZSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZB
TFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFM
U0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBF
SU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBw
cml2LCBFSU5BX0ZBTFNFKTsKICAgICBlbmFibGUgPSAhIWVuYWJsZTsKLSAgICBpZiAocHJpdi0+
c2V0dGluZ3Muc3BhdGlhbF9uYXZpZ2F0aW9uICE9IGVuYWJsZSkgewotICAgICAgICBwcml2LT5w
YWdlX3NldHRpbmdzLT5zZXRTcGF0aWFsTmF2aWdhdGlvbkVuYWJsZWQoZW5hYmxlKTsKLSAgICAg
ICAgcHJpdi0+c2V0dGluZ3Muc3BhdGlhbF9uYXZpZ2F0aW9uID0gZW5hYmxlOworICAgIGlmIChw
cml2LT5zZXR0aW5ncy5zcGF0aWFsTmF2aWdhdGlvbiAhPSBlbmFibGUpIHsKKyAgICAgICAgcHJp
di0+cGFnZVNldHRpbmdzLT5zZXRTcGF0aWFsTmF2aWdhdGlvbkVuYWJsZWQoZW5hYmxlKTsKKyAg
ICAgICAgcHJpdi0+c2V0dGluZ3Muc3BhdGlhbE5hdmlnYXRpb24gPSBlbmFibGU7CiAgICAgfQog
ICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2xv
Y2FsX3N0b3JhZ2VfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19W
SUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19W
SUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7Ci0gICAgcmV0dXJu
IHByaXYtPnNldHRpbmdzLmxvY2FsX3N0b3JhZ2U7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JF
VFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZf
R0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIHJldHVybiBw
cml2LT5zZXR0aW5ncy5sb2NhbFN0b3JhZ2U7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19zZXR0
aW5nX2xvY2FsX3N0b3JhZ2Vfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wgZW5h
YmxlKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFf
RkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9G
QUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEs
IEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEs
IHByaXYsIEVJTkFfRkFMU0UpOwogICAgIGVuYWJsZSA9ICEhZW5hYmxlOwotICAgIGlmIChwcml2
LT5zZXR0aW5ncy5sb2NhbF9zdG9yYWdlICE9IGVuYWJsZSkgewotICAgICAgICBwcml2LT5wYWdl
X3NldHRpbmdzLT5zZXRMb2NhbFN0b3JhZ2VFbmFibGVkKGVuYWJsZSk7Ci0gICAgICAgIHByaXYt
PnNldHRpbmdzLmxvY2FsX3N0b3JhZ2UgPSBlbmFibGU7CisgICAgaWYgKHByaXYtPnNldHRpbmdz
LmxvY2FsU3RvcmFnZSAhPSBlbmFibGUpIHsKKyAgICAgICAgcHJpdi0+cGFnZVNldHRpbmdzLT5z
ZXRMb2NhbFN0b3JhZ2VFbmFibGVkKGVuYWJsZSk7CisgICAgICAgIHByaXYtPnNldHRpbmdzLmxv
Y2FsU3RvcmFnZSA9IGVuYWJsZTsKICAgICB9CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAog
RWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfcGFnZV9jYWNoZV9nZXQoY29uc3QgRXZhc19PYmpl
Y3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBz
ZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2
LCBFSU5BX0ZBTFNFKTsKLSAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MucGFnZV9jYWNoZTsKKyAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxT
RSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlO
QV9GQUxTRSk7CisgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLnBhZ2VDYWNoZTsKIH0KIAogRWlu
YV9Cb29sIGV3a192aWV3X3NldHRpbmdfcGFnZV9jYWNoZV9zZXQoRXZhc19PYmplY3QqIGV3a1Zp
ZXcsIEVpbmFfQm9vbCBlbmFibGUpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihl
d2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJO
KHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3
a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1Jf
UkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgZW5hYmxlID0gISFlbmFi
bGU7Ci0gICAgaWYgKHByaXYtPnNldHRpbmdzLnBhZ2VfY2FjaGUgIT0gZW5hYmxlKSB7Ci0gICAg
ICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNldFVzZXNQYWdlQ2FjaGUoZW5hYmxlKTsKLSAgICAg
ICAgcHJpdi0+c2V0dGluZ3MucGFnZV9jYWNoZSA9IGVuYWJsZTsKKyAgICBpZiAocHJpdi0+c2V0
dGluZ3MucGFnZUNhY2hlICE9IGVuYWJsZSkgeworICAgICAgICBwcml2LT5wYWdlU2V0dGluZ3Mt
PnNldFVzZXNQYWdlQ2FjaGUoZW5hYmxlKTsKKyAgICAgICAgcHJpdi0+c2V0dGluZ3MucGFnZUNh
Y2hlID0gZW5hYmxlOwogICAgIH0KICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCiBjb25zdCBj
aGFyKiBld2tfdmlld19zZXR0aW5nX2xvY2FsX3N0b3JhZ2VfZGF0YWJhc2VfcGF0aF9nZXQoY29u
c3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
Tihld2tWaWV3LCBzZCwgMCk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBw
cml2LCAwKTsKLSAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MubG9jYWxfc3RvcmFnZV9kYXRhYmFz
ZV9wYXRoOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRh
LCAwKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCAw
KTsKKyAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MubG9jYWxTdG9yYWdlRGF0YWJhc2VQYXRoOwog
fQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19sb2NhbF9zdG9yYWdlX2RhdGFiYXNlX3Bh
dGhfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBjaGFyKiBwYXRoKQogewotICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVX
S19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7Ci0gICAgaWYg
KGVpbmFfc3RyaW5nc2hhcmVfcmVwbGFjZSgmcHJpdi0+c2V0dGluZ3MubG9jYWxfc3RvcmFnZV9k
YXRhYmFzZV9wYXRoLCBwYXRoKSkKLSAgICAgICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0TG9j
YWxTdG9yYWdlRGF0YWJhc2VQYXRoKFN0cmluZzo6ZnJvbVVURjgocGF0aCkpOworICAgIEVXS19W
SUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAg
ICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNF
KTsKKyAgICBpZiAoZWluYV9zdHJpbmdzaGFyZV9yZXBsYWNlKCZwcml2LT5zZXR0aW5ncy5sb2Nh
bFN0b3JhZ2VEYXRhYmFzZVBhdGgsIHBhdGgpKQorICAgICAgICBwcml2LT5wYWdlU2V0dGluZ3Mt
PnNldExvY2FsU3RvcmFnZURhdGFiYXNlUGF0aChTdHJpbmc6OmZyb21VVEY4KHBhdGgpKTsKICAg
ICByZXR1cm4gRUlOQV9UUlVFOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19taW5p
bXVtX3RpbWVyX2ludGVydmFsX3NldChFdmFzX09iamVjdCogZXdrVmlldywgZG91YmxlIGludGVy
dmFsKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFf
RkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9G
QUxTRSk7Ci0gICAgaWYgKGZhYnMocHJpdi0+c2V0dGluZ3MuZG9tX3RpbWVyX2ludGVydmFsIC0g
aW50ZXJ2YWwpID49IHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6ZXBzaWxvbigpKSB7Ci0g
ICAgICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNldE1pbkRPTVRpbWVySW50ZXJ2YWwoaW50ZXJ2
YWwpOwotICAgICAgICBwcml2LT5zZXR0aW5ncy5kb21fdGltZXJfaW50ZXJ2YWwgPSBpbnRlcnZh
bDsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlO
QV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJp
diwgRUlOQV9GQUxTRSk7CisgICAgaWYgKGZhYnMocHJpdi0+c2V0dGluZ3MuZG9tVGltZXJJbnRl
cnZhbCAtIGludGVydmFsKSA+PSBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmVwc2lsb24o
KSkgeworICAgICAgICBwcml2LT5wYWdlU2V0dGluZ3MtPnNldE1pbkRPTVRpbWVySW50ZXJ2YWwo
aW50ZXJ2YWwpOworICAgICAgICBwcml2LT5zZXR0aW5ncy5kb21UaW1lckludGVydmFsID0gaW50
ZXJ2YWw7CiAgICAgfQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKIGRvdWJsZSBld2tfdmll
d19zZXR0aW5nX21pbmltdW1fdGltZXJfaW50ZXJ2YWxfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBl
d2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJ
TkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlO
QV9GQUxTRSk7Ci0gICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmRvbV90aW1lcl9pbnRlcnZhbDsK
KyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9G
QUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwg
RUlOQV9GQUxTRSk7CisgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmRvbVRpbWVySW50ZXJ2YWw7
CiB9CiAKIEV3a19WaWV3X1NtYXJ0X0RhdGEqIGV3a192aWV3X3NtYXJ0X2RhdGFfZ2V0KGNvbnN0
IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrVmlldywgc2QsIDApOwotICAgIHJldHVybiBzZDsKKyAgICBFV0tfVklFV19TRF9HRVRfT1Jf
UkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgMCk7CisgICAgcmV0dXJuIHNtYXJ0RGF0YTsKIH0K
IAogLyoqCkBAIC0yNDYwLDggKzI0NjAsOCBAQCBjb25zdCBFd2tfU2Nyb2xsX1JlcXVlc3QqIGV3
a192aWV3X3Njcm9sbF9yZXF1ZXN0c19nZXQoY29uc3QgRXdrX1ZpZXdfUHJpdmF0ZV9EYQogICog
QHBhcmFtIHByaXYgcHJpdmF0ZSBoYW5kbGUgcG9pbnRlciBvZiB0aGUgdmlldyB0byBhZGQgcmVw
YWludCByZXF1ZXN0LgogICogQHBhcmFtIHggaG9yaXpvbnRhbCBwb3NpdGlvbiByZWxhdGl2ZSB0
byBjdXJyZW50IHZpZXcgcG9ydCAoc2Nyb2xsZWQpLgogICogQHBhcmFtIHkgdmVydGljYWwgcG9z
aXRpb24gcmVsYXRpdmUgdG8gY3VycmVudCB2aWV3IHBvcnQgKHNjcm9sbGVkKS4KLSAqIEBwYXJh
bSB3IHdpZHRoIG9mIGFyZWEgdG8gYmUgcmVwYWludGVkCi0gKiBAcGFyYW0gaCBoZWlnaHQgb2Yg
YXJlYSB0byBiZSByZXBhaW50ZWQKKyAqIEBwYXJhbSB3aWR0aCB3aWR0aCBvZiBhcmVhIHRvIGJl
IHJlcGFpbnRlZAorICogQHBhcmFtIGhlaWdodCBoZWlnaHQgb2YgYXJlYSB0byBiZSByZXBhaW50
ZWQKICAqCiAgKiBAbm90ZSB0aGlzIGlzIG5vdCBmb3IgZ2VuZXJhbCB1c2UgYnV0IGp1c3QgZm9y
IHN1YmNsYXNzZXMgdGhhdCB3YW50CiAgKiAgICAgICB0byBkZWZpbmUgdGhlaXIgb3duIGJhY2tp
bmcgc3RvcmUuCkBAIC0yNDg0LDEyICsyNDg0LDEyIEBAIHZvaWQgZXdrX3ZpZXdfbGF5b3V0X2lm
X25lZWRlZF9yZWN1cnNpdmUoRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKiBwcml2KQogewogICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHByaXYpOwogCi0gICAgV2ViQ29yZTo6RnJhbWVWaWV3
KiB2ID0gcHJpdi0+bWFpbl9mcmFtZS0+dmlldygpOwotICAgIGlmICghdikgeworICAgIFdlYkNv
cmU6OkZyYW1lVmlldyogdmlldyA9IHByaXYtPm1haW5GcmFtZS0+dmlldygpOworICAgIGlmICgh
dmlldykgewogICAgICAgICBFUlIoIm5vIG1haW4gZnJhbWUgdmlldyIpOwogICAgICAgICByZXR1
cm47CiAgICAgfQotICAgIHYtPnVwZGF0ZUxheW91dEFuZFN0eWxlSWZOZWVkZWRSZWN1cnNpdmUo
KTsKKyAgICB2aWV3LT51cGRhdGVMYXlvdXRBbmRTdHlsZUlmTmVlZGVkUmVjdXJzaXZlKCk7CiB9
CiAKIHZvaWQgZXdrX3ZpZXdfc2Nyb2xsc19wcm9jZXNzKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNt
YXJ0RGF0YSkKQEAgLTI1MTAsNyArMjUxMCw3IEBAIHZvaWQgZXdrX3ZpZXdfc2Nyb2xsc19wcm9j
ZXNzKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSkKICAqICAgICAgIHRvIGRlZmluZSB0
aGVpciBvd24gYmFja2luZyBzdG9yZS4KICAqLwogc3RydWN0IF9Fd2tfVmlld19QYWludF9Db250
ZXh0IHsKLSAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQqIGdjOworICAgIFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dCogZ3JhcGhpY0NvbnRleHQ7CiAgICAgV2ViQ29yZTo6RnJhbWVWaWV3KiB2
aWV3OwogICAgIGNhaXJvX3QqIGNyOwogfTsKQEAgLTI1MTksMjYgKzI1MTksMjYgQEAgRXdrX1Zp
ZXdfUGFpbnRfQ29udGV4dCogZXdrX3ZpZXdfcGFpbnRfY29udGV4dF9uZXcoRXdrX1ZpZXdfUHJp
dmF0ZV9EYXRhKiBwcml2LAogewogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChw
cml2LCAwKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoY3IsIDApOwotICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChwcml2LT5tYWluX2ZyYW1lLCAwKTsKLSAg
ICBXZWJDb3JlOjpGcmFtZVZpZXcqIHZpZXcgPSBwcml2LT5tYWluX2ZyYW1lLT52aWV3KCk7Cisg
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHByaXYtPm1haW5GcmFtZSwgMCk7Cisg
ICAgV2ViQ29yZTo6RnJhbWVWaWV3KiB2aWV3ID0gcHJpdi0+bWFpbkZyYW1lLT52aWV3KCk7CiAg
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHZpZXcsIDApOwotICAgIEV3a19WaWV3
X1BhaW50X0NvbnRleHQqIGN0eHQgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19QYWludF9Db250ZXh0
Kj4obWFsbG9jKHNpemVvZigqY3R4dCkpKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
Tl9WQUwoY3R4dCwgMCk7CisgICAgRXdrX1ZpZXdfUGFpbnRfQ29udGV4dCogY29udGV4dCA9IHN0
YXRpY19jYXN0PEV3a19WaWV3X1BhaW50X0NvbnRleHQqPihtYWxsb2Moc2l6ZW9mKCpjb250ZXh0
KSkpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChjb250ZXh0LCAwKTsKIAot
ICAgIGN0eHQtPmdjID0gbmV3IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dChjcik7Ci0gICAgaWYg
KCFjdHh0LT5nYykgewotICAgICAgICBmcmVlKGN0eHQpOworICAgIGNvbnRleHQtPmdyYXBoaWND
b250ZXh0ID0gbmV3IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dChjcik7CisgICAgaWYgKCFjb250
ZXh0LT5ncmFwaGljQ29udGV4dCkgeworICAgICAgICBmcmVlKGNvbnRleHQpOwogICAgICAgICBy
ZXR1cm4gMDsKICAgICB9Ci0gICAgY3R4dC0+dmlldyA9IHZpZXc7Ci0gICAgY3R4dC0+Y3IgPSBj
YWlyb19yZWZlcmVuY2UoY3IpOwotICAgIHJldHVybiBjdHh0OworICAgIGNvbnRleHQtPnZpZXcg
PSB2aWV3OworICAgIGNvbnRleHQtPmNyID0gY2Fpcm9fcmVmZXJlbmNlKGNyKTsKKyAgICByZXR1
cm4gY29udGV4dDsKIH0KIAogdm9pZCBld2tfdmlld19wYWludF9jb250ZXh0X2ZyZWUoRXdrX1Zp
ZXdfUGFpbnRfQ29udGV4dCogY29udGV4dCkKIHsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTihjb250ZXh0KTsKLSAgICBkZWxldGUgY29udGV4dC0+Z2M7CisgICAgZGVsZXRlIGNvbnRl
eHQtPmdyYXBoaWNDb250ZXh0OwogICAgIGNhaXJvX2Rlc3Ryb3koY29udGV4dC0+Y3IpOwogICAg
IGZyZWUoY29udGV4dCk7CiB9CkBAIC0yNTQ3LDEzICsyNTQ3LDEzIEBAIHZvaWQgZXdrX3ZpZXdf
cGFpbnRfY29udGV4dF9zYXZlKEV3a19WaWV3X1BhaW50X0NvbnRleHQqIGNvbnRleHQpCiB7CiAg
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oY29udGV4dCk7CiAgICAgY2Fpcm9fc2F2ZShj
b250ZXh0LT5jcik7Ci0gICAgY29udGV4dC0+Z2MtPnNhdmUoKTsKKyAgICBjb250ZXh0LT5ncmFw
aGljQ29udGV4dC0+c2F2ZSgpOwogfQogCiB2b2lkIGV3a192aWV3X3BhaW50X2NvbnRleHRfcmVz
dG9yZShFd2tfVmlld19QYWludF9Db250ZXh0KiBjb250ZXh0KQogewogICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOKGNvbnRleHQpOwotICAgIGNvbnRleHQtPmdjLT5yZXN0b3JlKCk7Cisg
ICAgY29udGV4dC0+Z3JhcGhpY0NvbnRleHQtPnJlc3RvcmUoKTsKICAgICBjYWlyb19yZXN0b3Jl
KGNvbnRleHQtPmNyKTsKIH0KIApAQCAtMjU2MSw3ICsyNTYxLDcgQEAgdm9pZCBld2tfdmlld19w
YWludF9jb250ZXh0X2NsaXAoRXdrX1ZpZXdfUGFpbnRfQ29udGV4dCogY29udGV4dCwgY29uc3Qg
RWluYV9SZWMKIHsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihjb250ZXh0KTsKICAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihhcmVhKTsKLSAgICBjb250ZXh0LT5nYy0+Y2xp
cChXZWJDb3JlOjpJbnRSZWN0KGFyZWEtPngsIGFyZWEtPnksIGFyZWEtPncsIGFyZWEtPmgpKTsK
KyAgICBjb250ZXh0LT5ncmFwaGljQ29udGV4dC0+Y2xpcChXZWJDb3JlOjpJbnRSZWN0KGFyZWEt
PngsIGFyZWEtPnksIGFyZWEtPncsIGFyZWEtPmgpKTsKIH0KIAogdm9pZCBld2tfdmlld19wYWlu
dF9jb250ZXh0X3BhaW50KEV3a19WaWV3X1BhaW50X0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEVp
bmFfUmVjdGFuZ2xlKiBhcmVhKQpAQCAtMjU3Miw4ICsyNTcyLDggQEAgdm9pZCBld2tfdmlld19w
YWludF9jb250ZXh0X3BhaW50KEV3a19WaWV3X1BhaW50X0NvbnRleHQqIGNvbnRleHQsIGNvbnN0
IEVpbmFfUmUKICAgICBXZWJDb3JlOjpJbnRSZWN0IHJlY3QoYXJlYS0+eCwgYXJlYS0+eSwgYXJl
YS0+dywgYXJlYS0+aCk7CiAKICAgICBpZiAoY29udGV4dC0+dmlldy0+aXNUcmFuc3BhcmVudCgp
KQotICAgICAgICBjb250ZXh0LT5nYy0+Y2xlYXJSZWN0KHJlY3QpOwotICAgIGNvbnRleHQtPnZp
ZXctPnBhaW50KGNvbnRleHQtPmdjLCByZWN0KTsKKyAgICAgICAgY29udGV4dC0+Z3JhcGhpY0Nv
bnRleHQtPmNsZWFyUmVjdChyZWN0KTsKKyAgICBjb250ZXh0LT52aWV3LT5wYWludChjb250ZXh0
LT5ncmFwaGljQ29udGV4dCwgcmVjdCk7CiB9CiAKIHZvaWQgZXdrX3ZpZXdfcGFpbnRfY29udGV4
dF9wYWludF9jb250ZW50cyhFd2tfVmlld19QYWludF9Db250ZXh0KiBjb250ZXh0LCBjb25zdCBF
aW5hX1JlY3RhbmdsZSogYXJlYSkKQEAgLTI1ODQsMjMgKzI1ODQsMjMgQEAgdm9pZCBld2tfdmll
d19wYWludF9jb250ZXh0X3BhaW50X2NvbnRlbnRzKEV3a19WaWV3X1BhaW50X0NvbnRleHQqIGNv
bnRleHQsIGNvbnMKICAgICBXZWJDb3JlOjpJbnRSZWN0IHJlY3QoYXJlYS0+eCwgYXJlYS0+eSwg
YXJlYS0+dywgYXJlYS0+aCk7CiAKICAgICBpZiAoY29udGV4dC0+dmlldy0+aXNUcmFuc3BhcmVu
dCgpKQotICAgICAgICBjb250ZXh0LT5nYy0+Y2xlYXJSZWN0KHJlY3QpOworICAgICAgICBjb250
ZXh0LT5ncmFwaGljQ29udGV4dC0+Y2xlYXJSZWN0KHJlY3QpOwogCi0gICAgY29udGV4dC0+dmll
dy0+cGFpbnRDb250ZW50cyhjb250ZXh0LT5nYywgcmVjdCk7CisgICAgY29udGV4dC0+dmlldy0+
cGFpbnRDb250ZW50cyhjb250ZXh0LT5ncmFwaGljQ29udGV4dCwgcmVjdCk7CiB9CiAKIHZvaWQg
ZXdrX3ZpZXdfcGFpbnRfY29udGV4dF9zY2FsZShFd2tfVmlld19QYWludF9Db250ZXh0KiBjb250
ZXh0LCBmbG9hdCBzY2FsZVgsIGZsb2F0IHNjYWxlWSkKIHsKICAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTihjb250ZXh0KTsKIAotICAgIGNvbnRleHQtPmdjLT5zY2FsZShXZWJDb3JlOjpG
bG9hdFNpemUoc2NhbGVYLCBzY2FsZVkpKTsKKyAgICBjb250ZXh0LT5ncmFwaGljQ29udGV4dC0+
c2NhbGUoV2ViQ29yZTo6RmxvYXRTaXplKHNjYWxlWCwgc2NhbGVZKSk7CiB9CiAKIHZvaWQgZXdr
X3ZpZXdfcGFpbnRfY29udGV4dF90cmFuc2xhdGUoRXdrX1ZpZXdfUGFpbnRfQ29udGV4dCogY29u
dGV4dCwgZmxvYXQgeCwgZmxvYXQgeSkKIHsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
Tihjb250ZXh0KTsKIAotICAgIGNvbnRleHQtPmdjLT50cmFuc2xhdGUoeCwgeSk7CisgICAgY29u
dGV4dC0+Z3JhcGhpY0NvbnRleHQtPnRyYW5zbGF0ZSh4LCB5KTsKIH0KIAogRWluYV9Cb29sIGV3
a192aWV3X3BhaW50KEV3a19WaWV3X1ByaXZhdGVfRGF0YSogcHJpdiwgY2Fpcm9fdCogY3IsIGNv
bnN0IEVpbmFfUmVjdGFuZ2xlKiBhcmVhKQpAQCAtMjYwOCwyMSArMjYwOCwyMSBAQCBFaW5hX0Jv
b2wgZXdrX3ZpZXdfcGFpbnQoRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKiBwcml2LCBjYWlyb190KiBj
ciwgY29uc3QgRWluYV9SZQogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChwcml2
LCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoY3IsIEVJ
TkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChhcmVhLCBFSU5B
X0ZBTFNFKTsKLSAgICBXZWJDb3JlOjpGcmFtZVZpZXcqIHZpZXcgPSBwcml2LT5tYWluX2ZyYW1l
LT52aWV3KCk7CisgICAgV2ViQ29yZTo6RnJhbWVWaWV3KiB2aWV3ID0gcHJpdi0+bWFpbkZyYW1l
LT52aWV3KCk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHZpZXcsIEVJTkFf
RkFMU0UpOwogCiAgICAgaWYgKHZpZXctPm5lZWRzTGF5b3V0KCkpCiAgICAgICAgIHZpZXctPmZv
cmNlTGF5b3V0KCk7Ci0gICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0IGdjKGNyKTsKKyAgICBX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KGNyKTsKICAgICBXZWJDb3Jl
OjpJbnRSZWN0IHJlY3QoYXJlYS0+eCwgYXJlYS0+eSwgYXJlYS0+dywgYXJlYS0+aCk7CiAKICAg
ICBjYWlyb19zYXZlKGNyKTsKLSAgICBnYy5zYXZlKCk7Ci0gICAgZ2MuY2xpcChyZWN0KTsKKyAg
ICBncmFwaGljc0NvbnRleHQuc2F2ZSgpOworICAgIGdyYXBoaWNzQ29udGV4dC5jbGlwKHJlY3Qp
OwogICAgIGlmICh2aWV3LT5pc1RyYW5zcGFyZW50KCkpCi0gICAgICAgIGdjLmNsZWFyUmVjdChy
ZWN0KTsKLSAgICB2aWV3LT5wYWludCgmZ2MsIHJlY3QpOwotICAgIGdjLnJlc3RvcmUoKTsKKyAg
ICAgICAgZ3JhcGhpY3NDb250ZXh0LmNsZWFyUmVjdChyZWN0KTsKKyAgICB2aWV3LT5wYWludCgm
Z3JhcGhpY3NDb250ZXh0LCByZWN0KTsKKyAgICBncmFwaGljc0NvbnRleHQucmVzdG9yZSgpOwog
ICAgIGNhaXJvX3Jlc3RvcmUoY3IpOwogCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKQEAgLTI2MzMs
MTkgKzI2MzMsMTkgQEAgRWluYV9Cb29sIGV3a192aWV3X3BhaW50X2NvbnRlbnRzKEV3a19WaWV3
X1ByaXZhdGVfRGF0YSogcHJpdiwgY2Fpcm9fdCogY3IsIGNvbnMKICAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTl9WQUwocHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk5fVkFMKGNyLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTl9WQUwoYXJlYSwgRUlOQV9GQUxTRSk7Ci0gICAgV2ViQ29yZTo6RnJhbWVWaWV3KiB2
aWV3ID0gcHJpdi0+bWFpbl9mcmFtZS0+dmlldygpOworICAgIFdlYkNvcmU6OkZyYW1lVmlldyog
dmlldyA9IHByaXYtPm1haW5GcmFtZS0+dmlldygpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOX1ZBTCh2aWV3LCBFSU5BX0ZBTFNFKTsKIAotICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dCBnYyhjcik7CisgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4
dChjcik7CiAgICAgV2ViQ29yZTo6SW50UmVjdCByZWN0KGFyZWEtPngsIGFyZWEtPnksIGFyZWEt
PncsIGFyZWEtPmgpOwogCiAgICAgY2Fpcm9fc2F2ZShjcik7Ci0gICAgZ2Muc2F2ZSgpOwotICAg
IGdjLmNsaXAocmVjdCk7CisgICAgZ3JhcGhpY3NDb250ZXh0LnNhdmUoKTsKKyAgICBncmFwaGlj
c0NvbnRleHQuY2xpcChyZWN0KTsKICAgICBpZiAodmlldy0+aXNUcmFuc3BhcmVudCgpKQotICAg
ICAgICBnYy5jbGVhclJlY3QocmVjdCk7Ci0gICAgdmlldy0+cGFpbnRDb250ZW50cygmZ2MsICBy
ZWN0KTsKLSAgICBnYy5yZXN0b3JlKCk7CisgICAgICAgIGdyYXBoaWNzQ29udGV4dC5jbGVhclJl
Y3QocmVjdCk7CisgICAgdmlldy0+cGFpbnRDb250ZW50cygmZ3JhcGhpY3NDb250ZXh0LCAgcmVj
dCk7CisgICAgZ3JhcGhpY3NDb250ZXh0LnJlc3RvcmUoKTsKICAgICBjYWlyb19yZXN0b3JlKGNy
KTsKIAogICAgIHJldHVybiBFSU5BX1RSVUU7CkBAIC0yNjc1LDggKzI2NzUsOCBAQCB2b2lkIGV3
a192aWV3X3JlYWR5KEV2YXNfT2JqZWN0KiBld2tWaWV3KQogICovCiB2b2lkIGV3a192aWV3X2lu
cHV0X21ldGhvZF9zdGF0ZV9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCBhY3Rp
dmUpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCk7Ci0gICAg
RVdLX1ZJRVdfUFJJVl9HRVQoc2QsIHByaXYpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRV
Uk4oZXdrVmlldywgc21hcnREYXRhKTsKKyAgICBFV0tfVklFV19QUklWX0dFVChzbWFydERhdGEs
IHByaXYpOwogICAgIFdlYkNvcmU6OkZyYW1lKiBmb2N1c2VkRnJhbWUgPSBwcml2LT5wYWdlLT5m
b2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCk7CiAKICAgICBwcml2LT5pbWgg
PSAwOwpAQCAtMjcyNSw4ICsyNzI1LDggQEAgdm9pZCBld2tfdmlld190aXRsZV9zZXQoRXZhc19P
YmplY3QqIGV3a1ZpZXcsIGNvbnN0IGNoYXIqIHRpdGxlKQogICovCiB2b2lkIGV3a192aWV3X3Vy
aV9jaGFuZ2VkKEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9P
Ul9SRVRVUk4oZXdrVmlldywgc2QpOwotICAgIGNvbnN0IGNoYXIqIHVyaSA9IGV3a19mcmFtZV91
cmlfZ2V0KHNkLT5tYWluX2ZyYW1lKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3
a1ZpZXcsIHNtYXJ0RGF0YSk7CisgICAgY29uc3QgY2hhciogdXJpID0gZXdrX2ZyYW1lX3VyaV9n
ZXQoc21hcnREYXRhLT5tYWluX2ZyYW1lKTsKICAgICBEQkcoImV3a1ZpZXc9JXAsIHVyaT0lcyIs
IGV3a1ZpZXcsIHVyaSA/IHVyaSA6ICIobnVsbCkiKTsKICAgICBldmFzX29iamVjdF9zbWFydF9j
YWxsYmFja19jYWxsKGV3a1ZpZXcsICJ1cmksY2hhbmdlZCIsICh2b2lkKil1cmkpOwogfQpAQCAt
MjczNSw3ICsyNzM1LDcgQEAgdm9pZCBld2tfdmlld191cmlfY2hhbmdlZChFdmFzX09iamVjdCog
ZXdrVmlldykKICAqIEBpbnRlcm5hbAogICogUmVwb3J0cyB0aGF0IGEgRE9NIGRvY3VtZW50IG9i
amVjdCBoYXMgZmluaXNoZWQgbG9hZGluZyBmb3IgQHAgZnJhbWUuCiAgKgotICogQHBhcmFtIG8g
VmlldyB3aGljaCBjb250YWlucyB0aGUgZnJhbWUuCisgKiBAcGFyYW0gZXdrVmlldyBWaWV3IHdo
aWNoIGNvbnRhaW5zIHRoZSBmcmFtZS4KICAqIEBwYXJhbSBmcmFtZSBUaGUgZnJhbWUgd2hvc2Ug
bG9hZCBoYXMgdHJpZ2dlcmVkIHRoZSBldmVudC4KICAqCiAgKiBFbWl0cyBzaWduYWw6ICJsb2Fk
LGRvY3VtZW50LGZpbmlzaGVkIiB3aXRoIEBwIGZyYW1lIGFzIHRoZSBwYXJhbWV0ZXIuCkBAIC0y
NzQ5LDcgKzI3NDksNyBAQCB2b2lkIGV3a192aWV3X2xvYWRfZG9jdW1lbnRfZmluaXNoZWQoRXZh
c19PYmplY3QqIGV3a1ZpZXcsIEV2YXNfT2JqZWN0KiBmcmFtZSkKICAqIEBpbnRlcm5hbAogICog
UmVwb3J0cyB0aGUgdmlldyBzdGFydGVkIGxvYWRpbmcgc29tZXRoaW5nLgogICoKLSAqIEBwYXJh
bSBvIFZpZXcuCisgKiBAcGFyYW0gZXdrVmlldyBWaWV3LgogICoKICAqIEVtaXRzIHNpZ25hbDog
ImxvYWQsc3RhcnRlZCIgd2l0aCBubyBwYXJhbWV0ZXJzLgogICovCkBAIC0yNzYyLDcgKzI3NjIs
NyBAQCB2b2lkIGV3a192aWV3X2xvYWRfc3RhcnRlZChFdmFzX09iamVjdCogZXdrVmlldykKIC8q
KgogICogUmVwb3J0cyB0aGUgZnJhbWUgc3RhcnRlZCBsb2FkaW5nIHNvbWV0aGluZy4KICAqCi0g
KiBAcGFyYW0gbyBWaWV3LgorICogQHBhcmFtIGV3a1ZpZXcgVmlldy4KICAqCiAgKiBFbWl0cyBz
aWduYWw6ICJsb2FkLHN0YXJ0ZWQiIG9uIG1haW4gZnJhbWUgd2l0aCBubyBwYXJhbWV0ZXJzLgog
ICovCkBAIC0yNzc3LDcgKzI3NzcsNyBAQCB2b2lkIGV3a192aWV3X2ZyYW1lX21haW5fbG9hZF9z
dGFydGVkKEV2YXNfT2JqZWN0KiBld2tWaWV3KQogICogQGludGVybmFsCiAgKiBSZXBvcnRzIHRo
ZSBtYWluIGZyYW1lIHN0YXJ0ZWQgcHJvdmlzaW9uYWwgbG9hZC4KICAqCi0gKiBAcGFyYW0gbyBW
aWV3LgorICogQHBhcmFtIGV3a1ZpZXcgVmlldy4KICAqCiAgKiBFbWl0cyBzaWduYWw6ICJsb2Fk
LHByb3Zpc2lvbmFsIiBvbiBWaWV3IHdpdGggbm8gcGFyYW1ldGVycy4KICAqLwpAQCAtMjc5MSw3
ICsyNzkxLDcgQEAgdm9pZCBld2tfdmlld19sb2FkX3Byb3Zpc2lvbmFsKEV2YXNfT2JqZWN0KiBl
d2tWaWV3KQogICogQGludGVybmFsCiAgKiBSZXBvcnRzIHZpZXcgY2FuIGJlIHNob3duIGFmdGVy
IGEgbmV3IHdpbmRvdyBpcyBjcmVhdGVkLgogICoKLSAqIEBwYXJhbSBvIEZyYW1lLgorICogQHBh
cmFtIGV3a1ZpZXcgRnJhbWUuCiAgKgogICogRW1pdHMgc2lnbmFsOiAibG9hZCxuZXd3aW5kb3cs
c2hvdyIgb24gdmlldyB3aXRoIG5vIHBhcmFtZXRlcnMuCiAgKi8KQEAgLTI4MDYsMjEgKzI4MDYs
MjEgQEAgdm9pZCBld2tfdmlld19sb2FkX3Nob3coRXZhc19PYmplY3QqIGV3a1ZpZXcpCiAgKiBA
aW50ZXJuYWwKICAqIFJlcG9ydHMgdGhlIG1haW4gZnJhbWUgd2FzIGNsZWFyZWQuCiAgKgotICog
QHBhcmFtIG8gVmlldy4KKyAqIEBwYXJhbSBld2tWaWV3IFZpZXcuCiAgKi8KIHZvaWQgZXdrX3Zp
ZXdfZnJhbWVfbWFpbl9jbGVhcmVkKEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewogICAgIERCRygi
ZXdrVmlldz0lcCIsIGV3a1ZpZXcpOwotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdr
Vmlldywgc2QpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGktPmZsdXNo
KTsKLSAgICBzZC0+YXBpLT5mbHVzaChzZCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
Tihld2tWaWV3LCBzbWFydERhdGEpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNt
YXJ0RGF0YS0+YXBpLT5mbHVzaCk7CisgICAgc21hcnREYXRhLT5hcGktPmZsdXNoKHNtYXJ0RGF0
YSk7CiB9CiAKIC8qKgogICogQGludGVybmFsCiAgKiBSZXBvcnRzIHRoZSBtYWluIGZyYW1lIHJl
Y2VpdmVkIGFuIGljb24uCiAgKgotICogQHBhcmFtIG8gVmlldy4KKyAqIEBwYXJhbSBld2tWaWV3
IFZpZXcuCiAgKgogICogRW1pdHMgc2lnbmFsOiAiaWNvbixyZWNlaXZlZCIgd2l0aCBubyBwYXJh
bWV0ZXJzLgogICovCkBAIC0yODY3LDEwICsyODY3LDEwIEBAIHZvaWQgZXdrX3ZpZXdfbG9hZF9l
cnJvcihFdmFzX09iamVjdCogZXdrVmlldywgY29uc3QgRXdrX0ZyYW1lX0xvYWRfRXJyb3IqIGVy
cm9yCiAgKi8KIHZvaWQgZXdrX3ZpZXdfbG9hZF9wcm9ncmVzc19jaGFuZ2VkKEV2YXNfT2JqZWN0
KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2Qp
OwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdik7CisgICAgRVdLX1ZJ
RVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEpOworICAgIEVXS19WSUVXX1BS
SVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYpOwogCi0gICAgLy8gRXZhc19Db29yZCB3
LCBoOworICAgIC8vIEV2YXNfQ29vcmQgd2lkdGgsIGhlaWdodDsKICAgICBkb3VibGUgcHJvZ3Jl
c3MgPSBwcml2LT5wYWdlLT5wcm9ncmVzcygpLT5lc3RpbWF0ZWRQcm9ncmVzcygpOwogCiAgICAg
REJHKCJld2tWaWV3PSVwIChwPSUwLjNmKSIsIGV3a1ZpZXcsIHByb2dyZXNzKTsKQEAgLTI4ODAs
OSArMjg4MCw5IEBAIHZvaWQgZXdrX3ZpZXdfbG9hZF9wcm9ncmVzc19jaGFuZ2VkKEV2YXNfT2Jq
ZWN0KiBld2tWaWV3KQogCiAvKioKICAqIEBpbnRlcm5hbAotICogUmVwb3J0cyB2aWV3IEBwYXJh
bSBvIHNob3VsZCBiZSByZXN0b3JlZCB0byBkZWZhdWx0IGNvbmRpdGlvbnMKKyAqIFJlcG9ydHMg
dmlldyBAcGFyYW0gZXdrVmlldyBzaG91bGQgYmUgcmVzdG9yZWQgdG8gZGVmYXVsdCBjb25kaXRp
b25zCiAgKgotICogQHBhcmFtIG8gVmlldy4KKyAqIEBwYXJhbSBld2tWaWV3IFZpZXcuCiAgKiBA
cGFyYW0gZnJhbWUgRnJhbWUgdGhhdCBvcmlnaW5hdGVkIHJlc3RvcmUuCiAgKgogICogRW1pdHMg
c2lnbmFsOiAicmVzdG9yZSIgd2l0aCBmcmFtZS4KQEAgLTI5MDIsMzAgKzI5MDIsMzAgQEAgdm9p
ZCBld2tfdmlld19yZXN0b3JlX3N0YXRlKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFdmFzX09iamVj
dCogZnJhbWUpCiAgKiBjYWxsaW5nIGV3a193aW5kb3dfZmVhdHVyZXNfcmVmKHdpbmRvd19mZWF0
dXJlcykuIE90aGVyd2lzZSB0aGlzIHN0cnVjdCB3aWxsCiAgKiBiZSBmcmVlZCBhZnRlciByZXR1
cm5pbmcgdG8gdGhpcyBmdW5jdGlvbi4KICAqCi0gKiBAcGFyYW0gbyBDdXJyZW50IHZpZXcuCisg
KiBAcGFyYW0gZXdrVmlldyBDdXJyZW50IHZpZXcuCiAgKiBAcGFyYW0gamF2YXNjcmlwdCBAYyBF
SU5BX1RSVUUgaWYgdGhlIG5ldyB3aW5kb3cgaXMgb3JpZ2luYXRlZCBmcm9tIGphdmFzY3JpcHQs
CiAgKiBAYyBFSU5BX0ZBTFNFIG90aGVyd2lzZQotICogQHBhcmFtIHdpbmRvd19mZWF0dXJlcyBG
ZWF0dXJlcyBvZiB0aGUgbmV3IHdpbmRvdyBiZWluZyBjcmVhdGVkLiBJZiBpdCdzIEBjCisgKiBA
cGFyYW0gd2lkdGhpbmRvd19mZWF0dXJlcyBGZWF0dXJlcyBvZiB0aGUgbmV3IHdpbmRvdyBiZWlu
ZyBjcmVhdGVkLiBJZiBpdCdzIEBjCiAgKiBOVUxMLCBpdCB3aWxsIGJlIGNyZWF0ZWQgYSB3aW5k
b3cgd2l0aCBkZWZhdWx0IGZlYXR1cmVzLgogICoKICAqIEByZXR1cm4gTmV3IHZpZXcsIGluIGNh
c2Ugc21hcnQgY2xhc3MgaW1wbGVtZW50cyB0aGUgY3JlYXRpb24gb2YgbmV3IHdpbmRvd3M7Ci0g
KiBlbHNlLCBjdXJyZW50IHZpZXcgQHBhcmFtIG8gb3IgQGMgMCBvbiBmYWlsdXJlLgorICogZWxz
ZSwgY3VycmVudCB2aWV3IEBwYXJhbSBld2tWaWV3IG9yIEBjIDAgb24gZmFpbHVyZS4KICAqCiAg
KiBAc2VlIGV3a193aW5kb3dfZmVhdHVyZXNfcmVmKCkuCiAgKi8KIEV2YXNfT2JqZWN0KiBld2tf
dmlld193aW5kb3dfY3JlYXRlKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wgamF2YXNj
cmlwdCwgY29uc3QgV2ViQ29yZTo6V2luZG93RmVhdHVyZXMqIGNvcmVGZWF0dXJlcykKIHsKLSAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAwKTsKKyAgICBFV0tfVklF
V19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgMCk7CiAKLSAgICBpZiAoIXNk
LT5hcGktPndpbmRvd19jcmVhdGUpCisgICAgaWYgKCFzbWFydERhdGEtPmFwaS0+d2luZG93X2Ny
ZWF0ZSkKICAgICAgICAgcmV0dXJuIGV3a1ZpZXc7CiAKLSAgICBFd2tfV2luZG93X0ZlYXR1cmVz
KiB3aW5kb3dfZmVhdHVyZXMgPSBld2tfd2luZG93X2ZlYXR1cmVzX25ld19mcm9tX2NvcmUoY29y
ZUZlYXR1cmVzKTsKLSAgICBpZiAoIXdpbmRvd19mZWF0dXJlcykKKyAgICBFd2tfV2luZG93X0Zl
YXR1cmVzKiB3aW5kb3dGZWF0dXJlcyA9IGV3a193aW5kb3dfZmVhdHVyZXNfbmV3X2Zyb21fY29y
ZShjb3JlRmVhdHVyZXMpOworICAgIGlmICghd2luZG93RmVhdHVyZXMpCiAgICAgICAgIHJldHVy
biAwOwogCi0gICAgRXZhc19PYmplY3QqIHZpZXcgPSBzZC0+YXBpLT53aW5kb3dfY3JlYXRlKHNk
LCBqYXZhc2NyaXB0LCB3aW5kb3dfZmVhdHVyZXMpOwotICAgIGV3a193aW5kb3dfZmVhdHVyZXNf
dW5yZWYod2luZG93X2ZlYXR1cmVzKTsKKyAgICBFdmFzX09iamVjdCogdmlldyA9IHNtYXJ0RGF0
YS0+YXBpLT53aW5kb3dfY3JlYXRlKHNtYXJ0RGF0YSwgamF2YXNjcmlwdCwgd2luZG93RmVhdHVy
ZXMpOworICAgIGV3a193aW5kb3dfZmVhdHVyZXNfdW5yZWYod2luZG93RmVhdHVyZXMpOwogCiAg
ICAgcmV0dXJuIHZpZXc7CiB9CkBAIC0yOTM5LDE2ICsyOTM5LDE2IEBAIEV2YXNfT2JqZWN0KiBl
d2tfdmlld193aW5kb3dfY3JlYXRlKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wgamF2
YXNjcmlwdCwKICAqIHdpdGggYSAnc2VsZi5jbG9zZSgpJyBpbiBKYXZhc2NyaXB0KSBicm93c2Vy
IG11c3QgcG9zdHBvbmUgdGhlIGRlbGV0aW9uIHRvIGFuCiAgKiBpZGxlci4KICAqCi0gKiBAcGFy
YW0gbyBWaWV3IHRvIGJlIGNsb3NlZC4KKyAqIEBwYXJhbSBld2tWaWV3IFZpZXcgdG8gYmUgY2xv
c2VkLgogICovCiB2b2lkIGV3a192aWV3X3dpbmRvd19jbG9zZShFdmFzX09iamVjdCogZXdrVmll
dykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkKTsKKyAgICBF
V0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSk7CiAKICAgICBld2tf
dmlld19zdG9wKGV3a1ZpZXcpOwotICAgIGlmICghc2QtPmFwaS0+d2luZG93X2Nsb3NlKQorICAg
IGlmICghc21hcnREYXRhLT5hcGktPndpbmRvd19jbG9zZSkKICAgICAgICAgcmV0dXJuOwotICAg
IHNkLT5hcGktPndpbmRvd19jbG9zZShzZCk7CisgICAgc21hcnREYXRhLT5hcGktPndpbmRvd19j
bG9zZShzbWFydERhdGEpOwogfQogCiAvKioKQEAgLTI5ODksNyArMjk4OSw3IEBAIHZvaWQgZXdr
X3ZpZXdfdG9vbGJhcnNfdmlzaWJsZV9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9v
bCB2aXNpYmxlKQogICogQGludGVybmFsCiAgKiBHZXQgdG9vbGJhciB2aXNpYmlsaXR5LgogICoK
LSAqIEBwYXJhbSBvIFZpZXcuCisgKiBAcGFyYW0gZXdrVmlldyBWaWV3LgogICogQHBhcmFtIHZp
c2libGUgYm9vbGVhbiBwb2ludGVyIGluIHdoaWNoIHRvIHNhdmUgdGhlIHJlc3VsdC4gSXQgZGVm
YXVsdHMKICAqIHRvIEBjIEZBTFNFLCBpLmUuIGlmIGJyb3dzZXIgZG9lcyBubyBsaXN0ZW4gdG8g
ZW1pdHRlZCBzaWduYWwsIGl0IG1lYW5zCiAgKiB0aGVyZSBhcmUgbm8gdG9vbGJhcnMgYW5kIHRo
ZXJlZm9yZSB0aGV5IGFyZSBub3QgdmlzaWJsZS4KQEAgLTMwMDcsNyArMzAwNyw3IEBAIHZvaWQg
ZXdrX3ZpZXdfdG9vbGJhcnNfdmlzaWJsZV9nZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFf
Qm9vbCogdmlzaWJsZSkKICAqIEBpbnRlcm5hbAogICogU2V0IHN0YXR1c2JhciB2aXNpYmxlLgog
ICoKLSAqIEBwYXJhbSBvIFZpZXcuCisgKiBAcGFyYW0gZXdrVmlldyBWaWV3LgogICogQHBhcmFt
IHZpc2libGUgQGMgVFJVRSBpZiBzdGF0dXNiYXIgYXJlIHZpc2libGUsIEBjIEZBTFNFIG90aGVy
d2lzZS4KICAqCiAgKiBFbWl0cyBzaWduYWw6ICJzdGF0dXNiYXIsdmlzaWJsZSxzZXQiIHdpdGgg
YSBwb2ludGVyIHRvIGEgYm9vbGVhbi4KQEAgLTMwMjIsNyArMzAyMiw3IEBAIHZvaWQgZXdrX3Zp
ZXdfc3RhdHVzYmFyX3Zpc2libGVfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wg
dmlzaWJsZSkKICAqIEBpbnRlcm5hbAogICogR2V0IHN0YXR1c2JhciB2aXNpYmlsaXR5LgogICoK
LSAqIEBwYXJhbSBvIFZpZXcuCisgKiBAcGFyYW0gZXdrVmlldyBWaWV3LgogICogQHBhcmFtIHZp
c2libGUgYm9vbGVhbiBwb2ludGVyIGluIHdoaWNoIHRvIHNhdmUgdGhlIHJlc3VsdC4gSXQgZGVm
YXVsdHMKICAqIHRvIEBjIEZBTFNFLCBpLmUuIGlmIGJyb3dzZXIgZG9lcyBubyBsaXN0ZW4gdG8g
ZW1pdHRlZCBzaWduYWwsIGl0IG1lYW5zCiAgKiB0aGVyZSBpcyBubyBzdGF0dXNiYXIgYW5kIHRo
ZXJlZm9yZSBpdCBpcyBub3QgdmlzaWJsZS4KQEAgLTMwNDAsNyArMzA0MCw3IEBAIHZvaWQgZXdr
X3ZpZXdfc3RhdHVzYmFyX3Zpc2libGVfZ2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jv
b2wqIHZpc2libGUpCiAgKiBAaW50ZXJuYWwKICAqIFNldCB0ZXh0IG9mIHN0YXR1c2JhcgogICoK
LSAqIEBwYXJhbSBvIFZpZXcuCisgKiBAcGFyYW0gZXdrVmlldyBWaWV3LgogICogQHBhcmFtIHRl
eHQgTmV3IHRleHQgdG8gcHV0IG9uIHN0YXR1c2Jhci4KICAqCiAgKiBFbWl0cyBzaWduYWw6ICJz
dGF0dXNiYXIsdGV4dCxzZXQiIHdpdGggYSBzdHJpbmcuCkBAIC0zMDU2LDcgKzMwNTYsNyBAQCB2
b2lkIGV3a192aWV3X3N0YXR1c2Jhcl90ZXh0X3NldChFdmFzX09iamVjdCogZXdrVmlldywgY29u
c3QgY2hhciogdGV4dCkKICAqIEBpbnRlcm5hbAogICogU2V0IHNjcm9sbGJhcnMgdmlzaWJsZS4K
ICAqCi0gKiBAcGFyYW0gbyBWaWV3LgorICogQHBhcmFtIGV3a1ZpZXcgVmlldy4KICAqIEBwYXJh
bSB2aXNpYmxlIEBjIFRSVUUgaWYgc2Nyb2xsYmFycyBhcmUgdmlzaWJsZSwgQGMgRkFMU0Ugb3Ro
ZXJ3aXNlLgogICoKICAqIEVtaXRzIHNpZ25hbDogInNjcm9sbGJhcnMsdmlzaWJsZSxzZXQiIHdp
dGggYSBwb2ludGVyIHRvIGEgYm9vbGVhbi4KQEAgLTMwNzEsNyArMzA3MSw3IEBAIHZvaWQgZXdr
X3ZpZXdfc2Nyb2xsYmFyc192aXNpYmxlX3NldChFdmFzX09iamVjdCogZXdrVmlldywgRWluYV9C
b29sIHZpc2libGUpCiAgKiBAaW50ZXJuYWwKICAqIEdldCBzY3JvbGxiYXJzIHZpc2liaWxpdHku
CiAgKgotICogQHBhcmFtIG8gVmlldy4KKyAqIEBwYXJhbSBld2tWaWV3IFZpZXcuCiAgKiBAcGFy
YW0gdmlzaWJsZSBib29sZWFuIHBvaW50ZXIgaW4gd2hpY2ggdG8gc2F2ZSB0aGUgcmVzdWx0LiBJ
dCBkZWZhdWx0cwogICogdG8gQGMgRkFMU0UsIGkuZS4gaWYgYnJvd3NlciBkb2VzIG5vIGxpc3Rl
biB0byBlbWl0dGVkIHNpZ25hbCwgaXQgbWVhbnMKICAqIHRoZXJlIGFyZSBubyBzY3JvbGxiYXJz
IGFuZCB0aGVyZWZvcmUgdGhleSBhcmUgbm90IHZpc2libGUuCkBAIC0zMDg5LDcgKzMwODksNyBA
QCB2b2lkIGV3a192aWV3X3Njcm9sbGJhcnNfdmlzaWJsZV9nZXQoRXZhc19PYmplY3QqIGV3a1Zp
ZXcsIEVpbmFfQm9vbCogdmlzaWJsZSkKICAqIEBpbnRlcm5hbAogICogU2V0IG1lbnViYXIgdmlz
aWJsZS4KICAqCi0gKiBAcGFyYW0gbyBWaWV3LgorICogQHBhcmFtIGV3a1ZpZXcgVmlldy4KICAq
IEBwYXJhbSB2aXNpYmxlIEBjIFRSVUUgaWYgbWVudWJhciBpcyB2aXNpYmxlLCBAYyBGQUxTRSBv
dGhlcndpc2UuCiAgKgogICogRW1pdHMgc2lnbmFsOiAibWVudWJhcix2aXNpYmxlLHNldCIgd2l0
aCBhIHBvaW50ZXIgdG8gYSBib29sZWFuLgpAQCAtMzEwNCw3ICszMTA0LDcgQEAgdm9pZCBld2tf
dmlld19tZW51YmFyX3Zpc2libGVfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wg
dmlzaWJsZSkKICAqIEBpbnRlcm5hbAogICogR2V0IG1lbnViYXIgdmlzaWJpbGl0eS4KICAqCi0g
KiBAcGFyYW0gbyBWaWV3LgorICogQHBhcmFtIGV3a1ZpZXcgVmlldy4KICAqIEBwYXJhbSB2aXNp
YmxlIGJvb2xlYW4gcG9pbnRlciBpbiB3aGljaCB0byBzYXZlIHRoZSByZXN1bHQuIEl0IGRlZmF1
bHRzCiAgKiB0byBAYyBGQUxTRSwgaS5lLiBpZiBicm93c2VyIGRvZXMgbm8gbGlzdGVuIHRvIGVt
aXR0ZWQgc2lnbmFsLCBpdCBtZWFucwogICogdGhlcmUgaXMgbm8gbWVudWJhciBhbmQgdGhlcmVm
b3JlIGl0IGlzIG5vdCB2aXNpYmxlLgpAQCAtMzEyMiw3ICszMTIyLDcgQEAgdm9pZCBld2tfdmll
d19tZW51YmFyX3Zpc2libGVfZ2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wqIHZp
c2libGUpCiAgKiBAaW50ZXJuYWwKICAqIFNldCB0b29sdGlwIHRleHQgYW5kIGRpc3BsYXkgaWYg
aXQgaXMgY3VycmVudGx5IGhpZGRlbi4KICAqCi0gKiBAcGFyYW0gbyBWaWV3LgorICogQHBhcmFt
IGV3a1ZpZXcgVmlldy4KICAqIEBwYXJhbSB0ZXh0IFRleHQgdG8gc2V0IHRvb2x0aXAgdG8uCiAg
KgogICogRW1pdHMgc2lnbmFsOiAidG9vbHRpcCx0ZXh0LHNldCIgd2l0aCBhIHN0cmluZy4gSWYg
dG9vbHRpcCBtdXN0IGJlIGFjdHVhbGx5CkBAIC0zMTM3LDcgKzMxMzcsNyBAQCB2b2lkIGV3a192
aWV3X3Rvb2x0aXBfdGV4dF9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGNvbnN0IGNoYXIqIHRl
eHQpCiAvKioKICAqIEBpbnRlcm5hbAogICoKLSAqIEBwYXJhbSBvIFZpZXcuCisgKiBAcGFyYW0g
ZXdrVmlldyBWaWV3LgogICogQHBhcmFtIG1lc3NhZ2UgU3RyaW5nIHRvIHNob3cgb24gY29uc29s
ZS4KICAqIEBwYXJhbSBsaW5lTnVtYmVyIExpbmUgbnVtYmVyLgogICogQHNvdXJjZUlEIFNvdXJj
ZSBpZC4KQEAgLTMxNDYsNTggKzMxNDYsNTggQEAgdm9pZCBld2tfdmlld190b29sdGlwX3RleHRf
c2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBjaGFyKiB0ZXh0KQogdm9pZCBld2tfdmll
d19hZGRfY29uc29sZV9tZXNzYWdlKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBjaGFyKiBt
ZXNzYWdlLCB1bnNpZ25lZCBpbnQgbGluZU51bWJlciwgY29uc3QgY2hhciogc291cmNlSUQpCiB7
CiAgICAgREJHKCJld2tWaWV3PSVwIG1lc3NhZ2U9JXMgbGluZU51bWJlcj0ldSBzb3VyY2VJRD0l
cyIsIGV3a1ZpZXcsIG1lc3NhZ2UsIGxpbmVOdW1iZXIsIHNvdXJjZUlEKTsKLSAgICBFV0tfVklF
V19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTihzZC0+YXBpKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBp
LT5hZGRfY29uc29sZV9tZXNzYWdlKTsKLSAgICBzZC0+YXBpLT5hZGRfY29uc29sZV9tZXNzYWdl
KHNkLCBtZXNzYWdlLCBsaW5lTnVtYmVyLCBzb3VyY2VJRCk7CisgICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOKHNtYXJ0RGF0YS0+YXBpKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihz
bWFydERhdGEtPmFwaS0+YWRkX2NvbnNvbGVfbWVzc2FnZSk7CisgICAgc21hcnREYXRhLT5hcGkt
PmFkZF9jb25zb2xlX21lc3NhZ2Uoc21hcnREYXRhLCBtZXNzYWdlLCBsaW5lTnVtYmVyLCBzb3Vy
Y2VJRCk7CiB9CiAKIGJvb2wgZXdrX3ZpZXdfZm9jdXNfY2FuX2N5Y2xlKEV2YXNfT2JqZWN0KiBl
d2tWaWV3LCBFd2tfRm9jdXNfRGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKICAgICBEQkcoImV3a1Zp
ZXc9JXAgZGlyZWN0aW9uPSVkIiwgZXdrVmlldywgZGlyZWN0aW9uKTsKLSAgICBFV0tfVklFV19T
RF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBmYWxzZSk7Ci0gICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk5fVkFMKHNkLT5hcGksIGZhbHNlKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1Jf
UkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgZmFsc2UpOworICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmFwaSwgZmFsc2UpOwogCi0gICAgaWYgKCFzZC0+YXBp
LT5mb2N1c19jYW5fY3ljbGUpCisgICAgaWYgKCFzbWFydERhdGEtPmFwaS0+Zm9jdXNfY2FuX2N5
Y2xlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gc2QtPmFwaS0+Zm9jdXNf
Y2FuX2N5Y2xlKHNkLCBkaXJlY3Rpb24pOworICAgIHJldHVybiBzbWFydERhdGEtPmFwaS0+Zm9j
dXNfY2FuX2N5Y2xlKHNtYXJ0RGF0YSwgZGlyZWN0aW9uKTsKIH0KIAogdm9pZCBld2tfdmlld19y
dW5famF2YXNjcmlwdF9hbGVydChFdmFzX09iamVjdCogZXdrVmlldywgRXZhc19PYmplY3QqIGZy
YW1lLCBjb25zdCBjaGFyKiBtZXNzYWdlKQogewogICAgIERCRygiZXdrVmlldz0lcCBmcmFtZT0l
cCBtZXNzYWdlPSVzIiwgZXdrVmlldywgZnJhbWUsIG1lc3NhZ2UpOwotICAgIEVXS19WSUVXX1NE
X0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOKHNkLT5hcGkpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21h
cnREYXRhKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmFwaSk7
CiAKLSAgICBpZiAoIXNkLT5hcGktPnJ1bl9qYXZhc2NyaXB0X2FsZXJ0KQorICAgIGlmICghc21h
cnREYXRhLT5hcGktPnJ1bl9qYXZhc2NyaXB0X2FsZXJ0KQogICAgICAgICByZXR1cm47CiAKLSAg
ICBzZC0+YXBpLT5ydW5famF2YXNjcmlwdF9hbGVydChzZCwgZnJhbWUsIG1lc3NhZ2UpOworICAg
IHNtYXJ0RGF0YS0+YXBpLT5ydW5famF2YXNjcmlwdF9hbGVydChzbWFydERhdGEsIGZyYW1lLCBt
ZXNzYWdlKTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3J1bl9qYXZhc2NyaXB0X2NvbmZpcm0o
RXZhc19PYmplY3QqIGV3a1ZpZXcsIEV2YXNfT2JqZWN0KiBmcmFtZSwgY29uc3QgY2hhciogbWVz
c2FnZSkKIHsKICAgICBEQkcoImV3a1ZpZXc9JXAgZnJhbWU9JXAgbWVzc2FnZT0lcyIsIGV3a1Zp
ZXcsIGZyYW1lLCBtZXNzYWdlKTsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1Zp
ZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwo
c2QtPmFwaSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tW
aWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOX1ZBTChzbWFydERhdGEtPmFwaSwgRUlOQV9GQUxTRSk7CiAKLSAgICBpZiAoIXNkLT5hcGkt
PnJ1bl9qYXZhc2NyaXB0X2NvbmZpcm0pCisgICAgaWYgKCFzbWFydERhdGEtPmFwaS0+cnVuX2ph
dmFzY3JpcHRfY29uZmlybSkKICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CiAKLSAgICByZXR1
cm4gc2QtPmFwaS0+cnVuX2phdmFzY3JpcHRfY29uZmlybShzZCwgZnJhbWUsIG1lc3NhZ2UpOwor
ICAgIHJldHVybiBzbWFydERhdGEtPmFwaS0+cnVuX2phdmFzY3JpcHRfY29uZmlybShzbWFydERh
dGEsIGZyYW1lLCBtZXNzYWdlKTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3J1bl9qYXZhc2Ny
aXB0X3Byb21wdChFdmFzX09iamVjdCogZXdrVmlldywgRXZhc19PYmplY3QqIGZyYW1lLCBjb25z
dCBjaGFyKiBtZXNzYWdlLCBjb25zdCBjaGFyKiBkZWZhdWx0VmFsdWUsIGNoYXIqKiB2YWx1ZSkK
IHsKICAgICBEQkcoImV3a1ZpZXc9JXAgZnJhbWU9JXAgbWVzc2FnZT0lcyIsIGV3a1ZpZXcsIGZy
YW1lLCBtZXNzYWdlKTsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNk
LCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmFw
aSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBz
bWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZB
TChzbWFydERhdGEtPmFwaSwgRUlOQV9GQUxTRSk7CiAKLSAgICBpZiAoIXNkLT5hcGktPnJ1bl9q
YXZhc2NyaXB0X3Byb21wdCkKKyAgICBpZiAoIXNtYXJ0RGF0YS0+YXBpLT5ydW5famF2YXNjcmlw
dF9wcm9tcHQpCiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwogCi0gICAgcmV0dXJuIHNkLT5h
cGktPnJ1bl9qYXZhc2NyaXB0X3Byb21wdChzZCwgZnJhbWUsIG1lc3NhZ2UsIGRlZmF1bHRWYWx1
ZSwgdmFsdWUpOworICAgIHJldHVybiBzbWFydERhdGEtPmFwaS0+cnVuX2phdmFzY3JpcHRfcHJv
bXB0KHNtYXJ0RGF0YSwgZnJhbWUsIG1lc3NhZ2UsIGRlZmF1bHRWYWx1ZSwgdmFsdWUpOwogfQog
CiAvKioKQEAgLTMyMDcsMjAgKzMyMDcsMjAgQEAgRWluYV9Cb29sIGV3a192aWV3X3J1bl9qYXZh
c2NyaXB0X3Byb21wdChFdmFzX09iamVjdCogZXdrVmlldywgRXZhc19PYmplY3QqIGZyYW0KICAq
IGltcGxlbWVudGF0aW9uLCB3aGljaCBsb2dzIGFuZCByZXR1cm5zIEVJTkFfRkFMU0UuIENsaWVu
dCBtYXkgcmVtb3ZlIGxvZyBieQogICogc2V0dGluZyB0aGlzIGZ1bmN0aW9uIDAsIHdoaWNoIHdp
bGwganVzdCByZXR1cm4gRUlOQV9GQUxTRS4KICAqCi0gKiBAcGFyYW0gbyBWaWV3LgorICogQHBh
cmFtIGV3a1ZpZXcgVmlldy4KICAqCiAgKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBpZiBzY3JpcHQg
c2hvdWxkIGJlIHN0b3BwZWQ7IEBjIEVJTkFfRkFMU0Ugb3RoZXJ3aXNlCiAgKi8KIEVpbmFfQm9v
bCBld2tfdmlld19zaG91bGRfaW50ZXJydXB0X2phdmFzY3JpcHQoRXZhc19PYmplY3QqIGV3a1Zp
ZXcpCiB7CiAgICAgREJHKCJld2tWaWV3PSVwIiwgZXdrVmlldyk7Ci0gICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk5fVkFMKHNkLT5hcGksIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NE
X0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5hcGksIEVJTkFfRkFMU0UpOwog
Ci0gICAgaWYgKCFzZC0+YXBpLT5zaG91bGRfaW50ZXJydXB0X2phdmFzY3JpcHQpCisgICAgaWYg
KCFzbWFydERhdGEtPmFwaS0+c2hvdWxkX2ludGVycnVwdF9qYXZhc2NyaXB0KQogICAgICAgICBy
ZXR1cm4gRUlOQV9GQUxTRTsKIAotICAgIHJldHVybiBzZC0+YXBpLT5zaG91bGRfaW50ZXJydXB0
X2phdmFzY3JpcHQoc2QpOworICAgIHJldHVybiBzbWFydERhdGEtPmFwaS0+c2hvdWxkX2ludGVy
cnVwdF9qYXZhc2NyaXB0KHNtYXJ0RGF0YSk7CiB9CiAKIC8qKgpAQCAtMzIzMCw1MSArMzIzMCw1
MSBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2hvdWxkX2ludGVycnVwdF9qYXZhc2NyaXB0KEV2YXNf
T2JqZWN0KiBld2tWaWV3KQogICogaXMgZXhjZWVkZWQuIEJyb3dzZXIgbWF5IHVzZSB0aGlzIHRv
IGluY3JlYXNlIHRoZSBzaXplIG9mIHF1b3RhIGJlZm9yZSB0aGUKICAqIG9yaWdpbmF0aW5nIG9w
ZXJhdGlvbmEgZmFpbHMuCiAgKgotICogQHBhcmFtIG8gVmlldy4KKyAqIEBwYXJhbSBld2tWaWV3
IFZpZXcuCiAgKiBAcGFyYW0gZnJhbWUgVGhlIGZyYW1lIHdob3NlIHdlYiBwYWdlIGV4Y2VlZGVk
IGl0cyBkYXRhYmFzZSBxdW90YS4KICAqIEBwYXJhbSBkYXRhYmFzZU5hbWUgRGF0YWJhc2UgbmFt
ZS4KLSAqIEBwYXJhbSBjdXJyZW50X3NpemUgQ3VycmVudCBzaXplIG9mIHRoaXMgZGF0YWJhc2UK
LSAqIEBwYXJhbSBleHBlY3RlZF9zaXplIFRoZSBleHBlY3RlZCBzaXplIG9mIHRoaXMgZGF0YWJh
c2UgaW4gb3JkZXIgdG8gZnVsZmlsbAorICogQHBhcmFtIGN1cnJlbnRTaXplIEN1cnJlbnQgc2l6
ZSBvZiB0aGlzIGRhdGFiYXNlCisgKiBAcGFyYW0gZXhwZWN0ZWRTaXplIFRoZSBleHBlY3RlZCBz
aXplIG9mIHRoaXMgZGF0YWJhc2UgaW4gb3JkZXIgdG8gZnVsZmlsbAogICogc2l0ZSdzIHJlcXVp
cmVtZW50LgogICovCiB1aW50NjRfdCBld2tfdmlld19leGNlZWRlZF9kYXRhYmFzZV9xdW90YShF
dmFzX09iamVjdCogZXdrVmlldywgRXZhc19PYmplY3QqIGZyYW1lLCBjb25zdCBjaGFyKiBkYXRh
YmFzZU5hbWUsIHVpbnQ2NF90IGN1cnJlbnRTaXplLCB1aW50NjRfdCBleHBlY3RlZFNpemUpCiB7
CiAgICAgREJHKCJld2tWaWV3PSVwIiwgZXdrVmlldyk7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihld2tWaWV3LCBzZCwgMCk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5f
VkFMKHNkLT5hcGksIDApOwotICAgIGlmICghc2QtPmFwaS0+ZXhjZWVkZWRfZGF0YWJhc2VfcXVv
dGEpCisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIDAp
OworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmFwaSwgMCk7
CisgICAgaWYgKCFzbWFydERhdGEtPmFwaS0+ZXhjZWVkZWRfZGF0YWJhc2VfcXVvdGEpCiAgICAg
ICAgIHJldHVybiAwOwogCi0gICAgSU5GKCJjdXJyZW50X3NpemU9JSIgUFJJdTY0ICIgZXhwZWN0
ZWRfc2l6ZT0lIiBQUkl1NjQsIGN1cnJlbnRTaXplLCBleHBlY3RlZFNpemUpOwotICAgIHJldHVy
biBzZC0+YXBpLT5leGNlZWRlZF9kYXRhYmFzZV9xdW90YShzZCwgZnJhbWUsIGRhdGFiYXNlTmFt
ZSwgY3VycmVudFNpemUsIGV4cGVjdGVkU2l6ZSk7CisgICAgSU5GKCJjdXJyZW50U2l6ZT0lIiBQ
Ukl1NjQgIiBleHBlY3RlZFNpemU9JSIgUFJJdTY0LCBjdXJyZW50U2l6ZSwgZXhwZWN0ZWRTaXpl
KTsKKyAgICByZXR1cm4gc21hcnREYXRhLT5hcGktPmV4Y2VlZGVkX2RhdGFiYXNlX3F1b3RhKHNt
YXJ0RGF0YSwgZnJhbWUsIGRhdGFiYXNlTmFtZSwgY3VycmVudFNpemUsIGV4cGVjdGVkU2l6ZSk7
CiB9CiAKIC8qKgogICogQGludGVybmFsCiAgKiBPcGVuIHBhbmVsIHRvIGNob29zZSBhIGZpbGUu
CiAgKgotICogQHBhcmFtIG8gVmlldy4KKyAqIEBwYXJhbSBld2tWaWV3IFZpZXcuCiAgKiBAcGFy
YW0gZnJhbWUgRnJhbWUgaW4gd2hpY2ggb3BlcmF0aW9uIGlzIHJlcXVpcmVkLgotICogQHBhcmFt
IGFsbG93c19tdWx0aXBsZV9maWxlcyBAYyBFSU5BX1RSVUUgd2hlbiBtb3JlIHRoYW4gb25lIGZp
bGUgbWF5IGJlCisgKiBAcGFyYW0gYWxsb3dzTXVsdGlwbGVGaWxlcyBAYyBFSU5BX1RSVUUgd2hl
biBtb3JlIHRoYW4gb25lIGZpbGUgbWF5IGJlCiAgKiBzZWxlY3RlZCwgQGMgRUlOQV9GQUxTRSBv
dGhlcndpc2UKLSAqIEBwYXJhbSBhY2NlcHRfdHlwZXMgYWNjZXB0IG1pbWUgdHlwZXMKLSAqIEBz
ZWxlY3RlZF9maWxlbmFtZXMgTGlzdCBvZiBmaWxlcyBzZWxlY3RlZC4KKyAqIEBwYXJhbSBhY2Nl
cHRUeXBlcyBhY2NlcHQgbWltZSB0eXBlcworICogQHNlbGVjdGVkRmlsZW5hbWVzIExpc3Qgb2Yg
ZmlsZXMgc2VsZWN0ZWQuCiAgKgogICogQHJldHVybiBARUlOQV9GQUxTRSBpZiB1c2VyIGNhbmNl
bGVkIGZpbGUgc2VsZWN0aW9uOyBARUlOQV9UUlVFIGlmIGNvbmZpcm1lZC4KICAqLwogRWluYV9C
b29sIGV3a192aWV3X3J1bl9vcGVuX3BhbmVsKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFdmFzX09i
amVjdCogZnJhbWUsIEVpbmFfQm9vbCBhbGxvd3NNdWx0aXBsZUZpbGVzLCBjb25zdCBjaGFyKiBh
Y2NlcHRUeXBlcywgRWluYV9MaXN0Kiogc2VsZWN0ZWRGaWxlbmFtZXMpCiB7Ci0gICAgREJHKCJl
d2tWaWV3PSVwIGZyYW1lPSVwIGFsbG93c19tdWx0aXBsZV9maWxlcz0lZCIsIGV3a1ZpZXcsIGZy
YW1lLCBhbGxvd3NNdWx0aXBsZUZpbGVzKTsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJO
KGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
Tl9WQUwoc2QtPmFwaSwgRUlOQV9GQUxTRSk7CisgICAgREJHKCJld2tWaWV3PSVwIGZyYW1lPSVw
IGFsbG93c011bHRpcGxlRmlsZXM9JWQiLCBld2tWaWV3LCBmcmFtZSwgYWxsb3dzTXVsdGlwbGVG
aWxlcyk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEs
IEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERh
dGEtPmFwaSwgRUlOQV9GQUxTRSk7CiAgICAgRWluYV9Cb29sIGNvbmZpcm07CiAKLSAgICBpZiAo
IXNkLT5hcGktPnJ1bl9vcGVuX3BhbmVsKQorICAgIGlmICghc21hcnREYXRhLT5hcGktPnJ1bl9v
cGVuX3BhbmVsKQogICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKIAogICAgICpzZWxlY3RlZEZp
bGVuYW1lcyA9IDA7CiAKLSAgICBjb25maXJtID0gc2QtPmFwaS0+cnVuX29wZW5fcGFuZWwoc2Qs
IGZyYW1lLCBhbGxvd3NNdWx0aXBsZUZpbGVzLCBhY2NlcHRUeXBlcywgc2VsZWN0ZWRGaWxlbmFt
ZXMpOworICAgIGNvbmZpcm0gPSBzbWFydERhdGEtPmFwaS0+cnVuX29wZW5fcGFuZWwoc21hcnRE
YXRhLCBmcmFtZSwgYWxsb3dzTXVsdGlwbGVGaWxlcywgYWNjZXB0VHlwZXMsIHNlbGVjdGVkRmls
ZW5hbWVzKTsKICAgICBpZiAoIWNvbmZpcm0gJiYgKnNlbGVjdGVkRmlsZW5hbWVzKQogICAgICAg
ICBFUlIoIkNhbmNlbGVkIGZpbGUgc2VsZWN0aW9uLCBidXQgc2VsZWN0ZWQgZmlsZW5hbWVzICE9
IDAuIEZyZWUgbmFtZXMgYmVmb3JlIHJldHVybi4iKTsKICAgICByZXR1cm4gY29uZmlybTsKQEAg
LTMyODMsMTYgKzMyODMsMTYgQEAgRWluYV9Cb29sIGV3a192aWV3X3J1bl9vcGVuX3BhbmVsKEV2
YXNfT2JqZWN0KiBld2tWaWV3LCBFdmFzX09iamVjdCogZnJhbWUsIEVpbmEKIHZvaWQgZXdrX3Zp
ZXdfcmVwYWludChFdmFzX09iamVjdCogZXdrVmlldywgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3Jk
IHksIEV2YXNfQ29vcmQgd2lkdGgsIEV2YXNfQ29vcmQgaGVpZ2h0KQogewogICAgIERCRygiZXdr
Vmlldz0lcCwgcmVnaW9uPSVkLCVkICsgJWR4JWQiLCBld2tWaWV3LCB4LCB5LCB3aWR0aCwgaGVp
Z2h0KTsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkKTsKLSAgICBF
V0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYpOworICAgIEVXS19WSUVXX1NEX0dF
VF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9P
Ul9SRVRVUk4oc21hcnREYXRhLCBwcml2KTsKIAotICAgIGlmICghcHJpdi0+bWFpbl9mcmFtZS0+
Y29udGVudFJlbmRlcmVyKCkpIHsKKyAgICBpZiAoIXByaXYtPm1haW5GcmFtZS0+Y29udGVudFJl
bmRlcmVyKCkpIHsKICAgICAgICAgRVJSKCJubyBtYWluIGZyYW1lIGNvbnRlbnQgcmVuZGVyZXIu
Iik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBfZXdrX3ZpZXdfcmVwYWludF9hZGQo
cHJpdiwgeCwgeSwgd2lkdGgsIGhlaWdodCk7Ci0gICAgX2V3a192aWV3X3NtYXJ0X2NoYW5nZWQo
c2QpOworICAgIF9ld2tfdmlld19zbWFydF9jaGFuZ2VkKHNtYXJ0RGF0YSk7CiB9CiAKIHZvaWQg
ZXdrX3ZpZXdfc2Nyb2xsKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFdmFzX0Nvb3JkIGR4LCBFdmFz
X0Nvb3JkIGR5LCBFdmFzX0Nvb3JkIHNjcm9sbFgsIEV2YXNfQ29vcmQgc2Nyb2xsWSwgRXZhc19D
b29yZCBzY3JvbGxXaWR0aCwgRXZhc19Db29yZCBzY3JvbGxIZWlnaHQsIEV2YXNfQ29vcmQgY2Vu
dGVyWCwgRXZhc19Db29yZCBjZW50ZXJZLCBFdmFzX0Nvb3JkIGNlbnRlcldpZHRoLCBFdmFzX0Nv
b3JkIGNlbnRlckhlaWdodCwgRWluYV9Cb29sIG1haW5GcmFtZSkKQEAgLTMzMDQsMTkgKzMzMDQs
MTkgQEAgdm9pZCBld2tfdmlld19zY3JvbGwoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV2YXNfQ29v
cmQgZHgsIEV2YXNfQ29vcmQgZHksIEV2YXNfQ28KICAgICAgICAgV1JOKCJzY3JvbGwgcmVnaW9u
IGFuZCBjbGlwIGFyZSBkaWZmZXJlbnQhICVkLCVkKyVkeCVkIGFuZCAlZCwlZCslZHglZCIsCiAg
ICAgICAgICAgICBzY3JvbGxYLCBzY3JvbGxZLCBzY3JvbGxXaWR0aCwgc2Nyb2xsSGVpZ2h0LCBj
ZW50ZXJYLCBjZW50ZXJZLCBjZW50ZXJXaWR0aCwgY2VudGVySGVpZ2h0KTsKIAotICAgIEVXS19W
SUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QpOwotICAgIEVXS19WSUVXX1BSSVZfR0VU
X09SX1JFVFVSTihzZCwgcHJpdik7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tW
aWV3LCBzbWFydERhdGEpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERh
dGEsIHByaXYpOwogICAgIEVJTkFfU0FGRVRZX09OX1RSVUVfUkVUVVJOKCFkeCAmJiAhZHkpOwog
CiAgICAgX2V3a192aWV3X3Njcm9sbF9hZGQocHJpdiwgZHgsIGR5LCBzY3JvbGxYLCBzY3JvbGxZ
LCBzY3JvbGxXaWR0aCwgc2Nyb2xsSGVpZ2h0LCBtYWluRnJhbWUpOwogCi0gICAgX2V3a192aWV3
X3NtYXJ0X2NoYW5nZWQoc2QpOworICAgIF9ld2tfdmlld19zbWFydF9jaGFuZ2VkKHNtYXJ0RGF0
YSk7CiB9CiAKIFdlYkNvcmU6OlBhZ2UqIGV3a192aWV3X2NvcmVfcGFnZV9nZXQoY29uc3QgRXZh
c19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tW
aWV3LCBzZCwgMCk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCAw
KTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgMCk7
CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgMCk7CiAg
ICAgcmV0dXJuIHByaXYtPnBhZ2U7CiB9CiAKQEAgLTMzMzEsMzAgKzMzMzEsMzAgQEAgV1RGOjpQ
YXNzUmVmUHRyPFdlYkNvcmU6OkZyYW1lPiBld2tfdmlld19mcmFtZV9jcmVhdGUoRXZhc19PYmpl
Y3QqIGV3a1ZpZXcsIEV2YXMKICAgICAgICAgZXdrVmlldywgZnJhbWUsIG5hbWUudXRmOCgpLmRh
dGEoKSwgb3duZXJFbGVtZW50LAogICAgICAgICB1cmwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwg
cmVmZXJyZXIudXRmOCgpLmRhdGEoKSk7CiAKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJO
KGV3a1ZpZXcsIHNkLCAwKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHBy
aXYsIDApOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRh
LCAwKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCAw
KTsKIAotICAgIFdURjo6UmVmUHRyPFdlYkNvcmU6OkZyYW1lPiBjZiA9IF9ld2tfdmlld19jb3Jl
X2ZyYW1lX25ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2Qs
IHByaXYsIG93bmVyRWxlbWVudCk7Ci0gICAgaWYgKCFjZikgeworICAgIFdURjo6UmVmUHRyPFdl
YkNvcmU6OkZyYW1lPiBjb3JlRnJhbWUgPSBfZXdrX3ZpZXdfY29yZV9mcmFtZV9uZXcKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNtYXJ0RGF0YSwgcHJpdiwgb3du
ZXJFbGVtZW50KTsKKyAgICBpZiAoIWNvcmVGcmFtZSkgewogICAgICAgICBFUlIoIkNvdWxkIG5v
dCBjcmVhdGUgY2hpbGQgY29yZSBmcmFtZSAnJXMnIiwgbmFtZS51dGY4KCkuZGF0YSgpKTsKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgaWYgKCFld2tfZnJhbWVfY2hpbGRfYWRkKGZy
YW1lLCBjZiwgbmFtZSwgdXJsLCByZWZlcnJlcikpIHsKKyAgICBpZiAoIWV3a19mcmFtZV9jaGls
ZF9hZGQoZnJhbWUsIGNvcmVGcmFtZSwgbmFtZSwgdXJsLCByZWZlcnJlcikpIHsKICAgICAgICAg
RVJSKCJDb3VsZCBub3QgY3JlYXRlIGNoaWxkIGZyYW1lIG9iamVjdCAnJXMnIiwgbmFtZS51dGY4
KCkuZGF0YSgpKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCiAgICAgLy8gVGhlIGNyZWF0
aW9uIG9mIHRoZSBmcmFtZSBtYXkgaGF2ZSByZW1vdmVkIGl0c2VsZiBhbHJlYWR5LgotICAgIGlm
ICghY2YtPnBhZ2UoKSB8fCAhY2YtPnRyZWUoKSB8fCAhY2YtPnRyZWUoKS0+cGFyZW50KCkpCisg
ICAgaWYgKCFjb3JlRnJhbWUtPnBhZ2UoKSB8fCAhY29yZUZyYW1lLT50cmVlKCkgfHwgIWNvcmVG
cmFtZS0+dHJlZSgpLT5wYXJlbnQoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBzZC0+Y2hh
bmdlZC5mcmFtZV9yZWN0ID0gRUlOQV9UUlVFOwotICAgIF9ld2tfdmlld19zbWFydF9jaGFuZ2Vk
KHNkKTsKKyAgICBzbWFydERhdGEtPmNoYW5nZWQuZnJhbWVfcmVjdCA9IEVJTkFfVFJVRTsKKyAg
ICBfZXdrX3ZpZXdfc21hcnRfY2hhbmdlZChzbWFydERhdGEpOwogCiAgICAgZXZhc19vYmplY3Rf
c21hcnRfY2FsbGJhY2tfY2FsbChld2tWaWV3LCAiZnJhbWUsY3JlYXRlZCIsIGZyYW1lKTsKLSAg
ICByZXR1cm4gY2YucmVsZWFzZSgpOworICAgIHJldHVybiBjb3JlRnJhbWUucmVsZWFzZSgpOwog
fQogCiBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6V2lkZ2V0PiBld2tfdmlld19wbHVnaW5fY3Jl
YXRlKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFdmFzX09iamVjdCogZnJhbWUsIGNvbnN0IFdlYkNv
cmU6OkludFNpemUmIHBsdWdpblNpemUsIFdlYkNvcmU6OkhUTUxQbHVnSW5FbGVtZW50KiBlbGVt
ZW50LCBjb25zdCBXZWJDb3JlOjpLVVJMJiB1cmwsIGNvbnN0IFdURjo6VmVjdG9yPFdURjo6U3Ry
aW5nPiYgcGFyYW1OYW1lcywgY29uc3QgV1RGOjpWZWN0b3I8V1RGOjpTdHJpbmc+JiBwYXJhbVZh
bHVlcywgY29uc3QgV1RGOjpTdHJpbmcmIG1pbWVUeXBlLCBib29sIGxvYWRNYW51YWxseSkKQEAg
LTMzNjMsOSArMzM2Myw5IEBAIFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpXaWRnZXQ+IGV3a192
aWV3X3BsdWdpbl9jcmVhdGUoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV2CiAgICAgICAgIGV3a1Zp
ZXcsIGZyYW1lLCBwbHVnaW5TaXplLndpZHRoKCksIHBsdWdpblNpemUuaGVpZ2h0KCksIGVsZW1l
bnQsCiAgICAgICAgIHVybC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBtaW1lVHlwZS51dGY4KCku
ZGF0YSgpKTsKIAotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIDAp
OwotICAgIHNkLT5jaGFuZ2VkLmZyYW1lX3JlY3QgPSBFSU5BX1RSVUU7Ci0gICAgX2V3a192aWV3
X3NtYXJ0X2NoYW5nZWQoc2QpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmll
dywgc21hcnREYXRhLCAwKTsKKyAgICBzbWFydERhdGEtPmNoYW5nZWQuZnJhbWVfcmVjdCA9IEVJ
TkFfVFJVRTsKKyAgICBfZXdrX3ZpZXdfc21hcnRfY2hhbmdlZChzbWFydERhdGEpOwogCiAgICAg
cmV0dXJuIGV3a19mcmFtZV9wbHVnaW5fY3JlYXRlCiAgICAgICAgICAgICAgICAoZnJhbWUsIHBs
dWdpblNpemUsIGVsZW1lbnQsIHVybCwgcGFyYW1OYW1lcywgcGFyYW1WYWx1ZXMsCkBAIC0zMzg2
LDEzICszMzg2LDEzIEBAIFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpXaWRnZXQ+IGV3a192aWV3
X3BsdWdpbl9jcmVhdGUoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV2CiB2b2lkIGV3a192aWV3X3Bv
cHVwX25ldyhFdmFzX09iamVjdCogZXdrVmlldywgV2ViQ29yZTo6UG9wdXBNZW51Q2xpZW50KiBj
bGllbnQsIGludCBzZWxlY3RlZCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdCkKIHsKICAg
ICBJTkYoImV3a1ZpZXc9JXAiLCBld2tWaWV3KTsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVU
VVJOKGV3a1ZpZXcsIHNkKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHBy
aXYpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhKTsK
KyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2KTsKIAotICAg
IGlmIChwcml2LT5wb3B1cC5tZW51X2NsaWVudCkKKyAgICBpZiAocHJpdi0+cG9wdXAubWVudUNs
aWVudCkKICAgICAgICAgZXdrX3ZpZXdfcG9wdXBfZGVzdHJveShld2tWaWV3KTsKIAotICAgIHBy
aXYtPnBvcHVwLm1lbnVfY2xpZW50ID0gY2xpZW50OworICAgIHByaXYtPnBvcHVwLm1lbnVDbGll
bnQgPSBjbGllbnQ7CiAKICAgICAvLyBwb3B1bGF0ZSBpdGVtcwogICAgIGNvbnN0IGludCBzaXpl
ID0gY2xpZW50LT5saXN0U2l6ZSgpOwpAQCAtMzQxOSwxMCArMzQxOSwxMCBAQCB2b2lkIGV3a192
aWV3X3BvcHVwX25ldyhFdmFzX09iamVjdCogZXdrVmlldywgV2ViQ29yZTo6UG9wdXBNZW51Q2xp
ZW50KiBjbGllbnQsCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfcG9wdXBfZGVzdHJveShFdmFzX09iamVj
dCogZXdrVmlldykKIHsKICAgICBJTkYoImV3a1ZpZXc9JXAiLCBld2tWaWV3KTsKLSAgICBFV0tf
VklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tf
VklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIEVXS19W
SUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAg
ICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNF
KTsKIAotICAgIGlmICghcHJpdi0+cG9wdXAubWVudV9jbGllbnQpCisgICAgaWYgKCFwcml2LT5w
b3B1cC5tZW51Q2xpZW50KQogICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKIAogICAgIGV2YXNf
b2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdrVmlldywgInBvcHVwLHdpbGxkZWxldGUiLCAm
cHJpdi0+cG9wdXAubWVudSk7CkBAIC0zNDMzLDggKzM0MzMsOCBAQCBFaW5hX0Jvb2wgZXdrX3Zp
ZXdfcG9wdXBfZGVzdHJveShFdmFzX09iamVjdCogZXdrVmlldykKICAgICAgICAgZWluYV9zdHJp
bmdzaGFyZV9kZWwoaXRlbS0+dGV4dCk7CiAgICAgICAgIGZyZWUoaXRlbSk7CiAgICAgfQotICAg
IHByaXYtPnBvcHVwLm1lbnVfY2xpZW50LT5wb3B1cERpZEhpZGUoKTsKLSAgICBwcml2LT5wb3B1
cC5tZW51X2NsaWVudCA9IDA7CisgICAgcHJpdi0+cG9wdXAubWVudUNsaWVudC0+cG9wdXBEaWRI
aWRlKCk7CisgICAgcHJpdi0+cG9wdXAubWVudUNsaWVudCA9IDA7CiAKICAgICByZXR1cm4gRUlO
QV9UUlVFOwogfQpAQCAtMzQ0MiwxOCArMzQ0MiwxOCBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfcG9w
dXBfZGVzdHJveShFdmFzX09iamVjdCogZXdrVmlldykKIHZvaWQgZXdrX3ZpZXdfcG9wdXBfc2Vs
ZWN0ZWRfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBpbnQgaW5kZXgpCiB7CiAgICAgSU5GKCJl
d2tWaWV3PSVwIiwgZXdrVmlldyk7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tW
aWV3LCBzZCk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2KTsKLSAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihwcml2LT5wb3B1cC5tZW51X2NsaWVudCk7Cisg
ICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEpOworICAgIEVX
S19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYpOworICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOKHByaXYtPnBvcHVwLm1lbnVDbGllbnQpOwogCi0gICAgcHJpdi0+
cG9wdXAubWVudV9jbGllbnQtPnZhbHVlQ2hhbmdlZChpbmRleCk7CisgICAgcHJpdi0+cG9wdXAu
bWVudUNsaWVudC0+dmFsdWVDaGFuZ2VkKGluZGV4KTsKIH0KIAogLyoqCiAgKiBAaW50ZXJuYWwK
ICAqIFJlcXVlc3QgYSBkb3dubG9hZCB0byB1c2VyLgogICoKLSAqIEBwYXJhbSBvIFZpZXcuCisg
KiBAcGFyYW0gZXdrVmlldyBWaWV3LgogICogQG9hcmFtIGRvd25sb2FkIEV3a19Eb3dubG9hZCBz
dHJ1Y3QgdG8gYmUgc2VudC4KICAqCiAgKiBFbWl0czogImRvd25sb2FkLHJlcXVlc3QiIHdpdGgg
YW4gRXdrX0Rvd25sb2FkIGNvbnRhaW5pbmcgdGhlIGRldGFpbHMgb2YgdGhlCkBAIC0zNDY5LDcg
KzM0NjksNyBAQCB2b2lkIGV3a192aWV3X2Rvd25sb2FkX3JlcXVlc3QoRXZhc19PYmplY3QqIGV3
a1ZpZXcsIEV3a19Eb3dubG9hZCogZG93bmxvYWQpCiAgKiBAaW50ZXJuYWwKICAqIFJlcG9ydHMg
dGhlIEpTIHdpbmRvdyBvYmplY3Qgd2FzIGNsZWFyZWQuCiAgKgotICogQHBhcmFtIG8gdmlldy4K
KyAqIEBwYXJhbSBld2tWaWV3IHZpZXcuCiAgKiBAcGFyYW0gZnJhbWUgdGhlIGZyYW1lLgogICov
CiB2b2lkIGV3a192aWV3X2pzX3dpbmRvd19vYmplY3RfY2xlYXIoRXZhc19PYmplY3QqIGV3a1Zp
ZXcsIEV2YXNfT2JqZWN0KiBmcmFtZSkKQEAgLTM0ODcsMTAgKzM0ODcsMTAgQEAgdm9pZCBld2tf
dmlld19qc193aW5kb3dfb2JqZWN0X2NsZWFyKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFdmFzX09i
amVjdCogZnJhbWUpCiAgKi8KIHZvaWQgZXdrX3ZpZXdfdmlld3BvcnRfYXR0cmlidXRlc19zZXQo
RXZhc19PYmplY3QqIGV3a1ZpZXcsIGNvbnN0IFdlYkNvcmU6OlZpZXdwb3J0QXJndW1lbnRzJiBh
cmd1bWVudHMpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUKGV3a1ZpZXcsIHNkKTsKLSAgICBFV0tf
VklFV19QUklWX0dFVChzZCwgcHJpdik7CisgICAgRVdLX1ZJRVdfU0RfR0VUKGV3a1ZpZXcsIHNt
YXJ0RGF0YSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVQoc21hcnREYXRhLCBwcml2KTsKIAotICAg
IHByaXYtPnZpZXdwb3J0X2FyZ3VtZW50cyA9IGFyZ3VtZW50czsKKyAgICBwcml2LT52aWV3cG9y
dEFyZ3VtZW50cyA9IGFyZ3VtZW50czsKICAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19j
YWxsKGV3a1ZpZXcsICJ2aWV3cG9ydCxjaGFuZ2VkIiwgMCk7CiB9CiAKQEAgLTM1MTYsNzAgKzM1
MTYsNzAgQEAgdm9pZCBld2tfdmlld192aWV3cG9ydF9hdHRyaWJ1dGVzX2dldChjb25zdCBFdmFz
X09iamVjdCogZXdrVmlldywgaW50KiB3aWR0aCwgaW4KIAogRWluYV9Cb29sIGV3a192aWV3X3pv
b21fcmFuZ2Vfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBmbG9hdCBtaW5TY2FsZSwgZmxvYXQg
bWF4U2NhbGUpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwg
RUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBF
SU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0
RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0
RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CiAKICAgICBpZiAobWF4U2NhbGUgPCBtaW5TY2FsZSkg
ewogICAgICAgICBXUk4oIm1pbl9zY2FsZSBpcyBsYXJnZXIgdGhhbiBtYXhfc2NhbGUiKTsKICAg
ICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CiAgICAgfQogCi0gICAgcHJpdi0+c2V0dGluZ3Muem9v
bV9yYW5nZS5taW5fc2NhbGUgPSBtaW5TY2FsZTsKLSAgICBwcml2LT5zZXR0aW5ncy56b29tX3Jh
bmdlLm1heF9zY2FsZSA9IG1heFNjYWxlOworICAgIHByaXYtPnNldHRpbmdzLnpvb21SYW5nZS5t
aW5TY2FsZSA9IG1pblNjYWxlOworICAgIHByaXYtPnNldHRpbmdzLnpvb21SYW5nZS5tYXhTY2Fs
ZSA9IG1heFNjYWxlOwogCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAogZmxvYXQgZXdrX3Zp
ZXdfem9vbV9yYW5nZV9taW5fZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAg
IEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIC0xLjApOwotICAgIEVXS19W
SUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgLTEuMCk7CisgICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIC0xLjApOworICAgIEVXS19WSUVXX1BS
SVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIC0xLjApOwogCi0gICAgcmV0dXJuIHBy
aXYtPnNldHRpbmdzLnpvb21fcmFuZ2UubWluX3NjYWxlOworICAgIHJldHVybiBwcml2LT5zZXR0
aW5ncy56b29tUmFuZ2UubWluU2NhbGU7CiB9CiAKIGZsb2F0IGV3a192aWV3X3pvb21fcmFuZ2Vf
bWF4X2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9H
RVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAtMS4wKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9P
Ul9SRVRVUk4oc2QsIHByaXYsIC0xLjApOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrVmlldywgc21hcnREYXRhLCAtMS4wKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRV
Uk4oc21hcnREYXRhLCBwcml2LCAtMS4wKTsKIAotICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy56
b29tX3JhbmdlLm1heF9zY2FsZTsKKyAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3Muem9vbVJhbmdl
Lm1heFNjYWxlOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfdXNlcl9zY2FsYWJsZV9zZXQoRXZh
c19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCB1c2VyU2NhbGFibGUpCiB7Ci0gICAgRVdLX1ZJ
RVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJ
RVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklF
V19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAg
RVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7
CiAKLSAgICBwcml2LT5zZXR0aW5ncy56b29tX3JhbmdlLnVzZXJfc2NhbGFibGUgPSB1c2VyU2Nh
bGFibGU7CisgICAgcHJpdi0+c2V0dGluZ3Muem9vbVJhbmdlLnVzZXJTY2FsYWJsZSA9IHVzZXJT
Y2FsYWJsZTsKIAogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmll
d191c2VyX3NjYWxhYmxlX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBF
V0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBF
V0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsK
KyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZB
TFNFKTsKIAotICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy56b29tX3JhbmdlLnVzZXJfc2NhbGFi
bGU7CisgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLnpvb21SYW5nZS51c2VyU2NhbGFibGU7CiB9
CiAKIGZsb2F0IGV3a192aWV3X2RldmljZV9waXhlbF9yYXRpb19nZXQoY29uc3QgRXZhc19PYmpl
Y3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBz
ZCwgLTEuMCk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCAtMS4w
KTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgLTEu
MCk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgLTEu
MCk7CiAKLSAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZGV2aWNlX3BpeGVsX3JhdGlvOworICAg
IHJldHVybiBwcml2LT5zZXR0aW5ncy5kZXZpY2VQaXhlbFJhdGlvOwogfQogCiB2b2lkIGV3a192
aWV3X2RpZF9maXJzdF92aXN1YWxseV9ub25lbXB0eV9sYXlvdXQoRXZhc19PYmplY3QqIGV3a1Zp
ZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCk7Ci0gICAg
RVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2KTsKLSAgICBpZiAoIXByaXYtPmZs
YWdzLnZpZXdfY2xlYXJlZCkgeworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmll
dywgc21hcnREYXRhKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRh
LCBwcml2KTsKKyAgICBpZiAoIXByaXYtPmZsYWdzLnZpZXdDbGVhcmVkKSB7CiAgICAgICAgIGV3
a192aWV3X2ZyYW1lX21haW5fY2xlYXJlZChld2tWaWV3KTsKICAgICAgICAgZXdrX3ZpZXdfZW5h
YmxlX3JlbmRlcihld2tWaWV3KTsKLSAgICAgICAgcHJpdi0+ZmxhZ3Mudmlld19jbGVhcmVkID0g
RUlOQV9UUlVFOworICAgICAgICBwcml2LT5mbGFncy52aWV3Q2xlYXJlZCA9IEVJTkFfVFJVRTsK
ICAgICB9CiB9CiAKQEAgLTM1ODcsNyArMzU4Nyw3IEBAIHZvaWQgZXdrX3ZpZXdfZGlkX2ZpcnN0
X3Zpc3VhbGx5X25vbmVtcHR5X2xheW91dChFdmFzX09iamVjdCogZXdrVmlldykKICAqIEBpbnRl
cm5hbAogICogRGlzcGF0Y2ggZmluaXNoZWQgbG9hZGluZy4KICAqCi0gKiBAcGFyYW0gbyB2aWV3
LgorICogQHBhcmFtIGV3a1ZpZXcgdmlldy4KICAqLwogdm9pZCBld2tfdmlld19kaXNwYXRjaF9k
aWRfZmluaXNoX2xvYWRpbmcoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7CkBAIC0zNjAwLDExICsz
NjAwLDExIEBAIHZvaWQgZXdrX3ZpZXdfZGlzcGF0Y2hfZGlkX2ZpbmlzaF9sb2FkaW5nKEV2YXNf
T2JqZWN0KiBld2tWaWV3KQogCiB2b2lkIGV3a192aWV3X3RyYW5zaXRpb25fdG9fY29tbWl0ZWRf
Zm9yX25ld3BhZ2UoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihld2tWaWV3LCBzZCk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJO
KHNkLCBwcml2KTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0
RGF0YSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdik7
CiAKICAgICBld2tfdmlld19kaXNhYmxlX3JlbmRlcihld2tWaWV3KTsKLSAgICBwcml2LT5mbGFn
cy52aWV3X2NsZWFyZWQgPSBFSU5BX0ZBTFNFOworICAgIHByaXYtPmZsYWdzLnZpZXdDbGVhcmVk
ID0gRUlOQV9GQUxTRTsKIH0KIAogCkBAIC0zNjE0LDE4ICszNjE0LDE4IEBAIHZvaWQgZXdrX3Zp
ZXdfdHJhbnNpdGlvbl90b19jb21taXRlZF9mb3JfbmV3cGFnZShFdmFzX09iamVjdCogZXdrVmll
dykKICAqIHJlcXVlc3Qgd291bGQgYmUgdXNlZC4gSWYgQHJldHVybiBpcyB0cnVlLCBsb2FkZXIg
d2lsbCB0cnkgdG8gbG9hZC4gRWxzZSwKICAqIExvYWRlciBpZ25vcmUgYWN0aW9uIG9mIHJlcXVl
c3QuCiAgKgotICogQHBhcmFtIG8gVmlldyB0byBsb2FkCisgKiBAcGFyYW0gZXdrVmlldyBWaWV3
IHRvIGxvYWQKICAqIEBwYXJhbSByZXF1ZXN0IFJlcXVlc3Qgd2hpY2ggY29udGFpbiB1cmwgdG8g
bmF2aWdhdGUKICAqLwogRWluYV9Cb29sIGV3a192aWV3X25hdmlnYXRpb25fcG9saWN5X2RlY2lz
aW9uKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFd2tfRnJhbWVfUmVzb3VyY2VfUmVxdWVzdCogcmVx
dWVzdCkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5B
X1RSVUUpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+YXBpLCBFSU5B
X1RSVUUpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRh
LCBFSU5BX1RSVUUpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERh
dGEtPmFwaSwgRUlOQV9UUlVFKTsKIAotICAgIGlmICghc2QtPmFwaS0+bmF2aWdhdGlvbl9wb2xp
Y3lfZGVjaXNpb24pCisgICAgaWYgKCFzbWFydERhdGEtPmFwaS0+bmF2aWdhdGlvbl9wb2xpY3lf
ZGVjaXNpb24pCiAgICAgICAgIHJldHVybiBFSU5BX1RSVUU7CiAKLSAgICByZXR1cm4gc2QtPmFw
aS0+bmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb24oc2QsIHJlcXVlc3QpOworICAgIHJldHVybiBz
bWFydERhdGEtPmFwaS0+bmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb24oc21hcnREYXRhLCByZXF1
ZXN0KTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X2pzX29iamVjdF9hZGQoRXZhc19PYmplY3Qq
IGV3a1ZpZXcsIEV3a19KU19PYmplY3QqIG9iamVjdCwgY29uc3QgY2hhciogb2JqZWN0TmFtZSkK
QEAgLTM2MzMsMjggKzM2MzMsMjggQEAgRWluYV9Cb29sIGV3a192aWV3X2pzX29iamVjdF9hZGQo
RXZhc19PYmplY3QqIGV3a1ZpZXcsIEV3a19KU19PYmplY3QqIG9iamVjdCwgY28KICNpZiBFTkFC
TEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKICAgICBpZiAob2JqZWN0LT52aWV3KSAvLyBvYmplY3Qg
aGFzIGFscmVhZHkgYmVlbiBhZGRlZCB0byBhbm90aGVyIGV3a192aWV3CiAgICAgICAgIHJldHVy
biBFSU5BX0ZBTFNFOwotICAgIG9iamVjdC0+bmFtZSA9IGVpbmFfc3RyaW5nc2hhcmVfYWRkKG9i
amVjdF9uYW1lKTsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBF
SU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJ
TkFfRkFMU0UpOworICAgIG9iamVjdC0+bmFtZSA9IGVpbmFfc3RyaW5nc2hhcmVfYWRkKG9iamVj
dE5hbWUpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRh
LCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRh
LCBwcml2LCBFSU5BX0ZBTFNFKTsKIAogICAgIEpTQzo6SlNMb2NrIGxvY2soSlNDOjpTaWxlbmNl
QXNzZXJ0aW9uc09ubHkpOwotICAgIFdlYkNvcmU6OkpTRE9NV2luZG93KiB3aW5kb3cgPSB0b0pT
RE9NV2luZG93KHByaXYtPm1haW5fZnJhbWUsIFdlYkNvcmU6Om1haW5UaHJlYWROb3JtYWxXb3Js
ZCgpKTsKKyAgICBXZWJDb3JlOjpKU0RPTVdpbmRvdyogd2luZG93ID0gdG9KU0RPTVdpbmRvdyhw
cml2LT5tYWluRnJhbWUsIFdlYkNvcmU6Om1haW5UaHJlYWROb3JtYWxXb3JsZCgpKTsKICAgICBK
U0M6OkJpbmRpbmdzOjpSb290T2JqZWN0KiByb290OwotICAgIHJvb3QgPSBwcml2LT5tYWluX2Zy
YW1lLT5zY3JpcHQoKS0+YmluZGluZ1Jvb3RPYmplY3QoKTsKKyAgICByb290ID0gcHJpdi0+bWFp
bkZyYW1lLT5zY3JpcHQoKS0+YmluZGluZ1Jvb3RPYmplY3QoKTsKIAogICAgIGlmICghd2luZG93
KSB7CiAgICAgICAgIEVSUigiV2FybmluZzogY291bGRuJ3QgZ2V0IHdpbmRvdyBvYmplY3QiKTsK
ICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CiAgICAgfQogCi0gICAgSlNDOjpFeGVjU3RhdGUq
IGV4ZWMgPSB3aW5kb3ctPmdsb2JhbEV4ZWMoKTsKKyAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlY3V0
ZVN0YXRlID0gd2luZG93LT5nbG9iYWxFeGVjKCk7CiAKLSAgICBvYmotPnZpZXcgPSBld2tWaWV3
OwotICAgIEpTQzo6SlNPYmplY3QqIHJ1bnRpbWVPYmplY3QgPSAoSlNDOjpKU09iamVjdCopSlND
OjpCaW5kaW5nczo6Q0luc3RhbmNlOjpjcmVhdGUoKE5QT2JqZWN0KilvYmosIHJvb3QpLT5jcmVh
dGVSdW50aW1lT2JqZWN0KGV4ZWMpOwotICAgIEpTQzo6SWRlbnRpZmllciBpZCA9IEpTQzo6SWRl
bnRpZmllcihleGVjLCBvYmpfbmFtZSk7CisgICAgb2JqZWN0LT52aWV3ID0gZXdrVmlldzsKKyAg
ICBKU0M6OkpTT2JqZWN0KiBydW50aW1lT2JqZWN0ID0gKEpTQzo6SlNPYmplY3QqKUpTQzo6Qmlu
ZGluZ3M6OkNJbnN0YW5jZTo6Y3JlYXRlKChOUE9iamVjdCopb2JqZWN0LCByb290KS0+Y3JlYXRl
UnVudGltZU9iamVjdChleGVjdXRlU3RhdGUpOworICAgIEpTQzo6SWRlbnRpZmllciBpZCA9IEpT
Qzo6SWRlbnRpZmllcihleGVjLCBvYmplY3ROYW1lKTsKIAogICAgIEpTQzo6UHV0UHJvcGVydHlT
bG90IHNsb3Q7Ci0gICAgd2luZG93LT5wdXQoZXhlYywgaWQsIHJ1bnRpbWVPYmplY3QsIHNsb3Qp
OworICAgIHdpbmRvdy0+cHV0KGV4ZWN1dGVTdGF0ZSwgaWQsIHJ1bnRpbWVPYmplY3QsIHNsb3Qp
OwogICAgIHJldHVybiBFSU5BX1RSVUU7CiAjZWxzZQogICAgIHJldHVybiBFSU5BX0ZBTFNFOwpA
QCAtMzY2MywyNyArMzY2MywyNyBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfanNfb2JqZWN0X2FkZChF
dmFzX09iamVjdCogZXdrVmlldywgRXdrX0pTX09iamVjdCogb2JqZWN0LCBjbwogCiBFaW5hX0Jv
b2wgZXdrX3ZpZXdfcHJvdG9jb2xfaGFuZGxlcl9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGNv
bnN0IGNoYXIqKiBwcm90b2NvbHMsIEV3a19WaWV3X1Jlc291cmNlX0hhbmRsZXJfQ2IgaGFuZGxl
ciwgdm9pZCogY29udGV4dCkKIHsKLSAgICBFV0tfVklFV19TRF9HRVQoZXdrVmlldywgc2QpOwot
ICAgIEVXS19WSUVXX1BSSVZfR0VUKHNkLCBwcml2KTsKKyAgICBFV0tfVklFV19TRF9HRVQoZXdr
Vmlldywgc21hcnREYXRhKTsKKyAgICBFV0tfVklFV19QUklWX0dFVChzbWFydERhdGEsIHByaXYp
OwogCiAgICAgaWYgKCFoYW5kbGVyKQogICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKIAotICAg
IHByaXYtPmN1c3RvbV9yZXNvdXJjZV9oYW5kbGVyLmZ1bmN0aW9uID0gaGFuZGxlcjsKLSAgICBw
cml2LT5jdXN0b21fcmVzb3VyY2VfaGFuZGxlci5jb250ZXh0ID0gY29udGV4dDsKKyAgICBwcml2
LT5jdXN0b21SZXNvdXJjZUhhbmRsZXIuZnVuY3Rpb24gPSBoYW5kbGVyOworICAgIHByaXYtPmN1
c3RvbVJlc291cmNlSGFuZGxlci5jb250ZXh0ID0gY29udGV4dDsKIAogICAgIHJldHVybiBld2tf
Y3VzdG9tX3Byb3RvY29sX2hhbmRsZXJfc2V0KHByb3RvY29scyk7CiB9CiAKIEVpbmFfQm9vbCBl
d2tfdmlld19wcm90b2NvbF9oYW5kbGVyX3Vuc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewot
ICAgIEVXS19WSUVXX1NEX0dFVChld2tWaWV3LCBzZCk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVQo
c2QsIHByaXYpOworICAgIEVXS19WSUVXX1NEX0dFVChld2tWaWV3LCBzbWFydERhdGEpOworICAg
IEVXS19WSUVXX1BSSVZfR0VUKHNtYXJ0RGF0YSwgcHJpdik7CiAgICAgRWluYV9Cb29sIHJldCA9
IGV3a19jdXN0b21fcHJvdG9jb2xfaGFuZGxlcl9hbGxfdW5zZXQoKTsKIAogICAgIGlmIChyZXQp
IHsKLSAgICAgICAgcHJpdi0+Y3VzdG9tX3Jlc291cmNlX2hhbmRsZXIuZnVuY3Rpb24gPSAwOwot
ICAgICAgICBwcml2LT5jdXN0b21fcmVzb3VyY2VfaGFuZGxlci5jb250ZXh0ID0gMDsKKyAgICAg
ICAgcHJpdi0+Y3VzdG9tUmVzb3VyY2VIYW5kbGVyLmZ1bmN0aW9uID0gMDsKKyAgICAgICAgcHJp
di0+Y3VzdG9tUmVzb3VyY2VIYW5kbGVyLmNvbnRleHQgPSAwOwogICAgIH0KIAogICAgIHJldHVy
biByZXQ7CkBAIC0zNjkxLDEyICszNjkxLDEyIEBAIEVpbmFfQm9vbCBld2tfdmlld19wcm90b2Nv
bF9oYW5kbGVyX3Vuc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3KQogCiB2b2lkKiBld2tfdmlld19w
cm90b2NvbF9oYW5kbGVyX3Jlc291cmNlX2dldChFdmFzX09iamVjdCogZXdrVmlldywgc2l6ZV90
KiBieXRlc1JlYWQsIGNoYXIqKiBtaW1lLCBjb25zdCBjaGFyKiBmaWxlKQogewotICAgIEVXS19W
SUVXX1NEX0dFVChld2tWaWV3LCBzZCk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVQoc2QsIHByaXYp
OworICAgIEVXS19WSUVXX1NEX0dFVChld2tWaWV3LCBzbWFydERhdGEpOworICAgIEVXS19WSUVX
X1BSSVZfR0VUKHNtYXJ0RGF0YSwgcHJpdik7CiAKLSAgICBFd2tfVmlld19SZXNvdXJjZV9IYW5k
bGVyX0NiIGZ1bmN0aW9uID0gcHJpdi0+Y3VzdG9tX3Jlc291cmNlX2hhbmRsZXIuZnVuY3Rpb247
CisgICAgRXdrX1ZpZXdfUmVzb3VyY2VfSGFuZGxlcl9DYiBmdW5jdGlvbiA9IHByaXYtPmN1c3Rv
bVJlc291cmNlSGFuZGxlci5mdW5jdGlvbjsKICAgICBpZiAoZnVuY3Rpb24pCi0gICAgICAgIHJl
dHVybiBmdW5jdGlvbihmaWxlLCBieXRlc1JlYWQsIG1pbWUsIHByaXYtPmN1c3RvbV9yZXNvdXJj
ZV9oYW5kbGVyLmNvbnRleHQpOworICAgICAgICByZXR1cm4gZnVuY3Rpb24oZmlsZSwgYnl0ZXNS
ZWFkLCBtaW1lLCBwcml2LT5jdXN0b21SZXNvdXJjZUhhbmRsZXIuY29udGV4dCk7CiAKICAgICBy
ZXR1cm4gMDsKIH0KQEAgLTM3MDYsMTcgKzM3MDYsMTcgQEAgdm9pZCogZXdrX3ZpZXdfcHJvdG9j
b2xfaGFuZGxlcl9yZXNvdXJjZV9nZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIHNpemVfdCogYnl0
ZXMKICAqIFJlcG9ydHMgdGhhdCB0aGUgY29udGVudHMgaGF2ZSByZXNpemVkLiBUaGUgZXdrX3Zp
ZXcgY2FsbHMgY29udGVudHNfcmVzaXplLAogICogd2hpY2ggY2FuIGJlIHJlaW1wbGVtZW50ZWQg
YXMgbmVlZGVkLgogICoKLSAqIEBwYXJhbSBvIHZpZXcuCi0gKiBAcGFyYW0gdyBuZXcgY29udGVu
dCB3aWR0aC4KLSAqIEBwYXJhbSBoIG5ldyBjb250ZW50IGhlaWdodC4KKyAqIEBwYXJhbSBld2tW
aWV3IHZpZXcuCisgKiBAcGFyYW0gd2lkdGggbmV3IGNvbnRlbnQgd2lkdGguCisgKiBAcGFyYW0g
aGVpZ2h0IG5ldyBjb250ZW50IGhlaWdodC4KICAqLwogdm9pZCBld2tfdmlld19jb250ZW50c19z
aXplX2NoYW5nZWQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGludCB3aWR0aCwgaW50IGhlaWdodCkK
IHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkKTsKLSAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTihzZC0+YXBpLT5jb250ZW50c19yZXNpemUpOworICAgIEVXS19WSUVXX1NEX0dFVF9P
Ul9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTihzbWFydERhdGEtPmFwaSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21h
cnREYXRhLT5hcGktPmNvbnRlbnRzX3Jlc2l6ZSk7CiAKLSAgICBpZiAoIXNkLT5hcGktPmNvbnRl
bnRzX3Jlc2l6ZShzZCwgd2lkdGgsIGhlaWdodCkpCisgICAgaWYgKCFzbWFydERhdGEtPmFwaS0+
Y29udGVudHNfcmVzaXplKHNtYXJ0RGF0YSwgd2lkdGgsIGhlaWdodCkpCiAgICAgICAgIEVSUigi
ZmFpbGVkIHRvIHJlc2l6ZSBjb250ZW50cyB0byAlZHglZCIsIHdpZHRoLCBoZWlnaHQpOwogfQog
CkBAIC0zNzI0LDE0ICszNzI0LDE0IEBAIHZvaWQgZXdrX3ZpZXdfY29udGVudHNfc2l6ZV9jaGFu
Z2VkKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCiAgKiBAaW50
ZXJuYWwKICAqIEdldHMgcGFnZSBzaXplIGZyb20gZnJhbWV2aWV3LgogICoKLSAqIEBwYXJhbSBv
IHZpZXcuCisgKiBAcGFyYW0gZXdrVmlldyB2aWV3LgogICoKICAqIEByZXR1cm4gcGFnZSBzaXpl
LgogICovCiBXZWJDb3JlOjpGbG9hdFJlY3QgZXdrX3ZpZXdfcGFnZV9yZWN0X2dldChjb25zdCBF
dmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVQoZXdrVmlldywgc2Qp
OwotICAgIEVXS19WSUVXX1BSSVZfR0VUKHNkLCBwcml2KTsKKyAgICBFV0tfVklFV19TRF9HRVQo
ZXdrVmlldywgc21hcnREYXRhKTsKKyAgICBFV0tfVklFV19QUklWX0dFVChzbWFydERhdGEsIHBy
aXYpOwogCiAgICAgV2ViQ29yZTo6RnJhbWUqIG1haW5fZnJhbWUgPSBwcml2LT5wYWdlLT5tYWlu
RnJhbWUoKTsKICAgICByZXR1cm4gbWFpbl9mcmFtZS0+dmlldygpLT5mcmFtZVJlY3QoKTsKQEAg
LTM3NDAsMjQgKzM3NDAsMjQgQEAgV2ViQ29yZTo6RmxvYXRSZWN0IGV3a192aWV3X3BhZ2VfcmVj
dF9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5U
UykKIHZvaWQgZXdrX3ZpZXdfbmVlZF90b3VjaF9ldmVudHNfc2V0KEV2YXNfT2JqZWN0KiBld2tW
aWV3LCBib29sIG5lZWRlZCkKIHsKLSAgICBFV0tfVklFV19TRF9HRVQoZXdrVmlldywgc2QpOwot
ICAgIEVXS19WSUVXX1BSSVZfR0VUKHNkLCBwcml2KTsKKyAgICBFV0tfVklFV19TRF9HRVQoZXdr
Vmlldywgc21hcnREYXRhKTsKKyAgICBFV0tfVklFV19QUklWX0dFVChzbWFydERhdGEsIHByaXYp
OwogCi0gICAgcHJpdi0+ZmxhZ3MubmVlZF90b3VjaF9ldmVudHMgPSBuZWVkZWQ7CisgICAgcHJp
di0+ZmxhZ3MubmVlZFRvdWNoRXZlbnRzID0gbmVlZGVkOwogfQogCiBFaW5hX0Jvb2wgZXdrX3Zp
ZXdfbmVlZF90b3VjaF9ldmVudHNfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewot
ICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwot
ICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7Ci0g
ICAgcmV0dXJuIHByaXYtPmZsYWdzLm5lZWRfdG91Y2hfZXZlbnRzOworICAgIEVXS19WSUVXX1NE
X0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tf
VklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAg
ICByZXR1cm4gcHJpdi0+ZmxhZ3MubmVlZFRvdWNoRXZlbnRzOwogfQogI2VuZGlmCiAKIEVpbmFf
Qm9vbCBld2tfdmlld19tb2RlX3NldChFdmFzX09iamVjdCogZXdrVmlldywgRXdrX1ZpZXdfTW9k
ZSB2aWV3TW9kZSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNk
LCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYs
IEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21h
cnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21h
cnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKIAogICAgIHN3aXRjaCAodmlld01vZGUpIHsKICAg
ICBjYXNlIEVXS19WSUVXX01PREVfV0lORE9XRUQ6CkBAIC0zNzg2LDEwICszNzg2LDEwIEBAIEV3
a19WaWV3X01vZGUgZXdrX3ZpZXdfbW9kZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcp
CiB7CiAgICAgRXdrX1ZpZXdfTW9kZSBtb2RlID0gRVdLX1ZJRVdfTU9ERV9XSU5ET1dFRDsKIAot
ICAgIEVXS19WSUVXX1NEX0dFVChld2tWaWV3LCBzZCk7Ci0gICAgaWYgKCFzZCkKKyAgICBFV0tf
VklFV19TRF9HRVQoZXdrVmlldywgc21hcnREYXRhKTsKKyAgICBpZiAoIXNtYXJ0RGF0YSkKICAg
ICAgICAgcmV0dXJuIG1vZGU7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVQoc2QsIHByaXYpOworICAg
IEVXS19WSUVXX1BSSVZfR0VUKHNtYXJ0RGF0YSwgcHJpdik7CiAgICAgaWYgKCFwcml2KQogICAg
ICAgICByZXR1cm4gbW9kZTsKIApAQCAtMzgxNyw3ICszODE3LDcgQEAgRXdrX1ZpZXdfTW9kZSBl
d2tfdmlld19tb2RlX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKICAqIEBpbnRlcm5h
bAogICogUmVwb3J0cyB0aGUgdmlldyB0aGF0IGVkaXRvciBjbGllbnQgc2VsZWN0aW9uIGhhcyBj
aGFuZ2VkLgogICoKLSAqIEBwYXJhbSBvIFZpZXcuCisgKiBAcGFyYW0gZXdrVmlldyBWaWV3Lgog
ICoKICAqIEVtaXRzIHNpZ25hbDogImVkaXRvcmNsaWVudHNlbGVjdGlvbixjaGFuZ2VkIiB3aXRo
IG5vIHBhcmFtZXRlcnMuCiAgKi8KQEAgLTM4MzAsNyArMzgzMCw3IEBAIHZvaWQgZXdrX3ZpZXdf
ZWRpdG9yX2NsaWVudF9zZWxlY3Rpb25fY2hhbmdlZChFdmFzX09iamVjdCogZXdrVmlldykKICAq
IEBpbnRlcm5hbAogICogUmVwb3J0cyB0byB0aGUgdmlldyB0aGF0IGVkaXRvciBjbGllbnQncyBj
b250ZW50cyB3ZXJlIGNoYW5nZWQuCiAgKgotICogQHBhcmFtIG8gVmlldy4KKyAqIEBwYXJhbSBl
d2tWaWV3IFZpZXcuCiAgKgogICogRW1pdHMgc2lnbmFsOiAiZWRpdG9yY2xpZW50LGNvbnRlbnRz
LGNoYW5nZWQiIHdpdGggbm8gcGFyYW1ldGVycy4KICAqLwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111422</attachid>
            <date>2011-10-18 04:23:27 -0700</date>
            <delta_ts>2011-10-18 04:28:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69988-20111018202326.patch</filename>
            <type>text/plain</type>
            <size>368647</size>
            <attacher name="Gyuyoung Kim">gyuyoung.kim</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTczNDcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZs
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZwppbmRleCBkODg3YmI4OWJj
NTkzNDJmYzdiMzE3MzA1Mzk2MWJjMDMyYjc3NTQ5Li4xNzRkODg1MTNiOWJhZDdiYWM0ZmYwZjEy
NTQ4MzkzZGZmNDcyZGJjIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDYgQEAKKzIwMTEt
MTAtMTggIEd5dXlvdW5nIEtpbSAgPGd5dXlvdW5nLmtpbUBzYW1zdW5nLmNvbT4KKworICAgICAg
ICBbRUZMXSBDaGFuZ2UgZWZsIHN0eWxlIGxvY2FsIHZhcmlhYmxlcyB3aXRoIFdlYktpdCBjb2Rp
bmcgU3R5bGUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD02OTk4OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEluIGNvbW1vbiB3aXRoIEJ1ZyA2OTA3MywgdGhpcyBpcyBhIHRoaXJkIHN0ZXAgaW4gb3JkZXIg
dG8gYmUgbW9yZSBjb21wbGlhbnQgd2l0aCBXZWJLaXQgY29kaW5nIHN0eWxlLgorICAgICAgICBX
ZSBoYXZlIHVzZWQgb25lLWxldHRlcnwgdHdvLWxldHRlciBsb2NhbCB2YXJpYWJsZSBhY2NvcmRp
bmcgdG8gZWZsIHN0eWxlLiBIb3dldmVyLCBpdCdzCisgICAgICAgIG1vcmUgZGlmZmljdWx0IGZv
ciBvdGhlciByZXZpZXdlcnMgdG8gcmV2aWV3IEVGTCBwYXRjaGVzLiBTbywgdGhpcyBwYXRjaCBj
aGFuZ2VzIGVmbCBzdHlsZQorICAgICAgICBwYXJhbWV0ZXJzIHdpdGggbWVhbmluZ2Z1bCBvbmUu
CisKKyAgICAgICAgLSBVc2UgKm1lbnUqIGluc3RlYWQgb2YgKm8qIGluIGNvbW1lbnQgb2YgZXdr
X2NvbnRleHRtZW51LmNwcC4KKyAgICAgICAgLSBVc2UgKmxpc3QqIGluc3RlYWQgb2YgKmwqIGxv
Y2FsIHZhcmlhYmxlCisgICAgICAgIC0gVXNlICpld2tQb2xpY3kqIGluc3RlYWQgb2YgKmV3a19w
b2xpY3kqIGluIGV3a19jb29raWVzLmNwcAorICAgICAgICAtIFVzZSAqc21hcnREYXRhKiBpbnN0
ZWFkIG9mICpzZCogbG9jYWwgdmFyaWFibGUgZm9yIEV3a19YWFhYX1NtYXJ0X0RhdGEgc3RydWN0
LgorICAgICAgICAtIFVzZSAqd2lkdGgqLCAqaGVpZ2h0KiBpbnN0ZWFkIG9mICp3KiwgKmgqIGxv
Y2FsIHZhcmlhYmxlcy4KKyAgICAgICAgLSBVc2UgKnNjcm9sbFgqLCAqc2Nyb2xsWSosICpzY3Jv
bGxXaWR0aCosICpzY3JvbGxIZWlnaHQqLCAqY2VudGVyWCosICpjZW50ZXJZKiwgKmRlbHRhWCos
ICpkZWx0YVkqLAorICAgICAgICAqYmFzZVgqLCAqYmFzZVkqIGluc3RlYWQgb2YgKnN4KiwgKnN5
KiwgKnN3KiwgKnNoKiwgKmN4KiwgKmN5KiwgKmR4KiwgKmR5KiwgKmJ4KiwgKmJ5Ki4KKyAgICAg
ICAgLSBVc2UgKnJlZCosICpncmVlbiosICpibHVlKiwgKmFscGhhKiwgKmNvbnRlbnRSZWQqLCAq
Y29udGVudEdyZWVuKiwgKmNvbnRlbnRCbHVlKiBhbmQgKmNvbnRlbnRBbHBoYSoKKyAgICAgICAg
aW5zdGVhZCBvZiAqciosKmcqLCpiKiwqYSosKmNyKiwqY2cqLCpjYiosKmNhKi4KKyAgICAgICAg
LSBVc2UgKnRpbGVQb3NpdGlvblgqLCAqdGlsZVBvc2l0aW9uWSogaW5zdGVhZCBvZiAqb3gqLCpv
eSogaW4gdGlsZWQgYmFja2luZ3N0b3JlIGZpbGVzLgorICAgICAgICAtIFVzZSAqb2JqZWN0KiBp
bnN0ZWFkIG9mICpvYmoqIAorICAgICAgICAtIFVzZSAqbGVuZ3RoKiBpbnN0ZWFkIG9mICpsZW4q
CisgICAgICAgIC0gVXNlICpjb3JlRnJhbWUqIGluc3RlYWQgb2YgKmNmKgorICAgICAgICAtIFVz
ZSAqYnVmZmVyKiBpbnN0ZWFkIG9mICpidWYqCisgICAgICAgIC0gVXNlICppdGVtKiBpbnN0ZWFk
IG9mICppKgorICAgICAgICAtIFJlbW92ZSAiXyIgaW4gbG9jYWwgdmFyaWFibGUuCisgICAgICAg
IC0gQW5kIHNvIG9uLgorCisgICAgICAgICogZXdrL2V3a19hdXRoX3NvdXAuY3BwOgorICAgICAg
ICAqIGV3ay9ld2tfY29udGV4dG1lbnUuY3BwOgorICAgICAgICAqIGV3ay9ld2tfY29va2llcy5j
cHA6CisgICAgICAgICogZXdrL2V3a19mcmFtZS5jcHA6CisgICAgICAgICogZXdrL2V3a19oaXN0
b3J5LmNwcDoKKyAgICAgICAgKiBld2svZXdrX2pzLmNwcDoKKyAgICAgICAgKiBld2svZXdrX21h
aW4uY3BwOgorICAgICAgICAqIGV3ay9ld2tfc2V0dGluZ3MuY3BwOgorICAgICAgICAqIGV3ay9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZS5jcHA6CisgICAgICAgICogZXdrL2V3a190aWxlZF9tYXRy
aXguY3BwOgorICAgICAgICAqIGV3ay9ld2tfdGlsZWRfbW9kZWwuY3BwOgorICAgICAgICAqIGV3
ay9ld2tfdmlldy5jcHA6CisKIDIwMTEtMTAtMTIgIEpvc2VwaCBQZWNvcmFybyAgPGpvZXBlY2tA
d2Via2l0Lm9yZz4KIAogICAgICAgICBQYXNzIFBhcnNlZCBBY2NlcHQgQXR0cmlidXRlIE1JTUUg
VHlwZXMgdG8gV2ViS2l0IENsaWVudHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3
ay9ld2tfYXV0aF9zb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfYXV0aF9zb3Vw
LmNwcAppbmRleCBjYmM4NzU2ZWQ4NWViYzE1ZTc3YmM0MWIzM2UwNTMzYzQyNWExOTJmLi5mMDVm
ZDNjY2U1ODM5MjBhY2ExNmYwYTUyNDFhM2ZiZmMyNjg0ZWMzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2VmbC9ld2svZXdrX2F1dGhfc291cC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9lZmwv
ZXdrL2V3a19hdXRoX3NvdXAuY3BwCkBAIC00MCw3ICs0MCw3IEBAIGV4dGVybiAiQyIgewogICov
CiAKIHR5cGVkZWYgc3RydWN0IF9Fd2tfQXV0aF9EYXRhIHsKLSAgICBTb3VwTWVzc2FnZSogbXNn
OworICAgIFNvdXBNZXNzYWdlKiBtZXNzYWdlOwogICAgIFNvdXBBdXRoKiBhdXRoOwogICAgIFNv
dXBTZXNzaW9uKiBzZXNzaW9uOwogfSBFd2tfQXV0aF9EYXRhOwpAQCAtNzksNTEgKzc5LDUxIEBA
IHZvaWQgZXdrX2F1dGhfc291cF9jcmVkZW50aWFsc19zZXQoY29uc3QgY2hhciogdXNlcm5hbWUs
IGNvbnN0IGNoYXIqIHBhc3N3b3JkLCB2CiAgICAgaWYgKCFkYXRhKQogICAgICAgICByZXR1cm47
CiAKLSAgICBFd2tfQXV0aF9EYXRhKiBhdXRoX2RhdGEgPSBzdGF0aWNfY2FzdDxFd2tfQXV0aF9E
YXRhKj4oZGF0YSk7Ci0gICAgc291cF9hdXRoX2F1dGhlbnRpY2F0ZShhdXRoX2RhdGEtPmF1dGgs
IHVzZXJuYW1lLCBwYXNzd29yZCk7Ci0gICAgc291cF9zZXNzaW9uX3VucGF1c2VfbWVzc2FnZShh
dXRoX2RhdGEtPnNlc3Npb24sIGF1dGhfZGF0YS0+bXNnKTsKLSAgICBmcmVlX2F1dGhfZGF0YShh
dXRoX2RhdGEpOworICAgIEV3a19BdXRoX0RhdGEqIGF1dGhEYXRhID0gc3RhdGljX2Nhc3Q8RXdr
X0F1dGhfRGF0YSo+KGRhdGEpOworICAgIHNvdXBfYXV0aF9hdXRoZW50aWNhdGUoYXV0aERhdGEt
PmF1dGgsIHVzZXJuYW1lLCBwYXNzd29yZCk7CisgICAgc291cF9zZXNzaW9uX3VucGF1c2VfbWVz
c2FnZShhdXRoRGF0YS0+c2Vzc2lvbiwgYXV0aERhdGEtPm1lc3NhZ2UpOworICAgIGZyZWVfYXV0
aF9kYXRhKGF1dGhEYXRhKTsKIH0KIAotc3RhdGljIHZvaWQgc2Vzc2lvbl9hdXRoZW50aWNhdGUo
U291cFNlc3Npb24qIHNlc3Npb24sIFNvdXBNZXNzYWdlKiBtc2csIFNvdXBBdXRoKiBhdXRoLCBn
Ym9vbGVhbiByZXRyeWluZywgZ3BvaW50ZXIgLyogdXNlcl9kYXRhICovKQorc3RhdGljIHZvaWQg
c2Vzc2lvbl9hdXRoZW50aWNhdGUoU291cFNlc3Npb24qIHNlc3Npb24sIFNvdXBNZXNzYWdlKiBt
ZXNzYWdlLCBTb3VwQXV0aCogYXV0aCwgZ2Jvb2xlYW4gcmV0cnlpbmcsIGdwb2ludGVyIC8qIHVz
ZXJfZGF0YSAqLykKIHsKICAgICBTb3VwVVJJKiB1cmk7Ci0gICAgRXdrX0F1dGhfRGF0YSogYXV0
aF9kYXRhOwotICAgIGNvbnN0IGNoYXIqIHJlYWxtOworICAgIEV3a19BdXRoX0RhdGEqIGF1dGhE
YXRhOworICAgIGNvbnN0IGNoYXIqIHJlYWxNZXNzYWdlOwogCiAgICAgaWYgKCFld2tfYXV0aF9z
aG93X2RpYWxvZ19jYWxsYmFjaykKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0aF9kYXRhID0g
c3RhdGljX2Nhc3Q8RXdrX0F1dGhfRGF0YSo+KGNhbGxvYygxLCBzaXplb2YoRXdrX0F1dGhfRGF0
YSkpKTsKKyAgICBhdXRoRGF0YSA9IHN0YXRpY19jYXN0PEV3a19BdXRoX0RhdGEqPihjYWxsb2Mo
MSwgc2l6ZW9mKEV3a19BdXRoX0RhdGEpKSk7CiAKLSAgICBpZiAoIWF1dGhfZGF0YSkgeworICAg
IGlmICghYXV0aERhdGEpIHsKICAgICAgICAgQ1JJVElDQUwoImNvdWxkIG5vdCBhbGxvY2F0ZSBF
d2tfQXV0aF9EYXRhIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBzb3VwX3Nlc3Np
b25fcGF1c2VfbWVzc2FnZShzZXNzaW9uLCBtc2cpOworICAgIHNvdXBfc2Vzc2lvbl9wYXVzZV9t
ZXNzYWdlKHNlc3Npb24sIG1lc3NhZ2UpOwogICAgIC8vIFdlIG5lZWQgdG8gbWFrZSBzdXJlIHRo
ZSBtZXNzYWdlIHN0aWNrcyBhcm91bmQgd2hlbiBwYXVzaW5nIGl0LgotICAgIGdfb2JqZWN0X3Jl
Zihtc2cpOworICAgIGdfb2JqZWN0X3JlZihtZXNzYWdlKTsKICAgICBnX29iamVjdF9yZWYoc2Vz
c2lvbik7CiAgICAgZ19vYmplY3RfcmVmKGF1dGgpOwogCi0gICAgYXV0aF9kYXRhLT5tc2cgPSBt
c2c7Ci0gICAgYXV0aF9kYXRhLT5hdXRoID0gYXV0aDsKLSAgICBhdXRoX2RhdGEtPnNlc3Npb24g
PSBzZXNzaW9uOworICAgIGF1dGhEYXRhLT5tZXNzYWdlID0gbWVzc2FnZTsKKyAgICBhdXRoRGF0
YS0+YXV0aCA9IGF1dGg7CisgICAgYXV0aERhdGEtPnNlc3Npb24gPSBzZXNzaW9uOwogCi0gICAg
dXJpID0gc291cF9tZXNzYWdlX2dldF91cmkoYXV0aF9kYXRhLT5tc2cpOwotICAgIHJlYWxtID0g
c291cF9hdXRoX2dldF9yZWFsbShhdXRoX2RhdGEtPmF1dGgpOworICAgIHVyaSA9IHNvdXBfbWVz
c2FnZV9nZXRfdXJpKGF1dGhEYXRhLT5tZXNzYWdlKTsKKyAgICByZWFsTWVzc2FnZSA9IHNvdXBf
YXV0aF9nZXRfcmVhbG0oYXV0aERhdGEtPmF1dGgpOwogCiAgICAgLy8gQ2FsbCBhcHBsaWNhdGlv
biBtZXRob2QgcmVzcG9uc2libGUgZm9yIHNob3dpbmcgYXV0aGVudGljYXRpb24gZGlhbG9nIGFu
ZCBzZW5kaW5nIGJhY2sgYXV0aG9yaXphdGlvbiBkYXRhLgotICAgIGV3a19hdXRoX3Nob3dfZGlh
bG9nX2NhbGxiYWNrKHJlYWxtLCBzb3VwX3VyaV90b19zdHJpbmcodXJpLCBUUlVFKSwgYXV0aF9k
YXRhKTsKKyAgICBld2tfYXV0aF9zaG93X2RpYWxvZ19jYWxsYmFjayhyZWFsTWVzc2FnZSwgc291
cF91cmlfdG9fc3RyaW5nKHVyaSwgVFJVRSksIGF1dGhEYXRhKTsKIH0KIAotc3RhdGljIHZvaWQg
ZnJlZV9hdXRoX2RhdGEoRXdrX0F1dGhfRGF0YSogYXV0aF9kYXRhKQorc3RhdGljIHZvaWQgZnJl
ZV9hdXRoX2RhdGEoRXdrX0F1dGhfRGF0YSogYXV0aERhdGEpCiB7Ci0gICAgZ19vYmplY3RfdW5y
ZWYoYXV0aF9kYXRhLT5tc2cpOwotICAgIGdfb2JqZWN0X3VucmVmKGF1dGhfZGF0YS0+c2Vzc2lv
bik7Ci0gICAgZ19vYmplY3RfdW5yZWYoYXV0aF9kYXRhLT5hdXRoKTsKLSAgICBmcmVlKGF1dGhf
ZGF0YSk7CisgICAgZ19vYmplY3RfdW5yZWYoYXV0aERhdGEtPm1lc3NhZ2UpOworICAgIGdfb2Jq
ZWN0X3VucmVmKGF1dGhEYXRhLT5zZXNzaW9uKTsKKyAgICBnX29iamVjdF91bnJlZihhdXRoRGF0
YS0+YXV0aCk7CisgICAgZnJlZShhdXRoRGF0YSk7CiB9CiAKIHN0YXRpYyB2b2lkIGF0dGFjaChT
b3VwU2Vzc2lvbkZlYXR1cmUqIG1hbmFnZXIsIFNvdXBTZXNzaW9uKiBzZXNzaW9uKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19jb250ZXh0bWVudS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L2VmbC9ld2svZXdrX2NvbnRleHRtZW51LmNwcAppbmRleCA2MjFjNzljNzA1MWQzZTgw
MGRhMDc1NTllOTQ4ZGE1ZTljODQ5OTNiLi5mYTczNjIzZjAyMmFlODBlNjVlNjE2MDQ1MmE2MTE2
YmEwZWU4OTY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2NvbnRleHRt
ZW51LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2NvbnRleHRtZW51LmNwcApA
QCAtMjQ4LDcgKzI0OCw3IEBAIEV3a19Db250ZXh0X01lbnUqIGV3a19jb250ZXh0X21lbnVfbmV3
KEV2YXNfT2JqZWN0KiB2aWV3LCBXZWJDb3JlOjpDb250ZXh0TWVudUNvCiAgKgogICogRnJlZXMg
dGhlIGNvbnRleHQgbWVudS4KICAqCi0gKiBAcGFyYW0gbyB0aGUgdmlldyBvYmplY3QKKyAqIEBw
YXJhbSBtZW51IHRoZSB2aWV3IG9iamVjdAogICogQHJldHVybiBAYyBFSU5BX1RSVUUgb24gc3Vj
Y2Vzcywgb3IgQGMgRUlOQV9GQUxTRSBvbiBmYWlsdXJlCiAgKgogICogQG5vdGUgZW1pdHMgYSBz
aWduYWwgImNvbnRleHRtZW51LGZyZWUiCkBAIC0yNjksNyArMjY5LDcgQEAgRWluYV9Cb29sIGV3
a19jb250ZXh0X21lbnVfZnJlZShFd2tfQ29udGV4dF9NZW51KiBtZW51KQogICoKICAqIEFwcGVu
ZHMgdGhlIFdlYkNvcmUncyBpdGVtIHRvIHRoZSBjb250ZXh0IG1lbnUgb2JqZWN0LgogICoKLSAq
IEBwYXJhbSBvIHRoZSBjb250ZXh0IG1lbnUgb2JqZWN0CisgKiBAcGFyYW0gbWVudSB0aGUgY29u
dGV4dCBtZW51IG9iamVjdAogICogQHBhcmFtIGNvcmUgdGhlIFdlYkNvcmUncyBjb250ZXh0IG1l
bnUgaXRlbSB0aGF0IHdpbGwgYmUgYWRkZWQgdG8gdGhlIGNvbnRleHQgbWVudQogICogQG5vdGUg
ZW1pdHMgYSBzaWduYWwgImNvbnRleHRtZW51LGl0ZW0sYXBwZW5kZWQiCiAgKgpAQCAtMjk0LDcg
KzI5NCw3IEBAIHZvaWQgZXdrX2NvbnRleHRfbWVudV9pdGVtX2FwcGVuZChFd2tfQ29udGV4dF9N
ZW51KiBtZW51LCBXZWJDb3JlOjpDb250ZXh0TWVudUl0CiAgKgogICogRW1pdHMgYSBzaWduYWwg
d2l0aCB0aGUgaXRlbXMgb2YgdGhlIGNvbnRleHQgbWVudS4KICAqCi0gKiBAcGFyYW0gbyB0aGUg
Y29udGV4dCBtZW51IG9iamVjdAorICogQHBhcmFtIG1lbnUgdGhlIGNvbnRleHQgbWVudSBvYmpl
Y3QKICAqIEByZXR1cm4gdGhlIHNhbWUgY29udGV4dCBtZW51IG9iamVjdCB0aGF0IHdhcyBnaXZl
biB0aHJvdWdoIHBhcmFtZXRlcgogICoKICAqIEBub3RlIGVtaXRzIGEgc2lnbmFsICJjb250ZXh0
bWVudSxjdXN0b21pemUiCkBAIC0zMTQsNyArMzE0LDcgQEAgRXdrX0NvbnRleHRfTWVudSogZXdr
X2NvbnRleHRfbWVudV9jdXN0b21fZ2V0KGNvbnN0IEV3a19Db250ZXh0X01lbnUqIG1lbnUpCiAg
KgogICogRW1pdHMgYSBzaWduYWwgImNvbnRleHRtZW51LHNob3ciCiAgKgotICogQHBhcmFtIG8g
dGhlIGNvbnRleHQgbWVudSBvYmplY3QKKyAqIEBwYXJhbSBtZW51IHRoZSBjb250ZXh0IG1lbnUg
b2JqZWN0CiAgKi8KIHZvaWQgZXdrX2NvbnRleHRfbWVudV9zaG93KGNvbnN0IEV3a19Db250ZXh0
X01lbnUqIG1lbnUpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2Nv
b2tpZXMuY3BwIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19jb29raWVzLmNwcAppbmRleCAw
NGQ3MDQxNTdkMzU4ZTNiODZjOTcyNWZjOTU4M2I4M2FhYzA4NTVmLi5mZjZmOTc0NTQ4OTM3NTU4
MGUzZWVlOGExZWQ5ZTM1Y2YyMWZjZjE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9l
d2svZXdrX2Nvb2tpZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfY29va2ll
cy5jcHAKQEAgLTY3LDY2ICs2Nyw2NiBAQCBFaW5hX0Jvb2wgZXdrX2Nvb2tpZXNfZmlsZV9zZXQo
Y29uc3QgY2hhciogZmlsZW5hbWUpCiB2b2lkIGV3a19jb29raWVzX2NsZWFyKHZvaWQpCiB7CiAj
aWYgVVNFKFNPVVApCi0gICAgR1NMaXN0KiBsOworICAgIEdTTGlzdCogbGlzdDsKICAgICBHU0xp
c3QqIHA7CiAgICAgU291cENvb2tpZUphciogY29va2llSmFyID0gV2ViQ29yZTo6ZGVmYXVsdENv
b2tpZUphcigpOwogCi0gICAgbCA9IHNvdXBfY29va2llX2phcl9hbGxfY29va2llcyhjb29raWVK
YXIpOwotICAgIGZvciAocCA9IGw7IHA7IHAgPSBwLT5uZXh0KQorICAgIGxpc3QgPSBzb3VwX2Nv
b2tpZV9qYXJfYWxsX2Nvb2tpZXMoY29va2llSmFyKTsKKyAgICBmb3IgKHAgPSBsaXN0OyBwOyBw
ID0gcC0+bmV4dCkKICAgICAgICAgc291cF9jb29raWVfamFyX2RlbGV0ZV9jb29raWUoY29va2ll
SmFyLCAoU291cENvb2tpZSopcC0+ZGF0YSk7CiAKLSAgICBzb3VwX2Nvb2tpZXNfZnJlZShsKTsK
KyAgICBzb3VwX2Nvb2tpZXNfZnJlZShsaXN0KTsKICNlbmRpZgogfQogCiBFaW5hX0xpc3QqIGV3
a19jb29raWVzX2dldF9hbGwodm9pZCkKIHsKLSAgICBFaW5hX0xpc3QqIGVsID0gMDsKKyAgICBF
aW5hX0xpc3QqIHJlc3VsdCA9IDA7CiAjaWYgVVNFKFNPVVApCi0gICAgR1NMaXN0KiBsOworICAg
IEdTTGlzdCogbGlzdDsKICAgICBHU0xpc3QqIHA7CiAgICAgU291cENvb2tpZUphciogY29va2ll
SmFyID0gV2ViQ29yZTo6ZGVmYXVsdENvb2tpZUphcigpOwogCi0gICAgbCA9IHNvdXBfY29va2ll
X2phcl9hbGxfY29va2llcyhjb29raWVKYXIpOwotICAgIGZvciAocCA9IGw7IHA7IHAgPSBwLT5u
ZXh0KSB7CisgICAgbGlzdCA9IHNvdXBfY29va2llX2phcl9hbGxfY29va2llcyhjb29raWVKYXIp
OworICAgIGZvciAocCA9IGxpc3Q7IHA7IHAgPSBwLT5uZXh0KSB7CiAgICAgICAgIFNvdXBDb29r
aWUqIGNvb2tpZSA9IHN0YXRpY19jYXN0PFNvdXBDb29raWUqPihwLT5kYXRhKTsKLSAgICAgICAg
RXdrX0Nvb2tpZSogYyA9IHN0YXRpY19jYXN0PEV3a19Db29raWUqPihtYWxsb2Moc2l6ZW9mKCpj
KSkpOwotICAgICAgICBjLT5uYW1lID0gc3RyZHVwKGNvb2tpZS0+bmFtZSk7Ci0gICAgICAgIGMt
PnZhbHVlID0gc3RyZHVwKGNvb2tpZS0+dmFsdWUpOwotICAgICAgICBjLT5kb21haW4gPSBzdHJk
dXAoY29va2llLT5kb21haW4pOwotICAgICAgICBjLT5wYXRoID0gc3RyZHVwKGNvb2tpZS0+cGF0
aCk7Ci0gICAgICAgIGMtPmV4cGlyZXMgPSBzb3VwX2RhdGVfdG9fdGltZV90KGNvb2tpZS0+ZXhw
aXJlcyk7Ci0gICAgICAgIGMtPnNlY3VyZSA9IHN0YXRpY19jYXN0PEVpbmFfQm9vbD4oY29va2ll
LT5zZWN1cmUpOwotICAgICAgICBjLT5odHRwX29ubHkgPSBzdGF0aWNfY2FzdDxFaW5hX0Jvb2w+
KGNvb2tpZS0+aHR0cF9vbmx5KTsKLSAgICAgICAgZWwgPSBlaW5hX2xpc3RfYXBwZW5kKGVsLCBj
KTsKKyAgICAgICAgRXdrX0Nvb2tpZSogZXdrQ29va2llID0gc3RhdGljX2Nhc3Q8RXdrX0Nvb2tp
ZSo+KG1hbGxvYyhzaXplb2YoKmV3a0Nvb2tpZSkpKTsKKyAgICAgICAgZXdrQ29va2llLT5uYW1l
ID0gc3RyZHVwKGNvb2tpZS0+bmFtZSk7CisgICAgICAgIGV3a0Nvb2tpZS0+dmFsdWUgPSBzdHJk
dXAoY29va2llLT52YWx1ZSk7CisgICAgICAgIGV3a0Nvb2tpZS0+ZG9tYWluID0gc3RyZHVwKGNv
b2tpZS0+ZG9tYWluKTsKKyAgICAgICAgZXdrQ29va2llLT5wYXRoID0gc3RyZHVwKGNvb2tpZS0+
cGF0aCk7CisgICAgICAgIGV3a0Nvb2tpZS0+ZXhwaXJlcyA9IHNvdXBfZGF0ZV90b190aW1lX3Qo
Y29va2llLT5leHBpcmVzKTsKKyAgICAgICAgZXdrQ29va2llLT5zZWN1cmUgPSBzdGF0aWNfY2Fz
dDxFaW5hX0Jvb2w+KGNvb2tpZS0+c2VjdXJlKTsKKyAgICAgICAgZXdrQ29va2llLT5odHRwX29u
bHkgPSBzdGF0aWNfY2FzdDxFaW5hX0Jvb2w+KGNvb2tpZS0+aHR0cF9vbmx5KTsKKyAgICAgICAg
cmVzdWx0ID0gZWluYV9saXN0X2FwcGVuZChyZXN1bHQsIGV3a0Nvb2tpZSk7CiAgICAgfQogCi0g
ICAgc291cF9jb29raWVzX2ZyZWUobCk7CisgICAgc291cF9jb29raWVzX2ZyZWUobGlzdCk7CiAj
ZW5kaWYKLSAgICByZXR1cm4gZWw7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogdm9pZCBld2tf
Y29va2llc19jb29raWVfZGVsKEV3a19Db29raWUqIGNvb2tpZSkKIHsKICNpZiBVU0UoU09VUCkK
ICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihjb29raWUpOwotICAgIEdTTGlzdCogbDsK
KyAgICBHU0xpc3QqIGxpc3Q7CiAgICAgR1NMaXN0KiBwOwogICAgIFNvdXBDb29raWVKYXIqIGNv
b2tpZUphciA9IFdlYkNvcmU6OmRlZmF1bHRDb29raWVKYXIoKTsKLSAgICBTb3VwQ29va2llKiBj
MSA9IHNvdXBfY29va2llX25ldygKKyAgICBTb3VwQ29va2llKiBjb29raWUxID0gc291cF9jb29r
aWVfbmV3KAogICAgICAgICBjb29raWUtPm5hbWUsIGNvb2tpZS0+dmFsdWUsIGNvb2tpZS0+ZG9t
YWluLCBjb29raWUtPnBhdGgsIC0xKTsKIAotICAgIGwgPSBzb3VwX2Nvb2tpZV9qYXJfYWxsX2Nv
b2tpZXMoY29va2llSmFyKTsKLSAgICBmb3IgKHAgPSBsOyBwOyBwID0gcC0+bmV4dCkgewotICAg
ICAgICBTb3VwQ29va2llKiBjMiA9IHN0YXRpY19jYXN0PFNvdXBDb29raWUqPihwLT5kYXRhKTsK
LSAgICAgICAgaWYgKHNvdXBfY29va2llX2VxdWFsKGMxLCBjMikpIHsKLSAgICAgICAgICAgIHNv
dXBfY29va2llX2phcl9kZWxldGVfY29va2llKGNvb2tpZUphciwgYzIpOworICAgIGxpc3QgPSBz
b3VwX2Nvb2tpZV9qYXJfYWxsX2Nvb2tpZXMoY29va2llSmFyKTsKKyAgICBmb3IgKHAgPSBsaXN0
OyBwOyBwID0gcC0+bmV4dCkgeworICAgICAgICBTb3VwQ29va2llKiBjb29raWUyID0gc3RhdGlj
X2Nhc3Q8U291cENvb2tpZSo+KHAtPmRhdGEpOworICAgICAgICBpZiAoc291cF9jb29raWVfZXF1
YWwoY29va2llMSwgY29va2llMikpIHsKKyAgICAgICAgICAgIHNvdXBfY29va2llX2phcl9kZWxl
dGVfY29va2llKGNvb2tpZUphciwgY29va2llMik7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgIH0KIAotICAgIHNvdXBfY29va2llX2ZyZWUoYzEpOwotICAgIHNvdXBfY29va2ll
c19mcmVlKGwpOworICAgIHNvdXBfY29va2llX2ZyZWUoY29va2llMSk7CisgICAgc291cF9jb29r
aWVzX2ZyZWUobGlzdCk7CiAjZW5kaWYKIH0KIApAQCAtMTY3LDcgKzE2Nyw3IEBAIHZvaWQgZXdr
X2Nvb2tpZXNfcG9saWN5X3NldChFd2tfQ29va2llX1BvbGljeSBjb29raWVQb2xpY3kpCiAKIEV3
a19Db29raWVfUG9saWN5IGV3a19jb29raWVzX3BvbGljeV9nZXQodm9pZCkKIHsKLSAgICBFd2tf
Q29va2llX1BvbGljeSBld2tfcG9saWN5ID0gRVdLX0NPT0tJRV9KQVJfQUNDRVBUX0FMV0FZUzsK
KyAgICBFd2tfQ29va2llX1BvbGljeSBld2tQb2xpY3kgPSBFV0tfQ09PS0lFX0pBUl9BQ0NFUFRf
QUxXQVlTOwogI2lmIFVTRShTT1VQKQogICAgIFNvdXBDb29raWVKYXIqIGNvb2tpZUphciA9IFdl
YkNvcmU6OmRlZmF1bHRDb29raWVKYXIoKTsKICAgICBTb3VwQ29va2llSmFyQWNjZXB0UG9saWN5
IHBvbGljeTsKQEAgLTE3NSwxNiArMTc1LDE2IEBAIEV3a19Db29raWVfUG9saWN5IGV3a19jb29r
aWVzX3BvbGljeV9nZXQodm9pZCkKICAgICBwb2xpY3kgPSBzb3VwX2Nvb2tpZV9qYXJfZ2V0X2Fj
Y2VwdF9wb2xpY3koY29va2llSmFyKTsKICAgICBzd2l0Y2ggKHBvbGljeSkgewogICAgIGNhc2Ug
U09VUF9DT09LSUVfSkFSX0FDQ0VQVF9ORVZFUjoKLSAgICAgICAgZXdrX3BvbGljeSA9IEVXS19D
T09LSUVfSkFSX0FDQ0VQVF9ORVZFUjsKKyAgICAgICAgZXdrUG9saWN5ID0gRVdLX0NPT0tJRV9K
QVJfQUNDRVBUX05FVkVSOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFNPVVBfQ09PS0lFX0pB
Ul9BQ0NFUFRfQUxXQVlTOgotICAgICAgICBld2tfcG9saWN5ID0gRVdLX0NPT0tJRV9KQVJfQUND
RVBUX0FMV0FZUzsKKyAgICAgICAgZXdrUG9saWN5ID0gRVdLX0NPT0tJRV9KQVJfQUNDRVBUX0FM
V0FZUzsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTT1VQX0NPT0tJRV9KQVJfQUNDRVBUX05P
X1RISVJEX1BBUlRZOgotICAgICAgICBld2tfcG9saWN5ID0gRVdLX0NPT0tJRV9KQVJfQUNDRVBU
X05PX1RISVJEX1BBUlRZOworICAgICAgICBld2tQb2xpY3kgPSBFV0tfQ09PS0lFX0pBUl9BQ0NF
UFRfTk9fVEhJUkRfUEFSVFk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICNlbmRpZgogCi0gICAg
cmV0dXJuIGV3a19wb2xpY3k7CisgICAgcmV0dXJuIGV3a1BvbGljeTsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfZnJhbWUuY3BwIGIvU291cmNlL1dlYktpdC9lZmwv
ZXdrL2V3a19mcmFtZS5jcHAKaW5kZXggZWRmNTU5OTZhYjdlZmEwMGU5OTlmODYwNGE1MTAzM2Qz
ZTY3YmQzNy4uN2M1NDQzODM1MWU0ZTk0MTNjMTRmZTM1ZWI3YmM0NWFmZmE4Zjc0NCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19mcmFtZS5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9lZmwvZXdrL2V3a19mcmFtZS5jcHAKQEAgLTc3LDcgKzc3LDcgQEAgc3RydWN0IEV3a19G
cmFtZV9TbWFydF9EYXRhIHsKIAogc3RydWN0IEVpbmFfSXRlcmF0b3JfRXdrX0ZyYW1lIHsKICAg
ICBFaW5hX0l0ZXJhdG9yIGJhc2U7Ci0gICAgRXZhc19PYmplY3QqIG9iajsKKyAgICBFdmFzX09i
amVjdCogb2JqZWN0OwogICAgIHVuc2lnbmVkIGN1cnJlbnRJbmRleDsKIH07CiAKQEAgLTExNCwy
MCArMTE0LDIwIEBAIHN0YXRpYyBFdmFzX1NtYXJ0X0NsYXNzIF9wYXJlbnRfc2MgPSBFVkFTX1NN
QVJUX0NMQVNTX0lOSVRfTlVMTDsKIHN0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX2ZyYW1lX2RlYnVn
KEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsKICAgICBFdmFzX09iamVjdCogY2xpcCwgKiBwYXJl
bnQ7Ci0gICAgRXZhc19Db29yZCB4LCB5LCB3LCBoLCBjeCwgY3ksIGN3LCBjaDsKLSAgICBpbnQg
ciwgZywgYiwgYSwgY3IsIGNnLCBjYiwgY2E7CisgICAgRXZhc19Db29yZCB4LCB5LCB3aWR0aCwg
aGVpZ2h0LCBjb250ZW50WCwgY29udGVudFksIGNvbnRlbnRXaWR0aCwgY29udGVudEhlaWdodDsK
KyAgICBpbnQgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEsIGNvbnRlbnRSZWQsIGNvbnRlbnRHcmVl
biwgY29udGVudEJsdWUsIGNvbnRlbnRBbHBoYTsKIAotICAgIGV2YXNfb2JqZWN0X2NvbG9yX2dl
dChld2tGcmFtZSwgJnIsICZnLCAmYiwgJmEpOwotICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dl
dChld2tGcmFtZSwgJngsICZ5LCAmdywgJmgpOworICAgIGV2YXNfb2JqZWN0X2NvbG9yX2dldChl
d2tGcmFtZSwgJnJlZCwgJmdyZWVuLCAmYmx1ZSwgJmFscGhhKTsKKyAgICBldmFzX29iamVjdF9n
ZW9tZXRyeV9nZXQoZXdrRnJhbWUsICZ4LCAmeSwgJndpZHRoLCAmaGVpZ2h0KTsKIAogICAgIGNs
aXAgPSBldmFzX29iamVjdF9jbGlwX2dldChld2tGcmFtZSk7Ci0gICAgZXZhc19vYmplY3RfY29s
b3JfZ2V0KGNsaXAsICZjciwgJmNnLCAmY2IsICZjYSk7Ci0gICAgZXZhc19vYmplY3RfZ2VvbWV0
cnlfZ2V0KGNsaXAsICZjeCwgJmN5LCAmY3csICZjaCk7CisgICAgZXZhc19vYmplY3RfY29sb3Jf
Z2V0KGNsaXAsICZjb250ZW50UmVkLCAmY29udGVudEdyZWVuLCAmY29udGVudEJsdWUsICZjb250
ZW50QWxwaGEpOworICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldChjbGlwLCAmY29udGVudFgs
ICZjb250ZW50WSwgJmNvbnRlbnRXaWR0aCwgJmNvbnRlbnRIZWlnaHQpOwogCiAgICAgZnByaW50
ZihzdGRlcnIsICIlcDogdHlwZT0lcyBuYW1lPSVzLCB2aXNpYmxlPSVkLCBjb2xvcj0lMDJ4JTAy
eCUwMnglMDJ4LCAlZCwlZCslZHglZCwgY2xpcHBlcj0lcCAoJWQsICUwMnglMDJ4JTAyeCUwMngs
ICVkLCVkKyVkeCVkKVxuIiwKICAgICAgICAgICAgIGV3a0ZyYW1lLCBldmFzX29iamVjdF90eXBl
X2dldChld2tGcmFtZSksIGV2YXNfb2JqZWN0X25hbWVfZ2V0KGV3a0ZyYW1lKSwgZXZhc19vYmpl
Y3RfdmlzaWJsZV9nZXQoZXdrRnJhbWUpLAotICAgICAgICAgICAgciwgZywgYiwgYSwgeCwgeSwg
dywgaCwKLSAgICAgICAgICAgIGNsaXAsIGV2YXNfb2JqZWN0X3Zpc2libGVfZ2V0KGNsaXApLCBj
ciwgY2csIGNiLCBjYSwgY3gsIGN5LCBjdywgY2gpOworICAgICAgICAgICAgcmVkLCBncmVlbiwg
Ymx1ZSwgYWxwaGEsIHgsIHksIHdpZHRoLCBoZWlnaHQsCisgICAgICAgICAgICBjbGlwLCBldmFz
X29iamVjdF92aXNpYmxlX2dldChjbGlwKSwgY29udGVudFJlZCwgY29udGVudEdyZWVuLCBjb250
ZW50Qmx1ZSwgY29udGVudEFscGhhLCBjb250ZW50WCwgY29udGVudFksIGNvbnRlbnRXaWR0aCwg
Y29udGVudEhlaWdodCk7CiAgICAgcGFyZW50ID0gZXZhc19vYmplY3Rfc21hcnRfcGFyZW50X2dl
dChld2tGcmFtZSk7CiAgICAgaWYgKCFwYXJlbnQpCiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAi
XG4iKTsKQEAgLTE0NSwyMiArMTQ1LDIyIEBAIHN0YXRpYyBpbmxpbmUgRXZhc19PYmplY3QqIGtp
dChXZWJDb3JlOjpGcmFtZSogZnJhbWUpCiB7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0
dXJuIDA7Ci0gICAgV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRFZmwqIGZsID0gX2V3a19mcmFt
ZV9sb2FkZXJfZWZsX2dldChmcmFtZSk7Ci0gICAgaWYgKCFmbCkKKyAgICBXZWJDb3JlOjpGcmFt
ZUxvYWRlckNsaWVudEVmbCogZnJhbWVMb2FkZXJDbGllbnQgPSBfZXdrX2ZyYW1lX2xvYWRlcl9l
ZmxfZ2V0KGZyYW1lKTsKKyAgICBpZiAoIWZyYW1lTG9hZGVyQ2xpZW50KQogICAgICAgICByZXR1
cm4gMDsKLSAgICByZXR1cm4gZmwtPndlYkZyYW1lKCk7CisgICAgcmV0dXJuIGZyYW1lTG9hZGVy
Q2xpZW50LT53ZWJGcmFtZSgpOwogfQogCi1zdGF0aWMgRWluYV9Cb29sIF9ld2tfZnJhbWVfY2hp
bGRyZW5faXRlcmF0b3JfbmV4dChFaW5hX0l0ZXJhdG9yX0V3a19GcmFtZSogaXQsIEV2YXNfT2Jq
ZWN0KiogZGF0YSkKK3N0YXRpYyBFaW5hX0Jvb2wgX2V3a19mcmFtZV9jaGlsZHJlbl9pdGVyYXRv
cl9uZXh0KEVpbmFfSXRlcmF0b3JfRXdrX0ZyYW1lKiBpdGVyYXRvciwgRXZhc19PYmplY3QqKiBk
YXRhKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGl0LT5vYmosIHNkLCBFSU5B
X0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBF
SU5BX0ZBTFNFKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihpdGVyYXRvci0+b2Jq
ZWN0LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOX1ZBTChzbWFydERhdGEtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKIAotICAgIFdlYkNvcmU6OkZy
YW1lVHJlZSogdHJlZSA9IHNkLT5mcmFtZS0+dHJlZSgpOyAvLyBjaGVjayBpZiBpdCdzIHN0aWxs
IHZhbGlkCisgICAgV2ViQ29yZTo6RnJhbWVUcmVlKiB0cmVlID0gc21hcnREYXRhLT5mcmFtZS0+
dHJlZSgpOyAvLyBjaGVjayBpZiBpdCdzIHN0aWxsIHZhbGlkCiAgICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk5fVkFMKHRyZWUsIEVJTkFfRkFMU0UpOwogCi0gICAgaWYgKGl0LT5jdXJyZW50
SW5kZXggPCB0cmVlLT5jaGlsZENvdW50KCkpIHsKLSAgICAgICAgKmRhdGEgPSBraXQodHJlZS0+
Y2hpbGQoaXQtPmN1cnJlbnRJbmRleCsrKSk7CisgICAgaWYgKGl0ZXJhdG9yLT5jdXJyZW50SW5k
ZXggPCB0cmVlLT5jaGlsZENvdW50KCkpIHsKKyAgICAgICAgKmRhdGEgPSBraXQodHJlZS0+Y2hp
bGQoaXRlcmF0b3ItPmN1cnJlbnRJbmRleCsrKSk7CiAgICAgICAgIHJldHVybiBFSU5BX1RSVUU7
CiAgICAgfQogCkBAIC0xNjksNTMgKzE2OSw1MyBAQCBzdGF0aWMgRWluYV9Cb29sIF9ld2tfZnJh
bWVfY2hpbGRyZW5faXRlcmF0b3JfbmV4dChFaW5hX0l0ZXJhdG9yX0V3a19GcmFtZSogaXQsCiAK
IHN0YXRpYyBFdmFzX09iamVjdCogX2V3a19mcmFtZV9jaGlsZHJlbl9pdGVyYXRvcl9nZXRfY29u
dGFpbmVyKEVpbmFfSXRlcmF0b3JfRXdrX0ZyYW1lKiBpdGVyYXRvcikKIHsKLSAgICByZXR1cm4g
aXRlcmF0b3ItPm9iajsKKyAgICByZXR1cm4gaXRlcmF0b3ItPm9iamVjdDsKIH0KIAogc3RhdGlj
IHZvaWQgX2V3a19mcmFtZV9zbWFydF9hZGQoRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewotICAg
IEVXS19GUkFNRV9TRF9HRVQoZXdrRnJhbWUsIHNkKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUKGV3
a0ZyYW1lLCBzbWFydERhdGEpOwogCi0gICAgaWYgKCFzZCkgewotICAgICAgICBzZCA9IHN0YXRp
Y19jYXN0PEV3a19GcmFtZV9TbWFydF9EYXRhKj4oY2FsbG9jKDEsIHNpemVvZihFd2tfRnJhbWVf
U21hcnRfRGF0YSkpKTsKLSAgICAgICAgaWYgKCFzZCkgeworICAgIGlmICghc21hcnREYXRhKSB7
CisgICAgICAgIHNtYXJ0RGF0YSA9IHN0YXRpY19jYXN0PEV3a19GcmFtZV9TbWFydF9EYXRhKj4o
Y2FsbG9jKDEsIHNpemVvZihFd2tfRnJhbWVfU21hcnRfRGF0YSkpKTsKKyAgICAgICAgaWYgKCFz
bWFydERhdGEpIHsKICAgICAgICAgICAgIENSSVRJQ0FMKCJjb3VsZCBub3QgYWxsb2NhdGUgRXdr
X0ZyYW1lX1NtYXJ0X0RhdGEiKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAg
ICAgICBldmFzX29iamVjdF9zbWFydF9kYXRhX3NldChld2tGcmFtZSwgc2QpOworICAgICAgICBl
dmFzX29iamVjdF9zbWFydF9kYXRhX3NldChld2tGcmFtZSwgc21hcnREYXRhKTsKICAgICB9CiAK
LSAgICBzZC0+c2VsZiA9IGV3a0ZyYW1lOworICAgIHNtYXJ0RGF0YS0+c2VsZiA9IGV3a0ZyYW1l
OwogCiAgICAgX3BhcmVudF9zYy5hZGQoZXdrRnJhbWUpOwotICAgIGV2YXNfb2JqZWN0X3N0YXRp
Y19jbGlwX3NldChzZC0+YmFzZS5jbGlwcGVyLCBFSU5BX0ZBTFNFKTsKLSAgICBldmFzX29iamVj
dF9tb3ZlKHNkLT5iYXNlLmNsaXBwZXIsIDAsIDApOwotICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShz
ZC0+YmFzZS5jbGlwcGVyLCAwLCAwKTsKKyAgICBldmFzX29iamVjdF9zdGF0aWNfY2xpcF9zZXQo
c21hcnREYXRhLT5iYXNlLmNsaXBwZXIsIEVJTkFfRkFMU0UpOworICAgIGV2YXNfb2JqZWN0X21v
dmUoc21hcnREYXRhLT5iYXNlLmNsaXBwZXIsIDAsIDApOworICAgIGV2YXNfb2JqZWN0X3Jlc2l6
ZShzbWFydERhdGEtPmJhc2UuY2xpcHBlciwgMCwgMCk7CiAKICNpZmRlZiBFV0tfRlJBTUVfREVC
VUcKLSAgICBzZC0+cmVnaW9uID0gZXZhc19vYmplY3RfcmVjdGFuZ2xlX2FkZChzZC0+YmFzZS5l
dmFzKTsKKyAgICBzbWFydERhdGEtPnJlZ2lvbiA9IGV2YXNfb2JqZWN0X3JlY3RhbmdsZV9hZGQo
c21hcnREYXRhLT5iYXNlLmV2YXMpOwogICAgIHN0YXRpYyBpbnQgaSA9IDA7CiAgICAgc3dpdGNo
IChpKSB7CiAgICAgY2FzZSAwOgotICAgICAgICBldmFzX29iamVjdF9jb2xvcl9zZXQoc2QtPnJl
Z2lvbiwgMTI4LCAwLCAwLCAxMjgpOworICAgICAgICBldmFzX29iamVjdF9jb2xvcl9zZXQoc21h
cnREYXRhLT5yZWdpb24sIDEyOCwgMCwgMCwgMTI4KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSAxOgotICAgICAgICBldmFzX29iamVjdF9jb2xvcl9zZXQoc2QtPnJlZ2lvbiwgMCwgMTI4LCAw
LCAxMjgpOworICAgICAgICBldmFzX29iamVjdF9jb2xvcl9zZXQoc21hcnREYXRhLT5yZWdpb24s
IDAsIDEyOCwgMCwgMTI4KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSAyOgotICAgICAgICBl
dmFzX29iamVjdF9jb2xvcl9zZXQoc2QtPnJlZ2lvbiwgMCwgMCwgMTI4LCAxMjgpOworICAgICAg
ICBldmFzX29iamVjdF9jb2xvcl9zZXQoc21hcnREYXRhLT5yZWdpb24sIDAsIDAsIDEyOCwgMTI4
KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSAzOgotICAgICAgICBldmFzX29iamVjdF9jb2xv
cl9zZXQoc2QtPnJlZ2lvbiwgMTI4LCAwLCAwLCAxMjgpOworICAgICAgICBldmFzX29iamVjdF9j
b2xvcl9zZXQoc21hcnREYXRhLT5yZWdpb24sIDEyOCwgMCwgMCwgMTI4KTsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSA0OgotICAgICAgICBldmFzX29iamVjdF9jb2xvcl9zZXQoc2QtPnJlZ2lv
biwgMTI4LCAxMjgsIDAsIDEyOCk7CisgICAgICAgIGV2YXNfb2JqZWN0X2NvbG9yX3NldChzbWFy
dERhdGEtPnJlZ2lvbiwgMTI4LCAxMjgsIDAsIDEyOCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgNToKLSAgICAgICAgZXZhc19vYmplY3RfY29sb3Jfc2V0KHNkLT5yZWdpb24sIDEyOCwgMCwg
MTI4LCAxMjgpOworICAgICAgICBldmFzX29iamVjdF9jb2xvcl9zZXQoc21hcnREYXRhLT5yZWdp
b24sIDEyOCwgMCwgMTI4LCAxMjgpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIDY6Ci0gICAg
ICAgIGV2YXNfb2JqZWN0X2NvbG9yX3NldChzZC0+cmVnaW9uLCAwLCAxMjgsIDEyOCwgMTI4KTsK
KyAgICAgICAgZXZhc19vYmplY3RfY29sb3Jfc2V0KHNtYXJ0RGF0YS0+cmVnaW9uLCAwLCAxMjgs
IDEyOCwgMTI4KTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7
CkBAIC0yMjQsMjggKzIyNCwyOCBAQCBzdGF0aWMgdm9pZCBfZXdrX2ZyYW1lX3NtYXJ0X2FkZChF
dmFzX09iamVjdCogZXdrRnJhbWUpCiAgICAgaWYgKGkgPiA2KQogICAgICAgICBpID0gMDsKIAot
ICAgIGV2YXNfb2JqZWN0X3NtYXJ0X21lbWJlcl9hZGQoc2QtPnJlZ2lvbiwgZXdrRnJhbWUpOwot
ICAgIGV2YXNfb2JqZWN0X2hpZGUoc2QtPnJlZ2lvbik7CisgICAgZXZhc19vYmplY3Rfc21hcnRf
bWVtYmVyX2FkZChzbWFydERhdGEtPnJlZ2lvbiwgZXdrRnJhbWUpOworICAgIGV2YXNfb2JqZWN0
X2hpZGUoc21hcnREYXRhLT5yZWdpb24pOwogI2VuZGlmCiB9CiAKIHN0YXRpYyB2b2lkIF9ld2tf
ZnJhbWVfc21hcnRfZGVsKEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsKICAgICBXUk4oImV3a0Zy
YW1lPSVwIiwgZXdrRnJhbWUpOyAvLyBYWFggUkVNT1ZFIE1FIExBVEVSCi0gICAgRVdLX0ZSQU1F
X1NEX0dFVChld2tGcmFtZSwgc2QpOwotCi0gICAgaWYgKHNkKSB7Ci0gICAgICAgIGlmIChzZC0+
ZnJhbWUpIHsKLSAgICAgICAgICAgIFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50RWZsKiBmbGMg
PSBfZXdrX2ZyYW1lX2xvYWRlcl9lZmxfZ2V0KHNkLT5mcmFtZSk7Ci0gICAgICAgICAgICBmbGMt
PnNldFdlYkZyYW1lKDApOwotICAgICAgICAgICAgc2QtPmZyYW1lLT5sb2FkZXIoKS0+ZGV0YWNo
RnJvbVBhcmVudCgpOwotICAgICAgICAgICAgc2QtPmZyYW1lLT5sb2FkZXIoKS0+Y2FuY2VsQW5k
Q2xlYXIoKTsKLSAgICAgICAgICAgIHNkLT5mcmFtZSA9IDA7CisgICAgRVdLX0ZSQU1FX1NEX0dF
VChld2tGcmFtZSwgc21hcnREYXRhKTsKKworICAgIGlmIChzbWFydERhdGEpIHsKKyAgICAgICAg
aWYgKHNtYXJ0RGF0YS0+ZnJhbWUpIHsKKyAgICAgICAgICAgIFdlYkNvcmU6OkZyYW1lTG9hZGVy
Q2xpZW50RWZsKiBmcmFtZUxvYWRlckNsaWVudCA9IF9ld2tfZnJhbWVfbG9hZGVyX2VmbF9nZXQo
c21hcnREYXRhLT5mcmFtZSk7CisgICAgICAgICAgICBmcmFtZUxvYWRlckNsaWVudC0+c2V0V2Vi
RnJhbWUoMCk7CisgICAgICAgICAgICBzbWFydERhdGEtPmZyYW1lLT5sb2FkZXIoKS0+ZGV0YWNo
RnJvbVBhcmVudCgpOworICAgICAgICAgICAgc21hcnREYXRhLT5mcmFtZS0+bG9hZGVyKCktPmNh
bmNlbEFuZENsZWFyKCk7CisgICAgICAgICAgICBzbWFydERhdGEtPmZyYW1lID0gMDsKICAgICAg
ICAgfQogCi0gICAgICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVsKHNkLT50aXRsZSk7Ci0gICAgICAg
IGVpbmFfc3RyaW5nc2hhcmVfZGVsKHNkLT51cmkpOwotICAgICAgICBlaW5hX3N0cmluZ3NoYXJl
X2RlbChzZC0+bmFtZSk7CisgICAgICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVsKHNtYXJ0RGF0YS0+
dGl0bGUpOworICAgICAgICBlaW5hX3N0cmluZ3NoYXJlX2RlbChzbWFydERhdGEtPnVyaSk7Cisg
ICAgICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVsKHNtYXJ0RGF0YS0+bmFtZSk7CiAgICAgfQogCiAg
ICAgX3BhcmVudF9zYy5kZWwoZXdrRnJhbWUpOwpAQCAtMjUzLDE1ICsyNTMsMTUgQEAgc3RhdGlj
IHZvaWQgX2V3a19mcmFtZV9zbWFydF9kZWwoRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogCiBzdGF0
aWMgdm9pZCBfZXdrX2ZyYW1lX3NtYXJ0X3Jlc2l6ZShFdmFzX09iamVjdCogZXdrRnJhbWUsIEV2
YXNfQ29vcmQgd2lkdGgsIEV2YXNfQ29vcmQgaGVpZ2h0KQogewotICAgIEVXS19GUkFNRV9TRF9H
RVQoZXdrRnJhbWUsIHNkKTsKLSAgICBldmFzX29iamVjdF9yZXNpemUoc2QtPmJhc2UuY2xpcHBl
ciwgd2lkdGgsIGhlaWdodCk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVChld2tGcmFtZSwgc21hcnRE
YXRhKTsKKyAgICBldmFzX29iamVjdF9yZXNpemUoc21hcnREYXRhLT5iYXNlLmNsaXBwZXIsIHdp
ZHRoLCBoZWlnaHQpOwogCiAjaWZkZWYgRVdLX0ZSQU1FX0RFQlVHCi0gICAgZXZhc19vYmplY3Rf
cmVzaXplKHNkLT5yZWdpb24sIHdpZHRoLCBoZWlnaHQpOworICAgIGV2YXNfb2JqZWN0X3Jlc2l6
ZShzbWFydERhdGEtPnJlZ2lvbiwgd2lkdGgsIGhlaWdodCk7CiAgICAgRXZhc19Db29yZCB4LCB5
OwotICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldChzZC0+cmVnaW9uLCAmeCwgJnksICZ3aWR0
aCwgJmhlaWdodCk7CisgICAgZXZhc19vYmplY3RfZ2VvbWV0cnlfZ2V0KHNtYXJ0RGF0YS0+cmVn
aW9uLCAmeCwgJnksICZ3aWR0aCwgJmhlaWdodCk7CiAgICAgSU5GKCJyZWdpb249JXAsIHZpc2li
bGU9JWQsIGdlbz0lZCwlZCArICVkeCVkIiwKLSAgICAgICAgc2QtPnJlZ2lvbiwgZXZhc19vYmpl
Y3RfdmlzaWJsZV9nZXQoc2QtPnJlZ2lvbiksIHgsIHksIHdpZHRoLCBoZWlnaHQpOworICAgICAg
ICBzbWFydERhdGEtPnJlZ2lvbiwgZXZhc19vYmplY3RfdmlzaWJsZV9nZXQoc21hcnREYXRhLT5y
ZWdpb24pLCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKICAgICBfZXdrX2ZyYW1lX2RlYnVnKGV3a0Zy
YW1lKTsKICNlbmRpZgogfQpAQCAtMjc2LDEzICsyNzYsMTMgQEAgc3RhdGljIHZvaWQgX2V3a19m
cmFtZV9zbWFydF9zZXQoRXZhc19TbWFydF9DbGFzcyogYXBpKQogCiBzdGF0aWMgaW5saW5lIEV2
YXNfU21hcnQqIF9ld2tfZnJhbWVfc21hcnRfY2xhc3NfbmV3KHZvaWQpCiB7Ci0gICAgc3RhdGlj
IEV2YXNfU21hcnRfQ2xhc3Mgc2MgPSBFVkFTX1NNQVJUX0NMQVNTX0lOSVRfTkFNRV9WRVJTSU9O
KEVXS19GUkFNRV9UWVBFX1NUUik7CisgICAgc3RhdGljIEV2YXNfU21hcnRfQ2xhc3Mgc21hcnRD
bGFzcyA9IEVWQVNfU01BUlRfQ0xBU1NfSU5JVF9OQU1FX1ZFUlNJT04oRVdLX0ZSQU1FX1RZUEVf
U1RSKTsKICAgICBzdGF0aWMgRXZhc19TbWFydCogc21hcnQgPSAwOwogCiAgICAgaWYgKEVJTkFf
VU5MSUtFTFkoIXNtYXJ0KSkgewogICAgICAgICBldmFzX29iamVjdF9zbWFydF9jbGlwcGVkX3Nt
YXJ0X3NldCgmX3BhcmVudF9zYyk7Ci0gICAgICAgIF9ld2tfZnJhbWVfc21hcnRfc2V0KCZzYyk7
Ci0gICAgICAgIHNtYXJ0ID0gZXZhc19zbWFydF9jbGFzc19uZXcoJnNjKTsKKyAgICAgICAgX2V3
a19mcmFtZV9zbWFydF9zZXQoJnNtYXJ0Q2xhc3MpOworICAgICAgICBzbWFydCA9IGV2YXNfc21h
cnRfY2xhc3NfbmV3KCZzbWFydENsYXNzKTsKICAgICB9CiAKICAgICByZXR1cm4gc21hcnQ7CkBA
IC0yOTYsMjggKzI5NiwyOCBAQCBFdmFzX09iamVjdCogZXdrX2ZyYW1lX3ZpZXdfZ2V0KGNvbnN0
IEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIAogRWluYV9JdGVyYXRvciogZXdrX2ZyYW1lX2NoaWxk
cmVuX2l0ZXJhdG9yX25ldyhFdmFzX09iamVjdCogZXdrRnJhbWUpCiB7Ci0gICAgRVdLX0ZSQU1F
X1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCAwKTsKLSAgICBFaW5hX0l0ZXJhdG9yX0V3
a19GcmFtZSogaXQgPSBzdGF0aWNfY2FzdDxFaW5hX0l0ZXJhdG9yX0V3a19GcmFtZSo+CisgICAg
RVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSwgMCk7CisgICAg
RWluYV9JdGVyYXRvcl9Fd2tfRnJhbWUqIGl0ZXJhdG9yID0gc3RhdGljX2Nhc3Q8RWluYV9JdGVy
YXRvcl9Fd2tfRnJhbWUqPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjYWxs
b2MoMSwgc2l6ZW9mKEVpbmFfSXRlcmF0b3JfRXdrX0ZyYW1lKSkpOwotICAgIGlmICghaXQpCisg
ICAgaWYgKCFpdGVyYXRvcikKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBFSU5BX01BR0lDX1NF
VCgmaXQtPmJhc2UsIEVJTkFfTUFHSUNfSVRFUkFUT1IpOwotICAgIGl0LT5iYXNlLm5leHQgPSBG
VU5DX0lURVJBVE9SX05FWFQoX2V3a19mcmFtZV9jaGlsZHJlbl9pdGVyYXRvcl9uZXh0KTsKLSAg
ICBpdC0+YmFzZS5nZXRfY29udGFpbmVyID0gRlVOQ19JVEVSQVRPUl9HRVRfQ09OVEFJTkVSKF9l
d2tfZnJhbWVfY2hpbGRyZW5faXRlcmF0b3JfZ2V0X2NvbnRhaW5lcik7Ci0gICAgaXQtPmJhc2Uu
ZnJlZSA9IEZVTkNfSVRFUkFUT1JfRlJFRShmcmVlKTsKLSAgICBpdC0+b2JqID0gZXdrRnJhbWU7
Ci0gICAgaXQtPmN1cnJlbnRJbmRleCA9IDA7Ci0gICAgcmV0dXJuICZpdC0+YmFzZTsKKyAgICBF
SU5BX01BR0lDX1NFVCgmaXRlcmF0b3ItPmJhc2UsIEVJTkFfTUFHSUNfSVRFUkFUT1IpOworICAg
IGl0ZXJhdG9yLT5iYXNlLm5leHQgPSBGVU5DX0lURVJBVE9SX05FWFQoX2V3a19mcmFtZV9jaGls
ZHJlbl9pdGVyYXRvcl9uZXh0KTsKKyAgICBpdGVyYXRvci0+YmFzZS5nZXRfY29udGFpbmVyID0g
RlVOQ19JVEVSQVRPUl9HRVRfQ09OVEFJTkVSKF9ld2tfZnJhbWVfY2hpbGRyZW5faXRlcmF0b3Jf
Z2V0X2NvbnRhaW5lcik7CisgICAgaXRlcmF0b3ItPmJhc2UuZnJlZSA9IEZVTkNfSVRFUkFUT1Jf
RlJFRShmcmVlKTsKKyAgICBpdGVyYXRvci0+b2JqZWN0ID0gZXdrRnJhbWU7CisgICAgaXRlcmF0
b3ItPmN1cnJlbnRJbmRleCA9IDA7CisgICAgcmV0dXJuICZpdGVyYXRvci0+YmFzZTsKIH0KIAog
RXZhc19PYmplY3QqIGV3a19mcmFtZV9jaGlsZF9maW5kKEV2YXNfT2JqZWN0KiBld2tGcmFtZSwg
Y29uc3QgY2hhciogbmFtZSkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tG
cmFtZSwgc2QsIDApOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBz
bWFydERhdGEsIDApOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChuYW1lLCAw
KTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCAwKTsKLSAg
ICBXVEY6OlN0cmluZyBzID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KG5hbWUpOwotICAgIHJldHVy
biBraXQoc2QtPmZyYW1lLT50cmVlKCktPmZpbmQoV1RGOjpBdG9taWNTdHJpbmcocykpKTsKKyAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5mcmFtZSwgMCk7Cisg
ICAgV1RGOjpTdHJpbmcgc3RyaW5nID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KG5hbWUpOworICAg
IHJldHVybiBraXQoc21hcnREYXRhLT5mcmFtZS0+dHJlZSgpLT5maW5kKFdURjo6QXRvbWljU3Ry
aW5nKHN0cmluZykpKTsKIH0KIAogRWluYV9Cb29sIGV3a19mcmFtZV91cmlfc2V0KEV2YXNfT2Jq
ZWN0KiBld2tGcmFtZSwgY29uc3QgY2hhciogdXJpKQpAQCAtMzM4LDI3ICszMzgsMjcgQEAgY29u
c3QgY2hhciogZXdrX2ZyYW1lX3VyaV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lKQog
CiBjb25zdCBjaGFyKiBld2tfZnJhbWVfdGl0bGVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tG
cmFtZSkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIDAp
OwotICAgIHJldHVybiBzZC0+dGl0bGU7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrRnJhbWUsIHNtYXJ0RGF0YSwgMCk7CisgICAgcmV0dXJuIHNtYXJ0RGF0YS0+dGl0bGU7CiB9
CiAKIGNvbnN0IGNoYXIqIGV3a19mcmFtZV9uYW1lX2dldChjb25zdCBFdmFzX09iamVjdCogZXdr
RnJhbWUpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCAw
KTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRhLCAw
KTsKIAotICAgIGlmICghc2QtPmZyYW1lKSB7CisgICAgaWYgKCFzbWFydERhdGEtPmZyYW1lKSB7
CiAgICAgICAgIEVSUigiY291bGQgbm90IGdldCBuYW1lIG9mIHVuaW5pdGlhbGl6ZWQgZnJhbWUu
Iik7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIGNvbnN0IFdURjo6U3RyaW5nIGZy
YW1lTmFtZSA9IHNkLT5mcmFtZS0+dHJlZSgpLT51bmlxdWVOYW1lKCk7CisgICAgY29uc3QgV1RG
OjpTdHJpbmcgZnJhbWVOYW1lID0gc21hcnREYXRhLT5mcmFtZS0+dHJlZSgpLT51bmlxdWVOYW1l
KCk7CiAKLSAgICBpZiAoKHNkLT5uYW1lKSAmJiAoc2QtPm5hbWUgPT0gZnJhbWVOYW1lKSkKLSAg
ICAgICAgcmV0dXJuIHNkLT5uYW1lOworICAgIGlmICgoc21hcnREYXRhLT5uYW1lKSAmJiAoc21h
cnREYXRhLT5uYW1lID09IGZyYW1lTmFtZSkpCisgICAgICAgIHJldHVybiBzbWFydERhdGEtPm5h
bWU7CiAKLSAgICBlaW5hX3N0cmluZ3NoYXJlX3JlcGxhY2VfbGVuZ3RoKCYoc2QtPm5hbWUpLCBm
cmFtZU5hbWUudXRmOCgpLmRhdGEoKSwgZnJhbWVOYW1lLmxlbmd0aCgpKTsKKyAgICBlaW5hX3N0
cmluZ3NoYXJlX3JlcGxhY2VfbGVuZ3RoKCYoc21hcnREYXRhLT5uYW1lKSwgZnJhbWVOYW1lLnV0
ZjgoKS5kYXRhKCksIGZyYW1lTmFtZS5sZW5ndGgoKSk7CiAKLSAgICByZXR1cm4gc2QtPm5hbWU7
CisgICAgcmV0dXJuIHNtYXJ0RGF0YS0+bmFtZTsKIH0KIAogRWluYV9Cb29sIGV3a19mcmFtZV9j
b250ZW50c19zaXplX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrRnJhbWUsIEV2YXNfQ29vcmQq
IHdpZHRoLCBFdmFzX0Nvb3JkKiBoZWlnaHQpCkBAIC0zNzcsOSArMzc3LDkgQEAgRWluYV9Cb29s
IGV3a19mcmFtZV9jb250ZW50c19zaXplX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrRnJhbWUs
IEV2YXNfQ29vcmQqIHcKIAogc3RhdGljIEVpbmFfQm9vbCBfZXdrX2ZyYW1lX2NvbnRlbnRzX3Nl
dF9pbnRlcm5hbChFd2tfRnJhbWVfU21hcnRfRGF0YSogc21hcnREYXRhLCBjb25zdCBjaGFyKiBj
b250ZW50cywgc2l6ZV90IGNvbnRlbnRzU2l6ZSwgY29uc3QgY2hhciogbWltZVR5cGUsIGNvbnN0
IGNoYXIqIGVuY29kaW5nLCBjb25zdCBjaGFyKiBiYXNlVXJpLCBjb25zdCBjaGFyKiB1bnJlYWNo
YWJsZVVyaSkKIHsKLSAgICBzaXplX3QgbGVuID0gc3RybGVuKGNvbnRlbnRzKTsKLSAgICBpZiAo
Y29udGVudHNTaXplIDwgMSB8fCBjb250ZW50c1NpemUgPiBsZW4pCi0gICAgICAgIGNvbnRlbnRz
U2l6ZSA9IGxlbjsKKyAgICBzaXplX3QgbGVuZ3RoID0gc3RybGVuKGNvbnRlbnRzKTsKKyAgICBp
ZiAoY29udGVudHNTaXplIDwgMSB8fCBjb250ZW50c1NpemUgPiBsZW5ndGgpCisgICAgICAgIGNv
bnRlbnRzU2l6ZSA9IGxlbmd0aDsKICAgICBpZiAoIW1pbWVUeXBlKQogICAgICAgICBtaW1lVHlw
ZSA9ICJ0ZXh0L2h0bWwiOwogICAgIGlmICghZW5jb2RpbmcpCkBAIC00MDgsNTcgKzQwOCw1NyBA
QCBzdGF0aWMgRWluYV9Cb29sIF9ld2tfZnJhbWVfY29udGVudHNfc2V0X2ludGVybmFsKEV3a19G
cmFtZV9TbWFydF9EYXRhKiBzbWFydERhdAogCiBFaW5hX0Jvb2wgZXdrX2ZyYW1lX2NvbnRlbnRz
X3NldChFdmFzX09iamVjdCogZXdrRnJhbWUsIGNvbnN0IGNoYXIqIGNvbnRlbnRzLCBzaXplX3Qg
Y29udGVudHNTaXplLCBjb25zdCBjaGFyKiBtaW1lVHlwZSwgY29uc3QgY2hhciogZW5jb2Rpbmcs
IGNvbnN0IGNoYXIqIGJhc2VVcmkpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9GQUxTRV9SRVRV
Uk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9S
RVRVUk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlf
T05fRkFMU0VfUkVUVVJOX1ZBTChzbWFydERhdGEtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKICAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoY29udGVudHMsIEVJTkFfRkFMU0UpOwogICAg
IHJldHVybiBfZXdrX2ZyYW1lX2NvbnRlbnRzX3NldF9pbnRlcm5hbAotICAgICAgICAgICAgICAg
KHNkLCBjb250ZW50cywgY29udGVudHNTaXplLCBtaW1lVHlwZSwgZW5jb2RpbmcsIGJhc2VVcmks
IDApOworICAgICAgICAgICAgICAgKHNtYXJ0RGF0YSwgY29udGVudHMsIGNvbnRlbnRzU2l6ZSwg
bWltZVR5cGUsIGVuY29kaW5nLCBiYXNlVXJpLCAwKTsKIH0KIAogRWluYV9Cb29sIGV3a19mcmFt
ZV9jb250ZW50c19hbHRlcm5hdGVfc2V0KEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgY29uc3QgY2hh
ciogY29udGVudHMsIHNpemVfdCBjb250ZW50c1NpemUsIGNvbnN0IGNoYXIqIG1pbWVUeXBlLCBj
b25zdCBjaGFyKiBlbmNvZGluZywgY29uc3QgY2hhciogYmFzZVVyaSwgY29uc3QgY2hhciogdW5y
ZWFjaGFibGVVcmkpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUs
IHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9GQUxTRV9SRVRVUk5fVkFMKHNk
LT5mcmFtZSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdr
RnJhbWUsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fRkFMU0Vf
UkVUVVJOX1ZBTChzbWFydERhdGEtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTl9WQUwoY29udGVudHMsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOX1ZBTCh1bnJlYWNoYWJsZVVyaSwgRUlOQV9GQUxTRSk7CiAgICAg
cmV0dXJuIF9ld2tfZnJhbWVfY29udGVudHNfc2V0X2ludGVybmFsCi0gICAgICAgICAgICAgICAo
c2QsIGNvbnRlbnRzLCBjb250ZW50c1NpemUsIG1pbWVUeXBlLCBlbmNvZGluZywgYmFzZVVyaSwK
KyAgICAgICAgICAgICAgIChzbWFydERhdGEsIGNvbnRlbnRzLCBjb250ZW50c1NpemUsIG1pbWVU
eXBlLCBlbmNvZGluZywgYmFzZVVyaSwKICAgICAgICAgICAgICAgIHVucmVhY2hhYmxlVXJpKTsK
IH0KIAogRWluYV9Cb29sIGV3a19mcmFtZV9zY3JpcHRfZXhlY3V0ZShFdmFzX09iamVjdCogZXdr
RnJhbWUsIGNvbnN0IGNoYXIqIHNjcmlwdCkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JF
VFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVJTkFfU0FGRVRZX09OX0ZBTFNF
X1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VU
X09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NB
RkVUWV9PTl9GQUxTRV9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUsIEVJTkFfRkFMU0UpOwog
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzY3JpcHQsIEVJTkFfRkFMU0UpOwot
ICAgIHNkLT5mcmFtZS0+c2NyaXB0KCktPmV4ZWN1dGVTY3JpcHQoV1RGOjpTdHJpbmc6OmZyb21V
VEY4KHNjcmlwdCksIHRydWUpOworICAgIHNtYXJ0RGF0YS0+ZnJhbWUtPnNjcmlwdCgpLT5leGVj
dXRlU2NyaXB0KFdURjo6U3RyaW5nOjpmcm9tVVRGOChzY3JpcHQpLCB0cnVlKTsKICAgICByZXR1
cm4gRUlOQV9UUlVFOwogfQogCiBFaW5hX0Jvb2wgZXdrX2ZyYW1lX2VkaXRhYmxlX2dldChjb25z
dCBFdmFzX09iamVjdCogZXdrRnJhbWUpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRV
Uk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKLSAgICByZXR1cm4gc2QtPmVkaXRhYmxl
OworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzbWFydERhdGEsIEVJ
TkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEt
PmZyYW1lLCBFSU5BX0ZBTFNFKTsKKyAgICByZXR1cm4gc21hcnREYXRhLT5lZGl0YWJsZTsKIH0K
IAogRWluYV9Cb29sIGV3a19mcmFtZV9lZGl0YWJsZV9zZXQoRXZhc19PYmplY3QqIGV3a0ZyYW1l
LCBFaW5hX0Jvb2wgZWRpdGFibGUpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
Tl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JF
VFVSTihld2tGcmFtZSwgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5mcmFtZSwgRUlOQV9GQUxTRSk7CiAgICAgZWRp
dGFibGUgPSAhIWVkaXRhYmxlOwotICAgIGlmIChzZC0+ZWRpdGFibGUgPT0gZWRpdGFibGUpCisg
ICAgaWYgKHNtYXJ0RGF0YS0+ZWRpdGFibGUgPT0gZWRpdGFibGUpCiAgICAgICAgIHJldHVybiBF
SU5BX1RSVUU7CiAgICAgaWYgKGVkaXRhYmxlKQotICAgICAgICBzZC0+ZnJhbWUtPmVkaXRvcigp
LT5hcHBseUVkaXRpbmdTdHlsZVRvQm9keUVsZW1lbnQoKTsKKyAgICAgICAgc21hcnREYXRhLT5m
cmFtZS0+ZWRpdG9yKCktPmFwcGx5RWRpdGluZ1N0eWxlVG9Cb2R5RWxlbWVudCgpOwogICAgIHJl
dHVybiBFSU5BX1RSVUU7CiB9CiAKIGNoYXIqIGV3a19mcmFtZV9zZWxlY3Rpb25fZ2V0KGNvbnN0
IEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVS
Tihld2tGcmFtZSwgc2QsIDApOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChz
ZC0+ZnJhbWUsIDApOwotICAgIFdURjo6Q1N0cmluZyBzID0gc2QtPmZyYW1lLT5lZGl0b3IoKS0+
c2VsZWN0ZWRUZXh0KCkudXRmOCgpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3
a0ZyYW1lLCBzbWFydERhdGEsIDApOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZB
TChzbWFydERhdGEtPmZyYW1lLCAwKTsKKyAgICBXVEY6OkNTdHJpbmcgcyA9IHNtYXJ0RGF0YS0+
ZnJhbWUtPmVkaXRvcigpLT5zZWxlY3RlZFRleHQoKS51dGY4KCk7CiAgICAgaWYgKHMuaXNOdWxs
KCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiBzdHJkdXAocy5kYXRhKCkpOwpAQCAt
NDY2LDQ1ICs0NjYsNDUgQEAgY2hhciogZXdrX2ZyYW1lX3NlbGVjdGlvbl9nZXQoY29uc3QgRXZh
c19PYmplY3QqIGV3a0ZyYW1lKQogCiBFaW5hX0Jvb2wgZXdrX2ZyYW1lX3RleHRfc2VhcmNoKGNv
bnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgY29uc3QgY2hhciogdGV4dCwgRWluYV9Cb29sIGNh
c2VTZW5zaXRpdmUsIEVpbmFfQm9vbCBmb3J3YXJkLCBFaW5hX0Jvb2wgd3JhcCkKIHsKLSAgICBF
V0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOwotICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOwor
ICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzbWFydERhdGEsIEVJTkFf
RkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmZy
YW1lLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodGV4
dCwgRUlOQV9GQUxTRSk7CiAKLSAgICByZXR1cm4gc2QtPmZyYW1lLT5lZGl0b3IoKS0+ZmluZFN0
cmluZyhXVEY6OlN0cmluZzo6ZnJvbVVURjgodGV4dCksIGZvcndhcmQsIGNhc2VTZW5zaXRpdmUs
IHdyYXAsIHRydWUpOworICAgIHJldHVybiBzbWFydERhdGEtPmZyYW1lLT5lZGl0b3IoKS0+Zmlu
ZFN0cmluZyhXVEY6OlN0cmluZzo6ZnJvbVVURjgodGV4dCksIGZvcndhcmQsIGNhc2VTZW5zaXRp
dmUsIHdyYXAsIHRydWUpOwogfQogCiB1bnNpZ25lZCBpbnQgZXdrX2ZyYW1lX3RleHRfbWF0Y2hl
c19tYXJrKEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgY29uc3QgY2hhciogc3RyaW5nLCBFaW5hX0Jv
b2wgY2FzZVNlbnNpdGl2ZSwgRWluYV9Cb29sIGhpZ2hsaWdodCwgdW5zaWduZWQgaW50IGxpbWl0
KQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgMCk7Ci0g
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7
CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSwgMCk7
CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUsIEVJ
TkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzdHJpbmcsIDAp
OwogCi0gICAgc2QtPmZyYW1lLT5lZGl0b3IoKS0+c2V0TWFya2VkVGV4dE1hdGNoZXNBcmVIaWdo
bGlnaHRlZChoaWdobGlnaHQpOwotICAgIHJldHVybiBzZC0+ZnJhbWUtPmVkaXRvcigpLT5jb3Vu
dE1hdGNoZXNGb3JUZXh0KFdURjo6U3RyaW5nOjpmcm9tVVRGOChzdHJpbmcpLCBjYXNlU2Vuc2l0
aXZlLCBsaW1pdCwgdHJ1ZSk7CisgICAgc21hcnREYXRhLT5mcmFtZS0+ZWRpdG9yKCktPnNldE1h
cmtlZFRleHRNYXRjaGVzQXJlSGlnaGxpZ2h0ZWQoaGlnaGxpZ2h0KTsKKyAgICByZXR1cm4gc21h
cnREYXRhLT5mcmFtZS0+ZWRpdG9yKCktPmNvdW50TWF0Y2hlc0ZvclRleHQoV1RGOjpTdHJpbmc6
OmZyb21VVEY4KHN0cmluZyksIGNhc2VTZW5zaXRpdmUsIGxpbWl0LCB0cnVlKTsKIH0KIAogRWlu
YV9Cb29sIGV3a19mcmFtZV90ZXh0X21hdGNoZXNfdW5tYXJrX2FsbChFdmFzX09iamVjdCogZXdr
RnJhbWUpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBF
SU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1l
LCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwg
c21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9W
QUwoc21hcnREYXRhLT5mcmFtZSwgRUlOQV9GQUxTRSk7CiAKLSAgICBzZC0+ZnJhbWUtPmRvY3Vt
ZW50KCktPm1hcmtlcnMoKS0+cmVtb3ZlTWFya2VycyhXZWJDb3JlOjpEb2N1bWVudE1hcmtlcjo6
VGV4dE1hdGNoKTsKKyAgICBzbWFydERhdGEtPmZyYW1lLT5kb2N1bWVudCgpLT5tYXJrZXJzKCkt
PnJlbW92ZU1hcmtlcnMoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXI6OlRleHRNYXRjaCk7CiAgICAg
cmV0dXJuIEVJTkFfVFJVRTsKIH0KIAogRWluYV9Cb29sIGV3a19mcmFtZV90ZXh0X21hdGNoZXNf
aGlnaGxpZ2h0X3NldChFdmFzX09iamVjdCogZXdrRnJhbWUsIEVpbmFfQm9vbCBoaWdobGlnaHQp
CiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZB
TFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5B
X0ZBTFNFKTsKLSAgICBzZC0+ZnJhbWUtPmVkaXRvcigpLT5zZXRNYXJrZWRUZXh0TWF0Y2hlc0Fy
ZUhpZ2hsaWdodGVkKGhpZ2hsaWdodCk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrRnJhbWUsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUsIEVJTkFfRkFMU0UpOworICAgIHNtYXJ0RGF0
YS0+ZnJhbWUtPmVkaXRvcigpLT5zZXRNYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkKGhp
Z2hsaWdodCk7CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAogRWluYV9Cb29sIGV3a19mcmFt
ZV90ZXh0X21hdGNoZXNfaGlnaGxpZ2h0X2dldChjb25zdCBFdmFzX09iamVjdCogZXdrRnJhbWUp
CiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZB
TFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5B
X0ZBTFNFKTsKLSAgICByZXR1cm4gc2QtPmZyYW1lLT5lZGl0b3IoKS0+bWFya2VkVGV4dE1hdGNo
ZXNBcmVIaWdobGlnaHRlZCgpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0Zy
YW1lLCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOX1ZBTChzbWFydERhdGEtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKKyAgICByZXR1cm4gc21hcnRE
YXRhLT5mcmFtZS0+ZWRpdG9yKCktPm1hcmtlZFRleHRNYXRjaGVzQXJlSGlnaGxpZ2h0ZWQoKTsK
IH0KIAogLyoqCkBAIC01MjUsMTAgKzUyNSwxMCBAQCBzdGF0aWMgYm9vbCBfZXdrX2ZyYW1lX3Jl
Y3RfaXNfbmVnYXRpdmVfdmFsdWUoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdCkKIAogRWlu
YV9Cb29sIGV3a19mcmFtZV90ZXh0X21hdGNoZXNfbnRoX3Bvc19nZXQoY29uc3QgRXZhc19PYmpl
Y3QqIGV3a0ZyYW1lLCBzaXplX3QgbnVtYmVyLCBpbnQqIHgsIGludCogeSkKIHsKLSAgICBFV0tf
RlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOworICAg
IEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzbWFydERhdGEsIEVJTkFfRkFM
U0UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmZyYW1l
LCBFSU5BX0ZBTFNFKTsKIAotICAgIFZlY3RvcjxXZWJDb3JlOjpJbnRSZWN0PiBpbnRSZWN0cyA9
IHNkLT5mcmFtZS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5yZW5kZXJlZFJlY3RzRm9yTWFya2Vy
cyhXZWJDb3JlOjpEb2N1bWVudE1hcmtlcjo6VGV4dE1hdGNoKTsKKyAgICBWZWN0b3I8V2ViQ29y
ZTo6SW50UmVjdD4gaW50UmVjdHMgPSBzbWFydERhdGEtPmZyYW1lLT5kb2N1bWVudCgpLT5tYXJr
ZXJzKCktPnJlbmRlcmVkUmVjdHNGb3JNYXJrZXJzKFdlYkNvcmU6OkRvY3VtZW50TWFya2VyOjpU
ZXh0TWF0Y2gpOwogCiAgICAgLyogcmVtb3ZlIHVzZWxlc3MgdmFsdWVzICovCiAgICAgc3RkOjpy
ZW1vdmVfaWYoaW50UmVjdHMuYmVnaW4oKSwgaW50UmVjdHMuZW5kKCksIF9ld2tfZnJhbWVfcmVj
dF9pc19uZWdhdGl2ZV92YWx1ZSk7CkBAIC01NDcsMjUgKzU0NywyNSBAQCBFaW5hX0Jvb2wgZXdr
X2ZyYW1lX3RleHRfbWF0Y2hlc19udGhfcG9zX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrRnJh
bWUsIHNpemVfdAogCiBFaW5hX0Jvb2wgZXdrX2ZyYW1lX3N0b3AoRXZhc19PYmplY3QqIGV3a0Zy
YW1lKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgRUlO
QV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwg
RUlOQV9GQUxTRSk7Ci0gICAgc2QtPmZyYW1lLT5sb2FkZXIoKS0+c3RvcEFsbExvYWRlcnMoKTsK
KyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRhLCBFSU5B
X0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5m
cmFtZSwgRUlOQV9GQUxTRSk7CisgICAgc21hcnREYXRhLT5mcmFtZS0+bG9hZGVyKCktPnN0b3BB
bGxMb2FkZXJzKCk7CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAogRWluYV9Cb29sIGV3a19m
cmFtZV9yZWxvYWQoRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewotICAgIEVXS19GUkFNRV9TRF9H
RVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7Ci0gICAgc2QtPmZyYW1l
LT5sb2FkZXIoKS0+cmVsb2FkKCk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdr
RnJhbWUsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUsIEVJTkFfRkFMU0UpOworICAgIHNtYXJ0RGF0YS0+
ZnJhbWUtPmxvYWRlcigpLT5yZWxvYWQoKTsKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCiBF
aW5hX0Jvb2wgZXdrX2ZyYW1lX3JlbG9hZF9mdWxsKEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsK
LSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0Up
OwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFM
U0UpOwotICAgIHNkLT5mcmFtZS0+bG9hZGVyKCktPnJlbG9hZCh0cnVlKTsKKyAgICBFV0tfRlJB
TUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5mcmFtZSwgRUlOQV9G
QUxTRSk7CisgICAgc21hcnREYXRhLT5mcmFtZS0+bG9hZGVyKCktPnJlbG9hZCh0cnVlKTsKICAg
ICByZXR1cm4gRUlOQV9UUlVFOwogfQogCkBAIC01ODEsOSArNTgxLDkgQEAgRWluYV9Cb29sIGV3
a19mcmFtZV9mb3J3YXJkKEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIAogRWluYV9Cb29sIGV3a19m
cmFtZV9uYXZpZ2F0ZShFdmFzX09iamVjdCogZXdrRnJhbWUsIGludCBzdGVwcykKIHsKLSAgICBF
V0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOwotICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOwot
ICAgIFdlYkNvcmU6OlBhZ2UqIHBhZ2UgPSBzZC0+ZnJhbWUtPnBhZ2UoKTsKKyAgICBFV0tfRlJB
TUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5mcmFtZSwgRUlOQV9G
QUxTRSk7CisgICAgV2ViQ29yZTo6UGFnZSogcGFnZSA9IHNtYXJ0RGF0YS0+ZnJhbWUtPnBhZ2Uo
KTsKICAgICBpZiAoIXBhZ2UtPmNhbkdvQmFja09yRm9yd2FyZChzdGVwcykpCiAgICAgICAgIHJl
dHVybiBFSU5BX0ZBTFNFOwogICAgIHBhZ2UtPmdvQmFja09yRm9yd2FyZChzdGVwcyk7CkBAIC02
MDIsMzkgKzYwMiwzOSBAQCBFaW5hX0Jvb2wgZXdrX2ZyYW1lX2ZvcndhcmRfcG9zc2libGUoRXZh
c19PYmplY3QqIGV3a0ZyYW1lKQogCiBFaW5hX0Jvb2wgZXdrX2ZyYW1lX25hdmlnYXRlX3Bvc3Np
YmxlKEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgaW50IHN0ZXBzKQogewotICAgIEVXS19GUkFNRV9T
RF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZF
VFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7Ci0gICAgV2ViQ29y
ZTo6UGFnZSogcGFnZSA9IHNkLT5mcmFtZS0+cGFnZSgpOworICAgIEVXS19GUkFNRV9TRF9HRVRf
T1JfUkVUVVJOKGV3a0ZyYW1lLCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKKyAg
ICBXZWJDb3JlOjpQYWdlKiBwYWdlID0gc21hcnREYXRhLT5mcmFtZS0+cGFnZSgpOwogICAgIHJl
dHVybiBwYWdlLT5jYW5Hb0JhY2tPckZvcndhcmQoc3RlcHMpOwogfQogCiBmbG9hdCBld2tfZnJh
bWVfcGFnZV96b29tX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrRnJhbWUpCiB7Ci0gICAgRVdL
X0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCAtMS4wKTsKLSAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCAtMS4wKTsKLSAgICByZXR1cm4gc2Qt
PmZyYW1lLT5wYWdlWm9vbUZhY3RvcigpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJO
KGV3a0ZyYW1lLCBzbWFydERhdGEsIC0xLjApOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOX1ZBTChzbWFydERhdGEtPmZyYW1lLCAtMS4wKTsKKyAgICByZXR1cm4gc21hcnREYXRhLT5m
cmFtZS0+cGFnZVpvb21GYWN0b3IoKTsKIH0KIAogRWluYV9Cb29sIGV3a19mcmFtZV9wYWdlX3pv
b21fc2V0KEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgZmxvYXQgcGFnZVpvb21GYWN0b3IpCiB7Ci0g
ICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsK
LSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNF
KTsKLSAgICBzZC0+ZnJhbWUtPnNldFBhZ2Vab29tRmFjdG9yKHBhZ2Vab29tRmFjdG9yKTsKKyAg
ICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRhLCBFSU5BX0ZB
TFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5mcmFt
ZSwgRUlOQV9GQUxTRSk7CisgICAgc21hcnREYXRhLT5mcmFtZS0+c2V0UGFnZVpvb21GYWN0b3Io
cGFnZVpvb21GYWN0b3IpOwogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKIGZsb2F0IGV3a19m
cmFtZV90ZXh0X3pvb21fZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsKLSAgICBF
V0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIC0xLjApOwotICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIC0xLjApOwotICAgIHJldHVybiBz
ZC0+ZnJhbWUtPnRleHRab29tRmFjdG9yKCk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRV
Uk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSwgLTEuMCk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUsIC0xLjApOworICAgIHJldHVybiBzbWFydERhdGEt
PmZyYW1lLT50ZXh0Wm9vbUZhY3RvcigpOwogfQogCiBFaW5hX0Jvb2wgZXdrX2ZyYW1lX3RleHRf
em9vbV9zZXQoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBmbG9hdCB0ZXh0Wm9vbUZhY3RvcikKIHsK
LSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0Up
OwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFM
U0UpOwotICAgIHNkLT5mcmFtZS0+c2V0VGV4dFpvb21GYWN0b3IodGV4dFpvb21GYWN0b3IpOwor
ICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzbWFydERhdGEsIEVJTkFf
RkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmZy
YW1lLCBFSU5BX0ZBTFNFKTsKKyAgICBzbWFydERhdGEtPmZyYW1lLT5zZXRUZXh0Wm9vbUZhY3Rv
cih0ZXh0Wm9vbUZhY3Rvcik7CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIApAQCAtNjUzLDE0
ICs2NTMsMTQgQEAgdm9pZCBld2tfZnJhbWVfaGl0X3Rlc3RfZnJlZShFd2tfSGl0X1Rlc3QqIGhp
dFRlc3QpCiAKIEV3a19IaXRfVGVzdCogZXdrX2ZyYW1lX2hpdF90ZXN0X25ldyhjb25zdCBFdmFz
X09iamVjdCogZXdrRnJhbWUsIGludCB4LCBpbnQgeSkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VU
X09SX1JFVFVSTihld2tGcmFtZSwgc2QsIDApOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOX1ZBTChzZC0+ZnJhbWUsIDApOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3
a0ZyYW1lLCBzbWFydERhdGEsIDApOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZB
TChzbWFydERhdGEtPmZyYW1lLCAwKTsKIAotICAgIFdlYkNvcmU6OkZyYW1lVmlldyogdmlldyA9
IHNkLT5mcmFtZS0+dmlldygpOworICAgIFdlYkNvcmU6OkZyYW1lVmlldyogdmlldyA9IHNtYXJ0
RGF0YS0+ZnJhbWUtPnZpZXcoKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwo
dmlldywgMCk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZS0+
Y29udGVudFJlbmRlcmVyKCksIDApOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZB
TChzbWFydERhdGEtPmZyYW1lLT5jb250ZW50UmVuZGVyZXIoKSwgMCk7CiAKLSAgICBXZWJDb3Jl
OjpIaXRUZXN0UmVzdWx0IHJlc3VsdCA9IHNkLT5mcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmhpdFRl
c3RSZXN1bHRBdFBvaW50CisgICAgV2ViQ29yZTo6SGl0VGVzdFJlc3VsdCByZXN1bHQgPSBzbWFy
dERhdGEtPmZyYW1lLT5ldmVudEhhbmRsZXIoKS0+aGl0VGVzdFJlc3VsdEF0UG9pbnQKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmlldy0+d2luZG93VG9Db250ZW50
cyhXZWJDb3JlOjpJbnRQb2ludCh4LCB5KSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLyphbGxvd1NoYWRvd0NvbnRlbnQqLyBmYWxzZSwgLyppZ25vcmVDbGlwcGlu
ZyovIHRydWUpOwogCkBAIC02NjksNDEgKzY2OSw0MSBAQCBFd2tfSGl0X1Rlc3QqIGV3a19mcmFt
ZV9oaXRfdGVzdF9uZXcoY29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBpbnQgeCwgaW50IHkp
CiAgICAgaWYgKCFyZXN1bHQuaW5uZXJOb2RlKCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAg
RXdrX0hpdF9UZXN0KiBoaXRfdGVzdCA9IHN0YXRpY19jYXN0PEV3a19IaXRfVGVzdCo+KGNhbGxv
YygxLCBzaXplb2YoRXdrX0hpdF9UZXN0KSkpOwotICAgIGlmICghaGl0X3Rlc3QpIHsKKyAgICBF
d2tfSGl0X1Rlc3QqIGhpdFRlc3QgPSBzdGF0aWNfY2FzdDxFd2tfSGl0X1Rlc3QqPihjYWxsb2Mo
MSwgc2l6ZW9mKEV3a19IaXRfVGVzdCkpKTsKKyAgICBpZiAoIWhpdFRlc3QpIHsKICAgICAgICAg
Q1JJVElDQUwoIkNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGhpdCB0ZXN0LiIpOwogICAg
ICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBoaXRfdGVzdC0+eCA9IHJlc3VsdC5wb2ludCgp
LngoKTsKLSAgICBoaXRfdGVzdC0+eSA9IHJlc3VsdC5wb2ludCgpLnkoKTsKKyAgICBoaXRUZXN0
LT54ID0gcmVzdWx0LnBvaW50KCkueCgpOworICAgIGhpdFRlc3QtPnkgPSByZXN1bHQucG9pbnQo
KS55KCk7CiAjaWYgMAogICAgIC8vIEZJWE1FCi0gICAgaGl0X3Rlc3QtPmJvdW5kaW5nX2JveC54
ID0gcmVzdWx0LmJvdW5kaW5nQm94KCkueCgpOwotICAgIGhpdF90ZXN0LT5ib3VuZGluZ19ib3gu
eSA9IHJlc3VsdC5ib3VuZGluZ0JveCgpLnkoKTsKLSAgICBoaXRfdGVzdC0+Ym91bmRpbmdfYm94
LncgPSByZXN1bHQuYm91bmRpbmdCb3goKS53aWR0aCgpOwotICAgIGhpdF90ZXN0LT5ib3VuZGlu
Z19ib3guaCA9IHJlc3VsdC5ib3VuZGluZ0JveCgpLmhlaWdodCgpOworICAgIGhpdFRlc3QtPmJv
dW5kaW5nX2JveC54ID0gcmVzdWx0LmJvdW5kaW5nQm94KCkueCgpOworICAgIGhpdFRlc3QtPmJv
dW5kaW5nX2JveC55ID0gcmVzdWx0LmJvdW5kaW5nQm94KCkueSgpOworICAgIGhpdFRlc3QtPmJv
dW5kaW5nX2JveC53aWR0aCA9IHJlc3VsdC5ib3VuZGluZ0JveCgpLndpZHRoKCk7CisgICAgaGl0
VGVzdC0+Ym91bmRpbmdfYm94LmhlaWdodCA9IHJlc3VsdC5ib3VuZGluZ0JveCgpLmhlaWdodCgp
OwogI2Vsc2UKLSAgICBoaXRfdGVzdC0+Ym91bmRpbmdfYm94LnggPSAwOwotICAgIGhpdF90ZXN0
LT5ib3VuZGluZ19ib3gueSA9IDA7Ci0gICAgaGl0X3Rlc3QtPmJvdW5kaW5nX2JveC53ID0gMDsK
LSAgICBoaXRfdGVzdC0+Ym91bmRpbmdfYm94LmggPSAwOworICAgIGhpdFRlc3QtPmJvdW5kaW5n
X2JveC54ID0gMDsKKyAgICBoaXRUZXN0LT5ib3VuZGluZ19ib3gueSA9IDA7CisgICAgaGl0VGVz
dC0+Ym91bmRpbmdfYm94LncgPSAwOworICAgIGhpdFRlc3QtPmJvdW5kaW5nX2JveC5oID0gMDsK
ICNlbmRpZgogCi0gICAgV2ViQ29yZTo6VGV4dERpcmVjdGlvbiBkaXI7Ci0gICAgaGl0X3Rlc3Qt
PnRpdGxlID0gZWluYV9zdHJpbmdzaGFyZV9hZGQocmVzdWx0LnRpdGxlKGRpcikudXRmOCgpLmRh
dGEoKSk7Ci0gICAgaGl0X3Rlc3QtPmFsdGVybmF0ZV90ZXh0ID0gZWluYV9zdHJpbmdzaGFyZV9h
ZGQocmVzdWx0LmFsdERpc3BsYXlTdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBXZWJDb3Jl
OjpUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbjsKKyAgICBoaXRUZXN0LT50aXRsZSA9IGVpbmFfc3Ry
aW5nc2hhcmVfYWRkKHJlc3VsdC50aXRsZShkaXJlY3Rpb24pLnV0ZjgoKS5kYXRhKCkpOworICAg
IGhpdFRlc3QtPmFsdGVybmF0ZV90ZXh0ID0gZWluYV9zdHJpbmdzaGFyZV9hZGQocmVzdWx0LmFs
dERpc3BsYXlTdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKICAgICBpZiAocmVzdWx0LmlubmVyTm9u
U2hhcmVkTm9kZSgpICYmIHJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKS0+ZG9jdW1lbnQoKQog
ICAgICAgICAmJiByZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCktPmRvY3VtZW50KCktPmZyYW1l
KCkpCi0gICAgICAgIGhpdF90ZXN0LT5mcmFtZSA9IGtpdChyZXN1bHQuaW5uZXJOb25TaGFyZWRO
b2RlKCktPmRvY3VtZW50KCktPmZyYW1lKCkpOworICAgICAgICBoaXRUZXN0LT5mcmFtZSA9IGtp
dChyZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCktPmRvY3VtZW50KCktPmZyYW1lKCkpOwogCi0g
ICAgaGl0X3Rlc3QtPmxpbmsudGV4dCA9IGVpbmFfc3RyaW5nc2hhcmVfYWRkKHJlc3VsdC50ZXh0
Q29udGVudCgpLnV0ZjgoKS5kYXRhKCkpOwotICAgIGhpdF90ZXN0LT5saW5rLnVybCA9IGVpbmFf
c3RyaW5nc2hhcmVfYWRkKHJlc3VsdC5hYnNvbHV0ZUxpbmtVUkwoKS5zdHJpbmcoKS51dGY4KCku
ZGF0YSgpKTsKLSAgICBoaXRfdGVzdC0+bGluay50aXRsZSA9IGVpbmFfc3RyaW5nc2hhcmVfYWRk
KHJlc3VsdC50aXRsZURpc3BsYXlTdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLSAgICBoaXRfdGVz
dC0+bGluay50YXJnZXRfZnJhbWUgPSBraXQocmVzdWx0LnRhcmdldEZyYW1lKCkpOworICAgIGhp
dFRlc3QtPmxpbmsudGV4dCA9IGVpbmFfc3RyaW5nc2hhcmVfYWRkKHJlc3VsdC50ZXh0Q29udGVu
dCgpLnV0ZjgoKS5kYXRhKCkpOworICAgIGhpdFRlc3QtPmxpbmsudXJsID0gZWluYV9zdHJpbmdz
aGFyZV9hZGQocmVzdWx0LmFic29sdXRlTGlua1VSTCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkp
OworICAgIGhpdFRlc3QtPmxpbmsudGl0bGUgPSBlaW5hX3N0cmluZ3NoYXJlX2FkZChyZXN1bHQu
dGl0bGVEaXNwbGF5U3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgaGl0VGVzdC0+bGluay50
YXJnZXRfZnJhbWUgPSBraXQocmVzdWx0LnRhcmdldEZyYW1lKCkpOwogCi0gICAgaGl0X3Rlc3Qt
PmltYWdlX3VyaSA9IGVpbmFfc3RyaW5nc2hhcmVfYWRkKHJlc3VsdC5hYnNvbHV0ZUltYWdlVVJM
KCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgaGl0X3Rlc3QtPm1lZGlhX3VyaSA9IGVp
bmFfc3RyaW5nc2hhcmVfYWRkKHJlc3VsdC5hYnNvbHV0ZU1lZGlhVVJMKCkuc3RyaW5nKCkudXRm
OCgpLmRhdGEoKSk7CisgICAgaGl0VGVzdC0+aW1hZ2VfdXJpID0gZWluYV9zdHJpbmdzaGFyZV9h
ZGQocmVzdWx0LmFic29sdXRlSW1hZ2VVUkwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAg
ICBoaXRUZXN0LT5tZWRpYV91cmkgPSBlaW5hX3N0cmluZ3NoYXJlX2FkZChyZXN1bHQuYWJzb2x1
dGVNZWRpYVVSTCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwogCiAgICAgaW50IGNvbnRleHQg
PSBFV0tfSElUX1RFU1RfUkVTVUxUX0NPTlRFWFRfRE9DVU1FTlQ7CiAKQEAgLTcxOCwyOCArNzE4
LDI4IEBAIEV3a19IaXRfVGVzdCogZXdrX2ZyYW1lX2hpdF90ZXN0X25ldyhjb25zdCBFdmFzX09i
amVjdCogZXdrRnJhbWUsIGludCB4LCBpbnQgeSkKICAgICBpZiAocmVzdWx0LmlzQ29udGVudEVk
aXRhYmxlKCkpCiAgICAgICAgIGNvbnRleHQgfD0gRVdLX0hJVF9URVNUX1JFU1VMVF9DT05URVhU
X0VESVRBQkxFOwogCi0gICAgaGl0X3Rlc3QtPmNvbnRleHQgPSBzdGF0aWNfY2FzdDxFd2tfSGl0
X1Rlc3RfUmVzdWx0X0NvbnRleHQ+KGNvbnRleHQpOworICAgIGhpdFRlc3QtPmNvbnRleHQgPSBz
dGF0aWNfY2FzdDxFd2tfSGl0X1Rlc3RfUmVzdWx0X0NvbnRleHQ+KGNvbnRleHQpOwogCi0gICAg
cmV0dXJuIGhpdF90ZXN0OworICAgIHJldHVybiBoaXRUZXN0OwogfQogCiBFaW5hX0Jvb2wKIGV3
a19mcmFtZV9zY3JvbGxfYWRkKEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgaW50IGRlbHRhWCwgaW50
IGRlbHRhWSkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2Qs
IEVJTkFfRkFMU0UpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJh
bWUsIEVJTkFfRkFMU0UpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+
ZnJhbWUtPnZpZXcoKSwgRUlOQV9GQUxTRSk7Ci0gICAgc2QtPmZyYW1lLT52aWV3KCktPnNjcm9s
bEJ5KFdlYkNvcmU6OkludFNpemUoZGVsdGFYLCBkZWx0YVkpKTsKKyAgICBFV0tfRlJBTUVfU0Rf
R0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5mcmFtZSwgRUlOQV9GQUxTRSk7
CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUtPnZp
ZXcoKSwgRUlOQV9GQUxTRSk7CisgICAgc21hcnREYXRhLT5mcmFtZS0+dmlldygpLT5zY3JvbGxC
eShXZWJDb3JlOjpJbnRTaXplKGRlbHRhWCwgZGVsdGFZKSk7CiAgICAgcmV0dXJuIEVJTkFfVFJV
RTsKIH0KIAogRWluYV9Cb29sCiBld2tfZnJhbWVfc2Nyb2xsX3NldChFdmFzX09iamVjdCogZXdr
RnJhbWUsIGludCB4LCBpbnQgeSkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihl
d2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJO
X1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOX1ZBTChzZC0+ZnJhbWUtPnZpZXcoKSwgRUlOQV9GQUxTRSk7Ci0gICAgc2QtPmZyYW1lLT52
aWV3KCktPnNldFNjcm9sbFBvc2l0aW9uKFdlYkNvcmU6OkludFBvaW50KHgsIHkpKTsKKyAgICBF
V0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRhLCBFSU5BX0ZBTFNF
KTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5mcmFtZSwg
RUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0
YS0+ZnJhbWUtPnZpZXcoKSwgRUlOQV9GQUxTRSk7CisgICAgc21hcnREYXRhLT5mcmFtZS0+dmll
dygpLT5zZXRTY3JvbGxQb3NpdGlvbihXZWJDb3JlOjpJbnRQb2ludCh4LCB5KSk7CiAgICAgcmV0
dXJuIEVJTkFfVFJVRTsKIH0KIApAQCAtNzUwLDEwICs3NTAsMTAgQEAgZXdrX2ZyYW1lX3Njcm9s
bF9zaXplX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrRnJhbWUsIGludCogd2lkdGgsIGludCog
aGVpZ2h0KQogICAgICAgICAqd2lkdGggPSAwOwogICAgIGlmIChoZWlnaHQpCiAgICAgICAgICpo
ZWlnaHQgPSAwOwotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwg
RUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFt
ZSwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5m
cmFtZS0+dmlldygpLCBFSU5BX0ZBTFNFKTsKLSAgICBXZWJDb3JlOjpJbnRQb2ludCBwb2ludCA9
IHNkLT5mcmFtZS0+dmlldygpLT5tYXhpbXVtU2Nyb2xsUG9zaXRpb24oKTsKKyAgICBFV0tfRlJB
TUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5mcmFtZSwgRUlOQV9G
QUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJh
bWUtPnZpZXcoKSwgRUlOQV9GQUxTRSk7CisgICAgV2ViQ29yZTo6SW50UG9pbnQgcG9pbnQgPSBz
bWFydERhdGEtPmZyYW1lLT52aWV3KCktPm1heGltdW1TY3JvbGxQb3NpdGlvbigpOwogICAgIGlm
ICh3aWR0aCkKICAgICAgICAgKndpZHRoID0gcG9pbnQueCgpOwogICAgIGlmIChoZWlnaHQpCkBA
IC03NjgsMTAgKzc2OCwxMCBAQCBld2tfZnJhbWVfc2Nyb2xsX3Bvc19nZXQoY29uc3QgRXZhc19P
YmplY3QqIGV3a0ZyYW1lLCBpbnQqIHgsIGludCogeSkKICAgICAgICAgKnggPSAwOwogICAgIGlm
ICh5KQogICAgICAgICAqeSA9IDA7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdr
RnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9W
QUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
Tl9WQUwoc2QtPmZyYW1lLT52aWV3KCksIEVJTkFfRkFMU0UpOwotICAgIFdlYkNvcmU6OkludFBv
aW50IHBvcyA9IHNkLT5mcmFtZS0+dmlldygpLT5zY3JvbGxQb3NpdGlvbigpOworICAgIEVXS19G
UkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOwor
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmZyYW1lLCBFSU5B
X0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5m
cmFtZS0+dmlldygpLCBFSU5BX0ZBTFNFKTsKKyAgICBXZWJDb3JlOjpJbnRQb2ludCBwb3MgPSBz
bWFydERhdGEtPmZyYW1lLT52aWV3KCktPnNjcm9sbFBvc2l0aW9uKCk7CiAgICAgaWYgKHgpCiAg
ICAgICAgICp4ID0gcG9zLngoKTsKICAgICBpZiAoeSkKQEAgLTc4OSwxMCArNzg5LDEwIEBAIEVp
bmFfQm9vbCBld2tfZnJhbWVfdmlzaWJsZV9jb250ZW50X2dlb21ldHJ5X2dldChjb25zdCBFdmFz
X09iamVjdCogZXdrRnJhbWUsIEVpCiAgICAgICAgICp3aWR0aCA9IDA7CiAgICAgaWYgKGhlaWdo
dCkKICAgICAgICAgKmhlaWdodCA9IDA7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
Tl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTl9WQUwoc2QtPmZyYW1lLT52aWV3KCksIEVJTkFfRkFMU0UpOwotICAgIFdlYkNvcmU6Oklu
dFJlY3QgcmVjdCA9IHNkLT5mcmFtZS0+dmlldygpLT52aXNpYmxlQ29udGVudFJlY3QoaW5jbHVk
ZVNjcm9sbGJhcnMpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBz
bWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZB
TChzbWFydERhdGEtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTl9WQUwoc21hcnREYXRhLT5mcmFtZS0+dmlldygpLCBFSU5BX0ZBTFNFKTsKKyAgICBX
ZWJDb3JlOjpJbnRSZWN0IHJlY3QgPSBzbWFydERhdGEtPmZyYW1lLT52aWV3KCktPnZpc2libGVD
b250ZW50UmVjdChpbmNsdWRlU2Nyb2xsYmFycyk7CiAgICAgaWYgKHgpCiAgICAgICAgICp4ID0g
cmVjdC54KCk7CiAgICAgaWYgKHkpCkBAIC04MDYsMjYgKzgwNiwyNiBAQCBFaW5hX0Jvb2wgZXdr
X2ZyYW1lX3Zpc2libGVfY29udGVudF9nZW9tZXRyeV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3
a0ZyYW1lLCBFaQogCiBFaW5hX0Jvb2wgZXdrX2ZyYW1lX3BhaW50X2Z1bGxfZ2V0KGNvbnN0IEV2
YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihl
d2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJO
X1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOX1ZBTChzZC0+ZnJhbWUtPnZpZXcoKSwgRUlOQV9GQUxTRSk7Ci0gICAgcmV0dXJuIHNkLT5m
cmFtZS0+dmlldygpLT5wYWludHNFbnRpcmVDb250ZW50cygpOworICAgIEVXS19GUkFNRV9TRF9H
RVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmZyYW1lLCBFSU5BX0ZBTFNFKTsK
KyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5mcmFtZS0+dmll
dygpLCBFSU5BX0ZBTFNFKTsKKyAgICByZXR1cm4gc21hcnREYXRhLT5mcmFtZS0+dmlldygpLT5w
YWludHNFbnRpcmVDb250ZW50cygpOwogfQogCiB2b2lkIGV3a19mcmFtZV9wYWludF9mdWxsX3Nl
dChFdmFzX09iamVjdCogZXdrRnJhbWUsIEVpbmFfQm9vbCBmbGFnKQogewotICAgIEVXS19GUkFN
RV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk4oc2QtPmZyYW1lKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+
ZnJhbWUtPnZpZXcoKSk7Ci0gICAgc2QtPmZyYW1lLT52aWV3KCktPnNldFBhaW50c0VudGlyZUNv
bnRlbnRzKGZsYWcpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBz
bWFydERhdGEpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+ZnJh
bWUpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+ZnJhbWUtPnZp
ZXcoKSk7CisgICAgc21hcnREYXRhLT5mcmFtZS0+dmlldygpLT5zZXRQYWludHNFbnRpcmVDb250
ZW50cyhmbGFnKTsKIH0KIAogRWluYV9Cb29sIGV3a19mcmFtZV9mZWVkX2ZvY3VzX2luKEV2YXNf
T2JqZWN0KiBld2tGcmFtZSkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tG
cmFtZSwgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZB
TChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOwotICAgIFdlYkNvcmU6OkZvY3VzQ29udHJvbGxlciog
YyA9IHNkLT5mcmFtZS0+cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKTsKLSAgICBjLT5zZXRGb2N1
c2VkRnJhbWUoc2QtPmZyYW1lKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tG
cmFtZSwgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTl9WQUwoc21hcnREYXRhLT5mcmFtZSwgRUlOQV9GQUxTRSk7CisgICAgV2ViQ29yZTo6Rm9j
dXNDb250cm9sbGVyKiBjID0gc21hcnREYXRhLT5mcmFtZS0+cGFnZSgpLT5mb2N1c0NvbnRyb2xs
ZXIoKTsKKyAgICBjLT5zZXRGb2N1c2VkRnJhbWUoc21hcnREYXRhLT5mcmFtZSk7CiAgICAgcmV0
dXJuIEVJTkFfVFJVRTsKIH0KIApAQCAtODM4LDg3ICs4MzgsODcgQEAgRWluYV9Cb29sIGV3a19m
cmFtZV9mZWVkX2ZvY3VzX291dChFdmFzX09iamVjdCogZXdrRnJhbWUpCiAKIEVpbmFfQm9vbCBl
d2tfZnJhbWVfZmVlZF9tb3VzZV93aGVlbChFdmFzX09iamVjdCogZXdrRnJhbWUsIGNvbnN0IEV2
YXNfRXZlbnRfTW91c2VfV2hlZWwqIHdoZWVsRXZlbnQpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dF
VF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfRlJBTUVf
U0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5mcmFtZSwgRUlOQV9GQUxT
RSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHdoZWVsRXZlbnQsIEVJTkFf
RkFMU0UpOwogCi0gICAgV2ViQ29yZTo6RnJhbWVWaWV3KiB2aWV3ID0gc2QtPmZyYW1lLT52aWV3
KCk7CisgICAgV2ViQ29yZTo6RnJhbWVWaWV3KiB2aWV3ID0gc21hcnREYXRhLT5mcmFtZS0+dmll
dygpOwogICAgIERCRygiZXdrRnJhbWU9JXAsIHZpZXc9JXAsIGRpcmVjdGlvbj0lZCwgej0lZCwg
cG9zPSVkLCVkIiwKICAgICAgICAgZXdrRnJhbWUsIHZpZXcsIHdoZWVsRXZlbnQtPmRpcmVjdGlv
biwgd2hlZWxFdmVudC0+eiwgd2hlZWxFdmVudC0+Y2FudmFzLngsIHdoZWVsRXZlbnQtPmNhbnZh
cy55KTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodmlldywgRUlOQV9GQUxT
RSk7CiAKICAgICBXZWJDb3JlOjpQbGF0Zm9ybVdoZWVsRXZlbnQgZXZlbnQod2hlZWxFdmVudCk7
Ci0gICAgcmV0dXJuIHNkLT5mcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmhhbmRsZVdoZWVsRXZlbnQo
ZXZlbnQpOworICAgIHJldHVybiBzbWFydERhdGEtPmZyYW1lLT5ldmVudEhhbmRsZXIoKS0+aGFu
ZGxlV2hlZWxFdmVudChldmVudCk7CiB9CiAKIEVpbmFfQm9vbCBld2tfZnJhbWVfZmVlZF9tb3Vz
ZV9kb3duKEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgY29uc3QgRXZhc19FdmVudF9Nb3VzZV9Eb3du
KiBkb3duRXZlbnQpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUs
IHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2Qt
PmZyYW1lLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tG
cmFtZSwgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTl9WQUwoc21hcnREYXRhLT5mcmFtZSwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk5fVkFMKGRvd25FdmVudCwgRUlOQV9GQUxTRSk7CiAKLSAgICBXZWJDb3Jl
OjpGcmFtZVZpZXcqIHZpZXcgPSBzZC0+ZnJhbWUtPnZpZXcoKTsKKyAgICBXZWJDb3JlOjpGcmFt
ZVZpZXcqIHZpZXcgPSBzbWFydERhdGEtPmZyYW1lLT52aWV3KCk7CiAgICAgREJHKCJld2tGcmFt
ZT0lcCwgdmlldz0lcCwgYnV0dG9uPSVkLCBwb3M9JWQsJWQiLAogICAgICAgICBld2tGcmFtZSwg
dmlldywgZG93bkV2ZW50LT5idXR0b24sIGRvd25FdmVudC0+Y2FudmFzLngsIGRvd25FdmVudC0+
Y2FudmFzLnkpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh2aWV3LCBFSU5B
X0ZBTFNFKTsKIAogICAgIEV2YXNfQ29vcmQgeCwgeTsKLSAgICBldmFzX29iamVjdF9nZW9tZXRy
eV9nZXQoc2QtPnZpZXcsICZ4LCAmeSwgMCwgMCk7CisgICAgZXZhc19vYmplY3RfZ2VvbWV0cnlf
Z2V0KHNtYXJ0RGF0YS0+dmlldywgJngsICZ5LCAwLCAwKTsKIAogICAgIFdlYkNvcmU6OlBsYXRm
b3JtTW91c2VFdmVudCBldmVudChkb3duRXZlbnQsIFdlYkNvcmU6OkludFBvaW50KHgsIHkpKTsK
LSAgICByZXR1cm4gc2QtPmZyYW1lLT5ldmVudEhhbmRsZXIoKS0+aGFuZGxlTW91c2VQcmVzc0V2
ZW50KGV2ZW50KTsKKyAgICByZXR1cm4gc21hcnREYXRhLT5mcmFtZS0+ZXZlbnRIYW5kbGVyKCkt
PmhhbmRsZU1vdXNlUHJlc3NFdmVudChldmVudCk7CiB9CiAKIEVpbmFfQm9vbCBld2tfZnJhbWVf
ZmVlZF9tb3VzZV91cChFdmFzX09iamVjdCogZXdrRnJhbWUsIGNvbnN0IEV2YXNfRXZlbnRfTW91
c2VfVXAqIHVwRXZlbnQpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJh
bWUsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwo
c2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihl
d2tGcmFtZSwgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTl9WQUwoc21hcnREYXRhLT5mcmFtZSwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZF
VFlfT05fTlVMTF9SRVRVUk5fVkFMKHVwRXZlbnQsIEVJTkFfRkFMU0UpOwogCi0gICAgV2ViQ29y
ZTo6RnJhbWVWaWV3KiB2aWV3ID0gc2QtPmZyYW1lLT52aWV3KCk7CisgICAgV2ViQ29yZTo6RnJh
bWVWaWV3KiB2aWV3ID0gc21hcnREYXRhLT5mcmFtZS0+dmlldygpOwogICAgIERCRygiZXdrRnJh
bWU9JXAsIHZpZXc9JXAsIGJ1dHRvbj0lZCwgcG9zPSVkLCVkIiwKICAgICAgICAgZXdrRnJhbWUs
IHZpZXcsIHVwRXZlbnQtPmJ1dHRvbiwgdXBFdmVudC0+Y2FudmFzLngsIHVwRXZlbnQtPmNhbnZh
cy55KTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodmlldywgRUlOQV9GQUxT
RSk7CiAKICAgICBFdmFzX0Nvb3JkIHgsIHk7Ci0gICAgZXZhc19vYmplY3RfZ2VvbWV0cnlfZ2V0
KHNkLT52aWV3LCAmeCwgJnksIDAsIDApOworICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldChz
bWFydERhdGEtPnZpZXcsICZ4LCAmeSwgMCwgMCk7CiAKICAgICBXZWJDb3JlOjpQbGF0Zm9ybU1v
dXNlRXZlbnQgZXZlbnQodXBFdmVudCwgV2ViQ29yZTo6SW50UG9pbnQoeCwgeSkpOwotICAgIHJl
dHVybiBzZC0+ZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5oYW5kbGVNb3VzZVJlbGVhc2VFdmVudChl
dmVudCk7CisgICAgcmV0dXJuIHNtYXJ0RGF0YS0+ZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5oYW5k
bGVNb3VzZVJlbGVhc2VFdmVudChldmVudCk7CiB9CiAKIEVpbmFfQm9vbCBld2tfZnJhbWVfZmVl
ZF9tb3VzZV9tb3ZlKEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgY29uc3QgRXZhc19FdmVudF9Nb3Vz
ZV9Nb3ZlKiBtb3ZlRXZlbnQpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdr
RnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9W
QUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVS
Tihld2tGcmFtZSwgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5mcmFtZSwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKG1vdmVFdmVudCwgRUlOQV9GQUxTRSk7CiAKLSAgICBX
ZWJDb3JlOjpGcmFtZVZpZXcqIHZpZXcgPSBzZC0+ZnJhbWUtPnZpZXcoKTsKKyAgICBXZWJDb3Jl
OjpGcmFtZVZpZXcqIHZpZXcgPSBzbWFydERhdGEtPmZyYW1lLT52aWV3KCk7CiAgICAgREJHKCJl
d2tGcmFtZT0lcCwgdmlldz0lcCwgcG9zOiBvbGQ9JWQsJWQsIG5ldz0lZCwlZCwgYnV0dG9ucz0l
ZCIsCiAgICAgICAgIGV3a0ZyYW1lLCB2aWV3LCBtb3ZlRXZlbnQtPmN1ci5jYW52YXMueCwgbW92
ZUV2ZW50LT5jdXIuY2FudmFzLnksCiAgICAgICAgIG1vdmVFdmVudC0+cHJldi5jYW52YXMueCwg
bW92ZUV2ZW50LT5wcmV2LmNhbnZhcy55LCBtb3ZlRXZlbnQtPmJ1dHRvbnMpOwogICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh2aWV3LCBFSU5BX0ZBTFNFKTsKIAogICAgIEV2YXNf
Q29vcmQgeCwgeTsKLSAgICBldmFzX29iamVjdF9nZW9tZXRyeV9nZXQoc2QtPnZpZXcsICZ4LCAm
eSwgMCwgMCk7CisgICAgZXZhc19vYmplY3RfZ2VvbWV0cnlfZ2V0KHNtYXJ0RGF0YS0+dmlldywg
JngsICZ5LCAwLCAwKTsKIAogICAgIFdlYkNvcmU6OlBsYXRmb3JtTW91c2VFdmVudCBldmVudCht
b3ZlRXZlbnQsIFdlYkNvcmU6OkludFBvaW50KHgsIHkpKTsKLSAgICByZXR1cm4gc2QtPmZyYW1l
LT5ldmVudEhhbmRsZXIoKS0+bW91c2VNb3ZlZChldmVudCk7CisgICAgcmV0dXJuIHNtYXJ0RGF0
YS0+ZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5tb3VzZU1vdmVkKGV2ZW50KTsKIH0KIAogRWluYV9C
b29sIGV3a19mcmFtZV9mZWVkX3RvdWNoX2V2ZW50KEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgRXdr
X1RvdWNoX0V2ZW50X1R5cGUgYWN0aW9uLCBFaW5hX0xpc3QqIHBvaW50cywgaW50IG1ldGFTdGF0
ZSkKIHsKLSAgICBFaW5hX0Jvb2wgcmV0ID0gRUlOQV9GQUxTRTsKKyAgICBFaW5hX0Jvb2wgcmVz
dWx0ID0gRUlOQV9GQUxTRTsKIAogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCiAgICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHBvaW50cywgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX0ZS
QU1FX1NEX0dFVChld2tGcmFtZSwgc2QpOworICAgIEVXS19GUkFNRV9TRF9HRVQoZXdrRnJhbWUs
IHNtYXJ0RGF0YSk7CiAKLSAgICBpZiAoIXNkIHx8ICFzZC0+ZnJhbWUgfHwgIWV3a192aWV3X25l
ZWRfdG91Y2hfZXZlbnRzX2dldChzZC0+dmlldykpCisgICAgaWYgKCFzbWFydERhdGEgfHwgIXNt
YXJ0RGF0YS0+ZnJhbWUgfHwgIWV3a192aWV3X25lZWRfdG91Y2hfZXZlbnRzX2dldChzbWFydERh
dGEtPnZpZXcpKQogICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKIAogICAgIEV2YXNfQ29vcmQg
eCwgeTsKLSAgICBldmFzX29iamVjdF9nZW9tZXRyeV9nZXQoc2QtPnZpZXcsICZ4LCAmeSwgMCwg
MCk7CisgICAgZXZhc19vYmplY3RfZ2VvbWV0cnlfZ2V0KHNtYXJ0RGF0YS0+dmlldywgJngsICZ5
LCAwLCAwKTsKIAogICAgIFdlYkNvcmU6OlRvdWNoRXZlbnRUeXBlIHR5cGUgPSBXZWJDb3JlOjpU
b3VjaFN0YXJ0OwogICAgIHN3aXRjaCAoYWN0aW9uKSB7CkBAIC05MzgsMTAgKzkzOCwxMCBAQCBF
aW5hX0Jvb2wgZXdrX2ZyYW1lX2ZlZWRfdG91Y2hfZXZlbnQoRXZhc19PYmplY3QqIGV3a0ZyYW1l
LCBFd2tfVG91Y2hfRXZlbnRfVHlwZQogICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKICAgICB9
CiAKLSAgICBXZWJDb3JlOjpQbGF0Zm9ybVRvdWNoRXZlbnQgdGUocG9pbnRzLCBXZWJDb3JlOjpJ
bnRQb2ludCh4LCB5KSwgdHlwZSwgbWV0YVN0YXRlKTsKLSAgICByZXQgPSBzZC0+ZnJhbWUtPmV2
ZW50SGFuZGxlcigpLT5oYW5kbGVUb3VjaEV2ZW50KHRlKTsKKyAgICBXZWJDb3JlOjpQbGF0Zm9y
bVRvdWNoRXZlbnQgdG91Y2hFdmVudChwb2ludHMsIFdlYkNvcmU6OkludFBvaW50KHgsIHkpLCB0
eXBlLCBtZXRhU3RhdGUpOworICAgIHJlc3VsdCA9IHNtYXJ0RGF0YS0+ZnJhbWUtPmV2ZW50SGFu
ZGxlcigpLT5oYW5kbGVUb3VjaEV2ZW50KHRvdWNoRXZlbnQpOwogI2VuZGlmCi0gICAgcmV0dXJu
IHJldDsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBzdGF0aWMgaW5saW5lIEVpbmFfQm9vbCBf
ZXdrX2ZyYW1lX2hhbmRsZV9rZXlfc2Nyb2xsaW5nKFdlYkNvcmU6OkZyYW1lKiBmcmFtZSwgY29u
c3QgV2ViQ29yZTo6UGxhdGZvcm1LZXlib2FyZEV2ZW50JiBrZXlFdmVudCkKQEAgLTEwMTAsMzkg
KzEwMTAsMzkgQEAgc3RhdGljIGlubGluZSBFaW5hX0Jvb2wgX2V3a19mcmFtZV9oYW5kbGVfa2V5
X3Njcm9sbGluZyhXZWJDb3JlOjpGcmFtZSogZnJhbWUsIGMKIAogRWluYV9Cb29sIGV3a19mcmFt
ZV9mZWVkX2tleV9kb3duKEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgY29uc3QgRXZhc19FdmVudF9L
ZXlfRG93biogZG93bkV2ZW50KQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3
a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5f
VkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRV
Uk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChkb3duRXZlbnQsIEVJTkFfRkFMU0UpOwogCiAgICAg
REJHKCJld2tGcmFtZT0lcCBrZXluYW1lPSVzIChrZXk9JXMsIHN0cmluZz0lcykiLAogICAgICAg
ICBld2tGcmFtZSwgZG93bkV2ZW50LT5rZXluYW1lLCBkb3duRXZlbnQtPmtleSA/IGRvd25FdmVu
dC0+a2V5IDogIiIsIGRvd25FdmVudC0+c3RyaW5nID8gZG93bkV2ZW50LT5zdHJpbmcgOiAiIik7
CiAKICAgICBXZWJDb3JlOjpQbGF0Zm9ybUtleWJvYXJkRXZlbnQgZXZlbnQoZG93bkV2ZW50KTsK
LSAgICBpZiAoc2QtPmZyYW1lLT5ldmVudEhhbmRsZXIoKS0+a2V5RXZlbnQoZXZlbnQpKQorICAg
IGlmIChzbWFydERhdGEtPmZyYW1lLT5ldmVudEhhbmRsZXIoKS0+a2V5RXZlbnQoZXZlbnQpKQog
ICAgICAgICByZXR1cm4gRUlOQV9UUlVFOwogCi0gICAgcmV0dXJuIF9ld2tfZnJhbWVfaGFuZGxl
X2tleV9zY3JvbGxpbmcoc2QtPmZyYW1lLCBldmVudCk7CisgICAgcmV0dXJuIF9ld2tfZnJhbWVf
aGFuZGxlX2tleV9zY3JvbGxpbmcoc21hcnREYXRhLT5mcmFtZSwgZXZlbnQpOwogfQogCiBFaW5h
X0Jvb2wgZXdrX2ZyYW1lX2ZlZWRfa2V5X3VwKEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgY29uc3Qg
RXZhc19FdmVudF9LZXlfVXAqIHVwRXZlbnQpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9S
RVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VU
X09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5mcmFtZSwgRUlOQV9GQUxTRSk7CiAg
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHVwRXZlbnQsIEVJTkFfRkFMU0UpOwog
CiAgICAgREJHKCJld2tGcmFtZT0lcCBrZXluYW1lPSVzIChrZXk9JXMsIHN0cmluZz0lcykiLAog
ICAgICAgICBld2tGcmFtZSwgdXBFdmVudC0+a2V5bmFtZSwgdXBFdmVudC0+a2V5ID8gdXBFdmVu
dC0+a2V5IDogIiIsIHVwRXZlbnQtPnN0cmluZyA/IHVwRXZlbnQtPnN0cmluZyA6ICIiKTsKIAog
ICAgIFdlYkNvcmU6OlBsYXRmb3JtS2V5Ym9hcmRFdmVudCBldmVudCh1cEV2ZW50KTsKLSAgICBy
ZXR1cm4gc2QtPmZyYW1lLT5ldmVudEhhbmRsZXIoKS0+a2V5RXZlbnQoZXZlbnQpOworICAgIHJl
dHVybiBzbWFydERhdGEtPmZyYW1lLT5ldmVudEhhbmRsZXIoKS0+a2V5RXZlbnQoZXZlbnQpOwog
fQogCiBFd2tfVGV4dF9TZWxlY3Rpb25fVHlwZSBld2tfZnJhbWVfdGV4dF9zZWxlY3Rpb25fdHlw
ZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewotICAgIEVXS19GUkFNRV9TRF9H
RVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgRVdLX1RFWFRfU0VMRUNUSU9OX05PTkUpOwotICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVXS19URVhUX1NFTEVD
VElPTl9OT05FKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21h
cnREYXRhLCBFV0tfVEVYVF9TRUxFQ1RJT05fTk9ORSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUsIEVXS19URVhUX1NFTEVDVElPTl9OT05FKTsK
IAotICAgIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uKiBjb250cm9sbGVyID0gc2QtPmZyYW1lLT5z
ZWxlY3Rpb24oKTsKKyAgICBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbiogY29udHJvbGxlciA9IHNt
YXJ0RGF0YS0+ZnJhbWUtPnNlbGVjdGlvbigpOwogICAgIGlmICghY29udHJvbGxlcikKICAgICAg
ICAgcmV0dXJuIEVXS19URVhUX1NFTEVDVElPTl9OT05FOwogCkBAIC0xMDg1LDE4ICsxMDg1LDE4
IEBAIEV2YXNfT2JqZWN0KiBld2tfZnJhbWVfYWRkKEV2YXMqIGNhbnZhcykKICAqLwogRWluYV9C
b29sIGV3a19mcmFtZV9pbml0KEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgRXZhc19PYmplY3QqIHZp
ZXcsIFdlYkNvcmU6OkZyYW1lKiBmcmFtZSkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JF
VFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOwotICAgIGlmICghc2QtPmZyYW1lKSB7Ci0g
ICAgICAgIFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50RWZsKiBmbGMgPSBfZXdrX2ZyYW1lX2xv
YWRlcl9lZmxfZ2V0KGZyYW1lKTsKLSAgICAgICAgZmxjLT5zZXRXZWJGcmFtZShld2tGcmFtZSk7
Ci0gICAgICAgIHNkLT5mcmFtZSA9IGZyYW1lOwotICAgICAgICBzZC0+dmlldyA9IHZpZXc7Cisg
ICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSwgRUlOQV9G
QUxTRSk7CisgICAgaWYgKCFzbWFydERhdGEtPmZyYW1lKSB7CisgICAgICAgIFdlYkNvcmU6OkZy
YW1lTG9hZGVyQ2xpZW50RWZsKiBmcmFtZUxvYWRlckNsaWVudCA9IF9ld2tfZnJhbWVfbG9hZGVy
X2VmbF9nZXQoZnJhbWUpOworICAgICAgICBmcmFtZUxvYWRlckNsaWVudC0+c2V0V2ViRnJhbWUo
ZXdrRnJhbWUpOworICAgICAgICBzbWFydERhdGEtPmZyYW1lID0gZnJhbWU7CisgICAgICAgIHNt
YXJ0RGF0YS0+dmlldyA9IHZpZXc7CiAgICAgICAgIGZyYW1lLT5pbml0KCk7CiAgICAgICAgIHJl
dHVybiBFSU5BX1RSVUU7CiAgICAgfQogCiAgICAgRVJSKCJmcmFtZSAlcCBhbHJlYWR5IHNldCBm
b3IgJXAsIGlnbm9yZWQgbmV3ICVwIiwKLSAgICAgICAgc2QtPmZyYW1lLCBld2tGcmFtZSwgZnJh
bWUpOworICAgICAgICBzbWFydERhdGEtPmZyYW1lLCBld2tGcmFtZSwgZnJhbWUpOwogICAgIHJl
dHVybiBFSU5BX0ZBTFNFOwogfQogCkBAIC0xMTA3LDQ0ICsxMTA3LDQ0IEBAIEVpbmFfQm9vbCBl
d2tfZnJhbWVfaW5pdChFdmFzX09iamVjdCogZXdrRnJhbWUsIEV2YXNfT2JqZWN0KiB2aWV3LCBX
ZWJDb3JlOjpGcmFtCiAgKi8KIEVpbmFfQm9vbCBld2tfZnJhbWVfY2hpbGRfYWRkKEV2YXNfT2Jq
ZWN0KiBld2tGcmFtZSwgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkZyYW1lPiBjaGlsZCwgY29u
c3QgV1RGOjpTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYkNvcmU6OktVUkwmIHVybCwgY29uc3QgV1RG
OjpTdHJpbmcmIHJlZmVycmVyKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3
a0ZyYW1lLCBzZCwgMCk7Ci0gICAgY2hhciBidWZbMjU2XTsKKyAgICBFV0tfRlJBTUVfU0RfR0VU
X09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRhLCAwKTsKKyAgICBjaGFyIGJ1ZmZlclsyNTZd
OwogICAgIEV2YXNfT2JqZWN0KiBmcmFtZTsKLSAgICBXZWJDb3JlOjpGcmFtZSogY2Y7CisgICAg
V2ViQ29yZTo6RnJhbWUqIGNvcmVGcmFtZTsKIAotICAgIGZyYW1lID0gZXdrX2ZyYW1lX2FkZChz
ZC0+YmFzZS5ldmFzKTsKKyAgICBmcmFtZSA9IGV3a19mcmFtZV9hZGQoc21hcnREYXRhLT5iYXNl
LmV2YXMpOwogICAgIGlmICghZnJhbWUpIHsKICAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRl
IGV3a19mcmFtZSBvYmplY3QuIik7CiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwogICAgIH0K
IAotICAgIGNmID0gY2hpbGQuZ2V0KCk7Ci0gICAgaWYgKGNmLT50cmVlKCkpCi0gICAgICAgIGNm
LT50cmVlKCktPnNldE5hbWUobmFtZSk7CisgICAgY29yZUZyYW1lID0gY2hpbGQuZ2V0KCk7Cisg
ICAgaWYgKGNvcmVGcmFtZS0+dHJlZSgpKQorICAgICAgICBjb3JlRnJhbWUtPnRyZWUoKS0+c2V0
TmFtZShuYW1lKTsKICAgICBlbHNlCiAgICAgICAgIEVSUigibm8gdHJlZSBmb3IgY2hpbGQgb2Jq
ZWN0Iik7Ci0gICAgc2QtPmZyYW1lLT50cmVlKCktPmFwcGVuZENoaWxkKGNoaWxkKTsKKyAgICBz
bWFydERhdGEtPmZyYW1lLT50cmVlKCktPmFwcGVuZENoaWxkKGNoaWxkKTsKIAotICAgIGlmICgh
ZXdrX2ZyYW1lX2luaXQoZnJhbWUsIHNkLT52aWV3LCBjZikpIHsKKyAgICBpZiAoIWV3a19mcmFt
ZV9pbml0KGZyYW1lLCBzbWFydERhdGEtPnZpZXcsIGNvcmVGcmFtZSkpIHsKICAgICAgICAgZXZh
c19vYmplY3RfZGVsKGZyYW1lKTsKICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CiAgICAgfQot
ICAgIHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICJFV0tfRnJhbWU6Y2hpbGQvJXMiLCBuYW1l
LnV0ZjgoKS5kYXRhKCkpOwotICAgIGV2YXNfb2JqZWN0X25hbWVfc2V0KGZyYW1lLCBidWYpOwor
ICAgIHNucHJpbnRmKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksICJFV0tfRnJhbWU6Y2hpbGQvJXMi
LCBuYW1lLnV0ZjgoKS5kYXRhKCkpOworICAgIGV2YXNfb2JqZWN0X25hbWVfc2V0KGZyYW1lLCBi
dWZmZXIpOwogICAgIGV2YXNfb2JqZWN0X3NtYXJ0X21lbWJlcl9hZGQoZnJhbWUsIGV3a0ZyYW1l
KTsKICAgICBldmFzX29iamVjdF9zaG93KGZyYW1lKTsKIAogICAgIC8vIFRoZSBjcmVhdGlvbiBv
ZiB0aGUgZnJhbWUgbWF5IGhhdmUgcnVuIGFyYml0cmFyeSBKYXZhU2NyaXB0IHRoYXQgcmVtb3Zl
ZCBpdCBmcm9tIHRoZSBwYWdlIGFscmVhZHkuCi0gICAgaWYgKCFjZi0+cGFnZSgpKSB7CisgICAg
aWYgKCFjb3JlRnJhbWUtPnBhZ2UoKSkgewogICAgICAgICBldmFzX29iamVjdF9kZWwoZnJhbWUp
OwogICAgICAgICByZXR1cm4gRUlOQV9UUlVFOwogICAgIH0KIAotICAgIHNkLT5mcmFtZS0+bG9h
ZGVyKCktPmxvYWRVUkxJbnRvQ2hpbGRGcmFtZSh1cmwsIHJlZmVycmVyLCBjZik7CisgICAgc21h
cnREYXRhLT5mcmFtZS0+bG9hZGVyKCktPmxvYWRVUkxJbnRvQ2hpbGRGcmFtZSh1cmwsIHJlZmVy
cmVyLCBjb3JlRnJhbWUpOwogCiAgICAgLy8gVGhlIGZyYW1lJ3Mgb25sb2FkIGhhbmRsZXIgbWF5
IGhhdmUgcmVtb3ZlZCBpdCBmcm9tIHRoZSBkb2N1bWVudC4KICAgICAvLyBTZWUgZmFzdC9kb20v
bnVsbC1wYWdlLXNob3ctbW9kYWwtZGlhbG9nLWNyYXNoLmh0bWwgZm9yIGFuIGV4YW1wbGUuCi0g
ICAgaWYgKCFjZi0+dHJlZSgpLT5wYXJlbnQoKSkgeworICAgIGlmICghY29yZUZyYW1lLT50cmVl
KCktPnBhcmVudCgpKSB7CiAgICAgICAgIGV2YXNfb2JqZWN0X2RlbChmcmFtZSk7CiAgICAgICAg
IHJldHVybiBFSU5BX1RSVUU7CiAgICAgfQpAQCAtMTE1NywxNyArMTE1NywxNyBAQCBFaW5hX0Jv
b2wgZXdrX2ZyYW1lX2NoaWxkX2FkZChFdmFzX09iamVjdCogZXdrRnJhbWUsIFdURjo6UGFzc1Jl
ZlB0cjxXZWJDb3JlOjpGcgogICogQGludGVybmFsCiAgKiBDaGFuZ2UgdGhlIGV3ayB2aWV3IHRo
aXMgZnJhbWUgaXMgYXNzb2NpYXRlZCB3aXRoLgogICoKLSAqIEBwYXJhbSBvIFRoZSBld2sgZnJh
bWUgdG8gYWN0IHVwb24uCisgKiBAcGFyYW0gZXdrRnJhbWUgVGhlIGV3ayBmcmFtZSB0byBhY3Qg
dXBvbi4KICAqIEBwYXJhbSBuZXdQYXJlbnQgVGhlIG5ldyB2aWV3IHRoYXQgd2lsbCBiZSBzZXQg
YXMgdGhlIHBhcmVudCBvZiB0aGUgZnJhbWUuCiAgKi8KIHZvaWQgZXdrX2ZyYW1lX3ZpZXdfc2V0
KEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgRXZhc19PYmplY3QqIG5ld1BhcmVudCkKIHsKLSAgICBF
V0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QpOworICAgIEVXS19GUkFNRV9T
RF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzbWFydERhdGEpOwogCiAgICAgZXZhc19vYmplY3Rf
c21hcnRfbWVtYmVyX2RlbChld2tGcmFtZSk7CiAgICAgZXZhc19vYmplY3Rfc21hcnRfbWVtYmVy
X2FkZChld2tGcmFtZSwgbmV3UGFyZW50KTsKIAotICAgIHNkLT52aWV3ID0gbmV3UGFyZW50Owor
ICAgIHNtYXJ0RGF0YS0+dmlldyA9IG5ld1BhcmVudDsKIH0KIAogLyoqCkBAIC0xMTc3LDggKzEx
NzcsOCBAQCB2b2lkIGV3a19mcmFtZV92aWV3X3NldChFdmFzX09iamVjdCogZXdrRnJhbWUsIEV2
YXNfT2JqZWN0KiBuZXdQYXJlbnQpCiB2b2lkIGV3a19mcmFtZV9jb3JlX2dvbmUoRXZhc19PYmpl
Y3QqIGV3a0ZyYW1lKQogewogICAgIERCRygiZXdrRnJhbWU9JXAiLCBld2tGcmFtZSk7Ci0gICAg
RVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkKTsKLSAgICBzZC0+ZnJhbWUg
PSAwOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzbWFydERhdGEp
OworICAgIHNtYXJ0RGF0YS0+ZnJhbWUgPSAwOwogfQogCiAvKioKQEAgLTExOTAsOCArMTE5MCw4
IEBAIHZvaWQgZXdrX2ZyYW1lX2NvcmVfZ29uZShFdmFzX09iamVjdCogZXdrRnJhbWUpCiAgKi8K
IFdlYkNvcmU6OkZyYW1lKiBld2tfZnJhbWVfY29yZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3
a0ZyYW1lKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwg
MCk7Ci0gICAgcmV0dXJuIHNkLT5mcmFtZTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVS
Tihld2tGcmFtZSwgc21hcnREYXRhLCAwKTsKKyAgICByZXR1cm4gc21hcnREYXRhLT5mcmFtZTsK
IH0KIAogCkBAIC0xMjAwLDcgKzEyMDAsNyBAQCBXZWJDb3JlOjpGcmFtZSogZXdrX2ZyYW1lX2Nv
cmVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKICAqIFJlcG9ydHMgYSByZXNvdXJj
ZSB3aWxsIGJlIHJlcXVlc3RlZC4gVXNlciBtYXkgb3ZlcnJpZGUgYmVoYXZpb3Igb2Ygd2Via2l0
IGJ5CiAgKiBjaGFuZ2luZyB2YWx1ZXMgaW4gQHBhcmFtIHJlcXVlc3QuCiAgKgotICogQHBhcmFt
IG8gRnJhbWUuCisgKiBAcGFyYW0gZXdrRnJhbWUgRnJhbWUuCiAgKiBAcGFyYW0gcmVxdWVzdCBS
ZXF1ZXN0IGRldGFpbHMgdGhhdCB1c2VyIG1heSBvdmVycmlkZS4gV2hlbmV2ZXIgdmFsdWVzIG9u
CiAgKiB0aGlzIHN0cnVjdCBjaGFuZ2VzLCBpdCBtdXN0IGJlIHByb3Blcmx5IG1hbGxvYydkIGFz
IGl0IHdpbGwgYmUgZnJlZWQKICAqIGFmdGVyd2FyZHMuCkBAIC0xMjE2LDcgKzEyMTYsNyBAQCB2
b2lkIGV3a19mcmFtZV9yZXF1ZXN0X3dpbGxfc2VuZChFdmFzX09iamVjdCogZXdrRnJhbWUsIEV3
a19GcmFtZV9SZXNvdXJjZV9SZXF1ZQogICogQGludGVybmFsCiAgKiBSZXBvcnRzIHRoYXQgdGhl
cmUncyBhIG5ldyByZXNvdXJjZS4KICAqCi0gKiBAcGFyYW0gbyBGcmFtZS4KKyAqIEBwYXJhbSBl
d2tGcmFtZSBGcmFtZS4KICAqIEBwYXJhbSByZXF1ZXN0IE5ldyByZXF1ZXN0IGRldGFpbHMuIE5v
IGNoYW5nZXMgYXJlIGFsbG93ZWQgdG8gZmllbGRzLgogICoKICAqIEVtaXRzIHNpZ25hbDogInJl
c291cmNlLHJlcXVlc3QsbmV3IgpAQCAtMTIzMCw3ICsxMjMwLDcgQEAgdm9pZCBld2tfZnJhbWVf
cmVxdWVzdF9hc3NpZ25faWRlbnRpZmllcihFdmFzX09iamVjdCogZXdrRnJhbWUsIGNvbnN0IEV3
a19GcmFtZV8KICAqIEBpbnRlcm5hbAogICogUmVwb3J0cyB0aGF0IGZpcnN0IG5hdmlnYXRpb24g
b2NjdXJyZWQKICAqCi0gKiBAcGFyYW0gbyBGcmFtZS4KKyAqIEBwYXJhbSBld2tGcmFtZSBGcmFt
ZS4KICAqCiAgKiBFbWl0cyBzaWduYWw6ICJuYXZpZ2F0aW9uLGZpcnN0IgogICovCkBAIC0xMjQz
LDcgKzEyNDMsNyBAQCB2b2lkIGV3a19mcmFtZV9kaWRfcGVyZm9ybV9maXJzdF9uYXZpZ2F0aW9u
KEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKICAqIEBpbnRlcm5hbAogICogUmVwb3J0cyBmcmFtZSB3
aWxsIGJlIHNhdmVkIHRvIGN1cnJlbnQgc3RhdGUKICAqCi0gKiBAcGFyYW0gbyBGcmFtZS4KKyAq
IEBwYXJhbSBld2tGcmFtZSBGcmFtZS4KICAqIEBwYXJhbSBpdGVtIEhpc3RvcnkgaXRlbSB0byBz
YXZlIGRldGFpbHMgdG8uCiAgKgogICogRW1pdHMgc2lnbmFsOiAic3RhdGUsc2F2ZSIKQEAgLTEy
NjEsMjIgKzEyNjEsMjIgQEAgdm9pZCBld2tfZnJhbWVfdmlld19zdGF0ZV9zYXZlKEV2YXNfT2Jq
ZWN0KiBld2tGcmFtZSwgV2ViQ29yZTo6SGlzdG9yeUl0ZW0qIGl0ZW0KICAqLwogdm9pZCBld2tf
ZnJhbWVfbG9hZF9zdGFydGVkKEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsKLSAgICBFdmFzX09i
amVjdCogbWFpbl9mcmFtZTsKKyAgICBFdmFzX09iamVjdCogbWFpbkZyYW1lOwogICAgIERCRygi
ZXdrRnJhbWU9JXAiLCBld2tGcmFtZSk7CiAgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tf
Y2FsbChld2tGcmFtZSwgImxvYWQsc3RhcnRlZCIsIDApOwotICAgIEVXS19GUkFNRV9TRF9HRVRf
T1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCk7Ci0gICAgZXdrX3ZpZXdfbG9hZF9zdGFydGVkKHNkLT52
aWV3KTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRh
KTsKKyAgICBld2tfdmlld19sb2FkX3N0YXJ0ZWQoc21hcnREYXRhLT52aWV3KTsKIAotICAgIG1h
aW5fZnJhbWUgPSBld2tfdmlld19mcmFtZV9tYWluX2dldChzZC0+dmlldyk7Ci0gICAgaWYgKG1h
aW5fZnJhbWUgPT0gZXdrRnJhbWUpCi0gICAgICAgIGV3a192aWV3X2ZyYW1lX21haW5fbG9hZF9z
dGFydGVkKHNkLT52aWV3KTsKKyAgICBtYWluRnJhbWUgPSBld2tfdmlld19mcmFtZV9tYWluX2dl
dChzbWFydERhdGEtPnZpZXcpOworICAgIGlmIChtYWluRnJhbWUgPT0gZXdrRnJhbWUpCisgICAg
ICAgIGV3a192aWV3X2ZyYW1lX21haW5fbG9hZF9zdGFydGVkKHNtYXJ0RGF0YS0+dmlldyk7CiB9
CiAKIC8qKgogICogQGludGVybmFsCiAgKiBSZXBvcnRzIHRoZSBmcmFtZSBzdGFydGVkIHByb3Zp
c2lvbmFsIGxvYWQuCiAgKgotICogQHBhcmFtIG8gRnJhbWUuCisgKiBAcGFyYW0gZXdrRnJhbWUg
RnJhbWUuCiAgKgogICogRW1pdHMgc2lnbmFsOiAibG9hZCxwcm92aXNpb25hbCIgd2l0aCBubyBw
YXJhbWV0ZXJzLgogICovCkBAIC0xMjg5LDcgKzEyODksNyBAQCB2b2lkIGV3a19mcmFtZV9sb2Fk
X3Byb3Zpc2lvbmFsKEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKICAqIEBpbnRlcm5hbAogICogUmVw
b3J0cyB0aGUgZnJhbWUgZmluaXNoZWQgZmlyc3QgbGF5b3V0LgogICoKLSAqIEBwYXJhbSBvIEZy
YW1lLgorICogQHBhcmFtIGV3a0ZyYW1lIEZyYW1lLgogICoKICAqIEVtaXRzIHNpZ25hbDogImxv
YWQsZmlyc3RsYXlvdXQsZmluaXNoZWQiIHdpdGggbm8gcGFyYW1ldGVycy4KICAqLwpAQCAtMTMw
Miw3ICsxMzAyLDcgQEAgdm9pZCBld2tfZnJhbWVfbG9hZF9maXJzdGxheW91dF9maW5pc2hlZChF
dmFzX09iamVjdCogZXdrRnJhbWUpCiAgKiBAaW50ZXJuYWwKICAqIFJlcG9ydHMgdGhlIGZyYW1l
IGZpbmlzaGVkIGZpcnN0IG5vbiBlbXB0eSBsYXlvdXQuCiAgKgotICogQHBhcmFtIG8gRnJhbWUu
CisgKiBAcGFyYW0gZXdrRnJhbWUgRnJhbWUuCiAgKgogICogRW1pdHMgc2lnbmFsOiAibG9hZCxu
b25lbXB0eWxheW91dCxmaW5pc2hlZCIgd2l0aCBubyBwYXJhbWV0ZXJzLgogICovCkBAIC0xMzE1
LDcgKzEzMTUsNyBAQCB2b2lkIGV3a19mcmFtZV9sb2FkX2ZpcnN0bGF5b3V0X25vbmVtcHR5X2Zp
bmlzaGVkKEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKICAqIEBpbnRlcm5hbAogICogUmVwb3J0cyB0
aGUgbG9hZGluZyBvZiBhIGRvY3VtZW50IGhhcyBmaW5pc2hlZCBvbiBmcmFtZS4KICAqCi0gKiBA
cGFyYW0gbyBGcmFtZS4KKyAqIEBwYXJhbSBld2tGcmFtZSBGcmFtZS4KICAqCiAgKiBFbWl0cyBz
aWduYWw6ICJsb2FkLGRvY3VtZW50LGZpbmlzaGVkIiB3aXRoIG5vIHBhcmFtZXRlcnMuCiAgKi8K
QEAgLTEzMzgsNyArMTMzOCw3IEBAIHZvaWQgZXdrX2ZyYW1lX2xvYWRfZG9jdW1lbnRfZmluaXNo
ZWQoRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogICovCiB2b2lkIGV3a19mcmFtZV9sb2FkX2Zpbmlz
aGVkKEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgY29uc3QgY2hhciogZXJyb3JEb21haW4sIGludCBl
cnJvckNvZGUsIEVpbmFfQm9vbCBpc0NhbmNlbGxhdGlvbiwgY29uc3QgY2hhciogZXJyb3JEZXNj
cmlwdGlvbiwgY29uc3QgY2hhciogZmFpbGluZ1VybCkKIHsKLSAgICBFd2tfRnJhbWVfTG9hZF9F
cnJvciBidWYsICplcnJvcjsKKyAgICBFd2tfRnJhbWVfTG9hZF9FcnJvciBidWZmZXIsICplcnJv
cjsKICAgICBpZiAoIWVycm9yRG9tYWluKSB7CiAgICAgICAgIERCRygiZXdrRnJhbWU9JXAsIHN1
Y2Nlc3MuIiwgZXdrRnJhbWUpOwogICAgICAgICBlcnJvciA9IDA7CkBAIC0xMzQ3LDE3ICsxMzQ3
LDE3IEBAIHZvaWQgZXdrX2ZyYW1lX2xvYWRfZmluaXNoZWQoRXZhc19PYmplY3QqIGV3a0ZyYW1l
LCBjb25zdCBjaGFyKiBlcnJvckRvbWFpbiwgaW50CiAgICAgICAgICAgICBld2tGcmFtZSwgZXJy
b3JEb21haW4sIGVycm9yQ29kZSwgaXNDYW5jZWxsYXRpb24sCiAgICAgICAgICAgICBlcnJvckRl
c2NyaXB0aW9uLCBmYWlsaW5nVXJsKTsKIAotICAgICAgICBidWYuZG9tYWluID0gZXJyb3JEb21h
aW47Ci0gICAgICAgIGJ1Zi5jb2RlID0gZXJyb3JDb2RlOwotICAgICAgICBidWYuaXNfY2FuY2Vs
bGF0aW9uID0gaXNDYW5jZWxsYXRpb247Ci0gICAgICAgIGJ1Zi5kZXNjcmlwdGlvbiA9IGVycm9y
RGVzY3JpcHRpb247Ci0gICAgICAgIGJ1Zi5mYWlsaW5nX3VybCA9IGZhaWxpbmdVcmw7Ci0gICAg
ICAgIGJ1Zi5mcmFtZSA9IGV3a0ZyYW1lOwotICAgICAgICBlcnJvciA9ICZidWY7CisgICAgICAg
IGJ1ZmZlci5kb21haW4gPSBlcnJvckRvbWFpbjsKKyAgICAgICAgYnVmZmVyLmNvZGUgPSBlcnJv
ckNvZGU7CisgICAgICAgIGJ1ZmZlci5pc19jYW5jZWxsYXRpb24gPSBpc0NhbmNlbGxhdGlvbjsK
KyAgICAgICAgYnVmZmVyLmRlc2NyaXB0aW9uID0gZXJyb3JEZXNjcmlwdGlvbjsKKyAgICAgICAg
YnVmZmVyLmZhaWxpbmdfdXJsID0gZmFpbGluZ1VybDsKKyAgICAgICAgYnVmZmVyLmZyYW1lID0g
ZXdrRnJhbWU7CisgICAgICAgIGVycm9yID0gJmJ1ZmZlcjsKICAgICB9CiAgICAgZXZhc19vYmpl
Y3Rfc21hcnRfY2FsbGJhY2tfY2FsbChld2tGcmFtZSwgImxvYWQsZmluaXNoZWQiLCBlcnJvcik7
Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkKTsKLSAgICBld2tf
dmlld19sb2FkX2ZpbmlzaGVkKHNkLT52aWV3LCBlcnJvcik7CisgICAgRVdLX0ZSQU1FX1NEX0dF
VF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSk7CisgICAgZXdrX3ZpZXdfbG9hZF9maW5p
c2hlZChzbWFydERhdGEtPnZpZXcsIGVycm9yKTsKIH0KIAogLyoqCkBAIC0xMzk1LDE2ICsxMzk1
LDE2IEBAIHZvaWQgZXdrX2ZyYW1lX2xvYWRfZXJyb3IoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBj
b25zdCBjaGFyKiBlcnJvckRvbWFpbiwgaW50IGVyCiAgKi8KIHZvaWQgZXdrX2ZyYW1lX2xvYWRf
cHJvZ3Jlc3NfY2hhbmdlZChFdmFzX09iamVjdCogZXdrRnJhbWUpCiB7Ci0gICAgRVdLX0ZSQU1F
X1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTihzZC0+ZnJhbWUpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0Zy
YW1lLCBzbWFydERhdGEpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0
YS0+ZnJhbWUpOwogCiAgICAgLy8gVE9ETzogdGhpcyBpcyBwZXIgcGFnZSwgdGhlcmUgc2hvdWxk
IGJlIGEgd2F5IHRvIGhhdmUgcGVyLWZyYW1lLgotICAgIGRvdWJsZSBwcm9ncmVzcyA9IHNkLT5m
cmFtZS0+cGFnZSgpLT5wcm9ncmVzcygpLT5lc3RpbWF0ZWRQcm9ncmVzcygpOworICAgIGRvdWJs
ZSBwcm9ncmVzcyA9IHNtYXJ0RGF0YS0+ZnJhbWUtPnBhZ2UoKS0+cHJvZ3Jlc3MoKS0+ZXN0aW1h
dGVkUHJvZ3Jlc3MoKTsKIAogICAgIERCRygiZXdrRnJhbWU9JXAgKHA9JTAuM2YpIiwgZXdrRnJh
bWUsIHByb2dyZXNzKTsKIAogICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdr
RnJhbWUsICJsb2FkLHByb2dyZXNzIiwgJnByb2dyZXNzKTsKLSAgICBld2tfdmlld19sb2FkX3By
b2dyZXNzX2NoYW5nZWQoc2QtPnZpZXcpOworICAgIGV3a192aWV3X2xvYWRfcHJvZ3Jlc3NfY2hh
bmdlZChzbWFydERhdGEtPnZpZXcpOwogfQogCiAKQEAgLTE0NDEsNTEgKzE0NDEsNTEgQEAgdm9p
ZCBld2tfZnJhbWVfdGl0bGVfc2V0KEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgY29uc3QgY2hhciog
dGl0bGUpCiB2b2lkIGV3a19mcmFtZV92aWV3X2NyZWF0ZV9mb3JfdmlldyhFdmFzX09iamVjdCog
ZXdrRnJhbWUsIEV2YXNfT2JqZWN0KiB2aWV3KQogewogICAgIERCRygiZXdrRnJhbWU9JXAsIHZp
ZXc9JXAiLCBld2tGcmFtZSwgdmlldyk7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrRnJhbWUsIHNkKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+ZnJhbWUp
OwotICAgIEV2YXNfQ29vcmQgdywgaDsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihl
d2tGcmFtZSwgc21hcnREYXRhKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFy
dERhdGEtPmZyYW1lKTsKKyAgICBFdmFzX0Nvb3JkIHdpZHRoLCBoZWlnaHQ7CiAKLSAgICBldmFz
X29iamVjdF9nZW9tZXRyeV9nZXQodmlldywgMCwgMCwgJncsICZoKTsKKyAgICBldmFzX29iamVj
dF9nZW9tZXRyeV9nZXQodmlldywgMCwgMCwgJndpZHRoLCAmaGVpZ2h0KTsKIAotICAgIFdlYkNv
cmU6OkludFNpemUgc2l6ZSh3LCBoKTsKLSAgICBpbnQgciwgZywgYiwgYTsKLSAgICBXZWJDb3Jl
OjpDb2xvciBiZzsKKyAgICBXZWJDb3JlOjpJbnRTaXplIHNpemUod2lkdGgsIGhlaWdodCk7Cisg
ICAgaW50IHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhOworICAgIFdlYkNvcmU6OkNvbG9yIGJhY2tn
cm91bmQ7CiAKLSAgICBld2tfdmlld19iZ19jb2xvcl9nZXQodmlldywgJnIsICZnLCAmYiwgJmEp
OwotICAgIGlmICghYSkKLSAgICAgICAgYmcgPSBXZWJDb3JlOjpDb2xvcigwLCAwLCAwLCAwKTsK
LSAgICBlbHNlIGlmIChhID09IDI1NSkKLSAgICAgICAgYmcgPSBXZWJDb3JlOjpDb2xvcihyLCBn
LCBiLCBhKTsKKyAgICBld2tfdmlld19iZ19jb2xvcl9nZXQodmlldywgJnJlZCwgJmdyZWVuLCAm
Ymx1ZSwgJmFscGhhKTsKKyAgICBpZiAoIWFscGhhKQorICAgICAgICBiYWNrZ3JvdW5kID0gV2Vi
Q29yZTo6Q29sb3IoMCwgMCwgMCwgMCk7CisgICAgZWxzZSBpZiAoYWxwaGEgPT0gMjU1KQorICAg
ICAgICBiYWNrZ3JvdW5kID0gV2ViQ29yZTo6Q29sb3IocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEp
OwogICAgIGVsc2UKLSAgICAgICAgYmcgPSBXZWJDb3JlOjpDb2xvcihyICogMjU1IC8gYSwgZyAq
IDI1NSAvIGEsIGIgKiAyNTUgLyBhLCBhKTsKKyAgICAgICAgYmFja2dyb3VuZCA9IFdlYkNvcmU6
OkNvbG9yKHJlZCAqIDI1NSAvIGFscGhhLCBncmVlbiAqIDI1NSAvIGFscGhhLCBibHVlICogMjU1
IC8gYWxwaGEsIGFscGhhKTsKIAotICAgIHNkLT5mcmFtZS0+Y3JlYXRlVmlldyhzaXplLCBiZywg
IWEsIFdlYkNvcmU6OkludFNpemUoKSwgZmFsc2UpOwotICAgIGlmICghc2QtPmZyYW1lLT52aWV3
KCkpCisgICAgc21hcnREYXRhLT5mcmFtZS0+Y3JlYXRlVmlldyhzaXplLCBiYWNrZ3JvdW5kLCAh
YWxwaGEsIFdlYkNvcmU6OkludFNpemUoKSwgZmFsc2UpOworICAgIGlmICghc21hcnREYXRhLT5m
cmFtZS0+dmlldygpKQogICAgICAgICByZXR1cm47CiAKICAgICBjb25zdCBjaGFyKiB0aGVtZSA9
IGV3a192aWV3X3RoZW1lX2dldCh2aWV3KTsKLSAgICBzZC0+ZnJhbWUtPnZpZXcoKS0+c2V0RWRq
ZVRoZW1lKHRoZW1lKTsKLSAgICBzZC0+ZnJhbWUtPnZpZXcoKS0+c2V0RXZhc09iamVjdChld2tG
cmFtZSk7CisgICAgc21hcnREYXRhLT5mcmFtZS0+dmlldygpLT5zZXRFZGplVGhlbWUodGhlbWUp
OworICAgIHNtYXJ0RGF0YS0+ZnJhbWUtPnZpZXcoKS0+c2V0RXZhc09iamVjdChld2tGcmFtZSk7
CiB9CiAKIHNzaXplX3QgZXdrX2ZyYW1lX3NvdXJjZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3
a0ZyYW1lLCBjaGFyKiogZnJhbWVTb3VyY2UpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9S
RVRVUk4oZXdrRnJhbWUsIHNkLCAtMSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5f
VkFMKHNkLT5mcmFtZSwgLTEpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChz
ZC0+ZnJhbWUtPmRvY3VtZW50KCksIC0xKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVS
Tihld2tGcmFtZSwgc21hcnREYXRhLCAtMSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUsIC0xKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTl9WQUwoc21hcnREYXRhLT5mcmFtZS0+ZG9jdW1lbnQoKSwgLTEpOwogICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOX1ZBTChmcmFtZVNvdXJjZSwgLTEpOwogCiAgICAgV1RGOjpTdHJp
bmcgc291cmNlOwogICAgICpmcmFtZVNvdXJjZSA9IDA7IC8vIFNhdmVzIDAgdG8gcG9pbnRlciB1
bnRpbCBpdCdzIG5vdCBhbGxvY2F0ZWQuCiAKLSAgICBpZiAoIXNkLT5mcmFtZS0+ZG9jdW1lbnQo
KS0+aXNIVE1MRG9jdW1lbnQoKSkgeworICAgIGlmICghc21hcnREYXRhLT5mcmFtZS0+ZG9jdW1l
bnQoKS0+aXNIVE1MRG9jdW1lbnQoKSkgewogICAgICAgICAvLyBGSVhNRTogU3VwcG9ydCBvdGhl
cnMgZG9jdW1lbnRzLgogICAgICAgICBXUk4oIk9ubHkgSFRNTCBkb2N1bWVudHMgYXJlIHN1cHBv
cnRlZCIpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCiAgICAgLy8gTG9vayBmb3IgPGh0
bWw+IHRhZy4gSWYgaXQgZXhpc3RzLCB0aGUgbm9kZSBjb250YXRpbnMgYWxsIGRvY3VtZW50J3Mg
c291cmNlLgotICAgIFdlYkNvcmU6Ok5vZGUqIGRvY3VtZW50Tm9kZSA9IHNkLT5mcmFtZS0+ZG9j
dW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCk7CisgICAgV2ViQ29yZTo6Tm9kZSogZG9jdW1lbnRO
b2RlID0gc21hcnREYXRhLT5mcmFtZS0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCk7CiAg
ICAgaWYgKGRvY3VtZW50Tm9kZSkKICAgICAgICAgZm9yIChXZWJDb3JlOjpOb2RlKiBub2RlID0g
ZG9jdW1lbnROb2RlLT5maXJzdENoaWxkKCk7IG5vZGU7IG5vZGUgPSBub2RlLT5wYXJlbnRFbGVt
ZW50KCkpIHsKICAgICAgICAgICAgIGlmIChub2RlLT5oYXNUYWdOYW1lKFdlYkNvcmU6OkhUTUxO
YW1lczo6aHRtbFRhZykpIHsKQEAgLTE0OTgsMzYgKzE0OTgsMzYgQEAgc3NpemVfdCBld2tfZnJh
bWVfc291cmNlX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrRnJhbWUsIGNoYXIqKiBmcmFtZVNv
dXJjZSkKIAogICAgIC8vIFRyeSB0byBnZXQgPGhlYWQ+IGFuZCA8Ym9keT4gdGFncyBpZiA8aHRt
bD4gdGFnIHdhcyBub3QgZm91bmQuCiAgICAgaWYgKHNvdXJjZS5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgaWYgKHNkLT5mcmFtZS0+ZG9jdW1lbnQoKS0+aGVhZCgpKQotICAgICAgICAgICAgc291cmNl
ID0gc2QtPmZyYW1lLT5kb2N1bWVudCgpLT5oZWFkKCktPm91dGVySFRNTCgpOworICAgICAgICBp
ZiAoc21hcnREYXRhLT5mcmFtZS0+ZG9jdW1lbnQoKS0+aGVhZCgpKQorICAgICAgICAgICAgc291
cmNlID0gc21hcnREYXRhLT5mcmFtZS0+ZG9jdW1lbnQoKS0+aGVhZCgpLT5vdXRlckhUTUwoKTsK
IAotICAgICAgICBpZiAoc2QtPmZyYW1lLT5kb2N1bWVudCgpLT5ib2R5KCkpCi0gICAgICAgICAg
ICBzb3VyY2UgKz0gc2QtPmZyYW1lLT5kb2N1bWVudCgpLT5ib2R5KCktPm91dGVySFRNTCgpOwor
ICAgICAgICBpZiAoc21hcnREYXRhLT5mcmFtZS0+ZG9jdW1lbnQoKS0+Ym9keSgpKQorICAgICAg
ICAgICAgc291cmNlICs9IHNtYXJ0RGF0YS0+ZnJhbWUtPmRvY3VtZW50KCktPmJvZHkoKS0+b3V0
ZXJIVE1MKCk7CiAgICAgfQogCi0gICAgc2l6ZV90IHNvdXJjZV9sZW5ndGggPSBzdHJsZW4oc291
cmNlLnV0ZjgoKS5kYXRhKCkpOwotICAgICpmcmFtZVNvdXJjZSA9IHN0YXRpY19jYXN0PGNoYXIq
PihtYWxsb2Moc291cmNlX2xlbmd0aCArIDEpKTsKKyAgICBzaXplX3Qgc291cmNlTGVuZ3RoID0g
c3RybGVuKHNvdXJjZS51dGY4KCkuZGF0YSgpKTsKKyAgICAqZnJhbWVTb3VyY2UgPSBzdGF0aWNf
Y2FzdDxjaGFyKj4obWFsbG9jKHNvdXJjZUxlbmd0aCArIDEpKTsKICAgICBpZiAoISpmcmFtZVNv
dXJjZSkgewogICAgICAgICBDUklUSUNBTCgiQ291bGQgbm90IGFsbG9jYXRlIG1lbW9yeS4iKTsK
ICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIAotICAgIHN0cm5jcHkoKmZyYW1lU291cmNlLCBz
b3VyY2UudXRmOCgpLmRhdGEoKSwgc291cmNlX2xlbmd0aCk7Ci0gICAgKCpmcmFtZVNvdXJjZSlb
c291cmNlX2xlbmd0aF0gPSAnXDAnOworICAgIHN0cm5jcHkoKmZyYW1lU291cmNlLCBzb3VyY2Uu
dXRmOCgpLmRhdGEoKSwgc291cmNlTGVuZ3RoKTsKKyAgICAoKmZyYW1lU291cmNlKVtzb3VyY2VM
ZW5ndGhdID0gJ1wwJzsKIAotICAgIHJldHVybiBzb3VyY2VfbGVuZ3RoOworICAgIHJldHVybiBz
b3VyY2VMZW5ndGg7CiB9CiAKIEVpbmFfTGlzdCogZXdrX2ZyYW1lX3Jlc291cmNlc19sb2NhdGlv
bl9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewotICAgIEVXS19GUkFNRV9TRF9H
RVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgMCk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk5fVkFMKHNkLT5mcmFtZSwgMCk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5f
VkFMKHNkLT5mcmFtZS0+ZG9jdW1lbnQoKSwgMCk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9S
RVRVUk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSwgMCk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUsIDApOworICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOX1ZBTChzbWFydERhdGEtPmZyYW1lLT5kb2N1bWVudCgpLCAwKTsKIAogICAgIEVpbmFf
TGlzdCogbGlzdE9mSW1hZ2VzTG9jYXRpb24gPSAwOwogCiAgICAgLy8gR2V0IHNyYyBhdHRpYnV0
ZSBvZiBpbWFnZXMgYW5kIHNhdmVzIHRoZW0gdG8gdGhlIEVpbmFfTGlzdC4KLSAgICBSZWZQdHI8
V2ViQ29yZTo6SFRNTENvbGxlY3Rpb24+IGltYWdlcyA9IHNkLT5mcmFtZS0+ZG9jdW1lbnQoKS0+
aW1hZ2VzKCk7CisgICAgUmVmUHRyPFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uPiBpbWFnZXMgPSBz
bWFydERhdGEtPmZyYW1lLT5kb2N1bWVudCgpLT5pbWFnZXMoKTsKICAgICBmb3IgKHNpemVfdCBp
bmRleCA9IDA7IGluZGV4IDwgaW1hZ2VzLT5sZW5ndGgoKTsgKytpbmRleCkgewogICAgICAgICBX
ZWJDb3JlOjpIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZUVsZW1lbnQgPSBzdGF0aWNfY2FzdDxXZWJD
b3JlOjpIVE1MSW1hZ2VFbGVtZW50Kj4oaW1hZ2VzLT5pdGVtKGluZGV4KSk7CiAgICAgICAgIGlm
ICghaW1hZ2VFbGVtZW50IHx8IGltYWdlRWxlbWVudC0+c3JjKCkuaXNOdWxsKCkgfHwgaW1hZ2VF
bGVtZW50LT5zcmMoKS5pc0VtcHR5KCkpCkBAIC0xNTY0LDEzICsxNTY0LDEzIEBAIG91dF9vZl9t
ZW1vcnlfaGFuZGxlcjoKIAogY2hhciogZXdrX2ZyYW1lX3BsYWluX3RleHRfZ2V0KGNvbnN0IEV2
YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihl
d2tGcmFtZSwgc2QsIDApOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+
ZnJhbWUsIDApOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzbWFy
dERhdGEsIDApOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEt
PmZyYW1lLCAwKTsKIAotICAgIGlmICghc2QtPmZyYW1lLT5kb2N1bWVudCgpKQorICAgIGlmICgh
c21hcnREYXRhLT5mcmFtZS0+ZG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBX
ZWJDb3JlOjpFbGVtZW50KiBkb2N1bWVudEVsZW1lbnQgPSBzZC0+ZnJhbWUtPmRvY3VtZW50KCkt
PmRvY3VtZW50RWxlbWVudCgpOworICAgIFdlYkNvcmU6OkVsZW1lbnQqIGRvY3VtZW50RWxlbWVu
dCA9IHNtYXJ0RGF0YS0+ZnJhbWUtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpOwogCiAg
ICAgaWYgKCFkb2N1bWVudEVsZW1lbnQpCiAgICAgICAgIHJldHVybiAwOwpAQCAtMTYwOSw5ICsx
NjA5LDkgQEAgRWluYV9Cb29sIGV3a19mcmFtZV91cmlfY2hhbmdlZChFdmFzX09iamVjdCogZXdr
RnJhbWUpCiB2b2lkIGV3a19mcmFtZV9mb3JjZV9sYXlvdXQoRXZhc19PYmplY3QqIGV3a0ZyYW1l
KQogewogICAgIERCRygiZXdrRnJhbWU9JXAiLCBld2tGcmFtZSk7Ci0gICAgRVdLX0ZSQU1FX1NE
X0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTihzZC0+ZnJhbWUpOwotICAgIFdlYkNvcmU6OkZyYW1lVmlldyogdmlldyA9IHNkLT5mcmFt
ZS0+dmlldygpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzbWFy
dERhdGEpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+ZnJhbWUp
OworICAgIFdlYkNvcmU6OkZyYW1lVmlldyogdmlldyA9IHNtYXJ0RGF0YS0+ZnJhbWUtPnZpZXco
KTsKICAgICBpZiAodmlldykKICAgICAgICAgdmlldy0+Zm9yY2VMYXlvdXQodHJ1ZSk7CiB9CkBA
IC0xNjMwLDcgKzE2MzAsNyBAQCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6V2lkZ2V0PiBld2tf
ZnJhbWVfcGx1Z2luX2NyZWF0ZShFdmFzX09iamVjdCogZXdrRnJhbWUsCiAgKiBAaW50ZXJuYWwK
ICAqIFJlcG9ydHMgdGhhdCBlZGl0b3IgY2xpZW50IHNlbGVjdGlvbiB3YXMgY2hhbmdlZC4KICAq
Ci0gKiBAcGFyYW0gbyBGcmFtZQorICogQHBhcmFtIGV3a0ZyYW1lIEZyYW1lCiAgKgogICogRW1p
dHMgc2lnbmFsOiAiZWRpdG9yY2xpZW50c2VsZWN0aW9uLGNoYW5nZWQiIHdpdGggbm8gcGFyYW1l
dGVycy4KICAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19oaXN0b3J5
LmNwcCBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfaGlzdG9yeS5jcHAKaW5kZXggMDZlMjM2
OTQ5OWRkNTlhOGMxOTlmMjJjMWQyODhjYzVhMmU2OThmNS4uYzUyOWU2NTRiNWU0ZDQ2MTgyYzVl
MzQ1YWE4N2YyMTE3ZTE1MTgxOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3
a19oaXN0b3J5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2hpc3RvcnkuY3Bw
CkBAIC01Nyw5ICs1Nyw5IEBAIHN0cnVjdCBfRXdrX0hpc3RvcnlfSXRlbSB7CiAgICAgV2ViQ29y
ZTo6SGlzdG9yeUl0ZW0qIGNvcmU7CiAKICAgICBjb25zdCBjaGFyKiB0aXRsZTsKLSAgICBjb25z
dCBjaGFyKiBhbHRlcm5hdGVfdGl0bGU7CisgICAgY29uc3QgY2hhciogYWx0ZXJuYXRlVGl0bGU7
CiAgICAgY29uc3QgY2hhciogdXJpOwotICAgIGNvbnN0IGNoYXIqIG9yaWdpbmFsX3VyaTsKKyAg
ICBjb25zdCBjaGFyKiBvcmlnaW5hbFVyaTsKIH07CiAKICNkZWZpbmUgRVdLX0hJU1RPUllfSVRF
TV9DT1JFX0dFVF9PUl9SRVRVUk4oaXRlbSwgY29yZV8sIC4uLikgXApAQCAtOTcsMTcgKzk3LDE3
IEBAIHN0YXRpYyBpbmxpbmUgRXdrX0hpc3RvcnlfSXRlbSogX2V3a19oaXN0b3J5X2l0ZW1fbmV3
KFdlYkNvcmU6Okhpc3RvcnlJdGVtKiBjb3JlCiAKIHN0YXRpYyBpbmxpbmUgRWluYV9MaXN0KiBf
ZXdrX2hpc3RvcnlfaXRlbV9saXN0X2dldChjb25zdCBXZWJDb3JlOjpIaXN0b3J5SXRlbVZlY3Rv
ciYgY29yZUl0ZW1zKQogewotICAgIEVpbmFfTGlzdCogcmV0ID0gMDsKLSAgICB1bnNpZ25lZCBp
bnQgaSwgc2l6ZTsKKyAgICBFaW5hX0xpc3QqIHJlc3VsdCA9IDA7CisgICAgdW5zaWduZWQgaW50
IHNpemU7CiAKICAgICBzaXplID0gY29yZUl0ZW1zLnNpemUoKTsKLSAgICBmb3IgKGkgPSAwOyBp
IDwgc2l6ZTsgaSsrKSB7CisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBzaXplOyBp
KyspIHsKICAgICAgICAgRXdrX0hpc3RvcnlfSXRlbSogaXRlbSA9IF9ld2tfaGlzdG9yeV9pdGVt
X25ldyhjb3JlSXRlbXNbaV0uZ2V0KCkpOwogICAgICAgICBpZiAoaXRlbSkKLSAgICAgICAgICAg
IHJldCA9IGVpbmFfbGlzdF9hcHBlbmQocmV0LCBpdGVtKTsKKyAgICAgICAgICAgIHJlc3VsdCA9
IGVpbmFfbGlzdF9hcHBlbmQocmVzdWx0LCBpdGVtKTsKICAgICB9CiAKLSAgICByZXR1cm4gcmV0
OworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIEVpbmFfQm9vbCBld2tfaGlzdG9yeV9mb3J3YXJk
KEV3a19IaXN0b3J5KiBoaXN0b3J5KQpAQCAtMjYwLDkgKzI2MCw5IEBAIHZvaWQgZXdrX2hpc3Rv
cnlfaXRlbV9mcmVlKEV3a19IaXN0b3J5X0l0ZW0qIGl0ZW0pCiAKIHZvaWQgZXdrX2hpc3Rvcnlf
aXRlbV9saXN0X2ZyZWUoRWluYV9MaXN0KiBoaXN0b3J5X2l0ZW1zKQogewotICAgIHZvaWQqIGQ7
Ci0gICAgRUlOQV9MSVNUX0ZSRUUoaGlzdG9yeV9pdGVtcywgZCkgewotICAgICAgICBFd2tfSGlz
dG9yeV9JdGVtKiBpdGVtID0gKEV3a19IaXN0b3J5X0l0ZW0qKWQ7CisgICAgdm9pZCogZGVsZXRl
SXRlbTsKKyAgICBFSU5BX0xJU1RfRlJFRShoaXN0b3J5X2l0ZW1zLCBkZWxldGVJdGVtKSB7Cisg
ICAgICAgIEV3a19IaXN0b3J5X0l0ZW0qIGl0ZW0gPSAoRXdrX0hpc3RvcnlfSXRlbSopZGVsZXRl
SXRlbTsKICAgICAgICAgX2V3a19oaXN0b3J5X2l0ZW1fZnJlZShpdGVtLCBpdGVtLT5jb3JlKTsK
ICAgICB9CiB9CkBAIC0yNzEsMjUgKzI3MSwyNSBAQCBjb25zdCBjaGFyKiBld2tfaGlzdG9yeV9p
dGVtX3RpdGxlX2dldChjb25zdCBFd2tfSGlzdG9yeV9JdGVtKiBpdGVtKQogewogICAgIEVXS19I
SVNUT1JZX0lURU1fQ09SRV9HRVRfT1JfUkVUVVJOKGl0ZW0sIGNvcmUsIDApOwogICAgIC8vIGhp
ZGUgdGhlIGZvbGxvd2luZyBvcHRpbXphdGlvbiBmcm9tIG91dHNpZGUKLSAgICBFd2tfSGlzdG9y
eV9JdGVtKiBpID0gY29uc3RfY2FzdDxFd2tfSGlzdG9yeV9JdGVtKj4oaXRlbSk7Ci0gICAgZWlu
YV9zdHJpbmdzaGFyZV9yZXBsYWNlKCZpLT50aXRsZSwgY29yZS0+dGl0bGUoKS51dGY4KCkuZGF0
YSgpKTsKLSAgICByZXR1cm4gaS0+dGl0bGU7CisgICAgRXdrX0hpc3RvcnlfSXRlbSogaXRlbTEg
PSBjb25zdF9jYXN0PEV3a19IaXN0b3J5X0l0ZW0qPihpdGVtKTsKKyAgICBlaW5hX3N0cmluZ3No
YXJlX3JlcGxhY2UoJml0ZW0xLT50aXRsZSwgY29yZS0+dGl0bGUoKS51dGY4KCkuZGF0YSgpKTsK
KyAgICByZXR1cm4gaXRlbTEtPnRpdGxlOwogfQogCiBjb25zdCBjaGFyKiBld2tfaGlzdG9yeV9p
dGVtX3RpdGxlX2FsdGVybmF0ZV9nZXQoY29uc3QgRXdrX0hpc3RvcnlfSXRlbSogaXRlbSkKIHsK
ICAgICBFV0tfSElTVE9SWV9JVEVNX0NPUkVfR0VUX09SX1JFVFVSTihpdGVtLCBjb3JlLCAwKTsK
ICAgICAvLyBoaWRlIHRoZSBmb2xsb3dpbmcgb3B0aW16YXRpb24gZnJvbSBvdXRzaWRlCi0gICAg
RXdrX0hpc3RvcnlfSXRlbSogaSA9IGNvbnN0X2Nhc3Q8RXdrX0hpc3RvcnlfSXRlbSo+KGl0ZW0p
OwotICAgIGVpbmFfc3RyaW5nc2hhcmVfcmVwbGFjZSgmaS0+YWx0ZXJuYXRlX3RpdGxlLAorICAg
IEV3a19IaXN0b3J5X0l0ZW0qIGl0ZW0xID0gY29uc3RfY2FzdDxFd2tfSGlzdG9yeV9JdGVtKj4o
aXRlbSk7CisgICAgZWluYV9zdHJpbmdzaGFyZV9yZXBsYWNlKCZpdGVtMS0+YWx0ZXJuYXRlVGl0
bGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmUtPmFsdGVybmF0ZVRpdGxlKCku
dXRmOCgpLmRhdGEoKSk7Ci0gICAgcmV0dXJuIGktPmFsdGVybmF0ZV90aXRsZTsKKyAgICByZXR1
cm4gaXRlbTEtPmFsdGVybmF0ZVRpdGxlOwogfQogCiB2b2lkIGV3a19oaXN0b3J5X2l0ZW1fdGl0
bGVfYWx0ZXJuYXRlX3NldChFd2tfSGlzdG9yeV9JdGVtKiBpdGVtLCBjb25zdCBjaGFyKiB0aXRs
ZSkKIHsKICAgICBFV0tfSElTVE9SWV9JVEVNX0NPUkVfR0VUX09SX1JFVFVSTihpdGVtLCBjb3Jl
KTsKLSAgICBpZiAoIWVpbmFfc3RyaW5nc2hhcmVfcmVwbGFjZSgmaXRlbS0+YWx0ZXJuYXRlX3Rp
dGxlLCB0aXRsZSkpCisgICAgaWYgKCFlaW5hX3N0cmluZ3NoYXJlX3JlcGxhY2UoJml0ZW0tPmFs
dGVybmF0ZVRpdGxlLCB0aXRsZSkpCiAgICAgICAgIHJldHVybjsKICAgICBjb3JlLT5zZXRBbHRl
cm5hdGVUaXRsZShXVEY6OlN0cmluZzo6ZnJvbVVURjgodGl0bGUpKTsKIH0KQEAgLTMwOCw5ICsz
MDgsOSBAQCBjb25zdCBjaGFyKiBld2tfaGlzdG9yeV9pdGVtX3VyaV9vcmlnaW5hbF9nZXQoY29u
c3QgRXdrX0hpc3RvcnlfSXRlbSogaXRlbSkKICAgICBFV0tfSElTVE9SWV9JVEVNX0NPUkVfR0VU
X09SX1JFVFVSTihpdGVtLCBjb3JlLCAwKTsKICAgICAvLyBoaWRlIHRoZSBmb2xsb3dpbmcgb3B0
aW16YXRpb24gZnJvbSBvdXRzaWRlCiAgICAgRXdrX0hpc3RvcnlfSXRlbSogaSA9IGNvbnN0X2Nh
c3Q8RXdrX0hpc3RvcnlfSXRlbSo+KGl0ZW0pOwotICAgIGVpbmFfc3RyaW5nc2hhcmVfcmVwbGFj
ZSgmaS0+b3JpZ2luYWxfdXJpLAorICAgIGVpbmFfc3RyaW5nc2hhcmVfcmVwbGFjZSgmaS0+b3Jp
Z2luYWxVcmksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmUtPm9yaWdpbmFsVVJM
U3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgcmV0dXJuIGktPm9yaWdpbmFsX3VyaTsKKyAg
ICByZXR1cm4gaS0+b3JpZ2luYWxVcmk7CiB9CiAKIGRvdWJsZSBld2tfaGlzdG9yeV9pdGVtX3Rp
bWVfbGFzdF92aXNpdGVkX2dldChjb25zdCBFd2tfSGlzdG9yeV9JdGVtKiBpdGVtKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19qcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Vm
bC9ld2svZXdrX2pzLmNwcAppbmRleCA0MmNmZGZlYzFhNWI0ODNmNGZhMTNmNWU4YzhjNDE1ZDRl
ZjYwMWMxLi5mNWIzYWU1NmI1MDVjMzM5YmJkNWZiMjkxNzBkMzdmMTJkMmM5YjU0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2pzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L2VmbC9ld2svZXdrX2pzLmNwcApAQCAtODUsMTAgKzg1LDEwIEBAIHN0YXRpYyBFaW5hX0Jvb2wg
ZXdrX2pzX3ZhcmlhbnRfdG9fbnB2YXJpYW50KGNvbnN0IEV3a19KU19WYXJpYW50KiBkYXRhLCBO
UFZhcmlhCiAvLyBUaGVzZSBtZXRob2RzIGFyZSB1c2VkIGJ5IE5QQUksIHRoYXRzIHRoZSByZWFz
b24gdG8gdXNlIGJvb2wgaW5zdGVhZCBvZiBFaW5hX0Jvb2wuCiBzdGF0aWMgYm9vbCBld2tfanNf
cHJvcGVydHlfaGFzKE5QT2JqZWN0KiBucE9iamVjdCwgTlBJZGVudGlmaWVyIG5hbWUpCiB7Ci0g
ICAgRXdrX0pTX09iamVjdCogb2JqID0gcmVpbnRlcnByZXRfY2FzdDxFd2tfSlNfT2JqZWN0Kj4o
bnBPYmplY3QpOworICAgIEV3a19KU19PYmplY3QqIG9iamVjdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
RXdrX0pTX09iamVjdCo+KG5wT2JqZWN0KTsKIAogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOX1ZBTChucE9iamVjdCwgZmFsc2UpOwotICAgIEVJTkFfTUFHSUNfQ0hFQ0tfT1JfUkVUVVJO
KG9iaiwgZmFsc2UpOworICAgIEVJTkFfTUFHSUNfQ0hFQ0tfT1JfUkVUVVJOKG9iamVjdCwgZmFs
c2UpOwogCiAgICAgaWYgKCFfTlBOX0lkZW50aWZpZXJJc1N0cmluZyhuYW1lKSkgewogICAgICAg
ICBFUlIoImludCBOUElkZW50aWZpZXIgaXMgbm90IHN1cHBvcnRlZC4iKTsKQEAgLTk2LDcgKzk2
LDcgQEAgc3RhdGljIGJvb2wgZXdrX2pzX3Byb3BlcnR5X2hhcyhOUE9iamVjdCogbnBPYmplY3Qs
IE5QSWRlbnRpZmllciBuYW1lKQogICAgIH0KIAogICAgIGNoYXIqIHByb3BfbmFtZSA9IF9OUE5f
VVRGOEZyb21JZGVudGlmaWVyKG5hbWUpOwotICAgIGJvb2wgZmFpbCA9IGVpbmFfaGFzaF9maW5k
KG9iai0+cHJvcGVydGllcywgcHJvcF9uYW1lKTsgLy8gRklYTUU6IHNob3VsZCBzZWFyY2ggbWV0
aG9kcyB0b28/CisgICAgYm9vbCBmYWlsID0gZWluYV9oYXNoX2ZpbmQob2JqZWN0LT5wcm9wZXJ0
aWVzLCBwcm9wX25hbWUpOyAvLyBGSVhNRTogc2hvdWxkIHNlYXJjaCBtZXRob2RzIHRvbz8KICAg
ICBmcmVlKHByb3BfbmFtZSk7CiAKICAgICByZXR1cm4gZmFpbDsKQEAgLTEwNCwxMyArMTA0LDEz
IEBAIHN0YXRpYyBib29sIGV3a19qc19wcm9wZXJ0eV9oYXMoTlBPYmplY3QqIG5wT2JqZWN0LCBO
UElkZW50aWZpZXIgbmFtZSkKIAogc3RhdGljIGJvb2wgZXdrX2pzX3Byb3BlcnR5X2dldChOUE9i
amVjdCogbnBPYmplY3QsIE5QSWRlbnRpZmllciBuYW1lLCBOUFZhcmlhbnQqIHJlc3VsdCkKIHsK
LSAgICBFd2tfSlNfT2JqZWN0KiBvYmogPSByZWludGVycHJldF9jYXN0PEV3a19KU19PYmplY3Qq
PihucE9iamVjdCk7CisgICAgRXdrX0pTX09iamVjdCogb2JqZWN0ID0gcmVpbnRlcnByZXRfY2Fz
dDxFd2tfSlNfT2JqZWN0Kj4obnBPYmplY3QpOwogICAgIEV3a19KU19WYXJpYW50KiB2YWx1ZTsK
ICAgICBFd2tfSlNfUHJvcGVydHkqIHByb3A7CiAgICAgYm9vbCBmYWlsID0gZmFsc2U7CiAKICAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwobnBPYmplY3QsIGZhbHNlKTsKLSAgICBF
SU5BX01BR0lDX0NIRUNLX09SX1JFVFVSTihvYmosIGZhbHNlKTsKKyAgICBFSU5BX01BR0lDX0NI
RUNLX09SX1JFVFVSTihvYmplY3QsIGZhbHNlKTsKIAogICAgIGlmICghX05QTl9JZGVudGlmaWVy
SXNTdHJpbmcobmFtZSkpIHsKICAgICAgICAgRVJSKCJpbnQgTlBJZGVudGlmaWVyIGlzIG5vdCBz
dXBwb3J0ZWQuIik7CkBAIC0xMjMsMTkgKzEyMywxOSBAQCBzdGF0aWMgYm9vbCBld2tfanNfcHJv
cGVydHlfZ2V0KE5QT2JqZWN0KiBucE9iamVjdCwgTlBJZGVudGlmaWVyIG5hbWUsIE5QVmFyaWFu
dAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgcHJvcCA9IHN0YXRpY19jYXN0
PEV3a19KU19Qcm9wZXJ0eSo+KGVpbmFfaGFzaF9maW5kKG9iai0+Y2xzLT5wcm9wZXJ0aWVzLCBu
YW1lKSk7CisgICAgcHJvcCA9IHN0YXRpY19jYXN0PEV3a19KU19Qcm9wZXJ0eSo+KGVpbmFfaGFz
aF9maW5kKG9iamVjdC0+Y2xzLT5wcm9wZXJ0aWVzLCBuYW1lKSk7CiAgICAgaWYgKHByb3AgJiYg
cHJvcC0+Z2V0KSB7IC8vIENsYXNzIGhhcyBwcm9wZXJ0eSBhbmQgcHJvcGVydHkgaGFzIGdldHRl
ci4KLSAgICAgICAgZmFpbCA9IHByb3AtPmdldChvYmosIHByb3AtPm5hbWUsIHZhbHVlKTsKKyAg
ICAgICAgZmFpbCA9IHByb3AtPmdldChvYmplY3QsIHByb3AtPm5hbWUsIHZhbHVlKTsKICAgICAg
ICAgaWYgKCFmYWlsKQogICAgICAgICAgICAgZmFpbCA9IGV3a19qc192YXJpYW50X3RvX25wdmFy
aWFudCh2YWx1ZSwgcmVzdWx0KTsKLSAgICB9IGVsc2UgaWYgKG9iai0+Y2xzLT5kZWZhdWx0X3By
b3AuZ2V0KSB7IC8vIERlZmF1bHQgZ2V0dGVyIGV4aXN0cy4KLSAgICAgICAgZmFpbCA9IG9iai0+
Y2xzLT5kZWZhdWx0X3Byb3AuZ2V0KG9iaiwgcHJvcC0+bmFtZSwgdmFsdWUpOworICAgIH0gZWxz
ZSBpZiAob2JqZWN0LT5jbHMtPmRlZmF1bHRfcHJvcC5nZXQpIHsgLy8gRGVmYXVsdCBnZXR0ZXIg
ZXhpc3RzLgorICAgICAgICBmYWlsID0gb2JqZWN0LT5jbHMtPmRlZmF1bHRfcHJvcC5nZXQob2Jq
ZWN0LCBwcm9wLT5uYW1lLCB2YWx1ZSk7CiAgICAgICAgIGlmICghZmFpbCkKICAgICAgICAgICAg
IGZhaWwgPSBld2tfanNfdmFyaWFudF90b19ucHZhcmlhbnQodmFsdWUsIHJlc3VsdCk7CiAgICAg
fSBlbHNlIHsgLy8gRmFsbGJhY2sgdG8gb2JqZWN0cyBoYXNoIG1hcC4KICAgICAgICAgY2hhciog
cHJvcF9uYW1lID0gX05QTl9VVEY4RnJvbUlkZW50aWZpZXIobmFtZSk7CiAgICAgICAgIGZyZWUo
dmFsdWUpOwotICAgICAgICB2YWx1ZSA9IHN0YXRpY19jYXN0PEV3a19KU19WYXJpYW50Kj4oZWlu
YV9oYXNoX2ZpbmQob2JqLT5wcm9wZXJ0aWVzLCBwcm9wX25hbWUpKTsKKyAgICAgICAgdmFsdWUg
PSBzdGF0aWNfY2FzdDxFd2tfSlNfVmFyaWFudCo+KGVpbmFfaGFzaF9maW5kKG9iamVjdC0+cHJv
cGVydGllcywgcHJvcF9uYW1lKSk7CiAgICAgICAgIGZyZWUocHJvcF9uYW1lKTsKICAgICAgICAg
aWYgKHZhbHVlKQogICAgICAgICAgICAgcmV0dXJuIGV3a19qc192YXJpYW50X3RvX25wdmFyaWFu
dCh2YWx1ZSwgcmVzdWx0KTsKQEAgLTE0NywxMyArMTQ3LDEzIEBAIHN0YXRpYyBib29sIGV3a19q
c19wcm9wZXJ0eV9nZXQoTlBPYmplY3QqIG5wT2JqZWN0LCBOUElkZW50aWZpZXIgbmFtZSwgTlBW
YXJpYW50CiAKIHN0YXRpYyBib29sIGV3a19qc19wcm9wZXJ0eV9zZXQoTlBPYmplY3QqIG5wT2Jq
ZWN0LCBOUElkZW50aWZpZXIgbmFtZSwgY29uc3QgTlBWYXJpYW50KiBucFZhbHVlKQogewotICAg
IEV3a19KU19PYmplY3QqIG9iaiA9IHJlaW50ZXJwcmV0X2Nhc3Q8RXdrX0pTX09iamVjdCo+KG5w
T2JqZWN0KTsKKyAgICBFd2tfSlNfT2JqZWN0KiBvYmplY3QgPSByZWludGVycHJldF9jYXN0PEV3
a19KU19PYmplY3QqPihucE9iamVjdCk7CiAgICAgRXdrX0pTX1ZhcmlhbnQqIHZhbHVlOwogICAg
IEV3a19KU19Qcm9wZXJ0eSogcHJvcDsKICAgICBib29sIGZhaWwgPSBmYWxzZTsKIAogICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChucE9iaiwgZmFsc2UpOwotICAgIEVJTkFfTUFH
SUNfQ0hFQ0tfT1JfUkVUVVJOKG9iaiwgZmFsc2UpOworICAgIEVJTkFfTUFHSUNfQ0hFQ0tfT1Jf
UkVUVVJOKG9iamVjdCwgZmFsc2UpOwogCiAgICAgaWYgKCFfTlBOX0lkZW50aWZpZXJJc1N0cmlu
ZyhuYW1lKSkgewogICAgICAgICBFUlIoImludCBOUElkZW50aWZpZXIgaXMgbm90IHN1cHBvcnRl
ZC4iKTsKQEAgLTE2OCwxMyArMTY4LDEzIEBAIHN0YXRpYyBib29sIGV3a19qc19wcm9wZXJ0eV9z
ZXQoTlBPYmplY3QqIG5wT2JqZWN0LCBOUElkZW50aWZpZXIgbmFtZSwgY29uc3QgTlBWCiAKICAg
ICBld2tfanNfbnB2YXJpYW50X3RvX3ZhcmlhbnQodmFsdWUsIG5wVmFsdWUpOwogICAgIGNoYXIq
IHByb3BfbmFtZSA9IF9OUE5fVVRGOEZyb21JZGVudGlmaWVyKG5hbWUpOwotICAgIHByb3AgPSBz
dGF0aWNfY2FzdDxFd2tfSlNfUHJvcGVydHkqPihlaW5hX2hhc2hfZmluZChvYmotPmNscy0+cHJv
cGVydGllcywgcHJvcF9uYW1lKSk7CisgICAgcHJvcCA9IHN0YXRpY19jYXN0PEV3a19KU19Qcm9w
ZXJ0eSo+KGVpbmFfaGFzaF9maW5kKG9iamVjdC0+Y2xzLT5wcm9wZXJ0aWVzLCBwcm9wX25hbWUp
KTsKICAgICBpZiAocHJvcCAmJiBwcm9wLT5zZXQpCi0gICAgICAgIGZhaWwgPSBwcm9wLT5zZXQo
b2JqLCBwcm9wLT5uYW1lLCB2YWx1ZSk7IC8vIENsYXNzIGhhcyBwcm9wZXJ0eSBhbmQgcHJvcGVy
dHkgaGFzIHNldHRlci4KLSAgICBlbHNlIGlmIChvYmotPmNscy0+ZGVmYXVsdF9wcm9wLnNldCkK
LSAgICAgICAgZmFpbCA9IG9iai0+Y2xzLT5kZWZhdWx0X3Byb3Auc2V0KG9iaiwgcHJvcF9uYW1l
LCB2YWx1ZSk7IC8vIERlZmF1bHQgZ2V0dGVyIGV4aXN0cy4KKyAgICAgICAgZmFpbCA9IHByb3At
PnNldChvYmplY3QsIHByb3AtPm5hbWUsIHZhbHVlKTsgLy8gQ2xhc3MgaGFzIHByb3BlcnR5IGFu
ZCBwcm9wZXJ0eSBoYXMgc2V0dGVyLgorICAgIGVsc2UgaWYgKG9iamVjdC0+Y2xzLT5kZWZhdWx0
X3Byb3Auc2V0KQorICAgICAgICBmYWlsID0gb2JqZWN0LT5jbHMtPmRlZmF1bHRfcHJvcC5zZXQo
b2JqZWN0LCBwcm9wX25hbWUsIHZhbHVlKTsgLy8gRGVmYXVsdCBnZXR0ZXIgZXhpc3RzLgogICAg
IGVsc2UgeyAvLyBGYWxsYmFjayB0byBvYmplY3RzIGhhc2ggbWFwLgotICAgICAgICB2b2lkKiBv
bGQgPSBlaW5hX2hhc2hfc2V0KG9iai0+cHJvcGVydGllcywgcHJvcF9uYW1lLCB2YWx1ZSk7Cisg
ICAgICAgIHZvaWQqIG9sZCA9IGVpbmFfaGFzaF9zZXQob2JqZWN0LT5wcm9wZXJ0aWVzLCBwcm9w
X25hbWUsIHZhbHVlKTsKICAgICAgICAgZnJlZShvbGQpOwogICAgICAgICBmYWlsID0gdHJ1ZTsK
ICAgICB9CkBAIC0xODUsMTIgKzE4NSwxMiBAQCBzdGF0aWMgYm9vbCBld2tfanNfcHJvcGVydHlf
c2V0KE5QT2JqZWN0KiBucE9iamVjdCwgTlBJZGVudGlmaWVyIG5hbWUsIGNvbnN0IE5QVgogCiBz
dGF0aWMgYm9vbCBld2tfanNfcHJvcGVydHlfcmVtb3ZlKE5QT2JqZWN0KiBucE9iamVjdCwgTlBJ
ZGVudGlmaWVyIG5hbWUpCiB7Ci0gICAgRXdrX0pTX09iamVjdCogb2JqID0gcmVpbnRlcnByZXRf
Y2FzdDxFd2tfSlNfT2JqZWN0Kj4obnBPYmplY3QpOworICAgIEV3a19KU19PYmplY3QqIG9iamVj
dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8RXdrX0pTX09iamVjdCo+KG5wT2JqZWN0KTsKICAgICBFd2tf
SlNfUHJvcGVydHkqIHByb3A7CiAgICAgYm9vbCBmYWlsID0gZmFsc2U7CiAKICAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwobnBPYmplY3QsIGZhbHNlKTsKLSAgICBFSU5BX01BR0lD
X0NIRUNLX09SX1JFVFVSTihvYmosIGZhbHNlKTsKKyAgICBFSU5BX01BR0lDX0NIRUNLX09SX1JF
VFVSTihvYmplY3QsIGZhbHNlKTsKIAogICAgIGlmICghX05QTl9JZGVudGlmaWVySXNTdHJpbmco
bmFtZSkpIHsKICAgICAgICAgRVJSKCJpbnQgTlBJZGVudGlmaWVyIGlzIG5vdCBzdXBwb3J0ZWQu
Iik7CkBAIC0xOTgsMTMgKzE5OCwxMyBAQCBzdGF0aWMgYm9vbCBld2tfanNfcHJvcGVydHlfcmVt
b3ZlKE5QT2JqZWN0KiBucE9iamVjdCwgTlBJZGVudGlmaWVyIG5hbWUpCiAgICAgfQogCiAgICAg
Y2hhciogcHJvcF9uYW1lID0gX05QTl9VVEY4RnJvbUlkZW50aWZpZXIobmFtZSk7Ci0gICAgcHJv
cCA9IHN0YXRpY19jYXN0PEV3a19KU19Qcm9wZXJ0eSo+KGVpbmFfaGFzaF9maW5kKG9iai0+Y2xz
LT5wcm9wZXJ0aWVzLCBwcm9wX25hbWUpKTsKKyAgICBwcm9wID0gc3RhdGljX2Nhc3Q8RXdrX0pT
X1Byb3BlcnR5Kj4oZWluYV9oYXNoX2ZpbmQob2JqZWN0LT5jbHMtPnByb3BlcnRpZXMsIHByb3Bf
bmFtZSkpOwogICAgIGlmIChwcm9wICYmIHByb3AtPmRlbCkKLSAgICAgICAgZmFpbCA9IHByb3At
PmRlbChvYmosIHByb3AtPm5hbWUpOyAvLyBDbGFzcyBoYXMgcHJvcGVydHkgYW5kIHByb3BlcnR5
IGhhcyBnZXR0ZXIuCi0gICAgZWxzZSBpZiAob2JqLT5jbHMtPmRlZmF1bHRfcHJvcC5kZWwpCi0g
ICAgICAgIGZhaWwgPSBvYmotPmNscy0+ZGVmYXVsdF9wcm9wLmRlbChvYmosIHByb3BfbmFtZSk7
CisgICAgICAgIGZhaWwgPSBwcm9wLT5kZWwob2JqZWN0LCBwcm9wLT5uYW1lKTsgLy8gQ2xhc3Mg
aGFzIHByb3BlcnR5IGFuZCBwcm9wZXJ0eSBoYXMgZ2V0dGVyLgorICAgIGVsc2UgaWYgKG9iamVj
dC0+Y2xzLT5kZWZhdWx0X3Byb3AuZGVsKQorICAgICAgICBmYWlsID0gb2JqZWN0LT5jbHMtPmRl
ZmF1bHRfcHJvcC5kZWwob2JqZWN0LCBwcm9wX25hbWUpOwogICAgIGVsc2UKLSAgICAgICAgZmFp
bCA9IGVpbmFfaGFzaF9kZWwob2JqLT5wcm9wZXJ0aWVzLCBwcm9wX25hbWUsIDApOworICAgICAg
ICBmYWlsID0gZWluYV9oYXNoX2RlbChvYmplY3QtPnByb3BlcnRpZXMsIHByb3BfbmFtZSwgMCk7
CiAKICAgICBmcmVlKHByb3BfbmFtZSk7CiAgICAgcmV0dXJuIGZhaWw7CkBAIC0yMTIsMjIgKzIx
MiwyMiBAQCBzdGF0aWMgYm9vbCBld2tfanNfcHJvcGVydHlfcmVtb3ZlKE5QT2JqZWN0KiBucE9i
amVjdCwgTlBJZGVudGlmaWVyIG5hbWUpCiAKIHN0YXRpYyBib29sIGV3a19qc19wcm9wZXJ0aWVz
X2VudW1lcmF0ZShOUE9iamVjdCogbnBPYmplY3QsIE5QSWRlbnRpZmllcioqIHZhbHVlLCB1aW50
MzJfdCogY291bnQpCiB7Ci0gICAgRXdrX0pTX09iamVjdCogb2JqID0gcmVpbnRlcnByZXRfY2Fz
dDxFd2tfSlNfT2JqZWN0Kj4obnBPYmplY3QpOworICAgIEV3a19KU19PYmplY3QqIG9iamVjdCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8RXdrX0pTX09iamVjdCo+KG5wT2JqZWN0KTsKICAgICBFaW5hX0l0
ZXJhdG9yKiBpdDsKICAgICBjaGFyKiBrZXk7CiAgICAgaW50IGkgPSAwOwogCiAgICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKG5wT2JqZWN0LCBmYWxzZSk7Ci0gICAgRUlOQV9NQUdJ
Q19DSEVDS19PUl9SRVRVUk4ob2JqLCBmYWxzZSk7CisgICAgRUlOQV9NQUdJQ19DSEVDS19PUl9S
RVRVUk4ob2JqZWN0LCBmYWxzZSk7CiAKLSAgICAqY291bnQgPSBlaW5hX2hhc2hfcG9wdWxhdGlv
bihvYmotPnByb3BlcnRpZXMpOworICAgICpjb3VudCA9IGVpbmFfaGFzaF9wb3B1bGF0aW9uKG9i
amVjdC0+cHJvcGVydGllcyk7CiAgICAgKnZhbHVlID0gc3RhdGljX2Nhc3Q8TlBJZGVudGlmaWVy
Kj4obWFsbG9jKHNpemVvZihOUElkZW50aWZpZXIpICogKmNvdW50KSk7CiAgICAgaWYgKCEqdmFs
dWUpIHsKICAgICAgICAgRVJSKCJDb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBOUElkZW50
aWZpZXIiKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGl0ID0gZWluYV9o
YXNoX2l0ZXJhdG9yX2tleV9uZXcob2JqLT5wcm9wZXJ0aWVzKTsKKyAgICBpdCA9IGVpbmFfaGFz
aF9pdGVyYXRvcl9rZXlfbmV3KG9iamVjdC0+cHJvcGVydGllcyk7CiAgICAgRUlOQV9JVEVSQVRP
Ul9GT1JFQUNIKGl0LCBrZXkpCiAgICAgICAgICgqdmFsdWUpW2krK10gPSBfTlBOX0dldFN0cmlu
Z0lkZW50aWZpZXIoa2V5KTsKIApAQCAtMjM3LDM0ICsyMzcsMzQgQEAgc3RhdGljIGJvb2wgZXdr
X2pzX3Byb3BlcnRpZXNfZW51bWVyYXRlKE5QT2JqZWN0KiBucE9iamVjdCwgTlBJZGVudGlmaWVy
KiogdmFsdWUKIAogc3RhdGljIGJvb2wgZXdrX2pzX21ldGhvZF9oYXMoTlBPYmplY3QqIG5wT2Jq
ZWN0LCBOUElkZW50aWZpZXIgbmFtZSkKIHsKLSAgICBFd2tfSlNfT2JqZWN0KiBvYmogPSByZWlu
dGVycHJldF9jYXN0PEV3a19KU19PYmplY3QqPihucE9iamVjdCk7CisgICAgRXdrX0pTX09iamVj
dCogb2JqZWN0ID0gcmVpbnRlcnByZXRfY2FzdDxFd2tfSlNfT2JqZWN0Kj4obnBPYmplY3QpOwog
CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKG5wT2JqZWN0LCBmYWxzZSk7Ci0g
ICAgRUlOQV9NQUdJQ19DSEVDS19PUl9SRVRVUk4ob2JqLCBmYWxzZSk7CisgICAgRUlOQV9NQUdJ
Q19DSEVDS19PUl9SRVRVUk4ob2JqZWN0LCBmYWxzZSk7CiAKICAgICBpZiAoIV9OUE5fSWRlbnRp
ZmllcklzU3RyaW5nKG5hbWUpKSB7CiAgICAgICAgIEVSUigiaW50IE5QSWRlbnRpZmllciBpcyBu
b3Qgc3VwcG9ydGVkLiIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIHJldHVy
biBlaW5hX2hhc2hfZmluZChvYmotPmNscy0+bWV0aG9kcywgbmFtZSk7IC8vIFJldHVybnMgcG9p
bnRlciBpZiBmb3VuZCh0cnVlKSwgMChmYWxzZSkgb3RoZXJ3aXNlLgorICAgIHJldHVybiBlaW5h
X2hhc2hfZmluZChvYmplY3QtPmNscy0+bWV0aG9kcywgbmFtZSk7IC8vIFJldHVybnMgcG9pbnRl
ciBpZiBmb3VuZCh0cnVlKSwgMChmYWxzZSkgb3RoZXJ3aXNlLgogfQogCiBzdGF0aWMgYm9vbCBl
d2tfanNfbWV0aG9kX2ludm9rZShOUE9iamVjdCogbnBPYmplY3QsIE5QSWRlbnRpZmllciBuYW1l
LCBjb25zdCBOUFZhcmlhbnQqIG5wQXJncywgdWludDMyX3QgbnBBcmdDb3VudCwgTlBWYXJpYW50
KiByZXN1bHQpCiB7Ci0gICAgRXdrX0pTX09iamVjdCogb2JqID0gcmVpbnRlcnByZXRfY2FzdDxF
d2tfSlNfT2JqZWN0Kj4obnBPYmplY3QpOworICAgIEV3a19KU19PYmplY3QqIG9iamVjdCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8RXdrX0pTX09iamVjdCo+KG5wT2JqZWN0KTsKICAgICBFd2tfSlNfTWV0
aG9kKiBtZXRob2Q7CiAgICAgRXdrX0pTX1ZhcmlhbnQqIGFyZ3M7CiAgICAgRXdrX0pTX1Zhcmlh
bnQqIHJldF92YWw7CiAKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwobnBPYmpl
Y3QsIGZhbHNlKTsKLSAgICBFSU5BX01BR0lDX0NIRUNLX09SX1JFVFVSTihvYmosIGZhbHNlKTsK
KyAgICBFSU5BX01BR0lDX0NIRUNLX09SX1JFVFVSTihvYmplY3QsIGZhbHNlKTsKIAogICAgIGlm
ICghX05QTl9JZGVudGlmaWVySXNTdHJpbmcobmFtZSkpIHsKICAgICAgICAgRVJSKCJpbnQgTlBJ
ZGVudGlmaWVyIGlzIG5vdCBzdXBwb3J0ZWQuIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9CiAKLSAgICBtZXRob2QgPSBzdGF0aWNfY2FzdDxFd2tfSlNfTWV0aG9kKj4oZWluYV9oYXNo
X2ZpbmQob2JqLT5jbHMtPm1ldGhvZHMsIG5hbWUpKTsKKyAgICBtZXRob2QgPSBzdGF0aWNfY2Fz
dDxFd2tfSlNfTWV0aG9kKj4oZWluYV9oYXNoX2ZpbmQob2JqZWN0LT5jbHMtPm1ldGhvZHMsIG5h
bWUpKTsKICAgICBpZiAoIW1ldGhvZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0yNzYs
NyArMjc2LDcgQEAgc3RhdGljIGJvb2wgZXdrX2pzX21ldGhvZF9pbnZva2UoTlBPYmplY3QqIG5w
T2JqZWN0LCBOUElkZW50aWZpZXIgbmFtZSwgY29uc3QgTlAKIAogICAgIGZvciAodWludDMyX3Qg
aSA9IDA7IGkgPCBucEFyZ0NvdW50OyBpKyspCiAgICAgICAgIGV3a19qc19ucHZhcmlhbnRfdG9f
dmFyaWFudCgmYXJnc1tpXSwgJm5wQXJnc1tpXSk7Ci0gICAgcmV0X3ZhbCA9IG1ldGhvZC0+aW52
b2tlKG9iaiwgYXJncywgbnBBcmdDb3VudCk7CisgICAgcmV0X3ZhbCA9IG1ldGhvZC0+aW52b2tl
KG9iamVjdCwgYXJncywgbnBBcmdDb3VudCk7CiAgICAgZXdrX2pzX3ZhcmlhbnRfdG9fbnB2YXJp
YW50KHJldF92YWwsIHJlc3VsdCk7CiAKICAgICBld2tfanNfdmFyaWFudF9mcmVlKHJldF92YWwp
OwpAQCAtMzkzLDcgKzM5Myw3IEBAIHN0YXRpYyBFd2tfSlNfT2JqZWN0KiBld2tfanNfbnBvYmpl
Y3RfdG9fb2JqZWN0KE5QT2JqZWN0KiBucE9iamVjdCkKICAgICBOUElkZW50aWZpZXIqIHZhbHVl
czsKICAgICB1aW50MzJfdCBucF9wcm9wc19jb3VudDsKICAgICBFd2tfSlNfQ2xhc3MqIGNsczsK
LSAgICBFd2tfSlNfT2JqZWN0KiBvYmo7CisgICAgRXdrX0pTX09iamVjdCogb2JqZWN0OwogICAg
IEVpbmFfSXRlcmF0b3IqIGl0OwogICAgIEV3a19KU19Qcm9wZXJ0eSogcHJvcDsKICAgICBKYXZh
U2NyaXB0T2JqZWN0KiBqc287CkBAIC00MzYsNDIgKzQzNiw0MiBAQCBzdGF0aWMgRXdrX0pTX09i
amVjdCogZXdrX2pzX25wb2JqZWN0X3RvX29iamVjdChOUE9iamVjdCogbnBPYmplY3QpCiAgICAg
fQogCiAgICAgLy8gQ2FuJ3QgdXNlIGV3a19qc19vYmplY3RfbmV3KGNscykgYmVjYXVzZSBpdCBl
eHBlY3RzIGNscy0+bWV0YSB0byBleGlzdC4KLSAgICBvYmogPSBzdGF0aWNfY2FzdDxFd2tfSlNf
T2JqZWN0Kj4obWFsbG9jKHNpemVvZihFd2tfSlNfT2JqZWN0KSkpOwotICAgIGlmICghb2JqKSB7
CisgICAgb2JqZWN0ID0gc3RhdGljX2Nhc3Q8RXdrX0pTX09iamVjdCo+KG1hbGxvYyhzaXplb2Yo
RXdrX0pTX09iamVjdCkpKTsKKyAgICBpZiAoIW9iamVjdCkgewogICAgICAgICBFUlIoIkNvdWxk
IG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGV3a19qc19vYmplY3QiKTsKICAgICAgICAgZ290byBl
cnJvcjsKICAgICB9CiAKICAgICBmcmVlKHZhbHVlcyk7Ci0gICAgRUlOQV9NQUdJQ19TRVQob2Jq
LCBFV0tfSlNfT0JKRUNUX01BR0lDKTsKLSAgICBvYmotPm5hbWUgPSAwOwotICAgIG9iai0+Y2xz
ID0gY2xzOwotICAgIG9iai0+dmlldyA9IDA7CisgICAgRUlOQV9NQUdJQ19TRVQob2JqZWN0LCBF
V0tfSlNfT0JKRUNUX01BR0lDKTsKKyAgICBvYmplY3QtPm5hbWUgPSAwOworICAgIG9iamVjdC0+
Y2xzID0gY2xzOworICAgIG9iamVjdC0+dmlldyA9IDA7CiAKICAgICBqc28gPSByZWludGVycHJl
dF9jYXN0PEphdmFTY3JpcHRPYmplY3QqPihucE9iamVjdCk7CiAgICAgaWYgKCFzdHJjbXAoIkFy
cmF5IiwganNvLT5pbXAtPmNsYXNzTmFtZSgpLmFzY2lpKCkuZGF0YSgpKSkKLSAgICAgICAgb2Jq
LT50eXBlID0gRVdLX0pTX09CSkVDVF9BUlJBWTsKKyAgICAgICAgb2JqZWN0LT50eXBlID0gRVdL
X0pTX09CSkVDVF9BUlJBWTsKICAgICBlbHNlIGlmICghc3RyY21wKCJGdW5jdGlvbiIsIGpzby0+
aW1wLT5jbGFzc05hbWUoKS5hc2NpaSgpLmRhdGEoKSkpCi0gICAgICAgIG9iai0+dHlwZSA9IEVX
S19KU19PQkpFQ1RfRlVOQ1RJT047CisgICAgICAgIG9iamVjdC0+dHlwZSA9IEVXS19KU19PQkpF
Q1RfRlVOQ1RJT047CiAgICAgZWxzZQotICAgICAgICBvYmotPnR5cGUgPSBFV0tfSlNfT0JKRUNU
X09CSkVDVDsKKyAgICAgICAgb2JqZWN0LT50eXBlID0gRVdLX0pTX09CSkVDVF9PQkpFQ1Q7CiAK
ICAgICBpZiAoZWluYV9oYXNoX3BvcHVsYXRpb24oY2xzLT5wcm9wZXJ0aWVzKSA8IDI1KQotICAg
ICAgICBvYmotPnByb3BlcnRpZXMgPSBlaW5hX2hhc2hfc3RyaW5nX3NtYWxsX25ldygwKTsKKyAg
ICAgICAgb2JqZWN0LT5wcm9wZXJ0aWVzID0gZWluYV9oYXNoX3N0cmluZ19zbWFsbF9uZXcoMCk7
CiAgICAgZWxzZQotICAgICAgICBvYmotPnByb3BlcnRpZXMgPSBlaW5hX2hhc2hfc3RyaW5nX3N1
cGVyZmFzdF9uZXcoMCk7CisgICAgICAgIG9iamVjdC0+cHJvcGVydGllcyA9IGVpbmFfaGFzaF9z
dHJpbmdfc3VwZXJmYXN0X25ldygwKTsKIAogICAgIGl0ID0gZWluYV9oYXNoX2l0ZXJhdG9yX2Rh
dGFfbmV3KGNscy0+cHJvcGVydGllcyk7CiAgICAgRUlOQV9JVEVSQVRPUl9GT1JFQUNIKGl0LCBw
cm9wKSB7CiAgICAgICAgIGNvbnN0IGNoYXIqIGtleSA9IHByb3AtPm5hbWU7CiAgICAgICAgIEV3
a19KU19WYXJpYW50KiB2YWx1ZSA9ICZwcm9wLT52YWx1ZTsKLSAgICAgICAgZWluYV9oYXNoX2Fk
ZChvYmotPnByb3BlcnRpZXMsIGtleSwgdmFsdWUpOworICAgICAgICBlaW5hX2hhc2hfYWRkKG9i
amVjdC0+cHJvcGVydGllcywga2V5LCB2YWx1ZSk7CiAgICAgfQogCiAgICAgZWluYV9pdGVyYXRv
cl9mcmVlKGl0KTsKLSAgICBvYmotPmJhc2UgPSAqcmVpbnRlcnByZXRfY2FzdDxKYXZhU2NyaXB0
T2JqZWN0Kj4obnBPYmplY3QpOworICAgIG9iamVjdC0+YmFzZSA9ICpyZWludGVycHJldF9jYXN0
PEphdmFTY3JpcHRPYmplY3QqPihucE9iamVjdCk7CiAKLSAgICByZXR1cm4gb2JqOworICAgIHJl
dHVybiBvYmplY3Q7CiAKIGVycm9yOgogICAgIGV3a19qc19jbGFzc19mcmVlKGNscyk7CkBAIC01
MjcsMzcgKzUyNywzNyBAQCBzdGF0aWMgRWluYV9Cb29sIGV3a19qc19ucHZhcmlhbnRfdG9fdmFy
aWFudChFd2tfSlNfVmFyaWFudCogZGF0YSwgY29uc3QgTlBWYXJpYQogCiBFd2tfSlNfT2JqZWN0
KiBld2tfanNfb2JqZWN0X25ldyhjb25zdCBFd2tfSlNfQ2xhc3NfTWV0YSoganNNZXRhQ2xhc3Mp
CiB7Ci0gICAgRXdrX0pTX09iamVjdCogb2JqOworICAgIEV3a19KU19PYmplY3QqIG9iamVjdDsK
IAogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChtZXRhX2NscywgMCk7CiAKLSAg
ICBvYmogPSBzdGF0aWNfY2FzdDxFd2tfSlNfT2JqZWN0Kj4obWFsbG9jKHNpemVvZihFd2tfSlNf
T2JqZWN0KSkpOwotICAgIGlmICghb2JqKSB7CisgICAgb2JqZWN0ID0gc3RhdGljX2Nhc3Q8RXdr
X0pTX09iamVjdCo+KG1hbGxvYyhzaXplb2YoRXdrX0pTX09iamVjdCkpKTsKKyAgICBpZiAoIW9i
amVjdCkgewogICAgICAgICBFUlIoIkNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGV3a19q
c19vYmplY3QiKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgRUlOQV9NQUdJQ19T
RVQob2JqLCBFV0tfSlNfT0JKRUNUX01BR0lDKTsKLSAgICBvYmotPmNscyA9IGV3a19qc19jbGFz
c19uZXcoanNNZXRhQ2xhc3MpOwotICAgIG9iai0+dmlldyA9IDA7Ci0gICAgb2JqLT5uYW1lID0g
MDsKLSAgICBvYmotPnR5cGUgPSBFV0tfSlNfT0JKRUNUX09CSkVDVDsKKyAgICBFSU5BX01BR0lD
X1NFVChvYmplY3QsIEVXS19KU19PQkpFQ1RfTUFHSUMpOworICAgIG9iamVjdC0+Y2xzID0gZXdr
X2pzX2NsYXNzX25ldyhqc01ldGFDbGFzcyk7CisgICAgb2JqZWN0LT52aWV3ID0gMDsKKyAgICBv
YmplY3QtPm5hbWUgPSAwOworICAgIG9iamVjdC0+dHlwZSA9IEVXS19KU19PQkpFQ1RfT0JKRUNU
OwogCi0gICAgaWYgKGVpbmFfaGFzaF9wb3B1bGF0aW9uKG9iai0+Y2xzLT5wcm9wZXJ0aWVzKSA8
IDI1KQotICAgICAgICBvYmotPnByb3BlcnRpZXMgPSBlaW5hX2hhc2hfc3RyaW5nX3NtYWxsX25l
dyhyZWludGVycHJldF9jYXN0PEVpbmFfRnJlZV9DYj4oZXdrX2pzX3ZhcmlhbnRfZnJlZSkpOwor
ICAgIGlmIChlaW5hX2hhc2hfcG9wdWxhdGlvbihvYmplY3QtPmNscy0+cHJvcGVydGllcykgPCAy
NSkKKyAgICAgICAgb2JqZWN0LT5wcm9wZXJ0aWVzID0gZWluYV9oYXNoX3N0cmluZ19zbWFsbF9u
ZXcocmVpbnRlcnByZXRfY2FzdDxFaW5hX0ZyZWVfQ2I+KGV3a19qc192YXJpYW50X2ZyZWUpKTsK
ICAgICBlbHNlCi0gICAgICAgIG9iai0+cHJvcGVydGllcyA9IGVpbmFfaGFzaF9zdHJpbmdfc3Vw
ZXJmYXN0X25ldyhyZWludGVycHJldF9jYXN0PEVpbmFfRnJlZV9DYj4oZXdrX2pzX3ZhcmlhbnRf
ZnJlZSkpOworICAgICAgICBvYmplY3QtPnByb3BlcnRpZXMgPSBlaW5hX2hhc2hfc3RyaW5nX3N1
cGVyZmFzdF9uZXcocmVpbnRlcnByZXRfY2FzdDxFaW5hX0ZyZWVfQ2I+KGV3a19qc192YXJpYW50
X2ZyZWUpKTsKIAotICAgIGZvciAoaW50IGkgPSAwOyBvYmotPmNscy0+bWV0YS0+cHJvcGVydGll
cyAmJiBvYmotPmNscy0+bWV0YS0+cHJvcGVydGllc1tpXS5uYW1lOyBpKyspIHsKLSAgICAgICAg
RXdrX0pTX1Byb3BlcnR5IHByb3AgPSBvYmotPmNscy0+bWV0YS0+cHJvcGVydGllc1tpXTsKLSAg
ICAgICAgY29uc3QgY2hhcioga2V5ID0gb2JqLT5jbHMtPm1ldGEtPnByb3BlcnRpZXNbaV0ubmFt
ZTsKKyAgICBmb3IgKGludCBpID0gMDsgb2JqZWN0LT5jbHMtPm1ldGEtPnByb3BlcnRpZXMgJiYg
b2JqZWN0LT5jbHMtPm1ldGEtPnByb3BlcnRpZXNbaV0ubmFtZTsgaSsrKSB7CisgICAgICAgIEV3
a19KU19Qcm9wZXJ0eSBwcm9wID0gb2JqZWN0LT5jbHMtPm1ldGEtPnByb3BlcnRpZXNbaV07Cisg
ICAgICAgIGNvbnN0IGNoYXIqIGtleSA9IG9iamVjdC0+Y2xzLT5tZXRhLT5wcm9wZXJ0aWVzW2ld
Lm5hbWU7CiAgICAgICAgIEV3a19KU19WYXJpYW50KiB2YWx1ZSA9IHN0YXRpY19jYXN0PEV3a19K
U19WYXJpYW50Kj4obWFsbG9jKHNpemVvZihFd2tfSlNfVmFyaWFudCkpKTsKICAgICAgICAgaWYg
KCF2YWx1ZSkgewogICAgICAgICAgICAgRVJSKCJDb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZv
ciBld2tfanNfdmFyaWFudCIpOwogICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgfQog
ICAgICAgICBpZiAocHJvcC5nZXQpCi0gICAgICAgICAgICBwcm9wLmdldChvYmosIGtleSwgdmFs
dWUpOworICAgICAgICAgICAgcHJvcC5nZXQob2JqZWN0LCBrZXksIHZhbHVlKTsKICAgICAgICAg
ZWxzZSB7CiAgICAgICAgICAgICB2YWx1ZS0+dHlwZSA9IHByb3AudmFsdWUudHlwZTsKICAgICAg
ICAgICAgIHN3aXRjaCAodmFsdWUtPnR5cGUpIHsKQEAgLTU4MiwxNSArNTgyLDE1IEBAIEV3a19K
U19PYmplY3QqIGV3a19qc19vYmplY3RfbmV3KGNvbnN0IEV3a19KU19DbGFzc19NZXRhKiBqc01l
dGFDbGFzcykKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQotICAgICAgICBlaW5hX2hhc2hfYWRkKG9iai0+cHJvcGVydGllcywga2V5LCB2YWx1ZSk7Cisg
ICAgICAgIGVpbmFfaGFzaF9hZGQob2JqZWN0LT5wcm9wZXJ0aWVzLCBrZXksIHZhbHVlKTsKICAg
ICB9CiAKLSAgICBvYmotPmJhc2Uub2JqZWN0LnJlZmVyZW5jZUNvdW50ID0gMTsKLSAgICBvYmot
PmJhc2Uub2JqZWN0Ll9jbGFzcyA9ICZFV0tfTlBDTEFTUzsKLSAgICByZXR1cm4gb2JqOworICAg
IG9iamVjdC0+YmFzZS5vYmplY3QucmVmZXJlbmNlQ291bnQgPSAxOworICAgIG9iamVjdC0+YmFz
ZS5vYmplY3QuX2NsYXNzID0gJkVXS19OUENMQVNTOworICAgIHJldHVybiBvYmplY3Q7CiAKIGVy
cm9yOgotICAgIGV3a19qc19vYmplY3RfZnJlZShvYmopOworICAgIGV3a19qc19vYmplY3RfZnJl
ZShvYmplY3QpOwogICAgIHJldHVybiAwOwogfQogCkBAIC02NjIsNyArNjYyLDcgQEAgRXdrX0pT
X09iamVjdF9UeXBlIGV3a19qc19vYmplY3RfdHlwZV9nZXQoRXdrX0pTX09iamVjdCoganNPYmpl
Y3QpCiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGpzT2JqZWN0LCBFV0tfSlNf
T0JKRUNUX09CSkVDVCk7CiAgICAgRUlOQV9NQUdJQ19DSEVDS19PUl9SRVRVUk4oanNPb2JqZWN0
LCBFV0tfSlNfT0JKRUNUX09CSkVDVCk7CiAKLSAgICByZXR1cm4gb2JqLT50eXBlOworICAgIHJl
dHVybiBvYmplY3QtPnR5cGU7CiB9CiAKIHZvaWQgZXdrX2pzX29iamVjdF90eXBlX3NldChFd2tf
SlNfT2JqZWN0KiBqc09iamVjdCwgRXdrX0pTX09iamVjdF9UeXBlIHR5cGUpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX21haW4uY3BwIGIvU291cmNlL1dlYktpdC9lZmwv
ZXdrL2V3a19tYWluLmNwcAppbmRleCBlYjAzMjMzMjRiYWU4MWZlMTI4ZDY4YjgxN2E5ZWJhNjhm
MWY0YTZiLi5jNTJjMDJiMDlmOTE1MzZhMzIyODE4ODZkZWIzZmJiMzViZTAzZWIwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX21haW4uY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvZWZsL2V3ay9ld2tfbWFpbi5jcHAKQEAgLTU3LDcgKzU3LDcgQEAKICNpbmNsdWRlIDxsaWJz
b3VwL3NvdXAuaD4KICNlbmRpZgogCi1zdGF0aWMgaW50IF9ld2tfaW5pdF9jb3VudCA9IDA7Citz
dGF0aWMgaW50IF9ld2tJbml0Q291bnQgPSAwOwogCiAvKioKICAqIFx2YXIgICAgIF9ld2tfbG9n
X2RvbQpAQCAtNjksOCArNjksOCBAQCBzdGF0aWMgRWluYV9Cb29sIF9ld2tfaW5pdF9ib2R5KHZv
aWQpOwogCiBpbnQgZXdrX2luaXQodm9pZCkKIHsKLSAgICBpZiAoX2V3a19pbml0X2NvdW50KQot
ICAgICAgICByZXR1cm4gKytfZXdrX2luaXRfY291bnQ7CisgICAgaWYgKF9ld2tJbml0Q291bnQp
CisgICAgICAgIHJldHVybiArK19ld2tJbml0Q291bnQ7CiAKICAgICBpZiAoIWVpbmFfaW5pdCgp
KQogICAgICAgICBnb3RvIGVycm9yX2VpbmE7CkBAIC0xMDYsNyArMTA2LDcgQEAgaW50IGV3a19p
bml0KHZvaWQpCiAgICAgICAgIGdvdG8gZXJyb3JfZWRqZTsKICAgICB9CiAKLSAgICByZXR1cm4g
KytfZXdrX2luaXRfY291bnQ7CisgICAgcmV0dXJuICsrX2V3a0luaXRDb3VudDsKIAogZXJyb3Jf
ZWRqZToKICAgICBlY29yZV9ldmFzX3NodXRkb3duKCk7CkBAIC0xMjUsOSArMTI1LDkgQEAgZXJy
b3JfZWluYToKIAogaW50IGV3a19zaHV0ZG93bih2b2lkKQogewotICAgIF9ld2tfaW5pdF9jb3Vu
dC0tOwotICAgIGlmIChfZXdrX2luaXRfY291bnQpCi0gICAgICAgIHJldHVybiBfZXdrX2luaXRf
Y291bnQ7CisgICAgX2V3a0luaXRDb3VudC0tOworICAgIGlmIChfZXdrSW5pdENvdW50KQorICAg
ICAgICByZXR1cm4gX2V3a0luaXRDb3VudDsKIAogICAgIGVjb3JlX2V2YXNfc2h1dGRvd24oKTsK
ICAgICBlY29yZV9zaHV0ZG93bigpOwpAQCAtMTc5LDEwICsxNzksMTAgQEAgRWluYV9Cb29sIF9l
d2tfaW5pdF9ib2R5KHZvaWQpCiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwogICAgIH0KIAot
ICAgIFdURjo6U3RyaW5nIHdrZGlyID0gaG9tZSArICIvLndlYmtpdCI7Ci0gICAgaWYgKFdlYkNv
cmU6Om1ha2VBbGxEaXJlY3Rvcmllcyh3a2RpcikpIHsKLSAgICAgICAgZXdrX3NldHRpbmdzX3dl
Yl9kYXRhYmFzZV9wYXRoX3NldCh3a2Rpci51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgZXdrX3Nl
dHRpbmdzX2NhY2hlX2RpcmVjdG9yeV9wYXRoX3NldCh3a2Rpci51dGY4KCkuZGF0YSgpKTsKKyAg
ICBXVEY6OlN0cmluZyB3ZWJraXREaXJlY3RvcnkgPSBob21lICsgIi8ud2Via2l0IjsKKyAgICBp
ZiAoV2ViQ29yZTo6bWFrZUFsbERpcmVjdG9yaWVzKHdlYmtpdERpcmVjdG9yeSkpIHsKKyAgICAg
ICAgZXdrX3NldHRpbmdzX3dlYl9kYXRhYmFzZV9wYXRoX3NldCh3ZWJraXREaXJlY3RvcnkudXRm
OCgpLmRhdGEoKSk7CisgICAgICAgIGV3a19zZXR0aW5nc19jYWNoZV9kaXJlY3RvcnlfcGF0aF9z
ZXQod2Via2l0RGlyZWN0b3J5LnV0ZjgoKS5kYXRhKCkpOwogICAgIH0KIAogICAgIC8vIFRPRE86
IHRoaXMgc2hvdWxkIG1vdmUgdG8gV2ViQ29yZSwgYWxyZWFkeSByZXBvcnRlZCB0byB3ZWJraXQt
Z3RrIGZvbGtzOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19zZXR0aW5n
cy5jcHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3NldHRpbmdzLmNwcAppbmRleCBmMGJh
NmViY2IyZjdlNWRjMTExZmVjNDViNWY2Y2NkNTAzOTgzZWE2Li42NGYxNGY4NTRjM2Q3MGEzYmRh
ODBiYjE2NGM4NmNkMTFjZTZmMGUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2sv
ZXdrX3NldHRpbmdzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3NldHRpbmdz
LmNwcApAQCAtNTYsMjYgKzU2LDI2IEBAIHN0YXRpYyB1aW50NjRfdCBfZXdrX2RlZmF1bHRfd2Vi
X2RhdGFiYXNlX3F1b3RhID0gMSAqIDEwMjQgKiAxMDI0OwogCiBzdGF0aWMgV1RGOjpTdHJpbmcg
X2V3a19zZXR0aW5nc193ZWJraXRfcGxhdGZvcm1fZ2V0KCkKIHsKLSAgICBXVEY6OlN0cmluZyB1
YV9wbGF0Zm9ybTsKKyAgICBXVEY6OlN0cmluZyB1YVBsYXRmb3JtOwogI2lmIFBMQVRGT1JNKFgx
MSkKLSAgICB1YV9wbGF0Zm9ybSA9ICJYMTEiOworICAgIHVhUGxhdGZvcm0gPSAiWDExIjsKICNl
bHNlCi0gICAgdWFfcGxhdGZvcm0gPSAiVW5rbm93biI7CisgICAgdWFQbGF0Zm9ybSA9ICJVbmtu
b3duIjsKICNlbmRpZgotICAgIHJldHVybiB1YV9wbGF0Zm9ybTsKKyAgICByZXR1cm4gdWFQbGF0
Zm9ybTsKIH0KIAogc3RhdGljIFdURjo6U3RyaW5nIF9ld2tfc2V0dGluZ3Nfd2Via2l0X29zX3Zl
cnNpb25fZ2V0KCkKIHsKLSAgICBXVEY6OlN0cmluZyB1YV9vc192ZXJzaW9uOworICAgIFdURjo6
U3RyaW5nIHVhT3NWZXJzaW9uOwogICAgIHN0cnVjdCB1dHNuYW1lIG5hbWU7CiAKICAgICBpZiAo
dW5hbWUoJm5hbWUpICE9IC0xKQotICAgICAgICB1YV9vc192ZXJzaW9uID0gbWFrZVN0cmluZyhu
YW1lLnN5c25hbWUsICcgJywgbmFtZS5tYWNoaW5lKTsKKyAgICAgICAgdWFPc1ZlcnNpb24gPSBt
YWtlU3RyaW5nKG5hbWUuc3lzbmFtZSwgJyAnLCBuYW1lLm1hY2hpbmUpOwogICAgIGVsc2UKLSAg
ICAgICAgdWFfb3NfdmVyc2lvbiA9ICJVbmtub3duIjsKKyAgICAgICAgdWFPc1ZlcnNpb24gPSAi
VW5rbm93biI7CiAKLSAgICByZXR1cm4gdWFfb3NfdmVyc2lvbjsKKyAgICByZXR1cm4gdWFPc1Zl
cnNpb247CiB9CiAKIHVpbnQ2NF90IGV3a19zZXR0aW5nc193ZWJfZGF0YWJhc2VfZGVmYXVsdF9x
dW90YV9nZXQoKQpAQCAtMjQ1LDEwICsyNDUsMTAgQEAgdm9pZCBld2tfc2V0dGluZ3NfcmVwYWlu
dF90aHJvdHRsaW5nX3NldChkb3VibGUgZGVmZXJyZWRSZXBhaW50RGVsYXksIGRvdWJsZSBpbmkK
ICAqLwogY29uc3QgY2hhciogZXdrX3NldHRpbmdzX2RlZmF1bHRfdXNlcl9hZ2VudF9nZXQodm9p
ZCkKIHsKLSAgICBXVEY6OlN0cmluZyB1YV92ZXJzaW9uID0gbWFrZVN0cmluZyhTdHJpbmc6Om51
bWJlcihXRUJLSVRfVVNFUl9BR0VOVF9NQUpPUl9WRVJTSU9OKSwgJy4nLCBTdHJpbmc6Om51bWJl
cihXRUJLSVRfVVNFUl9BR0VOVF9NSU5PUl9WRVJTSU9OKSwgJysnKTsKLSAgICBXVEY6OlN0cmlu
ZyBzdGF0aWNfdWEgPSBtYWtlU3RyaW5nKCJNb3ppbGxhLzUuMCAoIiwgX2V3a19zZXR0aW5nc193
ZWJraXRfcGxhdGZvcm1fZ2V0KCksICI7ICIsIF9ld2tfc2V0dGluZ3Nfd2Via2l0X29zX3ZlcnNp
b25fZ2V0KCksICIpIEFwcGxlV2ViS2l0LyIsIHVhX3ZlcnNpb24pICsgbWFrZVN0cmluZygiIChL
SFRNTCwgbGlrZSBHZWNrbykgVmVyc2lvbi81LjAgU2FmYXJpLyIsIHVhX3ZlcnNpb24pOworICAg
IFdURjo6U3RyaW5nIHVhVmVyc2lvbiA9IG1ha2VTdHJpbmcoU3RyaW5nOjpudW1iZXIoV0VCS0lU
X1VTRVJfQUdFTlRfTUFKT1JfVkVSU0lPTiksICcuJywgU3RyaW5nOjpudW1iZXIoV0VCS0lUX1VT
RVJfQUdFTlRfTUlOT1JfVkVSU0lPTiksICcrJyk7CisgICAgV1RGOjpTdHJpbmcgc3RhdGljVWEg
PSBtYWtlU3RyaW5nKCJNb3ppbGxhLzUuMCAoIiwgX2V3a19zZXR0aW5nc193ZWJraXRfcGxhdGZv
cm1fZ2V0KCksICI7ICIsIF9ld2tfc2V0dGluZ3Nfd2Via2l0X29zX3ZlcnNpb25fZ2V0KCksICIp
IEFwcGxlV2ViS2l0LyIsIHVhVmVyc2lvbikgKyBtYWtlU3RyaW5nKCIgKEtIVE1MLCBsaWtlIEdl
Y2tvKSBWZXJzaW9uLzUuMCBTYWZhcmkvIiwgdWFWZXJzaW9uKTsKIAotICAgIHJldHVybiBlaW5h
X3N0cmluZ3NoYXJlX2FkZChzdGF0aWNfdWEudXRmOCgpLmRhdGEoKSk7CisgICAgcmV0dXJuIGVp
bmFfc3RyaW5nc2hhcmVfYWRkKHN0YXRpY1VhLnV0ZjgoKS5kYXRhKCkpOwogfQogCiBFaW5hX0Jv
b2wgZXdrX3NldHRpbmdzX2NhY2hlX2RpcmVjdG9yeV9wYXRoX3NldChjb25zdCBjaGFyKiBwYXRo
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a190aWxlZF9iYWNraW5nX3N0
b3JlLmNwcCBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfYmFja2luZ19zdG9yZS5j
cHAKaW5kZXggNzk0YTkwYzU3NDZmNjBlNTIzYjZkZTVlMjUyYmJjYjA1MWIwNzU2NC4uMjA0ZWFk
ZjA2Mjk5MDcyZTkzODFiMTYxMzgyMDM3MTFhZDU5ODMzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9lZmwvZXdrL2V3a190aWxlZF9iYWNraW5nX3N0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2VmbC9ld2svZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmUuY3BwCkBAIC01NSwxNCArNTUsMTQg
QEAgc3RydWN0IF9Fd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtIHsKIAogc3RydWN0IF9Fd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QgewogICAgIEVJTkFfSU5MSVNU
OwotICAgIHVuc2lnbmVkIGxvbmcgY29sLCByb3c7CisgICAgdW5zaWduZWQgbG9uZyBjb2x1bW4s
IHJvdzsKICAgICBmbG9hdCB6b29tOwogfTsKIAogc3RydWN0IF9Fd2tfVGlsZWRfQmFja2luZ19T
dG9yZV9EYXRhIHsKICAgICBFdmFzX09iamVjdF9TbWFydF9DbGlwcGVkX0RhdGEgYmFzZTsKICAg
ICBFdmFzX09iamVjdCogc2VsZjsKLSAgICBFdmFzX09iamVjdCogY29udGVudHNfY2xpcHBlcjsK
KyAgICBFdmFzX09iamVjdCogY29udGVudHNDbGlwcGVyOwogICAgIHN0cnVjdCB7CiAgICAgICAg
IEVpbmFfSW5saXN0KiogaXRlbXM7CiAgICAgICAgIEV2YXNfQ29vcmQgeCwgeSwgd2lkdGgsIGhl
aWdodDsKQEAgLTcwLDQyICs3MCw0MiBAQCBzdHJ1Y3QgX0V3a19UaWxlZF9CYWNraW5nX1N0b3Jl
X0RhdGEgewogICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgRXZhc19Db29yZCB3aWR0aCwg
aGVpZ2h0OwogICAgICAgICAgICAgZmxvYXQgem9vbTsKLSAgICAgICAgICAgIEVpbmFfQm9vbCB6
b29tX3dlYWtfc21vb3RoX3NjYWxlIDogMTsKKyAgICAgICAgICAgIEVpbmFfQm9vbCB6b29tV2Vh
a1Ntb290aFNjYWxlIDogMTsKICAgICAgICAgfSB0aWxlOwogICAgICAgICBzdHJ1Y3QgewogICAg
ICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAgICBFdmFzX0Nvb3JkIHgsIHk7Ci0gICAg
ICAgICAgICB9IGN1ciwgb2xkLCBiYXNlLCB6b29tX2NlbnRlcjsKKyAgICAgICAgICAgIH0gY3Vy
LCBvbGQsIGJhc2UsIHpvb21DZW50ZXI7CiAgICAgICAgIH0gb2Zmc2V0OwogICAgIH0gdmlldzsK
LSAgICBFdmFzX0NvbG9yc3BhY2UgY3NwYWNlOworICAgIEV2YXNfQ29sb3JzcGFjZSBjb2xvclNw
YWNlOwogICAgIHN0cnVjdCB7CiAgICAgICAgIEV3a19UaWxlX01hdHJpeCogbWF0cml4OwogICAg
ICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBjb2wsIHJvdzsKKyAgICAg
ICAgICAgIHVuc2lnbmVkIGxvbmcgY29sdW1uLCByb3c7CiAgICAgICAgIH0gYmFzZTsKICAgICAg
ICAgc3RydWN0IHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgY29scywgcm93czsKLSAgICAg
ICAgfSBjdXIsIG9sZDsKKyAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgY29sdW1ucywgcm93czsK
KyAgICAgICAgfSBjdXJyZW50LCBvbGQ7CiAgICAgICAgIEV2YXNfQ29vcmQgd2lkdGgsIGhlaWdo
dDsKICAgICB9IG1vZGVsOwogICAgIHN0cnVjdCB7Ci0gICAgICAgIEVpbmFfQm9vbCAoKmNiKSh2
b2lkKiBkYXRhLCBFd2tfVGlsZSogdGlsZSwgY29uc3QgRWluYV9SZWN0YW5nbGUqIGFyZWEpOwor
ICAgICAgICBFaW5hX0Jvb2wgKCpjYWxsYmFjaykodm9pZCogZGF0YSwgRXdrX1RpbGUqIHRpbGUs
IGNvbnN0IEVpbmFfUmVjdGFuZ2xlKiBhcmVhKTsKICAgICAgICAgdm9pZCogZGF0YTsKLSAgICAg
ICAgRWluYV9Jbmxpc3QqIHByZV9yZW5kZXJfcmVxdWVzdHM7CisgICAgICAgIEVpbmFfSW5saXN0
KiBwcmVSZW5kZXJSZXF1ZXN0czsKICAgICAgICAgRWNvcmVfSWRsZXIqIGlkbGVyOwogICAgICAg
ICBFaW5hX0Jvb2wgZGlzYWJsZWQ7CiAgICAgICAgIEVpbmFfQm9vbCBzdXNwZW5kIDogMTsKICAg
ICB9IHJlbmRlcjsKICAgICBzdHJ1Y3QgewotICAgICAgICB2b2lkKiAoKnByZV9jYikodm9pZCog
ZGF0YSwgRXZhc19PYmplY3QqIGV3a1RpbGUpOwotICAgICAgICB2b2lkKiBwcmVfZGF0YTsKLSAg
ICAgICAgdm9pZCogKCpwb3N0X2NiKSh2b2lkKiBkYXRhLCB2b2lkKiBwcmVfZGF0YSwgRXZhc19P
YmplY3QqIGV3a1RpbGUpOwotICAgICAgICB2b2lkKiBwb3N0X2RhdGE7CisgICAgICAgIHZvaWQq
ICgqcHJlQ2FsbGJhY2spKHZvaWQqIGRhdGEsIEV2YXNfT2JqZWN0KiBld2tUaWxlKTsKKyAgICAg
ICAgdm9pZCogcHJlRGF0YTsKKyAgICAgICAgdm9pZCogKCpwb3N0Q2FsbGJhY2spKHZvaWQqIGRh
dGEsIHZvaWQqIHByZURhdGEsIEV2YXNfT2JqZWN0KiBld2tUaWxlKTsKKyAgICAgICAgdm9pZCog
cG9zdERhdGE7CiAgICAgfSBwcm9jZXNzOwogICAgIHN0cnVjdCB7CiAgICAgICAgIEVpbmFfQm9v
bCBhbnkgOiAxOwotICAgICAgICBFaW5hX0Jvb2wgcG9zIDogMTsKKyAgICAgICAgRWluYV9Cb29s
IHBvc2l0aW9uIDogMTsKICAgICAgICAgRWluYV9Cb29sIHNpemUgOiAxOwogICAgICAgICBFaW5h
X0Jvb2wgbW9kZWwgOiAxOwogICAgICAgICBFaW5hX0Jvb2wgb2Zmc2V0IDogMTsKQEAgLTE0MCwy
MyArMTQwLDIzIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
dXBkYXRlc19wcm9jZXNzKEV3a19UaWxlZF9CYWNraW5nX1N0CiAgICAgaWYgKHByaXYtPnJlbmRl
ci5zdXNwZW5kIHx8ICFldmFzX29iamVjdF92aXNpYmxlX2dldChwcml2LT5zZWxmKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgaWYgKHByaXYtPnByb2Nlc3MucHJlX2NiKQotICAgICAgICBkYXRh
ID0gcHJpdi0+cHJvY2Vzcy5wcmVfY2IocHJpdi0+cHJvY2Vzcy5wcmVfZGF0YSwgcHJpdi0+c2Vs
Zik7CisgICAgaWYgKHByaXYtPnByb2Nlc3MucHJlQ2FsbGJhY2spCisgICAgICAgIGRhdGEgPSBw
cml2LT5wcm9jZXNzLnByZUNhbGxiYWNrKHByaXYtPnByb2Nlc3MucHJlRGF0YSwgcHJpdi0+c2Vs
Zik7CiAKICAgICBld2tfdGlsZV9tYXRyaXhfdXBkYXRlc19wcm9jZXNzKHByaXYtPm1vZGVsLm1h
dHJpeCk7CiAKLSAgICBpZiAocHJpdi0+cHJvY2Vzcy5wb3N0X2NiKQotICAgICAgICBwcml2LT5w
cm9jZXNzLnBvc3RfY2IocHJpdi0+cHJvY2Vzcy5wb3N0X2RhdGEsIGRhdGEsIHByaXYtPnNlbGYp
OworICAgIGlmIChwcml2LT5wcm9jZXNzLnBvc3RDYWxsYmFjaykKKyAgICAgICAgcHJpdi0+cHJv
Y2Vzcy5wb3N0Q2FsbGJhY2socHJpdi0+cHJvY2Vzcy5wb3N0RGF0YSwgZGF0YSwgcHJpdi0+c2Vs
Zik7CiB9CiAKIHN0YXRpYyBpbnQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2ZsdXNoKHZvaWQq
IGRhdGEpCiB7CiAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdiA9IHN0YXRp
Y19jYXN0PEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqPihkYXRhKTsKLSAgICBFd2tfVGls
ZV9VbnVzZWRfQ2FjaGUqIHR1YyA9IGV3a190aWxlX21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KHBy
aXYtPm1vZGVsLm1hdHJpeCk7CisgICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0aWxlZFVudXNl
ZENhY2hlID0gZXdrX3RpbGVfbWF0cml4X3VudXNlZF9jYWNoZV9nZXQocHJpdi0+bW9kZWwubWF0
cml4KTsKIAotICAgIGlmICh0dWMpIHsKKyAgICBpZiAodGlsZWRVbnVzZWRDYWNoZSkgewogICAg
ICAgICBEQkcoImZsdXNoIHVudXNlZCB0aWxlIGNhY2hlLiIpOwotICAgICAgICBld2tfdGlsZV91
bnVzZWRfY2FjaGVfYXV0b19mbHVzaCh0dWMpOworICAgICAgICBld2tfdGlsZV91bnVzZWRfY2Fj
aGVfYXV0b19mbHVzaCh0aWxlZFVudXNlZENhY2hlKTsKICAgICB9IGVsc2UKICAgICAgICAgRVJS
KCJubyBjYWNoZT8hIik7CiAKQEAgLTIyMiwyNyArMjIyLDI3IEBAIHN0YXRpYyB2b2lkIF9ld2tf
dGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2Fzc29jaWF0ZShFd2tfVGlsZWRfQmFja2luZ19TdG9y
ZV9EYXRhCiAKIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2Rpc3Nv
Y2lhdGUoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdiwgRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfSXRlbSogaXRlbSwgZG91YmxlIGxhc3RVc2VkKQogewotICAgIEV3a19UaWxlX1Vu
dXNlZF9DYWNoZSogdHVjOworICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSogdGlsZWRVbnVzZWRD
YWNoZTsKICAgICBld2tfdGlsZV9oaWRlKGl0ZW0tPnRpbGUpOwogICAgIGlmICghZXdrX3RpbGVf
dmlzaWJsZV9nZXQoaXRlbS0+dGlsZSkpCiAgICAgICAgIGV2YXNfb2JqZWN0X3NtYXJ0X21lbWJl
cl9kZWwoaXRlbS0+dGlsZS0+aW1hZ2UpOwogICAgIGV3a190aWxlX21hdHJpeF90aWxlX3B1dChw
cml2LT5tb2RlbC5tYXRyaXgsIGl0ZW0tPnRpbGUsIGxhc3RVc2VkKTsKLSAgICB0dWMgPSBld2tf
dGlsZV9tYXRyaXhfdW51c2VkX2NhY2hlX2dldChwcml2LT5tb2RlbC5tYXRyaXgpOwotICAgIGV3
a190aWxlX3VudXNlZF9jYWNoZV9hdXRvX2ZsdXNoKHR1Yyk7CisgICAgdGlsZWRVbnVzZWRDYWNo
ZSA9IGV3a190aWxlX21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7
CisgICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2F1dG9fZmx1c2godGlsZWRVbnVzZWRDYWNoZSk7
CiAKICAgICBpdGVtLT50aWxlID0gMDsKIH0KIAogc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNr
aW5nX3N0b3JlX3RpbGVfZGlzc29jaWF0ZV9hbGwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0
YSogcHJpdikKIHsKLSAgICBFaW5hX0lubGlzdCogaXQ7CisgICAgRWluYV9Jbmxpc3QqIGxpc3Q7
CiAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSogaXRlbTsKICAgICBpbnQgaTsKICAg
ICBkb3VibGUgbGFzdF91c2VkID0gZWNvcmVfbG9vcF90aW1lX2dldCgpOwogCiAgICAgZm9yIChp
ID0gMDsgaSA8IHByaXYtPnZpZXcucm93czsgaSsrKSB7Ci0gICAgICAgIGl0ID0gcHJpdi0+dmll
dy5pdGVtc1tpXTsKLSAgICAgICAgRUlOQV9JTkxJU1RfRk9SRUFDSChpdCwgaXRlbSkKKyAgICAg
ICAgbGlzdCA9IHByaXYtPnZpZXcuaXRlbXNbaV07CisgICAgICAgIEVJTkFfSU5MSVNUX0ZPUkVB
Q0gobGlzdCwgaXRlbSkKICAgICAgICAgICAgIGlmIChpdGVtLT50aWxlKQogICAgICAgICAgICAg
ICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2Rpc3NvY2lhdGUocHJpdiwgaXRlbSwg
bGFzdF91c2VkKTsKICAgICB9CkBAIC0yNTAsOTIgKzI1MCw5MiBAQCBzdGF0aWMgdm9pZCBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9kaXNzb2NpYXRlX2FsbChFd2tfVGlsZWRfQmFja2lu
Z19TdG9yZQogCiBzdGF0aWMgaW5saW5lIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2FkZChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBw
cml2LCB1bnNpZ25lZCBsb25nIGNvbHVtbiwgdW5zaWduZWQgbG9uZyByb3csIGZsb2F0IHpvb20s
IEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUHJpb3JpdHkgcHJpb3JpdHkpCiB7
Ci0gICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0KiByOworICAg
IEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUmVxdWVzdCogcmVxdWVzdDsKIAot
ICAgIHIgPSBzdGF0aWNfY2FzdDxFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1Jl
cXVlc3QqPihtYWxsb2Moc2l6ZW9mKCpyKSkpOwotICAgIGlmICghcikKKyAgICByZXF1ZXN0ID0g
c3RhdGljX2Nhc3Q8RXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0Kj4o
bWFsbG9jKHNpemVvZigqcmVxdWVzdCkpKTsKKyAgICBpZiAoIXJlcXVlc3QpCiAgICAgICAgIHJl
dHVybiBFSU5BX0ZBTFNFOwogCiAgICAgaWYgKHByaW9yaXR5ID09IFBSRV9SRU5ERVJfUFJJT1JJ
VFlfSElHSCkKLSAgICAgICAgcHJpdi0+cmVuZGVyLnByZV9yZW5kZXJfcmVxdWVzdHMgPSBlaW5h
X2lubGlzdF9wcmVwZW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChwcml2LT5yZW5kZXIucHJlX3JlbmRlcl9yZXF1ZXN0cywgRUlOQV9JTkxJU1RfR0VU
KHIpKTsKKyAgICAgICAgcHJpdi0+cmVuZGVyLnByZVJlbmRlclJlcXVlc3RzID0gZWluYV9pbmxp
c3RfcHJlcGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAocHJpdi0+cmVuZGVyLnByZVJlbmRlclJlcXVlc3RzLCBFSU5BX0lOTElTVF9HRVQocmVxdWVz
dCkpOwogICAgIGVsc2UKLSAgICAgICAgcHJpdi0+cmVuZGVyLnByZV9yZW5kZXJfcmVxdWVzdHMg
PSBlaW5hX2lubGlzdF9hcHBlbmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKHByaXYtPnJlbmRlci5wcmVfcmVuZGVyX3JlcXVlc3RzLCBFSU5BX0lOTElT
VF9HRVQocikpOworICAgICAgICBwcml2LT5yZW5kZXIucHJlUmVuZGVyUmVxdWVzdHMgPSBlaW5h
X2lubGlzdF9hcHBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKHByaXYtPnJlbmRlci5wcmVSZW5kZXJSZXF1ZXN0cywgRUlOQV9JTkxJU1RfR0VUKHJl
cXVlc3QpKTsKIAotICAgIHItPmNvbCA9IGNvbHVtbjsKLSAgICByLT5yb3cgPSByb3c7Ci0gICAg
ci0+em9vbSA9IHpvb207CisgICAgcmVxdWVzdC0+Y29sdW1uID0gY29sdW1uOworICAgIHJlcXVl
c3QtPnJvdyA9IHJvdzsKKyAgICByZXF1ZXN0LT56b29tID0gem9vbTsKIAogICAgIHJldHVybiBF
SU5BX1RSVUU7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2RlbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBw
cml2LCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QqIHJlcXVlc3Qp
CiB7Ci0gICAgcHJpdi0+cmVuZGVyLnByZV9yZW5kZXJfcmVxdWVzdHMgPSBlaW5hX2lubGlzdF9y
ZW1vdmUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocHJpdi0+
cmVuZGVyLnByZV9yZW5kZXJfcmVxdWVzdHMsIEVJTkFfSU5MSVNUX0dFVChyZXF1ZXN0KSk7Cisg
ICAgcHJpdi0+cmVuZGVyLnByZVJlbmRlclJlcXVlc3RzID0gZWluYV9pbmxpc3RfcmVtb3ZlCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHByaXYtPnJlbmRlci5w
cmVSZW5kZXJSZXF1ZXN0cywgRUlOQV9JTkxJU1RfR0VUKHJlcXVlc3QpKTsKICAgICBmcmVlKHJl
cXVlc3QpOwogfQogCiBzdGF0aWMgaW5saW5lIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9S
ZW5kZXJfUmVxdWVzdCogX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVz
dF9maXJzdChjb25zdCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2KQogewogICAg
IHJldHVybiBFSU5BX0lOTElTVF9DT05UQUlORVJfR0VUKAotICAgICAgICAgICAgICAgcHJpdi0+
cmVuZGVyLnByZV9yZW5kZXJfcmVxdWVzdHMsCisgICAgICAgICAgICAgICBwcml2LT5yZW5kZXIu
cHJlUmVuZGVyUmVxdWVzdHMsCiAgICAgICAgICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9y
ZV9QcmVfUmVuZGVyX1JlcXVlc3QpOwogfQogCiBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2ZsdXNoKEV3a19UaWxlZF9CYWNraW5nX1N0b3Jl
X0RhdGEqIHByaXYpCiB7Ci0gICAgRWluYV9Jbmxpc3QqKiBwbCA9ICZwcml2LT5yZW5kZXIucHJl
X3JlbmRlcl9yZXF1ZXN0czsKLSAgICB3aGlsZSAoKnBsKSB7Ci0gICAgICAgIEV3a19UaWxlZF9C
YWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUmVxdWVzdCogcjsKLSAgICAgICAgciA9IF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfZmlyc3QocHJpdik7Ci0gICAgICAg
ICpwbCA9IGVpbmFfaW5saXN0X3JlbW92ZSgqcGwsICpwbCk7Ci0gICAgICAgIGZyZWUocik7Cisg
ICAgRWluYV9Jbmxpc3QqKiBwcmVSZW5kZXJMaXN0ID0gJnByaXYtPnJlbmRlci5wcmVSZW5kZXJS
ZXF1ZXN0czsKKyAgICB3aGlsZSAoKnByZVJlbmRlckxpc3QpIHsKKyAgICAgICAgRXdrX1RpbGVk
X0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0KiByZXF1ZXN0OworICAgICAgICByZXF1
ZXN0ID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9maXJzdChw
cml2KTsKKyAgICAgICAgKnByZVJlbmRlckxpc3QgPSBlaW5hX2lubGlzdF9yZW1vdmUoKnByZVJl
bmRlckxpc3QsICpwcmVSZW5kZXJMaXN0KTsKKyAgICAgICAgZnJlZShyZXF1ZXN0KTsKICAgICB9
CiB9CiAKIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3Jl
cXVlc3RfY2xlYXIoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdikKIHsKLSAgICBF
aW5hX0lubGlzdCoqIHBsID0gJnByaXYtPnJlbmRlci5wcmVfcmVuZGVyX3JlcXVlc3RzOwotICAg
IEVpbmFfSW5saXN0KiBpdGVyID0gKnBsLCAqIHRtcDsKKyAgICBFaW5hX0lubGlzdCoqIHByZVJl
bmRlckxpc3QgPSAmcHJpdi0+cmVuZGVyLnByZVJlbmRlclJlcXVlc3RzOworICAgIEVpbmFfSW5s
aXN0KiBpdGVyID0gKnByZVJlbmRlckxpc3QsICp0bXA7CiAgICAgd2hpbGUgKGl0ZXIpIHsKLSAg
ICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0KiByID0KKyAg
ICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0KiByZXF1ZXN0
ID0KICAgICAgICAgICAgIEVJTkFfSU5MSVNUX0NPTlRBSU5FUl9HRVQoCiAgICAgICAgICAgICAg
ICAgaXRlciwgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0KTsKICAg
ICAgICAgdG1wID0gaXRlci0+bmV4dDsKLSAgICAgICAgKnBsID0gZWluYV9pbmxpc3RfcmVtb3Zl
KCpwbCwgaXRlcik7CisgICAgICAgICpwcmVSZW5kZXJMaXN0ID0gZWluYV9pbmxpc3RfcmVtb3Zl
KCpwcmVSZW5kZXJMaXN0LCBpdGVyKTsKICAgICAgICAgaXRlciA9IHRtcDsKLSAgICAgICAgZnJl
ZShyKTsKKyAgICAgICAgZnJlZShyZXF1ZXN0KTsKICAgICB9CiB9CiAKIC8qIGFzc3VtZXMgcHJp
di0+cHJvY2Vzcy5wcmVfY2Igd2FzIGNhbGxlZCBpZiByZXF1aXJlZCEgKi8KIHN0YXRpYyB2b2lk
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfcHJvY2Vzc19zaW5n
bGUoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdikKIHsKLSAgICBFd2tfVGlsZWRf
QmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QqIHJlcTsKKyAgICBFd2tfVGlsZWRfQmFj
a2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QqIHJlcXVlc3Q7CiAgICAgRWluYV9SZWN0YW5n
bGUgYXJlYTsKLSAgICBFd2tfVGlsZV9NYXRyaXgqIHRtID0gcHJpdi0+bW9kZWwubWF0cml4Owor
ICAgIEV3a19UaWxlX01hdHJpeCogdGlsZU1hdHJpeCA9IHByaXYtPm1vZGVsLm1hdHJpeDsKICAg
ICBFd2tfVGlsZSogdGlsZTsKLSAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHR1YzsKLSAgICB1
bnNpZ25lZCBsb25nIGNvbCwgcm93OworICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSogdGlsZWRV
bnVzZWRDYWNoZTsKKyAgICB1bnNpZ25lZCBsb25nIGNvbHVtbiwgcm93OwogICAgIGZsb2F0IHpv
b207CiAgICAgZG91YmxlIGxhc3RfdXNlZCA9IGVjb3JlX2xvb3BfdGltZV9nZXQoKTsKIAotICAg
IHJlcSA9IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfZmlyc3Qo
cHJpdik7Ci0gICAgaWYgKCFyZXEpCisgICAgcmVxdWVzdCA9IF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfZmlyc3QocHJpdik7CisgICAgaWYgKCFyZXF1ZXN0KQog
ICAgICAgICByZXR1cm47CiAKLSAgICBjb2wgPSByZXEtPmNvbDsKLSAgICByb3cgPSByZXEtPnJv
dzsKLSAgICB6b29tID0gcmVxLT56b29tOworICAgIGNvbHVtbiA9IHJlcXVlc3QtPmNvbHVtbjsK
KyAgICByb3cgPSByZXF1ZXN0LT5yb3c7CisgICAgem9vbSA9IHJlcXVlc3QtPnpvb207CiAKLSAg
ICBpZiAoZXdrX3RpbGVfbWF0cml4X3RpbGVfZXhhY3RfZXhpc3RzKHRtLCBjb2wsIHJvdywgem9v
bSkpIHsKLSAgICAgICAgREJHKCJubyBwcmUtcmVuZGVyIHJlcXVpcmVkIGZvciB0aWxlICVsdSwl
bHUgQCAlZi4iLCBjb2wsIHJvdywgem9vbSk7CisgICAgaWYgKGV3a190aWxlX21hdHJpeF90aWxl
X2V4YWN0X2V4aXN0cyh0aWxlTWF0cml4LCBjb2x1bW4sIHJvdywgem9vbSkpIHsKKyAgICAgICAg
REJHKCJubyBwcmUtcmVuZGVyIHJlcXVpcmVkIGZvciB0aWxlICVsdSwlbHUgQCAlZi4iLCBjb2x1
bW4sIHJvdywgem9vbSk7CiAgICAgICAgIGdvdG8gZW5kOwogICAgIH0KIAotICAgIHRpbGUgPSBf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9uZXcocHJpdiwgY29sLCByb3csIHpvb20pOwor
ICAgIHRpbGUgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9uZXcocHJpdiwgY29sdW1u
LCByb3csIHpvb20pOwogICAgIGlmICghdGlsZSkKICAgICAgICAgZ290byBlbmQ7CiAKQEAgLTM0
NCwzMyArMzQ0LDMzIEBAIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVf
cmVuZGVyX3JlcXVlc3RfcHJvY2Vzc19zaW5nbGUoRXdrX1RpbGVkCiAgICAgYXJlYS53ID0gcHJp
di0+dmlldy50aWxlLndpZHRoOwogICAgIGFyZWEuaCA9IHByaXYtPnZpZXcudGlsZS5oZWlnaHQ7
CiAKLSAgICBwcml2LT5yZW5kZXIuY2IocHJpdi0+cmVuZGVyLmRhdGEsIHRpbGUsICZhcmVhKTsK
KyAgICBwcml2LT5yZW5kZXIuY2FsbGJhY2socHJpdi0+cmVuZGVyLmRhdGEsIHRpbGUsICZhcmVh
KTsKICAgICBldmFzX29iamVjdF9pbWFnZV9kYXRhX3VwZGF0ZV9hZGQoCiAgICAgICAgIHRpbGUt
PmltYWdlLAogICAgICAgICBhcmVhLngsIGFyZWEueSwgYXJlYS53LCBhcmVhLmgpOwotICAgIGV3
a190aWxlX21hdHJpeF90aWxlX3VwZGF0ZXNfY2xlYXIodG0sIHRpbGUpOworICAgIGV3a190aWxl
X21hdHJpeF90aWxlX3VwZGF0ZXNfY2xlYXIodGlsZU1hdHJpeCwgdGlsZSk7CiAKLSAgICBld2tf
dGlsZV9tYXRyaXhfdGlsZV9wdXQodG0sIHRpbGUsIGxhc3RfdXNlZCk7CisgICAgZXdrX3RpbGVf
bWF0cml4X3RpbGVfcHV0KHRpbGVNYXRyaXgsIHRpbGUsIGxhc3RfdXNlZCk7CiAKIGVuZDoKLSAg
ICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2RlbChwcml2LCBy
ZXEpOwotICAgIHR1YyA9IGV3a190aWxlX21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1v
ZGVsLm1hdHJpeCk7Ci0gICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2F1dG9fZmx1c2godHVjKTsK
KyAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2RlbChwcml2
LCByZXF1ZXN0KTsKKyAgICB0aWxlZFVudXNlZENhY2hlID0gZXdrX3RpbGVfbWF0cml4X3VudXNl
ZF9jYWNoZV9nZXQocHJpdi0+bW9kZWwubWF0cml4KTsKKyAgICBld2tfdGlsZV91bnVzZWRfY2Fj
aGVfYXV0b19mbHVzaCh0aWxlZFVudXNlZENhY2hlKTsKIH0KIAogc3RhdGljIEVpbmFfQm9vbCBf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9wcm9jZXNzX2lkbGVyX2NiKHZvaWQqIGRhdGEp
CiB7CiAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdiA9IHN0YXRpY19jYXN0
PEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqPihkYXRhKTsKIAotICAgIGlmIChwcml2LT5w
cm9jZXNzLnByZV9jYikKLSAgICAgICAgZGF0YSA9IHByaXYtPnByb2Nlc3MucHJlX2NiKHByaXYt
PnByb2Nlc3MucHJlX2RhdGEsIHByaXYtPnNlbGYpOworICAgIGlmIChwcml2LT5wcm9jZXNzLnBy
ZUNhbGxiYWNrKQorICAgICAgICBkYXRhID0gcHJpdi0+cHJvY2Vzcy5wcmVDYWxsYmFjayhwcml2
LT5wcm9jZXNzLnByZURhdGEsIHByaXYtPnNlbGYpOwogCiAgICAgX2V3a190aWxlZF9iYWNraW5n
X3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9wcm9jZXNzX3NpbmdsZShwcml2KTsKIAotICAgIGlm
IChwcml2LT5wcm9jZXNzLnBvc3RfY2IpCi0gICAgICAgIHByaXYtPnByb2Nlc3MucG9zdF9jYihw
cml2LT5wcm9jZXNzLnBvc3RfZGF0YSwgZGF0YSwgcHJpdi0+c2VsZik7CisgICAgaWYgKHByaXYt
PnByb2Nlc3MucG9zdENhbGxiYWNrKQorICAgICAgICBwcml2LT5wcm9jZXNzLnBvc3RDYWxsYmFj
ayhwcml2LT5wcm9jZXNzLnBvc3REYXRhLCBkYXRhLCBwcml2LT5zZWxmKTsKIAotICAgIGlmICgh
cHJpdi0+cmVuZGVyLnByZV9yZW5kZXJfcmVxdWVzdHMpIHsKKyAgICBpZiAoIXByaXYtPnJlbmRl
ci5wcmVSZW5kZXJSZXF1ZXN0cykgewogICAgICAgICBwcml2LT5yZW5kZXIuaWRsZXIgPSAwOwog
ICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKICAgICB9CkBAIC00MjAsMzggKzQyMCwzOCBAQCBz
dGF0aWMgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9lbmFibGVfcmVuZGVyKEV3
a19UaWxlZF9CYWNraW5nX1N0b3JlXwogCiBzdGF0aWMgaW5saW5lIEVpbmFfQm9vbCBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9maWxsKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEq
IHByaXYsIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0qIGl0ZW0sIHVuc2lnbmVkIGxvbmcg
Y29sdW1uLCB1bnNpZ25lZCBsb25nIHJvdykKIHsKLSAgICB1bnNpZ25lZCBsb25nIG1fY29sID0g
cHJpdi0+bW9kZWwuYmFzZS5jb2wgKyBjb2x1bW47Ci0gICAgdW5zaWduZWQgbG9uZyBtX3JvdyA9
IHByaXYtPm1vZGVsLmJhc2Uucm93ICsgcm93OwotICAgIGRvdWJsZSBsYXN0X3VzZWQgPSBlY29y
ZV9sb29wX3RpbWVfZ2V0KCk7CisgICAgdW5zaWduZWQgbG9uZyBtQ29sdW1uID0gcHJpdi0+bW9k
ZWwuYmFzZS5jb2x1bW4gKyBjb2x1bW47CisgICAgdW5zaWduZWQgbG9uZyBtUm93ID0gcHJpdi0+
bW9kZWwuYmFzZS5yb3cgKyByb3c7CisgICAgZG91YmxlIGxhc3RVc2VkID0gZWNvcmVfbG9vcF90
aW1lX2dldCgpOwogCi0gICAgaWYgKG1fY29sID49IHByaXYtPm1vZGVsLmN1ci5jb2xzIHx8IG1f
cm93ID49IHByaXYtPm1vZGVsLmN1ci5yb3dzKSB7CisgICAgaWYgKG1Db2x1bW4gPj0gcHJpdi0+
bW9kZWwuY3VycmVudC5jb2x1bW5zIHx8IG1Sb3cgPj0gcHJpdi0+bW9kZWwuY3VycmVudC5yb3dz
KSB7CiAgICAgICAgIGlmIChpdGVtLT50aWxlKQotICAgICAgICAgICAgX2V3a190aWxlZF9iYWNr
aW5nX3N0b3JlX3RpbGVfZGlzc29jaWF0ZShwcml2LCBpdGVtLCBsYXN0X3VzZWQpOworICAgICAg
ICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfZGlzc29jaWF0ZShwcml2LCBpdGVt
LCBsYXN0VXNlZCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgRXdrX1RpbGUqIHRpbGU7CiAgICAg
ICAgIGNvbnN0IGZsb2F0IHpvb20gPSBwcml2LT52aWV3LnRpbGUuem9vbTsKIAogICAgICAgICBp
ZiAoaXRlbS0+dGlsZSkgewogICAgICAgICAgICAgRXdrX1RpbGUqIG9sZCA9IGl0ZW0tPnRpbGU7
Ci0gICAgICAgICAgICBpZiAob2xkLT5yb3cgIT0gbV9yb3cgfHwgb2xkLT5jb2wgIT0gbV9jb2wg
fHwgb2xkLT56b29tICE9IHpvb20pCi0gICAgICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5n
X3N0b3JlX3RpbGVfZGlzc29jaWF0ZShwcml2LCBpdGVtLCBsYXN0X3VzZWQpOwotICAgICAgICAg
ICAgZWxzZSBpZiAob2xkLT5yb3cgPT0gbV9yb3cgJiYgb2xkLT5jb2wgPT0gbV9jb2wgJiYgb2xk
LT56b29tID09IHpvb20pCisgICAgICAgICAgICBpZiAob2xkLT5yb3cgIT0gbVJvdyB8fCBvbGQt
PmNvbCAhPSBtQ29sdW1uIHx8IG9sZC0+em9vbSAhPSB6b29tKQorICAgICAgICAgICAgICAgIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2Rpc3NvY2lhdGUocHJpdiwgaXRlbSwgbGFzdFVz
ZWQpOworICAgICAgICAgICAgZWxzZSBpZiAob2xkLT5yb3cgPT0gbVJvdyAmJiBvbGQtPmNvbCA9
PSBtQ29sdW1uICYmIG9sZC0+em9vbSA9PSB6b29tKQogICAgICAgICAgICAgICAgIGdvdG8gZW5k
OwogICAgICAgICB9CiAKLSAgICAgICAgdGlsZSA9IGV3a190aWxlX21hdHJpeF90aWxlX2V4YWN0
X2dldChwcml2LT5tb2RlbC5tYXRyaXgsIG1fY29sLCBtX3Jvdywgem9vbSk7CisgICAgICAgIHRp
bGUgPSBld2tfdGlsZV9tYXRyaXhfdGlsZV9leGFjdF9nZXQocHJpdi0+bW9kZWwubWF0cml4LCBt
Q29sdW1uLCBtUm93LCB6b29tKTsKIAogICAgICAgICBpZiAoIXRpbGUpIHsKICAgICAgICAgICAg
IC8qIE5PVEU6IGl0IG5ldmVyIHJldHVybnMgMCBpZiBpdC0+dGlsZSB3YXMgc2V0ISAqLwogICAg
ICAgICAgICAgaWYgKGl0ZW0tPnRpbGUpIHsKICAgICAgICAgICAgICAgICBDUklUSUNBTCgiaXQt
PnRpbGU9JXAsIGJ1dCBpdCBzaG91bGQgYmUgMCEiLCBpdGVtLT50aWxlKTsKICAgICAgICAgICAg
ICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9kaXNzb2NpYXRlKHByaXYsIGl0ZW0s
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBsYXN0X3VzZWQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbGFzdFVzZWQpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAv
KiBEbyBub3QgYWRkIG5ldyByZXF1ZXN0cyB0byB0aGUgcmVuZGVyIHF1ZXVlICovCiAgICAgICAg
ICAgICBpZiAoIXByaXYtPnJlbmRlci5zdXNwZW5kKSB7Ci0gICAgICAgICAgICAgICAgdGlsZSA9
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX25ldyhwcml2LCBtX2NvbCwgbV9yb3csIHpv
b20pOworICAgICAgICAgICAgICAgIHRpbGUgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGls
ZV9uZXcocHJpdiwgbUNvbHVtbiwgbVJvdywgem9vbSk7CiAgICAgICAgICAgICAgICAgaWYgKCF0
aWxlKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKICAgICAgICAgICAg
ICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9hc3NvY2lhdGUocHJpdiwgdGlsZSwg
aXRlbSk7CkBAIC00NTksNyArNDU5LDcgQEAgc3RhdGljIGlubGluZSBFaW5hX0Jvb2wgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZmlsbChFd2tfVGlsZWRfQmFja2luZ19TdG8KICAgICAg
ICAgfSBlbHNlIGlmICh0aWxlICE9IGl0ZW0tPnRpbGUpIHsKICAgICAgICAgICAgIGlmIChpdGVt
LT50aWxlKQogICAgICAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2Rp
c3NvY2lhdGUocHJpdiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGl0ZW0sIGxhc3RfdXNlZCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLCBsYXN0VXNlZCk7CiAgICAg
ICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9hc3NvY2lhdGUocHJpdiwgdGls
ZSwgaXRlbSk7CiAgICAgICAgIH0KIApAQCAtNDczLDMxICs0NzMsMzEgQEAgZW5kOgogCiBzdGF0
aWMgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSogX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X2l0ZW1fYWRkKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYsIHVuc2lnbmVkIGxv
bmcgY29sdW1uLCB1bnNpZ25lZCBsb25nIHJvdykKIHsKLSAgICBFd2tfVGlsZWRfQmFja2luZ19T
dG9yZV9JdGVtKiBpdDsKLSAgICBFdmFzX0Nvb3JkIHgsIHksIHR3LCB0aDsKKyAgICBFd2tfVGls
ZWRfQmFja2luZ19TdG9yZV9JdGVtKiBpdGVtOworICAgIEV2YXNfQ29vcmQgeCwgeSwgdGlsZVdp
ZHRoLCB0aWxlSGVpZ2h0OwogCi0gICAgREJHKCJvPSVwIiwgcHJpdi0+c2VsZik7CisgICAgREJH
KCJld2tUaWxlJXAiLCBwcml2LT5zZWxmKTsKIAotICAgIGl0ID0gc3RhdGljX2Nhc3Q8RXdrX1Rp
bGVkX0JhY2tpbmdfU3RvcmVfSXRlbSo+KG1hbGxvYyhzaXplb2YoKml0KSkpOwotICAgIGlmICgh
aXQpCisgICAgaXRlbSA9IHN0YXRpY19jYXN0PEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0q
PihtYWxsb2Moc2l6ZW9mKCppdGVtKSkpOworICAgIGlmICghaXRlbSkKICAgICAgICAgcmV0dXJu
IDA7CiAKLSAgICB0dyA9IHByaXYtPnZpZXcudGlsZS53aWR0aDsKLSAgICB0aCA9IHByaXYtPnZp
ZXcudGlsZS5oZWlnaHQ7Ci0gICAgeCA9IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCArIHByaXYt
PnZpZXcueCArIHR3ICAqY29sdW1uOwotICAgIHkgPSBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkg
KyBwcml2LT52aWV3LnkgKyB0aCAgKnJvdzsKKyAgICB0aWxlV2lkdGggPSBwcml2LT52aWV3LnRp
bGUud2lkdGg7CisgICAgdGlsZUhlaWdodCA9IHByaXYtPnZpZXcudGlsZS5oZWlnaHQ7CisgICAg
eCA9IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCArIHByaXYtPnZpZXcueCArIHRpbGVXaWR0aCAg
KmNvbHVtbjsKKyAgICB5ID0gcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ICsgcHJpdi0+dmlldy55
ICsgdGlsZUhlaWdodCAgKnJvdzsKIAotICAgIGl0LT50aWxlID0gMDsKKyAgICBpdGVtLT50aWxl
ID0gMDsKIAotICAgIGl0LT5zbW9vdGhfc2NhbGUgPSBwcml2LT52aWV3LnRpbGUuem9vbV93ZWFr
X3Ntb290aF9zY2FsZTsKLSAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9tb3ZlKGl0
LCB4LCB5KTsKLSAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9yZXNpemUoaXQsIHR3
LCB0aCk7Ci0gICAgaWYgKCFfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9maWxsKHByaXYs
IGl0LCBjb2x1bW4sIHJvdykpIHsKLSAgICAgICAgZnJlZShpdCk7CisgICAgaXRlbS0+c21vb3Ro
X3NjYWxlID0gcHJpdi0+dmlldy50aWxlLnpvb21XZWFrU21vb3RoU2NhbGU7CisgICAgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fbW92ZShpdGVtLCB4LCB5KTsKKyAgICBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfaXRlbV9yZXNpemUoaXRlbSwgdGlsZVdpZHRoLCB0aWxlSGVpZ2h0KTsK
KyAgICBpZiAoIV9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2ZpbGwocHJpdiwgaXRlbSwg
Y29sdW1uLCByb3cpKSB7CisgICAgICAgIGZyZWUoaXRlbSk7CiAgICAgICAgIHJldHVybiAwOwog
ICAgIH0KIAotICAgIHJldHVybiBpdDsKKyAgICByZXR1cm4gaXRlbTsKIH0KIAogc3RhdGljIHZv
aWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZGVsKEV3a19UaWxlZF9CYWNraW5nX1N0
b3JlX0RhdGEqIHByaXYsIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0qIGl0ZW0pCkBAIC01
MjcsNDAgKzUyNyw0MCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX2NoYW5nZWQoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YQogICAgIHByaXYtPmNoYW5n
ZWQuYW55ID0gRUlOQV9UUlVFOwogfQogCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfdmlld19jb2xzX2VuZF9kZWwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJp
diwgRWluYV9Jbmxpc3QqKiBwX3JvdywgdW5zaWduZWQgaW50IGNvdW50KQorc3RhdGljIHZvaWQg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfY29sc19lbmRfZGVsKEV3a19UaWxlZF9CYWNr
aW5nX1N0b3JlX0RhdGEqIHByaXYsIEVpbmFfSW5saXN0Kiogcm93TGlzdCwgdW5zaWduZWQgaW50
IGNvdW50KQogewotICAgIEVpbmFfSW5saXN0KiBuOworICAgIEVpbmFfSW5saXN0KiBuZXh0SXRl
bTsKICAgICB1bnNpZ25lZCBpbnQgaTsKIAogICAgIGlmICghY291bnQpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIG4gPSAoKnBfcm93KS0+bGFzdDsKKyAgICBuZXh0SXRlbSA9ICgqcm93TGlzdCkt
Pmxhc3Q7CiAKICAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotICAgICAgICBFd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKiBpdDsKLSAgICAgICAgaXQgPSBFSU5BX0lOTElTVF9D
T05UQUlORVJfR0VUKG4sIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0pOwotICAgICAgICBu
ID0gbi0+cHJldjsKLSAgICAgICAgKnBfcm93ID0gZWluYV9pbmxpc3RfcmVtb3ZlKCpwX3Jvdywg
RUlOQV9JTkxJU1RfR0VUKGl0KSk7Ci0gICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9p
dGVtX2RlbChwcml2LCBpdCk7CisgICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0q
IGl0ZW07CisgICAgICAgIGl0ZW0gPSBFSU5BX0lOTElTVF9DT05UQUlORVJfR0VUKG5leHRJdGVt
LCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKTsKKyAgICAgICAgbmV4dEl0ZW0gPSBuZXh0
SXRlbS0+cHJldjsKKyAgICAgICAgKnJvd0xpc3QgPSBlaW5hX2lubGlzdF9yZW1vdmUoKnJvd0xp
c3QsIEVJTkFfSU5MSVNUX0dFVChpdGVtKSk7CisgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9pdGVtX2RlbChwcml2LCBpdGVtKTsKICAgICB9CiB9CiAKLXN0YXRpYyBFaW5hX0Jvb2wg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfY29sc19lbmRfYWRkKEV3a19UaWxlZF9CYWNr
aW5nX1N0b3JlX0RhdGEqIHByaXYsIEVpbmFfSW5saXN0KiogcF9yb3csIHVuc2lnbmVkIGludCBi
YXNlX2NvbHVtbiwgdW5zaWduZWQgaW50IGNvdW50KQorc3RhdGljIEVpbmFfQm9vbCBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfdmlld19jb2xzX2VuZF9hZGQoRXdrX1RpbGVkX0JhY2tpbmdfU3Rv
cmVfRGF0YSogcHJpdiwgRWluYV9Jbmxpc3QqKiByb3dMaXN0LCB1bnNpZ25lZCBpbnQgYmFzZUNv
bHVtbiwgdW5zaWduZWQgaW50IGNvdW50KQogewotICAgIHVuc2lnbmVkIGludCBpLCByID0gcF9y
b3cgLSBwcml2LT52aWV3Lml0ZW1zOworICAgIHVuc2lnbmVkIGludCBpLCByb3cgPSByb3dMaXN0
IC0gcHJpdi0+dmlldy5pdGVtczsKIAotICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrLCBi
YXNlX2NvbHVtbisrKSB7CisgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyssIGJhc2VDb2x1
bW4rKykgewogICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKiBpdDsKIAotICAg
ICAgICBpdCA9IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2FkZChwcml2LCBiYXNlX2Nv
bHVtbiwgcik7CisgICAgICAgIGl0ID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fYWRk
KHByaXYsIGJhc2VDb2x1bW4sIHJvdyk7CiAgICAgICAgIGlmICghaXQpIHsKLSAgICAgICAgICAg
IENSSVRJQ0FMKCJmYWlsZWQgdG8gYWRkIGNvbHVtbiAldSBvZiAldSBpbiByb3cgJXUuIiwgaSwg
Y291bnQsIHIpOwotICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfY29s
c19lbmRfZGVsKHByaXYsIHBfcm93LCBpKTsKKyAgICAgICAgICAgIENSSVRJQ0FMKCJmYWlsZWQg
dG8gYWRkIGNvbHVtbiAldSBvZiAldSBpbiByb3cgJXUuIiwgaSwgY291bnQsIHJvdyk7CisgICAg
ICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19jb2xzX2VuZF9kZWwocHJpdiwg
cm93TGlzdCwgaSk7CiAgICAgICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKICAgICAgICAgfQog
Ci0gICAgICAgICpwX3JvdyA9IGVpbmFfaW5saXN0X2FwcGVuZCgqcF9yb3csIEVJTkFfSU5MSVNU
X0dFVChpdCkpOworICAgICAgICAqcm93TGlzdCA9IGVpbmFfaW5saXN0X2FwcGVuZCgqcm93TGlz
dCwgRUlOQV9JTkxJU1RfR0VUKGl0KSk7CiAgICAgfQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9
CkBAIC01NjgsMTAgKzU2OCwxMCBAQCBzdGF0aWMgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV92aWV3X2NvbHNfZW5kX2FkZChFd2tfVGlsZWRfQmFja2luZ19TdAogc3RhdGljIHZv
aWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcm93X2RlbChFd2tfVGlsZWRfQmFja2lu
Z19TdG9yZV9EYXRhKiBwcml2LCBFaW5hX0lubGlzdCogcm93KQogewogICAgIHdoaWxlIChyb3cp
IHsKLSAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSogaXQ7Ci0gICAgICAgIGl0
ID0gRUlOQV9JTkxJU1RfQ09OVEFJTkVSX0dFVChyb3csIEV3a19UaWxlZF9CYWNraW5nX1N0b3Jl
X0l0ZW0pOworICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKiBpdGVtOworICAg
ICAgICBpdGVtID0gRUlOQV9JTkxJU1RfQ09OVEFJTkVSX0dFVChyb3csIEV3a19UaWxlZF9CYWNr
aW5nX1N0b3JlX0l0ZW0pOwogICAgICAgICByb3cgPSByb3ctPm5leHQ7Ci0gICAgICAgIF9ld2tf
dGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2RlbChwcml2LCBpdCk7CisgICAgICAgIF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9pdGVtX2RlbChwcml2LCBpdGVtKTsKICAgICB9CiB9CiAKQEAgLTYx
MSw4ICs2MTEsOCBAQCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcmVuZGVy
KHZvaWQqIGRhdGEsIEV3a19UaWxlKiB0aWxlLCBjb25zdCBFaQogICAgIGlmIChwcml2LT52aWV3
LnRpbGUud2lkdGggIT0gdGlsZS0+d2lkdGggfHwgcHJpdi0+dmlldy50aWxlLmhlaWdodCAhPSB0
aWxlLT5oZWlnaHQpCiAgICAgICAgIHJldHVybjsgLy8gdG9kbzogcmVtb3ZlIG1lIGxhdGVyLCBk
b24ndCBldmVuIGZsYWcgYXMgZGlydHkhCiAKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
Tihwcml2LT5yZW5kZXIuY2IpOwotICAgIGlmICghcHJpdi0+cmVuZGVyLmNiKHByaXYtPnJlbmRl
ci5kYXRhLCB0aWxlLCBhcmVhKSkKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihwcml2
LT5yZW5kZXIuY2FsbGJhY2spOworICAgIGlmICghcHJpdi0+cmVuZGVyLmNhbGxiYWNrKHByaXYt
PnJlbmRlci5kYXRhLCB0aWxlLCBhcmVhKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgZXZhc19v
YmplY3RfaW1hZ2VfZGF0YV91cGRhdGVfYWRkKHRpbGUtPmltYWdlLCBhcmVhLT54LCBhcmVhLT55
LCBhcmVhLT53LCBhcmVhLT5oKTsKQEAgLTYyOSwyNyArNjI5LDI3IEBAIHN0YXRpYyBpbmxpbmUg
dm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfbW9kZWxfbWF0cml4X2NyZWF0ZShFd2tfVGls
ZWRfQmFja2luCiAgICAgICAgIGV3a190aWxlX21hdHJpeF9mcmVlKHByaXYtPm1vZGVsLm1hdHJp
eCk7CiAgICAgfQogCi0gICAgcHJpdi0+bW9kZWwubWF0cml4ID0gZXdrX3RpbGVfbWF0cml4X25l
dyh0aWxlVW51c2VkQ2FjaGUsIHByaXYtPm1vZGVsLmN1ci5jb2xzLCBwcml2LT5tb2RlbC5jdXIu
cm93cywgcHJpdi0+Y3NwYWNlLCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcmVuZGVyLCBwcml2
KTsKKyAgICBwcml2LT5tb2RlbC5tYXRyaXggPSBld2tfdGlsZV9tYXRyaXhfbmV3KHRpbGVVbnVz
ZWRDYWNoZSwgcHJpdi0+bW9kZWwuY3VycmVudC5jb2x1bW5zLCBwcml2LT5tb2RlbC5jdXJyZW50
LnJvd3MsIHByaXYtPmNvbG9yU3BhY2UsIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9yZW5kZXIs
IHByaXYpOwogfQogCiBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRf
bWVtYmVyX2RlbChFdmFzX09iamVjdCogZXdrVGlsZSwgRXZhc19PYmplY3QqIG1lbWJlcikKIHsK
ICAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihld2tUaWxlLCBwcml2KTsKLSAgICBpZiAoIXBy
aXYtPmNvbnRlbnRzX2NsaXBwZXIpCisgICAgaWYgKCFwcml2LT5jb250ZW50c0NsaXBwZXIpCiAg
ICAgICAgIHJldHVybjsKICAgICBldmFzX29iamVjdF9jbGlwX3Vuc2V0KG1lbWJlcik7Ci0gICAg
aWYgKCFldmFzX29iamVjdF9jbGlwZWVzX2dldChwcml2LT5jb250ZW50c19jbGlwcGVyKSkKLSAg
ICAgICAgZXZhc19vYmplY3RfaGlkZShwcml2LT5jb250ZW50c19jbGlwcGVyKTsKKyAgICBpZiAo
IWV2YXNfb2JqZWN0X2NsaXBlZXNfZ2V0KHByaXYtPmNvbnRlbnRzQ2xpcHBlcikpCisgICAgICAg
IGV2YXNfb2JqZWN0X2hpZGUocHJpdi0+Y29udGVudHNDbGlwcGVyKTsKIH0KIAogc3RhdGljIHZv
aWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X21lbWJlcl9hZGQoRXZhc19PYmplY3Qq
IGV3a1RpbGUsIEV2YXNfT2JqZWN0KiBtZW1iZXIpCiB7CiAgICAgUFJJVl9EQVRBX0dFVF9PUl9S
RVRVUk4oZXdrVGlsZSwgcHJpdik7Ci0gICAgaWYgKCFwcml2LT5jb250ZW50c19jbGlwcGVyKQor
ICAgIGlmICghcHJpdi0+Y29udGVudHNDbGlwcGVyKQogICAgICAgICByZXR1cm47Ci0gICAgZXZh
c19vYmplY3RfY2xpcF9zZXQobWVtYmVyLCBwcml2LT5jb250ZW50c19jbGlwcGVyKTsKKyAgICBl
dmFzX29iamVjdF9jbGlwX3NldChtZW1iZXIsIHByaXYtPmNvbnRlbnRzQ2xpcHBlcik7CiAgICAg
aWYgKGV2YXNfb2JqZWN0X3Zpc2libGVfZ2V0KGV3a1RpbGUpKQotICAgICAgICBldmFzX29iamVj
dF9zaG93KHByaXYtPmNvbnRlbnRzX2NsaXBwZXIpOworICAgICAgICBldmFzX29iamVjdF9zaG93
KHByaXYtPmNvbnRlbnRzQ2xpcHBlcik7CiB9CiAKICNpZmRlZiBERUJVR19NRU1fTEVBS1MKQEAg
LTY3Niw5ICs2NzYsOSBAQCBzdGF0aWMgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV9zaWdfdXNyKHZvaWQqIGRhdGEsIGludCB0eXBlLCB2b2lkKiBldgogICAgIEV3a19UaWxlZF9C
YWNraW5nX1N0b3JlX0RhdGEqIHByaXYgPSAoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSop
ZGF0YTsKIAogICAgIGlmIChzaWctPm51bWJlciA9PSAyKSB7Ci0gICAgICAgIEV3a19UaWxlX1Vu
dXNlZF9DYWNoZSogdHVjOwotICAgICAgICB0dWMgPSBld2tfdGlsZV9tYXRyaXhfdW51c2VkX2Nh
Y2hlX2dldChwcml2LT5tb2RlbC5tYXRyaXgpOwotICAgICAgICBld2tfdGlsZV91bnVzZWRfY2Fj
aGVfYXV0b19mbHVzaCh0dWMpOworICAgICAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHRpbGll
VW51c2VkQ2FjaGU7CisgICAgICAgIHRpbGllVW51c2VkQ2FjaGUgPSBld2tfdGlsZV9tYXRyaXhf
dW51c2VkX2NhY2hlX2dldChwcml2LT5tb2RlbC5tYXRyaXgpOworICAgICAgICBld2tfdGlsZV91
bnVzZWRfY2FjaGVfYXV0b19mbHVzaCh0aWxpZVVudXNlZENhY2hlKTsKICAgICB9CiAKICAgICBf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19kYmcocHJpdik7CkBAIC02OTEsNyArNjkxLDcg
QEAgc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2FkZChFdmFzX09i
amVjdCogZXdrVGlsZSkKIHsKICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2
OwogCi0gICAgREJHKCJvPSVwIiwgZXdrVGlsZSk7CisgICAgREJHKCJld2tUaWxlPSVwIiwgZXdr
VGlsZSk7CiAKICAgICBwcml2ID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVf
RGF0YSo+KGNhbGxvYygxLCBzaXplb2YoKnByaXYpKSk7CiAgICAgaWYgKCFwcml2KQpAQCAtNzA4
LDMzICs3MDgsMzMgQEAgc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0
X2FkZChFdmFzX09iamVjdCogZXdrVGlsZSkKICAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLngg
PSAwOwogICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSA9IDA7CiAKLSAgICBwcml2LT5tb2Rl
bC5iYXNlLmNvbCA9IDA7CisgICAgcHJpdi0+bW9kZWwuYmFzZS5jb2x1bW4gPSAwOwogICAgIHBy
aXYtPm1vZGVsLmJhc2Uucm93ID0gMDsKLSAgICBwcml2LT5tb2RlbC5jdXIuY29scyA9IDE7Ci0g
ICAgcHJpdi0+bW9kZWwuY3VyLnJvd3MgPSAxOwotICAgIHByaXYtPm1vZGVsLm9sZC5jb2xzID0g
MDsKKyAgICBwcml2LT5tb2RlbC5jdXJyZW50LmNvbHVtbnMgPSAxOworICAgIHByaXYtPm1vZGVs
LmN1cnJlbnQucm93cyA9IDE7CisgICAgcHJpdi0+bW9kZWwub2xkLmNvbHVtbnMgPSAwOwogICAg
IHByaXYtPm1vZGVsLm9sZC5yb3dzID0gMDsKICAgICBwcml2LT5tb2RlbC53aWR0aCA9IDA7CiAg
ICAgcHJpdi0+bW9kZWwuaGVpZ2h0ID0gMDsKICAgICBwcml2LT5yZW5kZXIuc3VzcGVuZCA9IEVJ
TkFfRkFMU0U7Ci0gICAgcHJpdi0+Y3NwYWNlID0gRVZBU19DT0xPUlNQQUNFX0FSR0I4ODg4OyAv
LyBUT0RPOiBkZXRlY3QgaXQuCisgICAgcHJpdi0+Y29sb3JTcGFjZSA9IEVWQVNfQ09MT1JTUEFD
RV9BUkdCODg4ODsgLy8gVE9ETzogZGV0ZWN0IGl0LgogCiAgICAgZXZhc19vYmplY3Rfc21hcnRf
ZGF0YV9zZXQoZXdrVGlsZSwgcHJpdik7CiAgICAgX3BhcmVudF9zYy5hZGQoZXdrVGlsZSk7CiAK
LSAgICBwcml2LT5jb250ZW50c19jbGlwcGVyID0gZXZhc19vYmplY3RfcmVjdGFuZ2xlX2FkZCgK
KyAgICBwcml2LT5jb250ZW50c0NsaXBwZXIgPSBldmFzX29iamVjdF9yZWN0YW5nbGVfYWRkKAog
ICAgICAgICBldmFzX29iamVjdF9ldmFzX2dldChld2tUaWxlKSk7Ci0gICAgZXZhc19vYmplY3Rf
bW92ZShwcml2LT5jb250ZW50c19jbGlwcGVyLCAwLCAwKTsKLSAgICBldmFzX29iamVjdF9yZXNp
emUocHJpdi0+Y29udGVudHNfY2xpcHBlciwKKyAgICBldmFzX29iamVjdF9tb3ZlKHByaXYtPmNv
bnRlbnRzQ2xpcHBlciwgMCwgMCk7CisgICAgZXZhc19vYmplY3RfcmVzaXplKHByaXYtPmNvbnRl
bnRzQ2xpcHBlciwKICAgICAgICAgICAgICAgICAgICAgICAgcHJpdi0+bW9kZWwud2lkdGgsIHBy
aXYtPm1vZGVsLmhlaWdodCk7Ci0gICAgZXZhc19vYmplY3RfY29sb3Jfc2V0KHByaXYtPmNvbnRl
bnRzX2NsaXBwZXIsIDI1NSwgMjU1LCAyNTUsIDI1NSk7Ci0gICAgZXZhc19vYmplY3Rfc2hvdyhw
cml2LT5jb250ZW50c19jbGlwcGVyKTsKLSAgICBldmFzX29iamVjdF9zbWFydF9tZW1iZXJfYWRk
KHByaXYtPmNvbnRlbnRzX2NsaXBwZXIsIGV3a1RpbGUpOworICAgIGV2YXNfb2JqZWN0X2NvbG9y
X3NldChwcml2LT5jb250ZW50c0NsaXBwZXIsIDI1NSwgMjU1LCAyNTUsIDI1NSk7CisgICAgZXZh
c19vYmplY3Rfc2hvdyhwcml2LT5jb250ZW50c0NsaXBwZXIpOworICAgIGV2YXNfb2JqZWN0X3Nt
YXJ0X21lbWJlcl9hZGQocHJpdi0+Y29udGVudHNDbGlwcGVyLCBld2tUaWxlKTsKIAogICAgIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9tb2RlbF9tYXRyaXhfY3JlYXRlKHByaXYsIDApOwogICAg
IGV2YXNfb2JqZWN0X21vdmUocHJpdi0+YmFzZS5jbGlwcGVyLCAwLCAwKTsKICAgICBldmFzX29i
amVjdF9yZXNpemUocHJpdi0+YmFzZS5jbGlwcGVyLCAwLCAwKTsKLSAgICBldmFzX29iamVjdF9j
bGlwX3NldChwcml2LT5jb250ZW50c19jbGlwcGVyLCBwcml2LT5iYXNlLmNsaXBwZXIpOworICAg
IGV2YXNfb2JqZWN0X2NsaXBfc2V0KHByaXYtPmNvbnRlbnRzQ2xpcHBlciwgcHJpdi0+YmFzZS5j
bGlwcGVyKTsKIAogI2lmZGVmIERFQlVHX01FTV9MRUFLUwogICAgIHByaXYtPnNpZ191c3IgPSBl
Y29yZV9ldmVudF9oYW5kbGVyX2FkZApAQCAtNzQ1LDExICs3NDUsMTEgQEAgc3RhdGljIHZvaWQg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2FkZChFdmFzX09iamVjdCogZXdrVGlsZSkK
IHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9kZWwoRXZhc19PYmpl
Y3QqIGV3a1RpbGUpCiB7CiAgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4oZXdrVGlsZSwgcHJp
dik7Ci0gICAgREJHKCJvPSVwIiwgZXdrVGlsZSk7Ci0gICAgRXdrX1RpbGVfVW51c2VkX0NhY2hl
KiB0dWM7CisgICAgREJHKCJld2tUaWxlJXAiLCBld2tUaWxlKTsKKyAgICBFd2tfVGlsZV9VbnVz
ZWRfQ2FjaGUqIHRpbGVVbnVzZWRDYWNoZTsKIAotICAgIHR1YyA9IGV3a190aWxlX21hdHJpeF91
bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7Ci0gICAgZXdrX3RpbGVfdW51c2Vk
X2NhY2hlX3VubG9ja19hcmVhKHR1Yyk7CisgICAgdGlsZVVudXNlZENhY2hlID0gZXdrX3RpbGVf
bWF0cml4X3VudXNlZF9jYWNoZV9nZXQocHJpdi0+bW9kZWwubWF0cml4KTsKKyAgICBld2tfdGls
ZV91bnVzZWRfY2FjaGVfdW5sb2NrX2FyZWEodGlsZVVudXNlZENhY2hlKTsKIAogICAgIF9ld2tf
dGlsZWRfYmFja2luZ19zdG9yZV9mbHVzaChwcml2KTsKIApAQCAtNzY0LDggKzc2NCw4IEBAIHN0
YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9kZWwoRXZhc19PYmplY3Qq
IGV3a1RpbGUpCiAjZW5kaWYKIAogICAgIGV3a190aWxlX21hdHJpeF9mcmVlKHByaXYtPm1vZGVs
Lm1hdHJpeCk7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfbWVtYmVyX2RlbChwcml2LT5jb250ZW50
c19jbGlwcGVyKTsKLSAgICBldmFzX29iamVjdF9kZWwocHJpdi0+Y29udGVudHNfY2xpcHBlcik7
CisgICAgZXZhc19vYmplY3Rfc21hcnRfbWVtYmVyX2RlbChwcml2LT5jb250ZW50c0NsaXBwZXIp
OworICAgIGV2YXNfb2JqZWN0X2RlbChwcml2LT5jb250ZW50c0NsaXBwZXIpOwogCiAgICAgX3Bh
cmVudF9zYy5kZWwoZXdrVGlsZSk7CiAKQEAgLTc3NywyMyArNzc3LDIzIEBAIHN0YXRpYyB2b2lk
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9kZWwoRXZhc19PYmplY3QqIGV3a1RpbGUp
CiAKIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9tb3ZlKEV2YXNf
T2JqZWN0KiBld2tUaWxlLCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSkKIHsKLSAgICBEQkco
Im89JXAsIG5ldyBwb3M6ICVkeCVkIiwgZXdrVGlsZSwgeCwgeSk7CisgICAgREJHKCJld2tUaWxl
JXAsIG5ldyBwb3M6ICVkeCVkIiwgZXdrVGlsZSwgeCwgeSk7CiAKICAgICBQUklWX0RBVEFfR0VU
X09SX1JFVFVSTihld2tUaWxlLCBwcml2KTsKIAotICAgIGlmIChwcml2LT5jaGFuZ2VkLnBvcykK
KyAgICBpZiAocHJpdi0+Y2hhbmdlZC5wb3NpdGlvbikKICAgICAgICAgcmV0dXJuOwogCiAgICAg
aWYgKHByaXYtPnZpZXcueCA9PSB4ICYmIHByaXYtPnZpZXcueSA9PSB5KQogICAgICAgICByZXR1
cm47CiAKLSAgICBwcml2LT5jaGFuZ2VkLnBvcyA9IEVJTkFfVFJVRTsKKyAgICBwcml2LT5jaGFu
Z2VkLnBvc2l0aW9uID0gRUlOQV9UUlVFOwogICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9j
aGFuZ2VkKHByaXYpOwogfQogCiBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
c21hcnRfcmVzaXplKEV2YXNfT2JqZWN0KiBld2tUaWxlLCBFdmFzX0Nvb3JkIHdpZHRoLCBFdmFz
X0Nvb3JkIGhlaWdodCkKIHsKLSAgICBEQkcoIm89JXAsIG5ldyBzaXplOiAlZHglZCIsIGV3a1Rp
bGUsIHdpZHRoLCBoZWlnaHQpOworICAgIERCRygiZXdrVGlsZSVwLCBuZXcgc2l6ZTogJWR4JWQi
LCBld2tUaWxlLCB3aWR0aCwgaGVpZ2h0KTsKIAogICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJO
KGV3a1RpbGUsIHByaXYpOwogCkBAIC04MDksMjUgKzgwOSwyNSBAQCBzdGF0aWMgdm9pZCBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfcmVzaXplKEV2YXNfT2JqZWN0KiBld2tUaWxlLCBF
dmFzX0NvbwogCiBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcmVjYWxjX3Jl
bmRlcmVycyhFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2LCBFdmFzX0Nvb3JkIHdp
ZHRoLCBFdmFzX0Nvb3JkIGhlaWdodCwgRXZhc19Db29yZCB0aWxlV2lkdGgsIEV2YXNfQ29vcmQg
dGlsZUhlaWdodCkKIHsKLSAgICBsb25nIGNvbHMsIHJvd3MsIG9sZF9yb3dzLCBvbGRfY29sczsK
LSAgICBJTkYoIm89JXAsIG5ldyBzaXplOiAlZHglZCIsIHByaXYtPnNlbGYsIHdpZHRoLCBoZWln
aHQpOworICAgIGxvbmcgY29sdW1ucywgcm93cywgb2xkUm93cywgb2xkQ29sczsKKyAgICBJTkYo
ImV3a1RpbGUlcCwgbmV3IHNpemU6ICVkeCVkIiwgcHJpdi0+c2VsZiwgd2lkdGgsIGhlaWdodCk7
CiAKLSAgICBjb2xzID0gMSArIHN0YXRpY19jYXN0PGludD4oY2VpbChzdGF0aWNfY2FzdDxmbG9h
dD4od2lkdGggLyB0aWxlV2lkdGgpKSk7CisgICAgY29sdW1ucyA9IDEgKyBzdGF0aWNfY2FzdDxp
bnQ+KGNlaWwoc3RhdGljX2Nhc3Q8ZmxvYXQ+KHdpZHRoIC8gdGlsZVdpZHRoKSkpOwogICAgIHJv
d3MgPSAxICsgc3RhdGljX2Nhc3Q8aW50PihjZWlsKHN0YXRpY19jYXN0PGZsb2F0PihoZWlnaHQg
LyB0aWxlSGVpZ2h0KSkpOwogCi0gICAgSU5GKCJvPSVwIG5ldyBncmlkIHNpemUgY29sczogJWxk
LCByb3dzOiAlbGQsIHdhcyAlbGQsICVsZCIsCi0gICAgICAgIHByaXYtPnNlbGYsIGNvbHMsIHJv
d3MsIHByaXYtPnZpZXcuY29scywgcHJpdi0+dmlldy5yb3dzKTsKKyAgICBJTkYoImV3a1RpbGUl
cCBuZXcgZ3JpZCBzaXplIGNvbHM6ICVsZCwgcm93czogJWxkLCB3YXMgJWxkLCAlbGQiLAorICAg
ICAgICBwcml2LT5zZWxmLCBjb2x1bW5zLCByb3dzLCBwcml2LT52aWV3LmNvbHMsIHByaXYtPnZp
ZXcucm93cyk7CiAKLSAgICBpZiAocHJpdi0+dmlldy5jb2xzID09IGNvbHMgJiYgcHJpdi0+dmll
dy5yb3dzID09IHJvd3MpCisgICAgaWYgKHByaXYtPnZpZXcuY29scyA9PSBjb2x1bW5zICYmIHBy
aXYtPnZpZXcucm93cyA9PSByb3dzKQogICAgICAgICByZXR1cm47CiAKLSAgICBvbGRfY29scyA9
IHByaXYtPnZpZXcuY29sczsKLSAgICBvbGRfcm93cyA9IHByaXYtPnZpZXcucm93czsKKyAgICBv
bGRDb2xzID0gcHJpdi0+dmlldy5jb2xzOworICAgIG9sZFJvd3MgPSBwcml2LT52aWV3LnJvd3M7
CiAKLSAgICBpZiAocm93cyA8IG9sZF9yb3dzKSB7CisgICAgaWYgKHJvd3MgPCBvbGRSb3dzKSB7
CiAgICAgICAgIEVpbmFfSW5saXN0Kiogc3RhcnQsICoqZW5kOwogICAgICAgICBzdGFydCA9IHBy
aXYtPnZpZXcuaXRlbXMgKyByb3dzOwotICAgICAgICBlbmQgPSBwcml2LT52aWV3Lml0ZW1zICsg
b2xkX3Jvd3M7CisgICAgICAgIGVuZCA9IHByaXYtPnZpZXcuaXRlbXMgKyBvbGRSb3dzOwogICAg
ICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19yb3dzX3JhbmdlX2RlbChwcml2LCBz
dGFydCwgZW5kKTsKICAgICB9CiAKQEAgLTgzNywzNiArODM3LDM2IEBAIHN0YXRpYyB2b2lkIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9yZWNhbGNfcmVuZGVyZXJzKEV3a19UaWxlZF9CYWNraW5n
X1N0b3JlX0RhCiAKICAgICBwcml2LT52aWV3Lml0ZW1zID0gc3RhdGljX2Nhc3Q8RWluYV9Jbmxp
c3QqKj4obmV3SXRlbXMpOwogICAgIHByaXYtPnZpZXcucm93cyA9IHJvd3M7Ci0gICAgcHJpdi0+
dmlldy5jb2xzID0gY29sczsKLSAgICBpZiAocm93cyA+IG9sZF9yb3dzKSB7Ci0gICAgICAgIEVp
bmFfSW5saXN0Kiogc3RhcnQgPSBwcml2LT52aWV3Lml0ZW1zICsgb2xkX3Jvd3M7CisgICAgcHJp
di0+dmlldy5jb2xzID0gY29sdW1uczsKKyAgICBpZiAocm93cyA+IG9sZFJvd3MpIHsKKyAgICAg
ICAgRWluYV9Jbmxpc3QqKiBzdGFydCA9IHByaXYtPnZpZXcuaXRlbXMgKyBvbGRSb3dzOwogICAg
ICAgICBFaW5hX0lubGlzdCoqIGVuZCA9IHByaXYtPnZpZXcuaXRlbXMgKyByb3dzOwogICAgICAg
ICBmb3IgKDsgc3RhcnQgPCBlbmQ7IHN0YXJ0KyspIHsKICAgICAgICAgICAgICpzdGFydCA9IDA7
Ci0gICAgICAgICAgICBFaW5hX0Jvb2wgciA9IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3
X2NvbHNfZW5kX2FkZChwcml2LCBzdGFydCwgMCwgY29scyk7CisgICAgICAgICAgICBFaW5hX0Jv
b2wgciA9IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X2NvbHNfZW5kX2FkZChwcml2LCBz
dGFydCwgMCwgY29sdW1ucyk7CiAgICAgICAgICAgICBpZiAoIXIpIHsKLSAgICAgICAgICAgICAg
ICBDUklUSUNBTCgiZmFpbGVkIHRvIGFsbG9jYXRlICVsZCBjb2x1bW5zIiwgY29scyk7Ci0gICAg
ICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcm93c19yYW5nZV9kZWwo
cHJpdiwgcHJpdi0+dmlldy5pdGVtcyArIG9sZF9yb3dzLCBzdGFydCk7Ci0gICAgICAgICAgICAg
ICAgcHJpdi0+dmlldy5yb3dzID0gb2xkX3Jvd3M7CisgICAgICAgICAgICAgICAgQ1JJVElDQUwo
ImZhaWxlZCB0byBhbGxvY2F0ZSAlbGQgY29sdW1ucyIsIGNvbHVtbnMpOworICAgICAgICAgICAg
ICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3Jvd3NfcmFuZ2VfZGVsKHByaXYsIHBy
aXYtPnZpZXcuaXRlbXMgKyBvbGRSb3dzLCBzdGFydCk7CisgICAgICAgICAgICAgICAgcHJpdi0+
dmlldy5yb3dzID0gb2xkUm93czsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoY29scyAhPSBvbGRfY29scykgewotICAg
ICAgICBpbnQgdG9kbyA9IGNvbHMgLSBvbGRfY29sczsKKyAgICBpZiAoY29sdW1ucyAhPSBvbGRD
b2xzKSB7CisgICAgICAgIGludCB0b2RvID0gY29sdW1ucyAtIG9sZENvbHM7CiAgICAgICAgIEVp
bmFfSW5saXN0Kiogc3RhcnQgPSBwcml2LT52aWV3Lml0ZW1zOwotICAgICAgICBFaW5hX0lubGlz
dCoqIGVuZCA9IHN0YXJ0ICsgc3RkOjptaW4ob2xkX3Jvd3MsIHJvd3MpOworICAgICAgICBFaW5h
X0lubGlzdCoqIGVuZCA9IHN0YXJ0ICsgc3RkOjptaW4ob2xkUm93cywgcm93cyk7CiAgICAgICAg
IGlmICh0b2RvID4gMCkgewogICAgICAgICAgICAgZm9yICg7IHN0YXJ0IDwgZW5kOyBzdGFydCsr
KSB7Ci0gICAgICAgICAgICAgICAgRWluYV9Cb29sIHIgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfdmlld19jb2xzX2VuZF9hZGQocHJpdiwgc3RhcnQsIG9sZF9jb2xzLCB0b2RvKTsKLSAgICAg
ICAgICAgICAgICBpZiAoIXIpIHsKKyAgICAgICAgICAgICAgICBFaW5hX0Jvb2wgcmVzdWx0ID0g
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfY29sc19lbmRfYWRkKHByaXYsIHN0YXJ0LCBv
bGRDb2xzLCB0b2RvKTsKKyAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdCkgewogICAgICAgICAg
ICAgICAgICAgICBDUklUSUNBTCgiZmFpbGVkIHRvIGFsbG9jYXRlICVkIGNvbHVtbnMhIiwgdG9k
byk7CiAKICAgICAgICAgICAgICAgICAgICAgZm9yIChzdGFydC0tOyBzdGFydCA+PSBwcml2LT52
aWV3Lml0ZW1zOyBzdGFydC0tKQogICAgICAgICAgICAgICAgICAgICAgICAgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX3ZpZXdfY29sc19lbmRfZGVsKHByaXYsIHN0YXJ0LCB0b2RvKTsKLSAgICAg
ICAgICAgICAgICAgICAgaWYgKHJvd3MgPiBvbGRfcm93cykgewotICAgICAgICAgICAgICAgICAg
ICAgICAgc3RhcnQgPSBwcml2LT52aWV3Lml0ZW1zICsgb2xkX3Jvd3M7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChyb3dzID4gb2xkUm93cykgeworICAgICAgICAgICAgICAgICAgICAgICAgc3Rh
cnQgPSBwcml2LT52aWV3Lml0ZW1zICsgb2xkUm93czsKICAgICAgICAgICAgICAgICAgICAgICAg
IGVuZCA9IHByaXYtPnZpZXcuaXRlbXMgKyByb3dzOwogICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yICg7IHN0YXJ0IDwgZW5kOyBzdGFydCsrKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X2NvbHNfZW5kX2RlbChwcml2LCBzdGFydCwg
dG9kbyk7CkBAIC05MDEsOSArOTAxLDkgQEAgc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV92aWV3X2RiZyhjb25zdCBFd2tfVGlsZWRfQmFja2luZ19TdG8KICAgICBF
aW5hX0lubGlzdCoqIHN0YXJ0LCAqKmVuZDsKICAgICBwcmludGYoInRpbGVzPSUybGQsJTJsZCAg
bW9kZWw9JTJsZCwlMmxkIFslZHglZF0gYmFzZT0lKzNsZCwlKzRsZCBvZmZzZXQ9JSs0ZCwlKzRk
IG9sZD0lKzRkLCUrNGQgYmFzZT0lKzNkLCUrM2RcbiIsCiAgICAgICAgICAgIHByaXYtPnZpZXcu
Y29scywgcHJpdi0+dmlldy5yb3dzLAotICAgICAgICAgICBwcml2LT5tb2RlbC5jdXIuY29scywg
cHJpdi0+bW9kZWwuY3VyLnJvd3MsCisgICAgICAgICAgIHByaXYtPm1vZGVsLmN1cnJlbnQuY29s
dW1ucywgcHJpdi0+bW9kZWwuY3VycmVudC5yb3dzLAogICAgICAgICAgICBwcml2LT5tb2RlbC53
aWR0aCwgcHJpdi0+bW9kZWwuaGVpZ2h0LAotICAgICAgICAgICBwcml2LT5tb2RlbC5iYXNlLmNv
bCwgcHJpdi0+bW9kZWwuYmFzZS5yb3csCisgICAgICAgICAgIHByaXYtPm1vZGVsLmJhc2UuY29s
dW1uLCBwcml2LT5tb2RlbC5iYXNlLnJvdywKICAgICAgICAgICAgcHJpdi0+dmlldy5vZmZzZXQu
Y3VyLngsIHByaXYtPnZpZXcub2Zmc2V0LmN1ci55LAogICAgICAgICAgICBwcml2LT52aWV3Lm9m
ZnNldC5vbGQueCwgcHJpdi0+dmlldy5vZmZzZXQub2xkLnksCiAgICAgICAgICAgIHByaXYtPnZp
ZXcub2Zmc2V0LmJhc2UueCwgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55KTsKQEAgLTkxMSwxNSAr
OTExLDE1IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmll
d19kYmcoY29uc3QgRXdrX1RpbGVkX0JhY2tpbmdfU3RvCiAgICAgc3RhcnQgPSBwcml2LT52aWV3
Lml0ZW1zOwogICAgIGVuZCA9IHByaXYtPnZpZXcuaXRlbXMgKyBwcml2LT52aWV3LnJvd3M7CiAg
ICAgZm9yICg7IHN0YXJ0IDwgZW5kOyBzdGFydCsrKSB7Ci0gICAgICAgIGNvbnN0IEV3a19UaWxl
ZF9CYWNraW5nX1N0b3JlX0l0ZW0qIGl0OworICAgICAgICBjb25zdCBFd2tfVGlsZWRfQmFja2lu
Z19TdG9yZV9JdGVtKiBpdGVtOwogCi0gICAgICAgIEVJTkFfSU5MSVNUX0ZPUkVBQ0goKnN0YXJ0
LCBpdCkgewotICAgICAgICAgICAgcHJpbnRmKCIgJSs0ZCwlKzRkICIsIGl0LT5nZW9tZXRyeS54
LCBpdC0+Z2VvbWV0cnkueSk7CisgICAgICAgIEVJTkFfSU5MSVNUX0ZPUkVBQ0goKnN0YXJ0LCBp
dGVtKSB7CisgICAgICAgICAgICBwcmludGYoIiAlKzRkLCUrNGQgIiwgaXRlbS0+Z2VvbWV0cnku
eCwgaXRlbS0+Z2VvbWV0cnkueSk7CiAKLSAgICAgICAgICAgIGlmICghaXQtPnRpbGUpCisgICAg
ICAgICAgICBpZiAoIWl0ZW0tPnRpbGUpCiAgICAgICAgICAgICAgICAgcHJpbnRmKCIgICAgICAg
ICAgICA7Iik7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcHJpbnRmKCIlOHAg
JWx1LCVsdTsiLCBpdC0+dGlsZSwgaXQtPnRpbGUtPmNvbCwgaXQtPnRpbGUtPnJvdyk7CisgICAg
ICAgICAgICAgICAgcHJpbnRmKCIlOHAgJWx1LCVsdTsiLCBpdGVtLT50aWxlLCBpdGVtLT50aWxl
LT5jb2wsIGl0ZW0tPnRpbGUtPnJvdyk7CiAgICAgICAgIH0KICAgICAgICAgcHJpbnRmKCJcbiIp
OwogICAgIH0KQEAgLTk0MSwzNyArOTQxLDM3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfdmlld19kYmcoY29uc3QgRXdrX1RpbGVkX0JhY2tpbmdfU3RvCiAg
Ki8KIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3dyYXBfdXAoRXdr
X1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdiwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3Jk
IHksIHVuc2lnbmVkIGludCBjb3VudCkKIHsKLSAgICB1bnNpZ25lZCBpbnQgbGFzdF9yb3cgPSBw
cml2LT52aWV3LnJvd3MgLSAxOwotICAgIEV2YXNfQ29vcmQgdHcgPSBwcml2LT52aWV3LnRpbGUu
d2lkdGg7Ci0gICAgRXZhc19Db29yZCB0aCA9IHByaXYtPnZpZXcudGlsZS5oZWlnaHQ7Ci0gICAg
RXZhc19Db29yZCBvZmZfeSA9IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSArIGNvdW50ICogdGg7
Ci0gICAgRXZhc19Db29yZCBveSA9IHkgKyAobGFzdF9yb3cgLSBjb3VudCArIDEpICogdGggKyBv
ZmZfeTsKLSAgICBFaW5hX0lubGlzdCoqIGl0cl9zdGFydCwgKippdHJfZW5kOworICAgIHVuc2ln
bmVkIGludCBsYXN0Um93ID0gcHJpdi0+dmlldy5yb3dzIC0gMTsKKyAgICBFdmFzX0Nvb3JkIHRp
bGVXaWR0aCA9IHByaXYtPnZpZXcudGlsZS53aWR0aDsKKyAgICBFdmFzX0Nvb3JkIHRpbGVIZWln
aHQgPSBwcml2LT52aWV3LnRpbGUuaGVpZ2h0OworICAgIEV2YXNfQ29vcmQgb2Zmc2V0WSA9IHBy
aXYtPnZpZXcub2Zmc2V0LmJhc2UueSArIGNvdW50ICogdGlsZUhlaWdodDsKKyAgICBFdmFzX0Nv
b3JkIHRpbGVQb3NpdGlvblkgPSB5ICsgKGxhc3RSb3cgLSBjb3VudCArIDEpICogdGlsZUhlaWdo
dCArIG9mZnNldFk7CisgICAgRWluYV9Jbmxpc3QqKiBpdGVyYXRvclN0YXJ0LCAqKml0ZXJhdG9y
RW5kOwogCi0gICAgaXRyX3N0YXJ0ID0gcHJpdi0+dmlldy5pdGVtczsKLSAgICBpdHJfZW5kID0g
aXRyX3N0YXJ0ICsgbGFzdF9yb3c7CisgICAgaXRlcmF0b3JTdGFydCA9IHByaXYtPnZpZXcuaXRl
bXM7CisgICAgaXRlcmF0b3JFbmQgPSBpdGVyYXRvclN0YXJ0ICsgbGFzdFJvdzsKIAogICAgIGZv
ciAoOyBjb3VudCA+IDA7IGNvdW50LS0pIHsKLSAgICAgICAgRWluYV9Jbmxpc3QqKiBpdHI7Ci0g
ICAgICAgIEVpbmFfSW5saXN0KiB0bXAgPSAqaXRyX3N0YXJ0OwotICAgICAgICBFd2tfVGlsZWRf
QmFja2luZ19TdG9yZV9JdGVtKiBpdDsKLSAgICAgICAgRXZhc19Db29yZCBveCA9IHggKyBwcml2
LT52aWV3Lm9mZnNldC5iYXNlLng7Ci0gICAgICAgIGludCBjID0gMDsKKyAgICAgICAgRWluYV9J
bmxpc3QqKiBpdGVyYXRvckxpc3Q7CisgICAgICAgIEVpbmFfSW5saXN0KiB0ZW1wID0gKml0ZXJh
dG9yU3RhcnQ7CisgICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0qIGl0ZW07Cisg
ICAgICAgIEV2YXNfQ29vcmQgb3JpZ2lhbmxYID0geCArIHByaXYtPnZpZXcub2Zmc2V0LmJhc2Uu
eDsKKyAgICAgICAgaW50IGNvdW50MSA9IDA7CiAKLSAgICAgICAgZm9yIChpdHIgPSBpdHJfc3Rh
cnQ7IGl0ciA8IGl0cl9lbmQ7IGl0cisrKQotICAgICAgICAgICAgKml0ciA9ICooaXRyICsgMSk7
Ci0gICAgICAgICppdHIgPSB0bXA7CisgICAgICAgIGZvciAoaXRlcmF0b3JMaXN0ID0gaXRlcmF0
b3JTdGFydDsgaXRlcmF0b3JMaXN0IDwgaXRlcmF0b3JFbmQ7IGl0ZXJhdG9yTGlzdCsrKQorICAg
ICAgICAgICAgKml0ZXJhdG9yTGlzdCA9ICooaXRlcmF0b3JMaXN0ICsgMSk7CisgICAgICAgICpp
dGVyYXRvckxpc3QgPSB0ZW1wOwogCiAgICAgICAgIHByaXYtPm1vZGVsLmJhc2Uucm93Kys7Ci0g
ICAgICAgIEVJTkFfSU5MSVNUX0ZPUkVBQ0godG1wLCBpdCkgewotICAgICAgICAgICAgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fbW92ZShpdCwgb3gsIG95KTsKLSAgICAgICAgICAgIG94
ICs9IHR3OwotICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZmlsbChw
cml2LCBpdCwgYywgbGFzdF9yb3cpOwotICAgICAgICAgICAgYysrOworICAgICAgICBFSU5BX0lO
TElTVF9GT1JFQUNIKHRlbXAsIGl0ZW0pIHsKKyAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9pdGVtX21vdmUoaXRlbSwgb3JpZ2lhbmxYLCB0aWxlUG9zaXRpb25ZKTsKKyAgICAg
ICAgICAgIG9yaWdpYW5sWCArPSB0aWxlV2lkdGg7CisgICAgICAgICAgICBfZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfaXRlbV9maWxsKHByaXYsIGl0ZW0sIGNvdW50MSwgbGFzdFJvdyk7CisgICAg
ICAgICAgICBjb3VudDErKzsKICAgICAgICAgfQotICAgICAgICBveSArPSB0aDsKKyAgICAgICAg
dGlsZVBvc2l0aW9uWSArPSB0aWxlSGVpZ2h0OwogICAgIH0KLSAgICBwcml2LT52aWV3Lm9mZnNl
dC5iYXNlLnkgPSBvZmZfeTsKKyAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgPSBvZmZzZXRZ
OwogfQogCiAvKioKQEAgLTk4OSwzNiArOTg5LDM2IEBAIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV92aWV3X3dyYXBfdXAoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSoK
ICAqLwogc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfd3JhcF9kb3du
KEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYsIEV2YXNfQ29vcmQgeCwgRXZhc19D
b29yZCB5LCB1bnNpZ25lZCBpbnQgY291bnQpCiB7Ci0gICAgRXZhc19Db29yZCB0dyA9IHByaXYt
PnZpZXcudGlsZS53aWR0aDsKLSAgICBFdmFzX0Nvb3JkIHRoID0gcHJpdi0+dmlldy50aWxlLmhl
aWdodDsKLSAgICBFdmFzX0Nvb3JkIG9mZl95ID0gcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55IC0g
Y291bnQgKiB0aDsKLSAgICBFdmFzX0Nvb3JkIG95ID0geSArIG9mZl95ICsgKGNvdW50IC0gMSkg
KiB0aDsKLSAgICBFaW5hX0lubGlzdCoqIGl0cl9zdGFydCwgKippdHJfZW5kOworICAgIEV2YXNf
Q29vcmQgdGlsZVdpZHRoID0gcHJpdi0+dmlldy50aWxlLndpZHRoOworICAgIEV2YXNfQ29vcmQg
dGlsZUhlaWdodCA9IHByaXYtPnZpZXcudGlsZS5oZWlnaHQ7CisgICAgRXZhc19Db29yZCBvZmZz
ZXRZID0gcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55IC0gY291bnQgKiB0aWxlSGVpZ2h0OworICAg
IEV2YXNfQ29vcmQgdGlsZVBvc2l0aW9uWSA9IHkgKyBvZmZzZXRZICsgKGNvdW50IC0gMSkgKiB0
aWxlSGVpZ2h0OworICAgIEVpbmFfSW5saXN0KiogaXRlcmF0b3JTdGFydCwgKippdGVyYXRvckVu
ZDsKIAotICAgIGl0cl9zdGFydCA9IHByaXYtPnZpZXcuaXRlbXMgKyBwcml2LT52aWV3LnJvd3Mg
LSAxOwotICAgIGl0cl9lbmQgPSBwcml2LT52aWV3Lml0ZW1zOworICAgIGl0ZXJhdG9yU3RhcnQg
PSBwcml2LT52aWV3Lml0ZW1zICsgcHJpdi0+dmlldy5yb3dzIC0gMTsKKyAgICBpdGVyYXRvckVu
ZCA9IHByaXYtPnZpZXcuaXRlbXM7CiAKICAgICBmb3IgKDsgY291bnQgPiAwOyBjb3VudC0tKSB7
Ci0gICAgICAgIEVpbmFfSW5saXN0KiogaXRyOwotICAgICAgICBFaW5hX0lubGlzdCogdG1wID0g
Kml0cl9zdGFydDsKLSAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSogaXQ7Ci0g
ICAgICAgIEV2YXNfQ29vcmQgb3ggPSB4ICsgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54OwotICAg
ICAgICBpbnQgYyA9IDA7CisgICAgICAgIEVpbmFfSW5saXN0KiogaXRlcmF0b3JMaXN0OworICAg
ICAgICBFaW5hX0lubGlzdCogdGVtcCA9ICppdGVyYXRvclN0YXJ0OworICAgICAgICBFd2tfVGls
ZWRfQmFja2luZ19TdG9yZV9JdGVtKiBpdGVtOworICAgICAgICBFdmFzX0Nvb3JkIHRpbGVQb3Np
dGlvblggPSB4ICsgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54OworICAgICAgICBpbnQgY291bnQx
ID0gMDsKIAotICAgICAgICBmb3IgKGl0ciA9IGl0cl9zdGFydDsgaXRyID4gaXRyX2VuZDsgaXRy
LS0pCi0gICAgICAgICAgICAqaXRyID0gKihpdHIgLSAxKTsKLSAgICAgICAgKml0ciA9IHRtcDsK
KyAgICAgICAgZm9yIChpdGVyYXRvckxpc3QgPSBpdGVyYXRvclN0YXJ0OyBpdGVyYXRvckxpc3Qg
PiBpdGVyYXRvckVuZDsgaXRlcmF0b3JMaXN0LS0pCisgICAgICAgICAgICAqaXRlcmF0b3JMaXN0
ID0gKihpdGVyYXRvckxpc3QgLSAxKTsKKyAgICAgICAgKml0ZXJhdG9yTGlzdCA9IHRlbXA7CiAK
ICAgICAgICAgcHJpdi0+bW9kZWwuYmFzZS5yb3ctLTsKLSAgICAgICAgRUlOQV9JTkxJU1RfRk9S
RUFDSCh0bXAsIGl0KSB7Ci0gICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRl
bV9tb3ZlKGl0LCBveCwgb3kpOwotICAgICAgICAgICAgb3ggKz0gdHc7Ci0gICAgICAgICAgICBf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9maWxsKHByaXYsIGl0LCBjLCAwKTsKLSAgICAg
ICAgICAgIGMrKzsKKyAgICAgICAgRUlOQV9JTkxJU1RfRk9SRUFDSCh0ZW1wLCBpdGVtKSB7Cisg
ICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9tb3ZlKGl0ZW0sIHRpbGVQ
b3NpdGlvblgsIHRpbGVQb3NpdGlvblkpOworICAgICAgICAgICAgdGlsZVBvc2l0aW9uWCArPSB0
aWxlV2lkdGg7CisgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9maWxs
KHByaXYsIGl0ZW0sIGNvdW50MSwgMCk7CisgICAgICAgICAgICBjb3VudDErKzsKICAgICAgICAg
fQotICAgICAgICBveSAtPSB0aDsKKyAgICAgICAgdGlsZVBvc2l0aW9uWSAtPSB0aWxlSGVpZ2h0
OwogICAgIH0KLSAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgPSBvZmZfeTsKKyAgICBwcml2
LT52aWV3Lm9mZnNldC5iYXNlLnkgPSBvZmZzZXRZOwogfQogCiAvKioKQEAgLTEwMzYsMzYgKzEw
MzYsMzYgQEAgc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfd3JhcF9k
b3duKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEKICAqLwogc3RhdGljIHZvaWQgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfd3JhcF9sZWZ0KEV3a19UaWxlZF9CYWNraW5nX1N0b3Jl
X0RhdGEqIHByaXYsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5LCB1bnNpZ25lZCBpbnQgY291
bnQpCiB7Ci0gICAgdW5zaWduZWQgaW50IHIsIGxhc3RfY29sID0gcHJpdi0+dmlldy5jb2xzIC0g
MTsKLSAgICBFdmFzX0Nvb3JkIHR3ID0gcHJpdi0+dmlldy50aWxlLndpZHRoOwotICAgIEV2YXNf
Q29vcmQgdGggPSBwcml2LT52aWV3LnRpbGUuaGVpZ2h0OwotICAgIEV2YXNfQ29vcmQgb2ZmX3gg
PSBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggKyBjb3VudCAqIHR3OworICAgIHVuc2lnbmVkIGlu
dCByb3csIGxhc3RDb2x1bW4gPSBwcml2LT52aWV3LmNvbHMgLSAxOworICAgIEV2YXNfQ29vcmQg
dGlsZVdpZHRoID0gcHJpdi0+dmlldy50aWxlLndpZHRoOworICAgIEV2YXNfQ29vcmQgdGlsZUhl
aWdodCA9IHByaXYtPnZpZXcudGlsZS5oZWlnaHQ7CisgICAgRXZhc19Db29yZCBvZmZzZXRYID0g
cHJpdi0+dmlldy5vZmZzZXQuYmFzZS54ICsgY291bnQgKiB0aWxlV2lkdGg7CiAgICAgRXZhc19D
b29yZCBveSA9IHkgKyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnk7Ci0gICAgRWluYV9Jbmxpc3Qq
KiBpdHI7Ci0gICAgRWluYV9Jbmxpc3QqKiBpdHJfZW5kOworICAgIEVpbmFfSW5saXN0KiogaXRl
cmF0b3I7CisgICAgRWluYV9Jbmxpc3QqKiBpdGVyYXRvckVuZDsKIAotICAgIGl0ciA9IHByaXYt
PnZpZXcuaXRlbXM7Ci0gICAgaXRyX2VuZCA9IGl0ciArIHByaXYtPnZpZXcucm93czsKLSAgICBy
ID0gMDsKKyAgICBpdGVyYXRvciA9IHByaXYtPnZpZXcuaXRlbXM7CisgICAgaXRlcmF0b3JFbmQg
PSBpdGVyYXRvciArIHByaXYtPnZpZXcucm93czsKKyAgICByb3cgPSAwOwogCi0gICAgcHJpdi0+
bW9kZWwuYmFzZS5jb2wgKz0gY291bnQ7CisgICAgcHJpdi0+bW9kZWwuYmFzZS5jb2x1bW4gKz0g
Y291bnQ7CiAKLSAgICBmb3IgKDsgaXRyIDwgaXRyX2VuZDsgaXRyKyssIHIrKykgewotICAgICAg
ICBFdmFzX0Nvb3JkIG94ID0geCArIChsYXN0X2NvbCAtIGNvdW50ICsgMSkgKiB0dyArIG9mZl94
OwotICAgICAgICB1bnNpZ25lZCBpbnQgaSwgYyA9IGxhc3RfY29sIC0gY291bnQgKyAxOworICAg
IGZvciAoOyBpdGVyYXRvciA8IGl0ZXJhdG9yRW5kOyBpdGVyYXRvcisrLCByb3crKykgeworICAg
ICAgICBFdmFzX0Nvb3JkIG94ID0geCArIChsYXN0Q29sdW1uIC0gY291bnQgKyAxKSAqIHRpbGVX
aWR0aCArIG9mZnNldFg7CisgICAgICAgIHVuc2lnbmVkIGludCBjID0gbGFzdENvbHVtbiAtIGNv
dW50ICsgMTsKIAotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKywgYysrLCBveCAr
PSB0dykgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyBpKyss
IGMrKywgb3ggKz0gdGlsZVdpZHRoKSB7CiAgICAgICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19T
dG9yZV9JdGVtKiBpdDsKLSAgICAgICAgICAgIGl0ID0gRUlOQV9JTkxJU1RfQ09OVEFJTkVSX0dF
VCgqaXRyLCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKTsKLSAgICAgICAgICAgICppdHIg
PSBlaW5hX2lubGlzdF9kZW1vdGUoKml0ciwgKml0cik7CisgICAgICAgICAgICBpdCA9IEVJTkFf
SU5MSVNUX0NPTlRBSU5FUl9HRVQoKml0ZXJhdG9yLCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9J
dGVtKTsKKyAgICAgICAgICAgICppdGVyYXRvciA9IGVpbmFfaW5saXN0X2RlbW90ZSgqaXRlcmF0
b3IsICppdGVyYXRvcik7CiAKICAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9p
dGVtX21vdmUoaXQsIG94LCBveSk7Ci0gICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfaXRlbV9maWxsKHByaXYsIGl0LCBjLCByKTsKKyAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9pdGVtX2ZpbGwocHJpdiwgaXQsIGMsIHJvdyk7CiAgICAgICAgIH0KLSAgICAg
ICAgb3kgKz0gdGg7CisgICAgICAgIG95ICs9IHRpbGVIZWlnaHQ7CiAgICAgfQogCi0gICAgcHJp
di0+dmlldy5vZmZzZXQuYmFzZS54ID0gb2ZmX3g7CisgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFz
ZS54ID0gb2Zmc2V0WDsKIH0KIAogLyoqCkBAIC0xMDgzLDE4MyArMTA4MywxODMgQEAgc3RhdGlj
IHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfd3JhcF9sZWZ0KEV3a19UaWxlZF9C
YWNraW5nX1N0b3JlX0RhdGEKICAqLwogc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX3ZpZXdfd3JhcF9yaWdodChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2LCBF
dmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwgdW5zaWduZWQgaW50IGNvdW50KQogewotICAgIHVu
c2lnbmVkIGludCByOwotICAgIEV2YXNfQ29vcmQgdHcgPSBwcml2LT52aWV3LnRpbGUud2lkdGg7
Ci0gICAgRXZhc19Db29yZCB0aCA9IHByaXYtPnZpZXcudGlsZS5oZWlnaHQ7Ci0gICAgRXZhc19D
b29yZCBvZmZfeCA9IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCAtIGNvdW50ICogdHc7Ci0gICAg
RXZhc19Db29yZCBveSA9IHkgKyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnk7Ci0gICAgRWluYV9J
bmxpc3QqKiBpdHIsICoqIGl0cl9lbmQ7CisgICAgdW5zaWduZWQgaW50IHJvdzsKKyAgICBFdmFz
X0Nvb3JkIHRpbGVXaWR0aCA9IHByaXYtPnZpZXcudGlsZS53aWR0aDsKKyAgICBFdmFzX0Nvb3Jk
IHRpbGVIZWlnaHQgPSBwcml2LT52aWV3LnRpbGUuaGVpZ2h0OworICAgIEV2YXNfQ29vcmQgb2Zm
c2V0WCA9IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCAtIGNvdW50ICogdGlsZVdpZHRoOworICAg
IEV2YXNfQ29vcmQgdGlsZVBvc2l0aW9uWSA9IHkgKyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnk7
CisgICAgRWluYV9Jbmxpc3QqKiBpdGVyYXRvciwgKiogaXRlcmF0b3JFbmQ7CiAKLSAgICBpdHIg
PSBwcml2LT52aWV3Lml0ZW1zOwotICAgIGl0cl9lbmQgPSBpdHIgKyBwcml2LT52aWV3LnJvd3M7
Ci0gICAgciA9IDA7CisgICAgaXRlcmF0b3IgPSBwcml2LT52aWV3Lml0ZW1zOworICAgIGl0ZXJh
dG9yRW5kID0gaXRlcmF0b3IgKyBwcml2LT52aWV3LnJvd3M7CisgICAgcm93ID0gMDsKIAotICAg
IHByaXYtPm1vZGVsLmJhc2UuY29sIC09IGNvdW50OworICAgIHByaXYtPm1vZGVsLmJhc2UuY29s
dW1uIC09IGNvdW50OwogCi0gICAgZm9yICg7IGl0ciA8IGl0cl9lbmQ7IGl0cisrLCByKyspIHsK
LSAgICAgICAgRXZhc19Db29yZCBveCA9IHggKyAoY291bnQgLSAxKSAqIHR3ICsgb2ZmX3g7Ci0g
ICAgICAgIHVuc2lnbmVkIGludCBpLCBjID0gY291bnQgLSAxOworICAgIGZvciAoOyBpdGVyYXRv
ciA8IGl0ZXJhdG9yRW5kOyBpdGVyYXRvcisrLCByb3crKykgeworICAgICAgICBFdmFzX0Nvb3Jk
IG94ID0geCArIChjb3VudCAtIDEpICogdGlsZVdpZHRoICsgb2Zmc2V0WDsKKyAgICAgICAgdW5z
aWduZWQgaW50IGMgPSBjb3VudCAtIDE7CiAKLSAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvdW50
OyBpKyssIGMtLSwgb3ggLT0gdHcpIHsKLSAgICAgICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0
b3JlX0l0ZW0qIGl0OwotICAgICAgICAgICAgaXQgPSBFSU5BX0lOTElTVF9DT05UQUlORVJfR0VU
KCgqaXRyKS0+bGFzdCwgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSk7Ci0gICAgICAgICAg
ICAqaXRyID0gZWluYV9pbmxpc3RfcHJvbW90ZSgqaXRyLCAoKml0ciktPmxhc3QpOworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyBpKyssIGMtLSwgb3ggLT0gdGls
ZVdpZHRoKSB7CisgICAgICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKiBpdGVt
OworICAgICAgICAgICAgaXRlbSA9IEVJTkFfSU5MSVNUX0NPTlRBSU5FUl9HRVQoKCppdGVyYXRv
ciktPmxhc3QsIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0pOworICAgICAgICAgICAgKml0
ZXJhdG9yID0gZWluYV9pbmxpc3RfcHJvbW90ZSgqaXRlcmF0b3IsICgqaXRlcmF0b3IpLT5sYXN0
KTsKIAotICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fbW92ZShpdCwg
b3gsIG95KTsKLSAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2ZpbGwo
cHJpdiwgaXQsIGMsIHIpOworICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0
ZW1fbW92ZShpdGVtLCBveCwgdGlsZVBvc2l0aW9uWSk7CisgICAgICAgICAgICBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfaXRlbV9maWxsKHByaXYsIGl0ZW0sIGMsIHJvdyk7CiAgICAgICAgIH0K
LSAgICAgICAgb3kgKz0gdGg7CisgICAgICAgIHRpbGVQb3NpdGlvblkgKz0gdGlsZUhlaWdodDsK
ICAgICB9CiAKLSAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggPSBvZmZfeDsKKyAgICBwcml2
LT52aWV3Lm9mZnNldC5iYXNlLnggPSBvZmZzZXRYOwogfQogCiBzdGF0aWMgdm9pZCBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfdmlld19yZWZpbGwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0
YSogcHJpdiwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHksIGludCBzdGVwWCwgaW50IHN0ZXBZ
KQogewotICAgIEVpbmFfSW5saXN0KiogaXRyLCAqKml0cl9lbmQ7Ci0gICAgRXZhc19Db29yZCBi
YXNlX294LCBveSwgdHcsIHRoOworICAgIEVpbmFfSW5saXN0KiogaXRlcmF0b3IsICoqaXRlcmF0
b3JFbmQ7CisgICAgRXZhc19Db29yZCBiYXNlVGlsZVBvc2l0aW9uWCwgdGlsZVBvc2l0aW9uWSwg
dGlsZVdpZHRoLCB0aWxlSGVpZ2h0OwogICAgIHVuc2lnbmVkIGludCByOwogCiAgICAgZXZhc19v
YmplY3RfbW92ZShwcml2LT5iYXNlLmNsaXBwZXIsIHgsIHkpOwogCi0gICAgdHcgPSBwcml2LT52
aWV3LnRpbGUud2lkdGg7Ci0gICAgdGggPSBwcml2LT52aWV3LnRpbGUuaGVpZ2h0OworICAgIHRp
bGVXaWR0aCA9IHByaXYtPnZpZXcudGlsZS53aWR0aDsKKyAgICB0aWxlSGVpZ2h0ID0gcHJpdi0+
dmlldy50aWxlLmhlaWdodDsKIAotICAgIGJhc2Vfb3ggPSB4ICsgcHJpdi0+dmlldy5vZmZzZXQu
YmFzZS54OwotICAgIG95ID0geSArIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueTsKKyAgICBiYXNl
VGlsZVBvc2l0aW9uWCA9IHggKyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLng7CisgICAgdGlsZVBv
c2l0aW9uWSA9IHkgKyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnk7CiAKLSAgICBpdHIgPSBwcml2
LT52aWV3Lml0ZW1zOwotICAgIGl0cl9lbmQgPSBpdHIgKyBwcml2LT52aWV3LnJvd3M7CisgICAg
aXRlcmF0b3IgPSBwcml2LT52aWV3Lml0ZW1zOworICAgIGl0ZXJhdG9yRW5kID0gaXRlcmF0b3Ig
KyBwcml2LT52aWV3LnJvd3M7CiAgICAgciA9IDA7CiAKLSAgICBwcml2LT5tb2RlbC5iYXNlLmNv
bCAtPSBzdGVwWDsKKyAgICBwcml2LT5tb2RlbC5iYXNlLmNvbHVtbiAtPSBzdGVwWDsKICAgICBw
cml2LT5tb2RlbC5iYXNlLnJvdyAtPSBzdGVwWTsKIAotICAgIGZvciAoOyBpdHIgPCBpdHJfZW5k
OyBpdHIrKywgcisrKSB7Ci0gICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0qIGl0
OwotICAgICAgICBFdmFzX0Nvb3JkIG94ID0gYmFzZV9veDsKLSAgICAgICAgdW5zaWduZWQgaW50
IGMgPSAwOwotICAgICAgICBFSU5BX0lOTElTVF9GT1JFQUNIKCppdHIsIGl0KSB7Ci0gICAgICAg
ICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9maWxsKHByaXYsIGl0LCBjLCByKTsK
LSAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX21vdmUoaXQsIG94LCBv
eSk7Ci0gICAgICAgICAgICBjKys7Ci0gICAgICAgICAgICBveCArPSB0dzsKKyAgICBmb3IgKDsg
aXRlcmF0b3IgPCBpdGVyYXRvckVuZDsgaXRlcmF0b3IrKywgcisrKSB7CisgICAgICAgIEV3a19U
aWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0qIGl0ZW07CisgICAgICAgIEV2YXNfQ29vcmQgbmV3VGls
ZVBvc2l0aW9uWCA9IGJhc2VUaWxlUG9zaXRpb25YOworICAgICAgICB1bnNpZ25lZCBpbnQgY291
bnQgPSAwOworICAgICAgICBFSU5BX0lOTElTVF9GT1JFQUNIKCppdGVyYXRvciwgaXRlbSkgewor
ICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZmlsbChwcml2LCBpdGVt
LCBjb3VudCwgcik7CisgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9t
b3ZlKGl0ZW0sIG5ld1RpbGVQb3NpdGlvblgsIHRpbGVQb3NpdGlvblkpOworICAgICAgICAgICAg
Y291bnQrKzsKKyAgICAgICAgICAgIG5ld1RpbGVQb3NpdGlvblggKz0gdGlsZVdpZHRoOwogICAg
ICAgICB9Ci0gICAgICAgIG95ICs9IHRoOworICAgICAgICB0aWxlUG9zaXRpb25ZICs9IHRpbGVI
ZWlnaHQ7CiAgICAgfQogfQogCiBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
dmlld19wb3NfYXBwbHkoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdiwgRXZhc19D
b29yZCB4LCBFdmFzX0Nvb3JkIHkpCiB7Ci0gICAgRWluYV9Jbmxpc3QqKiBpdHIsICoqaXRyX2Vu
ZDsKLSAgICBFdmFzX0Nvb3JkIGJhc2Vfb3gsIG95LCB0dywgdGg7CisgICAgRWluYV9Jbmxpc3Qq
KiBpdGVyYXRvciwgKippdGVyYXRvckVuZDsKKyAgICBFdmFzX0Nvb3JkIGJhc2VUaWxlUG9zaXRp
b25YLCBiYXNlVGlsZVBvc2l0aW9uWSwgdGlsZVdpZHRoLCB0aWxlSGVpZ2h0OwogCiAgICAgZXZh
c19vYmplY3RfbW92ZShwcml2LT5iYXNlLmNsaXBwZXIsIHgsIHkpOwogCi0gICAgdHcgPSBwcml2
LT52aWV3LnRpbGUud2lkdGg7Ci0gICAgdGggPSBwcml2LT52aWV3LnRpbGUuaGVpZ2h0OworICAg
IHRpbGVXaWR0aCA9IHByaXYtPnZpZXcudGlsZS53aWR0aDsKKyAgICB0aWxlSGVpZ2h0ID0gcHJp
di0+dmlldy50aWxlLmhlaWdodDsKIAotICAgIGJhc2Vfb3ggPSB4ICsgcHJpdi0+dmlldy5vZmZz
ZXQuYmFzZS54OwotICAgIG95ID0geSArIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueTsKKyAgICBi
YXNlVGlsZVBvc2l0aW9uWCA9IHggKyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLng7CisgICAgYmFz
ZVRpbGVQb3NpdGlvblkgPSB5ICsgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55OwogCi0gICAgaXRy
ID0gcHJpdi0+dmlldy5pdGVtczsKLSAgICBpdHJfZW5kID0gaXRyICsgcHJpdi0+dmlldy5yb3dz
OwotICAgIGZvciAoOyBpdHIgPCBpdHJfZW5kOyBpdHIrKykgeworICAgIGl0ZXJhdG9yID0gcHJp
di0+dmlldy5pdGVtczsKKyAgICBpdGVyYXRvckVuZCA9IGl0ZXJhdG9yICsgcHJpdi0+dmlldy5y
b3dzOworICAgIGZvciAoOyBpdGVyYXRvciA8IGl0ZXJhdG9yRW5kOyBpdGVyYXRvcisrKSB7CiAg
ICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0qIGl0OwotICAgICAgICBFdmFzX0Nv
b3JkIG94ID0gYmFzZV9veDsKLSAgICAgICAgRUlOQV9JTkxJU1RfRk9SRUFDSCgqaXRyLCBpdCkg
ewotICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fbW92ZShpdCwgb3gs
IG95KTsKLSAgICAgICAgICAgIG94ICs9IHR3OworICAgICAgICBFdmFzX0Nvb3JkIG94ID0gYmFz
ZVRpbGVQb3NpdGlvblg7CisgICAgICAgIEVJTkFfSU5MSVNUX0ZPUkVBQ0goKml0ZXJhdG9yLCBp
dCkgeworICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fbW92ZShpdCwg
b3gsIGJhc2VUaWxlUG9zaXRpb25ZKTsKKyAgICAgICAgICAgIG94ICs9IHRpbGVXaWR0aDsKICAg
ICAgICAgfQotICAgICAgICBveSArPSB0aDsKKyAgICAgICAgYmFzZVRpbGVQb3NpdGlvblkgKz0g
dGlsZUhlaWdodDsKICAgICB9CiB9CiAKIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9zbWFydF9jYWxjdWxhdGVfb2Zmc2V0X2ZvcmNlKEV3a19UaWxlZF9CYWNraW5nX1N0b3Jl
X0RhdGEqIHByaXYpCiB7Ci0gICAgRXZhc19Db29yZCBkeCA9IHByaXYtPnZpZXcub2Zmc2V0LmN1
ci54IC0gcHJpdi0+dmlldy5vZmZzZXQub2xkLng7Ci0gICAgRXZhc19Db29yZCBkeSA9IHByaXYt
PnZpZXcub2Zmc2V0LmN1ci55IC0gcHJpdi0+dmlldy5vZmZzZXQub2xkLnk7Ci0gICAgRXZhc19D
b29yZCB0dywgdGg7Ci0gICAgaW50IHN0ZXBfeSwgc3RlcF94OworICAgIEV2YXNfQ29vcmQgZGVs
dGFYID0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggLSBwcml2LT52aWV3Lm9mZnNldC5vbGQueDsK
KyAgICBFdmFzX0Nvb3JkIGRlbHRhWSA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci55IC0gcHJpdi0+
dmlldy5vZmZzZXQub2xkLnk7CisgICAgRXZhc19Db29yZCB0aWxlV2lkdGgsIHRpbGVIZWlnaHQ7
CisgICAgaW50IHN0ZXBZLCBzdGVwWDsKIAotICAgIElORigibz0lcCwgb2Zmc2V0OiAlKzRkLCAl
KzRkICglKzRkLCAlKzRkKSIsCi0gICAgICAgIHByaXYtPnNlbGYsIGR4LCBkeSwgcHJpdi0+dmll
dy5vZmZzZXQuY3VyLngsIHByaXYtPnZpZXcub2Zmc2V0LmN1ci55KTsKKyAgICBJTkYoImV3a1Rp
bGUlcCwgb2Zmc2V0OiAlKzRkLCAlKzRkICglKzRkLCAlKzRkKSIsCisgICAgICAgIHByaXYtPnNl
bGYsIGRlbHRhWCwgZGVsdGFZLCBwcml2LT52aWV3Lm9mZnNldC5jdXIueCwgcHJpdi0+dmlldy5v
ZmZzZXQuY3VyLnkpOwogCi0gICAgdHcgPSBwcml2LT52aWV3LnRpbGUud2lkdGg7Ci0gICAgdGgg
PSBwcml2LT52aWV3LnRpbGUuaGVpZ2h0OworICAgIHRpbGVXaWR0aCA9IHByaXYtPnZpZXcudGls
ZS53aWR0aDsKKyAgICB0aWxlSGVpZ2h0ID0gcHJpdi0+dmlldy50aWxlLmhlaWdodDsKIAotICAg
IGxvbmcgbmV3X2NvbCA9IC1wcml2LT52aWV3Lm9mZnNldC5jdXIueCAvIHR3OwotICAgIHN0ZXBf
eCA9IHByaXYtPm1vZGVsLmJhc2UuY29sIC0gbmV3X2NvbDsKLSAgICBsb25nIG5ld19yb3cgPSAt
cHJpdi0+dmlldy5vZmZzZXQuY3VyLnkgLyB0aDsKLSAgICBzdGVwX3kgPSBwcml2LT5tb2RlbC5i
YXNlLnJvdyAtIG5ld19yb3c7CisgICAgbG9uZyBuZXdDb2x1bW4gPSAtcHJpdi0+dmlldy5vZmZz
ZXQuY3VyLnggLyB0aWxlV2lkdGg7CisgICAgc3RlcFggPSBwcml2LT5tb2RlbC5iYXNlLmNvbHVt
biAtIG5ld0NvbHVtbjsKKyAgICBsb25nIG5ld1JvdyA9IC1wcml2LT52aWV3Lm9mZnNldC5jdXIu
eSAvIHRpbGVIZWlnaHQ7CisgICAgc3RlcFkgPSBwcml2LT5tb2RlbC5iYXNlLnJvdyAtIG5ld1Jv
dzsKIAogICAgIHByaXYtPnZpZXcub2Zmc2V0Lm9sZC54ID0gcHJpdi0+dmlldy5vZmZzZXQuY3Vy
Lng7CiAgICAgcHJpdi0+dmlldy5vZmZzZXQub2xkLnkgPSBwcml2LT52aWV3Lm9mZnNldC5jdXIu
eTsKICAgICBldmFzX29iamVjdF9tb3ZlKAotICAgICAgICBwcml2LT5jb250ZW50c19jbGlwcGVy
LAorICAgICAgICBwcml2LT5jb250ZW50c0NsaXBwZXIsCiAgICAgICAgIHByaXYtPnZpZXcub2Zm
c2V0LmN1ci54ICsgcHJpdi0+dmlldy54LAogICAgICAgICBwcml2LT52aWV3Lm9mZnNldC5jdXIu
eSArIHByaXYtPnZpZXcueSk7CiAKLSAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggKz0gZHgg
LSBzdGVwX3ggKiB0dzsKLSAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgKz0gZHkgLSBzdGVw
X3kgKiB0aDsKKyAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggKz0gZGVsdGFYIC0gc3RlcFgg
KiB0aWxlV2lkdGg7CisgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ICs9IGRlbHRhWSAtIHN0
ZXBZICogdGlsZUhlaWdodDsKIAogICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3Jl
ZmlsbAotICAgICAgICAocHJpdiwgcHJpdi0+dmlldy54LCBwcml2LT52aWV3LnksIHN0ZXBfeCwg
c3RlcF95KTsKKyAgICAgICAgKHByaXYsIHByaXYtPnZpZXcueCwgcHJpdi0+dmlldy55LCBzdGVw
WCwgc3RlcFkpOwogfQogCiBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21h
cnRfY2FsY3VsYXRlX29mZnNldChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2LCBF
dmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSkKIHsKLSAgICBFdmFzX0Nvb3JkIGR4ID0gcHJpdi0+
dmlldy5vZmZzZXQuY3VyLnggLSBwcml2LT52aWV3Lm9mZnNldC5vbGQueDsKLSAgICBFdmFzX0Nv
b3JkIGR5ID0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkgLSBwcml2LT52aWV3Lm9mZnNldC5vbGQu
eTsKLSAgICBFdmFzX0Nvb3JkIHR3LCB0aDsKLSAgICBpbnQgc3RlcF95LCBzdGVwX3g7CisgICAg
RXZhc19Db29yZCBkZWx0YVggPSBwcml2LT52aWV3Lm9mZnNldC5jdXIueCAtIHByaXYtPnZpZXcu
b2Zmc2V0Lm9sZC54OworICAgIEV2YXNfQ29vcmQgZGVsdGFZID0gcHJpdi0+dmlldy5vZmZzZXQu
Y3VyLnkgLSBwcml2LT52aWV3Lm9mZnNldC5vbGQueTsKKyAgICBFdmFzX0Nvb3JkIHRpbGVXaWR0
aCwgdGlsZUhlaWdodDsKKyAgICBpbnQgc3RlcFksIHN0ZXBYOwogCi0gICAgSU5GKCJvPSVwLCBv
ZmZzZXQ6ICUrNGQsICUrNGQgKCUrNGQsICUrNGQpIiwKLSAgICAgICAgcHJpdi0+c2VsZiwgZHgs
IGR5LCBwcml2LT52aWV3Lm9mZnNldC5jdXIueCwgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkpOwor
ICAgIElORigiZXdrVGlsZSVwLCBvZmZzZXQ6ICUrNGQsICUrNGQgKCUrNGQsICUrNGQpIiwKKyAg
ICAgICAgcHJpdi0+c2VsZiwgZGVsdGFYLCBkZWx0YVksIHByaXYtPnZpZXcub2Zmc2V0LmN1ci54
LCBwcml2LT52aWV3Lm9mZnNldC5jdXIueSk7CiAKLSAgICBpZiAoIWR4ICYmICFkeSkKKyAgICBp
ZiAoIWRlbHRhWCAmJiAhZGVsdGFZKQogICAgICAgICByZXR1cm47CiAKLSAgICB0dyA9IHByaXYt
PnZpZXcudGlsZS53aWR0aDsKLSAgICB0aCA9IHByaXYtPnZpZXcudGlsZS5oZWlnaHQ7CisgICAg
dGlsZVdpZHRoID0gcHJpdi0+dmlldy50aWxlLndpZHRoOworICAgIHRpbGVIZWlnaHQgPSBwcml2
LT52aWV3LnRpbGUuaGVpZ2h0OwogCi0gICAgbG9uZyBuZXdfY29sID0gLXByaXYtPnZpZXcub2Zm
c2V0LmN1ci54IC8gdHc7Ci0gICAgc3RlcF94ID0gcHJpdi0+bW9kZWwuYmFzZS5jb2wgLSBuZXdf
Y29sOwotICAgIGxvbmcgbmV3X3JvdyA9IC1wcml2LT52aWV3Lm9mZnNldC5jdXIueSAvIHRoOwot
ICAgIHN0ZXBfeSA9IHByaXYtPm1vZGVsLmJhc2Uucm93IC0gbmV3X3JvdzsKKyAgICBsb25nIG5l
d0NvbCA9IC1wcml2LT52aWV3Lm9mZnNldC5jdXIueCAvIHRpbGVXaWR0aDsKKyAgICBzdGVwWCA9
IHByaXYtPm1vZGVsLmJhc2UuY29sdW1uIC0gbmV3Q29sOworICAgIGxvbmcgbmV3Um93ID0gLXBy
aXYtPnZpZXcub2Zmc2V0LmN1ci55IC8gdGlsZUhlaWdodDsKKyAgICBzdGVwWSA9IHByaXYtPm1v
ZGVsLmJhc2Uucm93IC0gbmV3Um93OwogCiAgICAgcHJpdi0+dmlldy5vZmZzZXQub2xkLnggPSBw
cml2LT52aWV3Lm9mZnNldC5jdXIueDsKICAgICBwcml2LT52aWV3Lm9mZnNldC5vbGQueSA9IHBy
aXYtPnZpZXcub2Zmc2V0LmN1ci55OwogICAgIGV2YXNfb2JqZWN0X21vdmUoCi0gICAgICAgIHBy
aXYtPmNvbnRlbnRzX2NsaXBwZXIsCisgICAgICAgIHByaXYtPmNvbnRlbnRzQ2xpcHBlciwKICAg
ICAgICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggKyBwcml2LT52aWV3LngsCiAgICAgICAgIHBy
aXYtPnZpZXcub2Zmc2V0LmN1ci55ICsgcHJpdi0+dmlldy55KTsKIAotICAgIGlmICgoc3RlcF94
IDwgMCAmJiBzdGVwX3ggPD0gLXByaXYtPnZpZXcuY29scykKLSAgICAgICAgfHwgKHN0ZXBfeCA+
IDAgJiYgc3RlcF94ID49IHByaXYtPnZpZXcuY29scykKLSAgICAgICAgfHwgKHN0ZXBfeSA8IDAg
JiYgc3RlcF95IDw9IC1wcml2LT52aWV3LnJvd3MpCi0gICAgICAgIHx8IChzdGVwX3kgPiAwICYm
IHN0ZXBfeSA+PSBwcml2LT52aWV3LnJvd3MpKSB7CisgICAgaWYgKChzdGVwWCA8IDAgJiYgc3Rl
cFggPD0gLXByaXYtPnZpZXcuY29scykKKyAgICAgICAgfHwgKHN0ZXBYID4gMCAmJiBzdGVwWCA+
PSBwcml2LT52aWV3LmNvbHMpCisgICAgICAgIHx8IChzdGVwWSA8IDAgJiYgc3RlcFkgPD0gLXBy
aXYtPnZpZXcucm93cykKKyAgICAgICAgfHwgKHN0ZXBZID4gMCAmJiBzdGVwWSA+PSBwcml2LT52
aWV3LnJvd3MpKSB7CiAKLSAgICAgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54ICs9IGR4IC0g
c3RlcF94ICogdHc7Ci0gICAgICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSArPSBkeSAtIHN0
ZXBfeSAqIHRoOworICAgICAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggKz0gZGVsdGFYIC0g
c3RlcFggKiB0aWxlV2lkdGg7CisgICAgICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSArPSBk
ZWx0YVkgLSBzdGVwWSAqIHRpbGVIZWlnaHQ7CiAKICAgICAgICAgX2V3a190aWxlZF9iYWNraW5n
X3N0b3JlX3ZpZXdfcmVmaWxsCi0gICAgICAgICAgICAocHJpdiwgcHJpdi0+dmlldy54LCBwcml2
LT52aWV3LnksIHN0ZXBfeCwgc3RlcF95KTsKKyAgICAgICAgICAgIChwcml2LCBwcml2LT52aWV3
LngsIHByaXYtPnZpZXcueSwgc3RlcFgsIHN0ZXBZKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCArPSBkeDsKLSAgICBwcml2LT52aWV3Lm9m
ZnNldC5iYXNlLnkgKz0gZHk7CisgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54ICs9IGRlbHRh
WDsKKyAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgKz0gZGVsdGFZOwogCi0gICAgaWYgKHN0
ZXBfeSA8IDApCi0gICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3dyYXBfdXAo
cHJpdiwgeCwgeSwgLXN0ZXBfeSk7Ci0gICAgZWxzZSBpZiAoc3RlcF95ID4gMCkKLSAgICAgICAg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfd3JhcF9kb3duKHByaXYsIHgsIHksIHN0ZXBf
eSk7CisgICAgaWYgKHN0ZXBZIDwgMCkKKyAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3ZpZXdfd3JhcF91cChwcml2LCB4LCB5LCAtc3RlcFkpOworICAgIGVsc2UgaWYgKHN0ZXBZID4g
MCkKKyAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfd3JhcF9kb3duKHByaXYs
IHgsIHksIHN0ZXBZKTsKIAotICAgIGlmIChzdGVwX3ggPCAwKQotICAgICAgICBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfdmlld193cmFwX2xlZnQocHJpdiwgeCwgeSwgLXN0ZXBfeCk7Ci0gICAg
ZWxzZSBpZiAoc3RlcF94ID4gMCkKLSAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3Zp
ZXdfd3JhcF9yaWdodChwcml2LCB4LCB5LCBzdGVwX3gpOworICAgIGlmIChzdGVwWCA8IDApCisg
ICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3dyYXBfbGVmdChwcml2LCB4LCB5
LCAtc3RlcFgpOworICAgIGVsc2UgaWYgKHN0ZXBYID4gMCkKKyAgICAgICAgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX3ZpZXdfd3JhcF9yaWdodChwcml2LCB4LCB5LCBzdGVwWCk7CiAKICAgICBf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19wb3NfYXBwbHkocHJpdiwgeCwgeSk7CiB9CkBA
IC0xMjcwLDMxICsxMjcwLDMxIEBAIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV9zbWFydF9jYWxjdWxhdGVfcG9zKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlCiAgICAgcHJpdi0+
dmlldy54ID0geDsKICAgICBwcml2LT52aWV3LnkgPSB5OwogICAgIGV2YXNfb2JqZWN0X21vdmUo
Ci0gICAgICAgIHByaXYtPmNvbnRlbnRzX2NsaXBwZXIsCisgICAgICAgIHByaXYtPmNvbnRlbnRz
Q2xpcHBlciwKICAgICAgICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggKyBwcml2LT52aWV3Lngs
CiAgICAgICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1ci55ICsgcHJpdi0+dmlldy55KTsKIH0KIAog
c3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2ZpbGxfcmVuZGVyZXJzKEV3a19U
aWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYpCiB7Ci0gICAgRWluYV9Jbmxpc3QqIGl0Owor
ICAgIEVpbmFfSW5saXN0KiBsaXN0OwogICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0q
IGl0ZW07CiAgICAgaW50IGksIGo7CiAKICAgICBmb3IgKGkgPSAwOyBpIDwgcHJpdi0+dmlldy5y
b3dzOyBpKyspIHsKLSAgICAgICAgaXQgPSBwcml2LT52aWV3Lml0ZW1zW2ldOworICAgICAgICBs
aXN0ID0gcHJpdi0+dmlldy5pdGVtc1tpXTsKICAgICAgICAgaiA9IDA7Ci0gICAgICAgIEVJTkFf
SU5MSVNUX0ZPUkVBQ0goaXQsIGl0ZW0pCisgICAgICAgIEVJTkFfSU5MSVNUX0ZPUkVBQ0gobGlz
dCwgaXRlbSkKICAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2ZpbGwo
cHJpdiwgaXRlbSwgaisrLCBpKTsKICAgICB9CiB9CiAKIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV9zbWFydF9jYWxjdWxhdGUoRXZhc19PYmplY3QqIGV3a1RpbGUpCiB7Ci0g
ICAgRXZhc19Db29yZCB4LCB5LCB3LCBoOworICAgIEV2YXNfQ29vcmQgeCwgeSwgd2lkdGgsIGhl
aWdodDsKIAotICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldChld2tUaWxlLCAmeCwgJnksICZ3
LCAmaCk7Ci0gICAgREJHKCJvPSVwIGF0ICVkLCVkICsgJWR4JWQiLCBld2tUaWxlLCB4LCB5LCB3
LCBoKTsKKyAgICBldmFzX29iamVjdF9nZW9tZXRyeV9nZXQoZXdrVGlsZSwgJngsICZ5LCAmd2lk
dGgsICZoZWlnaHQpOworICAgIERCRygiZXdrVGlsZSVwIGF0ICVkLCVkICsgJWR4JWQiLCBld2tU
aWxlLCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKIAogICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJO
KGV3a1RpbGUsIHByaXYpOwogCkBAIC0xMzAzLDI1ICsxMzAzLDI1IEBAIHN0YXRpYyB2b2lkIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9jYWxjdWxhdGUoRXZhc19PYmplY3QqIGV3a1Rp
bGUpCiAgICAgZXdrX3RpbGVfbWF0cml4X2ZyZWV6ZShwcml2LT5tb2RlbC5tYXRyaXgpOwogCiAg
ICAgaWYgKCFwcml2LT5yZW5kZXIuc3VzcGVuZCAmJiBwcml2LT5jaGFuZ2VkLm1vZGVsKSB7Ci0g
ICAgICAgIHVuc2lnbmVkIGxvbmcgY29scywgcm93czsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBj
b2x1bW5zLCByb3dzOwogCi0gICAgICAgIGNvbHMgPSBwcml2LT5tb2RlbC53aWR0aCAvIHByaXYt
PnZpZXcudGlsZS53aWR0aCArIDE7CisgICAgICAgIGNvbHVtbnMgPSBwcml2LT5tb2RlbC53aWR0
aCAvIHByaXYtPnZpZXcudGlsZS53aWR0aCArIDE7CiAgICAgICAgIHJvd3MgPSBwcml2LT5tb2Rl
bC5oZWlnaHQgLyBwcml2LT52aWV3LnRpbGUuaGVpZ2h0ICsgMTsKIAotICAgICAgICBwcml2LT5t
b2RlbC5vbGQuY29scyA9IHByaXYtPm1vZGVsLmN1ci5jb2xzOwotICAgICAgICBwcml2LT5tb2Rl
bC5vbGQucm93cyA9IHByaXYtPm1vZGVsLmN1ci5yb3dzOwotICAgICAgICBwcml2LT5tb2RlbC5j
dXIuY29scyA9IGNvbHM7Ci0gICAgICAgIHByaXYtPm1vZGVsLmN1ci5yb3dzID0gcm93czsKLSAg
ICAgICAgaWYgKHByaXYtPm1vZGVsLm9sZC5jb2xzID4gY29scykKLSAgICAgICAgICAgIGNvbHMg
PSBwcml2LT5tb2RlbC5vbGQuY29sczsKKyAgICAgICAgcHJpdi0+bW9kZWwub2xkLmNvbHVtbnMg
PSBwcml2LT5tb2RlbC5jdXJyZW50LmNvbHVtbnM7CisgICAgICAgIHByaXYtPm1vZGVsLm9sZC5y
b3dzID0gcHJpdi0+bW9kZWwuY3VycmVudC5yb3dzOworICAgICAgICBwcml2LT5tb2RlbC5jdXJy
ZW50LmNvbHVtbnMgPSBjb2x1bW5zOworICAgICAgICBwcml2LT5tb2RlbC5jdXJyZW50LnJvd3Mg
PSByb3dzOworICAgICAgICBpZiAocHJpdi0+bW9kZWwub2xkLmNvbHVtbnMgPiBjb2x1bW5zKQor
ICAgICAgICAgICAgY29sdW1ucyA9IHByaXYtPm1vZGVsLm9sZC5jb2x1bW5zOwogICAgICAgICBp
ZiAocHJpdi0+bW9kZWwub2xkLnJvd3MgPiByb3dzKQogICAgICAgICAgICAgcm93cyA9IHByaXYt
Pm1vZGVsLm9sZC5yb3dzOwotICAgICAgICBld2tfdGlsZV9tYXRyaXhfcmVzaXplKHByaXYtPm1v
ZGVsLm1hdHJpeCwgY29scywgcm93cyk7CisgICAgICAgIGV3a190aWxlX21hdHJpeF9yZXNpemUo
cHJpdi0+bW9kZWwubWF0cml4LCBjb2x1bW5zLCByb3dzKTsKICAgICB9CiAKLSAgICBpZiAocHJp
di0+Y2hhbmdlZC5wb3MgJiYgKHByaXYtPnZpZXcueCAhPSB4IHx8IHByaXYtPnZpZXcueSAhPSB5
KSkgeworICAgIGlmIChwcml2LT5jaGFuZ2VkLnBvc2l0aW9uICYmIChwcml2LT52aWV3LnggIT0g
eCB8fCBwcml2LT52aWV3LnkgIT0geSkpIHsKICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX3NtYXJ0X2NhbGN1bGF0ZV9wb3MocHJpdiwgeCwgeSk7Ci0gICAgICAgIHByaXYtPmNoYW5n
ZWQucG9zID0gRUlOQV9GQUxTRTsKKyAgICAgICAgcHJpdi0+Y2hhbmdlZC5wb3NpdGlvbiA9IEVJ
TkFfRkFMU0U7CiAgICAgfQogICAgIGlmIChwcml2LT5jaGFuZ2VkLm9mZnNldCkgewogICAgICAg
ICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfY2FsY3VsYXRlX29mZnNldChwcml2LCB4
LCB5KTsKQEAgLTEzMjksNyArMTMyOSw3IEBAIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9zbWFydF9jYWxjdWxhdGUoRXZhc19PYmplY3QqIGV3a1RpbGUpCiAgICAgfQogCiAg
ICAgaWYgKHByaXYtPmNoYW5nZWQuc2l6ZSkgewotICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfc21hcnRfY2FsY3VsYXRlX3NpemUocHJpdiwgdywgaCk7CisgICAgICAgIF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9zbWFydF9jYWxjdWxhdGVfc2l6ZShwcml2LCB3aWR0aCwgaGVpZ2h0
KTsKICAgICAgICAgcHJpdi0+Y2hhbmdlZC5zaXplID0gRUlOQV9GQUxTRTsKICAgICB9CiAKQEAg
LTEzNDEsMTcgKzEzNDEsMTcgQEAgc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3NtYXJ0X2NhbGN1bGF0ZShFdmFzX09iamVjdCogZXdrVGlsZSkKICAgICAgICAgcmVjdC5oID0g
cHJpdi0+bW9kZWwuaGVpZ2h0OwogICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZmls
bF9yZW5kZXJlcnMocHJpdik7CiAgICAgICAgIGV3a190aWxlX21hdHJpeF9yZXNpemUocHJpdi0+
bW9kZWwubWF0cml4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaXYtPm1vZGVs
LmN1ci5jb2xzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaXYtPm1vZGVsLmN1
ci5yb3dzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcml2LT5tb2RlbC5jdXJy
ZW50LmNvbHVtbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpdi0+bW9kZWwu
Y3VycmVudC5yb3dzKTsKICAgICAgICAgcHJpdi0+Y2hhbmdlZC5tb2RlbCA9IEVJTkFfRkFMU0U7
Ci0gICAgICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShwcml2LT5jb250ZW50c19jbGlwcGVyLCBwcml2
LT5tb2RlbC53aWR0aCwgcHJpdi0+bW9kZWwuaGVpZ2h0KTsKKyAgICAgICAgZXZhc19vYmplY3Rf
cmVzaXplKHByaXYtPmNvbnRlbnRzQ2xpcHBlciwgcHJpdi0+bW9kZWwud2lkdGgsIHByaXYtPm1v
ZGVsLmhlaWdodCk7CiAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9jYWxj
dWxhdGVfb2Zmc2V0X2ZvcmNlKHByaXYpOwogCiAgICAgICAgIC8qIE1ha2Ugc3VyZSB3ZSBkbyBu
b3QgbWlzcyBhbnkgaW1wb3J0YW50IHJlcGFpbnQgYnkKICAgICAgICAgICogcmVwYWludGluZyB0
aGUgd2hvbGUgdmlld3BvcnQgKi8KLSAgICAgICAgY29uc3QgRWluYV9SZWN0YW5nbGUgciA9Cisg
ICAgICAgIGNvbnN0IEVpbmFfUmVjdGFuZ2xlIHJlY3QxID0KICAgICAgICAgeyAwLCAwLCBwcml2
LT5tb2RlbC53aWR0aCwgcHJpdi0+bW9kZWwuaGVpZ2h0IH07Ci0gICAgICAgIGV3a190aWxlX21h
dHJpeF91cGRhdGUocHJpdi0+bW9kZWwubWF0cml4LCAmciwKKyAgICAgICAgZXdrX3RpbGVfbWF0
cml4X3VwZGF0ZShwcml2LT5tb2RlbC5tYXRyaXgsICZyZWN0MSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwcml2LT52aWV3LnRpbGUuem9vbSk7CiAgICAgfQogCkBAIC0xNDAyLDcg
KzE0MDIsNyBAQCB2b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3JlbmRlcl9jYl9zZXQoRXZh
c19PYmplY3QqIGV3a1RpbGUsIEVpbmFfQm9vbCAoKmNhbAogewogICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOKGNhbGxiYWNrKTsKICAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihld2tU
aWxlLCBwcml2KTsKLSAgICBwcml2LT5yZW5kZXIuY2IgPSBjYWxsYmFjazsKKyAgICBwcml2LT5y
ZW5kZXIuY2FsbGJhY2sgPSBjYWxsYmFjazsKICAgICBwcml2LT5yZW5kZXIuZGF0YSA9ICh2b2lk
KilkYXRhOwogfQogCkBAIC0xNDM5LDcgKzE0MzksNyBAQCBzdGF0aWMgRWluYV9Cb29sIF9ld2tf
dGlsZWRfYmFja2luZ19zdG9yZV9zY3JvbGxfZnVsbF9vZmZzZXRfc2V0X2ludGVybmFsKEV3a19U
aQogCiBFaW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc2Nyb2xsX2Z1bGxfb2Zmc2V0
X3NldChFdmFzX09iamVjdCogZXdrVGlsZSwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHkpCiB7
Ci0gICAgREJHKCJvPSVwLCB4PSVkLCB5PSVkIiwgZXdrVGlsZSwgeCwgeSk7CisgICAgREJHKCJl
d2tUaWxlJXAsIHg9JWQsIHk9JWQiLCBld2tUaWxlLCB4LCB5KTsKIAogICAgIFBSSVZfREFUQV9H
RVRfT1JfUkVUVVJOKGV3a1RpbGUsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIGlmICh4ID09IHBy
aXYtPnZpZXcub2Zmc2V0LmN1ci54ICYmIHkgPT0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkpCkBA
IC0xNDQ4LDE2ICsxNDQ4LDE2IEBAIEVpbmFfQm9vbCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9z
Y3JvbGxfZnVsbF9vZmZzZXRfc2V0KEV2YXNfT2JqZWN0KiBld2tUaWxlLCBFCiAgICAgcmV0dXJu
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zY3JvbGxfZnVsbF9vZmZzZXRfc2V0X2ludGVybmFs
KHByaXYsIHgsIHkpOwogfQogCi1FaW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc2Ny
b2xsX2Z1bGxfb2Zmc2V0X2FkZChFdmFzX09iamVjdCogZXdrVGlsZSwgRXZhc19Db29yZCBkeCwg
RXZhc19Db29yZCBkeSkKK0VpbmFfQm9vbCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zY3JvbGxf
ZnVsbF9vZmZzZXRfYWRkKEV2YXNfT2JqZWN0KiBld2tUaWxlLCBFdmFzX0Nvb3JkIGRlbHRhWCwg
RXZhc19Db29yZCBkZWx0YVkpCiB7Ci0gICAgREJHKCJvPSVwLCBkeD0lZCwgZHk9JWQiLCBld2tU
aWxlLCBkeCwgZHkpOworICAgIERCRygiZXdrVGlsZSVwLCBkZWx0YVg9JWQsIGRlbHRhWT0lZCIs
IGV3a1RpbGUsIGRlbHRhWCwgZGVsdGFZKTsKIAogICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJO
KGV3a1RpbGUsIHByaXYsIEVJTkFfRkFMU0UpOwotICAgIGlmICghZHggJiYgIWR5KQorICAgIGlm
ICghZGVsdGFYICYmICFkZWx0YVkpCiAgICAgICAgIHJldHVybiBFSU5BX1RSVUU7CiAKICAgICBy
ZXR1cm4gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3Njcm9sbF9mdWxsX29mZnNldF9zZXRfaW50
ZXJuYWwKLSAgICAgICAgICAgICAgIChwcml2LCBwcml2LT52aWV3Lm9mZnNldC5jdXIueCArIGR4
LCBwcml2LT52aWV3Lm9mZnNldC5jdXIueSArIGR5KTsKKyAgICAgICAgICAgICAgIChwcml2LCBw
cml2LT52aWV3Lm9mZnNldC5jdXIueCArIGRlbHRhWCwgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkg
KyBkZWx0YVkpOwogfQogCiBzdGF0aWMgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV96b29tX3NldF9pbnRlcm5hbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2LCBm
bG9hdCogem9vbSwgRXZhc19Db29yZCBjdXJyZW50WCwgRXZhc19Db29yZCBjdXJyZW50WSwgRXZh
c19Db29yZCogb2Zmc2V0WCwgRXZhc19Db29yZCogb2Zmc2V0WSkKQEAgLTE0NzIsMTkgKzE0NzIs
MTkgQEAgc3RhdGljIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfem9vbV9zZXRf
aW50ZXJuYWwoRXdrX1RpbGVkX0JhY2tpbmdfU3QKICAgICB9CiAKICAgICBfZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2ZsdXNoKHByaXYpOwotICAgIEV2YXNfQ29v
cmQgdHcsIHRoOworICAgIEV2YXNfQ29vcmQgdGlsZVdpZHRoLCB0aWxlSGVpZ2h0OwogCiAgICAg
Knpvb20gPSBST1VOREVEX1pPT00ocHJpdi0+dmlldy50aWxlLndpZHRoLCAqem9vbSk7CiAKLSAg
ICB0dyA9IHByaXYtPnZpZXcudGlsZS53aWR0aDsKLSAgICB0aCA9IHByaXYtPnZpZXcudGlsZS5o
ZWlnaHQ7CisgICAgdGlsZVdpZHRoID0gcHJpdi0+dmlldy50aWxlLndpZHRoOworICAgIHRpbGVI
ZWlnaHQgPSBwcml2LT52aWV3LnRpbGUuaGVpZ2h0OwogCiAgICAgZmxvYXQgc2NhbGUgPSAqem9v
bSAvIHByaXYtPnZpZXcudGlsZS56b29tOwogCiAgICAgcHJpdi0+dmlldy50aWxlLnpvb20gPSAq
em9vbTsKICAgICAvLyB0b2RvOiBjaGVjayBjdXJyZW50WCBbMCwgd10uLi4KLSAgICBwcml2LT52
aWV3Lm9mZnNldC56b29tX2NlbnRlci54ID0gY3VycmVudFg7Ci0gICAgcHJpdi0+dmlldy5vZmZz
ZXQuem9vbV9jZW50ZXIueSA9IGN1cnJlbnRZOworICAgIHByaXYtPnZpZXcub2Zmc2V0Lnpvb21D
ZW50ZXIueCA9IGN1cnJlbnRYOworICAgIHByaXYtPnZpZXcub2Zmc2V0Lnpvb21DZW50ZXIueSA9
IGN1cnJlbnRZOwogCiAKICAgICBpZiAoIXByaXYtPnZpZXcud2lkdGggfHwgIXByaXYtPnZpZXcu
aGVpZ2h0KSB7CkBAIC0xNDkyLDM4ICsxNDkyLDM4IEBAIHN0YXRpYyBFaW5hX0Jvb2wgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX3pvb21fc2V0X2ludGVybmFsKEV3a19UaWxlZF9CYWNraW5nX1N0
CiAgICAgICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSA9IDA7CiAgICAgICAgIHJldHVybiBF
SU5BX1RSVUU7CiAgICAgfQotICAgIEVpbmFfSW5saXN0KiogaXRyLCAqKml0cl9lbmQ7CisgICAg
RWluYV9Jbmxpc3QqKiBpdGVyYXRvciwgKippdGVyYXRvckVuZDsKICAgICBFd2tfVGlsZWRfQmFj
a2luZ19TdG9yZV9JdGVtKiBpdDsKIAotICAgIEV2YXNfQ29vcmQgbmV3X3ggPSBjdXJyZW50WCAr
IChwcml2LT52aWV3Lm9mZnNldC5jdXIueCAtIGN1cnJlbnRYKSAqIHNjYWxlOwotICAgIEV2YXNf
Q29vcmQgbmV3X3kgPSBjdXJyZW50WSArIChwcml2LT52aWV3Lm9mZnNldC5jdXIueSAtIGN1cnJl
bnRZKSAqIHNjYWxlOworICAgIEV2YXNfQ29vcmQgbmV3WCA9IGN1cnJlbnRYICsgKHByaXYtPnZp
ZXcub2Zmc2V0LmN1ci54IC0gY3VycmVudFgpICogc2NhbGU7CisgICAgRXZhc19Db29yZCBuZXdZ
ID0gY3VycmVudFkgKyAocHJpdi0+dmlldy5vZmZzZXQuY3VyLnkgLSBjdXJyZW50WSkgKiBzY2Fs
ZTsKIAotICAgIEV2YXNfQ29vcmQgbW9kZWxfdyA9IHByaXYtPm1vZGVsLndpZHRoICogc2NhbGU7
Ci0gICAgRXZhc19Db29yZCBtb2RlbF9oID0gcHJpdi0+bW9kZWwuaGVpZ2h0ICogc2NhbGU7Cisg
ICAgRXZhc19Db29yZCBtb2RlbFdpZHRoID0gcHJpdi0+bW9kZWwud2lkdGggKiBzY2FsZTsKKyAg
ICBFdmFzX0Nvb3JkIG1vZGVsSGVpZ2h0ID0gcHJpdi0+bW9kZWwuaGVpZ2h0ICogc2NhbGU7CiAK
LSAgICBpZiAobW9kZWxfdyA8IHByaXYtPnZpZXcud2lkdGggfHwgbmV3X3ggPj0gMCkKLSAgICAg
ICAgbmV3X3ggPSAwOwotICAgIGVsc2UgaWYgKC1uZXdfeCArIHByaXYtPnZpZXcud2lkdGggPj0g
bW9kZWxfdykKLSAgICAgICAgbmV3X3ggPSAtbW9kZWxfdyArIHByaXYtPnZpZXcud2lkdGg7Cisg
ICAgaWYgKG1vZGVsV2lkdGggPCBwcml2LT52aWV3LndpZHRoIHx8IG5ld1ggPj0gMCkKKyAgICAg
ICAgbmV3WCA9IDA7CisgICAgZWxzZSBpZiAoLW5ld1ggKyBwcml2LT52aWV3LndpZHRoID49IG1v
ZGVsV2lkdGgpCisgICAgICAgIG5ld1ggPSAtbW9kZWxXaWR0aCArIHByaXYtPnZpZXcud2lkdGg7
CiAKLSAgICBpZiAobW9kZWxfaCA8IHByaXYtPnZpZXcuaGVpZ2h0IHx8IG5ld195ID49IDApCi0g
ICAgICAgIG5ld195ID0gMDsKLSAgICBlbHNlIGlmICgtbmV3X3kgKyBwcml2LT52aWV3LmhlaWdo
dCA+PSBtb2RlbF9oKQotICAgICAgICBuZXdfeSA9IC1tb2RlbF9oICsgcHJpdi0+dmlldy5oZWln
aHQ7CisgICAgaWYgKG1vZGVsSGVpZ2h0IDwgcHJpdi0+dmlldy5oZWlnaHQgfHwgbmV3WSA+PSAw
KQorICAgICAgICBuZXdZID0gMDsKKyAgICBlbHNlIGlmICgtbmV3WSArIHByaXYtPnZpZXcuaGVp
Z2h0ID49IG1vZGVsSGVpZ2h0KQorICAgICAgICBuZXdZID0gLW1vZGVsSGVpZ2h0ICsgcHJpdi0+
dmlldy5oZWlnaHQ7CiAKLSAgICBFdmFzX0Nvb3JkIGJ4ID0gbmV3X3ggJSB0dzsKLSAgICBFdmFz
X0Nvb3JkIGJ5ID0gbmV3X3kgJSB0aDsKLSAgICBwcml2LT5tb2RlbC5iYXNlLmNvbCA9IC1uZXdf
eCAvIHR3OwotICAgIHByaXYtPm1vZGVsLmJhc2Uucm93ID0gLW5ld195IC8gdGg7CisgICAgRXZh
c19Db29yZCBiYXNlWCA9IG5ld1ggJSB0aWxlV2lkdGg7CisgICAgRXZhc19Db29yZCBiYXNlWSA9
IG5ld1kgJSB0aWxlSGVpZ2h0OworICAgIHByaXYtPm1vZGVsLmJhc2UuY29sdW1uID0gLW5ld1gg
LyB0aWxlV2lkdGg7CisgICAgcHJpdi0+bW9kZWwuYmFzZS5yb3cgPSAtbmV3WSAvIHRpbGVIZWln
aHQ7CiAKICAgICBwcml2LT5jaGFuZ2VkLnNpemUgPSBFSU5BX1RSVUU7CiAgICAgcHJpdi0+Y2hh
bmdlZC5tb2RlbCA9IEVJTkFfVFJVRTsKICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfY2hh
bmdlZChwcml2KTsKIAotICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1ci54ID0gbmV3X3g7Ci0gICAg
cHJpdi0+dmlldy5vZmZzZXQuY3VyLnkgPSBuZXdfeTsKLSAgICBwcml2LT52aWV3Lm9mZnNldC5i
YXNlLnggPSBieDsKLSAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgPSBieTsKKyAgICBwcml2
LT52aWV3Lm9mZnNldC5jdXIueCA9IG5ld1g7CisgICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkg
PSBuZXdZOworICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCA9IGJhc2VYOworICAgIHByaXYt
PnZpZXcub2Zmc2V0LmJhc2UueSA9IGJhc2VZOwogCiAgICAgcHJpdi0+dmlldy5vZmZzZXQub2xk
LnggPSBwcml2LT52aWV3Lm9mZnNldC5jdXIueDsKICAgICBwcml2LT52aWV3Lm9mZnNldC5vbGQu
eSA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci55OwpAQCAtMTUzMSwyOCArMTUzMSwyOCBAQCBzdGF0
aWMgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV96b29tX3NldF9pbnRlcm5hbChF
d2tfVGlsZWRfQmFja2luZ19TdAogICAgICpvZmZzZXRZID0gcHJpdi0+dmlldy5vZmZzZXQuY3Vy
Lnk7CiAKICAgICBldmFzX29iamVjdF9tb3ZlKAotICAgICAgICBwcml2LT5jb250ZW50c19jbGlw
cGVyLAotICAgICAgICBuZXdfeCArIHByaXYtPnZpZXcueCwKLSAgICAgICAgbmV3X3kgKyBwcml2
LT52aWV3LnkpOworICAgICAgICBwcml2LT5jb250ZW50c0NsaXBwZXIsCisgICAgICAgIG5ld1gg
KyBwcml2LT52aWV3LngsCisgICAgICAgIG5ld1kgKyBwcml2LT52aWV3LnkpOwogCiAgICAgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX2ZpbGxfcmVuZGVyZXJzKHByaXYpOwogCi0gICAgRXZhc19D
b29yZCBveSA9IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSArIHByaXYtPnZpZXcueTsKLSAgICBF
dmFzX0Nvb3JkIGJhc2Vfb3ggPSBwcml2LT52aWV3LnggKyBwcml2LT52aWV3Lm9mZnNldC5iYXNl
Lng7CisgICAgRXZhc19Db29yZCB0aWxlUG9zaXRpb25ZID0gcHJpdi0+dmlldy5vZmZzZXQuYmFz
ZS55ICsgcHJpdi0+dmlldy55OworICAgIEV2YXNfQ29vcmQgYmFzZVRpbGVQb3NpdGlvblggPSBw
cml2LT52aWV3LnggKyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLng7CiAKLSAgICBpdHIgPSBwcml2
LT52aWV3Lml0ZW1zOwotICAgIGl0cl9lbmQgPSBpdHIgKyBwcml2LT52aWV3LnJvd3M7CisgICAg
aXRlcmF0b3IgPSBwcml2LT52aWV3Lml0ZW1zOworICAgIGl0ZXJhdG9yRW5kID0gaXRlcmF0b3Ig
KyBwcml2LT52aWV3LnJvd3M7CiAKLSAgICBmb3IgKDsgaXRyIDwgaXRyX2VuZDsgaXRyKyspIHsK
LSAgICAgICAgRXZhc19Db29yZCBveCA9IGJhc2Vfb3g7Ci0gICAgICAgIEVpbmFfSW5saXN0KiBs
c3QgPSAqaXRyOworICAgIGZvciAoOyBpdGVyYXRvciA8IGl0ZXJhdG9yRW5kOyBpdGVyYXRvcisr
KSB7CisgICAgICAgIEV2YXNfQ29vcmQgdGlsZVBvc2l0aW9uWCA9IGJhc2VUaWxlUG9zaXRpb25Y
OworICAgICAgICBFaW5hX0lubGlzdCogbHN0ID0gKml0ZXJhdG9yOwogCiAgICAgICAgIEVJTkFf
SU5MSVNUX0ZPUkVBQ0gobHN0LCBpdCkgewotICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5n
X3N0b3JlX2l0ZW1fbW92ZShpdCwgb3gsIG95KTsKLSAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9pdGVtX3Jlc2l6ZShpdCwgdHcsIHRoKTsKLSAgICAgICAgICAgIG94ICs9IHR3
OworICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fbW92ZShpdCwgdGls
ZVBvc2l0aW9uWCwgdGlsZVBvc2l0aW9uWSk7CisgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfaXRlbV9yZXNpemUoaXQsIHRpbGVXaWR0aCwgdGlsZUhlaWdodCk7CisgICAgICAg
ICAgICB0aWxlUG9zaXRpb25YICs9IHRpbGVXaWR0aDsKICAgICAgICAgfQotICAgICAgICBveSAr
PSB0aDsKKyAgICAgICAgdGlsZVBvc2l0aW9uWSArPSB0aWxlSGVpZ2h0OwogICAgIH0KIAogICAg
IHJldHVybiBFSU5BX1RSVUU7CkBAIC0xNTYwLDcgKzE1NjAsNyBAQCBzdGF0aWMgRWluYV9Cb29s
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV96b29tX3NldF9pbnRlcm5hbChFd2tfVGlsZWRfQmFj
a2luZ19TdAogCiBFaW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfem9vbV9zZXQoRXZh
c19PYmplY3QqIGV3a1RpbGUsIGZsb2F0KiB6b29tLCBFdmFzX0Nvb3JkIGN1cnJlbnRYLCBFdmFz
X0Nvb3JkIGN1cnJlbnRZLCBFdmFzX0Nvb3JkKiBvZmZzZXRYLCBFdmFzX0Nvb3JkKiBvZmZzZXRZ
KQogewotICAgIERCRygibz0lcCwgem9vbT0lZiIsIGV3a1RpbGUsICp6b29tKTsKKyAgICBEQkco
ImV3a1RpbGUlcCwgem9vbT0lZiIsIGV3a1RpbGUsICp6b29tKTsKIAogICAgIFBSSVZfREFUQV9H
RVRfT1JfUkVUVVJOKGV3a1RpbGUsIHByaXYsIEVJTkFfRkFMU0UpOwogCkBAIC0xNTY5LDczICsx
NTY5LDczIEBAIEVpbmFfQm9vbCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV96b29tX3NldChFdmFz
X09iamVjdCogZXdrVGlsZSwgZmxvYXQqIHpvb20sIEV2CiAKIEVpbmFfQm9vbCBld2tfdGlsZWRf
YmFja2luZ19zdG9yZV96b29tX3dlYWtfc2V0KEV2YXNfT2JqZWN0KiBld2tUaWxlLCBmbG9hdCB6
b29tLCBFdmFzX0Nvb3JkIGN1cnJlbnRYLCBFdmFzX0Nvb3JkIGN1cnJlbnRZKQogewotICAgIERC
Rygibz0lcCwgem9vbT0lZiIsIGV3a1RpbGUsIHpvb20pOworICAgIERCRygiZXdrVGlsZSVwLCB6
b29tPSVmIiwgZXdrVGlsZSwgem9vbSk7CiAgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4oZXdr
VGlsZSwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgaWYgKCFwcml2LT52aWV3LndpZHRoIHx8ICFw
cml2LT52aWV3LmhlaWdodCkKICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7Ci0gICAgRWluYV9J
bmxpc3QqKiBpdHIsICoqIGl0cl9lbmQ7Ci0gICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRl
bSogaXQ7Ci0gICAgRXZhc19Db29yZCB0dywgdGg7Ci0gICAgRWluYV9Cb29sIHJlY2FsYyA9IEVJ
TkFfRkFMU0U7CisgICAgRWluYV9Jbmxpc3QqKiBpdGVyYXRvciwgKiogaXRlcmF0b3JFbmQ7Cisg
ICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSogaXRlbTsKKyAgICBFdmFzX0Nvb3JkIHRp
bGVXaWR0aCwgdGlsZUhlaWdodDsKKyAgICBFaW5hX0Jvb2wgcmVDYWxjdWxhdGUgPSBFSU5BX0ZB
TFNFOwogCiAgICAgZmxvYXQgc2NhbGUgPSB6b29tIC8gcHJpdi0+dmlldy50aWxlLnpvb207CiAK
LSAgICB0dyA9IFRJTEVfU0laRV9BVF9aT09NKHByaXYtPnZpZXcudGlsZS53aWR0aCwgc2NhbGUp
OwotICAgIHNjYWxlID0gVElMRV9aT09NX0FUX1NJWkUodHcsIHByaXYtPnZpZXcudGlsZS53aWR0
aCk7Ci0gICAgdGggPSBUSUxFX1NJWkVfQVRfWk9PTShwcml2LT52aWV3LnRpbGUuaGVpZ2h0LCBz
Y2FsZSk7CisgICAgdGlsZVdpZHRoID0gVElMRV9TSVpFX0FUX1pPT00ocHJpdi0+dmlldy50aWxl
LndpZHRoLCBzY2FsZSk7CisgICAgc2NhbGUgPSBUSUxFX1pPT01fQVRfU0laRSh0aWxlV2lkdGgs
IHByaXYtPnZpZXcudGlsZS53aWR0aCk7CisgICAgdGlsZUhlaWdodCA9IFRJTEVfU0laRV9BVF9a
T09NKHByaXYtPnZpZXcudGlsZS5oZWlnaHQsIHNjYWxlKTsKICAgICB6b29tID0gc2NhbGUgKiBw
cml2LT52aWV3LnRpbGUuem9vbTsKIAotICAgIEV2YXNfQ29vcmQgbW9kZWxfdyA9IHByaXYtPm1v
ZGVsLndpZHRoICogc2NhbGU7Ci0gICAgRXZhc19Db29yZCBtb2RlbF9oID0gcHJpdi0+bW9kZWwu
aGVpZ2h0ICogc2NhbGU7CisgICAgRXZhc19Db29yZCBtb2RlbFdpZHRoID0gcHJpdi0+bW9kZWwu
d2lkdGggKiBzY2FsZTsKKyAgICBFdmFzX0Nvb3JkIG1vZGVsSGVpZ2h0ID0gcHJpdi0+bW9kZWwu
aGVpZ2h0ICogc2NhbGU7CiAKLSAgICBldmFzX29iamVjdF9yZXNpemUocHJpdi0+Y29udGVudHNf
Y2xpcHBlciwgbW9kZWxfdywgbW9kZWxfaCk7CisgICAgZXZhc19vYmplY3RfcmVzaXplKHByaXYt
PmNvbnRlbnRzQ2xpcHBlciwgbW9kZWxXaWR0aCwgbW9kZWxIZWlnaHQpOwogCi0gICAgaW50IHZy
b3dzID0gc3RhdGljX2Nhc3Q8aW50PihjZWlsKHN0YXRpY19jYXN0PGZsb2F0Pihwcml2LT52aWV3
LmhlaWdodCAvIHRoKSkgKyAxKTsKLSAgICBpbnQgdmNvbHMgPSBzdGF0aWNfY2FzdDxpbnQ+KGNl
aWwoc3RhdGljX2Nhc3Q8ZmxvYXQ+KHByaXYtPnZpZXcud2lkdGggLyB0dykpICsgMSk7Ci0gICAg
RXZhc19Db29yZCBuZXdfeCA9IGN1cnJlbnRYICsgKHByaXYtPnZpZXcub2Zmc2V0LmN1ci54IC0g
Y3VycmVudFgpICogc2NhbGU7Ci0gICAgRXZhc19Db29yZCBuZXdfeSA9IGN1cnJlbnRZICsgKHBy
aXYtPnZpZXcub2Zmc2V0LmN1ci55IC0gY3VycmVudFkpICogc2NhbGU7Ci0gICAgRXZhc19Db29y
ZCBieCA9IG5ld194ICUgdHc7Ci0gICAgRXZhc19Db29yZCBieSA9IG5ld195ICUgdGg7Ci0gICAg
dW5zaWduZWQgbG9uZyBiYXNlX3JvdyA9IC1uZXdfeSAvIHRoOwotICAgIHVuc2lnbmVkIGxvbmcg
YmFzZV9jb2wgPSAtbmV3X3ggLyB0dzsKKyAgICBpbnQgdnJvd3MgPSBzdGF0aWNfY2FzdDxpbnQ+
KGNlaWwoc3RhdGljX2Nhc3Q8ZmxvYXQ+KHByaXYtPnZpZXcuaGVpZ2h0IC8gdGlsZUhlaWdodCkp
ICsgMSk7CisgICAgaW50IHZjb2xzID0gc3RhdGljX2Nhc3Q8aW50PihjZWlsKHN0YXRpY19jYXN0
PGZsb2F0Pihwcml2LT52aWV3LndpZHRoIC8gdGlsZVdpZHRoKSkgKyAxKTsKKyAgICBFdmFzX0Nv
b3JkIG5ld1ggPSBjdXJyZW50WCArIChwcml2LT52aWV3Lm9mZnNldC5jdXIueCAtIGN1cnJlbnRY
KSAqIHNjYWxlOworICAgIEV2YXNfQ29vcmQgbmV3WSA9IGN1cnJlbnRZICsgKHByaXYtPnZpZXcu
b2Zmc2V0LmN1ci55IC0gY3VycmVudFkpICogc2NhbGU7CisgICAgRXZhc19Db29yZCBiYXNlWCA9
IG5ld1ggJSB0aWxlV2lkdGg7CisgICAgRXZhc19Db29yZCBiYXNlWSA9IG5ld1kgJSB0aWxlSGVp
Z2h0OworICAgIHVuc2lnbmVkIGxvbmcgYmFzZVJvdyA9IC1uZXdZIC8gdGlsZUhlaWdodDsKKyAg
ICB1bnNpZ25lZCBsb25nIGJhc2VDb2x1bW4gPSAtbmV3WCAvIHRpbGVXaWR0aDsKIAotICAgIGlm
IChiYXNlX3JvdyAhPSBwcml2LT5tb2RlbC5iYXNlLnJvdyB8fCBiYXNlX2NvbCAhPSBwcml2LT5t
b2RlbC5iYXNlLmNvbCkgewotICAgICAgICBwcml2LT5tb2RlbC5iYXNlLnJvdyA9IGJhc2Vfcm93
OwotICAgICAgICBwcml2LT5tb2RlbC5iYXNlLmNvbCA9IGJhc2VfY29sOwotICAgICAgICByZWNh
bGMgPSBFSU5BX1RSVUU7CisgICAgaWYgKGJhc2VSb3cgIT0gcHJpdi0+bW9kZWwuYmFzZS5yb3cg
fHwgYmFzZUNvbHVtbiAhPSBwcml2LT5tb2RlbC5iYXNlLmNvbHVtbikgeworICAgICAgICBwcml2
LT5tb2RlbC5iYXNlLnJvdyA9IGJhc2VSb3c7CisgICAgICAgIHByaXYtPm1vZGVsLmJhc2UuY29s
dW1uID0gYmFzZUNvbHVtbjsKKyAgICAgICAgcmVDYWxjdWxhdGUgPSBFSU5BX1RSVUU7CiAgICAg
fQogCiAgICAgaWYgKHZyb3dzID4gcHJpdi0+dmlldy5yb3dzIHx8IHZjb2xzID4gcHJpdi0+dmll
dy5jb2xzKQotICAgICAgICByZWNhbGMgPSBFSU5BX1RSVUU7CisgICAgICAgIHJlQ2FsY3VsYXRl
ID0gRUlOQV9UUlVFOwogCi0gICAgaWYgKHJlY2FsYykgeworICAgIGlmIChyZUNhbGN1bGF0ZSkg
ewogICAgICAgICBFdmFzX0Nvb3JkIHdpZHRoLCBoZWlnaHQ7CiAgICAgICAgIGV2YXNfb2JqZWN0
X2dlb21ldHJ5X2dldChld2tUaWxlLCAwLCAwLCAmd2lkdGgsICZoZWlnaHQpOwotICAgICAgICBf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcmVjYWxjX3JlbmRlcmVycyhwcml2LCB3aWR0aCwgaGVp
Z2h0LCB0dywgdGgpOworICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcmVjYWxjX3Jl
bmRlcmVycyhwcml2LCB3aWR0aCwgaGVpZ2h0LCB0aWxlV2lkdGgsIHRpbGVIZWlnaHQpOwogICAg
ICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZmlsbF9yZW5kZXJlcnMocHJpdik7CiAgICAg
ICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV91cGRhdGVzX3Byb2Nlc3MocHJpdik7CiAgICAg
fQogCi0gICAgRXZhc19Db29yZCBiYXNlX294ID0gYnggKyBwcml2LT52aWV3Lng7Ci0gICAgRXZh
c19Db29yZCBveSA9IGJ5ICsgcHJpdi0+dmlldy55OworICAgIEV2YXNfQ29vcmQgYmFzZVRpbGVQ
b3NpdGlvblggPSBiYXNlWCArIHByaXYtPnZpZXcueDsKKyAgICBFdmFzX0Nvb3JkIHRpbGVQb3Np
dGlvblkgPSBiYXNlWSArIHByaXYtPnZpZXcueTsKIAotICAgIGV2YXNfb2JqZWN0X21vdmUocHJp
di0+Y29udGVudHNfY2xpcHBlciwKLSAgICAgICAgICAgICAgICAgICAgIG5ld194ICsgcHJpdi0+
dmlldy54LAotICAgICAgICAgICAgICAgICAgICAgbmV3X3kgKyBwcml2LT52aWV3LnkpOworICAg
IGV2YXNfb2JqZWN0X21vdmUocHJpdi0+Y29udGVudHNDbGlwcGVyLAorICAgICAgICAgICAgICAg
ICAgICAgbmV3WCArIHByaXYtPnZpZXcueCwKKyAgICAgICAgICAgICAgICAgICAgIG5ld1kgKyBw
cml2LT52aWV3LnkpOwogCi0gICAgaXRyID0gcHJpdi0+dmlldy5pdGVtczsKLSAgICBpdHJfZW5k
ID0gaXRyICsgcHJpdi0+dmlldy5yb3dzOworICAgIGl0ZXJhdG9yID0gcHJpdi0+dmlldy5pdGVt
czsKKyAgICBpdGVyYXRvckVuZCA9IGl0ZXJhdG9yICsgcHJpdi0+dmlldy5yb3dzOwogCi0gICAg
Zm9yICg7IGl0ciA8IGl0cl9lbmQ7IGl0cisrKSB7Ci0gICAgICAgIEV2YXNfQ29vcmQgb3ggPSBi
YXNlX294OwotICAgICAgICBFaW5hX0lubGlzdCogbHN0ID0gKml0cjsKKyAgICBmb3IgKDsgaXRl
cmF0b3IgPCBpdGVyYXRvckVuZDsgaXRlcmF0b3IrKykgeworICAgICAgICBFdmFzX0Nvb3JkIHRp
bGVQb3NpdGlvblggPSBiYXNlVGlsZVBvc2l0aW9uWDsKKyAgICAgICAgRWluYV9Jbmxpc3QqIGxp
c3QgPSAqaXRlcmF0b3I7CiAKLSAgICAgICAgRUlOQV9JTkxJU1RfRk9SRUFDSChsc3QsIGl0KSB7
Ci0gICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9tb3ZlKGl0LCBveCwg
b3kpOwotICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcmVzaXplKGl0
LCB0dywgdGgpOwotICAgICAgICAgICAgb3ggKz0gdHc7CisgICAgICAgIEVJTkFfSU5MSVNUX0ZP
UkVBQ0gobGlzdCwgaXRlbSkgeworICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X2l0ZW1fbW92ZShpdGVtLCB0aWxlUG9zaXRpb25YLCB0aWxlUG9zaXRpb25ZKTsKKyAgICAgICAg
ICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Jlc2l6ZShpdGVtLCB0aWxlV2lkdGgs
IHRpbGVIZWlnaHQpOworICAgICAgICAgICAgdGlsZVBvc2l0aW9uWCArPSB0aWxlV2lkdGg7CiAg
ICAgICAgIH0KLSAgICAgICAgb3kgKz0gdGg7CisgICAgICAgIHRpbGVQb3NpdGlvblkgKz0gdGls
ZUhlaWdodDsKICAgICB9CiAKICAgICByZXR1cm4gRUlOQV9UUlVFOwpAQCAtMTY0NCw4MSArMTY0
NCw4MSBAQCBFaW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfem9vbV93ZWFrX3NldChF
dmFzX09iamVjdCogZXdrVGlsZSwgZmxvYXQgem9vbQogdm9pZCBld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9maXhfb2Zmc2V0cyhFdmFzX09iamVjdCogZXdrVGlsZSwgRXZhc19Db29yZCB3aWR0aCwg
RXZhc19Db29yZCBoZWlnaHQpCiB7CiAgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4oZXdrVGls
ZSwgcHJpdik7Ci0gICAgRWluYV9Jbmxpc3QqKiBpdHIsICoqaXRyX2VuZDsKLSAgICBFd2tfVGls
ZWRfQmFja2luZ19TdG9yZV9JdGVtKiBpdDsKLSAgICBFdmFzX0Nvb3JkIG5ld194ID0gcHJpdi0+
dmlldy5vZmZzZXQuY3VyLng7Ci0gICAgRXZhc19Db29yZCBuZXdfeSA9IHByaXYtPnZpZXcub2Zm
c2V0LmN1ci55OwotICAgIEV2YXNfQ29vcmQgYnggPSBwcml2LT52aWV3Lm9mZnNldC5iYXNlLng7
Ci0gICAgRXZhc19Db29yZCBieSA9IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueTsKLSAgICBFdmFz
X0Nvb3JkIHR3ID0gcHJpdi0+dmlldy50aWxlLndpZHRoOwotICAgIEV2YXNfQ29vcmQgdGggPSBw
cml2LT52aWV3LnRpbGUuaGVpZ2h0OwotCi0gICAgaWYgKC1uZXdfeCA+IHdpZHRoKSB7Ci0gICAg
ICAgIG5ld194ID0gLXdpZHRoOwotICAgICAgICBieCA9IG5ld194ICUgdHc7Ci0gICAgICAgIHBy
aXYtPm1vZGVsLmJhc2UuY29sID0gLW5ld194IC8gdHc7CisgICAgRWluYV9Jbmxpc3QqKiBpdGVy
YXRvciwgKippdGVyYXRvckVuZDsKKyAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKiBp
dGVtOworICAgIEV2YXNfQ29vcmQgbmV3WCA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci54OworICAg
IEV2YXNfQ29vcmQgbmV3WSA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci55OworICAgIEV2YXNfQ29v
cmQgYmFzZVggPSBwcml2LT52aWV3Lm9mZnNldC5iYXNlLng7CisgICAgRXZhc19Db29yZCBiYXNl
WSA9IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueTsKKyAgICBFdmFzX0Nvb3JkIHRpbGVXaWR0aCA9
IHByaXYtPnZpZXcudGlsZS53aWR0aDsKKyAgICBFdmFzX0Nvb3JkIHRpbGVIZWlnaHQgPSBwcml2
LT52aWV3LnRpbGUuaGVpZ2h0OworCisgICAgaWYgKC1uZXdYID4gd2lkdGgpIHsKKyAgICAgICAg
bmV3WCA9IC13aWR0aDsKKyAgICAgICAgYmFzZVggPSBuZXdYICUgdGlsZVdpZHRoOworICAgICAg
ICBwcml2LT5tb2RlbC5iYXNlLmNvbHVtbiA9IC1uZXdYIC8gdGlsZVdpZHRoOwogICAgIH0KIAot
ICAgIGlmICgtbmV3X3kgPiBoZWlnaHQpIHsKLSAgICAgICAgbmV3X3kgPSAtaGVpZ2h0OwotICAg
ICAgICBieSA9IG5ld195ICUgdGg7Ci0gICAgICAgIHByaXYtPm1vZGVsLmJhc2Uucm93ID0gLW5l
d195IC8gdGg7CisgICAgaWYgKC1uZXdZID4gaGVpZ2h0KSB7CisgICAgICAgIG5ld1kgPSAtaGVp
Z2h0OworICAgICAgICBiYXNlWSA9IG5ld1kgJSB0aWxlSGVpZ2h0OworICAgICAgICBwcml2LT5t
b2RlbC5iYXNlLnJvdyA9IC1uZXdZIC8gdGlsZUhlaWdodDsKICAgICB9CiAKLSAgICBpZiAoYngg
Pj0gMCB8fCBieCA8PSAtMiAqIHByaXYtPnZpZXcudGlsZS53aWR0aCkgewotICAgICAgICBieCA9
IG5ld194ICUgdHc7Ci0gICAgICAgIHByaXYtPm1vZGVsLmJhc2UuY29sID0gLW5ld194IC8gdHc7
CisgICAgaWYgKGJhc2VYID49IDAgfHwgYmFzZVggPD0gLTIgKiBwcml2LT52aWV3LnRpbGUud2lk
dGgpIHsKKyAgICAgICAgYmFzZVggPSBuZXdYICUgdGlsZVdpZHRoOworICAgICAgICBwcml2LT5t
b2RlbC5iYXNlLmNvbHVtbiA9IC1uZXdYIC8gdGlsZVdpZHRoOwogICAgIH0KIAotICAgIGlmIChi
eSA+PSAwIHx8IGJ5IDw9IC0yICogcHJpdi0+dmlldy50aWxlLmhlaWdodCkgewotICAgICAgICBi
eSA9IG5ld195ICUgdGg7Ci0gICAgICAgIHByaXYtPm1vZGVsLmJhc2Uucm93ID0gLW5ld195IC8g
dGg7CisgICAgaWYgKGJhc2VZID49IDAgfHwgYmFzZVkgPD0gLTIgKiBwcml2LT52aWV3LnRpbGUu
aGVpZ2h0KSB7CisgICAgICAgIGJhc2VZID0gbmV3WSAlIHRpbGVIZWlnaHQ7CisgICAgICAgIHBy
aXYtPm1vZGVsLmJhc2Uucm93ID0gLW5ld1kgLyB0aWxlSGVpZ2h0OwogICAgIH0KIAotICAgIHBy
aXYtPnZpZXcub2Zmc2V0LmN1ci54ID0gbmV3X3g7Ci0gICAgcHJpdi0+dmlldy5vZmZzZXQuY3Vy
LnkgPSBuZXdfeTsKLSAgICBwcml2LT52aWV3Lm9mZnNldC5vbGQueCA9IG5ld194OwotICAgIHBy
aXYtPnZpZXcub2Zmc2V0Lm9sZC55ID0gbmV3X3k7Ci0gICAgcHJpdi0+dmlldy5vZmZzZXQuYmFz
ZS54ID0gYng7Ci0gICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ID0gYnk7Ci0gICAgZXZhc19v
YmplY3RfbW92ZShwcml2LT5jb250ZW50c19jbGlwcGVyLAotICAgICAgICAgICAgICAgICAgICAg
bmV3X3ggKyBwcml2LT52aWV3LngsCi0gICAgICAgICAgICAgICAgICAgICBuZXdfeSArIHByaXYt
PnZpZXcueSk7Ci0KLSAgICBFdmFzX0Nvb3JkIG95ID0gcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55
ICsgcHJpdi0+dmlldy55OwotICAgIEV2YXNfQ29vcmQgYmFzZV9veCA9IHByaXYtPnZpZXcueCAr
IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueDsKLQotICAgIGl0ciA9IHByaXYtPnZpZXcuaXRlbXM7
Ci0gICAgaXRyX2VuZCA9IGl0ciArIHByaXYtPnZpZXcucm93czsKLQotICAgIGZvciAoOyBpdHIg
PCBpdHJfZW5kOyBpdHIrKykgewotICAgICAgICBFdmFzX0Nvb3JkIG94ID0gYmFzZV9veDsKLSAg
ICAgICAgRWluYV9Jbmxpc3QqIGxzdCA9ICppdHI7Ci0KLSAgICAgICAgRUlOQV9JTkxJU1RfRk9S
RUFDSChsc3QsIGl0KSB7Ci0gICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRl
bV9tb3ZlKGl0LCBveCwgb3kpOwotICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X2l0ZW1fcmVzaXplKGl0LCB0dywgdGgpOwotICAgICAgICAgICAgb3ggKz0gdHc7CisgICAgcHJp
di0+dmlldy5vZmZzZXQuY3VyLnggPSBuZXdYOworICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1ci55
ID0gbmV3WTsKKyAgICBwcml2LT52aWV3Lm9mZnNldC5vbGQueCA9IG5ld1g7CisgICAgcHJpdi0+
dmlldy5vZmZzZXQub2xkLnkgPSBuZXdZOworICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCA9
IGJhc2VYOworICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSA9IGJhc2VZOworICAgIGV2YXNf
b2JqZWN0X21vdmUocHJpdi0+Y29udGVudHNDbGlwcGVyLAorICAgICAgICAgICAgICAgICAgICAg
bmV3WCArIHByaXYtPnZpZXcueCwKKyAgICAgICAgICAgICAgICAgICAgIG5ld1kgKyBwcml2LT52
aWV3LnkpOworCisgICAgRXZhc19Db29yZCB0aWxlUG9zaXRpb25ZID0gcHJpdi0+dmlldy5vZmZz
ZXQuYmFzZS55ICsgcHJpdi0+dmlldy55OworICAgIEV2YXNfQ29vcmQgYmFzZVRpbGVQb3NpdGlv
blggPSBwcml2LT52aWV3LnggKyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLng7CisKKyAgICBpdGVy
YXRvciA9IHByaXYtPnZpZXcuaXRlbXM7CisgICAgaXRlcmF0b3JFbmQgPSBpdGVyYXRvciArIHBy
aXYtPnZpZXcucm93czsKKworICAgIGZvciAoOyBpdGVyYXRvciA8IGl0ZXJhdG9yRW5kOyBpdGVy
YXRvcisrKSB7CisgICAgICAgIEV2YXNfQ29vcmQgdGlsZVBvc2l0aW9uWCA9IGJhc2VUaWxlUG9z
aXRpb25YOworICAgICAgICBFaW5hX0lubGlzdCogbHN0ID0gKml0ZXJhdG9yOworCisgICAgICAg
IEVJTkFfSU5MSVNUX0ZPUkVBQ0gobHN0LCBpdGVtKSB7CisgICAgICAgICAgICBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfaXRlbV9tb3ZlKGl0ZW0sIHRpbGVQb3NpdGlvblgsIHRpbGVQb3NpdGlv
blkpOworICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcmVzaXplKGl0
ZW0sIHRpbGVXaWR0aCwgdGlsZUhlaWdodCk7CisgICAgICAgICAgICB0aWxlUG9zaXRpb25YICs9
IHRpbGVXaWR0aDsKICAgICAgICAgfQotICAgICAgICBveSArPSB0aDsKKyAgICAgICAgdGlsZVBv
c2l0aW9uWSArPSB0aWxlSGVpZ2h0OwogICAgIH0KIH0KIAogdm9pZCBld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV96b29tX3dlYWtfc21vb3RoX3NjYWxlX3NldChFdmFzX09iamVjdCogZXdrVGlsZSwg
RWluYV9Cb29sIHNtb290aFNjYWxlKQogewogICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKGV3
a1RpbGUsIHByaXYpOwotICAgIEVpbmFfSW5saXN0KiogaXRyLCAqKml0cl9lbmQ7CisgICAgRWlu
YV9Jbmxpc3QqKiBpdGVyYXRvciwgKippdGVyYXRvckVuZDsKIAotICAgIGl0ciA9IHByaXYtPnZp
ZXcuaXRlbXM7Ci0gICAgaXRyX2VuZCA9IGl0ciArIHByaXYtPnZpZXcucm93czsKLSAgICBwcml2
LT52aWV3LnRpbGUuem9vbV93ZWFrX3Ntb290aF9zY2FsZSA9IHNtb290aFNjYWxlOworICAgIGl0
ZXJhdG9yID0gcHJpdi0+dmlldy5pdGVtczsKKyAgICBpdGVyYXRvckVuZCA9IGl0ZXJhdG9yICsg
cHJpdi0+dmlldy5yb3dzOworICAgIHByaXYtPnZpZXcudGlsZS56b29tV2Vha1Ntb290aFNjYWxl
ID0gc21vb3RoU2NhbGU7CiAKLSAgICBmb3IgKDsgaXRyPCBpdHJfZW5kOyBpdHIrKykgewotICAg
ICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKiBpdDsKLSAgICAgICAgRUlOQV9JTkxJ
U1RfRk9SRUFDSCgqaXRyLCBpdCkKLSAgICAgICAgICAgIGlmIChpdC0+dGlsZSkKKyAgICBmb3Ig
KDsgaXRlcmF0b3I8IGl0ZXJhdG9yRW5kOyBpdGVyYXRvcisrKSB7CisgICAgICAgIEV3a19UaWxl
ZF9CYWNraW5nX1N0b3JlX0l0ZW0qIGl0ZW07CisgICAgICAgIEVJTkFfSU5MSVNUX0ZPUkVBQ0go
Kml0ZXJhdG9yLCBpdGVtKQorICAgICAgICAgICAgaWYgKGl0ZW0tPnRpbGUpCiAgICAgICAgICAg
ICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fc21vb3RoX3NjYWxlX3NldAotICAg
ICAgICAgICAgICAgICAgICAoaXQsIHNtb290aFNjYWxlKTsKKyAgICAgICAgICAgICAgICAgICAg
KGl0ZW0sIHNtb290aFNjYWxlKTsKICAgICB9CiB9CiAKQEAgLTE3MzYsMTUgKzE3MzYsMTUgQEAg
RWluYV9Cb29sIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3VwZGF0ZShFdmFzX09iamVjdCogZXdr
VGlsZSwgY29uc3QgRWluYV9SZWN0YW4KIHZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdXBk
YXRlc19wcm9jZXNzX3ByZV9zZXQoRXZhc19PYmplY3QqIGV3a1RpbGUsIHZvaWQqICgqY2FsbGJh
Y2spKHZvaWQqIGRhdGEsIEV2YXNfT2JqZWN0ICpld2tUaWxlKSwgY29uc3Qgdm9pZCogZGF0YSkK
IHsKICAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihld2tUaWxlLCBwcml2KTsKLSAgICBwcml2
LT5wcm9jZXNzLnByZV9jYiA9IGNhbGxiYWNrOwotICAgIHByaXYtPnByb2Nlc3MucHJlX2RhdGEg
PSAodm9pZCopZGF0YTsKKyAgICBwcml2LT5wcm9jZXNzLnByZUNhbGxiYWNrID0gY2FsbGJhY2s7
CisgICAgcHJpdi0+cHJvY2Vzcy5wcmVEYXRhID0gKHZvaWQqKWRhdGE7CiB9CiAKLXZvaWQgZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRlc19wcm9jZXNzX3Bvc3Rfc2V0KEV2YXNfT2JqZWN0
KiBld2tUaWxlLCB2b2lkKiAoKmNhbGxiYWNrKSh2b2lkKiBkYXRhLCB2b2lkKiBwcmVfZGF0YSwg
RXZhc19PYmplY3QgKmV3a1RpbGUpLCBjb25zdCB2b2lkKiBkYXRhKQordm9pZCBld2tfdGlsZWRf
YmFja2luZ19zdG9yZV91cGRhdGVzX3Byb2Nlc3NfcG9zdF9zZXQoRXZhc19PYmplY3QqIGV3a1Rp
bGUsIHZvaWQqICgqY2FsbGJhY2spKHZvaWQqIGRhdGEsIHZvaWQqIHByZURhdGEsIEV2YXNfT2Jq
ZWN0ICpld2tUaWxlKSwgY29uc3Qgdm9pZCogZGF0YSkKIHsKICAgICBQUklWX0RBVEFfR0VUX09S
X1JFVFVSTihld2tUaWxlLCBwcml2KTsKLSAgICBwcml2LT5wcm9jZXNzLnBvc3RfY2IgPSBjYWxs
YmFjazsKLSAgICBwcml2LT5wcm9jZXNzLnBvc3RfZGF0YSA9ICh2b2lkKilkYXRhOworICAgIHBy
aXYtPnByb2Nlc3MucG9zdENhbGxiYWNrID0gY2FsbGJhY2s7CisgICAgcHJpdi0+cHJvY2Vzcy5w
b3N0RGF0YSA9ICh2b2lkKilkYXRhOwogfQogCiB2b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3VwZGF0ZXNfcHJvY2VzcyhFdmFzX09iamVjdCogZXdrVGlsZSkKQEAgLTE3ODYsNyArMTc4Niw3
IEBAIHZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZGlzYWJsZWRfdXBkYXRlX3NldChFdmFz
X09iamVjdCogZXdrVGlsZSwgRWluYV9Cb29sCiB2b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3Jl
X2ZsdXNoKEV2YXNfT2JqZWN0KiBld2tUaWxlKQogewogICAgIFBSSVZfREFUQV9HRVRfT1JfUkVU
VVJOKGV3a1RpbGUsIHByaXYpOwotICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSogdHVjID0gMDsK
KyAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHRpbGVVbnVzZWRDYWNoZSA9IDA7CiAKICAgICBw
cml2LT52aWV3Lm9mZnNldC5jdXIueCA9IDA7CiAgICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkg
PSAwOwpAQCAtMTc5NCwxMSArMTc5NCwxMSBAQCB2b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3Jl
X2ZsdXNoKEV2YXNfT2JqZWN0KiBld2tUaWxlKQogICAgIHByaXYtPnZpZXcub2Zmc2V0Lm9sZC55
ID0gMDsKICAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggPSAwOwogICAgIHByaXYtPnZpZXcu
b2Zmc2V0LmJhc2UueSA9IDA7Ci0gICAgcHJpdi0+bW9kZWwuYmFzZS5jb2wgPSAwOworICAgIHBy
aXYtPm1vZGVsLmJhc2UuY29sdW1uID0gMDsKICAgICBwcml2LT5tb2RlbC5iYXNlLnJvdyA9IDA7
Ci0gICAgcHJpdi0+bW9kZWwuY3VyLmNvbHMgPSAxOwotICAgIHByaXYtPm1vZGVsLmN1ci5yb3dz
ID0gMTsKLSAgICBwcml2LT5tb2RlbC5vbGQuY29scyA9IDA7CisgICAgcHJpdi0+bW9kZWwuY3Vy
cmVudC5jb2x1bW5zID0gMTsKKyAgICBwcml2LT5tb2RlbC5jdXJyZW50LnJvd3MgPSAxOworICAg
IHByaXYtPm1vZGVsLm9sZC5jb2x1bW5zID0gMDsKICAgICBwcml2LT5tb2RlbC5vbGQucm93cyA9
IDA7CiAgICAgcHJpdi0+Y2hhbmdlZC5zaXplID0gRUlOQV9UUlVFOwogCkBAIC0xODA5LDggKzE4
MDksOCBAQCB2b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX2ZsdXNoKEV2YXNfT2JqZWN0KiBl
d2tUaWxlKQogCiAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVz
dF9mbHVzaChwcml2KTsKICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9kaXNzb2Np
YXRlX2FsbChwcml2KTsKLSAgICB0dWMgPSBld2tfdGlsZV9tYXRyaXhfdW51c2VkX2NhY2hlX2dl
dChwcml2LT5tb2RlbC5tYXRyaXgpOwotICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9jbGVhcih0
dWMpOworICAgIHRpbGVVbnVzZWRDYWNoZSA9IGV3a190aWxlX21hdHJpeF91bnVzZWRfY2FjaGVf
Z2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7CisgICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2NsZWFy
KHRpbGVVbnVzZWRDYWNoZSk7CiAKICNpZmRlZiBERUJVR19NRU1fTEVBS1MKICAgICBwcmludGYo
IlxuRkxVU0hFRCBCQUNLSU5HIFNUT1JFLCBTVEFUVVMgQUZURVIgUkVDUkVBVElORyBUSUxFIE1B
VFJJWDpcbiIpOwpAQCAtMTgyMywxNiArMTgyMywxNiBAQCBFaW5hX0Jvb2wgZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZWdpb24oRXZhc19PYmplY3QqIGV3a1RpbGUsIEV2YXNf
QwogICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKGV3a1RpbGUsIHByaXYsIEVJTkFfRkFMU0Up
OwogICAgIEVpbmFfVGlsZV9HcmlkX1NsaWNlciBzbGljZXI7CiAgICAgY29uc3QgRWluYV9UaWxl
X0dyaWRfSW5mbyogaW5mbzsKLSAgICBFdmFzX0Nvb3JkIHR3LCB0aDsKLSAgICBFd2tfVGlsZV9V
bnVzZWRfQ2FjaGUqIHR1YzsKKyAgICBFdmFzX0Nvb3JkIHRpbGVXaWR0aCwgdGlsZUhlaWdodDsK
KyAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHRpbGVVbnVzZWRDYWNoZTsKIAotICAgIHR3ID0g
cHJpdi0+dmlldy50aWxlLndpZHRoOwotICAgIHRoID0gcHJpdi0+dmlldy50aWxlLmhlaWdodDsK
KyAgICB0aWxlV2lkdGggPSBwcml2LT52aWV3LnRpbGUud2lkdGg7CisgICAgdGlsZUhlaWdodCA9
IHByaXYtPnZpZXcudGlsZS5oZWlnaHQ7CiAgICAgem9vbSA9IFJPVU5ERURfWk9PTShwcml2LT52
aWV3LnRpbGUud2lkdGgsIHpvb20pOwogCi0gICAgaWYgKCFlaW5hX3RpbGVfZ3JpZF9zbGljZXJf
c2V0dXAoJnNsaWNlciwgeCwgeSwgd2lkdGgsIGhlaWdodCwgdHcsIHRoKSkgeworICAgIGlmICgh
ZWluYV90aWxlX2dyaWRfc2xpY2VyX3NldHVwKCZzbGljZXIsIHgsIHksIHdpZHRoLCBoZWlnaHQs
IHRpbGVXaWR0aCwgdGlsZUhlaWdodCkpIHsKICAgICAgICAgRVJSKCJjb3VsZCBub3Qgc2V0dXAg
Z3JpZCBzbGljZXIgZm9yICVkLCVkKyVkeCVkIHRpbGU9JWR4JWQiLAotICAgICAgICAgICAgeCwg
eSwgd2lkdGgsIGhlaWdodCwgdHcsIHRoKTsKKyAgICAgICAgICAgIHgsIHksIHdpZHRoLCBoZWln
aHQsIHRpbGVXaWR0aCwgdGlsZUhlaWdodCk7CiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwog
ICAgIH0KIApAQCAtMTg0NSw0NSArMTg0NSw0NSBAQCBFaW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfcHJlX3JlbmRlcl9yZWdpb24oRXZhc19PYmplY3QqIGV3a1RpbGUsIEV2YXNfQwog
CiAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcHJvY2Vzc19pZGxlcl9zdGFydChw
cml2KTsKIAotICAgIHR1YyA9IGV3a190aWxlX21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYt
Pm1vZGVsLm1hdHJpeCk7Ci0gICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2xvY2tfYXJlYSh0dWMs
IHgsIHksIHdpZHRoLCBoZWlnaHQsIHpvb20pOworICAgIHRpbGVVbnVzZWRDYWNoZSA9IGV3a190
aWxlX21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7CisgICAgZXdr
X3RpbGVfdW51c2VkX2NhY2hlX2xvY2tfYXJlYSh0aWxlVW51c2VkQ2FjaGUsIHgsIHksIHdpZHRo
LCBoZWlnaHQsIHpvb20pOwogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKIEVpbmFfQm9vbCBl
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlbGF0aXZlX3JhZGl1cyhFdmFzX09i
amVjdCogZXdrVGlsZSwgdW5zaWduZWQgaW50IG4sIGZsb2F0IHpvb20pCiB7CiAgICAgUFJJVl9E
QVRBX0dFVF9PUl9SRVRVUk4oZXdrVGlsZSwgcHJpdiwgRUlOQV9GQUxTRSk7Ci0gICAgdW5zaWdu
ZWQgbG9uZyBzdGFydF9yb3csIGVuZF9yb3csIHN0YXJ0X2NvbCwgZW5kX2NvbCwgaSwgaiwgd2lk
dGgsIGhlaWdodDsKLSAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHR1YzsKKyAgICB1bnNpZ25l
ZCBsb25nIHN0YXJ0Um93LCBlbmRSb3csIHN0YXJ0Q29sLCBlbmRDb2wsIGksIGosIHdpZHRoLCBo
ZWlnaHQ7CisgICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0aWxlVW51c2VkQ2FjaGU7CiAKICAg
ICBJTkYoInByaXYtPm1vZGVsLmJhc2Uucm93ID0lbGQsIG49JXUgcHJpdi0+dmlldy5yb3dzPSVs
dSIsCiAgICAgICAgIHByaXYtPm1vZGVsLmJhc2Uucm93LCBuLCBwcml2LT52aWV3LnJvd3MpOwot
ICAgIHN0YXJ0X3JvdyA9IChsb25nKXByaXYtPm1vZGVsLmJhc2Uucm93IC0gbjsKLSAgICBzdGFy
dF9jb2wgPSAobG9uZylwcml2LT5tb2RlbC5iYXNlLmNvbCAtIG47Ci0gICAgZW5kX3JvdyA9IHN0
ZDo6bWluKHByaXYtPm1vZGVsLmN1ci5yb3dzIC0gMSwKKyAgICBzdGFydFJvdyA9IChsb25nKXBy
aXYtPm1vZGVsLmJhc2Uucm93IC0gbjsKKyAgICBzdGFydENvbCA9IChsb25nKXByaXYtPm1vZGVs
LmJhc2UuY29sdW1uIC0gbjsKKyAgICBlbmRSb3cgPSBzdGQ6Om1pbihwcml2LT5tb2RlbC5jdXJy
ZW50LnJvd3MgLSAxLAogICAgICAgICAgICAgICAgICAgICAgICBwcml2LT5tb2RlbC5iYXNlLnJv
dyArIHByaXYtPnZpZXcucm93cyArIG4gLSAxKTsKLSAgICBlbmRfY29sID0gc3RkOjptaW4ocHJp
di0+bW9kZWwuY3VyLmNvbHMgLSAxLAotICAgICAgICAgICAgICAgICAgICAgICBwcml2LT5tb2Rl
bC5iYXNlLmNvbCArIHByaXYtPnZpZXcuY29scyArIG4gLSAxKTsKKyAgICBlbmRDb2wgPSBzdGQ6
Om1pbihwcml2LT5tb2RlbC5jdXJyZW50LmNvbHVtbnMgLSAxLAorICAgICAgICAgICAgICAgICAg
ICAgICBwcml2LT5tb2RlbC5iYXNlLmNvbHVtbiArIHByaXYtPnZpZXcuY29scyArIG4gLSAxKTsK
IAotICAgIElORigic3RhcnRfcm93PSVsdSwgZW5kX3Jvdz0lbHUsIHN0YXJ0X2NvbD0lbHUsIGVu
ZF9jb2w9JWx1IiwKLSAgICAgICAgc3RhcnRfcm93LCBlbmRfcm93LCBzdGFydF9jb2wsIGVuZF9j
b2wpOworICAgIElORigic3RhcnRSb3c9JWx1LCBlbmRSb3c9JWx1LCBzdGFydENvbD0lbHUsIGVu
ZENvbD0lbHUiLAorICAgICAgICBzdGFydFJvdywgZW5kUm93LCBzdGFydENvbCwgZW5kQ29sKTsK
IAogICAgIHpvb20gPSBST1VOREVEX1pPT00ocHJpdi0+dmlldy50aWxlLndpZHRoLCB6b29tKTsK
IAotICAgIGZvciAoaSA9IHN0YXJ0X3JvdzsgaSA8PSBlbmRfcm93OyBpKyspCi0gICAgICAgIGZv
ciAoaiA9IHN0YXJ0X2NvbDsgaiA8PSBlbmRfY29sOyBqKyspCisgICAgZm9yIChpID0gc3RhcnRS
b3c7IGkgPD0gZW5kUm93OyBpKyspCisgICAgICAgIGZvciAoaiA9IHN0YXJ0Q29sOyBqIDw9IGVu
ZENvbDsgaisrKQogICAgICAgICAgICAgaWYgKCFfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJl
X3JlbmRlcl9yZXF1ZXN0X2FkZChwcml2LCBqLCBpLCB6b29tLCBQUkVfUkVOREVSX1BSSU9SSVRZ
X0xPVykpCiAgICAgICAgICAgICAgICAgZ290byBzdGFydF9wcm9jZXNzaW5nOwogCiBzdGFydF9w
cm9jZXNzaW5nOgogICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Byb2Nlc3NfaWRs
ZXJfc3RhcnQocHJpdik7CiAKLSAgICB0dWMgPSBld2tfdGlsZV9tYXRyaXhfdW51c2VkX2NhY2hl
X2dldChwcml2LT5tb2RlbC5tYXRyaXgpOwotICAgIGhlaWdodCA9IChlbmRfcm93IC0gc3RhcnRf
cm93ICsgMSkgKiBUSUxFX1NJWkVfQVRfWk9PTShwcml2LT52aWV3LnRpbGUuaGVpZ2h0LCB6b29t
KTsKLSAgICB3aWR0aCA9IChlbmRfY29sIC0gc3RhcnRfY29sICsgMSkgKiBUSUxFX1NJWkVfQVRf
Wk9PTShwcml2LT52aWV3LnRpbGUud2lkdGgsIHpvb20pOwotICAgIGV3a190aWxlX3VudXNlZF9j
YWNoZV9sb2NrX2FyZWEodHVjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RhcnRfY29sICogVElMRV9TSVpFX0FUX1pPT00ocHJpdi0+dmlldy50aWxlLndpZHRoLCB6b29t
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0X3JvdyAqIFRJTEVf
U0laRV9BVF9aT09NKHByaXYtPnZpZXcudGlsZS5oZWlnaHQsIHpvb20pLCB3aWR0aCwgaGVpZ2h0
LCB6b29tKTsKKyAgICB0aWxlVW51c2VkQ2FjaGUgPSBld2tfdGlsZV9tYXRyaXhfdW51c2VkX2Nh
Y2hlX2dldChwcml2LT5tb2RlbC5tYXRyaXgpOworICAgIGhlaWdodCA9IChlbmRSb3cgLSBzdGFy
dFJvdyArIDEpICogVElMRV9TSVpFX0FUX1pPT00ocHJpdi0+dmlldy50aWxlLmhlaWdodCwgem9v
bSk7CisgICAgd2lkdGggPSAoZW5kQ29sIC0gc3RhcnRDb2wgKyAxKSAqIFRJTEVfU0laRV9BVF9a
T09NKHByaXYtPnZpZXcudGlsZS53aWR0aCwgem9vbSk7CisgICAgZXdrX3RpbGVfdW51c2VkX2Nh
Y2hlX2xvY2tfYXJlYSh0aWxlVW51c2VkQ2FjaGUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdGFydENvbCAqIFRJTEVfU0laRV9BVF9aT09NKHByaXYtPnZpZXcudGlsZS53
aWR0aCwgem9vbSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFJv
dyAqIFRJTEVfU0laRV9BVF9aT09NKHByaXYtPnZpZXcudGlsZS5oZWlnaHQsIHpvb20pLCB3aWR0
aCwgaGVpZ2h0LCB6b29tKTsKIAogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CkBAIC0xODkxLDEy
ICsxODkxLDEyIEBAIHN0YXJ0X3Byb2Nlc3Npbmc6CiB2b2lkIGV3a190aWxlZF9iYWNraW5nX3N0
b3JlX3ByZV9yZW5kZXJfY2FuY2VsKEV2YXNfT2JqZWN0KiBld2tUaWxlKQogewogICAgIFBSSVZf
REFUQV9HRVRfT1JfUkVUVVJOKGV3a1RpbGUsIHByaXYpOwotICAgIEV3a19UaWxlX1VudXNlZF9D
YWNoZSogdHVjOworICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSogdGlsZVVudXNlZENhY2hlOwog
CiAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9jbGVhcihw
cml2KTsKIAotICAgIHR1YyA9IGV3a190aWxlX21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYt
Pm1vZGVsLm1hdHJpeCk7Ci0gICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3VubG9ja19hcmVhKHR1
Yyk7CisgICAgdGlsZVVudXNlZENhY2hlID0gZXdrX3RpbGVfbWF0cml4X3VudXNlZF9jYWNoZV9n
ZXQocHJpdi0+bW9kZWwubWF0cml4KTsKKyAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfdW5sb2Nr
X2FyZWEodGlsZVVudXNlZENhY2hlKTsKIH0KIAogRWluYV9Cb29sIGV3a190aWxlZF9iYWNraW5n
X3N0b3JlX2Rpc2FibGVfcmVuZGVyKEV2YXNfT2JqZWN0KiBld2tUaWxlKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9lZmwvZXdrL2V3a190aWxlZF9tYXRyaXguY3BwIGIvU291cmNlL1dlYktp
dC9lZmwvZXdrL2V3a190aWxlZF9tYXRyaXguY3BwCmluZGV4IGU5MWJkNzc3NzdlMTA1ZDBmZTIy
ZGNhZjhmMmQ2YWEwMDE2ZDIyNGUuLmM4YzM0ODUzMjA2ZDFkYmRlYTY1MTg4NjQ4MDc0YTQ0ZTY5
NDkzM2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfbWF0cml4
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX21hdHJpeC5jcHAKQEAg
LTMzLDEwICszMywxMCBAQAogCiBzdHJ1Y3QgX0V3a19UaWxlX01hdHJpeCB7CiAgICAgRWluYV9N
YXRyaXhzcGFyc2UqIG1hdHJpeDsKLSAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHR1YzsKKyAg
ICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHRpbGllVW51c2VkQ2FjaGU7CiAgICAgRXZhc19Db2xv
cnNwYWNlIGNzcGFjZTsKICAgICBzdHJ1Y3QgewotICAgICAgICB2b2lkICgqY2IpKHZvaWQqIGRh
dGEsIEV3a19UaWxlKiB0aWxlLCBjb25zdCBFaW5hX1JlY3RhbmdsZSogdXBkYXRlKTsKKyAgICAg
ICAgdm9pZCAoKmNhbGxiYWNrKSh2b2lkKiBkYXRhLCBFd2tfVGlsZSogdGlsZSwgY29uc3QgRWlu
YV9SZWN0YW5nbGUqIHVwZGF0ZSk7CiAgICAgICAgIHZvaWQqIGRhdGE7CiAgICAgfSByZW5kZXI7
CiAgICAgdW5zaWduZWQgaW50IGZyb3plbjsKQEAgLTYxLDQyICs2MSw0MiBAQCBzdGF0aWMgdWlu
dDY0X3QgYnl0ZXNfbGVha2VkID0gMDsKIC8qIGNhbGxlZCB3aGVuIG1hdHJpeHNwYXJzZSBpcyBy
ZXNpemVkIG9yIGZyZWVkICovCiBzdGF0aWMgdm9pZCBfZXdrX3RpbGVfbWF0cml4X2NlbGxfZnJl
ZSh2b2lkKiB1c2VyRGF0YSwgdm9pZCogY2VsbERhdGEpCiB7Ci0gICAgRXdrX1RpbGVfTWF0cml4
KiB0bSA9IHN0YXRpY19jYXN0PEV3a19UaWxlX01hdHJpeCo+KHVzZXJEYXRhKTsKKyAgICBFd2tf
VGlsZV9NYXRyaXgqIHRpbGVNYXRyaXggPSBzdGF0aWNfY2FzdDxFd2tfVGlsZV9NYXRyaXgqPih1
c2VyRGF0YSk7CiAgICAgRXdrX1RpbGUqIHRpbGUgPSBzdGF0aWNfY2FzdDxFd2tfVGlsZSo+KGNl
bGxEYXRhKTsKIAogICAgIGlmICghdGlsZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZXdrX3Rp
bGVfdW51c2VkX2NhY2hlX2ZyZWV6ZSh0bS0+dHVjKTsKKyAgICBld2tfdGlsZV91bnVzZWRfY2Fj
aGVfZnJlZXplKHRpbGVNYXRyaXgtPnRpbGllVW51c2VkQ2FjaGUpOwogCiAgICAgaWYgKHRpbGUt
PnVwZGF0ZXMgfHwgdGlsZS0+c3RhdHMuZnVsbF91cGRhdGUpCi0gICAgICAgIHRtLT51cGRhdGVz
ID0gZWluYV9saXN0X3JlbW92ZSh0bS0+dXBkYXRlcywgdGlsZSk7CisgICAgICAgIHRpbGVNYXRy
aXgtPnVwZGF0ZXMgPSBlaW5hX2xpc3RfcmVtb3ZlKHRpbGVNYXRyaXgtPnVwZGF0ZXMsIHRpbGUp
OwogCiAgICAgaWYgKHRpbGUtPnZpc2libGUpCiAgICAgICAgIEVSUigiZnJlZWluZyBjZWxsIHRo
YXQgaXMgdmlzaWJsZSwgbGVha2luZyB0aWxlICVwIiwgdGlsZSk7CiAgICAgZWxzZSB7Ci0gICAg
ICAgIGlmICghZXdrX3RpbGVfdW51c2VkX2NhY2hlX3RpbGVfZ2V0KHRtLT50dWMsIHRpbGUpKQot
ICAgICAgICAgICAgRVJSKCJ0aWxlICVwIHdhcyBub3QgaW4gY2FjaGUgJXA/IGxlYWtpbmcuLi4i
LCB0aWxlLCB0bS0+dHVjKTsKKyAgICAgICAgaWYgKCFld2tfdGlsZV91bnVzZWRfY2FjaGVfdGls
ZV9nZXQodGlsZU1hdHJpeC0+dGlsaWVVbnVzZWRDYWNoZSwgdGlsZSkpCisgICAgICAgICAgICBF
UlIoInRpbGUgJXAgd2FzIG5vdCBpbiBjYWNoZSAlcD8gbGVha2luZy4uLiIsIHRpbGUsIHRpbGVN
YXRyaXgtPnRpbGllVW51c2VkQ2FjaGUpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIERC
RygidGlsZSBjZWxsIGRvZXMgbm90IGV4aXN0IGFueW1vcmUsIGZyZWUgaXQgJXAiLCB0aWxlKTsK
ICNpZmRlZiBERUJVR19NRU1fTEVBS1MKLSAgICAgICAgICAgIHRtLT5zdGF0cy5ieXRlcy5mcmVl
ZCArPSB0aWxlLT5ieXRlczsKLSAgICAgICAgICAgIHRtLT5zdGF0cy50aWxlcy5mcmVlZCsrOwor
ICAgICAgICAgICAgdGlsZU1hdHJpeC0+c3RhdHMuYnl0ZXMuZnJlZWQgKz0gdGlsZS0+Ynl0ZXM7
CisgICAgICAgICAgICB0aWxlTWF0cml4LT5zdGF0cy50aWxlcy5mcmVlZCsrOwogI2VuZGlmCiAg
ICAgICAgICAgICBld2tfdGlsZV9mcmVlKHRpbGUpOwogICAgICAgICB9CiAgICAgfQogCi0gICAg
ZXdrX3RpbGVfdW51c2VkX2NhY2hlX3RoYXcodG0tPnR1Yyk7CisgICAgZXdrX3RpbGVfdW51c2Vk
X2NhY2hlX3RoYXcodGlsZU1hdHJpeC0+dGlsaWVVbnVzZWRDYWNoZSk7CiB9CiAKIC8qIGNhbGxl
ZCB3aGVuIGNhY2hlIG9mIHVudXNlZCB0aWxlIGlzIGZsdXNoZWQgKi8KIHN0YXRpYyB2b2lkIF9l
d2tfdGlsZV9tYXRyaXhfdGlsZV9mcmVlKHZvaWQqIGRhdGEsIEV3a19UaWxlKiB0aWxlKQogewot
ICAgIEV3a19UaWxlX01hdHJpeCogdG0gPSBzdGF0aWNfY2FzdDxFd2tfVGlsZV9NYXRyaXgqPihk
YXRhKTsKKyAgICBFd2tfVGlsZV9NYXRyaXgqIHRpbGVNYXRyaXggPSBzdGF0aWNfY2FzdDxFd2tf
VGlsZV9NYXRyaXgqPihkYXRhKTsKICAgICBFaW5hX01hdHJpeHNwYXJzZV9DZWxsKiBjZWxsOwog
Ci0gICAgaWYgKCFlaW5hX21hdHJpeHNwYXJzZV9jZWxsX2lkeF9nZXQodG0tPm1hdHJpeCwgdGls
ZS0+cm93LCB0aWxlLT5jb2wsICZjZWxsKSkgeworICAgIGlmICghZWluYV9tYXRyaXhzcGFyc2Vf
Y2VsbF9pZHhfZ2V0KHRpbGVNYXRyaXgtPm1hdHJpeCwgdGlsZS0+cm93LCB0aWxlLT5jb2wsICZj
ZWxsKSkgewogICAgICAgICBFUlIoInJlbW92aW5nIHRpbGUgJXAgdGhhdCB3YXMgbm90IGluIHRo
ZSBtYXRyaXg/IExlYWtpbmcuLi4iLCB0aWxlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAg
LTEwNyw3ICsxMDcsNyBAQCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVfbWF0cml4X3RpbGVfZnJlZSh2
b2lkKiBkYXRhLCBFd2tfVGlsZSogdGlsZSkKICAgICB9CiAKICAgICBpZiAodGlsZS0+dXBkYXRl
cyB8fCB0aWxlLT5zdGF0cy5mdWxsX3VwZGF0ZSkKLSAgICAgICAgdG0tPnVwZGF0ZXMgPSBlaW5h
X2xpc3RfcmVtb3ZlKHRtLT51cGRhdGVzLCB0aWxlKTsKKyAgICAgICAgdGlsZU1hdHJpeC0+dXBk
YXRlcyA9IGVpbmFfbGlzdF9yZW1vdmUodGlsZU1hdHJpeC0+dXBkYXRlcywgdGlsZSk7CiAKICAg
ICAvKiBzZXQgdG8gbnVsbCB0byBhdm9pZCBkb3VibGUgZnJlZSAqLwogICAgIGVpbmFfbWF0cml4
c3BhcnNlX2NlbGxfZGF0YV9yZXBsYWNlKGNlbGwsIDAsIDApOwpAQCAtMTIwLDggKzEyMCw4IEBA
IHN0YXRpYyB2b2lkIF9ld2tfdGlsZV9tYXRyaXhfdGlsZV9mcmVlKHZvaWQqIGRhdGEsIEV3a19U
aWxlKiB0aWxlKQogICAgIH0KIAogI2lmZGVmIERFQlVHX01FTV9MRUFLUwotICAgIHRtLT5zdGF0
cy5ieXRlcy5mcmVlZCArPSB0aWxlLT5ieXRlczsKLSAgICB0bS0+c3RhdHMudGlsZXMuZnJlZWQr
KzsKKyAgICB0aWxlTWF0cml4LT5zdGF0cy5ieXRlcy5mcmVlZCArPSB0aWxlLT5ieXRlczsKKyAg
ICB0aWxlTWF0cml4LT5zdGF0cy50aWxlcy5mcmVlZCsrOwogI2VuZGlmCiAKICAgICBld2tfdGls
ZV9mcmVlKHRpbGUpOwpAQCAtMTQ1LDM4ICsxNDUsMzggQEAgc3RhdGljIHZvaWQgX2V3a190aWxl
X21hdHJpeF90aWxlX2ZyZWUodm9pZCogZGF0YSwgRXdrX1RpbGUqIHRpbGUpCiAgKgogICogQHJl
dHVybiBuZXdseSBhbGxvY2F0ZWQgaW5zdGFuY2Ugb24gc3VjY2VzcywgQGMgMCBvbiBmYWlsdXJl
LgogICovCi1Fd2tfVGlsZV9NYXRyaXgqIGV3a190aWxlX21hdHJpeF9uZXcoRXdrX1RpbGVfVW51
c2VkX0NhY2hlKiB0aWxlVW51c2VkQ2FjaGUsIHVuc2lnbmVkIGxvbmcgY29sdW1ucywgdW5zaWdu
ZWQgbG9uZyByb3dzLCBFdmFzX0NvbG9yc3BhY2UgY29sb3JTcGFjZSwgdm9pZCAoKnJlbmRlcl9j
YWxsYmFjaykodm9pZCogZGF0YSwgRXdrX1RpbGUqIHRpbGUsIGNvbnN0IEVpbmFfUmVjdGFuZ2xl
KiB1cGRhdGUpLCBjb25zdCB2b2lkKiByZW5kZXJEYXRhKQorRXdrX1RpbGVfTWF0cml4KiBld2tf
dGlsZV9tYXRyaXhfbmV3KEV3a19UaWxlX1VudXNlZF9DYWNoZSogdGlsZVVudXNlZENhY2hlLCB1
bnNpZ25lZCBsb25nIGNvbHVtbnMsIHVuc2lnbmVkIGxvbmcgcm93cywgRXZhc19Db2xvcnNwYWNl
IGNvbG9yU3BhY2UsIHZvaWQgKCpyZW5kZXJDYWxsYmFjaykodm9pZCogZGF0YSwgRXdrX1RpbGUq
IHRpbGUsIGNvbnN0IEVpbmFfUmVjdGFuZ2xlKiB1cGRhdGUpLCBjb25zdCB2b2lkKiByZW5kZXJE
YXRhKQogewotICAgIEV3a19UaWxlX01hdHJpeCogdG0gPSBzdGF0aWNfY2FzdDxFd2tfVGlsZV9N
YXRyaXgqPihjYWxsb2MoMSwgc2l6ZW9mKEV3a19UaWxlX01hdHJpeCkpKTsKLSAgICBpZiAoIXRt
KQorICAgIEV3a19UaWxlX01hdHJpeCogdGlsZU1hdHJpeCA9IHN0YXRpY19jYXN0PEV3a19UaWxl
X01hdHJpeCo+KGNhbGxvYygxLCBzaXplb2YoRXdrX1RpbGVfTWF0cml4KSkpOworICAgIGlmICgh
dGlsZU1hdHJpeCkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICB0bS0+bWF0cml4ID0gZWluYV9t
YXRyaXhzcGFyc2VfbmV3KHJvd3MsIGNvbHVtbnMsIF9ld2tfdGlsZV9tYXRyaXhfY2VsbF9mcmVl
LCB0bSk7Ci0gICAgaWYgKCF0bS0+bWF0cml4KSB7CisgICAgdGlsZU1hdHJpeC0+bWF0cml4ID0g
ZWluYV9tYXRyaXhzcGFyc2VfbmV3KHJvd3MsIGNvbHVtbnMsIF9ld2tfdGlsZV9tYXRyaXhfY2Vs
bF9mcmVlLCB0aWxlTWF0cml4KTsKKyAgICBpZiAoIXRpbGVNYXRyaXgtPm1hdHJpeCkgewogICAg
ICAgICBFUlIoImNvdWxkIG5vdCBjcmVhdGUgc3BhcnNlIG1hdHJpeC4iKTsKLSAgICAgICAgZnJl
ZSh0bSk7CisgICAgICAgIGZyZWUodGlsZU1hdHJpeCk7CiAgICAgICAgIHJldHVybiAwOwogICAg
IH0KIAogICAgIGlmICh0aWxlVW51c2VkQ2FjaGUpCi0gICAgICAgIHRtLT50dWMgPSBld2tfdGls
ZV91bnVzZWRfY2FjaGVfcmVmKHRpbGVVbnVzZWRDYWNoZSk7CisgICAgICAgIHRpbGVNYXRyaXgt
PnRpbGllVW51c2VkQ2FjaGUgPSBld2tfdGlsZV91bnVzZWRfY2FjaGVfcmVmKHRpbGVVbnVzZWRD
YWNoZSk7CiAgICAgZWxzZSB7Ci0gICAgICAgIHRtLT50dWMgPSBld2tfdGlsZV91bnVzZWRfY2Fj
aGVfbmV3KDQwOTYwMDAwKTsKLSAgICAgICAgaWYgKCF0bS0+dHVjKSB7CisgICAgICAgIHRpbGVN
YXRyaXgtPnRpbGllVW51c2VkQ2FjaGUgPSBld2tfdGlsZV91bnVzZWRfY2FjaGVfbmV3KDQwOTYw
MDAwKTsKKyAgICAgICAgaWYgKCF0aWxlTWF0cml4LT50aWxpZVVudXNlZENhY2hlKSB7CiAgICAg
ICAgICAgICBFUlIoIm5vIGNhY2hlIG9mIHVudXNlZCB0aWxlISIpOwotICAgICAgICAgICAgZWlu
YV9tYXRyaXhzcGFyc2VfZnJlZSh0bS0+bWF0cml4KTsKLSAgICAgICAgICAgIGZyZWUodG0pOwor
ICAgICAgICAgICAgZWluYV9tYXRyaXhzcGFyc2VfZnJlZSh0aWxlTWF0cml4LT5tYXRyaXgpOwor
ICAgICAgICAgICAgZnJlZSh0aWxlTWF0cml4KTsKICAgICAgICAgICAgIHJldHVybiAwOwogICAg
ICAgICB9CiAgICAgfQogCi0gICAgdG0tPmNzcGFjZSA9IGNvbG9yU3BhY2U7Ci0gICAgdG0tPnJl
bmRlci5jYiA9IHJlbmRlcl9jYWxsYmFjazsKLSAgICB0bS0+cmVuZGVyLmRhdGEgPSAodm9pZCop
cmVuZGVyRGF0YTsKLSAgICB0bS0+dGlsZS53aWR0aCA9IERFRkFVTFRfVElMRV9XOwotICAgIHRt
LT50aWxlLmhlaWdodCA9IERFRkFVTFRfVElMRV9IOworICAgIHRpbGVNYXRyaXgtPmNzcGFjZSA9
IGNvbG9yU3BhY2U7CisgICAgdGlsZU1hdHJpeC0+cmVuZGVyLmNhbGxiYWNrID0gcmVuZGVyQ2Fs
bGJhY2s7CisgICAgdGlsZU1hdHJpeC0+cmVuZGVyLmRhdGEgPSAodm9pZCopcmVuZGVyRGF0YTsK
KyAgICB0aWxlTWF0cml4LT50aWxlLndpZHRoID0gREVGQVVMVF9USUxFX1c7CisgICAgdGlsZU1h
dHJpeC0+dGlsZS5oZWlnaHQgPSBERUZBVUxUX1RJTEVfSDsKIAotICAgIHJldHVybiB0bTsKKyAg
ICByZXR1cm4gdGlsZU1hdHJpeDsKIH0KIAogLyoqCkBAIC0xOTEsMTIgKzE5MSwxMiBAQCB2b2lk
IGV3a190aWxlX21hdHJpeF9mcmVlKEV3a19UaWxlX01hdHJpeCogdGlsZU1hdHJpeCkKICNlbmRp
ZgogCiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4odGlsZU1hdHJpeCk7Ci0gICAgZXdr
X3RpbGVfdW51c2VkX2NhY2hlX2ZyZWV6ZSh0aWxlTWF0cml4LT50dWMpOworICAgIGV3a190aWxl
X3VudXNlZF9jYWNoZV9mcmVlemUodGlsZU1hdHJpeC0+dGlsaWVVbnVzZWRDYWNoZSk7CiAKICAg
ICBlaW5hX21hdHJpeHNwYXJzZV9mcmVlKHRpbGVNYXRyaXgtPm1hdHJpeCk7CiAKLSAgICBld2tf
dGlsZV91bnVzZWRfY2FjaGVfdGhhdyh0aWxlTWF0cml4LT50dWMpOwotICAgIGV3a190aWxlX3Vu
dXNlZF9jYWNoZV91bnJlZih0aWxlTWF0cml4LT50dWMpOworICAgIGV3a190aWxlX3VudXNlZF9j
YWNoZV90aGF3KHRpbGVNYXRyaXgtPnRpbGllVW51c2VkQ2FjaGUpOworICAgIGV3a190aWxlX3Vu
dXNlZF9jYWNoZV91bnJlZih0aWxlTWF0cml4LT50aWxpZVVudXNlZENhY2hlKTsKIAogI2lmZGVm
IERFQlVHX01FTV9MRUFLUwogICAgIHRpbGVzID0gdGlsZU1hdHJpeC0+c3RhdHMudGlsZXMuYWxs
b2NhdGVkIC0gdGlsZU1hdHJpeC0+c3RhdHMudGlsZXMuZnJlZWQ7CkBAIC0yNDQsNyArMjQ0LDcg
QEAgdm9pZCBld2tfdGlsZV9tYXRyaXhfcmVzaXplKEV3a19UaWxlX01hdHJpeCogdGlsZU1hdHJp
eCwgdW5zaWduZWQgbG9uZyBjb2xzLCB1bnMKIEV3a19UaWxlX1VudXNlZF9DYWNoZSogZXdrX3Rp
bGVfbWF0cml4X3VudXNlZF9jYWNoZV9nZXQoY29uc3QgRXdrX1RpbGVfTWF0cml4KiB0aWxlTWF0
cml4KQogewogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh0aWxlTWF0cml4LCAw
KTsKLSAgICByZXR1cm4gdGlsZU1hdHJpeC0+dHVjOworICAgIHJldHVybiB0aWxlTWF0cml4LT50
aWxpZVVudXNlZENhY2hlOwogfQogCiAvKioKQEAgLTI3OSw3ICsyNzksNyBAQCBFd2tfVGlsZSog
ZXdrX3RpbGVfbWF0cml4X3RpbGVfZXhhY3RfZ2V0KEV3a19UaWxlX01hdHJpeCogdGlsZU1hdHJp
eCwgdW5zaWduZWQgbAogCiBlbmQ6CiAgICAgaWYgKCF0aWxlLT52aXNpYmxlKSB7Ci0gICAgICAg
IGlmICghZXdrX3RpbGVfdW51c2VkX2NhY2hlX3RpbGVfZ2V0KHRpbGVNYXRyaXgtPnR1YywgdGls
ZSkpCisgICAgICAgIGlmICghZXdrX3RpbGVfdW51c2VkX2NhY2hlX3RpbGVfZ2V0KHRpbGVNYXRy
aXgtPnRpbGllVW51c2VkQ2FjaGUsIHRpbGUpKQogICAgICAgICAgICAgV1JOKCJFd2tfVGlsZSB3
YXMgdW51c2VkIGJ1dCBub3QgaW4gY2FjaGU/IGJ1ZyEiKTsKICAgICB9CiAKQEAgLTMyMCwxOCAr
MzIwLDE4IEBAIEVpbmFfQm9vbCBld2tfdGlsZV9tYXRyaXhfdGlsZV9leGFjdF9leGlzdHMoRXdr
X1RpbGVfTWF0cml4KiB0aWxlTWF0cml4LCB1bnNpZ25lCiAgKi8KIEV3a19UaWxlKiBld2tfdGls
ZV9tYXRyaXhfdGlsZV9uZXcoRXdrX1RpbGVfTWF0cml4KiB0aWxlTWF0cml4LCBFdmFzKiBjYW52
YXMsIHVuc2lnbmVkIGxvbmcgY29sdW1uLCB1bnNpZ25lZCBsb25nIHJvdywgZmxvYXQgem9vbSkK
IHsKLSAgICBFdmFzX0Nvb3JkIHR3LCB0aDsKKyAgICBFdmFzX0Nvb3JkIHRpbGVXaWR0aCwgdGls
ZUhlaWdodDsKICAgICBFd2tfVGlsZSogdGlsZTsKIAogICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOX1ZBTCh0aWxlTWF0cml4LCAwKTsKICAgICBFSU5BX1NBRkVUWV9PTl9GQUxTRV9SRVRV
Uk5fVkFMKHpvb20gPiAwLjAsIDApOwogCi0gICAgdHcgPSB0aWxlTWF0cml4LT50aWxlLndpZHRo
OwotICAgIHRoID0gdGlsZU1hdHJpeC0+dGlsZS5oZWlnaHQ7CisgICAgdGlsZVdpZHRoID0gdGls
ZU1hdHJpeC0+dGlsZS53aWR0aDsKKyAgICB0aWxlSGVpZ2h0ID0gdGlsZU1hdHJpeC0+dGlsZS5o
ZWlnaHQ7CiAKLSAgICB0aWxlID0gZXdrX3RpbGVfbmV3KGNhbnZhcywgdHcsIHRoLCB6b29tLCB0
aWxlTWF0cml4LT5jc3BhY2UpOworICAgIHRpbGUgPSBld2tfdGlsZV9uZXcoY2FudmFzLCB0aWxl
V2lkdGgsIHRpbGVIZWlnaHQsIHpvb20sIHRpbGVNYXRyaXgtPmNzcGFjZSk7CiAgICAgaWYgKCF0
aWxlKSB7Ci0gICAgICAgIEVSUigiY291bGQgbm90IGNyZWF0ZSB0aWxlICVkeCVkIGF0ICVmLCBj
c3BhY2U9JWQiLCB0dywgdGgsIChkb3VibGUpem9vbSwgdGlsZU1hdHJpeC0+Y3NwYWNlKTsKKyAg
ICAgICAgRVJSKCJjb3VsZCBub3QgY3JlYXRlIHRpbGUgJWR4JWQgYXQgJWYsIGNzcGFjZT0lZCIs
IHRpbGVXaWR0aCwgdGlsZUhlaWdodCwgKGRvdWJsZSl6b29tLCB0aWxlTWF0cml4LT5jc3BhY2Up
OwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKQEAgLTM0Myw4ICszNDMsOCBAQCBFd2tfVGls
ZSogZXdrX3RpbGVfbWF0cml4X3RpbGVfbmV3KEV3a19UaWxlX01hdHJpeCogdGlsZU1hdHJpeCwg
RXZhcyogY2FudmFzLCB1bgogCiAgICAgdGlsZS0+Y29sID0gY29sdW1uOwogICAgIHRpbGUtPnJv
dyA9IHJvdzsKLSAgICB0aWxlLT54ID0gY29sdW1uICogdHc7Ci0gICAgdGlsZS0+eSA9IHJvdyAq
IHRoOworICAgIHRpbGUtPnggPSBjb2x1bW4gKiB0aWxlV2lkdGg7CisgICAgdGlsZS0+eSA9IHJv
dyAqIHRpbGVIZWlnaHQ7CiAKICAgICBjYWlyb190cmFuc2xhdGUodGlsZS0+Y2Fpcm8sIC10aWxl
LT54LCAtdGlsZS0+eSk7CiAKQEAgLTM4NSwxNiArMzg1LDE2IEBAIEVpbmFfQm9vbCBld2tfdGls
ZV9tYXRyaXhfdGlsZV9wdXQoRXdrX1RpbGVfTWF0cml4KiB0aWxlTWF0cml4LCBFd2tfVGlsZSog
dGlsZSwKICAgICAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIAogICAgIHRpbGUtPnN0YXRzLmxhc3Rf
dXNlZCA9IGxhc3RVc2VkOwotICAgIHJldHVybiBld2tfdGlsZV91bnVzZWRfY2FjaGVfdGlsZV9w
dXQodGlsZU1hdHJpeC0+dHVjLCB0aWxlLCBfZXdrX3RpbGVfbWF0cml4X3RpbGVfZnJlZSwgdGls
ZU1hdHJpeCk7CisgICAgcmV0dXJuIGV3a190aWxlX3VudXNlZF9jYWNoZV90aWxlX3B1dCh0aWxl
TWF0cml4LT50aWxpZVVudXNlZENhY2hlLCB0aWxlLCBfZXdrX3RpbGVfbWF0cml4X3RpbGVfZnJl
ZSwgdGlsZU1hdHJpeCk7CiB9CiAKIEVpbmFfQm9vbCBld2tfdGlsZV9tYXRyaXhfdGlsZV91cGRh
dGUoRXdrX1RpbGVfTWF0cml4KiB0aWxlTWF0cml4LCB1bnNpZ25lZCBsb25nIGNvbCwgdW5zaWdu
ZWQgbG9uZyByb3csIGNvbnN0IEVpbmFfUmVjdGFuZ2xlKiB1cGRhdGUpCiB7Ci0gICAgRWluYV9S
ZWN0YW5nbGUgbmV3X3VwZGF0ZTsKKyAgICBFaW5hX1JlY3RhbmdsZSBuZXdVcGRhdGU7CiAgICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHRpbGVNYXRyaXgsIEVJTkFfRkFMU0UpOwog
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh1cGRhdGUsIEVJTkFfRkFMU0UpOwog
Ci0gICAgbWVtY3B5KCZuZXdfdXBkYXRlLCB1cGRhdGUsIHNpemVvZihuZXdfdXBkYXRlKSk7Cisg
ICAgbWVtY3B5KCZuZXdVcGRhdGUsIHVwZGF0ZSwgc2l6ZW9mKG5ld1VwZGF0ZSkpOwogICAgIC8v
IGNoZWNrIHVwZGF0ZSBpcyB2YWxpZCwgb3RoZXJ3aXNlIHJldHVybiBFSU5BX0ZBTFNFCiAgICAg
aWYgKHVwZGF0ZS0+eCA8IDAgfHwgdXBkYXRlLT55IDwgMCB8fCB1cGRhdGUtPncgPD0gMCB8fCB1
cGRhdGUtPmggPD0gMCkgewogICAgICAgICBFUlIoImludmFsaWQgdXBkYXRlIHJlZ2lvbi4iKTsK
QEAgLTQwMiw5ICs0MDIsOSBAQCBFaW5hX0Jvb2wgZXdrX3RpbGVfbWF0cml4X3RpbGVfdXBkYXRl
KEV3a19UaWxlX01hdHJpeCogdGlsZU1hdHJpeCwgdW5zaWduZWQgbG9uZwogICAgIH0KIAogICAg
IGlmICh1cGRhdGUtPnggKyB1cGRhdGUtPncgLSAxID49IHRpbGVNYXRyaXgtPnRpbGUud2lkdGgp
Ci0gICAgICAgIG5ld191cGRhdGUudyA9IHRpbGVNYXRyaXgtPnRpbGUud2lkdGggLSB1cGRhdGUt
Png7CisgICAgICAgIG5ld1VwZGF0ZS53ID0gdGlsZU1hdHJpeC0+dGlsZS53aWR0aCAtIHVwZGF0
ZS0+eDsKICAgICBpZiAodXBkYXRlLT55ICsgdXBkYXRlLT5oIC0gMSA+PSB0aWxlTWF0cml4LT50
aWxlLmhlaWdodCkKLSAgICAgICAgbmV3X3VwZGF0ZS5oID0gdGlsZU1hdHJpeC0+dGlsZS5oZWln
aHQgLSB1cGRhdGUtPnk7CisgICAgICAgIG5ld1VwZGF0ZS5oID0gdGlsZU1hdHJpeC0+dGlsZS5o
ZWlnaHQgLSB1cGRhdGUtPnk7CiAKICAgICBFd2tfVGlsZSogdGlsZSA9IHN0YXRpY19jYXN0PEV3
a19UaWxlKj4oZWluYV9tYXRyaXhzcGFyc2VfZGF0YV9pZHhfZ2V0KHRpbGVNYXRyaXgtPm1hdHJp
eCwgcm93LCBjb2wpKTsKICAgICBpZiAoIXRpbGUpCkBAIC00MTIsNyArNDEyLDcgQEAgRWluYV9C
b29sIGV3a190aWxlX21hdHJpeF90aWxlX3VwZGF0ZShFd2tfVGlsZV9NYXRyaXgqIHRpbGVNYXRy
aXgsIHVuc2lnbmVkIGxvbmcKIAogICAgIGlmICghdGlsZS0+dXBkYXRlcyAmJiAhdGlsZS0+c3Rh
dHMuZnVsbF91cGRhdGUpCiAgICAgICAgIHRpbGVNYXRyaXgtPnVwZGF0ZXMgPSBlaW5hX2xpc3Rf
YXBwZW5kKHRpbGVNYXRyaXgtPnVwZGF0ZXMsIHRpbGUpOwotICAgIGV3a190aWxlX3VwZGF0ZV9h
cmVhKHRpbGUsICZuZXdfdXBkYXRlKTsKKyAgICBld2tfdGlsZV91cGRhdGVfYXJlYSh0aWxlLCAm
bmV3VXBkYXRlKTsKIAogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CkBAIC00NTMsNyArNDUzLDcg
QEAgdm9pZCBld2tfdGlsZV9tYXRyaXhfdGlsZV91cGRhdGVzX2NsZWFyKEV3a19UaWxlX01hdHJp
eCogdGlsZU1hdHJpeCwgRXdrX1RpbGUqIHQKIHN0YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxlX21h
dHJpeF9zbGljZXJfc2V0dXAoRXdrX1RpbGVfTWF0cml4KiB0aWxlTWF0cml4LCBjb25zdCBFaW5h
X1JlY3RhbmdsZSogYXJlYSwgZmxvYXQgem9vbSwgRWluYV9UaWxlX0dyaWRfU2xpY2VyKiBzbGlj
ZXIpCiB7CiAgICAgdW5zaWduZWQgbG9uZyByb3dzLCBjb2xzOwotICAgIEV2YXNfQ29vcmQgeCwg
eSwgd2lkdGgsIGhlaWdodCwgdHcsIHRoOworICAgIEV2YXNfQ29vcmQgeCwgeSwgd2lkdGgsIGhl
aWdodCwgdGlsZVdpZHRoLCB0aWxlSGVpZ2h0OwogCiAgICAgaWYgKGFyZWEtPncgPD0gMCB8fCBh
cmVhLT5oIDw9IDApIHsKICAgICAgICAgV1JOKCJpbnZhbGlkIGFyZWEgcmVnaW9uOiAlZCwlZCsl
ZHglZC4iLApAQCAtNDY2LDggKzQ2Niw4IEBAIHN0YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxlX21h
dHJpeF9zbGljZXJfc2V0dXAoRXdrX1RpbGVfTWF0cml4KiB0aWxlTWF0cml4LCBjb25zCiAgICAg
d2lkdGggPSBhcmVhLT53OwogICAgIGhlaWdodCA9IGFyZWEtPmg7CiAKLSAgICB0dyA9IHRpbGVN
YXRyaXgtPnRpbGUud2lkdGg7Ci0gICAgdGggPSB0aWxlTWF0cml4LT50aWxlLmhlaWdodDsKKyAg
ICB0aWxlV2lkdGggPSB0aWxlTWF0cml4LT50aWxlLndpZHRoOworICAgIHRpbGVIZWlnaHQgPSB0
aWxlTWF0cml4LT50aWxlLmhlaWdodDsKIAogICAgIC8vIGNyb3BwaW5nIGFyZWEgcmVnaW9uIHRv
IGZpdCBtYXRyaXgKICAgICBlaW5hX21hdHJpeHNwYXJzZV9zaXplX2dldCh0aWxlTWF0cml4LT5t
YXRyaXgsICZyb3dzLCAmY29scyk7CkBAIC00ODAsMTIgKzQ4MCwxMiBAQCBzdGF0aWMgRWluYV9C
b29sIF9ld2tfdGlsZV9tYXRyaXhfc2xpY2VyX3NldHVwKEV3a19UaWxlX01hdHJpeCogdGlsZU1h
dHJpeCwgY29ucwogICAgICAgICB5ID0gMDsKICAgICB9CiAKLSAgICBpZiAoeSArIGhlaWdodCAt
IDEgPiAobG9uZykocm93cyAqIHRoKSkKLSAgICAgICAgaGVpZ2h0ID0gcm93cyAqIHRoIC0geTsK
LSAgICBpZiAoeCArIHdpZHRoIC0gMSA+IChsb25nKShjb2xzICogdHcpKQotICAgICAgICB3aWR0
aCA9IGNvbHMgKiB0dyAtIHg7CisgICAgaWYgKHkgKyBoZWlnaHQgLSAxID4gKGxvbmcpKHJvd3Mg
KiB0aWxlSGVpZ2h0KSkKKyAgICAgICAgaGVpZ2h0ID0gcm93cyAqIHRpbGVIZWlnaHQgLSB5Owor
ICAgIGlmICh4ICsgd2lkdGggLSAxID4gKGxvbmcpKGNvbHMgKiB0aWxlV2lkdGgpKQorICAgICAg
ICB3aWR0aCA9IGNvbHMgKiB0aWxlV2lkdGggLSB4OwogCi0gICAgcmV0dXJuIGVpbmFfdGlsZV9n
cmlkX3NsaWNlcl9zZXR1cChzbGljZXIsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHR3LCB0aCk7Cisg
ICAgcmV0dXJuIGVpbmFfdGlsZV9ncmlkX3NsaWNlcl9zZXR1cChzbGljZXIsIHgsIHksIHdpZHRo
LCBoZWlnaHQsIHRpbGVXaWR0aCwgdGlsZUhlaWdodCk7CiB9CiAKIApAQCAtNTMxLDE3ICs1MzEs
MTcgQEAgRWluYV9Cb29sIGV3a190aWxlX21hdHJpeF91cGRhdGUoRXdrX1RpbGVfTWF0cml4KiB0
aWxlTWF0cml4LCBjb25zdCBFaW5hX1JlY3RhbmcKIAogdm9pZCBld2tfdGlsZV9tYXRyaXhfdXBk
YXRlc19wcm9jZXNzKEV3a19UaWxlX01hdHJpeCogdGlsZU1hdHJpeCkKIHsKLSAgICBFaW5hX0xp
c3QqIGwsICogbF9uZXh0OworICAgIEVpbmFfTGlzdCogbGlzdCwgKmxpc3ROZXh0OwogICAgIHZv
aWQqIGl0ZW07CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4odGlsZU1hdHJpeCk7CiAK
ICAgICAvLyBwcm9jZXNzIHVwZGF0ZXMsIHVuZmxhZyB0aWxlcwotICAgIEVJTkFfTElTVF9GT1JF
QUNIX1NBRkUodGlsZU1hdHJpeC0+dXBkYXRlcywgbCwgbF9uZXh0LCBpdGVtKSB7CisgICAgRUlO
QV9MSVNUX0ZPUkVBQ0hfU0FGRSh0aWxlTWF0cml4LT51cGRhdGVzLCBsaXN0LCBsaXN0TmV4dCwg
aXRlbSkgewogICAgICAgICBFd2tfVGlsZSogdGlsZSA9IHN0YXRpY19jYXN0PEV3a19UaWxlKj4o
aXRlbSk7Ci0gICAgICAgIGV3a190aWxlX3VwZGF0ZXNfcHJvY2Vzcyh0aWxlLCB0aWxlTWF0cml4
LT5yZW5kZXIuY2IsIHRpbGVNYXRyaXgtPnJlbmRlci5kYXRhKTsKKyAgICAgICAgZXdrX3RpbGVf
dXBkYXRlc19wcm9jZXNzKHRpbGUsIHRpbGVNYXRyaXgtPnJlbmRlci5jYWxsYmFjaywgdGlsZU1h
dHJpeC0+cmVuZGVyLmRhdGEpOwogICAgICAgICBpZiAodGlsZS0+dmlzaWJsZSkgewogICAgICAg
ICAgICAgZXdrX3RpbGVfdXBkYXRlc19jbGVhcih0aWxlKTsKLSAgICAgICAgICAgIHRpbGVNYXRy
aXgtPnVwZGF0ZXMgPSBlaW5hX2xpc3RfcmVtb3ZlX2xpc3QodGlsZU1hdHJpeC0+dXBkYXRlcywg
bCk7CisgICAgICAgICAgICB0aWxlTWF0cml4LT51cGRhdGVzID0gZWluYV9saXN0X3JlbW92ZV9s
aXN0KHRpbGVNYXRyaXgtPnVwZGF0ZXMsIGxpc3QpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAt
NTU5LDcgKzU1OSw3IEBAIHZvaWQgZXdrX3RpbGVfbWF0cml4X3VwZGF0ZXNfY2xlYXIoRXdrX1Rp
bGVfTWF0cml4KiB0aWxlTWF0cml4KQogLy8gcmVtb3ZlIG1lIGxhdGVyIQogdm9pZCBld2tfdGls
ZV9tYXRyaXhfZGJnKGNvbnN0IEV3a19UaWxlX01hdHJpeCogdGlsZU1hdHJpeCkKIHsKLSAgICBF
aW5hX0l0ZXJhdG9yKiBpdCA9IGVpbmFfbWF0cml4c3BhcnNlX2l0ZXJhdG9yX2NvbXBsZXRlX25l
dyh0aWxlTWF0cml4LT5tYXRyaXgpOworICAgIEVpbmFfSXRlcmF0b3IqIGl0ZXJhdG9yID0gZWlu
YV9tYXRyaXhzcGFyc2VfaXRlcmF0b3JfY29tcGxldGVfbmV3KHRpbGVNYXRyaXgtPm1hdHJpeCk7
CiAgICAgRWluYV9NYXRyaXhzcGFyc2VfQ2VsbCogY2VsbDsKICAgICBFaW5hX0Jvb2wgbGFzdF9l
bXB0eSA9IEVJTkFfRkFMU0U7CiAKQEAgLTU3NCw5ICs1NzQsOSBAQCB2b2lkIGV3a190aWxlX21h
dHJpeF9kYmcoY29uc3QgRXdrX1RpbGVfTWF0cml4KiB0aWxlTWF0cml4KQogICAgIHByaW50Zigi
RXdrX1RpbGUgTWF0cml4OlxuIik7CiAjZW5kaWYKIAotICAgIEVJTkFfSVRFUkFUT1JfRk9SRUFD
SChpdCwgY2VsbCkgewotICAgICAgICB1bnNpZ25lZCBsb25nIHJvdywgY29sOwotICAgICAgICBl
aW5hX21hdHJpeHNwYXJzZV9jZWxsX3Bvc2l0aW9uX2dldChjZWxsLCAmcm93LCAmY29sKTsKKyAg
ICBFSU5BX0lURVJBVE9SX0ZPUkVBQ0goaXRlcmF0b3IsIGNlbGwpIHsKKyAgICAgICAgdW5zaWdu
ZWQgbG9uZyByb3csIGNvbHVtbjsKKyAgICAgICAgZWluYV9tYXRyaXhzcGFyc2VfY2VsbF9wb3Np
dGlvbl9nZXQoY2VsbCwgJnJvdywgJmNvbHVtbik7CiAKICAgICAgICAgRXdrX1RpbGUqIHRpbGUg
PSBzdGF0aWNfY2FzdDxFd2tfVGlsZSo+KGVpbmFfbWF0cml4c3BhcnNlX2NlbGxfZGF0YV9nZXQo
Y2VsbCkpOwogICAgICAgICBpZiAoIXRpbGUpIHsKQEAgLTU4NCwyMiArNTg0LDIyIEBAIHZvaWQg
ZXdrX3RpbGVfbWF0cml4X2RiZyhjb25zdCBFd2tfVGlsZV9NYXRyaXgqIHRpbGVNYXRyaXgpCiAg
ICAgICAgICAgICAgICAgbGFzdF9lbXB0eSA9IEVJTkFfVFJVRTsKICAgICAgICAgICAgICAgICBw
cmludGYoIkVtcHR5OiIpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgcHJpbnRmKCIgWyVs
dSwlbHVdIiwgY29sLCByb3cpOworICAgICAgICAgICAgcHJpbnRmKCIgWyVsdSwlbHVdIiwgY29s
dW1uLCByb3cpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKGxhc3RfZW1wdHkp
IHsKICAgICAgICAgICAgICAgICBsYXN0X2VtcHR5ID0gRUlOQV9GQUxTRTsKICAgICAgICAgICAg
ICAgICBwcmludGYoIlxuIik7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBwcmludGYoIiUz
bHUsJTNsdSAlMTBwOiIsIGNvbCwgcm93LCB0aWxlKTsKKyAgICAgICAgICAgIHByaW50ZigiJTNs
dSwlM2x1ICUxMHA6IiwgY29sdW1uLCByb3csIHRpbGUpOwogICAgICAgICAgICAgcHJpbnRmKCIg
WyUzbHUsJTNsdSArICVkeCVkIEAgJTAuM2ZdJWMiLCB0aWxlLT5jb2wsIHRpbGUtPnJvdywgdGls
ZS0+d2lkdGgsIHRpbGUtPmhlaWdodCwgdGlsZS0+em9vbSwgdGlsZS0+dmlzaWJsZSA/ICcqJyA6
ICcgJyk7CiAgICAgICAgICAgICBwcmludGYoIlxuIik7CiAgICAgICAgIH0KICAgICB9CiAgICAg
aWYgKGxhc3RfZW1wdHkpCiAgICAgICAgIHByaW50ZigiXG4iKTsKLSAgICBlaW5hX2l0ZXJhdG9y
X2ZyZWUoaXQpOworICAgIGVpbmFfaXRlcmF0b3JfZnJlZShpdGVyYXRvcik7CiAKLSAgICBld2tf
dGlsZV91bnVzZWRfY2FjaGVfZGJnKHRpbGVNYXRyaXgtPnR1Yyk7CisgICAgZXdrX3RpbGVfdW51
c2VkX2NhY2hlX2RiZyh0aWxlTWF0cml4LT50aWxpZVVudXNlZENhY2hlKTsKIH0KIAogLyoqCkBA
IC02MTUsNyArNjE1LDcgQEAgdm9pZCBld2tfdGlsZV9tYXRyaXhfZnJlZXplKEV3a19UaWxlX01h
dHJpeCogdGlsZU1hdHJpeCkKIHsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0aWxl
TWF0cml4KTsKICAgICBpZiAoIXRpbGVNYXRyaXgtPmZyb3plbikKLSAgICAgICAgZXdrX3RpbGVf
dW51c2VkX2NhY2hlX2ZyZWV6ZSh0aWxlTWF0cml4LT50dWMpOworICAgICAgICBld2tfdGlsZV91
bnVzZWRfY2FjaGVfZnJlZXplKHRpbGVNYXRyaXgtPnRpbGllVW51c2VkQ2FjaGUpOwogICAgIHRp
bGVNYXRyaXgtPmZyb3plbisrOwogfQogCkBAIC02MzUsNSArNjM1LDUgQEAgdm9pZCBld2tfdGls
ZV9tYXRyaXhfdGhhdyhFd2tfVGlsZV9NYXRyaXgqIHRpbGVNYXRyaXgpCiAKICAgICB0aWxlTWF0
cml4LT5mcm96ZW4tLTsKICAgICBpZiAoIXRpbGVNYXRyaXgtPmZyb3plbikKLSAgICAgICAgZXdr
X3RpbGVfdW51c2VkX2NhY2hlX3RoYXcodGlsZU1hdHJpeC0+dHVjKTsKKyAgICAgICAgZXdrX3Rp
bGVfdW51c2VkX2NhY2hlX3RoYXcodGlsZU1hdHJpeC0+dGlsaWVVbnVzZWRDYWNoZSk7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX21vZGVsLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfbW9kZWwuY3BwCmluZGV4IDIwOWIwYzM5ZjE2
NzhlYWIxMzgyOWI2NThhNWMzN2I5YTA0MGFlM2UuLmRkNWYwZDVhODBjYTU0MzQ0MjA0MmRkZDlh
NzZhYzYzYzBhMjQ3NTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGls
ZWRfbW9kZWwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfbW9kZWwu
Y3BwCkBAIC0xNDksNTkgKzE0OSw1OSBAQCB2b2lkIGV3a190aWxlX2FjY291bnRpbmdfZGJnKCkK
IAogc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZV9wYWludF9yZ2I4ODgoRXdrX1RpbGUqIHRp
bGUsIHVpbnQ4X3QgcmVkLCB1aW50OF90IGdyZWVuLCB1aW50OF90IGJsdWUpCiB7Ci0gICAgdWlu
dDMyX3QgYzEgPSAweGZmMDAwMDAwIHwgKCh1aW50MzJfdClyZWQgPDwgMTYpIHwgKCh1aW50MzJf
dClncmVlbiA8PCA4KSB8IGJsdWU7Ci0gICAgdWludDMyX3QgYzIgPSAoKHVpbnQ2NF90KWMxIDw8
IDMyKSB8IGMxOworICAgIHVpbnQzMl90IGNvbG9yMSA9IDB4ZmYwMDAwMDAgfCAoKHVpbnQzMl90
KXJlZCA8PCAxNikgfCAoKHVpbnQzMl90KWdyZWVuIDw8IDgpIHwgYmx1ZTsKKyAgICB1aW50MzJf
dCBjb2xvcjIgPSAoKHVpbnQ2NF90KWNvbG9yMSA8PCAzMikgfCBjb2xvcjE7CiAKICAgICB1aW50
NjRfdCogZHN0NjQgPSAodWludDY0X3QqKXRpbGUtPnBpeGVsczsKICAgICB1aW50NjRfdCogZHN0
NjRfZW5kID0gZHN0NjQgKyAoKHRpbGUtPmJ5dGVzIC8gOCkgJiB+Nyk7CiAgICAgZm9yICg7IGRz
dDY0IDwgZHN0NjRfZW5kOyBkc3Q2NCArPSA4KSB7CiAgICAgICAgIC8qIFRPRE86IEFSTSBhZGQg
cGxkIG9yIE5FT04gaW5zdHJ1Y3Rpb25zICovCi0gICAgICAgIGRzdDY0WzBdID0gYzI7Ci0gICAg
ICAgIGRzdDY0WzFdID0gYzI7Ci0gICAgICAgIGRzdDY0WzJdID0gYzI7Ci0gICAgICAgIGRzdDY0
WzNdID0gYzI7Ci0gICAgICAgIGRzdDY0WzRdID0gYzI7Ci0gICAgICAgIGRzdDY0WzVdID0gYzI7
Ci0gICAgICAgIGRzdDY0WzZdID0gYzI7Ci0gICAgICAgIGRzdDY0WzddID0gYzI7CisgICAgICAg
IGRzdDY0WzBdID0gY29sb3IyOworICAgICAgICBkc3Q2NFsxXSA9IGNvbG9yMjsKKyAgICAgICAg
ZHN0NjRbMl0gPSBjb2xvcjI7CisgICAgICAgIGRzdDY0WzNdID0gY29sb3IyOworICAgICAgICBk
c3Q2NFs0XSA9IGNvbG9yMjsKKyAgICAgICAgZHN0NjRbNV0gPSBjb2xvcjI7CisgICAgICAgIGRz
dDY0WzZdID0gY29sb3IyOworICAgICAgICBkc3Q2NFs3XSA9IGNvbG9yMjsKICAgICB9CiAKICAg
ICB1aW50MzJfdCogZHN0MzIgPSAodWludDMyX3QqKWRzdDY0X2VuZDsKICAgICB1aW50MzJfdCog
ZHN0MzJfZW5kID0gKHVpbnQzMl90KikodGlsZS0+cGl4ZWxzICsgdGlsZS0+Ynl0ZXMpOwogICAg
IGZvciAoOyBkc3QzMiA8IGRzdDMyX2VuZDsgZHN0MzIrKykKLSAgICAgICAgKmRzdDMyID0gYzE7
CisgICAgICAgICpkc3QzMiA9IGNvbG9yMTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIF9ld2tf
dGlsZV9wYWludF9yZ2I1NjUoRXdrX1RpbGUqIHRpbGUsIHVpbnQ4X3QgcmVkLCB1aW50OF90IGdy
ZWVuLCB1aW50OF90IGJsdWUpCiB7Ci0gICAgdWludDE2X3QqIGRzdDE2LCAqIGRzdDE2X2VuZCwg
YzE7Ci0gICAgdWludDY0X3QqIGRzdDY0LCAqIGRzdDY0X2VuZCwgYzI7CisgICAgdWludDE2X3Qq
IGRzdDE2LCAqIGRzdDE2X2VuZCwgY29sb3IxOworICAgIHVpbnQ2NF90KiBkc3Q2NCwgKiBkc3Q2
NF9lbmQsIGNvbG9yMjsKIAotICAgIGMxID0gKCgoKHJlZCA+PiAzKSAmIDB4MWYpIDw8IDExKSB8
CisgICAgY29sb3IxID0gKCgoKHJlZCA+PiAzKSAmIDB4MWYpIDw8IDExKSB8CiAgICAgICAgICAg
KCgoZ3JlZW4gPj4gMikgJiAweDNmKSA8PCA1KSB8CiAgICAgICAgICAgKChibHVlID4+IDMpICYg
MHgxZikpOwogCi0gICAgYzIgPSAoKCh1aW50NjRfdCljMSA8PCA0OCkgfCAoKHVpbnQ2NF90KWMx
IDw8IDMyKSB8Ci0gICAgICAgICAgKCh1aW50NjRfdCljMSA8PCAxNikgfCBjMSk7CisgICAgY29s
b3IyID0gKCgodWludDY0X3QpY29sb3IxIDw8IDQ4KSB8ICgodWludDY0X3QpY29sb3IxIDw8IDMy
KSB8CisgICAgICAgICAgKCh1aW50NjRfdCljb2xvcjEgPDwgMTYpIHwgY29sb3IxKTsKIAogICAg
IGRzdDY0ID0gKHVpbnQ2NF90Kil0aWxlLT5waXhlbHM7CiAgICAgZHN0NjRfZW5kID0gZHN0NjQg
KyAoKHRpbGUtPmJ5dGVzIC8gOCkgJiB+Nyk7CiAgICAgZm9yICg7IGRzdDY0IDwgZHN0NjRfZW5k
OyBkc3Q2NCArPSA4KSB7CiAgICAgICAgIC8qIFRPRE86IEFSTSBhZGQgcGxkIG9yIE5FT04gaW5z
dHJ1Y3Rpb25zICovCi0gICAgICAgIGRzdDY0WzBdID0gYzI7Ci0gICAgICAgIGRzdDY0WzFdID0g
YzI7Ci0gICAgICAgIGRzdDY0WzJdID0gYzI7Ci0gICAgICAgIGRzdDY0WzNdID0gYzI7Ci0gICAg
ICAgIGRzdDY0WzRdID0gYzI7Ci0gICAgICAgIGRzdDY0WzVdID0gYzI7Ci0gICAgICAgIGRzdDY0
WzZdID0gYzI7Ci0gICAgICAgIGRzdDY0WzddID0gYzI7CisgICAgICAgIGRzdDY0WzBdID0gY29s
b3IyOworICAgICAgICBkc3Q2NFsxXSA9IGNvbG9yMjsKKyAgICAgICAgZHN0NjRbMl0gPSBjb2xv
cjI7CisgICAgICAgIGRzdDY0WzNdID0gY29sb3IyOworICAgICAgICBkc3Q2NFs0XSA9IGNvbG9y
MjsKKyAgICAgICAgZHN0NjRbNV0gPSBjb2xvcjI7CisgICAgICAgIGRzdDY0WzZdID0gY29sb3Iy
OworICAgICAgICBkc3Q2NFs3XSA9IGNvbG9yMjsKICAgICB9CiAKICAgICBkc3QxNiA9ICh1aW50
MTZfdCopZHN0MTZfZW5kOwogICAgIGRzdDE2X2VuZCA9ICh1aW50MTZfdCopKHRpbGUtPnBpeGVs
cyArIHRpbGUtPmJ5dGVzKTsKICAgICBmb3IgKDsgZHN0MTYgPCBkc3QxNl9lbmQ7IGRzdDE2Kysp
Ci0gICAgICAgICpkc3QxNiA9IGMxOworICAgICAgICAqZHN0MTYgPSBjb2xvcjE7CiB9CiAKIHN0
YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVfcGFpbnQoRXdrX1RpbGUqIHRpbGUsIHVpbnQ4X3Qg
cmVkLCB1aW50OF90IGdyZWVuLCB1aW50OF90IGJsdWUpCkBAIC0yMzEsMTcgKzIzMSwxNyBAQCBz
dGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlX3BhaW50KEV3a19UaWxlKiB0aWxlLCB1aW50OF90
IHJlZCwgdWludDhfdCBncmVlbiwgdQogICovCiBFd2tfVGlsZSogZXdrX3RpbGVfbmV3KEV2YXMq
IGV2YXMsIEV2YXNfQ29vcmQgd2lkdGgsIEV2YXNfQ29vcmQgaGVpZ2h0LCBmbG9hdCB6b29tLCBF
dmFzX0NvbG9yc3BhY2UgY29sb3JTcGFjZSkKIHsKLSAgICBFdmFzX0Nvb3JkKiBlYzsKLSAgICBF
dmFzX0NvbG9yc3BhY2UqIGVjczsKLSAgICBmbG9hdCogZjsKLSAgICBzaXplX3QqIHM7CisgICAg
RXZhc19Db29yZCogZXZhc0Nvb3JkOworICAgIEV2YXNfQ29sb3JzcGFjZSogZXZhc0NvbG9yU3Bh
Y2U7CisgICAgZmxvYXQqIHRpbGVab29tOworICAgIHNpemVfdCogdGlsZVNpemU7CiAgICAgRXdr
X1RpbGUqIHRpbGU7CiAgICAgdW5zaWduZWQgaW50IGFyZWE7CiAgICAgc2l6ZV90IGJ5dGVzOwog
ICAgIGNhaXJvX2Zvcm1hdF90IGZvcm1hdDsKICAgICBjYWlyb19zdGF0dXNfdCBzdGF0dXM7CiAg
ICAgaW50IHN0cmlkZTsKLSAgICBFY29yZV9FdmFzKiBlZTsKKyAgICBFY29yZV9FdmFzKiBlY29y
ZUV2YXM7CiAgICAgY29uc3QgY2hhciogZW5naW5lOwogCiAgICAgYXJlYSA9IHdpZHRoICogaGVp
Z2h0OwpAQCAtMjY3LDggKzI2Nyw4IEBAIEV3a19UaWxlKiBld2tfdGlsZV9uZXcoRXZhcyogZXZh
cywgRXZhc19Db29yZCB3aWR0aCwgRXZhc19Db29yZCBoZWlnaHQsIGZsb2F0IHpvCiAKICAgICB0
aWxlLT5pbWFnZSA9IGV2YXNfb2JqZWN0X2ltYWdlX2FkZChldmFzKTsKIAotICAgIGVlID0gZWNv
cmVfZXZhc19lY29yZV9ldmFzX2dldChldmFzKTsKLSAgICBlbmdpbmUgPSBlY29yZV9ldmFzX2Vu
Z2luZV9uYW1lX2dldChlZSk7CisgICAgZWNvcmVFdmFzID0gZWNvcmVfZXZhc19lY29yZV9ldmFz
X2dldChldmFzKTsKKyAgICBlbmdpbmUgPSBlY29yZV9ldmFzX2VuZ2luZV9uYW1lX2dldChlY29y
ZUV2YXMpOwogICAgIGlmIChlbmdpbmUgJiYgIXN0cmNtcChlbmdpbmUsICJvcGVuZ2xfeDExIikp
CiAgICAgICAgIGV2YXNfb2JqZWN0X2ltYWdlX2NvbnRlbnRfaGludF9zZXQodGlsZS0+aW1hZ2Us
IEVWQVNfSU1BR0VfQ09OVEVOVF9ISU5UX0RZTkFNSUMpOwogCkBAIC0yNzksMjAgKzI3OSwyMCBA
QCBFd2tfVGlsZSogZXdrX3RpbGVfbmV3KEV2YXMqIGV2YXMsIEV2YXNfQ29vcmQgd2lkdGgsIEV2
YXNfQ29vcmQgaGVpZ2h0LCBmbG9hdCB6bwogICAgIHRpbGUtPnN0YXRzLmFyZWEgPSBhcmVhOwog
CiAgICAgLyogdWdseSwgYnV0IGxldCdzIGF2b2lkIGF0IGFsbCBjb3N0cyBoYXZpbmcgdXNlcnMg
dG8gbW9kaWZ5IHRob3NlICovCi0gICAgZWMgPSAoRXZhc19Db29yZCopJnRpbGUtPndpZHRoOwot
ICAgICplYyA9IHdpZHRoOworICAgIGV2YXNDb29yZCA9IChFdmFzX0Nvb3JkKikmdGlsZS0+d2lk
dGg7CisgICAgKmV2YXNDb29yZCA9IHdpZHRoOwogCi0gICAgZWMgPSAoRXZhc19Db29yZCopJnRp
bGUtPmhlaWdodDsKLSAgICAqZWMgPSBoZWlnaHQ7CisgICAgZXZhc0Nvb3JkID0gKEV2YXNfQ29v
cmQqKSZ0aWxlLT5oZWlnaHQ7CisgICAgKmV2YXNDb29yZCA9IGhlaWdodDsKIAotICAgIGVjcyA9
IChFdmFzX0NvbG9yc3BhY2UqKSZ0aWxlLT5jc3BhY2U7Ci0gICAgKmVjcyA9IGNvbG9yU3BhY2U7
CisgICAgZXZhc0NvbG9yU3BhY2UgPSAoRXZhc19Db2xvcnNwYWNlKikmdGlsZS0+Y3NwYWNlOwor
ICAgICpldmFzQ29sb3JTcGFjZSA9IGNvbG9yU3BhY2U7CiAKLSAgICBmID0gKGZsb2F0KikmdGls
ZS0+em9vbTsKLSAgICAqZiA9IHpvb207CisgICAgdGlsZVpvb20gPSAoZmxvYXQqKSZ0aWxlLT56
b29tOworICAgICp0aWxlWm9vbSA9IHpvb207CiAKLSAgICBzID0gKHNpemVfdCopJnRpbGUtPmJ5
dGVzOwotICAgICpzID0gYnl0ZXM7CisgICAgdGlsZVNpemUgPSAoc2l6ZV90KikmdGlsZS0+Ynl0
ZXM7CisgICAgKnRpbGVTaXplID0gYnl0ZXM7CiAKICAgICBldmFzX29iamVjdF9pbWFnZV9zaXpl
X3NldCh0aWxlLT5pbWFnZSwgdGlsZS0+d2lkdGgsIHRpbGUtPmhlaWdodCk7CiAgICAgZXZhc19v
YmplY3RfaW1hZ2VfY29sb3JzcGFjZV9zZXQodGlsZS0+aW1hZ2UsIHRpbGUtPmNzcGFjZSk7CkBA
IC00ODAsNyArNDgwLDcgQEAgc3RydWN0IF9Fd2tfVGlsZV9VbnVzZWRfQ2FjaGVfRW50cnkgewog
ICAgIEV3a19UaWxlKiB0aWxlOwogICAgIGludCB3ZWlnaHQ7CiAgICAgc3RydWN0IHsKLSAgICAg
ICAgdm9pZCAoKmNiKSh2b2lkKiBkYXRhLCBFd2tfVGlsZSogdGlsZSk7CisgICAgICAgIHZvaWQg
KCpjYWxsYmFjaykodm9pZCogZGF0YSwgRXdrX1RpbGUqIHRpbGUpOwogICAgICAgICB2b2lkKiBk
YXRhOwogICAgIH0gdGlsZV9mcmVlOwogfTsKQEAgLTQ5Niw3ICs0OTYsNyBAQCBzdHJ1Y3QgX0V3
a19UaWxlX1VudXNlZF9DYWNoZSB7CiAgICAgICAgIHNpemVfdCB1c2VkOyAvKio8IGluIGJ5dGVz
LCBtYXliZSBtb3JlIHRoYW4gbWF4LiAqLwogICAgIH0gbWVtb3J5OwogICAgIHN0cnVjdCB7Ci0g
ICAgICAgIEV2YXNfQ29vcmQgeCwgeSwgdywgaDsKKyAgICAgICAgRXZhc19Db29yZCB4LCB5LCB3
aWR0aCwgaGVpZ2h0OwogICAgICAgICBmbG9hdCB6b29tOwogICAgICAgICBFaW5hX0Jvb2wgbG9j
a2VkOwogICAgIH0gbG9ja2VkOwpAQCAtNTQwLDggKzU0MCw4IEBAIHZvaWQgZXdrX3RpbGVfdW51
c2VkX2NhY2hlX2xvY2tfYXJlYShFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHRpbGVVbnVzZWRDYWNo
ZSwgRXZhCiAgICAgdGlsZVVudXNlZENhY2hlLT5sb2NrZWQubG9ja2VkID0gRUlOQV9UUlVFOwog
ICAgIHRpbGVVbnVzZWRDYWNoZS0+bG9ja2VkLnggPSB4OwogICAgIHRpbGVVbnVzZWRDYWNoZS0+
bG9ja2VkLnkgPSB5OwotICAgIHRpbGVVbnVzZWRDYWNoZS0+bG9ja2VkLncgPSB3aWR0aDsKLSAg
ICB0aWxlVW51c2VkQ2FjaGUtPmxvY2tlZC5oID0gaGVpZ2h0OworICAgIHRpbGVVbnVzZWRDYWNo
ZS0+bG9ja2VkLndpZHRoID0gd2lkdGg7CisgICAgdGlsZVVudXNlZENhY2hlLT5sb2NrZWQuaGVp
Z2h0ID0gaGVpZ2h0OwogICAgIHRpbGVVbnVzZWRDYWNoZS0+bG9ja2VkLnpvb20gPSB6b29tOwog
fQogCkBAIC01OTQsNyArNTk0LDcgQEAgdm9pZCBld2tfdGlsZV91bnVzZWRfY2FjaGVfY2xlYXIo
RXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0aWxlVW51c2VkQ2FjaGUpCiAgICAgdm9pZCogaXRlbTsK
ICAgICBFSU5BX0xJU1RfRlJFRSh0aWxlVW51c2VkQ2FjaGUtPmVudHJpZXMubGlzdCwgaXRlbSkg
ewogICAgICAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGVfRW50cnkqIGl0ciA9IHN0YXRpY19jYXN0
PEV3a19UaWxlX1VudXNlZF9DYWNoZV9FbnRyeSo+KGl0ZW0pOwotICAgICAgICBpdHItPnRpbGVf
ZnJlZS5jYihpdHItPnRpbGVfZnJlZS5kYXRhLCBpdHItPnRpbGUpOworICAgICAgICBpdHItPnRp
bGVfZnJlZS5jYWxsYmFjayhpdHItPnRpbGVfZnJlZS5kYXRhLCBpdHItPnRpbGUpOwogICAgICAg
ICBmcmVlKGl0cik7CiAgICAgfQogCkBAIC02NTAsNyArNjUwLDcgQEAgc2l6ZV90IGV3a190aWxl
X3VudXNlZF9jYWNoZV91c2VkX2dldChjb25zdCBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHRpbGVV
bnVzZWRDYWMKIAogc2l6ZV90IGV3a190aWxlX3VudXNlZF9jYWNoZV9mbHVzaChFd2tfVGlsZV9V
bnVzZWRfQ2FjaGUqIHRpbGVVbnVzZWRDYWNoZSwgc2l6ZV90IGJ5dGVzKQogewotICAgIEVpbmFf
TGlzdCogbCwgKiBsX25leHQ7CisgICAgRWluYV9MaXN0KiBsaXN0LCAqIGxpc3ROZXh0OwogICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh0aWxlVW51c2VkQ2FjaGUsIDApOwogICAg
IHNpemVfdCBkb25lOwogICAgIHVuc2lnbmVkIGludCBjb3VudDsKQEAgLTY2OCw3ICs2NjgsNyBA
QCBzaXplX3QgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2ZsdXNoKEV3a19UaWxlX1VudXNlZF9DYWNo
ZSogdGlsZVVudXNlZENhY2hlLCBzaXplXwogICAgIHZvaWQqIGl0ZW07CiAgICAgZG9uZSA9IDA7
CiAgICAgY291bnQgPSAwOwotICAgIEVJTkFfTElTVF9GT1JFQUNIX1NBRkUodGlsZVVudXNlZENh
Y2hlLT5lbnRyaWVzLmxpc3QsIGwsIGxfbmV4dCwgaXRlbSkgeworICAgIEVJTkFfTElTVF9GT1JF
QUNIX1NBRkUodGlsZVVudXNlZENhY2hlLT5lbnRyaWVzLmxpc3QsIGxpc3QsIGxpc3ROZXh0LCBp
dGVtKSB7CiAgICAgICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZV9FbnRyeSogaXRyID0gc3RhdGlj
X2Nhc3Q8RXdrX1RpbGVfVW51c2VkX0NhY2hlX0VudHJ5Kj4oaXRlbSk7CiAgICAgICAgIEV3a19U
aWxlKiB0aWxlID0gaXRyLT50aWxlOwogICAgICAgICBpZiAoZG9uZSA+IGJ5dGVzKQpAQCAtNjc2
LDE0ICs2NzYsMTQgQEAgc2l6ZV90IGV3a190aWxlX3VudXNlZF9jYWNoZV9mbHVzaChFd2tfVGls
ZV9VbnVzZWRfQ2FjaGUqIHRpbGVVbnVzZWRDYWNoZSwgc2l6ZV8KICAgICAgICAgaWYgKHRpbGVV
bnVzZWRDYWNoZS0+bG9ja2VkLmxvY2tlZAogICAgICAgICAgICAgJiYgdGlsZS0+eCArIHRpbGUt
PndpZHRoID4gdGlsZVVudXNlZENhY2hlLT5sb2NrZWQueAogICAgICAgICAgICAgJiYgdGlsZS0+
eSArIHRpbGUtPmhlaWdodCA+IHRpbGVVbnVzZWRDYWNoZS0+bG9ja2VkLnkKLSAgICAgICAgICAg
ICYmIHRpbGUtPnggPCB0aWxlVW51c2VkQ2FjaGUtPmxvY2tlZC54ICsgdGlsZVVudXNlZENhY2hl
LT5sb2NrZWQudwotICAgICAgICAgICAgJiYgdGlsZS0+eSA8IHRpbGVVbnVzZWRDYWNoZS0+bG9j
a2VkLnkgKyB0aWxlVW51c2VkQ2FjaGUtPmxvY2tlZC5oCisgICAgICAgICAgICAmJiB0aWxlLT54
IDwgdGlsZVVudXNlZENhY2hlLT5sb2NrZWQueCArIHRpbGVVbnVzZWRDYWNoZS0+bG9ja2VkLndp
ZHRoCisgICAgICAgICAgICAmJiB0aWxlLT55IDwgdGlsZVVudXNlZENhY2hlLT5sb2NrZWQueSAr
IHRpbGVVbnVzZWRDYWNoZS0+bG9ja2VkLmhlaWdodAogICAgICAgICAgICAgJiYgdGlsZS0+em9v
bSA9PSB0aWxlVW51c2VkQ2FjaGUtPmxvY2tlZC56b29tKSB7CiAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgfQogICAgICAgICBkb25lICs9IHNpemVvZihFd2tfVGlsZSkgKyBpdHItPnRp
bGUtPmJ5dGVzOwotICAgICAgICBpdHItPnRpbGVfZnJlZS5jYihpdHItPnRpbGVfZnJlZS5kYXRh
LCBpdHItPnRpbGUpOwotICAgICAgICB0aWxlVW51c2VkQ2FjaGUtPmVudHJpZXMubGlzdCA9IGVp
bmFfbGlzdF9yZW1vdmVfbGlzdCh0aWxlVW51c2VkQ2FjaGUtPmVudHJpZXMubGlzdCwgbCk7Cisg
ICAgICAgIGl0ci0+dGlsZV9mcmVlLmNhbGxiYWNrKGl0ci0+dGlsZV9mcmVlLmRhdGEsIGl0ci0+
dGlsZSk7CisgICAgICAgIHRpbGVVbnVzZWRDYWNoZS0+ZW50cmllcy5saXN0ID0gZWluYV9saXN0
X3JlbW92ZV9saXN0KHRpbGVVbnVzZWRDYWNoZS0+ZW50cmllcy5saXN0LCBsaXN0KTsKICAgICAg
ICAgZnJlZShpdHIpOwogICAgICAgICBjb3VudCsrOwogICAgIH0KQEAgLTc0MywzMSArNzQzLDMx
IEBAIHZvaWQgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3RoYXcoRXdrX1RpbGVfVW51c2VkX0NhY2hl
KiB0aWxlVW51c2VkQ2FjaGUpCiAgKiBld2tfdGlsZV91bnVzZWRfY2FjaGVfdGlsZV9wdXQoKS4K
ICAqCiAgKiBAcGFyYW0gdGlsZVVudXNlZENhY2hlIGNhY2hlIG9mIHVudXNlZCB0aWxlcwotICog
QHBhcmFtIHQgdGhlIHRpbGUgdG8gYmUgcmVtb3ZlZCBmcm9tIEV3a19UaWxlX1VudXNlZF9DYWNo
ZS4KKyAqIEBwYXJhbSB0aWxlIHRoZSB0aWxlIHRvIGJlIHJlbW92ZWQgZnJvbSBFd2tfVGlsZV9V
bnVzZWRfQ2FjaGUuCiAgKgogICogQHJldHVybiAjRUlOQV9UUlVFIG9uIHN1Y2Nlc3MsICNFSU5B
X0ZBTFNFIG90aGVyd2lzZS4KICAqLwogRWluYV9Cb29sIGV3a190aWxlX3VudXNlZF9jYWNoZV90
aWxlX2dldChFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHRpbGVVbnVzZWRDYWNoZSwgRXdrX1RpbGUq
IHRpbGUpCiB7Ci0gICAgRWluYV9MaXN0KiBlLCAqIGw7CisgICAgRWluYV9MaXN0KiBmb3VuZEVu
dHJ5LCAqaXRlcmF0ZUVudHJ5OwogCiAgICAgdm9pZCogaXRlbTsKLSAgICBlID0gMDsKLSAgICBF
SU5BX0xJU1RfRk9SRUFDSCh0aWxlVW51c2VkQ2FjaGUtPmVudHJpZXMubGlzdCwgbCwgaXRlbSkg
eworICAgIGZvdW5kRW50cnkgPSAwOworICAgIEVJTkFfTElTVF9GT1JFQUNIKHRpbGVVbnVzZWRD
YWNoZS0+ZW50cmllcy5saXN0LCBpdGVyYXRlRW50cnksIGl0ZW0pIHsKICAgICAgICAgRXdrX1Rp
bGVfVW51c2VkX0NhY2hlX0VudHJ5KiBlbnRyeSA9IHN0YXRpY19jYXN0PEV3a19UaWxlX1VudXNl
ZF9DYWNoZV9FbnRyeSo+KGl0ZW0pOwogICAgICAgICBpZiAoZW50cnktPnRpbGUgPT0gdGlsZSkg
ewotICAgICAgICAgICAgZSA9IGw7CisgICAgICAgICAgICBmb3VuZEVudHJ5ID0gaXRlcmF0ZUVu
dHJ5OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9Ci0gICAgaWYgKCFlKSB7
CisgICAgaWYgKCFmb3VuZEVudHJ5KSB7CiAgICAgICAgIEVSUigidGlsZSAlcCBub3QgZm91bmQg
aW4gY2FjaGUgJXAiLCB0aWxlLCB0aWxlVW51c2VkQ2FjaGUpOwogICAgICAgICByZXR1cm4gRUlO
QV9GQUxTRTsKICAgICB9CiAKICAgICB0aWxlVW51c2VkQ2FjaGUtPmVudHJpZXMuY291bnQtLTsK
ICAgICB0aWxlVW51c2VkQ2FjaGUtPm1lbW9yeS51c2VkIC09IHNpemVvZihFd2tfVGlsZSkgKyB0
aWxlLT5ieXRlczsKLSAgICB0aWxlVW51c2VkQ2FjaGUtPmVudHJpZXMubGlzdCA9IGVpbmFfbGlz
dF9yZW1vdmVfbGlzdCh0aWxlVW51c2VkQ2FjaGUtPmVudHJpZXMubGlzdCwgZSk7CisgICAgdGls
ZVVudXNlZENhY2hlLT5lbnRyaWVzLmxpc3QgPSBlaW5hX2xpc3RfcmVtb3ZlX2xpc3QodGlsZVVu
dXNlZENhY2hlLT5lbnRyaWVzLmxpc3QsIGZvdW5kRW50cnkpOwogICAgIGZyZWUoaXRlbSk7CiAK
ICAgICByZXR1cm4gRUlOQV9UUlVFOwpAQCAtNzk1LDI5ICs3OTUsMjkgQEAgRWluYV9Cb29sIGV3
a190aWxlX3VudXNlZF9jYWNoZV90aWxlX2dldChFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHRpbGVV
bnVzZWRDYWNoZSwKICAqCiAgKiBAc2VlIGV3a190aWxlX3VudXNlZF9jYWNoZV9hdXRvX2ZsdXNo
KCkKICAqLwotRWluYV9Cb29sIGV3a190aWxlX3VudXNlZF9jYWNoZV90aWxlX3B1dChFd2tfVGls
ZV9VbnVzZWRfQ2FjaGUqIHRpbGVVbnVzZWRDYWNoZSwgRXdrX1RpbGUqIHRpbGUsIHZvaWQgKCog
dGlsZV9mcmVlX2NiKSh2b2lkKiBkYXRhLCBFd2tfVGlsZSogdGlsZSksIGNvbnN0IHZvaWQqIGRh
dGEpCitFaW5hX0Jvb2wgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3RpbGVfcHV0KEV3a19UaWxlX1Vu
dXNlZF9DYWNoZSogdGlsZVVudXNlZENhY2hlLCBFd2tfVGlsZSogdGlsZSwgdm9pZCAoKiB0aWxl
RnJlZUNiKSh2b2lkKiBkYXRhLCBFd2tfVGlsZSogdGlsZSksIGNvbnN0IHZvaWQqIGRhdGEpCiB7
Ci0gICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlX0VudHJ5KiB1Y2U7CisgICAgRXdrX1RpbGVfVW51
c2VkX0NhY2hlX0VudHJ5KiB1bnVzZWRDYWNoZUVudHJ5OwogCiAgICAgaWYgKHRpbGUtPnZpc2li
bGUpIHsKICAgICAgICAgRVJSKCJ0aWxlPSVwIGlzIG5vdCB1bnVzZWQgKHZpc2libGU9JWQpIiwg
dGlsZSwgdGlsZS0+dmlzaWJsZSk7CiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwogICAgIH0K
IAotICAgIHVjZSA9IHN0YXRpY19jYXN0PEV3a19UaWxlX1VudXNlZF9DYWNoZV9FbnRyeSo+KG1h
bGxvYyhzaXplb2YoRXdrX1RpbGVfVW51c2VkX0NhY2hlX0VudHJ5KSkpOwotICAgIGlmICghdWNl
KQorICAgIHVudXNlZENhY2hlRW50cnkgPSBzdGF0aWNfY2FzdDxFd2tfVGlsZV9VbnVzZWRfQ2Fj
aGVfRW50cnkqPihtYWxsb2Moc2l6ZW9mKEV3a19UaWxlX1VudXNlZF9DYWNoZV9FbnRyeSkpKTsK
KyAgICBpZiAoIXVudXNlZENhY2hlRW50cnkpCiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwog
Ci0gICAgdGlsZVVudXNlZENhY2hlLT5lbnRyaWVzLmxpc3QgPSBlaW5hX2xpc3RfYXBwZW5kKHRp
bGVVbnVzZWRDYWNoZS0+ZW50cmllcy5saXN0LCB1Y2UpOworICAgIHRpbGVVbnVzZWRDYWNoZS0+
ZW50cmllcy5saXN0ID0gZWluYV9saXN0X2FwcGVuZCh0aWxlVW51c2VkQ2FjaGUtPmVudHJpZXMu
bGlzdCwgdW51c2VkQ2FjaGVFbnRyeSk7CiAgICAgaWYgKGVpbmFfZXJyb3JfZ2V0KCkpIHsKICAg
ICAgICAgRVJSKCJMaXN0IGFsbG9jYXRpb24gZmFpbGVkIik7CiAgICAgICAgIHJldHVybiBFSU5B
X0ZBTFNFOwogICAgIH0KIAotICAgIHVjZS0+dGlsZSA9IHRpbGU7Ci0gICAgdWNlLT53ZWlnaHQg
PSAwOyAvKiBjYWxjdWxhdGVkIGp1c3QgYmVmb3JlIHNvcnQgKi8KLSAgICB1Y2UtPnRpbGVfZnJl
ZS5jYiA9IHRpbGVfZnJlZV9jYjsKLSAgICB1Y2UtPnRpbGVfZnJlZS5kYXRhID0gKHZvaWQqKWRh
dGE7CisgICAgdW51c2VkQ2FjaGVFbnRyeS0+dGlsZSA9IHRpbGU7CisgICAgdW51c2VkQ2FjaGVF
bnRyeS0+d2VpZ2h0ID0gMDsgLyogY2FsY3VsYXRlZCBqdXN0IGJlZm9yZSBzb3J0ICovCisgICAg
dW51c2VkQ2FjaGVFbnRyeS0+dGlsZV9mcmVlLmNhbGxiYWNrID0gdGlsZUZyZWVDYjsKKyAgICB1
bnVzZWRDYWNoZUVudHJ5LT50aWxlX2ZyZWUuZGF0YSA9ICh2b2lkKilkYXRhOwogCiAgICAgdGls
ZVVudXNlZENhY2hlLT5lbnRyaWVzLmNvdW50Kys7CiAgICAgdGlsZVVudXNlZENhY2hlLT5tZW1v
cnkudXNlZCArPSBzaXplb2YoRXdrX1RpbGUpICsgdGlsZS0+Ynl0ZXM7CkBAIC04MjgsMTMgKzgy
OCwxMyBAQCBFaW5hX0Jvb2wgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3RpbGVfcHV0KEV3a19UaWxl
X1VudXNlZF9DYWNoZSogdGlsZVVudXNlZENhY2hlLAogdm9pZCBld2tfdGlsZV91bnVzZWRfY2Fj
aGVfZGJnKGNvbnN0IEV3a19UaWxlX1VudXNlZF9DYWNoZSogdGlsZVVudXNlZENhY2hlKQogewog
ICAgIHZvaWQqIGl0ZW07Ci0gICAgRWluYV9MaXN0KiBsOworICAgIEVpbmFfTGlzdCogbGlzdDsK
ICAgICBpbnQgY291bnQgPSAwOwogICAgIHByaW50ZigiQ2FjaGUgb2YgdW51c2VkIHRpbGVzOiBl
bnRyaWVzOiAlenUvJXp1LCBtZW1vcnk6ICV6dS8lenVcbiIsCiAgICAgICAgICAgIHRpbGVVbnVz
ZWRDYWNoZS0+ZW50cmllcy5jb3VudCwgdGlsZVVudXNlZENhY2hlLT5lbnRyaWVzLmFsbG9jYXRl
ZCwKICAgICAgICAgICAgdGlsZVVudXNlZENhY2hlLT5tZW1vcnkudXNlZCwgdGlsZVVudXNlZENh
Y2hlLT5tZW1vcnkubWF4KTsKIAotICAgIEVJTkFfTElTVF9GT1JFQUNIKHRpbGVVbnVzZWRDYWNo
ZS0+ZW50cmllcy5saXN0LCBsLCBpdGVtKSB7CisgICAgRUlOQV9MSVNUX0ZPUkVBQ0godGlsZVVu
dXNlZENhY2hlLT5lbnRyaWVzLmxpc3QsIGxpc3QsIGl0ZW0pIHsKICAgICAgICAgY29uc3QgRXdr
X1RpbGUqIHRpbGUgPSBzdGF0aWNfY2FzdDxFd2tfVGlsZV9VbnVzZWRfQ2FjaGVfRW50cnkqPihp
dGVtKS0+dGlsZTsKICAgICAgICAgcHJpbnRmKCIgWyUzbHUsJTNsdSArICVkeCVkIEAgJTAuM2Zd
JWMiLAogICAgICAgICAgICAgICAgdGlsZS0+Y29sLCB0aWxlLT5yb3csIHRpbGUtPndpZHRoLCB0
aWxlLT5oZWlnaHQsIHRpbGUtPnpvb20sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9l
d2svZXdrX3ZpZXcuY3BwIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a192aWV3LmNwcAppbmRl
eCBmMTk3M2U0M2RkNGU3YWMwYTZhYmZjYTAxZDU2N2Y4MGI0M2VkNzU1Li5iNWYxNGMxMDgyOGFl
ZGIyMDIzM2UyMWY0YjVmYTEzM2UwY2Q5NTc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Vm
bC9ld2svZXdrX3ZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5j
cHAKQEAgLTkwLDE3ICs5MCwxNyBAQCBzdGF0aWMgY29uc3Qgc2l6ZV90IEVXS19WSUVXX1NDUk9M
TFNfU0laRV9NQVhfRlJFRSA9IDMyOwogICovCiBzdHJ1Y3QgX0V3a19WaWV3X1ByaXZhdGVfRGF0
YSB7CiAgICAgV2ViQ29yZTo6UGFnZSogcGFnZTsKLSAgICBXZWJDb3JlOjpTZXR0aW5ncyogcGFn
ZV9zZXR0aW5nczsKLSAgICBXZWJDb3JlOjpGcmFtZSogbWFpbl9mcmFtZTsKLSAgICBXZWJDb3Jl
OjpWaWV3cG9ydEFyZ3VtZW50cyB2aWV3cG9ydF9hcmd1bWVudHM7CisgICAgV2ViQ29yZTo6U2V0
dGluZ3MqIHBhZ2VTZXR0aW5nczsKKyAgICBXZWJDb3JlOjpGcmFtZSogbWFpbkZyYW1lOworICAg
IFdlYkNvcmU6OlZpZXdwb3J0QXJndW1lbnRzIHZpZXdwb3J0QXJndW1lbnRzOwogICAgIEV3a19I
aXN0b3J5KiBoaXN0b3J5OwogICAgIHN0cnVjdCB7CiAgICAgICAgIHZvaWQqIGNvbnRleHQ7CiAg
ICAgICAgIEV3a19WaWV3X1Jlc291cmNlX0hhbmRsZXJfQ2IgZnVuY3Rpb247Ci0gICAgfSBjdXN0
b21fcmVzb3VyY2VfaGFuZGxlcjsKKyAgICB9IGN1c3RvbVJlc291cmNlSGFuZGxlcjsKICAgICBz
dHJ1Y3QgewogICAgICAgICBFd2tfTWVudSBtZW51OwotICAgICAgICBXZWJDb3JlOjpQb3B1cE1l
bnVDbGllbnQqIG1lbnVfY2xpZW50OworICAgICAgICBXZWJDb3JlOjpQb3B1cE1lbnVDbGllbnQq
IG1lbnVDbGllbnQ7CiAgICAgfSBwb3B1cDsKICAgICBzdHJ1Y3QgewogICAgICAgICBFaW5hX1Jl
Y3RhbmdsZSogYXJyYXk7CkBAIC0xMTQsNTAgKzExNCw1MCBAQCBzdHJ1Y3QgX0V3a19WaWV3X1By
aXZhdGVfRGF0YSB7CiAgICAgfSBzY3JvbGxzOwogICAgIHVuc2lnbmVkIGludCBpbWg7IC8qKjwg
aW5wdXQgbWV0aG9kIGhpbnRzICovCiAgICAgc3RydWN0IHsKLSAgICAgICAgRWluYV9Cb29sIHZp
ZXdfY2xlYXJlZCA6IDE7Ci0gICAgICAgIEVpbmFfQm9vbCBuZWVkX3RvdWNoX2V2ZW50cyA6IDE7
CisgICAgICAgIEVpbmFfQm9vbCB2aWV3Q2xlYXJlZCA6IDE7CisgICAgICAgIEVpbmFfQm9vbCBu
ZWVkVG91Y2hFdmVudHMgOiAxOwogICAgIH0gZmxhZ3M7CiAgICAgc3RydWN0IHsKLSAgICAgICAg
Y29uc3QgY2hhciogdXNlcl9hZ2VudDsKLSAgICAgICAgY29uc3QgY2hhciogdXNlcl9zdHlsZXNo
ZWV0OwotICAgICAgICBjb25zdCBjaGFyKiBlbmNvZGluZ19kZWZhdWx0OwotICAgICAgICBjb25z
dCBjaGFyKiBlbmNvZGluZ19jdXN0b207CisgICAgICAgIGNvbnN0IGNoYXIqIHVzZXJBZ2VudDsK
KyAgICAgICAgY29uc3QgY2hhciogdXNlclN0eWxlc2hlZXQ7CisgICAgICAgIGNvbnN0IGNoYXIq
IGVuY29kaW5nRGVmYXVsdDsKKyAgICAgICAgY29uc3QgY2hhciogZW5jb2RpbmdDdXN0b207CiAg
ICAgICAgIGNvbnN0IGNoYXIqIHRoZW1lOwotICAgICAgICBjb25zdCBjaGFyKiBsb2NhbF9zdG9y
YWdlX2RhdGFiYXNlX3BhdGg7Ci0gICAgICAgIGludCBmb250X21pbmltdW1fc2l6ZTsKLSAgICAg
ICAgaW50IGZvbnRfbWluaW11bV9sb2dpY2FsX3NpemU7Ci0gICAgICAgIGludCBmb250X2RlZmF1
bHRfc2l6ZTsKLSAgICAgICAgaW50IGZvbnRfbW9ub3NwYWNlX3NpemU7Ci0gICAgICAgIGNvbnN0
IGNoYXIqIGZvbnRfc3RhbmRhcmQ7Ci0gICAgICAgIGNvbnN0IGNoYXIqIGZvbnRfY3Vyc2l2ZTsK
LSAgICAgICAgY29uc3QgY2hhciogZm9udF9tb25vc3BhY2U7Ci0gICAgICAgIGNvbnN0IGNoYXIq
IGZvbnRfZmFudGFzeTsKLSAgICAgICAgY29uc3QgY2hhciogZm9udF9zZXJpZjsKLSAgICAgICAg
Y29uc3QgY2hhciogZm9udF9zYW5zX3NlcmlmOwotICAgICAgICBFaW5hX0Jvb2wgYXV0b19sb2Fk
X2ltYWdlcyA6IDE7Ci0gICAgICAgIEVpbmFfQm9vbCBhdXRvX3Nocmlua19pbWFnZXMgOiAxOwot
ICAgICAgICBFaW5hX0Jvb2wgZW5hYmxlX2F1dG9fcmVzaXplX3dpbmRvdyA6IDE7Ci0gICAgICAg
IEVpbmFfQm9vbCBlbmFibGVfZGV2ZWxvcGVyX2V4dHJhcyA6IDE7Ci0gICAgICAgIEVpbmFfQm9v
bCBlbmFibGVfc2NyaXB0cyA6IDE7Ci0gICAgICAgIEVpbmFfQm9vbCBlbmFibGVfcGx1Z2lucyA6
IDE7Ci0gICAgICAgIEVpbmFfQm9vbCBlbmFibGVfZnJhbWVfZmxhdHRlbmluZyA6IDE7Ci0gICAg
ICAgIEVpbmFfQm9vbCBlbmNvZGluZ19kZXRlY3RvciA6IDE7Ci0gICAgICAgIEVpbmFfQm9vbCBz
Y3JpcHRzX3dpbmRvd19vcGVuIDogMTsKLSAgICAgICAgRWluYV9Cb29sIHNjcmlwdHNfY2FuX2Ns
b3NlX3dpbmRvd3MgOiAxOwotICAgICAgICBFaW5hX0Jvb2wgcmVzaXphYmxlX3RleHRhcmVhcyA6
IDE7Ci0gICAgICAgIEVpbmFfQm9vbCBwcml2YXRlX2Jyb3dzaW5nIDogMTsKLSAgICAgICAgRWlu
YV9Cb29sIGNhcmV0X2Jyb3dzaW5nIDogMTsKLSAgICAgICAgRWluYV9Cb29sIHNwYXRpYWxfbmF2
aWdhdGlvbiA6IDE7Ci0gICAgICAgIEVpbmFfQm9vbCBsb2NhbF9zdG9yYWdlIDogMTsKLSAgICAg
ICAgRWluYV9Cb29sIG9mZmxpbmVfYXBwX2NhY2hlIDogMTsKLSAgICAgICAgRWluYV9Cb29sIHBh
Z2VfY2FjaGUgOiAxOworICAgICAgICBjb25zdCBjaGFyKiBsb2NhbFN0b3JhZ2VEYXRhYmFzZVBh
dGg7CisgICAgICAgIGludCBmb250TWluaW11bVNpemU7CisgICAgICAgIGludCBmb250TWluaW11
bUxvZ2ljYWxTaXplOworICAgICAgICBpbnQgZm9udERlZmF1bHRTaXplOworICAgICAgICBpbnQg
Zm9udE1vbm9zcGFjZVNpemU7CisgICAgICAgIGNvbnN0IGNoYXIqIGZvbnRTdGFuZGFyZDsKKyAg
ICAgICAgY29uc3QgY2hhciogZm9udEN1cnNpdmU7CisgICAgICAgIGNvbnN0IGNoYXIqIGZvbnRN
b25vc3BhY2U7CisgICAgICAgIGNvbnN0IGNoYXIqIGZvbnRGYW50YXN5OworICAgICAgICBjb25z
dCBjaGFyKiBmb250U2VyaWY7CisgICAgICAgIGNvbnN0IGNoYXIqIGZvbnRTYW5zU2VyaWY7Cisg
ICAgICAgIEVpbmFfQm9vbCBhdXRvTG9hZEltYWdlcyA6IDE7CisgICAgICAgIEVpbmFfQm9vbCBh
dXRvU2hyaW5rSW1hZ2VzIDogMTsKKyAgICAgICAgRWluYV9Cb29sIGVuYWJsZUF1dG9SZXNpemVX
aW5kb3cgOiAxOworICAgICAgICBFaW5hX0Jvb2wgZW5hYmxlRGV2ZWxvcGVyRXh0cmFzIDogMTsK
KyAgICAgICAgRWluYV9Cb29sIGVuYWJsZVNjcmlwdHMgOiAxOworICAgICAgICBFaW5hX0Jvb2wg
ZW5hYmxlUGx1Z2lucyA6IDE7CisgICAgICAgIEVpbmFfQm9vbCBlbmFibGVGcmFtZUZsYXR0ZW5p
bmcgOiAxOworICAgICAgICBFaW5hX0Jvb2wgZW5jb2RpbmdEZXRlY3RvciA6IDE7CisgICAgICAg
IEVpbmFfQm9vbCBzY3JpcHRzV2luZG93T3BlbiA6IDE7CisgICAgICAgIEVpbmFfQm9vbCBzY3Jp
cHRzQ2FuQ2xvc2VXaW5kb3dzIDogMTsKKyAgICAgICAgRWluYV9Cb29sIHJlc2l6YWJsZVRleHRh
cmVhcyA6IDE7CisgICAgICAgIEVpbmFfQm9vbCBwcml2YXRlQnJvd3NpbmcgOiAxOworICAgICAg
ICBFaW5hX0Jvb2wgY2FyZXRCcm93c2luZyA6IDE7CisgICAgICAgIEVpbmFfQm9vbCBzcGF0aWFs
TmF2aWdhdGlvbiA6IDE7CisgICAgICAgIEVpbmFfQm9vbCBsb2NhbFN0b3JhZ2UgOiAxOworICAg
ICAgICBFaW5hX0Jvb2wgb2ZmbGluZUFwcENhY2hlIDogMTsKKyAgICAgICAgRWluYV9Cb29sIHBh
Z2VDYWNoZSA6IDE7CiAgICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICBmbG9hdCBtaW5fc2Nh
bGU7Ci0gICAgICAgICAgICBmbG9hdCBtYXhfc2NhbGU7Ci0gICAgICAgICAgICBFaW5hX0Jvb2wg
dXNlcl9zY2FsYWJsZSA6IDE7Ci0gICAgICAgIH0gem9vbV9yYW5nZTsKLSAgICAgICAgZmxvYXQg
ZGV2aWNlX3BpeGVsX3JhdGlvOwotICAgICAgICBkb3VibGUgZG9tX3RpbWVyX2ludGVydmFsOwor
ICAgICAgICAgICAgZmxvYXQgbWluU2NhbGU7CisgICAgICAgICAgICBmbG9hdCBtYXhTY2FsZTsK
KyAgICAgICAgICAgIEVpbmFfQm9vbCB1c2VyU2NhbGFibGUgOiAxOworICAgICAgICB9IHpvb21S
YW5nZTsKKyAgICAgICAgZmxvYXQgZGV2aWNlUGl4ZWxSYXRpbzsKKyAgICAgICAgZG91YmxlIGRv
bVRpbWVySW50ZXJ2YWw7CiAgICAgfSBzZXR0aW5nczsKICAgICBzdHJ1Y3QgewogICAgICAgICBz
dHJ1Y3QgewpAQCAtMTc0LDcgKzE3NCw3IEBAIHN0cnVjdCBfRXdrX1ZpZXdfUHJpdmF0ZV9EYXRh
IHsKICAgICAgICAgICAgIEV2YXNfQ29vcmQgeCwgeTsKICAgICAgICAgfSBjZW50ZXI7CiAgICAg
ICAgIEVjb3JlX0FuaW1hdG9yKiBhbmltYXRvcjsKLSAgICB9IGFuaW1hdGVkX3pvb207CisgICAg
fSBhbmltYXRlZFpvb207CiB9OwogCiAjaWZuZGVmIEVXS19UWVBFX0NIRUNLCkBAIC0yMTksMTQg
KzIxOSwxNCBAQCBzdHJ1Y3QgX0V3a19WaWV3X1ByaXZhdGVfRGF0YSB7CiAgICAgICAgIHJldHVy
biBfX1ZBX0FSR1NfXzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICB9CiAKLSNk
ZWZpbmUgRVdLX1ZJRVdfUFJJVl9HRVQoc2QsIHB0cikgICAgICAgICAgICAgIFwKLSAgICBFd2tf
Vmlld19Qcml2YXRlX0RhdGEgKnB0ciA9IHNkLT5fcHJpdgorI2RlZmluZSBFV0tfVklFV19QUklW
X0dFVChzbWFydERhdGEsIHB0cikgICAgICAgICAgICAgIFwKKyAgICBFd2tfVmlld19Qcml2YXRl
X0RhdGEgKnB0ciA9IHNtYXJ0RGF0YS0+X3ByaXYKIAotI2RlZmluZSBFV0tfVklFV19QUklWX0dF
VF9PUl9SRVRVUk4oc2QsIHB0ciwgLi4uKSAgICAgICAgICAgICAgIFwKLSAgICBFV0tfVklFV19Q
UklWX0dFVChzZCwgcHRyKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisjZGVm
aW5lIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHB0ciwgLi4uKSAgICAg
ICAgICAgICAgIFwKKyAgICBFV0tfVklFV19QUklWX0dFVChzbWFydERhdGEsIHB0cik7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIGlmICghcHRyKSB7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgQ1JJVElDQUwo
Im5vIHByaXZhdGUgZGF0YSBmb3Igb2JqZWN0ICVwICglcykiLCAgICAgICAgICBcCi0gICAgICAg
ICAgICAgICAgIHNkLT5zZWxmLCBldmFzX29iamVjdF90eXBlX2dldChzZC0+c2VsZikpOyAgICAg
XAorICAgICAgICAgICAgICAgICBzbWFydERhdGEtPnNlbGYsIGV2YXNfb2JqZWN0X3R5cGVfZ2V0
KHNtYXJ0RGF0YS0+c2VsZikpOyAgICAgXAogICAgICAgICByZXR1cm4gX19WQV9BUkdTX187ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICB9CiAKQEAgLTI1Miw3ICsy
NTIsNyBAQCBzdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19yZXBhaW50c19yZXNpemUoRXdrX1Zp
ZXdfUHJpdmF0ZV9EYXRhKiBwcml2LCBzaXplX3QgcwogCiBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdf
cmVwYWludF9hZGQoRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKiBwcml2LCBFdmFzX0Nvb3JkIHgsIEV2
YXNfQ29vcmQgeSwgRXZhc19Db29yZCB3aWR0aCwgRXZhc19Db29yZCBoZWlnaHQpCiB7Ci0gICAg
RWluYV9SZWN0YW5nbGUqIHI7CisgICAgRWluYV9SZWN0YW5nbGUqIHJlY3Q7CiAKICAgICAvLyBm
cHJpbnRmKHN0ZGVyciwgIj4+PiByZXBhaW50IHJlcXVlc3RlZDogJWQsJWQrJWR4JWRcbiIsIHgs
IHksIHcsIGgpOwogICAgIGlmIChwcml2LT5yZXBhaW50cy5hbGxvY2F0ZWQgPT0gcHJpdi0+cmVw
YWludHMuY291bnQpIHsKQEAgLTI2NSwxMyArMjY1LDEzIEBAIHN0YXRpYyB2b2lkIF9ld2tfdmll
d19yZXBhaW50X2FkZChFd2tfVmlld19Qcml2YXRlX0RhdGEqIHByaXYsIEV2YXNfQ29vcmQgeCwg
RXZhCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgciA9IHByaXYtPnJlcGFpbnRz
LmFycmF5ICsgcHJpdi0+cmVwYWludHMuY291bnQ7CisgICAgcmVjdCA9IHByaXYtPnJlcGFpbnRz
LmFycmF5ICsgcHJpdi0+cmVwYWludHMuY291bnQ7CiAgICAgcHJpdi0+cmVwYWludHMuY291bnQr
KzsKIAotICAgIHItPnggPSB4OwotICAgIHItPnkgPSB5OwotICAgIHItPncgPSB3aWR0aDsKLSAg
ICByLT5oID0gaGVpZ2h0OworICAgIHJlY3QtPnggPSB4OworICAgIHJlY3QtPnkgPSB5OworICAg
IHJlY3QtPncgPSB3aWR0aDsKKyAgICByZWN0LT5oID0gaGVpZ2h0OwogCiAgICAgREJHKCJhZGQg
cmVwYWludCAlZCwgJWQrJWR4JWQiLCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKIH0KQEAgLTI5Niwy
OSArMjk2LDI5IEBAIHN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3Njcm9sbHNfcmVzaXplKEV3
a19WaWV3X1ByaXZhdGVfRGF0YSogcHJpdiwgc2l6ZV90IHNpCiAgICAgcmV0dXJuIEVJTkFfVFJV
RTsKIH0KIAotc3RhdGljIHZvaWQgX2V3a192aWV3X3Njcm9sbF9hZGQoRXdrX1ZpZXdfUHJpdmF0
ZV9EYXRhKiBwcml2LCBFdmFzX0Nvb3JkIGR4LCBFdmFzX0Nvb3JkIGR5LCBFdmFzX0Nvb3JkIHgs
IEV2YXNfQ29vcmQgeSwgRXZhc19Db29yZCB3aWR0aCwgRXZhc19Db29yZCBoZWlnaHQsIEVpbmFf
Qm9vbCBtYWluU2Nyb2xsKQorc3RhdGljIHZvaWQgX2V3a192aWV3X3Njcm9sbF9hZGQoRXdrX1Zp
ZXdfUHJpdmF0ZV9EYXRhKiBwcml2LCBFdmFzX0Nvb3JkIGRlbHRhWCwgRXZhc19Db29yZCBkZWx0
YVksIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5LCBFdmFzX0Nvb3JkIHdpZHRoLCBFdmFzX0Nv
b3JkIGhlaWdodCwgRWluYV9Cb29sIG1haW5TY3JvbGwpCiB7Ci0gICAgRXdrX1Njcm9sbF9SZXF1
ZXN0KiByOwotICAgIEV3a19TY3JvbGxfUmVxdWVzdCogcl9lbmQ7CisgICAgRXdrX1Njcm9sbF9S
ZXF1ZXN0KiByZWN0OworICAgIEV3a19TY3JvbGxfUmVxdWVzdCogcmVjdF9lbmQ7CiAgICAgRXZh
c19Db29yZCB4MiA9IHggKyB3aWR0aCwgeTIgPSB5ICsgaGVpZ2h0OwogCi0gICAgciA9IHByaXYt
PnNjcm9sbHMuYXJyYXk7Ci0gICAgcl9lbmQgPSByICsgcHJpdi0+c2Nyb2xscy5jb3VudDsKLSAg
ICBmb3IgKDsgciA8IHJfZW5kOyByKyspIHsKLSAgICAgICAgaWYgKHItPnggPT0geCAmJiByLT55
ID09IHkgJiYgci0+dyA9PSB3aWR0aCAmJiByLT5oID09IGhlaWdodCkgeworICAgIHJlY3QgPSBw
cml2LT5zY3JvbGxzLmFycmF5OworICAgIHJlY3RfZW5kID0gcmVjdCArIHByaXYtPnNjcm9sbHMu
Y291bnQ7CisgICAgZm9yICg7IHJlY3QgPCByZWN0X2VuZDsgcmVjdCsrKSB7CisgICAgICAgIGlm
IChyZWN0LT54ID09IHggJiYgcmVjdC0+eSA9PSB5ICYmIHJlY3QtPncgPT0gd2lkdGggJiYgcmVj
dC0+aCA9PSBoZWlnaHQpIHsKICAgICAgICAgICAgIERCRygicmVnaW9uIGFscmVhZHkgc2Nyb2xs
ZWQgJWQsJWQrJWR4JWQgJSswM2QsJSswM2QgYWRkICIKICAgICAgICAgICAgICAgICAiJSswM2Qs
JSswM2QiLAotICAgICAgICAgICAgICAgIHItPngsIHItPnksIHItPncsIHItPmgsIHItPmR4LCBy
LT5keSwgZHgsIGR5KTsKLSAgICAgICAgICAgIHItPmR4ICs9IGR4OwotICAgICAgICAgICAgci0+
ZHkgKz0gZHk7CisgICAgICAgICAgICAgICAgcmVjdC0+eCwgcmVjdC0+eSwgcmVjdC0+dywgcmVj
dC0+aCwgcmVjdC0+ZHgsIHJlY3QtPmR5LCBkZWx0YVgsIGRlbHRhWSk7CisgICAgICAgICAgICBy
ZWN0LT5keCArPSBkZWx0YVg7CisgICAgICAgICAgICByZWN0LT5keSArPSBkZWx0YVk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgaWYgKCh4IDw9IHItPnggJiYgeDIg
Pj0gci0+eDIpICYmICh5IDw9IHItPnkgJiYgeTIgPj0gci0+eTIpKSB7CisgICAgICAgIGlmICgo
eCA8PSByZWN0LT54ICYmIHgyID49IHJlY3QtPngyKSAmJiAoeSA8PSByZWN0LT55ICYmIHkyID49
IHJlY3QtPnkyKSkgewogICAgICAgICAgICAgREJHKCJvbGQgdmlld3BvcnQgKCVkLCVkKyVkeCVk
ICUrMDNkLCUrMDNkKSB3YXMgc2Nyb2xsZWQgaXRzZWxmLCAiCiAgICAgICAgICAgICAgICAgImFk
ZCAlKzAzZCwlKzAzZCIsCi0gICAgICAgICAgICAgICAgci0+eCwgci0+eSwgci0+dywgci0+aCwg
ci0+ZHgsIHItPmR5LCBkeCwgZHkpOwotICAgICAgICAgICAgci0+eCArPSBkeDsKLSAgICAgICAg
ICAgIHItPnkgKz0gZHk7CisgICAgICAgICAgICAgICAgcmVjdC0+eCwgcmVjdC0+eSwgcmVjdC0+
dywgcmVjdC0+aCwgcmVjdC0+ZHgsIHJlY3QtPmR5LCBkZWx0YVgsIGRlbHRhWSk7CisgICAgICAg
ICAgICByZWN0LT54ICs9IGRlbHRhWDsKKyAgICAgICAgICAgIHJlY3QtPnkgKz0gZGVsdGFZOwog
ICAgICAgICB9CiAgICAgfQogCkBAIC0zMzIsMTkgKzMzMiwxOSBAQCBzdGF0aWMgdm9pZCBfZXdr
X3ZpZXdfc2Nyb2xsX2FkZChFd2tfVmlld19Qcml2YXRlX0RhdGEqIHByaXYsIEV2YXNfQ29vcmQg
ZHgsIEV2YQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHIgPSBwcml2LT5zY3Jv
bGxzLmFycmF5ICsgcHJpdi0+c2Nyb2xscy5jb3VudDsKKyAgICByZWN0ID0gcHJpdi0+c2Nyb2xs
cy5hcnJheSArIHByaXYtPnNjcm9sbHMuY291bnQ7CiAgICAgcHJpdi0+c2Nyb2xscy5jb3VudCsr
OwogCi0gICAgci0+eCA9IHg7Ci0gICAgci0+eSA9IHk7Ci0gICAgci0+dyA9IHdpZHRoOwotICAg
IHItPmggPSBoZWlnaHQ7Ci0gICAgci0+eDIgPSB4MjsKLSAgICByLT55MiA9IHkyOwotICAgIHIt
PmR4ID0gZHg7Ci0gICAgci0+ZHkgPSBkeTsKLSAgICByLT5tYWluX3Njcm9sbCA9IG1haW5TY3Jv
bGw7Ci0gICAgREJHKCJhZGQgc2Nyb2xsIGluIHJlZ2lvbjogJWQsICVkKyVkeCVkICUrMDNkLCAl
KzAzZCIsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGR4LCBkeSk7CisgICAgcmVjdC0+eCA9IHg7Cisg
ICAgcmVjdC0+eSA9IHk7CisgICAgcmVjdC0+dyA9IHdpZHRoOworICAgIHJlY3QtPmggPSBoZWln
aHQ7CisgICAgcmVjdC0+eDIgPSB4MjsKKyAgICByZWN0LT55MiA9IHkyOworICAgIHJlY3QtPmR4
ID0gZGVsdGFYOworICAgIHJlY3QtPmR5ID0gZGVsdGFZOworICAgIHJlY3QtPm1haW5fc2Nyb2xs
ID0gbWFpblNjcm9sbDsKKyAgICBEQkcoImFkZCBzY3JvbGwgaW4gcmVnaW9uOiAlZCwgJWQrJWR4
JWQgJSswM2QsICUrMDNkIiwgeCwgeSwgd2lkdGgsIGhlaWdodCwgZGVsdGFYLCBkZWx0YVkpOwog
CiAgICAgRWluYV9SZWN0YW5nbGUqIHByOwogICAgIEVpbmFfUmVjdGFuZ2xlKiBwcl9lbmQ7CkBA
IC0zNTMsOCArMzUzLDggQEAgc3RhdGljIHZvaWQgX2V3a192aWV3X3Njcm9sbF9hZGQoRXdrX1Zp
ZXdfUHJpdmF0ZV9EYXRhKiBwcml2LCBFdmFzX0Nvb3JkIGR4LCBFdmEKICAgICBjb3VudCA9IHBy
aXYtPnJlcGFpbnRzLmNvdW50OwogICAgIHByX2VuZCA9IHByICsgY291bnQ7CiAgICAgZm9yICg7
IHByIDwgcHJfZW5kOyBwcisrKSB7Ci0gICAgICAgIHByLT54ICs9IGR4OwotICAgICAgICBwci0+
eSArPSBkeTsKKyAgICAgICAgcHItPnggKz0gZGVsdGFYOworICAgICAgICBwci0+eSArPSBkZWx0
YVk7CiAgICAgfQogfQogCkBAIC0zODIsMTIgKzM4MiwxMiBAQCBzdGF0aWMgRWluYV9Cb29sIF9l
d2tfdmlld19zbWFydF9mb2N1c19pbihFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEpCiBz
dGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19zbWFydF9mb2N1c19vdXQoRXdrX1ZpZXdfU21hcnRf
RGF0YSogc21hcnREYXRhKQogewogICAgIEVXS19WSUVXX1BSSVZfR0VUKHNtYXJ0RGF0YSwgcHJp
dik7Ci0gICAgV2ViQ29yZTo6Rm9jdXNDb250cm9sbGVyKiBmYyA9IHByaXYtPnBhZ2UtPmZvY3Vz
Q29udHJvbGxlcigpOwotICAgIERCRygiZXdrVmlldz0lcCwgZmM9JXAiLCBzbWFydERhdGEtPnNl
bGYsIGZjKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZmMsIEVJTkFfRkFM
U0UpOworICAgIFdlYkNvcmU6OkZvY3VzQ29udHJvbGxlciogZm9jdXNDb250cm9sbGVyID0gcHJp
di0+cGFnZS0+Zm9jdXNDb250cm9sbGVyKCk7CisgICAgREJHKCJld2tWaWV3PSVwLCBmYz0lcCIs
IHNtYXJ0RGF0YS0+c2VsZiwgZm9jdXNDb250cm9sbGVyKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTl9WQUwoZm9jdXNDb250cm9sbGVyLCBFSU5BX0ZBTFNFKTsKIAotICAgIGZjLT5z
ZXRBY3RpdmUoZmFsc2UpOwotICAgIGZjLT5zZXRGb2N1c2VkKGZhbHNlKTsKKyAgICBmb2N1c0Nv
bnRyb2xsZXItPnNldEFjdGl2ZShmYWxzZSk7CisgICAgZm9jdXNDb250cm9sbGVyLT5zZXRGb2N1
c2VkKGZhbHNlKTsKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCkBAIC00NTgsOTcgKzQ1OCw5
NyBAQCBzdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19zbWFydF9zaG91bGRfaW50ZXJydXB0X2ph
dmFzY3JpcHQoRXdrX1ZpZXdfU21hcnRfRGF0YQogc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdf
c21hcnRfcnVuX2phdmFzY3JpcHRfcHJvbXB0KEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0
YSwgRXZhc19PYmplY3QqIGZyYW1lLCBjb25zdCBjaGFyKiBtZXNzYWdlLCBjb25zdCBjaGFyKiBk
ZWZhdWx0VmFsdWUsIGNoYXIqKiB2YWx1ZSkKIHsKICAgICAqdmFsdWUgPSBzdHJkdXAoInRlc3Qi
KTsKLSAgICBFaW5hX0Jvb2wgcmV0ID0gRUlOQV9UUlVFOworICAgIEVpbmFfQm9vbCByZXN1bHQg
PSBFSU5BX1RSVUU7CiAgICAgSU5GKCJqYXZhc2NyaXB0IHByb21wdDpcbiIKICAgICAgICAgIlx0
ICAgICAgbWVzc2FnZTogJXNcbiIKICAgICAgICAgIlx0ZGVmYXVsdCB2YWx1ZTogJXNcbiIKICAg
ICAgICAgIlx0Z2l2aW5nIGFuc3dlcjogJXNcbiIKLSAgICAgICAgIlx0ICAgICAgIGJ1dHRvbjog
JXMiLCBtZXNzYWdlLCBkZWZhdWx0VmFsdWUsICp2YWx1ZSwgcmV0ID8gIm9rIiA6ICJjYW5jZWwi
KTsKKyAgICAgICAgIlx0ICAgICAgIGJ1dHRvbjogJXMiLCBtZXNzYWdlLCBkZWZhdWx0VmFsdWUs
ICp2YWx1ZSwgcmVzdWx0ID8gIm9rIiA6ICJjYW5jZWwiKTsKIAotICAgIHJldHVybiByZXQ7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogLy8gRXZlbnQgSGFuZGxpbmcgLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiBzdGF0aWMgdm9pZCBfZXdr
X3ZpZXdfb25fZm9jdXNfaW4odm9pZCogZGF0YSwgRXZhcyogZXZlbnRUeXBlLCBFdmFzX09iamVj
dCogY2FsbGJhY2ssIHZvaWQqIGV2ZW50SW5mbykKIHsKLSAgICBFd2tfVmlld19TbWFydF9EYXRh
KiBzZCA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihkYXRhKTsKLSAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTihzZC0+YXBpLT5mb2N1c19pbik7Ci0gICAgc2QtPmFwaS0+Zm9jdXNfaW4oc2QpOwor
ICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IHN0YXRpY19jYXN0PEV3a19WaWV3
X1NtYXJ0X0RhdGEqPihkYXRhKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFy
dERhdGEtPmFwaSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRhLT5h
cGktPmZvY3VzX2luKTsKKyAgICBzbWFydERhdGEtPmFwaS0+Zm9jdXNfaW4oc21hcnREYXRhKTsK
IH0KIAogc3RhdGljIHZvaWQgX2V3a192aWV3X29uX2ZvY3VzX291dCh2b2lkKiBkYXRhLCBFdmFz
KiBldmVudFR5cGUsIEV2YXNfT2JqZWN0KiBjYWxsYmFjaywgdm9pZCogZXZlbnRJbmZvKQogewot
ICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRf
RGF0YSo+KGRhdGEpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGkpOwot
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGktPmZvY3VzX291dCk7Ci0gICAg
c2QtPmFwaS0+Zm9jdXNfb3V0KHNkKTsKKyAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERh
dGEgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZGF0YSk7CisgICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRhLT5hcGkpOworICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+YXBpLT5mb2N1c19vdXQpOworICAgIHNtYXJ0RGF0YS0+
YXBpLT5mb2N1c19vdXQoc21hcnREYXRhKTsKIH0KIAogc3RhdGljIHZvaWQgX2V3a192aWV3X29u
X21vdXNlX3doZWVsKHZvaWQqIGRhdGEsIEV2YXMqIGV2ZW50VHlwZSwgRXZhc19PYmplY3QqIGNh
bGxiYWNrLCB2b2lkKiBldmVudEluZm8pCiB7Ci0gICAgRXZhc19FdmVudF9Nb3VzZV9XaGVlbCog
ZXYgPSBzdGF0aWNfY2FzdDxFdmFzX0V2ZW50X01vdXNlX1doZWVsKj4oZXZlbnRJbmZvKTsKLSAg
ICBFd2tfVmlld19TbWFydF9EYXRhKiBzZCA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0Rh
dGEqPihkYXRhKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpKTsKLSAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpLT5tb3VzZV93aGVlbCk7Ci0gICAg
c2QtPmFwaS0+bW91c2Vfd2hlZWwoc2QsIGV2KTsKKyAgICBFdmFzX0V2ZW50X01vdXNlX1doZWVs
KiB3aGVlbEV2ZW50ID0gc3RhdGljX2Nhc3Q8RXZhc19FdmVudF9Nb3VzZV9XaGVlbCo+KGV2ZW50
SW5mbyk7CisgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhID0gc3RhdGljX2Nhc3Q8
RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOKHNtYXJ0RGF0YS0+YXBpKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFy
dERhdGEtPmFwaS0+bW91c2Vfd2hlZWwpOworICAgIHNtYXJ0RGF0YS0+YXBpLT5tb3VzZV93aGVl
bChzbWFydERhdGEsIHdoZWVsRXZlbnQpOwogfQogCiBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfb25f
bW91c2VfZG93bih2b2lkKiBkYXRhLCBFdmFzKiBldmVudFR5cGUsIEV2YXNfT2JqZWN0KiBjYWxs
YmFjaywgdm9pZCogZXZlbnRJbmZvKQogewotICAgIEV2YXNfRXZlbnRfTW91c2VfRG93biogZXYg
PSBzdGF0aWNfY2FzdDxFdmFzX0V2ZW50X01vdXNlX0Rvd24qPihldmVudEluZm8pOwotICAgIEV3
a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+
KGRhdGEpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGkpOwotICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGktPm1vdXNlX2Rvd24pOwotICAgIHNkLT5h
cGktPm1vdXNlX2Rvd24oc2QsIGV2KTsKKyAgICBFdmFzX0V2ZW50X01vdXNlX0Rvd24qIGRvd25F
dmVudCA9IHN0YXRpY19jYXN0PEV2YXNfRXZlbnRfTW91c2VfRG93bio+KGV2ZW50SW5mbyk7Cisg
ICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdf
U21hcnRfRGF0YSo+KGRhdGEpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0
RGF0YS0+YXBpKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmFw
aS0+bW91c2VfZG93bik7CisgICAgc21hcnREYXRhLT5hcGktPm1vdXNlX2Rvd24oc21hcnREYXRh
LCBkb3duRXZlbnQpOwogfQogCiBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfb25fbW91c2VfdXAodm9p
ZCogZGF0YSwgRXZhcyogZXZlbnRUeXBlLCBFdmFzX09iamVjdCogY2FsbGJhY2ssIHZvaWQqIGV2
ZW50SW5mbykKIHsKLSAgICBFdmFzX0V2ZW50X01vdXNlX1VwKiBldiA9IHN0YXRpY19jYXN0PEV2
YXNfRXZlbnRfTW91c2VfVXAqPihldmVudEluZm8pOwotICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEq
IHNkID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEpOwotICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGkpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOKHNkLT5hcGktPm1vdXNlX3VwKTsKLSAgICBzZC0+YXBpLT5tb3VzZV91cChzZCwgZXYp
OworICAgIEV2YXNfRXZlbnRfTW91c2VfVXAqIHVwRXZlbnQgPSBzdGF0aWNfY2FzdDxFdmFzX0V2
ZW50X01vdXNlX1VwKj4oZXZlbnRJbmZvKTsKKyAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzbWFy
dERhdGEgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZGF0YSk7CisgICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRhLT5hcGkpOworICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+YXBpLT5tb3VzZV91cCk7CisgICAgc21hcnREYXRh
LT5hcGktPm1vdXNlX3VwKHNtYXJ0RGF0YSwgdXBFdmVudCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9l
d2tfdmlld19vbl9tb3VzZV9tb3ZlKHZvaWQqIGRhdGEsIEV2YXMqIGV2ZW50VHlwZSwgRXZhc19P
YmplY3QqIGNhbGxiYWNrLCB2b2lkKiBldmVudEluZm8pCiB7Ci0gICAgRXZhc19FdmVudF9Nb3Vz
ZV9Nb3ZlKiBldiA9IHN0YXRpY19jYXN0PEV2YXNfRXZlbnRfTW91c2VfTW92ZSo+KGV2ZW50SW5m
byk7Ci0gICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19T
bWFydF9EYXRhKj4oZGF0YSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFw
aSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFwaS0+bW91c2VfbW92ZSk7
Ci0gICAgc2QtPmFwaS0+bW91c2VfbW92ZShzZCwgZXYpOworICAgIEV2YXNfRXZlbnRfTW91c2Vf
TW92ZSogbW92ZUV2ZW50ID0gc3RhdGljX2Nhc3Q8RXZhc19FdmVudF9Nb3VzZV9Nb3ZlKj4oZXZl
bnRJbmZvKTsKKyAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEgPSBzdGF0aWNfY2Fz
dDxFd2tfVmlld19TbWFydF9EYXRhKj4oZGF0YSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk4oc21hcnREYXRhLT5hcGkpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNt
YXJ0RGF0YS0+YXBpLT5tb3VzZV9tb3ZlKTsKKyAgICBzbWFydERhdGEtPmFwaS0+bW91c2VfbW92
ZShzbWFydERhdGEsIG1vdmVFdmVudCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9ld2tfdmlld19vbl9r
ZXlfZG93bih2b2lkKiBkYXRhLCBFdmFzKiBldmVudFR5cGUsIEV2YXNfT2JqZWN0KiBjYWxsYmFj
aywgdm9pZCogZXZlbnRJbmZvKQogewotICAgIEV2YXNfRXZlbnRfS2V5X0Rvd24qIGV2ID0gc3Rh
dGljX2Nhc3Q8RXZhc19FdmVudF9LZXlfRG93bio+KGV2ZW50SW5mbyk7Ci0gICAgRXdrX1ZpZXdf
U21hcnRfRGF0YSogc2QgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZGF0YSk7
Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFwaSk7Ci0gICAgRUlOQV9TQUZF
VFlfT05fTlVMTF9SRVRVUk4oc2QtPmFwaS0+a2V5X2Rvd24pOwotICAgIHNkLT5hcGktPmtleV9k
b3duKHNkLCBldik7CisgICAgRXZhc19FdmVudF9LZXlfRG93biogZG93bkV2ZW50ID0gc3RhdGlj
X2Nhc3Q8RXZhc19FdmVudF9LZXlfRG93bio+KGV2ZW50SW5mbyk7CisgICAgRXdrX1ZpZXdfU21h
cnRfRGF0YSogc21hcnREYXRhID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGRh
dGEpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+YXBpKTsKKyAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmFwaS0+a2V5X2Rvd24pOwor
ICAgIHNtYXJ0RGF0YS0+YXBpLT5rZXlfZG93bihzbWFydERhdGEsIGRvd25FdmVudCk7CiB9CiAK
IHN0YXRpYyB2b2lkIF9ld2tfdmlld19vbl9rZXlfdXAodm9pZCogZGF0YSwgRXZhcyogZXZlbnRU
eXBlLCBFdmFzX09iamVjdCogY2FsbGJhY2ssIHZvaWQqIGV2ZW50SW5mbykKIHsKLSAgICBFdmFz
X0V2ZW50X0tleV9VcCogZXYgPSBzdGF0aWNfY2FzdDxFdmFzX0V2ZW50X0tleV9VcCo+KGV2ZW50
SW5mbyk7Ci0gICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QgPSBzdGF0aWNfY2FzdDxFd2tfVmll
d19TbWFydF9EYXRhKj4oZGF0YSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2Qt
PmFwaSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFwaS0+a2V5X3VwKTsK
LSAgICBzZC0+YXBpLT5rZXlfdXAoc2QsIGV2KTsKKyAgICBFdmFzX0V2ZW50X0tleV9VcCogdXBF
dmVudCA9IHN0YXRpY19jYXN0PEV2YXNfRXZlbnRfS2V5X1VwKj4oZXZlbnRJbmZvKTsKKyAgICBF
d2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFy
dF9EYXRhKj4oZGF0YSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRh
LT5hcGkpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+YXBpLT5r
ZXlfdXApOworICAgIHNtYXJ0RGF0YS0+YXBpLT5rZXlfdXAoc21hcnREYXRhLCB1cEV2ZW50KTsK
IH0KIAogc3RhdGljIFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpGcmFtZT4gX2V3a192aWV3X2Nv
cmVfZnJhbWVfbmV3KEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSwgRXdrX1ZpZXdfUHJp
dmF0ZV9EYXRhKiBwcml2LCBXZWJDb3JlOjpIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVyKQog
ewotICAgIFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50RWZsKiBmbGMgPSBuZXcgV2ViQ29yZTo6
RnJhbWVMb2FkZXJDbGllbnRFZmwoc21hcnREYXRhLT5zZWxmKTsKLSAgICBpZiAoIWZsYykgewor
ICAgIFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50RWZsKiBmcmFtZUxvYWRlckNsaWVudCA9IG5l
dyBXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEVmbChzbWFydERhdGEtPnNlbGYpOworICAgIGlm
ICghZnJhbWVMb2FkZXJDbGllbnQpIHsKICAgICAgICAgQ1JJVElDQUwoIkNvdWxkIG5vdCBjcmVh
dGUgZnJhbWUgbG9hZGVyIGNsaWVudC4iKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAg
IGZsYy0+c2V0Q3VzdG9tVXNlckFnZW50KFN0cmluZzo6ZnJvbVVURjgocHJpdi0+c2V0dGluZ3Mu
dXNlcl9hZ2VudCkpOworICAgIGZyYW1lTG9hZGVyQ2xpZW50LT5zZXRDdXN0b21Vc2VyQWdlbnQo
U3RyaW5nOjpmcm9tVVRGOChwcml2LT5zZXR0aW5ncy51c2VyQWdlbnQpKTsKIAotICAgIHJldHVy
biBXZWJDb3JlOjpGcmFtZTo6Y3JlYXRlKHByaXYtPnBhZ2UsIG93bmVyLCBmbGMpOworICAgIHJl
dHVybiBXZWJDb3JlOjpGcmFtZTo6Y3JlYXRlKHByaXYtPnBhZ2UsIG93bmVyLCBmcmFtZUxvYWRl
ckNsaWVudCk7CiB9CiAKIHN0YXRpYyBFdmFzX1NtYXJ0X0NsYXNzIF9wYXJlbnRfc2MgPSBFVkFT
X1NNQVJUX0NMQVNTX0lOSVRfTlVMTDsKQEAgLTU1Nyw3ICs1NTcsNyBAQCBzdGF0aWMgRXdrX1Zp
ZXdfUHJpdmF0ZV9EYXRhKiBfZXdrX3ZpZXdfcHJpdl9uZXcoRXdrX1ZpZXdfU21hcnRfRGF0YSog
c21hcnREYXRhKQogewogICAgIEV3a19WaWV3X1ByaXZhdGVfRGF0YSogcHJpdiA9CiAgICAgICAg
IHN0YXRpY19jYXN0PEV3a19WaWV3X1ByaXZhdGVfRGF0YSo+KGNhbGxvYygxLCBzaXplb2YoRXdr
X1ZpZXdfUHJpdmF0ZV9EYXRhKSkpOwotICAgIEF0b21pY1N0cmluZyBzOworICAgIEF0b21pY1N0
cmluZyBzdHJpbmc7CiAgICAgV2ViQ29yZTo6S1VSTCB1cmw7CiAKICAgICBpZiAoIXByaXYpIHsK
QEAgLTU4MCw5NCArNTgwLDk0IEBAIHN0YXRpYyBFd2tfVmlld19Qcml2YXRlX0RhdGEqIF9ld2tf
dmlld19wcml2X25ldyhFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEpCiAgICAgICAgIGdv
dG8gZXJyb3JfcGFnZTsKICAgICB9CiAKLSAgICBwcml2LT5wYWdlX3NldHRpbmdzID0gcHJpdi0+
cGFnZS0+c2V0dGluZ3MoKTsKLSAgICBpZiAoIXByaXYtPnBhZ2Vfc2V0dGluZ3MpIHsKKyAgICBw
cml2LT5wYWdlU2V0dGluZ3MgPSBwcml2LT5wYWdlLT5zZXR0aW5ncygpOworICAgIGlmICghcHJp
di0+cGFnZVNldHRpbmdzKSB7CiAgICAgICAgIENSSVRJQ0FMKCJDb3VsZCBub3QgZ2V0IHBhZ2Ug
c2V0dGluZ3MuIik7CiAgICAgICAgIGdvdG8gZXJyb3Jfc2V0dGluZ3M7CiAgICAgfQogCi0gICAg
cHJpdi0+dmlld3BvcnRfYXJndW1lbnRzLndpZHRoID0gV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVu
dHM6OlZhbHVlQXV0bzsKLSAgICBwcml2LT52aWV3cG9ydF9hcmd1bWVudHMuaGVpZ2h0ID0gV2Vi
Q29yZTo6Vmlld3BvcnRBcmd1bWVudHM6OlZhbHVlQXV0bzsKLSAgICBwcml2LT52aWV3cG9ydF9h
cmd1bWVudHMuaW5pdGlhbFNjYWxlID0gV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHM6OlZhbHVl
QXV0bzsKLSAgICBwcml2LT52aWV3cG9ydF9hcmd1bWVudHMubWluaW11bVNjYWxlID0gV2ViQ29y
ZTo6Vmlld3BvcnRBcmd1bWVudHM6OlZhbHVlQXV0bzsKLSAgICBwcml2LT52aWV3cG9ydF9hcmd1
bWVudHMubWF4aW11bVNjYWxlID0gV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHM6OlZhbHVlQXV0
bzsKLSAgICBwcml2LT52aWV3cG9ydF9hcmd1bWVudHMudGFyZ2V0RGVuc2l0eURwaSA9IFdlYkNv
cmU6OlZpZXdwb3J0QXJndW1lbnRzOjpWYWx1ZUF1dG87Ci0gICAgcHJpdi0+dmlld3BvcnRfYXJn
dW1lbnRzLnVzZXJTY2FsYWJsZSA9IEVJTkFfVFJVRTsKLQotICAgIHByaXYtPnBhZ2Vfc2V0dGlu
Z3MtPnNldExvYWRzSW1hZ2VzQXV0b21hdGljYWxseSh0cnVlKTsKLSAgICBwcml2LT5wYWdlX3Nl
dHRpbmdzLT5zZXREZWZhdWx0Rml4ZWRGb250U2l6ZSgxMCk7Ci0gICAgcHJpdi0+cGFnZV9zZXR0
aW5ncy0+c2V0RGVmYXVsdEZvbnRTaXplKDEzKTsKLSAgICBwcml2LT5wYWdlX3NldHRpbmdzLT5z
ZXRTZXJpZkZvbnRGYW1pbHkoInNlcmlmIik7Ci0gICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0
Rml4ZWRGb250RmFtaWx5KCJtb25vdHlwZSIpOwotICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNl
dFNhbnNTZXJpZkZvbnRGYW1pbHkoInNhbnMiKTsKLSAgICBwcml2LT5wYWdlX3NldHRpbmdzLT5z
ZXRTdGFuZGFyZEZvbnRGYW1pbHkoInNhbnMiKTsKLSAgICBwcml2LT5wYWdlX3NldHRpbmdzLT5z
ZXRKYXZhU2NyaXB0RW5hYmxlZCh0cnVlKTsKLSAgICBwcml2LT5wYWdlX3NldHRpbmdzLT5zZXRQ
bHVnaW5zRW5hYmxlZCh0cnVlKTsKLSAgICBwcml2LT5wYWdlX3NldHRpbmdzLT5zZXRMb2NhbFN0
b3JhZ2VFbmFibGVkKHRydWUpOwotICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNldE9mZmxpbmVX
ZWJBcHBsaWNhdGlvbkNhY2hlRW5hYmxlZCh0cnVlKTsKLSAgICBwcml2LT5wYWdlX3NldHRpbmdz
LT5zZXRVc2VzUGFnZUNhY2hlKHRydWUpOwotICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNldFVz
ZXNFbmNvZGluZ0RldGVjdG9yKGZhbHNlKTsKLQotICAgIHVybCA9IHByaXYtPnBhZ2Vfc2V0dGlu
Z3MtPnVzZXJTdHlsZVNoZWV0TG9jYXRpb24oKTsKLSAgICBwcml2LT5zZXR0aW5ncy51c2VyX3N0
eWxlc2hlZXQgPSBlaW5hX3N0cmluZ3NoYXJlX2FkZCh1cmwuc3RyaW5nKCkudXRmOCgpLmRhdGEo
KSk7Ci0KLSAgICBwcml2LT5zZXR0aW5ncy5lbmNvZGluZ19kZWZhdWx0ID0gZWluYV9zdHJpbmdz
aGFyZV9hZGQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwcml2
LT5wYWdlX3NldHRpbmdzLT5kZWZhdWx0VGV4dEVuY29kaW5nTmFtZSgpLnV0ZjgoKS5kYXRhKCkp
OwotICAgIHByaXYtPnNldHRpbmdzLmVuY29kaW5nX2N1c3RvbSA9IDA7Ci0KLSAgICBzID0gcHJp
di0+cGFnZV9zZXR0aW5ncy0+bG9jYWxTdG9yYWdlRGF0YWJhc2VQYXRoKCk7Ci0gICAgcHJpdi0+
c2V0dGluZ3MubG9jYWxfc3RvcmFnZV9kYXRhYmFzZV9wYXRoID0gZWluYV9zdHJpbmdzaGFyZV9h
ZGQocy5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLQotICAgIHByaXYtPnNldHRpbmdzLmZvbnRf
bWluaW11bV9zaXplID0gcHJpdi0+cGFnZV9zZXR0aW5ncy0+bWluaW11bUZvbnRTaXplKCk7Ci0g
ICAgcHJpdi0+c2V0dGluZ3MuZm9udF9taW5pbXVtX2xvZ2ljYWxfc2l6ZSA9IHByaXYtPnBhZ2Vf
c2V0dGluZ3MtPm1pbmltdW1Mb2dpY2FsRm9udFNpemUoKTsKLSAgICBwcml2LT5zZXR0aW5ncy5m
b250X2RlZmF1bHRfc2l6ZSA9IHByaXYtPnBhZ2Vfc2V0dGluZ3MtPmRlZmF1bHRGb250U2l6ZSgp
OwotICAgIHByaXYtPnNldHRpbmdzLmZvbnRfbW9ub3NwYWNlX3NpemUgPSBwcml2LT5wYWdlX3Nl
dHRpbmdzLT5kZWZhdWx0Rml4ZWRGb250U2l6ZSgpOwotCi0gICAgcyA9IHByaXYtPnBhZ2Vfc2V0
dGluZ3MtPnN0YW5kYXJkRm9udEZhbWlseSgpOwotICAgIHByaXYtPnNldHRpbmdzLmZvbnRfc3Rh
bmRhcmQgPSBlaW5hX3N0cmluZ3NoYXJlX2FkZChzLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwot
ICAgIHMgPSBwcml2LT5wYWdlX3NldHRpbmdzLT5jdXJzaXZlRm9udEZhbWlseSgpOwotICAgIHBy
aXYtPnNldHRpbmdzLmZvbnRfY3Vyc2l2ZSA9IGVpbmFfc3RyaW5nc2hhcmVfYWRkKHMuc3RyaW5n
KCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgcyA9IHByaXYtPnBhZ2Vfc2V0dGluZ3MtPmZpeGVkRm9u
dEZhbWlseSgpOwotICAgIHByaXYtPnNldHRpbmdzLmZvbnRfbW9ub3NwYWNlID0gZWluYV9zdHJp
bmdzaGFyZV9hZGQocy5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLSAgICBzID0gcHJpdi0+cGFn
ZV9zZXR0aW5ncy0+ZmFudGFzeUZvbnRGYW1pbHkoKTsKLSAgICBwcml2LT5zZXR0aW5ncy5mb250
X2ZhbnRhc3kgPSBlaW5hX3N0cmluZ3NoYXJlX2FkZChzLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkp
OwotICAgIHMgPSBwcml2LT5wYWdlX3NldHRpbmdzLT5zZXJpZkZvbnRGYW1pbHkoKTsKLSAgICBw
cml2LT5zZXR0aW5ncy5mb250X3NlcmlmID0gZWluYV9zdHJpbmdzaGFyZV9hZGQocy5zdHJpbmco
KS51dGY4KCkuZGF0YSgpKTsKLSAgICBzID0gcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2Fuc1Nlcmlm
Rm9udEZhbWlseSgpOwotICAgIHByaXYtPnNldHRpbmdzLmZvbnRfc2Fuc19zZXJpZiA9IGVpbmFf
c3RyaW5nc2hhcmVfYWRkKHMuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0KLSAgICBwcml2LT5z
ZXR0aW5ncy5hdXRvX2xvYWRfaW1hZ2VzID0gcHJpdi0+cGFnZV9zZXR0aW5ncy0+bG9hZHNJbWFn
ZXNBdXRvbWF0aWNhbGx5KCk7Ci0gICAgcHJpdi0+c2V0dGluZ3MuYXV0b19zaHJpbmtfaW1hZ2Vz
ID0gcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2hyaW5rc1N0YW5kYWxvbmVJbWFnZXNUb0ZpdCgpOwot
ICAgIHByaXYtPnNldHRpbmdzLmVuYWJsZV9hdXRvX3Jlc2l6ZV93aW5kb3cgPSBFSU5BX1RSVUU7
Ci0gICAgcHJpdi0+c2V0dGluZ3MuZW5hYmxlX2RldmVsb3Blcl9leHRyYXMgPSBwcml2LT5wYWdl
X3NldHRpbmdzLT5kZXZlbG9wZXJFeHRyYXNFbmFibGVkKCk7Ci0gICAgcHJpdi0+c2V0dGluZ3Mu
ZW5hYmxlX3NjcmlwdHMgPSBwcml2LT5wYWdlX3NldHRpbmdzLT5pc0phdmFTY3JpcHRFbmFibGVk
KCk7Ci0gICAgcHJpdi0+c2V0dGluZ3MuZW5hYmxlX3BsdWdpbnMgPSBwcml2LT5wYWdlX3NldHRp
bmdzLT5hcmVQbHVnaW5zRW5hYmxlZCgpOwotICAgIHByaXYtPnNldHRpbmdzLmVuYWJsZV9mcmFt
ZV9mbGF0dGVuaW5nID0gcHJpdi0+cGFnZV9zZXR0aW5ncy0+ZnJhbWVGbGF0dGVuaW5nRW5hYmxl
ZCgpOwotICAgIHByaXYtPnNldHRpbmdzLnNjcmlwdHNfd2luZG93X29wZW4gPSBwcml2LT5wYWdl
X3NldHRpbmdzLT5qYXZhU2NyaXB0Q2FuT3BlbldpbmRvd3NBdXRvbWF0aWNhbGx5KCk7Ci0gICAg
cHJpdi0+c2V0dGluZ3Muc2NyaXB0c19jYW5fY2xvc2Vfd2luZG93cyA9IHByaXYtPnBhZ2Vfc2V0
dGluZ3MtPmFsbG93U2NyaXB0c1RvQ2xvc2VXaW5kb3dzKCk7Ci0gICAgcHJpdi0+c2V0dGluZ3Mu
cmVzaXphYmxlX3RleHRhcmVhcyA9IHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnRleHRBcmVhc0FyZVJl
c2l6YWJsZSgpOwotICAgIHByaXYtPnNldHRpbmdzLnByaXZhdGVfYnJvd3NpbmcgPSBwcml2LT5w
YWdlX3NldHRpbmdzLT5wcml2YXRlQnJvd3NpbmdFbmFibGVkKCk7Ci0gICAgcHJpdi0+c2V0dGlu
Z3MuY2FyZXRfYnJvd3NpbmcgPSBwcml2LT5wYWdlX3NldHRpbmdzLT5jYXJldEJyb3dzaW5nRW5h
YmxlZCgpOwotICAgIHByaXYtPnNldHRpbmdzLnNwYXRpYWxfbmF2aWdhdGlvbiA9IHByaXYtPnBh
Z2Vfc2V0dGluZ3MtPmlzU3BhdGlhbE5hdmlnYXRpb25FbmFibGVkKCk7Ci0gICAgcHJpdi0+c2V0
dGluZ3MubG9jYWxfc3RvcmFnZSA9IHByaXYtPnBhZ2Vfc2V0dGluZ3MtPmxvY2FsU3RvcmFnZUVu
YWJsZWQoKTsKLSAgICBwcml2LT5zZXR0aW5ncy5vZmZsaW5lX2FwcF9jYWNoZSA9IHRydWU7IC8v
IFhYWCBubyBmdW5jdGlvbiB0byByZWFkIHNldHRpbmc7IHRoaXMga2VlcHMgdGhlIG9yaWdpbmFs
IHNldHRpbmcKLSAgICBwcml2LT5zZXR0aW5ncy5wYWdlX2NhY2hlID0gcHJpdi0+cGFnZV9zZXR0
aW5ncy0+dXNlc1BhZ2VDYWNoZSgpOwotICAgIHByaXYtPnNldHRpbmdzLmVuY29kaW5nX2RldGVj
dG9yID0gcHJpdi0+cGFnZV9zZXR0aW5ncy0+dXNlc0VuY29kaW5nRGV0ZWN0b3IoKTsKLQotICAg
IHByaXYtPnNldHRpbmdzLnVzZXJfYWdlbnQgPSBld2tfc2V0dGluZ3NfZGVmYXVsdF91c2VyX2Fn
ZW50X2dldCgpOworICAgIHByaXYtPnZpZXdwb3J0QXJndW1lbnRzLndpZHRoID0gV2ViQ29yZTo6
Vmlld3BvcnRBcmd1bWVudHM6OlZhbHVlQXV0bzsKKyAgICBwcml2LT52aWV3cG9ydEFyZ3VtZW50
cy5oZWlnaHQgPSBXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50czo6VmFsdWVBdXRvOworICAgIHBy
aXYtPnZpZXdwb3J0QXJndW1lbnRzLmluaXRpYWxTY2FsZSA9IFdlYkNvcmU6OlZpZXdwb3J0QXJn
dW1lbnRzOjpWYWx1ZUF1dG87CisgICAgcHJpdi0+dmlld3BvcnRBcmd1bWVudHMubWluaW11bVNj
YWxlID0gV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHM6OlZhbHVlQXV0bzsKKyAgICBwcml2LT52
aWV3cG9ydEFyZ3VtZW50cy5tYXhpbXVtU2NhbGUgPSBXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50
czo6VmFsdWVBdXRvOworICAgIHByaXYtPnZpZXdwb3J0QXJndW1lbnRzLnRhcmdldERlbnNpdHlE
cGkgPSBXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50czo6VmFsdWVBdXRvOworICAgIHByaXYtPnZp
ZXdwb3J0QXJndW1lbnRzLnVzZXJTY2FsYWJsZSA9IEVJTkFfVFJVRTsKKworICAgIHByaXYtPnBh
Z2VTZXR0aW5ncy0+c2V0TG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5KHRydWUpOworICAgIHByaXYt
PnBhZ2VTZXR0aW5ncy0+c2V0RGVmYXVsdEZpeGVkRm9udFNpemUoMTApOworICAgIHByaXYtPnBh
Z2VTZXR0aW5ncy0+c2V0RGVmYXVsdEZvbnRTaXplKDEzKTsKKyAgICBwcml2LT5wYWdlU2V0dGlu
Z3MtPnNldFNlcmlmRm9udEZhbWlseSgic2VyaWYiKTsKKyAgICBwcml2LT5wYWdlU2V0dGluZ3Mt
PnNldEZpeGVkRm9udEZhbWlseSgibW9ub3R5cGUiKTsKKyAgICBwcml2LT5wYWdlU2V0dGluZ3Mt
PnNldFNhbnNTZXJpZkZvbnRGYW1pbHkoInNhbnMiKTsKKyAgICBwcml2LT5wYWdlU2V0dGluZ3Mt
PnNldFN0YW5kYXJkRm9udEZhbWlseSgic2FucyIpOworICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+
c2V0SmF2YVNjcmlwdEVuYWJsZWQodHJ1ZSk7CisgICAgcHJpdi0+cGFnZVNldHRpbmdzLT5zZXRQ
bHVnaW5zRW5hYmxlZCh0cnVlKTsKKyAgICBwcml2LT5wYWdlU2V0dGluZ3MtPnNldExvY2FsU3Rv
cmFnZUVuYWJsZWQodHJ1ZSk7CisgICAgcHJpdi0+cGFnZVNldHRpbmdzLT5zZXRPZmZsaW5lV2Vi
QXBwbGljYXRpb25DYWNoZUVuYWJsZWQodHJ1ZSk7CisgICAgcHJpdi0+cGFnZVNldHRpbmdzLT5z
ZXRVc2VzUGFnZUNhY2hlKHRydWUpOworICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0VXNlc0Vu
Y29kaW5nRGV0ZWN0b3IoZmFsc2UpOworCisgICAgdXJsID0gcHJpdi0+cGFnZVNldHRpbmdzLT51
c2VyU3R5bGVTaGVldExvY2F0aW9uKCk7CisgICAgcHJpdi0+c2V0dGluZ3MudXNlclN0eWxlc2hl
ZXQgPSBlaW5hX3N0cmluZ3NoYXJlX2FkZCh1cmwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisK
KyAgICBwcml2LT5zZXR0aW5ncy5lbmNvZGluZ0RlZmF1bHQgPSBlaW5hX3N0cmluZ3NoYXJlX2Fk
ZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHByaXYtPnBhZ2VT
ZXR0aW5ncy0+ZGVmYXVsdFRleHRFbmNvZGluZ05hbWUoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBw
cml2LT5zZXR0aW5ncy5lbmNvZGluZ0N1c3RvbSA9IDA7CisKKyAgICBzdHJpbmcgPSBwcml2LT5w
YWdlU2V0dGluZ3MtPmxvY2FsU3RvcmFnZURhdGFiYXNlUGF0aCgpOworICAgIHByaXYtPnNldHRp
bmdzLmxvY2FsU3RvcmFnZURhdGFiYXNlUGF0aCA9IGVpbmFfc3RyaW5nc2hhcmVfYWRkKHN0cmlu
Zy5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKworICAgIHByaXYtPnNldHRpbmdzLmZvbnRNaW5p
bXVtU2l6ZSA9IHByaXYtPnBhZ2VTZXR0aW5ncy0+bWluaW11bUZvbnRTaXplKCk7CisgICAgcHJp
di0+c2V0dGluZ3MuZm9udE1pbmltdW1Mb2dpY2FsU2l6ZSA9IHByaXYtPnBhZ2VTZXR0aW5ncy0+
bWluaW11bUxvZ2ljYWxGb250U2l6ZSgpOworICAgIHByaXYtPnNldHRpbmdzLmZvbnREZWZhdWx0
U2l6ZSA9IHByaXYtPnBhZ2VTZXR0aW5ncy0+ZGVmYXVsdEZvbnRTaXplKCk7CisgICAgcHJpdi0+
c2V0dGluZ3MuZm9udE1vbm9zcGFjZVNpemUgPSBwcml2LT5wYWdlU2V0dGluZ3MtPmRlZmF1bHRG
aXhlZEZvbnRTaXplKCk7CisKKyAgICBzdHJpbmcgPSBwcml2LT5wYWdlU2V0dGluZ3MtPnN0YW5k
YXJkRm9udEZhbWlseSgpOworICAgIHByaXYtPnNldHRpbmdzLmZvbnRTdGFuZGFyZCA9IGVpbmFf
c3RyaW5nc2hhcmVfYWRkKHN0cmluZy5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBzdHJp
bmcgPSBwcml2LT5wYWdlU2V0dGluZ3MtPmN1cnNpdmVGb250RmFtaWx5KCk7CisgICAgcHJpdi0+
c2V0dGluZ3MuZm9udEN1cnNpdmUgPSBlaW5hX3N0cmluZ3NoYXJlX2FkZChzdHJpbmcuc3RyaW5n
KCkudXRmOCgpLmRhdGEoKSk7CisgICAgc3RyaW5nID0gcHJpdi0+cGFnZVNldHRpbmdzLT5maXhl
ZEZvbnRGYW1pbHkoKTsKKyAgICBwcml2LT5zZXR0aW5ncy5mb250TW9ub3NwYWNlID0gZWluYV9z
dHJpbmdzaGFyZV9hZGQoc3RyaW5nLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgIHN0cmlu
ZyA9IHByaXYtPnBhZ2VTZXR0aW5ncy0+ZmFudGFzeUZvbnRGYW1pbHkoKTsKKyAgICBwcml2LT5z
ZXR0aW5ncy5mb250RmFudGFzeSA9IGVpbmFfc3RyaW5nc2hhcmVfYWRkKHN0cmluZy5zdHJpbmco
KS51dGY4KCkuZGF0YSgpKTsKKyAgICBzdHJpbmcgPSBwcml2LT5wYWdlU2V0dGluZ3MtPnNlcmlm
Rm9udEZhbWlseSgpOworICAgIHByaXYtPnNldHRpbmdzLmZvbnRTZXJpZiA9IGVpbmFfc3RyaW5n
c2hhcmVfYWRkKHN0cmluZy5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBzdHJpbmcgPSBw
cml2LT5wYWdlU2V0dGluZ3MtPnNhbnNTZXJpZkZvbnRGYW1pbHkoKTsKKyAgICBwcml2LT5zZXR0
aW5ncy5mb250U2Fuc1NlcmlmID0gZWluYV9zdHJpbmdzaGFyZV9hZGQoc3RyaW5nLnN0cmluZygp
LnV0ZjgoKS5kYXRhKCkpOworCisgICAgcHJpdi0+c2V0dGluZ3MuYXV0b0xvYWRJbWFnZXMgPSBw
cml2LT5wYWdlU2V0dGluZ3MtPmxvYWRzSW1hZ2VzQXV0b21hdGljYWxseSgpOworICAgIHByaXYt
PnNldHRpbmdzLmF1dG9TaHJpbmtJbWFnZXMgPSBwcml2LT5wYWdlU2V0dGluZ3MtPnNocmlua3NT
dGFuZGFsb25lSW1hZ2VzVG9GaXQoKTsKKyAgICBwcml2LT5zZXR0aW5ncy5lbmFibGVBdXRvUmVz
aXplV2luZG93ID0gRUlOQV9UUlVFOworICAgIHByaXYtPnNldHRpbmdzLmVuYWJsZURldmVsb3Bl
ckV4dHJhcyA9IHByaXYtPnBhZ2VTZXR0aW5ncy0+ZGV2ZWxvcGVyRXh0cmFzRW5hYmxlZCgpOwor
ICAgIHByaXYtPnNldHRpbmdzLmVuYWJsZVNjcmlwdHMgPSBwcml2LT5wYWdlU2V0dGluZ3MtPmlz
SmF2YVNjcmlwdEVuYWJsZWQoKTsKKyAgICBwcml2LT5zZXR0aW5ncy5lbmFibGVQbHVnaW5zID0g
cHJpdi0+cGFnZVNldHRpbmdzLT5hcmVQbHVnaW5zRW5hYmxlZCgpOworICAgIHByaXYtPnNldHRp
bmdzLmVuYWJsZUZyYW1lRmxhdHRlbmluZyA9IHByaXYtPnBhZ2VTZXR0aW5ncy0+ZnJhbWVGbGF0
dGVuaW5nRW5hYmxlZCgpOworICAgIHByaXYtPnNldHRpbmdzLnNjcmlwdHNXaW5kb3dPcGVuID0g
cHJpdi0+cGFnZVNldHRpbmdzLT5qYXZhU2NyaXB0Q2FuT3BlbldpbmRvd3NBdXRvbWF0aWNhbGx5
KCk7CisgICAgcHJpdi0+c2V0dGluZ3Muc2NyaXB0c0NhbkNsb3NlV2luZG93cyA9IHByaXYtPnBh
Z2VTZXR0aW5ncy0+YWxsb3dTY3JpcHRzVG9DbG9zZVdpbmRvd3MoKTsKKyAgICBwcml2LT5zZXR0
aW5ncy5yZXNpemFibGVUZXh0YXJlYXMgPSBwcml2LT5wYWdlU2V0dGluZ3MtPnRleHRBcmVhc0Fy
ZVJlc2l6YWJsZSgpOworICAgIHByaXYtPnNldHRpbmdzLnByaXZhdGVCcm93c2luZyA9IHByaXYt
PnBhZ2VTZXR0aW5ncy0+cHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCgpOworICAgIHByaXYtPnNldHRp
bmdzLmNhcmV0QnJvd3NpbmcgPSBwcml2LT5wYWdlU2V0dGluZ3MtPmNhcmV0QnJvd3NpbmdFbmFi
bGVkKCk7CisgICAgcHJpdi0+c2V0dGluZ3Muc3BhdGlhbE5hdmlnYXRpb24gPSBwcml2LT5wYWdl
U2V0dGluZ3MtPmlzU3BhdGlhbE5hdmlnYXRpb25FbmFibGVkKCk7CisgICAgcHJpdi0+c2V0dGlu
Z3MubG9jYWxTdG9yYWdlID0gcHJpdi0+cGFnZVNldHRpbmdzLT5sb2NhbFN0b3JhZ2VFbmFibGVk
KCk7CisgICAgcHJpdi0+c2V0dGluZ3Mub2ZmbGluZUFwcENhY2hlID0gdHJ1ZTsgLy8gWFhYIG5v
IGZ1bmN0aW9uIHRvIHJlYWQgc2V0dGluZzsgdGhpcyBrZWVwcyB0aGUgb3JpZ2luYWwgc2V0dGlu
ZworICAgIHByaXYtPnNldHRpbmdzLnBhZ2VDYWNoZSA9IHByaXYtPnBhZ2VTZXR0aW5ncy0+dXNl
c1BhZ2VDYWNoZSgpOworICAgIHByaXYtPnNldHRpbmdzLmVuY29kaW5nRGV0ZWN0b3IgPSBwcml2
LT5wYWdlU2V0dGluZ3MtPnVzZXNFbmNvZGluZ0RldGVjdG9yKCk7CisKKyAgICBwcml2LT5zZXR0
aW5ncy51c2VyQWdlbnQgPSBld2tfc2V0dGluZ3NfZGVmYXVsdF91c2VyX2FnZW50X2dldCgpOwog
CiAgICAgLy8gU2luY2UgdGhlcmUncyBubyBzY2FsZSBzZXBhcmF0ZWQgZnJvbSB6b29taW5nIGlu
IHdlYmtpdC1lZmwsIHRoaXMgZnVuY3Rpb25hbGl0eSBvZgogICAgIC8vIHZpZXdwb3J0IG1ldGEg
dGFnIGlzIGltcGxlbWVudGVkIHVzaW5nIHpvb20uIFdoZW4gc2NhbGUgem9vbSBpcyBzdXBwb3J0
ZWQgYnkgd2Via2l0LWVmbCwKICAgICAvLyB0aGlzIGZ1bmN0aW9uYWxpdHkgd2lsbCBiZSBtb2Rp
ZmllZCBieSB0aGUgc2NhbGUgem9vbSBwYXRjaC4KLSAgICBwcml2LT5zZXR0aW5ncy56b29tX3Jh
bmdlLm1pbl9zY2FsZSA9IFpPT01fTUlOOwotICAgIHByaXYtPnNldHRpbmdzLnpvb21fcmFuZ2Uu
bWF4X3NjYWxlID0gWk9PTV9NQVg7Ci0gICAgcHJpdi0+c2V0dGluZ3Muem9vbV9yYW5nZS51c2Vy
X3NjYWxhYmxlID0gRUlOQV9UUlVFOwotICAgIHByaXYtPnNldHRpbmdzLmRldmljZV9waXhlbF9y
YXRpbyA9IERFVklDRV9QSVhFTF9SQVRJTzsKKyAgICBwcml2LT5zZXR0aW5ncy56b29tUmFuZ2Uu
bWluU2NhbGUgPSBaT09NX01JTjsKKyAgICBwcml2LT5zZXR0aW5ncy56b29tUmFuZ2UubWF4U2Nh
bGUgPSBaT09NX01BWDsKKyAgICBwcml2LT5zZXR0aW5ncy56b29tUmFuZ2UudXNlclNjYWxhYmxl
ID0gRUlOQV9UUlVFOworICAgIHByaXYtPnNldHRpbmdzLmRldmljZVBpeGVsUmF0aW8gPSBERVZJ
Q0VfUElYRUxfUkFUSU87CiAKLSAgICBwcml2LT5zZXR0aW5ncy5kb21fdGltZXJfaW50ZXJ2YWwg
PSBwcml2LT5wYWdlX3NldHRpbmdzLT5kZWZhdWx0TWluRE9NVGltZXJJbnRlcnZhbCgpOworICAg
IHByaXYtPnNldHRpbmdzLmRvbVRpbWVySW50ZXJ2YWwgPSBwcml2LT5wYWdlU2V0dGluZ3MtPmRl
ZmF1bHRNaW5ET01UaW1lckludGVydmFsKCk7CiAKLSAgICBwcml2LT5tYWluX2ZyYW1lID0gX2V3
a192aWV3X2NvcmVfZnJhbWVfbmV3KHNtYXJ0RGF0YSwgcHJpdiwgMCkuZ2V0KCk7Ci0gICAgaWYg
KCFwcml2LT5tYWluX2ZyYW1lKSB7CisgICAgcHJpdi0+bWFpbkZyYW1lID0gX2V3a192aWV3X2Nv
cmVfZnJhbWVfbmV3KHNtYXJ0RGF0YSwgcHJpdiwgMCkuZ2V0KCk7CisgICAgaWYgKCFwcml2LT5t
YWluRnJhbWUpIHsKICAgICAgICAgQ1JJVElDQUwoIkNvdWxkIG5vdCBjcmVhdGUgbWFpbiBmcmFt
ZS4iKTsKICAgICAgICAgZ290byBlcnJvcl9tYWluX2ZyYW1lOwogICAgIH0KQEAgLTcwMCwyMCAr
NzAwLDIwIEBAIHN0YXRpYyB2b2lkIF9ld2tfdmlld19wcml2X2RlbChFd2tfVmlld19Qcml2YXRl
X0RhdGEqIHByaXYpCiAgICAgZnJlZShwcml2LT5yZXBhaW50cy5hcnJheSk7CiAgICAgZnJlZShw
cml2LT5zY3JvbGxzLmFycmF5KTsKIAotICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVsKHByaXYtPnNl
dHRpbmdzLnVzZXJfYWdlbnQpOwotICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVsKHByaXYtPnNldHRp
bmdzLnVzZXJfc3R5bGVzaGVldCk7Ci0gICAgZWluYV9zdHJpbmdzaGFyZV9kZWwocHJpdi0+c2V0
dGluZ3MuZW5jb2RpbmdfZGVmYXVsdCk7Ci0gICAgZWluYV9zdHJpbmdzaGFyZV9kZWwocHJpdi0+
c2V0dGluZ3MuZW5jb2RpbmdfY3VzdG9tKTsKLSAgICBlaW5hX3N0cmluZ3NoYXJlX2RlbChwcml2
LT5zZXR0aW5ncy5mb250X3N0YW5kYXJkKTsKLSAgICBlaW5hX3N0cmluZ3NoYXJlX2RlbChwcml2
LT5zZXR0aW5ncy5mb250X2N1cnNpdmUpOwotICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVsKHByaXYt
PnNldHRpbmdzLmZvbnRfbW9ub3NwYWNlKTsKLSAgICBlaW5hX3N0cmluZ3NoYXJlX2RlbChwcml2
LT5zZXR0aW5ncy5mb250X2ZhbnRhc3kpOwotICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVsKHByaXYt
PnNldHRpbmdzLmZvbnRfc2VyaWYpOwotICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVsKHByaXYtPnNl
dHRpbmdzLmZvbnRfc2Fuc19zZXJpZik7Ci0gICAgZWluYV9zdHJpbmdzaGFyZV9kZWwocHJpdi0+
c2V0dGluZ3MubG9jYWxfc3RvcmFnZV9kYXRhYmFzZV9wYXRoKTsKLQotICAgIGlmIChwcml2LT5h
bmltYXRlZF96b29tLmFuaW1hdG9yKQotICAgICAgICBlY29yZV9hbmltYXRvcl9kZWwocHJpdi0+
YW5pbWF0ZWRfem9vbS5hbmltYXRvcik7CisgICAgZWluYV9zdHJpbmdzaGFyZV9kZWwocHJpdi0+
c2V0dGluZ3MudXNlckFnZW50KTsKKyAgICBlaW5hX3N0cmluZ3NoYXJlX2RlbChwcml2LT5zZXR0
aW5ncy51c2VyU3R5bGVzaGVldCk7CisgICAgZWluYV9zdHJpbmdzaGFyZV9kZWwocHJpdi0+c2V0
dGluZ3MuZW5jb2RpbmdEZWZhdWx0KTsKKyAgICBlaW5hX3N0cmluZ3NoYXJlX2RlbChwcml2LT5z
ZXR0aW5ncy5lbmNvZGluZ0N1c3RvbSk7CisgICAgZWluYV9zdHJpbmdzaGFyZV9kZWwocHJpdi0+
c2V0dGluZ3MuZm9udFN0YW5kYXJkKTsKKyAgICBlaW5hX3N0cmluZ3NoYXJlX2RlbChwcml2LT5z
ZXR0aW5ncy5mb250Q3Vyc2l2ZSk7CisgICAgZWluYV9zdHJpbmdzaGFyZV9kZWwocHJpdi0+c2V0
dGluZ3MuZm9udE1vbm9zcGFjZSk7CisgICAgZWluYV9zdHJpbmdzaGFyZV9kZWwocHJpdi0+c2V0
dGluZ3MuZm9udEZhbnRhc3kpOworICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVsKHByaXYtPnNldHRp
bmdzLmZvbnRTZXJpZik7CisgICAgZWluYV9zdHJpbmdzaGFyZV9kZWwocHJpdi0+c2V0dGluZ3Mu
Zm9udFNhbnNTZXJpZik7CisgICAgZWluYV9zdHJpbmdzaGFyZV9kZWwocHJpdi0+c2V0dGluZ3Mu
bG9jYWxTdG9yYWdlRGF0YWJhc2VQYXRoKTsKKworICAgIGlmIChwcml2LT5hbmltYXRlZFpvb20u
YW5pbWF0b3IpCisgICAgICAgIGVjb3JlX2FuaW1hdG9yX2RlbChwcml2LT5hbmltYXRlZFpvb20u
YW5pbWF0b3IpOwogCiAgICAgZXdrX2hpc3RvcnlfZnJlZShwcml2LT5oaXN0b3J5KTsKIApAQCAt
NzI0LDcyICs3MjQsNzIgQEAgc3RhdGljIHZvaWQgX2V3a192aWV3X3ByaXZfZGVsKEV3a19WaWV3
X1ByaXZhdGVfRGF0YSogcHJpdikKIHN0YXRpYyB2b2lkIF9ld2tfdmlld19zbWFydF9hZGQoRXZh
c19PYmplY3QqIGV3a1ZpZXcpCiB7CiAgICAgY29uc3QgRXZhc19TbWFydCogc21hcnQgPSBldmFz
X29iamVjdF9zbWFydF9zbWFydF9nZXQoZXdrVmlldyk7Ci0gICAgY29uc3QgRXZhc19TbWFydF9D
bGFzcyogc2MgPSBldmFzX3NtYXJ0X2NsYXNzX2dldChzbWFydCk7Ci0gICAgY29uc3QgRXdrX1Zp
ZXdfU21hcnRfQ2xhc3MqIGFwaSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgRXdrX1ZpZXdfU21h
cnRfQ2xhc3MqPihzYyk7CisgICAgY29uc3QgRXZhc19TbWFydF9DbGFzcyogc21hcnRDbGFzcyA9
IGV2YXNfc21hcnRfY2xhc3NfZ2V0KHNtYXJ0KTsKKyAgICBjb25zdCBFd2tfVmlld19TbWFydF9D
bGFzcyogYXBpID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBFd2tfVmlld19TbWFydF9DbGFzcyo+
KHNtYXJ0Q2xhc3MpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGFwaS0+YmFja2lu
Z19zdG9yZV9hZGQpOwotICAgIEVXS19WSUVXX1NEX0dFVChld2tWaWV3LCBzZCk7CisgICAgRVdL
X1ZJRVdfU0RfR0VUKGV3a1ZpZXcsIHNtYXJ0RGF0YSk7CiAKLSAgICBpZiAoIXNkKSB7Ci0gICAg
ICAgIHNkID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGNhbGxvYygxLCBzaXpl
b2YoRXdrX1ZpZXdfU21hcnRfRGF0YSkpKTsKLSAgICAgICAgaWYgKCFzZCkgeworICAgIGlmICgh
c21hcnREYXRhKSB7CisgICAgICAgIHNtYXJ0RGF0YSA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1Nt
YXJ0X0RhdGEqPihjYWxsb2MoMSwgc2l6ZW9mKEV3a19WaWV3X1NtYXJ0X0RhdGEpKSk7CisgICAg
ICAgIGlmICghc21hcnREYXRhKSB7CiAgICAgICAgICAgICBDUklUSUNBTCgiY291bGQgbm90IGFs
bG9jYXRlIEV3a19WaWV3X1NtYXJ0X0RhdGEiKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQotICAgICAgICBldmFzX29iamVjdF9zbWFydF9kYXRhX3NldChld2tWaWV3LCBzZCk7Cisg
ICAgICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2RhdGFfc2V0KGV3a1ZpZXcsIHNtYXJ0RGF0YSk7CiAg
ICAgfQogCi0gICAgc2QtPmJnX2NvbG9yLnIgPSAyNTU7Ci0gICAgc2QtPmJnX2NvbG9yLmcgPSAy
NTU7Ci0gICAgc2QtPmJnX2NvbG9yLmIgPSAyNTU7Ci0gICAgc2QtPmJnX2NvbG9yLmEgPSAyNTU7
CisgICAgc21hcnREYXRhLT5iZ19jb2xvci5yID0gMjU1OworICAgIHNtYXJ0RGF0YS0+YmdfY29s
b3IuZyA9IDI1NTsKKyAgICBzbWFydERhdGEtPmJnX2NvbG9yLmIgPSAyNTU7CisgICAgc21hcnRE
YXRhLT5iZ19jb2xvci5hID0gMjU1OwogCi0gICAgc2QtPnNlbGYgPSBld2tWaWV3OwotICAgIHNk
LT5fcHJpdiA9IF9ld2tfdmlld19wcml2X25ldyhzZCk7Ci0gICAgc2QtPmFwaSA9IGFwaTsKKyAg
ICBzbWFydERhdGEtPnNlbGYgPSBld2tWaWV3OworICAgIHNtYXJ0RGF0YS0+X3ByaXYgPSBfZXdr
X3ZpZXdfcHJpdl9uZXcoc21hcnREYXRhKTsKKyAgICBzbWFydERhdGEtPmFwaSA9IGFwaTsKIAog
ICAgIF9wYXJlbnRfc2MuYWRkKGV3a1ZpZXcpOwogCi0gICAgaWYgKCFzZC0+X3ByaXYpCisgICAg
aWYgKCFzbWFydERhdGEtPl9wcml2KQogICAgICAgICByZXR1cm47CiAKLSAgICBFV0tfVklFV19Q
UklWX0dFVChzZCwgcHJpdik7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVQoc21hcnREYXRhLCBwcml2
KTsKIAotICAgIHNkLT5iYWNraW5nX3N0b3JlID0gYXBpLT5iYWNraW5nX3N0b3JlX2FkZChzZCk7
Ci0gICAgaWYgKCFzZC0+YmFja2luZ19zdG9yZSkgeworICAgIHNtYXJ0RGF0YS0+YmFja2luZ19z
dG9yZSA9IGFwaS0+YmFja2luZ19zdG9yZV9hZGQoc21hcnREYXRhKTsKKyAgICBpZiAoIXNtYXJ0
RGF0YS0+YmFja2luZ19zdG9yZSkgewogICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgYmFj
a2luZyBzdG9yZSBvYmplY3QuIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBldmFz
X29iamVjdF9zbWFydF9tZW1iZXJfYWRkKHNkLT5iYWNraW5nX3N0b3JlLCBld2tWaWV3KTsKLSAg
ICBldmFzX29iamVjdF9zaG93KHNkLT5iYWNraW5nX3N0b3JlKTsKLSAgICBldmFzX29iamVjdF9w
YXNzX2V2ZW50c19zZXQoc2QtPmJhY2tpbmdfc3RvcmUsIEVJTkFfVFJVRSk7CisgICAgZXZhc19v
YmplY3Rfc21hcnRfbWVtYmVyX2FkZChzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUsIGV3a1ZpZXcp
OworICAgIGV2YXNfb2JqZWN0X3Nob3coc21hcnREYXRhLT5iYWNraW5nX3N0b3JlKTsKKyAgICBl
dmFzX29iamVjdF9wYXNzX2V2ZW50c19zZXQoc21hcnREYXRhLT5iYWNraW5nX3N0b3JlLCBFSU5B
X1RSVUUpOwogCi0gICAgc2QtPmV2ZW50c19yZWN0ID0gZXZhc19vYmplY3RfcmVjdGFuZ2xlX2Fk
ZChzZC0+YmFzZS5ldmFzKTsKLSAgICBldmFzX29iamVjdF9jb2xvcl9zZXQoc2QtPmV2ZW50c19y
ZWN0LCAwLCAwLCAwLCAwKTsKLSAgICBldmFzX29iamVjdF9zbWFydF9tZW1iZXJfYWRkKHNkLT5l
dmVudHNfcmVjdCwgZXdrVmlldyk7Ci0gICAgZXZhc19vYmplY3Rfc2hvdyhzZC0+ZXZlbnRzX3Jl
Y3QpOworICAgIHNtYXJ0RGF0YS0+ZXZlbnRzX3JlY3QgPSBldmFzX29iamVjdF9yZWN0YW5nbGVf
YWRkKHNtYXJ0RGF0YS0+YmFzZS5ldmFzKTsKKyAgICBldmFzX29iamVjdF9jb2xvcl9zZXQoc21h
cnREYXRhLT5ldmVudHNfcmVjdCwgMCwgMCwgMCwgMCk7CisgICAgZXZhc19vYmplY3Rfc21hcnRf
bWVtYmVyX2FkZChzbWFydERhdGEtPmV2ZW50c19yZWN0LCBld2tWaWV3KTsKKyAgICBldmFzX29i
amVjdF9zaG93KHNtYXJ0RGF0YS0+ZXZlbnRzX3JlY3QpOwogCi0gICAgc2QtPm1haW5fZnJhbWUg
PSBld2tfZnJhbWVfYWRkKHNkLT5iYXNlLmV2YXMpOwotICAgIGlmICghc2QtPm1haW5fZnJhbWUp
IHsKKyAgICBzbWFydERhdGEtPm1haW5fZnJhbWUgPSBld2tfZnJhbWVfYWRkKHNtYXJ0RGF0YS0+
YmFzZS5ldmFzKTsKKyAgICBpZiAoIXNtYXJ0RGF0YS0+bWFpbl9mcmFtZSkgewogICAgICAgICBF
UlIoIkNvdWxkIG5vdCBjcmVhdGUgbWFpbiBmcmFtZSBvYmplY3QuIik7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBpZiAoIWV3a19mcmFtZV9pbml0KHNkLT5tYWluX2ZyYW1lLCBld2tW
aWV3LCBwcml2LT5tYWluX2ZyYW1lKSkgeworICAgIGlmICghZXdrX2ZyYW1lX2luaXQoc21hcnRE
YXRhLT5tYWluX2ZyYW1lLCBld2tWaWV3LCBwcml2LT5tYWluRnJhbWUpKSB7CiAgICAgICAgIEVS
UigiQ291bGQgbm90IGluaXRpYWxpemUgbWFpbiBmcm1lIG9iamVjdC4iKTsKLSAgICAgICAgZXZh
c19vYmplY3RfZGVsKHNkLT5tYWluX2ZyYW1lKTsKLSAgICAgICAgc2QtPm1haW5fZnJhbWUgPSAw
OworICAgICAgICBldmFzX29iamVjdF9kZWwoc21hcnREYXRhLT5tYWluX2ZyYW1lKTsKKyAgICAg
ICAgc21hcnREYXRhLT5tYWluX2ZyYW1lID0gMDsKIAotICAgICAgICBkZWxldGUgcHJpdi0+bWFp
bl9mcmFtZTsKLSAgICAgICAgcHJpdi0+bWFpbl9mcmFtZSA9IDA7CisgICAgICAgIGRlbGV0ZSBw
cml2LT5tYWluRnJhbWU7CisgICAgICAgIHByaXYtPm1haW5GcmFtZSA9IDA7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBldmFzX29iamVjdF9uYW1lX3NldChzZC0+bWFpbl9mcmFtZSwg
IkVXS19GcmFtZTptYWluIik7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfbWVtYmVyX2FkZChzZC0+
bWFpbl9mcmFtZSwgZXdrVmlldyk7Ci0gICAgZXZhc19vYmplY3Rfc2hvdyhzZC0+bWFpbl9mcmFt
ZSk7CisgICAgZXZhc19vYmplY3RfbmFtZV9zZXQoc21hcnREYXRhLT5tYWluX2ZyYW1lLCAiRVdL
X0ZyYW1lOm1haW4iKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9tZW1iZXJfYWRkKHNtYXJ0RGF0
YS0+bWFpbl9mcmFtZSwgZXdrVmlldyk7CisgICAgZXZhc19vYmplY3Rfc2hvdyhzbWFydERhdGEt
Pm1haW5fZnJhbWUpOwogCi0jZGVmaW5lIENPTk5FQ1QocywgYykgZXZhc19vYmplY3RfZXZlbnRf
Y2FsbGJhY2tfYWRkKGV3a1ZpZXcsIHMsIGMsIHNkKQorI2RlZmluZSBDT05ORUNUKHMsIGMpIGV2
YXNfb2JqZWN0X2V2ZW50X2NhbGxiYWNrX2FkZChld2tWaWV3LCBzLCBjLCBzbWFydERhdGEpCiAg
ICAgQ09OTkVDVChFVkFTX0NBTExCQUNLX0ZPQ1VTX0lOLCBfZXdrX3ZpZXdfb25fZm9jdXNfaW4p
OwogICAgIENPTk5FQ1QoRVZBU19DQUxMQkFDS19GT0NVU19PVVQsIF9ld2tfdmlld19vbl9mb2N1
c19vdXQpOwogICAgIENPTk5FQ1QoRVZBU19DQUxMQkFDS19NT1VTRV9XSEVFTCwgX2V3a192aWV3
X29uX21vdXNlX3doZWVsKTsKQEAgLTgwMyw4ICs4MDMsOCBAQCBzdGF0aWMgdm9pZCBfZXdrX3Zp
ZXdfc21hcnRfYWRkKEV2YXNfT2JqZWN0KiBld2tWaWV3KQogCiBzdGF0aWMgdm9pZCBfZXdrX3Zp
ZXdfc21hcnRfZGVsKEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dF
VChld2tWaWV3LCBzZCk7Ci0gICAgRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKiBwcml2ID0gc2QgPyBz
ZC0+X3ByaXYgOiAwOworICAgIEVXS19WSUVXX1NEX0dFVChld2tWaWV3LCBzbWFydERhdGEpOwor
ICAgIEV3a19WaWV3X1ByaXZhdGVfRGF0YSogcHJpdiA9IHNtYXJ0RGF0YSA/IHNtYXJ0RGF0YS0+
X3ByaXYgOiAwOwogCiAgICAgZXdrX3ZpZXdfc3RvcChld2tWaWV3KTsKICAgICBfcGFyZW50X3Nj
LmRlbChld2tWaWV3KTsKQEAgLTgxMywxMDMgKzgxMywxMDMgQEAgc3RhdGljIHZvaWQgX2V3a192
aWV3X3NtYXJ0X2RlbChFdmFzX09iamVjdCogZXdrVmlldykKIAogc3RhdGljIHZvaWQgX2V3a192
aWV3X3NtYXJ0X3Jlc2l6ZShFdmFzX09iamVjdCogZXdrVmlldywgRXZhc19Db29yZCB3LCBFdmFz
X0Nvb3JkIGgpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCk7
CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEpOwogCiAg
ICAgLy8gdGhlc2Ugc2hvdWxkIGJlIHF1ZXVlZCBhbmQgcHJvY2Vzc2VkIGluIGNhbGN1bGF0ZSBh
cyB3ZWxsIQotICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShzZC0+YmFja2luZ19zdG9yZSwgdywgaCk7
CisgICAgZXZhc19vYmplY3RfcmVzaXplKHNtYXJ0RGF0YS0+YmFja2luZ19zdG9yZSwgdywgaCk7
CiAKLSAgICBzZC0+Y2hhbmdlZC5zaXplID0gRUlOQV9UUlVFOwotICAgIF9ld2tfdmlld19zbWFy
dF9jaGFuZ2VkKHNkKTsKKyAgICBzbWFydERhdGEtPmNoYW5nZWQuc2l6ZSA9IEVJTkFfVFJVRTsK
KyAgICBfZXdrX3ZpZXdfc21hcnRfY2hhbmdlZChzbWFydERhdGEpOwogfQogCiBzdGF0aWMgdm9p
ZCBfZXdrX3ZpZXdfc21hcnRfbW92ZShFdmFzX09iamVjdCogZXdrVmlldywgRXZhc19Db29yZCB4
LCBFdmFzX0Nvb3JkIHkpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3
LCBzZCk7Ci0gICAgc2QtPmNoYW5nZWQucG9zaXRpb24gPSBFSU5BX1RSVUU7Ci0gICAgX2V3a192
aWV3X3NtYXJ0X2NoYW5nZWQoc2QpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdr
Vmlldywgc21hcnREYXRhKTsKKyAgICBzbWFydERhdGEtPmNoYW5nZWQucG9zaXRpb24gPSBFSU5B
X1RSVUU7CisgICAgX2V3a192aWV3X3NtYXJ0X2NoYW5nZWQoc21hcnREYXRhKTsKIH0KIAogc3Rh
dGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X2NhbGN1bGF0ZShFdmFzX09iamVjdCogZXdrVmlldykK
IHsKLSAgICBFV0tfVklFV19TRF9HRVQoZXdrVmlldywgc2QpOwotICAgIEVXS19WSUVXX1BSSVZf
R0VUKHNkLCBwcml2KTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpLT5j
b250ZW50c19yZXNpemUpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGkt
PnNjcm9sbHNfcHJvY2Vzcyk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFw
aS0+cmVwYWludHNfcHJvY2Vzcyk7Ci0gICAgRXZhc19Db29yZCB4LCB5LCB3LCBoOworICAgIEVX
S19WSUVXX1NEX0dFVChld2tWaWV3LCBzbWFydERhdGEpOworICAgIEVXS19WSUVXX1BSSVZfR0VU
KHNtYXJ0RGF0YSwgcHJpdik7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnRE
YXRhLT5hcGktPmNvbnRlbnRzX3Jlc2l6ZSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk4oc21hcnREYXRhLT5hcGktPnNjcm9sbHNfcHJvY2Vzcyk7CisgICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk4oc21hcnREYXRhLT5hcGktPnJlcGFpbnRzX3Byb2Nlc3MpOworICAgIEV2YXNf
Q29vcmQgeCwgeSwgd2lkdGgsIGhlaWdodDsKIAotICAgIHNkLT5jaGFuZ2VkLmFueSA9IEVJTkFf
RkFMU0U7CisgICAgc21hcnREYXRhLT5jaGFuZ2VkLmFueSA9IEVJTkFfRkFMU0U7CiAKLSAgICBp
ZiAoIXNkLT5tYWluX2ZyYW1lIHx8ICFwcml2LT5tYWluX2ZyYW1lKQorICAgIGlmICghc21hcnRE
YXRhLT5tYWluX2ZyYW1lIHx8ICFwcml2LT5tYWluRnJhbWUpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldChld2tWaWV3LCAmeCwgJnksICZ3LCAmaCk7Cisg
ICAgZXZhc19vYmplY3RfZ2VvbWV0cnlfZ2V0KGV3a1ZpZXcsICZ4LCAmeSwgJndpZHRoLCAmaGVp
Z2h0KTsKIAogICAgIERCRygiZXdrVmlldz0lcCBnZW89WyVkLCAlZCArICVkeCVkXSwgY2hhbmdl
ZDogc2l6ZT0laGh1LCAiCiAgICAgICAgICJzY3JvbGxzPSV6dSwgcmVwYWludHM9JXp1IiwKLSAg
ICAgICAgZXdrVmlldywgeCwgeSwgdywgaCwgc2QtPmNoYW5nZWQuc2l6ZSwKKyAgICAgICAgZXdr
VmlldywgeCwgeSwgd2lkdGgsIGhlaWdodCwgc21hcnREYXRhLT5jaGFuZ2VkLnNpemUsCiAgICAg
ICAgIHByaXYtPnNjcm9sbHMuY291bnQsIHByaXYtPnJlcGFpbnRzLmNvdW50KTsKIAotICAgIGlm
IChzZC0+Y2hhbmdlZC5zaXplICYmICgodyAhPSBzZC0+dmlldy53KSB8fCAoaCAhPSBzZC0+dmll
dy5oKSkpIHsKLSAgICAgICAgV2ViQ29yZTo6RnJhbWVWaWV3KiB2aWV3ID0gcHJpdi0+bWFpbl9m
cmFtZS0+dmlldygpOworICAgIGlmIChzbWFydERhdGEtPmNoYW5nZWQuc2l6ZSAmJiAoKHdpZHRo
ICE9IHNtYXJ0RGF0YS0+dmlldy53KSB8fCAoaGVpZ2h0ICE9IHNtYXJ0RGF0YS0+dmlldy5oKSkp
IHsKKyAgICAgICAgV2ViQ29yZTo6RnJhbWVWaWV3KiB2aWV3ID0gcHJpdi0+bWFpbkZyYW1lLT52
aWV3KCk7CiAgICAgICAgIGlmICh2aWV3KSB7Ci0gICAgICAgICAgICB2aWV3LT5yZXNpemUodywg
aCk7CisgICAgICAgICAgICB2aWV3LT5yZXNpemUod2lkdGgsIGhlaWdodCk7CiAgICAgICAgICAg
ICB2aWV3LT5mb3JjZUxheW91dCgpOwogICAgICAgICAgICAgdmlldy0+YWRqdXN0Vmlld1NpemUo
KTsKICAgICAgICAgfQotICAgICAgICBldmFzX29iamVjdF9yZXNpemUoc2QtPm1haW5fZnJhbWUs
IHcsIGgpOwotICAgICAgICBldmFzX29iamVjdF9yZXNpemUoc2QtPmV2ZW50c19yZWN0LCB3LCBo
KTsKLSAgICAgICAgc2QtPmNoYW5nZWQuZnJhbWVfcmVjdCA9IEVJTkFfVFJVRTsKLSAgICAgICAg
c2QtPnZpZXcudyA9IHc7Ci0gICAgICAgIHNkLT52aWV3LmggPSBoOworICAgICAgICBldmFzX29i
amVjdF9yZXNpemUoc21hcnREYXRhLT5tYWluX2ZyYW1lLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAg
ICAgZXZhc19vYmplY3RfcmVzaXplKHNtYXJ0RGF0YS0+ZXZlbnRzX3JlY3QsIHdpZHRoLCBoZWln
aHQpOworICAgICAgICBzbWFydERhdGEtPmNoYW5nZWQuZnJhbWVfcmVjdCA9IEVJTkFfVFJVRTsK
KyAgICAgICAgc21hcnREYXRhLT52aWV3LncgPSB3aWR0aDsKKyAgICAgICAgc21hcnREYXRhLT52
aWV3LmggPSBoZWlnaHQ7CiAKLSAgICAgICAgX2V3a192aWV3X3JlcGFpbnRfYWRkKHByaXYsIDAs
IDAsIHcsIGgpOworICAgICAgICBfZXdrX3ZpZXdfcmVwYWludF9hZGQocHJpdiwgMCwgMCwgd2lk
dGgsIGhlaWdodCk7CiAKICAgICAgICAgLy8gVGhpcyBjYWxsYmFjayBpcyBhIGdvb2QgcGxhY2Ug
ZS5nLiB0byBjaGFuZ2UgZml4ZWQgbGF5b3V0IHNpemUgKGV3a192aWV3X2ZpeGVkX2xheW91dF9z
aXplX3NldCkuCiAgICAgICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdrVmll
dywgInZpZXcscmVzaXplZCIsIDApOwogICAgIH0KLSAgICBzZC0+Y2hhbmdlZC5zaXplID0gRUlO
QV9GQUxTRTsKKyAgICBzbWFydERhdGEtPmNoYW5nZWQuc2l6ZSA9IEVJTkFfRkFMU0U7CiAKLSAg
ICBpZiAoc2QtPmNoYW5nZWQucG9zaXRpb24gJiYgKCh4ICE9IHNkLT52aWV3LngpIHx8ICh5ICE9
IHNkLT52aWV3LnkpKSkgewotICAgICAgICBldmFzX29iamVjdF9tb3ZlKHNkLT5tYWluX2ZyYW1l
LCB4LCB5KTsKLSAgICAgICAgZXZhc19vYmplY3RfbW92ZShzZC0+YmFja2luZ19zdG9yZSwgeCwg
eSk7Ci0gICAgICAgIGV2YXNfb2JqZWN0X21vdmUoc2QtPmV2ZW50c19yZWN0LCB4LCB5KTsKLSAg
ICAgICAgc2QtPmNoYW5nZWQuZnJhbWVfcmVjdCA9IEVJTkFfVFJVRTsKLSAgICAgICAgc2QtPnZp
ZXcueCA9IHg7Ci0gICAgICAgIHNkLT52aWV3LnkgPSB5OworICAgIGlmIChzbWFydERhdGEtPmNo
YW5nZWQucG9zaXRpb24gJiYgKCh4ICE9IHNtYXJ0RGF0YS0+dmlldy54KSB8fCAoeSAhPSBzbWFy
dERhdGEtPnZpZXcueSkpKSB7CisgICAgICAgIGV2YXNfb2JqZWN0X21vdmUoc21hcnREYXRhLT5t
YWluX2ZyYW1lLCB4LCB5KTsKKyAgICAgICAgZXZhc19vYmplY3RfbW92ZShzbWFydERhdGEtPmJh
Y2tpbmdfc3RvcmUsIHgsIHkpOworICAgICAgICBldmFzX29iamVjdF9tb3ZlKHNtYXJ0RGF0YS0+
ZXZlbnRzX3JlY3QsIHgsIHkpOworICAgICAgICBzbWFydERhdGEtPmNoYW5nZWQuZnJhbWVfcmVj
dCA9IEVJTkFfVFJVRTsKKyAgICAgICAgc21hcnREYXRhLT52aWV3LnggPSB4OworICAgICAgICBz
bWFydERhdGEtPnZpZXcueSA9IHk7CiAgICAgfQotICAgIHNkLT5jaGFuZ2VkLnBvc2l0aW9uID0g
RUlOQV9GQUxTRTsKKyAgICBzbWFydERhdGEtPmNoYW5nZWQucG9zaXRpb24gPSBFSU5BX0ZBTFNF
OwogCi0gICAgaWYgKCFzZC0+YXBpLT5zY3JvbGxzX3Byb2Nlc3Moc2QpKQorICAgIGlmICghc21h
cnREYXRhLT5hcGktPnNjcm9sbHNfcHJvY2VzcyhzbWFydERhdGEpKQogICAgICAgICBFUlIoImZh
aWxlZCB0byBwcm9jZXNzIHNjcm9sbHMuIik7CiAgICAgX2V3a192aWV3X3Njcm9sbHNfZmx1c2go
cHJpdik7CiAKLSAgICBpZiAoIXNkLT5hcGktPnJlcGFpbnRzX3Byb2Nlc3Moc2QpKQorICAgIGlm
ICghc21hcnREYXRhLT5hcGktPnJlcGFpbnRzX3Byb2Nlc3Moc21hcnREYXRhKSkKICAgICAgICAg
RVJSKCJmYWlsZWQgdG8gcHJvY2VzcyByZXBhaW50cy4iKTsKICAgICBfZXdrX3ZpZXdfcmVwYWlu
dHNfZmx1c2gocHJpdik7CiAKLSAgICBpZiAoc2QtPmNoYW5nZWQuZnJhbWVfcmVjdCkgewotICAg
ICAgICBXZWJDb3JlOjpGcmFtZVZpZXcqIHZpZXcgPSBwcml2LT5tYWluX2ZyYW1lLT52aWV3KCk7
CisgICAgaWYgKHNtYXJ0RGF0YS0+Y2hhbmdlZC5mcmFtZV9yZWN0KSB7CisgICAgICAgIFdlYkNv
cmU6OkZyYW1lVmlldyogdmlldyA9IHByaXYtPm1haW5GcmFtZS0+dmlldygpOwogICAgICAgICB2
aWV3LT5mcmFtZVJlY3RzQ2hhbmdlZCgpOyAvKiBmb3JjZSB0cmVlIHRvIGdldCBwb3NpdGlvbiBm
cm9tIHJvb3QgKi8KLSAgICAgICAgc2QtPmNoYW5nZWQuZnJhbWVfcmVjdCA9IEVJTkFfRkFMU0U7
CisgICAgICAgIHNtYXJ0RGF0YS0+Y2hhbmdlZC5mcmFtZV9yZWN0ID0gRUlOQV9GQUxTRTsKICAg
ICB9CiB9CiAKIHN0YXRpYyB2b2lkIF9ld2tfdmlld19zbWFydF9zaG93KEV2YXNfT2JqZWN0KiBl
d2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QpOwor
ICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhKTsKIAotICAg
IGlmIChldmFzX29iamVjdF9jbGlwZWVzX2dldChzZC0+YmFzZS5jbGlwcGVyKSkKLSAgICAgICAg
ZXZhc19vYmplY3Rfc2hvdyhzZC0+YmFzZS5jbGlwcGVyKTsKLSAgICBldmFzX29iamVjdF9zaG93
KHNkLT5iYWNraW5nX3N0b3JlKTsKKyAgICBpZiAoZXZhc19vYmplY3RfY2xpcGVlc19nZXQoc21h
cnREYXRhLT5iYXNlLmNsaXBwZXIpKQorICAgICAgICBldmFzX29iamVjdF9zaG93KHNtYXJ0RGF0
YS0+YmFzZS5jbGlwcGVyKTsKKyAgICBldmFzX29iamVjdF9zaG93KHNtYXJ0RGF0YS0+YmFja2lu
Z19zdG9yZSk7CiB9CiAKIHN0YXRpYyB2b2lkIF9ld2tfdmlld19zbWFydF9oaWRlKEV2YXNfT2Jq
ZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywg
c2QpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhKTsK
IAotICAgIGV2YXNfb2JqZWN0X2hpZGUoc2QtPmJhc2UuY2xpcHBlcik7Ci0gICAgZXZhc19vYmpl
Y3RfaGlkZShzZC0+YmFja2luZ19zdG9yZSk7CisgICAgZXZhc19vYmplY3RfaGlkZShzbWFydERh
dGEtPmJhc2UuY2xpcHBlcik7CisgICAgZXZhc19vYmplY3RfaGlkZShzbWFydERhdGEtPmJhY2tp
bmdfc3RvcmUpOwogfQogCiBzdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19zbWFydF9jb250ZW50
c19yZXNpemUoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhLCBpbnQgd2lkdGgsIGludCBo
ZWlnaHQpCkBAIC05MjAsMjkgKzkyMCwyOSBAQCBzdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19z
bWFydF9jb250ZW50c19yZXNpemUoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhLAogc3Rh
dGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfc21hcnRfem9vbV9zZXQoRXdrX1ZpZXdfU21hcnRfRGF0
YSogc21hcnREYXRhLCBmbG9hdCB6b29tLCBFdmFzX0Nvb3JkIGNlbnRlclgsIEV2YXNfQ29vcmQg
Y2VudGVyWSkKIHsKICAgICBkb3VibGUgcHgsIHB5OwotICAgIEV2YXNfQ29vcmQgeCwgeSwgdywg
aDsKLSAgICBFaW5hX0Jvb2wgcmV0OworICAgIEV2YXNfQ29vcmQgeCwgeSwgd2lkdGgsIGhlaWdo
dDsKKyAgICBFaW5hX0Jvb2wgcmVzdWx0OwogCi0gICAgZXdrX2ZyYW1lX3Njcm9sbF9zaXplX2dl
dChzbWFydERhdGEtPm1haW5fZnJhbWUsICZ3LCAmaCk7CisgICAgZXdrX2ZyYW1lX3Njcm9sbF9z
aXplX2dldChzbWFydERhdGEtPm1haW5fZnJhbWUsICZ3aWR0aCwgJmhlaWdodCk7CiAgICAgZXdr
X2ZyYW1lX3Njcm9sbF9wb3NfZ2V0KHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSwgJngsICZ5KTsKIAot
ICAgIGlmICh3ICsgc21hcnREYXRhLT52aWV3LncgPiAwKQotICAgICAgICBweCA9IHN0YXRpY19j
YXN0PGRvdWJsZT4oeCArIGNlbnRlclgpIC8gKHcgKyBzbWFydERhdGEtPnZpZXcudyk7CisgICAg
aWYgKHdpZHRoICsgc21hcnREYXRhLT52aWV3LncgPiAwKQorICAgICAgICBweCA9IHN0YXRpY19j
YXN0PGRvdWJsZT4oeCArIGNlbnRlclgpIC8gKHdpZHRoICsgc21hcnREYXRhLT52aWV3LncpOwog
ICAgIGVsc2UKICAgICAgICAgcHggPSAwLjA7CiAKLSAgICBpZiAoaCArIHNtYXJ0RGF0YS0+dmll
dy5oID4gMCkKLSAgICAgICAgcHkgPSBzdGF0aWNfY2FzdDxkb3VibGU+KHkgKyBjZW50ZXJZKSAv
IChoICsgc21hcnREYXRhLT52aWV3LmgpOworICAgIGlmIChoZWlnaHQgKyBzbWFydERhdGEtPnZp
ZXcuaCA+IDApCisgICAgICAgIHB5ID0gc3RhdGljX2Nhc3Q8ZG91YmxlPih5ICsgY2VudGVyWSkg
LyAoaGVpZ2h0ICsgc21hcnREYXRhLT52aWV3LmgpOwogICAgIGVsc2UKICAgICAgICAgcHkgPSAw
LjA7CiAKLSAgICByZXQgPSBld2tfZnJhbWVfcGFnZV96b29tX3NldChzbWFydERhdGEtPm1haW5f
ZnJhbWUsIHpvb20pOworICAgIHJlc3VsdCA9IGV3a19mcmFtZV9wYWdlX3pvb21fc2V0KHNtYXJ0
RGF0YS0+bWFpbl9mcmFtZSwgem9vbSk7CiAKLSAgICBld2tfZnJhbWVfc2Nyb2xsX3NpemVfZ2V0
KHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSwgJncsICZoKTsKLSAgICB4ID0gKHcgKyBzbWFydERhdGEt
PnZpZXcudykgKiBweCAtIGNlbnRlclg7Ci0gICAgeSA9IChoICsgc21hcnREYXRhLT52aWV3Lmgp
ICogcHkgLSBjZW50ZXJZOworICAgIGV3a19mcmFtZV9zY3JvbGxfc2l6ZV9nZXQoc21hcnREYXRh
LT5tYWluX2ZyYW1lLCAmd2lkdGgsICZoZWlnaHQpOworICAgIHggPSAod2lkdGggKyBzbWFydERh
dGEtPnZpZXcudykgKiBweCAtIGNlbnRlclg7CisgICAgeSA9IChoZWlnaHQgKyBzbWFydERhdGEt
PnZpZXcuaCkgKiBweSAtIGNlbnRlclk7CiAgICAgZXdrX2ZyYW1lX3Njcm9sbF9zZXQoc21hcnRE
YXRhLT5tYWluX2ZyYW1lLCB4LCB5KTsKLSAgICByZXR1cm4gcmV0OworICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKIHN0YXRpYyB2b2lkIF9ld2tfdmlld19zbWFydF9mbHVzaChFd2tfVmlld19TbWFy
dF9EYXRhKiBzbWFydERhdGEpCkBAIC05ODEsOCArOTgxLDggQEAgc3RhdGljIHZvaWQgX2V3a192
aWV3X3pvb21fYW5pbWF0ZWRfbWFya19zdG9wKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0
YSkKIHN0YXRpYyB2b2lkIF9ld2tfdmlld196b29tX2FuaW1hdGVkX2ZpbmlzaChFd2tfVmlld19T
bWFydF9EYXRhKiBzbWFydERhdGEpCiB7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVQoc21hcnREYXRh
LCBwcml2KTsKLSAgICBlY29yZV9hbmltYXRvcl9kZWwocHJpdi0+YW5pbWF0ZWRfem9vbS5hbmlt
YXRvcik7Ci0gICAgcHJpdi0+YW5pbWF0ZWRfem9vbS5hbmltYXRvciA9IDA7CisgICAgZWNvcmVf
YW5pbWF0b3JfZGVsKHByaXYtPmFuaW1hdGVkWm9vbS5hbmltYXRvcik7CisgICAgcHJpdi0+YW5p
bWF0ZWRab29tLmFuaW1hdG9yID0gMDsKICAgICBfZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9tYXJr
X3N0b3Aoc21hcnREYXRhKTsKICAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKHNt
YXJ0RGF0YS0+c2VsZiwgInpvb20sYW5pbWF0ZWQsZW5kIiwgMCk7CiB9CkBAIC05OTAsNjkgKzk5
MCw2OSBAQCBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9maW5pc2goRXdrX1Zp
ZXdfU21hcnRfRGF0YSogc21hcnREYXRhKQogc3RhdGljIGZsb2F0IF9ld2tfdmlld196b29tX2Fu
aW1hdGVkX2N1cnJlbnQoRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKiBwcml2KQogewogICAgIGRvdWJs
ZSBub3cgPSBlY29yZV9sb29wX3RpbWVfZ2V0KCk7Ci0gICAgZG91YmxlIGRlbHRhID0gbm93IC0g
cHJpdi0+YW5pbWF0ZWRfem9vbS50aW1lLnN0YXJ0OworICAgIGRvdWJsZSBkZWx0YSA9IG5vdyAt
IHByaXYtPmFuaW1hdGVkWm9vbS50aW1lLnN0YXJ0OwogCi0gICAgaWYgKGRlbHRhID4gcHJpdi0+
YW5pbWF0ZWRfem9vbS50aW1lLmR1cmF0aW9uKQotICAgICAgICBkZWx0YSA9IHByaXYtPmFuaW1h
dGVkX3pvb20udGltZS5kdXJhdGlvbjsKKyAgICBpZiAoZGVsdGEgPiBwcml2LT5hbmltYXRlZFpv
b20udGltZS5kdXJhdGlvbikKKyAgICAgICAgZGVsdGEgPSBwcml2LT5hbmltYXRlZFpvb20udGlt
ZS5kdXJhdGlvbjsKICAgICBpZiAoZGVsdGEgPCAwLjApIC8vIHRpbWUgd2VudCBiYWNrLCBjbG9j
ayBhZGp1c3RlZD8KICAgICAgICAgZGVsdGEgPSAwLjA7CiAKLSAgICBkZWx0YSAvPSBwcml2LT5h
bmltYXRlZF96b29tLnRpbWUuZHVyYXRpb247CisgICAgZGVsdGEgLz0gcHJpdi0+YW5pbWF0ZWRa
b29tLnRpbWUuZHVyYXRpb247CiAKLSAgICByZXR1cm4gKChwcml2LT5hbmltYXRlZF96b29tLnpv
b20ucmFuZ2UgKiBkZWx0YSkKLSAgICAgICAgICAgICsgcHJpdi0+YW5pbWF0ZWRfem9vbS56b29t
LnN0YXJ0KTsKKyAgICByZXR1cm4gKChwcml2LT5hbmltYXRlZFpvb20uem9vbS5yYW5nZSAqIGRl
bHRhKQorICAgICAgICAgICAgKyBwcml2LT5hbmltYXRlZFpvb20uem9vbS5zdGFydCk7CiB9CiAK
IHN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3pvb21fYW5pbWF0b3JfY2Iodm9pZCogZGF0YSkK
IHsKLSAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzZCA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1Nt
YXJ0X0RhdGEqPihkYXRhKTsKLSAgICBFdmFzX0Nvb3JkIGN4LCBjeTsKLSAgICBFV0tfVklFV19Q
UklWX0dFVChzZCwgcHJpdik7CisgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhID0g
c3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEpOworICAgIEV2YXNfQ29vcmQg
Y2VudGVyWCwgY2VudGVyWTsKKyAgICBFV0tfVklFV19QUklWX0dFVChzbWFydERhdGEsIHByaXYp
OwogICAgIGRvdWJsZSBub3cgPSBlY29yZV9sb29wX3RpbWVfZ2V0KCk7CiAKLSAgICBjeCA9IHBy
aXYtPmFuaW1hdGVkX3pvb20uY2VudGVyLng7Ci0gICAgY3kgPSBwcml2LT5hbmltYXRlZF96b29t
LmNlbnRlci55OworICAgIGNlbnRlclggPSBwcml2LT5hbmltYXRlZFpvb20uY2VudGVyLng7Cisg
ICAgY2VudGVyWSA9IHByaXYtPmFuaW1hdGVkWm9vbS5jZW50ZXIueTsKIAogICAgIC8vIFRPRE86
IHByb2dyZXNzaXZlbHkgY2VudGVyIChjeCwgY3kpIC0+ICh2aWV3LnggKyB2aWV3LmgvMiwgdmll
dy55ICsgdmlldy5oLzIpCi0gICAgaWYgKGN4ID49IHNkLT52aWV3LncpCi0gICAgICAgIGN4ID0g
c2QtPnZpZXcudyAtIDE7Ci0gICAgaWYgKGN5ID49IHNkLT52aWV3LmgpCi0gICAgICAgIGN5ID0g
c2QtPnZpZXcuaCAtIDE7Ci0KLSAgICBpZiAoKG5vdyA+PSBwcml2LT5hbmltYXRlZF96b29tLnRp
bWUuZW5kKQotICAgICAgICB8fCAobm93IDwgcHJpdi0+YW5pbWF0ZWRfem9vbS50aW1lLnN0YXJ0
KSkgewotICAgICAgICBfZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9maW5pc2goc2QpOwotICAgICAg
ICBld2tfdmlld196b29tX3NldChzZC0+c2VsZiwgcHJpdi0+YW5pbWF0ZWRfem9vbS56b29tLmVu
ZCwgY3gsIGN5KTsKLSAgICAgICAgc2QtPmFwaS0+c2MuY2FsY3VsYXRlKHNkLT5zZWxmKTsKKyAg
ICBpZiAoY2VudGVyWCA+PSBzbWFydERhdGEtPnZpZXcudykKKyAgICAgICAgY2VudGVyWCA9IHNt
YXJ0RGF0YS0+dmlldy53IC0gMTsKKyAgICBpZiAoY2VudGVyWSA+PSBzbWFydERhdGEtPnZpZXcu
aCkKKyAgICAgICAgY2VudGVyWSA9IHNtYXJ0RGF0YS0+dmlldy5oIC0gMTsKKworICAgIGlmICgo
bm93ID49IHByaXYtPmFuaW1hdGVkWm9vbS50aW1lLmVuZCkKKyAgICAgICAgfHwgKG5vdyA8IHBy
aXYtPmFuaW1hdGVkWm9vbS50aW1lLnN0YXJ0KSkgeworICAgICAgICBfZXdrX3ZpZXdfem9vbV9h
bmltYXRlZF9maW5pc2goc21hcnREYXRhKTsKKyAgICAgICAgZXdrX3ZpZXdfem9vbV9zZXQoc21h
cnREYXRhLT5zZWxmLCBwcml2LT5hbmltYXRlZFpvb20uem9vbS5lbmQsIGNlbnRlclgsIGNlbnRl
clkpOworICAgICAgICBzbWFydERhdGEtPmFwaS0+c2MuY2FsY3VsYXRlKHNtYXJ0RGF0YS0+c2Vs
Zik7CiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwogICAgIH0KIAotICAgIHNkLT5hbmltYXRl
ZF96b29tLnpvb20uY3VycmVudCA9IF9ld2tfdmlld196b29tX2FuaW1hdGVkX2N1cnJlbnQocHJp
dik7Ci0gICAgc2QtPmFwaS0+em9vbV93ZWFrX3NldChzZCwgc2QtPmFuaW1hdGVkX3pvb20uem9v
bS5jdXJyZW50LCBjeCwgY3kpOworICAgIHNtYXJ0RGF0YS0+YW5pbWF0ZWRfem9vbS56b29tLmN1
cnJlbnQgPSBfZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9jdXJyZW50KHByaXYpOworICAgIHNtYXJ0
RGF0YS0+YXBpLT56b29tX3dlYWtfc2V0KHNtYXJ0RGF0YSwgc21hcnREYXRhLT5hbmltYXRlZF96
b29tLnpvb20uY3VycmVudCwgY2VudGVyWCwgY2VudGVyWSk7CiAgICAgcmV0dXJuIEVJTkFfVFJV
RTsKIH0KIAogc3RhdGljIHZvaWQgX2V3a192aWV3X3pvb21fYW5pbWF0aW9uX3N0YXJ0KEV3a19W
aWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSkKIHsKICAgICBFV0tfVklFV19QUklWX0dFVF9PUl9S
RVRVUk4oc21hcnREYXRhLCBwcml2KTsKLSAgICBpZiAocHJpdi0+YW5pbWF0ZWRfem9vbS5hbmlt
YXRvcikKKyAgICBpZiAocHJpdi0+YW5pbWF0ZWRab29tLmFuaW1hdG9yKQogICAgICAgICByZXR1
cm47Ci0gICAgcHJpdi0+YW5pbWF0ZWRfem9vbS5hbmltYXRvciA9IGVjb3JlX2FuaW1hdG9yX2Fk
ZAorICAgIHByaXYtPmFuaW1hdGVkWm9vbS5hbmltYXRvciA9IGVjb3JlX2FuaW1hdG9yX2FkZAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9ld2tfdmlld196b29tX2Fu
aW1hdG9yX2NiLCBzbWFydERhdGEpOwogfQogCiBzdGF0aWMgV2ViQ29yZTo6Vmlld3BvcnRBdHRy
aWJ1dGVzIF9ld2tfdmlld192aWV3cG9ydF9hdHRyaWJ1dGVzX2NvbXB1dGUoY29uc3QgRXZhc19P
YmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUKGV3a1ZpZXcsIHNkKTsKLSAg
ICBFV0tfVklFV19QUklWX0dFVChzZCwgcHJpdik7CisgICAgRVdLX1ZJRVdfU0RfR0VUKGV3a1Zp
ZXcsIHNtYXJ0RGF0YSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVQoc21hcnREYXRhLCBwcml2KTsK
IAotICAgIGludCBkZXNrdG9wX3dpZHRoID0gOTgwOwotICAgIGludCBkZXZpY2VfZHBpID0gZXdr
X3V0aWxfZHBpX2dldCgpOworICAgIGludCBkZXNrdG9wV2lkdGggPSA5ODA7CisgICAgaW50IGRl
dmljZURQSSA9IGV3a191dGlsX2RwaV9nZXQoKTsKIAotICAgIFdlYkNvcmU6OkludFJlY3QgYXZh
aWxhYmxlX3JlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KHByaXYtPnBhZ2UtPmNocm9tZSgpLT5jbGll
bnQoKS0+cGFnZVJlY3QoKSk7Ci0gICAgV2ViQ29yZTo6SW50UmVjdCBkZXZpY2VfcmVjdCA9IGVu
Y2xvc2luZ0ludFJlY3QocHJpdi0+cGFnZS0+Y2hyb21lKCktPmNsaWVudCgpLT53aW5kb3dSZWN0
KCkpOworICAgIFdlYkNvcmU6OkludFJlY3QgYXZhaWxhYmxlUmVjdCA9IGVuY2xvc2luZ0ludFJl
Y3QocHJpdi0+cGFnZS0+Y2hyb21lKCktPmNsaWVudCgpLT5wYWdlUmVjdCgpKTsKKyAgICBXZWJD
b3JlOjpJbnRSZWN0IGRldmljZVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KHByaXYtPnBhZ2UtPmNo
cm9tZSgpLT5jbGllbnQoKS0+d2luZG93UmVjdCgpKTsKIAotICAgIFdlYkNvcmU6OlZpZXdwb3J0
QXR0cmlidXRlcyBhdHRyaWJ1dGVzID0gV2ViQ29yZTo6Y29tcHV0ZVZpZXdwb3J0QXR0cmlidXRl
cyhwcml2LT52aWV3cG9ydF9hcmd1bWVudHMsIGRlc2t0b3Bfd2lkdGgsIGRldmljZV9yZWN0Lndp
ZHRoKCksIGRldmljZV9yZWN0LmhlaWdodCgpLCBkZXZpY2VfZHBpLCBhdmFpbGFibGVfcmVjdC5z
aXplKCkpOworICAgIFdlYkNvcmU6OlZpZXdwb3J0QXR0cmlidXRlcyBhdHRyaWJ1dGVzID0gV2Vi
Q29yZTo6Y29tcHV0ZVZpZXdwb3J0QXR0cmlidXRlcyhwcml2LT52aWV3cG9ydEFyZ3VtZW50cywg
ZGVza3RvcFdpZHRoLCBkZXZpY2VSZWN0LndpZHRoKCksIGRldmljZVJlY3QuaGVpZ2h0KCksIGRl
dmljZURQSSwgYXZhaWxhYmxlUmVjdC5zaXplKCkpOwogCiAgICAgcmV0dXJuIGF0dHJpYnV0ZXM7
CiB9CkBAIC0xMTIyLDEwICsxMTIyLDEwIEBAIEVpbmFfQm9vbCBld2tfdmlld19iYXNlX3NtYXJ0
X3NldChFd2tfVmlld19TbWFydF9DbGFzcyogYXBpKQogCiB2b2lkIGV3a192aWV3X2ZpeGVkX2xh
eW91dF9zaXplX3NldChFdmFzX09iamVjdCogZXdrVmlldywgRXZhc19Db29yZCB3aWR0aCwgRXZh
c19Db29yZCBoZWlnaHQpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3
LCBzZCk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2KTsKKyAgICBF
V0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSk7CisgICAgRVdLX1ZJ
RVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdik7CiAKLSAgICBXZWJDb3JlOjpG
cmFtZVZpZXcqIHZpZXcgPSBwcml2LT5tYWluX2ZyYW1lLT52aWV3KCk7CisgICAgV2ViQ29yZTo6
RnJhbWVWaWV3KiB2aWV3ID0gcHJpdi0+bWFpbkZyYW1lLT52aWV3KCk7CiAgICAgaWYgKHdpZHRo
IDw9IDAgJiYgaGVpZ2h0IDw9IDApIHsKICAgICAgICAgaWYgKCF2aWV3LT51c2VGaXhlZExheW91
dCgpKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTE1MCw5ICsxMTUwLDkgQEAgdm9pZCBld2tf
dmlld19maXhlZF9sYXlvdXRfc2l6ZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV2
YXNfQ29vcmQqIHdpZHQKICAgICAgICAgKndpZHRoID0gMDsKICAgICBpZiAoaGVpZ2h0KQogICAg
ICAgICAqaGVpZ2h0ID0gMDsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcs
IHNkKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYpOwotICAgIFdl
YkNvcmU6OkZyYW1lVmlldyogdmlldyA9IHByaXYtPm1haW5fZnJhbWUtPnZpZXcoKTsKKyAgICBF
V0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSk7CisgICAgRVdLX1ZJ
RVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdik7CisgICAgV2ViQ29yZTo6RnJh
bWVWaWV3KiB2aWV3ID0gcHJpdi0+bWFpbkZyYW1lLT52aWV3KCk7CiAgICAgaWYgKHZpZXctPnVz
ZUZpeGVkTGF5b3V0KCkpIHsKICAgICAgICAgV2ViQ29yZTo6SW50U2l6ZSBzaXplID0gdmlldy0+
Zml4ZWRMYXlvdXRTaXplKCk7CiAgICAgICAgIGlmICh3aWR0aCkKQEAgLTExNjQsMTIgKzExNjQs
MTIgQEAgdm9pZCBld2tfdmlld19maXhlZF9sYXlvdXRfc2l6ZV9nZXQoY29uc3QgRXZhc19PYmpl
Y3QqIGV3a1ZpZXcsIEV2YXNfQ29vcmQqIHdpZHQKIAogdm9pZCBld2tfdmlld190aGVtZV9zZXQo
RXZhc19PYmplY3QqIGV3a1ZpZXcsIGNvbnN0IGNoYXIqIHBhdGgpCiB7Ci0gICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1Jf
UkVUVVJOKHNkLCBwcml2KTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcs
IHNtYXJ0RGF0YSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwg
cHJpdik7CiAgICAgaWYgKCFlaW5hX3N0cmluZ3NoYXJlX3JlcGxhY2UoJnByaXYtPnNldHRpbmdz
LnRoZW1lLCBwYXRoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgV2ViQ29yZTo6RnJhbWVWaWV3
KiB2aWV3ID0gcHJpdi0+bWFpbl9mcmFtZS0+dmlldygpOworICAgIFdlYkNvcmU6OkZyYW1lVmll
dyogdmlldyA9IHByaXYtPm1haW5GcmFtZS0+dmlldygpOwogICAgIGlmICh2aWV3KSB7CiAgICAg
ICAgIHZpZXctPnNldEVkamVUaGVtZShXVEY6OlN0cmluZyhwYXRoKSk7CiAgICAgICAgIHByaXYt
PnBhZ2UtPnRoZW1lKCktPnRoZW1lQ2hhbmdlZCgpOwpAQCAtMTE3OSwyMSArMTE3OSwyMSBAQCB2
b2lkIGV3a192aWV3X3RoZW1lX3NldChFdmFzX09iamVjdCogZXdrVmlldywgY29uc3QgY2hhciog
cGF0aCkKIAogY29uc3QgY2hhciogZXdrX3ZpZXdfdGhlbWVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0
KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2Qs
IDApOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgMCk7CisgICAg
RVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIDApOworICAgIEVX
S19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIDApOwogICAgIHJldHVy
biBwcml2LT5zZXR0aW5ncy50aGVtZTsKIH0KIAogRXZhc19PYmplY3QqIGV3a192aWV3X2ZyYW1l
X21haW5fZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NE
X0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIDApOwotICAgIHJldHVybiBzZC0+bWFpbl9mcmFt
ZTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgMCk7
CisgICAgcmV0dXJuIHNtYXJ0RGF0YS0+bWFpbl9mcmFtZTsKIH0KIAogRXZhc19PYmplY3QqIGV3
a192aWV3X2ZyYW1lX2ZvY3VzZWRfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewot
ICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIDApOwotICAgIEVXS19W
SUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgMCk7CisgICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIDApOworICAgIEVXS19WSUVXX1BSSVZfR0VU
X09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIDApOwogCiAgICAgV2ViQ29yZTo6RnJhbWUqIGNv
cmUgPSBwcml2LT5wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZEZyYW1lKCk7CiAgICAg
aWYgKCFjb3JlKQpAQCAtMTIwNywzMyArMTIwNywzMyBAQCBFdmFzX09iamVjdCogZXdrX3ZpZXdf
ZnJhbWVfZm9jdXNlZF9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiAKIEVpbmFfQm9v
bCBld2tfdmlld191cmlfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBjaGFyKiB1cmkp
CiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxT
RSk7Ci0gICAgcmV0dXJuIGV3a19mcmFtZV91cmlfc2V0KHNkLT5tYWluX2ZyYW1lLCB1cmkpOwor
ICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZB
TFNFKTsKKyAgICByZXR1cm4gZXdrX2ZyYW1lX3VyaV9zZXQoc21hcnREYXRhLT5tYWluX2ZyYW1l
LCB1cmkpOwogfQogCiBjb25zdCBjaGFyKiBld2tfdmlld191cmlfZ2V0KGNvbnN0IEV2YXNfT2Jq
ZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywg
c2QsIDApOwotICAgIHJldHVybiBld2tfZnJhbWVfdXJpX2dldChzZC0+bWFpbl9mcmFtZSk7Cisg
ICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIDApOworICAg
IHJldHVybiBld2tfZnJhbWVfdXJpX2dldChzbWFydERhdGEtPm1haW5fZnJhbWUpOwogfQogCiBj
b25zdCBjaGFyKiBld2tfdmlld190aXRsZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcp
CiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgMCk7Ci0gICAg
cmV0dXJuIGV3a19mcmFtZV90aXRsZV9nZXQoc2QtPm1haW5fZnJhbWUpOworICAgIEVXS19WSUVX
X1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCAwKTsKKyAgICByZXR1cm4gZXdr
X2ZyYW1lX3RpdGxlX2dldChzbWFydERhdGEtPm1haW5fZnJhbWUpOwogfQogCiBFaW5hX0Jvb2wg
ZXdrX3ZpZXdfZWRpdGFibGVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAg
IEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAg
IHJldHVybiBld2tfZnJhbWVfZWRpdGFibGVfZ2V0KHNkLT5tYWluX2ZyYW1lKTsKKyAgICBFV0tf
VklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7Cisg
ICAgcmV0dXJuIGV3a19mcmFtZV9lZGl0YWJsZV9nZXQoc21hcnREYXRhLT5tYWluX2ZyYW1lKTsK
IH0KIAogdm9pZCBld2tfdmlld19iZ19jb2xvcl9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGlu
dCByZWQsIGludCBncmVlbiwgaW50IGJsdWUsIGludCBhbHBoYSkKIHsKLSAgICBFV0tfVklFV19T
RF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTihzZC0+YXBpKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpLT5i
Z19jb2xvcl9zZXQpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21h
cnREYXRhKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmFwaSk7
CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRhLT5hcGktPmJnX2NvbG9y
X3NldCk7CiAKICAgICBpZiAoYWxwaGEgPCAwKSB7CiAgICAgICAgIFdSTigiQWxwaGEgbGVzcyB0
aGFuIHplcm8gKCVkKS4iLCBhbHBoYSk7CkBAIC0xMjQzLDI4ICsxMjQzLDI4IEBAIHZvaWQgZXdr
X3ZpZXdfYmdfY29sb3Jfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBpbnQgcmVkLCBpbnQgZ3Jl
ZW4sIGludCBibHVlLCBpCiAgICAgICAgIGFscGhhID0gMjU1OwogICAgIH0KIAotI2RlZmluZSBD
SEVDS19QUkVNVUxfQ09MT1IoYywgYSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgIGlmIChjIDwgMCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBXUk4oIkNvbG9yIGNvbXBvbmVudCAi
ICNjICIgaXMgbGVzcyB0aGFuIHplcm8gKCVkKS4iLCBjKTsgICAgICAgICBcCi0gICAgICAgIGMg
PSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgfSBlbHNlIGlmIChjID4gYSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIFdSTigiQ29sb3IgY29tcG9uZW50ICIg
I2MgIiBpcyBncmVhdGVyIHRoYW4gYWxwaGEgKCVkLCBhbHBoYT0lZCkuIiwgXAotICAgICAgICAg
ICAgYywgYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAotICAgICAgICBjID0gYTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBDSEVDS19QUkVNVUxfQ09MT1IoY29s
b3IsIGFscGhhKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
aWYgKGNvbG9yIDwgMCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgICAgICBXUk4oIkNvbG9yIGNvbXBvbmVudCAiICNjb2xvciAi
IGlzIGxlc3MgdGhhbiB6ZXJvICglZCkuIiwgY29sb3IpOyAgICAgICAgIFwKKyAgICAgICAgY29s
b3IgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgfSBlbHNlIGlmIChjb2xvciA+IGFscGhhKSB7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgV1JOKCJDb2xvciBj
b21wb25lbnQgIiAjY29sb3IgIiBpcyBncmVhdGVyIHRoYW4gYWxwaGEgKCVkLCBhbHBoYT0lZCku
IiwgXAorICAgICAgICAgICAgY29sb3IsIGFscGhhKTsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGNvbG9yID0gYWxwaGE7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
ICAgICB9CiAgICAgQ0hFQ0tfUFJFTVVMX0NPTE9SKHJlZCwgYWxwaGEpOwogICAgIENIRUNLX1BS
RU1VTF9DT0xPUihncmVlbiwgYWxwaGEpOwogICAgIENIRUNLX1BSRU1VTF9DT0xPUihibHVlLCBh
bHBoYSk7CiAjdW5kZWYgQ0hFQ0tfUFJFTVVMX0NPTE9SCiAKLSAgICBzZC0+YmdfY29sb3IuciA9
IHJlZDsKLSAgICBzZC0+YmdfY29sb3IuZyA9IGdyZWVuOwotICAgIHNkLT5iZ19jb2xvci5iID0g
Ymx1ZTsKLSAgICBzZC0+YmdfY29sb3IuYSA9IGFscGhhOworICAgIHNtYXJ0RGF0YS0+YmdfY29s
b3IuciA9IHJlZDsKKyAgICBzbWFydERhdGEtPmJnX2NvbG9yLmcgPSBncmVlbjsKKyAgICBzbWFy
dERhdGEtPmJnX2NvbG9yLmIgPSBibHVlOworICAgIHNtYXJ0RGF0YS0+YmdfY29sb3IuYSA9IGFs
cGhhOwogCi0gICAgc2QtPmFwaS0+YmdfY29sb3Jfc2V0KHNkLCByZWQsIGdyZWVuLCBibHVlLCBh
bHBoYSk7CisgICAgc21hcnREYXRhLT5hcGktPmJnX2NvbG9yX3NldChzbWFydERhdGEsIHJlZCwg
Z3JlZW4sIGJsdWUsIGFscGhhKTsKIAotICAgIFdlYkNvcmU6OkZyYW1lVmlldyogdmlldyA9IHNk
LT5fcHJpdi0+bWFpbl9mcmFtZS0+dmlldygpOworICAgIFdlYkNvcmU6OkZyYW1lVmlldyogdmll
dyA9IHNtYXJ0RGF0YS0+X3ByaXYtPm1haW5GcmFtZS0+dmlldygpOwogICAgIGlmICh2aWV3KSB7
CiAgICAgICAgIFdlYkNvcmU6OkNvbG9yIGNvbG9yOwogCkBAIC0xMjg5LDIxICsxMjg5LDIxIEBA
IHZvaWQgZXdrX3ZpZXdfYmdfY29sb3JfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3LCBp
bnQqIHJlZCwgaW50KiBncmVlbiwgaW50CiAgICAgICAgICpibHVlID0gMDsKICAgICBpZiAoYWxw
aGEpCiAgICAgICAgICphbHBoYSA9IDA7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihl
d2tWaWV3LCBzZCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFy
dERhdGEpOwogICAgIGlmIChyZWQpCi0gICAgICAgICpyZWQgPSBzZC0+YmdfY29sb3IucjsKKyAg
ICAgICAgKnJlZCA9IHNtYXJ0RGF0YS0+YmdfY29sb3IucjsKICAgICBpZiAoZ3JlZW4pCi0gICAg
ICAgICpncmVlbiA9IHNkLT5iZ19jb2xvci5nOworICAgICAgICAqZ3JlZW4gPSBzbWFydERhdGEt
PmJnX2NvbG9yLmc7CiAgICAgaWYgKGJsdWUpCi0gICAgICAgICpibHVlID0gc2QtPmJnX2NvbG9y
LmI7CisgICAgICAgICpibHVlID0gc21hcnREYXRhLT5iZ19jb2xvci5iOwogICAgIGlmIChhbHBo
YSkKLSAgICAgICAgKmFscGhhID0gc2QtPmJnX2NvbG9yLmE7CisgICAgICAgICphbHBoYSA9IHNt
YXJ0RGF0YS0+YmdfY29sb3IuYTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3RleHRfc2VhcmNo
KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBjaGFyKiBzdHJpbmcsIEVpbmFfQm9v
bCBjYXNlU2Vuc2l0aXZlLCBFaW5hX0Jvb2wgZm9yd2FyZCwgRWluYV9Cb29sIHdyYXApCiB7Ci0g
ICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0g
ICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxT
RSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlO
QV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHN0cmluZywgRUlO
QV9GQUxTRSk7CiAgICAgV1RGOjpUZXh0Q2FzZVNlbnNpdGl2aXR5IHNlbnNpdGl2ZTsKICAgICBX
ZWJDb3JlOjpGaW5kRGlyZWN0aW9uIGRpcmVjdGlvbjsKQEAgLTEzMjQsMTggKzEzMjQsMTggQEAg
RWluYV9Cb29sIGV3a192aWV3X3RleHRfc2VhcmNoKGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3
LCBjb25zdCBjaGFyKiBzdHJpbmcsIEUKIC8qKgogICogTWFyayBtYXRjaGVzIHRoZSBnaXZlbiB0
ZXh0IHN0cmluZyBpbiBkb2N1bWVudC4KICAqCi0gKiBAcGFyYW0gbyB2aWV3IG9iamVjdCB3aGVy
ZSB0byBzZWFyY2ggdGV4dC4KKyAqIEBwYXJhbSBld2tWaWV3IHZpZXcgb2JqZWN0IHdoZXJlIHRv
IHNlYXJjaCB0ZXh0LgogICogQHBhcmFtIHN0cmluZyByZWZlcmVuY2Ugc3RyaW5nIHRvIG1hdGNo
LgogICogQHBhcmFtIGNhc2VTZW5zaXRpdmUgaWYgbWF0Y2ggc2hvdWxkIGJlIGNhc2Ugc2Vuc2l0
aXZlIG9yIG5vdC4KLSAqIEBwYXJhbSBoaWdobGlnaHQgaWYgbWF0Y2hlcyBzaG91bGQgYmUgaGln
aGxpZ2h0ZWQuCisgKiBAcGFyYW0gaGVpZ2h0aWdobGlnaHQgaWYgbWF0Y2hlcyBzaG91bGQgYmUg
aGlnaGxpZ2h0ZWQuCiAgKiBAcGFyYW0gbGltaXQgbWF4aW11bSBhbW91bnQgb2YgbWF0Y2hlcywg
b3IgemVybyB0byB1bmxpbWl0ZWQuCiAgKgogICogQHJldHVybiBudW1iZXIgb2YgbWF0Y2hlcy4K
ICAqLwogdW5zaWduZWQgaW50IGV3a192aWV3X3RleHRfbWF0Y2hlc19tYXJrKEV2YXNfT2JqZWN0
KiBld2tWaWV3LCBjb25zdCBjaGFyKiBzdHJpbmcsIEVpbmFfQm9vbCBjYXNlU2Vuc2l0aXZlLCBF
aW5hX0Jvb2wgaGlnaGxpZ2h0LCB1bnNpZ25lZCBpbnQgbGltaXQpCiB7Ci0gICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgMCk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRf
T1JfUkVUVVJOKHNkLCBwcml2LCAwKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3
a1ZpZXcsIHNtYXJ0RGF0YSwgMCk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNt
YXJ0RGF0YSwgcHJpdiwgMCk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHN0
cmluZywgMCk7CiAgICAgV1RGOjpUZXh0Q2FzZVNlbnNpdGl2aXR5IHNlbnNpdGl2ZTsKIApAQCAt
MTM0OSwzOCArMTM0OSwzOCBAQCB1bnNpZ25lZCBpbnQgZXdrX3ZpZXdfdGV4dF9tYXRjaGVzX21h
cmsoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGNvbnN0IGNoYXIqIHN0cmluZwogCiBFaW5hX0Jvb2wg
ZXdrX3ZpZXdfdGV4dF9tYXRjaGVzX3VubWFya19hbGwoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7
Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7
Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsK
KyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9G
QUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwg
RUlOQV9GQUxTRSk7CiAgICAgcHJpdi0+cGFnZS0+dW5tYXJrQWxsVGV4dE1hdGNoZXMoKTsKICAg
ICByZXR1cm4gRUlOQV9UUlVFOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfdGV4dF9tYXRjaGVz
X2hpZ2hsaWdodF9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCBoaWdobGlnaHQp
CiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxT
RSk7Ci0gICAgcmV0dXJuIGV3a19mcmFtZV90ZXh0X21hdGNoZXNfaGlnaGxpZ2h0X3NldChzZC0+
bWFpbl9mcmFtZSwgaGlnaGxpZ2h0KTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3
a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgcmV0dXJuIGV3a19mcmFtZV90ZXh0
X21hdGNoZXNfaGlnaGxpZ2h0X3NldChzbWFydERhdGEtPm1haW5fZnJhbWUsIGhpZ2hsaWdodCk7
CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld190ZXh0X21hdGNoZXNfaGlnaGxpZ2h0X2dldChjb25z
dCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJO
KGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICByZXR1cm4gZXdrX2ZyYW1lX3RleHRfbWF0
Y2hlc19oaWdobGlnaHRfZ2V0KHNkLT5tYWluX2ZyYW1lKTsKKyAgICBFV0tfVklFV19TRF9HRVRf
T1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgcmV0dXJuIGV3
a19mcmFtZV90ZXh0X21hdGNoZXNfaGlnaGxpZ2h0X2dldChzbWFydERhdGEtPm1haW5fZnJhbWUp
OwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfZWRpdGFibGVfc2V0KEV2YXNfT2JqZWN0KiBld2tW
aWV3LCBFaW5hX0Jvb2wgZWRpdGFibGUpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
Tihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgcmV0dXJuIGV3a19mcmFtZV9lZGl0YWJs
ZV9zZXQoc2QtPm1haW5fZnJhbWUsIGVkaXRhYmxlKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1Jf
UkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgcmV0dXJuIGV3a19m
cmFtZV9lZGl0YWJsZV9zZXQoc21hcnREYXRhLT5tYWluX2ZyYW1lLCBlZGl0YWJsZSk7CiB9CiAK
IGNoYXIqIGV3a192aWV3X3NlbGVjdGlvbl9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcp
CiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgMCk7Ci0gICAg
RVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCAwKTsKLSAgICBDU3RyaW5nIHMg
PSBwcml2LT5wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCktPmVk
aXRvcigpLT5zZWxlY3RlZFRleHQoKS51dGY4KCk7Ci0gICAgaWYgKHMuaXNOdWxsKCkpCisgICAg
RVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIDApOworICAgIEVX
S19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIDApOworICAgIENTdHJp
bmcgc2VsZWN0ZWRTdHJpbmcgPSBwcml2LT5wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNl
ZE9yTWFpbkZyYW1lKCktPmVkaXRvcigpLT5zZWxlY3RlZFRleHQoKS51dGY4KCk7CisgICAgaWYg
KHNlbGVjdGVkU3RyaW5nLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4g
c3RyZHVwKHMuZGF0YSgpKTsKKyAgICByZXR1cm4gc3RyZHVwKHNlbGVjdGVkU3RyaW5nLmRhdGEo
KSk7CiB9CiAKIHN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X2VkaXRvcl9jb21tYW5kKEV3a19W
aWV3X1ByaXZhdGVfRGF0YSogcHJpdiwgY29uc3QgY2hhciogY29tbWFuZCwgY29uc3QgY2hhciog
dmFsdWUgPSAwKQpAQCAtMTM5MCw4ICsxMzkwLDggQEAgc3RhdGljIEVpbmFfQm9vbCBfZXdrX3Zp
ZXdfZWRpdG9yX2NvbW1hbmQoRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKiBwcml2LCBjb25zdCBjaGEK
IAogRWluYV9Cb29sIGV3a192aWV3X2V4ZWN1dGVfZWRpdG9yX2NvbW1hbmQoRXZhc19PYmplY3Qq
IGV3a1ZpZXcsIGNvbnN0IEV3a19FZGl0b3JfQ29tbWFuZCBjb21tYW5kLCBjb25zdCBjaGFyKiB2
YWx1ZSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5B
X0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFf
RkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRh
LCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRh
LCBwcml2LCBFSU5BX0ZBTFNFKTsKIAogICAgIHN3aXRjaCAoY29tbWFuZCkgewogICAgIGNhc2Ug
RVdLX0VESVRPUl9DT01NQU5EX0lOU0VSVF9JTUFHRToKQEAgLTE0MTgsMjMgKzE0MTgsMjMgQEAg
RWluYV9Cb29sIGV3a192aWV3X2V4ZWN1dGVfZWRpdG9yX2NvbW1hbmQoRXZhc19PYmplY3QqIGV3
a1ZpZXcsIGNvbnN0IEV3a19FZGl0b3IKIEVpbmFfQm9vbCBld2tfdmlld19jb250ZXh0X21lbnVf
Zm9yd2FyZF9ldmVudChFdmFzX09iamVjdCogZXdrVmlldywgY29uc3QgRXZhc19FdmVudF9Nb3Vz
ZV9Eb3duKiBkb3duRXZlbnQpCiB7CiAjaWYgRU5BQkxFKENPTlRFWFRfTUVOVVMpCi0gICAgRVdL
X1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdL
X1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tf
VklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7Cisg
ICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxT
RSk7CiAgICAgRWluYV9Cb29sIG1vdXNlX3ByZXNzX2hhbmRsZWQgPSBFSU5BX0ZBTFNFOwogCiAg
ICAgcHJpdi0+cGFnZS0+Y29udGV4dE1lbnVDb250cm9sbGVyKCktPmNsZWFyQ29udGV4dE1lbnUo
KTsKLSAgICBXZWJDb3JlOjpGcmFtZSogbWFpbl9mcmFtZSA9IHByaXYtPnBhZ2UtPm1haW5GcmFt
ZSgpOworICAgIFdlYkNvcmU6OkZyYW1lKiBtYWluRnJhbWUgPSBwcml2LT5wYWdlLT5tYWluRnJh
bWUoKTsKICAgICBFdmFzX0Nvb3JkIHgsIHk7Ci0gICAgZXZhc19vYmplY3RfZ2VvbWV0cnlfZ2V0
KHNkLT5zZWxmLCAmeCwgJnksIDAsIDApOworICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldChz
bWFydERhdGEtPnNlbGYsICZ4LCAmeSwgMCwgMCk7CiAKICAgICBXZWJDb3JlOjpQbGF0Zm9ybU1v
dXNlRXZlbnQgZXZlbnQoZG93bkV2ZW50LCBXZWJDb3JlOjpJbnRQb2ludCh4LCB5KSk7CiAKLSAg
ICBpZiAobWFpbl9mcmFtZS0+dmlldygpKSB7CisgICAgaWYgKG1haW5GcmFtZS0+dmlldygpKSB7
CiAgICAgICAgIG1vdXNlX3ByZXNzX2hhbmRsZWQgPQotICAgICAgICAgICAgbWFpbl9mcmFtZS0+
ZXZlbnRIYW5kbGVyKCktPmhhbmRsZU1vdXNlUHJlc3NFdmVudChldmVudCk7CisgICAgICAgICAg
ICBtYWluRnJhbWUtPmV2ZW50SGFuZGxlcigpLT5oYW5kbGVNb3VzZVByZXNzRXZlbnQoZXZlbnQp
OwogICAgIH0KIAotICAgIGlmIChtYWluX2ZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2VuZENvbnRl
eHRNZW51RXZlbnQoZXZlbnQpKQorICAgIGlmIChtYWluRnJhbWUtPmV2ZW50SGFuZGxlcigpLT5z
ZW5kQ29udGV4dE1lbnVFdmVudChldmVudCkpCiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwog
CiAgICAgV2ViQ29yZTo6Q29udGV4dE1lbnUqIGNvcmVNZW51ID0KQEAgLTE0NTMsODQgKzE0NTMs
ODQgQEAgRWluYV9Cb29sIGV3a192aWV3X2NvbnRleHRfbWVudV9mb3J3YXJkX2V2ZW50KEV2YXNf
T2JqZWN0KiBld2tWaWV3LCBjb25zdCBFdmFzX0UKIAogZG91YmxlIGV3a192aWV3X2xvYWRfcHJv
Z3Jlc3NfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NE
X0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIC0xLjApOwotICAgIEVXS19WSUVXX1BSSVZfR0VU
X09SX1JFVFVSTihzZCwgcHJpdiwgLTEuMCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
Tihld2tWaWV3LCBzbWFydERhdGEsIC0xLjApOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JF
VFVSTihzbWFydERhdGEsIHByaXYsIC0xLjApOwogICAgIHJldHVybiBwcml2LT5wYWdlLT5wcm9n
cmVzcygpLT5lc3RpbWF0ZWRQcm9ncmVzcygpOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc3Rv
cChFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJO
KGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICByZXR1cm4gZXdrX2ZyYW1lX3N0b3Aoc2Qt
Pm1haW5fZnJhbWUpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21h
cnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICByZXR1cm4gZXdrX2ZyYW1lX3N0b3Aoc21hcnREYXRh
LT5tYWluX2ZyYW1lKTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3JlbG9hZChFdmFzX09iamVj
dCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNk
LCBFSU5BX0ZBTFNFKTsKLSAgICByZXR1cm4gZXdrX2ZyYW1lX3JlbG9hZChzZC0+bWFpbl9mcmFt
ZSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJ
TkFfRkFMU0UpOworICAgIHJldHVybiBld2tfZnJhbWVfcmVsb2FkKHNtYXJ0RGF0YS0+bWFpbl9m
cmFtZSk7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19yZWxvYWRfZnVsbChFdmFzX09iamVjdCog
ZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBF
SU5BX0ZBTFNFKTsKLSAgICByZXR1cm4gZXdrX2ZyYW1lX3JlbG9hZF9mdWxsKHNkLT5tYWluX2Zy
YW1lKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwg
RUlOQV9GQUxTRSk7CisgICAgcmV0dXJuIGV3a19mcmFtZV9yZWxvYWRfZnVsbChzbWFydERhdGEt
Pm1haW5fZnJhbWUpOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfYmFjayhFdmFzX09iamVjdCog
ZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBF
SU5BX0ZBTFNFKTsKLSAgICByZXR1cm4gZXdrX2ZyYW1lX2JhY2soc2QtPm1haW5fZnJhbWUpOwor
ICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZB
TFNFKTsKKyAgICByZXR1cm4gZXdrX2ZyYW1lX2JhY2soc21hcnREYXRhLT5tYWluX2ZyYW1lKTsK
IH0KIAogRWluYV9Cb29sIGV3a192aWV3X2ZvcndhcmQoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7
Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7
Ci0gICAgcmV0dXJuIGV3a19mcmFtZV9mb3J3YXJkKHNkLT5tYWluX2ZyYW1lKTsKKyAgICBFV0tf
VklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7Cisg
ICAgcmV0dXJuIGV3a19mcmFtZV9mb3J3YXJkKHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSk7CiB9CiAK
IEVpbmFfQm9vbCBld2tfdmlld19uYXZpZ2F0ZShFdmFzX09iamVjdCogZXdrVmlldywgaW50IHN0
ZXBzKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFf
RkFMU0UpOwotICAgIHJldHVybiBld2tfZnJhbWVfbmF2aWdhdGUoc2QtPm1haW5fZnJhbWUsIHN0
ZXBzKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwg
RUlOQV9GQUxTRSk7CisgICAgcmV0dXJuIGV3a19mcmFtZV9uYXZpZ2F0ZShzbWFydERhdGEtPm1h
aW5fZnJhbWUsIHN0ZXBzKTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X2JhY2tfcG9zc2libGUo
RXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihl
d2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgcmV0dXJuIGV3a19mcmFtZV9iYWNrX3Bvc3Np
YmxlKHNkLT5tYWluX2ZyYW1lKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1Zp
ZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgcmV0dXJuIGV3a19mcmFtZV9iYWNrX3Bv
c3NpYmxlKHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSk7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19m
b3J3YXJkX3Bvc3NpYmxlKEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NE
X0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIHJldHVybiBld2tf
ZnJhbWVfZm9yd2FyZF9wb3NzaWJsZShzZC0+bWFpbl9mcmFtZSk7CisgICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIHJldHVy
biBld2tfZnJhbWVfZm9yd2FyZF9wb3NzaWJsZShzbWFydERhdGEtPm1haW5fZnJhbWUpOwogfQog
CiBFaW5hX0Jvb2wgZXdrX3ZpZXdfbmF2aWdhdGVfcG9zc2libGUoRXZhc19PYmplY3QqIGV3a1Zp
ZXcsIGludCBzdGVwcykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcs
IHNkLCBFSU5BX0ZBTFNFKTsKLSAgICByZXR1cm4gZXdrX2ZyYW1lX25hdmlnYXRlX3Bvc3NpYmxl
KHNkLT5tYWluX2ZyYW1lLCBzdGVwcyk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihl
d2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIHJldHVybiBld2tfZnJhbWVfbmF2
aWdhdGVfcG9zc2libGUoc21hcnREYXRhLT5tYWluX2ZyYW1lLCBzdGVwcyk7CiB9CiAKIEVpbmFf
Qm9vbCBld2tfdmlld19oaXN0b3J5X2VuYWJsZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1Zp
ZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9G
QUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZB
TFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwg
RUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwg
cHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYkNvcmU6OkJhY2tG
b3J3YXJkTGlzdEltcGwqPihwcml2LT5wYWdlLT5iYWNrRm9yd2FyZExpc3QoKSktPmVuYWJsZWQo
KTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X2hpc3RvcnlfZW5hYmxlX3NldChFdmFzX09iamVj
dCogZXdrVmlldywgRWluYV9Cb29sIGVuYWJsZSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1Jf
UkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9P
Ul9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9S
RVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklW
X0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBzdGF0aWNf
Y2FzdDxXZWJDb3JlOjpCYWNrRm9yd2FyZExpc3RJbXBsKj4ocHJpdi0+cGFnZS0+YmFja0Zvcndh
cmRMaXN0KCkpLT5zZXRFbmFibGVkKGVuYWJsZSk7CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0K
IAogRXdrX0hpc3RvcnkqIGV3a192aWV3X2hpc3RvcnlfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBl
d2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIDAp
OwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgMCk7CisgICAgRVdL
X1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIDApOworICAgIEVXS19W
SUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIDApOwogICAgIGlmICghc3Rh
dGljX2Nhc3Q8V2ViQ29yZTo6QmFja0ZvcndhcmRMaXN0SW1wbCo+KHByaXYtPnBhZ2UtPmJhY2tG
b3J3YXJkTGlzdCgpKS0+ZW5hYmxlZCgpKSB7CiAgICAgICAgIEVSUigiYXNrZWQgaGlzdG9yeSwg
YnV0IGl0J3MgZGlzYWJsZWQhIFJldHVybmluZyAwISIpOwogICAgICAgICByZXR1cm4gMDsKQEAg
LTE1NDAsMTg2ICsxNTQwLDE4NiBAQCBFd2tfSGlzdG9yeSogZXdrX3ZpZXdfaGlzdG9yeV9nZXQo
Y29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiAKIGZsb2F0IGV3a192aWV3X3pvb21fZ2V0KGNv
bnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRV
Uk4oZXdrVmlldywgc2QsIC0xLjApOwotICAgIHJldHVybiBld2tfZnJhbWVfcGFnZV96b29tX2dl
dChzZC0+bWFpbl9mcmFtZSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3
LCBzbWFydERhdGEsIC0xLjApOworICAgIHJldHVybiBld2tfZnJhbWVfcGFnZV96b29tX2dldChz
bWFydERhdGEtPm1haW5fZnJhbWUpOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfem9vbV9zZXQo
RXZhc19PYmplY3QqIGV3a1ZpZXcsIGZsb2F0IHpvb20sIEV2YXNfQ29vcmQgY3gsIEV2YXNfQ29v
cmQgY3kpCitFaW5hX0Jvb2wgZXdrX3ZpZXdfem9vbV9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcs
IGZsb2F0IHpvb20sIEV2YXNfQ29vcmQgY2VudGVyWCwgRXZhc19Db29yZCBjZW50ZXJZKQogewot
ICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwot
ICAgIEVXS19WSUVXX1BSSVZfR0VUKHNkLCBwcml2KTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1Jf
UkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJ
Vl9HRVQoc21hcnREYXRhLCBwcml2KTsKIAotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJO
X1ZBTChzZC0+YXBpLCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
Tl9WQUwoc2QtPmFwaS0+em9vbV9zZXQsIEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmFwaSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+YXBpLT56b29tX3NldCwgRUlOQV9G
QUxTRSk7CiAKLSAgICBpZiAoIXByaXYtPnNldHRpbmdzLnpvb21fcmFuZ2UudXNlcl9zY2FsYWJs
ZSkgeworICAgIGlmICghcHJpdi0+c2V0dGluZ3Muem9vbVJhbmdlLnVzZXJTY2FsYWJsZSkgewog
ICAgICAgICBXUk4oInVzZXJTY2FsYWJsZSBpcyBmYWxzZSIpOwogICAgICAgICByZXR1cm4gRUlO
QV9GQUxTRTsKICAgICB9CiAKLSAgICBpZiAoem9vbSA8IHByaXYtPnNldHRpbmdzLnpvb21fcmFu
Z2UubWluX3NjYWxlKSB7Ci0gICAgICAgIFdSTigiem9vbSBsZXZlbCBpcyA8ICVmIDogJWYiLCBw
cml2LT5zZXR0aW5ncy56b29tX3JhbmdlLm1pbl9zY2FsZSwgem9vbSk7CisgICAgaWYgKHpvb20g
PCBwcml2LT5zZXR0aW5ncy56b29tUmFuZ2UubWluU2NhbGUpIHsKKyAgICAgICAgV1JOKCJ6b29t
IGxldmVsIGlzIDwgJWYgOiAlZiIsIHByaXYtPnNldHRpbmdzLnpvb21SYW5nZS5taW5TY2FsZSwg
em9vbSk7CiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwogICAgIH0KLSAgICBpZiAoem9vbSA+
IHByaXYtPnNldHRpbmdzLnpvb21fcmFuZ2UubWF4X3NjYWxlKSB7Ci0gICAgICAgIFdSTigiem9v
bSBsZXZlbCBpcyA+ICVmIDogJWYiLCBwcml2LT5zZXR0aW5ncy56b29tX3JhbmdlLm1heF9zY2Fs
ZSwgem9vbSk7CisgICAgaWYgKHpvb20gPiBwcml2LT5zZXR0aW5ncy56b29tUmFuZ2UubWF4U2Nh
bGUpIHsKKyAgICAgICAgV1JOKCJ6b29tIGxldmVsIGlzID4gJWYgOiAlZiIsIHByaXYtPnNldHRp
bmdzLnpvb21SYW5nZS5tYXhTY2FsZSwgem9vbSk7CiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNF
OwogICAgIH0KIAotICAgIF9ld2tfdmlld196b29tX2FuaW1hdGVkX21hcmtfc3RvcChzZCk7Ci0g
ICAgcmV0dXJuIHNkLT5hcGktPnpvb21fc2V0KHNkLCB6b29tLCBjeCwgY3kpOworICAgIF9ld2tf
dmlld196b29tX2FuaW1hdGVkX21hcmtfc3RvcChzbWFydERhdGEpOworICAgIHJldHVybiBzbWFy
dERhdGEtPmFwaS0+em9vbV9zZXQoc21hcnREYXRhLCB6b29tLCBjZW50ZXJYLCBjZW50ZXJZKTsK
IH0KIAogZmxvYXQgZXdrX3ZpZXdfcGFnZV96b29tX2dldChjb25zdCBFdmFzX09iamVjdCogZXdr
VmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAtMS4w
KTsKLSAgICByZXR1cm4gZXdrX2ZyYW1lX3BhZ2Vfem9vbV9nZXQoc2QtPm1haW5fZnJhbWUpOwor
ICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCAtMS4wKTsK
KyAgICByZXR1cm4gZXdrX2ZyYW1lX3BhZ2Vfem9vbV9nZXQoc21hcnREYXRhLT5tYWluX2ZyYW1l
KTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3BhZ2Vfem9vbV9zZXQoRXZhc19PYmplY3QqIGV3
a1ZpZXcsIGZsb2F0IHBhZ2Vab29tRmFjdG9yKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9S
RVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIHJldHVybiBld2tfZnJhbWVfcGFn
ZV96b29tX3NldChzZC0+bWFpbl9mcmFtZSwgcGFnZVpvb21GYWN0b3IpOworICAgIEVXS19WSUVX
X1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBy
ZXR1cm4gZXdrX2ZyYW1lX3BhZ2Vfem9vbV9zZXQoc21hcnREYXRhLT5tYWluX2ZyYW1lLCBwYWdl
Wm9vbUZhY3Rvcik7CiB9CiAKIGZsb2F0IGV3a192aWV3X3NjYWxlX2dldChjb25zdCBFdmFzX09i
amVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcs
IHNkLCAtMS4wKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIC0x
LjApOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCAt
MS4wKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCAt
MS4wKTsKICAgICByZXR1cm4gcHJpdi0+cGFnZS0+cGFnZVNjYWxlRmFjdG9yKCk7CiB9CiAKLUVp
bmFfQm9vbCBld2tfdmlld19zY2FsZV9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGZsb2F0IHNj
YWxlRmFjdG9yLCBFdmFzX0Nvb3JkIGN4LCBFdmFzX0Nvb3JkIGN5KQorRWluYV9Cb29sIGV3a192
aWV3X3NjYWxlX3NldChFdmFzX09iamVjdCogZXdrVmlldywgZmxvYXQgc2NhbGVGYWN0b3IsIEV2
YXNfQ29vcmQgY2VudGVyWCwgRXZhc19Db29yZCBjZW50ZXJZKQogewotICAgIEVXS19WSUVXX1NE
X0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BS
SVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19W
SUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOwogCiAg
ICAgZmxvYXQgY3VycmVudFNjYWxlRmFjdG9yID0gZXdrX3ZpZXdfc2NhbGVfZ2V0KGV3a1ZpZXcp
OwogICAgIGlmIChjdXJyZW50U2NhbGVGYWN0b3IgPT0gLTEpCiAgICAgICAgIHJldHVybiBFSU5B
X0ZBTFNFOwogCiAgICAgaW50IHgsIHk7Ci0gICAgZXdrX2ZyYW1lX3Njcm9sbF9wb3NfZ2V0KHNk
LT5tYWluX2ZyYW1lLCAmeCwgJnkpOworICAgIGV3a19mcmFtZV9zY3JvbGxfcG9zX2dldChzbWFy
dERhdGEtPm1haW5fZnJhbWUsICZ4LCAmeSk7CiAKLSAgICB4ID0gc3RhdGljX2Nhc3Q8aW50Pigo
KHggKyBjeCkgLyBjdXJyZW50U2NhbGVGYWN0b3IpICogc2NhbGVGYWN0b3IpIC0gY3g7Ci0gICAg
eSA9IHN0YXRpY19jYXN0PGludD4oKCh5ICsgY3kpIC8gY3VycmVudFNjYWxlRmFjdG9yKSAqIHNj
YWxlRmFjdG9yKSAtIGN5OworICAgIHggPSBzdGF0aWNfY2FzdDxpbnQ+KCgoeCArIGNlbnRlclgp
IC8gY3VycmVudFNjYWxlRmFjdG9yKSAqIHNjYWxlRmFjdG9yKSAtIGNlbnRlclg7CisgICAgeSA9
IHN0YXRpY19jYXN0PGludD4oKCh5ICsgY2VudGVyWSkgLyBjdXJyZW50U2NhbGVGYWN0b3IpICog
c2NhbGVGYWN0b3IpIC0gY2VudGVyWTsKICAgICBwcml2LT5wYWdlLT5zZXRQYWdlU2NhbGVGYWN0
b3Ioc2NhbGVGYWN0b3IsIFdlYkNvcmU6OkxheW91dFBvaW50KHgsIHkpKTsKICAgICByZXR1cm4g
RUlOQV9UUlVFOwogfQogCiBmbG9hdCBld2tfdmlld190ZXh0X3pvb21fZ2V0KGNvbnN0IEV2YXNf
T2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmll
dywgc2QsIC0xLjApOwotICAgIHJldHVybiBld2tfZnJhbWVfdGV4dF96b29tX2dldChzZC0+bWFp
bl9mcmFtZSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERh
dGEsIC0xLjApOworICAgIHJldHVybiBld2tfZnJhbWVfdGV4dF96b29tX2dldChzbWFydERhdGEt
Pm1haW5fZnJhbWUpOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfdGV4dF96b29tX3NldChFdmFz
X09iamVjdCogZXdrVmlldywgZmxvYXQgdGV4dFpvb21GYWN0b3IpCiB7Ci0gICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgcmV0dXJuIGV3
a19mcmFtZV90ZXh0X3pvb21fc2V0KHNkLT5tYWluX2ZyYW1lLCB0ZXh0Wm9vbUZhY3Rvcik7Cisg
ICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFM
U0UpOworICAgIHJldHVybiBld2tfZnJhbWVfdGV4dF96b29tX3NldChzbWFydERhdGEtPm1haW5f
ZnJhbWUsIHRleHRab29tRmFjdG9yKTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3pvb21fd2Vh
a19zbW9vdGhfc2NhbGVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIHJl
dHVybiBzZC0+em9vbV93ZWFrX3Ntb290aF9zY2FsZTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1Jf
UkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgcmV0dXJuIHNtYXJ0
RGF0YS0+em9vbV93ZWFrX3Ntb290aF9zY2FsZTsKIH0KIAogdm9pZCBld2tfdmlld196b29tX3dl
YWtfc21vb3RoX3NjYWxlX3NldChFdmFzX09iamVjdCogZXdrVmlldywgRWluYV9Cb29sIHNtb290
aFNjYWxlKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QpOwor
ICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhKTsKICAgICBz
bW9vdGhTY2FsZSA9ICEhc21vb3RoU2NhbGU7Ci0gICAgaWYgKHNkLT56b29tX3dlYWtfc21vb3Ro
X3NjYWxlID09IHNtb290aFNjYWxlKQorICAgIGlmIChzbWFydERhdGEtPnpvb21fd2Vha19zbW9v
dGhfc2NhbGUgPT0gc21vb3RoU2NhbGUpCiAgICAgICAgIHJldHVybjsKLSAgICBzZC0+em9vbV93
ZWFrX3Ntb290aF9zY2FsZSA9IHNtb290aFNjYWxlOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOKHNkLT5hcGkpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGkt
Pnpvb21fd2Vha19zbW9vdGhfc2NhbGVfc2V0KTsKLSAgICBzZC0+YXBpLT56b29tX3dlYWtfc21v
b3RoX3NjYWxlX3NldChzZCwgc21vb3RoU2NhbGUpOworICAgIHNtYXJ0RGF0YS0+em9vbV93ZWFr
X3Ntb290aF9zY2FsZSA9IHNtb290aFNjYWxlOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOKHNtYXJ0RGF0YS0+YXBpKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFy
dERhdGEtPmFwaS0+em9vbV93ZWFrX3Ntb290aF9zY2FsZV9zZXQpOworICAgIHNtYXJ0RGF0YS0+
YXBpLT56b29tX3dlYWtfc21vb3RoX3NjYWxlX3NldChzbWFydERhdGEsIHNtb290aFNjYWxlKTsK
IH0KIAogRWluYV9Cb29sIGV3a192aWV3X3pvb21fd2Vha19zZXQoRXZhc19PYmplY3QqIGV3a1Zp
ZXcsIGZsb2F0IHpvb20sIEV2YXNfQ29vcmQgY2VudGVyWCwgRXZhc19Db29yZCBjZW50ZXJZKQog
ewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0Up
OwotICAgIEVXS19WSUVXX1BSSVZfR0VUKHNkLCBwcml2KTsKKyAgICBFV0tfVklFV19TRF9HRVRf
T1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdf
UFJJVl9HRVQoc21hcnREYXRhLCBwcml2KTsKIAotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOX1ZBTChzZC0+YXBpLCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTl9WQUwoc2QtPmFwaS0+em9vbV93ZWFrX3NldCwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+YXBpLCBFSU5BX0ZBTFNFKTsKKyAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5hcGktPnpvb21fd2Vh
a19zZXQsIEVJTkFfRkFMU0UpOwogCi0gICAgaWYgKCFwcml2LT5zZXR0aW5ncy56b29tX3Jhbmdl
LnVzZXJfc2NhbGFibGUpIHsKKyAgICBpZiAoIXByaXYtPnNldHRpbmdzLnpvb21SYW5nZS51c2Vy
U2NhbGFibGUpIHsKICAgICAgICAgV1JOKCJ1c2VyU2NhbGFibGUgaXMgZmFsc2UiKTsKICAgICAg
ICAgcmV0dXJuIEVJTkFfRkFMU0U7CiAgICAgfQogCi0gICAgaWYgKHpvb20gPCBwcml2LT5zZXR0
aW5ncy56b29tX3JhbmdlLm1pbl9zY2FsZSkgewotICAgICAgICBXUk4oInpvb20gbGV2ZWwgaXMg
PCAlZiA6ICVmIiwgcHJpdi0+c2V0dGluZ3Muem9vbV9yYW5nZS5taW5fc2NhbGUsIHpvb20pOwor
ICAgIGlmICh6b29tIDwgcHJpdi0+c2V0dGluZ3Muem9vbVJhbmdlLm1pblNjYWxlKSB7CisgICAg
ICAgIFdSTigiem9vbSBsZXZlbCBpcyA8ICVmIDogJWYiLCBwcml2LT5zZXR0aW5ncy56b29tUmFu
Z2UubWluU2NhbGUsIHpvb20pOwogICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKICAgICB9Ci0g
ICAgaWYgKHpvb20gPiBwcml2LT5zZXR0aW5ncy56b29tX3JhbmdlLm1heF9zY2FsZSkgewotICAg
ICAgICBXUk4oInpvb20gbGV2ZWwgaXMgPiAlZiA6ICVmIiwgcHJpdi0+c2V0dGluZ3Muem9vbV9y
YW5nZS5tYXhfc2NhbGUsIHpvb20pOworICAgIGlmICh6b29tID4gcHJpdi0+c2V0dGluZ3Muem9v
bVJhbmdlLm1heFNjYWxlKSB7CisgICAgICAgIFdSTigiem9vbSBsZXZlbCBpcyA+ICVmIDogJWYi
LCBwcml2LT5zZXR0aW5ncy56b29tUmFuZ2UubWF4U2NhbGUsIHpvb20pOwogICAgICAgICByZXR1
cm4gRUlOQV9GQUxTRTsKICAgICB9CiAKLSAgICBzZC0+YW5pbWF0ZWRfem9vbS56b29tLnN0YXJ0
ID0gZXdrX2ZyYW1lX3BhZ2Vfem9vbV9nZXQoc2QtPm1haW5fZnJhbWUpOwotICAgIHNkLT5hbmlt
YXRlZF96b29tLnpvb20uZW5kID0gem9vbTsKLSAgICBzZC0+YW5pbWF0ZWRfem9vbS56b29tLmN1
cnJlbnQgPSB6b29tOwotICAgIHJldHVybiBzZC0+YXBpLT56b29tX3dlYWtfc2V0KHNkLCB6b29t
LCBjZW50ZXJYLCBjZW50ZXJZKTsKKyAgICBzbWFydERhdGEtPmFuaW1hdGVkX3pvb20uem9vbS5z
dGFydCA9IGV3a19mcmFtZV9wYWdlX3pvb21fZ2V0KHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSk7Cisg
ICAgc21hcnREYXRhLT5hbmltYXRlZF96b29tLnpvb20uZW5kID0gem9vbTsKKyAgICBzbWFydERh
dGEtPmFuaW1hdGVkX3pvb20uem9vbS5jdXJyZW50ID0gem9vbTsKKyAgICByZXR1cm4gc21hcnRE
YXRhLT5hcGktPnpvb21fd2Vha19zZXQoc21hcnREYXRhLCB6b29tLCBjZW50ZXJYLCBjZW50ZXJZ
KTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3pvb21fYW5pbWF0ZWRfbWFya19zdGFydChFdmFz
X09iamVjdCogZXdrVmlldywgZmxvYXQgem9vbSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1Jf
UkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBzZC0+YW5pbWF0ZWRfem9vbS56
b29tLnN0YXJ0ID0gem9vbTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcs
IHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgc21hcnREYXRhLT5hbmltYXRlZF96b29tLnpv
b20uc3RhcnQgPSB6b29tOwogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKIEVpbmFfQm9vbCBl
d2tfdmlld196b29tX2FuaW1hdGVkX21hcmtfZW5kKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBmbG9h
dCB6b29tKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJ
TkFfRkFMU0UpOwotICAgIHNkLT5hbmltYXRlZF96b29tLnpvb20uZW5kID0gem9vbTsKKyAgICBF
V0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7
CisgICAgc21hcnREYXRhLT5hbmltYXRlZF96b29tLnpvb20uZW5kID0gem9vbTsKICAgICByZXR1
cm4gRUlOQV9UUlVFOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9tYXJr
X2N1cnJlbnQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGZsb2F0IHpvb20pCiB7Ci0gICAgRVdLX1ZJ
RVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgc2QtPmFu
aW1hdGVkX3pvb20uem9vbS5jdXJyZW50ID0gem9vbTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1Jf
UkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgc21hcnREYXRhLT5h
bmltYXRlZF96b29tLnpvb20uY3VycmVudCA9IHpvb207CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsK
IH0KIAogRWluYV9Cb29sIGV3a192aWV3X3pvb21fYW5pbWF0ZWRfbWFya19zdG9wKEV2YXNfT2Jq
ZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywg
c2QsIEVJTkFfRkFMU0UpOwotICAgIF9ld2tfdmlld196b29tX2FuaW1hdGVkX21hcmtfc3RvcChz
ZCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJ
TkFfRkFMU0UpOworICAgIF9ld2tfdmlld196b29tX2FuaW1hdGVkX21hcmtfc3RvcChzbWFydERh
dGEpOwogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld196b29t
X2FuaW1hdGVkX3NldChFdmFzX09iamVjdCogZXdrVmlldywgZmxvYXQgem9vbSwgZmxvYXQgZHVy
YXRpb24sIEV2YXNfQ29vcmQgY2VudGVyWCwgRXZhc19Db29yZCBjZW50ZXJZKQogewogICAgIGRv
dWJsZSBub3c7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlO
QV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5B
X0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmFwaSwgRUlO
QV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5hcGktPnpv
b21fd2Vha19zZXQsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9P
Ul9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5hcGksIEVJTkFfRkFMU0UpOworICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmFwaS0+em9vbV93ZWFrX3NldCwg
RUlOQV9GQUxTRSk7CiAKLSAgICBpZiAoIXByaXYtPnNldHRpbmdzLnpvb21fcmFuZ2UudXNlcl9z
Y2FsYWJsZSkgeworICAgIGlmICghcHJpdi0+c2V0dGluZ3Muem9vbVJhbmdlLnVzZXJTY2FsYWJs
ZSkgewogICAgICAgICBXUk4oInVzZXJTY2FsYWJsZSBpcyBmYWxzZSIpOwogICAgICAgICByZXR1
cm4gRUlOQV9GQUxTRTsKICAgICB9CiAKLSAgICBpZiAoem9vbSA8IHByaXYtPnNldHRpbmdzLnpv
b21fcmFuZ2UubWluX3NjYWxlKSB7Ci0gICAgICAgIFdSTigiem9vbSBsZXZlbCBpcyA8ICVmIDog
JWYiLCBwcml2LT5zZXR0aW5ncy56b29tX3JhbmdlLm1pbl9zY2FsZSwgem9vbSk7CisgICAgaWYg
KHpvb20gPCBwcml2LT5zZXR0aW5ncy56b29tUmFuZ2UubWluU2NhbGUpIHsKKyAgICAgICAgV1JO
KCJ6b29tIGxldmVsIGlzIDwgJWYgOiAlZiIsIHByaXYtPnNldHRpbmdzLnpvb21SYW5nZS5taW5T
Y2FsZSwgem9vbSk7CiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwogICAgIH0KLSAgICBpZiAo
em9vbSA+IHByaXYtPnNldHRpbmdzLnpvb21fcmFuZ2UubWF4X3NjYWxlKSB7Ci0gICAgICAgIFdS
Tigiem9vbSBsZXZlbCBpcyA+ICVmIDogJWYiLCBwcml2LT5zZXR0aW5ncy56b29tX3JhbmdlLm1h
eF9zY2FsZSwgem9vbSk7CisgICAgaWYgKHpvb20gPiBwcml2LT5zZXR0aW5ncy56b29tUmFuZ2Uu
bWF4U2NhbGUpIHsKKyAgICAgICAgV1JOKCJ6b29tIGxldmVsIGlzID4gJWYgOiAlZiIsIHByaXYt
PnNldHRpbmdzLnpvb21SYW5nZS5tYXhTY2FsZSwgem9vbSk7CiAgICAgICAgIHJldHVybiBFSU5B
X0ZBTFNFOwogICAgIH0KIAotICAgIGlmIChwcml2LT5hbmltYXRlZF96b29tLmFuaW1hdG9yKQot
ICAgICAgICBwcml2LT5hbmltYXRlZF96b29tLnpvb20uc3RhcnQgPSBfZXdrX3ZpZXdfem9vbV9h
bmltYXRlZF9jdXJyZW50KHByaXYpOworICAgIGlmIChwcml2LT5hbmltYXRlZFpvb20uYW5pbWF0
b3IpCisgICAgICAgIHByaXYtPmFuaW1hdGVkWm9vbS56b29tLnN0YXJ0ID0gX2V3a192aWV3X3pv
b21fYW5pbWF0ZWRfY3VycmVudChwcml2KTsKICAgICBlbHNlIHsKLSAgICAgICAgcHJpdi0+YW5p
bWF0ZWRfem9vbS56b29tLnN0YXJ0ID0gZXdrX2ZyYW1lX3BhZ2Vfem9vbV9nZXQoc2QtPm1haW5f
ZnJhbWUpOwotICAgICAgICBfZXdrX3ZpZXdfem9vbV9hbmltYXRpb25fc3RhcnQoc2QpOworICAg
ICAgICBwcml2LT5hbmltYXRlZFpvb20uem9vbS5zdGFydCA9IGV3a19mcmFtZV9wYWdlX3pvb21f
Z2V0KHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSk7CisgICAgICAgIF9ld2tfdmlld196b29tX2FuaW1h
dGlvbl9zdGFydChzbWFydERhdGEpOwogICAgIH0KIAogICAgIGlmIChjZW50ZXJYIDwgMCkKQEAg
LTE3MjgsNTAgKzE3MjgsNTAgQEAgRWluYV9Cb29sIGV3a192aWV3X3pvb21fYW5pbWF0ZWRfc2V0
KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBmbG9hdCB6b29tLCBmbG9hdCBkdXIKICAgICAgICAgY2Vu
dGVyWSA9IDA7CiAKICAgICBub3cgPSBlY29yZV9sb29wX3RpbWVfZ2V0KCk7Ci0gICAgcHJpdi0+
YW5pbWF0ZWRfem9vbS50aW1lLnN0YXJ0ID0gbm93OwotICAgIHByaXYtPmFuaW1hdGVkX3pvb20u
dGltZS5lbmQgPSBub3cgKyBkdXJhdGlvbjsKLSAgICBwcml2LT5hbmltYXRlZF96b29tLnRpbWUu
ZHVyYXRpb24gPSBkdXJhdGlvbjsKLSAgICBwcml2LT5hbmltYXRlZF96b29tLnpvb20uZW5kID0g
em9vbTsKLSAgICBwcml2LT5hbmltYXRlZF96b29tLnpvb20ucmFuZ2UgPSAocHJpdi0+YW5pbWF0
ZWRfem9vbS56b29tLmVuZCAtIHByaXYtPmFuaW1hdGVkX3pvb20uem9vbS5zdGFydCk7Ci0gICAg
cHJpdi0+YW5pbWF0ZWRfem9vbS5jZW50ZXIueCA9IGNlbnRlclg7Ci0gICAgcHJpdi0+YW5pbWF0
ZWRfem9vbS5jZW50ZXIueSA9IGNlbnRlclk7Ci0gICAgc2QtPmFuaW1hdGVkX3pvb20uem9vbS5j
dXJyZW50ID0gcHJpdi0+YW5pbWF0ZWRfem9vbS56b29tLnN0YXJ0OwotICAgIHNkLT5hbmltYXRl
ZF96b29tLnpvb20uc3RhcnQgPSBwcml2LT5hbmltYXRlZF96b29tLnpvb20uc3RhcnQ7Ci0gICAg
c2QtPmFuaW1hdGVkX3pvb20uem9vbS5lbmQgPSBwcml2LT5hbmltYXRlZF96b29tLnpvb20uZW5k
OworICAgIHByaXYtPmFuaW1hdGVkWm9vbS50aW1lLnN0YXJ0ID0gbm93OworICAgIHByaXYtPmFu
aW1hdGVkWm9vbS50aW1lLmVuZCA9IG5vdyArIGR1cmF0aW9uOworICAgIHByaXYtPmFuaW1hdGVk
Wm9vbS50aW1lLmR1cmF0aW9uID0gZHVyYXRpb247CisgICAgcHJpdi0+YW5pbWF0ZWRab29tLnpv
b20uZW5kID0gem9vbTsKKyAgICBwcml2LT5hbmltYXRlZFpvb20uem9vbS5yYW5nZSA9IChwcml2
LT5hbmltYXRlZFpvb20uem9vbS5lbmQgLSBwcml2LT5hbmltYXRlZFpvb20uem9vbS5zdGFydCk7
CisgICAgcHJpdi0+YW5pbWF0ZWRab29tLmNlbnRlci54ID0gY2VudGVyWDsKKyAgICBwcml2LT5h
bmltYXRlZFpvb20uY2VudGVyLnkgPSBjZW50ZXJZOworICAgIHNtYXJ0RGF0YS0+YW5pbWF0ZWRf
em9vbS56b29tLmN1cnJlbnQgPSBwcml2LT5hbmltYXRlZFpvb20uem9vbS5zdGFydDsKKyAgICBz
bWFydERhdGEtPmFuaW1hdGVkX3pvb20uem9vbS5zdGFydCA9IHByaXYtPmFuaW1hdGVkWm9vbS56
b29tLnN0YXJ0OworICAgIHNtYXJ0RGF0YS0+YW5pbWF0ZWRfem9vbS56b29tLmVuZCA9IHByaXYt
PmFuaW1hdGVkWm9vbS56b29tLmVuZDsKIAogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKIEVp
bmFfQm9vbCBld2tfdmlld19wcmVfcmVuZGVyX3JlZ2lvbihFdmFzX09iamVjdCogZXdrVmlldywg
RXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHksIEV2YXNfQ29vcmQgd2lkdGgsIEV2YXNfQ29vcmQg
aGVpZ2h0LCBmbG9hdCB6b29tKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdr
Vmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihz
ZCwgcHJpdiwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFM
KHNkLT5hcGktPnByZV9yZW5kZXJfcmVnaW9uLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19T
RF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdL
X1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7Cisg
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+YXBpLT5wcmVfcmVu
ZGVyX3JlZ2lvbiwgRUlOQV9GQUxTRSk7CiAgICAgZmxvYXQgY3VyX3pvb207Ci0gICAgRXZhc19D
b29yZCBjdywgY2g7CisgICAgRXZhc19Db29yZCBjb250ZW50c1dpZHRoLCBjb250ZW50c0hlaWdo
dDsKIAogICAgIC8qIFdoZW4gZG9pbmcgYW5pbWF0ZWQgem9vbSBpdCdzIG5vdCBwb3NzaWJsZSB0
byBjYWxsIHByZS1yZW5kZXIgc2luY2UgaXQKICAgICAgKiB3b3VsZCBzY3JldyB1cCBwYXJhbWV0
ZXJzIHRoYXQgYW5pbWF0aW9uIGlzIGN1cnJlbnRseSB1c2luZwogICAgICAqLwotICAgIGlmIChw
cml2LT5hbmltYXRlZF96b29tLmFuaW1hdG9yKQorICAgIGlmIChwcml2LT5hbmltYXRlZFpvb20u
YW5pbWF0b3IpCiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwogCi0gICAgY3VyX3pvb20gPSBl
d2tfZnJhbWVfcGFnZV96b29tX2dldChzZC0+bWFpbl9mcmFtZSk7CisgICAgY3VyX3pvb20gPSBl
d2tfZnJhbWVfcGFnZV96b29tX2dldChzbWFydERhdGEtPm1haW5fZnJhbWUpOwogCiAgICAgaWYg
KGN1cl96b29tIDwgMC4wMDAwMSkKICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7Ci0gICAgaWYg
KCFld2tfZnJhbWVfY29udGVudHNfc2l6ZV9nZXQoc2QtPm1haW5fZnJhbWUsICZjdywgJmNoKSkK
KyAgICBpZiAoIWV3a19mcmFtZV9jb250ZW50c19zaXplX2dldChzbWFydERhdGEtPm1haW5fZnJh
bWUsICZjb250ZW50c1dpZHRoLCAmY29udGVudHNIZWlnaHQpKQogICAgICAgICByZXR1cm4gRUlO
QV9GQUxTRTsKIAotICAgIGN3ICo9IHpvb20gLyBjdXJfem9vbTsKLSAgICBjaCAqPSB6b29tIC8g
Y3VyX3pvb207Ci0gICAgREJHKCJyZWdpb24gJWQsJWQrJWR4JWQgQCAlZiBjb250ZW50cz0lZHgl
ZCIsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHpvb20sIGN3LCBjaCk7CisgICAgY29udGVudHNXaWR0
aCAqPSB6b29tIC8gY3VyX3pvb207CisgICAgY29udGVudHNIZWlnaHQgKj0gem9vbSAvIGN1cl96
b29tOworICAgIERCRygicmVnaW9uICVkLCVkKyVkeCVkIEAgJWYgY29udGVudHM9JWR4JWQiLCB4
LCB5LCB3aWR0aCwgaGVpZ2h0LCB6b29tLCBjb250ZW50c1dpZHRoLCBjb250ZW50c0hlaWdodCk7
CiAKLSAgICBpZiAoeCArIHdpZHRoID4gY3cpCi0gICAgICAgIHdpZHRoID0gY3cgLSB4OworICAg
IGlmICh4ICsgd2lkdGggPiBjb250ZW50c1dpZHRoKQorICAgICAgICB3aWR0aCA9IGNvbnRlbnRz
V2lkdGggLSB4OwogCi0gICAgaWYgKHkgKyBoZWlnaHQgPiBjaCkKLSAgICAgICAgaGVpZ2h0ID0g
Y2ggLSB5OworICAgIGlmICh5ICsgaGVpZ2h0ID4gY29udGVudHNIZWlnaHQpCisgICAgICAgIGhl
aWdodCA9IGNvbnRlbnRzSGVpZ2h0IC0geTsKIAogICAgIGlmICh4IDwgMCkgewogICAgICAgICB3
aWR0aCArPSB4OwpAQCAtMTc4Miw2NCArMTc4Miw2NCBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfcHJl
X3JlbmRlcl9yZWdpb24oRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV2YXNfQ29vcmQgeCwgRXZhc19D
bwogICAgICAgICB5ID0gMDsKICAgICB9CiAKLSAgICByZXR1cm4gc2QtPmFwaS0+cHJlX3JlbmRl
cl9yZWdpb24oc2QsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHpvb20pOworICAgIHJldHVybiBzbWFy
dERhdGEtPmFwaS0+cHJlX3JlbmRlcl9yZWdpb24oc21hcnREYXRhLCB4LCB5LCB3aWR0aCwgaGVp
Z2h0LCB6b29tKTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3ByZV9yZW5kZXJfcmVsYXRpdmVf
cmFkaXVzKEV2YXNfT2JqZWN0KiBld2tWaWV3LCB1bnNpZ25lZCBpbnQgbnVtYmVyKQogewotICAg
IEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAg
IEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7Ci0gICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5hcGktPnByZV9yZW5kZXJfcmVsYXRp
dmVfcmFkaXVzLCBFSU5BX0ZBTFNFKTsKLSAgICBmbG9hdCBjdXJfem9vbTsKKyAgICBFV0tfVklF
V19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAg
RVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7
CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+YXBpLT5wcmVf
cmVuZGVyX3JlbGF0aXZlX3JhZGl1cywgRUlOQV9GQUxTRSk7CisgICAgZmxvYXQgY3VycmVudFpv
b207CiAKLSAgICBpZiAocHJpdi0+YW5pbWF0ZWRfem9vbS5hbmltYXRvcikKKyAgICBpZiAocHJp
di0+YW5pbWF0ZWRab29tLmFuaW1hdG9yKQogICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKIAot
ICAgIGN1cl96b29tID0gZXdrX2ZyYW1lX3BhZ2Vfem9vbV9nZXQoc2QtPm1haW5fZnJhbWUpOwot
ICAgIHJldHVybiBzZC0+YXBpLT5wcmVfcmVuZGVyX3JlbGF0aXZlX3JhZGl1cyhzZCwgbnVtYmVy
LCBjdXJfem9vbSk7CisgICAgY3VycmVudFpvb20gPSBld2tfZnJhbWVfcGFnZV96b29tX2dldChz
bWFydERhdGEtPm1haW5fZnJhbWUpOworICAgIHJldHVybiBzbWFydERhdGEtPmFwaS0+cHJlX3Jl
bmRlcl9yZWxhdGl2ZV9yYWRpdXMoc21hcnREYXRhLCBudW1iZXIsIGN1cnJlbnRab29tKTsKIH0K
IAogdW5zaWduZWQgaW50IGV3a192aWV3X2ltaF9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1Zp
ZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgMCk7Ci0g
ICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCAwKTsKKyAgICBFV0tfVklF
V19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgMCk7CisgICAgRVdLX1ZJRVdf
UFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgMCk7CiAgICAgcmV0dXJuIHByaXYt
PmltaDsKIH0KIAogdm9pZCBld2tfdmlld19wcmVfcmVuZGVyX2NhbmNlbChFdmFzX09iamVjdCog
ZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkKTsK
LSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpLT5wcmVfcmVuZGVyX2NhbmNl
bCk7Ci0gICAgc2QtPmFwaS0+cHJlX3JlbmRlcl9jYW5jZWwoc2QpOworICAgIEVXS19WSUVXX1NE
X0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTihzbWFydERhdGEtPmFwaS0+cHJlX3JlbmRlcl9jYW5jZWwpOworICAgIHNtYXJ0
RGF0YS0+YXBpLT5wcmVfcmVuZGVyX2NhbmNlbChzbWFydERhdGEpOwogfQogCiBFaW5hX0Jvb2wg
ZXdrX3ZpZXdfZW5hYmxlX3JlbmRlcihjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmFwaS0+ZW5hYmxlX3JlbmRlciwg
RUlOQV9GQUxTRSk7Ci0gICAgcmV0dXJuIHNkLT5hcGktPmVuYWJsZV9yZW5kZXIoc2QpOworICAg
IEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNF
KTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5hcGktPmVu
YWJsZV9yZW5kZXIsIEVJTkFfRkFMU0UpOworICAgIHJldHVybiBzbWFydERhdGEtPmFwaS0+ZW5h
YmxlX3JlbmRlcihzbWFydERhdGEpOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfZGlzYWJsZV9y
ZW5kZXIoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk5fVkFMKHNkLT5hcGktPmRpc2FibGVfcmVuZGVyLCBFSU5BX0ZBTFNFKTsKLSAg
ICByZXR1cm4gc2QtPmFwaS0+ZGlzYWJsZV9yZW5kZXIoc2QpOworICAgIEVXS19WSUVXX1NEX0dF
VF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5hcGktPmRpc2FibGVfcmVuZGVyLCBF
SU5BX0ZBTFNFKTsKKyAgICByZXR1cm4gc21hcnREYXRhLT5hcGktPmRpc2FibGVfcmVuZGVyKHNt
YXJ0RGF0YSk7CiB9CiAKIGNvbnN0IGNoYXIqIGV3a192aWV3X3NldHRpbmdfdXNlcl9hZ2VudF9n
ZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihld2tWaWV3LCBzZCwgMCk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJO
KHNkLCBwcml2LCAwKTsKLSAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MudXNlcl9hZ2VudDsKKyAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgMCk7CisgICAg
RVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgMCk7CisgICAgcmV0
dXJuIHByaXYtPnNldHRpbmdzLnVzZXJBZ2VudDsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3Nl
dHRpbmdfdXNlcl9hZ2VudF9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGNvbnN0IGNoYXIqIHVz
ZXJBZ2VudCkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBF
SU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJ
TkFfRkFMU0UpOwotICAgIGlmIChlaW5hX3N0cmluZ3NoYXJlX3JlcGxhY2UoJnByaXYtPnNldHRp
bmdzLnVzZXJfYWdlbnQsIHVzZXJBZ2VudCkpIHsKLSAgICAgICAgV2ViQ29yZTo6RnJhbWVMb2Fk
ZXJDbGllbnRFZmwqIGNsaWVudCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xp
ZW50RWZsKj4ocHJpdi0+bWFpbl9mcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpKTsKKyAgICBFV0tf
VklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7Cisg
ICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxT
RSk7CisgICAgaWYgKGVpbmFfc3RyaW5nc2hhcmVfcmVwbGFjZSgmcHJpdi0+c2V0dGluZ3MudXNl
ckFnZW50LCB1c2VyQWdlbnQpKSB7CisgICAgICAgIFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50
RWZsKiBjbGllbnQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEVmbCo+
KHByaXYtPm1haW5GcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpKTsKICAgICAgICAgY2xpZW50LT5z
ZXRDdXN0b21Vc2VyQWdlbnQoU3RyaW5nOjpmcm9tVVRGOCh1c2VyQWdlbnQpKTsKICAgICB9CiAg
ICAgcmV0dXJuIEVJTkFfVFJVRTsKQEAgLTE4NDcsMjIzICsxODQ3LDIyMyBAQCBFaW5hX0Jvb2wg
ZXdrX3ZpZXdfc2V0dGluZ191c2VyX2FnZW50X3NldChFdmFzX09iamVjdCogZXdrVmlldywgY29u
c3QgY2hhciogdXNlcgogCiBjb25zdCBjaGFyKiBld2tfdmlld19zZXR0aW5nX3VzZXJfc3R5bGVz
aGVldF9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgMCk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1Jf
UkVUVVJOKHNkLCBwcml2LCAwKTsKLSAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MudXNlcl9zdHls
ZXNoZWV0OworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRh
LCAwKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCAw
KTsKKyAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MudXNlclN0eWxlc2hlZXQ7CiB9CiAKIEVpbmFf
Qm9vbCBld2tfdmlld19zZXR0aW5nX3VzZXJfc3R5bGVzaGVldF9zZXQoRXZhc19PYmplY3QqIGV3
a1ZpZXcsIGNvbnN0IGNoYXIqIHVyaSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJO
KGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRV
Uk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwotICAgIGlmIChlaW5hX3N0cmluZ3NoYXJlX3JlcGxh
Y2UoJnByaXYtPnNldHRpbmdzLnVzZXJfc3R5bGVzaGVldCwgdXJpKSkgeworICAgIEVXS19WSUVX
X1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBF
V0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsK
KyAgICBpZiAoZWluYV9zdHJpbmdzaGFyZV9yZXBsYWNlKCZwcml2LT5zZXR0aW5ncy51c2VyU3R5
bGVzaGVldCwgdXJpKSkgewogICAgICAgICBXZWJDb3JlOjpLVVJMIGt1cmwoV2ViQ29yZTo6S1VS
TCgpLCBTdHJpbmc6OmZyb21VVEY4KHVyaSkpOwotICAgICAgICBwcml2LT5wYWdlX3NldHRpbmdz
LT5zZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uKGt1cmwpOworICAgICAgICBwcml2LT5wYWdlU2V0
dGluZ3MtPnNldFVzZXJTdHlsZVNoZWV0TG9jYXRpb24oa3VybCk7CiAgICAgfQogICAgIHJldHVy
biBFSU5BX1RSVUU7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2F1dG9fbG9hZF9p
bWFnZXNfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NE
X0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BS
SVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7Ci0gICAgcmV0dXJuIHByaXYt
PnNldHRpbmdzLmF1dG9fbG9hZF9pbWFnZXM7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
Tihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VU
X09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIHJldHVybiBwcml2
LT5zZXR0aW5ncy5hdXRvTG9hZEltYWdlczsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3NldHRp
bmdfYXV0b19sb2FkX2ltYWdlc19zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCBh
dXRvbWF0aWMpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwg
RUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBF
SU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0
RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0
RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgYXV0b21hdGljID0gISFhdXRvbWF0aWM7Ci0g
ICAgaWYgKHByaXYtPnNldHRpbmdzLmF1dG9fbG9hZF9pbWFnZXMgIT0gYXV0b21hdGljKSB7Ci0g
ICAgICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNldExvYWRzSW1hZ2VzQXV0b21hdGljYWxseShh
dXRvbWF0aWMpOwotICAgICAgICBwcml2LT5zZXR0aW5ncy5hdXRvX2xvYWRfaW1hZ2VzID0gYXV0
b21hdGljOworICAgIGlmIChwcml2LT5zZXR0aW5ncy5hdXRvTG9hZEltYWdlcyAhPSBhdXRvbWF0
aWMpIHsKKyAgICAgICAgcHJpdi0+cGFnZVNldHRpbmdzLT5zZXRMb2Fkc0ltYWdlc0F1dG9tYXRp
Y2FsbHkoYXV0b21hdGljKTsKKyAgICAgICAgcHJpdi0+c2V0dGluZ3MuYXV0b0xvYWRJbWFnZXMg
PSBhdXRvbWF0aWM7CiAgICAgfQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKIEVpbmFfQm9v
bCBld2tfdmlld19zZXR0aW5nX2F1dG9fc2hyaW5rX2ltYWdlc19nZXQoY29uc3QgRXZhc19PYmpl
Y3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBz
ZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2
LCBFSU5BX0ZBTFNFKTsKLSAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuYXV0b19zaHJpbmtfaW1h
Z2VzOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBF
SU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBw
cml2LCBFSU5BX0ZBTFNFKTsKKyAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuYXV0b1Nocmlua0lt
YWdlczsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfYXV0b19zaHJpbmtfaW1hZ2Vz
X3NldChFdmFzX09iamVjdCogZXdrVmlldywgRWluYV9Cb29sIGF1dG9tYXRpYykKIHsKLSAgICBF
V0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBF
V0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsK
KyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZB
TFNFKTsKICAgICBhdXRvbWF0aWMgPSAhIWF1dG9tYXRpYzsKLSAgICBpZiAocHJpdi0+c2V0dGlu
Z3MuYXV0b19zaHJpbmtfaW1hZ2VzICE9IGF1dG9tYXRpYykgewotICAgICAgICBwcml2LT5wYWdl
X3NldHRpbmdzLT5zZXRTaHJpbmtzU3RhbmRhbG9uZUltYWdlc1RvRml0KGF1dG9tYXRpYyk7Ci0g
ICAgICAgIHByaXYtPnNldHRpbmdzLmF1dG9fc2hyaW5rX2ltYWdlcyA9IGF1dG9tYXRpYzsKKyAg
ICBpZiAocHJpdi0+c2V0dGluZ3MuYXV0b1Nocmlua0ltYWdlcyAhPSBhdXRvbWF0aWMpIHsKKyAg
ICAgICAgcHJpdi0+cGFnZVNldHRpbmdzLT5zZXRTaHJpbmtzU3RhbmRhbG9uZUltYWdlc1RvRml0
KGF1dG9tYXRpYyk7CisgICAgICAgIHByaXYtPnNldHRpbmdzLmF1dG9TaHJpbmtJbWFnZXMgPSBh
dXRvbWF0aWM7CiAgICAgfQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKIEVpbmFfQm9vbCBl
d2tfdmlld19zZXR0aW5nX2VuYWJsZV9hdXRvX3Jlc2l6ZV93aW5kb3dfZ2V0KGNvbnN0IEV2YXNf
T2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmll
dywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwg
cHJpdiwgRUlOQV9GQUxTRSk7Ci0gICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmVuYWJsZV9hdXRv
X3Jlc2l6ZV93aW5kb3c7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBz
bWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihz
bWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5l
bmFibGVBdXRvUmVzaXplV2luZG93OwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19l
bmFibGVfYXV0b19yZXNpemVfd2luZG93X3NldChFdmFzX09iamVjdCogZXdrVmlldywgRWluYV9C
b29sIHJlc2l6YWJsZSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcs
IHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHBy
aXYsIEVJTkFfRkFMU0UpOwotICAgIHByaXYtPnNldHRpbmdzLmVuYWJsZV9hdXRvX3Jlc2l6ZV93
aW5kb3cgPSByZXNpemFibGU7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3
LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVS
TihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIHByaXYtPnNldHRpbmdzLmVuYWJs
ZUF1dG9SZXNpemVXaW5kb3cgPSByZXNpemFibGU7CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0K
IAogRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfZW5hYmxlX3NjcmlwdHNfZ2V0KGNvbnN0IEV2
YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdr
Vmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihz
ZCwgcHJpdiwgRUlOQV9GQUxTRSk7Ci0gICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmVuYWJsZV9z
Y3JpcHRzOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRh
LCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRh
LCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZW5hYmxlU2Ny
aXB0czsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfZW5hYmxlX3NjcmlwdHNfc2V0
KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wgZW5hYmxlKQogewotICAgIEVXS19WSUVX
X1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVX
X1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVX
S19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOwog
ICAgIGVuYWJsZSA9ICEhZW5hYmxlOwotICAgIGlmIChwcml2LT5zZXR0aW5ncy5lbmFibGVfc2Ny
aXB0cyAhPSBlbmFibGUpIHsKLSAgICAgICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0SmF2YVNj
cmlwdEVuYWJsZWQoZW5hYmxlKTsKLSAgICAgICAgcHJpdi0+c2V0dGluZ3MuZW5hYmxlX3Njcmlw
dHMgPSBlbmFibGU7CisgICAgaWYgKHByaXYtPnNldHRpbmdzLmVuYWJsZVNjcmlwdHMgIT0gZW5h
YmxlKSB7CisgICAgICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0SmF2YVNjcmlwdEVuYWJsZWQo
ZW5hYmxlKTsKKyAgICAgICAgcHJpdi0+c2V0dGluZ3MuZW5hYmxlU2NyaXB0cyA9IGVuYWJsZTsK
ICAgICB9CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3Nl
dHRpbmdfZW5hYmxlX3BsdWdpbnNfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewot
ICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwot
ICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7Ci0g
ICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmVuYWJsZV9wbHVnaW5zOworICAgIEVXS19WSUVXX1NE
X0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tf
VklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAg
ICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZW5hYmxlUGx1Z2luczsKIH0KIAogRWluYV9Cb29sIGV3
a192aWV3X3NldHRpbmdfZW5hYmxlX3BsdWdpbnNfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBF
aW5hX0Jvb2wgZW5hYmxlKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmll
dywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwg
cHJpdiwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3
LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVS
TihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIGVuYWJsZSA9ICEhZW5hYmxlOwot
ICAgIGlmIChwcml2LT5zZXR0aW5ncy5lbmFibGVfcGx1Z2lucyAhPSBlbmFibGUpIHsKLSAgICAg
ICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0UGx1Z2luc0VuYWJsZWQoZW5hYmxlKTsKLSAgICAg
ICAgcHJpdi0+c2V0dGluZ3MuZW5hYmxlX3BsdWdpbnMgPSBlbmFibGU7CisgICAgaWYgKHByaXYt
PnNldHRpbmdzLmVuYWJsZVBsdWdpbnMgIT0gZW5hYmxlKSB7CisgICAgICAgIHByaXYtPnBhZ2VT
ZXR0aW5ncy0+c2V0UGx1Z2luc0VuYWJsZWQoZW5hYmxlKTsKKyAgICAgICAgcHJpdi0+c2V0dGlu
Z3MuZW5hYmxlUGx1Z2lucyA9IGVuYWJsZTsKICAgICB9CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsK
IH0KIAogRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfZW5hYmxlX2ZyYW1lX2ZsYXR0ZW5pbmdf
Z2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9P
Ul9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VU
X09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7Ci0gICAgcmV0dXJuIHByaXYtPnNldHRp
bmdzLmVuYWJsZV9mcmFtZV9mbGF0dGVuaW5nOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRV
Uk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dF
VF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICByZXR1cm4gcHJp
di0+c2V0dGluZ3MuZW5hYmxlRnJhbWVGbGF0dGVuaW5nOwogfQogCiBFaW5hX0Jvb2wgZXdrX3Zp
ZXdfc2V0dGluZ19lbmFibGVfZnJhbWVfZmxhdHRlbmluZ19zZXQoRXZhc19PYmplY3QqIGV3a1Zp
ZXcsIEVpbmFfQm9vbCBlbmFibGUpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihl
d2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJO
KHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3
a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1Jf
UkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgZW5hYmxlID0gISFlbmFi
bGU7Ci0gICAgaWYgKHByaXYtPnNldHRpbmdzLmVuYWJsZV9mcmFtZV9mbGF0dGVuaW5nICE9IGVu
YWJsZSkgewotICAgICAgICBwcml2LT5wYWdlX3NldHRpbmdzLT5zZXRGcmFtZUZsYXR0ZW5pbmdF
bmFibGVkKGVuYWJsZSk7Ci0gICAgICAgIHByaXYtPnNldHRpbmdzLmVuYWJsZV9mcmFtZV9mbGF0
dGVuaW5nID0gZW5hYmxlOworICAgIGlmIChwcml2LT5zZXR0aW5ncy5lbmFibGVGcmFtZUZsYXR0
ZW5pbmcgIT0gZW5hYmxlKSB7CisgICAgICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0RnJhbWVG
bGF0dGVuaW5nRW5hYmxlZChlbmFibGUpOworICAgICAgICBwcml2LT5zZXR0aW5ncy5lbmFibGVG
cmFtZUZsYXR0ZW5pbmcgPSBlbmFibGU7CiAgICAgfQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9
CiAKIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX3NjcmlwdHNfd2luZG93X29wZW5fZ2V0KGNv
bnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRV
Uk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JF
VFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7Ci0gICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLnNj
cmlwdHNfd2luZG93X29wZW47CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3
LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVS
TihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIHJldHVybiBwcml2LT5zZXR0aW5n
cy5zY3JpcHRzV2luZG93T3BlbjsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfc2Ny
aXB0c193aW5kb3dfb3Blbl9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCBhbGxv
dykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZB
TFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFM
U0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBF
SU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBw
cml2LCBFSU5BX0ZBTFNFKTsKICAgICBhbGxvdyA9ICEhYWxsb3c7Ci0gICAgaWYgKHByaXYtPnNl
dHRpbmdzLnNjcmlwdHNfd2luZG93X29wZW4gIT0gYWxsb3cpIHsKLSAgICAgICAgcHJpdi0+cGFn
ZV9zZXR0aW5ncy0+c2V0SmF2YVNjcmlwdENhbk9wZW5XaW5kb3dzQXV0b21hdGljYWxseShhbGxv
dyk7Ci0gICAgICAgIHByaXYtPnNldHRpbmdzLnNjcmlwdHNfd2luZG93X29wZW4gPSBhbGxvdzsK
KyAgICBpZiAocHJpdi0+c2V0dGluZ3Muc2NyaXB0c1dpbmRvd09wZW4gIT0gYWxsb3cpIHsKKyAg
ICAgICAgcHJpdi0+cGFnZVNldHRpbmdzLT5zZXRKYXZhU2NyaXB0Q2FuT3BlbldpbmRvd3NBdXRv
bWF0aWNhbGx5KGFsbG93KTsKKyAgICAgICAgcHJpdi0+c2V0dGluZ3Muc2NyaXB0c1dpbmRvd09w
ZW4gPSBhbGxvdzsKICAgICB9CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAogRWluYV9Cb29s
IGV3a192aWV3X3NldHRpbmdfc2NyaXB0c19jYW5fY2xvc2Vfd2luZG93c19nZXQoY29uc3QgRXZh
c19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tW
aWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNk
LCBwcml2LCBFSU5BX0ZBTFNFKTsKLSAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3Muc2NyaXB0c19j
YW5fY2xvc2Vfd2luZG93czsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcs
IHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJO
KHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgcmV0dXJuIHByaXYtPnNldHRpbmdz
LnNjcmlwdHNDYW5DbG9zZVdpbmRvd3M7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5n
X3NjcmlwdHNfY2FuX2Nsb3NlX3dpbmRvd3Nfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5h
X0Jvb2wgYWxsb3cpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBz
ZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2
LCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNt
YXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNt
YXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgYWxsb3cgPSAhIWFsbG93OwotICAgIGlm
IChwcml2LT5zZXR0aW5ncy5zY3JpcHRzX2Nhbl9jbG9zZV93aW5kb3dzICE9IGFsbG93KSB7Ci0g
ICAgICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNldEFsbG93U2NyaXB0c1RvQ2xvc2VXaW5kb3dz
KGFsbG93KTsKLSAgICAgICAgcHJpdi0+c2V0dGluZ3Muc2NyaXB0c19jYW5fY2xvc2Vfd2luZG93
cyA9IGFsbG93OworICAgIGlmIChwcml2LT5zZXR0aW5ncy5zY3JpcHRzQ2FuQ2xvc2VXaW5kb3dz
ICE9IGFsbG93KSB7CisgICAgICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0QWxsb3dTY3JpcHRz
VG9DbG9zZVdpbmRvd3MoYWxsb3cpOworICAgICAgICBwcml2LT5zZXR0aW5ncy5zY3JpcHRzQ2Fu
Q2xvc2VXaW5kb3dzID0gYWxsb3c7CiAgICAgfQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAK
IEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX3Jlc2l6YWJsZV90ZXh0YXJlYXNfZ2V0KGNvbnN0
IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVS
TihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7Ci0gICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLnJlc2l6
YWJsZV90ZXh0YXJlYXM7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBz
bWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihz
bWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5y
ZXNpemFibGVUZXh0YXJlYXM7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX3Jlc2l6
YWJsZV90ZXh0YXJlYXNfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wgZW5hYmxl
KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFM
U0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxT
RSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJ
TkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHBy
aXYsIEVJTkFfRkFMU0UpOwogICAgIGVuYWJsZSA9ICEhZW5hYmxlOwotICAgIGlmIChwcml2LT5z
ZXR0aW5ncy5yZXNpemFibGVfdGV4dGFyZWFzICE9IGVuYWJsZSkgewotICAgICAgICBwcml2LT5w
YWdlX3NldHRpbmdzLT5zZXRUZXh0QXJlYXNBcmVSZXNpemFibGUoZW5hYmxlKTsKLSAgICAgICAg
cHJpdi0+c2V0dGluZ3MucmVzaXphYmxlX3RleHRhcmVhcyA9IGVuYWJsZTsKKyAgICBpZiAocHJp
di0+c2V0dGluZ3MucmVzaXphYmxlVGV4dGFyZWFzICE9IGVuYWJsZSkgeworICAgICAgICBwcml2
LT5wYWdlU2V0dGluZ3MtPnNldFRleHRBcmVhc0FyZVJlc2l6YWJsZShlbmFibGUpOworICAgICAg
ICBwcml2LT5zZXR0aW5ncy5yZXNpemFibGVUZXh0YXJlYXMgPSBlbmFibGU7CiAgICAgfQogICAg
IHJldHVybiBFSU5BX1RSVUU7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX3ByaXZh
dGVfYnJvd3NpbmdfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19W
SUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19W
SUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7Ci0gICAgcmV0dXJu
IHByaXYtPnNldHRpbmdzLnByaXZhdGVfYnJvd3Npbmc7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BS
SVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIHJldHVy
biBwcml2LT5zZXR0aW5ncy5wcml2YXRlQnJvd3Npbmc7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmll
d19zZXR0aW5nX3ByaXZhdGVfYnJvd3Npbmdfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5h
X0Jvb2wgZW5hYmxlKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywg
c2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJp
diwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBz
bWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihz
bWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIGVuYWJsZSA9ICEhZW5hYmxlOwotICAg
IGlmIChwcml2LT5zZXR0aW5ncy5wcml2YXRlX2Jyb3dzaW5nICE9IGVuYWJsZSkgewotICAgICAg
ICBwcml2LT5wYWdlX3NldHRpbmdzLT5zZXRQcml2YXRlQnJvd3NpbmdFbmFibGVkKGVuYWJsZSk7
Ci0gICAgICAgIHByaXYtPnNldHRpbmdzLnByaXZhdGVfYnJvd3NpbmcgPSBlbmFibGU7CisgICAg
aWYgKHByaXYtPnNldHRpbmdzLnByaXZhdGVCcm93c2luZyAhPSBlbmFibGUpIHsKKyAgICAgICAg
cHJpdi0+cGFnZVNldHRpbmdzLT5zZXRQcml2YXRlQnJvd3NpbmdFbmFibGVkKGVuYWJsZSk7Cisg
ICAgICAgIHByaXYtPnNldHRpbmdzLnByaXZhdGVCcm93c2luZyA9IGVuYWJsZTsKICAgICB9CiAg
ICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfb2Zm
bGluZV9hcHBfY2FjaGVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVX
S19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7Ci0gICAgcmV0
dXJuIHByaXYtPnNldHRpbmdzLm9mZmxpbmVfYXBwX2NhY2hlOworICAgIEVXS19WSUVXX1NEX0dF
VF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklF
V19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBy
ZXR1cm4gcHJpdi0+c2V0dGluZ3Mub2ZmbGluZUFwcENhY2hlOwogfQogCiBFaW5hX0Jvb2wgZXdr
X3ZpZXdfc2V0dGluZ19vZmZsaW5lX2FwcF9jYWNoZV9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcs
IEVpbmFfQm9vbCBlbmFibGUpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tW
aWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNk
LCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1Zp
ZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVU
VVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgZW5hYmxlID0gISFlbmFibGU7
Ci0gICAgaWYgKHByaXYtPnNldHRpbmdzLm9mZmxpbmVfYXBwX2NhY2hlICE9IGVuYWJsZSkgewot
ICAgICAgICBwcml2LT5wYWdlX3NldHRpbmdzLT5zZXRPZmZsaW5lV2ViQXBwbGljYXRpb25DYWNo
ZUVuYWJsZWQoZW5hYmxlKTsKLSAgICAgICAgcHJpdi0+c2V0dGluZ3Mub2ZmbGluZV9hcHBfY2Fj
aGUgPSBlbmFibGU7CisgICAgaWYgKHByaXYtPnNldHRpbmdzLm9mZmxpbmVBcHBDYWNoZSAhPSBl
bmFibGUpIHsKKyAgICAgICAgcHJpdi0+cGFnZVNldHRpbmdzLT5zZXRPZmZsaW5lV2ViQXBwbGlj
YXRpb25DYWNoZUVuYWJsZWQoZW5hYmxlKTsKKyAgICAgICAgcHJpdi0+c2V0dGluZ3Mub2ZmbGlu
ZUFwcENhY2hlID0gZW5hYmxlOwogICAgIH0KICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQpAQCAt
MjA3MSwyNyArMjA3MSwyNyBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19vZmZsaW5lX2Fw
cF9jYWNoZV9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbAogCiBFaW5hX0Jvb2wg
ZXdrX3ZpZXdfc2V0dGluZ19jYXJldF9icm93c2luZ19nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3
a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlO
QV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5B
X0ZBTFNFKTsKLSAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuY2FyZXRfYnJvd3Npbmc7CisgICAg
RVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0Up
OworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFf
RkFMU0UpOworICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5jYXJldEJyb3dzaW5nOwogfQogCiBF
aW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19jYXJldF9icm93c2luZ19zZXQoRXZhc19PYmplY3Qq
IGV3a1ZpZXcsIEVpbmFfQm9vbCBlbmFibGUpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JF
VFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1Jf
UkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVU
VVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9H
RVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgZW5hYmxlID0g
ISFlbmFibGU7Ci0gICAgaWYgKHByaXYtPnNldHRpbmdzLmNhcmV0X2Jyb3dzaW5nICE9IGVuYWJs
ZSkgewotICAgICAgICBwcml2LT5wYWdlX3NldHRpbmdzLT5zZXRDYXJldEJyb3dzaW5nRW5hYmxl
ZChlbmFibGUpOwotICAgICAgICBwcml2LT5zZXR0aW5ncy5jYXJldF9icm93c2luZyA9IGVuYWJs
ZTsKKyAgICBpZiAocHJpdi0+c2V0dGluZ3MuY2FyZXRCcm93c2luZyAhPSBlbmFibGUpIHsKKyAg
ICAgICAgcHJpdi0+cGFnZVNldHRpbmdzLT5zZXRDYXJldEJyb3dzaW5nRW5hYmxlZChlbmFibGUp
OworICAgICAgICBwcml2LT5zZXR0aW5ncy5jYXJldEJyb3dzaW5nID0gZW5hYmxlOwogICAgIH0K
ICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCiBjb25zdCBjaGFyKiBld2tfdmlld19zZXR0aW5n
X2VuY29kaW5nX2N1c3RvbV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAg
RVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgMCk7Ci0gICAgRVdLX1ZJRVdf
UFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCAwKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1Jf
UkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgMCk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1Jf
UkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgMCk7CiAgICAgRXZhc19PYmplY3QqIG1haW5fZnJhbWUg
PSBld2tfdmlld19mcmFtZV9tYWluX2dldChld2tWaWV3KTsKICAgICBXZWJDb3JlOjpGcmFtZSog
Y29yZV9mcmFtZSA9IGV3a19mcmFtZV9jb3JlX2dldChtYWluX2ZyYW1lKTsKIApAQCAtMjEwMCwx
OTkgKzIxMDAsMTk5IEBAIGNvbnN0IGNoYXIqIGV3a192aWV3X3NldHRpbmdfZW5jb2RpbmdfY3Vz
dG9tX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKICAgICBpZiAob3ZlcnJpZGVFbmNv
ZGluZy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgZWluYV9zdHJpbmdzaGFy
ZV9yZXBsYWNlKCZwcml2LT5zZXR0aW5ncy5lbmNvZGluZ19jdXN0b20sIG92ZXJyaWRlRW5jb2Rp
bmcudXRmOCgpLmRhdGEoKSk7Ci0gICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmVuY29kaW5nX2N1
c3RvbTsKKyAgICBlaW5hX3N0cmluZ3NoYXJlX3JlcGxhY2UoJnByaXYtPnNldHRpbmdzLmVuY29k
aW5nQ3VzdG9tLCBvdmVycmlkZUVuY29kaW5nLnV0ZjgoKS5kYXRhKCkpOworICAgIHJldHVybiBw
cml2LT5zZXR0aW5ncy5lbmNvZGluZ0N1c3RvbTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3Nl
dHRpbmdfZW5jb2RpbmdfY3VzdG9tX3NldChFdmFzX09iamVjdCogZXdrVmlldywgY29uc3QgY2hh
ciogZW5jb2RpbmcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBz
ZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2
LCBFSU5BX0ZBTFNFKTsKLSAgICBFdmFzX09iamVjdCogbWFpbl9mcmFtZSA9IGV3a192aWV3X2Zy
YW1lX21haW5fZ2V0KGV3a1ZpZXcpOwotICAgIFdlYkNvcmU6OkZyYW1lKiBjb3JlX2ZyYW1lID0g
ZXdrX2ZyYW1lX2NvcmVfZ2V0KG1haW5fZnJhbWUpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9S
RVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklW
X0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBFdmFzX09i
amVjdCogbWFpbkZyYW1lID0gZXdrX3ZpZXdfZnJhbWVfbWFpbl9nZXQoZXdrVmlldyk7CisgICAg
V2ViQ29yZTo6RnJhbWUqIGNvcmVGcmFtZSA9IGV3a19mcmFtZV9jb3JlX2dldChtYWluRnJhbWUp
OwogICAgIERCRygiJXMiLCBlbmNvZGluZyk7Ci0gICAgaWYgKGVpbmFfc3RyaW5nc2hhcmVfcmVw
bGFjZSgmcHJpdi0+c2V0dGluZ3MuZW5jb2RpbmdfY3VzdG9tLCBlbmNvZGluZykpCi0gICAgICAg
IGNvcmVfZnJhbWUtPmxvYWRlcigpLT5yZWxvYWRXaXRoT3ZlcnJpZGVFbmNvZGluZyhTdHJpbmc6
OmZyb21VVEY4KGVuY29kaW5nKSk7CisgICAgaWYgKGVpbmFfc3RyaW5nc2hhcmVfcmVwbGFjZSgm
cHJpdi0+c2V0dGluZ3MuZW5jb2RpbmdDdXN0b20sIGVuY29kaW5nKSkKKyAgICAgICAgY29yZUZy
YW1lLT5sb2FkZXIoKS0+cmVsb2FkV2l0aE92ZXJyaWRlRW5jb2RpbmcoU3RyaW5nOjpmcm9tVVRG
OChlbmNvZGluZykpOwogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKIGNvbnN0IGNoYXIqIGV3
a192aWV3X3NldHRpbmdfZW5jb2RpbmdfZGVmYXVsdF9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3
a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgMCk7
Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCAwKTsKLSAgICByZXR1
cm4gcHJpdi0+c2V0dGluZ3MuZW5jb2RpbmdfZGVmYXVsdDsKKyAgICBFV0tfVklFV19TRF9HRVRf
T1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgMCk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRf
T1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgMCk7CisgICAgcmV0dXJuIHByaXYtPnNldHRpbmdz
LmVuY29kaW5nRGVmYXVsdDsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfZW5jb2Rp
bmdfZGVmYXVsdF9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGNvbnN0IGNoYXIqIGVuY29kaW5n
KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFM
U0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxT
RSk7Ci0gICAgaWYgKGVpbmFfc3RyaW5nc2hhcmVfcmVwbGFjZSgmcHJpdi0+c2V0dGluZ3MuZW5j
b2RpbmdfZGVmYXVsdCwgZW5jb2RpbmcpKQotICAgICAgICBwcml2LT5wYWdlX3NldHRpbmdzLT5z
ZXREZWZhdWx0VGV4dEVuY29kaW5nTmFtZShTdHJpbmc6OmZyb21VVEY4KGVuY29kaW5nKSk7Cisg
ICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFM
U0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJ
TkFfRkFMU0UpOworICAgIGlmIChlaW5hX3N0cmluZ3NoYXJlX3JlcGxhY2UoJnByaXYtPnNldHRp
bmdzLmVuY29kaW5nRGVmYXVsdCwgZW5jb2RpbmcpKQorICAgICAgICBwcml2LT5wYWdlU2V0dGlu
Z3MtPnNldERlZmF1bHRUZXh0RW5jb2RpbmdOYW1lKFN0cmluZzo6ZnJvbVVURjgoZW5jb2Rpbmcp
KTsKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGlu
Z19lbmNvZGluZ19kZXRlY3Rvcl9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCBl
bmFibGUpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlO
QV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5B
X0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0
YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0
YSwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgZW5hYmxlID0gISFlbmFibGU7Ci0gICAgaWYgKHBy
aXYtPnNldHRpbmdzLmVuY29kaW5nX2RldGVjdG9yICE9IGVuYWJsZSkgewotICAgICAgICBwcml2
LT5wYWdlX3NldHRpbmdzLT5zZXRVc2VzRW5jb2RpbmdEZXRlY3RvcihlbmFibGUpOwotICAgICAg
ICBwcml2LT5zZXR0aW5ncy5lbmNvZGluZ19kZXRlY3RvciA9IGVuYWJsZTsKKyAgICBpZiAocHJp
di0+c2V0dGluZ3MuZW5jb2RpbmdEZXRlY3RvciAhPSBlbmFibGUpIHsKKyAgICAgICAgcHJpdi0+
cGFnZVNldHRpbmdzLT5zZXRVc2VzRW5jb2RpbmdEZXRlY3RvcihlbmFibGUpOworICAgICAgICBw
cml2LT5zZXR0aW5ncy5lbmNvZGluZ0RldGVjdG9yID0gZW5hYmxlOwogICAgIH0KICAgICByZXR1
cm4gRUlOQV9UUlVFOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19lbmNvZGluZ19k
ZXRlY3Rvcl9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdf
UFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKLSAgICByZXR1cm4gcHJp
di0+c2V0dGluZ3MuZW5jb2RpbmdfZGV0ZWN0b3I7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JF
VFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZf
R0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIHJldHVybiBw
cml2LT5zZXR0aW5ncy5lbmNvZGluZ0RldGVjdG9yOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdf
c2V0dGluZ19lbmFibGVfZGV2ZWxvcGVyX2V4dHJhc19nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3
a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlO
QV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5B
X0ZBTFNFKTsKLSAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZW5hYmxlX2RldmVsb3Blcl9leHRy
YXM7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJ
TkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHBy
aXYsIEVJTkFfRkFMU0UpOworICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5lbmFibGVEZXZlbG9w
ZXJFeHRyYXM7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2VuYWJsZV9kZXZlbG9w
ZXJfZXh0cmFzX3NldChFdmFzX09iamVjdCogZXdrVmlldywgRWluYV9Cb29sIGVuYWJsZSkKIHsK
LSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsK
LSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwor
ICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZB
TFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBF
SU5BX0ZBTFNFKTsKICAgICBlbmFibGUgPSAhIWVuYWJsZTsKLSAgICBpZiAocHJpdi0+c2V0dGlu
Z3MuZW5hYmxlX2RldmVsb3Blcl9leHRyYXMgIT0gZW5hYmxlKSB7Ci0gICAgICAgIHByaXYtPnBh
Z2Vfc2V0dGluZ3MtPnNldERldmVsb3BlckV4dHJhc0VuYWJsZWQoZW5hYmxlKTsKLSAgICAgICAg
cHJpdi0+c2V0dGluZ3MuZW5hYmxlX2RldmVsb3Blcl9leHRyYXMgPSBlbmFibGU7CisgICAgaWYg
KHByaXYtPnNldHRpbmdzLmVuYWJsZURldmVsb3BlckV4dHJhcyAhPSBlbmFibGUpIHsKKyAgICAg
ICAgcHJpdi0+cGFnZVNldHRpbmdzLT5zZXREZXZlbG9wZXJFeHRyYXNFbmFibGVkKGVuYWJsZSk7
CisgICAgICAgIHByaXYtPnNldHRpbmdzLmVuYWJsZURldmVsb3BlckV4dHJhcyA9IGVuYWJsZTsK
ICAgICB9CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAogaW50IGV3a192aWV3X3NldHRpbmdf
Zm9udF9taW5pbXVtX3NpemVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAg
IEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIDApOwotICAgIEVXS19WSUVX
X1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgMCk7Ci0gICAgcmV0dXJuIHByaXYtPnNldHRp
bmdzLmZvbnRfbWluaW11bV9zaXplOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdr
Vmlldywgc21hcnREYXRhLCAwKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21h
cnREYXRhLCBwcml2LCAwKTsKKyAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZm9udE1pbmltdW1T
aXplOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19mb250X21pbmltdW1fc2l6ZV9z
ZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGludCBzaXplKQogewotICAgIEVXS19WSUVXX1NEX0dF
VF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZf
R0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7Ci0gICAgaWYgKHByaXYtPnNldHRp
bmdzLmZvbnRfbWluaW11bV9zaXplICE9IHNpemUpIHsKLSAgICAgICAgcHJpdi0+cGFnZV9zZXR0
aW5ncy0+c2V0TWluaW11bUZvbnRTaXplKHNpemUpOwotICAgICAgICBwcml2LT5zZXR0aW5ncy5m
b250X21pbmltdW1fc2l6ZSA9IHNpemU7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihl
d2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09S
X1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIGlmIChwcml2LT5zZXR0
aW5ncy5mb250TWluaW11bVNpemUgIT0gc2l6ZSkgeworICAgICAgICBwcml2LT5wYWdlU2V0dGlu
Z3MtPnNldE1pbmltdW1Gb250U2l6ZShzaXplKTsKKyAgICAgICAgcHJpdi0+c2V0dGluZ3MuZm9u
dE1pbmltdW1TaXplID0gc2l6ZTsKICAgICB9CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAog
aW50IGV3a192aWV3X3NldHRpbmdfZm9udF9taW5pbXVtX2xvZ2ljYWxfc2l6ZV9nZXQoY29uc3Qg
RXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihl
d2tWaWV3LCBzZCwgMCk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2
LCAwKTsKLSAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZm9udF9taW5pbXVtX2xvZ2ljYWxfc2l6
ZTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgMCk7
CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgMCk7Cisg
ICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmZvbnRNaW5pbXVtTG9naWNhbFNpemU7CiB9CiAKIEVp
bmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2ZvbnRfbWluaW11bV9sb2dpY2FsX3NpemVfc2V0KEV2
YXNfT2JqZWN0KiBld2tWaWV3LCBpbnQgc2l6ZSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1Jf
UkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9P
Ul9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwotICAgIGlmIChwcml2LT5zZXR0aW5ncy5m
b250X21pbmltdW1fbG9naWNhbF9zaXplICE9IHNpemUpIHsKLSAgICAgICAgcHJpdi0+cGFnZV9z
ZXR0aW5ncy0+c2V0TWluaW11bUxvZ2ljYWxGb250U2l6ZShzaXplKTsKLSAgICAgICAgcHJpdi0+
c2V0dGluZ3MuZm9udF9taW5pbXVtX2xvZ2ljYWxfc2l6ZSA9IHNpemU7CisgICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVX
S19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOwor
ICAgIGlmIChwcml2LT5zZXR0aW5ncy5mb250TWluaW11bUxvZ2ljYWxTaXplICE9IHNpemUpIHsK
KyAgICAgICAgcHJpdi0+cGFnZVNldHRpbmdzLT5zZXRNaW5pbXVtTG9naWNhbEZvbnRTaXplKHNp
emUpOworICAgICAgICBwcml2LT5zZXR0aW5ncy5mb250TWluaW11bUxvZ2ljYWxTaXplID0gc2l6
ZTsKICAgICB9CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAogaW50IGV3a192aWV3X3NldHRp
bmdfZm9udF9kZWZhdWx0X3NpemVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewot
ICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIDApOwotICAgIEVXS19W
SUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgMCk7Ci0gICAgcmV0dXJuIHByaXYtPnNl
dHRpbmdzLmZvbnRfZGVmYXVsdF9zaXplOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrVmlldywgc21hcnREYXRhLCAwKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4o
c21hcnREYXRhLCBwcml2LCAwKTsKKyAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZm9udERlZmF1
bHRTaXplOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19mb250X2RlZmF1bHRfc2l6
ZV9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGludCBzaXplKQogewotICAgIEVXS19WSUVXX1NE
X0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BS
SVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7Ci0gICAgaWYgKHByaXYtPnNl
dHRpbmdzLmZvbnRfZGVmYXVsdF9zaXplICE9IHNpemUpIHsKLSAgICAgICAgcHJpdi0+cGFnZV9z
ZXR0aW5ncy0+c2V0RGVmYXVsdEZvbnRTaXplKHNpemUpOwotICAgICAgICBwcml2LT5zZXR0aW5n
cy5mb250X2RlZmF1bHRfc2l6ZSA9IHNpemU7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
Tihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VU
X09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIGlmIChwcml2LT5z
ZXR0aW5ncy5mb250RGVmYXVsdFNpemUgIT0gc2l6ZSkgeworICAgICAgICBwcml2LT5wYWdlU2V0
dGluZ3MtPnNldERlZmF1bHRGb250U2l6ZShzaXplKTsKKyAgICAgICAgcHJpdi0+c2V0dGluZ3Mu
Zm9udERlZmF1bHRTaXplID0gc2l6ZTsKICAgICB9CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0K
IAogaW50IGV3a192aWV3X3NldHRpbmdfZm9udF9tb25vc3BhY2Vfc2l6ZV9nZXQoY29uc3QgRXZh
c19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tW
aWV3LCBzZCwgMCk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCAw
KTsKLSAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZm9udF9tb25vc3BhY2Vfc2l6ZTsKKyAgICBF
V0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgMCk7CisgICAgRVdL
X1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgMCk7CisgICAgcmV0dXJu
IHByaXYtPnNldHRpbmdzLmZvbnRNb25vc3BhY2VTaXplOwogfQogCiBFaW5hX0Jvb2wgZXdrX3Zp
ZXdfc2V0dGluZ19mb250X21vbm9zcGFjZV9zaXplX3NldChFdmFzX09iamVjdCogZXdrVmlldywg
aW50IHNpemUpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwg
RUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBF
SU5BX0ZBTFNFKTsKLSAgICBpZiAocHJpdi0+c2V0dGluZ3MuZm9udF9tb25vc3BhY2Vfc2l6ZSAh
PSBzaXplKSB7Ci0gICAgICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNldERlZmF1bHRGaXhlZEZv
bnRTaXplKHNpemUpOwotICAgICAgICBwcml2LT5zZXR0aW5ncy5mb250X21vbm9zcGFjZV9zaXpl
ID0gc2l6ZTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0
YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0
YSwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgaWYgKHByaXYtPnNldHRpbmdzLmZvbnRNb25vc3Bh
Y2VTaXplICE9IHNpemUpIHsKKyAgICAgICAgcHJpdi0+cGFnZVNldHRpbmdzLT5zZXREZWZhdWx0
Rml4ZWRGb250U2l6ZShzaXplKTsKKyAgICAgICAgcHJpdi0+c2V0dGluZ3MuZm9udE1vbm9zcGFj
ZVNpemUgPSBzaXplOwogICAgIH0KICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCiBjb25zdCBj
aGFyKiBld2tfdmlld19mb250X2ZhbWlseV9uYW1lX2dldChjb25zdCBFdmFzX09iamVjdCogZXdr
VmlldywgRXdrX0ZvbnRfRmFtaWx5IGZvbnRGYW1pbHkpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihld2tWaWV3LCBzZCwgMCk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVU
VVJOKHNkLCBwcml2LCAwKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcs
IHNtYXJ0RGF0YSwgMCk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0
YSwgcHJpdiwgMCk7CiAKICAgICBzd2l0Y2ggKGZvbnRGYW1pbHkpIHsKICAgICBjYXNlIEVXS19G
T05UX0ZBTUlMWV9TVEFOREFSRDoKLSAgICAgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmZvbnRf
c3RhbmRhcmQ7CisgICAgICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5mb250U3RhbmRhcmQ7CiAg
ICAgY2FzZSBFV0tfRk9OVF9GQU1JTFlfQ1VSU0lWRToKLSAgICAgICAgcmV0dXJuIHByaXYtPnNl
dHRpbmdzLmZvbnRfY3Vyc2l2ZTsKKyAgICAgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmZvbnRD
dXJzaXZlOwogICAgIGNhc2UgRVdLX0ZPTlRfRkFNSUxZX0ZBTlRBU1k6Ci0gICAgICAgIHJldHVy
biBwcml2LT5zZXR0aW5ncy5mb250X2ZhbnRhc3k7CisgICAgICAgIHJldHVybiBwcml2LT5zZXR0
aW5ncy5mb250RmFudGFzeTsKICAgICBjYXNlIEVXS19GT05UX0ZBTUlMWV9NT05PU1BBQ0U6Ci0g
ICAgICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5mb250X21vbm9zcGFjZTsKKyAgICAgICAgcmV0
dXJuIHByaXYtPnNldHRpbmdzLmZvbnRNb25vc3BhY2U7CiAgICAgY2FzZSBFV0tfRk9OVF9GQU1J
TFlfU0VSSUY6Ci0gICAgICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5mb250X3NlcmlmOworICAg
ICAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZm9udFNlcmlmOwogICAgIGNhc2UgRVdLX0ZPTlRf
RkFNSUxZX1NBTlNfU0VSSUY6Ci0gICAgICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5mb250X3Nh
bnNfc2VyaWY7CisgICAgICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5mb250U2Fuc1NlcmlmOwog
ICAgIH0KICAgICByZXR1cm4gMDsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X2ZvbnRfZmFtaWx5
X25hbWVfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFd2tfRm9udF9GYW1pbHkgZm9udEZhbWls
eSwgY29uc3QgY2hhciogbmFtZSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3
a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4o
c2QsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdr
Vmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9S
RVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKIAogICAgIHN3aXRjaCAoZm9udEZh
bWlseSkgewogICAgIGNhc2UgRVdLX0ZPTlRfRkFNSUxZX1NUQU5EQVJEOgotICAgICAgICBpZiAo
ZWluYV9zdHJpbmdzaGFyZV9yZXBsYWNlKCZwcml2LT5zZXR0aW5ncy5mb250X3N0YW5kYXJkLCBu
YW1lKSkKLSAgICAgICAgICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNldFN0YW5kYXJkRm9udEZh
bWlseShBdG9taWNTdHJpbmc6OmZyb21VVEY4KG5hbWUpKTsKKyAgICAgICAgaWYgKGVpbmFfc3Ry
aW5nc2hhcmVfcmVwbGFjZSgmcHJpdi0+c2V0dGluZ3MuZm9udFN0YW5kYXJkLCBuYW1lKSkKKyAg
ICAgICAgICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0U3RhbmRhcmRGb250RmFtaWx5KEF0b21p
Y1N0cmluZzo6ZnJvbVVURjgobmFtZSkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEVXS19G
T05UX0ZBTUlMWV9DVVJTSVZFOgotICAgICAgICBpZiAoZWluYV9zdHJpbmdzaGFyZV9yZXBsYWNl
KCZwcml2LT5zZXR0aW5ncy5mb250X2N1cnNpdmUsIG5hbWUpKQotICAgICAgICAgICAgcHJpdi0+
cGFnZV9zZXR0aW5ncy0+c2V0Q3Vyc2l2ZUZvbnRGYW1pbHkoQXRvbWljU3RyaW5nOjpmcm9tVVRG
OChuYW1lKSk7CisgICAgICAgIGlmIChlaW5hX3N0cmluZ3NoYXJlX3JlcGxhY2UoJnByaXYtPnNl
dHRpbmdzLmZvbnRDdXJzaXZlLCBuYW1lKSkKKyAgICAgICAgICAgIHByaXYtPnBhZ2VTZXR0aW5n
cy0+c2V0Q3Vyc2l2ZUZvbnRGYW1pbHkoQXRvbWljU3RyaW5nOjpmcm9tVVRGOChuYW1lKSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgRVdLX0ZPTlRfRkFNSUxZX0ZBTlRBU1k6Ci0gICAgICAg
IGlmIChlaW5hX3N0cmluZ3NoYXJlX3JlcGxhY2UoJnByaXYtPnNldHRpbmdzLmZvbnRfZmFudGFz
eSwgbmFtZSkpCi0gICAgICAgICAgICBwcml2LT5wYWdlX3NldHRpbmdzLT5zZXRGYW50YXN5Rm9u
dEZhbWlseShBdG9taWNTdHJpbmc6OmZyb21VVEY4KG5hbWUpKTsKKyAgICAgICAgaWYgKGVpbmFf
c3RyaW5nc2hhcmVfcmVwbGFjZSgmcHJpdi0+c2V0dGluZ3MuZm9udEZhbnRhc3ksIG5hbWUpKQor
ICAgICAgICAgICAgcHJpdi0+cGFnZVNldHRpbmdzLT5zZXRGYW50YXN5Rm9udEZhbWlseShBdG9t
aWNTdHJpbmc6OmZyb21VVEY4KG5hbWUpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBFV0tf
Rk9OVF9GQU1JTFlfTU9OT1NQQUNFOgotICAgICAgICBpZiAoZWluYV9zdHJpbmdzaGFyZV9yZXBs
YWNlKCZwcml2LT5zZXR0aW5ncy5mb250X21vbm9zcGFjZSwgbmFtZSkpCi0gICAgICAgICAgICBw
cml2LT5wYWdlX3NldHRpbmdzLT5zZXRGaXhlZEZvbnRGYW1pbHkoQXRvbWljU3RyaW5nOjpmcm9t
VVRGOChuYW1lKSk7CisgICAgICAgIGlmIChlaW5hX3N0cmluZ3NoYXJlX3JlcGxhY2UoJnByaXYt
PnNldHRpbmdzLmZvbnRNb25vc3BhY2UsIG5hbWUpKQorICAgICAgICAgICAgcHJpdi0+cGFnZVNl
dHRpbmdzLT5zZXRGaXhlZEZvbnRGYW1pbHkoQXRvbWljU3RyaW5nOjpmcm9tVVRGOChuYW1lKSk7
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRVdLX0ZPTlRfRkFNSUxZX1NFUklGOgotICAgICAg
ICBpZiAoZWluYV9zdHJpbmdzaGFyZV9yZXBsYWNlKCZwcml2LT5zZXR0aW5ncy5mb250X3Nlcmlm
LCBuYW1lKSkKLSAgICAgICAgICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNldFNlcmlmRm9udEZh
bWlseShBdG9taWNTdHJpbmc6OmZyb21VVEY4KG5hbWUpKTsKKyAgICAgICAgaWYgKGVpbmFfc3Ry
aW5nc2hhcmVfcmVwbGFjZSgmcHJpdi0+c2V0dGluZ3MuZm9udFNlcmlmLCBuYW1lKSkKKyAgICAg
ICAgICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0U2VyaWZGb250RmFtaWx5KEF0b21pY1N0cmlu
Zzo6ZnJvbVVURjgobmFtZSkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEVXS19GT05UX0ZB
TUlMWV9TQU5TX1NFUklGOgotICAgICAgICBpZiAoZWluYV9zdHJpbmdzaGFyZV9yZXBsYWNlKCZw
cml2LT5zZXR0aW5ncy5mb250X3NhbnNfc2VyaWYsIG5hbWUpKQotICAgICAgICAgICAgcHJpdi0+
cGFnZV9zZXR0aW5ncy0+c2V0U2Fuc1NlcmlmRm9udEZhbWlseShBdG9taWNTdHJpbmc6OmZyb21V
VEY4KG5hbWUpKTsKKyAgICAgICAgaWYgKGVpbmFfc3RyaW5nc2hhcmVfcmVwbGFjZSgmcHJpdi0+
c2V0dGluZ3MuZm9udFNhbnNTZXJpZiwgbmFtZSkpCisgICAgICAgICAgICBwcml2LT5wYWdlU2V0
dGluZ3MtPnNldFNhbnNTZXJpZkZvbnRGYW1pbHkoQXRvbWljU3RyaW5nOjpmcm9tVVRGOChuYW1l
KSk7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBFSU5BX0ZB
TFNFOwpAQCAtMjMwMyw5OSArMjMwMyw5OSBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfZm9udF9mYW1p
bHlfbmFtZV9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV3a19Gb250X0ZhbWlseSBmbwogCiBF
aW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19zcGF0aWFsX25hdmlnYXRpb25fZ2V0KGNvbnN0IEV2
YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdr
Vmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihz
ZCwgcHJpdiwgRUlOQV9GQUxTRSk7Ci0gICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLnNwYXRpYWxf
bmF2aWdhdGlvbjsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0
RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0
RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLnNwYXRp
YWxOYXZpZ2F0aW9uOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19zcGF0aWFsX25h
dmlnYXRpb25fc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wgZW5hYmxlKQogewot
ICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwot
ICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7Cisg
ICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFM
U0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJ
TkFfRkFMU0UpOwogICAgIGVuYWJsZSA9ICEhZW5hYmxlOwotICAgIGlmIChwcml2LT5zZXR0aW5n
cy5zcGF0aWFsX25hdmlnYXRpb24gIT0gZW5hYmxlKSB7Ci0gICAgICAgIHByaXYtPnBhZ2Vfc2V0
dGluZ3MtPnNldFNwYXRpYWxOYXZpZ2F0aW9uRW5hYmxlZChlbmFibGUpOwotICAgICAgICBwcml2
LT5zZXR0aW5ncy5zcGF0aWFsX25hdmlnYXRpb24gPSBlbmFibGU7CisgICAgaWYgKHByaXYtPnNl
dHRpbmdzLnNwYXRpYWxOYXZpZ2F0aW9uICE9IGVuYWJsZSkgeworICAgICAgICBwcml2LT5wYWdl
U2V0dGluZ3MtPnNldFNwYXRpYWxOYXZpZ2F0aW9uRW5hYmxlZChlbmFibGUpOworICAgICAgICBw
cml2LT5zZXR0aW5ncy5zcGF0aWFsTmF2aWdhdGlvbiA9IGVuYWJsZTsKICAgICB9CiAgICAgcmV0
dXJuIEVJTkFfVFJVRTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfbG9jYWxfc3Rv
cmFnZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJ
Vl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKLSAgICByZXR1cm4gcHJpdi0+
c2V0dGluZ3MubG9jYWxfc3RvcmFnZTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3
a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1Jf
UkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgcmV0dXJuIHByaXYtPnNl
dHRpbmdzLmxvY2FsU3RvcmFnZTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfbG9j
YWxfc3RvcmFnZV9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCBlbmFibGUpCiB7
Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7
Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsK
KyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9G
QUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwg
RUlOQV9GQUxTRSk7CiAgICAgZW5hYmxlID0gISFlbmFibGU7Ci0gICAgaWYgKHByaXYtPnNldHRp
bmdzLmxvY2FsX3N0b3JhZ2UgIT0gZW5hYmxlKSB7Ci0gICAgICAgIHByaXYtPnBhZ2Vfc2V0dGlu
Z3MtPnNldExvY2FsU3RvcmFnZUVuYWJsZWQoZW5hYmxlKTsKLSAgICAgICAgcHJpdi0+c2V0dGlu
Z3MubG9jYWxfc3RvcmFnZSA9IGVuYWJsZTsKKyAgICBpZiAocHJpdi0+c2V0dGluZ3MubG9jYWxT
dG9yYWdlICE9IGVuYWJsZSkgeworICAgICAgICBwcml2LT5wYWdlU2V0dGluZ3MtPnNldExvY2Fs
U3RvcmFnZUVuYWJsZWQoZW5hYmxlKTsKKyAgICAgICAgcHJpdi0+c2V0dGluZ3MubG9jYWxTdG9y
YWdlID0gZW5hYmxlOwogICAgIH0KICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCiBFaW5hX0Jv
b2wgZXdrX3ZpZXdfc2V0dGluZ19wYWdlX2NhY2hlX2dldChjb25zdCBFdmFzX09iamVjdCogZXdr
VmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5B
X0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFf
RkFMU0UpOwotICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5wYWdlX2NhY2hlOworICAgIEVXS19W
SUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAg
ICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNF
KTsKKyAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MucGFnZUNhY2hlOwogfQogCiBFaW5hX0Jvb2wg
ZXdrX3ZpZXdfc2V0dGluZ19wYWdlX2NhY2hlX3NldChFdmFzX09iamVjdCogZXdrVmlldywgRWlu
YV9Cb29sIGVuYWJsZSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcs
IHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHBy
aXYsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywg
c21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4o
c21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBlbmFibGUgPSAhIWVuYWJsZTsKLSAg
ICBpZiAocHJpdi0+c2V0dGluZ3MucGFnZV9jYWNoZSAhPSBlbmFibGUpIHsKLSAgICAgICAgcHJp
di0+cGFnZV9zZXR0aW5ncy0+c2V0VXNlc1BhZ2VDYWNoZShlbmFibGUpOwotICAgICAgICBwcml2
LT5zZXR0aW5ncy5wYWdlX2NhY2hlID0gZW5hYmxlOworICAgIGlmIChwcml2LT5zZXR0aW5ncy5w
YWdlQ2FjaGUgIT0gZW5hYmxlKSB7CisgICAgICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0VXNl
c1BhZ2VDYWNoZShlbmFibGUpOworICAgICAgICBwcml2LT5zZXR0aW5ncy5wYWdlQ2FjaGUgPSBl
bmFibGU7CiAgICAgfQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKIGNvbnN0IGNoYXIqIGV3
a192aWV3X3NldHRpbmdfbG9jYWxfc3RvcmFnZV9kYXRhYmFzZV9wYXRoX2dldChjb25zdCBFdmFz
X09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1Zp
ZXcsIHNkLCAwKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIDAp
OwotICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5sb2NhbF9zdG9yYWdlX2RhdGFiYXNlX3BhdGg7
CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIDApOwor
ICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIDApOworICAg
IHJldHVybiBwcml2LT5zZXR0aW5ncy5sb2NhbFN0b3JhZ2VEYXRhYmFzZVBhdGg7CiB9CiAKIEVp
bmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2xvY2FsX3N0b3JhZ2VfZGF0YWJhc2VfcGF0aF9zZXQo
RXZhc19PYmplY3QqIGV3a1ZpZXcsIGNvbnN0IGNoYXIqIHBhdGgpCiB7Ci0gICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdf
UFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKLSAgICBpZiAoZWluYV9z
dHJpbmdzaGFyZV9yZXBsYWNlKCZwcml2LT5zZXR0aW5ncy5sb2NhbF9zdG9yYWdlX2RhdGFiYXNl
X3BhdGgsIHBhdGgpKQotICAgICAgICBwcml2LT5wYWdlX3NldHRpbmdzLT5zZXRMb2NhbFN0b3Jh
Z2VEYXRhYmFzZVBhdGgoU3RyaW5nOjpmcm9tVVRGOChwYXRoKSk7CisgICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19W
SUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOworICAg
IGlmIChlaW5hX3N0cmluZ3NoYXJlX3JlcGxhY2UoJnByaXYtPnNldHRpbmdzLmxvY2FsU3RvcmFn
ZURhdGFiYXNlUGF0aCwgcGF0aCkpCisgICAgICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0TG9j
YWxTdG9yYWdlRGF0YWJhc2VQYXRoKFN0cmluZzo6ZnJvbVVURjgocGF0aCkpOwogICAgIHJldHVy
biBFSU5BX1RSVUU7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX21pbmltdW1fdGlt
ZXJfaW50ZXJ2YWxfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBkb3VibGUgaW50ZXJ2YWwpCiB7
Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7
Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsK
LSAgICBpZiAoZmFicyhwcml2LT5zZXR0aW5ncy5kb21fdGltZXJfaW50ZXJ2YWwgLSBpbnRlcnZh
bCkgPj0gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjplcHNpbG9uKCkpIHsKLSAgICAgICAg
cHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0TWluRE9NVGltZXJJbnRlcnZhbChpbnRlcnZhbCk7Ci0g
ICAgICAgIHByaXYtPnNldHRpbmdzLmRvbV90aW1lcl9pbnRlcnZhbCA9IGludGVydmFsOworICAg
IEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNF
KTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5B
X0ZBTFNFKTsKKyAgICBpZiAoZmFicyhwcml2LT5zZXR0aW5ncy5kb21UaW1lckludGVydmFsIC0g
aW50ZXJ2YWwpID49IHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6ZXBzaWxvbigpKSB7Cisg
ICAgICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0TWluRE9NVGltZXJJbnRlcnZhbChpbnRlcnZh
bCk7CisgICAgICAgIHByaXYtPnNldHRpbmdzLmRvbVRpbWVySW50ZXJ2YWwgPSBpbnRlcnZhbDsK
ICAgICB9CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAogZG91YmxlIGV3a192aWV3X3NldHRp
bmdfbWluaW11bV90aW1lcl9pbnRlcnZhbF9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcp
CiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxT
RSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNF
KTsKLSAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZG9tX3RpbWVyX2ludGVydmFsOworICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsK
KyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZB
TFNFKTsKKyAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZG9tVGltZXJJbnRlcnZhbDsKIH0KIAog
RXdrX1ZpZXdfU21hcnRfRGF0YSogZXdrX3ZpZXdfc21hcnRfZGF0YV9nZXQoY29uc3QgRXZhc19P
YmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3
LCBzZCwgMCk7Ci0gICAgcmV0dXJuIHNkOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrVmlldywgc21hcnREYXRhLCAwKTsKKyAgICByZXR1cm4gc21hcnREYXRhOwogfQogCiAvKioK
QEAgLTI0NjAsOCArMjQ2MCw4IEBAIGNvbnN0IEV3a19TY3JvbGxfUmVxdWVzdCogZXdrX3ZpZXdf
c2Nyb2xsX3JlcXVlc3RzX2dldChjb25zdCBFd2tfVmlld19Qcml2YXRlX0RhCiAgKiBAcGFyYW0g
cHJpdiBwcml2YXRlIGhhbmRsZSBwb2ludGVyIG9mIHRoZSB2aWV3IHRvIGFkZCByZXBhaW50IHJl
cXVlc3QuCiAgKiBAcGFyYW0geCBob3Jpem9udGFsIHBvc2l0aW9uIHJlbGF0aXZlIHRvIGN1cnJl
bnQgdmlldyBwb3J0IChzY3JvbGxlZCkuCiAgKiBAcGFyYW0geSB2ZXJ0aWNhbCBwb3NpdGlvbiBy
ZWxhdGl2ZSB0byBjdXJyZW50IHZpZXcgcG9ydCAoc2Nyb2xsZWQpLgotICogQHBhcmFtIHcgd2lk
dGggb2YgYXJlYSB0byBiZSByZXBhaW50ZWQKLSAqIEBwYXJhbSBoIGhlaWdodCBvZiBhcmVhIHRv
IGJlIHJlcGFpbnRlZAorICogQHBhcmFtIHdpZHRoIHdpZHRoIG9mIGFyZWEgdG8gYmUgcmVwYWlu
dGVkCisgKiBAcGFyYW0gaGVpZ2h0IGhlaWdodCBvZiBhcmVhIHRvIGJlIHJlcGFpbnRlZAogICoK
ICAqIEBub3RlIHRoaXMgaXMgbm90IGZvciBnZW5lcmFsIHVzZSBidXQganVzdCBmb3Igc3ViY2xh
c3NlcyB0aGF0IHdhbnQKICAqICAgICAgIHRvIGRlZmluZSB0aGVpciBvd24gYmFja2luZyBzdG9y
ZS4KQEAgLTI0ODQsMTIgKzI0ODQsMTIgQEAgdm9pZCBld2tfdmlld19sYXlvdXRfaWZfbmVlZGVk
X3JlY3Vyc2l2ZShFd2tfVmlld19Qcml2YXRlX0RhdGEqIHByaXYpCiB7CiAgICAgRUlOQV9TQUZF
VFlfT05fTlVMTF9SRVRVUk4ocHJpdik7CiAKLSAgICBXZWJDb3JlOjpGcmFtZVZpZXcqIHYgPSBw
cml2LT5tYWluX2ZyYW1lLT52aWV3KCk7Ci0gICAgaWYgKCF2KSB7CisgICAgV2ViQ29yZTo6RnJh
bWVWaWV3KiB2aWV3ID0gcHJpdi0+bWFpbkZyYW1lLT52aWV3KCk7CisgICAgaWYgKCF2aWV3KSB7
CiAgICAgICAgIEVSUigibm8gbWFpbiBmcmFtZSB2aWV3Iik7CiAgICAgICAgIHJldHVybjsKICAg
ICB9Ci0gICAgdi0+dXBkYXRlTGF5b3V0QW5kU3R5bGVJZk5lZWRlZFJlY3Vyc2l2ZSgpOworICAg
IHZpZXctPnVwZGF0ZUxheW91dEFuZFN0eWxlSWZOZWVkZWRSZWN1cnNpdmUoKTsKIH0KIAogdm9p
ZCBld2tfdmlld19zY3JvbGxzX3Byb2Nlc3MoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRh
KQpAQCAtMjUxMCw3ICsyNTEwLDcgQEAgdm9pZCBld2tfdmlld19zY3JvbGxzX3Byb2Nlc3MoRXdr
X1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhKQogICogICAgICAgdG8gZGVmaW5lIHRoZWlyIG93
biBiYWNraW5nIHN0b3JlLgogICovCiBzdHJ1Y3QgX0V3a19WaWV3X1BhaW50X0NvbnRleHQgewot
ICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCogZ2M7CisgICAgV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0KiBncmFwaGljQ29udGV4dDsKICAgICBXZWJDb3JlOjpGcmFtZVZpZXcqIHZpZXc7CiAg
ICAgY2Fpcm9fdCogY3I7CiB9OwpAQCAtMjUxOSwyNiArMjUxOSwyNiBAQCBFd2tfVmlld19QYWlu
dF9Db250ZXh0KiBld2tfdmlld19wYWludF9jb250ZXh0X25ldyhFd2tfVmlld19Qcml2YXRlX0Rh
dGEqIHByaXYsCiB7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHByaXYsIDAp
OwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChjciwgMCk7Ci0gICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHByaXYtPm1haW5fZnJhbWUsIDApOwotICAgIFdlYkNv
cmU6OkZyYW1lVmlldyogdmlldyA9IHByaXYtPm1haW5fZnJhbWUtPnZpZXcoKTsKKyAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwocHJpdi0+bWFpbkZyYW1lLCAwKTsKKyAgICBXZWJD
b3JlOjpGcmFtZVZpZXcqIHZpZXcgPSBwcml2LT5tYWluRnJhbWUtPnZpZXcoKTsKICAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodmlldywgMCk7Ci0gICAgRXdrX1ZpZXdfUGFpbnRf
Q29udGV4dCogY3R4dCA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1BhaW50X0NvbnRleHQqPihtYWxs
b2Moc2l6ZW9mKCpjdHh0KSkpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChj
dHh0LCAwKTsKKyAgICBFd2tfVmlld19QYWludF9Db250ZXh0KiBjb250ZXh0ID0gc3RhdGljX2Nh
c3Q8RXdrX1ZpZXdfUGFpbnRfQ29udGV4dCo+KG1hbGxvYyhzaXplb2YoKmNvbnRleHQpKSk7Cisg
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGNvbnRleHQsIDApOwogCi0gICAgY3R4
dC0+Z2MgPSBuZXcgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0KGNyKTsKLSAgICBpZiAoIWN0eHQt
PmdjKSB7Ci0gICAgICAgIGZyZWUoY3R4dCk7CisgICAgY29udGV4dC0+Z3JhcGhpY0NvbnRleHQg
PSBuZXcgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0KGNyKTsKKyAgICBpZiAoIWNvbnRleHQtPmdy
YXBoaWNDb250ZXh0KSB7CisgICAgICAgIGZyZWUoY29udGV4dCk7CiAgICAgICAgIHJldHVybiAw
OwogICAgIH0KLSAgICBjdHh0LT52aWV3ID0gdmlldzsKLSAgICBjdHh0LT5jciA9IGNhaXJvX3Jl
ZmVyZW5jZShjcik7Ci0gICAgcmV0dXJuIGN0eHQ7CisgICAgY29udGV4dC0+dmlldyA9IHZpZXc7
CisgICAgY29udGV4dC0+Y3IgPSBjYWlyb19yZWZlcmVuY2UoY3IpOworICAgIHJldHVybiBjb250
ZXh0OwogfQogCiB2b2lkIGV3a192aWV3X3BhaW50X2NvbnRleHRfZnJlZShFd2tfVmlld19QYWlu
dF9Db250ZXh0KiBjb250ZXh0KQogewogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGNv
bnRleHQpOwotICAgIGRlbGV0ZSBjb250ZXh0LT5nYzsKKyAgICBkZWxldGUgY29udGV4dC0+Z3Jh
cGhpY0NvbnRleHQ7CiAgICAgY2Fpcm9fZGVzdHJveShjb250ZXh0LT5jcik7CiAgICAgZnJlZShj
b250ZXh0KTsKIH0KQEAgLTI1NDcsMTMgKzI1NDcsMTMgQEAgdm9pZCBld2tfdmlld19wYWludF9j
b250ZXh0X3NhdmUoRXdrX1ZpZXdfUGFpbnRfQ29udGV4dCogY29udGV4dCkKIHsKICAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTihjb250ZXh0KTsKICAgICBjYWlyb19zYXZlKGNvbnRleHQt
PmNyKTsKLSAgICBjb250ZXh0LT5nYy0+c2F2ZSgpOworICAgIGNvbnRleHQtPmdyYXBoaWNDb250
ZXh0LT5zYXZlKCk7CiB9CiAKIHZvaWQgZXdrX3ZpZXdfcGFpbnRfY29udGV4dF9yZXN0b3JlKEV3
a19WaWV3X1BhaW50X0NvbnRleHQqIGNvbnRleHQpCiB7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk4oY29udGV4dCk7Ci0gICAgY29udGV4dC0+Z2MtPnJlc3RvcmUoKTsKKyAgICBjb250
ZXh0LT5ncmFwaGljQ29udGV4dC0+cmVzdG9yZSgpOwogICAgIGNhaXJvX3Jlc3RvcmUoY29udGV4
dC0+Y3IpOwogfQogCkBAIC0yNTYxLDcgKzI1NjEsNyBAQCB2b2lkIGV3a192aWV3X3BhaW50X2Nv
bnRleHRfY2xpcChFd2tfVmlld19QYWludF9Db250ZXh0KiBjb250ZXh0LCBjb25zdCBFaW5hX1Jl
YwogewogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGNvbnRleHQpOwogICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOKGFyZWEpOwotICAgIGNvbnRleHQtPmdjLT5jbGlwKFdlYkNv
cmU6OkludFJlY3QoYXJlYS0+eCwgYXJlYS0+eSwgYXJlYS0+dywgYXJlYS0+aCkpOworICAgIGNv
bnRleHQtPmdyYXBoaWNDb250ZXh0LT5jbGlwKFdlYkNvcmU6OkludFJlY3QoYXJlYS0+eCwgYXJl
YS0+eSwgYXJlYS0+dywgYXJlYS0+aCkpOwogfQogCiB2b2lkIGV3a192aWV3X3BhaW50X2NvbnRl
eHRfcGFpbnQoRXdrX1ZpZXdfUGFpbnRfQ29udGV4dCogY29udGV4dCwgY29uc3QgRWluYV9SZWN0
YW5nbGUqIGFyZWEpCkBAIC0yNTcyLDggKzI1NzIsOCBAQCB2b2lkIGV3a192aWV3X3BhaW50X2Nv
bnRleHRfcGFpbnQoRXdrX1ZpZXdfUGFpbnRfQ29udGV4dCogY29udGV4dCwgY29uc3QgRWluYV9S
ZQogICAgIFdlYkNvcmU6OkludFJlY3QgcmVjdChhcmVhLT54LCBhcmVhLT55LCBhcmVhLT53LCBh
cmVhLT5oKTsKIAogICAgIGlmIChjb250ZXh0LT52aWV3LT5pc1RyYW5zcGFyZW50KCkpCi0gICAg
ICAgIGNvbnRleHQtPmdjLT5jbGVhclJlY3QocmVjdCk7Ci0gICAgY29udGV4dC0+dmlldy0+cGFp
bnQoY29udGV4dC0+Z2MsIHJlY3QpOworICAgICAgICBjb250ZXh0LT5ncmFwaGljQ29udGV4dC0+
Y2xlYXJSZWN0KHJlY3QpOworICAgIGNvbnRleHQtPnZpZXctPnBhaW50KGNvbnRleHQtPmdyYXBo
aWNDb250ZXh0LCByZWN0KTsKIH0KIAogdm9pZCBld2tfdmlld19wYWludF9jb250ZXh0X3BhaW50
X2NvbnRlbnRzKEV3a19WaWV3X1BhaW50X0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEVpbmFfUmVj
dGFuZ2xlKiBhcmVhKQpAQCAtMjU4NCwyMyArMjU4NCwyMyBAQCB2b2lkIGV3a192aWV3X3BhaW50
X2NvbnRleHRfcGFpbnRfY29udGVudHMoRXdrX1ZpZXdfUGFpbnRfQ29udGV4dCogY29udGV4dCwg
Y29ucwogICAgIFdlYkNvcmU6OkludFJlY3QgcmVjdChhcmVhLT54LCBhcmVhLT55LCBhcmVhLT53
LCBhcmVhLT5oKTsKIAogICAgIGlmIChjb250ZXh0LT52aWV3LT5pc1RyYW5zcGFyZW50KCkpCi0g
ICAgICAgIGNvbnRleHQtPmdjLT5jbGVhclJlY3QocmVjdCk7CisgICAgICAgIGNvbnRleHQtPmdy
YXBoaWNDb250ZXh0LT5jbGVhclJlY3QocmVjdCk7CiAKLSAgICBjb250ZXh0LT52aWV3LT5wYWlu
dENvbnRlbnRzKGNvbnRleHQtPmdjLCByZWN0KTsKKyAgICBjb250ZXh0LT52aWV3LT5wYWludENv
bnRlbnRzKGNvbnRleHQtPmdyYXBoaWNDb250ZXh0LCByZWN0KTsKIH0KIAogdm9pZCBld2tfdmll
d19wYWludF9jb250ZXh0X3NjYWxlKEV3a19WaWV3X1BhaW50X0NvbnRleHQqIGNvbnRleHQsIGZs
b2F0IHNjYWxlWCwgZmxvYXQgc2NhbGVZKQogewogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOKGNvbnRleHQpOwogCi0gICAgY29udGV4dC0+Z2MtPnNjYWxlKFdlYkNvcmU6OkZsb2F0U2l6
ZShzY2FsZVgsIHNjYWxlWSkpOworICAgIGNvbnRleHQtPmdyYXBoaWNDb250ZXh0LT5zY2FsZShX
ZWJDb3JlOjpGbG9hdFNpemUoc2NhbGVYLCBzY2FsZVkpKTsKIH0KIAogdm9pZCBld2tfdmlld19w
YWludF9jb250ZXh0X3RyYW5zbGF0ZShFd2tfVmlld19QYWludF9Db250ZXh0KiBjb250ZXh0LCBm
bG9hdCB4LCBmbG9hdCB5KQogewogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGNvbnRl
eHQpOwogCi0gICAgY29udGV4dC0+Z2MtPnRyYW5zbGF0ZSh4LCB5KTsKKyAgICBjb250ZXh0LT5n
cmFwaGljQ29udGV4dC0+dHJhbnNsYXRlKHgsIHkpOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdf
cGFpbnQoRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKiBwcml2LCBjYWlyb190KiBjciwgY29uc3QgRWlu
YV9SZWN0YW5nbGUqIGFyZWEpCkBAIC0yNjA4LDIxICsyNjA4LDIxIEBAIEVpbmFfQm9vbCBld2tf
dmlld19wYWludChFd2tfVmlld19Qcml2YXRlX0RhdGEqIHByaXYsIGNhaXJvX3QqIGNyLCBjb25z
dCBFaW5hX1JlCiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHByaXYsIEVJTkFf
RkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChjciwgRUlOQV9GQUxT
RSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGFyZWEsIEVJTkFfRkFMU0Up
OwotICAgIFdlYkNvcmU6OkZyYW1lVmlldyogdmlldyA9IHByaXYtPm1haW5fZnJhbWUtPnZpZXco
KTsKKyAgICBXZWJDb3JlOjpGcmFtZVZpZXcqIHZpZXcgPSBwcml2LT5tYWluRnJhbWUtPnZpZXco
KTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodmlldywgRUlOQV9GQUxTRSk7
CiAKICAgICBpZiAodmlldy0+bmVlZHNMYXlvdXQoKSkKICAgICAgICAgdmlldy0+Zm9yY2VMYXlv
dXQoKTsKLSAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQgZ2MoY3IpOworICAgIFdlYkNvcmU6
OkdyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHQoY3IpOwogICAgIFdlYkNvcmU6OkludFJl
Y3QgcmVjdChhcmVhLT54LCBhcmVhLT55LCBhcmVhLT53LCBhcmVhLT5oKTsKIAogICAgIGNhaXJv
X3NhdmUoY3IpOwotICAgIGdjLnNhdmUoKTsKLSAgICBnYy5jbGlwKHJlY3QpOworICAgIGdyYXBo
aWNzQ29udGV4dC5zYXZlKCk7CisgICAgZ3JhcGhpY3NDb250ZXh0LmNsaXAocmVjdCk7CiAgICAg
aWYgKHZpZXctPmlzVHJhbnNwYXJlbnQoKSkKLSAgICAgICAgZ2MuY2xlYXJSZWN0KHJlY3QpOwot
ICAgIHZpZXctPnBhaW50KCZnYywgcmVjdCk7Ci0gICAgZ2MucmVzdG9yZSgpOworICAgICAgICBn
cmFwaGljc0NvbnRleHQuY2xlYXJSZWN0KHJlY3QpOworICAgIHZpZXctPnBhaW50KCZncmFwaGlj
c0NvbnRleHQsIHJlY3QpOworICAgIGdyYXBoaWNzQ29udGV4dC5yZXN0b3JlKCk7CiAgICAgY2Fp
cm9fcmVzdG9yZShjcik7CiAKICAgICByZXR1cm4gRUlOQV9UUlVFOwpAQCAtMjYzMywxOSArMjYz
MywxOSBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfcGFpbnRfY29udGVudHMoRXdrX1ZpZXdfUHJpdmF0
ZV9EYXRhKiBwcml2LCBjYWlyb190KiBjciwgY29ucwogICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOX1ZBTChwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTl9WQUwoY3IsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJO
X1ZBTChhcmVhLCBFSU5BX0ZBTFNFKTsKLSAgICBXZWJDb3JlOjpGcmFtZVZpZXcqIHZpZXcgPSBw
cml2LT5tYWluX2ZyYW1lLT52aWV3KCk7CisgICAgV2ViQ29yZTo6RnJhbWVWaWV3KiB2aWV3ID0g
cHJpdi0+bWFpbkZyYW1lLT52aWV3KCk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5f
VkFMKHZpZXcsIEVJTkFfRkFMU0UpOwogCi0gICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0IGdj
KGNyKTsKKyAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KGNyKTsK
ICAgICBXZWJDb3JlOjpJbnRSZWN0IHJlY3QoYXJlYS0+eCwgYXJlYS0+eSwgYXJlYS0+dywgYXJl
YS0+aCk7CiAKICAgICBjYWlyb19zYXZlKGNyKTsKLSAgICBnYy5zYXZlKCk7Ci0gICAgZ2MuY2xp
cChyZWN0KTsKKyAgICBncmFwaGljc0NvbnRleHQuc2F2ZSgpOworICAgIGdyYXBoaWNzQ29udGV4
dC5jbGlwKHJlY3QpOwogICAgIGlmICh2aWV3LT5pc1RyYW5zcGFyZW50KCkpCi0gICAgICAgIGdj
LmNsZWFyUmVjdChyZWN0KTsKLSAgICB2aWV3LT5wYWludENvbnRlbnRzKCZnYywgIHJlY3QpOwot
ICAgIGdjLnJlc3RvcmUoKTsKKyAgICAgICAgZ3JhcGhpY3NDb250ZXh0LmNsZWFyUmVjdChyZWN0
KTsKKyAgICB2aWV3LT5wYWludENvbnRlbnRzKCZncmFwaGljc0NvbnRleHQsICByZWN0KTsKKyAg
ICBncmFwaGljc0NvbnRleHQucmVzdG9yZSgpOwogICAgIGNhaXJvX3Jlc3RvcmUoY3IpOwogCiAg
ICAgcmV0dXJuIEVJTkFfVFJVRTsKQEAgLTI2NzUsOCArMjY3NSw4IEBAIHZvaWQgZXdrX3ZpZXdf
cmVhZHkoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiAgKi8KIHZvaWQgZXdrX3ZpZXdfaW5wdXRfbWV0
aG9kX3N0YXRlX3NldChFdmFzX09iamVjdCogZXdrVmlldywgRWluYV9Cb29sIGFjdGl2ZSkKIHsK
LSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkKTsKLSAgICBFV0tfVklF
V19QUklWX0dFVChzZCwgcHJpdik7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tW
aWV3LCBzbWFydERhdGEpOworICAgIEVXS19WSUVXX1BSSVZfR0VUKHNtYXJ0RGF0YSwgcHJpdik7
CiAgICAgV2ViQ29yZTo6RnJhbWUqIGZvY3VzZWRGcmFtZSA9IHByaXYtPnBhZ2UtPmZvY3VzQ29u
dHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKTsKIAogICAgIHByaXYtPmltaCA9IDA7CkBA
IC0yNzI1LDggKzI3MjUsOCBAQCB2b2lkIGV3a192aWV3X3RpdGxlX3NldChFdmFzX09iamVjdCog
ZXdrVmlldywgY29uc3QgY2hhciogdGl0bGUpCiAgKi8KIHZvaWQgZXdrX3ZpZXdfdXJpX2NoYW5n
ZWQoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
Tihld2tWaWV3LCBzZCk7Ci0gICAgY29uc3QgY2hhciogdXJpID0gZXdrX2ZyYW1lX3VyaV9nZXQo
c2QtPm1haW5fZnJhbWUpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywg
c21hcnREYXRhKTsKKyAgICBjb25zdCBjaGFyKiB1cmkgPSBld2tfZnJhbWVfdXJpX2dldChzbWFy
dERhdGEtPm1haW5fZnJhbWUpOwogICAgIERCRygiZXdrVmlldz0lcCwgdXJpPSVzIiwgZXdrVmll
dywgdXJpID8gdXJpIDogIihudWxsKSIpOwogICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNr
X2NhbGwoZXdrVmlldywgInVyaSxjaGFuZ2VkIiwgKHZvaWQqKXVyaSk7CiB9CkBAIC0yNzM1LDcg
KzI3MzUsNyBAQCB2b2lkIGV3a192aWV3X3VyaV9jaGFuZ2VkKEV2YXNfT2JqZWN0KiBld2tWaWV3
KQogICogQGludGVybmFsCiAgKiBSZXBvcnRzIHRoYXQgYSBET00gZG9jdW1lbnQgb2JqZWN0IGhh
cyBmaW5pc2hlZCBsb2FkaW5nIGZvciBAcCBmcmFtZS4KICAqCi0gKiBAcGFyYW0gbyBWaWV3IHdo
aWNoIGNvbnRhaW5zIHRoZSBmcmFtZS4KKyAqIEBwYXJhbSBld2tWaWV3IFZpZXcgd2hpY2ggY29u
dGFpbnMgdGhlIGZyYW1lLgogICogQHBhcmFtIGZyYW1lIFRoZSBmcmFtZSB3aG9zZSBsb2FkIGhh
cyB0cmlnZ2VyZWQgdGhlIGV2ZW50LgogICoKICAqIEVtaXRzIHNpZ25hbDogImxvYWQsZG9jdW1l
bnQsZmluaXNoZWQiIHdpdGggQHAgZnJhbWUgYXMgdGhlIHBhcmFtZXRlci4KQEAgLTI3NDksNyAr
Mjc0OSw3IEBAIHZvaWQgZXdrX3ZpZXdfbG9hZF9kb2N1bWVudF9maW5pc2hlZChFdmFzX09iamVj
dCogZXdrVmlldywgRXZhc19PYmplY3QqIGZyYW1lKQogICogQGludGVybmFsCiAgKiBSZXBvcnRz
IHRoZSB2aWV3IHN0YXJ0ZWQgbG9hZGluZyBzb21ldGhpbmcuCiAgKgotICogQHBhcmFtIG8gVmll
dy4KKyAqIEBwYXJhbSBld2tWaWV3IFZpZXcuCiAgKgogICogRW1pdHMgc2lnbmFsOiAibG9hZCxz
dGFydGVkIiB3aXRoIG5vIHBhcmFtZXRlcnMuCiAgKi8KQEAgLTI3NjIsNyArMjc2Miw3IEBAIHZv
aWQgZXdrX3ZpZXdfbG9hZF9zdGFydGVkKEV2YXNfT2JqZWN0KiBld2tWaWV3KQogLyoqCiAgKiBS
ZXBvcnRzIHRoZSBmcmFtZSBzdGFydGVkIGxvYWRpbmcgc29tZXRoaW5nLgogICoKLSAqIEBwYXJh
bSBvIFZpZXcuCisgKiBAcGFyYW0gZXdrVmlldyBWaWV3LgogICoKICAqIEVtaXRzIHNpZ25hbDog
ImxvYWQsc3RhcnRlZCIgb24gbWFpbiBmcmFtZSB3aXRoIG5vIHBhcmFtZXRlcnMuCiAgKi8KQEAg
LTI3NzcsNyArMjc3Nyw3IEBAIHZvaWQgZXdrX3ZpZXdfZnJhbWVfbWFpbl9sb2FkX3N0YXJ0ZWQo
RXZhc19PYmplY3QqIGV3a1ZpZXcpCiAgKiBAaW50ZXJuYWwKICAqIFJlcG9ydHMgdGhlIG1haW4g
ZnJhbWUgc3RhcnRlZCBwcm92aXNpb25hbCBsb2FkLgogICoKLSAqIEBwYXJhbSBvIFZpZXcuCisg
KiBAcGFyYW0gZXdrVmlldyBWaWV3LgogICoKICAqIEVtaXRzIHNpZ25hbDogImxvYWQscHJvdmlz
aW9uYWwiIG9uIFZpZXcgd2l0aCBubyBwYXJhbWV0ZXJzLgogICovCkBAIC0yNzkxLDcgKzI3OTEs
NyBAQCB2b2lkIGV3a192aWV3X2xvYWRfcHJvdmlzaW9uYWwoRXZhc19PYmplY3QqIGV3a1ZpZXcp
CiAgKiBAaW50ZXJuYWwKICAqIFJlcG9ydHMgdmlldyBjYW4gYmUgc2hvd24gYWZ0ZXIgYSBuZXcg
d2luZG93IGlzIGNyZWF0ZWQuCiAgKgotICogQHBhcmFtIG8gRnJhbWUuCisgKiBAcGFyYW0gZXdr
VmlldyBGcmFtZS4KICAqCiAgKiBFbWl0cyBzaWduYWw6ICJsb2FkLG5ld3dpbmRvdyxzaG93IiBv
biB2aWV3IHdpdGggbm8gcGFyYW1ldGVycy4KICAqLwpAQCAtMjgwNiwyMSArMjgwNiwyMSBAQCB2
b2lkIGV3a192aWV3X2xvYWRfc2hvdyhFdmFzX09iamVjdCogZXdrVmlldykKICAqIEBpbnRlcm5h
bAogICogUmVwb3J0cyB0aGUgbWFpbiBmcmFtZSB3YXMgY2xlYXJlZC4KICAqCi0gKiBAcGFyYW0g
byBWaWV3LgorICogQHBhcmFtIGV3a1ZpZXcgVmlldy4KICAqLwogdm9pZCBld2tfdmlld19mcmFt
ZV9tYWluX2NsZWFyZWQoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7CiAgICAgREJHKCJld2tWaWV3
PSVwIiwgZXdrVmlldyk7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBz
ZCk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFwaS0+Zmx1c2gpOwotICAg
IHNkLT5hcGktPmZsdXNoKHNkKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1Zp
ZXcsIHNtYXJ0RGF0YSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRh
LT5hcGktPmZsdXNoKTsKKyAgICBzbWFydERhdGEtPmFwaS0+Zmx1c2goc21hcnREYXRhKTsKIH0K
IAogLyoqCiAgKiBAaW50ZXJuYWwKICAqIFJlcG9ydHMgdGhlIG1haW4gZnJhbWUgcmVjZWl2ZWQg
YW4gaWNvbi4KICAqCi0gKiBAcGFyYW0gbyBWaWV3LgorICogQHBhcmFtIGV3a1ZpZXcgVmlldy4K
ICAqCiAgKiBFbWl0cyBzaWduYWw6ICJpY29uLHJlY2VpdmVkIiB3aXRoIG5vIHBhcmFtZXRlcnMu
CiAgKi8KQEAgLTI4NjcsMTAgKzI4NjcsMTAgQEAgdm9pZCBld2tfdmlld19sb2FkX2Vycm9yKEV2
YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBFd2tfRnJhbWVfTG9hZF9FcnJvciogZXJyb3IKICAq
Lwogdm9pZCBld2tfdmlld19sb2FkX3Byb2dyZXNzX2NoYW5nZWQoRXZhc19PYmplY3QqIGV3a1Zp
ZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCk7Ci0gICAg
RVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2KTsKKyAgICBFV0tfVklFV19TRF9H
RVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRf
T1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdik7CiAKLSAgICAvLyBFdmFzX0Nvb3JkIHcsIGg7Cisg
ICAgLy8gRXZhc19Db29yZCB3aWR0aCwgaGVpZ2h0OwogICAgIGRvdWJsZSBwcm9ncmVzcyA9IHBy
aXYtPnBhZ2UtPnByb2dyZXNzKCktPmVzdGltYXRlZFByb2dyZXNzKCk7CiAKICAgICBEQkcoImV3
a1ZpZXc9JXAgKHA9JTAuM2YpIiwgZXdrVmlldywgcHJvZ3Jlc3MpOwpAQCAtMjg4MCw5ICsyODgw
LDkgQEAgdm9pZCBld2tfdmlld19sb2FkX3Byb2dyZXNzX2NoYW5nZWQoRXZhc19PYmplY3QqIGV3
a1ZpZXcpCiAKIC8qKgogICogQGludGVybmFsCi0gKiBSZXBvcnRzIHZpZXcgQHBhcmFtIG8gc2hv
dWxkIGJlIHJlc3RvcmVkIHRvIGRlZmF1bHQgY29uZGl0aW9ucworICogUmVwb3J0cyB2aWV3IEBw
YXJhbSBld2tWaWV3IHNob3VsZCBiZSByZXN0b3JlZCB0byBkZWZhdWx0IGNvbmRpdGlvbnMKICAq
Ci0gKiBAcGFyYW0gbyBWaWV3LgorICogQHBhcmFtIGV3a1ZpZXcgVmlldy4KICAqIEBwYXJhbSBm
cmFtZSBGcmFtZSB0aGF0IG9yaWdpbmF0ZWQgcmVzdG9yZS4KICAqCiAgKiBFbWl0cyBzaWduYWw6
ICJyZXN0b3JlIiB3aXRoIGZyYW1lLgpAQCAtMjkwMiwzMCArMjkwMiwzMCBAQCB2b2lkIGV3a192
aWV3X3Jlc3RvcmVfc3RhdGUoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV2YXNfT2JqZWN0KiBmcmFt
ZSkKICAqIGNhbGxpbmcgZXdrX3dpbmRvd19mZWF0dXJlc19yZWYod2luZG93X2ZlYXR1cmVzKS4g
T3RoZXJ3aXNlIHRoaXMgc3RydWN0IHdpbGwKICAqIGJlIGZyZWVkIGFmdGVyIHJldHVybmluZyB0
byB0aGlzIGZ1bmN0aW9uLgogICoKLSAqIEBwYXJhbSBvIEN1cnJlbnQgdmlldy4KKyAqIEBwYXJh
bSBld2tWaWV3IEN1cnJlbnQgdmlldy4KICAqIEBwYXJhbSBqYXZhc2NyaXB0IEBjIEVJTkFfVFJV
RSBpZiB0aGUgbmV3IHdpbmRvdyBpcyBvcmlnaW5hdGVkIGZyb20gamF2YXNjcmlwdCwKICAqIEBj
IEVJTkFfRkFMU0Ugb3RoZXJ3aXNlCi0gKiBAcGFyYW0gd2luZG93X2ZlYXR1cmVzIEZlYXR1cmVz
IG9mIHRoZSBuZXcgd2luZG93IGJlaW5nIGNyZWF0ZWQuIElmIGl0J3MgQGMKKyAqIEBwYXJhbSB3
aWR0aGluZG93X2ZlYXR1cmVzIEZlYXR1cmVzIG9mIHRoZSBuZXcgd2luZG93IGJlaW5nIGNyZWF0
ZWQuIElmIGl0J3MgQGMKICAqIE5VTEwsIGl0IHdpbGwgYmUgY3JlYXRlZCBhIHdpbmRvdyB3aXRo
IGRlZmF1bHQgZmVhdHVyZXMuCiAgKgogICogQHJldHVybiBOZXcgdmlldywgaW4gY2FzZSBzbWFy
dCBjbGFzcyBpbXBsZW1lbnRzIHRoZSBjcmVhdGlvbiBvZiBuZXcgd2luZG93czsKLSAqIGVsc2Us
IGN1cnJlbnQgdmlldyBAcGFyYW0gbyBvciBAYyAwIG9uIGZhaWx1cmUuCisgKiBlbHNlLCBjdXJy
ZW50IHZpZXcgQHBhcmFtIGV3a1ZpZXcgb3IgQGMgMCBvbiBmYWlsdXJlLgogICoKICAqIEBzZWUg
ZXdrX3dpbmRvd19mZWF0dXJlc19yZWYoKS4KICAqLwogRXZhc19PYmplY3QqIGV3a192aWV3X3dp
bmRvd19jcmVhdGUoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCBqYXZhc2NyaXB0LCBj
b25zdCBXZWJDb3JlOjpXaW5kb3dGZWF0dXJlcyogY29yZUZlYXR1cmVzKQogewotICAgIEVXS19W
SUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIDApOworICAgIEVXS19WSUVXX1NEX0dF
VF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCAwKTsKIAotICAgIGlmICghc2QtPmFwaS0+
d2luZG93X2NyZWF0ZSkKKyAgICBpZiAoIXNtYXJ0RGF0YS0+YXBpLT53aW5kb3dfY3JlYXRlKQog
ICAgICAgICByZXR1cm4gZXdrVmlldzsKIAotICAgIEV3a19XaW5kb3dfRmVhdHVyZXMqIHdpbmRv
d19mZWF0dXJlcyA9IGV3a193aW5kb3dfZmVhdHVyZXNfbmV3X2Zyb21fY29yZShjb3JlRmVhdHVy
ZXMpOwotICAgIGlmICghd2luZG93X2ZlYXR1cmVzKQorICAgIEV3a19XaW5kb3dfRmVhdHVyZXMq
IHdpbmRvd0ZlYXR1cmVzID0gZXdrX3dpbmRvd19mZWF0dXJlc19uZXdfZnJvbV9jb3JlKGNvcmVG
ZWF0dXJlcyk7CisgICAgaWYgKCF3aW5kb3dGZWF0dXJlcykKICAgICAgICAgcmV0dXJuIDA7CiAK
LSAgICBFdmFzX09iamVjdCogdmlldyA9IHNkLT5hcGktPndpbmRvd19jcmVhdGUoc2QsIGphdmFz
Y3JpcHQsIHdpbmRvd19mZWF0dXJlcyk7Ci0gICAgZXdrX3dpbmRvd19mZWF0dXJlc191bnJlZih3
aW5kb3dfZmVhdHVyZXMpOworICAgIEV2YXNfT2JqZWN0KiB2aWV3ID0gc21hcnREYXRhLT5hcGkt
PndpbmRvd19jcmVhdGUoc21hcnREYXRhLCBqYXZhc2NyaXB0LCB3aW5kb3dGZWF0dXJlcyk7Cisg
ICAgZXdrX3dpbmRvd19mZWF0dXJlc191bnJlZih3aW5kb3dGZWF0dXJlcyk7CiAKICAgICByZXR1
cm4gdmlldzsKIH0KQEAgLTI5MzksMTYgKzI5MzksMTYgQEAgRXZhc19PYmplY3QqIGV3a192aWV3
X3dpbmRvd19jcmVhdGUoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCBqYXZhc2NyaXB0
LAogICogd2l0aCBhICdzZWxmLmNsb3NlKCknIGluIEphdmFzY3JpcHQpIGJyb3dzZXIgbXVzdCBw
b3N0cG9uZSB0aGUgZGVsZXRpb24gdG8gYW4KICAqIGlkbGVyLgogICoKLSAqIEBwYXJhbSBvIFZp
ZXcgdG8gYmUgY2xvc2VkLgorICogQHBhcmFtIGV3a1ZpZXcgVmlldyB0byBiZSBjbG9zZWQuCiAg
Ki8KIHZvaWQgZXdrX3ZpZXdfd2luZG93X2Nsb3NlKEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewot
ICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QpOworICAgIEVXS19WSUVX
X1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhKTsKIAogICAgIGV3a192aWV3X3N0
b3AoZXdrVmlldyk7Ci0gICAgaWYgKCFzZC0+YXBpLT53aW5kb3dfY2xvc2UpCisgICAgaWYgKCFz
bWFydERhdGEtPmFwaS0+d2luZG93X2Nsb3NlKQogICAgICAgICByZXR1cm47Ci0gICAgc2QtPmFw
aS0+d2luZG93X2Nsb3NlKHNkKTsKKyAgICBzbWFydERhdGEtPmFwaS0+d2luZG93X2Nsb3NlKHNt
YXJ0RGF0YSk7CiB9CiAKIC8qKgpAQCAtMjk4OSw3ICsyOTg5LDcgQEAgdm9pZCBld2tfdmlld190
b29sYmFyc192aXNpYmxlX3NldChFdmFzX09iamVjdCogZXdrVmlldywgRWluYV9Cb29sIHZpc2li
bGUpCiAgKiBAaW50ZXJuYWwKICAqIEdldCB0b29sYmFyIHZpc2liaWxpdHkuCiAgKgotICogQHBh
cmFtIG8gVmlldy4KKyAqIEBwYXJhbSBld2tWaWV3IFZpZXcuCiAgKiBAcGFyYW0gdmlzaWJsZSBi
b29sZWFuIHBvaW50ZXIgaW4gd2hpY2ggdG8gc2F2ZSB0aGUgcmVzdWx0LiBJdCBkZWZhdWx0cwog
ICogdG8gQGMgRkFMU0UsIGkuZS4gaWYgYnJvd3NlciBkb2VzIG5vIGxpc3RlbiB0byBlbWl0dGVk
IHNpZ25hbCwgaXQgbWVhbnMKICAqIHRoZXJlIGFyZSBubyB0b29sYmFycyBhbmQgdGhlcmVmb3Jl
IHRoZXkgYXJlIG5vdCB2aXNpYmxlLgpAQCAtMzAwNyw3ICszMDA3LDcgQEAgdm9pZCBld2tfdmll
d190b29sYmFyc192aXNpYmxlX2dldChFdmFzX09iamVjdCogZXdrVmlldywgRWluYV9Cb29sKiB2
aXNpYmxlKQogICogQGludGVybmFsCiAgKiBTZXQgc3RhdHVzYmFyIHZpc2libGUuCiAgKgotICog
QHBhcmFtIG8gVmlldy4KKyAqIEBwYXJhbSBld2tWaWV3IFZpZXcuCiAgKiBAcGFyYW0gdmlzaWJs
ZSBAYyBUUlVFIGlmIHN0YXR1c2JhciBhcmUgdmlzaWJsZSwgQGMgRkFMU0Ugb3RoZXJ3aXNlLgog
ICoKICAqIEVtaXRzIHNpZ25hbDogInN0YXR1c2Jhcix2aXNpYmxlLHNldCIgd2l0aCBhIHBvaW50
ZXIgdG8gYSBib29sZWFuLgpAQCAtMzAyMiw3ICszMDIyLDcgQEAgdm9pZCBld2tfdmlld19zdGF0
dXNiYXJfdmlzaWJsZV9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCB2aXNpYmxl
KQogICogQGludGVybmFsCiAgKiBHZXQgc3RhdHVzYmFyIHZpc2liaWxpdHkuCiAgKgotICogQHBh
cmFtIG8gVmlldy4KKyAqIEBwYXJhbSBld2tWaWV3IFZpZXcuCiAgKiBAcGFyYW0gdmlzaWJsZSBi
b29sZWFuIHBvaW50ZXIgaW4gd2hpY2ggdG8gc2F2ZSB0aGUgcmVzdWx0LiBJdCBkZWZhdWx0cwog
ICogdG8gQGMgRkFMU0UsIGkuZS4gaWYgYnJvd3NlciBkb2VzIG5vIGxpc3RlbiB0byBlbWl0dGVk
IHNpZ25hbCwgaXQgbWVhbnMKICAqIHRoZXJlIGlzIG5vIHN0YXR1c2JhciBhbmQgdGhlcmVmb3Jl
IGl0IGlzIG5vdCB2aXNpYmxlLgpAQCAtMzA0MCw3ICszMDQwLDcgQEAgdm9pZCBld2tfdmlld19z
dGF0dXNiYXJfdmlzaWJsZV9nZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCogdmlz
aWJsZSkKICAqIEBpbnRlcm5hbAogICogU2V0IHRleHQgb2Ygc3RhdHVzYmFyCiAgKgotICogQHBh
cmFtIG8gVmlldy4KKyAqIEBwYXJhbSBld2tWaWV3IFZpZXcuCiAgKiBAcGFyYW0gdGV4dCBOZXcg
dGV4dCB0byBwdXQgb24gc3RhdHVzYmFyLgogICoKICAqIEVtaXRzIHNpZ25hbDogInN0YXR1c2Jh
cix0ZXh0LHNldCIgd2l0aCBhIHN0cmluZy4KQEAgLTMwNTYsNyArMzA1Niw3IEBAIHZvaWQgZXdr
X3ZpZXdfc3RhdHVzYmFyX3RleHRfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBjaGFy
KiB0ZXh0KQogICogQGludGVybmFsCiAgKiBTZXQgc2Nyb2xsYmFycyB2aXNpYmxlLgogICoKLSAq
IEBwYXJhbSBvIFZpZXcuCisgKiBAcGFyYW0gZXdrVmlldyBWaWV3LgogICogQHBhcmFtIHZpc2li
bGUgQGMgVFJVRSBpZiBzY3JvbGxiYXJzIGFyZSB2aXNpYmxlLCBAYyBGQUxTRSBvdGhlcndpc2Uu
CiAgKgogICogRW1pdHMgc2lnbmFsOiAic2Nyb2xsYmFycyx2aXNpYmxlLHNldCIgd2l0aCBhIHBv
aW50ZXIgdG8gYSBib29sZWFuLgpAQCAtMzA3MSw3ICszMDcxLDcgQEAgdm9pZCBld2tfdmlld19z
Y3JvbGxiYXJzX3Zpc2libGVfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wgdmlz
aWJsZSkKICAqIEBpbnRlcm5hbAogICogR2V0IHNjcm9sbGJhcnMgdmlzaWJpbGl0eS4KICAqCi0g
KiBAcGFyYW0gbyBWaWV3LgorICogQHBhcmFtIGV3a1ZpZXcgVmlldy4KICAqIEBwYXJhbSB2aXNp
YmxlIGJvb2xlYW4gcG9pbnRlciBpbiB3aGljaCB0byBzYXZlIHRoZSByZXN1bHQuIEl0IGRlZmF1
bHRzCiAgKiB0byBAYyBGQUxTRSwgaS5lLiBpZiBicm93c2VyIGRvZXMgbm8gbGlzdGVuIHRvIGVt
aXR0ZWQgc2lnbmFsLCBpdCBtZWFucwogICogdGhlcmUgYXJlIG5vIHNjcm9sbGJhcnMgYW5kIHRo
ZXJlZm9yZSB0aGV5IGFyZSBub3QgdmlzaWJsZS4KQEAgLTMwODksNyArMzA4OSw3IEBAIHZvaWQg
ZXdrX3ZpZXdfc2Nyb2xsYmFyc192aXNpYmxlX2dldChFdmFzX09iamVjdCogZXdrVmlldywgRWlu
YV9Cb29sKiB2aXNpYmxlKQogICogQGludGVybmFsCiAgKiBTZXQgbWVudWJhciB2aXNpYmxlLgog
ICoKLSAqIEBwYXJhbSBvIFZpZXcuCisgKiBAcGFyYW0gZXdrVmlldyBWaWV3LgogICogQHBhcmFt
IHZpc2libGUgQGMgVFJVRSBpZiBtZW51YmFyIGlzIHZpc2libGUsIEBjIEZBTFNFIG90aGVyd2lz
ZS4KICAqCiAgKiBFbWl0cyBzaWduYWw6ICJtZW51YmFyLHZpc2libGUsc2V0IiB3aXRoIGEgcG9p
bnRlciB0byBhIGJvb2xlYW4uCkBAIC0zMTA0LDcgKzMxMDQsNyBAQCB2b2lkIGV3a192aWV3X21l
bnViYXJfdmlzaWJsZV9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCB2aXNpYmxl
KQogICogQGludGVybmFsCiAgKiBHZXQgbWVudWJhciB2aXNpYmlsaXR5LgogICoKLSAqIEBwYXJh
bSBvIFZpZXcuCisgKiBAcGFyYW0gZXdrVmlldyBWaWV3LgogICogQHBhcmFtIHZpc2libGUgYm9v
bGVhbiBwb2ludGVyIGluIHdoaWNoIHRvIHNhdmUgdGhlIHJlc3VsdC4gSXQgZGVmYXVsdHMKICAq
IHRvIEBjIEZBTFNFLCBpLmUuIGlmIGJyb3dzZXIgZG9lcyBubyBsaXN0ZW4gdG8gZW1pdHRlZCBz
aWduYWwsIGl0IG1lYW5zCiAgKiB0aGVyZSBpcyBubyBtZW51YmFyIGFuZCB0aGVyZWZvcmUgaXQg
aXMgbm90IHZpc2libGUuCkBAIC0zMTIyLDcgKzMxMjIsNyBAQCB2b2lkIGV3a192aWV3X21lbnVi
YXJfdmlzaWJsZV9nZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCogdmlzaWJsZSkK
ICAqIEBpbnRlcm5hbAogICogU2V0IHRvb2x0aXAgdGV4dCBhbmQgZGlzcGxheSBpZiBpdCBpcyBj
dXJyZW50bHkgaGlkZGVuLgogICoKLSAqIEBwYXJhbSBvIFZpZXcuCisgKiBAcGFyYW0gZXdrVmll
dyBWaWV3LgogICogQHBhcmFtIHRleHQgVGV4dCB0byBzZXQgdG9vbHRpcCB0by4KICAqCiAgKiBF
bWl0cyBzaWduYWw6ICJ0b29sdGlwLHRleHQsc2V0IiB3aXRoIGEgc3RyaW5nLiBJZiB0b29sdGlw
IG11c3QgYmUgYWN0dWFsbHkKQEAgLTMxMzcsNyArMzEzNyw3IEBAIHZvaWQgZXdrX3ZpZXdfdG9v
bHRpcF90ZXh0X3NldChFdmFzX09iamVjdCogZXdrVmlldywgY29uc3QgY2hhciogdGV4dCkKIC8q
KgogICogQGludGVybmFsCiAgKgotICogQHBhcmFtIG8gVmlldy4KKyAqIEBwYXJhbSBld2tWaWV3
IFZpZXcuCiAgKiBAcGFyYW0gbWVzc2FnZSBTdHJpbmcgdG8gc2hvdyBvbiBjb25zb2xlLgogICog
QHBhcmFtIGxpbmVOdW1iZXIgTGluZSBudW1iZXIuCiAgKiBAc291cmNlSUQgU291cmNlIGlkLgpA
QCAtMzE0Niw1OCArMzE0Niw1OCBAQCB2b2lkIGV3a192aWV3X3Rvb2x0aXBfdGV4dF9zZXQoRXZh
c19PYmplY3QqIGV3a1ZpZXcsIGNvbnN0IGNoYXIqIHRleHQpCiB2b2lkIGV3a192aWV3X2FkZF9j
b25zb2xlX21lc3NhZ2UoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGNvbnN0IGNoYXIqIG1lc3NhZ2Us
IHVuc2lnbmVkIGludCBsaW5lTnVtYmVyLCBjb25zdCBjaGFyKiBzb3VyY2VJRCkKIHsKICAgICBE
QkcoImV3a1ZpZXc9JXAgbWVzc2FnZT0lcyBsaW5lTnVtYmVyPSV1IHNvdXJjZUlEPSVzIiwgZXdr
VmlldywgbWVzc2FnZSwgbGluZU51bWJlciwgc291cmNlSUQpOwotICAgIEVXS19WSUVXX1NEX0dF
VF9PUl9SRVRVUk4oZXdrVmlldywgc2QpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJO
KHNkLT5hcGkpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGktPmFkZF9j
b25zb2xlX21lc3NhZ2UpOwotICAgIHNkLT5hcGktPmFkZF9jb25zb2xlX21lc3NhZ2Uoc2QsIG1l
c3NhZ2UsIGxpbmVOdW1iZXIsIHNvdXJjZUlEKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVU
VVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4o
c21hcnREYXRhLT5hcGkpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0
YS0+YXBpLT5hZGRfY29uc29sZV9tZXNzYWdlKTsKKyAgICBzbWFydERhdGEtPmFwaS0+YWRkX2Nv
bnNvbGVfbWVzc2FnZShzbWFydERhdGEsIG1lc3NhZ2UsIGxpbmVOdW1iZXIsIHNvdXJjZUlEKTsK
IH0KIAogYm9vbCBld2tfdmlld19mb2N1c19jYW5fY3ljbGUoRXZhc19PYmplY3QqIGV3a1ZpZXcs
IEV3a19Gb2N1c19EaXJlY3Rpb24gZGlyZWN0aW9uKQogewogICAgIERCRygiZXdrVmlldz0lcCBk
aXJlY3Rpb249JWQiLCBld2tWaWV3LCBkaXJlY3Rpb24pOwotICAgIEVXS19WSUVXX1NEX0dFVF9P
Ul9SRVRVUk4oZXdrVmlldywgc2QsIGZhbHNlKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTl9WQUwoc2QtPmFwaSwgZmFsc2UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrVmlldywgc21hcnREYXRhLCBmYWxzZSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk5fVkFMKHNtYXJ0RGF0YS0+YXBpLCBmYWxzZSk7CiAKLSAgICBpZiAoIXNkLT5hcGktPmZvY3Vz
X2Nhbl9jeWNsZSkKKyAgICBpZiAoIXNtYXJ0RGF0YS0+YXBpLT5mb2N1c19jYW5fY3ljbGUpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBzZC0+YXBpLT5mb2N1c19jYW5fY3lj
bGUoc2QsIGRpcmVjdGlvbik7CisgICAgcmV0dXJuIHNtYXJ0RGF0YS0+YXBpLT5mb2N1c19jYW5f
Y3ljbGUoc21hcnREYXRhLCBkaXJlY3Rpb24pOwogfQogCiB2b2lkIGV3a192aWV3X3J1bl9qYXZh
c2NyaXB0X2FsZXJ0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFdmFzX09iamVjdCogZnJhbWUsIGNv
bnN0IGNoYXIqIG1lc3NhZ2UpCiB7CiAgICAgREJHKCJld2tWaWV3PSVwIGZyYW1lPSVwIG1lc3Nh
Z2U9JXMiLCBld2tWaWV3LCBmcmFtZSwgbWVzc2FnZSk7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihld2tWaWV3LCBzZCk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2Qt
PmFwaSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEp
OworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+YXBpKTsKIAotICAg
IGlmICghc2QtPmFwaS0+cnVuX2phdmFzY3JpcHRfYWxlcnQpCisgICAgaWYgKCFzbWFydERhdGEt
PmFwaS0+cnVuX2phdmFzY3JpcHRfYWxlcnQpCiAgICAgICAgIHJldHVybjsKIAotICAgIHNkLT5h
cGktPnJ1bl9qYXZhc2NyaXB0X2FsZXJ0KHNkLCBmcmFtZSwgbWVzc2FnZSk7CisgICAgc21hcnRE
YXRhLT5hcGktPnJ1bl9qYXZhc2NyaXB0X2FsZXJ0KHNtYXJ0RGF0YSwgZnJhbWUsIG1lc3NhZ2Up
OwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfcnVuX2phdmFzY3JpcHRfY29uZmlybShFdmFzX09i
amVjdCogZXdrVmlldywgRXZhc19PYmplY3QqIGZyYW1lLCBjb25zdCBjaGFyKiBtZXNzYWdlKQog
ewogICAgIERCRygiZXdrVmlldz0lcCBmcmFtZT0lcCBtZXNzYWdlPSVzIiwgZXdrVmlldywgZnJh
bWUsIG1lc3NhZ2UpOwotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2Qs
IEVJTkFfRkFMU0UpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+YXBp
LCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNt
YXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFM
KHNtYXJ0RGF0YS0+YXBpLCBFSU5BX0ZBTFNFKTsKIAotICAgIGlmICghc2QtPmFwaS0+cnVuX2ph
dmFzY3JpcHRfY29uZmlybSkKKyAgICBpZiAoIXNtYXJ0RGF0YS0+YXBpLT5ydW5famF2YXNjcmlw
dF9jb25maXJtKQogICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKIAotICAgIHJldHVybiBzZC0+
YXBpLT5ydW5famF2YXNjcmlwdF9jb25maXJtKHNkLCBmcmFtZSwgbWVzc2FnZSk7CisgICAgcmV0
dXJuIHNtYXJ0RGF0YS0+YXBpLT5ydW5famF2YXNjcmlwdF9jb25maXJtKHNtYXJ0RGF0YSwgZnJh
bWUsIG1lc3NhZ2UpOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfcnVuX2phdmFzY3JpcHRfcHJv
bXB0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFdmFzX09iamVjdCogZnJhbWUsIGNvbnN0IGNoYXIq
IG1lc3NhZ2UsIGNvbnN0IGNoYXIqIGRlZmF1bHRWYWx1ZSwgY2hhcioqIHZhbHVlKQogewogICAg
IERCRygiZXdrVmlldz0lcCBmcmFtZT0lcCBtZXNzYWdlPSVzIiwgZXdrVmlldywgZnJhbWUsIG1l
c3NhZ2UpOwotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFf
RkFMU0UpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+YXBpLCBFSU5B
X0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0
YSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0
RGF0YS0+YXBpLCBFSU5BX0ZBTFNFKTsKIAotICAgIGlmICghc2QtPmFwaS0+cnVuX2phdmFzY3Jp
cHRfcHJvbXB0KQorICAgIGlmICghc21hcnREYXRhLT5hcGktPnJ1bl9qYXZhc2NyaXB0X3Byb21w
dCkKICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CiAKLSAgICByZXR1cm4gc2QtPmFwaS0+cnVu
X2phdmFzY3JpcHRfcHJvbXB0KHNkLCBmcmFtZSwgbWVzc2FnZSwgZGVmYXVsdFZhbHVlLCB2YWx1
ZSk7CisgICAgcmV0dXJuIHNtYXJ0RGF0YS0+YXBpLT5ydW5famF2YXNjcmlwdF9wcm9tcHQoc21h
cnREYXRhLCBmcmFtZSwgbWVzc2FnZSwgZGVmYXVsdFZhbHVlLCB2YWx1ZSk7CiB9CiAKIC8qKgpA
QCAtMzIwNywyMCArMzIwNywyMCBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfcnVuX2phdmFzY3JpcHRf
cHJvbXB0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFdmFzX09iamVjdCogZnJhbQogICogaW1wbGVt
ZW50YXRpb24sIHdoaWNoIGxvZ3MgYW5kIHJldHVybnMgRUlOQV9GQUxTRS4gQ2xpZW50IG1heSBy
ZW1vdmUgbG9nIGJ5CiAgKiBzZXR0aW5nIHRoaXMgZnVuY3Rpb24gMCwgd2hpY2ggd2lsbCBqdXN0
IHJldHVybiBFSU5BX0ZBTFNFLgogICoKLSAqIEBwYXJhbSBvIFZpZXcuCisgKiBAcGFyYW0gZXdr
VmlldyBWaWV3LgogICoKICAqIEByZXR1cm4gQGMgRUlOQV9UUlVFIGlmIHNjcmlwdCBzaG91bGQg
YmUgc3RvcHBlZDsgQGMgRUlOQV9GQUxTRSBvdGhlcndpc2UKICAqLwogRWluYV9Cb29sIGV3a192
aWV3X3Nob3VsZF9pbnRlcnJ1cHRfamF2YXNjcmlwdChFdmFzX09iamVjdCogZXdrVmlldykKIHsK
ICAgICBEQkcoImV3a1ZpZXc9JXAiLCBld2tWaWV3KTsKLSAgICBFV0tfVklFV19TRF9HRVRfT1Jf
UkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTl9WQUwoc2QtPmFwaSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmFwaSwgRUlOQV9GQUxTRSk7CiAKLSAgICBp
ZiAoIXNkLT5hcGktPnNob3VsZF9pbnRlcnJ1cHRfamF2YXNjcmlwdCkKKyAgICBpZiAoIXNtYXJ0
RGF0YS0+YXBpLT5zaG91bGRfaW50ZXJydXB0X2phdmFzY3JpcHQpCiAgICAgICAgIHJldHVybiBF
SU5BX0ZBTFNFOwogCi0gICAgcmV0dXJuIHNkLT5hcGktPnNob3VsZF9pbnRlcnJ1cHRfamF2YXNj
cmlwdChzZCk7CisgICAgcmV0dXJuIHNtYXJ0RGF0YS0+YXBpLT5zaG91bGRfaW50ZXJydXB0X2ph
dmFzY3JpcHQoc21hcnREYXRhKTsKIH0KIAogLyoqCkBAIC0zMjMwLDUxICszMjMwLDUxIEBAIEVp
bmFfQm9vbCBld2tfdmlld19zaG91bGRfaW50ZXJydXB0X2phdmFzY3JpcHQoRXZhc19PYmplY3Qq
IGV3a1ZpZXcpCiAgKiBpcyBleGNlZWRlZC4gQnJvd3NlciBtYXkgdXNlIHRoaXMgdG8gaW5jcmVh
c2UgdGhlIHNpemUgb2YgcXVvdGEgYmVmb3JlIHRoZQogICogb3JpZ2luYXRpbmcgb3BlcmF0aW9u
YSBmYWlscy4KICAqCi0gKiBAcGFyYW0gbyBWaWV3LgorICogQHBhcmFtIGV3a1ZpZXcgVmlldy4K
ICAqIEBwYXJhbSBmcmFtZSBUaGUgZnJhbWUgd2hvc2Ugd2ViIHBhZ2UgZXhjZWVkZWQgaXRzIGRh
dGFiYXNlIHF1b3RhLgogICogQHBhcmFtIGRhdGFiYXNlTmFtZSBEYXRhYmFzZSBuYW1lLgotICog
QHBhcmFtIGN1cnJlbnRfc2l6ZSBDdXJyZW50IHNpemUgb2YgdGhpcyBkYXRhYmFzZQotICogQHBh
cmFtIGV4cGVjdGVkX3NpemUgVGhlIGV4cGVjdGVkIHNpemUgb2YgdGhpcyBkYXRhYmFzZSBpbiBv
cmRlciB0byBmdWxmaWxsCisgKiBAcGFyYW0gY3VycmVudFNpemUgQ3VycmVudCBzaXplIG9mIHRo
aXMgZGF0YWJhc2UKKyAqIEBwYXJhbSBleHBlY3RlZFNpemUgVGhlIGV4cGVjdGVkIHNpemUgb2Yg
dGhpcyBkYXRhYmFzZSBpbiBvcmRlciB0byBmdWxmaWxsCiAgKiBzaXRlJ3MgcmVxdWlyZW1lbnQu
CiAgKi8KIHVpbnQ2NF90IGV3a192aWV3X2V4Y2VlZGVkX2RhdGFiYXNlX3F1b3RhKEV2YXNfT2Jq
ZWN0KiBld2tWaWV3LCBFdmFzX09iamVjdCogZnJhbWUsIGNvbnN0IGNoYXIqIGRhdGFiYXNlTmFt
ZSwgdWludDY0X3QgY3VycmVudFNpemUsIHVpbnQ2NF90IGV4cGVjdGVkU2l6ZSkKIHsKICAgICBE
QkcoImV3a1ZpZXc9JXAiLCBld2tWaWV3KTsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJO
KGV3a1ZpZXcsIHNkLCAwKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2Qt
PmFwaSwgMCk7Ci0gICAgaWYgKCFzZC0+YXBpLT5leGNlZWRlZF9kYXRhYmFzZV9xdW90YSkKKyAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgMCk7CisgICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+YXBpLCAwKTsKKyAgICBp
ZiAoIXNtYXJ0RGF0YS0+YXBpLT5leGNlZWRlZF9kYXRhYmFzZV9xdW90YSkKICAgICAgICAgcmV0
dXJuIDA7CiAKLSAgICBJTkYoImN1cnJlbnRfc2l6ZT0lIiBQUkl1NjQgIiBleHBlY3RlZF9zaXpl
PSUiIFBSSXU2NCwgY3VycmVudFNpemUsIGV4cGVjdGVkU2l6ZSk7Ci0gICAgcmV0dXJuIHNkLT5h
cGktPmV4Y2VlZGVkX2RhdGFiYXNlX3F1b3RhKHNkLCBmcmFtZSwgZGF0YWJhc2VOYW1lLCBjdXJy
ZW50U2l6ZSwgZXhwZWN0ZWRTaXplKTsKKyAgICBJTkYoImN1cnJlbnRTaXplPSUiIFBSSXU2NCAi
IGV4cGVjdGVkU2l6ZT0lIiBQUkl1NjQsIGN1cnJlbnRTaXplLCBleHBlY3RlZFNpemUpOworICAg
IHJldHVybiBzbWFydERhdGEtPmFwaS0+ZXhjZWVkZWRfZGF0YWJhc2VfcXVvdGEoc21hcnREYXRh
LCBmcmFtZSwgZGF0YWJhc2VOYW1lLCBjdXJyZW50U2l6ZSwgZXhwZWN0ZWRTaXplKTsKIH0KIAog
LyoqCiAgKiBAaW50ZXJuYWwKICAqIE9wZW4gcGFuZWwgdG8gY2hvb3NlIGEgZmlsZS4KICAqCi0g
KiBAcGFyYW0gbyBWaWV3LgorICogQHBhcmFtIGV3a1ZpZXcgVmlldy4KICAqIEBwYXJhbSBmcmFt
ZSBGcmFtZSBpbiB3aGljaCBvcGVyYXRpb24gaXMgcmVxdWlyZWQuCi0gKiBAcGFyYW0gYWxsb3dz
X211bHRpcGxlX2ZpbGVzIEBjIEVJTkFfVFJVRSB3aGVuIG1vcmUgdGhhbiBvbmUgZmlsZSBtYXkg
YmUKKyAqIEBwYXJhbSBhbGxvd3NNdWx0aXBsZUZpbGVzIEBjIEVJTkFfVFJVRSB3aGVuIG1vcmUg
dGhhbiBvbmUgZmlsZSBtYXkgYmUKICAqIHNlbGVjdGVkLCBAYyBFSU5BX0ZBTFNFIG90aGVyd2lz
ZQotICogQHBhcmFtIGFjY2VwdF90eXBlcyBhY2NlcHQgbWltZSB0eXBlcwotICogQHNlbGVjdGVk
X2ZpbGVuYW1lcyBMaXN0IG9mIGZpbGVzIHNlbGVjdGVkLgorICogQHBhcmFtIGFjY2VwdFR5cGVz
IGFjY2VwdCBtaW1lIHR5cGVzCisgKiBAc2VsZWN0ZWRGaWxlbmFtZXMgTGlzdCBvZiBmaWxlcyBz
ZWxlY3RlZC4KICAqCiAgKiBAcmV0dXJuIEBFSU5BX0ZBTFNFIGlmIHVzZXIgY2FuY2VsZWQgZmls
ZSBzZWxlY3Rpb247IEBFSU5BX1RSVUUgaWYgY29uZmlybWVkLgogICovCiBFaW5hX0Jvb2wgZXdr
X3ZpZXdfcnVuX29wZW5fcGFuZWwoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV2YXNfT2JqZWN0KiBm
cmFtZSwgRWluYV9Cb29sIGFsbG93c011bHRpcGxlRmlsZXMsIGNvbnN0IGNoYXIqIGFjY2VwdFR5
cGVzLCBFaW5hX0xpc3QqKiBzZWxlY3RlZEZpbGVuYW1lcykKIHsKLSAgICBEQkcoImV3a1ZpZXc9
JXAgZnJhbWU9JXAgYWxsb3dzX211bHRpcGxlX2ZpbGVzPSVkIiwgZXdrVmlldywgZnJhbWUsIGFs
bG93c011bHRpcGxlRmlsZXMpOwotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmll
dywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChz
ZC0+YXBpLCBFSU5BX0ZBTFNFKTsKKyAgICBEQkcoImV3a1ZpZXc9JXAgZnJhbWU9JXAgYWxsb3dz
TXVsdGlwbGVGaWxlcz0lZCIsIGV3a1ZpZXcsIGZyYW1lLCBhbGxvd3NNdWx0aXBsZUZpbGVzKTsK
KyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9G
QUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+YXBp
LCBFSU5BX0ZBTFNFKTsKICAgICBFaW5hX0Jvb2wgY29uZmlybTsKIAotICAgIGlmICghc2QtPmFw
aS0+cnVuX29wZW5fcGFuZWwpCisgICAgaWYgKCFzbWFydERhdGEtPmFwaS0+cnVuX29wZW5fcGFu
ZWwpCiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwogCiAgICAgKnNlbGVjdGVkRmlsZW5hbWVz
ID0gMDsKIAotICAgIGNvbmZpcm0gPSBzZC0+YXBpLT5ydW5fb3Blbl9wYW5lbChzZCwgZnJhbWUs
IGFsbG93c011bHRpcGxlRmlsZXMsIGFjY2VwdFR5cGVzLCBzZWxlY3RlZEZpbGVuYW1lcyk7Cisg
ICAgY29uZmlybSA9IHNtYXJ0RGF0YS0+YXBpLT5ydW5fb3Blbl9wYW5lbChzbWFydERhdGEsIGZy
YW1lLCBhbGxvd3NNdWx0aXBsZUZpbGVzLCBhY2NlcHRUeXBlcywgc2VsZWN0ZWRGaWxlbmFtZXMp
OwogICAgIGlmICghY29uZmlybSAmJiAqc2VsZWN0ZWRGaWxlbmFtZXMpCiAgICAgICAgIEVSUigi
Q2FuY2VsZWQgZmlsZSBzZWxlY3Rpb24sIGJ1dCBzZWxlY3RlZCBmaWxlbmFtZXMgIT0gMC4gRnJl
ZSBuYW1lcyBiZWZvcmUgcmV0dXJuLiIpOwogICAgIHJldHVybiBjb25maXJtOwpAQCAtMzI4Mywx
NiArMzI4MywxNiBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfcnVuX29wZW5fcGFuZWwoRXZhc19PYmpl
Y3QqIGV3a1ZpZXcsIEV2YXNfT2JqZWN0KiBmcmFtZSwgRWluYQogdm9pZCBld2tfdmlld19yZXBh
aW50KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwgRXZh
c19Db29yZCB3aWR0aCwgRXZhc19Db29yZCBoZWlnaHQpCiB7CiAgICAgREJHKCJld2tWaWV3PSVw
LCByZWdpb249JWQsJWQgKyAlZHglZCIsIGV3a1ZpZXcsIHgsIHksIHdpZHRoLCBoZWlnaHQpOwot
ICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QpOwotICAgIEVXS19WSUVX
X1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdik7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JF
VFVSTihld2tWaWV3LCBzbWFydERhdGEpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVS
TihzbWFydERhdGEsIHByaXYpOwogCi0gICAgaWYgKCFwcml2LT5tYWluX2ZyYW1lLT5jb250ZW50
UmVuZGVyZXIoKSkgeworICAgIGlmICghcHJpdi0+bWFpbkZyYW1lLT5jb250ZW50UmVuZGVyZXIo
KSkgewogICAgICAgICBFUlIoIm5vIG1haW4gZnJhbWUgY29udGVudCByZW5kZXJlci4iKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIF9ld2tfdmlld19yZXBhaW50X2FkZChwcml2LCB4
LCB5LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICBfZXdrX3ZpZXdfc21hcnRfY2hhbmdlZChzZCk7Cisg
ICAgX2V3a192aWV3X3NtYXJ0X2NoYW5nZWQoc21hcnREYXRhKTsKIH0KIAogdm9pZCBld2tfdmll
d19zY3JvbGwoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV2YXNfQ29vcmQgZHgsIEV2YXNfQ29vcmQg
ZHksIEV2YXNfQ29vcmQgc2Nyb2xsWCwgRXZhc19Db29yZCBzY3JvbGxZLCBFdmFzX0Nvb3JkIHNj
cm9sbFdpZHRoLCBFdmFzX0Nvb3JkIHNjcm9sbEhlaWdodCwgRXZhc19Db29yZCBjZW50ZXJYLCBF
dmFzX0Nvb3JkIGNlbnRlclksIEV2YXNfQ29vcmQgY2VudGVyV2lkdGgsIEV2YXNfQ29vcmQgY2Vu
dGVySGVpZ2h0LCBFaW5hX0Jvb2wgbWFpbkZyYW1lKQpAQCAtMzMwNCwxOSArMzMwNCwxOSBAQCB2
b2lkIGV3a192aWV3X3Njcm9sbChFdmFzX09iamVjdCogZXdrVmlldywgRXZhc19Db29yZCBkeCwg
RXZhc19Db29yZCBkeSwgRXZhc19DbwogICAgICAgICBXUk4oInNjcm9sbCByZWdpb24gYW5kIGNs
aXAgYXJlIGRpZmZlcmVudCEgJWQsJWQrJWR4JWQgYW5kICVkLCVkKyVkeCVkIiwKICAgICAgICAg
ICAgIHNjcm9sbFgsIHNjcm9sbFksIHNjcm9sbFdpZHRoLCBzY3JvbGxIZWlnaHQsIGNlbnRlclgs
IGNlbnRlclksIGNlbnRlcldpZHRoLCBjZW50ZXJIZWlnaHQpOwogCi0gICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVU
VVJOKHNkLCBwcml2KTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNt
YXJ0RGF0YSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJp
dik7CiAgICAgRUlOQV9TQUZFVFlfT05fVFJVRV9SRVRVUk4oIWR4ICYmICFkeSk7CiAKICAgICBf
ZXdrX3ZpZXdfc2Nyb2xsX2FkZChwcml2LCBkeCwgZHksIHNjcm9sbFgsIHNjcm9sbFksIHNjcm9s
bFdpZHRoLCBzY3JvbGxIZWlnaHQsIG1haW5GcmFtZSk7CiAKLSAgICBfZXdrX3ZpZXdfc21hcnRf
Y2hhbmdlZChzZCk7CisgICAgX2V3a192aWV3X3NtYXJ0X2NoYW5nZWQoc21hcnREYXRhKTsKIH0K
IAogV2ViQ29yZTo6UGFnZSogZXdrX3ZpZXdfY29yZV9wYWdlX2dldChjb25zdCBFdmFzX09iamVj
dCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNk
LCAwKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIDApOworICAg
IEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCAwKTsKKyAgICBF
V0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCAwKTsKICAgICByZXR1
cm4gcHJpdi0+cGFnZTsKIH0KIApAQCAtMzMzMSwzMCArMzMzMSwzMCBAQCBXVEY6OlBhc3NSZWZQ
dHI8V2ViQ29yZTo6RnJhbWU+IGV3a192aWV3X2ZyYW1lX2NyZWF0ZShFdmFzX09iamVjdCogZXdr
VmlldywgRXZhcwogICAgICAgICBld2tWaWV3LCBmcmFtZSwgbmFtZS51dGY4KCkuZGF0YSgpLCBv
d25lckVsZW1lbnQsCiAgICAgICAgIHVybC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCByZWZlcnJl
ci51dGY4KCkuZGF0YSgpKTsKIAotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmll
dywgc2QsIDApOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgMCk7
CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIDApOwor
ICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIDApOwogCi0g
ICAgV1RGOjpSZWZQdHI8V2ViQ29yZTo6RnJhbWU+IGNmID0gX2V3a192aWV3X2NvcmVfZnJhbWVf
bmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZCwgcHJpdiwg
b3duZXJFbGVtZW50KTsKLSAgICBpZiAoIWNmKSB7CisgICAgV1RGOjpSZWZQdHI8V2ViQ29yZTo6
RnJhbWU+IGNvcmVGcmFtZSA9IF9ld2tfdmlld19jb3JlX2ZyYW1lX25ldworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc21hcnREYXRhLCBwcml2LCBvd25lckVsZW1l
bnQpOworICAgIGlmICghY29yZUZyYW1lKSB7CiAgICAgICAgIEVSUigiQ291bGQgbm90IGNyZWF0
ZSBjaGlsZCBjb3JlIGZyYW1lICclcyciLCBuYW1lLnV0ZjgoKS5kYXRhKCkpOwogICAgICAgICBy
ZXR1cm4gMDsKICAgICB9CiAKLSAgICBpZiAoIWV3a19mcmFtZV9jaGlsZF9hZGQoZnJhbWUsIGNm
LCBuYW1lLCB1cmwsIHJlZmVycmVyKSkgeworICAgIGlmICghZXdrX2ZyYW1lX2NoaWxkX2FkZChm
cmFtZSwgY29yZUZyYW1lLCBuYW1lLCB1cmwsIHJlZmVycmVyKSkgewogICAgICAgICBFUlIoIkNv
dWxkIG5vdCBjcmVhdGUgY2hpbGQgZnJhbWUgb2JqZWN0ICclcyciLCBuYW1lLnV0ZjgoKS5kYXRh
KCkpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKICAgICAvLyBUaGUgY3JlYXRpb24gb2Yg
dGhlIGZyYW1lIG1heSBoYXZlIHJlbW92ZWQgaXRzZWxmIGFscmVhZHkuCi0gICAgaWYgKCFjZi0+
cGFnZSgpIHx8ICFjZi0+dHJlZSgpIHx8ICFjZi0+dHJlZSgpLT5wYXJlbnQoKSkKKyAgICBpZiAo
IWNvcmVGcmFtZS0+cGFnZSgpIHx8ICFjb3JlRnJhbWUtPnRyZWUoKSB8fCAhY29yZUZyYW1lLT50
cmVlKCktPnBhcmVudCgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIHNkLT5jaGFuZ2VkLmZy
YW1lX3JlY3QgPSBFSU5BX1RSVUU7Ci0gICAgX2V3a192aWV3X3NtYXJ0X2NoYW5nZWQoc2QpOwor
ICAgIHNtYXJ0RGF0YS0+Y2hhbmdlZC5mcmFtZV9yZWN0ID0gRUlOQV9UUlVFOworICAgIF9ld2tf
dmlld19zbWFydF9jaGFuZ2VkKHNtYXJ0RGF0YSk7CiAKICAgICBldmFzX29iamVjdF9zbWFydF9j
YWxsYmFja19jYWxsKGV3a1ZpZXcsICJmcmFtZSxjcmVhdGVkIiwgZnJhbWUpOwotICAgIHJldHVy
biBjZi5yZWxlYXNlKCk7CisgICAgcmV0dXJuIGNvcmVGcmFtZS5yZWxlYXNlKCk7CiB9CiAKIFdU
Rjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpXaWRnZXQ+IGV3a192aWV3X3BsdWdpbl9jcmVhdGUoRXZh
c19PYmplY3QqIGV3a1ZpZXcsIEV2YXNfT2JqZWN0KiBmcmFtZSwgY29uc3QgV2ViQ29yZTo6SW50
U2l6ZSYgcGx1Z2luU2l6ZSwgV2ViQ29yZTo6SFRNTFBsdWdJbkVsZW1lbnQqIGVsZW1lbnQsIGNv
bnN0IFdlYkNvcmU6OktVUkwmIHVybCwgY29uc3QgV1RGOjpWZWN0b3I8V1RGOjpTdHJpbmc+JiBw
YXJhbU5hbWVzLCBjb25zdCBXVEY6OlZlY3RvcjxXVEY6OlN0cmluZz4mIHBhcmFtVmFsdWVzLCBj
b25zdCBXVEY6OlN0cmluZyYgbWltZVR5cGUsIGJvb2wgbG9hZE1hbnVhbGx5KQpAQCAtMzM2Myw5
ICszMzYzLDkgQEAgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OldpZGdldD4gZXdrX3ZpZXdfcGx1
Z2luX2NyZWF0ZShFdmFzX09iamVjdCogZXdrVmlldywgRXYKICAgICAgICAgZXdrVmlldywgZnJh
bWUsIHBsdWdpblNpemUud2lkdGgoKSwgcGx1Z2luU2l6ZS5oZWlnaHQoKSwgZWxlbWVudCwKICAg
ICAgICAgdXJsLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIG1pbWVUeXBlLnV0ZjgoKS5kYXRhKCkp
OwogCi0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgMCk7Ci0gICAg
c2QtPmNoYW5nZWQuZnJhbWVfcmVjdCA9IEVJTkFfVFJVRTsKLSAgICBfZXdrX3ZpZXdfc21hcnRf
Y2hhbmdlZChzZCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFy
dERhdGEsIDApOworICAgIHNtYXJ0RGF0YS0+Y2hhbmdlZC5mcmFtZV9yZWN0ID0gRUlOQV9UUlVF
OworICAgIF9ld2tfdmlld19zbWFydF9jaGFuZ2VkKHNtYXJ0RGF0YSk7CiAKICAgICByZXR1cm4g
ZXdrX2ZyYW1lX3BsdWdpbl9jcmVhdGUKICAgICAgICAgICAgICAgIChmcmFtZSwgcGx1Z2luU2l6
ZSwgZWxlbWVudCwgdXJsLCBwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcywKQEAgLTMzODYsMTMgKzMz
ODYsMTMgQEAgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OldpZGdldD4gZXdrX3ZpZXdfcGx1Z2lu
X2NyZWF0ZShFdmFzX09iamVjdCogZXdrVmlldywgRXYKIHZvaWQgZXdrX3ZpZXdfcG9wdXBfbmV3
KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBXZWJDb3JlOjpQb3B1cE1lbnVDbGllbnQqIGNsaWVudCwg
aW50IHNlbGVjdGVkLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KQogewogICAgIElORigi
ZXdrVmlldz0lcCIsIGV3a1ZpZXcpOwotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdr
Vmlldywgc2QpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdik7Cisg
ICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEpOworICAgIEVX
S19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYpOwogCi0gICAgaWYgKHBy
aXYtPnBvcHVwLm1lbnVfY2xpZW50KQorICAgIGlmIChwcml2LT5wb3B1cC5tZW51Q2xpZW50KQog
ICAgICAgICBld2tfdmlld19wb3B1cF9kZXN0cm95KGV3a1ZpZXcpOwogCi0gICAgcHJpdi0+cG9w
dXAubWVudV9jbGllbnQgPSBjbGllbnQ7CisgICAgcHJpdi0+cG9wdXAubWVudUNsaWVudCA9IGNs
aWVudDsKIAogICAgIC8vIHBvcHVsYXRlIGl0ZW1zCiAgICAgY29uc3QgaW50IHNpemUgPSBjbGll
bnQtPmxpc3RTaXplKCk7CkBAIC0zNDE5LDEwICszNDE5LDEwIEBAIHZvaWQgZXdrX3ZpZXdfcG9w
dXBfbmV3KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBXZWJDb3JlOjpQb3B1cE1lbnVDbGllbnQqIGNs
aWVudCwKIEVpbmFfQm9vbCBld2tfdmlld19wb3B1cF9kZXN0cm95KEV2YXNfT2JqZWN0KiBld2tW
aWV3KQogewogICAgIElORigiZXdrVmlldz0lcCIsIGV3a1ZpZXcpOwotICAgIEVXS19WSUVXX1NE
X0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BS
SVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19W
SUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOwogCi0g
ICAgaWYgKCFwcml2LT5wb3B1cC5tZW51X2NsaWVudCkKKyAgICBpZiAoIXByaXYtPnBvcHVwLm1l
bnVDbGllbnQpCiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwogCiAgICAgZXZhc19vYmplY3Rf
c21hcnRfY2FsbGJhY2tfY2FsbChld2tWaWV3LCAicG9wdXAsd2lsbGRlbGV0ZSIsICZwcml2LT5w
b3B1cC5tZW51KTsKQEAgLTM0MzMsOCArMzQzMyw4IEBAIEVpbmFfQm9vbCBld2tfdmlld19wb3B1
cF9kZXN0cm95KEV2YXNfT2JqZWN0KiBld2tWaWV3KQogICAgICAgICBlaW5hX3N0cmluZ3NoYXJl
X2RlbChpdGVtLT50ZXh0KTsKICAgICAgICAgZnJlZShpdGVtKTsKICAgICB9Ci0gICAgcHJpdi0+
cG9wdXAubWVudV9jbGllbnQtPnBvcHVwRGlkSGlkZSgpOwotICAgIHByaXYtPnBvcHVwLm1lbnVf
Y2xpZW50ID0gMDsKKyAgICBwcml2LT5wb3B1cC5tZW51Q2xpZW50LT5wb3B1cERpZEhpZGUoKTsK
KyAgICBwcml2LT5wb3B1cC5tZW51Q2xpZW50ID0gMDsKIAogICAgIHJldHVybiBFSU5BX1RSVUU7
CiB9CkBAIC0zNDQyLDE4ICszNDQyLDE4IEBAIEVpbmFfQm9vbCBld2tfdmlld19wb3B1cF9kZXN0
cm95KEV2YXNfT2JqZWN0KiBld2tWaWV3KQogdm9pZCBld2tfdmlld19wb3B1cF9zZWxlY3RlZF9z
ZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGludCBpbmRleCkKIHsKICAgICBJTkYoImV3a1ZpZXc9
JXAiLCBld2tWaWV3KTsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNk
KTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYpOwotICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOKHByaXYtPnBvcHVwLm1lbnVfY2xpZW50KTsKKyAgICBFV0tf
VklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSk7CisgICAgRVdLX1ZJRVdf
UFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdik7CisgICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk4ocHJpdi0+cG9wdXAubWVudUNsaWVudCk7CiAKLSAgICBwcml2LT5wb3B1cC5t
ZW51X2NsaWVudC0+dmFsdWVDaGFuZ2VkKGluZGV4KTsKKyAgICBwcml2LT5wb3B1cC5tZW51Q2xp
ZW50LT52YWx1ZUNoYW5nZWQoaW5kZXgpOwogfQogCiAvKioKICAqIEBpbnRlcm5hbAogICogUmVx
dWVzdCBhIGRvd25sb2FkIHRvIHVzZXIuCiAgKgotICogQHBhcmFtIG8gVmlldy4KKyAqIEBwYXJh
bSBld2tWaWV3IFZpZXcuCiAgKiBAb2FyYW0gZG93bmxvYWQgRXdrX0Rvd25sb2FkIHN0cnVjdCB0
byBiZSBzZW50LgogICoKICAqIEVtaXRzOiAiZG93bmxvYWQscmVxdWVzdCIgd2l0aCBhbiBFd2tf
RG93bmxvYWQgY29udGFpbmluZyB0aGUgZGV0YWlscyBvZiB0aGUKQEAgLTM0NjksNyArMzQ2OSw3
IEBAIHZvaWQgZXdrX3ZpZXdfZG93bmxvYWRfcmVxdWVzdChFdmFzX09iamVjdCogZXdrVmlldywg
RXdrX0Rvd25sb2FkKiBkb3dubG9hZCkKICAqIEBpbnRlcm5hbAogICogUmVwb3J0cyB0aGUgSlMg
d2luZG93IG9iamVjdCB3YXMgY2xlYXJlZC4KICAqCi0gKiBAcGFyYW0gbyB2aWV3LgorICogQHBh
cmFtIGV3a1ZpZXcgdmlldy4KICAqIEBwYXJhbSBmcmFtZSB0aGUgZnJhbWUuCiAgKi8KIHZvaWQg
ZXdrX3ZpZXdfanNfd2luZG93X29iamVjdF9jbGVhcihFdmFzX09iamVjdCogZXdrVmlldywgRXZh
c19PYmplY3QqIGZyYW1lKQpAQCAtMzQ4NywxMCArMzQ4NywxMCBAQCB2b2lkIGV3a192aWV3X2pz
X3dpbmRvd19vYmplY3RfY2xlYXIoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV2YXNfT2JqZWN0KiBm
cmFtZSkKICAqLwogdm9pZCBld2tfdmlld192aWV3cG9ydF9hdHRyaWJ1dGVzX3NldChFdmFzX09i
amVjdCogZXdrVmlldywgY29uc3QgV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHMmIGFyZ3VtZW50
cykKIHsKLSAgICBFV0tfVklFV19TRF9HRVQoZXdrVmlldywgc2QpOwotICAgIEVXS19WSUVXX1BS
SVZfR0VUKHNkLCBwcml2KTsKKyAgICBFV0tfVklFV19TRF9HRVQoZXdrVmlldywgc21hcnREYXRh
KTsKKyAgICBFV0tfVklFV19QUklWX0dFVChzbWFydERhdGEsIHByaXYpOwogCi0gICAgcHJpdi0+
dmlld3BvcnRfYXJndW1lbnRzID0gYXJndW1lbnRzOworICAgIHByaXYtPnZpZXdwb3J0QXJndW1l
bnRzID0gYXJndW1lbnRzOwogICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdr
VmlldywgInZpZXdwb3J0LGNoYW5nZWQiLCAwKTsKIH0KIApAQCAtMzUxNiw3MCArMzUxNiw3MCBA
QCB2b2lkIGV3a192aWV3X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0
KiBld2tWaWV3LCBpbnQqIHdpZHRoLCBpbgogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfem9vbV9yYW5n
ZV9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGZsb2F0IG1pblNjYWxlLCBmbG9hdCBtYXhTY2Fs
ZSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZB
TFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFM
U0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBF
SU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBw
cml2LCBFSU5BX0ZBTFNFKTsKIAogICAgIGlmIChtYXhTY2FsZSA8IG1pblNjYWxlKSB7CiAgICAg
ICAgIFdSTigibWluX3NjYWxlIGlzIGxhcmdlciB0aGFuIG1heF9zY2FsZSIpOwogICAgICAgICBy
ZXR1cm4gRUlOQV9GQUxTRTsKICAgICB9CiAKLSAgICBwcml2LT5zZXR0aW5ncy56b29tX3Jhbmdl
Lm1pbl9zY2FsZSA9IG1pblNjYWxlOwotICAgIHByaXYtPnNldHRpbmdzLnpvb21fcmFuZ2UubWF4
X3NjYWxlID0gbWF4U2NhbGU7CisgICAgcHJpdi0+c2V0dGluZ3Muem9vbVJhbmdlLm1pblNjYWxl
ID0gbWluU2NhbGU7CisgICAgcHJpdi0+c2V0dGluZ3Muem9vbVJhbmdlLm1heFNjYWxlID0gbWF4
U2NhbGU7CiAKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCiBmbG9hdCBld2tfdmlld196b29t
X3JhbmdlX21pbl9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJ
RVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgLTEuMCk7Ci0gICAgRVdLX1ZJRVdfUFJJ
Vl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCAtMS4wKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1Jf
UkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgLTEuMCk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRf
T1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgLTEuMCk7CiAKLSAgICByZXR1cm4gcHJpdi0+c2V0
dGluZ3Muem9vbV9yYW5nZS5taW5fc2NhbGU7CisgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLnpv
b21SYW5nZS5taW5TY2FsZTsKIH0KIAogZmxvYXQgZXdrX3ZpZXdfem9vbV9yYW5nZV9tYXhfZ2V0
KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9S
RVRVUk4oZXdrVmlldywgc2QsIC0xLjApOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVS
TihzZCwgcHJpdiwgLTEuMCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3
LCBzbWFydERhdGEsIC0xLjApOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFy
dERhdGEsIHByaXYsIC0xLjApOwogCi0gICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLnpvb21fcmFu
Z2UubWF4X3NjYWxlOworICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy56b29tUmFuZ2UubWF4U2Nh
bGU7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld191c2VyX3NjYWxhYmxlX3NldChFdmFzX09iamVj
dCogZXdrVmlldywgRWluYV9Cb29sIHVzZXJTY2FsYWJsZSkKIHsKLSAgICBFV0tfVklFV19TRF9H
RVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklW
X0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dF
VF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklF
V19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKIAotICAg
IHByaXYtPnNldHRpbmdzLnpvb21fcmFuZ2UudXNlcl9zY2FsYWJsZSA9IHVzZXJTY2FsYWJsZTsK
KyAgICBwcml2LT5zZXR0aW5ncy56b29tUmFuZ2UudXNlclNjYWxhYmxlID0gdXNlclNjYWxhYmxl
OwogCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3VzZXJf
c2NhbGFibGVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVX
X1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVX
X1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVX
S19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOwog
Ci0gICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLnpvb21fcmFuZ2UudXNlcl9zY2FsYWJsZTsKKyAg
ICByZXR1cm4gcHJpdi0+c2V0dGluZ3Muem9vbVJhbmdlLnVzZXJTY2FsYWJsZTsKIH0KIAogZmxv
YXQgZXdrX3ZpZXdfZGV2aWNlX3BpeGVsX3JhdGlvX2dldChjb25zdCBFdmFzX09iamVjdCogZXdr
VmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAtMS4w
KTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIC0xLjApOworICAg
IEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCAtMS4wKTsKKyAg
ICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCAtMS4wKTsKIAot
ICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5kZXZpY2VfcGl4ZWxfcmF0aW87CisgICAgcmV0dXJu
IHByaXYtPnNldHRpbmdzLmRldmljZVBpeGVsUmF0aW87CiB9CiAKIHZvaWQgZXdrX3ZpZXdfZGlk
X2ZpcnN0X3Zpc3VhbGx5X25vbmVtcHR5X2xheW91dChFdmFzX09iamVjdCogZXdrVmlldykKIHsK
LSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkKTsKLSAgICBFV0tfVklF
V19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYpOwotICAgIGlmICghcHJpdi0+ZmxhZ3Mudmll
d19jbGVhcmVkKSB7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFy
dERhdGEpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYp
OworICAgIGlmICghcHJpdi0+ZmxhZ3Mudmlld0NsZWFyZWQpIHsKICAgICAgICAgZXdrX3ZpZXdf
ZnJhbWVfbWFpbl9jbGVhcmVkKGV3a1ZpZXcpOwogICAgICAgICBld2tfdmlld19lbmFibGVfcmVu
ZGVyKGV3a1ZpZXcpOwotICAgICAgICBwcml2LT5mbGFncy52aWV3X2NsZWFyZWQgPSBFSU5BX1RS
VUU7CisgICAgICAgIHByaXYtPmZsYWdzLnZpZXdDbGVhcmVkID0gRUlOQV9UUlVFOwogICAgIH0K
IH0KIApAQCAtMzU4Nyw3ICszNTg3LDcgQEAgdm9pZCBld2tfdmlld19kaWRfZmlyc3RfdmlzdWFs
bHlfbm9uZW1wdHlfbGF5b3V0KEV2YXNfT2JqZWN0KiBld2tWaWV3KQogICogQGludGVybmFsCiAg
KiBEaXNwYXRjaCBmaW5pc2hlZCBsb2FkaW5nLgogICoKLSAqIEBwYXJhbSBvIHZpZXcuCisgKiBA
cGFyYW0gZXdrVmlldyB2aWV3LgogICovCiB2b2lkIGV3a192aWV3X2Rpc3BhdGNoX2RpZF9maW5p
c2hfbG9hZGluZyhFdmFzX09iamVjdCogZXdrVmlldykKIHsKQEAgLTM2MDAsMTEgKzM2MDAsMTEg
QEAgdm9pZCBld2tfdmlld19kaXNwYXRjaF9kaWRfZmluaXNoX2xvYWRpbmcoRXZhc19PYmplY3Qq
IGV3a1ZpZXcpCiAKIHZvaWQgZXdrX3ZpZXdfdHJhbnNpdGlvbl90b19jb21taXRlZF9mb3JfbmV3
cGFnZShFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVU
VVJOKGV3a1ZpZXcsIHNkKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHBy
aXYpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhKTsK
KyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2KTsKIAogICAg
IGV3a192aWV3X2Rpc2FibGVfcmVuZGVyKGV3a1ZpZXcpOwotICAgIHByaXYtPmZsYWdzLnZpZXdf
Y2xlYXJlZCA9IEVJTkFfRkFMU0U7CisgICAgcHJpdi0+ZmxhZ3Mudmlld0NsZWFyZWQgPSBFSU5B
X0ZBTFNFOwogfQogCiAKQEAgLTM2MTQsMTggKzM2MTQsMTggQEAgdm9pZCBld2tfdmlld190cmFu
c2l0aW9uX3RvX2NvbW1pdGVkX2Zvcl9uZXdwYWdlKEV2YXNfT2JqZWN0KiBld2tWaWV3KQogICog
cmVxdWVzdCB3b3VsZCBiZSB1c2VkLiBJZiBAcmV0dXJuIGlzIHRydWUsIGxvYWRlciB3aWxsIHRy
eSB0byBsb2FkLiBFbHNlLAogICogTG9hZGVyIGlnbm9yZSBhY3Rpb24gb2YgcmVxdWVzdC4KICAq
Ci0gKiBAcGFyYW0gbyBWaWV3IHRvIGxvYWQKKyAqIEBwYXJhbSBld2tWaWV3IFZpZXcgdG8gbG9h
ZAogICogQHBhcmFtIHJlcXVlc3QgUmVxdWVzdCB3aGljaCBjb250YWluIHVybCB0byBuYXZpZ2F0
ZQogICovCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfbmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb24oRXZh
c19PYmplY3QqIGV3a1ZpZXcsIEV3a19GcmFtZV9SZXNvdXJjZV9SZXF1ZXN0KiByZXF1ZXN0KQog
ewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfVFJVRSk7
Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5hcGksIEVJTkFfVFJVRSk7
CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFf
VFJVRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+YXBp
LCBFSU5BX1RSVUUpOwogCi0gICAgaWYgKCFzZC0+YXBpLT5uYXZpZ2F0aW9uX3BvbGljeV9kZWNp
c2lvbikKKyAgICBpZiAoIXNtYXJ0RGF0YS0+YXBpLT5uYXZpZ2F0aW9uX3BvbGljeV9kZWNpc2lv
bikKICAgICAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIAotICAgIHJldHVybiBzZC0+YXBpLT5uYXZp
Z2F0aW9uX3BvbGljeV9kZWNpc2lvbihzZCwgcmVxdWVzdCk7CisgICAgcmV0dXJuIHNtYXJ0RGF0
YS0+YXBpLT5uYXZpZ2F0aW9uX3BvbGljeV9kZWNpc2lvbihzbWFydERhdGEsIHJlcXVlc3QpOwog
fQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfanNfb2JqZWN0X2FkZChFdmFzX09iamVjdCogZXdrVmll
dywgRXdrX0pTX09iamVjdCogb2JqZWN0LCBjb25zdCBjaGFyKiBvYmplY3ROYW1lKQpAQCAtMzYz
MywyOCArMzYzMywyOCBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfanNfb2JqZWN0X2FkZChFdmFzX09i
amVjdCogZXdrVmlldywgRXdrX0pTX09iamVjdCogb2JqZWN0LCBjbwogI2lmIEVOQUJMRShORVRT
Q0FQRV9QTFVHSU5fQVBJKQogICAgIGlmIChvYmplY3QtPnZpZXcpIC8vIG9iamVjdCBoYXMgYWxy
ZWFkeSBiZWVuIGFkZGVkIHRvIGFub3RoZXIgZXdrX3ZpZXcKICAgICAgICAgcmV0dXJuIEVJTkFf
RkFMU0U7Ci0gICAgb2JqZWN0LT5uYW1lID0gZWluYV9zdHJpbmdzaGFyZV9hZGQob2JqZWN0X25h
bWUpOwotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFM
U0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxT
RSk7CisgICAgb2JqZWN0LT5uYW1lID0gZWluYV9zdHJpbmdzaGFyZV9hZGQob2JqZWN0TmFtZSk7
CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFf
RkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYs
IEVJTkFfRkFMU0UpOwogCiAgICAgSlNDOjpKU0xvY2sgbG9jayhKU0M6OlNpbGVuY2VBc3NlcnRp
b25zT25seSk7Ci0gICAgV2ViQ29yZTo6SlNET01XaW5kb3cqIHdpbmRvdyA9IHRvSlNET01XaW5k
b3cocHJpdi0+bWFpbl9mcmFtZSwgV2ViQ29yZTo6bWFpblRocmVhZE5vcm1hbFdvcmxkKCkpOwor
ICAgIFdlYkNvcmU6OkpTRE9NV2luZG93KiB3aW5kb3cgPSB0b0pTRE9NV2luZG93KHByaXYtPm1h
aW5GcmFtZSwgV2ViQ29yZTo6bWFpblRocmVhZE5vcm1hbFdvcmxkKCkpOwogICAgIEpTQzo6Qmlu
ZGluZ3M6OlJvb3RPYmplY3QqIHJvb3Q7Ci0gICAgcm9vdCA9IHByaXYtPm1haW5fZnJhbWUtPnNj
cmlwdCgpLT5iaW5kaW5nUm9vdE9iamVjdCgpOworICAgIHJvb3QgPSBwcml2LT5tYWluRnJhbWUt
PnNjcmlwdCgpLT5iaW5kaW5nUm9vdE9iamVjdCgpOwogCiAgICAgaWYgKCF3aW5kb3cpIHsKICAg
ICAgICAgRVJSKCJXYXJuaW5nOiBjb3VsZG4ndCBnZXQgd2luZG93IG9iamVjdCIpOwogICAgICAg
ICByZXR1cm4gRUlOQV9GQUxTRTsKICAgICB9CiAKLSAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9
IHdpbmRvdy0+Z2xvYmFsRXhlYygpOworICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjdXRlU3RhdGUg
PSB3aW5kb3ctPmdsb2JhbEV4ZWMoKTsKIAotICAgIG9iai0+dmlldyA9IGV3a1ZpZXc7Ci0gICAg
SlNDOjpKU09iamVjdCogcnVudGltZU9iamVjdCA9IChKU0M6OkpTT2JqZWN0KilKU0M6OkJpbmRp
bmdzOjpDSW5zdGFuY2U6OmNyZWF0ZSgoTlBPYmplY3QqKW9iaiwgcm9vdCktPmNyZWF0ZVJ1bnRp
bWVPYmplY3QoZXhlYyk7Ci0gICAgSlNDOjpJZGVudGlmaWVyIGlkID0gSlNDOjpJZGVudGlmaWVy
KGV4ZWMsIG9ial9uYW1lKTsKKyAgICBvYmplY3QtPnZpZXcgPSBld2tWaWV3OworICAgIEpTQzo6
SlNPYmplY3QqIHJ1bnRpbWVPYmplY3QgPSAoSlNDOjpKU09iamVjdCopSlNDOjpCaW5kaW5nczo6
Q0luc3RhbmNlOjpjcmVhdGUoKE5QT2JqZWN0KilvYmplY3QsIHJvb3QpLT5jcmVhdGVSdW50aW1l
T2JqZWN0KGV4ZWN1dGVTdGF0ZSk7CisgICAgSlNDOjpJZGVudGlmaWVyIGlkID0gSlNDOjpJZGVu
dGlmaWVyKGV4ZWMsIG9iamVjdE5hbWUpOwogCiAgICAgSlNDOjpQdXRQcm9wZXJ0eVNsb3Qgc2xv
dDsKLSAgICB3aW5kb3ctPnB1dChleGVjLCBpZCwgcnVudGltZU9iamVjdCwgc2xvdCk7CisgICAg
d2luZG93LT5wdXQoZXhlY3V0ZVN0YXRlLCBpZCwgcnVudGltZU9iamVjdCwgc2xvdCk7CiAgICAg
cmV0dXJuIEVJTkFfVFJVRTsKICNlbHNlCiAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CkBAIC0zNjYz
LDI3ICszNjYzLDI3IEBAIEVpbmFfQm9vbCBld2tfdmlld19qc19vYmplY3RfYWRkKEV2YXNfT2Jq
ZWN0KiBld2tWaWV3LCBFd2tfSlNfT2JqZWN0KiBvYmplY3QsIGNvCiAKIEVpbmFfQm9vbCBld2tf
dmlld19wcm90b2NvbF9oYW5kbGVyX3NldChFdmFzX09iamVjdCogZXdrVmlldywgY29uc3QgY2hh
cioqIHByb3RvY29scywgRXdrX1ZpZXdfUmVzb3VyY2VfSGFuZGxlcl9DYiBoYW5kbGVyLCB2b2lk
KiBjb250ZXh0KQogewotICAgIEVXS19WSUVXX1NEX0dFVChld2tWaWV3LCBzZCk7Ci0gICAgRVdL
X1ZJRVdfUFJJVl9HRVQoc2QsIHByaXYpOworICAgIEVXS19WSUVXX1NEX0dFVChld2tWaWV3LCBz
bWFydERhdGEpOworICAgIEVXS19WSUVXX1BSSVZfR0VUKHNtYXJ0RGF0YSwgcHJpdik7CiAKICAg
ICBpZiAoIWhhbmRsZXIpCiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwogCi0gICAgcHJpdi0+
Y3VzdG9tX3Jlc291cmNlX2hhbmRsZXIuZnVuY3Rpb24gPSBoYW5kbGVyOwotICAgIHByaXYtPmN1
c3RvbV9yZXNvdXJjZV9oYW5kbGVyLmNvbnRleHQgPSBjb250ZXh0OworICAgIHByaXYtPmN1c3Rv
bVJlc291cmNlSGFuZGxlci5mdW5jdGlvbiA9IGhhbmRsZXI7CisgICAgcHJpdi0+Y3VzdG9tUmVz
b3VyY2VIYW5kbGVyLmNvbnRleHQgPSBjb250ZXh0OwogCiAgICAgcmV0dXJuIGV3a19jdXN0b21f
cHJvdG9jb2xfaGFuZGxlcl9zZXQocHJvdG9jb2xzKTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3
X3Byb3RvY29sX2hhbmRsZXJfdW5zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdL
X1ZJRVdfU0RfR0VUKGV3a1ZpZXcsIHNkKTsKLSAgICBFV0tfVklFV19QUklWX0dFVChzZCwgcHJp
dik7CisgICAgRVdLX1ZJRVdfU0RfR0VUKGV3a1ZpZXcsIHNtYXJ0RGF0YSk7CisgICAgRVdLX1ZJ
RVdfUFJJVl9HRVQoc21hcnREYXRhLCBwcml2KTsKICAgICBFaW5hX0Jvb2wgcmV0ID0gZXdrX2N1
c3RvbV9wcm90b2NvbF9oYW5kbGVyX2FsbF91bnNldCgpOwogCiAgICAgaWYgKHJldCkgewotICAg
ICAgICBwcml2LT5jdXN0b21fcmVzb3VyY2VfaGFuZGxlci5mdW5jdGlvbiA9IDA7Ci0gICAgICAg
IHByaXYtPmN1c3RvbV9yZXNvdXJjZV9oYW5kbGVyLmNvbnRleHQgPSAwOworICAgICAgICBwcml2
LT5jdXN0b21SZXNvdXJjZUhhbmRsZXIuZnVuY3Rpb24gPSAwOworICAgICAgICBwcml2LT5jdXN0
b21SZXNvdXJjZUhhbmRsZXIuY29udGV4dCA9IDA7CiAgICAgfQogCiAgICAgcmV0dXJuIHJldDsK
QEAgLTM2OTEsMTIgKzM2OTEsMTIgQEAgRWluYV9Cb29sIGV3a192aWV3X3Byb3RvY29sX2hhbmRs
ZXJfdW5zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiAKIHZvaWQqIGV3a192aWV3X3Byb3RvY29s
X2hhbmRsZXJfcmVzb3VyY2VfZ2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBzaXplX3QqIGJ5dGVz
UmVhZCwgY2hhcioqIG1pbWUsIGNvbnN0IGNoYXIqIGZpbGUpCiB7Ci0gICAgRVdLX1ZJRVdfU0Rf
R0VUKGV3a1ZpZXcsIHNkKTsKLSAgICBFV0tfVklFV19QUklWX0dFVChzZCwgcHJpdik7CisgICAg
RVdLX1ZJRVdfU0RfR0VUKGV3a1ZpZXcsIHNtYXJ0RGF0YSk7CisgICAgRVdLX1ZJRVdfUFJJVl9H
RVQoc21hcnREYXRhLCBwcml2KTsKIAotICAgIEV3a19WaWV3X1Jlc291cmNlX0hhbmRsZXJfQ2Ig
ZnVuY3Rpb24gPSBwcml2LT5jdXN0b21fcmVzb3VyY2VfaGFuZGxlci5mdW5jdGlvbjsKKyAgICBF
d2tfVmlld19SZXNvdXJjZV9IYW5kbGVyX0NiIGZ1bmN0aW9uID0gcHJpdi0+Y3VzdG9tUmVzb3Vy
Y2VIYW5kbGVyLmZ1bmN0aW9uOwogICAgIGlmIChmdW5jdGlvbikKLSAgICAgICAgcmV0dXJuIGZ1
bmN0aW9uKGZpbGUsIGJ5dGVzUmVhZCwgbWltZSwgcHJpdi0+Y3VzdG9tX3Jlc291cmNlX2hhbmRs
ZXIuY29udGV4dCk7CisgICAgICAgIHJldHVybiBmdW5jdGlvbihmaWxlLCBieXRlc1JlYWQsIG1p
bWUsIHByaXYtPmN1c3RvbVJlc291cmNlSGFuZGxlci5jb250ZXh0KTsKIAogICAgIHJldHVybiAw
OwogfQpAQCAtMzcwNiwxNyArMzcwNiwxNyBAQCB2b2lkKiBld2tfdmlld19wcm90b2NvbF9oYW5k
bGVyX3Jlc291cmNlX2dldChFdmFzX09iamVjdCogZXdrVmlldywgc2l6ZV90KiBieXRlcwogICog
UmVwb3J0cyB0aGF0IHRoZSBjb250ZW50cyBoYXZlIHJlc2l6ZWQuIFRoZSBld2tfdmlldyBjYWxs
cyBjb250ZW50c19yZXNpemUsCiAgKiB3aGljaCBjYW4gYmUgcmVpbXBsZW1lbnRlZCBhcyBuZWVk
ZWQuCiAgKgotICogQHBhcmFtIG8gdmlldy4KLSAqIEBwYXJhbSB3IG5ldyBjb250ZW50IHdpZHRo
LgotICogQHBhcmFtIGggbmV3IGNvbnRlbnQgaGVpZ2h0LgorICogQHBhcmFtIGV3a1ZpZXcgdmll
dy4KKyAqIEBwYXJhbSB3aWR0aCBuZXcgY29udGVudCB3aWR0aC4KKyAqIEBwYXJhbSBoZWlnaHQg
bmV3IGNvbnRlbnQgaGVpZ2h0LgogICovCiB2b2lkIGV3a192aWV3X2NvbnRlbnRzX3NpemVfY2hh
bmdlZChFdmFzX09iamVjdCogZXdrVmlldywgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogewotICAg
IEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QpOwotICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOKHNkLT5hcGkpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJO
KHNkLT5hcGktPmNvbnRlbnRzX3Jlc2l6ZSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
Tihld2tWaWV3LCBzbWFydERhdGEpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNt
YXJ0RGF0YS0+YXBpKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEt
PmFwaS0+Y29udGVudHNfcmVzaXplKTsKIAotICAgIGlmICghc2QtPmFwaS0+Y29udGVudHNfcmVz
aXplKHNkLCB3aWR0aCwgaGVpZ2h0KSkKKyAgICBpZiAoIXNtYXJ0RGF0YS0+YXBpLT5jb250ZW50
c19yZXNpemUoc21hcnREYXRhLCB3aWR0aCwgaGVpZ2h0KSkKICAgICAgICAgRVJSKCJmYWlsZWQg
dG8gcmVzaXplIGNvbnRlbnRzIHRvICVkeCVkIiwgd2lkdGgsIGhlaWdodCk7CiB9CiAKQEAgLTM3
MjQsMTQgKzM3MjQsMTQgQEAgdm9pZCBld2tfdmlld19jb250ZW50c19zaXplX2NoYW5nZWQoRXZh
c19PYmplY3QqIGV3a1ZpZXcsIGludCB3aWR0aCwgaW50IGhlaWdodCkKICAqIEBpbnRlcm5hbAog
ICogR2V0cyBwYWdlIHNpemUgZnJvbSBmcmFtZXZpZXcuCiAgKgotICogQHBhcmFtIG8gdmlldy4K
KyAqIEBwYXJhbSBld2tWaWV3IHZpZXcuCiAgKgogICogQHJldHVybiBwYWdlIHNpemUuCiAgKi8K
IFdlYkNvcmU6OkZsb2F0UmVjdCBld2tfdmlld19wYWdlX3JlY3RfZ2V0KGNvbnN0IEV2YXNfT2Jq
ZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVChld2tWaWV3LCBzZCk7Ci0gICAg
RVdLX1ZJRVdfUFJJVl9HRVQoc2QsIHByaXYpOworICAgIEVXS19WSUVXX1NEX0dFVChld2tWaWV3
LCBzbWFydERhdGEpOworICAgIEVXS19WSUVXX1BSSVZfR0VUKHNtYXJ0RGF0YSwgcHJpdik7CiAK
ICAgICBXZWJDb3JlOjpGcmFtZSogbWFpbl9mcmFtZSA9IHByaXYtPnBhZ2UtPm1haW5GcmFtZSgp
OwogICAgIHJldHVybiBtYWluX2ZyYW1lLT52aWV3KCktPmZyYW1lUmVjdCgpOwpAQCAtMzc0MCwy
NCArMzc0MCwyNCBAQCBXZWJDb3JlOjpGbG9hdFJlY3QgZXdrX3ZpZXdfcGFnZV9yZWN0X2dldChj
b25zdCBFdmFzX09iamVjdCogZXdrVmlldykKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogdm9p
ZCBld2tfdmlld19uZWVkX3RvdWNoX2V2ZW50c19zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGJv
b2wgbmVlZGVkKQogewotICAgIEVXS19WSUVXX1NEX0dFVChld2tWaWV3LCBzZCk7Ci0gICAgRVdL
X1ZJRVdfUFJJVl9HRVQoc2QsIHByaXYpOworICAgIEVXS19WSUVXX1NEX0dFVChld2tWaWV3LCBz
bWFydERhdGEpOworICAgIEVXS19WSUVXX1BSSVZfR0VUKHNtYXJ0RGF0YSwgcHJpdik7CiAKLSAg
ICBwcml2LT5mbGFncy5uZWVkX3RvdWNoX2V2ZW50cyA9IG5lZWRlZDsKKyAgICBwcml2LT5mbGFn
cy5uZWVkVG91Y2hFdmVudHMgPSBuZWVkZWQ7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19uZWVk
X3RvdWNoX2V2ZW50c19nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdL
X1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdL
X1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKLSAgICByZXR1
cm4gcHJpdi0+ZmxhZ3MubmVlZF90b3VjaF9ldmVudHM7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BS
SVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIHJldHVy
biBwcml2LT5mbGFncy5uZWVkVG91Y2hFdmVudHM7CiB9CiAjZW5kaWYKIAogRWluYV9Cb29sIGV3
a192aWV3X21vZGVfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFd2tfVmlld19Nb2RlIHZpZXdN
b2RlKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFf
RkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9G
QUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEs
IEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEs
IHByaXYsIEVJTkFfRkFMU0UpOwogCiAgICAgc3dpdGNoICh2aWV3TW9kZSkgewogICAgIGNhc2Ug
RVdLX1ZJRVdfTU9ERV9XSU5ET1dFRDoKQEAgLTM3ODYsMTAgKzM3ODYsMTAgQEAgRXdrX1ZpZXdf
TW9kZSBld2tfdmlld19tb2RlX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKICAg
ICBFd2tfVmlld19Nb2RlIG1vZGUgPSBFV0tfVklFV19NT0RFX1dJTkRPV0VEOwogCi0gICAgRVdL
X1ZJRVdfU0RfR0VUKGV3a1ZpZXcsIHNkKTsKLSAgICBpZiAoIXNkKQorICAgIEVXS19WSUVXX1NE
X0dFVChld2tWaWV3LCBzbWFydERhdGEpOworICAgIGlmICghc21hcnREYXRhKQogICAgICAgICBy
ZXR1cm4gbW9kZTsKLSAgICBFV0tfVklFV19QUklWX0dFVChzZCwgcHJpdik7CisgICAgRVdLX1ZJ
RVdfUFJJVl9HRVQoc21hcnREYXRhLCBwcml2KTsKICAgICBpZiAoIXByaXYpCiAgICAgICAgIHJl
dHVybiBtb2RlOwogCkBAIC0zODE3LDcgKzM4MTcsNyBAQCBFd2tfVmlld19Nb2RlIGV3a192aWV3
X21vZGVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogICogQGludGVybmFsCiAgKiBS
ZXBvcnRzIHRoZSB2aWV3IHRoYXQgZWRpdG9yIGNsaWVudCBzZWxlY3Rpb24gaGFzIGNoYW5nZWQu
CiAgKgotICogQHBhcmFtIG8gVmlldy4KKyAqIEBwYXJhbSBld2tWaWV3IFZpZXcuCiAgKgogICog
RW1pdHMgc2lnbmFsOiAiZWRpdG9yY2xpZW50c2VsZWN0aW9uLGNoYW5nZWQiIHdpdGggbm8gcGFy
YW1ldGVycy4KICAqLwpAQCAtMzgzMCw3ICszODMwLDcgQEAgdm9pZCBld2tfdmlld19lZGl0b3Jf
Y2xpZW50X3NlbGVjdGlvbl9jaGFuZ2VkKEV2YXNfT2JqZWN0KiBld2tWaWV3KQogICogQGludGVy
bmFsCiAgKiBSZXBvcnRzIHRvIHRoZSB2aWV3IHRoYXQgZWRpdG9yIGNsaWVudCdzIGNvbnRlbnRz
IHdlcmUgY2hhbmdlZC4KICAqCi0gKiBAcGFyYW0gbyBWaWV3LgorICogQHBhcmFtIGV3a1ZpZXcg
Vmlldy4KICAqCiAgKiBFbWl0cyBzaWduYWw6ICJlZGl0b3JjbGllbnQsY29udGVudHMsY2hhbmdl
ZCIgd2l0aCBubyBwYXJhbWV0ZXJzLgogICovCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111423</attachid>
            <date>2011-10-18 04:28:35 -0700</date>
            <delta_ts>2011-10-18 05:06:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69988-20111018202834.patch</filename>
            <type>text/plain</type>
            <size>368651</size>
            <attacher name="Gyuyoung Kim">gyuyoung.kim</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTczNDcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZs
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZwppbmRleCBkODg3YmI4OWJj
NTkzNDJmYzdiMzE3MzA1Mzk2MWJjMDMyYjc3NTQ5Li4wNTk3ZjYzMmRiNzMxZGM3MDU4NTkyMzNh
MzJiMDViNTQwZjUxMmQ2IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDYgQEAKKzIwMTEt
MTAtMTggIEd5dXlvdW5nIEtpbSAgPGd5dXlvdW5nLmtpbUBzYW1zdW5nLmNvbT4KKworICAgICAg
ICBbRUZMXSBDaGFuZ2UgZWZsIHN0eWxlIGxvY2FsIHZhcmlhYmxlcyB3aXRoIFdlYktpdCBjb2Rp
bmcgU3R5bGUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD02OTk4OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEluIGNvbW1vbiB3aXRoIEJ1ZyA2OTA3MywgdGhpcyBpcyBhIHRoaXJkIHN0ZXAgaW4gb3JkZXIg
dG8gYmUgbW9yZSBjb21wbGlhbnQgd2l0aCBXZWJLaXQgY29kaW5nIHN0eWxlLgorICAgICAgICBX
ZSBoYXZlIHVzZWQgb25lLWxldHRlcnwgdHdvLWxldHRlciBsb2NhbCB2YXJpYWJsZSBhY2NvcmRp
bmcgdG8gZWZsIHN0eWxlLiBIb3dldmVyLCBpdCdzCisgICAgICAgIG1vcmUgZGlmZmljdWx0IGZv
ciBvdGhlciByZXZpZXdlcnMgdG8gcmV2aWV3IEVGTCBwYXRjaGVzLiBTbywgdGhpcyBwYXRjaCBj
aGFuZ2VzIGVmbCBzdHlsZQorICAgICAgICBsb2NhbCB2YXJpYWJsZSB3aXRoIG1lYW5pbmdmdWwg
b25lLgorCisgICAgICAgIC0gVXNlICptZW51KiBpbnN0ZWFkIG9mICpvKiBpbiBjb21tZW50IG9m
IGV3a19jb250ZXh0bWVudS5jcHAuCisgICAgICAgIC0gVXNlICpsaXN0KiBpbnN0ZWFkIG9mICps
KiBsb2NhbCB2YXJpYWJsZQorICAgICAgICAtIFVzZSAqZXdrUG9saWN5KiBpbnN0ZWFkIG9mICpl
d2tfcG9saWN5KiBpbiBld2tfY29va2llcy5jcHAKKyAgICAgICAgLSBVc2UgKnNtYXJ0RGF0YSog
aW5zdGVhZCBvZiAqc2QqIGxvY2FsIHZhcmlhYmxlIGZvciBFd2tfWFhYWF9TbWFydF9EYXRhIHN0
cnVjdC4KKyAgICAgICAgLSBVc2UgKndpZHRoKiwgKmhlaWdodCogaW5zdGVhZCBvZiAqdyosICpo
KiBsb2NhbCB2YXJpYWJsZXMuCisgICAgICAgIC0gVXNlICpzY3JvbGxYKiwgKnNjcm9sbFkqLCAq
c2Nyb2xsV2lkdGgqLCAqc2Nyb2xsSGVpZ2h0KiwgKmNlbnRlclgqLCAqY2VudGVyWSosICpkZWx0
YVgqLCAqZGVsdGFZKiwKKyAgICAgICAgKmJhc2VYKiwgKmJhc2VZKiBpbnN0ZWFkIG9mICpzeCos
ICpzeSosICpzdyosICpzaCosICpjeCosICpjeSosICpkeCosICpkeSosICpieCosICpieSouCisg
ICAgICAgIC0gVXNlICpyZWQqLCAqZ3JlZW4qLCAqYmx1ZSosICphbHBoYSosICpjb250ZW50UmVk
KiwgKmNvbnRlbnRHcmVlbiosICpjb250ZW50Qmx1ZSogYW5kICpjb250ZW50QWxwaGEqCisgICAg
ICAgIGluc3RlYWQgb2YgKnIqLCpnKiwqYiosKmEqLCpjciosKmNnKiwqY2IqLCpjYSouCisgICAg
ICAgIC0gVXNlICp0aWxlUG9zaXRpb25YKiwgKnRpbGVQb3NpdGlvblkqIGluc3RlYWQgb2YgKm94
Kiwqb3kqIGluIHRpbGVkIGJhY2tpbmdzdG9yZSBmaWxlcy4KKyAgICAgICAgLSBVc2UgKm9iamVj
dCogaW5zdGVhZCBvZiAqb2JqKiAKKyAgICAgICAgLSBVc2UgKmxlbmd0aCogaW5zdGVhZCBvZiAq
bGVuKgorICAgICAgICAtIFVzZSAqY29yZUZyYW1lKiBpbnN0ZWFkIG9mICpjZioKKyAgICAgICAg
LSBVc2UgKmJ1ZmZlciogaW5zdGVhZCBvZiAqYnVmKgorICAgICAgICAtIFVzZSAqaXRlbSogaW5z
dGVhZCBvZiAqaSoKKyAgICAgICAgLSBSZW1vdmUgIl8iIGluIGxvY2FsIHZhcmlhYmxlLgorICAg
ICAgICAtIEFuZCBzbyBvbi4KKworICAgICAgICAqIGV3ay9ld2tfYXV0aF9zb3VwLmNwcDoKKyAg
ICAgICAgKiBld2svZXdrX2NvbnRleHRtZW51LmNwcDoKKyAgICAgICAgKiBld2svZXdrX2Nvb2tp
ZXMuY3BwOgorICAgICAgICAqIGV3ay9ld2tfZnJhbWUuY3BwOgorICAgICAgICAqIGV3ay9ld2tf
aGlzdG9yeS5jcHA6CisgICAgICAgICogZXdrL2V3a19qcy5jcHA6CisgICAgICAgICogZXdrL2V3
a19tYWluLmNwcDoKKyAgICAgICAgKiBld2svZXdrX3NldHRpbmdzLmNwcDoKKyAgICAgICAgKiBl
d2svZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmUuY3BwOgorICAgICAgICAqIGV3ay9ld2tfdGlsZWRf
bWF0cml4LmNwcDoKKyAgICAgICAgKiBld2svZXdrX3RpbGVkX21vZGVsLmNwcDoKKyAgICAgICAg
KiBld2svZXdrX3ZpZXcuY3BwOgorCiAyMDExLTEwLTEyICBKb3NlcGggUGVjb3Jhcm8gIDxqb2Vw
ZWNrQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUGFzcyBQYXJzZWQgQWNjZXB0IEF0dHJpYnV0ZSBN
SU1FIFR5cGVzIHRvIFdlYktpdCBDbGllbnRzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Vm
bC9ld2svZXdrX2F1dGhfc291cC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2F1dGhf
c291cC5jcHAKaW5kZXggY2JjODc1NmVkODVlYmMxNWU3N2JjNDFiMzNlMDUzM2M0MjVhMTkyZi4u
ZjA1ZmQzY2NlNTgzOTIwYWNhMTZmMGE1MjQxYTNmYmZjMjY4NGVjMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9lZmwvZXdrL2V3a19hdXRoX3NvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
ZWZsL2V3ay9ld2tfYXV0aF9zb3VwLmNwcApAQCAtNDAsNyArNDAsNyBAQCBleHRlcm4gIkMiIHsK
ICAqLwogCiB0eXBlZGVmIHN0cnVjdCBfRXdrX0F1dGhfRGF0YSB7Ci0gICAgU291cE1lc3NhZ2Uq
IG1zZzsKKyAgICBTb3VwTWVzc2FnZSogbWVzc2FnZTsKICAgICBTb3VwQXV0aCogYXV0aDsKICAg
ICBTb3VwU2Vzc2lvbiogc2Vzc2lvbjsKIH0gRXdrX0F1dGhfRGF0YTsKQEAgLTc5LDUxICs3OSw1
MSBAQCB2b2lkIGV3a19hdXRoX3NvdXBfY3JlZGVudGlhbHNfc2V0KGNvbnN0IGNoYXIqIHVzZXJu
YW1lLCBjb25zdCBjaGFyKiBwYXNzd29yZCwgdgogICAgIGlmICghZGF0YSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgRXdrX0F1dGhfRGF0YSogYXV0aF9kYXRhID0gc3RhdGljX2Nhc3Q8RXdrX0F1
dGhfRGF0YSo+KGRhdGEpOwotICAgIHNvdXBfYXV0aF9hdXRoZW50aWNhdGUoYXV0aF9kYXRhLT5h
dXRoLCB1c2VybmFtZSwgcGFzc3dvcmQpOwotICAgIHNvdXBfc2Vzc2lvbl91bnBhdXNlX21lc3Nh
Z2UoYXV0aF9kYXRhLT5zZXNzaW9uLCBhdXRoX2RhdGEtPm1zZyk7Ci0gICAgZnJlZV9hdXRoX2Rh
dGEoYXV0aF9kYXRhKTsKKyAgICBFd2tfQXV0aF9EYXRhKiBhdXRoRGF0YSA9IHN0YXRpY19jYXN0
PEV3a19BdXRoX0RhdGEqPihkYXRhKTsKKyAgICBzb3VwX2F1dGhfYXV0aGVudGljYXRlKGF1dGhE
YXRhLT5hdXRoLCB1c2VybmFtZSwgcGFzc3dvcmQpOworICAgIHNvdXBfc2Vzc2lvbl91bnBhdXNl
X21lc3NhZ2UoYXV0aERhdGEtPnNlc3Npb24sIGF1dGhEYXRhLT5tZXNzYWdlKTsKKyAgICBmcmVl
X2F1dGhfZGF0YShhdXRoRGF0YSk7CiB9CiAKLXN0YXRpYyB2b2lkIHNlc3Npb25fYXV0aGVudGlj
YXRlKFNvdXBTZXNzaW9uKiBzZXNzaW9uLCBTb3VwTWVzc2FnZSogbXNnLCBTb3VwQXV0aCogYXV0
aCwgZ2Jvb2xlYW4gcmV0cnlpbmcsIGdwb2ludGVyIC8qIHVzZXJfZGF0YSAqLykKK3N0YXRpYyB2
b2lkIHNlc3Npb25fYXV0aGVudGljYXRlKFNvdXBTZXNzaW9uKiBzZXNzaW9uLCBTb3VwTWVzc2Fn
ZSogbWVzc2FnZSwgU291cEF1dGgqIGF1dGgsIGdib29sZWFuIHJldHJ5aW5nLCBncG9pbnRlciAv
KiB1c2VyX2RhdGEgKi8pCiB7CiAgICAgU291cFVSSSogdXJpOwotICAgIEV3a19BdXRoX0RhdGEq
IGF1dGhfZGF0YTsKLSAgICBjb25zdCBjaGFyKiByZWFsbTsKKyAgICBFd2tfQXV0aF9EYXRhKiBh
dXRoRGF0YTsKKyAgICBjb25zdCBjaGFyKiByZWFsTWVzc2FnZTsKIAogICAgIGlmICghZXdrX2F1
dGhfc2hvd19kaWFsb2dfY2FsbGJhY2spCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dGhfZGF0
YSA9IHN0YXRpY19jYXN0PEV3a19BdXRoX0RhdGEqPihjYWxsb2MoMSwgc2l6ZW9mKEV3a19BdXRo
X0RhdGEpKSk7CisgICAgYXV0aERhdGEgPSBzdGF0aWNfY2FzdDxFd2tfQXV0aF9EYXRhKj4oY2Fs
bG9jKDEsIHNpemVvZihFd2tfQXV0aF9EYXRhKSkpOwogCi0gICAgaWYgKCFhdXRoX2RhdGEpIHsK
KyAgICBpZiAoIWF1dGhEYXRhKSB7CiAgICAgICAgIENSSVRJQ0FMKCJjb3VsZCBub3QgYWxsb2Nh
dGUgRXdrX0F1dGhfRGF0YSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgc291cF9z
ZXNzaW9uX3BhdXNlX21lc3NhZ2Uoc2Vzc2lvbiwgbXNnKTsKKyAgICBzb3VwX3Nlc3Npb25fcGF1
c2VfbWVzc2FnZShzZXNzaW9uLCBtZXNzYWdlKTsKICAgICAvLyBXZSBuZWVkIHRvIG1ha2Ugc3Vy
ZSB0aGUgbWVzc2FnZSBzdGlja3MgYXJvdW5kIHdoZW4gcGF1c2luZyBpdC4KLSAgICBnX29iamVj
dF9yZWYobXNnKTsKKyAgICBnX29iamVjdF9yZWYobWVzc2FnZSk7CiAgICAgZ19vYmplY3RfcmVm
KHNlc3Npb24pOwogICAgIGdfb2JqZWN0X3JlZihhdXRoKTsKIAotICAgIGF1dGhfZGF0YS0+bXNn
ID0gbXNnOwotICAgIGF1dGhfZGF0YS0+YXV0aCA9IGF1dGg7Ci0gICAgYXV0aF9kYXRhLT5zZXNz
aW9uID0gc2Vzc2lvbjsKKyAgICBhdXRoRGF0YS0+bWVzc2FnZSA9IG1lc3NhZ2U7CisgICAgYXV0
aERhdGEtPmF1dGggPSBhdXRoOworICAgIGF1dGhEYXRhLT5zZXNzaW9uID0gc2Vzc2lvbjsKIAot
ICAgIHVyaSA9IHNvdXBfbWVzc2FnZV9nZXRfdXJpKGF1dGhfZGF0YS0+bXNnKTsKLSAgICByZWFs
bSA9IHNvdXBfYXV0aF9nZXRfcmVhbG0oYXV0aF9kYXRhLT5hdXRoKTsKKyAgICB1cmkgPSBzb3Vw
X21lc3NhZ2VfZ2V0X3VyaShhdXRoRGF0YS0+bWVzc2FnZSk7CisgICAgcmVhbE1lc3NhZ2UgPSBz
b3VwX2F1dGhfZ2V0X3JlYWxtKGF1dGhEYXRhLT5hdXRoKTsKIAogICAgIC8vIENhbGwgYXBwbGlj
YXRpb24gbWV0aG9kIHJlc3BvbnNpYmxlIGZvciBzaG93aW5nIGF1dGhlbnRpY2F0aW9uIGRpYWxv
ZyBhbmQgc2VuZGluZyBiYWNrIGF1dGhvcml6YXRpb24gZGF0YS4KLSAgICBld2tfYXV0aF9zaG93
X2RpYWxvZ19jYWxsYmFjayhyZWFsbSwgc291cF91cmlfdG9fc3RyaW5nKHVyaSwgVFJVRSksIGF1
dGhfZGF0YSk7CisgICAgZXdrX2F1dGhfc2hvd19kaWFsb2dfY2FsbGJhY2socmVhbE1lc3NhZ2Us
IHNvdXBfdXJpX3RvX3N0cmluZyh1cmksIFRSVUUpLCBhdXRoRGF0YSk7CiB9CiAKLXN0YXRpYyB2
b2lkIGZyZWVfYXV0aF9kYXRhKEV3a19BdXRoX0RhdGEqIGF1dGhfZGF0YSkKK3N0YXRpYyB2b2lk
IGZyZWVfYXV0aF9kYXRhKEV3a19BdXRoX0RhdGEqIGF1dGhEYXRhKQogewotICAgIGdfb2JqZWN0
X3VucmVmKGF1dGhfZGF0YS0+bXNnKTsKLSAgICBnX29iamVjdF91bnJlZihhdXRoX2RhdGEtPnNl
c3Npb24pOwotICAgIGdfb2JqZWN0X3VucmVmKGF1dGhfZGF0YS0+YXV0aCk7Ci0gICAgZnJlZShh
dXRoX2RhdGEpOworICAgIGdfb2JqZWN0X3VucmVmKGF1dGhEYXRhLT5tZXNzYWdlKTsKKyAgICBn
X29iamVjdF91bnJlZihhdXRoRGF0YS0+c2Vzc2lvbik7CisgICAgZ19vYmplY3RfdW5yZWYoYXV0
aERhdGEtPmF1dGgpOworICAgIGZyZWUoYXV0aERhdGEpOwogfQogCiBzdGF0aWMgdm9pZCBhdHRh
Y2goU291cFNlc3Npb25GZWF0dXJlKiBtYW5hZ2VyLCBTb3VwU2Vzc2lvbiogc2Vzc2lvbikKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfY29udGV4dG1lbnUuY3BwIGIvU291
cmNlL1dlYktpdC9lZmwvZXdrL2V3a19jb250ZXh0bWVudS5jcHAKaW5kZXggNjIxYzc5YzcwNTFk
M2U4MDBkYTA3NTU5ZTk0OGRhNWU5Yzg0OTkzYi4uZmE3MzYyM2YwMjJhZTgwZTY1ZTYxNjA0NTJh
NjExNmJhMGVlODk2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19jb250
ZXh0bWVudS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19jb250ZXh0bWVudS5j
cHAKQEAgLTI0OCw3ICsyNDgsNyBAQCBFd2tfQ29udGV4dF9NZW51KiBld2tfY29udGV4dF9tZW51
X25ldyhFdmFzX09iamVjdCogdmlldywgV2ViQ29yZTo6Q29udGV4dE1lbnVDbwogICoKICAqIEZy
ZWVzIHRoZSBjb250ZXh0IG1lbnUuCiAgKgotICogQHBhcmFtIG8gdGhlIHZpZXcgb2JqZWN0Cisg
KiBAcGFyYW0gbWVudSB0aGUgdmlldyBvYmplY3QKICAqIEByZXR1cm4gQGMgRUlOQV9UUlVFIG9u
IHN1Y2Nlc3MsIG9yIEBjIEVJTkFfRkFMU0Ugb24gZmFpbHVyZQogICoKICAqIEBub3RlIGVtaXRz
IGEgc2lnbmFsICJjb250ZXh0bWVudSxmcmVlIgpAQCAtMjY5LDcgKzI2OSw3IEBAIEVpbmFfQm9v
bCBld2tfY29udGV4dF9tZW51X2ZyZWUoRXdrX0NvbnRleHRfTWVudSogbWVudSkKICAqCiAgKiBB
cHBlbmRzIHRoZSBXZWJDb3JlJ3MgaXRlbSB0byB0aGUgY29udGV4dCBtZW51IG9iamVjdC4KICAq
Ci0gKiBAcGFyYW0gbyB0aGUgY29udGV4dCBtZW51IG9iamVjdAorICogQHBhcmFtIG1lbnUgdGhl
IGNvbnRleHQgbWVudSBvYmplY3QKICAqIEBwYXJhbSBjb3JlIHRoZSBXZWJDb3JlJ3MgY29udGV4
dCBtZW51IGl0ZW0gdGhhdCB3aWxsIGJlIGFkZGVkIHRvIHRoZSBjb250ZXh0IG1lbnUKICAqIEBu
b3RlIGVtaXRzIGEgc2lnbmFsICJjb250ZXh0bWVudSxpdGVtLGFwcGVuZGVkIgogICoKQEAgLTI5
NCw3ICsyOTQsNyBAQCB2b2lkIGV3a19jb250ZXh0X21lbnVfaXRlbV9hcHBlbmQoRXdrX0NvbnRl
eHRfTWVudSogbWVudSwgV2ViQ29yZTo6Q29udGV4dE1lbnVJdAogICoKICAqIEVtaXRzIGEgc2ln
bmFsIHdpdGggdGhlIGl0ZW1zIG9mIHRoZSBjb250ZXh0IG1lbnUuCiAgKgotICogQHBhcmFtIG8g
dGhlIGNvbnRleHQgbWVudSBvYmplY3QKKyAqIEBwYXJhbSBtZW51IHRoZSBjb250ZXh0IG1lbnUg
b2JqZWN0CiAgKiBAcmV0dXJuIHRoZSBzYW1lIGNvbnRleHQgbWVudSBvYmplY3QgdGhhdCB3YXMg
Z2l2ZW4gdGhyb3VnaCBwYXJhbWV0ZXIKICAqCiAgKiBAbm90ZSBlbWl0cyBhIHNpZ25hbCAiY29u
dGV4dG1lbnUsY3VzdG9taXplIgpAQCAtMzE0LDcgKzMxNCw3IEBAIEV3a19Db250ZXh0X01lbnUq
IGV3a19jb250ZXh0X21lbnVfY3VzdG9tX2dldChjb25zdCBFd2tfQ29udGV4dF9NZW51KiBtZW51
KQogICoKICAqIEVtaXRzIGEgc2lnbmFsICJjb250ZXh0bWVudSxzaG93IgogICoKLSAqIEBwYXJh
bSBvIHRoZSBjb250ZXh0IG1lbnUgb2JqZWN0CisgKiBAcGFyYW0gbWVudSB0aGUgY29udGV4dCBt
ZW51IG9iamVjdAogICovCiB2b2lkIGV3a19jb250ZXh0X21lbnVfc2hvdyhjb25zdCBFd2tfQ29u
dGV4dF9NZW51KiBtZW51KQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3
a19jb29raWVzLmNwcCBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfY29va2llcy5jcHAKaW5k
ZXggMDRkNzA0MTU3ZDM1OGUzYjg2Yzk3MjVmYzk1ODNiODNhYWMwODU1Zi4uZmY2Zjk3NDU0ODkz
NzU1ODBlM2VlZThhMWVkOWUzNWNmMjFmY2YxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9l
ZmwvZXdrL2V3a19jb29raWVzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2Nv
b2tpZXMuY3BwCkBAIC02Nyw2NiArNjcsNjYgQEAgRWluYV9Cb29sIGV3a19jb29raWVzX2ZpbGVf
c2V0KGNvbnN0IGNoYXIqIGZpbGVuYW1lKQogdm9pZCBld2tfY29va2llc19jbGVhcih2b2lkKQog
ewogI2lmIFVTRShTT1VQKQotICAgIEdTTGlzdCogbDsKKyAgICBHU0xpc3QqIGxpc3Q7CiAgICAg
R1NMaXN0KiBwOwogICAgIFNvdXBDb29raWVKYXIqIGNvb2tpZUphciA9IFdlYkNvcmU6OmRlZmF1
bHRDb29raWVKYXIoKTsKIAotICAgIGwgPSBzb3VwX2Nvb2tpZV9qYXJfYWxsX2Nvb2tpZXMoY29v
a2llSmFyKTsKLSAgICBmb3IgKHAgPSBsOyBwOyBwID0gcC0+bmV4dCkKKyAgICBsaXN0ID0gc291
cF9jb29raWVfamFyX2FsbF9jb29raWVzKGNvb2tpZUphcik7CisgICAgZm9yIChwID0gbGlzdDsg
cDsgcCA9IHAtPm5leHQpCiAgICAgICAgIHNvdXBfY29va2llX2phcl9kZWxldGVfY29va2llKGNv
b2tpZUphciwgKFNvdXBDb29raWUqKXAtPmRhdGEpOwogCi0gICAgc291cF9jb29raWVzX2ZyZWUo
bCk7CisgICAgc291cF9jb29raWVzX2ZyZWUobGlzdCk7CiAjZW5kaWYKIH0KIAogRWluYV9MaXN0
KiBld2tfY29va2llc19nZXRfYWxsKHZvaWQpCiB7Ci0gICAgRWluYV9MaXN0KiBlbCA9IDA7Cisg
ICAgRWluYV9MaXN0KiByZXN1bHQgPSAwOwogI2lmIFVTRShTT1VQKQotICAgIEdTTGlzdCogbDsK
KyAgICBHU0xpc3QqIGxpc3Q7CiAgICAgR1NMaXN0KiBwOwogICAgIFNvdXBDb29raWVKYXIqIGNv
b2tpZUphciA9IFdlYkNvcmU6OmRlZmF1bHRDb29raWVKYXIoKTsKIAotICAgIGwgPSBzb3VwX2Nv
b2tpZV9qYXJfYWxsX2Nvb2tpZXMoY29va2llSmFyKTsKLSAgICBmb3IgKHAgPSBsOyBwOyBwID0g
cC0+bmV4dCkgeworICAgIGxpc3QgPSBzb3VwX2Nvb2tpZV9qYXJfYWxsX2Nvb2tpZXMoY29va2ll
SmFyKTsKKyAgICBmb3IgKHAgPSBsaXN0OyBwOyBwID0gcC0+bmV4dCkgewogICAgICAgICBTb3Vw
Q29va2llKiBjb29raWUgPSBzdGF0aWNfY2FzdDxTb3VwQ29va2llKj4ocC0+ZGF0YSk7Ci0gICAg
ICAgIEV3a19Db29raWUqIGMgPSBzdGF0aWNfY2FzdDxFd2tfQ29va2llKj4obWFsbG9jKHNpemVv
ZigqYykpKTsKLSAgICAgICAgYy0+bmFtZSA9IHN0cmR1cChjb29raWUtPm5hbWUpOwotICAgICAg
ICBjLT52YWx1ZSA9IHN0cmR1cChjb29raWUtPnZhbHVlKTsKLSAgICAgICAgYy0+ZG9tYWluID0g
c3RyZHVwKGNvb2tpZS0+ZG9tYWluKTsKLSAgICAgICAgYy0+cGF0aCA9IHN0cmR1cChjb29raWUt
PnBhdGgpOwotICAgICAgICBjLT5leHBpcmVzID0gc291cF9kYXRlX3RvX3RpbWVfdChjb29raWUt
PmV4cGlyZXMpOwotICAgICAgICBjLT5zZWN1cmUgPSBzdGF0aWNfY2FzdDxFaW5hX0Jvb2w+KGNv
b2tpZS0+c2VjdXJlKTsKLSAgICAgICAgYy0+aHR0cF9vbmx5ID0gc3RhdGljX2Nhc3Q8RWluYV9C
b29sPihjb29raWUtPmh0dHBfb25seSk7Ci0gICAgICAgIGVsID0gZWluYV9saXN0X2FwcGVuZChl
bCwgYyk7CisgICAgICAgIEV3a19Db29raWUqIGV3a0Nvb2tpZSA9IHN0YXRpY19jYXN0PEV3a19D
b29raWUqPihtYWxsb2Moc2l6ZW9mKCpld2tDb29raWUpKSk7CisgICAgICAgIGV3a0Nvb2tpZS0+
bmFtZSA9IHN0cmR1cChjb29raWUtPm5hbWUpOworICAgICAgICBld2tDb29raWUtPnZhbHVlID0g
c3RyZHVwKGNvb2tpZS0+dmFsdWUpOworICAgICAgICBld2tDb29raWUtPmRvbWFpbiA9IHN0cmR1
cChjb29raWUtPmRvbWFpbik7CisgICAgICAgIGV3a0Nvb2tpZS0+cGF0aCA9IHN0cmR1cChjb29r
aWUtPnBhdGgpOworICAgICAgICBld2tDb29raWUtPmV4cGlyZXMgPSBzb3VwX2RhdGVfdG9fdGlt
ZV90KGNvb2tpZS0+ZXhwaXJlcyk7CisgICAgICAgIGV3a0Nvb2tpZS0+c2VjdXJlID0gc3RhdGlj
X2Nhc3Q8RWluYV9Cb29sPihjb29raWUtPnNlY3VyZSk7CisgICAgICAgIGV3a0Nvb2tpZS0+aHR0
cF9vbmx5ID0gc3RhdGljX2Nhc3Q8RWluYV9Cb29sPihjb29raWUtPmh0dHBfb25seSk7CisgICAg
ICAgIHJlc3VsdCA9IGVpbmFfbGlzdF9hcHBlbmQocmVzdWx0LCBld2tDb29raWUpOwogICAgIH0K
IAotICAgIHNvdXBfY29va2llc19mcmVlKGwpOworICAgIHNvdXBfY29va2llc19mcmVlKGxpc3Qp
OwogI2VuZGlmCi0gICAgcmV0dXJuIGVsOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIHZvaWQg
ZXdrX2Nvb2tpZXNfY29va2llX2RlbChFd2tfQ29va2llKiBjb29raWUpCiB7CiAjaWYgVVNFKFNP
VVApCiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oY29va2llKTsKLSAgICBHU0xpc3Qq
IGw7CisgICAgR1NMaXN0KiBsaXN0OwogICAgIEdTTGlzdCogcDsKICAgICBTb3VwQ29va2llSmFy
KiBjb29raWVKYXIgPSBXZWJDb3JlOjpkZWZhdWx0Q29va2llSmFyKCk7Ci0gICAgU291cENvb2tp
ZSogYzEgPSBzb3VwX2Nvb2tpZV9uZXcoCisgICAgU291cENvb2tpZSogY29va2llMSA9IHNvdXBf
Y29va2llX25ldygKICAgICAgICAgY29va2llLT5uYW1lLCBjb29raWUtPnZhbHVlLCBjb29raWUt
PmRvbWFpbiwgY29va2llLT5wYXRoLCAtMSk7CiAKLSAgICBsID0gc291cF9jb29raWVfamFyX2Fs
bF9jb29raWVzKGNvb2tpZUphcik7Ci0gICAgZm9yIChwID0gbDsgcDsgcCA9IHAtPm5leHQpIHsK
LSAgICAgICAgU291cENvb2tpZSogYzIgPSBzdGF0aWNfY2FzdDxTb3VwQ29va2llKj4ocC0+ZGF0
YSk7Ci0gICAgICAgIGlmIChzb3VwX2Nvb2tpZV9lcXVhbChjMSwgYzIpKSB7Ci0gICAgICAgICAg
ICBzb3VwX2Nvb2tpZV9qYXJfZGVsZXRlX2Nvb2tpZShjb29raWVKYXIsIGMyKTsKKyAgICBsaXN0
ID0gc291cF9jb29raWVfamFyX2FsbF9jb29raWVzKGNvb2tpZUphcik7CisgICAgZm9yIChwID0g
bGlzdDsgcDsgcCA9IHAtPm5leHQpIHsKKyAgICAgICAgU291cENvb2tpZSogY29va2llMiA9IHN0
YXRpY19jYXN0PFNvdXBDb29raWUqPihwLT5kYXRhKTsKKyAgICAgICAgaWYgKHNvdXBfY29va2ll
X2VxdWFsKGNvb2tpZTEsIGNvb2tpZTIpKSB7CisgICAgICAgICAgICBzb3VwX2Nvb2tpZV9qYXJf
ZGVsZXRlX2Nvb2tpZShjb29raWVKYXIsIGNvb2tpZTIpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICB9CiAKLSAgICBzb3VwX2Nvb2tpZV9mcmVlKGMxKTsKLSAgICBzb3VwX2Nv
b2tpZXNfZnJlZShsKTsKKyAgICBzb3VwX2Nvb2tpZV9mcmVlKGNvb2tpZTEpOworICAgIHNvdXBf
Y29va2llc19mcmVlKGxpc3QpOwogI2VuZGlmCiB9CiAKQEAgLTE2Nyw3ICsxNjcsNyBAQCB2b2lk
IGV3a19jb29raWVzX3BvbGljeV9zZXQoRXdrX0Nvb2tpZV9Qb2xpY3kgY29va2llUG9saWN5KQog
CiBFd2tfQ29va2llX1BvbGljeSBld2tfY29va2llc19wb2xpY3lfZ2V0KHZvaWQpCiB7Ci0gICAg
RXdrX0Nvb2tpZV9Qb2xpY3kgZXdrX3BvbGljeSA9IEVXS19DT09LSUVfSkFSX0FDQ0VQVF9BTFdB
WVM7CisgICAgRXdrX0Nvb2tpZV9Qb2xpY3kgZXdrUG9saWN5ID0gRVdLX0NPT0tJRV9KQVJfQUND
RVBUX0FMV0FZUzsKICNpZiBVU0UoU09VUCkKICAgICBTb3VwQ29va2llSmFyKiBjb29raWVKYXIg
PSBXZWJDb3JlOjpkZWZhdWx0Q29va2llSmFyKCk7CiAgICAgU291cENvb2tpZUphckFjY2VwdFBv
bGljeSBwb2xpY3k7CkBAIC0xNzUsMTYgKzE3NSwxNiBAQCBFd2tfQ29va2llX1BvbGljeSBld2tf
Y29va2llc19wb2xpY3lfZ2V0KHZvaWQpCiAgICAgcG9saWN5ID0gc291cF9jb29raWVfamFyX2dl
dF9hY2NlcHRfcG9saWN5KGNvb2tpZUphcik7CiAgICAgc3dpdGNoIChwb2xpY3kpIHsKICAgICBj
YXNlIFNPVVBfQ09PS0lFX0pBUl9BQ0NFUFRfTkVWRVI6Ci0gICAgICAgIGV3a19wb2xpY3kgPSBF
V0tfQ09PS0lFX0pBUl9BQ0NFUFRfTkVWRVI7CisgICAgICAgIGV3a1BvbGljeSA9IEVXS19DT09L
SUVfSkFSX0FDQ0VQVF9ORVZFUjsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTT1VQX0NPT0tJ
RV9KQVJfQUNDRVBUX0FMV0FZUzoKLSAgICAgICAgZXdrX3BvbGljeSA9IEVXS19DT09LSUVfSkFS
X0FDQ0VQVF9BTFdBWVM7CisgICAgICAgIGV3a1BvbGljeSA9IEVXS19DT09LSUVfSkFSX0FDQ0VQ
VF9BTFdBWVM7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgU09VUF9DT09LSUVfSkFSX0FDQ0VQ
VF9OT19USElSRF9QQVJUWToKLSAgICAgICAgZXdrX3BvbGljeSA9IEVXS19DT09LSUVfSkFSX0FD
Q0VQVF9OT19USElSRF9QQVJUWTsKKyAgICAgICAgZXdrUG9saWN5ID0gRVdLX0NPT0tJRV9KQVJf
QUNDRVBUX05PX1RISVJEX1BBUlRZOwogICAgICAgICBicmVhazsKICAgICB9CiAjZW5kaWYKIAot
ICAgIHJldHVybiBld2tfcG9saWN5OworICAgIHJldHVybiBld2tQb2xpY3k7CiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2ZyYW1lLmNwcCBiL1NvdXJjZS9XZWJLaXQv
ZWZsL2V3ay9ld2tfZnJhbWUuY3BwCmluZGV4IGVkZjU1OTk2YWI3ZWZhMDBlOTk5Zjg2MDRhNTEw
MzNkM2U2N2JkMzcuLjdjNTQ0MzgzNTFlNGU5NDEzYzE0ZmUzNWViN2JjNDVhZmZhOGY3NDQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfZnJhbWUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvZWZsL2V3ay9ld2tfZnJhbWUuY3BwCkBAIC03Nyw3ICs3Nyw3IEBAIHN0cnVjdCBF
d2tfRnJhbWVfU21hcnRfRGF0YSB7CiAKIHN0cnVjdCBFaW5hX0l0ZXJhdG9yX0V3a19GcmFtZSB7
CiAgICAgRWluYV9JdGVyYXRvciBiYXNlOwotICAgIEV2YXNfT2JqZWN0KiBvYmo7CisgICAgRXZh
c19PYmplY3QqIG9iamVjdDsKICAgICB1bnNpZ25lZCBjdXJyZW50SW5kZXg7CiB9OwogCkBAIC0x
MTQsMjAgKzExNCwyMCBAQCBzdGF0aWMgRXZhc19TbWFydF9DbGFzcyBfcGFyZW50X3NjID0gRVZB
U19TTUFSVF9DTEFTU19JTklUX05VTEw7CiBzdGF0aWMgaW5saW5lIHZvaWQgX2V3a19mcmFtZV9k
ZWJ1ZyhFdmFzX09iamVjdCogZXdrRnJhbWUpCiB7CiAgICAgRXZhc19PYmplY3QqIGNsaXAsICog
cGFyZW50OwotICAgIEV2YXNfQ29vcmQgeCwgeSwgdywgaCwgY3gsIGN5LCBjdywgY2g7Ci0gICAg
aW50IHIsIGcsIGIsIGEsIGNyLCBjZywgY2IsIGNhOworICAgIEV2YXNfQ29vcmQgeCwgeSwgd2lk
dGgsIGhlaWdodCwgY29udGVudFgsIGNvbnRlbnRZLCBjb250ZW50V2lkdGgsIGNvbnRlbnRIZWln
aHQ7CisgICAgaW50IHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhLCBjb250ZW50UmVkLCBjb250ZW50
R3JlZW4sIGNvbnRlbnRCbHVlLCBjb250ZW50QWxwaGE7CiAKLSAgICBldmFzX29iamVjdF9jb2xv
cl9nZXQoZXdrRnJhbWUsICZyLCAmZywgJmIsICZhKTsKLSAgICBldmFzX29iamVjdF9nZW9tZXRy
eV9nZXQoZXdrRnJhbWUsICZ4LCAmeSwgJncsICZoKTsKKyAgICBldmFzX29iamVjdF9jb2xvcl9n
ZXQoZXdrRnJhbWUsICZyZWQsICZncmVlbiwgJmJsdWUsICZhbHBoYSk7CisgICAgZXZhc19vYmpl
Y3RfZ2VvbWV0cnlfZ2V0KGV3a0ZyYW1lLCAmeCwgJnksICZ3aWR0aCwgJmhlaWdodCk7CiAKICAg
ICBjbGlwID0gZXZhc19vYmplY3RfY2xpcF9nZXQoZXdrRnJhbWUpOwotICAgIGV2YXNfb2JqZWN0
X2NvbG9yX2dldChjbGlwLCAmY3IsICZjZywgJmNiLCAmY2EpOwotICAgIGV2YXNfb2JqZWN0X2dl
b21ldHJ5X2dldChjbGlwLCAmY3gsICZjeSwgJmN3LCAmY2gpOworICAgIGV2YXNfb2JqZWN0X2Nv
bG9yX2dldChjbGlwLCAmY29udGVudFJlZCwgJmNvbnRlbnRHcmVlbiwgJmNvbnRlbnRCbHVlLCAm
Y29udGVudEFscGhhKTsKKyAgICBldmFzX29iamVjdF9nZW9tZXRyeV9nZXQoY2xpcCwgJmNvbnRl
bnRYLCAmY29udGVudFksICZjb250ZW50V2lkdGgsICZjb250ZW50SGVpZ2h0KTsKIAogICAgIGZw
cmludGYoc3RkZXJyLCAiJXA6IHR5cGU9JXMgbmFtZT0lcywgdmlzaWJsZT0lZCwgY29sb3I9JTAy
eCUwMnglMDJ4JTAyeCwgJWQsJWQrJWR4JWQsIGNsaXBwZXI9JXAgKCVkLCAlMDJ4JTAyeCUwMngl
MDJ4LCAlZCwlZCslZHglZClcbiIsCiAgICAgICAgICAgICBld2tGcmFtZSwgZXZhc19vYmplY3Rf
dHlwZV9nZXQoZXdrRnJhbWUpLCBldmFzX29iamVjdF9uYW1lX2dldChld2tGcmFtZSksIGV2YXNf
b2JqZWN0X3Zpc2libGVfZ2V0KGV3a0ZyYW1lKSwKLSAgICAgICAgICAgIHIsIGcsIGIsIGEsIHgs
IHksIHcsIGgsCi0gICAgICAgICAgICBjbGlwLCBldmFzX29iamVjdF92aXNpYmxlX2dldChjbGlw
KSwgY3IsIGNnLCBjYiwgY2EsIGN4LCBjeSwgY3csIGNoKTsKKyAgICAgICAgICAgIHJlZCwgZ3Jl
ZW4sIGJsdWUsIGFscGhhLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LAorICAgICAgICAgICAgY2xpcCwg
ZXZhc19vYmplY3RfdmlzaWJsZV9nZXQoY2xpcCksIGNvbnRlbnRSZWQsIGNvbnRlbnRHcmVlbiwg
Y29udGVudEJsdWUsIGNvbnRlbnRBbHBoYSwgY29udGVudFgsIGNvbnRlbnRZLCBjb250ZW50V2lk
dGgsIGNvbnRlbnRIZWlnaHQpOwogICAgIHBhcmVudCA9IGV2YXNfb2JqZWN0X3NtYXJ0X3BhcmVu
dF9nZXQoZXdrRnJhbWUpOwogICAgIGlmICghcGFyZW50KQogICAgICAgICBmcHJpbnRmKHN0ZGVy
ciwgIlxuIik7CkBAIC0xNDUsMjIgKzE0NSwyMiBAQCBzdGF0aWMgaW5saW5lIEV2YXNfT2JqZWN0
KiBraXQoV2ViQ29yZTo6RnJhbWUqIGZyYW1lKQogewogICAgIGlmICghZnJhbWUpCiAgICAgICAg
IHJldHVybiAwOwotICAgIFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50RWZsKiBmbCA9IF9ld2tf
ZnJhbWVfbG9hZGVyX2VmbF9nZXQoZnJhbWUpOwotICAgIGlmICghZmwpCisgICAgV2ViQ29yZTo6
RnJhbWVMb2FkZXJDbGllbnRFZmwqIGZyYW1lTG9hZGVyQ2xpZW50ID0gX2V3a19mcmFtZV9sb2Fk
ZXJfZWZsX2dldChmcmFtZSk7CisgICAgaWYgKCFmcmFtZUxvYWRlckNsaWVudCkKICAgICAgICAg
cmV0dXJuIDA7Ci0gICAgcmV0dXJuIGZsLT53ZWJGcmFtZSgpOworICAgIHJldHVybiBmcmFtZUxv
YWRlckNsaWVudC0+d2ViRnJhbWUoKTsKIH0KIAotc3RhdGljIEVpbmFfQm9vbCBfZXdrX2ZyYW1l
X2NoaWxkcmVuX2l0ZXJhdG9yX25leHQoRWluYV9JdGVyYXRvcl9Fd2tfRnJhbWUqIGl0LCBFdmFz
X09iamVjdCoqIGRhdGEpCitzdGF0aWMgRWluYV9Cb29sIF9ld2tfZnJhbWVfY2hpbGRyZW5faXRl
cmF0b3JfbmV4dChFaW5hX0l0ZXJhdG9yX0V3a19GcmFtZSogaXRlcmF0b3IsIEV2YXNfT2JqZWN0
KiogZGF0YSkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihpdC0+b2JqLCBzZCwg
RUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFt
ZSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oaXRlcmF0b3It
Pm9iamVjdCwgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTl9WQUwoc21hcnREYXRhLT5mcmFtZSwgRUlOQV9GQUxTRSk7CiAKLSAgICBXZWJDb3Jl
OjpGcmFtZVRyZWUqIHRyZWUgPSBzZC0+ZnJhbWUtPnRyZWUoKTsgLy8gY2hlY2sgaWYgaXQncyBz
dGlsbCB2YWxpZAorICAgIFdlYkNvcmU6OkZyYW1lVHJlZSogdHJlZSA9IHNtYXJ0RGF0YS0+ZnJh
bWUtPnRyZWUoKTsgLy8gY2hlY2sgaWYgaXQncyBzdGlsbCB2YWxpZAogICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOX1ZBTCh0cmVlLCBFSU5BX0ZBTFNFKTsKIAotICAgIGlmIChpdC0+Y3Vy
cmVudEluZGV4IDwgdHJlZS0+Y2hpbGRDb3VudCgpKSB7Ci0gICAgICAgICpkYXRhID0ga2l0KHRy
ZWUtPmNoaWxkKGl0LT5jdXJyZW50SW5kZXgrKykpOworICAgIGlmIChpdGVyYXRvci0+Y3VycmVu
dEluZGV4IDwgdHJlZS0+Y2hpbGRDb3VudCgpKSB7CisgICAgICAgICpkYXRhID0ga2l0KHRyZWUt
PmNoaWxkKGl0ZXJhdG9yLT5jdXJyZW50SW5kZXgrKykpOwogICAgICAgICByZXR1cm4gRUlOQV9U
UlVFOwogICAgIH0KIApAQCAtMTY5LDUzICsxNjksNTMgQEAgc3RhdGljIEVpbmFfQm9vbCBfZXdr
X2ZyYW1lX2NoaWxkcmVuX2l0ZXJhdG9yX25leHQoRWluYV9JdGVyYXRvcl9Fd2tfRnJhbWUqIGl0
LAogCiBzdGF0aWMgRXZhc19PYmplY3QqIF9ld2tfZnJhbWVfY2hpbGRyZW5faXRlcmF0b3JfZ2V0
X2NvbnRhaW5lcihFaW5hX0l0ZXJhdG9yX0V3a19GcmFtZSogaXRlcmF0b3IpCiB7Ci0gICAgcmV0
dXJuIGl0ZXJhdG9yLT5vYmo7CisgICAgcmV0dXJuIGl0ZXJhdG9yLT5vYmplY3Q7CiB9CiAKIHN0
YXRpYyB2b2lkIF9ld2tfZnJhbWVfc21hcnRfYWRkKEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsK
LSAgICBFV0tfRlJBTUVfU0RfR0VUKGV3a0ZyYW1lLCBzZCk7CisgICAgRVdLX0ZSQU1FX1NEX0dF
VChld2tGcmFtZSwgc21hcnREYXRhKTsKIAotICAgIGlmICghc2QpIHsKLSAgICAgICAgc2QgPSBz
dGF0aWNfY2FzdDxFd2tfRnJhbWVfU21hcnRfRGF0YSo+KGNhbGxvYygxLCBzaXplb2YoRXdrX0Zy
YW1lX1NtYXJ0X0RhdGEpKSk7Ci0gICAgICAgIGlmICghc2QpIHsKKyAgICBpZiAoIXNtYXJ0RGF0
YSkgeworICAgICAgICBzbWFydERhdGEgPSBzdGF0aWNfY2FzdDxFd2tfRnJhbWVfU21hcnRfRGF0
YSo+KGNhbGxvYygxLCBzaXplb2YoRXdrX0ZyYW1lX1NtYXJ0X0RhdGEpKSk7CisgICAgICAgIGlm
ICghc21hcnREYXRhKSB7CiAgICAgICAgICAgICBDUklUSUNBTCgiY291bGQgbm90IGFsbG9jYXRl
IEV3a19GcmFtZV9TbWFydF9EYXRhIik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0K
LSAgICAgICAgZXZhc19vYmplY3Rfc21hcnRfZGF0YV9zZXQoZXdrRnJhbWUsIHNkKTsKKyAgICAg
ICAgZXZhc19vYmplY3Rfc21hcnRfZGF0YV9zZXQoZXdrRnJhbWUsIHNtYXJ0RGF0YSk7CiAgICAg
fQogCi0gICAgc2QtPnNlbGYgPSBld2tGcmFtZTsKKyAgICBzbWFydERhdGEtPnNlbGYgPSBld2tG
cmFtZTsKIAogICAgIF9wYXJlbnRfc2MuYWRkKGV3a0ZyYW1lKTsKLSAgICBldmFzX29iamVjdF9z
dGF0aWNfY2xpcF9zZXQoc2QtPmJhc2UuY2xpcHBlciwgRUlOQV9GQUxTRSk7Ci0gICAgZXZhc19v
YmplY3RfbW92ZShzZC0+YmFzZS5jbGlwcGVyLCAwLCAwKTsKLSAgICBldmFzX29iamVjdF9yZXNp
emUoc2QtPmJhc2UuY2xpcHBlciwgMCwgMCk7CisgICAgZXZhc19vYmplY3Rfc3RhdGljX2NsaXBf
c2V0KHNtYXJ0RGF0YS0+YmFzZS5jbGlwcGVyLCBFSU5BX0ZBTFNFKTsKKyAgICBldmFzX29iamVj
dF9tb3ZlKHNtYXJ0RGF0YS0+YmFzZS5jbGlwcGVyLCAwLCAwKTsKKyAgICBldmFzX29iamVjdF9y
ZXNpemUoc21hcnREYXRhLT5iYXNlLmNsaXBwZXIsIDAsIDApOwogCiAjaWZkZWYgRVdLX0ZSQU1F
X0RFQlVHCi0gICAgc2QtPnJlZ2lvbiA9IGV2YXNfb2JqZWN0X3JlY3RhbmdsZV9hZGQoc2QtPmJh
c2UuZXZhcyk7CisgICAgc21hcnREYXRhLT5yZWdpb24gPSBldmFzX29iamVjdF9yZWN0YW5nbGVf
YWRkKHNtYXJ0RGF0YS0+YmFzZS5ldmFzKTsKICAgICBzdGF0aWMgaW50IGkgPSAwOwogICAgIHN3
aXRjaCAoaSkgewogICAgIGNhc2UgMDoKLSAgICAgICAgZXZhc19vYmplY3RfY29sb3Jfc2V0KHNk
LT5yZWdpb24sIDEyOCwgMCwgMCwgMTI4KTsKKyAgICAgICAgZXZhc19vYmplY3RfY29sb3Jfc2V0
KHNtYXJ0RGF0YS0+cmVnaW9uLCAxMjgsIDAsIDAsIDEyOCk7CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgMToKLSAgICAgICAgZXZhc19vYmplY3RfY29sb3Jfc2V0KHNkLT5yZWdpb24sIDAsIDEy
OCwgMCwgMTI4KTsKKyAgICAgICAgZXZhc19vYmplY3RfY29sb3Jfc2V0KHNtYXJ0RGF0YS0+cmVn
aW9uLCAwLCAxMjgsIDAsIDEyOCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgMjoKLSAgICAg
ICAgZXZhc19vYmplY3RfY29sb3Jfc2V0KHNkLT5yZWdpb24sIDAsIDAsIDEyOCwgMTI4KTsKKyAg
ICAgICAgZXZhc19vYmplY3RfY29sb3Jfc2V0KHNtYXJ0RGF0YS0+cmVnaW9uLCAwLCAwLCAxMjgs
IDEyOCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgMzoKLSAgICAgICAgZXZhc19vYmplY3Rf
Y29sb3Jfc2V0KHNkLT5yZWdpb24sIDEyOCwgMCwgMCwgMTI4KTsKKyAgICAgICAgZXZhc19vYmpl
Y3RfY29sb3Jfc2V0KHNtYXJ0RGF0YS0+cmVnaW9uLCAxMjgsIDAsIDAsIDEyOCk7CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgNDoKLSAgICAgICAgZXZhc19vYmplY3RfY29sb3Jfc2V0KHNkLT5y
ZWdpb24sIDEyOCwgMTI4LCAwLCAxMjgpOworICAgICAgICBldmFzX29iamVjdF9jb2xvcl9zZXQo
c21hcnREYXRhLT5yZWdpb24sIDEyOCwgMTI4LCAwLCAxMjgpOwogICAgICAgICBicmVhazsKICAg
ICBjYXNlIDU6Ci0gICAgICAgIGV2YXNfb2JqZWN0X2NvbG9yX3NldChzZC0+cmVnaW9uLCAxMjgs
IDAsIDEyOCwgMTI4KTsKKyAgICAgICAgZXZhc19vYmplY3RfY29sb3Jfc2V0KHNtYXJ0RGF0YS0+
cmVnaW9uLCAxMjgsIDAsIDEyOCwgMTI4KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSA2Ogot
ICAgICAgICBldmFzX29iamVjdF9jb2xvcl9zZXQoc2QtPnJlZ2lvbiwgMCwgMTI4LCAxMjgsIDEy
OCk7CisgICAgICAgIGV2YXNfb2JqZWN0X2NvbG9yX3NldChzbWFydERhdGEtPnJlZ2lvbiwgMCwg
MTI4LCAxMjgsIDEyOCk7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJy
ZWFrOwpAQCAtMjI0LDI4ICsyMjQsMjggQEAgc3RhdGljIHZvaWQgX2V3a19mcmFtZV9zbWFydF9h
ZGQoRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogICAgIGlmIChpID4gNikKICAgICAgICAgaSA9IDA7
CiAKLSAgICBldmFzX29iamVjdF9zbWFydF9tZW1iZXJfYWRkKHNkLT5yZWdpb24sIGV3a0ZyYW1l
KTsKLSAgICBldmFzX29iamVjdF9oaWRlKHNkLT5yZWdpb24pOworICAgIGV2YXNfb2JqZWN0X3Nt
YXJ0X21lbWJlcl9hZGQoc21hcnREYXRhLT5yZWdpb24sIGV3a0ZyYW1lKTsKKyAgICBldmFzX29i
amVjdF9oaWRlKHNtYXJ0RGF0YS0+cmVnaW9uKTsKICNlbmRpZgogfQogCiBzdGF0aWMgdm9pZCBf
ZXdrX2ZyYW1lX3NtYXJ0X2RlbChFdmFzX09iamVjdCogZXdrRnJhbWUpCiB7CiAgICAgV1JOKCJl
d2tGcmFtZT0lcCIsIGV3a0ZyYW1lKTsgLy8gWFhYIFJFTU9WRSBNRSBMQVRFUgotICAgIEVXS19G
UkFNRV9TRF9HRVQoZXdrRnJhbWUsIHNkKTsKLQotICAgIGlmIChzZCkgewotICAgICAgICBpZiAo
c2QtPmZyYW1lKSB7Ci0gICAgICAgICAgICBXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEVmbCog
ZmxjID0gX2V3a19mcmFtZV9sb2FkZXJfZWZsX2dldChzZC0+ZnJhbWUpOwotICAgICAgICAgICAg
ZmxjLT5zZXRXZWJGcmFtZSgwKTsKLSAgICAgICAgICAgIHNkLT5mcmFtZS0+bG9hZGVyKCktPmRl
dGFjaEZyb21QYXJlbnQoKTsKLSAgICAgICAgICAgIHNkLT5mcmFtZS0+bG9hZGVyKCktPmNhbmNl
bEFuZENsZWFyKCk7Ci0gICAgICAgICAgICBzZC0+ZnJhbWUgPSAwOworICAgIEVXS19GUkFNRV9T
RF9HRVQoZXdrRnJhbWUsIHNtYXJ0RGF0YSk7CisKKyAgICBpZiAoc21hcnREYXRhKSB7CisgICAg
ICAgIGlmIChzbWFydERhdGEtPmZyYW1lKSB7CisgICAgICAgICAgICBXZWJDb3JlOjpGcmFtZUxv
YWRlckNsaWVudEVmbCogZnJhbWVMb2FkZXJDbGllbnQgPSBfZXdrX2ZyYW1lX2xvYWRlcl9lZmxf
Z2V0KHNtYXJ0RGF0YS0+ZnJhbWUpOworICAgICAgICAgICAgZnJhbWVMb2FkZXJDbGllbnQtPnNl
dFdlYkZyYW1lKDApOworICAgICAgICAgICAgc21hcnREYXRhLT5mcmFtZS0+bG9hZGVyKCktPmRl
dGFjaEZyb21QYXJlbnQoKTsKKyAgICAgICAgICAgIHNtYXJ0RGF0YS0+ZnJhbWUtPmxvYWRlcigp
LT5jYW5jZWxBbmRDbGVhcigpOworICAgICAgICAgICAgc21hcnREYXRhLT5mcmFtZSA9IDA7CiAg
ICAgICAgIH0KIAotICAgICAgICBlaW5hX3N0cmluZ3NoYXJlX2RlbChzZC0+dGl0bGUpOwotICAg
ICAgICBlaW5hX3N0cmluZ3NoYXJlX2RlbChzZC0+dXJpKTsKLSAgICAgICAgZWluYV9zdHJpbmdz
aGFyZV9kZWwoc2QtPm5hbWUpOworICAgICAgICBlaW5hX3N0cmluZ3NoYXJlX2RlbChzbWFydERh
dGEtPnRpdGxlKTsKKyAgICAgICAgZWluYV9zdHJpbmdzaGFyZV9kZWwoc21hcnREYXRhLT51cmkp
OworICAgICAgICBlaW5hX3N0cmluZ3NoYXJlX2RlbChzbWFydERhdGEtPm5hbWUpOwogICAgIH0K
IAogICAgIF9wYXJlbnRfc2MuZGVsKGV3a0ZyYW1lKTsKQEAgLTI1MywxNSArMjUzLDE1IEBAIHN0
YXRpYyB2b2lkIF9ld2tfZnJhbWVfc21hcnRfZGVsKEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIAog
c3RhdGljIHZvaWQgX2V3a19mcmFtZV9zbWFydF9yZXNpemUoRXZhc19PYmplY3QqIGV3a0ZyYW1l
LCBFdmFzX0Nvb3JkIHdpZHRoLCBFdmFzX0Nvb3JkIGhlaWdodCkKIHsKLSAgICBFV0tfRlJBTUVf
U0RfR0VUKGV3a0ZyYW1lLCBzZCk7Ci0gICAgZXZhc19vYmplY3RfcmVzaXplKHNkLT5iYXNlLmNs
aXBwZXIsIHdpZHRoLCBoZWlnaHQpOworICAgIEVXS19GUkFNRV9TRF9HRVQoZXdrRnJhbWUsIHNt
YXJ0RGF0YSk7CisgICAgZXZhc19vYmplY3RfcmVzaXplKHNtYXJ0RGF0YS0+YmFzZS5jbGlwcGVy
LCB3aWR0aCwgaGVpZ2h0KTsKIAogI2lmZGVmIEVXS19GUkFNRV9ERUJVRwotICAgIGV2YXNfb2Jq
ZWN0X3Jlc2l6ZShzZC0+cmVnaW9uLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBldmFzX29iamVjdF9y
ZXNpemUoc21hcnREYXRhLT5yZWdpb24sIHdpZHRoLCBoZWlnaHQpOwogICAgIEV2YXNfQ29vcmQg
eCwgeTsKLSAgICBldmFzX29iamVjdF9nZW9tZXRyeV9nZXQoc2QtPnJlZ2lvbiwgJngsICZ5LCAm
d2lkdGgsICZoZWlnaHQpOworICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldChzbWFydERhdGEt
PnJlZ2lvbiwgJngsICZ5LCAmd2lkdGgsICZoZWlnaHQpOwogICAgIElORigicmVnaW9uPSVwLCB2
aXNpYmxlPSVkLCBnZW89JWQsJWQgKyAlZHglZCIsCi0gICAgICAgIHNkLT5yZWdpb24sIGV2YXNf
b2JqZWN0X3Zpc2libGVfZ2V0KHNkLT5yZWdpb24pLCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKKyAg
ICAgICAgc21hcnREYXRhLT5yZWdpb24sIGV2YXNfb2JqZWN0X3Zpc2libGVfZ2V0KHNtYXJ0RGF0
YS0+cmVnaW9uKSwgeCwgeSwgd2lkdGgsIGhlaWdodCk7CiAgICAgX2V3a19mcmFtZV9kZWJ1Zyhl
d2tGcmFtZSk7CiAjZW5kaWYKIH0KQEAgLTI3NiwxMyArMjc2LDEzIEBAIHN0YXRpYyB2b2lkIF9l
d2tfZnJhbWVfc21hcnRfc2V0KEV2YXNfU21hcnRfQ2xhc3MqIGFwaSkKIAogc3RhdGljIGlubGlu
ZSBFdmFzX1NtYXJ0KiBfZXdrX2ZyYW1lX3NtYXJ0X2NsYXNzX25ldyh2b2lkKQogewotICAgIHN0
YXRpYyBFdmFzX1NtYXJ0X0NsYXNzIHNjID0gRVZBU19TTUFSVF9DTEFTU19JTklUX05BTUVfVkVS
U0lPTihFV0tfRlJBTUVfVFlQRV9TVFIpOworICAgIHN0YXRpYyBFdmFzX1NtYXJ0X0NsYXNzIHNt
YXJ0Q2xhc3MgPSBFVkFTX1NNQVJUX0NMQVNTX0lOSVRfTkFNRV9WRVJTSU9OKEVXS19GUkFNRV9U
WVBFX1NUUik7CiAgICAgc3RhdGljIEV2YXNfU21hcnQqIHNtYXJ0ID0gMDsKIAogICAgIGlmIChF
SU5BX1VOTElLRUxZKCFzbWFydCkpIHsKICAgICAgICAgZXZhc19vYmplY3Rfc21hcnRfY2xpcHBl
ZF9zbWFydF9zZXQoJl9wYXJlbnRfc2MpOwotICAgICAgICBfZXdrX2ZyYW1lX3NtYXJ0X3NldCgm
c2MpOwotICAgICAgICBzbWFydCA9IGV2YXNfc21hcnRfY2xhc3NfbmV3KCZzYyk7CisgICAgICAg
IF9ld2tfZnJhbWVfc21hcnRfc2V0KCZzbWFydENsYXNzKTsKKyAgICAgICAgc21hcnQgPSBldmFz
X3NtYXJ0X2NsYXNzX25ldygmc21hcnRDbGFzcyk7CiAgICAgfQogCiAgICAgcmV0dXJuIHNtYXJ0
OwpAQCAtMjk2LDI4ICsyOTYsMjggQEAgRXZhc19PYmplY3QqIGV3a19mcmFtZV92aWV3X2dldChj
b25zdCBFdmFzX09iamVjdCogZXdrRnJhbWUpCiAKIEVpbmFfSXRlcmF0b3IqIGV3a19mcmFtZV9j
aGlsZHJlbl9pdGVyYXRvcl9uZXcoRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewotICAgIEVXS19G
UkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgMCk7Ci0gICAgRWluYV9JdGVyYXRv
cl9Fd2tfRnJhbWUqIGl0ID0gc3RhdGljX2Nhc3Q8RWluYV9JdGVyYXRvcl9Fd2tfRnJhbWUqPgor
ICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzbWFydERhdGEsIDApOwor
ICAgIEVpbmFfSXRlcmF0b3JfRXdrX0ZyYW1lKiBpdGVyYXRvciA9IHN0YXRpY19jYXN0PEVpbmFf
SXRlcmF0b3JfRXdrX0ZyYW1lKj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
Y2FsbG9jKDEsIHNpemVvZihFaW5hX0l0ZXJhdG9yX0V3a19GcmFtZSkpKTsKLSAgICBpZiAoIWl0
KQorICAgIGlmICghaXRlcmF0b3IpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgRUlOQV9NQUdJ
Q19TRVQoJml0LT5iYXNlLCBFSU5BX01BR0lDX0lURVJBVE9SKTsKLSAgICBpdC0+YmFzZS5uZXh0
ID0gRlVOQ19JVEVSQVRPUl9ORVhUKF9ld2tfZnJhbWVfY2hpbGRyZW5faXRlcmF0b3JfbmV4dCk7
Ci0gICAgaXQtPmJhc2UuZ2V0X2NvbnRhaW5lciA9IEZVTkNfSVRFUkFUT1JfR0VUX0NPTlRBSU5F
UihfZXdrX2ZyYW1lX2NoaWxkcmVuX2l0ZXJhdG9yX2dldF9jb250YWluZXIpOwotICAgIGl0LT5i
YXNlLmZyZWUgPSBGVU5DX0lURVJBVE9SX0ZSRUUoZnJlZSk7Ci0gICAgaXQtPm9iaiA9IGV3a0Zy
YW1lOwotICAgIGl0LT5jdXJyZW50SW5kZXggPSAwOwotICAgIHJldHVybiAmaXQtPmJhc2U7Cisg
ICAgRUlOQV9NQUdJQ19TRVQoJml0ZXJhdG9yLT5iYXNlLCBFSU5BX01BR0lDX0lURVJBVE9SKTsK
KyAgICBpdGVyYXRvci0+YmFzZS5uZXh0ID0gRlVOQ19JVEVSQVRPUl9ORVhUKF9ld2tfZnJhbWVf
Y2hpbGRyZW5faXRlcmF0b3JfbmV4dCk7CisgICAgaXRlcmF0b3ItPmJhc2UuZ2V0X2NvbnRhaW5l
ciA9IEZVTkNfSVRFUkFUT1JfR0VUX0NPTlRBSU5FUihfZXdrX2ZyYW1lX2NoaWxkcmVuX2l0ZXJh
dG9yX2dldF9jb250YWluZXIpOworICAgIGl0ZXJhdG9yLT5iYXNlLmZyZWUgPSBGVU5DX0lURVJB
VE9SX0ZSRUUoZnJlZSk7CisgICAgaXRlcmF0b3ItPm9iamVjdCA9IGV3a0ZyYW1lOworICAgIGl0
ZXJhdG9yLT5jdXJyZW50SW5kZXggPSAwOworICAgIHJldHVybiAmaXRlcmF0b3ItPmJhc2U7CiB9
CiAKIEV2YXNfT2JqZWN0KiBld2tfZnJhbWVfY2hpbGRfZmluZChFdmFzX09iamVjdCogZXdrRnJh
bWUsIGNvbnN0IGNoYXIqIG5hbWUpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrRnJhbWUsIHNkLCAwKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFt
ZSwgc21hcnREYXRhLCAwKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwobmFt
ZSwgMCk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgMCk7
Ci0gICAgV1RGOjpTdHJpbmcgcyA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChuYW1lKTsKLSAgICBy
ZXR1cm4ga2l0KHNkLT5mcmFtZS0+dHJlZSgpLT5maW5kKFdURjo6QXRvbWljU3RyaW5nKHMpKSk7
CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUsIDAp
OworICAgIFdURjo6U3RyaW5nIHN0cmluZyA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChuYW1lKTsK
KyAgICByZXR1cm4ga2l0KHNtYXJ0RGF0YS0+ZnJhbWUtPnRyZWUoKS0+ZmluZChXVEY6OkF0b21p
Y1N0cmluZyhzdHJpbmcpKSk7CiB9CiAKIEVpbmFfQm9vbCBld2tfZnJhbWVfdXJpX3NldChFdmFz
X09iamVjdCogZXdrRnJhbWUsIGNvbnN0IGNoYXIqIHVyaSkKQEAgLTMzOCwyNyArMzM4LDI3IEBA
IGNvbnN0IGNoYXIqIGV3a19mcmFtZV91cmlfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tGcmFt
ZSkKIAogY29uc3QgY2hhciogZXdrX2ZyYW1lX3RpdGxlX2dldChjb25zdCBFdmFzX09iamVjdCog
ZXdrRnJhbWUpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNk
LCAwKTsKLSAgICByZXR1cm4gc2QtPnRpdGxlOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVU
VVJOKGV3a0ZyYW1lLCBzbWFydERhdGEsIDApOworICAgIHJldHVybiBzbWFydERhdGEtPnRpdGxl
OwogfQogCiBjb25zdCBjaGFyKiBld2tfZnJhbWVfbmFtZV9nZXQoY29uc3QgRXZhc19PYmplY3Qq
IGV3a0ZyYW1lKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBz
ZCwgMCk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNtYXJ0RGF0
YSwgMCk7CiAKLSAgICBpZiAoIXNkLT5mcmFtZSkgeworICAgIGlmICghc21hcnREYXRhLT5mcmFt
ZSkgewogICAgICAgICBFUlIoImNvdWxkIG5vdCBnZXQgbmFtZSBvZiB1bmluaXRpYWxpemVkIGZy
YW1lLiIpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBjb25zdCBXVEY6OlN0cmlu
ZyBmcmFtZU5hbWUgPSBzZC0+ZnJhbWUtPnRyZWUoKS0+dW5pcXVlTmFtZSgpOworICAgIGNvbnN0
IFdURjo6U3RyaW5nIGZyYW1lTmFtZSA9IHNtYXJ0RGF0YS0+ZnJhbWUtPnRyZWUoKS0+dW5pcXVl
TmFtZSgpOwogCi0gICAgaWYgKChzZC0+bmFtZSkgJiYgKHNkLT5uYW1lID09IGZyYW1lTmFtZSkp
Ci0gICAgICAgIHJldHVybiBzZC0+bmFtZTsKKyAgICBpZiAoKHNtYXJ0RGF0YS0+bmFtZSkgJiYg
KHNtYXJ0RGF0YS0+bmFtZSA9PSBmcmFtZU5hbWUpKQorICAgICAgICByZXR1cm4gc21hcnREYXRh
LT5uYW1lOwogCi0gICAgZWluYV9zdHJpbmdzaGFyZV9yZXBsYWNlX2xlbmd0aCgmKHNkLT5uYW1l
KSwgZnJhbWVOYW1lLnV0ZjgoKS5kYXRhKCksIGZyYW1lTmFtZS5sZW5ndGgoKSk7CisgICAgZWlu
YV9zdHJpbmdzaGFyZV9yZXBsYWNlX2xlbmd0aCgmKHNtYXJ0RGF0YS0+bmFtZSksIGZyYW1lTmFt
ZS51dGY4KCkuZGF0YSgpLCBmcmFtZU5hbWUubGVuZ3RoKCkpOwogCi0gICAgcmV0dXJuIHNkLT5u
YW1lOworICAgIHJldHVybiBzbWFydERhdGEtPm5hbWU7CiB9CiAKIEVpbmFfQm9vbCBld2tfZnJh
bWVfY29udGVudHNfc2l6ZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBFdmFzX0Nv
b3JkKiB3aWR0aCwgRXZhc19Db29yZCogaGVpZ2h0KQpAQCAtMzc3LDkgKzM3Nyw5IEBAIEVpbmFf
Qm9vbCBld2tfZnJhbWVfY29udGVudHNfc2l6ZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a0Zy
YW1lLCBFdmFzX0Nvb3JkKiB3CiAKIHN0YXRpYyBFaW5hX0Jvb2wgX2V3a19mcmFtZV9jb250ZW50
c19zZXRfaW50ZXJuYWwoRXdrX0ZyYW1lX1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSwgY29uc3QgY2hh
ciogY29udGVudHMsIHNpemVfdCBjb250ZW50c1NpemUsIGNvbnN0IGNoYXIqIG1pbWVUeXBlLCBj
b25zdCBjaGFyKiBlbmNvZGluZywgY29uc3QgY2hhciogYmFzZVVyaSwgY29uc3QgY2hhciogdW5y
ZWFjaGFibGVVcmkpCiB7Ci0gICAgc2l6ZV90IGxlbiA9IHN0cmxlbihjb250ZW50cyk7Ci0gICAg
aWYgKGNvbnRlbnRzU2l6ZSA8IDEgfHwgY29udGVudHNTaXplID4gbGVuKQotICAgICAgICBjb250
ZW50c1NpemUgPSBsZW47CisgICAgc2l6ZV90IGxlbmd0aCA9IHN0cmxlbihjb250ZW50cyk7Cisg
ICAgaWYgKGNvbnRlbnRzU2l6ZSA8IDEgfHwgY29udGVudHNTaXplID4gbGVuZ3RoKQorICAgICAg
ICBjb250ZW50c1NpemUgPSBsZW5ndGg7CiAgICAgaWYgKCFtaW1lVHlwZSkKICAgICAgICAgbWlt
ZVR5cGUgPSAidGV4dC9odG1sIjsKICAgICBpZiAoIWVuY29kaW5nKQpAQCAtNDA4LDU3ICs0MDgs
NTcgQEAgc3RhdGljIEVpbmFfQm9vbCBfZXdrX2ZyYW1lX2NvbnRlbnRzX3NldF9pbnRlcm5hbChF
d2tfRnJhbWVfU21hcnRfRGF0YSogc21hcnREYXQKIAogRWluYV9Cb29sIGV3a19mcmFtZV9jb250
ZW50c19zZXQoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBjb25zdCBjaGFyKiBjb250ZW50cywgc2l6
ZV90IGNvbnRlbnRzU2l6ZSwgY29uc3QgY2hhciogbWltZVR5cGUsIGNvbnN0IGNoYXIqIGVuY29k
aW5nLCBjb25zdCBjaGFyKiBiYXNlVXJpKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVU
VVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fRkFMU0Vf
UkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOworICAgIEVXS19GUkFNRV9TRF9HRVRf
T1JfUkVUVVJOKGV3a0ZyYW1lLCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FG
RVRZX09OX0ZBTFNFX1JFVFVSTl9WQUwoc21hcnREYXRhLT5mcmFtZSwgRUlOQV9GQUxTRSk7CiAg
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGNvbnRlbnRzLCBFSU5BX0ZBTFNFKTsK
ICAgICByZXR1cm4gX2V3a19mcmFtZV9jb250ZW50c19zZXRfaW50ZXJuYWwKLSAgICAgICAgICAg
ICAgIChzZCwgY29udGVudHMsIGNvbnRlbnRzU2l6ZSwgbWltZVR5cGUsIGVuY29kaW5nLCBiYXNl
VXJpLCAwKTsKKyAgICAgICAgICAgICAgIChzbWFydERhdGEsIGNvbnRlbnRzLCBjb250ZW50c1Np
emUsIG1pbWVUeXBlLCBlbmNvZGluZywgYmFzZVVyaSwgMCk7CiB9CiAKIEVpbmFfQm9vbCBld2tf
ZnJhbWVfY29udGVudHNfYWx0ZXJuYXRlX3NldChFdmFzX09iamVjdCogZXdrRnJhbWUsIGNvbnN0
IGNoYXIqIGNvbnRlbnRzLCBzaXplX3QgY29udGVudHNTaXplLCBjb25zdCBjaGFyKiBtaW1lVHlw
ZSwgY29uc3QgY2hhciogZW5jb2RpbmcsIGNvbnN0IGNoYXIqIGJhc2VVcmksIGNvbnN0IGNoYXIq
IHVucmVhY2hhYmxlVXJpKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0Zy
YW1lLCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fRkFMU0VfUkVUVVJOX1ZB
TChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJO
KGV3a0ZyYW1lLCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09OX0ZB
TFNFX1JFVFVSTl9WQUwoc21hcnREYXRhLT5mcmFtZSwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGNvbnRlbnRzLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodW5yZWFjaGFibGVVcmksIEVJTkFfRkFMU0UpOwog
ICAgIHJldHVybiBfZXdrX2ZyYW1lX2NvbnRlbnRzX3NldF9pbnRlcm5hbAotICAgICAgICAgICAg
ICAgKHNkLCBjb250ZW50cywgY29udGVudHNTaXplLCBtaW1lVHlwZSwgZW5jb2RpbmcsIGJhc2VV
cmksCisgICAgICAgICAgICAgICAoc21hcnREYXRhLCBjb250ZW50cywgY29udGVudHNTaXplLCBt
aW1lVHlwZSwgZW5jb2RpbmcsIGJhc2VVcmksCiAgICAgICAgICAgICAgICB1bnJlYWNoYWJsZVVy
aSk7CiB9CiAKIEVpbmFfQm9vbCBld2tfZnJhbWVfc2NyaXB0X2V4ZWN1dGUoRXZhc19PYmplY3Qq
IGV3a0ZyYW1lLCBjb25zdCBjaGFyKiBzY3JpcHQpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9P
Ul9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9G
QUxTRV9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX0ZSQU1FX1NE
X0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRUlO
QV9TQUZFVFlfT05fRkFMU0VfUkVUVVJOX1ZBTChzbWFydERhdGEtPmZyYW1lLCBFSU5BX0ZBTFNF
KTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2NyaXB0LCBFSU5BX0ZBTFNF
KTsKLSAgICBzZC0+ZnJhbWUtPnNjcmlwdCgpLT5leGVjdXRlU2NyaXB0KFdURjo6U3RyaW5nOjpm
cm9tVVRGOChzY3JpcHQpLCB0cnVlKTsKKyAgICBzbWFydERhdGEtPmZyYW1lLT5zY3JpcHQoKS0+
ZXhlY3V0ZVNjcmlwdChXVEY6OlN0cmluZzo6ZnJvbVVURjgoc2NyaXB0KSwgdHJ1ZSk7CiAgICAg
cmV0dXJuIEVJTkFfVFJVRTsKIH0KIAogRWluYV9Cb29sIGV3a19mcmFtZV9lZGl0YWJsZV9nZXQo
Y29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1Jf
UkVUVVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7Ci0gICAgcmV0dXJuIHNkLT5lZGl0
YWJsZTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRh
LCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnRE
YXRhLT5mcmFtZSwgRUlOQV9GQUxTRSk7CisgICAgcmV0dXJuIHNtYXJ0RGF0YS0+ZWRpdGFibGU7
CiB9CiAKIEVpbmFfQm9vbCBld2tfZnJhbWVfZWRpdGFibGVfc2V0KEV2YXNfT2JqZWN0KiBld2tG
cmFtZSwgRWluYV9Cb29sIGVkaXRhYmxlKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVU
VVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9P
Ul9SRVRVUk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZF
VFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUsIEVJTkFfRkFMU0UpOwogICAg
IGVkaXRhYmxlID0gISFlZGl0YWJsZTsKLSAgICBpZiAoc2QtPmVkaXRhYmxlID09IGVkaXRhYmxl
KQorICAgIGlmIChzbWFydERhdGEtPmVkaXRhYmxlID09IGVkaXRhYmxlKQogICAgICAgICByZXR1
cm4gRUlOQV9UUlVFOwogICAgIGlmIChlZGl0YWJsZSkKLSAgICAgICAgc2QtPmZyYW1lLT5lZGl0
b3IoKS0+YXBwbHlFZGl0aW5nU3R5bGVUb0JvZHlFbGVtZW50KCk7CisgICAgICAgIHNtYXJ0RGF0
YS0+ZnJhbWUtPmVkaXRvcigpLT5hcHBseUVkaXRpbmdTdHlsZVRvQm9keUVsZW1lbnQoKTsKICAg
ICByZXR1cm4gRUlOQV9UUlVFOwogfQogCiBjaGFyKiBld2tfZnJhbWVfc2VsZWN0aW9uX2dldChj
b25zdCBFdmFzX09iamVjdCogZXdrRnJhbWUpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9S
RVRVUk4oZXdrRnJhbWUsIHNkLCAwKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9W
QUwoc2QtPmZyYW1lLCAwKTsKLSAgICBXVEY6OkNTdHJpbmcgcyA9IHNkLT5mcmFtZS0+ZWRpdG9y
KCktPnNlbGVjdGVkVGV4dCgpLnV0ZjgoKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVS
Tihld2tGcmFtZSwgc21hcnREYXRhLCAwKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
Tl9WQUwoc21hcnREYXRhLT5mcmFtZSwgMCk7CisgICAgV1RGOjpDU3RyaW5nIHMgPSBzbWFydERh
dGEtPmZyYW1lLT5lZGl0b3IoKS0+c2VsZWN0ZWRUZXh0KCkudXRmOCgpOwogICAgIGlmIChzLmlz
TnVsbCgpKQogICAgICAgICByZXR1cm4gMDsKICAgICByZXR1cm4gc3RyZHVwKHMuZGF0YSgpKTsK
QEAgLTQ2Niw0NSArNDY2LDQ1IEBAIGNoYXIqIGV3a19mcmFtZV9zZWxlY3Rpb25fZ2V0KGNvbnN0
IEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIAogRWluYV9Cb29sIGV3a19mcmFtZV90ZXh0X3NlYXJj
aChjb25zdCBFdmFzX09iamVjdCogZXdrRnJhbWUsIGNvbnN0IGNoYXIqIHRleHQsIEVpbmFfQm9v
bCBjYXNlU2Vuc2l0aXZlLCBFaW5hX0Jvb2wgZm9yd2FyZCwgRWluYV9Cb29sIHdyYXApCiB7Ci0g
ICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsK
LSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNF
KTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRhLCBF
SU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRh
LT5mcmFtZSwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFM
KHRleHQsIEVJTkFfRkFMU0UpOwogCi0gICAgcmV0dXJuIHNkLT5mcmFtZS0+ZWRpdG9yKCktPmZp
bmRTdHJpbmcoV1RGOjpTdHJpbmc6OmZyb21VVEY4KHRleHQpLCBmb3J3YXJkLCBjYXNlU2Vuc2l0
aXZlLCB3cmFwLCB0cnVlKTsKKyAgICByZXR1cm4gc21hcnREYXRhLT5mcmFtZS0+ZWRpdG9yKCkt
PmZpbmRTdHJpbmcoV1RGOjpTdHJpbmc6OmZyb21VVEY4KHRleHQpLCBmb3J3YXJkLCBjYXNlU2Vu
c2l0aXZlLCB3cmFwLCB0cnVlKTsKIH0KIAogdW5zaWduZWQgaW50IGV3a19mcmFtZV90ZXh0X21h
dGNoZXNfbWFyayhFdmFzX09iamVjdCogZXdrRnJhbWUsIGNvbnN0IGNoYXIqIHN0cmluZywgRWlu
YV9Cb29sIGNhc2VTZW5zaXRpdmUsIEVpbmFfQm9vbCBoaWdobGlnaHQsIHVuc2lnbmVkIGludCBs
aW1pdCkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIDAp
OwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFM
U0UpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzbWFydERhdGEs
IDApOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmZyYW1l
LCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc3RyaW5n
LCAwKTsKIAotICAgIHNkLT5mcmFtZS0+ZWRpdG9yKCktPnNldE1hcmtlZFRleHRNYXRjaGVzQXJl
SGlnaGxpZ2h0ZWQoaGlnaGxpZ2h0KTsKLSAgICByZXR1cm4gc2QtPmZyYW1lLT5lZGl0b3IoKS0+
Y291bnRNYXRjaGVzRm9yVGV4dChXVEY6OlN0cmluZzo6ZnJvbVVURjgoc3RyaW5nKSwgY2FzZVNl
bnNpdGl2ZSwgbGltaXQsIHRydWUpOworICAgIHNtYXJ0RGF0YS0+ZnJhbWUtPmVkaXRvcigpLT5z
ZXRNYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkKGhpZ2hsaWdodCk7CisgICAgcmV0dXJu
IHNtYXJ0RGF0YS0+ZnJhbWUtPmVkaXRvcigpLT5jb3VudE1hdGNoZXNGb3JUZXh0KFdURjo6U3Ry
aW5nOjpmcm9tVVRGOChzdHJpbmcpLCBjYXNlU2Vuc2l0aXZlLCBsaW1pdCwgdHJ1ZSk7CiB9CiAK
IEVpbmFfQm9vbCBld2tfZnJhbWVfdGV4dF9tYXRjaGVzX3VubWFya19hbGwoRXZhc19PYmplY3Qq
IGV3a0ZyYW1lKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBz
ZCwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5m
cmFtZSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJh
bWUsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUsIEVJTkFfRkFMU0UpOwogCi0gICAgc2QtPmZyYW1lLT5k
b2N1bWVudCgpLT5tYXJrZXJzKCktPnJlbW92ZU1hcmtlcnMoV2ViQ29yZTo6RG9jdW1lbnRNYXJr
ZXI6OlRleHRNYXRjaCk7CisgICAgc21hcnREYXRhLT5mcmFtZS0+ZG9jdW1lbnQoKS0+bWFya2Vy
cygpLT5yZW1vdmVNYXJrZXJzKFdlYkNvcmU6OkRvY3VtZW50TWFya2VyOjpUZXh0TWF0Y2gpOwog
ICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKIEVpbmFfQm9vbCBld2tfZnJhbWVfdGV4dF9tYXRj
aGVzX2hpZ2hsaWdodF9zZXQoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBFaW5hX0Jvb2wgaGlnaGxp
Z2h0KQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgRUlO
QV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwg
RUlOQV9GQUxTRSk7Ci0gICAgc2QtPmZyYW1lLT5lZGl0b3IoKS0+c2V0TWFya2VkVGV4dE1hdGNo
ZXNBcmVIaWdobGlnaHRlZChoaWdobGlnaHQpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVU
VVJOKGV3a0ZyYW1lLCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKKyAgICBzbWFy
dERhdGEtPmZyYW1lLT5lZGl0b3IoKS0+c2V0TWFya2VkVGV4dE1hdGNoZXNBcmVIaWdobGlnaHRl
ZChoaWdobGlnaHQpOwogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKIEVpbmFfQm9vbCBld2tf
ZnJhbWVfdGV4dF9tYXRjaGVzX2hpZ2hsaWdodF9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a0Zy
YW1lKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgRUlO
QV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwg
RUlOQV9GQUxTRSk7Ci0gICAgcmV0dXJuIHNkLT5mcmFtZS0+ZWRpdG9yKCktPm1hcmtlZFRleHRN
YXRjaGVzQXJlSGlnaGxpZ2h0ZWQoKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihl
d2tGcmFtZSwgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTl9WQUwoc21hcnREYXRhLT5mcmFtZSwgRUlOQV9GQUxTRSk7CisgICAgcmV0dXJuIHNt
YXJ0RGF0YS0+ZnJhbWUtPmVkaXRvcigpLT5tYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVk
KCk7CiB9CiAKIC8qKgpAQCAtNTI1LDEwICs1MjUsMTAgQEAgc3RhdGljIGJvb2wgX2V3a19mcmFt
ZV9yZWN0X2lzX25lZ2F0aXZlX3ZhbHVlKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmIHJlY3QpCiAK
IEVpbmFfQm9vbCBld2tfZnJhbWVfdGV4dF9tYXRjaGVzX250aF9wb3NfZ2V0KGNvbnN0IEV2YXNf
T2JqZWN0KiBld2tGcmFtZSwgc2l6ZV90IG51bWJlciwgaW50KiB4LCBpbnQqIHkpCiB7Ci0gICAg
RVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsKLSAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsK
KyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRhLCBFSU5B
X0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5m
cmFtZSwgRUlOQV9GQUxTRSk7CiAKLSAgICBWZWN0b3I8V2ViQ29yZTo6SW50UmVjdD4gaW50UmVj
dHMgPSBzZC0+ZnJhbWUtPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+cmVuZGVyZWRSZWN0c0Zvck1h
cmtlcnMoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXI6OlRleHRNYXRjaCk7CisgICAgVmVjdG9yPFdl
YkNvcmU6OkludFJlY3Q+IGludFJlY3RzID0gc21hcnREYXRhLT5mcmFtZS0+ZG9jdW1lbnQoKS0+
bWFya2VycygpLT5yZW5kZXJlZFJlY3RzRm9yTWFya2VycyhXZWJDb3JlOjpEb2N1bWVudE1hcmtl
cjo6VGV4dE1hdGNoKTsKIAogICAgIC8qIHJlbW92ZSB1c2VsZXNzIHZhbHVlcyAqLwogICAgIHN0
ZDo6cmVtb3ZlX2lmKGludFJlY3RzLmJlZ2luKCksIGludFJlY3RzLmVuZCgpLCBfZXdrX2ZyYW1l
X3JlY3RfaXNfbmVnYXRpdmVfdmFsdWUpOwpAQCAtNTQ3LDI1ICs1NDcsMjUgQEAgRWluYV9Cb29s
IGV3a19mcmFtZV90ZXh0X21hdGNoZXNfbnRoX3Bvc19nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3
a0ZyYW1lLCBzaXplX3QKIAogRWluYV9Cb29sIGV3a19mcmFtZV9zdG9wKEV2YXNfT2JqZWN0KiBl
d2tGcmFtZSkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2Qs
IEVJTkFfRkFMU0UpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJh
bWUsIEVJTkFfRkFMU0UpOwotICAgIHNkLT5mcmFtZS0+bG9hZGVyKCktPnN0b3BBbGxMb2FkZXJz
KCk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSwg
RUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0
YS0+ZnJhbWUsIEVJTkFfRkFMU0UpOworICAgIHNtYXJ0RGF0YS0+ZnJhbWUtPmxvYWRlcigpLT5z
dG9wQWxsTG9hZGVycygpOwogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKIEVpbmFfQm9vbCBl
d2tfZnJhbWVfcmVsb2FkKEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsKLSAgICBFV0tfRlJBTUVf
U0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOwotICAgIHNkLT5m
cmFtZS0+bG9hZGVyKCktPnJlbG9hZCgpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJO
KGV3a0ZyYW1lLCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKKyAgICBzbWFydERh
dGEtPmZyYW1lLT5sb2FkZXIoKS0+cmVsb2FkKCk7CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0K
IAogRWluYV9Cb29sIGV3a19mcmFtZV9yZWxvYWRfZnVsbChFdmFzX09iamVjdCogZXdrRnJhbWUp
CiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZB
TFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5B
X0ZBTFNFKTsKLSAgICBzZC0+ZnJhbWUtPmxvYWRlcigpLT5yZWxvYWQodHJ1ZSk7CisgICAgRVdL
X0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7
CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUsIEVJ
TkFfRkFMU0UpOworICAgIHNtYXJ0RGF0YS0+ZnJhbWUtPmxvYWRlcigpLT5yZWxvYWQodHJ1ZSk7
CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIApAQCAtNTgxLDkgKzU4MSw5IEBAIEVpbmFfQm9v
bCBld2tfZnJhbWVfZm9yd2FyZChFdmFzX09iamVjdCogZXdrRnJhbWUpCiAKIEVpbmFfQm9vbCBl
d2tfZnJhbWVfbmF2aWdhdGUoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBpbnQgc3RlcHMpCiB7Ci0g
ICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsK
LSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNF
KTsKLSAgICBXZWJDb3JlOjpQYWdlKiBwYWdlID0gc2QtPmZyYW1lLT5wYWdlKCk7CisgICAgRVdL
X0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7
CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUsIEVJ
TkFfRkFMU0UpOworICAgIFdlYkNvcmU6OlBhZ2UqIHBhZ2UgPSBzbWFydERhdGEtPmZyYW1lLT5w
YWdlKCk7CiAgICAgaWYgKCFwYWdlLT5jYW5Hb0JhY2tPckZvcndhcmQoc3RlcHMpKQogICAgICAg
ICByZXR1cm4gRUlOQV9GQUxTRTsKICAgICBwYWdlLT5nb0JhY2tPckZvcndhcmQoc3RlcHMpOwpA
QCAtNjAyLDM5ICs2MDIsMzkgQEAgRWluYV9Cb29sIGV3a19mcmFtZV9mb3J3YXJkX3Bvc3NpYmxl
KEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIAogRWluYV9Cb29sIGV3a19mcmFtZV9uYXZpZ2F0ZV9w
b3NzaWJsZShFdmFzX09iamVjdCogZXdrRnJhbWUsIGludCBzdGVwcykKIHsKLSAgICBFV0tfRlJB
TUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOwotICAgIFdl
YkNvcmU6OlBhZ2UqIHBhZ2UgPSBzZC0+ZnJhbWUtPnBhZ2UoKTsKKyAgICBFV0tfRlJBTUVfU0Rf
R0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5mcmFtZSwgRUlOQV9GQUxTRSk7
CisgICAgV2ViQ29yZTo6UGFnZSogcGFnZSA9IHNtYXJ0RGF0YS0+ZnJhbWUtPnBhZ2UoKTsKICAg
ICByZXR1cm4gcGFnZS0+Y2FuR29CYWNrT3JGb3J3YXJkKHN0ZXBzKTsKIH0KIAogZmxvYXQgZXdr
X2ZyYW1lX3BhZ2Vfem9vbV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewotICAg
IEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgLTEuMCk7Ci0gICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgLTEuMCk7Ci0gICAgcmV0dXJu
IHNkLT5mcmFtZS0+cGFnZVpvb21GYWN0b3IoKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JF
VFVSTihld2tGcmFtZSwgc21hcnREYXRhLCAtMS4wKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTl9WQUwoc21hcnREYXRhLT5mcmFtZSwgLTEuMCk7CisgICAgcmV0dXJuIHNtYXJ0RGF0
YS0+ZnJhbWUtPnBhZ2Vab29tRmFjdG9yKCk7CiB9CiAKIEVpbmFfQm9vbCBld2tfZnJhbWVfcGFn
ZV96b29tX3NldChFdmFzX09iamVjdCogZXdrRnJhbWUsIGZsb2F0IHBhZ2Vab29tRmFjdG9yKQog
ewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxT
RSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9G
QUxTRSk7Ci0gICAgc2QtPmZyYW1lLT5zZXRQYWdlWm9vbUZhY3RvcihwYWdlWm9vbUZhY3Rvcik7
CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSwgRUlO
QV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+
ZnJhbWUsIEVJTkFfRkFMU0UpOworICAgIHNtYXJ0RGF0YS0+ZnJhbWUtPnNldFBhZ2Vab29tRmFj
dG9yKHBhZ2Vab29tRmFjdG9yKTsKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCiBmbG9hdCBl
d2tfZnJhbWVfdGV4dF96b29tX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrRnJhbWUpCiB7Ci0g
ICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCAtMS4wKTsKLSAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCAtMS4wKTsKLSAgICByZXR1
cm4gc2QtPmZyYW1lLT50ZXh0Wm9vbUZhY3RvcigpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1Jf
UkVUVVJOKGV3a0ZyYW1lLCBzbWFydERhdGEsIC0xLjApOworICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmZyYW1lLCAtMS4wKTsKKyAgICByZXR1cm4gc21hcnRE
YXRhLT5mcmFtZS0+dGV4dFpvb21GYWN0b3IoKTsKIH0KIAogRWluYV9Cb29sIGV3a19mcmFtZV90
ZXh0X3pvb21fc2V0KEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgZmxvYXQgdGV4dFpvb21GYWN0b3Ip
CiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZB
TFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5B
X0ZBTFNFKTsKLSAgICBzZC0+ZnJhbWUtPnNldFRleHRab29tRmFjdG9yKHRleHRab29tRmFjdG9y
KTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRhLCBF
SU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRh
LT5mcmFtZSwgRUlOQV9GQUxTRSk7CisgICAgc21hcnREYXRhLT5mcmFtZS0+c2V0VGV4dFpvb21G
YWN0b3IodGV4dFpvb21GYWN0b3IpOwogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKQEAgLTY1
MywxNCArNjUzLDE0IEBAIHZvaWQgZXdrX2ZyYW1lX2hpdF90ZXN0X2ZyZWUoRXdrX0hpdF9UZXN0
KiBoaXRUZXN0KQogCiBFd2tfSGl0X1Rlc3QqIGV3a19mcmFtZV9oaXRfdGVzdF9uZXcoY29uc3Qg
RXZhc19PYmplY3QqIGV3a0ZyYW1lLCBpbnQgeCwgaW50IHkpCiB7Ci0gICAgRVdLX0ZSQU1FX1NE
X0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCAwKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTl9WQUwoc2QtPmZyYW1lLCAwKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVS
Tihld2tGcmFtZSwgc21hcnREYXRhLCAwKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
Tl9WQUwoc21hcnREYXRhLT5mcmFtZSwgMCk7CiAKLSAgICBXZWJDb3JlOjpGcmFtZVZpZXcqIHZp
ZXcgPSBzZC0+ZnJhbWUtPnZpZXcoKTsKKyAgICBXZWJDb3JlOjpGcmFtZVZpZXcqIHZpZXcgPSBz
bWFydERhdGEtPmZyYW1lLT52aWV3KCk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5f
VkFMKHZpZXcsIDApOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJh
bWUtPmNvbnRlbnRSZW5kZXJlcigpLCAwKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
Tl9WQUwoc21hcnREYXRhLT5mcmFtZS0+Y29udGVudFJlbmRlcmVyKCksIDApOwogCi0gICAgV2Vi
Q29yZTo6SGl0VGVzdFJlc3VsdCByZXN1bHQgPSBzZC0+ZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5o
aXRUZXN0UmVzdWx0QXRQb2ludAorICAgIFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQgcmVzdWx0ID0g
c21hcnREYXRhLT5mcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmhpdFRlc3RSZXN1bHRBdFBvaW50CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZpZXctPndpbmRvd1RvQ29u
dGVudHMoV2ViQ29yZTo6SW50UG9pbnQoeCwgeSkpLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIC8qYWxsb3dTaGFkb3dDb250ZW50Ki8gZmFsc2UsIC8qaWdub3JlQ2xp
cHBpbmcqLyB0cnVlKTsKIApAQCAtNjY5LDQxICs2NjksNDEgQEAgRXdrX0hpdF9UZXN0KiBld2tf
ZnJhbWVfaGl0X3Rlc3RfbmV3KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgaW50IHgsIGlu
dCB5KQogICAgIGlmICghcmVzdWx0LmlubmVyTm9kZSgpKQogICAgICAgICByZXR1cm4gMDsKIAot
ICAgIEV3a19IaXRfVGVzdCogaGl0X3Rlc3QgPSBzdGF0aWNfY2FzdDxFd2tfSGl0X1Rlc3QqPihj
YWxsb2MoMSwgc2l6ZW9mKEV3a19IaXRfVGVzdCkpKTsKLSAgICBpZiAoIWhpdF90ZXN0KSB7Cisg
ICAgRXdrX0hpdF9UZXN0KiBoaXRUZXN0ID0gc3RhdGljX2Nhc3Q8RXdrX0hpdF9UZXN0Kj4oY2Fs
bG9jKDEsIHNpemVvZihFd2tfSGl0X1Rlc3QpKSk7CisgICAgaWYgKCFoaXRUZXN0KSB7CiAgICAg
ICAgIENSSVRJQ0FMKCJDb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBoaXQgdGVzdC4iKTsK
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgaGl0X3Rlc3QtPnggPSByZXN1bHQucG9p
bnQoKS54KCk7Ci0gICAgaGl0X3Rlc3QtPnkgPSByZXN1bHQucG9pbnQoKS55KCk7CisgICAgaGl0
VGVzdC0+eCA9IHJlc3VsdC5wb2ludCgpLngoKTsKKyAgICBoaXRUZXN0LT55ID0gcmVzdWx0LnBv
aW50KCkueSgpOwogI2lmIDAKICAgICAvLyBGSVhNRQotICAgIGhpdF90ZXN0LT5ib3VuZGluZ19i
b3gueCA9IHJlc3VsdC5ib3VuZGluZ0JveCgpLngoKTsKLSAgICBoaXRfdGVzdC0+Ym91bmRpbmdf
Ym94LnkgPSByZXN1bHQuYm91bmRpbmdCb3goKS55KCk7Ci0gICAgaGl0X3Rlc3QtPmJvdW5kaW5n
X2JveC53ID0gcmVzdWx0LmJvdW5kaW5nQm94KCkud2lkdGgoKTsKLSAgICBoaXRfdGVzdC0+Ym91
bmRpbmdfYm94LmggPSByZXN1bHQuYm91bmRpbmdCb3goKS5oZWlnaHQoKTsKKyAgICBoaXRUZXN0
LT5ib3VuZGluZ19ib3gueCA9IHJlc3VsdC5ib3VuZGluZ0JveCgpLngoKTsKKyAgICBoaXRUZXN0
LT5ib3VuZGluZ19ib3gueSA9IHJlc3VsdC5ib3VuZGluZ0JveCgpLnkoKTsKKyAgICBoaXRUZXN0
LT5ib3VuZGluZ19ib3gud2lkdGggPSByZXN1bHQuYm91bmRpbmdCb3goKS53aWR0aCgpOworICAg
IGhpdFRlc3QtPmJvdW5kaW5nX2JveC5oZWlnaHQgPSByZXN1bHQuYm91bmRpbmdCb3goKS5oZWln
aHQoKTsKICNlbHNlCi0gICAgaGl0X3Rlc3QtPmJvdW5kaW5nX2JveC54ID0gMDsKLSAgICBoaXRf
dGVzdC0+Ym91bmRpbmdfYm94LnkgPSAwOwotICAgIGhpdF90ZXN0LT5ib3VuZGluZ19ib3gudyA9
IDA7Ci0gICAgaGl0X3Rlc3QtPmJvdW5kaW5nX2JveC5oID0gMDsKKyAgICBoaXRUZXN0LT5ib3Vu
ZGluZ19ib3gueCA9IDA7CisgICAgaGl0VGVzdC0+Ym91bmRpbmdfYm94LnkgPSAwOworICAgIGhp
dFRlc3QtPmJvdW5kaW5nX2JveC53ID0gMDsKKyAgICBoaXRUZXN0LT5ib3VuZGluZ19ib3guaCA9
IDA7CiAjZW5kaWYKIAotICAgIFdlYkNvcmU6OlRleHREaXJlY3Rpb24gZGlyOwotICAgIGhpdF90
ZXN0LT50aXRsZSA9IGVpbmFfc3RyaW5nc2hhcmVfYWRkKHJlc3VsdC50aXRsZShkaXIpLnV0Zjgo
KS5kYXRhKCkpOwotICAgIGhpdF90ZXN0LT5hbHRlcm5hdGVfdGV4dCA9IGVpbmFfc3RyaW5nc2hh
cmVfYWRkKHJlc3VsdC5hbHREaXNwbGF5U3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgV2Vi
Q29yZTo6VGV4dERpcmVjdGlvbiBkaXJlY3Rpb247CisgICAgaGl0VGVzdC0+dGl0bGUgPSBlaW5h
X3N0cmluZ3NoYXJlX2FkZChyZXN1bHQudGl0bGUoZGlyZWN0aW9uKS51dGY4KCkuZGF0YSgpKTsK
KyAgICBoaXRUZXN0LT5hbHRlcm5hdGVfdGV4dCA9IGVpbmFfc3RyaW5nc2hhcmVfYWRkKHJlc3Vs
dC5hbHREaXNwbGF5U3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiAgICAgaWYgKHJlc3VsdC5pbm5l
ck5vblNoYXJlZE5vZGUoKSAmJiByZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCktPmRvY3VtZW50
KCkKICAgICAgICAgJiYgcmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpLT5kb2N1bWVudCgpLT5m
cmFtZSgpKQotICAgICAgICBoaXRfdGVzdC0+ZnJhbWUgPSBraXQocmVzdWx0LmlubmVyTm9uU2hh
cmVkTm9kZSgpLT5kb2N1bWVudCgpLT5mcmFtZSgpKTsKKyAgICAgICAgaGl0VGVzdC0+ZnJhbWUg
PSBraXQocmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpLT5kb2N1bWVudCgpLT5mcmFtZSgpKTsK
IAotICAgIGhpdF90ZXN0LT5saW5rLnRleHQgPSBlaW5hX3N0cmluZ3NoYXJlX2FkZChyZXN1bHQu
dGV4dENvbnRlbnQoKS51dGY4KCkuZGF0YSgpKTsKLSAgICBoaXRfdGVzdC0+bGluay51cmwgPSBl
aW5hX3N0cmluZ3NoYXJlX2FkZChyZXN1bHQuYWJzb2x1dGVMaW5rVVJMKCkuc3RyaW5nKCkudXRm
OCgpLmRhdGEoKSk7Ci0gICAgaGl0X3Rlc3QtPmxpbmsudGl0bGUgPSBlaW5hX3N0cmluZ3NoYXJl
X2FkZChyZXN1bHQudGl0bGVEaXNwbGF5U3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgaGl0
X3Rlc3QtPmxpbmsudGFyZ2V0X2ZyYW1lID0ga2l0KHJlc3VsdC50YXJnZXRGcmFtZSgpKTsKKyAg
ICBoaXRUZXN0LT5saW5rLnRleHQgPSBlaW5hX3N0cmluZ3NoYXJlX2FkZChyZXN1bHQudGV4dENv
bnRlbnQoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBoaXRUZXN0LT5saW5rLnVybCA9IGVpbmFfc3Ry
aW5nc2hhcmVfYWRkKHJlc3VsdC5hYnNvbHV0ZUxpbmtVUkwoKS5zdHJpbmcoKS51dGY4KCkuZGF0
YSgpKTsKKyAgICBoaXRUZXN0LT5saW5rLnRpdGxlID0gZWluYV9zdHJpbmdzaGFyZV9hZGQocmVz
dWx0LnRpdGxlRGlzcGxheVN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgIGhpdFRlc3QtPmxp
bmsudGFyZ2V0X2ZyYW1lID0ga2l0KHJlc3VsdC50YXJnZXRGcmFtZSgpKTsKIAotICAgIGhpdF90
ZXN0LT5pbWFnZV91cmkgPSBlaW5hX3N0cmluZ3NoYXJlX2FkZChyZXN1bHQuYWJzb2x1dGVJbWFn
ZVVSTCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotICAgIGhpdF90ZXN0LT5tZWRpYV91cmkg
PSBlaW5hX3N0cmluZ3NoYXJlX2FkZChyZXN1bHQuYWJzb2x1dGVNZWRpYVVSTCgpLnN0cmluZygp
LnV0ZjgoKS5kYXRhKCkpOworICAgIGhpdFRlc3QtPmltYWdlX3VyaSA9IGVpbmFfc3RyaW5nc2hh
cmVfYWRkKHJlc3VsdC5hYnNvbHV0ZUltYWdlVVJMKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7
CisgICAgaGl0VGVzdC0+bWVkaWFfdXJpID0gZWluYV9zdHJpbmdzaGFyZV9hZGQocmVzdWx0LmFi
c29sdXRlTWVkaWFVUkwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKIAogICAgIGludCBjb250
ZXh0ID0gRVdLX0hJVF9URVNUX1JFU1VMVF9DT05URVhUX0RPQ1VNRU5UOwogCkBAIC03MTgsMjgg
KzcxOCwyOCBAQCBFd2tfSGl0X1Rlc3QqIGV3a19mcmFtZV9oaXRfdGVzdF9uZXcoY29uc3QgRXZh
c19PYmplY3QqIGV3a0ZyYW1lLCBpbnQgeCwgaW50IHkpCiAgICAgaWYgKHJlc3VsdC5pc0NvbnRl
bnRFZGl0YWJsZSgpKQogICAgICAgICBjb250ZXh0IHw9IEVXS19ISVRfVEVTVF9SRVNVTFRfQ09O
VEVYVF9FRElUQUJMRTsKIAotICAgIGhpdF90ZXN0LT5jb250ZXh0ID0gc3RhdGljX2Nhc3Q8RXdr
X0hpdF9UZXN0X1Jlc3VsdF9Db250ZXh0Pihjb250ZXh0KTsKKyAgICBoaXRUZXN0LT5jb250ZXh0
ID0gc3RhdGljX2Nhc3Q8RXdrX0hpdF9UZXN0X1Jlc3VsdF9Db250ZXh0Pihjb250ZXh0KTsKIAot
ICAgIHJldHVybiBoaXRfdGVzdDsKKyAgICByZXR1cm4gaGl0VGVzdDsKIH0KIAogRWluYV9Cb29s
CiBld2tfZnJhbWVfc2Nyb2xsX2FkZChFdmFzX09iamVjdCogZXdrRnJhbWUsIGludCBkZWx0YVgs
IGludCBkZWx0YVkpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUs
IHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2Qt
PmZyYW1lLCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwo
c2QtPmZyYW1lLT52aWV3KCksIEVJTkFfRkFMU0UpOwotICAgIHNkLT5mcmFtZS0+dmlldygpLT5z
Y3JvbGxCeShXZWJDb3JlOjpJbnRTaXplKGRlbHRhWCwgZGVsdGFZKSk7CisgICAgRVdLX0ZSQU1F
X1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUsIEVJTkFfRkFM
U0UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmZyYW1l
LT52aWV3KCksIEVJTkFfRkFMU0UpOworICAgIHNtYXJ0RGF0YS0+ZnJhbWUtPnZpZXcoKS0+c2Ny
b2xsQnkoV2ViQ29yZTo6SW50U2l6ZShkZWx0YVgsIGRlbHRhWSkpOwogICAgIHJldHVybiBFSU5B
X1RSVUU7CiB9CiAKIEVpbmFfQm9vbAogZXdrX2ZyYW1lX3Njcm9sbF9zZXQoRXZhc19PYmplY3Qq
IGV3a0ZyYW1lLCBpbnQgeCwgaW50IHkpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRV
Uk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTl9WQUwoc2QtPmZyYW1lLT52aWV3KCksIEVJTkFfRkFMU0UpOwotICAgIHNkLT5mcmFt
ZS0+dmlldygpLT5zZXRTY3JvbGxQb3NpdGlvbihXZWJDb3JlOjpJbnRQb2ludCh4LCB5KSk7Cisg
ICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSwgRUlOQV9G
QUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJh
bWUsIEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFy
dERhdGEtPmZyYW1lLT52aWV3KCksIEVJTkFfRkFMU0UpOworICAgIHNtYXJ0RGF0YS0+ZnJhbWUt
PnZpZXcoKS0+c2V0U2Nyb2xsUG9zaXRpb24oV2ViQ29yZTo6SW50UG9pbnQoeCwgeSkpOwogICAg
IHJldHVybiBFSU5BX1RSVUU7CiB9CiAKQEAgLTc1MCwxMCArNzUwLDEwIEBAIGV3a19mcmFtZV9z
Y3JvbGxfc2l6ZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBpbnQqIHdpZHRoLCBp
bnQqIGhlaWdodCkKICAgICAgICAgKndpZHRoID0gMDsKICAgICBpZiAoaGVpZ2h0KQogICAgICAg
ICAqaGVpZ2h0ID0gMDsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwg
c2QsIEVJTkFfRkFMU0UpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+
ZnJhbWUsIEVJTkFfRkFMU0UpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChz
ZC0+ZnJhbWUtPnZpZXcoKSwgRUlOQV9GQUxTRSk7Ci0gICAgV2ViQ29yZTo6SW50UG9pbnQgcG9p
bnQgPSBzZC0+ZnJhbWUtPnZpZXcoKS0+bWF4aW11bVNjcm9sbFBvc2l0aW9uKCk7CisgICAgRVdL
X0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7
CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUsIEVJ
TkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEt
PmZyYW1lLT52aWV3KCksIEVJTkFfRkFMU0UpOworICAgIFdlYkNvcmU6OkludFBvaW50IHBvaW50
ID0gc21hcnREYXRhLT5mcmFtZS0+dmlldygpLT5tYXhpbXVtU2Nyb2xsUG9zaXRpb24oKTsKICAg
ICBpZiAod2lkdGgpCiAgICAgICAgICp3aWR0aCA9IHBvaW50LngoKTsKICAgICBpZiAoaGVpZ2h0
KQpAQCAtNzY4LDEwICs3NjgsMTAgQEAgZXdrX2ZyYW1lX3Njcm9sbF9wb3NfZ2V0KGNvbnN0IEV2
YXNfT2JqZWN0KiBld2tGcmFtZSwgaW50KiB4LCBpbnQqIHkpCiAgICAgICAgICp4ID0gMDsKICAg
ICBpZiAoeSkKICAgICAgICAgKnkgPSAwOwotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJO
KGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk5fVkFMKHNkLT5mcmFtZS0+dmlldygpLCBFSU5BX0ZBTFNFKTsKLSAgICBXZWJDb3JlOjpJ
bnRQb2ludCBwb3MgPSBzZC0+ZnJhbWUtPnZpZXcoKS0+c2Nyb2xsUG9zaXRpb24oKTsKKyAgICBF
V0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRhLCBFSU5BX0ZBTFNF
KTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5mcmFtZSwg
RUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0
YS0+ZnJhbWUtPnZpZXcoKSwgRUlOQV9GQUxTRSk7CisgICAgV2ViQ29yZTo6SW50UG9pbnQgcG9z
ID0gc21hcnREYXRhLT5mcmFtZS0+dmlldygpLT5zY3JvbGxQb3NpdGlvbigpOwogICAgIGlmICh4
KQogICAgICAgICAqeCA9IHBvcy54KCk7CiAgICAgaWYgKHkpCkBAIC03ODksMTAgKzc4OSwxMCBA
QCBFaW5hX0Jvb2wgZXdrX2ZyYW1lX3Zpc2libGVfY29udGVudF9nZW9tZXRyeV9nZXQoY29uc3Qg
RXZhc19PYmplY3QqIGV3a0ZyYW1lLCBFaQogICAgICAgICAqd2lkdGggPSAwOwogICAgIGlmICho
ZWlnaHQpCiAgICAgICAgICpoZWlnaHQgPSAwOwotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVU
VVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk5fVkFMKHNkLT5mcmFtZS0+dmlldygpLCBFSU5BX0ZBTFNFKTsKLSAgICBXZWJDb3Jl
OjpJbnRSZWN0IHJlY3QgPSBzZC0+ZnJhbWUtPnZpZXcoKS0+dmlzaWJsZUNvbnRlbnRSZWN0KGlu
Y2x1ZGVTY3JvbGxiYXJzKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFt
ZSwgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
Tl9WQUwoc21hcnREYXRhLT5mcmFtZSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUtPnZpZXcoKSwgRUlOQV9GQUxTRSk7Cisg
ICAgV2ViQ29yZTo6SW50UmVjdCByZWN0ID0gc21hcnREYXRhLT5mcmFtZS0+dmlldygpLT52aXNp
YmxlQ29udGVudFJlY3QoaW5jbHVkZVNjcm9sbGJhcnMpOwogICAgIGlmICh4KQogICAgICAgICAq
eCA9IHJlY3QueCgpOwogICAgIGlmICh5KQpAQCAtODA2LDI2ICs4MDYsMjYgQEAgRWluYV9Cb29s
IGV3a19mcmFtZV92aXNpYmxlX2NvbnRlbnRfZ2VvbWV0cnlfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0
KiBld2tGcmFtZSwgRWkKIAogRWluYV9Cb29sIGV3a19mcmFtZV9wYWludF9mdWxsX2dldChjb25z
dCBFdmFzX09iamVjdCogZXdrRnJhbWUpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRV
Uk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTl9WQUwoc2QtPmZyYW1lLT52aWV3KCksIEVJTkFfRkFMU0UpOwotICAgIHJldHVybiBz
ZC0+ZnJhbWUtPnZpZXcoKS0+cGFpbnRzRW50aXJlQ29udGVudHMoKTsKKyAgICBFV0tfRlJBTUVf
U0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5mcmFtZSwgRUlOQV9GQUxT
RSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUt
PnZpZXcoKSwgRUlOQV9GQUxTRSk7CisgICAgcmV0dXJuIHNtYXJ0RGF0YS0+ZnJhbWUtPnZpZXco
KS0+cGFpbnRzRW50aXJlQ29udGVudHMoKTsKIH0KIAogdm9pZCBld2tfZnJhbWVfcGFpbnRfZnVs
bF9zZXQoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBFaW5hX0Jvb2wgZmxhZykKIHsKLSAgICBFV0tf
RlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QpOwotICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOKHNkLT5mcmFtZSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4o
c2QtPmZyYW1lLT52aWV3KCkpOwotICAgIHNkLT5mcmFtZS0+dmlldygpLT5zZXRQYWludHNFbnRp
cmVDb250ZW50cyhmbGFnKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFt
ZSwgc21hcnREYXRhKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEt
PmZyYW1lKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmZyYW1l
LT52aWV3KCkpOworICAgIHNtYXJ0RGF0YS0+ZnJhbWUtPnZpZXcoKS0+c2V0UGFpbnRzRW50aXJl
Q29udGVudHMoZmxhZyk7CiB9CiAKIEVpbmFfQm9vbCBld2tfZnJhbWVfZmVlZF9mb2N1c19pbihF
dmFzX09iamVjdCogZXdrRnJhbWUpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
Tl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKLSAgICBXZWJDb3JlOjpGb2N1c0NvbnRyb2xs
ZXIqIGMgPSBzZC0+ZnJhbWUtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCk7Ci0gICAgYy0+c2V0
Rm9jdXNlZEZyYW1lKHNkLT5mcmFtZSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrRnJhbWUsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUsIEVJTkFfRkFMU0UpOworICAgIFdlYkNvcmU6
OkZvY3VzQ29udHJvbGxlciogYyA9IHNtYXJ0RGF0YS0+ZnJhbWUtPnBhZ2UoKS0+Zm9jdXNDb250
cm9sbGVyKCk7CisgICAgYy0+c2V0Rm9jdXNlZEZyYW1lKHNtYXJ0RGF0YS0+ZnJhbWUpOwogICAg
IHJldHVybiBFSU5BX1RSVUU7CiB9CiAKQEAgLTgzOCw4NyArODM4LDg3IEBAIEVpbmFfQm9vbCBl
d2tfZnJhbWVfZmVlZF9mb2N1c19vdXQoRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogCiBFaW5hX0Jv
b2wgZXdrX2ZyYW1lX2ZlZWRfbW91c2Vfd2hlZWwoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBjb25z
dCBFdmFzX0V2ZW50X01vdXNlX1doZWVsKiB3aGVlbEV2ZW50KQogewotICAgIEVXS19GUkFNRV9T
RF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZF
VFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX0ZS
QU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7Cisg
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUsIEVJTkFf
RkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh3aGVlbEV2ZW50LCBF
SU5BX0ZBTFNFKTsKIAotICAgIFdlYkNvcmU6OkZyYW1lVmlldyogdmlldyA9IHNkLT5mcmFtZS0+
dmlldygpOworICAgIFdlYkNvcmU6OkZyYW1lVmlldyogdmlldyA9IHNtYXJ0RGF0YS0+ZnJhbWUt
PnZpZXcoKTsKICAgICBEQkcoImV3a0ZyYW1lPSVwLCB2aWV3PSVwLCBkaXJlY3Rpb249JWQsIHo9
JWQsIHBvcz0lZCwlZCIsCiAgICAgICAgIGV3a0ZyYW1lLCB2aWV3LCB3aGVlbEV2ZW50LT5kaXJl
Y3Rpb24sIHdoZWVsRXZlbnQtPnosIHdoZWVsRXZlbnQtPmNhbnZhcy54LCB3aGVlbEV2ZW50LT5j
YW52YXMueSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHZpZXcsIEVJTkFf
RkFMU0UpOwogCiAgICAgV2ViQ29yZTo6UGxhdGZvcm1XaGVlbEV2ZW50IGV2ZW50KHdoZWVsRXZl
bnQpOwotICAgIHJldHVybiBzZC0+ZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5oYW5kbGVXaGVlbEV2
ZW50KGV2ZW50KTsKKyAgICByZXR1cm4gc21hcnREYXRhLT5mcmFtZS0+ZXZlbnRIYW5kbGVyKCkt
PmhhbmRsZVdoZWVsRXZlbnQoZXZlbnQpOwogfQogCiBFaW5hX0Jvb2wgZXdrX2ZyYW1lX2ZlZWRf
bW91c2VfZG93bihFdmFzX09iamVjdCogZXdrRnJhbWUsIGNvbnN0IEV2YXNfRXZlbnRfTW91c2Vf
RG93biogZG93bkV2ZW50KQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0Zy
YW1lLCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFM
KHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrRnJhbWUsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOX1ZBTChkb3duRXZlbnQsIEVJTkFfRkFMU0UpOwogCi0gICAgV2Vi
Q29yZTo6RnJhbWVWaWV3KiB2aWV3ID0gc2QtPmZyYW1lLT52aWV3KCk7CisgICAgV2ViQ29yZTo6
RnJhbWVWaWV3KiB2aWV3ID0gc21hcnREYXRhLT5mcmFtZS0+dmlldygpOwogICAgIERCRygiZXdr
RnJhbWU9JXAsIHZpZXc9JXAsIGJ1dHRvbj0lZCwgcG9zPSVkLCVkIiwKICAgICAgICAgZXdrRnJh
bWUsIHZpZXcsIGRvd25FdmVudC0+YnV0dG9uLCBkb3duRXZlbnQtPmNhbnZhcy54LCBkb3duRXZl
bnQtPmNhbnZhcy55KTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodmlldywg
RUlOQV9GQUxTRSk7CiAKICAgICBFdmFzX0Nvb3JkIHgsIHk7Ci0gICAgZXZhc19vYmplY3RfZ2Vv
bWV0cnlfZ2V0KHNkLT52aWV3LCAmeCwgJnksIDAsIDApOworICAgIGV2YXNfb2JqZWN0X2dlb21l
dHJ5X2dldChzbWFydERhdGEtPnZpZXcsICZ4LCAmeSwgMCwgMCk7CiAKICAgICBXZWJDb3JlOjpQ
bGF0Zm9ybU1vdXNlRXZlbnQgZXZlbnQoZG93bkV2ZW50LCBXZWJDb3JlOjpJbnRQb2ludCh4LCB5
KSk7Ci0gICAgcmV0dXJuIHNkLT5mcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmhhbmRsZU1vdXNlUHJl
c3NFdmVudChldmVudCk7CisgICAgcmV0dXJuIHNtYXJ0RGF0YS0+ZnJhbWUtPmV2ZW50SGFuZGxl
cigpLT5oYW5kbGVNb3VzZVByZXNzRXZlbnQoZXZlbnQpOwogfQogCiBFaW5hX0Jvb2wgZXdrX2Zy
YW1lX2ZlZWRfbW91c2VfdXAoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBjb25zdCBFdmFzX0V2ZW50
X01vdXNlX1VwKiB1cEV2ZW50KQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3
a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5f
VkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRV
Uk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh1cEV2ZW50LCBFSU5BX0ZBTFNFKTsKIAotICAgIFdl
YkNvcmU6OkZyYW1lVmlldyogdmlldyA9IHNkLT5mcmFtZS0+dmlldygpOworICAgIFdlYkNvcmU6
OkZyYW1lVmlldyogdmlldyA9IHNtYXJ0RGF0YS0+ZnJhbWUtPnZpZXcoKTsKICAgICBEQkcoImV3
a0ZyYW1lPSVwLCB2aWV3PSVwLCBidXR0b249JWQsIHBvcz0lZCwlZCIsCiAgICAgICAgIGV3a0Zy
YW1lLCB2aWV3LCB1cEV2ZW50LT5idXR0b24sIHVwRXZlbnQtPmNhbnZhcy54LCB1cEV2ZW50LT5j
YW52YXMueSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHZpZXcsIEVJTkFf
RkFMU0UpOwogCiAgICAgRXZhc19Db29yZCB4LCB5OwotICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5
X2dldChzZC0+dmlldywgJngsICZ5LCAwLCAwKTsKKyAgICBldmFzX29iamVjdF9nZW9tZXRyeV9n
ZXQoc21hcnREYXRhLT52aWV3LCAmeCwgJnksIDAsIDApOwogCiAgICAgV2ViQ29yZTo6UGxhdGZv
cm1Nb3VzZUV2ZW50IGV2ZW50KHVwRXZlbnQsIFdlYkNvcmU6OkludFBvaW50KHgsIHkpKTsKLSAg
ICByZXR1cm4gc2QtPmZyYW1lLT5ldmVudEhhbmRsZXIoKS0+aGFuZGxlTW91c2VSZWxlYXNlRXZl
bnQoZXZlbnQpOworICAgIHJldHVybiBzbWFydERhdGEtPmZyYW1lLT5ldmVudEhhbmRsZXIoKS0+
aGFuZGxlTW91c2VSZWxlYXNlRXZlbnQoZXZlbnQpOwogfQogCiBFaW5hX0Jvb2wgZXdrX2ZyYW1l
X2ZlZWRfbW91c2VfbW92ZShFdmFzX09iamVjdCogZXdrRnJhbWUsIGNvbnN0IEV2YXNfRXZlbnRf
TW91c2VfTW92ZSogbW92ZUV2ZW50KQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJO
KGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9S
RVRVUk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUsIEVJTkFfRkFMU0UpOwogICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChtb3ZlRXZlbnQsIEVJTkFfRkFMU0UpOwogCi0g
ICAgV2ViQ29yZTo6RnJhbWVWaWV3KiB2aWV3ID0gc2QtPmZyYW1lLT52aWV3KCk7CisgICAgV2Vi
Q29yZTo6RnJhbWVWaWV3KiB2aWV3ID0gc21hcnREYXRhLT5mcmFtZS0+dmlldygpOwogICAgIERC
RygiZXdrRnJhbWU9JXAsIHZpZXc9JXAsIHBvczogb2xkPSVkLCVkLCBuZXc9JWQsJWQsIGJ1dHRv
bnM9JWQiLAogICAgICAgICBld2tGcmFtZSwgdmlldywgbW92ZUV2ZW50LT5jdXIuY2FudmFzLngs
IG1vdmVFdmVudC0+Y3VyLmNhbnZhcy55LAogICAgICAgICBtb3ZlRXZlbnQtPnByZXYuY2FudmFz
LngsIG1vdmVFdmVudC0+cHJldi5jYW52YXMueSwgbW92ZUV2ZW50LT5idXR0b25zKTsKICAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodmlldywgRUlOQV9GQUxTRSk7CiAKICAgICBF
dmFzX0Nvb3JkIHgsIHk7Ci0gICAgZXZhc19vYmplY3RfZ2VvbWV0cnlfZ2V0KHNkLT52aWV3LCAm
eCwgJnksIDAsIDApOworICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldChzbWFydERhdGEtPnZp
ZXcsICZ4LCAmeSwgMCwgMCk7CiAKICAgICBXZWJDb3JlOjpQbGF0Zm9ybU1vdXNlRXZlbnQgZXZl
bnQobW92ZUV2ZW50LCBXZWJDb3JlOjpJbnRQb2ludCh4LCB5KSk7Ci0gICAgcmV0dXJuIHNkLT5m
cmFtZS0+ZXZlbnRIYW5kbGVyKCktPm1vdXNlTW92ZWQoZXZlbnQpOworICAgIHJldHVybiBzbWFy
dERhdGEtPmZyYW1lLT5ldmVudEhhbmRsZXIoKS0+bW91c2VNb3ZlZChldmVudCk7CiB9CiAKIEVp
bmFfQm9vbCBld2tfZnJhbWVfZmVlZF90b3VjaF9ldmVudChFdmFzX09iamVjdCogZXdrRnJhbWUs
IEV3a19Ub3VjaF9FdmVudF9UeXBlIGFjdGlvbiwgRWluYV9MaXN0KiBwb2ludHMsIGludCBtZXRh
U3RhdGUpCiB7Ci0gICAgRWluYV9Cb29sIHJldCA9IEVJTkFfRkFMU0U7CisgICAgRWluYV9Cb29s
IHJlc3VsdCA9IEVJTkFfRkFMU0U7CiAKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChwb2ludHMsIEVJTkFfRkFMU0UpOwotICAgIEVX
S19GUkFNRV9TRF9HRVQoZXdrRnJhbWUsIHNkKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUKGV3a0Zy
YW1lLCBzbWFydERhdGEpOwogCi0gICAgaWYgKCFzZCB8fCAhc2QtPmZyYW1lIHx8ICFld2tfdmll
d19uZWVkX3RvdWNoX2V2ZW50c19nZXQoc2QtPnZpZXcpKQorICAgIGlmICghc21hcnREYXRhIHx8
ICFzbWFydERhdGEtPmZyYW1lIHx8ICFld2tfdmlld19uZWVkX3RvdWNoX2V2ZW50c19nZXQoc21h
cnREYXRhLT52aWV3KSkKICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CiAKICAgICBFdmFzX0Nv
b3JkIHgsIHk7Ci0gICAgZXZhc19vYmplY3RfZ2VvbWV0cnlfZ2V0KHNkLT52aWV3LCAmeCwgJnks
IDAsIDApOworICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldChzbWFydERhdGEtPnZpZXcsICZ4
LCAmeSwgMCwgMCk7CiAKICAgICBXZWJDb3JlOjpUb3VjaEV2ZW50VHlwZSB0eXBlID0gV2ViQ29y
ZTo6VG91Y2hTdGFydDsKICAgICBzd2l0Y2ggKGFjdGlvbikgewpAQCAtOTM4LDEwICs5MzgsMTAg
QEAgRWluYV9Cb29sIGV3a19mcmFtZV9mZWVkX3RvdWNoX2V2ZW50KEV2YXNfT2JqZWN0KiBld2tG
cmFtZSwgRXdrX1RvdWNoX0V2ZW50X1R5cGUKICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CiAg
ICAgfQogCi0gICAgV2ViQ29yZTo6UGxhdGZvcm1Ub3VjaEV2ZW50IHRlKHBvaW50cywgV2ViQ29y
ZTo6SW50UG9pbnQoeCwgeSksIHR5cGUsIG1ldGFTdGF0ZSk7Ci0gICAgcmV0ID0gc2QtPmZyYW1l
LT5ldmVudEhhbmRsZXIoKS0+aGFuZGxlVG91Y2hFdmVudCh0ZSk7CisgICAgV2ViQ29yZTo6UGxh
dGZvcm1Ub3VjaEV2ZW50IHRvdWNoRXZlbnQocG9pbnRzLCBXZWJDb3JlOjpJbnRQb2ludCh4LCB5
KSwgdHlwZSwgbWV0YVN0YXRlKTsKKyAgICByZXN1bHQgPSBzbWFydERhdGEtPmZyYW1lLT5ldmVu
dEhhbmRsZXIoKS0+aGFuZGxlVG91Y2hFdmVudCh0b3VjaEV2ZW50KTsKICNlbmRpZgotICAgIHJl
dHVybiByZXQ7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogc3RhdGljIGlubGluZSBFaW5hX0Jv
b2wgX2V3a19mcmFtZV9oYW5kbGVfa2V5X3Njcm9sbGluZyhXZWJDb3JlOjpGcmFtZSogZnJhbWUs
IGNvbnN0IFdlYkNvcmU6OlBsYXRmb3JtS2V5Ym9hcmRFdmVudCYga2V5RXZlbnQpCkBAIC0xMDEw
LDM5ICsxMDEwLDM5IEBAIHN0YXRpYyBpbmxpbmUgRWluYV9Cb29sIF9ld2tfZnJhbWVfaGFuZGxl
X2tleV9zY3JvbGxpbmcoV2ViQ29yZTo6RnJhbWUqIGZyYW1lLCBjCiAKIEVpbmFfQm9vbCBld2tf
ZnJhbWVfZmVlZF9rZXlfZG93bihFdmFzX09iamVjdCogZXdrRnJhbWUsIGNvbnN0IEV2YXNfRXZl
bnRfS2V5X0Rvd24qIGRvd25FdmVudCkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVS
Tihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1Jf
UkVUVVJOKGV3a0ZyYW1lLCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKICAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZG93bkV2ZW50LCBFSU5BX0ZBTFNFKTsKIAog
ICAgIERCRygiZXdrRnJhbWU9JXAga2V5bmFtZT0lcyAoa2V5PSVzLCBzdHJpbmc9JXMpIiwKICAg
ICAgICAgZXdrRnJhbWUsIGRvd25FdmVudC0+a2V5bmFtZSwgZG93bkV2ZW50LT5rZXkgPyBkb3du
RXZlbnQtPmtleSA6ICIiLCBkb3duRXZlbnQtPnN0cmluZyA/IGRvd25FdmVudC0+c3RyaW5nIDog
IiIpOwogCiAgICAgV2ViQ29yZTo6UGxhdGZvcm1LZXlib2FyZEV2ZW50IGV2ZW50KGRvd25FdmVu
dCk7Ci0gICAgaWYgKHNkLT5mcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmtleUV2ZW50KGV2ZW50KSkK
KyAgICBpZiAoc21hcnREYXRhLT5mcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmtleUV2ZW50KGV2ZW50
KSkKICAgICAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIAotICAgIHJldHVybiBfZXdrX2ZyYW1lX2hh
bmRsZV9rZXlfc2Nyb2xsaW5nKHNkLT5mcmFtZSwgZXZlbnQpOworICAgIHJldHVybiBfZXdrX2Zy
YW1lX2hhbmRsZV9rZXlfc2Nyb2xsaW5nKHNtYXJ0RGF0YS0+ZnJhbWUsIGV2ZW50KTsKIH0KIAog
RWluYV9Cb29sIGV3a19mcmFtZV9mZWVkX2tleV91cChFdmFzX09iamVjdCogZXdrRnJhbWUsIGNv
bnN0IEV2YXNfRXZlbnRfS2V5X1VwKiB1cEV2ZW50KQogewotICAgIEVXS19GUkFNRV9TRF9HRVRf
T1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX0ZSQU1FX1NE
X0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUsIEVJTkFfRkFMU0Up
OwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh1cEV2ZW50LCBFSU5BX0ZBTFNF
KTsKIAogICAgIERCRygiZXdrRnJhbWU9JXAga2V5bmFtZT0lcyAoa2V5PSVzLCBzdHJpbmc9JXMp
IiwKICAgICAgICAgZXdrRnJhbWUsIHVwRXZlbnQtPmtleW5hbWUsIHVwRXZlbnQtPmtleSA/IHVw
RXZlbnQtPmtleSA6ICIiLCB1cEV2ZW50LT5zdHJpbmcgPyB1cEV2ZW50LT5zdHJpbmcgOiAiIik7
CiAKICAgICBXZWJDb3JlOjpQbGF0Zm9ybUtleWJvYXJkRXZlbnQgZXZlbnQodXBFdmVudCk7Ci0g
ICAgcmV0dXJuIHNkLT5mcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmtleUV2ZW50KGV2ZW50KTsKKyAg
ICByZXR1cm4gc21hcnREYXRhLT5mcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmtleUV2ZW50KGV2ZW50
KTsKIH0KIAogRXdrX1RleHRfU2VsZWN0aW9uX1R5cGUgZXdrX2ZyYW1lX3RleHRfc2VsZWN0aW9u
X3R5cGVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsKLSAgICBFV0tfRlJBTUVf
U0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVXS19URVhUX1NFTEVDVElPTl9OT05FKTsK
LSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFV0tfVEVYVF9T
RUxFQ1RJT05fTk9ORSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUs
IHNtYXJ0RGF0YSwgRVdLX1RFWFRfU0VMRUNUSU9OX05PTkUpOworICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmZyYW1lLCBFV0tfVEVYVF9TRUxFQ1RJT05fTk9O
RSk7CiAKLSAgICBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbiogY29udHJvbGxlciA9IHNkLT5mcmFt
ZS0+c2VsZWN0aW9uKCk7CisgICAgV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb24qIGNvbnRyb2xsZXIg
PSBzbWFydERhdGEtPmZyYW1lLT5zZWxlY3Rpb24oKTsKICAgICBpZiAoIWNvbnRyb2xsZXIpCiAg
ICAgICAgIHJldHVybiBFV0tfVEVYVF9TRUxFQ1RJT05fTk9ORTsKIApAQCAtMTA4NSwxOCArMTA4
NSwxOCBAQCBFdmFzX09iamVjdCogZXdrX2ZyYW1lX2FkZChFdmFzKiBjYW52YXMpCiAgKi8KIEVp
bmFfQm9vbCBld2tfZnJhbWVfaW5pdChFdmFzX09iamVjdCogZXdrRnJhbWUsIEV2YXNfT2JqZWN0
KiB2aWV3LCBXZWJDb3JlOjpGcmFtZSogZnJhbWUpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9P
Ul9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBpZiAoIXNkLT5mcmFtZSkg
ewotICAgICAgICBXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEVmbCogZmxjID0gX2V3a19mcmFt
ZV9sb2FkZXJfZWZsX2dldChmcmFtZSk7Ci0gICAgICAgIGZsYy0+c2V0V2ViRnJhbWUoZXdrRnJh
bWUpOwotICAgICAgICBzZC0+ZnJhbWUgPSBmcmFtZTsKLSAgICAgICAgc2QtPnZpZXcgPSB2aWV3
OworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzbWFydERhdGEsIEVJ
TkFfRkFMU0UpOworICAgIGlmICghc21hcnREYXRhLT5mcmFtZSkgeworICAgICAgICBXZWJDb3Jl
OjpGcmFtZUxvYWRlckNsaWVudEVmbCogZnJhbWVMb2FkZXJDbGllbnQgPSBfZXdrX2ZyYW1lX2xv
YWRlcl9lZmxfZ2V0KGZyYW1lKTsKKyAgICAgICAgZnJhbWVMb2FkZXJDbGllbnQtPnNldFdlYkZy
YW1lKGV3a0ZyYW1lKTsKKyAgICAgICAgc21hcnREYXRhLT5mcmFtZSA9IGZyYW1lOworICAgICAg
ICBzbWFydERhdGEtPnZpZXcgPSB2aWV3OwogICAgICAgICBmcmFtZS0+aW5pdCgpOwogICAgICAg
ICByZXR1cm4gRUlOQV9UUlVFOwogICAgIH0KIAogICAgIEVSUigiZnJhbWUgJXAgYWxyZWFkeSBz
ZXQgZm9yICVwLCBpZ25vcmVkIG5ldyAlcCIsCi0gICAgICAgIHNkLT5mcmFtZSwgZXdrRnJhbWUs
IGZyYW1lKTsKKyAgICAgICAgc21hcnREYXRhLT5mcmFtZSwgZXdrRnJhbWUsIGZyYW1lKTsKICAg
ICByZXR1cm4gRUlOQV9GQUxTRTsKIH0KIApAQCAtMTEwNyw0NCArMTEwNyw0NCBAQCBFaW5hX0Jv
b2wgZXdrX2ZyYW1lX2luaXQoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBFdmFzX09iamVjdCogdmll
dywgV2ViQ29yZTo6RnJhbQogICovCiBFaW5hX0Jvb2wgZXdrX2ZyYW1lX2NoaWxkX2FkZChFdmFz
X09iamVjdCogZXdrRnJhbWUsIFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpGcmFtZT4gY2hpbGQs
IGNvbnN0IFdURjo6U3RyaW5nJiBuYW1lLCBjb25zdCBXZWJDb3JlOjpLVVJMJiB1cmwsIGNvbnN0
IFdURjo6U3RyaW5nJiByZWZlcnJlcikKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVS
Tihld2tGcmFtZSwgc2QsIDApOwotICAgIGNoYXIgYnVmWzI1Nl07CisgICAgRVdLX0ZSQU1FX1NE
X0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSwgMCk7CisgICAgY2hhciBidWZmZXJb
MjU2XTsKICAgICBFdmFzX09iamVjdCogZnJhbWU7Ci0gICAgV2ViQ29yZTo6RnJhbWUqIGNmOwor
ICAgIFdlYkNvcmU6OkZyYW1lKiBjb3JlRnJhbWU7CiAKLSAgICBmcmFtZSA9IGV3a19mcmFtZV9h
ZGQoc2QtPmJhc2UuZXZhcyk7CisgICAgZnJhbWUgPSBld2tfZnJhbWVfYWRkKHNtYXJ0RGF0YS0+
YmFzZS5ldmFzKTsKICAgICBpZiAoIWZyYW1lKSB7CiAgICAgICAgIEVSUigiQ291bGQgbm90IGNy
ZWF0ZSBld2tfZnJhbWUgb2JqZWN0LiIpOwogICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKICAg
ICB9CiAKLSAgICBjZiA9IGNoaWxkLmdldCgpOwotICAgIGlmIChjZi0+dHJlZSgpKQotICAgICAg
ICBjZi0+dHJlZSgpLT5zZXROYW1lKG5hbWUpOworICAgIGNvcmVGcmFtZSA9IGNoaWxkLmdldCgp
OworICAgIGlmIChjb3JlRnJhbWUtPnRyZWUoKSkKKyAgICAgICAgY29yZUZyYW1lLT50cmVlKCkt
PnNldE5hbWUobmFtZSk7CiAgICAgZWxzZQogICAgICAgICBFUlIoIm5vIHRyZWUgZm9yIGNoaWxk
IG9iamVjdCIpOwotICAgIHNkLT5mcmFtZS0+dHJlZSgpLT5hcHBlbmRDaGlsZChjaGlsZCk7Cisg
ICAgc21hcnREYXRhLT5mcmFtZS0+dHJlZSgpLT5hcHBlbmRDaGlsZChjaGlsZCk7CiAKLSAgICBp
ZiAoIWV3a19mcmFtZV9pbml0KGZyYW1lLCBzZC0+dmlldywgY2YpKSB7CisgICAgaWYgKCFld2tf
ZnJhbWVfaW5pdChmcmFtZSwgc21hcnREYXRhLT52aWV3LCBjb3JlRnJhbWUpKSB7CiAgICAgICAg
IGV2YXNfb2JqZWN0X2RlbChmcmFtZSk7CiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwogICAg
IH0KLSAgICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiRVdLX0ZyYW1lOmNoaWxkLyVzIiwg
bmFtZS51dGY4KCkuZGF0YSgpKTsKLSAgICBldmFzX29iamVjdF9uYW1lX3NldChmcmFtZSwgYnVm
KTsKKyAgICBzbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpLCAiRVdLX0ZyYW1lOmNoaWxk
LyVzIiwgbmFtZS51dGY4KCkuZGF0YSgpKTsKKyAgICBldmFzX29iamVjdF9uYW1lX3NldChmcmFt
ZSwgYnVmZmVyKTsKICAgICBldmFzX29iamVjdF9zbWFydF9tZW1iZXJfYWRkKGZyYW1lLCBld2tG
cmFtZSk7CiAgICAgZXZhc19vYmplY3Rfc2hvdyhmcmFtZSk7CiAKICAgICAvLyBUaGUgY3JlYXRp
b24gb2YgdGhlIGZyYW1lIG1heSBoYXZlIHJ1biBhcmJpdHJhcnkgSmF2YVNjcmlwdCB0aGF0IHJl
bW92ZWQgaXQgZnJvbSB0aGUgcGFnZSBhbHJlYWR5LgotICAgIGlmICghY2YtPnBhZ2UoKSkgewor
ICAgIGlmICghY29yZUZyYW1lLT5wYWdlKCkpIHsKICAgICAgICAgZXZhc19vYmplY3RfZGVsKGZy
YW1lKTsKICAgICAgICAgcmV0dXJuIEVJTkFfVFJVRTsKICAgICB9CiAKLSAgICBzZC0+ZnJhbWUt
PmxvYWRlcigpLT5sb2FkVVJMSW50b0NoaWxkRnJhbWUodXJsLCByZWZlcnJlciwgY2YpOworICAg
IHNtYXJ0RGF0YS0+ZnJhbWUtPmxvYWRlcigpLT5sb2FkVVJMSW50b0NoaWxkRnJhbWUodXJsLCBy
ZWZlcnJlciwgY29yZUZyYW1lKTsKIAogICAgIC8vIFRoZSBmcmFtZSdzIG9ubG9hZCBoYW5kbGVy
IG1heSBoYXZlIHJlbW92ZWQgaXQgZnJvbSB0aGUgZG9jdW1lbnQuCiAgICAgLy8gU2VlIGZhc3Qv
ZG9tL251bGwtcGFnZS1zaG93LW1vZGFsLWRpYWxvZy1jcmFzaC5odG1sIGZvciBhbiBleGFtcGxl
LgotICAgIGlmICghY2YtPnRyZWUoKS0+cGFyZW50KCkpIHsKKyAgICBpZiAoIWNvcmVGcmFtZS0+
dHJlZSgpLT5wYXJlbnQoKSkgewogICAgICAgICBldmFzX29iamVjdF9kZWwoZnJhbWUpOwogICAg
ICAgICByZXR1cm4gRUlOQV9UUlVFOwogICAgIH0KQEAgLTExNTcsMTcgKzExNTcsMTcgQEAgRWlu
YV9Cb29sIGV3a19mcmFtZV9jaGlsZF9hZGQoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBXVEY6OlBh
c3NSZWZQdHI8V2ViQ29yZTo6RnIKICAqIEBpbnRlcm5hbAogICogQ2hhbmdlIHRoZSBld2sgdmll
dyB0aGlzIGZyYW1lIGlzIGFzc29jaWF0ZWQgd2l0aC4KICAqCi0gKiBAcGFyYW0gbyBUaGUgZXdr
IGZyYW1lIHRvIGFjdCB1cG9uLgorICogQHBhcmFtIGV3a0ZyYW1lIFRoZSBld2sgZnJhbWUgdG8g
YWN0IHVwb24uCiAgKiBAcGFyYW0gbmV3UGFyZW50IFRoZSBuZXcgdmlldyB0aGF0IHdpbGwgYmUg
c2V0IGFzIHRoZSBwYXJlbnQgb2YgdGhlIGZyYW1lLgogICovCiB2b2lkIGV3a19mcmFtZV92aWV3
X3NldChFdmFzX09iamVjdCogZXdrRnJhbWUsIEV2YXNfT2JqZWN0KiBuZXdQYXJlbnQpCiB7Ci0g
ICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkKTsKKyAgICBFV0tfRlJB
TUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRhKTsKIAogICAgIGV2YXNfb2Jq
ZWN0X3NtYXJ0X21lbWJlcl9kZWwoZXdrRnJhbWUpOwogICAgIGV2YXNfb2JqZWN0X3NtYXJ0X21l
bWJlcl9hZGQoZXdrRnJhbWUsIG5ld1BhcmVudCk7CiAKLSAgICBzZC0+dmlldyA9IG5ld1BhcmVu
dDsKKyAgICBzbWFydERhdGEtPnZpZXcgPSBuZXdQYXJlbnQ7CiB9CiAKIC8qKgpAQCAtMTE3Nyw4
ICsxMTc3LDggQEAgdm9pZCBld2tfZnJhbWVfdmlld19zZXQoRXZhc19PYmplY3QqIGV3a0ZyYW1l
LCBFdmFzX09iamVjdCogbmV3UGFyZW50KQogdm9pZCBld2tfZnJhbWVfY29yZV9nb25lKEV2YXNf
T2JqZWN0KiBld2tGcmFtZSkKIHsKICAgICBEQkcoImV3a0ZyYW1lPSVwIiwgZXdrRnJhbWUpOwot
ICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCk7Ci0gICAgc2QtPmZy
YW1lID0gMDsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21hcnRE
YXRhKTsKKyAgICBzbWFydERhdGEtPmZyYW1lID0gMDsKIH0KIAogLyoqCkBAIC0xMTkwLDggKzEx
OTAsOCBAQCB2b2lkIGV3a19mcmFtZV9jb3JlX2dvbmUoRXZhc19PYmplY3QqIGV3a0ZyYW1lKQog
ICovCiBXZWJDb3JlOjpGcmFtZSogZXdrX2ZyYW1lX2NvcmVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0
KiBld2tGcmFtZSkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwg
c2QsIDApOwotICAgIHJldHVybiBzZC0+ZnJhbWU7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9S
RVRVUk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSwgMCk7CisgICAgcmV0dXJuIHNtYXJ0RGF0YS0+ZnJh
bWU7CiB9CiAKIApAQCAtMTIwMCw3ICsxMjAwLDcgQEAgV2ViQ29yZTo6RnJhbWUqIGV3a19mcmFt
ZV9jb3JlX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrRnJhbWUpCiAgKiBSZXBvcnRzIGEgcmVz
b3VyY2Ugd2lsbCBiZSByZXF1ZXN0ZWQuIFVzZXIgbWF5IG92ZXJyaWRlIGJlaGF2aW9yIG9mIHdl
YmtpdCBieQogICogY2hhbmdpbmcgdmFsdWVzIGluIEBwYXJhbSByZXF1ZXN0LgogICoKLSAqIEBw
YXJhbSBvIEZyYW1lLgorICogQHBhcmFtIGV3a0ZyYW1lIEZyYW1lLgogICogQHBhcmFtIHJlcXVl
c3QgUmVxdWVzdCBkZXRhaWxzIHRoYXQgdXNlciBtYXkgb3ZlcnJpZGUuIFdoZW5ldmVyIHZhbHVl
cyBvbgogICogdGhpcyBzdHJ1Y3QgY2hhbmdlcywgaXQgbXVzdCBiZSBwcm9wZXJseSBtYWxsb2Mn
ZCBhcyBpdCB3aWxsIGJlIGZyZWVkCiAgKiBhZnRlcndhcmRzLgpAQCAtMTIxNiw3ICsxMjE2LDcg
QEAgdm9pZCBld2tfZnJhbWVfcmVxdWVzdF93aWxsX3NlbmQoRXZhc19PYmplY3QqIGV3a0ZyYW1l
LCBFd2tfRnJhbWVfUmVzb3VyY2VfUmVxdWUKICAqIEBpbnRlcm5hbAogICogUmVwb3J0cyB0aGF0
IHRoZXJlJ3MgYSBuZXcgcmVzb3VyY2UuCiAgKgotICogQHBhcmFtIG8gRnJhbWUuCisgKiBAcGFy
YW0gZXdrRnJhbWUgRnJhbWUuCiAgKiBAcGFyYW0gcmVxdWVzdCBOZXcgcmVxdWVzdCBkZXRhaWxz
LiBObyBjaGFuZ2VzIGFyZSBhbGxvd2VkIHRvIGZpZWxkcy4KICAqCiAgKiBFbWl0cyBzaWduYWw6
ICJyZXNvdXJjZSxyZXF1ZXN0LG5ldyIKQEAgLTEyMzAsNyArMTIzMCw3IEBAIHZvaWQgZXdrX2Zy
YW1lX3JlcXVlc3RfYXNzaWduX2lkZW50aWZpZXIoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBjb25z
dCBFd2tfRnJhbWVfCiAgKiBAaW50ZXJuYWwKICAqIFJlcG9ydHMgdGhhdCBmaXJzdCBuYXZpZ2F0
aW9uIG9jY3VycmVkCiAgKgotICogQHBhcmFtIG8gRnJhbWUuCisgKiBAcGFyYW0gZXdrRnJhbWUg
RnJhbWUuCiAgKgogICogRW1pdHMgc2lnbmFsOiAibmF2aWdhdGlvbixmaXJzdCIKICAqLwpAQCAt
MTI0Myw3ICsxMjQzLDcgQEAgdm9pZCBld2tfZnJhbWVfZGlkX3BlcmZvcm1fZmlyc3RfbmF2aWdh
dGlvbihFdmFzX09iamVjdCogZXdrRnJhbWUpCiAgKiBAaW50ZXJuYWwKICAqIFJlcG9ydHMgZnJh
bWUgd2lsbCBiZSBzYXZlZCB0byBjdXJyZW50IHN0YXRlCiAgKgotICogQHBhcmFtIG8gRnJhbWUu
CisgKiBAcGFyYW0gZXdrRnJhbWUgRnJhbWUuCiAgKiBAcGFyYW0gaXRlbSBIaXN0b3J5IGl0ZW0g
dG8gc2F2ZSBkZXRhaWxzIHRvLgogICoKICAqIEVtaXRzIHNpZ25hbDogInN0YXRlLHNhdmUiCkBA
IC0xMjYxLDIyICsxMjYxLDIyIEBAIHZvaWQgZXdrX2ZyYW1lX3ZpZXdfc3RhdGVfc2F2ZShFdmFz
X09iamVjdCogZXdrRnJhbWUsIFdlYkNvcmU6Okhpc3RvcnlJdGVtKiBpdGVtCiAgKi8KIHZvaWQg
ZXdrX2ZyYW1lX2xvYWRfc3RhcnRlZChFdmFzX09iamVjdCogZXdrRnJhbWUpCiB7Ci0gICAgRXZh
c19PYmplY3QqIG1haW5fZnJhbWU7CisgICAgRXZhc19PYmplY3QqIG1haW5GcmFtZTsKICAgICBE
QkcoImV3a0ZyYW1lPSVwIiwgZXdrRnJhbWUpOwogICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxi
YWNrX2NhbGwoZXdrRnJhbWUsICJsb2FkLHN0YXJ0ZWQiLCAwKTsKLSAgICBFV0tfRlJBTUVfU0Rf
R0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QpOwotICAgIGV3a192aWV3X2xvYWRfc3RhcnRlZChz
ZC0+dmlldyk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNtYXJ0
RGF0YSk7CisgICAgZXdrX3ZpZXdfbG9hZF9zdGFydGVkKHNtYXJ0RGF0YS0+dmlldyk7CiAKLSAg
ICBtYWluX2ZyYW1lID0gZXdrX3ZpZXdfZnJhbWVfbWFpbl9nZXQoc2QtPnZpZXcpOwotICAgIGlm
IChtYWluX2ZyYW1lID09IGV3a0ZyYW1lKQotICAgICAgICBld2tfdmlld19mcmFtZV9tYWluX2xv
YWRfc3RhcnRlZChzZC0+dmlldyk7CisgICAgbWFpbkZyYW1lID0gZXdrX3ZpZXdfZnJhbWVfbWFp
bl9nZXQoc21hcnREYXRhLT52aWV3KTsKKyAgICBpZiAobWFpbkZyYW1lID09IGV3a0ZyYW1lKQor
ICAgICAgICBld2tfdmlld19mcmFtZV9tYWluX2xvYWRfc3RhcnRlZChzbWFydERhdGEtPnZpZXcp
OwogfQogCiAvKioKICAqIEBpbnRlcm5hbAogICogUmVwb3J0cyB0aGUgZnJhbWUgc3RhcnRlZCBw
cm92aXNpb25hbCBsb2FkLgogICoKLSAqIEBwYXJhbSBvIEZyYW1lLgorICogQHBhcmFtIGV3a0Zy
YW1lIEZyYW1lLgogICoKICAqIEVtaXRzIHNpZ25hbDogImxvYWQscHJvdmlzaW9uYWwiIHdpdGgg
bm8gcGFyYW1ldGVycy4KICAqLwpAQCAtMTI4OSw3ICsxMjg5LDcgQEAgdm9pZCBld2tfZnJhbWVf
bG9hZF9wcm92aXNpb25hbChFdmFzX09iamVjdCogZXdrRnJhbWUpCiAgKiBAaW50ZXJuYWwKICAq
IFJlcG9ydHMgdGhlIGZyYW1lIGZpbmlzaGVkIGZpcnN0IGxheW91dC4KICAqCi0gKiBAcGFyYW0g
byBGcmFtZS4KKyAqIEBwYXJhbSBld2tGcmFtZSBGcmFtZS4KICAqCiAgKiBFbWl0cyBzaWduYWw6
ICJsb2FkLGZpcnN0bGF5b3V0LGZpbmlzaGVkIiB3aXRoIG5vIHBhcmFtZXRlcnMuCiAgKi8KQEAg
LTEzMDIsNyArMTMwMiw3IEBAIHZvaWQgZXdrX2ZyYW1lX2xvYWRfZmlyc3RsYXlvdXRfZmluaXNo
ZWQoRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogICogQGludGVybmFsCiAgKiBSZXBvcnRzIHRoZSBm
cmFtZSBmaW5pc2hlZCBmaXJzdCBub24gZW1wdHkgbGF5b3V0LgogICoKLSAqIEBwYXJhbSBvIEZy
YW1lLgorICogQHBhcmFtIGV3a0ZyYW1lIEZyYW1lLgogICoKICAqIEVtaXRzIHNpZ25hbDogImxv
YWQsbm9uZW1wdHlsYXlvdXQsZmluaXNoZWQiIHdpdGggbm8gcGFyYW1ldGVycy4KICAqLwpAQCAt
MTMxNSw3ICsxMzE1LDcgQEAgdm9pZCBld2tfZnJhbWVfbG9hZF9maXJzdGxheW91dF9ub25lbXB0
eV9maW5pc2hlZChFdmFzX09iamVjdCogZXdrRnJhbWUpCiAgKiBAaW50ZXJuYWwKICAqIFJlcG9y
dHMgdGhlIGxvYWRpbmcgb2YgYSBkb2N1bWVudCBoYXMgZmluaXNoZWQgb24gZnJhbWUuCiAgKgot
ICogQHBhcmFtIG8gRnJhbWUuCisgKiBAcGFyYW0gZXdrRnJhbWUgRnJhbWUuCiAgKgogICogRW1p
dHMgc2lnbmFsOiAibG9hZCxkb2N1bWVudCxmaW5pc2hlZCIgd2l0aCBubyBwYXJhbWV0ZXJzLgog
ICovCkBAIC0xMzM4LDcgKzEzMzgsNyBAQCB2b2lkIGV3a19mcmFtZV9sb2FkX2RvY3VtZW50X2Zp
bmlzaGVkKEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKICAqLwogdm9pZCBld2tfZnJhbWVfbG9hZF9m
aW5pc2hlZChFdmFzX09iamVjdCogZXdrRnJhbWUsIGNvbnN0IGNoYXIqIGVycm9yRG9tYWluLCBp
bnQgZXJyb3JDb2RlLCBFaW5hX0Jvb2wgaXNDYW5jZWxsYXRpb24sIGNvbnN0IGNoYXIqIGVycm9y
RGVzY3JpcHRpb24sIGNvbnN0IGNoYXIqIGZhaWxpbmdVcmwpCiB7Ci0gICAgRXdrX0ZyYW1lX0xv
YWRfRXJyb3IgYnVmLCAqZXJyb3I7CisgICAgRXdrX0ZyYW1lX0xvYWRfRXJyb3IgYnVmZmVyLCAq
ZXJyb3I7CiAgICAgaWYgKCFlcnJvckRvbWFpbikgewogICAgICAgICBEQkcoImV3a0ZyYW1lPSVw
LCBzdWNjZXNzLiIsIGV3a0ZyYW1lKTsKICAgICAgICAgZXJyb3IgPSAwOwpAQCAtMTM0NywxNyAr
MTM0NywxNyBAQCB2b2lkIGV3a19mcmFtZV9sb2FkX2ZpbmlzaGVkKEV2YXNfT2JqZWN0KiBld2tG
cmFtZSwgY29uc3QgY2hhciogZXJyb3JEb21haW4sIGludAogICAgICAgICAgICAgZXdrRnJhbWUs
IGVycm9yRG9tYWluLCBlcnJvckNvZGUsIGlzQ2FuY2VsbGF0aW9uLAogICAgICAgICAgICAgZXJy
b3JEZXNjcmlwdGlvbiwgZmFpbGluZ1VybCk7CiAKLSAgICAgICAgYnVmLmRvbWFpbiA9IGVycm9y
RG9tYWluOwotICAgICAgICBidWYuY29kZSA9IGVycm9yQ29kZTsKLSAgICAgICAgYnVmLmlzX2Nh
bmNlbGxhdGlvbiA9IGlzQ2FuY2VsbGF0aW9uOwotICAgICAgICBidWYuZGVzY3JpcHRpb24gPSBl
cnJvckRlc2NyaXB0aW9uOwotICAgICAgICBidWYuZmFpbGluZ191cmwgPSBmYWlsaW5nVXJsOwot
ICAgICAgICBidWYuZnJhbWUgPSBld2tGcmFtZTsKLSAgICAgICAgZXJyb3IgPSAmYnVmOworICAg
ICAgICBidWZmZXIuZG9tYWluID0gZXJyb3JEb21haW47CisgICAgICAgIGJ1ZmZlci5jb2RlID0g
ZXJyb3JDb2RlOworICAgICAgICBidWZmZXIuaXNfY2FuY2VsbGF0aW9uID0gaXNDYW5jZWxsYXRp
b247CisgICAgICAgIGJ1ZmZlci5kZXNjcmlwdGlvbiA9IGVycm9yRGVzY3JpcHRpb247CisgICAg
ICAgIGJ1ZmZlci5mYWlsaW5nX3VybCA9IGZhaWxpbmdVcmw7CisgICAgICAgIGJ1ZmZlci5mcmFt
ZSA9IGV3a0ZyYW1lOworICAgICAgICBlcnJvciA9ICZidWZmZXI7CiAgICAgfQogICAgIGV2YXNf
b2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdrRnJhbWUsICJsb2FkLGZpbmlzaGVkIiwgZXJy
b3IpOwotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCk7Ci0gICAg
ZXdrX3ZpZXdfbG9hZF9maW5pc2hlZChzZC0+dmlldywgZXJyb3IpOworICAgIEVXS19GUkFNRV9T
RF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzbWFydERhdGEpOworICAgIGV3a192aWV3X2xvYWRf
ZmluaXNoZWQoc21hcnREYXRhLT52aWV3LCBlcnJvcik7CiB9CiAKIC8qKgpAQCAtMTM5NSwxNiAr
MTM5NSwxNiBAQCB2b2lkIGV3a19mcmFtZV9sb2FkX2Vycm9yKEV2YXNfT2JqZWN0KiBld2tGcmFt
ZSwgY29uc3QgY2hhciogZXJyb3JEb21haW4sIGludCBlcgogICovCiB2b2lkIGV3a19mcmFtZV9s
b2FkX3Byb2dyZXNzX2NoYW5nZWQoRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewotICAgIEVXS19G
UkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCk7Ci0gICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk4oc2QtPmZyYW1lKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihl
d2tGcmFtZSwgc21hcnREYXRhKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFy
dERhdGEtPmZyYW1lKTsKIAogICAgIC8vIFRPRE86IHRoaXMgaXMgcGVyIHBhZ2UsIHRoZXJlIHNo
b3VsZCBiZSBhIHdheSB0byBoYXZlIHBlci1mcmFtZS4KLSAgICBkb3VibGUgcHJvZ3Jlc3MgPSBz
ZC0+ZnJhbWUtPnBhZ2UoKS0+cHJvZ3Jlc3MoKS0+ZXN0aW1hdGVkUHJvZ3Jlc3MoKTsKKyAgICBk
b3VibGUgcHJvZ3Jlc3MgPSBzbWFydERhdGEtPmZyYW1lLT5wYWdlKCktPnByb2dyZXNzKCktPmVz
dGltYXRlZFByb2dyZXNzKCk7CiAKICAgICBEQkcoImV3a0ZyYW1lPSVwIChwPSUwLjNmKSIsIGV3
a0ZyYW1lLCBwcm9ncmVzcyk7CiAKICAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxs
KGV3a0ZyYW1lLCAibG9hZCxwcm9ncmVzcyIsICZwcm9ncmVzcyk7Ci0gICAgZXdrX3ZpZXdfbG9h
ZF9wcm9ncmVzc19jaGFuZ2VkKHNkLT52aWV3KTsKKyAgICBld2tfdmlld19sb2FkX3Byb2dyZXNz
X2NoYW5nZWQoc21hcnREYXRhLT52aWV3KTsKIH0KIAogCkBAIC0xNDQxLDUxICsxNDQxLDUxIEBA
IHZvaWQgZXdrX2ZyYW1lX3RpdGxlX3NldChFdmFzX09iamVjdCogZXdrRnJhbWUsIGNvbnN0IGNo
YXIqIHRpdGxlKQogdm9pZCBld2tfZnJhbWVfdmlld19jcmVhdGVfZm9yX3ZpZXcoRXZhc19PYmpl
Y3QqIGV3a0ZyYW1lLCBFdmFzX09iamVjdCogdmlldykKIHsKICAgICBEQkcoImV3a0ZyYW1lPSVw
LCB2aWV3PSVwIiwgZXdrRnJhbWUsIHZpZXcpOwotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVU
VVJOKGV3a0ZyYW1lLCBzZCk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmZy
YW1lKTsKLSAgICBFdmFzX0Nvb3JkIHcsIGg7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRV
Uk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4o
c21hcnREYXRhLT5mcmFtZSk7CisgICAgRXZhc19Db29yZCB3aWR0aCwgaGVpZ2h0OwogCi0gICAg
ZXZhc19vYmplY3RfZ2VvbWV0cnlfZ2V0KHZpZXcsIDAsIDAsICZ3LCAmaCk7CisgICAgZXZhc19v
YmplY3RfZ2VvbWV0cnlfZ2V0KHZpZXcsIDAsIDAsICZ3aWR0aCwgJmhlaWdodCk7CiAKLSAgICBX
ZWJDb3JlOjpJbnRTaXplIHNpemUodywgaCk7Ci0gICAgaW50IHIsIGcsIGIsIGE7Ci0gICAgV2Vi
Q29yZTo6Q29sb3IgYmc7CisgICAgV2ViQ29yZTo6SW50U2l6ZSBzaXplKHdpZHRoLCBoZWlnaHQp
OworICAgIGludCByZWQsIGdyZWVuLCBibHVlLCBhbHBoYTsKKyAgICBXZWJDb3JlOjpDb2xvciBi
YWNrZ3JvdW5kOwogCi0gICAgZXdrX3ZpZXdfYmdfY29sb3JfZ2V0KHZpZXcsICZyLCAmZywgJmIs
ICZhKTsKLSAgICBpZiAoIWEpCi0gICAgICAgIGJnID0gV2ViQ29yZTo6Q29sb3IoMCwgMCwgMCwg
MCk7Ci0gICAgZWxzZSBpZiAoYSA9PSAyNTUpCi0gICAgICAgIGJnID0gV2ViQ29yZTo6Q29sb3Io
ciwgZywgYiwgYSk7CisgICAgZXdrX3ZpZXdfYmdfY29sb3JfZ2V0KHZpZXcsICZyZWQsICZncmVl
biwgJmJsdWUsICZhbHBoYSk7CisgICAgaWYgKCFhbHBoYSkKKyAgICAgICAgYmFja2dyb3VuZCA9
IFdlYkNvcmU6OkNvbG9yKDAsIDAsIDAsIDApOworICAgIGVsc2UgaWYgKGFscGhhID09IDI1NSkK
KyAgICAgICAgYmFja2dyb3VuZCA9IFdlYkNvcmU6OkNvbG9yKHJlZCwgZ3JlZW4sIGJsdWUsIGFs
cGhhKTsKICAgICBlbHNlCi0gICAgICAgIGJnID0gV2ViQ29yZTo6Q29sb3IociAqIDI1NSAvIGEs
IGcgKiAyNTUgLyBhLCBiICogMjU1IC8gYSwgYSk7CisgICAgICAgIGJhY2tncm91bmQgPSBXZWJD
b3JlOjpDb2xvcihyZWQgKiAyNTUgLyBhbHBoYSwgZ3JlZW4gKiAyNTUgLyBhbHBoYSwgYmx1ZSAq
IDI1NSAvIGFscGhhLCBhbHBoYSk7CiAKLSAgICBzZC0+ZnJhbWUtPmNyZWF0ZVZpZXcoc2l6ZSwg
YmcsICFhLCBXZWJDb3JlOjpJbnRTaXplKCksIGZhbHNlKTsKLSAgICBpZiAoIXNkLT5mcmFtZS0+
dmlldygpKQorICAgIHNtYXJ0RGF0YS0+ZnJhbWUtPmNyZWF0ZVZpZXcoc2l6ZSwgYmFja2dyb3Vu
ZCwgIWFscGhhLCBXZWJDb3JlOjpJbnRTaXplKCksIGZhbHNlKTsKKyAgICBpZiAoIXNtYXJ0RGF0
YS0+ZnJhbWUtPnZpZXcoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgY29uc3QgY2hhciogdGhl
bWUgPSBld2tfdmlld190aGVtZV9nZXQodmlldyk7Ci0gICAgc2QtPmZyYW1lLT52aWV3KCktPnNl
dEVkamVUaGVtZSh0aGVtZSk7Ci0gICAgc2QtPmZyYW1lLT52aWV3KCktPnNldEV2YXNPYmplY3Qo
ZXdrRnJhbWUpOworICAgIHNtYXJ0RGF0YS0+ZnJhbWUtPnZpZXcoKS0+c2V0RWRqZVRoZW1lKHRo
ZW1lKTsKKyAgICBzbWFydERhdGEtPmZyYW1lLT52aWV3KCktPnNldEV2YXNPYmplY3QoZXdrRnJh
bWUpOwogfQogCiBzc2l6ZV90IGV3a19mcmFtZV9zb3VyY2VfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0
KiBld2tGcmFtZSwgY2hhcioqIGZyYW1lU291cmNlKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRf
T1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgLTEpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOX1ZBTChzZC0+ZnJhbWUsIC0xKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9W
QUwoc2QtPmZyYW1lLT5kb2N1bWVudCgpLCAtMSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9S
RVRVUk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSwgLTEpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOX1ZBTChzbWFydERhdGEtPmZyYW1lLCAtMSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUtPmRvY3VtZW50KCksIC0xKTsKICAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZnJhbWVTb3VyY2UsIC0xKTsKIAogICAgIFdURjo6
U3RyaW5nIHNvdXJjZTsKICAgICAqZnJhbWVTb3VyY2UgPSAwOyAvLyBTYXZlcyAwIHRvIHBvaW50
ZXIgdW50aWwgaXQncyBub3QgYWxsb2NhdGVkLgogCi0gICAgaWYgKCFzZC0+ZnJhbWUtPmRvY3Vt
ZW50KCktPmlzSFRNTERvY3VtZW50KCkpIHsKKyAgICBpZiAoIXNtYXJ0RGF0YS0+ZnJhbWUtPmRv
Y3VtZW50KCktPmlzSFRNTERvY3VtZW50KCkpIHsKICAgICAgICAgLy8gRklYTUU6IFN1cHBvcnQg
b3RoZXJzIGRvY3VtZW50cy4KICAgICAgICAgV1JOKCJPbmx5IEhUTUwgZG9jdW1lbnRzIGFyZSBz
dXBwb3J0ZWQiKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIAogICAgIC8vIExvb2sgZm9y
IDxodG1sPiB0YWcuIElmIGl0IGV4aXN0cywgdGhlIG5vZGUgY29udGF0aW5zIGFsbCBkb2N1bWVu
dCdzIHNvdXJjZS4KLSAgICBXZWJDb3JlOjpOb2RlKiBkb2N1bWVudE5vZGUgPSBzZC0+ZnJhbWUt
PmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpOworICAgIFdlYkNvcmU6Ok5vZGUqIGRvY3Vt
ZW50Tm9kZSA9IHNtYXJ0RGF0YS0+ZnJhbWUtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgp
OwogICAgIGlmIChkb2N1bWVudE5vZGUpCiAgICAgICAgIGZvciAoV2ViQ29yZTo6Tm9kZSogbm9k
ZSA9IGRvY3VtZW50Tm9kZS0+Zmlyc3RDaGlsZCgpOyBub2RlOyBub2RlID0gbm9kZS0+cGFyZW50
RWxlbWVudCgpKSB7CiAgICAgICAgICAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShXZWJDb3JlOjpI
VE1MTmFtZXM6Omh0bWxUYWcpKSB7CkBAIC0xNDk4LDM2ICsxNDk4LDM2IEBAIHNzaXplX3QgZXdr
X2ZyYW1lX3NvdXJjZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBjaGFyKiogZnJh
bWVTb3VyY2UpCiAKICAgICAvLyBUcnkgdG8gZ2V0IDxoZWFkPiBhbmQgPGJvZHk+IHRhZ3MgaWYg
PGh0bWw+IHRhZyB3YXMgbm90IGZvdW5kLgogICAgIGlmIChzb3VyY2UuaXNFbXB0eSgpKSB7Ci0g
ICAgICAgIGlmIChzZC0+ZnJhbWUtPmRvY3VtZW50KCktPmhlYWQoKSkKLSAgICAgICAgICAgIHNv
dXJjZSA9IHNkLT5mcmFtZS0+ZG9jdW1lbnQoKS0+aGVhZCgpLT5vdXRlckhUTUwoKTsKKyAgICAg
ICAgaWYgKHNtYXJ0RGF0YS0+ZnJhbWUtPmRvY3VtZW50KCktPmhlYWQoKSkKKyAgICAgICAgICAg
IHNvdXJjZSA9IHNtYXJ0RGF0YS0+ZnJhbWUtPmRvY3VtZW50KCktPmhlYWQoKS0+b3V0ZXJIVE1M
KCk7CiAKLSAgICAgICAgaWYgKHNkLT5mcmFtZS0+ZG9jdW1lbnQoKS0+Ym9keSgpKQotICAgICAg
ICAgICAgc291cmNlICs9IHNkLT5mcmFtZS0+ZG9jdW1lbnQoKS0+Ym9keSgpLT5vdXRlckhUTUwo
KTsKKyAgICAgICAgaWYgKHNtYXJ0RGF0YS0+ZnJhbWUtPmRvY3VtZW50KCktPmJvZHkoKSkKKyAg
ICAgICAgICAgIHNvdXJjZSArPSBzbWFydERhdGEtPmZyYW1lLT5kb2N1bWVudCgpLT5ib2R5KCkt
Pm91dGVySFRNTCgpOwogICAgIH0KIAotICAgIHNpemVfdCBzb3VyY2VfbGVuZ3RoID0gc3RybGVu
KHNvdXJjZS51dGY4KCkuZGF0YSgpKTsKLSAgICAqZnJhbWVTb3VyY2UgPSBzdGF0aWNfY2FzdDxj
aGFyKj4obWFsbG9jKHNvdXJjZV9sZW5ndGggKyAxKSk7CisgICAgc2l6ZV90IHNvdXJjZUxlbmd0
aCA9IHN0cmxlbihzb3VyY2UudXRmOCgpLmRhdGEoKSk7CisgICAgKmZyYW1lU291cmNlID0gc3Rh
dGljX2Nhc3Q8Y2hhcio+KG1hbGxvYyhzb3VyY2VMZW5ndGggKyAxKSk7CiAgICAgaWYgKCEqZnJh
bWVTb3VyY2UpIHsKICAgICAgICAgQ1JJVElDQUwoIkNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnku
Iik7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKLSAgICBzdHJuY3B5KCpmcmFtZVNvdXJj
ZSwgc291cmNlLnV0ZjgoKS5kYXRhKCksIHNvdXJjZV9sZW5ndGgpOwotICAgICgqZnJhbWVTb3Vy
Y2UpW3NvdXJjZV9sZW5ndGhdID0gJ1wwJzsKKyAgICBzdHJuY3B5KCpmcmFtZVNvdXJjZSwgc291
cmNlLnV0ZjgoKS5kYXRhKCksIHNvdXJjZUxlbmd0aCk7CisgICAgKCpmcmFtZVNvdXJjZSlbc291
cmNlTGVuZ3RoXSA9ICdcMCc7CiAKLSAgICByZXR1cm4gc291cmNlX2xlbmd0aDsKKyAgICByZXR1
cm4gc291cmNlTGVuZ3RoOwogfQogCiBFaW5hX0xpc3QqIGV3a19mcmFtZV9yZXNvdXJjZXNfbG9j
YXRpb25fZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsKLSAgICBFV0tfRlJBTUVf
U0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIDApOwotICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIDApOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOX1ZBTChzZC0+ZnJhbWUtPmRvY3VtZW50KCksIDApOworICAgIEVXS19GUkFNRV9TRF9HRVRf
T1JfUkVUVVJOKGV3a0ZyYW1lLCBzbWFydERhdGEsIDApOworICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmZyYW1lLCAwKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5mcmFtZS0+ZG9jdW1lbnQoKSwgMCk7CiAKICAgICBF
aW5hX0xpc3QqIGxpc3RPZkltYWdlc0xvY2F0aW9uID0gMDsKIAogICAgIC8vIEdldCBzcmMgYXR0
aWJ1dGUgb2YgaW1hZ2VzIGFuZCBzYXZlcyB0aGVtIHRvIHRoZSBFaW5hX0xpc3QuCi0gICAgUmVm
UHRyPFdlYkNvcmU6OkhUTUxDb2xsZWN0aW9uPiBpbWFnZXMgPSBzZC0+ZnJhbWUtPmRvY3VtZW50
KCktPmltYWdlcygpOworICAgIFJlZlB0cjxXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbj4gaW1hZ2Vz
ID0gc21hcnREYXRhLT5mcmFtZS0+ZG9jdW1lbnQoKS0+aW1hZ2VzKCk7CiAgICAgZm9yIChzaXpl
X3QgaW5kZXggPSAwOyBpbmRleCA8IGltYWdlcy0+bGVuZ3RoKCk7ICsraW5kZXgpIHsKICAgICAg
ICAgV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudCogaW1hZ2VFbGVtZW50ID0gc3RhdGljX2Nhc3Q8
V2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudCo+KGltYWdlcy0+aXRlbShpbmRleCkpOwogICAgICAg
ICBpZiAoIWltYWdlRWxlbWVudCB8fCBpbWFnZUVsZW1lbnQtPnNyYygpLmlzTnVsbCgpIHx8IGlt
YWdlRWxlbWVudC0+c3JjKCkuaXNFbXB0eSgpKQpAQCAtMTU2NCwxMyArMTU2NCwxMyBAQCBvdXRf
b2ZfbWVtb3J5X2hhbmRsZXI6CiAKIGNoYXIqIGV3a19mcmFtZV9wbGFpbl90ZXh0X2dldChjb25z
dCBFdmFzX09iamVjdCogZXdrRnJhbWUpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRV
Uk4oZXdrRnJhbWUsIHNkLCAwKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwo
c2QtPmZyYW1lLCAwKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwg
c21hcnREYXRhLCAwKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnRE
YXRhLT5mcmFtZSwgMCk7CiAKLSAgICBpZiAoIXNkLT5mcmFtZS0+ZG9jdW1lbnQoKSkKKyAgICBp
ZiAoIXNtYXJ0RGF0YS0+ZnJhbWUtPmRvY3VtZW50KCkpCiAgICAgICAgIHJldHVybiAwOwogCi0g
ICAgV2ViQ29yZTo6RWxlbWVudCogZG9jdW1lbnRFbGVtZW50ID0gc2QtPmZyYW1lLT5kb2N1bWVu
dCgpLT5kb2N1bWVudEVsZW1lbnQoKTsKKyAgICBXZWJDb3JlOjpFbGVtZW50KiBkb2N1bWVudEVs
ZW1lbnQgPSBzbWFydERhdGEtPmZyYW1lLT5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKTsK
IAogICAgIGlmICghZG9jdW1lbnRFbGVtZW50KQogICAgICAgICByZXR1cm4gMDsKQEAgLTE2MDks
OSArMTYwOSw5IEBAIEVpbmFfQm9vbCBld2tfZnJhbWVfdXJpX2NoYW5nZWQoRXZhc19PYmplY3Qq
IGV3a0ZyYW1lKQogdm9pZCBld2tfZnJhbWVfZm9yY2VfbGF5b3V0KEV2YXNfT2JqZWN0KiBld2tG
cmFtZSkKIHsKICAgICBEQkcoImV3a0ZyYW1lPSVwIiwgZXdrRnJhbWUpOwotICAgIEVXS19GUkFN
RV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk4oc2QtPmZyYW1lKTsKLSAgICBXZWJDb3JlOjpGcmFtZVZpZXcqIHZpZXcgPSBzZC0+
ZnJhbWUtPnZpZXcoKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwg
c21hcnREYXRhKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmZy
YW1lKTsKKyAgICBXZWJDb3JlOjpGcmFtZVZpZXcqIHZpZXcgPSBzbWFydERhdGEtPmZyYW1lLT52
aWV3KCk7CiAgICAgaWYgKHZpZXcpCiAgICAgICAgIHZpZXctPmZvcmNlTGF5b3V0KHRydWUpOwog
fQpAQCAtMTYzMCw3ICsxNjMwLDcgQEAgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OldpZGdldD4g
ZXdrX2ZyYW1lX3BsdWdpbl9jcmVhdGUoRXZhc19PYmplY3QqIGV3a0ZyYW1lLAogICogQGludGVy
bmFsCiAgKiBSZXBvcnRzIHRoYXQgZWRpdG9yIGNsaWVudCBzZWxlY3Rpb24gd2FzIGNoYW5nZWQu
CiAgKgotICogQHBhcmFtIG8gRnJhbWUKKyAqIEBwYXJhbSBld2tGcmFtZSBGcmFtZQogICoKICAq
IEVtaXRzIHNpZ25hbDogImVkaXRvcmNsaWVudHNlbGVjdGlvbixjaGFuZ2VkIiB3aXRoIG5vIHBh
cmFtZXRlcnMuCiAgKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfaGlz
dG9yeS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2hpc3RvcnkuY3BwCmluZGV4IDA2
ZTIzNjk0OTlkZDU5YThjMTk5ZjIyYzFkMjg4Y2M1YTJlNjk4ZjUuLmM1MjllNjU0YjVlNGQ0NjE4
MmM1ZTM0NWFhODdmMjExN2UxNTE4MTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3
ay9ld2tfaGlzdG9yeS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19oaXN0b3J5
LmNwcApAQCAtNTcsOSArNTcsOSBAQCBzdHJ1Y3QgX0V3a19IaXN0b3J5X0l0ZW0gewogICAgIFdl
YkNvcmU6Okhpc3RvcnlJdGVtKiBjb3JlOwogCiAgICAgY29uc3QgY2hhciogdGl0bGU7Ci0gICAg
Y29uc3QgY2hhciogYWx0ZXJuYXRlX3RpdGxlOworICAgIGNvbnN0IGNoYXIqIGFsdGVybmF0ZVRp
dGxlOwogICAgIGNvbnN0IGNoYXIqIHVyaTsKLSAgICBjb25zdCBjaGFyKiBvcmlnaW5hbF91cmk7
CisgICAgY29uc3QgY2hhciogb3JpZ2luYWxVcmk7CiB9OwogCiAjZGVmaW5lIEVXS19ISVNUT1JZ
X0lURU1fQ09SRV9HRVRfT1JfUkVUVVJOKGl0ZW0sIGNvcmVfLCAuLi4pIFwKQEAgLTk3LDE3ICs5
NywxNyBAQCBzdGF0aWMgaW5saW5lIEV3a19IaXN0b3J5X0l0ZW0qIF9ld2tfaGlzdG9yeV9pdGVt
X25ldyhXZWJDb3JlOjpIaXN0b3J5SXRlbSogY29yZQogCiBzdGF0aWMgaW5saW5lIEVpbmFfTGlz
dCogX2V3a19oaXN0b3J5X2l0ZW1fbGlzdF9nZXQoY29uc3QgV2ViQ29yZTo6SGlzdG9yeUl0ZW1W
ZWN0b3ImIGNvcmVJdGVtcykKIHsKLSAgICBFaW5hX0xpc3QqIHJldCA9IDA7Ci0gICAgdW5zaWdu
ZWQgaW50IGksIHNpemU7CisgICAgRWluYV9MaXN0KiByZXN1bHQgPSAwOworICAgIHVuc2lnbmVk
IGludCBzaXplOwogCiAgICAgc2l6ZSA9IGNvcmVJdGVtcy5zaXplKCk7Ci0gICAgZm9yIChpID0g
MDsgaSA8IHNpemU7IGkrKykgeworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgc2l6
ZTsgaSsrKSB7CiAgICAgICAgIEV3a19IaXN0b3J5X0l0ZW0qIGl0ZW0gPSBfZXdrX2hpc3Rvcnlf
aXRlbV9uZXcoY29yZUl0ZW1zW2ldLmdldCgpKTsKICAgICAgICAgaWYgKGl0ZW0pCi0gICAgICAg
ICAgICByZXQgPSBlaW5hX2xpc3RfYXBwZW5kKHJldCwgaXRlbSk7CisgICAgICAgICAgICByZXN1
bHQgPSBlaW5hX2xpc3RfYXBwZW5kKHJlc3VsdCwgaXRlbSk7CiAgICAgfQogCi0gICAgcmV0dXJu
IHJldDsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBFaW5hX0Jvb2wgZXdrX2hpc3RvcnlfZm9y
d2FyZChFd2tfSGlzdG9yeSogaGlzdG9yeSkKQEAgLTI2MCw5ICsyNjAsOSBAQCB2b2lkIGV3a19o
aXN0b3J5X2l0ZW1fZnJlZShFd2tfSGlzdG9yeV9JdGVtKiBpdGVtKQogCiB2b2lkIGV3a19oaXN0
b3J5X2l0ZW1fbGlzdF9mcmVlKEVpbmFfTGlzdCogaGlzdG9yeV9pdGVtcykKIHsKLSAgICB2b2lk
KiBkOwotICAgIEVJTkFfTElTVF9GUkVFKGhpc3RvcnlfaXRlbXMsIGQpIHsKLSAgICAgICAgRXdr
X0hpc3RvcnlfSXRlbSogaXRlbSA9IChFd2tfSGlzdG9yeV9JdGVtKilkOworICAgIHZvaWQqIGRl
bGV0ZUl0ZW07CisgICAgRUlOQV9MSVNUX0ZSRUUoaGlzdG9yeV9pdGVtcywgZGVsZXRlSXRlbSkg
eworICAgICAgICBFd2tfSGlzdG9yeV9JdGVtKiBpdGVtID0gKEV3a19IaXN0b3J5X0l0ZW0qKWRl
bGV0ZUl0ZW07CiAgICAgICAgIF9ld2tfaGlzdG9yeV9pdGVtX2ZyZWUoaXRlbSwgaXRlbS0+Y29y
ZSk7CiAgICAgfQogfQpAQCAtMjcxLDI1ICsyNzEsMjUgQEAgY29uc3QgY2hhciogZXdrX2hpc3Rv
cnlfaXRlbV90aXRsZV9nZXQoY29uc3QgRXdrX0hpc3RvcnlfSXRlbSogaXRlbSkKIHsKICAgICBF
V0tfSElTVE9SWV9JVEVNX0NPUkVfR0VUX09SX1JFVFVSTihpdGVtLCBjb3JlLCAwKTsKICAgICAv
LyBoaWRlIHRoZSBmb2xsb3dpbmcgb3B0aW16YXRpb24gZnJvbSBvdXRzaWRlCi0gICAgRXdrX0hp
c3RvcnlfSXRlbSogaSA9IGNvbnN0X2Nhc3Q8RXdrX0hpc3RvcnlfSXRlbSo+KGl0ZW0pOwotICAg
IGVpbmFfc3RyaW5nc2hhcmVfcmVwbGFjZSgmaS0+dGl0bGUsIGNvcmUtPnRpdGxlKCkudXRmOCgp
LmRhdGEoKSk7Ci0gICAgcmV0dXJuIGktPnRpdGxlOworICAgIEV3a19IaXN0b3J5X0l0ZW0qIGl0
ZW0xID0gY29uc3RfY2FzdDxFd2tfSGlzdG9yeV9JdGVtKj4oaXRlbSk7CisgICAgZWluYV9zdHJp
bmdzaGFyZV9yZXBsYWNlKCZpdGVtMS0+dGl0bGUsIGNvcmUtPnRpdGxlKCkudXRmOCgpLmRhdGEo
KSk7CisgICAgcmV0dXJuIGl0ZW0xLT50aXRsZTsKIH0KIAogY29uc3QgY2hhciogZXdrX2hpc3Rv
cnlfaXRlbV90aXRsZV9hbHRlcm5hdGVfZ2V0KGNvbnN0IEV3a19IaXN0b3J5X0l0ZW0qIGl0ZW0p
CiB7CiAgICAgRVdLX0hJU1RPUllfSVRFTV9DT1JFX0dFVF9PUl9SRVRVUk4oaXRlbSwgY29yZSwg
MCk7CiAgICAgLy8gaGlkZSB0aGUgZm9sbG93aW5nIG9wdGltemF0aW9uIGZyb20gb3V0c2lkZQot
ICAgIEV3a19IaXN0b3J5X0l0ZW0qIGkgPSBjb25zdF9jYXN0PEV3a19IaXN0b3J5X0l0ZW0qPihp
dGVtKTsKLSAgICBlaW5hX3N0cmluZ3NoYXJlX3JlcGxhY2UoJmktPmFsdGVybmF0ZV90aXRsZSwK
KyAgICBFd2tfSGlzdG9yeV9JdGVtKiBpdGVtMSA9IGNvbnN0X2Nhc3Q8RXdrX0hpc3RvcnlfSXRl
bSo+KGl0ZW0pOworICAgIGVpbmFfc3RyaW5nc2hhcmVfcmVwbGFjZSgmaXRlbTEtPmFsdGVybmF0
ZVRpdGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlLT5hbHRlcm5hdGVUaXRs
ZSgpLnV0ZjgoKS5kYXRhKCkpOwotICAgIHJldHVybiBpLT5hbHRlcm5hdGVfdGl0bGU7CisgICAg
cmV0dXJuIGl0ZW0xLT5hbHRlcm5hdGVUaXRsZTsKIH0KIAogdm9pZCBld2tfaGlzdG9yeV9pdGVt
X3RpdGxlX2FsdGVybmF0ZV9zZXQoRXdrX0hpc3RvcnlfSXRlbSogaXRlbSwgY29uc3QgY2hhciog
dGl0bGUpCiB7CiAgICAgRVdLX0hJU1RPUllfSVRFTV9DT1JFX0dFVF9PUl9SRVRVUk4oaXRlbSwg
Y29yZSk7Ci0gICAgaWYgKCFlaW5hX3N0cmluZ3NoYXJlX3JlcGxhY2UoJml0ZW0tPmFsdGVybmF0
ZV90aXRsZSwgdGl0bGUpKQorICAgIGlmICghZWluYV9zdHJpbmdzaGFyZV9yZXBsYWNlKCZpdGVt
LT5hbHRlcm5hdGVUaXRsZSwgdGl0bGUpKQogICAgICAgICByZXR1cm47CiAgICAgY29yZS0+c2V0
QWx0ZXJuYXRlVGl0bGUoV1RGOjpTdHJpbmc6OmZyb21VVEY4KHRpdGxlKSk7CiB9CkBAIC0zMDgs
OSArMzA4LDkgQEAgY29uc3QgY2hhciogZXdrX2hpc3RvcnlfaXRlbV91cmlfb3JpZ2luYWxfZ2V0
KGNvbnN0IEV3a19IaXN0b3J5X0l0ZW0qIGl0ZW0pCiAgICAgRVdLX0hJU1RPUllfSVRFTV9DT1JF
X0dFVF9PUl9SRVRVUk4oaXRlbSwgY29yZSwgMCk7CiAgICAgLy8gaGlkZSB0aGUgZm9sbG93aW5n
IG9wdGltemF0aW9uIGZyb20gb3V0c2lkZQogICAgIEV3a19IaXN0b3J5X0l0ZW0qIGkgPSBjb25z
dF9jYXN0PEV3a19IaXN0b3J5X0l0ZW0qPihpdGVtKTsKLSAgICBlaW5hX3N0cmluZ3NoYXJlX3Jl
cGxhY2UoJmktPm9yaWdpbmFsX3VyaSwKKyAgICBlaW5hX3N0cmluZ3NoYXJlX3JlcGxhY2UoJmkt
Pm9yaWdpbmFsVXJpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlLT5vcmlnaW5h
bFVSTFN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotICAgIHJldHVybiBpLT5vcmlnaW5hbF91cmk7
CisgICAgcmV0dXJuIGktPm9yaWdpbmFsVXJpOwogfQogCiBkb3VibGUgZXdrX2hpc3RvcnlfaXRl
bV90aW1lX2xhc3RfdmlzaXRlZF9nZXQoY29uc3QgRXdrX0hpc3RvcnlfSXRlbSogaXRlbSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfanMuY3BwIGIvU291cmNlL1dlYktp
dC9lZmwvZXdrL2V3a19qcy5jcHAKaW5kZXggNDJjZmRmZWMxYTViNDgzZjRmYTEzZjVlOGM4YzQx
NWQ0ZWY2MDFjMS4uZjViM2FlNTZiNTA1YzMzOWJiZDVmYjI5MTcwZDM3ZjEyZDJjOWI1NCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19qcy5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9lZmwvZXdrL2V3a19qcy5jcHAKQEAgLTg1LDEwICs4NSwxMCBAQCBzdGF0aWMgRWluYV9C
b29sIGV3a19qc192YXJpYW50X3RvX25wdmFyaWFudChjb25zdCBFd2tfSlNfVmFyaWFudCogZGF0
YSwgTlBWYXJpYQogLy8gVGhlc2UgbWV0aG9kcyBhcmUgdXNlZCBieSBOUEFJLCB0aGF0cyB0aGUg
cmVhc29uIHRvIHVzZSBib29sIGluc3RlYWQgb2YgRWluYV9Cb29sLgogc3RhdGljIGJvb2wgZXdr
X2pzX3Byb3BlcnR5X2hhcyhOUE9iamVjdCogbnBPYmplY3QsIE5QSWRlbnRpZmllciBuYW1lKQog
ewotICAgIEV3a19KU19PYmplY3QqIG9iaiA9IHJlaW50ZXJwcmV0X2Nhc3Q8RXdrX0pTX09iamVj
dCo+KG5wT2JqZWN0KTsKKyAgICBFd2tfSlNfT2JqZWN0KiBvYmplY3QgPSByZWludGVycHJldF9j
YXN0PEV3a19KU19PYmplY3QqPihucE9iamVjdCk7CiAKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTl9WQUwobnBPYmplY3QsIGZhbHNlKTsKLSAgICBFSU5BX01BR0lDX0NIRUNLX09SX1JF
VFVSTihvYmosIGZhbHNlKTsKKyAgICBFSU5BX01BR0lDX0NIRUNLX09SX1JFVFVSTihvYmplY3Qs
IGZhbHNlKTsKIAogICAgIGlmICghX05QTl9JZGVudGlmaWVySXNTdHJpbmcobmFtZSkpIHsKICAg
ICAgICAgRVJSKCJpbnQgTlBJZGVudGlmaWVyIGlzIG5vdCBzdXBwb3J0ZWQuIik7CkBAIC05Niw3
ICs5Niw3IEBAIHN0YXRpYyBib29sIGV3a19qc19wcm9wZXJ0eV9oYXMoTlBPYmplY3QqIG5wT2Jq
ZWN0LCBOUElkZW50aWZpZXIgbmFtZSkKICAgICB9CiAKICAgICBjaGFyKiBwcm9wX25hbWUgPSBf
TlBOX1VURjhGcm9tSWRlbnRpZmllcihuYW1lKTsKLSAgICBib29sIGZhaWwgPSBlaW5hX2hhc2hf
ZmluZChvYmotPnByb3BlcnRpZXMsIHByb3BfbmFtZSk7IC8vIEZJWE1FOiBzaG91bGQgc2VhcmNo
IG1ldGhvZHMgdG9vPworICAgIGJvb2wgZmFpbCA9IGVpbmFfaGFzaF9maW5kKG9iamVjdC0+cHJv
cGVydGllcywgcHJvcF9uYW1lKTsgLy8gRklYTUU6IHNob3VsZCBzZWFyY2ggbWV0aG9kcyB0b28/
CiAgICAgZnJlZShwcm9wX25hbWUpOwogCiAgICAgcmV0dXJuIGZhaWw7CkBAIC0xMDQsMTMgKzEw
NCwxMyBAQCBzdGF0aWMgYm9vbCBld2tfanNfcHJvcGVydHlfaGFzKE5QT2JqZWN0KiBucE9iamVj
dCwgTlBJZGVudGlmaWVyIG5hbWUpCiAKIHN0YXRpYyBib29sIGV3a19qc19wcm9wZXJ0eV9nZXQo
TlBPYmplY3QqIG5wT2JqZWN0LCBOUElkZW50aWZpZXIgbmFtZSwgTlBWYXJpYW50KiByZXN1bHQp
CiB7Ci0gICAgRXdrX0pTX09iamVjdCogb2JqID0gcmVpbnRlcnByZXRfY2FzdDxFd2tfSlNfT2Jq
ZWN0Kj4obnBPYmplY3QpOworICAgIEV3a19KU19PYmplY3QqIG9iamVjdCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8RXdrX0pTX09iamVjdCo+KG5wT2JqZWN0KTsKICAgICBFd2tfSlNfVmFyaWFudCogdmFs
dWU7CiAgICAgRXdrX0pTX1Byb3BlcnR5KiBwcm9wOwogICAgIGJvb2wgZmFpbCA9IGZhbHNlOwog
CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKG5wT2JqZWN0LCBmYWxzZSk7Ci0g
ICAgRUlOQV9NQUdJQ19DSEVDS19PUl9SRVRVUk4ob2JqLCBmYWxzZSk7CisgICAgRUlOQV9NQUdJ
Q19DSEVDS19PUl9SRVRVUk4ob2JqZWN0LCBmYWxzZSk7CiAKICAgICBpZiAoIV9OUE5fSWRlbnRp
ZmllcklzU3RyaW5nKG5hbWUpKSB7CiAgICAgICAgIEVSUigiaW50IE5QSWRlbnRpZmllciBpcyBu
b3Qgc3VwcG9ydGVkLiIpOwpAQCAtMTIzLDE5ICsxMjMsMTkgQEAgc3RhdGljIGJvb2wgZXdrX2pz
X3Byb3BlcnR5X2dldChOUE9iamVjdCogbnBPYmplY3QsIE5QSWRlbnRpZmllciBuYW1lLCBOUFZh
cmlhbnQKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIHByb3AgPSBzdGF0aWNf
Y2FzdDxFd2tfSlNfUHJvcGVydHkqPihlaW5hX2hhc2hfZmluZChvYmotPmNscy0+cHJvcGVydGll
cywgbmFtZSkpOworICAgIHByb3AgPSBzdGF0aWNfY2FzdDxFd2tfSlNfUHJvcGVydHkqPihlaW5h
X2hhc2hfZmluZChvYmplY3QtPmNscy0+cHJvcGVydGllcywgbmFtZSkpOwogICAgIGlmIChwcm9w
ICYmIHByb3AtPmdldCkgeyAvLyBDbGFzcyBoYXMgcHJvcGVydHkgYW5kIHByb3BlcnR5IGhhcyBn
ZXR0ZXIuCi0gICAgICAgIGZhaWwgPSBwcm9wLT5nZXQob2JqLCBwcm9wLT5uYW1lLCB2YWx1ZSk7
CisgICAgICAgIGZhaWwgPSBwcm9wLT5nZXQob2JqZWN0LCBwcm9wLT5uYW1lLCB2YWx1ZSk7CiAg
ICAgICAgIGlmICghZmFpbCkKICAgICAgICAgICAgIGZhaWwgPSBld2tfanNfdmFyaWFudF90b19u
cHZhcmlhbnQodmFsdWUsIHJlc3VsdCk7Ci0gICAgfSBlbHNlIGlmIChvYmotPmNscy0+ZGVmYXVs
dF9wcm9wLmdldCkgeyAvLyBEZWZhdWx0IGdldHRlciBleGlzdHMuCi0gICAgICAgIGZhaWwgPSBv
YmotPmNscy0+ZGVmYXVsdF9wcm9wLmdldChvYmosIHByb3AtPm5hbWUsIHZhbHVlKTsKKyAgICB9
IGVsc2UgaWYgKG9iamVjdC0+Y2xzLT5kZWZhdWx0X3Byb3AuZ2V0KSB7IC8vIERlZmF1bHQgZ2V0
dGVyIGV4aXN0cy4KKyAgICAgICAgZmFpbCA9IG9iamVjdC0+Y2xzLT5kZWZhdWx0X3Byb3AuZ2V0
KG9iamVjdCwgcHJvcC0+bmFtZSwgdmFsdWUpOwogICAgICAgICBpZiAoIWZhaWwpCiAgICAgICAg
ICAgICBmYWlsID0gZXdrX2pzX3ZhcmlhbnRfdG9fbnB2YXJpYW50KHZhbHVlLCByZXN1bHQpOwog
ICAgIH0gZWxzZSB7IC8vIEZhbGxiYWNrIHRvIG9iamVjdHMgaGFzaCBtYXAuCiAgICAgICAgIGNo
YXIqIHByb3BfbmFtZSA9IF9OUE5fVVRGOEZyb21JZGVudGlmaWVyKG5hbWUpOwogICAgICAgICBm
cmVlKHZhbHVlKTsKLSAgICAgICAgdmFsdWUgPSBzdGF0aWNfY2FzdDxFd2tfSlNfVmFyaWFudCo+
KGVpbmFfaGFzaF9maW5kKG9iai0+cHJvcGVydGllcywgcHJvcF9uYW1lKSk7CisgICAgICAgIHZh
bHVlID0gc3RhdGljX2Nhc3Q8RXdrX0pTX1ZhcmlhbnQqPihlaW5hX2hhc2hfZmluZChvYmplY3Qt
PnByb3BlcnRpZXMsIHByb3BfbmFtZSkpOwogICAgICAgICBmcmVlKHByb3BfbmFtZSk7CiAgICAg
ICAgIGlmICh2YWx1ZSkKICAgICAgICAgICAgIHJldHVybiBld2tfanNfdmFyaWFudF90b19ucHZh
cmlhbnQodmFsdWUsIHJlc3VsdCk7CkBAIC0xNDcsMTMgKzE0NywxMyBAQCBzdGF0aWMgYm9vbCBl
d2tfanNfcHJvcGVydHlfZ2V0KE5QT2JqZWN0KiBucE9iamVjdCwgTlBJZGVudGlmaWVyIG5hbWUs
IE5QVmFyaWFudAogCiBzdGF0aWMgYm9vbCBld2tfanNfcHJvcGVydHlfc2V0KE5QT2JqZWN0KiBu
cE9iamVjdCwgTlBJZGVudGlmaWVyIG5hbWUsIGNvbnN0IE5QVmFyaWFudCogbnBWYWx1ZSkKIHsK
LSAgICBFd2tfSlNfT2JqZWN0KiBvYmogPSByZWludGVycHJldF9jYXN0PEV3a19KU19PYmplY3Qq
PihucE9iamVjdCk7CisgICAgRXdrX0pTX09iamVjdCogb2JqZWN0ID0gcmVpbnRlcnByZXRfY2Fz
dDxFd2tfSlNfT2JqZWN0Kj4obnBPYmplY3QpOwogICAgIEV3a19KU19WYXJpYW50KiB2YWx1ZTsK
ICAgICBFd2tfSlNfUHJvcGVydHkqIHByb3A7CiAgICAgYm9vbCBmYWlsID0gZmFsc2U7CiAKICAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwobnBPYmosIGZhbHNlKTsKLSAgICBFSU5B
X01BR0lDX0NIRUNLX09SX1JFVFVSTihvYmosIGZhbHNlKTsKKyAgICBFSU5BX01BR0lDX0NIRUNL
X09SX1JFVFVSTihvYmplY3QsIGZhbHNlKTsKIAogICAgIGlmICghX05QTl9JZGVudGlmaWVySXNT
dHJpbmcobmFtZSkpIHsKICAgICAgICAgRVJSKCJpbnQgTlBJZGVudGlmaWVyIGlzIG5vdCBzdXBw
b3J0ZWQuIik7CkBAIC0xNjgsMTMgKzE2OCwxMyBAQCBzdGF0aWMgYm9vbCBld2tfanNfcHJvcGVy
dHlfc2V0KE5QT2JqZWN0KiBucE9iamVjdCwgTlBJZGVudGlmaWVyIG5hbWUsIGNvbnN0IE5QVgog
CiAgICAgZXdrX2pzX25wdmFyaWFudF90b192YXJpYW50KHZhbHVlLCBucFZhbHVlKTsKICAgICBj
aGFyKiBwcm9wX25hbWUgPSBfTlBOX1VURjhGcm9tSWRlbnRpZmllcihuYW1lKTsKLSAgICBwcm9w
ID0gc3RhdGljX2Nhc3Q8RXdrX0pTX1Byb3BlcnR5Kj4oZWluYV9oYXNoX2ZpbmQob2JqLT5jbHMt
PnByb3BlcnRpZXMsIHByb3BfbmFtZSkpOworICAgIHByb3AgPSBzdGF0aWNfY2FzdDxFd2tfSlNf
UHJvcGVydHkqPihlaW5hX2hhc2hfZmluZChvYmplY3QtPmNscy0+cHJvcGVydGllcywgcHJvcF9u
YW1lKSk7CiAgICAgaWYgKHByb3AgJiYgcHJvcC0+c2V0KQotICAgICAgICBmYWlsID0gcHJvcC0+
c2V0KG9iaiwgcHJvcC0+bmFtZSwgdmFsdWUpOyAvLyBDbGFzcyBoYXMgcHJvcGVydHkgYW5kIHBy
b3BlcnR5IGhhcyBzZXR0ZXIuCi0gICAgZWxzZSBpZiAob2JqLT5jbHMtPmRlZmF1bHRfcHJvcC5z
ZXQpCi0gICAgICAgIGZhaWwgPSBvYmotPmNscy0+ZGVmYXVsdF9wcm9wLnNldChvYmosIHByb3Bf
bmFtZSwgdmFsdWUpOyAvLyBEZWZhdWx0IGdldHRlciBleGlzdHMuCisgICAgICAgIGZhaWwgPSBw
cm9wLT5zZXQob2JqZWN0LCBwcm9wLT5uYW1lLCB2YWx1ZSk7IC8vIENsYXNzIGhhcyBwcm9wZXJ0
eSBhbmQgcHJvcGVydHkgaGFzIHNldHRlci4KKyAgICBlbHNlIGlmIChvYmplY3QtPmNscy0+ZGVm
YXVsdF9wcm9wLnNldCkKKyAgICAgICAgZmFpbCA9IG9iamVjdC0+Y2xzLT5kZWZhdWx0X3Byb3Au
c2V0KG9iamVjdCwgcHJvcF9uYW1lLCB2YWx1ZSk7IC8vIERlZmF1bHQgZ2V0dGVyIGV4aXN0cy4K
ICAgICBlbHNlIHsgLy8gRmFsbGJhY2sgdG8gb2JqZWN0cyBoYXNoIG1hcC4KLSAgICAgICAgdm9p
ZCogb2xkID0gZWluYV9oYXNoX3NldChvYmotPnByb3BlcnRpZXMsIHByb3BfbmFtZSwgdmFsdWUp
OworICAgICAgICB2b2lkKiBvbGQgPSBlaW5hX2hhc2hfc2V0KG9iamVjdC0+cHJvcGVydGllcywg
cHJvcF9uYW1lLCB2YWx1ZSk7CiAgICAgICAgIGZyZWUob2xkKTsKICAgICAgICAgZmFpbCA9IHRy
dWU7CiAgICAgfQpAQCAtMTg1LDEyICsxODUsMTIgQEAgc3RhdGljIGJvb2wgZXdrX2pzX3Byb3Bl
cnR5X3NldChOUE9iamVjdCogbnBPYmplY3QsIE5QSWRlbnRpZmllciBuYW1lLCBjb25zdCBOUFYK
IAogc3RhdGljIGJvb2wgZXdrX2pzX3Byb3BlcnR5X3JlbW92ZShOUE9iamVjdCogbnBPYmplY3Qs
IE5QSWRlbnRpZmllciBuYW1lKQogewotICAgIEV3a19KU19PYmplY3QqIG9iaiA9IHJlaW50ZXJw
cmV0X2Nhc3Q8RXdrX0pTX09iamVjdCo+KG5wT2JqZWN0KTsKKyAgICBFd2tfSlNfT2JqZWN0KiBv
YmplY3QgPSByZWludGVycHJldF9jYXN0PEV3a19KU19PYmplY3QqPihucE9iamVjdCk7CiAgICAg
RXdrX0pTX1Byb3BlcnR5KiBwcm9wOwogICAgIGJvb2wgZmFpbCA9IGZhbHNlOwogCiAgICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKG5wT2JqZWN0LCBmYWxzZSk7Ci0gICAgRUlOQV9N
QUdJQ19DSEVDS19PUl9SRVRVUk4ob2JqLCBmYWxzZSk7CisgICAgRUlOQV9NQUdJQ19DSEVDS19P
Ul9SRVRVUk4ob2JqZWN0LCBmYWxzZSk7CiAKICAgICBpZiAoIV9OUE5fSWRlbnRpZmllcklzU3Ry
aW5nKG5hbWUpKSB7CiAgICAgICAgIEVSUigiaW50IE5QSWRlbnRpZmllciBpcyBub3Qgc3VwcG9y
dGVkLiIpOwpAQCAtMTk4LDEzICsxOTgsMTMgQEAgc3RhdGljIGJvb2wgZXdrX2pzX3Byb3BlcnR5
X3JlbW92ZShOUE9iamVjdCogbnBPYmplY3QsIE5QSWRlbnRpZmllciBuYW1lKQogICAgIH0KIAog
ICAgIGNoYXIqIHByb3BfbmFtZSA9IF9OUE5fVVRGOEZyb21JZGVudGlmaWVyKG5hbWUpOwotICAg
IHByb3AgPSBzdGF0aWNfY2FzdDxFd2tfSlNfUHJvcGVydHkqPihlaW5hX2hhc2hfZmluZChvYmot
PmNscy0+cHJvcGVydGllcywgcHJvcF9uYW1lKSk7CisgICAgcHJvcCA9IHN0YXRpY19jYXN0PEV3
a19KU19Qcm9wZXJ0eSo+KGVpbmFfaGFzaF9maW5kKG9iamVjdC0+Y2xzLT5wcm9wZXJ0aWVzLCBw
cm9wX25hbWUpKTsKICAgICBpZiAocHJvcCAmJiBwcm9wLT5kZWwpCi0gICAgICAgIGZhaWwgPSBw
cm9wLT5kZWwob2JqLCBwcm9wLT5uYW1lKTsgLy8gQ2xhc3MgaGFzIHByb3BlcnR5IGFuZCBwcm9w
ZXJ0eSBoYXMgZ2V0dGVyLgotICAgIGVsc2UgaWYgKG9iai0+Y2xzLT5kZWZhdWx0X3Byb3AuZGVs
KQotICAgICAgICBmYWlsID0gb2JqLT5jbHMtPmRlZmF1bHRfcHJvcC5kZWwob2JqLCBwcm9wX25h
bWUpOworICAgICAgICBmYWlsID0gcHJvcC0+ZGVsKG9iamVjdCwgcHJvcC0+bmFtZSk7IC8vIENs
YXNzIGhhcyBwcm9wZXJ0eSBhbmQgcHJvcGVydHkgaGFzIGdldHRlci4KKyAgICBlbHNlIGlmIChv
YmplY3QtPmNscy0+ZGVmYXVsdF9wcm9wLmRlbCkKKyAgICAgICAgZmFpbCA9IG9iamVjdC0+Y2xz
LT5kZWZhdWx0X3Byb3AuZGVsKG9iamVjdCwgcHJvcF9uYW1lKTsKICAgICBlbHNlCi0gICAgICAg
IGZhaWwgPSBlaW5hX2hhc2hfZGVsKG9iai0+cHJvcGVydGllcywgcHJvcF9uYW1lLCAwKTsKKyAg
ICAgICAgZmFpbCA9IGVpbmFfaGFzaF9kZWwob2JqZWN0LT5wcm9wZXJ0aWVzLCBwcm9wX25hbWUs
IDApOwogCiAgICAgZnJlZShwcm9wX25hbWUpOwogICAgIHJldHVybiBmYWlsOwpAQCAtMjEyLDIy
ICsyMTIsMjIgQEAgc3RhdGljIGJvb2wgZXdrX2pzX3Byb3BlcnR5X3JlbW92ZShOUE9iamVjdCog
bnBPYmplY3QsIE5QSWRlbnRpZmllciBuYW1lKQogCiBzdGF0aWMgYm9vbCBld2tfanNfcHJvcGVy
dGllc19lbnVtZXJhdGUoTlBPYmplY3QqIG5wT2JqZWN0LCBOUElkZW50aWZpZXIqKiB2YWx1ZSwg
dWludDMyX3QqIGNvdW50KQogewotICAgIEV3a19KU19PYmplY3QqIG9iaiA9IHJlaW50ZXJwcmV0
X2Nhc3Q8RXdrX0pTX09iamVjdCo+KG5wT2JqZWN0KTsKKyAgICBFd2tfSlNfT2JqZWN0KiBvYmpl
Y3QgPSByZWludGVycHJldF9jYXN0PEV3a19KU19PYmplY3QqPihucE9iamVjdCk7CiAgICAgRWlu
YV9JdGVyYXRvciogaXQ7CiAgICAgY2hhcioga2V5OwogICAgIGludCBpID0gMDsKIAogICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChucE9iamVjdCwgZmFsc2UpOwotICAgIEVJTkFf
TUFHSUNfQ0hFQ0tfT1JfUkVUVVJOKG9iaiwgZmFsc2UpOworICAgIEVJTkFfTUFHSUNfQ0hFQ0tf
T1JfUkVUVVJOKG9iamVjdCwgZmFsc2UpOwogCi0gICAgKmNvdW50ID0gZWluYV9oYXNoX3BvcHVs
YXRpb24ob2JqLT5wcm9wZXJ0aWVzKTsKKyAgICAqY291bnQgPSBlaW5hX2hhc2hfcG9wdWxhdGlv
bihvYmplY3QtPnByb3BlcnRpZXMpOwogICAgICp2YWx1ZSA9IHN0YXRpY19jYXN0PE5QSWRlbnRp
Zmllcio+KG1hbGxvYyhzaXplb2YoTlBJZGVudGlmaWVyKSAqICpjb3VudCkpOwogICAgIGlmICgh
KnZhbHVlKSB7CiAgICAgICAgIEVSUigiQ291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgTlBJ
ZGVudGlmaWVyIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBpdCA9IGVp
bmFfaGFzaF9pdGVyYXRvcl9rZXlfbmV3KG9iai0+cHJvcGVydGllcyk7CisgICAgaXQgPSBlaW5h
X2hhc2hfaXRlcmF0b3Jfa2V5X25ldyhvYmplY3QtPnByb3BlcnRpZXMpOwogICAgIEVJTkFfSVRF
UkFUT1JfRk9SRUFDSChpdCwga2V5KQogICAgICAgICAoKnZhbHVlKVtpKytdID0gX05QTl9HZXRT
dHJpbmdJZGVudGlmaWVyKGtleSk7CiAKQEAgLTIzNywzNCArMjM3LDM0IEBAIHN0YXRpYyBib29s
IGV3a19qc19wcm9wZXJ0aWVzX2VudW1lcmF0ZShOUE9iamVjdCogbnBPYmplY3QsIE5QSWRlbnRp
ZmllcioqIHZhbHVlCiAKIHN0YXRpYyBib29sIGV3a19qc19tZXRob2RfaGFzKE5QT2JqZWN0KiBu
cE9iamVjdCwgTlBJZGVudGlmaWVyIG5hbWUpCiB7Ci0gICAgRXdrX0pTX09iamVjdCogb2JqID0g
cmVpbnRlcnByZXRfY2FzdDxFd2tfSlNfT2JqZWN0Kj4obnBPYmplY3QpOworICAgIEV3a19KU19P
YmplY3QqIG9iamVjdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8RXdrX0pTX09iamVjdCo+KG5wT2JqZWN0
KTsKIAogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChucE9iamVjdCwgZmFsc2Up
OwotICAgIEVJTkFfTUFHSUNfQ0hFQ0tfT1JfUkVUVVJOKG9iaiwgZmFsc2UpOworICAgIEVJTkFf
TUFHSUNfQ0hFQ0tfT1JfUkVUVVJOKG9iamVjdCwgZmFsc2UpOwogCiAgICAgaWYgKCFfTlBOX0lk
ZW50aWZpZXJJc1N0cmluZyhuYW1lKSkgewogICAgICAgICBFUlIoImludCBOUElkZW50aWZpZXIg
aXMgbm90IHN1cHBvcnRlZC4iKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBy
ZXR1cm4gZWluYV9oYXNoX2ZpbmQob2JqLT5jbHMtPm1ldGhvZHMsIG5hbWUpOyAvLyBSZXR1cm5z
IHBvaW50ZXIgaWYgZm91bmQodHJ1ZSksIDAoZmFsc2UpIG90aGVyd2lzZS4KKyAgICByZXR1cm4g
ZWluYV9oYXNoX2ZpbmQob2JqZWN0LT5jbHMtPm1ldGhvZHMsIG5hbWUpOyAvLyBSZXR1cm5zIHBv
aW50ZXIgaWYgZm91bmQodHJ1ZSksIDAoZmFsc2UpIG90aGVyd2lzZS4KIH0KIAogc3RhdGljIGJv
b2wgZXdrX2pzX21ldGhvZF9pbnZva2UoTlBPYmplY3QqIG5wT2JqZWN0LCBOUElkZW50aWZpZXIg
bmFtZSwgY29uc3QgTlBWYXJpYW50KiBucEFyZ3MsIHVpbnQzMl90IG5wQXJnQ291bnQsIE5QVmFy
aWFudCogcmVzdWx0KQogewotICAgIEV3a19KU19PYmplY3QqIG9iaiA9IHJlaW50ZXJwcmV0X2Nh
c3Q8RXdrX0pTX09iamVjdCo+KG5wT2JqZWN0KTsKKyAgICBFd2tfSlNfT2JqZWN0KiBvYmplY3Qg
PSByZWludGVycHJldF9jYXN0PEV3a19KU19PYmplY3QqPihucE9iamVjdCk7CiAgICAgRXdrX0pT
X01ldGhvZCogbWV0aG9kOwogICAgIEV3a19KU19WYXJpYW50KiBhcmdzOwogICAgIEV3a19KU19W
YXJpYW50KiByZXRfdmFsOwogCiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKG5w
T2JqZWN0LCBmYWxzZSk7Ci0gICAgRUlOQV9NQUdJQ19DSEVDS19PUl9SRVRVUk4ob2JqLCBmYWxz
ZSk7CisgICAgRUlOQV9NQUdJQ19DSEVDS19PUl9SRVRVUk4ob2JqZWN0LCBmYWxzZSk7CiAKICAg
ICBpZiAoIV9OUE5fSWRlbnRpZmllcklzU3RyaW5nKG5hbWUpKSB7CiAgICAgICAgIEVSUigiaW50
IE5QSWRlbnRpZmllciBpcyBub3Qgc3VwcG9ydGVkLiIpOwogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogCi0gICAgbWV0aG9kID0gc3RhdGljX2Nhc3Q8RXdrX0pTX01ldGhvZCo+KGVpbmFf
aGFzaF9maW5kKG9iai0+Y2xzLT5tZXRob2RzLCBuYW1lKSk7CisgICAgbWV0aG9kID0gc3RhdGlj
X2Nhc3Q8RXdrX0pTX01ldGhvZCo+KGVpbmFfaGFzaF9maW5kKG9iamVjdC0+Y2xzLT5tZXRob2Rz
LCBuYW1lKSk7CiAgICAgaWYgKCFtZXRob2QpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAt
Mjc2LDcgKzI3Niw3IEBAIHN0YXRpYyBib29sIGV3a19qc19tZXRob2RfaW52b2tlKE5QT2JqZWN0
KiBucE9iamVjdCwgTlBJZGVudGlmaWVyIG5hbWUsIGNvbnN0IE5QCiAKICAgICBmb3IgKHVpbnQz
Ml90IGkgPSAwOyBpIDwgbnBBcmdDb3VudDsgaSsrKQogICAgICAgICBld2tfanNfbnB2YXJpYW50
X3RvX3ZhcmlhbnQoJmFyZ3NbaV0sICZucEFyZ3NbaV0pOwotICAgIHJldF92YWwgPSBtZXRob2Qt
Pmludm9rZShvYmosIGFyZ3MsIG5wQXJnQ291bnQpOworICAgIHJldF92YWwgPSBtZXRob2QtPmlu
dm9rZShvYmplY3QsIGFyZ3MsIG5wQXJnQ291bnQpOwogICAgIGV3a19qc192YXJpYW50X3RvX25w
dmFyaWFudChyZXRfdmFsLCByZXN1bHQpOwogCiAgICAgZXdrX2pzX3ZhcmlhbnRfZnJlZShyZXRf
dmFsKTsKQEAgLTM5Myw3ICszOTMsNyBAQCBzdGF0aWMgRXdrX0pTX09iamVjdCogZXdrX2pzX25w
b2JqZWN0X3RvX29iamVjdChOUE9iamVjdCogbnBPYmplY3QpCiAgICAgTlBJZGVudGlmaWVyKiB2
YWx1ZXM7CiAgICAgdWludDMyX3QgbnBfcHJvcHNfY291bnQ7CiAgICAgRXdrX0pTX0NsYXNzKiBj
bHM7Ci0gICAgRXdrX0pTX09iamVjdCogb2JqOworICAgIEV3a19KU19PYmplY3QqIG9iamVjdDsK
ICAgICBFaW5hX0l0ZXJhdG9yKiBpdDsKICAgICBFd2tfSlNfUHJvcGVydHkqIHByb3A7CiAgICAg
SmF2YVNjcmlwdE9iamVjdCoganNvOwpAQCAtNDM2LDQyICs0MzYsNDIgQEAgc3RhdGljIEV3a19K
U19PYmplY3QqIGV3a19qc19ucG9iamVjdF90b19vYmplY3QoTlBPYmplY3QqIG5wT2JqZWN0KQog
ICAgIH0KIAogICAgIC8vIENhbid0IHVzZSBld2tfanNfb2JqZWN0X25ldyhjbHMpIGJlY2F1c2Ug
aXQgZXhwZWN0cyBjbHMtPm1ldGEgdG8gZXhpc3QuCi0gICAgb2JqID0gc3RhdGljX2Nhc3Q8RXdr
X0pTX09iamVjdCo+KG1hbGxvYyhzaXplb2YoRXdrX0pTX09iamVjdCkpKTsKLSAgICBpZiAoIW9i
aikgeworICAgIG9iamVjdCA9IHN0YXRpY19jYXN0PEV3a19KU19PYmplY3QqPihtYWxsb2Moc2l6
ZW9mKEV3a19KU19PYmplY3QpKSk7CisgICAgaWYgKCFvYmplY3QpIHsKICAgICAgICAgRVJSKCJD
b3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBld2tfanNfb2JqZWN0Iik7CiAgICAgICAgIGdv
dG8gZXJyb3I7CiAgICAgfQogCiAgICAgZnJlZSh2YWx1ZXMpOwotICAgIEVJTkFfTUFHSUNfU0VU
KG9iaiwgRVdLX0pTX09CSkVDVF9NQUdJQyk7Ci0gICAgb2JqLT5uYW1lID0gMDsKLSAgICBvYmot
PmNscyA9IGNsczsKLSAgICBvYmotPnZpZXcgPSAwOworICAgIEVJTkFfTUFHSUNfU0VUKG9iamVj
dCwgRVdLX0pTX09CSkVDVF9NQUdJQyk7CisgICAgb2JqZWN0LT5uYW1lID0gMDsKKyAgICBvYmpl
Y3QtPmNscyA9IGNsczsKKyAgICBvYmplY3QtPnZpZXcgPSAwOwogCiAgICAganNvID0gcmVpbnRl
cnByZXRfY2FzdDxKYXZhU2NyaXB0T2JqZWN0Kj4obnBPYmplY3QpOwogICAgIGlmICghc3RyY21w
KCJBcnJheSIsIGpzby0+aW1wLT5jbGFzc05hbWUoKS5hc2NpaSgpLmRhdGEoKSkpCi0gICAgICAg
IG9iai0+dHlwZSA9IEVXS19KU19PQkpFQ1RfQVJSQVk7CisgICAgICAgIG9iamVjdC0+dHlwZSA9
IEVXS19KU19PQkpFQ1RfQVJSQVk7CiAgICAgZWxzZSBpZiAoIXN0cmNtcCgiRnVuY3Rpb24iLCBq
c28tPmltcC0+Y2xhc3NOYW1lKCkuYXNjaWkoKS5kYXRhKCkpKQotICAgICAgICBvYmotPnR5cGUg
PSBFV0tfSlNfT0JKRUNUX0ZVTkNUSU9OOworICAgICAgICBvYmplY3QtPnR5cGUgPSBFV0tfSlNf
T0JKRUNUX0ZVTkNUSU9OOwogICAgIGVsc2UKLSAgICAgICAgb2JqLT50eXBlID0gRVdLX0pTX09C
SkVDVF9PQkpFQ1Q7CisgICAgICAgIG9iamVjdC0+dHlwZSA9IEVXS19KU19PQkpFQ1RfT0JKRUNU
OwogCiAgICAgaWYgKGVpbmFfaGFzaF9wb3B1bGF0aW9uKGNscy0+cHJvcGVydGllcykgPCAyNSkK
LSAgICAgICAgb2JqLT5wcm9wZXJ0aWVzID0gZWluYV9oYXNoX3N0cmluZ19zbWFsbF9uZXcoMCk7
CisgICAgICAgIG9iamVjdC0+cHJvcGVydGllcyA9IGVpbmFfaGFzaF9zdHJpbmdfc21hbGxfbmV3
KDApOwogICAgIGVsc2UKLSAgICAgICAgb2JqLT5wcm9wZXJ0aWVzID0gZWluYV9oYXNoX3N0cmlu
Z19zdXBlcmZhc3RfbmV3KDApOworICAgICAgICBvYmplY3QtPnByb3BlcnRpZXMgPSBlaW5hX2hh
c2hfc3RyaW5nX3N1cGVyZmFzdF9uZXcoMCk7CiAKICAgICBpdCA9IGVpbmFfaGFzaF9pdGVyYXRv
cl9kYXRhX25ldyhjbHMtPnByb3BlcnRpZXMpOwogICAgIEVJTkFfSVRFUkFUT1JfRk9SRUFDSChp
dCwgcHJvcCkgewogICAgICAgICBjb25zdCBjaGFyKiBrZXkgPSBwcm9wLT5uYW1lOwogICAgICAg
ICBFd2tfSlNfVmFyaWFudCogdmFsdWUgPSAmcHJvcC0+dmFsdWU7Ci0gICAgICAgIGVpbmFfaGFz
aF9hZGQob2JqLT5wcm9wZXJ0aWVzLCBrZXksIHZhbHVlKTsKKyAgICAgICAgZWluYV9oYXNoX2Fk
ZChvYmplY3QtPnByb3BlcnRpZXMsIGtleSwgdmFsdWUpOwogICAgIH0KIAogICAgIGVpbmFfaXRl
cmF0b3JfZnJlZShpdCk7Ci0gICAgb2JqLT5iYXNlID0gKnJlaW50ZXJwcmV0X2Nhc3Q8SmF2YVNj
cmlwdE9iamVjdCo+KG5wT2JqZWN0KTsKKyAgICBvYmplY3QtPmJhc2UgPSAqcmVpbnRlcnByZXRf
Y2FzdDxKYXZhU2NyaXB0T2JqZWN0Kj4obnBPYmplY3QpOwogCi0gICAgcmV0dXJuIG9iajsKKyAg
ICByZXR1cm4gb2JqZWN0OwogCiBlcnJvcjoKICAgICBld2tfanNfY2xhc3NfZnJlZShjbHMpOwpA
QCAtNTI3LDM3ICs1MjcsMzcgQEAgc3RhdGljIEVpbmFfQm9vbCBld2tfanNfbnB2YXJpYW50X3Rv
X3ZhcmlhbnQoRXdrX0pTX1ZhcmlhbnQqIGRhdGEsIGNvbnN0IE5QVmFyaWEKIAogRXdrX0pTX09i
amVjdCogZXdrX2pzX29iamVjdF9uZXcoY29uc3QgRXdrX0pTX0NsYXNzX01ldGEqIGpzTWV0YUNs
YXNzKQogewotICAgIEV3a19KU19PYmplY3QqIG9iajsKKyAgICBFd2tfSlNfT2JqZWN0KiBvYmpl
Y3Q7CiAKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwobWV0YV9jbHMsIDApOwog
Ci0gICAgb2JqID0gc3RhdGljX2Nhc3Q8RXdrX0pTX09iamVjdCo+KG1hbGxvYyhzaXplb2YoRXdr
X0pTX09iamVjdCkpKTsKLSAgICBpZiAoIW9iaikgeworICAgIG9iamVjdCA9IHN0YXRpY19jYXN0
PEV3a19KU19PYmplY3QqPihtYWxsb2Moc2l6ZW9mKEV3a19KU19PYmplY3QpKSk7CisgICAgaWYg
KCFvYmplY3QpIHsKICAgICAgICAgRVJSKCJDb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBl
d2tfanNfb2JqZWN0Iik7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIEVJTkFfTUFH
SUNfU0VUKG9iaiwgRVdLX0pTX09CSkVDVF9NQUdJQyk7Ci0gICAgb2JqLT5jbHMgPSBld2tfanNf
Y2xhc3NfbmV3KGpzTWV0YUNsYXNzKTsKLSAgICBvYmotPnZpZXcgPSAwOwotICAgIG9iai0+bmFt
ZSA9IDA7Ci0gICAgb2JqLT50eXBlID0gRVdLX0pTX09CSkVDVF9PQkpFQ1Q7CisgICAgRUlOQV9N
QUdJQ19TRVQob2JqZWN0LCBFV0tfSlNfT0JKRUNUX01BR0lDKTsKKyAgICBvYmplY3QtPmNscyA9
IGV3a19qc19jbGFzc19uZXcoanNNZXRhQ2xhc3MpOworICAgIG9iamVjdC0+dmlldyA9IDA7Cisg
ICAgb2JqZWN0LT5uYW1lID0gMDsKKyAgICBvYmplY3QtPnR5cGUgPSBFV0tfSlNfT0JKRUNUX09C
SkVDVDsKIAotICAgIGlmIChlaW5hX2hhc2hfcG9wdWxhdGlvbihvYmotPmNscy0+cHJvcGVydGll
cykgPCAyNSkKLSAgICAgICAgb2JqLT5wcm9wZXJ0aWVzID0gZWluYV9oYXNoX3N0cmluZ19zbWFs
bF9uZXcocmVpbnRlcnByZXRfY2FzdDxFaW5hX0ZyZWVfQ2I+KGV3a19qc192YXJpYW50X2ZyZWUp
KTsKKyAgICBpZiAoZWluYV9oYXNoX3BvcHVsYXRpb24ob2JqZWN0LT5jbHMtPnByb3BlcnRpZXMp
IDwgMjUpCisgICAgICAgIG9iamVjdC0+cHJvcGVydGllcyA9IGVpbmFfaGFzaF9zdHJpbmdfc21h
bGxfbmV3KHJlaW50ZXJwcmV0X2Nhc3Q8RWluYV9GcmVlX0NiPihld2tfanNfdmFyaWFudF9mcmVl
KSk7CiAgICAgZWxzZQotICAgICAgICBvYmotPnByb3BlcnRpZXMgPSBlaW5hX2hhc2hfc3RyaW5n
X3N1cGVyZmFzdF9uZXcocmVpbnRlcnByZXRfY2FzdDxFaW5hX0ZyZWVfQ2I+KGV3a19qc192YXJp
YW50X2ZyZWUpKTsKKyAgICAgICAgb2JqZWN0LT5wcm9wZXJ0aWVzID0gZWluYV9oYXNoX3N0cmlu
Z19zdXBlcmZhc3RfbmV3KHJlaW50ZXJwcmV0X2Nhc3Q8RWluYV9GcmVlX0NiPihld2tfanNfdmFy
aWFudF9mcmVlKSk7CiAKLSAgICBmb3IgKGludCBpID0gMDsgb2JqLT5jbHMtPm1ldGEtPnByb3Bl
cnRpZXMgJiYgb2JqLT5jbHMtPm1ldGEtPnByb3BlcnRpZXNbaV0ubmFtZTsgaSsrKSB7Ci0gICAg
ICAgIEV3a19KU19Qcm9wZXJ0eSBwcm9wID0gb2JqLT5jbHMtPm1ldGEtPnByb3BlcnRpZXNbaV07
Ci0gICAgICAgIGNvbnN0IGNoYXIqIGtleSA9IG9iai0+Y2xzLT5tZXRhLT5wcm9wZXJ0aWVzW2ld
Lm5hbWU7CisgICAgZm9yIChpbnQgaSA9IDA7IG9iamVjdC0+Y2xzLT5tZXRhLT5wcm9wZXJ0aWVz
ICYmIG9iamVjdC0+Y2xzLT5tZXRhLT5wcm9wZXJ0aWVzW2ldLm5hbWU7IGkrKykgeworICAgICAg
ICBFd2tfSlNfUHJvcGVydHkgcHJvcCA9IG9iamVjdC0+Y2xzLT5tZXRhLT5wcm9wZXJ0aWVzW2ld
OworICAgICAgICBjb25zdCBjaGFyKiBrZXkgPSBvYmplY3QtPmNscy0+bWV0YS0+cHJvcGVydGll
c1tpXS5uYW1lOwogICAgICAgICBFd2tfSlNfVmFyaWFudCogdmFsdWUgPSBzdGF0aWNfY2FzdDxF
d2tfSlNfVmFyaWFudCo+KG1hbGxvYyhzaXplb2YoRXdrX0pTX1ZhcmlhbnQpKSk7CiAgICAgICAg
IGlmICghdmFsdWUpIHsKICAgICAgICAgICAgIEVSUigiQ291bGQgbm90IGFsbG9jYXRlIG1lbW9y
eSBmb3IgZXdrX2pzX3ZhcmlhbnQiKTsKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAg
IH0KICAgICAgICAgaWYgKHByb3AuZ2V0KQotICAgICAgICAgICAgcHJvcC5nZXQob2JqLCBrZXks
IHZhbHVlKTsKKyAgICAgICAgICAgIHByb3AuZ2V0KG9iamVjdCwga2V5LCB2YWx1ZSk7CiAgICAg
ICAgIGVsc2UgewogICAgICAgICAgICAgdmFsdWUtPnR5cGUgPSBwcm9wLnZhbHVlLnR5cGU7CiAg
ICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLT50eXBlKSB7CkBAIC01ODIsMTUgKzU4MiwxNSBAQCBF
d2tfSlNfT2JqZWN0KiBld2tfanNfb2JqZWN0X25ldyhjb25zdCBFd2tfSlNfQ2xhc3NfTWV0YSog
anNNZXRhQ2xhc3MpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KLSAgICAgICAgZWluYV9oYXNoX2FkZChvYmotPnByb3BlcnRpZXMsIGtleSwgdmFsdWUp
OworICAgICAgICBlaW5hX2hhc2hfYWRkKG9iamVjdC0+cHJvcGVydGllcywga2V5LCB2YWx1ZSk7
CiAgICAgfQogCi0gICAgb2JqLT5iYXNlLm9iamVjdC5yZWZlcmVuY2VDb3VudCA9IDE7Ci0gICAg
b2JqLT5iYXNlLm9iamVjdC5fY2xhc3MgPSAmRVdLX05QQ0xBU1M7Ci0gICAgcmV0dXJuIG9iajsK
KyAgICBvYmplY3QtPmJhc2Uub2JqZWN0LnJlZmVyZW5jZUNvdW50ID0gMTsKKyAgICBvYmplY3Qt
PmJhc2Uub2JqZWN0Ll9jbGFzcyA9ICZFV0tfTlBDTEFTUzsKKyAgICByZXR1cm4gb2JqZWN0Owog
CiBlcnJvcjoKLSAgICBld2tfanNfb2JqZWN0X2ZyZWUob2JqKTsKKyAgICBld2tfanNfb2JqZWN0
X2ZyZWUob2JqZWN0KTsKICAgICByZXR1cm4gMDsKIH0KIApAQCAtNjYyLDcgKzY2Miw3IEBAIEV3
a19KU19PYmplY3RfVHlwZSBld2tfanNfb2JqZWN0X3R5cGVfZ2V0KEV3a19KU19PYmplY3QqIGpz
T2JqZWN0KQogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChqc09iamVjdCwgRVdL
X0pTX09CSkVDVF9PQkpFQ1QpOwogICAgIEVJTkFfTUFHSUNfQ0hFQ0tfT1JfUkVUVVJOKGpzT29i
amVjdCwgRVdLX0pTX09CSkVDVF9PQkpFQ1QpOwogCi0gICAgcmV0dXJuIG9iai0+dHlwZTsKKyAg
ICByZXR1cm4gb2JqZWN0LT50eXBlOwogfQogCiB2b2lkIGV3a19qc19vYmplY3RfdHlwZV9zZXQo
RXdrX0pTX09iamVjdCoganNPYmplY3QsIEV3a19KU19PYmplY3RfVHlwZSB0eXBlKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19tYWluLmNwcCBiL1NvdXJjZS9XZWJLaXQv
ZWZsL2V3ay9ld2tfbWFpbi5jcHAKaW5kZXggZWIwMzIzMzI0YmFlODFmZTEyOGQ2OGI4MTdhOWVi
YTY4ZjFmNGE2Yi4uYzUyYzAyYjA5ZjkxNTM2YTMyMjgxODg2ZGViM2ZiYjM1YmUwM2ViMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19tYWluLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2VmbC9ld2svZXdrX21haW4uY3BwCkBAIC01Nyw3ICs1Nyw3IEBACiAjaW5jbHVkZSA8
bGlic291cC9zb3VwLmg+CiAjZW5kaWYKIAotc3RhdGljIGludCBfZXdrX2luaXRfY291bnQgPSAw
Oworc3RhdGljIGludCBfZXdrSW5pdENvdW50ID0gMDsKIAogLyoqCiAgKiBcdmFyICAgICBfZXdr
X2xvZ19kb20KQEAgLTY5LDggKzY5LDggQEAgc3RhdGljIEVpbmFfQm9vbCBfZXdrX2luaXRfYm9k
eSh2b2lkKTsKIAogaW50IGV3a19pbml0KHZvaWQpCiB7Ci0gICAgaWYgKF9ld2tfaW5pdF9jb3Vu
dCkKLSAgICAgICAgcmV0dXJuICsrX2V3a19pbml0X2NvdW50OworICAgIGlmIChfZXdrSW5pdENv
dW50KQorICAgICAgICByZXR1cm4gKytfZXdrSW5pdENvdW50OwogCiAgICAgaWYgKCFlaW5hX2lu
aXQoKSkKICAgICAgICAgZ290byBlcnJvcl9laW5hOwpAQCAtMTA2LDcgKzEwNiw3IEBAIGludCBl
d2tfaW5pdCh2b2lkKQogICAgICAgICBnb3RvIGVycm9yX2VkamU7CiAgICAgfQogCi0gICAgcmV0
dXJuICsrX2V3a19pbml0X2NvdW50OworICAgIHJldHVybiArK19ld2tJbml0Q291bnQ7CiAKIGVy
cm9yX2VkamU6CiAgICAgZWNvcmVfZXZhc19zaHV0ZG93bigpOwpAQCAtMTI1LDkgKzEyNSw5IEBA
IGVycm9yX2VpbmE6CiAKIGludCBld2tfc2h1dGRvd24odm9pZCkKIHsKLSAgICBfZXdrX2luaXRf
Y291bnQtLTsKLSAgICBpZiAoX2V3a19pbml0X2NvdW50KQotICAgICAgICByZXR1cm4gX2V3a19p
bml0X2NvdW50OworICAgIF9ld2tJbml0Q291bnQtLTsKKyAgICBpZiAoX2V3a0luaXRDb3VudCkK
KyAgICAgICAgcmV0dXJuIF9ld2tJbml0Q291bnQ7CiAKICAgICBlY29yZV9ldmFzX3NodXRkb3du
KCk7CiAgICAgZWNvcmVfc2h1dGRvd24oKTsKQEAgLTE3OSwxMCArMTc5LDEwIEBAIEVpbmFfQm9v
bCBfZXdrX2luaXRfYm9keSh2b2lkKQogICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKICAgICB9
CiAKLSAgICBXVEY6OlN0cmluZyB3a2RpciA9IGhvbWUgKyAiLy53ZWJraXQiOwotICAgIGlmIChX
ZWJDb3JlOjptYWtlQWxsRGlyZWN0b3JpZXMod2tkaXIpKSB7Ci0gICAgICAgIGV3a19zZXR0aW5n
c193ZWJfZGF0YWJhc2VfcGF0aF9zZXQod2tkaXIudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIGV3
a19zZXR0aW5nc19jYWNoZV9kaXJlY3RvcnlfcGF0aF9zZXQod2tkaXIudXRmOCgpLmRhdGEoKSk7
CisgICAgV1RGOjpTdHJpbmcgd2Via2l0RGlyZWN0b3J5ID0gaG9tZSArICIvLndlYmtpdCI7Cisg
ICAgaWYgKFdlYkNvcmU6Om1ha2VBbGxEaXJlY3Rvcmllcyh3ZWJraXREaXJlY3RvcnkpKSB7Cisg
ICAgICAgIGV3a19zZXR0aW5nc193ZWJfZGF0YWJhc2VfcGF0aF9zZXQod2Via2l0RGlyZWN0b3J5
LnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBld2tfc2V0dGluZ3NfY2FjaGVfZGlyZWN0b3J5X3Bh
dGhfc2V0KHdlYmtpdERpcmVjdG9yeS51dGY4KCkuZGF0YSgpKTsKICAgICB9CiAKICAgICAvLyBU
T0RPOiB0aGlzIHNob3VsZCBtb3ZlIHRvIFdlYkNvcmUsIGFscmVhZHkgcmVwb3J0ZWQgdG8gd2Vi
a2l0LWd0ayBmb2xrczoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfc2V0
dGluZ3MuY3BwIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19zZXR0aW5ncy5jcHAKaW5kZXgg
ZjBiYTZlYmNiMmY3ZTVkYzExMWZlYzQ1YjVmNmNjZDUwMzk4M2VhNi4uNjRmMTRmODU0YzNkNzBh
M2JkYTgwYmIxNjRjODZjZDExY2U2ZjBlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwv
ZXdrL2V3a19zZXR0aW5ncy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19zZXR0
aW5ncy5jcHAKQEAgLTU2LDI2ICs1NiwyNiBAQCBzdGF0aWMgdWludDY0X3QgX2V3a19kZWZhdWx0
X3dlYl9kYXRhYmFzZV9xdW90YSA9IDEgKiAxMDI0ICogMTAyNDsKIAogc3RhdGljIFdURjo6U3Ry
aW5nIF9ld2tfc2V0dGluZ3Nfd2Via2l0X3BsYXRmb3JtX2dldCgpCiB7Ci0gICAgV1RGOjpTdHJp
bmcgdWFfcGxhdGZvcm07CisgICAgV1RGOjpTdHJpbmcgdWFQbGF0Zm9ybTsKICNpZiBQTEFURk9S
TShYMTEpCi0gICAgdWFfcGxhdGZvcm0gPSAiWDExIjsKKyAgICB1YVBsYXRmb3JtID0gIlgxMSI7
CiAjZWxzZQotICAgIHVhX3BsYXRmb3JtID0gIlVua25vd24iOworICAgIHVhUGxhdGZvcm0gPSAi
VW5rbm93biI7CiAjZW5kaWYKLSAgICByZXR1cm4gdWFfcGxhdGZvcm07CisgICAgcmV0dXJuIHVh
UGxhdGZvcm07CiB9CiAKIHN0YXRpYyBXVEY6OlN0cmluZyBfZXdrX3NldHRpbmdzX3dlYmtpdF9v
c192ZXJzaW9uX2dldCgpCiB7Ci0gICAgV1RGOjpTdHJpbmcgdWFfb3NfdmVyc2lvbjsKKyAgICBX
VEY6OlN0cmluZyB1YU9zVmVyc2lvbjsKICAgICBzdHJ1Y3QgdXRzbmFtZSBuYW1lOwogCiAgICAg
aWYgKHVuYW1lKCZuYW1lKSAhPSAtMSkKLSAgICAgICAgdWFfb3NfdmVyc2lvbiA9IG1ha2VTdHJp
bmcobmFtZS5zeXNuYW1lLCAnICcsIG5hbWUubWFjaGluZSk7CisgICAgICAgIHVhT3NWZXJzaW9u
ID0gbWFrZVN0cmluZyhuYW1lLnN5c25hbWUsICcgJywgbmFtZS5tYWNoaW5lKTsKICAgICBlbHNl
Ci0gICAgICAgIHVhX29zX3ZlcnNpb24gPSAiVW5rbm93biI7CisgICAgICAgIHVhT3NWZXJzaW9u
ID0gIlVua25vd24iOwogCi0gICAgcmV0dXJuIHVhX29zX3ZlcnNpb247CisgICAgcmV0dXJuIHVh
T3NWZXJzaW9uOwogfQogCiB1aW50NjRfdCBld2tfc2V0dGluZ3Nfd2ViX2RhdGFiYXNlX2RlZmF1
bHRfcXVvdGFfZ2V0KCkKQEAgLTI0NSwxMCArMjQ1LDEwIEBAIHZvaWQgZXdrX3NldHRpbmdzX3Jl
cGFpbnRfdGhyb3R0bGluZ19zZXQoZG91YmxlIGRlZmVycmVkUmVwYWludERlbGF5LCBkb3VibGUg
aW5pCiAgKi8KIGNvbnN0IGNoYXIqIGV3a19zZXR0aW5nc19kZWZhdWx0X3VzZXJfYWdlbnRfZ2V0
KHZvaWQpCiB7Ci0gICAgV1RGOjpTdHJpbmcgdWFfdmVyc2lvbiA9IG1ha2VTdHJpbmcoU3RyaW5n
OjpudW1iZXIoV0VCS0lUX1VTRVJfQUdFTlRfTUFKT1JfVkVSU0lPTiksICcuJywgU3RyaW5nOjpu
dW1iZXIoV0VCS0lUX1VTRVJfQUdFTlRfTUlOT1JfVkVSU0lPTiksICcrJyk7Ci0gICAgV1RGOjpT
dHJpbmcgc3RhdGljX3VhID0gbWFrZVN0cmluZygiTW96aWxsYS81LjAgKCIsIF9ld2tfc2V0dGlu
Z3Nfd2Via2l0X3BsYXRmb3JtX2dldCgpLCAiOyAiLCBfZXdrX3NldHRpbmdzX3dlYmtpdF9vc192
ZXJzaW9uX2dldCgpLCAiKSBBcHBsZVdlYktpdC8iLCB1YV92ZXJzaW9uKSArIG1ha2VTdHJpbmco
IiAoS0hUTUwsIGxpa2UgR2Vja28pIFZlcnNpb24vNS4wIFNhZmFyaS8iLCB1YV92ZXJzaW9uKTsK
KyAgICBXVEY6OlN0cmluZyB1YVZlcnNpb24gPSBtYWtlU3RyaW5nKFN0cmluZzo6bnVtYmVyKFdF
QktJVF9VU0VSX0FHRU5UX01BSk9SX1ZFUlNJT04pLCAnLicsIFN0cmluZzo6bnVtYmVyKFdFQktJ
VF9VU0VSX0FHRU5UX01JTk9SX1ZFUlNJT04pLCAnKycpOworICAgIFdURjo6U3RyaW5nIHN0YXRp
Y1VhID0gbWFrZVN0cmluZygiTW96aWxsYS81LjAgKCIsIF9ld2tfc2V0dGluZ3Nfd2Via2l0X3Bs
YXRmb3JtX2dldCgpLCAiOyAiLCBfZXdrX3NldHRpbmdzX3dlYmtpdF9vc192ZXJzaW9uX2dldCgp
LCAiKSBBcHBsZVdlYktpdC8iLCB1YVZlcnNpb24pICsgbWFrZVN0cmluZygiIChLSFRNTCwgbGlr
ZSBHZWNrbykgVmVyc2lvbi81LjAgU2FmYXJpLyIsIHVhVmVyc2lvbik7CiAKLSAgICByZXR1cm4g
ZWluYV9zdHJpbmdzaGFyZV9hZGQoc3RhdGljX3VhLnV0ZjgoKS5kYXRhKCkpOworICAgIHJldHVy
biBlaW5hX3N0cmluZ3NoYXJlX2FkZChzdGF0aWNVYS51dGY4KCkuZGF0YSgpKTsKIH0KIAogRWlu
YV9Cb29sIGV3a19zZXR0aW5nc19jYWNoZV9kaXJlY3RvcnlfcGF0aF9zZXQoY29uc3QgY2hhciog
cGF0aCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmUuY3BwCmluZGV4IDc5NGE5MGM1NzQ2ZjYwZTUyM2I2ZGU1ZTI1MmJiY2IwNTFiMDc1NjQuLjIw
NGVhZGYwNjI5OTA3MmU5MzgxYjE2MTM4MjAzNzExYWQ1OTgzMzMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfYmFja2luZ19zdG9yZS5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9lZmwvZXdrL2V3a190aWxlZF9iYWNraW5nX3N0b3JlLmNwcApAQCAtNTUsMTQgKzU1
LDE0IEBAIHN0cnVjdCBfRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSB7CiAKIHN0cnVjdCBf
RXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0IHsKICAgICBFSU5BX0lO
TElTVDsKLSAgICB1bnNpZ25lZCBsb25nIGNvbCwgcm93OworICAgIHVuc2lnbmVkIGxvbmcgY29s
dW1uLCByb3c7CiAgICAgZmxvYXQgem9vbTsKIH07CiAKIHN0cnVjdCBfRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfRGF0YSB7CiAgICAgRXZhc19PYmplY3RfU21hcnRfQ2xpcHBlZF9EYXRhIGJhc2U7
CiAgICAgRXZhc19PYmplY3QqIHNlbGY7Ci0gICAgRXZhc19PYmplY3QqIGNvbnRlbnRzX2NsaXBw
ZXI7CisgICAgRXZhc19PYmplY3QqIGNvbnRlbnRzQ2xpcHBlcjsKICAgICBzdHJ1Y3QgewogICAg
ICAgICBFaW5hX0lubGlzdCoqIGl0ZW1zOwogICAgICAgICBFdmFzX0Nvb3JkIHgsIHksIHdpZHRo
LCBoZWlnaHQ7CkBAIC03MCw0MiArNzAsNDIgQEAgc3RydWN0IF9Fd2tfVGlsZWRfQmFja2luZ19T
dG9yZV9EYXRhIHsKICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgIEV2YXNfQ29vcmQgd2lk
dGgsIGhlaWdodDsKICAgICAgICAgICAgIGZsb2F0IHpvb207Ci0gICAgICAgICAgICBFaW5hX0Jv
b2wgem9vbV93ZWFrX3Ntb290aF9zY2FsZSA6IDE7CisgICAgICAgICAgICBFaW5hX0Jvb2wgem9v
bVdlYWtTbW9vdGhTY2FsZSA6IDE7CiAgICAgICAgIH0gdGlsZTsKICAgICAgICAgc3RydWN0IHsK
ICAgICAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICAgRXZhc19Db29yZCB4LCB5Owot
ICAgICAgICAgICAgfSBjdXIsIG9sZCwgYmFzZSwgem9vbV9jZW50ZXI7CisgICAgICAgICAgICB9
IGN1ciwgb2xkLCBiYXNlLCB6b29tQ2VudGVyOwogICAgICAgICB9IG9mZnNldDsKICAgICB9IHZp
ZXc7Ci0gICAgRXZhc19Db2xvcnNwYWNlIGNzcGFjZTsKKyAgICBFdmFzX0NvbG9yc3BhY2UgY29s
b3JTcGFjZTsKICAgICBzdHJ1Y3QgewogICAgICAgICBFd2tfVGlsZV9NYXRyaXgqIG1hdHJpeDsK
ICAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgY29sLCByb3c7Cisg
ICAgICAgICAgICB1bnNpZ25lZCBsb25nIGNvbHVtbiwgcm93OwogICAgICAgICB9IGJhc2U7CiAg
ICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBsb25nIGNvbHMsIHJvd3M7Ci0g
ICAgICAgIH0gY3VyLCBvbGQ7CisgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGNvbHVtbnMsIHJv
d3M7CisgICAgICAgIH0gY3VycmVudCwgb2xkOwogICAgICAgICBFdmFzX0Nvb3JkIHdpZHRoLCBo
ZWlnaHQ7CiAgICAgfSBtb2RlbDsKICAgICBzdHJ1Y3QgewotICAgICAgICBFaW5hX0Jvb2wgKCpj
Yikodm9pZCogZGF0YSwgRXdrX1RpbGUqIHRpbGUsIGNvbnN0IEVpbmFfUmVjdGFuZ2xlKiBhcmVh
KTsKKyAgICAgICAgRWluYV9Cb29sICgqY2FsbGJhY2spKHZvaWQqIGRhdGEsIEV3a19UaWxlKiB0
aWxlLCBjb25zdCBFaW5hX1JlY3RhbmdsZSogYXJlYSk7CiAgICAgICAgIHZvaWQqIGRhdGE7Ci0g
ICAgICAgIEVpbmFfSW5saXN0KiBwcmVfcmVuZGVyX3JlcXVlc3RzOworICAgICAgICBFaW5hX0lu
bGlzdCogcHJlUmVuZGVyUmVxdWVzdHM7CiAgICAgICAgIEVjb3JlX0lkbGVyKiBpZGxlcjsKICAg
ICAgICAgRWluYV9Cb29sIGRpc2FibGVkOwogICAgICAgICBFaW5hX0Jvb2wgc3VzcGVuZCA6IDE7
CiAgICAgfSByZW5kZXI7CiAgICAgc3RydWN0IHsKLSAgICAgICAgdm9pZCogKCpwcmVfY2IpKHZv
aWQqIGRhdGEsIEV2YXNfT2JqZWN0KiBld2tUaWxlKTsKLSAgICAgICAgdm9pZCogcHJlX2RhdGE7
Ci0gICAgICAgIHZvaWQqICgqcG9zdF9jYikodm9pZCogZGF0YSwgdm9pZCogcHJlX2RhdGEsIEV2
YXNfT2JqZWN0KiBld2tUaWxlKTsKLSAgICAgICAgdm9pZCogcG9zdF9kYXRhOworICAgICAgICB2
b2lkKiAoKnByZUNhbGxiYWNrKSh2b2lkKiBkYXRhLCBFdmFzX09iamVjdCogZXdrVGlsZSk7Cisg
ICAgICAgIHZvaWQqIHByZURhdGE7CisgICAgICAgIHZvaWQqICgqcG9zdENhbGxiYWNrKSh2b2lk
KiBkYXRhLCB2b2lkKiBwcmVEYXRhLCBFdmFzX09iamVjdCogZXdrVGlsZSk7CisgICAgICAgIHZv
aWQqIHBvc3REYXRhOwogICAgIH0gcHJvY2VzczsKICAgICBzdHJ1Y3QgewogICAgICAgICBFaW5h
X0Jvb2wgYW55IDogMTsKLSAgICAgICAgRWluYV9Cb29sIHBvcyA6IDE7CisgICAgICAgIEVpbmFf
Qm9vbCBwb3NpdGlvbiA6IDE7CiAgICAgICAgIEVpbmFfQm9vbCBzaXplIDogMTsKICAgICAgICAg
RWluYV9Cb29sIG1vZGVsIDogMTsKICAgICAgICAgRWluYV9Cb29sIG9mZnNldCA6IDE7CkBAIC0x
NDAsMjMgKzE0MCwyMyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX3VwZGF0ZXNfcHJvY2VzcyhFd2tfVGlsZWRfQmFja2luZ19TdAogICAgIGlmIChwcml2LT5y
ZW5kZXIuc3VzcGVuZCB8fCAhZXZhc19vYmplY3RfdmlzaWJsZV9nZXQocHJpdi0+c2VsZikpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGlmIChwcml2LT5wcm9jZXNzLnByZV9jYikKLSAgICAgICAg
ZGF0YSA9IHByaXYtPnByb2Nlc3MucHJlX2NiKHByaXYtPnByb2Nlc3MucHJlX2RhdGEsIHByaXYt
PnNlbGYpOworICAgIGlmIChwcml2LT5wcm9jZXNzLnByZUNhbGxiYWNrKQorICAgICAgICBkYXRh
ID0gcHJpdi0+cHJvY2Vzcy5wcmVDYWxsYmFjayhwcml2LT5wcm9jZXNzLnByZURhdGEsIHByaXYt
PnNlbGYpOwogCiAgICAgZXdrX3RpbGVfbWF0cml4X3VwZGF0ZXNfcHJvY2Vzcyhwcml2LT5tb2Rl
bC5tYXRyaXgpOwogCi0gICAgaWYgKHByaXYtPnByb2Nlc3MucG9zdF9jYikKLSAgICAgICAgcHJp
di0+cHJvY2Vzcy5wb3N0X2NiKHByaXYtPnByb2Nlc3MucG9zdF9kYXRhLCBkYXRhLCBwcml2LT5z
ZWxmKTsKKyAgICBpZiAocHJpdi0+cHJvY2Vzcy5wb3N0Q2FsbGJhY2spCisgICAgICAgIHByaXYt
PnByb2Nlc3MucG9zdENhbGxiYWNrKHByaXYtPnByb2Nlc3MucG9zdERhdGEsIGRhdGEsIHByaXYt
PnNlbGYpOwogfQogCiBzdGF0aWMgaW50IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9mbHVzaCh2
b2lkKiBkYXRhKQogewogICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYgPSBz
dGF0aWNfY2FzdDxFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKj4oZGF0YSk7Ci0gICAgRXdr
X1RpbGVfVW51c2VkX0NhY2hlKiB0dWMgPSBld2tfdGlsZV9tYXRyaXhfdW51c2VkX2NhY2hlX2dl
dChwcml2LT5tb2RlbC5tYXRyaXgpOworICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSogdGlsZWRV
bnVzZWRDYWNoZSA9IGV3a190aWxlX21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVs
Lm1hdHJpeCk7CiAKLSAgICBpZiAodHVjKSB7CisgICAgaWYgKHRpbGVkVW51c2VkQ2FjaGUpIHsK
ICAgICAgICAgREJHKCJmbHVzaCB1bnVzZWQgdGlsZSBjYWNoZS4iKTsKLSAgICAgICAgZXdrX3Rp
bGVfdW51c2VkX2NhY2hlX2F1dG9fZmx1c2godHVjKTsKKyAgICAgICAgZXdrX3RpbGVfdW51c2Vk
X2NhY2hlX2F1dG9fZmx1c2godGlsZWRVbnVzZWRDYWNoZSk7CiAgICAgfSBlbHNlCiAgICAgICAg
IEVSUigibm8gY2FjaGU/ISIpOwogCkBAIC0yMjIsMjcgKzIyMiwyNyBAQCBzdGF0aWMgdm9pZCBf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9hc3NvY2lhdGUoRXdrX1RpbGVkX0JhY2tpbmdf
U3RvcmVfRGF0YQogCiBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9k
aXNzb2NpYXRlKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYsIEV3a19UaWxlZF9C
YWNraW5nX1N0b3JlX0l0ZW0qIGl0ZW0sIGRvdWJsZSBsYXN0VXNlZCkKIHsKLSAgICBFd2tfVGls
ZV9VbnVzZWRfQ2FjaGUqIHR1YzsKKyAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHRpbGVkVW51
c2VkQ2FjaGU7CiAgICAgZXdrX3RpbGVfaGlkZShpdGVtLT50aWxlKTsKICAgICBpZiAoIWV3a190
aWxlX3Zpc2libGVfZ2V0KGl0ZW0tPnRpbGUpKQogICAgICAgICBldmFzX29iamVjdF9zbWFydF9t
ZW1iZXJfZGVsKGl0ZW0tPnRpbGUtPmltYWdlKTsKICAgICBld2tfdGlsZV9tYXRyaXhfdGlsZV9w
dXQocHJpdi0+bW9kZWwubWF0cml4LCBpdGVtLT50aWxlLCBsYXN0VXNlZCk7Ci0gICAgdHVjID0g
ZXdrX3RpbGVfbWF0cml4X3VudXNlZF9jYWNoZV9nZXQocHJpdi0+bW9kZWwubWF0cml4KTsKLSAg
ICBld2tfdGlsZV91bnVzZWRfY2FjaGVfYXV0b19mbHVzaCh0dWMpOworICAgIHRpbGVkVW51c2Vk
Q2FjaGUgPSBld2tfdGlsZV9tYXRyaXhfdW51c2VkX2NhY2hlX2dldChwcml2LT5tb2RlbC5tYXRy
aXgpOworICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9hdXRvX2ZsdXNoKHRpbGVkVW51c2VkQ2Fj
aGUpOwogCiAgICAgaXRlbS0+dGlsZSA9IDA7CiB9CiAKIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV90aWxlX2Rpc3NvY2lhdGVfYWxsKEV3a19UaWxlZF9CYWNraW5nX1N0b3Jl
X0RhdGEqIHByaXYpCiB7Ci0gICAgRWluYV9Jbmxpc3QqIGl0OworICAgIEVpbmFfSW5saXN0KiBs
aXN0OwogICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0qIGl0ZW07CiAgICAgaW50IGk7
CiAgICAgZG91YmxlIGxhc3RfdXNlZCA9IGVjb3JlX2xvb3BfdGltZV9nZXQoKTsKIAogICAgIGZv
ciAoaSA9IDA7IGkgPCBwcml2LT52aWV3LnJvd3M7IGkrKykgewotICAgICAgICBpdCA9IHByaXYt
PnZpZXcuaXRlbXNbaV07Ci0gICAgICAgIEVJTkFfSU5MSVNUX0ZPUkVBQ0goaXQsIGl0ZW0pCisg
ICAgICAgIGxpc3QgPSBwcml2LT52aWV3Lml0ZW1zW2ldOworICAgICAgICBFSU5BX0lOTElTVF9G
T1JFQUNIKGxpc3QsIGl0ZW0pCiAgICAgICAgICAgICBpZiAoaXRlbS0+dGlsZSkKICAgICAgICAg
ICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9kaXNzb2NpYXRlKHByaXYsIGl0
ZW0sIGxhc3RfdXNlZCk7CiAgICAgfQpAQCAtMjUwLDkyICsyNTAsOTIgQEAgc3RhdGljIHZvaWQg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfZGlzc29jaWF0ZV9hbGwoRXdrX1RpbGVkX0Jh
Y2tpbmdfU3RvcmUKIAogc3RhdGljIGlubGluZSBFaW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5n
X3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9hZGQoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0
YSogcHJpdiwgdW5zaWduZWQgbG9uZyBjb2x1bW4sIHVuc2lnbmVkIGxvbmcgcm93LCBmbG9hdCB6
b29tLCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1ByaW9yaXR5IHByaW9yaXR5
KQogewotICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUmVxdWVzdCogcjsK
KyAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QqIHJlcXVlc3Q7
CiAKLSAgICByID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRl
cl9SZXF1ZXN0Kj4obWFsbG9jKHNpemVvZigqcikpKTsKLSAgICBpZiAoIXIpCisgICAgcmVxdWVz
dCA9IHN0YXRpY19jYXN0PEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUmVxdWVz
dCo+KG1hbGxvYyhzaXplb2YoKnJlcXVlc3QpKSk7CisgICAgaWYgKCFyZXF1ZXN0KQogICAgICAg
ICByZXR1cm4gRUlOQV9GQUxTRTsKIAogICAgIGlmIChwcmlvcml0eSA9PSBQUkVfUkVOREVSX1BS
SU9SSVRZX0hJR0gpCi0gICAgICAgIHByaXYtPnJlbmRlci5wcmVfcmVuZGVyX3JlcXVlc3RzID0g
ZWluYV9pbmxpc3RfcHJlcGVuZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAocHJpdi0+cmVuZGVyLnByZV9yZW5kZXJfcmVxdWVzdHMsIEVJTkFfSU5MSVNU
X0dFVChyKSk7CisgICAgICAgIHByaXYtPnJlbmRlci5wcmVSZW5kZXJSZXF1ZXN0cyA9IGVpbmFf
aW5saXN0X3ByZXBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKHByaXYtPnJlbmRlci5wcmVSZW5kZXJSZXF1ZXN0cywgRUlOQV9JTkxJU1RfR0VUKHJl
cXVlc3QpKTsKICAgICBlbHNlCi0gICAgICAgIHByaXYtPnJlbmRlci5wcmVfcmVuZGVyX3JlcXVl
c3RzID0gZWluYV9pbmxpc3RfYXBwZW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIChwcml2LT5yZW5kZXIucHJlX3JlbmRlcl9yZXF1ZXN0cywgRUlOQV9J
TkxJU1RfR0VUKHIpKTsKKyAgICAgICAgcHJpdi0+cmVuZGVyLnByZVJlbmRlclJlcXVlc3RzID0g
ZWluYV9pbmxpc3RfYXBwZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIChwcml2LT5yZW5kZXIucHJlUmVuZGVyUmVxdWVzdHMsIEVJTkFfSU5MSVNUX0dF
VChyZXF1ZXN0KSk7CiAKLSAgICByLT5jb2wgPSBjb2x1bW47Ci0gICAgci0+cm93ID0gcm93Owot
ICAgIHItPnpvb20gPSB6b29tOworICAgIHJlcXVlc3QtPmNvbHVtbiA9IGNvbHVtbjsKKyAgICBy
ZXF1ZXN0LT5yb3cgPSByb3c7CisgICAgcmVxdWVzdC0+em9vbSA9IHpvb207CiAKICAgICByZXR1
cm4gRUlOQV9UUlVFOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlZF9iYWNraW5n
X3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9kZWwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0
YSogcHJpdiwgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0KiByZXF1
ZXN0KQogewotICAgIHByaXYtPnJlbmRlci5wcmVfcmVuZGVyX3JlcXVlc3RzID0gZWluYV9pbmxp
c3RfcmVtb3ZlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBy
aXYtPnJlbmRlci5wcmVfcmVuZGVyX3JlcXVlc3RzLCBFSU5BX0lOTElTVF9HRVQocmVxdWVzdCkp
OworICAgIHByaXYtPnJlbmRlci5wcmVSZW5kZXJSZXF1ZXN0cyA9IGVpbmFfaW5saXN0X3JlbW92
ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwcml2LT5yZW5k
ZXIucHJlUmVuZGVyUmVxdWVzdHMsIEVJTkFfSU5MSVNUX0dFVChyZXF1ZXN0KSk7CiAgICAgZnJl
ZShyZXF1ZXN0KTsKIH0KIAogc3RhdGljIGlubGluZSBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9Q
cmVfUmVuZGVyX1JlcXVlc3QqIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3Jl
cXVlc3RfZmlyc3QoY29uc3QgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdikKIHsK
ICAgICByZXR1cm4gRUlOQV9JTkxJU1RfQ09OVEFJTkVSX0dFVCgKLSAgICAgICAgICAgICAgIHBy
aXYtPnJlbmRlci5wcmVfcmVuZGVyX3JlcXVlc3RzLAorICAgICAgICAgICAgICAgcHJpdi0+cmVu
ZGVyLnByZVJlbmRlclJlcXVlc3RzLAogICAgICAgICAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdf
U3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0KTsKIH0KIAogc3RhdGljIHZvaWQgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9mbHVzaChFd2tfVGlsZWRfQmFja2luZ19T
dG9yZV9EYXRhKiBwcml2KQogewotICAgIEVpbmFfSW5saXN0KiogcGwgPSAmcHJpdi0+cmVuZGVy
LnByZV9yZW5kZXJfcmVxdWVzdHM7Ci0gICAgd2hpbGUgKCpwbCkgewotICAgICAgICBFd2tfVGls
ZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QqIHI7Ci0gICAgICAgIHIgPSBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2ZpcnN0KHByaXYpOwotICAg
ICAgICAqcGwgPSBlaW5hX2lubGlzdF9yZW1vdmUoKnBsLCAqcGwpOwotICAgICAgICBmcmVlKHIp
OworICAgIEVpbmFfSW5saXN0KiogcHJlUmVuZGVyTGlzdCA9ICZwcml2LT5yZW5kZXIucHJlUmVu
ZGVyUmVxdWVzdHM7CisgICAgd2hpbGUgKCpwcmVSZW5kZXJMaXN0KSB7CisgICAgICAgIEV3a19U
aWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUmVxdWVzdCogcmVxdWVzdDsKKyAgICAgICAg
cmVxdWVzdCA9IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfZmly
c3QocHJpdik7CisgICAgICAgICpwcmVSZW5kZXJMaXN0ID0gZWluYV9pbmxpc3RfcmVtb3ZlKCpw
cmVSZW5kZXJMaXN0LCAqcHJlUmVuZGVyTGlzdCk7CisgICAgICAgIGZyZWUocmVxdWVzdCk7CiAg
ICAgfQogfQogCiBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRl
cl9yZXF1ZXN0X2NsZWFyKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYpCiB7Ci0g
ICAgRWluYV9Jbmxpc3QqKiBwbCA9ICZwcml2LT5yZW5kZXIucHJlX3JlbmRlcl9yZXF1ZXN0czsK
LSAgICBFaW5hX0lubGlzdCogaXRlciA9ICpwbCwgKiB0bXA7CisgICAgRWluYV9Jbmxpc3QqKiBw
cmVSZW5kZXJMaXN0ID0gJnByaXYtPnJlbmRlci5wcmVSZW5kZXJSZXF1ZXN0czsKKyAgICBFaW5h
X0lubGlzdCogaXRlciA9ICpwcmVSZW5kZXJMaXN0LCAqdG1wOwogICAgIHdoaWxlIChpdGVyKSB7
Ci0gICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUmVxdWVzdCogciA9
CisgICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUmVxdWVzdCogcmVx
dWVzdCA9CiAgICAgICAgICAgICBFSU5BX0lOTElTVF9DT05UQUlORVJfR0VUKAogICAgICAgICAg
ICAgICAgIGl0ZXIsIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUmVxdWVzdCk7
CiAgICAgICAgIHRtcCA9IGl0ZXItPm5leHQ7Ci0gICAgICAgICpwbCA9IGVpbmFfaW5saXN0X3Jl
bW92ZSgqcGwsIGl0ZXIpOworICAgICAgICAqcHJlUmVuZGVyTGlzdCA9IGVpbmFfaW5saXN0X3Jl
bW92ZSgqcHJlUmVuZGVyTGlzdCwgaXRlcik7CiAgICAgICAgIGl0ZXIgPSB0bXA7Ci0gICAgICAg
IGZyZWUocik7CisgICAgICAgIGZyZWUocmVxdWVzdCk7CiAgICAgfQogfQogCiAvKiBhc3N1bWVz
IHByaXYtPnByb2Nlc3MucHJlX2NiIHdhcyBjYWxsZWQgaWYgcmVxdWlyZWQhICovCiBzdGF0aWMg
dm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X3Byb2Nlc3Nf
c2luZ2xlKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYpCiB7Ci0gICAgRXdrX1Rp
bGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0KiByZXE7CisgICAgRXdrX1RpbGVk
X0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0KiByZXF1ZXN0OwogICAgIEVpbmFfUmVj
dGFuZ2xlIGFyZWE7Ci0gICAgRXdrX1RpbGVfTWF0cml4KiB0bSA9IHByaXYtPm1vZGVsLm1hdHJp
eDsKKyAgICBFd2tfVGlsZV9NYXRyaXgqIHRpbGVNYXRyaXggPSBwcml2LT5tb2RlbC5tYXRyaXg7
CiAgICAgRXdrX1RpbGUqIHRpbGU7Ci0gICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0dWM7Ci0g
ICAgdW5zaWduZWQgbG9uZyBjb2wsIHJvdzsKKyAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHRp
bGVkVW51c2VkQ2FjaGU7CisgICAgdW5zaWduZWQgbG9uZyBjb2x1bW4sIHJvdzsKICAgICBmbG9h
dCB6b29tOwogICAgIGRvdWJsZSBsYXN0X3VzZWQgPSBlY29yZV9sb29wX3RpbWVfZ2V0KCk7CiAK
LSAgICByZXEgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2Zp
cnN0KHByaXYpOwotICAgIGlmICghcmVxKQorICAgIHJlcXVlc3QgPSBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2ZpcnN0KHByaXYpOworICAgIGlmICghcmVxdWVz
dCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgY29sID0gcmVxLT5jb2w7Ci0gICAgcm93ID0gcmVx
LT5yb3c7Ci0gICAgem9vbSA9IHJlcS0+em9vbTsKKyAgICBjb2x1bW4gPSByZXF1ZXN0LT5jb2x1
bW47CisgICAgcm93ID0gcmVxdWVzdC0+cm93OworICAgIHpvb20gPSByZXF1ZXN0LT56b29tOwog
Ci0gICAgaWYgKGV3a190aWxlX21hdHJpeF90aWxlX2V4YWN0X2V4aXN0cyh0bSwgY29sLCByb3cs
IHpvb20pKSB7Ci0gICAgICAgIERCRygibm8gcHJlLXJlbmRlciByZXF1aXJlZCBmb3IgdGlsZSAl
bHUsJWx1IEAgJWYuIiwgY29sLCByb3csIHpvb20pOworICAgIGlmIChld2tfdGlsZV9tYXRyaXhf
dGlsZV9leGFjdF9leGlzdHModGlsZU1hdHJpeCwgY29sdW1uLCByb3csIHpvb20pKSB7CisgICAg
ICAgIERCRygibm8gcHJlLXJlbmRlciByZXF1aXJlZCBmb3IgdGlsZSAlbHUsJWx1IEAgJWYuIiwg
Y29sdW1uLCByb3csIHpvb20pOwogICAgICAgICBnb3RvIGVuZDsKICAgICB9CiAKLSAgICB0aWxl
ID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfbmV3KHByaXYsIGNvbCwgcm93LCB6b29t
KTsKKyAgICB0aWxlID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfbmV3KHByaXYsIGNv
bHVtbiwgcm93LCB6b29tKTsKICAgICBpZiAoIXRpbGUpCiAgICAgICAgIGdvdG8gZW5kOwogCkBA
IC0zNDQsMzMgKzM0NCwzMyBAQCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
cHJlX3JlbmRlcl9yZXF1ZXN0X3Byb2Nlc3Nfc2luZ2xlKEV3a19UaWxlZAogICAgIGFyZWEudyA9
IHByaXYtPnZpZXcudGlsZS53aWR0aDsKICAgICBhcmVhLmggPSBwcml2LT52aWV3LnRpbGUuaGVp
Z2h0OwogCi0gICAgcHJpdi0+cmVuZGVyLmNiKHByaXYtPnJlbmRlci5kYXRhLCB0aWxlLCAmYXJl
YSk7CisgICAgcHJpdi0+cmVuZGVyLmNhbGxiYWNrKHByaXYtPnJlbmRlci5kYXRhLCB0aWxlLCAm
YXJlYSk7CiAgICAgZXZhc19vYmplY3RfaW1hZ2VfZGF0YV91cGRhdGVfYWRkKAogICAgICAgICB0
aWxlLT5pbWFnZSwKICAgICAgICAgYXJlYS54LCBhcmVhLnksIGFyZWEudywgYXJlYS5oKTsKLSAg
ICBld2tfdGlsZV9tYXRyaXhfdGlsZV91cGRhdGVzX2NsZWFyKHRtLCB0aWxlKTsKKyAgICBld2tf
dGlsZV9tYXRyaXhfdGlsZV91cGRhdGVzX2NsZWFyKHRpbGVNYXRyaXgsIHRpbGUpOwogCi0gICAg
ZXdrX3RpbGVfbWF0cml4X3RpbGVfcHV0KHRtLCB0aWxlLCBsYXN0X3VzZWQpOworICAgIGV3a190
aWxlX21hdHJpeF90aWxlX3B1dCh0aWxlTWF0cml4LCB0aWxlLCBsYXN0X3VzZWQpOwogCiBlbmQ6
Ci0gICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9kZWwocHJp
diwgcmVxKTsKLSAgICB0dWMgPSBld2tfdGlsZV9tYXRyaXhfdW51c2VkX2NhY2hlX2dldChwcml2
LT5tb2RlbC5tYXRyaXgpOwotICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9hdXRvX2ZsdXNoKHR1
Yyk7CisgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9kZWwo
cHJpdiwgcmVxdWVzdCk7CisgICAgdGlsZWRVbnVzZWRDYWNoZSA9IGV3a190aWxlX21hdHJpeF91
bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7CisgICAgZXdrX3RpbGVfdW51c2Vk
X2NhY2hlX2F1dG9fZmx1c2godGlsZWRVbnVzZWRDYWNoZSk7CiB9CiAKIHN0YXRpYyBFaW5hX0Jv
b2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcHJvY2Vzc19pZGxlcl9jYih2b2lkKiBk
YXRhKQogewogICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYgPSBzdGF0aWNf
Y2FzdDxFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKj4oZGF0YSk7CiAKLSAgICBpZiAocHJp
di0+cHJvY2Vzcy5wcmVfY2IpCi0gICAgICAgIGRhdGEgPSBwcml2LT5wcm9jZXNzLnByZV9jYihw
cml2LT5wcm9jZXNzLnByZV9kYXRhLCBwcml2LT5zZWxmKTsKKyAgICBpZiAocHJpdi0+cHJvY2Vz
cy5wcmVDYWxsYmFjaykKKyAgICAgICAgZGF0YSA9IHByaXYtPnByb2Nlc3MucHJlQ2FsbGJhY2so
cHJpdi0+cHJvY2Vzcy5wcmVEYXRhLCBwcml2LT5zZWxmKTsKIAogICAgIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfcHJvY2Vzc19zaW5nbGUocHJpdik7CiAKLSAg
ICBpZiAocHJpdi0+cHJvY2Vzcy5wb3N0X2NiKQotICAgICAgICBwcml2LT5wcm9jZXNzLnBvc3Rf
Y2IocHJpdi0+cHJvY2Vzcy5wb3N0X2RhdGEsIGRhdGEsIHByaXYtPnNlbGYpOworICAgIGlmIChw
cml2LT5wcm9jZXNzLnBvc3RDYWxsYmFjaykKKyAgICAgICAgcHJpdi0+cHJvY2Vzcy5wb3N0Q2Fs
bGJhY2socHJpdi0+cHJvY2Vzcy5wb3N0RGF0YSwgZGF0YSwgcHJpdi0+c2VsZik7CiAKLSAgICBp
ZiAoIXByaXYtPnJlbmRlci5wcmVfcmVuZGVyX3JlcXVlc3RzKSB7CisgICAgaWYgKCFwcml2LT5y
ZW5kZXIucHJlUmVuZGVyUmVxdWVzdHMpIHsKICAgICAgICAgcHJpdi0+cmVuZGVyLmlkbGVyID0g
MDsKICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CiAgICAgfQpAQCAtNDIwLDM4ICs0MjAsMzgg
QEAgc3RhdGljIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZW5hYmxlX3JlbmRl
cihFd2tfVGlsZWRfQmFja2luZ19TdG9yZV8KIAogc3RhdGljIGlubGluZSBFaW5hX0Jvb2wgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZmlsbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9E
YXRhKiBwcml2LCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKiBpdGVtLCB1bnNpZ25lZCBs
b25nIGNvbHVtbiwgdW5zaWduZWQgbG9uZyByb3cpCiB7Ci0gICAgdW5zaWduZWQgbG9uZyBtX2Nv
bCA9IHByaXYtPm1vZGVsLmJhc2UuY29sICsgY29sdW1uOwotICAgIHVuc2lnbmVkIGxvbmcgbV9y
b3cgPSBwcml2LT5tb2RlbC5iYXNlLnJvdyArIHJvdzsKLSAgICBkb3VibGUgbGFzdF91c2VkID0g
ZWNvcmVfbG9vcF90aW1lX2dldCgpOworICAgIHVuc2lnbmVkIGxvbmcgbUNvbHVtbiA9IHByaXYt
Pm1vZGVsLmJhc2UuY29sdW1uICsgY29sdW1uOworICAgIHVuc2lnbmVkIGxvbmcgbVJvdyA9IHBy
aXYtPm1vZGVsLmJhc2Uucm93ICsgcm93OworICAgIGRvdWJsZSBsYXN0VXNlZCA9IGVjb3JlX2xv
b3BfdGltZV9nZXQoKTsKIAotICAgIGlmIChtX2NvbCA+PSBwcml2LT5tb2RlbC5jdXIuY29scyB8
fCBtX3JvdyA+PSBwcml2LT5tb2RlbC5jdXIucm93cykgeworICAgIGlmIChtQ29sdW1uID49IHBy
aXYtPm1vZGVsLmN1cnJlbnQuY29sdW1ucyB8fCBtUm93ID49IHByaXYtPm1vZGVsLmN1cnJlbnQu
cm93cykgewogICAgICAgICBpZiAoaXRlbS0+dGlsZSkKLSAgICAgICAgICAgIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV90aWxlX2Rpc3NvY2lhdGUocHJpdiwgaXRlbSwgbGFzdF91c2VkKTsKKyAg
ICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2Rpc3NvY2lhdGUocHJpdiwg
aXRlbSwgbGFzdFVzZWQpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIEV3a19UaWxlKiB0aWxlOwog
ICAgICAgICBjb25zdCBmbG9hdCB6b29tID0gcHJpdi0+dmlldy50aWxlLnpvb207CiAKICAgICAg
ICAgaWYgKGl0ZW0tPnRpbGUpIHsKICAgICAgICAgICAgIEV3a19UaWxlKiBvbGQgPSBpdGVtLT50
aWxlOwotICAgICAgICAgICAgaWYgKG9sZC0+cm93ICE9IG1fcm93IHx8IG9sZC0+Y29sICE9IG1f
Y29sIHx8IG9sZC0+em9vbSAhPSB6b29tKQotICAgICAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV90aWxlX2Rpc3NvY2lhdGUocHJpdiwgaXRlbSwgbGFzdF91c2VkKTsKLSAgICAg
ICAgICAgIGVsc2UgaWYgKG9sZC0+cm93ID09IG1fcm93ICYmIG9sZC0+Y29sID09IG1fY29sICYm
IG9sZC0+em9vbSA9PSB6b29tKQorICAgICAgICAgICAgaWYgKG9sZC0+cm93ICE9IG1Sb3cgfHwg
b2xkLT5jb2wgIT0gbUNvbHVtbiB8fCBvbGQtPnpvb20gIT0gem9vbSkKKyAgICAgICAgICAgICAg
ICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9kaXNzb2NpYXRlKHByaXYsIGl0ZW0sIGxh
c3RVc2VkKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKG9sZC0+cm93ID09IG1Sb3cgJiYgb2xkLT5j
b2wgPT0gbUNvbHVtbiAmJiBvbGQtPnpvb20gPT0gem9vbSkKICAgICAgICAgICAgICAgICBnb3Rv
IGVuZDsKICAgICAgICAgfQogCi0gICAgICAgIHRpbGUgPSBld2tfdGlsZV9tYXRyaXhfdGlsZV9l
eGFjdF9nZXQocHJpdi0+bW9kZWwubWF0cml4LCBtX2NvbCwgbV9yb3csIHpvb20pOworICAgICAg
ICB0aWxlID0gZXdrX3RpbGVfbWF0cml4X3RpbGVfZXhhY3RfZ2V0KHByaXYtPm1vZGVsLm1hdHJp
eCwgbUNvbHVtbiwgbVJvdywgem9vbSk7CiAKICAgICAgICAgaWYgKCF0aWxlKSB7CiAgICAgICAg
ICAgICAvKiBOT1RFOiBpdCBuZXZlciByZXR1cm5zIDAgaWYgaXQtPnRpbGUgd2FzIHNldCEgKi8K
ICAgICAgICAgICAgIGlmIChpdGVtLT50aWxlKSB7CiAgICAgICAgICAgICAgICAgQ1JJVElDQUwo
Iml0LT50aWxlPSVwLCBidXQgaXQgc2hvdWxkIGJlIDAhIiwgaXRlbS0+dGlsZSk7CiAgICAgICAg
ICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfZGlzc29jaWF0ZShwcml2LCBp
dGVtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbGFzdF91c2VkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGxhc3RVc2VkKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAg
ICAgLyogRG8gbm90IGFkZCBuZXcgcmVxdWVzdHMgdG8gdGhlIHJlbmRlciBxdWV1ZSAqLwogICAg
ICAgICAgICAgaWYgKCFwcml2LT5yZW5kZXIuc3VzcGVuZCkgewotICAgICAgICAgICAgICAgIHRp
bGUgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9uZXcocHJpdiwgbV9jb2wsIG1fcm93
LCB6b29tKTsKKyAgICAgICAgICAgICAgICB0aWxlID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3RpbGVfbmV3KHByaXYsIG1Db2x1bW4sIG1Sb3csIHpvb20pOwogICAgICAgICAgICAgICAgIGlm
ICghdGlsZSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CiAgICAgICAg
ICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfYXNzb2NpYXRlKHByaXYsIHRp
bGUsIGl0ZW0pOwpAQCAtNDU5LDcgKzQ1OSw3IEBAIHN0YXRpYyBpbmxpbmUgRWluYV9Cb29sIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2ZpbGwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvCiAg
ICAgICAgIH0gZWxzZSBpZiAodGlsZSAhPSBpdGVtLT50aWxlKSB7CiAgICAgICAgICAgICBpZiAo
aXRlbS0+dGlsZSkKICAgICAgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGls
ZV9kaXNzb2NpYXRlKHByaXYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpdGVtLCBsYXN0X3VzZWQpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbSwgbGFzdFVzZWQpOwog
ICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfYXNzb2NpYXRlKHByaXYs
IHRpbGUsIGl0ZW0pOwogICAgICAgICB9CiAKQEAgLTQ3MywzMSArNDczLDMxIEBAIGVuZDoKIAog
c3RhdGljIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0qIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9pdGVtX2FkZChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2LCB1bnNpZ25l
ZCBsb25nIGNvbHVtbiwgdW5zaWduZWQgbG9uZyByb3cpCiB7Ci0gICAgRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfSXRlbSogaXQ7Ci0gICAgRXZhc19Db29yZCB4LCB5LCB0dywgdGg7CisgICAgRXdr
X1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSogaXRlbTsKKyAgICBFdmFzX0Nvb3JkIHgsIHksIHRp
bGVXaWR0aCwgdGlsZUhlaWdodDsKIAotICAgIERCRygibz0lcCIsIHByaXYtPnNlbGYpOworICAg
IERCRygiZXdrVGlsZSVwIiwgcHJpdi0+c2VsZik7CiAKLSAgICBpdCA9IHN0YXRpY19jYXN0PEV3
a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0qPihtYWxsb2Moc2l6ZW9mKCppdCkpKTsKLSAgICBp
ZiAoIWl0KQorICAgIGl0ZW0gPSBzdGF0aWNfY2FzdDxFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9J
dGVtKj4obWFsbG9jKHNpemVvZigqaXRlbSkpKTsKKyAgICBpZiAoIWl0ZW0pCiAgICAgICAgIHJl
dHVybiAwOwogCi0gICAgdHcgPSBwcml2LT52aWV3LnRpbGUud2lkdGg7Ci0gICAgdGggPSBwcml2
LT52aWV3LnRpbGUuaGVpZ2h0OwotICAgIHggPSBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggKyBw
cml2LT52aWV3LnggKyB0dyAgKmNvbHVtbjsKLSAgICB5ID0gcHJpdi0+dmlldy5vZmZzZXQuYmFz
ZS55ICsgcHJpdi0+dmlldy55ICsgdGggICpyb3c7CisgICAgdGlsZVdpZHRoID0gcHJpdi0+dmll
dy50aWxlLndpZHRoOworICAgIHRpbGVIZWlnaHQgPSBwcml2LT52aWV3LnRpbGUuaGVpZ2h0Owor
ICAgIHggPSBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggKyBwcml2LT52aWV3LnggKyB0aWxlV2lk
dGggICpjb2x1bW47CisgICAgeSA9IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSArIHByaXYtPnZp
ZXcueSArIHRpbGVIZWlnaHQgICpyb3c7CiAKLSAgICBpdC0+dGlsZSA9IDA7CisgICAgaXRlbS0+
dGlsZSA9IDA7CiAKLSAgICBpdC0+c21vb3RoX3NjYWxlID0gcHJpdi0+dmlldy50aWxlLnpvb21f
d2Vha19zbW9vdGhfc2NhbGU7Ci0gICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fbW92
ZShpdCwgeCwgeSk7Ci0gICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcmVzaXplKGl0
LCB0dywgdGgpOwotICAgIGlmICghX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZmlsbChw
cml2LCBpdCwgY29sdW1uLCByb3cpKSB7Ci0gICAgICAgIGZyZWUoaXQpOworICAgIGl0ZW0tPnNt
b290aF9zY2FsZSA9IHByaXYtPnZpZXcudGlsZS56b29tV2Vha1Ntb290aFNjYWxlOworICAgIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX21vdmUoaXRlbSwgeCwgeSk7CisgICAgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcmVzaXplKGl0ZW0sIHRpbGVXaWR0aCwgdGlsZUhlaWdo
dCk7CisgICAgaWYgKCFfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9maWxsKHByaXYsIGl0
ZW0sIGNvbHVtbiwgcm93KSkgeworICAgICAgICBmcmVlKGl0ZW0pOwogICAgICAgICByZXR1cm4g
MDsKICAgICB9CiAKLSAgICByZXR1cm4gaXQ7CisgICAgcmV0dXJuIGl0ZW07CiB9CiAKIHN0YXRp
YyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2RlbChFd2tfVGlsZWRfQmFja2lu
Z19TdG9yZV9EYXRhKiBwcml2LCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKiBpdGVtKQpA
QCAtNTI3LDQwICs1MjcsNDAgQEAgc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9jaGFuZ2VkKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEKICAgICBwcml2LT5j
aGFuZ2VkLmFueSA9IEVJTkFfVFJVRTsKIH0KIAotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNr
aW5nX3N0b3JlX3ZpZXdfY29sc19lbmRfZGVsKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEq
IHByaXYsIEVpbmFfSW5saXN0KiogcF9yb3csIHVuc2lnbmVkIGludCBjb3VudCkKK3N0YXRpYyB2
b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X2NvbHNfZW5kX2RlbChFd2tfVGlsZWRf
QmFja2luZ19TdG9yZV9EYXRhKiBwcml2LCBFaW5hX0lubGlzdCoqIHJvd0xpc3QsIHVuc2lnbmVk
IGludCBjb3VudCkKIHsKLSAgICBFaW5hX0lubGlzdCogbjsKKyAgICBFaW5hX0lubGlzdCogbmV4
dEl0ZW07CiAgICAgdW5zaWduZWQgaW50IGk7CiAKICAgICBpZiAoIWNvdW50KQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBuID0gKCpwX3JvdyktPmxhc3Q7CisgICAgbmV4dEl0ZW0gPSAoKnJvd0xp
c3QpLT5sYXN0OwogCiAgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLSAgICAgICAg
RXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSogaXQ7Ci0gICAgICAgIGl0ID0gRUlOQV9JTkxJ
U1RfQ09OVEFJTkVSX0dFVChuLCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKTsKLSAgICAg
ICAgbiA9IG4tPnByZXY7Ci0gICAgICAgICpwX3JvdyA9IGVpbmFfaW5saXN0X3JlbW92ZSgqcF9y
b3csIEVJTkFfSU5MSVNUX0dFVChpdCkpOwotICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfaXRlbV9kZWwocHJpdiwgaXQpOworICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9J
dGVtKiBpdGVtOworICAgICAgICBpdGVtID0gRUlOQV9JTkxJU1RfQ09OVEFJTkVSX0dFVChuZXh0
SXRlbSwgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSk7CisgICAgICAgIG5leHRJdGVtID0g
bmV4dEl0ZW0tPnByZXY7CisgICAgICAgICpyb3dMaXN0ID0gZWluYV9pbmxpc3RfcmVtb3ZlKCpy
b3dMaXN0LCBFSU5BX0lOTElTVF9HRVQoaXRlbSkpOworICAgICAgICBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfaXRlbV9kZWwocHJpdiwgaXRlbSk7CiAgICAgfQogfQogCi1zdGF0aWMgRWluYV9C
b29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X2NvbHNfZW5kX2FkZChFd2tfVGlsZWRf
QmFja2luZ19TdG9yZV9EYXRhKiBwcml2LCBFaW5hX0lubGlzdCoqIHBfcm93LCB1bnNpZ25lZCBp
bnQgYmFzZV9jb2x1bW4sIHVuc2lnbmVkIGludCBjb3VudCkKK3N0YXRpYyBFaW5hX0Jvb2wgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfY29sc19lbmRfYWRkKEV3a19UaWxlZF9CYWNraW5n
X1N0b3JlX0RhdGEqIHByaXYsIEVpbmFfSW5saXN0Kiogcm93TGlzdCwgdW5zaWduZWQgaW50IGJh
c2VDb2x1bW4sIHVuc2lnbmVkIGludCBjb3VudCkKIHsKLSAgICB1bnNpZ25lZCBpbnQgaSwgciA9
IHBfcm93IC0gcHJpdi0+dmlldy5pdGVtczsKKyAgICB1bnNpZ25lZCBpbnQgaSwgcm93ID0gcm93
TGlzdCAtIHByaXYtPnZpZXcuaXRlbXM7CiAKLSAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkr
KywgYmFzZV9jb2x1bW4rKykgeworICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrLCBiYXNl
Q29sdW1uKyspIHsKICAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSogaXQ7CiAK
LSAgICAgICAgaXQgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9hZGQocHJpdiwgYmFz
ZV9jb2x1bW4sIHIpOworICAgICAgICBpdCA9IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVt
X2FkZChwcml2LCBiYXNlQ29sdW1uLCByb3cpOwogICAgICAgICBpZiAoIWl0KSB7Ci0gICAgICAg
ICAgICBDUklUSUNBTCgiZmFpbGVkIHRvIGFkZCBjb2x1bW4gJXUgb2YgJXUgaW4gcm93ICV1LiIs
IGksIGNvdW50LCByKTsKLSAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3
X2NvbHNfZW5kX2RlbChwcml2LCBwX3JvdywgaSk7CisgICAgICAgICAgICBDUklUSUNBTCgiZmFp
bGVkIHRvIGFkZCBjb2x1bW4gJXUgb2YgJXUgaW4gcm93ICV1LiIsIGksIGNvdW50LCByb3cpOwor
ICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfY29sc19lbmRfZGVsKHBy
aXYsIHJvd0xpc3QsIGkpOwogICAgICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CiAgICAgICAg
IH0KIAotICAgICAgICAqcF9yb3cgPSBlaW5hX2lubGlzdF9hcHBlbmQoKnBfcm93LCBFSU5BX0lO
TElTVF9HRVQoaXQpKTsKKyAgICAgICAgKnJvd0xpc3QgPSBlaW5hX2lubGlzdF9hcHBlbmQoKnJv
d0xpc3QsIEVJTkFfSU5MSVNUX0dFVChpdCkpOwogICAgIH0KICAgICByZXR1cm4gRUlOQV9UUlVF
OwogfQpAQCAtNTY4LDEwICs1NjgsMTAgQEAgc3RhdGljIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfdmlld19jb2xzX2VuZF9hZGQoRXdrX1RpbGVkX0JhY2tpbmdfU3QKIHN0YXRp
YyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3Jvd19kZWwoRXdrX1RpbGVkX0Jh
Y2tpbmdfU3RvcmVfRGF0YSogcHJpdiwgRWluYV9Jbmxpc3QqIHJvdykKIHsKICAgICB3aGlsZSAo
cm93KSB7Ci0gICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0qIGl0OwotICAgICAg
ICBpdCA9IEVJTkFfSU5MSVNUX0NPTlRBSU5FUl9HRVQocm93LCBFd2tfVGlsZWRfQmFja2luZ19T
dG9yZV9JdGVtKTsKKyAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSogaXRlbTsK
KyAgICAgICAgaXRlbSA9IEVJTkFfSU5MSVNUX0NPTlRBSU5FUl9HRVQocm93LCBFd2tfVGlsZWRf
QmFja2luZ19TdG9yZV9JdGVtKTsKICAgICAgICAgcm93ID0gcm93LT5uZXh0OwotICAgICAgICBf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9kZWwocHJpdiwgaXQpOworICAgICAgICBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9kZWwocHJpdiwgaXRlbSk7CiAgICAgfQogfQogCkBA
IC02MTEsOCArNjExLDggQEAgc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3Jl
bmRlcih2b2lkKiBkYXRhLCBFd2tfVGlsZSogdGlsZSwgY29uc3QgRWkKICAgICBpZiAocHJpdi0+
dmlldy50aWxlLndpZHRoICE9IHRpbGUtPndpZHRoIHx8IHByaXYtPnZpZXcudGlsZS5oZWlnaHQg
IT0gdGlsZS0+aGVpZ2h0KQogICAgICAgICByZXR1cm47IC8vIHRvZG86IHJlbW92ZSBtZSBsYXRl
ciwgZG9uJ3QgZXZlbiBmbGFnIGFzIGRpcnR5IQogCi0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk4ocHJpdi0+cmVuZGVyLmNiKTsKLSAgICBpZiAoIXByaXYtPnJlbmRlci5jYihwcml2LT5y
ZW5kZXIuZGF0YSwgdGlsZSwgYXJlYSkpCisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4o
cHJpdi0+cmVuZGVyLmNhbGxiYWNrKTsKKyAgICBpZiAoIXByaXYtPnJlbmRlci5jYWxsYmFjayhw
cml2LT5yZW5kZXIuZGF0YSwgdGlsZSwgYXJlYSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGV2
YXNfb2JqZWN0X2ltYWdlX2RhdGFfdXBkYXRlX2FkZCh0aWxlLT5pbWFnZSwgYXJlYS0+eCwgYXJl
YS0+eSwgYXJlYS0+dywgYXJlYS0+aCk7CkBAIC02MjksMjcgKzYyOSwyNyBAQCBzdGF0aWMgaW5s
aW5lIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX21vZGVsX21hdHJpeF9jcmVhdGUoRXdr
X1RpbGVkX0JhY2tpbgogICAgICAgICBld2tfdGlsZV9tYXRyaXhfZnJlZShwcml2LT5tb2RlbC5t
YXRyaXgpOwogICAgIH0KIAotICAgIHByaXYtPm1vZGVsLm1hdHJpeCA9IGV3a190aWxlX21hdHJp
eF9uZXcodGlsZVVudXNlZENhY2hlLCBwcml2LT5tb2RlbC5jdXIuY29scywgcHJpdi0+bW9kZWwu
Y3VyLnJvd3MsIHByaXYtPmNzcGFjZSwgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3JlbmRlciwg
cHJpdik7CisgICAgcHJpdi0+bW9kZWwubWF0cml4ID0gZXdrX3RpbGVfbWF0cml4X25ldyh0aWxl
VW51c2VkQ2FjaGUsIHByaXYtPm1vZGVsLmN1cnJlbnQuY29sdW1ucywgcHJpdi0+bW9kZWwuY3Vy
cmVudC5yb3dzLCBwcml2LT5jb2xvclNwYWNlLCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcmVu
ZGVyLCBwcml2KTsKIH0KIAogc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3Nt
YXJ0X21lbWJlcl9kZWwoRXZhc19PYmplY3QqIGV3a1RpbGUsIEV2YXNfT2JqZWN0KiBtZW1iZXIp
CiB7CiAgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4oZXdrVGlsZSwgcHJpdik7Ci0gICAgaWYg
KCFwcml2LT5jb250ZW50c19jbGlwcGVyKQorICAgIGlmICghcHJpdi0+Y29udGVudHNDbGlwcGVy
KQogICAgICAgICByZXR1cm47CiAgICAgZXZhc19vYmplY3RfY2xpcF91bnNldChtZW1iZXIpOwot
ICAgIGlmICghZXZhc19vYmplY3RfY2xpcGVlc19nZXQocHJpdi0+Y29udGVudHNfY2xpcHBlcikp
Ci0gICAgICAgIGV2YXNfb2JqZWN0X2hpZGUocHJpdi0+Y29udGVudHNfY2xpcHBlcik7CisgICAg
aWYgKCFldmFzX29iamVjdF9jbGlwZWVzX2dldChwcml2LT5jb250ZW50c0NsaXBwZXIpKQorICAg
ICAgICBldmFzX29iamVjdF9oaWRlKHByaXYtPmNvbnRlbnRzQ2xpcHBlcik7CiB9CiAKIHN0YXRp
YyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9tZW1iZXJfYWRkKEV2YXNfT2Jq
ZWN0KiBld2tUaWxlLCBFdmFzX09iamVjdCogbWVtYmVyKQogewogICAgIFBSSVZfREFUQV9HRVRf
T1JfUkVUVVJOKGV3a1RpbGUsIHByaXYpOwotICAgIGlmICghcHJpdi0+Y29udGVudHNfY2xpcHBl
cikKKyAgICBpZiAoIXByaXYtPmNvbnRlbnRzQ2xpcHBlcikKICAgICAgICAgcmV0dXJuOwotICAg
IGV2YXNfb2JqZWN0X2NsaXBfc2V0KG1lbWJlciwgcHJpdi0+Y29udGVudHNfY2xpcHBlcik7Cisg
ICAgZXZhc19vYmplY3RfY2xpcF9zZXQobWVtYmVyLCBwcml2LT5jb250ZW50c0NsaXBwZXIpOwog
ICAgIGlmIChldmFzX29iamVjdF92aXNpYmxlX2dldChld2tUaWxlKSkKLSAgICAgICAgZXZhc19v
YmplY3Rfc2hvdyhwcml2LT5jb250ZW50c19jbGlwcGVyKTsKKyAgICAgICAgZXZhc19vYmplY3Rf
c2hvdyhwcml2LT5jb250ZW50c0NsaXBwZXIpOwogfQogCiAjaWZkZWYgREVCVUdfTUVNX0xFQUtT
CkBAIC02NzYsOSArNjc2LDkgQEAgc3RhdGljIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfc2lnX3Vzcih2b2lkKiBkYXRhLCBpbnQgdHlwZSwgdm9pZCogZXYKICAgICBFd2tfVGls
ZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2ID0gKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0Rh
dGEqKWRhdGE7CiAKICAgICBpZiAoc2lnLT5udW1iZXIgPT0gMikgewotICAgICAgICBFd2tfVGls
ZV9VbnVzZWRfQ2FjaGUqIHR1YzsKLSAgICAgICAgdHVjID0gZXdrX3RpbGVfbWF0cml4X3VudXNl
ZF9jYWNoZV9nZXQocHJpdi0+bW9kZWwubWF0cml4KTsKLSAgICAgICAgZXdrX3RpbGVfdW51c2Vk
X2NhY2hlX2F1dG9fZmx1c2godHVjKTsKKyAgICAgICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0
aWxpZVVudXNlZENhY2hlOworICAgICAgICB0aWxpZVVudXNlZENhY2hlID0gZXdrX3RpbGVfbWF0
cml4X3VudXNlZF9jYWNoZV9nZXQocHJpdi0+bW9kZWwubWF0cml4KTsKKyAgICAgICAgZXdrX3Rp
bGVfdW51c2VkX2NhY2hlX2F1dG9fZmx1c2godGlsaWVVbnVzZWRDYWNoZSk7CiAgICAgfQogCiAg
ICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfZGJnKHByaXYpOwpAQCAtNjkxLDcgKzY5
MSw3IEBAIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9hZGQoRXZh
c19PYmplY3QqIGV3a1RpbGUpCiB7CiAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSog
cHJpdjsKIAotICAgIERCRygibz0lcCIsIGV3a1RpbGUpOworICAgIERCRygiZXdrVGlsZT0lcCIs
IGV3a1RpbGUpOwogCiAgICAgcHJpdiA9IHN0YXRpY19jYXN0PEV3a19UaWxlZF9CYWNraW5nX1N0
b3JlX0RhdGEqPihjYWxsb2MoMSwgc2l6ZW9mKCpwcml2KSkpOwogICAgIGlmICghcHJpdikKQEAg
LTcwOCwzMyArNzA4LDMzIEBAIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9z
bWFydF9hZGQoRXZhc19PYmplY3QqIGV3a1RpbGUpCiAgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFz
ZS54ID0gMDsKICAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgPSAwOwogCi0gICAgcHJpdi0+
bW9kZWwuYmFzZS5jb2wgPSAwOworICAgIHByaXYtPm1vZGVsLmJhc2UuY29sdW1uID0gMDsKICAg
ICBwcml2LT5tb2RlbC5iYXNlLnJvdyA9IDA7Ci0gICAgcHJpdi0+bW9kZWwuY3VyLmNvbHMgPSAx
OwotICAgIHByaXYtPm1vZGVsLmN1ci5yb3dzID0gMTsKLSAgICBwcml2LT5tb2RlbC5vbGQuY29s
cyA9IDA7CisgICAgcHJpdi0+bW9kZWwuY3VycmVudC5jb2x1bW5zID0gMTsKKyAgICBwcml2LT5t
b2RlbC5jdXJyZW50LnJvd3MgPSAxOworICAgIHByaXYtPm1vZGVsLm9sZC5jb2x1bW5zID0gMDsK
ICAgICBwcml2LT5tb2RlbC5vbGQucm93cyA9IDA7CiAgICAgcHJpdi0+bW9kZWwud2lkdGggPSAw
OwogICAgIHByaXYtPm1vZGVsLmhlaWdodCA9IDA7CiAgICAgcHJpdi0+cmVuZGVyLnN1c3BlbmQg
PSBFSU5BX0ZBTFNFOwotICAgIHByaXYtPmNzcGFjZSA9IEVWQVNfQ09MT1JTUEFDRV9BUkdCODg4
ODsgLy8gVE9ETzogZGV0ZWN0IGl0LgorICAgIHByaXYtPmNvbG9yU3BhY2UgPSBFVkFTX0NPTE9S
U1BBQ0VfQVJHQjg4ODg7IC8vIFRPRE86IGRldGVjdCBpdC4KIAogICAgIGV2YXNfb2JqZWN0X3Nt
YXJ0X2RhdGFfc2V0KGV3a1RpbGUsIHByaXYpOwogICAgIF9wYXJlbnRfc2MuYWRkKGV3a1RpbGUp
OwogCi0gICAgcHJpdi0+Y29udGVudHNfY2xpcHBlciA9IGV2YXNfb2JqZWN0X3JlY3RhbmdsZV9h
ZGQoCisgICAgcHJpdi0+Y29udGVudHNDbGlwcGVyID0gZXZhc19vYmplY3RfcmVjdGFuZ2xlX2Fk
ZCgKICAgICAgICAgZXZhc19vYmplY3RfZXZhc19nZXQoZXdrVGlsZSkpOwotICAgIGV2YXNfb2Jq
ZWN0X21vdmUocHJpdi0+Y29udGVudHNfY2xpcHBlciwgMCwgMCk7Ci0gICAgZXZhc19vYmplY3Rf
cmVzaXplKHByaXYtPmNvbnRlbnRzX2NsaXBwZXIsCisgICAgZXZhc19vYmplY3RfbW92ZShwcml2
LT5jb250ZW50c0NsaXBwZXIsIDAsIDApOworICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShwcml2LT5j
b250ZW50c0NsaXBwZXIsCiAgICAgICAgICAgICAgICAgICAgICAgIHByaXYtPm1vZGVsLndpZHRo
LCBwcml2LT5tb2RlbC5oZWlnaHQpOwotICAgIGV2YXNfb2JqZWN0X2NvbG9yX3NldChwcml2LT5j
b250ZW50c19jbGlwcGVyLCAyNTUsIDI1NSwgMjU1LCAyNTUpOwotICAgIGV2YXNfb2JqZWN0X3No
b3cocHJpdi0+Y29udGVudHNfY2xpcHBlcik7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfbWVtYmVy
X2FkZChwcml2LT5jb250ZW50c19jbGlwcGVyLCBld2tUaWxlKTsKKyAgICBldmFzX29iamVjdF9j
b2xvcl9zZXQocHJpdi0+Y29udGVudHNDbGlwcGVyLCAyNTUsIDI1NSwgMjU1LCAyNTUpOworICAg
IGV2YXNfb2JqZWN0X3Nob3cocHJpdi0+Y29udGVudHNDbGlwcGVyKTsKKyAgICBldmFzX29iamVj
dF9zbWFydF9tZW1iZXJfYWRkKHByaXYtPmNvbnRlbnRzQ2xpcHBlciwgZXdrVGlsZSk7CiAKICAg
ICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfbW9kZWxfbWF0cml4X2NyZWF0ZShwcml2LCAwKTsK
ICAgICBldmFzX29iamVjdF9tb3ZlKHByaXYtPmJhc2UuY2xpcHBlciwgMCwgMCk7CiAgICAgZXZh
c19vYmplY3RfcmVzaXplKHByaXYtPmJhc2UuY2xpcHBlciwgMCwgMCk7Ci0gICAgZXZhc19vYmpl
Y3RfY2xpcF9zZXQocHJpdi0+Y29udGVudHNfY2xpcHBlciwgcHJpdi0+YmFzZS5jbGlwcGVyKTsK
KyAgICBldmFzX29iamVjdF9jbGlwX3NldChwcml2LT5jb250ZW50c0NsaXBwZXIsIHByaXYtPmJh
c2UuY2xpcHBlcik7CiAKICNpZmRlZiBERUJVR19NRU1fTEVBS1MKICAgICBwcml2LT5zaWdfdXNy
ID0gZWNvcmVfZXZlbnRfaGFuZGxlcl9hZGQKQEAgLTc0NSwxMSArNzQ1LDExIEBAIHN0YXRpYyB2
b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9hZGQoRXZhc19PYmplY3QqIGV3a1Rp
bGUpCiBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfZGVsKEV2YXNf
T2JqZWN0KiBld2tUaWxlKQogewogICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKGV3a1RpbGUs
IHByaXYpOwotICAgIERCRygibz0lcCIsIGV3a1RpbGUpOwotICAgIEV3a19UaWxlX1VudXNlZF9D
YWNoZSogdHVjOworICAgIERCRygiZXdrVGlsZSVwIiwgZXdrVGlsZSk7CisgICAgRXdrX1RpbGVf
VW51c2VkX0NhY2hlKiB0aWxlVW51c2VkQ2FjaGU7CiAKLSAgICB0dWMgPSBld2tfdGlsZV9tYXRy
aXhfdW51c2VkX2NhY2hlX2dldChwcml2LT5tb2RlbC5tYXRyaXgpOwotICAgIGV3a190aWxlX3Vu
dXNlZF9jYWNoZV91bmxvY2tfYXJlYSh0dWMpOworICAgIHRpbGVVbnVzZWRDYWNoZSA9IGV3a190
aWxlX21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7CisgICAgZXdr
X3RpbGVfdW51c2VkX2NhY2hlX3VubG9ja19hcmVhKHRpbGVVbnVzZWRDYWNoZSk7CiAKICAgICBf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZmx1c2gocHJpdik7CiAKQEAgLTc2NCw4ICs3NjQsOCBA
QCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfZGVsKEV2YXNfT2Jq
ZWN0KiBld2tUaWxlKQogI2VuZGlmCiAKICAgICBld2tfdGlsZV9tYXRyaXhfZnJlZShwcml2LT5t
b2RlbC5tYXRyaXgpOwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X21lbWJlcl9kZWwocHJpdi0+Y29u
dGVudHNfY2xpcHBlcik7Ci0gICAgZXZhc19vYmplY3RfZGVsKHByaXYtPmNvbnRlbnRzX2NsaXBw
ZXIpOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X21lbWJlcl9kZWwocHJpdi0+Y29udGVudHNDbGlw
cGVyKTsKKyAgICBldmFzX29iamVjdF9kZWwocHJpdi0+Y29udGVudHNDbGlwcGVyKTsKIAogICAg
IF9wYXJlbnRfc2MuZGVsKGV3a1RpbGUpOwogCkBAIC03NzcsMjMgKzc3NywyMyBAQCBzdGF0aWMg
dm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfZGVsKEV2YXNfT2JqZWN0KiBld2tU
aWxlKQogCiBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfbW92ZShF
dmFzX09iamVjdCogZXdrVGlsZSwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHkpCiB7Ci0gICAg
REJHKCJvPSVwLCBuZXcgcG9zOiAlZHglZCIsIGV3a1RpbGUsIHgsIHkpOworICAgIERCRygiZXdr
VGlsZSVwLCBuZXcgcG9zOiAlZHglZCIsIGV3a1RpbGUsIHgsIHkpOwogCiAgICAgUFJJVl9EQVRB
X0dFVF9PUl9SRVRVUk4oZXdrVGlsZSwgcHJpdik7CiAKLSAgICBpZiAocHJpdi0+Y2hhbmdlZC5w
b3MpCisgICAgaWYgKHByaXYtPmNoYW5nZWQucG9zaXRpb24pCiAgICAgICAgIHJldHVybjsKIAog
ICAgIGlmIChwcml2LT52aWV3LnggPT0geCAmJiBwcml2LT52aWV3LnkgPT0geSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgcHJpdi0+Y2hhbmdlZC5wb3MgPSBFSU5BX1RSVUU7CisgICAgcHJpdi0+
Y2hhbmdlZC5wb3NpdGlvbiA9IEVJTkFfVFJVRTsKICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfY2hhbmdlZChwcml2KTsKIH0KIAogc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX3NtYXJ0X3Jlc2l6ZShFdmFzX09iamVjdCogZXdrVGlsZSwgRXZhc19Db29yZCB3aWR0aCwg
RXZhc19Db29yZCBoZWlnaHQpCiB7Ci0gICAgREJHKCJvPSVwLCBuZXcgc2l6ZTogJWR4JWQiLCBl
d2tUaWxlLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBEQkcoImV3a1RpbGUlcCwgbmV3IHNpemU6ICVk
eCVkIiwgZXdrVGlsZSwgd2lkdGgsIGhlaWdodCk7CiAKICAgICBQUklWX0RBVEFfR0VUX09SX1JF
VFVSTihld2tUaWxlLCBwcml2KTsKIApAQCAtODA5LDI1ICs4MDksMjUgQEAgc3RhdGljIHZvaWQg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X3Jlc2l6ZShFdmFzX09iamVjdCogZXdrVGls
ZSwgRXZhc19Db28KIAogc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3JlY2Fs
Y19yZW5kZXJlcnMoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdiwgRXZhc19Db29y
ZCB3aWR0aCwgRXZhc19Db29yZCBoZWlnaHQsIEV2YXNfQ29vcmQgdGlsZVdpZHRoLCBFdmFzX0Nv
b3JkIHRpbGVIZWlnaHQpCiB7Ci0gICAgbG9uZyBjb2xzLCByb3dzLCBvbGRfcm93cywgb2xkX2Nv
bHM7Ci0gICAgSU5GKCJvPSVwLCBuZXcgc2l6ZTogJWR4JWQiLCBwcml2LT5zZWxmLCB3aWR0aCwg
aGVpZ2h0KTsKKyAgICBsb25nIGNvbHVtbnMsIHJvd3MsIG9sZFJvd3MsIG9sZENvbHM7CisgICAg
SU5GKCJld2tUaWxlJXAsIG5ldyBzaXplOiAlZHglZCIsIHByaXYtPnNlbGYsIHdpZHRoLCBoZWln
aHQpOwogCi0gICAgY29scyA9IDEgKyBzdGF0aWNfY2FzdDxpbnQ+KGNlaWwoc3RhdGljX2Nhc3Q8
ZmxvYXQ+KHdpZHRoIC8gdGlsZVdpZHRoKSkpOworICAgIGNvbHVtbnMgPSAxICsgc3RhdGljX2Nh
c3Q8aW50PihjZWlsKHN0YXRpY19jYXN0PGZsb2F0Pih3aWR0aCAvIHRpbGVXaWR0aCkpKTsKICAg
ICByb3dzID0gMSArIHN0YXRpY19jYXN0PGludD4oY2VpbChzdGF0aWNfY2FzdDxmbG9hdD4oaGVp
Z2h0IC8gdGlsZUhlaWdodCkpKTsKIAotICAgIElORigibz0lcCBuZXcgZ3JpZCBzaXplIGNvbHM6
ICVsZCwgcm93czogJWxkLCB3YXMgJWxkLCAlbGQiLAotICAgICAgICBwcml2LT5zZWxmLCBjb2xz
LCByb3dzLCBwcml2LT52aWV3LmNvbHMsIHByaXYtPnZpZXcucm93cyk7CisgICAgSU5GKCJld2tU
aWxlJXAgbmV3IGdyaWQgc2l6ZSBjb2xzOiAlbGQsIHJvd3M6ICVsZCwgd2FzICVsZCwgJWxkIiwK
KyAgICAgICAgcHJpdi0+c2VsZiwgY29sdW1ucywgcm93cywgcHJpdi0+dmlldy5jb2xzLCBwcml2
LT52aWV3LnJvd3MpOwogCi0gICAgaWYgKHByaXYtPnZpZXcuY29scyA9PSBjb2xzICYmIHByaXYt
PnZpZXcucm93cyA9PSByb3dzKQorICAgIGlmIChwcml2LT52aWV3LmNvbHMgPT0gY29sdW1ucyAm
JiBwcml2LT52aWV3LnJvd3MgPT0gcm93cykKICAgICAgICAgcmV0dXJuOwogCi0gICAgb2xkX2Nv
bHMgPSBwcml2LT52aWV3LmNvbHM7Ci0gICAgb2xkX3Jvd3MgPSBwcml2LT52aWV3LnJvd3M7Cisg
ICAgb2xkQ29scyA9IHByaXYtPnZpZXcuY29sczsKKyAgICBvbGRSb3dzID0gcHJpdi0+dmlldy5y
b3dzOwogCi0gICAgaWYgKHJvd3MgPCBvbGRfcm93cykgeworICAgIGlmIChyb3dzIDwgb2xkUm93
cykgewogICAgICAgICBFaW5hX0lubGlzdCoqIHN0YXJ0LCAqKmVuZDsKICAgICAgICAgc3RhcnQg
PSBwcml2LT52aWV3Lml0ZW1zICsgcm93czsKLSAgICAgICAgZW5kID0gcHJpdi0+dmlldy5pdGVt
cyArIG9sZF9yb3dzOworICAgICAgICBlbmQgPSBwcml2LT52aWV3Lml0ZW1zICsgb2xkUm93czsK
ICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcm93c19yYW5nZV9kZWwocHJp
diwgc3RhcnQsIGVuZCk7CiAgICAgfQogCkBAIC04MzcsMzYgKzgzNywzNiBAQCBzdGF0aWMgdm9p
ZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcmVjYWxjX3JlbmRlcmVycyhFd2tfVGlsZWRfQmFj
a2luZ19TdG9yZV9EYQogCiAgICAgcHJpdi0+dmlldy5pdGVtcyA9IHN0YXRpY19jYXN0PEVpbmFf
SW5saXN0Kio+KG5ld0l0ZW1zKTsKICAgICBwcml2LT52aWV3LnJvd3MgPSByb3dzOwotICAgIHBy
aXYtPnZpZXcuY29scyA9IGNvbHM7Ci0gICAgaWYgKHJvd3MgPiBvbGRfcm93cykgewotICAgICAg
ICBFaW5hX0lubGlzdCoqIHN0YXJ0ID0gcHJpdi0+dmlldy5pdGVtcyArIG9sZF9yb3dzOworICAg
IHByaXYtPnZpZXcuY29scyA9IGNvbHVtbnM7CisgICAgaWYgKHJvd3MgPiBvbGRSb3dzKSB7Cisg
ICAgICAgIEVpbmFfSW5saXN0Kiogc3RhcnQgPSBwcml2LT52aWV3Lml0ZW1zICsgb2xkUm93czsK
ICAgICAgICAgRWluYV9Jbmxpc3QqKiBlbmQgPSBwcml2LT52aWV3Lml0ZW1zICsgcm93czsKICAg
ICAgICAgZm9yICg7IHN0YXJ0IDwgZW5kOyBzdGFydCsrKSB7CiAgICAgICAgICAgICAqc3RhcnQg
PSAwOwotICAgICAgICAgICAgRWluYV9Cb29sIHIgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
dmlld19jb2xzX2VuZF9hZGQocHJpdiwgc3RhcnQsIDAsIGNvbHMpOworICAgICAgICAgICAgRWlu
YV9Cb29sIHIgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19jb2xzX2VuZF9hZGQocHJp
diwgc3RhcnQsIDAsIGNvbHVtbnMpOwogICAgICAgICAgICAgaWYgKCFyKSB7Ci0gICAgICAgICAg
ICAgICAgQ1JJVElDQUwoImZhaWxlZCB0byBhbGxvY2F0ZSAlbGQgY29sdW1ucyIsIGNvbHMpOwot
ICAgICAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3Jvd3NfcmFuZ2Vf
ZGVsKHByaXYsIHByaXYtPnZpZXcuaXRlbXMgKyBvbGRfcm93cywgc3RhcnQpOwotICAgICAgICAg
ICAgICAgIHByaXYtPnZpZXcucm93cyA9IG9sZF9yb3dzOworICAgICAgICAgICAgICAgIENSSVRJ
Q0FMKCJmYWlsZWQgdG8gYWxsb2NhdGUgJWxkIGNvbHVtbnMiLCBjb2x1bW5zKTsKKyAgICAgICAg
ICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19yb3dzX3JhbmdlX2RlbChwcml2
LCBwcml2LT52aWV3Lml0ZW1zICsgb2xkUm93cywgc3RhcnQpOworICAgICAgICAgICAgICAgIHBy
aXYtPnZpZXcucm93cyA9IG9sZFJvd3M7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAgICAgfQogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKGNvbHMgIT0gb2xkX2NvbHMpIHsK
LSAgICAgICAgaW50IHRvZG8gPSBjb2xzIC0gb2xkX2NvbHM7CisgICAgaWYgKGNvbHVtbnMgIT0g
b2xkQ29scykgeworICAgICAgICBpbnQgdG9kbyA9IGNvbHVtbnMgLSBvbGRDb2xzOwogICAgICAg
ICBFaW5hX0lubGlzdCoqIHN0YXJ0ID0gcHJpdi0+dmlldy5pdGVtczsKLSAgICAgICAgRWluYV9J
bmxpc3QqKiBlbmQgPSBzdGFydCArIHN0ZDo6bWluKG9sZF9yb3dzLCByb3dzKTsKKyAgICAgICAg
RWluYV9Jbmxpc3QqKiBlbmQgPSBzdGFydCArIHN0ZDo6bWluKG9sZFJvd3MsIHJvd3MpOwogICAg
ICAgICBpZiAodG9kbyA+IDApIHsKICAgICAgICAgICAgIGZvciAoOyBzdGFydCA8IGVuZDsgc3Rh
cnQrKykgewotICAgICAgICAgICAgICAgIEVpbmFfQm9vbCByID0gX2V3a190aWxlZF9iYWNraW5n
X3N0b3JlX3ZpZXdfY29sc19lbmRfYWRkKHByaXYsIHN0YXJ0LCBvbGRfY29scywgdG9kbyk7Ci0g
ICAgICAgICAgICAgICAgaWYgKCFyKSB7CisgICAgICAgICAgICAgICAgRWluYV9Cb29sIHJlc3Vs
dCA9IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X2NvbHNfZW5kX2FkZChwcml2LCBzdGFy
dCwgb2xkQ29scywgdG9kbyk7CisgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHsKICAgICAg
ICAgICAgICAgICAgICAgQ1JJVElDQUwoImZhaWxlZCB0byBhbGxvY2F0ZSAlZCBjb2x1bW5zISIs
IHRvZG8pOwogCiAgICAgICAgICAgICAgICAgICAgIGZvciAoc3RhcnQtLTsgc3RhcnQgPj0gcHJp
di0+dmlldy5pdGVtczsgc3RhcnQtLSkKICAgICAgICAgICAgICAgICAgICAgICAgIF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV92aWV3X2NvbHNfZW5kX2RlbChwcml2LCBzdGFydCwgdG9kbyk7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChyb3dzID4gb2xkX3Jvd3MpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHN0YXJ0ID0gcHJpdi0+dmlldy5pdGVtcyArIG9sZF9yb3dzOworICAgICAgICAg
ICAgICAgICAgICBpZiAocm93cyA+IG9sZFJvd3MpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHN0YXJ0ID0gcHJpdi0+dmlldy5pdGVtcyArIG9sZFJvd3M7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBlbmQgPSBwcml2LT52aWV3Lml0ZW1zICsgcm93czsKICAgICAgICAgICAgICAgICAgICAg
ICAgIGZvciAoOyBzdGFydCA8IGVuZDsgc3RhcnQrKykKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19jb2xzX2VuZF9kZWwocHJpdiwgc3Rh
cnQsIHRvZG8pOwpAQCAtOTAxLDkgKzkwMSw5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfdmlld19kYmcoY29uc3QgRXdrX1RpbGVkX0JhY2tpbmdfU3RvCiAg
ICAgRWluYV9Jbmxpc3QqKiBzdGFydCwgKiplbmQ7CiAgICAgcHJpbnRmKCJ0aWxlcz0lMmxkLCUy
bGQgIG1vZGVsPSUybGQsJTJsZCBbJWR4JWRdIGJhc2U9JSszbGQsJSs0bGQgb2Zmc2V0PSUrNGQs
JSs0ZCBvbGQ9JSs0ZCwlKzRkIGJhc2U9JSszZCwlKzNkXG4iLAogICAgICAgICAgICBwcml2LT52
aWV3LmNvbHMsIHByaXYtPnZpZXcucm93cywKLSAgICAgICAgICAgcHJpdi0+bW9kZWwuY3VyLmNv
bHMsIHByaXYtPm1vZGVsLmN1ci5yb3dzLAorICAgICAgICAgICBwcml2LT5tb2RlbC5jdXJyZW50
LmNvbHVtbnMsIHByaXYtPm1vZGVsLmN1cnJlbnQucm93cywKICAgICAgICAgICAgcHJpdi0+bW9k
ZWwud2lkdGgsIHByaXYtPm1vZGVsLmhlaWdodCwKLSAgICAgICAgICAgcHJpdi0+bW9kZWwuYmFz
ZS5jb2wsIHByaXYtPm1vZGVsLmJhc2Uucm93LAorICAgICAgICAgICBwcml2LT5tb2RlbC5iYXNl
LmNvbHVtbiwgcHJpdi0+bW9kZWwuYmFzZS5yb3csCiAgICAgICAgICAgIHByaXYtPnZpZXcub2Zm
c2V0LmN1ci54LCBwcml2LT52aWV3Lm9mZnNldC5jdXIueSwKICAgICAgICAgICAgcHJpdi0+dmll
dy5vZmZzZXQub2xkLngsIHByaXYtPnZpZXcub2Zmc2V0Lm9sZC55LAogICAgICAgICAgICBwcml2
LT52aWV3Lm9mZnNldC5iYXNlLngsIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSk7CkBAIC05MTEs
MTUgKzkxMSwxNSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3ZpZXdfZGJnKGNvbnN0IEV3a19UaWxlZF9CYWNraW5nX1N0bwogICAgIHN0YXJ0ID0gcHJpdi0+
dmlldy5pdGVtczsKICAgICBlbmQgPSBwcml2LT52aWV3Lml0ZW1zICsgcHJpdi0+dmlldy5yb3dz
OwogICAgIGZvciAoOyBzdGFydCA8IGVuZDsgc3RhcnQrKykgewotICAgICAgICBjb25zdCBFd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKiBpdDsKKyAgICAgICAgY29uc3QgRXdrX1RpbGVkX0Jh
Y2tpbmdfU3RvcmVfSXRlbSogaXRlbTsKIAotICAgICAgICBFSU5BX0lOTElTVF9GT1JFQUNIKCpz
dGFydCwgaXQpIHsKLSAgICAgICAgICAgIHByaW50ZigiICUrNGQsJSs0ZCAiLCBpdC0+Z2VvbWV0
cnkueCwgaXQtPmdlb21ldHJ5LnkpOworICAgICAgICBFSU5BX0lOTElTVF9GT1JFQUNIKCpzdGFy
dCwgaXRlbSkgeworICAgICAgICAgICAgcHJpbnRmKCIgJSs0ZCwlKzRkICIsIGl0ZW0tPmdlb21l
dHJ5LngsIGl0ZW0tPmdlb21ldHJ5LnkpOwogCi0gICAgICAgICAgICBpZiAoIWl0LT50aWxlKQor
ICAgICAgICAgICAgaWYgKCFpdGVtLT50aWxlKQogICAgICAgICAgICAgICAgIHByaW50ZigiICAg
ICAgICAgICAgOyIpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHByaW50Zigi
JThwICVsdSwlbHU7IiwgaXQtPnRpbGUsIGl0LT50aWxlLT5jb2wsIGl0LT50aWxlLT5yb3cpOwor
ICAgICAgICAgICAgICAgIHByaW50ZigiJThwICVsdSwlbHU7IiwgaXRlbS0+dGlsZSwgaXRlbS0+
dGlsZS0+Y29sLCBpdGVtLT50aWxlLT5yb3cpOwogICAgICAgICB9CiAgICAgICAgIHByaW50Zigi
XG4iKTsKICAgICB9CkBAIC05NDEsMzcgKzk0MSwzNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfZGJnKGNvbnN0IEV3a19UaWxlZF9CYWNraW5nX1N0
bwogICovCiBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld193cmFwX3Vw
KEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYsIEV2YXNfQ29vcmQgeCwgRXZhc19D
b29yZCB5LCB1bnNpZ25lZCBpbnQgY291bnQpCiB7Ci0gICAgdW5zaWduZWQgaW50IGxhc3Rfcm93
ID0gcHJpdi0+dmlldy5yb3dzIC0gMTsKLSAgICBFdmFzX0Nvb3JkIHR3ID0gcHJpdi0+dmlldy50
aWxlLndpZHRoOwotICAgIEV2YXNfQ29vcmQgdGggPSBwcml2LT52aWV3LnRpbGUuaGVpZ2h0Owot
ICAgIEV2YXNfQ29vcmQgb2ZmX3kgPSBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgKyBjb3VudCAq
IHRoOwotICAgIEV2YXNfQ29vcmQgb3kgPSB5ICsgKGxhc3Rfcm93IC0gY291bnQgKyAxKSAqIHRo
ICsgb2ZmX3k7Ci0gICAgRWluYV9Jbmxpc3QqKiBpdHJfc3RhcnQsICoqaXRyX2VuZDsKKyAgICB1
bnNpZ25lZCBpbnQgbGFzdFJvdyA9IHByaXYtPnZpZXcucm93cyAtIDE7CisgICAgRXZhc19Db29y
ZCB0aWxlV2lkdGggPSBwcml2LT52aWV3LnRpbGUud2lkdGg7CisgICAgRXZhc19Db29yZCB0aWxl
SGVpZ2h0ID0gcHJpdi0+dmlldy50aWxlLmhlaWdodDsKKyAgICBFdmFzX0Nvb3JkIG9mZnNldFkg
PSBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgKyBjb3VudCAqIHRpbGVIZWlnaHQ7CisgICAgRXZh
c19Db29yZCB0aWxlUG9zaXRpb25ZID0geSArIChsYXN0Um93IC0gY291bnQgKyAxKSAqIHRpbGVI
ZWlnaHQgKyBvZmZzZXRZOworICAgIEVpbmFfSW5saXN0KiogaXRlcmF0b3JTdGFydCwgKippdGVy
YXRvckVuZDsKIAotICAgIGl0cl9zdGFydCA9IHByaXYtPnZpZXcuaXRlbXM7Ci0gICAgaXRyX2Vu
ZCA9IGl0cl9zdGFydCArIGxhc3Rfcm93OworICAgIGl0ZXJhdG9yU3RhcnQgPSBwcml2LT52aWV3
Lml0ZW1zOworICAgIGl0ZXJhdG9yRW5kID0gaXRlcmF0b3JTdGFydCArIGxhc3RSb3c7CiAKICAg
ICBmb3IgKDsgY291bnQgPiAwOyBjb3VudC0tKSB7Ci0gICAgICAgIEVpbmFfSW5saXN0KiogaXRy
OwotICAgICAgICBFaW5hX0lubGlzdCogdG1wID0gKml0cl9zdGFydDsKLSAgICAgICAgRXdrX1Rp
bGVkX0JhY2tpbmdfU3RvcmVfSXRlbSogaXQ7Ci0gICAgICAgIEV2YXNfQ29vcmQgb3ggPSB4ICsg
cHJpdi0+dmlldy5vZmZzZXQuYmFzZS54OwotICAgICAgICBpbnQgYyA9IDA7CisgICAgICAgIEVp
bmFfSW5saXN0KiogaXRlcmF0b3JMaXN0OworICAgICAgICBFaW5hX0lubGlzdCogdGVtcCA9ICpp
dGVyYXRvclN0YXJ0OworICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKiBpdGVt
OworICAgICAgICBFdmFzX0Nvb3JkIG9yaWdpYW5sWCA9IHggKyBwcml2LT52aWV3Lm9mZnNldC5i
YXNlLng7CisgICAgICAgIGludCBjb3VudDEgPSAwOwogCi0gICAgICAgIGZvciAoaXRyID0gaXRy
X3N0YXJ0OyBpdHIgPCBpdHJfZW5kOyBpdHIrKykKLSAgICAgICAgICAgICppdHIgPSAqKGl0ciAr
IDEpOwotICAgICAgICAqaXRyID0gdG1wOworICAgICAgICBmb3IgKGl0ZXJhdG9yTGlzdCA9IGl0
ZXJhdG9yU3RhcnQ7IGl0ZXJhdG9yTGlzdCA8IGl0ZXJhdG9yRW5kOyBpdGVyYXRvckxpc3QrKykK
KyAgICAgICAgICAgICppdGVyYXRvckxpc3QgPSAqKGl0ZXJhdG9yTGlzdCArIDEpOworICAgICAg
ICAqaXRlcmF0b3JMaXN0ID0gdGVtcDsKIAogICAgICAgICBwcml2LT5tb2RlbC5iYXNlLnJvdysr
OwotICAgICAgICBFSU5BX0lOTElTVF9GT1JFQUNIKHRtcCwgaXQpIHsKLSAgICAgICAgICAgIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX21vdmUoaXQsIG94LCBveSk7Ci0gICAgICAgICAg
ICBveCArPSB0dzsKLSAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2Zp
bGwocHJpdiwgaXQsIGMsIGxhc3Rfcm93KTsKLSAgICAgICAgICAgIGMrKzsKKyAgICAgICAgRUlO
QV9JTkxJU1RfRk9SRUFDSCh0ZW1wLCBpdGVtKSB7CisgICAgICAgICAgICBfZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfaXRlbV9tb3ZlKGl0ZW0sIG9yaWdpYW5sWCwgdGlsZVBvc2l0aW9uWSk7Cisg
ICAgICAgICAgICBvcmlnaWFubFggKz0gdGlsZVdpZHRoOworICAgICAgICAgICAgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX2l0ZW1fZmlsbChwcml2LCBpdGVtLCBjb3VudDEsIGxhc3RSb3cpOwor
ICAgICAgICAgICAgY291bnQxKys7CiAgICAgICAgIH0KLSAgICAgICAgb3kgKz0gdGg7CisgICAg
ICAgIHRpbGVQb3NpdGlvblkgKz0gdGlsZUhlaWdodDsKICAgICB9Ci0gICAgcHJpdi0+dmlldy5v
ZmZzZXQuYmFzZS55ID0gb2ZmX3k7CisgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ID0gb2Zm
c2V0WTsKIH0KIAogLyoqCkBAIC05ODksMzYgKzk4OSwzNiBAQCBzdGF0aWMgdm9pZCBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfdmlld193cmFwX3VwKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0Rh
dGEqCiAgKi8KIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3dyYXBf
ZG93bihFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2LCBFdmFzX0Nvb3JkIHgsIEV2
YXNfQ29vcmQgeSwgdW5zaWduZWQgaW50IGNvdW50KQogewotICAgIEV2YXNfQ29vcmQgdHcgPSBw
cml2LT52aWV3LnRpbGUud2lkdGg7Ci0gICAgRXZhc19Db29yZCB0aCA9IHByaXYtPnZpZXcudGls
ZS5oZWlnaHQ7Ci0gICAgRXZhc19Db29yZCBvZmZfeSA9IHByaXYtPnZpZXcub2Zmc2V0LmJhc2Uu
eSAtIGNvdW50ICogdGg7Ci0gICAgRXZhc19Db29yZCBveSA9IHkgKyBvZmZfeSArIChjb3VudCAt
IDEpICogdGg7Ci0gICAgRWluYV9Jbmxpc3QqKiBpdHJfc3RhcnQsICoqaXRyX2VuZDsKKyAgICBF
dmFzX0Nvb3JkIHRpbGVXaWR0aCA9IHByaXYtPnZpZXcudGlsZS53aWR0aDsKKyAgICBFdmFzX0Nv
b3JkIHRpbGVIZWlnaHQgPSBwcml2LT52aWV3LnRpbGUuaGVpZ2h0OworICAgIEV2YXNfQ29vcmQg
b2Zmc2V0WSA9IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSAtIGNvdW50ICogdGlsZUhlaWdodDsK
KyAgICBFdmFzX0Nvb3JkIHRpbGVQb3NpdGlvblkgPSB5ICsgb2Zmc2V0WSArIChjb3VudCAtIDEp
ICogdGlsZUhlaWdodDsKKyAgICBFaW5hX0lubGlzdCoqIGl0ZXJhdG9yU3RhcnQsICoqaXRlcmF0
b3JFbmQ7CiAKLSAgICBpdHJfc3RhcnQgPSBwcml2LT52aWV3Lml0ZW1zICsgcHJpdi0+dmlldy5y
b3dzIC0gMTsKLSAgICBpdHJfZW5kID0gcHJpdi0+dmlldy5pdGVtczsKKyAgICBpdGVyYXRvclN0
YXJ0ID0gcHJpdi0+dmlldy5pdGVtcyArIHByaXYtPnZpZXcucm93cyAtIDE7CisgICAgaXRlcmF0
b3JFbmQgPSBwcml2LT52aWV3Lml0ZW1zOwogCiAgICAgZm9yICg7IGNvdW50ID4gMDsgY291bnQt
LSkgewotICAgICAgICBFaW5hX0lubGlzdCoqIGl0cjsKLSAgICAgICAgRWluYV9Jbmxpc3QqIHRt
cCA9ICppdHJfc3RhcnQ7Ci0gICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0qIGl0
OwotICAgICAgICBFdmFzX0Nvb3JkIG94ID0geCArIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueDsK
LSAgICAgICAgaW50IGMgPSAwOworICAgICAgICBFaW5hX0lubGlzdCoqIGl0ZXJhdG9yTGlzdDsK
KyAgICAgICAgRWluYV9Jbmxpc3QqIHRlbXAgPSAqaXRlcmF0b3JTdGFydDsKKyAgICAgICAgRXdr
X1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSogaXRlbTsKKyAgICAgICAgRXZhc19Db29yZCB0aWxl
UG9zaXRpb25YID0geCArIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueDsKKyAgICAgICAgaW50IGNv
dW50MSA9IDA7CiAKLSAgICAgICAgZm9yIChpdHIgPSBpdHJfc3RhcnQ7IGl0ciA+IGl0cl9lbmQ7
IGl0ci0tKQotICAgICAgICAgICAgKml0ciA9ICooaXRyIC0gMSk7Ci0gICAgICAgICppdHIgPSB0
bXA7CisgICAgICAgIGZvciAoaXRlcmF0b3JMaXN0ID0gaXRlcmF0b3JTdGFydDsgaXRlcmF0b3JM
aXN0ID4gaXRlcmF0b3JFbmQ7IGl0ZXJhdG9yTGlzdC0tKQorICAgICAgICAgICAgKml0ZXJhdG9y
TGlzdCA9ICooaXRlcmF0b3JMaXN0IC0gMSk7CisgICAgICAgICppdGVyYXRvckxpc3QgPSB0ZW1w
OwogCiAgICAgICAgIHByaXYtPm1vZGVsLmJhc2Uucm93LS07Ci0gICAgICAgIEVJTkFfSU5MSVNU
X0ZPUkVBQ0godG1wLCBpdCkgewotICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X2l0ZW1fbW92ZShpdCwgb3gsIG95KTsKLSAgICAgICAgICAgIG94ICs9IHR3OwotICAgICAgICAg
ICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZmlsbChwcml2LCBpdCwgYywgMCk7Ci0g
ICAgICAgICAgICBjKys7CisgICAgICAgIEVJTkFfSU5MSVNUX0ZPUkVBQ0godGVtcCwgaXRlbSkg
eworICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fbW92ZShpdGVtLCB0
aWxlUG9zaXRpb25YLCB0aWxlUG9zaXRpb25ZKTsKKyAgICAgICAgICAgIHRpbGVQb3NpdGlvblgg
Kz0gdGlsZVdpZHRoOworICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1f
ZmlsbChwcml2LCBpdGVtLCBjb3VudDEsIDApOworICAgICAgICAgICAgY291bnQxKys7CiAgICAg
ICAgIH0KLSAgICAgICAgb3kgLT0gdGg7CisgICAgICAgIHRpbGVQb3NpdGlvblkgLT0gdGlsZUhl
aWdodDsKICAgICB9Ci0gICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ID0gb2ZmX3k7CisgICAg
cHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ID0gb2Zmc2V0WTsKIH0KIAogLyoqCkBAIC0xMDM2LDM2
ICsxMDM2LDM2IEBAIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3dy
YXBfZG93bihFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhCiAgKi8KIHN0YXRpYyB2b2lkIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3dyYXBfbGVmdChFd2tfVGlsZWRfQmFja2luZ19T
dG9yZV9EYXRhKiBwcml2LCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwgdW5zaWduZWQgaW50
IGNvdW50KQogewotICAgIHVuc2lnbmVkIGludCByLCBsYXN0X2NvbCA9IHByaXYtPnZpZXcuY29s
cyAtIDE7Ci0gICAgRXZhc19Db29yZCB0dyA9IHByaXYtPnZpZXcudGlsZS53aWR0aDsKLSAgICBF
dmFzX0Nvb3JkIHRoID0gcHJpdi0+dmlldy50aWxlLmhlaWdodDsKLSAgICBFdmFzX0Nvb3JkIG9m
Zl94ID0gcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54ICsgY291bnQgKiB0dzsKKyAgICB1bnNpZ25l
ZCBpbnQgcm93LCBsYXN0Q29sdW1uID0gcHJpdi0+dmlldy5jb2xzIC0gMTsKKyAgICBFdmFzX0Nv
b3JkIHRpbGVXaWR0aCA9IHByaXYtPnZpZXcudGlsZS53aWR0aDsKKyAgICBFdmFzX0Nvb3JkIHRp
bGVIZWlnaHQgPSBwcml2LT52aWV3LnRpbGUuaGVpZ2h0OworICAgIEV2YXNfQ29vcmQgb2Zmc2V0
WCA9IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCArIGNvdW50ICogdGlsZVdpZHRoOwogICAgIEV2
YXNfQ29vcmQgb3kgPSB5ICsgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55OwotICAgIEVpbmFfSW5s
aXN0KiogaXRyOwotICAgIEVpbmFfSW5saXN0KiogaXRyX2VuZDsKKyAgICBFaW5hX0lubGlzdCoq
IGl0ZXJhdG9yOworICAgIEVpbmFfSW5saXN0KiogaXRlcmF0b3JFbmQ7CiAKLSAgICBpdHIgPSBw
cml2LT52aWV3Lml0ZW1zOwotICAgIGl0cl9lbmQgPSBpdHIgKyBwcml2LT52aWV3LnJvd3M7Ci0g
ICAgciA9IDA7CisgICAgaXRlcmF0b3IgPSBwcml2LT52aWV3Lml0ZW1zOworICAgIGl0ZXJhdG9y
RW5kID0gaXRlcmF0b3IgKyBwcml2LT52aWV3LnJvd3M7CisgICAgcm93ID0gMDsKIAotICAgIHBy
aXYtPm1vZGVsLmJhc2UuY29sICs9IGNvdW50OworICAgIHByaXYtPm1vZGVsLmJhc2UuY29sdW1u
ICs9IGNvdW50OwogCi0gICAgZm9yICg7IGl0ciA8IGl0cl9lbmQ7IGl0cisrLCByKyspIHsKLSAg
ICAgICAgRXZhc19Db29yZCBveCA9IHggKyAobGFzdF9jb2wgLSBjb3VudCArIDEpICogdHcgKyBv
ZmZfeDsKLSAgICAgICAgdW5zaWduZWQgaW50IGksIGMgPSBsYXN0X2NvbCAtIGNvdW50ICsgMTsK
KyAgICBmb3IgKDsgaXRlcmF0b3IgPCBpdGVyYXRvckVuZDsgaXRlcmF0b3IrKywgcm93KyspIHsK
KyAgICAgICAgRXZhc19Db29yZCBveCA9IHggKyAobGFzdENvbHVtbiAtIGNvdW50ICsgMSkgKiB0
aWxlV2lkdGggKyBvZmZzZXRYOworICAgICAgICB1bnNpZ25lZCBpbnQgYyA9IGxhc3RDb2x1bW4g
LSBjb3VudCArIDE7CiAKLSAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyssIGMrKywg
b3ggKz0gdHcpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsg
aSsrLCBjKyssIG94ICs9IHRpbGVXaWR0aCkgewogICAgICAgICAgICAgRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfSXRlbSogaXQ7Ci0gICAgICAgICAgICBpdCA9IEVJTkFfSU5MSVNUX0NPTlRBSU5F
Ul9HRVQoKml0ciwgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSk7Ci0gICAgICAgICAgICAq
aXRyID0gZWluYV9pbmxpc3RfZGVtb3RlKCppdHIsICppdHIpOworICAgICAgICAgICAgaXQgPSBF
SU5BX0lOTElTVF9DT05UQUlORVJfR0VUKCppdGVyYXRvciwgRXdrX1RpbGVkX0JhY2tpbmdfU3Rv
cmVfSXRlbSk7CisgICAgICAgICAgICAqaXRlcmF0b3IgPSBlaW5hX2lubGlzdF9kZW1vdGUoKml0
ZXJhdG9yLCAqaXRlcmF0b3IpOwogCiAgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfaXRlbV9tb3ZlKGl0LCBveCwgb3kpOwotICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5n
X3N0b3JlX2l0ZW1fZmlsbChwcml2LCBpdCwgYywgcik7CisgICAgICAgICAgICBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfaXRlbV9maWxsKHByaXYsIGl0LCBjLCByb3cpOwogICAgICAgICB9Ci0g
ICAgICAgIG95ICs9IHRoOworICAgICAgICBveSArPSB0aWxlSGVpZ2h0OwogICAgIH0KIAotICAg
IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCA9IG9mZl94OworICAgIHByaXYtPnZpZXcub2Zmc2V0
LmJhc2UueCA9IG9mZnNldFg7CiB9CiAKIC8qKgpAQCAtMTA4MywxODMgKzEwODMsMTgzIEBAIHN0
YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3dyYXBfbGVmdChFd2tfVGls
ZWRfQmFja2luZ19TdG9yZV9EYXRhCiAgKi8KIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV92aWV3X3dyYXBfcmlnaHQoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJp
diwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHksIHVuc2lnbmVkIGludCBjb3VudCkKIHsKLSAg
ICB1bnNpZ25lZCBpbnQgcjsKLSAgICBFdmFzX0Nvb3JkIHR3ID0gcHJpdi0+dmlldy50aWxlLndp
ZHRoOwotICAgIEV2YXNfQ29vcmQgdGggPSBwcml2LT52aWV3LnRpbGUuaGVpZ2h0OwotICAgIEV2
YXNfQ29vcmQgb2ZmX3ggPSBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggLSBjb3VudCAqIHR3Owot
ICAgIEV2YXNfQ29vcmQgb3kgPSB5ICsgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55OwotICAgIEVp
bmFfSW5saXN0KiogaXRyLCAqKiBpdHJfZW5kOworICAgIHVuc2lnbmVkIGludCByb3c7CisgICAg
RXZhc19Db29yZCB0aWxlV2lkdGggPSBwcml2LT52aWV3LnRpbGUud2lkdGg7CisgICAgRXZhc19D
b29yZCB0aWxlSGVpZ2h0ID0gcHJpdi0+dmlldy50aWxlLmhlaWdodDsKKyAgICBFdmFzX0Nvb3Jk
IG9mZnNldFggPSBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggLSBjb3VudCAqIHRpbGVXaWR0aDsK
KyAgICBFdmFzX0Nvb3JkIHRpbGVQb3NpdGlvblkgPSB5ICsgcHJpdi0+dmlldy5vZmZzZXQuYmFz
ZS55OworICAgIEVpbmFfSW5saXN0KiogaXRlcmF0b3IsICoqIGl0ZXJhdG9yRW5kOwogCi0gICAg
aXRyID0gcHJpdi0+dmlldy5pdGVtczsKLSAgICBpdHJfZW5kID0gaXRyICsgcHJpdi0+dmlldy5y
b3dzOwotICAgIHIgPSAwOworICAgIGl0ZXJhdG9yID0gcHJpdi0+dmlldy5pdGVtczsKKyAgICBp
dGVyYXRvckVuZCA9IGl0ZXJhdG9yICsgcHJpdi0+dmlldy5yb3dzOworICAgIHJvdyA9IDA7CiAK
LSAgICBwcml2LT5tb2RlbC5iYXNlLmNvbCAtPSBjb3VudDsKKyAgICBwcml2LT5tb2RlbC5iYXNl
LmNvbHVtbiAtPSBjb3VudDsKIAotICAgIGZvciAoOyBpdHIgPCBpdHJfZW5kOyBpdHIrKywgcisr
KSB7Ci0gICAgICAgIEV2YXNfQ29vcmQgb3ggPSB4ICsgKGNvdW50IC0gMSkgKiB0dyArIG9mZl94
OwotICAgICAgICB1bnNpZ25lZCBpbnQgaSwgYyA9IGNvdW50IC0gMTsKKyAgICBmb3IgKDsgaXRl
cmF0b3IgPCBpdGVyYXRvckVuZDsgaXRlcmF0b3IrKywgcm93KyspIHsKKyAgICAgICAgRXZhc19D
b29yZCBveCA9IHggKyAoY291bnQgLSAxKSAqIHRpbGVXaWR0aCArIG9mZnNldFg7CisgICAgICAg
IHVuc2lnbmVkIGludCBjID0gY291bnQgLSAxOwogCi0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBj
b3VudDsgaSsrLCBjLS0sIG94IC09IHR3KSB7Ci0gICAgICAgICAgICBFd2tfVGlsZWRfQmFja2lu
Z19TdG9yZV9JdGVtKiBpdDsKLSAgICAgICAgICAgIGl0ID0gRUlOQV9JTkxJU1RfQ09OVEFJTkVS
X0dFVCgoKml0ciktPmxhc3QsIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0pOwotICAgICAg
ICAgICAgKml0ciA9IGVpbmFfaW5saXN0X3Byb21vdGUoKml0ciwgKCppdHIpLT5sYXN0KTsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrLCBjLS0sIG94IC09
IHRpbGVXaWR0aCkgeworICAgICAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSog
aXRlbTsKKyAgICAgICAgICAgIGl0ZW0gPSBFSU5BX0lOTElTVF9DT05UQUlORVJfR0VUKCgqaXRl
cmF0b3IpLT5sYXN0LCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKTsKKyAgICAgICAgICAg
ICppdGVyYXRvciA9IGVpbmFfaW5saXN0X3Byb21vdGUoKml0ZXJhdG9yLCAoKml0ZXJhdG9yKS0+
bGFzdCk7CiAKLSAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX21vdmUo
aXQsIG94LCBveSk7Ci0gICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9m
aWxsKHByaXYsIGl0LCBjLCByKTsKKyAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV9pdGVtX21vdmUoaXRlbSwgb3gsIHRpbGVQb3NpdGlvblkpOworICAgICAgICAgICAgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZmlsbChwcml2LCBpdGVtLCBjLCByb3cpOwogICAgICAg
ICB9Ci0gICAgICAgIG95ICs9IHRoOworICAgICAgICB0aWxlUG9zaXRpb25ZICs9IHRpbGVIZWln
aHQ7CiAgICAgfQogCi0gICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54ID0gb2ZmX3g7CisgICAg
cHJpdi0+dmlldy5vZmZzZXQuYmFzZS54ID0gb2Zmc2V0WDsKIH0KIAogc3RhdGljIHZvaWQgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcmVmaWxsKEV3a19UaWxlZF9CYWNraW5nX1N0b3Jl
X0RhdGEqIHByaXYsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5LCBpbnQgc3RlcFgsIGludCBz
dGVwWSkKIHsKLSAgICBFaW5hX0lubGlzdCoqIGl0ciwgKippdHJfZW5kOwotICAgIEV2YXNfQ29v
cmQgYmFzZV9veCwgb3ksIHR3LCB0aDsKKyAgICBFaW5hX0lubGlzdCoqIGl0ZXJhdG9yLCAqKml0
ZXJhdG9yRW5kOworICAgIEV2YXNfQ29vcmQgYmFzZVRpbGVQb3NpdGlvblgsIHRpbGVQb3NpdGlv
blksIHRpbGVXaWR0aCwgdGlsZUhlaWdodDsKICAgICB1bnNpZ25lZCBpbnQgcjsKIAogICAgIGV2
YXNfb2JqZWN0X21vdmUocHJpdi0+YmFzZS5jbGlwcGVyLCB4LCB5KTsKIAotICAgIHR3ID0gcHJp
di0+dmlldy50aWxlLndpZHRoOwotICAgIHRoID0gcHJpdi0+dmlldy50aWxlLmhlaWdodDsKKyAg
ICB0aWxlV2lkdGggPSBwcml2LT52aWV3LnRpbGUud2lkdGg7CisgICAgdGlsZUhlaWdodCA9IHBy
aXYtPnZpZXcudGlsZS5oZWlnaHQ7CiAKLSAgICBiYXNlX294ID0geCArIHByaXYtPnZpZXcub2Zm
c2V0LmJhc2UueDsKLSAgICBveSA9IHkgKyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnk7CisgICAg
YmFzZVRpbGVQb3NpdGlvblggPSB4ICsgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54OworICAgIHRp
bGVQb3NpdGlvblkgPSB5ICsgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55OwogCi0gICAgaXRyID0g
cHJpdi0+dmlldy5pdGVtczsKLSAgICBpdHJfZW5kID0gaXRyICsgcHJpdi0+dmlldy5yb3dzOwor
ICAgIGl0ZXJhdG9yID0gcHJpdi0+dmlldy5pdGVtczsKKyAgICBpdGVyYXRvckVuZCA9IGl0ZXJh
dG9yICsgcHJpdi0+dmlldy5yb3dzOwogICAgIHIgPSAwOwogCi0gICAgcHJpdi0+bW9kZWwuYmFz
ZS5jb2wgLT0gc3RlcFg7CisgICAgcHJpdi0+bW9kZWwuYmFzZS5jb2x1bW4gLT0gc3RlcFg7CiAg
ICAgcHJpdi0+bW9kZWwuYmFzZS5yb3cgLT0gc3RlcFk7CiAKLSAgICBmb3IgKDsgaXRyIDwgaXRy
X2VuZDsgaXRyKyssIHIrKykgewotICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVt
KiBpdDsKLSAgICAgICAgRXZhc19Db29yZCBveCA9IGJhc2Vfb3g7Ci0gICAgICAgIHVuc2lnbmVk
IGludCBjID0gMDsKLSAgICAgICAgRUlOQV9JTkxJU1RfRk9SRUFDSCgqaXRyLCBpdCkgewotICAg
ICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZmlsbChwcml2LCBpdCwgYywg
cik7Ci0gICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9tb3ZlKGl0LCBv
eCwgb3kpOwotICAgICAgICAgICAgYysrOwotICAgICAgICAgICAgb3ggKz0gdHc7CisgICAgZm9y
ICg7IGl0ZXJhdG9yIDwgaXRlcmF0b3JFbmQ7IGl0ZXJhdG9yKyssIHIrKykgeworICAgICAgICBF
d2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKiBpdGVtOworICAgICAgICBFdmFzX0Nvb3JkIG5l
d1RpbGVQb3NpdGlvblggPSBiYXNlVGlsZVBvc2l0aW9uWDsKKyAgICAgICAgdW5zaWduZWQgaW50
IGNvdW50ID0gMDsKKyAgICAgICAgRUlOQV9JTkxJU1RfRk9SRUFDSCgqaXRlcmF0b3IsIGl0ZW0p
IHsKKyAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2ZpbGwocHJpdiwg
aXRlbSwgY291bnQsIHIpOworICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0
ZW1fbW92ZShpdGVtLCBuZXdUaWxlUG9zaXRpb25YLCB0aWxlUG9zaXRpb25ZKTsKKyAgICAgICAg
ICAgIGNvdW50Kys7CisgICAgICAgICAgICBuZXdUaWxlUG9zaXRpb25YICs9IHRpbGVXaWR0aDsK
ICAgICAgICAgfQotICAgICAgICBveSArPSB0aDsKKyAgICAgICAgdGlsZVBvc2l0aW9uWSArPSB0
aWxlSGVpZ2h0OwogICAgIH0KIH0KIAogc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX3ZpZXdfcG9zX2FwcGx5KEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYsIEV2
YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5KQogewotICAgIEVpbmFfSW5saXN0KiogaXRyLCAqKml0
cl9lbmQ7Ci0gICAgRXZhc19Db29yZCBiYXNlX294LCBveSwgdHcsIHRoOworICAgIEVpbmFfSW5s
aXN0KiogaXRlcmF0b3IsICoqaXRlcmF0b3JFbmQ7CisgICAgRXZhc19Db29yZCBiYXNlVGlsZVBv
c2l0aW9uWCwgYmFzZVRpbGVQb3NpdGlvblksIHRpbGVXaWR0aCwgdGlsZUhlaWdodDsKIAogICAg
IGV2YXNfb2JqZWN0X21vdmUocHJpdi0+YmFzZS5jbGlwcGVyLCB4LCB5KTsKIAotICAgIHR3ID0g
cHJpdi0+dmlldy50aWxlLndpZHRoOwotICAgIHRoID0gcHJpdi0+dmlldy50aWxlLmhlaWdodDsK
KyAgICB0aWxlV2lkdGggPSBwcml2LT52aWV3LnRpbGUud2lkdGg7CisgICAgdGlsZUhlaWdodCA9
IHByaXYtPnZpZXcudGlsZS5oZWlnaHQ7CiAKLSAgICBiYXNlX294ID0geCArIHByaXYtPnZpZXcu
b2Zmc2V0LmJhc2UueDsKLSAgICBveSA9IHkgKyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnk7Cisg
ICAgYmFzZVRpbGVQb3NpdGlvblggPSB4ICsgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54OworICAg
IGJhc2VUaWxlUG9zaXRpb25ZID0geSArIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueTsKIAotICAg
IGl0ciA9IHByaXYtPnZpZXcuaXRlbXM7Ci0gICAgaXRyX2VuZCA9IGl0ciArIHByaXYtPnZpZXcu
cm93czsKLSAgICBmb3IgKDsgaXRyIDwgaXRyX2VuZDsgaXRyKyspIHsKKyAgICBpdGVyYXRvciA9
IHByaXYtPnZpZXcuaXRlbXM7CisgICAgaXRlcmF0b3JFbmQgPSBpdGVyYXRvciArIHByaXYtPnZp
ZXcucm93czsKKyAgICBmb3IgKDsgaXRlcmF0b3IgPCBpdGVyYXRvckVuZDsgaXRlcmF0b3IrKykg
ewogICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKiBpdDsKLSAgICAgICAgRXZh
c19Db29yZCBveCA9IGJhc2Vfb3g7Ci0gICAgICAgIEVJTkFfSU5MSVNUX0ZPUkVBQ0goKml0ciwg
aXQpIHsKLSAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX21vdmUoaXQs
IG94LCBveSk7Ci0gICAgICAgICAgICBveCArPSB0dzsKKyAgICAgICAgRXZhc19Db29yZCBveCA9
IGJhc2VUaWxlUG9zaXRpb25YOworICAgICAgICBFSU5BX0lOTElTVF9GT1JFQUNIKCppdGVyYXRv
ciwgaXQpIHsKKyAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX21vdmUo
aXQsIG94LCBiYXNlVGlsZVBvc2l0aW9uWSk7CisgICAgICAgICAgICBveCArPSB0aWxlV2lkdGg7
CiAgICAgICAgIH0KLSAgICAgICAgb3kgKz0gdGg7CisgICAgICAgIGJhc2VUaWxlUG9zaXRpb25Z
ICs9IHRpbGVIZWlnaHQ7CiAgICAgfQogfQogCiBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfc21hcnRfY2FsY3VsYXRlX29mZnNldF9mb3JjZShFd2tfVGlsZWRfQmFja2luZ19T
dG9yZV9EYXRhKiBwcml2KQogewotICAgIEV2YXNfQ29vcmQgZHggPSBwcml2LT52aWV3Lm9mZnNl
dC5jdXIueCAtIHByaXYtPnZpZXcub2Zmc2V0Lm9sZC54OwotICAgIEV2YXNfQ29vcmQgZHkgPSBw
cml2LT52aWV3Lm9mZnNldC5jdXIueSAtIHByaXYtPnZpZXcub2Zmc2V0Lm9sZC55OwotICAgIEV2
YXNfQ29vcmQgdHcsIHRoOwotICAgIGludCBzdGVwX3ksIHN0ZXBfeDsKKyAgICBFdmFzX0Nvb3Jk
IGRlbHRhWCA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci54IC0gcHJpdi0+dmlldy5vZmZzZXQub2xk
Lng7CisgICAgRXZhc19Db29yZCBkZWx0YVkgPSBwcml2LT52aWV3Lm9mZnNldC5jdXIueSAtIHBy
aXYtPnZpZXcub2Zmc2V0Lm9sZC55OworICAgIEV2YXNfQ29vcmQgdGlsZVdpZHRoLCB0aWxlSGVp
Z2h0OworICAgIGludCBzdGVwWSwgc3RlcFg7CiAKLSAgICBJTkYoIm89JXAsIG9mZnNldDogJSs0
ZCwgJSs0ZCAoJSs0ZCwgJSs0ZCkiLAotICAgICAgICBwcml2LT5zZWxmLCBkeCwgZHksIHByaXYt
PnZpZXcub2Zmc2V0LmN1ci54LCBwcml2LT52aWV3Lm9mZnNldC5jdXIueSk7CisgICAgSU5GKCJl
d2tUaWxlJXAsIG9mZnNldDogJSs0ZCwgJSs0ZCAoJSs0ZCwgJSs0ZCkiLAorICAgICAgICBwcml2
LT5zZWxmLCBkZWx0YVgsIGRlbHRhWSwgcHJpdi0+dmlldy5vZmZzZXQuY3VyLngsIHByaXYtPnZp
ZXcub2Zmc2V0LmN1ci55KTsKIAotICAgIHR3ID0gcHJpdi0+dmlldy50aWxlLndpZHRoOwotICAg
IHRoID0gcHJpdi0+dmlldy50aWxlLmhlaWdodDsKKyAgICB0aWxlV2lkdGggPSBwcml2LT52aWV3
LnRpbGUud2lkdGg7CisgICAgdGlsZUhlaWdodCA9IHByaXYtPnZpZXcudGlsZS5oZWlnaHQ7CiAK
LSAgICBsb25nIG5ld19jb2wgPSAtcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggLyB0dzsKLSAgICBz
dGVwX3ggPSBwcml2LT5tb2RlbC5iYXNlLmNvbCAtIG5ld19jb2w7Ci0gICAgbG9uZyBuZXdfcm93
ID0gLXByaXYtPnZpZXcub2Zmc2V0LmN1ci55IC8gdGg7Ci0gICAgc3RlcF95ID0gcHJpdi0+bW9k
ZWwuYmFzZS5yb3cgLSBuZXdfcm93OworICAgIGxvbmcgbmV3Q29sdW1uID0gLXByaXYtPnZpZXcu
b2Zmc2V0LmN1ci54IC8gdGlsZVdpZHRoOworICAgIHN0ZXBYID0gcHJpdi0+bW9kZWwuYmFzZS5j
b2x1bW4gLSBuZXdDb2x1bW47CisgICAgbG9uZyBuZXdSb3cgPSAtcHJpdi0+dmlldy5vZmZzZXQu
Y3VyLnkgLyB0aWxlSGVpZ2h0OworICAgIHN0ZXBZID0gcHJpdi0+bW9kZWwuYmFzZS5yb3cgLSBu
ZXdSb3c7CiAKICAgICBwcml2LT52aWV3Lm9mZnNldC5vbGQueCA9IHByaXYtPnZpZXcub2Zmc2V0
LmN1ci54OwogICAgIHByaXYtPnZpZXcub2Zmc2V0Lm9sZC55ID0gcHJpdi0+dmlldy5vZmZzZXQu
Y3VyLnk7CiAgICAgZXZhc19vYmplY3RfbW92ZSgKLSAgICAgICAgcHJpdi0+Y29udGVudHNfY2xp
cHBlciwKKyAgICAgICAgcHJpdi0+Y29udGVudHNDbGlwcGVyLAogICAgICAgICBwcml2LT52aWV3
Lm9mZnNldC5jdXIueCArIHByaXYtPnZpZXcueCwKICAgICAgICAgcHJpdi0+dmlldy5vZmZzZXQu
Y3VyLnkgKyBwcml2LT52aWV3LnkpOwogCi0gICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54ICs9
IGR4IC0gc3RlcF94ICogdHc7Ci0gICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ICs9IGR5IC0g
c3RlcF95ICogdGg7CisgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54ICs9IGRlbHRhWCAtIHN0
ZXBYICogdGlsZVdpZHRoOworICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSArPSBkZWx0YVkg
LSBzdGVwWSAqIHRpbGVIZWlnaHQ7CiAKICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmll
d19yZWZpbGwKLSAgICAgICAgKHByaXYsIHByaXYtPnZpZXcueCwgcHJpdi0+dmlldy55LCBzdGVw
X3gsIHN0ZXBfeSk7CisgICAgICAgIChwcml2LCBwcml2LT52aWV3LngsIHByaXYtPnZpZXcueSwg
c3RlcFgsIHN0ZXBZKTsKIH0KIAogc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3NtYXJ0X2NhbGN1bGF0ZV9vZmZzZXQoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJp
diwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHkpCiB7Ci0gICAgRXZhc19Db29yZCBkeCA9IHBy
aXYtPnZpZXcub2Zmc2V0LmN1ci54IC0gcHJpdi0+dmlldy5vZmZzZXQub2xkLng7Ci0gICAgRXZh
c19Db29yZCBkeSA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci55IC0gcHJpdi0+dmlldy5vZmZzZXQu
b2xkLnk7Ci0gICAgRXZhc19Db29yZCB0dywgdGg7Ci0gICAgaW50IHN0ZXBfeSwgc3RlcF94Owor
ICAgIEV2YXNfQ29vcmQgZGVsdGFYID0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggLSBwcml2LT52
aWV3Lm9mZnNldC5vbGQueDsKKyAgICBFdmFzX0Nvb3JkIGRlbHRhWSA9IHByaXYtPnZpZXcub2Zm
c2V0LmN1ci55IC0gcHJpdi0+dmlldy5vZmZzZXQub2xkLnk7CisgICAgRXZhc19Db29yZCB0aWxl
V2lkdGgsIHRpbGVIZWlnaHQ7CisgICAgaW50IHN0ZXBZLCBzdGVwWDsKIAotICAgIElORigibz0l
cCwgb2Zmc2V0OiAlKzRkLCAlKzRkICglKzRkLCAlKzRkKSIsCi0gICAgICAgIHByaXYtPnNlbGYs
IGR4LCBkeSwgcHJpdi0+dmlldy5vZmZzZXQuY3VyLngsIHByaXYtPnZpZXcub2Zmc2V0LmN1ci55
KTsKKyAgICBJTkYoImV3a1RpbGUlcCwgb2Zmc2V0OiAlKzRkLCAlKzRkICglKzRkLCAlKzRkKSIs
CisgICAgICAgIHByaXYtPnNlbGYsIGRlbHRhWCwgZGVsdGFZLCBwcml2LT52aWV3Lm9mZnNldC5j
dXIueCwgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkpOwogCi0gICAgaWYgKCFkeCAmJiAhZHkpCisg
ICAgaWYgKCFkZWx0YVggJiYgIWRlbHRhWSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgdHcgPSBw
cml2LT52aWV3LnRpbGUud2lkdGg7Ci0gICAgdGggPSBwcml2LT52aWV3LnRpbGUuaGVpZ2h0Owor
ICAgIHRpbGVXaWR0aCA9IHByaXYtPnZpZXcudGlsZS53aWR0aDsKKyAgICB0aWxlSGVpZ2h0ID0g
cHJpdi0+dmlldy50aWxlLmhlaWdodDsKIAotICAgIGxvbmcgbmV3X2NvbCA9IC1wcml2LT52aWV3
Lm9mZnNldC5jdXIueCAvIHR3OwotICAgIHN0ZXBfeCA9IHByaXYtPm1vZGVsLmJhc2UuY29sIC0g
bmV3X2NvbDsKLSAgICBsb25nIG5ld19yb3cgPSAtcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkgLyB0
aDsKLSAgICBzdGVwX3kgPSBwcml2LT5tb2RlbC5iYXNlLnJvdyAtIG5ld19yb3c7CisgICAgbG9u
ZyBuZXdDb2wgPSAtcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggLyB0aWxlV2lkdGg7CisgICAgc3Rl
cFggPSBwcml2LT5tb2RlbC5iYXNlLmNvbHVtbiAtIG5ld0NvbDsKKyAgICBsb25nIG5ld1JvdyA9
IC1wcml2LT52aWV3Lm9mZnNldC5jdXIueSAvIHRpbGVIZWlnaHQ7CisgICAgc3RlcFkgPSBwcml2
LT5tb2RlbC5iYXNlLnJvdyAtIG5ld1JvdzsKIAogICAgIHByaXYtPnZpZXcub2Zmc2V0Lm9sZC54
ID0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLng7CiAgICAgcHJpdi0+dmlldy5vZmZzZXQub2xkLnkg
PSBwcml2LT52aWV3Lm9mZnNldC5jdXIueTsKICAgICBldmFzX29iamVjdF9tb3ZlKAotICAgICAg
ICBwcml2LT5jb250ZW50c19jbGlwcGVyLAorICAgICAgICBwcml2LT5jb250ZW50c0NsaXBwZXIs
CiAgICAgICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1ci54ICsgcHJpdi0+dmlldy54LAogICAgICAg
ICBwcml2LT52aWV3Lm9mZnNldC5jdXIueSArIHByaXYtPnZpZXcueSk7CiAKLSAgICBpZiAoKHN0
ZXBfeCA8IDAgJiYgc3RlcF94IDw9IC1wcml2LT52aWV3LmNvbHMpCi0gICAgICAgIHx8IChzdGVw
X3ggPiAwICYmIHN0ZXBfeCA+PSBwcml2LT52aWV3LmNvbHMpCi0gICAgICAgIHx8IChzdGVwX3kg
PCAwICYmIHN0ZXBfeSA8PSAtcHJpdi0+dmlldy5yb3dzKQotICAgICAgICB8fCAoc3RlcF95ID4g
MCAmJiBzdGVwX3kgPj0gcHJpdi0+dmlldy5yb3dzKSkgeworICAgIGlmICgoc3RlcFggPCAwICYm
IHN0ZXBYIDw9IC1wcml2LT52aWV3LmNvbHMpCisgICAgICAgIHx8IChzdGVwWCA+IDAgJiYgc3Rl
cFggPj0gcHJpdi0+dmlldy5jb2xzKQorICAgICAgICB8fCAoc3RlcFkgPCAwICYmIHN0ZXBZIDw9
IC1wcml2LT52aWV3LnJvd3MpCisgICAgICAgIHx8IChzdGVwWSA+IDAgJiYgc3RlcFkgPj0gcHJp
di0+dmlldy5yb3dzKSkgewogCi0gICAgICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCArPSBk
eCAtIHN0ZXBfeCAqIHR3OwotICAgICAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgKz0gZHkg
LSBzdGVwX3kgKiB0aDsKKyAgICAgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54ICs9IGRlbHRh
WCAtIHN0ZXBYICogdGlsZVdpZHRoOworICAgICAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkg
Kz0gZGVsdGFZIC0gc3RlcFkgKiB0aWxlSGVpZ2h0OwogCiAgICAgICAgIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV92aWV3X3JlZmlsbAotICAgICAgICAgICAgKHByaXYsIHByaXYtPnZpZXcueCwg
cHJpdi0+dmlldy55LCBzdGVwX3gsIHN0ZXBfeSk7CisgICAgICAgICAgICAocHJpdiwgcHJpdi0+
dmlldy54LCBwcml2LT52aWV3LnksIHN0ZXBYLCBzdGVwWSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggKz0gZHg7Ci0gICAgcHJpdi0+dmll
dy5vZmZzZXQuYmFzZS55ICs9IGR5OworICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCArPSBk
ZWx0YVg7CisgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ICs9IGRlbHRhWTsKIAotICAgIGlm
IChzdGVwX3kgPCAwKQotICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld193cmFw
X3VwKHByaXYsIHgsIHksIC1zdGVwX3kpOwotICAgIGVsc2UgaWYgKHN0ZXBfeSA+IDApCi0gICAg
ICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3dyYXBfZG93bihwcml2LCB4LCB5LCBz
dGVwX3kpOworICAgIGlmIChzdGVwWSA8IDApCisgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV92aWV3X3dyYXBfdXAocHJpdiwgeCwgeSwgLXN0ZXBZKTsKKyAgICBlbHNlIGlmIChzdGVw
WSA+IDApCisgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3dyYXBfZG93bihw
cml2LCB4LCB5LCBzdGVwWSk7CiAKLSAgICBpZiAoc3RlcF94IDwgMCkKLSAgICAgICAgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfd3JhcF9sZWZ0KHByaXYsIHgsIHksIC1zdGVwX3gpOwot
ICAgIGVsc2UgaWYgKHN0ZXBfeCA+IDApCi0gICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV92aWV3X3dyYXBfcmlnaHQocHJpdiwgeCwgeSwgc3RlcF94KTsKKyAgICBpZiAoc3RlcFggPCAw
KQorICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld193cmFwX2xlZnQocHJpdiwg
eCwgeSwgLXN0ZXBYKTsKKyAgICBlbHNlIGlmIChzdGVwWCA+IDApCisgICAgICAgIF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV92aWV3X3dyYXBfcmlnaHQocHJpdiwgeCwgeSwgc3RlcFgpOwogCiAg
ICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcG9zX2FwcGx5KHByaXYsIHgsIHkpOwog
fQpAQCAtMTI3MCwzMSArMTI3MCwzMSBAQCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfc21hcnRfY2FsY3VsYXRlX3BvcyhFd2tfVGlsZWRfQmFja2luZ19TdG9yZQogICAgIHBy
aXYtPnZpZXcueCA9IHg7CiAgICAgcHJpdi0+dmlldy55ID0geTsKICAgICBldmFzX29iamVjdF9t
b3ZlKAotICAgICAgICBwcml2LT5jb250ZW50c19jbGlwcGVyLAorICAgICAgICBwcml2LT5jb250
ZW50c0NsaXBwZXIsCiAgICAgICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1ci54ICsgcHJpdi0+dmll
dy54LAogICAgICAgICBwcml2LT52aWV3Lm9mZnNldC5jdXIueSArIHByaXYtPnZpZXcueSk7CiB9
CiAKIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9maWxsX3JlbmRlcmVycyhF
d2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2KQogewotICAgIEVpbmFfSW5saXN0KiBp
dDsKKyAgICBFaW5hX0lubGlzdCogbGlzdDsKICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9J
dGVtKiBpdGVtOwogICAgIGludCBpLCBqOwogCiAgICAgZm9yIChpID0gMDsgaSA8IHByaXYtPnZp
ZXcucm93czsgaSsrKSB7Ci0gICAgICAgIGl0ID0gcHJpdi0+dmlldy5pdGVtc1tpXTsKKyAgICAg
ICAgbGlzdCA9IHByaXYtPnZpZXcuaXRlbXNbaV07CiAgICAgICAgIGogPSAwOwotICAgICAgICBF
SU5BX0lOTElTVF9GT1JFQUNIKGl0LCBpdGVtKQorICAgICAgICBFSU5BX0lOTElTVF9GT1JFQUNI
KGxpc3QsIGl0ZW0pCiAgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9m
aWxsKHByaXYsIGl0ZW0sIGorKywgaSk7CiAgICAgfQogfQogCiBzdGF0aWMgdm9pZCBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfY2FsY3VsYXRlKEV2YXNfT2JqZWN0KiBld2tUaWxlKQog
ewotICAgIEV2YXNfQ29vcmQgeCwgeSwgdywgaDsKKyAgICBFdmFzX0Nvb3JkIHgsIHksIHdpZHRo
LCBoZWlnaHQ7CiAKLSAgICBldmFzX29iamVjdF9nZW9tZXRyeV9nZXQoZXdrVGlsZSwgJngsICZ5
LCAmdywgJmgpOwotICAgIERCRygibz0lcCBhdCAlZCwlZCArICVkeCVkIiwgZXdrVGlsZSwgeCwg
eSwgdywgaCk7CisgICAgZXZhc19vYmplY3RfZ2VvbWV0cnlfZ2V0KGV3a1RpbGUsICZ4LCAmeSwg
JndpZHRoLCAmaGVpZ2h0KTsKKyAgICBEQkcoImV3a1RpbGUlcCBhdCAlZCwlZCArICVkeCVkIiwg
ZXdrVGlsZSwgeCwgeSwgd2lkdGgsIGhlaWdodCk7CiAKICAgICBQUklWX0RBVEFfR0VUX09SX1JF
VFVSTihld2tUaWxlLCBwcml2KTsKIApAQCAtMTMwMywyNSArMTMwMywyNSBAQCBzdGF0aWMgdm9p
ZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfY2FsY3VsYXRlKEV2YXNfT2JqZWN0KiBl
d2tUaWxlKQogICAgIGV3a190aWxlX21hdHJpeF9mcmVlemUocHJpdi0+bW9kZWwubWF0cml4KTsK
IAogICAgIGlmICghcHJpdi0+cmVuZGVyLnN1c3BlbmQgJiYgcHJpdi0+Y2hhbmdlZC5tb2RlbCkg
ewotICAgICAgICB1bnNpZ25lZCBsb25nIGNvbHMsIHJvd3M7CisgICAgICAgIHVuc2lnbmVkIGxv
bmcgY29sdW1ucywgcm93czsKIAotICAgICAgICBjb2xzID0gcHJpdi0+bW9kZWwud2lkdGggLyBw
cml2LT52aWV3LnRpbGUud2lkdGggKyAxOworICAgICAgICBjb2x1bW5zID0gcHJpdi0+bW9kZWwu
d2lkdGggLyBwcml2LT52aWV3LnRpbGUud2lkdGggKyAxOwogICAgICAgICByb3dzID0gcHJpdi0+
bW9kZWwuaGVpZ2h0IC8gcHJpdi0+dmlldy50aWxlLmhlaWdodCArIDE7CiAKLSAgICAgICAgcHJp
di0+bW9kZWwub2xkLmNvbHMgPSBwcml2LT5tb2RlbC5jdXIuY29sczsKLSAgICAgICAgcHJpdi0+
bW9kZWwub2xkLnJvd3MgPSBwcml2LT5tb2RlbC5jdXIucm93czsKLSAgICAgICAgcHJpdi0+bW9k
ZWwuY3VyLmNvbHMgPSBjb2xzOwotICAgICAgICBwcml2LT5tb2RlbC5jdXIucm93cyA9IHJvd3M7
Ci0gICAgICAgIGlmIChwcml2LT5tb2RlbC5vbGQuY29scyA+IGNvbHMpCi0gICAgICAgICAgICBj
b2xzID0gcHJpdi0+bW9kZWwub2xkLmNvbHM7CisgICAgICAgIHByaXYtPm1vZGVsLm9sZC5jb2x1
bW5zID0gcHJpdi0+bW9kZWwuY3VycmVudC5jb2x1bW5zOworICAgICAgICBwcml2LT5tb2RlbC5v
bGQucm93cyA9IHByaXYtPm1vZGVsLmN1cnJlbnQucm93czsKKyAgICAgICAgcHJpdi0+bW9kZWwu
Y3VycmVudC5jb2x1bW5zID0gY29sdW1uczsKKyAgICAgICAgcHJpdi0+bW9kZWwuY3VycmVudC5y
b3dzID0gcm93czsKKyAgICAgICAgaWYgKHByaXYtPm1vZGVsLm9sZC5jb2x1bW5zID4gY29sdW1u
cykKKyAgICAgICAgICAgIGNvbHVtbnMgPSBwcml2LT5tb2RlbC5vbGQuY29sdW1uczsKICAgICAg
ICAgaWYgKHByaXYtPm1vZGVsLm9sZC5yb3dzID4gcm93cykKICAgICAgICAgICAgIHJvd3MgPSBw
cml2LT5tb2RlbC5vbGQucm93czsKLSAgICAgICAgZXdrX3RpbGVfbWF0cml4X3Jlc2l6ZShwcml2
LT5tb2RlbC5tYXRyaXgsIGNvbHMsIHJvd3MpOworICAgICAgICBld2tfdGlsZV9tYXRyaXhfcmVz
aXplKHByaXYtPm1vZGVsLm1hdHJpeCwgY29sdW1ucywgcm93cyk7CiAgICAgfQogCi0gICAgaWYg
KHByaXYtPmNoYW5nZWQucG9zICYmIChwcml2LT52aWV3LnggIT0geCB8fCBwcml2LT52aWV3Lnkg
IT0geSkpIHsKKyAgICBpZiAocHJpdi0+Y2hhbmdlZC5wb3NpdGlvbiAmJiAocHJpdi0+dmlldy54
ICE9IHggfHwgcHJpdi0+dmlldy55ICE9IHkpKSB7CiAgICAgICAgIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9zbWFydF9jYWxjdWxhdGVfcG9zKHByaXYsIHgsIHkpOwotICAgICAgICBwcml2LT5j
aGFuZ2VkLnBvcyA9IEVJTkFfRkFMU0U7CisgICAgICAgIHByaXYtPmNoYW5nZWQucG9zaXRpb24g
PSBFSU5BX0ZBTFNFOwogICAgIH0KICAgICBpZiAocHJpdi0+Y2hhbmdlZC5vZmZzZXQpIHsKICAg
ICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZV9vZmZzZXQocHJp
diwgeCwgeSk7CkBAIC0xMzI5LDcgKzEzMjksNyBAQCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfc21hcnRfY2FsY3VsYXRlKEV2YXNfT2JqZWN0KiBld2tUaWxlKQogICAgIH0K
IAogICAgIGlmIChwcml2LT5jaGFuZ2VkLnNpemUpIHsKLSAgICAgICAgX2V3a190aWxlZF9iYWNr
aW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZV9zaXplKHByaXYsIHcsIGgpOworICAgICAgICBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfY2FsY3VsYXRlX3NpemUocHJpdiwgd2lkdGgsIGhl
aWdodCk7CiAgICAgICAgIHByaXYtPmNoYW5nZWQuc2l6ZSA9IEVJTkFfRkFMU0U7CiAgICAgfQog
CkBAIC0xMzQxLDE3ICsxMzQxLDE3IEBAIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9zbWFydF9jYWxjdWxhdGUoRXZhc19PYmplY3QqIGV3a1RpbGUpCiAgICAgICAgIHJlY3Qu
aCA9IHByaXYtPm1vZGVsLmhlaWdodDsKICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X2ZpbGxfcmVuZGVyZXJzKHByaXYpOwogICAgICAgICBld2tfdGlsZV9tYXRyaXhfcmVzaXplKHBy
aXYtPm1vZGVsLm1hdHJpeCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcml2LT5t
b2RlbC5jdXIuY29scywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcml2LT5tb2Rl
bC5jdXIucm93cyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpdi0+bW9kZWwu
Y3VycmVudC5jb2x1bW5zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaXYtPm1v
ZGVsLmN1cnJlbnQucm93cyk7CiAgICAgICAgIHByaXYtPmNoYW5nZWQubW9kZWwgPSBFSU5BX0ZB
TFNFOwotICAgICAgICBldmFzX29iamVjdF9yZXNpemUocHJpdi0+Y29udGVudHNfY2xpcHBlciwg
cHJpdi0+bW9kZWwud2lkdGgsIHByaXYtPm1vZGVsLmhlaWdodCk7CisgICAgICAgIGV2YXNfb2Jq
ZWN0X3Jlc2l6ZShwcml2LT5jb250ZW50c0NsaXBwZXIsIHByaXYtPm1vZGVsLndpZHRoLCBwcml2
LT5tb2RlbC5oZWlnaHQpOwogICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRf
Y2FsY3VsYXRlX29mZnNldF9mb3JjZShwcml2KTsKIAogICAgICAgICAvKiBNYWtlIHN1cmUgd2Ug
ZG8gbm90IG1pc3MgYW55IGltcG9ydGFudCByZXBhaW50IGJ5CiAgICAgICAgICAqIHJlcGFpbnRp
bmcgdGhlIHdob2xlIHZpZXdwb3J0ICovCi0gICAgICAgIGNvbnN0IEVpbmFfUmVjdGFuZ2xlIHIg
PQorICAgICAgICBjb25zdCBFaW5hX1JlY3RhbmdsZSByZWN0MSA9CiAgICAgICAgIHsgMCwgMCwg
cHJpdi0+bW9kZWwud2lkdGgsIHByaXYtPm1vZGVsLmhlaWdodCB9OwotICAgICAgICBld2tfdGls
ZV9tYXRyaXhfdXBkYXRlKHByaXYtPm1vZGVsLm1hdHJpeCwgJnIsCisgICAgICAgIGV3a190aWxl
X21hdHJpeF91cGRhdGUocHJpdi0+bW9kZWwubWF0cml4LCAmcmVjdDEsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcHJpdi0+dmlldy50aWxlLnpvb20pOwogICAgIH0KIApAQCAtMTQw
Miw3ICsxNDAyLDcgQEAgdm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9yZW5kZXJfY2Jfc2V0
KEV2YXNfT2JqZWN0KiBld2tUaWxlLCBFaW5hX0Jvb2wgKCpjYWwKIHsKICAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTihjYWxsYmFjayk7CiAgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4o
ZXdrVGlsZSwgcHJpdik7Ci0gICAgcHJpdi0+cmVuZGVyLmNiID0gY2FsbGJhY2s7CisgICAgcHJp
di0+cmVuZGVyLmNhbGxiYWNrID0gY2FsbGJhY2s7CiAgICAgcHJpdi0+cmVuZGVyLmRhdGEgPSAo
dm9pZCopZGF0YTsKIH0KIApAQCAtMTQzOSw3ICsxNDM5LDcgQEAgc3RhdGljIEVpbmFfQm9vbCBf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc2Nyb2xsX2Z1bGxfb2Zmc2V0X3NldF9pbnRlcm5hbChF
d2tfVGkKIAogRWluYV9Cb29sIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3Njcm9sbF9mdWxsX29m
ZnNldF9zZXQoRXZhc19PYmplY3QqIGV3a1RpbGUsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5
KQogewotICAgIERCRygibz0lcCwgeD0lZCwgeT0lZCIsIGV3a1RpbGUsIHgsIHkpOworICAgIERC
RygiZXdrVGlsZSVwLCB4PSVkLCB5PSVkIiwgZXdrVGlsZSwgeCwgeSk7CiAKICAgICBQUklWX0RB
VEFfR0VUX09SX1JFVFVSTihld2tUaWxlLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBpZiAoeCA9
PSBwcml2LT52aWV3Lm9mZnNldC5jdXIueCAmJiB5ID09IHByaXYtPnZpZXcub2Zmc2V0LmN1ci55
KQpAQCAtMTQ0OCwxNiArMTQ0OCwxNiBAQCBFaW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfc2Nyb2xsX2Z1bGxfb2Zmc2V0X3NldChFdmFzX09iamVjdCogZXdrVGlsZSwgRQogICAgIHJl
dHVybiBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc2Nyb2xsX2Z1bGxfb2Zmc2V0X3NldF9pbnRl
cm5hbChwcml2LCB4LCB5KTsKIH0KIAotRWluYV9Cb29sIGV3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3Njcm9sbF9mdWxsX29mZnNldF9hZGQoRXZhc19PYmplY3QqIGV3a1RpbGUsIEV2YXNfQ29vcmQg
ZHgsIEV2YXNfQ29vcmQgZHkpCitFaW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc2Ny
b2xsX2Z1bGxfb2Zmc2V0X2FkZChFdmFzX09iamVjdCogZXdrVGlsZSwgRXZhc19Db29yZCBkZWx0
YVgsIEV2YXNfQ29vcmQgZGVsdGFZKQogewotICAgIERCRygibz0lcCwgZHg9JWQsIGR5PSVkIiwg
ZXdrVGlsZSwgZHgsIGR5KTsKKyAgICBEQkcoImV3a1RpbGUlcCwgZGVsdGFYPSVkLCBkZWx0YVk9
JWQiLCBld2tUaWxlLCBkZWx0YVgsIGRlbHRhWSk7CiAKICAgICBQUklWX0RBVEFfR0VUX09SX1JF
VFVSTihld2tUaWxlLCBwcml2LCBFSU5BX0ZBTFNFKTsKLSAgICBpZiAoIWR4ICYmICFkeSkKKyAg
ICBpZiAoIWRlbHRhWCAmJiAhZGVsdGFZKQogICAgICAgICByZXR1cm4gRUlOQV9UUlVFOwogCiAg
ICAgcmV0dXJuIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zY3JvbGxfZnVsbF9vZmZzZXRfc2V0
X2ludGVybmFsCi0gICAgICAgICAgICAgICAocHJpdiwgcHJpdi0+dmlldy5vZmZzZXQuY3VyLngg
KyBkeCwgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkgKyBkeSk7CisgICAgICAgICAgICAgICAocHJp
diwgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggKyBkZWx0YVgsIHByaXYtPnZpZXcub2Zmc2V0LmN1
ci55ICsgZGVsdGFZKTsKIH0KIAogc3RhdGljIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfem9vbV9zZXRfaW50ZXJuYWwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJp
diwgZmxvYXQqIHpvb20sIEV2YXNfQ29vcmQgY3VycmVudFgsIEV2YXNfQ29vcmQgY3VycmVudFks
IEV2YXNfQ29vcmQqIG9mZnNldFgsIEV2YXNfQ29vcmQqIG9mZnNldFkpCkBAIC0xNDcyLDE5ICsx
NDcyLDE5IEBAIHN0YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3pvb21f
c2V0X2ludGVybmFsKEV3a19UaWxlZF9CYWNraW5nX1N0CiAgICAgfQogCiAgICAgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9mbHVzaChwcml2KTsKLSAgICBFdmFz
X0Nvb3JkIHR3LCB0aDsKKyAgICBFdmFzX0Nvb3JkIHRpbGVXaWR0aCwgdGlsZUhlaWdodDsKIAog
ICAgICp6b29tID0gUk9VTkRFRF9aT09NKHByaXYtPnZpZXcudGlsZS53aWR0aCwgKnpvb20pOwog
Ci0gICAgdHcgPSBwcml2LT52aWV3LnRpbGUud2lkdGg7Ci0gICAgdGggPSBwcml2LT52aWV3LnRp
bGUuaGVpZ2h0OworICAgIHRpbGVXaWR0aCA9IHByaXYtPnZpZXcudGlsZS53aWR0aDsKKyAgICB0
aWxlSGVpZ2h0ID0gcHJpdi0+dmlldy50aWxlLmhlaWdodDsKIAogICAgIGZsb2F0IHNjYWxlID0g
Knpvb20gLyBwcml2LT52aWV3LnRpbGUuem9vbTsKIAogICAgIHByaXYtPnZpZXcudGlsZS56b29t
ID0gKnpvb207CiAgICAgLy8gdG9kbzogY2hlY2sgY3VycmVudFggWzAsIHddLi4uCi0gICAgcHJp
di0+dmlldy5vZmZzZXQuem9vbV9jZW50ZXIueCA9IGN1cnJlbnRYOwotICAgIHByaXYtPnZpZXcu
b2Zmc2V0Lnpvb21fY2VudGVyLnkgPSBjdXJyZW50WTsKKyAgICBwcml2LT52aWV3Lm9mZnNldC56
b29tQ2VudGVyLnggPSBjdXJyZW50WDsKKyAgICBwcml2LT52aWV3Lm9mZnNldC56b29tQ2VudGVy
LnkgPSBjdXJyZW50WTsKIAogCiAgICAgaWYgKCFwcml2LT52aWV3LndpZHRoIHx8ICFwcml2LT52
aWV3LmhlaWdodCkgewpAQCAtMTQ5MiwzOCArMTQ5MiwzOCBAQCBzdGF0aWMgRWluYV9Cb29sIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV96b29tX3NldF9pbnRlcm5hbChFd2tfVGlsZWRfQmFja2lu
Z19TdAogICAgICAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgPSAwOwogICAgICAgICByZXR1
cm4gRUlOQV9UUlVFOwogICAgIH0KLSAgICBFaW5hX0lubGlzdCoqIGl0ciwgKippdHJfZW5kOwor
ICAgIEVpbmFfSW5saXN0KiogaXRlcmF0b3IsICoqaXRlcmF0b3JFbmQ7CiAgICAgRXdrX1RpbGVk
X0JhY2tpbmdfU3RvcmVfSXRlbSogaXQ7CiAKLSAgICBFdmFzX0Nvb3JkIG5ld194ID0gY3VycmVu
dFggKyAocHJpdi0+dmlldy5vZmZzZXQuY3VyLnggLSBjdXJyZW50WCkgKiBzY2FsZTsKLSAgICBF
dmFzX0Nvb3JkIG5ld195ID0gY3VycmVudFkgKyAocHJpdi0+dmlldy5vZmZzZXQuY3VyLnkgLSBj
dXJyZW50WSkgKiBzY2FsZTsKKyAgICBFdmFzX0Nvb3JkIG5ld1ggPSBjdXJyZW50WCArIChwcml2
LT52aWV3Lm9mZnNldC5jdXIueCAtIGN1cnJlbnRYKSAqIHNjYWxlOworICAgIEV2YXNfQ29vcmQg
bmV3WSA9IGN1cnJlbnRZICsgKHByaXYtPnZpZXcub2Zmc2V0LmN1ci55IC0gY3VycmVudFkpICog
c2NhbGU7CiAKLSAgICBFdmFzX0Nvb3JkIG1vZGVsX3cgPSBwcml2LT5tb2RlbC53aWR0aCAqIHNj
YWxlOwotICAgIEV2YXNfQ29vcmQgbW9kZWxfaCA9IHByaXYtPm1vZGVsLmhlaWdodCAqIHNjYWxl
OworICAgIEV2YXNfQ29vcmQgbW9kZWxXaWR0aCA9IHByaXYtPm1vZGVsLndpZHRoICogc2NhbGU7
CisgICAgRXZhc19Db29yZCBtb2RlbEhlaWdodCA9IHByaXYtPm1vZGVsLmhlaWdodCAqIHNjYWxl
OwogCi0gICAgaWYgKG1vZGVsX3cgPCBwcml2LT52aWV3LndpZHRoIHx8IG5ld194ID49IDApCi0g
ICAgICAgIG5ld194ID0gMDsKLSAgICBlbHNlIGlmICgtbmV3X3ggKyBwcml2LT52aWV3LndpZHRo
ID49IG1vZGVsX3cpCi0gICAgICAgIG5ld194ID0gLW1vZGVsX3cgKyBwcml2LT52aWV3LndpZHRo
OworICAgIGlmIChtb2RlbFdpZHRoIDwgcHJpdi0+dmlldy53aWR0aCB8fCBuZXdYID49IDApCisg
ICAgICAgIG5ld1ggPSAwOworICAgIGVsc2UgaWYgKC1uZXdYICsgcHJpdi0+dmlldy53aWR0aCA+
PSBtb2RlbFdpZHRoKQorICAgICAgICBuZXdYID0gLW1vZGVsV2lkdGggKyBwcml2LT52aWV3Lndp
ZHRoOwogCi0gICAgaWYgKG1vZGVsX2ggPCBwcml2LT52aWV3LmhlaWdodCB8fCBuZXdfeSA+PSAw
KQotICAgICAgICBuZXdfeSA9IDA7Ci0gICAgZWxzZSBpZiAoLW5ld195ICsgcHJpdi0+dmlldy5o
ZWlnaHQgPj0gbW9kZWxfaCkKLSAgICAgICAgbmV3X3kgPSAtbW9kZWxfaCArIHByaXYtPnZpZXcu
aGVpZ2h0OworICAgIGlmIChtb2RlbEhlaWdodCA8IHByaXYtPnZpZXcuaGVpZ2h0IHx8IG5ld1kg
Pj0gMCkKKyAgICAgICAgbmV3WSA9IDA7CisgICAgZWxzZSBpZiAoLW5ld1kgKyBwcml2LT52aWV3
LmhlaWdodCA+PSBtb2RlbEhlaWdodCkKKyAgICAgICAgbmV3WSA9IC1tb2RlbEhlaWdodCArIHBy
aXYtPnZpZXcuaGVpZ2h0OwogCi0gICAgRXZhc19Db29yZCBieCA9IG5ld194ICUgdHc7Ci0gICAg
RXZhc19Db29yZCBieSA9IG5ld195ICUgdGg7Ci0gICAgcHJpdi0+bW9kZWwuYmFzZS5jb2wgPSAt
bmV3X3ggLyB0dzsKLSAgICBwcml2LT5tb2RlbC5iYXNlLnJvdyA9IC1uZXdfeSAvIHRoOworICAg
IEV2YXNfQ29vcmQgYmFzZVggPSBuZXdYICUgdGlsZVdpZHRoOworICAgIEV2YXNfQ29vcmQgYmFz
ZVkgPSBuZXdZICUgdGlsZUhlaWdodDsKKyAgICBwcml2LT5tb2RlbC5iYXNlLmNvbHVtbiA9IC1u
ZXdYIC8gdGlsZVdpZHRoOworICAgIHByaXYtPm1vZGVsLmJhc2Uucm93ID0gLW5ld1kgLyB0aWxl
SGVpZ2h0OwogCiAgICAgcHJpdi0+Y2hhbmdlZC5zaXplID0gRUlOQV9UUlVFOwogICAgIHByaXYt
PmNoYW5nZWQubW9kZWwgPSBFSU5BX1RSVUU7CiAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X2NoYW5nZWQocHJpdik7CiAKLSAgICBwcml2LT52aWV3Lm9mZnNldC5jdXIueCA9IG5ld194Owot
ICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1ci55ID0gbmV3X3k7Ci0gICAgcHJpdi0+dmlldy5vZmZz
ZXQuYmFzZS54ID0gYng7Ci0gICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ID0gYnk7CisgICAg
cHJpdi0+dmlldy5vZmZzZXQuY3VyLnggPSBuZXdYOworICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1
ci55ID0gbmV3WTsKKyAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggPSBiYXNlWDsKKyAgICBw
cml2LT52aWV3Lm9mZnNldC5iYXNlLnkgPSBiYXNlWTsKIAogICAgIHByaXYtPnZpZXcub2Zmc2V0
Lm9sZC54ID0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLng7CiAgICAgcHJpdi0+dmlldy5vZmZzZXQu
b2xkLnkgPSBwcml2LT52aWV3Lm9mZnNldC5jdXIueTsKQEAgLTE1MzEsMjggKzE1MzEsMjggQEAg
c3RhdGljIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfem9vbV9zZXRfaW50ZXJu
YWwoRXdrX1RpbGVkX0JhY2tpbmdfU3QKICAgICAqb2Zmc2V0WSA9IHByaXYtPnZpZXcub2Zmc2V0
LmN1ci55OwogCiAgICAgZXZhc19vYmplY3RfbW92ZSgKLSAgICAgICAgcHJpdi0+Y29udGVudHNf
Y2xpcHBlciwKLSAgICAgICAgbmV3X3ggKyBwcml2LT52aWV3LngsCi0gICAgICAgIG5ld195ICsg
cHJpdi0+dmlldy55KTsKKyAgICAgICAgcHJpdi0+Y29udGVudHNDbGlwcGVyLAorICAgICAgICBu
ZXdYICsgcHJpdi0+dmlldy54LAorICAgICAgICBuZXdZICsgcHJpdi0+dmlldy55KTsKIAogICAg
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9maWxsX3JlbmRlcmVycyhwcml2KTsKIAotICAgIEV2
YXNfQ29vcmQgb3kgPSBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgKyBwcml2LT52aWV3Lnk7Ci0g
ICAgRXZhc19Db29yZCBiYXNlX294ID0gcHJpdi0+dmlldy54ICsgcHJpdi0+dmlldy5vZmZzZXQu
YmFzZS54OworICAgIEV2YXNfQ29vcmQgdGlsZVBvc2l0aW9uWSA9IHByaXYtPnZpZXcub2Zmc2V0
LmJhc2UueSArIHByaXYtPnZpZXcueTsKKyAgICBFdmFzX0Nvb3JkIGJhc2VUaWxlUG9zaXRpb25Y
ID0gcHJpdi0+dmlldy54ICsgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54OwogCi0gICAgaXRyID0g
cHJpdi0+dmlldy5pdGVtczsKLSAgICBpdHJfZW5kID0gaXRyICsgcHJpdi0+dmlldy5yb3dzOwor
ICAgIGl0ZXJhdG9yID0gcHJpdi0+dmlldy5pdGVtczsKKyAgICBpdGVyYXRvckVuZCA9IGl0ZXJh
dG9yICsgcHJpdi0+dmlldy5yb3dzOwogCi0gICAgZm9yICg7IGl0ciA8IGl0cl9lbmQ7IGl0cisr
KSB7Ci0gICAgICAgIEV2YXNfQ29vcmQgb3ggPSBiYXNlX294OwotICAgICAgICBFaW5hX0lubGlz
dCogbHN0ID0gKml0cjsKKyAgICBmb3IgKDsgaXRlcmF0b3IgPCBpdGVyYXRvckVuZDsgaXRlcmF0
b3IrKykgeworICAgICAgICBFdmFzX0Nvb3JkIHRpbGVQb3NpdGlvblggPSBiYXNlVGlsZVBvc2l0
aW9uWDsKKyAgICAgICAgRWluYV9Jbmxpc3QqIGxzdCA9ICppdGVyYXRvcjsKIAogICAgICAgICBF
SU5BX0lOTElTVF9GT1JFQUNIKGxzdCwgaXQpIHsKLSAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9pdGVtX21vdmUoaXQsIG94LCBveSk7Ci0gICAgICAgICAgICBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfaXRlbV9yZXNpemUoaXQsIHR3LCB0aCk7Ci0gICAgICAgICAgICBveCAr
PSB0dzsKKyAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX21vdmUoaXQs
IHRpbGVQb3NpdGlvblgsIHRpbGVQb3NpdGlvblkpOworICAgICAgICAgICAgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX2l0ZW1fcmVzaXplKGl0LCB0aWxlV2lkdGgsIHRpbGVIZWlnaHQpOworICAg
ICAgICAgICAgdGlsZVBvc2l0aW9uWCArPSB0aWxlV2lkdGg7CiAgICAgICAgIH0KLSAgICAgICAg
b3kgKz0gdGg7CisgICAgICAgIHRpbGVQb3NpdGlvblkgKz0gdGlsZUhlaWdodDsKICAgICB9CiAK
ICAgICByZXR1cm4gRUlOQV9UUlVFOwpAQCAtMTU2MCw3ICsxNTYwLDcgQEAgc3RhdGljIEVpbmFf
Qm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfem9vbV9zZXRfaW50ZXJuYWwoRXdrX1RpbGVk
X0JhY2tpbmdfU3QKIAogRWluYV9Cb29sIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3pvb21fc2V0
KEV2YXNfT2JqZWN0KiBld2tUaWxlLCBmbG9hdCogem9vbSwgRXZhc19Db29yZCBjdXJyZW50WCwg
RXZhc19Db29yZCBjdXJyZW50WSwgRXZhc19Db29yZCogb2Zmc2V0WCwgRXZhc19Db29yZCogb2Zm
c2V0WSkKIHsKLSAgICBEQkcoIm89JXAsIHpvb209JWYiLCBld2tUaWxlLCAqem9vbSk7CisgICAg
REJHKCJld2tUaWxlJXAsIHpvb209JWYiLCBld2tUaWxlLCAqem9vbSk7CiAKICAgICBQUklWX0RB
VEFfR0VUX09SX1JFVFVSTihld2tUaWxlLCBwcml2LCBFSU5BX0ZBTFNFKTsKIApAQCAtMTU2OSw3
MyArMTU2OSw3MyBAQCBFaW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfem9vbV9zZXQo
RXZhc19PYmplY3QqIGV3a1RpbGUsIGZsb2F0KiB6b29tLCBFdgogCiBFaW5hX0Jvb2wgZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfem9vbV93ZWFrX3NldChFdmFzX09iamVjdCogZXdrVGlsZSwgZmxv
YXQgem9vbSwgRXZhc19Db29yZCBjdXJyZW50WCwgRXZhc19Db29yZCBjdXJyZW50WSkKIHsKLSAg
ICBEQkcoIm89JXAsIHpvb209JWYiLCBld2tUaWxlLCB6b29tKTsKKyAgICBEQkcoImV3a1RpbGUl
cCwgem9vbT0lZiIsIGV3a1RpbGUsIHpvb20pOwogICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJO
KGV3a1RpbGUsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIGlmICghcHJpdi0+dmlldy53aWR0aCB8
fCAhcHJpdi0+dmlldy5oZWlnaHQpCiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwotICAgIEVp
bmFfSW5saXN0KiogaXRyLCAqKiBpdHJfZW5kOwotICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3Jl
X0l0ZW0qIGl0OwotICAgIEV2YXNfQ29vcmQgdHcsIHRoOwotICAgIEVpbmFfQm9vbCByZWNhbGMg
PSBFSU5BX0ZBTFNFOworICAgIEVpbmFfSW5saXN0KiogaXRlcmF0b3IsICoqIGl0ZXJhdG9yRW5k
OworICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0qIGl0ZW07CisgICAgRXZhc19Db29y
ZCB0aWxlV2lkdGgsIHRpbGVIZWlnaHQ7CisgICAgRWluYV9Cb29sIHJlQ2FsY3VsYXRlID0gRUlO
QV9GQUxTRTsKIAogICAgIGZsb2F0IHNjYWxlID0gem9vbSAvIHByaXYtPnZpZXcudGlsZS56b29t
OwogCi0gICAgdHcgPSBUSUxFX1NJWkVfQVRfWk9PTShwcml2LT52aWV3LnRpbGUud2lkdGgsIHNj
YWxlKTsKLSAgICBzY2FsZSA9IFRJTEVfWk9PTV9BVF9TSVpFKHR3LCBwcml2LT52aWV3LnRpbGUu
d2lkdGgpOwotICAgIHRoID0gVElMRV9TSVpFX0FUX1pPT00ocHJpdi0+dmlldy50aWxlLmhlaWdo
dCwgc2NhbGUpOworICAgIHRpbGVXaWR0aCA9IFRJTEVfU0laRV9BVF9aT09NKHByaXYtPnZpZXcu
dGlsZS53aWR0aCwgc2NhbGUpOworICAgIHNjYWxlID0gVElMRV9aT09NX0FUX1NJWkUodGlsZVdp
ZHRoLCBwcml2LT52aWV3LnRpbGUud2lkdGgpOworICAgIHRpbGVIZWlnaHQgPSBUSUxFX1NJWkVf
QVRfWk9PTShwcml2LT52aWV3LnRpbGUuaGVpZ2h0LCBzY2FsZSk7CiAgICAgem9vbSA9IHNjYWxl
ICogcHJpdi0+dmlldy50aWxlLnpvb207CiAKLSAgICBFdmFzX0Nvb3JkIG1vZGVsX3cgPSBwcml2
LT5tb2RlbC53aWR0aCAqIHNjYWxlOwotICAgIEV2YXNfQ29vcmQgbW9kZWxfaCA9IHByaXYtPm1v
ZGVsLmhlaWdodCAqIHNjYWxlOworICAgIEV2YXNfQ29vcmQgbW9kZWxXaWR0aCA9IHByaXYtPm1v
ZGVsLndpZHRoICogc2NhbGU7CisgICAgRXZhc19Db29yZCBtb2RlbEhlaWdodCA9IHByaXYtPm1v
ZGVsLmhlaWdodCAqIHNjYWxlOwogCi0gICAgZXZhc19vYmplY3RfcmVzaXplKHByaXYtPmNvbnRl
bnRzX2NsaXBwZXIsIG1vZGVsX3csIG1vZGVsX2gpOworICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShw
cml2LT5jb250ZW50c0NsaXBwZXIsIG1vZGVsV2lkdGgsIG1vZGVsSGVpZ2h0KTsKIAotICAgIGlu
dCB2cm93cyA9IHN0YXRpY19jYXN0PGludD4oY2VpbChzdGF0aWNfY2FzdDxmbG9hdD4ocHJpdi0+
dmlldy5oZWlnaHQgLyB0aCkpICsgMSk7Ci0gICAgaW50IHZjb2xzID0gc3RhdGljX2Nhc3Q8aW50
PihjZWlsKHN0YXRpY19jYXN0PGZsb2F0Pihwcml2LT52aWV3LndpZHRoIC8gdHcpKSArIDEpOwot
ICAgIEV2YXNfQ29vcmQgbmV3X3ggPSBjdXJyZW50WCArIChwcml2LT52aWV3Lm9mZnNldC5jdXIu
eCAtIGN1cnJlbnRYKSAqIHNjYWxlOwotICAgIEV2YXNfQ29vcmQgbmV3X3kgPSBjdXJyZW50WSAr
IChwcml2LT52aWV3Lm9mZnNldC5jdXIueSAtIGN1cnJlbnRZKSAqIHNjYWxlOwotICAgIEV2YXNf
Q29vcmQgYnggPSBuZXdfeCAlIHR3OwotICAgIEV2YXNfQ29vcmQgYnkgPSBuZXdfeSAlIHRoOwot
ICAgIHVuc2lnbmVkIGxvbmcgYmFzZV9yb3cgPSAtbmV3X3kgLyB0aDsKLSAgICB1bnNpZ25lZCBs
b25nIGJhc2VfY29sID0gLW5ld194IC8gdHc7CisgICAgaW50IHZyb3dzID0gc3RhdGljX2Nhc3Q8
aW50PihjZWlsKHN0YXRpY19jYXN0PGZsb2F0Pihwcml2LT52aWV3LmhlaWdodCAvIHRpbGVIZWln
aHQpKSArIDEpOworICAgIGludCB2Y29scyA9IHN0YXRpY19jYXN0PGludD4oY2VpbChzdGF0aWNf
Y2FzdDxmbG9hdD4ocHJpdi0+dmlldy53aWR0aCAvIHRpbGVXaWR0aCkpICsgMSk7CisgICAgRXZh
c19Db29yZCBuZXdYID0gY3VycmVudFggKyAocHJpdi0+dmlldy5vZmZzZXQuY3VyLnggLSBjdXJy
ZW50WCkgKiBzY2FsZTsKKyAgICBFdmFzX0Nvb3JkIG5ld1kgPSBjdXJyZW50WSArIChwcml2LT52
aWV3Lm9mZnNldC5jdXIueSAtIGN1cnJlbnRZKSAqIHNjYWxlOworICAgIEV2YXNfQ29vcmQgYmFz
ZVggPSBuZXdYICUgdGlsZVdpZHRoOworICAgIEV2YXNfQ29vcmQgYmFzZVkgPSBuZXdZICUgdGls
ZUhlaWdodDsKKyAgICB1bnNpZ25lZCBsb25nIGJhc2VSb3cgPSAtbmV3WSAvIHRpbGVIZWlnaHQ7
CisgICAgdW5zaWduZWQgbG9uZyBiYXNlQ29sdW1uID0gLW5ld1ggLyB0aWxlV2lkdGg7CiAKLSAg
ICBpZiAoYmFzZV9yb3cgIT0gcHJpdi0+bW9kZWwuYmFzZS5yb3cgfHwgYmFzZV9jb2wgIT0gcHJp
di0+bW9kZWwuYmFzZS5jb2wpIHsKLSAgICAgICAgcHJpdi0+bW9kZWwuYmFzZS5yb3cgPSBiYXNl
X3JvdzsKLSAgICAgICAgcHJpdi0+bW9kZWwuYmFzZS5jb2wgPSBiYXNlX2NvbDsKLSAgICAgICAg
cmVjYWxjID0gRUlOQV9UUlVFOworICAgIGlmIChiYXNlUm93ICE9IHByaXYtPm1vZGVsLmJhc2Uu
cm93IHx8IGJhc2VDb2x1bW4gIT0gcHJpdi0+bW9kZWwuYmFzZS5jb2x1bW4pIHsKKyAgICAgICAg
cHJpdi0+bW9kZWwuYmFzZS5yb3cgPSBiYXNlUm93OworICAgICAgICBwcml2LT5tb2RlbC5iYXNl
LmNvbHVtbiA9IGJhc2VDb2x1bW47CisgICAgICAgIHJlQ2FsY3VsYXRlID0gRUlOQV9UUlVFOwog
ICAgIH0KIAogICAgIGlmICh2cm93cyA+IHByaXYtPnZpZXcucm93cyB8fCB2Y29scyA+IHByaXYt
PnZpZXcuY29scykKLSAgICAgICAgcmVjYWxjID0gRUlOQV9UUlVFOworICAgICAgICByZUNhbGN1
bGF0ZSA9IEVJTkFfVFJVRTsKIAotICAgIGlmIChyZWNhbGMpIHsKKyAgICBpZiAocmVDYWxjdWxh
dGUpIHsKICAgICAgICAgRXZhc19Db29yZCB3aWR0aCwgaGVpZ2h0OwogICAgICAgICBldmFzX29i
amVjdF9nZW9tZXRyeV9nZXQoZXdrVGlsZSwgMCwgMCwgJndpZHRoLCAmaGVpZ2h0KTsKLSAgICAg
ICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3JlY2FsY19yZW5kZXJlcnMocHJpdiwgd2lkdGgs
IGhlaWdodCwgdHcsIHRoKTsKKyAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3JlY2Fs
Y19yZW5kZXJlcnMocHJpdiwgd2lkdGgsIGhlaWdodCwgdGlsZVdpZHRoLCB0aWxlSGVpZ2h0KTsK
ICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2ZpbGxfcmVuZGVyZXJzKHByaXYpOwog
ICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRlc19wcm9jZXNzKHByaXYpOwog
ICAgIH0KIAotICAgIEV2YXNfQ29vcmQgYmFzZV9veCA9IGJ4ICsgcHJpdi0+dmlldy54OwotICAg
IEV2YXNfQ29vcmQgb3kgPSBieSArIHByaXYtPnZpZXcueTsKKyAgICBFdmFzX0Nvb3JkIGJhc2VU
aWxlUG9zaXRpb25YID0gYmFzZVggKyBwcml2LT52aWV3Lng7CisgICAgRXZhc19Db29yZCB0aWxl
UG9zaXRpb25ZID0gYmFzZVkgKyBwcml2LT52aWV3Lnk7CiAKLSAgICBldmFzX29iamVjdF9tb3Zl
KHByaXYtPmNvbnRlbnRzX2NsaXBwZXIsCi0gICAgICAgICAgICAgICAgICAgICBuZXdfeCArIHBy
aXYtPnZpZXcueCwKLSAgICAgICAgICAgICAgICAgICAgIG5ld195ICsgcHJpdi0+dmlldy55KTsK
KyAgICBldmFzX29iamVjdF9tb3ZlKHByaXYtPmNvbnRlbnRzQ2xpcHBlciwKKyAgICAgICAgICAg
ICAgICAgICAgIG5ld1ggKyBwcml2LT52aWV3LngsCisgICAgICAgICAgICAgICAgICAgICBuZXdZ
ICsgcHJpdi0+dmlldy55KTsKIAotICAgIGl0ciA9IHByaXYtPnZpZXcuaXRlbXM7Ci0gICAgaXRy
X2VuZCA9IGl0ciArIHByaXYtPnZpZXcucm93czsKKyAgICBpdGVyYXRvciA9IHByaXYtPnZpZXcu
aXRlbXM7CisgICAgaXRlcmF0b3JFbmQgPSBpdGVyYXRvciArIHByaXYtPnZpZXcucm93czsKIAot
ICAgIGZvciAoOyBpdHIgPCBpdHJfZW5kOyBpdHIrKykgewotICAgICAgICBFdmFzX0Nvb3JkIG94
ID0gYmFzZV9veDsKLSAgICAgICAgRWluYV9Jbmxpc3QqIGxzdCA9ICppdHI7CisgICAgZm9yICg7
IGl0ZXJhdG9yIDwgaXRlcmF0b3JFbmQ7IGl0ZXJhdG9yKyspIHsKKyAgICAgICAgRXZhc19Db29y
ZCB0aWxlUG9zaXRpb25YID0gYmFzZVRpbGVQb3NpdGlvblg7CisgICAgICAgIEVpbmFfSW5saXN0
KiBsaXN0ID0gKml0ZXJhdG9yOwogCi0gICAgICAgIEVJTkFfSU5MSVNUX0ZPUkVBQ0gobHN0LCBp
dCkgewotICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fbW92ZShpdCwg
b3gsIG95KTsKLSAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Jlc2l6
ZShpdCwgdHcsIHRoKTsKLSAgICAgICAgICAgIG94ICs9IHR3OworICAgICAgICBFSU5BX0lOTElT
VF9GT1JFQUNIKGxpc3QsIGl0ZW0pIHsKKyAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9pdGVtX21vdmUoaXRlbSwgdGlsZVBvc2l0aW9uWCwgdGlsZVBvc2l0aW9uWSk7CisgICAg
ICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9yZXNpemUoaXRlbSwgdGlsZVdp
ZHRoLCB0aWxlSGVpZ2h0KTsKKyAgICAgICAgICAgIHRpbGVQb3NpdGlvblggKz0gdGlsZVdpZHRo
OwogICAgICAgICB9Ci0gICAgICAgIG95ICs9IHRoOworICAgICAgICB0aWxlUG9zaXRpb25ZICs9
IHRpbGVIZWlnaHQ7CiAgICAgfQogCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKQEAgLTE2NDQsODEg
KzE2NDQsODEgQEAgRWluYV9Cb29sIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3pvb21fd2Vha19z
ZXQoRXZhc19PYmplY3QqIGV3a1RpbGUsIGZsb2F0IHpvb20KIHZvaWQgZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfZml4X29mZnNldHMoRXZhc19PYmplY3QqIGV3a1RpbGUsIEV2YXNfQ29vcmQgd2lk
dGgsIEV2YXNfQ29vcmQgaGVpZ2h0KQogewogICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKGV3
a1RpbGUsIHByaXYpOwotICAgIEVpbmFfSW5saXN0KiogaXRyLCAqKml0cl9lbmQ7Ci0gICAgRXdr
X1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSogaXQ7Ci0gICAgRXZhc19Db29yZCBuZXdfeCA9IHBy
aXYtPnZpZXcub2Zmc2V0LmN1ci54OwotICAgIEV2YXNfQ29vcmQgbmV3X3kgPSBwcml2LT52aWV3
Lm9mZnNldC5jdXIueTsKLSAgICBFdmFzX0Nvb3JkIGJ4ID0gcHJpdi0+dmlldy5vZmZzZXQuYmFz
ZS54OwotICAgIEV2YXNfQ29vcmQgYnkgPSBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnk7Ci0gICAg
RXZhc19Db29yZCB0dyA9IHByaXYtPnZpZXcudGlsZS53aWR0aDsKLSAgICBFdmFzX0Nvb3JkIHRo
ID0gcHJpdi0+dmlldy50aWxlLmhlaWdodDsKLQotICAgIGlmICgtbmV3X3ggPiB3aWR0aCkgewot
ICAgICAgICBuZXdfeCA9IC13aWR0aDsKLSAgICAgICAgYnggPSBuZXdfeCAlIHR3OwotICAgICAg
ICBwcml2LT5tb2RlbC5iYXNlLmNvbCA9IC1uZXdfeCAvIHR3OworICAgIEVpbmFfSW5saXN0Kiog
aXRlcmF0b3IsICoqaXRlcmF0b3JFbmQ7CisgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRl
bSogaXRlbTsKKyAgICBFdmFzX0Nvb3JkIG5ld1ggPSBwcml2LT52aWV3Lm9mZnNldC5jdXIueDsK
KyAgICBFdmFzX0Nvb3JkIG5ld1kgPSBwcml2LT52aWV3Lm9mZnNldC5jdXIueTsKKyAgICBFdmFz
X0Nvb3JkIGJhc2VYID0gcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54OworICAgIEV2YXNfQ29vcmQg
YmFzZVkgPSBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnk7CisgICAgRXZhc19Db29yZCB0aWxlV2lk
dGggPSBwcml2LT52aWV3LnRpbGUud2lkdGg7CisgICAgRXZhc19Db29yZCB0aWxlSGVpZ2h0ID0g
cHJpdi0+dmlldy50aWxlLmhlaWdodDsKKworICAgIGlmICgtbmV3WCA+IHdpZHRoKSB7CisgICAg
ICAgIG5ld1ggPSAtd2lkdGg7CisgICAgICAgIGJhc2VYID0gbmV3WCAlIHRpbGVXaWR0aDsKKyAg
ICAgICAgcHJpdi0+bW9kZWwuYmFzZS5jb2x1bW4gPSAtbmV3WCAvIHRpbGVXaWR0aDsKICAgICB9
CiAKLSAgICBpZiAoLW5ld195ID4gaGVpZ2h0KSB7Ci0gICAgICAgIG5ld195ID0gLWhlaWdodDsK
LSAgICAgICAgYnkgPSBuZXdfeSAlIHRoOwotICAgICAgICBwcml2LT5tb2RlbC5iYXNlLnJvdyA9
IC1uZXdfeSAvIHRoOworICAgIGlmICgtbmV3WSA+IGhlaWdodCkgeworICAgICAgICBuZXdZID0g
LWhlaWdodDsKKyAgICAgICAgYmFzZVkgPSBuZXdZICUgdGlsZUhlaWdodDsKKyAgICAgICAgcHJp
di0+bW9kZWwuYmFzZS5yb3cgPSAtbmV3WSAvIHRpbGVIZWlnaHQ7CiAgICAgfQogCi0gICAgaWYg
KGJ4ID49IDAgfHwgYnggPD0gLTIgKiBwcml2LT52aWV3LnRpbGUud2lkdGgpIHsKLSAgICAgICAg
YnggPSBuZXdfeCAlIHR3OwotICAgICAgICBwcml2LT5tb2RlbC5iYXNlLmNvbCA9IC1uZXdfeCAv
IHR3OworICAgIGlmIChiYXNlWCA+PSAwIHx8IGJhc2VYIDw9IC0yICogcHJpdi0+dmlldy50aWxl
LndpZHRoKSB7CisgICAgICAgIGJhc2VYID0gbmV3WCAlIHRpbGVXaWR0aDsKKyAgICAgICAgcHJp
di0+bW9kZWwuYmFzZS5jb2x1bW4gPSAtbmV3WCAvIHRpbGVXaWR0aDsKICAgICB9CiAKLSAgICBp
ZiAoYnkgPj0gMCB8fCBieSA8PSAtMiAqIHByaXYtPnZpZXcudGlsZS5oZWlnaHQpIHsKLSAgICAg
ICAgYnkgPSBuZXdfeSAlIHRoOwotICAgICAgICBwcml2LT5tb2RlbC5iYXNlLnJvdyA9IC1uZXdf
eSAvIHRoOworICAgIGlmIChiYXNlWSA+PSAwIHx8IGJhc2VZIDw9IC0yICogcHJpdi0+dmlldy50
aWxlLmhlaWdodCkgeworICAgICAgICBiYXNlWSA9IG5ld1kgJSB0aWxlSGVpZ2h0OworICAgICAg
ICBwcml2LT5tb2RlbC5iYXNlLnJvdyA9IC1uZXdZIC8gdGlsZUhlaWdodDsKICAgICB9CiAKLSAg
ICBwcml2LT52aWV3Lm9mZnNldC5jdXIueCA9IG5ld194OwotICAgIHByaXYtPnZpZXcub2Zmc2V0
LmN1ci55ID0gbmV3X3k7Ci0gICAgcHJpdi0+dmlldy5vZmZzZXQub2xkLnggPSBuZXdfeDsKLSAg
ICBwcml2LT52aWV3Lm9mZnNldC5vbGQueSA9IG5ld195OwotICAgIHByaXYtPnZpZXcub2Zmc2V0
LmJhc2UueCA9IGJ4OwotICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSA9IGJ5OwotICAgIGV2
YXNfb2JqZWN0X21vdmUocHJpdi0+Y29udGVudHNfY2xpcHBlciwKLSAgICAgICAgICAgICAgICAg
ICAgIG5ld194ICsgcHJpdi0+dmlldy54LAotICAgICAgICAgICAgICAgICAgICAgbmV3X3kgKyBw
cml2LT52aWV3LnkpOwotCi0gICAgRXZhc19Db29yZCBveSA9IHByaXYtPnZpZXcub2Zmc2V0LmJh
c2UueSArIHByaXYtPnZpZXcueTsKLSAgICBFdmFzX0Nvb3JkIGJhc2Vfb3ggPSBwcml2LT52aWV3
LnggKyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLng7Ci0KLSAgICBpdHIgPSBwcml2LT52aWV3Lml0
ZW1zOwotICAgIGl0cl9lbmQgPSBpdHIgKyBwcml2LT52aWV3LnJvd3M7Ci0KLSAgICBmb3IgKDsg
aXRyIDwgaXRyX2VuZDsgaXRyKyspIHsKLSAgICAgICAgRXZhc19Db29yZCBveCA9IGJhc2Vfb3g7
Ci0gICAgICAgIEVpbmFfSW5saXN0KiBsc3QgPSAqaXRyOwotCi0gICAgICAgIEVJTkFfSU5MSVNU
X0ZPUkVBQ0gobHN0LCBpdCkgewotICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X2l0ZW1fbW92ZShpdCwgb3gsIG95KTsKLSAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9pdGVtX3Jlc2l6ZShpdCwgdHcsIHRoKTsKLSAgICAgICAgICAgIG94ICs9IHR3OworICAg
IHByaXYtPnZpZXcub2Zmc2V0LmN1ci54ID0gbmV3WDsKKyAgICBwcml2LT52aWV3Lm9mZnNldC5j
dXIueSA9IG5ld1k7CisgICAgcHJpdi0+dmlldy5vZmZzZXQub2xkLnggPSBuZXdYOworICAgIHBy
aXYtPnZpZXcub2Zmc2V0Lm9sZC55ID0gbmV3WTsKKyAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNl
LnggPSBiYXNlWDsKKyAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgPSBiYXNlWTsKKyAgICBl
dmFzX29iamVjdF9tb3ZlKHByaXYtPmNvbnRlbnRzQ2xpcHBlciwKKyAgICAgICAgICAgICAgICAg
ICAgIG5ld1ggKyBwcml2LT52aWV3LngsCisgICAgICAgICAgICAgICAgICAgICBuZXdZICsgcHJp
di0+dmlldy55KTsKKworICAgIEV2YXNfQ29vcmQgdGlsZVBvc2l0aW9uWSA9IHByaXYtPnZpZXcu
b2Zmc2V0LmJhc2UueSArIHByaXYtPnZpZXcueTsKKyAgICBFdmFzX0Nvb3JkIGJhc2VUaWxlUG9z
aXRpb25YID0gcHJpdi0+dmlldy54ICsgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54OworCisgICAg
aXRlcmF0b3IgPSBwcml2LT52aWV3Lml0ZW1zOworICAgIGl0ZXJhdG9yRW5kID0gaXRlcmF0b3Ig
KyBwcml2LT52aWV3LnJvd3M7CisKKyAgICBmb3IgKDsgaXRlcmF0b3IgPCBpdGVyYXRvckVuZDsg
aXRlcmF0b3IrKykgeworICAgICAgICBFdmFzX0Nvb3JkIHRpbGVQb3NpdGlvblggPSBiYXNlVGls
ZVBvc2l0aW9uWDsKKyAgICAgICAgRWluYV9Jbmxpc3QqIGxzdCA9ICppdGVyYXRvcjsKKworICAg
ICAgICBFSU5BX0lOTElTVF9GT1JFQUNIKGxzdCwgaXRlbSkgeworICAgICAgICAgICAgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fbW92ZShpdGVtLCB0aWxlUG9zaXRpb25YLCB0aWxlUG9z
aXRpb25ZKTsKKyAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Jlc2l6
ZShpdGVtLCB0aWxlV2lkdGgsIHRpbGVIZWlnaHQpOworICAgICAgICAgICAgdGlsZVBvc2l0aW9u
WCArPSB0aWxlV2lkdGg7CiAgICAgICAgIH0KLSAgICAgICAgb3kgKz0gdGg7CisgICAgICAgIHRp
bGVQb3NpdGlvblkgKz0gdGlsZUhlaWdodDsKICAgICB9CiB9CiAKIHZvaWQgZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfem9vbV93ZWFrX3Ntb290aF9zY2FsZV9zZXQoRXZhc19PYmplY3QqIGV3a1Rp
bGUsIEVpbmFfQm9vbCBzbW9vdGhTY2FsZSkKIHsKICAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVS
Tihld2tUaWxlLCBwcml2KTsKLSAgICBFaW5hX0lubGlzdCoqIGl0ciwgKippdHJfZW5kOworICAg
IEVpbmFfSW5saXN0KiogaXRlcmF0b3IsICoqaXRlcmF0b3JFbmQ7CiAKLSAgICBpdHIgPSBwcml2
LT52aWV3Lml0ZW1zOwotICAgIGl0cl9lbmQgPSBpdHIgKyBwcml2LT52aWV3LnJvd3M7Ci0gICAg
cHJpdi0+dmlldy50aWxlLnpvb21fd2Vha19zbW9vdGhfc2NhbGUgPSBzbW9vdGhTY2FsZTsKKyAg
ICBpdGVyYXRvciA9IHByaXYtPnZpZXcuaXRlbXM7CisgICAgaXRlcmF0b3JFbmQgPSBpdGVyYXRv
ciArIHByaXYtPnZpZXcucm93czsKKyAgICBwcml2LT52aWV3LnRpbGUuem9vbVdlYWtTbW9vdGhT
Y2FsZSA9IHNtb290aFNjYWxlOwogCi0gICAgZm9yICg7IGl0cjwgaXRyX2VuZDsgaXRyKyspIHsK
LSAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSogaXQ7Ci0gICAgICAgIEVJTkFf
SU5MSVNUX0ZPUkVBQ0goKml0ciwgaXQpCi0gICAgICAgICAgICBpZiAoaXQtPnRpbGUpCisgICAg
Zm9yICg7IGl0ZXJhdG9yPCBpdGVyYXRvckVuZDsgaXRlcmF0b3IrKykgeworICAgICAgICBFd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKiBpdGVtOworICAgICAgICBFSU5BX0lOTElTVF9GT1JF
QUNIKCppdGVyYXRvciwgaXRlbSkKKyAgICAgICAgICAgIGlmIChpdGVtLT50aWxlKQogICAgICAg
ICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Ntb290aF9zY2FsZV9zZXQK
LSAgICAgICAgICAgICAgICAgICAgKGl0LCBzbW9vdGhTY2FsZSk7CisgICAgICAgICAgICAgICAg
ICAgIChpdGVtLCBzbW9vdGhTY2FsZSk7CiAgICAgfQogfQogCkBAIC0xNzM2LDE1ICsxNzM2LDE1
IEBAIEVpbmFfQm9vbCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV91cGRhdGUoRXZhc19PYmplY3Qq
IGV3a1RpbGUsIGNvbnN0IEVpbmFfUmVjdGFuCiB2b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3VwZGF0ZXNfcHJvY2Vzc19wcmVfc2V0KEV2YXNfT2JqZWN0KiBld2tUaWxlLCB2b2lkKiAoKmNh
bGxiYWNrKSh2b2lkKiBkYXRhLCBFdmFzX09iamVjdCAqZXdrVGlsZSksIGNvbnN0IHZvaWQqIGRh
dGEpCiB7CiAgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4oZXdrVGlsZSwgcHJpdik7Ci0gICAg
cHJpdi0+cHJvY2Vzcy5wcmVfY2IgPSBjYWxsYmFjazsKLSAgICBwcml2LT5wcm9jZXNzLnByZV9k
YXRhID0gKHZvaWQqKWRhdGE7CisgICAgcHJpdi0+cHJvY2Vzcy5wcmVDYWxsYmFjayA9IGNhbGxi
YWNrOworICAgIHByaXYtPnByb2Nlc3MucHJlRGF0YSA9ICh2b2lkKilkYXRhOwogfQogCi12b2lk
IGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3VwZGF0ZXNfcHJvY2Vzc19wb3N0X3NldChFdmFzX09i
amVjdCogZXdrVGlsZSwgdm9pZCogKCpjYWxsYmFjaykodm9pZCogZGF0YSwgdm9pZCogcHJlX2Rh
dGEsIEV2YXNfT2JqZWN0ICpld2tUaWxlKSwgY29uc3Qgdm9pZCogZGF0YSkKK3ZvaWQgZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRlc19wcm9jZXNzX3Bvc3Rfc2V0KEV2YXNfT2JqZWN0KiBl
d2tUaWxlLCB2b2lkKiAoKmNhbGxiYWNrKSh2b2lkKiBkYXRhLCB2b2lkKiBwcmVEYXRhLCBFdmFz
X09iamVjdCAqZXdrVGlsZSksIGNvbnN0IHZvaWQqIGRhdGEpCiB7CiAgICAgUFJJVl9EQVRBX0dF
VF9PUl9SRVRVUk4oZXdrVGlsZSwgcHJpdik7Ci0gICAgcHJpdi0+cHJvY2Vzcy5wb3N0X2NiID0g
Y2FsbGJhY2s7Ci0gICAgcHJpdi0+cHJvY2Vzcy5wb3N0X2RhdGEgPSAodm9pZCopZGF0YTsKKyAg
ICBwcml2LT5wcm9jZXNzLnBvc3RDYWxsYmFjayA9IGNhbGxiYWNrOworICAgIHByaXYtPnByb2Nl
c3MucG9zdERhdGEgPSAodm9pZCopZGF0YTsKIH0KIAogdm9pZCBld2tfdGlsZWRfYmFja2luZ19z
dG9yZV91cGRhdGVzX3Byb2Nlc3MoRXZhc19PYmplY3QqIGV3a1RpbGUpCkBAIC0xNzg2LDcgKzE3
ODYsNyBAQCB2b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX2Rpc2FibGVkX3VwZGF0ZV9zZXQo
RXZhc19PYmplY3QqIGV3a1RpbGUsIEVpbmFfQm9vbAogdm9pZCBld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9mbHVzaChFdmFzX09iamVjdCogZXdrVGlsZSkKIHsKICAgICBQUklWX0RBVEFfR0VUX09S
X1JFVFVSTihld2tUaWxlLCBwcml2KTsKLSAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHR1YyA9
IDA7CisgICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0aWxlVW51c2VkQ2FjaGUgPSAwOwogCiAg
ICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggPSAwOwogICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1
ci55ID0gMDsKQEAgLTE3OTQsMTEgKzE3OTQsMTEgQEAgdm9pZCBld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9mbHVzaChFdmFzX09iamVjdCogZXdrVGlsZSkKICAgICBwcml2LT52aWV3Lm9mZnNldC5v
bGQueSA9IDA7CiAgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54ID0gMDsKICAgICBwcml2LT52
aWV3Lm9mZnNldC5iYXNlLnkgPSAwOwotICAgIHByaXYtPm1vZGVsLmJhc2UuY29sID0gMDsKKyAg
ICBwcml2LT5tb2RlbC5iYXNlLmNvbHVtbiA9IDA7CiAgICAgcHJpdi0+bW9kZWwuYmFzZS5yb3cg
PSAwOwotICAgIHByaXYtPm1vZGVsLmN1ci5jb2xzID0gMTsKLSAgICBwcml2LT5tb2RlbC5jdXIu
cm93cyA9IDE7Ci0gICAgcHJpdi0+bW9kZWwub2xkLmNvbHMgPSAwOworICAgIHByaXYtPm1vZGVs
LmN1cnJlbnQuY29sdW1ucyA9IDE7CisgICAgcHJpdi0+bW9kZWwuY3VycmVudC5yb3dzID0gMTsK
KyAgICBwcml2LT5tb2RlbC5vbGQuY29sdW1ucyA9IDA7CiAgICAgcHJpdi0+bW9kZWwub2xkLnJv
d3MgPSAwOwogICAgIHByaXYtPmNoYW5nZWQuc2l6ZSA9IEVJTkFfVFJVRTsKIApAQCAtMTgwOSw4
ICsxODA5LDggQEAgdm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9mbHVzaChFdmFzX09iamVj
dCogZXdrVGlsZSkKIAogICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3Jl
cXVlc3RfZmx1c2gocHJpdik7CiAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfZGlz
c29jaWF0ZV9hbGwocHJpdik7Ci0gICAgdHVjID0gZXdrX3RpbGVfbWF0cml4X3VudXNlZF9jYWNo
ZV9nZXQocHJpdi0+bW9kZWwubWF0cml4KTsKLSAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfY2xl
YXIodHVjKTsKKyAgICB0aWxlVW51c2VkQ2FjaGUgPSBld2tfdGlsZV9tYXRyaXhfdW51c2VkX2Nh
Y2hlX2dldChwcml2LT5tb2RlbC5tYXRyaXgpOworICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9j
bGVhcih0aWxlVW51c2VkQ2FjaGUpOwogCiAjaWZkZWYgREVCVUdfTUVNX0xFQUtTCiAgICAgcHJp
bnRmKCJcbkZMVVNIRUQgQkFDS0lORyBTVE9SRSwgU1RBVFVTIEFGVEVSIFJFQ1JFQVRJTkcgVElM
RSBNQVRSSVg6XG4iKTsKQEAgLTE4MjMsMTYgKzE4MjMsMTYgQEAgRWluYV9Cb29sIGV3a190aWxl
ZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVnaW9uKEV2YXNfT2JqZWN0KiBld2tUaWxlLCBF
dmFzX0MKICAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihld2tUaWxlLCBwcml2LCBFSU5BX0ZB
TFNFKTsKICAgICBFaW5hX1RpbGVfR3JpZF9TbGljZXIgc2xpY2VyOwogICAgIGNvbnN0IEVpbmFf
VGlsZV9HcmlkX0luZm8qIGluZm87Ci0gICAgRXZhc19Db29yZCB0dywgdGg7Ci0gICAgRXdrX1Rp
bGVfVW51c2VkX0NhY2hlKiB0dWM7CisgICAgRXZhc19Db29yZCB0aWxlV2lkdGgsIHRpbGVIZWln
aHQ7CisgICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0aWxlVW51c2VkQ2FjaGU7CiAKLSAgICB0
dyA9IHByaXYtPnZpZXcudGlsZS53aWR0aDsKLSAgICB0aCA9IHByaXYtPnZpZXcudGlsZS5oZWln
aHQ7CisgICAgdGlsZVdpZHRoID0gcHJpdi0+dmlldy50aWxlLndpZHRoOworICAgIHRpbGVIZWln
aHQgPSBwcml2LT52aWV3LnRpbGUuaGVpZ2h0OwogICAgIHpvb20gPSBST1VOREVEX1pPT00ocHJp
di0+dmlldy50aWxlLndpZHRoLCB6b29tKTsKIAotICAgIGlmICghZWluYV90aWxlX2dyaWRfc2xp
Y2VyX3NldHVwKCZzbGljZXIsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHR3LCB0aCkpIHsKKyAgICBp
ZiAoIWVpbmFfdGlsZV9ncmlkX3NsaWNlcl9zZXR1cCgmc2xpY2VyLCB4LCB5LCB3aWR0aCwgaGVp
Z2h0LCB0aWxlV2lkdGgsIHRpbGVIZWlnaHQpKSB7CiAgICAgICAgIEVSUigiY291bGQgbm90IHNl
dHVwIGdyaWQgc2xpY2VyIGZvciAlZCwlZCslZHglZCB0aWxlPSVkeCVkIiwKLSAgICAgICAgICAg
IHgsIHksIHdpZHRoLCBoZWlnaHQsIHR3LCB0aCk7CisgICAgICAgICAgICB4LCB5LCB3aWR0aCwg
aGVpZ2h0LCB0aWxlV2lkdGgsIHRpbGVIZWlnaHQpOwogICAgICAgICByZXR1cm4gRUlOQV9GQUxT
RTsKICAgICB9CiAKQEAgLTE4NDUsNDUgKzE4NDUsNDUgQEAgRWluYV9Cb29sIGV3a190aWxlZF9i
YWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVnaW9uKEV2YXNfT2JqZWN0KiBld2tUaWxlLCBFdmFz
X0MKIAogICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Byb2Nlc3NfaWRsZXJfc3Rh
cnQocHJpdik7CiAKLSAgICB0dWMgPSBld2tfdGlsZV9tYXRyaXhfdW51c2VkX2NhY2hlX2dldChw
cml2LT5tb2RlbC5tYXRyaXgpOwotICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9sb2NrX2FyZWEo
dHVjLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCB6b29tKTsKKyAgICB0aWxlVW51c2VkQ2FjaGUgPSBl
d2tfdGlsZV9tYXRyaXhfdW51c2VkX2NhY2hlX2dldChwcml2LT5tb2RlbC5tYXRyaXgpOworICAg
IGV3a190aWxlX3VudXNlZF9jYWNoZV9sb2NrX2FyZWEodGlsZVVudXNlZENhY2hlLCB4LCB5LCB3
aWR0aCwgaGVpZ2h0LCB6b29tKTsKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCiBFaW5hX0Jv
b2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZWxhdGl2ZV9yYWRpdXMoRXZh
c19PYmplY3QqIGV3a1RpbGUsIHVuc2lnbmVkIGludCBuLCBmbG9hdCB6b29tKQogewogICAgIFBS
SVZfREFUQV9HRVRfT1JfUkVUVVJOKGV3a1RpbGUsIHByaXYsIEVJTkFfRkFMU0UpOwotICAgIHVu
c2lnbmVkIGxvbmcgc3RhcnRfcm93LCBlbmRfcm93LCBzdGFydF9jb2wsIGVuZF9jb2wsIGksIGos
IHdpZHRoLCBoZWlnaHQ7Ci0gICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0dWM7CisgICAgdW5z
aWduZWQgbG9uZyBzdGFydFJvdywgZW5kUm93LCBzdGFydENvbCwgZW5kQ29sLCBpLCBqLCB3aWR0
aCwgaGVpZ2h0OworICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSogdGlsZVVudXNlZENhY2hlOwog
CiAgICAgSU5GKCJwcml2LT5tb2RlbC5iYXNlLnJvdyA9JWxkLCBuPSV1IHByaXYtPnZpZXcucm93
cz0lbHUiLAogICAgICAgICBwcml2LT5tb2RlbC5iYXNlLnJvdywgbiwgcHJpdi0+dmlldy5yb3dz
KTsKLSAgICBzdGFydF9yb3cgPSAobG9uZylwcml2LT5tb2RlbC5iYXNlLnJvdyAtIG47Ci0gICAg
c3RhcnRfY29sID0gKGxvbmcpcHJpdi0+bW9kZWwuYmFzZS5jb2wgLSBuOwotICAgIGVuZF9yb3cg
PSBzdGQ6Om1pbihwcml2LT5tb2RlbC5jdXIucm93cyAtIDEsCisgICAgc3RhcnRSb3cgPSAobG9u
Zylwcml2LT5tb2RlbC5iYXNlLnJvdyAtIG47CisgICAgc3RhcnRDb2wgPSAobG9uZylwcml2LT5t
b2RlbC5iYXNlLmNvbHVtbiAtIG47CisgICAgZW5kUm93ID0gc3RkOjptaW4ocHJpdi0+bW9kZWwu
Y3VycmVudC5yb3dzIC0gMSwKICAgICAgICAgICAgICAgICAgICAgICAgcHJpdi0+bW9kZWwuYmFz
ZS5yb3cgKyBwcml2LT52aWV3LnJvd3MgKyBuIC0gMSk7Ci0gICAgZW5kX2NvbCA9IHN0ZDo6bWlu
KHByaXYtPm1vZGVsLmN1ci5jb2xzIC0gMSwKLSAgICAgICAgICAgICAgICAgICAgICAgcHJpdi0+
bW9kZWwuYmFzZS5jb2wgKyBwcml2LT52aWV3LmNvbHMgKyBuIC0gMSk7CisgICAgZW5kQ29sID0g
c3RkOjptaW4ocHJpdi0+bW9kZWwuY3VycmVudC5jb2x1bW5zIC0gMSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgcHJpdi0+bW9kZWwuYmFzZS5jb2x1bW4gKyBwcml2LT52aWV3LmNvbHMgKyBuIC0g
MSk7CiAKLSAgICBJTkYoInN0YXJ0X3Jvdz0lbHUsIGVuZF9yb3c9JWx1LCBzdGFydF9jb2w9JWx1
LCBlbmRfY29sPSVsdSIsCi0gICAgICAgIHN0YXJ0X3JvdywgZW5kX3Jvdywgc3RhcnRfY29sLCBl
bmRfY29sKTsKKyAgICBJTkYoInN0YXJ0Um93PSVsdSwgZW5kUm93PSVsdSwgc3RhcnRDb2w9JWx1
LCBlbmRDb2w9JWx1IiwKKyAgICAgICAgc3RhcnRSb3csIGVuZFJvdywgc3RhcnRDb2wsIGVuZENv
bCk7CiAKICAgICB6b29tID0gUk9VTkRFRF9aT09NKHByaXYtPnZpZXcudGlsZS53aWR0aCwgem9v
bSk7CiAKLSAgICBmb3IgKGkgPSBzdGFydF9yb3c7IGkgPD0gZW5kX3JvdzsgaSsrKQotICAgICAg
ICBmb3IgKGogPSBzdGFydF9jb2w7IGogPD0gZW5kX2NvbDsgaisrKQorICAgIGZvciAoaSA9IHN0
YXJ0Um93OyBpIDw9IGVuZFJvdzsgaSsrKQorICAgICAgICBmb3IgKGogPSBzdGFydENvbDsgaiA8
PSBlbmRDb2w7IGorKykKICAgICAgICAgICAgIGlmICghX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3ByZV9yZW5kZXJfcmVxdWVzdF9hZGQocHJpdiwgaiwgaSwgem9vbSwgUFJFX1JFTkRFUl9QUklP
UklUWV9MT1cpKQogICAgICAgICAgICAgICAgIGdvdG8gc3RhcnRfcHJvY2Vzc2luZzsKIAogc3Rh
cnRfcHJvY2Vzc2luZzoKICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9wcm9jZXNz
X2lkbGVyX3N0YXJ0KHByaXYpOwogCi0gICAgdHVjID0gZXdrX3RpbGVfbWF0cml4X3VudXNlZF9j
YWNoZV9nZXQocHJpdi0+bW9kZWwubWF0cml4KTsKLSAgICBoZWlnaHQgPSAoZW5kX3JvdyAtIHN0
YXJ0X3JvdyArIDEpICogVElMRV9TSVpFX0FUX1pPT00ocHJpdi0+dmlldy50aWxlLmhlaWdodCwg
em9vbSk7Ci0gICAgd2lkdGggPSAoZW5kX2NvbCAtIHN0YXJ0X2NvbCArIDEpICogVElMRV9TSVpF
X0FUX1pPT00ocHJpdi0+dmlldy50aWxlLndpZHRoLCB6b29tKTsKLSAgICBld2tfdGlsZV91bnVz
ZWRfY2FjaGVfbG9ja19hcmVhKHR1YywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0YXJ0X2NvbCAqIFRJTEVfU0laRV9BVF9aT09NKHByaXYtPnZpZXcudGlsZS53aWR0aCwg
em9vbSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydF9yb3cgKiBU
SUxFX1NJWkVfQVRfWk9PTShwcml2LT52aWV3LnRpbGUuaGVpZ2h0LCB6b29tKSwgd2lkdGgsIGhl
aWdodCwgem9vbSk7CisgICAgdGlsZVVudXNlZENhY2hlID0gZXdrX3RpbGVfbWF0cml4X3VudXNl
ZF9jYWNoZV9nZXQocHJpdi0+bW9kZWwubWF0cml4KTsKKyAgICBoZWlnaHQgPSAoZW5kUm93IC0g
c3RhcnRSb3cgKyAxKSAqIFRJTEVfU0laRV9BVF9aT09NKHByaXYtPnZpZXcudGlsZS5oZWlnaHQs
IHpvb20pOworICAgIHdpZHRoID0gKGVuZENvbCAtIHN0YXJ0Q29sICsgMSkgKiBUSUxFX1NJWkVf
QVRfWk9PTShwcml2LT52aWV3LnRpbGUud2lkdGgsIHpvb20pOworICAgIGV3a190aWxlX3VudXNl
ZF9jYWNoZV9sb2NrX2FyZWEodGlsZVVudXNlZENhY2hlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RhcnRDb2wgKiBUSUxFX1NJWkVfQVRfWk9PTShwcml2LT52aWV3LnRp
bGUud2lkdGgsIHpvb20pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rh
cnRSb3cgKiBUSUxFX1NJWkVfQVRfWk9PTShwcml2LT52aWV3LnRpbGUuaGVpZ2h0LCB6b29tKSwg
d2lkdGgsIGhlaWdodCwgem9vbSk7CiAKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQpAQCAtMTg5
MSwxMiArMTg5MSwxMiBAQCBzdGFydF9wcm9jZXNzaW5nOgogdm9pZCBld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9wcmVfcmVuZGVyX2NhbmNlbChFdmFzX09iamVjdCogZXdrVGlsZSkKIHsKICAgICBQ
UklWX0RBVEFfR0VUX09SX1JFVFVSTihld2tUaWxlLCBwcml2KTsKLSAgICBFd2tfVGlsZV9VbnVz
ZWRfQ2FjaGUqIHR1YzsKKyAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHRpbGVVbnVzZWRDYWNo
ZTsKIAogICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfY2xl
YXIocHJpdik7CiAKLSAgICB0dWMgPSBld2tfdGlsZV9tYXRyaXhfdW51c2VkX2NhY2hlX2dldChw
cml2LT5tb2RlbC5tYXRyaXgpOwotICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV91bmxvY2tfYXJl
YSh0dWMpOworICAgIHRpbGVVbnVzZWRDYWNoZSA9IGV3a190aWxlX21hdHJpeF91bnVzZWRfY2Fj
aGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7CisgICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3Vu
bG9ja19hcmVhKHRpbGVVbnVzZWRDYWNoZSk7CiB9CiAKIEVpbmFfQm9vbCBld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9kaXNhYmxlX3JlbmRlcihFdmFzX09iamVjdCogZXdrVGlsZSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfbWF0cml4LmNwcCBiL1NvdXJjZS9X
ZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfbWF0cml4LmNwcAppbmRleCBlOTFiZDc3Nzc3ZTEwNWQw
ZmUyMmRjYWY4ZjJkNmFhMDAxNmQyMjRlLi5jOGMzNDg1MzIwNmQxZGJkZWE2NTE4ODY0ODA3NGE0
NGU2OTQ5MzNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX21h
dHJpeC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a190aWxlZF9tYXRyaXguY3Bw
CkBAIC0zMywxMCArMzMsMTAgQEAKIAogc3RydWN0IF9Fd2tfVGlsZV9NYXRyaXggewogICAgIEVp
bmFfTWF0cml4c3BhcnNlKiBtYXRyaXg7Ci0gICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0dWM7
CisgICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0aWxpZVVudXNlZENhY2hlOwogICAgIEV2YXNf
Q29sb3JzcGFjZSBjc3BhY2U7CiAgICAgc3RydWN0IHsKLSAgICAgICAgdm9pZCAoKmNiKSh2b2lk
KiBkYXRhLCBFd2tfVGlsZSogdGlsZSwgY29uc3QgRWluYV9SZWN0YW5nbGUqIHVwZGF0ZSk7Cisg
ICAgICAgIHZvaWQgKCpjYWxsYmFjaykodm9pZCogZGF0YSwgRXdrX1RpbGUqIHRpbGUsIGNvbnN0
IEVpbmFfUmVjdGFuZ2xlKiB1cGRhdGUpOwogICAgICAgICB2b2lkKiBkYXRhOwogICAgIH0gcmVu
ZGVyOwogICAgIHVuc2lnbmVkIGludCBmcm96ZW47CkBAIC02MSw0MiArNjEsNDIgQEAgc3RhdGlj
IHVpbnQ2NF90IGJ5dGVzX2xlYWtlZCA9IDA7CiAvKiBjYWxsZWQgd2hlbiBtYXRyaXhzcGFyc2Ug
aXMgcmVzaXplZCBvciBmcmVlZCAqLwogc3RhdGljIHZvaWQgX2V3a190aWxlX21hdHJpeF9jZWxs
X2ZyZWUodm9pZCogdXNlckRhdGEsIHZvaWQqIGNlbGxEYXRhKQogewotICAgIEV3a19UaWxlX01h
dHJpeCogdG0gPSBzdGF0aWNfY2FzdDxFd2tfVGlsZV9NYXRyaXgqPih1c2VyRGF0YSk7CisgICAg
RXdrX1RpbGVfTWF0cml4KiB0aWxlTWF0cml4ID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGVfTWF0cml4
Kj4odXNlckRhdGEpOwogICAgIEV3a19UaWxlKiB0aWxlID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGUq
PihjZWxsRGF0YSk7CiAKICAgICBpZiAoIXRpbGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIGV3
a190aWxlX3VudXNlZF9jYWNoZV9mcmVlemUodG0tPnR1Yyk7CisgICAgZXdrX3RpbGVfdW51c2Vk
X2NhY2hlX2ZyZWV6ZSh0aWxlTWF0cml4LT50aWxpZVVudXNlZENhY2hlKTsKIAogICAgIGlmICh0
aWxlLT51cGRhdGVzIHx8IHRpbGUtPnN0YXRzLmZ1bGxfdXBkYXRlKQotICAgICAgICB0bS0+dXBk
YXRlcyA9IGVpbmFfbGlzdF9yZW1vdmUodG0tPnVwZGF0ZXMsIHRpbGUpOworICAgICAgICB0aWxl
TWF0cml4LT51cGRhdGVzID0gZWluYV9saXN0X3JlbW92ZSh0aWxlTWF0cml4LT51cGRhdGVzLCB0
aWxlKTsKIAogICAgIGlmICh0aWxlLT52aXNpYmxlKQogICAgICAgICBFUlIoImZyZWVpbmcgY2Vs
bCB0aGF0IGlzIHZpc2libGUsIGxlYWtpbmcgdGlsZSAlcCIsIHRpbGUpOwogICAgIGVsc2Ugewot
ICAgICAgICBpZiAoIWV3a190aWxlX3VudXNlZF9jYWNoZV90aWxlX2dldCh0bS0+dHVjLCB0aWxl
KSkKLSAgICAgICAgICAgIEVSUigidGlsZSAlcCB3YXMgbm90IGluIGNhY2hlICVwPyBsZWFraW5n
Li4uIiwgdGlsZSwgdG0tPnR1Yyk7CisgICAgICAgIGlmICghZXdrX3RpbGVfdW51c2VkX2NhY2hl
X3RpbGVfZ2V0KHRpbGVNYXRyaXgtPnRpbGllVW51c2VkQ2FjaGUsIHRpbGUpKQorICAgICAgICAg
ICAgRVJSKCJ0aWxlICVwIHdhcyBub3QgaW4gY2FjaGUgJXA/IGxlYWtpbmcuLi4iLCB0aWxlLCB0
aWxlTWF0cml4LT50aWxpZVVudXNlZENhY2hlKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAg
ICBEQkcoInRpbGUgY2VsbCBkb2VzIG5vdCBleGlzdCBhbnltb3JlLCBmcmVlIGl0ICVwIiwgdGls
ZSk7CiAjaWZkZWYgREVCVUdfTUVNX0xFQUtTCi0gICAgICAgICAgICB0bS0+c3RhdHMuYnl0ZXMu
ZnJlZWQgKz0gdGlsZS0+Ynl0ZXM7Ci0gICAgICAgICAgICB0bS0+c3RhdHMudGlsZXMuZnJlZWQr
KzsKKyAgICAgICAgICAgIHRpbGVNYXRyaXgtPnN0YXRzLmJ5dGVzLmZyZWVkICs9IHRpbGUtPmJ5
dGVzOworICAgICAgICAgICAgdGlsZU1hdHJpeC0+c3RhdHMudGlsZXMuZnJlZWQrKzsKICNlbmRp
ZgogICAgICAgICAgICAgZXdrX3RpbGVfZnJlZSh0aWxlKTsKICAgICAgICAgfQogICAgIH0KIAot
ICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV90aGF3KHRtLT50dWMpOworICAgIGV3a190aWxlX3Vu
dXNlZF9jYWNoZV90aGF3KHRpbGVNYXRyaXgtPnRpbGllVW51c2VkQ2FjaGUpOwogfQogCiAvKiBj
YWxsZWQgd2hlbiBjYWNoZSBvZiB1bnVzZWQgdGlsZSBpcyBmbHVzaGVkICovCiBzdGF0aWMgdm9p
ZCBfZXdrX3RpbGVfbWF0cml4X3RpbGVfZnJlZSh2b2lkKiBkYXRhLCBFd2tfVGlsZSogdGlsZSkK
IHsKLSAgICBFd2tfVGlsZV9NYXRyaXgqIHRtID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGVfTWF0cml4
Kj4oZGF0YSk7CisgICAgRXdrX1RpbGVfTWF0cml4KiB0aWxlTWF0cml4ID0gc3RhdGljX2Nhc3Q8
RXdrX1RpbGVfTWF0cml4Kj4oZGF0YSk7CiAgICAgRWluYV9NYXRyaXhzcGFyc2VfQ2VsbCogY2Vs
bDsKIAotICAgIGlmICghZWluYV9tYXRyaXhzcGFyc2VfY2VsbF9pZHhfZ2V0KHRtLT5tYXRyaXgs
IHRpbGUtPnJvdywgdGlsZS0+Y29sLCAmY2VsbCkpIHsKKyAgICBpZiAoIWVpbmFfbWF0cml4c3Bh
cnNlX2NlbGxfaWR4X2dldCh0aWxlTWF0cml4LT5tYXRyaXgsIHRpbGUtPnJvdywgdGlsZS0+Y29s
LCAmY2VsbCkpIHsKICAgICAgICAgRVJSKCJyZW1vdmluZyB0aWxlICVwIHRoYXQgd2FzIG5vdCBp
biB0aGUgbWF0cml4PyBMZWFraW5nLi4uIiwgdGlsZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CkBAIC0xMDcsNyArMTA3LDcgQEAgc3RhdGljIHZvaWQgX2V3a190aWxlX21hdHJpeF90aWxlX2Zy
ZWUodm9pZCogZGF0YSwgRXdrX1RpbGUqIHRpbGUpCiAgICAgfQogCiAgICAgaWYgKHRpbGUtPnVw
ZGF0ZXMgfHwgdGlsZS0+c3RhdHMuZnVsbF91cGRhdGUpCi0gICAgICAgIHRtLT51cGRhdGVzID0g
ZWluYV9saXN0X3JlbW92ZSh0bS0+dXBkYXRlcywgdGlsZSk7CisgICAgICAgIHRpbGVNYXRyaXgt
PnVwZGF0ZXMgPSBlaW5hX2xpc3RfcmVtb3ZlKHRpbGVNYXRyaXgtPnVwZGF0ZXMsIHRpbGUpOwog
CiAgICAgLyogc2V0IHRvIG51bGwgdG8gYXZvaWQgZG91YmxlIGZyZWUgKi8KICAgICBlaW5hX21h
dHJpeHNwYXJzZV9jZWxsX2RhdGFfcmVwbGFjZShjZWxsLCAwLCAwKTsKQEAgLTEyMCw4ICsxMjAs
OCBAQCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVfbWF0cml4X3RpbGVfZnJlZSh2b2lkKiBkYXRhLCBF
d2tfVGlsZSogdGlsZSkKICAgICB9CiAKICNpZmRlZiBERUJVR19NRU1fTEVBS1MKLSAgICB0bS0+
c3RhdHMuYnl0ZXMuZnJlZWQgKz0gdGlsZS0+Ynl0ZXM7Ci0gICAgdG0tPnN0YXRzLnRpbGVzLmZy
ZWVkKys7CisgICAgdGlsZU1hdHJpeC0+c3RhdHMuYnl0ZXMuZnJlZWQgKz0gdGlsZS0+Ynl0ZXM7
CisgICAgdGlsZU1hdHJpeC0+c3RhdHMudGlsZXMuZnJlZWQrKzsKICNlbmRpZgogCiAgICAgZXdr
X3RpbGVfZnJlZSh0aWxlKTsKQEAgLTE0NSwzOCArMTQ1LDM4IEBAIHN0YXRpYyB2b2lkIF9ld2tf
dGlsZV9tYXRyaXhfdGlsZV9mcmVlKHZvaWQqIGRhdGEsIEV3a19UaWxlKiB0aWxlKQogICoKICAq
IEByZXR1cm4gbmV3bHkgYWxsb2NhdGVkIGluc3RhbmNlIG9uIHN1Y2Nlc3MsIEBjIDAgb24gZmFp
bHVyZS4KICAqLwotRXdrX1RpbGVfTWF0cml4KiBld2tfdGlsZV9tYXRyaXhfbmV3KEV3a19UaWxl
X1VudXNlZF9DYWNoZSogdGlsZVVudXNlZENhY2hlLCB1bnNpZ25lZCBsb25nIGNvbHVtbnMsIHVu
c2lnbmVkIGxvbmcgcm93cywgRXZhc19Db2xvcnNwYWNlIGNvbG9yU3BhY2UsIHZvaWQgKCpyZW5k
ZXJfY2FsbGJhY2spKHZvaWQqIGRhdGEsIEV3a19UaWxlKiB0aWxlLCBjb25zdCBFaW5hX1JlY3Rh
bmdsZSogdXBkYXRlKSwgY29uc3Qgdm9pZCogcmVuZGVyRGF0YSkKK0V3a19UaWxlX01hdHJpeCog
ZXdrX3RpbGVfbWF0cml4X25ldyhFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHRpbGVVbnVzZWRDYWNo
ZSwgdW5zaWduZWQgbG9uZyBjb2x1bW5zLCB1bnNpZ25lZCBsb25nIHJvd3MsIEV2YXNfQ29sb3Jz
cGFjZSBjb2xvclNwYWNlLCB2b2lkICgqcmVuZGVyQ2FsbGJhY2spKHZvaWQqIGRhdGEsIEV3a19U
aWxlKiB0aWxlLCBjb25zdCBFaW5hX1JlY3RhbmdsZSogdXBkYXRlKSwgY29uc3Qgdm9pZCogcmVu
ZGVyRGF0YSkKIHsKLSAgICBFd2tfVGlsZV9NYXRyaXgqIHRtID0gc3RhdGljX2Nhc3Q8RXdrX1Rp
bGVfTWF0cml4Kj4oY2FsbG9jKDEsIHNpemVvZihFd2tfVGlsZV9NYXRyaXgpKSk7Ci0gICAgaWYg
KCF0bSkKKyAgICBFd2tfVGlsZV9NYXRyaXgqIHRpbGVNYXRyaXggPSBzdGF0aWNfY2FzdDxFd2tf
VGlsZV9NYXRyaXgqPihjYWxsb2MoMSwgc2l6ZW9mKEV3a19UaWxlX01hdHJpeCkpKTsKKyAgICBp
ZiAoIXRpbGVNYXRyaXgpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgdG0tPm1hdHJpeCA9IGVp
bmFfbWF0cml4c3BhcnNlX25ldyhyb3dzLCBjb2x1bW5zLCBfZXdrX3RpbGVfbWF0cml4X2NlbGxf
ZnJlZSwgdG0pOwotICAgIGlmICghdG0tPm1hdHJpeCkgeworICAgIHRpbGVNYXRyaXgtPm1hdHJp
eCA9IGVpbmFfbWF0cml4c3BhcnNlX25ldyhyb3dzLCBjb2x1bW5zLCBfZXdrX3RpbGVfbWF0cml4
X2NlbGxfZnJlZSwgdGlsZU1hdHJpeCk7CisgICAgaWYgKCF0aWxlTWF0cml4LT5tYXRyaXgpIHsK
ICAgICAgICAgRVJSKCJjb3VsZCBub3QgY3JlYXRlIHNwYXJzZSBtYXRyaXguIik7Ci0gICAgICAg
IGZyZWUodG0pOworICAgICAgICBmcmVlKHRpbGVNYXRyaXgpOwogICAgICAgICByZXR1cm4gMDsK
ICAgICB9CiAKICAgICBpZiAodGlsZVVudXNlZENhY2hlKQotICAgICAgICB0bS0+dHVjID0gZXdr
X3RpbGVfdW51c2VkX2NhY2hlX3JlZih0aWxlVW51c2VkQ2FjaGUpOworICAgICAgICB0aWxlTWF0
cml4LT50aWxpZVVudXNlZENhY2hlID0gZXdrX3RpbGVfdW51c2VkX2NhY2hlX3JlZih0aWxlVW51
c2VkQ2FjaGUpOwogICAgIGVsc2UgewotICAgICAgICB0bS0+dHVjID0gZXdrX3RpbGVfdW51c2Vk
X2NhY2hlX25ldyg0MDk2MDAwMCk7Ci0gICAgICAgIGlmICghdG0tPnR1YykgeworICAgICAgICB0
aWxlTWF0cml4LT50aWxpZVVudXNlZENhY2hlID0gZXdrX3RpbGVfdW51c2VkX2NhY2hlX25ldyg0
MDk2MDAwMCk7CisgICAgICAgIGlmICghdGlsZU1hdHJpeC0+dGlsaWVVbnVzZWRDYWNoZSkgewog
ICAgICAgICAgICAgRVJSKCJubyBjYWNoZSBvZiB1bnVzZWQgdGlsZSEiKTsKLSAgICAgICAgICAg
IGVpbmFfbWF0cml4c3BhcnNlX2ZyZWUodG0tPm1hdHJpeCk7Ci0gICAgICAgICAgICBmcmVlKHRt
KTsKKyAgICAgICAgICAgIGVpbmFfbWF0cml4c3BhcnNlX2ZyZWUodGlsZU1hdHJpeC0+bWF0cml4
KTsKKyAgICAgICAgICAgIGZyZWUodGlsZU1hdHJpeCk7CiAgICAgICAgICAgICByZXR1cm4gMDsK
ICAgICAgICAgfQogICAgIH0KIAotICAgIHRtLT5jc3BhY2UgPSBjb2xvclNwYWNlOwotICAgIHRt
LT5yZW5kZXIuY2IgPSByZW5kZXJfY2FsbGJhY2s7Ci0gICAgdG0tPnJlbmRlci5kYXRhID0gKHZv
aWQqKXJlbmRlckRhdGE7Ci0gICAgdG0tPnRpbGUud2lkdGggPSBERUZBVUxUX1RJTEVfVzsKLSAg
ICB0bS0+dGlsZS5oZWlnaHQgPSBERUZBVUxUX1RJTEVfSDsKKyAgICB0aWxlTWF0cml4LT5jc3Bh
Y2UgPSBjb2xvclNwYWNlOworICAgIHRpbGVNYXRyaXgtPnJlbmRlci5jYWxsYmFjayA9IHJlbmRl
ckNhbGxiYWNrOworICAgIHRpbGVNYXRyaXgtPnJlbmRlci5kYXRhID0gKHZvaWQqKXJlbmRlckRh
dGE7CisgICAgdGlsZU1hdHJpeC0+dGlsZS53aWR0aCA9IERFRkFVTFRfVElMRV9XOworICAgIHRp
bGVNYXRyaXgtPnRpbGUuaGVpZ2h0ID0gREVGQVVMVF9USUxFX0g7CiAKLSAgICByZXR1cm4gdG07
CisgICAgcmV0dXJuIHRpbGVNYXRyaXg7CiB9CiAKIC8qKgpAQCAtMTkxLDEyICsxOTEsMTIgQEAg
dm9pZCBld2tfdGlsZV9tYXRyaXhfZnJlZShFd2tfVGlsZV9NYXRyaXgqIHRpbGVNYXRyaXgpCiAj
ZW5kaWYKIAogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHRpbGVNYXRyaXgpOwotICAg
IGV3a190aWxlX3VudXNlZF9jYWNoZV9mcmVlemUodGlsZU1hdHJpeC0+dHVjKTsKKyAgICBld2tf
dGlsZV91bnVzZWRfY2FjaGVfZnJlZXplKHRpbGVNYXRyaXgtPnRpbGllVW51c2VkQ2FjaGUpOwog
CiAgICAgZWluYV9tYXRyaXhzcGFyc2VfZnJlZSh0aWxlTWF0cml4LT5tYXRyaXgpOwogCi0gICAg
ZXdrX3RpbGVfdW51c2VkX2NhY2hlX3RoYXcodGlsZU1hdHJpeC0+dHVjKTsKLSAgICBld2tfdGls
ZV91bnVzZWRfY2FjaGVfdW5yZWYodGlsZU1hdHJpeC0+dHVjKTsKKyAgICBld2tfdGlsZV91bnVz
ZWRfY2FjaGVfdGhhdyh0aWxlTWF0cml4LT50aWxpZVVudXNlZENhY2hlKTsKKyAgICBld2tfdGls
ZV91bnVzZWRfY2FjaGVfdW5yZWYodGlsZU1hdHJpeC0+dGlsaWVVbnVzZWRDYWNoZSk7CiAKICNp
ZmRlZiBERUJVR19NRU1fTEVBS1MKICAgICB0aWxlcyA9IHRpbGVNYXRyaXgtPnN0YXRzLnRpbGVz
LmFsbG9jYXRlZCAtIHRpbGVNYXRyaXgtPnN0YXRzLnRpbGVzLmZyZWVkOwpAQCAtMjQ0LDcgKzI0
NCw3IEBAIHZvaWQgZXdrX3RpbGVfbWF0cml4X3Jlc2l6ZShFd2tfVGlsZV9NYXRyaXgqIHRpbGVN
YXRyaXgsIHVuc2lnbmVkIGxvbmcgY29scywgdW5zCiBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIGV3
a190aWxlX21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KGNvbnN0IEV3a19UaWxlX01hdHJpeCogdGls
ZU1hdHJpeCkKIHsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodGlsZU1hdHJp
eCwgMCk7Ci0gICAgcmV0dXJuIHRpbGVNYXRyaXgtPnR1YzsKKyAgICByZXR1cm4gdGlsZU1hdHJp
eC0+dGlsaWVVbnVzZWRDYWNoZTsKIH0KIAogLyoqCkBAIC0yNzksNyArMjc5LDcgQEAgRXdrX1Rp
bGUqIGV3a190aWxlX21hdHJpeF90aWxlX2V4YWN0X2dldChFd2tfVGlsZV9NYXRyaXgqIHRpbGVN
YXRyaXgsIHVuc2lnbmVkIGwKIAogZW5kOgogICAgIGlmICghdGlsZS0+dmlzaWJsZSkgewotICAg
ICAgICBpZiAoIWV3a190aWxlX3VudXNlZF9jYWNoZV90aWxlX2dldCh0aWxlTWF0cml4LT50dWMs
IHRpbGUpKQorICAgICAgICBpZiAoIWV3a190aWxlX3VudXNlZF9jYWNoZV90aWxlX2dldCh0aWxl
TWF0cml4LT50aWxpZVVudXNlZENhY2hlLCB0aWxlKSkKICAgICAgICAgICAgIFdSTigiRXdrX1Rp
bGUgd2FzIHVudXNlZCBidXQgbm90IGluIGNhY2hlPyBidWchIik7CiAgICAgfQogCkBAIC0zMjAs
MTggKzMyMCwxOCBAQCBFaW5hX0Jvb2wgZXdrX3RpbGVfbWF0cml4X3RpbGVfZXhhY3RfZXhpc3Rz
KEV3a19UaWxlX01hdHJpeCogdGlsZU1hdHJpeCwgdW5zaWduZQogICovCiBFd2tfVGlsZSogZXdr
X3RpbGVfbWF0cml4X3RpbGVfbmV3KEV3a19UaWxlX01hdHJpeCogdGlsZU1hdHJpeCwgRXZhcyog
Y2FudmFzLCB1bnNpZ25lZCBsb25nIGNvbHVtbiwgdW5zaWduZWQgbG9uZyByb3csIGZsb2F0IHpv
b20pCiB7Ci0gICAgRXZhc19Db29yZCB0dywgdGg7CisgICAgRXZhc19Db29yZCB0aWxlV2lkdGgs
IHRpbGVIZWlnaHQ7CiAgICAgRXdrX1RpbGUqIHRpbGU7CiAKICAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTl9WQUwodGlsZU1hdHJpeCwgMCk7CiAgICAgRUlOQV9TQUZFVFlfT05fRkFMU0Vf
UkVUVVJOX1ZBTCh6b29tID4gMC4wLCAwKTsKIAotICAgIHR3ID0gdGlsZU1hdHJpeC0+dGlsZS53
aWR0aDsKLSAgICB0aCA9IHRpbGVNYXRyaXgtPnRpbGUuaGVpZ2h0OworICAgIHRpbGVXaWR0aCA9
IHRpbGVNYXRyaXgtPnRpbGUud2lkdGg7CisgICAgdGlsZUhlaWdodCA9IHRpbGVNYXRyaXgtPnRp
bGUuaGVpZ2h0OwogCi0gICAgdGlsZSA9IGV3a190aWxlX25ldyhjYW52YXMsIHR3LCB0aCwgem9v
bSwgdGlsZU1hdHJpeC0+Y3NwYWNlKTsKKyAgICB0aWxlID0gZXdrX3RpbGVfbmV3KGNhbnZhcywg
dGlsZVdpZHRoLCB0aWxlSGVpZ2h0LCB6b29tLCB0aWxlTWF0cml4LT5jc3BhY2UpOwogICAgIGlm
ICghdGlsZSkgewotICAgICAgICBFUlIoImNvdWxkIG5vdCBjcmVhdGUgdGlsZSAlZHglZCBhdCAl
ZiwgY3NwYWNlPSVkIiwgdHcsIHRoLCAoZG91YmxlKXpvb20sIHRpbGVNYXRyaXgtPmNzcGFjZSk7
CisgICAgICAgIEVSUigiY291bGQgbm90IGNyZWF0ZSB0aWxlICVkeCVkIGF0ICVmLCBjc3BhY2U9
JWQiLCB0aWxlV2lkdGgsIHRpbGVIZWlnaHQsIChkb3VibGUpem9vbSwgdGlsZU1hdHJpeC0+Y3Nw
YWNlKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCkBAIC0zNDMsOCArMzQzLDggQEAgRXdr
X1RpbGUqIGV3a190aWxlX21hdHJpeF90aWxlX25ldyhFd2tfVGlsZV9NYXRyaXgqIHRpbGVNYXRy
aXgsIEV2YXMqIGNhbnZhcywgdW4KIAogICAgIHRpbGUtPmNvbCA9IGNvbHVtbjsKICAgICB0aWxl
LT5yb3cgPSByb3c7Ci0gICAgdGlsZS0+eCA9IGNvbHVtbiAqIHR3OwotICAgIHRpbGUtPnkgPSBy
b3cgKiB0aDsKKyAgICB0aWxlLT54ID0gY29sdW1uICogdGlsZVdpZHRoOworICAgIHRpbGUtPnkg
PSByb3cgKiB0aWxlSGVpZ2h0OwogCiAgICAgY2Fpcm9fdHJhbnNsYXRlKHRpbGUtPmNhaXJvLCAt
dGlsZS0+eCwgLXRpbGUtPnkpOwogCkBAIC0zODUsMTYgKzM4NSwxNiBAQCBFaW5hX0Jvb2wgZXdr
X3RpbGVfbWF0cml4X3RpbGVfcHV0KEV3a19UaWxlX01hdHJpeCogdGlsZU1hdHJpeCwgRXdrX1Rp
bGUqIHRpbGUsCiAgICAgICAgIHJldHVybiBFSU5BX1RSVUU7CiAKICAgICB0aWxlLT5zdGF0cy5s
YXN0X3VzZWQgPSBsYXN0VXNlZDsKLSAgICByZXR1cm4gZXdrX3RpbGVfdW51c2VkX2NhY2hlX3Rp
bGVfcHV0KHRpbGVNYXRyaXgtPnR1YywgdGlsZSwgX2V3a190aWxlX21hdHJpeF90aWxlX2ZyZWUs
IHRpbGVNYXRyaXgpOworICAgIHJldHVybiBld2tfdGlsZV91bnVzZWRfY2FjaGVfdGlsZV9wdXQo
dGlsZU1hdHJpeC0+dGlsaWVVbnVzZWRDYWNoZSwgdGlsZSwgX2V3a190aWxlX21hdHJpeF90aWxl
X2ZyZWUsIHRpbGVNYXRyaXgpOwogfQogCiBFaW5hX0Jvb2wgZXdrX3RpbGVfbWF0cml4X3RpbGVf
dXBkYXRlKEV3a19UaWxlX01hdHJpeCogdGlsZU1hdHJpeCwgdW5zaWduZWQgbG9uZyBjb2wsIHVu
c2lnbmVkIGxvbmcgcm93LCBjb25zdCBFaW5hX1JlY3RhbmdsZSogdXBkYXRlKQogewotICAgIEVp
bmFfUmVjdGFuZ2xlIG5ld191cGRhdGU7CisgICAgRWluYV9SZWN0YW5nbGUgbmV3VXBkYXRlOwog
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh0aWxlTWF0cml4LCBFSU5BX0ZBTFNF
KTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodXBkYXRlLCBFSU5BX0ZBTFNF
KTsKIAotICAgIG1lbWNweSgmbmV3X3VwZGF0ZSwgdXBkYXRlLCBzaXplb2YobmV3X3VwZGF0ZSkp
OworICAgIG1lbWNweSgmbmV3VXBkYXRlLCB1cGRhdGUsIHNpemVvZihuZXdVcGRhdGUpKTsKICAg
ICAvLyBjaGVjayB1cGRhdGUgaXMgdmFsaWQsIG90aGVyd2lzZSByZXR1cm4gRUlOQV9GQUxTRQog
ICAgIGlmICh1cGRhdGUtPnggPCAwIHx8IHVwZGF0ZS0+eSA8IDAgfHwgdXBkYXRlLT53IDw9IDAg
fHwgdXBkYXRlLT5oIDw9IDApIHsKICAgICAgICAgRVJSKCJpbnZhbGlkIHVwZGF0ZSByZWdpb24u
Iik7CkBAIC00MDIsOSArNDAyLDkgQEAgRWluYV9Cb29sIGV3a190aWxlX21hdHJpeF90aWxlX3Vw
ZGF0ZShFd2tfVGlsZV9NYXRyaXgqIHRpbGVNYXRyaXgsIHVuc2lnbmVkIGxvbmcKICAgICB9CiAK
ICAgICBpZiAodXBkYXRlLT54ICsgdXBkYXRlLT53IC0gMSA+PSB0aWxlTWF0cml4LT50aWxlLndp
ZHRoKQotICAgICAgICBuZXdfdXBkYXRlLncgPSB0aWxlTWF0cml4LT50aWxlLndpZHRoIC0gdXBk
YXRlLT54OworICAgICAgICBuZXdVcGRhdGUudyA9IHRpbGVNYXRyaXgtPnRpbGUud2lkdGggLSB1
cGRhdGUtPng7CiAgICAgaWYgKHVwZGF0ZS0+eSArIHVwZGF0ZS0+aCAtIDEgPj0gdGlsZU1hdHJp
eC0+dGlsZS5oZWlnaHQpCi0gICAgICAgIG5ld191cGRhdGUuaCA9IHRpbGVNYXRyaXgtPnRpbGUu
aGVpZ2h0IC0gdXBkYXRlLT55OworICAgICAgICBuZXdVcGRhdGUuaCA9IHRpbGVNYXRyaXgtPnRp
bGUuaGVpZ2h0IC0gdXBkYXRlLT55OwogCiAgICAgRXdrX1RpbGUqIHRpbGUgPSBzdGF0aWNfY2Fz
dDxFd2tfVGlsZSo+KGVpbmFfbWF0cml4c3BhcnNlX2RhdGFfaWR4X2dldCh0aWxlTWF0cml4LT5t
YXRyaXgsIHJvdywgY29sKSk7CiAgICAgaWYgKCF0aWxlKQpAQCAtNDEyLDcgKzQxMiw3IEBAIEVp
bmFfQm9vbCBld2tfdGlsZV9tYXRyaXhfdGlsZV91cGRhdGUoRXdrX1RpbGVfTWF0cml4KiB0aWxl
TWF0cml4LCB1bnNpZ25lZCBsb25nCiAKICAgICBpZiAoIXRpbGUtPnVwZGF0ZXMgJiYgIXRpbGUt
PnN0YXRzLmZ1bGxfdXBkYXRlKQogICAgICAgICB0aWxlTWF0cml4LT51cGRhdGVzID0gZWluYV9s
aXN0X2FwcGVuZCh0aWxlTWF0cml4LT51cGRhdGVzLCB0aWxlKTsKLSAgICBld2tfdGlsZV91cGRh
dGVfYXJlYSh0aWxlLCAmbmV3X3VwZGF0ZSk7CisgICAgZXdrX3RpbGVfdXBkYXRlX2FyZWEodGls
ZSwgJm5ld1VwZGF0ZSk7CiAKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQpAQCAtNDUzLDcgKzQ1
Myw3IEBAIHZvaWQgZXdrX3RpbGVfbWF0cml4X3RpbGVfdXBkYXRlc19jbGVhcihFd2tfVGlsZV9N
YXRyaXgqIHRpbGVNYXRyaXgsIEV3a19UaWxlKiB0CiBzdGF0aWMgRWluYV9Cb29sIF9ld2tfdGls
ZV9tYXRyaXhfc2xpY2VyX3NldHVwKEV3a19UaWxlX01hdHJpeCogdGlsZU1hdHJpeCwgY29uc3Qg
RWluYV9SZWN0YW5nbGUqIGFyZWEsIGZsb2F0IHpvb20sIEVpbmFfVGlsZV9HcmlkX1NsaWNlciog
c2xpY2VyKQogewogICAgIHVuc2lnbmVkIGxvbmcgcm93cywgY29sczsKLSAgICBFdmFzX0Nvb3Jk
IHgsIHksIHdpZHRoLCBoZWlnaHQsIHR3LCB0aDsKKyAgICBFdmFzX0Nvb3JkIHgsIHksIHdpZHRo
LCBoZWlnaHQsIHRpbGVXaWR0aCwgdGlsZUhlaWdodDsKIAogICAgIGlmIChhcmVhLT53IDw9IDAg
fHwgYXJlYS0+aCA8PSAwKSB7CiAgICAgICAgIFdSTigiaW52YWxpZCBhcmVhIHJlZ2lvbjogJWQs
JWQrJWR4JWQuIiwKQEAgLTQ2Niw4ICs0NjYsOCBAQCBzdGF0aWMgRWluYV9Cb29sIF9ld2tfdGls
ZV9tYXRyaXhfc2xpY2VyX3NldHVwKEV3a19UaWxlX01hdHJpeCogdGlsZU1hdHJpeCwgY29ucwog
ICAgIHdpZHRoID0gYXJlYS0+dzsKICAgICBoZWlnaHQgPSBhcmVhLT5oOwogCi0gICAgdHcgPSB0
aWxlTWF0cml4LT50aWxlLndpZHRoOwotICAgIHRoID0gdGlsZU1hdHJpeC0+dGlsZS5oZWlnaHQ7
CisgICAgdGlsZVdpZHRoID0gdGlsZU1hdHJpeC0+dGlsZS53aWR0aDsKKyAgICB0aWxlSGVpZ2h0
ID0gdGlsZU1hdHJpeC0+dGlsZS5oZWlnaHQ7CiAKICAgICAvLyBjcm9wcGluZyBhcmVhIHJlZ2lv
biB0byBmaXQgbWF0cml4CiAgICAgZWluYV9tYXRyaXhzcGFyc2Vfc2l6ZV9nZXQodGlsZU1hdHJp
eC0+bWF0cml4LCAmcm93cywgJmNvbHMpOwpAQCAtNDgwLDEyICs0ODAsMTIgQEAgc3RhdGljIEVp
bmFfQm9vbCBfZXdrX3RpbGVfbWF0cml4X3NsaWNlcl9zZXR1cChFd2tfVGlsZV9NYXRyaXgqIHRp
bGVNYXRyaXgsIGNvbnMKICAgICAgICAgeSA9IDA7CiAgICAgfQogCi0gICAgaWYgKHkgKyBoZWln
aHQgLSAxID4gKGxvbmcpKHJvd3MgKiB0aCkpCi0gICAgICAgIGhlaWdodCA9IHJvd3MgKiB0aCAt
IHk7Ci0gICAgaWYgKHggKyB3aWR0aCAtIDEgPiAobG9uZykoY29scyAqIHR3KSkKLSAgICAgICAg
d2lkdGggPSBjb2xzICogdHcgLSB4OworICAgIGlmICh5ICsgaGVpZ2h0IC0gMSA+IChsb25nKShy
b3dzICogdGlsZUhlaWdodCkpCisgICAgICAgIGhlaWdodCA9IHJvd3MgKiB0aWxlSGVpZ2h0IC0g
eTsKKyAgICBpZiAoeCArIHdpZHRoIC0gMSA+IChsb25nKShjb2xzICogdGlsZVdpZHRoKSkKKyAg
ICAgICAgd2lkdGggPSBjb2xzICogdGlsZVdpZHRoIC0geDsKIAotICAgIHJldHVybiBlaW5hX3Rp
bGVfZ3JpZF9zbGljZXJfc2V0dXAoc2xpY2VyLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCB0dywgdGgp
OworICAgIHJldHVybiBlaW5hX3RpbGVfZ3JpZF9zbGljZXJfc2V0dXAoc2xpY2VyLCB4LCB5LCB3
aWR0aCwgaGVpZ2h0LCB0aWxlV2lkdGgsIHRpbGVIZWlnaHQpOwogfQogCiAKQEAgLTUzMSwxNyAr
NTMxLDE3IEBAIEVpbmFfQm9vbCBld2tfdGlsZV9tYXRyaXhfdXBkYXRlKEV3a19UaWxlX01hdHJp
eCogdGlsZU1hdHJpeCwgY29uc3QgRWluYV9SZWN0YW5nCiAKIHZvaWQgZXdrX3RpbGVfbWF0cml4
X3VwZGF0ZXNfcHJvY2VzcyhFd2tfVGlsZV9NYXRyaXgqIHRpbGVNYXRyaXgpCiB7Ci0gICAgRWlu
YV9MaXN0KiBsLCAqIGxfbmV4dDsKKyAgICBFaW5hX0xpc3QqIGxpc3QsICpsaXN0TmV4dDsKICAg
ICB2b2lkKiBpdGVtOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHRpbGVNYXRyaXgp
OwogCiAgICAgLy8gcHJvY2VzcyB1cGRhdGVzLCB1bmZsYWcgdGlsZXMKLSAgICBFSU5BX0xJU1Rf
Rk9SRUFDSF9TQUZFKHRpbGVNYXRyaXgtPnVwZGF0ZXMsIGwsIGxfbmV4dCwgaXRlbSkgeworICAg
IEVJTkFfTElTVF9GT1JFQUNIX1NBRkUodGlsZU1hdHJpeC0+dXBkYXRlcywgbGlzdCwgbGlzdE5l
eHQsIGl0ZW0pIHsKICAgICAgICAgRXdrX1RpbGUqIHRpbGUgPSBzdGF0aWNfY2FzdDxFd2tfVGls
ZSo+KGl0ZW0pOwotICAgICAgICBld2tfdGlsZV91cGRhdGVzX3Byb2Nlc3ModGlsZSwgdGlsZU1h
dHJpeC0+cmVuZGVyLmNiLCB0aWxlTWF0cml4LT5yZW5kZXIuZGF0YSk7CisgICAgICAgIGV3a190
aWxlX3VwZGF0ZXNfcHJvY2Vzcyh0aWxlLCB0aWxlTWF0cml4LT5yZW5kZXIuY2FsbGJhY2ssIHRp
bGVNYXRyaXgtPnJlbmRlci5kYXRhKTsKICAgICAgICAgaWYgKHRpbGUtPnZpc2libGUpIHsKICAg
ICAgICAgICAgIGV3a190aWxlX3VwZGF0ZXNfY2xlYXIodGlsZSk7Ci0gICAgICAgICAgICB0aWxl
TWF0cml4LT51cGRhdGVzID0gZWluYV9saXN0X3JlbW92ZV9saXN0KHRpbGVNYXRyaXgtPnVwZGF0
ZXMsIGwpOworICAgICAgICAgICAgdGlsZU1hdHJpeC0+dXBkYXRlcyA9IGVpbmFfbGlzdF9yZW1v
dmVfbGlzdCh0aWxlTWF0cml4LT51cGRhdGVzLCBsaXN0KTsKICAgICAgICAgfQogICAgIH0KIH0K
QEAgLTU1OSw3ICs1NTksNyBAQCB2b2lkIGV3a190aWxlX21hdHJpeF91cGRhdGVzX2NsZWFyKEV3
a19UaWxlX01hdHJpeCogdGlsZU1hdHJpeCkKIC8vIHJlbW92ZSBtZSBsYXRlciEKIHZvaWQgZXdr
X3RpbGVfbWF0cml4X2RiZyhjb25zdCBFd2tfVGlsZV9NYXRyaXgqIHRpbGVNYXRyaXgpCiB7Ci0g
ICAgRWluYV9JdGVyYXRvciogaXQgPSBlaW5hX21hdHJpeHNwYXJzZV9pdGVyYXRvcl9jb21wbGV0
ZV9uZXcodGlsZU1hdHJpeC0+bWF0cml4KTsKKyAgICBFaW5hX0l0ZXJhdG9yKiBpdGVyYXRvciA9
IGVpbmFfbWF0cml4c3BhcnNlX2l0ZXJhdG9yX2NvbXBsZXRlX25ldyh0aWxlTWF0cml4LT5tYXRy
aXgpOwogICAgIEVpbmFfTWF0cml4c3BhcnNlX0NlbGwqIGNlbGw7CiAgICAgRWluYV9Cb29sIGxh
c3RfZW1wdHkgPSBFSU5BX0ZBTFNFOwogCkBAIC01NzQsOSArNTc0LDkgQEAgdm9pZCBld2tfdGls
ZV9tYXRyaXhfZGJnKGNvbnN0IEV3a19UaWxlX01hdHJpeCogdGlsZU1hdHJpeCkKICAgICBwcmlu
dGYoIkV3a19UaWxlIE1hdHJpeDpcbiIpOwogI2VuZGlmCiAKLSAgICBFSU5BX0lURVJBVE9SX0ZP
UkVBQ0goaXQsIGNlbGwpIHsKLSAgICAgICAgdW5zaWduZWQgbG9uZyByb3csIGNvbDsKLSAgICAg
ICAgZWluYV9tYXRyaXhzcGFyc2VfY2VsbF9wb3NpdGlvbl9nZXQoY2VsbCwgJnJvdywgJmNvbCk7
CisgICAgRUlOQV9JVEVSQVRPUl9GT1JFQUNIKGl0ZXJhdG9yLCBjZWxsKSB7CisgICAgICAgIHVu
c2lnbmVkIGxvbmcgcm93LCBjb2x1bW47CisgICAgICAgIGVpbmFfbWF0cml4c3BhcnNlX2NlbGxf
cG9zaXRpb25fZ2V0KGNlbGwsICZyb3csICZjb2x1bW4pOwogCiAgICAgICAgIEV3a19UaWxlKiB0
aWxlID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGUqPihlaW5hX21hdHJpeHNwYXJzZV9jZWxsX2RhdGFf
Z2V0KGNlbGwpKTsKICAgICAgICAgaWYgKCF0aWxlKSB7CkBAIC01ODQsMjIgKzU4NCwyMiBAQCB2
b2lkIGV3a190aWxlX21hdHJpeF9kYmcoY29uc3QgRXdrX1RpbGVfTWF0cml4KiB0aWxlTWF0cml4
KQogICAgICAgICAgICAgICAgIGxhc3RfZW1wdHkgPSBFSU5BX1RSVUU7CiAgICAgICAgICAgICAg
ICAgcHJpbnRmKCJFbXB0eToiKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHByaW50Zigi
IFslbHUsJWx1XSIsIGNvbCwgcm93KTsKKyAgICAgICAgICAgIHByaW50ZigiIFslbHUsJWx1XSIs
IGNvbHVtbiwgcm93KTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmIChsYXN0X2Vt
cHR5KSB7CiAgICAgICAgICAgICAgICAgbGFzdF9lbXB0eSA9IEVJTkFfRkFMU0U7CiAgICAgICAg
ICAgICAgICAgcHJpbnRmKCJcbiIpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgcHJpbnRm
KCIlM2x1LCUzbHUgJTEwcDoiLCBjb2wsIHJvdywgdGlsZSk7CisgICAgICAgICAgICBwcmludGYo
IiUzbHUsJTNsdSAlMTBwOiIsIGNvbHVtbiwgcm93LCB0aWxlKTsKICAgICAgICAgICAgIHByaW50
ZigiIFslM2x1LCUzbHUgKyAlZHglZCBAICUwLjNmXSVjIiwgdGlsZS0+Y29sLCB0aWxlLT5yb3cs
IHRpbGUtPndpZHRoLCB0aWxlLT5oZWlnaHQsIHRpbGUtPnpvb20sIHRpbGUtPnZpc2libGUgPyAn
KicgOiAnICcpOwogICAgICAgICAgICAgcHJpbnRmKCJcbiIpOwogICAgICAgICB9CiAgICAgfQog
ICAgIGlmIChsYXN0X2VtcHR5KQogICAgICAgICBwcmludGYoIlxuIik7Ci0gICAgZWluYV9pdGVy
YXRvcl9mcmVlKGl0KTsKKyAgICBlaW5hX2l0ZXJhdG9yX2ZyZWUoaXRlcmF0b3IpOwogCi0gICAg
ZXdrX3RpbGVfdW51c2VkX2NhY2hlX2RiZyh0aWxlTWF0cml4LT50dWMpOworICAgIGV3a190aWxl
X3VudXNlZF9jYWNoZV9kYmcodGlsZU1hdHJpeC0+dGlsaWVVbnVzZWRDYWNoZSk7CiB9CiAKIC8q
KgpAQCAtNjE1LDcgKzYxNSw3IEBAIHZvaWQgZXdrX3RpbGVfbWF0cml4X2ZyZWV6ZShFd2tfVGls
ZV9NYXRyaXgqIHRpbGVNYXRyaXgpCiB7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4o
dGlsZU1hdHJpeCk7CiAgICAgaWYgKCF0aWxlTWF0cml4LT5mcm96ZW4pCi0gICAgICAgIGV3a190
aWxlX3VudXNlZF9jYWNoZV9mcmVlemUodGlsZU1hdHJpeC0+dHVjKTsKKyAgICAgICAgZXdrX3Rp
bGVfdW51c2VkX2NhY2hlX2ZyZWV6ZSh0aWxlTWF0cml4LT50aWxpZVVudXNlZENhY2hlKTsKICAg
ICB0aWxlTWF0cml4LT5mcm96ZW4rKzsKIH0KIApAQCAtNjM1LDUgKzYzNSw1IEBAIHZvaWQgZXdr
X3RpbGVfbWF0cml4X3RoYXcoRXdrX1RpbGVfTWF0cml4KiB0aWxlTWF0cml4KQogCiAgICAgdGls
ZU1hdHJpeC0+ZnJvemVuLS07CiAgICAgaWYgKCF0aWxlTWF0cml4LT5mcm96ZW4pCi0gICAgICAg
IGV3a190aWxlX3VudXNlZF9jYWNoZV90aGF3KHRpbGVNYXRyaXgtPnR1Yyk7CisgICAgICAgIGV3
a190aWxlX3VudXNlZF9jYWNoZV90aGF3KHRpbGVNYXRyaXgtPnRpbGllVW51c2VkQ2FjaGUpOwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a190aWxlZF9tb2RlbC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX21vZGVsLmNwcAppbmRleCAyMDliMGMz
OWYxNjc4ZWFiMTM4MjliNjU4YTVjMzdiOWEwNDBhZTNlLi5kZDVmMGQ1YTgwY2E1NDM0NDIwNDJk
ZGQ5YTc2YWM2M2MwYTI0NzUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdr
X3RpbGVkX21vZGVsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX21v
ZGVsLmNwcApAQCAtMTQ5LDU5ICsxNDksNTkgQEAgdm9pZCBld2tfdGlsZV9hY2NvdW50aW5nX2Ri
ZygpCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVfcGFpbnRfcmdiODg4KEV3a19UaWxl
KiB0aWxlLCB1aW50OF90IHJlZCwgdWludDhfdCBncmVlbiwgdWludDhfdCBibHVlKQogewotICAg
IHVpbnQzMl90IGMxID0gMHhmZjAwMDAwMCB8ICgodWludDMyX3QpcmVkIDw8IDE2KSB8ICgodWlu
dDMyX3QpZ3JlZW4gPDwgOCkgfCBibHVlOwotICAgIHVpbnQzMl90IGMyID0gKCh1aW50NjRfdClj
MSA8PCAzMikgfCBjMTsKKyAgICB1aW50MzJfdCBjb2xvcjEgPSAweGZmMDAwMDAwIHwgKCh1aW50
MzJfdClyZWQgPDwgMTYpIHwgKCh1aW50MzJfdClncmVlbiA8PCA4KSB8IGJsdWU7CisgICAgdWlu
dDMyX3QgY29sb3IyID0gKCh1aW50NjRfdCljb2xvcjEgPDwgMzIpIHwgY29sb3IxOwogCiAgICAg
dWludDY0X3QqIGRzdDY0ID0gKHVpbnQ2NF90Kil0aWxlLT5waXhlbHM7CiAgICAgdWludDY0X3Qq
IGRzdDY0X2VuZCA9IGRzdDY0ICsgKCh0aWxlLT5ieXRlcyAvIDgpICYgfjcpOwogICAgIGZvciAo
OyBkc3Q2NCA8IGRzdDY0X2VuZDsgZHN0NjQgKz0gOCkgewogICAgICAgICAvKiBUT0RPOiBBUk0g
YWRkIHBsZCBvciBORU9OIGluc3RydWN0aW9ucyAqLwotICAgICAgICBkc3Q2NFswXSA9IGMyOwot
ICAgICAgICBkc3Q2NFsxXSA9IGMyOwotICAgICAgICBkc3Q2NFsyXSA9IGMyOwotICAgICAgICBk
c3Q2NFszXSA9IGMyOwotICAgICAgICBkc3Q2NFs0XSA9IGMyOwotICAgICAgICBkc3Q2NFs1XSA9
IGMyOwotICAgICAgICBkc3Q2NFs2XSA9IGMyOwotICAgICAgICBkc3Q2NFs3XSA9IGMyOworICAg
ICAgICBkc3Q2NFswXSA9IGNvbG9yMjsKKyAgICAgICAgZHN0NjRbMV0gPSBjb2xvcjI7CisgICAg
ICAgIGRzdDY0WzJdID0gY29sb3IyOworICAgICAgICBkc3Q2NFszXSA9IGNvbG9yMjsKKyAgICAg
ICAgZHN0NjRbNF0gPSBjb2xvcjI7CisgICAgICAgIGRzdDY0WzVdID0gY29sb3IyOworICAgICAg
ICBkc3Q2NFs2XSA9IGNvbG9yMjsKKyAgICAgICAgZHN0NjRbN10gPSBjb2xvcjI7CiAgICAgfQog
CiAgICAgdWludDMyX3QqIGRzdDMyID0gKHVpbnQzMl90Kilkc3Q2NF9lbmQ7CiAgICAgdWludDMy
X3QqIGRzdDMyX2VuZCA9ICh1aW50MzJfdCopKHRpbGUtPnBpeGVscyArIHRpbGUtPmJ5dGVzKTsK
ICAgICBmb3IgKDsgZHN0MzIgPCBkc3QzMl9lbmQ7IGRzdDMyKyspCi0gICAgICAgICpkc3QzMiA9
IGMxOworICAgICAgICAqZHN0MzIgPSBjb2xvcjE7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBf
ZXdrX3RpbGVfcGFpbnRfcmdiNTY1KEV3a19UaWxlKiB0aWxlLCB1aW50OF90IHJlZCwgdWludDhf
dCBncmVlbiwgdWludDhfdCBibHVlKQogewotICAgIHVpbnQxNl90KiBkc3QxNiwgKiBkc3QxNl9l
bmQsIGMxOwotICAgIHVpbnQ2NF90KiBkc3Q2NCwgKiBkc3Q2NF9lbmQsIGMyOworICAgIHVpbnQx
Nl90KiBkc3QxNiwgKiBkc3QxNl9lbmQsIGNvbG9yMTsKKyAgICB1aW50NjRfdCogZHN0NjQsICog
ZHN0NjRfZW5kLCBjb2xvcjI7CiAKLSAgICBjMSA9ICgoKChyZWQgPj4gMykgJiAweDFmKSA8PCAx
MSkgfAorICAgIGNvbG9yMSA9ICgoKChyZWQgPj4gMykgJiAweDFmKSA8PCAxMSkgfAogICAgICAg
ICAgICgoKGdyZWVuID4+IDIpICYgMHgzZikgPDwgNSkgfAogICAgICAgICAgICgoYmx1ZSA+PiAz
KSAmIDB4MWYpKTsKIAotICAgIGMyID0gKCgodWludDY0X3QpYzEgPDwgNDgpIHwgKCh1aW50NjRf
dCljMSA8PCAzMikgfAotICAgICAgICAgICgodWludDY0X3QpYzEgPDwgMTYpIHwgYzEpOworICAg
IGNvbG9yMiA9ICgoKHVpbnQ2NF90KWNvbG9yMSA8PCA0OCkgfCAoKHVpbnQ2NF90KWNvbG9yMSA8
PCAzMikgfAorICAgICAgICAgICgodWludDY0X3QpY29sb3IxIDw8IDE2KSB8IGNvbG9yMSk7CiAK
ICAgICBkc3Q2NCA9ICh1aW50NjRfdCopdGlsZS0+cGl4ZWxzOwogICAgIGRzdDY0X2VuZCA9IGRz
dDY0ICsgKCh0aWxlLT5ieXRlcyAvIDgpICYgfjcpOwogICAgIGZvciAoOyBkc3Q2NCA8IGRzdDY0
X2VuZDsgZHN0NjQgKz0gOCkgewogICAgICAgICAvKiBUT0RPOiBBUk0gYWRkIHBsZCBvciBORU9O
IGluc3RydWN0aW9ucyAqLwotICAgICAgICBkc3Q2NFswXSA9IGMyOwotICAgICAgICBkc3Q2NFsx
XSA9IGMyOwotICAgICAgICBkc3Q2NFsyXSA9IGMyOwotICAgICAgICBkc3Q2NFszXSA9IGMyOwot
ICAgICAgICBkc3Q2NFs0XSA9IGMyOwotICAgICAgICBkc3Q2NFs1XSA9IGMyOwotICAgICAgICBk
c3Q2NFs2XSA9IGMyOwotICAgICAgICBkc3Q2NFs3XSA9IGMyOworICAgICAgICBkc3Q2NFswXSA9
IGNvbG9yMjsKKyAgICAgICAgZHN0NjRbMV0gPSBjb2xvcjI7CisgICAgICAgIGRzdDY0WzJdID0g
Y29sb3IyOworICAgICAgICBkc3Q2NFszXSA9IGNvbG9yMjsKKyAgICAgICAgZHN0NjRbNF0gPSBj
b2xvcjI7CisgICAgICAgIGRzdDY0WzVdID0gY29sb3IyOworICAgICAgICBkc3Q2NFs2XSA9IGNv
bG9yMjsKKyAgICAgICAgZHN0NjRbN10gPSBjb2xvcjI7CiAgICAgfQogCiAgICAgZHN0MTYgPSAo
dWludDE2X3QqKWRzdDE2X2VuZDsKICAgICBkc3QxNl9lbmQgPSAodWludDE2X3QqKSh0aWxlLT5w
aXhlbHMgKyB0aWxlLT5ieXRlcyk7CiAgICAgZm9yICg7IGRzdDE2IDwgZHN0MTZfZW5kOyBkc3Qx
NisrKQotICAgICAgICAqZHN0MTYgPSBjMTsKKyAgICAgICAgKmRzdDE2ID0gY29sb3IxOwogfQog
CiBzdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlX3BhaW50KEV3a19UaWxlKiB0aWxlLCB1aW50
OF90IHJlZCwgdWludDhfdCBncmVlbiwgdWludDhfdCBibHVlKQpAQCAtMjMxLDE3ICsyMzEsMTcg
QEAgc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZV9wYWludChFd2tfVGlsZSogdGlsZSwgdWlu
dDhfdCByZWQsIHVpbnQ4X3QgZ3JlZW4sIHUKICAqLwogRXdrX1RpbGUqIGV3a190aWxlX25ldyhF
dmFzKiBldmFzLCBFdmFzX0Nvb3JkIHdpZHRoLCBFdmFzX0Nvb3JkIGhlaWdodCwgZmxvYXQgem9v
bSwgRXZhc19Db2xvcnNwYWNlIGNvbG9yU3BhY2UpCiB7Ci0gICAgRXZhc19Db29yZCogZWM7Ci0g
ICAgRXZhc19Db2xvcnNwYWNlKiBlY3M7Ci0gICAgZmxvYXQqIGY7Ci0gICAgc2l6ZV90KiBzOwor
ICAgIEV2YXNfQ29vcmQqIGV2YXNDb29yZDsKKyAgICBFdmFzX0NvbG9yc3BhY2UqIGV2YXNDb2xv
clNwYWNlOworICAgIGZsb2F0KiB0aWxlWm9vbTsKKyAgICBzaXplX3QqIHRpbGVTaXplOwogICAg
IEV3a19UaWxlKiB0aWxlOwogICAgIHVuc2lnbmVkIGludCBhcmVhOwogICAgIHNpemVfdCBieXRl
czsKICAgICBjYWlyb19mb3JtYXRfdCBmb3JtYXQ7CiAgICAgY2Fpcm9fc3RhdHVzX3Qgc3RhdHVz
OwogICAgIGludCBzdHJpZGU7Ci0gICAgRWNvcmVfRXZhcyogZWU7CisgICAgRWNvcmVfRXZhcyog
ZWNvcmVFdmFzOwogICAgIGNvbnN0IGNoYXIqIGVuZ2luZTsKIAogICAgIGFyZWEgPSB3aWR0aCAq
IGhlaWdodDsKQEAgLTI2Nyw4ICsyNjcsOCBAQCBFd2tfVGlsZSogZXdrX3RpbGVfbmV3KEV2YXMq
IGV2YXMsIEV2YXNfQ29vcmQgd2lkdGgsIEV2YXNfQ29vcmQgaGVpZ2h0LCBmbG9hdCB6bwogCiAg
ICAgdGlsZS0+aW1hZ2UgPSBldmFzX29iamVjdF9pbWFnZV9hZGQoZXZhcyk7CiAKLSAgICBlZSA9
IGVjb3JlX2V2YXNfZWNvcmVfZXZhc19nZXQoZXZhcyk7Ci0gICAgZW5naW5lID0gZWNvcmVfZXZh
c19lbmdpbmVfbmFtZV9nZXQoZWUpOworICAgIGVjb3JlRXZhcyA9IGVjb3JlX2V2YXNfZWNvcmVf
ZXZhc19nZXQoZXZhcyk7CisgICAgZW5naW5lID0gZWNvcmVfZXZhc19lbmdpbmVfbmFtZV9nZXQo
ZWNvcmVFdmFzKTsKICAgICBpZiAoZW5naW5lICYmICFzdHJjbXAoZW5naW5lLCAib3BlbmdsX3gx
MSIpKQogICAgICAgICBldmFzX29iamVjdF9pbWFnZV9jb250ZW50X2hpbnRfc2V0KHRpbGUtPmlt
YWdlLCBFVkFTX0lNQUdFX0NPTlRFTlRfSElOVF9EWU5BTUlDKTsKIApAQCAtMjc5LDIwICsyNzks
MjAgQEAgRXdrX1RpbGUqIGV3a190aWxlX25ldyhFdmFzKiBldmFzLCBFdmFzX0Nvb3JkIHdpZHRo
LCBFdmFzX0Nvb3JkIGhlaWdodCwgZmxvYXQgem8KICAgICB0aWxlLT5zdGF0cy5hcmVhID0gYXJl
YTsKIAogICAgIC8qIHVnbHksIGJ1dCBsZXQncyBhdm9pZCBhdCBhbGwgY29zdHMgaGF2aW5nIHVz
ZXJzIHRvIG1vZGlmeSB0aG9zZSAqLwotICAgIGVjID0gKEV2YXNfQ29vcmQqKSZ0aWxlLT53aWR0
aDsKLSAgICAqZWMgPSB3aWR0aDsKKyAgICBldmFzQ29vcmQgPSAoRXZhc19Db29yZCopJnRpbGUt
PndpZHRoOworICAgICpldmFzQ29vcmQgPSB3aWR0aDsKIAotICAgIGVjID0gKEV2YXNfQ29vcmQq
KSZ0aWxlLT5oZWlnaHQ7Ci0gICAgKmVjID0gaGVpZ2h0OworICAgIGV2YXNDb29yZCA9IChFdmFz
X0Nvb3JkKikmdGlsZS0+aGVpZ2h0OworICAgICpldmFzQ29vcmQgPSBoZWlnaHQ7CiAKLSAgICBl
Y3MgPSAoRXZhc19Db2xvcnNwYWNlKikmdGlsZS0+Y3NwYWNlOwotICAgICplY3MgPSBjb2xvclNw
YWNlOworICAgIGV2YXNDb2xvclNwYWNlID0gKEV2YXNfQ29sb3JzcGFjZSopJnRpbGUtPmNzcGFj
ZTsKKyAgICAqZXZhc0NvbG9yU3BhY2UgPSBjb2xvclNwYWNlOwogCi0gICAgZiA9IChmbG9hdCop
JnRpbGUtPnpvb207Ci0gICAgKmYgPSB6b29tOworICAgIHRpbGVab29tID0gKGZsb2F0KikmdGls
ZS0+em9vbTsKKyAgICAqdGlsZVpvb20gPSB6b29tOwogCi0gICAgcyA9IChzaXplX3QqKSZ0aWxl
LT5ieXRlczsKLSAgICAqcyA9IGJ5dGVzOworICAgIHRpbGVTaXplID0gKHNpemVfdCopJnRpbGUt
PmJ5dGVzOworICAgICp0aWxlU2l6ZSA9IGJ5dGVzOwogCiAgICAgZXZhc19vYmplY3RfaW1hZ2Vf
c2l6ZV9zZXQodGlsZS0+aW1hZ2UsIHRpbGUtPndpZHRoLCB0aWxlLT5oZWlnaHQpOwogICAgIGV2
YXNfb2JqZWN0X2ltYWdlX2NvbG9yc3BhY2Vfc2V0KHRpbGUtPmltYWdlLCB0aWxlLT5jc3BhY2Up
OwpAQCAtNDgwLDcgKzQ4MCw3IEBAIHN0cnVjdCBfRXdrX1RpbGVfVW51c2VkX0NhY2hlX0VudHJ5
IHsKICAgICBFd2tfVGlsZSogdGlsZTsKICAgICBpbnQgd2VpZ2h0OwogICAgIHN0cnVjdCB7Ci0g
ICAgICAgIHZvaWQgKCpjYikodm9pZCogZGF0YSwgRXdrX1RpbGUqIHRpbGUpOworICAgICAgICB2
b2lkICgqY2FsbGJhY2spKHZvaWQqIGRhdGEsIEV3a19UaWxlKiB0aWxlKTsKICAgICAgICAgdm9p
ZCogZGF0YTsKICAgICB9IHRpbGVfZnJlZTsKIH07CkBAIC00OTYsNyArNDk2LDcgQEAgc3RydWN0
IF9Fd2tfVGlsZV9VbnVzZWRfQ2FjaGUgewogICAgICAgICBzaXplX3QgdXNlZDsgLyoqPCBpbiBi
eXRlcywgbWF5YmUgbW9yZSB0aGFuIG1heC4gKi8KICAgICB9IG1lbW9yeTsKICAgICBzdHJ1Y3Qg
ewotICAgICAgICBFdmFzX0Nvb3JkIHgsIHksIHcsIGg7CisgICAgICAgIEV2YXNfQ29vcmQgeCwg
eSwgd2lkdGgsIGhlaWdodDsKICAgICAgICAgZmxvYXQgem9vbTsKICAgICAgICAgRWluYV9Cb29s
IGxvY2tlZDsKICAgICB9IGxvY2tlZDsKQEAgLTU0MCw4ICs1NDAsOCBAQCB2b2lkIGV3a190aWxl
X3VudXNlZF9jYWNoZV9sb2NrX2FyZWEoRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0aWxlVW51c2Vk
Q2FjaGUsIEV2YQogICAgIHRpbGVVbnVzZWRDYWNoZS0+bG9ja2VkLmxvY2tlZCA9IEVJTkFfVFJV
RTsKICAgICB0aWxlVW51c2VkQ2FjaGUtPmxvY2tlZC54ID0geDsKICAgICB0aWxlVW51c2VkQ2Fj
aGUtPmxvY2tlZC55ID0geTsKLSAgICB0aWxlVW51c2VkQ2FjaGUtPmxvY2tlZC53ID0gd2lkdGg7
Ci0gICAgdGlsZVVudXNlZENhY2hlLT5sb2NrZWQuaCA9IGhlaWdodDsKKyAgICB0aWxlVW51c2Vk
Q2FjaGUtPmxvY2tlZC53aWR0aCA9IHdpZHRoOworICAgIHRpbGVVbnVzZWRDYWNoZS0+bG9ja2Vk
LmhlaWdodCA9IGhlaWdodDsKICAgICB0aWxlVW51c2VkQ2FjaGUtPmxvY2tlZC56b29tID0gem9v
bTsKIH0KIApAQCAtNTk0LDcgKzU5NCw3IEBAIHZvaWQgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2Ns
ZWFyKEV3a19UaWxlX1VudXNlZF9DYWNoZSogdGlsZVVudXNlZENhY2hlKQogICAgIHZvaWQqIGl0
ZW07CiAgICAgRUlOQV9MSVNUX0ZSRUUodGlsZVVudXNlZENhY2hlLT5lbnRyaWVzLmxpc3QsIGl0
ZW0pIHsKICAgICAgICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlX0VudHJ5KiBpdHIgPSBzdGF0aWNf
Y2FzdDxFd2tfVGlsZV9VbnVzZWRfQ2FjaGVfRW50cnkqPihpdGVtKTsKLSAgICAgICAgaXRyLT50
aWxlX2ZyZWUuY2IoaXRyLT50aWxlX2ZyZWUuZGF0YSwgaXRyLT50aWxlKTsKKyAgICAgICAgaXRy
LT50aWxlX2ZyZWUuY2FsbGJhY2soaXRyLT50aWxlX2ZyZWUuZGF0YSwgaXRyLT50aWxlKTsKICAg
ICAgICAgZnJlZShpdHIpOwogICAgIH0KIApAQCAtNjUwLDcgKzY1MCw3IEBAIHNpemVfdCBld2tf
dGlsZV91bnVzZWRfY2FjaGVfdXNlZF9nZXQoY29uc3QgRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0
aWxlVW51c2VkQ2FjCiAKIHNpemVfdCBld2tfdGlsZV91bnVzZWRfY2FjaGVfZmx1c2goRXdrX1Rp
bGVfVW51c2VkX0NhY2hlKiB0aWxlVW51c2VkQ2FjaGUsIHNpemVfdCBieXRlcykKIHsKLSAgICBF
aW5hX0xpc3QqIGwsICogbF9uZXh0OworICAgIEVpbmFfTGlzdCogbGlzdCwgKiBsaXN0TmV4dDsK
ICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodGlsZVVudXNlZENhY2hlLCAwKTsK
ICAgICBzaXplX3QgZG9uZTsKICAgICB1bnNpZ25lZCBpbnQgY291bnQ7CkBAIC02NjgsNyArNjY4
LDcgQEAgc2l6ZV90IGV3a190aWxlX3VudXNlZF9jYWNoZV9mbHVzaChFd2tfVGlsZV9VbnVzZWRf
Q2FjaGUqIHRpbGVVbnVzZWRDYWNoZSwgc2l6ZV8KICAgICB2b2lkKiBpdGVtOwogICAgIGRvbmUg
PSAwOwogICAgIGNvdW50ID0gMDsKLSAgICBFSU5BX0xJU1RfRk9SRUFDSF9TQUZFKHRpbGVVbnVz
ZWRDYWNoZS0+ZW50cmllcy5saXN0LCBsLCBsX25leHQsIGl0ZW0pIHsKKyAgICBFSU5BX0xJU1Rf
Rk9SRUFDSF9TQUZFKHRpbGVVbnVzZWRDYWNoZS0+ZW50cmllcy5saXN0LCBsaXN0LCBsaXN0TmV4
dCwgaXRlbSkgewogICAgICAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGVfRW50cnkqIGl0ciA9IHN0
YXRpY19jYXN0PEV3a19UaWxlX1VudXNlZF9DYWNoZV9FbnRyeSo+KGl0ZW0pOwogICAgICAgICBF
d2tfVGlsZSogdGlsZSA9IGl0ci0+dGlsZTsKICAgICAgICAgaWYgKGRvbmUgPiBieXRlcykKQEAg
LTY3NiwxNCArNjc2LDE0IEBAIHNpemVfdCBld2tfdGlsZV91bnVzZWRfY2FjaGVfZmx1c2goRXdr
X1RpbGVfVW51c2VkX0NhY2hlKiB0aWxlVW51c2VkQ2FjaGUsIHNpemVfCiAgICAgICAgIGlmICh0
aWxlVW51c2VkQ2FjaGUtPmxvY2tlZC5sb2NrZWQKICAgICAgICAgICAgICYmIHRpbGUtPnggKyB0
aWxlLT53aWR0aCA+IHRpbGVVbnVzZWRDYWNoZS0+bG9ja2VkLngKICAgICAgICAgICAgICYmIHRp
bGUtPnkgKyB0aWxlLT5oZWlnaHQgPiB0aWxlVW51c2VkQ2FjaGUtPmxvY2tlZC55Ci0gICAgICAg
ICAgICAmJiB0aWxlLT54IDwgdGlsZVVudXNlZENhY2hlLT5sb2NrZWQueCArIHRpbGVVbnVzZWRD
YWNoZS0+bG9ja2VkLncKLSAgICAgICAgICAgICYmIHRpbGUtPnkgPCB0aWxlVW51c2VkQ2FjaGUt
PmxvY2tlZC55ICsgdGlsZVVudXNlZENhY2hlLT5sb2NrZWQuaAorICAgICAgICAgICAgJiYgdGls
ZS0+eCA8IHRpbGVVbnVzZWRDYWNoZS0+bG9ja2VkLnggKyB0aWxlVW51c2VkQ2FjaGUtPmxvY2tl
ZC53aWR0aAorICAgICAgICAgICAgJiYgdGlsZS0+eSA8IHRpbGVVbnVzZWRDYWNoZS0+bG9ja2Vk
LnkgKyB0aWxlVW51c2VkQ2FjaGUtPmxvY2tlZC5oZWlnaHQKICAgICAgICAgICAgICYmIHRpbGUt
Pnpvb20gPT0gdGlsZVVudXNlZENhY2hlLT5sb2NrZWQuem9vbSkgewogICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgIH0KICAgICAgICAgZG9uZSArPSBzaXplb2YoRXdrX1RpbGUpICsgaXRy
LT50aWxlLT5ieXRlczsKLSAgICAgICAgaXRyLT50aWxlX2ZyZWUuY2IoaXRyLT50aWxlX2ZyZWUu
ZGF0YSwgaXRyLT50aWxlKTsKLSAgICAgICAgdGlsZVVudXNlZENhY2hlLT5lbnRyaWVzLmxpc3Qg
PSBlaW5hX2xpc3RfcmVtb3ZlX2xpc3QodGlsZVVudXNlZENhY2hlLT5lbnRyaWVzLmxpc3QsIGwp
OworICAgICAgICBpdHItPnRpbGVfZnJlZS5jYWxsYmFjayhpdHItPnRpbGVfZnJlZS5kYXRhLCBp
dHItPnRpbGUpOworICAgICAgICB0aWxlVW51c2VkQ2FjaGUtPmVudHJpZXMubGlzdCA9IGVpbmFf
bGlzdF9yZW1vdmVfbGlzdCh0aWxlVW51c2VkQ2FjaGUtPmVudHJpZXMubGlzdCwgbGlzdCk7CiAg
ICAgICAgIGZyZWUoaXRyKTsKICAgICAgICAgY291bnQrKzsKICAgICB9CkBAIC03NDMsMzEgKzc0
MywzMSBAQCB2b2lkIGV3a190aWxlX3VudXNlZF9jYWNoZV90aGF3KEV3a19UaWxlX1VudXNlZF9D
YWNoZSogdGlsZVVudXNlZENhY2hlKQogICogZXdrX3RpbGVfdW51c2VkX2NhY2hlX3RpbGVfcHV0
KCkuCiAgKgogICogQHBhcmFtIHRpbGVVbnVzZWRDYWNoZSBjYWNoZSBvZiB1bnVzZWQgdGlsZXMK
LSAqIEBwYXJhbSB0IHRoZSB0aWxlIHRvIGJlIHJlbW92ZWQgZnJvbSBFd2tfVGlsZV9VbnVzZWRf
Q2FjaGUuCisgKiBAcGFyYW0gdGlsZSB0aGUgdGlsZSB0byBiZSByZW1vdmVkIGZyb20gRXdrX1Rp
bGVfVW51c2VkX0NhY2hlLgogICoKICAqIEByZXR1cm4gI0VJTkFfVFJVRSBvbiBzdWNjZXNzLCAj
RUlOQV9GQUxTRSBvdGhlcndpc2UuCiAgKi8KIEVpbmFfQm9vbCBld2tfdGlsZV91bnVzZWRfY2Fj
aGVfdGlsZV9nZXQoRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0aWxlVW51c2VkQ2FjaGUsIEV3a19U
aWxlKiB0aWxlKQogewotICAgIEVpbmFfTGlzdCogZSwgKiBsOworICAgIEVpbmFfTGlzdCogZm91
bmRFbnRyeSwgKml0ZXJhdGVFbnRyeTsKIAogICAgIHZvaWQqIGl0ZW07Ci0gICAgZSA9IDA7Ci0g
ICAgRUlOQV9MSVNUX0ZPUkVBQ0godGlsZVVudXNlZENhY2hlLT5lbnRyaWVzLmxpc3QsIGwsIGl0
ZW0pIHsKKyAgICBmb3VuZEVudHJ5ID0gMDsKKyAgICBFSU5BX0xJU1RfRk9SRUFDSCh0aWxlVW51
c2VkQ2FjaGUtPmVudHJpZXMubGlzdCwgaXRlcmF0ZUVudHJ5LCBpdGVtKSB7CiAgICAgICAgIEV3
a19UaWxlX1VudXNlZF9DYWNoZV9FbnRyeSogZW50cnkgPSBzdGF0aWNfY2FzdDxFd2tfVGlsZV9V
bnVzZWRfQ2FjaGVfRW50cnkqPihpdGVtKTsKICAgICAgICAgaWYgKGVudHJ5LT50aWxlID09IHRp
bGUpIHsKLSAgICAgICAgICAgIGUgPSBsOworICAgICAgICAgICAgZm91bmRFbnRyeSA9IGl0ZXJh
dGVFbnRyeTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQotICAgIGlmICgh
ZSkgeworICAgIGlmICghZm91bmRFbnRyeSkgewogICAgICAgICBFUlIoInRpbGUgJXAgbm90IGZv
dW5kIGluIGNhY2hlICVwIiwgdGlsZSwgdGlsZVVudXNlZENhY2hlKTsKICAgICAgICAgcmV0dXJu
IEVJTkFfRkFMU0U7CiAgICAgfQogCiAgICAgdGlsZVVudXNlZENhY2hlLT5lbnRyaWVzLmNvdW50
LS07CiAgICAgdGlsZVVudXNlZENhY2hlLT5tZW1vcnkudXNlZCAtPSBzaXplb2YoRXdrX1RpbGUp
ICsgdGlsZS0+Ynl0ZXM7Ci0gICAgdGlsZVVudXNlZENhY2hlLT5lbnRyaWVzLmxpc3QgPSBlaW5h
X2xpc3RfcmVtb3ZlX2xpc3QodGlsZVVudXNlZENhY2hlLT5lbnRyaWVzLmxpc3QsIGUpOworICAg
IHRpbGVVbnVzZWRDYWNoZS0+ZW50cmllcy5saXN0ID0gZWluYV9saXN0X3JlbW92ZV9saXN0KHRp
bGVVbnVzZWRDYWNoZS0+ZW50cmllcy5saXN0LCBmb3VuZEVudHJ5KTsKICAgICBmcmVlKGl0ZW0p
OwogCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKQEAgLTc5NSwyOSArNzk1LDI5IEBAIEVpbmFfQm9v
bCBld2tfdGlsZV91bnVzZWRfY2FjaGVfdGlsZV9nZXQoRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0
aWxlVW51c2VkQ2FjaGUsCiAgKgogICogQHNlZSBld2tfdGlsZV91bnVzZWRfY2FjaGVfYXV0b19m
bHVzaCgpCiAgKi8KLUVpbmFfQm9vbCBld2tfdGlsZV91bnVzZWRfY2FjaGVfdGlsZV9wdXQoRXdr
X1RpbGVfVW51c2VkX0NhY2hlKiB0aWxlVW51c2VkQ2FjaGUsIEV3a19UaWxlKiB0aWxlLCB2b2lk
ICgqIHRpbGVfZnJlZV9jYikodm9pZCogZGF0YSwgRXdrX1RpbGUqIHRpbGUpLCBjb25zdCB2b2lk
KiBkYXRhKQorRWluYV9Cb29sIGV3a190aWxlX3VudXNlZF9jYWNoZV90aWxlX3B1dChFd2tfVGls
ZV9VbnVzZWRfQ2FjaGUqIHRpbGVVbnVzZWRDYWNoZSwgRXdrX1RpbGUqIHRpbGUsIHZvaWQgKCog
dGlsZUZyZWVDYikodm9pZCogZGF0YSwgRXdrX1RpbGUqIHRpbGUpLCBjb25zdCB2b2lkKiBkYXRh
KQogewotICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZV9FbnRyeSogdWNlOworICAgIEV3a19UaWxl
X1VudXNlZF9DYWNoZV9FbnRyeSogdW51c2VkQ2FjaGVFbnRyeTsKIAogICAgIGlmICh0aWxlLT52
aXNpYmxlKSB7CiAgICAgICAgIEVSUigidGlsZT0lcCBpcyBub3QgdW51c2VkICh2aXNpYmxlPSVk
KSIsIHRpbGUsIHRpbGUtPnZpc2libGUpOwogICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKICAg
ICB9CiAKLSAgICB1Y2UgPSBzdGF0aWNfY2FzdDxFd2tfVGlsZV9VbnVzZWRfQ2FjaGVfRW50cnkq
PihtYWxsb2Moc2l6ZW9mKEV3a19UaWxlX1VudXNlZF9DYWNoZV9FbnRyeSkpKTsKLSAgICBpZiAo
IXVjZSkKKyAgICB1bnVzZWRDYWNoZUVudHJ5ID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGVfVW51c2Vk
X0NhY2hlX0VudHJ5Kj4obWFsbG9jKHNpemVvZihFd2tfVGlsZV9VbnVzZWRfQ2FjaGVfRW50cnkp
KSk7CisgICAgaWYgKCF1bnVzZWRDYWNoZUVudHJ5KQogICAgICAgICByZXR1cm4gRUlOQV9GQUxT
RTsKIAotICAgIHRpbGVVbnVzZWRDYWNoZS0+ZW50cmllcy5saXN0ID0gZWluYV9saXN0X2FwcGVu
ZCh0aWxlVW51c2VkQ2FjaGUtPmVudHJpZXMubGlzdCwgdWNlKTsKKyAgICB0aWxlVW51c2VkQ2Fj
aGUtPmVudHJpZXMubGlzdCA9IGVpbmFfbGlzdF9hcHBlbmQodGlsZVVudXNlZENhY2hlLT5lbnRy
aWVzLmxpc3QsIHVudXNlZENhY2hlRW50cnkpOwogICAgIGlmIChlaW5hX2Vycm9yX2dldCgpKSB7
CiAgICAgICAgIEVSUigiTGlzdCBhbGxvY2F0aW9uIGZhaWxlZCIpOwogICAgICAgICByZXR1cm4g
RUlOQV9GQUxTRTsKICAgICB9CiAKLSAgICB1Y2UtPnRpbGUgPSB0aWxlOwotICAgIHVjZS0+d2Vp
Z2h0ID0gMDsgLyogY2FsY3VsYXRlZCBqdXN0IGJlZm9yZSBzb3J0ICovCi0gICAgdWNlLT50aWxl
X2ZyZWUuY2IgPSB0aWxlX2ZyZWVfY2I7Ci0gICAgdWNlLT50aWxlX2ZyZWUuZGF0YSA9ICh2b2lk
KilkYXRhOworICAgIHVudXNlZENhY2hlRW50cnktPnRpbGUgPSB0aWxlOworICAgIHVudXNlZENh
Y2hlRW50cnktPndlaWdodCA9IDA7IC8qIGNhbGN1bGF0ZWQganVzdCBiZWZvcmUgc29ydCAqLwor
ICAgIHVudXNlZENhY2hlRW50cnktPnRpbGVfZnJlZS5jYWxsYmFjayA9IHRpbGVGcmVlQ2I7Cisg
ICAgdW51c2VkQ2FjaGVFbnRyeS0+dGlsZV9mcmVlLmRhdGEgPSAodm9pZCopZGF0YTsKIAogICAg
IHRpbGVVbnVzZWRDYWNoZS0+ZW50cmllcy5jb3VudCsrOwogICAgIHRpbGVVbnVzZWRDYWNoZS0+
bWVtb3J5LnVzZWQgKz0gc2l6ZW9mKEV3a19UaWxlKSArIHRpbGUtPmJ5dGVzOwpAQCAtODI4LDEz
ICs4MjgsMTMgQEAgRWluYV9Cb29sIGV3a190aWxlX3VudXNlZF9jYWNoZV90aWxlX3B1dChFd2tf
VGlsZV9VbnVzZWRfQ2FjaGUqIHRpbGVVbnVzZWRDYWNoZSwKIHZvaWQgZXdrX3RpbGVfdW51c2Vk
X2NhY2hlX2RiZyhjb25zdCBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHRpbGVVbnVzZWRDYWNoZSkK
IHsKICAgICB2b2lkKiBpdGVtOwotICAgIEVpbmFfTGlzdCogbDsKKyAgICBFaW5hX0xpc3QqIGxp
c3Q7CiAgICAgaW50IGNvdW50ID0gMDsKICAgICBwcmludGYoIkNhY2hlIG9mIHVudXNlZCB0aWxl
czogZW50cmllczogJXp1LyV6dSwgbWVtb3J5OiAlenUvJXp1XG4iLAogICAgICAgICAgICB0aWxl
VW51c2VkQ2FjaGUtPmVudHJpZXMuY291bnQsIHRpbGVVbnVzZWRDYWNoZS0+ZW50cmllcy5hbGxv
Y2F0ZWQsCiAgICAgICAgICAgIHRpbGVVbnVzZWRDYWNoZS0+bWVtb3J5LnVzZWQsIHRpbGVVbnVz
ZWRDYWNoZS0+bWVtb3J5Lm1heCk7CiAKLSAgICBFSU5BX0xJU1RfRk9SRUFDSCh0aWxlVW51c2Vk
Q2FjaGUtPmVudHJpZXMubGlzdCwgbCwgaXRlbSkgeworICAgIEVJTkFfTElTVF9GT1JFQUNIKHRp
bGVVbnVzZWRDYWNoZS0+ZW50cmllcy5saXN0LCBsaXN0LCBpdGVtKSB7CiAgICAgICAgIGNvbnN0
IEV3a19UaWxlKiB0aWxlID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGVfVW51c2VkX0NhY2hlX0VudHJ5
Kj4oaXRlbSktPnRpbGU7CiAgICAgICAgIHByaW50ZigiIFslM2x1LCUzbHUgKyAlZHglZCBAICUw
LjNmXSVjIiwKICAgICAgICAgICAgICAgIHRpbGUtPmNvbCwgdGlsZS0+cm93LCB0aWxlLT53aWR0
aCwgdGlsZS0+aGVpZ2h0LCB0aWxlLT56b29tLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9l
ZmwvZXdrL2V3a192aWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5jcHAK
aW5kZXggZjE5NzNlNDNkZDRlN2FjMGE2YWJmY2EwMWQ1NjdmODBiNDNlZDc1NS4uYjVmMTRjMTA4
MjhhZWRiMjAyMzNlMjFmNGI1ZmExMzNlMGNkOTU3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9lZmwvZXdrL2V3a192aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3Zp
ZXcuY3BwCkBAIC05MCwxNyArOTAsMTcgQEAgc3RhdGljIGNvbnN0IHNpemVfdCBFV0tfVklFV19T
Q1JPTExTX1NJWkVfTUFYX0ZSRUUgPSAzMjsKICAqLwogc3RydWN0IF9Fd2tfVmlld19Qcml2YXRl
X0RhdGEgewogICAgIFdlYkNvcmU6OlBhZ2UqIHBhZ2U7Ci0gICAgV2ViQ29yZTo6U2V0dGluZ3Mq
IHBhZ2Vfc2V0dGluZ3M7Ci0gICAgV2ViQ29yZTo6RnJhbWUqIG1haW5fZnJhbWU7Ci0gICAgV2Vi
Q29yZTo6Vmlld3BvcnRBcmd1bWVudHMgdmlld3BvcnRfYXJndW1lbnRzOworICAgIFdlYkNvcmU6
OlNldHRpbmdzKiBwYWdlU2V0dGluZ3M7CisgICAgV2ViQ29yZTo6RnJhbWUqIG1haW5GcmFtZTsK
KyAgICBXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50cyB2aWV3cG9ydEFyZ3VtZW50czsKICAgICBF
d2tfSGlzdG9yeSogaGlzdG9yeTsKICAgICBzdHJ1Y3QgewogICAgICAgICB2b2lkKiBjb250ZXh0
OwogICAgICAgICBFd2tfVmlld19SZXNvdXJjZV9IYW5kbGVyX0NiIGZ1bmN0aW9uOwotICAgIH0g
Y3VzdG9tX3Jlc291cmNlX2hhbmRsZXI7CisgICAgfSBjdXN0b21SZXNvdXJjZUhhbmRsZXI7CiAg
ICAgc3RydWN0IHsKICAgICAgICAgRXdrX01lbnUgbWVudTsKLSAgICAgICAgV2ViQ29yZTo6UG9w
dXBNZW51Q2xpZW50KiBtZW51X2NsaWVudDsKKyAgICAgICAgV2ViQ29yZTo6UG9wdXBNZW51Q2xp
ZW50KiBtZW51Q2xpZW50OwogICAgIH0gcG9wdXA7CiAgICAgc3RydWN0IHsKICAgICAgICAgRWlu
YV9SZWN0YW5nbGUqIGFycmF5OwpAQCAtMTE0LDUwICsxMTQsNTAgQEAgc3RydWN0IF9Fd2tfVmll
d19Qcml2YXRlX0RhdGEgewogICAgIH0gc2Nyb2xsczsKICAgICB1bnNpZ25lZCBpbnQgaW1oOyAv
Kio8IGlucHV0IG1ldGhvZCBoaW50cyAqLwogICAgIHN0cnVjdCB7Ci0gICAgICAgIEVpbmFfQm9v
bCB2aWV3X2NsZWFyZWQgOiAxOwotICAgICAgICBFaW5hX0Jvb2wgbmVlZF90b3VjaF9ldmVudHMg
OiAxOworICAgICAgICBFaW5hX0Jvb2wgdmlld0NsZWFyZWQgOiAxOworICAgICAgICBFaW5hX0Jv
b2wgbmVlZFRvdWNoRXZlbnRzIDogMTsKICAgICB9IGZsYWdzOwogICAgIHN0cnVjdCB7Ci0gICAg
ICAgIGNvbnN0IGNoYXIqIHVzZXJfYWdlbnQ7Ci0gICAgICAgIGNvbnN0IGNoYXIqIHVzZXJfc3R5
bGVzaGVldDsKLSAgICAgICAgY29uc3QgY2hhciogZW5jb2RpbmdfZGVmYXVsdDsKLSAgICAgICAg
Y29uc3QgY2hhciogZW5jb2RpbmdfY3VzdG9tOworICAgICAgICBjb25zdCBjaGFyKiB1c2VyQWdl
bnQ7CisgICAgICAgIGNvbnN0IGNoYXIqIHVzZXJTdHlsZXNoZWV0OworICAgICAgICBjb25zdCBj
aGFyKiBlbmNvZGluZ0RlZmF1bHQ7CisgICAgICAgIGNvbnN0IGNoYXIqIGVuY29kaW5nQ3VzdG9t
OwogICAgICAgICBjb25zdCBjaGFyKiB0aGVtZTsKLSAgICAgICAgY29uc3QgY2hhciogbG9jYWxf
c3RvcmFnZV9kYXRhYmFzZV9wYXRoOwotICAgICAgICBpbnQgZm9udF9taW5pbXVtX3NpemU7Ci0g
ICAgICAgIGludCBmb250X21pbmltdW1fbG9naWNhbF9zaXplOwotICAgICAgICBpbnQgZm9udF9k
ZWZhdWx0X3NpemU7Ci0gICAgICAgIGludCBmb250X21vbm9zcGFjZV9zaXplOwotICAgICAgICBj
b25zdCBjaGFyKiBmb250X3N0YW5kYXJkOwotICAgICAgICBjb25zdCBjaGFyKiBmb250X2N1cnNp
dmU7Ci0gICAgICAgIGNvbnN0IGNoYXIqIGZvbnRfbW9ub3NwYWNlOwotICAgICAgICBjb25zdCBj
aGFyKiBmb250X2ZhbnRhc3k7Ci0gICAgICAgIGNvbnN0IGNoYXIqIGZvbnRfc2VyaWY7Ci0gICAg
ICAgIGNvbnN0IGNoYXIqIGZvbnRfc2Fuc19zZXJpZjsKLSAgICAgICAgRWluYV9Cb29sIGF1dG9f
bG9hZF9pbWFnZXMgOiAxOwotICAgICAgICBFaW5hX0Jvb2wgYXV0b19zaHJpbmtfaW1hZ2VzIDog
MTsKLSAgICAgICAgRWluYV9Cb29sIGVuYWJsZV9hdXRvX3Jlc2l6ZV93aW5kb3cgOiAxOwotICAg
ICAgICBFaW5hX0Jvb2wgZW5hYmxlX2RldmVsb3Blcl9leHRyYXMgOiAxOwotICAgICAgICBFaW5h
X0Jvb2wgZW5hYmxlX3NjcmlwdHMgOiAxOwotICAgICAgICBFaW5hX0Jvb2wgZW5hYmxlX3BsdWdp
bnMgOiAxOwotICAgICAgICBFaW5hX0Jvb2wgZW5hYmxlX2ZyYW1lX2ZsYXR0ZW5pbmcgOiAxOwot
ICAgICAgICBFaW5hX0Jvb2wgZW5jb2RpbmdfZGV0ZWN0b3IgOiAxOwotICAgICAgICBFaW5hX0Jv
b2wgc2NyaXB0c193aW5kb3dfb3BlbiA6IDE7Ci0gICAgICAgIEVpbmFfQm9vbCBzY3JpcHRzX2Nh
bl9jbG9zZV93aW5kb3dzIDogMTsKLSAgICAgICAgRWluYV9Cb29sIHJlc2l6YWJsZV90ZXh0YXJl
YXMgOiAxOwotICAgICAgICBFaW5hX0Jvb2wgcHJpdmF0ZV9icm93c2luZyA6IDE7Ci0gICAgICAg
IEVpbmFfQm9vbCBjYXJldF9icm93c2luZyA6IDE7Ci0gICAgICAgIEVpbmFfQm9vbCBzcGF0aWFs
X25hdmlnYXRpb24gOiAxOwotICAgICAgICBFaW5hX0Jvb2wgbG9jYWxfc3RvcmFnZSA6IDE7Ci0g
ICAgICAgIEVpbmFfQm9vbCBvZmZsaW5lX2FwcF9jYWNoZSA6IDE7Ci0gICAgICAgIEVpbmFfQm9v
bCBwYWdlX2NhY2hlIDogMTsKKyAgICAgICAgY29uc3QgY2hhciogbG9jYWxTdG9yYWdlRGF0YWJh
c2VQYXRoOworICAgICAgICBpbnQgZm9udE1pbmltdW1TaXplOworICAgICAgICBpbnQgZm9udE1p
bmltdW1Mb2dpY2FsU2l6ZTsKKyAgICAgICAgaW50IGZvbnREZWZhdWx0U2l6ZTsKKyAgICAgICAg
aW50IGZvbnRNb25vc3BhY2VTaXplOworICAgICAgICBjb25zdCBjaGFyKiBmb250U3RhbmRhcmQ7
CisgICAgICAgIGNvbnN0IGNoYXIqIGZvbnRDdXJzaXZlOworICAgICAgICBjb25zdCBjaGFyKiBm
b250TW9ub3NwYWNlOworICAgICAgICBjb25zdCBjaGFyKiBmb250RmFudGFzeTsKKyAgICAgICAg
Y29uc3QgY2hhciogZm9udFNlcmlmOworICAgICAgICBjb25zdCBjaGFyKiBmb250U2Fuc1Nlcmlm
OworICAgICAgICBFaW5hX0Jvb2wgYXV0b0xvYWRJbWFnZXMgOiAxOworICAgICAgICBFaW5hX0Jv
b2wgYXV0b1Nocmlua0ltYWdlcyA6IDE7CisgICAgICAgIEVpbmFfQm9vbCBlbmFibGVBdXRvUmVz
aXplV2luZG93IDogMTsKKyAgICAgICAgRWluYV9Cb29sIGVuYWJsZURldmVsb3BlckV4dHJhcyA6
IDE7CisgICAgICAgIEVpbmFfQm9vbCBlbmFibGVTY3JpcHRzIDogMTsKKyAgICAgICAgRWluYV9C
b29sIGVuYWJsZVBsdWdpbnMgOiAxOworICAgICAgICBFaW5hX0Jvb2wgZW5hYmxlRnJhbWVGbGF0
dGVuaW5nIDogMTsKKyAgICAgICAgRWluYV9Cb29sIGVuY29kaW5nRGV0ZWN0b3IgOiAxOworICAg
ICAgICBFaW5hX0Jvb2wgc2NyaXB0c1dpbmRvd09wZW4gOiAxOworICAgICAgICBFaW5hX0Jvb2wg
c2NyaXB0c0NhbkNsb3NlV2luZG93cyA6IDE7CisgICAgICAgIEVpbmFfQm9vbCByZXNpemFibGVU
ZXh0YXJlYXMgOiAxOworICAgICAgICBFaW5hX0Jvb2wgcHJpdmF0ZUJyb3dzaW5nIDogMTsKKyAg
ICAgICAgRWluYV9Cb29sIGNhcmV0QnJvd3NpbmcgOiAxOworICAgICAgICBFaW5hX0Jvb2wgc3Bh
dGlhbE5hdmlnYXRpb24gOiAxOworICAgICAgICBFaW5hX0Jvb2wgbG9jYWxTdG9yYWdlIDogMTsK
KyAgICAgICAgRWluYV9Cb29sIG9mZmxpbmVBcHBDYWNoZSA6IDE7CisgICAgICAgIEVpbmFfQm9v
bCBwYWdlQ2FjaGUgOiAxOwogICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgZmxvYXQgbWlu
X3NjYWxlOwotICAgICAgICAgICAgZmxvYXQgbWF4X3NjYWxlOwotICAgICAgICAgICAgRWluYV9C
b29sIHVzZXJfc2NhbGFibGUgOiAxOwotICAgICAgICB9IHpvb21fcmFuZ2U7Ci0gICAgICAgIGZs
b2F0IGRldmljZV9waXhlbF9yYXRpbzsKLSAgICAgICAgZG91YmxlIGRvbV90aW1lcl9pbnRlcnZh
bDsKKyAgICAgICAgICAgIGZsb2F0IG1pblNjYWxlOworICAgICAgICAgICAgZmxvYXQgbWF4U2Nh
bGU7CisgICAgICAgICAgICBFaW5hX0Jvb2wgdXNlclNjYWxhYmxlIDogMTsKKyAgICAgICAgfSB6
b29tUmFuZ2U7CisgICAgICAgIGZsb2F0IGRldmljZVBpeGVsUmF0aW87CisgICAgICAgIGRvdWJs
ZSBkb21UaW1lckludGVydmFsOwogICAgIH0gc2V0dGluZ3M7CiAgICAgc3RydWN0IHsKICAgICAg
ICAgc3RydWN0IHsKQEAgLTE3NCw3ICsxNzQsNyBAQCBzdHJ1Y3QgX0V3a19WaWV3X1ByaXZhdGVf
RGF0YSB7CiAgICAgICAgICAgICBFdmFzX0Nvb3JkIHgsIHk7CiAgICAgICAgIH0gY2VudGVyOwog
ICAgICAgICBFY29yZV9BbmltYXRvciogYW5pbWF0b3I7Ci0gICAgfSBhbmltYXRlZF96b29tOwor
ICAgIH0gYW5pbWF0ZWRab29tOwogfTsKIAogI2lmbmRlZiBFV0tfVFlQRV9DSEVDSwpAQCAtMjE5
LDE0ICsyMTksMTQgQEAgc3RydWN0IF9Fd2tfVmlld19Qcml2YXRlX0RhdGEgewogICAgICAgICBy
ZXR1cm4gX19WQV9BUkdTX187ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgfQog
Ci0jZGVmaW5lIEVXS19WSUVXX1BSSVZfR0VUKHNkLCBwdHIpICAgICAgICAgICAgICBcCi0gICAg
RXdrX1ZpZXdfUHJpdmF0ZV9EYXRhICpwdHIgPSBzZC0+X3ByaXYKKyNkZWZpbmUgRVdLX1ZJRVdf
UFJJVl9HRVQoc21hcnREYXRhLCBwdHIpICAgICAgICAgICAgICBcCisgICAgRXdrX1ZpZXdfUHJp
dmF0ZV9EYXRhICpwdHIgPSBzbWFydERhdGEtPl9wcml2CiAKLSNkZWZpbmUgRVdLX1ZJRVdfUFJJ
Vl9HRVRfT1JfUkVUVVJOKHNkLCBwdHIsIC4uLikgICAgICAgICAgICAgICBcCi0gICAgRVdLX1ZJ
RVdfUFJJVl9HRVQoc2QsIHB0cik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
I2RlZmluZSBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwdHIsIC4uLikg
ICAgICAgICAgICAgICBcCisgICAgRVdLX1ZJRVdfUFJJVl9HRVQoc21hcnREYXRhLCBwdHIpOyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBpZiAoIXB0cikgeyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIENSSVRJ
Q0FMKCJubyBwcml2YXRlIGRhdGEgZm9yIG9iamVjdCAlcCAoJXMpIiwgICAgICAgICAgXAotICAg
ICAgICAgICAgICAgICBzZC0+c2VsZiwgZXZhc19vYmplY3RfdHlwZV9nZXQoc2QtPnNlbGYpKTsg
ICAgIFwKKyAgICAgICAgICAgICAgICAgc21hcnREYXRhLT5zZWxmLCBldmFzX29iamVjdF90eXBl
X2dldChzbWFydERhdGEtPnNlbGYpKTsgICAgIFwKICAgICAgICAgcmV0dXJuIF9fVkFfQVJHU19f
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgfQogCkBAIC0yNTIs
NyArMjUyLDcgQEAgc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfcmVwYWludHNfcmVzaXplKEV3
a19WaWV3X1ByaXZhdGVfRGF0YSogcHJpdiwgc2l6ZV90IHMKIAogc3RhdGljIHZvaWQgX2V3a192
aWV3X3JlcGFpbnRfYWRkKEV3a19WaWV3X1ByaXZhdGVfRGF0YSogcHJpdiwgRXZhc19Db29yZCB4
LCBFdmFzX0Nvb3JkIHksIEV2YXNfQ29vcmQgd2lkdGgsIEV2YXNfQ29vcmQgaGVpZ2h0KQogewot
ICAgIEVpbmFfUmVjdGFuZ2xlKiByOworICAgIEVpbmFfUmVjdGFuZ2xlKiByZWN0OwogCiAgICAg
Ly8gZnByaW50ZihzdGRlcnIsICI+Pj4gcmVwYWludCByZXF1ZXN0ZWQ6ICVkLCVkKyVkeCVkXG4i
LCB4LCB5LCB3LCBoKTsKICAgICBpZiAocHJpdi0+cmVwYWludHMuYWxsb2NhdGVkID09IHByaXYt
PnJlcGFpbnRzLmNvdW50KSB7CkBAIC0yNjUsMTMgKzI2NSwxMyBAQCBzdGF0aWMgdm9pZCBfZXdr
X3ZpZXdfcmVwYWludF9hZGQoRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKiBwcml2LCBFdmFzX0Nvb3Jk
IHgsIEV2YQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHIgPSBwcml2LT5yZXBh
aW50cy5hcnJheSArIHByaXYtPnJlcGFpbnRzLmNvdW50OworICAgIHJlY3QgPSBwcml2LT5yZXBh
aW50cy5hcnJheSArIHByaXYtPnJlcGFpbnRzLmNvdW50OwogICAgIHByaXYtPnJlcGFpbnRzLmNv
dW50Kys7CiAKLSAgICByLT54ID0geDsKLSAgICByLT55ID0geTsKLSAgICByLT53ID0gd2lkdGg7
Ci0gICAgci0+aCA9IGhlaWdodDsKKyAgICByZWN0LT54ID0geDsKKyAgICByZWN0LT55ID0geTsK
KyAgICByZWN0LT53ID0gd2lkdGg7CisgICAgcmVjdC0+aCA9IGhlaWdodDsKIAogICAgIERCRygi
YWRkIHJlcGFpbnQgJWQsICVkKyVkeCVkIiwgeCwgeSwgd2lkdGgsIGhlaWdodCk7CiB9CkBAIC0y
OTYsMjkgKzI5NiwyOSBAQCBzdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19zY3JvbGxzX3Jlc2l6
ZShFd2tfVmlld19Qcml2YXRlX0RhdGEqIHByaXYsIHNpemVfdCBzaQogICAgIHJldHVybiBFSU5B
X1RSVUU7CiB9CiAKLXN0YXRpYyB2b2lkIF9ld2tfdmlld19zY3JvbGxfYWRkKEV3a19WaWV3X1By
aXZhdGVfRGF0YSogcHJpdiwgRXZhc19Db29yZCBkeCwgRXZhc19Db29yZCBkeSwgRXZhc19Db29y
ZCB4LCBFdmFzX0Nvb3JkIHksIEV2YXNfQ29vcmQgd2lkdGgsIEV2YXNfQ29vcmQgaGVpZ2h0LCBF
aW5hX0Jvb2wgbWFpblNjcm9sbCkKK3N0YXRpYyB2b2lkIF9ld2tfdmlld19zY3JvbGxfYWRkKEV3
a19WaWV3X1ByaXZhdGVfRGF0YSogcHJpdiwgRXZhc19Db29yZCBkZWx0YVgsIEV2YXNfQ29vcmQg
ZGVsdGFZLCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwgRXZhc19Db29yZCB3aWR0aCwgRXZh
c19Db29yZCBoZWlnaHQsIEVpbmFfQm9vbCBtYWluU2Nyb2xsKQogewotICAgIEV3a19TY3JvbGxf
UmVxdWVzdCogcjsKLSAgICBFd2tfU2Nyb2xsX1JlcXVlc3QqIHJfZW5kOworICAgIEV3a19TY3Jv
bGxfUmVxdWVzdCogcmVjdDsKKyAgICBFd2tfU2Nyb2xsX1JlcXVlc3QqIHJlY3RfZW5kOwogICAg
IEV2YXNfQ29vcmQgeDIgPSB4ICsgd2lkdGgsIHkyID0geSArIGhlaWdodDsKIAotICAgIHIgPSBw
cml2LT5zY3JvbGxzLmFycmF5OwotICAgIHJfZW5kID0gciArIHByaXYtPnNjcm9sbHMuY291bnQ7
Ci0gICAgZm9yICg7IHIgPCByX2VuZDsgcisrKSB7Ci0gICAgICAgIGlmIChyLT54ID09IHggJiYg
ci0+eSA9PSB5ICYmIHItPncgPT0gd2lkdGggJiYgci0+aCA9PSBoZWlnaHQpIHsKKyAgICByZWN0
ID0gcHJpdi0+c2Nyb2xscy5hcnJheTsKKyAgICByZWN0X2VuZCA9IHJlY3QgKyBwcml2LT5zY3Jv
bGxzLmNvdW50OworICAgIGZvciAoOyByZWN0IDwgcmVjdF9lbmQ7IHJlY3QrKykgeworICAgICAg
ICBpZiAocmVjdC0+eCA9PSB4ICYmIHJlY3QtPnkgPT0geSAmJiByZWN0LT53ID09IHdpZHRoICYm
IHJlY3QtPmggPT0gaGVpZ2h0KSB7CiAgICAgICAgICAgICBEQkcoInJlZ2lvbiBhbHJlYWR5IHNj
cm9sbGVkICVkLCVkKyVkeCVkICUrMDNkLCUrMDNkIGFkZCAiCiAgICAgICAgICAgICAgICAgIiUr
MDNkLCUrMDNkIiwKLSAgICAgICAgICAgICAgICByLT54LCByLT55LCByLT53LCByLT5oLCByLT5k
eCwgci0+ZHksIGR4LCBkeSk7Ci0gICAgICAgICAgICByLT5keCArPSBkeDsKLSAgICAgICAgICAg
IHItPmR5ICs9IGR5OworICAgICAgICAgICAgICAgIHJlY3QtPngsIHJlY3QtPnksIHJlY3QtPncs
IHJlY3QtPmgsIHJlY3QtPmR4LCByZWN0LT5keSwgZGVsdGFYLCBkZWx0YVkpOworICAgICAgICAg
ICAgcmVjdC0+ZHggKz0gZGVsdGFYOworICAgICAgICAgICAgcmVjdC0+ZHkgKz0gZGVsdGFZOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGlmICgoeCA8PSByLT54ICYm
IHgyID49IHItPngyKSAmJiAoeSA8PSByLT55ICYmIHkyID49IHItPnkyKSkgeworICAgICAgICBp
ZiAoKHggPD0gcmVjdC0+eCAmJiB4MiA+PSByZWN0LT54MikgJiYgKHkgPD0gcmVjdC0+eSAmJiB5
MiA+PSByZWN0LT55MikpIHsKICAgICAgICAgICAgIERCRygib2xkIHZpZXdwb3J0ICglZCwlZCsl
ZHglZCAlKzAzZCwlKzAzZCkgd2FzIHNjcm9sbGVkIGl0c2VsZiwgIgogICAgICAgICAgICAgICAg
ICJhZGQgJSswM2QsJSswM2QiLAotICAgICAgICAgICAgICAgIHItPngsIHItPnksIHItPncsIHIt
PmgsIHItPmR4LCByLT5keSwgZHgsIGR5KTsKLSAgICAgICAgICAgIHItPnggKz0gZHg7Ci0gICAg
ICAgICAgICByLT55ICs9IGR5OworICAgICAgICAgICAgICAgIHJlY3QtPngsIHJlY3QtPnksIHJl
Y3QtPncsIHJlY3QtPmgsIHJlY3QtPmR4LCByZWN0LT5keSwgZGVsdGFYLCBkZWx0YVkpOworICAg
ICAgICAgICAgcmVjdC0+eCArPSBkZWx0YVg7CisgICAgICAgICAgICByZWN0LT55ICs9IGRlbHRh
WTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMzMyLDE5ICszMzIsMTkgQEAgc3RhdGljIHZvaWQg
X2V3a192aWV3X3Njcm9sbF9hZGQoRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKiBwcml2LCBFdmFzX0Nv
b3JkIGR4LCBFdmEKICAgICAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICByID0gcHJpdi0+
c2Nyb2xscy5hcnJheSArIHByaXYtPnNjcm9sbHMuY291bnQ7CisgICAgcmVjdCA9IHByaXYtPnNj
cm9sbHMuYXJyYXkgKyBwcml2LT5zY3JvbGxzLmNvdW50OwogICAgIHByaXYtPnNjcm9sbHMuY291
bnQrKzsKIAotICAgIHItPnggPSB4OwotICAgIHItPnkgPSB5OwotICAgIHItPncgPSB3aWR0aDsK
LSAgICByLT5oID0gaGVpZ2h0OwotICAgIHItPngyID0geDI7Ci0gICAgci0+eTIgPSB5MjsKLSAg
ICByLT5keCA9IGR4OwotICAgIHItPmR5ID0gZHk7Ci0gICAgci0+bWFpbl9zY3JvbGwgPSBtYWlu
U2Nyb2xsOwotICAgIERCRygiYWRkIHNjcm9sbCBpbiByZWdpb246ICVkLCAlZCslZHglZCAlKzAz
ZCwgJSswM2QiLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBkeCwgZHkpOworICAgIHJlY3QtPnggPSB4
OworICAgIHJlY3QtPnkgPSB5OworICAgIHJlY3QtPncgPSB3aWR0aDsKKyAgICByZWN0LT5oID0g
aGVpZ2h0OworICAgIHJlY3QtPngyID0geDI7CisgICAgcmVjdC0+eTIgPSB5MjsKKyAgICByZWN0
LT5keCA9IGRlbHRhWDsKKyAgICByZWN0LT5keSA9IGRlbHRhWTsKKyAgICByZWN0LT5tYWluX3Nj
cm9sbCA9IG1haW5TY3JvbGw7CisgICAgREJHKCJhZGQgc2Nyb2xsIGluIHJlZ2lvbjogJWQsICVk
KyVkeCVkICUrMDNkLCAlKzAzZCIsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGRlbHRhWCwgZGVsdGFZ
KTsKIAogICAgIEVpbmFfUmVjdGFuZ2xlKiBwcjsKICAgICBFaW5hX1JlY3RhbmdsZSogcHJfZW5k
OwpAQCAtMzUzLDggKzM1Myw4IEBAIHN0YXRpYyB2b2lkIF9ld2tfdmlld19zY3JvbGxfYWRkKEV3
a19WaWV3X1ByaXZhdGVfRGF0YSogcHJpdiwgRXZhc19Db29yZCBkeCwgRXZhCiAgICAgY291bnQg
PSBwcml2LT5yZXBhaW50cy5jb3VudDsKICAgICBwcl9lbmQgPSBwciArIGNvdW50OwogICAgIGZv
ciAoOyBwciA8IHByX2VuZDsgcHIrKykgewotICAgICAgICBwci0+eCArPSBkeDsKLSAgICAgICAg
cHItPnkgKz0gZHk7CisgICAgICAgIHByLT54ICs9IGRlbHRhWDsKKyAgICAgICAgcHItPnkgKz0g
ZGVsdGFZOwogICAgIH0KIH0KIApAQCAtMzgyLDEyICszODIsMTIgQEAgc3RhdGljIEVpbmFfQm9v
bCBfZXdrX3ZpZXdfc21hcnRfZm9jdXNfaW4oRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRh
KQogc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfc21hcnRfZm9jdXNfb3V0KEV3a19WaWV3X1Nt
YXJ0X0RhdGEqIHNtYXJ0RGF0YSkKIHsKICAgICBFV0tfVklFV19QUklWX0dFVChzbWFydERhdGEs
IHByaXYpOwotICAgIFdlYkNvcmU6OkZvY3VzQ29udHJvbGxlciogZmMgPSBwcml2LT5wYWdlLT5m
b2N1c0NvbnRyb2xsZXIoKTsKLSAgICBEQkcoImV3a1ZpZXc9JXAsIGZjPSVwIiwgc21hcnREYXRh
LT5zZWxmLCBmYyk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGZjLCBFSU5B
X0ZBTFNFKTsKKyAgICBXZWJDb3JlOjpGb2N1c0NvbnRyb2xsZXIqIGZvY3VzQ29udHJvbGxlciA9
IHByaXYtPnBhZ2UtPmZvY3VzQ29udHJvbGxlcigpOworICAgIERCRygiZXdrVmlldz0lcCwgZmM9
JXAiLCBzbWFydERhdGEtPnNlbGYsIGZvY3VzQ29udHJvbGxlcik7CisgICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk5fVkFMKGZvY3VzQ29udHJvbGxlciwgRUlOQV9GQUxTRSk7CiAKLSAgICBm
Yy0+c2V0QWN0aXZlKGZhbHNlKTsKLSAgICBmYy0+c2V0Rm9jdXNlZChmYWxzZSk7CisgICAgZm9j
dXNDb250cm9sbGVyLT5zZXRBY3RpdmUoZmFsc2UpOworICAgIGZvY3VzQ29udHJvbGxlci0+c2V0
Rm9jdXNlZChmYWxzZSk7CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIApAQCAtNDU4LDk3ICs0
NTgsOTcgQEAgc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfc21hcnRfc2hvdWxkX2ludGVycnVw
dF9qYXZhc2NyaXB0KEV3a19WaWV3X1NtYXJ0X0RhdGEKIHN0YXRpYyBFaW5hX0Jvb2wgX2V3a192
aWV3X3NtYXJ0X3J1bl9qYXZhc2NyaXB0X3Byb21wdChFd2tfVmlld19TbWFydF9EYXRhKiBzbWFy
dERhdGEsIEV2YXNfT2JqZWN0KiBmcmFtZSwgY29uc3QgY2hhciogbWVzc2FnZSwgY29uc3QgY2hh
ciogZGVmYXVsdFZhbHVlLCBjaGFyKiogdmFsdWUpCiB7CiAgICAgKnZhbHVlID0gc3RyZHVwKCJ0
ZXN0Iik7Ci0gICAgRWluYV9Cb29sIHJldCA9IEVJTkFfVFJVRTsKKyAgICBFaW5hX0Jvb2wgcmVz
dWx0ID0gRUlOQV9UUlVFOwogICAgIElORigiamF2YXNjcmlwdCBwcm9tcHQ6XG4iCiAgICAgICAg
ICJcdCAgICAgIG1lc3NhZ2U6ICVzXG4iCiAgICAgICAgICJcdGRlZmF1bHQgdmFsdWU6ICVzXG4i
CiAgICAgICAgICJcdGdpdmluZyBhbnN3ZXI6ICVzXG4iCi0gICAgICAgICJcdCAgICAgICBidXR0
b246ICVzIiwgbWVzc2FnZSwgZGVmYXVsdFZhbHVlLCAqdmFsdWUsIHJldCA/ICJvayIgOiAiY2Fu
Y2VsIik7CisgICAgICAgICJcdCAgICAgICBidXR0b246ICVzIiwgbWVzc2FnZSwgZGVmYXVsdFZh
bHVlLCAqdmFsdWUsIHJlc3VsdCA/ICJvayIgOiAiY2FuY2VsIik7CiAKLSAgICByZXR1cm4gcmV0
OworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIC8vIEV2ZW50IEhhbmRsaW5nIC8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogc3RhdGljIHZvaWQg
X2V3a192aWV3X29uX2ZvY3VzX2luKHZvaWQqIGRhdGEsIEV2YXMqIGV2ZW50VHlwZSwgRXZhc19P
YmplY3QqIGNhbGxiYWNrLCB2b2lkKiBldmVudEluZm8pCiB7Ci0gICAgRXdrX1ZpZXdfU21hcnRf
RGF0YSogc2QgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZGF0YSk7Ci0gICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFwaSk7Ci0gICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk4oc2QtPmFwaS0+Zm9jdXNfaW4pOwotICAgIHNkLT5hcGktPmZvY3VzX2luKHNk
KTsKKyAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEgPSBzdGF0aWNfY2FzdDxFd2tf
Vmlld19TbWFydF9EYXRhKj4oZGF0YSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4o
c21hcnREYXRhLT5hcGkpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0
YS0+YXBpLT5mb2N1c19pbik7CisgICAgc21hcnREYXRhLT5hcGktPmZvY3VzX2luKHNtYXJ0RGF0
YSk7CiB9CiAKIHN0YXRpYyB2b2lkIF9ld2tfdmlld19vbl9mb2N1c19vdXQodm9pZCogZGF0YSwg
RXZhcyogZXZlbnRUeXBlLCBFdmFzX09iamVjdCogY2FsbGJhY2ssIHZvaWQqIGV2ZW50SW5mbykK
IHsKLSAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzZCA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1Nt
YXJ0X0RhdGEqPihkYXRhKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBp
KTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpLT5mb2N1c19vdXQpOwot
ICAgIHNkLT5hcGktPmZvY3VzX291dChzZCk7CisgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc21h
cnREYXRhID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEpOworICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+YXBpKTsKKyAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmFwaS0+Zm9jdXNfb3V0KTsKKyAgICBzbWFydERh
dGEtPmFwaS0+Zm9jdXNfb3V0KHNtYXJ0RGF0YSk7CiB9CiAKIHN0YXRpYyB2b2lkIF9ld2tfdmll
d19vbl9tb3VzZV93aGVlbCh2b2lkKiBkYXRhLCBFdmFzKiBldmVudFR5cGUsIEV2YXNfT2JqZWN0
KiBjYWxsYmFjaywgdm9pZCogZXZlbnRJbmZvKQogewotICAgIEV2YXNfRXZlbnRfTW91c2VfV2hl
ZWwqIGV2ID0gc3RhdGljX2Nhc3Q8RXZhc19FdmVudF9Nb3VzZV9XaGVlbCo+KGV2ZW50SW5mbyk7
Ci0gICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFy
dF9EYXRhKj4oZGF0YSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFwaSk7
Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFwaS0+bW91c2Vfd2hlZWwpOwot
ICAgIHNkLT5hcGktPm1vdXNlX3doZWVsKHNkLCBldik7CisgICAgRXZhc19FdmVudF9Nb3VzZV9X
aGVlbCogd2hlZWxFdmVudCA9IHN0YXRpY19jYXN0PEV2YXNfRXZlbnRfTW91c2VfV2hlZWwqPihl
dmVudEluZm8pOworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IHN0YXRpY19j
YXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihkYXRhKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTihzbWFydERhdGEtPmFwaSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4o
c21hcnREYXRhLT5hcGktPm1vdXNlX3doZWVsKTsKKyAgICBzbWFydERhdGEtPmFwaS0+bW91c2Vf
d2hlZWwoc21hcnREYXRhLCB3aGVlbEV2ZW50KTsKIH0KIAogc3RhdGljIHZvaWQgX2V3a192aWV3
X29uX21vdXNlX2Rvd24odm9pZCogZGF0YSwgRXZhcyogZXZlbnRUeXBlLCBFdmFzX09iamVjdCog
Y2FsbGJhY2ssIHZvaWQqIGV2ZW50SW5mbykKIHsKLSAgICBFdmFzX0V2ZW50X01vdXNlX0Rvd24q
IGV2ID0gc3RhdGljX2Nhc3Q8RXZhc19FdmVudF9Nb3VzZV9Eb3duKj4oZXZlbnRJbmZvKTsKLSAg
ICBFd2tfVmlld19TbWFydF9EYXRhKiBzZCA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0Rh
dGEqPihkYXRhKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpKTsKLSAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpLT5tb3VzZV9kb3duKTsKLSAgICBz
ZC0+YXBpLT5tb3VzZV9kb3duKHNkLCBldik7CisgICAgRXZhc19FdmVudF9Nb3VzZV9Eb3duKiBk
b3duRXZlbnQgPSBzdGF0aWNfY2FzdDxFdmFzX0V2ZW50X01vdXNlX0Rvd24qPihldmVudEluZm8p
OworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IHN0YXRpY19jYXN0PEV3a19W
aWV3X1NtYXJ0X0RhdGEqPihkYXRhKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihz
bWFydERhdGEtPmFwaSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRh
LT5hcGktPm1vdXNlX2Rvd24pOworICAgIHNtYXJ0RGF0YS0+YXBpLT5tb3VzZV9kb3duKHNtYXJ0
RGF0YSwgZG93bkV2ZW50KTsKIH0KIAogc3RhdGljIHZvaWQgX2V3a192aWV3X29uX21vdXNlX3Vw
KHZvaWQqIGRhdGEsIEV2YXMqIGV2ZW50VHlwZSwgRXZhc19PYmplY3QqIGNhbGxiYWNrLCB2b2lk
KiBldmVudEluZm8pCiB7Ci0gICAgRXZhc19FdmVudF9Nb3VzZV9VcCogZXYgPSBzdGF0aWNfY2Fz
dDxFdmFzX0V2ZW50X01vdXNlX1VwKj4oZXZlbnRJbmZvKTsKLSAgICBFd2tfVmlld19TbWFydF9E
YXRhKiBzZCA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihkYXRhKTsKLSAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTihzZC0+YXBpLT5tb3VzZV91cCk7Ci0gICAgc2QtPmFwaS0+bW91c2VfdXAoc2Qs
IGV2KTsKKyAgICBFdmFzX0V2ZW50X01vdXNlX1VwKiB1cEV2ZW50ID0gc3RhdGljX2Nhc3Q8RXZh
c19FdmVudF9Nb3VzZV9VcCo+KGV2ZW50SW5mbyk7CisgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSog
c21hcnREYXRhID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEpOworICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+YXBpKTsKKyAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmFwaS0+bW91c2VfdXApOworICAgIHNtYXJ0
RGF0YS0+YXBpLT5tb3VzZV91cChzbWFydERhdGEsIHVwRXZlbnQpOwogfQogCiBzdGF0aWMgdm9p
ZCBfZXdrX3ZpZXdfb25fbW91c2VfbW92ZSh2b2lkKiBkYXRhLCBFdmFzKiBldmVudFR5cGUsIEV2
YXNfT2JqZWN0KiBjYWxsYmFjaywgdm9pZCogZXZlbnRJbmZvKQogewotICAgIEV2YXNfRXZlbnRf
TW91c2VfTW92ZSogZXYgPSBzdGF0aWNfY2FzdDxFdmFzX0V2ZW50X01vdXNlX01vdmUqPihldmVu
dEluZm8pOwotICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0gc3RhdGljX2Nhc3Q8RXdrX1Zp
ZXdfU21hcnRfRGF0YSo+KGRhdGEpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNk
LT5hcGkpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGktPm1vdXNlX21v
dmUpOwotICAgIHNkLT5hcGktPm1vdXNlX21vdmUoc2QsIGV2KTsKKyAgICBFdmFzX0V2ZW50X01v
dXNlX01vdmUqIG1vdmVFdmVudCA9IHN0YXRpY19jYXN0PEV2YXNfRXZlbnRfTW91c2VfTW92ZSo+
KGV2ZW50SW5mbyk7CisgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhID0gc3RhdGlj
X2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEpOworICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOKHNtYXJ0RGF0YS0+YXBpKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
TihzbWFydERhdGEtPmFwaS0+bW91c2VfbW92ZSk7CisgICAgc21hcnREYXRhLT5hcGktPm1vdXNl
X21vdmUoc21hcnREYXRhLCBtb3ZlRXZlbnQpOwogfQogCiBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdf
b25fa2V5X2Rvd24odm9pZCogZGF0YSwgRXZhcyogZXZlbnRUeXBlLCBFdmFzX09iamVjdCogY2Fs
bGJhY2ssIHZvaWQqIGV2ZW50SW5mbykKIHsKLSAgICBFdmFzX0V2ZW50X0tleV9Eb3duKiBldiA9
IHN0YXRpY19jYXN0PEV2YXNfRXZlbnRfS2V5X0Rvd24qPihldmVudEluZm8pOwotICAgIEV3a19W
aWV3X1NtYXJ0X0RhdGEqIHNkID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGRh
dGEpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGkpOwotICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGktPmtleV9kb3duKTsKLSAgICBzZC0+YXBpLT5r
ZXlfZG93bihzZCwgZXYpOworICAgIEV2YXNfRXZlbnRfS2V5X0Rvd24qIGRvd25FdmVudCA9IHN0
YXRpY19jYXN0PEV2YXNfRXZlbnRfS2V5X0Rvd24qPihldmVudEluZm8pOworICAgIEV3a19WaWV3
X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEq
PihkYXRhKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmFwaSk7
CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRhLT5hcGktPmtleV9kb3du
KTsKKyAgICBzbWFydERhdGEtPmFwaS0+a2V5X2Rvd24oc21hcnREYXRhLCBkb3duRXZlbnQpOwog
fQogCiBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfb25fa2V5X3VwKHZvaWQqIGRhdGEsIEV2YXMqIGV2
ZW50VHlwZSwgRXZhc19PYmplY3QqIGNhbGxiYWNrLCB2b2lkKiBldmVudEluZm8pCiB7Ci0gICAg
RXZhc19FdmVudF9LZXlfVXAqIGV2ID0gc3RhdGljX2Nhc3Q8RXZhc19FdmVudF9LZXlfVXAqPihl
dmVudEluZm8pOwotICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0gc3RhdGljX2Nhc3Q8RXdr
X1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJO
KHNkLT5hcGkpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGktPmtleV91
cCk7Ci0gICAgc2QtPmFwaS0+a2V5X3VwKHNkLCBldik7CisgICAgRXZhc19FdmVudF9LZXlfVXAq
IHVwRXZlbnQgPSBzdGF0aWNfY2FzdDxFdmFzX0V2ZW50X0tleV9VcCo+KGV2ZW50SW5mbyk7Cisg
ICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdf
U21hcnRfRGF0YSo+KGRhdGEpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0
RGF0YS0+YXBpKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmFw
aS0+a2V5X3VwKTsKKyAgICBzbWFydERhdGEtPmFwaS0+a2V5X3VwKHNtYXJ0RGF0YSwgdXBFdmVu
dCk7CiB9CiAKIHN0YXRpYyBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6RnJhbWU+IF9ld2tfdmll
d19jb3JlX2ZyYW1lX25ldyhFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEsIEV3a19WaWV3
X1ByaXZhdGVfRGF0YSogcHJpdiwgV2ViQ29yZTo6SFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25l
cikKIHsKLSAgICBXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEVmbCogZmxjID0gbmV3IFdlYkNv
cmU6OkZyYW1lTG9hZGVyQ2xpZW50RWZsKHNtYXJ0RGF0YS0+c2VsZik7Ci0gICAgaWYgKCFmbGMp
IHsKKyAgICBXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEVmbCogZnJhbWVMb2FkZXJDbGllbnQg
PSBuZXcgV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRFZmwoc21hcnREYXRhLT5zZWxmKTsKKyAg
ICBpZiAoIWZyYW1lTG9hZGVyQ2xpZW50KSB7CiAgICAgICAgIENSSVRJQ0FMKCJDb3VsZCBub3Qg
Y3JlYXRlIGZyYW1lIGxvYWRlciBjbGllbnQuIik7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0K
LSAgICBmbGMtPnNldEN1c3RvbVVzZXJBZ2VudChTdHJpbmc6OmZyb21VVEY4KHByaXYtPnNldHRp
bmdzLnVzZXJfYWdlbnQpKTsKKyAgICBmcmFtZUxvYWRlckNsaWVudC0+c2V0Q3VzdG9tVXNlckFn
ZW50KFN0cmluZzo6ZnJvbVVURjgocHJpdi0+c2V0dGluZ3MudXNlckFnZW50KSk7CiAKLSAgICBy
ZXR1cm4gV2ViQ29yZTo6RnJhbWU6OmNyZWF0ZShwcml2LT5wYWdlLCBvd25lciwgZmxjKTsKKyAg
ICByZXR1cm4gV2ViQ29yZTo6RnJhbWU6OmNyZWF0ZShwcml2LT5wYWdlLCBvd25lciwgZnJhbWVM
b2FkZXJDbGllbnQpOwogfQogCiBzdGF0aWMgRXZhc19TbWFydF9DbGFzcyBfcGFyZW50X3NjID0g
RVZBU19TTUFSVF9DTEFTU19JTklUX05VTEw7CkBAIC01NTcsNyArNTU3LDcgQEAgc3RhdGljIEV3
a19WaWV3X1ByaXZhdGVfRGF0YSogX2V3a192aWV3X3ByaXZfbmV3KEV3a19WaWV3X1NtYXJ0X0Rh
dGEqIHNtYXJ0RGF0YSkKIHsKICAgICBFd2tfVmlld19Qcml2YXRlX0RhdGEqIHByaXYgPQogICAg
ICAgICBzdGF0aWNfY2FzdDxFd2tfVmlld19Qcml2YXRlX0RhdGEqPihjYWxsb2MoMSwgc2l6ZW9m
KEV3a19WaWV3X1ByaXZhdGVfRGF0YSkpKTsKLSAgICBBdG9taWNTdHJpbmcgczsKKyAgICBBdG9t
aWNTdHJpbmcgc3RyaW5nOwogICAgIFdlYkNvcmU6OktVUkwgdXJsOwogCiAgICAgaWYgKCFwcml2
KSB7CkBAIC01ODAsOTQgKzU4MCw5NCBAQCBzdGF0aWMgRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKiBf
ZXdrX3ZpZXdfcHJpdl9uZXcoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhKQogICAgICAg
ICBnb3RvIGVycm9yX3BhZ2U7CiAgICAgfQogCi0gICAgcHJpdi0+cGFnZV9zZXR0aW5ncyA9IHBy
aXYtPnBhZ2UtPnNldHRpbmdzKCk7Ci0gICAgaWYgKCFwcml2LT5wYWdlX3NldHRpbmdzKSB7Cisg
ICAgcHJpdi0+cGFnZVNldHRpbmdzID0gcHJpdi0+cGFnZS0+c2V0dGluZ3MoKTsKKyAgICBpZiAo
IXByaXYtPnBhZ2VTZXR0aW5ncykgewogICAgICAgICBDUklUSUNBTCgiQ291bGQgbm90IGdldCBw
YWdlIHNldHRpbmdzLiIpOwogICAgICAgICBnb3RvIGVycm9yX3NldHRpbmdzOwogICAgIH0KIAot
ICAgIHByaXYtPnZpZXdwb3J0X2FyZ3VtZW50cy53aWR0aCA9IFdlYkNvcmU6OlZpZXdwb3J0QXJn
dW1lbnRzOjpWYWx1ZUF1dG87Ci0gICAgcHJpdi0+dmlld3BvcnRfYXJndW1lbnRzLmhlaWdodCA9
IFdlYkNvcmU6OlZpZXdwb3J0QXJndW1lbnRzOjpWYWx1ZUF1dG87Ci0gICAgcHJpdi0+dmlld3Bv
cnRfYXJndW1lbnRzLmluaXRpYWxTY2FsZSA9IFdlYkNvcmU6OlZpZXdwb3J0QXJndW1lbnRzOjpW
YWx1ZUF1dG87Ci0gICAgcHJpdi0+dmlld3BvcnRfYXJndW1lbnRzLm1pbmltdW1TY2FsZSA9IFdl
YkNvcmU6OlZpZXdwb3J0QXJndW1lbnRzOjpWYWx1ZUF1dG87Ci0gICAgcHJpdi0+dmlld3BvcnRf
YXJndW1lbnRzLm1heGltdW1TY2FsZSA9IFdlYkNvcmU6OlZpZXdwb3J0QXJndW1lbnRzOjpWYWx1
ZUF1dG87Ci0gICAgcHJpdi0+dmlld3BvcnRfYXJndW1lbnRzLnRhcmdldERlbnNpdHlEcGkgPSBX
ZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50czo6VmFsdWVBdXRvOwotICAgIHByaXYtPnZpZXdwb3J0
X2FyZ3VtZW50cy51c2VyU2NhbGFibGUgPSBFSU5BX1RSVUU7Ci0KLSAgICBwcml2LT5wYWdlX3Nl
dHRpbmdzLT5zZXRMb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkodHJ1ZSk7Ci0gICAgcHJpdi0+cGFn
ZV9zZXR0aW5ncy0+c2V0RGVmYXVsdEZpeGVkRm9udFNpemUoMTApOwotICAgIHByaXYtPnBhZ2Vf
c2V0dGluZ3MtPnNldERlZmF1bHRGb250U2l6ZSgxMyk7Ci0gICAgcHJpdi0+cGFnZV9zZXR0aW5n
cy0+c2V0U2VyaWZGb250RmFtaWx5KCJzZXJpZiIpOwotICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3Mt
PnNldEZpeGVkRm9udEZhbWlseSgibW9ub3R5cGUiKTsKLSAgICBwcml2LT5wYWdlX3NldHRpbmdz
LT5zZXRTYW5zU2VyaWZGb250RmFtaWx5KCJzYW5zIik7Ci0gICAgcHJpdi0+cGFnZV9zZXR0aW5n
cy0+c2V0U3RhbmRhcmRGb250RmFtaWx5KCJzYW5zIik7Ci0gICAgcHJpdi0+cGFnZV9zZXR0aW5n
cy0+c2V0SmF2YVNjcmlwdEVuYWJsZWQodHJ1ZSk7Ci0gICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+
c2V0UGx1Z2luc0VuYWJsZWQodHJ1ZSk7Ci0gICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0TG9j
YWxTdG9yYWdlRW5hYmxlZCh0cnVlKTsKLSAgICBwcml2LT5wYWdlX3NldHRpbmdzLT5zZXRPZmZs
aW5lV2ViQXBwbGljYXRpb25DYWNoZUVuYWJsZWQodHJ1ZSk7Ci0gICAgcHJpdi0+cGFnZV9zZXR0
aW5ncy0+c2V0VXNlc1BhZ2VDYWNoZSh0cnVlKTsKLSAgICBwcml2LT5wYWdlX3NldHRpbmdzLT5z
ZXRVc2VzRW5jb2RpbmdEZXRlY3RvcihmYWxzZSk7Ci0KLSAgICB1cmwgPSBwcml2LT5wYWdlX3Nl
dHRpbmdzLT51c2VyU3R5bGVTaGVldExvY2F0aW9uKCk7Ci0gICAgcHJpdi0+c2V0dGluZ3MudXNl
cl9zdHlsZXNoZWV0ID0gZWluYV9zdHJpbmdzaGFyZV9hZGQodXJsLnN0cmluZygpLnV0ZjgoKS5k
YXRhKCkpOwotCi0gICAgcHJpdi0+c2V0dGluZ3MuZW5jb2RpbmdfZGVmYXVsdCA9IGVpbmFfc3Ry
aW5nc2hhcmVfYWRkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
cHJpdi0+cGFnZV9zZXR0aW5ncy0+ZGVmYXVsdFRleHRFbmNvZGluZ05hbWUoKS51dGY4KCkuZGF0
YSgpKTsKLSAgICBwcml2LT5zZXR0aW5ncy5lbmNvZGluZ19jdXN0b20gPSAwOwotCi0gICAgcyA9
IHByaXYtPnBhZ2Vfc2V0dGluZ3MtPmxvY2FsU3RvcmFnZURhdGFiYXNlUGF0aCgpOwotICAgIHBy
aXYtPnNldHRpbmdzLmxvY2FsX3N0b3JhZ2VfZGF0YWJhc2VfcGF0aCA9IGVpbmFfc3RyaW5nc2hh
cmVfYWRkKHMuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0KLSAgICBwcml2LT5zZXR0aW5ncy5m
b250X21pbmltdW1fc2l6ZSA9IHByaXYtPnBhZ2Vfc2V0dGluZ3MtPm1pbmltdW1Gb250U2l6ZSgp
OwotICAgIHByaXYtPnNldHRpbmdzLmZvbnRfbWluaW11bV9sb2dpY2FsX3NpemUgPSBwcml2LT5w
YWdlX3NldHRpbmdzLT5taW5pbXVtTG9naWNhbEZvbnRTaXplKCk7Ci0gICAgcHJpdi0+c2V0dGlu
Z3MuZm9udF9kZWZhdWx0X3NpemUgPSBwcml2LT5wYWdlX3NldHRpbmdzLT5kZWZhdWx0Rm9udFNp
emUoKTsKLSAgICBwcml2LT5zZXR0aW5ncy5mb250X21vbm9zcGFjZV9zaXplID0gcHJpdi0+cGFn
ZV9zZXR0aW5ncy0+ZGVmYXVsdEZpeGVkRm9udFNpemUoKTsKLQotICAgIHMgPSBwcml2LT5wYWdl
X3NldHRpbmdzLT5zdGFuZGFyZEZvbnRGYW1pbHkoKTsKLSAgICBwcml2LT5zZXR0aW5ncy5mb250
X3N0YW5kYXJkID0gZWluYV9zdHJpbmdzaGFyZV9hZGQocy5zdHJpbmcoKS51dGY4KCkuZGF0YSgp
KTsKLSAgICBzID0gcHJpdi0+cGFnZV9zZXR0aW5ncy0+Y3Vyc2l2ZUZvbnRGYW1pbHkoKTsKLSAg
ICBwcml2LT5zZXR0aW5ncy5mb250X2N1cnNpdmUgPSBlaW5hX3N0cmluZ3NoYXJlX2FkZChzLnN0
cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotICAgIHMgPSBwcml2LT5wYWdlX3NldHRpbmdzLT5maXhl
ZEZvbnRGYW1pbHkoKTsKLSAgICBwcml2LT5zZXR0aW5ncy5mb250X21vbm9zcGFjZSA9IGVpbmFf
c3RyaW5nc2hhcmVfYWRkKHMuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgcyA9IHByaXYt
PnBhZ2Vfc2V0dGluZ3MtPmZhbnRhc3lGb250RmFtaWx5KCk7Ci0gICAgcHJpdi0+c2V0dGluZ3Mu
Zm9udF9mYW50YXN5ID0gZWluYV9zdHJpbmdzaGFyZV9hZGQocy5zdHJpbmcoKS51dGY4KCkuZGF0
YSgpKTsKLSAgICBzID0gcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2VyaWZGb250RmFtaWx5KCk7Ci0g
ICAgcHJpdi0+c2V0dGluZ3MuZm9udF9zZXJpZiA9IGVpbmFfc3RyaW5nc2hhcmVfYWRkKHMuc3Ry
aW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgcyA9IHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNhbnNT
ZXJpZkZvbnRGYW1pbHkoKTsKLSAgICBwcml2LT5zZXR0aW5ncy5mb250X3NhbnNfc2VyaWYgPSBl
aW5hX3N0cmluZ3NoYXJlX2FkZChzLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotCi0gICAgcHJp
di0+c2V0dGluZ3MuYXV0b19sb2FkX2ltYWdlcyA9IHByaXYtPnBhZ2Vfc2V0dGluZ3MtPmxvYWRz
SW1hZ2VzQXV0b21hdGljYWxseSgpOwotICAgIHByaXYtPnNldHRpbmdzLmF1dG9fc2hyaW5rX2lt
YWdlcyA9IHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNocmlua3NTdGFuZGFsb25lSW1hZ2VzVG9GaXQo
KTsKLSAgICBwcml2LT5zZXR0aW5ncy5lbmFibGVfYXV0b19yZXNpemVfd2luZG93ID0gRUlOQV9U
UlVFOwotICAgIHByaXYtPnNldHRpbmdzLmVuYWJsZV9kZXZlbG9wZXJfZXh0cmFzID0gcHJpdi0+
cGFnZV9zZXR0aW5ncy0+ZGV2ZWxvcGVyRXh0cmFzRW5hYmxlZCgpOwotICAgIHByaXYtPnNldHRp
bmdzLmVuYWJsZV9zY3JpcHRzID0gcHJpdi0+cGFnZV9zZXR0aW5ncy0+aXNKYXZhU2NyaXB0RW5h
YmxlZCgpOwotICAgIHByaXYtPnNldHRpbmdzLmVuYWJsZV9wbHVnaW5zID0gcHJpdi0+cGFnZV9z
ZXR0aW5ncy0+YXJlUGx1Z2luc0VuYWJsZWQoKTsKLSAgICBwcml2LT5zZXR0aW5ncy5lbmFibGVf
ZnJhbWVfZmxhdHRlbmluZyA9IHByaXYtPnBhZ2Vfc2V0dGluZ3MtPmZyYW1lRmxhdHRlbmluZ0Vu
YWJsZWQoKTsKLSAgICBwcml2LT5zZXR0aW5ncy5zY3JpcHRzX3dpbmRvd19vcGVuID0gcHJpdi0+
cGFnZV9zZXR0aW5ncy0+amF2YVNjcmlwdENhbk9wZW5XaW5kb3dzQXV0b21hdGljYWxseSgpOwot
ICAgIHByaXYtPnNldHRpbmdzLnNjcmlwdHNfY2FuX2Nsb3NlX3dpbmRvd3MgPSBwcml2LT5wYWdl
X3NldHRpbmdzLT5hbGxvd1NjcmlwdHNUb0Nsb3NlV2luZG93cygpOwotICAgIHByaXYtPnNldHRp
bmdzLnJlc2l6YWJsZV90ZXh0YXJlYXMgPSBwcml2LT5wYWdlX3NldHRpbmdzLT50ZXh0QXJlYXNB
cmVSZXNpemFibGUoKTsKLSAgICBwcml2LT5zZXR0aW5ncy5wcml2YXRlX2Jyb3dzaW5nID0gcHJp
di0+cGFnZV9zZXR0aW5ncy0+cHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCgpOwotICAgIHByaXYtPnNl
dHRpbmdzLmNhcmV0X2Jyb3dzaW5nID0gcHJpdi0+cGFnZV9zZXR0aW5ncy0+Y2FyZXRCcm93c2lu
Z0VuYWJsZWQoKTsKLSAgICBwcml2LT5zZXR0aW5ncy5zcGF0aWFsX25hdmlnYXRpb24gPSBwcml2
LT5wYWdlX3NldHRpbmdzLT5pc1NwYXRpYWxOYXZpZ2F0aW9uRW5hYmxlZCgpOwotICAgIHByaXYt
PnNldHRpbmdzLmxvY2FsX3N0b3JhZ2UgPSBwcml2LT5wYWdlX3NldHRpbmdzLT5sb2NhbFN0b3Jh
Z2VFbmFibGVkKCk7Ci0gICAgcHJpdi0+c2V0dGluZ3Mub2ZmbGluZV9hcHBfY2FjaGUgPSB0cnVl
OyAvLyBYWFggbm8gZnVuY3Rpb24gdG8gcmVhZCBzZXR0aW5nOyB0aGlzIGtlZXBzIHRoZSBvcmln
aW5hbCBzZXR0aW5nCi0gICAgcHJpdi0+c2V0dGluZ3MucGFnZV9jYWNoZSA9IHByaXYtPnBhZ2Vf
c2V0dGluZ3MtPnVzZXNQYWdlQ2FjaGUoKTsKLSAgICBwcml2LT5zZXR0aW5ncy5lbmNvZGluZ19k
ZXRlY3RvciA9IHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnVzZXNFbmNvZGluZ0RldGVjdG9yKCk7Ci0K
LSAgICBwcml2LT5zZXR0aW5ncy51c2VyX2FnZW50ID0gZXdrX3NldHRpbmdzX2RlZmF1bHRfdXNl
cl9hZ2VudF9nZXQoKTsKKyAgICBwcml2LT52aWV3cG9ydEFyZ3VtZW50cy53aWR0aCA9IFdlYkNv
cmU6OlZpZXdwb3J0QXJndW1lbnRzOjpWYWx1ZUF1dG87CisgICAgcHJpdi0+dmlld3BvcnRBcmd1
bWVudHMuaGVpZ2h0ID0gV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHM6OlZhbHVlQXV0bzsKKyAg
ICBwcml2LT52aWV3cG9ydEFyZ3VtZW50cy5pbml0aWFsU2NhbGUgPSBXZWJDb3JlOjpWaWV3cG9y
dEFyZ3VtZW50czo6VmFsdWVBdXRvOworICAgIHByaXYtPnZpZXdwb3J0QXJndW1lbnRzLm1pbmlt
dW1TY2FsZSA9IFdlYkNvcmU6OlZpZXdwb3J0QXJndW1lbnRzOjpWYWx1ZUF1dG87CisgICAgcHJp
di0+dmlld3BvcnRBcmd1bWVudHMubWF4aW11bVNjYWxlID0gV2ViQ29yZTo6Vmlld3BvcnRBcmd1
bWVudHM6OlZhbHVlQXV0bzsKKyAgICBwcml2LT52aWV3cG9ydEFyZ3VtZW50cy50YXJnZXREZW5z
aXR5RHBpID0gV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHM6OlZhbHVlQXV0bzsKKyAgICBwcml2
LT52aWV3cG9ydEFyZ3VtZW50cy51c2VyU2NhbGFibGUgPSBFSU5BX1RSVUU7CisKKyAgICBwcml2
LT5wYWdlU2V0dGluZ3MtPnNldExvYWRzSW1hZ2VzQXV0b21hdGljYWxseSh0cnVlKTsKKyAgICBw
cml2LT5wYWdlU2V0dGluZ3MtPnNldERlZmF1bHRGaXhlZEZvbnRTaXplKDEwKTsKKyAgICBwcml2
LT5wYWdlU2V0dGluZ3MtPnNldERlZmF1bHRGb250U2l6ZSgxMyk7CisgICAgcHJpdi0+cGFnZVNl
dHRpbmdzLT5zZXRTZXJpZkZvbnRGYW1pbHkoInNlcmlmIik7CisgICAgcHJpdi0+cGFnZVNldHRp
bmdzLT5zZXRGaXhlZEZvbnRGYW1pbHkoIm1vbm90eXBlIik7CisgICAgcHJpdi0+cGFnZVNldHRp
bmdzLT5zZXRTYW5zU2VyaWZGb250RmFtaWx5KCJzYW5zIik7CisgICAgcHJpdi0+cGFnZVNldHRp
bmdzLT5zZXRTdGFuZGFyZEZvbnRGYW1pbHkoInNhbnMiKTsKKyAgICBwcml2LT5wYWdlU2V0dGlu
Z3MtPnNldEphdmFTY3JpcHRFbmFibGVkKHRydWUpOworICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+
c2V0UGx1Z2luc0VuYWJsZWQodHJ1ZSk7CisgICAgcHJpdi0+cGFnZVNldHRpbmdzLT5zZXRMb2Nh
bFN0b3JhZ2VFbmFibGVkKHRydWUpOworICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0T2ZmbGlu
ZVdlYkFwcGxpY2F0aW9uQ2FjaGVFbmFibGVkKHRydWUpOworICAgIHByaXYtPnBhZ2VTZXR0aW5n
cy0+c2V0VXNlc1BhZ2VDYWNoZSh0cnVlKTsKKyAgICBwcml2LT5wYWdlU2V0dGluZ3MtPnNldFVz
ZXNFbmNvZGluZ0RldGVjdG9yKGZhbHNlKTsKKworICAgIHVybCA9IHByaXYtPnBhZ2VTZXR0aW5n
cy0+dXNlclN0eWxlU2hlZXRMb2NhdGlvbigpOworICAgIHByaXYtPnNldHRpbmdzLnVzZXJTdHls
ZXNoZWV0ID0gZWluYV9zdHJpbmdzaGFyZV9hZGQodXJsLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkp
OworCisgICAgcHJpdi0+c2V0dGluZ3MuZW5jb2RpbmdEZWZhdWx0ID0gZWluYV9zdHJpbmdzaGFy
ZV9hZGQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwcml2LT5w
YWdlU2V0dGluZ3MtPmRlZmF1bHRUZXh0RW5jb2RpbmdOYW1lKCkudXRmOCgpLmRhdGEoKSk7Cisg
ICAgcHJpdi0+c2V0dGluZ3MuZW5jb2RpbmdDdXN0b20gPSAwOworCisgICAgc3RyaW5nID0gcHJp
di0+cGFnZVNldHRpbmdzLT5sb2NhbFN0b3JhZ2VEYXRhYmFzZVBhdGgoKTsKKyAgICBwcml2LT5z
ZXR0aW5ncy5sb2NhbFN0b3JhZ2VEYXRhYmFzZVBhdGggPSBlaW5hX3N0cmluZ3NoYXJlX2FkZChz
dHJpbmcuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisKKyAgICBwcml2LT5zZXR0aW5ncy5mb250
TWluaW11bVNpemUgPSBwcml2LT5wYWdlU2V0dGluZ3MtPm1pbmltdW1Gb250U2l6ZSgpOworICAg
IHByaXYtPnNldHRpbmdzLmZvbnRNaW5pbXVtTG9naWNhbFNpemUgPSBwcml2LT5wYWdlU2V0dGlu
Z3MtPm1pbmltdW1Mb2dpY2FsRm9udFNpemUoKTsKKyAgICBwcml2LT5zZXR0aW5ncy5mb250RGVm
YXVsdFNpemUgPSBwcml2LT5wYWdlU2V0dGluZ3MtPmRlZmF1bHRGb250U2l6ZSgpOworICAgIHBy
aXYtPnNldHRpbmdzLmZvbnRNb25vc3BhY2VTaXplID0gcHJpdi0+cGFnZVNldHRpbmdzLT5kZWZh
dWx0Rml4ZWRGb250U2l6ZSgpOworCisgICAgc3RyaW5nID0gcHJpdi0+cGFnZVNldHRpbmdzLT5z
dGFuZGFyZEZvbnRGYW1pbHkoKTsKKyAgICBwcml2LT5zZXR0aW5ncy5mb250U3RhbmRhcmQgPSBl
aW5hX3N0cmluZ3NoYXJlX2FkZChzdHJpbmcuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAg
c3RyaW5nID0gcHJpdi0+cGFnZVNldHRpbmdzLT5jdXJzaXZlRm9udEZhbWlseSgpOworICAgIHBy
aXYtPnNldHRpbmdzLmZvbnRDdXJzaXZlID0gZWluYV9zdHJpbmdzaGFyZV9hZGQoc3RyaW5nLnN0
cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgIHN0cmluZyA9IHByaXYtPnBhZ2VTZXR0aW5ncy0+
Zml4ZWRGb250RmFtaWx5KCk7CisgICAgcHJpdi0+c2V0dGluZ3MuZm9udE1vbm9zcGFjZSA9IGVp
bmFfc3RyaW5nc2hhcmVfYWRkKHN0cmluZy5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBz
dHJpbmcgPSBwcml2LT5wYWdlU2V0dGluZ3MtPmZhbnRhc3lGb250RmFtaWx5KCk7CisgICAgcHJp
di0+c2V0dGluZ3MuZm9udEZhbnRhc3kgPSBlaW5hX3N0cmluZ3NoYXJlX2FkZChzdHJpbmcuc3Ry
aW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgc3RyaW5nID0gcHJpdi0+cGFnZVNldHRpbmdzLT5z
ZXJpZkZvbnRGYW1pbHkoKTsKKyAgICBwcml2LT5zZXR0aW5ncy5mb250U2VyaWYgPSBlaW5hX3N0
cmluZ3NoYXJlX2FkZChzdHJpbmcuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgc3RyaW5n
ID0gcHJpdi0+cGFnZVNldHRpbmdzLT5zYW5zU2VyaWZGb250RmFtaWx5KCk7CisgICAgcHJpdi0+
c2V0dGluZ3MuZm9udFNhbnNTZXJpZiA9IGVpbmFfc3RyaW5nc2hhcmVfYWRkKHN0cmluZy5zdHJp
bmcoKS51dGY4KCkuZGF0YSgpKTsKKworICAgIHByaXYtPnNldHRpbmdzLmF1dG9Mb2FkSW1hZ2Vz
ID0gcHJpdi0+cGFnZVNldHRpbmdzLT5sb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkoKTsKKyAgICBw
cml2LT5zZXR0aW5ncy5hdXRvU2hyaW5rSW1hZ2VzID0gcHJpdi0+cGFnZVNldHRpbmdzLT5zaHJp
bmtzU3RhbmRhbG9uZUltYWdlc1RvRml0KCk7CisgICAgcHJpdi0+c2V0dGluZ3MuZW5hYmxlQXV0
b1Jlc2l6ZVdpbmRvdyA9IEVJTkFfVFJVRTsKKyAgICBwcml2LT5zZXR0aW5ncy5lbmFibGVEZXZl
bG9wZXJFeHRyYXMgPSBwcml2LT5wYWdlU2V0dGluZ3MtPmRldmVsb3BlckV4dHJhc0VuYWJsZWQo
KTsKKyAgICBwcml2LT5zZXR0aW5ncy5lbmFibGVTY3JpcHRzID0gcHJpdi0+cGFnZVNldHRpbmdz
LT5pc0phdmFTY3JpcHRFbmFibGVkKCk7CisgICAgcHJpdi0+c2V0dGluZ3MuZW5hYmxlUGx1Z2lu
cyA9IHByaXYtPnBhZ2VTZXR0aW5ncy0+YXJlUGx1Z2luc0VuYWJsZWQoKTsKKyAgICBwcml2LT5z
ZXR0aW5ncy5lbmFibGVGcmFtZUZsYXR0ZW5pbmcgPSBwcml2LT5wYWdlU2V0dGluZ3MtPmZyYW1l
RmxhdHRlbmluZ0VuYWJsZWQoKTsKKyAgICBwcml2LT5zZXR0aW5ncy5zY3JpcHRzV2luZG93T3Bl
biA9IHByaXYtPnBhZ2VTZXR0aW5ncy0+amF2YVNjcmlwdENhbk9wZW5XaW5kb3dzQXV0b21hdGlj
YWxseSgpOworICAgIHByaXYtPnNldHRpbmdzLnNjcmlwdHNDYW5DbG9zZVdpbmRvd3MgPSBwcml2
LT5wYWdlU2V0dGluZ3MtPmFsbG93U2NyaXB0c1RvQ2xvc2VXaW5kb3dzKCk7CisgICAgcHJpdi0+
c2V0dGluZ3MucmVzaXphYmxlVGV4dGFyZWFzID0gcHJpdi0+cGFnZVNldHRpbmdzLT50ZXh0QXJl
YXNBcmVSZXNpemFibGUoKTsKKyAgICBwcml2LT5zZXR0aW5ncy5wcml2YXRlQnJvd3NpbmcgPSBw
cml2LT5wYWdlU2V0dGluZ3MtPnByaXZhdGVCcm93c2luZ0VuYWJsZWQoKTsKKyAgICBwcml2LT5z
ZXR0aW5ncy5jYXJldEJyb3dzaW5nID0gcHJpdi0+cGFnZVNldHRpbmdzLT5jYXJldEJyb3dzaW5n
RW5hYmxlZCgpOworICAgIHByaXYtPnNldHRpbmdzLnNwYXRpYWxOYXZpZ2F0aW9uID0gcHJpdi0+
cGFnZVNldHRpbmdzLT5pc1NwYXRpYWxOYXZpZ2F0aW9uRW5hYmxlZCgpOworICAgIHByaXYtPnNl
dHRpbmdzLmxvY2FsU3RvcmFnZSA9IHByaXYtPnBhZ2VTZXR0aW5ncy0+bG9jYWxTdG9yYWdlRW5h
YmxlZCgpOworICAgIHByaXYtPnNldHRpbmdzLm9mZmxpbmVBcHBDYWNoZSA9IHRydWU7IC8vIFhY
WCBubyBmdW5jdGlvbiB0byByZWFkIHNldHRpbmc7IHRoaXMga2VlcHMgdGhlIG9yaWdpbmFsIHNl
dHRpbmcKKyAgICBwcml2LT5zZXR0aW5ncy5wYWdlQ2FjaGUgPSBwcml2LT5wYWdlU2V0dGluZ3Mt
PnVzZXNQYWdlQ2FjaGUoKTsKKyAgICBwcml2LT5zZXR0aW5ncy5lbmNvZGluZ0RldGVjdG9yID0g
cHJpdi0+cGFnZVNldHRpbmdzLT51c2VzRW5jb2RpbmdEZXRlY3RvcigpOworCisgICAgcHJpdi0+
c2V0dGluZ3MudXNlckFnZW50ID0gZXdrX3NldHRpbmdzX2RlZmF1bHRfdXNlcl9hZ2VudF9nZXQo
KTsKIAogICAgIC8vIFNpbmNlIHRoZXJlJ3Mgbm8gc2NhbGUgc2VwYXJhdGVkIGZyb20gem9vbWlu
ZyBpbiB3ZWJraXQtZWZsLCB0aGlzIGZ1bmN0aW9uYWxpdHkgb2YKICAgICAvLyB2aWV3cG9ydCBt
ZXRhIHRhZyBpcyBpbXBsZW1lbnRlZCB1c2luZyB6b29tLiBXaGVuIHNjYWxlIHpvb20gaXMgc3Vw
cG9ydGVkIGJ5IHdlYmtpdC1lZmwsCiAgICAgLy8gdGhpcyBmdW5jdGlvbmFsaXR5IHdpbGwgYmUg
bW9kaWZpZWQgYnkgdGhlIHNjYWxlIHpvb20gcGF0Y2guCi0gICAgcHJpdi0+c2V0dGluZ3Muem9v
bV9yYW5nZS5taW5fc2NhbGUgPSBaT09NX01JTjsKLSAgICBwcml2LT5zZXR0aW5ncy56b29tX3Jh
bmdlLm1heF9zY2FsZSA9IFpPT01fTUFYOwotICAgIHByaXYtPnNldHRpbmdzLnpvb21fcmFuZ2Uu
dXNlcl9zY2FsYWJsZSA9IEVJTkFfVFJVRTsKLSAgICBwcml2LT5zZXR0aW5ncy5kZXZpY2VfcGl4
ZWxfcmF0aW8gPSBERVZJQ0VfUElYRUxfUkFUSU87CisgICAgcHJpdi0+c2V0dGluZ3Muem9vbVJh
bmdlLm1pblNjYWxlID0gWk9PTV9NSU47CisgICAgcHJpdi0+c2V0dGluZ3Muem9vbVJhbmdlLm1h
eFNjYWxlID0gWk9PTV9NQVg7CisgICAgcHJpdi0+c2V0dGluZ3Muem9vbVJhbmdlLnVzZXJTY2Fs
YWJsZSA9IEVJTkFfVFJVRTsKKyAgICBwcml2LT5zZXR0aW5ncy5kZXZpY2VQaXhlbFJhdGlvID0g
REVWSUNFX1BJWEVMX1JBVElPOwogCi0gICAgcHJpdi0+c2V0dGluZ3MuZG9tX3RpbWVyX2ludGVy
dmFsID0gcHJpdi0+cGFnZV9zZXR0aW5ncy0+ZGVmYXVsdE1pbkRPTVRpbWVySW50ZXJ2YWwoKTsK
KyAgICBwcml2LT5zZXR0aW5ncy5kb21UaW1lckludGVydmFsID0gcHJpdi0+cGFnZVNldHRpbmdz
LT5kZWZhdWx0TWluRE9NVGltZXJJbnRlcnZhbCgpOwogCi0gICAgcHJpdi0+bWFpbl9mcmFtZSA9
IF9ld2tfdmlld19jb3JlX2ZyYW1lX25ldyhzbWFydERhdGEsIHByaXYsIDApLmdldCgpOwotICAg
IGlmICghcHJpdi0+bWFpbl9mcmFtZSkgeworICAgIHByaXYtPm1haW5GcmFtZSA9IF9ld2tfdmll
d19jb3JlX2ZyYW1lX25ldyhzbWFydERhdGEsIHByaXYsIDApLmdldCgpOworICAgIGlmICghcHJp
di0+bWFpbkZyYW1lKSB7CiAgICAgICAgIENSSVRJQ0FMKCJDb3VsZCBub3QgY3JlYXRlIG1haW4g
ZnJhbWUuIik7CiAgICAgICAgIGdvdG8gZXJyb3JfbWFpbl9mcmFtZTsKICAgICB9CkBAIC03MDAs
MjAgKzcwMCwyMCBAQCBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfcHJpdl9kZWwoRXdrX1ZpZXdfUHJp
dmF0ZV9EYXRhKiBwcml2KQogICAgIGZyZWUocHJpdi0+cmVwYWludHMuYXJyYXkpOwogICAgIGZy
ZWUocHJpdi0+c2Nyb2xscy5hcnJheSk7CiAKLSAgICBlaW5hX3N0cmluZ3NoYXJlX2RlbChwcml2
LT5zZXR0aW5ncy51c2VyX2FnZW50KTsKLSAgICBlaW5hX3N0cmluZ3NoYXJlX2RlbChwcml2LT5z
ZXR0aW5ncy51c2VyX3N0eWxlc2hlZXQpOwotICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVsKHByaXYt
PnNldHRpbmdzLmVuY29kaW5nX2RlZmF1bHQpOwotICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVsKHBy
aXYtPnNldHRpbmdzLmVuY29kaW5nX2N1c3RvbSk7Ci0gICAgZWluYV9zdHJpbmdzaGFyZV9kZWwo
cHJpdi0+c2V0dGluZ3MuZm9udF9zdGFuZGFyZCk7Ci0gICAgZWluYV9zdHJpbmdzaGFyZV9kZWwo
cHJpdi0+c2V0dGluZ3MuZm9udF9jdXJzaXZlKTsKLSAgICBlaW5hX3N0cmluZ3NoYXJlX2RlbChw
cml2LT5zZXR0aW5ncy5mb250X21vbm9zcGFjZSk7Ci0gICAgZWluYV9zdHJpbmdzaGFyZV9kZWwo
cHJpdi0+c2V0dGluZ3MuZm9udF9mYW50YXN5KTsKLSAgICBlaW5hX3N0cmluZ3NoYXJlX2RlbChw
cml2LT5zZXR0aW5ncy5mb250X3NlcmlmKTsKLSAgICBlaW5hX3N0cmluZ3NoYXJlX2RlbChwcml2
LT5zZXR0aW5ncy5mb250X3NhbnNfc2VyaWYpOwotICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVsKHBy
aXYtPnNldHRpbmdzLmxvY2FsX3N0b3JhZ2VfZGF0YWJhc2VfcGF0aCk7Ci0KLSAgICBpZiAocHJp
di0+YW5pbWF0ZWRfem9vbS5hbmltYXRvcikKLSAgICAgICAgZWNvcmVfYW5pbWF0b3JfZGVsKHBy
aXYtPmFuaW1hdGVkX3pvb20uYW5pbWF0b3IpOworICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVsKHBy
aXYtPnNldHRpbmdzLnVzZXJBZ2VudCk7CisgICAgZWluYV9zdHJpbmdzaGFyZV9kZWwocHJpdi0+
c2V0dGluZ3MudXNlclN0eWxlc2hlZXQpOworICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVsKHByaXYt
PnNldHRpbmdzLmVuY29kaW5nRGVmYXVsdCk7CisgICAgZWluYV9zdHJpbmdzaGFyZV9kZWwocHJp
di0+c2V0dGluZ3MuZW5jb2RpbmdDdXN0b20pOworICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVsKHBy
aXYtPnNldHRpbmdzLmZvbnRTdGFuZGFyZCk7CisgICAgZWluYV9zdHJpbmdzaGFyZV9kZWwocHJp
di0+c2V0dGluZ3MuZm9udEN1cnNpdmUpOworICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVsKHByaXYt
PnNldHRpbmdzLmZvbnRNb25vc3BhY2UpOworICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVsKHByaXYt
PnNldHRpbmdzLmZvbnRGYW50YXN5KTsKKyAgICBlaW5hX3N0cmluZ3NoYXJlX2RlbChwcml2LT5z
ZXR0aW5ncy5mb250U2VyaWYpOworICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVsKHByaXYtPnNldHRp
bmdzLmZvbnRTYW5zU2VyaWYpOworICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVsKHByaXYtPnNldHRp
bmdzLmxvY2FsU3RvcmFnZURhdGFiYXNlUGF0aCk7CisKKyAgICBpZiAocHJpdi0+YW5pbWF0ZWRa
b29tLmFuaW1hdG9yKQorICAgICAgICBlY29yZV9hbmltYXRvcl9kZWwocHJpdi0+YW5pbWF0ZWRa
b29tLmFuaW1hdG9yKTsKIAogICAgIGV3a19oaXN0b3J5X2ZyZWUocHJpdi0+aGlzdG9yeSk7CiAK
QEAgLTcyNCw3MiArNzI0LDcyIEBAIHN0YXRpYyB2b2lkIF9ld2tfdmlld19wcml2X2RlbChFd2tf
Vmlld19Qcml2YXRlX0RhdGEqIHByaXYpCiBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21hcnRfYWRk
KEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewogICAgIGNvbnN0IEV2YXNfU21hcnQqIHNtYXJ0ID0g
ZXZhc19vYmplY3Rfc21hcnRfc21hcnRfZ2V0KGV3a1ZpZXcpOwotICAgIGNvbnN0IEV2YXNfU21h
cnRfQ2xhc3MqIHNjID0gZXZhc19zbWFydF9jbGFzc19nZXQoc21hcnQpOwotICAgIGNvbnN0IEV3
a19WaWV3X1NtYXJ0X0NsYXNzKiBhcGkgPSByZWludGVycHJldF9jYXN0PGNvbnN0IEV3a19WaWV3
X1NtYXJ0X0NsYXNzKj4oc2MpOworICAgIGNvbnN0IEV2YXNfU21hcnRfQ2xhc3MqIHNtYXJ0Q2xh
c3MgPSBldmFzX3NtYXJ0X2NsYXNzX2dldChzbWFydCk7CisgICAgY29uc3QgRXdrX1ZpZXdfU21h
cnRfQ2xhc3MqIGFwaSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgRXdrX1ZpZXdfU21hcnRfQ2xh
c3MqPihzbWFydENsYXNzKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihhcGktPmJh
Y2tpbmdfc3RvcmVfYWRkKTsKLSAgICBFV0tfVklFV19TRF9HRVQoZXdrVmlldywgc2QpOworICAg
IEVXS19WSUVXX1NEX0dFVChld2tWaWV3LCBzbWFydERhdGEpOwogCi0gICAgaWYgKCFzZCkgewot
ICAgICAgICBzZCA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihjYWxsb2MoMSwg
c2l6ZW9mKEV3a19WaWV3X1NtYXJ0X0RhdGEpKSk7Ci0gICAgICAgIGlmICghc2QpIHsKKyAgICBp
ZiAoIXNtYXJ0RGF0YSkgeworICAgICAgICBzbWFydERhdGEgPSBzdGF0aWNfY2FzdDxFd2tfVmll
d19TbWFydF9EYXRhKj4oY2FsbG9jKDEsIHNpemVvZihFd2tfVmlld19TbWFydF9EYXRhKSkpOwor
ICAgICAgICBpZiAoIXNtYXJ0RGF0YSkgewogICAgICAgICAgICAgQ1JJVElDQUwoImNvdWxkIG5v
dCBhbGxvY2F0ZSBFd2tfVmlld19TbWFydF9EYXRhIik7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KLSAgICAgICAgZXZhc19vYmplY3Rfc21hcnRfZGF0YV9zZXQoZXdrVmlldywgc2Qp
OworICAgICAgICBldmFzX29iamVjdF9zbWFydF9kYXRhX3NldChld2tWaWV3LCBzbWFydERhdGEp
OwogICAgIH0KIAotICAgIHNkLT5iZ19jb2xvci5yID0gMjU1OwotICAgIHNkLT5iZ19jb2xvci5n
ID0gMjU1OwotICAgIHNkLT5iZ19jb2xvci5iID0gMjU1OwotICAgIHNkLT5iZ19jb2xvci5hID0g
MjU1OworICAgIHNtYXJ0RGF0YS0+YmdfY29sb3IuciA9IDI1NTsKKyAgICBzbWFydERhdGEtPmJn
X2NvbG9yLmcgPSAyNTU7CisgICAgc21hcnREYXRhLT5iZ19jb2xvci5iID0gMjU1OworICAgIHNt
YXJ0RGF0YS0+YmdfY29sb3IuYSA9IDI1NTsKIAotICAgIHNkLT5zZWxmID0gZXdrVmlldzsKLSAg
ICBzZC0+X3ByaXYgPSBfZXdrX3ZpZXdfcHJpdl9uZXcoc2QpOwotICAgIHNkLT5hcGkgPSBhcGk7
CisgICAgc21hcnREYXRhLT5zZWxmID0gZXdrVmlldzsKKyAgICBzbWFydERhdGEtPl9wcml2ID0g
X2V3a192aWV3X3ByaXZfbmV3KHNtYXJ0RGF0YSk7CisgICAgc21hcnREYXRhLT5hcGkgPSBhcGk7
CiAKICAgICBfcGFyZW50X3NjLmFkZChld2tWaWV3KTsKIAotICAgIGlmICghc2QtPl9wcml2KQor
ICAgIGlmICghc21hcnREYXRhLT5fcHJpdikKICAgICAgICAgcmV0dXJuOwogCi0gICAgRVdLX1ZJ
RVdfUFJJVl9HRVQoc2QsIHByaXYpOworICAgIEVXS19WSUVXX1BSSVZfR0VUKHNtYXJ0RGF0YSwg
cHJpdik7CiAKLSAgICBzZC0+YmFja2luZ19zdG9yZSA9IGFwaS0+YmFja2luZ19zdG9yZV9hZGQo
c2QpOwotICAgIGlmICghc2QtPmJhY2tpbmdfc3RvcmUpIHsKKyAgICBzbWFydERhdGEtPmJhY2tp
bmdfc3RvcmUgPSBhcGktPmJhY2tpbmdfc3RvcmVfYWRkKHNtYXJ0RGF0YSk7CisgICAgaWYgKCFz
bWFydERhdGEtPmJhY2tpbmdfc3RvcmUpIHsKICAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRl
IGJhY2tpbmcgc3RvcmUgb2JqZWN0LiIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
ZXZhc19vYmplY3Rfc21hcnRfbWVtYmVyX2FkZChzZC0+YmFja2luZ19zdG9yZSwgZXdrVmlldyk7
Ci0gICAgZXZhc19vYmplY3Rfc2hvdyhzZC0+YmFja2luZ19zdG9yZSk7Ci0gICAgZXZhc19vYmpl
Y3RfcGFzc19ldmVudHNfc2V0KHNkLT5iYWNraW5nX3N0b3JlLCBFSU5BX1RSVUUpOworICAgIGV2
YXNfb2JqZWN0X3NtYXJ0X21lbWJlcl9hZGQoc21hcnREYXRhLT5iYWNraW5nX3N0b3JlLCBld2tW
aWV3KTsKKyAgICBldmFzX29iamVjdF9zaG93KHNtYXJ0RGF0YS0+YmFja2luZ19zdG9yZSk7Cisg
ICAgZXZhc19vYmplY3RfcGFzc19ldmVudHNfc2V0KHNtYXJ0RGF0YS0+YmFja2luZ19zdG9yZSwg
RUlOQV9UUlVFKTsKIAotICAgIHNkLT5ldmVudHNfcmVjdCA9IGV2YXNfb2JqZWN0X3JlY3Rhbmds
ZV9hZGQoc2QtPmJhc2UuZXZhcyk7Ci0gICAgZXZhc19vYmplY3RfY29sb3Jfc2V0KHNkLT5ldmVu
dHNfcmVjdCwgMCwgMCwgMCwgMCk7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfbWVtYmVyX2FkZChz
ZC0+ZXZlbnRzX3JlY3QsIGV3a1ZpZXcpOwotICAgIGV2YXNfb2JqZWN0X3Nob3coc2QtPmV2ZW50
c19yZWN0KTsKKyAgICBzbWFydERhdGEtPmV2ZW50c19yZWN0ID0gZXZhc19vYmplY3RfcmVjdGFu
Z2xlX2FkZChzbWFydERhdGEtPmJhc2UuZXZhcyk7CisgICAgZXZhc19vYmplY3RfY29sb3Jfc2V0
KHNtYXJ0RGF0YS0+ZXZlbnRzX3JlY3QsIDAsIDAsIDAsIDApOworICAgIGV2YXNfb2JqZWN0X3Nt
YXJ0X21lbWJlcl9hZGQoc21hcnREYXRhLT5ldmVudHNfcmVjdCwgZXdrVmlldyk7CisgICAgZXZh
c19vYmplY3Rfc2hvdyhzbWFydERhdGEtPmV2ZW50c19yZWN0KTsKIAotICAgIHNkLT5tYWluX2Zy
YW1lID0gZXdrX2ZyYW1lX2FkZChzZC0+YmFzZS5ldmFzKTsKLSAgICBpZiAoIXNkLT5tYWluX2Zy
YW1lKSB7CisgICAgc21hcnREYXRhLT5tYWluX2ZyYW1lID0gZXdrX2ZyYW1lX2FkZChzbWFydERh
dGEtPmJhc2UuZXZhcyk7CisgICAgaWYgKCFzbWFydERhdGEtPm1haW5fZnJhbWUpIHsKICAgICAg
ICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIG1haW4gZnJhbWUgb2JqZWN0LiIpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCFld2tfZnJhbWVfaW5pdChzZC0+bWFpbl9mcmFtZSwg
ZXdrVmlldywgcHJpdi0+bWFpbl9mcmFtZSkpIHsKKyAgICBpZiAoIWV3a19mcmFtZV9pbml0KHNt
YXJ0RGF0YS0+bWFpbl9mcmFtZSwgZXdrVmlldywgcHJpdi0+bWFpbkZyYW1lKSkgewogICAgICAg
ICBFUlIoIkNvdWxkIG5vdCBpbml0aWFsaXplIG1haW4gZnJtZSBvYmplY3QuIik7Ci0gICAgICAg
IGV2YXNfb2JqZWN0X2RlbChzZC0+bWFpbl9mcmFtZSk7Ci0gICAgICAgIHNkLT5tYWluX2ZyYW1l
ID0gMDsKKyAgICAgICAgZXZhc19vYmplY3RfZGVsKHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSk7Cisg
ICAgICAgIHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSA9IDA7CiAKLSAgICAgICAgZGVsZXRlIHByaXYt
Pm1haW5fZnJhbWU7Ci0gICAgICAgIHByaXYtPm1haW5fZnJhbWUgPSAwOworICAgICAgICBkZWxl
dGUgcHJpdi0+bWFpbkZyYW1lOworICAgICAgICBwcml2LT5tYWluRnJhbWUgPSAwOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgZXZhc19vYmplY3RfbmFtZV9zZXQoc2QtPm1haW5fZnJh
bWUsICJFV0tfRnJhbWU6bWFpbiIpOwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X21lbWJlcl9hZGQo
c2QtPm1haW5fZnJhbWUsIGV3a1ZpZXcpOwotICAgIGV2YXNfb2JqZWN0X3Nob3coc2QtPm1haW5f
ZnJhbWUpOworICAgIGV2YXNfb2JqZWN0X25hbWVfc2V0KHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSwg
IkVXS19GcmFtZTptYWluIik7CisgICAgZXZhc19vYmplY3Rfc21hcnRfbWVtYmVyX2FkZChzbWFy
dERhdGEtPm1haW5fZnJhbWUsIGV3a1ZpZXcpOworICAgIGV2YXNfb2JqZWN0X3Nob3coc21hcnRE
YXRhLT5tYWluX2ZyYW1lKTsKIAotI2RlZmluZSBDT05ORUNUKHMsIGMpIGV2YXNfb2JqZWN0X2V2
ZW50X2NhbGxiYWNrX2FkZChld2tWaWV3LCBzLCBjLCBzZCkKKyNkZWZpbmUgQ09OTkVDVChzLCBj
KSBldmFzX29iamVjdF9ldmVudF9jYWxsYmFja19hZGQoZXdrVmlldywgcywgYywgc21hcnREYXRh
KQogICAgIENPTk5FQ1QoRVZBU19DQUxMQkFDS19GT0NVU19JTiwgX2V3a192aWV3X29uX2ZvY3Vz
X2luKTsKICAgICBDT05ORUNUKEVWQVNfQ0FMTEJBQ0tfRk9DVVNfT1VULCBfZXdrX3ZpZXdfb25f
Zm9jdXNfb3V0KTsKICAgICBDT05ORUNUKEVWQVNfQ0FMTEJBQ0tfTU9VU0VfV0hFRUwsIF9ld2tf
dmlld19vbl9tb3VzZV93aGVlbCk7CkBAIC04MDMsOCArODAzLDggQEAgc3RhdGljIHZvaWQgX2V3
a192aWV3X3NtYXJ0X2FkZChFdmFzX09iamVjdCogZXdrVmlldykKIAogc3RhdGljIHZvaWQgX2V3
a192aWV3X3NtYXJ0X2RlbChFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19T
RF9HRVQoZXdrVmlldywgc2QpOwotICAgIEV3a19WaWV3X1ByaXZhdGVfRGF0YSogcHJpdiA9IHNk
ID8gc2QtPl9wcml2IDogMDsKKyAgICBFV0tfVklFV19TRF9HRVQoZXdrVmlldywgc21hcnREYXRh
KTsKKyAgICBFd2tfVmlld19Qcml2YXRlX0RhdGEqIHByaXYgPSBzbWFydERhdGEgPyBzbWFydERh
dGEtPl9wcml2IDogMDsKIAogICAgIGV3a192aWV3X3N0b3AoZXdrVmlldyk7CiAgICAgX3BhcmVu
dF9zYy5kZWwoZXdrVmlldyk7CkBAIC04MTMsMTAzICs4MTMsMTAzIEBAIHN0YXRpYyB2b2lkIF9l
d2tfdmlld19zbWFydF9kZWwoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiAKIHN0YXRpYyB2b2lkIF9l
d2tfdmlld19zbWFydF9yZXNpemUoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV2YXNfQ29vcmQgdywg
RXZhc19Db29yZCBoKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywg
c2QpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhKTsK
IAogICAgIC8vIHRoZXNlIHNob3VsZCBiZSBxdWV1ZWQgYW5kIHByb2Nlc3NlZCBpbiBjYWxjdWxh
dGUgYXMgd2VsbCEKLSAgICBldmFzX29iamVjdF9yZXNpemUoc2QtPmJhY2tpbmdfc3RvcmUsIHcs
IGgpOworICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUsIHcs
IGgpOwogCi0gICAgc2QtPmNoYW5nZWQuc2l6ZSA9IEVJTkFfVFJVRTsKLSAgICBfZXdrX3ZpZXdf
c21hcnRfY2hhbmdlZChzZCk7CisgICAgc21hcnREYXRhLT5jaGFuZ2VkLnNpemUgPSBFSU5BX1RS
VUU7CisgICAgX2V3a192aWV3X3NtYXJ0X2NoYW5nZWQoc21hcnREYXRhKTsKIH0KIAogc3RhdGlj
IHZvaWQgX2V3a192aWV3X3NtYXJ0X21vdmUoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV2YXNfQ29v
cmQgeCwgRXZhc19Db29yZCB5KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdr
Vmlldywgc2QpOwotICAgIHNkLT5jaGFuZ2VkLnBvc2l0aW9uID0gRUlOQV9UUlVFOwotICAgIF9l
d2tfdmlld19zbWFydF9jaGFuZ2VkKHNkKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJO
KGV3a1ZpZXcsIHNtYXJ0RGF0YSk7CisgICAgc21hcnREYXRhLT5jaGFuZ2VkLnBvc2l0aW9uID0g
RUlOQV9UUlVFOworICAgIF9ld2tfdmlld19zbWFydF9jaGFuZ2VkKHNtYXJ0RGF0YSk7CiB9CiAK
IHN0YXRpYyB2b2lkIF9ld2tfdmlld19zbWFydF9jYWxjdWxhdGUoRXZhc19PYmplY3QqIGV3a1Zp
ZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUKGV3a1ZpZXcsIHNkKTsKLSAgICBFV0tfVklFV19Q
UklWX0dFVChzZCwgcHJpdik7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFw
aS0+Y29udGVudHNfcmVzaXplKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+
YXBpLT5zY3JvbGxzX3Byb2Nlc3MpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNk
LT5hcGktPnJlcGFpbnRzX3Byb2Nlc3MpOwotICAgIEV2YXNfQ29vcmQgeCwgeSwgdywgaDsKKyAg
ICBFV0tfVklFV19TRF9HRVQoZXdrVmlldywgc21hcnREYXRhKTsKKyAgICBFV0tfVklFV19QUklW
X0dFVChzbWFydERhdGEsIHByaXYpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNt
YXJ0RGF0YS0+YXBpLT5jb250ZW50c19yZXNpemUpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOKHNtYXJ0RGF0YS0+YXBpLT5zY3JvbGxzX3Byb2Nlc3MpOworICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+YXBpLT5yZXBhaW50c19wcm9jZXNzKTsKKyAgICBF
dmFzX0Nvb3JkIHgsIHksIHdpZHRoLCBoZWlnaHQ7CiAKLSAgICBzZC0+Y2hhbmdlZC5hbnkgPSBF
SU5BX0ZBTFNFOworICAgIHNtYXJ0RGF0YS0+Y2hhbmdlZC5hbnkgPSBFSU5BX0ZBTFNFOwogCi0g
ICAgaWYgKCFzZC0+bWFpbl9mcmFtZSB8fCAhcHJpdi0+bWFpbl9mcmFtZSkKKyAgICBpZiAoIXNt
YXJ0RGF0YS0+bWFpbl9mcmFtZSB8fCAhcHJpdi0+bWFpbkZyYW1lKQogICAgICAgICByZXR1cm47
CiAKLSAgICBldmFzX29iamVjdF9nZW9tZXRyeV9nZXQoZXdrVmlldywgJngsICZ5LCAmdywgJmgp
OworICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldChld2tWaWV3LCAmeCwgJnksICZ3aWR0aCwg
JmhlaWdodCk7CiAKICAgICBEQkcoImV3a1ZpZXc9JXAgZ2VvPVslZCwgJWQgKyAlZHglZF0sIGNo
YW5nZWQ6IHNpemU9JWhodSwgIgogICAgICAgICAic2Nyb2xscz0lenUsIHJlcGFpbnRzPSV6dSIs
Ci0gICAgICAgIGV3a1ZpZXcsIHgsIHksIHcsIGgsIHNkLT5jaGFuZ2VkLnNpemUsCisgICAgICAg
IGV3a1ZpZXcsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHNtYXJ0RGF0YS0+Y2hhbmdlZC5zaXplLAog
ICAgICAgICBwcml2LT5zY3JvbGxzLmNvdW50LCBwcml2LT5yZXBhaW50cy5jb3VudCk7CiAKLSAg
ICBpZiAoc2QtPmNoYW5nZWQuc2l6ZSAmJiAoKHcgIT0gc2QtPnZpZXcudykgfHwgKGggIT0gc2Qt
PnZpZXcuaCkpKSB7Ci0gICAgICAgIFdlYkNvcmU6OkZyYW1lVmlldyogdmlldyA9IHByaXYtPm1h
aW5fZnJhbWUtPnZpZXcoKTsKKyAgICBpZiAoc21hcnREYXRhLT5jaGFuZ2VkLnNpemUgJiYgKCh3
aWR0aCAhPSBzbWFydERhdGEtPnZpZXcudykgfHwgKGhlaWdodCAhPSBzbWFydERhdGEtPnZpZXcu
aCkpKSB7CisgICAgICAgIFdlYkNvcmU6OkZyYW1lVmlldyogdmlldyA9IHByaXYtPm1haW5GcmFt
ZS0+dmlldygpOwogICAgICAgICBpZiAodmlldykgewotICAgICAgICAgICAgdmlldy0+cmVzaXpl
KHcsIGgpOworICAgICAgICAgICAgdmlldy0+cmVzaXplKHdpZHRoLCBoZWlnaHQpOwogICAgICAg
ICAgICAgdmlldy0+Zm9yY2VMYXlvdXQoKTsKICAgICAgICAgICAgIHZpZXctPmFkanVzdFZpZXdT
aXplKCk7CiAgICAgICAgIH0KLSAgICAgICAgZXZhc19vYmplY3RfcmVzaXplKHNkLT5tYWluX2Zy
YW1lLCB3LCBoKTsKLSAgICAgICAgZXZhc19vYmplY3RfcmVzaXplKHNkLT5ldmVudHNfcmVjdCwg
dywgaCk7Ci0gICAgICAgIHNkLT5jaGFuZ2VkLmZyYW1lX3JlY3QgPSBFSU5BX1RSVUU7Ci0gICAg
ICAgIHNkLT52aWV3LncgPSB3OwotICAgICAgICBzZC0+dmlldy5oID0gaDsKKyAgICAgICAgZXZh
c19vYmplY3RfcmVzaXplKHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSwgd2lkdGgsIGhlaWdodCk7Cisg
ICAgICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShzbWFydERhdGEtPmV2ZW50c19yZWN0LCB3aWR0aCwg
aGVpZ2h0KTsKKyAgICAgICAgc21hcnREYXRhLT5jaGFuZ2VkLmZyYW1lX3JlY3QgPSBFSU5BX1RS
VUU7CisgICAgICAgIHNtYXJ0RGF0YS0+dmlldy53ID0gd2lkdGg7CisgICAgICAgIHNtYXJ0RGF0
YS0+dmlldy5oID0gaGVpZ2h0OwogCi0gICAgICAgIF9ld2tfdmlld19yZXBhaW50X2FkZChwcml2
LCAwLCAwLCB3LCBoKTsKKyAgICAgICAgX2V3a192aWV3X3JlcGFpbnRfYWRkKHByaXYsIDAsIDAs
IHdpZHRoLCBoZWlnaHQpOwogCiAgICAgICAgIC8vIFRoaXMgY2FsbGJhY2sgaXMgYSBnb29kIHBs
YWNlIGUuZy4gdG8gY2hhbmdlIGZpeGVkIGxheW91dCBzaXplIChld2tfdmlld19maXhlZF9sYXlv
dXRfc2l6ZV9zZXQpLgogICAgICAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKGV3
a1ZpZXcsICJ2aWV3LHJlc2l6ZWQiLCAwKTsKICAgICB9Ci0gICAgc2QtPmNoYW5nZWQuc2l6ZSA9
IEVJTkFfRkFMU0U7CisgICAgc21hcnREYXRhLT5jaGFuZ2VkLnNpemUgPSBFSU5BX0ZBTFNFOwog
Ci0gICAgaWYgKHNkLT5jaGFuZ2VkLnBvc2l0aW9uICYmICgoeCAhPSBzZC0+dmlldy54KSB8fCAo
eSAhPSBzZC0+dmlldy55KSkpIHsKLSAgICAgICAgZXZhc19vYmplY3RfbW92ZShzZC0+bWFpbl9m
cmFtZSwgeCwgeSk7Ci0gICAgICAgIGV2YXNfb2JqZWN0X21vdmUoc2QtPmJhY2tpbmdfc3RvcmUs
IHgsIHkpOwotICAgICAgICBldmFzX29iamVjdF9tb3ZlKHNkLT5ldmVudHNfcmVjdCwgeCwgeSk7
Ci0gICAgICAgIHNkLT5jaGFuZ2VkLmZyYW1lX3JlY3QgPSBFSU5BX1RSVUU7Ci0gICAgICAgIHNk
LT52aWV3LnggPSB4OwotICAgICAgICBzZC0+dmlldy55ID0geTsKKyAgICBpZiAoc21hcnREYXRh
LT5jaGFuZ2VkLnBvc2l0aW9uICYmICgoeCAhPSBzbWFydERhdGEtPnZpZXcueCkgfHwgKHkgIT0g
c21hcnREYXRhLT52aWV3LnkpKSkgeworICAgICAgICBldmFzX29iamVjdF9tb3ZlKHNtYXJ0RGF0
YS0+bWFpbl9mcmFtZSwgeCwgeSk7CisgICAgICAgIGV2YXNfb2JqZWN0X21vdmUoc21hcnREYXRh
LT5iYWNraW5nX3N0b3JlLCB4LCB5KTsKKyAgICAgICAgZXZhc19vYmplY3RfbW92ZShzbWFydERh
dGEtPmV2ZW50c19yZWN0LCB4LCB5KTsKKyAgICAgICAgc21hcnREYXRhLT5jaGFuZ2VkLmZyYW1l
X3JlY3QgPSBFSU5BX1RSVUU7CisgICAgICAgIHNtYXJ0RGF0YS0+dmlldy54ID0geDsKKyAgICAg
ICAgc21hcnREYXRhLT52aWV3LnkgPSB5OwogICAgIH0KLSAgICBzZC0+Y2hhbmdlZC5wb3NpdGlv
biA9IEVJTkFfRkFMU0U7CisgICAgc21hcnREYXRhLT5jaGFuZ2VkLnBvc2l0aW9uID0gRUlOQV9G
QUxTRTsKIAotICAgIGlmICghc2QtPmFwaS0+c2Nyb2xsc19wcm9jZXNzKHNkKSkKKyAgICBpZiAo
IXNtYXJ0RGF0YS0+YXBpLT5zY3JvbGxzX3Byb2Nlc3Moc21hcnREYXRhKSkKICAgICAgICAgRVJS
KCJmYWlsZWQgdG8gcHJvY2VzcyBzY3JvbGxzLiIpOwogICAgIF9ld2tfdmlld19zY3JvbGxzX2Zs
dXNoKHByaXYpOwogCi0gICAgaWYgKCFzZC0+YXBpLT5yZXBhaW50c19wcm9jZXNzKHNkKSkKKyAg
ICBpZiAoIXNtYXJ0RGF0YS0+YXBpLT5yZXBhaW50c19wcm9jZXNzKHNtYXJ0RGF0YSkpCiAgICAg
ICAgIEVSUigiZmFpbGVkIHRvIHByb2Nlc3MgcmVwYWludHMuIik7CiAgICAgX2V3a192aWV3X3Jl
cGFpbnRzX2ZsdXNoKHByaXYpOwogCi0gICAgaWYgKHNkLT5jaGFuZ2VkLmZyYW1lX3JlY3QpIHsK
LSAgICAgICAgV2ViQ29yZTo6RnJhbWVWaWV3KiB2aWV3ID0gcHJpdi0+bWFpbl9mcmFtZS0+dmll
dygpOworICAgIGlmIChzbWFydERhdGEtPmNoYW5nZWQuZnJhbWVfcmVjdCkgeworICAgICAgICBX
ZWJDb3JlOjpGcmFtZVZpZXcqIHZpZXcgPSBwcml2LT5tYWluRnJhbWUtPnZpZXcoKTsKICAgICAg
ICAgdmlldy0+ZnJhbWVSZWN0c0NoYW5nZWQoKTsgLyogZm9yY2UgdHJlZSB0byBnZXQgcG9zaXRp
b24gZnJvbSByb290ICovCi0gICAgICAgIHNkLT5jaGFuZ2VkLmZyYW1lX3JlY3QgPSBFSU5BX0ZB
TFNFOworICAgICAgICBzbWFydERhdGEtPmNoYW5nZWQuZnJhbWVfcmVjdCA9IEVJTkFfRkFMU0U7
CiAgICAgfQogfQogCiBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21hcnRfc2hvdyhFdmFzX09iamVj
dCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNk
KTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSk7CiAK
LSAgICBpZiAoZXZhc19vYmplY3RfY2xpcGVlc19nZXQoc2QtPmJhc2UuY2xpcHBlcikpCi0gICAg
ICAgIGV2YXNfb2JqZWN0X3Nob3coc2QtPmJhc2UuY2xpcHBlcik7Ci0gICAgZXZhc19vYmplY3Rf
c2hvdyhzZC0+YmFja2luZ19zdG9yZSk7CisgICAgaWYgKGV2YXNfb2JqZWN0X2NsaXBlZXNfZ2V0
KHNtYXJ0RGF0YS0+YmFzZS5jbGlwcGVyKSkKKyAgICAgICAgZXZhc19vYmplY3Rfc2hvdyhzbWFy
dERhdGEtPmJhc2UuY2xpcHBlcik7CisgICAgZXZhc19vYmplY3Rfc2hvdyhzbWFydERhdGEtPmJh
Y2tpbmdfc3RvcmUpOwogfQogCiBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21hcnRfaGlkZShFdmFz
X09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1Zp
ZXcsIHNkKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0
YSk7CiAKLSAgICBldmFzX29iamVjdF9oaWRlKHNkLT5iYXNlLmNsaXBwZXIpOwotICAgIGV2YXNf
b2JqZWN0X2hpZGUoc2QtPmJhY2tpbmdfc3RvcmUpOworICAgIGV2YXNfb2JqZWN0X2hpZGUoc21h
cnREYXRhLT5iYXNlLmNsaXBwZXIpOworICAgIGV2YXNfb2JqZWN0X2hpZGUoc21hcnREYXRhLT5i
YWNraW5nX3N0b3JlKTsKIH0KIAogc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfc21hcnRfY29u
dGVudHNfcmVzaXplKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSwgaW50IHdpZHRoLCBp
bnQgaGVpZ2h0KQpAQCAtOTIwLDI5ICs5MjAsMjkgQEAgc3RhdGljIEVpbmFfQm9vbCBfZXdrX3Zp
ZXdfc21hcnRfY29udGVudHNfcmVzaXplKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSwK
IHN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3NtYXJ0X3pvb21fc2V0KEV3a19WaWV3X1NtYXJ0
X0RhdGEqIHNtYXJ0RGF0YSwgZmxvYXQgem9vbSwgRXZhc19Db29yZCBjZW50ZXJYLCBFdmFzX0Nv
b3JkIGNlbnRlclkpCiB7CiAgICAgZG91YmxlIHB4LCBweTsKLSAgICBFdmFzX0Nvb3JkIHgsIHks
IHcsIGg7Ci0gICAgRWluYV9Cb29sIHJldDsKKyAgICBFdmFzX0Nvb3JkIHgsIHksIHdpZHRoLCBo
ZWlnaHQ7CisgICAgRWluYV9Cb29sIHJlc3VsdDsKIAotICAgIGV3a19mcmFtZV9zY3JvbGxfc2l6
ZV9nZXQoc21hcnREYXRhLT5tYWluX2ZyYW1lLCAmdywgJmgpOworICAgIGV3a19mcmFtZV9zY3Jv
bGxfc2l6ZV9nZXQoc21hcnREYXRhLT5tYWluX2ZyYW1lLCAmd2lkdGgsICZoZWlnaHQpOwogICAg
IGV3a19mcmFtZV9zY3JvbGxfcG9zX2dldChzbWFydERhdGEtPm1haW5fZnJhbWUsICZ4LCAmeSk7
CiAKLSAgICBpZiAodyArIHNtYXJ0RGF0YS0+dmlldy53ID4gMCkKLSAgICAgICAgcHggPSBzdGF0
aWNfY2FzdDxkb3VibGU+KHggKyBjZW50ZXJYKSAvICh3ICsgc21hcnREYXRhLT52aWV3LncpOwor
ICAgIGlmICh3aWR0aCArIHNtYXJ0RGF0YS0+dmlldy53ID4gMCkKKyAgICAgICAgcHggPSBzdGF0
aWNfY2FzdDxkb3VibGU+KHggKyBjZW50ZXJYKSAvICh3aWR0aCArIHNtYXJ0RGF0YS0+dmlldy53
KTsKICAgICBlbHNlCiAgICAgICAgIHB4ID0gMC4wOwogCi0gICAgaWYgKGggKyBzbWFydERhdGEt
PnZpZXcuaCA+IDApCi0gICAgICAgIHB5ID0gc3RhdGljX2Nhc3Q8ZG91YmxlPih5ICsgY2VudGVy
WSkgLyAoaCArIHNtYXJ0RGF0YS0+dmlldy5oKTsKKyAgICBpZiAoaGVpZ2h0ICsgc21hcnREYXRh
LT52aWV3LmggPiAwKQorICAgICAgICBweSA9IHN0YXRpY19jYXN0PGRvdWJsZT4oeSArIGNlbnRl
clkpIC8gKGhlaWdodCArIHNtYXJ0RGF0YS0+dmlldy5oKTsKICAgICBlbHNlCiAgICAgICAgIHB5
ID0gMC4wOwogCi0gICAgcmV0ID0gZXdrX2ZyYW1lX3BhZ2Vfem9vbV9zZXQoc21hcnREYXRhLT5t
YWluX2ZyYW1lLCB6b29tKTsKKyAgICByZXN1bHQgPSBld2tfZnJhbWVfcGFnZV96b29tX3NldChz
bWFydERhdGEtPm1haW5fZnJhbWUsIHpvb20pOwogCi0gICAgZXdrX2ZyYW1lX3Njcm9sbF9zaXpl
X2dldChzbWFydERhdGEtPm1haW5fZnJhbWUsICZ3LCAmaCk7Ci0gICAgeCA9ICh3ICsgc21hcnRE
YXRhLT52aWV3LncpICogcHggLSBjZW50ZXJYOwotICAgIHkgPSAoaCArIHNtYXJ0RGF0YS0+dmll
dy5oKSAqIHB5IC0gY2VudGVyWTsKKyAgICBld2tfZnJhbWVfc2Nyb2xsX3NpemVfZ2V0KHNtYXJ0
RGF0YS0+bWFpbl9mcmFtZSwgJndpZHRoLCAmaGVpZ2h0KTsKKyAgICB4ID0gKHdpZHRoICsgc21h
cnREYXRhLT52aWV3LncpICogcHggLSBjZW50ZXJYOworICAgIHkgPSAoaGVpZ2h0ICsgc21hcnRE
YXRhLT52aWV3LmgpICogcHkgLSBjZW50ZXJZOwogICAgIGV3a19mcmFtZV9zY3JvbGxfc2V0KHNt
YXJ0RGF0YS0+bWFpbl9mcmFtZSwgeCwgeSk7Ci0gICAgcmV0dXJuIHJldDsKKyAgICByZXR1cm4g
cmVzdWx0OwogfQogCiBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21hcnRfZmx1c2goRXdrX1ZpZXdf
U21hcnRfRGF0YSogc21hcnREYXRhKQpAQCAtOTgxLDggKzk4MSw4IEBAIHN0YXRpYyB2b2lkIF9l
d2tfdmlld196b29tX2FuaW1hdGVkX21hcmtfc3RvcChFd2tfVmlld19TbWFydF9EYXRhKiBzbWFy
dERhdGEpCiBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9maW5pc2goRXdrX1Zp
ZXdfU21hcnRfRGF0YSogc21hcnREYXRhKQogewogICAgIEVXS19WSUVXX1BSSVZfR0VUKHNtYXJ0
RGF0YSwgcHJpdik7Ci0gICAgZWNvcmVfYW5pbWF0b3JfZGVsKHByaXYtPmFuaW1hdGVkX3pvb20u
YW5pbWF0b3IpOwotICAgIHByaXYtPmFuaW1hdGVkX3pvb20uYW5pbWF0b3IgPSAwOworICAgIGVj
b3JlX2FuaW1hdG9yX2RlbChwcml2LT5hbmltYXRlZFpvb20uYW5pbWF0b3IpOworICAgIHByaXYt
PmFuaW1hdGVkWm9vbS5hbmltYXRvciA9IDA7CiAgICAgX2V3a192aWV3X3pvb21fYW5pbWF0ZWRf
bWFya19zdG9wKHNtYXJ0RGF0YSk7CiAgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2Fs
bChzbWFydERhdGEtPnNlbGYsICJ6b29tLGFuaW1hdGVkLGVuZCIsIDApOwogfQpAQCAtOTkwLDY5
ICs5OTAsNjkgQEAgc3RhdGljIHZvaWQgX2V3a192aWV3X3pvb21fYW5pbWF0ZWRfZmluaXNoKEV3
a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSkKIHN0YXRpYyBmbG9hdCBfZXdrX3ZpZXdfem9v
bV9hbmltYXRlZF9jdXJyZW50KEV3a19WaWV3X1ByaXZhdGVfRGF0YSogcHJpdikKIHsKICAgICBk
b3VibGUgbm93ID0gZWNvcmVfbG9vcF90aW1lX2dldCgpOwotICAgIGRvdWJsZSBkZWx0YSA9IG5v
dyAtIHByaXYtPmFuaW1hdGVkX3pvb20udGltZS5zdGFydDsKKyAgICBkb3VibGUgZGVsdGEgPSBu
b3cgLSBwcml2LT5hbmltYXRlZFpvb20udGltZS5zdGFydDsKIAotICAgIGlmIChkZWx0YSA+IHBy
aXYtPmFuaW1hdGVkX3pvb20udGltZS5kdXJhdGlvbikKLSAgICAgICAgZGVsdGEgPSBwcml2LT5h
bmltYXRlZF96b29tLnRpbWUuZHVyYXRpb247CisgICAgaWYgKGRlbHRhID4gcHJpdi0+YW5pbWF0
ZWRab29tLnRpbWUuZHVyYXRpb24pCisgICAgICAgIGRlbHRhID0gcHJpdi0+YW5pbWF0ZWRab29t
LnRpbWUuZHVyYXRpb247CiAgICAgaWYgKGRlbHRhIDwgMC4wKSAvLyB0aW1lIHdlbnQgYmFjaywg
Y2xvY2sgYWRqdXN0ZWQ/CiAgICAgICAgIGRlbHRhID0gMC4wOwogCi0gICAgZGVsdGEgLz0gcHJp
di0+YW5pbWF0ZWRfem9vbS50aW1lLmR1cmF0aW9uOworICAgIGRlbHRhIC89IHByaXYtPmFuaW1h
dGVkWm9vbS50aW1lLmR1cmF0aW9uOwogCi0gICAgcmV0dXJuICgocHJpdi0+YW5pbWF0ZWRfem9v
bS56b29tLnJhbmdlICogZGVsdGEpCi0gICAgICAgICAgICArIHByaXYtPmFuaW1hdGVkX3pvb20u
em9vbS5zdGFydCk7CisgICAgcmV0dXJuICgocHJpdi0+YW5pbWF0ZWRab29tLnpvb20ucmFuZ2Ug
KiBkZWx0YSkKKyAgICAgICAgICAgICsgcHJpdi0+YW5pbWF0ZWRab29tLnpvb20uc3RhcnQpOwog
fQogCiBzdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld196b29tX2FuaW1hdG9yX2NiKHZvaWQqIGRh
dGEpCiB7Ci0gICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QgPSBzdGF0aWNfY2FzdDxFd2tfVmll
d19TbWFydF9EYXRhKj4oZGF0YSk7Ci0gICAgRXZhc19Db29yZCBjeCwgY3k7Ci0gICAgRVdLX1ZJ
RVdfUFJJVl9HRVQoc2QsIHByaXYpOworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0
YSA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihkYXRhKTsKKyAgICBFdmFzX0Nv
b3JkIGNlbnRlclgsIGNlbnRlclk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVQoc21hcnREYXRhLCBw
cml2KTsKICAgICBkb3VibGUgbm93ID0gZWNvcmVfbG9vcF90aW1lX2dldCgpOwogCi0gICAgY3gg
PSBwcml2LT5hbmltYXRlZF96b29tLmNlbnRlci54OwotICAgIGN5ID0gcHJpdi0+YW5pbWF0ZWRf
em9vbS5jZW50ZXIueTsKKyAgICBjZW50ZXJYID0gcHJpdi0+YW5pbWF0ZWRab29tLmNlbnRlci54
OworICAgIGNlbnRlclkgPSBwcml2LT5hbmltYXRlZFpvb20uY2VudGVyLnk7CiAKICAgICAvLyBU
T0RPOiBwcm9ncmVzc2l2ZWx5IGNlbnRlciAoY3gsIGN5KSAtPiAodmlldy54ICsgdmlldy5oLzIs
IHZpZXcueSArIHZpZXcuaC8yKQotICAgIGlmIChjeCA+PSBzZC0+dmlldy53KQotICAgICAgICBj
eCA9IHNkLT52aWV3LncgLSAxOwotICAgIGlmIChjeSA+PSBzZC0+dmlldy5oKQotICAgICAgICBj
eSA9IHNkLT52aWV3LmggLSAxOwotCi0gICAgaWYgKChub3cgPj0gcHJpdi0+YW5pbWF0ZWRfem9v
bS50aW1lLmVuZCkKLSAgICAgICAgfHwgKG5vdyA8IHByaXYtPmFuaW1hdGVkX3pvb20udGltZS5z
dGFydCkpIHsKLSAgICAgICAgX2V3a192aWV3X3pvb21fYW5pbWF0ZWRfZmluaXNoKHNkKTsKLSAg
ICAgICAgZXdrX3ZpZXdfem9vbV9zZXQoc2QtPnNlbGYsIHByaXYtPmFuaW1hdGVkX3pvb20uem9v
bS5lbmQsIGN4LCBjeSk7Ci0gICAgICAgIHNkLT5hcGktPnNjLmNhbGN1bGF0ZShzZC0+c2VsZik7
CisgICAgaWYgKGNlbnRlclggPj0gc21hcnREYXRhLT52aWV3LncpCisgICAgICAgIGNlbnRlclgg
PSBzbWFydERhdGEtPnZpZXcudyAtIDE7CisgICAgaWYgKGNlbnRlclkgPj0gc21hcnREYXRhLT52
aWV3LmgpCisgICAgICAgIGNlbnRlclkgPSBzbWFydERhdGEtPnZpZXcuaCAtIDE7CisKKyAgICBp
ZiAoKG5vdyA+PSBwcml2LT5hbmltYXRlZFpvb20udGltZS5lbmQpCisgICAgICAgIHx8IChub3cg
PCBwcml2LT5hbmltYXRlZFpvb20udGltZS5zdGFydCkpIHsKKyAgICAgICAgX2V3a192aWV3X3pv
b21fYW5pbWF0ZWRfZmluaXNoKHNtYXJ0RGF0YSk7CisgICAgICAgIGV3a192aWV3X3pvb21fc2V0
KHNtYXJ0RGF0YS0+c2VsZiwgcHJpdi0+YW5pbWF0ZWRab29tLnpvb20uZW5kLCBjZW50ZXJYLCBj
ZW50ZXJZKTsKKyAgICAgICAgc21hcnREYXRhLT5hcGktPnNjLmNhbGN1bGF0ZShzbWFydERhdGEt
PnNlbGYpOwogICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKICAgICB9CiAKLSAgICBzZC0+YW5p
bWF0ZWRfem9vbS56b29tLmN1cnJlbnQgPSBfZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9jdXJyZW50
KHByaXYpOwotICAgIHNkLT5hcGktPnpvb21fd2Vha19zZXQoc2QsIHNkLT5hbmltYXRlZF96b29t
Lnpvb20uY3VycmVudCwgY3gsIGN5KTsKKyAgICBzbWFydERhdGEtPmFuaW1hdGVkX3pvb20uem9v
bS5jdXJyZW50ID0gX2V3a192aWV3X3pvb21fYW5pbWF0ZWRfY3VycmVudChwcml2KTsKKyAgICBz
bWFydERhdGEtPmFwaS0+em9vbV93ZWFrX3NldChzbWFydERhdGEsIHNtYXJ0RGF0YS0+YW5pbWF0
ZWRfem9vbS56b29tLmN1cnJlbnQsIGNlbnRlclgsIGNlbnRlclkpOwogICAgIHJldHVybiBFSU5B
X1RSVUU7CiB9CiAKIHN0YXRpYyB2b2lkIF9ld2tfdmlld196b29tX2FuaW1hdGlvbl9zdGFydChF
d2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEpCiB7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVRf
T1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdik7Ci0gICAgaWYgKHByaXYtPmFuaW1hdGVkX3pvb20u
YW5pbWF0b3IpCisgICAgaWYgKHByaXYtPmFuaW1hdGVkWm9vbS5hbmltYXRvcikKICAgICAgICAg
cmV0dXJuOwotICAgIHByaXYtPmFuaW1hdGVkX3pvb20uYW5pbWF0b3IgPSBlY29yZV9hbmltYXRv
cl9hZGQKKyAgICBwcml2LT5hbmltYXRlZFpvb20uYW5pbWF0b3IgPSBlY29yZV9hbmltYXRvcl9h
ZGQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfZXdrX3ZpZXdfem9v
bV9hbmltYXRvcl9jYiwgc21hcnREYXRhKTsKIH0KIAogc3RhdGljIFdlYkNvcmU6OlZpZXdwb3J0
QXR0cmlidXRlcyBfZXdrX3ZpZXdfdmlld3BvcnRfYXR0cmlidXRlc19jb21wdXRlKGNvbnN0IEV2
YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVChld2tWaWV3LCBzZCk7
Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVQoc2QsIHByaXYpOworICAgIEVXS19WSUVXX1NEX0dFVChl
d2tWaWV3LCBzbWFydERhdGEpOworICAgIEVXS19WSUVXX1BSSVZfR0VUKHNtYXJ0RGF0YSwgcHJp
dik7CiAKLSAgICBpbnQgZGVza3RvcF93aWR0aCA9IDk4MDsKLSAgICBpbnQgZGV2aWNlX2RwaSA9
IGV3a191dGlsX2RwaV9nZXQoKTsKKyAgICBpbnQgZGVza3RvcFdpZHRoID0gOTgwOworICAgIGlu
dCBkZXZpY2VEUEkgPSBld2tfdXRpbF9kcGlfZ2V0KCk7CiAKLSAgICBXZWJDb3JlOjpJbnRSZWN0
IGF2YWlsYWJsZV9yZWN0ID0gZW5jbG9zaW5nSW50UmVjdChwcml2LT5wYWdlLT5jaHJvbWUoKS0+
Y2xpZW50KCktPnBhZ2VSZWN0KCkpOwotICAgIFdlYkNvcmU6OkludFJlY3QgZGV2aWNlX3JlY3Qg
PSBlbmNsb3NpbmdJbnRSZWN0KHByaXYtPnBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+d2luZG93
UmVjdCgpKTsKKyAgICBXZWJDb3JlOjpJbnRSZWN0IGF2YWlsYWJsZVJlY3QgPSBlbmNsb3NpbmdJ
bnRSZWN0KHByaXYtPnBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+cGFnZVJlY3QoKSk7CisgICAg
V2ViQ29yZTo6SW50UmVjdCBkZXZpY2VSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChwcml2LT5wYWdl
LT5jaHJvbWUoKS0+Y2xpZW50KCktPndpbmRvd1JlY3QoKSk7CiAKLSAgICBXZWJDb3JlOjpWaWV3
cG9ydEF0dHJpYnV0ZXMgYXR0cmlidXRlcyA9IFdlYkNvcmU6OmNvbXB1dGVWaWV3cG9ydEF0dHJp
YnV0ZXMocHJpdi0+dmlld3BvcnRfYXJndW1lbnRzLCBkZXNrdG9wX3dpZHRoLCBkZXZpY2VfcmVj
dC53aWR0aCgpLCBkZXZpY2VfcmVjdC5oZWlnaHQoKSwgZGV2aWNlX2RwaSwgYXZhaWxhYmxlX3Jl
Y3Quc2l6ZSgpKTsKKyAgICBXZWJDb3JlOjpWaWV3cG9ydEF0dHJpYnV0ZXMgYXR0cmlidXRlcyA9
IFdlYkNvcmU6OmNvbXB1dGVWaWV3cG9ydEF0dHJpYnV0ZXMocHJpdi0+dmlld3BvcnRBcmd1bWVu
dHMsIGRlc2t0b3BXaWR0aCwgZGV2aWNlUmVjdC53aWR0aCgpLCBkZXZpY2VSZWN0LmhlaWdodCgp
LCBkZXZpY2VEUEksIGF2YWlsYWJsZVJlY3Quc2l6ZSgpKTsKIAogICAgIHJldHVybiBhdHRyaWJ1
dGVzOwogfQpAQCAtMTEyMiwxMCArMTEyMiwxMCBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfYmFzZV9z
bWFydF9zZXQoRXdrX1ZpZXdfU21hcnRfQ2xhc3MqIGFwaSkKIAogdm9pZCBld2tfdmlld19maXhl
ZF9sYXlvdXRfc2l6ZV9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV2YXNfQ29vcmQgd2lkdGgs
IEV2YXNfQ29vcmQgaGVpZ2h0KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdr
Vmlldywgc2QpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdik7Cisg
ICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEpOworICAgIEVX
S19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYpOwogCi0gICAgV2ViQ29y
ZTo6RnJhbWVWaWV3KiB2aWV3ID0gcHJpdi0+bWFpbl9mcmFtZS0+dmlldygpOworICAgIFdlYkNv
cmU6OkZyYW1lVmlldyogdmlldyA9IHByaXYtPm1haW5GcmFtZS0+dmlldygpOwogICAgIGlmICh3
aWR0aCA8PSAwICYmIGhlaWdodCA8PSAwKSB7CiAgICAgICAgIGlmICghdmlldy0+dXNlRml4ZWRM
YXlvdXQoKSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTExNTAsOSArMTE1MCw5IEBAIHZvaWQg
ZXdrX3ZpZXdfZml4ZWRfbGF5b3V0X3NpemVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3
LCBFdmFzX0Nvb3JkKiB3aWR0CiAgICAgICAgICp3aWR0aCA9IDA7CiAgICAgaWYgKGhlaWdodCkK
ICAgICAgICAgKmhlaWdodCA9IDA7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tW
aWV3LCBzZCk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2KTsKLSAg
ICBXZWJDb3JlOjpGcmFtZVZpZXcqIHZpZXcgPSBwcml2LT5tYWluX2ZyYW1lLT52aWV3KCk7Cisg
ICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEpOworICAgIEVX
S19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYpOworICAgIFdlYkNvcmU6
OkZyYW1lVmlldyogdmlldyA9IHByaXYtPm1haW5GcmFtZS0+dmlldygpOwogICAgIGlmICh2aWV3
LT51c2VGaXhlZExheW91dCgpKSB7CiAgICAgICAgIFdlYkNvcmU6OkludFNpemUgc2l6ZSA9IHZp
ZXctPmZpeGVkTGF5b3V0U2l6ZSgpOwogICAgICAgICBpZiAod2lkdGgpCkBAIC0xMTY0LDEyICsx
MTY0LDEyIEBAIHZvaWQgZXdrX3ZpZXdfZml4ZWRfbGF5b3V0X3NpemVfZ2V0KGNvbnN0IEV2YXNf
T2JqZWN0KiBld2tWaWV3LCBFdmFzX0Nvb3JkKiB3aWR0CiAKIHZvaWQgZXdrX3ZpZXdfdGhlbWVf
c2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBjaGFyKiBwYXRoKQogewotICAgIEVXS19W
SUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QpOwotICAgIEVXS19WSUVXX1BSSVZfR0VU
X09SX1JFVFVSTihzZCwgcHJpdik7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tW
aWV3LCBzbWFydERhdGEpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERh
dGEsIHByaXYpOwogICAgIGlmICghZWluYV9zdHJpbmdzaGFyZV9yZXBsYWNlKCZwcml2LT5zZXR0
aW5ncy50aGVtZSwgcGF0aCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFdlYkNvcmU6OkZyYW1l
VmlldyogdmlldyA9IHByaXYtPm1haW5fZnJhbWUtPnZpZXcoKTsKKyAgICBXZWJDb3JlOjpGcmFt
ZVZpZXcqIHZpZXcgPSBwcml2LT5tYWluRnJhbWUtPnZpZXcoKTsKICAgICBpZiAodmlldykgewog
ICAgICAgICB2aWV3LT5zZXRFZGplVGhlbWUoV1RGOjpTdHJpbmcocGF0aCkpOwogICAgICAgICBw
cml2LT5wYWdlLT50aGVtZSgpLT50aGVtZUNoYW5nZWQoKTsKQEAgLTExNzksMjEgKzExNzksMjEg
QEAgdm9pZCBld2tfdmlld190aGVtZV9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGNvbnN0IGNo
YXIqIHBhdGgpCiAKIGNvbnN0IGNoYXIqIGV3a192aWV3X3RoZW1lX2dldChjb25zdCBFdmFzX09i
amVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcs
IHNkLCAwKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIDApOwor
ICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCAwKTsKKyAg
ICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCAwKTsKICAgICBy
ZXR1cm4gcHJpdi0+c2V0dGluZ3MudGhlbWU7CiB9CiAKIEV2YXNfT2JqZWN0KiBld2tfdmlld19m
cmFtZV9tYWluX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklF
V19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAwKTsKLSAgICByZXR1cm4gc2QtPm1haW5f
ZnJhbWU7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEs
IDApOworICAgIHJldHVybiBzbWFydERhdGEtPm1haW5fZnJhbWU7CiB9CiAKIEV2YXNfT2JqZWN0
KiBld2tfdmlld19mcmFtZV9mb2N1c2VkX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykK
IHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAwKTsKLSAgICBF
V0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIDApOworICAgIEVXS19WSUVXX1NE
X0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCAwKTsKKyAgICBFV0tfVklFV19QUklW
X0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCAwKTsKIAogICAgIFdlYkNvcmU6OkZyYW1l
KiBjb3JlID0gcHJpdi0+cGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRGcmFtZSgpOwog
ICAgIGlmICghY29yZSkKQEAgLTEyMDcsMzMgKzEyMDcsMzMgQEAgRXZhc19PYmplY3QqIGV3a192
aWV3X2ZyYW1lX2ZvY3VzZWRfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogCiBFaW5h
X0Jvb2wgZXdrX3ZpZXdfdXJpX3NldChFdmFzX09iamVjdCogZXdrVmlldywgY29uc3QgY2hhciog
dXJpKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFf
RkFMU0UpOwotICAgIHJldHVybiBld2tfZnJhbWVfdXJpX3NldChzZC0+bWFpbl9mcmFtZSwgdXJp
KTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlO
QV9GQUxTRSk7CisgICAgcmV0dXJuIGV3a19mcmFtZV91cmlfc2V0KHNtYXJ0RGF0YS0+bWFpbl9m
cmFtZSwgdXJpKTsKIH0KIAogY29uc3QgY2hhciogZXdrX3ZpZXdfdXJpX2dldChjb25zdCBFdmFz
X09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1Zp
ZXcsIHNkLCAwKTsKLSAgICByZXR1cm4gZXdrX2ZyYW1lX3VyaV9nZXQoc2QtPm1haW5fZnJhbWUp
OworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCAwKTsK
KyAgICByZXR1cm4gZXdrX2ZyYW1lX3VyaV9nZXQoc21hcnREYXRhLT5tYWluX2ZyYW1lKTsKIH0K
IAogY29uc3QgY2hhciogZXdrX3ZpZXdfdGl0bGVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tW
aWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIDApOwot
ICAgIHJldHVybiBld2tfZnJhbWVfdGl0bGVfZ2V0KHNkLT5tYWluX2ZyYW1lKTsKKyAgICBFV0tf
VklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgMCk7CisgICAgcmV0dXJu
IGV3a19mcmFtZV90aXRsZV9nZXQoc21hcnREYXRhLT5tYWluX2ZyYW1lKTsKIH0KIAogRWluYV9C
b29sIGV3a192aWV3X2VkaXRhYmxlX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsK
LSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsK
LSAgICByZXR1cm4gZXdrX2ZyYW1lX2VkaXRhYmxlX2dldChzZC0+bWFpbl9mcmFtZSk7CisgICAg
RVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0Up
OworICAgIHJldHVybiBld2tfZnJhbWVfZWRpdGFibGVfZ2V0KHNtYXJ0RGF0YS0+bWFpbl9mcmFt
ZSk7CiB9CiAKIHZvaWQgZXdrX3ZpZXdfYmdfY29sb3Jfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3
LCBpbnQgcmVkLCBpbnQgZ3JlZW4sIGludCBibHVlLCBpbnQgYWxwaGEpCiB7Ci0gICAgRVdLX1ZJ
RVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk4oc2QtPmFwaSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFw
aS0+YmdfY29sb3Jfc2V0KTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcs
IHNtYXJ0RGF0YSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRhLT5h
cGkpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+YXBpLT5iZ19j
b2xvcl9zZXQpOwogCiAgICAgaWYgKGFscGhhIDwgMCkgewogICAgICAgICBXUk4oIkFscGhhIGxl
c3MgdGhhbiB6ZXJvICglZCkuIiwgYWxwaGEpOwpAQCAtMTI0MywyOCArMTI0MywyOCBAQCB2b2lk
IGV3a192aWV3X2JnX2NvbG9yX3NldChFdmFzX09iamVjdCogZXdrVmlldywgaW50IHJlZCwgaW50
IGdyZWVuLCBpbnQgYmx1ZSwgaQogICAgICAgICBhbHBoYSA9IDI1NTsKICAgICB9CiAKLSNkZWZp
bmUgQ0hFQ0tfUFJFTVVMX0NPTE9SKGMsIGEpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgICBpZiAoYyA8IDApIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgV1JOKCJDb2xvciBjb21wb25l
bnQgIiAjYyAiIGlzIGxlc3MgdGhhbiB6ZXJvICglZCkuIiwgYyk7ICAgICAgICAgXAotICAgICAg
ICBjID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotICAgIH0gZWxzZSBpZiAoYyA+IGEpIHsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBXUk4oIkNvbG9yIGNvbXBvbmVu
dCAiICNjICIgaXMgZ3JlYXRlciB0aGFuIGFscGhhICglZCwgYWxwaGE9JWQpLiIsIFwKLSAgICAg
ICAgICAgIGMsIGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgICAgICAgYyA9IGE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyNkZWZpbmUgQ0hFQ0tfUFJFTVVMX0NPTE9S
KGNvbG9yLCBhbHBoYSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgIGlmIChjb2xvciA8IDApIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgV1JOKCJDb2xvciBjb21wb25lbnQgIiAjY29s
b3IgIiBpcyBsZXNzIHRoYW4gemVybyAoJWQpLiIsIGNvbG9yKTsgICAgICAgICBcCisgICAgICAg
IGNvbG9yID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgIH0gZWxzZSBpZiAoY29sb3IgPiBhbHBoYSkgeyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFdSTigiQ29s
b3IgY29tcG9uZW50ICIgI2NvbG9yICIgaXMgZ3JlYXRlciB0aGFuIGFscGhhICglZCwgYWxwaGE9
JWQpLiIsIFwKKyAgICAgICAgICAgIGNvbG9yLCBhbHBoYSk7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBjb2xvciA9IGFscGhh
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCiAgICAgfQogICAgIENIRUNLX1BSRU1VTF9DT0xPUihyZWQsIGFscGhhKTsKICAgICBDSEVD
S19QUkVNVUxfQ09MT1IoZ3JlZW4sIGFscGhhKTsKICAgICBDSEVDS19QUkVNVUxfQ09MT1IoYmx1
ZSwgYWxwaGEpOwogI3VuZGVmIENIRUNLX1BSRU1VTF9DT0xPUgogCi0gICAgc2QtPmJnX2NvbG9y
LnIgPSByZWQ7Ci0gICAgc2QtPmJnX2NvbG9yLmcgPSBncmVlbjsKLSAgICBzZC0+YmdfY29sb3Iu
YiA9IGJsdWU7Ci0gICAgc2QtPmJnX2NvbG9yLmEgPSBhbHBoYTsKKyAgICBzbWFydERhdGEtPmJn
X2NvbG9yLnIgPSByZWQ7CisgICAgc21hcnREYXRhLT5iZ19jb2xvci5nID0gZ3JlZW47CisgICAg
c21hcnREYXRhLT5iZ19jb2xvci5iID0gYmx1ZTsKKyAgICBzbWFydERhdGEtPmJnX2NvbG9yLmEg
PSBhbHBoYTsKIAotICAgIHNkLT5hcGktPmJnX2NvbG9yX3NldChzZCwgcmVkLCBncmVlbiwgYmx1
ZSwgYWxwaGEpOworICAgIHNtYXJ0RGF0YS0+YXBpLT5iZ19jb2xvcl9zZXQoc21hcnREYXRhLCBy
ZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7CiAKLSAgICBXZWJDb3JlOjpGcmFtZVZpZXcqIHZpZXcg
PSBzZC0+X3ByaXYtPm1haW5fZnJhbWUtPnZpZXcoKTsKKyAgICBXZWJDb3JlOjpGcmFtZVZpZXcq
IHZpZXcgPSBzbWFydERhdGEtPl9wcml2LT5tYWluRnJhbWUtPnZpZXcoKTsKICAgICBpZiAodmll
dykgewogICAgICAgICBXZWJDb3JlOjpDb2xvciBjb2xvcjsKIApAQCAtMTI4OSwyMSArMTI4OSwy
MSBAQCB2b2lkIGV3a192aWV3X2JnX2NvbG9yX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmll
dywgaW50KiByZWQsIGludCogZ3JlZW4sIGludAogICAgICAgICAqYmx1ZSA9IDA7CiAgICAgaWYg
KGFscGhhKQogICAgICAgICAqYWxwaGEgPSAwOwotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRV
Uk4oZXdrVmlldywgc2QpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywg
c21hcnREYXRhKTsKICAgICBpZiAocmVkKQotICAgICAgICAqcmVkID0gc2QtPmJnX2NvbG9yLnI7
CisgICAgICAgICpyZWQgPSBzbWFydERhdGEtPmJnX2NvbG9yLnI7CiAgICAgaWYgKGdyZWVuKQot
ICAgICAgICAqZ3JlZW4gPSBzZC0+YmdfY29sb3IuZzsKKyAgICAgICAgKmdyZWVuID0gc21hcnRE
YXRhLT5iZ19jb2xvci5nOwogICAgIGlmIChibHVlKQotICAgICAgICAqYmx1ZSA9IHNkLT5iZ19j
b2xvci5iOworICAgICAgICAqYmx1ZSA9IHNtYXJ0RGF0YS0+YmdfY29sb3IuYjsKICAgICBpZiAo
YWxwaGEpCi0gICAgICAgICphbHBoYSA9IHNkLT5iZ19jb2xvci5hOworICAgICAgICAqYWxwaGEg
PSBzbWFydERhdGEtPmJnX2NvbG9yLmE7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld190ZXh0X3Nl
YXJjaChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldywgY29uc3QgY2hhciogc3RyaW5nLCBFaW5h
X0Jvb2wgY2FzZVNlbnNpdGl2ZSwgRWluYV9Cb29sIGZvcndhcmQsIEVpbmFfQm9vbCB3cmFwKQog
ewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0Up
OwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7
CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFf
RkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYs
IEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzdHJpbmcs
IEVJTkFfRkFMU0UpOwogICAgIFdURjo6VGV4dENhc2VTZW5zaXRpdml0eSBzZW5zaXRpdmU7CiAg
ICAgV2ViQ29yZTo6RmluZERpcmVjdGlvbiBkaXJlY3Rpb247CkBAIC0xMzI0LDE4ICsxMzI0LDE4
IEBAIEVpbmFfQm9vbCBld2tfdmlld190ZXh0X3NlYXJjaChjb25zdCBFdmFzX09iamVjdCogZXdr
VmlldywgY29uc3QgY2hhciogc3RyaW5nLCBFCiAvKioKICAqIE1hcmsgbWF0Y2hlcyB0aGUgZ2l2
ZW4gdGV4dCBzdHJpbmcgaW4gZG9jdW1lbnQuCiAgKgotICogQHBhcmFtIG8gdmlldyBvYmplY3Qg
d2hlcmUgdG8gc2VhcmNoIHRleHQuCisgKiBAcGFyYW0gZXdrVmlldyB2aWV3IG9iamVjdCB3aGVy
ZSB0byBzZWFyY2ggdGV4dC4KICAqIEBwYXJhbSBzdHJpbmcgcmVmZXJlbmNlIHN0cmluZyB0byBt
YXRjaC4KICAqIEBwYXJhbSBjYXNlU2Vuc2l0aXZlIGlmIG1hdGNoIHNob3VsZCBiZSBjYXNlIHNl
bnNpdGl2ZSBvciBub3QuCi0gKiBAcGFyYW0gaGlnaGxpZ2h0IGlmIG1hdGNoZXMgc2hvdWxkIGJl
IGhpZ2hsaWdodGVkLgorICogQHBhcmFtIGhlaWdodGlnaGxpZ2h0IGlmIG1hdGNoZXMgc2hvdWxk
IGJlIGhpZ2hsaWdodGVkLgogICogQHBhcmFtIGxpbWl0IG1heGltdW0gYW1vdW50IG9mIG1hdGNo
ZXMsIG9yIHplcm8gdG8gdW5saW1pdGVkLgogICoKICAqIEByZXR1cm4gbnVtYmVyIG9mIG1hdGNo
ZXMuCiAgKi8KIHVuc2lnbmVkIGludCBld2tfdmlld190ZXh0X21hdGNoZXNfbWFyayhFdmFzX09i
amVjdCogZXdrVmlldywgY29uc3QgY2hhciogc3RyaW5nLCBFaW5hX0Jvb2wgY2FzZVNlbnNpdGl2
ZSwgRWluYV9Cb29sIGhpZ2hsaWdodCwgdW5zaWduZWQgaW50IGxpbWl0KQogewotICAgIEVXS19W
SUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIDApOwotICAgIEVXS19WSUVXX1BSSVZf
R0VUX09SX1JFVFVSTihzZCwgcHJpdiwgMCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
Tihld2tWaWV3LCBzbWFydERhdGEsIDApOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVS
TihzbWFydERhdGEsIHByaXYsIDApOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZB
TChzdHJpbmcsIDApOwogICAgIFdURjo6VGV4dENhc2VTZW5zaXRpdml0eSBzZW5zaXRpdmU7CiAK
QEAgLTEzNDksMzggKzEzNDksMzggQEAgdW5zaWduZWQgaW50IGV3a192aWV3X3RleHRfbWF0Y2hl
c19tYXJrKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBjaGFyKiBzdHJpbmcKIAogRWluYV9C
b29sIGV3a192aWV3X3RleHRfbWF0Y2hlc191bm1hcmtfYWxsKEV2YXNfT2JqZWN0KiBld2tWaWV3
KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFM
U0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxT
RSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJ
TkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHBy
aXYsIEVJTkFfRkFMU0UpOwogICAgIHByaXYtPnBhZ2UtPnVubWFya0FsbFRleHRNYXRjaGVzKCk7
CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3RleHRfbWF0
Y2hlc19oaWdobGlnaHRfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wgaGlnaGxp
Z2h0KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFf
RkFMU0UpOwotICAgIHJldHVybiBld2tfZnJhbWVfdGV4dF9tYXRjaGVzX2hpZ2hsaWdodF9zZXQo
c2QtPm1haW5fZnJhbWUsIGhpZ2hsaWdodCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
Tihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIHJldHVybiBld2tfZnJhbWVf
dGV4dF9tYXRjaGVzX2hpZ2hsaWdodF9zZXQoc21hcnREYXRhLT5tYWluX2ZyYW1lLCBoaWdobGln
aHQpOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfdGV4dF9tYXRjaGVzX2hpZ2hsaWdodF9nZXQo
Y29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JF
VFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgcmV0dXJuIGV3a19mcmFtZV90ZXh0
X21hdGNoZXNfaGlnaGxpZ2h0X2dldChzZC0+bWFpbl9mcmFtZSk7CisgICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIHJldHVy
biBld2tfZnJhbWVfdGV4dF9tYXRjaGVzX2hpZ2hsaWdodF9nZXQoc21hcnREYXRhLT5tYWluX2Zy
YW1lKTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X2VkaXRhYmxlX3NldChFdmFzX09iamVjdCog
ZXdrVmlldywgRWluYV9Cb29sIGVkaXRhYmxlKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9S
RVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIHJldHVybiBld2tfZnJhbWVfZWRp
dGFibGVfc2V0KHNkLT5tYWluX2ZyYW1lLCBlZGl0YWJsZSk7CisgICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIHJldHVybiBl
d2tfZnJhbWVfZWRpdGFibGVfc2V0KHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSwgZWRpdGFibGUpOwog
fQogCiBjaGFyKiBld2tfdmlld19zZWxlY3Rpb25fZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tW
aWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIDApOwot
ICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgMCk7Ci0gICAgQ1N0cmlu
ZyBzID0gcHJpdi0+cGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgp
LT5lZGl0b3IoKS0+c2VsZWN0ZWRUZXh0KCkudXRmOCgpOwotICAgIGlmIChzLmlzTnVsbCgpKQor
ICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCAwKTsKKyAg
ICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCAwKTsKKyAgICBD
U3RyaW5nIHNlbGVjdGVkU3RyaW5nID0gcHJpdi0+cGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZv
Y3VzZWRPck1haW5GcmFtZSgpLT5lZGl0b3IoKS0+c2VsZWN0ZWRUZXh0KCkudXRmOCgpOworICAg
IGlmIChzZWxlY3RlZFN0cmluZy5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0
dXJuIHN0cmR1cChzLmRhdGEoKSk7CisgICAgcmV0dXJuIHN0cmR1cChzZWxlY3RlZFN0cmluZy5k
YXRhKCkpOwogfQogCiBzdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19lZGl0b3JfY29tbWFuZChF
d2tfVmlld19Qcml2YXRlX0RhdGEqIHByaXYsIGNvbnN0IGNoYXIqIGNvbW1hbmQsIGNvbnN0IGNo
YXIqIHZhbHVlID0gMCkKQEAgLTEzOTAsOCArMTM5MCw4IEBAIHN0YXRpYyBFaW5hX0Jvb2wgX2V3
a192aWV3X2VkaXRvcl9jb21tYW5kKEV3a19WaWV3X1ByaXZhdGVfRGF0YSogcHJpdiwgY29uc3Qg
Y2hhCiAKIEVpbmFfQm9vbCBld2tfdmlld19leGVjdXRlX2VkaXRvcl9jb21tYW5kKEV2YXNfT2Jq
ZWN0KiBld2tWaWV3LCBjb25zdCBFd2tfRWRpdG9yX0NvbW1hbmQgY29tbWFuZCwgY29uc3QgY2hh
ciogdmFsdWUpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwg
RUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBF
SU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0
RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0
RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CiAKICAgICBzd2l0Y2ggKGNvbW1hbmQpIHsKICAgICBj
YXNlIEVXS19FRElUT1JfQ09NTUFORF9JTlNFUlRfSU1BR0U6CkBAIC0xNDE4LDIzICsxNDE4LDIz
IEBAIEVpbmFfQm9vbCBld2tfdmlld19leGVjdXRlX2VkaXRvcl9jb21tYW5kKEV2YXNfT2JqZWN0
KiBld2tWaWV3LCBjb25zdCBFd2tfRWRpdG9yCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfY29udGV4dF9t
ZW51X2ZvcndhcmRfZXZlbnQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGNvbnN0IEV2YXNfRXZlbnRf
TW91c2VfRG93biogZG93bkV2ZW50KQogewogI2lmIEVOQUJMRShDT05URVhUX01FTlVTKQotICAg
IEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAg
IEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAg
RVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0Up
OworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFf
RkFMU0UpOwogICAgIEVpbmFfQm9vbCBtb3VzZV9wcmVzc19oYW5kbGVkID0gRUlOQV9GQUxTRTsK
IAogICAgIHByaXYtPnBhZ2UtPmNvbnRleHRNZW51Q29udHJvbGxlcigpLT5jbGVhckNvbnRleHRN
ZW51KCk7Ci0gICAgV2ViQ29yZTo6RnJhbWUqIG1haW5fZnJhbWUgPSBwcml2LT5wYWdlLT5tYWlu
RnJhbWUoKTsKKyAgICBXZWJDb3JlOjpGcmFtZSogbWFpbkZyYW1lID0gcHJpdi0+cGFnZS0+bWFp
bkZyYW1lKCk7CiAgICAgRXZhc19Db29yZCB4LCB5OwotICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5
X2dldChzZC0+c2VsZiwgJngsICZ5LCAwLCAwKTsKKyAgICBldmFzX29iamVjdF9nZW9tZXRyeV9n
ZXQoc21hcnREYXRhLT5zZWxmLCAmeCwgJnksIDAsIDApOwogCiAgICAgV2ViQ29yZTo6UGxhdGZv
cm1Nb3VzZUV2ZW50IGV2ZW50KGRvd25FdmVudCwgV2ViQ29yZTo6SW50UG9pbnQoeCwgeSkpOwog
Ci0gICAgaWYgKG1haW5fZnJhbWUtPnZpZXcoKSkgeworICAgIGlmIChtYWluRnJhbWUtPnZpZXco
KSkgewogICAgICAgICBtb3VzZV9wcmVzc19oYW5kbGVkID0KLSAgICAgICAgICAgIG1haW5fZnJh
bWUtPmV2ZW50SGFuZGxlcigpLT5oYW5kbGVNb3VzZVByZXNzRXZlbnQoZXZlbnQpOworICAgICAg
ICAgICAgbWFpbkZyYW1lLT5ldmVudEhhbmRsZXIoKS0+aGFuZGxlTW91c2VQcmVzc0V2ZW50KGV2
ZW50KTsKICAgICB9CiAKLSAgICBpZiAobWFpbl9mcmFtZS0+ZXZlbnRIYW5kbGVyKCktPnNlbmRD
b250ZXh0TWVudUV2ZW50KGV2ZW50KSkKKyAgICBpZiAobWFpbkZyYW1lLT5ldmVudEhhbmRsZXIo
KS0+c2VuZENvbnRleHRNZW51RXZlbnQoZXZlbnQpKQogICAgICAgICByZXR1cm4gRUlOQV9GQUxT
RTsKIAogICAgIFdlYkNvcmU6OkNvbnRleHRNZW51KiBjb3JlTWVudSA9CkBAIC0xNDUzLDg0ICsx
NDUzLDg0IEBAIEVpbmFfQm9vbCBld2tfdmlld19jb250ZXh0X21lbnVfZm9yd2FyZF9ldmVudChF
dmFzX09iamVjdCogZXdrVmlldywgY29uc3QgRXZhc19FCiAKIGRvdWJsZSBld2tfdmlld19sb2Fk
X3Byb2dyZXNzX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklF
V19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAtMS4wKTsKLSAgICBFV0tfVklFV19QUklW
X0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIC0xLjApOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9S
RVRVUk4oZXdrVmlldywgc21hcnREYXRhLCAtMS4wKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9P
Ul9SRVRVUk4oc21hcnREYXRhLCBwcml2LCAtMS4wKTsKICAgICByZXR1cm4gcHJpdi0+cGFnZS0+
cHJvZ3Jlc3MoKS0+ZXN0aW1hdGVkUHJvZ3Jlc3MoKTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3
X3N0b3AoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JF
VFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgcmV0dXJuIGV3a19mcmFtZV9zdG9w
KHNkLT5tYWluX2ZyYW1lKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcs
IHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgcmV0dXJuIGV3a19mcmFtZV9zdG9wKHNtYXJ0
RGF0YS0+bWFpbl9mcmFtZSk7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19yZWxvYWQoRXZhc19P
YmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3
LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgcmV0dXJuIGV3a19mcmFtZV9yZWxvYWQoc2QtPm1haW5f
ZnJhbWUpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRh
LCBFSU5BX0ZBTFNFKTsKKyAgICByZXR1cm4gZXdrX2ZyYW1lX3JlbG9hZChzbWFydERhdGEtPm1h
aW5fZnJhbWUpOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfcmVsb2FkX2Z1bGwoRXZhc19PYmpl
Y3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBz
ZCwgRUlOQV9GQUxTRSk7Ci0gICAgcmV0dXJuIGV3a19mcmFtZV9yZWxvYWRfZnVsbChzZC0+bWFp
bl9mcmFtZSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERh
dGEsIEVJTkFfRkFMU0UpOworICAgIHJldHVybiBld2tfZnJhbWVfcmVsb2FkX2Z1bGwoc21hcnRE
YXRhLT5tYWluX2ZyYW1lKTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X2JhY2soRXZhc19PYmpl
Y3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBz
ZCwgRUlOQV9GQUxTRSk7Ci0gICAgcmV0dXJuIGV3a19mcmFtZV9iYWNrKHNkLT5tYWluX2ZyYW1l
KTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlO
QV9GQUxTRSk7CisgICAgcmV0dXJuIGV3a19mcmFtZV9iYWNrKHNtYXJ0RGF0YS0+bWFpbl9mcmFt
ZSk7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19mb3J3YXJkKEV2YXNfT2JqZWN0KiBld2tWaWV3
KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFM
U0UpOwotICAgIHJldHVybiBld2tfZnJhbWVfZm9yd2FyZChzZC0+bWFpbl9mcmFtZSk7CisgICAg
RVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0Up
OworICAgIHJldHVybiBld2tfZnJhbWVfZm9yd2FyZChzbWFydERhdGEtPm1haW5fZnJhbWUpOwog
fQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfbmF2aWdhdGUoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGlu
dCBzdGVwcykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBF
SU5BX0ZBTFNFKTsKLSAgICByZXR1cm4gZXdrX2ZyYW1lX25hdmlnYXRlKHNkLT5tYWluX2ZyYW1l
LCBzdGVwcyk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERh
dGEsIEVJTkFfRkFMU0UpOworICAgIHJldHVybiBld2tfZnJhbWVfbmF2aWdhdGUoc21hcnREYXRh
LT5tYWluX2ZyYW1lLCBzdGVwcyk7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19iYWNrX3Bvc3Np
YmxlKEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRV
Uk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIHJldHVybiBld2tfZnJhbWVfYmFja19w
b3NzaWJsZShzZC0+bWFpbl9mcmFtZSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihl
d2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIHJldHVybiBld2tfZnJhbWVfYmFj
a19wb3NzaWJsZShzbWFydERhdGEtPm1haW5fZnJhbWUpOwogfQogCiBFaW5hX0Jvb2wgZXdrX3Zp
ZXdfZm9yd2FyZF9wb3NzaWJsZShFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklF
V19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICByZXR1cm4g
ZXdrX2ZyYW1lX2ZvcndhcmRfcG9zc2libGUoc2QtPm1haW5fZnJhbWUpOworICAgIEVXS19WSUVX
X1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBy
ZXR1cm4gZXdrX2ZyYW1lX2ZvcndhcmRfcG9zc2libGUoc21hcnREYXRhLT5tYWluX2ZyYW1lKTsK
IH0KIAogRWluYV9Cb29sIGV3a192aWV3X25hdmlnYXRlX3Bvc3NpYmxlKEV2YXNfT2JqZWN0KiBl
d2tWaWV3LCBpbnQgc3RlcHMpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tW
aWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgcmV0dXJuIGV3a19mcmFtZV9uYXZpZ2F0ZV9wb3Nz
aWJsZShzZC0+bWFpbl9mcmFtZSwgc3RlcHMpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRV
Uk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICByZXR1cm4gZXdrX2ZyYW1l
X25hdmlnYXRlX3Bvc3NpYmxlKHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSwgc3RlcHMpOwogfQogCiBF
aW5hX0Jvb2wgZXdrX3ZpZXdfaGlzdG9yeV9lbmFibGVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBl
d2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJ
TkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlO
QV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERh
dGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERh
dGEsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIHJldHVybiBzdGF0aWNfY2FzdDxXZWJDb3JlOjpC
YWNrRm9yd2FyZExpc3RJbXBsKj4ocHJpdi0+cGFnZS0+YmFja0ZvcndhcmRMaXN0KCkpLT5lbmFi
bGVkKCk7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19oaXN0b3J5X2VuYWJsZV9zZXQoRXZhc19P
YmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCBlbmFibGUpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9H
RVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRf
T1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdf
UFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgc3Rh
dGljX2Nhc3Q8V2ViQ29yZTo6QmFja0ZvcndhcmRMaXN0SW1wbCo+KHByaXYtPnBhZ2UtPmJhY2tG
b3J3YXJkTGlzdCgpKS0+c2V0RW5hYmxlZChlbmFibGUpOwogICAgIHJldHVybiBFSU5BX1RSVUU7
CiB9CiAKIEV3a19IaXN0b3J5KiBld2tfdmlld19oaXN0b3J5X2dldChjb25zdCBFdmFzX09iamVj
dCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNk
LCAwKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIDApOworICAg
IEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCAwKTsKKyAgICBF
V0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCAwKTsKICAgICBpZiAo
IXN0YXRpY19jYXN0PFdlYkNvcmU6OkJhY2tGb3J3YXJkTGlzdEltcGwqPihwcml2LT5wYWdlLT5i
YWNrRm9yd2FyZExpc3QoKSktPmVuYWJsZWQoKSkgewogICAgICAgICBFUlIoImFza2VkIGhpc3Rv
cnksIGJ1dCBpdCdzIGRpc2FibGVkISBSZXR1cm5pbmcgMCEiKTsKICAgICAgICAgcmV0dXJuIDA7
CkBAIC0xNTQwLDE4NiArMTU0MCwxODYgQEAgRXdrX0hpc3RvcnkqIGV3a192aWV3X2hpc3Rvcnlf
Z2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogCiBmbG9hdCBld2tfdmlld196b29tX2dl
dChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1Jf
UkVUVVJOKGV3a1ZpZXcsIHNkLCAtMS4wKTsKLSAgICByZXR1cm4gZXdrX2ZyYW1lX3BhZ2Vfem9v
bV9nZXQoc2QtPm1haW5fZnJhbWUpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdr
Vmlldywgc21hcnREYXRhLCAtMS4wKTsKKyAgICByZXR1cm4gZXdrX2ZyYW1lX3BhZ2Vfem9vbV9n
ZXQoc21hcnREYXRhLT5tYWluX2ZyYW1lKTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3pvb21f
c2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBmbG9hdCB6b29tLCBFdmFzX0Nvb3JkIGN4LCBFdmFz
X0Nvb3JkIGN5KQorRWluYV9Cb29sIGV3a192aWV3X3pvb21fc2V0KEV2YXNfT2JqZWN0KiBld2tW
aWV3LCBmbG9hdCB6b29tLCBFdmFzX0Nvb3JkIGNlbnRlclgsIEV2YXNfQ29vcmQgY2VudGVyWSkK
IHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNF
KTsKLSAgICBFV0tfVklFV19QUklWX0dFVChzZCwgcHJpdik7CisgICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVX
X1BSSVZfR0VUKHNtYXJ0RGF0YSwgcHJpdik7CiAKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTl9WQUwoc2QtPmFwaSwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk5fVkFMKHNkLT5hcGktPnpvb21fc2V0LCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5hcGksIEVJTkFfRkFMU0UpOworICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmFwaS0+em9vbV9zZXQsIEVJ
TkFfRkFMU0UpOwogCi0gICAgaWYgKCFwcml2LT5zZXR0aW5ncy56b29tX3JhbmdlLnVzZXJfc2Nh
bGFibGUpIHsKKyAgICBpZiAoIXByaXYtPnNldHRpbmdzLnpvb21SYW5nZS51c2VyU2NhbGFibGUp
IHsKICAgICAgICAgV1JOKCJ1c2VyU2NhbGFibGUgaXMgZmFsc2UiKTsKICAgICAgICAgcmV0dXJu
IEVJTkFfRkFMU0U7CiAgICAgfQogCi0gICAgaWYgKHpvb20gPCBwcml2LT5zZXR0aW5ncy56b29t
X3JhbmdlLm1pbl9zY2FsZSkgewotICAgICAgICBXUk4oInpvb20gbGV2ZWwgaXMgPCAlZiA6ICVm
IiwgcHJpdi0+c2V0dGluZ3Muem9vbV9yYW5nZS5taW5fc2NhbGUsIHpvb20pOworICAgIGlmICh6
b29tIDwgcHJpdi0+c2V0dGluZ3Muem9vbVJhbmdlLm1pblNjYWxlKSB7CisgICAgICAgIFdSTigi
em9vbSBsZXZlbCBpcyA8ICVmIDogJWYiLCBwcml2LT5zZXR0aW5ncy56b29tUmFuZ2UubWluU2Nh
bGUsIHpvb20pOwogICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKICAgICB9Ci0gICAgaWYgKHpv
b20gPiBwcml2LT5zZXR0aW5ncy56b29tX3JhbmdlLm1heF9zY2FsZSkgewotICAgICAgICBXUk4o
Inpvb20gbGV2ZWwgaXMgPiAlZiA6ICVmIiwgcHJpdi0+c2V0dGluZ3Muem9vbV9yYW5nZS5tYXhf
c2NhbGUsIHpvb20pOworICAgIGlmICh6b29tID4gcHJpdi0+c2V0dGluZ3Muem9vbVJhbmdlLm1h
eFNjYWxlKSB7CisgICAgICAgIFdSTigiem9vbSBsZXZlbCBpcyA+ICVmIDogJWYiLCBwcml2LT5z
ZXR0aW5ncy56b29tUmFuZ2UubWF4U2NhbGUsIHpvb20pOwogICAgICAgICByZXR1cm4gRUlOQV9G
QUxTRTsKICAgICB9CiAKLSAgICBfZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9tYXJrX3N0b3Aoc2Qp
OwotICAgIHJldHVybiBzZC0+YXBpLT56b29tX3NldChzZCwgem9vbSwgY3gsIGN5KTsKKyAgICBf
ZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9tYXJrX3N0b3Aoc21hcnREYXRhKTsKKyAgICByZXR1cm4g
c21hcnREYXRhLT5hcGktPnpvb21fc2V0KHNtYXJ0RGF0YSwgem9vbSwgY2VudGVyWCwgY2VudGVy
WSk7CiB9CiAKIGZsb2F0IGV3a192aWV3X3BhZ2Vfem9vbV9nZXQoY29uc3QgRXZhc19PYmplY3Qq
IGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwg
LTEuMCk7Ci0gICAgcmV0dXJuIGV3a19mcmFtZV9wYWdlX3pvb21fZ2V0KHNkLT5tYWluX2ZyYW1l
KTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgLTEu
MCk7CisgICAgcmV0dXJuIGV3a19mcmFtZV9wYWdlX3pvb21fZ2V0KHNtYXJ0RGF0YS0+bWFpbl9m
cmFtZSk7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19wYWdlX3pvb21fc2V0KEV2YXNfT2JqZWN0
KiBld2tWaWV3LCBmbG9hdCBwYWdlWm9vbUZhY3RvcikKIHsKLSAgICBFV0tfVklFV19TRF9HRVRf
T1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICByZXR1cm4gZXdrX2ZyYW1l
X3BhZ2Vfem9vbV9zZXQoc2QtPm1haW5fZnJhbWUsIHBhZ2Vab29tRmFjdG9yKTsKKyAgICBFV0tf
VklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7Cisg
ICAgcmV0dXJuIGV3a19mcmFtZV9wYWdlX3pvb21fc2V0KHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSwg
cGFnZVpvb21GYWN0b3IpOwogfQogCiBmbG9hdCBld2tfdmlld19zY2FsZV9nZXQoY29uc3QgRXZh
c19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tW
aWV3LCBzZCwgLTEuMCk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2
LCAtMS4wKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0
YSwgLTEuMCk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJp
diwgLTEuMCk7CiAgICAgcmV0dXJuIHByaXYtPnBhZ2UtPnBhZ2VTY2FsZUZhY3RvcigpOwogfQog
Ci1FaW5hX0Jvb2wgZXdrX3ZpZXdfc2NhbGVfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBmbG9h
dCBzY2FsZUZhY3RvciwgRXZhc19Db29yZCBjeCwgRXZhc19Db29yZCBjeSkKK0VpbmFfQm9vbCBl
d2tfdmlld19zY2FsZV9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGZsb2F0IHNjYWxlRmFjdG9y
LCBFdmFzX0Nvb3JkIGNlbnRlclgsIEV2YXNfQ29vcmQgY2VudGVyWSkKIHsKLSAgICBFV0tfVklF
V19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklF
V19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVX
X1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBF
V0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsK
IAogICAgIGZsb2F0IGN1cnJlbnRTY2FsZUZhY3RvciA9IGV3a192aWV3X3NjYWxlX2dldChld2tW
aWV3KTsKICAgICBpZiAoY3VycmVudFNjYWxlRmFjdG9yID09IC0xKQogICAgICAgICByZXR1cm4g
RUlOQV9GQUxTRTsKIAogICAgIGludCB4LCB5OwotICAgIGV3a19mcmFtZV9zY3JvbGxfcG9zX2dl
dChzZC0+bWFpbl9mcmFtZSwgJngsICZ5KTsKKyAgICBld2tfZnJhbWVfc2Nyb2xsX3Bvc19nZXQo
c21hcnREYXRhLT5tYWluX2ZyYW1lLCAmeCwgJnkpOwogCi0gICAgeCA9IHN0YXRpY19jYXN0PGlu
dD4oKCh4ICsgY3gpIC8gY3VycmVudFNjYWxlRmFjdG9yKSAqIHNjYWxlRmFjdG9yKSAtIGN4Owot
ICAgIHkgPSBzdGF0aWNfY2FzdDxpbnQ+KCgoeSArIGN5KSAvIGN1cnJlbnRTY2FsZUZhY3Rvcikg
KiBzY2FsZUZhY3RvcikgLSBjeTsKKyAgICB4ID0gc3RhdGljX2Nhc3Q8aW50PigoKHggKyBjZW50
ZXJYKSAvIGN1cnJlbnRTY2FsZUZhY3RvcikgKiBzY2FsZUZhY3RvcikgLSBjZW50ZXJYOworICAg
IHkgPSBzdGF0aWNfY2FzdDxpbnQ+KCgoeSArIGNlbnRlclkpIC8gY3VycmVudFNjYWxlRmFjdG9y
KSAqIHNjYWxlRmFjdG9yKSAtIGNlbnRlclk7CiAgICAgcHJpdi0+cGFnZS0+c2V0UGFnZVNjYWxl
RmFjdG9yKHNjYWxlRmFjdG9yLCBXZWJDb3JlOjpMYXlvdXRQb2ludCh4LCB5KSk7CiAgICAgcmV0
dXJuIEVJTkFfVFJVRTsKIH0KIAogZmxvYXQgZXdrX3ZpZXdfdGV4dF96b29tX2dldChjb25zdCBF
dmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3
a1ZpZXcsIHNkLCAtMS4wKTsKLSAgICByZXR1cm4gZXdrX2ZyYW1lX3RleHRfem9vbV9nZXQoc2Qt
Pm1haW5fZnJhbWUpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21h
cnREYXRhLCAtMS4wKTsKKyAgICByZXR1cm4gZXdrX2ZyYW1lX3RleHRfem9vbV9nZXQoc21hcnRE
YXRhLT5tYWluX2ZyYW1lKTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3RleHRfem9vbV9zZXQo
RXZhc19PYmplY3QqIGV3a1ZpZXcsIGZsb2F0IHRleHRab29tRmFjdG9yKQogewotICAgIEVXS19W
SUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIHJldHVy
biBld2tfZnJhbWVfdGV4dF96b29tX3NldChzZC0+bWFpbl9mcmFtZSwgdGV4dFpvb21GYWN0b3Ip
OworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5B
X0ZBTFNFKTsKKyAgICByZXR1cm4gZXdrX2ZyYW1lX3RleHRfem9vbV9zZXQoc21hcnREYXRhLT5t
YWluX2ZyYW1lLCB0ZXh0Wm9vbUZhY3Rvcik7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld196b29t
X3dlYWtfc21vb3RoX3NjYWxlX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAg
ICByZXR1cm4gc2QtPnpvb21fd2Vha19zbW9vdGhfc2NhbGU7CisgICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIHJldHVybiBz
bWFydERhdGEtPnpvb21fd2Vha19zbW9vdGhfc2NhbGU7CiB9CiAKIHZvaWQgZXdrX3ZpZXdfem9v
bV93ZWFrX3Ntb290aF9zY2FsZV9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCBz
bW9vdGhTY2FsZSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNk
KTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSk7CiAg
ICAgc21vb3RoU2NhbGUgPSAhIXNtb290aFNjYWxlOwotICAgIGlmIChzZC0+em9vbV93ZWFrX3Nt
b290aF9zY2FsZSA9PSBzbW9vdGhTY2FsZSkKKyAgICBpZiAoc21hcnREYXRhLT56b29tX3dlYWtf
c21vb3RoX3NjYWxlID09IHNtb290aFNjYWxlKQogICAgICAgICByZXR1cm47Ci0gICAgc2QtPnpv
b21fd2Vha19zbW9vdGhfc2NhbGUgPSBzbW9vdGhTY2FsZTsKLSAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTihzZC0+YXBpKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+
YXBpLT56b29tX3dlYWtfc21vb3RoX3NjYWxlX3NldCk7Ci0gICAgc2QtPmFwaS0+em9vbV93ZWFr
X3Ntb290aF9zY2FsZV9zZXQoc2QsIHNtb290aFNjYWxlKTsKKyAgICBzbWFydERhdGEtPnpvb21f
d2Vha19zbW9vdGhfc2NhbGUgPSBzbW9vdGhTY2FsZTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTihzbWFydERhdGEtPmFwaSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4o
c21hcnREYXRhLT5hcGktPnpvb21fd2Vha19zbW9vdGhfc2NhbGVfc2V0KTsKKyAgICBzbWFydERh
dGEtPmFwaS0+em9vbV93ZWFrX3Ntb290aF9zY2FsZV9zZXQoc21hcnREYXRhLCBzbW9vdGhTY2Fs
ZSk7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld196b29tX3dlYWtfc2V0KEV2YXNfT2JqZWN0KiBl
d2tWaWV3LCBmbG9hdCB6b29tLCBFdmFzX0Nvb3JkIGNlbnRlclgsIEV2YXNfQ29vcmQgY2VudGVy
WSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZB
TFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVChzZCwgcHJpdik7CisgICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19W
SUVXX1BSSVZfR0VUKHNtYXJ0RGF0YSwgcHJpdik7CiAKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTl9WQUwoc2QtPmFwaSwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk5fVkFMKHNkLT5hcGktPnpvb21fd2Vha19zZXQsIEVJTkFfRkFMU0UpOworICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmFwaSwgRUlOQV9GQUxTRSk7
CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+YXBpLT56b29t
X3dlYWtfc2V0LCBFSU5BX0ZBTFNFKTsKIAotICAgIGlmICghcHJpdi0+c2V0dGluZ3Muem9vbV9y
YW5nZS51c2VyX3NjYWxhYmxlKSB7CisgICAgaWYgKCFwcml2LT5zZXR0aW5ncy56b29tUmFuZ2Uu
dXNlclNjYWxhYmxlKSB7CiAgICAgICAgIFdSTigidXNlclNjYWxhYmxlIGlzIGZhbHNlIik7CiAg
ICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwogICAgIH0KIAotICAgIGlmICh6b29tIDwgcHJpdi0+
c2V0dGluZ3Muem9vbV9yYW5nZS5taW5fc2NhbGUpIHsKLSAgICAgICAgV1JOKCJ6b29tIGxldmVs
IGlzIDwgJWYgOiAlZiIsIHByaXYtPnNldHRpbmdzLnpvb21fcmFuZ2UubWluX3NjYWxlLCB6b29t
KTsKKyAgICBpZiAoem9vbSA8IHByaXYtPnNldHRpbmdzLnpvb21SYW5nZS5taW5TY2FsZSkgewor
ICAgICAgICBXUk4oInpvb20gbGV2ZWwgaXMgPCAlZiA6ICVmIiwgcHJpdi0+c2V0dGluZ3Muem9v
bVJhbmdlLm1pblNjYWxlLCB6b29tKTsKICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CiAgICAg
fQotICAgIGlmICh6b29tID4gcHJpdi0+c2V0dGluZ3Muem9vbV9yYW5nZS5tYXhfc2NhbGUpIHsK
LSAgICAgICAgV1JOKCJ6b29tIGxldmVsIGlzID4gJWYgOiAlZiIsIHByaXYtPnNldHRpbmdzLnpv
b21fcmFuZ2UubWF4X3NjYWxlLCB6b29tKTsKKyAgICBpZiAoem9vbSA+IHByaXYtPnNldHRpbmdz
Lnpvb21SYW5nZS5tYXhTY2FsZSkgeworICAgICAgICBXUk4oInpvb20gbGV2ZWwgaXMgPiAlZiA6
ICVmIiwgcHJpdi0+c2V0dGluZ3Muem9vbVJhbmdlLm1heFNjYWxlLCB6b29tKTsKICAgICAgICAg
cmV0dXJuIEVJTkFfRkFMU0U7CiAgICAgfQogCi0gICAgc2QtPmFuaW1hdGVkX3pvb20uem9vbS5z
dGFydCA9IGV3a19mcmFtZV9wYWdlX3pvb21fZ2V0KHNkLT5tYWluX2ZyYW1lKTsKLSAgICBzZC0+
YW5pbWF0ZWRfem9vbS56b29tLmVuZCA9IHpvb207Ci0gICAgc2QtPmFuaW1hdGVkX3pvb20uem9v
bS5jdXJyZW50ID0gem9vbTsKLSAgICByZXR1cm4gc2QtPmFwaS0+em9vbV93ZWFrX3NldChzZCwg
em9vbSwgY2VudGVyWCwgY2VudGVyWSk7CisgICAgc21hcnREYXRhLT5hbmltYXRlZF96b29tLnpv
b20uc3RhcnQgPSBld2tfZnJhbWVfcGFnZV96b29tX2dldChzbWFydERhdGEtPm1haW5fZnJhbWUp
OworICAgIHNtYXJ0RGF0YS0+YW5pbWF0ZWRfem9vbS56b29tLmVuZCA9IHpvb207CisgICAgc21h
cnREYXRhLT5hbmltYXRlZF96b29tLnpvb20uY3VycmVudCA9IHpvb207CisgICAgcmV0dXJuIHNt
YXJ0RGF0YS0+YXBpLT56b29tX3dlYWtfc2V0KHNtYXJ0RGF0YSwgem9vbSwgY2VudGVyWCwgY2Vu
dGVyWSk7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld196b29tX2FuaW1hdGVkX21hcmtfc3RhcnQo
RXZhc19PYmplY3QqIGV3a1ZpZXcsIGZsb2F0IHpvb20pCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgc2QtPmFuaW1hdGVkX3pv
b20uem9vbS5zdGFydCA9IHpvb207CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tW
aWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIHNtYXJ0RGF0YS0+YW5pbWF0ZWRfem9v
bS56b29tLnN0YXJ0ID0gem9vbTsKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCiBFaW5hX0Jv
b2wgZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9tYXJrX2VuZChFdmFzX09iamVjdCogZXdrVmlldywg
ZmxvYXQgem9vbSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNk
LCBFSU5BX0ZBTFNFKTsKLSAgICBzZC0+YW5pbWF0ZWRfem9vbS56b29tLmVuZCA9IHpvb207Cisg
ICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFM
U0UpOworICAgIHNtYXJ0RGF0YS0+YW5pbWF0ZWRfem9vbS56b29tLmVuZCA9IHpvb207CiAgICAg
cmV0dXJuIEVJTkFfVFJVRTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3pvb21fYW5pbWF0ZWRf
bWFya19jdXJyZW50KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBmbG9hdCB6b29tKQogewotICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIHNk
LT5hbmltYXRlZF96b29tLnpvb20uY3VycmVudCA9IHpvb207CisgICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIHNtYXJ0RGF0
YS0+YW5pbWF0ZWRfem9vbS56b29tLmN1cnJlbnQgPSB6b29tOwogICAgIHJldHVybiBFSU5BX1RS
VUU7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld196b29tX2FuaW1hdGVkX21hcmtfc3RvcChFdmFz
X09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1Zp
ZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBfZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9tYXJrX3N0
b3Aoc2QpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRh
LCBFSU5BX0ZBTFNFKTsKKyAgICBfZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9tYXJrX3N0b3Aoc21h
cnREYXRhKTsKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdf
em9vbV9hbmltYXRlZF9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGZsb2F0IHpvb20sIGZsb2F0
IGR1cmF0aW9uLCBFdmFzX0Nvb3JkIGNlbnRlclgsIEV2YXNfQ29vcmQgY2VudGVyWSkKIHsKICAg
ICBkb3VibGUgbm93OwotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2Qs
IEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwg
RUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5hcGks
IEVJTkFfRkFMU0UpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+YXBp
LT56b29tX3dlYWtfc2V0LCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVU
VVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9H
RVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZF
VFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+YXBpLCBFSU5BX0ZBTFNFKTsKKyAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5hcGktPnpvb21fd2Vha19z
ZXQsIEVJTkFfRkFMU0UpOwogCi0gICAgaWYgKCFwcml2LT5zZXR0aW5ncy56b29tX3JhbmdlLnVz
ZXJfc2NhbGFibGUpIHsKKyAgICBpZiAoIXByaXYtPnNldHRpbmdzLnpvb21SYW5nZS51c2VyU2Nh
bGFibGUpIHsKICAgICAgICAgV1JOKCJ1c2VyU2NhbGFibGUgaXMgZmFsc2UiKTsKICAgICAgICAg
cmV0dXJuIEVJTkFfRkFMU0U7CiAgICAgfQogCi0gICAgaWYgKHpvb20gPCBwcml2LT5zZXR0aW5n
cy56b29tX3JhbmdlLm1pbl9zY2FsZSkgewotICAgICAgICBXUk4oInpvb20gbGV2ZWwgaXMgPCAl
ZiA6ICVmIiwgcHJpdi0+c2V0dGluZ3Muem9vbV9yYW5nZS5taW5fc2NhbGUsIHpvb20pOworICAg
IGlmICh6b29tIDwgcHJpdi0+c2V0dGluZ3Muem9vbVJhbmdlLm1pblNjYWxlKSB7CisgICAgICAg
IFdSTigiem9vbSBsZXZlbCBpcyA8ICVmIDogJWYiLCBwcml2LT5zZXR0aW5ncy56b29tUmFuZ2Uu
bWluU2NhbGUsIHpvb20pOwogICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKICAgICB9Ci0gICAg
aWYgKHpvb20gPiBwcml2LT5zZXR0aW5ncy56b29tX3JhbmdlLm1heF9zY2FsZSkgewotICAgICAg
ICBXUk4oInpvb20gbGV2ZWwgaXMgPiAlZiA6ICVmIiwgcHJpdi0+c2V0dGluZ3Muem9vbV9yYW5n
ZS5tYXhfc2NhbGUsIHpvb20pOworICAgIGlmICh6b29tID4gcHJpdi0+c2V0dGluZ3Muem9vbVJh
bmdlLm1heFNjYWxlKSB7CisgICAgICAgIFdSTigiem9vbSBsZXZlbCBpcyA+ICVmIDogJWYiLCBw
cml2LT5zZXR0aW5ncy56b29tUmFuZ2UubWF4U2NhbGUsIHpvb20pOwogICAgICAgICByZXR1cm4g
RUlOQV9GQUxTRTsKICAgICB9CiAKLSAgICBpZiAocHJpdi0+YW5pbWF0ZWRfem9vbS5hbmltYXRv
cikKLSAgICAgICAgcHJpdi0+YW5pbWF0ZWRfem9vbS56b29tLnN0YXJ0ID0gX2V3a192aWV3X3pv
b21fYW5pbWF0ZWRfY3VycmVudChwcml2KTsKKyAgICBpZiAocHJpdi0+YW5pbWF0ZWRab29tLmFu
aW1hdG9yKQorICAgICAgICBwcml2LT5hbmltYXRlZFpvb20uem9vbS5zdGFydCA9IF9ld2tfdmll
d196b29tX2FuaW1hdGVkX2N1cnJlbnQocHJpdik7CiAgICAgZWxzZSB7Ci0gICAgICAgIHByaXYt
PmFuaW1hdGVkX3pvb20uem9vbS5zdGFydCA9IGV3a19mcmFtZV9wYWdlX3pvb21fZ2V0KHNkLT5t
YWluX2ZyYW1lKTsKLSAgICAgICAgX2V3a192aWV3X3pvb21fYW5pbWF0aW9uX3N0YXJ0KHNkKTsK
KyAgICAgICAgcHJpdi0+YW5pbWF0ZWRab29tLnpvb20uc3RhcnQgPSBld2tfZnJhbWVfcGFnZV96
b29tX2dldChzbWFydERhdGEtPm1haW5fZnJhbWUpOworICAgICAgICBfZXdrX3ZpZXdfem9vbV9h
bmltYXRpb25fc3RhcnQoc21hcnREYXRhKTsKICAgICB9CiAKICAgICBpZiAoY2VudGVyWCA8IDAp
CkBAIC0xNzI4LDUwICsxNzI4LDUwIEBAIEVpbmFfQm9vbCBld2tfdmlld196b29tX2FuaW1hdGVk
X3NldChFdmFzX09iamVjdCogZXdrVmlldywgZmxvYXQgem9vbSwgZmxvYXQgZHVyCiAgICAgICAg
IGNlbnRlclkgPSAwOwogCiAgICAgbm93ID0gZWNvcmVfbG9vcF90aW1lX2dldCgpOwotICAgIHBy
aXYtPmFuaW1hdGVkX3pvb20udGltZS5zdGFydCA9IG5vdzsKLSAgICBwcml2LT5hbmltYXRlZF96
b29tLnRpbWUuZW5kID0gbm93ICsgZHVyYXRpb247Ci0gICAgcHJpdi0+YW5pbWF0ZWRfem9vbS50
aW1lLmR1cmF0aW9uID0gZHVyYXRpb247Ci0gICAgcHJpdi0+YW5pbWF0ZWRfem9vbS56b29tLmVu
ZCA9IHpvb207Ci0gICAgcHJpdi0+YW5pbWF0ZWRfem9vbS56b29tLnJhbmdlID0gKHByaXYtPmFu
aW1hdGVkX3pvb20uem9vbS5lbmQgLSBwcml2LT5hbmltYXRlZF96b29tLnpvb20uc3RhcnQpOwot
ICAgIHByaXYtPmFuaW1hdGVkX3pvb20uY2VudGVyLnggPSBjZW50ZXJYOwotICAgIHByaXYtPmFu
aW1hdGVkX3pvb20uY2VudGVyLnkgPSBjZW50ZXJZOwotICAgIHNkLT5hbmltYXRlZF96b29tLnpv
b20uY3VycmVudCA9IHByaXYtPmFuaW1hdGVkX3pvb20uem9vbS5zdGFydDsKLSAgICBzZC0+YW5p
bWF0ZWRfem9vbS56b29tLnN0YXJ0ID0gcHJpdi0+YW5pbWF0ZWRfem9vbS56b29tLnN0YXJ0Owot
ICAgIHNkLT5hbmltYXRlZF96b29tLnpvb20uZW5kID0gcHJpdi0+YW5pbWF0ZWRfem9vbS56b29t
LmVuZDsKKyAgICBwcml2LT5hbmltYXRlZFpvb20udGltZS5zdGFydCA9IG5vdzsKKyAgICBwcml2
LT5hbmltYXRlZFpvb20udGltZS5lbmQgPSBub3cgKyBkdXJhdGlvbjsKKyAgICBwcml2LT5hbmlt
YXRlZFpvb20udGltZS5kdXJhdGlvbiA9IGR1cmF0aW9uOworICAgIHByaXYtPmFuaW1hdGVkWm9v
bS56b29tLmVuZCA9IHpvb207CisgICAgcHJpdi0+YW5pbWF0ZWRab29tLnpvb20ucmFuZ2UgPSAo
cHJpdi0+YW5pbWF0ZWRab29tLnpvb20uZW5kIC0gcHJpdi0+YW5pbWF0ZWRab29tLnpvb20uc3Rh
cnQpOworICAgIHByaXYtPmFuaW1hdGVkWm9vbS5jZW50ZXIueCA9IGNlbnRlclg7CisgICAgcHJp
di0+YW5pbWF0ZWRab29tLmNlbnRlci55ID0gY2VudGVyWTsKKyAgICBzbWFydERhdGEtPmFuaW1h
dGVkX3pvb20uem9vbS5jdXJyZW50ID0gcHJpdi0+YW5pbWF0ZWRab29tLnpvb20uc3RhcnQ7Cisg
ICAgc21hcnREYXRhLT5hbmltYXRlZF96b29tLnpvb20uc3RhcnQgPSBwcml2LT5hbmltYXRlZFpv
b20uem9vbS5zdGFydDsKKyAgICBzbWFydERhdGEtPmFuaW1hdGVkX3pvb20uem9vbS5lbmQgPSBw
cml2LT5hbmltYXRlZFpvb20uem9vbS5lbmQ7CiAKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQog
CiBFaW5hX0Jvb2wgZXdrX3ZpZXdfcHJlX3JlbmRlcl9yZWdpb24oRXZhc19PYmplY3QqIGV3a1Zp
ZXcsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5LCBFdmFzX0Nvb3JkIHdpZHRoLCBFdmFzX0Nv
b3JkIGhlaWdodCwgZmxvYXQgem9vbSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJO
KGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRV
Uk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJO
X1ZBTChzZC0+YXBpLT5wcmVfcmVuZGVyX3JlZ2lvbiwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJ
RVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAg
IEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0Up
OworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmFwaS0+cHJl
X3JlbmRlcl9yZWdpb24sIEVJTkFfRkFMU0UpOwogICAgIGZsb2F0IGN1cl96b29tOwotICAgIEV2
YXNfQ29vcmQgY3csIGNoOworICAgIEV2YXNfQ29vcmQgY29udGVudHNXaWR0aCwgY29udGVudHNI
ZWlnaHQ7CiAKICAgICAvKiBXaGVuIGRvaW5nIGFuaW1hdGVkIHpvb20gaXQncyBub3QgcG9zc2li
bGUgdG8gY2FsbCBwcmUtcmVuZGVyIHNpbmNlIGl0CiAgICAgICogd291bGQgc2NyZXcgdXAgcGFy
YW1ldGVycyB0aGF0IGFuaW1hdGlvbiBpcyBjdXJyZW50bHkgdXNpbmcKICAgICAgKi8KLSAgICBp
ZiAocHJpdi0+YW5pbWF0ZWRfem9vbS5hbmltYXRvcikKKyAgICBpZiAocHJpdi0+YW5pbWF0ZWRa
b29tLmFuaW1hdG9yKQogICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKIAotICAgIGN1cl96b29t
ID0gZXdrX2ZyYW1lX3BhZ2Vfem9vbV9nZXQoc2QtPm1haW5fZnJhbWUpOworICAgIGN1cl96b29t
ID0gZXdrX2ZyYW1lX3BhZ2Vfem9vbV9nZXQoc21hcnREYXRhLT5tYWluX2ZyYW1lKTsKIAogICAg
IGlmIChjdXJfem9vbSA8IDAuMDAwMDEpCiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwotICAg
IGlmICghZXdrX2ZyYW1lX2NvbnRlbnRzX3NpemVfZ2V0KHNkLT5tYWluX2ZyYW1lLCAmY3csICZj
aCkpCisgICAgaWYgKCFld2tfZnJhbWVfY29udGVudHNfc2l6ZV9nZXQoc21hcnREYXRhLT5tYWlu
X2ZyYW1lLCAmY29udGVudHNXaWR0aCwgJmNvbnRlbnRzSGVpZ2h0KSkKICAgICAgICAgcmV0dXJu
IEVJTkFfRkFMU0U7CiAKLSAgICBjdyAqPSB6b29tIC8gY3VyX3pvb207Ci0gICAgY2ggKj0gem9v
bSAvIGN1cl96b29tOwotICAgIERCRygicmVnaW9uICVkLCVkKyVkeCVkIEAgJWYgY29udGVudHM9
JWR4JWQiLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCB6b29tLCBjdywgY2gpOworICAgIGNvbnRlbnRz
V2lkdGggKj0gem9vbSAvIGN1cl96b29tOworICAgIGNvbnRlbnRzSGVpZ2h0ICo9IHpvb20gLyBj
dXJfem9vbTsKKyAgICBEQkcoInJlZ2lvbiAlZCwlZCslZHglZCBAICVmIGNvbnRlbnRzPSVkeCVk
IiwgeCwgeSwgd2lkdGgsIGhlaWdodCwgem9vbSwgY29udGVudHNXaWR0aCwgY29udGVudHNIZWln
aHQpOwogCi0gICAgaWYgKHggKyB3aWR0aCA+IGN3KQotICAgICAgICB3aWR0aCA9IGN3IC0geDsK
KyAgICBpZiAoeCArIHdpZHRoID4gY29udGVudHNXaWR0aCkKKyAgICAgICAgd2lkdGggPSBjb250
ZW50c1dpZHRoIC0geDsKIAotICAgIGlmICh5ICsgaGVpZ2h0ID4gY2gpCi0gICAgICAgIGhlaWdo
dCA9IGNoIC0geTsKKyAgICBpZiAoeSArIGhlaWdodCA+IGNvbnRlbnRzSGVpZ2h0KQorICAgICAg
ICBoZWlnaHQgPSBjb250ZW50c0hlaWdodCAtIHk7CiAKICAgICBpZiAoeCA8IDApIHsKICAgICAg
ICAgd2lkdGggKz0geDsKQEAgLTE3ODIsNjQgKzE3ODIsNjQgQEAgRWluYV9Cb29sIGV3a192aWV3
X3ByZV9yZW5kZXJfcmVnaW9uKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFdmFzX0Nvb3JkIHgsIEV2
YXNfQ28KICAgICAgICAgeSA9IDA7CiAgICAgfQogCi0gICAgcmV0dXJuIHNkLT5hcGktPnByZV9y
ZW5kZXJfcmVnaW9uKHNkLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCB6b29tKTsKKyAgICByZXR1cm4g
c21hcnREYXRhLT5hcGktPnByZV9yZW5kZXJfcmVnaW9uKHNtYXJ0RGF0YSwgeCwgeSwgd2lkdGgs
IGhlaWdodCwgem9vbSk7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19wcmVfcmVuZGVyX3JlbGF0
aXZlX3JhZGl1cyhFdmFzX09iamVjdCogZXdrVmlldywgdW5zaWduZWQgaW50IG51bWJlcikKIHsK
LSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsK
LSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwot
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+YXBpLT5wcmVfcmVuZGVyX3Jl
bGF0aXZlX3JhZGl1cywgRUlOQV9GQUxTRSk7Ci0gICAgZmxvYXQgY3VyX3pvb207CisgICAgRVdL
X1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOwor
ICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFM
U0UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmFwaS0+
cHJlX3JlbmRlcl9yZWxhdGl2ZV9yYWRpdXMsIEVJTkFfRkFMU0UpOworICAgIGZsb2F0IGN1cnJl
bnRab29tOwogCi0gICAgaWYgKHByaXYtPmFuaW1hdGVkX3pvb20uYW5pbWF0b3IpCisgICAgaWYg
KHByaXYtPmFuaW1hdGVkWm9vbS5hbmltYXRvcikKICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7
CiAKLSAgICBjdXJfem9vbSA9IGV3a19mcmFtZV9wYWdlX3pvb21fZ2V0KHNkLT5tYWluX2ZyYW1l
KTsKLSAgICByZXR1cm4gc2QtPmFwaS0+cHJlX3JlbmRlcl9yZWxhdGl2ZV9yYWRpdXMoc2QsIG51
bWJlciwgY3VyX3pvb20pOworICAgIGN1cnJlbnRab29tID0gZXdrX2ZyYW1lX3BhZ2Vfem9vbV9n
ZXQoc21hcnREYXRhLT5tYWluX2ZyYW1lKTsKKyAgICByZXR1cm4gc21hcnREYXRhLT5hcGktPnBy
ZV9yZW5kZXJfcmVsYXRpdmVfcmFkaXVzKHNtYXJ0RGF0YSwgbnVtYmVyLCBjdXJyZW50Wm9vbSk7
CiB9CiAKIHVuc2lnbmVkIGludCBld2tfdmlld19pbWhfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBl
d2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIDAp
OwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgMCk7CisgICAgRVdL
X1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIDApOworICAgIEVXS19W
SUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIDApOwogICAgIHJldHVybiBw
cml2LT5pbWg7CiB9CiAKIHZvaWQgZXdrX3ZpZXdfcHJlX3JlbmRlcl9jYW5jZWwoRXZhc19PYmpl
Y3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBz
ZCk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFwaS0+cHJlX3JlbmRlcl9j
YW5jZWwpOwotICAgIHNkLT5hcGktPnByZV9yZW5kZXJfY2FuY2VsKHNkKTsKKyAgICBFV0tfVklF
V19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSk7CisgICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk4oc21hcnREYXRhLT5hcGktPnByZV9yZW5kZXJfY2FuY2VsKTsKKyAgICBz
bWFydERhdGEtPmFwaS0+cHJlX3JlbmRlcl9jYW5jZWwoc21hcnREYXRhKTsKIH0KIAogRWluYV9C
b29sIGV3a192aWV3X2VuYWJsZV9yZW5kZXIoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7
Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7
Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5hcGktPmVuYWJsZV9yZW5k
ZXIsIEVJTkFfRkFMU0UpOwotICAgIHJldHVybiBzZC0+YXBpLT5lbmFibGVfcmVuZGVyKHNkKTsK
KyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9G
QUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+YXBp
LT5lbmFibGVfcmVuZGVyLCBFSU5BX0ZBTFNFKTsKKyAgICByZXR1cm4gc21hcnREYXRhLT5hcGkt
PmVuYWJsZV9yZW5kZXIoc21hcnREYXRhKTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X2Rpc2Fi
bGVfcmVuZGVyKGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NE
X0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOX1ZBTChzZC0+YXBpLT5kaXNhYmxlX3JlbmRlciwgRUlOQV9GQUxTRSk7
Ci0gICAgcmV0dXJuIHNkLT5hcGktPmRpc2FibGVfcmVuZGVyKHNkKTsKKyAgICBFV0tfVklFV19T
RF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+YXBpLT5kaXNhYmxlX3JlbmRl
ciwgRUlOQV9GQUxTRSk7CisgICAgcmV0dXJuIHNtYXJ0RGF0YS0+YXBpLT5kaXNhYmxlX3JlbmRl
cihzbWFydERhdGEpOwogfQogCiBjb25zdCBjaGFyKiBld2tfdmlld19zZXR0aW5nX3VzZXJfYWdl
bnRfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dF
VF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIDApOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JF
VFVSTihzZCwgcHJpdiwgMCk7Ci0gICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLnVzZXJfYWdlbnQ7
CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIDApOwor
ICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIDApOworICAg
IHJldHVybiBwcml2LT5zZXR0aW5ncy51c2VyQWdlbnQ7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmll
d19zZXR0aW5nX3VzZXJfYWdlbnRfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBjaGFy
KiB1c2VyQWdlbnQpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBz
ZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2
LCBFSU5BX0ZBTFNFKTsKLSAgICBpZiAoZWluYV9zdHJpbmdzaGFyZV9yZXBsYWNlKCZwcml2LT5z
ZXR0aW5ncy51c2VyX2FnZW50LCB1c2VyQWdlbnQpKSB7Ci0gICAgICAgIFdlYkNvcmU6OkZyYW1l
TG9hZGVyQ2xpZW50RWZsKiBjbGllbnQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpGcmFtZUxvYWRl
ckNsaWVudEVmbCo+KHByaXYtPm1haW5fZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKSk7CisgICAg
RVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0Up
OworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFf
RkFMU0UpOworICAgIGlmIChlaW5hX3N0cmluZ3NoYXJlX3JlcGxhY2UoJnByaXYtPnNldHRpbmdz
LnVzZXJBZ2VudCwgdXNlckFnZW50KSkgeworICAgICAgICBXZWJDb3JlOjpGcmFtZUxvYWRlckNs
aWVudEVmbCogY2xpZW50ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRF
ZmwqPihwcml2LT5tYWluRnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKSk7CiAgICAgICAgIGNsaWVu
dC0+c2V0Q3VzdG9tVXNlckFnZW50KFN0cmluZzo6ZnJvbVVURjgodXNlckFnZW50KSk7CiAgICAg
fQogICAgIHJldHVybiBFSU5BX1RSVUU7CkBAIC0xODQ3LDIyMyArMTg0NywyMjMgQEAgRWluYV9C
b29sIGV3a192aWV3X3NldHRpbmdfdXNlcl9hZ2VudF9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcs
IGNvbnN0IGNoYXIqIHVzZXIKIAogY29uc3QgY2hhciogZXdrX3ZpZXdfc2V0dGluZ191c2VyX3N0
eWxlc2hlZXRfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVX
X1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIDApOwotICAgIEVXS19WSUVXX1BSSVZfR0VU
X09SX1JFVFVSTihzZCwgcHJpdiwgMCk7Ci0gICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLnVzZXJf
c3R5bGVzaGVldDsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0
RGF0YSwgMCk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJp
diwgMCk7CisgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLnVzZXJTdHlsZXNoZWV0OwogfQogCiBF
aW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ191c2VyX3N0eWxlc2hlZXRfc2V0KEV2YXNfT2JqZWN0
KiBld2tWaWV3LCBjb25zdCBjaGFyKiB1cmkpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JF
VFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1Jf
UkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKLSAgICBpZiAoZWluYV9zdHJpbmdzaGFyZV9y
ZXBsYWNlKCZwcml2LT5zZXR0aW5ncy51c2VyX3N0eWxlc2hlZXQsIHVyaSkpIHsKKyAgICBFV0tf
VklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7Cisg
ICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxT
RSk7CisgICAgaWYgKGVpbmFfc3RyaW5nc2hhcmVfcmVwbGFjZSgmcHJpdi0+c2V0dGluZ3MudXNl
clN0eWxlc2hlZXQsIHVyaSkpIHsKICAgICAgICAgV2ViQ29yZTo6S1VSTCBrdXJsKFdlYkNvcmU6
OktVUkwoKSwgU3RyaW5nOjpmcm9tVVRGOCh1cmkpKTsKLSAgICAgICAgcHJpdi0+cGFnZV9zZXR0
aW5ncy0+c2V0VXNlclN0eWxlU2hlZXRMb2NhdGlvbihrdXJsKTsKKyAgICAgICAgcHJpdi0+cGFn
ZVNldHRpbmdzLT5zZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uKGt1cmwpOwogICAgIH0KICAgICBy
ZXR1cm4gRUlOQV9UUlVFOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19hdXRvX2xv
YWRfaW1hZ2VzX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklF
V19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklF
V19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwotICAgIHJldHVybiBw
cml2LT5zZXR0aW5ncy5hdXRvX2xvYWRfaW1hZ2VzOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9S
RVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklW
X0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICByZXR1cm4g
cHJpdi0+c2V0dGluZ3MuYXV0b0xvYWRJbWFnZXM7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19z
ZXR0aW5nX2F1dG9fbG9hZF9pbWFnZXNfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jv
b2wgYXV0b21hdGljKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywg
c2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJp
diwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBz
bWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihz
bWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIGF1dG9tYXRpYyA9ICEhYXV0b21hdGlj
OwotICAgIGlmIChwcml2LT5zZXR0aW5ncy5hdXRvX2xvYWRfaW1hZ2VzICE9IGF1dG9tYXRpYykg
ewotICAgICAgICBwcml2LT5wYWdlX3NldHRpbmdzLT5zZXRMb2Fkc0ltYWdlc0F1dG9tYXRpY2Fs
bHkoYXV0b21hdGljKTsKLSAgICAgICAgcHJpdi0+c2V0dGluZ3MuYXV0b19sb2FkX2ltYWdlcyA9
IGF1dG9tYXRpYzsKKyAgICBpZiAocHJpdi0+c2V0dGluZ3MuYXV0b0xvYWRJbWFnZXMgIT0gYXV0
b21hdGljKSB7CisgICAgICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0TG9hZHNJbWFnZXNBdXRv
bWF0aWNhbGx5KGF1dG9tYXRpYyk7CisgICAgICAgIHByaXYtPnNldHRpbmdzLmF1dG9Mb2FkSW1h
Z2VzID0gYXV0b21hdGljOwogICAgIH0KICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCiBFaW5h
X0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19hdXRvX3Nocmlua19pbWFnZXNfZ2V0KGNvbnN0IEV2YXNf
T2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmll
dywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwg
cHJpdiwgRUlOQV9GQUxTRSk7Ci0gICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmF1dG9fc2hyaW5r
X2ltYWdlczsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0
YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0
YSwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmF1dG9TaHJp
bmtJbWFnZXM7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2F1dG9fc2hyaW5rX2lt
YWdlc19zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCBhdXRvbWF0aWMpCiB7Ci0g
ICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0g
ICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxT
RSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlO
QV9GQUxTRSk7CiAgICAgYXV0b21hdGljID0gISFhdXRvbWF0aWM7Ci0gICAgaWYgKHByaXYtPnNl
dHRpbmdzLmF1dG9fc2hyaW5rX2ltYWdlcyAhPSBhdXRvbWF0aWMpIHsKLSAgICAgICAgcHJpdi0+
cGFnZV9zZXR0aW5ncy0+c2V0U2hyaW5rc1N0YW5kYWxvbmVJbWFnZXNUb0ZpdChhdXRvbWF0aWMp
OwotICAgICAgICBwcml2LT5zZXR0aW5ncy5hdXRvX3Nocmlua19pbWFnZXMgPSBhdXRvbWF0aWM7
CisgICAgaWYgKHByaXYtPnNldHRpbmdzLmF1dG9TaHJpbmtJbWFnZXMgIT0gYXV0b21hdGljKSB7
CisgICAgICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0U2hyaW5rc1N0YW5kYWxvbmVJbWFnZXNU
b0ZpdChhdXRvbWF0aWMpOworICAgICAgICBwcml2LT5zZXR0aW5ncy5hdXRvU2hyaW5rSW1hZ2Vz
ID0gYXV0b21hdGljOwogICAgIH0KICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCiBFaW5hX0Jv
b2wgZXdrX3ZpZXdfc2V0dGluZ19lbmFibGVfYXV0b19yZXNpemVfd2luZG93X2dldChjb25zdCBF
dmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3
a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4o
c2QsIHByaXYsIEVJTkFfRkFMU0UpOwotICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5lbmFibGVf
YXV0b19yZXNpemVfd2luZG93OworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmll
dywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRV
Uk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICByZXR1cm4gcHJpdi0+c2V0dGlu
Z3MuZW5hYmxlQXV0b1Jlc2l6ZVdpbmRvdzsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3NldHRp
bmdfZW5hYmxlX2F1dG9fcmVzaXplX3dpbmRvd19zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVp
bmFfQm9vbCByZXNpemFibGUpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tW
aWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNk
LCBwcml2LCBFSU5BX0ZBTFNFKTsKLSAgICBwcml2LT5zZXR0aW5ncy5lbmFibGVfYXV0b19yZXNp
emVfd2luZG93ID0gcmVzaXphYmxlOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdr
Vmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9S
RVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBwcml2LT5zZXR0aW5ncy5l
bmFibGVBdXRvUmVzaXplV2luZG93ID0gcmVzaXphYmxlOwogICAgIHJldHVybiBFSU5BX1RSVUU7
CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2VuYWJsZV9zY3JpcHRzX2dldChjb25z
dCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJO
KGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRV
Uk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwotICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5lbmFi
bGVfc2NyaXB0czsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0
RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0
RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmVuYWJs
ZVNjcmlwdHM7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2VuYWJsZV9zY3JpcHRz
X3NldChFdmFzX09iamVjdCogZXdrVmlldywgRWluYV9Cb29sIGVuYWJsZSkKIHsKLSAgICBFV0tf
VklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tf
VklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIEVXS19W
SUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAg
ICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNF
KTsKICAgICBlbmFibGUgPSAhIWVuYWJsZTsKLSAgICBpZiAocHJpdi0+c2V0dGluZ3MuZW5hYmxl
X3NjcmlwdHMgIT0gZW5hYmxlKSB7Ci0gICAgICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNldEph
dmFTY3JpcHRFbmFibGVkKGVuYWJsZSk7Ci0gICAgICAgIHByaXYtPnNldHRpbmdzLmVuYWJsZV9z
Y3JpcHRzID0gZW5hYmxlOworICAgIGlmIChwcml2LT5zZXR0aW5ncy5lbmFibGVTY3JpcHRzICE9
IGVuYWJsZSkgeworICAgICAgICBwcml2LT5wYWdlU2V0dGluZ3MtPnNldEphdmFTY3JpcHRFbmFi
bGVkKGVuYWJsZSk7CisgICAgICAgIHByaXYtPnNldHRpbmdzLmVuYWJsZVNjcmlwdHMgPSBlbmFi
bGU7CiAgICAgfQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmll
d19zZXR0aW5nX2VuYWJsZV9wbHVnaW5zX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykK
IHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNF
KTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0Up
OwotICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5lbmFibGVfcGx1Z2luczsKKyAgICBFV0tfVklF
V19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAg
RVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7
CisgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmVuYWJsZVBsdWdpbnM7CiB9CiAKIEVpbmFfQm9v
bCBld2tfdmlld19zZXR0aW5nX2VuYWJsZV9wbHVnaW5zX3NldChFdmFzX09iamVjdCogZXdrVmll
dywgRWluYV9Cb29sIGVuYWJsZSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3
a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4o
c2QsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdr
Vmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9S
RVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBlbmFibGUgPSAhIWVuYWJs
ZTsKLSAgICBpZiAocHJpdi0+c2V0dGluZ3MuZW5hYmxlX3BsdWdpbnMgIT0gZW5hYmxlKSB7Ci0g
ICAgICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNldFBsdWdpbnNFbmFibGVkKGVuYWJsZSk7Ci0g
ICAgICAgIHByaXYtPnNldHRpbmdzLmVuYWJsZV9wbHVnaW5zID0gZW5hYmxlOworICAgIGlmIChw
cml2LT5zZXR0aW5ncy5lbmFibGVQbHVnaW5zICE9IGVuYWJsZSkgeworICAgICAgICBwcml2LT5w
YWdlU2V0dGluZ3MtPnNldFBsdWdpbnNFbmFibGVkKGVuYWJsZSk7CisgICAgICAgIHByaXYtPnNl
dHRpbmdzLmVuYWJsZVBsdWdpbnMgPSBlbmFibGU7CiAgICAgfQogICAgIHJldHVybiBFSU5BX1RS
VUU7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2VuYWJsZV9mcmFtZV9mbGF0dGVu
aW5nX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9H
RVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklW
X0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwotICAgIHJldHVybiBwcml2LT5z
ZXR0aW5ncy5lbmFibGVfZnJhbWVfZmxhdHRlbmluZzsKKyAgICBFV0tfVklFV19TRF9HRVRfT1Jf
UkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJ
Vl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgcmV0dXJu
IHByaXYtPnNldHRpbmdzLmVuYWJsZUZyYW1lRmxhdHRlbmluZzsKIH0KIAogRWluYV9Cb29sIGV3
a192aWV3X3NldHRpbmdfZW5hYmxlX2ZyYW1lX2ZsYXR0ZW5pbmdfc2V0KEV2YXNfT2JqZWN0KiBl
d2tWaWV3LCBFaW5hX0Jvb2wgZW5hYmxlKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRV
Uk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JF
VFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
Tihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VU
X09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIGVuYWJsZSA9ICEh
ZW5hYmxlOwotICAgIGlmIChwcml2LT5zZXR0aW5ncy5lbmFibGVfZnJhbWVfZmxhdHRlbmluZyAh
PSBlbmFibGUpIHsKLSAgICAgICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0RnJhbWVGbGF0dGVu
aW5nRW5hYmxlZChlbmFibGUpOwotICAgICAgICBwcml2LT5zZXR0aW5ncy5lbmFibGVfZnJhbWVf
ZmxhdHRlbmluZyA9IGVuYWJsZTsKKyAgICBpZiAocHJpdi0+c2V0dGluZ3MuZW5hYmxlRnJhbWVG
bGF0dGVuaW5nICE9IGVuYWJsZSkgeworICAgICAgICBwcml2LT5wYWdlU2V0dGluZ3MtPnNldEZy
YW1lRmxhdHRlbmluZ0VuYWJsZWQoZW5hYmxlKTsKKyAgICAgICAgcHJpdi0+c2V0dGluZ3MuZW5h
YmxlRnJhbWVGbGF0dGVuaW5nID0gZW5hYmxlOwogICAgIH0KICAgICByZXR1cm4gRUlOQV9UUlVF
OwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19zY3JpcHRzX3dpbmRvd19vcGVuX2dl
dChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1Jf
UkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9P
Ul9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwotICAgIHJldHVybiBwcml2LT5zZXR0aW5n
cy5zY3JpcHRzX3dpbmRvd19vcGVuOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdr
Vmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9S
RVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICByZXR1cm4gcHJpdi0+c2V0
dGluZ3Muc2NyaXB0c1dpbmRvd09wZW47CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5n
X3NjcmlwdHNfd2luZG93X29wZW5fc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wg
YWxsb3cpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlO
QV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5B
X0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0
YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0
YSwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgYWxsb3cgPSAhIWFsbG93OwotICAgIGlmIChwcml2
LT5zZXR0aW5ncy5zY3JpcHRzX3dpbmRvd19vcGVuICE9IGFsbG93KSB7Ci0gICAgICAgIHByaXYt
PnBhZ2Vfc2V0dGluZ3MtPnNldEphdmFTY3JpcHRDYW5PcGVuV2luZG93c0F1dG9tYXRpY2FsbHko
YWxsb3cpOwotICAgICAgICBwcml2LT5zZXR0aW5ncy5zY3JpcHRzX3dpbmRvd19vcGVuID0gYWxs
b3c7CisgICAgaWYgKHByaXYtPnNldHRpbmdzLnNjcmlwdHNXaW5kb3dPcGVuICE9IGFsbG93KSB7
CisgICAgICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0SmF2YVNjcmlwdENhbk9wZW5XaW5kb3dz
QXV0b21hdGljYWxseShhbGxvdyk7CisgICAgICAgIHByaXYtPnNldHRpbmdzLnNjcmlwdHNXaW5k
b3dPcGVuID0gYWxsb3c7CiAgICAgfQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKIEVpbmFf
Qm9vbCBld2tfdmlld19zZXR0aW5nX3NjcmlwdHNfY2FuX2Nsb3NlX3dpbmRvd3NfZ2V0KGNvbnN0
IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVS
TihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7Ci0gICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLnNjcmlw
dHNfY2FuX2Nsb3NlX3dpbmRvd3M7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tW
aWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JF
VFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIHJldHVybiBwcml2LT5zZXR0
aW5ncy5zY3JpcHRzQ2FuQ2xvc2VXaW5kb3dzOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0
dGluZ19zY3JpcHRzX2Nhbl9jbG9zZV93aW5kb3dzX3NldChFdmFzX09iamVjdCogZXdrVmlldywg
RWluYV9Cb29sIGFsbG93KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmll
dywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwg
cHJpdiwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3
LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVS
TihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIGFsbG93ID0gISFhbGxvdzsKLSAg
ICBpZiAocHJpdi0+c2V0dGluZ3Muc2NyaXB0c19jYW5fY2xvc2Vfd2luZG93cyAhPSBhbGxvdykg
ewotICAgICAgICBwcml2LT5wYWdlX3NldHRpbmdzLT5zZXRBbGxvd1NjcmlwdHNUb0Nsb3NlV2lu
ZG93cyhhbGxvdyk7Ci0gICAgICAgIHByaXYtPnNldHRpbmdzLnNjcmlwdHNfY2FuX2Nsb3NlX3dp
bmRvd3MgPSBhbGxvdzsKKyAgICBpZiAocHJpdi0+c2V0dGluZ3Muc2NyaXB0c0NhbkNsb3NlV2lu
ZG93cyAhPSBhbGxvdykgeworICAgICAgICBwcml2LT5wYWdlU2V0dGluZ3MtPnNldEFsbG93U2Ny
aXB0c1RvQ2xvc2VXaW5kb3dzKGFsbG93KTsKKyAgICAgICAgcHJpdi0+c2V0dGluZ3Muc2NyaXB0
c0NhbkNsb3NlV2luZG93cyA9IGFsbG93OwogICAgIH0KICAgICByZXR1cm4gRUlOQV9UUlVFOwog
fQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19yZXNpemFibGVfdGV4dGFyZWFzX2dldChj
b25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVU
VVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9S
RVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwotICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5y
ZXNpemFibGVfdGV4dGFyZWFzOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmll
dywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRV
Uk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICByZXR1cm4gcHJpdi0+c2V0dGlu
Z3MucmVzaXphYmxlVGV4dGFyZWFzOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19y
ZXNpemFibGVfdGV4dGFyZWFzX3NldChFdmFzX09iamVjdCogZXdrVmlldywgRWluYV9Cb29sIGVu
YWJsZSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5B
X0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFf
RkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRh
LCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRh
LCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBlbmFibGUgPSAhIWVuYWJsZTsKLSAgICBpZiAocHJp
di0+c2V0dGluZ3MucmVzaXphYmxlX3RleHRhcmVhcyAhPSBlbmFibGUpIHsKLSAgICAgICAgcHJp
di0+cGFnZV9zZXR0aW5ncy0+c2V0VGV4dEFyZWFzQXJlUmVzaXphYmxlKGVuYWJsZSk7Ci0gICAg
ICAgIHByaXYtPnNldHRpbmdzLnJlc2l6YWJsZV90ZXh0YXJlYXMgPSBlbmFibGU7CisgICAgaWYg
KHByaXYtPnNldHRpbmdzLnJlc2l6YWJsZVRleHRhcmVhcyAhPSBlbmFibGUpIHsKKyAgICAgICAg
cHJpdi0+cGFnZVNldHRpbmdzLT5zZXRUZXh0QXJlYXNBcmVSZXNpemFibGUoZW5hYmxlKTsKKyAg
ICAgICAgcHJpdi0+c2V0dGluZ3MucmVzaXphYmxlVGV4dGFyZWFzID0gZW5hYmxlOwogICAgIH0K
ICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19w
cml2YXRlX2Jyb3dzaW5nX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBF
V0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBF
V0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwotICAgIHJl
dHVybiBwcml2LT5zZXR0aW5ncy5wcml2YXRlX2Jyb3dzaW5nOworICAgIEVXS19WSUVXX1NEX0dF
VF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklF
V19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBy
ZXR1cm4gcHJpdi0+c2V0dGluZ3MucHJpdmF0ZUJyb3dzaW5nOwogfQogCiBFaW5hX0Jvb2wgZXdr
X3ZpZXdfc2V0dGluZ19wcml2YXRlX2Jyb3dzaW5nX3NldChFdmFzX09iamVjdCogZXdrVmlldywg
RWluYV9Cb29sIGVuYWJsZSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1Zp
ZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2Qs
IHByaXYsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmll
dywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRV
Uk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBlbmFibGUgPSAhIWVuYWJsZTsK
LSAgICBpZiAocHJpdi0+c2V0dGluZ3MucHJpdmF0ZV9icm93c2luZyAhPSBlbmFibGUpIHsKLSAg
ICAgICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChlbmFi
bGUpOwotICAgICAgICBwcml2LT5zZXR0aW5ncy5wcml2YXRlX2Jyb3dzaW5nID0gZW5hYmxlOwor
ICAgIGlmIChwcml2LT5zZXR0aW5ncy5wcml2YXRlQnJvd3NpbmcgIT0gZW5hYmxlKSB7CisgICAg
ICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0UHJpdmF0ZUJyb3dzaW5nRW5hYmxlZChlbmFibGUp
OworICAgICAgICBwcml2LT5zZXR0aW5ncy5wcml2YXRlQnJvd3NpbmcgPSBlbmFibGU7CiAgICAg
fQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5n
X29mZmxpbmVfYXBwX2NhY2hlX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAg
ICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwotICAg
IHJldHVybiBwcml2LT5zZXR0aW5ncy5vZmZsaW5lX2FwcF9jYWNoZTsKKyAgICBFV0tfVklFV19T
RF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdL
X1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7Cisg
ICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLm9mZmxpbmVBcHBDYWNoZTsKIH0KIAogRWluYV9Cb29s
IGV3a192aWV3X3NldHRpbmdfb2ZmbGluZV9hcHBfY2FjaGVfc2V0KEV2YXNfT2JqZWN0KiBld2tW
aWV3LCBFaW5hX0Jvb2wgZW5hYmxlKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVS
TihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihl
d2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09S
X1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIGVuYWJsZSA9ICEhZW5h
YmxlOwotICAgIGlmIChwcml2LT5zZXR0aW5ncy5vZmZsaW5lX2FwcF9jYWNoZSAhPSBlbmFibGUp
IHsKLSAgICAgICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0T2ZmbGluZVdlYkFwcGxpY2F0aW9u
Q2FjaGVFbmFibGVkKGVuYWJsZSk7Ci0gICAgICAgIHByaXYtPnNldHRpbmdzLm9mZmxpbmVfYXBw
X2NhY2hlID0gZW5hYmxlOworICAgIGlmIChwcml2LT5zZXR0aW5ncy5vZmZsaW5lQXBwQ2FjaGUg
IT0gZW5hYmxlKSB7CisgICAgICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0T2ZmbGluZVdlYkFw
cGxpY2F0aW9uQ2FjaGVFbmFibGVkKGVuYWJsZSk7CisgICAgICAgIHByaXYtPnNldHRpbmdzLm9m
ZmxpbmVBcHBDYWNoZSA9IGVuYWJsZTsKICAgICB9CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0K
QEAgLTIwNzEsMjcgKzIwNzEsMjcgQEAgRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfb2ZmbGlu
ZV9hcHBfY2FjaGVfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wKIAogRWluYV9C
b29sIGV3a192aWV3X3NldHRpbmdfY2FyZXRfYnJvd3NpbmdfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0
KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2Qs
IEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwg
RUlOQV9GQUxTRSk7Ci0gICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmNhcmV0X2Jyb3dzaW5nOwor
ICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZB
TFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBF
SU5BX0ZBTFNFKTsKKyAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuY2FyZXRCcm93c2luZzsKIH0K
IAogRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfY2FyZXRfYnJvd3Npbmdfc2V0KEV2YXNfT2Jq
ZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wgZW5hYmxlKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9P
Ul9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VU
X09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BS
SVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIGVuYWJs
ZSA9ICEhZW5hYmxlOwotICAgIGlmIChwcml2LT5zZXR0aW5ncy5jYXJldF9icm93c2luZyAhPSBl
bmFibGUpIHsKLSAgICAgICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0Q2FyZXRCcm93c2luZ0Vu
YWJsZWQoZW5hYmxlKTsKLSAgICAgICAgcHJpdi0+c2V0dGluZ3MuY2FyZXRfYnJvd3NpbmcgPSBl
bmFibGU7CisgICAgaWYgKHByaXYtPnNldHRpbmdzLmNhcmV0QnJvd3NpbmcgIT0gZW5hYmxlKSB7
CisgICAgICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0Q2FyZXRCcm93c2luZ0VuYWJsZWQoZW5h
YmxlKTsKKyAgICAgICAgcHJpdi0+c2V0dGluZ3MuY2FyZXRCcm93c2luZyA9IGVuYWJsZTsKICAg
ICB9CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAogY29uc3QgY2hhciogZXdrX3ZpZXdfc2V0
dGluZ19lbmNvZGluZ19jdXN0b21fZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewot
ICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIDApOwotICAgIEVXS19W
SUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgMCk7CisgICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIDApOworICAgIEVXS19WSUVXX1BSSVZfR0VU
X09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIDApOwogICAgIEV2YXNfT2JqZWN0KiBtYWluX2Zy
YW1lID0gZXdrX3ZpZXdfZnJhbWVfbWFpbl9nZXQoZXdrVmlldyk7CiAgICAgV2ViQ29yZTo6RnJh
bWUqIGNvcmVfZnJhbWUgPSBld2tfZnJhbWVfY29yZV9nZXQobWFpbl9mcmFtZSk7CiAKQEAgLTIx
MDAsMTk5ICsyMTAwLDE5OSBAQCBjb25zdCBjaGFyKiBld2tfdmlld19zZXR0aW5nX2VuY29kaW5n
X2N1c3RvbV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiAgICAgaWYgKG92ZXJyaWRl
RW5jb2RpbmcuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIGVpbmFfc3RyaW5n
c2hhcmVfcmVwbGFjZSgmcHJpdi0+c2V0dGluZ3MuZW5jb2RpbmdfY3VzdG9tLCBvdmVycmlkZUVu
Y29kaW5nLnV0ZjgoKS5kYXRhKCkpOwotICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5lbmNvZGlu
Z19jdXN0b207CisgICAgZWluYV9zdHJpbmdzaGFyZV9yZXBsYWNlKCZwcml2LT5zZXR0aW5ncy5l
bmNvZGluZ0N1c3RvbSwgb3ZlcnJpZGVFbmNvZGluZy51dGY4KCkuZGF0YSgpKTsKKyAgICByZXR1
cm4gcHJpdi0+c2V0dGluZ3MuZW5jb2RpbmdDdXN0b207CiB9CiAKIEVpbmFfQm9vbCBld2tfdmll
d19zZXR0aW5nX2VuY29kaW5nX2N1c3RvbV9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGNvbnN0
IGNoYXIqIGVuY29kaW5nKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmll
dywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwg
cHJpdiwgRUlOQV9GQUxTRSk7Ci0gICAgRXZhc19PYmplY3QqIG1haW5fZnJhbWUgPSBld2tfdmll
d19mcmFtZV9tYWluX2dldChld2tWaWV3KTsKLSAgICBXZWJDb3JlOjpGcmFtZSogY29yZV9mcmFt
ZSA9IGV3a19mcmFtZV9jb3JlX2dldChtYWluX2ZyYW1lKTsKKyAgICBFV0tfVklFV19TRF9HRVRf
T1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdf
UFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgRXZh
c19PYmplY3QqIG1haW5GcmFtZSA9IGV3a192aWV3X2ZyYW1lX21haW5fZ2V0KGV3a1ZpZXcpOwor
ICAgIFdlYkNvcmU6OkZyYW1lKiBjb3JlRnJhbWUgPSBld2tfZnJhbWVfY29yZV9nZXQobWFpbkZy
YW1lKTsKICAgICBEQkcoIiVzIiwgZW5jb2RpbmcpOwotICAgIGlmIChlaW5hX3N0cmluZ3NoYXJl
X3JlcGxhY2UoJnByaXYtPnNldHRpbmdzLmVuY29kaW5nX2N1c3RvbSwgZW5jb2RpbmcpKQotICAg
ICAgICBjb3JlX2ZyYW1lLT5sb2FkZXIoKS0+cmVsb2FkV2l0aE92ZXJyaWRlRW5jb2RpbmcoU3Ry
aW5nOjpmcm9tVVRGOChlbmNvZGluZykpOworICAgIGlmIChlaW5hX3N0cmluZ3NoYXJlX3JlcGxh
Y2UoJnByaXYtPnNldHRpbmdzLmVuY29kaW5nQ3VzdG9tLCBlbmNvZGluZykpCisgICAgICAgIGNv
cmVGcmFtZS0+bG9hZGVyKCktPnJlbG9hZFdpdGhPdmVycmlkZUVuY29kaW5nKFN0cmluZzo6ZnJv
bVVURjgoZW5jb2RpbmcpKTsKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCiBjb25zdCBjaGFy
KiBld2tfdmlld19zZXR0aW5nX2VuY29kaW5nX2RlZmF1bHRfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0
KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2Qs
IDApOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgMCk7Ci0gICAg
cmV0dXJuIHByaXYtPnNldHRpbmdzLmVuY29kaW5nX2RlZmF1bHQ7CisgICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIDApOworICAgIEVXS19WSUVXX1BSSVZf
R0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIDApOworICAgIHJldHVybiBwcml2LT5zZXR0
aW5ncy5lbmNvZGluZ0RlZmF1bHQ7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2Vu
Y29kaW5nX2RlZmF1bHRfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBjaGFyKiBlbmNv
ZGluZykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5B
X0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFf
RkFMU0UpOwotICAgIGlmIChlaW5hX3N0cmluZ3NoYXJlX3JlcGxhY2UoJnByaXYtPnNldHRpbmdz
LmVuY29kaW5nX2RlZmF1bHQsIGVuY29kaW5nKSkKLSAgICAgICAgcHJpdi0+cGFnZV9zZXR0aW5n
cy0+c2V0RGVmYXVsdFRleHRFbmNvZGluZ05hbWUoU3RyaW5nOjpmcm9tVVRGOChlbmNvZGluZykp
OworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5B
X0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2
LCBFSU5BX0ZBTFNFKTsKKyAgICBpZiAoZWluYV9zdHJpbmdzaGFyZV9yZXBsYWNlKCZwcml2LT5z
ZXR0aW5ncy5lbmNvZGluZ0RlZmF1bHQsIGVuY29kaW5nKSkKKyAgICAgICAgcHJpdi0+cGFnZVNl
dHRpbmdzLT5zZXREZWZhdWx0VGV4dEVuY29kaW5nTmFtZShTdHJpbmc6OmZyb21VVEY4KGVuY29k
aW5nKSk7CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3Nl
dHRpbmdfZW5jb2RpbmdfZGV0ZWN0b3Jfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jv
b2wgZW5hYmxlKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2Qs
IEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwg
RUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFy
dERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFy
dERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIGVuYWJsZSA9ICEhZW5hYmxlOwotICAgIGlm
IChwcml2LT5zZXR0aW5ncy5lbmNvZGluZ19kZXRlY3RvciAhPSBlbmFibGUpIHsKLSAgICAgICAg
cHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0VXNlc0VuY29kaW5nRGV0ZWN0b3IoZW5hYmxlKTsKLSAg
ICAgICAgcHJpdi0+c2V0dGluZ3MuZW5jb2RpbmdfZGV0ZWN0b3IgPSBlbmFibGU7CisgICAgaWYg
KHByaXYtPnNldHRpbmdzLmVuY29kaW5nRGV0ZWN0b3IgIT0gZW5hYmxlKSB7CisgICAgICAgIHBy
aXYtPnBhZ2VTZXR0aW5ncy0+c2V0VXNlc0VuY29kaW5nRGV0ZWN0b3IoZW5hYmxlKTsKKyAgICAg
ICAgcHJpdi0+c2V0dGluZ3MuZW5jb2RpbmdEZXRlY3RvciA9IGVuYWJsZTsKICAgICB9CiAgICAg
cmV0dXJuIEVJTkFfVFJVRTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfZW5jb2Rp
bmdfZGV0ZWN0b3JfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19W
SUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19W
SUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7Ci0gICAgcmV0dXJu
IHByaXYtPnNldHRpbmdzLmVuY29kaW5nX2RldGVjdG9yOworICAgIEVXS19WSUVXX1NEX0dFVF9P
Ul9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19Q
UklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICByZXR1
cm4gcHJpdi0+c2V0dGluZ3MuZW5jb2RpbmdEZXRlY3RvcjsKIH0KIAogRWluYV9Cb29sIGV3a192
aWV3X3NldHRpbmdfZW5hYmxlX2RldmVsb3Blcl9leHRyYXNfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0
KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2Qs
IEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwg
RUlOQV9GQUxTRSk7Ci0gICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmVuYWJsZV9kZXZlbG9wZXJf
ZXh0cmFzOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRh
LCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRh
LCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZW5hYmxlRGV2
ZWxvcGVyRXh0cmFzOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19lbmFibGVfZGV2
ZWxvcGVyX2V4dHJhc19zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCBlbmFibGUp
CiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxT
RSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNF
KTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlO
QV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJp
diwgRUlOQV9GQUxTRSk7CiAgICAgZW5hYmxlID0gISFlbmFibGU7Ci0gICAgaWYgKHByaXYtPnNl
dHRpbmdzLmVuYWJsZV9kZXZlbG9wZXJfZXh0cmFzICE9IGVuYWJsZSkgewotICAgICAgICBwcml2
LT5wYWdlX3NldHRpbmdzLT5zZXREZXZlbG9wZXJFeHRyYXNFbmFibGVkKGVuYWJsZSk7Ci0gICAg
ICAgIHByaXYtPnNldHRpbmdzLmVuYWJsZV9kZXZlbG9wZXJfZXh0cmFzID0gZW5hYmxlOworICAg
IGlmIChwcml2LT5zZXR0aW5ncy5lbmFibGVEZXZlbG9wZXJFeHRyYXMgIT0gZW5hYmxlKSB7Cisg
ICAgICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZChlbmFi
bGUpOworICAgICAgICBwcml2LT5zZXR0aW5ncy5lbmFibGVEZXZlbG9wZXJFeHRyYXMgPSBlbmFi
bGU7CiAgICAgfQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKIGludCBld2tfdmlld19zZXR0
aW5nX2ZvbnRfbWluaW11bV9zaXplX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsK
LSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAwKTsKLSAgICBFV0tf
VklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIDApOwotICAgIHJldHVybiBwcml2LT5z
ZXR0aW5ncy5mb250X21pbmltdW1fc2l6ZTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJO
KGV3a1ZpZXcsIHNtYXJ0RGF0YSwgMCk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJO
KHNtYXJ0RGF0YSwgcHJpdiwgMCk7CisgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmZvbnRNaW5p
bXVtU2l6ZTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfZm9udF9taW5pbXVtX3Np
emVfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBpbnQgc2l6ZSkKIHsKLSAgICBFV0tfVklFV19T
RF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19Q
UklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwotICAgIGlmIChwcml2LT5z
ZXR0aW5ncy5mb250X21pbmltdW1fc2l6ZSAhPSBzaXplKSB7Ci0gICAgICAgIHByaXYtPnBhZ2Vf
c2V0dGluZ3MtPnNldE1pbmltdW1Gb250U2l6ZShzaXplKTsKLSAgICAgICAgcHJpdi0+c2V0dGlu
Z3MuZm9udF9taW5pbXVtX3NpemUgPSBzaXplOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRV
Uk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dF
VF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBpZiAocHJpdi0+
c2V0dGluZ3MuZm9udE1pbmltdW1TaXplICE9IHNpemUpIHsKKyAgICAgICAgcHJpdi0+cGFnZVNl
dHRpbmdzLT5zZXRNaW5pbXVtRm9udFNpemUoc2l6ZSk7CisgICAgICAgIHByaXYtPnNldHRpbmdz
LmZvbnRNaW5pbXVtU2l6ZSA9IHNpemU7CiAgICAgfQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9
CiAKIGludCBld2tfdmlld19zZXR0aW5nX2ZvbnRfbWluaW11bV9sb2dpY2FsX3NpemVfZ2V0KGNv
bnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRV
Uk4oZXdrVmlldywgc2QsIDApOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwg
cHJpdiwgMCk7Ci0gICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmZvbnRfbWluaW11bV9sb2dpY2Fs
X3NpemU7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEs
IDApOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIDAp
OworICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5mb250TWluaW11bUxvZ2ljYWxTaXplOwogfQog
CiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19mb250X21pbmltdW1fbG9naWNhbF9zaXplX3Nl
dChFdmFzX09iamVjdCogZXdrVmlldywgaW50IHNpemUpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9H
RVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKLSAgICBpZiAocHJpdi0+c2V0dGlu
Z3MuZm9udF9taW5pbXVtX2xvZ2ljYWxfc2l6ZSAhPSBzaXplKSB7Ci0gICAgICAgIHByaXYtPnBh
Z2Vfc2V0dGluZ3MtPnNldE1pbmltdW1Mb2dpY2FsRm9udFNpemUoc2l6ZSk7Ci0gICAgICAgIHBy
aXYtPnNldHRpbmdzLmZvbnRfbWluaW11bV9sb2dpY2FsX3NpemUgPSBzaXplOworICAgIEVXS19W
SUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAg
ICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNF
KTsKKyAgICBpZiAocHJpdi0+c2V0dGluZ3MuZm9udE1pbmltdW1Mb2dpY2FsU2l6ZSAhPSBzaXpl
KSB7CisgICAgICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0TWluaW11bUxvZ2ljYWxGb250U2l6
ZShzaXplKTsKKyAgICAgICAgcHJpdi0+c2V0dGluZ3MuZm9udE1pbmltdW1Mb2dpY2FsU2l6ZSA9
IHNpemU7CiAgICAgfQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKIGludCBld2tfdmlld19z
ZXR0aW5nX2ZvbnRfZGVmYXVsdF9zaXplX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykK
IHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAwKTsKLSAgICBF
V0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIDApOwotICAgIHJldHVybiBwcml2
LT5zZXR0aW5ncy5mb250X2RlZmF1bHRfc2l6ZTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVU
VVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgMCk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVU
VVJOKHNtYXJ0RGF0YSwgcHJpdiwgMCk7CisgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmZvbnRE
ZWZhdWx0U2l6ZTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfZm9udF9kZWZhdWx0
X3NpemVfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBpbnQgc2l6ZSkKIHsKLSAgICBFV0tfVklF
V19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklF
V19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwotICAgIGlmIChwcml2
LT5zZXR0aW5ncy5mb250X2RlZmF1bHRfc2l6ZSAhPSBzaXplKSB7Ci0gICAgICAgIHByaXYtPnBh
Z2Vfc2V0dGluZ3MtPnNldERlZmF1bHRGb250U2l6ZShzaXplKTsKLSAgICAgICAgcHJpdi0+c2V0
dGluZ3MuZm9udF9kZWZhdWx0X3NpemUgPSBzaXplOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9S
RVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklW
X0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBpZiAocHJp
di0+c2V0dGluZ3MuZm9udERlZmF1bHRTaXplICE9IHNpemUpIHsKKyAgICAgICAgcHJpdi0+cGFn
ZVNldHRpbmdzLT5zZXREZWZhdWx0Rm9udFNpemUoc2l6ZSk7CisgICAgICAgIHByaXYtPnNldHRp
bmdzLmZvbnREZWZhdWx0U2l6ZSA9IHNpemU7CiAgICAgfQogICAgIHJldHVybiBFSU5BX1RSVUU7
CiB9CiAKIGludCBld2tfdmlld19zZXR0aW5nX2ZvbnRfbW9ub3NwYWNlX3NpemVfZ2V0KGNvbnN0
IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrVmlldywgc2QsIDApOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJp
diwgMCk7Ci0gICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmZvbnRfbW9ub3NwYWNlX3NpemU7Cisg
ICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIDApOworICAg
IEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIDApOworICAgIHJl
dHVybiBwcml2LT5zZXR0aW5ncy5mb250TW9ub3NwYWNlU2l6ZTsKIH0KIAogRWluYV9Cb29sIGV3
a192aWV3X3NldHRpbmdfZm9udF9tb25vc3BhY2Vfc2l6ZV9zZXQoRXZhc19PYmplY3QqIGV3a1Zp
ZXcsIGludCBzaXplKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywg
c2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJp
diwgRUlOQV9GQUxTRSk7Ci0gICAgaWYgKHByaXYtPnNldHRpbmdzLmZvbnRfbW9ub3NwYWNlX3Np
emUgIT0gc2l6ZSkgewotICAgICAgICBwcml2LT5wYWdlX3NldHRpbmdzLT5zZXREZWZhdWx0Rml4
ZWRGb250U2l6ZShzaXplKTsKLSAgICAgICAgcHJpdi0+c2V0dGluZ3MuZm9udF9tb25vc3BhY2Vf
c2l6ZSA9IHNpemU7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFy
dERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFy
dERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIGlmIChwcml2LT5zZXR0aW5ncy5mb250TW9u
b3NwYWNlU2l6ZSAhPSBzaXplKSB7CisgICAgICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0RGVm
YXVsdEZpeGVkRm9udFNpemUoc2l6ZSk7CisgICAgICAgIHByaXYtPnNldHRpbmdzLmZvbnRNb25v
c3BhY2VTaXplID0gc2l6ZTsKICAgICB9CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAogY29u
c3QgY2hhciogZXdrX3ZpZXdfZm9udF9mYW1pbHlfbmFtZV9nZXQoY29uc3QgRXZhc19PYmplY3Qq
IGV3a1ZpZXcsIEV3a19Gb250X0ZhbWlseSBmb250RmFtaWx5KQogewotICAgIEVXS19WSUVXX1NE
X0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIDApOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09S
X1JFVFVSTihzZCwgcHJpdiwgMCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tW
aWV3LCBzbWFydERhdGEsIDApOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFy
dERhdGEsIHByaXYsIDApOwogCiAgICAgc3dpdGNoIChmb250RmFtaWx5KSB7CiAgICAgY2FzZSBF
V0tfRk9OVF9GQU1JTFlfU1RBTkRBUkQ6Ci0gICAgICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5m
b250X3N0YW5kYXJkOworICAgICAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZm9udFN0YW5kYXJk
OwogICAgIGNhc2UgRVdLX0ZPTlRfRkFNSUxZX0NVUlNJVkU6Ci0gICAgICAgIHJldHVybiBwcml2
LT5zZXR0aW5ncy5mb250X2N1cnNpdmU7CisgICAgICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5m
b250Q3Vyc2l2ZTsKICAgICBjYXNlIEVXS19GT05UX0ZBTUlMWV9GQU5UQVNZOgotICAgICAgICBy
ZXR1cm4gcHJpdi0+c2V0dGluZ3MuZm9udF9mYW50YXN5OworICAgICAgICByZXR1cm4gcHJpdi0+
c2V0dGluZ3MuZm9udEZhbnRhc3k7CiAgICAgY2FzZSBFV0tfRk9OVF9GQU1JTFlfTU9OT1NQQUNF
OgotICAgICAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZm9udF9tb25vc3BhY2U7CisgICAgICAg
IHJldHVybiBwcml2LT5zZXR0aW5ncy5mb250TW9ub3NwYWNlOwogICAgIGNhc2UgRVdLX0ZPTlRf
RkFNSUxZX1NFUklGOgotICAgICAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZm9udF9zZXJpZjsK
KyAgICAgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmZvbnRTZXJpZjsKICAgICBjYXNlIEVXS19G
T05UX0ZBTUlMWV9TQU5TX1NFUklGOgotICAgICAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZm9u
dF9zYW5zX3NlcmlmOworICAgICAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZm9udFNhbnNTZXJp
ZjsKICAgICB9CiAgICAgcmV0dXJuIDA7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19mb250X2Zh
bWlseV9uYW1lX3NldChFdmFzX09iamVjdCogZXdrVmlldywgRXdrX0ZvbnRfRmFtaWx5IGZvbnRG
YW1pbHksIGNvbnN0IGNoYXIqIG5hbWUpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
Tihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVU
VVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJO
KGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRf
T1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CiAKICAgICBzd2l0Y2ggKGZv
bnRGYW1pbHkpIHsKICAgICBjYXNlIEVXS19GT05UX0ZBTUlMWV9TVEFOREFSRDoKLSAgICAgICAg
aWYgKGVpbmFfc3RyaW5nc2hhcmVfcmVwbGFjZSgmcHJpdi0+c2V0dGluZ3MuZm9udF9zdGFuZGFy
ZCwgbmFtZSkpCi0gICAgICAgICAgICBwcml2LT5wYWdlX3NldHRpbmdzLT5zZXRTdGFuZGFyZEZv
bnRGYW1pbHkoQXRvbWljU3RyaW5nOjpmcm9tVVRGOChuYW1lKSk7CisgICAgICAgIGlmIChlaW5h
X3N0cmluZ3NoYXJlX3JlcGxhY2UoJnByaXYtPnNldHRpbmdzLmZvbnRTdGFuZGFyZCwgbmFtZSkp
CisgICAgICAgICAgICBwcml2LT5wYWdlU2V0dGluZ3MtPnNldFN0YW5kYXJkRm9udEZhbWlseShB
dG9taWNTdHJpbmc6OmZyb21VVEY4KG5hbWUpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBF
V0tfRk9OVF9GQU1JTFlfQ1VSU0lWRToKLSAgICAgICAgaWYgKGVpbmFfc3RyaW5nc2hhcmVfcmVw
bGFjZSgmcHJpdi0+c2V0dGluZ3MuZm9udF9jdXJzaXZlLCBuYW1lKSkKLSAgICAgICAgICAgIHBy
aXYtPnBhZ2Vfc2V0dGluZ3MtPnNldEN1cnNpdmVGb250RmFtaWx5KEF0b21pY1N0cmluZzo6ZnJv
bVVURjgobmFtZSkpOworICAgICAgICBpZiAoZWluYV9zdHJpbmdzaGFyZV9yZXBsYWNlKCZwcml2
LT5zZXR0aW5ncy5mb250Q3Vyc2l2ZSwgbmFtZSkpCisgICAgICAgICAgICBwcml2LT5wYWdlU2V0
dGluZ3MtPnNldEN1cnNpdmVGb250RmFtaWx5KEF0b21pY1N0cmluZzo6ZnJvbVVURjgobmFtZSkp
OwogICAgICAgICBicmVhazsKICAgICBjYXNlIEVXS19GT05UX0ZBTUlMWV9GQU5UQVNZOgotICAg
ICAgICBpZiAoZWluYV9zdHJpbmdzaGFyZV9yZXBsYWNlKCZwcml2LT5zZXR0aW5ncy5mb250X2Zh
bnRhc3ksIG5hbWUpKQotICAgICAgICAgICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0RmFudGFz
eUZvbnRGYW1pbHkoQXRvbWljU3RyaW5nOjpmcm9tVVRGOChuYW1lKSk7CisgICAgICAgIGlmIChl
aW5hX3N0cmluZ3NoYXJlX3JlcGxhY2UoJnByaXYtPnNldHRpbmdzLmZvbnRGYW50YXN5LCBuYW1l
KSkKKyAgICAgICAgICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0RmFudGFzeUZvbnRGYW1pbHko
QXRvbWljU3RyaW5nOjpmcm9tVVRGOChuYW1lKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2Ug
RVdLX0ZPTlRfRkFNSUxZX01PTk9TUEFDRToKLSAgICAgICAgaWYgKGVpbmFfc3RyaW5nc2hhcmVf
cmVwbGFjZSgmcHJpdi0+c2V0dGluZ3MuZm9udF9tb25vc3BhY2UsIG5hbWUpKQotICAgICAgICAg
ICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0Rml4ZWRGb250RmFtaWx5KEF0b21pY1N0cmluZzo6
ZnJvbVVURjgobmFtZSkpOworICAgICAgICBpZiAoZWluYV9zdHJpbmdzaGFyZV9yZXBsYWNlKCZw
cml2LT5zZXR0aW5ncy5mb250TW9ub3NwYWNlLCBuYW1lKSkKKyAgICAgICAgICAgIHByaXYtPnBh
Z2VTZXR0aW5ncy0+c2V0Rml4ZWRGb250RmFtaWx5KEF0b21pY1N0cmluZzo6ZnJvbVVURjgobmFt
ZSkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEVXS19GT05UX0ZBTUlMWV9TRVJJRjoKLSAg
ICAgICAgaWYgKGVpbmFfc3RyaW5nc2hhcmVfcmVwbGFjZSgmcHJpdi0+c2V0dGluZ3MuZm9udF9z
ZXJpZiwgbmFtZSkpCi0gICAgICAgICAgICBwcml2LT5wYWdlX3NldHRpbmdzLT5zZXRTZXJpZkZv
bnRGYW1pbHkoQXRvbWljU3RyaW5nOjpmcm9tVVRGOChuYW1lKSk7CisgICAgICAgIGlmIChlaW5h
X3N0cmluZ3NoYXJlX3JlcGxhY2UoJnByaXYtPnNldHRpbmdzLmZvbnRTZXJpZiwgbmFtZSkpCisg
ICAgICAgICAgICBwcml2LT5wYWdlU2V0dGluZ3MtPnNldFNlcmlmRm9udEZhbWlseShBdG9taWNT
dHJpbmc6OmZyb21VVEY4KG5hbWUpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBFV0tfRk9O
VF9GQU1JTFlfU0FOU19TRVJJRjoKLSAgICAgICAgaWYgKGVpbmFfc3RyaW5nc2hhcmVfcmVwbGFj
ZSgmcHJpdi0+c2V0dGluZ3MuZm9udF9zYW5zX3NlcmlmLCBuYW1lKSkKLSAgICAgICAgICAgIHBy
aXYtPnBhZ2Vfc2V0dGluZ3MtPnNldFNhbnNTZXJpZkZvbnRGYW1pbHkoQXRvbWljU3RyaW5nOjpm
cm9tVVRGOChuYW1lKSk7CisgICAgICAgIGlmIChlaW5hX3N0cmluZ3NoYXJlX3JlcGxhY2UoJnBy
aXYtPnNldHRpbmdzLmZvbnRTYW5zU2VyaWYsIG5hbWUpKQorICAgICAgICAgICAgcHJpdi0+cGFn
ZVNldHRpbmdzLT5zZXRTYW5zU2VyaWZGb250RmFtaWx5KEF0b21pY1N0cmluZzo6ZnJvbVVURjgo
bmFtZSkpOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gRUlO
QV9GQUxTRTsKQEAgLTIzMDMsOTkgKzIzMDMsOTkgQEAgRWluYV9Cb29sIGV3a192aWV3X2ZvbnRf
ZmFtaWx5X25hbWVfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFd2tfRm9udF9GYW1pbHkgZm8K
IAogRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfc3BhdGlhbF9uYXZpZ2F0aW9uX2dldChjb25z
dCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJO
KGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRV
Uk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwotICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5zcGF0
aWFsX25hdmlnYXRpb247CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBz
bWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihz
bWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5z
cGF0aWFsTmF2aWdhdGlvbjsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfc3BhdGlh
bF9uYXZpZ2F0aW9uX3NldChFdmFzX09iamVjdCogZXdrVmlldywgRWluYV9Cb29sIGVuYWJsZSkK
IHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNF
KTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0Up
OworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5B
X0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2
LCBFSU5BX0ZBTFNFKTsKICAgICBlbmFibGUgPSAhIWVuYWJsZTsKLSAgICBpZiAocHJpdi0+c2V0
dGluZ3Muc3BhdGlhbF9uYXZpZ2F0aW9uICE9IGVuYWJsZSkgewotICAgICAgICBwcml2LT5wYWdl
X3NldHRpbmdzLT5zZXRTcGF0aWFsTmF2aWdhdGlvbkVuYWJsZWQoZW5hYmxlKTsKLSAgICAgICAg
cHJpdi0+c2V0dGluZ3Muc3BhdGlhbF9uYXZpZ2F0aW9uID0gZW5hYmxlOworICAgIGlmIChwcml2
LT5zZXR0aW5ncy5zcGF0aWFsTmF2aWdhdGlvbiAhPSBlbmFibGUpIHsKKyAgICAgICAgcHJpdi0+
cGFnZVNldHRpbmdzLT5zZXRTcGF0aWFsTmF2aWdhdGlvbkVuYWJsZWQoZW5hYmxlKTsKKyAgICAg
ICAgcHJpdi0+c2V0dGluZ3Muc3BhdGlhbE5hdmlnYXRpb24gPSBlbmFibGU7CiAgICAgfQogICAg
IHJldHVybiBFSU5BX1RSVUU7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2xvY2Fs
X3N0b3JhZ2VfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVX
X1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVX
X1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7Ci0gICAgcmV0dXJuIHBy
aXYtPnNldHRpbmdzLmxvY2FsX3N0b3JhZ2U7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
Tihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VU
X09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIHJldHVybiBwcml2
LT5zZXR0aW5ncy5sb2NhbFN0b3JhZ2U7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5n
X2xvY2FsX3N0b3JhZ2Vfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wgZW5hYmxl
KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFM
U0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxT
RSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJ
TkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHBy
aXYsIEVJTkFfRkFMU0UpOwogICAgIGVuYWJsZSA9ICEhZW5hYmxlOwotICAgIGlmIChwcml2LT5z
ZXR0aW5ncy5sb2NhbF9zdG9yYWdlICE9IGVuYWJsZSkgewotICAgICAgICBwcml2LT5wYWdlX3Nl
dHRpbmdzLT5zZXRMb2NhbFN0b3JhZ2VFbmFibGVkKGVuYWJsZSk7Ci0gICAgICAgIHByaXYtPnNl
dHRpbmdzLmxvY2FsX3N0b3JhZ2UgPSBlbmFibGU7CisgICAgaWYgKHByaXYtPnNldHRpbmdzLmxv
Y2FsU3RvcmFnZSAhPSBlbmFibGUpIHsKKyAgICAgICAgcHJpdi0+cGFnZVNldHRpbmdzLT5zZXRM
b2NhbFN0b3JhZ2VFbmFibGVkKGVuYWJsZSk7CisgICAgICAgIHByaXYtPnNldHRpbmdzLmxvY2Fs
U3RvcmFnZSA9IGVuYWJsZTsKICAgICB9CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAogRWlu
YV9Cb29sIGV3a192aWV3X3NldHRpbmdfcGFnZV9jYWNoZV9nZXQoY29uc3QgRXZhc19PYmplY3Qq
IGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwg
RUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBF
SU5BX0ZBTFNFKTsKLSAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MucGFnZV9jYWNoZTsKKyAgICBF
V0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7
CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9G
QUxTRSk7CisgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLnBhZ2VDYWNoZTsKIH0KIAogRWluYV9C
b29sIGV3a192aWV3X3NldHRpbmdfcGFnZV9jYWNoZV9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcs
IEVpbmFfQm9vbCBlbmFibGUpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tW
aWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNk
LCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1Zp
ZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVU
VVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgZW5hYmxlID0gISFlbmFibGU7
Ci0gICAgaWYgKHByaXYtPnNldHRpbmdzLnBhZ2VfY2FjaGUgIT0gZW5hYmxlKSB7Ci0gICAgICAg
IHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNldFVzZXNQYWdlQ2FjaGUoZW5hYmxlKTsKLSAgICAgICAg
cHJpdi0+c2V0dGluZ3MucGFnZV9jYWNoZSA9IGVuYWJsZTsKKyAgICBpZiAocHJpdi0+c2V0dGlu
Z3MucGFnZUNhY2hlICE9IGVuYWJsZSkgeworICAgICAgICBwcml2LT5wYWdlU2V0dGluZ3MtPnNl
dFVzZXNQYWdlQ2FjaGUoZW5hYmxlKTsKKyAgICAgICAgcHJpdi0+c2V0dGluZ3MucGFnZUNhY2hl
ID0gZW5hYmxlOwogICAgIH0KICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCiBjb25zdCBjaGFy
KiBld2tfdmlld19zZXR0aW5nX2xvY2FsX3N0b3JhZ2VfZGF0YWJhc2VfcGF0aF9nZXQoY29uc3Qg
RXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihl
d2tWaWV3LCBzZCwgMCk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2
LCAwKTsKLSAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MubG9jYWxfc3RvcmFnZV9kYXRhYmFzZV9w
YXRoOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCAw
KTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCAwKTsK
KyAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MubG9jYWxTdG9yYWdlRGF0YWJhc2VQYXRoOwogfQog
CiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19sb2NhbF9zdG9yYWdlX2RhdGFiYXNlX3BhdGhf
c2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBjaGFyKiBwYXRoKQogewotICAgIEVXS19W
SUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19W
SUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7Ci0gICAgaWYgKGVp
bmFfc3RyaW5nc2hhcmVfcmVwbGFjZSgmcHJpdi0+c2V0dGluZ3MubG9jYWxfc3RvcmFnZV9kYXRh
YmFzZV9wYXRoLCBwYXRoKSkKLSAgICAgICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0TG9jYWxT
dG9yYWdlRGF0YWJhc2VQYXRoKFN0cmluZzo6ZnJvbVVURjgocGF0aCkpOworICAgIEVXS19WSUVX
X1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBF
V0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsK
KyAgICBpZiAoZWluYV9zdHJpbmdzaGFyZV9yZXBsYWNlKCZwcml2LT5zZXR0aW5ncy5sb2NhbFN0
b3JhZ2VEYXRhYmFzZVBhdGgsIHBhdGgpKQorICAgICAgICBwcml2LT5wYWdlU2V0dGluZ3MtPnNl
dExvY2FsU3RvcmFnZURhdGFiYXNlUGF0aChTdHJpbmc6OmZyb21VVEY4KHBhdGgpKTsKICAgICBy
ZXR1cm4gRUlOQV9UUlVFOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19taW5pbXVt
X3RpbWVyX2ludGVydmFsX3NldChFdmFzX09iamVjdCogZXdrVmlldywgZG91YmxlIGludGVydmFs
KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFM
U0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxT
RSk7Ci0gICAgaWYgKGZhYnMocHJpdi0+c2V0dGluZ3MuZG9tX3RpbWVyX2ludGVydmFsIC0gaW50
ZXJ2YWwpID49IHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6ZXBzaWxvbigpKSB7Ci0gICAg
ICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNldE1pbkRPTVRpbWVySW50ZXJ2YWwoaW50ZXJ2YWwp
OwotICAgICAgICBwcml2LT5zZXR0aW5ncy5kb21fdGltZXJfaW50ZXJ2YWwgPSBpbnRlcnZhbDsK
KyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9G
QUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwg
RUlOQV9GQUxTRSk7CisgICAgaWYgKGZhYnMocHJpdi0+c2V0dGluZ3MuZG9tVGltZXJJbnRlcnZh
bCAtIGludGVydmFsKSA+PSBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmVwc2lsb24oKSkg
eworICAgICAgICBwcml2LT5wYWdlU2V0dGluZ3MtPnNldE1pbkRPTVRpbWVySW50ZXJ2YWwoaW50
ZXJ2YWwpOworICAgICAgICBwcml2LT5zZXR0aW5ncy5kb21UaW1lckludGVydmFsID0gaW50ZXJ2
YWw7CiAgICAgfQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKIGRvdWJsZSBld2tfdmlld19z
ZXR0aW5nX21pbmltdW1fdGltZXJfaW50ZXJ2YWxfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tW
aWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFf
RkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9G
QUxTRSk7Ci0gICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmRvbV90aW1lcl9pbnRlcnZhbDsKKyAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxT
RSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlO
QV9GQUxTRSk7CisgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmRvbVRpbWVySW50ZXJ2YWw7CiB9
CiAKIEV3a19WaWV3X1NtYXJ0X0RhdGEqIGV3a192aWV3X3NtYXJ0X2RhdGFfZ2V0KGNvbnN0IEV2
YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdr
Vmlldywgc2QsIDApOwotICAgIHJldHVybiBzZDsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVU
VVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgMCk7CisgICAgcmV0dXJuIHNtYXJ0RGF0YTsKIH0KIAog
LyoqCkBAIC0yNDYwLDggKzI0NjAsOCBAQCBjb25zdCBFd2tfU2Nyb2xsX1JlcXVlc3QqIGV3a192
aWV3X3Njcm9sbF9yZXF1ZXN0c19nZXQoY29uc3QgRXdrX1ZpZXdfUHJpdmF0ZV9EYQogICogQHBh
cmFtIHByaXYgcHJpdmF0ZSBoYW5kbGUgcG9pbnRlciBvZiB0aGUgdmlldyB0byBhZGQgcmVwYWlu
dCByZXF1ZXN0LgogICogQHBhcmFtIHggaG9yaXpvbnRhbCBwb3NpdGlvbiByZWxhdGl2ZSB0byBj
dXJyZW50IHZpZXcgcG9ydCAoc2Nyb2xsZWQpLgogICogQHBhcmFtIHkgdmVydGljYWwgcG9zaXRp
b24gcmVsYXRpdmUgdG8gY3VycmVudCB2aWV3IHBvcnQgKHNjcm9sbGVkKS4KLSAqIEBwYXJhbSB3
IHdpZHRoIG9mIGFyZWEgdG8gYmUgcmVwYWludGVkCi0gKiBAcGFyYW0gaCBoZWlnaHQgb2YgYXJl
YSB0byBiZSByZXBhaW50ZWQKKyAqIEBwYXJhbSB3aWR0aCB3aWR0aCBvZiBhcmVhIHRvIGJlIHJl
cGFpbnRlZAorICogQHBhcmFtIGhlaWdodCBoZWlnaHQgb2YgYXJlYSB0byBiZSByZXBhaW50ZWQK
ICAqCiAgKiBAbm90ZSB0aGlzIGlzIG5vdCBmb3IgZ2VuZXJhbCB1c2UgYnV0IGp1c3QgZm9yIHN1
YmNsYXNzZXMgdGhhdCB3YW50CiAgKiAgICAgICB0byBkZWZpbmUgdGhlaXIgb3duIGJhY2tpbmcg
c3RvcmUuCkBAIC0yNDg0LDEyICsyNDg0LDEyIEBAIHZvaWQgZXdrX3ZpZXdfbGF5b3V0X2lmX25l
ZWRlZF9yZWN1cnNpdmUoRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKiBwcml2KQogewogICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOKHByaXYpOwogCi0gICAgV2ViQ29yZTo6RnJhbWVWaWV3KiB2
ID0gcHJpdi0+bWFpbl9mcmFtZS0+dmlldygpOwotICAgIGlmICghdikgeworICAgIFdlYkNvcmU6
OkZyYW1lVmlldyogdmlldyA9IHByaXYtPm1haW5GcmFtZS0+dmlldygpOworICAgIGlmICghdmll
dykgewogICAgICAgICBFUlIoIm5vIG1haW4gZnJhbWUgdmlldyIpOwogICAgICAgICByZXR1cm47
CiAgICAgfQotICAgIHYtPnVwZGF0ZUxheW91dEFuZFN0eWxlSWZOZWVkZWRSZWN1cnNpdmUoKTsK
KyAgICB2aWV3LT51cGRhdGVMYXlvdXRBbmRTdHlsZUlmTmVlZGVkUmVjdXJzaXZlKCk7CiB9CiAK
IHZvaWQgZXdrX3ZpZXdfc2Nyb2xsc19wcm9jZXNzKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0
RGF0YSkKQEAgLTI1MTAsNyArMjUxMCw3IEBAIHZvaWQgZXdrX3ZpZXdfc2Nyb2xsc19wcm9jZXNz
KEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSkKICAqICAgICAgIHRvIGRlZmluZSB0aGVp
ciBvd24gYmFja2luZyBzdG9yZS4KICAqLwogc3RydWN0IF9Fd2tfVmlld19QYWludF9Db250ZXh0
IHsKLSAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQqIGdjOworICAgIFdlYkNvcmU6OkdyYXBo
aWNzQ29udGV4dCogZ3JhcGhpY0NvbnRleHQ7CiAgICAgV2ViQ29yZTo6RnJhbWVWaWV3KiB2aWV3
OwogICAgIGNhaXJvX3QqIGNyOwogfTsKQEAgLTI1MTksMjYgKzI1MTksMjYgQEAgRXdrX1ZpZXdf
UGFpbnRfQ29udGV4dCogZXdrX3ZpZXdfcGFpbnRfY29udGV4dF9uZXcoRXdrX1ZpZXdfUHJpdmF0
ZV9EYXRhKiBwcml2LAogewogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChwcml2
LCAwKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoY3IsIDApOwotICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChwcml2LT5tYWluX2ZyYW1lLCAwKTsKLSAgICBX
ZWJDb3JlOjpGcmFtZVZpZXcqIHZpZXcgPSBwcml2LT5tYWluX2ZyYW1lLT52aWV3KCk7CisgICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHByaXYtPm1haW5GcmFtZSwgMCk7CisgICAg
V2ViQ29yZTo6RnJhbWVWaWV3KiB2aWV3ID0gcHJpdi0+bWFpbkZyYW1lLT52aWV3KCk7CiAgICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHZpZXcsIDApOwotICAgIEV3a19WaWV3X1Bh
aW50X0NvbnRleHQqIGN0eHQgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19QYWludF9Db250ZXh0Kj4o
bWFsbG9jKHNpemVvZigqY3R4dCkpKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9W
QUwoY3R4dCwgMCk7CisgICAgRXdrX1ZpZXdfUGFpbnRfQ29udGV4dCogY29udGV4dCA9IHN0YXRp
Y19jYXN0PEV3a19WaWV3X1BhaW50X0NvbnRleHQqPihtYWxsb2Moc2l6ZW9mKCpjb250ZXh0KSkp
OworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChjb250ZXh0LCAwKTsKIAotICAg
IGN0eHQtPmdjID0gbmV3IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dChjcik7Ci0gICAgaWYgKCFj
dHh0LT5nYykgewotICAgICAgICBmcmVlKGN0eHQpOworICAgIGNvbnRleHQtPmdyYXBoaWNDb250
ZXh0ID0gbmV3IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dChjcik7CisgICAgaWYgKCFjb250ZXh0
LT5ncmFwaGljQ29udGV4dCkgeworICAgICAgICBmcmVlKGNvbnRleHQpOwogICAgICAgICByZXR1
cm4gMDsKICAgICB9Ci0gICAgY3R4dC0+dmlldyA9IHZpZXc7Ci0gICAgY3R4dC0+Y3IgPSBjYWly
b19yZWZlcmVuY2UoY3IpOwotICAgIHJldHVybiBjdHh0OworICAgIGNvbnRleHQtPnZpZXcgPSB2
aWV3OworICAgIGNvbnRleHQtPmNyID0gY2Fpcm9fcmVmZXJlbmNlKGNyKTsKKyAgICByZXR1cm4g
Y29udGV4dDsKIH0KIAogdm9pZCBld2tfdmlld19wYWludF9jb250ZXh0X2ZyZWUoRXdrX1ZpZXdf
UGFpbnRfQ29udGV4dCogY29udGV4dCkKIHsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
Tihjb250ZXh0KTsKLSAgICBkZWxldGUgY29udGV4dC0+Z2M7CisgICAgZGVsZXRlIGNvbnRleHQt
PmdyYXBoaWNDb250ZXh0OwogICAgIGNhaXJvX2Rlc3Ryb3koY29udGV4dC0+Y3IpOwogICAgIGZy
ZWUoY29udGV4dCk7CiB9CkBAIC0yNTQ3LDEzICsyNTQ3LDEzIEBAIHZvaWQgZXdrX3ZpZXdfcGFp
bnRfY29udGV4dF9zYXZlKEV3a19WaWV3X1BhaW50X0NvbnRleHQqIGNvbnRleHQpCiB7CiAgICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oY29udGV4dCk7CiAgICAgY2Fpcm9fc2F2ZShjb250
ZXh0LT5jcik7Ci0gICAgY29udGV4dC0+Z2MtPnNhdmUoKTsKKyAgICBjb250ZXh0LT5ncmFwaGlj
Q29udGV4dC0+c2F2ZSgpOwogfQogCiB2b2lkIGV3a192aWV3X3BhaW50X2NvbnRleHRfcmVzdG9y
ZShFd2tfVmlld19QYWludF9Db250ZXh0KiBjb250ZXh0KQogewogICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOKGNvbnRleHQpOwotICAgIGNvbnRleHQtPmdjLT5yZXN0b3JlKCk7CisgICAg
Y29udGV4dC0+Z3JhcGhpY0NvbnRleHQtPnJlc3RvcmUoKTsKICAgICBjYWlyb19yZXN0b3JlKGNv
bnRleHQtPmNyKTsKIH0KIApAQCAtMjU2MSw3ICsyNTYxLDcgQEAgdm9pZCBld2tfdmlld19wYWlu
dF9jb250ZXh0X2NsaXAoRXdrX1ZpZXdfUGFpbnRfQ29udGV4dCogY29udGV4dCwgY29uc3QgRWlu
YV9SZWMKIHsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihjb250ZXh0KTsKICAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihhcmVhKTsKLSAgICBjb250ZXh0LT5nYy0+Y2xpcChX
ZWJDb3JlOjpJbnRSZWN0KGFyZWEtPngsIGFyZWEtPnksIGFyZWEtPncsIGFyZWEtPmgpKTsKKyAg
ICBjb250ZXh0LT5ncmFwaGljQ29udGV4dC0+Y2xpcChXZWJDb3JlOjpJbnRSZWN0KGFyZWEtPngs
IGFyZWEtPnksIGFyZWEtPncsIGFyZWEtPmgpKTsKIH0KIAogdm9pZCBld2tfdmlld19wYWludF9j
b250ZXh0X3BhaW50KEV3a19WaWV3X1BhaW50X0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEVpbmFf
UmVjdGFuZ2xlKiBhcmVhKQpAQCAtMjU3Miw4ICsyNTcyLDggQEAgdm9pZCBld2tfdmlld19wYWlu
dF9jb250ZXh0X3BhaW50KEV3a19WaWV3X1BhaW50X0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEVp
bmFfUmUKICAgICBXZWJDb3JlOjpJbnRSZWN0IHJlY3QoYXJlYS0+eCwgYXJlYS0+eSwgYXJlYS0+
dywgYXJlYS0+aCk7CiAKICAgICBpZiAoY29udGV4dC0+dmlldy0+aXNUcmFuc3BhcmVudCgpKQot
ICAgICAgICBjb250ZXh0LT5nYy0+Y2xlYXJSZWN0KHJlY3QpOwotICAgIGNvbnRleHQtPnZpZXct
PnBhaW50KGNvbnRleHQtPmdjLCByZWN0KTsKKyAgICAgICAgY29udGV4dC0+Z3JhcGhpY0NvbnRl
eHQtPmNsZWFyUmVjdChyZWN0KTsKKyAgICBjb250ZXh0LT52aWV3LT5wYWludChjb250ZXh0LT5n
cmFwaGljQ29udGV4dCwgcmVjdCk7CiB9CiAKIHZvaWQgZXdrX3ZpZXdfcGFpbnRfY29udGV4dF9w
YWludF9jb250ZW50cyhFd2tfVmlld19QYWludF9Db250ZXh0KiBjb250ZXh0LCBjb25zdCBFaW5h
X1JlY3RhbmdsZSogYXJlYSkKQEAgLTI1ODQsMjMgKzI1ODQsMjMgQEAgdm9pZCBld2tfdmlld19w
YWludF9jb250ZXh0X3BhaW50X2NvbnRlbnRzKEV3a19WaWV3X1BhaW50X0NvbnRleHQqIGNvbnRl
eHQsIGNvbnMKICAgICBXZWJDb3JlOjpJbnRSZWN0IHJlY3QoYXJlYS0+eCwgYXJlYS0+eSwgYXJl
YS0+dywgYXJlYS0+aCk7CiAKICAgICBpZiAoY29udGV4dC0+dmlldy0+aXNUcmFuc3BhcmVudCgp
KQotICAgICAgICBjb250ZXh0LT5nYy0+Y2xlYXJSZWN0KHJlY3QpOworICAgICAgICBjb250ZXh0
LT5ncmFwaGljQ29udGV4dC0+Y2xlYXJSZWN0KHJlY3QpOwogCi0gICAgY29udGV4dC0+dmlldy0+
cGFpbnRDb250ZW50cyhjb250ZXh0LT5nYywgcmVjdCk7CisgICAgY29udGV4dC0+dmlldy0+cGFp
bnRDb250ZW50cyhjb250ZXh0LT5ncmFwaGljQ29udGV4dCwgcmVjdCk7CiB9CiAKIHZvaWQgZXdr
X3ZpZXdfcGFpbnRfY29udGV4dF9zY2FsZShFd2tfVmlld19QYWludF9Db250ZXh0KiBjb250ZXh0
LCBmbG9hdCBzY2FsZVgsIGZsb2F0IHNjYWxlWSkKIHsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTihjb250ZXh0KTsKIAotICAgIGNvbnRleHQtPmdjLT5zY2FsZShXZWJDb3JlOjpGbG9h
dFNpemUoc2NhbGVYLCBzY2FsZVkpKTsKKyAgICBjb250ZXh0LT5ncmFwaGljQ29udGV4dC0+c2Nh
bGUoV2ViQ29yZTo6RmxvYXRTaXplKHNjYWxlWCwgc2NhbGVZKSk7CiB9CiAKIHZvaWQgZXdrX3Zp
ZXdfcGFpbnRfY29udGV4dF90cmFuc2xhdGUoRXdrX1ZpZXdfUGFpbnRfQ29udGV4dCogY29udGV4
dCwgZmxvYXQgeCwgZmxvYXQgeSkKIHsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihj
b250ZXh0KTsKIAotICAgIGNvbnRleHQtPmdjLT50cmFuc2xhdGUoeCwgeSk7CisgICAgY29udGV4
dC0+Z3JhcGhpY0NvbnRleHQtPnRyYW5zbGF0ZSh4LCB5KTsKIH0KIAogRWluYV9Cb29sIGV3a192
aWV3X3BhaW50KEV3a19WaWV3X1ByaXZhdGVfRGF0YSogcHJpdiwgY2Fpcm9fdCogY3IsIGNvbnN0
IEVpbmFfUmVjdGFuZ2xlKiBhcmVhKQpAQCAtMjYwOCwyMSArMjYwOCwyMSBAQCBFaW5hX0Jvb2wg
ZXdrX3ZpZXdfcGFpbnQoRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKiBwcml2LCBjYWlyb190KiBjciwg
Y29uc3QgRWluYV9SZQogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChwcml2LCBF
SU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoY3IsIEVJTkFf
RkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChhcmVhLCBFSU5BX0ZB
TFNFKTsKLSAgICBXZWJDb3JlOjpGcmFtZVZpZXcqIHZpZXcgPSBwcml2LT5tYWluX2ZyYW1lLT52
aWV3KCk7CisgICAgV2ViQ29yZTo6RnJhbWVWaWV3KiB2aWV3ID0gcHJpdi0+bWFpbkZyYW1lLT52
aWV3KCk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHZpZXcsIEVJTkFfRkFM
U0UpOwogCiAgICAgaWYgKHZpZXctPm5lZWRzTGF5b3V0KCkpCiAgICAgICAgIHZpZXctPmZvcmNl
TGF5b3V0KCk7Ci0gICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0IGdjKGNyKTsKKyAgICBXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KGNyKTsKICAgICBXZWJDb3JlOjpJ
bnRSZWN0IHJlY3QoYXJlYS0+eCwgYXJlYS0+eSwgYXJlYS0+dywgYXJlYS0+aCk7CiAKICAgICBj
YWlyb19zYXZlKGNyKTsKLSAgICBnYy5zYXZlKCk7Ci0gICAgZ2MuY2xpcChyZWN0KTsKKyAgICBn
cmFwaGljc0NvbnRleHQuc2F2ZSgpOworICAgIGdyYXBoaWNzQ29udGV4dC5jbGlwKHJlY3QpOwog
ICAgIGlmICh2aWV3LT5pc1RyYW5zcGFyZW50KCkpCi0gICAgICAgIGdjLmNsZWFyUmVjdChyZWN0
KTsKLSAgICB2aWV3LT5wYWludCgmZ2MsIHJlY3QpOwotICAgIGdjLnJlc3RvcmUoKTsKKyAgICAg
ICAgZ3JhcGhpY3NDb250ZXh0LmNsZWFyUmVjdChyZWN0KTsKKyAgICB2aWV3LT5wYWludCgmZ3Jh
cGhpY3NDb250ZXh0LCByZWN0KTsKKyAgICBncmFwaGljc0NvbnRleHQucmVzdG9yZSgpOwogICAg
IGNhaXJvX3Jlc3RvcmUoY3IpOwogCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKQEAgLTI2MzMsMTkg
KzI2MzMsMTkgQEAgRWluYV9Cb29sIGV3a192aWV3X3BhaW50X2NvbnRlbnRzKEV3a19WaWV3X1By
aXZhdGVfRGF0YSogcHJpdiwgY2Fpcm9fdCogY3IsIGNvbnMKICAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTl9WQUwocHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk5fVkFMKGNyLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTl9WQUwoYXJlYSwgRUlOQV9GQUxTRSk7Ci0gICAgV2ViQ29yZTo6RnJhbWVWaWV3KiB2aWV3
ID0gcHJpdi0+bWFpbl9mcmFtZS0+dmlldygpOworICAgIFdlYkNvcmU6OkZyYW1lVmlldyogdmll
dyA9IHByaXYtPm1haW5GcmFtZS0+dmlldygpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOX1ZBTCh2aWV3LCBFSU5BX0ZBTFNFKTsKIAotICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dCBnYyhjcik7CisgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChj
cik7CiAgICAgV2ViQ29yZTo6SW50UmVjdCByZWN0KGFyZWEtPngsIGFyZWEtPnksIGFyZWEtPncs
IGFyZWEtPmgpOwogCiAgICAgY2Fpcm9fc2F2ZShjcik7Ci0gICAgZ2Muc2F2ZSgpOwotICAgIGdj
LmNsaXAocmVjdCk7CisgICAgZ3JhcGhpY3NDb250ZXh0LnNhdmUoKTsKKyAgICBncmFwaGljc0Nv
bnRleHQuY2xpcChyZWN0KTsKICAgICBpZiAodmlldy0+aXNUcmFuc3BhcmVudCgpKQotICAgICAg
ICBnYy5jbGVhclJlY3QocmVjdCk7Ci0gICAgdmlldy0+cGFpbnRDb250ZW50cygmZ2MsICByZWN0
KTsKLSAgICBnYy5yZXN0b3JlKCk7CisgICAgICAgIGdyYXBoaWNzQ29udGV4dC5jbGVhclJlY3Qo
cmVjdCk7CisgICAgdmlldy0+cGFpbnRDb250ZW50cygmZ3JhcGhpY3NDb250ZXh0LCAgcmVjdCk7
CisgICAgZ3JhcGhpY3NDb250ZXh0LnJlc3RvcmUoKTsKICAgICBjYWlyb19yZXN0b3JlKGNyKTsK
IAogICAgIHJldHVybiBFSU5BX1RSVUU7CkBAIC0yNjc1LDggKzI2NzUsOCBAQCB2b2lkIGV3a192
aWV3X3JlYWR5KEV2YXNfT2JqZWN0KiBld2tWaWV3KQogICovCiB2b2lkIGV3a192aWV3X2lucHV0
X21ldGhvZF9zdGF0ZV9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCBhY3RpdmUp
CiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCk7Ci0gICAgRVdL
X1ZJRVdfUFJJVl9HRVQoc2QsIHByaXYpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrVmlldywgc21hcnREYXRhKTsKKyAgICBFV0tfVklFV19QUklWX0dFVChzbWFydERhdGEsIHBy
aXYpOwogICAgIFdlYkNvcmU6OkZyYW1lKiBmb2N1c2VkRnJhbWUgPSBwcml2LT5wYWdlLT5mb2N1
c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCk7CiAKICAgICBwcml2LT5pbWggPSAw
OwpAQCAtMjcyNSw4ICsyNzI1LDggQEAgdm9pZCBld2tfdmlld190aXRsZV9zZXQoRXZhc19PYmpl
Y3QqIGV3a1ZpZXcsIGNvbnN0IGNoYXIqIHRpdGxlKQogICovCiB2b2lkIGV3a192aWV3X3VyaV9j
aGFuZ2VkKEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9S
RVRVUk4oZXdrVmlldywgc2QpOwotICAgIGNvbnN0IGNoYXIqIHVyaSA9IGV3a19mcmFtZV91cmlf
Z2V0KHNkLT5tYWluX2ZyYW1lKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1Zp
ZXcsIHNtYXJ0RGF0YSk7CisgICAgY29uc3QgY2hhciogdXJpID0gZXdrX2ZyYW1lX3VyaV9nZXQo
c21hcnREYXRhLT5tYWluX2ZyYW1lKTsKICAgICBEQkcoImV3a1ZpZXc9JXAsIHVyaT0lcyIsIGV3
a1ZpZXcsIHVyaSA/IHVyaSA6ICIobnVsbCkiKTsKICAgICBldmFzX29iamVjdF9zbWFydF9jYWxs
YmFja19jYWxsKGV3a1ZpZXcsICJ1cmksY2hhbmdlZCIsICh2b2lkKil1cmkpOwogfQpAQCAtMjcz
NSw3ICsyNzM1LDcgQEAgdm9pZCBld2tfdmlld191cmlfY2hhbmdlZChFdmFzX09iamVjdCogZXdr
VmlldykKICAqIEBpbnRlcm5hbAogICogUmVwb3J0cyB0aGF0IGEgRE9NIGRvY3VtZW50IG9iamVj
dCBoYXMgZmluaXNoZWQgbG9hZGluZyBmb3IgQHAgZnJhbWUuCiAgKgotICogQHBhcmFtIG8gVmll
dyB3aGljaCBjb250YWlucyB0aGUgZnJhbWUuCisgKiBAcGFyYW0gZXdrVmlldyBWaWV3IHdoaWNo
IGNvbnRhaW5zIHRoZSBmcmFtZS4KICAqIEBwYXJhbSBmcmFtZSBUaGUgZnJhbWUgd2hvc2UgbG9h
ZCBoYXMgdHJpZ2dlcmVkIHRoZSBldmVudC4KICAqCiAgKiBFbWl0cyBzaWduYWw6ICJsb2FkLGRv
Y3VtZW50LGZpbmlzaGVkIiB3aXRoIEBwIGZyYW1lIGFzIHRoZSBwYXJhbWV0ZXIuCkBAIC0yNzQ5
LDcgKzI3NDksNyBAQCB2b2lkIGV3a192aWV3X2xvYWRfZG9jdW1lbnRfZmluaXNoZWQoRXZhc19P
YmplY3QqIGV3a1ZpZXcsIEV2YXNfT2JqZWN0KiBmcmFtZSkKICAqIEBpbnRlcm5hbAogICogUmVw
b3J0cyB0aGUgdmlldyBzdGFydGVkIGxvYWRpbmcgc29tZXRoaW5nLgogICoKLSAqIEBwYXJhbSBv
IFZpZXcuCisgKiBAcGFyYW0gZXdrVmlldyBWaWV3LgogICoKICAqIEVtaXRzIHNpZ25hbDogImxv
YWQsc3RhcnRlZCIgd2l0aCBubyBwYXJhbWV0ZXJzLgogICovCkBAIC0yNzYyLDcgKzI3NjIsNyBA
QCB2b2lkIGV3a192aWV3X2xvYWRfc3RhcnRlZChFdmFzX09iamVjdCogZXdrVmlldykKIC8qKgog
ICogUmVwb3J0cyB0aGUgZnJhbWUgc3RhcnRlZCBsb2FkaW5nIHNvbWV0aGluZy4KICAqCi0gKiBA
cGFyYW0gbyBWaWV3LgorICogQHBhcmFtIGV3a1ZpZXcgVmlldy4KICAqCiAgKiBFbWl0cyBzaWdu
YWw6ICJsb2FkLHN0YXJ0ZWQiIG9uIG1haW4gZnJhbWUgd2l0aCBubyBwYXJhbWV0ZXJzLgogICov
CkBAIC0yNzc3LDcgKzI3NzcsNyBAQCB2b2lkIGV3a192aWV3X2ZyYW1lX21haW5fbG9hZF9zdGFy
dGVkKEV2YXNfT2JqZWN0KiBld2tWaWV3KQogICogQGludGVybmFsCiAgKiBSZXBvcnRzIHRoZSBt
YWluIGZyYW1lIHN0YXJ0ZWQgcHJvdmlzaW9uYWwgbG9hZC4KICAqCi0gKiBAcGFyYW0gbyBWaWV3
LgorICogQHBhcmFtIGV3a1ZpZXcgVmlldy4KICAqCiAgKiBFbWl0cyBzaWduYWw6ICJsb2FkLHBy
b3Zpc2lvbmFsIiBvbiBWaWV3IHdpdGggbm8gcGFyYW1ldGVycy4KICAqLwpAQCAtMjc5MSw3ICsy
NzkxLDcgQEAgdm9pZCBld2tfdmlld19sb2FkX3Byb3Zpc2lvbmFsKEV2YXNfT2JqZWN0KiBld2tW
aWV3KQogICogQGludGVybmFsCiAgKiBSZXBvcnRzIHZpZXcgY2FuIGJlIHNob3duIGFmdGVyIGEg
bmV3IHdpbmRvdyBpcyBjcmVhdGVkLgogICoKLSAqIEBwYXJhbSBvIEZyYW1lLgorICogQHBhcmFt
IGV3a1ZpZXcgRnJhbWUuCiAgKgogICogRW1pdHMgc2lnbmFsOiAibG9hZCxuZXd3aW5kb3csc2hv
dyIgb24gdmlldyB3aXRoIG5vIHBhcmFtZXRlcnMuCiAgKi8KQEAgLTI4MDYsMjEgKzI4MDYsMjEg
QEAgdm9pZCBld2tfdmlld19sb2FkX3Nob3coRXZhc19PYmplY3QqIGV3a1ZpZXcpCiAgKiBAaW50
ZXJuYWwKICAqIFJlcG9ydHMgdGhlIG1haW4gZnJhbWUgd2FzIGNsZWFyZWQuCiAgKgotICogQHBh
cmFtIG8gVmlldy4KKyAqIEBwYXJhbSBld2tWaWV3IFZpZXcuCiAgKi8KIHZvaWQgZXdrX3ZpZXdf
ZnJhbWVfbWFpbl9jbGVhcmVkKEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewogICAgIERCRygiZXdr
Vmlldz0lcCIsIGV3a1ZpZXcpOwotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmll
dywgc2QpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGktPmZsdXNoKTsK
LSAgICBzZC0+YXBpLT5mbHVzaChzZCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihl
d2tWaWV3LCBzbWFydERhdGEpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0
RGF0YS0+YXBpLT5mbHVzaCk7CisgICAgc21hcnREYXRhLT5hcGktPmZsdXNoKHNtYXJ0RGF0YSk7
CiB9CiAKIC8qKgogICogQGludGVybmFsCiAgKiBSZXBvcnRzIHRoZSBtYWluIGZyYW1lIHJlY2Vp
dmVkIGFuIGljb24uCiAgKgotICogQHBhcmFtIG8gVmlldy4KKyAqIEBwYXJhbSBld2tWaWV3IFZp
ZXcuCiAgKgogICogRW1pdHMgc2lnbmFsOiAiaWNvbixyZWNlaXZlZCIgd2l0aCBubyBwYXJhbWV0
ZXJzLgogICovCkBAIC0yODY3LDEwICsyODY3LDEwIEBAIHZvaWQgZXdrX3ZpZXdfbG9hZF9lcnJv
cihFdmFzX09iamVjdCogZXdrVmlldywgY29uc3QgRXdrX0ZyYW1lX0xvYWRfRXJyb3IqIGVycm9y
CiAgKi8KIHZvaWQgZXdrX3ZpZXdfbG9hZF9wcm9ncmVzc19jaGFuZ2VkKEV2YXNfT2JqZWN0KiBl
d2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QpOwot
ICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdik7CisgICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEpOworICAgIEVXS19WSUVXX1BSSVZf
R0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYpOwogCi0gICAgLy8gRXZhc19Db29yZCB3LCBo
OworICAgIC8vIEV2YXNfQ29vcmQgd2lkdGgsIGhlaWdodDsKICAgICBkb3VibGUgcHJvZ3Jlc3Mg
PSBwcml2LT5wYWdlLT5wcm9ncmVzcygpLT5lc3RpbWF0ZWRQcm9ncmVzcygpOwogCiAgICAgREJH
KCJld2tWaWV3PSVwIChwPSUwLjNmKSIsIGV3a1ZpZXcsIHByb2dyZXNzKTsKQEAgLTI4ODAsOSAr
Mjg4MCw5IEBAIHZvaWQgZXdrX3ZpZXdfbG9hZF9wcm9ncmVzc19jaGFuZ2VkKEV2YXNfT2JqZWN0
KiBld2tWaWV3KQogCiAvKioKICAqIEBpbnRlcm5hbAotICogUmVwb3J0cyB2aWV3IEBwYXJhbSBv
IHNob3VsZCBiZSByZXN0b3JlZCB0byBkZWZhdWx0IGNvbmRpdGlvbnMKKyAqIFJlcG9ydHMgdmll
dyBAcGFyYW0gZXdrVmlldyBzaG91bGQgYmUgcmVzdG9yZWQgdG8gZGVmYXVsdCBjb25kaXRpb25z
CiAgKgotICogQHBhcmFtIG8gVmlldy4KKyAqIEBwYXJhbSBld2tWaWV3IFZpZXcuCiAgKiBAcGFy
YW0gZnJhbWUgRnJhbWUgdGhhdCBvcmlnaW5hdGVkIHJlc3RvcmUuCiAgKgogICogRW1pdHMgc2ln
bmFsOiAicmVzdG9yZSIgd2l0aCBmcmFtZS4KQEAgLTI5MDIsMzAgKzI5MDIsMzAgQEAgdm9pZCBl
d2tfdmlld19yZXN0b3JlX3N0YXRlKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFdmFzX09iamVjdCog
ZnJhbWUpCiAgKiBjYWxsaW5nIGV3a193aW5kb3dfZmVhdHVyZXNfcmVmKHdpbmRvd19mZWF0dXJl
cykuIE90aGVyd2lzZSB0aGlzIHN0cnVjdCB3aWxsCiAgKiBiZSBmcmVlZCBhZnRlciByZXR1cm5p
bmcgdG8gdGhpcyBmdW5jdGlvbi4KICAqCi0gKiBAcGFyYW0gbyBDdXJyZW50IHZpZXcuCisgKiBA
cGFyYW0gZXdrVmlldyBDdXJyZW50IHZpZXcuCiAgKiBAcGFyYW0gamF2YXNjcmlwdCBAYyBFSU5B
X1RSVUUgaWYgdGhlIG5ldyB3aW5kb3cgaXMgb3JpZ2luYXRlZCBmcm9tIGphdmFzY3JpcHQsCiAg
KiBAYyBFSU5BX0ZBTFNFIG90aGVyd2lzZQotICogQHBhcmFtIHdpbmRvd19mZWF0dXJlcyBGZWF0
dXJlcyBvZiB0aGUgbmV3IHdpbmRvdyBiZWluZyBjcmVhdGVkLiBJZiBpdCdzIEBjCisgKiBAcGFy
YW0gd2lkdGhpbmRvd19mZWF0dXJlcyBGZWF0dXJlcyBvZiB0aGUgbmV3IHdpbmRvdyBiZWluZyBj
cmVhdGVkLiBJZiBpdCdzIEBjCiAgKiBOVUxMLCBpdCB3aWxsIGJlIGNyZWF0ZWQgYSB3aW5kb3cg
d2l0aCBkZWZhdWx0IGZlYXR1cmVzLgogICoKICAqIEByZXR1cm4gTmV3IHZpZXcsIGluIGNhc2Ug
c21hcnQgY2xhc3MgaW1wbGVtZW50cyB0aGUgY3JlYXRpb24gb2YgbmV3IHdpbmRvd3M7Ci0gKiBl
bHNlLCBjdXJyZW50IHZpZXcgQHBhcmFtIG8gb3IgQGMgMCBvbiBmYWlsdXJlLgorICogZWxzZSwg
Y3VycmVudCB2aWV3IEBwYXJhbSBld2tWaWV3IG9yIEBjIDAgb24gZmFpbHVyZS4KICAqCiAgKiBA
c2VlIGV3a193aW5kb3dfZmVhdHVyZXNfcmVmKCkuCiAgKi8KIEV2YXNfT2JqZWN0KiBld2tfdmll
d193aW5kb3dfY3JlYXRlKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wgamF2YXNjcmlw
dCwgY29uc3QgV2ViQ29yZTo6V2luZG93RmVhdHVyZXMqIGNvcmVGZWF0dXJlcykKIHsKLSAgICBF
V0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAwKTsKKyAgICBFV0tfVklFV19T
RF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgMCk7CiAKLSAgICBpZiAoIXNkLT5h
cGktPndpbmRvd19jcmVhdGUpCisgICAgaWYgKCFzbWFydERhdGEtPmFwaS0+d2luZG93X2NyZWF0
ZSkKICAgICAgICAgcmV0dXJuIGV3a1ZpZXc7CiAKLSAgICBFd2tfV2luZG93X0ZlYXR1cmVzKiB3
aW5kb3dfZmVhdHVyZXMgPSBld2tfd2luZG93X2ZlYXR1cmVzX25ld19mcm9tX2NvcmUoY29yZUZl
YXR1cmVzKTsKLSAgICBpZiAoIXdpbmRvd19mZWF0dXJlcykKKyAgICBFd2tfV2luZG93X0ZlYXR1
cmVzKiB3aW5kb3dGZWF0dXJlcyA9IGV3a193aW5kb3dfZmVhdHVyZXNfbmV3X2Zyb21fY29yZShj
b3JlRmVhdHVyZXMpOworICAgIGlmICghd2luZG93RmVhdHVyZXMpCiAgICAgICAgIHJldHVybiAw
OwogCi0gICAgRXZhc19PYmplY3QqIHZpZXcgPSBzZC0+YXBpLT53aW5kb3dfY3JlYXRlKHNkLCBq
YXZhc2NyaXB0LCB3aW5kb3dfZmVhdHVyZXMpOwotICAgIGV3a193aW5kb3dfZmVhdHVyZXNfdW5y
ZWYod2luZG93X2ZlYXR1cmVzKTsKKyAgICBFdmFzX09iamVjdCogdmlldyA9IHNtYXJ0RGF0YS0+
YXBpLT53aW5kb3dfY3JlYXRlKHNtYXJ0RGF0YSwgamF2YXNjcmlwdCwgd2luZG93RmVhdHVyZXMp
OworICAgIGV3a193aW5kb3dfZmVhdHVyZXNfdW5yZWYod2luZG93RmVhdHVyZXMpOwogCiAgICAg
cmV0dXJuIHZpZXc7CiB9CkBAIC0yOTM5LDE2ICsyOTM5LDE2IEBAIEV2YXNfT2JqZWN0KiBld2tf
dmlld193aW5kb3dfY3JlYXRlKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wgamF2YXNj
cmlwdCwKICAqIHdpdGggYSAnc2VsZi5jbG9zZSgpJyBpbiBKYXZhc2NyaXB0KSBicm93c2VyIG11
c3QgcG9zdHBvbmUgdGhlIGRlbGV0aW9uIHRvIGFuCiAgKiBpZGxlci4KICAqCi0gKiBAcGFyYW0g
byBWaWV3IHRvIGJlIGNsb3NlZC4KKyAqIEBwYXJhbSBld2tWaWV3IFZpZXcgdG8gYmUgY2xvc2Vk
LgogICovCiB2b2lkIGV3a192aWV3X3dpbmRvd19jbG9zZShFdmFzX09iamVjdCogZXdrVmlldykK
IHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkKTsKKyAgICBFV0tf
VklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSk7CiAKICAgICBld2tfdmll
d19zdG9wKGV3a1ZpZXcpOwotICAgIGlmICghc2QtPmFwaS0+d2luZG93X2Nsb3NlKQorICAgIGlm
ICghc21hcnREYXRhLT5hcGktPndpbmRvd19jbG9zZSkKICAgICAgICAgcmV0dXJuOwotICAgIHNk
LT5hcGktPndpbmRvd19jbG9zZShzZCk7CisgICAgc21hcnREYXRhLT5hcGktPndpbmRvd19jbG9z
ZShzbWFydERhdGEpOwogfQogCiAvKioKQEAgLTI5ODksNyArMjk4OSw3IEBAIHZvaWQgZXdrX3Zp
ZXdfdG9vbGJhcnNfdmlzaWJsZV9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCB2
aXNpYmxlKQogICogQGludGVybmFsCiAgKiBHZXQgdG9vbGJhciB2aXNpYmlsaXR5LgogICoKLSAq
IEBwYXJhbSBvIFZpZXcuCisgKiBAcGFyYW0gZXdrVmlldyBWaWV3LgogICogQHBhcmFtIHZpc2li
bGUgYm9vbGVhbiBwb2ludGVyIGluIHdoaWNoIHRvIHNhdmUgdGhlIHJlc3VsdC4gSXQgZGVmYXVs
dHMKICAqIHRvIEBjIEZBTFNFLCBpLmUuIGlmIGJyb3dzZXIgZG9lcyBubyBsaXN0ZW4gdG8gZW1p
dHRlZCBzaWduYWwsIGl0IG1lYW5zCiAgKiB0aGVyZSBhcmUgbm8gdG9vbGJhcnMgYW5kIHRoZXJl
Zm9yZSB0aGV5IGFyZSBub3QgdmlzaWJsZS4KQEAgLTMwMDcsNyArMzAwNyw3IEBAIHZvaWQgZXdr
X3ZpZXdfdG9vbGJhcnNfdmlzaWJsZV9nZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9v
bCogdmlzaWJsZSkKICAqIEBpbnRlcm5hbAogICogU2V0IHN0YXR1c2JhciB2aXNpYmxlLgogICoK
LSAqIEBwYXJhbSBvIFZpZXcuCisgKiBAcGFyYW0gZXdrVmlldyBWaWV3LgogICogQHBhcmFtIHZp
c2libGUgQGMgVFJVRSBpZiBzdGF0dXNiYXIgYXJlIHZpc2libGUsIEBjIEZBTFNFIG90aGVyd2lz
ZS4KICAqCiAgKiBFbWl0cyBzaWduYWw6ICJzdGF0dXNiYXIsdmlzaWJsZSxzZXQiIHdpdGggYSBw
b2ludGVyIHRvIGEgYm9vbGVhbi4KQEAgLTMwMjIsNyArMzAyMiw3IEBAIHZvaWQgZXdrX3ZpZXdf
c3RhdHVzYmFyX3Zpc2libGVfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wgdmlz
aWJsZSkKICAqIEBpbnRlcm5hbAogICogR2V0IHN0YXR1c2JhciB2aXNpYmlsaXR5LgogICoKLSAq
IEBwYXJhbSBvIFZpZXcuCisgKiBAcGFyYW0gZXdrVmlldyBWaWV3LgogICogQHBhcmFtIHZpc2li
bGUgYm9vbGVhbiBwb2ludGVyIGluIHdoaWNoIHRvIHNhdmUgdGhlIHJlc3VsdC4gSXQgZGVmYXVs
dHMKICAqIHRvIEBjIEZBTFNFLCBpLmUuIGlmIGJyb3dzZXIgZG9lcyBubyBsaXN0ZW4gdG8gZW1p
dHRlZCBzaWduYWwsIGl0IG1lYW5zCiAgKiB0aGVyZSBpcyBubyBzdGF0dXNiYXIgYW5kIHRoZXJl
Zm9yZSBpdCBpcyBub3QgdmlzaWJsZS4KQEAgLTMwNDAsNyArMzA0MCw3IEBAIHZvaWQgZXdrX3Zp
ZXdfc3RhdHVzYmFyX3Zpc2libGVfZ2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wq
IHZpc2libGUpCiAgKiBAaW50ZXJuYWwKICAqIFNldCB0ZXh0IG9mIHN0YXR1c2JhcgogICoKLSAq
IEBwYXJhbSBvIFZpZXcuCisgKiBAcGFyYW0gZXdrVmlldyBWaWV3LgogICogQHBhcmFtIHRleHQg
TmV3IHRleHQgdG8gcHV0IG9uIHN0YXR1c2Jhci4KICAqCiAgKiBFbWl0cyBzaWduYWw6ICJzdGF0
dXNiYXIsdGV4dCxzZXQiIHdpdGggYSBzdHJpbmcuCkBAIC0zMDU2LDcgKzMwNTYsNyBAQCB2b2lk
IGV3a192aWV3X3N0YXR1c2Jhcl90ZXh0X3NldChFdmFzX09iamVjdCogZXdrVmlldywgY29uc3Qg
Y2hhciogdGV4dCkKICAqIEBpbnRlcm5hbAogICogU2V0IHNjcm9sbGJhcnMgdmlzaWJsZS4KICAq
Ci0gKiBAcGFyYW0gbyBWaWV3LgorICogQHBhcmFtIGV3a1ZpZXcgVmlldy4KICAqIEBwYXJhbSB2
aXNpYmxlIEBjIFRSVUUgaWYgc2Nyb2xsYmFycyBhcmUgdmlzaWJsZSwgQGMgRkFMU0Ugb3RoZXJ3
aXNlLgogICoKICAqIEVtaXRzIHNpZ25hbDogInNjcm9sbGJhcnMsdmlzaWJsZSxzZXQiIHdpdGgg
YSBwb2ludGVyIHRvIGEgYm9vbGVhbi4KQEAgLTMwNzEsNyArMzA3MSw3IEBAIHZvaWQgZXdrX3Zp
ZXdfc2Nyb2xsYmFyc192aXNpYmxlX3NldChFdmFzX09iamVjdCogZXdrVmlldywgRWluYV9Cb29s
IHZpc2libGUpCiAgKiBAaW50ZXJuYWwKICAqIEdldCBzY3JvbGxiYXJzIHZpc2liaWxpdHkuCiAg
KgotICogQHBhcmFtIG8gVmlldy4KKyAqIEBwYXJhbSBld2tWaWV3IFZpZXcuCiAgKiBAcGFyYW0g
dmlzaWJsZSBib29sZWFuIHBvaW50ZXIgaW4gd2hpY2ggdG8gc2F2ZSB0aGUgcmVzdWx0LiBJdCBk
ZWZhdWx0cwogICogdG8gQGMgRkFMU0UsIGkuZS4gaWYgYnJvd3NlciBkb2VzIG5vIGxpc3RlbiB0
byBlbWl0dGVkIHNpZ25hbCwgaXQgbWVhbnMKICAqIHRoZXJlIGFyZSBubyBzY3JvbGxiYXJzIGFu
ZCB0aGVyZWZvcmUgdGhleSBhcmUgbm90IHZpc2libGUuCkBAIC0zMDg5LDcgKzMwODksNyBAQCB2
b2lkIGV3a192aWV3X3Njcm9sbGJhcnNfdmlzaWJsZV9nZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcs
IEVpbmFfQm9vbCogdmlzaWJsZSkKICAqIEBpbnRlcm5hbAogICogU2V0IG1lbnViYXIgdmlzaWJs
ZS4KICAqCi0gKiBAcGFyYW0gbyBWaWV3LgorICogQHBhcmFtIGV3a1ZpZXcgVmlldy4KICAqIEBw
YXJhbSB2aXNpYmxlIEBjIFRSVUUgaWYgbWVudWJhciBpcyB2aXNpYmxlLCBAYyBGQUxTRSBvdGhl
cndpc2UuCiAgKgogICogRW1pdHMgc2lnbmFsOiAibWVudWJhcix2aXNpYmxlLHNldCIgd2l0aCBh
IHBvaW50ZXIgdG8gYSBib29sZWFuLgpAQCAtMzEwNCw3ICszMTA0LDcgQEAgdm9pZCBld2tfdmll
d19tZW51YmFyX3Zpc2libGVfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wgdmlz
aWJsZSkKICAqIEBpbnRlcm5hbAogICogR2V0IG1lbnViYXIgdmlzaWJpbGl0eS4KICAqCi0gKiBA
cGFyYW0gbyBWaWV3LgorICogQHBhcmFtIGV3a1ZpZXcgVmlldy4KICAqIEBwYXJhbSB2aXNpYmxl
IGJvb2xlYW4gcG9pbnRlciBpbiB3aGljaCB0byBzYXZlIHRoZSByZXN1bHQuIEl0IGRlZmF1bHRz
CiAgKiB0byBAYyBGQUxTRSwgaS5lLiBpZiBicm93c2VyIGRvZXMgbm8gbGlzdGVuIHRvIGVtaXR0
ZWQgc2lnbmFsLCBpdCBtZWFucwogICogdGhlcmUgaXMgbm8gbWVudWJhciBhbmQgdGhlcmVmb3Jl
IGl0IGlzIG5vdCB2aXNpYmxlLgpAQCAtMzEyMiw3ICszMTIyLDcgQEAgdm9pZCBld2tfdmlld19t
ZW51YmFyX3Zpc2libGVfZ2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wqIHZpc2li
bGUpCiAgKiBAaW50ZXJuYWwKICAqIFNldCB0b29sdGlwIHRleHQgYW5kIGRpc3BsYXkgaWYgaXQg
aXMgY3VycmVudGx5IGhpZGRlbi4KICAqCi0gKiBAcGFyYW0gbyBWaWV3LgorICogQHBhcmFtIGV3
a1ZpZXcgVmlldy4KICAqIEBwYXJhbSB0ZXh0IFRleHQgdG8gc2V0IHRvb2x0aXAgdG8uCiAgKgog
ICogRW1pdHMgc2lnbmFsOiAidG9vbHRpcCx0ZXh0LHNldCIgd2l0aCBhIHN0cmluZy4gSWYgdG9v
bHRpcCBtdXN0IGJlIGFjdHVhbGx5CkBAIC0zMTM3LDcgKzMxMzcsNyBAQCB2b2lkIGV3a192aWV3
X3Rvb2x0aXBfdGV4dF9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGNvbnN0IGNoYXIqIHRleHQp
CiAvKioKICAqIEBpbnRlcm5hbAogICoKLSAqIEBwYXJhbSBvIFZpZXcuCisgKiBAcGFyYW0gZXdr
VmlldyBWaWV3LgogICogQHBhcmFtIG1lc3NhZ2UgU3RyaW5nIHRvIHNob3cgb24gY29uc29sZS4K
ICAqIEBwYXJhbSBsaW5lTnVtYmVyIExpbmUgbnVtYmVyLgogICogQHNvdXJjZUlEIFNvdXJjZSBp
ZC4KQEAgLTMxNDYsNTggKzMxNDYsNTggQEAgdm9pZCBld2tfdmlld190b29sdGlwX3RleHRfc2V0
KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBjaGFyKiB0ZXh0KQogdm9pZCBld2tfdmlld19h
ZGRfY29uc29sZV9tZXNzYWdlKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBjaGFyKiBtZXNz
YWdlLCB1bnNpZ25lZCBpbnQgbGluZU51bWJlciwgY29uc3QgY2hhciogc291cmNlSUQpCiB7CiAg
ICAgREJHKCJld2tWaWV3PSVwIG1lc3NhZ2U9JXMgbGluZU51bWJlcj0ldSBzb3VyY2VJRD0lcyIs
IGV3a1ZpZXcsIG1lc3NhZ2UsIGxpbmVOdW1iZXIsIHNvdXJjZUlEKTsKLSAgICBFV0tfVklFV19T
RF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTihzZC0+YXBpKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpLT5h
ZGRfY29uc29sZV9tZXNzYWdlKTsKLSAgICBzZC0+YXBpLT5hZGRfY29uc29sZV9tZXNzYWdlKHNk
LCBtZXNzYWdlLCBsaW5lTnVtYmVyLCBzb3VyY2VJRCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOKHNtYXJ0RGF0YS0+YXBpKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFy
dERhdGEtPmFwaS0+YWRkX2NvbnNvbGVfbWVzc2FnZSk7CisgICAgc21hcnREYXRhLT5hcGktPmFk
ZF9jb25zb2xlX21lc3NhZ2Uoc21hcnREYXRhLCBtZXNzYWdlLCBsaW5lTnVtYmVyLCBzb3VyY2VJ
RCk7CiB9CiAKIGJvb2wgZXdrX3ZpZXdfZm9jdXNfY2FuX2N5Y2xlKEV2YXNfT2JqZWN0KiBld2tW
aWV3LCBFd2tfRm9jdXNfRGlyZWN0aW9uIGRpcmVjdGlvbikKIHsKICAgICBEQkcoImV3a1ZpZXc9
JXAgZGlyZWN0aW9uPSVkIiwgZXdrVmlldywgZGlyZWN0aW9uKTsKLSAgICBFV0tfVklFV19TRF9H
RVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBmYWxzZSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk5fVkFMKHNkLT5hcGksIGZhbHNlKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVU
VVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgZmFsc2UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOX1ZBTChzbWFydERhdGEtPmFwaSwgZmFsc2UpOwogCi0gICAgaWYgKCFzZC0+YXBpLT5m
b2N1c19jYW5fY3ljbGUpCisgICAgaWYgKCFzbWFydERhdGEtPmFwaS0+Zm9jdXNfY2FuX2N5Y2xl
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gc2QtPmFwaS0+Zm9jdXNfY2Fu
X2N5Y2xlKHNkLCBkaXJlY3Rpb24pOworICAgIHJldHVybiBzbWFydERhdGEtPmFwaS0+Zm9jdXNf
Y2FuX2N5Y2xlKHNtYXJ0RGF0YSwgZGlyZWN0aW9uKTsKIH0KIAogdm9pZCBld2tfdmlld19ydW5f
amF2YXNjcmlwdF9hbGVydChFdmFzX09iamVjdCogZXdrVmlldywgRXZhc19PYmplY3QqIGZyYW1l
LCBjb25zdCBjaGFyKiBtZXNzYWdlKQogewogICAgIERCRygiZXdrVmlldz0lcCBmcmFtZT0lcCBt
ZXNzYWdlPSVzIiwgZXdrVmlldywgZnJhbWUsIG1lc3NhZ2UpOwotICAgIEVXS19WSUVXX1NEX0dF
VF9PUl9SRVRVUk4oZXdrVmlldywgc2QpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJO
KHNkLT5hcGkpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnRE
YXRhKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmFwaSk7CiAK
LSAgICBpZiAoIXNkLT5hcGktPnJ1bl9qYXZhc2NyaXB0X2FsZXJ0KQorICAgIGlmICghc21hcnRE
YXRhLT5hcGktPnJ1bl9qYXZhc2NyaXB0X2FsZXJ0KQogICAgICAgICByZXR1cm47CiAKLSAgICBz
ZC0+YXBpLT5ydW5famF2YXNjcmlwdF9hbGVydChzZCwgZnJhbWUsIG1lc3NhZ2UpOworICAgIHNt
YXJ0RGF0YS0+YXBpLT5ydW5famF2YXNjcmlwdF9hbGVydChzbWFydERhdGEsIGZyYW1lLCBtZXNz
YWdlKTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3J1bl9qYXZhc2NyaXB0X2NvbmZpcm0oRXZh
c19PYmplY3QqIGV3a1ZpZXcsIEV2YXNfT2JqZWN0KiBmcmFtZSwgY29uc3QgY2hhciogbWVzc2Fn
ZSkKIHsKICAgICBEQkcoImV3a1ZpZXc9JXAgZnJhbWU9JXAgbWVzc2FnZT0lcyIsIGV3a1ZpZXcs
IGZyYW1lLCBtZXNzYWdlKTsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcs
IHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2Qt
PmFwaSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3
LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJO
X1ZBTChzbWFydERhdGEtPmFwaSwgRUlOQV9GQUxTRSk7CiAKLSAgICBpZiAoIXNkLT5hcGktPnJ1
bl9qYXZhc2NyaXB0X2NvbmZpcm0pCisgICAgaWYgKCFzbWFydERhdGEtPmFwaS0+cnVuX2phdmFz
Y3JpcHRfY29uZmlybSkKICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CiAKLSAgICByZXR1cm4g
c2QtPmFwaS0+cnVuX2phdmFzY3JpcHRfY29uZmlybShzZCwgZnJhbWUsIG1lc3NhZ2UpOworICAg
IHJldHVybiBzbWFydERhdGEtPmFwaS0+cnVuX2phdmFzY3JpcHRfY29uZmlybShzbWFydERhdGEs
IGZyYW1lLCBtZXNzYWdlKTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3J1bl9qYXZhc2NyaXB0
X3Byb21wdChFdmFzX09iamVjdCogZXdrVmlldywgRXZhc19PYmplY3QqIGZyYW1lLCBjb25zdCBj
aGFyKiBtZXNzYWdlLCBjb25zdCBjaGFyKiBkZWZhdWx0VmFsdWUsIGNoYXIqKiB2YWx1ZSkKIHsK
ICAgICBEQkcoImV3a1ZpZXc9JXAgZnJhbWU9JXAgbWVzc2FnZT0lcyIsIGV3a1ZpZXcsIGZyYW1l
LCBtZXNzYWdlKTsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBF
SU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmFwaSwg
RUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFy
dERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChz
bWFydERhdGEtPmFwaSwgRUlOQV9GQUxTRSk7CiAKLSAgICBpZiAoIXNkLT5hcGktPnJ1bl9qYXZh
c2NyaXB0X3Byb21wdCkKKyAgICBpZiAoIXNtYXJ0RGF0YS0+YXBpLT5ydW5famF2YXNjcmlwdF9w
cm9tcHQpCiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwogCi0gICAgcmV0dXJuIHNkLT5hcGkt
PnJ1bl9qYXZhc2NyaXB0X3Byb21wdChzZCwgZnJhbWUsIG1lc3NhZ2UsIGRlZmF1bHRWYWx1ZSwg
dmFsdWUpOworICAgIHJldHVybiBzbWFydERhdGEtPmFwaS0+cnVuX2phdmFzY3JpcHRfcHJvbXB0
KHNtYXJ0RGF0YSwgZnJhbWUsIG1lc3NhZ2UsIGRlZmF1bHRWYWx1ZSwgdmFsdWUpOwogfQogCiAv
KioKQEAgLTMyMDcsMjAgKzMyMDcsMjAgQEAgRWluYV9Cb29sIGV3a192aWV3X3J1bl9qYXZhc2Ny
aXB0X3Byb21wdChFdmFzX09iamVjdCogZXdrVmlldywgRXZhc19PYmplY3QqIGZyYW0KICAqIGlt
cGxlbWVudGF0aW9uLCB3aGljaCBsb2dzIGFuZCByZXR1cm5zIEVJTkFfRkFMU0UuIENsaWVudCBt
YXkgcmVtb3ZlIGxvZyBieQogICogc2V0dGluZyB0aGlzIGZ1bmN0aW9uIDAsIHdoaWNoIHdpbGwg
anVzdCByZXR1cm4gRUlOQV9GQUxTRS4KICAqCi0gKiBAcGFyYW0gbyBWaWV3LgorICogQHBhcmFt
IGV3a1ZpZXcgVmlldy4KICAqCiAgKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBpZiBzY3JpcHQgc2hv
dWxkIGJlIHN0b3BwZWQ7IEBjIEVJTkFfRkFMU0Ugb3RoZXJ3aXNlCiAgKi8KIEVpbmFfQm9vbCBl
d2tfdmlld19zaG91bGRfaW50ZXJydXB0X2phdmFzY3JpcHQoRXZhc19PYmplY3QqIGV3a1ZpZXcp
CiB7CiAgICAgREJHKCJld2tWaWV3PSVwIiwgZXdrVmlldyk7Ci0gICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk5fVkFMKHNkLT5hcGksIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dF
VF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5hcGksIEVJTkFfRkFMU0UpOwogCi0g
ICAgaWYgKCFzZC0+YXBpLT5zaG91bGRfaW50ZXJydXB0X2phdmFzY3JpcHQpCisgICAgaWYgKCFz
bWFydERhdGEtPmFwaS0+c2hvdWxkX2ludGVycnVwdF9qYXZhc2NyaXB0KQogICAgICAgICByZXR1
cm4gRUlOQV9GQUxTRTsKIAotICAgIHJldHVybiBzZC0+YXBpLT5zaG91bGRfaW50ZXJydXB0X2ph
dmFzY3JpcHQoc2QpOworICAgIHJldHVybiBzbWFydERhdGEtPmFwaS0+c2hvdWxkX2ludGVycnVw
dF9qYXZhc2NyaXB0KHNtYXJ0RGF0YSk7CiB9CiAKIC8qKgpAQCAtMzIzMCw1MSArMzIzMCw1MSBA
QCBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2hvdWxkX2ludGVycnVwdF9qYXZhc2NyaXB0KEV2YXNfT2Jq
ZWN0KiBld2tWaWV3KQogICogaXMgZXhjZWVkZWQuIEJyb3dzZXIgbWF5IHVzZSB0aGlzIHRvIGlu
Y3JlYXNlIHRoZSBzaXplIG9mIHF1b3RhIGJlZm9yZSB0aGUKICAqIG9yaWdpbmF0aW5nIG9wZXJh
dGlvbmEgZmFpbHMuCiAgKgotICogQHBhcmFtIG8gVmlldy4KKyAqIEBwYXJhbSBld2tWaWV3IFZp
ZXcuCiAgKiBAcGFyYW0gZnJhbWUgVGhlIGZyYW1lIHdob3NlIHdlYiBwYWdlIGV4Y2VlZGVkIGl0
cyBkYXRhYmFzZSBxdW90YS4KICAqIEBwYXJhbSBkYXRhYmFzZU5hbWUgRGF0YWJhc2UgbmFtZS4K
LSAqIEBwYXJhbSBjdXJyZW50X3NpemUgQ3VycmVudCBzaXplIG9mIHRoaXMgZGF0YWJhc2UKLSAq
IEBwYXJhbSBleHBlY3RlZF9zaXplIFRoZSBleHBlY3RlZCBzaXplIG9mIHRoaXMgZGF0YWJhc2Ug
aW4gb3JkZXIgdG8gZnVsZmlsbAorICogQHBhcmFtIGN1cnJlbnRTaXplIEN1cnJlbnQgc2l6ZSBv
ZiB0aGlzIGRhdGFiYXNlCisgKiBAcGFyYW0gZXhwZWN0ZWRTaXplIFRoZSBleHBlY3RlZCBzaXpl
IG9mIHRoaXMgZGF0YWJhc2UgaW4gb3JkZXIgdG8gZnVsZmlsbAogICogc2l0ZSdzIHJlcXVpcmVt
ZW50LgogICovCiB1aW50NjRfdCBld2tfdmlld19leGNlZWRlZF9kYXRhYmFzZV9xdW90YShFdmFz
X09iamVjdCogZXdrVmlldywgRXZhc19PYmplY3QqIGZyYW1lLCBjb25zdCBjaGFyKiBkYXRhYmFz
ZU5hbWUsIHVpbnQ2NF90IGN1cnJlbnRTaXplLCB1aW50NjRfdCBleHBlY3RlZFNpemUpCiB7CiAg
ICAgREJHKCJld2tWaWV3PSVwIiwgZXdrVmlldyk7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JF
VFVSTihld2tWaWV3LCBzZCwgMCk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFM
KHNkLT5hcGksIDApOwotICAgIGlmICghc2QtPmFwaS0+ZXhjZWVkZWRfZGF0YWJhc2VfcXVvdGEp
CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIDApOwor
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmFwaSwgMCk7Cisg
ICAgaWYgKCFzbWFydERhdGEtPmFwaS0+ZXhjZWVkZWRfZGF0YWJhc2VfcXVvdGEpCiAgICAgICAg
IHJldHVybiAwOwogCi0gICAgSU5GKCJjdXJyZW50X3NpemU9JSIgUFJJdTY0ICIgZXhwZWN0ZWRf
c2l6ZT0lIiBQUkl1NjQsIGN1cnJlbnRTaXplLCBleHBlY3RlZFNpemUpOwotICAgIHJldHVybiBz
ZC0+YXBpLT5leGNlZWRlZF9kYXRhYmFzZV9xdW90YShzZCwgZnJhbWUsIGRhdGFiYXNlTmFtZSwg
Y3VycmVudFNpemUsIGV4cGVjdGVkU2l6ZSk7CisgICAgSU5GKCJjdXJyZW50U2l6ZT0lIiBQUkl1
NjQgIiBleHBlY3RlZFNpemU9JSIgUFJJdTY0LCBjdXJyZW50U2l6ZSwgZXhwZWN0ZWRTaXplKTsK
KyAgICByZXR1cm4gc21hcnREYXRhLT5hcGktPmV4Y2VlZGVkX2RhdGFiYXNlX3F1b3RhKHNtYXJ0
RGF0YSwgZnJhbWUsIGRhdGFiYXNlTmFtZSwgY3VycmVudFNpemUsIGV4cGVjdGVkU2l6ZSk7CiB9
CiAKIC8qKgogICogQGludGVybmFsCiAgKiBPcGVuIHBhbmVsIHRvIGNob29zZSBhIGZpbGUuCiAg
KgotICogQHBhcmFtIG8gVmlldy4KKyAqIEBwYXJhbSBld2tWaWV3IFZpZXcuCiAgKiBAcGFyYW0g
ZnJhbWUgRnJhbWUgaW4gd2hpY2ggb3BlcmF0aW9uIGlzIHJlcXVpcmVkLgotICogQHBhcmFtIGFs
bG93c19tdWx0aXBsZV9maWxlcyBAYyBFSU5BX1RSVUUgd2hlbiBtb3JlIHRoYW4gb25lIGZpbGUg
bWF5IGJlCisgKiBAcGFyYW0gYWxsb3dzTXVsdGlwbGVGaWxlcyBAYyBFSU5BX1RSVUUgd2hlbiBt
b3JlIHRoYW4gb25lIGZpbGUgbWF5IGJlCiAgKiBzZWxlY3RlZCwgQGMgRUlOQV9GQUxTRSBvdGhl
cndpc2UKLSAqIEBwYXJhbSBhY2NlcHRfdHlwZXMgYWNjZXB0IG1pbWUgdHlwZXMKLSAqIEBzZWxl
Y3RlZF9maWxlbmFtZXMgTGlzdCBvZiBmaWxlcyBzZWxlY3RlZC4KKyAqIEBwYXJhbSBhY2NlcHRU
eXBlcyBhY2NlcHQgbWltZSB0eXBlcworICogQHNlbGVjdGVkRmlsZW5hbWVzIExpc3Qgb2YgZmls
ZXMgc2VsZWN0ZWQuCiAgKgogICogQHJldHVybiBARUlOQV9GQUxTRSBpZiB1c2VyIGNhbmNlbGVk
IGZpbGUgc2VsZWN0aW9uOyBARUlOQV9UUlVFIGlmIGNvbmZpcm1lZC4KICAqLwogRWluYV9Cb29s
IGV3a192aWV3X3J1bl9vcGVuX3BhbmVsKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFdmFzX09iamVj
dCogZnJhbWUsIEVpbmFfQm9vbCBhbGxvd3NNdWx0aXBsZUZpbGVzLCBjb25zdCBjaGFyKiBhY2Nl
cHRUeXBlcywgRWluYV9MaXN0Kiogc2VsZWN0ZWRGaWxlbmFtZXMpCiB7Ci0gICAgREJHKCJld2tW
aWV3PSVwIGZyYW1lPSVwIGFsbG93c19tdWx0aXBsZV9maWxlcz0lZCIsIGV3a1ZpZXcsIGZyYW1l
LCBhbGxvd3NNdWx0aXBsZUZpbGVzKTsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3
a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9W
QUwoc2QtPmFwaSwgRUlOQV9GQUxTRSk7CisgICAgREJHKCJld2tWaWV3PSVwIGZyYW1lPSVwIGFs
bG93c011bHRpcGxlRmlsZXM9JWQiLCBld2tWaWV3LCBmcmFtZSwgYWxsb3dzTXVsdGlwbGVGaWxl
cyk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJ
TkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEt
PmFwaSwgRUlOQV9GQUxTRSk7CiAgICAgRWluYV9Cb29sIGNvbmZpcm07CiAKLSAgICBpZiAoIXNk
LT5hcGktPnJ1bl9vcGVuX3BhbmVsKQorICAgIGlmICghc21hcnREYXRhLT5hcGktPnJ1bl9vcGVu
X3BhbmVsKQogICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKIAogICAgICpzZWxlY3RlZEZpbGVu
YW1lcyA9IDA7CiAKLSAgICBjb25maXJtID0gc2QtPmFwaS0+cnVuX29wZW5fcGFuZWwoc2QsIGZy
YW1lLCBhbGxvd3NNdWx0aXBsZUZpbGVzLCBhY2NlcHRUeXBlcywgc2VsZWN0ZWRGaWxlbmFtZXMp
OworICAgIGNvbmZpcm0gPSBzbWFydERhdGEtPmFwaS0+cnVuX29wZW5fcGFuZWwoc21hcnREYXRh
LCBmcmFtZSwgYWxsb3dzTXVsdGlwbGVGaWxlcywgYWNjZXB0VHlwZXMsIHNlbGVjdGVkRmlsZW5h
bWVzKTsKICAgICBpZiAoIWNvbmZpcm0gJiYgKnNlbGVjdGVkRmlsZW5hbWVzKQogICAgICAgICBF
UlIoIkNhbmNlbGVkIGZpbGUgc2VsZWN0aW9uLCBidXQgc2VsZWN0ZWQgZmlsZW5hbWVzICE9IDAu
IEZyZWUgbmFtZXMgYmVmb3JlIHJldHVybi4iKTsKICAgICByZXR1cm4gY29uZmlybTsKQEAgLTMy
ODMsMTYgKzMyODMsMTYgQEAgRWluYV9Cb29sIGV3a192aWV3X3J1bl9vcGVuX3BhbmVsKEV2YXNf
T2JqZWN0KiBld2tWaWV3LCBFdmFzX09iamVjdCogZnJhbWUsIEVpbmEKIHZvaWQgZXdrX3ZpZXdf
cmVwYWludChFdmFzX09iamVjdCogZXdrVmlldywgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHks
IEV2YXNfQ29vcmQgd2lkdGgsIEV2YXNfQ29vcmQgaGVpZ2h0KQogewogICAgIERCRygiZXdrVmll
dz0lcCwgcmVnaW9uPSVkLCVkICsgJWR4JWQiLCBld2tWaWV3LCB4LCB5LCB3aWR0aCwgaGVpZ2h0
KTsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkKTsKLSAgICBFV0tf
VklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYpOworICAgIEVXS19WSUVXX1NEX0dFVF9P
Ul9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9S
RVRVUk4oc21hcnREYXRhLCBwcml2KTsKIAotICAgIGlmICghcHJpdi0+bWFpbl9mcmFtZS0+Y29u
dGVudFJlbmRlcmVyKCkpIHsKKyAgICBpZiAoIXByaXYtPm1haW5GcmFtZS0+Y29udGVudFJlbmRl
cmVyKCkpIHsKICAgICAgICAgRVJSKCJubyBtYWluIGZyYW1lIGNvbnRlbnQgcmVuZGVyZXIuIik7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBfZXdrX3ZpZXdfcmVwYWludF9hZGQocHJp
diwgeCwgeSwgd2lkdGgsIGhlaWdodCk7Ci0gICAgX2V3a192aWV3X3NtYXJ0X2NoYW5nZWQoc2Qp
OworICAgIF9ld2tfdmlld19zbWFydF9jaGFuZ2VkKHNtYXJ0RGF0YSk7CiB9CiAKIHZvaWQgZXdr
X3ZpZXdfc2Nyb2xsKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFdmFzX0Nvb3JkIGR4LCBFdmFzX0Nv
b3JkIGR5LCBFdmFzX0Nvb3JkIHNjcm9sbFgsIEV2YXNfQ29vcmQgc2Nyb2xsWSwgRXZhc19Db29y
ZCBzY3JvbGxXaWR0aCwgRXZhc19Db29yZCBzY3JvbGxIZWlnaHQsIEV2YXNfQ29vcmQgY2VudGVy
WCwgRXZhc19Db29yZCBjZW50ZXJZLCBFdmFzX0Nvb3JkIGNlbnRlcldpZHRoLCBFdmFzX0Nvb3Jk
IGNlbnRlckhlaWdodCwgRWluYV9Cb29sIG1haW5GcmFtZSkKQEAgLTMzMDQsMTkgKzMzMDQsMTkg
QEAgdm9pZCBld2tfdmlld19zY3JvbGwoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV2YXNfQ29vcmQg
ZHgsIEV2YXNfQ29vcmQgZHksIEV2YXNfQ28KICAgICAgICAgV1JOKCJzY3JvbGwgcmVnaW9uIGFu
ZCBjbGlwIGFyZSBkaWZmZXJlbnQhICVkLCVkKyVkeCVkIGFuZCAlZCwlZCslZHglZCIsCiAgICAg
ICAgICAgICBzY3JvbGxYLCBzY3JvbGxZLCBzY3JvbGxXaWR0aCwgc2Nyb2xsSGVpZ2h0LCBjZW50
ZXJYLCBjZW50ZXJZLCBjZW50ZXJXaWR0aCwgY2VudGVySGVpZ2h0KTsKIAotICAgIEVXS19WSUVX
X1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09S
X1JFVFVSTihzZCwgcHJpdik7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3
LCBzbWFydERhdGEpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEs
IHByaXYpOwogICAgIEVJTkFfU0FGRVRZX09OX1RSVUVfUkVUVVJOKCFkeCAmJiAhZHkpOwogCiAg
ICAgX2V3a192aWV3X3Njcm9sbF9hZGQocHJpdiwgZHgsIGR5LCBzY3JvbGxYLCBzY3JvbGxZLCBz
Y3JvbGxXaWR0aCwgc2Nyb2xsSGVpZ2h0LCBtYWluRnJhbWUpOwogCi0gICAgX2V3a192aWV3X3Nt
YXJ0X2NoYW5nZWQoc2QpOworICAgIF9ld2tfdmlld19zbWFydF9jaGFuZ2VkKHNtYXJ0RGF0YSk7
CiB9CiAKIFdlYkNvcmU6OlBhZ2UqIGV3a192aWV3X2NvcmVfcGFnZV9nZXQoY29uc3QgRXZhc19P
YmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3
LCBzZCwgMCk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCAwKTsK
KyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgMCk7Cisg
ICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgMCk7CiAgICAg
cmV0dXJuIHByaXYtPnBhZ2U7CiB9CiAKQEAgLTMzMzEsMzAgKzMzMzEsMzAgQEAgV1RGOjpQYXNz
UmVmUHRyPFdlYkNvcmU6OkZyYW1lPiBld2tfdmlld19mcmFtZV9jcmVhdGUoRXZhc19PYmplY3Qq
IGV3a1ZpZXcsIEV2YXMKICAgICAgICAgZXdrVmlldywgZnJhbWUsIG5hbWUudXRmOCgpLmRhdGEo
KSwgb3duZXJFbGVtZW50LAogICAgICAgICB1cmwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgcmVm
ZXJyZXIudXRmOCgpLmRhdGEoKSk7CiAKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3
a1ZpZXcsIHNkLCAwKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYs
IDApOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCAw
KTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCAwKTsK
IAotICAgIFdURjo6UmVmUHRyPFdlYkNvcmU6OkZyYW1lPiBjZiA9IF9ld2tfdmlld19jb3JlX2Zy
YW1lX25ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2QsIHBy
aXYsIG93bmVyRWxlbWVudCk7Ci0gICAgaWYgKCFjZikgeworICAgIFdURjo6UmVmUHRyPFdlYkNv
cmU6OkZyYW1lPiBjb3JlRnJhbWUgPSBfZXdrX3ZpZXdfY29yZV9mcmFtZV9uZXcKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNtYXJ0RGF0YSwgcHJpdiwgb3duZXJF
bGVtZW50KTsKKyAgICBpZiAoIWNvcmVGcmFtZSkgewogICAgICAgICBFUlIoIkNvdWxkIG5vdCBj
cmVhdGUgY2hpbGQgY29yZSBmcmFtZSAnJXMnIiwgbmFtZS51dGY4KCkuZGF0YSgpKTsKICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgaWYgKCFld2tfZnJhbWVfY2hpbGRfYWRkKGZyYW1l
LCBjZiwgbmFtZSwgdXJsLCByZWZlcnJlcikpIHsKKyAgICBpZiAoIWV3a19mcmFtZV9jaGlsZF9h
ZGQoZnJhbWUsIGNvcmVGcmFtZSwgbmFtZSwgdXJsLCByZWZlcnJlcikpIHsKICAgICAgICAgRVJS
KCJDb3VsZCBub3QgY3JlYXRlIGNoaWxkIGZyYW1lIG9iamVjdCAnJXMnIiwgbmFtZS51dGY4KCku
ZGF0YSgpKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCiAgICAgLy8gVGhlIGNyZWF0aW9u
IG9mIHRoZSBmcmFtZSBtYXkgaGF2ZSByZW1vdmVkIGl0c2VsZiBhbHJlYWR5LgotICAgIGlmICgh
Y2YtPnBhZ2UoKSB8fCAhY2YtPnRyZWUoKSB8fCAhY2YtPnRyZWUoKS0+cGFyZW50KCkpCisgICAg
aWYgKCFjb3JlRnJhbWUtPnBhZ2UoKSB8fCAhY29yZUZyYW1lLT50cmVlKCkgfHwgIWNvcmVGcmFt
ZS0+dHJlZSgpLT5wYXJlbnQoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBzZC0+Y2hhbmdl
ZC5mcmFtZV9yZWN0ID0gRUlOQV9UUlVFOwotICAgIF9ld2tfdmlld19zbWFydF9jaGFuZ2VkKHNk
KTsKKyAgICBzbWFydERhdGEtPmNoYW5nZWQuZnJhbWVfcmVjdCA9IEVJTkFfVFJVRTsKKyAgICBf
ZXdrX3ZpZXdfc21hcnRfY2hhbmdlZChzbWFydERhdGEpOwogCiAgICAgZXZhc19vYmplY3Rfc21h
cnRfY2FsbGJhY2tfY2FsbChld2tWaWV3LCAiZnJhbWUsY3JlYXRlZCIsIGZyYW1lKTsKLSAgICBy
ZXR1cm4gY2YucmVsZWFzZSgpOworICAgIHJldHVybiBjb3JlRnJhbWUucmVsZWFzZSgpOwogfQog
CiBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6V2lkZ2V0PiBld2tfdmlld19wbHVnaW5fY3JlYXRl
KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFdmFzX09iamVjdCogZnJhbWUsIGNvbnN0IFdlYkNvcmU6
OkludFNpemUmIHBsdWdpblNpemUsIFdlYkNvcmU6OkhUTUxQbHVnSW5FbGVtZW50KiBlbGVtZW50
LCBjb25zdCBXZWJDb3JlOjpLVVJMJiB1cmwsIGNvbnN0IFdURjo6VmVjdG9yPFdURjo6U3RyaW5n
PiYgcGFyYW1OYW1lcywgY29uc3QgV1RGOjpWZWN0b3I8V1RGOjpTdHJpbmc+JiBwYXJhbVZhbHVl
cywgY29uc3QgV1RGOjpTdHJpbmcmIG1pbWVUeXBlLCBib29sIGxvYWRNYW51YWxseSkKQEAgLTMz
NjMsOSArMzM2Myw5IEBAIFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpXaWRnZXQ+IGV3a192aWV3
X3BsdWdpbl9jcmVhdGUoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV2CiAgICAgICAgIGV3a1ZpZXcs
IGZyYW1lLCBwbHVnaW5TaXplLndpZHRoKCksIHBsdWdpblNpemUuaGVpZ2h0KCksIGVsZW1lbnQs
CiAgICAgICAgIHVybC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBtaW1lVHlwZS51dGY4KCkuZGF0
YSgpKTsKIAotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIDApOwot
ICAgIHNkLT5jaGFuZ2VkLmZyYW1lX3JlY3QgPSBFSU5BX1RSVUU7Ci0gICAgX2V3a192aWV3X3Nt
YXJ0X2NoYW5nZWQoc2QpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywg
c21hcnREYXRhLCAwKTsKKyAgICBzbWFydERhdGEtPmNoYW5nZWQuZnJhbWVfcmVjdCA9IEVJTkFf
VFJVRTsKKyAgICBfZXdrX3ZpZXdfc21hcnRfY2hhbmdlZChzbWFydERhdGEpOwogCiAgICAgcmV0
dXJuIGV3a19mcmFtZV9wbHVnaW5fY3JlYXRlCiAgICAgICAgICAgICAgICAoZnJhbWUsIHBsdWdp
blNpemUsIGVsZW1lbnQsIHVybCwgcGFyYW1OYW1lcywgcGFyYW1WYWx1ZXMsCkBAIC0zMzg2LDEz
ICszMzg2LDEzIEBAIFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpXaWRnZXQ+IGV3a192aWV3X3Bs
dWdpbl9jcmVhdGUoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV2CiB2b2lkIGV3a192aWV3X3BvcHVw
X25ldyhFdmFzX09iamVjdCogZXdrVmlldywgV2ViQ29yZTo6UG9wdXBNZW51Q2xpZW50KiBjbGll
bnQsIGludCBzZWxlY3RlZCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdCkKIHsKICAgICBJ
TkYoImV3a1ZpZXc9JXAiLCBld2tWaWV3KTsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJO
KGV3a1ZpZXcsIHNkKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYp
OworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhKTsKKyAg
ICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2KTsKIAotICAgIGlm
IChwcml2LT5wb3B1cC5tZW51X2NsaWVudCkKKyAgICBpZiAocHJpdi0+cG9wdXAubWVudUNsaWVu
dCkKICAgICAgICAgZXdrX3ZpZXdfcG9wdXBfZGVzdHJveShld2tWaWV3KTsKIAotICAgIHByaXYt
PnBvcHVwLm1lbnVfY2xpZW50ID0gY2xpZW50OworICAgIHByaXYtPnBvcHVwLm1lbnVDbGllbnQg
PSBjbGllbnQ7CiAKICAgICAvLyBwb3B1bGF0ZSBpdGVtcwogICAgIGNvbnN0IGludCBzaXplID0g
Y2xpZW50LT5saXN0U2l6ZSgpOwpAQCAtMzQxOSwxMCArMzQxOSwxMCBAQCB2b2lkIGV3a192aWV3
X3BvcHVwX25ldyhFdmFzX09iamVjdCogZXdrVmlldywgV2ViQ29yZTo6UG9wdXBNZW51Q2xpZW50
KiBjbGllbnQsCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfcG9wdXBfZGVzdHJveShFdmFzX09iamVjdCog
ZXdrVmlldykKIHsKICAgICBJTkYoImV3a1ZpZXc9JXAiLCBld2tWaWV3KTsKLSAgICBFV0tfVklF
V19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklF
V19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVX
X1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBF
V0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsK
IAotICAgIGlmICghcHJpdi0+cG9wdXAubWVudV9jbGllbnQpCisgICAgaWYgKCFwcml2LT5wb3B1
cC5tZW51Q2xpZW50KQogICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKIAogICAgIGV2YXNfb2Jq
ZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdrVmlldywgInBvcHVwLHdpbGxkZWxldGUiLCAmcHJp
di0+cG9wdXAubWVudSk7CkBAIC0zNDMzLDggKzM0MzMsOCBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdf
cG9wdXBfZGVzdHJveShFdmFzX09iamVjdCogZXdrVmlldykKICAgICAgICAgZWluYV9zdHJpbmdz
aGFyZV9kZWwoaXRlbS0+dGV4dCk7CiAgICAgICAgIGZyZWUoaXRlbSk7CiAgICAgfQotICAgIHBy
aXYtPnBvcHVwLm1lbnVfY2xpZW50LT5wb3B1cERpZEhpZGUoKTsKLSAgICBwcml2LT5wb3B1cC5t
ZW51X2NsaWVudCA9IDA7CisgICAgcHJpdi0+cG9wdXAubWVudUNsaWVudC0+cG9wdXBEaWRIaWRl
KCk7CisgICAgcHJpdi0+cG9wdXAubWVudUNsaWVudCA9IDA7CiAKICAgICByZXR1cm4gRUlOQV9U
UlVFOwogfQpAQCAtMzQ0MiwxOCArMzQ0MiwxOCBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfcG9wdXBf
ZGVzdHJveShFdmFzX09iamVjdCogZXdrVmlldykKIHZvaWQgZXdrX3ZpZXdfcG9wdXBfc2VsZWN0
ZWRfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBpbnQgaW5kZXgpCiB7CiAgICAgSU5GKCJld2tW
aWV3PSVwIiwgZXdrVmlldyk7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3
LCBzZCk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2KTsKLSAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihwcml2LT5wb3B1cC5tZW51X2NsaWVudCk7CisgICAg
RVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEpOworICAgIEVXS19W
SUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYpOworICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOKHByaXYtPnBvcHVwLm1lbnVDbGllbnQpOwogCi0gICAgcHJpdi0+cG9w
dXAubWVudV9jbGllbnQtPnZhbHVlQ2hhbmdlZChpbmRleCk7CisgICAgcHJpdi0+cG9wdXAubWVu
dUNsaWVudC0+dmFsdWVDaGFuZ2VkKGluZGV4KTsKIH0KIAogLyoqCiAgKiBAaW50ZXJuYWwKICAq
IFJlcXVlc3QgYSBkb3dubG9hZCB0byB1c2VyLgogICoKLSAqIEBwYXJhbSBvIFZpZXcuCisgKiBA
cGFyYW0gZXdrVmlldyBWaWV3LgogICogQG9hcmFtIGRvd25sb2FkIEV3a19Eb3dubG9hZCBzdHJ1
Y3QgdG8gYmUgc2VudC4KICAqCiAgKiBFbWl0czogImRvd25sb2FkLHJlcXVlc3QiIHdpdGggYW4g
RXdrX0Rvd25sb2FkIGNvbnRhaW5pbmcgdGhlIGRldGFpbHMgb2YgdGhlCkBAIC0zNDY5LDcgKzM0
NjksNyBAQCB2b2lkIGV3a192aWV3X2Rvd25sb2FkX3JlcXVlc3QoRXZhc19PYmplY3QqIGV3a1Zp
ZXcsIEV3a19Eb3dubG9hZCogZG93bmxvYWQpCiAgKiBAaW50ZXJuYWwKICAqIFJlcG9ydHMgdGhl
IEpTIHdpbmRvdyBvYmplY3Qgd2FzIGNsZWFyZWQuCiAgKgotICogQHBhcmFtIG8gdmlldy4KKyAq
IEBwYXJhbSBld2tWaWV3IHZpZXcuCiAgKiBAcGFyYW0gZnJhbWUgdGhlIGZyYW1lLgogICovCiB2
b2lkIGV3a192aWV3X2pzX3dpbmRvd19vYmplY3RfY2xlYXIoRXZhc19PYmplY3QqIGV3a1ZpZXcs
IEV2YXNfT2JqZWN0KiBmcmFtZSkKQEAgLTM0ODcsMTAgKzM0ODcsMTAgQEAgdm9pZCBld2tfdmll
d19qc193aW5kb3dfb2JqZWN0X2NsZWFyKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFdmFzX09iamVj
dCogZnJhbWUpCiAgKi8KIHZvaWQgZXdrX3ZpZXdfdmlld3BvcnRfYXR0cmlidXRlc19zZXQoRXZh
c19PYmplY3QqIGV3a1ZpZXcsIGNvbnN0IFdlYkNvcmU6OlZpZXdwb3J0QXJndW1lbnRzJiBhcmd1
bWVudHMpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUKGV3a1ZpZXcsIHNkKTsKLSAgICBFV0tfVklF
V19QUklWX0dFVChzZCwgcHJpdik7CisgICAgRVdLX1ZJRVdfU0RfR0VUKGV3a1ZpZXcsIHNtYXJ0
RGF0YSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVQoc21hcnREYXRhLCBwcml2KTsKIAotICAgIHBy
aXYtPnZpZXdwb3J0X2FyZ3VtZW50cyA9IGFyZ3VtZW50czsKKyAgICBwcml2LT52aWV3cG9ydEFy
Z3VtZW50cyA9IGFyZ3VtZW50czsKICAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxs
KGV3a1ZpZXcsICJ2aWV3cG9ydCxjaGFuZ2VkIiwgMCk7CiB9CiAKQEAgLTM1MTYsNzAgKzM1MTYs
NzAgQEAgdm9pZCBld2tfdmlld192aWV3cG9ydF9hdHRyaWJ1dGVzX2dldChjb25zdCBFdmFzX09i
amVjdCogZXdrVmlldywgaW50KiB3aWR0aCwgaW4KIAogRWluYV9Cb29sIGV3a192aWV3X3pvb21f
cmFuZ2Vfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBmbG9hdCBtaW5TY2FsZSwgZmxvYXQgbWF4
U2NhbGUpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlO
QV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5B
X0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0
YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0
YSwgcHJpdiwgRUlOQV9GQUxTRSk7CiAKICAgICBpZiAobWF4U2NhbGUgPCBtaW5TY2FsZSkgewog
ICAgICAgICBXUk4oIm1pbl9zY2FsZSBpcyBsYXJnZXIgdGhhbiBtYXhfc2NhbGUiKTsKICAgICAg
ICAgcmV0dXJuIEVJTkFfRkFMU0U7CiAgICAgfQogCi0gICAgcHJpdi0+c2V0dGluZ3Muem9vbV9y
YW5nZS5taW5fc2NhbGUgPSBtaW5TY2FsZTsKLSAgICBwcml2LT5zZXR0aW5ncy56b29tX3Jhbmdl
Lm1heF9zY2FsZSA9IG1heFNjYWxlOworICAgIHByaXYtPnNldHRpbmdzLnpvb21SYW5nZS5taW5T
Y2FsZSA9IG1pblNjYWxlOworICAgIHByaXYtPnNldHRpbmdzLnpvb21SYW5nZS5tYXhTY2FsZSA9
IG1heFNjYWxlOwogCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAogZmxvYXQgZXdrX3ZpZXdf
em9vbV9yYW5nZV9taW5fZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIC0xLjApOwotICAgIEVXS19WSUVX
X1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgLTEuMCk7CisgICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIC0xLjApOworICAgIEVXS19WSUVXX1BSSVZf
R0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIC0xLjApOwogCi0gICAgcmV0dXJuIHByaXYt
PnNldHRpbmdzLnpvb21fcmFuZ2UubWluX3NjYWxlOworICAgIHJldHVybiBwcml2LT5zZXR0aW5n
cy56b29tUmFuZ2UubWluU2NhbGU7CiB9CiAKIGZsb2F0IGV3a192aWV3X3pvb21fcmFuZ2VfbWF4
X2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRf
T1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAtMS4wKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9S
RVRVUk4oc2QsIHByaXYsIC0xLjApOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdr
Vmlldywgc21hcnREYXRhLCAtMS4wKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4o
c21hcnREYXRhLCBwcml2LCAtMS4wKTsKIAotICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy56b29t
X3JhbmdlLm1heF9zY2FsZTsKKyAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3Muem9vbVJhbmdlLm1h
eFNjYWxlOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfdXNlcl9zY2FsYWJsZV9zZXQoRXZhc19P
YmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCB1c2VyU2NhbGFibGUpCiB7Ci0gICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdf
UFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19T
RF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdL
X1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CiAK
LSAgICBwcml2LT5zZXR0aW5ncy56b29tX3JhbmdlLnVzZXJfc2NhbGFibGUgPSB1c2VyU2NhbGFi
bGU7CisgICAgcHJpdi0+c2V0dGluZ3Muem9vbVJhbmdlLnVzZXJTY2FsYWJsZSA9IHVzZXJTY2Fs
YWJsZTsKIAogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld191
c2VyX3NjYWxhYmxlX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tf
VklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tf
VklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIEVXS19W
SUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAg
ICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNF
KTsKIAotICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy56b29tX3JhbmdlLnVzZXJfc2NhbGFibGU7
CisgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLnpvb21SYW5nZS51c2VyU2NhbGFibGU7CiB9CiAK
IGZsb2F0IGV3a192aWV3X2RldmljZV9waXhlbF9yYXRpb19nZXQoY29uc3QgRXZhc19PYmplY3Qq
IGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwg
LTEuMCk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCAtMS4wKTsK
KyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgLTEuMCk7
CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgLTEuMCk7
CiAKLSAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZGV2aWNlX3BpeGVsX3JhdGlvOworICAgIHJl
dHVybiBwcml2LT5zZXR0aW5ncy5kZXZpY2VQaXhlbFJhdGlvOwogfQogCiB2b2lkIGV3a192aWV3
X2RpZF9maXJzdF92aXN1YWxseV9ub25lbXB0eV9sYXlvdXQoRXZhc19PYmplY3QqIGV3a1ZpZXcp
CiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCk7Ci0gICAgRVdL
X1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2KTsKLSAgICBpZiAoIXByaXYtPmZsYWdz
LnZpZXdfY2xlYXJlZCkgeworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywg
c21hcnREYXRhKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBw
cml2KTsKKyAgICBpZiAoIXByaXYtPmZsYWdzLnZpZXdDbGVhcmVkKSB7CiAgICAgICAgIGV3a192
aWV3X2ZyYW1lX21haW5fY2xlYXJlZChld2tWaWV3KTsKICAgICAgICAgZXdrX3ZpZXdfZW5hYmxl
X3JlbmRlcihld2tWaWV3KTsKLSAgICAgICAgcHJpdi0+ZmxhZ3Mudmlld19jbGVhcmVkID0gRUlO
QV9UUlVFOworICAgICAgICBwcml2LT5mbGFncy52aWV3Q2xlYXJlZCA9IEVJTkFfVFJVRTsKICAg
ICB9CiB9CiAKQEAgLTM1ODcsNyArMzU4Nyw3IEBAIHZvaWQgZXdrX3ZpZXdfZGlkX2ZpcnN0X3Zp
c3VhbGx5X25vbmVtcHR5X2xheW91dChFdmFzX09iamVjdCogZXdrVmlldykKICAqIEBpbnRlcm5h
bAogICogRGlzcGF0Y2ggZmluaXNoZWQgbG9hZGluZy4KICAqCi0gKiBAcGFyYW0gbyB2aWV3Lgor
ICogQHBhcmFtIGV3a1ZpZXcgdmlldy4KICAqLwogdm9pZCBld2tfdmlld19kaXNwYXRjaF9kaWRf
ZmluaXNoX2xvYWRpbmcoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7CkBAIC0zNjAwLDExICszNjAw
LDExIEBAIHZvaWQgZXdrX3ZpZXdfZGlzcGF0Y2hfZGlkX2ZpbmlzaF9sb2FkaW5nKEV2YXNfT2Jq
ZWN0KiBld2tWaWV3KQogCiB2b2lkIGV3a192aWV3X3RyYW5zaXRpb25fdG9fY29tbWl0ZWRfZm9y
X25ld3BhZ2UoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihld2tWaWV3LCBzZCk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNk
LCBwcml2KTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0
YSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdik7CiAK
ICAgICBld2tfdmlld19kaXNhYmxlX3JlbmRlcihld2tWaWV3KTsKLSAgICBwcml2LT5mbGFncy52
aWV3X2NsZWFyZWQgPSBFSU5BX0ZBTFNFOworICAgIHByaXYtPmZsYWdzLnZpZXdDbGVhcmVkID0g
RUlOQV9GQUxTRTsKIH0KIAogCkBAIC0zNjE0LDE4ICszNjE0LDE4IEBAIHZvaWQgZXdrX3ZpZXdf
dHJhbnNpdGlvbl90b19jb21taXRlZF9mb3JfbmV3cGFnZShFdmFzX09iamVjdCogZXdrVmlldykK
ICAqIHJlcXVlc3Qgd291bGQgYmUgdXNlZC4gSWYgQHJldHVybiBpcyB0cnVlLCBsb2FkZXIgd2ls
bCB0cnkgdG8gbG9hZC4gRWxzZSwKICAqIExvYWRlciBpZ25vcmUgYWN0aW9uIG9mIHJlcXVlc3Qu
CiAgKgotICogQHBhcmFtIG8gVmlldyB0byBsb2FkCisgKiBAcGFyYW0gZXdrVmlldyBWaWV3IHRv
IGxvYWQKICAqIEBwYXJhbSByZXF1ZXN0IFJlcXVlc3Qgd2hpY2ggY29udGFpbiB1cmwgdG8gbmF2
aWdhdGUKICAqLwogRWluYV9Cb29sIGV3a192aWV3X25hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9u
KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFd2tfRnJhbWVfUmVzb3VyY2VfUmVxdWVzdCogcmVxdWVz
dCkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX1RS
VUUpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+YXBpLCBFSU5BX1RS
VUUpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBF
SU5BX1RSVUUpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEt
PmFwaSwgRUlOQV9UUlVFKTsKIAotICAgIGlmICghc2QtPmFwaS0+bmF2aWdhdGlvbl9wb2xpY3lf
ZGVjaXNpb24pCisgICAgaWYgKCFzbWFydERhdGEtPmFwaS0+bmF2aWdhdGlvbl9wb2xpY3lfZGVj
aXNpb24pCiAgICAgICAgIHJldHVybiBFSU5BX1RSVUU7CiAKLSAgICByZXR1cm4gc2QtPmFwaS0+
bmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb24oc2QsIHJlcXVlc3QpOworICAgIHJldHVybiBzbWFy
dERhdGEtPmFwaS0+bmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb24oc21hcnREYXRhLCByZXF1ZXN0
KTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X2pzX29iamVjdF9hZGQoRXZhc19PYmplY3QqIGV3
a1ZpZXcsIEV3a19KU19PYmplY3QqIG9iamVjdCwgY29uc3QgY2hhciogb2JqZWN0TmFtZSkKQEAg
LTM2MzMsMjggKzM2MzMsMjggQEAgRWluYV9Cb29sIGV3a192aWV3X2pzX29iamVjdF9hZGQoRXZh
c19PYmplY3QqIGV3a1ZpZXcsIEV3a19KU19PYmplY3QqIG9iamVjdCwgY28KICNpZiBFTkFCTEUo
TkVUU0NBUEVfUExVR0lOX0FQSSkKICAgICBpZiAob2JqZWN0LT52aWV3KSAvLyBvYmplY3QgaGFz
IGFscmVhZHkgYmVlbiBhZGRlZCB0byBhbm90aGVyIGV3a192aWV3CiAgICAgICAgIHJldHVybiBF
SU5BX0ZBTFNFOwotICAgIG9iamVjdC0+bmFtZSA9IGVpbmFfc3RyaW5nc2hhcmVfYWRkKG9iamVj
dF9uYW1lKTsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5B
X0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFf
RkFMU0UpOworICAgIG9iamVjdC0+bmFtZSA9IGVpbmFfc3RyaW5nc2hhcmVfYWRkKG9iamVjdE5h
bWUpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBF
SU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBw
cml2LCBFSU5BX0ZBTFNFKTsKIAogICAgIEpTQzo6SlNMb2NrIGxvY2soSlNDOjpTaWxlbmNlQXNz
ZXJ0aW9uc09ubHkpOwotICAgIFdlYkNvcmU6OkpTRE9NV2luZG93KiB3aW5kb3cgPSB0b0pTRE9N
V2luZG93KHByaXYtPm1haW5fZnJhbWUsIFdlYkNvcmU6Om1haW5UaHJlYWROb3JtYWxXb3JsZCgp
KTsKKyAgICBXZWJDb3JlOjpKU0RPTVdpbmRvdyogd2luZG93ID0gdG9KU0RPTVdpbmRvdyhwcml2
LT5tYWluRnJhbWUsIFdlYkNvcmU6Om1haW5UaHJlYWROb3JtYWxXb3JsZCgpKTsKICAgICBKU0M6
OkJpbmRpbmdzOjpSb290T2JqZWN0KiByb290OwotICAgIHJvb3QgPSBwcml2LT5tYWluX2ZyYW1l
LT5zY3JpcHQoKS0+YmluZGluZ1Jvb3RPYmplY3QoKTsKKyAgICByb290ID0gcHJpdi0+bWFpbkZy
YW1lLT5zY3JpcHQoKS0+YmluZGluZ1Jvb3RPYmplY3QoKTsKIAogICAgIGlmICghd2luZG93KSB7
CiAgICAgICAgIEVSUigiV2FybmluZzogY291bGRuJ3QgZ2V0IHdpbmRvdyBvYmplY3QiKTsKICAg
ICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CiAgICAgfQogCi0gICAgSlNDOjpFeGVjU3RhdGUqIGV4
ZWMgPSB3aW5kb3ctPmdsb2JhbEV4ZWMoKTsKKyAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlY3V0ZVN0
YXRlID0gd2luZG93LT5nbG9iYWxFeGVjKCk7CiAKLSAgICBvYmotPnZpZXcgPSBld2tWaWV3Owot
ICAgIEpTQzo6SlNPYmplY3QqIHJ1bnRpbWVPYmplY3QgPSAoSlNDOjpKU09iamVjdCopSlNDOjpC
aW5kaW5nczo6Q0luc3RhbmNlOjpjcmVhdGUoKE5QT2JqZWN0KilvYmosIHJvb3QpLT5jcmVhdGVS
dW50aW1lT2JqZWN0KGV4ZWMpOwotICAgIEpTQzo6SWRlbnRpZmllciBpZCA9IEpTQzo6SWRlbnRp
ZmllcihleGVjLCBvYmpfbmFtZSk7CisgICAgb2JqZWN0LT52aWV3ID0gZXdrVmlldzsKKyAgICBK
U0M6OkpTT2JqZWN0KiBydW50aW1lT2JqZWN0ID0gKEpTQzo6SlNPYmplY3QqKUpTQzo6QmluZGlu
Z3M6OkNJbnN0YW5jZTo6Y3JlYXRlKChOUE9iamVjdCopb2JqZWN0LCByb290KS0+Y3JlYXRlUnVu
dGltZU9iamVjdChleGVjdXRlU3RhdGUpOworICAgIEpTQzo6SWRlbnRpZmllciBpZCA9IEpTQzo6
SWRlbnRpZmllcihleGVjLCBvYmplY3ROYW1lKTsKIAogICAgIEpTQzo6UHV0UHJvcGVydHlTbG90
IHNsb3Q7Ci0gICAgd2luZG93LT5wdXQoZXhlYywgaWQsIHJ1bnRpbWVPYmplY3QsIHNsb3QpOwor
ICAgIHdpbmRvdy0+cHV0KGV4ZWN1dGVTdGF0ZSwgaWQsIHJ1bnRpbWVPYmplY3QsIHNsb3QpOwog
ICAgIHJldHVybiBFSU5BX1RSVUU7CiAjZWxzZQogICAgIHJldHVybiBFSU5BX0ZBTFNFOwpAQCAt
MzY2MywyNyArMzY2MywyNyBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfanNfb2JqZWN0X2FkZChFdmFz
X09iamVjdCogZXdrVmlldywgRXdrX0pTX09iamVjdCogb2JqZWN0LCBjbwogCiBFaW5hX0Jvb2wg
ZXdrX3ZpZXdfcHJvdG9jb2xfaGFuZGxlcl9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGNvbnN0
IGNoYXIqKiBwcm90b2NvbHMsIEV3a19WaWV3X1Jlc291cmNlX0hhbmRsZXJfQ2IgaGFuZGxlciwg
dm9pZCogY29udGV4dCkKIHsKLSAgICBFV0tfVklFV19TRF9HRVQoZXdrVmlldywgc2QpOwotICAg
IEVXS19WSUVXX1BSSVZfR0VUKHNkLCBwcml2KTsKKyAgICBFV0tfVklFV19TRF9HRVQoZXdrVmll
dywgc21hcnREYXRhKTsKKyAgICBFV0tfVklFV19QUklWX0dFVChzbWFydERhdGEsIHByaXYpOwog
CiAgICAgaWYgKCFoYW5kbGVyKQogICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKIAotICAgIHBy
aXYtPmN1c3RvbV9yZXNvdXJjZV9oYW5kbGVyLmZ1bmN0aW9uID0gaGFuZGxlcjsKLSAgICBwcml2
LT5jdXN0b21fcmVzb3VyY2VfaGFuZGxlci5jb250ZXh0ID0gY29udGV4dDsKKyAgICBwcml2LT5j
dXN0b21SZXNvdXJjZUhhbmRsZXIuZnVuY3Rpb24gPSBoYW5kbGVyOworICAgIHByaXYtPmN1c3Rv
bVJlc291cmNlSGFuZGxlci5jb250ZXh0ID0gY29udGV4dDsKIAogICAgIHJldHVybiBld2tfY3Vz
dG9tX3Byb3RvY29sX2hhbmRsZXJfc2V0KHByb3RvY29scyk7CiB9CiAKIEVpbmFfQm9vbCBld2tf
dmlld19wcm90b2NvbF9oYW5kbGVyX3Vuc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAg
IEVXS19WSUVXX1NEX0dFVChld2tWaWV3LCBzZCk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVQoc2Qs
IHByaXYpOworICAgIEVXS19WSUVXX1NEX0dFVChld2tWaWV3LCBzbWFydERhdGEpOworICAgIEVX
S19WSUVXX1BSSVZfR0VUKHNtYXJ0RGF0YSwgcHJpdik7CiAgICAgRWluYV9Cb29sIHJldCA9IGV3
a19jdXN0b21fcHJvdG9jb2xfaGFuZGxlcl9hbGxfdW5zZXQoKTsKIAogICAgIGlmIChyZXQpIHsK
LSAgICAgICAgcHJpdi0+Y3VzdG9tX3Jlc291cmNlX2hhbmRsZXIuZnVuY3Rpb24gPSAwOwotICAg
ICAgICBwcml2LT5jdXN0b21fcmVzb3VyY2VfaGFuZGxlci5jb250ZXh0ID0gMDsKKyAgICAgICAg
cHJpdi0+Y3VzdG9tUmVzb3VyY2VIYW5kbGVyLmZ1bmN0aW9uID0gMDsKKyAgICAgICAgcHJpdi0+
Y3VzdG9tUmVzb3VyY2VIYW5kbGVyLmNvbnRleHQgPSAwOwogICAgIH0KIAogICAgIHJldHVybiBy
ZXQ7CkBAIC0zNjkxLDEyICszNjkxLDEyIEBAIEVpbmFfQm9vbCBld2tfdmlld19wcm90b2NvbF9o
YW5kbGVyX3Vuc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3KQogCiB2b2lkKiBld2tfdmlld19wcm90
b2NvbF9oYW5kbGVyX3Jlc291cmNlX2dldChFdmFzX09iamVjdCogZXdrVmlldywgc2l6ZV90KiBi
eXRlc1JlYWQsIGNoYXIqKiBtaW1lLCBjb25zdCBjaGFyKiBmaWxlKQogewotICAgIEVXS19WSUVX
X1NEX0dFVChld2tWaWV3LCBzZCk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVQoc2QsIHByaXYpOwor
ICAgIEVXS19WSUVXX1NEX0dFVChld2tWaWV3LCBzbWFydERhdGEpOworICAgIEVXS19WSUVXX1BS
SVZfR0VUKHNtYXJ0RGF0YSwgcHJpdik7CiAKLSAgICBFd2tfVmlld19SZXNvdXJjZV9IYW5kbGVy
X0NiIGZ1bmN0aW9uID0gcHJpdi0+Y3VzdG9tX3Jlc291cmNlX2hhbmRsZXIuZnVuY3Rpb247Cisg
ICAgRXdrX1ZpZXdfUmVzb3VyY2VfSGFuZGxlcl9DYiBmdW5jdGlvbiA9IHByaXYtPmN1c3RvbVJl
c291cmNlSGFuZGxlci5mdW5jdGlvbjsKICAgICBpZiAoZnVuY3Rpb24pCi0gICAgICAgIHJldHVy
biBmdW5jdGlvbihmaWxlLCBieXRlc1JlYWQsIG1pbWUsIHByaXYtPmN1c3RvbV9yZXNvdXJjZV9o
YW5kbGVyLmNvbnRleHQpOworICAgICAgICByZXR1cm4gZnVuY3Rpb24oZmlsZSwgYnl0ZXNSZWFk
LCBtaW1lLCBwcml2LT5jdXN0b21SZXNvdXJjZUhhbmRsZXIuY29udGV4dCk7CiAKICAgICByZXR1
cm4gMDsKIH0KQEAgLTM3MDYsMTcgKzM3MDYsMTcgQEAgdm9pZCogZXdrX3ZpZXdfcHJvdG9jb2xf
aGFuZGxlcl9yZXNvdXJjZV9nZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIHNpemVfdCogYnl0ZXMK
ICAqIFJlcG9ydHMgdGhhdCB0aGUgY29udGVudHMgaGF2ZSByZXNpemVkLiBUaGUgZXdrX3ZpZXcg
Y2FsbHMgY29udGVudHNfcmVzaXplLAogICogd2hpY2ggY2FuIGJlIHJlaW1wbGVtZW50ZWQgYXMg
bmVlZGVkLgogICoKLSAqIEBwYXJhbSBvIHZpZXcuCi0gKiBAcGFyYW0gdyBuZXcgY29udGVudCB3
aWR0aC4KLSAqIEBwYXJhbSBoIG5ldyBjb250ZW50IGhlaWdodC4KKyAqIEBwYXJhbSBld2tWaWV3
IHZpZXcuCisgKiBAcGFyYW0gd2lkdGggbmV3IGNvbnRlbnQgd2lkdGguCisgKiBAcGFyYW0gaGVp
Z2h0IG5ldyBjb250ZW50IGhlaWdodC4KICAqLwogdm9pZCBld2tfdmlld19jb250ZW50c19zaXpl
X2NoYW5nZWQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGludCB3aWR0aCwgaW50IGhlaWdodCkKIHsK
LSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkKTsKLSAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTihzZC0+YXBpLT5jb250ZW50c19yZXNpemUpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9S
RVRVUk4oZXdrVmlldywgc21hcnREYXRhKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
TihzbWFydERhdGEtPmFwaSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnRE
YXRhLT5hcGktPmNvbnRlbnRzX3Jlc2l6ZSk7CiAKLSAgICBpZiAoIXNkLT5hcGktPmNvbnRlbnRz
X3Jlc2l6ZShzZCwgd2lkdGgsIGhlaWdodCkpCisgICAgaWYgKCFzbWFydERhdGEtPmFwaS0+Y29u
dGVudHNfcmVzaXplKHNtYXJ0RGF0YSwgd2lkdGgsIGhlaWdodCkpCiAgICAgICAgIEVSUigiZmFp
bGVkIHRvIHJlc2l6ZSBjb250ZW50cyB0byAlZHglZCIsIHdpZHRoLCBoZWlnaHQpOwogfQogCkBA
IC0zNzI0LDE0ICszNzI0LDE0IEBAIHZvaWQgZXdrX3ZpZXdfY29udGVudHNfc2l6ZV9jaGFuZ2Vk
KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCiAgKiBAaW50ZXJu
YWwKICAqIEdldHMgcGFnZSBzaXplIGZyb20gZnJhbWV2aWV3LgogICoKLSAqIEBwYXJhbSBvIHZp
ZXcuCisgKiBAcGFyYW0gZXdrVmlldyB2aWV3LgogICoKICAqIEByZXR1cm4gcGFnZSBzaXplLgog
ICovCiBXZWJDb3JlOjpGbG9hdFJlY3QgZXdrX3ZpZXdfcGFnZV9yZWN0X2dldChjb25zdCBFdmFz
X09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVQoZXdrVmlldywgc2QpOwot
ICAgIEVXS19WSUVXX1BSSVZfR0VUKHNkLCBwcml2KTsKKyAgICBFV0tfVklFV19TRF9HRVQoZXdr
Vmlldywgc21hcnREYXRhKTsKKyAgICBFV0tfVklFV19QUklWX0dFVChzbWFydERhdGEsIHByaXYp
OwogCiAgICAgV2ViQ29yZTo6RnJhbWUqIG1haW5fZnJhbWUgPSBwcml2LT5wYWdlLT5tYWluRnJh
bWUoKTsKICAgICByZXR1cm4gbWFpbl9mcmFtZS0+dmlldygpLT5mcmFtZVJlY3QoKTsKQEAgLTM3
NDAsMjQgKzM3NDAsMjQgQEAgV2ViQ29yZTo6RmxvYXRSZWN0IGV3a192aWV3X3BhZ2VfcmVjdF9n
ZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykK
IHZvaWQgZXdrX3ZpZXdfbmVlZF90b3VjaF9ldmVudHNfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3
LCBib29sIG5lZWRlZCkKIHsKLSAgICBFV0tfVklFV19TRF9HRVQoZXdrVmlldywgc2QpOwotICAg
IEVXS19WSUVXX1BSSVZfR0VUKHNkLCBwcml2KTsKKyAgICBFV0tfVklFV19TRF9HRVQoZXdrVmll
dywgc21hcnREYXRhKTsKKyAgICBFV0tfVklFV19QUklWX0dFVChzbWFydERhdGEsIHByaXYpOwog
Ci0gICAgcHJpdi0+ZmxhZ3MubmVlZF90b3VjaF9ldmVudHMgPSBuZWVkZWQ7CisgICAgcHJpdi0+
ZmxhZ3MubmVlZFRvdWNoRXZlbnRzID0gbmVlZGVkOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdf
bmVlZF90b3VjaF9ldmVudHNfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAg
IEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAg
IEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7Ci0gICAg
cmV0dXJuIHByaXYtPmZsYWdzLm5lZWRfdG91Y2hfZXZlbnRzOworICAgIEVXS19WSUVXX1NEX0dF
VF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklF
V19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBy
ZXR1cm4gcHJpdi0+ZmxhZ3MubmVlZFRvdWNoRXZlbnRzOwogfQogI2VuZGlmCiAKIEVpbmFfQm9v
bCBld2tfdmlld19tb2RlX3NldChFdmFzX09iamVjdCogZXdrVmlldywgRXdrX1ZpZXdfTW9kZSB2
aWV3TW9kZSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBF
SU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJ
TkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnRE
YXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnRE
YXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKIAogICAgIHN3aXRjaCAodmlld01vZGUpIHsKICAgICBj
YXNlIEVXS19WSUVXX01PREVfV0lORE9XRUQ6CkBAIC0zNzg2LDEwICszNzg2LDEwIEBAIEV3a19W
aWV3X01vZGUgZXdrX3ZpZXdfbW9kZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7
CiAgICAgRXdrX1ZpZXdfTW9kZSBtb2RlID0gRVdLX1ZJRVdfTU9ERV9XSU5ET1dFRDsKIAotICAg
IEVXS19WSUVXX1NEX0dFVChld2tWaWV3LCBzZCk7Ci0gICAgaWYgKCFzZCkKKyAgICBFV0tfVklF
V19TRF9HRVQoZXdrVmlldywgc21hcnREYXRhKTsKKyAgICBpZiAoIXNtYXJ0RGF0YSkKICAgICAg
ICAgcmV0dXJuIG1vZGU7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVQoc2QsIHByaXYpOworICAgIEVX
S19WSUVXX1BSSVZfR0VUKHNtYXJ0RGF0YSwgcHJpdik7CiAgICAgaWYgKCFwcml2KQogICAgICAg
ICByZXR1cm4gbW9kZTsKIApAQCAtMzgxNyw3ICszODE3LDcgQEAgRXdrX1ZpZXdfTW9kZSBld2tf
dmlld19tb2RlX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKICAqIEBpbnRlcm5hbAog
ICogUmVwb3J0cyB0aGUgdmlldyB0aGF0IGVkaXRvciBjbGllbnQgc2VsZWN0aW9uIGhhcyBjaGFu
Z2VkLgogICoKLSAqIEBwYXJhbSBvIFZpZXcuCisgKiBAcGFyYW0gZXdrVmlldyBWaWV3LgogICoK
ICAqIEVtaXRzIHNpZ25hbDogImVkaXRvcmNsaWVudHNlbGVjdGlvbixjaGFuZ2VkIiB3aXRoIG5v
IHBhcmFtZXRlcnMuCiAgKi8KQEAgLTM4MzAsNyArMzgzMCw3IEBAIHZvaWQgZXdrX3ZpZXdfZWRp
dG9yX2NsaWVudF9zZWxlY3Rpb25fY2hhbmdlZChFdmFzX09iamVjdCogZXdrVmlldykKICAqIEBp
bnRlcm5hbAogICogUmVwb3J0cyB0byB0aGUgdmlldyB0aGF0IGVkaXRvciBjbGllbnQncyBjb250
ZW50cyB3ZXJlIGNoYW5nZWQuCiAgKgotICogQHBhcmFtIG8gVmlldy4KKyAqIEBwYXJhbSBld2tW
aWV3IFZpZXcuCiAgKgogICogRW1pdHMgc2lnbmFsOiAiZWRpdG9yY2xpZW50LGNvbnRlbnRzLGNo
YW5nZWQiIHdpdGggbm8gcGFyYW1ldGVycy4KICAqLwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111425</attachid>
            <date>2011-10-18 05:06:34 -0700</date>
            <delta_ts>2011-10-18 18:24:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69988-20111018210633.patch</filename>
            <type>text/plain</type>
            <size>367767</size>
            <attacher name="Gyuyoung Kim">gyuyoung.kim</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTc3MzYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZs
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZwppbmRleCA1NDBjMDEyMTEy
NTY1NzJmNzkwMWM0NjI0NzdmMzQzMTY3ZTFiNGNkLi5jNzk0ZDI4NmRlNGQwZDAyOGZmY2NkNGQ2
NzY2NjA4OWRjMmJmM2FmIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDYgQEAKKzIwMTEt
MTAtMTggIEd5dXlvdW5nIEtpbSAgPGd5dXlvdW5nLmtpbUBzYW1zdW5nLmNvbT4KKworICAgICAg
ICBbRUZMXSBDaGFuZ2UgZWZsIHN0eWxlIGxvY2FsIHZhcmlhYmxlcyB3aXRoIFdlYktpdCBjb2Rp
bmcgU3R5bGUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD02OTk4OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEluIGNvbW1vbiB3aXRoIEJ1ZyA2OTA3MywgdGhpcyBpcyBhIHRoaXJkIHN0ZXAgaW4gb3JkZXIg
dG8gYmUgbW9yZSBjb21wbGlhbnQgd2l0aCBXZWJLaXQgY29kaW5nIHN0eWxlLgorICAgICAgICBX
ZSBoYXZlIHVzZWQgb25lLWxldHRlcnwgdHdvLWxldHRlciBsb2NhbCB2YXJpYWJsZSBhY2NvcmRp
bmcgdG8gZWZsIHN0eWxlLiBIb3dldmVyLCBpdCdzCisgICAgICAgIG1vcmUgZGlmZmljdWx0IGZv
ciBvdGhlciByZXZpZXdlcnMgdG8gcmV2aWV3IEVGTCBwYXRjaGVzLiBTbywgdGhpcyBwYXRjaCBj
aGFuZ2VzIGVmbCBzdHlsZQorICAgICAgICBsb2NhbCB2YXJpYWJsZSB3aXRoIG1lYW5pbmdmdWwg
b25lLgorCisgICAgICAgIC0gVXNlICptZW51KiBpbnN0ZWFkIG9mICpvKiBpbiBjb21tZW50IG9m
IGV3a19jb250ZXh0bWVudS5jcHAuCisgICAgICAgIC0gVXNlICpsaXN0KiBpbnN0ZWFkIG9mICps
KiBsb2NhbCB2YXJpYWJsZQorICAgICAgICAtIFVzZSAqZXdrUG9saWN5KiBpbnN0ZWFkIG9mICpl
d2tfcG9saWN5KiBpbiBld2tfY29va2llcy5jcHAKKyAgICAgICAgLSBVc2UgKnNtYXJ0RGF0YSog
aW5zdGVhZCBvZiAqc2QqIGxvY2FsIHZhcmlhYmxlIGZvciBFd2tfWFhYWF9TbWFydF9EYXRhIHN0
cnVjdC4KKyAgICAgICAgLSBVc2UgKndpZHRoKiwgKmhlaWdodCogaW5zdGVhZCBvZiAqdyosICpo
KiBsb2NhbCB2YXJpYWJsZXMuCisgICAgICAgIC0gVXNlICpzY3JvbGxYKiwgKnNjcm9sbFkqLCAq
c2Nyb2xsV2lkdGgqLCAqc2Nyb2xsSGVpZ2h0KiwgKmNlbnRlclgqLCAqY2VudGVyWSosICpkZWx0
YVgqLCAqZGVsdGFZKiwKKyAgICAgICAgKmJhc2VYKiwgKmJhc2VZKiBpbnN0ZWFkIG9mICpzeCos
ICpzeSosICpzdyosICpzaCosICpjeCosICpjeSosICpkeCosICpkeSosICpieCosICpieSouCisg
ICAgICAgIC0gVXNlICpyZWQqLCAqZ3JlZW4qLCAqYmx1ZSosICphbHBoYSosICpjb250ZW50UmVk
KiwgKmNvbnRlbnRHcmVlbiosICpjb250ZW50Qmx1ZSogYW5kICpjb250ZW50QWxwaGEqCisgICAg
ICAgIGluc3RlYWQgb2YgKnIqLCpnKiwqYiosKmEqLCpjciosKmNnKiwqY2IqLCpjYSouCisgICAg
ICAgIC0gVXNlICp0aWxlUG9zaXRpb25YKiwgKnRpbGVQb3NpdGlvblkqIGluc3RlYWQgb2YgKm94
Kiwqb3kqIGluIHRpbGVkIGJhY2tpbmdzdG9yZSBmaWxlcy4KKyAgICAgICAgLSBVc2UgKm9iamVj
dCogaW5zdGVhZCBvZiAqb2JqKiAKKyAgICAgICAgLSBVc2UgKmxlbmd0aCogaW5zdGVhZCBvZiAq
bGVuKgorICAgICAgICAtIFVzZSAqY29yZUZyYW1lKiBpbnN0ZWFkIG9mICpjZioKKyAgICAgICAg
LSBVc2UgKmJ1ZmZlciogaW5zdGVhZCBvZiAqYnVmKgorICAgICAgICAtIFVzZSAqaXRlbSogaW5z
dGVhZCBvZiAqaSoKKyAgICAgICAgLSBSZW1vdmUgIl8iIGluIGxvY2FsIHZhcmlhYmxlLgorICAg
ICAgICAtIEFuZCBzbyBvbi4KKworICAgICAgICAqIGV3ay9ld2tfYXV0aF9zb3VwLmNwcDoKKyAg
ICAgICAgKiBld2svZXdrX2NvbnRleHRtZW51LmNwcDoKKyAgICAgICAgKiBld2svZXdrX2Nvb2tp
ZXMuY3BwOgorICAgICAgICAqIGV3ay9ld2tfZnJhbWUuY3BwOgorICAgICAgICAqIGV3ay9ld2tf
aGlzdG9yeS5jcHA6CisgICAgICAgICogZXdrL2V3a19qcy5jcHA6CisgICAgICAgICogZXdrL2V3
a19tYWluLmNwcDoKKyAgICAgICAgKiBld2svZXdrX3NldHRpbmdzLmNwcDoKKyAgICAgICAgKiBl
d2svZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmUuY3BwOgorICAgICAgICAqIGV3ay9ld2tfdGlsZWRf
bWF0cml4LmNwcDoKKyAgICAgICAgKiBld2svZXdrX3RpbGVkX21vZGVsLmNwcDoKKyAgICAgICAg
KiBld2svZXdrX3ZpZXcuY3BwOgorCiAyMDExLTEwLTE3ICBSYXBoYWVsIEt1Ym8gZGEgQ29zdGEg
IDxrdWJvQHByb2Z1c2lvbi5tb2JpPgogCiAgICAgICAgIFtFRkxdIEV4cG9zZSB0aGUga2l0KCkg
ZnJhbWUgZnVuY3Rpb24gdG8gdGhlIHJlc3Qgb2YgZXdrLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9lZmwvZXdrL2V3a19hdXRoX3NvdXAuY3BwIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3
a19hdXRoX3NvdXAuY3BwCmluZGV4IGNiYzg3NTZlZDg1ZWJjMTVlNzdiYzQxYjMzZTA1MzNjNDI1
YTE5MmYuLmYwNWZkM2NjZTU4MzkyMGFjYTE2ZjBhNTI0MWEzZmJmYzI2ODRlYzMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfYXV0aF9zb3VwLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2VmbC9ld2svZXdrX2F1dGhfc291cC5jcHAKQEAgLTQwLDcgKzQwLDcgQEAgZXh0ZXJu
ICJDIiB7CiAgKi8KIAogdHlwZWRlZiBzdHJ1Y3QgX0V3a19BdXRoX0RhdGEgewotICAgIFNvdXBN
ZXNzYWdlKiBtc2c7CisgICAgU291cE1lc3NhZ2UqIG1lc3NhZ2U7CiAgICAgU291cEF1dGgqIGF1
dGg7CiAgICAgU291cFNlc3Npb24qIHNlc3Npb247CiB9IEV3a19BdXRoX0RhdGE7CkBAIC03OSw1
MSArNzksNTEgQEAgdm9pZCBld2tfYXV0aF9zb3VwX2NyZWRlbnRpYWxzX3NldChjb25zdCBjaGFy
KiB1c2VybmFtZSwgY29uc3QgY2hhciogcGFzc3dvcmQsIHYKICAgICBpZiAoIWRhdGEpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIEV3a19BdXRoX0RhdGEqIGF1dGhfZGF0YSA9IHN0YXRpY19jYXN0
PEV3a19BdXRoX0RhdGEqPihkYXRhKTsKLSAgICBzb3VwX2F1dGhfYXV0aGVudGljYXRlKGF1dGhf
ZGF0YS0+YXV0aCwgdXNlcm5hbWUsIHBhc3N3b3JkKTsKLSAgICBzb3VwX3Nlc3Npb25fdW5wYXVz
ZV9tZXNzYWdlKGF1dGhfZGF0YS0+c2Vzc2lvbiwgYXV0aF9kYXRhLT5tc2cpOwotICAgIGZyZWVf
YXV0aF9kYXRhKGF1dGhfZGF0YSk7CisgICAgRXdrX0F1dGhfRGF0YSogYXV0aERhdGEgPSBzdGF0
aWNfY2FzdDxFd2tfQXV0aF9EYXRhKj4oZGF0YSk7CisgICAgc291cF9hdXRoX2F1dGhlbnRpY2F0
ZShhdXRoRGF0YS0+YXV0aCwgdXNlcm5hbWUsIHBhc3N3b3JkKTsKKyAgICBzb3VwX3Nlc3Npb25f
dW5wYXVzZV9tZXNzYWdlKGF1dGhEYXRhLT5zZXNzaW9uLCBhdXRoRGF0YS0+bWVzc2FnZSk7Cisg
ICAgZnJlZV9hdXRoX2RhdGEoYXV0aERhdGEpOwogfQogCi1zdGF0aWMgdm9pZCBzZXNzaW9uX2F1
dGhlbnRpY2F0ZShTb3VwU2Vzc2lvbiogc2Vzc2lvbiwgU291cE1lc3NhZ2UqIG1zZywgU291cEF1
dGgqIGF1dGgsIGdib29sZWFuIHJldHJ5aW5nLCBncG9pbnRlciAvKiB1c2VyX2RhdGEgKi8pCitz
dGF0aWMgdm9pZCBzZXNzaW9uX2F1dGhlbnRpY2F0ZShTb3VwU2Vzc2lvbiogc2Vzc2lvbiwgU291
cE1lc3NhZ2UqIG1lc3NhZ2UsIFNvdXBBdXRoKiBhdXRoLCBnYm9vbGVhbiByZXRyeWluZywgZ3Bv
aW50ZXIgLyogdXNlcl9kYXRhICovKQogewogICAgIFNvdXBVUkkqIHVyaTsKLSAgICBFd2tfQXV0
aF9EYXRhKiBhdXRoX2RhdGE7Ci0gICAgY29uc3QgY2hhciogcmVhbG07CisgICAgRXdrX0F1dGhf
RGF0YSogYXV0aERhdGE7CisgICAgY29uc3QgY2hhciogcmVhbE1lc3NhZ2U7CiAKICAgICBpZiAo
IWV3a19hdXRoX3Nob3dfZGlhbG9nX2NhbGxiYWNrKQogICAgICAgICByZXR1cm47CiAKLSAgICBh
dXRoX2RhdGEgPSBzdGF0aWNfY2FzdDxFd2tfQXV0aF9EYXRhKj4oY2FsbG9jKDEsIHNpemVvZihF
d2tfQXV0aF9EYXRhKSkpOworICAgIGF1dGhEYXRhID0gc3RhdGljX2Nhc3Q8RXdrX0F1dGhfRGF0
YSo+KGNhbGxvYygxLCBzaXplb2YoRXdrX0F1dGhfRGF0YSkpKTsKIAotICAgIGlmICghYXV0aF9k
YXRhKSB7CisgICAgaWYgKCFhdXRoRGF0YSkgewogICAgICAgICBDUklUSUNBTCgiY291bGQgbm90
IGFsbG9jYXRlIEV3a19BdXRoX0RhdGEiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IHNvdXBfc2Vzc2lvbl9wYXVzZV9tZXNzYWdlKHNlc3Npb24sIG1zZyk7CisgICAgc291cF9zZXNz
aW9uX3BhdXNlX21lc3NhZ2Uoc2Vzc2lvbiwgbWVzc2FnZSk7CiAgICAgLy8gV2UgbmVlZCB0byBt
YWtlIHN1cmUgdGhlIG1lc3NhZ2Ugc3RpY2tzIGFyb3VuZCB3aGVuIHBhdXNpbmcgaXQuCi0gICAg
Z19vYmplY3RfcmVmKG1zZyk7CisgICAgZ19vYmplY3RfcmVmKG1lc3NhZ2UpOwogICAgIGdfb2Jq
ZWN0X3JlZihzZXNzaW9uKTsKICAgICBnX29iamVjdF9yZWYoYXV0aCk7CiAKLSAgICBhdXRoX2Rh
dGEtPm1zZyA9IG1zZzsKLSAgICBhdXRoX2RhdGEtPmF1dGggPSBhdXRoOwotICAgIGF1dGhfZGF0
YS0+c2Vzc2lvbiA9IHNlc3Npb247CisgICAgYXV0aERhdGEtPm1lc3NhZ2UgPSBtZXNzYWdlOwor
ICAgIGF1dGhEYXRhLT5hdXRoID0gYXV0aDsKKyAgICBhdXRoRGF0YS0+c2Vzc2lvbiA9IHNlc3Np
b247CiAKLSAgICB1cmkgPSBzb3VwX21lc3NhZ2VfZ2V0X3VyaShhdXRoX2RhdGEtPm1zZyk7Ci0g
ICAgcmVhbG0gPSBzb3VwX2F1dGhfZ2V0X3JlYWxtKGF1dGhfZGF0YS0+YXV0aCk7CisgICAgdXJp
ID0gc291cF9tZXNzYWdlX2dldF91cmkoYXV0aERhdGEtPm1lc3NhZ2UpOworICAgIHJlYWxNZXNz
YWdlID0gc291cF9hdXRoX2dldF9yZWFsbShhdXRoRGF0YS0+YXV0aCk7CiAKICAgICAvLyBDYWxs
IGFwcGxpY2F0aW9uIG1ldGhvZCByZXNwb25zaWJsZSBmb3Igc2hvd2luZyBhdXRoZW50aWNhdGlv
biBkaWFsb2cgYW5kIHNlbmRpbmcgYmFjayBhdXRob3JpemF0aW9uIGRhdGEuCi0gICAgZXdrX2F1
dGhfc2hvd19kaWFsb2dfY2FsbGJhY2socmVhbG0sIHNvdXBfdXJpX3RvX3N0cmluZyh1cmksIFRS
VUUpLCBhdXRoX2RhdGEpOworICAgIGV3a19hdXRoX3Nob3dfZGlhbG9nX2NhbGxiYWNrKHJlYWxN
ZXNzYWdlLCBzb3VwX3VyaV90b19zdHJpbmcodXJpLCBUUlVFKSwgYXV0aERhdGEpOwogfQogCi1z
dGF0aWMgdm9pZCBmcmVlX2F1dGhfZGF0YShFd2tfQXV0aF9EYXRhKiBhdXRoX2RhdGEpCitzdGF0
aWMgdm9pZCBmcmVlX2F1dGhfZGF0YShFd2tfQXV0aF9EYXRhKiBhdXRoRGF0YSkKIHsKLSAgICBn
X29iamVjdF91bnJlZihhdXRoX2RhdGEtPm1zZyk7Ci0gICAgZ19vYmplY3RfdW5yZWYoYXV0aF9k
YXRhLT5zZXNzaW9uKTsKLSAgICBnX29iamVjdF91bnJlZihhdXRoX2RhdGEtPmF1dGgpOwotICAg
IGZyZWUoYXV0aF9kYXRhKTsKKyAgICBnX29iamVjdF91bnJlZihhdXRoRGF0YS0+bWVzc2FnZSk7
CisgICAgZ19vYmplY3RfdW5yZWYoYXV0aERhdGEtPnNlc3Npb24pOworICAgIGdfb2JqZWN0X3Vu
cmVmKGF1dGhEYXRhLT5hdXRoKTsKKyAgICBmcmVlKGF1dGhEYXRhKTsKIH0KIAogc3RhdGljIHZv
aWQgYXR0YWNoKFNvdXBTZXNzaW9uRmVhdHVyZSogbWFuYWdlciwgU291cFNlc3Npb24qIHNlc3Np
b24pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2NvbnRleHRtZW51LmNw
cCBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfY29udGV4dG1lbnUuY3BwCmluZGV4IDYyMWM3
OWM3MDUxZDNlODAwZGEwNzU1OWU5NDhkYTVlOWM4NDk5M2IuLmZhNzM2MjNmMDIyYWU4MGU2NWU2
MTYwNDUyYTYxMTZiYTBlZTg5NjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9l
d2tfY29udGV4dG1lbnUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfY29udGV4
dG1lbnUuY3BwCkBAIC0yNDgsNyArMjQ4LDcgQEAgRXdrX0NvbnRleHRfTWVudSogZXdrX2NvbnRl
eHRfbWVudV9uZXcoRXZhc19PYmplY3QqIHZpZXcsIFdlYkNvcmU6OkNvbnRleHRNZW51Q28KICAq
CiAgKiBGcmVlcyB0aGUgY29udGV4dCBtZW51LgogICoKLSAqIEBwYXJhbSBvIHRoZSB2aWV3IG9i
amVjdAorICogQHBhcmFtIG1lbnUgdGhlIHZpZXcgb2JqZWN0CiAgKiBAcmV0dXJuIEBjIEVJTkFf
VFJVRSBvbiBzdWNjZXNzLCBvciBAYyBFSU5BX0ZBTFNFIG9uIGZhaWx1cmUKICAqCiAgKiBAbm90
ZSBlbWl0cyBhIHNpZ25hbCAiY29udGV4dG1lbnUsZnJlZSIKQEAgLTI2OSw3ICsyNjksNyBAQCBF
aW5hX0Jvb2wgZXdrX2NvbnRleHRfbWVudV9mcmVlKEV3a19Db250ZXh0X01lbnUqIG1lbnUpCiAg
KgogICogQXBwZW5kcyB0aGUgV2ViQ29yZSdzIGl0ZW0gdG8gdGhlIGNvbnRleHQgbWVudSBvYmpl
Y3QuCiAgKgotICogQHBhcmFtIG8gdGhlIGNvbnRleHQgbWVudSBvYmplY3QKKyAqIEBwYXJhbSBt
ZW51IHRoZSBjb250ZXh0IG1lbnUgb2JqZWN0CiAgKiBAcGFyYW0gY29yZSB0aGUgV2ViQ29yZSdz
IGNvbnRleHQgbWVudSBpdGVtIHRoYXQgd2lsbCBiZSBhZGRlZCB0byB0aGUgY29udGV4dCBtZW51
CiAgKiBAbm90ZSBlbWl0cyBhIHNpZ25hbCAiY29udGV4dG1lbnUsaXRlbSxhcHBlbmRlZCIKICAq
CkBAIC0yOTQsNyArMjk0LDcgQEAgdm9pZCBld2tfY29udGV4dF9tZW51X2l0ZW1fYXBwZW5kKEV3
a19Db250ZXh0X01lbnUqIG1lbnUsIFdlYkNvcmU6OkNvbnRleHRNZW51SXQKICAqCiAgKiBFbWl0
cyBhIHNpZ25hbCB3aXRoIHRoZSBpdGVtcyBvZiB0aGUgY29udGV4dCBtZW51LgogICoKLSAqIEBw
YXJhbSBvIHRoZSBjb250ZXh0IG1lbnUgb2JqZWN0CisgKiBAcGFyYW0gbWVudSB0aGUgY29udGV4
dCBtZW51IG9iamVjdAogICogQHJldHVybiB0aGUgc2FtZSBjb250ZXh0IG1lbnUgb2JqZWN0IHRo
YXQgd2FzIGdpdmVuIHRocm91Z2ggcGFyYW1ldGVyCiAgKgogICogQG5vdGUgZW1pdHMgYSBzaWdu
YWwgImNvbnRleHRtZW51LGN1c3RvbWl6ZSIKQEAgLTMxNCw3ICszMTQsNyBAQCBFd2tfQ29udGV4
dF9NZW51KiBld2tfY29udGV4dF9tZW51X2N1c3RvbV9nZXQoY29uc3QgRXdrX0NvbnRleHRfTWVu
dSogbWVudSkKICAqCiAgKiBFbWl0cyBhIHNpZ25hbCAiY29udGV4dG1lbnUsc2hvdyIKICAqCi0g
KiBAcGFyYW0gbyB0aGUgY29udGV4dCBtZW51IG9iamVjdAorICogQHBhcmFtIG1lbnUgdGhlIGNv
bnRleHQgbWVudSBvYmplY3QKICAqLwogdm9pZCBld2tfY29udGV4dF9tZW51X3Nob3coY29uc3Qg
RXdrX0NvbnRleHRfTWVudSogbWVudSkKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZs
L2V3ay9ld2tfY29va2llcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2Nvb2tpZXMu
Y3BwCmluZGV4IDA0ZDcwNDE1N2QzNThlM2I4NmM5NzI1ZmM5NTgzYjgzYWFjMDg1NWYuLmZmNmY5
NzQ1NDg5Mzc1NTgwZTNlZWU4YTFlZDllMzVjZjIxZmNmMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvZWZsL2V3ay9ld2tfY29va2llcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9lZmwvZXdr
L2V3a19jb29raWVzLmNwcApAQCAtNjcsNjYgKzY3LDY2IEBAIEVpbmFfQm9vbCBld2tfY29va2ll
c19maWxlX3NldChjb25zdCBjaGFyKiBmaWxlbmFtZSkKIHZvaWQgZXdrX2Nvb2tpZXNfY2xlYXIo
dm9pZCkKIHsKICNpZiBVU0UoU09VUCkKLSAgICBHU0xpc3QqIGw7CisgICAgR1NMaXN0KiBsaXN0
OwogICAgIEdTTGlzdCogcDsKICAgICBTb3VwQ29va2llSmFyKiBjb29raWVKYXIgPSBXZWJDb3Jl
OjpkZWZhdWx0Q29va2llSmFyKCk7CiAKLSAgICBsID0gc291cF9jb29raWVfamFyX2FsbF9jb29r
aWVzKGNvb2tpZUphcik7Ci0gICAgZm9yIChwID0gbDsgcDsgcCA9IHAtPm5leHQpCisgICAgbGlz
dCA9IHNvdXBfY29va2llX2phcl9hbGxfY29va2llcyhjb29raWVKYXIpOworICAgIGZvciAocCA9
IGxpc3Q7IHA7IHAgPSBwLT5uZXh0KQogICAgICAgICBzb3VwX2Nvb2tpZV9qYXJfZGVsZXRlX2Nv
b2tpZShjb29raWVKYXIsIChTb3VwQ29va2llKilwLT5kYXRhKTsKIAotICAgIHNvdXBfY29va2ll
c19mcmVlKGwpOworICAgIHNvdXBfY29va2llc19mcmVlKGxpc3QpOwogI2VuZGlmCiB9CiAKIEVp
bmFfTGlzdCogZXdrX2Nvb2tpZXNfZ2V0X2FsbCh2b2lkKQogewotICAgIEVpbmFfTGlzdCogZWwg
PSAwOworICAgIEVpbmFfTGlzdCogcmVzdWx0ID0gMDsKICNpZiBVU0UoU09VUCkKLSAgICBHU0xp
c3QqIGw7CisgICAgR1NMaXN0KiBsaXN0OwogICAgIEdTTGlzdCogcDsKICAgICBTb3VwQ29va2ll
SmFyKiBjb29raWVKYXIgPSBXZWJDb3JlOjpkZWZhdWx0Q29va2llSmFyKCk7CiAKLSAgICBsID0g
c291cF9jb29raWVfamFyX2FsbF9jb29raWVzKGNvb2tpZUphcik7Ci0gICAgZm9yIChwID0gbDsg
cDsgcCA9IHAtPm5leHQpIHsKKyAgICBsaXN0ID0gc291cF9jb29raWVfamFyX2FsbF9jb29raWVz
KGNvb2tpZUphcik7CisgICAgZm9yIChwID0gbGlzdDsgcDsgcCA9IHAtPm5leHQpIHsKICAgICAg
ICAgU291cENvb2tpZSogY29va2llID0gc3RhdGljX2Nhc3Q8U291cENvb2tpZSo+KHAtPmRhdGEp
OwotICAgICAgICBFd2tfQ29va2llKiBjID0gc3RhdGljX2Nhc3Q8RXdrX0Nvb2tpZSo+KG1hbGxv
YyhzaXplb2YoKmMpKSk7Ci0gICAgICAgIGMtPm5hbWUgPSBzdHJkdXAoY29va2llLT5uYW1lKTsK
LSAgICAgICAgYy0+dmFsdWUgPSBzdHJkdXAoY29va2llLT52YWx1ZSk7Ci0gICAgICAgIGMtPmRv
bWFpbiA9IHN0cmR1cChjb29raWUtPmRvbWFpbik7Ci0gICAgICAgIGMtPnBhdGggPSBzdHJkdXAo
Y29va2llLT5wYXRoKTsKLSAgICAgICAgYy0+ZXhwaXJlcyA9IHNvdXBfZGF0ZV90b190aW1lX3Qo
Y29va2llLT5leHBpcmVzKTsKLSAgICAgICAgYy0+c2VjdXJlID0gc3RhdGljX2Nhc3Q8RWluYV9C
b29sPihjb29raWUtPnNlY3VyZSk7Ci0gICAgICAgIGMtPmh0dHBfb25seSA9IHN0YXRpY19jYXN0
PEVpbmFfQm9vbD4oY29va2llLT5odHRwX29ubHkpOwotICAgICAgICBlbCA9IGVpbmFfbGlzdF9h
cHBlbmQoZWwsIGMpOworICAgICAgICBFd2tfQ29va2llKiBld2tDb29raWUgPSBzdGF0aWNfY2Fz
dDxFd2tfQ29va2llKj4obWFsbG9jKHNpemVvZigqZXdrQ29va2llKSkpOworICAgICAgICBld2tD
b29raWUtPm5hbWUgPSBzdHJkdXAoY29va2llLT5uYW1lKTsKKyAgICAgICAgZXdrQ29va2llLT52
YWx1ZSA9IHN0cmR1cChjb29raWUtPnZhbHVlKTsKKyAgICAgICAgZXdrQ29va2llLT5kb21haW4g
PSBzdHJkdXAoY29va2llLT5kb21haW4pOworICAgICAgICBld2tDb29raWUtPnBhdGggPSBzdHJk
dXAoY29va2llLT5wYXRoKTsKKyAgICAgICAgZXdrQ29va2llLT5leHBpcmVzID0gc291cF9kYXRl
X3RvX3RpbWVfdChjb29raWUtPmV4cGlyZXMpOworICAgICAgICBld2tDb29raWUtPnNlY3VyZSA9
IHN0YXRpY19jYXN0PEVpbmFfQm9vbD4oY29va2llLT5zZWN1cmUpOworICAgICAgICBld2tDb29r
aWUtPmh0dHBfb25seSA9IHN0YXRpY19jYXN0PEVpbmFfQm9vbD4oY29va2llLT5odHRwX29ubHkp
OworICAgICAgICByZXN1bHQgPSBlaW5hX2xpc3RfYXBwZW5kKHJlc3VsdCwgZXdrQ29va2llKTsK
ICAgICB9CiAKLSAgICBzb3VwX2Nvb2tpZXNfZnJlZShsKTsKKyAgICBzb3VwX2Nvb2tpZXNfZnJl
ZShsaXN0KTsKICNlbmRpZgotICAgIHJldHVybiBlbDsKKyAgICByZXR1cm4gcmVzdWx0OwogfQog
CiB2b2lkIGV3a19jb29raWVzX2Nvb2tpZV9kZWwoRXdrX0Nvb2tpZSogY29va2llKQogewogI2lm
IFVTRShTT1VQKQogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGNvb2tpZSk7Ci0gICAg
R1NMaXN0KiBsOworICAgIEdTTGlzdCogbGlzdDsKICAgICBHU0xpc3QqIHA7CiAgICAgU291cENv
b2tpZUphciogY29va2llSmFyID0gV2ViQ29yZTo6ZGVmYXVsdENvb2tpZUphcigpOwotICAgIFNv
dXBDb29raWUqIGMxID0gc291cF9jb29raWVfbmV3KAorICAgIFNvdXBDb29raWUqIGNvb2tpZTEg
PSBzb3VwX2Nvb2tpZV9uZXcoCiAgICAgICAgIGNvb2tpZS0+bmFtZSwgY29va2llLT52YWx1ZSwg
Y29va2llLT5kb21haW4sIGNvb2tpZS0+cGF0aCwgLTEpOwogCi0gICAgbCA9IHNvdXBfY29va2ll
X2phcl9hbGxfY29va2llcyhjb29raWVKYXIpOwotICAgIGZvciAocCA9IGw7IHA7IHAgPSBwLT5u
ZXh0KSB7Ci0gICAgICAgIFNvdXBDb29raWUqIGMyID0gc3RhdGljX2Nhc3Q8U291cENvb2tpZSo+
KHAtPmRhdGEpOwotICAgICAgICBpZiAoc291cF9jb29raWVfZXF1YWwoYzEsIGMyKSkgewotICAg
ICAgICAgICAgc291cF9jb29raWVfamFyX2RlbGV0ZV9jb29raWUoY29va2llSmFyLCBjMik7Cisg
ICAgbGlzdCA9IHNvdXBfY29va2llX2phcl9hbGxfY29va2llcyhjb29raWVKYXIpOworICAgIGZv
ciAocCA9IGxpc3Q7IHA7IHAgPSBwLT5uZXh0KSB7CisgICAgICAgIFNvdXBDb29raWUqIGNvb2tp
ZTIgPSBzdGF0aWNfY2FzdDxTb3VwQ29va2llKj4ocC0+ZGF0YSk7CisgICAgICAgIGlmIChzb3Vw
X2Nvb2tpZV9lcXVhbChjb29raWUxLCBjb29raWUyKSkgeworICAgICAgICAgICAgc291cF9jb29r
aWVfamFyX2RlbGV0ZV9jb29raWUoY29va2llSmFyLCBjb29raWUyKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgfQogCi0gICAgc291cF9jb29raWVfZnJlZShjMSk7Ci0gICAg
c291cF9jb29raWVzX2ZyZWUobCk7CisgICAgc291cF9jb29raWVfZnJlZShjb29raWUxKTsKKyAg
ICBzb3VwX2Nvb2tpZXNfZnJlZShsaXN0KTsKICNlbmRpZgogfQogCkBAIC0xNjcsNyArMTY3LDcg
QEAgdm9pZCBld2tfY29va2llc19wb2xpY3lfc2V0KEV3a19Db29raWVfUG9saWN5IGNvb2tpZVBv
bGljeSkKIAogRXdrX0Nvb2tpZV9Qb2xpY3kgZXdrX2Nvb2tpZXNfcG9saWN5X2dldCh2b2lkKQog
ewotICAgIEV3a19Db29raWVfUG9saWN5IGV3a19wb2xpY3kgPSBFV0tfQ09PS0lFX0pBUl9BQ0NF
UFRfQUxXQVlTOworICAgIEV3a19Db29raWVfUG9saWN5IGV3a1BvbGljeSA9IEVXS19DT09LSUVf
SkFSX0FDQ0VQVF9BTFdBWVM7CiAjaWYgVVNFKFNPVVApCiAgICAgU291cENvb2tpZUphciogY29v
a2llSmFyID0gV2ViQ29yZTo6ZGVmYXVsdENvb2tpZUphcigpOwogICAgIFNvdXBDb29raWVKYXJB
Y2NlcHRQb2xpY3kgcG9saWN5OwpAQCAtMTc1LDE2ICsxNzUsMTYgQEAgRXdrX0Nvb2tpZV9Qb2xp
Y3kgZXdrX2Nvb2tpZXNfcG9saWN5X2dldCh2b2lkKQogICAgIHBvbGljeSA9IHNvdXBfY29va2ll
X2phcl9nZXRfYWNjZXB0X3BvbGljeShjb29raWVKYXIpOwogICAgIHN3aXRjaCAocG9saWN5KSB7
CiAgICAgY2FzZSBTT1VQX0NPT0tJRV9KQVJfQUNDRVBUX05FVkVSOgotICAgICAgICBld2tfcG9s
aWN5ID0gRVdLX0NPT0tJRV9KQVJfQUNDRVBUX05FVkVSOworICAgICAgICBld2tQb2xpY3kgPSBF
V0tfQ09PS0lFX0pBUl9BQ0NFUFRfTkVWRVI7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgU09V
UF9DT09LSUVfSkFSX0FDQ0VQVF9BTFdBWVM6Ci0gICAgICAgIGV3a19wb2xpY3kgPSBFV0tfQ09P
S0lFX0pBUl9BQ0NFUFRfQUxXQVlTOworICAgICAgICBld2tQb2xpY3kgPSBFV0tfQ09PS0lFX0pB
Ul9BQ0NFUFRfQUxXQVlTOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFNPVVBfQ09PS0lFX0pB
Ul9BQ0NFUFRfTk9fVEhJUkRfUEFSVFk6Ci0gICAgICAgIGV3a19wb2xpY3kgPSBFV0tfQ09PS0lF
X0pBUl9BQ0NFUFRfTk9fVEhJUkRfUEFSVFk7CisgICAgICAgIGV3a1BvbGljeSA9IEVXS19DT09L
SUVfSkFSX0FDQ0VQVF9OT19USElSRF9QQVJUWTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogI2Vu
ZGlmCiAKLSAgICByZXR1cm4gZXdrX3BvbGljeTsKKyAgICByZXR1cm4gZXdrUG9saWN5OwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19mcmFtZS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L2VmbC9ld2svZXdrX2ZyYW1lLmNwcAppbmRleCA4N2NlNjNjNjY3NmUyZDQzODdmYWU5
N2IzMTM4NDA1ZTVjMzQ5OGM1Li5mMDk1MGNjMTA0M2VmN2I2MzA0NWNmMjVhYWMxZjViMTdjMWRi
NDc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2ZyYW1lLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2ZyYW1lLmNwcApAQCAtNzYsNyArNzYsNyBAQCBz
dHJ1Y3QgRXdrX0ZyYW1lX1NtYXJ0X0RhdGEgewogCiBzdHJ1Y3QgRWluYV9JdGVyYXRvcl9Fd2tf
RnJhbWUgewogICAgIEVpbmFfSXRlcmF0b3IgYmFzZTsKLSAgICBFdmFzX09iamVjdCogb2JqOwor
ICAgIEV2YXNfT2JqZWN0KiBvYmplY3Q7CiAgICAgdW5zaWduZWQgY3VycmVudEluZGV4OwogfTsK
IApAQCAtMTEzLDIwICsxMTMsMjAgQEAgc3RhdGljIEV2YXNfU21hcnRfQ2xhc3MgX3BhcmVudF9z
YyA9IEVWQVNfU01BUlRfQ0xBU1NfSU5JVF9OVUxMOwogc3RhdGljIGlubGluZSB2b2lkIF9ld2tf
ZnJhbWVfZGVidWcoRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewogICAgIEV2YXNfT2JqZWN0KiBj
bGlwLCAqIHBhcmVudDsKLSAgICBFdmFzX0Nvb3JkIHgsIHksIHcsIGgsIGN4LCBjeSwgY3csIGNo
OwotICAgIGludCByLCBnLCBiLCBhLCBjciwgY2csIGNiLCBjYTsKKyAgICBFdmFzX0Nvb3JkIHgs
IHksIHdpZHRoLCBoZWlnaHQsIGNvbnRlbnRYLCBjb250ZW50WSwgY29udGVudFdpZHRoLCBjb250
ZW50SGVpZ2h0OworICAgIGludCByZWQsIGdyZWVuLCBibHVlLCBhbHBoYSwgY29udGVudFJlZCwg
Y29udGVudEdyZWVuLCBjb250ZW50Qmx1ZSwgY29udGVudEFscGhhOwogCi0gICAgZXZhc19vYmpl
Y3RfY29sb3JfZ2V0KGV3a0ZyYW1lLCAmciwgJmcsICZiLCAmYSk7Ci0gICAgZXZhc19vYmplY3Rf
Z2VvbWV0cnlfZ2V0KGV3a0ZyYW1lLCAmeCwgJnksICZ3LCAmaCk7CisgICAgZXZhc19vYmplY3Rf
Y29sb3JfZ2V0KGV3a0ZyYW1lLCAmcmVkLCAmZ3JlZW4sICZibHVlLCAmYWxwaGEpOworICAgIGV2
YXNfb2JqZWN0X2dlb21ldHJ5X2dldChld2tGcmFtZSwgJngsICZ5LCAmd2lkdGgsICZoZWlnaHQp
OwogCiAgICAgY2xpcCA9IGV2YXNfb2JqZWN0X2NsaXBfZ2V0KGV3a0ZyYW1lKTsKLSAgICBldmFz
X29iamVjdF9jb2xvcl9nZXQoY2xpcCwgJmNyLCAmY2csICZjYiwgJmNhKTsKLSAgICBldmFzX29i
amVjdF9nZW9tZXRyeV9nZXQoY2xpcCwgJmN4LCAmY3ksICZjdywgJmNoKTsKKyAgICBldmFzX29i
amVjdF9jb2xvcl9nZXQoY2xpcCwgJmNvbnRlbnRSZWQsICZjb250ZW50R3JlZW4sICZjb250ZW50
Qmx1ZSwgJmNvbnRlbnRBbHBoYSk7CisgICAgZXZhc19vYmplY3RfZ2VvbWV0cnlfZ2V0KGNsaXAs
ICZjb250ZW50WCwgJmNvbnRlbnRZLCAmY29udGVudFdpZHRoLCAmY29udGVudEhlaWdodCk7CiAK
ICAgICBmcHJpbnRmKHN0ZGVyciwgIiVwOiB0eXBlPSVzIG5hbWU9JXMsIHZpc2libGU9JWQsIGNv
bG9yPSUwMnglMDJ4JTAyeCUwMngsICVkLCVkKyVkeCVkLCBjbGlwcGVyPSVwICglZCwgJTAyeCUw
MnglMDJ4JTAyeCwgJWQsJWQrJWR4JWQpXG4iLAogICAgICAgICAgICAgZXdrRnJhbWUsIGV2YXNf
b2JqZWN0X3R5cGVfZ2V0KGV3a0ZyYW1lKSwgZXZhc19vYmplY3RfbmFtZV9nZXQoZXdrRnJhbWUp
LCBldmFzX29iamVjdF92aXNpYmxlX2dldChld2tGcmFtZSksCi0gICAgICAgICAgICByLCBnLCBi
LCBhLCB4LCB5LCB3LCBoLAotICAgICAgICAgICAgY2xpcCwgZXZhc19vYmplY3RfdmlzaWJsZV9n
ZXQoY2xpcCksIGNyLCBjZywgY2IsIGNhLCBjeCwgY3ksIGN3LCBjaCk7CisgICAgICAgICAgICBy
ZWQsIGdyZWVuLCBibHVlLCBhbHBoYSwgeCwgeSwgd2lkdGgsIGhlaWdodCwKKyAgICAgICAgICAg
IGNsaXAsIGV2YXNfb2JqZWN0X3Zpc2libGVfZ2V0KGNsaXApLCBjb250ZW50UmVkLCBjb250ZW50
R3JlZW4sIGNvbnRlbnRCbHVlLCBjb250ZW50QWxwaGEsIGNvbnRlbnRYLCBjb250ZW50WSwgY29u
dGVudFdpZHRoLCBjb250ZW50SGVpZ2h0KTsKICAgICBwYXJlbnQgPSBldmFzX29iamVjdF9zbWFy
dF9wYXJlbnRfZ2V0KGV3a0ZyYW1lKTsKICAgICBpZiAoIXBhcmVudCkKICAgICAgICAgZnByaW50
ZihzdGRlcnIsICJcbiIpOwpAQCAtMTQwLDE2ICsxNDAsMTYgQEAgc3RhdGljIFdlYkNvcmU6OkZy
YW1lTG9hZGVyQ2xpZW50RWZsKiBfZXdrX2ZyYW1lX2xvYWRlcl9lZmxfZ2V0KGNvbnN0IFdlYkNv
cmU6OkYKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRF
ZmwqPihmcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpKTsKIH0KIAotc3RhdGljIEVpbmFfQm9vbCBf
ZXdrX2ZyYW1lX2NoaWxkcmVuX2l0ZXJhdG9yX25leHQoRWluYV9JdGVyYXRvcl9Fd2tfRnJhbWUq
IGl0LCBFdmFzX09iamVjdCoqIGRhdGEpCitzdGF0aWMgRWluYV9Cb29sIF9ld2tfZnJhbWVfY2hp
bGRyZW5faXRlcmF0b3JfbmV4dChFaW5hX0l0ZXJhdG9yX0V3a19GcmFtZSogaXRlcmF0b3IsIEV2
YXNfT2JqZWN0KiogZGF0YSkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihpdC0+
b2JqLCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFM
KHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4o
aXRlcmF0b3ItPm9iamVjdCwgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5mcmFtZSwgRUlOQV9GQUxTRSk7CiAKLSAg
ICBXZWJDb3JlOjpGcmFtZVRyZWUqIHRyZWUgPSBzZC0+ZnJhbWUtPnRyZWUoKTsgLy8gY2hlY2sg
aWYgaXQncyBzdGlsbCB2YWxpZAorICAgIFdlYkNvcmU6OkZyYW1lVHJlZSogdHJlZSA9IHNtYXJ0
RGF0YS0+ZnJhbWUtPnRyZWUoKTsgLy8gY2hlY2sgaWYgaXQncyBzdGlsbCB2YWxpZAogICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh0cmVlLCBFSU5BX0ZBTFNFKTsKIAotICAgIGlm
IChpdC0+Y3VycmVudEluZGV4IDwgdHJlZS0+Y2hpbGRDb3VudCgpKSB7Ci0gICAgICAgICpkYXRh
ID0gRVdLUHJpdmF0ZTo6a2l0RnJhbWUodHJlZS0+Y2hpbGQoaXQtPmN1cnJlbnRJbmRleCsrKSk7
CisgICAgaWYgKGl0ZXJhdG9yLT5jdXJyZW50SW5kZXggPCB0cmVlLT5jaGlsZENvdW50KCkpIHsK
KyAgICAgICAgKmRhdGEgPSBFV0tQcml2YXRlOjpraXRGcmFtZSh0cmVlLT5jaGlsZChpdGVyYXRv
ci0+Y3VycmVudEluZGV4KyspKTsKICAgICAgICAgcmV0dXJuIEVJTkFfVFJVRTsKICAgICB9CiAK
QEAgLTE1OCw1MyArMTU4LDUzIEBAIHN0YXRpYyBFaW5hX0Jvb2wgX2V3a19mcmFtZV9jaGlsZHJl
bl9pdGVyYXRvcl9uZXh0KEVpbmFfSXRlcmF0b3JfRXdrX0ZyYW1lKiBpdCwKIAogc3RhdGljIEV2
YXNfT2JqZWN0KiBfZXdrX2ZyYW1lX2NoaWxkcmVuX2l0ZXJhdG9yX2dldF9jb250YWluZXIoRWlu
YV9JdGVyYXRvcl9Fd2tfRnJhbWUqIGl0ZXJhdG9yKQogewotICAgIHJldHVybiBpdGVyYXRvci0+
b2JqOworICAgIHJldHVybiBpdGVyYXRvci0+b2JqZWN0OwogfQogCiBzdGF0aWMgdm9pZCBfZXdr
X2ZyYW1lX3NtYXJ0X2FkZChFdmFzX09iamVjdCogZXdrRnJhbWUpCiB7Ci0gICAgRVdLX0ZSQU1F
X1NEX0dFVChld2tGcmFtZSwgc2QpOworICAgIEVXS19GUkFNRV9TRF9HRVQoZXdrRnJhbWUsIHNt
YXJ0RGF0YSk7CiAKLSAgICBpZiAoIXNkKSB7Ci0gICAgICAgIHNkID0gc3RhdGljX2Nhc3Q8RXdr
X0ZyYW1lX1NtYXJ0X0RhdGEqPihjYWxsb2MoMSwgc2l6ZW9mKEV3a19GcmFtZV9TbWFydF9EYXRh
KSkpOwotICAgICAgICBpZiAoIXNkKSB7CisgICAgaWYgKCFzbWFydERhdGEpIHsKKyAgICAgICAg
c21hcnREYXRhID0gc3RhdGljX2Nhc3Q8RXdrX0ZyYW1lX1NtYXJ0X0RhdGEqPihjYWxsb2MoMSwg
c2l6ZW9mKEV3a19GcmFtZV9TbWFydF9EYXRhKSkpOworICAgICAgICBpZiAoIXNtYXJ0RGF0YSkg
ewogICAgICAgICAgICAgQ1JJVElDQUwoImNvdWxkIG5vdCBhbGxvY2F0ZSBFd2tfRnJhbWVfU21h
cnRfRGF0YSIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGV2YXNf
b2JqZWN0X3NtYXJ0X2RhdGFfc2V0KGV3a0ZyYW1lLCBzZCk7CisgICAgICAgIGV2YXNfb2JqZWN0
X3NtYXJ0X2RhdGFfc2V0KGV3a0ZyYW1lLCBzbWFydERhdGEpOwogICAgIH0KIAotICAgIHNkLT5z
ZWxmID0gZXdrRnJhbWU7CisgICAgc21hcnREYXRhLT5zZWxmID0gZXdrRnJhbWU7CiAKICAgICBf
cGFyZW50X3NjLmFkZChld2tGcmFtZSk7Ci0gICAgZXZhc19vYmplY3Rfc3RhdGljX2NsaXBfc2V0
KHNkLT5iYXNlLmNsaXBwZXIsIEVJTkFfRkFMU0UpOwotICAgIGV2YXNfb2JqZWN0X21vdmUoc2Qt
PmJhc2UuY2xpcHBlciwgMCwgMCk7Ci0gICAgZXZhc19vYmplY3RfcmVzaXplKHNkLT5iYXNlLmNs
aXBwZXIsIDAsIDApOworICAgIGV2YXNfb2JqZWN0X3N0YXRpY19jbGlwX3NldChzbWFydERhdGEt
PmJhc2UuY2xpcHBlciwgRUlOQV9GQUxTRSk7CisgICAgZXZhc19vYmplY3RfbW92ZShzbWFydERh
dGEtPmJhc2UuY2xpcHBlciwgMCwgMCk7CisgICAgZXZhc19vYmplY3RfcmVzaXplKHNtYXJ0RGF0
YS0+YmFzZS5jbGlwcGVyLCAwLCAwKTsKIAogI2lmZGVmIEVXS19GUkFNRV9ERUJVRwotICAgIHNk
LT5yZWdpb24gPSBldmFzX29iamVjdF9yZWN0YW5nbGVfYWRkKHNkLT5iYXNlLmV2YXMpOworICAg
IHNtYXJ0RGF0YS0+cmVnaW9uID0gZXZhc19vYmplY3RfcmVjdGFuZ2xlX2FkZChzbWFydERhdGEt
PmJhc2UuZXZhcyk7CiAgICAgc3RhdGljIGludCBpID0gMDsKICAgICBzd2l0Y2ggKGkpIHsKICAg
ICBjYXNlIDA6Ci0gICAgICAgIGV2YXNfb2JqZWN0X2NvbG9yX3NldChzZC0+cmVnaW9uLCAxMjgs
IDAsIDAsIDEyOCk7CisgICAgICAgIGV2YXNfb2JqZWN0X2NvbG9yX3NldChzbWFydERhdGEtPnJl
Z2lvbiwgMTI4LCAwLCAwLCAxMjgpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIDE6Ci0gICAg
ICAgIGV2YXNfb2JqZWN0X2NvbG9yX3NldChzZC0+cmVnaW9uLCAwLCAxMjgsIDAsIDEyOCk7Cisg
ICAgICAgIGV2YXNfb2JqZWN0X2NvbG9yX3NldChzbWFydERhdGEtPnJlZ2lvbiwgMCwgMTI4LCAw
LCAxMjgpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIDI6Ci0gICAgICAgIGV2YXNfb2JqZWN0
X2NvbG9yX3NldChzZC0+cmVnaW9uLCAwLCAwLCAxMjgsIDEyOCk7CisgICAgICAgIGV2YXNfb2Jq
ZWN0X2NvbG9yX3NldChzbWFydERhdGEtPnJlZ2lvbiwgMCwgMCwgMTI4LCAxMjgpOwogICAgICAg
ICBicmVhazsKICAgICBjYXNlIDM6Ci0gICAgICAgIGV2YXNfb2JqZWN0X2NvbG9yX3NldChzZC0+
cmVnaW9uLCAxMjgsIDAsIDAsIDEyOCk7CisgICAgICAgIGV2YXNfb2JqZWN0X2NvbG9yX3NldChz
bWFydERhdGEtPnJlZ2lvbiwgMTI4LCAwLCAwLCAxMjgpOwogICAgICAgICBicmVhazsKICAgICBj
YXNlIDQ6Ci0gICAgICAgIGV2YXNfb2JqZWN0X2NvbG9yX3NldChzZC0+cmVnaW9uLCAxMjgsIDEy
OCwgMCwgMTI4KTsKKyAgICAgICAgZXZhc19vYmplY3RfY29sb3Jfc2V0KHNtYXJ0RGF0YS0+cmVn
aW9uLCAxMjgsIDEyOCwgMCwgMTI4KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSA1OgotICAg
ICAgICBldmFzX29iamVjdF9jb2xvcl9zZXQoc2QtPnJlZ2lvbiwgMTI4LCAwLCAxMjgsIDEyOCk7
CisgICAgICAgIGV2YXNfb2JqZWN0X2NvbG9yX3NldChzbWFydERhdGEtPnJlZ2lvbiwgMTI4LCAw
LCAxMjgsIDEyOCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgNjoKLSAgICAgICAgZXZhc19v
YmplY3RfY29sb3Jfc2V0KHNkLT5yZWdpb24sIDAsIDEyOCwgMTI4LCAxMjgpOworICAgICAgICBl
dmFzX29iamVjdF9jb2xvcl9zZXQoc21hcnREYXRhLT5yZWdpb24sIDAsIDEyOCwgMTI4LCAxMjgp
OwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICBicmVhazsKQEAgLTIxMywy
NyArMjEzLDI3IEBAIHN0YXRpYyB2b2lkIF9ld2tfZnJhbWVfc21hcnRfYWRkKEV2YXNfT2JqZWN0
KiBld2tGcmFtZSkKICAgICBpZiAoaSA+IDYpCiAgICAgICAgIGkgPSAwOwogCi0gICAgZXZhc19v
YmplY3Rfc21hcnRfbWVtYmVyX2FkZChzZC0+cmVnaW9uLCBld2tGcmFtZSk7Ci0gICAgZXZhc19v
YmplY3RfaGlkZShzZC0+cmVnaW9uKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9tZW1iZXJfYWRk
KHNtYXJ0RGF0YS0+cmVnaW9uLCBld2tGcmFtZSk7CisgICAgZXZhc19vYmplY3RfaGlkZShzbWFy
dERhdGEtPnJlZ2lvbik7CiAjZW5kaWYKIH0KIAogc3RhdGljIHZvaWQgX2V3a19mcmFtZV9zbWFy
dF9kZWwoRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewotICAgIEVXS19GUkFNRV9TRF9HRVQoZXdr
RnJhbWUsIHNkKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUKGV3a0ZyYW1lLCBzbWFydERhdGEpOwog
Ci0gICAgaWYgKHNkKSB7Ci0gICAgICAgIGlmIChzZC0+ZnJhbWUpIHsKLSAgICAgICAgICAgIFdl
YkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50RWZsKiBmbGMgPSBfZXdrX2ZyYW1lX2xvYWRlcl9lZmxf
Z2V0KHNkLT5mcmFtZSk7CisgICAgaWYgKHNtYXJ0RGF0YSkgeworICAgICAgICBpZiAoc21hcnRE
YXRhLT5mcmFtZSkgeworICAgICAgICAgICAgV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRFZmwq
IGZsYyA9IF9ld2tfZnJhbWVfbG9hZGVyX2VmbF9nZXQoc21hcnREYXRhLT5mcmFtZSk7CiAgICAg
ICAgICAgICBmbGMtPnNldFdlYkZyYW1lKDApOwotICAgICAgICAgICAgc2QtPmZyYW1lLT5sb2Fk
ZXIoKS0+ZGV0YWNoRnJvbVBhcmVudCgpOwotICAgICAgICAgICAgc2QtPmZyYW1lLT5sb2FkZXIo
KS0+Y2FuY2VsQW5kQ2xlYXIoKTsKLSAgICAgICAgICAgIHNkLT5mcmFtZSA9IDA7CisgICAgICAg
ICAgICBzbWFydERhdGEtPmZyYW1lLT5sb2FkZXIoKS0+ZGV0YWNoRnJvbVBhcmVudCgpOworICAg
ICAgICAgICAgc21hcnREYXRhLT5mcmFtZS0+bG9hZGVyKCktPmNhbmNlbEFuZENsZWFyKCk7Cisg
ICAgICAgICAgICBzbWFydERhdGEtPmZyYW1lID0gMDsKICAgICAgICAgfQogCi0gICAgICAgIGVp
bmFfc3RyaW5nc2hhcmVfZGVsKHNkLT50aXRsZSk7Ci0gICAgICAgIGVpbmFfc3RyaW5nc2hhcmVf
ZGVsKHNkLT51cmkpOwotICAgICAgICBlaW5hX3N0cmluZ3NoYXJlX2RlbChzZC0+bmFtZSk7Cisg
ICAgICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVsKHNtYXJ0RGF0YS0+dGl0bGUpOworICAgICAgICBl
aW5hX3N0cmluZ3NoYXJlX2RlbChzbWFydERhdGEtPnVyaSk7CisgICAgICAgIGVpbmFfc3RyaW5n
c2hhcmVfZGVsKHNtYXJ0RGF0YS0+bmFtZSk7CiAgICAgfQogCiAgICAgX3BhcmVudF9zYy5kZWwo
ZXdrRnJhbWUpOwpAQCAtMjQxLDE1ICsyNDEsMTUgQEAgc3RhdGljIHZvaWQgX2V3a19mcmFtZV9z
bWFydF9kZWwoRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogCiBzdGF0aWMgdm9pZCBfZXdrX2ZyYW1l
X3NtYXJ0X3Jlc2l6ZShFdmFzX09iamVjdCogZXdrRnJhbWUsIEV2YXNfQ29vcmQgd2lkdGgsIEV2
YXNfQ29vcmQgaGVpZ2h0KQogewotICAgIEVXS19GUkFNRV9TRF9HRVQoZXdrRnJhbWUsIHNkKTsK
LSAgICBldmFzX29iamVjdF9yZXNpemUoc2QtPmJhc2UuY2xpcHBlciwgd2lkdGgsIGhlaWdodCk7
CisgICAgRVdLX0ZSQU1FX1NEX0dFVChld2tGcmFtZSwgc21hcnREYXRhKTsKKyAgICBldmFzX29i
amVjdF9yZXNpemUoc21hcnREYXRhLT5iYXNlLmNsaXBwZXIsIHdpZHRoLCBoZWlnaHQpOwogCiAj
aWZkZWYgRVdLX0ZSQU1FX0RFQlVHCi0gICAgZXZhc19vYmplY3RfcmVzaXplKHNkLT5yZWdpb24s
IHdpZHRoLCBoZWlnaHQpOworICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShzbWFydERhdGEtPnJlZ2lv
biwgd2lkdGgsIGhlaWdodCk7CiAgICAgRXZhc19Db29yZCB4LCB5OwotICAgIGV2YXNfb2JqZWN0
X2dlb21ldHJ5X2dldChzZC0+cmVnaW9uLCAmeCwgJnksICZ3aWR0aCwgJmhlaWdodCk7CisgICAg
ZXZhc19vYmplY3RfZ2VvbWV0cnlfZ2V0KHNtYXJ0RGF0YS0+cmVnaW9uLCAmeCwgJnksICZ3aWR0
aCwgJmhlaWdodCk7CiAgICAgSU5GKCJyZWdpb249JXAsIHZpc2libGU9JWQsIGdlbz0lZCwlZCAr
ICVkeCVkIiwKLSAgICAgICAgc2QtPnJlZ2lvbiwgZXZhc19vYmplY3RfdmlzaWJsZV9nZXQoc2Qt
PnJlZ2lvbiksIHgsIHksIHdpZHRoLCBoZWlnaHQpOworICAgICAgICBzbWFydERhdGEtPnJlZ2lv
biwgZXZhc19vYmplY3RfdmlzaWJsZV9nZXQoc21hcnREYXRhLT5yZWdpb24pLCB4LCB5LCB3aWR0
aCwgaGVpZ2h0KTsKICAgICBfZXdrX2ZyYW1lX2RlYnVnKGV3a0ZyYW1lKTsKICNlbmRpZgogfQpA
QCAtMjY0LDEzICsyNjQsMTMgQEAgc3RhdGljIHZvaWQgX2V3a19mcmFtZV9zbWFydF9zZXQoRXZh
c19TbWFydF9DbGFzcyogYXBpKQogCiBzdGF0aWMgaW5saW5lIEV2YXNfU21hcnQqIF9ld2tfZnJh
bWVfc21hcnRfY2xhc3NfbmV3KHZvaWQpCiB7Ci0gICAgc3RhdGljIEV2YXNfU21hcnRfQ2xhc3Mg
c2MgPSBFVkFTX1NNQVJUX0NMQVNTX0lOSVRfTkFNRV9WRVJTSU9OKEVXS19GUkFNRV9UWVBFX1NU
Uik7CisgICAgc3RhdGljIEV2YXNfU21hcnRfQ2xhc3Mgc21hcnRDbGFzcyA9IEVWQVNfU01BUlRf
Q0xBU1NfSU5JVF9OQU1FX1ZFUlNJT04oRVdLX0ZSQU1FX1RZUEVfU1RSKTsKICAgICBzdGF0aWMg
RXZhc19TbWFydCogc21hcnQgPSAwOwogCiAgICAgaWYgKEVJTkFfVU5MSUtFTFkoIXNtYXJ0KSkg
ewogICAgICAgICBldmFzX29iamVjdF9zbWFydF9jbGlwcGVkX3NtYXJ0X3NldCgmX3BhcmVudF9z
Yyk7Ci0gICAgICAgIF9ld2tfZnJhbWVfc21hcnRfc2V0KCZzYyk7Ci0gICAgICAgIHNtYXJ0ID0g
ZXZhc19zbWFydF9jbGFzc19uZXcoJnNjKTsKKyAgICAgICAgX2V3a19mcmFtZV9zbWFydF9zZXQo
JnNtYXJ0Q2xhc3MpOworICAgICAgICBzbWFydCA9IGV2YXNfc21hcnRfY2xhc3NfbmV3KCZzbWFy
dENsYXNzKTsKICAgICB9CiAKICAgICByZXR1cm4gc21hcnQ7CkBAIC0yODQsMjggKzI4NCwyOCBA
QCBFdmFzX09iamVjdCogZXdrX2ZyYW1lX3ZpZXdfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tG
cmFtZSkKIAogRWluYV9JdGVyYXRvciogZXdrX2ZyYW1lX2NoaWxkcmVuX2l0ZXJhdG9yX25ldyhF
dmFzX09iamVjdCogZXdrRnJhbWUpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrRnJhbWUsIHNkLCAwKTsKLSAgICBFaW5hX0l0ZXJhdG9yX0V3a19GcmFtZSogaXQgPSBzdGF0
aWNfY2FzdDxFaW5hX0l0ZXJhdG9yX0V3a19GcmFtZSo+CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9P
Ul9SRVRVUk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSwgMCk7CisgICAgRWluYV9JdGVyYXRvcl9Fd2tf
RnJhbWUqIGl0ZXJhdG9yID0gc3RhdGljX2Nhc3Q8RWluYV9JdGVyYXRvcl9Fd2tfRnJhbWUqPgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjYWxsb2MoMSwgc2l6ZW9mKEVpbmFf
SXRlcmF0b3JfRXdrX0ZyYW1lKSkpOwotICAgIGlmICghaXQpCisgICAgaWYgKCFpdGVyYXRvcikK
ICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBFSU5BX01BR0lDX1NFVCgmaXQtPmJhc2UsIEVJTkFf
TUFHSUNfSVRFUkFUT1IpOwotICAgIGl0LT5iYXNlLm5leHQgPSBGVU5DX0lURVJBVE9SX05FWFQo
X2V3a19mcmFtZV9jaGlsZHJlbl9pdGVyYXRvcl9uZXh0KTsKLSAgICBpdC0+YmFzZS5nZXRfY29u
dGFpbmVyID0gRlVOQ19JVEVSQVRPUl9HRVRfQ09OVEFJTkVSKF9ld2tfZnJhbWVfY2hpbGRyZW5f
aXRlcmF0b3JfZ2V0X2NvbnRhaW5lcik7Ci0gICAgaXQtPmJhc2UuZnJlZSA9IEZVTkNfSVRFUkFU
T1JfRlJFRShmcmVlKTsKLSAgICBpdC0+b2JqID0gZXdrRnJhbWU7Ci0gICAgaXQtPmN1cnJlbnRJ
bmRleCA9IDA7Ci0gICAgcmV0dXJuICZpdC0+YmFzZTsKKyAgICBFSU5BX01BR0lDX1NFVCgmaXRl
cmF0b3ItPmJhc2UsIEVJTkFfTUFHSUNfSVRFUkFUT1IpOworICAgIGl0ZXJhdG9yLT5iYXNlLm5l
eHQgPSBGVU5DX0lURVJBVE9SX05FWFQoX2V3a19mcmFtZV9jaGlsZHJlbl9pdGVyYXRvcl9uZXh0
KTsKKyAgICBpdGVyYXRvci0+YmFzZS5nZXRfY29udGFpbmVyID0gRlVOQ19JVEVSQVRPUl9HRVRf
Q09OVEFJTkVSKF9ld2tfZnJhbWVfY2hpbGRyZW5faXRlcmF0b3JfZ2V0X2NvbnRhaW5lcik7Cisg
ICAgaXRlcmF0b3ItPmJhc2UuZnJlZSA9IEZVTkNfSVRFUkFUT1JfRlJFRShmcmVlKTsKKyAgICBp
dGVyYXRvci0+b2JqZWN0ID0gZXdrRnJhbWU7CisgICAgaXRlcmF0b3ItPmN1cnJlbnRJbmRleCA9
IDA7CisgICAgcmV0dXJuICZpdGVyYXRvci0+YmFzZTsKIH0KIAogRXZhc19PYmplY3QqIGV3a19m
cmFtZV9jaGlsZF9maW5kKEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgY29uc3QgY2hhciogbmFtZSkK
IHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIDApOworICAg
IEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzbWFydERhdGEsIDApOwogICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChuYW1lLCAwKTsKLSAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCAwKTsKLSAgICBXVEY6OlN0cmluZyBzID0g
V1RGOjpTdHJpbmc6OmZyb21VVEY4KG5hbWUpOwotICAgIHJldHVybiBFV0tQcml2YXRlOjpraXRG
cmFtZShzZC0+ZnJhbWUtPnRyZWUoKS0+ZmluZChXVEY6OkF0b21pY1N0cmluZyhzKSkpOworICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmZyYW1lLCAwKTsKKyAg
ICBXVEY6OlN0cmluZyBmcmFtZU5hbWUgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgobmFtZSk7Cisg
ICAgcmV0dXJuIEVXS1ByaXZhdGU6OmtpdEZyYW1lKHNtYXJ0RGF0YS0+ZnJhbWUtPnRyZWUoKS0+
ZmluZChXVEY6OkF0b21pY1N0cmluZyhmcmFtZU5hbWUpKSk7CiB9CiAKIEVpbmFfQm9vbCBld2tf
ZnJhbWVfdXJpX3NldChFdmFzX09iamVjdCogZXdrRnJhbWUsIGNvbnN0IGNoYXIqIHVyaSkKQEAg
LTMyNiwyNyArMzI2LDI3IEBAIGNvbnN0IGNoYXIqIGV3a19mcmFtZV91cmlfZ2V0KGNvbnN0IEV2
YXNfT2JqZWN0KiBld2tGcmFtZSkKIAogY29uc3QgY2hhciogZXdrX2ZyYW1lX3RpdGxlX2dldChj
b25zdCBFdmFzX09iamVjdCogZXdrRnJhbWUpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9S
RVRVUk4oZXdrRnJhbWUsIHNkLCAwKTsKLSAgICByZXR1cm4gc2QtPnRpdGxlOworICAgIEVXS19G
UkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzbWFydERhdGEsIDApOworICAgIHJldHVy
biBzbWFydERhdGEtPnRpdGxlOwogfQogCiBjb25zdCBjaGFyKiBld2tfZnJhbWVfbmFtZV9nZXQo
Y29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1Jf
UkVUVVJOKGV3a0ZyYW1lLCBzZCwgMCk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrRnJhbWUsIHNtYXJ0RGF0YSwgMCk7CiAKLSAgICBpZiAoIXNkLT5mcmFtZSkgeworICAgIGlm
ICghc21hcnREYXRhLT5mcmFtZSkgewogICAgICAgICBFUlIoImNvdWxkIG5vdCBnZXQgbmFtZSBv
ZiB1bmluaXRpYWxpemVkIGZyYW1lLiIpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAg
ICBjb25zdCBXVEY6OlN0cmluZyBmcmFtZU5hbWUgPSBzZC0+ZnJhbWUtPnRyZWUoKS0+dW5pcXVl
TmFtZSgpOworICAgIGNvbnN0IFdURjo6U3RyaW5nIGZyYW1lTmFtZSA9IHNtYXJ0RGF0YS0+ZnJh
bWUtPnRyZWUoKS0+dW5pcXVlTmFtZSgpOwogCi0gICAgaWYgKChzZC0+bmFtZSkgJiYgKHNkLT5u
YW1lID09IGZyYW1lTmFtZSkpCi0gICAgICAgIHJldHVybiBzZC0+bmFtZTsKKyAgICBpZiAoKHNt
YXJ0RGF0YS0+bmFtZSkgJiYgKHNtYXJ0RGF0YS0+bmFtZSA9PSBmcmFtZU5hbWUpKQorICAgICAg
ICByZXR1cm4gc21hcnREYXRhLT5uYW1lOwogCi0gICAgZWluYV9zdHJpbmdzaGFyZV9yZXBsYWNl
X2xlbmd0aCgmKHNkLT5uYW1lKSwgZnJhbWVOYW1lLnV0ZjgoKS5kYXRhKCksIGZyYW1lTmFtZS5s
ZW5ndGgoKSk7CisgICAgZWluYV9zdHJpbmdzaGFyZV9yZXBsYWNlX2xlbmd0aCgmKHNtYXJ0RGF0
YS0+bmFtZSksIGZyYW1lTmFtZS51dGY4KCkuZGF0YSgpLCBmcmFtZU5hbWUubGVuZ3RoKCkpOwog
Ci0gICAgcmV0dXJuIHNkLT5uYW1lOworICAgIHJldHVybiBzbWFydERhdGEtPm5hbWU7CiB9CiAK
IEVpbmFfQm9vbCBld2tfZnJhbWVfY29udGVudHNfc2l6ZV9nZXQoY29uc3QgRXZhc19PYmplY3Qq
IGV3a0ZyYW1lLCBFdmFzX0Nvb3JkKiB3aWR0aCwgRXZhc19Db29yZCogaGVpZ2h0KQpAQCAtMzY3
LDkgKzM2Nyw5IEBAIEVpbmFfQm9vbCBld2tfZnJhbWVfY29udGVudHNfc2l6ZV9nZXQoY29uc3Qg
RXZhc19PYmplY3QqIGV3a0ZyYW1lLCBFdmFzX0Nvb3JkKiB3CiAKIHN0YXRpYyBFaW5hX0Jvb2wg
X2V3a19mcmFtZV9jb250ZW50c19zZXRfaW50ZXJuYWwoRXdrX0ZyYW1lX1NtYXJ0X0RhdGEqIHNt
YXJ0RGF0YSwgY29uc3QgY2hhciogY29udGVudHMsIHNpemVfdCBjb250ZW50c1NpemUsIGNvbnN0
IGNoYXIqIG1pbWVUeXBlLCBjb25zdCBjaGFyKiBlbmNvZGluZywgY29uc3QgY2hhciogYmFzZVVy
aSwgY29uc3QgY2hhciogdW5yZWFjaGFibGVVcmkpCiB7Ci0gICAgc2l6ZV90IGxlbiA9IHN0cmxl
bihjb250ZW50cyk7Ci0gICAgaWYgKGNvbnRlbnRzU2l6ZSA8IDEgfHwgY29udGVudHNTaXplID4g
bGVuKQotICAgICAgICBjb250ZW50c1NpemUgPSBsZW47CisgICAgc2l6ZV90IGxlbmd0aCA9IHN0
cmxlbihjb250ZW50cyk7CisgICAgaWYgKGNvbnRlbnRzU2l6ZSA8IDEgfHwgY29udGVudHNTaXpl
ID4gbGVuZ3RoKQorICAgICAgICBjb250ZW50c1NpemUgPSBsZW5ndGg7CiAgICAgaWYgKCFtaW1l
VHlwZSkKICAgICAgICAgbWltZVR5cGUgPSAidGV4dC9odG1sIjsKICAgICBpZiAoIWVuY29kaW5n
KQpAQCAtMzk4LDU3ICszOTgsNTcgQEAgc3RhdGljIEVpbmFfQm9vbCBfZXdrX2ZyYW1lX2NvbnRl
bnRzX3NldF9pbnRlcm5hbChFd2tfRnJhbWVfU21hcnRfRGF0YSogc21hcnREYXQKIAogRWluYV9C
b29sIGV3a19mcmFtZV9jb250ZW50c19zZXQoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBjb25zdCBj
aGFyKiBjb250ZW50cywgc2l6ZV90IGNvbnRlbnRzU2l6ZSwgY29uc3QgY2hhciogbWltZVR5cGUs
IGNvbnN0IGNoYXIqIGVuY29kaW5nLCBjb25zdCBjaGFyKiBiYXNlVXJpKQogewotICAgIEVXS19G
UkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRUlO
QV9TQUZFVFlfT05fRkFMU0VfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOworICAg
IEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzbWFydERhdGEsIEVJTkFfRkFM
U0UpOworICAgIEVJTkFfU0FGRVRZX09OX0ZBTFNFX1JFVFVSTl9WQUwoc21hcnREYXRhLT5mcmFt
ZSwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGNvbnRl
bnRzLCBFSU5BX0ZBTFNFKTsKICAgICByZXR1cm4gX2V3a19mcmFtZV9jb250ZW50c19zZXRfaW50
ZXJuYWwKLSAgICAgICAgICAgICAgIChzZCwgY29udGVudHMsIGNvbnRlbnRzU2l6ZSwgbWltZVR5
cGUsIGVuY29kaW5nLCBiYXNlVXJpLCAwKTsKKyAgICAgICAgICAgICAgIChzbWFydERhdGEsIGNv
bnRlbnRzLCBjb250ZW50c1NpemUsIG1pbWVUeXBlLCBlbmNvZGluZywgYmFzZVVyaSwgMCk7CiB9
CiAKIEVpbmFfQm9vbCBld2tfZnJhbWVfY29udGVudHNfYWx0ZXJuYXRlX3NldChFdmFzX09iamVj
dCogZXdrRnJhbWUsIGNvbnN0IGNoYXIqIGNvbnRlbnRzLCBzaXplX3QgY29udGVudHNTaXplLCBj
b25zdCBjaGFyKiBtaW1lVHlwZSwgY29uc3QgY2hhciogZW5jb2RpbmcsIGNvbnN0IGNoYXIqIGJh
c2VVcmksIGNvbnN0IGNoYXIqIHVucmVhY2hhYmxlVXJpKQogewotICAgIEVXS19GUkFNRV9TRF9H
RVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlf
T05fRkFMU0VfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOworICAgIEVXS19GUkFN
RV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAg
IEVJTkFfU0FGRVRZX09OX0ZBTFNFX1JFVFVSTl9WQUwoc21hcnREYXRhLT5mcmFtZSwgRUlOQV9G
QUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGNvbnRlbnRzLCBFSU5B
X0ZBTFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodW5yZWFjaGFibGVV
cmksIEVJTkFfRkFMU0UpOwogICAgIHJldHVybiBfZXdrX2ZyYW1lX2NvbnRlbnRzX3NldF9pbnRl
cm5hbAotICAgICAgICAgICAgICAgKHNkLCBjb250ZW50cywgY29udGVudHNTaXplLCBtaW1lVHlw
ZSwgZW5jb2RpbmcsIGJhc2VVcmksCisgICAgICAgICAgICAgICAoc21hcnREYXRhLCBjb250ZW50
cywgY29udGVudHNTaXplLCBtaW1lVHlwZSwgZW5jb2RpbmcsIGJhc2VVcmksCiAgICAgICAgICAg
ICAgICB1bnJlYWNoYWJsZVVyaSk7CiB9CiAKIEVpbmFfQm9vbCBld2tfZnJhbWVfc2NyaXB0X2V4
ZWN1dGUoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBjb25zdCBjaGFyKiBzY3JpcHQpCiB7Ci0gICAg
RVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsKLSAg
ICBFSU5BX1NBRkVUWV9PTl9GQUxTRV9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7
CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSwgRUlO
QV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fRkFMU0VfUkVUVVJOX1ZBTChzbWFydERhdGEt
PmZyYW1lLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwo
c2NyaXB0LCBFSU5BX0ZBTFNFKTsKLSAgICBzZC0+ZnJhbWUtPnNjcmlwdCgpLT5leGVjdXRlU2Ny
aXB0KFdURjo6U3RyaW5nOjpmcm9tVVRGOChzY3JpcHQpLCB0cnVlKTsKKyAgICBzbWFydERhdGEt
PmZyYW1lLT5zY3JpcHQoKS0+ZXhlY3V0ZVNjcmlwdChXVEY6OlN0cmluZzo6ZnJvbVVURjgoc2Ny
aXB0KSwgdHJ1ZSk7CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAogRWluYV9Cb29sIGV3a19m
cmFtZV9lZGl0YWJsZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewotICAgIEVX
S19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7Ci0g
ICAgcmV0dXJuIHNkLT5lZGl0YWJsZTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihl
d2tGcmFtZSwgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTl9WQUwoc21hcnREYXRhLT5mcmFtZSwgRUlOQV9GQUxTRSk7CisgICAgcmV0dXJuIHNt
YXJ0RGF0YS0+ZWRpdGFibGU7CiB9CiAKIEVpbmFfQm9vbCBld2tfZnJhbWVfZWRpdGFibGVfc2V0
KEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgRWluYV9Cb29sIGVkaXRhYmxlKQogewotICAgIEVXS19G
UkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7CisgICAg
RVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSwgRUlOQV9GQUxT
RSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUs
IEVJTkFfRkFMU0UpOwogICAgIGVkaXRhYmxlID0gISFlZGl0YWJsZTsKLSAgICBpZiAoc2QtPmVk
aXRhYmxlID09IGVkaXRhYmxlKQorICAgIGlmIChzbWFydERhdGEtPmVkaXRhYmxlID09IGVkaXRh
YmxlKQogICAgICAgICByZXR1cm4gRUlOQV9UUlVFOwogICAgIGlmIChlZGl0YWJsZSkKLSAgICAg
ICAgc2QtPmZyYW1lLT5lZGl0b3IoKS0+YXBwbHlFZGl0aW5nU3R5bGVUb0JvZHlFbGVtZW50KCk7
CisgICAgICAgIHNtYXJ0RGF0YS0+ZnJhbWUtPmVkaXRvcigpLT5hcHBseUVkaXRpbmdTdHlsZVRv
Qm9keUVsZW1lbnQoKTsKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCiBjaGFyKiBld2tfZnJh
bWVfc2VsZWN0aW9uX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrRnJhbWUpCiB7Ci0gICAgRVdL
X0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCAwKTsKLSAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCAwKTsKLSAgICBXVEY6OkNTdHJpbmcgcyA9
IHNkLT5mcmFtZS0+ZWRpdG9yKCktPnNlbGVjdGVkVGV4dCgpLnV0ZjgoKTsKKyAgICBFV0tfRlJB
TUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRhLCAwKTsKKyAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5mcmFtZSwgMCk7CisgICAgV1RGOjpD
U3RyaW5nIHMgPSBzbWFydERhdGEtPmZyYW1lLT5lZGl0b3IoKS0+c2VsZWN0ZWRUZXh0KCkudXRm
OCgpOwogICAgIGlmIChzLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gMDsKICAgICByZXR1cm4g
c3RyZHVwKHMuZGF0YSgpKTsKQEAgLTQ1Niw0NSArNDU2LDQ1IEBAIGNoYXIqIGV3a19mcmFtZV9z
ZWxlY3Rpb25fZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIAogRWluYV9Cb29sIGV3
a19mcmFtZV90ZXh0X3NlYXJjaChjb25zdCBFdmFzX09iamVjdCogZXdrRnJhbWUsIGNvbnN0IGNo
YXIqIHRleHQsIEVpbmFfQm9vbCBjYXNlU2Vuc2l0aXZlLCBFaW5hX0Jvb2wgZm9yd2FyZCwgRWlu
YV9Cb29sIHdyYXApCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUs
IHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2Qt
PmZyYW1lLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tG
cmFtZSwgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTl9WQUwoc21hcnREYXRhLT5mcmFtZSwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk5fVkFMKHRleHQsIEVJTkFfRkFMU0UpOwogCi0gICAgcmV0dXJuIHNkLT5m
cmFtZS0+ZWRpdG9yKCktPmZpbmRTdHJpbmcoV1RGOjpTdHJpbmc6OmZyb21VVEY4KHRleHQpLCBm
b3J3YXJkLCBjYXNlU2Vuc2l0aXZlLCB3cmFwLCB0cnVlKTsKKyAgICByZXR1cm4gc21hcnREYXRh
LT5mcmFtZS0+ZWRpdG9yKCktPmZpbmRTdHJpbmcoV1RGOjpTdHJpbmc6OmZyb21VVEY4KHRleHQp
LCBmb3J3YXJkLCBjYXNlU2Vuc2l0aXZlLCB3cmFwLCB0cnVlKTsKIH0KIAogdW5zaWduZWQgaW50
IGV3a19mcmFtZV90ZXh0X21hdGNoZXNfbWFyayhFdmFzX09iamVjdCogZXdrRnJhbWUsIGNvbnN0
IGNoYXIqIHN0cmluZywgRWluYV9Cb29sIGNhc2VTZW5zaXRpdmUsIEVpbmFfQm9vbCBoaWdobGln
aHQsIHVuc2lnbmVkIGludCBsaW1pdCkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVS
Tihld2tGcmFtZSwgc2QsIDApOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChz
ZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3
a0ZyYW1lLCBzbWFydERhdGEsIDApOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZB
TChzbWFydERhdGEtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTl9WQUwoc3RyaW5nLCAwKTsKIAotICAgIHNkLT5mcmFtZS0+ZWRpdG9yKCktPnNldE1h
cmtlZFRleHRNYXRjaGVzQXJlSGlnaGxpZ2h0ZWQoaGlnaGxpZ2h0KTsKLSAgICByZXR1cm4gc2Qt
PmZyYW1lLT5lZGl0b3IoKS0+Y291bnRNYXRjaGVzRm9yVGV4dChXVEY6OlN0cmluZzo6ZnJvbVVU
Rjgoc3RyaW5nKSwgY2FzZVNlbnNpdGl2ZSwgbGltaXQsIHRydWUpOworICAgIHNtYXJ0RGF0YS0+
ZnJhbWUtPmVkaXRvcigpLT5zZXRNYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkKGhpZ2hs
aWdodCk7CisgICAgcmV0dXJuIHNtYXJ0RGF0YS0+ZnJhbWUtPmVkaXRvcigpLT5jb3VudE1hdGNo
ZXNGb3JUZXh0KFdURjo6U3RyaW5nOjpmcm9tVVRGOChzdHJpbmcpLCBjYXNlU2Vuc2l0aXZlLCBs
aW1pdCwgdHJ1ZSk7CiB9CiAKIEVpbmFfQm9vbCBld2tfZnJhbWVfdGV4dF9tYXRjaGVzX3VubWFy
a19hbGwoRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1Jf
UkVUVVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX0ZSQU1FX1NEX0dF
VF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUsIEVJTkFfRkFMU0UpOwog
Ci0gICAgc2QtPmZyYW1lLT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPnJlbW92ZU1hcmtlcnMoV2Vi
Q29yZTo6RG9jdW1lbnRNYXJrZXI6OlRleHRNYXRjaCk7CisgICAgc21hcnREYXRhLT5mcmFtZS0+
ZG9jdW1lbnQoKS0+bWFya2VycygpLT5yZW1vdmVNYXJrZXJzKFdlYkNvcmU6OkRvY3VtZW50TWFy
a2VyOjpUZXh0TWF0Y2gpOwogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKIEVpbmFfQm9vbCBl
d2tfZnJhbWVfdGV4dF9tYXRjaGVzX2hpZ2hsaWdodF9zZXQoRXZhc19PYmplY3QqIGV3a0ZyYW1l
LCBFaW5hX0Jvb2wgaGlnaGxpZ2h0KQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJO
KGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7Ci0gICAgc2QtPmZyYW1lLT5lZGl0b3IoKS0+
c2V0TWFya2VkVGV4dE1hdGNoZXNBcmVIaWdobGlnaHRlZChoaWdobGlnaHQpOworICAgIEVXS19G
UkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOwor
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmZyYW1lLCBFSU5B
X0ZBTFNFKTsKKyAgICBzbWFydERhdGEtPmZyYW1lLT5lZGl0b3IoKS0+c2V0TWFya2VkVGV4dE1h
dGNoZXNBcmVIaWdobGlnaHRlZChoaWdobGlnaHQpOwogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9
CiAKIEVpbmFfQm9vbCBld2tfZnJhbWVfdGV4dF9tYXRjaGVzX2hpZ2hsaWdodF9nZXQoY29uc3Qg
RXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJO
KGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7Ci0gICAgcmV0dXJuIHNkLT5mcmFtZS0+ZWRp
dG9yKCktPm1hcmtlZFRleHRNYXRjaGVzQXJlSGlnaGxpZ2h0ZWQoKTsKKyAgICBFV0tfRlJBTUVf
U0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5mcmFtZSwgRUlOQV9GQUxT
RSk7CisgICAgcmV0dXJuIHNtYXJ0RGF0YS0+ZnJhbWUtPmVkaXRvcigpLT5tYXJrZWRUZXh0TWF0
Y2hlc0FyZUhpZ2hsaWdodGVkKCk7CiB9CiAKIC8qKgpAQCAtNTE1LDEwICs1MTUsMTAgQEAgc3Rh
dGljIGJvb2wgX2V3a19mcmFtZV9yZWN0X2lzX25lZ2F0aXZlX3ZhbHVlKGNvbnN0IFdlYkNvcmU6
OkludFJlY3QmIHJlY3QpCiAKIEVpbmFfQm9vbCBld2tfZnJhbWVfdGV4dF9tYXRjaGVzX250aF9w
b3NfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgc2l6ZV90IG51bWJlciwgaW50KiB4
LCBpbnQqIHkpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNk
LCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZy
YW1lLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFt
ZSwgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
Tl9WQUwoc21hcnREYXRhLT5mcmFtZSwgRUlOQV9GQUxTRSk7CiAKLSAgICBWZWN0b3I8V2ViQ29y
ZTo6SW50UmVjdD4gaW50UmVjdHMgPSBzZC0+ZnJhbWUtPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+
cmVuZGVyZWRSZWN0c0Zvck1hcmtlcnMoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXI6OlRleHRNYXRj
aCk7CisgICAgVmVjdG9yPFdlYkNvcmU6OkludFJlY3Q+IGludFJlY3RzID0gc21hcnREYXRhLT5m
cmFtZS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5yZW5kZXJlZFJlY3RzRm9yTWFya2VycyhXZWJD
b3JlOjpEb2N1bWVudE1hcmtlcjo6VGV4dE1hdGNoKTsKIAogICAgIC8qIHJlbW92ZSB1c2VsZXNz
IHZhbHVlcyAqLwogICAgIHN0ZDo6cmVtb3ZlX2lmKGludFJlY3RzLmJlZ2luKCksIGludFJlY3Rz
LmVuZCgpLCBfZXdrX2ZyYW1lX3JlY3RfaXNfbmVnYXRpdmVfdmFsdWUpOwpAQCAtNTM3LDI1ICs1
MzcsMjUgQEAgRWluYV9Cb29sIGV3a19mcmFtZV90ZXh0X21hdGNoZXNfbnRoX3Bvc19nZXQoY29u
c3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBzaXplX3QKIAogRWluYV9Cb29sIGV3a19mcmFtZV9z
dG9wKEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JF
VFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOwotICAgIHNkLT5mcmFtZS0+bG9hZGVy
KCktPnN0b3BBbGxMb2FkZXJzKCk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdr
RnJhbWUsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUsIEVJTkFfRkFMU0UpOworICAgIHNtYXJ0RGF0YS0+
ZnJhbWUtPmxvYWRlcigpLT5zdG9wQWxsTG9hZGVycygpOwogICAgIHJldHVybiBFSU5BX1RSVUU7
CiB9CiAKIEVpbmFfQm9vbCBld2tfZnJhbWVfcmVsb2FkKEV2YXNfT2JqZWN0KiBld2tGcmFtZSkK
IHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFM
U0UpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFf
RkFMU0UpOwotICAgIHNkLT5mcmFtZS0+bG9hZGVyKCktPnJlbG9hZCgpOworICAgIEVXS19GUkFN
RV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmZyYW1lLCBFSU5BX0ZB
TFNFKTsKKyAgICBzbWFydERhdGEtPmZyYW1lLT5sb2FkZXIoKS0+cmVsb2FkKCk7CiAgICAgcmV0
dXJuIEVJTkFfVFJVRTsKIH0KIAogRWluYV9Cb29sIGV3a19mcmFtZV9yZWxvYWRfZnVsbChFdmFz
X09iamVjdCogZXdrRnJhbWUpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdr
RnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9W
QUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKLSAgICBzZC0+ZnJhbWUtPmxvYWRlcigpLT5yZWxv
YWQodHJ1ZSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNtYXJ0
RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNt
YXJ0RGF0YS0+ZnJhbWUsIEVJTkFfRkFMU0UpOworICAgIHNtYXJ0RGF0YS0+ZnJhbWUtPmxvYWRl
cigpLT5yZWxvYWQodHJ1ZSk7CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIApAQCAtNTcxLDkg
KzU3MSw5IEBAIEVpbmFfQm9vbCBld2tfZnJhbWVfZm9yd2FyZChFdmFzX09iamVjdCogZXdrRnJh
bWUpCiAKIEVpbmFfQm9vbCBld2tfZnJhbWVfbmF2aWdhdGUoRXZhc19PYmplY3QqIGV3a0ZyYW1l
LCBpbnQgc3RlcHMpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUs
IHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2Qt
PmZyYW1lLCBFSU5BX0ZBTFNFKTsKLSAgICBXZWJDb3JlOjpQYWdlKiBwYWdlID0gc2QtPmZyYW1l
LT5wYWdlKCk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNtYXJ0
RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNt
YXJ0RGF0YS0+ZnJhbWUsIEVJTkFfRkFMU0UpOworICAgIFdlYkNvcmU6OlBhZ2UqIHBhZ2UgPSBz
bWFydERhdGEtPmZyYW1lLT5wYWdlKCk7CiAgICAgaWYgKCFwYWdlLT5jYW5Hb0JhY2tPckZvcndh
cmQoc3RlcHMpKQogICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKICAgICBwYWdlLT5nb0JhY2tP
ckZvcndhcmQoc3RlcHMpOwpAQCAtNTkyLDM5ICs1OTIsMzkgQEAgRWluYV9Cb29sIGV3a19mcmFt
ZV9mb3J3YXJkX3Bvc3NpYmxlKEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIAogRWluYV9Cb29sIGV3
a19mcmFtZV9uYXZpZ2F0ZV9wb3NzaWJsZShFdmFzX09iamVjdCogZXdrRnJhbWUsIGludCBzdGVw
cykKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFf
RkFMU0UpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJ
TkFfRkFMU0UpOwotICAgIFdlYkNvcmU6OlBhZ2UqIHBhZ2UgPSBzZC0+ZnJhbWUtPnBhZ2UoKTsK
KyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRhLCBFSU5B
X0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5m
cmFtZSwgRUlOQV9GQUxTRSk7CisgICAgV2ViQ29yZTo6UGFnZSogcGFnZSA9IHNtYXJ0RGF0YS0+
ZnJhbWUtPnBhZ2UoKTsKICAgICByZXR1cm4gcGFnZS0+Y2FuR29CYWNrT3JGb3J3YXJkKHN0ZXBz
KTsKIH0KIAogZmxvYXQgZXdrX2ZyYW1lX3BhZ2Vfem9vbV9nZXQoY29uc3QgRXZhc19PYmplY3Qq
IGV3a0ZyYW1lKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBz
ZCwgLTEuMCk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwg
LTEuMCk7Ci0gICAgcmV0dXJuIHNkLT5mcmFtZS0+cGFnZVpvb21GYWN0b3IoKTsKKyAgICBFV0tf
RlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRhLCAtMS4wKTsKKyAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5mcmFtZSwgLTEuMCk7Cisg
ICAgcmV0dXJuIHNtYXJ0RGF0YS0+ZnJhbWUtPnBhZ2Vab29tRmFjdG9yKCk7CiB9CiAKIEVpbmFf
Qm9vbCBld2tfZnJhbWVfcGFnZV96b29tX3NldChFdmFzX09iamVjdCogZXdrRnJhbWUsIGZsb2F0
IHBhZ2Vab29tRmFjdG9yKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0Zy
YW1lLCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFM
KHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7Ci0gICAgc2QtPmZyYW1lLT5zZXRQYWdlWm9vbUZhY3Rv
cihwYWdlWm9vbUZhY3Rvcik7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJh
bWUsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUsIEVJTkFfRkFMU0UpOworICAgIHNtYXJ0RGF0YS0+ZnJh
bWUtPnNldFBhZ2Vab29tRmFjdG9yKHBhZ2Vab29tRmFjdG9yKTsKICAgICByZXR1cm4gRUlOQV9U
UlVFOwogfQogCiBmbG9hdCBld2tfZnJhbWVfdGV4dF96b29tX2dldChjb25zdCBFdmFzX09iamVj
dCogZXdrRnJhbWUpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUs
IHNkLCAtMS4wKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1l
LCAtMS4wKTsKLSAgICByZXR1cm4gc2QtPmZyYW1lLT50ZXh0Wm9vbUZhY3RvcigpOworICAgIEVX
S19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzbWFydERhdGEsIC0xLjApOworICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmZyYW1lLCAtMS4wKTsK
KyAgICByZXR1cm4gc21hcnREYXRhLT5mcmFtZS0+dGV4dFpvb21GYWN0b3IoKTsKIH0KIAogRWlu
YV9Cb29sIGV3a19mcmFtZV90ZXh0X3pvb21fc2V0KEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgZmxv
YXQgdGV4dFpvb21GYWN0b3IpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdr
RnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9W
QUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKLSAgICBzZC0+ZnJhbWUtPnNldFRleHRab29tRmFj
dG9yKHRleHRab29tRmFjdG9yKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tG
cmFtZSwgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTl9WQUwoc21hcnREYXRhLT5mcmFtZSwgRUlOQV9GQUxTRSk7CisgICAgc21hcnREYXRhLT5m
cmFtZS0+c2V0VGV4dFpvb21GYWN0b3IodGV4dFpvb21GYWN0b3IpOwogICAgIHJldHVybiBFSU5B
X1RSVUU7CiB9CiAKQEAgLTY0MywxNCArNjQzLDE0IEBAIHZvaWQgZXdrX2ZyYW1lX2hpdF90ZXN0
X2ZyZWUoRXdrX0hpdF9UZXN0KiBoaXRUZXN0KQogCiBFd2tfSGl0X1Rlc3QqIGV3a19mcmFtZV9o
aXRfdGVzdF9uZXcoY29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBpbnQgeCwgaW50IHkpCiB7
Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCAwKTsKLSAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCAwKTsKKyAgICBFV0tfRlJB
TUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRhLCAwKTsKKyAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5mcmFtZSwgMCk7CiAKLSAgICBXZWJD
b3JlOjpGcmFtZVZpZXcqIHZpZXcgPSBzZC0+ZnJhbWUtPnZpZXcoKTsKKyAgICBXZWJDb3JlOjpG
cmFtZVZpZXcqIHZpZXcgPSBzbWFydERhdGEtPmZyYW1lLT52aWV3KCk7CiAgICAgRUlOQV9TQUZF
VFlfT05fTlVMTF9SRVRVUk5fVkFMKHZpZXcsIDApOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOX1ZBTChzZC0+ZnJhbWUtPmNvbnRlbnRSZW5kZXJlcigpLCAwKTsKKyAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5mcmFtZS0+Y29udGVudFJlbmRlcmVy
KCksIDApOwogCi0gICAgV2ViQ29yZTo6SGl0VGVzdFJlc3VsdCByZXN1bHQgPSBzZC0+ZnJhbWUt
PmV2ZW50SGFuZGxlcigpLT5oaXRUZXN0UmVzdWx0QXRQb2ludAorICAgIFdlYkNvcmU6OkhpdFRl
c3RSZXN1bHQgcmVzdWx0ID0gc21hcnREYXRhLT5mcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmhpdFRl
c3RSZXN1bHRBdFBvaW50CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KHZpZXctPndpbmRvd1RvQ29udGVudHMoV2ViQ29yZTo6SW50UG9pbnQoeCwgeSkpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qYWxsb3dTaGFkb3dDb250ZW50Ki8g
ZmFsc2UsIC8qaWdub3JlQ2xpcHBpbmcqLyB0cnVlKTsKIApAQCAtNjU5LDQxICs2NTksNDEgQEAg
RXdrX0hpdF9UZXN0KiBld2tfZnJhbWVfaGl0X3Rlc3RfbmV3KGNvbnN0IEV2YXNfT2JqZWN0KiBl
d2tGcmFtZSwgaW50IHgsIGludCB5KQogICAgIGlmICghcmVzdWx0LmlubmVyTm9kZSgpKQogICAg
ICAgICByZXR1cm4gMDsKIAotICAgIEV3a19IaXRfVGVzdCogaGl0X3Rlc3QgPSBzdGF0aWNfY2Fz
dDxFd2tfSGl0X1Rlc3QqPihjYWxsb2MoMSwgc2l6ZW9mKEV3a19IaXRfVGVzdCkpKTsKLSAgICBp
ZiAoIWhpdF90ZXN0KSB7CisgICAgRXdrX0hpdF9UZXN0KiBoaXRUZXN0ID0gc3RhdGljX2Nhc3Q8
RXdrX0hpdF9UZXN0Kj4oY2FsbG9jKDEsIHNpemVvZihFd2tfSGl0X1Rlc3QpKSk7CisgICAgaWYg
KCFoaXRUZXN0KSB7CiAgICAgICAgIENSSVRJQ0FMKCJDb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5
IGZvciBoaXQgdGVzdC4iKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgaGl0X3Rl
c3QtPnggPSByZXN1bHQucG9pbnQoKS54KCk7Ci0gICAgaGl0X3Rlc3QtPnkgPSByZXN1bHQucG9p
bnQoKS55KCk7CisgICAgaGl0VGVzdC0+eCA9IHJlc3VsdC5wb2ludCgpLngoKTsKKyAgICBoaXRU
ZXN0LT55ID0gcmVzdWx0LnBvaW50KCkueSgpOwogI2lmIDAKICAgICAvLyBGSVhNRQotICAgIGhp
dF90ZXN0LT5ib3VuZGluZ19ib3gueCA9IHJlc3VsdC5ib3VuZGluZ0JveCgpLngoKTsKLSAgICBo
aXRfdGVzdC0+Ym91bmRpbmdfYm94LnkgPSByZXN1bHQuYm91bmRpbmdCb3goKS55KCk7Ci0gICAg
aGl0X3Rlc3QtPmJvdW5kaW5nX2JveC53ID0gcmVzdWx0LmJvdW5kaW5nQm94KCkud2lkdGgoKTsK
LSAgICBoaXRfdGVzdC0+Ym91bmRpbmdfYm94LmggPSByZXN1bHQuYm91bmRpbmdCb3goKS5oZWln
aHQoKTsKKyAgICBoaXRUZXN0LT5ib3VuZGluZ19ib3gueCA9IHJlc3VsdC5ib3VuZGluZ0JveCgp
LngoKTsKKyAgICBoaXRUZXN0LT5ib3VuZGluZ19ib3gueSA9IHJlc3VsdC5ib3VuZGluZ0JveCgp
LnkoKTsKKyAgICBoaXRUZXN0LT5ib3VuZGluZ19ib3gud2lkdGggPSByZXN1bHQuYm91bmRpbmdC
b3goKS53aWR0aCgpOworICAgIGhpdFRlc3QtPmJvdW5kaW5nX2JveC5oZWlnaHQgPSByZXN1bHQu
Ym91bmRpbmdCb3goKS5oZWlnaHQoKTsKICNlbHNlCi0gICAgaGl0X3Rlc3QtPmJvdW5kaW5nX2Jv
eC54ID0gMDsKLSAgICBoaXRfdGVzdC0+Ym91bmRpbmdfYm94LnkgPSAwOwotICAgIGhpdF90ZXN0
LT5ib3VuZGluZ19ib3gudyA9IDA7Ci0gICAgaGl0X3Rlc3QtPmJvdW5kaW5nX2JveC5oID0gMDsK
KyAgICBoaXRUZXN0LT5ib3VuZGluZ19ib3gueCA9IDA7CisgICAgaGl0VGVzdC0+Ym91bmRpbmdf
Ym94LnkgPSAwOworICAgIGhpdFRlc3QtPmJvdW5kaW5nX2JveC53ID0gMDsKKyAgICBoaXRUZXN0
LT5ib3VuZGluZ19ib3guaCA9IDA7CiAjZW5kaWYKIAotICAgIFdlYkNvcmU6OlRleHREaXJlY3Rp
b24gZGlyOwotICAgIGhpdF90ZXN0LT50aXRsZSA9IGVpbmFfc3RyaW5nc2hhcmVfYWRkKHJlc3Vs
dC50aXRsZShkaXIpLnV0ZjgoKS5kYXRhKCkpOwotICAgIGhpdF90ZXN0LT5hbHRlcm5hdGVfdGV4
dCA9IGVpbmFfc3RyaW5nc2hhcmVfYWRkKHJlc3VsdC5hbHREaXNwbGF5U3RyaW5nKCkudXRmOCgp
LmRhdGEoKSk7CisgICAgV2ViQ29yZTo6VGV4dERpcmVjdGlvbiBkaXJlY3Rpb247CisgICAgaGl0
VGVzdC0+dGl0bGUgPSBlaW5hX3N0cmluZ3NoYXJlX2FkZChyZXN1bHQudGl0bGUoZGlyZWN0aW9u
KS51dGY4KCkuZGF0YSgpKTsKKyAgICBoaXRUZXN0LT5hbHRlcm5hdGVfdGV4dCA9IGVpbmFfc3Ry
aW5nc2hhcmVfYWRkKHJlc3VsdC5hbHREaXNwbGF5U3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiAg
ICAgaWYgKHJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKSAmJiByZXN1bHQuaW5uZXJOb25TaGFy
ZWROb2RlKCktPmRvY3VtZW50KCkKICAgICAgICAgJiYgcmVzdWx0LmlubmVyTm9uU2hhcmVkTm9k
ZSgpLT5kb2N1bWVudCgpLT5mcmFtZSgpKQotICAgICAgICBoaXRfdGVzdC0+ZnJhbWUgPSBFV0tQ
cml2YXRlOjpraXRGcmFtZShyZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCktPmRvY3VtZW50KCkt
PmZyYW1lKCkpOworICAgICAgICBoaXRUZXN0LT5mcmFtZSA9IEVXS1ByaXZhdGU6OmtpdEZyYW1l
KHJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSk7CiAKLSAg
ICBoaXRfdGVzdC0+bGluay50ZXh0ID0gZWluYV9zdHJpbmdzaGFyZV9hZGQocmVzdWx0LnRleHRD
b250ZW50KCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgaGl0X3Rlc3QtPmxpbmsudXJsID0gZWluYV9z
dHJpbmdzaGFyZV9hZGQocmVzdWx0LmFic29sdXRlTGlua1VSTCgpLnN0cmluZygpLnV0ZjgoKS5k
YXRhKCkpOwotICAgIGhpdF90ZXN0LT5saW5rLnRpdGxlID0gZWluYV9zdHJpbmdzaGFyZV9hZGQo
cmVzdWx0LnRpdGxlRGlzcGxheVN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotICAgIGhpdF90ZXN0
LT5saW5rLnRhcmdldF9mcmFtZSA9IEVXS1ByaXZhdGU6OmtpdEZyYW1lKHJlc3VsdC50YXJnZXRG
cmFtZSgpKTsKKyAgICBoaXRUZXN0LT5saW5rLnRleHQgPSBlaW5hX3N0cmluZ3NoYXJlX2FkZChy
ZXN1bHQudGV4dENvbnRlbnQoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBoaXRUZXN0LT5saW5rLnVy
bCA9IGVpbmFfc3RyaW5nc2hhcmVfYWRkKHJlc3VsdC5hYnNvbHV0ZUxpbmtVUkwoKS5zdHJpbmco
KS51dGY4KCkuZGF0YSgpKTsKKyAgICBoaXRUZXN0LT5saW5rLnRpdGxlID0gZWluYV9zdHJpbmdz
aGFyZV9hZGQocmVzdWx0LnRpdGxlRGlzcGxheVN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAg
IGhpdFRlc3QtPmxpbmsudGFyZ2V0X2ZyYW1lID0gRVdLUHJpdmF0ZTo6a2l0RnJhbWUocmVzdWx0
LnRhcmdldEZyYW1lKCkpOwogCi0gICAgaGl0X3Rlc3QtPmltYWdlX3VyaSA9IGVpbmFfc3RyaW5n
c2hhcmVfYWRkKHJlc3VsdC5hYnNvbHV0ZUltYWdlVVJMKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEo
KSk7Ci0gICAgaGl0X3Rlc3QtPm1lZGlhX3VyaSA9IGVpbmFfc3RyaW5nc2hhcmVfYWRkKHJlc3Vs
dC5hYnNvbHV0ZU1lZGlhVVJMKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgaGl0VGVz
dC0+aW1hZ2VfdXJpID0gZWluYV9zdHJpbmdzaGFyZV9hZGQocmVzdWx0LmFic29sdXRlSW1hZ2VV
UkwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBoaXRUZXN0LT5tZWRpYV91cmkgPSBl
aW5hX3N0cmluZ3NoYXJlX2FkZChyZXN1bHQuYWJzb2x1dGVNZWRpYVVSTCgpLnN0cmluZygpLnV0
ZjgoKS5kYXRhKCkpOwogCiAgICAgaW50IGNvbnRleHQgPSBFV0tfSElUX1RFU1RfUkVTVUxUX0NP
TlRFWFRfRE9DVU1FTlQ7CiAKQEAgLTcwOCwyOCArNzA4LDI4IEBAIEV3a19IaXRfVGVzdCogZXdr
X2ZyYW1lX2hpdF90ZXN0X25ldyhjb25zdCBFdmFzX09iamVjdCogZXdrRnJhbWUsIGludCB4LCBp
bnQgeSkKICAgICBpZiAocmVzdWx0LmlzQ29udGVudEVkaXRhYmxlKCkpCiAgICAgICAgIGNvbnRl
eHQgfD0gRVdLX0hJVF9URVNUX1JFU1VMVF9DT05URVhUX0VESVRBQkxFOwogCi0gICAgaGl0X3Rl
c3QtPmNvbnRleHQgPSBzdGF0aWNfY2FzdDxFd2tfSGl0X1Rlc3RfUmVzdWx0X0NvbnRleHQ+KGNv
bnRleHQpOworICAgIGhpdFRlc3QtPmNvbnRleHQgPSBzdGF0aWNfY2FzdDxFd2tfSGl0X1Rlc3Rf
UmVzdWx0X0NvbnRleHQ+KGNvbnRleHQpOwogCi0gICAgcmV0dXJuIGhpdF90ZXN0OworICAgIHJl
dHVybiBoaXRUZXN0OwogfQogCiBFaW5hX0Jvb2wKIGV3a19mcmFtZV9zY3JvbGxfYWRkKEV2YXNf
T2JqZWN0KiBld2tGcmFtZSwgaW50IGRlbHRhWCwgaW50IGRlbHRhWSkKIHsKLSAgICBFV0tfRlJB
TUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOwotICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUtPnZpZXcoKSwgRUlOQV9GQUxT
RSk7Ci0gICAgc2QtPmZyYW1lLT52aWV3KCktPnNjcm9sbEJ5KFdlYkNvcmU6OkludFNpemUoZGVs
dGFYLCBkZWx0YVkpKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwg
c21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9W
QUwoc21hcnREYXRhLT5mcmFtZSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUtPnZpZXcoKSwgRUlOQV9GQUxTRSk7CisgICAg
c21hcnREYXRhLT5mcmFtZS0+dmlldygpLT5zY3JvbGxCeShXZWJDb3JlOjpJbnRTaXplKGRlbHRh
WCwgZGVsdGFZKSk7CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAogRWluYV9Cb29sCiBld2tf
ZnJhbWVfc2Nyb2xsX3NldChFdmFzX09iamVjdCogZXdrRnJhbWUsIGludCB4LCBpbnQgeSkKIHsK
LSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0Up
OwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFM
U0UpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUtPnZpZXco
KSwgRUlOQV9GQUxTRSk7Ci0gICAgc2QtPmZyYW1lLT52aWV3KCktPnNldFNjcm9sbFBvc2l0aW9u
KFdlYkNvcmU6OkludFBvaW50KHgsIHkpKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVS
Tihld2tGcmFtZSwgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5mcmFtZSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUtPnZpZXcoKSwgRUlOQV9G
QUxTRSk7CisgICAgc21hcnREYXRhLT5mcmFtZS0+dmlldygpLT5zZXRTY3JvbGxQb3NpdGlvbihX
ZWJDb3JlOjpJbnRQb2ludCh4LCB5KSk7CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIApAQCAt
NzQwLDEwICs3NDAsMTAgQEAgZXdrX2ZyYW1lX3Njcm9sbF9zaXplX2dldChjb25zdCBFdmFzX09i
amVjdCogZXdrRnJhbWUsIGludCogd2lkdGgsIGludCogaGVpZ2h0KQogICAgICAgICAqd2lkdGgg
PSAwOwogICAgIGlmIChoZWlnaHQpCiAgICAgICAgICpoZWlnaHQgPSAwOwotICAgIEVXS19GUkFN
RV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7Ci0gICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZS0+dmlldygpLCBFSU5BX0ZBTFNF
KTsKLSAgICBXZWJDb3JlOjpJbnRQb2ludCBwb2ludCA9IHNkLT5mcmFtZS0+dmlldygpLT5tYXhp
bXVtU2Nyb2xsUG9zaXRpb24oKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tG
cmFtZSwgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTl9WQUwoc21hcnREYXRhLT5mcmFtZSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUtPnZpZXcoKSwgRUlOQV9GQUxTRSk7
CisgICAgV2ViQ29yZTo6SW50UG9pbnQgcG9pbnQgPSBzbWFydERhdGEtPmZyYW1lLT52aWV3KCkt
Pm1heGltdW1TY3JvbGxQb3NpdGlvbigpOwogICAgIGlmICh3aWR0aCkKICAgICAgICAgKndpZHRo
ID0gcG9pbnQueCgpOwogICAgIGlmIChoZWlnaHQpCkBAIC03NTgsMTAgKzc1OCwxMCBAQCBld2tf
ZnJhbWVfc2Nyb2xsX3Bvc19nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBpbnQqIHgs
IGludCogeSkKICAgICAgICAgKnggPSAwOwogICAgIGlmICh5KQogICAgICAgICAqeSA9IDA7Ci0g
ICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsK
LSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNF
KTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLT52aWV3KCks
IEVJTkFfRkFMU0UpOwotICAgIFdlYkNvcmU6OkludFBvaW50IHBvcyA9IHNkLT5mcmFtZS0+dmll
dygpLT5zY3JvbGxQb3NpdGlvbigpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3
a0ZyYW1lLCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOX1ZBTChzbWFydERhdGEtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5mcmFtZS0+dmlldygpLCBFSU5BX0ZBTFNF
KTsKKyAgICBXZWJDb3JlOjpJbnRQb2ludCBwb3MgPSBzbWFydERhdGEtPmZyYW1lLT52aWV3KCkt
PnNjcm9sbFBvc2l0aW9uKCk7CiAgICAgaWYgKHgpCiAgICAgICAgICp4ID0gcG9zLngoKTsKICAg
ICBpZiAoeSkKQEAgLTc3OSwxMCArNzc5LDEwIEBAIEVpbmFfQm9vbCBld2tfZnJhbWVfdmlzaWJs
ZV9jb250ZW50X2dlb21ldHJ5X2dldChjb25zdCBFdmFzX09iamVjdCogZXdrRnJhbWUsIEVpCiAg
ICAgICAgICp3aWR0aCA9IDA7CiAgICAgaWYgKGhlaWdodCkKICAgICAgICAgKmhlaWdodCA9IDA7
Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNF
KTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZB
TFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLT52aWV3
KCksIEVJTkFfRkFMU0UpOwotICAgIFdlYkNvcmU6OkludFJlY3QgcmVjdCA9IHNkLT5mcmFtZS0+
dmlldygpLT52aXNpYmxlQ29udGVudFJlY3QoaW5jbHVkZVNjcm9sbGJhcnMpOworICAgIEVXS19G
UkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOwor
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmZyYW1lLCBFSU5B
X0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5m
cmFtZS0+dmlldygpLCBFSU5BX0ZBTFNFKTsKKyAgICBXZWJDb3JlOjpJbnRSZWN0IHJlY3QgPSBz
bWFydERhdGEtPmZyYW1lLT52aWV3KCktPnZpc2libGVDb250ZW50UmVjdChpbmNsdWRlU2Nyb2xs
YmFycyk7CiAgICAgaWYgKHgpCiAgICAgICAgICp4ID0gcmVjdC54KCk7CiAgICAgaWYgKHkpCkBA
IC03OTYsMjYgKzc5NiwyNiBAQCBFaW5hX0Jvb2wgZXdrX2ZyYW1lX3Zpc2libGVfY29udGVudF9n
ZW9tZXRyeV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBFaQogCiBFaW5hX0Jvb2wg
ZXdrX2ZyYW1lX3BhaW50X2Z1bGxfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsK
LSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0Up
OwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFM
U0UpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUtPnZpZXco
KSwgRUlOQV9GQUxTRSk7Ci0gICAgcmV0dXJuIHNkLT5mcmFtZS0+dmlldygpLT5wYWludHNFbnRp
cmVDb250ZW50cygpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBz
bWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZB
TChzbWFydERhdGEtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTl9WQUwoc21hcnREYXRhLT5mcmFtZS0+dmlldygpLCBFSU5BX0ZBTFNFKTsKKyAgICBy
ZXR1cm4gc21hcnREYXRhLT5mcmFtZS0+dmlldygpLT5wYWludHNFbnRpcmVDb250ZW50cygpOwog
fQogCiB2b2lkIGV3a19mcmFtZV9wYWludF9mdWxsX3NldChFdmFzX09iamVjdCogZXdrRnJhbWUs
IEVpbmFfQm9vbCBmbGFnKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0Zy
YW1lLCBzZCk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmZyYW1lKTsKLSAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+ZnJhbWUtPnZpZXcoKSk7Ci0gICAgc2Qt
PmZyYW1lLT52aWV3KCktPnNldFBhaW50c0VudGlyZUNvbnRlbnRzKGZsYWcpOworICAgIEVXS19G
UkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzbWFydERhdGEpOworICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+ZnJhbWUpOworICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+ZnJhbWUtPnZpZXcoKSk7CisgICAgc21hcnREYXRhLT5m
cmFtZS0+dmlldygpLT5zZXRQYWludHNFbnRpcmVDb250ZW50cyhmbGFnKTsKIH0KIAogRWluYV9C
b29sIGV3a19mcmFtZV9mZWVkX2ZvY3VzX2luKEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsKLSAg
ICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOwot
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0Up
OwotICAgIFdlYkNvcmU6OkZvY3VzQ29udHJvbGxlciogYyA9IHNkLT5mcmFtZS0+cGFnZSgpLT5m
b2N1c0NvbnRyb2xsZXIoKTsKLSAgICBjLT5zZXRGb2N1c2VkRnJhbWUoc2QtPmZyYW1lKTsKKyAg
ICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRhLCBFSU5BX0ZB
TFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5mcmFt
ZSwgRUlOQV9GQUxTRSk7CisgICAgV2ViQ29yZTo6Rm9jdXNDb250cm9sbGVyKiBjID0gc21hcnRE
YXRhLT5mcmFtZS0+cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKTsKKyAgICBjLT5zZXRGb2N1c2Vk
RnJhbWUoc21hcnREYXRhLT5mcmFtZSk7CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIApAQCAt
ODI4LDg3ICs4MjgsODcgQEAgRWluYV9Cb29sIGV3a19mcmFtZV9mZWVkX2ZvY3VzX291dChFdmFz
X09iamVjdCogZXdrRnJhbWUpCiAKIEVpbmFfQm9vbCBld2tfZnJhbWVfZmVlZF9tb3VzZV93aGVl
bChFdmFzX09iamVjdCogZXdrRnJhbWUsIGNvbnN0IEV2YXNfRXZlbnRfTW91c2VfV2hlZWwqIHdo
ZWVsRXZlbnQpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNk
LCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZy
YW1lLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFt
ZSwgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
Tl9WQUwoc21hcnREYXRhLT5mcmFtZSwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk5fVkFMKHdoZWVsRXZlbnQsIEVJTkFfRkFMU0UpOwogCi0gICAgV2ViQ29yZTo6
RnJhbWVWaWV3KiB2aWV3ID0gc2QtPmZyYW1lLT52aWV3KCk7CisgICAgV2ViQ29yZTo6RnJhbWVW
aWV3KiB2aWV3ID0gc21hcnREYXRhLT5mcmFtZS0+dmlldygpOwogICAgIERCRygiZXdrRnJhbWU9
JXAsIHZpZXc9JXAsIGRpcmVjdGlvbj0lZCwgej0lZCwgcG9zPSVkLCVkIiwKICAgICAgICAgZXdr
RnJhbWUsIHZpZXcsIHdoZWVsRXZlbnQtPmRpcmVjdGlvbiwgd2hlZWxFdmVudC0+eiwgd2hlZWxF
dmVudC0+Y2FudmFzLngsIHdoZWVsRXZlbnQtPmNhbnZhcy55KTsKICAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTl9WQUwodmlldywgRUlOQV9GQUxTRSk7CiAKICAgICBXZWJDb3JlOjpQbGF0
Zm9ybVdoZWVsRXZlbnQgZXZlbnQod2hlZWxFdmVudCk7Ci0gICAgcmV0dXJuIHNkLT5mcmFtZS0+
ZXZlbnRIYW5kbGVyKCktPmhhbmRsZVdoZWVsRXZlbnQoZXZlbnQpOworICAgIHJldHVybiBzbWFy
dERhdGEtPmZyYW1lLT5ldmVudEhhbmRsZXIoKS0+aGFuZGxlV2hlZWxFdmVudChldmVudCk7CiB9
CiAKIEVpbmFfQm9vbCBld2tfZnJhbWVfZmVlZF9tb3VzZV9kb3duKEV2YXNfT2JqZWN0KiBld2tG
cmFtZSwgY29uc3QgRXZhc19FdmVudF9Nb3VzZV9Eb3duKiBkb3duRXZlbnQpCiB7Ci0gICAgRVdL
X0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKKyAg
ICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRhLCBFSU5BX0ZB
TFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5mcmFt
ZSwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGRvd25F
dmVudCwgRUlOQV9GQUxTRSk7CiAKLSAgICBXZWJDb3JlOjpGcmFtZVZpZXcqIHZpZXcgPSBzZC0+
ZnJhbWUtPnZpZXcoKTsKKyAgICBXZWJDb3JlOjpGcmFtZVZpZXcqIHZpZXcgPSBzbWFydERhdGEt
PmZyYW1lLT52aWV3KCk7CiAgICAgREJHKCJld2tGcmFtZT0lcCwgdmlldz0lcCwgYnV0dG9uPSVk
LCBwb3M9JWQsJWQiLAogICAgICAgICBld2tGcmFtZSwgdmlldywgZG93bkV2ZW50LT5idXR0b24s
IGRvd25FdmVudC0+Y2FudmFzLngsIGRvd25FdmVudC0+Y2FudmFzLnkpOwogICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOX1ZBTCh2aWV3LCBFSU5BX0ZBTFNFKTsKIAogICAgIEV2YXNfQ29v
cmQgeCwgeTsKLSAgICBldmFzX29iamVjdF9nZW9tZXRyeV9nZXQoc2QtPnZpZXcsICZ4LCAmeSwg
MCwgMCk7CisgICAgZXZhc19vYmplY3RfZ2VvbWV0cnlfZ2V0KHNtYXJ0RGF0YS0+dmlldywgJngs
ICZ5LCAwLCAwKTsKIAogICAgIFdlYkNvcmU6OlBsYXRmb3JtTW91c2VFdmVudCBldmVudChkb3du
RXZlbnQsIFdlYkNvcmU6OkludFBvaW50KHgsIHkpKTsKLSAgICByZXR1cm4gc2QtPmZyYW1lLT5l
dmVudEhhbmRsZXIoKS0+aGFuZGxlTW91c2VQcmVzc0V2ZW50KGV2ZW50KTsKKyAgICByZXR1cm4g
c21hcnREYXRhLT5mcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmhhbmRsZU1vdXNlUHJlc3NFdmVudChl
dmVudCk7CiB9CiAKIEVpbmFfQm9vbCBld2tfZnJhbWVfZmVlZF9tb3VzZV91cChFdmFzX09iamVj
dCogZXdrRnJhbWUsIGNvbnN0IEV2YXNfRXZlbnRfTW91c2VfVXAqIHVwRXZlbnQpCiB7Ci0gICAg
RVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsKLSAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsK
KyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRhLCBFSU5B
X0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5m
cmFtZSwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHVw
RXZlbnQsIEVJTkFfRkFMU0UpOwogCi0gICAgV2ViQ29yZTo6RnJhbWVWaWV3KiB2aWV3ID0gc2Qt
PmZyYW1lLT52aWV3KCk7CisgICAgV2ViQ29yZTo6RnJhbWVWaWV3KiB2aWV3ID0gc21hcnREYXRh
LT5mcmFtZS0+dmlldygpOwogICAgIERCRygiZXdrRnJhbWU9JXAsIHZpZXc9JXAsIGJ1dHRvbj0l
ZCwgcG9zPSVkLCVkIiwKICAgICAgICAgZXdrRnJhbWUsIHZpZXcsIHVwRXZlbnQtPmJ1dHRvbiwg
dXBFdmVudC0+Y2FudmFzLngsIHVwRXZlbnQtPmNhbnZhcy55KTsKICAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTl9WQUwodmlldywgRUlOQV9GQUxTRSk7CiAKICAgICBFdmFzX0Nvb3JkIHgs
IHk7Ci0gICAgZXZhc19vYmplY3RfZ2VvbWV0cnlfZ2V0KHNkLT52aWV3LCAmeCwgJnksIDAsIDAp
OworICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldChzbWFydERhdGEtPnZpZXcsICZ4LCAmeSwg
MCwgMCk7CiAKICAgICBXZWJDb3JlOjpQbGF0Zm9ybU1vdXNlRXZlbnQgZXZlbnQodXBFdmVudCwg
V2ViQ29yZTo6SW50UG9pbnQoeCwgeSkpOwotICAgIHJldHVybiBzZC0+ZnJhbWUtPmV2ZW50SGFu
ZGxlcigpLT5oYW5kbGVNb3VzZVJlbGVhc2VFdmVudChldmVudCk7CisgICAgcmV0dXJuIHNtYXJ0
RGF0YS0+ZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5oYW5kbGVNb3VzZVJlbGVhc2VFdmVudChldmVu
dCk7CiB9CiAKIEVpbmFfQm9vbCBld2tfZnJhbWVfZmVlZF9tb3VzZV9tb3ZlKEV2YXNfT2JqZWN0
KiBld2tGcmFtZSwgY29uc3QgRXZhc19FdmVudF9Nb3VzZV9Nb3ZlKiBtb3ZlRXZlbnQpCiB7Ci0g
ICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsK
LSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNF
KTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRhLCBF
SU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRh
LT5mcmFtZSwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFM
KG1vdmVFdmVudCwgRUlOQV9GQUxTRSk7CiAKLSAgICBXZWJDb3JlOjpGcmFtZVZpZXcqIHZpZXcg
PSBzZC0+ZnJhbWUtPnZpZXcoKTsKKyAgICBXZWJDb3JlOjpGcmFtZVZpZXcqIHZpZXcgPSBzbWFy
dERhdGEtPmZyYW1lLT52aWV3KCk7CiAgICAgREJHKCJld2tGcmFtZT0lcCwgdmlldz0lcCwgcG9z
OiBvbGQ9JWQsJWQsIG5ldz0lZCwlZCwgYnV0dG9ucz0lZCIsCiAgICAgICAgIGV3a0ZyYW1lLCB2
aWV3LCBtb3ZlRXZlbnQtPmN1ci5jYW52YXMueCwgbW92ZUV2ZW50LT5jdXIuY2FudmFzLnksCiAg
ICAgICAgIG1vdmVFdmVudC0+cHJldi5jYW52YXMueCwgbW92ZUV2ZW50LT5wcmV2LmNhbnZhcy55
LCBtb3ZlRXZlbnQtPmJ1dHRvbnMpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZB
TCh2aWV3LCBFSU5BX0ZBTFNFKTsKIAogICAgIEV2YXNfQ29vcmQgeCwgeTsKLSAgICBldmFzX29i
amVjdF9nZW9tZXRyeV9nZXQoc2QtPnZpZXcsICZ4LCAmeSwgMCwgMCk7CisgICAgZXZhc19vYmpl
Y3RfZ2VvbWV0cnlfZ2V0KHNtYXJ0RGF0YS0+dmlldywgJngsICZ5LCAwLCAwKTsKIAogICAgIFdl
YkNvcmU6OlBsYXRmb3JtTW91c2VFdmVudCBldmVudChtb3ZlRXZlbnQsIFdlYkNvcmU6OkludFBv
aW50KHgsIHkpKTsKLSAgICByZXR1cm4gc2QtPmZyYW1lLT5ldmVudEhhbmRsZXIoKS0+bW91c2VN
b3ZlZChldmVudCk7CisgICAgcmV0dXJuIHNtYXJ0RGF0YS0+ZnJhbWUtPmV2ZW50SGFuZGxlcigp
LT5tb3VzZU1vdmVkKGV2ZW50KTsKIH0KIAogRWluYV9Cb29sIGV3a19mcmFtZV9mZWVkX3RvdWNo
X2V2ZW50KEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgRXdrX1RvdWNoX0V2ZW50X1R5cGUgYWN0aW9u
LCBFaW5hX0xpc3QqIHBvaW50cywgaW50IG1ldGFTdGF0ZSkKIHsKLSAgICBFaW5hX0Jvb2wgcmV0
ID0gRUlOQV9GQUxTRTsKKyAgICBFaW5hX0Jvb2wgcmVzdWx0ID0gRUlOQV9GQUxTRTsKIAogI2lm
IEVOQUJMRShUT1VDSF9FVkVOVFMpCiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFM
KHBvaW50cywgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVChld2tGcmFtZSwgc2Qp
OworICAgIEVXS19GUkFNRV9TRF9HRVQoZXdrRnJhbWUsIHNtYXJ0RGF0YSk7CiAKLSAgICBpZiAo
IXNkIHx8ICFzZC0+ZnJhbWUgfHwgIWV3a192aWV3X25lZWRfdG91Y2hfZXZlbnRzX2dldChzZC0+
dmlldykpCisgICAgaWYgKCFzbWFydERhdGEgfHwgIXNtYXJ0RGF0YS0+ZnJhbWUgfHwgIWV3a192
aWV3X25lZWRfdG91Y2hfZXZlbnRzX2dldChzbWFydERhdGEtPnZpZXcpKQogICAgICAgICByZXR1
cm4gRUlOQV9GQUxTRTsKIAogICAgIEV2YXNfQ29vcmQgeCwgeTsKLSAgICBldmFzX29iamVjdF9n
ZW9tZXRyeV9nZXQoc2QtPnZpZXcsICZ4LCAmeSwgMCwgMCk7CisgICAgZXZhc19vYmplY3RfZ2Vv
bWV0cnlfZ2V0KHNtYXJ0RGF0YS0+dmlldywgJngsICZ5LCAwLCAwKTsKIAogICAgIFdlYkNvcmU6
OlRvdWNoRXZlbnRUeXBlIHR5cGUgPSBXZWJDb3JlOjpUb3VjaFN0YXJ0OwogICAgIHN3aXRjaCAo
YWN0aW9uKSB7CkBAIC05MjgsMTAgKzkyOCwxMCBAQCBFaW5hX0Jvb2wgZXdrX2ZyYW1lX2ZlZWRf
dG91Y2hfZXZlbnQoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBFd2tfVG91Y2hfRXZlbnRfVHlwZQog
ICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKICAgICB9CiAKLSAgICBXZWJDb3JlOjpQbGF0Zm9y
bVRvdWNoRXZlbnQgdGUocG9pbnRzLCBXZWJDb3JlOjpJbnRQb2ludCh4LCB5KSwgdHlwZSwgbWV0
YVN0YXRlKTsKLSAgICByZXQgPSBzZC0+ZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5oYW5kbGVUb3Vj
aEV2ZW50KHRlKTsKKyAgICBXZWJDb3JlOjpQbGF0Zm9ybVRvdWNoRXZlbnQgdG91Y2hFdmVudChw
b2ludHMsIFdlYkNvcmU6OkludFBvaW50KHgsIHkpLCB0eXBlLCBtZXRhU3RhdGUpOworICAgIHJl
c3VsdCA9IHNtYXJ0RGF0YS0+ZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5oYW5kbGVUb3VjaEV2ZW50
KHRvdWNoRXZlbnQpOwogI2VuZGlmCi0gICAgcmV0dXJuIHJldDsKKyAgICByZXR1cm4gcmVzdWx0
OwogfQogCiBzdGF0aWMgaW5saW5lIEVpbmFfQm9vbCBfZXdrX2ZyYW1lX2hhbmRsZV9rZXlfc2Ny
b2xsaW5nKFdlYkNvcmU6OkZyYW1lKiBmcmFtZSwgY29uc3QgV2ViQ29yZTo6UGxhdGZvcm1LZXli
b2FyZEV2ZW50JiBrZXlFdmVudCkKQEAgLTEwMDAsMzkgKzEwMDAsMzkgQEAgc3RhdGljIGlubGlu
ZSBFaW5hX0Jvb2wgX2V3a19mcmFtZV9oYW5kbGVfa2V5X3Njcm9sbGluZyhXZWJDb3JlOjpGcmFt
ZSogZnJhbWUsIGMKIAogRWluYV9Cb29sIGV3a19mcmFtZV9mZWVkX2tleV9kb3duKEV2YXNfT2Jq
ZWN0KiBld2tGcmFtZSwgY29uc3QgRXZhc19FdmVudF9LZXlfRG93biogZG93bkV2ZW50KQogewot
ICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7
Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxT
RSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSwg
RUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0
YS0+ZnJhbWUsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZB
TChkb3duRXZlbnQsIEVJTkFfRkFMU0UpOwogCiAgICAgREJHKCJld2tGcmFtZT0lcCBrZXluYW1l
PSVzIChrZXk9JXMsIHN0cmluZz0lcykiLAogICAgICAgICBld2tGcmFtZSwgZG93bkV2ZW50LT5r
ZXluYW1lLCBkb3duRXZlbnQtPmtleSA/IGRvd25FdmVudC0+a2V5IDogIiIsIGRvd25FdmVudC0+
c3RyaW5nID8gZG93bkV2ZW50LT5zdHJpbmcgOiAiIik7CiAKICAgICBXZWJDb3JlOjpQbGF0Zm9y
bUtleWJvYXJkRXZlbnQgZXZlbnQoZG93bkV2ZW50KTsKLSAgICBpZiAoc2QtPmZyYW1lLT5ldmVu
dEhhbmRsZXIoKS0+a2V5RXZlbnQoZXZlbnQpKQorICAgIGlmIChzbWFydERhdGEtPmZyYW1lLT5l
dmVudEhhbmRsZXIoKS0+a2V5RXZlbnQoZXZlbnQpKQogICAgICAgICByZXR1cm4gRUlOQV9UUlVF
OwogCi0gICAgcmV0dXJuIF9ld2tfZnJhbWVfaGFuZGxlX2tleV9zY3JvbGxpbmcoc2QtPmZyYW1l
LCBldmVudCk7CisgICAgcmV0dXJuIF9ld2tfZnJhbWVfaGFuZGxlX2tleV9zY3JvbGxpbmcoc21h
cnREYXRhLT5mcmFtZSwgZXZlbnQpOwogfQogCiBFaW5hX0Jvb2wgZXdrX2ZyYW1lX2ZlZWRfa2V5
X3VwKEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgY29uc3QgRXZhc19FdmVudF9LZXlfVXAqIHVwRXZl
bnQpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5B
X0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBF
SU5BX0ZBTFNFKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21h
cnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwo
c21hcnREYXRhLT5mcmFtZSwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk5fVkFMKHVwRXZlbnQsIEVJTkFfRkFMU0UpOwogCiAgICAgREJHKCJld2tGcmFtZT0lcCBr
ZXluYW1lPSVzIChrZXk9JXMsIHN0cmluZz0lcykiLAogICAgICAgICBld2tGcmFtZSwgdXBFdmVu
dC0+a2V5bmFtZSwgdXBFdmVudC0+a2V5ID8gdXBFdmVudC0+a2V5IDogIiIsIHVwRXZlbnQtPnN0
cmluZyA/IHVwRXZlbnQtPnN0cmluZyA6ICIiKTsKIAogICAgIFdlYkNvcmU6OlBsYXRmb3JtS2V5
Ym9hcmRFdmVudCBldmVudCh1cEV2ZW50KTsKLSAgICByZXR1cm4gc2QtPmZyYW1lLT5ldmVudEhh
bmRsZXIoKS0+a2V5RXZlbnQoZXZlbnQpOworICAgIHJldHVybiBzbWFydERhdGEtPmZyYW1lLT5l
dmVudEhhbmRsZXIoKS0+a2V5RXZlbnQoZXZlbnQpOwogfQogCiBFd2tfVGV4dF9TZWxlY3Rpb25f
VHlwZSBld2tfZnJhbWVfdGV4dF9zZWxlY3Rpb25fdHlwZV9nZXQoY29uc3QgRXZhc19PYmplY3Qq
IGV3a0ZyYW1lKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBz
ZCwgRVdLX1RFWFRfU0VMRUNUSU9OX05PTkUpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOX1ZBTChzZC0+ZnJhbWUsIEVXS19URVhUX1NFTEVDVElPTl9OT05FKTsKKyAgICBFV0tfRlJB
TUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRhLCBFV0tfVEVYVF9TRUxFQ1RJ
T05fTk9ORSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+
ZnJhbWUsIEVXS19URVhUX1NFTEVDVElPTl9OT05FKTsKIAotICAgIFdlYkNvcmU6OkZyYW1lU2Vs
ZWN0aW9uKiBjb250cm9sbGVyID0gc2QtPmZyYW1lLT5zZWxlY3Rpb24oKTsKKyAgICBXZWJDb3Jl
OjpGcmFtZVNlbGVjdGlvbiogY29udHJvbGxlciA9IHNtYXJ0RGF0YS0+ZnJhbWUtPnNlbGVjdGlv
bigpOwogICAgIGlmICghY29udHJvbGxlcikKICAgICAgICAgcmV0dXJuIEVXS19URVhUX1NFTEVD
VElPTl9OT05FOwogCkBAIC0xMDc1LDE4ICsxMDc1LDE4IEBAIEV2YXNfT2JqZWN0KiBld2tfZnJh
bWVfYWRkKEV2YXMqIGNhbnZhcykKICAqLwogRWluYV9Cb29sIGV3a19mcmFtZV9pbml0KEV2YXNf
T2JqZWN0KiBld2tGcmFtZSwgRXZhc19PYmplY3QqIHZpZXcsIFdlYkNvcmU6OkZyYW1lKiBmcmFt
ZSkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFf
RkFMU0UpOwotICAgIGlmICghc2QtPmZyYW1lKSB7Ci0gICAgICAgIFdlYkNvcmU6OkZyYW1lTG9h
ZGVyQ2xpZW50RWZsKiBmbGMgPSBfZXdrX2ZyYW1lX2xvYWRlcl9lZmxfZ2V0KGZyYW1lKTsKLSAg
ICAgICAgZmxjLT5zZXRXZWJGcmFtZShld2tGcmFtZSk7Ci0gICAgICAgIHNkLT5mcmFtZSA9IGZy
YW1lOwotICAgICAgICBzZC0+dmlldyA9IHZpZXc7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9S
RVRVUk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgaWYgKCFzbWFydERh
dGEtPmZyYW1lKSB7CisgICAgICAgIFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50RWZsKiBmcmFt
ZUxvYWRlckNsaWVudCA9IF9ld2tfZnJhbWVfbG9hZGVyX2VmbF9nZXQoZnJhbWUpOworICAgICAg
ICBmcmFtZUxvYWRlckNsaWVudC0+c2V0V2ViRnJhbWUoZXdrRnJhbWUpOworICAgICAgICBzbWFy
dERhdGEtPmZyYW1lID0gZnJhbWU7CisgICAgICAgIHNtYXJ0RGF0YS0+dmlldyA9IHZpZXc7CiAg
ICAgICAgIGZyYW1lLT5pbml0KCk7CiAgICAgICAgIHJldHVybiBFSU5BX1RSVUU7CiAgICAgfQog
CiAgICAgRVJSKCJmcmFtZSAlcCBhbHJlYWR5IHNldCBmb3IgJXAsIGlnbm9yZWQgbmV3ICVwIiwK
LSAgICAgICAgc2QtPmZyYW1lLCBld2tGcmFtZSwgZnJhbWUpOworICAgICAgICBzbWFydERhdGEt
PmZyYW1lLCBld2tGcmFtZSwgZnJhbWUpOwogICAgIHJldHVybiBFSU5BX0ZBTFNFOwogfQogCkBA
IC0xMDk3LDQ0ICsxMDk3LDQ0IEBAIEVpbmFfQm9vbCBld2tfZnJhbWVfaW5pdChFdmFzX09iamVj
dCogZXdrRnJhbWUsIEV2YXNfT2JqZWN0KiB2aWV3LCBXZWJDb3JlOjpGcmFtCiAgKi8KIEVpbmFf
Qm9vbCBld2tfZnJhbWVfY2hpbGRfYWRkKEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgV1RGOjpQYXNz
UmVmUHRyPFdlYkNvcmU6OkZyYW1lPiBjaGlsZCwgY29uc3QgV1RGOjpTdHJpbmcmIG5hbWUsIGNv
bnN0IFdlYkNvcmU6OktVUkwmIHVybCwgY29uc3QgV1RGOjpTdHJpbmcmIHJlZmVycmVyKQogewot
ICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgMCk7Ci0gICAgY2hh
ciBidWZbMjU2XTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21h
cnREYXRhLCAwKTsKKyAgICBjaGFyIGJ1ZmZlclsyNTZdOwogICAgIEV2YXNfT2JqZWN0KiBmcmFt
ZTsKLSAgICBXZWJDb3JlOjpGcmFtZSogY2Y7CisgICAgV2ViQ29yZTo6RnJhbWUqIGNvcmVGcmFt
ZTsKIAotICAgIGZyYW1lID0gZXdrX2ZyYW1lX2FkZChzZC0+YmFzZS5ldmFzKTsKKyAgICBmcmFt
ZSA9IGV3a19mcmFtZV9hZGQoc21hcnREYXRhLT5iYXNlLmV2YXMpOwogICAgIGlmICghZnJhbWUp
IHsKICAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIGV3a19mcmFtZSBvYmplY3QuIik7CiAg
ICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwogICAgIH0KIAotICAgIGNmID0gY2hpbGQuZ2V0KCk7
Ci0gICAgaWYgKGNmLT50cmVlKCkpCi0gICAgICAgIGNmLT50cmVlKCktPnNldE5hbWUobmFtZSk7
CisgICAgY29yZUZyYW1lID0gY2hpbGQuZ2V0KCk7CisgICAgaWYgKGNvcmVGcmFtZS0+dHJlZSgp
KQorICAgICAgICBjb3JlRnJhbWUtPnRyZWUoKS0+c2V0TmFtZShuYW1lKTsKICAgICBlbHNlCiAg
ICAgICAgIEVSUigibm8gdHJlZSBmb3IgY2hpbGQgb2JqZWN0Iik7Ci0gICAgc2QtPmZyYW1lLT50
cmVlKCktPmFwcGVuZENoaWxkKGNoaWxkKTsKKyAgICBzbWFydERhdGEtPmZyYW1lLT50cmVlKCkt
PmFwcGVuZENoaWxkKGNoaWxkKTsKIAotICAgIGlmICghZXdrX2ZyYW1lX2luaXQoZnJhbWUsIHNk
LT52aWV3LCBjZikpIHsKKyAgICBpZiAoIWV3a19mcmFtZV9pbml0KGZyYW1lLCBzbWFydERhdGEt
PnZpZXcsIGNvcmVGcmFtZSkpIHsKICAgICAgICAgZXZhc19vYmplY3RfZGVsKGZyYW1lKTsKICAg
ICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CiAgICAgfQotICAgIHNucHJpbnRmKGJ1Ziwgc2l6ZW9m
KGJ1ZiksICJFV0tfRnJhbWU6Y2hpbGQvJXMiLCBuYW1lLnV0ZjgoKS5kYXRhKCkpOwotICAgIGV2
YXNfb2JqZWN0X25hbWVfc2V0KGZyYW1lLCBidWYpOworICAgIHNucHJpbnRmKGJ1ZmZlciwgc2l6
ZW9mKGJ1ZmZlciksICJFV0tfRnJhbWU6Y2hpbGQvJXMiLCBuYW1lLnV0ZjgoKS5kYXRhKCkpOwor
ICAgIGV2YXNfb2JqZWN0X25hbWVfc2V0KGZyYW1lLCBidWZmZXIpOwogICAgIGV2YXNfb2JqZWN0
X3NtYXJ0X21lbWJlcl9hZGQoZnJhbWUsIGV3a0ZyYW1lKTsKICAgICBldmFzX29iamVjdF9zaG93
KGZyYW1lKTsKIAogICAgIC8vIFRoZSBjcmVhdGlvbiBvZiB0aGUgZnJhbWUgbWF5IGhhdmUgcnVu
IGFyYml0cmFyeSBKYXZhU2NyaXB0IHRoYXQgcmVtb3ZlZCBpdCBmcm9tIHRoZSBwYWdlIGFscmVh
ZHkuCi0gICAgaWYgKCFjZi0+cGFnZSgpKSB7CisgICAgaWYgKCFjb3JlRnJhbWUtPnBhZ2UoKSkg
ewogICAgICAgICBldmFzX29iamVjdF9kZWwoZnJhbWUpOwogICAgICAgICByZXR1cm4gRUlOQV9U
UlVFOwogICAgIH0KIAotICAgIHNkLT5mcmFtZS0+bG9hZGVyKCktPmxvYWRVUkxJbnRvQ2hpbGRG
cmFtZSh1cmwsIHJlZmVycmVyLCBjZik7CisgICAgc21hcnREYXRhLT5mcmFtZS0+bG9hZGVyKCkt
PmxvYWRVUkxJbnRvQ2hpbGRGcmFtZSh1cmwsIHJlZmVycmVyLCBjb3JlRnJhbWUpOwogCiAgICAg
Ly8gVGhlIGZyYW1lJ3Mgb25sb2FkIGhhbmRsZXIgbWF5IGhhdmUgcmVtb3ZlZCBpdCBmcm9tIHRo
ZSBkb2N1bWVudC4KICAgICAvLyBTZWUgZmFzdC9kb20vbnVsbC1wYWdlLXNob3ctbW9kYWwtZGlh
bG9nLWNyYXNoLmh0bWwgZm9yIGFuIGV4YW1wbGUuCi0gICAgaWYgKCFjZi0+dHJlZSgpLT5wYXJl
bnQoKSkgeworICAgIGlmICghY29yZUZyYW1lLT50cmVlKCktPnBhcmVudCgpKSB7CiAgICAgICAg
IGV2YXNfb2JqZWN0X2RlbChmcmFtZSk7CiAgICAgICAgIHJldHVybiBFSU5BX1RSVUU7CiAgICAg
fQpAQCAtMTE0NywxNyArMTE0NywxNyBAQCBFaW5hX0Jvb2wgZXdrX2ZyYW1lX2NoaWxkX2FkZChF
dmFzX09iamVjdCogZXdrRnJhbWUsIFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpGcgogICogQGlu
dGVybmFsCiAgKiBDaGFuZ2UgdGhlIGV3ayB2aWV3IHRoaXMgZnJhbWUgaXMgYXNzb2NpYXRlZCB3
aXRoLgogICoKLSAqIEBwYXJhbSBvIFRoZSBld2sgZnJhbWUgdG8gYWN0IHVwb24uCisgKiBAcGFy
YW0gZXdrRnJhbWUgVGhlIGV3ayBmcmFtZSB0byBhY3QgdXBvbi4KICAqIEBwYXJhbSBuZXdQYXJl
bnQgVGhlIG5ldyB2aWV3IHRoYXQgd2lsbCBiZSBzZXQgYXMgdGhlIHBhcmVudCBvZiB0aGUgZnJh
bWUuCiAgKi8KIHZvaWQgZXdrX2ZyYW1lX3ZpZXdfc2V0KEV2YXNfT2JqZWN0KiBld2tGcmFtZSwg
RXZhc19PYmplY3QqIG5ld1BhcmVudCkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVS
Tihld2tGcmFtZSwgc2QpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1l
LCBzbWFydERhdGEpOwogCiAgICAgZXZhc19vYmplY3Rfc21hcnRfbWVtYmVyX2RlbChld2tGcmFt
ZSk7CiAgICAgZXZhc19vYmplY3Rfc21hcnRfbWVtYmVyX2FkZChld2tGcmFtZSwgbmV3UGFyZW50
KTsKIAotICAgIHNkLT52aWV3ID0gbmV3UGFyZW50OworICAgIHNtYXJ0RGF0YS0+dmlldyA9IG5l
d1BhcmVudDsKIH0KIAogLyoqCkBAIC0xMTY3LDggKzExNjcsOCBAQCB2b2lkIGV3a19mcmFtZV92
aWV3X3NldChFdmFzX09iamVjdCogZXdrRnJhbWUsIEV2YXNfT2JqZWN0KiBuZXdQYXJlbnQpCiB2
b2lkIGV3a19mcmFtZV9jb3JlX2dvbmUoRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewogICAgIERC
RygiZXdrRnJhbWU9JXAiLCBld2tGcmFtZSk7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRV
Uk4oZXdrRnJhbWUsIHNkKTsKLSAgICBzZC0+ZnJhbWUgPSAwOworICAgIEVXS19GUkFNRV9TRF9H
RVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzbWFydERhdGEpOworICAgIHNtYXJ0RGF0YS0+ZnJhbWUg
PSAwOwogfQogCiAvKioKQEAgLTExNzYsNyArMTE3Niw3IEBAIHZvaWQgZXdrX2ZyYW1lX2NvcmVf
Z29uZShFdmFzX09iamVjdCogZXdrRnJhbWUpCiAgKiBSZXBvcnRzIGEgcmVzb3VyY2Ugd2lsbCBi
ZSByZXF1ZXN0ZWQuIFVzZXIgbWF5IG92ZXJyaWRlIGJlaGF2aW9yIG9mIHdlYmtpdCBieQogICog
Y2hhbmdpbmcgdmFsdWVzIGluIEBwYXJhbSByZXF1ZXN0LgogICoKLSAqIEBwYXJhbSBvIEZyYW1l
LgorICogQHBhcmFtIGV3a0ZyYW1lIEZyYW1lLgogICogQHBhcmFtIHJlcXVlc3QgUmVxdWVzdCBk
ZXRhaWxzIHRoYXQgdXNlciBtYXkgb3ZlcnJpZGUuIFdoZW5ldmVyIHZhbHVlcyBvbgogICogdGhp
cyBzdHJ1Y3QgY2hhbmdlcywgaXQgbXVzdCBiZSBwcm9wZXJseSBtYWxsb2MnZCBhcyBpdCB3aWxs
IGJlIGZyZWVkCiAgKiBhZnRlcndhcmRzLgpAQCAtMTE5Miw3ICsxMTkyLDcgQEAgdm9pZCBld2tf
ZnJhbWVfcmVxdWVzdF93aWxsX3NlbmQoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBFd2tfRnJhbWVf
UmVzb3VyY2VfUmVxdWUKICAqIEBpbnRlcm5hbAogICogUmVwb3J0cyB0aGF0IHRoZXJlJ3MgYSBu
ZXcgcmVzb3VyY2UuCiAgKgotICogQHBhcmFtIG8gRnJhbWUuCisgKiBAcGFyYW0gZXdrRnJhbWUg
RnJhbWUuCiAgKiBAcGFyYW0gcmVxdWVzdCBOZXcgcmVxdWVzdCBkZXRhaWxzLiBObyBjaGFuZ2Vz
IGFyZSBhbGxvd2VkIHRvIGZpZWxkcy4KICAqCiAgKiBFbWl0cyBzaWduYWw6ICJyZXNvdXJjZSxy
ZXF1ZXN0LG5ldyIKQEAgLTEyMDYsNyArMTIwNiw3IEBAIHZvaWQgZXdrX2ZyYW1lX3JlcXVlc3Rf
YXNzaWduX2lkZW50aWZpZXIoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBjb25zdCBFd2tfRnJhbWVf
CiAgKiBAaW50ZXJuYWwKICAqIFJlcG9ydHMgdGhhdCBmaXJzdCBuYXZpZ2F0aW9uIG9jY3VycmVk
CiAgKgotICogQHBhcmFtIG8gRnJhbWUuCisgKiBAcGFyYW0gZXdrRnJhbWUgRnJhbWUuCiAgKgog
ICogRW1pdHMgc2lnbmFsOiAibmF2aWdhdGlvbixmaXJzdCIKICAqLwpAQCAtMTIxOSw3ICsxMjE5
LDcgQEAgdm9pZCBld2tfZnJhbWVfZGlkX3BlcmZvcm1fZmlyc3RfbmF2aWdhdGlvbihFdmFzX09i
amVjdCogZXdrRnJhbWUpCiAgKiBAaW50ZXJuYWwKICAqIFJlcG9ydHMgZnJhbWUgd2lsbCBiZSBz
YXZlZCB0byBjdXJyZW50IHN0YXRlCiAgKgotICogQHBhcmFtIG8gRnJhbWUuCisgKiBAcGFyYW0g
ZXdrRnJhbWUgRnJhbWUuCiAgKiBAcGFyYW0gaXRlbSBIaXN0b3J5IGl0ZW0gdG8gc2F2ZSBkZXRh
aWxzIHRvLgogICoKICAqIEVtaXRzIHNpZ25hbDogInN0YXRlLHNhdmUiCkBAIC0xMjM3LDIyICsx
MjM3LDIyIEBAIHZvaWQgZXdrX2ZyYW1lX3ZpZXdfc3RhdGVfc2F2ZShFdmFzX09iamVjdCogZXdr
RnJhbWUsIFdlYkNvcmU6Okhpc3RvcnlJdGVtKiBpdGVtCiAgKi8KIHZvaWQgZXdrX2ZyYW1lX2xv
YWRfc3RhcnRlZChFdmFzX09iamVjdCogZXdrRnJhbWUpCiB7Ci0gICAgRXZhc19PYmplY3QqIG1h
aW5fZnJhbWU7CisgICAgRXZhc19PYmplY3QqIG1haW5GcmFtZTsKICAgICBEQkcoImV3a0ZyYW1l
PSVwIiwgZXdrRnJhbWUpOwogICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdr
RnJhbWUsICJsb2FkLHN0YXJ0ZWQiLCAwKTsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVS
Tihld2tGcmFtZSwgc2QpOwotICAgIGV3a192aWV3X2xvYWRfc3RhcnRlZChzZC0+dmlldyk7Cisg
ICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSk7CisgICAg
ZXdrX3ZpZXdfbG9hZF9zdGFydGVkKHNtYXJ0RGF0YS0+dmlldyk7CiAKLSAgICBtYWluX2ZyYW1l
ID0gZXdrX3ZpZXdfZnJhbWVfbWFpbl9nZXQoc2QtPnZpZXcpOwotICAgIGlmIChtYWluX2ZyYW1l
ID09IGV3a0ZyYW1lKQotICAgICAgICBld2tfdmlld19mcmFtZV9tYWluX2xvYWRfc3RhcnRlZChz
ZC0+dmlldyk7CisgICAgbWFpbkZyYW1lID0gZXdrX3ZpZXdfZnJhbWVfbWFpbl9nZXQoc21hcnRE
YXRhLT52aWV3KTsKKyAgICBpZiAobWFpbkZyYW1lID09IGV3a0ZyYW1lKQorICAgICAgICBld2tf
dmlld19mcmFtZV9tYWluX2xvYWRfc3RhcnRlZChzbWFydERhdGEtPnZpZXcpOwogfQogCiAvKioK
ICAqIEBpbnRlcm5hbAogICogUmVwb3J0cyB0aGUgZnJhbWUgc3RhcnRlZCBwcm92aXNpb25hbCBs
b2FkLgogICoKLSAqIEBwYXJhbSBvIEZyYW1lLgorICogQHBhcmFtIGV3a0ZyYW1lIEZyYW1lLgog
ICoKICAqIEVtaXRzIHNpZ25hbDogImxvYWQscHJvdmlzaW9uYWwiIHdpdGggbm8gcGFyYW1ldGVy
cy4KICAqLwpAQCAtMTI2NSw3ICsxMjY1LDcgQEAgdm9pZCBld2tfZnJhbWVfbG9hZF9wcm92aXNp
b25hbChFdmFzX09iamVjdCogZXdrRnJhbWUpCiAgKiBAaW50ZXJuYWwKICAqIFJlcG9ydHMgdGhl
IGZyYW1lIGZpbmlzaGVkIGZpcnN0IGxheW91dC4KICAqCi0gKiBAcGFyYW0gbyBGcmFtZS4KKyAq
IEBwYXJhbSBld2tGcmFtZSBGcmFtZS4KICAqCiAgKiBFbWl0cyBzaWduYWw6ICJsb2FkLGZpcnN0
bGF5b3V0LGZpbmlzaGVkIiB3aXRoIG5vIHBhcmFtZXRlcnMuCiAgKi8KQEAgLTEyNzgsNyArMTI3
OCw3IEBAIHZvaWQgZXdrX2ZyYW1lX2xvYWRfZmlyc3RsYXlvdXRfZmluaXNoZWQoRXZhc19PYmpl
Y3QqIGV3a0ZyYW1lKQogICogQGludGVybmFsCiAgKiBSZXBvcnRzIHRoZSBmcmFtZSBmaW5pc2hl
ZCBmaXJzdCBub24gZW1wdHkgbGF5b3V0LgogICoKLSAqIEBwYXJhbSBvIEZyYW1lLgorICogQHBh
cmFtIGV3a0ZyYW1lIEZyYW1lLgogICoKICAqIEVtaXRzIHNpZ25hbDogImxvYWQsbm9uZW1wdHls
YXlvdXQsZmluaXNoZWQiIHdpdGggbm8gcGFyYW1ldGVycy4KICAqLwpAQCAtMTI5MSw3ICsxMjkx
LDcgQEAgdm9pZCBld2tfZnJhbWVfbG9hZF9maXJzdGxheW91dF9ub25lbXB0eV9maW5pc2hlZChF
dmFzX09iamVjdCogZXdrRnJhbWUpCiAgKiBAaW50ZXJuYWwKICAqIFJlcG9ydHMgdGhlIGxvYWRp
bmcgb2YgYSBkb2N1bWVudCBoYXMgZmluaXNoZWQgb24gZnJhbWUuCiAgKgotICogQHBhcmFtIG8g
RnJhbWUuCisgKiBAcGFyYW0gZXdrRnJhbWUgRnJhbWUuCiAgKgogICogRW1pdHMgc2lnbmFsOiAi
bG9hZCxkb2N1bWVudCxmaW5pc2hlZCIgd2l0aCBubyBwYXJhbWV0ZXJzLgogICovCkBAIC0xMzE0
LDcgKzEzMTQsNyBAQCB2b2lkIGV3a19mcmFtZV9sb2FkX2RvY3VtZW50X2ZpbmlzaGVkKEV2YXNf
T2JqZWN0KiBld2tGcmFtZSkKICAqLwogdm9pZCBld2tfZnJhbWVfbG9hZF9maW5pc2hlZChFdmFz
X09iamVjdCogZXdrRnJhbWUsIGNvbnN0IGNoYXIqIGVycm9yRG9tYWluLCBpbnQgZXJyb3JDb2Rl
LCBFaW5hX0Jvb2wgaXNDYW5jZWxsYXRpb24sIGNvbnN0IGNoYXIqIGVycm9yRGVzY3JpcHRpb24s
IGNvbnN0IGNoYXIqIGZhaWxpbmdVcmwpCiB7Ci0gICAgRXdrX0ZyYW1lX0xvYWRfRXJyb3IgYnVm
LCAqZXJyb3I7CisgICAgRXdrX0ZyYW1lX0xvYWRfRXJyb3IgYnVmZmVyLCAqZXJyb3I7CiAgICAg
aWYgKCFlcnJvckRvbWFpbikgewogICAgICAgICBEQkcoImV3a0ZyYW1lPSVwLCBzdWNjZXNzLiIs
IGV3a0ZyYW1lKTsKICAgICAgICAgZXJyb3IgPSAwOwpAQCAtMTMyMywxNyArMTMyMywxNyBAQCB2
b2lkIGV3a19mcmFtZV9sb2FkX2ZpbmlzaGVkKEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgY29uc3Qg
Y2hhciogZXJyb3JEb21haW4sIGludAogICAgICAgICAgICAgZXdrRnJhbWUsIGVycm9yRG9tYWlu
LCBlcnJvckNvZGUsIGlzQ2FuY2VsbGF0aW9uLAogICAgICAgICAgICAgZXJyb3JEZXNjcmlwdGlv
biwgZmFpbGluZ1VybCk7CiAKLSAgICAgICAgYnVmLmRvbWFpbiA9IGVycm9yRG9tYWluOwotICAg
ICAgICBidWYuY29kZSA9IGVycm9yQ29kZTsKLSAgICAgICAgYnVmLmlzX2NhbmNlbGxhdGlvbiA9
IGlzQ2FuY2VsbGF0aW9uOwotICAgICAgICBidWYuZGVzY3JpcHRpb24gPSBlcnJvckRlc2NyaXB0
aW9uOwotICAgICAgICBidWYuZmFpbGluZ191cmwgPSBmYWlsaW5nVXJsOwotICAgICAgICBidWYu
ZnJhbWUgPSBld2tGcmFtZTsKLSAgICAgICAgZXJyb3IgPSAmYnVmOworICAgICAgICBidWZmZXIu
ZG9tYWluID0gZXJyb3JEb21haW47CisgICAgICAgIGJ1ZmZlci5jb2RlID0gZXJyb3JDb2RlOwor
ICAgICAgICBidWZmZXIuaXNfY2FuY2VsbGF0aW9uID0gaXNDYW5jZWxsYXRpb247CisgICAgICAg
IGJ1ZmZlci5kZXNjcmlwdGlvbiA9IGVycm9yRGVzY3JpcHRpb247CisgICAgICAgIGJ1ZmZlci5m
YWlsaW5nX3VybCA9IGZhaWxpbmdVcmw7CisgICAgICAgIGJ1ZmZlci5mcmFtZSA9IGV3a0ZyYW1l
OworICAgICAgICBlcnJvciA9ICZidWZmZXI7CiAgICAgfQogICAgIGV2YXNfb2JqZWN0X3NtYXJ0
X2NhbGxiYWNrX2NhbGwoZXdrRnJhbWUsICJsb2FkLGZpbmlzaGVkIiwgZXJyb3IpOwotICAgIEVX
S19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCk7Ci0gICAgZXdrX3ZpZXdfbG9h
ZF9maW5pc2hlZChzZC0+dmlldywgZXJyb3IpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVU
VVJOKGV3a0ZyYW1lLCBzbWFydERhdGEpOworICAgIGV3a192aWV3X2xvYWRfZmluaXNoZWQoc21h
cnREYXRhLT52aWV3LCBlcnJvcik7CiB9CiAKIC8qKgpAQCAtMTM3MSwxNiArMTM3MSwxNiBAQCB2
b2lkIGV3a19mcmFtZV9sb2FkX2Vycm9yKEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgY29uc3QgY2hh
ciogZXJyb3JEb21haW4sIGludCBlcgogICovCiB2b2lkIGV3a19mcmFtZV9sb2FkX3Byb2dyZXNz
X2NoYW5nZWQoRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRf
T1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4o
c2QtPmZyYW1lKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21h
cnREYXRhKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmZyYW1l
KTsKIAogICAgIC8vIFRPRE86IHRoaXMgaXMgcGVyIHBhZ2UsIHRoZXJlIHNob3VsZCBiZSBhIHdh
eSB0byBoYXZlIHBlci1mcmFtZS4KLSAgICBkb3VibGUgcHJvZ3Jlc3MgPSBzZC0+ZnJhbWUtPnBh
Z2UoKS0+cHJvZ3Jlc3MoKS0+ZXN0aW1hdGVkUHJvZ3Jlc3MoKTsKKyAgICBkb3VibGUgcHJvZ3Jl
c3MgPSBzbWFydERhdGEtPmZyYW1lLT5wYWdlKCktPnByb2dyZXNzKCktPmVzdGltYXRlZFByb2dy
ZXNzKCk7CiAKICAgICBEQkcoImV3a0ZyYW1lPSVwIChwPSUwLjNmKSIsIGV3a0ZyYW1lLCBwcm9n
cmVzcyk7CiAKICAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKGV3a0ZyYW1lLCAi
bG9hZCxwcm9ncmVzcyIsICZwcm9ncmVzcyk7Ci0gICAgZXdrX3ZpZXdfbG9hZF9wcm9ncmVzc19j
aGFuZ2VkKHNkLT52aWV3KTsKKyAgICBld2tfdmlld19sb2FkX3Byb2dyZXNzX2NoYW5nZWQoc21h
cnREYXRhLT52aWV3KTsKIH0KIAogCkBAIC0xNDE3LDUxICsxNDE3LDUxIEBAIHZvaWQgZXdrX2Zy
YW1lX3RpdGxlX3NldChFdmFzX09iamVjdCogZXdrRnJhbWUsIGNvbnN0IGNoYXIqIHRpdGxlKQog
dm9pZCBld2tfZnJhbWVfdmlld19jcmVhdGVfZm9yX3ZpZXcoRXZhc19PYmplY3QqIGV3a0ZyYW1l
LCBFdmFzX09iamVjdCogdmlldykKIHsKICAgICBEQkcoImV3a0ZyYW1lPSVwLCB2aWV3PSVwIiwg
ZXdrRnJhbWUsIHZpZXcpOwotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1l
LCBzZCk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmZyYW1lKTsKLSAgICBF
dmFzX0Nvb3JkIHcsIGg7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUs
IHNtYXJ0RGF0YSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRhLT5m
cmFtZSk7CisgICAgRXZhc19Db29yZCB3aWR0aCwgaGVpZ2h0OwogCi0gICAgZXZhc19vYmplY3Rf
Z2VvbWV0cnlfZ2V0KHZpZXcsIDAsIDAsICZ3LCAmaCk7CisgICAgZXZhc19vYmplY3RfZ2VvbWV0
cnlfZ2V0KHZpZXcsIDAsIDAsICZ3aWR0aCwgJmhlaWdodCk7CiAKLSAgICBXZWJDb3JlOjpJbnRT
aXplIHNpemUodywgaCk7Ci0gICAgaW50IHIsIGcsIGIsIGE7Ci0gICAgV2ViQ29yZTo6Q29sb3Ig
Ymc7CisgICAgV2ViQ29yZTo6SW50U2l6ZSBzaXplKHdpZHRoLCBoZWlnaHQpOworICAgIGludCBy
ZWQsIGdyZWVuLCBibHVlLCBhbHBoYTsKKyAgICBXZWJDb3JlOjpDb2xvciBiYWNrZ3JvdW5kOwog
Ci0gICAgZXdrX3ZpZXdfYmdfY29sb3JfZ2V0KHZpZXcsICZyLCAmZywgJmIsICZhKTsKLSAgICBp
ZiAoIWEpCi0gICAgICAgIGJnID0gV2ViQ29yZTo6Q29sb3IoMCwgMCwgMCwgMCk7Ci0gICAgZWxz
ZSBpZiAoYSA9PSAyNTUpCi0gICAgICAgIGJnID0gV2ViQ29yZTo6Q29sb3IociwgZywgYiwgYSk7
CisgICAgZXdrX3ZpZXdfYmdfY29sb3JfZ2V0KHZpZXcsICZyZWQsICZncmVlbiwgJmJsdWUsICZh
bHBoYSk7CisgICAgaWYgKCFhbHBoYSkKKyAgICAgICAgYmFja2dyb3VuZCA9IFdlYkNvcmU6OkNv
bG9yKDAsIDAsIDAsIDApOworICAgIGVsc2UgaWYgKGFscGhhID09IDI1NSkKKyAgICAgICAgYmFj
a2dyb3VuZCA9IFdlYkNvcmU6OkNvbG9yKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKICAgICBl
bHNlCi0gICAgICAgIGJnID0gV2ViQ29yZTo6Q29sb3IociAqIDI1NSAvIGEsIGcgKiAyNTUgLyBh
LCBiICogMjU1IC8gYSwgYSk7CisgICAgICAgIGJhY2tncm91bmQgPSBXZWJDb3JlOjpDb2xvcihy
ZWQgKiAyNTUgLyBhbHBoYSwgZ3JlZW4gKiAyNTUgLyBhbHBoYSwgYmx1ZSAqIDI1NSAvIGFscGhh
LCBhbHBoYSk7CiAKLSAgICBzZC0+ZnJhbWUtPmNyZWF0ZVZpZXcoc2l6ZSwgYmcsICFhLCBXZWJD
b3JlOjpJbnRTaXplKCksIGZhbHNlKTsKLSAgICBpZiAoIXNkLT5mcmFtZS0+dmlldygpKQorICAg
IHNtYXJ0RGF0YS0+ZnJhbWUtPmNyZWF0ZVZpZXcoc2l6ZSwgYmFja2dyb3VuZCwgIWFscGhhLCBX
ZWJDb3JlOjpJbnRTaXplKCksIGZhbHNlKTsKKyAgICBpZiAoIXNtYXJ0RGF0YS0+ZnJhbWUtPnZp
ZXcoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgY29uc3QgY2hhciogdGhlbWUgPSBld2tfdmll
d190aGVtZV9nZXQodmlldyk7Ci0gICAgc2QtPmZyYW1lLT52aWV3KCktPnNldEVkamVUaGVtZSh0
aGVtZSk7Ci0gICAgc2QtPmZyYW1lLT52aWV3KCktPnNldEV2YXNPYmplY3QoZXdrRnJhbWUpOwor
ICAgIHNtYXJ0RGF0YS0+ZnJhbWUtPnZpZXcoKS0+c2V0RWRqZVRoZW1lKHRoZW1lKTsKKyAgICBz
bWFydERhdGEtPmZyYW1lLT52aWV3KCktPnNldEV2YXNPYmplY3QoZXdrRnJhbWUpOwogfQogCiBz
c2l6ZV90IGV3a19mcmFtZV9zb3VyY2VfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSwg
Y2hhcioqIGZyYW1lU291cmNlKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3
a0ZyYW1lLCBzZCwgLTEpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+
ZnJhbWUsIC0xKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1l
LT5kb2N1bWVudCgpLCAtMSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJh
bWUsIHNtYXJ0RGF0YSwgLTEpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChz
bWFydERhdGEtPmZyYW1lLCAtMSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFM
KHNtYXJ0RGF0YS0+ZnJhbWUtPmRvY3VtZW50KCksIC0xKTsKICAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTl9WQUwoZnJhbWVTb3VyY2UsIC0xKTsKIAogICAgIFdURjo6U3RyaW5nIHNvdXJj
ZTsKICAgICAqZnJhbWVTb3VyY2UgPSAwOyAvLyBTYXZlcyAwIHRvIHBvaW50ZXIgdW50aWwgaXQn
cyBub3QgYWxsb2NhdGVkLgogCi0gICAgaWYgKCFzZC0+ZnJhbWUtPmRvY3VtZW50KCktPmlzSFRN
TERvY3VtZW50KCkpIHsKKyAgICBpZiAoIXNtYXJ0RGF0YS0+ZnJhbWUtPmRvY3VtZW50KCktPmlz
SFRNTERvY3VtZW50KCkpIHsKICAgICAgICAgLy8gRklYTUU6IFN1cHBvcnQgb3RoZXJzIGRvY3Vt
ZW50cy4KICAgICAgICAgV1JOKCJPbmx5IEhUTUwgZG9jdW1lbnRzIGFyZSBzdXBwb3J0ZWQiKTsK
ICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIAogICAgIC8vIExvb2sgZm9yIDxodG1sPiB0YWcu
IElmIGl0IGV4aXN0cywgdGhlIG5vZGUgY29udGF0aW5zIGFsbCBkb2N1bWVudCdzIHNvdXJjZS4K
LSAgICBXZWJDb3JlOjpOb2RlKiBkb2N1bWVudE5vZGUgPSBzZC0+ZnJhbWUtPmRvY3VtZW50KCkt
PmRvY3VtZW50RWxlbWVudCgpOworICAgIFdlYkNvcmU6Ok5vZGUqIGRvY3VtZW50Tm9kZSA9IHNt
YXJ0RGF0YS0+ZnJhbWUtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpOwogICAgIGlmIChk
b2N1bWVudE5vZGUpCiAgICAgICAgIGZvciAoV2ViQ29yZTo6Tm9kZSogbm9kZSA9IGRvY3VtZW50
Tm9kZS0+Zmlyc3RDaGlsZCgpOyBub2RlOyBub2RlID0gbm9kZS0+cGFyZW50RWxlbWVudCgpKSB7
CiAgICAgICAgICAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShXZWJDb3JlOjpIVE1MTmFtZXM6Omh0
bWxUYWcpKSB7CkBAIC0xNDc0LDM2ICsxNDc0LDM2IEBAIHNzaXplX3QgZXdrX2ZyYW1lX3NvdXJj
ZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBjaGFyKiogZnJhbWVTb3VyY2UpCiAK
ICAgICAvLyBUcnkgdG8gZ2V0IDxoZWFkPiBhbmQgPGJvZHk+IHRhZ3MgaWYgPGh0bWw+IHRhZyB3
YXMgbm90IGZvdW5kLgogICAgIGlmIChzb3VyY2UuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGlmIChz
ZC0+ZnJhbWUtPmRvY3VtZW50KCktPmhlYWQoKSkKLSAgICAgICAgICAgIHNvdXJjZSA9IHNkLT5m
cmFtZS0+ZG9jdW1lbnQoKS0+aGVhZCgpLT5vdXRlckhUTUwoKTsKKyAgICAgICAgaWYgKHNtYXJ0
RGF0YS0+ZnJhbWUtPmRvY3VtZW50KCktPmhlYWQoKSkKKyAgICAgICAgICAgIHNvdXJjZSA9IHNt
YXJ0RGF0YS0+ZnJhbWUtPmRvY3VtZW50KCktPmhlYWQoKS0+b3V0ZXJIVE1MKCk7CiAKLSAgICAg
ICAgaWYgKHNkLT5mcmFtZS0+ZG9jdW1lbnQoKS0+Ym9keSgpKQotICAgICAgICAgICAgc291cmNl
ICs9IHNkLT5mcmFtZS0+ZG9jdW1lbnQoKS0+Ym9keSgpLT5vdXRlckhUTUwoKTsKKyAgICAgICAg
aWYgKHNtYXJ0RGF0YS0+ZnJhbWUtPmRvY3VtZW50KCktPmJvZHkoKSkKKyAgICAgICAgICAgIHNv
dXJjZSArPSBzbWFydERhdGEtPmZyYW1lLT5kb2N1bWVudCgpLT5ib2R5KCktPm91dGVySFRNTCgp
OwogICAgIH0KIAotICAgIHNpemVfdCBzb3VyY2VfbGVuZ3RoID0gc3RybGVuKHNvdXJjZS51dGY4
KCkuZGF0YSgpKTsKLSAgICAqZnJhbWVTb3VyY2UgPSBzdGF0aWNfY2FzdDxjaGFyKj4obWFsbG9j
KHNvdXJjZV9sZW5ndGggKyAxKSk7CisgICAgc2l6ZV90IHNvdXJjZUxlbmd0aCA9IHN0cmxlbihz
b3VyY2UudXRmOCgpLmRhdGEoKSk7CisgICAgKmZyYW1lU291cmNlID0gc3RhdGljX2Nhc3Q8Y2hh
cio+KG1hbGxvYyhzb3VyY2VMZW5ndGggKyAxKSk7CiAgICAgaWYgKCEqZnJhbWVTb3VyY2UpIHsK
ICAgICAgICAgQ1JJVElDQUwoIkNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkuIik7CiAgICAgICAg
IHJldHVybiAtMTsKICAgICB9CiAKLSAgICBzdHJuY3B5KCpmcmFtZVNvdXJjZSwgc291cmNlLnV0
ZjgoKS5kYXRhKCksIHNvdXJjZV9sZW5ndGgpOwotICAgICgqZnJhbWVTb3VyY2UpW3NvdXJjZV9s
ZW5ndGhdID0gJ1wwJzsKKyAgICBzdHJuY3B5KCpmcmFtZVNvdXJjZSwgc291cmNlLnV0ZjgoKS5k
YXRhKCksIHNvdXJjZUxlbmd0aCk7CisgICAgKCpmcmFtZVNvdXJjZSlbc291cmNlTGVuZ3RoXSA9
ICdcMCc7CiAKLSAgICByZXR1cm4gc291cmNlX2xlbmd0aDsKKyAgICByZXR1cm4gc291cmNlTGVu
Z3RoOwogfQogCiBFaW5hX0xpc3QqIGV3a19mcmFtZV9yZXNvdXJjZXNfbG9jYXRpb25fZ2V0KGNv
bnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JF
VFVSTihld2tGcmFtZSwgc2QsIDApOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZB
TChzZC0+ZnJhbWUsIDApOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+
ZnJhbWUtPmRvY3VtZW50KCksIDApOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3
a0ZyYW1lLCBzbWFydERhdGEsIDApOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZB
TChzbWFydERhdGEtPmZyYW1lLCAwKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9W
QUwoc21hcnREYXRhLT5mcmFtZS0+ZG9jdW1lbnQoKSwgMCk7CiAKICAgICBFaW5hX0xpc3QqIGxp
c3RPZkltYWdlc0xvY2F0aW9uID0gMDsKIAogICAgIC8vIEdldCBzcmMgYXR0aWJ1dGUgb2YgaW1h
Z2VzIGFuZCBzYXZlcyB0aGVtIHRvIHRoZSBFaW5hX0xpc3QuCi0gICAgUmVmUHRyPFdlYkNvcmU6
OkhUTUxDb2xsZWN0aW9uPiBpbWFnZXMgPSBzZC0+ZnJhbWUtPmRvY3VtZW50KCktPmltYWdlcygp
OworICAgIFJlZlB0cjxXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbj4gaW1hZ2VzID0gc21hcnREYXRh
LT5mcmFtZS0+ZG9jdW1lbnQoKS0+aW1hZ2VzKCk7CiAgICAgZm9yIChzaXplX3QgaW5kZXggPSAw
OyBpbmRleCA8IGltYWdlcy0+bGVuZ3RoKCk7ICsraW5kZXgpIHsKICAgICAgICAgV2ViQ29yZTo6
SFRNTEltYWdlRWxlbWVudCogaW1hZ2VFbGVtZW50ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6SFRN
TEltYWdlRWxlbWVudCo+KGltYWdlcy0+aXRlbShpbmRleCkpOwogICAgICAgICBpZiAoIWltYWdl
RWxlbWVudCB8fCBpbWFnZUVsZW1lbnQtPnNyYygpLmlzTnVsbCgpIHx8IGltYWdlRWxlbWVudC0+
c3JjKCkuaXNFbXB0eSgpKQpAQCAtMTU0MCwxMyArMTU0MCwxMyBAQCBvdXRfb2ZfbWVtb3J5X2hh
bmRsZXI6CiAKIGNoYXIqIGV3a19mcmFtZV9wbGFpbl90ZXh0X2dldChjb25zdCBFdmFzX09iamVj
dCogZXdrRnJhbWUpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUs
IHNkLCAwKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCAw
KTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRhLCAw
KTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5mcmFtZSwg
MCk7CiAKLSAgICBpZiAoIXNkLT5mcmFtZS0+ZG9jdW1lbnQoKSkKKyAgICBpZiAoIXNtYXJ0RGF0
YS0+ZnJhbWUtPmRvY3VtZW50KCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgV2ViQ29yZTo6
RWxlbWVudCogZG9jdW1lbnRFbGVtZW50ID0gc2QtPmZyYW1lLT5kb2N1bWVudCgpLT5kb2N1bWVu
dEVsZW1lbnQoKTsKKyAgICBXZWJDb3JlOjpFbGVtZW50KiBkb2N1bWVudEVsZW1lbnQgPSBzbWFy
dERhdGEtPmZyYW1lLT5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKTsKIAogICAgIGlmICgh
ZG9jdW1lbnRFbGVtZW50KQogICAgICAgICByZXR1cm4gMDsKQEAgLTE1ODUsOSArMTU4NSw5IEBA
IEVpbmFfQm9vbCBld2tfZnJhbWVfdXJpX2NoYW5nZWQoRXZhc19PYmplY3QqIGV3a0ZyYW1lKQog
dm9pZCBld2tfZnJhbWVfZm9yY2VfbGF5b3V0KEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsKICAg
ICBEQkcoImV3a0ZyYW1lPSVwIiwgZXdrRnJhbWUpOwotICAgIEVXS19GUkFNRV9TRF9HRVRfT1Jf
UkVUVVJOKGV3a0ZyYW1lLCBzZCk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2Qt
PmZyYW1lKTsKLSAgICBXZWJDb3JlOjpGcmFtZVZpZXcqIHZpZXcgPSBzZC0+ZnJhbWUtPnZpZXco
KTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRhKTsK
KyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmZyYW1lKTsKKyAgICBX
ZWJDb3JlOjpGcmFtZVZpZXcqIHZpZXcgPSBzbWFydERhdGEtPmZyYW1lLT52aWV3KCk7CiAgICAg
aWYgKHZpZXcpCiAgICAgICAgIHZpZXctPmZvcmNlTGF5b3V0KHRydWUpOwogfQpAQCAtMTYwNiw3
ICsxNjA2LDcgQEAgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OldpZGdldD4gZXdrX2ZyYW1lX3Bs
dWdpbl9jcmVhdGUoRXZhc19PYmplY3QqIGV3a0ZyYW1lLAogICogQGludGVybmFsCiAgKiBSZXBv
cnRzIHRoYXQgZWRpdG9yIGNsaWVudCBzZWxlY3Rpb24gd2FzIGNoYW5nZWQuCiAgKgotICogQHBh
cmFtIG8gRnJhbWUKKyAqIEBwYXJhbSBld2tGcmFtZSBGcmFtZQogICoKICAqIEVtaXRzIHNpZ25h
bDogImVkaXRvcmNsaWVudHNlbGVjdGlvbixjaGFuZ2VkIiB3aXRoIG5vIHBhcmFtZXRlcnMuCiAg
Ki8KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfaGlzdG9yeS5jcHAgYi9T
b3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2hpc3RvcnkuY3BwCmluZGV4IDgxZjYwYzUwM2FhMmFm
ODI4NzEzYjRiOTgyYzA2NTJkNjYyNjcyZWIuLjc1NGE5NDJjNDRkYTE1NzgwNDBkNTIzNThhMTI3
MTE3NzhiMTM1MGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfaGlzdG9y
eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19oaXN0b3J5LmNwcApAQCAtNTcs
OSArNTcsOSBAQCBzdHJ1Y3QgX0V3a19IaXN0b3J5X0l0ZW0gewogICAgIFdlYkNvcmU6Okhpc3Rv
cnlJdGVtKiBjb3JlOwogCiAgICAgY29uc3QgY2hhciogdGl0bGU7Ci0gICAgY29uc3QgY2hhciog
YWx0ZXJuYXRlX3RpdGxlOworICAgIGNvbnN0IGNoYXIqIGFsdGVybmF0ZVRpdGxlOwogICAgIGNv
bnN0IGNoYXIqIHVyaTsKLSAgICBjb25zdCBjaGFyKiBvcmlnaW5hbF91cmk7CisgICAgY29uc3Qg
Y2hhciogb3JpZ2luYWxVcmk7CiB9OwogCiAjZGVmaW5lIEVXS19ISVNUT1JZX0lURU1fQ09SRV9H
RVRfT1JfUkVUVVJOKGl0ZW0sIGNvcmVfLCAuLi4pIFwKQEAgLTc1LDE3ICs3NSwxNyBAQCBzdHJ1
Y3QgX0V3a19IaXN0b3J5X0l0ZW0gewogCiBzdGF0aWMgaW5saW5lIEVpbmFfTGlzdCogX2V3a19o
aXN0b3J5X2l0ZW1fbGlzdF9nZXQoY29uc3QgV2ViQ29yZTo6SGlzdG9yeUl0ZW1WZWN0b3ImIGNv
cmVJdGVtcykKIHsKLSAgICBFaW5hX0xpc3QqIHJldCA9IDA7Ci0gICAgdW5zaWduZWQgaW50IGks
IHNpemU7CisgICAgRWluYV9MaXN0KiByZXN1bHQgPSAwOworICAgIHVuc2lnbmVkIGludCBzaXpl
OwogCiAgICAgc2l6ZSA9IGNvcmVJdGVtcy5zaXplKCk7Ci0gICAgZm9yIChpID0gMDsgaSA8IHNp
emU7IGkrKykgeworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7
CiAgICAgICAgIEV3a19IaXN0b3J5X0l0ZW0qIGl0ZW0gPSBld2tfaGlzdG9yeV9pdGVtX25ld19m
cm9tX2NvcmUoY29yZUl0ZW1zW2ldLmdldCgpKTsKICAgICAgICAgaWYgKGl0ZW0pCi0gICAgICAg
ICAgICByZXQgPSBlaW5hX2xpc3RfYXBwZW5kKHJldCwgaXRlbSk7CisgICAgICAgICAgICByZXN1
bHQgPSBlaW5hX2xpc3RfYXBwZW5kKHJlc3VsdCwgaXRlbSk7CiAgICAgfQogCi0gICAgcmV0dXJu
IHJldDsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBFaW5hX0Jvb2wgZXdrX2hpc3RvcnlfZm9y
d2FyZChFd2tfSGlzdG9yeSogaGlzdG9yeSkKQEAgLTI1OSw5ICsyNTksOSBAQCB2b2lkIGV3a19o
aXN0b3J5X2l0ZW1fZnJlZShFd2tfSGlzdG9yeV9JdGVtKiBpdGVtKQogCiB2b2lkIGV3a19oaXN0
b3J5X2l0ZW1fbGlzdF9mcmVlKEVpbmFfTGlzdCogaGlzdG9yeV9pdGVtcykKIHsKLSAgICB2b2lk
KiBkOwotICAgIEVJTkFfTElTVF9GUkVFKGhpc3RvcnlfaXRlbXMsIGQpIHsKLSAgICAgICAgRXdr
X0hpc3RvcnlfSXRlbSogaXRlbSA9IChFd2tfSGlzdG9yeV9JdGVtKilkOworICAgIHZvaWQqIGRl
bGV0ZUl0ZW07CisgICAgRUlOQV9MSVNUX0ZSRUUoaGlzdG9yeV9pdGVtcywgZGVsZXRlSXRlbSkg
eworICAgICAgICBFd2tfSGlzdG9yeV9JdGVtKiBpdGVtID0gKEV3a19IaXN0b3J5X0l0ZW0qKWRl
bGV0ZUl0ZW07CiAgICAgICAgIF9ld2tfaGlzdG9yeV9pdGVtX2ZyZWUoaXRlbSwgaXRlbS0+Y29y
ZSk7CiAgICAgfQogfQpAQCAtMjcwLDI1ICsyNzAsMjUgQEAgY29uc3QgY2hhciogZXdrX2hpc3Rv
cnlfaXRlbV90aXRsZV9nZXQoY29uc3QgRXdrX0hpc3RvcnlfSXRlbSogaXRlbSkKIHsKICAgICBF
V0tfSElTVE9SWV9JVEVNX0NPUkVfR0VUX09SX1JFVFVSTihpdGVtLCBjb3JlLCAwKTsKICAgICAv
LyBoaWRlIHRoZSBmb2xsb3dpbmcgb3B0aW16YXRpb24gZnJvbSBvdXRzaWRlCi0gICAgRXdrX0hp
c3RvcnlfSXRlbSogaSA9IGNvbnN0X2Nhc3Q8RXdrX0hpc3RvcnlfSXRlbSo+KGl0ZW0pOwotICAg
IGVpbmFfc3RyaW5nc2hhcmVfcmVwbGFjZSgmaS0+dGl0bGUsIGNvcmUtPnRpdGxlKCkudXRmOCgp
LmRhdGEoKSk7Ci0gICAgcmV0dXJuIGktPnRpdGxlOworICAgIEV3a19IaXN0b3J5X0l0ZW0qIGl0
ZW0xID0gY29uc3RfY2FzdDxFd2tfSGlzdG9yeV9JdGVtKj4oaXRlbSk7CisgICAgZWluYV9zdHJp
bmdzaGFyZV9yZXBsYWNlKCZpdGVtMS0+dGl0bGUsIGNvcmUtPnRpdGxlKCkudXRmOCgpLmRhdGEo
KSk7CisgICAgcmV0dXJuIGl0ZW0xLT50aXRsZTsKIH0KIAogY29uc3QgY2hhciogZXdrX2hpc3Rv
cnlfaXRlbV90aXRsZV9hbHRlcm5hdGVfZ2V0KGNvbnN0IEV3a19IaXN0b3J5X0l0ZW0qIGl0ZW0p
CiB7CiAgICAgRVdLX0hJU1RPUllfSVRFTV9DT1JFX0dFVF9PUl9SRVRVUk4oaXRlbSwgY29yZSwg
MCk7CiAgICAgLy8gaGlkZSB0aGUgZm9sbG93aW5nIG9wdGltemF0aW9uIGZyb20gb3V0c2lkZQot
ICAgIEV3a19IaXN0b3J5X0l0ZW0qIGkgPSBjb25zdF9jYXN0PEV3a19IaXN0b3J5X0l0ZW0qPihp
dGVtKTsKLSAgICBlaW5hX3N0cmluZ3NoYXJlX3JlcGxhY2UoJmktPmFsdGVybmF0ZV90aXRsZSwK
KyAgICBFd2tfSGlzdG9yeV9JdGVtKiBpdGVtMSA9IGNvbnN0X2Nhc3Q8RXdrX0hpc3RvcnlfSXRl
bSo+KGl0ZW0pOworICAgIGVpbmFfc3RyaW5nc2hhcmVfcmVwbGFjZSgmaXRlbTEtPmFsdGVybmF0
ZVRpdGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlLT5hbHRlcm5hdGVUaXRs
ZSgpLnV0ZjgoKS5kYXRhKCkpOwotICAgIHJldHVybiBpLT5hbHRlcm5hdGVfdGl0bGU7CisgICAg
cmV0dXJuIGl0ZW0xLT5hbHRlcm5hdGVUaXRsZTsKIH0KIAogdm9pZCBld2tfaGlzdG9yeV9pdGVt
X3RpdGxlX2FsdGVybmF0ZV9zZXQoRXdrX0hpc3RvcnlfSXRlbSogaXRlbSwgY29uc3QgY2hhciog
dGl0bGUpCiB7CiAgICAgRVdLX0hJU1RPUllfSVRFTV9DT1JFX0dFVF9PUl9SRVRVUk4oaXRlbSwg
Y29yZSk7Ci0gICAgaWYgKCFlaW5hX3N0cmluZ3NoYXJlX3JlcGxhY2UoJml0ZW0tPmFsdGVybmF0
ZV90aXRsZSwgdGl0bGUpKQorICAgIGlmICghZWluYV9zdHJpbmdzaGFyZV9yZXBsYWNlKCZpdGVt
LT5hbHRlcm5hdGVUaXRsZSwgdGl0bGUpKQogICAgICAgICByZXR1cm47CiAgICAgY29yZS0+c2V0
QWx0ZXJuYXRlVGl0bGUoV1RGOjpTdHJpbmc6OmZyb21VVEY4KHRpdGxlKSk7CiB9CkBAIC0zMDcs
OSArMzA3LDkgQEAgY29uc3QgY2hhciogZXdrX2hpc3RvcnlfaXRlbV91cmlfb3JpZ2luYWxfZ2V0
KGNvbnN0IEV3a19IaXN0b3J5X0l0ZW0qIGl0ZW0pCiAgICAgRVdLX0hJU1RPUllfSVRFTV9DT1JF
X0dFVF9PUl9SRVRVUk4oaXRlbSwgY29yZSwgMCk7CiAgICAgLy8gaGlkZSB0aGUgZm9sbG93aW5n
IG9wdGltemF0aW9uIGZyb20gb3V0c2lkZQogICAgIEV3a19IaXN0b3J5X0l0ZW0qIGkgPSBjb25z
dF9jYXN0PEV3a19IaXN0b3J5X0l0ZW0qPihpdGVtKTsKLSAgICBlaW5hX3N0cmluZ3NoYXJlX3Jl
cGxhY2UoJmktPm9yaWdpbmFsX3VyaSwKKyAgICBlaW5hX3N0cmluZ3NoYXJlX3JlcGxhY2UoJmkt
Pm9yaWdpbmFsVXJpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlLT5vcmlnaW5h
bFVSTFN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotICAgIHJldHVybiBpLT5vcmlnaW5hbF91cmk7
CisgICAgcmV0dXJuIGktPm9yaWdpbmFsVXJpOwogfQogCiBkb3VibGUgZXdrX2hpc3RvcnlfaXRl
bV90aW1lX2xhc3RfdmlzaXRlZF9nZXQoY29uc3QgRXdrX0hpc3RvcnlfSXRlbSogaXRlbSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfanMuY3BwIGIvU291cmNlL1dlYktp
dC9lZmwvZXdrL2V3a19qcy5jcHAKaW5kZXggNDJjZmRmZWMxYTViNDgzZjRmYTEzZjVlOGM4YzQx
NWQ0ZWY2MDFjMS4uZjViM2FlNTZiNTA1YzMzOWJiZDVmYjI5MTcwZDM3ZjEyZDJjOWI1NCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19qcy5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9lZmwvZXdrL2V3a19qcy5jcHAKQEAgLTg1LDEwICs4NSwxMCBAQCBzdGF0aWMgRWluYV9C
b29sIGV3a19qc192YXJpYW50X3RvX25wdmFyaWFudChjb25zdCBFd2tfSlNfVmFyaWFudCogZGF0
YSwgTlBWYXJpYQogLy8gVGhlc2UgbWV0aG9kcyBhcmUgdXNlZCBieSBOUEFJLCB0aGF0cyB0aGUg
cmVhc29uIHRvIHVzZSBib29sIGluc3RlYWQgb2YgRWluYV9Cb29sLgogc3RhdGljIGJvb2wgZXdr
X2pzX3Byb3BlcnR5X2hhcyhOUE9iamVjdCogbnBPYmplY3QsIE5QSWRlbnRpZmllciBuYW1lKQog
ewotICAgIEV3a19KU19PYmplY3QqIG9iaiA9IHJlaW50ZXJwcmV0X2Nhc3Q8RXdrX0pTX09iamVj
dCo+KG5wT2JqZWN0KTsKKyAgICBFd2tfSlNfT2JqZWN0KiBvYmplY3QgPSByZWludGVycHJldF9j
YXN0PEV3a19KU19PYmplY3QqPihucE9iamVjdCk7CiAKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTl9WQUwobnBPYmplY3QsIGZhbHNlKTsKLSAgICBFSU5BX01BR0lDX0NIRUNLX09SX1JF
VFVSTihvYmosIGZhbHNlKTsKKyAgICBFSU5BX01BR0lDX0NIRUNLX09SX1JFVFVSTihvYmplY3Qs
IGZhbHNlKTsKIAogICAgIGlmICghX05QTl9JZGVudGlmaWVySXNTdHJpbmcobmFtZSkpIHsKICAg
ICAgICAgRVJSKCJpbnQgTlBJZGVudGlmaWVyIGlzIG5vdCBzdXBwb3J0ZWQuIik7CkBAIC05Niw3
ICs5Niw3IEBAIHN0YXRpYyBib29sIGV3a19qc19wcm9wZXJ0eV9oYXMoTlBPYmplY3QqIG5wT2Jq
ZWN0LCBOUElkZW50aWZpZXIgbmFtZSkKICAgICB9CiAKICAgICBjaGFyKiBwcm9wX25hbWUgPSBf
TlBOX1VURjhGcm9tSWRlbnRpZmllcihuYW1lKTsKLSAgICBib29sIGZhaWwgPSBlaW5hX2hhc2hf
ZmluZChvYmotPnByb3BlcnRpZXMsIHByb3BfbmFtZSk7IC8vIEZJWE1FOiBzaG91bGQgc2VhcmNo
IG1ldGhvZHMgdG9vPworICAgIGJvb2wgZmFpbCA9IGVpbmFfaGFzaF9maW5kKG9iamVjdC0+cHJv
cGVydGllcywgcHJvcF9uYW1lKTsgLy8gRklYTUU6IHNob3VsZCBzZWFyY2ggbWV0aG9kcyB0b28/
CiAgICAgZnJlZShwcm9wX25hbWUpOwogCiAgICAgcmV0dXJuIGZhaWw7CkBAIC0xMDQsMTMgKzEw
NCwxMyBAQCBzdGF0aWMgYm9vbCBld2tfanNfcHJvcGVydHlfaGFzKE5QT2JqZWN0KiBucE9iamVj
dCwgTlBJZGVudGlmaWVyIG5hbWUpCiAKIHN0YXRpYyBib29sIGV3a19qc19wcm9wZXJ0eV9nZXQo
TlBPYmplY3QqIG5wT2JqZWN0LCBOUElkZW50aWZpZXIgbmFtZSwgTlBWYXJpYW50KiByZXN1bHQp
CiB7Ci0gICAgRXdrX0pTX09iamVjdCogb2JqID0gcmVpbnRlcnByZXRfY2FzdDxFd2tfSlNfT2Jq
ZWN0Kj4obnBPYmplY3QpOworICAgIEV3a19KU19PYmplY3QqIG9iamVjdCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8RXdrX0pTX09iamVjdCo+KG5wT2JqZWN0KTsKICAgICBFd2tfSlNfVmFyaWFudCogdmFs
dWU7CiAgICAgRXdrX0pTX1Byb3BlcnR5KiBwcm9wOwogICAgIGJvb2wgZmFpbCA9IGZhbHNlOwog
CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKG5wT2JqZWN0LCBmYWxzZSk7Ci0g
ICAgRUlOQV9NQUdJQ19DSEVDS19PUl9SRVRVUk4ob2JqLCBmYWxzZSk7CisgICAgRUlOQV9NQUdJ
Q19DSEVDS19PUl9SRVRVUk4ob2JqZWN0LCBmYWxzZSk7CiAKICAgICBpZiAoIV9OUE5fSWRlbnRp
ZmllcklzU3RyaW5nKG5hbWUpKSB7CiAgICAgICAgIEVSUigiaW50IE5QSWRlbnRpZmllciBpcyBu
b3Qgc3VwcG9ydGVkLiIpOwpAQCAtMTIzLDE5ICsxMjMsMTkgQEAgc3RhdGljIGJvb2wgZXdrX2pz
X3Byb3BlcnR5X2dldChOUE9iamVjdCogbnBPYmplY3QsIE5QSWRlbnRpZmllciBuYW1lLCBOUFZh
cmlhbnQKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIHByb3AgPSBzdGF0aWNf
Y2FzdDxFd2tfSlNfUHJvcGVydHkqPihlaW5hX2hhc2hfZmluZChvYmotPmNscy0+cHJvcGVydGll
cywgbmFtZSkpOworICAgIHByb3AgPSBzdGF0aWNfY2FzdDxFd2tfSlNfUHJvcGVydHkqPihlaW5h
X2hhc2hfZmluZChvYmplY3QtPmNscy0+cHJvcGVydGllcywgbmFtZSkpOwogICAgIGlmIChwcm9w
ICYmIHByb3AtPmdldCkgeyAvLyBDbGFzcyBoYXMgcHJvcGVydHkgYW5kIHByb3BlcnR5IGhhcyBn
ZXR0ZXIuCi0gICAgICAgIGZhaWwgPSBwcm9wLT5nZXQob2JqLCBwcm9wLT5uYW1lLCB2YWx1ZSk7
CisgICAgICAgIGZhaWwgPSBwcm9wLT5nZXQob2JqZWN0LCBwcm9wLT5uYW1lLCB2YWx1ZSk7CiAg
ICAgICAgIGlmICghZmFpbCkKICAgICAgICAgICAgIGZhaWwgPSBld2tfanNfdmFyaWFudF90b19u
cHZhcmlhbnQodmFsdWUsIHJlc3VsdCk7Ci0gICAgfSBlbHNlIGlmIChvYmotPmNscy0+ZGVmYXVs
dF9wcm9wLmdldCkgeyAvLyBEZWZhdWx0IGdldHRlciBleGlzdHMuCi0gICAgICAgIGZhaWwgPSBv
YmotPmNscy0+ZGVmYXVsdF9wcm9wLmdldChvYmosIHByb3AtPm5hbWUsIHZhbHVlKTsKKyAgICB9
IGVsc2UgaWYgKG9iamVjdC0+Y2xzLT5kZWZhdWx0X3Byb3AuZ2V0KSB7IC8vIERlZmF1bHQgZ2V0
dGVyIGV4aXN0cy4KKyAgICAgICAgZmFpbCA9IG9iamVjdC0+Y2xzLT5kZWZhdWx0X3Byb3AuZ2V0
KG9iamVjdCwgcHJvcC0+bmFtZSwgdmFsdWUpOwogICAgICAgICBpZiAoIWZhaWwpCiAgICAgICAg
ICAgICBmYWlsID0gZXdrX2pzX3ZhcmlhbnRfdG9fbnB2YXJpYW50KHZhbHVlLCByZXN1bHQpOwog
ICAgIH0gZWxzZSB7IC8vIEZhbGxiYWNrIHRvIG9iamVjdHMgaGFzaCBtYXAuCiAgICAgICAgIGNo
YXIqIHByb3BfbmFtZSA9IF9OUE5fVVRGOEZyb21JZGVudGlmaWVyKG5hbWUpOwogICAgICAgICBm
cmVlKHZhbHVlKTsKLSAgICAgICAgdmFsdWUgPSBzdGF0aWNfY2FzdDxFd2tfSlNfVmFyaWFudCo+
KGVpbmFfaGFzaF9maW5kKG9iai0+cHJvcGVydGllcywgcHJvcF9uYW1lKSk7CisgICAgICAgIHZh
bHVlID0gc3RhdGljX2Nhc3Q8RXdrX0pTX1ZhcmlhbnQqPihlaW5hX2hhc2hfZmluZChvYmplY3Qt
PnByb3BlcnRpZXMsIHByb3BfbmFtZSkpOwogICAgICAgICBmcmVlKHByb3BfbmFtZSk7CiAgICAg
ICAgIGlmICh2YWx1ZSkKICAgICAgICAgICAgIHJldHVybiBld2tfanNfdmFyaWFudF90b19ucHZh
cmlhbnQodmFsdWUsIHJlc3VsdCk7CkBAIC0xNDcsMTMgKzE0NywxMyBAQCBzdGF0aWMgYm9vbCBl
d2tfanNfcHJvcGVydHlfZ2V0KE5QT2JqZWN0KiBucE9iamVjdCwgTlBJZGVudGlmaWVyIG5hbWUs
IE5QVmFyaWFudAogCiBzdGF0aWMgYm9vbCBld2tfanNfcHJvcGVydHlfc2V0KE5QT2JqZWN0KiBu
cE9iamVjdCwgTlBJZGVudGlmaWVyIG5hbWUsIGNvbnN0IE5QVmFyaWFudCogbnBWYWx1ZSkKIHsK
LSAgICBFd2tfSlNfT2JqZWN0KiBvYmogPSByZWludGVycHJldF9jYXN0PEV3a19KU19PYmplY3Qq
PihucE9iamVjdCk7CisgICAgRXdrX0pTX09iamVjdCogb2JqZWN0ID0gcmVpbnRlcnByZXRfY2Fz
dDxFd2tfSlNfT2JqZWN0Kj4obnBPYmplY3QpOwogICAgIEV3a19KU19WYXJpYW50KiB2YWx1ZTsK
ICAgICBFd2tfSlNfUHJvcGVydHkqIHByb3A7CiAgICAgYm9vbCBmYWlsID0gZmFsc2U7CiAKICAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwobnBPYmosIGZhbHNlKTsKLSAgICBFSU5B
X01BR0lDX0NIRUNLX09SX1JFVFVSTihvYmosIGZhbHNlKTsKKyAgICBFSU5BX01BR0lDX0NIRUNL
X09SX1JFVFVSTihvYmplY3QsIGZhbHNlKTsKIAogICAgIGlmICghX05QTl9JZGVudGlmaWVySXNT
dHJpbmcobmFtZSkpIHsKICAgICAgICAgRVJSKCJpbnQgTlBJZGVudGlmaWVyIGlzIG5vdCBzdXBw
b3J0ZWQuIik7CkBAIC0xNjgsMTMgKzE2OCwxMyBAQCBzdGF0aWMgYm9vbCBld2tfanNfcHJvcGVy
dHlfc2V0KE5QT2JqZWN0KiBucE9iamVjdCwgTlBJZGVudGlmaWVyIG5hbWUsIGNvbnN0IE5QVgog
CiAgICAgZXdrX2pzX25wdmFyaWFudF90b192YXJpYW50KHZhbHVlLCBucFZhbHVlKTsKICAgICBj
aGFyKiBwcm9wX25hbWUgPSBfTlBOX1VURjhGcm9tSWRlbnRpZmllcihuYW1lKTsKLSAgICBwcm9w
ID0gc3RhdGljX2Nhc3Q8RXdrX0pTX1Byb3BlcnR5Kj4oZWluYV9oYXNoX2ZpbmQob2JqLT5jbHMt
PnByb3BlcnRpZXMsIHByb3BfbmFtZSkpOworICAgIHByb3AgPSBzdGF0aWNfY2FzdDxFd2tfSlNf
UHJvcGVydHkqPihlaW5hX2hhc2hfZmluZChvYmplY3QtPmNscy0+cHJvcGVydGllcywgcHJvcF9u
YW1lKSk7CiAgICAgaWYgKHByb3AgJiYgcHJvcC0+c2V0KQotICAgICAgICBmYWlsID0gcHJvcC0+
c2V0KG9iaiwgcHJvcC0+bmFtZSwgdmFsdWUpOyAvLyBDbGFzcyBoYXMgcHJvcGVydHkgYW5kIHBy
b3BlcnR5IGhhcyBzZXR0ZXIuCi0gICAgZWxzZSBpZiAob2JqLT5jbHMtPmRlZmF1bHRfcHJvcC5z
ZXQpCi0gICAgICAgIGZhaWwgPSBvYmotPmNscy0+ZGVmYXVsdF9wcm9wLnNldChvYmosIHByb3Bf
bmFtZSwgdmFsdWUpOyAvLyBEZWZhdWx0IGdldHRlciBleGlzdHMuCisgICAgICAgIGZhaWwgPSBw
cm9wLT5zZXQob2JqZWN0LCBwcm9wLT5uYW1lLCB2YWx1ZSk7IC8vIENsYXNzIGhhcyBwcm9wZXJ0
eSBhbmQgcHJvcGVydHkgaGFzIHNldHRlci4KKyAgICBlbHNlIGlmIChvYmplY3QtPmNscy0+ZGVm
YXVsdF9wcm9wLnNldCkKKyAgICAgICAgZmFpbCA9IG9iamVjdC0+Y2xzLT5kZWZhdWx0X3Byb3Au
c2V0KG9iamVjdCwgcHJvcF9uYW1lLCB2YWx1ZSk7IC8vIERlZmF1bHQgZ2V0dGVyIGV4aXN0cy4K
ICAgICBlbHNlIHsgLy8gRmFsbGJhY2sgdG8gb2JqZWN0cyBoYXNoIG1hcC4KLSAgICAgICAgdm9p
ZCogb2xkID0gZWluYV9oYXNoX3NldChvYmotPnByb3BlcnRpZXMsIHByb3BfbmFtZSwgdmFsdWUp
OworICAgICAgICB2b2lkKiBvbGQgPSBlaW5hX2hhc2hfc2V0KG9iamVjdC0+cHJvcGVydGllcywg
cHJvcF9uYW1lLCB2YWx1ZSk7CiAgICAgICAgIGZyZWUob2xkKTsKICAgICAgICAgZmFpbCA9IHRy
dWU7CiAgICAgfQpAQCAtMTg1LDEyICsxODUsMTIgQEAgc3RhdGljIGJvb2wgZXdrX2pzX3Byb3Bl
cnR5X3NldChOUE9iamVjdCogbnBPYmplY3QsIE5QSWRlbnRpZmllciBuYW1lLCBjb25zdCBOUFYK
IAogc3RhdGljIGJvb2wgZXdrX2pzX3Byb3BlcnR5X3JlbW92ZShOUE9iamVjdCogbnBPYmplY3Qs
IE5QSWRlbnRpZmllciBuYW1lKQogewotICAgIEV3a19KU19PYmplY3QqIG9iaiA9IHJlaW50ZXJw
cmV0X2Nhc3Q8RXdrX0pTX09iamVjdCo+KG5wT2JqZWN0KTsKKyAgICBFd2tfSlNfT2JqZWN0KiBv
YmplY3QgPSByZWludGVycHJldF9jYXN0PEV3a19KU19PYmplY3QqPihucE9iamVjdCk7CiAgICAg
RXdrX0pTX1Byb3BlcnR5KiBwcm9wOwogICAgIGJvb2wgZmFpbCA9IGZhbHNlOwogCiAgICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKG5wT2JqZWN0LCBmYWxzZSk7Ci0gICAgRUlOQV9N
QUdJQ19DSEVDS19PUl9SRVRVUk4ob2JqLCBmYWxzZSk7CisgICAgRUlOQV9NQUdJQ19DSEVDS19P
Ul9SRVRVUk4ob2JqZWN0LCBmYWxzZSk7CiAKICAgICBpZiAoIV9OUE5fSWRlbnRpZmllcklzU3Ry
aW5nKG5hbWUpKSB7CiAgICAgICAgIEVSUigiaW50IE5QSWRlbnRpZmllciBpcyBub3Qgc3VwcG9y
dGVkLiIpOwpAQCAtMTk4LDEzICsxOTgsMTMgQEAgc3RhdGljIGJvb2wgZXdrX2pzX3Byb3BlcnR5
X3JlbW92ZShOUE9iamVjdCogbnBPYmplY3QsIE5QSWRlbnRpZmllciBuYW1lKQogICAgIH0KIAog
ICAgIGNoYXIqIHByb3BfbmFtZSA9IF9OUE5fVVRGOEZyb21JZGVudGlmaWVyKG5hbWUpOwotICAg
IHByb3AgPSBzdGF0aWNfY2FzdDxFd2tfSlNfUHJvcGVydHkqPihlaW5hX2hhc2hfZmluZChvYmot
PmNscy0+cHJvcGVydGllcywgcHJvcF9uYW1lKSk7CisgICAgcHJvcCA9IHN0YXRpY19jYXN0PEV3
a19KU19Qcm9wZXJ0eSo+KGVpbmFfaGFzaF9maW5kKG9iamVjdC0+Y2xzLT5wcm9wZXJ0aWVzLCBw
cm9wX25hbWUpKTsKICAgICBpZiAocHJvcCAmJiBwcm9wLT5kZWwpCi0gICAgICAgIGZhaWwgPSBw
cm9wLT5kZWwob2JqLCBwcm9wLT5uYW1lKTsgLy8gQ2xhc3MgaGFzIHByb3BlcnR5IGFuZCBwcm9w
ZXJ0eSBoYXMgZ2V0dGVyLgotICAgIGVsc2UgaWYgKG9iai0+Y2xzLT5kZWZhdWx0X3Byb3AuZGVs
KQotICAgICAgICBmYWlsID0gb2JqLT5jbHMtPmRlZmF1bHRfcHJvcC5kZWwob2JqLCBwcm9wX25h
bWUpOworICAgICAgICBmYWlsID0gcHJvcC0+ZGVsKG9iamVjdCwgcHJvcC0+bmFtZSk7IC8vIENs
YXNzIGhhcyBwcm9wZXJ0eSBhbmQgcHJvcGVydHkgaGFzIGdldHRlci4KKyAgICBlbHNlIGlmIChv
YmplY3QtPmNscy0+ZGVmYXVsdF9wcm9wLmRlbCkKKyAgICAgICAgZmFpbCA9IG9iamVjdC0+Y2xz
LT5kZWZhdWx0X3Byb3AuZGVsKG9iamVjdCwgcHJvcF9uYW1lKTsKICAgICBlbHNlCi0gICAgICAg
IGZhaWwgPSBlaW5hX2hhc2hfZGVsKG9iai0+cHJvcGVydGllcywgcHJvcF9uYW1lLCAwKTsKKyAg
ICAgICAgZmFpbCA9IGVpbmFfaGFzaF9kZWwob2JqZWN0LT5wcm9wZXJ0aWVzLCBwcm9wX25hbWUs
IDApOwogCiAgICAgZnJlZShwcm9wX25hbWUpOwogICAgIHJldHVybiBmYWlsOwpAQCAtMjEyLDIy
ICsyMTIsMjIgQEAgc3RhdGljIGJvb2wgZXdrX2pzX3Byb3BlcnR5X3JlbW92ZShOUE9iamVjdCog
bnBPYmplY3QsIE5QSWRlbnRpZmllciBuYW1lKQogCiBzdGF0aWMgYm9vbCBld2tfanNfcHJvcGVy
dGllc19lbnVtZXJhdGUoTlBPYmplY3QqIG5wT2JqZWN0LCBOUElkZW50aWZpZXIqKiB2YWx1ZSwg
dWludDMyX3QqIGNvdW50KQogewotICAgIEV3a19KU19PYmplY3QqIG9iaiA9IHJlaW50ZXJwcmV0
X2Nhc3Q8RXdrX0pTX09iamVjdCo+KG5wT2JqZWN0KTsKKyAgICBFd2tfSlNfT2JqZWN0KiBvYmpl
Y3QgPSByZWludGVycHJldF9jYXN0PEV3a19KU19PYmplY3QqPihucE9iamVjdCk7CiAgICAgRWlu
YV9JdGVyYXRvciogaXQ7CiAgICAgY2hhcioga2V5OwogICAgIGludCBpID0gMDsKIAogICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChucE9iamVjdCwgZmFsc2UpOwotICAgIEVJTkFf
TUFHSUNfQ0hFQ0tfT1JfUkVUVVJOKG9iaiwgZmFsc2UpOworICAgIEVJTkFfTUFHSUNfQ0hFQ0tf
T1JfUkVUVVJOKG9iamVjdCwgZmFsc2UpOwogCi0gICAgKmNvdW50ID0gZWluYV9oYXNoX3BvcHVs
YXRpb24ob2JqLT5wcm9wZXJ0aWVzKTsKKyAgICAqY291bnQgPSBlaW5hX2hhc2hfcG9wdWxhdGlv
bihvYmplY3QtPnByb3BlcnRpZXMpOwogICAgICp2YWx1ZSA9IHN0YXRpY19jYXN0PE5QSWRlbnRp
Zmllcio+KG1hbGxvYyhzaXplb2YoTlBJZGVudGlmaWVyKSAqICpjb3VudCkpOwogICAgIGlmICgh
KnZhbHVlKSB7CiAgICAgICAgIEVSUigiQ291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgTlBJ
ZGVudGlmaWVyIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBpdCA9IGVp
bmFfaGFzaF9pdGVyYXRvcl9rZXlfbmV3KG9iai0+cHJvcGVydGllcyk7CisgICAgaXQgPSBlaW5h
X2hhc2hfaXRlcmF0b3Jfa2V5X25ldyhvYmplY3QtPnByb3BlcnRpZXMpOwogICAgIEVJTkFfSVRF
UkFUT1JfRk9SRUFDSChpdCwga2V5KQogICAgICAgICAoKnZhbHVlKVtpKytdID0gX05QTl9HZXRT
dHJpbmdJZGVudGlmaWVyKGtleSk7CiAKQEAgLTIzNywzNCArMjM3LDM0IEBAIHN0YXRpYyBib29s
IGV3a19qc19wcm9wZXJ0aWVzX2VudW1lcmF0ZShOUE9iamVjdCogbnBPYmplY3QsIE5QSWRlbnRp
ZmllcioqIHZhbHVlCiAKIHN0YXRpYyBib29sIGV3a19qc19tZXRob2RfaGFzKE5QT2JqZWN0KiBu
cE9iamVjdCwgTlBJZGVudGlmaWVyIG5hbWUpCiB7Ci0gICAgRXdrX0pTX09iamVjdCogb2JqID0g
cmVpbnRlcnByZXRfY2FzdDxFd2tfSlNfT2JqZWN0Kj4obnBPYmplY3QpOworICAgIEV3a19KU19P
YmplY3QqIG9iamVjdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8RXdrX0pTX09iamVjdCo+KG5wT2JqZWN0
KTsKIAogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChucE9iamVjdCwgZmFsc2Up
OwotICAgIEVJTkFfTUFHSUNfQ0hFQ0tfT1JfUkVUVVJOKG9iaiwgZmFsc2UpOworICAgIEVJTkFf
TUFHSUNfQ0hFQ0tfT1JfUkVUVVJOKG9iamVjdCwgZmFsc2UpOwogCiAgICAgaWYgKCFfTlBOX0lk
ZW50aWZpZXJJc1N0cmluZyhuYW1lKSkgewogICAgICAgICBFUlIoImludCBOUElkZW50aWZpZXIg
aXMgbm90IHN1cHBvcnRlZC4iKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBy
ZXR1cm4gZWluYV9oYXNoX2ZpbmQob2JqLT5jbHMtPm1ldGhvZHMsIG5hbWUpOyAvLyBSZXR1cm5z
IHBvaW50ZXIgaWYgZm91bmQodHJ1ZSksIDAoZmFsc2UpIG90aGVyd2lzZS4KKyAgICByZXR1cm4g
ZWluYV9oYXNoX2ZpbmQob2JqZWN0LT5jbHMtPm1ldGhvZHMsIG5hbWUpOyAvLyBSZXR1cm5zIHBv
aW50ZXIgaWYgZm91bmQodHJ1ZSksIDAoZmFsc2UpIG90aGVyd2lzZS4KIH0KIAogc3RhdGljIGJv
b2wgZXdrX2pzX21ldGhvZF9pbnZva2UoTlBPYmplY3QqIG5wT2JqZWN0LCBOUElkZW50aWZpZXIg
bmFtZSwgY29uc3QgTlBWYXJpYW50KiBucEFyZ3MsIHVpbnQzMl90IG5wQXJnQ291bnQsIE5QVmFy
aWFudCogcmVzdWx0KQogewotICAgIEV3a19KU19PYmplY3QqIG9iaiA9IHJlaW50ZXJwcmV0X2Nh
c3Q8RXdrX0pTX09iamVjdCo+KG5wT2JqZWN0KTsKKyAgICBFd2tfSlNfT2JqZWN0KiBvYmplY3Qg
PSByZWludGVycHJldF9jYXN0PEV3a19KU19PYmplY3QqPihucE9iamVjdCk7CiAgICAgRXdrX0pT
X01ldGhvZCogbWV0aG9kOwogICAgIEV3a19KU19WYXJpYW50KiBhcmdzOwogICAgIEV3a19KU19W
YXJpYW50KiByZXRfdmFsOwogCiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKG5w
T2JqZWN0LCBmYWxzZSk7Ci0gICAgRUlOQV9NQUdJQ19DSEVDS19PUl9SRVRVUk4ob2JqLCBmYWxz
ZSk7CisgICAgRUlOQV9NQUdJQ19DSEVDS19PUl9SRVRVUk4ob2JqZWN0LCBmYWxzZSk7CiAKICAg
ICBpZiAoIV9OUE5fSWRlbnRpZmllcklzU3RyaW5nKG5hbWUpKSB7CiAgICAgICAgIEVSUigiaW50
IE5QSWRlbnRpZmllciBpcyBub3Qgc3VwcG9ydGVkLiIpOwogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQogCi0gICAgbWV0aG9kID0gc3RhdGljX2Nhc3Q8RXdrX0pTX01ldGhvZCo+KGVpbmFf
aGFzaF9maW5kKG9iai0+Y2xzLT5tZXRob2RzLCBuYW1lKSk7CisgICAgbWV0aG9kID0gc3RhdGlj
X2Nhc3Q8RXdrX0pTX01ldGhvZCo+KGVpbmFfaGFzaF9maW5kKG9iamVjdC0+Y2xzLT5tZXRob2Rz
LCBuYW1lKSk7CiAgICAgaWYgKCFtZXRob2QpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAt
Mjc2LDcgKzI3Niw3IEBAIHN0YXRpYyBib29sIGV3a19qc19tZXRob2RfaW52b2tlKE5QT2JqZWN0
KiBucE9iamVjdCwgTlBJZGVudGlmaWVyIG5hbWUsIGNvbnN0IE5QCiAKICAgICBmb3IgKHVpbnQz
Ml90IGkgPSAwOyBpIDwgbnBBcmdDb3VudDsgaSsrKQogICAgICAgICBld2tfanNfbnB2YXJpYW50
X3RvX3ZhcmlhbnQoJmFyZ3NbaV0sICZucEFyZ3NbaV0pOwotICAgIHJldF92YWwgPSBtZXRob2Qt
Pmludm9rZShvYmosIGFyZ3MsIG5wQXJnQ291bnQpOworICAgIHJldF92YWwgPSBtZXRob2QtPmlu
dm9rZShvYmplY3QsIGFyZ3MsIG5wQXJnQ291bnQpOwogICAgIGV3a19qc192YXJpYW50X3RvX25w
dmFyaWFudChyZXRfdmFsLCByZXN1bHQpOwogCiAgICAgZXdrX2pzX3ZhcmlhbnRfZnJlZShyZXRf
dmFsKTsKQEAgLTM5Myw3ICszOTMsNyBAQCBzdGF0aWMgRXdrX0pTX09iamVjdCogZXdrX2pzX25w
b2JqZWN0X3RvX29iamVjdChOUE9iamVjdCogbnBPYmplY3QpCiAgICAgTlBJZGVudGlmaWVyKiB2
YWx1ZXM7CiAgICAgdWludDMyX3QgbnBfcHJvcHNfY291bnQ7CiAgICAgRXdrX0pTX0NsYXNzKiBj
bHM7Ci0gICAgRXdrX0pTX09iamVjdCogb2JqOworICAgIEV3a19KU19PYmplY3QqIG9iamVjdDsK
ICAgICBFaW5hX0l0ZXJhdG9yKiBpdDsKICAgICBFd2tfSlNfUHJvcGVydHkqIHByb3A7CiAgICAg
SmF2YVNjcmlwdE9iamVjdCoganNvOwpAQCAtNDM2LDQyICs0MzYsNDIgQEAgc3RhdGljIEV3a19K
U19PYmplY3QqIGV3a19qc19ucG9iamVjdF90b19vYmplY3QoTlBPYmplY3QqIG5wT2JqZWN0KQog
ICAgIH0KIAogICAgIC8vIENhbid0IHVzZSBld2tfanNfb2JqZWN0X25ldyhjbHMpIGJlY2F1c2Ug
aXQgZXhwZWN0cyBjbHMtPm1ldGEgdG8gZXhpc3QuCi0gICAgb2JqID0gc3RhdGljX2Nhc3Q8RXdr
X0pTX09iamVjdCo+KG1hbGxvYyhzaXplb2YoRXdrX0pTX09iamVjdCkpKTsKLSAgICBpZiAoIW9i
aikgeworICAgIG9iamVjdCA9IHN0YXRpY19jYXN0PEV3a19KU19PYmplY3QqPihtYWxsb2Moc2l6
ZW9mKEV3a19KU19PYmplY3QpKSk7CisgICAgaWYgKCFvYmplY3QpIHsKICAgICAgICAgRVJSKCJD
b3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBld2tfanNfb2JqZWN0Iik7CiAgICAgICAgIGdv
dG8gZXJyb3I7CiAgICAgfQogCiAgICAgZnJlZSh2YWx1ZXMpOwotICAgIEVJTkFfTUFHSUNfU0VU
KG9iaiwgRVdLX0pTX09CSkVDVF9NQUdJQyk7Ci0gICAgb2JqLT5uYW1lID0gMDsKLSAgICBvYmot
PmNscyA9IGNsczsKLSAgICBvYmotPnZpZXcgPSAwOworICAgIEVJTkFfTUFHSUNfU0VUKG9iamVj
dCwgRVdLX0pTX09CSkVDVF9NQUdJQyk7CisgICAgb2JqZWN0LT5uYW1lID0gMDsKKyAgICBvYmpl
Y3QtPmNscyA9IGNsczsKKyAgICBvYmplY3QtPnZpZXcgPSAwOwogCiAgICAganNvID0gcmVpbnRl
cnByZXRfY2FzdDxKYXZhU2NyaXB0T2JqZWN0Kj4obnBPYmplY3QpOwogICAgIGlmICghc3RyY21w
KCJBcnJheSIsIGpzby0+aW1wLT5jbGFzc05hbWUoKS5hc2NpaSgpLmRhdGEoKSkpCi0gICAgICAg
IG9iai0+dHlwZSA9IEVXS19KU19PQkpFQ1RfQVJSQVk7CisgICAgICAgIG9iamVjdC0+dHlwZSA9
IEVXS19KU19PQkpFQ1RfQVJSQVk7CiAgICAgZWxzZSBpZiAoIXN0cmNtcCgiRnVuY3Rpb24iLCBq
c28tPmltcC0+Y2xhc3NOYW1lKCkuYXNjaWkoKS5kYXRhKCkpKQotICAgICAgICBvYmotPnR5cGUg
PSBFV0tfSlNfT0JKRUNUX0ZVTkNUSU9OOworICAgICAgICBvYmplY3QtPnR5cGUgPSBFV0tfSlNf
T0JKRUNUX0ZVTkNUSU9OOwogICAgIGVsc2UKLSAgICAgICAgb2JqLT50eXBlID0gRVdLX0pTX09C
SkVDVF9PQkpFQ1Q7CisgICAgICAgIG9iamVjdC0+dHlwZSA9IEVXS19KU19PQkpFQ1RfT0JKRUNU
OwogCiAgICAgaWYgKGVpbmFfaGFzaF9wb3B1bGF0aW9uKGNscy0+cHJvcGVydGllcykgPCAyNSkK
LSAgICAgICAgb2JqLT5wcm9wZXJ0aWVzID0gZWluYV9oYXNoX3N0cmluZ19zbWFsbF9uZXcoMCk7
CisgICAgICAgIG9iamVjdC0+cHJvcGVydGllcyA9IGVpbmFfaGFzaF9zdHJpbmdfc21hbGxfbmV3
KDApOwogICAgIGVsc2UKLSAgICAgICAgb2JqLT5wcm9wZXJ0aWVzID0gZWluYV9oYXNoX3N0cmlu
Z19zdXBlcmZhc3RfbmV3KDApOworICAgICAgICBvYmplY3QtPnByb3BlcnRpZXMgPSBlaW5hX2hh
c2hfc3RyaW5nX3N1cGVyZmFzdF9uZXcoMCk7CiAKICAgICBpdCA9IGVpbmFfaGFzaF9pdGVyYXRv
cl9kYXRhX25ldyhjbHMtPnByb3BlcnRpZXMpOwogICAgIEVJTkFfSVRFUkFUT1JfRk9SRUFDSChp
dCwgcHJvcCkgewogICAgICAgICBjb25zdCBjaGFyKiBrZXkgPSBwcm9wLT5uYW1lOwogICAgICAg
ICBFd2tfSlNfVmFyaWFudCogdmFsdWUgPSAmcHJvcC0+dmFsdWU7Ci0gICAgICAgIGVpbmFfaGFz
aF9hZGQob2JqLT5wcm9wZXJ0aWVzLCBrZXksIHZhbHVlKTsKKyAgICAgICAgZWluYV9oYXNoX2Fk
ZChvYmplY3QtPnByb3BlcnRpZXMsIGtleSwgdmFsdWUpOwogICAgIH0KIAogICAgIGVpbmFfaXRl
cmF0b3JfZnJlZShpdCk7Ci0gICAgb2JqLT5iYXNlID0gKnJlaW50ZXJwcmV0X2Nhc3Q8SmF2YVNj
cmlwdE9iamVjdCo+KG5wT2JqZWN0KTsKKyAgICBvYmplY3QtPmJhc2UgPSAqcmVpbnRlcnByZXRf
Y2FzdDxKYXZhU2NyaXB0T2JqZWN0Kj4obnBPYmplY3QpOwogCi0gICAgcmV0dXJuIG9iajsKKyAg
ICByZXR1cm4gb2JqZWN0OwogCiBlcnJvcjoKICAgICBld2tfanNfY2xhc3NfZnJlZShjbHMpOwpA
QCAtNTI3LDM3ICs1MjcsMzcgQEAgc3RhdGljIEVpbmFfQm9vbCBld2tfanNfbnB2YXJpYW50X3Rv
X3ZhcmlhbnQoRXdrX0pTX1ZhcmlhbnQqIGRhdGEsIGNvbnN0IE5QVmFyaWEKIAogRXdrX0pTX09i
amVjdCogZXdrX2pzX29iamVjdF9uZXcoY29uc3QgRXdrX0pTX0NsYXNzX01ldGEqIGpzTWV0YUNs
YXNzKQogewotICAgIEV3a19KU19PYmplY3QqIG9iajsKKyAgICBFd2tfSlNfT2JqZWN0KiBvYmpl
Y3Q7CiAKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwobWV0YV9jbHMsIDApOwog
Ci0gICAgb2JqID0gc3RhdGljX2Nhc3Q8RXdrX0pTX09iamVjdCo+KG1hbGxvYyhzaXplb2YoRXdr
X0pTX09iamVjdCkpKTsKLSAgICBpZiAoIW9iaikgeworICAgIG9iamVjdCA9IHN0YXRpY19jYXN0
PEV3a19KU19PYmplY3QqPihtYWxsb2Moc2l6ZW9mKEV3a19KU19PYmplY3QpKSk7CisgICAgaWYg
KCFvYmplY3QpIHsKICAgICAgICAgRVJSKCJDb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBl
d2tfanNfb2JqZWN0Iik7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIEVJTkFfTUFH
SUNfU0VUKG9iaiwgRVdLX0pTX09CSkVDVF9NQUdJQyk7Ci0gICAgb2JqLT5jbHMgPSBld2tfanNf
Y2xhc3NfbmV3KGpzTWV0YUNsYXNzKTsKLSAgICBvYmotPnZpZXcgPSAwOwotICAgIG9iai0+bmFt
ZSA9IDA7Ci0gICAgb2JqLT50eXBlID0gRVdLX0pTX09CSkVDVF9PQkpFQ1Q7CisgICAgRUlOQV9N
QUdJQ19TRVQob2JqZWN0LCBFV0tfSlNfT0JKRUNUX01BR0lDKTsKKyAgICBvYmplY3QtPmNscyA9
IGV3a19qc19jbGFzc19uZXcoanNNZXRhQ2xhc3MpOworICAgIG9iamVjdC0+dmlldyA9IDA7Cisg
ICAgb2JqZWN0LT5uYW1lID0gMDsKKyAgICBvYmplY3QtPnR5cGUgPSBFV0tfSlNfT0JKRUNUX09C
SkVDVDsKIAotICAgIGlmIChlaW5hX2hhc2hfcG9wdWxhdGlvbihvYmotPmNscy0+cHJvcGVydGll
cykgPCAyNSkKLSAgICAgICAgb2JqLT5wcm9wZXJ0aWVzID0gZWluYV9oYXNoX3N0cmluZ19zbWFs
bF9uZXcocmVpbnRlcnByZXRfY2FzdDxFaW5hX0ZyZWVfQ2I+KGV3a19qc192YXJpYW50X2ZyZWUp
KTsKKyAgICBpZiAoZWluYV9oYXNoX3BvcHVsYXRpb24ob2JqZWN0LT5jbHMtPnByb3BlcnRpZXMp
IDwgMjUpCisgICAgICAgIG9iamVjdC0+cHJvcGVydGllcyA9IGVpbmFfaGFzaF9zdHJpbmdfc21h
bGxfbmV3KHJlaW50ZXJwcmV0X2Nhc3Q8RWluYV9GcmVlX0NiPihld2tfanNfdmFyaWFudF9mcmVl
KSk7CiAgICAgZWxzZQotICAgICAgICBvYmotPnByb3BlcnRpZXMgPSBlaW5hX2hhc2hfc3RyaW5n
X3N1cGVyZmFzdF9uZXcocmVpbnRlcnByZXRfY2FzdDxFaW5hX0ZyZWVfQ2I+KGV3a19qc192YXJp
YW50X2ZyZWUpKTsKKyAgICAgICAgb2JqZWN0LT5wcm9wZXJ0aWVzID0gZWluYV9oYXNoX3N0cmlu
Z19zdXBlcmZhc3RfbmV3KHJlaW50ZXJwcmV0X2Nhc3Q8RWluYV9GcmVlX0NiPihld2tfanNfdmFy
aWFudF9mcmVlKSk7CiAKLSAgICBmb3IgKGludCBpID0gMDsgb2JqLT5jbHMtPm1ldGEtPnByb3Bl
cnRpZXMgJiYgb2JqLT5jbHMtPm1ldGEtPnByb3BlcnRpZXNbaV0ubmFtZTsgaSsrKSB7Ci0gICAg
ICAgIEV3a19KU19Qcm9wZXJ0eSBwcm9wID0gb2JqLT5jbHMtPm1ldGEtPnByb3BlcnRpZXNbaV07
Ci0gICAgICAgIGNvbnN0IGNoYXIqIGtleSA9IG9iai0+Y2xzLT5tZXRhLT5wcm9wZXJ0aWVzW2ld
Lm5hbWU7CisgICAgZm9yIChpbnQgaSA9IDA7IG9iamVjdC0+Y2xzLT5tZXRhLT5wcm9wZXJ0aWVz
ICYmIG9iamVjdC0+Y2xzLT5tZXRhLT5wcm9wZXJ0aWVzW2ldLm5hbWU7IGkrKykgeworICAgICAg
ICBFd2tfSlNfUHJvcGVydHkgcHJvcCA9IG9iamVjdC0+Y2xzLT5tZXRhLT5wcm9wZXJ0aWVzW2ld
OworICAgICAgICBjb25zdCBjaGFyKiBrZXkgPSBvYmplY3QtPmNscy0+bWV0YS0+cHJvcGVydGll
c1tpXS5uYW1lOwogICAgICAgICBFd2tfSlNfVmFyaWFudCogdmFsdWUgPSBzdGF0aWNfY2FzdDxF
d2tfSlNfVmFyaWFudCo+KG1hbGxvYyhzaXplb2YoRXdrX0pTX1ZhcmlhbnQpKSk7CiAgICAgICAg
IGlmICghdmFsdWUpIHsKICAgICAgICAgICAgIEVSUigiQ291bGQgbm90IGFsbG9jYXRlIG1lbW9y
eSBmb3IgZXdrX2pzX3ZhcmlhbnQiKTsKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAg
IH0KICAgICAgICAgaWYgKHByb3AuZ2V0KQotICAgICAgICAgICAgcHJvcC5nZXQob2JqLCBrZXks
IHZhbHVlKTsKKyAgICAgICAgICAgIHByb3AuZ2V0KG9iamVjdCwga2V5LCB2YWx1ZSk7CiAgICAg
ICAgIGVsc2UgewogICAgICAgICAgICAgdmFsdWUtPnR5cGUgPSBwcm9wLnZhbHVlLnR5cGU7CiAg
ICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLT50eXBlKSB7CkBAIC01ODIsMTUgKzU4MiwxNSBAQCBF
d2tfSlNfT2JqZWN0KiBld2tfanNfb2JqZWN0X25ldyhjb25zdCBFd2tfSlNfQ2xhc3NfTWV0YSog
anNNZXRhQ2xhc3MpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KLSAgICAgICAgZWluYV9oYXNoX2FkZChvYmotPnByb3BlcnRpZXMsIGtleSwgdmFsdWUp
OworICAgICAgICBlaW5hX2hhc2hfYWRkKG9iamVjdC0+cHJvcGVydGllcywga2V5LCB2YWx1ZSk7
CiAgICAgfQogCi0gICAgb2JqLT5iYXNlLm9iamVjdC5yZWZlcmVuY2VDb3VudCA9IDE7Ci0gICAg
b2JqLT5iYXNlLm9iamVjdC5fY2xhc3MgPSAmRVdLX05QQ0xBU1M7Ci0gICAgcmV0dXJuIG9iajsK
KyAgICBvYmplY3QtPmJhc2Uub2JqZWN0LnJlZmVyZW5jZUNvdW50ID0gMTsKKyAgICBvYmplY3Qt
PmJhc2Uub2JqZWN0Ll9jbGFzcyA9ICZFV0tfTlBDTEFTUzsKKyAgICByZXR1cm4gb2JqZWN0Owog
CiBlcnJvcjoKLSAgICBld2tfanNfb2JqZWN0X2ZyZWUob2JqKTsKKyAgICBld2tfanNfb2JqZWN0
X2ZyZWUob2JqZWN0KTsKICAgICByZXR1cm4gMDsKIH0KIApAQCAtNjYyLDcgKzY2Miw3IEBAIEV3
a19KU19PYmplY3RfVHlwZSBld2tfanNfb2JqZWN0X3R5cGVfZ2V0KEV3a19KU19PYmplY3QqIGpz
T2JqZWN0KQogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChqc09iamVjdCwgRVdL
X0pTX09CSkVDVF9PQkpFQ1QpOwogICAgIEVJTkFfTUFHSUNfQ0hFQ0tfT1JfUkVUVVJOKGpzT29i
amVjdCwgRVdLX0pTX09CSkVDVF9PQkpFQ1QpOwogCi0gICAgcmV0dXJuIG9iai0+dHlwZTsKKyAg
ICByZXR1cm4gb2JqZWN0LT50eXBlOwogfQogCiB2b2lkIGV3a19qc19vYmplY3RfdHlwZV9zZXQo
RXdrX0pTX09iamVjdCoganNPYmplY3QsIEV3a19KU19PYmplY3RfVHlwZSB0eXBlKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19tYWluLmNwcCBiL1NvdXJjZS9XZWJLaXQv
ZWZsL2V3ay9ld2tfbWFpbi5jcHAKaW5kZXggZWIwMzIzMzI0YmFlODFmZTEyOGQ2OGI4MTdhOWVi
YTY4ZjFmNGE2Yi4uYzUyYzAyYjA5ZjkxNTM2YTMyMjgxODg2ZGViM2ZiYjM1YmUwM2ViMCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19tYWluLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2VmbC9ld2svZXdrX21haW4uY3BwCkBAIC01Nyw3ICs1Nyw3IEBACiAjaW5jbHVkZSA8
bGlic291cC9zb3VwLmg+CiAjZW5kaWYKIAotc3RhdGljIGludCBfZXdrX2luaXRfY291bnQgPSAw
Oworc3RhdGljIGludCBfZXdrSW5pdENvdW50ID0gMDsKIAogLyoqCiAgKiBcdmFyICAgICBfZXdr
X2xvZ19kb20KQEAgLTY5LDggKzY5LDggQEAgc3RhdGljIEVpbmFfQm9vbCBfZXdrX2luaXRfYm9k
eSh2b2lkKTsKIAogaW50IGV3a19pbml0KHZvaWQpCiB7Ci0gICAgaWYgKF9ld2tfaW5pdF9jb3Vu
dCkKLSAgICAgICAgcmV0dXJuICsrX2V3a19pbml0X2NvdW50OworICAgIGlmIChfZXdrSW5pdENv
dW50KQorICAgICAgICByZXR1cm4gKytfZXdrSW5pdENvdW50OwogCiAgICAgaWYgKCFlaW5hX2lu
aXQoKSkKICAgICAgICAgZ290byBlcnJvcl9laW5hOwpAQCAtMTA2LDcgKzEwNiw3IEBAIGludCBl
d2tfaW5pdCh2b2lkKQogICAgICAgICBnb3RvIGVycm9yX2VkamU7CiAgICAgfQogCi0gICAgcmV0
dXJuICsrX2V3a19pbml0X2NvdW50OworICAgIHJldHVybiArK19ld2tJbml0Q291bnQ7CiAKIGVy
cm9yX2VkamU6CiAgICAgZWNvcmVfZXZhc19zaHV0ZG93bigpOwpAQCAtMTI1LDkgKzEyNSw5IEBA
IGVycm9yX2VpbmE6CiAKIGludCBld2tfc2h1dGRvd24odm9pZCkKIHsKLSAgICBfZXdrX2luaXRf
Y291bnQtLTsKLSAgICBpZiAoX2V3a19pbml0X2NvdW50KQotICAgICAgICByZXR1cm4gX2V3a19p
bml0X2NvdW50OworICAgIF9ld2tJbml0Q291bnQtLTsKKyAgICBpZiAoX2V3a0luaXRDb3VudCkK
KyAgICAgICAgcmV0dXJuIF9ld2tJbml0Q291bnQ7CiAKICAgICBlY29yZV9ldmFzX3NodXRkb3du
KCk7CiAgICAgZWNvcmVfc2h1dGRvd24oKTsKQEAgLTE3OSwxMCArMTc5LDEwIEBAIEVpbmFfQm9v
bCBfZXdrX2luaXRfYm9keSh2b2lkKQogICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKICAgICB9
CiAKLSAgICBXVEY6OlN0cmluZyB3a2RpciA9IGhvbWUgKyAiLy53ZWJraXQiOwotICAgIGlmIChX
ZWJDb3JlOjptYWtlQWxsRGlyZWN0b3JpZXMod2tkaXIpKSB7Ci0gICAgICAgIGV3a19zZXR0aW5n
c193ZWJfZGF0YWJhc2VfcGF0aF9zZXQod2tkaXIudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIGV3
a19zZXR0aW5nc19jYWNoZV9kaXJlY3RvcnlfcGF0aF9zZXQod2tkaXIudXRmOCgpLmRhdGEoKSk7
CisgICAgV1RGOjpTdHJpbmcgd2Via2l0RGlyZWN0b3J5ID0gaG9tZSArICIvLndlYmtpdCI7Cisg
ICAgaWYgKFdlYkNvcmU6Om1ha2VBbGxEaXJlY3Rvcmllcyh3ZWJraXREaXJlY3RvcnkpKSB7Cisg
ICAgICAgIGV3a19zZXR0aW5nc193ZWJfZGF0YWJhc2VfcGF0aF9zZXQod2Via2l0RGlyZWN0b3J5
LnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBld2tfc2V0dGluZ3NfY2FjaGVfZGlyZWN0b3J5X3Bh
dGhfc2V0KHdlYmtpdERpcmVjdG9yeS51dGY4KCkuZGF0YSgpKTsKICAgICB9CiAKICAgICAvLyBU
T0RPOiB0aGlzIHNob3VsZCBtb3ZlIHRvIFdlYkNvcmUsIGFscmVhZHkgcmVwb3J0ZWQgdG8gd2Vi
a2l0LWd0ayBmb2xrczoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfc2V0
dGluZ3MuY3BwIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19zZXR0aW5ncy5jcHAKaW5kZXgg
ZjBiYTZlYmNiMmY3ZTVkYzExMWZlYzQ1YjVmNmNjZDUwMzk4M2VhNi4uNjRmMTRmODU0YzNkNzBh
M2JkYTgwYmIxNjRjODZjZDExY2U2ZjBlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwv
ZXdrL2V3a19zZXR0aW5ncy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19zZXR0
aW5ncy5jcHAKQEAgLTU2LDI2ICs1NiwyNiBAQCBzdGF0aWMgdWludDY0X3QgX2V3a19kZWZhdWx0
X3dlYl9kYXRhYmFzZV9xdW90YSA9IDEgKiAxMDI0ICogMTAyNDsKIAogc3RhdGljIFdURjo6U3Ry
aW5nIF9ld2tfc2V0dGluZ3Nfd2Via2l0X3BsYXRmb3JtX2dldCgpCiB7Ci0gICAgV1RGOjpTdHJp
bmcgdWFfcGxhdGZvcm07CisgICAgV1RGOjpTdHJpbmcgdWFQbGF0Zm9ybTsKICNpZiBQTEFURk9S
TShYMTEpCi0gICAgdWFfcGxhdGZvcm0gPSAiWDExIjsKKyAgICB1YVBsYXRmb3JtID0gIlgxMSI7
CiAjZWxzZQotICAgIHVhX3BsYXRmb3JtID0gIlVua25vd24iOworICAgIHVhUGxhdGZvcm0gPSAi
VW5rbm93biI7CiAjZW5kaWYKLSAgICByZXR1cm4gdWFfcGxhdGZvcm07CisgICAgcmV0dXJuIHVh
UGxhdGZvcm07CiB9CiAKIHN0YXRpYyBXVEY6OlN0cmluZyBfZXdrX3NldHRpbmdzX3dlYmtpdF9v
c192ZXJzaW9uX2dldCgpCiB7Ci0gICAgV1RGOjpTdHJpbmcgdWFfb3NfdmVyc2lvbjsKKyAgICBX
VEY6OlN0cmluZyB1YU9zVmVyc2lvbjsKICAgICBzdHJ1Y3QgdXRzbmFtZSBuYW1lOwogCiAgICAg
aWYgKHVuYW1lKCZuYW1lKSAhPSAtMSkKLSAgICAgICAgdWFfb3NfdmVyc2lvbiA9IG1ha2VTdHJp
bmcobmFtZS5zeXNuYW1lLCAnICcsIG5hbWUubWFjaGluZSk7CisgICAgICAgIHVhT3NWZXJzaW9u
ID0gbWFrZVN0cmluZyhuYW1lLnN5c25hbWUsICcgJywgbmFtZS5tYWNoaW5lKTsKICAgICBlbHNl
Ci0gICAgICAgIHVhX29zX3ZlcnNpb24gPSAiVW5rbm93biI7CisgICAgICAgIHVhT3NWZXJzaW9u
ID0gIlVua25vd24iOwogCi0gICAgcmV0dXJuIHVhX29zX3ZlcnNpb247CisgICAgcmV0dXJuIHVh
T3NWZXJzaW9uOwogfQogCiB1aW50NjRfdCBld2tfc2V0dGluZ3Nfd2ViX2RhdGFiYXNlX2RlZmF1
bHRfcXVvdGFfZ2V0KCkKQEAgLTI0NSwxMCArMjQ1LDEwIEBAIHZvaWQgZXdrX3NldHRpbmdzX3Jl
cGFpbnRfdGhyb3R0bGluZ19zZXQoZG91YmxlIGRlZmVycmVkUmVwYWludERlbGF5LCBkb3VibGUg
aW5pCiAgKi8KIGNvbnN0IGNoYXIqIGV3a19zZXR0aW5nc19kZWZhdWx0X3VzZXJfYWdlbnRfZ2V0
KHZvaWQpCiB7Ci0gICAgV1RGOjpTdHJpbmcgdWFfdmVyc2lvbiA9IG1ha2VTdHJpbmcoU3RyaW5n
OjpudW1iZXIoV0VCS0lUX1VTRVJfQUdFTlRfTUFKT1JfVkVSU0lPTiksICcuJywgU3RyaW5nOjpu
dW1iZXIoV0VCS0lUX1VTRVJfQUdFTlRfTUlOT1JfVkVSU0lPTiksICcrJyk7Ci0gICAgV1RGOjpT
dHJpbmcgc3RhdGljX3VhID0gbWFrZVN0cmluZygiTW96aWxsYS81LjAgKCIsIF9ld2tfc2V0dGlu
Z3Nfd2Via2l0X3BsYXRmb3JtX2dldCgpLCAiOyAiLCBfZXdrX3NldHRpbmdzX3dlYmtpdF9vc192
ZXJzaW9uX2dldCgpLCAiKSBBcHBsZVdlYktpdC8iLCB1YV92ZXJzaW9uKSArIG1ha2VTdHJpbmco
IiAoS0hUTUwsIGxpa2UgR2Vja28pIFZlcnNpb24vNS4wIFNhZmFyaS8iLCB1YV92ZXJzaW9uKTsK
KyAgICBXVEY6OlN0cmluZyB1YVZlcnNpb24gPSBtYWtlU3RyaW5nKFN0cmluZzo6bnVtYmVyKFdF
QktJVF9VU0VSX0FHRU5UX01BSk9SX1ZFUlNJT04pLCAnLicsIFN0cmluZzo6bnVtYmVyKFdFQktJ
VF9VU0VSX0FHRU5UX01JTk9SX1ZFUlNJT04pLCAnKycpOworICAgIFdURjo6U3RyaW5nIHN0YXRp
Y1VhID0gbWFrZVN0cmluZygiTW96aWxsYS81LjAgKCIsIF9ld2tfc2V0dGluZ3Nfd2Via2l0X3Bs
YXRmb3JtX2dldCgpLCAiOyAiLCBfZXdrX3NldHRpbmdzX3dlYmtpdF9vc192ZXJzaW9uX2dldCgp
LCAiKSBBcHBsZVdlYktpdC8iLCB1YVZlcnNpb24pICsgbWFrZVN0cmluZygiIChLSFRNTCwgbGlr
ZSBHZWNrbykgVmVyc2lvbi81LjAgU2FmYXJpLyIsIHVhVmVyc2lvbik7CiAKLSAgICByZXR1cm4g
ZWluYV9zdHJpbmdzaGFyZV9hZGQoc3RhdGljX3VhLnV0ZjgoKS5kYXRhKCkpOworICAgIHJldHVy
biBlaW5hX3N0cmluZ3NoYXJlX2FkZChzdGF0aWNVYS51dGY4KCkuZGF0YSgpKTsKIH0KIAogRWlu
YV9Cb29sIGV3a19zZXR0aW5nc19jYWNoZV9kaXJlY3RvcnlfcGF0aF9zZXQoY29uc3QgY2hhciog
cGF0aCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmUuY3BwCmluZGV4IDc5NGE5MGM1NzQ2ZjYwZTUyM2I2ZGU1ZTI1MmJiY2IwNTFiMDc1NjQuLjIw
NGVhZGYwNjI5OTA3MmU5MzgxYjE2MTM4MjAzNzExYWQ1OTgzMzMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfYmFja2luZ19zdG9yZS5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9lZmwvZXdrL2V3a190aWxlZF9iYWNraW5nX3N0b3JlLmNwcApAQCAtNTUsMTQgKzU1
LDE0IEBAIHN0cnVjdCBfRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSB7CiAKIHN0cnVjdCBf
RXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0IHsKICAgICBFSU5BX0lO
TElTVDsKLSAgICB1bnNpZ25lZCBsb25nIGNvbCwgcm93OworICAgIHVuc2lnbmVkIGxvbmcgY29s
dW1uLCByb3c7CiAgICAgZmxvYXQgem9vbTsKIH07CiAKIHN0cnVjdCBfRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfRGF0YSB7CiAgICAgRXZhc19PYmplY3RfU21hcnRfQ2xpcHBlZF9EYXRhIGJhc2U7
CiAgICAgRXZhc19PYmplY3QqIHNlbGY7Ci0gICAgRXZhc19PYmplY3QqIGNvbnRlbnRzX2NsaXBw
ZXI7CisgICAgRXZhc19PYmplY3QqIGNvbnRlbnRzQ2xpcHBlcjsKICAgICBzdHJ1Y3QgewogICAg
ICAgICBFaW5hX0lubGlzdCoqIGl0ZW1zOwogICAgICAgICBFdmFzX0Nvb3JkIHgsIHksIHdpZHRo
LCBoZWlnaHQ7CkBAIC03MCw0MiArNzAsNDIgQEAgc3RydWN0IF9Fd2tfVGlsZWRfQmFja2luZ19T
dG9yZV9EYXRhIHsKICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgIEV2YXNfQ29vcmQgd2lk
dGgsIGhlaWdodDsKICAgICAgICAgICAgIGZsb2F0IHpvb207Ci0gICAgICAgICAgICBFaW5hX0Jv
b2wgem9vbV93ZWFrX3Ntb290aF9zY2FsZSA6IDE7CisgICAgICAgICAgICBFaW5hX0Jvb2wgem9v
bVdlYWtTbW9vdGhTY2FsZSA6IDE7CiAgICAgICAgIH0gdGlsZTsKICAgICAgICAgc3RydWN0IHsK
ICAgICAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICAgRXZhc19Db29yZCB4LCB5Owot
ICAgICAgICAgICAgfSBjdXIsIG9sZCwgYmFzZSwgem9vbV9jZW50ZXI7CisgICAgICAgICAgICB9
IGN1ciwgb2xkLCBiYXNlLCB6b29tQ2VudGVyOwogICAgICAgICB9IG9mZnNldDsKICAgICB9IHZp
ZXc7Ci0gICAgRXZhc19Db2xvcnNwYWNlIGNzcGFjZTsKKyAgICBFdmFzX0NvbG9yc3BhY2UgY29s
b3JTcGFjZTsKICAgICBzdHJ1Y3QgewogICAgICAgICBFd2tfVGlsZV9NYXRyaXgqIG1hdHJpeDsK
ICAgICAgICAgc3RydWN0IHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgY29sLCByb3c7Cisg
ICAgICAgICAgICB1bnNpZ25lZCBsb25nIGNvbHVtbiwgcm93OwogICAgICAgICB9IGJhc2U7CiAg
ICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBsb25nIGNvbHMsIHJvd3M7Ci0g
ICAgICAgIH0gY3VyLCBvbGQ7CisgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGNvbHVtbnMsIHJv
d3M7CisgICAgICAgIH0gY3VycmVudCwgb2xkOwogICAgICAgICBFdmFzX0Nvb3JkIHdpZHRoLCBo
ZWlnaHQ7CiAgICAgfSBtb2RlbDsKICAgICBzdHJ1Y3QgewotICAgICAgICBFaW5hX0Jvb2wgKCpj
Yikodm9pZCogZGF0YSwgRXdrX1RpbGUqIHRpbGUsIGNvbnN0IEVpbmFfUmVjdGFuZ2xlKiBhcmVh
KTsKKyAgICAgICAgRWluYV9Cb29sICgqY2FsbGJhY2spKHZvaWQqIGRhdGEsIEV3a19UaWxlKiB0
aWxlLCBjb25zdCBFaW5hX1JlY3RhbmdsZSogYXJlYSk7CiAgICAgICAgIHZvaWQqIGRhdGE7Ci0g
ICAgICAgIEVpbmFfSW5saXN0KiBwcmVfcmVuZGVyX3JlcXVlc3RzOworICAgICAgICBFaW5hX0lu
bGlzdCogcHJlUmVuZGVyUmVxdWVzdHM7CiAgICAgICAgIEVjb3JlX0lkbGVyKiBpZGxlcjsKICAg
ICAgICAgRWluYV9Cb29sIGRpc2FibGVkOwogICAgICAgICBFaW5hX0Jvb2wgc3VzcGVuZCA6IDE7
CiAgICAgfSByZW5kZXI7CiAgICAgc3RydWN0IHsKLSAgICAgICAgdm9pZCogKCpwcmVfY2IpKHZv
aWQqIGRhdGEsIEV2YXNfT2JqZWN0KiBld2tUaWxlKTsKLSAgICAgICAgdm9pZCogcHJlX2RhdGE7
Ci0gICAgICAgIHZvaWQqICgqcG9zdF9jYikodm9pZCogZGF0YSwgdm9pZCogcHJlX2RhdGEsIEV2
YXNfT2JqZWN0KiBld2tUaWxlKTsKLSAgICAgICAgdm9pZCogcG9zdF9kYXRhOworICAgICAgICB2
b2lkKiAoKnByZUNhbGxiYWNrKSh2b2lkKiBkYXRhLCBFdmFzX09iamVjdCogZXdrVGlsZSk7Cisg
ICAgICAgIHZvaWQqIHByZURhdGE7CisgICAgICAgIHZvaWQqICgqcG9zdENhbGxiYWNrKSh2b2lk
KiBkYXRhLCB2b2lkKiBwcmVEYXRhLCBFdmFzX09iamVjdCogZXdrVGlsZSk7CisgICAgICAgIHZv
aWQqIHBvc3REYXRhOwogICAgIH0gcHJvY2VzczsKICAgICBzdHJ1Y3QgewogICAgICAgICBFaW5h
X0Jvb2wgYW55IDogMTsKLSAgICAgICAgRWluYV9Cb29sIHBvcyA6IDE7CisgICAgICAgIEVpbmFf
Qm9vbCBwb3NpdGlvbiA6IDE7CiAgICAgICAgIEVpbmFfQm9vbCBzaXplIDogMTsKICAgICAgICAg
RWluYV9Cb29sIG1vZGVsIDogMTsKICAgICAgICAgRWluYV9Cb29sIG9mZnNldCA6IDE7CkBAIC0x
NDAsMjMgKzE0MCwyMyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX3VwZGF0ZXNfcHJvY2VzcyhFd2tfVGlsZWRfQmFja2luZ19TdAogICAgIGlmIChwcml2LT5y
ZW5kZXIuc3VzcGVuZCB8fCAhZXZhc19vYmplY3RfdmlzaWJsZV9nZXQocHJpdi0+c2VsZikpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIGlmIChwcml2LT5wcm9jZXNzLnByZV9jYikKLSAgICAgICAg
ZGF0YSA9IHByaXYtPnByb2Nlc3MucHJlX2NiKHByaXYtPnByb2Nlc3MucHJlX2RhdGEsIHByaXYt
PnNlbGYpOworICAgIGlmIChwcml2LT5wcm9jZXNzLnByZUNhbGxiYWNrKQorICAgICAgICBkYXRh
ID0gcHJpdi0+cHJvY2Vzcy5wcmVDYWxsYmFjayhwcml2LT5wcm9jZXNzLnByZURhdGEsIHByaXYt
PnNlbGYpOwogCiAgICAgZXdrX3RpbGVfbWF0cml4X3VwZGF0ZXNfcHJvY2Vzcyhwcml2LT5tb2Rl
bC5tYXRyaXgpOwogCi0gICAgaWYgKHByaXYtPnByb2Nlc3MucG9zdF9jYikKLSAgICAgICAgcHJp
di0+cHJvY2Vzcy5wb3N0X2NiKHByaXYtPnByb2Nlc3MucG9zdF9kYXRhLCBkYXRhLCBwcml2LT5z
ZWxmKTsKKyAgICBpZiAocHJpdi0+cHJvY2Vzcy5wb3N0Q2FsbGJhY2spCisgICAgICAgIHByaXYt
PnByb2Nlc3MucG9zdENhbGxiYWNrKHByaXYtPnByb2Nlc3MucG9zdERhdGEsIGRhdGEsIHByaXYt
PnNlbGYpOwogfQogCiBzdGF0aWMgaW50IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9mbHVzaCh2
b2lkKiBkYXRhKQogewogICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYgPSBz
dGF0aWNfY2FzdDxFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKj4oZGF0YSk7Ci0gICAgRXdr
X1RpbGVfVW51c2VkX0NhY2hlKiB0dWMgPSBld2tfdGlsZV9tYXRyaXhfdW51c2VkX2NhY2hlX2dl
dChwcml2LT5tb2RlbC5tYXRyaXgpOworICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSogdGlsZWRV
bnVzZWRDYWNoZSA9IGV3a190aWxlX21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVs
Lm1hdHJpeCk7CiAKLSAgICBpZiAodHVjKSB7CisgICAgaWYgKHRpbGVkVW51c2VkQ2FjaGUpIHsK
ICAgICAgICAgREJHKCJmbHVzaCB1bnVzZWQgdGlsZSBjYWNoZS4iKTsKLSAgICAgICAgZXdrX3Rp
bGVfdW51c2VkX2NhY2hlX2F1dG9fZmx1c2godHVjKTsKKyAgICAgICAgZXdrX3RpbGVfdW51c2Vk
X2NhY2hlX2F1dG9fZmx1c2godGlsZWRVbnVzZWRDYWNoZSk7CiAgICAgfSBlbHNlCiAgICAgICAg
IEVSUigibm8gY2FjaGU/ISIpOwogCkBAIC0yMjIsMjcgKzIyMiwyNyBAQCBzdGF0aWMgdm9pZCBf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9hc3NvY2lhdGUoRXdrX1RpbGVkX0JhY2tpbmdf
U3RvcmVfRGF0YQogCiBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9k
aXNzb2NpYXRlKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYsIEV3a19UaWxlZF9C
YWNraW5nX1N0b3JlX0l0ZW0qIGl0ZW0sIGRvdWJsZSBsYXN0VXNlZCkKIHsKLSAgICBFd2tfVGls
ZV9VbnVzZWRfQ2FjaGUqIHR1YzsKKyAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHRpbGVkVW51
c2VkQ2FjaGU7CiAgICAgZXdrX3RpbGVfaGlkZShpdGVtLT50aWxlKTsKICAgICBpZiAoIWV3a190
aWxlX3Zpc2libGVfZ2V0KGl0ZW0tPnRpbGUpKQogICAgICAgICBldmFzX29iamVjdF9zbWFydF9t
ZW1iZXJfZGVsKGl0ZW0tPnRpbGUtPmltYWdlKTsKICAgICBld2tfdGlsZV9tYXRyaXhfdGlsZV9w
dXQocHJpdi0+bW9kZWwubWF0cml4LCBpdGVtLT50aWxlLCBsYXN0VXNlZCk7Ci0gICAgdHVjID0g
ZXdrX3RpbGVfbWF0cml4X3VudXNlZF9jYWNoZV9nZXQocHJpdi0+bW9kZWwubWF0cml4KTsKLSAg
ICBld2tfdGlsZV91bnVzZWRfY2FjaGVfYXV0b19mbHVzaCh0dWMpOworICAgIHRpbGVkVW51c2Vk
Q2FjaGUgPSBld2tfdGlsZV9tYXRyaXhfdW51c2VkX2NhY2hlX2dldChwcml2LT5tb2RlbC5tYXRy
aXgpOworICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9hdXRvX2ZsdXNoKHRpbGVkVW51c2VkQ2Fj
aGUpOwogCiAgICAgaXRlbS0+dGlsZSA9IDA7CiB9CiAKIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV90aWxlX2Rpc3NvY2lhdGVfYWxsKEV3a19UaWxlZF9CYWNraW5nX1N0b3Jl
X0RhdGEqIHByaXYpCiB7Ci0gICAgRWluYV9Jbmxpc3QqIGl0OworICAgIEVpbmFfSW5saXN0KiBs
aXN0OwogICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0qIGl0ZW07CiAgICAgaW50IGk7
CiAgICAgZG91YmxlIGxhc3RfdXNlZCA9IGVjb3JlX2xvb3BfdGltZV9nZXQoKTsKIAogICAgIGZv
ciAoaSA9IDA7IGkgPCBwcml2LT52aWV3LnJvd3M7IGkrKykgewotICAgICAgICBpdCA9IHByaXYt
PnZpZXcuaXRlbXNbaV07Ci0gICAgICAgIEVJTkFfSU5MSVNUX0ZPUkVBQ0goaXQsIGl0ZW0pCisg
ICAgICAgIGxpc3QgPSBwcml2LT52aWV3Lml0ZW1zW2ldOworICAgICAgICBFSU5BX0lOTElTVF9G
T1JFQUNIKGxpc3QsIGl0ZW0pCiAgICAgICAgICAgICBpZiAoaXRlbS0+dGlsZSkKICAgICAgICAg
ICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9kaXNzb2NpYXRlKHByaXYsIGl0
ZW0sIGxhc3RfdXNlZCk7CiAgICAgfQpAQCAtMjUwLDkyICsyNTAsOTIgQEAgc3RhdGljIHZvaWQg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfZGlzc29jaWF0ZV9hbGwoRXdrX1RpbGVkX0Jh
Y2tpbmdfU3RvcmUKIAogc3RhdGljIGlubGluZSBFaW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5n
X3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9hZGQoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0
YSogcHJpdiwgdW5zaWduZWQgbG9uZyBjb2x1bW4sIHVuc2lnbmVkIGxvbmcgcm93LCBmbG9hdCB6
b29tLCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1ByaW9yaXR5IHByaW9yaXR5
KQogewotICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUmVxdWVzdCogcjsK
KyAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QqIHJlcXVlc3Q7
CiAKLSAgICByID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRl
cl9SZXF1ZXN0Kj4obWFsbG9jKHNpemVvZigqcikpKTsKLSAgICBpZiAoIXIpCisgICAgcmVxdWVz
dCA9IHN0YXRpY19jYXN0PEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUmVxdWVz
dCo+KG1hbGxvYyhzaXplb2YoKnJlcXVlc3QpKSk7CisgICAgaWYgKCFyZXF1ZXN0KQogICAgICAg
ICByZXR1cm4gRUlOQV9GQUxTRTsKIAogICAgIGlmIChwcmlvcml0eSA9PSBQUkVfUkVOREVSX1BS
SU9SSVRZX0hJR0gpCi0gICAgICAgIHByaXYtPnJlbmRlci5wcmVfcmVuZGVyX3JlcXVlc3RzID0g
ZWluYV9pbmxpc3RfcHJlcGVuZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAocHJpdi0+cmVuZGVyLnByZV9yZW5kZXJfcmVxdWVzdHMsIEVJTkFfSU5MSVNU
X0dFVChyKSk7CisgICAgICAgIHByaXYtPnJlbmRlci5wcmVSZW5kZXJSZXF1ZXN0cyA9IGVpbmFf
aW5saXN0X3ByZXBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKHByaXYtPnJlbmRlci5wcmVSZW5kZXJSZXF1ZXN0cywgRUlOQV9JTkxJU1RfR0VUKHJl
cXVlc3QpKTsKICAgICBlbHNlCi0gICAgICAgIHByaXYtPnJlbmRlci5wcmVfcmVuZGVyX3JlcXVl
c3RzID0gZWluYV9pbmxpc3RfYXBwZW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIChwcml2LT5yZW5kZXIucHJlX3JlbmRlcl9yZXF1ZXN0cywgRUlOQV9J
TkxJU1RfR0VUKHIpKTsKKyAgICAgICAgcHJpdi0+cmVuZGVyLnByZVJlbmRlclJlcXVlc3RzID0g
ZWluYV9pbmxpc3RfYXBwZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIChwcml2LT5yZW5kZXIucHJlUmVuZGVyUmVxdWVzdHMsIEVJTkFfSU5MSVNUX0dF
VChyZXF1ZXN0KSk7CiAKLSAgICByLT5jb2wgPSBjb2x1bW47Ci0gICAgci0+cm93ID0gcm93Owot
ICAgIHItPnpvb20gPSB6b29tOworICAgIHJlcXVlc3QtPmNvbHVtbiA9IGNvbHVtbjsKKyAgICBy
ZXF1ZXN0LT5yb3cgPSByb3c7CisgICAgcmVxdWVzdC0+em9vbSA9IHpvb207CiAKICAgICByZXR1
cm4gRUlOQV9UUlVFOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlZF9iYWNraW5n
X3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9kZWwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0
YSogcHJpdiwgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0KiByZXF1
ZXN0KQogewotICAgIHByaXYtPnJlbmRlci5wcmVfcmVuZGVyX3JlcXVlc3RzID0gZWluYV9pbmxp
c3RfcmVtb3ZlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBy
aXYtPnJlbmRlci5wcmVfcmVuZGVyX3JlcXVlc3RzLCBFSU5BX0lOTElTVF9HRVQocmVxdWVzdCkp
OworICAgIHByaXYtPnJlbmRlci5wcmVSZW5kZXJSZXF1ZXN0cyA9IGVpbmFfaW5saXN0X3JlbW92
ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwcml2LT5yZW5k
ZXIucHJlUmVuZGVyUmVxdWVzdHMsIEVJTkFfSU5MSVNUX0dFVChyZXF1ZXN0KSk7CiAgICAgZnJl
ZShyZXF1ZXN0KTsKIH0KIAogc3RhdGljIGlubGluZSBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9Q
cmVfUmVuZGVyX1JlcXVlc3QqIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3Jl
cXVlc3RfZmlyc3QoY29uc3QgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdikKIHsK
ICAgICByZXR1cm4gRUlOQV9JTkxJU1RfQ09OVEFJTkVSX0dFVCgKLSAgICAgICAgICAgICAgIHBy
aXYtPnJlbmRlci5wcmVfcmVuZGVyX3JlcXVlc3RzLAorICAgICAgICAgICAgICAgcHJpdi0+cmVu
ZGVyLnByZVJlbmRlclJlcXVlc3RzLAogICAgICAgICAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdf
U3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0KTsKIH0KIAogc3RhdGljIHZvaWQgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9mbHVzaChFd2tfVGlsZWRfQmFja2luZ19T
dG9yZV9EYXRhKiBwcml2KQogewotICAgIEVpbmFfSW5saXN0KiogcGwgPSAmcHJpdi0+cmVuZGVy
LnByZV9yZW5kZXJfcmVxdWVzdHM7Ci0gICAgd2hpbGUgKCpwbCkgewotICAgICAgICBFd2tfVGls
ZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QqIHI7Ci0gICAgICAgIHIgPSBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2ZpcnN0KHByaXYpOwotICAg
ICAgICAqcGwgPSBlaW5hX2lubGlzdF9yZW1vdmUoKnBsLCAqcGwpOwotICAgICAgICBmcmVlKHIp
OworICAgIEVpbmFfSW5saXN0KiogcHJlUmVuZGVyTGlzdCA9ICZwcml2LT5yZW5kZXIucHJlUmVu
ZGVyUmVxdWVzdHM7CisgICAgd2hpbGUgKCpwcmVSZW5kZXJMaXN0KSB7CisgICAgICAgIEV3a19U
aWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUmVxdWVzdCogcmVxdWVzdDsKKyAgICAgICAg
cmVxdWVzdCA9IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfZmly
c3QocHJpdik7CisgICAgICAgICpwcmVSZW5kZXJMaXN0ID0gZWluYV9pbmxpc3RfcmVtb3ZlKCpw
cmVSZW5kZXJMaXN0LCAqcHJlUmVuZGVyTGlzdCk7CisgICAgICAgIGZyZWUocmVxdWVzdCk7CiAg
ICAgfQogfQogCiBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRl
cl9yZXF1ZXN0X2NsZWFyKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYpCiB7Ci0g
ICAgRWluYV9Jbmxpc3QqKiBwbCA9ICZwcml2LT5yZW5kZXIucHJlX3JlbmRlcl9yZXF1ZXN0czsK
LSAgICBFaW5hX0lubGlzdCogaXRlciA9ICpwbCwgKiB0bXA7CisgICAgRWluYV9Jbmxpc3QqKiBw
cmVSZW5kZXJMaXN0ID0gJnByaXYtPnJlbmRlci5wcmVSZW5kZXJSZXF1ZXN0czsKKyAgICBFaW5h
X0lubGlzdCogaXRlciA9ICpwcmVSZW5kZXJMaXN0LCAqdG1wOwogICAgIHdoaWxlIChpdGVyKSB7
Ci0gICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUmVxdWVzdCogciA9
CisgICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUmVxdWVzdCogcmVx
dWVzdCA9CiAgICAgICAgICAgICBFSU5BX0lOTElTVF9DT05UQUlORVJfR0VUKAogICAgICAgICAg
ICAgICAgIGl0ZXIsIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUmVxdWVzdCk7
CiAgICAgICAgIHRtcCA9IGl0ZXItPm5leHQ7Ci0gICAgICAgICpwbCA9IGVpbmFfaW5saXN0X3Jl
bW92ZSgqcGwsIGl0ZXIpOworICAgICAgICAqcHJlUmVuZGVyTGlzdCA9IGVpbmFfaW5saXN0X3Jl
bW92ZSgqcHJlUmVuZGVyTGlzdCwgaXRlcik7CiAgICAgICAgIGl0ZXIgPSB0bXA7Ci0gICAgICAg
IGZyZWUocik7CisgICAgICAgIGZyZWUocmVxdWVzdCk7CiAgICAgfQogfQogCiAvKiBhc3N1bWVz
IHByaXYtPnByb2Nlc3MucHJlX2NiIHdhcyBjYWxsZWQgaWYgcmVxdWlyZWQhICovCiBzdGF0aWMg
dm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X3Byb2Nlc3Nf
c2luZ2xlKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYpCiB7Ci0gICAgRXdrX1Rp
bGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0KiByZXE7CisgICAgRXdrX1RpbGVk
X0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0KiByZXF1ZXN0OwogICAgIEVpbmFfUmVj
dGFuZ2xlIGFyZWE7Ci0gICAgRXdrX1RpbGVfTWF0cml4KiB0bSA9IHByaXYtPm1vZGVsLm1hdHJp
eDsKKyAgICBFd2tfVGlsZV9NYXRyaXgqIHRpbGVNYXRyaXggPSBwcml2LT5tb2RlbC5tYXRyaXg7
CiAgICAgRXdrX1RpbGUqIHRpbGU7Ci0gICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0dWM7Ci0g
ICAgdW5zaWduZWQgbG9uZyBjb2wsIHJvdzsKKyAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHRp
bGVkVW51c2VkQ2FjaGU7CisgICAgdW5zaWduZWQgbG9uZyBjb2x1bW4sIHJvdzsKICAgICBmbG9h
dCB6b29tOwogICAgIGRvdWJsZSBsYXN0X3VzZWQgPSBlY29yZV9sb29wX3RpbWVfZ2V0KCk7CiAK
LSAgICByZXEgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2Zp
cnN0KHByaXYpOwotICAgIGlmICghcmVxKQorICAgIHJlcXVlc3QgPSBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2ZpcnN0KHByaXYpOworICAgIGlmICghcmVxdWVz
dCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgY29sID0gcmVxLT5jb2w7Ci0gICAgcm93ID0gcmVx
LT5yb3c7Ci0gICAgem9vbSA9IHJlcS0+em9vbTsKKyAgICBjb2x1bW4gPSByZXF1ZXN0LT5jb2x1
bW47CisgICAgcm93ID0gcmVxdWVzdC0+cm93OworICAgIHpvb20gPSByZXF1ZXN0LT56b29tOwog
Ci0gICAgaWYgKGV3a190aWxlX21hdHJpeF90aWxlX2V4YWN0X2V4aXN0cyh0bSwgY29sLCByb3cs
IHpvb20pKSB7Ci0gICAgICAgIERCRygibm8gcHJlLXJlbmRlciByZXF1aXJlZCBmb3IgdGlsZSAl
bHUsJWx1IEAgJWYuIiwgY29sLCByb3csIHpvb20pOworICAgIGlmIChld2tfdGlsZV9tYXRyaXhf
dGlsZV9leGFjdF9leGlzdHModGlsZU1hdHJpeCwgY29sdW1uLCByb3csIHpvb20pKSB7CisgICAg
ICAgIERCRygibm8gcHJlLXJlbmRlciByZXF1aXJlZCBmb3IgdGlsZSAlbHUsJWx1IEAgJWYuIiwg
Y29sdW1uLCByb3csIHpvb20pOwogICAgICAgICBnb3RvIGVuZDsKICAgICB9CiAKLSAgICB0aWxl
ID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfbmV3KHByaXYsIGNvbCwgcm93LCB6b29t
KTsKKyAgICB0aWxlID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfbmV3KHByaXYsIGNv
bHVtbiwgcm93LCB6b29tKTsKICAgICBpZiAoIXRpbGUpCiAgICAgICAgIGdvdG8gZW5kOwogCkBA
IC0zNDQsMzMgKzM0NCwzMyBAQCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
cHJlX3JlbmRlcl9yZXF1ZXN0X3Byb2Nlc3Nfc2luZ2xlKEV3a19UaWxlZAogICAgIGFyZWEudyA9
IHByaXYtPnZpZXcudGlsZS53aWR0aDsKICAgICBhcmVhLmggPSBwcml2LT52aWV3LnRpbGUuaGVp
Z2h0OwogCi0gICAgcHJpdi0+cmVuZGVyLmNiKHByaXYtPnJlbmRlci5kYXRhLCB0aWxlLCAmYXJl
YSk7CisgICAgcHJpdi0+cmVuZGVyLmNhbGxiYWNrKHByaXYtPnJlbmRlci5kYXRhLCB0aWxlLCAm
YXJlYSk7CiAgICAgZXZhc19vYmplY3RfaW1hZ2VfZGF0YV91cGRhdGVfYWRkKAogICAgICAgICB0
aWxlLT5pbWFnZSwKICAgICAgICAgYXJlYS54LCBhcmVhLnksIGFyZWEudywgYXJlYS5oKTsKLSAg
ICBld2tfdGlsZV9tYXRyaXhfdGlsZV91cGRhdGVzX2NsZWFyKHRtLCB0aWxlKTsKKyAgICBld2tf
dGlsZV9tYXRyaXhfdGlsZV91cGRhdGVzX2NsZWFyKHRpbGVNYXRyaXgsIHRpbGUpOwogCi0gICAg
ZXdrX3RpbGVfbWF0cml4X3RpbGVfcHV0KHRtLCB0aWxlLCBsYXN0X3VzZWQpOworICAgIGV3a190
aWxlX21hdHJpeF90aWxlX3B1dCh0aWxlTWF0cml4LCB0aWxlLCBsYXN0X3VzZWQpOwogCiBlbmQ6
Ci0gICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9kZWwocHJp
diwgcmVxKTsKLSAgICB0dWMgPSBld2tfdGlsZV9tYXRyaXhfdW51c2VkX2NhY2hlX2dldChwcml2
LT5tb2RlbC5tYXRyaXgpOwotICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9hdXRvX2ZsdXNoKHR1
Yyk7CisgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9kZWwo
cHJpdiwgcmVxdWVzdCk7CisgICAgdGlsZWRVbnVzZWRDYWNoZSA9IGV3a190aWxlX21hdHJpeF91
bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7CisgICAgZXdrX3RpbGVfdW51c2Vk
X2NhY2hlX2F1dG9fZmx1c2godGlsZWRVbnVzZWRDYWNoZSk7CiB9CiAKIHN0YXRpYyBFaW5hX0Jv
b2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcHJvY2Vzc19pZGxlcl9jYih2b2lkKiBk
YXRhKQogewogICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYgPSBzdGF0aWNf
Y2FzdDxFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKj4oZGF0YSk7CiAKLSAgICBpZiAocHJp
di0+cHJvY2Vzcy5wcmVfY2IpCi0gICAgICAgIGRhdGEgPSBwcml2LT5wcm9jZXNzLnByZV9jYihw
cml2LT5wcm9jZXNzLnByZV9kYXRhLCBwcml2LT5zZWxmKTsKKyAgICBpZiAocHJpdi0+cHJvY2Vz
cy5wcmVDYWxsYmFjaykKKyAgICAgICAgZGF0YSA9IHByaXYtPnByb2Nlc3MucHJlQ2FsbGJhY2so
cHJpdi0+cHJvY2Vzcy5wcmVEYXRhLCBwcml2LT5zZWxmKTsKIAogICAgIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfcHJvY2Vzc19zaW5nbGUocHJpdik7CiAKLSAg
ICBpZiAocHJpdi0+cHJvY2Vzcy5wb3N0X2NiKQotICAgICAgICBwcml2LT5wcm9jZXNzLnBvc3Rf
Y2IocHJpdi0+cHJvY2Vzcy5wb3N0X2RhdGEsIGRhdGEsIHByaXYtPnNlbGYpOworICAgIGlmIChw
cml2LT5wcm9jZXNzLnBvc3RDYWxsYmFjaykKKyAgICAgICAgcHJpdi0+cHJvY2Vzcy5wb3N0Q2Fs
bGJhY2socHJpdi0+cHJvY2Vzcy5wb3N0RGF0YSwgZGF0YSwgcHJpdi0+c2VsZik7CiAKLSAgICBp
ZiAoIXByaXYtPnJlbmRlci5wcmVfcmVuZGVyX3JlcXVlc3RzKSB7CisgICAgaWYgKCFwcml2LT5y
ZW5kZXIucHJlUmVuZGVyUmVxdWVzdHMpIHsKICAgICAgICAgcHJpdi0+cmVuZGVyLmlkbGVyID0g
MDsKICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CiAgICAgfQpAQCAtNDIwLDM4ICs0MjAsMzgg
QEAgc3RhdGljIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZW5hYmxlX3JlbmRl
cihFd2tfVGlsZWRfQmFja2luZ19TdG9yZV8KIAogc3RhdGljIGlubGluZSBFaW5hX0Jvb2wgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZmlsbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9E
YXRhKiBwcml2LCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKiBpdGVtLCB1bnNpZ25lZCBs
b25nIGNvbHVtbiwgdW5zaWduZWQgbG9uZyByb3cpCiB7Ci0gICAgdW5zaWduZWQgbG9uZyBtX2Nv
bCA9IHByaXYtPm1vZGVsLmJhc2UuY29sICsgY29sdW1uOwotICAgIHVuc2lnbmVkIGxvbmcgbV9y
b3cgPSBwcml2LT5tb2RlbC5iYXNlLnJvdyArIHJvdzsKLSAgICBkb3VibGUgbGFzdF91c2VkID0g
ZWNvcmVfbG9vcF90aW1lX2dldCgpOworICAgIHVuc2lnbmVkIGxvbmcgbUNvbHVtbiA9IHByaXYt
Pm1vZGVsLmJhc2UuY29sdW1uICsgY29sdW1uOworICAgIHVuc2lnbmVkIGxvbmcgbVJvdyA9IHBy
aXYtPm1vZGVsLmJhc2Uucm93ICsgcm93OworICAgIGRvdWJsZSBsYXN0VXNlZCA9IGVjb3JlX2xv
b3BfdGltZV9nZXQoKTsKIAotICAgIGlmIChtX2NvbCA+PSBwcml2LT5tb2RlbC5jdXIuY29scyB8
fCBtX3JvdyA+PSBwcml2LT5tb2RlbC5jdXIucm93cykgeworICAgIGlmIChtQ29sdW1uID49IHBy
aXYtPm1vZGVsLmN1cnJlbnQuY29sdW1ucyB8fCBtUm93ID49IHByaXYtPm1vZGVsLmN1cnJlbnQu
cm93cykgewogICAgICAgICBpZiAoaXRlbS0+dGlsZSkKLSAgICAgICAgICAgIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV90aWxlX2Rpc3NvY2lhdGUocHJpdiwgaXRlbSwgbGFzdF91c2VkKTsKKyAg
ICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2Rpc3NvY2lhdGUocHJpdiwg
aXRlbSwgbGFzdFVzZWQpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIEV3a19UaWxlKiB0aWxlOwog
ICAgICAgICBjb25zdCBmbG9hdCB6b29tID0gcHJpdi0+dmlldy50aWxlLnpvb207CiAKICAgICAg
ICAgaWYgKGl0ZW0tPnRpbGUpIHsKICAgICAgICAgICAgIEV3a19UaWxlKiBvbGQgPSBpdGVtLT50
aWxlOwotICAgICAgICAgICAgaWYgKG9sZC0+cm93ICE9IG1fcm93IHx8IG9sZC0+Y29sICE9IG1f
Y29sIHx8IG9sZC0+em9vbSAhPSB6b29tKQotICAgICAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV90aWxlX2Rpc3NvY2lhdGUocHJpdiwgaXRlbSwgbGFzdF91c2VkKTsKLSAgICAg
ICAgICAgIGVsc2UgaWYgKG9sZC0+cm93ID09IG1fcm93ICYmIG9sZC0+Y29sID09IG1fY29sICYm
IG9sZC0+em9vbSA9PSB6b29tKQorICAgICAgICAgICAgaWYgKG9sZC0+cm93ICE9IG1Sb3cgfHwg
b2xkLT5jb2wgIT0gbUNvbHVtbiB8fCBvbGQtPnpvb20gIT0gem9vbSkKKyAgICAgICAgICAgICAg
ICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9kaXNzb2NpYXRlKHByaXYsIGl0ZW0sIGxh
c3RVc2VkKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKG9sZC0+cm93ID09IG1Sb3cgJiYgb2xkLT5j
b2wgPT0gbUNvbHVtbiAmJiBvbGQtPnpvb20gPT0gem9vbSkKICAgICAgICAgICAgICAgICBnb3Rv
IGVuZDsKICAgICAgICAgfQogCi0gICAgICAgIHRpbGUgPSBld2tfdGlsZV9tYXRyaXhfdGlsZV9l
eGFjdF9nZXQocHJpdi0+bW9kZWwubWF0cml4LCBtX2NvbCwgbV9yb3csIHpvb20pOworICAgICAg
ICB0aWxlID0gZXdrX3RpbGVfbWF0cml4X3RpbGVfZXhhY3RfZ2V0KHByaXYtPm1vZGVsLm1hdHJp
eCwgbUNvbHVtbiwgbVJvdywgem9vbSk7CiAKICAgICAgICAgaWYgKCF0aWxlKSB7CiAgICAgICAg
ICAgICAvKiBOT1RFOiBpdCBuZXZlciByZXR1cm5zIDAgaWYgaXQtPnRpbGUgd2FzIHNldCEgKi8K
ICAgICAgICAgICAgIGlmIChpdGVtLT50aWxlKSB7CiAgICAgICAgICAgICAgICAgQ1JJVElDQUwo
Iml0LT50aWxlPSVwLCBidXQgaXQgc2hvdWxkIGJlIDAhIiwgaXRlbS0+dGlsZSk7CiAgICAgICAg
ICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfZGlzc29jaWF0ZShwcml2LCBp
dGVtLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbGFzdF91c2VkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGxhc3RVc2VkKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAg
ICAgLyogRG8gbm90IGFkZCBuZXcgcmVxdWVzdHMgdG8gdGhlIHJlbmRlciBxdWV1ZSAqLwogICAg
ICAgICAgICAgaWYgKCFwcml2LT5yZW5kZXIuc3VzcGVuZCkgewotICAgICAgICAgICAgICAgIHRp
bGUgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9uZXcocHJpdiwgbV9jb2wsIG1fcm93
LCB6b29tKTsKKyAgICAgICAgICAgICAgICB0aWxlID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3RpbGVfbmV3KHByaXYsIG1Db2x1bW4sIG1Sb3csIHpvb20pOwogICAgICAgICAgICAgICAgIGlm
ICghdGlsZSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CiAgICAgICAg
ICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfYXNzb2NpYXRlKHByaXYsIHRp
bGUsIGl0ZW0pOwpAQCAtNDU5LDcgKzQ1OSw3IEBAIHN0YXRpYyBpbmxpbmUgRWluYV9Cb29sIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2ZpbGwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvCiAg
ICAgICAgIH0gZWxzZSBpZiAodGlsZSAhPSBpdGVtLT50aWxlKSB7CiAgICAgICAgICAgICBpZiAo
aXRlbS0+dGlsZSkKICAgICAgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGls
ZV9kaXNzb2NpYXRlKHByaXYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpdGVtLCBsYXN0X3VzZWQpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbSwgbGFzdFVzZWQpOwog
ICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfYXNzb2NpYXRlKHByaXYs
IHRpbGUsIGl0ZW0pOwogICAgICAgICB9CiAKQEAgLTQ3MywzMSArNDczLDMxIEBAIGVuZDoKIAog
c3RhdGljIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0qIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9pdGVtX2FkZChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2LCB1bnNpZ25l
ZCBsb25nIGNvbHVtbiwgdW5zaWduZWQgbG9uZyByb3cpCiB7Ci0gICAgRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfSXRlbSogaXQ7Ci0gICAgRXZhc19Db29yZCB4LCB5LCB0dywgdGg7CisgICAgRXdr
X1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSogaXRlbTsKKyAgICBFdmFzX0Nvb3JkIHgsIHksIHRp
bGVXaWR0aCwgdGlsZUhlaWdodDsKIAotICAgIERCRygibz0lcCIsIHByaXYtPnNlbGYpOworICAg
IERCRygiZXdrVGlsZSVwIiwgcHJpdi0+c2VsZik7CiAKLSAgICBpdCA9IHN0YXRpY19jYXN0PEV3
a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0qPihtYWxsb2Moc2l6ZW9mKCppdCkpKTsKLSAgICBp
ZiAoIWl0KQorICAgIGl0ZW0gPSBzdGF0aWNfY2FzdDxFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9J
dGVtKj4obWFsbG9jKHNpemVvZigqaXRlbSkpKTsKKyAgICBpZiAoIWl0ZW0pCiAgICAgICAgIHJl
dHVybiAwOwogCi0gICAgdHcgPSBwcml2LT52aWV3LnRpbGUud2lkdGg7Ci0gICAgdGggPSBwcml2
LT52aWV3LnRpbGUuaGVpZ2h0OwotICAgIHggPSBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggKyBw
cml2LT52aWV3LnggKyB0dyAgKmNvbHVtbjsKLSAgICB5ID0gcHJpdi0+dmlldy5vZmZzZXQuYmFz
ZS55ICsgcHJpdi0+dmlldy55ICsgdGggICpyb3c7CisgICAgdGlsZVdpZHRoID0gcHJpdi0+dmll
dy50aWxlLndpZHRoOworICAgIHRpbGVIZWlnaHQgPSBwcml2LT52aWV3LnRpbGUuaGVpZ2h0Owor
ICAgIHggPSBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggKyBwcml2LT52aWV3LnggKyB0aWxlV2lk
dGggICpjb2x1bW47CisgICAgeSA9IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSArIHByaXYtPnZp
ZXcueSArIHRpbGVIZWlnaHQgICpyb3c7CiAKLSAgICBpdC0+dGlsZSA9IDA7CisgICAgaXRlbS0+
dGlsZSA9IDA7CiAKLSAgICBpdC0+c21vb3RoX3NjYWxlID0gcHJpdi0+dmlldy50aWxlLnpvb21f
d2Vha19zbW9vdGhfc2NhbGU7Ci0gICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fbW92
ZShpdCwgeCwgeSk7Ci0gICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcmVzaXplKGl0
LCB0dywgdGgpOwotICAgIGlmICghX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZmlsbChw
cml2LCBpdCwgY29sdW1uLCByb3cpKSB7Ci0gICAgICAgIGZyZWUoaXQpOworICAgIGl0ZW0tPnNt
b290aF9zY2FsZSA9IHByaXYtPnZpZXcudGlsZS56b29tV2Vha1Ntb290aFNjYWxlOworICAgIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX21vdmUoaXRlbSwgeCwgeSk7CisgICAgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcmVzaXplKGl0ZW0sIHRpbGVXaWR0aCwgdGlsZUhlaWdo
dCk7CisgICAgaWYgKCFfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9maWxsKHByaXYsIGl0
ZW0sIGNvbHVtbiwgcm93KSkgeworICAgICAgICBmcmVlKGl0ZW0pOwogICAgICAgICByZXR1cm4g
MDsKICAgICB9CiAKLSAgICByZXR1cm4gaXQ7CisgICAgcmV0dXJuIGl0ZW07CiB9CiAKIHN0YXRp
YyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2RlbChFd2tfVGlsZWRfQmFja2lu
Z19TdG9yZV9EYXRhKiBwcml2LCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKiBpdGVtKQpA
QCAtNTI3LDQwICs1MjcsNDAgQEAgc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9jaGFuZ2VkKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEKICAgICBwcml2LT5j
aGFuZ2VkLmFueSA9IEVJTkFfVFJVRTsKIH0KIAotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNr
aW5nX3N0b3JlX3ZpZXdfY29sc19lbmRfZGVsKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEq
IHByaXYsIEVpbmFfSW5saXN0KiogcF9yb3csIHVuc2lnbmVkIGludCBjb3VudCkKK3N0YXRpYyB2
b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X2NvbHNfZW5kX2RlbChFd2tfVGlsZWRf
QmFja2luZ19TdG9yZV9EYXRhKiBwcml2LCBFaW5hX0lubGlzdCoqIHJvd0xpc3QsIHVuc2lnbmVk
IGludCBjb3VudCkKIHsKLSAgICBFaW5hX0lubGlzdCogbjsKKyAgICBFaW5hX0lubGlzdCogbmV4
dEl0ZW07CiAgICAgdW5zaWduZWQgaW50IGk7CiAKICAgICBpZiAoIWNvdW50KQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBuID0gKCpwX3JvdyktPmxhc3Q7CisgICAgbmV4dEl0ZW0gPSAoKnJvd0xp
c3QpLT5sYXN0OwogCiAgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLSAgICAgICAg
RXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSogaXQ7Ci0gICAgICAgIGl0ID0gRUlOQV9JTkxJ
U1RfQ09OVEFJTkVSX0dFVChuLCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKTsKLSAgICAg
ICAgbiA9IG4tPnByZXY7Ci0gICAgICAgICpwX3JvdyA9IGVpbmFfaW5saXN0X3JlbW92ZSgqcF9y
b3csIEVJTkFfSU5MSVNUX0dFVChpdCkpOwotICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfaXRlbV9kZWwocHJpdiwgaXQpOworICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9J
dGVtKiBpdGVtOworICAgICAgICBpdGVtID0gRUlOQV9JTkxJU1RfQ09OVEFJTkVSX0dFVChuZXh0
SXRlbSwgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSk7CisgICAgICAgIG5leHRJdGVtID0g
bmV4dEl0ZW0tPnByZXY7CisgICAgICAgICpyb3dMaXN0ID0gZWluYV9pbmxpc3RfcmVtb3ZlKCpy
b3dMaXN0LCBFSU5BX0lOTElTVF9HRVQoaXRlbSkpOworICAgICAgICBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfaXRlbV9kZWwocHJpdiwgaXRlbSk7CiAgICAgfQogfQogCi1zdGF0aWMgRWluYV9C
b29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X2NvbHNfZW5kX2FkZChFd2tfVGlsZWRf
QmFja2luZ19TdG9yZV9EYXRhKiBwcml2LCBFaW5hX0lubGlzdCoqIHBfcm93LCB1bnNpZ25lZCBp
bnQgYmFzZV9jb2x1bW4sIHVuc2lnbmVkIGludCBjb3VudCkKK3N0YXRpYyBFaW5hX0Jvb2wgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfY29sc19lbmRfYWRkKEV3a19UaWxlZF9CYWNraW5n
X1N0b3JlX0RhdGEqIHByaXYsIEVpbmFfSW5saXN0Kiogcm93TGlzdCwgdW5zaWduZWQgaW50IGJh
c2VDb2x1bW4sIHVuc2lnbmVkIGludCBjb3VudCkKIHsKLSAgICB1bnNpZ25lZCBpbnQgaSwgciA9
IHBfcm93IC0gcHJpdi0+dmlldy5pdGVtczsKKyAgICB1bnNpZ25lZCBpbnQgaSwgcm93ID0gcm93
TGlzdCAtIHByaXYtPnZpZXcuaXRlbXM7CiAKLSAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkr
KywgYmFzZV9jb2x1bW4rKykgeworICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrLCBiYXNl
Q29sdW1uKyspIHsKICAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSogaXQ7CiAK
LSAgICAgICAgaXQgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9hZGQocHJpdiwgYmFz
ZV9jb2x1bW4sIHIpOworICAgICAgICBpdCA9IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVt
X2FkZChwcml2LCBiYXNlQ29sdW1uLCByb3cpOwogICAgICAgICBpZiAoIWl0KSB7Ci0gICAgICAg
ICAgICBDUklUSUNBTCgiZmFpbGVkIHRvIGFkZCBjb2x1bW4gJXUgb2YgJXUgaW4gcm93ICV1LiIs
IGksIGNvdW50LCByKTsKLSAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3
X2NvbHNfZW5kX2RlbChwcml2LCBwX3JvdywgaSk7CisgICAgICAgICAgICBDUklUSUNBTCgiZmFp
bGVkIHRvIGFkZCBjb2x1bW4gJXUgb2YgJXUgaW4gcm93ICV1LiIsIGksIGNvdW50LCByb3cpOwor
ICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfY29sc19lbmRfZGVsKHBy
aXYsIHJvd0xpc3QsIGkpOwogICAgICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CiAgICAgICAg
IH0KIAotICAgICAgICAqcF9yb3cgPSBlaW5hX2lubGlzdF9hcHBlbmQoKnBfcm93LCBFSU5BX0lO
TElTVF9HRVQoaXQpKTsKKyAgICAgICAgKnJvd0xpc3QgPSBlaW5hX2lubGlzdF9hcHBlbmQoKnJv
d0xpc3QsIEVJTkFfSU5MSVNUX0dFVChpdCkpOwogICAgIH0KICAgICByZXR1cm4gRUlOQV9UUlVF
OwogfQpAQCAtNTY4LDEwICs1NjgsMTAgQEAgc3RhdGljIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfdmlld19jb2xzX2VuZF9hZGQoRXdrX1RpbGVkX0JhY2tpbmdfU3QKIHN0YXRp
YyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3Jvd19kZWwoRXdrX1RpbGVkX0Jh
Y2tpbmdfU3RvcmVfRGF0YSogcHJpdiwgRWluYV9Jbmxpc3QqIHJvdykKIHsKICAgICB3aGlsZSAo
cm93KSB7Ci0gICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0qIGl0OwotICAgICAg
ICBpdCA9IEVJTkFfSU5MSVNUX0NPTlRBSU5FUl9HRVQocm93LCBFd2tfVGlsZWRfQmFja2luZ19T
dG9yZV9JdGVtKTsKKyAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSogaXRlbTsK
KyAgICAgICAgaXRlbSA9IEVJTkFfSU5MSVNUX0NPTlRBSU5FUl9HRVQocm93LCBFd2tfVGlsZWRf
QmFja2luZ19TdG9yZV9JdGVtKTsKICAgICAgICAgcm93ID0gcm93LT5uZXh0OwotICAgICAgICBf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9kZWwocHJpdiwgaXQpOworICAgICAgICBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9kZWwocHJpdiwgaXRlbSk7CiAgICAgfQogfQogCkBA
IC02MTEsOCArNjExLDggQEAgc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3Jl
bmRlcih2b2lkKiBkYXRhLCBFd2tfVGlsZSogdGlsZSwgY29uc3QgRWkKICAgICBpZiAocHJpdi0+
dmlldy50aWxlLndpZHRoICE9IHRpbGUtPndpZHRoIHx8IHByaXYtPnZpZXcudGlsZS5oZWlnaHQg
IT0gdGlsZS0+aGVpZ2h0KQogICAgICAgICByZXR1cm47IC8vIHRvZG86IHJlbW92ZSBtZSBsYXRl
ciwgZG9uJ3QgZXZlbiBmbGFnIGFzIGRpcnR5IQogCi0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk4ocHJpdi0+cmVuZGVyLmNiKTsKLSAgICBpZiAoIXByaXYtPnJlbmRlci5jYihwcml2LT5y
ZW5kZXIuZGF0YSwgdGlsZSwgYXJlYSkpCisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4o
cHJpdi0+cmVuZGVyLmNhbGxiYWNrKTsKKyAgICBpZiAoIXByaXYtPnJlbmRlci5jYWxsYmFjayhw
cml2LT5yZW5kZXIuZGF0YSwgdGlsZSwgYXJlYSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGV2
YXNfb2JqZWN0X2ltYWdlX2RhdGFfdXBkYXRlX2FkZCh0aWxlLT5pbWFnZSwgYXJlYS0+eCwgYXJl
YS0+eSwgYXJlYS0+dywgYXJlYS0+aCk7CkBAIC02MjksMjcgKzYyOSwyNyBAQCBzdGF0aWMgaW5s
aW5lIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX21vZGVsX21hdHJpeF9jcmVhdGUoRXdr
X1RpbGVkX0JhY2tpbgogICAgICAgICBld2tfdGlsZV9tYXRyaXhfZnJlZShwcml2LT5tb2RlbC5t
YXRyaXgpOwogICAgIH0KIAotICAgIHByaXYtPm1vZGVsLm1hdHJpeCA9IGV3a190aWxlX21hdHJp
eF9uZXcodGlsZVVudXNlZENhY2hlLCBwcml2LT5tb2RlbC5jdXIuY29scywgcHJpdi0+bW9kZWwu
Y3VyLnJvd3MsIHByaXYtPmNzcGFjZSwgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3JlbmRlciwg
cHJpdik7CisgICAgcHJpdi0+bW9kZWwubWF0cml4ID0gZXdrX3RpbGVfbWF0cml4X25ldyh0aWxl
VW51c2VkQ2FjaGUsIHByaXYtPm1vZGVsLmN1cnJlbnQuY29sdW1ucywgcHJpdi0+bW9kZWwuY3Vy
cmVudC5yb3dzLCBwcml2LT5jb2xvclNwYWNlLCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcmVu
ZGVyLCBwcml2KTsKIH0KIAogc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3Nt
YXJ0X21lbWJlcl9kZWwoRXZhc19PYmplY3QqIGV3a1RpbGUsIEV2YXNfT2JqZWN0KiBtZW1iZXIp
CiB7CiAgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4oZXdrVGlsZSwgcHJpdik7Ci0gICAgaWYg
KCFwcml2LT5jb250ZW50c19jbGlwcGVyKQorICAgIGlmICghcHJpdi0+Y29udGVudHNDbGlwcGVy
KQogICAgICAgICByZXR1cm47CiAgICAgZXZhc19vYmplY3RfY2xpcF91bnNldChtZW1iZXIpOwot
ICAgIGlmICghZXZhc19vYmplY3RfY2xpcGVlc19nZXQocHJpdi0+Y29udGVudHNfY2xpcHBlcikp
Ci0gICAgICAgIGV2YXNfb2JqZWN0X2hpZGUocHJpdi0+Y29udGVudHNfY2xpcHBlcik7CisgICAg
aWYgKCFldmFzX29iamVjdF9jbGlwZWVzX2dldChwcml2LT5jb250ZW50c0NsaXBwZXIpKQorICAg
ICAgICBldmFzX29iamVjdF9oaWRlKHByaXYtPmNvbnRlbnRzQ2xpcHBlcik7CiB9CiAKIHN0YXRp
YyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9tZW1iZXJfYWRkKEV2YXNfT2Jq
ZWN0KiBld2tUaWxlLCBFdmFzX09iamVjdCogbWVtYmVyKQogewogICAgIFBSSVZfREFUQV9HRVRf
T1JfUkVUVVJOKGV3a1RpbGUsIHByaXYpOwotICAgIGlmICghcHJpdi0+Y29udGVudHNfY2xpcHBl
cikKKyAgICBpZiAoIXByaXYtPmNvbnRlbnRzQ2xpcHBlcikKICAgICAgICAgcmV0dXJuOwotICAg
IGV2YXNfb2JqZWN0X2NsaXBfc2V0KG1lbWJlciwgcHJpdi0+Y29udGVudHNfY2xpcHBlcik7Cisg
ICAgZXZhc19vYmplY3RfY2xpcF9zZXQobWVtYmVyLCBwcml2LT5jb250ZW50c0NsaXBwZXIpOwog
ICAgIGlmIChldmFzX29iamVjdF92aXNpYmxlX2dldChld2tUaWxlKSkKLSAgICAgICAgZXZhc19v
YmplY3Rfc2hvdyhwcml2LT5jb250ZW50c19jbGlwcGVyKTsKKyAgICAgICAgZXZhc19vYmplY3Rf
c2hvdyhwcml2LT5jb250ZW50c0NsaXBwZXIpOwogfQogCiAjaWZkZWYgREVCVUdfTUVNX0xFQUtT
CkBAIC02NzYsOSArNjc2LDkgQEAgc3RhdGljIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfc2lnX3Vzcih2b2lkKiBkYXRhLCBpbnQgdHlwZSwgdm9pZCogZXYKICAgICBFd2tfVGls
ZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2ID0gKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0Rh
dGEqKWRhdGE7CiAKICAgICBpZiAoc2lnLT5udW1iZXIgPT0gMikgewotICAgICAgICBFd2tfVGls
ZV9VbnVzZWRfQ2FjaGUqIHR1YzsKLSAgICAgICAgdHVjID0gZXdrX3RpbGVfbWF0cml4X3VudXNl
ZF9jYWNoZV9nZXQocHJpdi0+bW9kZWwubWF0cml4KTsKLSAgICAgICAgZXdrX3RpbGVfdW51c2Vk
X2NhY2hlX2F1dG9fZmx1c2godHVjKTsKKyAgICAgICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0
aWxpZVVudXNlZENhY2hlOworICAgICAgICB0aWxpZVVudXNlZENhY2hlID0gZXdrX3RpbGVfbWF0
cml4X3VudXNlZF9jYWNoZV9nZXQocHJpdi0+bW9kZWwubWF0cml4KTsKKyAgICAgICAgZXdrX3Rp
bGVfdW51c2VkX2NhY2hlX2F1dG9fZmx1c2godGlsaWVVbnVzZWRDYWNoZSk7CiAgICAgfQogCiAg
ICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfZGJnKHByaXYpOwpAQCAtNjkxLDcgKzY5
MSw3IEBAIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9hZGQoRXZh
c19PYmplY3QqIGV3a1RpbGUpCiB7CiAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSog
cHJpdjsKIAotICAgIERCRygibz0lcCIsIGV3a1RpbGUpOworICAgIERCRygiZXdrVGlsZT0lcCIs
IGV3a1RpbGUpOwogCiAgICAgcHJpdiA9IHN0YXRpY19jYXN0PEV3a19UaWxlZF9CYWNraW5nX1N0
b3JlX0RhdGEqPihjYWxsb2MoMSwgc2l6ZW9mKCpwcml2KSkpOwogICAgIGlmICghcHJpdikKQEAg
LTcwOCwzMyArNzA4LDMzIEBAIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9z
bWFydF9hZGQoRXZhc19PYmplY3QqIGV3a1RpbGUpCiAgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFz
ZS54ID0gMDsKICAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgPSAwOwogCi0gICAgcHJpdi0+
bW9kZWwuYmFzZS5jb2wgPSAwOworICAgIHByaXYtPm1vZGVsLmJhc2UuY29sdW1uID0gMDsKICAg
ICBwcml2LT5tb2RlbC5iYXNlLnJvdyA9IDA7Ci0gICAgcHJpdi0+bW9kZWwuY3VyLmNvbHMgPSAx
OwotICAgIHByaXYtPm1vZGVsLmN1ci5yb3dzID0gMTsKLSAgICBwcml2LT5tb2RlbC5vbGQuY29s
cyA9IDA7CisgICAgcHJpdi0+bW9kZWwuY3VycmVudC5jb2x1bW5zID0gMTsKKyAgICBwcml2LT5t
b2RlbC5jdXJyZW50LnJvd3MgPSAxOworICAgIHByaXYtPm1vZGVsLm9sZC5jb2x1bW5zID0gMDsK
ICAgICBwcml2LT5tb2RlbC5vbGQucm93cyA9IDA7CiAgICAgcHJpdi0+bW9kZWwud2lkdGggPSAw
OwogICAgIHByaXYtPm1vZGVsLmhlaWdodCA9IDA7CiAgICAgcHJpdi0+cmVuZGVyLnN1c3BlbmQg
PSBFSU5BX0ZBTFNFOwotICAgIHByaXYtPmNzcGFjZSA9IEVWQVNfQ09MT1JTUEFDRV9BUkdCODg4
ODsgLy8gVE9ETzogZGV0ZWN0IGl0LgorICAgIHByaXYtPmNvbG9yU3BhY2UgPSBFVkFTX0NPTE9S
U1BBQ0VfQVJHQjg4ODg7IC8vIFRPRE86IGRldGVjdCBpdC4KIAogICAgIGV2YXNfb2JqZWN0X3Nt
YXJ0X2RhdGFfc2V0KGV3a1RpbGUsIHByaXYpOwogICAgIF9wYXJlbnRfc2MuYWRkKGV3a1RpbGUp
OwogCi0gICAgcHJpdi0+Y29udGVudHNfY2xpcHBlciA9IGV2YXNfb2JqZWN0X3JlY3RhbmdsZV9h
ZGQoCisgICAgcHJpdi0+Y29udGVudHNDbGlwcGVyID0gZXZhc19vYmplY3RfcmVjdGFuZ2xlX2Fk
ZCgKICAgICAgICAgZXZhc19vYmplY3RfZXZhc19nZXQoZXdrVGlsZSkpOwotICAgIGV2YXNfb2Jq
ZWN0X21vdmUocHJpdi0+Y29udGVudHNfY2xpcHBlciwgMCwgMCk7Ci0gICAgZXZhc19vYmplY3Rf
cmVzaXplKHByaXYtPmNvbnRlbnRzX2NsaXBwZXIsCisgICAgZXZhc19vYmplY3RfbW92ZShwcml2
LT5jb250ZW50c0NsaXBwZXIsIDAsIDApOworICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShwcml2LT5j
b250ZW50c0NsaXBwZXIsCiAgICAgICAgICAgICAgICAgICAgICAgIHByaXYtPm1vZGVsLndpZHRo
LCBwcml2LT5tb2RlbC5oZWlnaHQpOwotICAgIGV2YXNfb2JqZWN0X2NvbG9yX3NldChwcml2LT5j
b250ZW50c19jbGlwcGVyLCAyNTUsIDI1NSwgMjU1LCAyNTUpOwotICAgIGV2YXNfb2JqZWN0X3No
b3cocHJpdi0+Y29udGVudHNfY2xpcHBlcik7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfbWVtYmVy
X2FkZChwcml2LT5jb250ZW50c19jbGlwcGVyLCBld2tUaWxlKTsKKyAgICBldmFzX29iamVjdF9j
b2xvcl9zZXQocHJpdi0+Y29udGVudHNDbGlwcGVyLCAyNTUsIDI1NSwgMjU1LCAyNTUpOworICAg
IGV2YXNfb2JqZWN0X3Nob3cocHJpdi0+Y29udGVudHNDbGlwcGVyKTsKKyAgICBldmFzX29iamVj
dF9zbWFydF9tZW1iZXJfYWRkKHByaXYtPmNvbnRlbnRzQ2xpcHBlciwgZXdrVGlsZSk7CiAKICAg
ICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfbW9kZWxfbWF0cml4X2NyZWF0ZShwcml2LCAwKTsK
ICAgICBldmFzX29iamVjdF9tb3ZlKHByaXYtPmJhc2UuY2xpcHBlciwgMCwgMCk7CiAgICAgZXZh
c19vYmplY3RfcmVzaXplKHByaXYtPmJhc2UuY2xpcHBlciwgMCwgMCk7Ci0gICAgZXZhc19vYmpl
Y3RfY2xpcF9zZXQocHJpdi0+Y29udGVudHNfY2xpcHBlciwgcHJpdi0+YmFzZS5jbGlwcGVyKTsK
KyAgICBldmFzX29iamVjdF9jbGlwX3NldChwcml2LT5jb250ZW50c0NsaXBwZXIsIHByaXYtPmJh
c2UuY2xpcHBlcik7CiAKICNpZmRlZiBERUJVR19NRU1fTEVBS1MKICAgICBwcml2LT5zaWdfdXNy
ID0gZWNvcmVfZXZlbnRfaGFuZGxlcl9hZGQKQEAgLTc0NSwxMSArNzQ1LDExIEBAIHN0YXRpYyB2
b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9hZGQoRXZhc19PYmplY3QqIGV3a1Rp
bGUpCiBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfZGVsKEV2YXNf
T2JqZWN0KiBld2tUaWxlKQogewogICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKGV3a1RpbGUs
IHByaXYpOwotICAgIERCRygibz0lcCIsIGV3a1RpbGUpOwotICAgIEV3a19UaWxlX1VudXNlZF9D
YWNoZSogdHVjOworICAgIERCRygiZXdrVGlsZSVwIiwgZXdrVGlsZSk7CisgICAgRXdrX1RpbGVf
VW51c2VkX0NhY2hlKiB0aWxlVW51c2VkQ2FjaGU7CiAKLSAgICB0dWMgPSBld2tfdGlsZV9tYXRy
aXhfdW51c2VkX2NhY2hlX2dldChwcml2LT5tb2RlbC5tYXRyaXgpOwotICAgIGV3a190aWxlX3Vu
dXNlZF9jYWNoZV91bmxvY2tfYXJlYSh0dWMpOworICAgIHRpbGVVbnVzZWRDYWNoZSA9IGV3a190
aWxlX21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7CisgICAgZXdr
X3RpbGVfdW51c2VkX2NhY2hlX3VubG9ja19hcmVhKHRpbGVVbnVzZWRDYWNoZSk7CiAKICAgICBf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZmx1c2gocHJpdik7CiAKQEAgLTc2NCw4ICs3NjQsOCBA
QCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfZGVsKEV2YXNfT2Jq
ZWN0KiBld2tUaWxlKQogI2VuZGlmCiAKICAgICBld2tfdGlsZV9tYXRyaXhfZnJlZShwcml2LT5t
b2RlbC5tYXRyaXgpOwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X21lbWJlcl9kZWwocHJpdi0+Y29u
dGVudHNfY2xpcHBlcik7Ci0gICAgZXZhc19vYmplY3RfZGVsKHByaXYtPmNvbnRlbnRzX2NsaXBw
ZXIpOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X21lbWJlcl9kZWwocHJpdi0+Y29udGVudHNDbGlw
cGVyKTsKKyAgICBldmFzX29iamVjdF9kZWwocHJpdi0+Y29udGVudHNDbGlwcGVyKTsKIAogICAg
IF9wYXJlbnRfc2MuZGVsKGV3a1RpbGUpOwogCkBAIC03NzcsMjMgKzc3NywyMyBAQCBzdGF0aWMg
dm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfZGVsKEV2YXNfT2JqZWN0KiBld2tU
aWxlKQogCiBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfbW92ZShF
dmFzX09iamVjdCogZXdrVGlsZSwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHkpCiB7Ci0gICAg
REJHKCJvPSVwLCBuZXcgcG9zOiAlZHglZCIsIGV3a1RpbGUsIHgsIHkpOworICAgIERCRygiZXdr
VGlsZSVwLCBuZXcgcG9zOiAlZHglZCIsIGV3a1RpbGUsIHgsIHkpOwogCiAgICAgUFJJVl9EQVRB
X0dFVF9PUl9SRVRVUk4oZXdrVGlsZSwgcHJpdik7CiAKLSAgICBpZiAocHJpdi0+Y2hhbmdlZC5w
b3MpCisgICAgaWYgKHByaXYtPmNoYW5nZWQucG9zaXRpb24pCiAgICAgICAgIHJldHVybjsKIAog
ICAgIGlmIChwcml2LT52aWV3LnggPT0geCAmJiBwcml2LT52aWV3LnkgPT0geSkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgcHJpdi0+Y2hhbmdlZC5wb3MgPSBFSU5BX1RSVUU7CisgICAgcHJpdi0+
Y2hhbmdlZC5wb3NpdGlvbiA9IEVJTkFfVFJVRTsKICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfY2hhbmdlZChwcml2KTsKIH0KIAogc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX3NtYXJ0X3Jlc2l6ZShFdmFzX09iamVjdCogZXdrVGlsZSwgRXZhc19Db29yZCB3aWR0aCwg
RXZhc19Db29yZCBoZWlnaHQpCiB7Ci0gICAgREJHKCJvPSVwLCBuZXcgc2l6ZTogJWR4JWQiLCBl
d2tUaWxlLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBEQkcoImV3a1RpbGUlcCwgbmV3IHNpemU6ICVk
eCVkIiwgZXdrVGlsZSwgd2lkdGgsIGhlaWdodCk7CiAKICAgICBQUklWX0RBVEFfR0VUX09SX1JF
VFVSTihld2tUaWxlLCBwcml2KTsKIApAQCAtODA5LDI1ICs4MDksMjUgQEAgc3RhdGljIHZvaWQg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X3Jlc2l6ZShFdmFzX09iamVjdCogZXdrVGls
ZSwgRXZhc19Db28KIAogc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3JlY2Fs
Y19yZW5kZXJlcnMoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdiwgRXZhc19Db29y
ZCB3aWR0aCwgRXZhc19Db29yZCBoZWlnaHQsIEV2YXNfQ29vcmQgdGlsZVdpZHRoLCBFdmFzX0Nv
b3JkIHRpbGVIZWlnaHQpCiB7Ci0gICAgbG9uZyBjb2xzLCByb3dzLCBvbGRfcm93cywgb2xkX2Nv
bHM7Ci0gICAgSU5GKCJvPSVwLCBuZXcgc2l6ZTogJWR4JWQiLCBwcml2LT5zZWxmLCB3aWR0aCwg
aGVpZ2h0KTsKKyAgICBsb25nIGNvbHVtbnMsIHJvd3MsIG9sZFJvd3MsIG9sZENvbHM7CisgICAg
SU5GKCJld2tUaWxlJXAsIG5ldyBzaXplOiAlZHglZCIsIHByaXYtPnNlbGYsIHdpZHRoLCBoZWln
aHQpOwogCi0gICAgY29scyA9IDEgKyBzdGF0aWNfY2FzdDxpbnQ+KGNlaWwoc3RhdGljX2Nhc3Q8
ZmxvYXQ+KHdpZHRoIC8gdGlsZVdpZHRoKSkpOworICAgIGNvbHVtbnMgPSAxICsgc3RhdGljX2Nh
c3Q8aW50PihjZWlsKHN0YXRpY19jYXN0PGZsb2F0Pih3aWR0aCAvIHRpbGVXaWR0aCkpKTsKICAg
ICByb3dzID0gMSArIHN0YXRpY19jYXN0PGludD4oY2VpbChzdGF0aWNfY2FzdDxmbG9hdD4oaGVp
Z2h0IC8gdGlsZUhlaWdodCkpKTsKIAotICAgIElORigibz0lcCBuZXcgZ3JpZCBzaXplIGNvbHM6
ICVsZCwgcm93czogJWxkLCB3YXMgJWxkLCAlbGQiLAotICAgICAgICBwcml2LT5zZWxmLCBjb2xz
LCByb3dzLCBwcml2LT52aWV3LmNvbHMsIHByaXYtPnZpZXcucm93cyk7CisgICAgSU5GKCJld2tU
aWxlJXAgbmV3IGdyaWQgc2l6ZSBjb2xzOiAlbGQsIHJvd3M6ICVsZCwgd2FzICVsZCwgJWxkIiwK
KyAgICAgICAgcHJpdi0+c2VsZiwgY29sdW1ucywgcm93cywgcHJpdi0+dmlldy5jb2xzLCBwcml2
LT52aWV3LnJvd3MpOwogCi0gICAgaWYgKHByaXYtPnZpZXcuY29scyA9PSBjb2xzICYmIHByaXYt
PnZpZXcucm93cyA9PSByb3dzKQorICAgIGlmIChwcml2LT52aWV3LmNvbHMgPT0gY29sdW1ucyAm
JiBwcml2LT52aWV3LnJvd3MgPT0gcm93cykKICAgICAgICAgcmV0dXJuOwogCi0gICAgb2xkX2Nv
bHMgPSBwcml2LT52aWV3LmNvbHM7Ci0gICAgb2xkX3Jvd3MgPSBwcml2LT52aWV3LnJvd3M7Cisg
ICAgb2xkQ29scyA9IHByaXYtPnZpZXcuY29sczsKKyAgICBvbGRSb3dzID0gcHJpdi0+dmlldy5y
b3dzOwogCi0gICAgaWYgKHJvd3MgPCBvbGRfcm93cykgeworICAgIGlmIChyb3dzIDwgb2xkUm93
cykgewogICAgICAgICBFaW5hX0lubGlzdCoqIHN0YXJ0LCAqKmVuZDsKICAgICAgICAgc3RhcnQg
PSBwcml2LT52aWV3Lml0ZW1zICsgcm93czsKLSAgICAgICAgZW5kID0gcHJpdi0+dmlldy5pdGVt
cyArIG9sZF9yb3dzOworICAgICAgICBlbmQgPSBwcml2LT52aWV3Lml0ZW1zICsgb2xkUm93czsK
ICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcm93c19yYW5nZV9kZWwocHJp
diwgc3RhcnQsIGVuZCk7CiAgICAgfQogCkBAIC04MzcsMzYgKzgzNywzNiBAQCBzdGF0aWMgdm9p
ZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcmVjYWxjX3JlbmRlcmVycyhFd2tfVGlsZWRfQmFj
a2luZ19TdG9yZV9EYQogCiAgICAgcHJpdi0+dmlldy5pdGVtcyA9IHN0YXRpY19jYXN0PEVpbmFf
SW5saXN0Kio+KG5ld0l0ZW1zKTsKICAgICBwcml2LT52aWV3LnJvd3MgPSByb3dzOwotICAgIHBy
aXYtPnZpZXcuY29scyA9IGNvbHM7Ci0gICAgaWYgKHJvd3MgPiBvbGRfcm93cykgewotICAgICAg
ICBFaW5hX0lubGlzdCoqIHN0YXJ0ID0gcHJpdi0+dmlldy5pdGVtcyArIG9sZF9yb3dzOworICAg
IHByaXYtPnZpZXcuY29scyA9IGNvbHVtbnM7CisgICAgaWYgKHJvd3MgPiBvbGRSb3dzKSB7Cisg
ICAgICAgIEVpbmFfSW5saXN0Kiogc3RhcnQgPSBwcml2LT52aWV3Lml0ZW1zICsgb2xkUm93czsK
ICAgICAgICAgRWluYV9Jbmxpc3QqKiBlbmQgPSBwcml2LT52aWV3Lml0ZW1zICsgcm93czsKICAg
ICAgICAgZm9yICg7IHN0YXJ0IDwgZW5kOyBzdGFydCsrKSB7CiAgICAgICAgICAgICAqc3RhcnQg
PSAwOwotICAgICAgICAgICAgRWluYV9Cb29sIHIgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
dmlld19jb2xzX2VuZF9hZGQocHJpdiwgc3RhcnQsIDAsIGNvbHMpOworICAgICAgICAgICAgRWlu
YV9Cb29sIHIgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19jb2xzX2VuZF9hZGQocHJp
diwgc3RhcnQsIDAsIGNvbHVtbnMpOwogICAgICAgICAgICAgaWYgKCFyKSB7Ci0gICAgICAgICAg
ICAgICAgQ1JJVElDQUwoImZhaWxlZCB0byBhbGxvY2F0ZSAlbGQgY29sdW1ucyIsIGNvbHMpOwot
ICAgICAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3Jvd3NfcmFuZ2Vf
ZGVsKHByaXYsIHByaXYtPnZpZXcuaXRlbXMgKyBvbGRfcm93cywgc3RhcnQpOwotICAgICAgICAg
ICAgICAgIHByaXYtPnZpZXcucm93cyA9IG9sZF9yb3dzOworICAgICAgICAgICAgICAgIENSSVRJ
Q0FMKCJmYWlsZWQgdG8gYWxsb2NhdGUgJWxkIGNvbHVtbnMiLCBjb2x1bW5zKTsKKyAgICAgICAg
ICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19yb3dzX3JhbmdlX2RlbChwcml2
LCBwcml2LT52aWV3Lml0ZW1zICsgb2xkUm93cywgc3RhcnQpOworICAgICAgICAgICAgICAgIHBy
aXYtPnZpZXcucm93cyA9IG9sZFJvd3M7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAgICAgfQogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKGNvbHMgIT0gb2xkX2NvbHMpIHsK
LSAgICAgICAgaW50IHRvZG8gPSBjb2xzIC0gb2xkX2NvbHM7CisgICAgaWYgKGNvbHVtbnMgIT0g
b2xkQ29scykgeworICAgICAgICBpbnQgdG9kbyA9IGNvbHVtbnMgLSBvbGRDb2xzOwogICAgICAg
ICBFaW5hX0lubGlzdCoqIHN0YXJ0ID0gcHJpdi0+dmlldy5pdGVtczsKLSAgICAgICAgRWluYV9J
bmxpc3QqKiBlbmQgPSBzdGFydCArIHN0ZDo6bWluKG9sZF9yb3dzLCByb3dzKTsKKyAgICAgICAg
RWluYV9Jbmxpc3QqKiBlbmQgPSBzdGFydCArIHN0ZDo6bWluKG9sZFJvd3MsIHJvd3MpOwogICAg
ICAgICBpZiAodG9kbyA+IDApIHsKICAgICAgICAgICAgIGZvciAoOyBzdGFydCA8IGVuZDsgc3Rh
cnQrKykgewotICAgICAgICAgICAgICAgIEVpbmFfQm9vbCByID0gX2V3a190aWxlZF9iYWNraW5n
X3N0b3JlX3ZpZXdfY29sc19lbmRfYWRkKHByaXYsIHN0YXJ0LCBvbGRfY29scywgdG9kbyk7Ci0g
ICAgICAgICAgICAgICAgaWYgKCFyKSB7CisgICAgICAgICAgICAgICAgRWluYV9Cb29sIHJlc3Vs
dCA9IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X2NvbHNfZW5kX2FkZChwcml2LCBzdGFy
dCwgb2xkQ29scywgdG9kbyk7CisgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHsKICAgICAg
ICAgICAgICAgICAgICAgQ1JJVElDQUwoImZhaWxlZCB0byBhbGxvY2F0ZSAlZCBjb2x1bW5zISIs
IHRvZG8pOwogCiAgICAgICAgICAgICAgICAgICAgIGZvciAoc3RhcnQtLTsgc3RhcnQgPj0gcHJp
di0+dmlldy5pdGVtczsgc3RhcnQtLSkKICAgICAgICAgICAgICAgICAgICAgICAgIF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV92aWV3X2NvbHNfZW5kX2RlbChwcml2LCBzdGFydCwgdG9kbyk7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChyb3dzID4gb2xkX3Jvd3MpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHN0YXJ0ID0gcHJpdi0+dmlldy5pdGVtcyArIG9sZF9yb3dzOworICAgICAgICAg
ICAgICAgICAgICBpZiAocm93cyA+IG9sZFJvd3MpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHN0YXJ0ID0gcHJpdi0+dmlldy5pdGVtcyArIG9sZFJvd3M7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBlbmQgPSBwcml2LT52aWV3Lml0ZW1zICsgcm93czsKICAgICAgICAgICAgICAgICAgICAg
ICAgIGZvciAoOyBzdGFydCA8IGVuZDsgc3RhcnQrKykKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19jb2xzX2VuZF9kZWwocHJpdiwgc3Rh
cnQsIHRvZG8pOwpAQCAtOTAxLDkgKzkwMSw5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfdmlld19kYmcoY29uc3QgRXdrX1RpbGVkX0JhY2tpbmdfU3RvCiAg
ICAgRWluYV9Jbmxpc3QqKiBzdGFydCwgKiplbmQ7CiAgICAgcHJpbnRmKCJ0aWxlcz0lMmxkLCUy
bGQgIG1vZGVsPSUybGQsJTJsZCBbJWR4JWRdIGJhc2U9JSszbGQsJSs0bGQgb2Zmc2V0PSUrNGQs
JSs0ZCBvbGQ9JSs0ZCwlKzRkIGJhc2U9JSszZCwlKzNkXG4iLAogICAgICAgICAgICBwcml2LT52
aWV3LmNvbHMsIHByaXYtPnZpZXcucm93cywKLSAgICAgICAgICAgcHJpdi0+bW9kZWwuY3VyLmNv
bHMsIHByaXYtPm1vZGVsLmN1ci5yb3dzLAorICAgICAgICAgICBwcml2LT5tb2RlbC5jdXJyZW50
LmNvbHVtbnMsIHByaXYtPm1vZGVsLmN1cnJlbnQucm93cywKICAgICAgICAgICAgcHJpdi0+bW9k
ZWwud2lkdGgsIHByaXYtPm1vZGVsLmhlaWdodCwKLSAgICAgICAgICAgcHJpdi0+bW9kZWwuYmFz
ZS5jb2wsIHByaXYtPm1vZGVsLmJhc2Uucm93LAorICAgICAgICAgICBwcml2LT5tb2RlbC5iYXNl
LmNvbHVtbiwgcHJpdi0+bW9kZWwuYmFzZS5yb3csCiAgICAgICAgICAgIHByaXYtPnZpZXcub2Zm
c2V0LmN1ci54LCBwcml2LT52aWV3Lm9mZnNldC5jdXIueSwKICAgICAgICAgICAgcHJpdi0+dmll
dy5vZmZzZXQub2xkLngsIHByaXYtPnZpZXcub2Zmc2V0Lm9sZC55LAogICAgICAgICAgICBwcml2
LT52aWV3Lm9mZnNldC5iYXNlLngsIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSk7CkBAIC05MTEs
MTUgKzkxMSwxNSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3ZpZXdfZGJnKGNvbnN0IEV3a19UaWxlZF9CYWNraW5nX1N0bwogICAgIHN0YXJ0ID0gcHJpdi0+
dmlldy5pdGVtczsKICAgICBlbmQgPSBwcml2LT52aWV3Lml0ZW1zICsgcHJpdi0+dmlldy5yb3dz
OwogICAgIGZvciAoOyBzdGFydCA8IGVuZDsgc3RhcnQrKykgewotICAgICAgICBjb25zdCBFd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKiBpdDsKKyAgICAgICAgY29uc3QgRXdrX1RpbGVkX0Jh
Y2tpbmdfU3RvcmVfSXRlbSogaXRlbTsKIAotICAgICAgICBFSU5BX0lOTElTVF9GT1JFQUNIKCpz
dGFydCwgaXQpIHsKLSAgICAgICAgICAgIHByaW50ZigiICUrNGQsJSs0ZCAiLCBpdC0+Z2VvbWV0
cnkueCwgaXQtPmdlb21ldHJ5LnkpOworICAgICAgICBFSU5BX0lOTElTVF9GT1JFQUNIKCpzdGFy
dCwgaXRlbSkgeworICAgICAgICAgICAgcHJpbnRmKCIgJSs0ZCwlKzRkICIsIGl0ZW0tPmdlb21l
dHJ5LngsIGl0ZW0tPmdlb21ldHJ5LnkpOwogCi0gICAgICAgICAgICBpZiAoIWl0LT50aWxlKQor
ICAgICAgICAgICAgaWYgKCFpdGVtLT50aWxlKQogICAgICAgICAgICAgICAgIHByaW50ZigiICAg
ICAgICAgICAgOyIpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHByaW50Zigi
JThwICVsdSwlbHU7IiwgaXQtPnRpbGUsIGl0LT50aWxlLT5jb2wsIGl0LT50aWxlLT5yb3cpOwor
ICAgICAgICAgICAgICAgIHByaW50ZigiJThwICVsdSwlbHU7IiwgaXRlbS0+dGlsZSwgaXRlbS0+
dGlsZS0+Y29sLCBpdGVtLT50aWxlLT5yb3cpOwogICAgICAgICB9CiAgICAgICAgIHByaW50Zigi
XG4iKTsKICAgICB9CkBAIC05NDEsMzcgKzk0MSwzNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfZGJnKGNvbnN0IEV3a19UaWxlZF9CYWNraW5nX1N0
bwogICovCiBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld193cmFwX3Vw
KEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYsIEV2YXNfQ29vcmQgeCwgRXZhc19D
b29yZCB5LCB1bnNpZ25lZCBpbnQgY291bnQpCiB7Ci0gICAgdW5zaWduZWQgaW50IGxhc3Rfcm93
ID0gcHJpdi0+dmlldy5yb3dzIC0gMTsKLSAgICBFdmFzX0Nvb3JkIHR3ID0gcHJpdi0+dmlldy50
aWxlLndpZHRoOwotICAgIEV2YXNfQ29vcmQgdGggPSBwcml2LT52aWV3LnRpbGUuaGVpZ2h0Owot
ICAgIEV2YXNfQ29vcmQgb2ZmX3kgPSBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgKyBjb3VudCAq
IHRoOwotICAgIEV2YXNfQ29vcmQgb3kgPSB5ICsgKGxhc3Rfcm93IC0gY291bnQgKyAxKSAqIHRo
ICsgb2ZmX3k7Ci0gICAgRWluYV9Jbmxpc3QqKiBpdHJfc3RhcnQsICoqaXRyX2VuZDsKKyAgICB1
bnNpZ25lZCBpbnQgbGFzdFJvdyA9IHByaXYtPnZpZXcucm93cyAtIDE7CisgICAgRXZhc19Db29y
ZCB0aWxlV2lkdGggPSBwcml2LT52aWV3LnRpbGUud2lkdGg7CisgICAgRXZhc19Db29yZCB0aWxl
SGVpZ2h0ID0gcHJpdi0+dmlldy50aWxlLmhlaWdodDsKKyAgICBFdmFzX0Nvb3JkIG9mZnNldFkg
PSBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgKyBjb3VudCAqIHRpbGVIZWlnaHQ7CisgICAgRXZh
c19Db29yZCB0aWxlUG9zaXRpb25ZID0geSArIChsYXN0Um93IC0gY291bnQgKyAxKSAqIHRpbGVI
ZWlnaHQgKyBvZmZzZXRZOworICAgIEVpbmFfSW5saXN0KiogaXRlcmF0b3JTdGFydCwgKippdGVy
YXRvckVuZDsKIAotICAgIGl0cl9zdGFydCA9IHByaXYtPnZpZXcuaXRlbXM7Ci0gICAgaXRyX2Vu
ZCA9IGl0cl9zdGFydCArIGxhc3Rfcm93OworICAgIGl0ZXJhdG9yU3RhcnQgPSBwcml2LT52aWV3
Lml0ZW1zOworICAgIGl0ZXJhdG9yRW5kID0gaXRlcmF0b3JTdGFydCArIGxhc3RSb3c7CiAKICAg
ICBmb3IgKDsgY291bnQgPiAwOyBjb3VudC0tKSB7Ci0gICAgICAgIEVpbmFfSW5saXN0KiogaXRy
OwotICAgICAgICBFaW5hX0lubGlzdCogdG1wID0gKml0cl9zdGFydDsKLSAgICAgICAgRXdrX1Rp
bGVkX0JhY2tpbmdfU3RvcmVfSXRlbSogaXQ7Ci0gICAgICAgIEV2YXNfQ29vcmQgb3ggPSB4ICsg
cHJpdi0+dmlldy5vZmZzZXQuYmFzZS54OwotICAgICAgICBpbnQgYyA9IDA7CisgICAgICAgIEVp
bmFfSW5saXN0KiogaXRlcmF0b3JMaXN0OworICAgICAgICBFaW5hX0lubGlzdCogdGVtcCA9ICpp
dGVyYXRvclN0YXJ0OworICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKiBpdGVt
OworICAgICAgICBFdmFzX0Nvb3JkIG9yaWdpYW5sWCA9IHggKyBwcml2LT52aWV3Lm9mZnNldC5i
YXNlLng7CisgICAgICAgIGludCBjb3VudDEgPSAwOwogCi0gICAgICAgIGZvciAoaXRyID0gaXRy
X3N0YXJ0OyBpdHIgPCBpdHJfZW5kOyBpdHIrKykKLSAgICAgICAgICAgICppdHIgPSAqKGl0ciAr
IDEpOwotICAgICAgICAqaXRyID0gdG1wOworICAgICAgICBmb3IgKGl0ZXJhdG9yTGlzdCA9IGl0
ZXJhdG9yU3RhcnQ7IGl0ZXJhdG9yTGlzdCA8IGl0ZXJhdG9yRW5kOyBpdGVyYXRvckxpc3QrKykK
KyAgICAgICAgICAgICppdGVyYXRvckxpc3QgPSAqKGl0ZXJhdG9yTGlzdCArIDEpOworICAgICAg
ICAqaXRlcmF0b3JMaXN0ID0gdGVtcDsKIAogICAgICAgICBwcml2LT5tb2RlbC5iYXNlLnJvdysr
OwotICAgICAgICBFSU5BX0lOTElTVF9GT1JFQUNIKHRtcCwgaXQpIHsKLSAgICAgICAgICAgIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX21vdmUoaXQsIG94LCBveSk7Ci0gICAgICAgICAg
ICBveCArPSB0dzsKLSAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2Zp
bGwocHJpdiwgaXQsIGMsIGxhc3Rfcm93KTsKLSAgICAgICAgICAgIGMrKzsKKyAgICAgICAgRUlO
QV9JTkxJU1RfRk9SRUFDSCh0ZW1wLCBpdGVtKSB7CisgICAgICAgICAgICBfZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfaXRlbV9tb3ZlKGl0ZW0sIG9yaWdpYW5sWCwgdGlsZVBvc2l0aW9uWSk7Cisg
ICAgICAgICAgICBvcmlnaWFubFggKz0gdGlsZVdpZHRoOworICAgICAgICAgICAgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX2l0ZW1fZmlsbChwcml2LCBpdGVtLCBjb3VudDEsIGxhc3RSb3cpOwor
ICAgICAgICAgICAgY291bnQxKys7CiAgICAgICAgIH0KLSAgICAgICAgb3kgKz0gdGg7CisgICAg
ICAgIHRpbGVQb3NpdGlvblkgKz0gdGlsZUhlaWdodDsKICAgICB9Ci0gICAgcHJpdi0+dmlldy5v
ZmZzZXQuYmFzZS55ID0gb2ZmX3k7CisgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ID0gb2Zm
c2V0WTsKIH0KIAogLyoqCkBAIC05ODksMzYgKzk4OSwzNiBAQCBzdGF0aWMgdm9pZCBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfdmlld193cmFwX3VwKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0Rh
dGEqCiAgKi8KIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3dyYXBf
ZG93bihFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2LCBFdmFzX0Nvb3JkIHgsIEV2
YXNfQ29vcmQgeSwgdW5zaWduZWQgaW50IGNvdW50KQogewotICAgIEV2YXNfQ29vcmQgdHcgPSBw
cml2LT52aWV3LnRpbGUud2lkdGg7Ci0gICAgRXZhc19Db29yZCB0aCA9IHByaXYtPnZpZXcudGls
ZS5oZWlnaHQ7Ci0gICAgRXZhc19Db29yZCBvZmZfeSA9IHByaXYtPnZpZXcub2Zmc2V0LmJhc2Uu
eSAtIGNvdW50ICogdGg7Ci0gICAgRXZhc19Db29yZCBveSA9IHkgKyBvZmZfeSArIChjb3VudCAt
IDEpICogdGg7Ci0gICAgRWluYV9Jbmxpc3QqKiBpdHJfc3RhcnQsICoqaXRyX2VuZDsKKyAgICBF
dmFzX0Nvb3JkIHRpbGVXaWR0aCA9IHByaXYtPnZpZXcudGlsZS53aWR0aDsKKyAgICBFdmFzX0Nv
b3JkIHRpbGVIZWlnaHQgPSBwcml2LT52aWV3LnRpbGUuaGVpZ2h0OworICAgIEV2YXNfQ29vcmQg
b2Zmc2V0WSA9IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSAtIGNvdW50ICogdGlsZUhlaWdodDsK
KyAgICBFdmFzX0Nvb3JkIHRpbGVQb3NpdGlvblkgPSB5ICsgb2Zmc2V0WSArIChjb3VudCAtIDEp
ICogdGlsZUhlaWdodDsKKyAgICBFaW5hX0lubGlzdCoqIGl0ZXJhdG9yU3RhcnQsICoqaXRlcmF0
b3JFbmQ7CiAKLSAgICBpdHJfc3RhcnQgPSBwcml2LT52aWV3Lml0ZW1zICsgcHJpdi0+dmlldy5y
b3dzIC0gMTsKLSAgICBpdHJfZW5kID0gcHJpdi0+dmlldy5pdGVtczsKKyAgICBpdGVyYXRvclN0
YXJ0ID0gcHJpdi0+dmlldy5pdGVtcyArIHByaXYtPnZpZXcucm93cyAtIDE7CisgICAgaXRlcmF0
b3JFbmQgPSBwcml2LT52aWV3Lml0ZW1zOwogCiAgICAgZm9yICg7IGNvdW50ID4gMDsgY291bnQt
LSkgewotICAgICAgICBFaW5hX0lubGlzdCoqIGl0cjsKLSAgICAgICAgRWluYV9Jbmxpc3QqIHRt
cCA9ICppdHJfc3RhcnQ7Ci0gICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0qIGl0
OwotICAgICAgICBFdmFzX0Nvb3JkIG94ID0geCArIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueDsK
LSAgICAgICAgaW50IGMgPSAwOworICAgICAgICBFaW5hX0lubGlzdCoqIGl0ZXJhdG9yTGlzdDsK
KyAgICAgICAgRWluYV9Jbmxpc3QqIHRlbXAgPSAqaXRlcmF0b3JTdGFydDsKKyAgICAgICAgRXdr
X1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSogaXRlbTsKKyAgICAgICAgRXZhc19Db29yZCB0aWxl
UG9zaXRpb25YID0geCArIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueDsKKyAgICAgICAgaW50IGNv
dW50MSA9IDA7CiAKLSAgICAgICAgZm9yIChpdHIgPSBpdHJfc3RhcnQ7IGl0ciA+IGl0cl9lbmQ7
IGl0ci0tKQotICAgICAgICAgICAgKml0ciA9ICooaXRyIC0gMSk7Ci0gICAgICAgICppdHIgPSB0
bXA7CisgICAgICAgIGZvciAoaXRlcmF0b3JMaXN0ID0gaXRlcmF0b3JTdGFydDsgaXRlcmF0b3JM
aXN0ID4gaXRlcmF0b3JFbmQ7IGl0ZXJhdG9yTGlzdC0tKQorICAgICAgICAgICAgKml0ZXJhdG9y
TGlzdCA9ICooaXRlcmF0b3JMaXN0IC0gMSk7CisgICAgICAgICppdGVyYXRvckxpc3QgPSB0ZW1w
OwogCiAgICAgICAgIHByaXYtPm1vZGVsLmJhc2Uucm93LS07Ci0gICAgICAgIEVJTkFfSU5MSVNU
X0ZPUkVBQ0godG1wLCBpdCkgewotICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X2l0ZW1fbW92ZShpdCwgb3gsIG95KTsKLSAgICAgICAgICAgIG94ICs9IHR3OwotICAgICAgICAg
ICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZmlsbChwcml2LCBpdCwgYywgMCk7Ci0g
ICAgICAgICAgICBjKys7CisgICAgICAgIEVJTkFfSU5MSVNUX0ZPUkVBQ0godGVtcCwgaXRlbSkg
eworICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fbW92ZShpdGVtLCB0
aWxlUG9zaXRpb25YLCB0aWxlUG9zaXRpb25ZKTsKKyAgICAgICAgICAgIHRpbGVQb3NpdGlvblgg
Kz0gdGlsZVdpZHRoOworICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1f
ZmlsbChwcml2LCBpdGVtLCBjb3VudDEsIDApOworICAgICAgICAgICAgY291bnQxKys7CiAgICAg
ICAgIH0KLSAgICAgICAgb3kgLT0gdGg7CisgICAgICAgIHRpbGVQb3NpdGlvblkgLT0gdGlsZUhl
aWdodDsKICAgICB9Ci0gICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ID0gb2ZmX3k7CisgICAg
cHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ID0gb2Zmc2V0WTsKIH0KIAogLyoqCkBAIC0xMDM2LDM2
ICsxMDM2LDM2IEBAIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3dy
YXBfZG93bihFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhCiAgKi8KIHN0YXRpYyB2b2lkIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3dyYXBfbGVmdChFd2tfVGlsZWRfQmFja2luZ19T
dG9yZV9EYXRhKiBwcml2LCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwgdW5zaWduZWQgaW50
IGNvdW50KQogewotICAgIHVuc2lnbmVkIGludCByLCBsYXN0X2NvbCA9IHByaXYtPnZpZXcuY29s
cyAtIDE7Ci0gICAgRXZhc19Db29yZCB0dyA9IHByaXYtPnZpZXcudGlsZS53aWR0aDsKLSAgICBF
dmFzX0Nvb3JkIHRoID0gcHJpdi0+dmlldy50aWxlLmhlaWdodDsKLSAgICBFdmFzX0Nvb3JkIG9m
Zl94ID0gcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54ICsgY291bnQgKiB0dzsKKyAgICB1bnNpZ25l
ZCBpbnQgcm93LCBsYXN0Q29sdW1uID0gcHJpdi0+dmlldy5jb2xzIC0gMTsKKyAgICBFdmFzX0Nv
b3JkIHRpbGVXaWR0aCA9IHByaXYtPnZpZXcudGlsZS53aWR0aDsKKyAgICBFdmFzX0Nvb3JkIHRp
bGVIZWlnaHQgPSBwcml2LT52aWV3LnRpbGUuaGVpZ2h0OworICAgIEV2YXNfQ29vcmQgb2Zmc2V0
WCA9IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCArIGNvdW50ICogdGlsZVdpZHRoOwogICAgIEV2
YXNfQ29vcmQgb3kgPSB5ICsgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55OwotICAgIEVpbmFfSW5s
aXN0KiogaXRyOwotICAgIEVpbmFfSW5saXN0KiogaXRyX2VuZDsKKyAgICBFaW5hX0lubGlzdCoq
IGl0ZXJhdG9yOworICAgIEVpbmFfSW5saXN0KiogaXRlcmF0b3JFbmQ7CiAKLSAgICBpdHIgPSBw
cml2LT52aWV3Lml0ZW1zOwotICAgIGl0cl9lbmQgPSBpdHIgKyBwcml2LT52aWV3LnJvd3M7Ci0g
ICAgciA9IDA7CisgICAgaXRlcmF0b3IgPSBwcml2LT52aWV3Lml0ZW1zOworICAgIGl0ZXJhdG9y
RW5kID0gaXRlcmF0b3IgKyBwcml2LT52aWV3LnJvd3M7CisgICAgcm93ID0gMDsKIAotICAgIHBy
aXYtPm1vZGVsLmJhc2UuY29sICs9IGNvdW50OworICAgIHByaXYtPm1vZGVsLmJhc2UuY29sdW1u
ICs9IGNvdW50OwogCi0gICAgZm9yICg7IGl0ciA8IGl0cl9lbmQ7IGl0cisrLCByKyspIHsKLSAg
ICAgICAgRXZhc19Db29yZCBveCA9IHggKyAobGFzdF9jb2wgLSBjb3VudCArIDEpICogdHcgKyBv
ZmZfeDsKLSAgICAgICAgdW5zaWduZWQgaW50IGksIGMgPSBsYXN0X2NvbCAtIGNvdW50ICsgMTsK
KyAgICBmb3IgKDsgaXRlcmF0b3IgPCBpdGVyYXRvckVuZDsgaXRlcmF0b3IrKywgcm93KyspIHsK
KyAgICAgICAgRXZhc19Db29yZCBveCA9IHggKyAobGFzdENvbHVtbiAtIGNvdW50ICsgMSkgKiB0
aWxlV2lkdGggKyBvZmZzZXRYOworICAgICAgICB1bnNpZ25lZCBpbnQgYyA9IGxhc3RDb2x1bW4g
LSBjb3VudCArIDE7CiAKLSAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyssIGMrKywg
b3ggKz0gdHcpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsg
aSsrLCBjKyssIG94ICs9IHRpbGVXaWR0aCkgewogICAgICAgICAgICAgRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfSXRlbSogaXQ7Ci0gICAgICAgICAgICBpdCA9IEVJTkFfSU5MSVNUX0NPTlRBSU5F
Ul9HRVQoKml0ciwgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSk7Ci0gICAgICAgICAgICAq
aXRyID0gZWluYV9pbmxpc3RfZGVtb3RlKCppdHIsICppdHIpOworICAgICAgICAgICAgaXQgPSBF
SU5BX0lOTElTVF9DT05UQUlORVJfR0VUKCppdGVyYXRvciwgRXdrX1RpbGVkX0JhY2tpbmdfU3Rv
cmVfSXRlbSk7CisgICAgICAgICAgICAqaXRlcmF0b3IgPSBlaW5hX2lubGlzdF9kZW1vdGUoKml0
ZXJhdG9yLCAqaXRlcmF0b3IpOwogCiAgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfaXRlbV9tb3ZlKGl0LCBveCwgb3kpOwotICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5n
X3N0b3JlX2l0ZW1fZmlsbChwcml2LCBpdCwgYywgcik7CisgICAgICAgICAgICBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfaXRlbV9maWxsKHByaXYsIGl0LCBjLCByb3cpOwogICAgICAgICB9Ci0g
ICAgICAgIG95ICs9IHRoOworICAgICAgICBveSArPSB0aWxlSGVpZ2h0OwogICAgIH0KIAotICAg
IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCA9IG9mZl94OworICAgIHByaXYtPnZpZXcub2Zmc2V0
LmJhc2UueCA9IG9mZnNldFg7CiB9CiAKIC8qKgpAQCAtMTA4MywxODMgKzEwODMsMTgzIEBAIHN0
YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3dyYXBfbGVmdChFd2tfVGls
ZWRfQmFja2luZ19TdG9yZV9EYXRhCiAgKi8KIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV92aWV3X3dyYXBfcmlnaHQoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJp
diwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHksIHVuc2lnbmVkIGludCBjb3VudCkKIHsKLSAg
ICB1bnNpZ25lZCBpbnQgcjsKLSAgICBFdmFzX0Nvb3JkIHR3ID0gcHJpdi0+dmlldy50aWxlLndp
ZHRoOwotICAgIEV2YXNfQ29vcmQgdGggPSBwcml2LT52aWV3LnRpbGUuaGVpZ2h0OwotICAgIEV2
YXNfQ29vcmQgb2ZmX3ggPSBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggLSBjb3VudCAqIHR3Owot
ICAgIEV2YXNfQ29vcmQgb3kgPSB5ICsgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55OwotICAgIEVp
bmFfSW5saXN0KiogaXRyLCAqKiBpdHJfZW5kOworICAgIHVuc2lnbmVkIGludCByb3c7CisgICAg
RXZhc19Db29yZCB0aWxlV2lkdGggPSBwcml2LT52aWV3LnRpbGUud2lkdGg7CisgICAgRXZhc19D
b29yZCB0aWxlSGVpZ2h0ID0gcHJpdi0+dmlldy50aWxlLmhlaWdodDsKKyAgICBFdmFzX0Nvb3Jk
IG9mZnNldFggPSBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggLSBjb3VudCAqIHRpbGVXaWR0aDsK
KyAgICBFdmFzX0Nvb3JkIHRpbGVQb3NpdGlvblkgPSB5ICsgcHJpdi0+dmlldy5vZmZzZXQuYmFz
ZS55OworICAgIEVpbmFfSW5saXN0KiogaXRlcmF0b3IsICoqIGl0ZXJhdG9yRW5kOwogCi0gICAg
aXRyID0gcHJpdi0+dmlldy5pdGVtczsKLSAgICBpdHJfZW5kID0gaXRyICsgcHJpdi0+dmlldy5y
b3dzOwotICAgIHIgPSAwOworICAgIGl0ZXJhdG9yID0gcHJpdi0+dmlldy5pdGVtczsKKyAgICBp
dGVyYXRvckVuZCA9IGl0ZXJhdG9yICsgcHJpdi0+dmlldy5yb3dzOworICAgIHJvdyA9IDA7CiAK
LSAgICBwcml2LT5tb2RlbC5iYXNlLmNvbCAtPSBjb3VudDsKKyAgICBwcml2LT5tb2RlbC5iYXNl
LmNvbHVtbiAtPSBjb3VudDsKIAotICAgIGZvciAoOyBpdHIgPCBpdHJfZW5kOyBpdHIrKywgcisr
KSB7Ci0gICAgICAgIEV2YXNfQ29vcmQgb3ggPSB4ICsgKGNvdW50IC0gMSkgKiB0dyArIG9mZl94
OwotICAgICAgICB1bnNpZ25lZCBpbnQgaSwgYyA9IGNvdW50IC0gMTsKKyAgICBmb3IgKDsgaXRl
cmF0b3IgPCBpdGVyYXRvckVuZDsgaXRlcmF0b3IrKywgcm93KyspIHsKKyAgICAgICAgRXZhc19D
b29yZCBveCA9IHggKyAoY291bnQgLSAxKSAqIHRpbGVXaWR0aCArIG9mZnNldFg7CisgICAgICAg
IHVuc2lnbmVkIGludCBjID0gY291bnQgLSAxOwogCi0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBj
b3VudDsgaSsrLCBjLS0sIG94IC09IHR3KSB7Ci0gICAgICAgICAgICBFd2tfVGlsZWRfQmFja2lu
Z19TdG9yZV9JdGVtKiBpdDsKLSAgICAgICAgICAgIGl0ID0gRUlOQV9JTkxJU1RfQ09OVEFJTkVS
X0dFVCgoKml0ciktPmxhc3QsIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0pOwotICAgICAg
ICAgICAgKml0ciA9IGVpbmFfaW5saXN0X3Byb21vdGUoKml0ciwgKCppdHIpLT5sYXN0KTsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrLCBjLS0sIG94IC09
IHRpbGVXaWR0aCkgeworICAgICAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSog
aXRlbTsKKyAgICAgICAgICAgIGl0ZW0gPSBFSU5BX0lOTElTVF9DT05UQUlORVJfR0VUKCgqaXRl
cmF0b3IpLT5sYXN0LCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKTsKKyAgICAgICAgICAg
ICppdGVyYXRvciA9IGVpbmFfaW5saXN0X3Byb21vdGUoKml0ZXJhdG9yLCAoKml0ZXJhdG9yKS0+
bGFzdCk7CiAKLSAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX21vdmUo
aXQsIG94LCBveSk7Ci0gICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9m
aWxsKHByaXYsIGl0LCBjLCByKTsKKyAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV9pdGVtX21vdmUoaXRlbSwgb3gsIHRpbGVQb3NpdGlvblkpOworICAgICAgICAgICAgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZmlsbChwcml2LCBpdGVtLCBjLCByb3cpOwogICAgICAg
ICB9Ci0gICAgICAgIG95ICs9IHRoOworICAgICAgICB0aWxlUG9zaXRpb25ZICs9IHRpbGVIZWln
aHQ7CiAgICAgfQogCi0gICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54ID0gb2ZmX3g7CisgICAg
cHJpdi0+dmlldy5vZmZzZXQuYmFzZS54ID0gb2Zmc2V0WDsKIH0KIAogc3RhdGljIHZvaWQgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcmVmaWxsKEV3a19UaWxlZF9CYWNraW5nX1N0b3Jl
X0RhdGEqIHByaXYsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5LCBpbnQgc3RlcFgsIGludCBz
dGVwWSkKIHsKLSAgICBFaW5hX0lubGlzdCoqIGl0ciwgKippdHJfZW5kOwotICAgIEV2YXNfQ29v
cmQgYmFzZV9veCwgb3ksIHR3LCB0aDsKKyAgICBFaW5hX0lubGlzdCoqIGl0ZXJhdG9yLCAqKml0
ZXJhdG9yRW5kOworICAgIEV2YXNfQ29vcmQgYmFzZVRpbGVQb3NpdGlvblgsIHRpbGVQb3NpdGlv
blksIHRpbGVXaWR0aCwgdGlsZUhlaWdodDsKICAgICB1bnNpZ25lZCBpbnQgcjsKIAogICAgIGV2
YXNfb2JqZWN0X21vdmUocHJpdi0+YmFzZS5jbGlwcGVyLCB4LCB5KTsKIAotICAgIHR3ID0gcHJp
di0+dmlldy50aWxlLndpZHRoOwotICAgIHRoID0gcHJpdi0+dmlldy50aWxlLmhlaWdodDsKKyAg
ICB0aWxlV2lkdGggPSBwcml2LT52aWV3LnRpbGUud2lkdGg7CisgICAgdGlsZUhlaWdodCA9IHBy
aXYtPnZpZXcudGlsZS5oZWlnaHQ7CiAKLSAgICBiYXNlX294ID0geCArIHByaXYtPnZpZXcub2Zm
c2V0LmJhc2UueDsKLSAgICBveSA9IHkgKyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnk7CisgICAg
YmFzZVRpbGVQb3NpdGlvblggPSB4ICsgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54OworICAgIHRp
bGVQb3NpdGlvblkgPSB5ICsgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55OwogCi0gICAgaXRyID0g
cHJpdi0+dmlldy5pdGVtczsKLSAgICBpdHJfZW5kID0gaXRyICsgcHJpdi0+dmlldy5yb3dzOwor
ICAgIGl0ZXJhdG9yID0gcHJpdi0+dmlldy5pdGVtczsKKyAgICBpdGVyYXRvckVuZCA9IGl0ZXJh
dG9yICsgcHJpdi0+dmlldy5yb3dzOwogICAgIHIgPSAwOwogCi0gICAgcHJpdi0+bW9kZWwuYmFz
ZS5jb2wgLT0gc3RlcFg7CisgICAgcHJpdi0+bW9kZWwuYmFzZS5jb2x1bW4gLT0gc3RlcFg7CiAg
ICAgcHJpdi0+bW9kZWwuYmFzZS5yb3cgLT0gc3RlcFk7CiAKLSAgICBmb3IgKDsgaXRyIDwgaXRy
X2VuZDsgaXRyKyssIHIrKykgewotICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVt
KiBpdDsKLSAgICAgICAgRXZhc19Db29yZCBveCA9IGJhc2Vfb3g7Ci0gICAgICAgIHVuc2lnbmVk
IGludCBjID0gMDsKLSAgICAgICAgRUlOQV9JTkxJU1RfRk9SRUFDSCgqaXRyLCBpdCkgewotICAg
ICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZmlsbChwcml2LCBpdCwgYywg
cik7Ci0gICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9tb3ZlKGl0LCBv
eCwgb3kpOwotICAgICAgICAgICAgYysrOwotICAgICAgICAgICAgb3ggKz0gdHc7CisgICAgZm9y
ICg7IGl0ZXJhdG9yIDwgaXRlcmF0b3JFbmQ7IGl0ZXJhdG9yKyssIHIrKykgeworICAgICAgICBF
d2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKiBpdGVtOworICAgICAgICBFdmFzX0Nvb3JkIG5l
d1RpbGVQb3NpdGlvblggPSBiYXNlVGlsZVBvc2l0aW9uWDsKKyAgICAgICAgdW5zaWduZWQgaW50
IGNvdW50ID0gMDsKKyAgICAgICAgRUlOQV9JTkxJU1RfRk9SRUFDSCgqaXRlcmF0b3IsIGl0ZW0p
IHsKKyAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2ZpbGwocHJpdiwg
aXRlbSwgY291bnQsIHIpOworICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0
ZW1fbW92ZShpdGVtLCBuZXdUaWxlUG9zaXRpb25YLCB0aWxlUG9zaXRpb25ZKTsKKyAgICAgICAg
ICAgIGNvdW50Kys7CisgICAgICAgICAgICBuZXdUaWxlUG9zaXRpb25YICs9IHRpbGVXaWR0aDsK
ICAgICAgICAgfQotICAgICAgICBveSArPSB0aDsKKyAgICAgICAgdGlsZVBvc2l0aW9uWSArPSB0
aWxlSGVpZ2h0OwogICAgIH0KIH0KIAogc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX3ZpZXdfcG9zX2FwcGx5KEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYsIEV2
YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5KQogewotICAgIEVpbmFfSW5saXN0KiogaXRyLCAqKml0
cl9lbmQ7Ci0gICAgRXZhc19Db29yZCBiYXNlX294LCBveSwgdHcsIHRoOworICAgIEVpbmFfSW5s
aXN0KiogaXRlcmF0b3IsICoqaXRlcmF0b3JFbmQ7CisgICAgRXZhc19Db29yZCBiYXNlVGlsZVBv
c2l0aW9uWCwgYmFzZVRpbGVQb3NpdGlvblksIHRpbGVXaWR0aCwgdGlsZUhlaWdodDsKIAogICAg
IGV2YXNfb2JqZWN0X21vdmUocHJpdi0+YmFzZS5jbGlwcGVyLCB4LCB5KTsKIAotICAgIHR3ID0g
cHJpdi0+dmlldy50aWxlLndpZHRoOwotICAgIHRoID0gcHJpdi0+dmlldy50aWxlLmhlaWdodDsK
KyAgICB0aWxlV2lkdGggPSBwcml2LT52aWV3LnRpbGUud2lkdGg7CisgICAgdGlsZUhlaWdodCA9
IHByaXYtPnZpZXcudGlsZS5oZWlnaHQ7CiAKLSAgICBiYXNlX294ID0geCArIHByaXYtPnZpZXcu
b2Zmc2V0LmJhc2UueDsKLSAgICBveSA9IHkgKyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnk7Cisg
ICAgYmFzZVRpbGVQb3NpdGlvblggPSB4ICsgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54OworICAg
IGJhc2VUaWxlUG9zaXRpb25ZID0geSArIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueTsKIAotICAg
IGl0ciA9IHByaXYtPnZpZXcuaXRlbXM7Ci0gICAgaXRyX2VuZCA9IGl0ciArIHByaXYtPnZpZXcu
cm93czsKLSAgICBmb3IgKDsgaXRyIDwgaXRyX2VuZDsgaXRyKyspIHsKKyAgICBpdGVyYXRvciA9
IHByaXYtPnZpZXcuaXRlbXM7CisgICAgaXRlcmF0b3JFbmQgPSBpdGVyYXRvciArIHByaXYtPnZp
ZXcucm93czsKKyAgICBmb3IgKDsgaXRlcmF0b3IgPCBpdGVyYXRvckVuZDsgaXRlcmF0b3IrKykg
ewogICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKiBpdDsKLSAgICAgICAgRXZh
c19Db29yZCBveCA9IGJhc2Vfb3g7Ci0gICAgICAgIEVJTkFfSU5MSVNUX0ZPUkVBQ0goKml0ciwg
aXQpIHsKLSAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX21vdmUoaXQs
IG94LCBveSk7Ci0gICAgICAgICAgICBveCArPSB0dzsKKyAgICAgICAgRXZhc19Db29yZCBveCA9
IGJhc2VUaWxlUG9zaXRpb25YOworICAgICAgICBFSU5BX0lOTElTVF9GT1JFQUNIKCppdGVyYXRv
ciwgaXQpIHsKKyAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX21vdmUo
aXQsIG94LCBiYXNlVGlsZVBvc2l0aW9uWSk7CisgICAgICAgICAgICBveCArPSB0aWxlV2lkdGg7
CiAgICAgICAgIH0KLSAgICAgICAgb3kgKz0gdGg7CisgICAgICAgIGJhc2VUaWxlUG9zaXRpb25Z
ICs9IHRpbGVIZWlnaHQ7CiAgICAgfQogfQogCiBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfc21hcnRfY2FsY3VsYXRlX29mZnNldF9mb3JjZShFd2tfVGlsZWRfQmFja2luZ19T
dG9yZV9EYXRhKiBwcml2KQogewotICAgIEV2YXNfQ29vcmQgZHggPSBwcml2LT52aWV3Lm9mZnNl
dC5jdXIueCAtIHByaXYtPnZpZXcub2Zmc2V0Lm9sZC54OwotICAgIEV2YXNfQ29vcmQgZHkgPSBw
cml2LT52aWV3Lm9mZnNldC5jdXIueSAtIHByaXYtPnZpZXcub2Zmc2V0Lm9sZC55OwotICAgIEV2
YXNfQ29vcmQgdHcsIHRoOwotICAgIGludCBzdGVwX3ksIHN0ZXBfeDsKKyAgICBFdmFzX0Nvb3Jk
IGRlbHRhWCA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci54IC0gcHJpdi0+dmlldy5vZmZzZXQub2xk
Lng7CisgICAgRXZhc19Db29yZCBkZWx0YVkgPSBwcml2LT52aWV3Lm9mZnNldC5jdXIueSAtIHBy
aXYtPnZpZXcub2Zmc2V0Lm9sZC55OworICAgIEV2YXNfQ29vcmQgdGlsZVdpZHRoLCB0aWxlSGVp
Z2h0OworICAgIGludCBzdGVwWSwgc3RlcFg7CiAKLSAgICBJTkYoIm89JXAsIG9mZnNldDogJSs0
ZCwgJSs0ZCAoJSs0ZCwgJSs0ZCkiLAotICAgICAgICBwcml2LT5zZWxmLCBkeCwgZHksIHByaXYt
PnZpZXcub2Zmc2V0LmN1ci54LCBwcml2LT52aWV3Lm9mZnNldC5jdXIueSk7CisgICAgSU5GKCJl
d2tUaWxlJXAsIG9mZnNldDogJSs0ZCwgJSs0ZCAoJSs0ZCwgJSs0ZCkiLAorICAgICAgICBwcml2
LT5zZWxmLCBkZWx0YVgsIGRlbHRhWSwgcHJpdi0+dmlldy5vZmZzZXQuY3VyLngsIHByaXYtPnZp
ZXcub2Zmc2V0LmN1ci55KTsKIAotICAgIHR3ID0gcHJpdi0+dmlldy50aWxlLndpZHRoOwotICAg
IHRoID0gcHJpdi0+dmlldy50aWxlLmhlaWdodDsKKyAgICB0aWxlV2lkdGggPSBwcml2LT52aWV3
LnRpbGUud2lkdGg7CisgICAgdGlsZUhlaWdodCA9IHByaXYtPnZpZXcudGlsZS5oZWlnaHQ7CiAK
LSAgICBsb25nIG5ld19jb2wgPSAtcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggLyB0dzsKLSAgICBz
dGVwX3ggPSBwcml2LT5tb2RlbC5iYXNlLmNvbCAtIG5ld19jb2w7Ci0gICAgbG9uZyBuZXdfcm93
ID0gLXByaXYtPnZpZXcub2Zmc2V0LmN1ci55IC8gdGg7Ci0gICAgc3RlcF95ID0gcHJpdi0+bW9k
ZWwuYmFzZS5yb3cgLSBuZXdfcm93OworICAgIGxvbmcgbmV3Q29sdW1uID0gLXByaXYtPnZpZXcu
b2Zmc2V0LmN1ci54IC8gdGlsZVdpZHRoOworICAgIHN0ZXBYID0gcHJpdi0+bW9kZWwuYmFzZS5j
b2x1bW4gLSBuZXdDb2x1bW47CisgICAgbG9uZyBuZXdSb3cgPSAtcHJpdi0+dmlldy5vZmZzZXQu
Y3VyLnkgLyB0aWxlSGVpZ2h0OworICAgIHN0ZXBZID0gcHJpdi0+bW9kZWwuYmFzZS5yb3cgLSBu
ZXdSb3c7CiAKICAgICBwcml2LT52aWV3Lm9mZnNldC5vbGQueCA9IHByaXYtPnZpZXcub2Zmc2V0
LmN1ci54OwogICAgIHByaXYtPnZpZXcub2Zmc2V0Lm9sZC55ID0gcHJpdi0+dmlldy5vZmZzZXQu
Y3VyLnk7CiAgICAgZXZhc19vYmplY3RfbW92ZSgKLSAgICAgICAgcHJpdi0+Y29udGVudHNfY2xp
cHBlciwKKyAgICAgICAgcHJpdi0+Y29udGVudHNDbGlwcGVyLAogICAgICAgICBwcml2LT52aWV3
Lm9mZnNldC5jdXIueCArIHByaXYtPnZpZXcueCwKICAgICAgICAgcHJpdi0+dmlldy5vZmZzZXQu
Y3VyLnkgKyBwcml2LT52aWV3LnkpOwogCi0gICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54ICs9
IGR4IC0gc3RlcF94ICogdHc7Ci0gICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ICs9IGR5IC0g
c3RlcF95ICogdGg7CisgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54ICs9IGRlbHRhWCAtIHN0
ZXBYICogdGlsZVdpZHRoOworICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSArPSBkZWx0YVkg
LSBzdGVwWSAqIHRpbGVIZWlnaHQ7CiAKICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmll
d19yZWZpbGwKLSAgICAgICAgKHByaXYsIHByaXYtPnZpZXcueCwgcHJpdi0+dmlldy55LCBzdGVw
X3gsIHN0ZXBfeSk7CisgICAgICAgIChwcml2LCBwcml2LT52aWV3LngsIHByaXYtPnZpZXcueSwg
c3RlcFgsIHN0ZXBZKTsKIH0KIAogc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3NtYXJ0X2NhbGN1bGF0ZV9vZmZzZXQoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJp
diwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHkpCiB7Ci0gICAgRXZhc19Db29yZCBkeCA9IHBy
aXYtPnZpZXcub2Zmc2V0LmN1ci54IC0gcHJpdi0+dmlldy5vZmZzZXQub2xkLng7Ci0gICAgRXZh
c19Db29yZCBkeSA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci55IC0gcHJpdi0+dmlldy5vZmZzZXQu
b2xkLnk7Ci0gICAgRXZhc19Db29yZCB0dywgdGg7Ci0gICAgaW50IHN0ZXBfeSwgc3RlcF94Owor
ICAgIEV2YXNfQ29vcmQgZGVsdGFYID0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggLSBwcml2LT52
aWV3Lm9mZnNldC5vbGQueDsKKyAgICBFdmFzX0Nvb3JkIGRlbHRhWSA9IHByaXYtPnZpZXcub2Zm
c2V0LmN1ci55IC0gcHJpdi0+dmlldy5vZmZzZXQub2xkLnk7CisgICAgRXZhc19Db29yZCB0aWxl
V2lkdGgsIHRpbGVIZWlnaHQ7CisgICAgaW50IHN0ZXBZLCBzdGVwWDsKIAotICAgIElORigibz0l
cCwgb2Zmc2V0OiAlKzRkLCAlKzRkICglKzRkLCAlKzRkKSIsCi0gICAgICAgIHByaXYtPnNlbGYs
IGR4LCBkeSwgcHJpdi0+dmlldy5vZmZzZXQuY3VyLngsIHByaXYtPnZpZXcub2Zmc2V0LmN1ci55
KTsKKyAgICBJTkYoImV3a1RpbGUlcCwgb2Zmc2V0OiAlKzRkLCAlKzRkICglKzRkLCAlKzRkKSIs
CisgICAgICAgIHByaXYtPnNlbGYsIGRlbHRhWCwgZGVsdGFZLCBwcml2LT52aWV3Lm9mZnNldC5j
dXIueCwgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkpOwogCi0gICAgaWYgKCFkeCAmJiAhZHkpCisg
ICAgaWYgKCFkZWx0YVggJiYgIWRlbHRhWSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgdHcgPSBw
cml2LT52aWV3LnRpbGUud2lkdGg7Ci0gICAgdGggPSBwcml2LT52aWV3LnRpbGUuaGVpZ2h0Owor
ICAgIHRpbGVXaWR0aCA9IHByaXYtPnZpZXcudGlsZS53aWR0aDsKKyAgICB0aWxlSGVpZ2h0ID0g
cHJpdi0+dmlldy50aWxlLmhlaWdodDsKIAotICAgIGxvbmcgbmV3X2NvbCA9IC1wcml2LT52aWV3
Lm9mZnNldC5jdXIueCAvIHR3OwotICAgIHN0ZXBfeCA9IHByaXYtPm1vZGVsLmJhc2UuY29sIC0g
bmV3X2NvbDsKLSAgICBsb25nIG5ld19yb3cgPSAtcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkgLyB0
aDsKLSAgICBzdGVwX3kgPSBwcml2LT5tb2RlbC5iYXNlLnJvdyAtIG5ld19yb3c7CisgICAgbG9u
ZyBuZXdDb2wgPSAtcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggLyB0aWxlV2lkdGg7CisgICAgc3Rl
cFggPSBwcml2LT5tb2RlbC5iYXNlLmNvbHVtbiAtIG5ld0NvbDsKKyAgICBsb25nIG5ld1JvdyA9
IC1wcml2LT52aWV3Lm9mZnNldC5jdXIueSAvIHRpbGVIZWlnaHQ7CisgICAgc3RlcFkgPSBwcml2
LT5tb2RlbC5iYXNlLnJvdyAtIG5ld1JvdzsKIAogICAgIHByaXYtPnZpZXcub2Zmc2V0Lm9sZC54
ID0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLng7CiAgICAgcHJpdi0+dmlldy5vZmZzZXQub2xkLnkg
PSBwcml2LT52aWV3Lm9mZnNldC5jdXIueTsKICAgICBldmFzX29iamVjdF9tb3ZlKAotICAgICAg
ICBwcml2LT5jb250ZW50c19jbGlwcGVyLAorICAgICAgICBwcml2LT5jb250ZW50c0NsaXBwZXIs
CiAgICAgICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1ci54ICsgcHJpdi0+dmlldy54LAogICAgICAg
ICBwcml2LT52aWV3Lm9mZnNldC5jdXIueSArIHByaXYtPnZpZXcueSk7CiAKLSAgICBpZiAoKHN0
ZXBfeCA8IDAgJiYgc3RlcF94IDw9IC1wcml2LT52aWV3LmNvbHMpCi0gICAgICAgIHx8IChzdGVw
X3ggPiAwICYmIHN0ZXBfeCA+PSBwcml2LT52aWV3LmNvbHMpCi0gICAgICAgIHx8IChzdGVwX3kg
PCAwICYmIHN0ZXBfeSA8PSAtcHJpdi0+dmlldy5yb3dzKQotICAgICAgICB8fCAoc3RlcF95ID4g
MCAmJiBzdGVwX3kgPj0gcHJpdi0+dmlldy5yb3dzKSkgeworICAgIGlmICgoc3RlcFggPCAwICYm
IHN0ZXBYIDw9IC1wcml2LT52aWV3LmNvbHMpCisgICAgICAgIHx8IChzdGVwWCA+IDAgJiYgc3Rl
cFggPj0gcHJpdi0+dmlldy5jb2xzKQorICAgICAgICB8fCAoc3RlcFkgPCAwICYmIHN0ZXBZIDw9
IC1wcml2LT52aWV3LnJvd3MpCisgICAgICAgIHx8IChzdGVwWSA+IDAgJiYgc3RlcFkgPj0gcHJp
di0+dmlldy5yb3dzKSkgewogCi0gICAgICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCArPSBk
eCAtIHN0ZXBfeCAqIHR3OwotICAgICAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgKz0gZHkg
LSBzdGVwX3kgKiB0aDsKKyAgICAgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54ICs9IGRlbHRh
WCAtIHN0ZXBYICogdGlsZVdpZHRoOworICAgICAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkg
Kz0gZGVsdGFZIC0gc3RlcFkgKiB0aWxlSGVpZ2h0OwogCiAgICAgICAgIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV92aWV3X3JlZmlsbAotICAgICAgICAgICAgKHByaXYsIHByaXYtPnZpZXcueCwg
cHJpdi0+dmlldy55LCBzdGVwX3gsIHN0ZXBfeSk7CisgICAgICAgICAgICAocHJpdiwgcHJpdi0+
dmlldy54LCBwcml2LT52aWV3LnksIHN0ZXBYLCBzdGVwWSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggKz0gZHg7Ci0gICAgcHJpdi0+dmll
dy5vZmZzZXQuYmFzZS55ICs9IGR5OworICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCArPSBk
ZWx0YVg7CisgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ICs9IGRlbHRhWTsKIAotICAgIGlm
IChzdGVwX3kgPCAwKQotICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld193cmFw
X3VwKHByaXYsIHgsIHksIC1zdGVwX3kpOwotICAgIGVsc2UgaWYgKHN0ZXBfeSA+IDApCi0gICAg
ICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3dyYXBfZG93bihwcml2LCB4LCB5LCBz
dGVwX3kpOworICAgIGlmIChzdGVwWSA8IDApCisgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV92aWV3X3dyYXBfdXAocHJpdiwgeCwgeSwgLXN0ZXBZKTsKKyAgICBlbHNlIGlmIChzdGVw
WSA+IDApCisgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3dyYXBfZG93bihw
cml2LCB4LCB5LCBzdGVwWSk7CiAKLSAgICBpZiAoc3RlcF94IDwgMCkKLSAgICAgICAgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfd3JhcF9sZWZ0KHByaXYsIHgsIHksIC1zdGVwX3gpOwot
ICAgIGVsc2UgaWYgKHN0ZXBfeCA+IDApCi0gICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV92aWV3X3dyYXBfcmlnaHQocHJpdiwgeCwgeSwgc3RlcF94KTsKKyAgICBpZiAoc3RlcFggPCAw
KQorICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld193cmFwX2xlZnQocHJpdiwg
eCwgeSwgLXN0ZXBYKTsKKyAgICBlbHNlIGlmIChzdGVwWCA+IDApCisgICAgICAgIF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV92aWV3X3dyYXBfcmlnaHQocHJpdiwgeCwgeSwgc3RlcFgpOwogCiAg
ICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcG9zX2FwcGx5KHByaXYsIHgsIHkpOwog
fQpAQCAtMTI3MCwzMSArMTI3MCwzMSBAQCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfc21hcnRfY2FsY3VsYXRlX3BvcyhFd2tfVGlsZWRfQmFja2luZ19TdG9yZQogICAgIHBy
aXYtPnZpZXcueCA9IHg7CiAgICAgcHJpdi0+dmlldy55ID0geTsKICAgICBldmFzX29iamVjdF9t
b3ZlKAotICAgICAgICBwcml2LT5jb250ZW50c19jbGlwcGVyLAorICAgICAgICBwcml2LT5jb250
ZW50c0NsaXBwZXIsCiAgICAgICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1ci54ICsgcHJpdi0+dmll
dy54LAogICAgICAgICBwcml2LT52aWV3Lm9mZnNldC5jdXIueSArIHByaXYtPnZpZXcueSk7CiB9
CiAKIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9maWxsX3JlbmRlcmVycyhF
d2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2KQogewotICAgIEVpbmFfSW5saXN0KiBp
dDsKKyAgICBFaW5hX0lubGlzdCogbGlzdDsKICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9J
dGVtKiBpdGVtOwogICAgIGludCBpLCBqOwogCiAgICAgZm9yIChpID0gMDsgaSA8IHByaXYtPnZp
ZXcucm93czsgaSsrKSB7Ci0gICAgICAgIGl0ID0gcHJpdi0+dmlldy5pdGVtc1tpXTsKKyAgICAg
ICAgbGlzdCA9IHByaXYtPnZpZXcuaXRlbXNbaV07CiAgICAgICAgIGogPSAwOwotICAgICAgICBF
SU5BX0lOTElTVF9GT1JFQUNIKGl0LCBpdGVtKQorICAgICAgICBFSU5BX0lOTElTVF9GT1JFQUNI
KGxpc3QsIGl0ZW0pCiAgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9m
aWxsKHByaXYsIGl0ZW0sIGorKywgaSk7CiAgICAgfQogfQogCiBzdGF0aWMgdm9pZCBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfY2FsY3VsYXRlKEV2YXNfT2JqZWN0KiBld2tUaWxlKQog
ewotICAgIEV2YXNfQ29vcmQgeCwgeSwgdywgaDsKKyAgICBFdmFzX0Nvb3JkIHgsIHksIHdpZHRo
LCBoZWlnaHQ7CiAKLSAgICBldmFzX29iamVjdF9nZW9tZXRyeV9nZXQoZXdrVGlsZSwgJngsICZ5
LCAmdywgJmgpOwotICAgIERCRygibz0lcCBhdCAlZCwlZCArICVkeCVkIiwgZXdrVGlsZSwgeCwg
eSwgdywgaCk7CisgICAgZXZhc19vYmplY3RfZ2VvbWV0cnlfZ2V0KGV3a1RpbGUsICZ4LCAmeSwg
JndpZHRoLCAmaGVpZ2h0KTsKKyAgICBEQkcoImV3a1RpbGUlcCBhdCAlZCwlZCArICVkeCVkIiwg
ZXdrVGlsZSwgeCwgeSwgd2lkdGgsIGhlaWdodCk7CiAKICAgICBQUklWX0RBVEFfR0VUX09SX1JF
VFVSTihld2tUaWxlLCBwcml2KTsKIApAQCAtMTMwMywyNSArMTMwMywyNSBAQCBzdGF0aWMgdm9p
ZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfY2FsY3VsYXRlKEV2YXNfT2JqZWN0KiBl
d2tUaWxlKQogICAgIGV3a190aWxlX21hdHJpeF9mcmVlemUocHJpdi0+bW9kZWwubWF0cml4KTsK
IAogICAgIGlmICghcHJpdi0+cmVuZGVyLnN1c3BlbmQgJiYgcHJpdi0+Y2hhbmdlZC5tb2RlbCkg
ewotICAgICAgICB1bnNpZ25lZCBsb25nIGNvbHMsIHJvd3M7CisgICAgICAgIHVuc2lnbmVkIGxv
bmcgY29sdW1ucywgcm93czsKIAotICAgICAgICBjb2xzID0gcHJpdi0+bW9kZWwud2lkdGggLyBw
cml2LT52aWV3LnRpbGUud2lkdGggKyAxOworICAgICAgICBjb2x1bW5zID0gcHJpdi0+bW9kZWwu
d2lkdGggLyBwcml2LT52aWV3LnRpbGUud2lkdGggKyAxOwogICAgICAgICByb3dzID0gcHJpdi0+
bW9kZWwuaGVpZ2h0IC8gcHJpdi0+dmlldy50aWxlLmhlaWdodCArIDE7CiAKLSAgICAgICAgcHJp
di0+bW9kZWwub2xkLmNvbHMgPSBwcml2LT5tb2RlbC5jdXIuY29sczsKLSAgICAgICAgcHJpdi0+
bW9kZWwub2xkLnJvd3MgPSBwcml2LT5tb2RlbC5jdXIucm93czsKLSAgICAgICAgcHJpdi0+bW9k
ZWwuY3VyLmNvbHMgPSBjb2xzOwotICAgICAgICBwcml2LT5tb2RlbC5jdXIucm93cyA9IHJvd3M7
Ci0gICAgICAgIGlmIChwcml2LT5tb2RlbC5vbGQuY29scyA+IGNvbHMpCi0gICAgICAgICAgICBj
b2xzID0gcHJpdi0+bW9kZWwub2xkLmNvbHM7CisgICAgICAgIHByaXYtPm1vZGVsLm9sZC5jb2x1
bW5zID0gcHJpdi0+bW9kZWwuY3VycmVudC5jb2x1bW5zOworICAgICAgICBwcml2LT5tb2RlbC5v
bGQucm93cyA9IHByaXYtPm1vZGVsLmN1cnJlbnQucm93czsKKyAgICAgICAgcHJpdi0+bW9kZWwu
Y3VycmVudC5jb2x1bW5zID0gY29sdW1uczsKKyAgICAgICAgcHJpdi0+bW9kZWwuY3VycmVudC5y
b3dzID0gcm93czsKKyAgICAgICAgaWYgKHByaXYtPm1vZGVsLm9sZC5jb2x1bW5zID4gY29sdW1u
cykKKyAgICAgICAgICAgIGNvbHVtbnMgPSBwcml2LT5tb2RlbC5vbGQuY29sdW1uczsKICAgICAg
ICAgaWYgKHByaXYtPm1vZGVsLm9sZC5yb3dzID4gcm93cykKICAgICAgICAgICAgIHJvd3MgPSBw
cml2LT5tb2RlbC5vbGQucm93czsKLSAgICAgICAgZXdrX3RpbGVfbWF0cml4X3Jlc2l6ZShwcml2
LT5tb2RlbC5tYXRyaXgsIGNvbHMsIHJvd3MpOworICAgICAgICBld2tfdGlsZV9tYXRyaXhfcmVz
aXplKHByaXYtPm1vZGVsLm1hdHJpeCwgY29sdW1ucywgcm93cyk7CiAgICAgfQogCi0gICAgaWYg
KHByaXYtPmNoYW5nZWQucG9zICYmIChwcml2LT52aWV3LnggIT0geCB8fCBwcml2LT52aWV3Lnkg
IT0geSkpIHsKKyAgICBpZiAocHJpdi0+Y2hhbmdlZC5wb3NpdGlvbiAmJiAocHJpdi0+dmlldy54
ICE9IHggfHwgcHJpdi0+dmlldy55ICE9IHkpKSB7CiAgICAgICAgIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9zbWFydF9jYWxjdWxhdGVfcG9zKHByaXYsIHgsIHkpOwotICAgICAgICBwcml2LT5j
aGFuZ2VkLnBvcyA9IEVJTkFfRkFMU0U7CisgICAgICAgIHByaXYtPmNoYW5nZWQucG9zaXRpb24g
PSBFSU5BX0ZBTFNFOwogICAgIH0KICAgICBpZiAocHJpdi0+Y2hhbmdlZC5vZmZzZXQpIHsKICAg
ICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZV9vZmZzZXQocHJp
diwgeCwgeSk7CkBAIC0xMzI5LDcgKzEzMjksNyBAQCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfc21hcnRfY2FsY3VsYXRlKEV2YXNfT2JqZWN0KiBld2tUaWxlKQogICAgIH0K
IAogICAgIGlmIChwcml2LT5jaGFuZ2VkLnNpemUpIHsKLSAgICAgICAgX2V3a190aWxlZF9iYWNr
aW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZV9zaXplKHByaXYsIHcsIGgpOworICAgICAgICBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfY2FsY3VsYXRlX3NpemUocHJpdiwgd2lkdGgsIGhl
aWdodCk7CiAgICAgICAgIHByaXYtPmNoYW5nZWQuc2l6ZSA9IEVJTkFfRkFMU0U7CiAgICAgfQog
CkBAIC0xMzQxLDE3ICsxMzQxLDE3IEBAIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9zbWFydF9jYWxjdWxhdGUoRXZhc19PYmplY3QqIGV3a1RpbGUpCiAgICAgICAgIHJlY3Qu
aCA9IHByaXYtPm1vZGVsLmhlaWdodDsKICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X2ZpbGxfcmVuZGVyZXJzKHByaXYpOwogICAgICAgICBld2tfdGlsZV9tYXRyaXhfcmVzaXplKHBy
aXYtPm1vZGVsLm1hdHJpeCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcml2LT5t
b2RlbC5jdXIuY29scywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcml2LT5tb2Rl
bC5jdXIucm93cyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpdi0+bW9kZWwu
Y3VycmVudC5jb2x1bW5zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaXYtPm1v
ZGVsLmN1cnJlbnQucm93cyk7CiAgICAgICAgIHByaXYtPmNoYW5nZWQubW9kZWwgPSBFSU5BX0ZB
TFNFOwotICAgICAgICBldmFzX29iamVjdF9yZXNpemUocHJpdi0+Y29udGVudHNfY2xpcHBlciwg
cHJpdi0+bW9kZWwud2lkdGgsIHByaXYtPm1vZGVsLmhlaWdodCk7CisgICAgICAgIGV2YXNfb2Jq
ZWN0X3Jlc2l6ZShwcml2LT5jb250ZW50c0NsaXBwZXIsIHByaXYtPm1vZGVsLndpZHRoLCBwcml2
LT5tb2RlbC5oZWlnaHQpOwogICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRf
Y2FsY3VsYXRlX29mZnNldF9mb3JjZShwcml2KTsKIAogICAgICAgICAvKiBNYWtlIHN1cmUgd2Ug
ZG8gbm90IG1pc3MgYW55IGltcG9ydGFudCByZXBhaW50IGJ5CiAgICAgICAgICAqIHJlcGFpbnRp
bmcgdGhlIHdob2xlIHZpZXdwb3J0ICovCi0gICAgICAgIGNvbnN0IEVpbmFfUmVjdGFuZ2xlIHIg
PQorICAgICAgICBjb25zdCBFaW5hX1JlY3RhbmdsZSByZWN0MSA9CiAgICAgICAgIHsgMCwgMCwg
cHJpdi0+bW9kZWwud2lkdGgsIHByaXYtPm1vZGVsLmhlaWdodCB9OwotICAgICAgICBld2tfdGls
ZV9tYXRyaXhfdXBkYXRlKHByaXYtPm1vZGVsLm1hdHJpeCwgJnIsCisgICAgICAgIGV3a190aWxl
X21hdHJpeF91cGRhdGUocHJpdi0+bW9kZWwubWF0cml4LCAmcmVjdDEsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcHJpdi0+dmlldy50aWxlLnpvb20pOwogICAgIH0KIApAQCAtMTQw
Miw3ICsxNDAyLDcgQEAgdm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9yZW5kZXJfY2Jfc2V0
KEV2YXNfT2JqZWN0KiBld2tUaWxlLCBFaW5hX0Jvb2wgKCpjYWwKIHsKICAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTihjYWxsYmFjayk7CiAgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4o
ZXdrVGlsZSwgcHJpdik7Ci0gICAgcHJpdi0+cmVuZGVyLmNiID0gY2FsbGJhY2s7CisgICAgcHJp
di0+cmVuZGVyLmNhbGxiYWNrID0gY2FsbGJhY2s7CiAgICAgcHJpdi0+cmVuZGVyLmRhdGEgPSAo
dm9pZCopZGF0YTsKIH0KIApAQCAtMTQzOSw3ICsxNDM5LDcgQEAgc3RhdGljIEVpbmFfQm9vbCBf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc2Nyb2xsX2Z1bGxfb2Zmc2V0X3NldF9pbnRlcm5hbChF
d2tfVGkKIAogRWluYV9Cb29sIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3Njcm9sbF9mdWxsX29m
ZnNldF9zZXQoRXZhc19PYmplY3QqIGV3a1RpbGUsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5
KQogewotICAgIERCRygibz0lcCwgeD0lZCwgeT0lZCIsIGV3a1RpbGUsIHgsIHkpOworICAgIERC
RygiZXdrVGlsZSVwLCB4PSVkLCB5PSVkIiwgZXdrVGlsZSwgeCwgeSk7CiAKICAgICBQUklWX0RB
VEFfR0VUX09SX1JFVFVSTihld2tUaWxlLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBpZiAoeCA9
PSBwcml2LT52aWV3Lm9mZnNldC5jdXIueCAmJiB5ID09IHByaXYtPnZpZXcub2Zmc2V0LmN1ci55
KQpAQCAtMTQ0OCwxNiArMTQ0OCwxNiBAQCBFaW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfc2Nyb2xsX2Z1bGxfb2Zmc2V0X3NldChFdmFzX09iamVjdCogZXdrVGlsZSwgRQogICAgIHJl
dHVybiBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc2Nyb2xsX2Z1bGxfb2Zmc2V0X3NldF9pbnRl
cm5hbChwcml2LCB4LCB5KTsKIH0KIAotRWluYV9Cb29sIGV3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3Njcm9sbF9mdWxsX29mZnNldF9hZGQoRXZhc19PYmplY3QqIGV3a1RpbGUsIEV2YXNfQ29vcmQg
ZHgsIEV2YXNfQ29vcmQgZHkpCitFaW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc2Ny
b2xsX2Z1bGxfb2Zmc2V0X2FkZChFdmFzX09iamVjdCogZXdrVGlsZSwgRXZhc19Db29yZCBkZWx0
YVgsIEV2YXNfQ29vcmQgZGVsdGFZKQogewotICAgIERCRygibz0lcCwgZHg9JWQsIGR5PSVkIiwg
ZXdrVGlsZSwgZHgsIGR5KTsKKyAgICBEQkcoImV3a1RpbGUlcCwgZGVsdGFYPSVkLCBkZWx0YVk9
JWQiLCBld2tUaWxlLCBkZWx0YVgsIGRlbHRhWSk7CiAKICAgICBQUklWX0RBVEFfR0VUX09SX1JF
VFVSTihld2tUaWxlLCBwcml2LCBFSU5BX0ZBTFNFKTsKLSAgICBpZiAoIWR4ICYmICFkeSkKKyAg
ICBpZiAoIWRlbHRhWCAmJiAhZGVsdGFZKQogICAgICAgICByZXR1cm4gRUlOQV9UUlVFOwogCiAg
ICAgcmV0dXJuIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zY3JvbGxfZnVsbF9vZmZzZXRfc2V0
X2ludGVybmFsCi0gICAgICAgICAgICAgICAocHJpdiwgcHJpdi0+dmlldy5vZmZzZXQuY3VyLngg
KyBkeCwgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkgKyBkeSk7CisgICAgICAgICAgICAgICAocHJp
diwgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggKyBkZWx0YVgsIHByaXYtPnZpZXcub2Zmc2V0LmN1
ci55ICsgZGVsdGFZKTsKIH0KIAogc3RhdGljIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfem9vbV9zZXRfaW50ZXJuYWwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJp
diwgZmxvYXQqIHpvb20sIEV2YXNfQ29vcmQgY3VycmVudFgsIEV2YXNfQ29vcmQgY3VycmVudFks
IEV2YXNfQ29vcmQqIG9mZnNldFgsIEV2YXNfQ29vcmQqIG9mZnNldFkpCkBAIC0xNDcyLDE5ICsx
NDcyLDE5IEBAIHN0YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3pvb21f
c2V0X2ludGVybmFsKEV3a19UaWxlZF9CYWNraW5nX1N0CiAgICAgfQogCiAgICAgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9mbHVzaChwcml2KTsKLSAgICBFdmFz
X0Nvb3JkIHR3LCB0aDsKKyAgICBFdmFzX0Nvb3JkIHRpbGVXaWR0aCwgdGlsZUhlaWdodDsKIAog
ICAgICp6b29tID0gUk9VTkRFRF9aT09NKHByaXYtPnZpZXcudGlsZS53aWR0aCwgKnpvb20pOwog
Ci0gICAgdHcgPSBwcml2LT52aWV3LnRpbGUud2lkdGg7Ci0gICAgdGggPSBwcml2LT52aWV3LnRp
bGUuaGVpZ2h0OworICAgIHRpbGVXaWR0aCA9IHByaXYtPnZpZXcudGlsZS53aWR0aDsKKyAgICB0
aWxlSGVpZ2h0ID0gcHJpdi0+dmlldy50aWxlLmhlaWdodDsKIAogICAgIGZsb2F0IHNjYWxlID0g
Knpvb20gLyBwcml2LT52aWV3LnRpbGUuem9vbTsKIAogICAgIHByaXYtPnZpZXcudGlsZS56b29t
ID0gKnpvb207CiAgICAgLy8gdG9kbzogY2hlY2sgY3VycmVudFggWzAsIHddLi4uCi0gICAgcHJp
di0+dmlldy5vZmZzZXQuem9vbV9jZW50ZXIueCA9IGN1cnJlbnRYOwotICAgIHByaXYtPnZpZXcu
b2Zmc2V0Lnpvb21fY2VudGVyLnkgPSBjdXJyZW50WTsKKyAgICBwcml2LT52aWV3Lm9mZnNldC56
b29tQ2VudGVyLnggPSBjdXJyZW50WDsKKyAgICBwcml2LT52aWV3Lm9mZnNldC56b29tQ2VudGVy
LnkgPSBjdXJyZW50WTsKIAogCiAgICAgaWYgKCFwcml2LT52aWV3LndpZHRoIHx8ICFwcml2LT52
aWV3LmhlaWdodCkgewpAQCAtMTQ5MiwzOCArMTQ5MiwzOCBAQCBzdGF0aWMgRWluYV9Cb29sIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV96b29tX3NldF9pbnRlcm5hbChFd2tfVGlsZWRfQmFja2lu
Z19TdAogICAgICAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgPSAwOwogICAgICAgICByZXR1
cm4gRUlOQV9UUlVFOwogICAgIH0KLSAgICBFaW5hX0lubGlzdCoqIGl0ciwgKippdHJfZW5kOwor
ICAgIEVpbmFfSW5saXN0KiogaXRlcmF0b3IsICoqaXRlcmF0b3JFbmQ7CiAgICAgRXdrX1RpbGVk
X0JhY2tpbmdfU3RvcmVfSXRlbSogaXQ7CiAKLSAgICBFdmFzX0Nvb3JkIG5ld194ID0gY3VycmVu
dFggKyAocHJpdi0+dmlldy5vZmZzZXQuY3VyLnggLSBjdXJyZW50WCkgKiBzY2FsZTsKLSAgICBF
dmFzX0Nvb3JkIG5ld195ID0gY3VycmVudFkgKyAocHJpdi0+dmlldy5vZmZzZXQuY3VyLnkgLSBj
dXJyZW50WSkgKiBzY2FsZTsKKyAgICBFdmFzX0Nvb3JkIG5ld1ggPSBjdXJyZW50WCArIChwcml2
LT52aWV3Lm9mZnNldC5jdXIueCAtIGN1cnJlbnRYKSAqIHNjYWxlOworICAgIEV2YXNfQ29vcmQg
bmV3WSA9IGN1cnJlbnRZICsgKHByaXYtPnZpZXcub2Zmc2V0LmN1ci55IC0gY3VycmVudFkpICog
c2NhbGU7CiAKLSAgICBFdmFzX0Nvb3JkIG1vZGVsX3cgPSBwcml2LT5tb2RlbC53aWR0aCAqIHNj
YWxlOwotICAgIEV2YXNfQ29vcmQgbW9kZWxfaCA9IHByaXYtPm1vZGVsLmhlaWdodCAqIHNjYWxl
OworICAgIEV2YXNfQ29vcmQgbW9kZWxXaWR0aCA9IHByaXYtPm1vZGVsLndpZHRoICogc2NhbGU7
CisgICAgRXZhc19Db29yZCBtb2RlbEhlaWdodCA9IHByaXYtPm1vZGVsLmhlaWdodCAqIHNjYWxl
OwogCi0gICAgaWYgKG1vZGVsX3cgPCBwcml2LT52aWV3LndpZHRoIHx8IG5ld194ID49IDApCi0g
ICAgICAgIG5ld194ID0gMDsKLSAgICBlbHNlIGlmICgtbmV3X3ggKyBwcml2LT52aWV3LndpZHRo
ID49IG1vZGVsX3cpCi0gICAgICAgIG5ld194ID0gLW1vZGVsX3cgKyBwcml2LT52aWV3LndpZHRo
OworICAgIGlmIChtb2RlbFdpZHRoIDwgcHJpdi0+dmlldy53aWR0aCB8fCBuZXdYID49IDApCisg
ICAgICAgIG5ld1ggPSAwOworICAgIGVsc2UgaWYgKC1uZXdYICsgcHJpdi0+dmlldy53aWR0aCA+
PSBtb2RlbFdpZHRoKQorICAgICAgICBuZXdYID0gLW1vZGVsV2lkdGggKyBwcml2LT52aWV3Lndp
ZHRoOwogCi0gICAgaWYgKG1vZGVsX2ggPCBwcml2LT52aWV3LmhlaWdodCB8fCBuZXdfeSA+PSAw
KQotICAgICAgICBuZXdfeSA9IDA7Ci0gICAgZWxzZSBpZiAoLW5ld195ICsgcHJpdi0+dmlldy5o
ZWlnaHQgPj0gbW9kZWxfaCkKLSAgICAgICAgbmV3X3kgPSAtbW9kZWxfaCArIHByaXYtPnZpZXcu
aGVpZ2h0OworICAgIGlmIChtb2RlbEhlaWdodCA8IHByaXYtPnZpZXcuaGVpZ2h0IHx8IG5ld1kg
Pj0gMCkKKyAgICAgICAgbmV3WSA9IDA7CisgICAgZWxzZSBpZiAoLW5ld1kgKyBwcml2LT52aWV3
LmhlaWdodCA+PSBtb2RlbEhlaWdodCkKKyAgICAgICAgbmV3WSA9IC1tb2RlbEhlaWdodCArIHBy
aXYtPnZpZXcuaGVpZ2h0OwogCi0gICAgRXZhc19Db29yZCBieCA9IG5ld194ICUgdHc7Ci0gICAg
RXZhc19Db29yZCBieSA9IG5ld195ICUgdGg7Ci0gICAgcHJpdi0+bW9kZWwuYmFzZS5jb2wgPSAt
bmV3X3ggLyB0dzsKLSAgICBwcml2LT5tb2RlbC5iYXNlLnJvdyA9IC1uZXdfeSAvIHRoOworICAg
IEV2YXNfQ29vcmQgYmFzZVggPSBuZXdYICUgdGlsZVdpZHRoOworICAgIEV2YXNfQ29vcmQgYmFz
ZVkgPSBuZXdZICUgdGlsZUhlaWdodDsKKyAgICBwcml2LT5tb2RlbC5iYXNlLmNvbHVtbiA9IC1u
ZXdYIC8gdGlsZVdpZHRoOworICAgIHByaXYtPm1vZGVsLmJhc2Uucm93ID0gLW5ld1kgLyB0aWxl
SGVpZ2h0OwogCiAgICAgcHJpdi0+Y2hhbmdlZC5zaXplID0gRUlOQV9UUlVFOwogICAgIHByaXYt
PmNoYW5nZWQubW9kZWwgPSBFSU5BX1RSVUU7CiAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X2NoYW5nZWQocHJpdik7CiAKLSAgICBwcml2LT52aWV3Lm9mZnNldC5jdXIueCA9IG5ld194Owot
ICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1ci55ID0gbmV3X3k7Ci0gICAgcHJpdi0+dmlldy5vZmZz
ZXQuYmFzZS54ID0gYng7Ci0gICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ID0gYnk7CisgICAg
cHJpdi0+dmlldy5vZmZzZXQuY3VyLnggPSBuZXdYOworICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1
ci55ID0gbmV3WTsKKyAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggPSBiYXNlWDsKKyAgICBw
cml2LT52aWV3Lm9mZnNldC5iYXNlLnkgPSBiYXNlWTsKIAogICAgIHByaXYtPnZpZXcub2Zmc2V0
Lm9sZC54ID0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLng7CiAgICAgcHJpdi0+dmlldy5vZmZzZXQu
b2xkLnkgPSBwcml2LT52aWV3Lm9mZnNldC5jdXIueTsKQEAgLTE1MzEsMjggKzE1MzEsMjggQEAg
c3RhdGljIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfem9vbV9zZXRfaW50ZXJu
YWwoRXdrX1RpbGVkX0JhY2tpbmdfU3QKICAgICAqb2Zmc2V0WSA9IHByaXYtPnZpZXcub2Zmc2V0
LmN1ci55OwogCiAgICAgZXZhc19vYmplY3RfbW92ZSgKLSAgICAgICAgcHJpdi0+Y29udGVudHNf
Y2xpcHBlciwKLSAgICAgICAgbmV3X3ggKyBwcml2LT52aWV3LngsCi0gICAgICAgIG5ld195ICsg
cHJpdi0+dmlldy55KTsKKyAgICAgICAgcHJpdi0+Y29udGVudHNDbGlwcGVyLAorICAgICAgICBu
ZXdYICsgcHJpdi0+dmlldy54LAorICAgICAgICBuZXdZICsgcHJpdi0+dmlldy55KTsKIAogICAg
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9maWxsX3JlbmRlcmVycyhwcml2KTsKIAotICAgIEV2
YXNfQ29vcmQgb3kgPSBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgKyBwcml2LT52aWV3Lnk7Ci0g
ICAgRXZhc19Db29yZCBiYXNlX294ID0gcHJpdi0+dmlldy54ICsgcHJpdi0+dmlldy5vZmZzZXQu
YmFzZS54OworICAgIEV2YXNfQ29vcmQgdGlsZVBvc2l0aW9uWSA9IHByaXYtPnZpZXcub2Zmc2V0
LmJhc2UueSArIHByaXYtPnZpZXcueTsKKyAgICBFdmFzX0Nvb3JkIGJhc2VUaWxlUG9zaXRpb25Y
ID0gcHJpdi0+dmlldy54ICsgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54OwogCi0gICAgaXRyID0g
cHJpdi0+dmlldy5pdGVtczsKLSAgICBpdHJfZW5kID0gaXRyICsgcHJpdi0+dmlldy5yb3dzOwor
ICAgIGl0ZXJhdG9yID0gcHJpdi0+dmlldy5pdGVtczsKKyAgICBpdGVyYXRvckVuZCA9IGl0ZXJh
dG9yICsgcHJpdi0+dmlldy5yb3dzOwogCi0gICAgZm9yICg7IGl0ciA8IGl0cl9lbmQ7IGl0cisr
KSB7Ci0gICAgICAgIEV2YXNfQ29vcmQgb3ggPSBiYXNlX294OwotICAgICAgICBFaW5hX0lubGlz
dCogbHN0ID0gKml0cjsKKyAgICBmb3IgKDsgaXRlcmF0b3IgPCBpdGVyYXRvckVuZDsgaXRlcmF0
b3IrKykgeworICAgICAgICBFdmFzX0Nvb3JkIHRpbGVQb3NpdGlvblggPSBiYXNlVGlsZVBvc2l0
aW9uWDsKKyAgICAgICAgRWluYV9Jbmxpc3QqIGxzdCA9ICppdGVyYXRvcjsKIAogICAgICAgICBF
SU5BX0lOTElTVF9GT1JFQUNIKGxzdCwgaXQpIHsKLSAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9pdGVtX21vdmUoaXQsIG94LCBveSk7Ci0gICAgICAgICAgICBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfaXRlbV9yZXNpemUoaXQsIHR3LCB0aCk7Ci0gICAgICAgICAgICBveCAr
PSB0dzsKKyAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX21vdmUoaXQs
IHRpbGVQb3NpdGlvblgsIHRpbGVQb3NpdGlvblkpOworICAgICAgICAgICAgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX2l0ZW1fcmVzaXplKGl0LCB0aWxlV2lkdGgsIHRpbGVIZWlnaHQpOworICAg
ICAgICAgICAgdGlsZVBvc2l0aW9uWCArPSB0aWxlV2lkdGg7CiAgICAgICAgIH0KLSAgICAgICAg
b3kgKz0gdGg7CisgICAgICAgIHRpbGVQb3NpdGlvblkgKz0gdGlsZUhlaWdodDsKICAgICB9CiAK
ICAgICByZXR1cm4gRUlOQV9UUlVFOwpAQCAtMTU2MCw3ICsxNTYwLDcgQEAgc3RhdGljIEVpbmFf
Qm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfem9vbV9zZXRfaW50ZXJuYWwoRXdrX1RpbGVk
X0JhY2tpbmdfU3QKIAogRWluYV9Cb29sIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3pvb21fc2V0
KEV2YXNfT2JqZWN0KiBld2tUaWxlLCBmbG9hdCogem9vbSwgRXZhc19Db29yZCBjdXJyZW50WCwg
RXZhc19Db29yZCBjdXJyZW50WSwgRXZhc19Db29yZCogb2Zmc2V0WCwgRXZhc19Db29yZCogb2Zm
c2V0WSkKIHsKLSAgICBEQkcoIm89JXAsIHpvb209JWYiLCBld2tUaWxlLCAqem9vbSk7CisgICAg
REJHKCJld2tUaWxlJXAsIHpvb209JWYiLCBld2tUaWxlLCAqem9vbSk7CiAKICAgICBQUklWX0RB
VEFfR0VUX09SX1JFVFVSTihld2tUaWxlLCBwcml2LCBFSU5BX0ZBTFNFKTsKIApAQCAtMTU2OSw3
MyArMTU2OSw3MyBAQCBFaW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfem9vbV9zZXQo
RXZhc19PYmplY3QqIGV3a1RpbGUsIGZsb2F0KiB6b29tLCBFdgogCiBFaW5hX0Jvb2wgZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfem9vbV93ZWFrX3NldChFdmFzX09iamVjdCogZXdrVGlsZSwgZmxv
YXQgem9vbSwgRXZhc19Db29yZCBjdXJyZW50WCwgRXZhc19Db29yZCBjdXJyZW50WSkKIHsKLSAg
ICBEQkcoIm89JXAsIHpvb209JWYiLCBld2tUaWxlLCB6b29tKTsKKyAgICBEQkcoImV3a1RpbGUl
cCwgem9vbT0lZiIsIGV3a1RpbGUsIHpvb20pOwogICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJO
KGV3a1RpbGUsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIGlmICghcHJpdi0+dmlldy53aWR0aCB8
fCAhcHJpdi0+dmlldy5oZWlnaHQpCiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwotICAgIEVp
bmFfSW5saXN0KiogaXRyLCAqKiBpdHJfZW5kOwotICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3Jl
X0l0ZW0qIGl0OwotICAgIEV2YXNfQ29vcmQgdHcsIHRoOwotICAgIEVpbmFfQm9vbCByZWNhbGMg
PSBFSU5BX0ZBTFNFOworICAgIEVpbmFfSW5saXN0KiogaXRlcmF0b3IsICoqIGl0ZXJhdG9yRW5k
OworICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0qIGl0ZW07CisgICAgRXZhc19Db29y
ZCB0aWxlV2lkdGgsIHRpbGVIZWlnaHQ7CisgICAgRWluYV9Cb29sIHJlQ2FsY3VsYXRlID0gRUlO
QV9GQUxTRTsKIAogICAgIGZsb2F0IHNjYWxlID0gem9vbSAvIHByaXYtPnZpZXcudGlsZS56b29t
OwogCi0gICAgdHcgPSBUSUxFX1NJWkVfQVRfWk9PTShwcml2LT52aWV3LnRpbGUud2lkdGgsIHNj
YWxlKTsKLSAgICBzY2FsZSA9IFRJTEVfWk9PTV9BVF9TSVpFKHR3LCBwcml2LT52aWV3LnRpbGUu
d2lkdGgpOwotICAgIHRoID0gVElMRV9TSVpFX0FUX1pPT00ocHJpdi0+dmlldy50aWxlLmhlaWdo
dCwgc2NhbGUpOworICAgIHRpbGVXaWR0aCA9IFRJTEVfU0laRV9BVF9aT09NKHByaXYtPnZpZXcu
dGlsZS53aWR0aCwgc2NhbGUpOworICAgIHNjYWxlID0gVElMRV9aT09NX0FUX1NJWkUodGlsZVdp
ZHRoLCBwcml2LT52aWV3LnRpbGUud2lkdGgpOworICAgIHRpbGVIZWlnaHQgPSBUSUxFX1NJWkVf
QVRfWk9PTShwcml2LT52aWV3LnRpbGUuaGVpZ2h0LCBzY2FsZSk7CiAgICAgem9vbSA9IHNjYWxl
ICogcHJpdi0+dmlldy50aWxlLnpvb207CiAKLSAgICBFdmFzX0Nvb3JkIG1vZGVsX3cgPSBwcml2
LT5tb2RlbC53aWR0aCAqIHNjYWxlOwotICAgIEV2YXNfQ29vcmQgbW9kZWxfaCA9IHByaXYtPm1v
ZGVsLmhlaWdodCAqIHNjYWxlOworICAgIEV2YXNfQ29vcmQgbW9kZWxXaWR0aCA9IHByaXYtPm1v
ZGVsLndpZHRoICogc2NhbGU7CisgICAgRXZhc19Db29yZCBtb2RlbEhlaWdodCA9IHByaXYtPm1v
ZGVsLmhlaWdodCAqIHNjYWxlOwogCi0gICAgZXZhc19vYmplY3RfcmVzaXplKHByaXYtPmNvbnRl
bnRzX2NsaXBwZXIsIG1vZGVsX3csIG1vZGVsX2gpOworICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShw
cml2LT5jb250ZW50c0NsaXBwZXIsIG1vZGVsV2lkdGgsIG1vZGVsSGVpZ2h0KTsKIAotICAgIGlu
dCB2cm93cyA9IHN0YXRpY19jYXN0PGludD4oY2VpbChzdGF0aWNfY2FzdDxmbG9hdD4ocHJpdi0+
dmlldy5oZWlnaHQgLyB0aCkpICsgMSk7Ci0gICAgaW50IHZjb2xzID0gc3RhdGljX2Nhc3Q8aW50
PihjZWlsKHN0YXRpY19jYXN0PGZsb2F0Pihwcml2LT52aWV3LndpZHRoIC8gdHcpKSArIDEpOwot
ICAgIEV2YXNfQ29vcmQgbmV3X3ggPSBjdXJyZW50WCArIChwcml2LT52aWV3Lm9mZnNldC5jdXIu
eCAtIGN1cnJlbnRYKSAqIHNjYWxlOwotICAgIEV2YXNfQ29vcmQgbmV3X3kgPSBjdXJyZW50WSAr
IChwcml2LT52aWV3Lm9mZnNldC5jdXIueSAtIGN1cnJlbnRZKSAqIHNjYWxlOwotICAgIEV2YXNf
Q29vcmQgYnggPSBuZXdfeCAlIHR3OwotICAgIEV2YXNfQ29vcmQgYnkgPSBuZXdfeSAlIHRoOwot
ICAgIHVuc2lnbmVkIGxvbmcgYmFzZV9yb3cgPSAtbmV3X3kgLyB0aDsKLSAgICB1bnNpZ25lZCBs
b25nIGJhc2VfY29sID0gLW5ld194IC8gdHc7CisgICAgaW50IHZyb3dzID0gc3RhdGljX2Nhc3Q8
aW50PihjZWlsKHN0YXRpY19jYXN0PGZsb2F0Pihwcml2LT52aWV3LmhlaWdodCAvIHRpbGVIZWln
aHQpKSArIDEpOworICAgIGludCB2Y29scyA9IHN0YXRpY19jYXN0PGludD4oY2VpbChzdGF0aWNf
Y2FzdDxmbG9hdD4ocHJpdi0+dmlldy53aWR0aCAvIHRpbGVXaWR0aCkpICsgMSk7CisgICAgRXZh
c19Db29yZCBuZXdYID0gY3VycmVudFggKyAocHJpdi0+dmlldy5vZmZzZXQuY3VyLnggLSBjdXJy
ZW50WCkgKiBzY2FsZTsKKyAgICBFdmFzX0Nvb3JkIG5ld1kgPSBjdXJyZW50WSArIChwcml2LT52
aWV3Lm9mZnNldC5jdXIueSAtIGN1cnJlbnRZKSAqIHNjYWxlOworICAgIEV2YXNfQ29vcmQgYmFz
ZVggPSBuZXdYICUgdGlsZVdpZHRoOworICAgIEV2YXNfQ29vcmQgYmFzZVkgPSBuZXdZICUgdGls
ZUhlaWdodDsKKyAgICB1bnNpZ25lZCBsb25nIGJhc2VSb3cgPSAtbmV3WSAvIHRpbGVIZWlnaHQ7
CisgICAgdW5zaWduZWQgbG9uZyBiYXNlQ29sdW1uID0gLW5ld1ggLyB0aWxlV2lkdGg7CiAKLSAg
ICBpZiAoYmFzZV9yb3cgIT0gcHJpdi0+bW9kZWwuYmFzZS5yb3cgfHwgYmFzZV9jb2wgIT0gcHJp
di0+bW9kZWwuYmFzZS5jb2wpIHsKLSAgICAgICAgcHJpdi0+bW9kZWwuYmFzZS5yb3cgPSBiYXNl
X3JvdzsKLSAgICAgICAgcHJpdi0+bW9kZWwuYmFzZS5jb2wgPSBiYXNlX2NvbDsKLSAgICAgICAg
cmVjYWxjID0gRUlOQV9UUlVFOworICAgIGlmIChiYXNlUm93ICE9IHByaXYtPm1vZGVsLmJhc2Uu
cm93IHx8IGJhc2VDb2x1bW4gIT0gcHJpdi0+bW9kZWwuYmFzZS5jb2x1bW4pIHsKKyAgICAgICAg
cHJpdi0+bW9kZWwuYmFzZS5yb3cgPSBiYXNlUm93OworICAgICAgICBwcml2LT5tb2RlbC5iYXNl
LmNvbHVtbiA9IGJhc2VDb2x1bW47CisgICAgICAgIHJlQ2FsY3VsYXRlID0gRUlOQV9UUlVFOwog
ICAgIH0KIAogICAgIGlmICh2cm93cyA+IHByaXYtPnZpZXcucm93cyB8fCB2Y29scyA+IHByaXYt
PnZpZXcuY29scykKLSAgICAgICAgcmVjYWxjID0gRUlOQV9UUlVFOworICAgICAgICByZUNhbGN1
bGF0ZSA9IEVJTkFfVFJVRTsKIAotICAgIGlmIChyZWNhbGMpIHsKKyAgICBpZiAocmVDYWxjdWxh
dGUpIHsKICAgICAgICAgRXZhc19Db29yZCB3aWR0aCwgaGVpZ2h0OwogICAgICAgICBldmFzX29i
amVjdF9nZW9tZXRyeV9nZXQoZXdrVGlsZSwgMCwgMCwgJndpZHRoLCAmaGVpZ2h0KTsKLSAgICAg
ICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3JlY2FsY19yZW5kZXJlcnMocHJpdiwgd2lkdGgs
IGhlaWdodCwgdHcsIHRoKTsKKyAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3JlY2Fs
Y19yZW5kZXJlcnMocHJpdiwgd2lkdGgsIGhlaWdodCwgdGlsZVdpZHRoLCB0aWxlSGVpZ2h0KTsK
ICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2ZpbGxfcmVuZGVyZXJzKHByaXYpOwog
ICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRlc19wcm9jZXNzKHByaXYpOwog
ICAgIH0KIAotICAgIEV2YXNfQ29vcmQgYmFzZV9veCA9IGJ4ICsgcHJpdi0+dmlldy54OwotICAg
IEV2YXNfQ29vcmQgb3kgPSBieSArIHByaXYtPnZpZXcueTsKKyAgICBFdmFzX0Nvb3JkIGJhc2VU
aWxlUG9zaXRpb25YID0gYmFzZVggKyBwcml2LT52aWV3Lng7CisgICAgRXZhc19Db29yZCB0aWxl
UG9zaXRpb25ZID0gYmFzZVkgKyBwcml2LT52aWV3Lnk7CiAKLSAgICBldmFzX29iamVjdF9tb3Zl
KHByaXYtPmNvbnRlbnRzX2NsaXBwZXIsCi0gICAgICAgICAgICAgICAgICAgICBuZXdfeCArIHBy
aXYtPnZpZXcueCwKLSAgICAgICAgICAgICAgICAgICAgIG5ld195ICsgcHJpdi0+dmlldy55KTsK
KyAgICBldmFzX29iamVjdF9tb3ZlKHByaXYtPmNvbnRlbnRzQ2xpcHBlciwKKyAgICAgICAgICAg
ICAgICAgICAgIG5ld1ggKyBwcml2LT52aWV3LngsCisgICAgICAgICAgICAgICAgICAgICBuZXdZ
ICsgcHJpdi0+dmlldy55KTsKIAotICAgIGl0ciA9IHByaXYtPnZpZXcuaXRlbXM7Ci0gICAgaXRy
X2VuZCA9IGl0ciArIHByaXYtPnZpZXcucm93czsKKyAgICBpdGVyYXRvciA9IHByaXYtPnZpZXcu
aXRlbXM7CisgICAgaXRlcmF0b3JFbmQgPSBpdGVyYXRvciArIHByaXYtPnZpZXcucm93czsKIAot
ICAgIGZvciAoOyBpdHIgPCBpdHJfZW5kOyBpdHIrKykgewotICAgICAgICBFdmFzX0Nvb3JkIG94
ID0gYmFzZV9veDsKLSAgICAgICAgRWluYV9Jbmxpc3QqIGxzdCA9ICppdHI7CisgICAgZm9yICg7
IGl0ZXJhdG9yIDwgaXRlcmF0b3JFbmQ7IGl0ZXJhdG9yKyspIHsKKyAgICAgICAgRXZhc19Db29y
ZCB0aWxlUG9zaXRpb25YID0gYmFzZVRpbGVQb3NpdGlvblg7CisgICAgICAgIEVpbmFfSW5saXN0
KiBsaXN0ID0gKml0ZXJhdG9yOwogCi0gICAgICAgIEVJTkFfSU5MSVNUX0ZPUkVBQ0gobHN0LCBp
dCkgewotICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fbW92ZShpdCwg
b3gsIG95KTsKLSAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Jlc2l6
ZShpdCwgdHcsIHRoKTsKLSAgICAgICAgICAgIG94ICs9IHR3OworICAgICAgICBFSU5BX0lOTElT
VF9GT1JFQUNIKGxpc3QsIGl0ZW0pIHsKKyAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9pdGVtX21vdmUoaXRlbSwgdGlsZVBvc2l0aW9uWCwgdGlsZVBvc2l0aW9uWSk7CisgICAg
ICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9yZXNpemUoaXRlbSwgdGlsZVdp
ZHRoLCB0aWxlSGVpZ2h0KTsKKyAgICAgICAgICAgIHRpbGVQb3NpdGlvblggKz0gdGlsZVdpZHRo
OwogICAgICAgICB9Ci0gICAgICAgIG95ICs9IHRoOworICAgICAgICB0aWxlUG9zaXRpb25ZICs9
IHRpbGVIZWlnaHQ7CiAgICAgfQogCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKQEAgLTE2NDQsODEg
KzE2NDQsODEgQEAgRWluYV9Cb29sIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3pvb21fd2Vha19z
ZXQoRXZhc19PYmplY3QqIGV3a1RpbGUsIGZsb2F0IHpvb20KIHZvaWQgZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfZml4X29mZnNldHMoRXZhc19PYmplY3QqIGV3a1RpbGUsIEV2YXNfQ29vcmQgd2lk
dGgsIEV2YXNfQ29vcmQgaGVpZ2h0KQogewogICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKGV3
a1RpbGUsIHByaXYpOwotICAgIEVpbmFfSW5saXN0KiogaXRyLCAqKml0cl9lbmQ7Ci0gICAgRXdr
X1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSogaXQ7Ci0gICAgRXZhc19Db29yZCBuZXdfeCA9IHBy
aXYtPnZpZXcub2Zmc2V0LmN1ci54OwotICAgIEV2YXNfQ29vcmQgbmV3X3kgPSBwcml2LT52aWV3
Lm9mZnNldC5jdXIueTsKLSAgICBFdmFzX0Nvb3JkIGJ4ID0gcHJpdi0+dmlldy5vZmZzZXQuYmFz
ZS54OwotICAgIEV2YXNfQ29vcmQgYnkgPSBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnk7Ci0gICAg
RXZhc19Db29yZCB0dyA9IHByaXYtPnZpZXcudGlsZS53aWR0aDsKLSAgICBFdmFzX0Nvb3JkIHRo
ID0gcHJpdi0+dmlldy50aWxlLmhlaWdodDsKLQotICAgIGlmICgtbmV3X3ggPiB3aWR0aCkgewot
ICAgICAgICBuZXdfeCA9IC13aWR0aDsKLSAgICAgICAgYnggPSBuZXdfeCAlIHR3OwotICAgICAg
ICBwcml2LT5tb2RlbC5iYXNlLmNvbCA9IC1uZXdfeCAvIHR3OworICAgIEVpbmFfSW5saXN0Kiog
aXRlcmF0b3IsICoqaXRlcmF0b3JFbmQ7CisgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRl
bSogaXRlbTsKKyAgICBFdmFzX0Nvb3JkIG5ld1ggPSBwcml2LT52aWV3Lm9mZnNldC5jdXIueDsK
KyAgICBFdmFzX0Nvb3JkIG5ld1kgPSBwcml2LT52aWV3Lm9mZnNldC5jdXIueTsKKyAgICBFdmFz
X0Nvb3JkIGJhc2VYID0gcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54OworICAgIEV2YXNfQ29vcmQg
YmFzZVkgPSBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnk7CisgICAgRXZhc19Db29yZCB0aWxlV2lk
dGggPSBwcml2LT52aWV3LnRpbGUud2lkdGg7CisgICAgRXZhc19Db29yZCB0aWxlSGVpZ2h0ID0g
cHJpdi0+dmlldy50aWxlLmhlaWdodDsKKworICAgIGlmICgtbmV3WCA+IHdpZHRoKSB7CisgICAg
ICAgIG5ld1ggPSAtd2lkdGg7CisgICAgICAgIGJhc2VYID0gbmV3WCAlIHRpbGVXaWR0aDsKKyAg
ICAgICAgcHJpdi0+bW9kZWwuYmFzZS5jb2x1bW4gPSAtbmV3WCAvIHRpbGVXaWR0aDsKICAgICB9
CiAKLSAgICBpZiAoLW5ld195ID4gaGVpZ2h0KSB7Ci0gICAgICAgIG5ld195ID0gLWhlaWdodDsK
LSAgICAgICAgYnkgPSBuZXdfeSAlIHRoOwotICAgICAgICBwcml2LT5tb2RlbC5iYXNlLnJvdyA9
IC1uZXdfeSAvIHRoOworICAgIGlmICgtbmV3WSA+IGhlaWdodCkgeworICAgICAgICBuZXdZID0g
LWhlaWdodDsKKyAgICAgICAgYmFzZVkgPSBuZXdZICUgdGlsZUhlaWdodDsKKyAgICAgICAgcHJp
di0+bW9kZWwuYmFzZS5yb3cgPSAtbmV3WSAvIHRpbGVIZWlnaHQ7CiAgICAgfQogCi0gICAgaWYg
KGJ4ID49IDAgfHwgYnggPD0gLTIgKiBwcml2LT52aWV3LnRpbGUud2lkdGgpIHsKLSAgICAgICAg
YnggPSBuZXdfeCAlIHR3OwotICAgICAgICBwcml2LT5tb2RlbC5iYXNlLmNvbCA9IC1uZXdfeCAv
IHR3OworICAgIGlmIChiYXNlWCA+PSAwIHx8IGJhc2VYIDw9IC0yICogcHJpdi0+dmlldy50aWxl
LndpZHRoKSB7CisgICAgICAgIGJhc2VYID0gbmV3WCAlIHRpbGVXaWR0aDsKKyAgICAgICAgcHJp
di0+bW9kZWwuYmFzZS5jb2x1bW4gPSAtbmV3WCAvIHRpbGVXaWR0aDsKICAgICB9CiAKLSAgICBp
ZiAoYnkgPj0gMCB8fCBieSA8PSAtMiAqIHByaXYtPnZpZXcudGlsZS5oZWlnaHQpIHsKLSAgICAg
ICAgYnkgPSBuZXdfeSAlIHRoOwotICAgICAgICBwcml2LT5tb2RlbC5iYXNlLnJvdyA9IC1uZXdf
eSAvIHRoOworICAgIGlmIChiYXNlWSA+PSAwIHx8IGJhc2VZIDw9IC0yICogcHJpdi0+dmlldy50
aWxlLmhlaWdodCkgeworICAgICAgICBiYXNlWSA9IG5ld1kgJSB0aWxlSGVpZ2h0OworICAgICAg
ICBwcml2LT5tb2RlbC5iYXNlLnJvdyA9IC1uZXdZIC8gdGlsZUhlaWdodDsKICAgICB9CiAKLSAg
ICBwcml2LT52aWV3Lm9mZnNldC5jdXIueCA9IG5ld194OwotICAgIHByaXYtPnZpZXcub2Zmc2V0
LmN1ci55ID0gbmV3X3k7Ci0gICAgcHJpdi0+dmlldy5vZmZzZXQub2xkLnggPSBuZXdfeDsKLSAg
ICBwcml2LT52aWV3Lm9mZnNldC5vbGQueSA9IG5ld195OwotICAgIHByaXYtPnZpZXcub2Zmc2V0
LmJhc2UueCA9IGJ4OwotICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSA9IGJ5OwotICAgIGV2
YXNfb2JqZWN0X21vdmUocHJpdi0+Y29udGVudHNfY2xpcHBlciwKLSAgICAgICAgICAgICAgICAg
ICAgIG5ld194ICsgcHJpdi0+dmlldy54LAotICAgICAgICAgICAgICAgICAgICAgbmV3X3kgKyBw
cml2LT52aWV3LnkpOwotCi0gICAgRXZhc19Db29yZCBveSA9IHByaXYtPnZpZXcub2Zmc2V0LmJh
c2UueSArIHByaXYtPnZpZXcueTsKLSAgICBFdmFzX0Nvb3JkIGJhc2Vfb3ggPSBwcml2LT52aWV3
LnggKyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLng7Ci0KLSAgICBpdHIgPSBwcml2LT52aWV3Lml0
ZW1zOwotICAgIGl0cl9lbmQgPSBpdHIgKyBwcml2LT52aWV3LnJvd3M7Ci0KLSAgICBmb3IgKDsg
aXRyIDwgaXRyX2VuZDsgaXRyKyspIHsKLSAgICAgICAgRXZhc19Db29yZCBveCA9IGJhc2Vfb3g7
Ci0gICAgICAgIEVpbmFfSW5saXN0KiBsc3QgPSAqaXRyOwotCi0gICAgICAgIEVJTkFfSU5MSVNU
X0ZPUkVBQ0gobHN0LCBpdCkgewotICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X2l0ZW1fbW92ZShpdCwgb3gsIG95KTsKLSAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9pdGVtX3Jlc2l6ZShpdCwgdHcsIHRoKTsKLSAgICAgICAgICAgIG94ICs9IHR3OworICAg
IHByaXYtPnZpZXcub2Zmc2V0LmN1ci54ID0gbmV3WDsKKyAgICBwcml2LT52aWV3Lm9mZnNldC5j
dXIueSA9IG5ld1k7CisgICAgcHJpdi0+dmlldy5vZmZzZXQub2xkLnggPSBuZXdYOworICAgIHBy
aXYtPnZpZXcub2Zmc2V0Lm9sZC55ID0gbmV3WTsKKyAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNl
LnggPSBiYXNlWDsKKyAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgPSBiYXNlWTsKKyAgICBl
dmFzX29iamVjdF9tb3ZlKHByaXYtPmNvbnRlbnRzQ2xpcHBlciwKKyAgICAgICAgICAgICAgICAg
ICAgIG5ld1ggKyBwcml2LT52aWV3LngsCisgICAgICAgICAgICAgICAgICAgICBuZXdZICsgcHJp
di0+dmlldy55KTsKKworICAgIEV2YXNfQ29vcmQgdGlsZVBvc2l0aW9uWSA9IHByaXYtPnZpZXcu
b2Zmc2V0LmJhc2UueSArIHByaXYtPnZpZXcueTsKKyAgICBFdmFzX0Nvb3JkIGJhc2VUaWxlUG9z
aXRpb25YID0gcHJpdi0+dmlldy54ICsgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54OworCisgICAg
aXRlcmF0b3IgPSBwcml2LT52aWV3Lml0ZW1zOworICAgIGl0ZXJhdG9yRW5kID0gaXRlcmF0b3Ig
KyBwcml2LT52aWV3LnJvd3M7CisKKyAgICBmb3IgKDsgaXRlcmF0b3IgPCBpdGVyYXRvckVuZDsg
aXRlcmF0b3IrKykgeworICAgICAgICBFdmFzX0Nvb3JkIHRpbGVQb3NpdGlvblggPSBiYXNlVGls
ZVBvc2l0aW9uWDsKKyAgICAgICAgRWluYV9Jbmxpc3QqIGxzdCA9ICppdGVyYXRvcjsKKworICAg
ICAgICBFSU5BX0lOTElTVF9GT1JFQUNIKGxzdCwgaXRlbSkgeworICAgICAgICAgICAgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fbW92ZShpdGVtLCB0aWxlUG9zaXRpb25YLCB0aWxlUG9z
aXRpb25ZKTsKKyAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Jlc2l6
ZShpdGVtLCB0aWxlV2lkdGgsIHRpbGVIZWlnaHQpOworICAgICAgICAgICAgdGlsZVBvc2l0aW9u
WCArPSB0aWxlV2lkdGg7CiAgICAgICAgIH0KLSAgICAgICAgb3kgKz0gdGg7CisgICAgICAgIHRp
bGVQb3NpdGlvblkgKz0gdGlsZUhlaWdodDsKICAgICB9CiB9CiAKIHZvaWQgZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfem9vbV93ZWFrX3Ntb290aF9zY2FsZV9zZXQoRXZhc19PYmplY3QqIGV3a1Rp
bGUsIEVpbmFfQm9vbCBzbW9vdGhTY2FsZSkKIHsKICAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVS
Tihld2tUaWxlLCBwcml2KTsKLSAgICBFaW5hX0lubGlzdCoqIGl0ciwgKippdHJfZW5kOworICAg
IEVpbmFfSW5saXN0KiogaXRlcmF0b3IsICoqaXRlcmF0b3JFbmQ7CiAKLSAgICBpdHIgPSBwcml2
LT52aWV3Lml0ZW1zOwotICAgIGl0cl9lbmQgPSBpdHIgKyBwcml2LT52aWV3LnJvd3M7Ci0gICAg
cHJpdi0+dmlldy50aWxlLnpvb21fd2Vha19zbW9vdGhfc2NhbGUgPSBzbW9vdGhTY2FsZTsKKyAg
ICBpdGVyYXRvciA9IHByaXYtPnZpZXcuaXRlbXM7CisgICAgaXRlcmF0b3JFbmQgPSBpdGVyYXRv
ciArIHByaXYtPnZpZXcucm93czsKKyAgICBwcml2LT52aWV3LnRpbGUuem9vbVdlYWtTbW9vdGhT
Y2FsZSA9IHNtb290aFNjYWxlOwogCi0gICAgZm9yICg7IGl0cjwgaXRyX2VuZDsgaXRyKyspIHsK
LSAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSogaXQ7Ci0gICAgICAgIEVJTkFf
SU5MSVNUX0ZPUkVBQ0goKml0ciwgaXQpCi0gICAgICAgICAgICBpZiAoaXQtPnRpbGUpCisgICAg
Zm9yICg7IGl0ZXJhdG9yPCBpdGVyYXRvckVuZDsgaXRlcmF0b3IrKykgeworICAgICAgICBFd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKiBpdGVtOworICAgICAgICBFSU5BX0lOTElTVF9GT1JF
QUNIKCppdGVyYXRvciwgaXRlbSkKKyAgICAgICAgICAgIGlmIChpdGVtLT50aWxlKQogICAgICAg
ICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Ntb290aF9zY2FsZV9zZXQK
LSAgICAgICAgICAgICAgICAgICAgKGl0LCBzbW9vdGhTY2FsZSk7CisgICAgICAgICAgICAgICAg
ICAgIChpdGVtLCBzbW9vdGhTY2FsZSk7CiAgICAgfQogfQogCkBAIC0xNzM2LDE1ICsxNzM2LDE1
IEBAIEVpbmFfQm9vbCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV91cGRhdGUoRXZhc19PYmplY3Qq
IGV3a1RpbGUsIGNvbnN0IEVpbmFfUmVjdGFuCiB2b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3VwZGF0ZXNfcHJvY2Vzc19wcmVfc2V0KEV2YXNfT2JqZWN0KiBld2tUaWxlLCB2b2lkKiAoKmNh
bGxiYWNrKSh2b2lkKiBkYXRhLCBFdmFzX09iamVjdCAqZXdrVGlsZSksIGNvbnN0IHZvaWQqIGRh
dGEpCiB7CiAgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4oZXdrVGlsZSwgcHJpdik7Ci0gICAg
cHJpdi0+cHJvY2Vzcy5wcmVfY2IgPSBjYWxsYmFjazsKLSAgICBwcml2LT5wcm9jZXNzLnByZV9k
YXRhID0gKHZvaWQqKWRhdGE7CisgICAgcHJpdi0+cHJvY2Vzcy5wcmVDYWxsYmFjayA9IGNhbGxi
YWNrOworICAgIHByaXYtPnByb2Nlc3MucHJlRGF0YSA9ICh2b2lkKilkYXRhOwogfQogCi12b2lk
IGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3VwZGF0ZXNfcHJvY2Vzc19wb3N0X3NldChFdmFzX09i
amVjdCogZXdrVGlsZSwgdm9pZCogKCpjYWxsYmFjaykodm9pZCogZGF0YSwgdm9pZCogcHJlX2Rh
dGEsIEV2YXNfT2JqZWN0ICpld2tUaWxlKSwgY29uc3Qgdm9pZCogZGF0YSkKK3ZvaWQgZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRlc19wcm9jZXNzX3Bvc3Rfc2V0KEV2YXNfT2JqZWN0KiBl
d2tUaWxlLCB2b2lkKiAoKmNhbGxiYWNrKSh2b2lkKiBkYXRhLCB2b2lkKiBwcmVEYXRhLCBFdmFz
X09iamVjdCAqZXdrVGlsZSksIGNvbnN0IHZvaWQqIGRhdGEpCiB7CiAgICAgUFJJVl9EQVRBX0dF
VF9PUl9SRVRVUk4oZXdrVGlsZSwgcHJpdik7Ci0gICAgcHJpdi0+cHJvY2Vzcy5wb3N0X2NiID0g
Y2FsbGJhY2s7Ci0gICAgcHJpdi0+cHJvY2Vzcy5wb3N0X2RhdGEgPSAodm9pZCopZGF0YTsKKyAg
ICBwcml2LT5wcm9jZXNzLnBvc3RDYWxsYmFjayA9IGNhbGxiYWNrOworICAgIHByaXYtPnByb2Nl
c3MucG9zdERhdGEgPSAodm9pZCopZGF0YTsKIH0KIAogdm9pZCBld2tfdGlsZWRfYmFja2luZ19z
dG9yZV91cGRhdGVzX3Byb2Nlc3MoRXZhc19PYmplY3QqIGV3a1RpbGUpCkBAIC0xNzg2LDcgKzE3
ODYsNyBAQCB2b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX2Rpc2FibGVkX3VwZGF0ZV9zZXQo
RXZhc19PYmplY3QqIGV3a1RpbGUsIEVpbmFfQm9vbAogdm9pZCBld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9mbHVzaChFdmFzX09iamVjdCogZXdrVGlsZSkKIHsKICAgICBQUklWX0RBVEFfR0VUX09S
X1JFVFVSTihld2tUaWxlLCBwcml2KTsKLSAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHR1YyA9
IDA7CisgICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0aWxlVW51c2VkQ2FjaGUgPSAwOwogCiAg
ICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggPSAwOwogICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1
ci55ID0gMDsKQEAgLTE3OTQsMTEgKzE3OTQsMTEgQEAgdm9pZCBld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9mbHVzaChFdmFzX09iamVjdCogZXdrVGlsZSkKICAgICBwcml2LT52aWV3Lm9mZnNldC5v
bGQueSA9IDA7CiAgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54ID0gMDsKICAgICBwcml2LT52
aWV3Lm9mZnNldC5iYXNlLnkgPSAwOwotICAgIHByaXYtPm1vZGVsLmJhc2UuY29sID0gMDsKKyAg
ICBwcml2LT5tb2RlbC5iYXNlLmNvbHVtbiA9IDA7CiAgICAgcHJpdi0+bW9kZWwuYmFzZS5yb3cg
PSAwOwotICAgIHByaXYtPm1vZGVsLmN1ci5jb2xzID0gMTsKLSAgICBwcml2LT5tb2RlbC5jdXIu
cm93cyA9IDE7Ci0gICAgcHJpdi0+bW9kZWwub2xkLmNvbHMgPSAwOworICAgIHByaXYtPm1vZGVs
LmN1cnJlbnQuY29sdW1ucyA9IDE7CisgICAgcHJpdi0+bW9kZWwuY3VycmVudC5yb3dzID0gMTsK
KyAgICBwcml2LT5tb2RlbC5vbGQuY29sdW1ucyA9IDA7CiAgICAgcHJpdi0+bW9kZWwub2xkLnJv
d3MgPSAwOwogICAgIHByaXYtPmNoYW5nZWQuc2l6ZSA9IEVJTkFfVFJVRTsKIApAQCAtMTgwOSw4
ICsxODA5LDggQEAgdm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9mbHVzaChFdmFzX09iamVj
dCogZXdrVGlsZSkKIAogICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3Jl
cXVlc3RfZmx1c2gocHJpdik7CiAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfZGlz
c29jaWF0ZV9hbGwocHJpdik7Ci0gICAgdHVjID0gZXdrX3RpbGVfbWF0cml4X3VudXNlZF9jYWNo
ZV9nZXQocHJpdi0+bW9kZWwubWF0cml4KTsKLSAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfY2xl
YXIodHVjKTsKKyAgICB0aWxlVW51c2VkQ2FjaGUgPSBld2tfdGlsZV9tYXRyaXhfdW51c2VkX2Nh
Y2hlX2dldChwcml2LT5tb2RlbC5tYXRyaXgpOworICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9j
bGVhcih0aWxlVW51c2VkQ2FjaGUpOwogCiAjaWZkZWYgREVCVUdfTUVNX0xFQUtTCiAgICAgcHJp
bnRmKCJcbkZMVVNIRUQgQkFDS0lORyBTVE9SRSwgU1RBVFVTIEFGVEVSIFJFQ1JFQVRJTkcgVElM
RSBNQVRSSVg6XG4iKTsKQEAgLTE4MjMsMTYgKzE4MjMsMTYgQEAgRWluYV9Cb29sIGV3a190aWxl
ZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVnaW9uKEV2YXNfT2JqZWN0KiBld2tUaWxlLCBF
dmFzX0MKICAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihld2tUaWxlLCBwcml2LCBFSU5BX0ZB
TFNFKTsKICAgICBFaW5hX1RpbGVfR3JpZF9TbGljZXIgc2xpY2VyOwogICAgIGNvbnN0IEVpbmFf
VGlsZV9HcmlkX0luZm8qIGluZm87Ci0gICAgRXZhc19Db29yZCB0dywgdGg7Ci0gICAgRXdrX1Rp
bGVfVW51c2VkX0NhY2hlKiB0dWM7CisgICAgRXZhc19Db29yZCB0aWxlV2lkdGgsIHRpbGVIZWln
aHQ7CisgICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0aWxlVW51c2VkQ2FjaGU7CiAKLSAgICB0
dyA9IHByaXYtPnZpZXcudGlsZS53aWR0aDsKLSAgICB0aCA9IHByaXYtPnZpZXcudGlsZS5oZWln
aHQ7CisgICAgdGlsZVdpZHRoID0gcHJpdi0+dmlldy50aWxlLndpZHRoOworICAgIHRpbGVIZWln
aHQgPSBwcml2LT52aWV3LnRpbGUuaGVpZ2h0OwogICAgIHpvb20gPSBST1VOREVEX1pPT00ocHJp
di0+dmlldy50aWxlLndpZHRoLCB6b29tKTsKIAotICAgIGlmICghZWluYV90aWxlX2dyaWRfc2xp
Y2VyX3NldHVwKCZzbGljZXIsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHR3LCB0aCkpIHsKKyAgICBp
ZiAoIWVpbmFfdGlsZV9ncmlkX3NsaWNlcl9zZXR1cCgmc2xpY2VyLCB4LCB5LCB3aWR0aCwgaGVp
Z2h0LCB0aWxlV2lkdGgsIHRpbGVIZWlnaHQpKSB7CiAgICAgICAgIEVSUigiY291bGQgbm90IHNl
dHVwIGdyaWQgc2xpY2VyIGZvciAlZCwlZCslZHglZCB0aWxlPSVkeCVkIiwKLSAgICAgICAgICAg
IHgsIHksIHdpZHRoLCBoZWlnaHQsIHR3LCB0aCk7CisgICAgICAgICAgICB4LCB5LCB3aWR0aCwg
aGVpZ2h0LCB0aWxlV2lkdGgsIHRpbGVIZWlnaHQpOwogICAgICAgICByZXR1cm4gRUlOQV9GQUxT
RTsKICAgICB9CiAKQEAgLTE4NDUsNDUgKzE4NDUsNDUgQEAgRWluYV9Cb29sIGV3a190aWxlZF9i
YWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVnaW9uKEV2YXNfT2JqZWN0KiBld2tUaWxlLCBFdmFz
X0MKIAogICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Byb2Nlc3NfaWRsZXJfc3Rh
cnQocHJpdik7CiAKLSAgICB0dWMgPSBld2tfdGlsZV9tYXRyaXhfdW51c2VkX2NhY2hlX2dldChw
cml2LT5tb2RlbC5tYXRyaXgpOwotICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9sb2NrX2FyZWEo
dHVjLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCB6b29tKTsKKyAgICB0aWxlVW51c2VkQ2FjaGUgPSBl
d2tfdGlsZV9tYXRyaXhfdW51c2VkX2NhY2hlX2dldChwcml2LT5tb2RlbC5tYXRyaXgpOworICAg
IGV3a190aWxlX3VudXNlZF9jYWNoZV9sb2NrX2FyZWEodGlsZVVudXNlZENhY2hlLCB4LCB5LCB3
aWR0aCwgaGVpZ2h0LCB6b29tKTsKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCiBFaW5hX0Jv
b2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZWxhdGl2ZV9yYWRpdXMoRXZh
c19PYmplY3QqIGV3a1RpbGUsIHVuc2lnbmVkIGludCBuLCBmbG9hdCB6b29tKQogewogICAgIFBS
SVZfREFUQV9HRVRfT1JfUkVUVVJOKGV3a1RpbGUsIHByaXYsIEVJTkFfRkFMU0UpOwotICAgIHVu
c2lnbmVkIGxvbmcgc3RhcnRfcm93LCBlbmRfcm93LCBzdGFydF9jb2wsIGVuZF9jb2wsIGksIGos
IHdpZHRoLCBoZWlnaHQ7Ci0gICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0dWM7CisgICAgdW5z
aWduZWQgbG9uZyBzdGFydFJvdywgZW5kUm93LCBzdGFydENvbCwgZW5kQ29sLCBpLCBqLCB3aWR0
aCwgaGVpZ2h0OworICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSogdGlsZVVudXNlZENhY2hlOwog
CiAgICAgSU5GKCJwcml2LT5tb2RlbC5iYXNlLnJvdyA9JWxkLCBuPSV1IHByaXYtPnZpZXcucm93
cz0lbHUiLAogICAgICAgICBwcml2LT5tb2RlbC5iYXNlLnJvdywgbiwgcHJpdi0+dmlldy5yb3dz
KTsKLSAgICBzdGFydF9yb3cgPSAobG9uZylwcml2LT5tb2RlbC5iYXNlLnJvdyAtIG47Ci0gICAg
c3RhcnRfY29sID0gKGxvbmcpcHJpdi0+bW9kZWwuYmFzZS5jb2wgLSBuOwotICAgIGVuZF9yb3cg
PSBzdGQ6Om1pbihwcml2LT5tb2RlbC5jdXIucm93cyAtIDEsCisgICAgc3RhcnRSb3cgPSAobG9u
Zylwcml2LT5tb2RlbC5iYXNlLnJvdyAtIG47CisgICAgc3RhcnRDb2wgPSAobG9uZylwcml2LT5t
b2RlbC5iYXNlLmNvbHVtbiAtIG47CisgICAgZW5kUm93ID0gc3RkOjptaW4ocHJpdi0+bW9kZWwu
Y3VycmVudC5yb3dzIC0gMSwKICAgICAgICAgICAgICAgICAgICAgICAgcHJpdi0+bW9kZWwuYmFz
ZS5yb3cgKyBwcml2LT52aWV3LnJvd3MgKyBuIC0gMSk7Ci0gICAgZW5kX2NvbCA9IHN0ZDo6bWlu
KHByaXYtPm1vZGVsLmN1ci5jb2xzIC0gMSwKLSAgICAgICAgICAgICAgICAgICAgICAgcHJpdi0+
bW9kZWwuYmFzZS5jb2wgKyBwcml2LT52aWV3LmNvbHMgKyBuIC0gMSk7CisgICAgZW5kQ29sID0g
c3RkOjptaW4ocHJpdi0+bW9kZWwuY3VycmVudC5jb2x1bW5zIC0gMSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgcHJpdi0+bW9kZWwuYmFzZS5jb2x1bW4gKyBwcml2LT52aWV3LmNvbHMgKyBuIC0g
MSk7CiAKLSAgICBJTkYoInN0YXJ0X3Jvdz0lbHUsIGVuZF9yb3c9JWx1LCBzdGFydF9jb2w9JWx1
LCBlbmRfY29sPSVsdSIsCi0gICAgICAgIHN0YXJ0X3JvdywgZW5kX3Jvdywgc3RhcnRfY29sLCBl
bmRfY29sKTsKKyAgICBJTkYoInN0YXJ0Um93PSVsdSwgZW5kUm93PSVsdSwgc3RhcnRDb2w9JWx1
LCBlbmRDb2w9JWx1IiwKKyAgICAgICAgc3RhcnRSb3csIGVuZFJvdywgc3RhcnRDb2wsIGVuZENv
bCk7CiAKICAgICB6b29tID0gUk9VTkRFRF9aT09NKHByaXYtPnZpZXcudGlsZS53aWR0aCwgem9v
bSk7CiAKLSAgICBmb3IgKGkgPSBzdGFydF9yb3c7IGkgPD0gZW5kX3JvdzsgaSsrKQotICAgICAg
ICBmb3IgKGogPSBzdGFydF9jb2w7IGogPD0gZW5kX2NvbDsgaisrKQorICAgIGZvciAoaSA9IHN0
YXJ0Um93OyBpIDw9IGVuZFJvdzsgaSsrKQorICAgICAgICBmb3IgKGogPSBzdGFydENvbDsgaiA8
PSBlbmRDb2w7IGorKykKICAgICAgICAgICAgIGlmICghX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3ByZV9yZW5kZXJfcmVxdWVzdF9hZGQocHJpdiwgaiwgaSwgem9vbSwgUFJFX1JFTkRFUl9QUklP
UklUWV9MT1cpKQogICAgICAgICAgICAgICAgIGdvdG8gc3RhcnRfcHJvY2Vzc2luZzsKIAogc3Rh
cnRfcHJvY2Vzc2luZzoKICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9wcm9jZXNz
X2lkbGVyX3N0YXJ0KHByaXYpOwogCi0gICAgdHVjID0gZXdrX3RpbGVfbWF0cml4X3VudXNlZF9j
YWNoZV9nZXQocHJpdi0+bW9kZWwubWF0cml4KTsKLSAgICBoZWlnaHQgPSAoZW5kX3JvdyAtIHN0
YXJ0X3JvdyArIDEpICogVElMRV9TSVpFX0FUX1pPT00ocHJpdi0+dmlldy50aWxlLmhlaWdodCwg
em9vbSk7Ci0gICAgd2lkdGggPSAoZW5kX2NvbCAtIHN0YXJ0X2NvbCArIDEpICogVElMRV9TSVpF
X0FUX1pPT00ocHJpdi0+dmlldy50aWxlLndpZHRoLCB6b29tKTsKLSAgICBld2tfdGlsZV91bnVz
ZWRfY2FjaGVfbG9ja19hcmVhKHR1YywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0YXJ0X2NvbCAqIFRJTEVfU0laRV9BVF9aT09NKHByaXYtPnZpZXcudGlsZS53aWR0aCwg
em9vbSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydF9yb3cgKiBU
SUxFX1NJWkVfQVRfWk9PTShwcml2LT52aWV3LnRpbGUuaGVpZ2h0LCB6b29tKSwgd2lkdGgsIGhl
aWdodCwgem9vbSk7CisgICAgdGlsZVVudXNlZENhY2hlID0gZXdrX3RpbGVfbWF0cml4X3VudXNl
ZF9jYWNoZV9nZXQocHJpdi0+bW9kZWwubWF0cml4KTsKKyAgICBoZWlnaHQgPSAoZW5kUm93IC0g
c3RhcnRSb3cgKyAxKSAqIFRJTEVfU0laRV9BVF9aT09NKHByaXYtPnZpZXcudGlsZS5oZWlnaHQs
IHpvb20pOworICAgIHdpZHRoID0gKGVuZENvbCAtIHN0YXJ0Q29sICsgMSkgKiBUSUxFX1NJWkVf
QVRfWk9PTShwcml2LT52aWV3LnRpbGUud2lkdGgsIHpvb20pOworICAgIGV3a190aWxlX3VudXNl
ZF9jYWNoZV9sb2NrX2FyZWEodGlsZVVudXNlZENhY2hlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RhcnRDb2wgKiBUSUxFX1NJWkVfQVRfWk9PTShwcml2LT52aWV3LnRp
bGUud2lkdGgsIHpvb20pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rh
cnRSb3cgKiBUSUxFX1NJWkVfQVRfWk9PTShwcml2LT52aWV3LnRpbGUuaGVpZ2h0LCB6b29tKSwg
d2lkdGgsIGhlaWdodCwgem9vbSk7CiAKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQpAQCAtMTg5
MSwxMiArMTg5MSwxMiBAQCBzdGFydF9wcm9jZXNzaW5nOgogdm9pZCBld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9wcmVfcmVuZGVyX2NhbmNlbChFdmFzX09iamVjdCogZXdrVGlsZSkKIHsKICAgICBQ
UklWX0RBVEFfR0VUX09SX1JFVFVSTihld2tUaWxlLCBwcml2KTsKLSAgICBFd2tfVGlsZV9VbnVz
ZWRfQ2FjaGUqIHR1YzsKKyAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHRpbGVVbnVzZWRDYWNo
ZTsKIAogICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfY2xl
YXIocHJpdik7CiAKLSAgICB0dWMgPSBld2tfdGlsZV9tYXRyaXhfdW51c2VkX2NhY2hlX2dldChw
cml2LT5tb2RlbC5tYXRyaXgpOwotICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV91bmxvY2tfYXJl
YSh0dWMpOworICAgIHRpbGVVbnVzZWRDYWNoZSA9IGV3a190aWxlX21hdHJpeF91bnVzZWRfY2Fj
aGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7CisgICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3Vu
bG9ja19hcmVhKHRpbGVVbnVzZWRDYWNoZSk7CiB9CiAKIEVpbmFfQm9vbCBld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9kaXNhYmxlX3JlbmRlcihFdmFzX09iamVjdCogZXdrVGlsZSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfbWF0cml4LmNwcCBiL1NvdXJjZS9X
ZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfbWF0cml4LmNwcAppbmRleCBlOTFiZDc3Nzc3ZTEwNWQw
ZmUyMmRjYWY4ZjJkNmFhMDAxNmQyMjRlLi5jOGMzNDg1MzIwNmQxZGJkZWE2NTE4ODY0ODA3NGE0
NGU2OTQ5MzNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX21h
dHJpeC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a190aWxlZF9tYXRyaXguY3Bw
CkBAIC0zMywxMCArMzMsMTAgQEAKIAogc3RydWN0IF9Fd2tfVGlsZV9NYXRyaXggewogICAgIEVp
bmFfTWF0cml4c3BhcnNlKiBtYXRyaXg7Ci0gICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0dWM7
CisgICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0aWxpZVVudXNlZENhY2hlOwogICAgIEV2YXNf
Q29sb3JzcGFjZSBjc3BhY2U7CiAgICAgc3RydWN0IHsKLSAgICAgICAgdm9pZCAoKmNiKSh2b2lk
KiBkYXRhLCBFd2tfVGlsZSogdGlsZSwgY29uc3QgRWluYV9SZWN0YW5nbGUqIHVwZGF0ZSk7Cisg
ICAgICAgIHZvaWQgKCpjYWxsYmFjaykodm9pZCogZGF0YSwgRXdrX1RpbGUqIHRpbGUsIGNvbnN0
IEVpbmFfUmVjdGFuZ2xlKiB1cGRhdGUpOwogICAgICAgICB2b2lkKiBkYXRhOwogICAgIH0gcmVu
ZGVyOwogICAgIHVuc2lnbmVkIGludCBmcm96ZW47CkBAIC02MSw0MiArNjEsNDIgQEAgc3RhdGlj
IHVpbnQ2NF90IGJ5dGVzX2xlYWtlZCA9IDA7CiAvKiBjYWxsZWQgd2hlbiBtYXRyaXhzcGFyc2Ug
aXMgcmVzaXplZCBvciBmcmVlZCAqLwogc3RhdGljIHZvaWQgX2V3a190aWxlX21hdHJpeF9jZWxs
X2ZyZWUodm9pZCogdXNlckRhdGEsIHZvaWQqIGNlbGxEYXRhKQogewotICAgIEV3a19UaWxlX01h
dHJpeCogdG0gPSBzdGF0aWNfY2FzdDxFd2tfVGlsZV9NYXRyaXgqPih1c2VyRGF0YSk7CisgICAg
RXdrX1RpbGVfTWF0cml4KiB0aWxlTWF0cml4ID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGVfTWF0cml4
Kj4odXNlckRhdGEpOwogICAgIEV3a19UaWxlKiB0aWxlID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGUq
PihjZWxsRGF0YSk7CiAKICAgICBpZiAoIXRpbGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIGV3
a190aWxlX3VudXNlZF9jYWNoZV9mcmVlemUodG0tPnR1Yyk7CisgICAgZXdrX3RpbGVfdW51c2Vk
X2NhY2hlX2ZyZWV6ZSh0aWxlTWF0cml4LT50aWxpZVVudXNlZENhY2hlKTsKIAogICAgIGlmICh0
aWxlLT51cGRhdGVzIHx8IHRpbGUtPnN0YXRzLmZ1bGxfdXBkYXRlKQotICAgICAgICB0bS0+dXBk
YXRlcyA9IGVpbmFfbGlzdF9yZW1vdmUodG0tPnVwZGF0ZXMsIHRpbGUpOworICAgICAgICB0aWxl
TWF0cml4LT51cGRhdGVzID0gZWluYV9saXN0X3JlbW92ZSh0aWxlTWF0cml4LT51cGRhdGVzLCB0
aWxlKTsKIAogICAgIGlmICh0aWxlLT52aXNpYmxlKQogICAgICAgICBFUlIoImZyZWVpbmcgY2Vs
bCB0aGF0IGlzIHZpc2libGUsIGxlYWtpbmcgdGlsZSAlcCIsIHRpbGUpOwogICAgIGVsc2Ugewot
ICAgICAgICBpZiAoIWV3a190aWxlX3VudXNlZF9jYWNoZV90aWxlX2dldCh0bS0+dHVjLCB0aWxl
KSkKLSAgICAgICAgICAgIEVSUigidGlsZSAlcCB3YXMgbm90IGluIGNhY2hlICVwPyBsZWFraW5n
Li4uIiwgdGlsZSwgdG0tPnR1Yyk7CisgICAgICAgIGlmICghZXdrX3RpbGVfdW51c2VkX2NhY2hl
X3RpbGVfZ2V0KHRpbGVNYXRyaXgtPnRpbGllVW51c2VkQ2FjaGUsIHRpbGUpKQorICAgICAgICAg
ICAgRVJSKCJ0aWxlICVwIHdhcyBub3QgaW4gY2FjaGUgJXA/IGxlYWtpbmcuLi4iLCB0aWxlLCB0
aWxlTWF0cml4LT50aWxpZVVudXNlZENhY2hlKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAg
ICBEQkcoInRpbGUgY2VsbCBkb2VzIG5vdCBleGlzdCBhbnltb3JlLCBmcmVlIGl0ICVwIiwgdGls
ZSk7CiAjaWZkZWYgREVCVUdfTUVNX0xFQUtTCi0gICAgICAgICAgICB0bS0+c3RhdHMuYnl0ZXMu
ZnJlZWQgKz0gdGlsZS0+Ynl0ZXM7Ci0gICAgICAgICAgICB0bS0+c3RhdHMudGlsZXMuZnJlZWQr
KzsKKyAgICAgICAgICAgIHRpbGVNYXRyaXgtPnN0YXRzLmJ5dGVzLmZyZWVkICs9IHRpbGUtPmJ5
dGVzOworICAgICAgICAgICAgdGlsZU1hdHJpeC0+c3RhdHMudGlsZXMuZnJlZWQrKzsKICNlbmRp
ZgogICAgICAgICAgICAgZXdrX3RpbGVfZnJlZSh0aWxlKTsKICAgICAgICAgfQogICAgIH0KIAot
ICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV90aGF3KHRtLT50dWMpOworICAgIGV3a190aWxlX3Vu
dXNlZF9jYWNoZV90aGF3KHRpbGVNYXRyaXgtPnRpbGllVW51c2VkQ2FjaGUpOwogfQogCiAvKiBj
YWxsZWQgd2hlbiBjYWNoZSBvZiB1bnVzZWQgdGlsZSBpcyBmbHVzaGVkICovCiBzdGF0aWMgdm9p
ZCBfZXdrX3RpbGVfbWF0cml4X3RpbGVfZnJlZSh2b2lkKiBkYXRhLCBFd2tfVGlsZSogdGlsZSkK
IHsKLSAgICBFd2tfVGlsZV9NYXRyaXgqIHRtID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGVfTWF0cml4
Kj4oZGF0YSk7CisgICAgRXdrX1RpbGVfTWF0cml4KiB0aWxlTWF0cml4ID0gc3RhdGljX2Nhc3Q8
RXdrX1RpbGVfTWF0cml4Kj4oZGF0YSk7CiAgICAgRWluYV9NYXRyaXhzcGFyc2VfQ2VsbCogY2Vs
bDsKIAotICAgIGlmICghZWluYV9tYXRyaXhzcGFyc2VfY2VsbF9pZHhfZ2V0KHRtLT5tYXRyaXgs
IHRpbGUtPnJvdywgdGlsZS0+Y29sLCAmY2VsbCkpIHsKKyAgICBpZiAoIWVpbmFfbWF0cml4c3Bh
cnNlX2NlbGxfaWR4X2dldCh0aWxlTWF0cml4LT5tYXRyaXgsIHRpbGUtPnJvdywgdGlsZS0+Y29s
LCAmY2VsbCkpIHsKICAgICAgICAgRVJSKCJyZW1vdmluZyB0aWxlICVwIHRoYXQgd2FzIG5vdCBp
biB0aGUgbWF0cml4PyBMZWFraW5nLi4uIiwgdGlsZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CkBAIC0xMDcsNyArMTA3LDcgQEAgc3RhdGljIHZvaWQgX2V3a190aWxlX21hdHJpeF90aWxlX2Zy
ZWUodm9pZCogZGF0YSwgRXdrX1RpbGUqIHRpbGUpCiAgICAgfQogCiAgICAgaWYgKHRpbGUtPnVw
ZGF0ZXMgfHwgdGlsZS0+c3RhdHMuZnVsbF91cGRhdGUpCi0gICAgICAgIHRtLT51cGRhdGVzID0g
ZWluYV9saXN0X3JlbW92ZSh0bS0+dXBkYXRlcywgdGlsZSk7CisgICAgICAgIHRpbGVNYXRyaXgt
PnVwZGF0ZXMgPSBlaW5hX2xpc3RfcmVtb3ZlKHRpbGVNYXRyaXgtPnVwZGF0ZXMsIHRpbGUpOwog
CiAgICAgLyogc2V0IHRvIG51bGwgdG8gYXZvaWQgZG91YmxlIGZyZWUgKi8KICAgICBlaW5hX21h
dHJpeHNwYXJzZV9jZWxsX2RhdGFfcmVwbGFjZShjZWxsLCAwLCAwKTsKQEAgLTEyMCw4ICsxMjAs
OCBAQCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVfbWF0cml4X3RpbGVfZnJlZSh2b2lkKiBkYXRhLCBF
d2tfVGlsZSogdGlsZSkKICAgICB9CiAKICNpZmRlZiBERUJVR19NRU1fTEVBS1MKLSAgICB0bS0+
c3RhdHMuYnl0ZXMuZnJlZWQgKz0gdGlsZS0+Ynl0ZXM7Ci0gICAgdG0tPnN0YXRzLnRpbGVzLmZy
ZWVkKys7CisgICAgdGlsZU1hdHJpeC0+c3RhdHMuYnl0ZXMuZnJlZWQgKz0gdGlsZS0+Ynl0ZXM7
CisgICAgdGlsZU1hdHJpeC0+c3RhdHMudGlsZXMuZnJlZWQrKzsKICNlbmRpZgogCiAgICAgZXdr
X3RpbGVfZnJlZSh0aWxlKTsKQEAgLTE0NSwzOCArMTQ1LDM4IEBAIHN0YXRpYyB2b2lkIF9ld2tf
dGlsZV9tYXRyaXhfdGlsZV9mcmVlKHZvaWQqIGRhdGEsIEV3a19UaWxlKiB0aWxlKQogICoKICAq
IEByZXR1cm4gbmV3bHkgYWxsb2NhdGVkIGluc3RhbmNlIG9uIHN1Y2Nlc3MsIEBjIDAgb24gZmFp
bHVyZS4KICAqLwotRXdrX1RpbGVfTWF0cml4KiBld2tfdGlsZV9tYXRyaXhfbmV3KEV3a19UaWxl
X1VudXNlZF9DYWNoZSogdGlsZVVudXNlZENhY2hlLCB1bnNpZ25lZCBsb25nIGNvbHVtbnMsIHVu
c2lnbmVkIGxvbmcgcm93cywgRXZhc19Db2xvcnNwYWNlIGNvbG9yU3BhY2UsIHZvaWQgKCpyZW5k
ZXJfY2FsbGJhY2spKHZvaWQqIGRhdGEsIEV3a19UaWxlKiB0aWxlLCBjb25zdCBFaW5hX1JlY3Rh
bmdsZSogdXBkYXRlKSwgY29uc3Qgdm9pZCogcmVuZGVyRGF0YSkKK0V3a19UaWxlX01hdHJpeCog
ZXdrX3RpbGVfbWF0cml4X25ldyhFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHRpbGVVbnVzZWRDYWNo
ZSwgdW5zaWduZWQgbG9uZyBjb2x1bW5zLCB1bnNpZ25lZCBsb25nIHJvd3MsIEV2YXNfQ29sb3Jz
cGFjZSBjb2xvclNwYWNlLCB2b2lkICgqcmVuZGVyQ2FsbGJhY2spKHZvaWQqIGRhdGEsIEV3a19U
aWxlKiB0aWxlLCBjb25zdCBFaW5hX1JlY3RhbmdsZSogdXBkYXRlKSwgY29uc3Qgdm9pZCogcmVu
ZGVyRGF0YSkKIHsKLSAgICBFd2tfVGlsZV9NYXRyaXgqIHRtID0gc3RhdGljX2Nhc3Q8RXdrX1Rp
bGVfTWF0cml4Kj4oY2FsbG9jKDEsIHNpemVvZihFd2tfVGlsZV9NYXRyaXgpKSk7Ci0gICAgaWYg
KCF0bSkKKyAgICBFd2tfVGlsZV9NYXRyaXgqIHRpbGVNYXRyaXggPSBzdGF0aWNfY2FzdDxFd2tf
VGlsZV9NYXRyaXgqPihjYWxsb2MoMSwgc2l6ZW9mKEV3a19UaWxlX01hdHJpeCkpKTsKKyAgICBp
ZiAoIXRpbGVNYXRyaXgpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgdG0tPm1hdHJpeCA9IGVp
bmFfbWF0cml4c3BhcnNlX25ldyhyb3dzLCBjb2x1bW5zLCBfZXdrX3RpbGVfbWF0cml4X2NlbGxf
ZnJlZSwgdG0pOwotICAgIGlmICghdG0tPm1hdHJpeCkgeworICAgIHRpbGVNYXRyaXgtPm1hdHJp
eCA9IGVpbmFfbWF0cml4c3BhcnNlX25ldyhyb3dzLCBjb2x1bW5zLCBfZXdrX3RpbGVfbWF0cml4
X2NlbGxfZnJlZSwgdGlsZU1hdHJpeCk7CisgICAgaWYgKCF0aWxlTWF0cml4LT5tYXRyaXgpIHsK
ICAgICAgICAgRVJSKCJjb3VsZCBub3QgY3JlYXRlIHNwYXJzZSBtYXRyaXguIik7Ci0gICAgICAg
IGZyZWUodG0pOworICAgICAgICBmcmVlKHRpbGVNYXRyaXgpOwogICAgICAgICByZXR1cm4gMDsK
ICAgICB9CiAKICAgICBpZiAodGlsZVVudXNlZENhY2hlKQotICAgICAgICB0bS0+dHVjID0gZXdr
X3RpbGVfdW51c2VkX2NhY2hlX3JlZih0aWxlVW51c2VkQ2FjaGUpOworICAgICAgICB0aWxlTWF0
cml4LT50aWxpZVVudXNlZENhY2hlID0gZXdrX3RpbGVfdW51c2VkX2NhY2hlX3JlZih0aWxlVW51
c2VkQ2FjaGUpOwogICAgIGVsc2UgewotICAgICAgICB0bS0+dHVjID0gZXdrX3RpbGVfdW51c2Vk
X2NhY2hlX25ldyg0MDk2MDAwMCk7Ci0gICAgICAgIGlmICghdG0tPnR1YykgeworICAgICAgICB0
aWxlTWF0cml4LT50aWxpZVVudXNlZENhY2hlID0gZXdrX3RpbGVfdW51c2VkX2NhY2hlX25ldyg0
MDk2MDAwMCk7CisgICAgICAgIGlmICghdGlsZU1hdHJpeC0+dGlsaWVVbnVzZWRDYWNoZSkgewog
ICAgICAgICAgICAgRVJSKCJubyBjYWNoZSBvZiB1bnVzZWQgdGlsZSEiKTsKLSAgICAgICAgICAg
IGVpbmFfbWF0cml4c3BhcnNlX2ZyZWUodG0tPm1hdHJpeCk7Ci0gICAgICAgICAgICBmcmVlKHRt
KTsKKyAgICAgICAgICAgIGVpbmFfbWF0cml4c3BhcnNlX2ZyZWUodGlsZU1hdHJpeC0+bWF0cml4
KTsKKyAgICAgICAgICAgIGZyZWUodGlsZU1hdHJpeCk7CiAgICAgICAgICAgICByZXR1cm4gMDsK
ICAgICAgICAgfQogICAgIH0KIAotICAgIHRtLT5jc3BhY2UgPSBjb2xvclNwYWNlOwotICAgIHRt
LT5yZW5kZXIuY2IgPSByZW5kZXJfY2FsbGJhY2s7Ci0gICAgdG0tPnJlbmRlci5kYXRhID0gKHZv
aWQqKXJlbmRlckRhdGE7Ci0gICAgdG0tPnRpbGUud2lkdGggPSBERUZBVUxUX1RJTEVfVzsKLSAg
ICB0bS0+dGlsZS5oZWlnaHQgPSBERUZBVUxUX1RJTEVfSDsKKyAgICB0aWxlTWF0cml4LT5jc3Bh
Y2UgPSBjb2xvclNwYWNlOworICAgIHRpbGVNYXRyaXgtPnJlbmRlci5jYWxsYmFjayA9IHJlbmRl
ckNhbGxiYWNrOworICAgIHRpbGVNYXRyaXgtPnJlbmRlci5kYXRhID0gKHZvaWQqKXJlbmRlckRh
dGE7CisgICAgdGlsZU1hdHJpeC0+dGlsZS53aWR0aCA9IERFRkFVTFRfVElMRV9XOworICAgIHRp
bGVNYXRyaXgtPnRpbGUuaGVpZ2h0ID0gREVGQVVMVF9USUxFX0g7CiAKLSAgICByZXR1cm4gdG07
CisgICAgcmV0dXJuIHRpbGVNYXRyaXg7CiB9CiAKIC8qKgpAQCAtMTkxLDEyICsxOTEsMTIgQEAg
dm9pZCBld2tfdGlsZV9tYXRyaXhfZnJlZShFd2tfVGlsZV9NYXRyaXgqIHRpbGVNYXRyaXgpCiAj
ZW5kaWYKIAogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHRpbGVNYXRyaXgpOwotICAg
IGV3a190aWxlX3VudXNlZF9jYWNoZV9mcmVlemUodGlsZU1hdHJpeC0+dHVjKTsKKyAgICBld2tf
dGlsZV91bnVzZWRfY2FjaGVfZnJlZXplKHRpbGVNYXRyaXgtPnRpbGllVW51c2VkQ2FjaGUpOwog
CiAgICAgZWluYV9tYXRyaXhzcGFyc2VfZnJlZSh0aWxlTWF0cml4LT5tYXRyaXgpOwogCi0gICAg
ZXdrX3RpbGVfdW51c2VkX2NhY2hlX3RoYXcodGlsZU1hdHJpeC0+dHVjKTsKLSAgICBld2tfdGls
ZV91bnVzZWRfY2FjaGVfdW5yZWYodGlsZU1hdHJpeC0+dHVjKTsKKyAgICBld2tfdGlsZV91bnVz
ZWRfY2FjaGVfdGhhdyh0aWxlTWF0cml4LT50aWxpZVVudXNlZENhY2hlKTsKKyAgICBld2tfdGls
ZV91bnVzZWRfY2FjaGVfdW5yZWYodGlsZU1hdHJpeC0+dGlsaWVVbnVzZWRDYWNoZSk7CiAKICNp
ZmRlZiBERUJVR19NRU1fTEVBS1MKICAgICB0aWxlcyA9IHRpbGVNYXRyaXgtPnN0YXRzLnRpbGVz
LmFsbG9jYXRlZCAtIHRpbGVNYXRyaXgtPnN0YXRzLnRpbGVzLmZyZWVkOwpAQCAtMjQ0LDcgKzI0
NCw3IEBAIHZvaWQgZXdrX3RpbGVfbWF0cml4X3Jlc2l6ZShFd2tfVGlsZV9NYXRyaXgqIHRpbGVN
YXRyaXgsIHVuc2lnbmVkIGxvbmcgY29scywgdW5zCiBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIGV3
a190aWxlX21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KGNvbnN0IEV3a19UaWxlX01hdHJpeCogdGls
ZU1hdHJpeCkKIHsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodGlsZU1hdHJp
eCwgMCk7Ci0gICAgcmV0dXJuIHRpbGVNYXRyaXgtPnR1YzsKKyAgICByZXR1cm4gdGlsZU1hdHJp
eC0+dGlsaWVVbnVzZWRDYWNoZTsKIH0KIAogLyoqCkBAIC0yNzksNyArMjc5LDcgQEAgRXdrX1Rp
bGUqIGV3a190aWxlX21hdHJpeF90aWxlX2V4YWN0X2dldChFd2tfVGlsZV9NYXRyaXgqIHRpbGVN
YXRyaXgsIHVuc2lnbmVkIGwKIAogZW5kOgogICAgIGlmICghdGlsZS0+dmlzaWJsZSkgewotICAg
ICAgICBpZiAoIWV3a190aWxlX3VudXNlZF9jYWNoZV90aWxlX2dldCh0aWxlTWF0cml4LT50dWMs
IHRpbGUpKQorICAgICAgICBpZiAoIWV3a190aWxlX3VudXNlZF9jYWNoZV90aWxlX2dldCh0aWxl
TWF0cml4LT50aWxpZVVudXNlZENhY2hlLCB0aWxlKSkKICAgICAgICAgICAgIFdSTigiRXdrX1Rp
bGUgd2FzIHVudXNlZCBidXQgbm90IGluIGNhY2hlPyBidWchIik7CiAgICAgfQogCkBAIC0zMjAs
MTggKzMyMCwxOCBAQCBFaW5hX0Jvb2wgZXdrX3RpbGVfbWF0cml4X3RpbGVfZXhhY3RfZXhpc3Rz
KEV3a19UaWxlX01hdHJpeCogdGlsZU1hdHJpeCwgdW5zaWduZQogICovCiBFd2tfVGlsZSogZXdr
X3RpbGVfbWF0cml4X3RpbGVfbmV3KEV3a19UaWxlX01hdHJpeCogdGlsZU1hdHJpeCwgRXZhcyog
Y2FudmFzLCB1bnNpZ25lZCBsb25nIGNvbHVtbiwgdW5zaWduZWQgbG9uZyByb3csIGZsb2F0IHpv
b20pCiB7Ci0gICAgRXZhc19Db29yZCB0dywgdGg7CisgICAgRXZhc19Db29yZCB0aWxlV2lkdGgs
IHRpbGVIZWlnaHQ7CiAgICAgRXdrX1RpbGUqIHRpbGU7CiAKICAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTl9WQUwodGlsZU1hdHJpeCwgMCk7CiAgICAgRUlOQV9TQUZFVFlfT05fRkFMU0Vf
UkVUVVJOX1ZBTCh6b29tID4gMC4wLCAwKTsKIAotICAgIHR3ID0gdGlsZU1hdHJpeC0+dGlsZS53
aWR0aDsKLSAgICB0aCA9IHRpbGVNYXRyaXgtPnRpbGUuaGVpZ2h0OworICAgIHRpbGVXaWR0aCA9
IHRpbGVNYXRyaXgtPnRpbGUud2lkdGg7CisgICAgdGlsZUhlaWdodCA9IHRpbGVNYXRyaXgtPnRp
bGUuaGVpZ2h0OwogCi0gICAgdGlsZSA9IGV3a190aWxlX25ldyhjYW52YXMsIHR3LCB0aCwgem9v
bSwgdGlsZU1hdHJpeC0+Y3NwYWNlKTsKKyAgICB0aWxlID0gZXdrX3RpbGVfbmV3KGNhbnZhcywg
dGlsZVdpZHRoLCB0aWxlSGVpZ2h0LCB6b29tLCB0aWxlTWF0cml4LT5jc3BhY2UpOwogICAgIGlm
ICghdGlsZSkgewotICAgICAgICBFUlIoImNvdWxkIG5vdCBjcmVhdGUgdGlsZSAlZHglZCBhdCAl
ZiwgY3NwYWNlPSVkIiwgdHcsIHRoLCAoZG91YmxlKXpvb20sIHRpbGVNYXRyaXgtPmNzcGFjZSk7
CisgICAgICAgIEVSUigiY291bGQgbm90IGNyZWF0ZSB0aWxlICVkeCVkIGF0ICVmLCBjc3BhY2U9
JWQiLCB0aWxlV2lkdGgsIHRpbGVIZWlnaHQsIChkb3VibGUpem9vbSwgdGlsZU1hdHJpeC0+Y3Nw
YWNlKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCkBAIC0zNDMsOCArMzQzLDggQEAgRXdr
X1RpbGUqIGV3a190aWxlX21hdHJpeF90aWxlX25ldyhFd2tfVGlsZV9NYXRyaXgqIHRpbGVNYXRy
aXgsIEV2YXMqIGNhbnZhcywgdW4KIAogICAgIHRpbGUtPmNvbCA9IGNvbHVtbjsKICAgICB0aWxl
LT5yb3cgPSByb3c7Ci0gICAgdGlsZS0+eCA9IGNvbHVtbiAqIHR3OwotICAgIHRpbGUtPnkgPSBy
b3cgKiB0aDsKKyAgICB0aWxlLT54ID0gY29sdW1uICogdGlsZVdpZHRoOworICAgIHRpbGUtPnkg
PSByb3cgKiB0aWxlSGVpZ2h0OwogCiAgICAgY2Fpcm9fdHJhbnNsYXRlKHRpbGUtPmNhaXJvLCAt
dGlsZS0+eCwgLXRpbGUtPnkpOwogCkBAIC0zODUsMTYgKzM4NSwxNiBAQCBFaW5hX0Jvb2wgZXdr
X3RpbGVfbWF0cml4X3RpbGVfcHV0KEV3a19UaWxlX01hdHJpeCogdGlsZU1hdHJpeCwgRXdrX1Rp
bGUqIHRpbGUsCiAgICAgICAgIHJldHVybiBFSU5BX1RSVUU7CiAKICAgICB0aWxlLT5zdGF0cy5s
YXN0X3VzZWQgPSBsYXN0VXNlZDsKLSAgICByZXR1cm4gZXdrX3RpbGVfdW51c2VkX2NhY2hlX3Rp
bGVfcHV0KHRpbGVNYXRyaXgtPnR1YywgdGlsZSwgX2V3a190aWxlX21hdHJpeF90aWxlX2ZyZWUs
IHRpbGVNYXRyaXgpOworICAgIHJldHVybiBld2tfdGlsZV91bnVzZWRfY2FjaGVfdGlsZV9wdXQo
dGlsZU1hdHJpeC0+dGlsaWVVbnVzZWRDYWNoZSwgdGlsZSwgX2V3a190aWxlX21hdHJpeF90aWxl
X2ZyZWUsIHRpbGVNYXRyaXgpOwogfQogCiBFaW5hX0Jvb2wgZXdrX3RpbGVfbWF0cml4X3RpbGVf
dXBkYXRlKEV3a19UaWxlX01hdHJpeCogdGlsZU1hdHJpeCwgdW5zaWduZWQgbG9uZyBjb2wsIHVu
c2lnbmVkIGxvbmcgcm93LCBjb25zdCBFaW5hX1JlY3RhbmdsZSogdXBkYXRlKQogewotICAgIEVp
bmFfUmVjdGFuZ2xlIG5ld191cGRhdGU7CisgICAgRWluYV9SZWN0YW5nbGUgbmV3VXBkYXRlOwog
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh0aWxlTWF0cml4LCBFSU5BX0ZBTFNF
KTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodXBkYXRlLCBFSU5BX0ZBTFNF
KTsKIAotICAgIG1lbWNweSgmbmV3X3VwZGF0ZSwgdXBkYXRlLCBzaXplb2YobmV3X3VwZGF0ZSkp
OworICAgIG1lbWNweSgmbmV3VXBkYXRlLCB1cGRhdGUsIHNpemVvZihuZXdVcGRhdGUpKTsKICAg
ICAvLyBjaGVjayB1cGRhdGUgaXMgdmFsaWQsIG90aGVyd2lzZSByZXR1cm4gRUlOQV9GQUxTRQog
ICAgIGlmICh1cGRhdGUtPnggPCAwIHx8IHVwZGF0ZS0+eSA8IDAgfHwgdXBkYXRlLT53IDw9IDAg
fHwgdXBkYXRlLT5oIDw9IDApIHsKICAgICAgICAgRVJSKCJpbnZhbGlkIHVwZGF0ZSByZWdpb24u
Iik7CkBAIC00MDIsOSArNDAyLDkgQEAgRWluYV9Cb29sIGV3a190aWxlX21hdHJpeF90aWxlX3Vw
ZGF0ZShFd2tfVGlsZV9NYXRyaXgqIHRpbGVNYXRyaXgsIHVuc2lnbmVkIGxvbmcKICAgICB9CiAK
ICAgICBpZiAodXBkYXRlLT54ICsgdXBkYXRlLT53IC0gMSA+PSB0aWxlTWF0cml4LT50aWxlLndp
ZHRoKQotICAgICAgICBuZXdfdXBkYXRlLncgPSB0aWxlTWF0cml4LT50aWxlLndpZHRoIC0gdXBk
YXRlLT54OworICAgICAgICBuZXdVcGRhdGUudyA9IHRpbGVNYXRyaXgtPnRpbGUud2lkdGggLSB1
cGRhdGUtPng7CiAgICAgaWYgKHVwZGF0ZS0+eSArIHVwZGF0ZS0+aCAtIDEgPj0gdGlsZU1hdHJp
eC0+dGlsZS5oZWlnaHQpCi0gICAgICAgIG5ld191cGRhdGUuaCA9IHRpbGVNYXRyaXgtPnRpbGUu
aGVpZ2h0IC0gdXBkYXRlLT55OworICAgICAgICBuZXdVcGRhdGUuaCA9IHRpbGVNYXRyaXgtPnRp
bGUuaGVpZ2h0IC0gdXBkYXRlLT55OwogCiAgICAgRXdrX1RpbGUqIHRpbGUgPSBzdGF0aWNfY2Fz
dDxFd2tfVGlsZSo+KGVpbmFfbWF0cml4c3BhcnNlX2RhdGFfaWR4X2dldCh0aWxlTWF0cml4LT5t
YXRyaXgsIHJvdywgY29sKSk7CiAgICAgaWYgKCF0aWxlKQpAQCAtNDEyLDcgKzQxMiw3IEBAIEVp
bmFfQm9vbCBld2tfdGlsZV9tYXRyaXhfdGlsZV91cGRhdGUoRXdrX1RpbGVfTWF0cml4KiB0aWxl
TWF0cml4LCB1bnNpZ25lZCBsb25nCiAKICAgICBpZiAoIXRpbGUtPnVwZGF0ZXMgJiYgIXRpbGUt
PnN0YXRzLmZ1bGxfdXBkYXRlKQogICAgICAgICB0aWxlTWF0cml4LT51cGRhdGVzID0gZWluYV9s
aXN0X2FwcGVuZCh0aWxlTWF0cml4LT51cGRhdGVzLCB0aWxlKTsKLSAgICBld2tfdGlsZV91cGRh
dGVfYXJlYSh0aWxlLCAmbmV3X3VwZGF0ZSk7CisgICAgZXdrX3RpbGVfdXBkYXRlX2FyZWEodGls
ZSwgJm5ld1VwZGF0ZSk7CiAKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQpAQCAtNDUzLDcgKzQ1
Myw3IEBAIHZvaWQgZXdrX3RpbGVfbWF0cml4X3RpbGVfdXBkYXRlc19jbGVhcihFd2tfVGlsZV9N
YXRyaXgqIHRpbGVNYXRyaXgsIEV3a19UaWxlKiB0CiBzdGF0aWMgRWluYV9Cb29sIF9ld2tfdGls
ZV9tYXRyaXhfc2xpY2VyX3NldHVwKEV3a19UaWxlX01hdHJpeCogdGlsZU1hdHJpeCwgY29uc3Qg
RWluYV9SZWN0YW5nbGUqIGFyZWEsIGZsb2F0IHpvb20sIEVpbmFfVGlsZV9HcmlkX1NsaWNlciog
c2xpY2VyKQogewogICAgIHVuc2lnbmVkIGxvbmcgcm93cywgY29sczsKLSAgICBFdmFzX0Nvb3Jk
IHgsIHksIHdpZHRoLCBoZWlnaHQsIHR3LCB0aDsKKyAgICBFdmFzX0Nvb3JkIHgsIHksIHdpZHRo
LCBoZWlnaHQsIHRpbGVXaWR0aCwgdGlsZUhlaWdodDsKIAogICAgIGlmIChhcmVhLT53IDw9IDAg
fHwgYXJlYS0+aCA8PSAwKSB7CiAgICAgICAgIFdSTigiaW52YWxpZCBhcmVhIHJlZ2lvbjogJWQs
JWQrJWR4JWQuIiwKQEAgLTQ2Niw4ICs0NjYsOCBAQCBzdGF0aWMgRWluYV9Cb29sIF9ld2tfdGls
ZV9tYXRyaXhfc2xpY2VyX3NldHVwKEV3a19UaWxlX01hdHJpeCogdGlsZU1hdHJpeCwgY29ucwog
ICAgIHdpZHRoID0gYXJlYS0+dzsKICAgICBoZWlnaHQgPSBhcmVhLT5oOwogCi0gICAgdHcgPSB0
aWxlTWF0cml4LT50aWxlLndpZHRoOwotICAgIHRoID0gdGlsZU1hdHJpeC0+dGlsZS5oZWlnaHQ7
CisgICAgdGlsZVdpZHRoID0gdGlsZU1hdHJpeC0+dGlsZS53aWR0aDsKKyAgICB0aWxlSGVpZ2h0
ID0gdGlsZU1hdHJpeC0+dGlsZS5oZWlnaHQ7CiAKICAgICAvLyBjcm9wcGluZyBhcmVhIHJlZ2lv
biB0byBmaXQgbWF0cml4CiAgICAgZWluYV9tYXRyaXhzcGFyc2Vfc2l6ZV9nZXQodGlsZU1hdHJp
eC0+bWF0cml4LCAmcm93cywgJmNvbHMpOwpAQCAtNDgwLDEyICs0ODAsMTIgQEAgc3RhdGljIEVp
bmFfQm9vbCBfZXdrX3RpbGVfbWF0cml4X3NsaWNlcl9zZXR1cChFd2tfVGlsZV9NYXRyaXgqIHRp
bGVNYXRyaXgsIGNvbnMKICAgICAgICAgeSA9IDA7CiAgICAgfQogCi0gICAgaWYgKHkgKyBoZWln
aHQgLSAxID4gKGxvbmcpKHJvd3MgKiB0aCkpCi0gICAgICAgIGhlaWdodCA9IHJvd3MgKiB0aCAt
IHk7Ci0gICAgaWYgKHggKyB3aWR0aCAtIDEgPiAobG9uZykoY29scyAqIHR3KSkKLSAgICAgICAg
d2lkdGggPSBjb2xzICogdHcgLSB4OworICAgIGlmICh5ICsgaGVpZ2h0IC0gMSA+IChsb25nKShy
b3dzICogdGlsZUhlaWdodCkpCisgICAgICAgIGhlaWdodCA9IHJvd3MgKiB0aWxlSGVpZ2h0IC0g
eTsKKyAgICBpZiAoeCArIHdpZHRoIC0gMSA+IChsb25nKShjb2xzICogdGlsZVdpZHRoKSkKKyAg
ICAgICAgd2lkdGggPSBjb2xzICogdGlsZVdpZHRoIC0geDsKIAotICAgIHJldHVybiBlaW5hX3Rp
bGVfZ3JpZF9zbGljZXJfc2V0dXAoc2xpY2VyLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCB0dywgdGgp
OworICAgIHJldHVybiBlaW5hX3RpbGVfZ3JpZF9zbGljZXJfc2V0dXAoc2xpY2VyLCB4LCB5LCB3
aWR0aCwgaGVpZ2h0LCB0aWxlV2lkdGgsIHRpbGVIZWlnaHQpOwogfQogCiAKQEAgLTUzMSwxNyAr
NTMxLDE3IEBAIEVpbmFfQm9vbCBld2tfdGlsZV9tYXRyaXhfdXBkYXRlKEV3a19UaWxlX01hdHJp
eCogdGlsZU1hdHJpeCwgY29uc3QgRWluYV9SZWN0YW5nCiAKIHZvaWQgZXdrX3RpbGVfbWF0cml4
X3VwZGF0ZXNfcHJvY2VzcyhFd2tfVGlsZV9NYXRyaXgqIHRpbGVNYXRyaXgpCiB7Ci0gICAgRWlu
YV9MaXN0KiBsLCAqIGxfbmV4dDsKKyAgICBFaW5hX0xpc3QqIGxpc3QsICpsaXN0TmV4dDsKICAg
ICB2b2lkKiBpdGVtOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHRpbGVNYXRyaXgp
OwogCiAgICAgLy8gcHJvY2VzcyB1cGRhdGVzLCB1bmZsYWcgdGlsZXMKLSAgICBFSU5BX0xJU1Rf
Rk9SRUFDSF9TQUZFKHRpbGVNYXRyaXgtPnVwZGF0ZXMsIGwsIGxfbmV4dCwgaXRlbSkgeworICAg
IEVJTkFfTElTVF9GT1JFQUNIX1NBRkUodGlsZU1hdHJpeC0+dXBkYXRlcywgbGlzdCwgbGlzdE5l
eHQsIGl0ZW0pIHsKICAgICAgICAgRXdrX1RpbGUqIHRpbGUgPSBzdGF0aWNfY2FzdDxFd2tfVGls
ZSo+KGl0ZW0pOwotICAgICAgICBld2tfdGlsZV91cGRhdGVzX3Byb2Nlc3ModGlsZSwgdGlsZU1h
dHJpeC0+cmVuZGVyLmNiLCB0aWxlTWF0cml4LT5yZW5kZXIuZGF0YSk7CisgICAgICAgIGV3a190
aWxlX3VwZGF0ZXNfcHJvY2Vzcyh0aWxlLCB0aWxlTWF0cml4LT5yZW5kZXIuY2FsbGJhY2ssIHRp
bGVNYXRyaXgtPnJlbmRlci5kYXRhKTsKICAgICAgICAgaWYgKHRpbGUtPnZpc2libGUpIHsKICAg
ICAgICAgICAgIGV3a190aWxlX3VwZGF0ZXNfY2xlYXIodGlsZSk7Ci0gICAgICAgICAgICB0aWxl
TWF0cml4LT51cGRhdGVzID0gZWluYV9saXN0X3JlbW92ZV9saXN0KHRpbGVNYXRyaXgtPnVwZGF0
ZXMsIGwpOworICAgICAgICAgICAgdGlsZU1hdHJpeC0+dXBkYXRlcyA9IGVpbmFfbGlzdF9yZW1v
dmVfbGlzdCh0aWxlTWF0cml4LT51cGRhdGVzLCBsaXN0KTsKICAgICAgICAgfQogICAgIH0KIH0K
QEAgLTU1OSw3ICs1NTksNyBAQCB2b2lkIGV3a190aWxlX21hdHJpeF91cGRhdGVzX2NsZWFyKEV3
a19UaWxlX01hdHJpeCogdGlsZU1hdHJpeCkKIC8vIHJlbW92ZSBtZSBsYXRlciEKIHZvaWQgZXdr
X3RpbGVfbWF0cml4X2RiZyhjb25zdCBFd2tfVGlsZV9NYXRyaXgqIHRpbGVNYXRyaXgpCiB7Ci0g
ICAgRWluYV9JdGVyYXRvciogaXQgPSBlaW5hX21hdHJpeHNwYXJzZV9pdGVyYXRvcl9jb21wbGV0
ZV9uZXcodGlsZU1hdHJpeC0+bWF0cml4KTsKKyAgICBFaW5hX0l0ZXJhdG9yKiBpdGVyYXRvciA9
IGVpbmFfbWF0cml4c3BhcnNlX2l0ZXJhdG9yX2NvbXBsZXRlX25ldyh0aWxlTWF0cml4LT5tYXRy
aXgpOwogICAgIEVpbmFfTWF0cml4c3BhcnNlX0NlbGwqIGNlbGw7CiAgICAgRWluYV9Cb29sIGxh
c3RfZW1wdHkgPSBFSU5BX0ZBTFNFOwogCkBAIC01NzQsOSArNTc0LDkgQEAgdm9pZCBld2tfdGls
ZV9tYXRyaXhfZGJnKGNvbnN0IEV3a19UaWxlX01hdHJpeCogdGlsZU1hdHJpeCkKICAgICBwcmlu
dGYoIkV3a19UaWxlIE1hdHJpeDpcbiIpOwogI2VuZGlmCiAKLSAgICBFSU5BX0lURVJBVE9SX0ZP
UkVBQ0goaXQsIGNlbGwpIHsKLSAgICAgICAgdW5zaWduZWQgbG9uZyByb3csIGNvbDsKLSAgICAg
ICAgZWluYV9tYXRyaXhzcGFyc2VfY2VsbF9wb3NpdGlvbl9nZXQoY2VsbCwgJnJvdywgJmNvbCk7
CisgICAgRUlOQV9JVEVSQVRPUl9GT1JFQUNIKGl0ZXJhdG9yLCBjZWxsKSB7CisgICAgICAgIHVu
c2lnbmVkIGxvbmcgcm93LCBjb2x1bW47CisgICAgICAgIGVpbmFfbWF0cml4c3BhcnNlX2NlbGxf
cG9zaXRpb25fZ2V0KGNlbGwsICZyb3csICZjb2x1bW4pOwogCiAgICAgICAgIEV3a19UaWxlKiB0
aWxlID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGUqPihlaW5hX21hdHJpeHNwYXJzZV9jZWxsX2RhdGFf
Z2V0KGNlbGwpKTsKICAgICAgICAgaWYgKCF0aWxlKSB7CkBAIC01ODQsMjIgKzU4NCwyMiBAQCB2
b2lkIGV3a190aWxlX21hdHJpeF9kYmcoY29uc3QgRXdrX1RpbGVfTWF0cml4KiB0aWxlTWF0cml4
KQogICAgICAgICAgICAgICAgIGxhc3RfZW1wdHkgPSBFSU5BX1RSVUU7CiAgICAgICAgICAgICAg
ICAgcHJpbnRmKCJFbXB0eToiKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHByaW50Zigi
IFslbHUsJWx1XSIsIGNvbCwgcm93KTsKKyAgICAgICAgICAgIHByaW50ZigiIFslbHUsJWx1XSIs
IGNvbHVtbiwgcm93KTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmIChsYXN0X2Vt
cHR5KSB7CiAgICAgICAgICAgICAgICAgbGFzdF9lbXB0eSA9IEVJTkFfRkFMU0U7CiAgICAgICAg
ICAgICAgICAgcHJpbnRmKCJcbiIpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgcHJpbnRm
KCIlM2x1LCUzbHUgJTEwcDoiLCBjb2wsIHJvdywgdGlsZSk7CisgICAgICAgICAgICBwcmludGYo
IiUzbHUsJTNsdSAlMTBwOiIsIGNvbHVtbiwgcm93LCB0aWxlKTsKICAgICAgICAgICAgIHByaW50
ZigiIFslM2x1LCUzbHUgKyAlZHglZCBAICUwLjNmXSVjIiwgdGlsZS0+Y29sLCB0aWxlLT5yb3cs
IHRpbGUtPndpZHRoLCB0aWxlLT5oZWlnaHQsIHRpbGUtPnpvb20sIHRpbGUtPnZpc2libGUgPyAn
KicgOiAnICcpOwogICAgICAgICAgICAgcHJpbnRmKCJcbiIpOwogICAgICAgICB9CiAgICAgfQog
ICAgIGlmIChsYXN0X2VtcHR5KQogICAgICAgICBwcmludGYoIlxuIik7Ci0gICAgZWluYV9pdGVy
YXRvcl9mcmVlKGl0KTsKKyAgICBlaW5hX2l0ZXJhdG9yX2ZyZWUoaXRlcmF0b3IpOwogCi0gICAg
ZXdrX3RpbGVfdW51c2VkX2NhY2hlX2RiZyh0aWxlTWF0cml4LT50dWMpOworICAgIGV3a190aWxl
X3VudXNlZF9jYWNoZV9kYmcodGlsZU1hdHJpeC0+dGlsaWVVbnVzZWRDYWNoZSk7CiB9CiAKIC8q
KgpAQCAtNjE1LDcgKzYxNSw3IEBAIHZvaWQgZXdrX3RpbGVfbWF0cml4X2ZyZWV6ZShFd2tfVGls
ZV9NYXRyaXgqIHRpbGVNYXRyaXgpCiB7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4o
dGlsZU1hdHJpeCk7CiAgICAgaWYgKCF0aWxlTWF0cml4LT5mcm96ZW4pCi0gICAgICAgIGV3a190
aWxlX3VudXNlZF9jYWNoZV9mcmVlemUodGlsZU1hdHJpeC0+dHVjKTsKKyAgICAgICAgZXdrX3Rp
bGVfdW51c2VkX2NhY2hlX2ZyZWV6ZSh0aWxlTWF0cml4LT50aWxpZVVudXNlZENhY2hlKTsKICAg
ICB0aWxlTWF0cml4LT5mcm96ZW4rKzsKIH0KIApAQCAtNjM1LDUgKzYzNSw1IEBAIHZvaWQgZXdr
X3RpbGVfbWF0cml4X3RoYXcoRXdrX1RpbGVfTWF0cml4KiB0aWxlTWF0cml4KQogCiAgICAgdGls
ZU1hdHJpeC0+ZnJvemVuLS07CiAgICAgaWYgKCF0aWxlTWF0cml4LT5mcm96ZW4pCi0gICAgICAg
IGV3a190aWxlX3VudXNlZF9jYWNoZV90aGF3KHRpbGVNYXRyaXgtPnR1Yyk7CisgICAgICAgIGV3
a190aWxlX3VudXNlZF9jYWNoZV90aGF3KHRpbGVNYXRyaXgtPnRpbGllVW51c2VkQ2FjaGUpOwog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a190aWxlZF9tb2RlbC5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX21vZGVsLmNwcAppbmRleCAyMDliMGMz
OWYxNjc4ZWFiMTM4MjliNjU4YTVjMzdiOWEwNDBhZTNlLi5kZDVmMGQ1YTgwY2E1NDM0NDIwNDJk
ZGQ5YTc2YWM2M2MwYTI0NzUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdr
X3RpbGVkX21vZGVsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX21v
ZGVsLmNwcApAQCAtMTQ5LDU5ICsxNDksNTkgQEAgdm9pZCBld2tfdGlsZV9hY2NvdW50aW5nX2Ri
ZygpCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVfcGFpbnRfcmdiODg4KEV3a19UaWxl
KiB0aWxlLCB1aW50OF90IHJlZCwgdWludDhfdCBncmVlbiwgdWludDhfdCBibHVlKQogewotICAg
IHVpbnQzMl90IGMxID0gMHhmZjAwMDAwMCB8ICgodWludDMyX3QpcmVkIDw8IDE2KSB8ICgodWlu
dDMyX3QpZ3JlZW4gPDwgOCkgfCBibHVlOwotICAgIHVpbnQzMl90IGMyID0gKCh1aW50NjRfdClj
MSA8PCAzMikgfCBjMTsKKyAgICB1aW50MzJfdCBjb2xvcjEgPSAweGZmMDAwMDAwIHwgKCh1aW50
MzJfdClyZWQgPDwgMTYpIHwgKCh1aW50MzJfdClncmVlbiA8PCA4KSB8IGJsdWU7CisgICAgdWlu
dDMyX3QgY29sb3IyID0gKCh1aW50NjRfdCljb2xvcjEgPDwgMzIpIHwgY29sb3IxOwogCiAgICAg
dWludDY0X3QqIGRzdDY0ID0gKHVpbnQ2NF90Kil0aWxlLT5waXhlbHM7CiAgICAgdWludDY0X3Qq
IGRzdDY0X2VuZCA9IGRzdDY0ICsgKCh0aWxlLT5ieXRlcyAvIDgpICYgfjcpOwogICAgIGZvciAo
OyBkc3Q2NCA8IGRzdDY0X2VuZDsgZHN0NjQgKz0gOCkgewogICAgICAgICAvKiBUT0RPOiBBUk0g
YWRkIHBsZCBvciBORU9OIGluc3RydWN0aW9ucyAqLwotICAgICAgICBkc3Q2NFswXSA9IGMyOwot
ICAgICAgICBkc3Q2NFsxXSA9IGMyOwotICAgICAgICBkc3Q2NFsyXSA9IGMyOwotICAgICAgICBk
c3Q2NFszXSA9IGMyOwotICAgICAgICBkc3Q2NFs0XSA9IGMyOwotICAgICAgICBkc3Q2NFs1XSA9
IGMyOwotICAgICAgICBkc3Q2NFs2XSA9IGMyOwotICAgICAgICBkc3Q2NFs3XSA9IGMyOworICAg
ICAgICBkc3Q2NFswXSA9IGNvbG9yMjsKKyAgICAgICAgZHN0NjRbMV0gPSBjb2xvcjI7CisgICAg
ICAgIGRzdDY0WzJdID0gY29sb3IyOworICAgICAgICBkc3Q2NFszXSA9IGNvbG9yMjsKKyAgICAg
ICAgZHN0NjRbNF0gPSBjb2xvcjI7CisgICAgICAgIGRzdDY0WzVdID0gY29sb3IyOworICAgICAg
ICBkc3Q2NFs2XSA9IGNvbG9yMjsKKyAgICAgICAgZHN0NjRbN10gPSBjb2xvcjI7CiAgICAgfQog
CiAgICAgdWludDMyX3QqIGRzdDMyID0gKHVpbnQzMl90Kilkc3Q2NF9lbmQ7CiAgICAgdWludDMy
X3QqIGRzdDMyX2VuZCA9ICh1aW50MzJfdCopKHRpbGUtPnBpeGVscyArIHRpbGUtPmJ5dGVzKTsK
ICAgICBmb3IgKDsgZHN0MzIgPCBkc3QzMl9lbmQ7IGRzdDMyKyspCi0gICAgICAgICpkc3QzMiA9
IGMxOworICAgICAgICAqZHN0MzIgPSBjb2xvcjE7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBf
ZXdrX3RpbGVfcGFpbnRfcmdiNTY1KEV3a19UaWxlKiB0aWxlLCB1aW50OF90IHJlZCwgdWludDhf
dCBncmVlbiwgdWludDhfdCBibHVlKQogewotICAgIHVpbnQxNl90KiBkc3QxNiwgKiBkc3QxNl9l
bmQsIGMxOwotICAgIHVpbnQ2NF90KiBkc3Q2NCwgKiBkc3Q2NF9lbmQsIGMyOworICAgIHVpbnQx
Nl90KiBkc3QxNiwgKiBkc3QxNl9lbmQsIGNvbG9yMTsKKyAgICB1aW50NjRfdCogZHN0NjQsICog
ZHN0NjRfZW5kLCBjb2xvcjI7CiAKLSAgICBjMSA9ICgoKChyZWQgPj4gMykgJiAweDFmKSA8PCAx
MSkgfAorICAgIGNvbG9yMSA9ICgoKChyZWQgPj4gMykgJiAweDFmKSA8PCAxMSkgfAogICAgICAg
ICAgICgoKGdyZWVuID4+IDIpICYgMHgzZikgPDwgNSkgfAogICAgICAgICAgICgoYmx1ZSA+PiAz
KSAmIDB4MWYpKTsKIAotICAgIGMyID0gKCgodWludDY0X3QpYzEgPDwgNDgpIHwgKCh1aW50NjRf
dCljMSA8PCAzMikgfAotICAgICAgICAgICgodWludDY0X3QpYzEgPDwgMTYpIHwgYzEpOworICAg
IGNvbG9yMiA9ICgoKHVpbnQ2NF90KWNvbG9yMSA8PCA0OCkgfCAoKHVpbnQ2NF90KWNvbG9yMSA8
PCAzMikgfAorICAgICAgICAgICgodWludDY0X3QpY29sb3IxIDw8IDE2KSB8IGNvbG9yMSk7CiAK
ICAgICBkc3Q2NCA9ICh1aW50NjRfdCopdGlsZS0+cGl4ZWxzOwogICAgIGRzdDY0X2VuZCA9IGRz
dDY0ICsgKCh0aWxlLT5ieXRlcyAvIDgpICYgfjcpOwogICAgIGZvciAoOyBkc3Q2NCA8IGRzdDY0
X2VuZDsgZHN0NjQgKz0gOCkgewogICAgICAgICAvKiBUT0RPOiBBUk0gYWRkIHBsZCBvciBORU9O
IGluc3RydWN0aW9ucyAqLwotICAgICAgICBkc3Q2NFswXSA9IGMyOwotICAgICAgICBkc3Q2NFsx
XSA9IGMyOwotICAgICAgICBkc3Q2NFsyXSA9IGMyOwotICAgICAgICBkc3Q2NFszXSA9IGMyOwot
ICAgICAgICBkc3Q2NFs0XSA9IGMyOwotICAgICAgICBkc3Q2NFs1XSA9IGMyOwotICAgICAgICBk
c3Q2NFs2XSA9IGMyOwotICAgICAgICBkc3Q2NFs3XSA9IGMyOworICAgICAgICBkc3Q2NFswXSA9
IGNvbG9yMjsKKyAgICAgICAgZHN0NjRbMV0gPSBjb2xvcjI7CisgICAgICAgIGRzdDY0WzJdID0g
Y29sb3IyOworICAgICAgICBkc3Q2NFszXSA9IGNvbG9yMjsKKyAgICAgICAgZHN0NjRbNF0gPSBj
b2xvcjI7CisgICAgICAgIGRzdDY0WzVdID0gY29sb3IyOworICAgICAgICBkc3Q2NFs2XSA9IGNv
bG9yMjsKKyAgICAgICAgZHN0NjRbN10gPSBjb2xvcjI7CiAgICAgfQogCiAgICAgZHN0MTYgPSAo
dWludDE2X3QqKWRzdDE2X2VuZDsKICAgICBkc3QxNl9lbmQgPSAodWludDE2X3QqKSh0aWxlLT5w
aXhlbHMgKyB0aWxlLT5ieXRlcyk7CiAgICAgZm9yICg7IGRzdDE2IDwgZHN0MTZfZW5kOyBkc3Qx
NisrKQotICAgICAgICAqZHN0MTYgPSBjMTsKKyAgICAgICAgKmRzdDE2ID0gY29sb3IxOwogfQog
CiBzdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlX3BhaW50KEV3a19UaWxlKiB0aWxlLCB1aW50
OF90IHJlZCwgdWludDhfdCBncmVlbiwgdWludDhfdCBibHVlKQpAQCAtMjMxLDE3ICsyMzEsMTcg
QEAgc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZV9wYWludChFd2tfVGlsZSogdGlsZSwgdWlu
dDhfdCByZWQsIHVpbnQ4X3QgZ3JlZW4sIHUKICAqLwogRXdrX1RpbGUqIGV3a190aWxlX25ldyhF
dmFzKiBldmFzLCBFdmFzX0Nvb3JkIHdpZHRoLCBFdmFzX0Nvb3JkIGhlaWdodCwgZmxvYXQgem9v
bSwgRXZhc19Db2xvcnNwYWNlIGNvbG9yU3BhY2UpCiB7Ci0gICAgRXZhc19Db29yZCogZWM7Ci0g
ICAgRXZhc19Db2xvcnNwYWNlKiBlY3M7Ci0gICAgZmxvYXQqIGY7Ci0gICAgc2l6ZV90KiBzOwor
ICAgIEV2YXNfQ29vcmQqIGV2YXNDb29yZDsKKyAgICBFdmFzX0NvbG9yc3BhY2UqIGV2YXNDb2xv
clNwYWNlOworICAgIGZsb2F0KiB0aWxlWm9vbTsKKyAgICBzaXplX3QqIHRpbGVTaXplOwogICAg
IEV3a19UaWxlKiB0aWxlOwogICAgIHVuc2lnbmVkIGludCBhcmVhOwogICAgIHNpemVfdCBieXRl
czsKICAgICBjYWlyb19mb3JtYXRfdCBmb3JtYXQ7CiAgICAgY2Fpcm9fc3RhdHVzX3Qgc3RhdHVz
OwogICAgIGludCBzdHJpZGU7Ci0gICAgRWNvcmVfRXZhcyogZWU7CisgICAgRWNvcmVfRXZhcyog
ZWNvcmVFdmFzOwogICAgIGNvbnN0IGNoYXIqIGVuZ2luZTsKIAogICAgIGFyZWEgPSB3aWR0aCAq
IGhlaWdodDsKQEAgLTI2Nyw4ICsyNjcsOCBAQCBFd2tfVGlsZSogZXdrX3RpbGVfbmV3KEV2YXMq
IGV2YXMsIEV2YXNfQ29vcmQgd2lkdGgsIEV2YXNfQ29vcmQgaGVpZ2h0LCBmbG9hdCB6bwogCiAg
ICAgdGlsZS0+aW1hZ2UgPSBldmFzX29iamVjdF9pbWFnZV9hZGQoZXZhcyk7CiAKLSAgICBlZSA9
IGVjb3JlX2V2YXNfZWNvcmVfZXZhc19nZXQoZXZhcyk7Ci0gICAgZW5naW5lID0gZWNvcmVfZXZh
c19lbmdpbmVfbmFtZV9nZXQoZWUpOworICAgIGVjb3JlRXZhcyA9IGVjb3JlX2V2YXNfZWNvcmVf
ZXZhc19nZXQoZXZhcyk7CisgICAgZW5naW5lID0gZWNvcmVfZXZhc19lbmdpbmVfbmFtZV9nZXQo
ZWNvcmVFdmFzKTsKICAgICBpZiAoZW5naW5lICYmICFzdHJjbXAoZW5naW5lLCAib3BlbmdsX3gx
MSIpKQogICAgICAgICBldmFzX29iamVjdF9pbWFnZV9jb250ZW50X2hpbnRfc2V0KHRpbGUtPmlt
YWdlLCBFVkFTX0lNQUdFX0NPTlRFTlRfSElOVF9EWU5BTUlDKTsKIApAQCAtMjc5LDIwICsyNzks
MjAgQEAgRXdrX1RpbGUqIGV3a190aWxlX25ldyhFdmFzKiBldmFzLCBFdmFzX0Nvb3JkIHdpZHRo
LCBFdmFzX0Nvb3JkIGhlaWdodCwgZmxvYXQgem8KICAgICB0aWxlLT5zdGF0cy5hcmVhID0gYXJl
YTsKIAogICAgIC8qIHVnbHksIGJ1dCBsZXQncyBhdm9pZCBhdCBhbGwgY29zdHMgaGF2aW5nIHVz
ZXJzIHRvIG1vZGlmeSB0aG9zZSAqLwotICAgIGVjID0gKEV2YXNfQ29vcmQqKSZ0aWxlLT53aWR0
aDsKLSAgICAqZWMgPSB3aWR0aDsKKyAgICBldmFzQ29vcmQgPSAoRXZhc19Db29yZCopJnRpbGUt
PndpZHRoOworICAgICpldmFzQ29vcmQgPSB3aWR0aDsKIAotICAgIGVjID0gKEV2YXNfQ29vcmQq
KSZ0aWxlLT5oZWlnaHQ7Ci0gICAgKmVjID0gaGVpZ2h0OworICAgIGV2YXNDb29yZCA9IChFdmFz
X0Nvb3JkKikmdGlsZS0+aGVpZ2h0OworICAgICpldmFzQ29vcmQgPSBoZWlnaHQ7CiAKLSAgICBl
Y3MgPSAoRXZhc19Db2xvcnNwYWNlKikmdGlsZS0+Y3NwYWNlOwotICAgICplY3MgPSBjb2xvclNw
YWNlOworICAgIGV2YXNDb2xvclNwYWNlID0gKEV2YXNfQ29sb3JzcGFjZSopJnRpbGUtPmNzcGFj
ZTsKKyAgICAqZXZhc0NvbG9yU3BhY2UgPSBjb2xvclNwYWNlOwogCi0gICAgZiA9IChmbG9hdCop
JnRpbGUtPnpvb207Ci0gICAgKmYgPSB6b29tOworICAgIHRpbGVab29tID0gKGZsb2F0KikmdGls
ZS0+em9vbTsKKyAgICAqdGlsZVpvb20gPSB6b29tOwogCi0gICAgcyA9IChzaXplX3QqKSZ0aWxl
LT5ieXRlczsKLSAgICAqcyA9IGJ5dGVzOworICAgIHRpbGVTaXplID0gKHNpemVfdCopJnRpbGUt
PmJ5dGVzOworICAgICp0aWxlU2l6ZSA9IGJ5dGVzOwogCiAgICAgZXZhc19vYmplY3RfaW1hZ2Vf
c2l6ZV9zZXQodGlsZS0+aW1hZ2UsIHRpbGUtPndpZHRoLCB0aWxlLT5oZWlnaHQpOwogICAgIGV2
YXNfb2JqZWN0X2ltYWdlX2NvbG9yc3BhY2Vfc2V0KHRpbGUtPmltYWdlLCB0aWxlLT5jc3BhY2Up
OwpAQCAtNDgwLDcgKzQ4MCw3IEBAIHN0cnVjdCBfRXdrX1RpbGVfVW51c2VkX0NhY2hlX0VudHJ5
IHsKICAgICBFd2tfVGlsZSogdGlsZTsKICAgICBpbnQgd2VpZ2h0OwogICAgIHN0cnVjdCB7Ci0g
ICAgICAgIHZvaWQgKCpjYikodm9pZCogZGF0YSwgRXdrX1RpbGUqIHRpbGUpOworICAgICAgICB2
b2lkICgqY2FsbGJhY2spKHZvaWQqIGRhdGEsIEV3a19UaWxlKiB0aWxlKTsKICAgICAgICAgdm9p
ZCogZGF0YTsKICAgICB9IHRpbGVfZnJlZTsKIH07CkBAIC00OTYsNyArNDk2LDcgQEAgc3RydWN0
IF9Fd2tfVGlsZV9VbnVzZWRfQ2FjaGUgewogICAgICAgICBzaXplX3QgdXNlZDsgLyoqPCBpbiBi
eXRlcywgbWF5YmUgbW9yZSB0aGFuIG1heC4gKi8KICAgICB9IG1lbW9yeTsKICAgICBzdHJ1Y3Qg
ewotICAgICAgICBFdmFzX0Nvb3JkIHgsIHksIHcsIGg7CisgICAgICAgIEV2YXNfQ29vcmQgeCwg
eSwgd2lkdGgsIGhlaWdodDsKICAgICAgICAgZmxvYXQgem9vbTsKICAgICAgICAgRWluYV9Cb29s
IGxvY2tlZDsKICAgICB9IGxvY2tlZDsKQEAgLTU0MCw4ICs1NDAsOCBAQCB2b2lkIGV3a190aWxl
X3VudXNlZF9jYWNoZV9sb2NrX2FyZWEoRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0aWxlVW51c2Vk
Q2FjaGUsIEV2YQogICAgIHRpbGVVbnVzZWRDYWNoZS0+bG9ja2VkLmxvY2tlZCA9IEVJTkFfVFJV
RTsKICAgICB0aWxlVW51c2VkQ2FjaGUtPmxvY2tlZC54ID0geDsKICAgICB0aWxlVW51c2VkQ2Fj
aGUtPmxvY2tlZC55ID0geTsKLSAgICB0aWxlVW51c2VkQ2FjaGUtPmxvY2tlZC53ID0gd2lkdGg7
Ci0gICAgdGlsZVVudXNlZENhY2hlLT5sb2NrZWQuaCA9IGhlaWdodDsKKyAgICB0aWxlVW51c2Vk
Q2FjaGUtPmxvY2tlZC53aWR0aCA9IHdpZHRoOworICAgIHRpbGVVbnVzZWRDYWNoZS0+bG9ja2Vk
LmhlaWdodCA9IGhlaWdodDsKICAgICB0aWxlVW51c2VkQ2FjaGUtPmxvY2tlZC56b29tID0gem9v
bTsKIH0KIApAQCAtNTk0LDcgKzU5NCw3IEBAIHZvaWQgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2Ns
ZWFyKEV3a19UaWxlX1VudXNlZF9DYWNoZSogdGlsZVVudXNlZENhY2hlKQogICAgIHZvaWQqIGl0
ZW07CiAgICAgRUlOQV9MSVNUX0ZSRUUodGlsZVVudXNlZENhY2hlLT5lbnRyaWVzLmxpc3QsIGl0
ZW0pIHsKICAgICAgICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlX0VudHJ5KiBpdHIgPSBzdGF0aWNf
Y2FzdDxFd2tfVGlsZV9VbnVzZWRfQ2FjaGVfRW50cnkqPihpdGVtKTsKLSAgICAgICAgaXRyLT50
aWxlX2ZyZWUuY2IoaXRyLT50aWxlX2ZyZWUuZGF0YSwgaXRyLT50aWxlKTsKKyAgICAgICAgaXRy
LT50aWxlX2ZyZWUuY2FsbGJhY2soaXRyLT50aWxlX2ZyZWUuZGF0YSwgaXRyLT50aWxlKTsKICAg
ICAgICAgZnJlZShpdHIpOwogICAgIH0KIApAQCAtNjUwLDcgKzY1MCw3IEBAIHNpemVfdCBld2tf
dGlsZV91bnVzZWRfY2FjaGVfdXNlZF9nZXQoY29uc3QgRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0
aWxlVW51c2VkQ2FjCiAKIHNpemVfdCBld2tfdGlsZV91bnVzZWRfY2FjaGVfZmx1c2goRXdrX1Rp
bGVfVW51c2VkX0NhY2hlKiB0aWxlVW51c2VkQ2FjaGUsIHNpemVfdCBieXRlcykKIHsKLSAgICBF
aW5hX0xpc3QqIGwsICogbF9uZXh0OworICAgIEVpbmFfTGlzdCogbGlzdCwgKiBsaXN0TmV4dDsK
ICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodGlsZVVudXNlZENhY2hlLCAwKTsK
ICAgICBzaXplX3QgZG9uZTsKICAgICB1bnNpZ25lZCBpbnQgY291bnQ7CkBAIC02NjgsNyArNjY4
LDcgQEAgc2l6ZV90IGV3a190aWxlX3VudXNlZF9jYWNoZV9mbHVzaChFd2tfVGlsZV9VbnVzZWRf
Q2FjaGUqIHRpbGVVbnVzZWRDYWNoZSwgc2l6ZV8KICAgICB2b2lkKiBpdGVtOwogICAgIGRvbmUg
PSAwOwogICAgIGNvdW50ID0gMDsKLSAgICBFSU5BX0xJU1RfRk9SRUFDSF9TQUZFKHRpbGVVbnVz
ZWRDYWNoZS0+ZW50cmllcy5saXN0LCBsLCBsX25leHQsIGl0ZW0pIHsKKyAgICBFSU5BX0xJU1Rf
Rk9SRUFDSF9TQUZFKHRpbGVVbnVzZWRDYWNoZS0+ZW50cmllcy5saXN0LCBsaXN0LCBsaXN0TmV4
dCwgaXRlbSkgewogICAgICAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGVfRW50cnkqIGl0ciA9IHN0
YXRpY19jYXN0PEV3a19UaWxlX1VudXNlZF9DYWNoZV9FbnRyeSo+KGl0ZW0pOwogICAgICAgICBF
d2tfVGlsZSogdGlsZSA9IGl0ci0+dGlsZTsKICAgICAgICAgaWYgKGRvbmUgPiBieXRlcykKQEAg
LTY3NiwxNCArNjc2LDE0IEBAIHNpemVfdCBld2tfdGlsZV91bnVzZWRfY2FjaGVfZmx1c2goRXdr
X1RpbGVfVW51c2VkX0NhY2hlKiB0aWxlVW51c2VkQ2FjaGUsIHNpemVfCiAgICAgICAgIGlmICh0
aWxlVW51c2VkQ2FjaGUtPmxvY2tlZC5sb2NrZWQKICAgICAgICAgICAgICYmIHRpbGUtPnggKyB0
aWxlLT53aWR0aCA+IHRpbGVVbnVzZWRDYWNoZS0+bG9ja2VkLngKICAgICAgICAgICAgICYmIHRp
bGUtPnkgKyB0aWxlLT5oZWlnaHQgPiB0aWxlVW51c2VkQ2FjaGUtPmxvY2tlZC55Ci0gICAgICAg
ICAgICAmJiB0aWxlLT54IDwgdGlsZVVudXNlZENhY2hlLT5sb2NrZWQueCArIHRpbGVVbnVzZWRD
YWNoZS0+bG9ja2VkLncKLSAgICAgICAgICAgICYmIHRpbGUtPnkgPCB0aWxlVW51c2VkQ2FjaGUt
PmxvY2tlZC55ICsgdGlsZVVudXNlZENhY2hlLT5sb2NrZWQuaAorICAgICAgICAgICAgJiYgdGls
ZS0+eCA8IHRpbGVVbnVzZWRDYWNoZS0+bG9ja2VkLnggKyB0aWxlVW51c2VkQ2FjaGUtPmxvY2tl
ZC53aWR0aAorICAgICAgICAgICAgJiYgdGlsZS0+eSA8IHRpbGVVbnVzZWRDYWNoZS0+bG9ja2Vk
LnkgKyB0aWxlVW51c2VkQ2FjaGUtPmxvY2tlZC5oZWlnaHQKICAgICAgICAgICAgICYmIHRpbGUt
Pnpvb20gPT0gdGlsZVVudXNlZENhY2hlLT5sb2NrZWQuem9vbSkgewogICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgIH0KICAgICAgICAgZG9uZSArPSBzaXplb2YoRXdrX1RpbGUpICsgaXRy
LT50aWxlLT5ieXRlczsKLSAgICAgICAgaXRyLT50aWxlX2ZyZWUuY2IoaXRyLT50aWxlX2ZyZWUu
ZGF0YSwgaXRyLT50aWxlKTsKLSAgICAgICAgdGlsZVVudXNlZENhY2hlLT5lbnRyaWVzLmxpc3Qg
PSBlaW5hX2xpc3RfcmVtb3ZlX2xpc3QodGlsZVVudXNlZENhY2hlLT5lbnRyaWVzLmxpc3QsIGwp
OworICAgICAgICBpdHItPnRpbGVfZnJlZS5jYWxsYmFjayhpdHItPnRpbGVfZnJlZS5kYXRhLCBp
dHItPnRpbGUpOworICAgICAgICB0aWxlVW51c2VkQ2FjaGUtPmVudHJpZXMubGlzdCA9IGVpbmFf
bGlzdF9yZW1vdmVfbGlzdCh0aWxlVW51c2VkQ2FjaGUtPmVudHJpZXMubGlzdCwgbGlzdCk7CiAg
ICAgICAgIGZyZWUoaXRyKTsKICAgICAgICAgY291bnQrKzsKICAgICB9CkBAIC03NDMsMzEgKzc0
MywzMSBAQCB2b2lkIGV3a190aWxlX3VudXNlZF9jYWNoZV90aGF3KEV3a19UaWxlX1VudXNlZF9D
YWNoZSogdGlsZVVudXNlZENhY2hlKQogICogZXdrX3RpbGVfdW51c2VkX2NhY2hlX3RpbGVfcHV0
KCkuCiAgKgogICogQHBhcmFtIHRpbGVVbnVzZWRDYWNoZSBjYWNoZSBvZiB1bnVzZWQgdGlsZXMK
LSAqIEBwYXJhbSB0IHRoZSB0aWxlIHRvIGJlIHJlbW92ZWQgZnJvbSBFd2tfVGlsZV9VbnVzZWRf
Q2FjaGUuCisgKiBAcGFyYW0gdGlsZSB0aGUgdGlsZSB0byBiZSByZW1vdmVkIGZyb20gRXdrX1Rp
bGVfVW51c2VkX0NhY2hlLgogICoKICAqIEByZXR1cm4gI0VJTkFfVFJVRSBvbiBzdWNjZXNzLCAj
RUlOQV9GQUxTRSBvdGhlcndpc2UuCiAgKi8KIEVpbmFfQm9vbCBld2tfdGlsZV91bnVzZWRfY2Fj
aGVfdGlsZV9nZXQoRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0aWxlVW51c2VkQ2FjaGUsIEV3a19U
aWxlKiB0aWxlKQogewotICAgIEVpbmFfTGlzdCogZSwgKiBsOworICAgIEVpbmFfTGlzdCogZm91
bmRFbnRyeSwgKml0ZXJhdGVFbnRyeTsKIAogICAgIHZvaWQqIGl0ZW07Ci0gICAgZSA9IDA7Ci0g
ICAgRUlOQV9MSVNUX0ZPUkVBQ0godGlsZVVudXNlZENhY2hlLT5lbnRyaWVzLmxpc3QsIGwsIGl0
ZW0pIHsKKyAgICBmb3VuZEVudHJ5ID0gMDsKKyAgICBFSU5BX0xJU1RfRk9SRUFDSCh0aWxlVW51
c2VkQ2FjaGUtPmVudHJpZXMubGlzdCwgaXRlcmF0ZUVudHJ5LCBpdGVtKSB7CiAgICAgICAgIEV3
a19UaWxlX1VudXNlZF9DYWNoZV9FbnRyeSogZW50cnkgPSBzdGF0aWNfY2FzdDxFd2tfVGlsZV9V
bnVzZWRfQ2FjaGVfRW50cnkqPihpdGVtKTsKICAgICAgICAgaWYgKGVudHJ5LT50aWxlID09IHRp
bGUpIHsKLSAgICAgICAgICAgIGUgPSBsOworICAgICAgICAgICAgZm91bmRFbnRyeSA9IGl0ZXJh
dGVFbnRyeTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQotICAgIGlmICgh
ZSkgeworICAgIGlmICghZm91bmRFbnRyeSkgewogICAgICAgICBFUlIoInRpbGUgJXAgbm90IGZv
dW5kIGluIGNhY2hlICVwIiwgdGlsZSwgdGlsZVVudXNlZENhY2hlKTsKICAgICAgICAgcmV0dXJu
IEVJTkFfRkFMU0U7CiAgICAgfQogCiAgICAgdGlsZVVudXNlZENhY2hlLT5lbnRyaWVzLmNvdW50
LS07CiAgICAgdGlsZVVudXNlZENhY2hlLT5tZW1vcnkudXNlZCAtPSBzaXplb2YoRXdrX1RpbGUp
ICsgdGlsZS0+Ynl0ZXM7Ci0gICAgdGlsZVVudXNlZENhY2hlLT5lbnRyaWVzLmxpc3QgPSBlaW5h
X2xpc3RfcmVtb3ZlX2xpc3QodGlsZVVudXNlZENhY2hlLT5lbnRyaWVzLmxpc3QsIGUpOworICAg
IHRpbGVVbnVzZWRDYWNoZS0+ZW50cmllcy5saXN0ID0gZWluYV9saXN0X3JlbW92ZV9saXN0KHRp
bGVVbnVzZWRDYWNoZS0+ZW50cmllcy5saXN0LCBmb3VuZEVudHJ5KTsKICAgICBmcmVlKGl0ZW0p
OwogCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKQEAgLTc5NSwyOSArNzk1LDI5IEBAIEVpbmFfQm9v
bCBld2tfdGlsZV91bnVzZWRfY2FjaGVfdGlsZV9nZXQoRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0
aWxlVW51c2VkQ2FjaGUsCiAgKgogICogQHNlZSBld2tfdGlsZV91bnVzZWRfY2FjaGVfYXV0b19m
bHVzaCgpCiAgKi8KLUVpbmFfQm9vbCBld2tfdGlsZV91bnVzZWRfY2FjaGVfdGlsZV9wdXQoRXdr
X1RpbGVfVW51c2VkX0NhY2hlKiB0aWxlVW51c2VkQ2FjaGUsIEV3a19UaWxlKiB0aWxlLCB2b2lk
ICgqIHRpbGVfZnJlZV9jYikodm9pZCogZGF0YSwgRXdrX1RpbGUqIHRpbGUpLCBjb25zdCB2b2lk
KiBkYXRhKQorRWluYV9Cb29sIGV3a190aWxlX3VudXNlZF9jYWNoZV90aWxlX3B1dChFd2tfVGls
ZV9VbnVzZWRfQ2FjaGUqIHRpbGVVbnVzZWRDYWNoZSwgRXdrX1RpbGUqIHRpbGUsIHZvaWQgKCog
dGlsZUZyZWVDYikodm9pZCogZGF0YSwgRXdrX1RpbGUqIHRpbGUpLCBjb25zdCB2b2lkKiBkYXRh
KQogewotICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZV9FbnRyeSogdWNlOworICAgIEV3a19UaWxl
X1VudXNlZF9DYWNoZV9FbnRyeSogdW51c2VkQ2FjaGVFbnRyeTsKIAogICAgIGlmICh0aWxlLT52
aXNpYmxlKSB7CiAgICAgICAgIEVSUigidGlsZT0lcCBpcyBub3QgdW51c2VkICh2aXNpYmxlPSVk
KSIsIHRpbGUsIHRpbGUtPnZpc2libGUpOwogICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKICAg
ICB9CiAKLSAgICB1Y2UgPSBzdGF0aWNfY2FzdDxFd2tfVGlsZV9VbnVzZWRfQ2FjaGVfRW50cnkq
PihtYWxsb2Moc2l6ZW9mKEV3a19UaWxlX1VudXNlZF9DYWNoZV9FbnRyeSkpKTsKLSAgICBpZiAo
IXVjZSkKKyAgICB1bnVzZWRDYWNoZUVudHJ5ID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGVfVW51c2Vk
X0NhY2hlX0VudHJ5Kj4obWFsbG9jKHNpemVvZihFd2tfVGlsZV9VbnVzZWRfQ2FjaGVfRW50cnkp
KSk7CisgICAgaWYgKCF1bnVzZWRDYWNoZUVudHJ5KQogICAgICAgICByZXR1cm4gRUlOQV9GQUxT
RTsKIAotICAgIHRpbGVVbnVzZWRDYWNoZS0+ZW50cmllcy5saXN0ID0gZWluYV9saXN0X2FwcGVu
ZCh0aWxlVW51c2VkQ2FjaGUtPmVudHJpZXMubGlzdCwgdWNlKTsKKyAgICB0aWxlVW51c2VkQ2Fj
aGUtPmVudHJpZXMubGlzdCA9IGVpbmFfbGlzdF9hcHBlbmQodGlsZVVudXNlZENhY2hlLT5lbnRy
aWVzLmxpc3QsIHVudXNlZENhY2hlRW50cnkpOwogICAgIGlmIChlaW5hX2Vycm9yX2dldCgpKSB7
CiAgICAgICAgIEVSUigiTGlzdCBhbGxvY2F0aW9uIGZhaWxlZCIpOwogICAgICAgICByZXR1cm4g
RUlOQV9GQUxTRTsKICAgICB9CiAKLSAgICB1Y2UtPnRpbGUgPSB0aWxlOwotICAgIHVjZS0+d2Vp
Z2h0ID0gMDsgLyogY2FsY3VsYXRlZCBqdXN0IGJlZm9yZSBzb3J0ICovCi0gICAgdWNlLT50aWxl
X2ZyZWUuY2IgPSB0aWxlX2ZyZWVfY2I7Ci0gICAgdWNlLT50aWxlX2ZyZWUuZGF0YSA9ICh2b2lk
KilkYXRhOworICAgIHVudXNlZENhY2hlRW50cnktPnRpbGUgPSB0aWxlOworICAgIHVudXNlZENh
Y2hlRW50cnktPndlaWdodCA9IDA7IC8qIGNhbGN1bGF0ZWQganVzdCBiZWZvcmUgc29ydCAqLwor
ICAgIHVudXNlZENhY2hlRW50cnktPnRpbGVfZnJlZS5jYWxsYmFjayA9IHRpbGVGcmVlQ2I7Cisg
ICAgdW51c2VkQ2FjaGVFbnRyeS0+dGlsZV9mcmVlLmRhdGEgPSAodm9pZCopZGF0YTsKIAogICAg
IHRpbGVVbnVzZWRDYWNoZS0+ZW50cmllcy5jb3VudCsrOwogICAgIHRpbGVVbnVzZWRDYWNoZS0+
bWVtb3J5LnVzZWQgKz0gc2l6ZW9mKEV3a19UaWxlKSArIHRpbGUtPmJ5dGVzOwpAQCAtODI4LDEz
ICs4MjgsMTMgQEAgRWluYV9Cb29sIGV3a190aWxlX3VudXNlZF9jYWNoZV90aWxlX3B1dChFd2tf
VGlsZV9VbnVzZWRfQ2FjaGUqIHRpbGVVbnVzZWRDYWNoZSwKIHZvaWQgZXdrX3RpbGVfdW51c2Vk
X2NhY2hlX2RiZyhjb25zdCBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHRpbGVVbnVzZWRDYWNoZSkK
IHsKICAgICB2b2lkKiBpdGVtOwotICAgIEVpbmFfTGlzdCogbDsKKyAgICBFaW5hX0xpc3QqIGxp
c3Q7CiAgICAgaW50IGNvdW50ID0gMDsKICAgICBwcmludGYoIkNhY2hlIG9mIHVudXNlZCB0aWxl
czogZW50cmllczogJXp1LyV6dSwgbWVtb3J5OiAlenUvJXp1XG4iLAogICAgICAgICAgICB0aWxl
VW51c2VkQ2FjaGUtPmVudHJpZXMuY291bnQsIHRpbGVVbnVzZWRDYWNoZS0+ZW50cmllcy5hbGxv
Y2F0ZWQsCiAgICAgICAgICAgIHRpbGVVbnVzZWRDYWNoZS0+bWVtb3J5LnVzZWQsIHRpbGVVbnVz
ZWRDYWNoZS0+bWVtb3J5Lm1heCk7CiAKLSAgICBFSU5BX0xJU1RfRk9SRUFDSCh0aWxlVW51c2Vk
Q2FjaGUtPmVudHJpZXMubGlzdCwgbCwgaXRlbSkgeworICAgIEVJTkFfTElTVF9GT1JFQUNIKHRp
bGVVbnVzZWRDYWNoZS0+ZW50cmllcy5saXN0LCBsaXN0LCBpdGVtKSB7CiAgICAgICAgIGNvbnN0
IEV3a19UaWxlKiB0aWxlID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGVfVW51c2VkX0NhY2hlX0VudHJ5
Kj4oaXRlbSktPnRpbGU7CiAgICAgICAgIHByaW50ZigiIFslM2x1LCUzbHUgKyAlZHglZCBAICUw
LjNmXSVjIiwKICAgICAgICAgICAgICAgIHRpbGUtPmNvbCwgdGlsZS0+cm93LCB0aWxlLT53aWR0
aCwgdGlsZS0+aGVpZ2h0LCB0aWxlLT56b29tLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9l
ZmwvZXdrL2V3a192aWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5jcHAK
aW5kZXggYjk0ZjA2OWJjNjYzNThjOTlkZmVlYWE3Y2JmZjI4YWExNmE1YTM4YS4uODRlNDk1MTQ4
YzgzN2RhN2FiNzZmZTgxOGJiNWIxOTllMWMzNGFmMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9lZmwvZXdrL2V3a192aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3Zp
ZXcuY3BwCkBAIC05MCwxNyArOTAsMTcgQEAgc3RhdGljIGNvbnN0IHNpemVfdCBFV0tfVklFV19T
Q1JPTExTX1NJWkVfTUFYX0ZSRUUgPSAzMjsKICAqLwogc3RydWN0IF9Fd2tfVmlld19Qcml2YXRl
X0RhdGEgewogICAgIFdlYkNvcmU6OlBhZ2UqIHBhZ2U7Ci0gICAgV2ViQ29yZTo6U2V0dGluZ3Mq
IHBhZ2Vfc2V0dGluZ3M7Ci0gICAgV2ViQ29yZTo6RnJhbWUqIG1haW5fZnJhbWU7Ci0gICAgV2Vi
Q29yZTo6Vmlld3BvcnRBcmd1bWVudHMgdmlld3BvcnRfYXJndW1lbnRzOworICAgIFdlYkNvcmU6
OlNldHRpbmdzKiBwYWdlU2V0dGluZ3M7CisgICAgV2ViQ29yZTo6RnJhbWUqIG1haW5GcmFtZTsK
KyAgICBXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50cyB2aWV3cG9ydEFyZ3VtZW50czsKICAgICBF
d2tfSGlzdG9yeSogaGlzdG9yeTsKICAgICBzdHJ1Y3QgewogICAgICAgICB2b2lkKiBjb250ZXh0
OwogICAgICAgICBFd2tfVmlld19SZXNvdXJjZV9IYW5kbGVyX0NiIGZ1bmN0aW9uOwotICAgIH0g
Y3VzdG9tX3Jlc291cmNlX2hhbmRsZXI7CisgICAgfSBjdXN0b21SZXNvdXJjZUhhbmRsZXI7CiAg
ICAgc3RydWN0IHsKICAgICAgICAgRXdrX01lbnUgbWVudTsKLSAgICAgICAgV2ViQ29yZTo6UG9w
dXBNZW51Q2xpZW50KiBtZW51X2NsaWVudDsKKyAgICAgICAgV2ViQ29yZTo6UG9wdXBNZW51Q2xp
ZW50KiBtZW51Q2xpZW50OwogICAgIH0gcG9wdXA7CiAgICAgc3RydWN0IHsKICAgICAgICAgRWlu
YV9SZWN0YW5nbGUqIGFycmF5OwpAQCAtMTE0LDUwICsxMTQsNTAgQEAgc3RydWN0IF9Fd2tfVmll
d19Qcml2YXRlX0RhdGEgewogICAgIH0gc2Nyb2xsczsKICAgICB1bnNpZ25lZCBpbnQgaW1oOyAv
Kio8IGlucHV0IG1ldGhvZCBoaW50cyAqLwogICAgIHN0cnVjdCB7Ci0gICAgICAgIEVpbmFfQm9v
bCB2aWV3X2NsZWFyZWQgOiAxOwotICAgICAgICBFaW5hX0Jvb2wgbmVlZF90b3VjaF9ldmVudHMg
OiAxOworICAgICAgICBFaW5hX0Jvb2wgdmlld0NsZWFyZWQgOiAxOworICAgICAgICBFaW5hX0Jv
b2wgbmVlZFRvdWNoRXZlbnRzIDogMTsKICAgICB9IGZsYWdzOwogICAgIHN0cnVjdCB7Ci0gICAg
ICAgIGNvbnN0IGNoYXIqIHVzZXJfYWdlbnQ7Ci0gICAgICAgIGNvbnN0IGNoYXIqIHVzZXJfc3R5
bGVzaGVldDsKLSAgICAgICAgY29uc3QgY2hhciogZW5jb2RpbmdfZGVmYXVsdDsKLSAgICAgICAg
Y29uc3QgY2hhciogZW5jb2RpbmdfY3VzdG9tOworICAgICAgICBjb25zdCBjaGFyKiB1c2VyQWdl
bnQ7CisgICAgICAgIGNvbnN0IGNoYXIqIHVzZXJTdHlsZXNoZWV0OworICAgICAgICBjb25zdCBj
aGFyKiBlbmNvZGluZ0RlZmF1bHQ7CisgICAgICAgIGNvbnN0IGNoYXIqIGVuY29kaW5nQ3VzdG9t
OwogICAgICAgICBjb25zdCBjaGFyKiB0aGVtZTsKLSAgICAgICAgY29uc3QgY2hhciogbG9jYWxf
c3RvcmFnZV9kYXRhYmFzZV9wYXRoOwotICAgICAgICBpbnQgZm9udF9taW5pbXVtX3NpemU7Ci0g
ICAgICAgIGludCBmb250X21pbmltdW1fbG9naWNhbF9zaXplOwotICAgICAgICBpbnQgZm9udF9k
ZWZhdWx0X3NpemU7Ci0gICAgICAgIGludCBmb250X21vbm9zcGFjZV9zaXplOwotICAgICAgICBj
b25zdCBjaGFyKiBmb250X3N0YW5kYXJkOwotICAgICAgICBjb25zdCBjaGFyKiBmb250X2N1cnNp
dmU7Ci0gICAgICAgIGNvbnN0IGNoYXIqIGZvbnRfbW9ub3NwYWNlOwotICAgICAgICBjb25zdCBj
aGFyKiBmb250X2ZhbnRhc3k7Ci0gICAgICAgIGNvbnN0IGNoYXIqIGZvbnRfc2VyaWY7Ci0gICAg
ICAgIGNvbnN0IGNoYXIqIGZvbnRfc2Fuc19zZXJpZjsKLSAgICAgICAgRWluYV9Cb29sIGF1dG9f
bG9hZF9pbWFnZXMgOiAxOwotICAgICAgICBFaW5hX0Jvb2wgYXV0b19zaHJpbmtfaW1hZ2VzIDog
MTsKLSAgICAgICAgRWluYV9Cb29sIGVuYWJsZV9hdXRvX3Jlc2l6ZV93aW5kb3cgOiAxOwotICAg
ICAgICBFaW5hX0Jvb2wgZW5hYmxlX2RldmVsb3Blcl9leHRyYXMgOiAxOwotICAgICAgICBFaW5h
X0Jvb2wgZW5hYmxlX3NjcmlwdHMgOiAxOwotICAgICAgICBFaW5hX0Jvb2wgZW5hYmxlX3BsdWdp
bnMgOiAxOwotICAgICAgICBFaW5hX0Jvb2wgZW5hYmxlX2ZyYW1lX2ZsYXR0ZW5pbmcgOiAxOwot
ICAgICAgICBFaW5hX0Jvb2wgZW5jb2RpbmdfZGV0ZWN0b3IgOiAxOwotICAgICAgICBFaW5hX0Jv
b2wgc2NyaXB0c193aW5kb3dfb3BlbiA6IDE7Ci0gICAgICAgIEVpbmFfQm9vbCBzY3JpcHRzX2Nh
bl9jbG9zZV93aW5kb3dzIDogMTsKLSAgICAgICAgRWluYV9Cb29sIHJlc2l6YWJsZV90ZXh0YXJl
YXMgOiAxOwotICAgICAgICBFaW5hX0Jvb2wgcHJpdmF0ZV9icm93c2luZyA6IDE7Ci0gICAgICAg
IEVpbmFfQm9vbCBjYXJldF9icm93c2luZyA6IDE7Ci0gICAgICAgIEVpbmFfQm9vbCBzcGF0aWFs
X25hdmlnYXRpb24gOiAxOwotICAgICAgICBFaW5hX0Jvb2wgbG9jYWxfc3RvcmFnZSA6IDE7Ci0g
ICAgICAgIEVpbmFfQm9vbCBvZmZsaW5lX2FwcF9jYWNoZSA6IDE7Ci0gICAgICAgIEVpbmFfQm9v
bCBwYWdlX2NhY2hlIDogMTsKKyAgICAgICAgY29uc3QgY2hhciogbG9jYWxTdG9yYWdlRGF0YWJh
c2VQYXRoOworICAgICAgICBpbnQgZm9udE1pbmltdW1TaXplOworICAgICAgICBpbnQgZm9udE1p
bmltdW1Mb2dpY2FsU2l6ZTsKKyAgICAgICAgaW50IGZvbnREZWZhdWx0U2l6ZTsKKyAgICAgICAg
aW50IGZvbnRNb25vc3BhY2VTaXplOworICAgICAgICBjb25zdCBjaGFyKiBmb250U3RhbmRhcmQ7
CisgICAgICAgIGNvbnN0IGNoYXIqIGZvbnRDdXJzaXZlOworICAgICAgICBjb25zdCBjaGFyKiBm
b250TW9ub3NwYWNlOworICAgICAgICBjb25zdCBjaGFyKiBmb250RmFudGFzeTsKKyAgICAgICAg
Y29uc3QgY2hhciogZm9udFNlcmlmOworICAgICAgICBjb25zdCBjaGFyKiBmb250U2Fuc1Nlcmlm
OworICAgICAgICBFaW5hX0Jvb2wgYXV0b0xvYWRJbWFnZXMgOiAxOworICAgICAgICBFaW5hX0Jv
b2wgYXV0b1Nocmlua0ltYWdlcyA6IDE7CisgICAgICAgIEVpbmFfQm9vbCBlbmFibGVBdXRvUmVz
aXplV2luZG93IDogMTsKKyAgICAgICAgRWluYV9Cb29sIGVuYWJsZURldmVsb3BlckV4dHJhcyA6
IDE7CisgICAgICAgIEVpbmFfQm9vbCBlbmFibGVTY3JpcHRzIDogMTsKKyAgICAgICAgRWluYV9C
b29sIGVuYWJsZVBsdWdpbnMgOiAxOworICAgICAgICBFaW5hX0Jvb2wgZW5hYmxlRnJhbWVGbGF0
dGVuaW5nIDogMTsKKyAgICAgICAgRWluYV9Cb29sIGVuY29kaW5nRGV0ZWN0b3IgOiAxOworICAg
ICAgICBFaW5hX0Jvb2wgc2NyaXB0c1dpbmRvd09wZW4gOiAxOworICAgICAgICBFaW5hX0Jvb2wg
c2NyaXB0c0NhbkNsb3NlV2luZG93cyA6IDE7CisgICAgICAgIEVpbmFfQm9vbCByZXNpemFibGVU
ZXh0YXJlYXMgOiAxOworICAgICAgICBFaW5hX0Jvb2wgcHJpdmF0ZUJyb3dzaW5nIDogMTsKKyAg
ICAgICAgRWluYV9Cb29sIGNhcmV0QnJvd3NpbmcgOiAxOworICAgICAgICBFaW5hX0Jvb2wgc3Bh
dGlhbE5hdmlnYXRpb24gOiAxOworICAgICAgICBFaW5hX0Jvb2wgbG9jYWxTdG9yYWdlIDogMTsK
KyAgICAgICAgRWluYV9Cb29sIG9mZmxpbmVBcHBDYWNoZSA6IDE7CisgICAgICAgIEVpbmFfQm9v
bCBwYWdlQ2FjaGUgOiAxOwogICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgZmxvYXQgbWlu
X3NjYWxlOwotICAgICAgICAgICAgZmxvYXQgbWF4X3NjYWxlOwotICAgICAgICAgICAgRWluYV9C
b29sIHVzZXJfc2NhbGFibGUgOiAxOwotICAgICAgICB9IHpvb21fcmFuZ2U7Ci0gICAgICAgIGZs
b2F0IGRldmljZV9waXhlbF9yYXRpbzsKLSAgICAgICAgZG91YmxlIGRvbV90aW1lcl9pbnRlcnZh
bDsKKyAgICAgICAgICAgIGZsb2F0IG1pblNjYWxlOworICAgICAgICAgICAgZmxvYXQgbWF4U2Nh
bGU7CisgICAgICAgICAgICBFaW5hX0Jvb2wgdXNlclNjYWxhYmxlIDogMTsKKyAgICAgICAgfSB6
b29tUmFuZ2U7CisgICAgICAgIGZsb2F0IGRldmljZVBpeGVsUmF0aW87CisgICAgICAgIGRvdWJs
ZSBkb21UaW1lckludGVydmFsOwogICAgIH0gc2V0dGluZ3M7CiAgICAgc3RydWN0IHsKICAgICAg
ICAgc3RydWN0IHsKQEAgLTE3NCw3ICsxNzQsNyBAQCBzdHJ1Y3QgX0V3a19WaWV3X1ByaXZhdGVf
RGF0YSB7CiAgICAgICAgICAgICBFdmFzX0Nvb3JkIHgsIHk7CiAgICAgICAgIH0gY2VudGVyOwog
ICAgICAgICBFY29yZV9BbmltYXRvciogYW5pbWF0b3I7Ci0gICAgfSBhbmltYXRlZF96b29tOwor
ICAgIH0gYW5pbWF0ZWRab29tOwogfTsKIAogI2lmbmRlZiBFV0tfVFlQRV9DSEVDSwpAQCAtMjE5
LDE0ICsyMTksMTQgQEAgc3RydWN0IF9Fd2tfVmlld19Qcml2YXRlX0RhdGEgewogICAgICAgICBy
ZXR1cm4gX19WQV9BUkdTX187ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgfQog
Ci0jZGVmaW5lIEVXS19WSUVXX1BSSVZfR0VUKHNkLCBwdHIpICAgICAgICAgICAgICBcCi0gICAg
RXdrX1ZpZXdfUHJpdmF0ZV9EYXRhICpwdHIgPSBzZC0+X3ByaXYKKyNkZWZpbmUgRVdLX1ZJRVdf
UFJJVl9HRVQoc21hcnREYXRhLCBwdHIpICAgICAgICAgICAgICBcCisgICAgRXdrX1ZpZXdfUHJp
dmF0ZV9EYXRhICpwdHIgPSBzbWFydERhdGEtPl9wcml2CiAKLSNkZWZpbmUgRVdLX1ZJRVdfUFJJ
Vl9HRVRfT1JfUkVUVVJOKHNkLCBwdHIsIC4uLikgICAgICAgICAgICAgICBcCi0gICAgRVdLX1ZJ
RVdfUFJJVl9HRVQoc2QsIHB0cik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
I2RlZmluZSBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwdHIsIC4uLikg
ICAgICAgICAgICAgICBcCisgICAgRVdLX1ZJRVdfUFJJVl9HRVQoc21hcnREYXRhLCBwdHIpOyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBpZiAoIXB0cikgeyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIENSSVRJ
Q0FMKCJubyBwcml2YXRlIGRhdGEgZm9yIG9iamVjdCAlcCAoJXMpIiwgICAgICAgICAgXAotICAg
ICAgICAgICAgICAgICBzZC0+c2VsZiwgZXZhc19vYmplY3RfdHlwZV9nZXQoc2QtPnNlbGYpKTsg
ICAgIFwKKyAgICAgICAgICAgICAgICAgc21hcnREYXRhLT5zZWxmLCBldmFzX29iamVjdF90eXBl
X2dldChzbWFydERhdGEtPnNlbGYpKTsgICAgIFwKICAgICAgICAgcmV0dXJuIF9fVkFfQVJHU19f
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgfQogCkBAIC0yNTIs
NyArMjUyLDcgQEAgc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfcmVwYWludHNfcmVzaXplKEV3
a19WaWV3X1ByaXZhdGVfRGF0YSogcHJpdiwgc2l6ZV90IHMKIAogc3RhdGljIHZvaWQgX2V3a192
aWV3X3JlcGFpbnRfYWRkKEV3a19WaWV3X1ByaXZhdGVfRGF0YSogcHJpdiwgRXZhc19Db29yZCB4
LCBFdmFzX0Nvb3JkIHksIEV2YXNfQ29vcmQgd2lkdGgsIEV2YXNfQ29vcmQgaGVpZ2h0KQogewot
ICAgIEVpbmFfUmVjdGFuZ2xlKiByOworICAgIEVpbmFfUmVjdGFuZ2xlKiByZWN0OwogCiAgICAg
Ly8gZnByaW50ZihzdGRlcnIsICI+Pj4gcmVwYWludCByZXF1ZXN0ZWQ6ICVkLCVkKyVkeCVkXG4i
LCB4LCB5LCB3LCBoKTsKICAgICBpZiAocHJpdi0+cmVwYWludHMuYWxsb2NhdGVkID09IHByaXYt
PnJlcGFpbnRzLmNvdW50KSB7CkBAIC0yNjUsMTMgKzI2NSwxMyBAQCBzdGF0aWMgdm9pZCBfZXdr
X3ZpZXdfcmVwYWludF9hZGQoRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKiBwcml2LCBFdmFzX0Nvb3Jk
IHgsIEV2YQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHIgPSBwcml2LT5yZXBh
aW50cy5hcnJheSArIHByaXYtPnJlcGFpbnRzLmNvdW50OworICAgIHJlY3QgPSBwcml2LT5yZXBh
aW50cy5hcnJheSArIHByaXYtPnJlcGFpbnRzLmNvdW50OwogICAgIHByaXYtPnJlcGFpbnRzLmNv
dW50Kys7CiAKLSAgICByLT54ID0geDsKLSAgICByLT55ID0geTsKLSAgICByLT53ID0gd2lkdGg7
Ci0gICAgci0+aCA9IGhlaWdodDsKKyAgICByZWN0LT54ID0geDsKKyAgICByZWN0LT55ID0geTsK
KyAgICByZWN0LT53ID0gd2lkdGg7CisgICAgcmVjdC0+aCA9IGhlaWdodDsKIAogICAgIERCRygi
YWRkIHJlcGFpbnQgJWQsICVkKyVkeCVkIiwgeCwgeSwgd2lkdGgsIGhlaWdodCk7CiB9CkBAIC0y
OTYsMjkgKzI5NiwyOSBAQCBzdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19zY3JvbGxzX3Jlc2l6
ZShFd2tfVmlld19Qcml2YXRlX0RhdGEqIHByaXYsIHNpemVfdCBzaQogICAgIHJldHVybiBFSU5B
X1RSVUU7CiB9CiAKLXN0YXRpYyB2b2lkIF9ld2tfdmlld19zY3JvbGxfYWRkKEV3a19WaWV3X1By
aXZhdGVfRGF0YSogcHJpdiwgRXZhc19Db29yZCBkeCwgRXZhc19Db29yZCBkeSwgRXZhc19Db29y
ZCB4LCBFdmFzX0Nvb3JkIHksIEV2YXNfQ29vcmQgd2lkdGgsIEV2YXNfQ29vcmQgaGVpZ2h0LCBF
aW5hX0Jvb2wgbWFpblNjcm9sbCkKK3N0YXRpYyB2b2lkIF9ld2tfdmlld19zY3JvbGxfYWRkKEV3
a19WaWV3X1ByaXZhdGVfRGF0YSogcHJpdiwgRXZhc19Db29yZCBkZWx0YVgsIEV2YXNfQ29vcmQg
ZGVsdGFZLCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwgRXZhc19Db29yZCB3aWR0aCwgRXZh
c19Db29yZCBoZWlnaHQsIEVpbmFfQm9vbCBtYWluU2Nyb2xsKQogewotICAgIEV3a19TY3JvbGxf
UmVxdWVzdCogcjsKLSAgICBFd2tfU2Nyb2xsX1JlcXVlc3QqIHJfZW5kOworICAgIEV3a19TY3Jv
bGxfUmVxdWVzdCogcmVjdDsKKyAgICBFd2tfU2Nyb2xsX1JlcXVlc3QqIHJlY3RfZW5kOwogICAg
IEV2YXNfQ29vcmQgeDIgPSB4ICsgd2lkdGgsIHkyID0geSArIGhlaWdodDsKIAotICAgIHIgPSBw
cml2LT5zY3JvbGxzLmFycmF5OwotICAgIHJfZW5kID0gciArIHByaXYtPnNjcm9sbHMuY291bnQ7
Ci0gICAgZm9yICg7IHIgPCByX2VuZDsgcisrKSB7Ci0gICAgICAgIGlmIChyLT54ID09IHggJiYg
ci0+eSA9PSB5ICYmIHItPncgPT0gd2lkdGggJiYgci0+aCA9PSBoZWlnaHQpIHsKKyAgICByZWN0
ID0gcHJpdi0+c2Nyb2xscy5hcnJheTsKKyAgICByZWN0X2VuZCA9IHJlY3QgKyBwcml2LT5zY3Jv
bGxzLmNvdW50OworICAgIGZvciAoOyByZWN0IDwgcmVjdF9lbmQ7IHJlY3QrKykgeworICAgICAg
ICBpZiAocmVjdC0+eCA9PSB4ICYmIHJlY3QtPnkgPT0geSAmJiByZWN0LT53ID09IHdpZHRoICYm
IHJlY3QtPmggPT0gaGVpZ2h0KSB7CiAgICAgICAgICAgICBEQkcoInJlZ2lvbiBhbHJlYWR5IHNj
cm9sbGVkICVkLCVkKyVkeCVkICUrMDNkLCUrMDNkIGFkZCAiCiAgICAgICAgICAgICAgICAgIiUr
MDNkLCUrMDNkIiwKLSAgICAgICAgICAgICAgICByLT54LCByLT55LCByLT53LCByLT5oLCByLT5k
eCwgci0+ZHksIGR4LCBkeSk7Ci0gICAgICAgICAgICByLT5keCArPSBkeDsKLSAgICAgICAgICAg
IHItPmR5ICs9IGR5OworICAgICAgICAgICAgICAgIHJlY3QtPngsIHJlY3QtPnksIHJlY3QtPncs
IHJlY3QtPmgsIHJlY3QtPmR4LCByZWN0LT5keSwgZGVsdGFYLCBkZWx0YVkpOworICAgICAgICAg
ICAgcmVjdC0+ZHggKz0gZGVsdGFYOworICAgICAgICAgICAgcmVjdC0+ZHkgKz0gZGVsdGFZOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGlmICgoeCA8PSByLT54ICYm
IHgyID49IHItPngyKSAmJiAoeSA8PSByLT55ICYmIHkyID49IHItPnkyKSkgeworICAgICAgICBp
ZiAoKHggPD0gcmVjdC0+eCAmJiB4MiA+PSByZWN0LT54MikgJiYgKHkgPD0gcmVjdC0+eSAmJiB5
MiA+PSByZWN0LT55MikpIHsKICAgICAgICAgICAgIERCRygib2xkIHZpZXdwb3J0ICglZCwlZCsl
ZHglZCAlKzAzZCwlKzAzZCkgd2FzIHNjcm9sbGVkIGl0c2VsZiwgIgogICAgICAgICAgICAgICAg
ICJhZGQgJSswM2QsJSswM2QiLAotICAgICAgICAgICAgICAgIHItPngsIHItPnksIHItPncsIHIt
PmgsIHItPmR4LCByLT5keSwgZHgsIGR5KTsKLSAgICAgICAgICAgIHItPnggKz0gZHg7Ci0gICAg
ICAgICAgICByLT55ICs9IGR5OworICAgICAgICAgICAgICAgIHJlY3QtPngsIHJlY3QtPnksIHJl
Y3QtPncsIHJlY3QtPmgsIHJlY3QtPmR4LCByZWN0LT5keSwgZGVsdGFYLCBkZWx0YVkpOworICAg
ICAgICAgICAgcmVjdC0+eCArPSBkZWx0YVg7CisgICAgICAgICAgICByZWN0LT55ICs9IGRlbHRh
WTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMzMyLDE5ICszMzIsMTkgQEAgc3RhdGljIHZvaWQg
X2V3a192aWV3X3Njcm9sbF9hZGQoRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKiBwcml2LCBFdmFzX0Nv
b3JkIGR4LCBFdmEKICAgICAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICByID0gcHJpdi0+
c2Nyb2xscy5hcnJheSArIHByaXYtPnNjcm9sbHMuY291bnQ7CisgICAgcmVjdCA9IHByaXYtPnNj
cm9sbHMuYXJyYXkgKyBwcml2LT5zY3JvbGxzLmNvdW50OwogICAgIHByaXYtPnNjcm9sbHMuY291
bnQrKzsKIAotICAgIHItPnggPSB4OwotICAgIHItPnkgPSB5OwotICAgIHItPncgPSB3aWR0aDsK
LSAgICByLT5oID0gaGVpZ2h0OwotICAgIHItPngyID0geDI7Ci0gICAgci0+eTIgPSB5MjsKLSAg
ICByLT5keCA9IGR4OwotICAgIHItPmR5ID0gZHk7Ci0gICAgci0+bWFpbl9zY3JvbGwgPSBtYWlu
U2Nyb2xsOwotICAgIERCRygiYWRkIHNjcm9sbCBpbiByZWdpb246ICVkLCAlZCslZHglZCAlKzAz
ZCwgJSswM2QiLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBkeCwgZHkpOworICAgIHJlY3QtPnggPSB4
OworICAgIHJlY3QtPnkgPSB5OworICAgIHJlY3QtPncgPSB3aWR0aDsKKyAgICByZWN0LT5oID0g
aGVpZ2h0OworICAgIHJlY3QtPngyID0geDI7CisgICAgcmVjdC0+eTIgPSB5MjsKKyAgICByZWN0
LT5keCA9IGRlbHRhWDsKKyAgICByZWN0LT5keSA9IGRlbHRhWTsKKyAgICByZWN0LT5tYWluX3Nj
cm9sbCA9IG1haW5TY3JvbGw7CisgICAgREJHKCJhZGQgc2Nyb2xsIGluIHJlZ2lvbjogJWQsICVk
KyVkeCVkICUrMDNkLCAlKzAzZCIsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGRlbHRhWCwgZGVsdGFZ
KTsKIAogICAgIEVpbmFfUmVjdGFuZ2xlKiBwcjsKICAgICBFaW5hX1JlY3RhbmdsZSogcHJfZW5k
OwpAQCAtMzUzLDggKzM1Myw4IEBAIHN0YXRpYyB2b2lkIF9ld2tfdmlld19zY3JvbGxfYWRkKEV3
a19WaWV3X1ByaXZhdGVfRGF0YSogcHJpdiwgRXZhc19Db29yZCBkeCwgRXZhCiAgICAgY291bnQg
PSBwcml2LT5yZXBhaW50cy5jb3VudDsKICAgICBwcl9lbmQgPSBwciArIGNvdW50OwogICAgIGZv
ciAoOyBwciA8IHByX2VuZDsgcHIrKykgewotICAgICAgICBwci0+eCArPSBkeDsKLSAgICAgICAg
cHItPnkgKz0gZHk7CisgICAgICAgIHByLT54ICs9IGRlbHRhWDsKKyAgICAgICAgcHItPnkgKz0g
ZGVsdGFZOwogICAgIH0KIH0KIApAQCAtMzgyLDEyICszODIsMTIgQEAgc3RhdGljIEVpbmFfQm9v
bCBfZXdrX3ZpZXdfc21hcnRfZm9jdXNfaW4oRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRh
KQogc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfc21hcnRfZm9jdXNfb3V0KEV3a19WaWV3X1Nt
YXJ0X0RhdGEqIHNtYXJ0RGF0YSkKIHsKICAgICBFV0tfVklFV19QUklWX0dFVChzbWFydERhdGEs
IHByaXYpOwotICAgIFdlYkNvcmU6OkZvY3VzQ29udHJvbGxlciogZmMgPSBwcml2LT5wYWdlLT5m
b2N1c0NvbnRyb2xsZXIoKTsKLSAgICBEQkcoImV3a1ZpZXc9JXAsIGZjPSVwIiwgc21hcnREYXRh
LT5zZWxmLCBmYyk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGZjLCBFSU5B
X0ZBTFNFKTsKKyAgICBXZWJDb3JlOjpGb2N1c0NvbnRyb2xsZXIqIGZvY3VzQ29udHJvbGxlciA9
IHByaXYtPnBhZ2UtPmZvY3VzQ29udHJvbGxlcigpOworICAgIERCRygiZXdrVmlldz0lcCwgZmM9
JXAiLCBzbWFydERhdGEtPnNlbGYsIGZvY3VzQ29udHJvbGxlcik7CisgICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk5fVkFMKGZvY3VzQ29udHJvbGxlciwgRUlOQV9GQUxTRSk7CiAKLSAgICBm
Yy0+c2V0QWN0aXZlKGZhbHNlKTsKLSAgICBmYy0+c2V0Rm9jdXNlZChmYWxzZSk7CisgICAgZm9j
dXNDb250cm9sbGVyLT5zZXRBY3RpdmUoZmFsc2UpOworICAgIGZvY3VzQ29udHJvbGxlci0+c2V0
Rm9jdXNlZChmYWxzZSk7CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIApAQCAtNDU4LDk3ICs0
NTgsOTcgQEAgc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfc21hcnRfc2hvdWxkX2ludGVycnVw
dF9qYXZhc2NyaXB0KEV3a19WaWV3X1NtYXJ0X0RhdGEKIHN0YXRpYyBFaW5hX0Jvb2wgX2V3a192
aWV3X3NtYXJ0X3J1bl9qYXZhc2NyaXB0X3Byb21wdChFd2tfVmlld19TbWFydF9EYXRhKiBzbWFy
dERhdGEsIEV2YXNfT2JqZWN0KiBmcmFtZSwgY29uc3QgY2hhciogbWVzc2FnZSwgY29uc3QgY2hh
ciogZGVmYXVsdFZhbHVlLCBjaGFyKiogdmFsdWUpCiB7CiAgICAgKnZhbHVlID0gc3RyZHVwKCJ0
ZXN0Iik7Ci0gICAgRWluYV9Cb29sIHJldCA9IEVJTkFfVFJVRTsKKyAgICBFaW5hX0Jvb2wgcmVz
dWx0ID0gRUlOQV9UUlVFOwogICAgIElORigiamF2YXNjcmlwdCBwcm9tcHQ6XG4iCiAgICAgICAg
ICJcdCAgICAgIG1lc3NhZ2U6ICVzXG4iCiAgICAgICAgICJcdGRlZmF1bHQgdmFsdWU6ICVzXG4i
CiAgICAgICAgICJcdGdpdmluZyBhbnN3ZXI6ICVzXG4iCi0gICAgICAgICJcdCAgICAgICBidXR0
b246ICVzIiwgbWVzc2FnZSwgZGVmYXVsdFZhbHVlLCAqdmFsdWUsIHJldCA/ICJvayIgOiAiY2Fu
Y2VsIik7CisgICAgICAgICJcdCAgICAgICBidXR0b246ICVzIiwgbWVzc2FnZSwgZGVmYXVsdFZh
bHVlLCAqdmFsdWUsIHJlc3VsdCA/ICJvayIgOiAiY2FuY2VsIik7CiAKLSAgICByZXR1cm4gcmV0
OworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIC8vIEV2ZW50IEhhbmRsaW5nIC8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogc3RhdGljIHZvaWQg
X2V3a192aWV3X29uX2ZvY3VzX2luKHZvaWQqIGRhdGEsIEV2YXMqIGV2ZW50VHlwZSwgRXZhc19P
YmplY3QqIGNhbGxiYWNrLCB2b2lkKiBldmVudEluZm8pCiB7Ci0gICAgRXdrX1ZpZXdfU21hcnRf
RGF0YSogc2QgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZGF0YSk7Ci0gICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFwaSk7Ci0gICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk4oc2QtPmFwaS0+Zm9jdXNfaW4pOwotICAgIHNkLT5hcGktPmZvY3VzX2luKHNk
KTsKKyAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEgPSBzdGF0aWNfY2FzdDxFd2tf
Vmlld19TbWFydF9EYXRhKj4oZGF0YSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4o
c21hcnREYXRhLT5hcGkpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0
YS0+YXBpLT5mb2N1c19pbik7CisgICAgc21hcnREYXRhLT5hcGktPmZvY3VzX2luKHNtYXJ0RGF0
YSk7CiB9CiAKIHN0YXRpYyB2b2lkIF9ld2tfdmlld19vbl9mb2N1c19vdXQodm9pZCogZGF0YSwg
RXZhcyogZXZlbnRUeXBlLCBFdmFzX09iamVjdCogY2FsbGJhY2ssIHZvaWQqIGV2ZW50SW5mbykK
IHsKLSAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzZCA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1Nt
YXJ0X0RhdGEqPihkYXRhKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBp
KTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpLT5mb2N1c19vdXQpOwot
ICAgIHNkLT5hcGktPmZvY3VzX291dChzZCk7CisgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc21h
cnREYXRhID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEpOworICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+YXBpKTsKKyAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmFwaS0+Zm9jdXNfb3V0KTsKKyAgICBzbWFydERh
dGEtPmFwaS0+Zm9jdXNfb3V0KHNtYXJ0RGF0YSk7CiB9CiAKIHN0YXRpYyB2b2lkIF9ld2tfdmll
d19vbl9tb3VzZV93aGVlbCh2b2lkKiBkYXRhLCBFdmFzKiBldmVudFR5cGUsIEV2YXNfT2JqZWN0
KiBjYWxsYmFjaywgdm9pZCogZXZlbnRJbmZvKQogewotICAgIEV2YXNfRXZlbnRfTW91c2VfV2hl
ZWwqIGV2ID0gc3RhdGljX2Nhc3Q8RXZhc19FdmVudF9Nb3VzZV9XaGVlbCo+KGV2ZW50SW5mbyk7
Ci0gICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFy
dF9EYXRhKj4oZGF0YSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFwaSk7
Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFwaS0+bW91c2Vfd2hlZWwpOwot
ICAgIHNkLT5hcGktPm1vdXNlX3doZWVsKHNkLCBldik7CisgICAgRXZhc19FdmVudF9Nb3VzZV9X
aGVlbCogd2hlZWxFdmVudCA9IHN0YXRpY19jYXN0PEV2YXNfRXZlbnRfTW91c2VfV2hlZWwqPihl
dmVudEluZm8pOworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IHN0YXRpY19j
YXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihkYXRhKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTihzbWFydERhdGEtPmFwaSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4o
c21hcnREYXRhLT5hcGktPm1vdXNlX3doZWVsKTsKKyAgICBzbWFydERhdGEtPmFwaS0+bW91c2Vf
d2hlZWwoc21hcnREYXRhLCB3aGVlbEV2ZW50KTsKIH0KIAogc3RhdGljIHZvaWQgX2V3a192aWV3
X29uX21vdXNlX2Rvd24odm9pZCogZGF0YSwgRXZhcyogZXZlbnRUeXBlLCBFdmFzX09iamVjdCog
Y2FsbGJhY2ssIHZvaWQqIGV2ZW50SW5mbykKIHsKLSAgICBFdmFzX0V2ZW50X01vdXNlX0Rvd24q
IGV2ID0gc3RhdGljX2Nhc3Q8RXZhc19FdmVudF9Nb3VzZV9Eb3duKj4oZXZlbnRJbmZvKTsKLSAg
ICBFd2tfVmlld19TbWFydF9EYXRhKiBzZCA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0Rh
dGEqPihkYXRhKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpKTsKLSAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpLT5tb3VzZV9kb3duKTsKLSAgICBz
ZC0+YXBpLT5tb3VzZV9kb3duKHNkLCBldik7CisgICAgRXZhc19FdmVudF9Nb3VzZV9Eb3duKiBk
b3duRXZlbnQgPSBzdGF0aWNfY2FzdDxFdmFzX0V2ZW50X01vdXNlX0Rvd24qPihldmVudEluZm8p
OworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IHN0YXRpY19jYXN0PEV3a19W
aWV3X1NtYXJ0X0RhdGEqPihkYXRhKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihz
bWFydERhdGEtPmFwaSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRh
LT5hcGktPm1vdXNlX2Rvd24pOworICAgIHNtYXJ0RGF0YS0+YXBpLT5tb3VzZV9kb3duKHNtYXJ0
RGF0YSwgZG93bkV2ZW50KTsKIH0KIAogc3RhdGljIHZvaWQgX2V3a192aWV3X29uX21vdXNlX3Vw
KHZvaWQqIGRhdGEsIEV2YXMqIGV2ZW50VHlwZSwgRXZhc19PYmplY3QqIGNhbGxiYWNrLCB2b2lk
KiBldmVudEluZm8pCiB7Ci0gICAgRXZhc19FdmVudF9Nb3VzZV9VcCogZXYgPSBzdGF0aWNfY2Fz
dDxFdmFzX0V2ZW50X01vdXNlX1VwKj4oZXZlbnRJbmZvKTsKLSAgICBFd2tfVmlld19TbWFydF9E
YXRhKiBzZCA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihkYXRhKTsKLSAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTihzZC0+YXBpLT5tb3VzZV91cCk7Ci0gICAgc2QtPmFwaS0+bW91c2VfdXAoc2Qs
IGV2KTsKKyAgICBFdmFzX0V2ZW50X01vdXNlX1VwKiB1cEV2ZW50ID0gc3RhdGljX2Nhc3Q8RXZh
c19FdmVudF9Nb3VzZV9VcCo+KGV2ZW50SW5mbyk7CisgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSog
c21hcnREYXRhID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEpOworICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+YXBpKTsKKyAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmFwaS0+bW91c2VfdXApOworICAgIHNtYXJ0
RGF0YS0+YXBpLT5tb3VzZV91cChzbWFydERhdGEsIHVwRXZlbnQpOwogfQogCiBzdGF0aWMgdm9p
ZCBfZXdrX3ZpZXdfb25fbW91c2VfbW92ZSh2b2lkKiBkYXRhLCBFdmFzKiBldmVudFR5cGUsIEV2
YXNfT2JqZWN0KiBjYWxsYmFjaywgdm9pZCogZXZlbnRJbmZvKQogewotICAgIEV2YXNfRXZlbnRf
TW91c2VfTW92ZSogZXYgPSBzdGF0aWNfY2FzdDxFdmFzX0V2ZW50X01vdXNlX01vdmUqPihldmVu
dEluZm8pOwotICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0gc3RhdGljX2Nhc3Q8RXdrX1Zp
ZXdfU21hcnRfRGF0YSo+KGRhdGEpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNk
LT5hcGkpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGktPm1vdXNlX21v
dmUpOwotICAgIHNkLT5hcGktPm1vdXNlX21vdmUoc2QsIGV2KTsKKyAgICBFdmFzX0V2ZW50X01v
dXNlX01vdmUqIG1vdmVFdmVudCA9IHN0YXRpY19jYXN0PEV2YXNfRXZlbnRfTW91c2VfTW92ZSo+
KGV2ZW50SW5mbyk7CisgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhID0gc3RhdGlj
X2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEpOworICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOKHNtYXJ0RGF0YS0+YXBpKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
TihzbWFydERhdGEtPmFwaS0+bW91c2VfbW92ZSk7CisgICAgc21hcnREYXRhLT5hcGktPm1vdXNl
X21vdmUoc21hcnREYXRhLCBtb3ZlRXZlbnQpOwogfQogCiBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdf
b25fa2V5X2Rvd24odm9pZCogZGF0YSwgRXZhcyogZXZlbnRUeXBlLCBFdmFzX09iamVjdCogY2Fs
bGJhY2ssIHZvaWQqIGV2ZW50SW5mbykKIHsKLSAgICBFdmFzX0V2ZW50X0tleV9Eb3duKiBldiA9
IHN0YXRpY19jYXN0PEV2YXNfRXZlbnRfS2V5X0Rvd24qPihldmVudEluZm8pOwotICAgIEV3a19W
aWV3X1NtYXJ0X0RhdGEqIHNkID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGRh
dGEpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGkpOwotICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGktPmtleV9kb3duKTsKLSAgICBzZC0+YXBpLT5r
ZXlfZG93bihzZCwgZXYpOworICAgIEV2YXNfRXZlbnRfS2V5X0Rvd24qIGRvd25FdmVudCA9IHN0
YXRpY19jYXN0PEV2YXNfRXZlbnRfS2V5X0Rvd24qPihldmVudEluZm8pOworICAgIEV3a19WaWV3
X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEq
PihkYXRhKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmFwaSk7
CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRhLT5hcGktPmtleV9kb3du
KTsKKyAgICBzbWFydERhdGEtPmFwaS0+a2V5X2Rvd24oc21hcnREYXRhLCBkb3duRXZlbnQpOwog
fQogCiBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfb25fa2V5X3VwKHZvaWQqIGRhdGEsIEV2YXMqIGV2
ZW50VHlwZSwgRXZhc19PYmplY3QqIGNhbGxiYWNrLCB2b2lkKiBldmVudEluZm8pCiB7Ci0gICAg
RXZhc19FdmVudF9LZXlfVXAqIGV2ID0gc3RhdGljX2Nhc3Q8RXZhc19FdmVudF9LZXlfVXAqPihl
dmVudEluZm8pOwotICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0gc3RhdGljX2Nhc3Q8RXdr
X1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJO
KHNkLT5hcGkpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGktPmtleV91
cCk7Ci0gICAgc2QtPmFwaS0+a2V5X3VwKHNkLCBldik7CisgICAgRXZhc19FdmVudF9LZXlfVXAq
IHVwRXZlbnQgPSBzdGF0aWNfY2FzdDxFdmFzX0V2ZW50X0tleV9VcCo+KGV2ZW50SW5mbyk7Cisg
ICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdf
U21hcnRfRGF0YSo+KGRhdGEpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0
RGF0YS0+YXBpKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmFw
aS0+a2V5X3VwKTsKKyAgICBzbWFydERhdGEtPmFwaS0+a2V5X3VwKHNtYXJ0RGF0YSwgdXBFdmVu
dCk7CiB9CiAKIHN0YXRpYyBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6RnJhbWU+IF9ld2tfdmll
d19jb3JlX2ZyYW1lX25ldyhFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEsIEV3a19WaWV3
X1ByaXZhdGVfRGF0YSogcHJpdiwgV2ViQ29yZTo6SFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25l
cikKIHsKLSAgICBXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEVmbCogZmxjID0gbmV3IFdlYkNv
cmU6OkZyYW1lTG9hZGVyQ2xpZW50RWZsKHNtYXJ0RGF0YS0+c2VsZik7Ci0gICAgaWYgKCFmbGMp
IHsKKyAgICBXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEVmbCogZnJhbWVMb2FkZXJDbGllbnQg
PSBuZXcgV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRFZmwoc21hcnREYXRhLT5zZWxmKTsKKyAg
ICBpZiAoIWZyYW1lTG9hZGVyQ2xpZW50KSB7CiAgICAgICAgIENSSVRJQ0FMKCJDb3VsZCBub3Qg
Y3JlYXRlIGZyYW1lIGxvYWRlciBjbGllbnQuIik7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0K
LSAgICBmbGMtPnNldEN1c3RvbVVzZXJBZ2VudChTdHJpbmc6OmZyb21VVEY4KHByaXYtPnNldHRp
bmdzLnVzZXJfYWdlbnQpKTsKKyAgICBmcmFtZUxvYWRlckNsaWVudC0+c2V0Q3VzdG9tVXNlckFn
ZW50KFN0cmluZzo6ZnJvbVVURjgocHJpdi0+c2V0dGluZ3MudXNlckFnZW50KSk7CiAKLSAgICBy
ZXR1cm4gV2ViQ29yZTo6RnJhbWU6OmNyZWF0ZShwcml2LT5wYWdlLCBvd25lciwgZmxjKTsKKyAg
ICByZXR1cm4gV2ViQ29yZTo6RnJhbWU6OmNyZWF0ZShwcml2LT5wYWdlLCBvd25lciwgZnJhbWVM
b2FkZXJDbGllbnQpOwogfQogCiBzdGF0aWMgRXZhc19TbWFydF9DbGFzcyBfcGFyZW50X3NjID0g
RVZBU19TTUFSVF9DTEFTU19JTklUX05VTEw7CkBAIC01NTcsNyArNTU3LDcgQEAgc3RhdGljIEV3
a19WaWV3X1ByaXZhdGVfRGF0YSogX2V3a192aWV3X3ByaXZfbmV3KEV3a19WaWV3X1NtYXJ0X0Rh
dGEqIHNtYXJ0RGF0YSkKIHsKICAgICBFd2tfVmlld19Qcml2YXRlX0RhdGEqIHByaXYgPQogICAg
ICAgICBzdGF0aWNfY2FzdDxFd2tfVmlld19Qcml2YXRlX0RhdGEqPihjYWxsb2MoMSwgc2l6ZW9m
KEV3a19WaWV3X1ByaXZhdGVfRGF0YSkpKTsKLSAgICBBdG9taWNTdHJpbmcgczsKKyAgICBBdG9t
aWNTdHJpbmcgc3RyaW5nOwogICAgIFdlYkNvcmU6OktVUkwgdXJsOwogCiAgICAgaWYgKCFwcml2
KSB7CkBAIC01ODAsOTUgKzU4MCw5NSBAQCBzdGF0aWMgRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKiBf
ZXdrX3ZpZXdfcHJpdl9uZXcoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhKQogICAgICAg
ICBnb3RvIGVycm9yX3BhZ2U7CiAgICAgfQogCi0gICAgcHJpdi0+cGFnZV9zZXR0aW5ncyA9IHBy
aXYtPnBhZ2UtPnNldHRpbmdzKCk7Ci0gICAgaWYgKCFwcml2LT5wYWdlX3NldHRpbmdzKSB7Cisg
ICAgcHJpdi0+cGFnZVNldHRpbmdzID0gcHJpdi0+cGFnZS0+c2V0dGluZ3MoKTsKKyAgICBpZiAo
IXByaXYtPnBhZ2VTZXR0aW5ncykgewogICAgICAgICBDUklUSUNBTCgiQ291bGQgbm90IGdldCBw
YWdlIHNldHRpbmdzLiIpOwogICAgICAgICBnb3RvIGVycm9yX3NldHRpbmdzOwogICAgIH0KIAot
ICAgIHByaXYtPnZpZXdwb3J0X2FyZ3VtZW50cy53aWR0aCA9IFdlYkNvcmU6OlZpZXdwb3J0QXJn
dW1lbnRzOjpWYWx1ZUF1dG87Ci0gICAgcHJpdi0+dmlld3BvcnRfYXJndW1lbnRzLmhlaWdodCA9
IFdlYkNvcmU6OlZpZXdwb3J0QXJndW1lbnRzOjpWYWx1ZUF1dG87Ci0gICAgcHJpdi0+dmlld3Bv
cnRfYXJndW1lbnRzLmluaXRpYWxTY2FsZSA9IFdlYkNvcmU6OlZpZXdwb3J0QXJndW1lbnRzOjpW
YWx1ZUF1dG87Ci0gICAgcHJpdi0+dmlld3BvcnRfYXJndW1lbnRzLm1pbmltdW1TY2FsZSA9IFdl
YkNvcmU6OlZpZXdwb3J0QXJndW1lbnRzOjpWYWx1ZUF1dG87Ci0gICAgcHJpdi0+dmlld3BvcnRf
YXJndW1lbnRzLm1heGltdW1TY2FsZSA9IFdlYkNvcmU6OlZpZXdwb3J0QXJndW1lbnRzOjpWYWx1
ZUF1dG87Ci0gICAgcHJpdi0+dmlld3BvcnRfYXJndW1lbnRzLnRhcmdldERlbnNpdHlEcGkgPSBX
ZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50czo6VmFsdWVBdXRvOwotICAgIHByaXYtPnZpZXdwb3J0
X2FyZ3VtZW50cy51c2VyU2NhbGFibGUgPSBFSU5BX1RSVUU7Ci0KLSAgICBwcml2LT5wYWdlX3Nl
dHRpbmdzLT5zZXRMb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkodHJ1ZSk7Ci0gICAgcHJpdi0+cGFn
ZV9zZXR0aW5ncy0+c2V0RGVmYXVsdFRleHRFbmNvZGluZ05hbWUoImlzby04ODU5LTEiKTsKLSAg
ICBwcml2LT5wYWdlX3NldHRpbmdzLT5zZXREZWZhdWx0Rml4ZWRGb250U2l6ZSgxMik7Ci0gICAg
cHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0RGVmYXVsdEZvbnRTaXplKDE2KTsKLSAgICBwcml2LT5w
YWdlX3NldHRpbmdzLT5zZXRTZXJpZkZvbnRGYW1pbHkoInNlcmlmIik7Ci0gICAgcHJpdi0+cGFn
ZV9zZXR0aW5ncy0+c2V0Rml4ZWRGb250RmFtaWx5KCJtb25vdHlwZSIpOwotICAgIHByaXYtPnBh
Z2Vfc2V0dGluZ3MtPnNldFNhbnNTZXJpZkZvbnRGYW1pbHkoInNhbnMiKTsKLSAgICBwcml2LT5w
YWdlX3NldHRpbmdzLT5zZXRTdGFuZGFyZEZvbnRGYW1pbHkoInNhbnMiKTsKLSAgICBwcml2LT5w
YWdlX3NldHRpbmdzLT5zZXRKYXZhU2NyaXB0RW5hYmxlZCh0cnVlKTsKLSAgICBwcml2LT5wYWdl
X3NldHRpbmdzLT5zZXRQbHVnaW5zRW5hYmxlZCh0cnVlKTsKLSAgICBwcml2LT5wYWdlX3NldHRp
bmdzLT5zZXRMb2NhbFN0b3JhZ2VFbmFibGVkKHRydWUpOwotICAgIHByaXYtPnBhZ2Vfc2V0dGlu
Z3MtPnNldE9mZmxpbmVXZWJBcHBsaWNhdGlvbkNhY2hlRW5hYmxlZCh0cnVlKTsKLSAgICBwcml2
LT5wYWdlX3NldHRpbmdzLT5zZXRVc2VzUGFnZUNhY2hlKHRydWUpOwotICAgIHByaXYtPnBhZ2Vf
c2V0dGluZ3MtPnNldFVzZXNFbmNvZGluZ0RldGVjdG9yKGZhbHNlKTsKLQotICAgIHVybCA9IHBy
aXYtPnBhZ2Vfc2V0dGluZ3MtPnVzZXJTdHlsZVNoZWV0TG9jYXRpb24oKTsKLSAgICBwcml2LT5z
ZXR0aW5ncy51c2VyX3N0eWxlc2hlZXQgPSBlaW5hX3N0cmluZ3NoYXJlX2FkZCh1cmwuc3RyaW5n
KCkudXRmOCgpLmRhdGEoKSk7Ci0KLSAgICBwcml2LT5zZXR0aW5ncy5lbmNvZGluZ19kZWZhdWx0
ID0gZWluYV9zdHJpbmdzaGFyZV9hZGQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIChwcml2LT5wYWdlX3NldHRpbmdzLT5kZWZhdWx0VGV4dEVuY29kaW5nTmFtZSgp
LnV0ZjgoKS5kYXRhKCkpOwotICAgIHByaXYtPnNldHRpbmdzLmVuY29kaW5nX2N1c3RvbSA9IDA7
Ci0KLSAgICBzID0gcHJpdi0+cGFnZV9zZXR0aW5ncy0+bG9jYWxTdG9yYWdlRGF0YWJhc2VQYXRo
KCk7Ci0gICAgcHJpdi0+c2V0dGluZ3MubG9jYWxfc3RvcmFnZV9kYXRhYmFzZV9wYXRoID0gZWlu
YV9zdHJpbmdzaGFyZV9hZGQocy5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLQotICAgIHByaXYt
PnNldHRpbmdzLmZvbnRfbWluaW11bV9zaXplID0gcHJpdi0+cGFnZV9zZXR0aW5ncy0+bWluaW11
bUZvbnRTaXplKCk7Ci0gICAgcHJpdi0+c2V0dGluZ3MuZm9udF9taW5pbXVtX2xvZ2ljYWxfc2l6
ZSA9IHByaXYtPnBhZ2Vfc2V0dGluZ3MtPm1pbmltdW1Mb2dpY2FsRm9udFNpemUoKTsKLSAgICBw
cml2LT5zZXR0aW5ncy5mb250X2RlZmF1bHRfc2l6ZSA9IHByaXYtPnBhZ2Vfc2V0dGluZ3MtPmRl
ZmF1bHRGb250U2l6ZSgpOwotICAgIHByaXYtPnNldHRpbmdzLmZvbnRfbW9ub3NwYWNlX3NpemUg
PSBwcml2LT5wYWdlX3NldHRpbmdzLT5kZWZhdWx0Rml4ZWRGb250U2l6ZSgpOwotCi0gICAgcyA9
IHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnN0YW5kYXJkRm9udEZhbWlseSgpOwotICAgIHByaXYtPnNl
dHRpbmdzLmZvbnRfc3RhbmRhcmQgPSBlaW5hX3N0cmluZ3NoYXJlX2FkZChzLnN0cmluZygpLnV0
ZjgoKS5kYXRhKCkpOwotICAgIHMgPSBwcml2LT5wYWdlX3NldHRpbmdzLT5jdXJzaXZlRm9udEZh
bWlseSgpOwotICAgIHByaXYtPnNldHRpbmdzLmZvbnRfY3Vyc2l2ZSA9IGVpbmFfc3RyaW5nc2hh
cmVfYWRkKHMuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgcyA9IHByaXYtPnBhZ2Vfc2V0
dGluZ3MtPmZpeGVkRm9udEZhbWlseSgpOwotICAgIHByaXYtPnNldHRpbmdzLmZvbnRfbW9ub3Nw
YWNlID0gZWluYV9zdHJpbmdzaGFyZV9hZGQocy5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLSAg
ICBzID0gcHJpdi0+cGFnZV9zZXR0aW5ncy0+ZmFudGFzeUZvbnRGYW1pbHkoKTsKLSAgICBwcml2
LT5zZXR0aW5ncy5mb250X2ZhbnRhc3kgPSBlaW5hX3N0cmluZ3NoYXJlX2FkZChzLnN0cmluZygp
LnV0ZjgoKS5kYXRhKCkpOwotICAgIHMgPSBwcml2LT5wYWdlX3NldHRpbmdzLT5zZXJpZkZvbnRG
YW1pbHkoKTsKLSAgICBwcml2LT5zZXR0aW5ncy5mb250X3NlcmlmID0gZWluYV9zdHJpbmdzaGFy
ZV9hZGQocy5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLSAgICBzID0gcHJpdi0+cGFnZV9zZXR0
aW5ncy0+c2Fuc1NlcmlmRm9udEZhbWlseSgpOwotICAgIHByaXYtPnNldHRpbmdzLmZvbnRfc2Fu
c19zZXJpZiA9IGVpbmFfc3RyaW5nc2hhcmVfYWRkKHMuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7
Ci0KLSAgICBwcml2LT5zZXR0aW5ncy5hdXRvX2xvYWRfaW1hZ2VzID0gcHJpdi0+cGFnZV9zZXR0
aW5ncy0+bG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5KCk7Ci0gICAgcHJpdi0+c2V0dGluZ3MuYXV0
b19zaHJpbmtfaW1hZ2VzID0gcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2hyaW5rc1N0YW5kYWxvbmVJ
bWFnZXNUb0ZpdCgpOwotICAgIHByaXYtPnNldHRpbmdzLmVuYWJsZV9hdXRvX3Jlc2l6ZV93aW5k
b3cgPSBFSU5BX1RSVUU7Ci0gICAgcHJpdi0+c2V0dGluZ3MuZW5hYmxlX2RldmVsb3Blcl9leHRy
YXMgPSBwcml2LT5wYWdlX3NldHRpbmdzLT5kZXZlbG9wZXJFeHRyYXNFbmFibGVkKCk7Ci0gICAg
cHJpdi0+c2V0dGluZ3MuZW5hYmxlX3NjcmlwdHMgPSBwcml2LT5wYWdlX3NldHRpbmdzLT5pc0ph
dmFTY3JpcHRFbmFibGVkKCk7Ci0gICAgcHJpdi0+c2V0dGluZ3MuZW5hYmxlX3BsdWdpbnMgPSBw
cml2LT5wYWdlX3NldHRpbmdzLT5hcmVQbHVnaW5zRW5hYmxlZCgpOwotICAgIHByaXYtPnNldHRp
bmdzLmVuYWJsZV9mcmFtZV9mbGF0dGVuaW5nID0gcHJpdi0+cGFnZV9zZXR0aW5ncy0+ZnJhbWVG
bGF0dGVuaW5nRW5hYmxlZCgpOwotICAgIHByaXYtPnNldHRpbmdzLnNjcmlwdHNfd2luZG93X29w
ZW4gPSBwcml2LT5wYWdlX3NldHRpbmdzLT5qYXZhU2NyaXB0Q2FuT3BlbldpbmRvd3NBdXRvbWF0
aWNhbGx5KCk7Ci0gICAgcHJpdi0+c2V0dGluZ3Muc2NyaXB0c19jYW5fY2xvc2Vfd2luZG93cyA9
IHByaXYtPnBhZ2Vfc2V0dGluZ3MtPmFsbG93U2NyaXB0c1RvQ2xvc2VXaW5kb3dzKCk7Ci0gICAg
cHJpdi0+c2V0dGluZ3MucmVzaXphYmxlX3RleHRhcmVhcyA9IHByaXYtPnBhZ2Vfc2V0dGluZ3Mt
PnRleHRBcmVhc0FyZVJlc2l6YWJsZSgpOwotICAgIHByaXYtPnNldHRpbmdzLnByaXZhdGVfYnJv
d3NpbmcgPSBwcml2LT5wYWdlX3NldHRpbmdzLT5wcml2YXRlQnJvd3NpbmdFbmFibGVkKCk7Ci0g
ICAgcHJpdi0+c2V0dGluZ3MuY2FyZXRfYnJvd3NpbmcgPSBwcml2LT5wYWdlX3NldHRpbmdzLT5j
YXJldEJyb3dzaW5nRW5hYmxlZCgpOwotICAgIHByaXYtPnNldHRpbmdzLnNwYXRpYWxfbmF2aWdh
dGlvbiA9IHByaXYtPnBhZ2Vfc2V0dGluZ3MtPmlzU3BhdGlhbE5hdmlnYXRpb25FbmFibGVkKCk7
Ci0gICAgcHJpdi0+c2V0dGluZ3MubG9jYWxfc3RvcmFnZSA9IHByaXYtPnBhZ2Vfc2V0dGluZ3Mt
PmxvY2FsU3RvcmFnZUVuYWJsZWQoKTsKLSAgICBwcml2LT5zZXR0aW5ncy5vZmZsaW5lX2FwcF9j
YWNoZSA9IHRydWU7IC8vIFhYWCBubyBmdW5jdGlvbiB0byByZWFkIHNldHRpbmc7IHRoaXMga2Vl
cHMgdGhlIG9yaWdpbmFsIHNldHRpbmcKLSAgICBwcml2LT5zZXR0aW5ncy5wYWdlX2NhY2hlID0g
cHJpdi0+cGFnZV9zZXR0aW5ncy0+dXNlc1BhZ2VDYWNoZSgpOwotICAgIHByaXYtPnNldHRpbmdz
LmVuY29kaW5nX2RldGVjdG9yID0gcHJpdi0+cGFnZV9zZXR0aW5ncy0+dXNlc0VuY29kaW5nRGV0
ZWN0b3IoKTsKLQotICAgIHByaXYtPnNldHRpbmdzLnVzZXJfYWdlbnQgPSBld2tfc2V0dGluZ3Nf
ZGVmYXVsdF91c2VyX2FnZW50X2dldCgpOworICAgIHByaXYtPnZpZXdwb3J0QXJndW1lbnRzLndp
ZHRoID0gV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHM6OlZhbHVlQXV0bzsKKyAgICBwcml2LT52
aWV3cG9ydEFyZ3VtZW50cy5oZWlnaHQgPSBXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50czo6VmFs
dWVBdXRvOworICAgIHByaXYtPnZpZXdwb3J0QXJndW1lbnRzLmluaXRpYWxTY2FsZSA9IFdlYkNv
cmU6OlZpZXdwb3J0QXJndW1lbnRzOjpWYWx1ZUF1dG87CisgICAgcHJpdi0+dmlld3BvcnRBcmd1
bWVudHMubWluaW11bVNjYWxlID0gV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHM6OlZhbHVlQXV0
bzsKKyAgICBwcml2LT52aWV3cG9ydEFyZ3VtZW50cy5tYXhpbXVtU2NhbGUgPSBXZWJDb3JlOjpW
aWV3cG9ydEFyZ3VtZW50czo6VmFsdWVBdXRvOworICAgIHByaXYtPnZpZXdwb3J0QXJndW1lbnRz
LnRhcmdldERlbnNpdHlEcGkgPSBXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50czo6VmFsdWVBdXRv
OworICAgIHByaXYtPnZpZXdwb3J0QXJndW1lbnRzLnVzZXJTY2FsYWJsZSA9IEVJTkFfVFJVRTsK
KworICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0TG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5KHRy
dWUpOworICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0RGVmYXVsdFRleHRFbmNvZGluZ05hbWUo
Imlzby04ODU5LTEiKTsKKyAgICBwcml2LT5wYWdlU2V0dGluZ3MtPnNldERlZmF1bHRGaXhlZEZv
bnRTaXplKDEyKTsKKyAgICBwcml2LT5wYWdlU2V0dGluZ3MtPnNldERlZmF1bHRGb250U2l6ZSgx
Nik7CisgICAgcHJpdi0+cGFnZVNldHRpbmdzLT5zZXRTZXJpZkZvbnRGYW1pbHkoInNlcmlmIik7
CisgICAgcHJpdi0+cGFnZVNldHRpbmdzLT5zZXRGaXhlZEZvbnRGYW1pbHkoIm1vbm90eXBlIik7
CisgICAgcHJpdi0+cGFnZVNldHRpbmdzLT5zZXRTYW5zU2VyaWZGb250RmFtaWx5KCJzYW5zIik7
CisgICAgcHJpdi0+cGFnZVNldHRpbmdzLT5zZXRTdGFuZGFyZEZvbnRGYW1pbHkoInNhbnMiKTsK
KyAgICBwcml2LT5wYWdlU2V0dGluZ3MtPnNldEphdmFTY3JpcHRFbmFibGVkKHRydWUpOworICAg
IHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0UGx1Z2luc0VuYWJsZWQodHJ1ZSk7CisgICAgcHJpdi0+
cGFnZVNldHRpbmdzLT5zZXRMb2NhbFN0b3JhZ2VFbmFibGVkKHRydWUpOworICAgIHByaXYtPnBh
Z2VTZXR0aW5ncy0+c2V0T2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGVFbmFibGVkKHRydWUpOwor
ICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0VXNlc1BhZ2VDYWNoZSh0cnVlKTsKKyAgICBwcml2
LT5wYWdlU2V0dGluZ3MtPnNldFVzZXNFbmNvZGluZ0RldGVjdG9yKGZhbHNlKTsKKworICAgIHVy
bCA9IHByaXYtPnBhZ2VTZXR0aW5ncy0+dXNlclN0eWxlU2hlZXRMb2NhdGlvbigpOworICAgIHBy
aXYtPnNldHRpbmdzLnVzZXJTdHlsZXNoZWV0ID0gZWluYV9zdHJpbmdzaGFyZV9hZGQodXJsLnN0
cmluZygpLnV0ZjgoKS5kYXRhKCkpOworCisgICAgcHJpdi0+c2V0dGluZ3MuZW5jb2RpbmdEZWZh
dWx0ID0gZWluYV9zdHJpbmdzaGFyZV9hZGQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIChwcml2LT5wYWdlU2V0dGluZ3MtPmRlZmF1bHRUZXh0RW5jb2RpbmdOYW1l
KCkudXRmOCgpLmRhdGEoKSk7CisgICAgcHJpdi0+c2V0dGluZ3MuZW5jb2RpbmdDdXN0b20gPSAw
OworCisgICAgc3RyaW5nID0gcHJpdi0+cGFnZVNldHRpbmdzLT5sb2NhbFN0b3JhZ2VEYXRhYmFz
ZVBhdGgoKTsKKyAgICBwcml2LT5zZXR0aW5ncy5sb2NhbFN0b3JhZ2VEYXRhYmFzZVBhdGggPSBl
aW5hX3N0cmluZ3NoYXJlX2FkZChzdHJpbmcuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisKKyAg
ICBwcml2LT5zZXR0aW5ncy5mb250TWluaW11bVNpemUgPSBwcml2LT5wYWdlU2V0dGluZ3MtPm1p
bmltdW1Gb250U2l6ZSgpOworICAgIHByaXYtPnNldHRpbmdzLmZvbnRNaW5pbXVtTG9naWNhbFNp
emUgPSBwcml2LT5wYWdlU2V0dGluZ3MtPm1pbmltdW1Mb2dpY2FsRm9udFNpemUoKTsKKyAgICBw
cml2LT5zZXR0aW5ncy5mb250RGVmYXVsdFNpemUgPSBwcml2LT5wYWdlU2V0dGluZ3MtPmRlZmF1
bHRGb250U2l6ZSgpOworICAgIHByaXYtPnNldHRpbmdzLmZvbnRNb25vc3BhY2VTaXplID0gcHJp
di0+cGFnZVNldHRpbmdzLT5kZWZhdWx0Rml4ZWRGb250U2l6ZSgpOworCisgICAgc3RyaW5nID0g
cHJpdi0+cGFnZVNldHRpbmdzLT5zdGFuZGFyZEZvbnRGYW1pbHkoKTsKKyAgICBwcml2LT5zZXR0
aW5ncy5mb250U3RhbmRhcmQgPSBlaW5hX3N0cmluZ3NoYXJlX2FkZChzdHJpbmcuc3RyaW5nKCku
dXRmOCgpLmRhdGEoKSk7CisgICAgc3RyaW5nID0gcHJpdi0+cGFnZVNldHRpbmdzLT5jdXJzaXZl
Rm9udEZhbWlseSgpOworICAgIHByaXYtPnNldHRpbmdzLmZvbnRDdXJzaXZlID0gZWluYV9zdHJp
bmdzaGFyZV9hZGQoc3RyaW5nLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgIHN0cmluZyA9
IHByaXYtPnBhZ2VTZXR0aW5ncy0+Zml4ZWRGb250RmFtaWx5KCk7CisgICAgcHJpdi0+c2V0dGlu
Z3MuZm9udE1vbm9zcGFjZSA9IGVpbmFfc3RyaW5nc2hhcmVfYWRkKHN0cmluZy5zdHJpbmcoKS51
dGY4KCkuZGF0YSgpKTsKKyAgICBzdHJpbmcgPSBwcml2LT5wYWdlU2V0dGluZ3MtPmZhbnRhc3lG
b250RmFtaWx5KCk7CisgICAgcHJpdi0+c2V0dGluZ3MuZm9udEZhbnRhc3kgPSBlaW5hX3N0cmlu
Z3NoYXJlX2FkZChzdHJpbmcuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgc3RyaW5nID0g
cHJpdi0+cGFnZVNldHRpbmdzLT5zZXJpZkZvbnRGYW1pbHkoKTsKKyAgICBwcml2LT5zZXR0aW5n
cy5mb250U2VyaWYgPSBlaW5hX3N0cmluZ3NoYXJlX2FkZChzdHJpbmcuc3RyaW5nKCkudXRmOCgp
LmRhdGEoKSk7CisgICAgc3RyaW5nID0gcHJpdi0+cGFnZVNldHRpbmdzLT5zYW5zU2VyaWZGb250
RmFtaWx5KCk7CisgICAgcHJpdi0+c2V0dGluZ3MuZm9udFNhbnNTZXJpZiA9IGVpbmFfc3RyaW5n
c2hhcmVfYWRkKHN0cmluZy5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKworICAgIHByaXYtPnNl
dHRpbmdzLmF1dG9Mb2FkSW1hZ2VzID0gcHJpdi0+cGFnZVNldHRpbmdzLT5sb2Fkc0ltYWdlc0F1
dG9tYXRpY2FsbHkoKTsKKyAgICBwcml2LT5zZXR0aW5ncy5hdXRvU2hyaW5rSW1hZ2VzID0gcHJp
di0+cGFnZVNldHRpbmdzLT5zaHJpbmtzU3RhbmRhbG9uZUltYWdlc1RvRml0KCk7CisgICAgcHJp
di0+c2V0dGluZ3MuZW5hYmxlQXV0b1Jlc2l6ZVdpbmRvdyA9IEVJTkFfVFJVRTsKKyAgICBwcml2
LT5zZXR0aW5ncy5lbmFibGVEZXZlbG9wZXJFeHRyYXMgPSBwcml2LT5wYWdlU2V0dGluZ3MtPmRl
dmVsb3BlckV4dHJhc0VuYWJsZWQoKTsKKyAgICBwcml2LT5zZXR0aW5ncy5lbmFibGVTY3JpcHRz
ID0gcHJpdi0+cGFnZVNldHRpbmdzLT5pc0phdmFTY3JpcHRFbmFibGVkKCk7CisgICAgcHJpdi0+
c2V0dGluZ3MuZW5hYmxlUGx1Z2lucyA9IHByaXYtPnBhZ2VTZXR0aW5ncy0+YXJlUGx1Z2luc0Vu
YWJsZWQoKTsKKyAgICBwcml2LT5zZXR0aW5ncy5lbmFibGVGcmFtZUZsYXR0ZW5pbmcgPSBwcml2
LT5wYWdlU2V0dGluZ3MtPmZyYW1lRmxhdHRlbmluZ0VuYWJsZWQoKTsKKyAgICBwcml2LT5zZXR0
aW5ncy5zY3JpcHRzV2luZG93T3BlbiA9IHByaXYtPnBhZ2VTZXR0aW5ncy0+amF2YVNjcmlwdENh
bk9wZW5XaW5kb3dzQXV0b21hdGljYWxseSgpOworICAgIHByaXYtPnNldHRpbmdzLnNjcmlwdHND
YW5DbG9zZVdpbmRvd3MgPSBwcml2LT5wYWdlU2V0dGluZ3MtPmFsbG93U2NyaXB0c1RvQ2xvc2VX
aW5kb3dzKCk7CisgICAgcHJpdi0+c2V0dGluZ3MucmVzaXphYmxlVGV4dGFyZWFzID0gcHJpdi0+
cGFnZVNldHRpbmdzLT50ZXh0QXJlYXNBcmVSZXNpemFibGUoKTsKKyAgICBwcml2LT5zZXR0aW5n
cy5wcml2YXRlQnJvd3NpbmcgPSBwcml2LT5wYWdlU2V0dGluZ3MtPnByaXZhdGVCcm93c2luZ0Vu
YWJsZWQoKTsKKyAgICBwcml2LT5zZXR0aW5ncy5jYXJldEJyb3dzaW5nID0gcHJpdi0+cGFnZVNl
dHRpbmdzLT5jYXJldEJyb3dzaW5nRW5hYmxlZCgpOworICAgIHByaXYtPnNldHRpbmdzLnNwYXRp
YWxOYXZpZ2F0aW9uID0gcHJpdi0+cGFnZVNldHRpbmdzLT5pc1NwYXRpYWxOYXZpZ2F0aW9uRW5h
YmxlZCgpOworICAgIHByaXYtPnNldHRpbmdzLmxvY2FsU3RvcmFnZSA9IHByaXYtPnBhZ2VTZXR0
aW5ncy0+bG9jYWxTdG9yYWdlRW5hYmxlZCgpOworICAgIHByaXYtPnNldHRpbmdzLm9mZmxpbmVB
cHBDYWNoZSA9IHRydWU7IC8vIFhYWCBubyBmdW5jdGlvbiB0byByZWFkIHNldHRpbmc7IHRoaXMg
a2VlcHMgdGhlIG9yaWdpbmFsIHNldHRpbmcKKyAgICBwcml2LT5zZXR0aW5ncy5wYWdlQ2FjaGUg
PSBwcml2LT5wYWdlU2V0dGluZ3MtPnVzZXNQYWdlQ2FjaGUoKTsKKyAgICBwcml2LT5zZXR0aW5n
cy5lbmNvZGluZ0RldGVjdG9yID0gcHJpdi0+cGFnZVNldHRpbmdzLT51c2VzRW5jb2RpbmdEZXRl
Y3RvcigpOworCisgICAgcHJpdi0+c2V0dGluZ3MudXNlckFnZW50ID0gZXdrX3NldHRpbmdzX2Rl
ZmF1bHRfdXNlcl9hZ2VudF9nZXQoKTsKIAogICAgIC8vIFNpbmNlIHRoZXJlJ3Mgbm8gc2NhbGUg
c2VwYXJhdGVkIGZyb20gem9vbWluZyBpbiB3ZWJraXQtZWZsLCB0aGlzIGZ1bmN0aW9uYWxpdHkg
b2YKICAgICAvLyB2aWV3cG9ydCBtZXRhIHRhZyBpcyBpbXBsZW1lbnRlZCB1c2luZyB6b29tLiBX
aGVuIHNjYWxlIHpvb20gaXMgc3VwcG9ydGVkIGJ5IHdlYmtpdC1lZmwsCiAgICAgLy8gdGhpcyBm
dW5jdGlvbmFsaXR5IHdpbGwgYmUgbW9kaWZpZWQgYnkgdGhlIHNjYWxlIHpvb20gcGF0Y2guCi0g
ICAgcHJpdi0+c2V0dGluZ3Muem9vbV9yYW5nZS5taW5fc2NhbGUgPSBaT09NX01JTjsKLSAgICBw
cml2LT5zZXR0aW5ncy56b29tX3JhbmdlLm1heF9zY2FsZSA9IFpPT01fTUFYOwotICAgIHByaXYt
PnNldHRpbmdzLnpvb21fcmFuZ2UudXNlcl9zY2FsYWJsZSA9IEVJTkFfVFJVRTsKLSAgICBwcml2
LT5zZXR0aW5ncy5kZXZpY2VfcGl4ZWxfcmF0aW8gPSBERVZJQ0VfUElYRUxfUkFUSU87CisgICAg
cHJpdi0+c2V0dGluZ3Muem9vbVJhbmdlLm1pblNjYWxlID0gWk9PTV9NSU47CisgICAgcHJpdi0+
c2V0dGluZ3Muem9vbVJhbmdlLm1heFNjYWxlID0gWk9PTV9NQVg7CisgICAgcHJpdi0+c2V0dGlu
Z3Muem9vbVJhbmdlLnVzZXJTY2FsYWJsZSA9IEVJTkFfVFJVRTsKKyAgICBwcml2LT5zZXR0aW5n
cy5kZXZpY2VQaXhlbFJhdGlvID0gREVWSUNFX1BJWEVMX1JBVElPOwogCi0gICAgcHJpdi0+c2V0
dGluZ3MuZG9tX3RpbWVyX2ludGVydmFsID0gcHJpdi0+cGFnZV9zZXR0aW5ncy0+ZGVmYXVsdE1p
bkRPTVRpbWVySW50ZXJ2YWwoKTsKKyAgICBwcml2LT5zZXR0aW5ncy5kb21UaW1lckludGVydmFs
ID0gcHJpdi0+cGFnZVNldHRpbmdzLT5kZWZhdWx0TWluRE9NVGltZXJJbnRlcnZhbCgpOwogCi0g
ICAgcHJpdi0+bWFpbl9mcmFtZSA9IF9ld2tfdmlld19jb3JlX2ZyYW1lX25ldyhzbWFydERhdGEs
IHByaXYsIDApLmdldCgpOwotICAgIGlmICghcHJpdi0+bWFpbl9mcmFtZSkgeworICAgIHByaXYt
Pm1haW5GcmFtZSA9IF9ld2tfdmlld19jb3JlX2ZyYW1lX25ldyhzbWFydERhdGEsIHByaXYsIDAp
LmdldCgpOworICAgIGlmICghcHJpdi0+bWFpbkZyYW1lKSB7CiAgICAgICAgIENSSVRJQ0FMKCJD
b3VsZCBub3QgY3JlYXRlIG1haW4gZnJhbWUuIik7CiAgICAgICAgIGdvdG8gZXJyb3JfbWFpbl9m
cmFtZTsKICAgICB9CkBAIC03MDEsMjAgKzcwMSwyMCBAQCBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdf
cHJpdl9kZWwoRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKiBwcml2KQogICAgIGZyZWUocHJpdi0+cmVw
YWludHMuYXJyYXkpOwogICAgIGZyZWUocHJpdi0+c2Nyb2xscy5hcnJheSk7CiAKLSAgICBlaW5h
X3N0cmluZ3NoYXJlX2RlbChwcml2LT5zZXR0aW5ncy51c2VyX2FnZW50KTsKLSAgICBlaW5hX3N0
cmluZ3NoYXJlX2RlbChwcml2LT5zZXR0aW5ncy51c2VyX3N0eWxlc2hlZXQpOwotICAgIGVpbmFf
c3RyaW5nc2hhcmVfZGVsKHByaXYtPnNldHRpbmdzLmVuY29kaW5nX2RlZmF1bHQpOwotICAgIGVp
bmFfc3RyaW5nc2hhcmVfZGVsKHByaXYtPnNldHRpbmdzLmVuY29kaW5nX2N1c3RvbSk7Ci0gICAg
ZWluYV9zdHJpbmdzaGFyZV9kZWwocHJpdi0+c2V0dGluZ3MuZm9udF9zdGFuZGFyZCk7Ci0gICAg
ZWluYV9zdHJpbmdzaGFyZV9kZWwocHJpdi0+c2V0dGluZ3MuZm9udF9jdXJzaXZlKTsKLSAgICBl
aW5hX3N0cmluZ3NoYXJlX2RlbChwcml2LT5zZXR0aW5ncy5mb250X21vbm9zcGFjZSk7Ci0gICAg
ZWluYV9zdHJpbmdzaGFyZV9kZWwocHJpdi0+c2V0dGluZ3MuZm9udF9mYW50YXN5KTsKLSAgICBl
aW5hX3N0cmluZ3NoYXJlX2RlbChwcml2LT5zZXR0aW5ncy5mb250X3NlcmlmKTsKLSAgICBlaW5h
X3N0cmluZ3NoYXJlX2RlbChwcml2LT5zZXR0aW5ncy5mb250X3NhbnNfc2VyaWYpOwotICAgIGVp
bmFfc3RyaW5nc2hhcmVfZGVsKHByaXYtPnNldHRpbmdzLmxvY2FsX3N0b3JhZ2VfZGF0YWJhc2Vf
cGF0aCk7Ci0KLSAgICBpZiAocHJpdi0+YW5pbWF0ZWRfem9vbS5hbmltYXRvcikKLSAgICAgICAg
ZWNvcmVfYW5pbWF0b3JfZGVsKHByaXYtPmFuaW1hdGVkX3pvb20uYW5pbWF0b3IpOworICAgIGVp
bmFfc3RyaW5nc2hhcmVfZGVsKHByaXYtPnNldHRpbmdzLnVzZXJBZ2VudCk7CisgICAgZWluYV9z
dHJpbmdzaGFyZV9kZWwocHJpdi0+c2V0dGluZ3MudXNlclN0eWxlc2hlZXQpOworICAgIGVpbmFf
c3RyaW5nc2hhcmVfZGVsKHByaXYtPnNldHRpbmdzLmVuY29kaW5nRGVmYXVsdCk7CisgICAgZWlu
YV9zdHJpbmdzaGFyZV9kZWwocHJpdi0+c2V0dGluZ3MuZW5jb2RpbmdDdXN0b20pOworICAgIGVp
bmFfc3RyaW5nc2hhcmVfZGVsKHByaXYtPnNldHRpbmdzLmZvbnRTdGFuZGFyZCk7CisgICAgZWlu
YV9zdHJpbmdzaGFyZV9kZWwocHJpdi0+c2V0dGluZ3MuZm9udEN1cnNpdmUpOworICAgIGVpbmFf
c3RyaW5nc2hhcmVfZGVsKHByaXYtPnNldHRpbmdzLmZvbnRNb25vc3BhY2UpOworICAgIGVpbmFf
c3RyaW5nc2hhcmVfZGVsKHByaXYtPnNldHRpbmdzLmZvbnRGYW50YXN5KTsKKyAgICBlaW5hX3N0
cmluZ3NoYXJlX2RlbChwcml2LT5zZXR0aW5ncy5mb250U2VyaWYpOworICAgIGVpbmFfc3RyaW5n
c2hhcmVfZGVsKHByaXYtPnNldHRpbmdzLmZvbnRTYW5zU2VyaWYpOworICAgIGVpbmFfc3RyaW5n
c2hhcmVfZGVsKHByaXYtPnNldHRpbmdzLmxvY2FsU3RvcmFnZURhdGFiYXNlUGF0aCk7CisKKyAg
ICBpZiAocHJpdi0+YW5pbWF0ZWRab29tLmFuaW1hdG9yKQorICAgICAgICBlY29yZV9hbmltYXRv
cl9kZWwocHJpdi0+YW5pbWF0ZWRab29tLmFuaW1hdG9yKTsKIAogICAgIGV3a19oaXN0b3J5X2Zy
ZWUocHJpdi0+aGlzdG9yeSk7CiAKQEAgLTcyNSw3MiArNzI1LDcyIEBAIHN0YXRpYyB2b2lkIF9l
d2tfdmlld19wcml2X2RlbChFd2tfVmlld19Qcml2YXRlX0RhdGEqIHByaXYpCiBzdGF0aWMgdm9p
ZCBfZXdrX3ZpZXdfc21hcnRfYWRkKEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewogICAgIGNvbnN0
IEV2YXNfU21hcnQqIHNtYXJ0ID0gZXZhc19vYmplY3Rfc21hcnRfc21hcnRfZ2V0KGV3a1ZpZXcp
OwotICAgIGNvbnN0IEV2YXNfU21hcnRfQ2xhc3MqIHNjID0gZXZhc19zbWFydF9jbGFzc19nZXQo
c21hcnQpOwotICAgIGNvbnN0IEV3a19WaWV3X1NtYXJ0X0NsYXNzKiBhcGkgPSByZWludGVycHJl
dF9jYXN0PGNvbnN0IEV3a19WaWV3X1NtYXJ0X0NsYXNzKj4oc2MpOworICAgIGNvbnN0IEV2YXNf
U21hcnRfQ2xhc3MqIHNtYXJ0Q2xhc3MgPSBldmFzX3NtYXJ0X2NsYXNzX2dldChzbWFydCk7Cisg
ICAgY29uc3QgRXdrX1ZpZXdfU21hcnRfQ2xhc3MqIGFwaSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgRXdrX1ZpZXdfU21hcnRfQ2xhc3MqPihzbWFydENsYXNzKTsKICAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTihhcGktPmJhY2tpbmdfc3RvcmVfYWRkKTsKLSAgICBFV0tfVklFV19TRF9H
RVQoZXdrVmlldywgc2QpOworICAgIEVXS19WSUVXX1NEX0dFVChld2tWaWV3LCBzbWFydERhdGEp
OwogCi0gICAgaWYgKCFzZCkgewotICAgICAgICBzZCA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1Nt
YXJ0X0RhdGEqPihjYWxsb2MoMSwgc2l6ZW9mKEV3a19WaWV3X1NtYXJ0X0RhdGEpKSk7Ci0gICAg
ICAgIGlmICghc2QpIHsKKyAgICBpZiAoIXNtYXJ0RGF0YSkgeworICAgICAgICBzbWFydERhdGEg
PSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oY2FsbG9jKDEsIHNpemVvZihFd2tf
Vmlld19TbWFydF9EYXRhKSkpOworICAgICAgICBpZiAoIXNtYXJ0RGF0YSkgewogICAgICAgICAg
ICAgQ1JJVElDQUwoImNvdWxkIG5vdCBhbGxvY2F0ZSBFd2tfVmlld19TbWFydF9EYXRhIik7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgZXZhc19vYmplY3Rfc21hcnRf
ZGF0YV9zZXQoZXdrVmlldywgc2QpOworICAgICAgICBldmFzX29iamVjdF9zbWFydF9kYXRhX3Nl
dChld2tWaWV3LCBzbWFydERhdGEpOwogICAgIH0KIAotICAgIHNkLT5iZ19jb2xvci5yID0gMjU1
OwotICAgIHNkLT5iZ19jb2xvci5nID0gMjU1OwotICAgIHNkLT5iZ19jb2xvci5iID0gMjU1Owot
ICAgIHNkLT5iZ19jb2xvci5hID0gMjU1OworICAgIHNtYXJ0RGF0YS0+YmdfY29sb3IuciA9IDI1
NTsKKyAgICBzbWFydERhdGEtPmJnX2NvbG9yLmcgPSAyNTU7CisgICAgc21hcnREYXRhLT5iZ19j
b2xvci5iID0gMjU1OworICAgIHNtYXJ0RGF0YS0+YmdfY29sb3IuYSA9IDI1NTsKIAotICAgIHNk
LT5zZWxmID0gZXdrVmlldzsKLSAgICBzZC0+X3ByaXYgPSBfZXdrX3ZpZXdfcHJpdl9uZXcoc2Qp
OwotICAgIHNkLT5hcGkgPSBhcGk7CisgICAgc21hcnREYXRhLT5zZWxmID0gZXdrVmlldzsKKyAg
ICBzbWFydERhdGEtPl9wcml2ID0gX2V3a192aWV3X3ByaXZfbmV3KHNtYXJ0RGF0YSk7CisgICAg
c21hcnREYXRhLT5hcGkgPSBhcGk7CiAKICAgICBfcGFyZW50X3NjLmFkZChld2tWaWV3KTsKIAot
ICAgIGlmICghc2QtPl9wcml2KQorICAgIGlmICghc21hcnREYXRhLT5fcHJpdikKICAgICAgICAg
cmV0dXJuOwogCi0gICAgRVdLX1ZJRVdfUFJJVl9HRVQoc2QsIHByaXYpOworICAgIEVXS19WSUVX
X1BSSVZfR0VUKHNtYXJ0RGF0YSwgcHJpdik7CiAKLSAgICBzZC0+YmFja2luZ19zdG9yZSA9IGFw
aS0+YmFja2luZ19zdG9yZV9hZGQoc2QpOwotICAgIGlmICghc2QtPmJhY2tpbmdfc3RvcmUpIHsK
KyAgICBzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUgPSBhcGktPmJhY2tpbmdfc3RvcmVfYWRkKHNt
YXJ0RGF0YSk7CisgICAgaWYgKCFzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUpIHsKICAgICAgICAg
RVJSKCJDb3VsZCBub3QgY3JlYXRlIGJhY2tpbmcgc3RvcmUgb2JqZWN0LiIpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgZXZhc19vYmplY3Rfc21hcnRfbWVtYmVyX2FkZChzZC0+YmFj
a2luZ19zdG9yZSwgZXdrVmlldyk7Ci0gICAgZXZhc19vYmplY3Rfc2hvdyhzZC0+YmFja2luZ19z
dG9yZSk7Ci0gICAgZXZhc19vYmplY3RfcGFzc19ldmVudHNfc2V0KHNkLT5iYWNraW5nX3N0b3Jl
LCBFSU5BX1RSVUUpOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X21lbWJlcl9hZGQoc21hcnREYXRh
LT5iYWNraW5nX3N0b3JlLCBld2tWaWV3KTsKKyAgICBldmFzX29iamVjdF9zaG93KHNtYXJ0RGF0
YS0+YmFja2luZ19zdG9yZSk7CisgICAgZXZhc19vYmplY3RfcGFzc19ldmVudHNfc2V0KHNtYXJ0
RGF0YS0+YmFja2luZ19zdG9yZSwgRUlOQV9UUlVFKTsKIAotICAgIHNkLT5ldmVudHNfcmVjdCA9
IGV2YXNfb2JqZWN0X3JlY3RhbmdsZV9hZGQoc2QtPmJhc2UuZXZhcyk7Ci0gICAgZXZhc19vYmpl
Y3RfY29sb3Jfc2V0KHNkLT5ldmVudHNfcmVjdCwgMCwgMCwgMCwgMCk7Ci0gICAgZXZhc19vYmpl
Y3Rfc21hcnRfbWVtYmVyX2FkZChzZC0+ZXZlbnRzX3JlY3QsIGV3a1ZpZXcpOwotICAgIGV2YXNf
b2JqZWN0X3Nob3coc2QtPmV2ZW50c19yZWN0KTsKKyAgICBzbWFydERhdGEtPmV2ZW50c19yZWN0
ID0gZXZhc19vYmplY3RfcmVjdGFuZ2xlX2FkZChzbWFydERhdGEtPmJhc2UuZXZhcyk7CisgICAg
ZXZhc19vYmplY3RfY29sb3Jfc2V0KHNtYXJ0RGF0YS0+ZXZlbnRzX3JlY3QsIDAsIDAsIDAsIDAp
OworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X21lbWJlcl9hZGQoc21hcnREYXRhLT5ldmVudHNfcmVj
dCwgZXdrVmlldyk7CisgICAgZXZhc19vYmplY3Rfc2hvdyhzbWFydERhdGEtPmV2ZW50c19yZWN0
KTsKIAotICAgIHNkLT5tYWluX2ZyYW1lID0gZXdrX2ZyYW1lX2FkZChzZC0+YmFzZS5ldmFzKTsK
LSAgICBpZiAoIXNkLT5tYWluX2ZyYW1lKSB7CisgICAgc21hcnREYXRhLT5tYWluX2ZyYW1lID0g
ZXdrX2ZyYW1lX2FkZChzbWFydERhdGEtPmJhc2UuZXZhcyk7CisgICAgaWYgKCFzbWFydERhdGEt
Pm1haW5fZnJhbWUpIHsKICAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIG1haW4gZnJhbWUg
b2JqZWN0LiIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCFld2tfZnJhbWVf
aW5pdChzZC0+bWFpbl9mcmFtZSwgZXdrVmlldywgcHJpdi0+bWFpbl9mcmFtZSkpIHsKKyAgICBp
ZiAoIWV3a19mcmFtZV9pbml0KHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSwgZXdrVmlldywgcHJpdi0+
bWFpbkZyYW1lKSkgewogICAgICAgICBFUlIoIkNvdWxkIG5vdCBpbml0aWFsaXplIG1haW4gZnJt
ZSBvYmplY3QuIik7Ci0gICAgICAgIGV2YXNfb2JqZWN0X2RlbChzZC0+bWFpbl9mcmFtZSk7Ci0g
ICAgICAgIHNkLT5tYWluX2ZyYW1lID0gMDsKKyAgICAgICAgZXZhc19vYmplY3RfZGVsKHNtYXJ0
RGF0YS0+bWFpbl9mcmFtZSk7CisgICAgICAgIHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSA9IDA7CiAK
LSAgICAgICAgZGVsZXRlIHByaXYtPm1haW5fZnJhbWU7Ci0gICAgICAgIHByaXYtPm1haW5fZnJh
bWUgPSAwOworICAgICAgICBkZWxldGUgcHJpdi0+bWFpbkZyYW1lOworICAgICAgICBwcml2LT5t
YWluRnJhbWUgPSAwOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZXZhc19vYmplY3Rf
bmFtZV9zZXQoc2QtPm1haW5fZnJhbWUsICJFV0tfRnJhbWU6bWFpbiIpOwotICAgIGV2YXNfb2Jq
ZWN0X3NtYXJ0X21lbWJlcl9hZGQoc2QtPm1haW5fZnJhbWUsIGV3a1ZpZXcpOwotICAgIGV2YXNf
b2JqZWN0X3Nob3coc2QtPm1haW5fZnJhbWUpOworICAgIGV2YXNfb2JqZWN0X25hbWVfc2V0KHNt
YXJ0RGF0YS0+bWFpbl9mcmFtZSwgIkVXS19GcmFtZTptYWluIik7CisgICAgZXZhc19vYmplY3Rf
c21hcnRfbWVtYmVyX2FkZChzbWFydERhdGEtPm1haW5fZnJhbWUsIGV3a1ZpZXcpOworICAgIGV2
YXNfb2JqZWN0X3Nob3coc21hcnREYXRhLT5tYWluX2ZyYW1lKTsKIAotI2RlZmluZSBDT05ORUNU
KHMsIGMpIGV2YXNfb2JqZWN0X2V2ZW50X2NhbGxiYWNrX2FkZChld2tWaWV3LCBzLCBjLCBzZCkK
KyNkZWZpbmUgQ09OTkVDVChzLCBjKSBldmFzX29iamVjdF9ldmVudF9jYWxsYmFja19hZGQoZXdr
VmlldywgcywgYywgc21hcnREYXRhKQogICAgIENPTk5FQ1QoRVZBU19DQUxMQkFDS19GT0NVU19J
TiwgX2V3a192aWV3X29uX2ZvY3VzX2luKTsKICAgICBDT05ORUNUKEVWQVNfQ0FMTEJBQ0tfRk9D
VVNfT1VULCBfZXdrX3ZpZXdfb25fZm9jdXNfb3V0KTsKICAgICBDT05ORUNUKEVWQVNfQ0FMTEJB
Q0tfTU9VU0VfV0hFRUwsIF9ld2tfdmlld19vbl9tb3VzZV93aGVlbCk7CkBAIC04MDQsOCArODA0
LDggQEAgc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X2FkZChFdmFzX09iamVjdCogZXdrVmll
dykKIAogc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X2RlbChFdmFzX09iamVjdCogZXdrVmll
dykKIHsKLSAgICBFV0tfVklFV19TRF9HRVQoZXdrVmlldywgc2QpOwotICAgIEV3a19WaWV3X1By
aXZhdGVfRGF0YSogcHJpdiA9IHNkID8gc2QtPl9wcml2IDogMDsKKyAgICBFV0tfVklFV19TRF9H
RVQoZXdrVmlldywgc21hcnREYXRhKTsKKyAgICBFd2tfVmlld19Qcml2YXRlX0RhdGEqIHByaXYg
PSBzbWFydERhdGEgPyBzbWFydERhdGEtPl9wcml2IDogMDsKIAogICAgIGV3a192aWV3X3N0b3Ao
ZXdrVmlldyk7CiAgICAgX3BhcmVudF9zYy5kZWwoZXdrVmlldyk7CkBAIC04MTQsMTAzICs4MTQs
MTAzIEBAIHN0YXRpYyB2b2lkIF9ld2tfdmlld19zbWFydF9kZWwoRXZhc19PYmplY3QqIGV3a1Zp
ZXcpCiAKIHN0YXRpYyB2b2lkIF9ld2tfdmlld19zbWFydF9yZXNpemUoRXZhc19PYmplY3QqIGV3
a1ZpZXcsIEV2YXNfQ29vcmQgdywgRXZhc19Db29yZCBoKQogewotICAgIEVXS19WSUVXX1NEX0dF
VF9PUl9SRVRVUk4oZXdrVmlldywgc2QpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrVmlldywgc21hcnREYXRhKTsKIAogICAgIC8vIHRoZXNlIHNob3VsZCBiZSBxdWV1ZWQgYW5k
IHByb2Nlc3NlZCBpbiBjYWxjdWxhdGUgYXMgd2VsbCEKLSAgICBldmFzX29iamVjdF9yZXNpemUo
c2QtPmJhY2tpbmdfc3RvcmUsIHcsIGgpOworICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShzbWFydERh
dGEtPmJhY2tpbmdfc3RvcmUsIHcsIGgpOwogCi0gICAgc2QtPmNoYW5nZWQuc2l6ZSA9IEVJTkFf
VFJVRTsKLSAgICBfZXdrX3ZpZXdfc21hcnRfY2hhbmdlZChzZCk7CisgICAgc21hcnREYXRhLT5j
aGFuZ2VkLnNpemUgPSBFSU5BX1RSVUU7CisgICAgX2V3a192aWV3X3NtYXJ0X2NoYW5nZWQoc21h
cnREYXRhKTsKIH0KIAogc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X21vdmUoRXZhc19PYmpl
Y3QqIGV3a1ZpZXcsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5KQogewotICAgIEVXS19WSUVX
X1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QpOwotICAgIHNkLT5jaGFuZ2VkLnBvc2l0aW9u
ID0gRUlOQV9UUlVFOwotICAgIF9ld2tfdmlld19zbWFydF9jaGFuZ2VkKHNkKTsKKyAgICBFV0tf
VklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSk7CisgICAgc21hcnREYXRh
LT5jaGFuZ2VkLnBvc2l0aW9uID0gRUlOQV9UUlVFOworICAgIF9ld2tfdmlld19zbWFydF9jaGFu
Z2VkKHNtYXJ0RGF0YSk7CiB9CiAKIHN0YXRpYyB2b2lkIF9ld2tfdmlld19zbWFydF9jYWxjdWxh
dGUoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUKGV3a1ZpZXcs
IHNkKTsKLSAgICBFV0tfVklFV19QUklWX0dFVChzZCwgcHJpdik7Ci0gICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk4oc2QtPmFwaS0+Y29udGVudHNfcmVzaXplKTsKLSAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpLT5zY3JvbGxzX3Byb2Nlc3MpOwotICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGktPnJlcGFpbnRzX3Byb2Nlc3MpOwotICAgIEV2YXNf
Q29vcmQgeCwgeSwgdywgaDsKKyAgICBFV0tfVklFV19TRF9HRVQoZXdrVmlldywgc21hcnREYXRh
KTsKKyAgICBFV0tfVklFV19QUklWX0dFVChzbWFydERhdGEsIHByaXYpOworICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+YXBpLT5jb250ZW50c19yZXNpemUpOworICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+YXBpLT5zY3JvbGxzX3Byb2Nl
c3MpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+YXBpLT5yZXBh
aW50c19wcm9jZXNzKTsKKyAgICBFdmFzX0Nvb3JkIHgsIHksIHdpZHRoLCBoZWlnaHQ7CiAKLSAg
ICBzZC0+Y2hhbmdlZC5hbnkgPSBFSU5BX0ZBTFNFOworICAgIHNtYXJ0RGF0YS0+Y2hhbmdlZC5h
bnkgPSBFSU5BX0ZBTFNFOwogCi0gICAgaWYgKCFzZC0+bWFpbl9mcmFtZSB8fCAhcHJpdi0+bWFp
bl9mcmFtZSkKKyAgICBpZiAoIXNtYXJ0RGF0YS0+bWFpbl9mcmFtZSB8fCAhcHJpdi0+bWFpbkZy
YW1lKQogICAgICAgICByZXR1cm47CiAKLSAgICBldmFzX29iamVjdF9nZW9tZXRyeV9nZXQoZXdr
VmlldywgJngsICZ5LCAmdywgJmgpOworICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldChld2tW
aWV3LCAmeCwgJnksICZ3aWR0aCwgJmhlaWdodCk7CiAKICAgICBEQkcoImV3a1ZpZXc9JXAgZ2Vv
PVslZCwgJWQgKyAlZHglZF0sIGNoYW5nZWQ6IHNpemU9JWhodSwgIgogICAgICAgICAic2Nyb2xs
cz0lenUsIHJlcGFpbnRzPSV6dSIsCi0gICAgICAgIGV3a1ZpZXcsIHgsIHksIHcsIGgsIHNkLT5j
aGFuZ2VkLnNpemUsCisgICAgICAgIGV3a1ZpZXcsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHNtYXJ0
RGF0YS0+Y2hhbmdlZC5zaXplLAogICAgICAgICBwcml2LT5zY3JvbGxzLmNvdW50LCBwcml2LT5y
ZXBhaW50cy5jb3VudCk7CiAKLSAgICBpZiAoc2QtPmNoYW5nZWQuc2l6ZSAmJiAoKHcgIT0gc2Qt
PnZpZXcudykgfHwgKGggIT0gc2QtPnZpZXcuaCkpKSB7Ci0gICAgICAgIFdlYkNvcmU6OkZyYW1l
VmlldyogdmlldyA9IHByaXYtPm1haW5fZnJhbWUtPnZpZXcoKTsKKyAgICBpZiAoc21hcnREYXRh
LT5jaGFuZ2VkLnNpemUgJiYgKCh3aWR0aCAhPSBzbWFydERhdGEtPnZpZXcudykgfHwgKGhlaWdo
dCAhPSBzbWFydERhdGEtPnZpZXcuaCkpKSB7CisgICAgICAgIFdlYkNvcmU6OkZyYW1lVmlldyog
dmlldyA9IHByaXYtPm1haW5GcmFtZS0+dmlldygpOwogICAgICAgICBpZiAodmlldykgewotICAg
ICAgICAgICAgdmlldy0+cmVzaXplKHcsIGgpOworICAgICAgICAgICAgdmlldy0+cmVzaXplKHdp
ZHRoLCBoZWlnaHQpOwogICAgICAgICAgICAgdmlldy0+Zm9yY2VMYXlvdXQoKTsKICAgICAgICAg
ICAgIHZpZXctPmFkanVzdFZpZXdTaXplKCk7CiAgICAgICAgIH0KLSAgICAgICAgZXZhc19vYmpl
Y3RfcmVzaXplKHNkLT5tYWluX2ZyYW1lLCB3LCBoKTsKLSAgICAgICAgZXZhc19vYmplY3RfcmVz
aXplKHNkLT5ldmVudHNfcmVjdCwgdywgaCk7Ci0gICAgICAgIHNkLT5jaGFuZ2VkLmZyYW1lX3Jl
Y3QgPSBFSU5BX1RSVUU7Ci0gICAgICAgIHNkLT52aWV3LncgPSB3OwotICAgICAgICBzZC0+dmll
dy5oID0gaDsKKyAgICAgICAgZXZhc19vYmplY3RfcmVzaXplKHNtYXJ0RGF0YS0+bWFpbl9mcmFt
ZSwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShzbWFydERhdGEt
PmV2ZW50c19yZWN0LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgc21hcnREYXRhLT5jaGFuZ2Vk
LmZyYW1lX3JlY3QgPSBFSU5BX1RSVUU7CisgICAgICAgIHNtYXJ0RGF0YS0+dmlldy53ID0gd2lk
dGg7CisgICAgICAgIHNtYXJ0RGF0YS0+dmlldy5oID0gaGVpZ2h0OwogCi0gICAgICAgIF9ld2tf
dmlld19yZXBhaW50X2FkZChwcml2LCAwLCAwLCB3LCBoKTsKKyAgICAgICAgX2V3a192aWV3X3Jl
cGFpbnRfYWRkKHByaXYsIDAsIDAsIHdpZHRoLCBoZWlnaHQpOwogCiAgICAgICAgIC8vIFRoaXMg
Y2FsbGJhY2sgaXMgYSBnb29kIHBsYWNlIGUuZy4gdG8gY2hhbmdlIGZpeGVkIGxheW91dCBzaXpl
IChld2tfdmlld19maXhlZF9sYXlvdXRfc2l6ZV9zZXQpLgogICAgICAgICBldmFzX29iamVjdF9z
bWFydF9jYWxsYmFja19jYWxsKGV3a1ZpZXcsICJ2aWV3LHJlc2l6ZWQiLCAwKTsKICAgICB9Ci0g
ICAgc2QtPmNoYW5nZWQuc2l6ZSA9IEVJTkFfRkFMU0U7CisgICAgc21hcnREYXRhLT5jaGFuZ2Vk
LnNpemUgPSBFSU5BX0ZBTFNFOwogCi0gICAgaWYgKHNkLT5jaGFuZ2VkLnBvc2l0aW9uICYmICgo
eCAhPSBzZC0+dmlldy54KSB8fCAoeSAhPSBzZC0+dmlldy55KSkpIHsKLSAgICAgICAgZXZhc19v
YmplY3RfbW92ZShzZC0+bWFpbl9mcmFtZSwgeCwgeSk7Ci0gICAgICAgIGV2YXNfb2JqZWN0X21v
dmUoc2QtPmJhY2tpbmdfc3RvcmUsIHgsIHkpOwotICAgICAgICBldmFzX29iamVjdF9tb3ZlKHNk
LT5ldmVudHNfcmVjdCwgeCwgeSk7Ci0gICAgICAgIHNkLT5jaGFuZ2VkLmZyYW1lX3JlY3QgPSBF
SU5BX1RSVUU7Ci0gICAgICAgIHNkLT52aWV3LnggPSB4OwotICAgICAgICBzZC0+dmlldy55ID0g
eTsKKyAgICBpZiAoc21hcnREYXRhLT5jaGFuZ2VkLnBvc2l0aW9uICYmICgoeCAhPSBzbWFydERh
dGEtPnZpZXcueCkgfHwgKHkgIT0gc21hcnREYXRhLT52aWV3LnkpKSkgeworICAgICAgICBldmFz
X29iamVjdF9tb3ZlKHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSwgeCwgeSk7CisgICAgICAgIGV2YXNf
b2JqZWN0X21vdmUoc21hcnREYXRhLT5iYWNraW5nX3N0b3JlLCB4LCB5KTsKKyAgICAgICAgZXZh
c19vYmplY3RfbW92ZShzbWFydERhdGEtPmV2ZW50c19yZWN0LCB4LCB5KTsKKyAgICAgICAgc21h
cnREYXRhLT5jaGFuZ2VkLmZyYW1lX3JlY3QgPSBFSU5BX1RSVUU7CisgICAgICAgIHNtYXJ0RGF0
YS0+dmlldy54ID0geDsKKyAgICAgICAgc21hcnREYXRhLT52aWV3LnkgPSB5OwogICAgIH0KLSAg
ICBzZC0+Y2hhbmdlZC5wb3NpdGlvbiA9IEVJTkFfRkFMU0U7CisgICAgc21hcnREYXRhLT5jaGFu
Z2VkLnBvc2l0aW9uID0gRUlOQV9GQUxTRTsKIAotICAgIGlmICghc2QtPmFwaS0+c2Nyb2xsc19w
cm9jZXNzKHNkKSkKKyAgICBpZiAoIXNtYXJ0RGF0YS0+YXBpLT5zY3JvbGxzX3Byb2Nlc3Moc21h
cnREYXRhKSkKICAgICAgICAgRVJSKCJmYWlsZWQgdG8gcHJvY2VzcyBzY3JvbGxzLiIpOwogICAg
IF9ld2tfdmlld19zY3JvbGxzX2ZsdXNoKHByaXYpOwogCi0gICAgaWYgKCFzZC0+YXBpLT5yZXBh
aW50c19wcm9jZXNzKHNkKSkKKyAgICBpZiAoIXNtYXJ0RGF0YS0+YXBpLT5yZXBhaW50c19wcm9j
ZXNzKHNtYXJ0RGF0YSkpCiAgICAgICAgIEVSUigiZmFpbGVkIHRvIHByb2Nlc3MgcmVwYWludHMu
Iik7CiAgICAgX2V3a192aWV3X3JlcGFpbnRzX2ZsdXNoKHByaXYpOwogCi0gICAgaWYgKHNkLT5j
aGFuZ2VkLmZyYW1lX3JlY3QpIHsKLSAgICAgICAgV2ViQ29yZTo6RnJhbWVWaWV3KiB2aWV3ID0g
cHJpdi0+bWFpbl9mcmFtZS0+dmlldygpOworICAgIGlmIChzbWFydERhdGEtPmNoYW5nZWQuZnJh
bWVfcmVjdCkgeworICAgICAgICBXZWJDb3JlOjpGcmFtZVZpZXcqIHZpZXcgPSBwcml2LT5tYWlu
RnJhbWUtPnZpZXcoKTsKICAgICAgICAgdmlldy0+ZnJhbWVSZWN0c0NoYW5nZWQoKTsgLyogZm9y
Y2UgdHJlZSB0byBnZXQgcG9zaXRpb24gZnJvbSByb290ICovCi0gICAgICAgIHNkLT5jaGFuZ2Vk
LmZyYW1lX3JlY3QgPSBFSU5BX0ZBTFNFOworICAgICAgICBzbWFydERhdGEtPmNoYW5nZWQuZnJh
bWVfcmVjdCA9IEVJTkFfRkFMU0U7CiAgICAgfQogfQogCiBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdf
c21hcnRfc2hvdyhFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRf
T1JfUkVUVVJOKGV3a1ZpZXcsIHNkKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3
a1ZpZXcsIHNtYXJ0RGF0YSk7CiAKLSAgICBpZiAoZXZhc19vYmplY3RfY2xpcGVlc19nZXQoc2Qt
PmJhc2UuY2xpcHBlcikpCi0gICAgICAgIGV2YXNfb2JqZWN0X3Nob3coc2QtPmJhc2UuY2xpcHBl
cik7Ci0gICAgZXZhc19vYmplY3Rfc2hvdyhzZC0+YmFja2luZ19zdG9yZSk7CisgICAgaWYgKGV2
YXNfb2JqZWN0X2NsaXBlZXNfZ2V0KHNtYXJ0RGF0YS0+YmFzZS5jbGlwcGVyKSkKKyAgICAgICAg
ZXZhc19vYmplY3Rfc2hvdyhzbWFydERhdGEtPmJhc2UuY2xpcHBlcik7CisgICAgZXZhc19vYmpl
Y3Rfc2hvdyhzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUpOwogfQogCiBzdGF0aWMgdm9pZCBfZXdr
X3ZpZXdfc21hcnRfaGlkZShFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19T
RF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVU
VVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSk7CiAKLSAgICBldmFzX29iamVjdF9oaWRlKHNkLT5iYXNl
LmNsaXBwZXIpOwotICAgIGV2YXNfb2JqZWN0X2hpZGUoc2QtPmJhY2tpbmdfc3RvcmUpOworICAg
IGV2YXNfb2JqZWN0X2hpZGUoc21hcnREYXRhLT5iYXNlLmNsaXBwZXIpOworICAgIGV2YXNfb2Jq
ZWN0X2hpZGUoc21hcnREYXRhLT5iYWNraW5nX3N0b3JlKTsKIH0KIAogc3RhdGljIEVpbmFfQm9v
bCBfZXdrX3ZpZXdfc21hcnRfY29udGVudHNfcmVzaXplKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNt
YXJ0RGF0YSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQpAQCAtOTIxLDI5ICs5MjEsMjkgQEAgc3Rh
dGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfc21hcnRfY29udGVudHNfcmVzaXplKEV3a19WaWV3X1Nt
YXJ0X0RhdGEqIHNtYXJ0RGF0YSwKIHN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3NtYXJ0X3pv
b21fc2V0KEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSwgZmxvYXQgem9vbSwgRXZhc19D
b29yZCBjZW50ZXJYLCBFdmFzX0Nvb3JkIGNlbnRlclkpCiB7CiAgICAgZG91YmxlIHB4LCBweTsK
LSAgICBFdmFzX0Nvb3JkIHgsIHksIHcsIGg7Ci0gICAgRWluYV9Cb29sIHJldDsKKyAgICBFdmFz
X0Nvb3JkIHgsIHksIHdpZHRoLCBoZWlnaHQ7CisgICAgRWluYV9Cb29sIHJlc3VsdDsKIAotICAg
IGV3a19mcmFtZV9zY3JvbGxfc2l6ZV9nZXQoc21hcnREYXRhLT5tYWluX2ZyYW1lLCAmdywgJmgp
OworICAgIGV3a19mcmFtZV9zY3JvbGxfc2l6ZV9nZXQoc21hcnREYXRhLT5tYWluX2ZyYW1lLCAm
d2lkdGgsICZoZWlnaHQpOwogICAgIGV3a19mcmFtZV9zY3JvbGxfcG9zX2dldChzbWFydERhdGEt
Pm1haW5fZnJhbWUsICZ4LCAmeSk7CiAKLSAgICBpZiAodyArIHNtYXJ0RGF0YS0+dmlldy53ID4g
MCkKLSAgICAgICAgcHggPSBzdGF0aWNfY2FzdDxkb3VibGU+KHggKyBjZW50ZXJYKSAvICh3ICsg
c21hcnREYXRhLT52aWV3LncpOworICAgIGlmICh3aWR0aCArIHNtYXJ0RGF0YS0+dmlldy53ID4g
MCkKKyAgICAgICAgcHggPSBzdGF0aWNfY2FzdDxkb3VibGU+KHggKyBjZW50ZXJYKSAvICh3aWR0
aCArIHNtYXJ0RGF0YS0+dmlldy53KTsKICAgICBlbHNlCiAgICAgICAgIHB4ID0gMC4wOwogCi0g
ICAgaWYgKGggKyBzbWFydERhdGEtPnZpZXcuaCA+IDApCi0gICAgICAgIHB5ID0gc3RhdGljX2Nh
c3Q8ZG91YmxlPih5ICsgY2VudGVyWSkgLyAoaCArIHNtYXJ0RGF0YS0+dmlldy5oKTsKKyAgICBp
ZiAoaGVpZ2h0ICsgc21hcnREYXRhLT52aWV3LmggPiAwKQorICAgICAgICBweSA9IHN0YXRpY19j
YXN0PGRvdWJsZT4oeSArIGNlbnRlclkpIC8gKGhlaWdodCArIHNtYXJ0RGF0YS0+dmlldy5oKTsK
ICAgICBlbHNlCiAgICAgICAgIHB5ID0gMC4wOwogCi0gICAgcmV0ID0gZXdrX2ZyYW1lX3BhZ2Vf
em9vbV9zZXQoc21hcnREYXRhLT5tYWluX2ZyYW1lLCB6b29tKTsKKyAgICByZXN1bHQgPSBld2tf
ZnJhbWVfcGFnZV96b29tX3NldChzbWFydERhdGEtPm1haW5fZnJhbWUsIHpvb20pOwogCi0gICAg
ZXdrX2ZyYW1lX3Njcm9sbF9zaXplX2dldChzbWFydERhdGEtPm1haW5fZnJhbWUsICZ3LCAmaCk7
Ci0gICAgeCA9ICh3ICsgc21hcnREYXRhLT52aWV3LncpICogcHggLSBjZW50ZXJYOwotICAgIHkg
PSAoaCArIHNtYXJ0RGF0YS0+dmlldy5oKSAqIHB5IC0gY2VudGVyWTsKKyAgICBld2tfZnJhbWVf
c2Nyb2xsX3NpemVfZ2V0KHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSwgJndpZHRoLCAmaGVpZ2h0KTsK
KyAgICB4ID0gKHdpZHRoICsgc21hcnREYXRhLT52aWV3LncpICogcHggLSBjZW50ZXJYOworICAg
IHkgPSAoaGVpZ2h0ICsgc21hcnREYXRhLT52aWV3LmgpICogcHkgLSBjZW50ZXJZOwogICAgIGV3
a19mcmFtZV9zY3JvbGxfc2V0KHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSwgeCwgeSk7Ci0gICAgcmV0
dXJuIHJldDsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdf
c21hcnRfZmx1c2goRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhKQpAQCAtOTgyLDggKzk4
Miw4IEBAIHN0YXRpYyB2b2lkIF9ld2tfdmlld196b29tX2FuaW1hdGVkX21hcmtfc3RvcChFd2tf
Vmlld19TbWFydF9EYXRhKiBzbWFydERhdGEpCiBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfem9vbV9h
bmltYXRlZF9maW5pc2goRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhKQogewogICAgIEVX
S19WSUVXX1BSSVZfR0VUKHNtYXJ0RGF0YSwgcHJpdik7Ci0gICAgZWNvcmVfYW5pbWF0b3JfZGVs
KHByaXYtPmFuaW1hdGVkX3pvb20uYW5pbWF0b3IpOwotICAgIHByaXYtPmFuaW1hdGVkX3pvb20u
YW5pbWF0b3IgPSAwOworICAgIGVjb3JlX2FuaW1hdG9yX2RlbChwcml2LT5hbmltYXRlZFpvb20u
YW5pbWF0b3IpOworICAgIHByaXYtPmFuaW1hdGVkWm9vbS5hbmltYXRvciA9IDA7CiAgICAgX2V3
a192aWV3X3pvb21fYW5pbWF0ZWRfbWFya19zdG9wKHNtYXJ0RGF0YSk7CiAgICAgZXZhc19vYmpl
Y3Rfc21hcnRfY2FsbGJhY2tfY2FsbChzbWFydERhdGEtPnNlbGYsICJ6b29tLGFuaW1hdGVkLGVu
ZCIsIDApOwogfQpAQCAtOTkxLDY5ICs5OTEsNjkgQEAgc3RhdGljIHZvaWQgX2V3a192aWV3X3pv
b21fYW5pbWF0ZWRfZmluaXNoKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSkKIHN0YXRp
YyBmbG9hdCBfZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9jdXJyZW50KEV3a19WaWV3X1ByaXZhdGVf
RGF0YSogcHJpdikKIHsKICAgICBkb3VibGUgbm93ID0gZWNvcmVfbG9vcF90aW1lX2dldCgpOwot
ICAgIGRvdWJsZSBkZWx0YSA9IG5vdyAtIHByaXYtPmFuaW1hdGVkX3pvb20udGltZS5zdGFydDsK
KyAgICBkb3VibGUgZGVsdGEgPSBub3cgLSBwcml2LT5hbmltYXRlZFpvb20udGltZS5zdGFydDsK
IAotICAgIGlmIChkZWx0YSA+IHByaXYtPmFuaW1hdGVkX3pvb20udGltZS5kdXJhdGlvbikKLSAg
ICAgICAgZGVsdGEgPSBwcml2LT5hbmltYXRlZF96b29tLnRpbWUuZHVyYXRpb247CisgICAgaWYg
KGRlbHRhID4gcHJpdi0+YW5pbWF0ZWRab29tLnRpbWUuZHVyYXRpb24pCisgICAgICAgIGRlbHRh
ID0gcHJpdi0+YW5pbWF0ZWRab29tLnRpbWUuZHVyYXRpb247CiAgICAgaWYgKGRlbHRhIDwgMC4w
KSAvLyB0aW1lIHdlbnQgYmFjaywgY2xvY2sgYWRqdXN0ZWQ/CiAgICAgICAgIGRlbHRhID0gMC4w
OwogCi0gICAgZGVsdGEgLz0gcHJpdi0+YW5pbWF0ZWRfem9vbS50aW1lLmR1cmF0aW9uOworICAg
IGRlbHRhIC89IHByaXYtPmFuaW1hdGVkWm9vbS50aW1lLmR1cmF0aW9uOwogCi0gICAgcmV0dXJu
ICgocHJpdi0+YW5pbWF0ZWRfem9vbS56b29tLnJhbmdlICogZGVsdGEpCi0gICAgICAgICAgICAr
IHByaXYtPmFuaW1hdGVkX3pvb20uem9vbS5zdGFydCk7CisgICAgcmV0dXJuICgocHJpdi0+YW5p
bWF0ZWRab29tLnpvb20ucmFuZ2UgKiBkZWx0YSkKKyAgICAgICAgICAgICsgcHJpdi0+YW5pbWF0
ZWRab29tLnpvb20uc3RhcnQpOwogfQogCiBzdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld196b29t
X2FuaW1hdG9yX2NiKHZvaWQqIGRhdGEpCiB7Ci0gICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc2Qg
PSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZGF0YSk7Ci0gICAgRXZhc19Db29y
ZCBjeCwgY3k7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVQoc2QsIHByaXYpOworICAgIEV3a19WaWV3
X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEq
PihkYXRhKTsKKyAgICBFdmFzX0Nvb3JkIGNlbnRlclgsIGNlbnRlclk7CisgICAgRVdLX1ZJRVdf
UFJJVl9HRVQoc21hcnREYXRhLCBwcml2KTsKICAgICBkb3VibGUgbm93ID0gZWNvcmVfbG9vcF90
aW1lX2dldCgpOwogCi0gICAgY3ggPSBwcml2LT5hbmltYXRlZF96b29tLmNlbnRlci54OwotICAg
IGN5ID0gcHJpdi0+YW5pbWF0ZWRfem9vbS5jZW50ZXIueTsKKyAgICBjZW50ZXJYID0gcHJpdi0+
YW5pbWF0ZWRab29tLmNlbnRlci54OworICAgIGNlbnRlclkgPSBwcml2LT5hbmltYXRlZFpvb20u
Y2VudGVyLnk7CiAKICAgICAvLyBUT0RPOiBwcm9ncmVzc2l2ZWx5IGNlbnRlciAoY3gsIGN5KSAt
PiAodmlldy54ICsgdmlldy5oLzIsIHZpZXcueSArIHZpZXcuaC8yKQotICAgIGlmIChjeCA+PSBz
ZC0+dmlldy53KQotICAgICAgICBjeCA9IHNkLT52aWV3LncgLSAxOwotICAgIGlmIChjeSA+PSBz
ZC0+dmlldy5oKQotICAgICAgICBjeSA9IHNkLT52aWV3LmggLSAxOwotCi0gICAgaWYgKChub3cg
Pj0gcHJpdi0+YW5pbWF0ZWRfem9vbS50aW1lLmVuZCkKLSAgICAgICAgfHwgKG5vdyA8IHByaXYt
PmFuaW1hdGVkX3pvb20udGltZS5zdGFydCkpIHsKLSAgICAgICAgX2V3a192aWV3X3pvb21fYW5p
bWF0ZWRfZmluaXNoKHNkKTsKLSAgICAgICAgZXdrX3ZpZXdfem9vbV9zZXQoc2QtPnNlbGYsIHBy
aXYtPmFuaW1hdGVkX3pvb20uem9vbS5lbmQsIGN4LCBjeSk7Ci0gICAgICAgIHNkLT5hcGktPnNj
LmNhbGN1bGF0ZShzZC0+c2VsZik7CisgICAgaWYgKGNlbnRlclggPj0gc21hcnREYXRhLT52aWV3
LncpCisgICAgICAgIGNlbnRlclggPSBzbWFydERhdGEtPnZpZXcudyAtIDE7CisgICAgaWYgKGNl
bnRlclkgPj0gc21hcnREYXRhLT52aWV3LmgpCisgICAgICAgIGNlbnRlclkgPSBzbWFydERhdGEt
PnZpZXcuaCAtIDE7CisKKyAgICBpZiAoKG5vdyA+PSBwcml2LT5hbmltYXRlZFpvb20udGltZS5l
bmQpCisgICAgICAgIHx8IChub3cgPCBwcml2LT5hbmltYXRlZFpvb20udGltZS5zdGFydCkpIHsK
KyAgICAgICAgX2V3a192aWV3X3pvb21fYW5pbWF0ZWRfZmluaXNoKHNtYXJ0RGF0YSk7CisgICAg
ICAgIGV3a192aWV3X3pvb21fc2V0KHNtYXJ0RGF0YS0+c2VsZiwgcHJpdi0+YW5pbWF0ZWRab29t
Lnpvb20uZW5kLCBjZW50ZXJYLCBjZW50ZXJZKTsKKyAgICAgICAgc21hcnREYXRhLT5hcGktPnNj
LmNhbGN1bGF0ZShzbWFydERhdGEtPnNlbGYpOwogICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsK
ICAgICB9CiAKLSAgICBzZC0+YW5pbWF0ZWRfem9vbS56b29tLmN1cnJlbnQgPSBfZXdrX3ZpZXdf
em9vbV9hbmltYXRlZF9jdXJyZW50KHByaXYpOwotICAgIHNkLT5hcGktPnpvb21fd2Vha19zZXQo
c2QsIHNkLT5hbmltYXRlZF96b29tLnpvb20uY3VycmVudCwgY3gsIGN5KTsKKyAgICBzbWFydERh
dGEtPmFuaW1hdGVkX3pvb20uem9vbS5jdXJyZW50ID0gX2V3a192aWV3X3pvb21fYW5pbWF0ZWRf
Y3VycmVudChwcml2KTsKKyAgICBzbWFydERhdGEtPmFwaS0+em9vbV93ZWFrX3NldChzbWFydERh
dGEsIHNtYXJ0RGF0YS0+YW5pbWF0ZWRfem9vbS56b29tLmN1cnJlbnQsIGNlbnRlclgsIGNlbnRl
clkpOwogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKIHN0YXRpYyB2b2lkIF9ld2tfdmlld196
b29tX2FuaW1hdGlvbl9zdGFydChFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEpCiB7CiAg
ICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdik7Ci0gICAgaWYg
KHByaXYtPmFuaW1hdGVkX3pvb20uYW5pbWF0b3IpCisgICAgaWYgKHByaXYtPmFuaW1hdGVkWm9v
bS5hbmltYXRvcikKICAgICAgICAgcmV0dXJuOwotICAgIHByaXYtPmFuaW1hdGVkX3pvb20uYW5p
bWF0b3IgPSBlY29yZV9hbmltYXRvcl9hZGQKKyAgICBwcml2LT5hbmltYXRlZFpvb20uYW5pbWF0
b3IgPSBlY29yZV9hbmltYXRvcl9hZGQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChfZXdrX3ZpZXdfem9vbV9hbmltYXRvcl9jYiwgc21hcnREYXRhKTsKIH0KIAogc3Rh
dGljIFdlYkNvcmU6OlZpZXdwb3J0QXR0cmlidXRlcyBfZXdrX3ZpZXdfdmlld3BvcnRfYXR0cmli
dXRlc19jb21wdXRlKGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVX
X1NEX0dFVChld2tWaWV3LCBzZCk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVQoc2QsIHByaXYpOwor
ICAgIEVXS19WSUVXX1NEX0dFVChld2tWaWV3LCBzbWFydERhdGEpOworICAgIEVXS19WSUVXX1BS
SVZfR0VUKHNtYXJ0RGF0YSwgcHJpdik7CiAKLSAgICBpbnQgZGVza3RvcF93aWR0aCA9IDk4MDsK
LSAgICBpbnQgZGV2aWNlX2RwaSA9IGV3a191dGlsX2RwaV9nZXQoKTsKKyAgICBpbnQgZGVza3Rv
cFdpZHRoID0gOTgwOworICAgIGludCBkZXZpY2VEUEkgPSBld2tfdXRpbF9kcGlfZ2V0KCk7CiAK
LSAgICBXZWJDb3JlOjpJbnRSZWN0IGF2YWlsYWJsZV9yZWN0ID0gZW5jbG9zaW5nSW50UmVjdChw
cml2LT5wYWdlLT5jaHJvbWUoKS0+Y2xpZW50KCktPnBhZ2VSZWN0KCkpOwotICAgIFdlYkNvcmU6
OkludFJlY3QgZGV2aWNlX3JlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KHByaXYtPnBhZ2UtPmNocm9t
ZSgpLT5jbGllbnQoKS0+d2luZG93UmVjdCgpKTsKKyAgICBXZWJDb3JlOjpJbnRSZWN0IGF2YWls
YWJsZVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KHByaXYtPnBhZ2UtPmNocm9tZSgpLT5jbGllbnQo
KS0+cGFnZVJlY3QoKSk7CisgICAgV2ViQ29yZTo6SW50UmVjdCBkZXZpY2VSZWN0ID0gZW5jbG9z
aW5nSW50UmVjdChwcml2LT5wYWdlLT5jaHJvbWUoKS0+Y2xpZW50KCktPndpbmRvd1JlY3QoKSk7
CiAKLSAgICBXZWJDb3JlOjpWaWV3cG9ydEF0dHJpYnV0ZXMgYXR0cmlidXRlcyA9IFdlYkNvcmU6
OmNvbXB1dGVWaWV3cG9ydEF0dHJpYnV0ZXMocHJpdi0+dmlld3BvcnRfYXJndW1lbnRzLCBkZXNr
dG9wX3dpZHRoLCBkZXZpY2VfcmVjdC53aWR0aCgpLCBkZXZpY2VfcmVjdC5oZWlnaHQoKSwgZGV2
aWNlX2RwaSwgYXZhaWxhYmxlX3JlY3Quc2l6ZSgpKTsKKyAgICBXZWJDb3JlOjpWaWV3cG9ydEF0
dHJpYnV0ZXMgYXR0cmlidXRlcyA9IFdlYkNvcmU6OmNvbXB1dGVWaWV3cG9ydEF0dHJpYnV0ZXMo
cHJpdi0+dmlld3BvcnRBcmd1bWVudHMsIGRlc2t0b3BXaWR0aCwgZGV2aWNlUmVjdC53aWR0aCgp
LCBkZXZpY2VSZWN0LmhlaWdodCgpLCBkZXZpY2VEUEksIGF2YWlsYWJsZVJlY3Quc2l6ZSgpKTsK
IAogICAgIHJldHVybiBhdHRyaWJ1dGVzOwogfQpAQCAtMTEyMywxMCArMTEyMywxMCBAQCBFaW5h
X0Jvb2wgZXdrX3ZpZXdfYmFzZV9zbWFydF9zZXQoRXdrX1ZpZXdfU21hcnRfQ2xhc3MqIGFwaSkK
IAogdm9pZCBld2tfdmlld19maXhlZF9sYXlvdXRfc2l6ZV9zZXQoRXZhc19PYmplY3QqIGV3a1Zp
ZXcsIEV2YXNfQ29vcmQgd2lkdGgsIEV2YXNfQ29vcmQgaGVpZ2h0KQogewotICAgIEVXS19WSUVX
X1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09S
X1JFVFVSTihzZCwgcHJpdik7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3
LCBzbWFydERhdGEpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEs
IHByaXYpOwogCi0gICAgV2ViQ29yZTo6RnJhbWVWaWV3KiB2aWV3ID0gcHJpdi0+bWFpbl9mcmFt
ZS0+dmlldygpOworICAgIFdlYkNvcmU6OkZyYW1lVmlldyogdmlldyA9IHByaXYtPm1haW5GcmFt
ZS0+dmlldygpOwogICAgIGlmICh3aWR0aCA8PSAwICYmIGhlaWdodCA8PSAwKSB7CiAgICAgICAg
IGlmICghdmlldy0+dXNlRml4ZWRMYXlvdXQoKSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTEx
NTEsOSArMTE1MSw5IEBAIHZvaWQgZXdrX3ZpZXdfZml4ZWRfbGF5b3V0X3NpemVfZ2V0KGNvbnN0
IEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFdmFzX0Nvb3JkKiB3aWR0CiAgICAgICAgICp3aWR0aCA9
IDA7CiAgICAgaWYgKGhlaWdodCkKICAgICAgICAgKmhlaWdodCA9IDA7Ci0gICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1Jf
UkVUVVJOKHNkLCBwcml2KTsKLSAgICBXZWJDb3JlOjpGcmFtZVZpZXcqIHZpZXcgPSBwcml2LT5t
YWluX2ZyYW1lLT52aWV3KCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3
LCBzbWFydERhdGEpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEs
IHByaXYpOworICAgIFdlYkNvcmU6OkZyYW1lVmlldyogdmlldyA9IHByaXYtPm1haW5GcmFtZS0+
dmlldygpOwogICAgIGlmICh2aWV3LT51c2VGaXhlZExheW91dCgpKSB7CiAgICAgICAgIFdlYkNv
cmU6OkludFNpemUgc2l6ZSA9IHZpZXctPmZpeGVkTGF5b3V0U2l6ZSgpOwogICAgICAgICBpZiAo
d2lkdGgpCkBAIC0xMTY1LDEyICsxMTY1LDEyIEBAIHZvaWQgZXdrX3ZpZXdfZml4ZWRfbGF5b3V0
X3NpemVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFdmFzX0Nvb3JkKiB3aWR0CiAK
IHZvaWQgZXdrX3ZpZXdfdGhlbWVfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBjaGFy
KiBwYXRoKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QpOwot
ICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdik7CisgICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEpOworICAgIEVXS19WSUVXX1BSSVZf
R0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYpOwogICAgIGlmICghZWluYV9zdHJpbmdzaGFy
ZV9yZXBsYWNlKCZwcml2LT5zZXR0aW5ncy50aGVtZSwgcGF0aCkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIFdlYkNvcmU6OkZyYW1lVmlldyogdmlldyA9IHByaXYtPm1haW5fZnJhbWUtPnZpZXco
KTsKKyAgICBXZWJDb3JlOjpGcmFtZVZpZXcqIHZpZXcgPSBwcml2LT5tYWluRnJhbWUtPnZpZXco
KTsKICAgICBpZiAodmlldykgewogICAgICAgICB2aWV3LT5zZXRFZGplVGhlbWUoV1RGOjpTdHJp
bmcocGF0aCkpOwogICAgICAgICBwcml2LT5wYWdlLT50aGVtZSgpLT50aGVtZUNoYW5nZWQoKTsK
QEAgLTExODAsMjEgKzExODAsMjEgQEAgdm9pZCBld2tfdmlld190aGVtZV9zZXQoRXZhc19PYmpl
Y3QqIGV3a1ZpZXcsIGNvbnN0IGNoYXIqIHBhdGgpCiAKIGNvbnN0IGNoYXIqIGV3a192aWV3X3Ro
ZW1lX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9H
RVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAwKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9S
RVRVUk4oc2QsIHByaXYsIDApOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmll
dywgc21hcnREYXRhLCAwKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnRE
YXRhLCBwcml2LCAwKTsKICAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MudGhlbWU7CiB9CiAKIEV2
YXNfT2JqZWN0KiBld2tfdmlld19mcmFtZV9tYWluX2dldChjb25zdCBFdmFzX09iamVjdCogZXdr
VmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAwKTsK
LSAgICByZXR1cm4gc2QtPm1haW5fZnJhbWU7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
Tihld2tWaWV3LCBzbWFydERhdGEsIDApOworICAgIHJldHVybiBzbWFydERhdGEtPm1haW5fZnJh
bWU7CiB9CiAKIEV2YXNfT2JqZWN0KiBld2tfdmlld19mcmFtZV9mb2N1c2VkX2dldChjb25zdCBF
dmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3
a1ZpZXcsIHNkLCAwKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYs
IDApOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCAw
KTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCAwKTsK
IAogICAgIFdlYkNvcmU6OkZyYW1lKiBjb3JlID0gcHJpdi0+cGFnZS0+Zm9jdXNDb250cm9sbGVy
KCktPmZvY3VzZWRGcmFtZSgpOwogICAgIGlmICghY29yZSkKQEAgLTEyMDgsMzMgKzEyMDgsMzMg
QEAgRXZhc19PYmplY3QqIGV3a192aWV3X2ZyYW1lX2ZvY3VzZWRfZ2V0KGNvbnN0IEV2YXNfT2Jq
ZWN0KiBld2tWaWV3KQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfdXJpX3NldChFdmFzX09iamVjdCog
ZXdrVmlldywgY29uc3QgY2hhciogdXJpKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRV
Uk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIHJldHVybiBld2tfZnJhbWVfdXJpX3Nl
dChzZC0+bWFpbl9mcmFtZSwgdXJpKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3
a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgcmV0dXJuIGV3a19mcmFtZV91cmlf
c2V0KHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSwgdXJpKTsKIH0KIAogY29uc3QgY2hhciogZXdrX3Zp
ZXdfdXJpX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19T
RF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAwKTsKLSAgICByZXR1cm4gZXdrX2ZyYW1lX3Vy
aV9nZXQoc2QtPm1haW5fZnJhbWUpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdr
Vmlldywgc21hcnREYXRhLCAwKTsKKyAgICByZXR1cm4gZXdrX2ZyYW1lX3VyaV9nZXQoc21hcnRE
YXRhLT5tYWluX2ZyYW1lKTsKIH0KIAogY29uc3QgY2hhciogZXdrX3ZpZXdfdGl0bGVfZ2V0KGNv
bnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRV
Uk4oZXdrVmlldywgc2QsIDApOwotICAgIHJldHVybiBld2tfZnJhbWVfdGl0bGVfZ2V0KHNkLT5t
YWluX2ZyYW1lKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0
RGF0YSwgMCk7CisgICAgcmV0dXJuIGV3a19mcmFtZV90aXRsZV9nZXQoc21hcnREYXRhLT5tYWlu
X2ZyYW1lKTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X2VkaXRhYmxlX2dldChjb25zdCBFdmFz
X09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1Zp
ZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICByZXR1cm4gZXdrX2ZyYW1lX2VkaXRhYmxlX2dldChz
ZC0+bWFpbl9mcmFtZSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBz
bWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIHJldHVybiBld2tfZnJhbWVfZWRpdGFibGVfZ2V0
KHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSk7CiB9CiAKIHZvaWQgZXdrX3ZpZXdfYmdfY29sb3Jfc2V0
KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBpbnQgcmVkLCBpbnQgZ3JlZW4sIGludCBibHVlLCBpbnQg
YWxwaGEpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCk7Ci0g
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFwaSk7Ci0gICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk4oc2QtPmFwaS0+YmdfY29sb3Jfc2V0KTsKKyAgICBFV0tfVklFV19TRF9H
RVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk4oc21hcnREYXRhLT5hcGkpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJO
KHNtYXJ0RGF0YS0+YXBpLT5iZ19jb2xvcl9zZXQpOwogCiAgICAgaWYgKGFscGhhIDwgMCkgewog
ICAgICAgICBXUk4oIkFscGhhIGxlc3MgdGhhbiB6ZXJvICglZCkuIiwgYWxwaGEpOwpAQCAtMTI0
NCwyOCArMTI0NCwyOCBAQCB2b2lkIGV3a192aWV3X2JnX2NvbG9yX3NldChFdmFzX09iamVjdCog
ZXdrVmlldywgaW50IHJlZCwgaW50IGdyZWVuLCBpbnQgYmx1ZSwgaQogICAgICAgICBhbHBoYSA9
IDI1NTsKICAgICB9CiAKLSNkZWZpbmUgQ0hFQ0tfUFJFTVVMX0NPTE9SKGMsIGEpICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoYyA8IDApIHsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAg
ICAgV1JOKCJDb2xvciBjb21wb25lbnQgIiAjYyAiIGlzIGxlc3MgdGhhbiB6ZXJvICglZCkuIiwg
Yyk7ICAgICAgICAgXAotICAgICAgICBjID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gZWxzZSBpZiAoYyA+IGEpIHsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAg
ICBXUk4oIkNvbG9yIGNvbXBvbmVudCAiICNjICIgaXMgZ3JlYXRlciB0aGFuIGFscGhhICglZCwg
YWxwaGE9JWQpLiIsIFwKLSAgICAgICAgICAgIGMsIGEpOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgYyA9IGE7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyNkZWZp
bmUgQ0hFQ0tfUFJFTVVMX0NPTE9SKGNvbG9yLCBhbHBoYSkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgIGlmIChjb2xvciA8IDApIHsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgV1JOKCJD
b2xvciBjb21wb25lbnQgIiAjY29sb3IgIiBpcyBsZXNzIHRoYW4gemVybyAoJWQpLiIsIGNvbG9y
KTsgICAgICAgICBcCisgICAgICAgIGNvbG9yID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gZWxzZSBpZiAoY29sb3Ig
PiBhbHBoYSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgICAgIFdSTigiQ29sb3IgY29tcG9uZW50ICIgI2NvbG9yICIgaXMgZ3JlYXRlciB0
aGFuIGFscGhhICglZCwgYWxwaGE9JWQpLiIsIFwKKyAgICAgICAgICAgIGNvbG9yLCBhbHBoYSk7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgICAgICBjb2xvciA9IGFscGhhOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgfQogICAgIENIRUNLX1BSRU1VTF9DT0xPUihy
ZWQsIGFscGhhKTsKICAgICBDSEVDS19QUkVNVUxfQ09MT1IoZ3JlZW4sIGFscGhhKTsKICAgICBD
SEVDS19QUkVNVUxfQ09MT1IoYmx1ZSwgYWxwaGEpOwogI3VuZGVmIENIRUNLX1BSRU1VTF9DT0xP
UgogCi0gICAgc2QtPmJnX2NvbG9yLnIgPSByZWQ7Ci0gICAgc2QtPmJnX2NvbG9yLmcgPSBncmVl
bjsKLSAgICBzZC0+YmdfY29sb3IuYiA9IGJsdWU7Ci0gICAgc2QtPmJnX2NvbG9yLmEgPSBhbHBo
YTsKKyAgICBzbWFydERhdGEtPmJnX2NvbG9yLnIgPSByZWQ7CisgICAgc21hcnREYXRhLT5iZ19j
b2xvci5nID0gZ3JlZW47CisgICAgc21hcnREYXRhLT5iZ19jb2xvci5iID0gYmx1ZTsKKyAgICBz
bWFydERhdGEtPmJnX2NvbG9yLmEgPSBhbHBoYTsKIAotICAgIHNkLT5hcGktPmJnX2NvbG9yX3Nl
dChzZCwgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOworICAgIHNtYXJ0RGF0YS0+YXBpLT5iZ19j
b2xvcl9zZXQoc21hcnREYXRhLCByZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7CiAKLSAgICBXZWJD
b3JlOjpGcmFtZVZpZXcqIHZpZXcgPSBzZC0+X3ByaXYtPm1haW5fZnJhbWUtPnZpZXcoKTsKKyAg
ICBXZWJDb3JlOjpGcmFtZVZpZXcqIHZpZXcgPSBzbWFydERhdGEtPl9wcml2LT5tYWluRnJhbWUt
PnZpZXcoKTsKICAgICBpZiAodmlldykgewogICAgICAgICBXZWJDb3JlOjpDb2xvciBjb2xvcjsK
IApAQCAtMTI5MCwyMSArMTI5MCwyMSBAQCB2b2lkIGV3a192aWV3X2JnX2NvbG9yX2dldChjb25z
dCBFdmFzX09iamVjdCogZXdrVmlldywgaW50KiByZWQsIGludCogZ3JlZW4sIGludAogICAgICAg
ICAqYmx1ZSA9IDA7CiAgICAgaWYgKGFscGhhKQogICAgICAgICAqYWxwaGEgPSAwOwotICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QpOworICAgIEVXS19WSUVXX1NEX0dF
VF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhKTsKICAgICBpZiAocmVkKQotICAgICAgICAq
cmVkID0gc2QtPmJnX2NvbG9yLnI7CisgICAgICAgICpyZWQgPSBzbWFydERhdGEtPmJnX2NvbG9y
LnI7CiAgICAgaWYgKGdyZWVuKQotICAgICAgICAqZ3JlZW4gPSBzZC0+YmdfY29sb3IuZzsKKyAg
ICAgICAgKmdyZWVuID0gc21hcnREYXRhLT5iZ19jb2xvci5nOwogICAgIGlmIChibHVlKQotICAg
ICAgICAqYmx1ZSA9IHNkLT5iZ19jb2xvci5iOworICAgICAgICAqYmx1ZSA9IHNtYXJ0RGF0YS0+
YmdfY29sb3IuYjsKICAgICBpZiAoYWxwaGEpCi0gICAgICAgICphbHBoYSA9IHNkLT5iZ19jb2xv
ci5hOworICAgICAgICAqYWxwaGEgPSBzbWFydERhdGEtPmJnX2NvbG9yLmE7CiB9CiAKIEVpbmFf
Qm9vbCBld2tfdmlld190ZXh0X3NlYXJjaChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldywgY29u
c3QgY2hhciogc3RyaW5nLCBFaW5hX0Jvb2wgY2FzZVNlbnNpdGl2ZSwgRWluYV9Cb29sIGZvcndh
cmQsIEVpbmFfQm9vbCB3cmFwKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdr
Vmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihz
ZCwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tW
aWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JF
VFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOX1ZBTChzdHJpbmcsIEVJTkFfRkFMU0UpOwogICAgIFdURjo6VGV4dENhc2VTZW5z
aXRpdml0eSBzZW5zaXRpdmU7CiAgICAgV2ViQ29yZTo6RmluZERpcmVjdGlvbiBkaXJlY3Rpb247
CkBAIC0xMzI1LDE4ICsxMzI1LDE4IEBAIEVpbmFfQm9vbCBld2tfdmlld190ZXh0X3NlYXJjaChj
b25zdCBFdmFzX09iamVjdCogZXdrVmlldywgY29uc3QgY2hhciogc3RyaW5nLCBFCiAvKioKICAq
IE1hcmsgbWF0Y2hlcyB0aGUgZ2l2ZW4gdGV4dCBzdHJpbmcgaW4gZG9jdW1lbnQuCiAgKgotICog
QHBhcmFtIG8gdmlldyBvYmplY3Qgd2hlcmUgdG8gc2VhcmNoIHRleHQuCisgKiBAcGFyYW0gZXdr
VmlldyB2aWV3IG9iamVjdCB3aGVyZSB0byBzZWFyY2ggdGV4dC4KICAqIEBwYXJhbSBzdHJpbmcg
cmVmZXJlbmNlIHN0cmluZyB0byBtYXRjaC4KICAqIEBwYXJhbSBjYXNlU2Vuc2l0aXZlIGlmIG1h
dGNoIHNob3VsZCBiZSBjYXNlIHNlbnNpdGl2ZSBvciBub3QuCi0gKiBAcGFyYW0gaGlnaGxpZ2h0
IGlmIG1hdGNoZXMgc2hvdWxkIGJlIGhpZ2hsaWdodGVkLgorICogQHBhcmFtIGhlaWdodGlnaGxp
Z2h0IGlmIG1hdGNoZXMgc2hvdWxkIGJlIGhpZ2hsaWdodGVkLgogICogQHBhcmFtIGxpbWl0IG1h
eGltdW0gYW1vdW50IG9mIG1hdGNoZXMsIG9yIHplcm8gdG8gdW5saW1pdGVkLgogICoKICAqIEBy
ZXR1cm4gbnVtYmVyIG9mIG1hdGNoZXMuCiAgKi8KIHVuc2lnbmVkIGludCBld2tfdmlld190ZXh0
X21hdGNoZXNfbWFyayhFdmFzX09iamVjdCogZXdrVmlldywgY29uc3QgY2hhciogc3RyaW5nLCBF
aW5hX0Jvb2wgY2FzZVNlbnNpdGl2ZSwgRWluYV9Cb29sIGhpZ2hsaWdodCwgdW5zaWduZWQgaW50
IGxpbWl0KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIDAp
OwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgMCk7CisgICAgRVdL
X1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIDApOworICAgIEVXS19W
SUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIDApOwogICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOX1ZBTChzdHJpbmcsIDApOwogICAgIFdURjo6VGV4dENhc2VTZW5z
aXRpdml0eSBzZW5zaXRpdmU7CiAKQEAgLTEzNTAsMzggKzEzNTAsMzggQEAgdW5zaWduZWQgaW50
IGV3a192aWV3X3RleHRfbWF0Y2hlc19tYXJrKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBj
aGFyKiBzdHJpbmcKIAogRWluYV9Cb29sIGV3a192aWV3X3RleHRfbWF0Y2hlc191bm1hcmtfYWxs
KEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVS
TihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihl
d2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09S
X1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIHByaXYtPnBhZ2UtPnVu
bWFya0FsbFRleHRNYXRjaGVzKCk7CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAogRWluYV9C
b29sIGV3a192aWV3X3RleHRfbWF0Y2hlc19oaWdobGlnaHRfc2V0KEV2YXNfT2JqZWN0KiBld2tW
aWV3LCBFaW5hX0Jvb2wgaGlnaGxpZ2h0KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRV
Uk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIHJldHVybiBld2tfZnJhbWVfdGV4dF9t
YXRjaGVzX2hpZ2hsaWdodF9zZXQoc2QtPm1haW5fZnJhbWUsIGhpZ2hsaWdodCk7CisgICAgRVdL
X1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOwor
ICAgIHJldHVybiBld2tfZnJhbWVfdGV4dF9tYXRjaGVzX2hpZ2hsaWdodF9zZXQoc21hcnREYXRh
LT5tYWluX2ZyYW1lLCBoaWdobGlnaHQpOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfdGV4dF9t
YXRjaGVzX2hpZ2hsaWdodF9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAg
RVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAg
cmV0dXJuIGV3a19mcmFtZV90ZXh0X21hdGNoZXNfaGlnaGxpZ2h0X2dldChzZC0+bWFpbl9mcmFt
ZSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJ
TkFfRkFMU0UpOworICAgIHJldHVybiBld2tfZnJhbWVfdGV4dF9tYXRjaGVzX2hpZ2hsaWdodF9n
ZXQoc21hcnREYXRhLT5tYWluX2ZyYW1lKTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X2VkaXRh
YmxlX3NldChFdmFzX09iamVjdCogZXdrVmlldywgRWluYV9Cb29sIGVkaXRhYmxlKQogewotICAg
IEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAg
IHJldHVybiBld2tfZnJhbWVfZWRpdGFibGVfc2V0KHNkLT5tYWluX2ZyYW1lLCBlZGl0YWJsZSk7
CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFf
RkFMU0UpOworICAgIHJldHVybiBld2tfZnJhbWVfZWRpdGFibGVfc2V0KHNtYXJ0RGF0YS0+bWFp
bl9mcmFtZSwgZWRpdGFibGUpOwogfQogCiBjaGFyKiBld2tfdmlld19zZWxlY3Rpb25fZ2V0KGNv
bnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRV
Uk4oZXdrVmlldywgc2QsIDApOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwg
cHJpdiwgMCk7Ci0gICAgQ1N0cmluZyBzID0gcHJpdi0+cGFnZS0+Zm9jdXNDb250cm9sbGVyKCkt
PmZvY3VzZWRPck1haW5GcmFtZSgpLT5lZGl0b3IoKS0+c2VsZWN0ZWRUZXh0KCkudXRmOCgpOwot
ICAgIGlmIChzLmlzTnVsbCgpKQorICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmll
dywgc21hcnREYXRhLCAwKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnRE
YXRhLCBwcml2LCAwKTsKKyAgICBDU3RyaW5nIHNlbGVjdGVkU3RyaW5nID0gcHJpdi0+cGFnZS0+
Zm9jdXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpLT5lZGl0b3IoKS0+c2VsZWN0
ZWRUZXh0KCkudXRmOCgpOworICAgIGlmIChzZWxlY3RlZFN0cmluZy5pc051bGwoKSkKICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIHN0cmR1cChzLmRhdGEoKSk7CisgICAgcmV0dXJuIHN0
cmR1cChzZWxlY3RlZFN0cmluZy5kYXRhKCkpOwogfQogCiBzdGF0aWMgRWluYV9Cb29sIF9ld2tf
dmlld19lZGl0b3JfY29tbWFuZChFd2tfVmlld19Qcml2YXRlX0RhdGEqIHByaXYsIGNvbnN0IGNo
YXIqIGNvbW1hbmQsIGNvbnN0IGNoYXIqIHZhbHVlID0gMCkKQEAgLTEzOTEsOCArMTM5MSw4IEBA
IHN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X2VkaXRvcl9jb21tYW5kKEV3a19WaWV3X1ByaXZh
dGVfRGF0YSogcHJpdiwgY29uc3QgY2hhCiAKIEVpbmFfQm9vbCBld2tfdmlld19leGVjdXRlX2Vk
aXRvcl9jb21tYW5kKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBFd2tfRWRpdG9yX0NvbW1h
bmQgY29tbWFuZCwgY29uc3QgY2hhciogdmFsdWUpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRf
T1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1Jf
UkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJ
Vl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CiAKICAgICBzd2l0
Y2ggKGNvbW1hbmQpIHsKICAgICBjYXNlIEVXS19FRElUT1JfQ09NTUFORF9JTlNFUlRfSU1BR0U6
CkBAIC0xNDE5LDIzICsxNDE5LDIzIEBAIEVpbmFfQm9vbCBld2tfdmlld19leGVjdXRlX2VkaXRv
cl9jb21tYW5kKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBFd2tfRWRpdG9yCiBFaW5hX0Jv
b2wgZXdrX3ZpZXdfY29udGV4dF9tZW51X2ZvcndhcmRfZXZlbnQoRXZhc19PYmplY3QqIGV3a1Zp
ZXcsIGNvbnN0IEV2YXNfRXZlbnRfTW91c2VfRG93biogZG93bkV2ZW50KQogewogI2lmIEVOQUJM
RShDT05URVhUX01FTlVTKQotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywg
c2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJp
diwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBz
bWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihz
bWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIEVpbmFfQm9vbCBtb3VzZV9wcmVzc19o
YW5kbGVkID0gRUlOQV9GQUxTRTsKIAogICAgIHByaXYtPnBhZ2UtPmNvbnRleHRNZW51Q29udHJv
bGxlcigpLT5jbGVhckNvbnRleHRNZW51KCk7Ci0gICAgV2ViQ29yZTo6RnJhbWUqIG1haW5fZnJh
bWUgPSBwcml2LT5wYWdlLT5tYWluRnJhbWUoKTsKKyAgICBXZWJDb3JlOjpGcmFtZSogbWFpbkZy
YW1lID0gcHJpdi0+cGFnZS0+bWFpbkZyYW1lKCk7CiAgICAgRXZhc19Db29yZCB4LCB5OwotICAg
IGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldChzZC0+c2VsZiwgJngsICZ5LCAwLCAwKTsKKyAgICBl
dmFzX29iamVjdF9nZW9tZXRyeV9nZXQoc21hcnREYXRhLT5zZWxmLCAmeCwgJnksIDAsIDApOwog
CiAgICAgV2ViQ29yZTo6UGxhdGZvcm1Nb3VzZUV2ZW50IGV2ZW50KGRvd25FdmVudCwgV2ViQ29y
ZTo6SW50UG9pbnQoeCwgeSkpOwogCi0gICAgaWYgKG1haW5fZnJhbWUtPnZpZXcoKSkgeworICAg
IGlmIChtYWluRnJhbWUtPnZpZXcoKSkgewogICAgICAgICBtb3VzZV9wcmVzc19oYW5kbGVkID0K
LSAgICAgICAgICAgIG1haW5fZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5oYW5kbGVNb3VzZVByZXNz
RXZlbnQoZXZlbnQpOworICAgICAgICAgICAgbWFpbkZyYW1lLT5ldmVudEhhbmRsZXIoKS0+aGFu
ZGxlTW91c2VQcmVzc0V2ZW50KGV2ZW50KTsKICAgICB9CiAKLSAgICBpZiAobWFpbl9mcmFtZS0+
ZXZlbnRIYW5kbGVyKCktPnNlbmRDb250ZXh0TWVudUV2ZW50KGV2ZW50KSkKKyAgICBpZiAobWFp
bkZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2VuZENvbnRleHRNZW51RXZlbnQoZXZlbnQpKQogICAg
ICAgICByZXR1cm4gRUlOQV9GQUxTRTsKIAogICAgIFdlYkNvcmU6OkNvbnRleHRNZW51KiBjb3Jl
TWVudSA9CkBAIC0xNDU0LDg0ICsxNDU0LDg0IEBAIEVpbmFfQm9vbCBld2tfdmlld19jb250ZXh0
X21lbnVfZm9yd2FyZF9ldmVudChFdmFzX09iamVjdCogZXdrVmlldywgY29uc3QgRXZhc19FCiAK
IGRvdWJsZSBld2tfdmlld19sb2FkX3Byb2dyZXNzX2dldChjb25zdCBFdmFzX09iamVjdCogZXdr
VmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAtMS4w
KTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIC0xLjApOworICAg
IEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCAtMS4wKTsKKyAg
ICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCAtMS4wKTsKICAg
ICByZXR1cm4gcHJpdi0+cGFnZS0+cHJvZ3Jlc3MoKS0+ZXN0aW1hdGVkUHJvZ3Jlc3MoKTsKIH0K
IAogRWluYV9Cb29sIGV3a192aWV3X3N0b3AoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAg
RVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAg
cmV0dXJuIGV3a19mcmFtZV9zdG9wKHNkLT5tYWluX2ZyYW1lKTsKKyAgICBFV0tfVklFV19TRF9H
RVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgcmV0dXJu
IGV3a19mcmFtZV9zdG9wKHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSk7CiB9CiAKIEVpbmFfQm9vbCBl
d2tfdmlld19yZWxvYWQoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgcmV0dXJuIGV3a19m
cmFtZV9yZWxvYWQoc2QtPm1haW5fZnJhbWUpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRV
Uk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICByZXR1cm4gZXdrX2ZyYW1l
X3JlbG9hZChzbWFydERhdGEtPm1haW5fZnJhbWUpOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdf
cmVsb2FkX2Z1bGwoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgcmV0dXJuIGV3a19mcmFt
ZV9yZWxvYWRfZnVsbChzZC0+bWFpbl9mcmFtZSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JF
VFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIHJldHVybiBld2tfZnJh
bWVfcmVsb2FkX2Z1bGwoc21hcnREYXRhLT5tYWluX2ZyYW1lKTsKIH0KIAogRWluYV9Cb29sIGV3
a192aWV3X2JhY2soRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgcmV0dXJuIGV3a19mcmFt
ZV9iYWNrKHNkLT5tYWluX2ZyYW1lKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3
a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgcmV0dXJuIGV3a19mcmFtZV9iYWNr
KHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSk7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19mb3J3YXJk
KEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIHJldHVybiBld2tfZnJhbWVfZm9yd2FyZChz
ZC0+bWFpbl9mcmFtZSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBz
bWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIHJldHVybiBld2tfZnJhbWVfZm9yd2FyZChzbWFy
dERhdGEtPm1haW5fZnJhbWUpOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfbmF2aWdhdGUoRXZh
c19PYmplY3QqIGV3a1ZpZXcsIGludCBzdGVwcykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1Jf
UkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICByZXR1cm4gZXdrX2ZyYW1lX25h
dmlnYXRlKHNkLT5tYWluX2ZyYW1lLCBzdGVwcyk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JF
VFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIHJldHVybiBld2tfZnJh
bWVfbmF2aWdhdGUoc21hcnREYXRhLT5tYWluX2ZyYW1lLCBzdGVwcyk7CiB9CiAKIEVpbmFfQm9v
bCBld2tfdmlld19iYWNrX3Bvc3NpYmxlKEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIHJl
dHVybiBld2tfZnJhbWVfYmFja19wb3NzaWJsZShzZC0+bWFpbl9mcmFtZSk7CisgICAgRVdLX1ZJ
RVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAg
IHJldHVybiBld2tfZnJhbWVfYmFja19wb3NzaWJsZShzbWFydERhdGEtPm1haW5fZnJhbWUpOwog
fQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfZm9yd2FyZF9wb3NzaWJsZShFdmFzX09iamVjdCogZXdr
VmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5B
X0ZBTFNFKTsKLSAgICByZXR1cm4gZXdrX2ZyYW1lX2ZvcndhcmRfcG9zc2libGUoc2QtPm1haW5f
ZnJhbWUpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRh
LCBFSU5BX0ZBTFNFKTsKKyAgICByZXR1cm4gZXdrX2ZyYW1lX2ZvcndhcmRfcG9zc2libGUoc21h
cnREYXRhLT5tYWluX2ZyYW1lKTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X25hdmlnYXRlX3Bv
c3NpYmxlKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBpbnQgc3RlcHMpCiB7Ci0gICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgcmV0dXJuIGV3
a19mcmFtZV9uYXZpZ2F0ZV9wb3NzaWJsZShzZC0+bWFpbl9mcmFtZSwgc3RlcHMpOworICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsK
KyAgICByZXR1cm4gZXdrX2ZyYW1lX25hdmlnYXRlX3Bvc3NpYmxlKHNtYXJ0RGF0YS0+bWFpbl9m
cmFtZSwgc3RlcHMpOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfaGlzdG9yeV9lbmFibGVfZ2V0
KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9S
RVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09S
X1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JF
VFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZf
R0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIHJldHVybiBz
dGF0aWNfY2FzdDxXZWJDb3JlOjpCYWNrRm9yd2FyZExpc3RJbXBsKj4ocHJpdi0+cGFnZS0+YmFj
a0ZvcndhcmRMaXN0KCkpLT5lbmFibGVkKCk7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19oaXN0
b3J5X2VuYWJsZV9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCBlbmFibGUpCiB7
Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7
Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsK
KyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9G
QUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwg
RUlOQV9GQUxTRSk7CiAgICAgc3RhdGljX2Nhc3Q8V2ViQ29yZTo6QmFja0ZvcndhcmRMaXN0SW1w
bCo+KHByaXYtPnBhZ2UtPmJhY2tGb3J3YXJkTGlzdCgpKS0+c2V0RW5hYmxlZChlbmFibGUpOwog
ICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKIEV3a19IaXN0b3J5KiBld2tfdmlld19oaXN0b3J5
X2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRf
T1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAwKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRV
Uk4oc2QsIHByaXYsIDApOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywg
c21hcnREYXRhLCAwKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRh
LCBwcml2LCAwKTsKICAgICBpZiAoIXN0YXRpY19jYXN0PFdlYkNvcmU6OkJhY2tGb3J3YXJkTGlz
dEltcGwqPihwcml2LT5wYWdlLT5iYWNrRm9yd2FyZExpc3QoKSktPmVuYWJsZWQoKSkgewogICAg
ICAgICBFUlIoImFza2VkIGhpc3RvcnksIGJ1dCBpdCdzIGRpc2FibGVkISBSZXR1cm5pbmcgMCEi
KTsKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xNTQxLDE4NiArMTU0MSwxODYgQEAgRXdrX0hpc3Rv
cnkqIGV3a192aWV3X2hpc3RvcnlfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogCiBm
bG9hdCBld2tfdmlld196b29tX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAtMS4wKTsKLSAgICByZXR1
cm4gZXdrX2ZyYW1lX3BhZ2Vfem9vbV9nZXQoc2QtPm1haW5fZnJhbWUpOworICAgIEVXS19WSUVX
X1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCAtMS4wKTsKKyAgICByZXR1cm4g
ZXdrX2ZyYW1lX3BhZ2Vfem9vbV9nZXQoc21hcnREYXRhLT5tYWluX2ZyYW1lKTsKIH0KIAotRWlu
YV9Cb29sIGV3a192aWV3X3pvb21fc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBmbG9hdCB6b29t
LCBFdmFzX0Nvb3JkIGN4LCBFdmFzX0Nvb3JkIGN5KQorRWluYV9Cb29sIGV3a192aWV3X3pvb21f
c2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBmbG9hdCB6b29tLCBFdmFzX0Nvb3JkIGNlbnRlclgs
IEV2YXNfQ29vcmQgY2VudGVyWSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3
a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVChzZCwgcHJpdik7
CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFf
RkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUKHNtYXJ0RGF0YSwgcHJpdik7CiAKLSAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmFwaSwgRUlOQV9GQUxTRSk7Ci0gICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5hcGktPnpvb21fc2V0LCBFSU5BX0ZB
TFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5hcGks
IEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERh
dGEtPmFwaS0+em9vbV9zZXQsIEVJTkFfRkFMU0UpOwogCi0gICAgaWYgKCFwcml2LT5zZXR0aW5n
cy56b29tX3JhbmdlLnVzZXJfc2NhbGFibGUpIHsKKyAgICBpZiAoIXByaXYtPnNldHRpbmdzLnpv
b21SYW5nZS51c2VyU2NhbGFibGUpIHsKICAgICAgICAgV1JOKCJ1c2VyU2NhbGFibGUgaXMgZmFs
c2UiKTsKICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CiAgICAgfQogCi0gICAgaWYgKHpvb20g
PCBwcml2LT5zZXR0aW5ncy56b29tX3JhbmdlLm1pbl9zY2FsZSkgewotICAgICAgICBXUk4oInpv
b20gbGV2ZWwgaXMgPCAlZiA6ICVmIiwgcHJpdi0+c2V0dGluZ3Muem9vbV9yYW5nZS5taW5fc2Nh
bGUsIHpvb20pOworICAgIGlmICh6b29tIDwgcHJpdi0+c2V0dGluZ3Muem9vbVJhbmdlLm1pblNj
YWxlKSB7CisgICAgICAgIFdSTigiem9vbSBsZXZlbCBpcyA8ICVmIDogJWYiLCBwcml2LT5zZXR0
aW5ncy56b29tUmFuZ2UubWluU2NhbGUsIHpvb20pOwogICAgICAgICByZXR1cm4gRUlOQV9GQUxT
RTsKICAgICB9Ci0gICAgaWYgKHpvb20gPiBwcml2LT5zZXR0aW5ncy56b29tX3JhbmdlLm1heF9z
Y2FsZSkgewotICAgICAgICBXUk4oInpvb20gbGV2ZWwgaXMgPiAlZiA6ICVmIiwgcHJpdi0+c2V0
dGluZ3Muem9vbV9yYW5nZS5tYXhfc2NhbGUsIHpvb20pOworICAgIGlmICh6b29tID4gcHJpdi0+
c2V0dGluZ3Muem9vbVJhbmdlLm1heFNjYWxlKSB7CisgICAgICAgIFdSTigiem9vbSBsZXZlbCBp
cyA+ICVmIDogJWYiLCBwcml2LT5zZXR0aW5ncy56b29tUmFuZ2UubWF4U2NhbGUsIHpvb20pOwog
ICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKICAgICB9CiAKLSAgICBfZXdrX3ZpZXdfem9vbV9h
bmltYXRlZF9tYXJrX3N0b3Aoc2QpOwotICAgIHJldHVybiBzZC0+YXBpLT56b29tX3NldChzZCwg
em9vbSwgY3gsIGN5KTsKKyAgICBfZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9tYXJrX3N0b3Aoc21h
cnREYXRhKTsKKyAgICByZXR1cm4gc21hcnREYXRhLT5hcGktPnpvb21fc2V0KHNtYXJ0RGF0YSwg
em9vbSwgY2VudGVyWCwgY2VudGVyWSk7CiB9CiAKIGZsb2F0IGV3a192aWV3X3BhZ2Vfem9vbV9n
ZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihld2tWaWV3LCBzZCwgLTEuMCk7Ci0gICAgcmV0dXJuIGV3a19mcmFtZV9wYWdlX3pv
b21fZ2V0KHNkLT5tYWluX2ZyYW1lKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3
a1ZpZXcsIHNtYXJ0RGF0YSwgLTEuMCk7CisgICAgcmV0dXJuIGV3a19mcmFtZV9wYWdlX3pvb21f
Z2V0KHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSk7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19wYWdl
X3pvb21fc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBmbG9hdCBwYWdlWm9vbUZhY3RvcikKIHsK
LSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsK
LSAgICByZXR1cm4gZXdrX2ZyYW1lX3BhZ2Vfem9vbV9zZXQoc2QtPm1haW5fZnJhbWUsIHBhZ2Va
b29tRmFjdG9yKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0
RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgcmV0dXJuIGV3a19mcmFtZV9wYWdlX3pvb21fc2V0KHNt
YXJ0RGF0YS0+bWFpbl9mcmFtZSwgcGFnZVpvb21GYWN0b3IpOwogfQogCiBmbG9hdCBld2tfdmll
d19zY2FsZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgLTEuMCk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9H
RVRfT1JfUkVUVVJOKHNkLCBwcml2LCAtMS4wKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVU
VVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgLTEuMCk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1Jf
UkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgLTEuMCk7CiAgICAgcmV0dXJuIHByaXYtPnBhZ2UtPnBh
Z2VTY2FsZUZhY3RvcigpOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfc2NhbGVfc2V0KEV2YXNf
T2JqZWN0KiBld2tWaWV3LCBmbG9hdCBzY2FsZUZhY3RvciwgRXZhc19Db29yZCBjeCwgRXZhc19D
b29yZCBjeSkKK0VpbmFfQm9vbCBld2tfdmlld19zY2FsZV9zZXQoRXZhc19PYmplY3QqIGV3a1Zp
ZXcsIGZsb2F0IHNjYWxlRmFjdG9yLCBFdmFzX0Nvb3JkIGNlbnRlclgsIEV2YXNfQ29vcmQgY2Vu
dGVyWSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5B
X0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFf
RkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRh
LCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRh
LCBwcml2LCBFSU5BX0ZBTFNFKTsKIAogICAgIGZsb2F0IGN1cnJlbnRTY2FsZUZhY3RvciA9IGV3
a192aWV3X3NjYWxlX2dldChld2tWaWV3KTsKICAgICBpZiAoY3VycmVudFNjYWxlRmFjdG9yID09
IC0xKQogICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKIAogICAgIGludCB4LCB5OwotICAgIGV3
a19mcmFtZV9zY3JvbGxfcG9zX2dldChzZC0+bWFpbl9mcmFtZSwgJngsICZ5KTsKKyAgICBld2tf
ZnJhbWVfc2Nyb2xsX3Bvc19nZXQoc21hcnREYXRhLT5tYWluX2ZyYW1lLCAmeCwgJnkpOwogCi0g
ICAgeCA9IHN0YXRpY19jYXN0PGludD4oKCh4ICsgY3gpIC8gY3VycmVudFNjYWxlRmFjdG9yKSAq
IHNjYWxlRmFjdG9yKSAtIGN4OwotICAgIHkgPSBzdGF0aWNfY2FzdDxpbnQ+KCgoeSArIGN5KSAv
IGN1cnJlbnRTY2FsZUZhY3RvcikgKiBzY2FsZUZhY3RvcikgLSBjeTsKKyAgICB4ID0gc3RhdGlj
X2Nhc3Q8aW50PigoKHggKyBjZW50ZXJYKSAvIGN1cnJlbnRTY2FsZUZhY3RvcikgKiBzY2FsZUZh
Y3RvcikgLSBjZW50ZXJYOworICAgIHkgPSBzdGF0aWNfY2FzdDxpbnQ+KCgoeSArIGNlbnRlclkp
IC8gY3VycmVudFNjYWxlRmFjdG9yKSAqIHNjYWxlRmFjdG9yKSAtIGNlbnRlclk7CiAgICAgcHJp
di0+cGFnZS0+c2V0UGFnZVNjYWxlRmFjdG9yKHNjYWxlRmFjdG9yLCBXZWJDb3JlOjpMYXlvdXRQ
b2ludCh4LCB5KSk7CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAogZmxvYXQgZXdrX3ZpZXdf
dGV4dF96b29tX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklF
V19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAtMS4wKTsKLSAgICByZXR1cm4gZXdrX2Zy
YW1lX3RleHRfem9vbV9nZXQoc2QtPm1haW5fZnJhbWUpOworICAgIEVXS19WSUVXX1NEX0dFVF9P
Ul9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCAtMS4wKTsKKyAgICByZXR1cm4gZXdrX2ZyYW1l
X3RleHRfem9vbV9nZXQoc21hcnREYXRhLT5tYWluX2ZyYW1lKTsKIH0KIAogRWluYV9Cb29sIGV3
a192aWV3X3RleHRfem9vbV9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGZsb2F0IHRleHRab29t
RmFjdG9yKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJ
TkFfRkFMU0UpOwotICAgIHJldHVybiBld2tfZnJhbWVfdGV4dF96b29tX3NldChzZC0+bWFpbl9m
cmFtZSwgdGV4dFpvb21GYWN0b3IpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdr
Vmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICByZXR1cm4gZXdrX2ZyYW1lX3RleHRf
em9vbV9zZXQoc21hcnREYXRhLT5tYWluX2ZyYW1lLCB0ZXh0Wm9vbUZhY3Rvcik7CiB9CiAKIEVp
bmFfQm9vbCBld2tfdmlld196b29tX3dlYWtfc21vb3RoX3NjYWxlX2dldChjb25zdCBFdmFzX09i
amVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcs
IHNkLCBFSU5BX0ZBTFNFKTsKLSAgICByZXR1cm4gc2QtPnpvb21fd2Vha19zbW9vdGhfc2NhbGU7
CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFf
RkFMU0UpOworICAgIHJldHVybiBzbWFydERhdGEtPnpvb21fd2Vha19zbW9vdGhfc2NhbGU7CiB9
CiAKIHZvaWQgZXdrX3ZpZXdfem9vbV93ZWFrX3Ntb290aF9zY2FsZV9zZXQoRXZhc19PYmplY3Qq
IGV3a1ZpZXcsIEVpbmFfQm9vbCBzbW9vdGhTY2FsZSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRf
T1JfUkVUVVJOKGV3a1ZpZXcsIHNkKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3
a1ZpZXcsIHNtYXJ0RGF0YSk7CiAgICAgc21vb3RoU2NhbGUgPSAhIXNtb290aFNjYWxlOwotICAg
IGlmIChzZC0+em9vbV93ZWFrX3Ntb290aF9zY2FsZSA9PSBzbW9vdGhTY2FsZSkKKyAgICBpZiAo
c21hcnREYXRhLT56b29tX3dlYWtfc21vb3RoX3NjYWxlID09IHNtb290aFNjYWxlKQogICAgICAg
ICByZXR1cm47Ci0gICAgc2QtPnpvb21fd2Vha19zbW9vdGhfc2NhbGUgPSBzbW9vdGhTY2FsZTsK
LSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpKTsKLSAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpLT56b29tX3dlYWtfc21vb3RoX3NjYWxlX3NldCk7Ci0g
ICAgc2QtPmFwaS0+em9vbV93ZWFrX3Ntb290aF9zY2FsZV9zZXQoc2QsIHNtb290aFNjYWxlKTsK
KyAgICBzbWFydERhdGEtPnpvb21fd2Vha19zbW9vdGhfc2NhbGUgPSBzbW9vdGhTY2FsZTsKKyAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmFwaSk7CisgICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRhLT5hcGktPnpvb21fd2Vha19zbW9vdGhfc2Nh
bGVfc2V0KTsKKyAgICBzbWFydERhdGEtPmFwaS0+em9vbV93ZWFrX3Ntb290aF9zY2FsZV9zZXQo
c21hcnREYXRhLCBzbW9vdGhTY2FsZSk7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld196b29tX3dl
YWtfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBmbG9hdCB6b29tLCBFdmFzX0Nvb3JkIGNlbnRl
clgsIEV2YXNfQ29vcmQgY2VudGVyWSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJO
KGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVChzZCwgcHJp
dik7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJ
TkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUKHNtYXJ0RGF0YSwgcHJpdik7CiAKLSAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmFwaSwgRUlOQV9GQUxTRSk7Ci0g
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5hcGktPnpvb21fd2Vha19zZXQs
IEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERh
dGEtPmFwaSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFM
KHNtYXJ0RGF0YS0+YXBpLT56b29tX3dlYWtfc2V0LCBFSU5BX0ZBTFNFKTsKIAotICAgIGlmICgh
cHJpdi0+c2V0dGluZ3Muem9vbV9yYW5nZS51c2VyX3NjYWxhYmxlKSB7CisgICAgaWYgKCFwcml2
LT5zZXR0aW5ncy56b29tUmFuZ2UudXNlclNjYWxhYmxlKSB7CiAgICAgICAgIFdSTigidXNlclNj
YWxhYmxlIGlzIGZhbHNlIik7CiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwogICAgIH0KIAot
ICAgIGlmICh6b29tIDwgcHJpdi0+c2V0dGluZ3Muem9vbV9yYW5nZS5taW5fc2NhbGUpIHsKLSAg
ICAgICAgV1JOKCJ6b29tIGxldmVsIGlzIDwgJWYgOiAlZiIsIHByaXYtPnNldHRpbmdzLnpvb21f
cmFuZ2UubWluX3NjYWxlLCB6b29tKTsKKyAgICBpZiAoem9vbSA8IHByaXYtPnNldHRpbmdzLnpv
b21SYW5nZS5taW5TY2FsZSkgeworICAgICAgICBXUk4oInpvb20gbGV2ZWwgaXMgPCAlZiA6ICVm
IiwgcHJpdi0+c2V0dGluZ3Muem9vbVJhbmdlLm1pblNjYWxlLCB6b29tKTsKICAgICAgICAgcmV0
dXJuIEVJTkFfRkFMU0U7CiAgICAgfQotICAgIGlmICh6b29tID4gcHJpdi0+c2V0dGluZ3Muem9v
bV9yYW5nZS5tYXhfc2NhbGUpIHsKLSAgICAgICAgV1JOKCJ6b29tIGxldmVsIGlzID4gJWYgOiAl
ZiIsIHByaXYtPnNldHRpbmdzLnpvb21fcmFuZ2UubWF4X3NjYWxlLCB6b29tKTsKKyAgICBpZiAo
em9vbSA+IHByaXYtPnNldHRpbmdzLnpvb21SYW5nZS5tYXhTY2FsZSkgeworICAgICAgICBXUk4o
Inpvb20gbGV2ZWwgaXMgPiAlZiA6ICVmIiwgcHJpdi0+c2V0dGluZ3Muem9vbVJhbmdlLm1heFNj
YWxlLCB6b29tKTsKICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CiAgICAgfQogCi0gICAgc2Qt
PmFuaW1hdGVkX3pvb20uem9vbS5zdGFydCA9IGV3a19mcmFtZV9wYWdlX3pvb21fZ2V0KHNkLT5t
YWluX2ZyYW1lKTsKLSAgICBzZC0+YW5pbWF0ZWRfem9vbS56b29tLmVuZCA9IHpvb207Ci0gICAg
c2QtPmFuaW1hdGVkX3pvb20uem9vbS5jdXJyZW50ID0gem9vbTsKLSAgICByZXR1cm4gc2QtPmFw
aS0+em9vbV93ZWFrX3NldChzZCwgem9vbSwgY2VudGVyWCwgY2VudGVyWSk7CisgICAgc21hcnRE
YXRhLT5hbmltYXRlZF96b29tLnpvb20uc3RhcnQgPSBld2tfZnJhbWVfcGFnZV96b29tX2dldChz
bWFydERhdGEtPm1haW5fZnJhbWUpOworICAgIHNtYXJ0RGF0YS0+YW5pbWF0ZWRfem9vbS56b29t
LmVuZCA9IHpvb207CisgICAgc21hcnREYXRhLT5hbmltYXRlZF96b29tLnpvb20uY3VycmVudCA9
IHpvb207CisgICAgcmV0dXJuIHNtYXJ0RGF0YS0+YXBpLT56b29tX3dlYWtfc2V0KHNtYXJ0RGF0
YSwgem9vbSwgY2VudGVyWCwgY2VudGVyWSk7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld196b29t
X2FuaW1hdGVkX21hcmtfc3RhcnQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGZsb2F0IHpvb20pCiB7
Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7
Ci0gICAgc2QtPmFuaW1hdGVkX3pvb20uem9vbS5zdGFydCA9IHpvb207CisgICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIHNt
YXJ0RGF0YS0+YW5pbWF0ZWRfem9vbS56b29tLnN0YXJ0ID0gem9vbTsKICAgICByZXR1cm4gRUlO
QV9UUlVFOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9tYXJrX2VuZChF
dmFzX09iamVjdCogZXdrVmlldywgZmxvYXQgem9vbSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRf
T1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBzZC0+YW5pbWF0ZWRfem9v
bS56b29tLmVuZCA9IHpvb207CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3
LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIHNtYXJ0RGF0YS0+YW5pbWF0ZWRfem9vbS56
b29tLmVuZCA9IHpvb207CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAogRWluYV9Cb29sIGV3
a192aWV3X3pvb21fYW5pbWF0ZWRfbWFya19jdXJyZW50KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBm
bG9hdCB6b29tKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2Qs
IEVJTkFfRkFMU0UpOwotICAgIHNkLT5hbmltYXRlZF96b29tLnpvb20uY3VycmVudCA9IHpvb207
CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFf
RkFMU0UpOworICAgIHNtYXJ0RGF0YS0+YW5pbWF0ZWRfem9vbS56b29tLmN1cnJlbnQgPSB6b29t
OwogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld196b29tX2Fu
aW1hdGVkX21hcmtfc3RvcChFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19T
RF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBfZXdrX3ZpZXdf
em9vbV9hbmltYXRlZF9tYXJrX3N0b3Aoc2QpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRV
Uk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBfZXdrX3ZpZXdfem9vbV9h
bmltYXRlZF9tYXJrX3N0b3Aoc21hcnREYXRhKTsKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQog
CiBFaW5hX0Jvb2wgZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9zZXQoRXZhc19PYmplY3QqIGV3a1Zp
ZXcsIGZsb2F0IHpvb20sIGZsb2F0IGR1cmF0aW9uLCBFdmFzX0Nvb3JkIGNlbnRlclgsIEV2YXNf
Q29vcmQgY2VudGVyWSkKIHsKICAgICBkb3VibGUgbm93OwotICAgIEVXS19WSUVXX1NEX0dFVF9P
Ul9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VU
X09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk5fVkFMKHNkLT5hcGksIEVJTkFfRkFMU0UpOwotICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOX1ZBTChzZC0+YXBpLT56b29tX3dlYWtfc2V0LCBFSU5BX0ZBTFNFKTsKKyAgICBF
V0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7
CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9G
QUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+YXBp
LCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnRE
YXRhLT5hcGktPnpvb21fd2Vha19zZXQsIEVJTkFfRkFMU0UpOwogCi0gICAgaWYgKCFwcml2LT5z
ZXR0aW5ncy56b29tX3JhbmdlLnVzZXJfc2NhbGFibGUpIHsKKyAgICBpZiAoIXByaXYtPnNldHRp
bmdzLnpvb21SYW5nZS51c2VyU2NhbGFibGUpIHsKICAgICAgICAgV1JOKCJ1c2VyU2NhbGFibGUg
aXMgZmFsc2UiKTsKICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CiAgICAgfQogCi0gICAgaWYg
KHpvb20gPCBwcml2LT5zZXR0aW5ncy56b29tX3JhbmdlLm1pbl9zY2FsZSkgewotICAgICAgICBX
Uk4oInpvb20gbGV2ZWwgaXMgPCAlZiA6ICVmIiwgcHJpdi0+c2V0dGluZ3Muem9vbV9yYW5nZS5t
aW5fc2NhbGUsIHpvb20pOworICAgIGlmICh6b29tIDwgcHJpdi0+c2V0dGluZ3Muem9vbVJhbmdl
Lm1pblNjYWxlKSB7CisgICAgICAgIFdSTigiem9vbSBsZXZlbCBpcyA8ICVmIDogJWYiLCBwcml2
LT5zZXR0aW5ncy56b29tUmFuZ2UubWluU2NhbGUsIHpvb20pOwogICAgICAgICByZXR1cm4gRUlO
QV9GQUxTRTsKICAgICB9Ci0gICAgaWYgKHpvb20gPiBwcml2LT5zZXR0aW5ncy56b29tX3Jhbmdl
Lm1heF9zY2FsZSkgewotICAgICAgICBXUk4oInpvb20gbGV2ZWwgaXMgPiAlZiA6ICVmIiwgcHJp
di0+c2V0dGluZ3Muem9vbV9yYW5nZS5tYXhfc2NhbGUsIHpvb20pOworICAgIGlmICh6b29tID4g
cHJpdi0+c2V0dGluZ3Muem9vbVJhbmdlLm1heFNjYWxlKSB7CisgICAgICAgIFdSTigiem9vbSBs
ZXZlbCBpcyA+ICVmIDogJWYiLCBwcml2LT5zZXR0aW5ncy56b29tUmFuZ2UubWF4U2NhbGUsIHpv
b20pOwogICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKICAgICB9CiAKLSAgICBpZiAocHJpdi0+
YW5pbWF0ZWRfem9vbS5hbmltYXRvcikKLSAgICAgICAgcHJpdi0+YW5pbWF0ZWRfem9vbS56b29t
LnN0YXJ0ID0gX2V3a192aWV3X3pvb21fYW5pbWF0ZWRfY3VycmVudChwcml2KTsKKyAgICBpZiAo
cHJpdi0+YW5pbWF0ZWRab29tLmFuaW1hdG9yKQorICAgICAgICBwcml2LT5hbmltYXRlZFpvb20u
em9vbS5zdGFydCA9IF9ld2tfdmlld196b29tX2FuaW1hdGVkX2N1cnJlbnQocHJpdik7CiAgICAg
ZWxzZSB7Ci0gICAgICAgIHByaXYtPmFuaW1hdGVkX3pvb20uem9vbS5zdGFydCA9IGV3a19mcmFt
ZV9wYWdlX3pvb21fZ2V0KHNkLT5tYWluX2ZyYW1lKTsKLSAgICAgICAgX2V3a192aWV3X3pvb21f
YW5pbWF0aW9uX3N0YXJ0KHNkKTsKKyAgICAgICAgcHJpdi0+YW5pbWF0ZWRab29tLnpvb20uc3Rh
cnQgPSBld2tfZnJhbWVfcGFnZV96b29tX2dldChzbWFydERhdGEtPm1haW5fZnJhbWUpOworICAg
ICAgICBfZXdrX3ZpZXdfem9vbV9hbmltYXRpb25fc3RhcnQoc21hcnREYXRhKTsKICAgICB9CiAK
ICAgICBpZiAoY2VudGVyWCA8IDApCkBAIC0xNzI5LDUwICsxNzI5LDUwIEBAIEVpbmFfQm9vbCBl
d2tfdmlld196b29tX2FuaW1hdGVkX3NldChFdmFzX09iamVjdCogZXdrVmlldywgZmxvYXQgem9v
bSwgZmxvYXQgZHVyCiAgICAgICAgIGNlbnRlclkgPSAwOwogCiAgICAgbm93ID0gZWNvcmVfbG9v
cF90aW1lX2dldCgpOwotICAgIHByaXYtPmFuaW1hdGVkX3pvb20udGltZS5zdGFydCA9IG5vdzsK
LSAgICBwcml2LT5hbmltYXRlZF96b29tLnRpbWUuZW5kID0gbm93ICsgZHVyYXRpb247Ci0gICAg
cHJpdi0+YW5pbWF0ZWRfem9vbS50aW1lLmR1cmF0aW9uID0gZHVyYXRpb247Ci0gICAgcHJpdi0+
YW5pbWF0ZWRfem9vbS56b29tLmVuZCA9IHpvb207Ci0gICAgcHJpdi0+YW5pbWF0ZWRfem9vbS56
b29tLnJhbmdlID0gKHByaXYtPmFuaW1hdGVkX3pvb20uem9vbS5lbmQgLSBwcml2LT5hbmltYXRl
ZF96b29tLnpvb20uc3RhcnQpOwotICAgIHByaXYtPmFuaW1hdGVkX3pvb20uY2VudGVyLnggPSBj
ZW50ZXJYOwotICAgIHByaXYtPmFuaW1hdGVkX3pvb20uY2VudGVyLnkgPSBjZW50ZXJZOwotICAg
IHNkLT5hbmltYXRlZF96b29tLnpvb20uY3VycmVudCA9IHByaXYtPmFuaW1hdGVkX3pvb20uem9v
bS5zdGFydDsKLSAgICBzZC0+YW5pbWF0ZWRfem9vbS56b29tLnN0YXJ0ID0gcHJpdi0+YW5pbWF0
ZWRfem9vbS56b29tLnN0YXJ0OwotICAgIHNkLT5hbmltYXRlZF96b29tLnpvb20uZW5kID0gcHJp
di0+YW5pbWF0ZWRfem9vbS56b29tLmVuZDsKKyAgICBwcml2LT5hbmltYXRlZFpvb20udGltZS5z
dGFydCA9IG5vdzsKKyAgICBwcml2LT5hbmltYXRlZFpvb20udGltZS5lbmQgPSBub3cgKyBkdXJh
dGlvbjsKKyAgICBwcml2LT5hbmltYXRlZFpvb20udGltZS5kdXJhdGlvbiA9IGR1cmF0aW9uOwor
ICAgIHByaXYtPmFuaW1hdGVkWm9vbS56b29tLmVuZCA9IHpvb207CisgICAgcHJpdi0+YW5pbWF0
ZWRab29tLnpvb20ucmFuZ2UgPSAocHJpdi0+YW5pbWF0ZWRab29tLnpvb20uZW5kIC0gcHJpdi0+
YW5pbWF0ZWRab29tLnpvb20uc3RhcnQpOworICAgIHByaXYtPmFuaW1hdGVkWm9vbS5jZW50ZXIu
eCA9IGNlbnRlclg7CisgICAgcHJpdi0+YW5pbWF0ZWRab29tLmNlbnRlci55ID0gY2VudGVyWTsK
KyAgICBzbWFydERhdGEtPmFuaW1hdGVkX3pvb20uem9vbS5jdXJyZW50ID0gcHJpdi0+YW5pbWF0
ZWRab29tLnpvb20uc3RhcnQ7CisgICAgc21hcnREYXRhLT5hbmltYXRlZF96b29tLnpvb20uc3Rh
cnQgPSBwcml2LT5hbmltYXRlZFpvb20uem9vbS5zdGFydDsKKyAgICBzbWFydERhdGEtPmFuaW1h
dGVkX3pvb20uem9vbS5lbmQgPSBwcml2LT5hbmltYXRlZFpvb20uem9vbS5lbmQ7CiAKICAgICBy
ZXR1cm4gRUlOQV9UUlVFOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfcHJlX3JlbmRlcl9yZWdp
b24oRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5LCBFdmFz
X0Nvb3JkIHdpZHRoLCBFdmFzX0Nvb3JkIGhlaWdodCwgZmxvYXQgem9vbSkKIHsKLSAgICBFV0tf
VklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tf
VklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwotICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+YXBpLT5wcmVfcmVuZGVyX3JlZ2lvbiwgRUlO
QV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERh
dGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERh
dGEsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZB
TChzbWFydERhdGEtPmFwaS0+cHJlX3JlbmRlcl9yZWdpb24sIEVJTkFfRkFMU0UpOwogICAgIGZs
b2F0IGN1cl96b29tOwotICAgIEV2YXNfQ29vcmQgY3csIGNoOworICAgIEV2YXNfQ29vcmQgY29u
dGVudHNXaWR0aCwgY29udGVudHNIZWlnaHQ7CiAKICAgICAvKiBXaGVuIGRvaW5nIGFuaW1hdGVk
IHpvb20gaXQncyBub3QgcG9zc2libGUgdG8gY2FsbCBwcmUtcmVuZGVyIHNpbmNlIGl0CiAgICAg
ICogd291bGQgc2NyZXcgdXAgcGFyYW1ldGVycyB0aGF0IGFuaW1hdGlvbiBpcyBjdXJyZW50bHkg
dXNpbmcKICAgICAgKi8KLSAgICBpZiAocHJpdi0+YW5pbWF0ZWRfem9vbS5hbmltYXRvcikKKyAg
ICBpZiAocHJpdi0+YW5pbWF0ZWRab29tLmFuaW1hdG9yKQogICAgICAgICByZXR1cm4gRUlOQV9G
QUxTRTsKIAotICAgIGN1cl96b29tID0gZXdrX2ZyYW1lX3BhZ2Vfem9vbV9nZXQoc2QtPm1haW5f
ZnJhbWUpOworICAgIGN1cl96b29tID0gZXdrX2ZyYW1lX3BhZ2Vfem9vbV9nZXQoc21hcnREYXRh
LT5tYWluX2ZyYW1lKTsKIAogICAgIGlmIChjdXJfem9vbSA8IDAuMDAwMDEpCiAgICAgICAgIHJl
dHVybiBFSU5BX0ZBTFNFOwotICAgIGlmICghZXdrX2ZyYW1lX2NvbnRlbnRzX3NpemVfZ2V0KHNk
LT5tYWluX2ZyYW1lLCAmY3csICZjaCkpCisgICAgaWYgKCFld2tfZnJhbWVfY29udGVudHNfc2l6
ZV9nZXQoc21hcnREYXRhLT5tYWluX2ZyYW1lLCAmY29udGVudHNXaWR0aCwgJmNvbnRlbnRzSGVp
Z2h0KSkKICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CiAKLSAgICBjdyAqPSB6b29tIC8gY3Vy
X3pvb207Ci0gICAgY2ggKj0gem9vbSAvIGN1cl96b29tOwotICAgIERCRygicmVnaW9uICVkLCVk
KyVkeCVkIEAgJWYgY29udGVudHM9JWR4JWQiLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCB6b29tLCBj
dywgY2gpOworICAgIGNvbnRlbnRzV2lkdGggKj0gem9vbSAvIGN1cl96b29tOworICAgIGNvbnRl
bnRzSGVpZ2h0ICo9IHpvb20gLyBjdXJfem9vbTsKKyAgICBEQkcoInJlZ2lvbiAlZCwlZCslZHgl
ZCBAICVmIGNvbnRlbnRzPSVkeCVkIiwgeCwgeSwgd2lkdGgsIGhlaWdodCwgem9vbSwgY29udGVu
dHNXaWR0aCwgY29udGVudHNIZWlnaHQpOwogCi0gICAgaWYgKHggKyB3aWR0aCA+IGN3KQotICAg
ICAgICB3aWR0aCA9IGN3IC0geDsKKyAgICBpZiAoeCArIHdpZHRoID4gY29udGVudHNXaWR0aCkK
KyAgICAgICAgd2lkdGggPSBjb250ZW50c1dpZHRoIC0geDsKIAotICAgIGlmICh5ICsgaGVpZ2h0
ID4gY2gpCi0gICAgICAgIGhlaWdodCA9IGNoIC0geTsKKyAgICBpZiAoeSArIGhlaWdodCA+IGNv
bnRlbnRzSGVpZ2h0KQorICAgICAgICBoZWlnaHQgPSBjb250ZW50c0hlaWdodCAtIHk7CiAKICAg
ICBpZiAoeCA8IDApIHsKICAgICAgICAgd2lkdGggKz0geDsKQEAgLTE3ODMsNjQgKzE3ODMsNjQg
QEAgRWluYV9Cb29sIGV3a192aWV3X3ByZV9yZW5kZXJfcmVnaW9uKEV2YXNfT2JqZWN0KiBld2tW
aWV3LCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ28KICAgICAgICAgeSA9IDA7CiAgICAgfQogCi0gICAg
cmV0dXJuIHNkLT5hcGktPnByZV9yZW5kZXJfcmVnaW9uKHNkLCB4LCB5LCB3aWR0aCwgaGVpZ2h0
LCB6b29tKTsKKyAgICByZXR1cm4gc21hcnREYXRhLT5hcGktPnByZV9yZW5kZXJfcmVnaW9uKHNt
YXJ0RGF0YSwgeCwgeSwgd2lkdGgsIGhlaWdodCwgem9vbSk7CiB9CiAKIEVpbmFfQm9vbCBld2tf
dmlld19wcmVfcmVuZGVyX3JlbGF0aXZlX3JhZGl1cyhFdmFzX09iamVjdCogZXdrVmlldywgdW5z
aWduZWQgaW50IG51bWJlcikKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1Zp
ZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2Qs
IHByaXYsIEVJTkFfRkFMU0UpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChz
ZC0+YXBpLT5wcmVfcmVuZGVyX3JlbGF0aXZlX3JhZGl1cywgRUlOQV9GQUxTRSk7Ci0gICAgZmxv
YXQgY3VyX3pvb207CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFy
dERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFy
dERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJO
X1ZBTChzbWFydERhdGEtPmFwaS0+cHJlX3JlbmRlcl9yZWxhdGl2ZV9yYWRpdXMsIEVJTkFfRkFM
U0UpOworICAgIGZsb2F0IGN1cnJlbnRab29tOwogCi0gICAgaWYgKHByaXYtPmFuaW1hdGVkX3pv
b20uYW5pbWF0b3IpCisgICAgaWYgKHByaXYtPmFuaW1hdGVkWm9vbS5hbmltYXRvcikKICAgICAg
ICAgcmV0dXJuIEVJTkFfRkFMU0U7CiAKLSAgICBjdXJfem9vbSA9IGV3a19mcmFtZV9wYWdlX3pv
b21fZ2V0KHNkLT5tYWluX2ZyYW1lKTsKLSAgICByZXR1cm4gc2QtPmFwaS0+cHJlX3JlbmRlcl9y
ZWxhdGl2ZV9yYWRpdXMoc2QsIG51bWJlciwgY3VyX3pvb20pOworICAgIGN1cnJlbnRab29tID0g
ZXdrX2ZyYW1lX3BhZ2Vfem9vbV9nZXQoc21hcnREYXRhLT5tYWluX2ZyYW1lKTsKKyAgICByZXR1
cm4gc21hcnREYXRhLT5hcGktPnByZV9yZW5kZXJfcmVsYXRpdmVfcmFkaXVzKHNtYXJ0RGF0YSwg
bnVtYmVyLCBjdXJyZW50Wm9vbSk7CiB9CiAKIHVuc2lnbmVkIGludCBld2tfdmlld19pbWhfZ2V0
KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9S
RVRVUk4oZXdrVmlldywgc2QsIDApOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihz
ZCwgcHJpdiwgMCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFy
dERhdGEsIDApOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHBy
aXYsIDApOwogICAgIHJldHVybiBwcml2LT5pbWg7CiB9CiAKIHZvaWQgZXdrX3ZpZXdfcHJlX3Jl
bmRlcl9jYW5jZWwoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihld2tWaWV3LCBzZCk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4o
c2QtPmFwaS0+cHJlX3JlbmRlcl9jYW5jZWwpOwotICAgIHNkLT5hcGktPnByZV9yZW5kZXJfY2Fu
Y2VsKHNkKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0
YSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRhLT5hcGktPnByZV9y
ZW5kZXJfY2FuY2VsKTsKKyAgICBzbWFydERhdGEtPmFwaS0+cHJlX3JlbmRlcl9jYW5jZWwoc21h
cnREYXRhKTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X2VuYWJsZV9yZW5kZXIoY29uc3QgRXZh
c19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tW
aWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFM
KHNkLT5hcGktPmVuYWJsZV9yZW5kZXIsIEVJTkFfRkFMU0UpOwotICAgIHJldHVybiBzZC0+YXBp
LT5lbmFibGVfcmVuZGVyKHNkKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1Zp
ZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk5fVkFMKHNtYXJ0RGF0YS0+YXBpLT5lbmFibGVfcmVuZGVyLCBFSU5BX0ZBTFNFKTsKKyAgICBy
ZXR1cm4gc21hcnREYXRhLT5hcGktPmVuYWJsZV9yZW5kZXIoc21hcnREYXRhKTsKIH0KIAogRWlu
YV9Cb29sIGV3a192aWV3X2Rpc2FibGVfcmVuZGVyKGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3
KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFM
U0UpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+YXBpLT5kaXNhYmxl
X3JlbmRlciwgRUlOQV9GQUxTRSk7Ci0gICAgcmV0dXJuIHNkLT5hcGktPmRpc2FibGVfcmVuZGVy
KHNkKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwg
RUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0
YS0+YXBpLT5kaXNhYmxlX3JlbmRlciwgRUlOQV9GQUxTRSk7CisgICAgcmV0dXJuIHNtYXJ0RGF0
YS0+YXBpLT5kaXNhYmxlX3JlbmRlcihzbWFydERhdGEpOwogfQogCiBjb25zdCBjaGFyKiBld2tf
dmlld19zZXR0aW5nX3VzZXJfYWdlbnRfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQog
ewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIDApOwotICAgIEVX
S19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgMCk7Ci0gICAgcmV0dXJuIHByaXYt
PnNldHRpbmdzLnVzZXJfYWdlbnQ7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tW
aWV3LCBzbWFydERhdGEsIDApOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFy
dERhdGEsIHByaXYsIDApOworICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy51c2VyQWdlbnQ7CiB9
CiAKIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX3VzZXJfYWdlbnRfc2V0KEV2YXNfT2JqZWN0
KiBld2tWaWV3LCBjb25zdCBjaGFyKiB1c2VyQWdlbnQpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9H
RVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKLSAgICBpZiAoZWluYV9zdHJpbmdz
aGFyZV9yZXBsYWNlKCZwcml2LT5zZXR0aW5ncy51c2VyX2FnZW50LCB1c2VyQWdlbnQpKSB7Ci0g
ICAgICAgIFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50RWZsKiBjbGllbnQgPSBzdGF0aWNfY2Fz
dDxXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEVmbCo+KHByaXYtPm1haW5fZnJhbWUtPmxvYWRl
cigpLT5jbGllbnQoKSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBz
bWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihz
bWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIGlmIChlaW5hX3N0cmluZ3NoYXJlX3Jl
cGxhY2UoJnByaXYtPnNldHRpbmdzLnVzZXJBZ2VudCwgdXNlckFnZW50KSkgeworICAgICAgICBX
ZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEVmbCogY2xpZW50ID0gc3RhdGljX2Nhc3Q8V2ViQ29y
ZTo6RnJhbWVMb2FkZXJDbGllbnRFZmwqPihwcml2LT5tYWluRnJhbWUtPmxvYWRlcigpLT5jbGll
bnQoKSk7CiAgICAgICAgIGNsaWVudC0+c2V0Q3VzdG9tVXNlckFnZW50KFN0cmluZzo6ZnJvbVVU
RjgodXNlckFnZW50KSk7CiAgICAgfQogICAgIHJldHVybiBFSU5BX1RSVUU7CkBAIC0xODQ4LDIy
MyArMTg0OCwyMjMgQEAgRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfdXNlcl9hZ2VudF9zZXQo
RXZhc19PYmplY3QqIGV3a1ZpZXcsIGNvbnN0IGNoYXIqIHVzZXIKIAogY29uc3QgY2hhciogZXdr
X3ZpZXdfc2V0dGluZ191c2VyX3N0eWxlc2hlZXRfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tW
aWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIDApOwot
ICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgMCk7Ci0gICAgcmV0dXJu
IHByaXYtPnNldHRpbmdzLnVzZXJfc3R5bGVzaGVldDsKKyAgICBFV0tfVklFV19TRF9HRVRfT1Jf
UkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgMCk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1Jf
UkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgMCk7CisgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLnVz
ZXJTdHlsZXNoZWV0OwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ191c2VyX3N0eWxl
c2hlZXRfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBjaGFyKiB1cmkpCiB7Ci0gICAg
RVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAg
RVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKLSAgICBp
ZiAoZWluYV9zdHJpbmdzaGFyZV9yZXBsYWNlKCZwcml2LT5zZXR0aW5ncy51c2VyX3N0eWxlc2hl
ZXQsIHVyaSkpIHsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0
RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0
RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgaWYgKGVpbmFfc3RyaW5nc2hhcmVfcmVwbGFj
ZSgmcHJpdi0+c2V0dGluZ3MudXNlclN0eWxlc2hlZXQsIHVyaSkpIHsKICAgICAgICAgV2ViQ29y
ZTo6S1VSTCBrdXJsKFdlYkNvcmU6OktVUkwoKSwgU3RyaW5nOjpmcm9tVVRGOCh1cmkpKTsKLSAg
ICAgICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0VXNlclN0eWxlU2hlZXRMb2NhdGlvbihrdXJs
KTsKKyAgICAgICAgcHJpdi0+cGFnZVNldHRpbmdzLT5zZXRVc2VyU3R5bGVTaGVldExvY2F0aW9u
KGt1cmwpOwogICAgIH0KICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCiBFaW5hX0Jvb2wgZXdr
X3ZpZXdfc2V0dGluZ19hdXRvX2xvYWRfaW1hZ2VzX2dldChjb25zdCBFdmFzX09iamVjdCogZXdr
VmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5B
X0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFf
RkFMU0UpOwotICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5hdXRvX2xvYWRfaW1hZ2VzOworICAg
IEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNF
KTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5B
X0ZBTFNFKTsKKyAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuYXV0b0xvYWRJbWFnZXM7CiB9CiAK
IEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2F1dG9fbG9hZF9pbWFnZXNfc2V0KEV2YXNfT2Jq
ZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wgYXV0b21hdGljKQogewotICAgIEVXS19WSUVXX1NEX0dF
VF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZf
R0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVX
X1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIGF1
dG9tYXRpYyA9ICEhYXV0b21hdGljOwotICAgIGlmIChwcml2LT5zZXR0aW5ncy5hdXRvX2xvYWRf
aW1hZ2VzICE9IGF1dG9tYXRpYykgewotICAgICAgICBwcml2LT5wYWdlX3NldHRpbmdzLT5zZXRM
b2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkoYXV0b21hdGljKTsKLSAgICAgICAgcHJpdi0+c2V0dGlu
Z3MuYXV0b19sb2FkX2ltYWdlcyA9IGF1dG9tYXRpYzsKKyAgICBpZiAocHJpdi0+c2V0dGluZ3Mu
YXV0b0xvYWRJbWFnZXMgIT0gYXV0b21hdGljKSB7CisgICAgICAgIHByaXYtPnBhZ2VTZXR0aW5n
cy0+c2V0TG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5KGF1dG9tYXRpYyk7CisgICAgICAgIHByaXYt
PnNldHRpbmdzLmF1dG9Mb2FkSW1hZ2VzID0gYXV0b21hdGljOwogICAgIH0KICAgICByZXR1cm4g
RUlOQV9UUlVFOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19hdXRvX3Nocmlua19p
bWFnZXNfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NE
X0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BS
SVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7Ci0gICAgcmV0dXJuIHByaXYt
PnNldHRpbmdzLmF1dG9fc2hyaW5rX2ltYWdlczsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVU
VVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9H
RVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgcmV0dXJuIHBy
aXYtPnNldHRpbmdzLmF1dG9TaHJpbmtJbWFnZXM7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19z
ZXR0aW5nX2F1dG9fc2hyaW5rX2ltYWdlc19zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFf
Qm9vbCBhdXRvbWF0aWMpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3
LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBw
cml2LCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcs
IHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJO
KHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgYXV0b21hdGljID0gISFhdXRvbWF0
aWM7Ci0gICAgaWYgKHByaXYtPnNldHRpbmdzLmF1dG9fc2hyaW5rX2ltYWdlcyAhPSBhdXRvbWF0
aWMpIHsKLSAgICAgICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0U2hyaW5rc1N0YW5kYWxvbmVJ
bWFnZXNUb0ZpdChhdXRvbWF0aWMpOwotICAgICAgICBwcml2LT5zZXR0aW5ncy5hdXRvX3Nocmlu
a19pbWFnZXMgPSBhdXRvbWF0aWM7CisgICAgaWYgKHByaXYtPnNldHRpbmdzLmF1dG9TaHJpbmtJ
bWFnZXMgIT0gYXV0b21hdGljKSB7CisgICAgICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0U2hy
aW5rc1N0YW5kYWxvbmVJbWFnZXNUb0ZpdChhdXRvbWF0aWMpOworICAgICAgICBwcml2LT5zZXR0
aW5ncy5hdXRvU2hyaW5rSW1hZ2VzID0gYXV0b21hdGljOwogICAgIH0KICAgICByZXR1cm4gRUlO
QV9UUlVFOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19lbmFibGVfYXV0b19yZXNp
emVfd2luZG93X2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklF
V19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklF
V19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwotICAgIHJldHVybiBw
cml2LT5zZXR0aW5ncy5lbmFibGVfYXV0b19yZXNpemVfd2luZG93OworICAgIEVXS19WSUVXX1NE
X0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tf
VklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAg
ICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZW5hYmxlQXV0b1Jlc2l6ZVdpbmRvdzsKIH0KIAogRWlu
YV9Cb29sIGV3a192aWV3X3NldHRpbmdfZW5hYmxlX2F1dG9fcmVzaXplX3dpbmRvd19zZXQoRXZh
c19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCByZXNpemFibGUpCiB7Ci0gICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdf
UFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKLSAgICBwcml2LT5zZXR0
aW5ncy5lbmFibGVfYXV0b19yZXNpemVfd2luZG93ID0gcmVzaXphYmxlOworICAgIEVXS19WSUVX
X1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBF
V0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsK
KyAgICBwcml2LT5zZXR0aW5ncy5lbmFibGVBdXRvUmVzaXplV2luZG93ID0gcmVzaXphYmxlOwog
ICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2Vu
YWJsZV9zY3JpcHRzX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tf
VklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tf
VklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwotICAgIHJldHVy
biBwcml2LT5zZXR0aW5ncy5lbmFibGVfc2NyaXB0czsKKyAgICBFV0tfVklFV19TRF9HRVRfT1Jf
UkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJ
Vl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgcmV0dXJu
IHByaXYtPnNldHRpbmdzLmVuYWJsZVNjcmlwdHM7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19z
ZXR0aW5nX2VuYWJsZV9zY3JpcHRzX3NldChFdmFzX09iamVjdCogZXdrVmlldywgRWluYV9Cb29s
IGVuYWJsZSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBF
SU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJ
TkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnRE
YXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnRE
YXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBlbmFibGUgPSAhIWVuYWJsZTsKLSAgICBpZiAo
cHJpdi0+c2V0dGluZ3MuZW5hYmxlX3NjcmlwdHMgIT0gZW5hYmxlKSB7Ci0gICAgICAgIHByaXYt
PnBhZ2Vfc2V0dGluZ3MtPnNldEphdmFTY3JpcHRFbmFibGVkKGVuYWJsZSk7Ci0gICAgICAgIHBy
aXYtPnNldHRpbmdzLmVuYWJsZV9zY3JpcHRzID0gZW5hYmxlOworICAgIGlmIChwcml2LT5zZXR0
aW5ncy5lbmFibGVTY3JpcHRzICE9IGVuYWJsZSkgeworICAgICAgICBwcml2LT5wYWdlU2V0dGlu
Z3MtPnNldEphdmFTY3JpcHRFbmFibGVkKGVuYWJsZSk7CisgICAgICAgIHByaXYtPnNldHRpbmdz
LmVuYWJsZVNjcmlwdHMgPSBlbmFibGU7CiAgICAgfQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9
CiAKIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2VuYWJsZV9wbHVnaW5zX2dldChjb25zdCBF
dmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3
a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4o
c2QsIHByaXYsIEVJTkFfRkFMU0UpOwotICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5lbmFibGVf
cGx1Z2luczsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0
YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0
YSwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmVuYWJsZVBs
dWdpbnM7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2VuYWJsZV9wbHVnaW5zX3Nl
dChFdmFzX09iamVjdCogZXdrVmlldywgRWluYV9Cb29sIGVuYWJsZSkKIHsKLSAgICBFV0tfVklF
V19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklF
V19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVX
X1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBF
V0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsK
ICAgICBlbmFibGUgPSAhIWVuYWJsZTsKLSAgICBpZiAocHJpdi0+c2V0dGluZ3MuZW5hYmxlX3Bs
dWdpbnMgIT0gZW5hYmxlKSB7Ci0gICAgICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNldFBsdWdp
bnNFbmFibGVkKGVuYWJsZSk7Ci0gICAgICAgIHByaXYtPnNldHRpbmdzLmVuYWJsZV9wbHVnaW5z
ID0gZW5hYmxlOworICAgIGlmIChwcml2LT5zZXR0aW5ncy5lbmFibGVQbHVnaW5zICE9IGVuYWJs
ZSkgeworICAgICAgICBwcml2LT5wYWdlU2V0dGluZ3MtPnNldFBsdWdpbnNFbmFibGVkKGVuYWJs
ZSk7CisgICAgICAgIHByaXYtPnNldHRpbmdzLmVuYWJsZVBsdWdpbnMgPSBlbmFibGU7CiAgICAg
fQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5n
X2VuYWJsZV9mcmFtZV9mbGF0dGVuaW5nX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykK
IHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNF
KTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0Up
OwotICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5lbmFibGVfZnJhbWVfZmxhdHRlbmluZzsKKyAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxT
RSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlO
QV9GQUxTRSk7CisgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmVuYWJsZUZyYW1lRmxhdHRlbmlu
ZzsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfZW5hYmxlX2ZyYW1lX2ZsYXR0ZW5p
bmdfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wgZW5hYmxlKQogewotICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVX
S19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgRVdL
X1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOwor
ICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFM
U0UpOwogICAgIGVuYWJsZSA9ICEhZW5hYmxlOwotICAgIGlmIChwcml2LT5zZXR0aW5ncy5lbmFi
bGVfZnJhbWVfZmxhdHRlbmluZyAhPSBlbmFibGUpIHsKLSAgICAgICAgcHJpdi0+cGFnZV9zZXR0
aW5ncy0+c2V0RnJhbWVGbGF0dGVuaW5nRW5hYmxlZChlbmFibGUpOwotICAgICAgICBwcml2LT5z
ZXR0aW5ncy5lbmFibGVfZnJhbWVfZmxhdHRlbmluZyA9IGVuYWJsZTsKKyAgICBpZiAocHJpdi0+
c2V0dGluZ3MuZW5hYmxlRnJhbWVGbGF0dGVuaW5nICE9IGVuYWJsZSkgeworICAgICAgICBwcml2
LT5wYWdlU2V0dGluZ3MtPnNldEZyYW1lRmxhdHRlbmluZ0VuYWJsZWQoZW5hYmxlKTsKKyAgICAg
ICAgcHJpdi0+c2V0dGluZ3MuZW5hYmxlRnJhbWVGbGF0dGVuaW5nID0gZW5hYmxlOwogICAgIH0K
ICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19z
Y3JpcHRzX3dpbmRvd19vcGVuX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAg
ICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwotICAg
IHJldHVybiBwcml2LT5zZXR0aW5ncy5zY3JpcHRzX3dpbmRvd19vcGVuOworICAgIEVXS19WSUVX
X1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBF
V0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsK
KyAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3Muc2NyaXB0c1dpbmRvd09wZW47CiB9CiAKIEVpbmFf
Qm9vbCBld2tfdmlld19zZXR0aW5nX3NjcmlwdHNfd2luZG93X29wZW5fc2V0KEV2YXNfT2JqZWN0
KiBld2tWaWV3LCBFaW5hX0Jvb2wgYWxsb3cpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JF
VFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1Jf
UkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVU
VVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9H
RVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgYWxsb3cgPSAh
IWFsbG93OwotICAgIGlmIChwcml2LT5zZXR0aW5ncy5zY3JpcHRzX3dpbmRvd19vcGVuICE9IGFs
bG93KSB7Ci0gICAgICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNldEphdmFTY3JpcHRDYW5PcGVu
V2luZG93c0F1dG9tYXRpY2FsbHkoYWxsb3cpOwotICAgICAgICBwcml2LT5zZXR0aW5ncy5zY3Jp
cHRzX3dpbmRvd19vcGVuID0gYWxsb3c7CisgICAgaWYgKHByaXYtPnNldHRpbmdzLnNjcmlwdHNX
aW5kb3dPcGVuICE9IGFsbG93KSB7CisgICAgICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0SmF2
YVNjcmlwdENhbk9wZW5XaW5kb3dzQXV0b21hdGljYWxseShhbGxvdyk7CisgICAgICAgIHByaXYt
PnNldHRpbmdzLnNjcmlwdHNXaW5kb3dPcGVuID0gYWxsb3c7CiAgICAgfQogICAgIHJldHVybiBF
SU5BX1RSVUU7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX3NjcmlwdHNfY2FuX2Ns
b3NlX3dpbmRvd3NfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19W
SUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19W
SUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7Ci0gICAgcmV0dXJu
IHByaXYtPnNldHRpbmdzLnNjcmlwdHNfY2FuX2Nsb3NlX3dpbmRvd3M7CisgICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVX
S19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOwor
ICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5zY3JpcHRzQ2FuQ2xvc2VXaW5kb3dzOwogfQogCiBF
aW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19zY3JpcHRzX2Nhbl9jbG9zZV93aW5kb3dzX3NldChF
dmFzX09iamVjdCogZXdrVmlldywgRWluYV9Cb29sIGFsbG93KQogewotICAgIEVXS19WSUVXX1NE
X0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BS
SVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19W
SUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOwogICAg
IGFsbG93ID0gISFhbGxvdzsKLSAgICBpZiAocHJpdi0+c2V0dGluZ3Muc2NyaXB0c19jYW5fY2xv
c2Vfd2luZG93cyAhPSBhbGxvdykgewotICAgICAgICBwcml2LT5wYWdlX3NldHRpbmdzLT5zZXRB
bGxvd1NjcmlwdHNUb0Nsb3NlV2luZG93cyhhbGxvdyk7Ci0gICAgICAgIHByaXYtPnNldHRpbmdz
LnNjcmlwdHNfY2FuX2Nsb3NlX3dpbmRvd3MgPSBhbGxvdzsKKyAgICBpZiAocHJpdi0+c2V0dGlu
Z3Muc2NyaXB0c0NhbkNsb3NlV2luZG93cyAhPSBhbGxvdykgeworICAgICAgICBwcml2LT5wYWdl
U2V0dGluZ3MtPnNldEFsbG93U2NyaXB0c1RvQ2xvc2VXaW5kb3dzKGFsbG93KTsKKyAgICAgICAg
cHJpdi0+c2V0dGluZ3Muc2NyaXB0c0NhbkNsb3NlV2luZG93cyA9IGFsbG93OwogICAgIH0KICAg
ICByZXR1cm4gRUlOQV9UUlVFOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19yZXNp
emFibGVfdGV4dGFyZWFzX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBF
V0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBF
V0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwotICAgIHJl
dHVybiBwcml2LT5zZXR0aW5ncy5yZXNpemFibGVfdGV4dGFyZWFzOworICAgIEVXS19WSUVXX1NE
X0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tf
VklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAg
ICByZXR1cm4gcHJpdi0+c2V0dGluZ3MucmVzaXphYmxlVGV4dGFyZWFzOwogfQogCiBFaW5hX0Jv
b2wgZXdrX3ZpZXdfc2V0dGluZ19yZXNpemFibGVfdGV4dGFyZWFzX3NldChFdmFzX09iamVjdCog
ZXdrVmlldywgRWluYV9Cb29sIGVuYWJsZSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVU
VVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9S
RVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRV
Uk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dF
VF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBlbmFibGUgPSAh
IWVuYWJsZTsKLSAgICBpZiAocHJpdi0+c2V0dGluZ3MucmVzaXphYmxlX3RleHRhcmVhcyAhPSBl
bmFibGUpIHsKLSAgICAgICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0VGV4dEFyZWFzQXJlUmVz
aXphYmxlKGVuYWJsZSk7Ci0gICAgICAgIHByaXYtPnNldHRpbmdzLnJlc2l6YWJsZV90ZXh0YXJl
YXMgPSBlbmFibGU7CisgICAgaWYgKHByaXYtPnNldHRpbmdzLnJlc2l6YWJsZVRleHRhcmVhcyAh
PSBlbmFibGUpIHsKKyAgICAgICAgcHJpdi0+cGFnZVNldHRpbmdzLT5zZXRUZXh0QXJlYXNBcmVS
ZXNpemFibGUoZW5hYmxlKTsKKyAgICAgICAgcHJpdi0+c2V0dGluZ3MucmVzaXphYmxlVGV4dGFy
ZWFzID0gZW5hYmxlOwogICAgIH0KICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCiBFaW5hX0Jv
b2wgZXdrX3ZpZXdfc2V0dGluZ19wcml2YXRlX2Jyb3dzaW5nX2dldChjb25zdCBFdmFzX09iamVj
dCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNk
LCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYs
IEVJTkFfRkFMU0UpOwotICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5wcml2YXRlX2Jyb3dzaW5n
OworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5B
X0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2
LCBFSU5BX0ZBTFNFKTsKKyAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MucHJpdmF0ZUJyb3dzaW5n
OwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19wcml2YXRlX2Jyb3dzaW5nX3NldChF
dmFzX09iamVjdCogZXdrVmlldywgRWluYV9Cb29sIGVuYWJsZSkKIHsKLSAgICBFV0tfVklFV19T
RF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19Q
UklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NE
X0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tf
VklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAg
ICBlbmFibGUgPSAhIWVuYWJsZTsKLSAgICBpZiAocHJpdi0+c2V0dGluZ3MucHJpdmF0ZV9icm93
c2luZyAhPSBlbmFibGUpIHsKLSAgICAgICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0UHJpdmF0
ZUJyb3dzaW5nRW5hYmxlZChlbmFibGUpOwotICAgICAgICBwcml2LT5zZXR0aW5ncy5wcml2YXRl
X2Jyb3dzaW5nID0gZW5hYmxlOworICAgIGlmIChwcml2LT5zZXR0aW5ncy5wcml2YXRlQnJvd3Np
bmcgIT0gZW5hYmxlKSB7CisgICAgICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0UHJpdmF0ZUJy
b3dzaW5nRW5hYmxlZChlbmFibGUpOworICAgICAgICBwcml2LT5zZXR0aW5ncy5wcml2YXRlQnJv
d3NpbmcgPSBlbmFibGU7CiAgICAgfQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKIEVpbmFf
Qm9vbCBld2tfdmlld19zZXR0aW5nX29mZmxpbmVfYXBwX2NhY2hlX2dldChjb25zdCBFdmFzX09i
amVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcs
IHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHBy
aXYsIEVJTkFfRkFMU0UpOwotICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5vZmZsaW5lX2FwcF9j
YWNoZTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwg
RUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwg
cHJpdiwgRUlOQV9GQUxTRSk7CisgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLm9mZmxpbmVBcHBD
YWNoZTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfb2ZmbGluZV9hcHBfY2FjaGVf
c2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wgZW5hYmxlKQogewotICAgIEVXS19W
SUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19W
SUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJ
RVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAg
IEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0Up
OwogICAgIGVuYWJsZSA9ICEhZW5hYmxlOwotICAgIGlmIChwcml2LT5zZXR0aW5ncy5vZmZsaW5l
X2FwcF9jYWNoZSAhPSBlbmFibGUpIHsKLSAgICAgICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0
T2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGVFbmFibGVkKGVuYWJsZSk7Ci0gICAgICAgIHByaXYt
PnNldHRpbmdzLm9mZmxpbmVfYXBwX2NhY2hlID0gZW5hYmxlOworICAgIGlmIChwcml2LT5zZXR0
aW5ncy5vZmZsaW5lQXBwQ2FjaGUgIT0gZW5hYmxlKSB7CisgICAgICAgIHByaXYtPnBhZ2VTZXR0
aW5ncy0+c2V0T2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGVFbmFibGVkKGVuYWJsZSk7CisgICAg
ICAgIHByaXYtPnNldHRpbmdzLm9mZmxpbmVBcHBDYWNoZSA9IGVuYWJsZTsKICAgICB9CiAgICAg
cmV0dXJuIEVJTkFfVFJVRTsKIH0KQEAgLTIwNzIsMjcgKzIwNzIsMjcgQEAgRWluYV9Cb29sIGV3
a192aWV3X3NldHRpbmdfb2ZmbGluZV9hcHBfY2FjaGVfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3
LCBFaW5hX0Jvb2wKIAogRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfY2FyZXRfYnJvd3Npbmdf
Z2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9P
Ul9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VU
X09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7Ci0gICAgcmV0dXJuIHByaXYtPnNldHRp
bmdzLmNhcmV0X2Jyb3dzaW5nOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmll
dywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRV
Uk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICByZXR1cm4gcHJpdi0+c2V0dGlu
Z3MuY2FyZXRCcm93c2luZzsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfY2FyZXRf
YnJvd3Npbmdfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wgZW5hYmxlKQogewot
ICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwot
ICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7Cisg
ICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFM
U0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJ
TkFfRkFMU0UpOwogICAgIGVuYWJsZSA9ICEhZW5hYmxlOwotICAgIGlmIChwcml2LT5zZXR0aW5n
cy5jYXJldF9icm93c2luZyAhPSBlbmFibGUpIHsKLSAgICAgICAgcHJpdi0+cGFnZV9zZXR0aW5n
cy0+c2V0Q2FyZXRCcm93c2luZ0VuYWJsZWQoZW5hYmxlKTsKLSAgICAgICAgcHJpdi0+c2V0dGlu
Z3MuY2FyZXRfYnJvd3NpbmcgPSBlbmFibGU7CisgICAgaWYgKHByaXYtPnNldHRpbmdzLmNhcmV0
QnJvd3NpbmcgIT0gZW5hYmxlKSB7CisgICAgICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0Q2Fy
ZXRCcm93c2luZ0VuYWJsZWQoZW5hYmxlKTsKKyAgICAgICAgcHJpdi0+c2V0dGluZ3MuY2FyZXRC
cm93c2luZyA9IGVuYWJsZTsKICAgICB9CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAogY29u
c3QgY2hhciogZXdrX3ZpZXdfc2V0dGluZ19lbmNvZGluZ19jdXN0b21fZ2V0KGNvbnN0IEV2YXNf
T2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmll
dywgc2QsIDApOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgMCk7
CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIDApOwor
ICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIDApOwogICAg
IEV2YXNfT2JqZWN0KiBtYWluX2ZyYW1lID0gZXdrX3ZpZXdfZnJhbWVfbWFpbl9nZXQoZXdrVmll
dyk7CiAgICAgV2ViQ29yZTo6RnJhbWUqIGNvcmVfZnJhbWUgPSBFV0tQcml2YXRlOjpjb3JlRnJh
bWUobWFpbl9mcmFtZSk7CiAKQEAgLTIxMDEsMTk5ICsyMTAxLDE5OSBAQCBjb25zdCBjaGFyKiBl
d2tfdmlld19zZXR0aW5nX2VuY29kaW5nX2N1c3RvbV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3
a1ZpZXcpCiAgICAgaWYgKG92ZXJyaWRlRW5jb2RpbmcuaXNFbXB0eSgpKQogICAgICAgICByZXR1
cm4gMDsKIAotICAgIGVpbmFfc3RyaW5nc2hhcmVfcmVwbGFjZSgmcHJpdi0+c2V0dGluZ3MuZW5j
b2RpbmdfY3VzdG9tLCBvdmVycmlkZUVuY29kaW5nLnV0ZjgoKS5kYXRhKCkpOwotICAgIHJldHVy
biBwcml2LT5zZXR0aW5ncy5lbmNvZGluZ19jdXN0b207CisgICAgZWluYV9zdHJpbmdzaGFyZV9y
ZXBsYWNlKCZwcml2LT5zZXR0aW5ncy5lbmNvZGluZ0N1c3RvbSwgb3ZlcnJpZGVFbmNvZGluZy51
dGY4KCkuZGF0YSgpKTsKKyAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZW5jb2RpbmdDdXN0b207
CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2VuY29kaW5nX2N1c3RvbV9zZXQoRXZh
c19PYmplY3QqIGV3a1ZpZXcsIGNvbnN0IGNoYXIqIGVuY29kaW5nKQogewotICAgIEVXS19WSUVX
X1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVX
X1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVX
S19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOwog
ICAgIEV2YXNfT2JqZWN0KiBtYWluX2ZyYW1lID0gZXdrX3ZpZXdfZnJhbWVfbWFpbl9nZXQoZXdr
Vmlldyk7Ci0gICAgV2ViQ29yZTo6RnJhbWUqIGNvcmVfZnJhbWUgPSBFV0tQcml2YXRlOjpjb3Jl
RnJhbWUobWFpbl9mcmFtZSk7CisgICAgV2ViQ29yZTo6RnJhbWUqIGNvcmVGcmFtZSA9IEVXS1By
aXZhdGU6OmNvcmVGcmFtZShtYWluX2ZyYW1lKTsKICAgICBEQkcoIiVzIiwgZW5jb2RpbmcpOwot
ICAgIGlmIChlaW5hX3N0cmluZ3NoYXJlX3JlcGxhY2UoJnByaXYtPnNldHRpbmdzLmVuY29kaW5n
X2N1c3RvbSwgZW5jb2RpbmcpKQotICAgICAgICBjb3JlX2ZyYW1lLT5sb2FkZXIoKS0+cmVsb2Fk
V2l0aE92ZXJyaWRlRW5jb2RpbmcoU3RyaW5nOjpmcm9tVVRGOChlbmNvZGluZykpOworICAgIGlm
IChlaW5hX3N0cmluZ3NoYXJlX3JlcGxhY2UoJnByaXYtPnNldHRpbmdzLmVuY29kaW5nQ3VzdG9t
LCBlbmNvZGluZykpCisgICAgICAgIGNvcmVGcmFtZS0+bG9hZGVyKCktPnJlbG9hZFdpdGhPdmVy
cmlkZUVuY29kaW5nKFN0cmluZzo6ZnJvbVVURjgoZW5jb2RpbmcpKTsKICAgICByZXR1cm4gRUlO
QV9UUlVFOwogfQogCiBjb25zdCBjaGFyKiBld2tfdmlld19zZXR0aW5nX2VuY29kaW5nX2RlZmF1
bHRfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dF
VF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIDApOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JF
VFVSTihzZCwgcHJpdiwgMCk7Ci0gICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmVuY29kaW5nX2Rl
ZmF1bHQ7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEs
IDApOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIDAp
OworICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5lbmNvZGluZ0RlZmF1bHQ7CiB9CiAKIEVpbmFf
Qm9vbCBld2tfdmlld19zZXR0aW5nX2VuY29kaW5nX2RlZmF1bHRfc2V0KEV2YXNfT2JqZWN0KiBl
d2tWaWV3LCBjb25zdCBjaGFyKiBlbmNvZGluZykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1Jf
UkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9P
Ul9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwotICAgIGlmIChlaW5hX3N0cmluZ3NoYXJl
X3JlcGxhY2UoJnByaXYtPnNldHRpbmdzLmVuY29kaW5nX2RlZmF1bHQsIGVuY29kaW5nKSkKLSAg
ICAgICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0RGVmYXVsdFRleHRFbmNvZGluZ05hbWUoU3Ry
aW5nOjpmcm9tVVRGOChlbmNvZGluZykpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9P
Ul9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBpZiAoZWluYV9zdHJp
bmdzaGFyZV9yZXBsYWNlKCZwcml2LT5zZXR0aW5ncy5lbmNvZGluZ0RlZmF1bHQsIGVuY29kaW5n
KSkKKyAgICAgICAgcHJpdi0+cGFnZVNldHRpbmdzLT5zZXREZWZhdWx0VGV4dEVuY29kaW5nTmFt
ZShTdHJpbmc6OmZyb21VVEY4KGVuY29kaW5nKSk7CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0K
IAogRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfZW5jb2RpbmdfZGV0ZWN0b3Jfc2V0KEV2YXNf
T2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wgZW5hYmxlKQogewotICAgIEVXS19WSUVXX1NEX0dF
VF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZf
R0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVX
X1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIGVu
YWJsZSA9ICEhZW5hYmxlOwotICAgIGlmIChwcml2LT5zZXR0aW5ncy5lbmNvZGluZ19kZXRlY3Rv
ciAhPSBlbmFibGUpIHsKLSAgICAgICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0VXNlc0VuY29k
aW5nRGV0ZWN0b3IoZW5hYmxlKTsKLSAgICAgICAgcHJpdi0+c2V0dGluZ3MuZW5jb2RpbmdfZGV0
ZWN0b3IgPSBlbmFibGU7CisgICAgaWYgKHByaXYtPnNldHRpbmdzLmVuY29kaW5nRGV0ZWN0b3Ig
IT0gZW5hYmxlKSB7CisgICAgICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0VXNlc0VuY29kaW5n
RGV0ZWN0b3IoZW5hYmxlKTsKKyAgICAgICAgcHJpdi0+c2V0dGluZ3MuZW5jb2RpbmdEZXRlY3Rv
ciA9IGVuYWJsZTsKICAgICB9CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAogRWluYV9Cb29s
IGV3a192aWV3X3NldHRpbmdfZW5jb2RpbmdfZGV0ZWN0b3JfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0
KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2Qs
IEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwg
RUlOQV9GQUxTRSk7Ci0gICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmVuY29kaW5nX2RldGVjdG9y
OworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5B
X0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2
LCBFSU5BX0ZBTFNFKTsKKyAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZW5jb2RpbmdEZXRlY3Rv
cjsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfZW5hYmxlX2RldmVsb3Blcl9leHRy
YXNfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dF
VF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZf
R0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7Ci0gICAgcmV0dXJuIHByaXYtPnNl
dHRpbmdzLmVuYWJsZV9kZXZlbG9wZXJfZXh0cmFzOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9S
RVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklW
X0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICByZXR1cm4g
cHJpdi0+c2V0dGluZ3MuZW5hYmxlRGV2ZWxvcGVyRXh0cmFzOwogfQogCiBFaW5hX0Jvb2wgZXdr
X3ZpZXdfc2V0dGluZ19lbmFibGVfZGV2ZWxvcGVyX2V4dHJhc19zZXQoRXZhc19PYmplY3QqIGV3
a1ZpZXcsIEVpbmFfQm9vbCBlbmFibGUpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
Tihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVU
VVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJO
KGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRf
T1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgZW5hYmxlID0gISFl
bmFibGU7Ci0gICAgaWYgKHByaXYtPnNldHRpbmdzLmVuYWJsZV9kZXZlbG9wZXJfZXh0cmFzICE9
IGVuYWJsZSkgewotICAgICAgICBwcml2LT5wYWdlX3NldHRpbmdzLT5zZXREZXZlbG9wZXJFeHRy
YXNFbmFibGVkKGVuYWJsZSk7Ci0gICAgICAgIHByaXYtPnNldHRpbmdzLmVuYWJsZV9kZXZlbG9w
ZXJfZXh0cmFzID0gZW5hYmxlOworICAgIGlmIChwcml2LT5zZXR0aW5ncy5lbmFibGVEZXZlbG9w
ZXJFeHRyYXMgIT0gZW5hYmxlKSB7CisgICAgICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0RGV2
ZWxvcGVyRXh0cmFzRW5hYmxlZChlbmFibGUpOworICAgICAgICBwcml2LT5zZXR0aW5ncy5lbmFi
bGVEZXZlbG9wZXJFeHRyYXMgPSBlbmFibGU7CiAgICAgfQogICAgIHJldHVybiBFSU5BX1RSVUU7
CiB9CiAKIGludCBld2tfdmlld19zZXR0aW5nX2ZvbnRfbWluaW11bV9zaXplX2dldChjb25zdCBF
dmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3
a1ZpZXcsIHNkLCAwKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYs
IDApOwotICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5mb250X21pbmltdW1fc2l6ZTsKKyAgICBF
V0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgMCk7CisgICAgRVdL
X1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgMCk7CisgICAgcmV0dXJu
IHByaXYtPnNldHRpbmdzLmZvbnRNaW5pbXVtU2l6ZTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3
X3NldHRpbmdfZm9udF9taW5pbXVtX3NpemVfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBpbnQg
c2l6ZSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5B
X0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFf
RkFMU0UpOwotICAgIGlmIChwcml2LT5zZXR0aW5ncy5mb250X21pbmltdW1fc2l6ZSAhPSBzaXpl
KSB7Ci0gICAgICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNldE1pbmltdW1Gb250U2l6ZShzaXpl
KTsKLSAgICAgICAgcHJpdi0+c2V0dGluZ3MuZm9udF9taW5pbXVtX3NpemUgPSBzaXplOworICAg
IEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNF
KTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5B
X0ZBTFNFKTsKKyAgICBpZiAocHJpdi0+c2V0dGluZ3MuZm9udE1pbmltdW1TaXplICE9IHNpemUp
IHsKKyAgICAgICAgcHJpdi0+cGFnZVNldHRpbmdzLT5zZXRNaW5pbXVtRm9udFNpemUoc2l6ZSk7
CisgICAgICAgIHByaXYtPnNldHRpbmdzLmZvbnRNaW5pbXVtU2l6ZSA9IHNpemU7CiAgICAgfQog
ICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKIGludCBld2tfdmlld19zZXR0aW5nX2ZvbnRfbWlu
aW11bV9sb2dpY2FsX3NpemVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAg
IEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIDApOwotICAgIEVXS19WSUVX
X1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgMCk7Ci0gICAgcmV0dXJuIHByaXYtPnNldHRp
bmdzLmZvbnRfbWluaW11bV9sb2dpY2FsX3NpemU7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JF
VFVSTihld2tWaWV3LCBzbWFydERhdGEsIDApOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JF
VFVSTihzbWFydERhdGEsIHByaXYsIDApOworICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5mb250
TWluaW11bUxvZ2ljYWxTaXplOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19mb250
X21pbmltdW1fbG9naWNhbF9zaXplX3NldChFdmFzX09iamVjdCogZXdrVmlldywgaW50IHNpemUp
CiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxT
RSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNF
KTsKLSAgICBpZiAocHJpdi0+c2V0dGluZ3MuZm9udF9taW5pbXVtX2xvZ2ljYWxfc2l6ZSAhPSBz
aXplKSB7Ci0gICAgICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNldE1pbmltdW1Mb2dpY2FsRm9u
dFNpemUoc2l6ZSk7Ci0gICAgICAgIHByaXYtPnNldHRpbmdzLmZvbnRfbWluaW11bV9sb2dpY2Fs
X3NpemUgPSBzaXplOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21h
cnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21h
cnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBpZiAocHJpdi0+c2V0dGluZ3MuZm9udE1p
bmltdW1Mb2dpY2FsU2l6ZSAhPSBzaXplKSB7CisgICAgICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+
c2V0TWluaW11bUxvZ2ljYWxGb250U2l6ZShzaXplKTsKKyAgICAgICAgcHJpdi0+c2V0dGluZ3Mu
Zm9udE1pbmltdW1Mb2dpY2FsU2l6ZSA9IHNpemU7CiAgICAgfQogICAgIHJldHVybiBFSU5BX1RS
VUU7CiB9CiAKIGludCBld2tfdmlld19zZXR0aW5nX2ZvbnRfZGVmYXVsdF9zaXplX2dldChjb25z
dCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJO
KGV3a1ZpZXcsIHNkLCAwKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHBy
aXYsIDApOwotICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5mb250X2RlZmF1bHRfc2l6ZTsKKyAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgMCk7CisgICAg
RVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgMCk7CisgICAgcmV0
dXJuIHByaXYtPnNldHRpbmdzLmZvbnREZWZhdWx0U2l6ZTsKIH0KIAogRWluYV9Cb29sIGV3a192
aWV3X3NldHRpbmdfZm9udF9kZWZhdWx0X3NpemVfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBp
bnQgc2l6ZSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBF
SU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJ
TkFfRkFMU0UpOwotICAgIGlmIChwcml2LT5zZXR0aW5ncy5mb250X2RlZmF1bHRfc2l6ZSAhPSBz
aXplKSB7Ci0gICAgICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNldERlZmF1bHRGb250U2l6ZShz
aXplKTsKLSAgICAgICAgcHJpdi0+c2V0dGluZ3MuZm9udF9kZWZhdWx0X3NpemUgPSBzaXplOwor
ICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZB
TFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBF
SU5BX0ZBTFNFKTsKKyAgICBpZiAocHJpdi0+c2V0dGluZ3MuZm9udERlZmF1bHRTaXplICE9IHNp
emUpIHsKKyAgICAgICAgcHJpdi0+cGFnZVNldHRpbmdzLT5zZXREZWZhdWx0Rm9udFNpemUoc2l6
ZSk7CisgICAgICAgIHByaXYtPnNldHRpbmdzLmZvbnREZWZhdWx0U2l6ZSA9IHNpemU7CiAgICAg
fQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKIGludCBld2tfdmlld19zZXR0aW5nX2ZvbnRf
bW9ub3NwYWNlX3NpemVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIDApOwotICAgIEVXS19WSUVXX1BS
SVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgMCk7Ci0gICAgcmV0dXJuIHByaXYtPnNldHRpbmdz
LmZvbnRfbW9ub3NwYWNlX3NpemU7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tW
aWV3LCBzbWFydERhdGEsIDApOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFy
dERhdGEsIHByaXYsIDApOworICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5mb250TW9ub3NwYWNl
U2l6ZTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfZm9udF9tb25vc3BhY2Vfc2l6
ZV9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGludCBzaXplKQogewotICAgIEVXS19WSUVXX1NE
X0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BS
SVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7Ci0gICAgaWYgKHByaXYtPnNl
dHRpbmdzLmZvbnRfbW9ub3NwYWNlX3NpemUgIT0gc2l6ZSkgewotICAgICAgICBwcml2LT5wYWdl
X3NldHRpbmdzLT5zZXREZWZhdWx0Rml4ZWRGb250U2l6ZShzaXplKTsKLSAgICAgICAgcHJpdi0+
c2V0dGluZ3MuZm9udF9tb25vc3BhY2Vfc2l6ZSA9IHNpemU7CisgICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVX
X1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIGlm
IChwcml2LT5zZXR0aW5ncy5mb250TW9ub3NwYWNlU2l6ZSAhPSBzaXplKSB7CisgICAgICAgIHBy
aXYtPnBhZ2VTZXR0aW5ncy0+c2V0RGVmYXVsdEZpeGVkRm9udFNpemUoc2l6ZSk7CisgICAgICAg
IHByaXYtPnNldHRpbmdzLmZvbnRNb25vc3BhY2VTaXplID0gc2l6ZTsKICAgICB9CiAgICAgcmV0
dXJuIEVJTkFfVFJVRTsKIH0KIAogY29uc3QgY2hhciogZXdrX3ZpZXdfZm9udF9mYW1pbHlfbmFt
ZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV3a19Gb250X0ZhbWlseSBmb250RmFt
aWx5KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIDApOwot
ICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgMCk7CisgICAgRVdLX1ZJ
RVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIDApOworICAgIEVXS19WSUVX
X1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIDApOwogCiAgICAgc3dpdGNoIChm
b250RmFtaWx5KSB7CiAgICAgY2FzZSBFV0tfRk9OVF9GQU1JTFlfU1RBTkRBUkQ6Ci0gICAgICAg
IHJldHVybiBwcml2LT5zZXR0aW5ncy5mb250X3N0YW5kYXJkOworICAgICAgICByZXR1cm4gcHJp
di0+c2V0dGluZ3MuZm9udFN0YW5kYXJkOwogICAgIGNhc2UgRVdLX0ZPTlRfRkFNSUxZX0NVUlNJ
VkU6Ci0gICAgICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5mb250X2N1cnNpdmU7CisgICAgICAg
IHJldHVybiBwcml2LT5zZXR0aW5ncy5mb250Q3Vyc2l2ZTsKICAgICBjYXNlIEVXS19GT05UX0ZB
TUlMWV9GQU5UQVNZOgotICAgICAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZm9udF9mYW50YXN5
OworICAgICAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZm9udEZhbnRhc3k7CiAgICAgY2FzZSBF
V0tfRk9OVF9GQU1JTFlfTU9OT1NQQUNFOgotICAgICAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3Mu
Zm9udF9tb25vc3BhY2U7CisgICAgICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5mb250TW9ub3Nw
YWNlOwogICAgIGNhc2UgRVdLX0ZPTlRfRkFNSUxZX1NFUklGOgotICAgICAgICByZXR1cm4gcHJp
di0+c2V0dGluZ3MuZm9udF9zZXJpZjsKKyAgICAgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmZv
bnRTZXJpZjsKICAgICBjYXNlIEVXS19GT05UX0ZBTUlMWV9TQU5TX1NFUklGOgotICAgICAgICBy
ZXR1cm4gcHJpdi0+c2V0dGluZ3MuZm9udF9zYW5zX3NlcmlmOworICAgICAgICByZXR1cm4gcHJp
di0+c2V0dGluZ3MuZm9udFNhbnNTZXJpZjsKICAgICB9CiAgICAgcmV0dXJuIDA7CiB9CiAKIEVp
bmFfQm9vbCBld2tfdmlld19mb250X2ZhbWlseV9uYW1lX3NldChFdmFzX09iamVjdCogZXdrVmll
dywgRXdrX0ZvbnRfRmFtaWx5IGZvbnRGYW1pbHksIGNvbnN0IGNoYXIqIG5hbWUpCiB7Ci0gICAg
RVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAg
RVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBF
V0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7
CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9G
QUxTRSk7CiAKICAgICBzd2l0Y2ggKGZvbnRGYW1pbHkpIHsKICAgICBjYXNlIEVXS19GT05UX0ZB
TUlMWV9TVEFOREFSRDoKLSAgICAgICAgaWYgKGVpbmFfc3RyaW5nc2hhcmVfcmVwbGFjZSgmcHJp
di0+c2V0dGluZ3MuZm9udF9zdGFuZGFyZCwgbmFtZSkpCi0gICAgICAgICAgICBwcml2LT5wYWdl
X3NldHRpbmdzLT5zZXRTdGFuZGFyZEZvbnRGYW1pbHkoQXRvbWljU3RyaW5nOjpmcm9tVVRGOChu
YW1lKSk7CisgICAgICAgIGlmIChlaW5hX3N0cmluZ3NoYXJlX3JlcGxhY2UoJnByaXYtPnNldHRp
bmdzLmZvbnRTdGFuZGFyZCwgbmFtZSkpCisgICAgICAgICAgICBwcml2LT5wYWdlU2V0dGluZ3Mt
PnNldFN0YW5kYXJkRm9udEZhbWlseShBdG9taWNTdHJpbmc6OmZyb21VVEY4KG5hbWUpKTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBFV0tfRk9OVF9GQU1JTFlfQ1VSU0lWRToKLSAgICAgICAg
aWYgKGVpbmFfc3RyaW5nc2hhcmVfcmVwbGFjZSgmcHJpdi0+c2V0dGluZ3MuZm9udF9jdXJzaXZl
LCBuYW1lKSkKLSAgICAgICAgICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNldEN1cnNpdmVGb250
RmFtaWx5KEF0b21pY1N0cmluZzo6ZnJvbVVURjgobmFtZSkpOworICAgICAgICBpZiAoZWluYV9z
dHJpbmdzaGFyZV9yZXBsYWNlKCZwcml2LT5zZXR0aW5ncy5mb250Q3Vyc2l2ZSwgbmFtZSkpCisg
ICAgICAgICAgICBwcml2LT5wYWdlU2V0dGluZ3MtPnNldEN1cnNpdmVGb250RmFtaWx5KEF0b21p
Y1N0cmluZzo6ZnJvbVVURjgobmFtZSkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEVXS19G
T05UX0ZBTUlMWV9GQU5UQVNZOgotICAgICAgICBpZiAoZWluYV9zdHJpbmdzaGFyZV9yZXBsYWNl
KCZwcml2LT5zZXR0aW5ncy5mb250X2ZhbnRhc3ksIG5hbWUpKQotICAgICAgICAgICAgcHJpdi0+
cGFnZV9zZXR0aW5ncy0+c2V0RmFudGFzeUZvbnRGYW1pbHkoQXRvbWljU3RyaW5nOjpmcm9tVVRG
OChuYW1lKSk7CisgICAgICAgIGlmIChlaW5hX3N0cmluZ3NoYXJlX3JlcGxhY2UoJnByaXYtPnNl
dHRpbmdzLmZvbnRGYW50YXN5LCBuYW1lKSkKKyAgICAgICAgICAgIHByaXYtPnBhZ2VTZXR0aW5n
cy0+c2V0RmFudGFzeUZvbnRGYW1pbHkoQXRvbWljU3RyaW5nOjpmcm9tVVRGOChuYW1lKSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgRVdLX0ZPTlRfRkFNSUxZX01PTk9TUEFDRToKLSAgICAg
ICAgaWYgKGVpbmFfc3RyaW5nc2hhcmVfcmVwbGFjZSgmcHJpdi0+c2V0dGluZ3MuZm9udF9tb25v
c3BhY2UsIG5hbWUpKQotICAgICAgICAgICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0Rml4ZWRG
b250RmFtaWx5KEF0b21pY1N0cmluZzo6ZnJvbVVURjgobmFtZSkpOworICAgICAgICBpZiAoZWlu
YV9zdHJpbmdzaGFyZV9yZXBsYWNlKCZwcml2LT5zZXR0aW5ncy5mb250TW9ub3NwYWNlLCBuYW1l
KSkKKyAgICAgICAgICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0Rml4ZWRGb250RmFtaWx5KEF0
b21pY1N0cmluZzo6ZnJvbVVURjgobmFtZSkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEVX
S19GT05UX0ZBTUlMWV9TRVJJRjoKLSAgICAgICAgaWYgKGVpbmFfc3RyaW5nc2hhcmVfcmVwbGFj
ZSgmcHJpdi0+c2V0dGluZ3MuZm9udF9zZXJpZiwgbmFtZSkpCi0gICAgICAgICAgICBwcml2LT5w
YWdlX3NldHRpbmdzLT5zZXRTZXJpZkZvbnRGYW1pbHkoQXRvbWljU3RyaW5nOjpmcm9tVVRGOChu
YW1lKSk7CisgICAgICAgIGlmIChlaW5hX3N0cmluZ3NoYXJlX3JlcGxhY2UoJnByaXYtPnNldHRp
bmdzLmZvbnRTZXJpZiwgbmFtZSkpCisgICAgICAgICAgICBwcml2LT5wYWdlU2V0dGluZ3MtPnNl
dFNlcmlmRm9udEZhbWlseShBdG9taWNTdHJpbmc6OmZyb21VVEY4KG5hbWUpKTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBFV0tfRk9OVF9GQU1JTFlfU0FOU19TRVJJRjoKLSAgICAgICAgaWYg
KGVpbmFfc3RyaW5nc2hhcmVfcmVwbGFjZSgmcHJpdi0+c2V0dGluZ3MuZm9udF9zYW5zX3Nlcmlm
LCBuYW1lKSkKLSAgICAgICAgICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNldFNhbnNTZXJpZkZv
bnRGYW1pbHkoQXRvbWljU3RyaW5nOjpmcm9tVVRGOChuYW1lKSk7CisgICAgICAgIGlmIChlaW5h
X3N0cmluZ3NoYXJlX3JlcGxhY2UoJnByaXYtPnNldHRpbmdzLmZvbnRTYW5zU2VyaWYsIG5hbWUp
KQorICAgICAgICAgICAgcHJpdi0+cGFnZVNldHRpbmdzLT5zZXRTYW5zU2VyaWZGb250RmFtaWx5
KEF0b21pY1N0cmluZzo6ZnJvbVVURjgobmFtZSkpOwogICAgICAgICBicmVhazsKICAgICBkZWZh
dWx0OgogICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKQEAgLTIzMDQsOTkgKzIzMDQsOTkgQEAg
RWluYV9Cb29sIGV3a192aWV3X2ZvbnRfZmFtaWx5X25hbWVfc2V0KEV2YXNfT2JqZWN0KiBld2tW
aWV3LCBFd2tfRm9udF9GYW1pbHkgZm8KIAogRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfc3Bh
dGlhbF9uYXZpZ2F0aW9uX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBF
V0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBF
V0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwotICAgIHJl
dHVybiBwcml2LT5zZXR0aW5ncy5zcGF0aWFsX25hdmlnYXRpb247CisgICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19W
SUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOworICAg
IHJldHVybiBwcml2LT5zZXR0aW5ncy5zcGF0aWFsTmF2aWdhdGlvbjsKIH0KIAogRWluYV9Cb29s
IGV3a192aWV3X3NldHRpbmdfc3BhdGlhbF9uYXZpZ2F0aW9uX3NldChFdmFzX09iamVjdCogZXdr
VmlldywgRWluYV9Cb29sIGVuYWJsZSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJO
KGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRV
Uk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9P
Ul9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBlbmFibGUgPSAhIWVu
YWJsZTsKLSAgICBpZiAocHJpdi0+c2V0dGluZ3Muc3BhdGlhbF9uYXZpZ2F0aW9uICE9IGVuYWJs
ZSkgewotICAgICAgICBwcml2LT5wYWdlX3NldHRpbmdzLT5zZXRTcGF0aWFsTmF2aWdhdGlvbkVu
YWJsZWQoZW5hYmxlKTsKLSAgICAgICAgcHJpdi0+c2V0dGluZ3Muc3BhdGlhbF9uYXZpZ2F0aW9u
ID0gZW5hYmxlOworICAgIGlmIChwcml2LT5zZXR0aW5ncy5zcGF0aWFsTmF2aWdhdGlvbiAhPSBl
bmFibGUpIHsKKyAgICAgICAgcHJpdi0+cGFnZVNldHRpbmdzLT5zZXRTcGF0aWFsTmF2aWdhdGlv
bkVuYWJsZWQoZW5hYmxlKTsKKyAgICAgICAgcHJpdi0+c2V0dGluZ3Muc3BhdGlhbE5hdmlnYXRp
b24gPSBlbmFibGU7CiAgICAgfQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKIEVpbmFfQm9v
bCBld2tfdmlld19zZXR0aW5nX2xvY2FsX3N0b3JhZ2VfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBl
d2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJ
TkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlO
QV9GQUxTRSk7Ci0gICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmxvY2FsX3N0b3JhZ2U7CisgICAg
RVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0Up
OworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFf
RkFMU0UpOworICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5sb2NhbFN0b3JhZ2U7CiB9CiAKIEVp
bmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2xvY2FsX3N0b3JhZ2Vfc2V0KEV2YXNfT2JqZWN0KiBl
d2tWaWV3LCBFaW5hX0Jvb2wgZW5hYmxlKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRV
Uk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JF
VFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
Tihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VU
X09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIGVuYWJsZSA9ICEh
ZW5hYmxlOwotICAgIGlmIChwcml2LT5zZXR0aW5ncy5sb2NhbF9zdG9yYWdlICE9IGVuYWJsZSkg
ewotICAgICAgICBwcml2LT5wYWdlX3NldHRpbmdzLT5zZXRMb2NhbFN0b3JhZ2VFbmFibGVkKGVu
YWJsZSk7Ci0gICAgICAgIHByaXYtPnNldHRpbmdzLmxvY2FsX3N0b3JhZ2UgPSBlbmFibGU7Cisg
ICAgaWYgKHByaXYtPnNldHRpbmdzLmxvY2FsU3RvcmFnZSAhPSBlbmFibGUpIHsKKyAgICAgICAg
cHJpdi0+cGFnZVNldHRpbmdzLT5zZXRMb2NhbFN0b3JhZ2VFbmFibGVkKGVuYWJsZSk7CisgICAg
ICAgIHByaXYtPnNldHRpbmdzLmxvY2FsU3RvcmFnZSA9IGVuYWJsZTsKICAgICB9CiAgICAgcmV0
dXJuIEVJTkFfVFJVRTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfcGFnZV9jYWNo
ZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9H
RVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKLSAgICByZXR1cm4gcHJpdi0+c2V0
dGluZ3MucGFnZV9jYWNoZTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcs
IHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJO
KHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgcmV0dXJuIHByaXYtPnNldHRpbmdz
LnBhZ2VDYWNoZTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfcGFnZV9jYWNoZV9z
ZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCBlbmFibGUpCiB7Ci0gICAgRVdLX1ZJ
RVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJ
RVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklF
V19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAg
RVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7
CiAgICAgZW5hYmxlID0gISFlbmFibGU7Ci0gICAgaWYgKHByaXYtPnNldHRpbmdzLnBhZ2VfY2Fj
aGUgIT0gZW5hYmxlKSB7Ci0gICAgICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNldFVzZXNQYWdl
Q2FjaGUoZW5hYmxlKTsKLSAgICAgICAgcHJpdi0+c2V0dGluZ3MucGFnZV9jYWNoZSA9IGVuYWJs
ZTsKKyAgICBpZiAocHJpdi0+c2V0dGluZ3MucGFnZUNhY2hlICE9IGVuYWJsZSkgeworICAgICAg
ICBwcml2LT5wYWdlU2V0dGluZ3MtPnNldFVzZXNQYWdlQ2FjaGUoZW5hYmxlKTsKKyAgICAgICAg
cHJpdi0+c2V0dGluZ3MucGFnZUNhY2hlID0gZW5hYmxlOwogICAgIH0KICAgICByZXR1cm4gRUlO
QV9UUlVFOwogfQogCiBjb25zdCBjaGFyKiBld2tfdmlld19zZXR0aW5nX2xvY2FsX3N0b3JhZ2Vf
ZGF0YWJhc2VfcGF0aF9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdL
X1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgMCk7Ci0gICAgRVdLX1ZJRVdfUFJJ
Vl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCAwKTsKLSAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3Mu
bG9jYWxfc3RvcmFnZV9kYXRhYmFzZV9wYXRoOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRV
Uk4oZXdrVmlldywgc21hcnREYXRhLCAwKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRV
Uk4oc21hcnREYXRhLCBwcml2LCAwKTsKKyAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MubG9jYWxT
dG9yYWdlRGF0YWJhc2VQYXRoOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19sb2Nh
bF9zdG9yYWdlX2RhdGFiYXNlX3BhdGhfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBj
aGFyKiBwYXRoKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2Qs
IEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwg
RUlOQV9GQUxTRSk7Ci0gICAgaWYgKGVpbmFfc3RyaW5nc2hhcmVfcmVwbGFjZSgmcHJpdi0+c2V0
dGluZ3MubG9jYWxfc3RvcmFnZV9kYXRhYmFzZV9wYXRoLCBwYXRoKSkKLSAgICAgICAgcHJpdi0+
cGFnZV9zZXR0aW5ncy0+c2V0TG9jYWxTdG9yYWdlRGF0YWJhc2VQYXRoKFN0cmluZzo6ZnJvbVVU
RjgocGF0aCkpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnRE
YXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnRE
YXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBpZiAoZWluYV9zdHJpbmdzaGFyZV9yZXBsYWNl
KCZwcml2LT5zZXR0aW5ncy5sb2NhbFN0b3JhZ2VEYXRhYmFzZVBhdGgsIHBhdGgpKQorICAgICAg
ICBwcml2LT5wYWdlU2V0dGluZ3MtPnNldExvY2FsU3RvcmFnZURhdGFiYXNlUGF0aChTdHJpbmc6
OmZyb21VVEY4KHBhdGgpKTsKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCiBFaW5hX0Jvb2wg
ZXdrX3ZpZXdfc2V0dGluZ19taW5pbXVtX3RpbWVyX2ludGVydmFsX3NldChFdmFzX09iamVjdCog
ZXdrVmlldywgZG91YmxlIGludGVydmFsKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRV
Uk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JF
VFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7Ci0gICAgaWYgKGZhYnMocHJpdi0+c2V0dGluZ3Mu
ZG9tX3RpbWVyX2ludGVydmFsIC0gaW50ZXJ2YWwpID49IHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91
YmxlPjo6ZXBzaWxvbigpKSB7Ci0gICAgICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNldE1pbkRP
TVRpbWVySW50ZXJ2YWwoaW50ZXJ2YWwpOwotICAgICAgICBwcml2LT5zZXR0aW5ncy5kb21fdGlt
ZXJfaW50ZXJ2YWwgPSBpbnRlcnZhbDsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3
a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1Jf
UkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgaWYgKGZhYnMocHJpdi0+
c2V0dGluZ3MuZG9tVGltZXJJbnRlcnZhbCAtIGludGVydmFsKSA+PSBzdGQ6Om51bWVyaWNfbGlt
aXRzPGRvdWJsZT46OmVwc2lsb24oKSkgeworICAgICAgICBwcml2LT5wYWdlU2V0dGluZ3MtPnNl
dE1pbkRPTVRpbWVySW50ZXJ2YWwoaW50ZXJ2YWwpOworICAgICAgICBwcml2LT5zZXR0aW5ncy5k
b21UaW1lckludGVydmFsID0gaW50ZXJ2YWw7CiAgICAgfQogICAgIHJldHVybiBFSU5BX1RSVUU7
CiB9CiAKIGRvdWJsZSBld2tfdmlld19zZXR0aW5nX21pbmltdW1fdGltZXJfaW50ZXJ2YWxfZ2V0
KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9S
RVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09S
X1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7Ci0gICAgcmV0dXJuIHByaXYtPnNldHRpbmdz
LmRvbV90aW1lcl9pbnRlcnZhbDsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1Zp
ZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVU
VVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgcmV0dXJuIHByaXYtPnNldHRp
bmdzLmRvbVRpbWVySW50ZXJ2YWw7CiB9CiAKIEV3a19WaWV3X1NtYXJ0X0RhdGEqIGV3a192aWV3
X3NtYXJ0X2RhdGFfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19W
SUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIDApOwotICAgIHJldHVybiBzZDsKKyAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgMCk7CisgICAg
cmV0dXJuIHNtYXJ0RGF0YTsKIH0KIAogLyoqCkBAIC0yNDYxLDggKzI0NjEsOCBAQCBjb25zdCBF
d2tfU2Nyb2xsX1JlcXVlc3QqIGV3a192aWV3X3Njcm9sbF9yZXF1ZXN0c19nZXQoY29uc3QgRXdr
X1ZpZXdfUHJpdmF0ZV9EYQogICogQHBhcmFtIHByaXYgcHJpdmF0ZSBoYW5kbGUgcG9pbnRlciBv
ZiB0aGUgdmlldyB0byBhZGQgcmVwYWludCByZXF1ZXN0LgogICogQHBhcmFtIHggaG9yaXpvbnRh
bCBwb3NpdGlvbiByZWxhdGl2ZSB0byBjdXJyZW50IHZpZXcgcG9ydCAoc2Nyb2xsZWQpLgogICog
QHBhcmFtIHkgdmVydGljYWwgcG9zaXRpb24gcmVsYXRpdmUgdG8gY3VycmVudCB2aWV3IHBvcnQg
KHNjcm9sbGVkKS4KLSAqIEBwYXJhbSB3IHdpZHRoIG9mIGFyZWEgdG8gYmUgcmVwYWludGVkCi0g
KiBAcGFyYW0gaCBoZWlnaHQgb2YgYXJlYSB0byBiZSByZXBhaW50ZWQKKyAqIEBwYXJhbSB3aWR0
aCB3aWR0aCBvZiBhcmVhIHRvIGJlIHJlcGFpbnRlZAorICogQHBhcmFtIGhlaWdodCBoZWlnaHQg
b2YgYXJlYSB0byBiZSByZXBhaW50ZWQKICAqCiAgKiBAbm90ZSB0aGlzIGlzIG5vdCBmb3IgZ2Vu
ZXJhbCB1c2UgYnV0IGp1c3QgZm9yIHN1YmNsYXNzZXMgdGhhdCB3YW50CiAgKiAgICAgICB0byBk
ZWZpbmUgdGhlaXIgb3duIGJhY2tpbmcgc3RvcmUuCkBAIC0yNDg1LDEyICsyNDg1LDEyIEBAIHZv
aWQgZXdrX3ZpZXdfbGF5b3V0X2lmX25lZWRlZF9yZWN1cnNpdmUoRXdrX1ZpZXdfUHJpdmF0ZV9E
YXRhKiBwcml2KQogewogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHByaXYpOwogCi0g
ICAgV2ViQ29yZTo6RnJhbWVWaWV3KiB2ID0gcHJpdi0+bWFpbl9mcmFtZS0+dmlldygpOwotICAg
IGlmICghdikgeworICAgIFdlYkNvcmU6OkZyYW1lVmlldyogdmlldyA9IHByaXYtPm1haW5GcmFt
ZS0+dmlldygpOworICAgIGlmICghdmlldykgewogICAgICAgICBFUlIoIm5vIG1haW4gZnJhbWUg
dmlldyIpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIHYtPnVwZGF0ZUxheW91dEFuZFN0
eWxlSWZOZWVkZWRSZWN1cnNpdmUoKTsKKyAgICB2aWV3LT51cGRhdGVMYXlvdXRBbmRTdHlsZUlm
TmVlZGVkUmVjdXJzaXZlKCk7CiB9CiAKIHZvaWQgZXdrX3ZpZXdfc2Nyb2xsc19wcm9jZXNzKEV3
a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSkKQEAgLTI1MTEsNyArMjUxMSw3IEBAIHZvaWQg
ZXdrX3ZpZXdfc2Nyb2xsc19wcm9jZXNzKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSkK
ICAqICAgICAgIHRvIGRlZmluZSB0aGVpciBvd24gYmFja2luZyBzdG9yZS4KICAqLwogc3RydWN0
IF9Fd2tfVmlld19QYWludF9Db250ZXh0IHsKLSAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQq
IGdjOworICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY0NvbnRleHQ7CiAgICAg
V2ViQ29yZTo6RnJhbWVWaWV3KiB2aWV3OwogICAgIGNhaXJvX3QqIGNyOwogfTsKQEAgLTI1MjAs
MjYgKzI1MjAsMjYgQEAgRXdrX1ZpZXdfUGFpbnRfQ29udGV4dCogZXdrX3ZpZXdfcGFpbnRfY29u
dGV4dF9uZXcoRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKiBwcml2LAogewogICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOX1ZBTChwcml2LCAwKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTl9WQUwoY3IsIDApOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChwcml2
LT5tYWluX2ZyYW1lLCAwKTsKLSAgICBXZWJDb3JlOjpGcmFtZVZpZXcqIHZpZXcgPSBwcml2LT5t
YWluX2ZyYW1lLT52aWV3KCk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHBy
aXYtPm1haW5GcmFtZSwgMCk7CisgICAgV2ViQ29yZTo6RnJhbWVWaWV3KiB2aWV3ID0gcHJpdi0+
bWFpbkZyYW1lLT52aWV3KCk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHZp
ZXcsIDApOwotICAgIEV3a19WaWV3X1BhaW50X0NvbnRleHQqIGN0eHQgPSBzdGF0aWNfY2FzdDxF
d2tfVmlld19QYWludF9Db250ZXh0Kj4obWFsbG9jKHNpemVvZigqY3R4dCkpKTsKLSAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoY3R4dCwgMCk7CisgICAgRXdrX1ZpZXdfUGFpbnRf
Q29udGV4dCogY29udGV4dCA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1BhaW50X0NvbnRleHQqPiht
YWxsb2Moc2l6ZW9mKCpjb250ZXh0KSkpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJO
X1ZBTChjb250ZXh0LCAwKTsKIAotICAgIGN0eHQtPmdjID0gbmV3IFdlYkNvcmU6OkdyYXBoaWNz
Q29udGV4dChjcik7Ci0gICAgaWYgKCFjdHh0LT5nYykgewotICAgICAgICBmcmVlKGN0eHQpOwor
ICAgIGNvbnRleHQtPmdyYXBoaWNDb250ZXh0ID0gbmV3IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4
dChjcik7CisgICAgaWYgKCFjb250ZXh0LT5ncmFwaGljQ29udGV4dCkgeworICAgICAgICBmcmVl
KGNvbnRleHQpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAgY3R4dC0+dmlldyA9IHZp
ZXc7Ci0gICAgY3R4dC0+Y3IgPSBjYWlyb19yZWZlcmVuY2UoY3IpOwotICAgIHJldHVybiBjdHh0
OworICAgIGNvbnRleHQtPnZpZXcgPSB2aWV3OworICAgIGNvbnRleHQtPmNyID0gY2Fpcm9fcmVm
ZXJlbmNlKGNyKTsKKyAgICByZXR1cm4gY29udGV4dDsKIH0KIAogdm9pZCBld2tfdmlld19wYWlu
dF9jb250ZXh0X2ZyZWUoRXdrX1ZpZXdfUGFpbnRfQ29udGV4dCogY29udGV4dCkKIHsKICAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihjb250ZXh0KTsKLSAgICBkZWxldGUgY29udGV4dC0+
Z2M7CisgICAgZGVsZXRlIGNvbnRleHQtPmdyYXBoaWNDb250ZXh0OwogICAgIGNhaXJvX2Rlc3Ry
b3koY29udGV4dC0+Y3IpOwogICAgIGZyZWUoY29udGV4dCk7CiB9CkBAIC0yNTQ4LDEzICsyNTQ4
LDEzIEBAIHZvaWQgZXdrX3ZpZXdfcGFpbnRfY29udGV4dF9zYXZlKEV3a19WaWV3X1BhaW50X0Nv
bnRleHQqIGNvbnRleHQpCiB7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oY29udGV4
dCk7CiAgICAgY2Fpcm9fc2F2ZShjb250ZXh0LT5jcik7Ci0gICAgY29udGV4dC0+Z2MtPnNhdmUo
KTsKKyAgICBjb250ZXh0LT5ncmFwaGljQ29udGV4dC0+c2F2ZSgpOwogfQogCiB2b2lkIGV3a192
aWV3X3BhaW50X2NvbnRleHRfcmVzdG9yZShFd2tfVmlld19QYWludF9Db250ZXh0KiBjb250ZXh0
KQogewogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGNvbnRleHQpOwotICAgIGNvbnRl
eHQtPmdjLT5yZXN0b3JlKCk7CisgICAgY29udGV4dC0+Z3JhcGhpY0NvbnRleHQtPnJlc3RvcmUo
KTsKICAgICBjYWlyb19yZXN0b3JlKGNvbnRleHQtPmNyKTsKIH0KIApAQCAtMjU2Miw3ICsyNTYy
LDcgQEAgdm9pZCBld2tfdmlld19wYWludF9jb250ZXh0X2NsaXAoRXdrX1ZpZXdfUGFpbnRfQ29u
dGV4dCogY29udGV4dCwgY29uc3QgRWluYV9SZWMKIHsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTihjb250ZXh0KTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihhcmVhKTsK
LSAgICBjb250ZXh0LT5nYy0+Y2xpcChXZWJDb3JlOjpJbnRSZWN0KGFyZWEtPngsIGFyZWEtPnks
IGFyZWEtPncsIGFyZWEtPmgpKTsKKyAgICBjb250ZXh0LT5ncmFwaGljQ29udGV4dC0+Y2xpcChX
ZWJDb3JlOjpJbnRSZWN0KGFyZWEtPngsIGFyZWEtPnksIGFyZWEtPncsIGFyZWEtPmgpKTsKIH0K
IAogdm9pZCBld2tfdmlld19wYWludF9jb250ZXh0X3BhaW50KEV3a19WaWV3X1BhaW50X0NvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IEVpbmFfUmVjdGFuZ2xlKiBhcmVhKQpAQCAtMjU3Myw4ICsyNTcz
LDggQEAgdm9pZCBld2tfdmlld19wYWludF9jb250ZXh0X3BhaW50KEV3a19WaWV3X1BhaW50X0Nv
bnRleHQqIGNvbnRleHQsIGNvbnN0IEVpbmFfUmUKICAgICBXZWJDb3JlOjpJbnRSZWN0IHJlY3Qo
YXJlYS0+eCwgYXJlYS0+eSwgYXJlYS0+dywgYXJlYS0+aCk7CiAKICAgICBpZiAoY29udGV4dC0+
dmlldy0+aXNUcmFuc3BhcmVudCgpKQotICAgICAgICBjb250ZXh0LT5nYy0+Y2xlYXJSZWN0KHJl
Y3QpOwotICAgIGNvbnRleHQtPnZpZXctPnBhaW50KGNvbnRleHQtPmdjLCByZWN0KTsKKyAgICAg
ICAgY29udGV4dC0+Z3JhcGhpY0NvbnRleHQtPmNsZWFyUmVjdChyZWN0KTsKKyAgICBjb250ZXh0
LT52aWV3LT5wYWludChjb250ZXh0LT5ncmFwaGljQ29udGV4dCwgcmVjdCk7CiB9CiAKIHZvaWQg
ZXdrX3ZpZXdfcGFpbnRfY29udGV4dF9wYWludF9jb250ZW50cyhFd2tfVmlld19QYWludF9Db250
ZXh0KiBjb250ZXh0LCBjb25zdCBFaW5hX1JlY3RhbmdsZSogYXJlYSkKQEAgLTI1ODUsMjMgKzI1
ODUsMjMgQEAgdm9pZCBld2tfdmlld19wYWludF9jb250ZXh0X3BhaW50X2NvbnRlbnRzKEV3a19W
aWV3X1BhaW50X0NvbnRleHQqIGNvbnRleHQsIGNvbnMKICAgICBXZWJDb3JlOjpJbnRSZWN0IHJl
Y3QoYXJlYS0+eCwgYXJlYS0+eSwgYXJlYS0+dywgYXJlYS0+aCk7CiAKICAgICBpZiAoY29udGV4
dC0+dmlldy0+aXNUcmFuc3BhcmVudCgpKQotICAgICAgICBjb250ZXh0LT5nYy0+Y2xlYXJSZWN0
KHJlY3QpOworICAgICAgICBjb250ZXh0LT5ncmFwaGljQ29udGV4dC0+Y2xlYXJSZWN0KHJlY3Qp
OwogCi0gICAgY29udGV4dC0+dmlldy0+cGFpbnRDb250ZW50cyhjb250ZXh0LT5nYywgcmVjdCk7
CisgICAgY29udGV4dC0+dmlldy0+cGFpbnRDb250ZW50cyhjb250ZXh0LT5ncmFwaGljQ29udGV4
dCwgcmVjdCk7CiB9CiAKIHZvaWQgZXdrX3ZpZXdfcGFpbnRfY29udGV4dF9zY2FsZShFd2tfVmll
d19QYWludF9Db250ZXh0KiBjb250ZXh0LCBmbG9hdCBzY2FsZVgsIGZsb2F0IHNjYWxlWSkKIHsK
ICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihjb250ZXh0KTsKIAotICAgIGNvbnRleHQt
PmdjLT5zY2FsZShXZWJDb3JlOjpGbG9hdFNpemUoc2NhbGVYLCBzY2FsZVkpKTsKKyAgICBjb250
ZXh0LT5ncmFwaGljQ29udGV4dC0+c2NhbGUoV2ViQ29yZTo6RmxvYXRTaXplKHNjYWxlWCwgc2Nh
bGVZKSk7CiB9CiAKIHZvaWQgZXdrX3ZpZXdfcGFpbnRfY29udGV4dF90cmFuc2xhdGUoRXdrX1Zp
ZXdfUGFpbnRfQ29udGV4dCogY29udGV4dCwgZmxvYXQgeCwgZmxvYXQgeSkKIHsKICAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTihjb250ZXh0KTsKIAotICAgIGNvbnRleHQtPmdjLT50cmFu
c2xhdGUoeCwgeSk7CisgICAgY29udGV4dC0+Z3JhcGhpY0NvbnRleHQtPnRyYW5zbGF0ZSh4LCB5
KTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3BhaW50KEV3a19WaWV3X1ByaXZhdGVfRGF0YSog
cHJpdiwgY2Fpcm9fdCogY3IsIGNvbnN0IEVpbmFfUmVjdGFuZ2xlKiBhcmVhKQpAQCAtMjYwOSwy
MSArMjYwOSwyMSBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfcGFpbnQoRXdrX1ZpZXdfUHJpdmF0ZV9E
YXRhKiBwcml2LCBjYWlyb190KiBjciwgY29uc3QgRWluYV9SZQogICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOX1ZBTChwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTl9WQUwoY3IsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOX1ZBTChhcmVhLCBFSU5BX0ZBTFNFKTsKLSAgICBXZWJDb3JlOjpGcmFtZVZpZXcqIHZp
ZXcgPSBwcml2LT5tYWluX2ZyYW1lLT52aWV3KCk7CisgICAgV2ViQ29yZTo6RnJhbWVWaWV3KiB2
aWV3ID0gcHJpdi0+bWFpbkZyYW1lLT52aWV3KCk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk5fVkFMKHZpZXcsIEVJTkFfRkFMU0UpOwogCiAgICAgaWYgKHZpZXctPm5lZWRzTGF5b3V0
KCkpCiAgICAgICAgIHZpZXctPmZvcmNlTGF5b3V0KCk7Ci0gICAgV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0IGdjKGNyKTsKKyAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250
ZXh0KGNyKTsKICAgICBXZWJDb3JlOjpJbnRSZWN0IHJlY3QoYXJlYS0+eCwgYXJlYS0+eSwgYXJl
YS0+dywgYXJlYS0+aCk7CiAKICAgICBjYWlyb19zYXZlKGNyKTsKLSAgICBnYy5zYXZlKCk7Ci0g
ICAgZ2MuY2xpcChyZWN0KTsKKyAgICBncmFwaGljc0NvbnRleHQuc2F2ZSgpOworICAgIGdyYXBo
aWNzQ29udGV4dC5jbGlwKHJlY3QpOwogICAgIGlmICh2aWV3LT5pc1RyYW5zcGFyZW50KCkpCi0g
ICAgICAgIGdjLmNsZWFyUmVjdChyZWN0KTsKLSAgICB2aWV3LT5wYWludCgmZ2MsIHJlY3QpOwot
ICAgIGdjLnJlc3RvcmUoKTsKKyAgICAgICAgZ3JhcGhpY3NDb250ZXh0LmNsZWFyUmVjdChyZWN0
KTsKKyAgICB2aWV3LT5wYWludCgmZ3JhcGhpY3NDb250ZXh0LCByZWN0KTsKKyAgICBncmFwaGlj
c0NvbnRleHQucmVzdG9yZSgpOwogICAgIGNhaXJvX3Jlc3RvcmUoY3IpOwogCiAgICAgcmV0dXJu
IEVJTkFfVFJVRTsKQEAgLTI2MzQsMTkgKzI2MzQsMTkgQEAgRWluYV9Cb29sIGV3a192aWV3X3Bh
aW50X2NvbnRlbnRzKEV3a19WaWV3X1ByaXZhdGVfRGF0YSogcHJpdiwgY2Fpcm9fdCogY3IsIGNv
bnMKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwocHJpdiwgRUlOQV9GQUxTRSk7
CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGNyLCBFSU5BX0ZBTFNFKTsKICAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoYXJlYSwgRUlOQV9GQUxTRSk7Ci0gICAg
V2ViQ29yZTo6RnJhbWVWaWV3KiB2aWV3ID0gcHJpdi0+bWFpbl9mcmFtZS0+dmlldygpOworICAg
IFdlYkNvcmU6OkZyYW1lVmlldyogdmlldyA9IHByaXYtPm1haW5GcmFtZS0+dmlldygpOwogICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh2aWV3LCBFSU5BX0ZBTFNFKTsKIAotICAg
IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCBnYyhjcik7CisgICAgV2ViQ29yZTo6R3JhcGhpY3ND
b250ZXh0IGdyYXBoaWNzQ29udGV4dChjcik7CiAgICAgV2ViQ29yZTo6SW50UmVjdCByZWN0KGFy
ZWEtPngsIGFyZWEtPnksIGFyZWEtPncsIGFyZWEtPmgpOwogCiAgICAgY2Fpcm9fc2F2ZShjcik7
Ci0gICAgZ2Muc2F2ZSgpOwotICAgIGdjLmNsaXAocmVjdCk7CisgICAgZ3JhcGhpY3NDb250ZXh0
LnNhdmUoKTsKKyAgICBncmFwaGljc0NvbnRleHQuY2xpcChyZWN0KTsKICAgICBpZiAodmlldy0+
aXNUcmFuc3BhcmVudCgpKQotICAgICAgICBnYy5jbGVhclJlY3QocmVjdCk7Ci0gICAgdmlldy0+
cGFpbnRDb250ZW50cygmZ2MsICByZWN0KTsKLSAgICBnYy5yZXN0b3JlKCk7CisgICAgICAgIGdy
YXBoaWNzQ29udGV4dC5jbGVhclJlY3QocmVjdCk7CisgICAgdmlldy0+cGFpbnRDb250ZW50cygm
Z3JhcGhpY3NDb250ZXh0LCAgcmVjdCk7CisgICAgZ3JhcGhpY3NDb250ZXh0LnJlc3RvcmUoKTsK
ICAgICBjYWlyb19yZXN0b3JlKGNyKTsKIAogICAgIHJldHVybiBFSU5BX1RSVUU7CkBAIC0yNjc2
LDggKzI2NzYsOCBAQCB2b2lkIGV3a192aWV3X3JlYWR5KEV2YXNfT2JqZWN0KiBld2tWaWV3KQog
ICovCiB2b2lkIGV3a192aWV3X2lucHV0X21ldGhvZF9zdGF0ZV9zZXQoRXZhc19PYmplY3QqIGV3
a1ZpZXcsIEVpbmFfQm9vbCBhY3RpdmUpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
Tihld2tWaWV3LCBzZCk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVQoc2QsIHByaXYpOworICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhKTsKKyAgICBFV0tfVklF
V19QUklWX0dFVChzbWFydERhdGEsIHByaXYpOwogICAgIFdlYkNvcmU6OkZyYW1lKiBmb2N1c2Vk
RnJhbWUgPSBwcml2LT5wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1l
KCk7CiAKICAgICBwcml2LT5pbWggPSAwOwpAQCAtMjcyNiw4ICsyNzI2LDggQEAgdm9pZCBld2tf
dmlld190aXRsZV9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGNvbnN0IGNoYXIqIHRpdGxlKQog
ICovCiB2b2lkIGV3a192aWV3X3VyaV9jaGFuZ2VkKEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewot
ICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QpOwotICAgIGNvbnN0IGNo
YXIqIHVyaSA9IGV3a19mcmFtZV91cmlfZ2V0KHNkLT5tYWluX2ZyYW1lKTsKKyAgICBFV0tfVklF
V19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSk7CisgICAgY29uc3QgY2hhciog
dXJpID0gZXdrX2ZyYW1lX3VyaV9nZXQoc21hcnREYXRhLT5tYWluX2ZyYW1lKTsKICAgICBEQkco
ImV3a1ZpZXc9JXAsIHVyaT0lcyIsIGV3a1ZpZXcsIHVyaSA/IHVyaSA6ICIobnVsbCkiKTsKICAg
ICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKGV3a1ZpZXcsICJ1cmksY2hhbmdlZCIs
ICh2b2lkKil1cmkpOwogfQpAQCAtMjczNiw3ICsyNzM2LDcgQEAgdm9pZCBld2tfdmlld191cmlf
Y2hhbmdlZChFdmFzX09iamVjdCogZXdrVmlldykKICAqIEBpbnRlcm5hbAogICogUmVwb3J0cyB0
aGF0IGEgRE9NIGRvY3VtZW50IG9iamVjdCBoYXMgZmluaXNoZWQgbG9hZGluZyBmb3IgQHAgZnJh
bWUuCiAgKgotICogQHBhcmFtIG8gVmlldyB3aGljaCBjb250YWlucyB0aGUgZnJhbWUuCisgKiBA
cGFyYW0gZXdrVmlldyBWaWV3IHdoaWNoIGNvbnRhaW5zIHRoZSBmcmFtZS4KICAqIEBwYXJhbSBm
cmFtZSBUaGUgZnJhbWUgd2hvc2UgbG9hZCBoYXMgdHJpZ2dlcmVkIHRoZSBldmVudC4KICAqCiAg
KiBFbWl0cyBzaWduYWw6ICJsb2FkLGRvY3VtZW50LGZpbmlzaGVkIiB3aXRoIEBwIGZyYW1lIGFz
IHRoZSBwYXJhbWV0ZXIuCkBAIC0yNzUwLDcgKzI3NTAsNyBAQCB2b2lkIGV3a192aWV3X2xvYWRf
ZG9jdW1lbnRfZmluaXNoZWQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV2YXNfT2JqZWN0KiBmcmFt
ZSkKICAqIEBpbnRlcm5hbAogICogUmVwb3J0cyB0aGUgdmlldyBzdGFydGVkIGxvYWRpbmcgc29t
ZXRoaW5nLgogICoKLSAqIEBwYXJhbSBvIFZpZXcuCisgKiBAcGFyYW0gZXdrVmlldyBWaWV3Lgog
ICoKICAqIEVtaXRzIHNpZ25hbDogImxvYWQsc3RhcnRlZCIgd2l0aCBubyBwYXJhbWV0ZXJzLgog
ICovCkBAIC0yNzYzLDcgKzI3NjMsNyBAQCB2b2lkIGV3a192aWV3X2xvYWRfc3RhcnRlZChFdmFz
X09iamVjdCogZXdrVmlldykKIC8qKgogICogUmVwb3J0cyB0aGUgZnJhbWUgc3RhcnRlZCBsb2Fk
aW5nIHNvbWV0aGluZy4KICAqCi0gKiBAcGFyYW0gbyBWaWV3LgorICogQHBhcmFtIGV3a1ZpZXcg
Vmlldy4KICAqCiAgKiBFbWl0cyBzaWduYWw6ICJsb2FkLHN0YXJ0ZWQiIG9uIG1haW4gZnJhbWUg
d2l0aCBubyBwYXJhbWV0ZXJzLgogICovCkBAIC0yNzc4LDcgKzI3NzgsNyBAQCB2b2lkIGV3a192
aWV3X2ZyYW1lX21haW5fbG9hZF9zdGFydGVkKEV2YXNfT2JqZWN0KiBld2tWaWV3KQogICogQGlu
dGVybmFsCiAgKiBSZXBvcnRzIHRoZSBtYWluIGZyYW1lIHN0YXJ0ZWQgcHJvdmlzaW9uYWwgbG9h
ZC4KICAqCi0gKiBAcGFyYW0gbyBWaWV3LgorICogQHBhcmFtIGV3a1ZpZXcgVmlldy4KICAqCiAg
KiBFbWl0cyBzaWduYWw6ICJsb2FkLHByb3Zpc2lvbmFsIiBvbiBWaWV3IHdpdGggbm8gcGFyYW1l
dGVycy4KICAqLwpAQCAtMjc5Miw3ICsyNzkyLDcgQEAgdm9pZCBld2tfdmlld19sb2FkX3Byb3Zp
c2lvbmFsKEV2YXNfT2JqZWN0KiBld2tWaWV3KQogICogQGludGVybmFsCiAgKiBSZXBvcnRzIHZp
ZXcgY2FuIGJlIHNob3duIGFmdGVyIGEgbmV3IHdpbmRvdyBpcyBjcmVhdGVkLgogICoKLSAqIEBw
YXJhbSBvIEZyYW1lLgorICogQHBhcmFtIGV3a1ZpZXcgRnJhbWUuCiAgKgogICogRW1pdHMgc2ln
bmFsOiAibG9hZCxuZXd3aW5kb3csc2hvdyIgb24gdmlldyB3aXRoIG5vIHBhcmFtZXRlcnMuCiAg
Ki8KQEAgLTI4MDcsMjEgKzI4MDcsMjEgQEAgdm9pZCBld2tfdmlld19sb2FkX3Nob3coRXZhc19P
YmplY3QqIGV3a1ZpZXcpCiAgKiBAaW50ZXJuYWwKICAqIFJlcG9ydHMgdGhlIG1haW4gZnJhbWUg
d2FzIGNsZWFyZWQuCiAgKgotICogQHBhcmFtIG8gVmlldy4KKyAqIEBwYXJhbSBld2tWaWV3IFZp
ZXcuCiAgKi8KIHZvaWQgZXdrX3ZpZXdfZnJhbWVfbWFpbl9jbGVhcmVkKEV2YXNfT2JqZWN0KiBl
d2tWaWV3KQogewogICAgIERCRygiZXdrVmlldz0lcCIsIGV3a1ZpZXcpOwotICAgIEVXS19WSUVX
X1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOKHNkLT5hcGktPmZsdXNoKTsKLSAgICBzZC0+YXBpLT5mbHVzaChzZCk7CisgICAgRVdL
X1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEpOworICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+YXBpLT5mbHVzaCk7CisgICAgc21hcnREYXRh
LT5hcGktPmZsdXNoKHNtYXJ0RGF0YSk7CiB9CiAKIC8qKgogICogQGludGVybmFsCiAgKiBSZXBv
cnRzIHRoZSBtYWluIGZyYW1lIHJlY2VpdmVkIGFuIGljb24uCiAgKgotICogQHBhcmFtIG8gVmll
dy4KKyAqIEBwYXJhbSBld2tWaWV3IFZpZXcuCiAgKgogICogRW1pdHMgc2lnbmFsOiAiaWNvbixy
ZWNlaXZlZCIgd2l0aCBubyBwYXJhbWV0ZXJzLgogICovCkBAIC0yODY4LDEwICsyODY4LDEwIEBA
IHZvaWQgZXdrX3ZpZXdfbG9hZF9lcnJvcihFdmFzX09iamVjdCogZXdrVmlldywgY29uc3QgRXdr
X0ZyYW1lX0xvYWRfRXJyb3IqIGVycm9yCiAgKi8KIHZvaWQgZXdrX3ZpZXdfbG9hZF9wcm9ncmVz
c19jaGFuZ2VkKEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9P
Ul9SRVRVUk4oZXdrVmlldywgc2QpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihz
ZCwgcHJpdik7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERh
dGEpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYpOwog
Ci0gICAgLy8gRXZhc19Db29yZCB3LCBoOworICAgIC8vIEV2YXNfQ29vcmQgd2lkdGgsIGhlaWdo
dDsKICAgICBkb3VibGUgcHJvZ3Jlc3MgPSBwcml2LT5wYWdlLT5wcm9ncmVzcygpLT5lc3RpbWF0
ZWRQcm9ncmVzcygpOwogCiAgICAgREJHKCJld2tWaWV3PSVwIChwPSUwLjNmKSIsIGV3a1ZpZXcs
IHByb2dyZXNzKTsKQEAgLTI4ODEsOSArMjg4MSw5IEBAIHZvaWQgZXdrX3ZpZXdfbG9hZF9wcm9n
cmVzc19jaGFuZ2VkKEV2YXNfT2JqZWN0KiBld2tWaWV3KQogCiAvKioKICAqIEBpbnRlcm5hbAot
ICogUmVwb3J0cyB2aWV3IEBwYXJhbSBvIHNob3VsZCBiZSByZXN0b3JlZCB0byBkZWZhdWx0IGNv
bmRpdGlvbnMKKyAqIFJlcG9ydHMgdmlldyBAcGFyYW0gZXdrVmlldyBzaG91bGQgYmUgcmVzdG9y
ZWQgdG8gZGVmYXVsdCBjb25kaXRpb25zCiAgKgotICogQHBhcmFtIG8gVmlldy4KKyAqIEBwYXJh
bSBld2tWaWV3IFZpZXcuCiAgKiBAcGFyYW0gZnJhbWUgRnJhbWUgdGhhdCBvcmlnaW5hdGVkIHJl
c3RvcmUuCiAgKgogICogRW1pdHMgc2lnbmFsOiAicmVzdG9yZSIgd2l0aCBmcmFtZS4KQEAgLTI5
MDMsMzAgKzI5MDMsMzAgQEAgdm9pZCBld2tfdmlld19yZXN0b3JlX3N0YXRlKEV2YXNfT2JqZWN0
KiBld2tWaWV3LCBFdmFzX09iamVjdCogZnJhbWUpCiAgKiBjYWxsaW5nIGV3a193aW5kb3dfZmVh
dHVyZXNfcmVmKHdpbmRvd19mZWF0dXJlcykuIE90aGVyd2lzZSB0aGlzIHN0cnVjdCB3aWxsCiAg
KiBiZSBmcmVlZCBhZnRlciByZXR1cm5pbmcgdG8gdGhpcyBmdW5jdGlvbi4KICAqCi0gKiBAcGFy
YW0gbyBDdXJyZW50IHZpZXcuCisgKiBAcGFyYW0gZXdrVmlldyBDdXJyZW50IHZpZXcuCiAgKiBA
cGFyYW0gamF2YXNjcmlwdCBAYyBFSU5BX1RSVUUgaWYgdGhlIG5ldyB3aW5kb3cgaXMgb3JpZ2lu
YXRlZCBmcm9tIGphdmFzY3JpcHQsCiAgKiBAYyBFSU5BX0ZBTFNFIG90aGVyd2lzZQotICogQHBh
cmFtIHdpbmRvd19mZWF0dXJlcyBGZWF0dXJlcyBvZiB0aGUgbmV3IHdpbmRvdyBiZWluZyBjcmVh
dGVkLiBJZiBpdCdzIEBjCisgKiBAcGFyYW0gd2lkdGhpbmRvd19mZWF0dXJlcyBGZWF0dXJlcyBv
ZiB0aGUgbmV3IHdpbmRvdyBiZWluZyBjcmVhdGVkLiBJZiBpdCdzIEBjCiAgKiBOVUxMLCBpdCB3
aWxsIGJlIGNyZWF0ZWQgYSB3aW5kb3cgd2l0aCBkZWZhdWx0IGZlYXR1cmVzLgogICoKICAqIEBy
ZXR1cm4gTmV3IHZpZXcsIGluIGNhc2Ugc21hcnQgY2xhc3MgaW1wbGVtZW50cyB0aGUgY3JlYXRp
b24gb2YgbmV3IHdpbmRvd3M7Ci0gKiBlbHNlLCBjdXJyZW50IHZpZXcgQHBhcmFtIG8gb3IgQGMg
MCBvbiBmYWlsdXJlLgorICogZWxzZSwgY3VycmVudCB2aWV3IEBwYXJhbSBld2tWaWV3IG9yIEBj
IDAgb24gZmFpbHVyZS4KICAqCiAgKiBAc2VlIGV3a193aW5kb3dfZmVhdHVyZXNfcmVmKCkuCiAg
Ki8KIEV2YXNfT2JqZWN0KiBld2tfdmlld193aW5kb3dfY3JlYXRlKEV2YXNfT2JqZWN0KiBld2tW
aWV3LCBFaW5hX0Jvb2wgamF2YXNjcmlwdCwgY29uc3QgV2ViQ29yZTo6V2luZG93RmVhdHVyZXMq
IGNvcmVGZWF0dXJlcykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcs
IHNkLCAwKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0
YSwgMCk7CiAKLSAgICBpZiAoIXNkLT5hcGktPndpbmRvd19jcmVhdGUpCisgICAgaWYgKCFzbWFy
dERhdGEtPmFwaS0+d2luZG93X2NyZWF0ZSkKICAgICAgICAgcmV0dXJuIGV3a1ZpZXc7CiAKLSAg
ICBFd2tfV2luZG93X0ZlYXR1cmVzKiB3aW5kb3dfZmVhdHVyZXMgPSBld2tfd2luZG93X2ZlYXR1
cmVzX25ld19mcm9tX2NvcmUoY29yZUZlYXR1cmVzKTsKLSAgICBpZiAoIXdpbmRvd19mZWF0dXJl
cykKKyAgICBFd2tfV2luZG93X0ZlYXR1cmVzKiB3aW5kb3dGZWF0dXJlcyA9IGV3a193aW5kb3df
ZmVhdHVyZXNfbmV3X2Zyb21fY29yZShjb3JlRmVhdHVyZXMpOworICAgIGlmICghd2luZG93RmVh
dHVyZXMpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgRXZhc19PYmplY3QqIHZpZXcgPSBzZC0+
YXBpLT53aW5kb3dfY3JlYXRlKHNkLCBqYXZhc2NyaXB0LCB3aW5kb3dfZmVhdHVyZXMpOwotICAg
IGV3a193aW5kb3dfZmVhdHVyZXNfdW5yZWYod2luZG93X2ZlYXR1cmVzKTsKKyAgICBFdmFzX09i
amVjdCogdmlldyA9IHNtYXJ0RGF0YS0+YXBpLT53aW5kb3dfY3JlYXRlKHNtYXJ0RGF0YSwgamF2
YXNjcmlwdCwgd2luZG93RmVhdHVyZXMpOworICAgIGV3a193aW5kb3dfZmVhdHVyZXNfdW5yZWYo
d2luZG93RmVhdHVyZXMpOwogCiAgICAgcmV0dXJuIHZpZXc7CiB9CkBAIC0yOTQwLDE2ICsyOTQw
LDE2IEBAIEV2YXNfT2JqZWN0KiBld2tfdmlld193aW5kb3dfY3JlYXRlKEV2YXNfT2JqZWN0KiBl
d2tWaWV3LCBFaW5hX0Jvb2wgamF2YXNjcmlwdCwKICAqIHdpdGggYSAnc2VsZi5jbG9zZSgpJyBp
biBKYXZhc2NyaXB0KSBicm93c2VyIG11c3QgcG9zdHBvbmUgdGhlIGRlbGV0aW9uIHRvIGFuCiAg
KiBpZGxlci4KICAqCi0gKiBAcGFyYW0gbyBWaWV3IHRvIGJlIGNsb3NlZC4KKyAqIEBwYXJhbSBl
d2tWaWV3IFZpZXcgdG8gYmUgY2xvc2VkLgogICovCiB2b2lkIGV3a192aWV3X3dpbmRvd19jbG9z
ZShFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJO
KGV3a1ZpZXcsIHNkKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNt
YXJ0RGF0YSk7CiAKICAgICBld2tfdmlld19zdG9wKGV3a1ZpZXcpOwotICAgIGlmICghc2QtPmFw
aS0+d2luZG93X2Nsb3NlKQorICAgIGlmICghc21hcnREYXRhLT5hcGktPndpbmRvd19jbG9zZSkK
ICAgICAgICAgcmV0dXJuOwotICAgIHNkLT5hcGktPndpbmRvd19jbG9zZShzZCk7CisgICAgc21h
cnREYXRhLT5hcGktPndpbmRvd19jbG9zZShzbWFydERhdGEpOwogfQogCiAvKioKQEAgLTI5OTAs
NyArMjk5MCw3IEBAIHZvaWQgZXdrX3ZpZXdfdG9vbGJhcnNfdmlzaWJsZV9zZXQoRXZhc19PYmpl
Y3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCB2aXNpYmxlKQogICogQGludGVybmFsCiAgKiBHZXQgdG9v
bGJhciB2aXNpYmlsaXR5LgogICoKLSAqIEBwYXJhbSBvIFZpZXcuCisgKiBAcGFyYW0gZXdrVmll
dyBWaWV3LgogICogQHBhcmFtIHZpc2libGUgYm9vbGVhbiBwb2ludGVyIGluIHdoaWNoIHRvIHNh
dmUgdGhlIHJlc3VsdC4gSXQgZGVmYXVsdHMKICAqIHRvIEBjIEZBTFNFLCBpLmUuIGlmIGJyb3dz
ZXIgZG9lcyBubyBsaXN0ZW4gdG8gZW1pdHRlZCBzaWduYWwsIGl0IG1lYW5zCiAgKiB0aGVyZSBh
cmUgbm8gdG9vbGJhcnMgYW5kIHRoZXJlZm9yZSB0aGV5IGFyZSBub3QgdmlzaWJsZS4KQEAgLTMw
MDgsNyArMzAwOCw3IEBAIHZvaWQgZXdrX3ZpZXdfdG9vbGJhcnNfdmlzaWJsZV9nZXQoRXZhc19P
YmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCogdmlzaWJsZSkKICAqIEBpbnRlcm5hbAogICogU2V0
IHN0YXR1c2JhciB2aXNpYmxlLgogICoKLSAqIEBwYXJhbSBvIFZpZXcuCisgKiBAcGFyYW0gZXdr
VmlldyBWaWV3LgogICogQHBhcmFtIHZpc2libGUgQGMgVFJVRSBpZiBzdGF0dXNiYXIgYXJlIHZp
c2libGUsIEBjIEZBTFNFIG90aGVyd2lzZS4KICAqCiAgKiBFbWl0cyBzaWduYWw6ICJzdGF0dXNi
YXIsdmlzaWJsZSxzZXQiIHdpdGggYSBwb2ludGVyIHRvIGEgYm9vbGVhbi4KQEAgLTMwMjMsNyAr
MzAyMyw3IEBAIHZvaWQgZXdrX3ZpZXdfc3RhdHVzYmFyX3Zpc2libGVfc2V0KEV2YXNfT2JqZWN0
KiBld2tWaWV3LCBFaW5hX0Jvb2wgdmlzaWJsZSkKICAqIEBpbnRlcm5hbAogICogR2V0IHN0YXR1
c2JhciB2aXNpYmlsaXR5LgogICoKLSAqIEBwYXJhbSBvIFZpZXcuCisgKiBAcGFyYW0gZXdrVmll
dyBWaWV3LgogICogQHBhcmFtIHZpc2libGUgYm9vbGVhbiBwb2ludGVyIGluIHdoaWNoIHRvIHNh
dmUgdGhlIHJlc3VsdC4gSXQgZGVmYXVsdHMKICAqIHRvIEBjIEZBTFNFLCBpLmUuIGlmIGJyb3dz
ZXIgZG9lcyBubyBsaXN0ZW4gdG8gZW1pdHRlZCBzaWduYWwsIGl0IG1lYW5zCiAgKiB0aGVyZSBp
cyBubyBzdGF0dXNiYXIgYW5kIHRoZXJlZm9yZSBpdCBpcyBub3QgdmlzaWJsZS4KQEAgLTMwNDEs
NyArMzA0MSw3IEBAIHZvaWQgZXdrX3ZpZXdfc3RhdHVzYmFyX3Zpc2libGVfZ2V0KEV2YXNfT2Jq
ZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wqIHZpc2libGUpCiAgKiBAaW50ZXJuYWwKICAqIFNldCB0
ZXh0IG9mIHN0YXR1c2JhcgogICoKLSAqIEBwYXJhbSBvIFZpZXcuCisgKiBAcGFyYW0gZXdrVmll
dyBWaWV3LgogICogQHBhcmFtIHRleHQgTmV3IHRleHQgdG8gcHV0IG9uIHN0YXR1c2Jhci4KICAq
CiAgKiBFbWl0cyBzaWduYWw6ICJzdGF0dXNiYXIsdGV4dCxzZXQiIHdpdGggYSBzdHJpbmcuCkBA
IC0zMDU3LDcgKzMwNTcsNyBAQCB2b2lkIGV3a192aWV3X3N0YXR1c2Jhcl90ZXh0X3NldChFdmFz
X09iamVjdCogZXdrVmlldywgY29uc3QgY2hhciogdGV4dCkKICAqIEBpbnRlcm5hbAogICogU2V0
IHNjcm9sbGJhcnMgdmlzaWJsZS4KICAqCi0gKiBAcGFyYW0gbyBWaWV3LgorICogQHBhcmFtIGV3
a1ZpZXcgVmlldy4KICAqIEBwYXJhbSB2aXNpYmxlIEBjIFRSVUUgaWYgc2Nyb2xsYmFycyBhcmUg
dmlzaWJsZSwgQGMgRkFMU0Ugb3RoZXJ3aXNlLgogICoKICAqIEVtaXRzIHNpZ25hbDogInNjcm9s
bGJhcnMsdmlzaWJsZSxzZXQiIHdpdGggYSBwb2ludGVyIHRvIGEgYm9vbGVhbi4KQEAgLTMwNzIs
NyArMzA3Miw3IEBAIHZvaWQgZXdrX3ZpZXdfc2Nyb2xsYmFyc192aXNpYmxlX3NldChFdmFzX09i
amVjdCogZXdrVmlldywgRWluYV9Cb29sIHZpc2libGUpCiAgKiBAaW50ZXJuYWwKICAqIEdldCBz
Y3JvbGxiYXJzIHZpc2liaWxpdHkuCiAgKgotICogQHBhcmFtIG8gVmlldy4KKyAqIEBwYXJhbSBl
d2tWaWV3IFZpZXcuCiAgKiBAcGFyYW0gdmlzaWJsZSBib29sZWFuIHBvaW50ZXIgaW4gd2hpY2gg
dG8gc2F2ZSB0aGUgcmVzdWx0LiBJdCBkZWZhdWx0cwogICogdG8gQGMgRkFMU0UsIGkuZS4gaWYg
YnJvd3NlciBkb2VzIG5vIGxpc3RlbiB0byBlbWl0dGVkIHNpZ25hbCwgaXQgbWVhbnMKICAqIHRo
ZXJlIGFyZSBubyBzY3JvbGxiYXJzIGFuZCB0aGVyZWZvcmUgdGhleSBhcmUgbm90IHZpc2libGUu
CkBAIC0zMDkwLDcgKzMwOTAsNyBAQCB2b2lkIGV3a192aWV3X3Njcm9sbGJhcnNfdmlzaWJsZV9n
ZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCogdmlzaWJsZSkKICAqIEBpbnRlcm5h
bAogICogU2V0IG1lbnViYXIgdmlzaWJsZS4KICAqCi0gKiBAcGFyYW0gbyBWaWV3LgorICogQHBh
cmFtIGV3a1ZpZXcgVmlldy4KICAqIEBwYXJhbSB2aXNpYmxlIEBjIFRSVUUgaWYgbWVudWJhciBp
cyB2aXNpYmxlLCBAYyBGQUxTRSBvdGhlcndpc2UuCiAgKgogICogRW1pdHMgc2lnbmFsOiAibWVu
dWJhcix2aXNpYmxlLHNldCIgd2l0aCBhIHBvaW50ZXIgdG8gYSBib29sZWFuLgpAQCAtMzEwNSw3
ICszMTA1LDcgQEAgdm9pZCBld2tfdmlld19tZW51YmFyX3Zpc2libGVfc2V0KEV2YXNfT2JqZWN0
KiBld2tWaWV3LCBFaW5hX0Jvb2wgdmlzaWJsZSkKICAqIEBpbnRlcm5hbAogICogR2V0IG1lbnVi
YXIgdmlzaWJpbGl0eS4KICAqCi0gKiBAcGFyYW0gbyBWaWV3LgorICogQHBhcmFtIGV3a1ZpZXcg
Vmlldy4KICAqIEBwYXJhbSB2aXNpYmxlIGJvb2xlYW4gcG9pbnRlciBpbiB3aGljaCB0byBzYXZl
IHRoZSByZXN1bHQuIEl0IGRlZmF1bHRzCiAgKiB0byBAYyBGQUxTRSwgaS5lLiBpZiBicm93c2Vy
IGRvZXMgbm8gbGlzdGVuIHRvIGVtaXR0ZWQgc2lnbmFsLCBpdCBtZWFucwogICogdGhlcmUgaXMg
bm8gbWVudWJhciBhbmQgdGhlcmVmb3JlIGl0IGlzIG5vdCB2aXNpYmxlLgpAQCAtMzEyMyw3ICsz
MTIzLDcgQEAgdm9pZCBld2tfdmlld19tZW51YmFyX3Zpc2libGVfZ2V0KEV2YXNfT2JqZWN0KiBl
d2tWaWV3LCBFaW5hX0Jvb2wqIHZpc2libGUpCiAgKiBAaW50ZXJuYWwKICAqIFNldCB0b29sdGlw
IHRleHQgYW5kIGRpc3BsYXkgaWYgaXQgaXMgY3VycmVudGx5IGhpZGRlbi4KICAqCi0gKiBAcGFy
YW0gbyBWaWV3LgorICogQHBhcmFtIGV3a1ZpZXcgVmlldy4KICAqIEBwYXJhbSB0ZXh0IFRleHQg
dG8gc2V0IHRvb2x0aXAgdG8uCiAgKgogICogRW1pdHMgc2lnbmFsOiAidG9vbHRpcCx0ZXh0LHNl
dCIgd2l0aCBhIHN0cmluZy4gSWYgdG9vbHRpcCBtdXN0IGJlIGFjdHVhbGx5CkBAIC0zMTM4LDcg
KzMxMzgsNyBAQCB2b2lkIGV3a192aWV3X3Rvb2x0aXBfdGV4dF9zZXQoRXZhc19PYmplY3QqIGV3
a1ZpZXcsIGNvbnN0IGNoYXIqIHRleHQpCiAvKioKICAqIEBpbnRlcm5hbAogICoKLSAqIEBwYXJh
bSBvIFZpZXcuCisgKiBAcGFyYW0gZXdrVmlldyBWaWV3LgogICogQHBhcmFtIG1lc3NhZ2UgU3Ry
aW5nIHRvIHNob3cgb24gY29uc29sZS4KICAqIEBwYXJhbSBsaW5lTnVtYmVyIExpbmUgbnVtYmVy
LgogICogQHNvdXJjZUlEIFNvdXJjZSBpZC4KQEAgLTMxNDcsNTggKzMxNDcsNTggQEAgdm9pZCBl
d2tfdmlld190b29sdGlwX3RleHRfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBjaGFy
KiB0ZXh0KQogdm9pZCBld2tfdmlld19hZGRfY29uc29sZV9tZXNzYWdlKEV2YXNfT2JqZWN0KiBl
d2tWaWV3LCBjb25zdCBjaGFyKiBtZXNzYWdlLCB1bnNpZ25lZCBpbnQgbGluZU51bWJlciwgY29u
c3QgY2hhciogc291cmNlSUQpCiB7CiAgICAgREJHKCJld2tWaWV3PSVwIG1lc3NhZ2U9JXMgbGlu
ZU51bWJlcj0ldSBzb3VyY2VJRD0lcyIsIGV3a1ZpZXcsIG1lc3NhZ2UsIGxpbmVOdW1iZXIsIHNv
dXJjZUlEKTsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkKTsKLSAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpKTsKLSAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTihzZC0+YXBpLT5hZGRfY29uc29sZV9tZXNzYWdlKTsKLSAgICBzZC0+YXBp
LT5hZGRfY29uc29sZV9tZXNzYWdlKHNkLCBtZXNzYWdlLCBsaW5lTnVtYmVyLCBzb3VyY2VJRCk7
CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEpOworICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+YXBpKTsKKyAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmFwaS0+YWRkX2NvbnNvbGVfbWVzc2FnZSk7
CisgICAgc21hcnREYXRhLT5hcGktPmFkZF9jb25zb2xlX21lc3NhZ2Uoc21hcnREYXRhLCBtZXNz
YWdlLCBsaW5lTnVtYmVyLCBzb3VyY2VJRCk7CiB9CiAKIGJvb2wgZXdrX3ZpZXdfZm9jdXNfY2Fu
X2N5Y2xlKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFd2tfRm9jdXNfRGlyZWN0aW9uIGRpcmVjdGlv
bikKIHsKICAgICBEQkcoImV3a1ZpZXc9JXAgZGlyZWN0aW9uPSVkIiwgZXdrVmlldywgZGlyZWN0
aW9uKTsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBmYWxzZSk7
Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5hcGksIGZhbHNlKTsKKyAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgZmFsc2UpOwor
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmFwaSwgZmFsc2Up
OwogCi0gICAgaWYgKCFzZC0+YXBpLT5mb2N1c19jYW5fY3ljbGUpCisgICAgaWYgKCFzbWFydERh
dGEtPmFwaS0+Zm9jdXNfY2FuX2N5Y2xlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBy
ZXR1cm4gc2QtPmFwaS0+Zm9jdXNfY2FuX2N5Y2xlKHNkLCBkaXJlY3Rpb24pOworICAgIHJldHVy
biBzbWFydERhdGEtPmFwaS0+Zm9jdXNfY2FuX2N5Y2xlKHNtYXJ0RGF0YSwgZGlyZWN0aW9uKTsK
IH0KIAogdm9pZCBld2tfdmlld19ydW5famF2YXNjcmlwdF9hbGVydChFdmFzX09iamVjdCogZXdr
VmlldywgRXZhc19PYmplY3QqIGZyYW1lLCBjb25zdCBjaGFyKiBtZXNzYWdlKQogewogICAgIERC
RygiZXdrVmlldz0lcCBmcmFtZT0lcCBtZXNzYWdlPSVzIiwgZXdrVmlldywgZnJhbWUsIG1lc3Nh
Z2UpOwotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QpOwotICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGkpOworICAgIEVXS19WSUVXX1NEX0dFVF9P
Ul9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTihzbWFydERhdGEtPmFwaSk7CiAKLSAgICBpZiAoIXNkLT5hcGktPnJ1bl9qYXZhc2NyaXB0
X2FsZXJ0KQorICAgIGlmICghc21hcnREYXRhLT5hcGktPnJ1bl9qYXZhc2NyaXB0X2FsZXJ0KQog
ICAgICAgICByZXR1cm47CiAKLSAgICBzZC0+YXBpLT5ydW5famF2YXNjcmlwdF9hbGVydChzZCwg
ZnJhbWUsIG1lc3NhZ2UpOworICAgIHNtYXJ0RGF0YS0+YXBpLT5ydW5famF2YXNjcmlwdF9hbGVy
dChzbWFydERhdGEsIGZyYW1lLCBtZXNzYWdlKTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3J1
bl9qYXZhc2NyaXB0X2NvbmZpcm0oRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV2YXNfT2JqZWN0KiBm
cmFtZSwgY29uc3QgY2hhciogbWVzc2FnZSkKIHsKICAgICBEQkcoImV3a1ZpZXc9JXAgZnJhbWU9
JXAgbWVzc2FnZT0lcyIsIGV3a1ZpZXcsIGZyYW1lLCBtZXNzYWdlKTsKLSAgICBFV0tfVklFV19T
RF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmFwaSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmFwaSwgRUlOQV9GQUxTRSk7
CiAKLSAgICBpZiAoIXNkLT5hcGktPnJ1bl9qYXZhc2NyaXB0X2NvbmZpcm0pCisgICAgaWYgKCFz
bWFydERhdGEtPmFwaS0+cnVuX2phdmFzY3JpcHRfY29uZmlybSkKICAgICAgICAgcmV0dXJuIEVJ
TkFfRkFMU0U7CiAKLSAgICByZXR1cm4gc2QtPmFwaS0+cnVuX2phdmFzY3JpcHRfY29uZmlybShz
ZCwgZnJhbWUsIG1lc3NhZ2UpOworICAgIHJldHVybiBzbWFydERhdGEtPmFwaS0+cnVuX2phdmFz
Y3JpcHRfY29uZmlybShzbWFydERhdGEsIGZyYW1lLCBtZXNzYWdlKTsKIH0KIAogRWluYV9Cb29s
IGV3a192aWV3X3J1bl9qYXZhc2NyaXB0X3Byb21wdChFdmFzX09iamVjdCogZXdrVmlldywgRXZh
c19PYmplY3QqIGZyYW1lLCBjb25zdCBjaGFyKiBtZXNzYWdlLCBjb25zdCBjaGFyKiBkZWZhdWx0
VmFsdWUsIGNoYXIqKiB2YWx1ZSkKIHsKICAgICBEQkcoImV3a1ZpZXc9JXAgZnJhbWU9JXAgbWVz
c2FnZT0lcyIsIGV3a1ZpZXcsIGZyYW1lLCBtZXNzYWdlKTsKLSAgICBFV0tfVklFV19TRF9HRVRf
T1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTl9WQUwoc2QtPmFwaSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmFwaSwgRUlOQV9GQUxTRSk7CiAKLSAg
ICBpZiAoIXNkLT5hcGktPnJ1bl9qYXZhc2NyaXB0X3Byb21wdCkKKyAgICBpZiAoIXNtYXJ0RGF0
YS0+YXBpLT5ydW5famF2YXNjcmlwdF9wcm9tcHQpCiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNF
OwogCi0gICAgcmV0dXJuIHNkLT5hcGktPnJ1bl9qYXZhc2NyaXB0X3Byb21wdChzZCwgZnJhbWUs
IG1lc3NhZ2UsIGRlZmF1bHRWYWx1ZSwgdmFsdWUpOworICAgIHJldHVybiBzbWFydERhdGEtPmFw
aS0+cnVuX2phdmFzY3JpcHRfcHJvbXB0KHNtYXJ0RGF0YSwgZnJhbWUsIG1lc3NhZ2UsIGRlZmF1
bHRWYWx1ZSwgdmFsdWUpOwogfQogCiAvKioKQEAgLTMyMDgsMjAgKzMyMDgsMjAgQEAgRWluYV9C
b29sIGV3a192aWV3X3J1bl9qYXZhc2NyaXB0X3Byb21wdChFdmFzX09iamVjdCogZXdrVmlldywg
RXZhc19PYmplY3QqIGZyYW0KICAqIGltcGxlbWVudGF0aW9uLCB3aGljaCBsb2dzIGFuZCByZXR1
cm5zIEVJTkFfRkFMU0UuIENsaWVudCBtYXkgcmVtb3ZlIGxvZyBieQogICogc2V0dGluZyB0aGlz
IGZ1bmN0aW9uIDAsIHdoaWNoIHdpbGwganVzdCByZXR1cm4gRUlOQV9GQUxTRS4KICAqCi0gKiBA
cGFyYW0gbyBWaWV3LgorICogQHBhcmFtIGV3a1ZpZXcgVmlldy4KICAqCiAgKiBAcmV0dXJuIEBj
IEVJTkFfVFJVRSBpZiBzY3JpcHQgc2hvdWxkIGJlIHN0b3BwZWQ7IEBjIEVJTkFfRkFMU0Ugb3Ro
ZXJ3aXNlCiAgKi8KIEVpbmFfQm9vbCBld2tfdmlld19zaG91bGRfaW50ZXJydXB0X2phdmFzY3Jp
cHQoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7CiAgICAgREJHKCJld2tWaWV3PSVwIiwgZXdrVmll
dyk7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxT
RSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5hcGksIEVJTkFfRkFM
U0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBF
SU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRh
LT5hcGksIEVJTkFfRkFMU0UpOwogCi0gICAgaWYgKCFzZC0+YXBpLT5zaG91bGRfaW50ZXJydXB0
X2phdmFzY3JpcHQpCisgICAgaWYgKCFzbWFydERhdGEtPmFwaS0+c2hvdWxkX2ludGVycnVwdF9q
YXZhc2NyaXB0KQogICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKIAotICAgIHJldHVybiBzZC0+
YXBpLT5zaG91bGRfaW50ZXJydXB0X2phdmFzY3JpcHQoc2QpOworICAgIHJldHVybiBzbWFydERh
dGEtPmFwaS0+c2hvdWxkX2ludGVycnVwdF9qYXZhc2NyaXB0KHNtYXJ0RGF0YSk7CiB9CiAKIC8q
KgpAQCAtMzIzMSwyMyArMzIzMSwyMyBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2hvdWxkX2ludGVy
cnVwdF9qYXZhc2NyaXB0KEV2YXNfT2JqZWN0KiBld2tWaWV3KQogICogaXMgZXhjZWVkZWQuIEJy
b3dzZXIgbWF5IHVzZSB0aGlzIHRvIGluY3JlYXNlIHRoZSBzaXplIG9mIHF1b3RhIGJlZm9yZSB0
aGUKICAqIG9yaWdpbmF0aW5nIG9wZXJhdGlvbmEgZmFpbHMuCiAgKgotICogQHBhcmFtIG8gVmll
dy4KKyAqIEBwYXJhbSBld2tWaWV3IFZpZXcuCiAgKiBAcGFyYW0gZnJhbWUgVGhlIGZyYW1lIHdo
b3NlIHdlYiBwYWdlIGV4Y2VlZGVkIGl0cyBkYXRhYmFzZSBxdW90YS4KICAqIEBwYXJhbSBkYXRh
YmFzZU5hbWUgRGF0YWJhc2UgbmFtZS4KLSAqIEBwYXJhbSBjdXJyZW50X3NpemUgQ3VycmVudCBz
aXplIG9mIHRoaXMgZGF0YWJhc2UKLSAqIEBwYXJhbSBleHBlY3RlZF9zaXplIFRoZSBleHBlY3Rl
ZCBzaXplIG9mIHRoaXMgZGF0YWJhc2UgaW4gb3JkZXIgdG8gZnVsZmlsbAorICogQHBhcmFtIGN1
cnJlbnRTaXplIEN1cnJlbnQgc2l6ZSBvZiB0aGlzIGRhdGFiYXNlCisgKiBAcGFyYW0gZXhwZWN0
ZWRTaXplIFRoZSBleHBlY3RlZCBzaXplIG9mIHRoaXMgZGF0YWJhc2UgaW4gb3JkZXIgdG8gZnVs
ZmlsbAogICogc2l0ZSdzIHJlcXVpcmVtZW50LgogICovCiB1aW50NjRfdCBld2tfdmlld19leGNl
ZWRlZF9kYXRhYmFzZV9xdW90YShFdmFzX09iamVjdCogZXdrVmlldywgRXZhc19PYmplY3QqIGZy
YW1lLCBjb25zdCBjaGFyKiBkYXRhYmFzZU5hbWUsIHVpbnQ2NF90IGN1cnJlbnRTaXplLCB1aW50
NjRfdCBleHBlY3RlZFNpemUpCiB7CiAgICAgREJHKCJld2tWaWV3PSVwIiwgZXdrVmlldyk7Ci0g
ICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgMCk7Ci0gICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5hcGksIDApOwotICAgIGlmICghc2QtPmFwaS0+
ZXhjZWVkZWRfZGF0YWJhc2VfcXVvdGEpCisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihl
d2tWaWV3LCBzbWFydERhdGEsIDApOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZB
TChzbWFydERhdGEtPmFwaSwgMCk7CisgICAgaWYgKCFzbWFydERhdGEtPmFwaS0+ZXhjZWVkZWRf
ZGF0YWJhc2VfcXVvdGEpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgSU5GKCJjdXJyZW50X3Np
emU9JSIgUFJJdTY0ICIgZXhwZWN0ZWRfc2l6ZT0lIiBQUkl1NjQsIGN1cnJlbnRTaXplLCBleHBl
Y3RlZFNpemUpOwotICAgIHJldHVybiBzZC0+YXBpLT5leGNlZWRlZF9kYXRhYmFzZV9xdW90YShz
ZCwgZnJhbWUsIGRhdGFiYXNlTmFtZSwgY3VycmVudFNpemUsIGV4cGVjdGVkU2l6ZSk7CisgICAg
SU5GKCJjdXJyZW50U2l6ZT0lIiBQUkl1NjQgIiBleHBlY3RlZFNpemU9JSIgUFJJdTY0LCBjdXJy
ZW50U2l6ZSwgZXhwZWN0ZWRTaXplKTsKKyAgICByZXR1cm4gc21hcnREYXRhLT5hcGktPmV4Y2Vl
ZGVkX2RhdGFiYXNlX3F1b3RhKHNtYXJ0RGF0YSwgZnJhbWUsIGRhdGFiYXNlTmFtZSwgY3VycmVu
dFNpemUsIGV4cGVjdGVkU2l6ZSk7CiB9CiAKIC8qKgpAQCAtMzI2NSwxOSArMzI2NSwxOSBAQCB1
aW50NjRfdCBld2tfdmlld19leGNlZWRlZF9kYXRhYmFzZV9xdW90YShFdmFzX09iamVjdCogZXdr
VmlldywgRXZhc19PYmplY3QqIGZyYQogRWluYV9Cb29sIGV3a192aWV3X3J1bl9vcGVuX3BhbmVs
KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFdmFzX09iamVjdCogZnJhbWUsIGJvb2wgYWxsb3dzTXVs
dGlwbGVGaWxlcywgY29uc3QgV1RGOjpWZWN0b3I8V1RGOjpTdHJpbmc+JiBhY2NlcHRNSU1FVHlw
ZXMsIEVpbmFfTGlzdCoqIHNlbGVjdGVkRmlsZW5hbWVzKQogewogICAgIERCRygiZXdrVmlldz0l
cCBmcmFtZT0lcCBhbGxvd3NfbXVsdGlwbGVfZmlsZXM9JWQiLCBld2tWaWV3LCBmcmFtZSwgYWxs
b3dzTXVsdGlwbGVGaWxlcyk7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3
LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNk
LT5hcGksIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmll
dywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
Tl9WQUwoc21hcnREYXRhLT5hcGksIEVJTkFfRkFMU0UpOwogCi0gICAgaWYgKCFzZC0+YXBpLT5y
dW5fb3Blbl9wYW5lbCkKKyAgICBpZiAoIXNtYXJ0RGF0YS0+YXBpLT5ydW5fb3Blbl9wYW5lbCkK
ICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CiAKICAgICAqc2VsZWN0ZWRGaWxlbmFtZXMgPSAw
OwogCiAgICAgRWluYV9MaXN0KiBjQWNjZXB0TUlNRVR5cGVzID0gMDsKLSAgICBmb3IgKFdURjo6
VmVjdG9yPFdURjo6U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBhY2NlcHRNSU1FVHlwZXMu
YmVnaW4oKTsgaXQgIT0gYWNjZXB0TUlNRVR5cGVzLmVuZCgpOyArK2l0KQotICAgICAgICBjQWNj
ZXB0TUlNRVR5cGVzID0gZWluYV9saXN0X2FwcGVuZChjQWNjZXB0TUlNRVR5cGVzLCBzdHJkdXAo
KCppdCkudXRmOCgpLmRhdGEoKSkpOworICAgIGZvciAoV1RGOjpWZWN0b3I8V1RGOjpTdHJpbmc+
Ojpjb25zdF9pdGVyYXRvciBpdGVyYXRvciA9IGFjY2VwdE1JTUVUeXBlcy5iZWdpbigpOyBpdGVy
YXRvciAhPSBhY2NlcHRNSU1FVHlwZXMuZW5kKCk7ICsraXRlcmF0b3IpCisgICAgICAgIGNBY2Nl
cHRNSU1FVHlwZXMgPSBlaW5hX2xpc3RfYXBwZW5kKGNBY2NlcHRNSU1FVHlwZXMsIHN0cmR1cCgo
Kml0ZXJhdG9yKS51dGY4KCkuZGF0YSgpKSk7CiAKLSAgICBib29sIGNvbmZpcm0gPSBzZC0+YXBp
LT5ydW5fb3Blbl9wYW5lbChzZCwgZnJhbWUsIGFsbG93c011bHRpcGxlRmlsZXMsIGNBY2NlcHRN
SU1FVHlwZXMsIHNlbGVjdGVkRmlsZW5hbWVzKTsKKyAgICBib29sIGNvbmZpcm0gPSBzbWFydERh
dGEtPmFwaS0+cnVuX29wZW5fcGFuZWwoc21hcnREYXRhLCBmcmFtZSwgYWxsb3dzTXVsdGlwbGVG
aWxlcywgY0FjY2VwdE1JTUVUeXBlcywgc2VsZWN0ZWRGaWxlbmFtZXMpOwogICAgIGlmICghY29u
ZmlybSAmJiAqc2VsZWN0ZWRGaWxlbmFtZXMpCiAgICAgICAgIEVSUigiQ2FuY2VsZWQgZmlsZSBz
ZWxlY3Rpb24sIGJ1dCBzZWxlY3RlZCBmaWxlbmFtZXMgIT0gMC4gRnJlZSBuYW1lcyBiZWZvcmUg
cmV0dXJuLiIpOwogCkBAIC0zMjkxLDExICszMjkxLDExIEBAIEVpbmFfQm9vbCBld2tfdmlld19y
dW5fb3Blbl9wYW5lbChFdmFzX09iamVjdCogZXdrVmlldywgRXZhc19PYmplY3QqIGZyYW1lLCBi
b29sCiB2b2lkIGV3a192aWV3X3JlcGFpbnQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV2YXNfQ29v
cmQgeCwgRXZhc19Db29yZCB5LCBFdmFzX0Nvb3JkIHdpZHRoLCBFdmFzX0Nvb3JkIGhlaWdodCkK
IHsKICAgICBEQkcoImV3a1ZpZXc9JXAsIHJlZ2lvbj0lZCwlZCArICVkeCVkIiwgZXdrVmlldywg
eCwgeSwgd2lkdGgsIGhlaWdodCk7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tW
aWV3LCBzZCk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2KTsKKyAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSk7CisgICAgRVdL
X1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdik7CiAKICAgICBfZXdrX3Zp
ZXdfcmVwYWludF9hZGQocHJpdiwgeCwgeSwgd2lkdGgsIGhlaWdodCk7Ci0gICAgX2V3a192aWV3
X3NtYXJ0X2NoYW5nZWQoc2QpOworICAgIF9ld2tfdmlld19zbWFydF9jaGFuZ2VkKHNtYXJ0RGF0
YSk7CiB9CiAKIHZvaWQgZXdrX3ZpZXdfc2Nyb2xsKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFdmFz
X0Nvb3JkIGR4LCBFdmFzX0Nvb3JkIGR5LCBFdmFzX0Nvb3JkIHNjcm9sbFgsIEV2YXNfQ29vcmQg
c2Nyb2xsWSwgRXZhc19Db29yZCBzY3JvbGxXaWR0aCwgRXZhc19Db29yZCBzY3JvbGxIZWlnaHQs
IEV2YXNfQ29vcmQgY2VudGVyWCwgRXZhc19Db29yZCBjZW50ZXJZLCBFdmFzX0Nvb3JkIGNlbnRl
cldpZHRoLCBFdmFzX0Nvb3JkIGNlbnRlckhlaWdodCwgRWluYV9Cb29sIG1haW5GcmFtZSkKQEAg
LTMzMDcsMTkgKzMzMDcsMTkgQEAgdm9pZCBld2tfdmlld19zY3JvbGwoRXZhc19PYmplY3QqIGV3
a1ZpZXcsIEV2YXNfQ29vcmQgZHgsIEV2YXNfQ29vcmQgZHksIEV2YXNfQ28KICAgICAgICAgV1JO
KCJzY3JvbGwgcmVnaW9uIGFuZCBjbGlwIGFyZSBkaWZmZXJlbnQhICVkLCVkKyVkeCVkIGFuZCAl
ZCwlZCslZHglZCIsCiAgICAgICAgICAgICBzY3JvbGxYLCBzY3JvbGxZLCBzY3JvbGxXaWR0aCwg
c2Nyb2xsSGVpZ2h0LCBjZW50ZXJYLCBjZW50ZXJZLCBjZW50ZXJXaWR0aCwgY2VudGVySGVpZ2h0
KTsKIAotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QpOwotICAgIEVX
S19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdik7CisgICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09S
X1JFVFVSTihzbWFydERhdGEsIHByaXYpOwogICAgIEVJTkFfU0FGRVRZX09OX1RSVUVfUkVUVVJO
KCFkeCAmJiAhZHkpOwogCiAgICAgX2V3a192aWV3X3Njcm9sbF9hZGQocHJpdiwgZHgsIGR5LCBz
Y3JvbGxYLCBzY3JvbGxZLCBzY3JvbGxXaWR0aCwgc2Nyb2xsSGVpZ2h0LCBtYWluRnJhbWUpOwog
Ci0gICAgX2V3a192aWV3X3NtYXJ0X2NoYW5nZWQoc2QpOworICAgIF9ld2tfdmlld19zbWFydF9j
aGFuZ2VkKHNtYXJ0RGF0YSk7CiB9CiAKIFdlYkNvcmU6OlBhZ2UqIGV3a192aWV3X2NvcmVfcGFn
ZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihld2tWaWV3LCBzZCwgMCk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVU
VVJOKHNkLCBwcml2LCAwKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcs
IHNtYXJ0RGF0YSwgMCk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0
YSwgcHJpdiwgMCk7CiAgICAgcmV0dXJuIHByaXYtPnBhZ2U7CiB9CiAKQEAgLTMzMzQsMzAgKzMz
MzQsMzAgQEAgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkZyYW1lPiBld2tfdmlld19mcmFtZV9j
cmVhdGUoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV2YXMKICAgICAgICAgZXdrVmlldywgZnJhbWUs
IG5hbWUudXRmOCgpLmRhdGEoKSwgb3duZXJFbGVtZW50LAogICAgICAgICB1cmwuc3RyaW5nKCku
dXRmOCgpLmRhdGEoKSwgcmVmZXJyZXIudXRmOCgpLmRhdGEoKSk7CiAKLSAgICBFV0tfVklFV19T
RF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAwKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9P
Ul9SRVRVUk4oc2QsIHByaXYsIDApOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdr
Vmlldywgc21hcnREYXRhLCAwKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21h
cnREYXRhLCBwcml2LCAwKTsKIAotICAgIFdURjo6UmVmUHRyPFdlYkNvcmU6OkZyYW1lPiBjZiA9
IF9ld2tfdmlld19jb3JlX2ZyYW1lX25ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAoc2QsIHByaXYsIG93bmVyRWxlbWVudCk7Ci0gICAgaWYgKCFjZikgeworICAg
IFdURjo6UmVmUHRyPFdlYkNvcmU6OkZyYW1lPiBjb3JlRnJhbWUgPSBfZXdrX3ZpZXdfY29yZV9m
cmFtZV9uZXcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNtYXJ0
RGF0YSwgcHJpdiwgb3duZXJFbGVtZW50KTsKKyAgICBpZiAoIWNvcmVGcmFtZSkgewogICAgICAg
ICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgY2hpbGQgY29yZSBmcmFtZSAnJXMnIiwgbmFtZS51dGY4
KCkuZGF0YSgpKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgaWYgKCFld2tfZnJh
bWVfY2hpbGRfYWRkKGZyYW1lLCBjZiwgbmFtZSwgdXJsLCByZWZlcnJlcikpIHsKKyAgICBpZiAo
IWV3a19mcmFtZV9jaGlsZF9hZGQoZnJhbWUsIGNvcmVGcmFtZSwgbmFtZSwgdXJsLCByZWZlcnJl
cikpIHsKICAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIGNoaWxkIGZyYW1lIG9iamVjdCAn
JXMnIiwgbmFtZS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCiAg
ICAgLy8gVGhlIGNyZWF0aW9uIG9mIHRoZSBmcmFtZSBtYXkgaGF2ZSByZW1vdmVkIGl0c2VsZiBh
bHJlYWR5LgotICAgIGlmICghY2YtPnBhZ2UoKSB8fCAhY2YtPnRyZWUoKSB8fCAhY2YtPnRyZWUo
KS0+cGFyZW50KCkpCisgICAgaWYgKCFjb3JlRnJhbWUtPnBhZ2UoKSB8fCAhY29yZUZyYW1lLT50
cmVlKCkgfHwgIWNvcmVGcmFtZS0+dHJlZSgpLT5wYXJlbnQoKSkKICAgICAgICAgcmV0dXJuIDA7
CiAKLSAgICBzZC0+Y2hhbmdlZC5mcmFtZV9yZWN0ID0gRUlOQV9UUlVFOwotICAgIF9ld2tfdmll
d19zbWFydF9jaGFuZ2VkKHNkKTsKKyAgICBzbWFydERhdGEtPmNoYW5nZWQuZnJhbWVfcmVjdCA9
IEVJTkFfVFJVRTsKKyAgICBfZXdrX3ZpZXdfc21hcnRfY2hhbmdlZChzbWFydERhdGEpOwogCiAg
ICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChld2tWaWV3LCAiZnJhbWUsY3JlYXRl
ZCIsIGZyYW1lKTsKLSAgICByZXR1cm4gY2YucmVsZWFzZSgpOworICAgIHJldHVybiBjb3JlRnJh
bWUucmVsZWFzZSgpOwogfQogCiBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6V2lkZ2V0PiBld2tf
dmlld19wbHVnaW5fY3JlYXRlKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFdmFzX09iamVjdCogZnJh
bWUsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHBsdWdpblNpemUsIFdlYkNvcmU6OkhUTUxQbHVn
SW5FbGVtZW50KiBlbGVtZW50LCBjb25zdCBXZWJDb3JlOjpLVVJMJiB1cmwsIGNvbnN0IFdURjo6
VmVjdG9yPFdURjo6U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgV1RGOjpWZWN0b3I8V1RGOjpT
dHJpbmc+JiBwYXJhbVZhbHVlcywgY29uc3QgV1RGOjpTdHJpbmcmIG1pbWVUeXBlLCBib29sIGxv
YWRNYW51YWxseSkKQEAgLTMzNjYsOSArMzM2Niw5IEBAIFdURjo6UGFzc1JlZlB0cjxXZWJDb3Jl
OjpXaWRnZXQ+IGV3a192aWV3X3BsdWdpbl9jcmVhdGUoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV2
CiAgICAgICAgIGV3a1ZpZXcsIGZyYW1lLCBwbHVnaW5TaXplLndpZHRoKCksIHBsdWdpblNpemUu
aGVpZ2h0KCksIGVsZW1lbnQsCiAgICAgICAgIHVybC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBt
aW1lVHlwZS51dGY4KCkuZGF0YSgpKTsKIAotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrVmlldywgc2QsIDApOwotICAgIHNkLT5jaGFuZ2VkLmZyYW1lX3JlY3QgPSBFSU5BX1RSVUU7
Ci0gICAgX2V3a192aWV3X3NtYXJ0X2NoYW5nZWQoc2QpOworICAgIEVXS19WSUVXX1NEX0dFVF9P
Ul9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCAwKTsKKyAgICBzbWFydERhdGEtPmNoYW5nZWQu
ZnJhbWVfcmVjdCA9IEVJTkFfVFJVRTsKKyAgICBfZXdrX3ZpZXdfc21hcnRfY2hhbmdlZChzbWFy
dERhdGEpOwogCiAgICAgcmV0dXJuIGV3a19mcmFtZV9wbHVnaW5fY3JlYXRlCiAgICAgICAgICAg
ICAgICAoZnJhbWUsIHBsdWdpblNpemUsIGVsZW1lbnQsIHVybCwgcGFyYW1OYW1lcywgcGFyYW1W
YWx1ZXMsCkBAIC0zMzg5LDEzICszMzg5LDEzIEBAIFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpX
aWRnZXQ+IGV3a192aWV3X3BsdWdpbl9jcmVhdGUoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV2CiB2
b2lkIGV3a192aWV3X3BvcHVwX25ldyhFdmFzX09iamVjdCogZXdrVmlldywgV2ViQ29yZTo6UG9w
dXBNZW51Q2xpZW50KiBjbGllbnQsIGludCBzZWxlY3RlZCwgY29uc3QgV2ViQ29yZTo6SW50UmVj
dCYgcmVjdCkKIHsKICAgICBJTkYoImV3a1ZpZXc9JXAiLCBld2tWaWV3KTsKLSAgICBFV0tfVklF
V19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9P
Ul9SRVRVUk4oc2QsIHByaXYpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmll
dywgc21hcnREYXRhKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRh
LCBwcml2KTsKIAotICAgIGlmIChwcml2LT5wb3B1cC5tZW51X2NsaWVudCkKKyAgICBpZiAocHJp
di0+cG9wdXAubWVudUNsaWVudCkKICAgICAgICAgZXdrX3ZpZXdfcG9wdXBfZGVzdHJveShld2tW
aWV3KTsKIAotICAgIHByaXYtPnBvcHVwLm1lbnVfY2xpZW50ID0gY2xpZW50OworICAgIHByaXYt
PnBvcHVwLm1lbnVDbGllbnQgPSBjbGllbnQ7CiAKICAgICAvLyBwb3B1bGF0ZSBpdGVtcwogICAg
IGNvbnN0IGludCBzaXplID0gY2xpZW50LT5saXN0U2l6ZSgpOwpAQCAtMzQyMiwxMCArMzQyMiwx
MCBAQCB2b2lkIGV3a192aWV3X3BvcHVwX25ldyhFdmFzX09iamVjdCogZXdrVmlldywgV2ViQ29y
ZTo6UG9wdXBNZW51Q2xpZW50KiBjbGllbnQsCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfcG9wdXBfZGVz
dHJveShFdmFzX09iamVjdCogZXdrVmlldykKIHsKICAgICBJTkYoImV3a1ZpZXc9JXAiLCBld2tW
aWV3KTsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZB
TFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFM
U0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBF
SU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBw
cml2LCBFSU5BX0ZBTFNFKTsKIAotICAgIGlmICghcHJpdi0+cG9wdXAubWVudV9jbGllbnQpCisg
ICAgaWYgKCFwcml2LT5wb3B1cC5tZW51Q2xpZW50KQogICAgICAgICByZXR1cm4gRUlOQV9GQUxT
RTsKIAogICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdrVmlldywgInBvcHVw
LHdpbGxkZWxldGUiLCAmcHJpdi0+cG9wdXAubWVudSk7CkBAIC0zNDM2LDggKzM0MzYsOCBAQCBF
aW5hX0Jvb2wgZXdrX3ZpZXdfcG9wdXBfZGVzdHJveShFdmFzX09iamVjdCogZXdrVmlldykKICAg
ICAgICAgZWluYV9zdHJpbmdzaGFyZV9kZWwoaXRlbS0+dGV4dCk7CiAgICAgICAgIGZyZWUoaXRl
bSk7CiAgICAgfQotICAgIHByaXYtPnBvcHVwLm1lbnVfY2xpZW50LT5wb3B1cERpZEhpZGUoKTsK
LSAgICBwcml2LT5wb3B1cC5tZW51X2NsaWVudCA9IDA7CisgICAgcHJpdi0+cG9wdXAubWVudUNs
aWVudC0+cG9wdXBEaWRIaWRlKCk7CisgICAgcHJpdi0+cG9wdXAubWVudUNsaWVudCA9IDA7CiAK
ICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQpAQCAtMzQ0NSwxOCArMzQ0NSwxOCBAQCBFaW5hX0Jv
b2wgZXdrX3ZpZXdfcG9wdXBfZGVzdHJveShFdmFzX09iamVjdCogZXdrVmlldykKIHZvaWQgZXdr
X3ZpZXdfcG9wdXBfc2VsZWN0ZWRfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBpbnQgaW5kZXgp
CiB7CiAgICAgSU5GKCJld2tWaWV3PSVwIiwgZXdrVmlldyk7Ci0gICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihld2tWaWV3LCBzZCk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJO
KHNkLCBwcml2KTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihwcml2LT5wb3B1cC5t
ZW51X2NsaWVudCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFy
dERhdGEpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYp
OworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHByaXYtPnBvcHVwLm1lbnVDbGllbnQp
OwogCi0gICAgcHJpdi0+cG9wdXAubWVudV9jbGllbnQtPnZhbHVlQ2hhbmdlZChpbmRleCk7Cisg
ICAgcHJpdi0+cG9wdXAubWVudUNsaWVudC0+dmFsdWVDaGFuZ2VkKGluZGV4KTsKIH0KIAogLyoq
CiAgKiBAaW50ZXJuYWwKICAqIFJlcXVlc3QgYSBkb3dubG9hZCB0byB1c2VyLgogICoKLSAqIEBw
YXJhbSBvIFZpZXcuCisgKiBAcGFyYW0gZXdrVmlldyBWaWV3LgogICogQG9hcmFtIGRvd25sb2Fk
IEV3a19Eb3dubG9hZCBzdHJ1Y3QgdG8gYmUgc2VudC4KICAqCiAgKiBFbWl0czogImRvd25sb2Fk
LHJlcXVlc3QiIHdpdGggYW4gRXdrX0Rvd25sb2FkIGNvbnRhaW5pbmcgdGhlIGRldGFpbHMgb2Yg
dGhlCkBAIC0zNDcyLDcgKzM0NzIsNyBAQCB2b2lkIGV3a192aWV3X2Rvd25sb2FkX3JlcXVlc3Qo
RXZhc19PYmplY3QqIGV3a1ZpZXcsIEV3a19Eb3dubG9hZCogZG93bmxvYWQpCiAgKiBAaW50ZXJu
YWwKICAqIFJlcG9ydHMgdGhlIEpTIHdpbmRvdyBvYmplY3Qgd2FzIGNsZWFyZWQuCiAgKgotICog
QHBhcmFtIG8gdmlldy4KKyAqIEBwYXJhbSBld2tWaWV3IHZpZXcuCiAgKiBAcGFyYW0gZnJhbWUg
dGhlIGZyYW1lLgogICovCiB2b2lkIGV3a192aWV3X2pzX3dpbmRvd19vYmplY3RfY2xlYXIoRXZh
c19PYmplY3QqIGV3a1ZpZXcsIEV2YXNfT2JqZWN0KiBmcmFtZSkKQEAgLTM0OTAsMTAgKzM0OTAs
MTAgQEAgdm9pZCBld2tfdmlld19qc193aW5kb3dfb2JqZWN0X2NsZWFyKEV2YXNfT2JqZWN0KiBl
d2tWaWV3LCBFdmFzX09iamVjdCogZnJhbWUpCiAgKi8KIHZvaWQgZXdrX3ZpZXdfdmlld3BvcnRf
YXR0cmlidXRlc19zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGNvbnN0IFdlYkNvcmU6OlZpZXdw
b3J0QXJndW1lbnRzJiBhcmd1bWVudHMpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUKGV3a1ZpZXcs
IHNkKTsKLSAgICBFV0tfVklFV19QUklWX0dFVChzZCwgcHJpdik7CisgICAgRVdLX1ZJRVdfU0Rf
R0VUKGV3a1ZpZXcsIHNtYXJ0RGF0YSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVQoc21hcnREYXRh
LCBwcml2KTsKIAotICAgIHByaXYtPnZpZXdwb3J0X2FyZ3VtZW50cyA9IGFyZ3VtZW50czsKKyAg
ICBwcml2LT52aWV3cG9ydEFyZ3VtZW50cyA9IGFyZ3VtZW50czsKICAgICBldmFzX29iamVjdF9z
bWFydF9jYWxsYmFja19jYWxsKGV3a1ZpZXcsICJ2aWV3cG9ydCxjaGFuZ2VkIiwgMCk7CiB9CiAK
QEAgLTM1MTksNzAgKzM1MTksNzAgQEAgdm9pZCBld2tfdmlld192aWV3cG9ydF9hdHRyaWJ1dGVz
X2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldywgaW50KiB3aWR0aCwgaW4KIAogRWluYV9C
b29sIGV3a192aWV3X3pvb21fcmFuZ2Vfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBmbG9hdCBt
aW5TY2FsZSwgZmxvYXQgbWF4U2NhbGUpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
Tihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVU
VVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJO
KGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRf
T1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CiAKICAgICBpZiAobWF4U2Nh
bGUgPCBtaW5TY2FsZSkgewogICAgICAgICBXUk4oIm1pbl9zY2FsZSBpcyBsYXJnZXIgdGhhbiBt
YXhfc2NhbGUiKTsKICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CiAgICAgfQogCi0gICAgcHJp
di0+c2V0dGluZ3Muem9vbV9yYW5nZS5taW5fc2NhbGUgPSBtaW5TY2FsZTsKLSAgICBwcml2LT5z
ZXR0aW5ncy56b29tX3JhbmdlLm1heF9zY2FsZSA9IG1heFNjYWxlOworICAgIHByaXYtPnNldHRp
bmdzLnpvb21SYW5nZS5taW5TY2FsZSA9IG1pblNjYWxlOworICAgIHByaXYtPnNldHRpbmdzLnpv
b21SYW5nZS5tYXhTY2FsZSA9IG1heFNjYWxlOwogCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0K
IAogZmxvYXQgZXdrX3ZpZXdfem9vbV9yYW5nZV9taW5fZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBl
d2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIC0x
LjApOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgLTEuMCk7Cisg
ICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIC0xLjApOwor
ICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIC0xLjApOwog
Ci0gICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLnpvb21fcmFuZ2UubWluX3NjYWxlOworICAgIHJl
dHVybiBwcml2LT5zZXR0aW5ncy56b29tUmFuZ2UubWluU2NhbGU7CiB9CiAKIGZsb2F0IGV3a192
aWV3X3pvb21fcmFuZ2VfbWF4X2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAtMS4wKTsKLSAgICBFV0tf
VklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIC0xLjApOworICAgIEVXS19WSUVXX1NE
X0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCAtMS4wKTsKKyAgICBFV0tfVklFV19Q
UklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCAtMS4wKTsKIAotICAgIHJldHVybiBw
cml2LT5zZXR0aW5ncy56b29tX3JhbmdlLm1heF9zY2FsZTsKKyAgICByZXR1cm4gcHJpdi0+c2V0
dGluZ3Muem9vbVJhbmdlLm1heFNjYWxlOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfdXNlcl9z
Y2FsYWJsZV9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCB1c2VyU2NhbGFibGUp
CiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxT
RSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNF
KTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlO
QV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJp
diwgRUlOQV9GQUxTRSk7CiAKLSAgICBwcml2LT5zZXR0aW5ncy56b29tX3JhbmdlLnVzZXJfc2Nh
bGFibGUgPSB1c2VyU2NhbGFibGU7CisgICAgcHJpdi0+c2V0dGluZ3Muem9vbVJhbmdlLnVzZXJT
Y2FsYWJsZSA9IHVzZXJTY2FsYWJsZTsKIAogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKIEVp
bmFfQm9vbCBld2tfdmlld191c2VyX3NjYWxhYmxlX2dldChjb25zdCBFdmFzX09iamVjdCogZXdr
VmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5B
X0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFf
RkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRh
LCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRh
LCBwcml2LCBFSU5BX0ZBTFNFKTsKIAotICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy56b29tX3Jh
bmdlLnVzZXJfc2NhbGFibGU7CisgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLnpvb21SYW5nZS51
c2VyU2NhbGFibGU7CiB9CiAKIGZsb2F0IGV3a192aWV3X2RldmljZV9waXhlbF9yYXRpb19nZXQo
Y29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JF
VFVSTihld2tWaWV3LCBzZCwgLTEuMCk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJO
KHNkLCBwcml2LCAtMS4wKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcs
IHNtYXJ0RGF0YSwgLTEuMCk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0
RGF0YSwgcHJpdiwgLTEuMCk7CiAKLSAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZGV2aWNlX3Bp
eGVsX3JhdGlvOworICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5kZXZpY2VQaXhlbFJhdGlvOwog
fQogCiB2b2lkIGV3a192aWV3X2RpZF9maXJzdF92aXN1YWxseV9ub25lbXB0eV9sYXlvdXQoRXZh
c19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tW
aWV3LCBzZCk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2KTsKLSAg
ICBpZiAoIXByaXYtPmZsYWdzLnZpZXdfY2xlYXJlZCkgeworICAgIEVXS19WSUVXX1NEX0dFVF9P
Ul9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9S
RVRVUk4oc21hcnREYXRhLCBwcml2KTsKKyAgICBpZiAoIXByaXYtPmZsYWdzLnZpZXdDbGVhcmVk
KSB7CiAgICAgICAgIGV3a192aWV3X2ZyYW1lX21haW5fY2xlYXJlZChld2tWaWV3KTsKICAgICAg
ICAgZXdrX3ZpZXdfZW5hYmxlX3JlbmRlcihld2tWaWV3KTsKLSAgICAgICAgcHJpdi0+ZmxhZ3Mu
dmlld19jbGVhcmVkID0gRUlOQV9UUlVFOworICAgICAgICBwcml2LT5mbGFncy52aWV3Q2xlYXJl
ZCA9IEVJTkFfVFJVRTsKICAgICB9CiB9CiAKQEAgLTM1OTAsNyArMzU5MCw3IEBAIHZvaWQgZXdr
X3ZpZXdfZGlkX2ZpcnN0X3Zpc3VhbGx5X25vbmVtcHR5X2xheW91dChFdmFzX09iamVjdCogZXdr
VmlldykKICAqIEBpbnRlcm5hbAogICogRGlzcGF0Y2ggZmluaXNoZWQgbG9hZGluZy4KICAqCi0g
KiBAcGFyYW0gbyB2aWV3LgorICogQHBhcmFtIGV3a1ZpZXcgdmlldy4KICAqLwogdm9pZCBld2tf
dmlld19kaXNwYXRjaF9kaWRfZmluaXNoX2xvYWRpbmcoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7
CkBAIC0zNjAzLDExICszNjAzLDExIEBAIHZvaWQgZXdrX3ZpZXdfZGlzcGF0Y2hfZGlkX2Zpbmlz
aF9sb2FkaW5nKEV2YXNfT2JqZWN0KiBld2tWaWV3KQogCiB2b2lkIGV3a192aWV3X3RyYW5zaXRp
b25fdG9fY29tbWl0ZWRfZm9yX25ld3BhZ2UoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAg
RVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCk7Ci0gICAgRVdLX1ZJRVdfUFJJ
Vl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2KTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJO
KGV3a1ZpZXcsIHNtYXJ0RGF0YSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNt
YXJ0RGF0YSwgcHJpdik7CiAKICAgICBld2tfdmlld19kaXNhYmxlX3JlbmRlcihld2tWaWV3KTsK
LSAgICBwcml2LT5mbGFncy52aWV3X2NsZWFyZWQgPSBFSU5BX0ZBTFNFOworICAgIHByaXYtPmZs
YWdzLnZpZXdDbGVhcmVkID0gRUlOQV9GQUxTRTsKIH0KIAogCkBAIC0zNjE3LDE4ICszNjE3LDE4
IEBAIHZvaWQgZXdrX3ZpZXdfdHJhbnNpdGlvbl90b19jb21taXRlZF9mb3JfbmV3cGFnZShFdmFz
X09iamVjdCogZXdrVmlldykKICAqIHJlcXVlc3Qgd291bGQgYmUgdXNlZC4gSWYgQHJldHVybiBp
cyB0cnVlLCBsb2FkZXIgd2lsbCB0cnkgdG8gbG9hZC4gRWxzZSwKICAqIExvYWRlciBpZ25vcmUg
YWN0aW9uIG9mIHJlcXVlc3QuCiAgKgotICogQHBhcmFtIG8gVmlldyB0byBsb2FkCisgKiBAcGFy
YW0gZXdrVmlldyBWaWV3IHRvIGxvYWQKICAqIEBwYXJhbSByZXF1ZXN0IFJlcXVlc3Qgd2hpY2gg
Y29udGFpbiB1cmwgdG8gbmF2aWdhdGUKICAqLwogRWluYV9Cb29sIGV3a192aWV3X25hdmlnYXRp
b25fcG9saWN5X2RlY2lzaW9uKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFd2tfRnJhbWVfUmVzb3Vy
Y2VfUmVxdWVzdCogcmVxdWVzdCkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3
a1ZpZXcsIHNkLCBFSU5BX1RSVUUpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZB
TChzZC0+YXBpLCBFSU5BX1RSVUUpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdr
Vmlldywgc21hcnREYXRhLCBFSU5BX1RSVUUpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOX1ZBTChzbWFydERhdGEtPmFwaSwgRUlOQV9UUlVFKTsKIAotICAgIGlmICghc2QtPmFwaS0+
bmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb24pCisgICAgaWYgKCFzbWFydERhdGEtPmFwaS0+bmF2
aWdhdGlvbl9wb2xpY3lfZGVjaXNpb24pCiAgICAgICAgIHJldHVybiBFSU5BX1RSVUU7CiAKLSAg
ICByZXR1cm4gc2QtPmFwaS0+bmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb24oc2QsIHJlcXVlc3Qp
OworICAgIHJldHVybiBzbWFydERhdGEtPmFwaS0+bmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb24o
c21hcnREYXRhLCByZXF1ZXN0KTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X2pzX29iamVjdF9h
ZGQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV3a19KU19PYmplY3QqIG9iamVjdCwgY29uc3QgY2hh
ciogb2JqZWN0TmFtZSkKQEAgLTM2MzYsMjUgKzM2MzYsMjUgQEAgRWluYV9Cb29sIGV3a192aWV3
X2pzX29iamVjdF9hZGQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV3a19KU19PYmplY3QqIG9iamVj
dCwgY28KICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKICAgICBpZiAob2JqZWN0LT52
aWV3KSAvLyBvYmplY3QgaGFzIGFscmVhZHkgYmVlbiBhZGRlZCB0byBhbm90aGVyIGV3a192aWV3
CiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwotICAgIG9iamVjdC0+bmFtZSA9IGVpbmFfc3Ry
aW5nc2hhcmVfYWRkKG9iamVjdF9uYW1lKTsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJO
KGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRV
Uk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIG9iamVjdC0+bmFtZSA9IGVpbmFfc3RyaW5n
c2hhcmVfYWRkKG9iamVjdE5hbWUpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdr
Vmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9S
RVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKIAogICAgIEpTQzo6SlNMb2NrIGxv
Y2soSlNDOjpTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwotICAgIFdlYkNvcmU6OkpTRE9NV2luZG93
KiB3aW5kb3cgPSB0b0pTRE9NV2luZG93KHByaXYtPm1haW5fZnJhbWUsIFdlYkNvcmU6Om1haW5U
aHJlYWROb3JtYWxXb3JsZCgpKTsKKyAgICBXZWJDb3JlOjpKU0RPTVdpbmRvdyogd2luZG93ID0g
dG9KU0RPTVdpbmRvdyhwcml2LT5tYWluRnJhbWUsIFdlYkNvcmU6Om1haW5UaHJlYWROb3JtYWxX
b3JsZCgpKTsKICAgICBKU0M6OkJpbmRpbmdzOjpSb290T2JqZWN0KiByb290OwotICAgIHJvb3Qg
PSBwcml2LT5tYWluX2ZyYW1lLT5zY3JpcHQoKS0+YmluZGluZ1Jvb3RPYmplY3QoKTsKKyAgICBy
b290ID0gcHJpdi0+bWFpbkZyYW1lLT5zY3JpcHQoKS0+YmluZGluZ1Jvb3RPYmplY3QoKTsKIAog
ICAgIGlmICghd2luZG93KSB7CiAgICAgICAgIEVSUigiV2FybmluZzogY291bGRuJ3QgZ2V0IHdp
bmRvdyBvYmplY3QiKTsKICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CiAgICAgfQogCi0gICAg
SlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSB3aW5kb3ctPmdsb2JhbEV4ZWMoKTsKKyAgICBKU0M6OkV4
ZWNTdGF0ZSogZXhlY3V0ZVN0YXRlID0gd2luZG93LT5nbG9iYWxFeGVjKCk7CiAKLSAgICBvYmot
PnZpZXcgPSBld2tWaWV3OwotICAgIEpTQzo6SlNPYmplY3QqIHJ1bnRpbWVPYmplY3QgPSAoSlND
OjpKU09iamVjdCopSlNDOjpCaW5kaW5nczo6Q0luc3RhbmNlOjpjcmVhdGUoKE5QT2JqZWN0Kilv
YmosIHJvb3QpLT5jcmVhdGVSdW50aW1lT2JqZWN0KGV4ZWMpOwotICAgIEpTQzo6SWRlbnRpZmll
ciBpZCA9IEpTQzo6SWRlbnRpZmllcihleGVjLCBvYmpfbmFtZSk7CisgICAgb2JqZWN0LT52aWV3
ID0gZXdrVmlldzsKKyAgICBKU0M6OkpTT2JqZWN0KiBydW50aW1lT2JqZWN0ID0gKEpTQzo6SlNP
YmplY3QqKUpTQzo6QmluZGluZ3M6OkNJbnN0YW5jZTo6Y3JlYXRlKChOUE9iamVjdCopb2JqZWN0
LCByb290KS0+Y3JlYXRlUnVudGltZU9iamVjdChleGVjdXRlU3RhdGUpOworICAgIEpTQzo6SWRl
bnRpZmllciBpZCA9IEpTQzo6SWRlbnRpZmllcihleGVjLCBvYmplY3ROYW1lKTsKIAogICAgIEpT
Qzo6UHV0UHJvcGVydHlTbG90IHNsb3Q7CiAgICAgd2luZG93LT5wdXRWaXJ0dWFsKGV4ZWMsIGlk
LCBydW50aW1lT2JqZWN0LCBzbG90KTsKQEAgLTM2NjYsMjcgKzM2NjYsMjcgQEAgRWluYV9Cb29s
IGV3a192aWV3X2pzX29iamVjdF9hZGQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV3a19KU19PYmpl
Y3QqIG9iamVjdCwgY28KIAogRWluYV9Cb29sIGV3a192aWV3X3Byb3RvY29sX2hhbmRsZXJfc2V0
KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBjaGFyKiogcHJvdG9jb2xzLCBFd2tfVmlld19S
ZXNvdXJjZV9IYW5kbGVyX0NiIGhhbmRsZXIsIHZvaWQqIGNvbnRleHQpCiB7Ci0gICAgRVdLX1ZJ
RVdfU0RfR0VUKGV3a1ZpZXcsIHNkKTsKLSAgICBFV0tfVklFV19QUklWX0dFVChzZCwgcHJpdik7
CisgICAgRVdLX1ZJRVdfU0RfR0VUKGV3a1ZpZXcsIHNtYXJ0RGF0YSk7CisgICAgRVdLX1ZJRVdf
UFJJVl9HRVQoc21hcnREYXRhLCBwcml2KTsKIAogICAgIGlmICghaGFuZGxlcikKICAgICAgICAg
cmV0dXJuIEVJTkFfRkFMU0U7CiAKLSAgICBwcml2LT5jdXN0b21fcmVzb3VyY2VfaGFuZGxlci5m
dW5jdGlvbiA9IGhhbmRsZXI7Ci0gICAgcHJpdi0+Y3VzdG9tX3Jlc291cmNlX2hhbmRsZXIuY29u
dGV4dCA9IGNvbnRleHQ7CisgICAgcHJpdi0+Y3VzdG9tUmVzb3VyY2VIYW5kbGVyLmZ1bmN0aW9u
ID0gaGFuZGxlcjsKKyAgICBwcml2LT5jdXN0b21SZXNvdXJjZUhhbmRsZXIuY29udGV4dCA9IGNv
bnRleHQ7CiAKICAgICByZXR1cm4gZXdrX2N1c3RvbV9wcm90b2NvbF9oYW5kbGVyX3NldChwcm90
b2NvbHMpOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfcHJvdG9jb2xfaGFuZGxlcl91bnNldChF
dmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVQoZXdrVmlldywgc2Qp
OwotICAgIEVXS19WSUVXX1BSSVZfR0VUKHNkLCBwcml2KTsKKyAgICBFV0tfVklFV19TRF9HRVQo
ZXdrVmlldywgc21hcnREYXRhKTsKKyAgICBFV0tfVklFV19QUklWX0dFVChzbWFydERhdGEsIHBy
aXYpOwogICAgIEVpbmFfQm9vbCByZXQgPSBld2tfY3VzdG9tX3Byb3RvY29sX2hhbmRsZXJfYWxs
X3Vuc2V0KCk7CiAKICAgICBpZiAocmV0KSB7Ci0gICAgICAgIHByaXYtPmN1c3RvbV9yZXNvdXJj
ZV9oYW5kbGVyLmZ1bmN0aW9uID0gMDsKLSAgICAgICAgcHJpdi0+Y3VzdG9tX3Jlc291cmNlX2hh
bmRsZXIuY29udGV4dCA9IDA7CisgICAgICAgIHByaXYtPmN1c3RvbVJlc291cmNlSGFuZGxlci5m
dW5jdGlvbiA9IDA7CisgICAgICAgIHByaXYtPmN1c3RvbVJlc291cmNlSGFuZGxlci5jb250ZXh0
ID0gMDsKICAgICB9CiAKICAgICByZXR1cm4gcmV0OwpAQCAtMzY5NCwxMiArMzY5NCwxMiBAQCBF
aW5hX0Jvb2wgZXdrX3ZpZXdfcHJvdG9jb2xfaGFuZGxlcl91bnNldChFdmFzX09iamVjdCogZXdr
VmlldykKIAogdm9pZCogZXdrX3ZpZXdfcHJvdG9jb2xfaGFuZGxlcl9yZXNvdXJjZV9nZXQoRXZh
c19PYmplY3QqIGV3a1ZpZXcsIHNpemVfdCogYnl0ZXNSZWFkLCBjaGFyKiogbWltZSwgY29uc3Qg
Y2hhciogZmlsZSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVQoZXdrVmlldywgc2QpOwotICAgIEVX
S19WSUVXX1BSSVZfR0VUKHNkLCBwcml2KTsKKyAgICBFV0tfVklFV19TRF9HRVQoZXdrVmlldywg
c21hcnREYXRhKTsKKyAgICBFV0tfVklFV19QUklWX0dFVChzbWFydERhdGEsIHByaXYpOwogCi0g
ICAgRXdrX1ZpZXdfUmVzb3VyY2VfSGFuZGxlcl9DYiBmdW5jdGlvbiA9IHByaXYtPmN1c3RvbV9y
ZXNvdXJjZV9oYW5kbGVyLmZ1bmN0aW9uOworICAgIEV3a19WaWV3X1Jlc291cmNlX0hhbmRsZXJf
Q2IgZnVuY3Rpb24gPSBwcml2LT5jdXN0b21SZXNvdXJjZUhhbmRsZXIuZnVuY3Rpb247CiAgICAg
aWYgKGZ1bmN0aW9uKQotICAgICAgICByZXR1cm4gZnVuY3Rpb24oZmlsZSwgYnl0ZXNSZWFkLCBt
aW1lLCBwcml2LT5jdXN0b21fcmVzb3VyY2VfaGFuZGxlci5jb250ZXh0KTsKKyAgICAgICAgcmV0
dXJuIGZ1bmN0aW9uKGZpbGUsIGJ5dGVzUmVhZCwgbWltZSwgcHJpdi0+Y3VzdG9tUmVzb3VyY2VI
YW5kbGVyLmNvbnRleHQpOwogCiAgICAgcmV0dXJuIDA7CiB9CkBAIC0zNzA5LDE3ICszNzA5LDE3
IEBAIHZvaWQqIGV3a192aWV3X3Byb3RvY29sX2hhbmRsZXJfcmVzb3VyY2VfZ2V0KEV2YXNfT2Jq
ZWN0KiBld2tWaWV3LCBzaXplX3QqIGJ5dGVzCiAgKiBSZXBvcnRzIHRoYXQgdGhlIGNvbnRlbnRz
IGhhdmUgcmVzaXplZC4gVGhlIGV3a192aWV3IGNhbGxzIGNvbnRlbnRzX3Jlc2l6ZSwKICAqIHdo
aWNoIGNhbiBiZSByZWltcGxlbWVudGVkIGFzIG5lZWRlZC4KICAqCi0gKiBAcGFyYW0gbyB2aWV3
LgotICogQHBhcmFtIHcgbmV3IGNvbnRlbnQgd2lkdGguCi0gKiBAcGFyYW0gaCBuZXcgY29udGVu
dCBoZWlnaHQuCisgKiBAcGFyYW0gZXdrVmlldyB2aWV3LgorICogQHBhcmFtIHdpZHRoIG5ldyBj
b250ZW50IHdpZHRoLgorICogQHBhcmFtIGhlaWdodCBuZXcgY29udGVudCBoZWlnaHQuCiAgKi8K
IHZvaWQgZXdrX3ZpZXdfY29udGVudHNfc2l6ZV9jaGFuZ2VkKEV2YXNfT2JqZWN0KiBld2tWaWV3
LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
Tihld2tWaWV3LCBzZCk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFwaSk7
Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFwaS0+Y29udGVudHNfcmVzaXpl
KTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSk7Cisg
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRhLT5hcGkpOworICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+YXBpLT5jb250ZW50c19yZXNpemUpOwog
Ci0gICAgaWYgKCFzZC0+YXBpLT5jb250ZW50c19yZXNpemUoc2QsIHdpZHRoLCBoZWlnaHQpKQor
ICAgIGlmICghc21hcnREYXRhLT5hcGktPmNvbnRlbnRzX3Jlc2l6ZShzbWFydERhdGEsIHdpZHRo
LCBoZWlnaHQpKQogICAgICAgICBFUlIoImZhaWxlZCB0byByZXNpemUgY29udGVudHMgdG8gJWR4
JWQiLCB3aWR0aCwgaGVpZ2h0KTsKIH0KIApAQCAtMzcyNywxNCArMzcyNywxNCBAQCB2b2lkIGV3
a192aWV3X2NvbnRlbnRzX3NpemVfY2hhbmdlZChFdmFzX09iamVjdCogZXdrVmlldywgaW50IHdp
ZHRoLCBpbnQgaGVpZ2h0KQogICogQGludGVybmFsCiAgKiBHZXRzIHBhZ2Ugc2l6ZSBmcm9tIGZy
YW1ldmlldy4KICAqCi0gKiBAcGFyYW0gbyB2aWV3LgorICogQHBhcmFtIGV3a1ZpZXcgdmlldy4K
ICAqCiAgKiBAcmV0dXJuIHBhZ2Ugc2l6ZS4KICAqLwogV2ViQ29yZTo6RmxvYXRSZWN0IGV3a192
aWV3X3BhZ2VfcmVjdF9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdL
X1ZJRVdfU0RfR0VUKGV3a1ZpZXcsIHNkKTsKLSAgICBFV0tfVklFV19QUklWX0dFVChzZCwgcHJp
dik7CisgICAgRVdLX1ZJRVdfU0RfR0VUKGV3a1ZpZXcsIHNtYXJ0RGF0YSk7CisgICAgRVdLX1ZJ
RVdfUFJJVl9HRVQoc21hcnREYXRhLCBwcml2KTsKIAogICAgIFdlYkNvcmU6OkZyYW1lKiBtYWlu
X2ZyYW1lID0gcHJpdi0+cGFnZS0+bWFpbkZyYW1lKCk7CiAgICAgcmV0dXJuIG1haW5fZnJhbWUt
PnZpZXcoKS0+ZnJhbWVSZWN0KCk7CkBAIC0zNzQzLDI0ICszNzQzLDI0IEBAIFdlYkNvcmU6OkZs
b2F0UmVjdCBld2tfdmlld19wYWdlX3JlY3RfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3
KQogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCiB2b2lkIGV3a192aWV3X25lZWRfdG91Y2hfZXZl
bnRzX3NldChFdmFzX09iamVjdCogZXdrVmlldywgYm9vbCBuZWVkZWQpCiB7Ci0gICAgRVdLX1ZJ
RVdfU0RfR0VUKGV3a1ZpZXcsIHNkKTsKLSAgICBFV0tfVklFV19QUklWX0dFVChzZCwgcHJpdik7
CisgICAgRVdLX1ZJRVdfU0RfR0VUKGV3a1ZpZXcsIHNtYXJ0RGF0YSk7CisgICAgRVdLX1ZJRVdf
UFJJVl9HRVQoc21hcnREYXRhLCBwcml2KTsKIAotICAgIHByaXYtPmZsYWdzLm5lZWRfdG91Y2hf
ZXZlbnRzID0gbmVlZGVkOworICAgIHByaXYtPmZsYWdzLm5lZWRUb3VjaEV2ZW50cyA9IG5lZWRl
ZDsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X25lZWRfdG91Y2hfZXZlbnRzX2dldChjb25zdCBF
dmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3
a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4o
c2QsIHByaXYsIEVJTkFfRkFMU0UpOwotICAgIHJldHVybiBwcml2LT5mbGFncy5uZWVkX3RvdWNo
X2V2ZW50czsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0
YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0
YSwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgcmV0dXJuIHByaXYtPmZsYWdzLm5lZWRUb3VjaEV2
ZW50czsKIH0KICNlbmRpZgogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfbW9kZV9zZXQoRXZhc19PYmpl
Y3QqIGV3a1ZpZXcsIEV3a19WaWV3X01vZGUgdmlld01vZGUpCiB7Ci0gICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJ
Vl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9H
RVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJ
RVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CiAKICAg
ICBzd2l0Y2ggKHZpZXdNb2RlKSB7CiAgICAgY2FzZSBFV0tfVklFV19NT0RFX1dJTkRPV0VEOgpA
QCAtMzc4OSwxMCArMzc4OSwxMCBAQCBFd2tfVmlld19Nb2RlIGV3a192aWV3X21vZGVfZ2V0KGNv
bnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewogICAgIEV3a19WaWV3X01vZGUgbW9kZSA9IEVX
S19WSUVXX01PREVfV0lORE9XRUQ7CiAKLSAgICBFV0tfVklFV19TRF9HRVQoZXdrVmlldywgc2Qp
OwotICAgIGlmICghc2QpCisgICAgRVdLX1ZJRVdfU0RfR0VUKGV3a1ZpZXcsIHNtYXJ0RGF0YSk7
CisgICAgaWYgKCFzbWFydERhdGEpCiAgICAgICAgIHJldHVybiBtb2RlOwotICAgIEVXS19WSUVX
X1BSSVZfR0VUKHNkLCBwcml2KTsKKyAgICBFV0tfVklFV19QUklWX0dFVChzbWFydERhdGEsIHBy
aXYpOwogICAgIGlmICghcHJpdikKICAgICAgICAgcmV0dXJuIG1vZGU7CiAKQEAgLTM4MjAsNyAr
MzgyMCw3IEBAIEV3a19WaWV3X01vZGUgZXdrX3ZpZXdfbW9kZV9nZXQoY29uc3QgRXZhc19PYmpl
Y3QqIGV3a1ZpZXcpCiAgKiBAaW50ZXJuYWwKICAqIFJlcG9ydHMgdGhlIHZpZXcgdGhhdCBlZGl0
b3IgY2xpZW50IHNlbGVjdGlvbiBoYXMgY2hhbmdlZC4KICAqCi0gKiBAcGFyYW0gbyBWaWV3Lgor
ICogQHBhcmFtIGV3a1ZpZXcgVmlldy4KICAqCiAgKiBFbWl0cyBzaWduYWw6ICJlZGl0b3JjbGll
bnRzZWxlY3Rpb24sY2hhbmdlZCIgd2l0aCBubyBwYXJhbWV0ZXJzLgogICovCkBAIC0zODMzLDcg
KzM4MzMsNyBAQCB2b2lkIGV3a192aWV3X2VkaXRvcl9jbGllbnRfc2VsZWN0aW9uX2NoYW5nZWQo
RXZhc19PYmplY3QqIGV3a1ZpZXcpCiAgKiBAaW50ZXJuYWwKICAqIFJlcG9ydHMgdG8gdGhlIHZp
ZXcgdGhhdCBlZGl0b3IgY2xpZW50J3MgY29udGVudHMgd2VyZSBjaGFuZ2VkLgogICoKLSAqIEBw
YXJhbSBvIFZpZXcuCisgKiBAcGFyYW0gZXdrVmlldyBWaWV3LgogICoKICAqIEVtaXRzIHNpZ25h
bDogImVkaXRvcmNsaWVudCxjb250ZW50cyxjaGFuZ2VkIiB3aXRoIG5vIHBhcmFtZXRlcnMuCiAg
Ki8K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111546</attachid>
            <date>2011-10-18 18:25:09 -0700</date>
            <delta_ts>2011-10-20 00:48:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69988-20111019102507.patch</filename>
            <type>text/plain</type>
            <size>367865</size>
            <attacher name="Gyuyoung Kim">gyuyoung.kim</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTc3MzYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZs
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZwppbmRleCA1NDBjMDEyMTEy
NTY1NzJmNzkwMWM0NjI0NzdmMzQzMTY3ZTFiNGNkLi5jNzk0ZDI4NmRlNGQwZDAyOGZmY2NkNGQ2
NzY2NjA4OWRjMmJmM2FmIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDYgQEAKKzIwMTEt
MTAtMTggIEd5dXlvdW5nIEtpbSAgPGd5dXlvdW5nLmtpbUBzYW1zdW5nLmNvbT4KKworICAgICAg
ICBbRUZMXSBDaGFuZ2UgZWZsIHN0eWxlIGxvY2FsIHZhcmlhYmxlcyB3aXRoIFdlYktpdCBjb2Rp
bmcgU3R5bGUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD02OTk4OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEluIGNvbW1vbiB3aXRoIEJ1ZyA2OTA3MywgdGhpcyBpcyBhIHRoaXJkIHN0ZXAgaW4gb3JkZXIg
dG8gYmUgbW9yZSBjb21wbGlhbnQgd2l0aCBXZWJLaXQgY29kaW5nIHN0eWxlLgorICAgICAgICBX
ZSBoYXZlIHVzZWQgb25lLWxldHRlcnwgdHdvLWxldHRlciBsb2NhbCB2YXJpYWJsZSBhY2NvcmRp
bmcgdG8gZWZsIHN0eWxlLiBIb3dldmVyLCBpdCdzCisgICAgICAgIG1vcmUgZGlmZmljdWx0IGZv
ciBvdGhlciByZXZpZXdlcnMgdG8gcmV2aWV3IEVGTCBwYXRjaGVzLiBTbywgdGhpcyBwYXRjaCBj
aGFuZ2VzIGVmbCBzdHlsZQorICAgICAgICBsb2NhbCB2YXJpYWJsZSB3aXRoIG1lYW5pbmdmdWwg
b25lLgorCisgICAgICAgIC0gVXNlICptZW51KiBpbnN0ZWFkIG9mICpvKiBpbiBjb21tZW50IG9m
IGV3a19jb250ZXh0bWVudS5jcHAuCisgICAgICAgIC0gVXNlICpsaXN0KiBpbnN0ZWFkIG9mICps
KiBsb2NhbCB2YXJpYWJsZQorICAgICAgICAtIFVzZSAqZXdrUG9saWN5KiBpbnN0ZWFkIG9mICpl
d2tfcG9saWN5KiBpbiBld2tfY29va2llcy5jcHAKKyAgICAgICAgLSBVc2UgKnNtYXJ0RGF0YSog
aW5zdGVhZCBvZiAqc2QqIGxvY2FsIHZhcmlhYmxlIGZvciBFd2tfWFhYWF9TbWFydF9EYXRhIHN0
cnVjdC4KKyAgICAgICAgLSBVc2UgKndpZHRoKiwgKmhlaWdodCogaW5zdGVhZCBvZiAqdyosICpo
KiBsb2NhbCB2YXJpYWJsZXMuCisgICAgICAgIC0gVXNlICpzY3JvbGxYKiwgKnNjcm9sbFkqLCAq
c2Nyb2xsV2lkdGgqLCAqc2Nyb2xsSGVpZ2h0KiwgKmNlbnRlclgqLCAqY2VudGVyWSosICpkZWx0
YVgqLCAqZGVsdGFZKiwKKyAgICAgICAgKmJhc2VYKiwgKmJhc2VZKiBpbnN0ZWFkIG9mICpzeCos
ICpzeSosICpzdyosICpzaCosICpjeCosICpjeSosICpkeCosICpkeSosICpieCosICpieSouCisg
ICAgICAgIC0gVXNlICpyZWQqLCAqZ3JlZW4qLCAqYmx1ZSosICphbHBoYSosICpjb250ZW50UmVk
KiwgKmNvbnRlbnRHcmVlbiosICpjb250ZW50Qmx1ZSogYW5kICpjb250ZW50QWxwaGEqCisgICAg
ICAgIGluc3RlYWQgb2YgKnIqLCpnKiwqYiosKmEqLCpjciosKmNnKiwqY2IqLCpjYSouCisgICAg
ICAgIC0gVXNlICp0aWxlUG9zaXRpb25YKiwgKnRpbGVQb3NpdGlvblkqIGluc3RlYWQgb2YgKm94
Kiwqb3kqIGluIHRpbGVkIGJhY2tpbmdzdG9yZSBmaWxlcy4KKyAgICAgICAgLSBVc2UgKm9iamVj
dCogaW5zdGVhZCBvZiAqb2JqKiAKKyAgICAgICAgLSBVc2UgKmxlbmd0aCogaW5zdGVhZCBvZiAq
bGVuKgorICAgICAgICAtIFVzZSAqY29yZUZyYW1lKiBpbnN0ZWFkIG9mICpjZioKKyAgICAgICAg
LSBVc2UgKmJ1ZmZlciogaW5zdGVhZCBvZiAqYnVmKgorICAgICAgICAtIFVzZSAqaXRlbSogaW5z
dGVhZCBvZiAqaSoKKyAgICAgICAgLSBSZW1vdmUgIl8iIGluIGxvY2FsIHZhcmlhYmxlLgorICAg
ICAgICAtIEFuZCBzbyBvbi4KKworICAgICAgICAqIGV3ay9ld2tfYXV0aF9zb3VwLmNwcDoKKyAg
ICAgICAgKiBld2svZXdrX2NvbnRleHRtZW51LmNwcDoKKyAgICAgICAgKiBld2svZXdrX2Nvb2tp
ZXMuY3BwOgorICAgICAgICAqIGV3ay9ld2tfZnJhbWUuY3BwOgorICAgICAgICAqIGV3ay9ld2tf
aGlzdG9yeS5jcHA6CisgICAgICAgICogZXdrL2V3a19qcy5jcHA6CisgICAgICAgICogZXdrL2V3
a19tYWluLmNwcDoKKyAgICAgICAgKiBld2svZXdrX3NldHRpbmdzLmNwcDoKKyAgICAgICAgKiBl
d2svZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmUuY3BwOgorICAgICAgICAqIGV3ay9ld2tfdGlsZWRf
bWF0cml4LmNwcDoKKyAgICAgICAgKiBld2svZXdrX3RpbGVkX21vZGVsLmNwcDoKKyAgICAgICAg
KiBld2svZXdrX3ZpZXcuY3BwOgorCiAyMDExLTEwLTE3ICBSYXBoYWVsIEt1Ym8gZGEgQ29zdGEg
IDxrdWJvQHByb2Z1c2lvbi5tb2JpPgogCiAgICAgICAgIFtFRkxdIEV4cG9zZSB0aGUga2l0KCkg
ZnJhbWUgZnVuY3Rpb24gdG8gdGhlIHJlc3Qgb2YgZXdrLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9lZmwvZXdrL2V3a19hdXRoX3NvdXAuY3BwIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3
a19hdXRoX3NvdXAuY3BwCmluZGV4IGNiYzg3NTZlZDg1ZWJjMTVlNzdiYzQxYjMzZTA1MzNjNDI1
YTE5MmYuLjk2NTYzYzBjNDM3ZGY3Yjc3MzA2Nzk1NzU3MjBjNjZhM2FiZTU1YzggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfYXV0aF9zb3VwLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L2VmbC9ld2svZXdrX2F1dGhfc291cC5jcHAKQEAgLTQwLDcgKzQwLDcgQEAgZXh0ZXJu
ICJDIiB7CiAgKi8KIAogdHlwZWRlZiBzdHJ1Y3QgX0V3a19BdXRoX0RhdGEgewotICAgIFNvdXBN
ZXNzYWdlKiBtc2c7CisgICAgU291cE1lc3NhZ2UqIG1lc3NhZ2U7CiAgICAgU291cEF1dGgqIGF1
dGg7CiAgICAgU291cFNlc3Npb24qIHNlc3Npb247CiB9IEV3a19BdXRoX0RhdGE7CkBAIC03OSw1
MSArNzksNTEgQEAgdm9pZCBld2tfYXV0aF9zb3VwX2NyZWRlbnRpYWxzX3NldChjb25zdCBjaGFy
KiB1c2VybmFtZSwgY29uc3QgY2hhciogcGFzc3dvcmQsIHYKICAgICBpZiAoIWRhdGEpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIEV3a19BdXRoX0RhdGEqIGF1dGhfZGF0YSA9IHN0YXRpY19jYXN0
PEV3a19BdXRoX0RhdGEqPihkYXRhKTsKLSAgICBzb3VwX2F1dGhfYXV0aGVudGljYXRlKGF1dGhf
ZGF0YS0+YXV0aCwgdXNlcm5hbWUsIHBhc3N3b3JkKTsKLSAgICBzb3VwX3Nlc3Npb25fdW5wYXVz
ZV9tZXNzYWdlKGF1dGhfZGF0YS0+c2Vzc2lvbiwgYXV0aF9kYXRhLT5tc2cpOwotICAgIGZyZWVf
YXV0aF9kYXRhKGF1dGhfZGF0YSk7CisgICAgRXdrX0F1dGhfRGF0YSogYXV0aGVudGljYXRpb25E
YXRhID0gc3RhdGljX2Nhc3Q8RXdrX0F1dGhfRGF0YSo+KGRhdGEpOworICAgIHNvdXBfYXV0aF9h
dXRoZW50aWNhdGUoYXV0aGVudGljYXRpb25EYXRhLT5hdXRoLCB1c2VybmFtZSwgcGFzc3dvcmQp
OworICAgIHNvdXBfc2Vzc2lvbl91bnBhdXNlX21lc3NhZ2UoYXV0aGVudGljYXRpb25EYXRhLT5z
ZXNzaW9uLCBhdXRoZW50aWNhdGlvbkRhdGEtPm1lc3NhZ2UpOworICAgIGZyZWVfYXV0aF9kYXRh
KGF1dGhlbnRpY2F0aW9uRGF0YSk7CiB9CiAKLXN0YXRpYyB2b2lkIHNlc3Npb25fYXV0aGVudGlj
YXRlKFNvdXBTZXNzaW9uKiBzZXNzaW9uLCBTb3VwTWVzc2FnZSogbXNnLCBTb3VwQXV0aCogYXV0
aCwgZ2Jvb2xlYW4gcmV0cnlpbmcsIGdwb2ludGVyIC8qIHVzZXJfZGF0YSAqLykKK3N0YXRpYyB2
b2lkIHNlc3Npb25fYXV0aGVudGljYXRlKFNvdXBTZXNzaW9uKiBzZXNzaW9uLCBTb3VwTWVzc2Fn
ZSogbWVzc2FnZSwgU291cEF1dGgqIGF1dGgsIGdib29sZWFuIHJldHJ5aW5nLCBncG9pbnRlciAv
KiB1c2VyX2RhdGEgKi8pCiB7CiAgICAgU291cFVSSSogdXJpOwotICAgIEV3a19BdXRoX0RhdGEq
IGF1dGhfZGF0YTsKKyAgICBFd2tfQXV0aF9EYXRhKiBhdXRoZW50aWNhdGlvbkRhdGE7CiAgICAg
Y29uc3QgY2hhciogcmVhbG07CiAKICAgICBpZiAoIWV3a19hdXRoX3Nob3dfZGlhbG9nX2NhbGxi
YWNrKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRoX2RhdGEgPSBzdGF0aWNfY2FzdDxFd2tf
QXV0aF9EYXRhKj4oY2FsbG9jKDEsIHNpemVvZihFd2tfQXV0aF9EYXRhKSkpOworICAgIGF1dGhl
bnRpY2F0aW9uRGF0YSA9IHN0YXRpY19jYXN0PEV3a19BdXRoX0RhdGEqPihjYWxsb2MoMSwgc2l6
ZW9mKEV3a19BdXRoX0RhdGEpKSk7CiAKLSAgICBpZiAoIWF1dGhfZGF0YSkgeworICAgIGlmICgh
YXV0aGVudGljYXRpb25EYXRhKSB7CiAgICAgICAgIENSSVRJQ0FMKCJjb3VsZCBub3QgYWxsb2Nh
dGUgRXdrX0F1dGhfRGF0YSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgc291cF9z
ZXNzaW9uX3BhdXNlX21lc3NhZ2Uoc2Vzc2lvbiwgbXNnKTsKKyAgICBzb3VwX3Nlc3Npb25fcGF1
c2VfbWVzc2FnZShzZXNzaW9uLCBtZXNzYWdlKTsKICAgICAvLyBXZSBuZWVkIHRvIG1ha2Ugc3Vy
ZSB0aGUgbWVzc2FnZSBzdGlja3MgYXJvdW5kIHdoZW4gcGF1c2luZyBpdC4KLSAgICBnX29iamVj
dF9yZWYobXNnKTsKKyAgICBnX29iamVjdF9yZWYobWVzc2FnZSk7CiAgICAgZ19vYmplY3RfcmVm
KHNlc3Npb24pOwogICAgIGdfb2JqZWN0X3JlZihhdXRoKTsKIAotICAgIGF1dGhfZGF0YS0+bXNn
ID0gbXNnOwotICAgIGF1dGhfZGF0YS0+YXV0aCA9IGF1dGg7Ci0gICAgYXV0aF9kYXRhLT5zZXNz
aW9uID0gc2Vzc2lvbjsKKyAgICBhdXRoZW50aWNhdGlvbkRhdGEtPm1lc3NhZ2UgPSBtZXNzYWdl
OworICAgIGF1dGhlbnRpY2F0aW9uRGF0YS0+YXV0aCA9IGF1dGg7CisgICAgYXV0aGVudGljYXRp
b25EYXRhLT5zZXNzaW9uID0gc2Vzc2lvbjsKIAotICAgIHVyaSA9IHNvdXBfbWVzc2FnZV9nZXRf
dXJpKGF1dGhfZGF0YS0+bXNnKTsKLSAgICByZWFsbSA9IHNvdXBfYXV0aF9nZXRfcmVhbG0oYXV0
aF9kYXRhLT5hdXRoKTsKKyAgICB1cmkgPSBzb3VwX21lc3NhZ2VfZ2V0X3VyaShhdXRoZW50aWNh
dGlvbkRhdGEtPm1lc3NhZ2UpOworICAgIHJlYWxtID0gc291cF9hdXRoX2dldF9yZWFsbShhdXRo
ZW50aWNhdGlvbkRhdGEtPmF1dGgpOwogCiAgICAgLy8gQ2FsbCBhcHBsaWNhdGlvbiBtZXRob2Qg
cmVzcG9uc2libGUgZm9yIHNob3dpbmcgYXV0aGVudGljYXRpb24gZGlhbG9nIGFuZCBzZW5kaW5n
IGJhY2sgYXV0aG9yaXphdGlvbiBkYXRhLgotICAgIGV3a19hdXRoX3Nob3dfZGlhbG9nX2NhbGxi
YWNrKHJlYWxtLCBzb3VwX3VyaV90b19zdHJpbmcodXJpLCBUUlVFKSwgYXV0aF9kYXRhKTsKKyAg
ICBld2tfYXV0aF9zaG93X2RpYWxvZ19jYWxsYmFjayhyZWFsbSwgc291cF91cmlfdG9fc3RyaW5n
KHVyaSwgVFJVRSksIGF1dGhlbnRpY2F0aW9uRGF0YSk7CiB9CiAKLXN0YXRpYyB2b2lkIGZyZWVf
YXV0aF9kYXRhKEV3a19BdXRoX0RhdGEqIGF1dGhfZGF0YSkKK3N0YXRpYyB2b2lkIGZyZWVfYXV0
aF9kYXRhKEV3a19BdXRoX0RhdGEqIGF1dGhEYXRhKQogewotICAgIGdfb2JqZWN0X3VucmVmKGF1
dGhfZGF0YS0+bXNnKTsKLSAgICBnX29iamVjdF91bnJlZihhdXRoX2RhdGEtPnNlc3Npb24pOwot
ICAgIGdfb2JqZWN0X3VucmVmKGF1dGhfZGF0YS0+YXV0aCk7Ci0gICAgZnJlZShhdXRoX2RhdGEp
OworICAgIGdfb2JqZWN0X3VucmVmKGF1dGhEYXRhLT5tZXNzYWdlKTsKKyAgICBnX29iamVjdF91
bnJlZihhdXRoRGF0YS0+c2Vzc2lvbik7CisgICAgZ19vYmplY3RfdW5yZWYoYXV0aERhdGEtPmF1
dGgpOworICAgIGZyZWUoYXV0aERhdGEpOwogfQogCiBzdGF0aWMgdm9pZCBhdHRhY2goU291cFNl
c3Npb25GZWF0dXJlKiBtYW5hZ2VyLCBTb3VwU2Vzc2lvbiogc2Vzc2lvbikKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfY29udGV4dG1lbnUuY3BwIGIvU291cmNlL1dlYktp
dC9lZmwvZXdrL2V3a19jb250ZXh0bWVudS5jcHAKaW5kZXggNjIxYzc5YzcwNTFkM2U4MDBkYTA3
NTU5ZTk0OGRhNWU5Yzg0OTkzYi4uZmE3MzYyM2YwMjJhZTgwZTY1ZTYxNjA0NTJhNjExNmJhMGVl
ODk2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19jb250ZXh0bWVudS5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19jb250ZXh0bWVudS5jcHAKQEAgLTI0
OCw3ICsyNDgsNyBAQCBFd2tfQ29udGV4dF9NZW51KiBld2tfY29udGV4dF9tZW51X25ldyhFdmFz
X09iamVjdCogdmlldywgV2ViQ29yZTo6Q29udGV4dE1lbnVDbwogICoKICAqIEZyZWVzIHRoZSBj
b250ZXh0IG1lbnUuCiAgKgotICogQHBhcmFtIG8gdGhlIHZpZXcgb2JqZWN0CisgKiBAcGFyYW0g
bWVudSB0aGUgdmlldyBvYmplY3QKICAqIEByZXR1cm4gQGMgRUlOQV9UUlVFIG9uIHN1Y2Nlc3Ms
IG9yIEBjIEVJTkFfRkFMU0Ugb24gZmFpbHVyZQogICoKICAqIEBub3RlIGVtaXRzIGEgc2lnbmFs
ICJjb250ZXh0bWVudSxmcmVlIgpAQCAtMjY5LDcgKzI2OSw3IEBAIEVpbmFfQm9vbCBld2tfY29u
dGV4dF9tZW51X2ZyZWUoRXdrX0NvbnRleHRfTWVudSogbWVudSkKICAqCiAgKiBBcHBlbmRzIHRo
ZSBXZWJDb3JlJ3MgaXRlbSB0byB0aGUgY29udGV4dCBtZW51IG9iamVjdC4KICAqCi0gKiBAcGFy
YW0gbyB0aGUgY29udGV4dCBtZW51IG9iamVjdAorICogQHBhcmFtIG1lbnUgdGhlIGNvbnRleHQg
bWVudSBvYmplY3QKICAqIEBwYXJhbSBjb3JlIHRoZSBXZWJDb3JlJ3MgY29udGV4dCBtZW51IGl0
ZW0gdGhhdCB3aWxsIGJlIGFkZGVkIHRvIHRoZSBjb250ZXh0IG1lbnUKICAqIEBub3RlIGVtaXRz
IGEgc2lnbmFsICJjb250ZXh0bWVudSxpdGVtLGFwcGVuZGVkIgogICoKQEAgLTI5NCw3ICsyOTQs
NyBAQCB2b2lkIGV3a19jb250ZXh0X21lbnVfaXRlbV9hcHBlbmQoRXdrX0NvbnRleHRfTWVudSog
bWVudSwgV2ViQ29yZTo6Q29udGV4dE1lbnVJdAogICoKICAqIEVtaXRzIGEgc2lnbmFsIHdpdGgg
dGhlIGl0ZW1zIG9mIHRoZSBjb250ZXh0IG1lbnUuCiAgKgotICogQHBhcmFtIG8gdGhlIGNvbnRl
eHQgbWVudSBvYmplY3QKKyAqIEBwYXJhbSBtZW51IHRoZSBjb250ZXh0IG1lbnUgb2JqZWN0CiAg
KiBAcmV0dXJuIHRoZSBzYW1lIGNvbnRleHQgbWVudSBvYmplY3QgdGhhdCB3YXMgZ2l2ZW4gdGhy
b3VnaCBwYXJhbWV0ZXIKICAqCiAgKiBAbm90ZSBlbWl0cyBhIHNpZ25hbCAiY29udGV4dG1lbnUs
Y3VzdG9taXplIgpAQCAtMzE0LDcgKzMxNCw3IEBAIEV3a19Db250ZXh0X01lbnUqIGV3a19jb250
ZXh0X21lbnVfY3VzdG9tX2dldChjb25zdCBFd2tfQ29udGV4dF9NZW51KiBtZW51KQogICoKICAq
IEVtaXRzIGEgc2lnbmFsICJjb250ZXh0bWVudSxzaG93IgogICoKLSAqIEBwYXJhbSBvIHRoZSBj
b250ZXh0IG1lbnUgb2JqZWN0CisgKiBAcGFyYW0gbWVudSB0aGUgY29udGV4dCBtZW51IG9iamVj
dAogICovCiB2b2lkIGV3a19jb250ZXh0X21lbnVfc2hvdyhjb25zdCBFd2tfQ29udGV4dF9NZW51
KiBtZW51KQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19jb29raWVz
LmNwcCBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfY29va2llcy5jcHAKaW5kZXggMDRkNzA0
MTU3ZDM1OGUzYjg2Yzk3MjVmYzk1ODNiODNhYWMwODU1Zi4uZmY2Zjk3NDU0ODkzNzU1ODBlM2Vl
ZThhMWVkOWUzNWNmMjFmY2YxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3
a19jb29raWVzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2Nvb2tpZXMuY3Bw
CkBAIC02Nyw2NiArNjcsNjYgQEAgRWluYV9Cb29sIGV3a19jb29raWVzX2ZpbGVfc2V0KGNvbnN0
IGNoYXIqIGZpbGVuYW1lKQogdm9pZCBld2tfY29va2llc19jbGVhcih2b2lkKQogewogI2lmIFVT
RShTT1VQKQotICAgIEdTTGlzdCogbDsKKyAgICBHU0xpc3QqIGxpc3Q7CiAgICAgR1NMaXN0KiBw
OwogICAgIFNvdXBDb29raWVKYXIqIGNvb2tpZUphciA9IFdlYkNvcmU6OmRlZmF1bHRDb29raWVK
YXIoKTsKIAotICAgIGwgPSBzb3VwX2Nvb2tpZV9qYXJfYWxsX2Nvb2tpZXMoY29va2llSmFyKTsK
LSAgICBmb3IgKHAgPSBsOyBwOyBwID0gcC0+bmV4dCkKKyAgICBsaXN0ID0gc291cF9jb29raWVf
amFyX2FsbF9jb29raWVzKGNvb2tpZUphcik7CisgICAgZm9yIChwID0gbGlzdDsgcDsgcCA9IHAt
Pm5leHQpCiAgICAgICAgIHNvdXBfY29va2llX2phcl9kZWxldGVfY29va2llKGNvb2tpZUphciwg
KFNvdXBDb29raWUqKXAtPmRhdGEpOwogCi0gICAgc291cF9jb29raWVzX2ZyZWUobCk7CisgICAg
c291cF9jb29raWVzX2ZyZWUobGlzdCk7CiAjZW5kaWYKIH0KIAogRWluYV9MaXN0KiBld2tfY29v
a2llc19nZXRfYWxsKHZvaWQpCiB7Ci0gICAgRWluYV9MaXN0KiBlbCA9IDA7CisgICAgRWluYV9M
aXN0KiByZXN1bHQgPSAwOwogI2lmIFVTRShTT1VQKQotICAgIEdTTGlzdCogbDsKKyAgICBHU0xp
c3QqIGxpc3Q7CiAgICAgR1NMaXN0KiBwOwogICAgIFNvdXBDb29raWVKYXIqIGNvb2tpZUphciA9
IFdlYkNvcmU6OmRlZmF1bHRDb29raWVKYXIoKTsKIAotICAgIGwgPSBzb3VwX2Nvb2tpZV9qYXJf
YWxsX2Nvb2tpZXMoY29va2llSmFyKTsKLSAgICBmb3IgKHAgPSBsOyBwOyBwID0gcC0+bmV4dCkg
eworICAgIGxpc3QgPSBzb3VwX2Nvb2tpZV9qYXJfYWxsX2Nvb2tpZXMoY29va2llSmFyKTsKKyAg
ICBmb3IgKHAgPSBsaXN0OyBwOyBwID0gcC0+bmV4dCkgewogICAgICAgICBTb3VwQ29va2llKiBj
b29raWUgPSBzdGF0aWNfY2FzdDxTb3VwQ29va2llKj4ocC0+ZGF0YSk7Ci0gICAgICAgIEV3a19D
b29raWUqIGMgPSBzdGF0aWNfY2FzdDxFd2tfQ29va2llKj4obWFsbG9jKHNpemVvZigqYykpKTsK
LSAgICAgICAgYy0+bmFtZSA9IHN0cmR1cChjb29raWUtPm5hbWUpOwotICAgICAgICBjLT52YWx1
ZSA9IHN0cmR1cChjb29raWUtPnZhbHVlKTsKLSAgICAgICAgYy0+ZG9tYWluID0gc3RyZHVwKGNv
b2tpZS0+ZG9tYWluKTsKLSAgICAgICAgYy0+cGF0aCA9IHN0cmR1cChjb29raWUtPnBhdGgpOwot
ICAgICAgICBjLT5leHBpcmVzID0gc291cF9kYXRlX3RvX3RpbWVfdChjb29raWUtPmV4cGlyZXMp
OwotICAgICAgICBjLT5zZWN1cmUgPSBzdGF0aWNfY2FzdDxFaW5hX0Jvb2w+KGNvb2tpZS0+c2Vj
dXJlKTsKLSAgICAgICAgYy0+aHR0cF9vbmx5ID0gc3RhdGljX2Nhc3Q8RWluYV9Cb29sPihjb29r
aWUtPmh0dHBfb25seSk7Ci0gICAgICAgIGVsID0gZWluYV9saXN0X2FwcGVuZChlbCwgYyk7Cisg
ICAgICAgIEV3a19Db29raWUqIGV3a0Nvb2tpZSA9IHN0YXRpY19jYXN0PEV3a19Db29raWUqPiht
YWxsb2Moc2l6ZW9mKCpld2tDb29raWUpKSk7CisgICAgICAgIGV3a0Nvb2tpZS0+bmFtZSA9IHN0
cmR1cChjb29raWUtPm5hbWUpOworICAgICAgICBld2tDb29raWUtPnZhbHVlID0gc3RyZHVwKGNv
b2tpZS0+dmFsdWUpOworICAgICAgICBld2tDb29raWUtPmRvbWFpbiA9IHN0cmR1cChjb29raWUt
PmRvbWFpbik7CisgICAgICAgIGV3a0Nvb2tpZS0+cGF0aCA9IHN0cmR1cChjb29raWUtPnBhdGgp
OworICAgICAgICBld2tDb29raWUtPmV4cGlyZXMgPSBzb3VwX2RhdGVfdG9fdGltZV90KGNvb2tp
ZS0+ZXhwaXJlcyk7CisgICAgICAgIGV3a0Nvb2tpZS0+c2VjdXJlID0gc3RhdGljX2Nhc3Q8RWlu
YV9Cb29sPihjb29raWUtPnNlY3VyZSk7CisgICAgICAgIGV3a0Nvb2tpZS0+aHR0cF9vbmx5ID0g
c3RhdGljX2Nhc3Q8RWluYV9Cb29sPihjb29raWUtPmh0dHBfb25seSk7CisgICAgICAgIHJlc3Vs
dCA9IGVpbmFfbGlzdF9hcHBlbmQocmVzdWx0LCBld2tDb29raWUpOwogICAgIH0KIAotICAgIHNv
dXBfY29va2llc19mcmVlKGwpOworICAgIHNvdXBfY29va2llc19mcmVlKGxpc3QpOwogI2VuZGlm
Ci0gICAgcmV0dXJuIGVsOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIHZvaWQgZXdrX2Nvb2tp
ZXNfY29va2llX2RlbChFd2tfQ29va2llKiBjb29raWUpCiB7CiAjaWYgVVNFKFNPVVApCiAgICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oY29va2llKTsKLSAgICBHU0xpc3QqIGw7CisgICAg
R1NMaXN0KiBsaXN0OwogICAgIEdTTGlzdCogcDsKICAgICBTb3VwQ29va2llSmFyKiBjb29raWVK
YXIgPSBXZWJDb3JlOjpkZWZhdWx0Q29va2llSmFyKCk7Ci0gICAgU291cENvb2tpZSogYzEgPSBz
b3VwX2Nvb2tpZV9uZXcoCisgICAgU291cENvb2tpZSogY29va2llMSA9IHNvdXBfY29va2llX25l
dygKICAgICAgICAgY29va2llLT5uYW1lLCBjb29raWUtPnZhbHVlLCBjb29raWUtPmRvbWFpbiwg
Y29va2llLT5wYXRoLCAtMSk7CiAKLSAgICBsID0gc291cF9jb29raWVfamFyX2FsbF9jb29raWVz
KGNvb2tpZUphcik7Ci0gICAgZm9yIChwID0gbDsgcDsgcCA9IHAtPm5leHQpIHsKLSAgICAgICAg
U291cENvb2tpZSogYzIgPSBzdGF0aWNfY2FzdDxTb3VwQ29va2llKj4ocC0+ZGF0YSk7Ci0gICAg
ICAgIGlmIChzb3VwX2Nvb2tpZV9lcXVhbChjMSwgYzIpKSB7Ci0gICAgICAgICAgICBzb3VwX2Nv
b2tpZV9qYXJfZGVsZXRlX2Nvb2tpZShjb29raWVKYXIsIGMyKTsKKyAgICBsaXN0ID0gc291cF9j
b29raWVfamFyX2FsbF9jb29raWVzKGNvb2tpZUphcik7CisgICAgZm9yIChwID0gbGlzdDsgcDsg
cCA9IHAtPm5leHQpIHsKKyAgICAgICAgU291cENvb2tpZSogY29va2llMiA9IHN0YXRpY19jYXN0
PFNvdXBDb29raWUqPihwLT5kYXRhKTsKKyAgICAgICAgaWYgKHNvdXBfY29va2llX2VxdWFsKGNv
b2tpZTEsIGNvb2tpZTIpKSB7CisgICAgICAgICAgICBzb3VwX2Nvb2tpZV9qYXJfZGVsZXRlX2Nv
b2tpZShjb29raWVKYXIsIGNvb2tpZTIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICB9CiAKLSAgICBzb3VwX2Nvb2tpZV9mcmVlKGMxKTsKLSAgICBzb3VwX2Nvb2tpZXNfZnJl
ZShsKTsKKyAgICBzb3VwX2Nvb2tpZV9mcmVlKGNvb2tpZTEpOworICAgIHNvdXBfY29va2llc19m
cmVlKGxpc3QpOwogI2VuZGlmCiB9CiAKQEAgLTE2Nyw3ICsxNjcsNyBAQCB2b2lkIGV3a19jb29r
aWVzX3BvbGljeV9zZXQoRXdrX0Nvb2tpZV9Qb2xpY3kgY29va2llUG9saWN5KQogCiBFd2tfQ29v
a2llX1BvbGljeSBld2tfY29va2llc19wb2xpY3lfZ2V0KHZvaWQpCiB7Ci0gICAgRXdrX0Nvb2tp
ZV9Qb2xpY3kgZXdrX3BvbGljeSA9IEVXS19DT09LSUVfSkFSX0FDQ0VQVF9BTFdBWVM7CisgICAg
RXdrX0Nvb2tpZV9Qb2xpY3kgZXdrUG9saWN5ID0gRVdLX0NPT0tJRV9KQVJfQUNDRVBUX0FMV0FZ
UzsKICNpZiBVU0UoU09VUCkKICAgICBTb3VwQ29va2llSmFyKiBjb29raWVKYXIgPSBXZWJDb3Jl
OjpkZWZhdWx0Q29va2llSmFyKCk7CiAgICAgU291cENvb2tpZUphckFjY2VwdFBvbGljeSBwb2xp
Y3k7CkBAIC0xNzUsMTYgKzE3NSwxNiBAQCBFd2tfQ29va2llX1BvbGljeSBld2tfY29va2llc19w
b2xpY3lfZ2V0KHZvaWQpCiAgICAgcG9saWN5ID0gc291cF9jb29raWVfamFyX2dldF9hY2NlcHRf
cG9saWN5KGNvb2tpZUphcik7CiAgICAgc3dpdGNoIChwb2xpY3kpIHsKICAgICBjYXNlIFNPVVBf
Q09PS0lFX0pBUl9BQ0NFUFRfTkVWRVI6Ci0gICAgICAgIGV3a19wb2xpY3kgPSBFV0tfQ09PS0lF
X0pBUl9BQ0NFUFRfTkVWRVI7CisgICAgICAgIGV3a1BvbGljeSA9IEVXS19DT09LSUVfSkFSX0FD
Q0VQVF9ORVZFUjsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTT1VQX0NPT0tJRV9KQVJfQUND
RVBUX0FMV0FZUzoKLSAgICAgICAgZXdrX3BvbGljeSA9IEVXS19DT09LSUVfSkFSX0FDQ0VQVF9B
TFdBWVM7CisgICAgICAgIGV3a1BvbGljeSA9IEVXS19DT09LSUVfSkFSX0FDQ0VQVF9BTFdBWVM7
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgU09VUF9DT09LSUVfSkFSX0FDQ0VQVF9OT19USElS
RF9QQVJUWToKLSAgICAgICAgZXdrX3BvbGljeSA9IEVXS19DT09LSUVfSkFSX0FDQ0VQVF9OT19U
SElSRF9QQVJUWTsKKyAgICAgICAgZXdrUG9saWN5ID0gRVdLX0NPT0tJRV9KQVJfQUNDRVBUX05P
X1RISVJEX1BBUlRZOwogICAgICAgICBicmVhazsKICAgICB9CiAjZW5kaWYKIAotICAgIHJldHVy
biBld2tfcG9saWN5OworICAgIHJldHVybiBld2tQb2xpY3k7CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2VmbC9ld2svZXdrX2ZyYW1lLmNwcCBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9l
d2tfZnJhbWUuY3BwCmluZGV4IDg3Y2U2M2M2Njc2ZTJkNDM4N2ZhZTk3YjMxMzg0MDVlNWMzNDk4
YzUuLmYwOTUwY2MxMDQzZWY3YjYzMDQ1Y2YyNWFhYzFmNWIxN2MxZGI0NzkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfZnJhbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
ZWZsL2V3ay9ld2tfZnJhbWUuY3BwCkBAIC03Niw3ICs3Niw3IEBAIHN0cnVjdCBFd2tfRnJhbWVf
U21hcnRfRGF0YSB7CiAKIHN0cnVjdCBFaW5hX0l0ZXJhdG9yX0V3a19GcmFtZSB7CiAgICAgRWlu
YV9JdGVyYXRvciBiYXNlOwotICAgIEV2YXNfT2JqZWN0KiBvYmo7CisgICAgRXZhc19PYmplY3Qq
IG9iamVjdDsKICAgICB1bnNpZ25lZCBjdXJyZW50SW5kZXg7CiB9OwogCkBAIC0xMTMsMjAgKzEx
MywyMCBAQCBzdGF0aWMgRXZhc19TbWFydF9DbGFzcyBfcGFyZW50X3NjID0gRVZBU19TTUFSVF9D
TEFTU19JTklUX05VTEw7CiBzdGF0aWMgaW5saW5lIHZvaWQgX2V3a19mcmFtZV9kZWJ1ZyhFdmFz
X09iamVjdCogZXdrRnJhbWUpCiB7CiAgICAgRXZhc19PYmplY3QqIGNsaXAsICogcGFyZW50Owot
ICAgIEV2YXNfQ29vcmQgeCwgeSwgdywgaCwgY3gsIGN5LCBjdywgY2g7Ci0gICAgaW50IHIsIGcs
IGIsIGEsIGNyLCBjZywgY2IsIGNhOworICAgIEV2YXNfQ29vcmQgeCwgeSwgd2lkdGgsIGhlaWdo
dCwgY29udGVudFgsIGNvbnRlbnRZLCBjb250ZW50V2lkdGgsIGNvbnRlbnRIZWlnaHQ7CisgICAg
aW50IHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhLCBjb250ZW50UmVkLCBjb250ZW50R3JlZW4sIGNv
bnRlbnRCbHVlLCBjb250ZW50QWxwaGE7CiAKLSAgICBldmFzX29iamVjdF9jb2xvcl9nZXQoZXdr
RnJhbWUsICZyLCAmZywgJmIsICZhKTsKLSAgICBldmFzX29iamVjdF9nZW9tZXRyeV9nZXQoZXdr
RnJhbWUsICZ4LCAmeSwgJncsICZoKTsKKyAgICBldmFzX29iamVjdF9jb2xvcl9nZXQoZXdrRnJh
bWUsICZyZWQsICZncmVlbiwgJmJsdWUsICZhbHBoYSk7CisgICAgZXZhc19vYmplY3RfZ2VvbWV0
cnlfZ2V0KGV3a0ZyYW1lLCAmeCwgJnksICZ3aWR0aCwgJmhlaWdodCk7CiAKICAgICBjbGlwID0g
ZXZhc19vYmplY3RfY2xpcF9nZXQoZXdrRnJhbWUpOwotICAgIGV2YXNfb2JqZWN0X2NvbG9yX2dl
dChjbGlwLCAmY3IsICZjZywgJmNiLCAmY2EpOwotICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dl
dChjbGlwLCAmY3gsICZjeSwgJmN3LCAmY2gpOworICAgIGV2YXNfb2JqZWN0X2NvbG9yX2dldChj
bGlwLCAmY29udGVudFJlZCwgJmNvbnRlbnRHcmVlbiwgJmNvbnRlbnRCbHVlLCAmY29udGVudEFs
cGhhKTsKKyAgICBldmFzX29iamVjdF9nZW9tZXRyeV9nZXQoY2xpcCwgJmNvbnRlbnRYLCAmY29u
dGVudFksICZjb250ZW50V2lkdGgsICZjb250ZW50SGVpZ2h0KTsKIAogICAgIGZwcmludGYoc3Rk
ZXJyLCAiJXA6IHR5cGU9JXMgbmFtZT0lcywgdmlzaWJsZT0lZCwgY29sb3I9JTAyeCUwMnglMDJ4
JTAyeCwgJWQsJWQrJWR4JWQsIGNsaXBwZXI9JXAgKCVkLCAlMDJ4JTAyeCUwMnglMDJ4LCAlZCwl
ZCslZHglZClcbiIsCiAgICAgICAgICAgICBld2tGcmFtZSwgZXZhc19vYmplY3RfdHlwZV9nZXQo
ZXdrRnJhbWUpLCBldmFzX29iamVjdF9uYW1lX2dldChld2tGcmFtZSksIGV2YXNfb2JqZWN0X3Zp
c2libGVfZ2V0KGV3a0ZyYW1lKSwKLSAgICAgICAgICAgIHIsIGcsIGIsIGEsIHgsIHksIHcsIGgs
Ci0gICAgICAgICAgICBjbGlwLCBldmFzX29iamVjdF92aXNpYmxlX2dldChjbGlwKSwgY3IsIGNn
LCBjYiwgY2EsIGN4LCBjeSwgY3csIGNoKTsKKyAgICAgICAgICAgIHJlZCwgZ3JlZW4sIGJsdWUs
IGFscGhhLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LAorICAgICAgICAgICAgY2xpcCwgZXZhc19vYmpl
Y3RfdmlzaWJsZV9nZXQoY2xpcCksIGNvbnRlbnRSZWQsIGNvbnRlbnRHcmVlbiwgY29udGVudEJs
dWUsIGNvbnRlbnRBbHBoYSwgY29udGVudFgsIGNvbnRlbnRZLCBjb250ZW50V2lkdGgsIGNvbnRl
bnRIZWlnaHQpOwogICAgIHBhcmVudCA9IGV2YXNfb2JqZWN0X3NtYXJ0X3BhcmVudF9nZXQoZXdr
RnJhbWUpOwogICAgIGlmICghcGFyZW50KQogICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlxuIik7
CkBAIC0xNDAsMTYgKzE0MCwxNiBAQCBzdGF0aWMgV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRF
ZmwqIF9ld2tfZnJhbWVfbG9hZGVyX2VmbF9nZXQoY29uc3QgV2ViQ29yZTo6RgogICAgIHJldHVy
biBzdGF0aWNfY2FzdDxXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEVmbCo+KGZyYW1lLT5sb2Fk
ZXIoKS0+Y2xpZW50KCkpOwogfQogCi1zdGF0aWMgRWluYV9Cb29sIF9ld2tfZnJhbWVfY2hpbGRy
ZW5faXRlcmF0b3JfbmV4dChFaW5hX0l0ZXJhdG9yX0V3a19GcmFtZSogaXQsIEV2YXNfT2JqZWN0
KiogZGF0YSkKK3N0YXRpYyBFaW5hX0Jvb2wgX2V3a19mcmFtZV9jaGlsZHJlbl9pdGVyYXRvcl9u
ZXh0KEVpbmFfSXRlcmF0b3JfRXdrX0ZyYW1lKiBpdGVyYXRvciwgRXZhc19PYmplY3QqKiBkYXRh
KQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGl0LT5vYmosIHNkLCBFSU5BX0ZB
TFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5B
X0ZBTFNFKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihpdGVyYXRvci0+b2JqZWN0
LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJO
X1ZBTChzbWFydERhdGEtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKIAotICAgIFdlYkNvcmU6OkZyYW1l
VHJlZSogdHJlZSA9IHNkLT5mcmFtZS0+dHJlZSgpOyAvLyBjaGVjayBpZiBpdCdzIHN0aWxsIHZh
bGlkCisgICAgV2ViQ29yZTo6RnJhbWVUcmVlKiB0cmVlID0gc21hcnREYXRhLT5mcmFtZS0+dHJl
ZSgpOyAvLyBjaGVjayBpZiBpdCdzIHN0aWxsIHZhbGlkCiAgICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk5fVkFMKHRyZWUsIEVJTkFfRkFMU0UpOwogCi0gICAgaWYgKGl0LT5jdXJyZW50SW5k
ZXggPCB0cmVlLT5jaGlsZENvdW50KCkpIHsKLSAgICAgICAgKmRhdGEgPSBFV0tQcml2YXRlOjpr
aXRGcmFtZSh0cmVlLT5jaGlsZChpdC0+Y3VycmVudEluZGV4KyspKTsKKyAgICBpZiAoaXRlcmF0
b3ItPmN1cnJlbnRJbmRleCA8IHRyZWUtPmNoaWxkQ291bnQoKSkgeworICAgICAgICAqZGF0YSA9
IEVXS1ByaXZhdGU6OmtpdEZyYW1lKHRyZWUtPmNoaWxkKGl0ZXJhdG9yLT5jdXJyZW50SW5kZXgr
KykpOwogICAgICAgICByZXR1cm4gRUlOQV9UUlVFOwogICAgIH0KIApAQCAtMTU4LDUzICsxNTgs
NTMgQEAgc3RhdGljIEVpbmFfQm9vbCBfZXdrX2ZyYW1lX2NoaWxkcmVuX2l0ZXJhdG9yX25leHQo
RWluYV9JdGVyYXRvcl9Fd2tfRnJhbWUqIGl0LAogCiBzdGF0aWMgRXZhc19PYmplY3QqIF9ld2tf
ZnJhbWVfY2hpbGRyZW5faXRlcmF0b3JfZ2V0X2NvbnRhaW5lcihFaW5hX0l0ZXJhdG9yX0V3a19G
cmFtZSogaXRlcmF0b3IpCiB7Ci0gICAgcmV0dXJuIGl0ZXJhdG9yLT5vYmo7CisgICAgcmV0dXJu
IGl0ZXJhdG9yLT5vYmplY3Q7CiB9CiAKIHN0YXRpYyB2b2lkIF9ld2tfZnJhbWVfc21hcnRfYWRk
KEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUKGV3a0ZyYW1l
LCBzZCk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVChld2tGcmFtZSwgc21hcnREYXRhKTsKIAotICAg
IGlmICghc2QpIHsKLSAgICAgICAgc2QgPSBzdGF0aWNfY2FzdDxFd2tfRnJhbWVfU21hcnRfRGF0
YSo+KGNhbGxvYygxLCBzaXplb2YoRXdrX0ZyYW1lX1NtYXJ0X0RhdGEpKSk7Ci0gICAgICAgIGlm
ICghc2QpIHsKKyAgICBpZiAoIXNtYXJ0RGF0YSkgeworICAgICAgICBzbWFydERhdGEgPSBzdGF0
aWNfY2FzdDxFd2tfRnJhbWVfU21hcnRfRGF0YSo+KGNhbGxvYygxLCBzaXplb2YoRXdrX0ZyYW1l
X1NtYXJ0X0RhdGEpKSk7CisgICAgICAgIGlmICghc21hcnREYXRhKSB7CiAgICAgICAgICAgICBD
UklUSUNBTCgiY291bGQgbm90IGFsbG9jYXRlIEV3a19GcmFtZV9TbWFydF9EYXRhIik7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgZXZhc19vYmplY3Rfc21hcnRfZGF0
YV9zZXQoZXdrRnJhbWUsIHNkKTsKKyAgICAgICAgZXZhc19vYmplY3Rfc21hcnRfZGF0YV9zZXQo
ZXdrRnJhbWUsIHNtYXJ0RGF0YSk7CiAgICAgfQogCi0gICAgc2QtPnNlbGYgPSBld2tGcmFtZTsK
KyAgICBzbWFydERhdGEtPnNlbGYgPSBld2tGcmFtZTsKIAogICAgIF9wYXJlbnRfc2MuYWRkKGV3
a0ZyYW1lKTsKLSAgICBldmFzX29iamVjdF9zdGF0aWNfY2xpcF9zZXQoc2QtPmJhc2UuY2xpcHBl
ciwgRUlOQV9GQUxTRSk7Ci0gICAgZXZhc19vYmplY3RfbW92ZShzZC0+YmFzZS5jbGlwcGVyLCAw
LCAwKTsKLSAgICBldmFzX29iamVjdF9yZXNpemUoc2QtPmJhc2UuY2xpcHBlciwgMCwgMCk7Cisg
ICAgZXZhc19vYmplY3Rfc3RhdGljX2NsaXBfc2V0KHNtYXJ0RGF0YS0+YmFzZS5jbGlwcGVyLCBF
SU5BX0ZBTFNFKTsKKyAgICBldmFzX29iamVjdF9tb3ZlKHNtYXJ0RGF0YS0+YmFzZS5jbGlwcGVy
LCAwLCAwKTsKKyAgICBldmFzX29iamVjdF9yZXNpemUoc21hcnREYXRhLT5iYXNlLmNsaXBwZXIs
IDAsIDApOwogCiAjaWZkZWYgRVdLX0ZSQU1FX0RFQlVHCi0gICAgc2QtPnJlZ2lvbiA9IGV2YXNf
b2JqZWN0X3JlY3RhbmdsZV9hZGQoc2QtPmJhc2UuZXZhcyk7CisgICAgc21hcnREYXRhLT5yZWdp
b24gPSBldmFzX29iamVjdF9yZWN0YW5nbGVfYWRkKHNtYXJ0RGF0YS0+YmFzZS5ldmFzKTsKICAg
ICBzdGF0aWMgaW50IGkgPSAwOwogICAgIHN3aXRjaCAoaSkgewogICAgIGNhc2UgMDoKLSAgICAg
ICAgZXZhc19vYmplY3RfY29sb3Jfc2V0KHNkLT5yZWdpb24sIDEyOCwgMCwgMCwgMTI4KTsKKyAg
ICAgICAgZXZhc19vYmplY3RfY29sb3Jfc2V0KHNtYXJ0RGF0YS0+cmVnaW9uLCAxMjgsIDAsIDAs
IDEyOCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgMToKLSAgICAgICAgZXZhc19vYmplY3Rf
Y29sb3Jfc2V0KHNkLT5yZWdpb24sIDAsIDEyOCwgMCwgMTI4KTsKKyAgICAgICAgZXZhc19vYmpl
Y3RfY29sb3Jfc2V0KHNtYXJ0RGF0YS0+cmVnaW9uLCAwLCAxMjgsIDAsIDEyOCk7CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgMjoKLSAgICAgICAgZXZhc19vYmplY3RfY29sb3Jfc2V0KHNkLT5y
ZWdpb24sIDAsIDAsIDEyOCwgMTI4KTsKKyAgICAgICAgZXZhc19vYmplY3RfY29sb3Jfc2V0KHNt
YXJ0RGF0YS0+cmVnaW9uLCAwLCAwLCAxMjgsIDEyOCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgMzoKLSAgICAgICAgZXZhc19vYmplY3RfY29sb3Jfc2V0KHNkLT5yZWdpb24sIDEyOCwgMCwg
MCwgMTI4KTsKKyAgICAgICAgZXZhc19vYmplY3RfY29sb3Jfc2V0KHNtYXJ0RGF0YS0+cmVnaW9u
LCAxMjgsIDAsIDAsIDEyOCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgNDoKLSAgICAgICAg
ZXZhc19vYmplY3RfY29sb3Jfc2V0KHNkLT5yZWdpb24sIDEyOCwgMTI4LCAwLCAxMjgpOworICAg
ICAgICBldmFzX29iamVjdF9jb2xvcl9zZXQoc21hcnREYXRhLT5yZWdpb24sIDEyOCwgMTI4LCAw
LCAxMjgpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIDU6Ci0gICAgICAgIGV2YXNfb2JqZWN0
X2NvbG9yX3NldChzZC0+cmVnaW9uLCAxMjgsIDAsIDEyOCwgMTI4KTsKKyAgICAgICAgZXZhc19v
YmplY3RfY29sb3Jfc2V0KHNtYXJ0RGF0YS0+cmVnaW9uLCAxMjgsIDAsIDEyOCwgMTI4KTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSA2OgotICAgICAgICBldmFzX29iamVjdF9jb2xvcl9zZXQo
c2QtPnJlZ2lvbiwgMCwgMTI4LCAxMjgsIDEyOCk7CisgICAgICAgIGV2YXNfb2JqZWN0X2NvbG9y
X3NldChzbWFydERhdGEtPnJlZ2lvbiwgMCwgMTI4LCAxMjgsIDEyOCk7CiAgICAgICAgIGJyZWFr
OwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwpAQCAtMjEzLDI3ICsyMTMsMjcgQEAgc3Rh
dGljIHZvaWQgX2V3a19mcmFtZV9zbWFydF9hZGQoRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogICAg
IGlmIChpID4gNikKICAgICAgICAgaSA9IDA7CiAKLSAgICBldmFzX29iamVjdF9zbWFydF9tZW1i
ZXJfYWRkKHNkLT5yZWdpb24sIGV3a0ZyYW1lKTsKLSAgICBldmFzX29iamVjdF9oaWRlKHNkLT5y
ZWdpb24pOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X21lbWJlcl9hZGQoc21hcnREYXRhLT5yZWdp
b24sIGV3a0ZyYW1lKTsKKyAgICBldmFzX29iamVjdF9oaWRlKHNtYXJ0RGF0YS0+cmVnaW9uKTsK
ICNlbmRpZgogfQogCiBzdGF0aWMgdm9pZCBfZXdrX2ZyYW1lX3NtYXJ0X2RlbChFdmFzX09iamVj
dCogZXdrRnJhbWUpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVChld2tGcmFtZSwgc2QpOworICAg
IEVXS19GUkFNRV9TRF9HRVQoZXdrRnJhbWUsIHNtYXJ0RGF0YSk7CiAKLSAgICBpZiAoc2QpIHsK
LSAgICAgICAgaWYgKHNkLT5mcmFtZSkgewotICAgICAgICAgICAgV2ViQ29yZTo6RnJhbWVMb2Fk
ZXJDbGllbnRFZmwqIGZsYyA9IF9ld2tfZnJhbWVfbG9hZGVyX2VmbF9nZXQoc2QtPmZyYW1lKTsK
KyAgICBpZiAoc21hcnREYXRhKSB7CisgICAgICAgIGlmIChzbWFydERhdGEtPmZyYW1lKSB7Cisg
ICAgICAgICAgICBXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEVmbCogZmxjID0gX2V3a19mcmFt
ZV9sb2FkZXJfZWZsX2dldChzbWFydERhdGEtPmZyYW1lKTsKICAgICAgICAgICAgIGZsYy0+c2V0
V2ViRnJhbWUoMCk7Ci0gICAgICAgICAgICBzZC0+ZnJhbWUtPmxvYWRlcigpLT5kZXRhY2hGcm9t
UGFyZW50KCk7Ci0gICAgICAgICAgICBzZC0+ZnJhbWUtPmxvYWRlcigpLT5jYW5jZWxBbmRDbGVh
cigpOwotICAgICAgICAgICAgc2QtPmZyYW1lID0gMDsKKyAgICAgICAgICAgIHNtYXJ0RGF0YS0+
ZnJhbWUtPmxvYWRlcigpLT5kZXRhY2hGcm9tUGFyZW50KCk7CisgICAgICAgICAgICBzbWFydERh
dGEtPmZyYW1lLT5sb2FkZXIoKS0+Y2FuY2VsQW5kQ2xlYXIoKTsKKyAgICAgICAgICAgIHNtYXJ0
RGF0YS0+ZnJhbWUgPSAwOwogICAgICAgICB9CiAKLSAgICAgICAgZWluYV9zdHJpbmdzaGFyZV9k
ZWwoc2QtPnRpdGxlKTsKLSAgICAgICAgZWluYV9zdHJpbmdzaGFyZV9kZWwoc2QtPnVyaSk7Ci0g
ICAgICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVsKHNkLT5uYW1lKTsKKyAgICAgICAgZWluYV9zdHJp
bmdzaGFyZV9kZWwoc21hcnREYXRhLT50aXRsZSk7CisgICAgICAgIGVpbmFfc3RyaW5nc2hhcmVf
ZGVsKHNtYXJ0RGF0YS0+dXJpKTsKKyAgICAgICAgZWluYV9zdHJpbmdzaGFyZV9kZWwoc21hcnRE
YXRhLT5uYW1lKTsKICAgICB9CiAKICAgICBfcGFyZW50X3NjLmRlbChld2tGcmFtZSk7CkBAIC0y
NDEsMTUgKzI0MSwxNSBAQCBzdGF0aWMgdm9pZCBfZXdrX2ZyYW1lX3NtYXJ0X2RlbChFdmFzX09i
amVjdCogZXdrRnJhbWUpCiAKIHN0YXRpYyB2b2lkIF9ld2tfZnJhbWVfc21hcnRfcmVzaXplKEV2
YXNfT2JqZWN0KiBld2tGcmFtZSwgRXZhc19Db29yZCB3aWR0aCwgRXZhc19Db29yZCBoZWlnaHQp
CiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVChld2tGcmFtZSwgc2QpOwotICAgIGV2YXNfb2JqZWN0
X3Jlc2l6ZShzZC0+YmFzZS5jbGlwcGVyLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBFV0tfRlJBTUVf
U0RfR0VUKGV3a0ZyYW1lLCBzbWFydERhdGEpOworICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShzbWFy
dERhdGEtPmJhc2UuY2xpcHBlciwgd2lkdGgsIGhlaWdodCk7CiAKICNpZmRlZiBFV0tfRlJBTUVf
REVCVUcKLSAgICBldmFzX29iamVjdF9yZXNpemUoc2QtPnJlZ2lvbiwgd2lkdGgsIGhlaWdodCk7
CisgICAgZXZhc19vYmplY3RfcmVzaXplKHNtYXJ0RGF0YS0+cmVnaW9uLCB3aWR0aCwgaGVpZ2h0
KTsKICAgICBFdmFzX0Nvb3JkIHgsIHk7Ci0gICAgZXZhc19vYmplY3RfZ2VvbWV0cnlfZ2V0KHNk
LT5yZWdpb24sICZ4LCAmeSwgJndpZHRoLCAmaGVpZ2h0KTsKKyAgICBldmFzX29iamVjdF9nZW9t
ZXRyeV9nZXQoc21hcnREYXRhLT5yZWdpb24sICZ4LCAmeSwgJndpZHRoLCAmaGVpZ2h0KTsKICAg
ICBJTkYoInJlZ2lvbj0lcCwgdmlzaWJsZT0lZCwgZ2VvPSVkLCVkICsgJWR4JWQiLAotICAgICAg
ICBzZC0+cmVnaW9uLCBldmFzX29iamVjdF92aXNpYmxlX2dldChzZC0+cmVnaW9uKSwgeCwgeSwg
d2lkdGgsIGhlaWdodCk7CisgICAgICAgIHNtYXJ0RGF0YS0+cmVnaW9uLCBldmFzX29iamVjdF92
aXNpYmxlX2dldChzbWFydERhdGEtPnJlZ2lvbiksIHgsIHksIHdpZHRoLCBoZWlnaHQpOwogICAg
IF9ld2tfZnJhbWVfZGVidWcoZXdrRnJhbWUpOwogI2VuZGlmCiB9CkBAIC0yNjQsMTMgKzI2NCwx
MyBAQCBzdGF0aWMgdm9pZCBfZXdrX2ZyYW1lX3NtYXJ0X3NldChFdmFzX1NtYXJ0X0NsYXNzKiBh
cGkpCiAKIHN0YXRpYyBpbmxpbmUgRXZhc19TbWFydCogX2V3a19mcmFtZV9zbWFydF9jbGFzc19u
ZXcodm9pZCkKIHsKLSAgICBzdGF0aWMgRXZhc19TbWFydF9DbGFzcyBzYyA9IEVWQVNfU01BUlRf
Q0xBU1NfSU5JVF9OQU1FX1ZFUlNJT04oRVdLX0ZSQU1FX1RZUEVfU1RSKTsKKyAgICBzdGF0aWMg
RXZhc19TbWFydF9DbGFzcyBzbWFydENsYXNzID0gRVZBU19TTUFSVF9DTEFTU19JTklUX05BTUVf
VkVSU0lPTihFV0tfRlJBTUVfVFlQRV9TVFIpOwogICAgIHN0YXRpYyBFdmFzX1NtYXJ0KiBzbWFy
dCA9IDA7CiAKICAgICBpZiAoRUlOQV9VTkxJS0VMWSghc21hcnQpKSB7CiAgICAgICAgIGV2YXNf
b2JqZWN0X3NtYXJ0X2NsaXBwZWRfc21hcnRfc2V0KCZfcGFyZW50X3NjKTsKLSAgICAgICAgX2V3
a19mcmFtZV9zbWFydF9zZXQoJnNjKTsKLSAgICAgICAgc21hcnQgPSBldmFzX3NtYXJ0X2NsYXNz
X25ldygmc2MpOworICAgICAgICBfZXdrX2ZyYW1lX3NtYXJ0X3NldCgmc21hcnRDbGFzcyk7Cisg
ICAgICAgIHNtYXJ0ID0gZXZhc19zbWFydF9jbGFzc19uZXcoJnNtYXJ0Q2xhc3MpOwogICAgIH0K
IAogICAgIHJldHVybiBzbWFydDsKQEAgLTI4NCwyOCArMjg0LDI4IEBAIEV2YXNfT2JqZWN0KiBl
d2tfZnJhbWVfdmlld19nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogCiBFaW5hX0l0
ZXJhdG9yKiBld2tfZnJhbWVfY2hpbGRyZW5faXRlcmF0b3JfbmV3KEV2YXNfT2JqZWN0KiBld2tG
cmFtZSkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIDAp
OwotICAgIEVpbmFfSXRlcmF0b3JfRXdrX0ZyYW1lKiBpdCA9IHN0YXRpY19jYXN0PEVpbmFfSXRl
cmF0b3JfRXdrX0ZyYW1lKj4KKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFt
ZSwgc21hcnREYXRhLCAwKTsKKyAgICBFaW5hX0l0ZXJhdG9yX0V3a19GcmFtZSogaXRlcmF0b3Ig
PSBzdGF0aWNfY2FzdDxFaW5hX0l0ZXJhdG9yX0V3a19GcmFtZSo+CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKGNhbGxvYygxLCBzaXplb2YoRWluYV9JdGVyYXRvcl9Fd2tfRnJh
bWUpKSk7Ci0gICAgaWYgKCFpdCkKKyAgICBpZiAoIWl0ZXJhdG9yKQogICAgICAgICByZXR1cm4g
MDsKIAotICAgIEVJTkFfTUFHSUNfU0VUKCZpdC0+YmFzZSwgRUlOQV9NQUdJQ19JVEVSQVRPUik7
Ci0gICAgaXQtPmJhc2UubmV4dCA9IEZVTkNfSVRFUkFUT1JfTkVYVChfZXdrX2ZyYW1lX2NoaWxk
cmVuX2l0ZXJhdG9yX25leHQpOwotICAgIGl0LT5iYXNlLmdldF9jb250YWluZXIgPSBGVU5DX0lU
RVJBVE9SX0dFVF9DT05UQUlORVIoX2V3a19mcmFtZV9jaGlsZHJlbl9pdGVyYXRvcl9nZXRfY29u
dGFpbmVyKTsKLSAgICBpdC0+YmFzZS5mcmVlID0gRlVOQ19JVEVSQVRPUl9GUkVFKGZyZWUpOwot
ICAgIGl0LT5vYmogPSBld2tGcmFtZTsKLSAgICBpdC0+Y3VycmVudEluZGV4ID0gMDsKLSAgICBy
ZXR1cm4gJml0LT5iYXNlOworICAgIEVJTkFfTUFHSUNfU0VUKCZpdGVyYXRvci0+YmFzZSwgRUlO
QV9NQUdJQ19JVEVSQVRPUik7CisgICAgaXRlcmF0b3ItPmJhc2UubmV4dCA9IEZVTkNfSVRFUkFU
T1JfTkVYVChfZXdrX2ZyYW1lX2NoaWxkcmVuX2l0ZXJhdG9yX25leHQpOworICAgIGl0ZXJhdG9y
LT5iYXNlLmdldF9jb250YWluZXIgPSBGVU5DX0lURVJBVE9SX0dFVF9DT05UQUlORVIoX2V3a19m
cmFtZV9jaGlsZHJlbl9pdGVyYXRvcl9nZXRfY29udGFpbmVyKTsKKyAgICBpdGVyYXRvci0+YmFz
ZS5mcmVlID0gRlVOQ19JVEVSQVRPUl9GUkVFKGZyZWUpOworICAgIGl0ZXJhdG9yLT5vYmplY3Qg
PSBld2tGcmFtZTsKKyAgICBpdGVyYXRvci0+Y3VycmVudEluZGV4ID0gMDsKKyAgICByZXR1cm4g
Jml0ZXJhdG9yLT5iYXNlOwogfQogCiBFdmFzX09iamVjdCogZXdrX2ZyYW1lX2NoaWxkX2ZpbmQo
RXZhc19PYmplY3QqIGV3a0ZyYW1lLCBjb25zdCBjaGFyKiBuYW1lKQogewotICAgIEVXS19GUkFN
RV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgMCk7CisgICAgRVdLX0ZSQU1FX1NEX0dF
VF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSwgMCk7CiAgICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk5fVkFMKG5hbWUsIDApOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJO
X1ZBTChzZC0+ZnJhbWUsIDApOwotICAgIFdURjo6U3RyaW5nIHMgPSBXVEY6OlN0cmluZzo6ZnJv
bVVURjgobmFtZSk7Ci0gICAgcmV0dXJuIEVXS1ByaXZhdGU6OmtpdEZyYW1lKHNkLT5mcmFtZS0+
dHJlZSgpLT5maW5kKFdURjo6QXRvbWljU3RyaW5nKHMpKSk7CisgICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUsIDApOworICAgIFdURjo6U3RyaW5nIGZy
YW1lTmFtZSA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChuYW1lKTsKKyAgICByZXR1cm4gRVdLUHJp
dmF0ZTo6a2l0RnJhbWUoc21hcnREYXRhLT5mcmFtZS0+dHJlZSgpLT5maW5kKFdURjo6QXRvbWlj
U3RyaW5nKGZyYW1lTmFtZSkpKTsKIH0KIAogRWluYV9Cb29sIGV3a19mcmFtZV91cmlfc2V0KEV2
YXNfT2JqZWN0KiBld2tGcmFtZSwgY29uc3QgY2hhciogdXJpKQpAQCAtMzI2LDI3ICszMjYsMjcg
QEAgY29uc3QgY2hhciogZXdrX2ZyYW1lX3VyaV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a0Zy
YW1lKQogCiBjb25zdCBjaGFyKiBld2tfZnJhbWVfdGl0bGVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0
KiBld2tGcmFtZSkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwg
c2QsIDApOwotICAgIHJldHVybiBzZC0+dGl0bGU7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9S
RVRVUk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSwgMCk7CisgICAgcmV0dXJuIHNtYXJ0RGF0YS0+dGl0
bGU7CiB9CiAKIGNvbnN0IGNoYXIqIGV3a19mcmFtZV9uYW1lX2dldChjb25zdCBFdmFzX09iamVj
dCogZXdrRnJhbWUpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUs
IHNkLCAwKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21hcnRE
YXRhLCAwKTsKIAotICAgIGlmICghc2QtPmZyYW1lKSB7CisgICAgaWYgKCFzbWFydERhdGEtPmZy
YW1lKSB7CiAgICAgICAgIEVSUigiY291bGQgbm90IGdldCBuYW1lIG9mIHVuaW5pdGlhbGl6ZWQg
ZnJhbWUuIik7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIGNvbnN0IFdURjo6U3Ry
aW5nIGZyYW1lTmFtZSA9IHNkLT5mcmFtZS0+dHJlZSgpLT51bmlxdWVOYW1lKCk7CisgICAgY29u
c3QgV1RGOjpTdHJpbmcgZnJhbWVOYW1lID0gc21hcnREYXRhLT5mcmFtZS0+dHJlZSgpLT51bmlx
dWVOYW1lKCk7CiAKLSAgICBpZiAoKHNkLT5uYW1lKSAmJiAoc2QtPm5hbWUgPT0gZnJhbWVOYW1l
KSkKLSAgICAgICAgcmV0dXJuIHNkLT5uYW1lOworICAgIGlmICgoc21hcnREYXRhLT5uYW1lKSAm
JiAoc21hcnREYXRhLT5uYW1lID09IGZyYW1lTmFtZSkpCisgICAgICAgIHJldHVybiBzbWFydERh
dGEtPm5hbWU7CiAKLSAgICBlaW5hX3N0cmluZ3NoYXJlX3JlcGxhY2VfbGVuZ3RoKCYoc2QtPm5h
bWUpLCBmcmFtZU5hbWUudXRmOCgpLmRhdGEoKSwgZnJhbWVOYW1lLmxlbmd0aCgpKTsKKyAgICBl
aW5hX3N0cmluZ3NoYXJlX3JlcGxhY2VfbGVuZ3RoKCYoc21hcnREYXRhLT5uYW1lKSwgZnJhbWVO
YW1lLnV0ZjgoKS5kYXRhKCksIGZyYW1lTmFtZS5sZW5ndGgoKSk7CiAKLSAgICByZXR1cm4gc2Qt
Pm5hbWU7CisgICAgcmV0dXJuIHNtYXJ0RGF0YS0+bmFtZTsKIH0KIAogRWluYV9Cb29sIGV3a19m
cmFtZV9jb250ZW50c19zaXplX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrRnJhbWUsIEV2YXNf
Q29vcmQqIHdpZHRoLCBFdmFzX0Nvb3JkKiBoZWlnaHQpCkBAIC0zNjcsOSArMzY3LDkgQEAgRWlu
YV9Cb29sIGV3a19mcmFtZV9jb250ZW50c19zaXplX2dldChjb25zdCBFdmFzX09iamVjdCogZXdr
RnJhbWUsIEV2YXNfQ29vcmQqIHcKIAogc3RhdGljIEVpbmFfQm9vbCBfZXdrX2ZyYW1lX2NvbnRl
bnRzX3NldF9pbnRlcm5hbChFd2tfRnJhbWVfU21hcnRfRGF0YSogc21hcnREYXRhLCBjb25zdCBj
aGFyKiBjb250ZW50cywgc2l6ZV90IGNvbnRlbnRzU2l6ZSwgY29uc3QgY2hhciogbWltZVR5cGUs
IGNvbnN0IGNoYXIqIGVuY29kaW5nLCBjb25zdCBjaGFyKiBiYXNlVXJpLCBjb25zdCBjaGFyKiB1
bnJlYWNoYWJsZVVyaSkKIHsKLSAgICBzaXplX3QgbGVuID0gc3RybGVuKGNvbnRlbnRzKTsKLSAg
ICBpZiAoY29udGVudHNTaXplIDwgMSB8fCBjb250ZW50c1NpemUgPiBsZW4pCi0gICAgICAgIGNv
bnRlbnRzU2l6ZSA9IGxlbjsKKyAgICBzaXplX3QgbGVuZ3RoID0gc3RybGVuKGNvbnRlbnRzKTsK
KyAgICBpZiAoY29udGVudHNTaXplIDwgMSB8fCBjb250ZW50c1NpemUgPiBsZW5ndGgpCisgICAg
ICAgIGNvbnRlbnRzU2l6ZSA9IGxlbmd0aDsKICAgICBpZiAoIW1pbWVUeXBlKQogICAgICAgICBt
aW1lVHlwZSA9ICJ0ZXh0L2h0bWwiOwogICAgIGlmICghZW5jb2RpbmcpCkBAIC0zOTgsNTcgKzM5
OCw1NyBAQCBzdGF0aWMgRWluYV9Cb29sIF9ld2tfZnJhbWVfY29udGVudHNfc2V0X2ludGVybmFs
KEV3a19GcmFtZV9TbWFydF9EYXRhKiBzbWFydERhdAogCiBFaW5hX0Jvb2wgZXdrX2ZyYW1lX2Nv
bnRlbnRzX3NldChFdmFzX09iamVjdCogZXdrRnJhbWUsIGNvbnN0IGNoYXIqIGNvbnRlbnRzLCBz
aXplX3QgY29udGVudHNTaXplLCBjb25zdCBjaGFyKiBtaW1lVHlwZSwgY29uc3QgY2hhciogZW5j
b2RpbmcsIGNvbnN0IGNoYXIqIGJhc2VVcmkpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9S
RVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9GQUxT
RV9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX0ZSQU1FX1NEX0dF
VF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9T
QUZFVFlfT05fRkFMU0VfUkVUVVJOX1ZBTChzbWFydERhdGEtPmZyYW1lLCBFSU5BX0ZBTFNFKTsK
ICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoY29udGVudHMsIEVJTkFfRkFMU0Up
OwogICAgIHJldHVybiBfZXdrX2ZyYW1lX2NvbnRlbnRzX3NldF9pbnRlcm5hbAotICAgICAgICAg
ICAgICAgKHNkLCBjb250ZW50cywgY29udGVudHNTaXplLCBtaW1lVHlwZSwgZW5jb2RpbmcsIGJh
c2VVcmksIDApOworICAgICAgICAgICAgICAgKHNtYXJ0RGF0YSwgY29udGVudHMsIGNvbnRlbnRz
U2l6ZSwgbWltZVR5cGUsIGVuY29kaW5nLCBiYXNlVXJpLCAwKTsKIH0KIAogRWluYV9Cb29sIGV3
a19mcmFtZV9jb250ZW50c19hbHRlcm5hdGVfc2V0KEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgY29u
c3QgY2hhciogY29udGVudHMsIHNpemVfdCBjb250ZW50c1NpemUsIGNvbnN0IGNoYXIqIG1pbWVU
eXBlLCBjb25zdCBjaGFyKiBlbmNvZGluZywgY29uc3QgY2hhciogYmFzZVVyaSwgY29uc3QgY2hh
ciogdW5yZWFjaGFibGVVcmkpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdr
RnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9GQUxTRV9SRVRVUk5f
VkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRV
Uk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05f
RkFMU0VfUkVUVVJOX1ZBTChzbWFydERhdGEtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoY29udGVudHMsIEVJTkFfRkFMU0UpOwogICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh1bnJlYWNoYWJsZVVyaSwgRUlOQV9GQUxTRSk7
CiAgICAgcmV0dXJuIF9ld2tfZnJhbWVfY29udGVudHNfc2V0X2ludGVybmFsCi0gICAgICAgICAg
ICAgICAoc2QsIGNvbnRlbnRzLCBjb250ZW50c1NpemUsIG1pbWVUeXBlLCBlbmNvZGluZywgYmFz
ZVVyaSwKKyAgICAgICAgICAgICAgIChzbWFydERhdGEsIGNvbnRlbnRzLCBjb250ZW50c1NpemUs
IG1pbWVUeXBlLCBlbmNvZGluZywgYmFzZVVyaSwKICAgICAgICAgICAgICAgIHVucmVhY2hhYmxl
VXJpKTsKIH0KIAogRWluYV9Cb29sIGV3a19mcmFtZV9zY3JpcHRfZXhlY3V0ZShFdmFzX09iamVj
dCogZXdrRnJhbWUsIGNvbnN0IGNoYXIqIHNjcmlwdCkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VU
X09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVJTkFfU0FGRVRZX09O
X0ZBTFNFX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfRlJBTUVf
U0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBF
SU5BX1NBRkVUWV9PTl9GQUxTRV9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUsIEVJTkFfRkFM
U0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzY3JpcHQsIEVJTkFfRkFM
U0UpOwotICAgIHNkLT5mcmFtZS0+c2NyaXB0KCktPmV4ZWN1dGVTY3JpcHQoV1RGOjpTdHJpbmc6
OmZyb21VVEY4KHNjcmlwdCksIHRydWUpOworICAgIHNtYXJ0RGF0YS0+ZnJhbWUtPnNjcmlwdCgp
LT5leGVjdXRlU2NyaXB0KFdURjo6U3RyaW5nOjpmcm9tVVRGOChzY3JpcHQpLCB0cnVlKTsKICAg
ICByZXR1cm4gRUlOQV9UUlVFOwogfQogCiBFaW5hX0Jvb2wgZXdrX2ZyYW1lX2VkaXRhYmxlX2dl
dChjb25zdCBFdmFzX09iamVjdCogZXdrRnJhbWUpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9P
Ul9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKLSAgICByZXR1cm4gc2QtPmVk
aXRhYmxlOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzbWFydERh
dGEsIEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFy
dERhdGEtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKKyAgICByZXR1cm4gc21hcnREYXRhLT5lZGl0YWJs
ZTsKIH0KIAogRWluYV9Cb29sIGV3a19mcmFtZV9lZGl0YWJsZV9zZXQoRXZhc19PYmplY3QqIGV3
a0ZyYW1lLCBFaW5hX0Jvb2wgZWRpdGFibGUpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9S
RVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VU
X09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5mcmFtZSwgRUlOQV9GQUxTRSk7CiAg
ICAgZWRpdGFibGUgPSAhIWVkaXRhYmxlOwotICAgIGlmIChzZC0+ZWRpdGFibGUgPT0gZWRpdGFi
bGUpCisgICAgaWYgKHNtYXJ0RGF0YS0+ZWRpdGFibGUgPT0gZWRpdGFibGUpCiAgICAgICAgIHJl
dHVybiBFSU5BX1RSVUU7CiAgICAgaWYgKGVkaXRhYmxlKQotICAgICAgICBzZC0+ZnJhbWUtPmVk
aXRvcigpLT5hcHBseUVkaXRpbmdTdHlsZVRvQm9keUVsZW1lbnQoKTsKKyAgICAgICAgc21hcnRE
YXRhLT5mcmFtZS0+ZWRpdG9yKCktPmFwcGx5RWRpdGluZ1N0eWxlVG9Cb2R5RWxlbWVudCgpOwog
ICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKIGNoYXIqIGV3a19mcmFtZV9zZWxlY3Rpb25fZ2V0
KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09S
X1JFVFVSTihld2tGcmFtZSwgc2QsIDApOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJO
X1ZBTChzZC0+ZnJhbWUsIDApOwotICAgIFdURjo6Q1N0cmluZyBzID0gc2QtPmZyYW1lLT5lZGl0
b3IoKS0+c2VsZWN0ZWRUZXh0KCkudXRmOCgpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVU
VVJOKGV3a0ZyYW1lLCBzbWFydERhdGEsIDApOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOX1ZBTChzbWFydERhdGEtPmZyYW1lLCAwKTsKKyAgICBXVEY6OkNTdHJpbmcgcyA9IHNtYXJ0
RGF0YS0+ZnJhbWUtPmVkaXRvcigpLT5zZWxlY3RlZFRleHQoKS51dGY4KCk7CiAgICAgaWYgKHMu
aXNOdWxsKCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiBzdHJkdXAocy5kYXRhKCkp
OwpAQCAtNDU2LDQ1ICs0NTYsNDUgQEAgY2hhciogZXdrX2ZyYW1lX3NlbGVjdGlvbl9nZXQoY29u
c3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogCiBFaW5hX0Jvb2wgZXdrX2ZyYW1lX3RleHRfc2Vh
cmNoKGNvbnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgY29uc3QgY2hhciogdGV4dCwgRWluYV9C
b29sIGNhc2VTZW5zaXRpdmUsIEVpbmFfQm9vbCBmb3J3YXJkLCBFaW5hX0Jvb2wgd3JhcCkKIHsK
LSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0Up
OwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFM
U0UpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzbWFydERhdGEs
IEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERh
dGEtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9W
QUwodGV4dCwgRUlOQV9GQUxTRSk7CiAKLSAgICByZXR1cm4gc2QtPmZyYW1lLT5lZGl0b3IoKS0+
ZmluZFN0cmluZyhXVEY6OlN0cmluZzo6ZnJvbVVURjgodGV4dCksIGZvcndhcmQsIGNhc2VTZW5z
aXRpdmUsIHdyYXAsIHRydWUpOworICAgIHJldHVybiBzbWFydERhdGEtPmZyYW1lLT5lZGl0b3Io
KS0+ZmluZFN0cmluZyhXVEY6OlN0cmluZzo6ZnJvbVVURjgodGV4dCksIGZvcndhcmQsIGNhc2VT
ZW5zaXRpdmUsIHdyYXAsIHRydWUpOwogfQogCiB1bnNpZ25lZCBpbnQgZXdrX2ZyYW1lX3RleHRf
bWF0Y2hlc19tYXJrKEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgY29uc3QgY2hhciogc3RyaW5nLCBF
aW5hX0Jvb2wgY2FzZVNlbnNpdGl2ZSwgRWluYV9Cb29sIGhpZ2hsaWdodCwgdW5zaWduZWQgaW50
IGxpbWl0KQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwg
MCk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9G
QUxTRSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNtYXJ0RGF0
YSwgMCk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJh
bWUsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzdHJp
bmcsIDApOwogCi0gICAgc2QtPmZyYW1lLT5lZGl0b3IoKS0+c2V0TWFya2VkVGV4dE1hdGNoZXNB
cmVIaWdobGlnaHRlZChoaWdobGlnaHQpOwotICAgIHJldHVybiBzZC0+ZnJhbWUtPmVkaXRvcigp
LT5jb3VudE1hdGNoZXNGb3JUZXh0KFdURjo6U3RyaW5nOjpmcm9tVVRGOChzdHJpbmcpLCBjYXNl
U2Vuc2l0aXZlLCBsaW1pdCwgdHJ1ZSk7CisgICAgc21hcnREYXRhLT5mcmFtZS0+ZWRpdG9yKCkt
PnNldE1hcmtlZFRleHRNYXRjaGVzQXJlSGlnaGxpZ2h0ZWQoaGlnaGxpZ2h0KTsKKyAgICByZXR1
cm4gc21hcnREYXRhLT5mcmFtZS0+ZWRpdG9yKCktPmNvdW50TWF0Y2hlc0ZvclRleHQoV1RGOjpT
dHJpbmc6OmZyb21VVEY4KHN0cmluZyksIGNhc2VTZW5zaXRpdmUsIGxpbWl0LCB0cnVlKTsKIH0K
IAogRWluYV9Cb29sIGV3a19mcmFtZV90ZXh0X21hdGNoZXNfdW5tYXJrX2FsbChFdmFzX09iamVj
dCogZXdrRnJhbWUpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUs
IHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2Qt
PmZyYW1lLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tG
cmFtZSwgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTl9WQUwoc21hcnREYXRhLT5mcmFtZSwgRUlOQV9GQUxTRSk7CiAKLSAgICBzZC0+ZnJhbWUt
PmRvY3VtZW50KCktPm1hcmtlcnMoKS0+cmVtb3ZlTWFya2VycyhXZWJDb3JlOjpEb2N1bWVudE1h
cmtlcjo6VGV4dE1hdGNoKTsKKyAgICBzbWFydERhdGEtPmZyYW1lLT5kb2N1bWVudCgpLT5tYXJr
ZXJzKCktPnJlbW92ZU1hcmtlcnMoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXI6OlRleHRNYXRjaCk7
CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAogRWluYV9Cb29sIGV3a19mcmFtZV90ZXh0X21h
dGNoZXNfaGlnaGxpZ2h0X3NldChFdmFzX09iamVjdCogZXdrRnJhbWUsIEVpbmFfQm9vbCBoaWdo
bGlnaHQpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBF
SU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1l
LCBFSU5BX0ZBTFNFKTsKLSAgICBzZC0+ZnJhbWUtPmVkaXRvcigpLT5zZXRNYXJrZWRUZXh0TWF0
Y2hlc0FyZUhpZ2hsaWdodGVkKGhpZ2hsaWdodCk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9S
RVRVUk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUsIEVJTkFfRkFMU0UpOworICAgIHNt
YXJ0RGF0YS0+ZnJhbWUtPmVkaXRvcigpLT5zZXRNYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdo
dGVkKGhpZ2hsaWdodCk7CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAogRWluYV9Cb29sIGV3
a19mcmFtZV90ZXh0X21hdGNoZXNfaGlnaGxpZ2h0X2dldChjb25zdCBFdmFzX09iamVjdCogZXdr
RnJhbWUpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBF
SU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1l
LCBFSU5BX0ZBTFNFKTsKLSAgICByZXR1cm4gc2QtPmZyYW1lLT5lZGl0b3IoKS0+bWFya2VkVGV4
dE1hdGNoZXNBcmVIaWdobGlnaHRlZCgpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJO
KGV3a0ZyYW1lLCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKKyAgICByZXR1cm4g
c21hcnREYXRhLT5mcmFtZS0+ZWRpdG9yKCktPm1hcmtlZFRleHRNYXRjaGVzQXJlSGlnaGxpZ2h0
ZWQoKTsKIH0KIAogLyoqCkBAIC01MTUsMTAgKzUxNSwxMCBAQCBzdGF0aWMgYm9vbCBfZXdrX2Zy
YW1lX3JlY3RfaXNfbmVnYXRpdmVfdmFsdWUoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdCkK
IAogRWluYV9Cb29sIGV3a19mcmFtZV90ZXh0X21hdGNoZXNfbnRoX3Bvc19nZXQoY29uc3QgRXZh
c19PYmplY3QqIGV3a0ZyYW1lLCBzaXplX3QgbnVtYmVyLCBpbnQqIHgsIGludCogeSkKIHsKLSAg
ICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOwot
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0Up
OworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzbWFydERhdGEsIEVJ
TkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEt
PmZyYW1lLCBFSU5BX0ZBTFNFKTsKIAotICAgIFZlY3RvcjxXZWJDb3JlOjpJbnRSZWN0PiBpbnRS
ZWN0cyA9IHNkLT5mcmFtZS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5yZW5kZXJlZFJlY3RzRm9y
TWFya2VycyhXZWJDb3JlOjpEb2N1bWVudE1hcmtlcjo6VGV4dE1hdGNoKTsKKyAgICBWZWN0b3I8
V2ViQ29yZTo6SW50UmVjdD4gaW50UmVjdHMgPSBzbWFydERhdGEtPmZyYW1lLT5kb2N1bWVudCgp
LT5tYXJrZXJzKCktPnJlbmRlcmVkUmVjdHNGb3JNYXJrZXJzKFdlYkNvcmU6OkRvY3VtZW50TWFy
a2VyOjpUZXh0TWF0Y2gpOwogCiAgICAgLyogcmVtb3ZlIHVzZWxlc3MgdmFsdWVzICovCiAgICAg
c3RkOjpyZW1vdmVfaWYoaW50UmVjdHMuYmVnaW4oKSwgaW50UmVjdHMuZW5kKCksIF9ld2tfZnJh
bWVfcmVjdF9pc19uZWdhdGl2ZV92YWx1ZSk7CkBAIC01MzcsMjUgKzUzNywyNSBAQCBFaW5hX0Jv
b2wgZXdrX2ZyYW1lX3RleHRfbWF0Y2hlc19udGhfcG9zX2dldChjb25zdCBFdmFzX09iamVjdCog
ZXdrRnJhbWUsIHNpemVfdAogCiBFaW5hX0Jvb2wgZXdrX2ZyYW1lX3N0b3AoRXZhc19PYmplY3Qq
IGV3a0ZyYW1lKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBz
ZCwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5m
cmFtZSwgRUlOQV9GQUxTRSk7Ci0gICAgc2QtPmZyYW1lLT5sb2FkZXIoKS0+c3RvcEFsbExvYWRl
cnMoKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRh
LCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnRE
YXRhLT5mcmFtZSwgRUlOQV9GQUxTRSk7CisgICAgc21hcnREYXRhLT5mcmFtZS0+bG9hZGVyKCkt
PnN0b3BBbGxMb2FkZXJzKCk7CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAogRWluYV9Cb29s
IGV3a19mcmFtZV9yZWxvYWQoRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewotICAgIEVXS19GUkFN
RV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7Ci0gICAgc2Qt
PmZyYW1lLT5sb2FkZXIoKS0+cmVsb2FkKCk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRV
Uk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUsIEVJTkFfRkFMU0UpOworICAgIHNtYXJ0
RGF0YS0+ZnJhbWUtPmxvYWRlcigpLT5yZWxvYWQoKTsKICAgICByZXR1cm4gRUlOQV9UUlVFOwog
fQogCiBFaW5hX0Jvb2wgZXdrX2ZyYW1lX3JlbG9hZF9mdWxsKEV2YXNfT2JqZWN0KiBld2tGcmFt
ZSkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFf
RkFMU0UpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJ
TkFfRkFMU0UpOwotICAgIHNkLT5mcmFtZS0+bG9hZGVyKCktPnJlbG9hZCh0cnVlKTsKKyAgICBF
V0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRhLCBFSU5BX0ZBTFNF
KTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5mcmFtZSwg
RUlOQV9GQUxTRSk7CisgICAgc21hcnREYXRhLT5mcmFtZS0+bG9hZGVyKCktPnJlbG9hZCh0cnVl
KTsKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCkBAIC01NzEsOSArNTcxLDkgQEAgRWluYV9C
b29sIGV3a19mcmFtZV9mb3J3YXJkKEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIAogRWluYV9Cb29s
IGV3a19mcmFtZV9uYXZpZ2F0ZShFdmFzX09iamVjdCogZXdrRnJhbWUsIGludCBzdGVwcykKIHsK
LSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0Up
OwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFM
U0UpOwotICAgIFdlYkNvcmU6OlBhZ2UqIHBhZ2UgPSBzZC0+ZnJhbWUtPnBhZ2UoKTsKKyAgICBF
V0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRhLCBFSU5BX0ZBTFNF
KTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5mcmFtZSwg
RUlOQV9GQUxTRSk7CisgICAgV2ViQ29yZTo6UGFnZSogcGFnZSA9IHNtYXJ0RGF0YS0+ZnJhbWUt
PnBhZ2UoKTsKICAgICBpZiAoIXBhZ2UtPmNhbkdvQmFja09yRm9yd2FyZChzdGVwcykpCiAgICAg
ICAgIHJldHVybiBFSU5BX0ZBTFNFOwogICAgIHBhZ2UtPmdvQmFja09yRm9yd2FyZChzdGVwcyk7
CkBAIC01OTIsMzkgKzU5MiwzOSBAQCBFaW5hX0Jvb2wgZXdrX2ZyYW1lX2ZvcndhcmRfcG9zc2li
bGUoRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogCiBFaW5hX0Jvb2wgZXdrX2ZyYW1lX25hdmlnYXRl
X3Bvc3NpYmxlKEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgaW50IHN0ZXBzKQogewotICAgIEVXS19G
UkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7Ci0gICAg
V2ViQ29yZTo6UGFnZSogcGFnZSA9IHNkLT5mcmFtZS0+cGFnZSgpOworICAgIEVXS19GUkFNRV9T
RF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmZyYW1lLCBFSU5BX0ZBTFNF
KTsKKyAgICBXZWJDb3JlOjpQYWdlKiBwYWdlID0gc21hcnREYXRhLT5mcmFtZS0+cGFnZSgpOwog
ICAgIHJldHVybiBwYWdlLT5jYW5Hb0JhY2tPckZvcndhcmQoc3RlcHMpOwogfQogCiBmbG9hdCBl
d2tfZnJhbWVfcGFnZV96b29tX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrRnJhbWUpCiB7Ci0g
ICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCAtMS4wKTsKLSAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCAtMS4wKTsKLSAgICByZXR1
cm4gc2QtPmZyYW1lLT5wYWdlWm9vbUZhY3RvcigpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1Jf
UkVUVVJOKGV3a0ZyYW1lLCBzbWFydERhdGEsIC0xLjApOworICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmZyYW1lLCAtMS4wKTsKKyAgICByZXR1cm4gc21hcnRE
YXRhLT5mcmFtZS0+cGFnZVpvb21GYWN0b3IoKTsKIH0KIAogRWluYV9Cb29sIGV3a19mcmFtZV9w
YWdlX3pvb21fc2V0KEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgZmxvYXQgcGFnZVpvb21GYWN0b3Ip
CiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZB
TFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5B
X0ZBTFNFKTsKLSAgICBzZC0+ZnJhbWUtPnNldFBhZ2Vab29tRmFjdG9yKHBhZ2Vab29tRmFjdG9y
KTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRhLCBF
SU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRh
LT5mcmFtZSwgRUlOQV9GQUxTRSk7CisgICAgc21hcnREYXRhLT5mcmFtZS0+c2V0UGFnZVpvb21G
YWN0b3IocGFnZVpvb21GYWN0b3IpOwogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKIGZsb2F0
IGV3a19mcmFtZV90ZXh0X3pvb21fZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsK
LSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIC0xLjApOwotICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIC0xLjApOwotICAgIHJl
dHVybiBzZC0+ZnJhbWUtPnRleHRab29tRmFjdG9yKCk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9P
Ul9SRVRVUk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSwgLTEuMCk7CisgICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUsIC0xLjApOworICAgIHJldHVybiBzbWFy
dERhdGEtPmZyYW1lLT50ZXh0Wm9vbUZhY3RvcigpOwogfQogCiBFaW5hX0Jvb2wgZXdrX2ZyYW1l
X3RleHRfem9vbV9zZXQoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBmbG9hdCB0ZXh0Wm9vbUZhY3Rv
cikKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFf
RkFMU0UpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJ
TkFfRkFMU0UpOwotICAgIHNkLT5mcmFtZS0+c2V0VGV4dFpvb21GYWN0b3IodGV4dFpvb21GYWN0
b3IpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzbWFydERhdGEs
IEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERh
dGEtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKKyAgICBzbWFydERhdGEtPmZyYW1lLT5zZXRUZXh0Wm9v
bUZhY3Rvcih0ZXh0Wm9vbUZhY3Rvcik7CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIApAQCAt
NjQzLDE0ICs2NDMsMTQgQEAgdm9pZCBld2tfZnJhbWVfaGl0X3Rlc3RfZnJlZShFd2tfSGl0X1Rl
c3QqIGhpdFRlc3QpCiAKIEV3a19IaXRfVGVzdCogZXdrX2ZyYW1lX2hpdF90ZXN0X25ldyhjb25z
dCBFdmFzX09iamVjdCogZXdrRnJhbWUsIGludCB4LCBpbnQgeSkKIHsKLSAgICBFV0tfRlJBTUVf
U0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIDApOwotICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIDApOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVU
VVJOKGV3a0ZyYW1lLCBzbWFydERhdGEsIDApOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOX1ZBTChzbWFydERhdGEtPmZyYW1lLCAwKTsKIAotICAgIFdlYkNvcmU6OkZyYW1lVmlldyog
dmlldyA9IHNkLT5mcmFtZS0+dmlldygpOworICAgIFdlYkNvcmU6OkZyYW1lVmlldyogdmlldyA9
IHNtYXJ0RGF0YS0+ZnJhbWUtPnZpZXcoKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
Tl9WQUwodmlldywgMCk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5m
cmFtZS0+Y29udGVudFJlbmRlcmVyKCksIDApOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOX1ZBTChzbWFydERhdGEtPmZyYW1lLT5jb250ZW50UmVuZGVyZXIoKSwgMCk7CiAKLSAgICBX
ZWJDb3JlOjpIaXRUZXN0UmVzdWx0IHJlc3VsdCA9IHNkLT5mcmFtZS0+ZXZlbnRIYW5kbGVyKCkt
PmhpdFRlc3RSZXN1bHRBdFBvaW50CisgICAgV2ViQ29yZTo6SGl0VGVzdFJlc3VsdCByZXN1bHQg
PSBzbWFydERhdGEtPmZyYW1lLT5ldmVudEhhbmRsZXIoKS0+aGl0VGVzdFJlc3VsdEF0UG9pbnQK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmlldy0+d2luZG93VG9D
b250ZW50cyhXZWJDb3JlOjpJbnRQb2ludCh4LCB5KSksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLyphbGxvd1NoYWRvd0NvbnRlbnQqLyBmYWxzZSwgLyppZ25vcmVD
bGlwcGluZyovIHRydWUpOwogCkBAIC02NTksNDEgKzY1OSw0MSBAQCBFd2tfSGl0X1Rlc3QqIGV3
a19mcmFtZV9oaXRfdGVzdF9uZXcoY29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBpbnQgeCwg
aW50IHkpCiAgICAgaWYgKCFyZXN1bHQuaW5uZXJOb2RlKCkpCiAgICAgICAgIHJldHVybiAwOwog
Ci0gICAgRXdrX0hpdF9UZXN0KiBoaXRfdGVzdCA9IHN0YXRpY19jYXN0PEV3a19IaXRfVGVzdCo+
KGNhbGxvYygxLCBzaXplb2YoRXdrX0hpdF9UZXN0KSkpOwotICAgIGlmICghaGl0X3Rlc3QpIHsK
KyAgICBFd2tfSGl0X1Rlc3QqIGhpdFRlc3QgPSBzdGF0aWNfY2FzdDxFd2tfSGl0X1Rlc3QqPihj
YWxsb2MoMSwgc2l6ZW9mKEV3a19IaXRfVGVzdCkpKTsKKyAgICBpZiAoIWhpdFRlc3QpIHsKICAg
ICAgICAgQ1JJVElDQUwoIkNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGhpdCB0ZXN0LiIp
OwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBoaXRfdGVzdC0+eCA9IHJlc3VsdC5w
b2ludCgpLngoKTsKLSAgICBoaXRfdGVzdC0+eSA9IHJlc3VsdC5wb2ludCgpLnkoKTsKKyAgICBo
aXRUZXN0LT54ID0gcmVzdWx0LnBvaW50KCkueCgpOworICAgIGhpdFRlc3QtPnkgPSByZXN1bHQu
cG9pbnQoKS55KCk7CiAjaWYgMAogICAgIC8vIEZJWE1FCi0gICAgaGl0X3Rlc3QtPmJvdW5kaW5n
X2JveC54ID0gcmVzdWx0LmJvdW5kaW5nQm94KCkueCgpOwotICAgIGhpdF90ZXN0LT5ib3VuZGlu
Z19ib3gueSA9IHJlc3VsdC5ib3VuZGluZ0JveCgpLnkoKTsKLSAgICBoaXRfdGVzdC0+Ym91bmRp
bmdfYm94LncgPSByZXN1bHQuYm91bmRpbmdCb3goKS53aWR0aCgpOwotICAgIGhpdF90ZXN0LT5i
b3VuZGluZ19ib3guaCA9IHJlc3VsdC5ib3VuZGluZ0JveCgpLmhlaWdodCgpOworICAgIGhpdFRl
c3QtPmJvdW5kaW5nX2JveC54ID0gcmVzdWx0LmJvdW5kaW5nQm94KCkueCgpOworICAgIGhpdFRl
c3QtPmJvdW5kaW5nX2JveC55ID0gcmVzdWx0LmJvdW5kaW5nQm94KCkueSgpOworICAgIGhpdFRl
c3QtPmJvdW5kaW5nX2JveC53aWR0aCA9IHJlc3VsdC5ib3VuZGluZ0JveCgpLndpZHRoKCk7Cisg
ICAgaGl0VGVzdC0+Ym91bmRpbmdfYm94LmhlaWdodCA9IHJlc3VsdC5ib3VuZGluZ0JveCgpLmhl
aWdodCgpOwogI2Vsc2UKLSAgICBoaXRfdGVzdC0+Ym91bmRpbmdfYm94LnggPSAwOwotICAgIGhp
dF90ZXN0LT5ib3VuZGluZ19ib3gueSA9IDA7Ci0gICAgaGl0X3Rlc3QtPmJvdW5kaW5nX2JveC53
ID0gMDsKLSAgICBoaXRfdGVzdC0+Ym91bmRpbmdfYm94LmggPSAwOworICAgIGhpdFRlc3QtPmJv
dW5kaW5nX2JveC54ID0gMDsKKyAgICBoaXRUZXN0LT5ib3VuZGluZ19ib3gueSA9IDA7CisgICAg
aGl0VGVzdC0+Ym91bmRpbmdfYm94LncgPSAwOworICAgIGhpdFRlc3QtPmJvdW5kaW5nX2JveC5o
ID0gMDsKICNlbmRpZgogCi0gICAgV2ViQ29yZTo6VGV4dERpcmVjdGlvbiBkaXI7Ci0gICAgaGl0
X3Rlc3QtPnRpdGxlID0gZWluYV9zdHJpbmdzaGFyZV9hZGQocmVzdWx0LnRpdGxlKGRpcikudXRm
OCgpLmRhdGEoKSk7Ci0gICAgaGl0X3Rlc3QtPmFsdGVybmF0ZV90ZXh0ID0gZWluYV9zdHJpbmdz
aGFyZV9hZGQocmVzdWx0LmFsdERpc3BsYXlTdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBX
ZWJDb3JlOjpUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbjsKKyAgICBoaXRUZXN0LT50aXRsZSA9IGVp
bmFfc3RyaW5nc2hhcmVfYWRkKHJlc3VsdC50aXRsZShkaXJlY3Rpb24pLnV0ZjgoKS5kYXRhKCkp
OworICAgIGhpdFRlc3QtPmFsdGVybmF0ZV90ZXh0ID0gZWluYV9zdHJpbmdzaGFyZV9hZGQocmVz
dWx0LmFsdERpc3BsYXlTdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKICAgICBpZiAocmVzdWx0Lmlu
bmVyTm9uU2hhcmVkTm9kZSgpICYmIHJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKS0+ZG9jdW1l
bnQoKQogICAgICAgICAmJiByZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCktPmRvY3VtZW50KCkt
PmZyYW1lKCkpCi0gICAgICAgIGhpdF90ZXN0LT5mcmFtZSA9IEVXS1ByaXZhdGU6OmtpdEZyYW1l
KHJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSk7CisgICAg
ICAgIGhpdFRlc3QtPmZyYW1lID0gRVdLUHJpdmF0ZTo6a2l0RnJhbWUocmVzdWx0LmlubmVyTm9u
U2hhcmVkTm9kZSgpLT5kb2N1bWVudCgpLT5mcmFtZSgpKTsKIAotICAgIGhpdF90ZXN0LT5saW5r
LnRleHQgPSBlaW5hX3N0cmluZ3NoYXJlX2FkZChyZXN1bHQudGV4dENvbnRlbnQoKS51dGY4KCku
ZGF0YSgpKTsKLSAgICBoaXRfdGVzdC0+bGluay51cmwgPSBlaW5hX3N0cmluZ3NoYXJlX2FkZChy
ZXN1bHQuYWJzb2x1dGVMaW5rVVJMKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgaGl0
X3Rlc3QtPmxpbmsudGl0bGUgPSBlaW5hX3N0cmluZ3NoYXJlX2FkZChyZXN1bHQudGl0bGVEaXNw
bGF5U3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgaGl0X3Rlc3QtPmxpbmsudGFyZ2V0X2Zy
YW1lID0gRVdLUHJpdmF0ZTo6a2l0RnJhbWUocmVzdWx0LnRhcmdldEZyYW1lKCkpOworICAgIGhp
dFRlc3QtPmxpbmsudGV4dCA9IGVpbmFfc3RyaW5nc2hhcmVfYWRkKHJlc3VsdC50ZXh0Q29udGVu
dCgpLnV0ZjgoKS5kYXRhKCkpOworICAgIGhpdFRlc3QtPmxpbmsudXJsID0gZWluYV9zdHJpbmdz
aGFyZV9hZGQocmVzdWx0LmFic29sdXRlTGlua1VSTCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkp
OworICAgIGhpdFRlc3QtPmxpbmsudGl0bGUgPSBlaW5hX3N0cmluZ3NoYXJlX2FkZChyZXN1bHQu
dGl0bGVEaXNwbGF5U3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgaGl0VGVzdC0+bGluay50
YXJnZXRfZnJhbWUgPSBFV0tQcml2YXRlOjpraXRGcmFtZShyZXN1bHQudGFyZ2V0RnJhbWUoKSk7
CiAKLSAgICBoaXRfdGVzdC0+aW1hZ2VfdXJpID0gZWluYV9zdHJpbmdzaGFyZV9hZGQocmVzdWx0
LmFic29sdXRlSW1hZ2VVUkwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLSAgICBoaXRfdGVz
dC0+bWVkaWFfdXJpID0gZWluYV9zdHJpbmdzaGFyZV9hZGQocmVzdWx0LmFic29sdXRlTWVkaWFV
UkwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBoaXRUZXN0LT5pbWFnZV91cmkgPSBl
aW5hX3N0cmluZ3NoYXJlX2FkZChyZXN1bHQuYWJzb2x1dGVJbWFnZVVSTCgpLnN0cmluZygpLnV0
ZjgoKS5kYXRhKCkpOworICAgIGhpdFRlc3QtPm1lZGlhX3VyaSA9IGVpbmFfc3RyaW5nc2hhcmVf
YWRkKHJlc3VsdC5hYnNvbHV0ZU1lZGlhVVJMKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiAK
ICAgICBpbnQgY29udGV4dCA9IEVXS19ISVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9ET0NVTUVOVDsK
IApAQCAtNzA4LDI4ICs3MDgsMjggQEAgRXdrX0hpdF9UZXN0KiBld2tfZnJhbWVfaGl0X3Rlc3Rf
bmV3KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgaW50IHgsIGludCB5KQogICAgIGlmIChy
ZXN1bHQuaXNDb250ZW50RWRpdGFibGUoKSkKICAgICAgICAgY29udGV4dCB8PSBFV0tfSElUX1RF
U1RfUkVTVUxUX0NPTlRFWFRfRURJVEFCTEU7CiAKLSAgICBoaXRfdGVzdC0+Y29udGV4dCA9IHN0
YXRpY19jYXN0PEV3a19IaXRfVGVzdF9SZXN1bHRfQ29udGV4dD4oY29udGV4dCk7CisgICAgaGl0
VGVzdC0+Y29udGV4dCA9IHN0YXRpY19jYXN0PEV3a19IaXRfVGVzdF9SZXN1bHRfQ29udGV4dD4o
Y29udGV4dCk7CiAKLSAgICByZXR1cm4gaGl0X3Rlc3Q7CisgICAgcmV0dXJuIGhpdFRlc3Q7CiB9
CiAKIEVpbmFfQm9vbAogZXdrX2ZyYW1lX3Njcm9sbF9hZGQoRXZhc19PYmplY3QqIGV3a0ZyYW1l
LCBpbnQgZGVsdGFYLCBpbnQgZGVsdGFZKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVU
VVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk5fVkFMKHNkLT5mcmFtZS0+dmlldygpLCBFSU5BX0ZBTFNFKTsKLSAgICBzZC0+ZnJh
bWUtPnZpZXcoKS0+c2Nyb2xsQnkoV2ViQ29yZTo6SW50U2l6ZShkZWx0YVgsIGRlbHRhWSkpOwor
ICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzbWFydERhdGEsIEVJTkFf
RkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmZy
YW1lLCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21h
cnREYXRhLT5mcmFtZS0+dmlldygpLCBFSU5BX0ZBTFNFKTsKKyAgICBzbWFydERhdGEtPmZyYW1l
LT52aWV3KCktPnNjcm9sbEJ5KFdlYkNvcmU6OkludFNpemUoZGVsdGFYLCBkZWx0YVkpKTsKICAg
ICByZXR1cm4gRUlOQV9UUlVFOwogfQogCiBFaW5hX0Jvb2wKIGV3a19mcmFtZV9zY3JvbGxfc2V0
KEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgaW50IHgsIGludCB5KQogewotICAgIEVXS19GUkFNRV9T
RF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZF
VFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZS0+dmlldygpLCBFSU5BX0ZBTFNFKTsK
LSAgICBzZC0+ZnJhbWUtPnZpZXcoKS0+c2V0U2Nyb2xsUG9zaXRpb24oV2ViQ29yZTo6SW50UG9p
bnQoeCwgeSkpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzbWFy
dERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChz
bWFydERhdGEtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTl9WQUwoc21hcnREYXRhLT5mcmFtZS0+dmlldygpLCBFSU5BX0ZBTFNFKTsKKyAgICBzbWFy
dERhdGEtPmZyYW1lLT52aWV3KCktPnNldFNjcm9sbFBvc2l0aW9uKFdlYkNvcmU6OkludFBvaW50
KHgsIHkpKTsKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCkBAIC03NDAsMTAgKzc0MCwxMCBA
QCBld2tfZnJhbWVfc2Nyb2xsX3NpemVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSwg
aW50KiB3aWR0aCwgaW50KiBoZWlnaHQpCiAgICAgICAgICp3aWR0aCA9IDA7CiAgICAgaWYgKGhl
aWdodCkKICAgICAgICAgKmhlaWdodCA9IDA7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRV
Uk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTl9WQUwoc2QtPmZyYW1lLT52aWV3KCksIEVJTkFfRkFMU0UpOwotICAgIFdlYkNvcmU6
OkludFBvaW50IHBvaW50ID0gc2QtPmZyYW1lLT52aWV3KCktPm1heGltdW1TY3JvbGxQb3NpdGlv
bigpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzbWFydERhdGEs
IEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERh
dGEtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9W
QUwoc21hcnREYXRhLT5mcmFtZS0+dmlldygpLCBFSU5BX0ZBTFNFKTsKKyAgICBXZWJDb3JlOjpJ
bnRQb2ludCBwb2ludCA9IHNtYXJ0RGF0YS0+ZnJhbWUtPnZpZXcoKS0+bWF4aW11bVNjcm9sbFBv
c2l0aW9uKCk7CiAgICAgaWYgKHdpZHRoKQogICAgICAgICAqd2lkdGggPSBwb2ludC54KCk7CiAg
ICAgaWYgKGhlaWdodCkKQEAgLTc1OCwxMCArNzU4LDEwIEBAIGV3a19mcmFtZV9zY3JvbGxfcG9z
X2dldChjb25zdCBFdmFzX09iamVjdCogZXdrRnJhbWUsIGludCogeCwgaW50KiB5KQogICAgICAg
ICAqeCA9IDA7CiAgICAgaWYgKHkpCiAgICAgICAgICp5ID0gMDsKLSAgICBFV0tfRlJBTUVfU0Rf
R0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOwotICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUtPnZpZXcoKSwgRUlOQV9GQUxTRSk7Ci0g
ICAgV2ViQ29yZTo6SW50UG9pbnQgcG9zID0gc2QtPmZyYW1lLT52aWV3KCktPnNjcm9sbFBvc2l0
aW9uKCk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNtYXJ0RGF0
YSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0
RGF0YS0+ZnJhbWUsIEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJO
X1ZBTChzbWFydERhdGEtPmZyYW1lLT52aWV3KCksIEVJTkFfRkFMU0UpOworICAgIFdlYkNvcmU6
OkludFBvaW50IHBvcyA9IHNtYXJ0RGF0YS0+ZnJhbWUtPnZpZXcoKS0+c2Nyb2xsUG9zaXRpb24o
KTsKICAgICBpZiAoeCkKICAgICAgICAgKnggPSBwb3MueCgpOwogICAgIGlmICh5KQpAQCAtNzc5
LDEwICs3NzksMTAgQEAgRWluYV9Cb29sIGV3a19mcmFtZV92aXNpYmxlX2NvbnRlbnRfZ2VvbWV0
cnlfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgRWkKICAgICAgICAgKndpZHRoID0g
MDsKICAgICBpZiAoaGVpZ2h0KQogICAgICAgICAqaGVpZ2h0ID0gMDsKLSAgICBFV0tfRlJBTUVf
U0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOwotICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUtPnZpZXcoKSwgRUlOQV9GQUxTRSk7
Ci0gICAgV2ViQ29yZTo6SW50UmVjdCByZWN0ID0gc2QtPmZyYW1lLT52aWV3KCktPnZpc2libGVD
b250ZW50UmVjdChpbmNsdWRlU2Nyb2xsYmFycyk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9S
RVRVUk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUsIEVJTkFfRkFMU0UpOworICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmZyYW1lLT52aWV3KCksIEVJ
TkFfRkFMU0UpOworICAgIFdlYkNvcmU6OkludFJlY3QgcmVjdCA9IHNtYXJ0RGF0YS0+ZnJhbWUt
PnZpZXcoKS0+dmlzaWJsZUNvbnRlbnRSZWN0KGluY2x1ZGVTY3JvbGxiYXJzKTsKICAgICBpZiAo
eCkKICAgICAgICAgKnggPSByZWN0LngoKTsKICAgICBpZiAoeSkKQEAgLTc5NiwyNiArNzk2LDI2
IEBAIEVpbmFfQm9vbCBld2tfZnJhbWVfdmlzaWJsZV9jb250ZW50X2dlb21ldHJ5X2dldChjb25z
dCBFdmFzX09iamVjdCogZXdrRnJhbWUsIEVpCiAKIEVpbmFfQm9vbCBld2tfZnJhbWVfcGFpbnRf
ZnVsbF9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewotICAgIEVXS19GUkFNRV9T
RF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZF
VFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZS0+dmlldygpLCBFSU5BX0ZBTFNFKTsK
LSAgICByZXR1cm4gc2QtPmZyYW1lLT52aWV3KCktPnBhaW50c0VudGlyZUNvbnRlbnRzKCk7Cisg
ICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSwgRUlOQV9G
QUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJh
bWUsIEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFy
dERhdGEtPmZyYW1lLT52aWV3KCksIEVJTkFfRkFMU0UpOworICAgIHJldHVybiBzbWFydERhdGEt
PmZyYW1lLT52aWV3KCktPnBhaW50c0VudGlyZUNvbnRlbnRzKCk7CiB9CiAKIHZvaWQgZXdrX2Zy
YW1lX3BhaW50X2Z1bGxfc2V0KEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgRWluYV9Cb29sIGZsYWcp
CiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkKTsKLSAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+ZnJhbWUpOwotICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOKHNkLT5mcmFtZS0+dmlldygpKTsKLSAgICBzZC0+ZnJhbWUtPnZpZXcoKS0+
c2V0UGFpbnRzRW50aXJlQ29udGVudHMoZmxhZyk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9S
RVRVUk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk4oc21hcnREYXRhLT5mcmFtZSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21h
cnREYXRhLT5mcmFtZS0+dmlldygpKTsKKyAgICBzbWFydERhdGEtPmZyYW1lLT52aWV3KCktPnNl
dFBhaW50c0VudGlyZUNvbnRlbnRzKGZsYWcpOwogfQogCiBFaW5hX0Jvb2wgZXdrX2ZyYW1lX2Zl
ZWRfZm9jdXNfaW4oRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewotICAgIEVXS19GUkFNRV9TRF9H
RVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7Ci0gICAgV2ViQ29yZTo6
Rm9jdXNDb250cm9sbGVyKiBjID0gc2QtPmZyYW1lLT5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigp
OwotICAgIGMtPnNldEZvY3VzZWRGcmFtZShzZC0+ZnJhbWUpOworICAgIEVXS19GUkFNRV9TRF9H
RVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmZyYW1lLCBFSU5BX0ZBTFNFKTsK
KyAgICBXZWJDb3JlOjpGb2N1c0NvbnRyb2xsZXIqIGMgPSBzbWFydERhdGEtPmZyYW1lLT5wYWdl
KCktPmZvY3VzQ29udHJvbGxlcigpOworICAgIGMtPnNldEZvY3VzZWRGcmFtZShzbWFydERhdGEt
PmZyYW1lKTsKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCkBAIC04MjgsODcgKzgyOCw4NyBA
QCBFaW5hX0Jvb2wgZXdrX2ZyYW1lX2ZlZWRfZm9jdXNfb3V0KEV2YXNfT2JqZWN0KiBld2tGcmFt
ZSkKIAogRWluYV9Cb29sIGV3a19mcmFtZV9mZWVkX21vdXNlX3doZWVsKEV2YXNfT2JqZWN0KiBl
d2tGcmFtZSwgY29uc3QgRXZhc19FdmVudF9Nb3VzZV9XaGVlbCogd2hlZWxFdmVudCkKIHsKLSAg
ICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOwot
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0Up
OworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzbWFydERhdGEsIEVJ
TkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEt
PmZyYW1lLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwo
d2hlZWxFdmVudCwgRUlOQV9GQUxTRSk7CiAKLSAgICBXZWJDb3JlOjpGcmFtZVZpZXcqIHZpZXcg
PSBzZC0+ZnJhbWUtPnZpZXcoKTsKKyAgICBXZWJDb3JlOjpGcmFtZVZpZXcqIHZpZXcgPSBzbWFy
dERhdGEtPmZyYW1lLT52aWV3KCk7CiAgICAgREJHKCJld2tGcmFtZT0lcCwgdmlldz0lcCwgZGly
ZWN0aW9uPSVkLCB6PSVkLCBwb3M9JWQsJWQiLAogICAgICAgICBld2tGcmFtZSwgdmlldywgd2hl
ZWxFdmVudC0+ZGlyZWN0aW9uLCB3aGVlbEV2ZW50LT56LCB3aGVlbEV2ZW50LT5jYW52YXMueCwg
d2hlZWxFdmVudC0+Y2FudmFzLnkpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZB
TCh2aWV3LCBFSU5BX0ZBTFNFKTsKIAogICAgIFdlYkNvcmU6OlBsYXRmb3JtV2hlZWxFdmVudCBl
dmVudCh3aGVlbEV2ZW50KTsKLSAgICByZXR1cm4gc2QtPmZyYW1lLT5ldmVudEhhbmRsZXIoKS0+
aGFuZGxlV2hlZWxFdmVudChldmVudCk7CisgICAgcmV0dXJuIHNtYXJ0RGF0YS0+ZnJhbWUtPmV2
ZW50SGFuZGxlcigpLT5oYW5kbGVXaGVlbEV2ZW50KGV2ZW50KTsKIH0KIAogRWluYV9Cb29sIGV3
a19mcmFtZV9mZWVkX21vdXNlX2Rvd24oRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBjb25zdCBFdmFz
X0V2ZW50X01vdXNlX0Rvd24qIGRvd25FdmVudCkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09S
X1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOworICAgIEVXS19GUkFNRV9TRF9H
RVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmZyYW1lLCBFSU5BX0ZBTFNFKTsK
ICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZG93bkV2ZW50LCBFSU5BX0ZBTFNF
KTsKIAotICAgIFdlYkNvcmU6OkZyYW1lVmlldyogdmlldyA9IHNkLT5mcmFtZS0+dmlldygpOwor
ICAgIFdlYkNvcmU6OkZyYW1lVmlldyogdmlldyA9IHNtYXJ0RGF0YS0+ZnJhbWUtPnZpZXcoKTsK
ICAgICBEQkcoImV3a0ZyYW1lPSVwLCB2aWV3PSVwLCBidXR0b249JWQsIHBvcz0lZCwlZCIsCiAg
ICAgICAgIGV3a0ZyYW1lLCB2aWV3LCBkb3duRXZlbnQtPmJ1dHRvbiwgZG93bkV2ZW50LT5jYW52
YXMueCwgZG93bkV2ZW50LT5jYW52YXMueSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk5fVkFMKHZpZXcsIEVJTkFfRkFMU0UpOwogCiAgICAgRXZhc19Db29yZCB4LCB5OwotICAgIGV2
YXNfb2JqZWN0X2dlb21ldHJ5X2dldChzZC0+dmlldywgJngsICZ5LCAwLCAwKTsKKyAgICBldmFz
X29iamVjdF9nZW9tZXRyeV9nZXQoc21hcnREYXRhLT52aWV3LCAmeCwgJnksIDAsIDApOwogCiAg
ICAgV2ViQ29yZTo6UGxhdGZvcm1Nb3VzZUV2ZW50IGV2ZW50KGRvd25FdmVudCwgV2ViQ29yZTo6
SW50UG9pbnQoeCwgeSkpOwotICAgIHJldHVybiBzZC0+ZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5o
YW5kbGVNb3VzZVByZXNzRXZlbnQoZXZlbnQpOworICAgIHJldHVybiBzbWFydERhdGEtPmZyYW1l
LT5ldmVudEhhbmRsZXIoKS0+aGFuZGxlTW91c2VQcmVzc0V2ZW50KGV2ZW50KTsKIH0KIAogRWlu
YV9Cb29sIGV3a19mcmFtZV9mZWVkX21vdXNlX3VwKEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgY29u
c3QgRXZhc19FdmVudF9Nb3VzZV9VcCogdXBFdmVudCkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VU
X09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOworICAgIEVXS19GUkFNRV9T
RF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmZyYW1lLCBFSU5BX0ZBTFNF
KTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodXBFdmVudCwgRUlOQV9GQUxT
RSk7CiAKLSAgICBXZWJDb3JlOjpGcmFtZVZpZXcqIHZpZXcgPSBzZC0+ZnJhbWUtPnZpZXcoKTsK
KyAgICBXZWJDb3JlOjpGcmFtZVZpZXcqIHZpZXcgPSBzbWFydERhdGEtPmZyYW1lLT52aWV3KCk7
CiAgICAgREJHKCJld2tGcmFtZT0lcCwgdmlldz0lcCwgYnV0dG9uPSVkLCBwb3M9JWQsJWQiLAog
ICAgICAgICBld2tGcmFtZSwgdmlldywgdXBFdmVudC0+YnV0dG9uLCB1cEV2ZW50LT5jYW52YXMu
eCwgdXBFdmVudC0+Y2FudmFzLnkpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZB
TCh2aWV3LCBFSU5BX0ZBTFNFKTsKIAogICAgIEV2YXNfQ29vcmQgeCwgeTsKLSAgICBldmFzX29i
amVjdF9nZW9tZXRyeV9nZXQoc2QtPnZpZXcsICZ4LCAmeSwgMCwgMCk7CisgICAgZXZhc19vYmpl
Y3RfZ2VvbWV0cnlfZ2V0KHNtYXJ0RGF0YS0+dmlldywgJngsICZ5LCAwLCAwKTsKIAogICAgIFdl
YkNvcmU6OlBsYXRmb3JtTW91c2VFdmVudCBldmVudCh1cEV2ZW50LCBXZWJDb3JlOjpJbnRQb2lu
dCh4LCB5KSk7Ci0gICAgcmV0dXJuIHNkLT5mcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmhhbmRsZU1v
dXNlUmVsZWFzZUV2ZW50KGV2ZW50KTsKKyAgICByZXR1cm4gc21hcnREYXRhLT5mcmFtZS0+ZXZl
bnRIYW5kbGVyKCktPmhhbmRsZU1vdXNlUmVsZWFzZUV2ZW50KGV2ZW50KTsKIH0KIAogRWluYV9C
b29sIGV3a19mcmFtZV9mZWVkX21vdXNlX21vdmUoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBjb25z
dCBFdmFzX0V2ZW50X01vdXNlX01vdmUqIG1vdmVFdmVudCkKIHsKLSAgICBFV0tfRlJBTUVfU0Rf
R0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOworICAgIEVXS19GUkFN
RV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmZyYW1lLCBFSU5BX0ZB
TFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwobW92ZUV2ZW50LCBFSU5B
X0ZBTFNFKTsKIAotICAgIFdlYkNvcmU6OkZyYW1lVmlldyogdmlldyA9IHNkLT5mcmFtZS0+dmll
dygpOworICAgIFdlYkNvcmU6OkZyYW1lVmlldyogdmlldyA9IHNtYXJ0RGF0YS0+ZnJhbWUtPnZp
ZXcoKTsKICAgICBEQkcoImV3a0ZyYW1lPSVwLCB2aWV3PSVwLCBwb3M6IG9sZD0lZCwlZCwgbmV3
PSVkLCVkLCBidXR0b25zPSVkIiwKICAgICAgICAgZXdrRnJhbWUsIHZpZXcsIG1vdmVFdmVudC0+
Y3VyLmNhbnZhcy54LCBtb3ZlRXZlbnQtPmN1ci5jYW52YXMueSwKICAgICAgICAgbW92ZUV2ZW50
LT5wcmV2LmNhbnZhcy54LCBtb3ZlRXZlbnQtPnByZXYuY2FudmFzLnksIG1vdmVFdmVudC0+YnV0
dG9ucyk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHZpZXcsIEVJTkFfRkFM
U0UpOwogCiAgICAgRXZhc19Db29yZCB4LCB5OwotICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dl
dChzZC0+dmlldywgJngsICZ5LCAwLCAwKTsKKyAgICBldmFzX29iamVjdF9nZW9tZXRyeV9nZXQo
c21hcnREYXRhLT52aWV3LCAmeCwgJnksIDAsIDApOwogCiAgICAgV2ViQ29yZTo6UGxhdGZvcm1N
b3VzZUV2ZW50IGV2ZW50KG1vdmVFdmVudCwgV2ViQ29yZTo6SW50UG9pbnQoeCwgeSkpOwotICAg
IHJldHVybiBzZC0+ZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5tb3VzZU1vdmVkKGV2ZW50KTsKKyAg
ICByZXR1cm4gc21hcnREYXRhLT5mcmFtZS0+ZXZlbnRIYW5kbGVyKCktPm1vdXNlTW92ZWQoZXZl
bnQpOwogfQogCiBFaW5hX0Jvb2wgZXdrX2ZyYW1lX2ZlZWRfdG91Y2hfZXZlbnQoRXZhc19PYmpl
Y3QqIGV3a0ZyYW1lLCBFd2tfVG91Y2hfRXZlbnRfVHlwZSBhY3Rpb24sIEVpbmFfTGlzdCogcG9p
bnRzLCBpbnQgbWV0YVN0YXRlKQogewotICAgIEVpbmFfQm9vbCByZXQgPSBFSU5BX0ZBTFNFOwor
ICAgIEVpbmFfQm9vbCByZXN1bHQgPSBFSU5BX0ZBTFNFOwogCiAjaWYgRU5BQkxFKFRPVUNIX0VW
RU5UUykKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwocG9pbnRzLCBFSU5BX0ZB
TFNFKTsKLSAgICBFV0tfRlJBTUVfU0RfR0VUKGV3a0ZyYW1lLCBzZCk7CisgICAgRVdLX0ZSQU1F
X1NEX0dFVChld2tGcmFtZSwgc21hcnREYXRhKTsKIAotICAgIGlmICghc2QgfHwgIXNkLT5mcmFt
ZSB8fCAhZXdrX3ZpZXdfbmVlZF90b3VjaF9ldmVudHNfZ2V0KHNkLT52aWV3KSkKKyAgICBpZiAo
IXNtYXJ0RGF0YSB8fCAhc21hcnREYXRhLT5mcmFtZSB8fCAhZXdrX3ZpZXdfbmVlZF90b3VjaF9l
dmVudHNfZ2V0KHNtYXJ0RGF0YS0+dmlldykpCiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwog
CiAgICAgRXZhc19Db29yZCB4LCB5OwotICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldChzZC0+
dmlldywgJngsICZ5LCAwLCAwKTsKKyAgICBldmFzX29iamVjdF9nZW9tZXRyeV9nZXQoc21hcnRE
YXRhLT52aWV3LCAmeCwgJnksIDAsIDApOwogCiAgICAgV2ViQ29yZTo6VG91Y2hFdmVudFR5cGUg
dHlwZSA9IFdlYkNvcmU6OlRvdWNoU3RhcnQ7CiAgICAgc3dpdGNoIChhY3Rpb24pIHsKQEAgLTky
OCwxMCArOTI4LDEwIEBAIEVpbmFfQm9vbCBld2tfZnJhbWVfZmVlZF90b3VjaF9ldmVudChFdmFz
X09iamVjdCogZXdrRnJhbWUsIEV3a19Ub3VjaF9FdmVudF9UeXBlCiAgICAgICAgIHJldHVybiBF
SU5BX0ZBTFNFOwogICAgIH0KIAotICAgIFdlYkNvcmU6OlBsYXRmb3JtVG91Y2hFdmVudCB0ZShw
b2ludHMsIFdlYkNvcmU6OkludFBvaW50KHgsIHkpLCB0eXBlLCBtZXRhU3RhdGUpOwotICAgIHJl
dCA9IHNkLT5mcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmhhbmRsZVRvdWNoRXZlbnQodGUpOworICAg
IFdlYkNvcmU6OlBsYXRmb3JtVG91Y2hFdmVudCB0b3VjaEV2ZW50KHBvaW50cywgV2ViQ29yZTo6
SW50UG9pbnQoeCwgeSksIHR5cGUsIG1ldGFTdGF0ZSk7CisgICAgcmVzdWx0ID0gc21hcnREYXRh
LT5mcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmhhbmRsZVRvdWNoRXZlbnQodG91Y2hFdmVudCk7CiAj
ZW5kaWYKLSAgICByZXR1cm4gcmV0OworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIHN0YXRpYyBp
bmxpbmUgRWluYV9Cb29sIF9ld2tfZnJhbWVfaGFuZGxlX2tleV9zY3JvbGxpbmcoV2ViQ29yZTo6
RnJhbWUqIGZyYW1lLCBjb25zdCBXZWJDb3JlOjpQbGF0Zm9ybUtleWJvYXJkRXZlbnQmIGtleUV2
ZW50KQpAQCAtMTAwMCwzOSArMTAwMCwzOSBAQCBzdGF0aWMgaW5saW5lIEVpbmFfQm9vbCBfZXdr
X2ZyYW1lX2hhbmRsZV9rZXlfc2Nyb2xsaW5nKFdlYkNvcmU6OkZyYW1lKiBmcmFtZSwgYwogCiBF
aW5hX0Jvb2wgZXdrX2ZyYW1lX2ZlZWRfa2V5X2Rvd24oRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBj
b25zdCBFdmFzX0V2ZW50X0tleV9Eb3duKiBkb3duRXZlbnQpCiB7Ci0gICAgRVdLX0ZSQU1FX1NE
X0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfRlJB
TUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5mcmFtZSwgRUlOQV9G
QUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGRvd25FdmVudCwgRUlO
QV9GQUxTRSk7CiAKICAgICBEQkcoImV3a0ZyYW1lPSVwIGtleW5hbWU9JXMgKGtleT0lcywgc3Ry
aW5nPSVzKSIsCiAgICAgICAgIGV3a0ZyYW1lLCBkb3duRXZlbnQtPmtleW5hbWUsIGRvd25FdmVu
dC0+a2V5ID8gZG93bkV2ZW50LT5rZXkgOiAiIiwgZG93bkV2ZW50LT5zdHJpbmcgPyBkb3duRXZl
bnQtPnN0cmluZyA6ICIiKTsKIAogICAgIFdlYkNvcmU6OlBsYXRmb3JtS2V5Ym9hcmRFdmVudCBl
dmVudChkb3duRXZlbnQpOwotICAgIGlmIChzZC0+ZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5rZXlF
dmVudChldmVudCkpCisgICAgaWYgKHNtYXJ0RGF0YS0+ZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5r
ZXlFdmVudChldmVudCkpCiAgICAgICAgIHJldHVybiBFSU5BX1RSVUU7CiAKLSAgICByZXR1cm4g
X2V3a19mcmFtZV9oYW5kbGVfa2V5X3Njcm9sbGluZyhzZC0+ZnJhbWUsIGV2ZW50KTsKKyAgICBy
ZXR1cm4gX2V3a19mcmFtZV9oYW5kbGVfa2V5X3Njcm9sbGluZyhzbWFydERhdGEtPmZyYW1lLCBl
dmVudCk7CiB9CiAKIEVpbmFfQm9vbCBld2tfZnJhbWVfZmVlZF9rZXlfdXAoRXZhc19PYmplY3Qq
IGV3a0ZyYW1lLCBjb25zdCBFdmFzX0V2ZW50X0tleV9VcCogdXBFdmVudCkKIHsKLSAgICBFV0tf
RlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOworICAg
IEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzbWFydERhdGEsIEVJTkFfRkFM
U0UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmZyYW1l
LCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodXBFdmVu
dCwgRUlOQV9GQUxTRSk7CiAKICAgICBEQkcoImV3a0ZyYW1lPSVwIGtleW5hbWU9JXMgKGtleT0l
cywgc3RyaW5nPSVzKSIsCiAgICAgICAgIGV3a0ZyYW1lLCB1cEV2ZW50LT5rZXluYW1lLCB1cEV2
ZW50LT5rZXkgPyB1cEV2ZW50LT5rZXkgOiAiIiwgdXBFdmVudC0+c3RyaW5nID8gdXBFdmVudC0+
c3RyaW5nIDogIiIpOwogCiAgICAgV2ViQ29yZTo6UGxhdGZvcm1LZXlib2FyZEV2ZW50IGV2ZW50
KHVwRXZlbnQpOwotICAgIHJldHVybiBzZC0+ZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5rZXlFdmVu
dChldmVudCk7CisgICAgcmV0dXJuIHNtYXJ0RGF0YS0+ZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5r
ZXlFdmVudChldmVudCk7CiB9CiAKIEV3a19UZXh0X1NlbGVjdGlvbl9UeXBlIGV3a19mcmFtZV90
ZXh0X3NlbGVjdGlvbl90eXBlX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrRnJhbWUpCiB7Ci0g
ICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFV0tfVEVYVF9TRUxF
Q1RJT05fTk9ORSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFt
ZSwgRVdLX1RFWFRfU0VMRUNUSU9OX05PTkUpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVU
VVJOKGV3a0ZyYW1lLCBzbWFydERhdGEsIEVXS19URVhUX1NFTEVDVElPTl9OT05FKTsKKyAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5mcmFtZSwgRVdLX1RFWFRf
U0VMRUNUSU9OX05PTkUpOwogCi0gICAgV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb24qIGNvbnRyb2xs
ZXIgPSBzZC0+ZnJhbWUtPnNlbGVjdGlvbigpOworICAgIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9u
KiBjb250cm9sbGVyID0gc21hcnREYXRhLT5mcmFtZS0+c2VsZWN0aW9uKCk7CiAgICAgaWYgKCFj
b250cm9sbGVyKQogICAgICAgICByZXR1cm4gRVdLX1RFWFRfU0VMRUNUSU9OX05PTkU7CiAKQEAg
LTEwNzUsMTggKzEwNzUsMTggQEAgRXZhc19PYmplY3QqIGV3a19mcmFtZV9hZGQoRXZhcyogY2Fu
dmFzKQogICovCiBFaW5hX0Jvb2wgZXdrX2ZyYW1lX2luaXQoRXZhc19PYmplY3QqIGV3a0ZyYW1l
LCBFdmFzX09iamVjdCogdmlldywgV2ViQ29yZTo6RnJhbWUqIGZyYW1lKQogewotICAgIEVXS19G
UkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgaWYg
KCFzZC0+ZnJhbWUpIHsKLSAgICAgICAgV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRFZmwqIGZs
YyA9IF9ld2tfZnJhbWVfbG9hZGVyX2VmbF9nZXQoZnJhbWUpOwotICAgICAgICBmbGMtPnNldFdl
YkZyYW1lKGV3a0ZyYW1lKTsKLSAgICAgICAgc2QtPmZyYW1lID0gZnJhbWU7Ci0gICAgICAgIHNk
LT52aWV3ID0gdmlldzsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwg
c21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBpZiAoIXNtYXJ0RGF0YS0+ZnJhbWUpIHsKKyAg
ICAgICAgV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRFZmwqIGZyYW1lTG9hZGVyQ2xpZW50ID0g
X2V3a19mcmFtZV9sb2FkZXJfZWZsX2dldChmcmFtZSk7CisgICAgICAgIGZyYW1lTG9hZGVyQ2xp
ZW50LT5zZXRXZWJGcmFtZShld2tGcmFtZSk7CisgICAgICAgIHNtYXJ0RGF0YS0+ZnJhbWUgPSBm
cmFtZTsKKyAgICAgICAgc21hcnREYXRhLT52aWV3ID0gdmlldzsKICAgICAgICAgZnJhbWUtPmlu
aXQoKTsKICAgICAgICAgcmV0dXJuIEVJTkFfVFJVRTsKICAgICB9CiAKICAgICBFUlIoImZyYW1l
ICVwIGFscmVhZHkgc2V0IGZvciAlcCwgaWdub3JlZCBuZXcgJXAiLAotICAgICAgICBzZC0+ZnJh
bWUsIGV3a0ZyYW1lLCBmcmFtZSk7CisgICAgICAgIHNtYXJ0RGF0YS0+ZnJhbWUsIGV3a0ZyYW1l
LCBmcmFtZSk7CiAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CiB9CiAKQEAgLTEwOTcsNDQgKzEwOTcs
NDQgQEAgRWluYV9Cb29sIGV3a19mcmFtZV9pbml0KEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgRXZh
c19PYmplY3QqIHZpZXcsIFdlYkNvcmU6OkZyYW0KICAqLwogRWluYV9Cb29sIGV3a19mcmFtZV9j
aGlsZF9hZGQoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6
RnJhbWU+IGNoaWxkLCBjb25zdCBXVEY6OlN0cmluZyYgbmFtZSwgY29uc3QgV2ViQ29yZTo6S1VS
TCYgdXJsLCBjb25zdCBXVEY6OlN0cmluZyYgcmVmZXJyZXIpCiB7Ci0gICAgRVdLX0ZSQU1FX1NE
X0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCAwKTsKLSAgICBjaGFyIGJ1ZlsyNTZdOworICAg
IEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzbWFydERhdGEsIDApOworICAg
IGNoYXIgYnVmZmVyWzI1Nl07CiAgICAgRXZhc19PYmplY3QqIGZyYW1lOwotICAgIFdlYkNvcmU6
OkZyYW1lKiBjZjsKKyAgICBXZWJDb3JlOjpGcmFtZSogY29yZUZyYW1lOwogCi0gICAgZnJhbWUg
PSBld2tfZnJhbWVfYWRkKHNkLT5iYXNlLmV2YXMpOworICAgIGZyYW1lID0gZXdrX2ZyYW1lX2Fk
ZChzbWFydERhdGEtPmJhc2UuZXZhcyk7CiAgICAgaWYgKCFmcmFtZSkgewogICAgICAgICBFUlIo
IkNvdWxkIG5vdCBjcmVhdGUgZXdrX2ZyYW1lIG9iamVjdC4iKTsKICAgICAgICAgcmV0dXJuIEVJ
TkFfRkFMU0U7CiAgICAgfQogCi0gICAgY2YgPSBjaGlsZC5nZXQoKTsKLSAgICBpZiAoY2YtPnRy
ZWUoKSkKLSAgICAgICAgY2YtPnRyZWUoKS0+c2V0TmFtZShuYW1lKTsKKyAgICBjb3JlRnJhbWUg
PSBjaGlsZC5nZXQoKTsKKyAgICBpZiAoY29yZUZyYW1lLT50cmVlKCkpCisgICAgICAgIGNvcmVG
cmFtZS0+dHJlZSgpLT5zZXROYW1lKG5hbWUpOwogICAgIGVsc2UKICAgICAgICAgRVJSKCJubyB0
cmVlIGZvciBjaGlsZCBvYmplY3QiKTsKLSAgICBzZC0+ZnJhbWUtPnRyZWUoKS0+YXBwZW5kQ2hp
bGQoY2hpbGQpOworICAgIHNtYXJ0RGF0YS0+ZnJhbWUtPnRyZWUoKS0+YXBwZW5kQ2hpbGQoY2hp
bGQpOwogCi0gICAgaWYgKCFld2tfZnJhbWVfaW5pdChmcmFtZSwgc2QtPnZpZXcsIGNmKSkgewor
ICAgIGlmICghZXdrX2ZyYW1lX2luaXQoZnJhbWUsIHNtYXJ0RGF0YS0+dmlldywgY29yZUZyYW1l
KSkgewogICAgICAgICBldmFzX29iamVjdF9kZWwoZnJhbWUpOwogICAgICAgICByZXR1cm4gRUlO
QV9GQUxTRTsKICAgICB9Ci0gICAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIkVXS19GcmFt
ZTpjaGlsZC8lcyIsIG5hbWUudXRmOCgpLmRhdGEoKSk7Ci0gICAgZXZhc19vYmplY3RfbmFtZV9z
ZXQoZnJhbWUsIGJ1Zik7CisgICAgc25wcmludGYoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgIkVX
S19GcmFtZTpjaGlsZC8lcyIsIG5hbWUudXRmOCgpLmRhdGEoKSk7CisgICAgZXZhc19vYmplY3Rf
bmFtZV9zZXQoZnJhbWUsIGJ1ZmZlcik7CiAgICAgZXZhc19vYmplY3Rfc21hcnRfbWVtYmVyX2Fk
ZChmcmFtZSwgZXdrRnJhbWUpOwogICAgIGV2YXNfb2JqZWN0X3Nob3coZnJhbWUpOwogCiAgICAg
Ly8gVGhlIGNyZWF0aW9uIG9mIHRoZSBmcmFtZSBtYXkgaGF2ZSBydW4gYXJiaXRyYXJ5IEphdmFT
Y3JpcHQgdGhhdCByZW1vdmVkIGl0IGZyb20gdGhlIHBhZ2UgYWxyZWFkeS4KLSAgICBpZiAoIWNm
LT5wYWdlKCkpIHsKKyAgICBpZiAoIWNvcmVGcmFtZS0+cGFnZSgpKSB7CiAgICAgICAgIGV2YXNf
b2JqZWN0X2RlbChmcmFtZSk7CiAgICAgICAgIHJldHVybiBFSU5BX1RSVUU7CiAgICAgfQogCi0g
ICAgc2QtPmZyYW1lLT5sb2FkZXIoKS0+bG9hZFVSTEludG9DaGlsZEZyYW1lKHVybCwgcmVmZXJy
ZXIsIGNmKTsKKyAgICBzbWFydERhdGEtPmZyYW1lLT5sb2FkZXIoKS0+bG9hZFVSTEludG9DaGls
ZEZyYW1lKHVybCwgcmVmZXJyZXIsIGNvcmVGcmFtZSk7CiAKICAgICAvLyBUaGUgZnJhbWUncyBv
bmxvYWQgaGFuZGxlciBtYXkgaGF2ZSByZW1vdmVkIGl0IGZyb20gdGhlIGRvY3VtZW50LgogICAg
IC8vIFNlZSBmYXN0L2RvbS9udWxsLXBhZ2Utc2hvdy1tb2RhbC1kaWFsb2ctY3Jhc2guaHRtbCBm
b3IgYW4gZXhhbXBsZS4KLSAgICBpZiAoIWNmLT50cmVlKCktPnBhcmVudCgpKSB7CisgICAgaWYg
KCFjb3JlRnJhbWUtPnRyZWUoKS0+cGFyZW50KCkpIHsKICAgICAgICAgZXZhc19vYmplY3RfZGVs
KGZyYW1lKTsKICAgICAgICAgcmV0dXJuIEVJTkFfVFJVRTsKICAgICB9CkBAIC0xMTQ3LDE3ICsx
MTQ3LDE3IEBAIEVpbmFfQm9vbCBld2tfZnJhbWVfY2hpbGRfYWRkKEV2YXNfT2JqZWN0KiBld2tG
cmFtZSwgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkZyCiAgKiBAaW50ZXJuYWwKICAqIENoYW5n
ZSB0aGUgZXdrIHZpZXcgdGhpcyBmcmFtZSBpcyBhc3NvY2lhdGVkIHdpdGguCiAgKgotICogQHBh
cmFtIG8gVGhlIGV3ayBmcmFtZSB0byBhY3QgdXBvbi4KKyAqIEBwYXJhbSBld2tGcmFtZSBUaGUg
ZXdrIGZyYW1lIHRvIGFjdCB1cG9uLgogICogQHBhcmFtIG5ld1BhcmVudCBUaGUgbmV3IHZpZXcg
dGhhdCB3aWxsIGJlIHNldCBhcyB0aGUgcGFyZW50IG9mIHRoZSBmcmFtZS4KICAqLwogdm9pZCBl
d2tfZnJhbWVfdmlld19zZXQoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBFdmFzX09iamVjdCogbmV3
UGFyZW50KQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCk7
CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSk7CiAK
ICAgICBldmFzX29iamVjdF9zbWFydF9tZW1iZXJfZGVsKGV3a0ZyYW1lKTsKICAgICBldmFzX29i
amVjdF9zbWFydF9tZW1iZXJfYWRkKGV3a0ZyYW1lLCBuZXdQYXJlbnQpOwogCi0gICAgc2QtPnZp
ZXcgPSBuZXdQYXJlbnQ7CisgICAgc21hcnREYXRhLT52aWV3ID0gbmV3UGFyZW50OwogfQogCiAv
KioKQEAgLTExNjcsOCArMTE2Nyw4IEBAIHZvaWQgZXdrX2ZyYW1lX3ZpZXdfc2V0KEV2YXNfT2Jq
ZWN0KiBld2tGcmFtZSwgRXZhc19PYmplY3QqIG5ld1BhcmVudCkKIHZvaWQgZXdrX2ZyYW1lX2Nv
cmVfZ29uZShFdmFzX09iamVjdCogZXdrRnJhbWUpCiB7CiAgICAgREJHKCJld2tGcmFtZT0lcCIs
IGV3a0ZyYW1lKTsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2Qp
OwotICAgIHNkLT5mcmFtZSA9IDA7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdr
RnJhbWUsIHNtYXJ0RGF0YSk7CisgICAgc21hcnREYXRhLT5mcmFtZSA9IDA7CiB9CiAKIC8qKgpA
QCAtMTE3Niw3ICsxMTc2LDcgQEAgdm9pZCBld2tfZnJhbWVfY29yZV9nb25lKEV2YXNfT2JqZWN0
KiBld2tGcmFtZSkKICAqIFJlcG9ydHMgYSByZXNvdXJjZSB3aWxsIGJlIHJlcXVlc3RlZC4gVXNl
ciBtYXkgb3ZlcnJpZGUgYmVoYXZpb3Igb2Ygd2Via2l0IGJ5CiAgKiBjaGFuZ2luZyB2YWx1ZXMg
aW4gQHBhcmFtIHJlcXVlc3QuCiAgKgotICogQHBhcmFtIG8gRnJhbWUuCisgKiBAcGFyYW0gZXdr
RnJhbWUgRnJhbWUuCiAgKiBAcGFyYW0gcmVxdWVzdCBSZXF1ZXN0IGRldGFpbHMgdGhhdCB1c2Vy
IG1heSBvdmVycmlkZS4gV2hlbmV2ZXIgdmFsdWVzIG9uCiAgKiB0aGlzIHN0cnVjdCBjaGFuZ2Vz
LCBpdCBtdXN0IGJlIHByb3Blcmx5IG1hbGxvYydkIGFzIGl0IHdpbGwgYmUgZnJlZWQKICAqIGFm
dGVyd2FyZHMuCkBAIC0xMTkyLDcgKzExOTIsNyBAQCB2b2lkIGV3a19mcmFtZV9yZXF1ZXN0X3dp
bGxfc2VuZChFdmFzX09iamVjdCogZXdrRnJhbWUsIEV3a19GcmFtZV9SZXNvdXJjZV9SZXF1ZQog
ICogQGludGVybmFsCiAgKiBSZXBvcnRzIHRoYXQgdGhlcmUncyBhIG5ldyByZXNvdXJjZS4KICAq
Ci0gKiBAcGFyYW0gbyBGcmFtZS4KKyAqIEBwYXJhbSBld2tGcmFtZSBGcmFtZS4KICAqIEBwYXJh
bSByZXF1ZXN0IE5ldyByZXF1ZXN0IGRldGFpbHMuIE5vIGNoYW5nZXMgYXJlIGFsbG93ZWQgdG8g
ZmllbGRzLgogICoKICAqIEVtaXRzIHNpZ25hbDogInJlc291cmNlLHJlcXVlc3QsbmV3IgpAQCAt
MTIwNiw3ICsxMjA2LDcgQEAgdm9pZCBld2tfZnJhbWVfcmVxdWVzdF9hc3NpZ25faWRlbnRpZmll
cihFdmFzX09iamVjdCogZXdrRnJhbWUsIGNvbnN0IEV3a19GcmFtZV8KICAqIEBpbnRlcm5hbAog
ICogUmVwb3J0cyB0aGF0IGZpcnN0IG5hdmlnYXRpb24gb2NjdXJyZWQKICAqCi0gKiBAcGFyYW0g
byBGcmFtZS4KKyAqIEBwYXJhbSBld2tGcmFtZSBGcmFtZS4KICAqCiAgKiBFbWl0cyBzaWduYWw6
ICJuYXZpZ2F0aW9uLGZpcnN0IgogICovCkBAIC0xMjE5LDcgKzEyMTksNyBAQCB2b2lkIGV3a19m
cmFtZV9kaWRfcGVyZm9ybV9maXJzdF9uYXZpZ2F0aW9uKEV2YXNfT2JqZWN0KiBld2tGcmFtZSkK
ICAqIEBpbnRlcm5hbAogICogUmVwb3J0cyBmcmFtZSB3aWxsIGJlIHNhdmVkIHRvIGN1cnJlbnQg
c3RhdGUKICAqCi0gKiBAcGFyYW0gbyBGcmFtZS4KKyAqIEBwYXJhbSBld2tGcmFtZSBGcmFtZS4K
ICAqIEBwYXJhbSBpdGVtIEhpc3RvcnkgaXRlbSB0byBzYXZlIGRldGFpbHMgdG8uCiAgKgogICog
RW1pdHMgc2lnbmFsOiAic3RhdGUsc2F2ZSIKQEAgLTEyMzcsMjIgKzEyMzcsMjIgQEAgdm9pZCBl
d2tfZnJhbWVfdmlld19zdGF0ZV9zYXZlKEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgV2ViQ29yZTo6
SGlzdG9yeUl0ZW0qIGl0ZW0KICAqLwogdm9pZCBld2tfZnJhbWVfbG9hZF9zdGFydGVkKEV2YXNf
T2JqZWN0KiBld2tGcmFtZSkKIHsKLSAgICBFdmFzX09iamVjdCogbWFpbl9mcmFtZTsKKyAgICBF
dmFzX09iamVjdCogbWFpbkZyYW1lOwogICAgIERCRygiZXdrRnJhbWU9JXAiLCBld2tGcmFtZSk7
CiAgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChld2tGcmFtZSwgImxvYWQsc3Rh
cnRlZCIsIDApOwotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCk7
Ci0gICAgZXdrX3ZpZXdfbG9hZF9zdGFydGVkKHNkLT52aWV3KTsKKyAgICBFV0tfRlJBTUVfU0Rf
R0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRhKTsKKyAgICBld2tfdmlld19sb2FkX3N0
YXJ0ZWQoc21hcnREYXRhLT52aWV3KTsKIAotICAgIG1haW5fZnJhbWUgPSBld2tfdmlld19mcmFt
ZV9tYWluX2dldChzZC0+dmlldyk7Ci0gICAgaWYgKG1haW5fZnJhbWUgPT0gZXdrRnJhbWUpCi0g
ICAgICAgIGV3a192aWV3X2ZyYW1lX21haW5fbG9hZF9zdGFydGVkKHNkLT52aWV3KTsKKyAgICBt
YWluRnJhbWUgPSBld2tfdmlld19mcmFtZV9tYWluX2dldChzbWFydERhdGEtPnZpZXcpOworICAg
IGlmIChtYWluRnJhbWUgPT0gZXdrRnJhbWUpCisgICAgICAgIGV3a192aWV3X2ZyYW1lX21haW5f
bG9hZF9zdGFydGVkKHNtYXJ0RGF0YS0+dmlldyk7CiB9CiAKIC8qKgogICogQGludGVybmFsCiAg
KiBSZXBvcnRzIHRoZSBmcmFtZSBzdGFydGVkIHByb3Zpc2lvbmFsIGxvYWQuCiAgKgotICogQHBh
cmFtIG8gRnJhbWUuCisgKiBAcGFyYW0gZXdrRnJhbWUgRnJhbWUuCiAgKgogICogRW1pdHMgc2ln
bmFsOiAibG9hZCxwcm92aXNpb25hbCIgd2l0aCBubyBwYXJhbWV0ZXJzLgogICovCkBAIC0xMjY1
LDcgKzEyNjUsNyBAQCB2b2lkIGV3a19mcmFtZV9sb2FkX3Byb3Zpc2lvbmFsKEV2YXNfT2JqZWN0
KiBld2tGcmFtZSkKICAqIEBpbnRlcm5hbAogICogUmVwb3J0cyB0aGUgZnJhbWUgZmluaXNoZWQg
Zmlyc3QgbGF5b3V0LgogICoKLSAqIEBwYXJhbSBvIEZyYW1lLgorICogQHBhcmFtIGV3a0ZyYW1l
IEZyYW1lLgogICoKICAqIEVtaXRzIHNpZ25hbDogImxvYWQsZmlyc3RsYXlvdXQsZmluaXNoZWQi
IHdpdGggbm8gcGFyYW1ldGVycy4KICAqLwpAQCAtMTI3OCw3ICsxMjc4LDcgQEAgdm9pZCBld2tf
ZnJhbWVfbG9hZF9maXJzdGxheW91dF9maW5pc2hlZChFdmFzX09iamVjdCogZXdrRnJhbWUpCiAg
KiBAaW50ZXJuYWwKICAqIFJlcG9ydHMgdGhlIGZyYW1lIGZpbmlzaGVkIGZpcnN0IG5vbiBlbXB0
eSBsYXlvdXQuCiAgKgotICogQHBhcmFtIG8gRnJhbWUuCisgKiBAcGFyYW0gZXdrRnJhbWUgRnJh
bWUuCiAgKgogICogRW1pdHMgc2lnbmFsOiAibG9hZCxub25lbXB0eWxheW91dCxmaW5pc2hlZCIg
d2l0aCBubyBwYXJhbWV0ZXJzLgogICovCkBAIC0xMjkxLDcgKzEyOTEsNyBAQCB2b2lkIGV3a19m
cmFtZV9sb2FkX2ZpcnN0bGF5b3V0X25vbmVtcHR5X2ZpbmlzaGVkKEV2YXNfT2JqZWN0KiBld2tG
cmFtZSkKICAqIEBpbnRlcm5hbAogICogUmVwb3J0cyB0aGUgbG9hZGluZyBvZiBhIGRvY3VtZW50
IGhhcyBmaW5pc2hlZCBvbiBmcmFtZS4KICAqCi0gKiBAcGFyYW0gbyBGcmFtZS4KKyAqIEBwYXJh
bSBld2tGcmFtZSBGcmFtZS4KICAqCiAgKiBFbWl0cyBzaWduYWw6ICJsb2FkLGRvY3VtZW50LGZp
bmlzaGVkIiB3aXRoIG5vIHBhcmFtZXRlcnMuCiAgKi8KQEAgLTEzMTQsNyArMTMxNCw3IEBAIHZv
aWQgZXdrX2ZyYW1lX2xvYWRfZG9jdW1lbnRfZmluaXNoZWQoRXZhc19PYmplY3QqIGV3a0ZyYW1l
KQogICovCiB2b2lkIGV3a19mcmFtZV9sb2FkX2ZpbmlzaGVkKEV2YXNfT2JqZWN0KiBld2tGcmFt
ZSwgY29uc3QgY2hhciogZXJyb3JEb21haW4sIGludCBlcnJvckNvZGUsIEVpbmFfQm9vbCBpc0Nh
bmNlbGxhdGlvbiwgY29uc3QgY2hhciogZXJyb3JEZXNjcmlwdGlvbiwgY29uc3QgY2hhciogZmFp
bGluZ1VybCkKIHsKLSAgICBFd2tfRnJhbWVfTG9hZF9FcnJvciBidWYsICplcnJvcjsKKyAgICBF
d2tfRnJhbWVfTG9hZF9FcnJvciBidWZmZXIsICplcnJvcjsKICAgICBpZiAoIWVycm9yRG9tYWlu
KSB7CiAgICAgICAgIERCRygiZXdrRnJhbWU9JXAsIHN1Y2Nlc3MuIiwgZXdrRnJhbWUpOwogICAg
ICAgICBlcnJvciA9IDA7CkBAIC0xMzIzLDE3ICsxMzIzLDE3IEBAIHZvaWQgZXdrX2ZyYW1lX2xv
YWRfZmluaXNoZWQoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBjb25zdCBjaGFyKiBlcnJvckRvbWFp
biwgaW50CiAgICAgICAgICAgICBld2tGcmFtZSwgZXJyb3JEb21haW4sIGVycm9yQ29kZSwgaXND
YW5jZWxsYXRpb24sCiAgICAgICAgICAgICBlcnJvckRlc2NyaXB0aW9uLCBmYWlsaW5nVXJsKTsK
IAotICAgICAgICBidWYuZG9tYWluID0gZXJyb3JEb21haW47Ci0gICAgICAgIGJ1Zi5jb2RlID0g
ZXJyb3JDb2RlOwotICAgICAgICBidWYuaXNfY2FuY2VsbGF0aW9uID0gaXNDYW5jZWxsYXRpb247
Ci0gICAgICAgIGJ1Zi5kZXNjcmlwdGlvbiA9IGVycm9yRGVzY3JpcHRpb247Ci0gICAgICAgIGJ1
Zi5mYWlsaW5nX3VybCA9IGZhaWxpbmdVcmw7Ci0gICAgICAgIGJ1Zi5mcmFtZSA9IGV3a0ZyYW1l
OwotICAgICAgICBlcnJvciA9ICZidWY7CisgICAgICAgIGJ1ZmZlci5kb21haW4gPSBlcnJvckRv
bWFpbjsKKyAgICAgICAgYnVmZmVyLmNvZGUgPSBlcnJvckNvZGU7CisgICAgICAgIGJ1ZmZlci5p
c19jYW5jZWxsYXRpb24gPSBpc0NhbmNlbGxhdGlvbjsKKyAgICAgICAgYnVmZmVyLmRlc2NyaXB0
aW9uID0gZXJyb3JEZXNjcmlwdGlvbjsKKyAgICAgICAgYnVmZmVyLmZhaWxpbmdfdXJsID0gZmFp
bGluZ1VybDsKKyAgICAgICAgYnVmZmVyLmZyYW1lID0gZXdrRnJhbWU7CisgICAgICAgIGVycm9y
ID0gJmJ1ZmZlcjsKICAgICB9CiAgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChl
d2tGcmFtZSwgImxvYWQsZmluaXNoZWQiLCBlcnJvcik7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9P
Ul9SRVRVUk4oZXdrRnJhbWUsIHNkKTsKLSAgICBld2tfdmlld19sb2FkX2ZpbmlzaGVkKHNkLT52
aWV3LCBlcnJvcik7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNt
YXJ0RGF0YSk7CisgICAgZXdrX3ZpZXdfbG9hZF9maW5pc2hlZChzbWFydERhdGEtPnZpZXcsIGVy
cm9yKTsKIH0KIAogLyoqCkBAIC0xMzcxLDE2ICsxMzcxLDE2IEBAIHZvaWQgZXdrX2ZyYW1lX2xv
YWRfZXJyb3IoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBjb25zdCBjaGFyKiBlcnJvckRvbWFpbiwg
aW50IGVyCiAgKi8KIHZvaWQgZXdrX2ZyYW1lX2xvYWRfcHJvZ3Jlc3NfY2hhbmdlZChFdmFzX09i
amVjdCogZXdrRnJhbWUpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJh
bWUsIHNkKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+ZnJhbWUpOworICAg
IEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzbWFydERhdGEpOworICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+ZnJhbWUpOwogCiAgICAgLy8gVE9E
TzogdGhpcyBpcyBwZXIgcGFnZSwgdGhlcmUgc2hvdWxkIGJlIGEgd2F5IHRvIGhhdmUgcGVyLWZy
YW1lLgotICAgIGRvdWJsZSBwcm9ncmVzcyA9IHNkLT5mcmFtZS0+cGFnZSgpLT5wcm9ncmVzcygp
LT5lc3RpbWF0ZWRQcm9ncmVzcygpOworICAgIGRvdWJsZSBwcm9ncmVzcyA9IHNtYXJ0RGF0YS0+
ZnJhbWUtPnBhZ2UoKS0+cHJvZ3Jlc3MoKS0+ZXN0aW1hdGVkUHJvZ3Jlc3MoKTsKIAogICAgIERC
RygiZXdrRnJhbWU9JXAgKHA9JTAuM2YpIiwgZXdrRnJhbWUsIHByb2dyZXNzKTsKIAogICAgIGV2
YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdrRnJhbWUsICJsb2FkLHByb2dyZXNzIiwg
JnByb2dyZXNzKTsKLSAgICBld2tfdmlld19sb2FkX3Byb2dyZXNzX2NoYW5nZWQoc2QtPnZpZXcp
OworICAgIGV3a192aWV3X2xvYWRfcHJvZ3Jlc3NfY2hhbmdlZChzbWFydERhdGEtPnZpZXcpOwog
fQogCiAKQEAgLTE0MTcsNTEgKzE0MTcsNTEgQEAgdm9pZCBld2tfZnJhbWVfdGl0bGVfc2V0KEV2
YXNfT2JqZWN0KiBld2tGcmFtZSwgY29uc3QgY2hhciogdGl0bGUpCiB2b2lkIGV3a19mcmFtZV92
aWV3X2NyZWF0ZV9mb3JfdmlldyhFdmFzX09iamVjdCogZXdrRnJhbWUsIEV2YXNfT2JqZWN0KiB2
aWV3KQogewogICAgIERCRygiZXdrRnJhbWU9JXAsIHZpZXc9JXAiLCBld2tGcmFtZSwgdmlldyk7
Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkKTsKLSAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+ZnJhbWUpOwotICAgIEV2YXNfQ29vcmQgdywgaDsK
KyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRhKTsKKyAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmZyYW1lKTsKKyAgICBFdmFz
X0Nvb3JkIHdpZHRoLCBoZWlnaHQ7CiAKLSAgICBldmFzX29iamVjdF9nZW9tZXRyeV9nZXQodmll
dywgMCwgMCwgJncsICZoKTsKKyAgICBldmFzX29iamVjdF9nZW9tZXRyeV9nZXQodmlldywgMCwg
MCwgJndpZHRoLCAmaGVpZ2h0KTsKIAotICAgIFdlYkNvcmU6OkludFNpemUgc2l6ZSh3LCBoKTsK
LSAgICBpbnQgciwgZywgYiwgYTsKLSAgICBXZWJDb3JlOjpDb2xvciBiZzsKKyAgICBXZWJDb3Jl
OjpJbnRTaXplIHNpemUod2lkdGgsIGhlaWdodCk7CisgICAgaW50IHJlZCwgZ3JlZW4sIGJsdWUs
IGFscGhhOworICAgIFdlYkNvcmU6OkNvbG9yIGJhY2tncm91bmQ7CiAKLSAgICBld2tfdmlld19i
Z19jb2xvcl9nZXQodmlldywgJnIsICZnLCAmYiwgJmEpOwotICAgIGlmICghYSkKLSAgICAgICAg
YmcgPSBXZWJDb3JlOjpDb2xvcigwLCAwLCAwLCAwKTsKLSAgICBlbHNlIGlmIChhID09IDI1NSkK
LSAgICAgICAgYmcgPSBXZWJDb3JlOjpDb2xvcihyLCBnLCBiLCBhKTsKKyAgICBld2tfdmlld19i
Z19jb2xvcl9nZXQodmlldywgJnJlZCwgJmdyZWVuLCAmYmx1ZSwgJmFscGhhKTsKKyAgICBpZiAo
IWFscGhhKQorICAgICAgICBiYWNrZ3JvdW5kID0gV2ViQ29yZTo6Q29sb3IoMCwgMCwgMCwgMCk7
CisgICAgZWxzZSBpZiAoYWxwaGEgPT0gMjU1KQorICAgICAgICBiYWNrZ3JvdW5kID0gV2ViQ29y
ZTo6Q29sb3IocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOwogICAgIGVsc2UKLSAgICAgICAgYmcg
PSBXZWJDb3JlOjpDb2xvcihyICogMjU1IC8gYSwgZyAqIDI1NSAvIGEsIGIgKiAyNTUgLyBhLCBh
KTsKKyAgICAgICAgYmFja2dyb3VuZCA9IFdlYkNvcmU6OkNvbG9yKHJlZCAqIDI1NSAvIGFscGhh
LCBncmVlbiAqIDI1NSAvIGFscGhhLCBibHVlICogMjU1IC8gYWxwaGEsIGFscGhhKTsKIAotICAg
IHNkLT5mcmFtZS0+Y3JlYXRlVmlldyhzaXplLCBiZywgIWEsIFdlYkNvcmU6OkludFNpemUoKSwg
ZmFsc2UpOwotICAgIGlmICghc2QtPmZyYW1lLT52aWV3KCkpCisgICAgc21hcnREYXRhLT5mcmFt
ZS0+Y3JlYXRlVmlldyhzaXplLCBiYWNrZ3JvdW5kLCAhYWxwaGEsIFdlYkNvcmU6OkludFNpemUo
KSwgZmFsc2UpOworICAgIGlmICghc21hcnREYXRhLT5mcmFtZS0+dmlldygpKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBjb25zdCBjaGFyKiB0aGVtZSA9IGV3a192aWV3X3RoZW1lX2dldCh2aWV3
KTsKLSAgICBzZC0+ZnJhbWUtPnZpZXcoKS0+c2V0RWRqZVRoZW1lKHRoZW1lKTsKLSAgICBzZC0+
ZnJhbWUtPnZpZXcoKS0+c2V0RXZhc09iamVjdChld2tGcmFtZSk7CisgICAgc21hcnREYXRhLT5m
cmFtZS0+dmlldygpLT5zZXRFZGplVGhlbWUodGhlbWUpOworICAgIHNtYXJ0RGF0YS0+ZnJhbWUt
PnZpZXcoKS0+c2V0RXZhc09iamVjdChld2tGcmFtZSk7CiB9CiAKIHNzaXplX3QgZXdrX2ZyYW1l
X3NvdXJjZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBjaGFyKiogZnJhbWVTb3Vy
Y2UpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCAtMSk7
Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgLTEpOwotICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUtPmRvY3VtZW50KCksIC0x
KTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRhLCAt
MSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUs
IC0xKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5mcmFt
ZS0+ZG9jdW1lbnQoKSwgLTEpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChm
cmFtZVNvdXJjZSwgLTEpOwogCiAgICAgV1RGOjpTdHJpbmcgc291cmNlOwogICAgICpmcmFtZVNv
dXJjZSA9IDA7IC8vIFNhdmVzIDAgdG8gcG9pbnRlciB1bnRpbCBpdCdzIG5vdCBhbGxvY2F0ZWQu
CiAKLSAgICBpZiAoIXNkLT5mcmFtZS0+ZG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSkgewor
ICAgIGlmICghc21hcnREYXRhLT5mcmFtZS0+ZG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSkg
ewogICAgICAgICAvLyBGSVhNRTogU3VwcG9ydCBvdGhlcnMgZG9jdW1lbnRzLgogICAgICAgICBX
Uk4oIk9ubHkgSFRNTCBkb2N1bWVudHMgYXJlIHN1cHBvcnRlZCIpOwogICAgICAgICByZXR1cm4g
LTE7CiAgICAgfQogCiAgICAgLy8gTG9vayBmb3IgPGh0bWw+IHRhZy4gSWYgaXQgZXhpc3RzLCB0
aGUgbm9kZSBjb250YXRpbnMgYWxsIGRvY3VtZW50J3Mgc291cmNlLgotICAgIFdlYkNvcmU6Ok5v
ZGUqIGRvY3VtZW50Tm9kZSA9IHNkLT5mcmFtZS0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50
KCk7CisgICAgV2ViQ29yZTo6Tm9kZSogZG9jdW1lbnROb2RlID0gc21hcnREYXRhLT5mcmFtZS0+
ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCk7CiAgICAgaWYgKGRvY3VtZW50Tm9kZSkKICAg
ICAgICAgZm9yIChXZWJDb3JlOjpOb2RlKiBub2RlID0gZG9jdW1lbnROb2RlLT5maXJzdENoaWxk
KCk7IG5vZGU7IG5vZGUgPSBub2RlLT5wYXJlbnRFbGVtZW50KCkpIHsKICAgICAgICAgICAgIGlm
IChub2RlLT5oYXNUYWdOYW1lKFdlYkNvcmU6OkhUTUxOYW1lczo6aHRtbFRhZykpIHsKQEAgLTE0
NzQsMzYgKzE0NzQsMzYgQEAgc3NpemVfdCBld2tfZnJhbWVfc291cmNlX2dldChjb25zdCBFdmFz
X09iamVjdCogZXdrRnJhbWUsIGNoYXIqKiBmcmFtZVNvdXJjZSkKIAogICAgIC8vIFRyeSB0byBn
ZXQgPGhlYWQ+IGFuZCA8Ym9keT4gdGFncyBpZiA8aHRtbD4gdGFnIHdhcyBub3QgZm91bmQuCiAg
ICAgaWYgKHNvdXJjZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgaWYgKHNkLT5mcmFtZS0+ZG9jdW1l
bnQoKS0+aGVhZCgpKQotICAgICAgICAgICAgc291cmNlID0gc2QtPmZyYW1lLT5kb2N1bWVudCgp
LT5oZWFkKCktPm91dGVySFRNTCgpOworICAgICAgICBpZiAoc21hcnREYXRhLT5mcmFtZS0+ZG9j
dW1lbnQoKS0+aGVhZCgpKQorICAgICAgICAgICAgc291cmNlID0gc21hcnREYXRhLT5mcmFtZS0+
ZG9jdW1lbnQoKS0+aGVhZCgpLT5vdXRlckhUTUwoKTsKIAotICAgICAgICBpZiAoc2QtPmZyYW1l
LT5kb2N1bWVudCgpLT5ib2R5KCkpCi0gICAgICAgICAgICBzb3VyY2UgKz0gc2QtPmZyYW1lLT5k
b2N1bWVudCgpLT5ib2R5KCktPm91dGVySFRNTCgpOworICAgICAgICBpZiAoc21hcnREYXRhLT5m
cmFtZS0+ZG9jdW1lbnQoKS0+Ym9keSgpKQorICAgICAgICAgICAgc291cmNlICs9IHNtYXJ0RGF0
YS0+ZnJhbWUtPmRvY3VtZW50KCktPmJvZHkoKS0+b3V0ZXJIVE1MKCk7CiAgICAgfQogCi0gICAg
c2l6ZV90IHNvdXJjZV9sZW5ndGggPSBzdHJsZW4oc291cmNlLnV0ZjgoKS5kYXRhKCkpOwotICAg
ICpmcmFtZVNvdXJjZSA9IHN0YXRpY19jYXN0PGNoYXIqPihtYWxsb2Moc291cmNlX2xlbmd0aCAr
IDEpKTsKKyAgICBzaXplX3Qgc291cmNlTGVuZ3RoID0gc3RybGVuKHNvdXJjZS51dGY4KCkuZGF0
YSgpKTsKKyAgICAqZnJhbWVTb3VyY2UgPSBzdGF0aWNfY2FzdDxjaGFyKj4obWFsbG9jKHNvdXJj
ZUxlbmd0aCArIDEpKTsKICAgICBpZiAoISpmcmFtZVNvdXJjZSkgewogICAgICAgICBDUklUSUNB
TCgiQ291bGQgbm90IGFsbG9jYXRlIG1lbW9yeS4iKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAg
IH0KIAotICAgIHN0cm5jcHkoKmZyYW1lU291cmNlLCBzb3VyY2UudXRmOCgpLmRhdGEoKSwgc291
cmNlX2xlbmd0aCk7Ci0gICAgKCpmcmFtZVNvdXJjZSlbc291cmNlX2xlbmd0aF0gPSAnXDAnOwor
ICAgIHN0cm5jcHkoKmZyYW1lU291cmNlLCBzb3VyY2UudXRmOCgpLmRhdGEoKSwgc291cmNlTGVu
Z3RoKTsKKyAgICAoKmZyYW1lU291cmNlKVtzb3VyY2VMZW5ndGhdID0gJ1wwJzsKIAotICAgIHJl
dHVybiBzb3VyY2VfbGVuZ3RoOworICAgIHJldHVybiBzb3VyY2VMZW5ndGg7CiB9CiAKIEVpbmFf
TGlzdCogZXdrX2ZyYW1lX3Jlc291cmNlc19sb2NhdGlvbl9nZXQoY29uc3QgRXZhc19PYmplY3Qq
IGV3a0ZyYW1lKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBz
ZCwgMCk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgMCk7
Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZS0+ZG9jdW1lbnQo
KSwgMCk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNtYXJ0RGF0
YSwgMCk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJh
bWUsIDApOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmZy
YW1lLT5kb2N1bWVudCgpLCAwKTsKIAogICAgIEVpbmFfTGlzdCogbGlzdE9mSW1hZ2VzTG9jYXRp
b24gPSAwOwogCiAgICAgLy8gR2V0IHNyYyBhdHRpYnV0ZSBvZiBpbWFnZXMgYW5kIHNhdmVzIHRo
ZW0gdG8gdGhlIEVpbmFfTGlzdC4KLSAgICBSZWZQdHI8V2ViQ29yZTo6SFRNTENvbGxlY3Rpb24+
IGltYWdlcyA9IHNkLT5mcmFtZS0+ZG9jdW1lbnQoKS0+aW1hZ2VzKCk7CisgICAgUmVmUHRyPFdl
YkNvcmU6OkhUTUxDb2xsZWN0aW9uPiBpbWFnZXMgPSBzbWFydERhdGEtPmZyYW1lLT5kb2N1bWVu
dCgpLT5pbWFnZXMoKTsKICAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgaW1hZ2Vz
LT5sZW5ndGgoKTsgKytpbmRleCkgewogICAgICAgICBXZWJDb3JlOjpIVE1MSW1hZ2VFbGVtZW50
KiBpbWFnZUVsZW1lbnQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MSW1hZ2VFbGVtZW50Kj4o
aW1hZ2VzLT5pdGVtKGluZGV4KSk7CiAgICAgICAgIGlmICghaW1hZ2VFbGVtZW50IHx8IGltYWdl
RWxlbWVudC0+c3JjKCkuaXNOdWxsKCkgfHwgaW1hZ2VFbGVtZW50LT5zcmMoKS5pc0VtcHR5KCkp
CkBAIC0xNTQwLDEzICsxNTQwLDEzIEBAIG91dF9vZl9tZW1vcnlfaGFuZGxlcjoKIAogY2hhciog
ZXdrX2ZyYW1lX3BsYWluX3RleHRfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsK
LSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIDApOwotICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIDApOworICAgIEVXS19GUkFN
RV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzbWFydERhdGEsIDApOworICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmZyYW1lLCAwKTsKIAotICAgIGlmICgh
c2QtPmZyYW1lLT5kb2N1bWVudCgpKQorICAgIGlmICghc21hcnREYXRhLT5mcmFtZS0+ZG9jdW1l
bnQoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBXZWJDb3JlOjpFbGVtZW50KiBkb2N1bWVu
dEVsZW1lbnQgPSBzZC0+ZnJhbWUtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpOworICAg
IFdlYkNvcmU6OkVsZW1lbnQqIGRvY3VtZW50RWxlbWVudCA9IHNtYXJ0RGF0YS0+ZnJhbWUtPmRv
Y3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpOwogCiAgICAgaWYgKCFkb2N1bWVudEVsZW1lbnQp
CiAgICAgICAgIHJldHVybiAwOwpAQCAtMTU4NSw5ICsxNTg1LDkgQEAgRWluYV9Cb29sIGV3a19m
cmFtZV91cmlfY2hhbmdlZChFdmFzX09iamVjdCogZXdrRnJhbWUpCiB2b2lkIGV3a19mcmFtZV9m
b3JjZV9sYXlvdXQoRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewogICAgIERCRygiZXdrRnJhbWU9
JXAiLCBld2tGcmFtZSk7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUs
IHNkKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+ZnJhbWUpOwotICAgIFdl
YkNvcmU6OkZyYW1lVmlldyogdmlldyA9IHNkLT5mcmFtZS0+dmlldygpOworICAgIEVXS19GUkFN
RV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzbWFydERhdGEpOworICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+ZnJhbWUpOworICAgIFdlYkNvcmU6OkZyYW1lVmll
dyogdmlldyA9IHNtYXJ0RGF0YS0+ZnJhbWUtPnZpZXcoKTsKICAgICBpZiAodmlldykKICAgICAg
ICAgdmlldy0+Zm9yY2VMYXlvdXQodHJ1ZSk7CiB9CkBAIC0xNjA2LDcgKzE2MDYsNyBAQCBXVEY6
OlBhc3NSZWZQdHI8V2ViQ29yZTo6V2lkZ2V0PiBld2tfZnJhbWVfcGx1Z2luX2NyZWF0ZShFdmFz
X09iamVjdCogZXdrRnJhbWUsCiAgKiBAaW50ZXJuYWwKICAqIFJlcG9ydHMgdGhhdCBlZGl0b3Ig
Y2xpZW50IHNlbGVjdGlvbiB3YXMgY2hhbmdlZC4KICAqCi0gKiBAcGFyYW0gbyBGcmFtZQorICog
QHBhcmFtIGV3a0ZyYW1lIEZyYW1lCiAgKgogICogRW1pdHMgc2lnbmFsOiAiZWRpdG9yY2xpZW50
c2VsZWN0aW9uLGNoYW5nZWQiIHdpdGggbm8gcGFyYW1ldGVycy4KICAqLwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19oaXN0b3J5LmNwcCBiL1NvdXJjZS9XZWJLaXQvZWZs
L2V3ay9ld2tfaGlzdG9yeS5jcHAKaW5kZXggODFmNjBjNTAzYWEyYWY4Mjg3MTNiNGI5ODJjMDY1
MmQ2NjI2NzJlYi4uNzU0YTk0MmM0NGRhMTU3ODA0MGQ1MjM1OGExMjcxMTc3OGIxMzUwYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19oaXN0b3J5LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2VmbC9ld2svZXdrX2hpc3RvcnkuY3BwCkBAIC01Nyw5ICs1Nyw5IEBAIHN0cnVj
dCBfRXdrX0hpc3RvcnlfSXRlbSB7CiAgICAgV2ViQ29yZTo6SGlzdG9yeUl0ZW0qIGNvcmU7CiAK
ICAgICBjb25zdCBjaGFyKiB0aXRsZTsKLSAgICBjb25zdCBjaGFyKiBhbHRlcm5hdGVfdGl0bGU7
CisgICAgY29uc3QgY2hhciogYWx0ZXJuYXRlVGl0bGU7CiAgICAgY29uc3QgY2hhciogdXJpOwot
ICAgIGNvbnN0IGNoYXIqIG9yaWdpbmFsX3VyaTsKKyAgICBjb25zdCBjaGFyKiBvcmlnaW5hbFVy
aTsKIH07CiAKICNkZWZpbmUgRVdLX0hJU1RPUllfSVRFTV9DT1JFX0dFVF9PUl9SRVRVUk4oaXRl
bSwgY29yZV8sIC4uLikgXApAQCAtNzUsMTcgKzc1LDE3IEBAIHN0cnVjdCBfRXdrX0hpc3Rvcnlf
SXRlbSB7CiAKIHN0YXRpYyBpbmxpbmUgRWluYV9MaXN0KiBfZXdrX2hpc3RvcnlfaXRlbV9saXN0
X2dldChjb25zdCBXZWJDb3JlOjpIaXN0b3J5SXRlbVZlY3RvciYgY29yZUl0ZW1zKQogewotICAg
IEVpbmFfTGlzdCogcmV0ID0gMDsKLSAgICB1bnNpZ25lZCBpbnQgaSwgc2l6ZTsKKyAgICBFaW5h
X0xpc3QqIHJlc3VsdCA9IDA7CisgICAgdW5zaWduZWQgaW50IHNpemU7CiAKICAgICBzaXplID0g
Y29yZUl0ZW1zLnNpemUoKTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAg
Zm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKICAgICAgICAgRXdrX0hp
c3RvcnlfSXRlbSogaXRlbSA9IGV3a19oaXN0b3J5X2l0ZW1fbmV3X2Zyb21fY29yZShjb3JlSXRl
bXNbaV0uZ2V0KCkpOwogICAgICAgICBpZiAoaXRlbSkKLSAgICAgICAgICAgIHJldCA9IGVpbmFf
bGlzdF9hcHBlbmQocmV0LCBpdGVtKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IGVpbmFfbGlzdF9h
cHBlbmQocmVzdWx0LCBpdGVtKTsKICAgICB9CiAKLSAgICByZXR1cm4gcmV0OworICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKIEVpbmFfQm9vbCBld2tfaGlzdG9yeV9mb3J3YXJkKEV3a19IaXN0b3J5
KiBoaXN0b3J5KQpAQCAtMjU5LDkgKzI1OSw5IEBAIHZvaWQgZXdrX2hpc3RvcnlfaXRlbV9mcmVl
KEV3a19IaXN0b3J5X0l0ZW0qIGl0ZW0pCiAKIHZvaWQgZXdrX2hpc3RvcnlfaXRlbV9saXN0X2Zy
ZWUoRWluYV9MaXN0KiBoaXN0b3J5X2l0ZW1zKQogewotICAgIHZvaWQqIGQ7Ci0gICAgRUlOQV9M
SVNUX0ZSRUUoaGlzdG9yeV9pdGVtcywgZCkgewotICAgICAgICBFd2tfSGlzdG9yeV9JdGVtKiBp
dGVtID0gKEV3a19IaXN0b3J5X0l0ZW0qKWQ7CisgICAgdm9pZCogZGVsZXRlSXRlbTsKKyAgICBF
SU5BX0xJU1RfRlJFRShoaXN0b3J5X2l0ZW1zLCBkZWxldGVJdGVtKSB7CisgICAgICAgIEV3a19I
aXN0b3J5X0l0ZW0qIGl0ZW0gPSAoRXdrX0hpc3RvcnlfSXRlbSopZGVsZXRlSXRlbTsKICAgICAg
ICAgX2V3a19oaXN0b3J5X2l0ZW1fZnJlZShpdGVtLCBpdGVtLT5jb3JlKTsKICAgICB9CiB9CkBA
IC0yNzAsMjUgKzI3MCwyNSBAQCBjb25zdCBjaGFyKiBld2tfaGlzdG9yeV9pdGVtX3RpdGxlX2dl
dChjb25zdCBFd2tfSGlzdG9yeV9JdGVtKiBpdGVtKQogewogICAgIEVXS19ISVNUT1JZX0lURU1f
Q09SRV9HRVRfT1JfUkVUVVJOKGl0ZW0sIGNvcmUsIDApOwogICAgIC8vIGhpZGUgdGhlIGZvbGxv
d2luZyBvcHRpbXphdGlvbiBmcm9tIG91dHNpZGUKLSAgICBFd2tfSGlzdG9yeV9JdGVtKiBpID0g
Y29uc3RfY2FzdDxFd2tfSGlzdG9yeV9JdGVtKj4oaXRlbSk7Ci0gICAgZWluYV9zdHJpbmdzaGFy
ZV9yZXBsYWNlKCZpLT50aXRsZSwgY29yZS0+dGl0bGUoKS51dGY4KCkuZGF0YSgpKTsKLSAgICBy
ZXR1cm4gaS0+dGl0bGU7CisgICAgRXdrX0hpc3RvcnlfSXRlbSogaXRlbTEgPSBjb25zdF9jYXN0
PEV3a19IaXN0b3J5X0l0ZW0qPihpdGVtKTsKKyAgICBlaW5hX3N0cmluZ3NoYXJlX3JlcGxhY2Uo
Jml0ZW0xLT50aXRsZSwgY29yZS0+dGl0bGUoKS51dGY4KCkuZGF0YSgpKTsKKyAgICByZXR1cm4g
aXRlbTEtPnRpdGxlOwogfQogCiBjb25zdCBjaGFyKiBld2tfaGlzdG9yeV9pdGVtX3RpdGxlX2Fs
dGVybmF0ZV9nZXQoY29uc3QgRXdrX0hpc3RvcnlfSXRlbSogaXRlbSkKIHsKICAgICBFV0tfSElT
VE9SWV9JVEVNX0NPUkVfR0VUX09SX1JFVFVSTihpdGVtLCBjb3JlLCAwKTsKICAgICAvLyBoaWRl
IHRoZSBmb2xsb3dpbmcgb3B0aW16YXRpb24gZnJvbSBvdXRzaWRlCi0gICAgRXdrX0hpc3Rvcnlf
SXRlbSogaSA9IGNvbnN0X2Nhc3Q8RXdrX0hpc3RvcnlfSXRlbSo+KGl0ZW0pOwotICAgIGVpbmFf
c3RyaW5nc2hhcmVfcmVwbGFjZSgmaS0+YWx0ZXJuYXRlX3RpdGxlLAorICAgIEV3a19IaXN0b3J5
X0l0ZW0qIGl0ZW0xID0gY29uc3RfY2FzdDxFd2tfSGlzdG9yeV9JdGVtKj4oaXRlbSk7CisgICAg
ZWluYV9zdHJpbmdzaGFyZV9yZXBsYWNlKCZpdGVtMS0+YWx0ZXJuYXRlVGl0bGUsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvcmUtPmFsdGVybmF0ZVRpdGxlKCkudXRmOCgpLmRhdGEo
KSk7Ci0gICAgcmV0dXJuIGktPmFsdGVybmF0ZV90aXRsZTsKKyAgICByZXR1cm4gaXRlbTEtPmFs
dGVybmF0ZVRpdGxlOwogfQogCiB2b2lkIGV3a19oaXN0b3J5X2l0ZW1fdGl0bGVfYWx0ZXJuYXRl
X3NldChFd2tfSGlzdG9yeV9JdGVtKiBpdGVtLCBjb25zdCBjaGFyKiB0aXRsZSkKIHsKICAgICBF
V0tfSElTVE9SWV9JVEVNX0NPUkVfR0VUX09SX1JFVFVSTihpdGVtLCBjb3JlKTsKLSAgICBpZiAo
IWVpbmFfc3RyaW5nc2hhcmVfcmVwbGFjZSgmaXRlbS0+YWx0ZXJuYXRlX3RpdGxlLCB0aXRsZSkp
CisgICAgaWYgKCFlaW5hX3N0cmluZ3NoYXJlX3JlcGxhY2UoJml0ZW0tPmFsdGVybmF0ZVRpdGxl
LCB0aXRsZSkpCiAgICAgICAgIHJldHVybjsKICAgICBjb3JlLT5zZXRBbHRlcm5hdGVUaXRsZShX
VEY6OlN0cmluZzo6ZnJvbVVURjgodGl0bGUpKTsKIH0KQEAgLTMwNyw5ICszMDcsOSBAQCBjb25z
dCBjaGFyKiBld2tfaGlzdG9yeV9pdGVtX3VyaV9vcmlnaW5hbF9nZXQoY29uc3QgRXdrX0hpc3Rv
cnlfSXRlbSogaXRlbSkKICAgICBFV0tfSElTVE9SWV9JVEVNX0NPUkVfR0VUX09SX1JFVFVSTihp
dGVtLCBjb3JlLCAwKTsKICAgICAvLyBoaWRlIHRoZSBmb2xsb3dpbmcgb3B0aW16YXRpb24gZnJv
bSBvdXRzaWRlCiAgICAgRXdrX0hpc3RvcnlfSXRlbSogaSA9IGNvbnN0X2Nhc3Q8RXdrX0hpc3Rv
cnlfSXRlbSo+KGl0ZW0pOwotICAgIGVpbmFfc3RyaW5nc2hhcmVfcmVwbGFjZSgmaS0+b3JpZ2lu
YWxfdXJpLAorICAgIGVpbmFfc3RyaW5nc2hhcmVfcmVwbGFjZSgmaS0+b3JpZ2luYWxVcmksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmUtPm9yaWdpbmFsVVJMU3RyaW5nKCkudXRm
OCgpLmRhdGEoKSk7Ci0gICAgcmV0dXJuIGktPm9yaWdpbmFsX3VyaTsKKyAgICByZXR1cm4gaS0+
b3JpZ2luYWxVcmk7CiB9CiAKIGRvdWJsZSBld2tfaGlzdG9yeV9pdGVtX3RpbWVfbGFzdF92aXNp
dGVkX2dldChjb25zdCBFd2tfSGlzdG9yeV9JdGVtKiBpdGVtKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9lZmwvZXdrL2V3a19qcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2pz
LmNwcAppbmRleCA0MmNmZGZlYzFhNWI0ODNmNGZhMTNmNWU4YzhjNDE1ZDRlZjYwMWMxLi5mNWIz
YWU1NmI1MDVjMzM5YmJkNWZiMjkxNzBkMzdmMTJkMmM5YjU0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2VmbC9ld2svZXdrX2pzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdr
X2pzLmNwcApAQCAtODUsMTAgKzg1LDEwIEBAIHN0YXRpYyBFaW5hX0Jvb2wgZXdrX2pzX3Zhcmlh
bnRfdG9fbnB2YXJpYW50KGNvbnN0IEV3a19KU19WYXJpYW50KiBkYXRhLCBOUFZhcmlhCiAvLyBU
aGVzZSBtZXRob2RzIGFyZSB1c2VkIGJ5IE5QQUksIHRoYXRzIHRoZSByZWFzb24gdG8gdXNlIGJv
b2wgaW5zdGVhZCBvZiBFaW5hX0Jvb2wuCiBzdGF0aWMgYm9vbCBld2tfanNfcHJvcGVydHlfaGFz
KE5QT2JqZWN0KiBucE9iamVjdCwgTlBJZGVudGlmaWVyIG5hbWUpCiB7Ci0gICAgRXdrX0pTX09i
amVjdCogb2JqID0gcmVpbnRlcnByZXRfY2FzdDxFd2tfSlNfT2JqZWN0Kj4obnBPYmplY3QpOwor
ICAgIEV3a19KU19PYmplY3QqIG9iamVjdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8RXdrX0pTX09iamVj
dCo+KG5wT2JqZWN0KTsKIAogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChucE9i
amVjdCwgZmFsc2UpOwotICAgIEVJTkFfTUFHSUNfQ0hFQ0tfT1JfUkVUVVJOKG9iaiwgZmFsc2Up
OworICAgIEVJTkFfTUFHSUNfQ0hFQ0tfT1JfUkVUVVJOKG9iamVjdCwgZmFsc2UpOwogCiAgICAg
aWYgKCFfTlBOX0lkZW50aWZpZXJJc1N0cmluZyhuYW1lKSkgewogICAgICAgICBFUlIoImludCBO
UElkZW50aWZpZXIgaXMgbm90IHN1cHBvcnRlZC4iKTsKQEAgLTk2LDcgKzk2LDcgQEAgc3RhdGlj
IGJvb2wgZXdrX2pzX3Byb3BlcnR5X2hhcyhOUE9iamVjdCogbnBPYmplY3QsIE5QSWRlbnRpZmll
ciBuYW1lKQogICAgIH0KIAogICAgIGNoYXIqIHByb3BfbmFtZSA9IF9OUE5fVVRGOEZyb21JZGVu
dGlmaWVyKG5hbWUpOwotICAgIGJvb2wgZmFpbCA9IGVpbmFfaGFzaF9maW5kKG9iai0+cHJvcGVy
dGllcywgcHJvcF9uYW1lKTsgLy8gRklYTUU6IHNob3VsZCBzZWFyY2ggbWV0aG9kcyB0b28/Cisg
ICAgYm9vbCBmYWlsID0gZWluYV9oYXNoX2ZpbmQob2JqZWN0LT5wcm9wZXJ0aWVzLCBwcm9wX25h
bWUpOyAvLyBGSVhNRTogc2hvdWxkIHNlYXJjaCBtZXRob2RzIHRvbz8KICAgICBmcmVlKHByb3Bf
bmFtZSk7CiAKICAgICByZXR1cm4gZmFpbDsKQEAgLTEwNCwxMyArMTA0LDEzIEBAIHN0YXRpYyBi
b29sIGV3a19qc19wcm9wZXJ0eV9oYXMoTlBPYmplY3QqIG5wT2JqZWN0LCBOUElkZW50aWZpZXIg
bmFtZSkKIAogc3RhdGljIGJvb2wgZXdrX2pzX3Byb3BlcnR5X2dldChOUE9iamVjdCogbnBPYmpl
Y3QsIE5QSWRlbnRpZmllciBuYW1lLCBOUFZhcmlhbnQqIHJlc3VsdCkKIHsKLSAgICBFd2tfSlNf
T2JqZWN0KiBvYmogPSByZWludGVycHJldF9jYXN0PEV3a19KU19PYmplY3QqPihucE9iamVjdCk7
CisgICAgRXdrX0pTX09iamVjdCogb2JqZWN0ID0gcmVpbnRlcnByZXRfY2FzdDxFd2tfSlNfT2Jq
ZWN0Kj4obnBPYmplY3QpOwogICAgIEV3a19KU19WYXJpYW50KiB2YWx1ZTsKICAgICBFd2tfSlNf
UHJvcGVydHkqIHByb3A7CiAgICAgYm9vbCBmYWlsID0gZmFsc2U7CiAKICAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTl9WQUwobnBPYmplY3QsIGZhbHNlKTsKLSAgICBFSU5BX01BR0lDX0NI
RUNLX09SX1JFVFVSTihvYmosIGZhbHNlKTsKKyAgICBFSU5BX01BR0lDX0NIRUNLX09SX1JFVFVS
TihvYmplY3QsIGZhbHNlKTsKIAogICAgIGlmICghX05QTl9JZGVudGlmaWVySXNTdHJpbmcobmFt
ZSkpIHsKICAgICAgICAgRVJSKCJpbnQgTlBJZGVudGlmaWVyIGlzIG5vdCBzdXBwb3J0ZWQuIik7
CkBAIC0xMjMsMTkgKzEyMywxOSBAQCBzdGF0aWMgYm9vbCBld2tfanNfcHJvcGVydHlfZ2V0KE5Q
T2JqZWN0KiBucE9iamVjdCwgTlBJZGVudGlmaWVyIG5hbWUsIE5QVmFyaWFudAogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgcHJvcCA9IHN0YXRpY19jYXN0PEV3a19KU19Qcm9w
ZXJ0eSo+KGVpbmFfaGFzaF9maW5kKG9iai0+Y2xzLT5wcm9wZXJ0aWVzLCBuYW1lKSk7CisgICAg
cHJvcCA9IHN0YXRpY19jYXN0PEV3a19KU19Qcm9wZXJ0eSo+KGVpbmFfaGFzaF9maW5kKG9iamVj
dC0+Y2xzLT5wcm9wZXJ0aWVzLCBuYW1lKSk7CiAgICAgaWYgKHByb3AgJiYgcHJvcC0+Z2V0KSB7
IC8vIENsYXNzIGhhcyBwcm9wZXJ0eSBhbmQgcHJvcGVydHkgaGFzIGdldHRlci4KLSAgICAgICAg
ZmFpbCA9IHByb3AtPmdldChvYmosIHByb3AtPm5hbWUsIHZhbHVlKTsKKyAgICAgICAgZmFpbCA9
IHByb3AtPmdldChvYmplY3QsIHByb3AtPm5hbWUsIHZhbHVlKTsKICAgICAgICAgaWYgKCFmYWls
KQogICAgICAgICAgICAgZmFpbCA9IGV3a19qc192YXJpYW50X3RvX25wdmFyaWFudCh2YWx1ZSwg
cmVzdWx0KTsKLSAgICB9IGVsc2UgaWYgKG9iai0+Y2xzLT5kZWZhdWx0X3Byb3AuZ2V0KSB7IC8v
IERlZmF1bHQgZ2V0dGVyIGV4aXN0cy4KLSAgICAgICAgZmFpbCA9IG9iai0+Y2xzLT5kZWZhdWx0
X3Byb3AuZ2V0KG9iaiwgcHJvcC0+bmFtZSwgdmFsdWUpOworICAgIH0gZWxzZSBpZiAob2JqZWN0
LT5jbHMtPmRlZmF1bHRfcHJvcC5nZXQpIHsgLy8gRGVmYXVsdCBnZXR0ZXIgZXhpc3RzLgorICAg
ICAgICBmYWlsID0gb2JqZWN0LT5jbHMtPmRlZmF1bHRfcHJvcC5nZXQob2JqZWN0LCBwcm9wLT5u
YW1lLCB2YWx1ZSk7CiAgICAgICAgIGlmICghZmFpbCkKICAgICAgICAgICAgIGZhaWwgPSBld2tf
anNfdmFyaWFudF90b19ucHZhcmlhbnQodmFsdWUsIHJlc3VsdCk7CiAgICAgfSBlbHNlIHsgLy8g
RmFsbGJhY2sgdG8gb2JqZWN0cyBoYXNoIG1hcC4KICAgICAgICAgY2hhciogcHJvcF9uYW1lID0g
X05QTl9VVEY4RnJvbUlkZW50aWZpZXIobmFtZSk7CiAgICAgICAgIGZyZWUodmFsdWUpOwotICAg
ICAgICB2YWx1ZSA9IHN0YXRpY19jYXN0PEV3a19KU19WYXJpYW50Kj4oZWluYV9oYXNoX2ZpbmQo
b2JqLT5wcm9wZXJ0aWVzLCBwcm9wX25hbWUpKTsKKyAgICAgICAgdmFsdWUgPSBzdGF0aWNfY2Fz
dDxFd2tfSlNfVmFyaWFudCo+KGVpbmFfaGFzaF9maW5kKG9iamVjdC0+cHJvcGVydGllcywgcHJv
cF9uYW1lKSk7CiAgICAgICAgIGZyZWUocHJvcF9uYW1lKTsKICAgICAgICAgaWYgKHZhbHVlKQog
ICAgICAgICAgICAgcmV0dXJuIGV3a19qc192YXJpYW50X3RvX25wdmFyaWFudCh2YWx1ZSwgcmVz
dWx0KTsKQEAgLTE0NywxMyArMTQ3LDEzIEBAIHN0YXRpYyBib29sIGV3a19qc19wcm9wZXJ0eV9n
ZXQoTlBPYmplY3QqIG5wT2JqZWN0LCBOUElkZW50aWZpZXIgbmFtZSwgTlBWYXJpYW50CiAKIHN0
YXRpYyBib29sIGV3a19qc19wcm9wZXJ0eV9zZXQoTlBPYmplY3QqIG5wT2JqZWN0LCBOUElkZW50
aWZpZXIgbmFtZSwgY29uc3QgTlBWYXJpYW50KiBucFZhbHVlKQogewotICAgIEV3a19KU19PYmpl
Y3QqIG9iaiA9IHJlaW50ZXJwcmV0X2Nhc3Q8RXdrX0pTX09iamVjdCo+KG5wT2JqZWN0KTsKKyAg
ICBFd2tfSlNfT2JqZWN0KiBvYmplY3QgPSByZWludGVycHJldF9jYXN0PEV3a19KU19PYmplY3Qq
PihucE9iamVjdCk7CiAgICAgRXdrX0pTX1ZhcmlhbnQqIHZhbHVlOwogICAgIEV3a19KU19Qcm9w
ZXJ0eSogcHJvcDsKICAgICBib29sIGZhaWwgPSBmYWxzZTsKIAogICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOX1ZBTChucE9iaiwgZmFsc2UpOwotICAgIEVJTkFfTUFHSUNfQ0hFQ0tfT1Jf
UkVUVVJOKG9iaiwgZmFsc2UpOworICAgIEVJTkFfTUFHSUNfQ0hFQ0tfT1JfUkVUVVJOKG9iamVj
dCwgZmFsc2UpOwogCiAgICAgaWYgKCFfTlBOX0lkZW50aWZpZXJJc1N0cmluZyhuYW1lKSkgewog
ICAgICAgICBFUlIoImludCBOUElkZW50aWZpZXIgaXMgbm90IHN1cHBvcnRlZC4iKTsKQEAgLTE2
OCwxMyArMTY4LDEzIEBAIHN0YXRpYyBib29sIGV3a19qc19wcm9wZXJ0eV9zZXQoTlBPYmplY3Qq
IG5wT2JqZWN0LCBOUElkZW50aWZpZXIgbmFtZSwgY29uc3QgTlBWCiAKICAgICBld2tfanNfbnB2
YXJpYW50X3RvX3ZhcmlhbnQodmFsdWUsIG5wVmFsdWUpOwogICAgIGNoYXIqIHByb3BfbmFtZSA9
IF9OUE5fVVRGOEZyb21JZGVudGlmaWVyKG5hbWUpOwotICAgIHByb3AgPSBzdGF0aWNfY2FzdDxF
d2tfSlNfUHJvcGVydHkqPihlaW5hX2hhc2hfZmluZChvYmotPmNscy0+cHJvcGVydGllcywgcHJv
cF9uYW1lKSk7CisgICAgcHJvcCA9IHN0YXRpY19jYXN0PEV3a19KU19Qcm9wZXJ0eSo+KGVpbmFf
aGFzaF9maW5kKG9iamVjdC0+Y2xzLT5wcm9wZXJ0aWVzLCBwcm9wX25hbWUpKTsKICAgICBpZiAo
cHJvcCAmJiBwcm9wLT5zZXQpCi0gICAgICAgIGZhaWwgPSBwcm9wLT5zZXQob2JqLCBwcm9wLT5u
YW1lLCB2YWx1ZSk7IC8vIENsYXNzIGhhcyBwcm9wZXJ0eSBhbmQgcHJvcGVydHkgaGFzIHNldHRl
ci4KLSAgICBlbHNlIGlmIChvYmotPmNscy0+ZGVmYXVsdF9wcm9wLnNldCkKLSAgICAgICAgZmFp
bCA9IG9iai0+Y2xzLT5kZWZhdWx0X3Byb3Auc2V0KG9iaiwgcHJvcF9uYW1lLCB2YWx1ZSk7IC8v
IERlZmF1bHQgZ2V0dGVyIGV4aXN0cy4KKyAgICAgICAgZmFpbCA9IHByb3AtPnNldChvYmplY3Qs
IHByb3AtPm5hbWUsIHZhbHVlKTsgLy8gQ2xhc3MgaGFzIHByb3BlcnR5IGFuZCBwcm9wZXJ0eSBo
YXMgc2V0dGVyLgorICAgIGVsc2UgaWYgKG9iamVjdC0+Y2xzLT5kZWZhdWx0X3Byb3Auc2V0KQor
ICAgICAgICBmYWlsID0gb2JqZWN0LT5jbHMtPmRlZmF1bHRfcHJvcC5zZXQob2JqZWN0LCBwcm9w
X25hbWUsIHZhbHVlKTsgLy8gRGVmYXVsdCBnZXR0ZXIgZXhpc3RzLgogICAgIGVsc2UgeyAvLyBG
YWxsYmFjayB0byBvYmplY3RzIGhhc2ggbWFwLgotICAgICAgICB2b2lkKiBvbGQgPSBlaW5hX2hh
c2hfc2V0KG9iai0+cHJvcGVydGllcywgcHJvcF9uYW1lLCB2YWx1ZSk7CisgICAgICAgIHZvaWQq
IG9sZCA9IGVpbmFfaGFzaF9zZXQob2JqZWN0LT5wcm9wZXJ0aWVzLCBwcm9wX25hbWUsIHZhbHVl
KTsKICAgICAgICAgZnJlZShvbGQpOwogICAgICAgICBmYWlsID0gdHJ1ZTsKICAgICB9CkBAIC0x
ODUsMTIgKzE4NSwxMiBAQCBzdGF0aWMgYm9vbCBld2tfanNfcHJvcGVydHlfc2V0KE5QT2JqZWN0
KiBucE9iamVjdCwgTlBJZGVudGlmaWVyIG5hbWUsIGNvbnN0IE5QVgogCiBzdGF0aWMgYm9vbCBl
d2tfanNfcHJvcGVydHlfcmVtb3ZlKE5QT2JqZWN0KiBucE9iamVjdCwgTlBJZGVudGlmaWVyIG5h
bWUpCiB7Ci0gICAgRXdrX0pTX09iamVjdCogb2JqID0gcmVpbnRlcnByZXRfY2FzdDxFd2tfSlNf
T2JqZWN0Kj4obnBPYmplY3QpOworICAgIEV3a19KU19PYmplY3QqIG9iamVjdCA9IHJlaW50ZXJw
cmV0X2Nhc3Q8RXdrX0pTX09iamVjdCo+KG5wT2JqZWN0KTsKICAgICBFd2tfSlNfUHJvcGVydHkq
IHByb3A7CiAgICAgYm9vbCBmYWlsID0gZmFsc2U7CiAKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTl9WQUwobnBPYmplY3QsIGZhbHNlKTsKLSAgICBFSU5BX01BR0lDX0NIRUNLX09SX1JF
VFVSTihvYmosIGZhbHNlKTsKKyAgICBFSU5BX01BR0lDX0NIRUNLX09SX1JFVFVSTihvYmplY3Qs
IGZhbHNlKTsKIAogICAgIGlmICghX05QTl9JZGVudGlmaWVySXNTdHJpbmcobmFtZSkpIHsKICAg
ICAgICAgRVJSKCJpbnQgTlBJZGVudGlmaWVyIGlzIG5vdCBzdXBwb3J0ZWQuIik7CkBAIC0xOTgs
MTMgKzE5OCwxMyBAQCBzdGF0aWMgYm9vbCBld2tfanNfcHJvcGVydHlfcmVtb3ZlKE5QT2JqZWN0
KiBucE9iamVjdCwgTlBJZGVudGlmaWVyIG5hbWUpCiAgICAgfQogCiAgICAgY2hhciogcHJvcF9u
YW1lID0gX05QTl9VVEY4RnJvbUlkZW50aWZpZXIobmFtZSk7Ci0gICAgcHJvcCA9IHN0YXRpY19j
YXN0PEV3a19KU19Qcm9wZXJ0eSo+KGVpbmFfaGFzaF9maW5kKG9iai0+Y2xzLT5wcm9wZXJ0aWVz
LCBwcm9wX25hbWUpKTsKKyAgICBwcm9wID0gc3RhdGljX2Nhc3Q8RXdrX0pTX1Byb3BlcnR5Kj4o
ZWluYV9oYXNoX2ZpbmQob2JqZWN0LT5jbHMtPnByb3BlcnRpZXMsIHByb3BfbmFtZSkpOwogICAg
IGlmIChwcm9wICYmIHByb3AtPmRlbCkKLSAgICAgICAgZmFpbCA9IHByb3AtPmRlbChvYmosIHBy
b3AtPm5hbWUpOyAvLyBDbGFzcyBoYXMgcHJvcGVydHkgYW5kIHByb3BlcnR5IGhhcyBnZXR0ZXIu
Ci0gICAgZWxzZSBpZiAob2JqLT5jbHMtPmRlZmF1bHRfcHJvcC5kZWwpCi0gICAgICAgIGZhaWwg
PSBvYmotPmNscy0+ZGVmYXVsdF9wcm9wLmRlbChvYmosIHByb3BfbmFtZSk7CisgICAgICAgIGZh
aWwgPSBwcm9wLT5kZWwob2JqZWN0LCBwcm9wLT5uYW1lKTsgLy8gQ2xhc3MgaGFzIHByb3BlcnR5
IGFuZCBwcm9wZXJ0eSBoYXMgZ2V0dGVyLgorICAgIGVsc2UgaWYgKG9iamVjdC0+Y2xzLT5kZWZh
dWx0X3Byb3AuZGVsKQorICAgICAgICBmYWlsID0gb2JqZWN0LT5jbHMtPmRlZmF1bHRfcHJvcC5k
ZWwob2JqZWN0LCBwcm9wX25hbWUpOwogICAgIGVsc2UKLSAgICAgICAgZmFpbCA9IGVpbmFfaGFz
aF9kZWwob2JqLT5wcm9wZXJ0aWVzLCBwcm9wX25hbWUsIDApOworICAgICAgICBmYWlsID0gZWlu
YV9oYXNoX2RlbChvYmplY3QtPnByb3BlcnRpZXMsIHByb3BfbmFtZSwgMCk7CiAKICAgICBmcmVl
KHByb3BfbmFtZSk7CiAgICAgcmV0dXJuIGZhaWw7CkBAIC0yMTIsMjIgKzIxMiwyMiBAQCBzdGF0
aWMgYm9vbCBld2tfanNfcHJvcGVydHlfcmVtb3ZlKE5QT2JqZWN0KiBucE9iamVjdCwgTlBJZGVu
dGlmaWVyIG5hbWUpCiAKIHN0YXRpYyBib29sIGV3a19qc19wcm9wZXJ0aWVzX2VudW1lcmF0ZShO
UE9iamVjdCogbnBPYmplY3QsIE5QSWRlbnRpZmllcioqIHZhbHVlLCB1aW50MzJfdCogY291bnQp
CiB7Ci0gICAgRXdrX0pTX09iamVjdCogb2JqID0gcmVpbnRlcnByZXRfY2FzdDxFd2tfSlNfT2Jq
ZWN0Kj4obnBPYmplY3QpOworICAgIEV3a19KU19PYmplY3QqIG9iamVjdCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8RXdrX0pTX09iamVjdCo+KG5wT2JqZWN0KTsKICAgICBFaW5hX0l0ZXJhdG9yKiBpdDsK
ICAgICBjaGFyKiBrZXk7CiAgICAgaW50IGkgPSAwOwogCiAgICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk5fVkFMKG5wT2JqZWN0LCBmYWxzZSk7Ci0gICAgRUlOQV9NQUdJQ19DSEVDS19PUl9S
RVRVUk4ob2JqLCBmYWxzZSk7CisgICAgRUlOQV9NQUdJQ19DSEVDS19PUl9SRVRVUk4ob2JqZWN0
LCBmYWxzZSk7CiAKLSAgICAqY291bnQgPSBlaW5hX2hhc2hfcG9wdWxhdGlvbihvYmotPnByb3Bl
cnRpZXMpOworICAgICpjb3VudCA9IGVpbmFfaGFzaF9wb3B1bGF0aW9uKG9iamVjdC0+cHJvcGVy
dGllcyk7CiAgICAgKnZhbHVlID0gc3RhdGljX2Nhc3Q8TlBJZGVudGlmaWVyKj4obWFsbG9jKHNp
emVvZihOUElkZW50aWZpZXIpICogKmNvdW50KSk7CiAgICAgaWYgKCEqdmFsdWUpIHsKICAgICAg
ICAgRVJSKCJDb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBOUElkZW50aWZpZXIiKTsKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAotICAgIGl0ID0gZWluYV9oYXNoX2l0ZXJhdG9y
X2tleV9uZXcob2JqLT5wcm9wZXJ0aWVzKTsKKyAgICBpdCA9IGVpbmFfaGFzaF9pdGVyYXRvcl9r
ZXlfbmV3KG9iamVjdC0+cHJvcGVydGllcyk7CiAgICAgRUlOQV9JVEVSQVRPUl9GT1JFQUNIKGl0
LCBrZXkpCiAgICAgICAgICgqdmFsdWUpW2krK10gPSBfTlBOX0dldFN0cmluZ0lkZW50aWZpZXIo
a2V5KTsKIApAQCAtMjM3LDM0ICsyMzcsMzQgQEAgc3RhdGljIGJvb2wgZXdrX2pzX3Byb3BlcnRp
ZXNfZW51bWVyYXRlKE5QT2JqZWN0KiBucE9iamVjdCwgTlBJZGVudGlmaWVyKiogdmFsdWUKIAog
c3RhdGljIGJvb2wgZXdrX2pzX21ldGhvZF9oYXMoTlBPYmplY3QqIG5wT2JqZWN0LCBOUElkZW50
aWZpZXIgbmFtZSkKIHsKLSAgICBFd2tfSlNfT2JqZWN0KiBvYmogPSByZWludGVycHJldF9jYXN0
PEV3a19KU19PYmplY3QqPihucE9iamVjdCk7CisgICAgRXdrX0pTX09iamVjdCogb2JqZWN0ID0g
cmVpbnRlcnByZXRfY2FzdDxFd2tfSlNfT2JqZWN0Kj4obnBPYmplY3QpOwogCiAgICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKG5wT2JqZWN0LCBmYWxzZSk7Ci0gICAgRUlOQV9NQUdJ
Q19DSEVDS19PUl9SRVRVUk4ob2JqLCBmYWxzZSk7CisgICAgRUlOQV9NQUdJQ19DSEVDS19PUl9S
RVRVUk4ob2JqZWN0LCBmYWxzZSk7CiAKICAgICBpZiAoIV9OUE5fSWRlbnRpZmllcklzU3RyaW5n
KG5hbWUpKSB7CiAgICAgICAgIEVSUigiaW50IE5QSWRlbnRpZmllciBpcyBub3Qgc3VwcG9ydGVk
LiIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQotICAgIHJldHVybiBlaW5hX2hhc2hf
ZmluZChvYmotPmNscy0+bWV0aG9kcywgbmFtZSk7IC8vIFJldHVybnMgcG9pbnRlciBpZiBmb3Vu
ZCh0cnVlKSwgMChmYWxzZSkgb3RoZXJ3aXNlLgorICAgIHJldHVybiBlaW5hX2hhc2hfZmluZChv
YmplY3QtPmNscy0+bWV0aG9kcywgbmFtZSk7IC8vIFJldHVybnMgcG9pbnRlciBpZiBmb3VuZCh0
cnVlKSwgMChmYWxzZSkgb3RoZXJ3aXNlLgogfQogCiBzdGF0aWMgYm9vbCBld2tfanNfbWV0aG9k
X2ludm9rZShOUE9iamVjdCogbnBPYmplY3QsIE5QSWRlbnRpZmllciBuYW1lLCBjb25zdCBOUFZh
cmlhbnQqIG5wQXJncywgdWludDMyX3QgbnBBcmdDb3VudCwgTlBWYXJpYW50KiByZXN1bHQpCiB7
Ci0gICAgRXdrX0pTX09iamVjdCogb2JqID0gcmVpbnRlcnByZXRfY2FzdDxFd2tfSlNfT2JqZWN0
Kj4obnBPYmplY3QpOworICAgIEV3a19KU19PYmplY3QqIG9iamVjdCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8RXdrX0pTX09iamVjdCo+KG5wT2JqZWN0KTsKICAgICBFd2tfSlNfTWV0aG9kKiBtZXRob2Q7
CiAgICAgRXdrX0pTX1ZhcmlhbnQqIGFyZ3M7CiAgICAgRXdrX0pTX1ZhcmlhbnQqIHJldF92YWw7
CiAKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwobnBPYmplY3QsIGZhbHNlKTsK
LSAgICBFSU5BX01BR0lDX0NIRUNLX09SX1JFVFVSTihvYmosIGZhbHNlKTsKKyAgICBFSU5BX01B
R0lDX0NIRUNLX09SX1JFVFVSTihvYmplY3QsIGZhbHNlKTsKIAogICAgIGlmICghX05QTl9JZGVu
dGlmaWVySXNTdHJpbmcobmFtZSkpIHsKICAgICAgICAgRVJSKCJpbnQgTlBJZGVudGlmaWVyIGlz
IG5vdCBzdXBwb3J0ZWQuIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBt
ZXRob2QgPSBzdGF0aWNfY2FzdDxFd2tfSlNfTWV0aG9kKj4oZWluYV9oYXNoX2ZpbmQob2JqLT5j
bHMtPm1ldGhvZHMsIG5hbWUpKTsKKyAgICBtZXRob2QgPSBzdGF0aWNfY2FzdDxFd2tfSlNfTWV0
aG9kKj4oZWluYV9oYXNoX2ZpbmQob2JqZWN0LT5jbHMtPm1ldGhvZHMsIG5hbWUpKTsKICAgICBp
ZiAoIW1ldGhvZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0yNzYsNyArMjc2LDcgQEAg
c3RhdGljIGJvb2wgZXdrX2pzX21ldGhvZF9pbnZva2UoTlBPYmplY3QqIG5wT2JqZWN0LCBOUElk
ZW50aWZpZXIgbmFtZSwgY29uc3QgTlAKIAogICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBu
cEFyZ0NvdW50OyBpKyspCiAgICAgICAgIGV3a19qc19ucHZhcmlhbnRfdG9fdmFyaWFudCgmYXJn
c1tpXSwgJm5wQXJnc1tpXSk7Ci0gICAgcmV0X3ZhbCA9IG1ldGhvZC0+aW52b2tlKG9iaiwgYXJn
cywgbnBBcmdDb3VudCk7CisgICAgcmV0X3ZhbCA9IG1ldGhvZC0+aW52b2tlKG9iamVjdCwgYXJn
cywgbnBBcmdDb3VudCk7CiAgICAgZXdrX2pzX3ZhcmlhbnRfdG9fbnB2YXJpYW50KHJldF92YWws
IHJlc3VsdCk7CiAKICAgICBld2tfanNfdmFyaWFudF9mcmVlKHJldF92YWwpOwpAQCAtMzkzLDcg
KzM5Myw3IEBAIHN0YXRpYyBFd2tfSlNfT2JqZWN0KiBld2tfanNfbnBvYmplY3RfdG9fb2JqZWN0
KE5QT2JqZWN0KiBucE9iamVjdCkKICAgICBOUElkZW50aWZpZXIqIHZhbHVlczsKICAgICB1aW50
MzJfdCBucF9wcm9wc19jb3VudDsKICAgICBFd2tfSlNfQ2xhc3MqIGNsczsKLSAgICBFd2tfSlNf
T2JqZWN0KiBvYmo7CisgICAgRXdrX0pTX09iamVjdCogb2JqZWN0OwogICAgIEVpbmFfSXRlcmF0
b3IqIGl0OwogICAgIEV3a19KU19Qcm9wZXJ0eSogcHJvcDsKICAgICBKYXZhU2NyaXB0T2JqZWN0
KiBqc287CkBAIC00MzYsNDIgKzQzNiw0MiBAQCBzdGF0aWMgRXdrX0pTX09iamVjdCogZXdrX2pz
X25wb2JqZWN0X3RvX29iamVjdChOUE9iamVjdCogbnBPYmplY3QpCiAgICAgfQogCiAgICAgLy8g
Q2FuJ3QgdXNlIGV3a19qc19vYmplY3RfbmV3KGNscykgYmVjYXVzZSBpdCBleHBlY3RzIGNscy0+
bWV0YSB0byBleGlzdC4KLSAgICBvYmogPSBzdGF0aWNfY2FzdDxFd2tfSlNfT2JqZWN0Kj4obWFs
bG9jKHNpemVvZihFd2tfSlNfT2JqZWN0KSkpOwotICAgIGlmICghb2JqKSB7CisgICAgb2JqZWN0
ID0gc3RhdGljX2Nhc3Q8RXdrX0pTX09iamVjdCo+KG1hbGxvYyhzaXplb2YoRXdrX0pTX09iamVj
dCkpKTsKKyAgICBpZiAoIW9iamVjdCkgewogICAgICAgICBFUlIoIkNvdWxkIG5vdCBhbGxvY2F0
ZSBtZW1vcnkgZm9yIGV3a19qc19vYmplY3QiKTsKICAgICAgICAgZ290byBlcnJvcjsKICAgICB9
CiAKICAgICBmcmVlKHZhbHVlcyk7Ci0gICAgRUlOQV9NQUdJQ19TRVQob2JqLCBFV0tfSlNfT0JK
RUNUX01BR0lDKTsKLSAgICBvYmotPm5hbWUgPSAwOwotICAgIG9iai0+Y2xzID0gY2xzOwotICAg
IG9iai0+dmlldyA9IDA7CisgICAgRUlOQV9NQUdJQ19TRVQob2JqZWN0LCBFV0tfSlNfT0JKRUNU
X01BR0lDKTsKKyAgICBvYmplY3QtPm5hbWUgPSAwOworICAgIG9iamVjdC0+Y2xzID0gY2xzOwor
ICAgIG9iamVjdC0+dmlldyA9IDA7CiAKICAgICBqc28gPSByZWludGVycHJldF9jYXN0PEphdmFT
Y3JpcHRPYmplY3QqPihucE9iamVjdCk7CiAgICAgaWYgKCFzdHJjbXAoIkFycmF5IiwganNvLT5p
bXAtPmNsYXNzTmFtZSgpLmFzY2lpKCkuZGF0YSgpKSkKLSAgICAgICAgb2JqLT50eXBlID0gRVdL
X0pTX09CSkVDVF9BUlJBWTsKKyAgICAgICAgb2JqZWN0LT50eXBlID0gRVdLX0pTX09CSkVDVF9B
UlJBWTsKICAgICBlbHNlIGlmICghc3RyY21wKCJGdW5jdGlvbiIsIGpzby0+aW1wLT5jbGFzc05h
bWUoKS5hc2NpaSgpLmRhdGEoKSkpCi0gICAgICAgIG9iai0+dHlwZSA9IEVXS19KU19PQkpFQ1Rf
RlVOQ1RJT047CisgICAgICAgIG9iamVjdC0+dHlwZSA9IEVXS19KU19PQkpFQ1RfRlVOQ1RJT047
CiAgICAgZWxzZQotICAgICAgICBvYmotPnR5cGUgPSBFV0tfSlNfT0JKRUNUX09CSkVDVDsKKyAg
ICAgICAgb2JqZWN0LT50eXBlID0gRVdLX0pTX09CSkVDVF9PQkpFQ1Q7CiAKICAgICBpZiAoZWlu
YV9oYXNoX3BvcHVsYXRpb24oY2xzLT5wcm9wZXJ0aWVzKSA8IDI1KQotICAgICAgICBvYmotPnBy
b3BlcnRpZXMgPSBlaW5hX2hhc2hfc3RyaW5nX3NtYWxsX25ldygwKTsKKyAgICAgICAgb2JqZWN0
LT5wcm9wZXJ0aWVzID0gZWluYV9oYXNoX3N0cmluZ19zbWFsbF9uZXcoMCk7CiAgICAgZWxzZQot
ICAgICAgICBvYmotPnByb3BlcnRpZXMgPSBlaW5hX2hhc2hfc3RyaW5nX3N1cGVyZmFzdF9uZXco
MCk7CisgICAgICAgIG9iamVjdC0+cHJvcGVydGllcyA9IGVpbmFfaGFzaF9zdHJpbmdfc3VwZXJm
YXN0X25ldygwKTsKIAogICAgIGl0ID0gZWluYV9oYXNoX2l0ZXJhdG9yX2RhdGFfbmV3KGNscy0+
cHJvcGVydGllcyk7CiAgICAgRUlOQV9JVEVSQVRPUl9GT1JFQUNIKGl0LCBwcm9wKSB7CiAgICAg
ICAgIGNvbnN0IGNoYXIqIGtleSA9IHByb3AtPm5hbWU7CiAgICAgICAgIEV3a19KU19WYXJpYW50
KiB2YWx1ZSA9ICZwcm9wLT52YWx1ZTsKLSAgICAgICAgZWluYV9oYXNoX2FkZChvYmotPnByb3Bl
cnRpZXMsIGtleSwgdmFsdWUpOworICAgICAgICBlaW5hX2hhc2hfYWRkKG9iamVjdC0+cHJvcGVy
dGllcywga2V5LCB2YWx1ZSk7CiAgICAgfQogCiAgICAgZWluYV9pdGVyYXRvcl9mcmVlKGl0KTsK
LSAgICBvYmotPmJhc2UgPSAqcmVpbnRlcnByZXRfY2FzdDxKYXZhU2NyaXB0T2JqZWN0Kj4obnBP
YmplY3QpOworICAgIG9iamVjdC0+YmFzZSA9ICpyZWludGVycHJldF9jYXN0PEphdmFTY3JpcHRP
YmplY3QqPihucE9iamVjdCk7CiAKLSAgICByZXR1cm4gb2JqOworICAgIHJldHVybiBvYmplY3Q7
CiAKIGVycm9yOgogICAgIGV3a19qc19jbGFzc19mcmVlKGNscyk7CkBAIC01MjcsMzcgKzUyNywz
NyBAQCBzdGF0aWMgRWluYV9Cb29sIGV3a19qc19ucHZhcmlhbnRfdG9fdmFyaWFudChFd2tfSlNf
VmFyaWFudCogZGF0YSwgY29uc3QgTlBWYXJpYQogCiBFd2tfSlNfT2JqZWN0KiBld2tfanNfb2Jq
ZWN0X25ldyhjb25zdCBFd2tfSlNfQ2xhc3NfTWV0YSoganNNZXRhQ2xhc3MpCiB7Ci0gICAgRXdr
X0pTX09iamVjdCogb2JqOworICAgIEV3a19KU19PYmplY3QqIG9iamVjdDsKIAogICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChtZXRhX2NscywgMCk7CiAKLSAgICBvYmogPSBzdGF0
aWNfY2FzdDxFd2tfSlNfT2JqZWN0Kj4obWFsbG9jKHNpemVvZihFd2tfSlNfT2JqZWN0KSkpOwot
ICAgIGlmICghb2JqKSB7CisgICAgb2JqZWN0ID0gc3RhdGljX2Nhc3Q8RXdrX0pTX09iamVjdCo+
KG1hbGxvYyhzaXplb2YoRXdrX0pTX09iamVjdCkpKTsKKyAgICBpZiAoIW9iamVjdCkgewogICAg
ICAgICBFUlIoIkNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGV3a19qc19vYmplY3QiKTsK
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgRUlOQV9NQUdJQ19TRVQob2JqLCBFV0tf
SlNfT0JKRUNUX01BR0lDKTsKLSAgICBvYmotPmNscyA9IGV3a19qc19jbGFzc19uZXcoanNNZXRh
Q2xhc3MpOwotICAgIG9iai0+dmlldyA9IDA7Ci0gICAgb2JqLT5uYW1lID0gMDsKLSAgICBvYmot
PnR5cGUgPSBFV0tfSlNfT0JKRUNUX09CSkVDVDsKKyAgICBFSU5BX01BR0lDX1NFVChvYmplY3Qs
IEVXS19KU19PQkpFQ1RfTUFHSUMpOworICAgIG9iamVjdC0+Y2xzID0gZXdrX2pzX2NsYXNzX25l
dyhqc01ldGFDbGFzcyk7CisgICAgb2JqZWN0LT52aWV3ID0gMDsKKyAgICBvYmplY3QtPm5hbWUg
PSAwOworICAgIG9iamVjdC0+dHlwZSA9IEVXS19KU19PQkpFQ1RfT0JKRUNUOwogCi0gICAgaWYg
KGVpbmFfaGFzaF9wb3B1bGF0aW9uKG9iai0+Y2xzLT5wcm9wZXJ0aWVzKSA8IDI1KQotICAgICAg
ICBvYmotPnByb3BlcnRpZXMgPSBlaW5hX2hhc2hfc3RyaW5nX3NtYWxsX25ldyhyZWludGVycHJl
dF9jYXN0PEVpbmFfRnJlZV9DYj4oZXdrX2pzX3ZhcmlhbnRfZnJlZSkpOworICAgIGlmIChlaW5h
X2hhc2hfcG9wdWxhdGlvbihvYmplY3QtPmNscy0+cHJvcGVydGllcykgPCAyNSkKKyAgICAgICAg
b2JqZWN0LT5wcm9wZXJ0aWVzID0gZWluYV9oYXNoX3N0cmluZ19zbWFsbF9uZXcocmVpbnRlcnBy
ZXRfY2FzdDxFaW5hX0ZyZWVfQ2I+KGV3a19qc192YXJpYW50X2ZyZWUpKTsKICAgICBlbHNlCi0g
ICAgICAgIG9iai0+cHJvcGVydGllcyA9IGVpbmFfaGFzaF9zdHJpbmdfc3VwZXJmYXN0X25ldyhy
ZWludGVycHJldF9jYXN0PEVpbmFfRnJlZV9DYj4oZXdrX2pzX3ZhcmlhbnRfZnJlZSkpOworICAg
ICAgICBvYmplY3QtPnByb3BlcnRpZXMgPSBlaW5hX2hhc2hfc3RyaW5nX3N1cGVyZmFzdF9uZXco
cmVpbnRlcnByZXRfY2FzdDxFaW5hX0ZyZWVfQ2I+KGV3a19qc192YXJpYW50X2ZyZWUpKTsKIAot
ICAgIGZvciAoaW50IGkgPSAwOyBvYmotPmNscy0+bWV0YS0+cHJvcGVydGllcyAmJiBvYmotPmNs
cy0+bWV0YS0+cHJvcGVydGllc1tpXS5uYW1lOyBpKyspIHsKLSAgICAgICAgRXdrX0pTX1Byb3Bl
cnR5IHByb3AgPSBvYmotPmNscy0+bWV0YS0+cHJvcGVydGllc1tpXTsKLSAgICAgICAgY29uc3Qg
Y2hhcioga2V5ID0gb2JqLT5jbHMtPm1ldGEtPnByb3BlcnRpZXNbaV0ubmFtZTsKKyAgICBmb3Ig
KGludCBpID0gMDsgb2JqZWN0LT5jbHMtPm1ldGEtPnByb3BlcnRpZXMgJiYgb2JqZWN0LT5jbHMt
Pm1ldGEtPnByb3BlcnRpZXNbaV0ubmFtZTsgaSsrKSB7CisgICAgICAgIEV3a19KU19Qcm9wZXJ0
eSBwcm9wID0gb2JqZWN0LT5jbHMtPm1ldGEtPnByb3BlcnRpZXNbaV07CisgICAgICAgIGNvbnN0
IGNoYXIqIGtleSA9IG9iamVjdC0+Y2xzLT5tZXRhLT5wcm9wZXJ0aWVzW2ldLm5hbWU7CiAgICAg
ICAgIEV3a19KU19WYXJpYW50KiB2YWx1ZSA9IHN0YXRpY19jYXN0PEV3a19KU19WYXJpYW50Kj4o
bWFsbG9jKHNpemVvZihFd2tfSlNfVmFyaWFudCkpKTsKICAgICAgICAgaWYgKCF2YWx1ZSkgewog
ICAgICAgICAgICAgRVJSKCJDb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBld2tfanNfdmFy
aWFudCIpOwogICAgICAgICAgICAgZ290byBlcnJvcjsKICAgICAgICAgfQogICAgICAgICBpZiAo
cHJvcC5nZXQpCi0gICAgICAgICAgICBwcm9wLmdldChvYmosIGtleSwgdmFsdWUpOworICAgICAg
ICAgICAgcHJvcC5nZXQob2JqZWN0LCBrZXksIHZhbHVlKTsKICAgICAgICAgZWxzZSB7CiAgICAg
ICAgICAgICB2YWx1ZS0+dHlwZSA9IHByb3AudmFsdWUudHlwZTsKICAgICAgICAgICAgIHN3aXRj
aCAodmFsdWUtPnR5cGUpIHsKQEAgLTU4MiwxNSArNTgyLDE1IEBAIEV3a19KU19PYmplY3QqIGV3
a19qc19vYmplY3RfbmV3KGNvbnN0IEV3a19KU19DbGFzc19NZXRhKiBqc01ldGFDbGFzcykKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBl
aW5hX2hhc2hfYWRkKG9iai0+cHJvcGVydGllcywga2V5LCB2YWx1ZSk7CisgICAgICAgIGVpbmFf
aGFzaF9hZGQob2JqZWN0LT5wcm9wZXJ0aWVzLCBrZXksIHZhbHVlKTsKICAgICB9CiAKLSAgICBv
YmotPmJhc2Uub2JqZWN0LnJlZmVyZW5jZUNvdW50ID0gMTsKLSAgICBvYmotPmJhc2Uub2JqZWN0
Ll9jbGFzcyA9ICZFV0tfTlBDTEFTUzsKLSAgICByZXR1cm4gb2JqOworICAgIG9iamVjdC0+YmFz
ZS5vYmplY3QucmVmZXJlbmNlQ291bnQgPSAxOworICAgIG9iamVjdC0+YmFzZS5vYmplY3QuX2Ns
YXNzID0gJkVXS19OUENMQVNTOworICAgIHJldHVybiBvYmplY3Q7CiAKIGVycm9yOgotICAgIGV3
a19qc19vYmplY3RfZnJlZShvYmopOworICAgIGV3a19qc19vYmplY3RfZnJlZShvYmplY3QpOwog
ICAgIHJldHVybiAwOwogfQogCkBAIC02NjIsNyArNjYyLDcgQEAgRXdrX0pTX09iamVjdF9UeXBl
IGV3a19qc19vYmplY3RfdHlwZV9nZXQoRXdrX0pTX09iamVjdCoganNPYmplY3QpCiAgICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGpzT2JqZWN0LCBFV0tfSlNfT0JKRUNUX09CSkVD
VCk7CiAgICAgRUlOQV9NQUdJQ19DSEVDS19PUl9SRVRVUk4oanNPb2JqZWN0LCBFV0tfSlNfT0JK
RUNUX09CSkVDVCk7CiAKLSAgICByZXR1cm4gb2JqLT50eXBlOworICAgIHJldHVybiBvYmplY3Qt
PnR5cGU7CiB9CiAKIHZvaWQgZXdrX2pzX29iamVjdF90eXBlX3NldChFd2tfSlNfT2JqZWN0KiBq
c09iamVjdCwgRXdrX0pTX09iamVjdF9UeXBlIHR5cGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2VmbC9ld2svZXdrX21haW4uY3BwIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19tYWlu
LmNwcAppbmRleCBlYjAzMjMzMjRiYWU4MWZlMTI4ZDY4YjgxN2E5ZWJhNjhmMWY0YTZiLi5jNTJj
MDJiMDlmOTE1MzZhMzIyODE4ODZkZWIzZmJiMzViZTAzZWIwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2VmbC9ld2svZXdrX21haW4uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9l
d2tfbWFpbi5jcHAKQEAgLTU3LDcgKzU3LDcgQEAKICNpbmNsdWRlIDxsaWJzb3VwL3NvdXAuaD4K
ICNlbmRpZgogCi1zdGF0aWMgaW50IF9ld2tfaW5pdF9jb3VudCA9IDA7CitzdGF0aWMgaW50IF9l
d2tJbml0Q291bnQgPSAwOwogCiAvKioKICAqIFx2YXIgICAgIF9ld2tfbG9nX2RvbQpAQCAtNjks
OCArNjksOCBAQCBzdGF0aWMgRWluYV9Cb29sIF9ld2tfaW5pdF9ib2R5KHZvaWQpOwogCiBpbnQg
ZXdrX2luaXQodm9pZCkKIHsKLSAgICBpZiAoX2V3a19pbml0X2NvdW50KQotICAgICAgICByZXR1
cm4gKytfZXdrX2luaXRfY291bnQ7CisgICAgaWYgKF9ld2tJbml0Q291bnQpCisgICAgICAgIHJl
dHVybiArK19ld2tJbml0Q291bnQ7CiAKICAgICBpZiAoIWVpbmFfaW5pdCgpKQogICAgICAgICBn
b3RvIGVycm9yX2VpbmE7CkBAIC0xMDYsNyArMTA2LDcgQEAgaW50IGV3a19pbml0KHZvaWQpCiAg
ICAgICAgIGdvdG8gZXJyb3JfZWRqZTsKICAgICB9CiAKLSAgICByZXR1cm4gKytfZXdrX2luaXRf
Y291bnQ7CisgICAgcmV0dXJuICsrX2V3a0luaXRDb3VudDsKIAogZXJyb3JfZWRqZToKICAgICBl
Y29yZV9ldmFzX3NodXRkb3duKCk7CkBAIC0xMjUsOSArMTI1LDkgQEAgZXJyb3JfZWluYToKIAog
aW50IGV3a19zaHV0ZG93bih2b2lkKQogewotICAgIF9ld2tfaW5pdF9jb3VudC0tOwotICAgIGlm
IChfZXdrX2luaXRfY291bnQpCi0gICAgICAgIHJldHVybiBfZXdrX2luaXRfY291bnQ7CisgICAg
X2V3a0luaXRDb3VudC0tOworICAgIGlmIChfZXdrSW5pdENvdW50KQorICAgICAgICByZXR1cm4g
X2V3a0luaXRDb3VudDsKIAogICAgIGVjb3JlX2V2YXNfc2h1dGRvd24oKTsKICAgICBlY29yZV9z
aHV0ZG93bigpOwpAQCAtMTc5LDEwICsxNzksMTAgQEAgRWluYV9Cb29sIF9ld2tfaW5pdF9ib2R5
KHZvaWQpCiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwogICAgIH0KIAotICAgIFdURjo6U3Ry
aW5nIHdrZGlyID0gaG9tZSArICIvLndlYmtpdCI7Ci0gICAgaWYgKFdlYkNvcmU6Om1ha2VBbGxE
aXJlY3Rvcmllcyh3a2RpcikpIHsKLSAgICAgICAgZXdrX3NldHRpbmdzX3dlYl9kYXRhYmFzZV9w
YXRoX3NldCh3a2Rpci51dGY4KCkuZGF0YSgpKTsKLSAgICAgICAgZXdrX3NldHRpbmdzX2NhY2hl
X2RpcmVjdG9yeV9wYXRoX3NldCh3a2Rpci51dGY4KCkuZGF0YSgpKTsKKyAgICBXVEY6OlN0cmlu
ZyB3ZWJraXREaXJlY3RvcnkgPSBob21lICsgIi8ud2Via2l0IjsKKyAgICBpZiAoV2ViQ29yZTo6
bWFrZUFsbERpcmVjdG9yaWVzKHdlYmtpdERpcmVjdG9yeSkpIHsKKyAgICAgICAgZXdrX3NldHRp
bmdzX3dlYl9kYXRhYmFzZV9wYXRoX3NldCh3ZWJraXREaXJlY3RvcnkudXRmOCgpLmRhdGEoKSk7
CisgICAgICAgIGV3a19zZXR0aW5nc19jYWNoZV9kaXJlY3RvcnlfcGF0aF9zZXQod2Via2l0RGly
ZWN0b3J5LnV0ZjgoKS5kYXRhKCkpOwogICAgIH0KIAogICAgIC8vIFRPRE86IHRoaXMgc2hvdWxk
IG1vdmUgdG8gV2ViQ29yZSwgYWxyZWFkeSByZXBvcnRlZCB0byB3ZWJraXQtZ3RrIGZvbGtzOgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19zZXR0aW5ncy5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L2VmbC9ld2svZXdrX3NldHRpbmdzLmNwcAppbmRleCBmMGJhNmViY2IyZjdlNWRj
MTExZmVjNDViNWY2Y2NkNTAzOTgzZWE2Li42NGYxNGY4NTRjM2Q3MGEzYmRhODBiYjE2NGM4NmNk
MTFjZTZmMGUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3NldHRpbmdz
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3NldHRpbmdzLmNwcApAQCAtNTYs
MjYgKzU2LDI2IEBAIHN0YXRpYyB1aW50NjRfdCBfZXdrX2RlZmF1bHRfd2ViX2RhdGFiYXNlX3F1
b3RhID0gMSAqIDEwMjQgKiAxMDI0OwogCiBzdGF0aWMgV1RGOjpTdHJpbmcgX2V3a19zZXR0aW5n
c193ZWJraXRfcGxhdGZvcm1fZ2V0KCkKIHsKLSAgICBXVEY6OlN0cmluZyB1YV9wbGF0Zm9ybTsK
KyAgICBXVEY6OlN0cmluZyB1YVBsYXRmb3JtOwogI2lmIFBMQVRGT1JNKFgxMSkKLSAgICB1YV9w
bGF0Zm9ybSA9ICJYMTEiOworICAgIHVhUGxhdGZvcm0gPSAiWDExIjsKICNlbHNlCi0gICAgdWFf
cGxhdGZvcm0gPSAiVW5rbm93biI7CisgICAgdWFQbGF0Zm9ybSA9ICJVbmtub3duIjsKICNlbmRp
ZgotICAgIHJldHVybiB1YV9wbGF0Zm9ybTsKKyAgICByZXR1cm4gdWFQbGF0Zm9ybTsKIH0KIAog
c3RhdGljIFdURjo6U3RyaW5nIF9ld2tfc2V0dGluZ3Nfd2Via2l0X29zX3ZlcnNpb25fZ2V0KCkK
IHsKLSAgICBXVEY6OlN0cmluZyB1YV9vc192ZXJzaW9uOworICAgIFdURjo6U3RyaW5nIHVhT3NW
ZXJzaW9uOwogICAgIHN0cnVjdCB1dHNuYW1lIG5hbWU7CiAKICAgICBpZiAodW5hbWUoJm5hbWUp
ICE9IC0xKQotICAgICAgICB1YV9vc192ZXJzaW9uID0gbWFrZVN0cmluZyhuYW1lLnN5c25hbWUs
ICcgJywgbmFtZS5tYWNoaW5lKTsKKyAgICAgICAgdWFPc1ZlcnNpb24gPSBtYWtlU3RyaW5nKG5h
bWUuc3lzbmFtZSwgJyAnLCBuYW1lLm1hY2hpbmUpOwogICAgIGVsc2UKLSAgICAgICAgdWFfb3Nf
dmVyc2lvbiA9ICJVbmtub3duIjsKKyAgICAgICAgdWFPc1ZlcnNpb24gPSAiVW5rbm93biI7CiAK
LSAgICByZXR1cm4gdWFfb3NfdmVyc2lvbjsKKyAgICByZXR1cm4gdWFPc1ZlcnNpb247CiB9CiAK
IHVpbnQ2NF90IGV3a19zZXR0aW5nc193ZWJfZGF0YWJhc2VfZGVmYXVsdF9xdW90YV9nZXQoKQpA
QCAtMjQ1LDEwICsyNDUsMTAgQEAgdm9pZCBld2tfc2V0dGluZ3NfcmVwYWludF90aHJvdHRsaW5n
X3NldChkb3VibGUgZGVmZXJyZWRSZXBhaW50RGVsYXksIGRvdWJsZSBpbmkKICAqLwogY29uc3Qg
Y2hhciogZXdrX3NldHRpbmdzX2RlZmF1bHRfdXNlcl9hZ2VudF9nZXQodm9pZCkKIHsKLSAgICBX
VEY6OlN0cmluZyB1YV92ZXJzaW9uID0gbWFrZVN0cmluZyhTdHJpbmc6Om51bWJlcihXRUJLSVRf
VVNFUl9BR0VOVF9NQUpPUl9WRVJTSU9OKSwgJy4nLCBTdHJpbmc6Om51bWJlcihXRUJLSVRfVVNF
Ul9BR0VOVF9NSU5PUl9WRVJTSU9OKSwgJysnKTsKLSAgICBXVEY6OlN0cmluZyBzdGF0aWNfdWEg
PSBtYWtlU3RyaW5nKCJNb3ppbGxhLzUuMCAoIiwgX2V3a19zZXR0aW5nc193ZWJraXRfcGxhdGZv
cm1fZ2V0KCksICI7ICIsIF9ld2tfc2V0dGluZ3Nfd2Via2l0X29zX3ZlcnNpb25fZ2V0KCksICIp
IEFwcGxlV2ViS2l0LyIsIHVhX3ZlcnNpb24pICsgbWFrZVN0cmluZygiIChLSFRNTCwgbGlrZSBH
ZWNrbykgVmVyc2lvbi81LjAgU2FmYXJpLyIsIHVhX3ZlcnNpb24pOworICAgIFdURjo6U3RyaW5n
IHVhVmVyc2lvbiA9IG1ha2VTdHJpbmcoU3RyaW5nOjpudW1iZXIoV0VCS0lUX1VTRVJfQUdFTlRf
TUFKT1JfVkVSU0lPTiksICcuJywgU3RyaW5nOjpudW1iZXIoV0VCS0lUX1VTRVJfQUdFTlRfTUlO
T1JfVkVSU0lPTiksICcrJyk7CisgICAgV1RGOjpTdHJpbmcgc3RhdGljVWEgPSBtYWtlU3RyaW5n
KCJNb3ppbGxhLzUuMCAoIiwgX2V3a19zZXR0aW5nc193ZWJraXRfcGxhdGZvcm1fZ2V0KCksICI7
ICIsIF9ld2tfc2V0dGluZ3Nfd2Via2l0X29zX3ZlcnNpb25fZ2V0KCksICIpIEFwcGxlV2ViS2l0
LyIsIHVhVmVyc2lvbikgKyBtYWtlU3RyaW5nKCIgKEtIVE1MLCBsaWtlIEdlY2tvKSBWZXJzaW9u
LzUuMCBTYWZhcmkvIiwgdWFWZXJzaW9uKTsKIAotICAgIHJldHVybiBlaW5hX3N0cmluZ3NoYXJl
X2FkZChzdGF0aWNfdWEudXRmOCgpLmRhdGEoKSk7CisgICAgcmV0dXJuIGVpbmFfc3RyaW5nc2hh
cmVfYWRkKHN0YXRpY1VhLnV0ZjgoKS5kYXRhKCkpOwogfQogCiBFaW5hX0Jvb2wgZXdrX3NldHRp
bmdzX2NhY2hlX2RpcmVjdG9yeV9wYXRoX3NldChjb25zdCBjaGFyKiBwYXRoKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a190aWxlZF9iYWNraW5nX3N0b3JlLmNwcCBiL1Nv
dXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfYmFja2luZ19zdG9yZS5jcHAKaW5kZXggNzk0
YTkwYzU3NDZmNjBlNTIzYjZkZTVlMjUyYmJjYjA1MWIwNzU2NC4uMjA0ZWFkZjA2Mjk5MDcyZTkz
ODFiMTYxMzgyMDM3MTFhZDU5ODMzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvZXdr
L2V3a190aWxlZF9iYWNraW5nX3N0b3JlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2sv
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmUuY3BwCkBAIC01NSwxNCArNTUsMTQgQEAgc3RydWN0IF9F
d2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtIHsKIAogc3RydWN0IF9Fd2tfVGlsZWRfQmFja2lu
Z19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QgewogICAgIEVJTkFfSU5MSVNUOwotICAgIHVuc2ln
bmVkIGxvbmcgY29sLCByb3c7CisgICAgdW5zaWduZWQgbG9uZyBjb2x1bW4sIHJvdzsKICAgICBm
bG9hdCB6b29tOwogfTsKIAogc3RydWN0IF9Fd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhIHsK
ICAgICBFdmFzX09iamVjdF9TbWFydF9DbGlwcGVkX0RhdGEgYmFzZTsKICAgICBFdmFzX09iamVj
dCogc2VsZjsKLSAgICBFdmFzX09iamVjdCogY29udGVudHNfY2xpcHBlcjsKKyAgICBFdmFzX09i
amVjdCogY29udGVudHNDbGlwcGVyOwogICAgIHN0cnVjdCB7CiAgICAgICAgIEVpbmFfSW5saXN0
KiogaXRlbXM7CiAgICAgICAgIEV2YXNfQ29vcmQgeCwgeSwgd2lkdGgsIGhlaWdodDsKQEAgLTcw
LDQyICs3MCw0MiBAQCBzdHJ1Y3QgX0V3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEgewogICAg
ICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgRXZhc19Db29yZCB3aWR0aCwgaGVpZ2h0OwogICAg
ICAgICAgICAgZmxvYXQgem9vbTsKLSAgICAgICAgICAgIEVpbmFfQm9vbCB6b29tX3dlYWtfc21v
b3RoX3NjYWxlIDogMTsKKyAgICAgICAgICAgIEVpbmFfQm9vbCB6b29tV2Vha1Ntb290aFNjYWxl
IDogMTsKICAgICAgICAgfSB0aWxlOwogICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgc3Ry
dWN0IHsKICAgICAgICAgICAgICAgICBFdmFzX0Nvb3JkIHgsIHk7Ci0gICAgICAgICAgICB9IGN1
ciwgb2xkLCBiYXNlLCB6b29tX2NlbnRlcjsKKyAgICAgICAgICAgIH0gY3VyLCBvbGQsIGJhc2Us
IHpvb21DZW50ZXI7CiAgICAgICAgIH0gb2Zmc2V0OwogICAgIH0gdmlldzsKLSAgICBFdmFzX0Nv
bG9yc3BhY2UgY3NwYWNlOworICAgIEV2YXNfQ29sb3JzcGFjZSBjb2xvclNwYWNlOwogICAgIHN0
cnVjdCB7CiAgICAgICAgIEV3a19UaWxlX01hdHJpeCogbWF0cml4OwogICAgICAgICBzdHJ1Y3Qg
ewotICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBjb2wsIHJvdzsKKyAgICAgICAgICAgIHVuc2ln
bmVkIGxvbmcgY29sdW1uLCByb3c7CiAgICAgICAgIH0gYmFzZTsKICAgICAgICAgc3RydWN0IHsK
LSAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgY29scywgcm93czsKLSAgICAgICAgfSBjdXIsIG9s
ZDsKKyAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgY29sdW1ucywgcm93czsKKyAgICAgICAgfSBj
dXJyZW50LCBvbGQ7CiAgICAgICAgIEV2YXNfQ29vcmQgd2lkdGgsIGhlaWdodDsKICAgICB9IG1v
ZGVsOwogICAgIHN0cnVjdCB7Ci0gICAgICAgIEVpbmFfQm9vbCAoKmNiKSh2b2lkKiBkYXRhLCBF
d2tfVGlsZSogdGlsZSwgY29uc3QgRWluYV9SZWN0YW5nbGUqIGFyZWEpOworICAgICAgICBFaW5h
X0Jvb2wgKCpjYWxsYmFjaykodm9pZCogZGF0YSwgRXdrX1RpbGUqIHRpbGUsIGNvbnN0IEVpbmFf
UmVjdGFuZ2xlKiBhcmVhKTsKICAgICAgICAgdm9pZCogZGF0YTsKLSAgICAgICAgRWluYV9Jbmxp
c3QqIHByZV9yZW5kZXJfcmVxdWVzdHM7CisgICAgICAgIEVpbmFfSW5saXN0KiBwcmVSZW5kZXJS
ZXF1ZXN0czsKICAgICAgICAgRWNvcmVfSWRsZXIqIGlkbGVyOwogICAgICAgICBFaW5hX0Jvb2wg
ZGlzYWJsZWQ7CiAgICAgICAgIEVpbmFfQm9vbCBzdXNwZW5kIDogMTsKICAgICB9IHJlbmRlcjsK
ICAgICBzdHJ1Y3QgewotICAgICAgICB2b2lkKiAoKnByZV9jYikodm9pZCogZGF0YSwgRXZhc19P
YmplY3QqIGV3a1RpbGUpOwotICAgICAgICB2b2lkKiBwcmVfZGF0YTsKLSAgICAgICAgdm9pZCog
KCpwb3N0X2NiKSh2b2lkKiBkYXRhLCB2b2lkKiBwcmVfZGF0YSwgRXZhc19PYmplY3QqIGV3a1Rp
bGUpOwotICAgICAgICB2b2lkKiBwb3N0X2RhdGE7CisgICAgICAgIHZvaWQqICgqcHJlQ2FsbGJh
Y2spKHZvaWQqIGRhdGEsIEV2YXNfT2JqZWN0KiBld2tUaWxlKTsKKyAgICAgICAgdm9pZCogcHJl
RGF0YTsKKyAgICAgICAgdm9pZCogKCpwb3N0Q2FsbGJhY2spKHZvaWQqIGRhdGEsIHZvaWQqIHBy
ZURhdGEsIEV2YXNfT2JqZWN0KiBld2tUaWxlKTsKKyAgICAgICAgdm9pZCogcG9zdERhdGE7CiAg
ICAgfSBwcm9jZXNzOwogICAgIHN0cnVjdCB7CiAgICAgICAgIEVpbmFfQm9vbCBhbnkgOiAxOwot
ICAgICAgICBFaW5hX0Jvb2wgcG9zIDogMTsKKyAgICAgICAgRWluYV9Cb29sIHBvc2l0aW9uIDog
MTsKICAgICAgICAgRWluYV9Cb29sIHNpemUgOiAxOwogICAgICAgICBFaW5hX0Jvb2wgbW9kZWwg
OiAxOwogICAgICAgICBFaW5hX0Jvb2wgb2Zmc2V0IDogMTsKQEAgLTE0MCwyMyArMTQwLDIzIEBA
IHN0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRlc19wcm9j
ZXNzKEV3a19UaWxlZF9CYWNraW5nX1N0CiAgICAgaWYgKHByaXYtPnJlbmRlci5zdXNwZW5kIHx8
ICFldmFzX29iamVjdF92aXNpYmxlX2dldChwcml2LT5zZWxmKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgaWYgKHByaXYtPnByb2Nlc3MucHJlX2NiKQotICAgICAgICBkYXRhID0gcHJpdi0+cHJv
Y2Vzcy5wcmVfY2IocHJpdi0+cHJvY2Vzcy5wcmVfZGF0YSwgcHJpdi0+c2VsZik7CisgICAgaWYg
KHByaXYtPnByb2Nlc3MucHJlQ2FsbGJhY2spCisgICAgICAgIGRhdGEgPSBwcml2LT5wcm9jZXNz
LnByZUNhbGxiYWNrKHByaXYtPnByb2Nlc3MucHJlRGF0YSwgcHJpdi0+c2VsZik7CiAKICAgICBl
d2tfdGlsZV9tYXRyaXhfdXBkYXRlc19wcm9jZXNzKHByaXYtPm1vZGVsLm1hdHJpeCk7CiAKLSAg
ICBpZiAocHJpdi0+cHJvY2Vzcy5wb3N0X2NiKQotICAgICAgICBwcml2LT5wcm9jZXNzLnBvc3Rf
Y2IocHJpdi0+cHJvY2Vzcy5wb3N0X2RhdGEsIGRhdGEsIHByaXYtPnNlbGYpOworICAgIGlmIChw
cml2LT5wcm9jZXNzLnBvc3RDYWxsYmFjaykKKyAgICAgICAgcHJpdi0+cHJvY2Vzcy5wb3N0Q2Fs
bGJhY2socHJpdi0+cHJvY2Vzcy5wb3N0RGF0YSwgZGF0YSwgcHJpdi0+c2VsZik7CiB9CiAKIHN0
YXRpYyBpbnQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2ZsdXNoKHZvaWQqIGRhdGEpCiB7CiAg
ICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdiA9IHN0YXRpY19jYXN0PEV3a19U
aWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqPihkYXRhKTsKLSAgICBFd2tfVGlsZV9VbnVzZWRfQ2Fj
aGUqIHR1YyA9IGV3a190aWxlX21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1h
dHJpeCk7CisgICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0aWxlZFVudXNlZENhY2hlID0gZXdr
X3RpbGVfbWF0cml4X3VudXNlZF9jYWNoZV9nZXQocHJpdi0+bW9kZWwubWF0cml4KTsKIAotICAg
IGlmICh0dWMpIHsKKyAgICBpZiAodGlsZWRVbnVzZWRDYWNoZSkgewogICAgICAgICBEQkcoImZs
dXNoIHVudXNlZCB0aWxlIGNhY2hlLiIpOwotICAgICAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVf
YXV0b19mbHVzaCh0dWMpOworICAgICAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfYXV0b19mbHVz
aCh0aWxlZFVudXNlZENhY2hlKTsKICAgICB9IGVsc2UKICAgICAgICAgRVJSKCJubyBjYWNoZT8h
Iik7CiAKQEAgLTIyMiwyNyArMjIyLDI3IEBAIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV90aWxlX2Fzc29jaWF0ZShFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhCiAKIHN0
YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2Rpc3NvY2lhdGUoRXdrX1Rp
bGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdiwgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRl
bSogaXRlbSwgZG91YmxlIGxhc3RVc2VkKQogewotICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSog
dHVjOworICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSogdGlsZWRVbnVzZWRDYWNoZTsKICAgICBl
d2tfdGlsZV9oaWRlKGl0ZW0tPnRpbGUpOwogICAgIGlmICghZXdrX3RpbGVfdmlzaWJsZV9nZXQo
aXRlbS0+dGlsZSkpCiAgICAgICAgIGV2YXNfb2JqZWN0X3NtYXJ0X21lbWJlcl9kZWwoaXRlbS0+
dGlsZS0+aW1hZ2UpOwogICAgIGV3a190aWxlX21hdHJpeF90aWxlX3B1dChwcml2LT5tb2RlbC5t
YXRyaXgsIGl0ZW0tPnRpbGUsIGxhc3RVc2VkKTsKLSAgICB0dWMgPSBld2tfdGlsZV9tYXRyaXhf
dW51c2VkX2NhY2hlX2dldChwcml2LT5tb2RlbC5tYXRyaXgpOwotICAgIGV3a190aWxlX3VudXNl
ZF9jYWNoZV9hdXRvX2ZsdXNoKHR1Yyk7CisgICAgdGlsZWRVbnVzZWRDYWNoZSA9IGV3a190aWxl
X21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7CisgICAgZXdrX3Rp
bGVfdW51c2VkX2NhY2hlX2F1dG9fZmx1c2godGlsZWRVbnVzZWRDYWNoZSk7CiAKICAgICBpdGVt
LT50aWxlID0gMDsKIH0KIAogc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3Rp
bGVfZGlzc29jaWF0ZV9hbGwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdikKIHsK
LSAgICBFaW5hX0lubGlzdCogaXQ7CisgICAgRWluYV9Jbmxpc3QqIGxpc3Q7CiAgICAgRXdrX1Rp
bGVkX0JhY2tpbmdfU3RvcmVfSXRlbSogaXRlbTsKICAgICBpbnQgaTsKICAgICBkb3VibGUgbGFz
dF91c2VkID0gZWNvcmVfbG9vcF90aW1lX2dldCgpOwogCiAgICAgZm9yIChpID0gMDsgaSA8IHBy
aXYtPnZpZXcucm93czsgaSsrKSB7Ci0gICAgICAgIGl0ID0gcHJpdi0+dmlldy5pdGVtc1tpXTsK
LSAgICAgICAgRUlOQV9JTkxJU1RfRk9SRUFDSChpdCwgaXRlbSkKKyAgICAgICAgbGlzdCA9IHBy
aXYtPnZpZXcuaXRlbXNbaV07CisgICAgICAgIEVJTkFfSU5MSVNUX0ZPUkVBQ0gobGlzdCwgaXRl
bSkKICAgICAgICAgICAgIGlmIChpdGVtLT50aWxlKQogICAgICAgICAgICAgICAgIF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV90aWxlX2Rpc3NvY2lhdGUocHJpdiwgaXRlbSwgbGFzdF91c2VkKTsK
ICAgICB9CkBAIC0yNTAsOTIgKzI1MCw5MiBAQCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfdGlsZV9kaXNzb2NpYXRlX2FsbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZQogCiBz
dGF0aWMgaW5saW5lIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRl
cl9yZXF1ZXN0X2FkZChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2LCB1bnNpZ25l
ZCBsb25nIGNvbHVtbiwgdW5zaWduZWQgbG9uZyByb3csIGZsb2F0IHpvb20sIEV3a19UaWxlZF9C
YWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUHJpb3JpdHkgcHJpb3JpdHkpCiB7Ci0gICAgRXdrX1Rp
bGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0KiByOworICAgIEV3a19UaWxlZF9C
YWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUmVxdWVzdCogcmVxdWVzdDsKIAotICAgIHIgPSBzdGF0
aWNfY2FzdDxFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QqPihtYWxs
b2Moc2l6ZW9mKCpyKSkpOwotICAgIGlmICghcikKKyAgICByZXF1ZXN0ID0gc3RhdGljX2Nhc3Q8
RXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0Kj4obWFsbG9jKHNpemVv
ZigqcmVxdWVzdCkpKTsKKyAgICBpZiAoIXJlcXVlc3QpCiAgICAgICAgIHJldHVybiBFSU5BX0ZB
TFNFOwogCiAgICAgaWYgKHByaW9yaXR5ID09IFBSRV9SRU5ERVJfUFJJT1JJVFlfSElHSCkKLSAg
ICAgICAgcHJpdi0+cmVuZGVyLnByZV9yZW5kZXJfcmVxdWVzdHMgPSBlaW5hX2lubGlzdF9wcmVw
ZW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwcml2
LT5yZW5kZXIucHJlX3JlbmRlcl9yZXF1ZXN0cywgRUlOQV9JTkxJU1RfR0VUKHIpKTsKKyAgICAg
ICAgcHJpdi0+cmVuZGVyLnByZVJlbmRlclJlcXVlc3RzID0gZWluYV9pbmxpc3RfcHJlcGVuZAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocHJpdi0+cmVu
ZGVyLnByZVJlbmRlclJlcXVlc3RzLCBFSU5BX0lOTElTVF9HRVQocmVxdWVzdCkpOwogICAgIGVs
c2UKLSAgICAgICAgcHJpdi0+cmVuZGVyLnByZV9yZW5kZXJfcmVxdWVzdHMgPSBlaW5hX2lubGlz
dF9hcHBlbmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KHByaXYtPnJlbmRlci5wcmVfcmVuZGVyX3JlcXVlc3RzLCBFSU5BX0lOTElTVF9HRVQocikpOwor
ICAgICAgICBwcml2LT5yZW5kZXIucHJlUmVuZGVyUmVxdWVzdHMgPSBlaW5hX2lubGlzdF9hcHBl
bmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHByaXYt
PnJlbmRlci5wcmVSZW5kZXJSZXF1ZXN0cywgRUlOQV9JTkxJU1RfR0VUKHJlcXVlc3QpKTsKIAot
ICAgIHItPmNvbCA9IGNvbHVtbjsKLSAgICByLT5yb3cgPSByb3c7Ci0gICAgci0+em9vbSA9IHpv
b207CisgICAgcmVxdWVzdC0+Y29sdW1uID0gY29sdW1uOworICAgIHJlcXVlc3QtPnJvdyA9IHJv
dzsKKyAgICByZXF1ZXN0LT56b29tID0gem9vbTsKIAogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9
CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRl
cl9yZXF1ZXN0X2RlbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2LCBFd2tfVGls
ZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QqIHJlcXVlc3QpCiB7Ci0gICAgcHJp
di0+cmVuZGVyLnByZV9yZW5kZXJfcmVxdWVzdHMgPSBlaW5hX2lubGlzdF9yZW1vdmUKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocHJpdi0+cmVuZGVyLnByZV9y
ZW5kZXJfcmVxdWVzdHMsIEVJTkFfSU5MSVNUX0dFVChyZXF1ZXN0KSk7CisgICAgcHJpdi0+cmVu
ZGVyLnByZVJlbmRlclJlcXVlc3RzID0gZWluYV9pbmxpc3RfcmVtb3ZlCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHByaXYtPnJlbmRlci5wcmVSZW5kZXJSZXF1
ZXN0cywgRUlOQV9JTkxJU1RfR0VUKHJlcXVlc3QpKTsKICAgICBmcmVlKHJlcXVlc3QpOwogfQog
CiBzdGF0aWMgaW5saW5lIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUmVxdWVz
dCogX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9maXJzdChjb25z
dCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2KQogewogICAgIHJldHVybiBFSU5B
X0lOTElTVF9DT05UQUlORVJfR0VUKAotICAgICAgICAgICAgICAgcHJpdi0+cmVuZGVyLnByZV9y
ZW5kZXJfcmVxdWVzdHMsCisgICAgICAgICAgICAgICBwcml2LT5yZW5kZXIucHJlUmVuZGVyUmVx
dWVzdHMsCiAgICAgICAgICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVy
X1JlcXVlc3QpOwogfQogCiBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJl
X3JlbmRlcl9yZXF1ZXN0X2ZsdXNoKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYp
CiB7Ci0gICAgRWluYV9Jbmxpc3QqKiBwbCA9ICZwcml2LT5yZW5kZXIucHJlX3JlbmRlcl9yZXF1
ZXN0czsKLSAgICB3aGlsZSAoKnBsKSB7Ci0gICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3Jl
X1ByZV9SZW5kZXJfUmVxdWVzdCogcjsKLSAgICAgICAgciA9IF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfZmlyc3QocHJpdik7Ci0gICAgICAgICpwbCA9IGVpbmFf
aW5saXN0X3JlbW92ZSgqcGwsICpwbCk7Ci0gICAgICAgIGZyZWUocik7CisgICAgRWluYV9Jbmxp
c3QqKiBwcmVSZW5kZXJMaXN0ID0gJnByaXYtPnJlbmRlci5wcmVSZW5kZXJSZXF1ZXN0czsKKyAg
ICB3aGlsZSAoKnByZVJlbmRlckxpc3QpIHsKKyAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3Rv
cmVfUHJlX1JlbmRlcl9SZXF1ZXN0KiByZXF1ZXN0OworICAgICAgICByZXF1ZXN0ID0gX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9maXJzdChwcml2KTsKKyAgICAg
ICAgKnByZVJlbmRlckxpc3QgPSBlaW5hX2lubGlzdF9yZW1vdmUoKnByZVJlbmRlckxpc3QsICpw
cmVSZW5kZXJMaXN0KTsKKyAgICAgICAgZnJlZShyZXF1ZXN0KTsKICAgICB9CiB9CiAKIHN0YXRp
YyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfY2xlYXIo
RXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdikKIHsKLSAgICBFaW5hX0lubGlzdCoq
IHBsID0gJnByaXYtPnJlbmRlci5wcmVfcmVuZGVyX3JlcXVlc3RzOwotICAgIEVpbmFfSW5saXN0
KiBpdGVyID0gKnBsLCAqIHRtcDsKKyAgICBFaW5hX0lubGlzdCoqIHByZVJlbmRlckxpc3QgPSAm
cHJpdi0+cmVuZGVyLnByZVJlbmRlclJlcXVlc3RzOworICAgIEVpbmFfSW5saXN0KiBpdGVyID0g
KnByZVJlbmRlckxpc3QsICp0bXA7CiAgICAgd2hpbGUgKGl0ZXIpIHsKLSAgICAgICAgRXdrX1Rp
bGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0KiByID0KKyAgICAgICAgRXdrX1Rp
bGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0KiByZXF1ZXN0ID0KICAgICAgICAg
ICAgIEVJTkFfSU5MSVNUX0NPTlRBSU5FUl9HRVQoCiAgICAgICAgICAgICAgICAgaXRlciwgRXdr
X1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0KTsKICAgICAgICAgdG1wID0g
aXRlci0+bmV4dDsKLSAgICAgICAgKnBsID0gZWluYV9pbmxpc3RfcmVtb3ZlKCpwbCwgaXRlcik7
CisgICAgICAgICpwcmVSZW5kZXJMaXN0ID0gZWluYV9pbmxpc3RfcmVtb3ZlKCpwcmVSZW5kZXJM
aXN0LCBpdGVyKTsKICAgICAgICAgaXRlciA9IHRtcDsKLSAgICAgICAgZnJlZShyKTsKKyAgICAg
ICAgZnJlZShyZXF1ZXN0KTsKICAgICB9CiB9CiAKIC8qIGFzc3VtZXMgcHJpdi0+cHJvY2Vzcy5w
cmVfY2Igd2FzIGNhbGxlZCBpZiByZXF1aXJlZCEgKi8KIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfcHJvY2Vzc19zaW5nbGUoRXdrX1RpbGVk
X0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdikKIHsKLSAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9y
ZV9QcmVfUmVuZGVyX1JlcXVlc3QqIHJlcTsKKyAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9Q
cmVfUmVuZGVyX1JlcXVlc3QqIHJlcXVlc3Q7CiAgICAgRWluYV9SZWN0YW5nbGUgYXJlYTsKLSAg
ICBFd2tfVGlsZV9NYXRyaXgqIHRtID0gcHJpdi0+bW9kZWwubWF0cml4OworICAgIEV3a19UaWxl
X01hdHJpeCogdGlsZU1hdHJpeCA9IHByaXYtPm1vZGVsLm1hdHJpeDsKICAgICBFd2tfVGlsZSog
dGlsZTsKLSAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHR1YzsKLSAgICB1bnNpZ25lZCBsb25n
IGNvbCwgcm93OworICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSogdGlsZWRVbnVzZWRDYWNoZTsK
KyAgICB1bnNpZ25lZCBsb25nIGNvbHVtbiwgcm93OwogICAgIGZsb2F0IHpvb207CiAgICAgZG91
YmxlIGxhc3RfdXNlZCA9IGVjb3JlX2xvb3BfdGltZV9nZXQoKTsKIAotICAgIHJlcSA9IF9ld2tf
dGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfZmlyc3QocHJpdik7Ci0gICAg
aWYgKCFyZXEpCisgICAgcmVxdWVzdCA9IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVu
ZGVyX3JlcXVlc3RfZmlyc3QocHJpdik7CisgICAgaWYgKCFyZXF1ZXN0KQogICAgICAgICByZXR1
cm47CiAKLSAgICBjb2wgPSByZXEtPmNvbDsKLSAgICByb3cgPSByZXEtPnJvdzsKLSAgICB6b29t
ID0gcmVxLT56b29tOworICAgIGNvbHVtbiA9IHJlcXVlc3QtPmNvbHVtbjsKKyAgICByb3cgPSBy
ZXF1ZXN0LT5yb3c7CisgICAgem9vbSA9IHJlcXVlc3QtPnpvb207CiAKLSAgICBpZiAoZXdrX3Rp
bGVfbWF0cml4X3RpbGVfZXhhY3RfZXhpc3RzKHRtLCBjb2wsIHJvdywgem9vbSkpIHsKLSAgICAg
ICAgREJHKCJubyBwcmUtcmVuZGVyIHJlcXVpcmVkIGZvciB0aWxlICVsdSwlbHUgQCAlZi4iLCBj
b2wsIHJvdywgem9vbSk7CisgICAgaWYgKGV3a190aWxlX21hdHJpeF90aWxlX2V4YWN0X2V4aXN0
cyh0aWxlTWF0cml4LCBjb2x1bW4sIHJvdywgem9vbSkpIHsKKyAgICAgICAgREJHKCJubyBwcmUt
cmVuZGVyIHJlcXVpcmVkIGZvciB0aWxlICVsdSwlbHUgQCAlZi4iLCBjb2x1bW4sIHJvdywgem9v
bSk7CiAgICAgICAgIGdvdG8gZW5kOwogICAgIH0KIAotICAgIHRpbGUgPSBfZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfdGlsZV9uZXcocHJpdiwgY29sLCByb3csIHpvb20pOworICAgIHRpbGUgPSBf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9uZXcocHJpdiwgY29sdW1uLCByb3csIHpvb20p
OwogICAgIGlmICghdGlsZSkKICAgICAgICAgZ290byBlbmQ7CiAKQEAgLTM0NCwzMyArMzQ0LDMz
IEBAIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVl
c3RfcHJvY2Vzc19zaW5nbGUoRXdrX1RpbGVkCiAgICAgYXJlYS53ID0gcHJpdi0+dmlldy50aWxl
LndpZHRoOwogICAgIGFyZWEuaCA9IHByaXYtPnZpZXcudGlsZS5oZWlnaHQ7CiAKLSAgICBwcml2
LT5yZW5kZXIuY2IocHJpdi0+cmVuZGVyLmRhdGEsIHRpbGUsICZhcmVhKTsKKyAgICBwcml2LT5y
ZW5kZXIuY2FsbGJhY2socHJpdi0+cmVuZGVyLmRhdGEsIHRpbGUsICZhcmVhKTsKICAgICBldmFz
X29iamVjdF9pbWFnZV9kYXRhX3VwZGF0ZV9hZGQoCiAgICAgICAgIHRpbGUtPmltYWdlLAogICAg
ICAgICBhcmVhLngsIGFyZWEueSwgYXJlYS53LCBhcmVhLmgpOwotICAgIGV3a190aWxlX21hdHJp
eF90aWxlX3VwZGF0ZXNfY2xlYXIodG0sIHRpbGUpOworICAgIGV3a190aWxlX21hdHJpeF90aWxl
X3VwZGF0ZXNfY2xlYXIodGlsZU1hdHJpeCwgdGlsZSk7CiAKLSAgICBld2tfdGlsZV9tYXRyaXhf
dGlsZV9wdXQodG0sIHRpbGUsIGxhc3RfdXNlZCk7CisgICAgZXdrX3RpbGVfbWF0cml4X3RpbGVf
cHV0KHRpbGVNYXRyaXgsIHRpbGUsIGxhc3RfdXNlZCk7CiAKIGVuZDoKLSAgICBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2RlbChwcml2LCByZXEpOwotICAgIHR1
YyA9IGV3a190aWxlX21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7
Ci0gICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2F1dG9fZmx1c2godHVjKTsKKyAgICBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2RlbChwcml2LCByZXF1ZXN0KTsK
KyAgICB0aWxlZFVudXNlZENhY2hlID0gZXdrX3RpbGVfbWF0cml4X3VudXNlZF9jYWNoZV9nZXQo
cHJpdi0+bW9kZWwubWF0cml4KTsKKyAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfYXV0b19mbHVz
aCh0aWxlZFVudXNlZENhY2hlKTsKIH0KIAogc3RhdGljIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfaXRlbV9wcm9jZXNzX2lkbGVyX2NiKHZvaWQqIGRhdGEpCiB7CiAgICAgRXdr
X1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdiA9IHN0YXRpY19jYXN0PEV3a19UaWxlZF9C
YWNraW5nX1N0b3JlX0RhdGEqPihkYXRhKTsKIAotICAgIGlmIChwcml2LT5wcm9jZXNzLnByZV9j
YikKLSAgICAgICAgZGF0YSA9IHByaXYtPnByb2Nlc3MucHJlX2NiKHByaXYtPnByb2Nlc3MucHJl
X2RhdGEsIHByaXYtPnNlbGYpOworICAgIGlmIChwcml2LT5wcm9jZXNzLnByZUNhbGxiYWNrKQor
ICAgICAgICBkYXRhID0gcHJpdi0+cHJvY2Vzcy5wcmVDYWxsYmFjayhwcml2LT5wcm9jZXNzLnBy
ZURhdGEsIHByaXYtPnNlbGYpOwogCiAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9y
ZW5kZXJfcmVxdWVzdF9wcm9jZXNzX3NpbmdsZShwcml2KTsKIAotICAgIGlmIChwcml2LT5wcm9j
ZXNzLnBvc3RfY2IpCi0gICAgICAgIHByaXYtPnByb2Nlc3MucG9zdF9jYihwcml2LT5wcm9jZXNz
LnBvc3RfZGF0YSwgZGF0YSwgcHJpdi0+c2VsZik7CisgICAgaWYgKHByaXYtPnByb2Nlc3MucG9z
dENhbGxiYWNrKQorICAgICAgICBwcml2LT5wcm9jZXNzLnBvc3RDYWxsYmFjayhwcml2LT5wcm9j
ZXNzLnBvc3REYXRhLCBkYXRhLCBwcml2LT5zZWxmKTsKIAotICAgIGlmICghcHJpdi0+cmVuZGVy
LnByZV9yZW5kZXJfcmVxdWVzdHMpIHsKKyAgICBpZiAoIXByaXYtPnJlbmRlci5wcmVSZW5kZXJS
ZXF1ZXN0cykgewogICAgICAgICBwcml2LT5yZW5kZXIuaWRsZXIgPSAwOwogICAgICAgICByZXR1
cm4gRUlOQV9GQUxTRTsKICAgICB9CkBAIC00MjAsMzggKzQyMCwzOCBAQCBzdGF0aWMgRWluYV9C
b29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9lbmFibGVfcmVuZGVyKEV3a19UaWxlZF9CYWNr
aW5nX1N0b3JlXwogCiBzdGF0aWMgaW5saW5lIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfaXRlbV9maWxsKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYsIEV3a19U
aWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0qIGl0ZW0sIHVuc2lnbmVkIGxvbmcgY29sdW1uLCB1bnNp
Z25lZCBsb25nIHJvdykKIHsKLSAgICB1bnNpZ25lZCBsb25nIG1fY29sID0gcHJpdi0+bW9kZWwu
YmFzZS5jb2wgKyBjb2x1bW47Ci0gICAgdW5zaWduZWQgbG9uZyBtX3JvdyA9IHByaXYtPm1vZGVs
LmJhc2Uucm93ICsgcm93OwotICAgIGRvdWJsZSBsYXN0X3VzZWQgPSBlY29yZV9sb29wX3RpbWVf
Z2V0KCk7CisgICAgdW5zaWduZWQgbG9uZyBtQ29sdW1uID0gcHJpdi0+bW9kZWwuYmFzZS5jb2x1
bW4gKyBjb2x1bW47CisgICAgdW5zaWduZWQgbG9uZyBtUm93ID0gcHJpdi0+bW9kZWwuYmFzZS5y
b3cgKyByb3c7CisgICAgZG91YmxlIGxhc3RVc2VkID0gZWNvcmVfbG9vcF90aW1lX2dldCgpOwog
Ci0gICAgaWYgKG1fY29sID49IHByaXYtPm1vZGVsLmN1ci5jb2xzIHx8IG1fcm93ID49IHByaXYt
Pm1vZGVsLmN1ci5yb3dzKSB7CisgICAgaWYgKG1Db2x1bW4gPj0gcHJpdi0+bW9kZWwuY3VycmVu
dC5jb2x1bW5zIHx8IG1Sb3cgPj0gcHJpdi0+bW9kZWwuY3VycmVudC5yb3dzKSB7CiAgICAgICAg
IGlmIChpdGVtLT50aWxlKQotICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3Rp
bGVfZGlzc29jaWF0ZShwcml2LCBpdGVtLCBsYXN0X3VzZWQpOworICAgICAgICAgICAgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfZGlzc29jaWF0ZShwcml2LCBpdGVtLCBsYXN0VXNlZCk7
CiAgICAgfSBlbHNlIHsKICAgICAgICAgRXdrX1RpbGUqIHRpbGU7CiAgICAgICAgIGNvbnN0IGZs
b2F0IHpvb20gPSBwcml2LT52aWV3LnRpbGUuem9vbTsKIAogICAgICAgICBpZiAoaXRlbS0+dGls
ZSkgewogICAgICAgICAgICAgRXdrX1RpbGUqIG9sZCA9IGl0ZW0tPnRpbGU7Ci0gICAgICAgICAg
ICBpZiAob2xkLT5yb3cgIT0gbV9yb3cgfHwgb2xkLT5jb2wgIT0gbV9jb2wgfHwgb2xkLT56b29t
ICE9IHpvb20pCi0gICAgICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVf
ZGlzc29jaWF0ZShwcml2LCBpdGVtLCBsYXN0X3VzZWQpOwotICAgICAgICAgICAgZWxzZSBpZiAo
b2xkLT5yb3cgPT0gbV9yb3cgJiYgb2xkLT5jb2wgPT0gbV9jb2wgJiYgb2xkLT56b29tID09IHpv
b20pCisgICAgICAgICAgICBpZiAob2xkLT5yb3cgIT0gbVJvdyB8fCBvbGQtPmNvbCAhPSBtQ29s
dW1uIHx8IG9sZC0+em9vbSAhPSB6b29tKQorICAgICAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV90aWxlX2Rpc3NvY2lhdGUocHJpdiwgaXRlbSwgbGFzdFVzZWQpOworICAgICAg
ICAgICAgZWxzZSBpZiAob2xkLT5yb3cgPT0gbVJvdyAmJiBvbGQtPmNvbCA9PSBtQ29sdW1uICYm
IG9sZC0+em9vbSA9PSB6b29tKQogICAgICAgICAgICAgICAgIGdvdG8gZW5kOwogICAgICAgICB9
CiAKLSAgICAgICAgdGlsZSA9IGV3a190aWxlX21hdHJpeF90aWxlX2V4YWN0X2dldChwcml2LT5t
b2RlbC5tYXRyaXgsIG1fY29sLCBtX3Jvdywgem9vbSk7CisgICAgICAgIHRpbGUgPSBld2tfdGls
ZV9tYXRyaXhfdGlsZV9leGFjdF9nZXQocHJpdi0+bW9kZWwubWF0cml4LCBtQ29sdW1uLCBtUm93
LCB6b29tKTsKIAogICAgICAgICBpZiAoIXRpbGUpIHsKICAgICAgICAgICAgIC8qIE5PVEU6IGl0
IG5ldmVyIHJldHVybnMgMCBpZiBpdC0+dGlsZSB3YXMgc2V0ISAqLwogICAgICAgICAgICAgaWYg
KGl0ZW0tPnRpbGUpIHsKICAgICAgICAgICAgICAgICBDUklUSUNBTCgiaXQtPnRpbGU9JXAsIGJ1
dCBpdCBzaG91bGQgYmUgMCEiLCBpdGVtLT50aWxlKTsKICAgICAgICAgICAgICAgICBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9kaXNzb2NpYXRlKHByaXYsIGl0ZW0sCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0X3VzZWQp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbGFzdFVzZWQpOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvKiBEbyBub3QgYWRk
IG5ldyByZXF1ZXN0cyB0byB0aGUgcmVuZGVyIHF1ZXVlICovCiAgICAgICAgICAgICBpZiAoIXBy
aXYtPnJlbmRlci5zdXNwZW5kKSB7Ci0gICAgICAgICAgICAgICAgdGlsZSA9IF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV90aWxlX25ldyhwcml2LCBtX2NvbCwgbV9yb3csIHpvb20pOworICAgICAg
ICAgICAgICAgIHRpbGUgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9uZXcocHJpdiwg
bUNvbHVtbiwgbVJvdywgem9vbSk7CiAgICAgICAgICAgICAgICAgaWYgKCF0aWxlKQogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKICAgICAgICAgICAgICAgICBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9hc3NvY2lhdGUocHJpdiwgdGlsZSwgaXRlbSk7CkBAIC00
NTksNyArNDU5LDcgQEAgc3RhdGljIGlubGluZSBFaW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5n
X3N0b3JlX2l0ZW1fZmlsbChFd2tfVGlsZWRfQmFja2luZ19TdG8KICAgICAgICAgfSBlbHNlIGlm
ICh0aWxlICE9IGl0ZW0tPnRpbGUpIHsKICAgICAgICAgICAgIGlmIChpdGVtLT50aWxlKQogICAg
ICAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2Rpc3NvY2lhdGUocHJp
diwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGl0ZW0sIGxhc3RfdXNlZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpdGVtLCBsYXN0VXNlZCk7CiAgICAgICAgICAgICBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9hc3NvY2lhdGUocHJpdiwgdGlsZSwgaXRlbSk7CiAg
ICAgICAgIH0KIApAQCAtNDczLDMxICs0NzMsMzEgQEAgZW5kOgogCiBzdGF0aWMgRXdrX1RpbGVk
X0JhY2tpbmdfU3RvcmVfSXRlbSogX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fYWRkKEV3
a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYsIHVuc2lnbmVkIGxvbmcgY29sdW1uLCB1
bnNpZ25lZCBsb25nIHJvdykKIHsKLSAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKiBp
dDsKLSAgICBFdmFzX0Nvb3JkIHgsIHksIHR3LCB0aDsKKyAgICBFd2tfVGlsZWRfQmFja2luZ19T
dG9yZV9JdGVtKiBpdGVtOworICAgIEV2YXNfQ29vcmQgeCwgeSwgdGlsZVdpZHRoLCB0aWxlSGVp
Z2h0OwogCi0gICAgREJHKCJvPSVwIiwgcHJpdi0+c2VsZik7CisgICAgREJHKCJld2tUaWxlJXAi
LCBwcml2LT5zZWxmKTsKIAotICAgIGl0ID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGVkX0JhY2tpbmdf
U3RvcmVfSXRlbSo+KG1hbGxvYyhzaXplb2YoKml0KSkpOwotICAgIGlmICghaXQpCisgICAgaXRl
bSA9IHN0YXRpY19jYXN0PEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0qPihtYWxsb2Moc2l6
ZW9mKCppdGVtKSkpOworICAgIGlmICghaXRlbSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICB0
dyA9IHByaXYtPnZpZXcudGlsZS53aWR0aDsKLSAgICB0aCA9IHByaXYtPnZpZXcudGlsZS5oZWln
aHQ7Ci0gICAgeCA9IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCArIHByaXYtPnZpZXcueCArIHR3
ICAqY29sdW1uOwotICAgIHkgPSBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgKyBwcml2LT52aWV3
LnkgKyB0aCAgKnJvdzsKKyAgICB0aWxlV2lkdGggPSBwcml2LT52aWV3LnRpbGUud2lkdGg7Cisg
ICAgdGlsZUhlaWdodCA9IHByaXYtPnZpZXcudGlsZS5oZWlnaHQ7CisgICAgeCA9IHByaXYtPnZp
ZXcub2Zmc2V0LmJhc2UueCArIHByaXYtPnZpZXcueCArIHRpbGVXaWR0aCAgKmNvbHVtbjsKKyAg
ICB5ID0gcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ICsgcHJpdi0+dmlldy55ICsgdGlsZUhlaWdo
dCAgKnJvdzsKIAotICAgIGl0LT50aWxlID0gMDsKKyAgICBpdGVtLT50aWxlID0gMDsKIAotICAg
IGl0LT5zbW9vdGhfc2NhbGUgPSBwcml2LT52aWV3LnRpbGUuem9vbV93ZWFrX3Ntb290aF9zY2Fs
ZTsKLSAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9tb3ZlKGl0LCB4LCB5KTsKLSAg
ICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9yZXNpemUoaXQsIHR3LCB0aCk7Ci0gICAg
aWYgKCFfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9maWxsKHByaXYsIGl0LCBjb2x1bW4s
IHJvdykpIHsKLSAgICAgICAgZnJlZShpdCk7CisgICAgaXRlbS0+c21vb3RoX3NjYWxlID0gcHJp
di0+dmlldy50aWxlLnpvb21XZWFrU21vb3RoU2NhbGU7CisgICAgX2V3a190aWxlZF9iYWNraW5n
X3N0b3JlX2l0ZW1fbW92ZShpdGVtLCB4LCB5KTsKKyAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfaXRlbV9yZXNpemUoaXRlbSwgdGlsZVdpZHRoLCB0aWxlSGVpZ2h0KTsKKyAgICBpZiAoIV9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2ZpbGwocHJpdiwgaXRlbSwgY29sdW1uLCByb3cp
KSB7CisgICAgICAgIGZyZWUoaXRlbSk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAg
IHJldHVybiBpdDsKKyAgICByZXR1cm4gaXRlbTsKIH0KIAogc3RhdGljIHZvaWQgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX2l0ZW1fZGVsKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHBy
aXYsIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0qIGl0ZW0pCkBAIC01MjcsNDAgKzUyNyw0
MCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2NoYW5nZWQo
RXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YQogICAgIHByaXYtPmNoYW5nZWQuYW55ID0gRUlO
QV9UUlVFOwogfQogCi1zdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19j
b2xzX2VuZF9kZWwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdiwgRWluYV9Jbmxp
c3QqKiBwX3JvdywgdW5zaWduZWQgaW50IGNvdW50KQorc3RhdGljIHZvaWQgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX3ZpZXdfY29sc19lbmRfZGVsKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0Rh
dGEqIHByaXYsIEVpbmFfSW5saXN0Kiogcm93TGlzdCwgdW5zaWduZWQgaW50IGNvdW50KQogewot
ICAgIEVpbmFfSW5saXN0KiBuOworICAgIEVpbmFfSW5saXN0KiBuZXh0SXRlbTsKICAgICB1bnNp
Z25lZCBpbnQgaTsKIAogICAgIGlmICghY291bnQpCiAgICAgICAgIHJldHVybjsKIAotICAgIG4g
PSAoKnBfcm93KS0+bGFzdDsKKyAgICBuZXh0SXRlbSA9ICgqcm93TGlzdCktPmxhc3Q7CiAKICAg
ICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotICAgICAgICBFd2tfVGlsZWRfQmFja2lu
Z19TdG9yZV9JdGVtKiBpdDsKLSAgICAgICAgaXQgPSBFSU5BX0lOTElTVF9DT05UQUlORVJfR0VU
KG4sIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0pOwotICAgICAgICBuID0gbi0+cHJldjsK
LSAgICAgICAgKnBfcm93ID0gZWluYV9pbmxpc3RfcmVtb3ZlKCpwX3JvdywgRUlOQV9JTkxJU1Rf
R0VUKGl0KSk7Ci0gICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2RlbChwcml2
LCBpdCk7CisgICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0qIGl0ZW07CisgICAg
ICAgIGl0ZW0gPSBFSU5BX0lOTElTVF9DT05UQUlORVJfR0VUKG5leHRJdGVtLCBFd2tfVGlsZWRf
QmFja2luZ19TdG9yZV9JdGVtKTsKKyAgICAgICAgbmV4dEl0ZW0gPSBuZXh0SXRlbS0+cHJldjsK
KyAgICAgICAgKnJvd0xpc3QgPSBlaW5hX2lubGlzdF9yZW1vdmUoKnJvd0xpc3QsIEVJTkFfSU5M
SVNUX0dFVChpdGVtKSk7CisgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2Rl
bChwcml2LCBpdGVtKTsKICAgICB9CiB9CiAKLXN0YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX3ZpZXdfY29sc19lbmRfYWRkKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0Rh
dGEqIHByaXYsIEVpbmFfSW5saXN0KiogcF9yb3csIHVuc2lnbmVkIGludCBiYXNlX2NvbHVtbiwg
dW5zaWduZWQgaW50IGNvdW50KQorc3RhdGljIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfdmlld19jb2xzX2VuZF9hZGQoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJp
diwgRWluYV9Jbmxpc3QqKiByb3dMaXN0LCB1bnNpZ25lZCBpbnQgYmFzZUNvbHVtbiwgdW5zaWdu
ZWQgaW50IGNvdW50KQogewotICAgIHVuc2lnbmVkIGludCBpLCByID0gcF9yb3cgLSBwcml2LT52
aWV3Lml0ZW1zOworICAgIHVuc2lnbmVkIGludCBpLCByb3cgPSByb3dMaXN0IC0gcHJpdi0+dmll
dy5pdGVtczsKIAotICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrLCBiYXNlX2NvbHVtbisr
KSB7CisgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyssIGJhc2VDb2x1bW4rKykgewogICAg
ICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKiBpdDsKIAotICAgICAgICBpdCA9IF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2FkZChwcml2LCBiYXNlX2NvbHVtbiwgcik7Cisg
ICAgICAgIGl0ID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fYWRkKHByaXYsIGJhc2VD
b2x1bW4sIHJvdyk7CiAgICAgICAgIGlmICghaXQpIHsKLSAgICAgICAgICAgIENSSVRJQ0FMKCJm
YWlsZWQgdG8gYWRkIGNvbHVtbiAldSBvZiAldSBpbiByb3cgJXUuIiwgaSwgY291bnQsIHIpOwot
ICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfY29sc19lbmRfZGVsKHBy
aXYsIHBfcm93LCBpKTsKKyAgICAgICAgICAgIENSSVRJQ0FMKCJmYWlsZWQgdG8gYWRkIGNvbHVt
biAldSBvZiAldSBpbiByb3cgJXUuIiwgaSwgY291bnQsIHJvdyk7CisgICAgICAgICAgICBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19jb2xzX2VuZF9kZWwocHJpdiwgcm93TGlzdCwgaSk7
CiAgICAgICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKICAgICAgICAgfQogCi0gICAgICAgICpw
X3JvdyA9IGVpbmFfaW5saXN0X2FwcGVuZCgqcF9yb3csIEVJTkFfSU5MSVNUX0dFVChpdCkpOwor
ICAgICAgICAqcm93TGlzdCA9IGVpbmFfaW5saXN0X2FwcGVuZCgqcm93TGlzdCwgRUlOQV9JTkxJ
U1RfR0VUKGl0KSk7CiAgICAgfQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CkBAIC01NjgsMTAg
KzU2OCwxMCBAQCBzdGF0aWMgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3
X2NvbHNfZW5kX2FkZChFd2tfVGlsZWRfQmFja2luZ19TdAogc3RhdGljIHZvaWQgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX3ZpZXdfcm93X2RlbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRh
KiBwcml2LCBFaW5hX0lubGlzdCogcm93KQogewogICAgIHdoaWxlIChyb3cpIHsKLSAgICAgICAg
RXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSogaXQ7Ci0gICAgICAgIGl0ID0gRUlOQV9JTkxJ
U1RfQ09OVEFJTkVSX0dFVChyb3csIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0pOworICAg
ICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKiBpdGVtOworICAgICAgICBpdGVtID0g
RUlOQV9JTkxJU1RfQ09OVEFJTkVSX0dFVChyb3csIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0
ZW0pOwogICAgICAgICByb3cgPSByb3ctPm5leHQ7Ci0gICAgICAgIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9pdGVtX2RlbChwcml2LCBpdCk7CisgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9pdGVtX2RlbChwcml2LCBpdGVtKTsKICAgICB9CiB9CiAKQEAgLTYxMSw4ICs2MTEsOCBA
QCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcmVuZGVyKHZvaWQqIGRhdGEs
IEV3a19UaWxlKiB0aWxlLCBjb25zdCBFaQogICAgIGlmIChwcml2LT52aWV3LnRpbGUud2lkdGgg
IT0gdGlsZS0+d2lkdGggfHwgcHJpdi0+dmlldy50aWxlLmhlaWdodCAhPSB0aWxlLT5oZWlnaHQp
CiAgICAgICAgIHJldHVybjsgLy8gdG9kbzogcmVtb3ZlIG1lIGxhdGVyLCBkb24ndCBldmVuIGZs
YWcgYXMgZGlydHkhCiAKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihwcml2LT5yZW5k
ZXIuY2IpOwotICAgIGlmICghcHJpdi0+cmVuZGVyLmNiKHByaXYtPnJlbmRlci5kYXRhLCB0aWxl
LCBhcmVhKSkKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihwcml2LT5yZW5kZXIuY2Fs
bGJhY2spOworICAgIGlmICghcHJpdi0+cmVuZGVyLmNhbGxiYWNrKHByaXYtPnJlbmRlci5kYXRh
LCB0aWxlLCBhcmVhKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgZXZhc19vYmplY3RfaW1hZ2Vf
ZGF0YV91cGRhdGVfYWRkKHRpbGUtPmltYWdlLCBhcmVhLT54LCBhcmVhLT55LCBhcmVhLT53LCBh
cmVhLT5oKTsKQEAgLTYyOSwyNyArNjI5LDI3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfbW9kZWxfbWF0cml4X2NyZWF0ZShFd2tfVGlsZWRfQmFja2luCiAg
ICAgICAgIGV3a190aWxlX21hdHJpeF9mcmVlKHByaXYtPm1vZGVsLm1hdHJpeCk7CiAgICAgfQog
Ci0gICAgcHJpdi0+bW9kZWwubWF0cml4ID0gZXdrX3RpbGVfbWF0cml4X25ldyh0aWxlVW51c2Vk
Q2FjaGUsIHByaXYtPm1vZGVsLmN1ci5jb2xzLCBwcml2LT5tb2RlbC5jdXIucm93cywgcHJpdi0+
Y3NwYWNlLCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcmVuZGVyLCBwcml2KTsKKyAgICBwcml2
LT5tb2RlbC5tYXRyaXggPSBld2tfdGlsZV9tYXRyaXhfbmV3KHRpbGVVbnVzZWRDYWNoZSwgcHJp
di0+bW9kZWwuY3VycmVudC5jb2x1bW5zLCBwcml2LT5tb2RlbC5jdXJyZW50LnJvd3MsIHByaXYt
PmNvbG9yU3BhY2UsIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9yZW5kZXIsIHByaXYpOwogfQog
CiBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfbWVtYmVyX2RlbChF
dmFzX09iamVjdCogZXdrVGlsZSwgRXZhc19PYmplY3QqIG1lbWJlcikKIHsKICAgICBQUklWX0RB
VEFfR0VUX09SX1JFVFVSTihld2tUaWxlLCBwcml2KTsKLSAgICBpZiAoIXByaXYtPmNvbnRlbnRz
X2NsaXBwZXIpCisgICAgaWYgKCFwcml2LT5jb250ZW50c0NsaXBwZXIpCiAgICAgICAgIHJldHVy
bjsKICAgICBldmFzX29iamVjdF9jbGlwX3Vuc2V0KG1lbWJlcik7Ci0gICAgaWYgKCFldmFzX29i
amVjdF9jbGlwZWVzX2dldChwcml2LT5jb250ZW50c19jbGlwcGVyKSkKLSAgICAgICAgZXZhc19v
YmplY3RfaGlkZShwcml2LT5jb250ZW50c19jbGlwcGVyKTsKKyAgICBpZiAoIWV2YXNfb2JqZWN0
X2NsaXBlZXNfZ2V0KHByaXYtPmNvbnRlbnRzQ2xpcHBlcikpCisgICAgICAgIGV2YXNfb2JqZWN0
X2hpZGUocHJpdi0+Y29udGVudHNDbGlwcGVyKTsKIH0KIAogc3RhdGljIHZvaWQgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX3NtYXJ0X21lbWJlcl9hZGQoRXZhc19PYmplY3QqIGV3a1RpbGUsIEV2
YXNfT2JqZWN0KiBtZW1iZXIpCiB7CiAgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4oZXdrVGls
ZSwgcHJpdik7Ci0gICAgaWYgKCFwcml2LT5jb250ZW50c19jbGlwcGVyKQorICAgIGlmICghcHJp
di0+Y29udGVudHNDbGlwcGVyKQogICAgICAgICByZXR1cm47Ci0gICAgZXZhc19vYmplY3RfY2xp
cF9zZXQobWVtYmVyLCBwcml2LT5jb250ZW50c19jbGlwcGVyKTsKKyAgICBldmFzX29iamVjdF9j
bGlwX3NldChtZW1iZXIsIHByaXYtPmNvbnRlbnRzQ2xpcHBlcik7CiAgICAgaWYgKGV2YXNfb2Jq
ZWN0X3Zpc2libGVfZ2V0KGV3a1RpbGUpKQotICAgICAgICBldmFzX29iamVjdF9zaG93KHByaXYt
PmNvbnRlbnRzX2NsaXBwZXIpOworICAgICAgICBldmFzX29iamVjdF9zaG93KHByaXYtPmNvbnRl
bnRzQ2xpcHBlcik7CiB9CiAKICNpZmRlZiBERUJVR19NRU1fTEVBS1MKQEAgLTY3Niw5ICs2NzYs
OSBAQCBzdGF0aWMgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zaWdfdXNyKHZv
aWQqIGRhdGEsIGludCB0eXBlLCB2b2lkKiBldgogICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3Jl
X0RhdGEqIHByaXYgPSAoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSopZGF0YTsKIAogICAg
IGlmIChzaWctPm51bWJlciA9PSAyKSB7Ci0gICAgICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSog
dHVjOwotICAgICAgICB0dWMgPSBld2tfdGlsZV9tYXRyaXhfdW51c2VkX2NhY2hlX2dldChwcml2
LT5tb2RlbC5tYXRyaXgpOwotICAgICAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfYXV0b19mbHVz
aCh0dWMpOworICAgICAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHRpbGllVW51c2VkQ2FjaGU7
CisgICAgICAgIHRpbGllVW51c2VkQ2FjaGUgPSBld2tfdGlsZV9tYXRyaXhfdW51c2VkX2NhY2hl
X2dldChwcml2LT5tb2RlbC5tYXRyaXgpOworICAgICAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVf
YXV0b19mbHVzaCh0aWxpZVVudXNlZENhY2hlKTsKICAgICB9CiAKICAgICBfZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfdmlld19kYmcocHJpdik7CkBAIC02OTEsNyArNjkxLDcgQEAgc3RhdGljIHZv
aWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2FkZChFdmFzX09iamVjdCogZXdrVGls
ZSkKIHsKICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2OwogCi0gICAgREJH
KCJvPSVwIiwgZXdrVGlsZSk7CisgICAgREJHKCJld2tUaWxlPSVwIiwgZXdrVGlsZSk7CiAKICAg
ICBwcml2ID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSo+KGNhbGxv
YygxLCBzaXplb2YoKnByaXYpKSk7CiAgICAgaWYgKCFwcml2KQpAQCAtNzA4LDMzICs3MDgsMzMg
QEAgc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2FkZChFdmFzX09i
amVjdCogZXdrVGlsZSkKICAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggPSAwOwogICAgIHBy
aXYtPnZpZXcub2Zmc2V0LmJhc2UueSA9IDA7CiAKLSAgICBwcml2LT5tb2RlbC5iYXNlLmNvbCA9
IDA7CisgICAgcHJpdi0+bW9kZWwuYmFzZS5jb2x1bW4gPSAwOwogICAgIHByaXYtPm1vZGVsLmJh
c2Uucm93ID0gMDsKLSAgICBwcml2LT5tb2RlbC5jdXIuY29scyA9IDE7Ci0gICAgcHJpdi0+bW9k
ZWwuY3VyLnJvd3MgPSAxOwotICAgIHByaXYtPm1vZGVsLm9sZC5jb2xzID0gMDsKKyAgICBwcml2
LT5tb2RlbC5jdXJyZW50LmNvbHVtbnMgPSAxOworICAgIHByaXYtPm1vZGVsLmN1cnJlbnQucm93
cyA9IDE7CisgICAgcHJpdi0+bW9kZWwub2xkLmNvbHVtbnMgPSAwOwogICAgIHByaXYtPm1vZGVs
Lm9sZC5yb3dzID0gMDsKICAgICBwcml2LT5tb2RlbC53aWR0aCA9IDA7CiAgICAgcHJpdi0+bW9k
ZWwuaGVpZ2h0ID0gMDsKICAgICBwcml2LT5yZW5kZXIuc3VzcGVuZCA9IEVJTkFfRkFMU0U7Ci0g
ICAgcHJpdi0+Y3NwYWNlID0gRVZBU19DT0xPUlNQQUNFX0FSR0I4ODg4OyAvLyBUT0RPOiBkZXRl
Y3QgaXQuCisgICAgcHJpdi0+Y29sb3JTcGFjZSA9IEVWQVNfQ09MT1JTUEFDRV9BUkdCODg4ODsg
Ly8gVE9ETzogZGV0ZWN0IGl0LgogCiAgICAgZXZhc19vYmplY3Rfc21hcnRfZGF0YV9zZXQoZXdr
VGlsZSwgcHJpdik7CiAgICAgX3BhcmVudF9zYy5hZGQoZXdrVGlsZSk7CiAKLSAgICBwcml2LT5j
b250ZW50c19jbGlwcGVyID0gZXZhc19vYmplY3RfcmVjdGFuZ2xlX2FkZCgKKyAgICBwcml2LT5j
b250ZW50c0NsaXBwZXIgPSBldmFzX29iamVjdF9yZWN0YW5nbGVfYWRkKAogICAgICAgICBldmFz
X29iamVjdF9ldmFzX2dldChld2tUaWxlKSk7Ci0gICAgZXZhc19vYmplY3RfbW92ZShwcml2LT5j
b250ZW50c19jbGlwcGVyLCAwLCAwKTsKLSAgICBldmFzX29iamVjdF9yZXNpemUocHJpdi0+Y29u
dGVudHNfY2xpcHBlciwKKyAgICBldmFzX29iamVjdF9tb3ZlKHByaXYtPmNvbnRlbnRzQ2xpcHBl
ciwgMCwgMCk7CisgICAgZXZhc19vYmplY3RfcmVzaXplKHByaXYtPmNvbnRlbnRzQ2xpcHBlciwK
ICAgICAgICAgICAgICAgICAgICAgICAgcHJpdi0+bW9kZWwud2lkdGgsIHByaXYtPm1vZGVsLmhl
aWdodCk7Ci0gICAgZXZhc19vYmplY3RfY29sb3Jfc2V0KHByaXYtPmNvbnRlbnRzX2NsaXBwZXIs
IDI1NSwgMjU1LCAyNTUsIDI1NSk7Ci0gICAgZXZhc19vYmplY3Rfc2hvdyhwcml2LT5jb250ZW50
c19jbGlwcGVyKTsKLSAgICBldmFzX29iamVjdF9zbWFydF9tZW1iZXJfYWRkKHByaXYtPmNvbnRl
bnRzX2NsaXBwZXIsIGV3a1RpbGUpOworICAgIGV2YXNfb2JqZWN0X2NvbG9yX3NldChwcml2LT5j
b250ZW50c0NsaXBwZXIsIDI1NSwgMjU1LCAyNTUsIDI1NSk7CisgICAgZXZhc19vYmplY3Rfc2hv
dyhwcml2LT5jb250ZW50c0NsaXBwZXIpOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X21lbWJlcl9h
ZGQocHJpdi0+Y29udGVudHNDbGlwcGVyLCBld2tUaWxlKTsKIAogICAgIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9tb2RlbF9tYXRyaXhfY3JlYXRlKHByaXYsIDApOwogICAgIGV2YXNfb2JqZWN0
X21vdmUocHJpdi0+YmFzZS5jbGlwcGVyLCAwLCAwKTsKICAgICBldmFzX29iamVjdF9yZXNpemUo
cHJpdi0+YmFzZS5jbGlwcGVyLCAwLCAwKTsKLSAgICBldmFzX29iamVjdF9jbGlwX3NldChwcml2
LT5jb250ZW50c19jbGlwcGVyLCBwcml2LT5iYXNlLmNsaXBwZXIpOworICAgIGV2YXNfb2JqZWN0
X2NsaXBfc2V0KHByaXYtPmNvbnRlbnRzQ2xpcHBlciwgcHJpdi0+YmFzZS5jbGlwcGVyKTsKIAog
I2lmZGVmIERFQlVHX01FTV9MRUFLUwogICAgIHByaXYtPnNpZ191c3IgPSBlY29yZV9ldmVudF9o
YW5kbGVyX2FkZApAQCAtNzQ1LDExICs3NDUsMTEgQEAgc3RhdGljIHZvaWQgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX3NtYXJ0X2FkZChFdmFzX09iamVjdCogZXdrVGlsZSkKIHN0YXRpYyB2b2lk
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9kZWwoRXZhc19PYmplY3QqIGV3a1RpbGUp
CiB7CiAgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4oZXdrVGlsZSwgcHJpdik7Ci0gICAgREJH
KCJvPSVwIiwgZXdrVGlsZSk7Ci0gICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0dWM7CisgICAg
REJHKCJld2tUaWxlJXAiLCBld2tUaWxlKTsKKyAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHRp
bGVVbnVzZWRDYWNoZTsKIAotICAgIHR1YyA9IGV3a190aWxlX21hdHJpeF91bnVzZWRfY2FjaGVf
Z2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7Ci0gICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3VubG9j
a19hcmVhKHR1Yyk7CisgICAgdGlsZVVudXNlZENhY2hlID0gZXdrX3RpbGVfbWF0cml4X3VudXNl
ZF9jYWNoZV9nZXQocHJpdi0+bW9kZWwubWF0cml4KTsKKyAgICBld2tfdGlsZV91bnVzZWRfY2Fj
aGVfdW5sb2NrX2FyZWEodGlsZVVudXNlZENhY2hlKTsKIAogICAgIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9mbHVzaChwcml2KTsKIApAQCAtNzY0LDggKzc2NCw4IEBAIHN0YXRpYyB2b2lkIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9kZWwoRXZhc19PYmplY3QqIGV3a1RpbGUpCiAj
ZW5kaWYKIAogICAgIGV3a190aWxlX21hdHJpeF9mcmVlKHByaXYtPm1vZGVsLm1hdHJpeCk7Ci0g
ICAgZXZhc19vYmplY3Rfc21hcnRfbWVtYmVyX2RlbChwcml2LT5jb250ZW50c19jbGlwcGVyKTsK
LSAgICBldmFzX29iamVjdF9kZWwocHJpdi0+Y29udGVudHNfY2xpcHBlcik7CisgICAgZXZhc19v
YmplY3Rfc21hcnRfbWVtYmVyX2RlbChwcml2LT5jb250ZW50c0NsaXBwZXIpOworICAgIGV2YXNf
b2JqZWN0X2RlbChwcml2LT5jb250ZW50c0NsaXBwZXIpOwogCiAgICAgX3BhcmVudF9zYy5kZWwo
ZXdrVGlsZSk7CiAKQEAgLTc3NywyMyArNzc3LDIzIEBAIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV9zbWFydF9kZWwoRXZhc19PYmplY3QqIGV3a1RpbGUpCiAKIHN0YXRpYyB2
b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9tb3ZlKEV2YXNfT2JqZWN0KiBld2tU
aWxlLCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSkKIHsKLSAgICBEQkcoIm89JXAsIG5ldyBw
b3M6ICVkeCVkIiwgZXdrVGlsZSwgeCwgeSk7CisgICAgREJHKCJld2tUaWxlJXAsIG5ldyBwb3M6
ICVkeCVkIiwgZXdrVGlsZSwgeCwgeSk7CiAKICAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihl
d2tUaWxlLCBwcml2KTsKIAotICAgIGlmIChwcml2LT5jaGFuZ2VkLnBvcykKKyAgICBpZiAocHJp
di0+Y2hhbmdlZC5wb3NpdGlvbikKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKHByaXYtPnZp
ZXcueCA9PSB4ICYmIHByaXYtPnZpZXcueSA9PSB5KQogICAgICAgICByZXR1cm47CiAKLSAgICBw
cml2LT5jaGFuZ2VkLnBvcyA9IEVJTkFfVFJVRTsKKyAgICBwcml2LT5jaGFuZ2VkLnBvc2l0aW9u
ID0gRUlOQV9UUlVFOwogICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9jaGFuZ2VkKHByaXYp
OwogfQogCiBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfcmVzaXpl
KEV2YXNfT2JqZWN0KiBld2tUaWxlLCBFdmFzX0Nvb3JkIHdpZHRoLCBFdmFzX0Nvb3JkIGhlaWdo
dCkKIHsKLSAgICBEQkcoIm89JXAsIG5ldyBzaXplOiAlZHglZCIsIGV3a1RpbGUsIHdpZHRoLCBo
ZWlnaHQpOworICAgIERCRygiZXdrVGlsZSVwLCBuZXcgc2l6ZTogJWR4JWQiLCBld2tUaWxlLCB3
aWR0aCwgaGVpZ2h0KTsKIAogICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKGV3a1RpbGUsIHBy
aXYpOwogCkBAIC04MDksMjUgKzgwOSwyNSBAQCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfc21hcnRfcmVzaXplKEV2YXNfT2JqZWN0KiBld2tUaWxlLCBFdmFzX0NvbwogCiBz
dGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcmVjYWxjX3JlbmRlcmVycyhFd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2LCBFdmFzX0Nvb3JkIHdpZHRoLCBFdmFzX0Nv
b3JkIGhlaWdodCwgRXZhc19Db29yZCB0aWxlV2lkdGgsIEV2YXNfQ29vcmQgdGlsZUhlaWdodCkK
IHsKLSAgICBsb25nIGNvbHMsIHJvd3MsIG9sZF9yb3dzLCBvbGRfY29sczsKLSAgICBJTkYoIm89
JXAsIG5ldyBzaXplOiAlZHglZCIsIHByaXYtPnNlbGYsIHdpZHRoLCBoZWlnaHQpOworICAgIGxv
bmcgY29sdW1ucywgcm93cywgb2xkUm93cywgb2xkQ29sczsKKyAgICBJTkYoImV3a1RpbGUlcCwg
bmV3IHNpemU6ICVkeCVkIiwgcHJpdi0+c2VsZiwgd2lkdGgsIGhlaWdodCk7CiAKLSAgICBjb2xz
ID0gMSArIHN0YXRpY19jYXN0PGludD4oY2VpbChzdGF0aWNfY2FzdDxmbG9hdD4od2lkdGggLyB0
aWxlV2lkdGgpKSk7CisgICAgY29sdW1ucyA9IDEgKyBzdGF0aWNfY2FzdDxpbnQ+KGNlaWwoc3Rh
dGljX2Nhc3Q8ZmxvYXQ+KHdpZHRoIC8gdGlsZVdpZHRoKSkpOwogICAgIHJvd3MgPSAxICsgc3Rh
dGljX2Nhc3Q8aW50PihjZWlsKHN0YXRpY19jYXN0PGZsb2F0PihoZWlnaHQgLyB0aWxlSGVpZ2h0
KSkpOwogCi0gICAgSU5GKCJvPSVwIG5ldyBncmlkIHNpemUgY29sczogJWxkLCByb3dzOiAlbGQs
IHdhcyAlbGQsICVsZCIsCi0gICAgICAgIHByaXYtPnNlbGYsIGNvbHMsIHJvd3MsIHByaXYtPnZp
ZXcuY29scywgcHJpdi0+dmlldy5yb3dzKTsKKyAgICBJTkYoImV3a1RpbGUlcCBuZXcgZ3JpZCBz
aXplIGNvbHM6ICVsZCwgcm93czogJWxkLCB3YXMgJWxkLCAlbGQiLAorICAgICAgICBwcml2LT5z
ZWxmLCBjb2x1bW5zLCByb3dzLCBwcml2LT52aWV3LmNvbHMsIHByaXYtPnZpZXcucm93cyk7CiAK
LSAgICBpZiAocHJpdi0+dmlldy5jb2xzID09IGNvbHMgJiYgcHJpdi0+dmlldy5yb3dzID09IHJv
d3MpCisgICAgaWYgKHByaXYtPnZpZXcuY29scyA9PSBjb2x1bW5zICYmIHByaXYtPnZpZXcucm93
cyA9PSByb3dzKQogICAgICAgICByZXR1cm47CiAKLSAgICBvbGRfY29scyA9IHByaXYtPnZpZXcu
Y29sczsKLSAgICBvbGRfcm93cyA9IHByaXYtPnZpZXcucm93czsKKyAgICBvbGRDb2xzID0gcHJp
di0+dmlldy5jb2xzOworICAgIG9sZFJvd3MgPSBwcml2LT52aWV3LnJvd3M7CiAKLSAgICBpZiAo
cm93cyA8IG9sZF9yb3dzKSB7CisgICAgaWYgKHJvd3MgPCBvbGRSb3dzKSB7CiAgICAgICAgIEVp
bmFfSW5saXN0Kiogc3RhcnQsICoqZW5kOwogICAgICAgICBzdGFydCA9IHByaXYtPnZpZXcuaXRl
bXMgKyByb3dzOwotICAgICAgICBlbmQgPSBwcml2LT52aWV3Lml0ZW1zICsgb2xkX3Jvd3M7Cisg
ICAgICAgIGVuZCA9IHByaXYtPnZpZXcuaXRlbXMgKyBvbGRSb3dzOwogICAgICAgICBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfdmlld19yb3dzX3JhbmdlX2RlbChwcml2LCBzdGFydCwgZW5kKTsK
ICAgICB9CiAKQEAgLTgzNywzNiArODM3LDM2IEBAIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9yZWNhbGNfcmVuZGVyZXJzKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhCiAK
ICAgICBwcml2LT52aWV3Lml0ZW1zID0gc3RhdGljX2Nhc3Q8RWluYV9Jbmxpc3QqKj4obmV3SXRl
bXMpOwogICAgIHByaXYtPnZpZXcucm93cyA9IHJvd3M7Ci0gICAgcHJpdi0+dmlldy5jb2xzID0g
Y29sczsKLSAgICBpZiAocm93cyA+IG9sZF9yb3dzKSB7Ci0gICAgICAgIEVpbmFfSW5saXN0Kiog
c3RhcnQgPSBwcml2LT52aWV3Lml0ZW1zICsgb2xkX3Jvd3M7CisgICAgcHJpdi0+dmlldy5jb2xz
ID0gY29sdW1uczsKKyAgICBpZiAocm93cyA+IG9sZFJvd3MpIHsKKyAgICAgICAgRWluYV9Jbmxp
c3QqKiBzdGFydCA9IHByaXYtPnZpZXcuaXRlbXMgKyBvbGRSb3dzOwogICAgICAgICBFaW5hX0lu
bGlzdCoqIGVuZCA9IHByaXYtPnZpZXcuaXRlbXMgKyByb3dzOwogICAgICAgICBmb3IgKDsgc3Rh
cnQgPCBlbmQ7IHN0YXJ0KyspIHsKICAgICAgICAgICAgICpzdGFydCA9IDA7Ci0gICAgICAgICAg
ICBFaW5hX0Jvb2wgciA9IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X2NvbHNfZW5kX2Fk
ZChwcml2LCBzdGFydCwgMCwgY29scyk7CisgICAgICAgICAgICBFaW5hX0Jvb2wgciA9IF9ld2tf
dGlsZWRfYmFja2luZ19zdG9yZV92aWV3X2NvbHNfZW5kX2FkZChwcml2LCBzdGFydCwgMCwgY29s
dW1ucyk7CiAgICAgICAgICAgICBpZiAoIXIpIHsKLSAgICAgICAgICAgICAgICBDUklUSUNBTCgi
ZmFpbGVkIHRvIGFsbG9jYXRlICVsZCBjb2x1bW5zIiwgY29scyk7Ci0gICAgICAgICAgICAgICAg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcm93c19yYW5nZV9kZWwocHJpdiwgcHJpdi0+
dmlldy5pdGVtcyArIG9sZF9yb3dzLCBzdGFydCk7Ci0gICAgICAgICAgICAgICAgcHJpdi0+dmll
dy5yb3dzID0gb2xkX3Jvd3M7CisgICAgICAgICAgICAgICAgQ1JJVElDQUwoImZhaWxlZCB0byBh
bGxvY2F0ZSAlbGQgY29sdW1ucyIsIGNvbHVtbnMpOworICAgICAgICAgICAgICAgIF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV92aWV3X3Jvd3NfcmFuZ2VfZGVsKHByaXYsIHByaXYtPnZpZXcuaXRl
bXMgKyBvbGRSb3dzLCBzdGFydCk7CisgICAgICAgICAgICAgICAgcHJpdi0+dmlldy5yb3dzID0g
b2xkUm93czsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KICAgICB9CiAKLSAgICBpZiAoY29scyAhPSBvbGRfY29scykgewotICAgICAgICBpbnQgdG9k
byA9IGNvbHMgLSBvbGRfY29sczsKKyAgICBpZiAoY29sdW1ucyAhPSBvbGRDb2xzKSB7CisgICAg
ICAgIGludCB0b2RvID0gY29sdW1ucyAtIG9sZENvbHM7CiAgICAgICAgIEVpbmFfSW5saXN0Kiog
c3RhcnQgPSBwcml2LT52aWV3Lml0ZW1zOwotICAgICAgICBFaW5hX0lubGlzdCoqIGVuZCA9IHN0
YXJ0ICsgc3RkOjptaW4ob2xkX3Jvd3MsIHJvd3MpOworICAgICAgICBFaW5hX0lubGlzdCoqIGVu
ZCA9IHN0YXJ0ICsgc3RkOjptaW4ob2xkUm93cywgcm93cyk7CiAgICAgICAgIGlmICh0b2RvID4g
MCkgewogICAgICAgICAgICAgZm9yICg7IHN0YXJ0IDwgZW5kOyBzdGFydCsrKSB7Ci0gICAgICAg
ICAgICAgICAgRWluYV9Cb29sIHIgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19jb2xz
X2VuZF9hZGQocHJpdiwgc3RhcnQsIG9sZF9jb2xzLCB0b2RvKTsKLSAgICAgICAgICAgICAgICBp
ZiAoIXIpIHsKKyAgICAgICAgICAgICAgICBFaW5hX0Jvb2wgcmVzdWx0ID0gX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX3ZpZXdfY29sc19lbmRfYWRkKHByaXYsIHN0YXJ0LCBvbGRDb2xzLCB0b2Rv
KTsKKyAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdCkgewogICAgICAgICAgICAgICAgICAgICBD
UklUSUNBTCgiZmFpbGVkIHRvIGFsbG9jYXRlICVkIGNvbHVtbnMhIiwgdG9kbyk7CiAKICAgICAg
ICAgICAgICAgICAgICAgZm9yIChzdGFydC0tOyBzdGFydCA+PSBwcml2LT52aWV3Lml0ZW1zOyBz
dGFydC0tKQogICAgICAgICAgICAgICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3ZpZXdfY29sc19lbmRfZGVsKHByaXYsIHN0YXJ0LCB0b2RvKTsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKHJvd3MgPiBvbGRfcm93cykgewotICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQg
PSBwcml2LT52aWV3Lml0ZW1zICsgb2xkX3Jvd3M7CisgICAgICAgICAgICAgICAgICAgIGlmIChy
b3dzID4gb2xkUm93cykgeworICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSBwcml2LT52
aWV3Lml0ZW1zICsgb2xkUm93czsKICAgICAgICAgICAgICAgICAgICAgICAgIGVuZCA9IHByaXYt
PnZpZXcuaXRlbXMgKyByb3dzOwogICAgICAgICAgICAgICAgICAgICAgICAgZm9yICg7IHN0YXJ0
IDwgZW5kOyBzdGFydCsrKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV92aWV3X2NvbHNfZW5kX2RlbChwcml2LCBzdGFydCwgdG9kbyk7CkBAIC05
MDEsOSArOTAxLDkgQEAgc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV92aWV3X2RiZyhjb25zdCBFd2tfVGlsZWRfQmFja2luZ19TdG8KICAgICBFaW5hX0lubGlzdCoq
IHN0YXJ0LCAqKmVuZDsKICAgICBwcmludGYoInRpbGVzPSUybGQsJTJsZCAgbW9kZWw9JTJsZCwl
MmxkIFslZHglZF0gYmFzZT0lKzNsZCwlKzRsZCBvZmZzZXQ9JSs0ZCwlKzRkIG9sZD0lKzRkLCUr
NGQgYmFzZT0lKzNkLCUrM2RcbiIsCiAgICAgICAgICAgIHByaXYtPnZpZXcuY29scywgcHJpdi0+
dmlldy5yb3dzLAotICAgICAgICAgICBwcml2LT5tb2RlbC5jdXIuY29scywgcHJpdi0+bW9kZWwu
Y3VyLnJvd3MsCisgICAgICAgICAgIHByaXYtPm1vZGVsLmN1cnJlbnQuY29sdW1ucywgcHJpdi0+
bW9kZWwuY3VycmVudC5yb3dzLAogICAgICAgICAgICBwcml2LT5tb2RlbC53aWR0aCwgcHJpdi0+
bW9kZWwuaGVpZ2h0LAotICAgICAgICAgICBwcml2LT5tb2RlbC5iYXNlLmNvbCwgcHJpdi0+bW9k
ZWwuYmFzZS5yb3csCisgICAgICAgICAgIHByaXYtPm1vZGVsLmJhc2UuY29sdW1uLCBwcml2LT5t
b2RlbC5iYXNlLnJvdywKICAgICAgICAgICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLngsIHByaXYt
PnZpZXcub2Zmc2V0LmN1ci55LAogICAgICAgICAgICBwcml2LT52aWV3Lm9mZnNldC5vbGQueCwg
cHJpdi0+dmlldy5vZmZzZXQub2xkLnksCiAgICAgICAgICAgIHByaXYtPnZpZXcub2Zmc2V0LmJh
c2UueCwgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55KTsKQEAgLTkxMSwxNSArOTExLDE1IEBAIHN0
YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19kYmcoY29uc3Qg
RXdrX1RpbGVkX0JhY2tpbmdfU3RvCiAgICAgc3RhcnQgPSBwcml2LT52aWV3Lml0ZW1zOwogICAg
IGVuZCA9IHByaXYtPnZpZXcuaXRlbXMgKyBwcml2LT52aWV3LnJvd3M7CiAgICAgZm9yICg7IHN0
YXJ0IDwgZW5kOyBzdGFydCsrKSB7Ci0gICAgICAgIGNvbnN0IEV3a19UaWxlZF9CYWNraW5nX1N0
b3JlX0l0ZW0qIGl0OworICAgICAgICBjb25zdCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVt
KiBpdGVtOwogCi0gICAgICAgIEVJTkFfSU5MSVNUX0ZPUkVBQ0goKnN0YXJ0LCBpdCkgewotICAg
ICAgICAgICAgcHJpbnRmKCIgJSs0ZCwlKzRkICIsIGl0LT5nZW9tZXRyeS54LCBpdC0+Z2VvbWV0
cnkueSk7CisgICAgICAgIEVJTkFfSU5MSVNUX0ZPUkVBQ0goKnN0YXJ0LCBpdGVtKSB7CisgICAg
ICAgICAgICBwcmludGYoIiAlKzRkLCUrNGQgIiwgaXRlbS0+Z2VvbWV0cnkueCwgaXRlbS0+Z2Vv
bWV0cnkueSk7CiAKLSAgICAgICAgICAgIGlmICghaXQtPnRpbGUpCisgICAgICAgICAgICBpZiAo
IWl0ZW0tPnRpbGUpCiAgICAgICAgICAgICAgICAgcHJpbnRmKCIgICAgICAgICAgICA7Iik7CiAg
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcHJpbnRmKCIlOHAgJWx1LCVsdTsiLCBp
dC0+dGlsZSwgaXQtPnRpbGUtPmNvbCwgaXQtPnRpbGUtPnJvdyk7CisgICAgICAgICAgICAgICAg
cHJpbnRmKCIlOHAgJWx1LCVsdTsiLCBpdGVtLT50aWxlLCBpdGVtLT50aWxlLT5jb2wsIGl0ZW0t
PnRpbGUtPnJvdyk7CiAgICAgICAgIH0KICAgICAgICAgcHJpbnRmKCJcbiIpOwogICAgIH0KQEAg
LTk0MSwzNyArOTQxLDM3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfdmlld19kYmcoY29uc3QgRXdrX1RpbGVkX0JhY2tpbmdfU3RvCiAgKi8KIHN0YXRpYyB2
b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3dyYXBfdXAoRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfRGF0YSogcHJpdiwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHksIHVuc2lnbmVk
IGludCBjb3VudCkKIHsKLSAgICB1bnNpZ25lZCBpbnQgbGFzdF9yb3cgPSBwcml2LT52aWV3LnJv
d3MgLSAxOwotICAgIEV2YXNfQ29vcmQgdHcgPSBwcml2LT52aWV3LnRpbGUud2lkdGg7Ci0gICAg
RXZhc19Db29yZCB0aCA9IHByaXYtPnZpZXcudGlsZS5oZWlnaHQ7Ci0gICAgRXZhc19Db29yZCBv
ZmZfeSA9IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSArIGNvdW50ICogdGg7Ci0gICAgRXZhc19D
b29yZCBveSA9IHkgKyAobGFzdF9yb3cgLSBjb3VudCArIDEpICogdGggKyBvZmZfeTsKLSAgICBF
aW5hX0lubGlzdCoqIGl0cl9zdGFydCwgKippdHJfZW5kOworICAgIHVuc2lnbmVkIGludCBsYXN0
Um93ID0gcHJpdi0+dmlldy5yb3dzIC0gMTsKKyAgICBFdmFzX0Nvb3JkIHRpbGVXaWR0aCA9IHBy
aXYtPnZpZXcudGlsZS53aWR0aDsKKyAgICBFdmFzX0Nvb3JkIHRpbGVIZWlnaHQgPSBwcml2LT52
aWV3LnRpbGUuaGVpZ2h0OworICAgIEV2YXNfQ29vcmQgb2Zmc2V0WSA9IHByaXYtPnZpZXcub2Zm
c2V0LmJhc2UueSArIGNvdW50ICogdGlsZUhlaWdodDsKKyAgICBFdmFzX0Nvb3JkIHRpbGVQb3Np
dGlvblkgPSB5ICsgKGxhc3RSb3cgLSBjb3VudCArIDEpICogdGlsZUhlaWdodCArIG9mZnNldFk7
CisgICAgRWluYV9Jbmxpc3QqKiBpdGVyYXRvclN0YXJ0LCAqKml0ZXJhdG9yRW5kOwogCi0gICAg
aXRyX3N0YXJ0ID0gcHJpdi0+dmlldy5pdGVtczsKLSAgICBpdHJfZW5kID0gaXRyX3N0YXJ0ICsg
bGFzdF9yb3c7CisgICAgaXRlcmF0b3JTdGFydCA9IHByaXYtPnZpZXcuaXRlbXM7CisgICAgaXRl
cmF0b3JFbmQgPSBpdGVyYXRvclN0YXJ0ICsgbGFzdFJvdzsKIAogICAgIGZvciAoOyBjb3VudCA+
IDA7IGNvdW50LS0pIHsKLSAgICAgICAgRWluYV9Jbmxpc3QqKiBpdHI7Ci0gICAgICAgIEVpbmFf
SW5saXN0KiB0bXAgPSAqaXRyX3N0YXJ0OwotICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9y
ZV9JdGVtKiBpdDsKLSAgICAgICAgRXZhc19Db29yZCBveCA9IHggKyBwcml2LT52aWV3Lm9mZnNl
dC5iYXNlLng7Ci0gICAgICAgIGludCBjID0gMDsKKyAgICAgICAgRWluYV9Jbmxpc3QqKiBpdGVy
YXRvckxpc3Q7CisgICAgICAgIEVpbmFfSW5saXN0KiB0ZW1wID0gKml0ZXJhdG9yU3RhcnQ7Cisg
ICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0qIGl0ZW07CisgICAgICAgIEV2YXNf
Q29vcmQgb3JpZ2lhbmxYID0geCArIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueDsKKyAgICAgICAg
aW50IGNvdW50MSA9IDA7CiAKLSAgICAgICAgZm9yIChpdHIgPSBpdHJfc3RhcnQ7IGl0ciA8IGl0
cl9lbmQ7IGl0cisrKQotICAgICAgICAgICAgKml0ciA9ICooaXRyICsgMSk7Ci0gICAgICAgICpp
dHIgPSB0bXA7CisgICAgICAgIGZvciAoaXRlcmF0b3JMaXN0ID0gaXRlcmF0b3JTdGFydDsgaXRl
cmF0b3JMaXN0IDwgaXRlcmF0b3JFbmQ7IGl0ZXJhdG9yTGlzdCsrKQorICAgICAgICAgICAgKml0
ZXJhdG9yTGlzdCA9ICooaXRlcmF0b3JMaXN0ICsgMSk7CisgICAgICAgICppdGVyYXRvckxpc3Qg
PSB0ZW1wOwogCiAgICAgICAgIHByaXYtPm1vZGVsLmJhc2Uucm93Kys7Ci0gICAgICAgIEVJTkFf
SU5MSVNUX0ZPUkVBQ0godG1wLCBpdCkgewotICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5n
X3N0b3JlX2l0ZW1fbW92ZShpdCwgb3gsIG95KTsKLSAgICAgICAgICAgIG94ICs9IHR3OwotICAg
ICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZmlsbChwcml2LCBpdCwgYywg
bGFzdF9yb3cpOwotICAgICAgICAgICAgYysrOworICAgICAgICBFSU5BX0lOTElTVF9GT1JFQUNI
KHRlbXAsIGl0ZW0pIHsKKyAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVt
X21vdmUoaXRlbSwgb3JpZ2lhbmxYLCB0aWxlUG9zaXRpb25ZKTsKKyAgICAgICAgICAgIG9yaWdp
YW5sWCArPSB0aWxlV2lkdGg7CisgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
aXRlbV9maWxsKHByaXYsIGl0ZW0sIGNvdW50MSwgbGFzdFJvdyk7CisgICAgICAgICAgICBjb3Vu
dDErKzsKICAgICAgICAgfQotICAgICAgICBveSArPSB0aDsKKyAgICAgICAgdGlsZVBvc2l0aW9u
WSArPSB0aWxlSGVpZ2h0OwogICAgIH0KLSAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgPSBv
ZmZfeTsKKyAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgPSBvZmZzZXRZOwogfQogCiAvKioK
QEAgLTk4OSwzNiArOTg5LDM2IEBAIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV92aWV3X3dyYXBfdXAoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSoKICAqLwogc3RhdGlj
IHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfd3JhcF9kb3duKEV3a19UaWxlZF9C
YWNraW5nX1N0b3JlX0RhdGEqIHByaXYsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5LCB1bnNp
Z25lZCBpbnQgY291bnQpCiB7Ci0gICAgRXZhc19Db29yZCB0dyA9IHByaXYtPnZpZXcudGlsZS53
aWR0aDsKLSAgICBFdmFzX0Nvb3JkIHRoID0gcHJpdi0+dmlldy50aWxlLmhlaWdodDsKLSAgICBF
dmFzX0Nvb3JkIG9mZl95ID0gcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55IC0gY291bnQgKiB0aDsK
LSAgICBFdmFzX0Nvb3JkIG95ID0geSArIG9mZl95ICsgKGNvdW50IC0gMSkgKiB0aDsKLSAgICBF
aW5hX0lubGlzdCoqIGl0cl9zdGFydCwgKippdHJfZW5kOworICAgIEV2YXNfQ29vcmQgdGlsZVdp
ZHRoID0gcHJpdi0+dmlldy50aWxlLndpZHRoOworICAgIEV2YXNfQ29vcmQgdGlsZUhlaWdodCA9
IHByaXYtPnZpZXcudGlsZS5oZWlnaHQ7CisgICAgRXZhc19Db29yZCBvZmZzZXRZID0gcHJpdi0+
dmlldy5vZmZzZXQuYmFzZS55IC0gY291bnQgKiB0aWxlSGVpZ2h0OworICAgIEV2YXNfQ29vcmQg
dGlsZVBvc2l0aW9uWSA9IHkgKyBvZmZzZXRZICsgKGNvdW50IC0gMSkgKiB0aWxlSGVpZ2h0Owor
ICAgIEVpbmFfSW5saXN0KiogaXRlcmF0b3JTdGFydCwgKippdGVyYXRvckVuZDsKIAotICAgIGl0
cl9zdGFydCA9IHByaXYtPnZpZXcuaXRlbXMgKyBwcml2LT52aWV3LnJvd3MgLSAxOwotICAgIGl0
cl9lbmQgPSBwcml2LT52aWV3Lml0ZW1zOworICAgIGl0ZXJhdG9yU3RhcnQgPSBwcml2LT52aWV3
Lml0ZW1zICsgcHJpdi0+dmlldy5yb3dzIC0gMTsKKyAgICBpdGVyYXRvckVuZCA9IHByaXYtPnZp
ZXcuaXRlbXM7CiAKICAgICBmb3IgKDsgY291bnQgPiAwOyBjb3VudC0tKSB7Ci0gICAgICAgIEVp
bmFfSW5saXN0KiogaXRyOwotICAgICAgICBFaW5hX0lubGlzdCogdG1wID0gKml0cl9zdGFydDsK
LSAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSogaXQ7Ci0gICAgICAgIEV2YXNf
Q29vcmQgb3ggPSB4ICsgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54OwotICAgICAgICBpbnQgYyA9
IDA7CisgICAgICAgIEVpbmFfSW5saXN0KiogaXRlcmF0b3JMaXN0OworICAgICAgICBFaW5hX0lu
bGlzdCogdGVtcCA9ICppdGVyYXRvclN0YXJ0OworICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19T
dG9yZV9JdGVtKiBpdGVtOworICAgICAgICBFdmFzX0Nvb3JkIHRpbGVQb3NpdGlvblggPSB4ICsg
cHJpdi0+dmlldy5vZmZzZXQuYmFzZS54OworICAgICAgICBpbnQgY291bnQxID0gMDsKIAotICAg
ICAgICBmb3IgKGl0ciA9IGl0cl9zdGFydDsgaXRyID4gaXRyX2VuZDsgaXRyLS0pCi0gICAgICAg
ICAgICAqaXRyID0gKihpdHIgLSAxKTsKLSAgICAgICAgKml0ciA9IHRtcDsKKyAgICAgICAgZm9y
IChpdGVyYXRvckxpc3QgPSBpdGVyYXRvclN0YXJ0OyBpdGVyYXRvckxpc3QgPiBpdGVyYXRvckVu
ZDsgaXRlcmF0b3JMaXN0LS0pCisgICAgICAgICAgICAqaXRlcmF0b3JMaXN0ID0gKihpdGVyYXRv
ckxpc3QgLSAxKTsKKyAgICAgICAgKml0ZXJhdG9yTGlzdCA9IHRlbXA7CiAKICAgICAgICAgcHJp
di0+bW9kZWwuYmFzZS5yb3ctLTsKLSAgICAgICAgRUlOQV9JTkxJU1RfRk9SRUFDSCh0bXAsIGl0
KSB7Ci0gICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9tb3ZlKGl0LCBv
eCwgb3kpOwotICAgICAgICAgICAgb3ggKz0gdHc7Ci0gICAgICAgICAgICBfZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfaXRlbV9maWxsKHByaXYsIGl0LCBjLCAwKTsKLSAgICAgICAgICAgIGMrKzsK
KyAgICAgICAgRUlOQV9JTkxJU1RfRk9SRUFDSCh0ZW1wLCBpdGVtKSB7CisgICAgICAgICAgICBf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9tb3ZlKGl0ZW0sIHRpbGVQb3NpdGlvblgsIHRp
bGVQb3NpdGlvblkpOworICAgICAgICAgICAgdGlsZVBvc2l0aW9uWCArPSB0aWxlV2lkdGg7Cisg
ICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9maWxsKHByaXYsIGl0ZW0s
IGNvdW50MSwgMCk7CisgICAgICAgICAgICBjb3VudDErKzsKICAgICAgICAgfQotICAgICAgICBv
eSAtPSB0aDsKKyAgICAgICAgdGlsZVBvc2l0aW9uWSAtPSB0aWxlSGVpZ2h0OwogICAgIH0KLSAg
ICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgPSBvZmZfeTsKKyAgICBwcml2LT52aWV3Lm9mZnNl
dC5iYXNlLnkgPSBvZmZzZXRZOwogfQogCiAvKioKQEAgLTEwMzYsMzYgKzEwMzYsMzYgQEAgc3Rh
dGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfd3JhcF9kb3duKEV3a19UaWxl
ZF9CYWNraW5nX1N0b3JlX0RhdGEKICAqLwogc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5n
X3N0b3JlX3ZpZXdfd3JhcF9sZWZ0KEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYs
IEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5LCB1bnNpZ25lZCBpbnQgY291bnQpCiB7Ci0gICAg
dW5zaWduZWQgaW50IHIsIGxhc3RfY29sID0gcHJpdi0+dmlldy5jb2xzIC0gMTsKLSAgICBFdmFz
X0Nvb3JkIHR3ID0gcHJpdi0+dmlldy50aWxlLndpZHRoOwotICAgIEV2YXNfQ29vcmQgdGggPSBw
cml2LT52aWV3LnRpbGUuaGVpZ2h0OwotICAgIEV2YXNfQ29vcmQgb2ZmX3ggPSBwcml2LT52aWV3
Lm9mZnNldC5iYXNlLnggKyBjb3VudCAqIHR3OworICAgIHVuc2lnbmVkIGludCByb3csIGxhc3RD
b2x1bW4gPSBwcml2LT52aWV3LmNvbHMgLSAxOworICAgIEV2YXNfQ29vcmQgdGlsZVdpZHRoID0g
cHJpdi0+dmlldy50aWxlLndpZHRoOworICAgIEV2YXNfQ29vcmQgdGlsZUhlaWdodCA9IHByaXYt
PnZpZXcudGlsZS5oZWlnaHQ7CisgICAgRXZhc19Db29yZCBvZmZzZXRYID0gcHJpdi0+dmlldy5v
ZmZzZXQuYmFzZS54ICsgY291bnQgKiB0aWxlV2lkdGg7CiAgICAgRXZhc19Db29yZCBveSA9IHkg
KyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnk7Ci0gICAgRWluYV9Jbmxpc3QqKiBpdHI7Ci0gICAg
RWluYV9Jbmxpc3QqKiBpdHJfZW5kOworICAgIEVpbmFfSW5saXN0KiogaXRlcmF0b3I7CisgICAg
RWluYV9Jbmxpc3QqKiBpdGVyYXRvckVuZDsKIAotICAgIGl0ciA9IHByaXYtPnZpZXcuaXRlbXM7
Ci0gICAgaXRyX2VuZCA9IGl0ciArIHByaXYtPnZpZXcucm93czsKLSAgICByID0gMDsKKyAgICBp
dGVyYXRvciA9IHByaXYtPnZpZXcuaXRlbXM7CisgICAgaXRlcmF0b3JFbmQgPSBpdGVyYXRvciAr
IHByaXYtPnZpZXcucm93czsKKyAgICByb3cgPSAwOwogCi0gICAgcHJpdi0+bW9kZWwuYmFzZS5j
b2wgKz0gY291bnQ7CisgICAgcHJpdi0+bW9kZWwuYmFzZS5jb2x1bW4gKz0gY291bnQ7CiAKLSAg
ICBmb3IgKDsgaXRyIDwgaXRyX2VuZDsgaXRyKyssIHIrKykgewotICAgICAgICBFdmFzX0Nvb3Jk
IG94ID0geCArIChsYXN0X2NvbCAtIGNvdW50ICsgMSkgKiB0dyArIG9mZl94OwotICAgICAgICB1
bnNpZ25lZCBpbnQgaSwgYyA9IGxhc3RfY29sIC0gY291bnQgKyAxOworICAgIGZvciAoOyBpdGVy
YXRvciA8IGl0ZXJhdG9yRW5kOyBpdGVyYXRvcisrLCByb3crKykgeworICAgICAgICBFdmFzX0Nv
b3JkIG94ID0geCArIChsYXN0Q29sdW1uIC0gY291bnQgKyAxKSAqIHRpbGVXaWR0aCArIG9mZnNl
dFg7CisgICAgICAgIHVuc2lnbmVkIGludCBjID0gbGFzdENvbHVtbiAtIGNvdW50ICsgMTsKIAot
ICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKywgYysrLCBveCArPSB0dykgeworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGNvdW50OyBpKyssIGMrKywgb3ggKz0g
dGlsZVdpZHRoKSB7CiAgICAgICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKiBp
dDsKLSAgICAgICAgICAgIGl0ID0gRUlOQV9JTkxJU1RfQ09OVEFJTkVSX0dFVCgqaXRyLCBFd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKTsKLSAgICAgICAgICAgICppdHIgPSBlaW5hX2lubGlz
dF9kZW1vdGUoKml0ciwgKml0cik7CisgICAgICAgICAgICBpdCA9IEVJTkFfSU5MSVNUX0NPTlRB
SU5FUl9HRVQoKml0ZXJhdG9yLCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKTsKKyAgICAg
ICAgICAgICppdGVyYXRvciA9IGVpbmFfaW5saXN0X2RlbW90ZSgqaXRlcmF0b3IsICppdGVyYXRv
cik7CiAKICAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX21vdmUoaXQs
IG94LCBveSk7Ci0gICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9maWxs
KHByaXYsIGl0LCBjLCByKTsKKyAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9p
dGVtX2ZpbGwocHJpdiwgaXQsIGMsIHJvdyk7CiAgICAgICAgIH0KLSAgICAgICAgb3kgKz0gdGg7
CisgICAgICAgIG95ICs9IHRpbGVIZWlnaHQ7CiAgICAgfQogCi0gICAgcHJpdi0+dmlldy5vZmZz
ZXQuYmFzZS54ID0gb2ZmX3g7CisgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54ID0gb2Zmc2V0
WDsKIH0KIAogLyoqCkBAIC0xMDgzLDE4MyArMTA4MywxODMgQEAgc3RhdGljIHZvaWQgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfd3JhcF9sZWZ0KEV3a19UaWxlZF9CYWNraW5nX1N0b3Jl
X0RhdGEKICAqLwogc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfd3Jh
cF9yaWdodChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2LCBFdmFzX0Nvb3JkIHgs
IEV2YXNfQ29vcmQgeSwgdW5zaWduZWQgaW50IGNvdW50KQogewotICAgIHVuc2lnbmVkIGludCBy
OwotICAgIEV2YXNfQ29vcmQgdHcgPSBwcml2LT52aWV3LnRpbGUud2lkdGg7Ci0gICAgRXZhc19D
b29yZCB0aCA9IHByaXYtPnZpZXcudGlsZS5oZWlnaHQ7Ci0gICAgRXZhc19Db29yZCBvZmZfeCA9
IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCAtIGNvdW50ICogdHc7Ci0gICAgRXZhc19Db29yZCBv
eSA9IHkgKyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnk7Ci0gICAgRWluYV9Jbmxpc3QqKiBpdHIs
ICoqIGl0cl9lbmQ7CisgICAgdW5zaWduZWQgaW50IHJvdzsKKyAgICBFdmFzX0Nvb3JkIHRpbGVX
aWR0aCA9IHByaXYtPnZpZXcudGlsZS53aWR0aDsKKyAgICBFdmFzX0Nvb3JkIHRpbGVIZWlnaHQg
PSBwcml2LT52aWV3LnRpbGUuaGVpZ2h0OworICAgIEV2YXNfQ29vcmQgb2Zmc2V0WCA9IHByaXYt
PnZpZXcub2Zmc2V0LmJhc2UueCAtIGNvdW50ICogdGlsZVdpZHRoOworICAgIEV2YXNfQ29vcmQg
dGlsZVBvc2l0aW9uWSA9IHkgKyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnk7CisgICAgRWluYV9J
bmxpc3QqKiBpdGVyYXRvciwgKiogaXRlcmF0b3JFbmQ7CiAKLSAgICBpdHIgPSBwcml2LT52aWV3
Lml0ZW1zOwotICAgIGl0cl9lbmQgPSBpdHIgKyBwcml2LT52aWV3LnJvd3M7Ci0gICAgciA9IDA7
CisgICAgaXRlcmF0b3IgPSBwcml2LT52aWV3Lml0ZW1zOworICAgIGl0ZXJhdG9yRW5kID0gaXRl
cmF0b3IgKyBwcml2LT52aWV3LnJvd3M7CisgICAgcm93ID0gMDsKIAotICAgIHByaXYtPm1vZGVs
LmJhc2UuY29sIC09IGNvdW50OworICAgIHByaXYtPm1vZGVsLmJhc2UuY29sdW1uIC09IGNvdW50
OwogCi0gICAgZm9yICg7IGl0ciA8IGl0cl9lbmQ7IGl0cisrLCByKyspIHsKLSAgICAgICAgRXZh
c19Db29yZCBveCA9IHggKyAoY291bnQgLSAxKSAqIHR3ICsgb2ZmX3g7Ci0gICAgICAgIHVuc2ln
bmVkIGludCBpLCBjID0gY291bnQgLSAxOworICAgIGZvciAoOyBpdGVyYXRvciA8IGl0ZXJhdG9y
RW5kOyBpdGVyYXRvcisrLCByb3crKykgeworICAgICAgICBFdmFzX0Nvb3JkIG94ID0geCArIChj
b3VudCAtIDEpICogdGlsZVdpZHRoICsgb2Zmc2V0WDsKKyAgICAgICAgdW5zaWduZWQgaW50IGMg
PSBjb3VudCAtIDE7CiAKLSAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyssIGMtLSwg
b3ggLT0gdHcpIHsKLSAgICAgICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0qIGl0
OwotICAgICAgICAgICAgaXQgPSBFSU5BX0lOTElTVF9DT05UQUlORVJfR0VUKCgqaXRyKS0+bGFz
dCwgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSk7Ci0gICAgICAgICAgICAqaXRyID0gZWlu
YV9pbmxpc3RfcHJvbW90ZSgqaXRyLCAoKml0ciktPmxhc3QpOworICAgICAgICBmb3IgKHVuc2ln
bmVkIGludCBpID0gMDsgaSA8IGNvdW50OyBpKyssIGMtLSwgb3ggLT0gdGlsZVdpZHRoKSB7Cisg
ICAgICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKiBpdGVtOworICAgICAgICAg
ICAgaXRlbSA9IEVJTkFfSU5MSVNUX0NPTlRBSU5FUl9HRVQoKCppdGVyYXRvciktPmxhc3QsIEV3
a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0pOworICAgICAgICAgICAgKml0ZXJhdG9yID0gZWlu
YV9pbmxpc3RfcHJvbW90ZSgqaXRlcmF0b3IsICgqaXRlcmF0b3IpLT5sYXN0KTsKIAotICAgICAg
ICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fbW92ZShpdCwgb3gsIG95KTsKLSAg
ICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2ZpbGwocHJpdiwgaXQsIGMs
IHIpOworICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fbW92ZShpdGVt
LCBveCwgdGlsZVBvc2l0aW9uWSk7CisgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfaXRlbV9maWxsKHByaXYsIGl0ZW0sIGMsIHJvdyk7CiAgICAgICAgIH0KLSAgICAgICAgb3kg
Kz0gdGg7CisgICAgICAgIHRpbGVQb3NpdGlvblkgKz0gdGlsZUhlaWdodDsKICAgICB9CiAKLSAg
ICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggPSBvZmZfeDsKKyAgICBwcml2LT52aWV3Lm9mZnNl
dC5iYXNlLnggPSBvZmZzZXRYOwogfQogCiBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfdmlld19yZWZpbGwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdiwgRXZh
c19Db29yZCB4LCBFdmFzX0Nvb3JkIHksIGludCBzdGVwWCwgaW50IHN0ZXBZKQogewotICAgIEVp
bmFfSW5saXN0KiogaXRyLCAqKml0cl9lbmQ7Ci0gICAgRXZhc19Db29yZCBiYXNlX294LCBveSwg
dHcsIHRoOworICAgIEVpbmFfSW5saXN0KiogaXRlcmF0b3IsICoqaXRlcmF0b3JFbmQ7CisgICAg
RXZhc19Db29yZCBiYXNlVGlsZVBvc2l0aW9uWCwgdGlsZVBvc2l0aW9uWSwgdGlsZVdpZHRoLCB0
aWxlSGVpZ2h0OwogICAgIHVuc2lnbmVkIGludCByOwogCiAgICAgZXZhc19vYmplY3RfbW92ZShw
cml2LT5iYXNlLmNsaXBwZXIsIHgsIHkpOwogCi0gICAgdHcgPSBwcml2LT52aWV3LnRpbGUud2lk
dGg7Ci0gICAgdGggPSBwcml2LT52aWV3LnRpbGUuaGVpZ2h0OworICAgIHRpbGVXaWR0aCA9IHBy
aXYtPnZpZXcudGlsZS53aWR0aDsKKyAgICB0aWxlSGVpZ2h0ID0gcHJpdi0+dmlldy50aWxlLmhl
aWdodDsKIAotICAgIGJhc2Vfb3ggPSB4ICsgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54OwotICAg
IG95ID0geSArIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueTsKKyAgICBiYXNlVGlsZVBvc2l0aW9u
WCA9IHggKyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLng7CisgICAgdGlsZVBvc2l0aW9uWSA9IHkg
KyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnk7CiAKLSAgICBpdHIgPSBwcml2LT52aWV3Lml0ZW1z
OwotICAgIGl0cl9lbmQgPSBpdHIgKyBwcml2LT52aWV3LnJvd3M7CisgICAgaXRlcmF0b3IgPSBw
cml2LT52aWV3Lml0ZW1zOworICAgIGl0ZXJhdG9yRW5kID0gaXRlcmF0b3IgKyBwcml2LT52aWV3
LnJvd3M7CiAgICAgciA9IDA7CiAKLSAgICBwcml2LT5tb2RlbC5iYXNlLmNvbCAtPSBzdGVwWDsK
KyAgICBwcml2LT5tb2RlbC5iYXNlLmNvbHVtbiAtPSBzdGVwWDsKICAgICBwcml2LT5tb2RlbC5i
YXNlLnJvdyAtPSBzdGVwWTsKIAotICAgIGZvciAoOyBpdHIgPCBpdHJfZW5kOyBpdHIrKywgcisr
KSB7Ci0gICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0qIGl0OwotICAgICAgICBF
dmFzX0Nvb3JkIG94ID0gYmFzZV9veDsKLSAgICAgICAgdW5zaWduZWQgaW50IGMgPSAwOwotICAg
ICAgICBFSU5BX0lOTElTVF9GT1JFQUNIKCppdHIsIGl0KSB7Ci0gICAgICAgICAgICBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9maWxsKHByaXYsIGl0LCBjLCByKTsKLSAgICAgICAgICAg
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX21vdmUoaXQsIG94LCBveSk7Ci0gICAgICAg
ICAgICBjKys7Ci0gICAgICAgICAgICBveCArPSB0dzsKKyAgICBmb3IgKDsgaXRlcmF0b3IgPCBp
dGVyYXRvckVuZDsgaXRlcmF0b3IrKywgcisrKSB7CisgICAgICAgIEV3a19UaWxlZF9CYWNraW5n
X1N0b3JlX0l0ZW0qIGl0ZW07CisgICAgICAgIEV2YXNfQ29vcmQgbmV3VGlsZVBvc2l0aW9uWCA9
IGJhc2VUaWxlUG9zaXRpb25YOworICAgICAgICB1bnNpZ25lZCBpbnQgY291bnQgPSAwOworICAg
ICAgICBFSU5BX0lOTElTVF9GT1JFQUNIKCppdGVyYXRvciwgaXRlbSkgeworICAgICAgICAgICAg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZmlsbChwcml2LCBpdGVtLCBjb3VudCwgcik7
CisgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9tb3ZlKGl0ZW0sIG5l
d1RpbGVQb3NpdGlvblgsIHRpbGVQb3NpdGlvblkpOworICAgICAgICAgICAgY291bnQrKzsKKyAg
ICAgICAgICAgIG5ld1RpbGVQb3NpdGlvblggKz0gdGlsZVdpZHRoOwogICAgICAgICB9Ci0gICAg
ICAgIG95ICs9IHRoOworICAgICAgICB0aWxlUG9zaXRpb25ZICs9IHRpbGVIZWlnaHQ7CiAgICAg
fQogfQogCiBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19wb3NfYXBw
bHkoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdiwgRXZhc19Db29yZCB4LCBFdmFz
X0Nvb3JkIHkpCiB7Ci0gICAgRWluYV9Jbmxpc3QqKiBpdHIsICoqaXRyX2VuZDsKLSAgICBFdmFz
X0Nvb3JkIGJhc2Vfb3gsIG95LCB0dywgdGg7CisgICAgRWluYV9Jbmxpc3QqKiBpdGVyYXRvciwg
KippdGVyYXRvckVuZDsKKyAgICBFdmFzX0Nvb3JkIGJhc2VUaWxlUG9zaXRpb25YLCBiYXNlVGls
ZVBvc2l0aW9uWSwgdGlsZVdpZHRoLCB0aWxlSGVpZ2h0OwogCiAgICAgZXZhc19vYmplY3RfbW92
ZShwcml2LT5iYXNlLmNsaXBwZXIsIHgsIHkpOwogCi0gICAgdHcgPSBwcml2LT52aWV3LnRpbGUu
d2lkdGg7Ci0gICAgdGggPSBwcml2LT52aWV3LnRpbGUuaGVpZ2h0OworICAgIHRpbGVXaWR0aCA9
IHByaXYtPnZpZXcudGlsZS53aWR0aDsKKyAgICB0aWxlSGVpZ2h0ID0gcHJpdi0+dmlldy50aWxl
LmhlaWdodDsKIAotICAgIGJhc2Vfb3ggPSB4ICsgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54Owot
ICAgIG95ID0geSArIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueTsKKyAgICBiYXNlVGlsZVBvc2l0
aW9uWCA9IHggKyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLng7CisgICAgYmFzZVRpbGVQb3NpdGlv
blkgPSB5ICsgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55OwogCi0gICAgaXRyID0gcHJpdi0+dmll
dy5pdGVtczsKLSAgICBpdHJfZW5kID0gaXRyICsgcHJpdi0+dmlldy5yb3dzOwotICAgIGZvciAo
OyBpdHIgPCBpdHJfZW5kOyBpdHIrKykgeworICAgIGl0ZXJhdG9yID0gcHJpdi0+dmlldy5pdGVt
czsKKyAgICBpdGVyYXRvckVuZCA9IGl0ZXJhdG9yICsgcHJpdi0+dmlldy5yb3dzOworICAgIGZv
ciAoOyBpdGVyYXRvciA8IGl0ZXJhdG9yRW5kOyBpdGVyYXRvcisrKSB7CiAgICAgICAgIEV3a19U
aWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0qIGl0OwotICAgICAgICBFdmFzX0Nvb3JkIG94ID0gYmFz
ZV9veDsKLSAgICAgICAgRUlOQV9JTkxJU1RfRk9SRUFDSCgqaXRyLCBpdCkgewotICAgICAgICAg
ICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fbW92ZShpdCwgb3gsIG95KTsKLSAgICAg
ICAgICAgIG94ICs9IHR3OworICAgICAgICBFdmFzX0Nvb3JkIG94ID0gYmFzZVRpbGVQb3NpdGlv
blg7CisgICAgICAgIEVJTkFfSU5MSVNUX0ZPUkVBQ0goKml0ZXJhdG9yLCBpdCkgeworICAgICAg
ICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fbW92ZShpdCwgb3gsIGJhc2VUaWxl
UG9zaXRpb25ZKTsKKyAgICAgICAgICAgIG94ICs9IHRpbGVXaWR0aDsKICAgICAgICAgfQotICAg
ICAgICBveSArPSB0aDsKKyAgICAgICAgYmFzZVRpbGVQb3NpdGlvblkgKz0gdGlsZUhlaWdodDsK
ICAgICB9CiB9CiAKIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9j
YWxjdWxhdGVfb2Zmc2V0X2ZvcmNlKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYp
CiB7Ci0gICAgRXZhc19Db29yZCBkeCA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci54IC0gcHJpdi0+
dmlldy5vZmZzZXQub2xkLng7Ci0gICAgRXZhc19Db29yZCBkeSA9IHByaXYtPnZpZXcub2Zmc2V0
LmN1ci55IC0gcHJpdi0+dmlldy5vZmZzZXQub2xkLnk7Ci0gICAgRXZhc19Db29yZCB0dywgdGg7
Ci0gICAgaW50IHN0ZXBfeSwgc3RlcF94OworICAgIEV2YXNfQ29vcmQgZGVsdGFYID0gcHJpdi0+
dmlldy5vZmZzZXQuY3VyLnggLSBwcml2LT52aWV3Lm9mZnNldC5vbGQueDsKKyAgICBFdmFzX0Nv
b3JkIGRlbHRhWSA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci55IC0gcHJpdi0+dmlldy5vZmZzZXQu
b2xkLnk7CisgICAgRXZhc19Db29yZCB0aWxlV2lkdGgsIHRpbGVIZWlnaHQ7CisgICAgaW50IHN0
ZXBZLCBzdGVwWDsKIAotICAgIElORigibz0lcCwgb2Zmc2V0OiAlKzRkLCAlKzRkICglKzRkLCAl
KzRkKSIsCi0gICAgICAgIHByaXYtPnNlbGYsIGR4LCBkeSwgcHJpdi0+dmlldy5vZmZzZXQuY3Vy
LngsIHByaXYtPnZpZXcub2Zmc2V0LmN1ci55KTsKKyAgICBJTkYoImV3a1RpbGUlcCwgb2Zmc2V0
OiAlKzRkLCAlKzRkICglKzRkLCAlKzRkKSIsCisgICAgICAgIHByaXYtPnNlbGYsIGRlbHRhWCwg
ZGVsdGFZLCBwcml2LT52aWV3Lm9mZnNldC5jdXIueCwgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkp
OwogCi0gICAgdHcgPSBwcml2LT52aWV3LnRpbGUud2lkdGg7Ci0gICAgdGggPSBwcml2LT52aWV3
LnRpbGUuaGVpZ2h0OworICAgIHRpbGVXaWR0aCA9IHByaXYtPnZpZXcudGlsZS53aWR0aDsKKyAg
ICB0aWxlSGVpZ2h0ID0gcHJpdi0+dmlldy50aWxlLmhlaWdodDsKIAotICAgIGxvbmcgbmV3X2Nv
bCA9IC1wcml2LT52aWV3Lm9mZnNldC5jdXIueCAvIHR3OwotICAgIHN0ZXBfeCA9IHByaXYtPm1v
ZGVsLmJhc2UuY29sIC0gbmV3X2NvbDsKLSAgICBsb25nIG5ld19yb3cgPSAtcHJpdi0+dmlldy5v
ZmZzZXQuY3VyLnkgLyB0aDsKLSAgICBzdGVwX3kgPSBwcml2LT5tb2RlbC5iYXNlLnJvdyAtIG5l
d19yb3c7CisgICAgbG9uZyBuZXdDb2x1bW4gPSAtcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggLyB0
aWxlV2lkdGg7CisgICAgc3RlcFggPSBwcml2LT5tb2RlbC5iYXNlLmNvbHVtbiAtIG5ld0NvbHVt
bjsKKyAgICBsb25nIG5ld1JvdyA9IC1wcml2LT52aWV3Lm9mZnNldC5jdXIueSAvIHRpbGVIZWln
aHQ7CisgICAgc3RlcFkgPSBwcml2LT5tb2RlbC5iYXNlLnJvdyAtIG5ld1JvdzsKIAogICAgIHBy
aXYtPnZpZXcub2Zmc2V0Lm9sZC54ID0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLng7CiAgICAgcHJp
di0+dmlldy5vZmZzZXQub2xkLnkgPSBwcml2LT52aWV3Lm9mZnNldC5jdXIueTsKICAgICBldmFz
X29iamVjdF9tb3ZlKAotICAgICAgICBwcml2LT5jb250ZW50c19jbGlwcGVyLAorICAgICAgICBw
cml2LT5jb250ZW50c0NsaXBwZXIsCiAgICAgICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1ci54ICsg
cHJpdi0+dmlldy54LAogICAgICAgICBwcml2LT52aWV3Lm9mZnNldC5jdXIueSArIHByaXYtPnZp
ZXcueSk7CiAKLSAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggKz0gZHggLSBzdGVwX3ggKiB0
dzsKLSAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgKz0gZHkgLSBzdGVwX3kgKiB0aDsKKyAg
ICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggKz0gZGVsdGFYIC0gc3RlcFggKiB0aWxlV2lkdGg7
CisgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ICs9IGRlbHRhWSAtIHN0ZXBZICogdGlsZUhl
aWdodDsKIAogICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3JlZmlsbAotICAgICAg
ICAocHJpdiwgcHJpdi0+dmlldy54LCBwcml2LT52aWV3LnksIHN0ZXBfeCwgc3RlcF95KTsKKyAg
ICAgICAgKHByaXYsIHByaXYtPnZpZXcueCwgcHJpdi0+dmlldy55LCBzdGVwWCwgc3RlcFkpOwog
fQogCiBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfY2FsY3VsYXRl
X29mZnNldChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2LCBFdmFzX0Nvb3JkIHgs
IEV2YXNfQ29vcmQgeSkKIHsKLSAgICBFdmFzX0Nvb3JkIGR4ID0gcHJpdi0+dmlldy5vZmZzZXQu
Y3VyLnggLSBwcml2LT52aWV3Lm9mZnNldC5vbGQueDsKLSAgICBFdmFzX0Nvb3JkIGR5ID0gcHJp
di0+dmlldy5vZmZzZXQuY3VyLnkgLSBwcml2LT52aWV3Lm9mZnNldC5vbGQueTsKLSAgICBFdmFz
X0Nvb3JkIHR3LCB0aDsKLSAgICBpbnQgc3RlcF95LCBzdGVwX3g7CisgICAgRXZhc19Db29yZCBk
ZWx0YVggPSBwcml2LT52aWV3Lm9mZnNldC5jdXIueCAtIHByaXYtPnZpZXcub2Zmc2V0Lm9sZC54
OworICAgIEV2YXNfQ29vcmQgZGVsdGFZID0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkgLSBwcml2
LT52aWV3Lm9mZnNldC5vbGQueTsKKyAgICBFdmFzX0Nvb3JkIHRpbGVXaWR0aCwgdGlsZUhlaWdo
dDsKKyAgICBpbnQgc3RlcFksIHN0ZXBYOwogCi0gICAgSU5GKCJvPSVwLCBvZmZzZXQ6ICUrNGQs
ICUrNGQgKCUrNGQsICUrNGQpIiwKLSAgICAgICAgcHJpdi0+c2VsZiwgZHgsIGR5LCBwcml2LT52
aWV3Lm9mZnNldC5jdXIueCwgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkpOworICAgIElORigiZXdr
VGlsZSVwLCBvZmZzZXQ6ICUrNGQsICUrNGQgKCUrNGQsICUrNGQpIiwKKyAgICAgICAgcHJpdi0+
c2VsZiwgZGVsdGFYLCBkZWx0YVksIHByaXYtPnZpZXcub2Zmc2V0LmN1ci54LCBwcml2LT52aWV3
Lm9mZnNldC5jdXIueSk7CiAKLSAgICBpZiAoIWR4ICYmICFkeSkKKyAgICBpZiAoIWRlbHRhWCAm
JiAhZGVsdGFZKQogICAgICAgICByZXR1cm47CiAKLSAgICB0dyA9IHByaXYtPnZpZXcudGlsZS53
aWR0aDsKLSAgICB0aCA9IHByaXYtPnZpZXcudGlsZS5oZWlnaHQ7CisgICAgdGlsZVdpZHRoID0g
cHJpdi0+dmlldy50aWxlLndpZHRoOworICAgIHRpbGVIZWlnaHQgPSBwcml2LT52aWV3LnRpbGUu
aGVpZ2h0OwogCi0gICAgbG9uZyBuZXdfY29sID0gLXByaXYtPnZpZXcub2Zmc2V0LmN1ci54IC8g
dHc7Ci0gICAgc3RlcF94ID0gcHJpdi0+bW9kZWwuYmFzZS5jb2wgLSBuZXdfY29sOwotICAgIGxv
bmcgbmV3X3JvdyA9IC1wcml2LT52aWV3Lm9mZnNldC5jdXIueSAvIHRoOwotICAgIHN0ZXBfeSA9
IHByaXYtPm1vZGVsLmJhc2Uucm93IC0gbmV3X3JvdzsKKyAgICBsb25nIG5ld0NvbCA9IC1wcml2
LT52aWV3Lm9mZnNldC5jdXIueCAvIHRpbGVXaWR0aDsKKyAgICBzdGVwWCA9IHByaXYtPm1vZGVs
LmJhc2UuY29sdW1uIC0gbmV3Q29sOworICAgIGxvbmcgbmV3Um93ID0gLXByaXYtPnZpZXcub2Zm
c2V0LmN1ci55IC8gdGlsZUhlaWdodDsKKyAgICBzdGVwWSA9IHByaXYtPm1vZGVsLmJhc2Uucm93
IC0gbmV3Um93OwogCiAgICAgcHJpdi0+dmlldy5vZmZzZXQub2xkLnggPSBwcml2LT52aWV3Lm9m
ZnNldC5jdXIueDsKICAgICBwcml2LT52aWV3Lm9mZnNldC5vbGQueSA9IHByaXYtPnZpZXcub2Zm
c2V0LmN1ci55OwogICAgIGV2YXNfb2JqZWN0X21vdmUoCi0gICAgICAgIHByaXYtPmNvbnRlbnRz
X2NsaXBwZXIsCisgICAgICAgIHByaXYtPmNvbnRlbnRzQ2xpcHBlciwKICAgICAgICAgcHJpdi0+
dmlldy5vZmZzZXQuY3VyLnggKyBwcml2LT52aWV3LngsCiAgICAgICAgIHByaXYtPnZpZXcub2Zm
c2V0LmN1ci55ICsgcHJpdi0+dmlldy55KTsKIAotICAgIGlmICgoc3RlcF94IDwgMCAmJiBzdGVw
X3ggPD0gLXByaXYtPnZpZXcuY29scykKLSAgICAgICAgfHwgKHN0ZXBfeCA+IDAgJiYgc3RlcF94
ID49IHByaXYtPnZpZXcuY29scykKLSAgICAgICAgfHwgKHN0ZXBfeSA8IDAgJiYgc3RlcF95IDw9
IC1wcml2LT52aWV3LnJvd3MpCi0gICAgICAgIHx8IChzdGVwX3kgPiAwICYmIHN0ZXBfeSA+PSBw
cml2LT52aWV3LnJvd3MpKSB7CisgICAgaWYgKChzdGVwWCA8IDAgJiYgc3RlcFggPD0gLXByaXYt
PnZpZXcuY29scykKKyAgICAgICAgfHwgKHN0ZXBYID4gMCAmJiBzdGVwWCA+PSBwcml2LT52aWV3
LmNvbHMpCisgICAgICAgIHx8IChzdGVwWSA8IDAgJiYgc3RlcFkgPD0gLXByaXYtPnZpZXcucm93
cykKKyAgICAgICAgfHwgKHN0ZXBZID4gMCAmJiBzdGVwWSA+PSBwcml2LT52aWV3LnJvd3MpKSB7
CiAKLSAgICAgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54ICs9IGR4IC0gc3RlcF94ICogdHc7
Ci0gICAgICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSArPSBkeSAtIHN0ZXBfeSAqIHRoOwor
ICAgICAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggKz0gZGVsdGFYIC0gc3RlcFggKiB0aWxl
V2lkdGg7CisgICAgICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSArPSBkZWx0YVkgLSBzdGVw
WSAqIHRpbGVIZWlnaHQ7CiAKICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdf
cmVmaWxsCi0gICAgICAgICAgICAocHJpdiwgcHJpdi0+dmlldy54LCBwcml2LT52aWV3LnksIHN0
ZXBfeCwgc3RlcF95KTsKKyAgICAgICAgICAgIChwcml2LCBwcml2LT52aWV3LngsIHByaXYtPnZp
ZXcueSwgc3RlcFgsIHN0ZXBZKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHByaXYt
PnZpZXcub2Zmc2V0LmJhc2UueCArPSBkeDsKLSAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkg
Kz0gZHk7CisgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54ICs9IGRlbHRhWDsKKyAgICBwcml2
LT52aWV3Lm9mZnNldC5iYXNlLnkgKz0gZGVsdGFZOwogCi0gICAgaWYgKHN0ZXBfeSA8IDApCi0g
ICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3dyYXBfdXAocHJpdiwgeCwgeSwg
LXN0ZXBfeSk7Ci0gICAgZWxzZSBpZiAoc3RlcF95ID4gMCkKLSAgICAgICAgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX3ZpZXdfd3JhcF9kb3duKHByaXYsIHgsIHksIHN0ZXBfeSk7CisgICAgaWYg
KHN0ZXBZIDwgMCkKKyAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfd3JhcF91
cChwcml2LCB4LCB5LCAtc3RlcFkpOworICAgIGVsc2UgaWYgKHN0ZXBZID4gMCkKKyAgICAgICAg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfd3JhcF9kb3duKHByaXYsIHgsIHksIHN0ZXBZ
KTsKIAotICAgIGlmIChzdGVwX3ggPCAwKQotICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfdmlld193cmFwX2xlZnQocHJpdiwgeCwgeSwgLXN0ZXBfeCk7Ci0gICAgZWxzZSBpZiAoc3Rl
cF94ID4gMCkKLSAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfd3JhcF9yaWdo
dChwcml2LCB4LCB5LCBzdGVwX3gpOworICAgIGlmIChzdGVwWCA8IDApCisgICAgICAgIF9ld2tf
dGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3dyYXBfbGVmdChwcml2LCB4LCB5LCAtc3RlcFgpOwor
ICAgIGVsc2UgaWYgKHN0ZXBYID4gMCkKKyAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3ZpZXdfd3JhcF9yaWdodChwcml2LCB4LCB5LCBzdGVwWCk7CiAKICAgICBfZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfdmlld19wb3NfYXBwbHkocHJpdiwgeCwgeSk7CiB9CkBAIC0xMjcwLDMxICsx
MjcwLDMxIEBAIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9jYWxj
dWxhdGVfcG9zKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlCiAgICAgcHJpdi0+dmlldy54ID0geDsK
ICAgICBwcml2LT52aWV3LnkgPSB5OwogICAgIGV2YXNfb2JqZWN0X21vdmUoCi0gICAgICAgIHBy
aXYtPmNvbnRlbnRzX2NsaXBwZXIsCisgICAgICAgIHByaXYtPmNvbnRlbnRzQ2xpcHBlciwKICAg
ICAgICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggKyBwcml2LT52aWV3LngsCiAgICAgICAgIHBy
aXYtPnZpZXcub2Zmc2V0LmN1ci55ICsgcHJpdi0+dmlldy55KTsKIH0KIAogc3RhdGljIHZvaWQg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2ZpbGxfcmVuZGVyZXJzKEV3a19UaWxlZF9CYWNraW5n
X1N0b3JlX0RhdGEqIHByaXYpCiB7Ci0gICAgRWluYV9Jbmxpc3QqIGl0OworICAgIEVpbmFfSW5s
aXN0KiBsaXN0OwogICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0qIGl0ZW07CiAgICAg
aW50IGksIGo7CiAKICAgICBmb3IgKGkgPSAwOyBpIDwgcHJpdi0+dmlldy5yb3dzOyBpKyspIHsK
LSAgICAgICAgaXQgPSBwcml2LT52aWV3Lml0ZW1zW2ldOworICAgICAgICBsaXN0ID0gcHJpdi0+
dmlldy5pdGVtc1tpXTsKICAgICAgICAgaiA9IDA7Ci0gICAgICAgIEVJTkFfSU5MSVNUX0ZPUkVB
Q0goaXQsIGl0ZW0pCisgICAgICAgIEVJTkFfSU5MSVNUX0ZPUkVBQ0gobGlzdCwgaXRlbSkKICAg
ICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2ZpbGwocHJpdiwgaXRlbSwg
aisrLCBpKTsKICAgICB9CiB9CiAKIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV9zbWFydF9jYWxjdWxhdGUoRXZhc19PYmplY3QqIGV3a1RpbGUpCiB7Ci0gICAgRXZhc19Db29y
ZCB4LCB5LCB3LCBoOworICAgIEV2YXNfQ29vcmQgeCwgeSwgd2lkdGgsIGhlaWdodDsKIAotICAg
IGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldChld2tUaWxlLCAmeCwgJnksICZ3LCAmaCk7Ci0gICAg
REJHKCJvPSVwIGF0ICVkLCVkICsgJWR4JWQiLCBld2tUaWxlLCB4LCB5LCB3LCBoKTsKKyAgICBl
dmFzX29iamVjdF9nZW9tZXRyeV9nZXQoZXdrVGlsZSwgJngsICZ5LCAmd2lkdGgsICZoZWlnaHQp
OworICAgIERCRygiZXdrVGlsZSVwIGF0ICVkLCVkICsgJWR4JWQiLCBld2tUaWxlLCB4LCB5LCB3
aWR0aCwgaGVpZ2h0KTsKIAogICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKGV3a1RpbGUsIHBy
aXYpOwogCkBAIC0xMzAzLDI1ICsxMzAzLDI1IEBAIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9zbWFydF9jYWxjdWxhdGUoRXZhc19PYmplY3QqIGV3a1RpbGUpCiAgICAgZXdr
X3RpbGVfbWF0cml4X2ZyZWV6ZShwcml2LT5tb2RlbC5tYXRyaXgpOwogCiAgICAgaWYgKCFwcml2
LT5yZW5kZXIuc3VzcGVuZCAmJiBwcml2LT5jaGFuZ2VkLm1vZGVsKSB7Ci0gICAgICAgIHVuc2ln
bmVkIGxvbmcgY29scywgcm93czsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBjb2x1bW5zLCByb3dz
OwogCi0gICAgICAgIGNvbHMgPSBwcml2LT5tb2RlbC53aWR0aCAvIHByaXYtPnZpZXcudGlsZS53
aWR0aCArIDE7CisgICAgICAgIGNvbHVtbnMgPSBwcml2LT5tb2RlbC53aWR0aCAvIHByaXYtPnZp
ZXcudGlsZS53aWR0aCArIDE7CiAgICAgICAgIHJvd3MgPSBwcml2LT5tb2RlbC5oZWlnaHQgLyBw
cml2LT52aWV3LnRpbGUuaGVpZ2h0ICsgMTsKIAotICAgICAgICBwcml2LT5tb2RlbC5vbGQuY29s
cyA9IHByaXYtPm1vZGVsLmN1ci5jb2xzOwotICAgICAgICBwcml2LT5tb2RlbC5vbGQucm93cyA9
IHByaXYtPm1vZGVsLmN1ci5yb3dzOwotICAgICAgICBwcml2LT5tb2RlbC5jdXIuY29scyA9IGNv
bHM7Ci0gICAgICAgIHByaXYtPm1vZGVsLmN1ci5yb3dzID0gcm93czsKLSAgICAgICAgaWYgKHBy
aXYtPm1vZGVsLm9sZC5jb2xzID4gY29scykKLSAgICAgICAgICAgIGNvbHMgPSBwcml2LT5tb2Rl
bC5vbGQuY29sczsKKyAgICAgICAgcHJpdi0+bW9kZWwub2xkLmNvbHVtbnMgPSBwcml2LT5tb2Rl
bC5jdXJyZW50LmNvbHVtbnM7CisgICAgICAgIHByaXYtPm1vZGVsLm9sZC5yb3dzID0gcHJpdi0+
bW9kZWwuY3VycmVudC5yb3dzOworICAgICAgICBwcml2LT5tb2RlbC5jdXJyZW50LmNvbHVtbnMg
PSBjb2x1bW5zOworICAgICAgICBwcml2LT5tb2RlbC5jdXJyZW50LnJvd3MgPSByb3dzOworICAg
ICAgICBpZiAocHJpdi0+bW9kZWwub2xkLmNvbHVtbnMgPiBjb2x1bW5zKQorICAgICAgICAgICAg
Y29sdW1ucyA9IHByaXYtPm1vZGVsLm9sZC5jb2x1bW5zOwogICAgICAgICBpZiAocHJpdi0+bW9k
ZWwub2xkLnJvd3MgPiByb3dzKQogICAgICAgICAgICAgcm93cyA9IHByaXYtPm1vZGVsLm9sZC5y
b3dzOwotICAgICAgICBld2tfdGlsZV9tYXRyaXhfcmVzaXplKHByaXYtPm1vZGVsLm1hdHJpeCwg
Y29scywgcm93cyk7CisgICAgICAgIGV3a190aWxlX21hdHJpeF9yZXNpemUocHJpdi0+bW9kZWwu
bWF0cml4LCBjb2x1bW5zLCByb3dzKTsKICAgICB9CiAKLSAgICBpZiAocHJpdi0+Y2hhbmdlZC5w
b3MgJiYgKHByaXYtPnZpZXcueCAhPSB4IHx8IHByaXYtPnZpZXcueSAhPSB5KSkgeworICAgIGlm
IChwcml2LT5jaGFuZ2VkLnBvc2l0aW9uICYmIChwcml2LT52aWV3LnggIT0geCB8fCBwcml2LT52
aWV3LnkgIT0geSkpIHsKICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2Nh
bGN1bGF0ZV9wb3MocHJpdiwgeCwgeSk7Ci0gICAgICAgIHByaXYtPmNoYW5nZWQucG9zID0gRUlO
QV9GQUxTRTsKKyAgICAgICAgcHJpdi0+Y2hhbmdlZC5wb3NpdGlvbiA9IEVJTkFfRkFMU0U7CiAg
ICAgfQogICAgIGlmIChwcml2LT5jaGFuZ2VkLm9mZnNldCkgewogICAgICAgICBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfc21hcnRfY2FsY3VsYXRlX29mZnNldChwcml2LCB4LCB5KTsKQEAgLTEz
MjksNyArMTMyOSw3IEBAIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFy
dF9jYWxjdWxhdGUoRXZhc19PYmplY3QqIGV3a1RpbGUpCiAgICAgfQogCiAgICAgaWYgKHByaXYt
PmNoYW5nZWQuc2l6ZSkgewotICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRf
Y2FsY3VsYXRlX3NpemUocHJpdiwgdywgaCk7CisgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9zbWFydF9jYWxjdWxhdGVfc2l6ZShwcml2LCB3aWR0aCwgaGVpZ2h0KTsKICAgICAgICAg
cHJpdi0+Y2hhbmdlZC5zaXplID0gRUlOQV9GQUxTRTsKICAgICB9CiAKQEAgLTEzNDEsMTcgKzEz
NDEsMTcgQEAgc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1
bGF0ZShFdmFzX09iamVjdCogZXdrVGlsZSkKICAgICAgICAgcmVjdC5oID0gcHJpdi0+bW9kZWwu
aGVpZ2h0OwogICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZmlsbF9yZW5kZXJlcnMo
cHJpdik7CiAgICAgICAgIGV3a190aWxlX21hdHJpeF9yZXNpemUocHJpdi0+bW9kZWwubWF0cml4
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaXYtPm1vZGVsLmN1ci5jb2xzLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaXYtPm1vZGVsLmN1ci5yb3dzKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcml2LT5tb2RlbC5jdXJyZW50LmNvbHVtbnMs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpdi0+bW9kZWwuY3VycmVudC5yb3dz
KTsKICAgICAgICAgcHJpdi0+Y2hhbmdlZC5tb2RlbCA9IEVJTkFfRkFMU0U7Ci0gICAgICAgIGV2
YXNfb2JqZWN0X3Jlc2l6ZShwcml2LT5jb250ZW50c19jbGlwcGVyLCBwcml2LT5tb2RlbC53aWR0
aCwgcHJpdi0+bW9kZWwuaGVpZ2h0KTsKKyAgICAgICAgZXZhc19vYmplY3RfcmVzaXplKHByaXYt
PmNvbnRlbnRzQ2xpcHBlciwgcHJpdi0+bW9kZWwud2lkdGgsIHByaXYtPm1vZGVsLmhlaWdodCk7
CiAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9jYWxjdWxhdGVfb2Zmc2V0
X2ZvcmNlKHByaXYpOwogCiAgICAgICAgIC8qIE1ha2Ugc3VyZSB3ZSBkbyBub3QgbWlzcyBhbnkg
aW1wb3J0YW50IHJlcGFpbnQgYnkKICAgICAgICAgICogcmVwYWludGluZyB0aGUgd2hvbGUgdmll
d3BvcnQgKi8KLSAgICAgICAgY29uc3QgRWluYV9SZWN0YW5nbGUgciA9CisgICAgICAgIGNvbnN0
IEVpbmFfUmVjdGFuZ2xlIHJlY3QxID0KICAgICAgICAgeyAwLCAwLCBwcml2LT5tb2RlbC53aWR0
aCwgcHJpdi0+bW9kZWwuaGVpZ2h0IH07Ci0gICAgICAgIGV3a190aWxlX21hdHJpeF91cGRhdGUo
cHJpdi0+bW9kZWwubWF0cml4LCAmciwKKyAgICAgICAgZXdrX3RpbGVfbWF0cml4X3VwZGF0ZShw
cml2LT5tb2RlbC5tYXRyaXgsICZyZWN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwcml2LT52aWV3LnRpbGUuem9vbSk7CiAgICAgfQogCkBAIC0xNDAyLDcgKzE0MDIsNyBAQCB2
b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3JlbmRlcl9jYl9zZXQoRXZhc19PYmplY3QqIGV3
a1RpbGUsIEVpbmFfQm9vbCAoKmNhbAogewogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJO
KGNhbGxiYWNrKTsKICAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihld2tUaWxlLCBwcml2KTsK
LSAgICBwcml2LT5yZW5kZXIuY2IgPSBjYWxsYmFjazsKKyAgICBwcml2LT5yZW5kZXIuY2FsbGJh
Y2sgPSBjYWxsYmFjazsKICAgICBwcml2LT5yZW5kZXIuZGF0YSA9ICh2b2lkKilkYXRhOwogfQog
CkBAIC0xNDM5LDcgKzE0MzksNyBAQCBzdGF0aWMgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9zY3JvbGxfZnVsbF9vZmZzZXRfc2V0X2ludGVybmFsKEV3a19UaQogCiBFaW5hX0Jv
b2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc2Nyb2xsX2Z1bGxfb2Zmc2V0X3NldChFdmFzX09i
amVjdCogZXdrVGlsZSwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHkpCiB7Ci0gICAgREJHKCJv
PSVwLCB4PSVkLCB5PSVkIiwgZXdrVGlsZSwgeCwgeSk7CisgICAgREJHKCJld2tUaWxlJXAsIHg9
JWQsIHk9JWQiLCBld2tUaWxlLCB4LCB5KTsKIAogICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJO
KGV3a1RpbGUsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIGlmICh4ID09IHByaXYtPnZpZXcub2Zm
c2V0LmN1ci54ICYmIHkgPT0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkpCkBAIC0xNDQ4LDE2ICsx
NDQ4LDE2IEBAIEVpbmFfQm9vbCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zY3JvbGxfZnVsbF9v
ZmZzZXRfc2V0KEV2YXNfT2JqZWN0KiBld2tUaWxlLCBFCiAgICAgcmV0dXJuIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV9zY3JvbGxfZnVsbF9vZmZzZXRfc2V0X2ludGVybmFsKHByaXYsIHgsIHkp
OwogfQogCi1FaW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc2Nyb2xsX2Z1bGxfb2Zm
c2V0X2FkZChFdmFzX09iamVjdCogZXdrVGlsZSwgRXZhc19Db29yZCBkeCwgRXZhc19Db29yZCBk
eSkKK0VpbmFfQm9vbCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zY3JvbGxfZnVsbF9vZmZzZXRf
YWRkKEV2YXNfT2JqZWN0KiBld2tUaWxlLCBFdmFzX0Nvb3JkIGRlbHRhWCwgRXZhc19Db29yZCBk
ZWx0YVkpCiB7Ci0gICAgREJHKCJvPSVwLCBkeD0lZCwgZHk9JWQiLCBld2tUaWxlLCBkeCwgZHkp
OworICAgIERCRygiZXdrVGlsZSVwLCBkZWx0YVg9JWQsIGRlbHRhWT0lZCIsIGV3a1RpbGUsIGRl
bHRhWCwgZGVsdGFZKTsKIAogICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKGV3a1RpbGUsIHBy
aXYsIEVJTkFfRkFMU0UpOwotICAgIGlmICghZHggJiYgIWR5KQorICAgIGlmICghZGVsdGFYICYm
ICFkZWx0YVkpCiAgICAgICAgIHJldHVybiBFSU5BX1RSVUU7CiAKICAgICByZXR1cm4gX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX3Njcm9sbF9mdWxsX29mZnNldF9zZXRfaW50ZXJuYWwKLSAgICAg
ICAgICAgICAgIChwcml2LCBwcml2LT52aWV3Lm9mZnNldC5jdXIueCArIGR4LCBwcml2LT52aWV3
Lm9mZnNldC5jdXIueSArIGR5KTsKKyAgICAgICAgICAgICAgIChwcml2LCBwcml2LT52aWV3Lm9m
ZnNldC5jdXIueCArIGRlbHRhWCwgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkgKyBkZWx0YVkpOwog
fQogCiBzdGF0aWMgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV96b29tX3NldF9p
bnRlcm5hbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2LCBmbG9hdCogem9vbSwg
RXZhc19Db29yZCBjdXJyZW50WCwgRXZhc19Db29yZCBjdXJyZW50WSwgRXZhc19Db29yZCogb2Zm
c2V0WCwgRXZhc19Db29yZCogb2Zmc2V0WSkKQEAgLTE0NzIsMTkgKzE0NzIsMTkgQEAgc3RhdGlj
IEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfem9vbV9zZXRfaW50ZXJuYWwoRXdr
X1RpbGVkX0JhY2tpbmdfU3QKICAgICB9CiAKICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
cHJlX3JlbmRlcl9yZXF1ZXN0X2ZsdXNoKHByaXYpOwotICAgIEV2YXNfQ29vcmQgdHcsIHRoOwor
ICAgIEV2YXNfQ29vcmQgdGlsZVdpZHRoLCB0aWxlSGVpZ2h0OwogCiAgICAgKnpvb20gPSBST1VO
REVEX1pPT00ocHJpdi0+dmlldy50aWxlLndpZHRoLCAqem9vbSk7CiAKLSAgICB0dyA9IHByaXYt
PnZpZXcudGlsZS53aWR0aDsKLSAgICB0aCA9IHByaXYtPnZpZXcudGlsZS5oZWlnaHQ7CisgICAg
dGlsZVdpZHRoID0gcHJpdi0+dmlldy50aWxlLndpZHRoOworICAgIHRpbGVIZWlnaHQgPSBwcml2
LT52aWV3LnRpbGUuaGVpZ2h0OwogCiAgICAgZmxvYXQgc2NhbGUgPSAqem9vbSAvIHByaXYtPnZp
ZXcudGlsZS56b29tOwogCiAgICAgcHJpdi0+dmlldy50aWxlLnpvb20gPSAqem9vbTsKICAgICAv
LyB0b2RvOiBjaGVjayBjdXJyZW50WCBbMCwgd10uLi4KLSAgICBwcml2LT52aWV3Lm9mZnNldC56
b29tX2NlbnRlci54ID0gY3VycmVudFg7Ci0gICAgcHJpdi0+dmlldy5vZmZzZXQuem9vbV9jZW50
ZXIueSA9IGN1cnJlbnRZOworICAgIHByaXYtPnZpZXcub2Zmc2V0Lnpvb21DZW50ZXIueCA9IGN1
cnJlbnRYOworICAgIHByaXYtPnZpZXcub2Zmc2V0Lnpvb21DZW50ZXIueSA9IGN1cnJlbnRZOwog
CiAKICAgICBpZiAoIXByaXYtPnZpZXcud2lkdGggfHwgIXByaXYtPnZpZXcuaGVpZ2h0KSB7CkBA
IC0xNDkyLDM4ICsxNDkyLDM4IEBAIHN0YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5n
X3N0b3JlX3pvb21fc2V0X2ludGVybmFsKEV3a19UaWxlZF9CYWNraW5nX1N0CiAgICAgICAgIHBy
aXYtPnZpZXcub2Zmc2V0LmJhc2UueSA9IDA7CiAgICAgICAgIHJldHVybiBFSU5BX1RSVUU7CiAg
ICAgfQotICAgIEVpbmFfSW5saXN0KiogaXRyLCAqKml0cl9lbmQ7CisgICAgRWluYV9Jbmxpc3Qq
KiBpdGVyYXRvciwgKippdGVyYXRvckVuZDsKICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9J
dGVtKiBpdDsKIAotICAgIEV2YXNfQ29vcmQgbmV3X3ggPSBjdXJyZW50WCArIChwcml2LT52aWV3
Lm9mZnNldC5jdXIueCAtIGN1cnJlbnRYKSAqIHNjYWxlOwotICAgIEV2YXNfQ29vcmQgbmV3X3kg
PSBjdXJyZW50WSArIChwcml2LT52aWV3Lm9mZnNldC5jdXIueSAtIGN1cnJlbnRZKSAqIHNjYWxl
OworICAgIEV2YXNfQ29vcmQgbmV3WCA9IGN1cnJlbnRYICsgKHByaXYtPnZpZXcub2Zmc2V0LmN1
ci54IC0gY3VycmVudFgpICogc2NhbGU7CisgICAgRXZhc19Db29yZCBuZXdZID0gY3VycmVudFkg
KyAocHJpdi0+dmlldy5vZmZzZXQuY3VyLnkgLSBjdXJyZW50WSkgKiBzY2FsZTsKIAotICAgIEV2
YXNfQ29vcmQgbW9kZWxfdyA9IHByaXYtPm1vZGVsLndpZHRoICogc2NhbGU7Ci0gICAgRXZhc19D
b29yZCBtb2RlbF9oID0gcHJpdi0+bW9kZWwuaGVpZ2h0ICogc2NhbGU7CisgICAgRXZhc19Db29y
ZCBtb2RlbFdpZHRoID0gcHJpdi0+bW9kZWwud2lkdGggKiBzY2FsZTsKKyAgICBFdmFzX0Nvb3Jk
IG1vZGVsSGVpZ2h0ID0gcHJpdi0+bW9kZWwuaGVpZ2h0ICogc2NhbGU7CiAKLSAgICBpZiAobW9k
ZWxfdyA8IHByaXYtPnZpZXcud2lkdGggfHwgbmV3X3ggPj0gMCkKLSAgICAgICAgbmV3X3ggPSAw
OwotICAgIGVsc2UgaWYgKC1uZXdfeCArIHByaXYtPnZpZXcud2lkdGggPj0gbW9kZWxfdykKLSAg
ICAgICAgbmV3X3ggPSAtbW9kZWxfdyArIHByaXYtPnZpZXcud2lkdGg7CisgICAgaWYgKG1vZGVs
V2lkdGggPCBwcml2LT52aWV3LndpZHRoIHx8IG5ld1ggPj0gMCkKKyAgICAgICAgbmV3WCA9IDA7
CisgICAgZWxzZSBpZiAoLW5ld1ggKyBwcml2LT52aWV3LndpZHRoID49IG1vZGVsV2lkdGgpCisg
ICAgICAgIG5ld1ggPSAtbW9kZWxXaWR0aCArIHByaXYtPnZpZXcud2lkdGg7CiAKLSAgICBpZiAo
bW9kZWxfaCA8IHByaXYtPnZpZXcuaGVpZ2h0IHx8IG5ld195ID49IDApCi0gICAgICAgIG5ld195
ID0gMDsKLSAgICBlbHNlIGlmICgtbmV3X3kgKyBwcml2LT52aWV3LmhlaWdodCA+PSBtb2RlbF9o
KQotICAgICAgICBuZXdfeSA9IC1tb2RlbF9oICsgcHJpdi0+dmlldy5oZWlnaHQ7CisgICAgaWYg
KG1vZGVsSGVpZ2h0IDwgcHJpdi0+dmlldy5oZWlnaHQgfHwgbmV3WSA+PSAwKQorICAgICAgICBu
ZXdZID0gMDsKKyAgICBlbHNlIGlmICgtbmV3WSArIHByaXYtPnZpZXcuaGVpZ2h0ID49IG1vZGVs
SGVpZ2h0KQorICAgICAgICBuZXdZID0gLW1vZGVsSGVpZ2h0ICsgcHJpdi0+dmlldy5oZWlnaHQ7
CiAKLSAgICBFdmFzX0Nvb3JkIGJ4ID0gbmV3X3ggJSB0dzsKLSAgICBFdmFzX0Nvb3JkIGJ5ID0g
bmV3X3kgJSB0aDsKLSAgICBwcml2LT5tb2RlbC5iYXNlLmNvbCA9IC1uZXdfeCAvIHR3OwotICAg
IHByaXYtPm1vZGVsLmJhc2Uucm93ID0gLW5ld195IC8gdGg7CisgICAgRXZhc19Db29yZCBiYXNl
WCA9IG5ld1ggJSB0aWxlV2lkdGg7CisgICAgRXZhc19Db29yZCBiYXNlWSA9IG5ld1kgJSB0aWxl
SGVpZ2h0OworICAgIHByaXYtPm1vZGVsLmJhc2UuY29sdW1uID0gLW5ld1ggLyB0aWxlV2lkdGg7
CisgICAgcHJpdi0+bW9kZWwuYmFzZS5yb3cgPSAtbmV3WSAvIHRpbGVIZWlnaHQ7CiAKICAgICBw
cml2LT5jaGFuZ2VkLnNpemUgPSBFSU5BX1RSVUU7CiAgICAgcHJpdi0+Y2hhbmdlZC5tb2RlbCA9
IEVJTkFfVFJVRTsKICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfY2hhbmdlZChwcml2KTsK
IAotICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1ci54ID0gbmV3X3g7Ci0gICAgcHJpdi0+dmlldy5v
ZmZzZXQuY3VyLnkgPSBuZXdfeTsKLSAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggPSBieDsK
LSAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgPSBieTsKKyAgICBwcml2LT52aWV3Lm9mZnNl
dC5jdXIueCA9IG5ld1g7CisgICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkgPSBuZXdZOworICAg
IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCA9IGJhc2VYOworICAgIHByaXYtPnZpZXcub2Zmc2V0
LmJhc2UueSA9IGJhc2VZOwogCiAgICAgcHJpdi0+dmlldy5vZmZzZXQub2xkLnggPSBwcml2LT52
aWV3Lm9mZnNldC5jdXIueDsKICAgICBwcml2LT52aWV3Lm9mZnNldC5vbGQueSA9IHByaXYtPnZp
ZXcub2Zmc2V0LmN1ci55OwpAQCAtMTUzMSwyOCArMTUzMSwyOCBAQCBzdGF0aWMgRWluYV9Cb29s
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV96b29tX3NldF9pbnRlcm5hbChFd2tfVGlsZWRfQmFj
a2luZ19TdAogICAgICpvZmZzZXRZID0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLnk7CiAKICAgICBl
dmFzX29iamVjdF9tb3ZlKAotICAgICAgICBwcml2LT5jb250ZW50c19jbGlwcGVyLAotICAgICAg
ICBuZXdfeCArIHByaXYtPnZpZXcueCwKLSAgICAgICAgbmV3X3kgKyBwcml2LT52aWV3LnkpOwor
ICAgICAgICBwcml2LT5jb250ZW50c0NsaXBwZXIsCisgICAgICAgIG5ld1ggKyBwcml2LT52aWV3
LngsCisgICAgICAgIG5ld1kgKyBwcml2LT52aWV3LnkpOwogCiAgICAgX2V3a190aWxlZF9iYWNr
aW5nX3N0b3JlX2ZpbGxfcmVuZGVyZXJzKHByaXYpOwogCi0gICAgRXZhc19Db29yZCBveSA9IHBy
aXYtPnZpZXcub2Zmc2V0LmJhc2UueSArIHByaXYtPnZpZXcueTsKLSAgICBFdmFzX0Nvb3JkIGJh
c2Vfb3ggPSBwcml2LT52aWV3LnggKyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLng7CisgICAgRXZh
c19Db29yZCB0aWxlUG9zaXRpb25ZID0gcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ICsgcHJpdi0+
dmlldy55OworICAgIEV2YXNfQ29vcmQgYmFzZVRpbGVQb3NpdGlvblggPSBwcml2LT52aWV3Lngg
KyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLng7CiAKLSAgICBpdHIgPSBwcml2LT52aWV3Lml0ZW1z
OwotICAgIGl0cl9lbmQgPSBpdHIgKyBwcml2LT52aWV3LnJvd3M7CisgICAgaXRlcmF0b3IgPSBw
cml2LT52aWV3Lml0ZW1zOworICAgIGl0ZXJhdG9yRW5kID0gaXRlcmF0b3IgKyBwcml2LT52aWV3
LnJvd3M7CiAKLSAgICBmb3IgKDsgaXRyIDwgaXRyX2VuZDsgaXRyKyspIHsKLSAgICAgICAgRXZh
c19Db29yZCBveCA9IGJhc2Vfb3g7Ci0gICAgICAgIEVpbmFfSW5saXN0KiBsc3QgPSAqaXRyOwor
ICAgIGZvciAoOyBpdGVyYXRvciA8IGl0ZXJhdG9yRW5kOyBpdGVyYXRvcisrKSB7CisgICAgICAg
IEV2YXNfQ29vcmQgdGlsZVBvc2l0aW9uWCA9IGJhc2VUaWxlUG9zaXRpb25YOworICAgICAgICBF
aW5hX0lubGlzdCogbHN0ID0gKml0ZXJhdG9yOwogCiAgICAgICAgIEVJTkFfSU5MSVNUX0ZPUkVB
Q0gobHN0LCBpdCkgewotICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1f
bW92ZShpdCwgb3gsIG95KTsKLSAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9p
dGVtX3Jlc2l6ZShpdCwgdHcsIHRoKTsKLSAgICAgICAgICAgIG94ICs9IHR3OworICAgICAgICAg
ICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fbW92ZShpdCwgdGlsZVBvc2l0aW9uWCwg
dGlsZVBvc2l0aW9uWSk7CisgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRl
bV9yZXNpemUoaXQsIHRpbGVXaWR0aCwgdGlsZUhlaWdodCk7CisgICAgICAgICAgICB0aWxlUG9z
aXRpb25YICs9IHRpbGVXaWR0aDsKICAgICAgICAgfQotICAgICAgICBveSArPSB0aDsKKyAgICAg
ICAgdGlsZVBvc2l0aW9uWSArPSB0aWxlSGVpZ2h0OwogICAgIH0KIAogICAgIHJldHVybiBFSU5B
X1RSVUU7CkBAIC0xNTYwLDcgKzE1NjAsNyBAQCBzdGF0aWMgRWluYV9Cb29sIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV96b29tX3NldF9pbnRlcm5hbChFd2tfVGlsZWRfQmFja2luZ19TdAogCiBF
aW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfem9vbV9zZXQoRXZhc19PYmplY3QqIGV3
a1RpbGUsIGZsb2F0KiB6b29tLCBFdmFzX0Nvb3JkIGN1cnJlbnRYLCBFdmFzX0Nvb3JkIGN1cnJl
bnRZLCBFdmFzX0Nvb3JkKiBvZmZzZXRYLCBFdmFzX0Nvb3JkKiBvZmZzZXRZKQogewotICAgIERC
Rygibz0lcCwgem9vbT0lZiIsIGV3a1RpbGUsICp6b29tKTsKKyAgICBEQkcoImV3a1RpbGUlcCwg
em9vbT0lZiIsIGV3a1RpbGUsICp6b29tKTsKIAogICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJO
KGV3a1RpbGUsIHByaXYsIEVJTkFfRkFMU0UpOwogCkBAIC0xNTY5LDczICsxNTY5LDczIEBAIEVp
bmFfQm9vbCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV96b29tX3NldChFdmFzX09iamVjdCogZXdr
VGlsZSwgZmxvYXQqIHpvb20sIEV2CiAKIEVpbmFfQm9vbCBld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV96b29tX3dlYWtfc2V0KEV2YXNfT2JqZWN0KiBld2tUaWxlLCBmbG9hdCB6b29tLCBFdmFzX0Nv
b3JkIGN1cnJlbnRYLCBFdmFzX0Nvb3JkIGN1cnJlbnRZKQogewotICAgIERCRygibz0lcCwgem9v
bT0lZiIsIGV3a1RpbGUsIHpvb20pOworICAgIERCRygiZXdrVGlsZSVwLCB6b29tPSVmIiwgZXdr
VGlsZSwgem9vbSk7CiAgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4oZXdrVGlsZSwgcHJpdiwg
RUlOQV9GQUxTRSk7CiAgICAgaWYgKCFwcml2LT52aWV3LndpZHRoIHx8ICFwcml2LT52aWV3Lmhl
aWdodCkKICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7Ci0gICAgRWluYV9Jbmxpc3QqKiBpdHIs
ICoqIGl0cl9lbmQ7Ci0gICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSogaXQ7Ci0gICAg
RXZhc19Db29yZCB0dywgdGg7Ci0gICAgRWluYV9Cb29sIHJlY2FsYyA9IEVJTkFfRkFMU0U7Cisg
ICAgRWluYV9Jbmxpc3QqKiBpdGVyYXRvciwgKiogaXRlcmF0b3JFbmQ7CisgICAgRXdrX1RpbGVk
X0JhY2tpbmdfU3RvcmVfSXRlbSogaXRlbTsKKyAgICBFdmFzX0Nvb3JkIHRpbGVXaWR0aCwgdGls
ZUhlaWdodDsKKyAgICBFaW5hX0Jvb2wgcmVDYWxjdWxhdGUgPSBFSU5BX0ZBTFNFOwogCiAgICAg
ZmxvYXQgc2NhbGUgPSB6b29tIC8gcHJpdi0+dmlldy50aWxlLnpvb207CiAKLSAgICB0dyA9IFRJ
TEVfU0laRV9BVF9aT09NKHByaXYtPnZpZXcudGlsZS53aWR0aCwgc2NhbGUpOwotICAgIHNjYWxl
ID0gVElMRV9aT09NX0FUX1NJWkUodHcsIHByaXYtPnZpZXcudGlsZS53aWR0aCk7Ci0gICAgdGgg
PSBUSUxFX1NJWkVfQVRfWk9PTShwcml2LT52aWV3LnRpbGUuaGVpZ2h0LCBzY2FsZSk7CisgICAg
dGlsZVdpZHRoID0gVElMRV9TSVpFX0FUX1pPT00ocHJpdi0+dmlldy50aWxlLndpZHRoLCBzY2Fs
ZSk7CisgICAgc2NhbGUgPSBUSUxFX1pPT01fQVRfU0laRSh0aWxlV2lkdGgsIHByaXYtPnZpZXcu
dGlsZS53aWR0aCk7CisgICAgdGlsZUhlaWdodCA9IFRJTEVfU0laRV9BVF9aT09NKHByaXYtPnZp
ZXcudGlsZS5oZWlnaHQsIHNjYWxlKTsKICAgICB6b29tID0gc2NhbGUgKiBwcml2LT52aWV3LnRp
bGUuem9vbTsKIAotICAgIEV2YXNfQ29vcmQgbW9kZWxfdyA9IHByaXYtPm1vZGVsLndpZHRoICog
c2NhbGU7Ci0gICAgRXZhc19Db29yZCBtb2RlbF9oID0gcHJpdi0+bW9kZWwuaGVpZ2h0ICogc2Nh
bGU7CisgICAgRXZhc19Db29yZCBtb2RlbFdpZHRoID0gcHJpdi0+bW9kZWwud2lkdGggKiBzY2Fs
ZTsKKyAgICBFdmFzX0Nvb3JkIG1vZGVsSGVpZ2h0ID0gcHJpdi0+bW9kZWwuaGVpZ2h0ICogc2Nh
bGU7CiAKLSAgICBldmFzX29iamVjdF9yZXNpemUocHJpdi0+Y29udGVudHNfY2xpcHBlciwgbW9k
ZWxfdywgbW9kZWxfaCk7CisgICAgZXZhc19vYmplY3RfcmVzaXplKHByaXYtPmNvbnRlbnRzQ2xp
cHBlciwgbW9kZWxXaWR0aCwgbW9kZWxIZWlnaHQpOwogCi0gICAgaW50IHZyb3dzID0gc3RhdGlj
X2Nhc3Q8aW50PihjZWlsKHN0YXRpY19jYXN0PGZsb2F0Pihwcml2LT52aWV3LmhlaWdodCAvIHRo
KSkgKyAxKTsKLSAgICBpbnQgdmNvbHMgPSBzdGF0aWNfY2FzdDxpbnQ+KGNlaWwoc3RhdGljX2Nh
c3Q8ZmxvYXQ+KHByaXYtPnZpZXcud2lkdGggLyB0dykpICsgMSk7Ci0gICAgRXZhc19Db29yZCBu
ZXdfeCA9IGN1cnJlbnRYICsgKHByaXYtPnZpZXcub2Zmc2V0LmN1ci54IC0gY3VycmVudFgpICog
c2NhbGU7Ci0gICAgRXZhc19Db29yZCBuZXdfeSA9IGN1cnJlbnRZICsgKHByaXYtPnZpZXcub2Zm
c2V0LmN1ci55IC0gY3VycmVudFkpICogc2NhbGU7Ci0gICAgRXZhc19Db29yZCBieCA9IG5ld194
ICUgdHc7Ci0gICAgRXZhc19Db29yZCBieSA9IG5ld195ICUgdGg7Ci0gICAgdW5zaWduZWQgbG9u
ZyBiYXNlX3JvdyA9IC1uZXdfeSAvIHRoOwotICAgIHVuc2lnbmVkIGxvbmcgYmFzZV9jb2wgPSAt
bmV3X3ggLyB0dzsKKyAgICBpbnQgdnJvd3MgPSBzdGF0aWNfY2FzdDxpbnQ+KGNlaWwoc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KHByaXYtPnZpZXcuaGVpZ2h0IC8gdGlsZUhlaWdodCkpICsgMSk7CisgICAg
aW50IHZjb2xzID0gc3RhdGljX2Nhc3Q8aW50PihjZWlsKHN0YXRpY19jYXN0PGZsb2F0Pihwcml2
LT52aWV3LndpZHRoIC8gdGlsZVdpZHRoKSkgKyAxKTsKKyAgICBFdmFzX0Nvb3JkIG5ld1ggPSBj
dXJyZW50WCArIChwcml2LT52aWV3Lm9mZnNldC5jdXIueCAtIGN1cnJlbnRYKSAqIHNjYWxlOwor
ICAgIEV2YXNfQ29vcmQgbmV3WSA9IGN1cnJlbnRZICsgKHByaXYtPnZpZXcub2Zmc2V0LmN1ci55
IC0gY3VycmVudFkpICogc2NhbGU7CisgICAgRXZhc19Db29yZCBiYXNlWCA9IG5ld1ggJSB0aWxl
V2lkdGg7CisgICAgRXZhc19Db29yZCBiYXNlWSA9IG5ld1kgJSB0aWxlSGVpZ2h0OworICAgIHVu
c2lnbmVkIGxvbmcgYmFzZVJvdyA9IC1uZXdZIC8gdGlsZUhlaWdodDsKKyAgICB1bnNpZ25lZCBs
b25nIGJhc2VDb2x1bW4gPSAtbmV3WCAvIHRpbGVXaWR0aDsKIAotICAgIGlmIChiYXNlX3JvdyAh
PSBwcml2LT5tb2RlbC5iYXNlLnJvdyB8fCBiYXNlX2NvbCAhPSBwcml2LT5tb2RlbC5iYXNlLmNv
bCkgewotICAgICAgICBwcml2LT5tb2RlbC5iYXNlLnJvdyA9IGJhc2Vfcm93OwotICAgICAgICBw
cml2LT5tb2RlbC5iYXNlLmNvbCA9IGJhc2VfY29sOwotICAgICAgICByZWNhbGMgPSBFSU5BX1RS
VUU7CisgICAgaWYgKGJhc2VSb3cgIT0gcHJpdi0+bW9kZWwuYmFzZS5yb3cgfHwgYmFzZUNvbHVt
biAhPSBwcml2LT5tb2RlbC5iYXNlLmNvbHVtbikgeworICAgICAgICBwcml2LT5tb2RlbC5iYXNl
LnJvdyA9IGJhc2VSb3c7CisgICAgICAgIHByaXYtPm1vZGVsLmJhc2UuY29sdW1uID0gYmFzZUNv
bHVtbjsKKyAgICAgICAgcmVDYWxjdWxhdGUgPSBFSU5BX1RSVUU7CiAgICAgfQogCiAgICAgaWYg
KHZyb3dzID4gcHJpdi0+dmlldy5yb3dzIHx8IHZjb2xzID4gcHJpdi0+dmlldy5jb2xzKQotICAg
ICAgICByZWNhbGMgPSBFSU5BX1RSVUU7CisgICAgICAgIHJlQ2FsY3VsYXRlID0gRUlOQV9UUlVF
OwogCi0gICAgaWYgKHJlY2FsYykgeworICAgIGlmIChyZUNhbGN1bGF0ZSkgewogICAgICAgICBF
dmFzX0Nvb3JkIHdpZHRoLCBoZWlnaHQ7CiAgICAgICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dl
dChld2tUaWxlLCAwLCAwLCAmd2lkdGgsICZoZWlnaHQpOwotICAgICAgICBfZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfcmVjYWxjX3JlbmRlcmVycyhwcml2LCB3aWR0aCwgaGVpZ2h0LCB0dywgdGgp
OworICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcmVjYWxjX3JlbmRlcmVycyhwcml2
LCB3aWR0aCwgaGVpZ2h0LCB0aWxlV2lkdGgsIHRpbGVIZWlnaHQpOwogICAgICAgICBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfZmlsbF9yZW5kZXJlcnMocHJpdik7CiAgICAgICAgIF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV91cGRhdGVzX3Byb2Nlc3MocHJpdik7CiAgICAgfQogCi0gICAgRXZh
c19Db29yZCBiYXNlX294ID0gYnggKyBwcml2LT52aWV3Lng7Ci0gICAgRXZhc19Db29yZCBveSA9
IGJ5ICsgcHJpdi0+dmlldy55OworICAgIEV2YXNfQ29vcmQgYmFzZVRpbGVQb3NpdGlvblggPSBi
YXNlWCArIHByaXYtPnZpZXcueDsKKyAgICBFdmFzX0Nvb3JkIHRpbGVQb3NpdGlvblkgPSBiYXNl
WSArIHByaXYtPnZpZXcueTsKIAotICAgIGV2YXNfb2JqZWN0X21vdmUocHJpdi0+Y29udGVudHNf
Y2xpcHBlciwKLSAgICAgICAgICAgICAgICAgICAgIG5ld194ICsgcHJpdi0+dmlldy54LAotICAg
ICAgICAgICAgICAgICAgICAgbmV3X3kgKyBwcml2LT52aWV3LnkpOworICAgIGV2YXNfb2JqZWN0
X21vdmUocHJpdi0+Y29udGVudHNDbGlwcGVyLAorICAgICAgICAgICAgICAgICAgICAgbmV3WCAr
IHByaXYtPnZpZXcueCwKKyAgICAgICAgICAgICAgICAgICAgIG5ld1kgKyBwcml2LT52aWV3Lnkp
OwogCi0gICAgaXRyID0gcHJpdi0+dmlldy5pdGVtczsKLSAgICBpdHJfZW5kID0gaXRyICsgcHJp
di0+dmlldy5yb3dzOworICAgIGl0ZXJhdG9yID0gcHJpdi0+dmlldy5pdGVtczsKKyAgICBpdGVy
YXRvckVuZCA9IGl0ZXJhdG9yICsgcHJpdi0+dmlldy5yb3dzOwogCi0gICAgZm9yICg7IGl0ciA8
IGl0cl9lbmQ7IGl0cisrKSB7Ci0gICAgICAgIEV2YXNfQ29vcmQgb3ggPSBiYXNlX294OwotICAg
ICAgICBFaW5hX0lubGlzdCogbHN0ID0gKml0cjsKKyAgICBmb3IgKDsgaXRlcmF0b3IgPCBpdGVy
YXRvckVuZDsgaXRlcmF0b3IrKykgeworICAgICAgICBFdmFzX0Nvb3JkIHRpbGVQb3NpdGlvblgg
PSBiYXNlVGlsZVBvc2l0aW9uWDsKKyAgICAgICAgRWluYV9Jbmxpc3QqIGxpc3QgPSAqaXRlcmF0
b3I7CiAKLSAgICAgICAgRUlOQV9JTkxJU1RfRk9SRUFDSChsc3QsIGl0KSB7Ci0gICAgICAgICAg
ICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9tb3ZlKGl0LCBveCwgb3kpOwotICAgICAg
ICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcmVzaXplKGl0LCB0dywgdGgpOwot
ICAgICAgICAgICAgb3ggKz0gdHc7CisgICAgICAgIEVJTkFfSU5MSVNUX0ZPUkVBQ0gobGlzdCwg
aXRlbSkgeworICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fbW92ZShp
dGVtLCB0aWxlUG9zaXRpb25YLCB0aWxlUG9zaXRpb25ZKTsKKyAgICAgICAgICAgIF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9pdGVtX3Jlc2l6ZShpdGVtLCB0aWxlV2lkdGgsIHRpbGVIZWlnaHQp
OworICAgICAgICAgICAgdGlsZVBvc2l0aW9uWCArPSB0aWxlV2lkdGg7CiAgICAgICAgIH0KLSAg
ICAgICAgb3kgKz0gdGg7CisgICAgICAgIHRpbGVQb3NpdGlvblkgKz0gdGlsZUhlaWdodDsKICAg
ICB9CiAKICAgICByZXR1cm4gRUlOQV9UUlVFOwpAQCAtMTY0NCw4MSArMTY0NCw4MSBAQCBFaW5h
X0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfem9vbV93ZWFrX3NldChFdmFzX09iamVjdCog
ZXdrVGlsZSwgZmxvYXQgem9vbQogdm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9maXhfb2Zm
c2V0cyhFdmFzX09iamVjdCogZXdrVGlsZSwgRXZhc19Db29yZCB3aWR0aCwgRXZhc19Db29yZCBo
ZWlnaHQpCiB7CiAgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4oZXdrVGlsZSwgcHJpdik7Ci0g
ICAgRWluYV9Jbmxpc3QqKiBpdHIsICoqaXRyX2VuZDsKLSAgICBFd2tfVGlsZWRfQmFja2luZ19T
dG9yZV9JdGVtKiBpdDsKLSAgICBFdmFzX0Nvb3JkIG5ld194ID0gcHJpdi0+dmlldy5vZmZzZXQu
Y3VyLng7Ci0gICAgRXZhc19Db29yZCBuZXdfeSA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci55Owot
ICAgIEV2YXNfQ29vcmQgYnggPSBwcml2LT52aWV3Lm9mZnNldC5iYXNlLng7Ci0gICAgRXZhc19D
b29yZCBieSA9IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueTsKLSAgICBFdmFzX0Nvb3JkIHR3ID0g
cHJpdi0+dmlldy50aWxlLndpZHRoOwotICAgIEV2YXNfQ29vcmQgdGggPSBwcml2LT52aWV3LnRp
bGUuaGVpZ2h0OwotCi0gICAgaWYgKC1uZXdfeCA+IHdpZHRoKSB7Ci0gICAgICAgIG5ld194ID0g
LXdpZHRoOwotICAgICAgICBieCA9IG5ld194ICUgdHc7Ci0gICAgICAgIHByaXYtPm1vZGVsLmJh
c2UuY29sID0gLW5ld194IC8gdHc7CisgICAgRWluYV9Jbmxpc3QqKiBpdGVyYXRvciwgKippdGVy
YXRvckVuZDsKKyAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKiBpdGVtOworICAgIEV2
YXNfQ29vcmQgbmV3WCA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci54OworICAgIEV2YXNfQ29vcmQg
bmV3WSA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci55OworICAgIEV2YXNfQ29vcmQgYmFzZVggPSBw
cml2LT52aWV3Lm9mZnNldC5iYXNlLng7CisgICAgRXZhc19Db29yZCBiYXNlWSA9IHByaXYtPnZp
ZXcub2Zmc2V0LmJhc2UueTsKKyAgICBFdmFzX0Nvb3JkIHRpbGVXaWR0aCA9IHByaXYtPnZpZXcu
dGlsZS53aWR0aDsKKyAgICBFdmFzX0Nvb3JkIHRpbGVIZWlnaHQgPSBwcml2LT52aWV3LnRpbGUu
aGVpZ2h0OworCisgICAgaWYgKC1uZXdYID4gd2lkdGgpIHsKKyAgICAgICAgbmV3WCA9IC13aWR0
aDsKKyAgICAgICAgYmFzZVggPSBuZXdYICUgdGlsZVdpZHRoOworICAgICAgICBwcml2LT5tb2Rl
bC5iYXNlLmNvbHVtbiA9IC1uZXdYIC8gdGlsZVdpZHRoOwogICAgIH0KIAotICAgIGlmICgtbmV3
X3kgPiBoZWlnaHQpIHsKLSAgICAgICAgbmV3X3kgPSAtaGVpZ2h0OwotICAgICAgICBieSA9IG5l
d195ICUgdGg7Ci0gICAgICAgIHByaXYtPm1vZGVsLmJhc2Uucm93ID0gLW5ld195IC8gdGg7Cisg
ICAgaWYgKC1uZXdZID4gaGVpZ2h0KSB7CisgICAgICAgIG5ld1kgPSAtaGVpZ2h0OworICAgICAg
ICBiYXNlWSA9IG5ld1kgJSB0aWxlSGVpZ2h0OworICAgICAgICBwcml2LT5tb2RlbC5iYXNlLnJv
dyA9IC1uZXdZIC8gdGlsZUhlaWdodDsKICAgICB9CiAKLSAgICBpZiAoYnggPj0gMCB8fCBieCA8
PSAtMiAqIHByaXYtPnZpZXcudGlsZS53aWR0aCkgewotICAgICAgICBieCA9IG5ld194ICUgdHc7
Ci0gICAgICAgIHByaXYtPm1vZGVsLmJhc2UuY29sID0gLW5ld194IC8gdHc7CisgICAgaWYgKGJh
c2VYID49IDAgfHwgYmFzZVggPD0gLTIgKiBwcml2LT52aWV3LnRpbGUud2lkdGgpIHsKKyAgICAg
ICAgYmFzZVggPSBuZXdYICUgdGlsZVdpZHRoOworICAgICAgICBwcml2LT5tb2RlbC5iYXNlLmNv
bHVtbiA9IC1uZXdYIC8gdGlsZVdpZHRoOwogICAgIH0KIAotICAgIGlmIChieSA+PSAwIHx8IGJ5
IDw9IC0yICogcHJpdi0+dmlldy50aWxlLmhlaWdodCkgewotICAgICAgICBieSA9IG5ld195ICUg
dGg7Ci0gICAgICAgIHByaXYtPm1vZGVsLmJhc2Uucm93ID0gLW5ld195IC8gdGg7CisgICAgaWYg
KGJhc2VZID49IDAgfHwgYmFzZVkgPD0gLTIgKiBwcml2LT52aWV3LnRpbGUuaGVpZ2h0KSB7Cisg
ICAgICAgIGJhc2VZID0gbmV3WSAlIHRpbGVIZWlnaHQ7CisgICAgICAgIHByaXYtPm1vZGVsLmJh
c2Uucm93ID0gLW5ld1kgLyB0aWxlSGVpZ2h0OwogICAgIH0KIAotICAgIHByaXYtPnZpZXcub2Zm
c2V0LmN1ci54ID0gbmV3X3g7Ci0gICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkgPSBuZXdfeTsK
LSAgICBwcml2LT52aWV3Lm9mZnNldC5vbGQueCA9IG5ld194OwotICAgIHByaXYtPnZpZXcub2Zm
c2V0Lm9sZC55ID0gbmV3X3k7Ci0gICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54ID0gYng7Ci0g
ICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ID0gYnk7Ci0gICAgZXZhc19vYmplY3RfbW92ZShw
cml2LT5jb250ZW50c19jbGlwcGVyLAotICAgICAgICAgICAgICAgICAgICAgbmV3X3ggKyBwcml2
LT52aWV3LngsCi0gICAgICAgICAgICAgICAgICAgICBuZXdfeSArIHByaXYtPnZpZXcueSk7Ci0K
LSAgICBFdmFzX0Nvb3JkIG95ID0gcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ICsgcHJpdi0+dmll
dy55OwotICAgIEV2YXNfQ29vcmQgYmFzZV9veCA9IHByaXYtPnZpZXcueCArIHByaXYtPnZpZXcu
b2Zmc2V0LmJhc2UueDsKLQotICAgIGl0ciA9IHByaXYtPnZpZXcuaXRlbXM7Ci0gICAgaXRyX2Vu
ZCA9IGl0ciArIHByaXYtPnZpZXcucm93czsKLQotICAgIGZvciAoOyBpdHIgPCBpdHJfZW5kOyBp
dHIrKykgewotICAgICAgICBFdmFzX0Nvb3JkIG94ID0gYmFzZV9veDsKLSAgICAgICAgRWluYV9J
bmxpc3QqIGxzdCA9ICppdHI7Ci0KLSAgICAgICAgRUlOQV9JTkxJU1RfRk9SRUFDSChsc3QsIGl0
KSB7Ci0gICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9tb3ZlKGl0LCBv
eCwgb3kpOwotICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcmVzaXpl
KGl0LCB0dywgdGgpOwotICAgICAgICAgICAgb3ggKz0gdHc7CisgICAgcHJpdi0+dmlldy5vZmZz
ZXQuY3VyLnggPSBuZXdYOworICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1ci55ID0gbmV3WTsKKyAg
ICBwcml2LT52aWV3Lm9mZnNldC5vbGQueCA9IG5ld1g7CisgICAgcHJpdi0+dmlldy5vZmZzZXQu
b2xkLnkgPSBuZXdZOworICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCA9IGJhc2VYOworICAg
IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSA9IGJhc2VZOworICAgIGV2YXNfb2JqZWN0X21vdmUo
cHJpdi0+Y29udGVudHNDbGlwcGVyLAorICAgICAgICAgICAgICAgICAgICAgbmV3WCArIHByaXYt
PnZpZXcueCwKKyAgICAgICAgICAgICAgICAgICAgIG5ld1kgKyBwcml2LT52aWV3LnkpOworCisg
ICAgRXZhc19Db29yZCB0aWxlUG9zaXRpb25ZID0gcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ICsg
cHJpdi0+dmlldy55OworICAgIEV2YXNfQ29vcmQgYmFzZVRpbGVQb3NpdGlvblggPSBwcml2LT52
aWV3LnggKyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLng7CisKKyAgICBpdGVyYXRvciA9IHByaXYt
PnZpZXcuaXRlbXM7CisgICAgaXRlcmF0b3JFbmQgPSBpdGVyYXRvciArIHByaXYtPnZpZXcucm93
czsKKworICAgIGZvciAoOyBpdGVyYXRvciA8IGl0ZXJhdG9yRW5kOyBpdGVyYXRvcisrKSB7Cisg
ICAgICAgIEV2YXNfQ29vcmQgdGlsZVBvc2l0aW9uWCA9IGJhc2VUaWxlUG9zaXRpb25YOworICAg
ICAgICBFaW5hX0lubGlzdCogbHN0ID0gKml0ZXJhdG9yOworCisgICAgICAgIEVJTkFfSU5MSVNU
X0ZPUkVBQ0gobHN0LCBpdGVtKSB7CisgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfaXRlbV9tb3ZlKGl0ZW0sIHRpbGVQb3NpdGlvblgsIHRpbGVQb3NpdGlvblkpOworICAgICAg
ICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcmVzaXplKGl0ZW0sIHRpbGVXaWR0
aCwgdGlsZUhlaWdodCk7CisgICAgICAgICAgICB0aWxlUG9zaXRpb25YICs9IHRpbGVXaWR0aDsK
ICAgICAgICAgfQotICAgICAgICBveSArPSB0aDsKKyAgICAgICAgdGlsZVBvc2l0aW9uWSArPSB0
aWxlSGVpZ2h0OwogICAgIH0KIH0KIAogdm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV96b29t
X3dlYWtfc21vb3RoX3NjYWxlX3NldChFdmFzX09iamVjdCogZXdrVGlsZSwgRWluYV9Cb29sIHNt
b290aFNjYWxlKQogewogICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKGV3a1RpbGUsIHByaXYp
OwotICAgIEVpbmFfSW5saXN0KiogaXRyLCAqKml0cl9lbmQ7CisgICAgRWluYV9Jbmxpc3QqKiBp
dGVyYXRvciwgKippdGVyYXRvckVuZDsKIAotICAgIGl0ciA9IHByaXYtPnZpZXcuaXRlbXM7Ci0g
ICAgaXRyX2VuZCA9IGl0ciArIHByaXYtPnZpZXcucm93czsKLSAgICBwcml2LT52aWV3LnRpbGUu
em9vbV93ZWFrX3Ntb290aF9zY2FsZSA9IHNtb290aFNjYWxlOworICAgIGl0ZXJhdG9yID0gcHJp
di0+dmlldy5pdGVtczsKKyAgICBpdGVyYXRvckVuZCA9IGl0ZXJhdG9yICsgcHJpdi0+dmlldy5y
b3dzOworICAgIHByaXYtPnZpZXcudGlsZS56b29tV2Vha1Ntb290aFNjYWxlID0gc21vb3RoU2Nh
bGU7CiAKLSAgICBmb3IgKDsgaXRyPCBpdHJfZW5kOyBpdHIrKykgewotICAgICAgICBFd2tfVGls
ZWRfQmFja2luZ19TdG9yZV9JdGVtKiBpdDsKLSAgICAgICAgRUlOQV9JTkxJU1RfRk9SRUFDSCgq
aXRyLCBpdCkKLSAgICAgICAgICAgIGlmIChpdC0+dGlsZSkKKyAgICBmb3IgKDsgaXRlcmF0b3I8
IGl0ZXJhdG9yRW5kOyBpdGVyYXRvcisrKSB7CisgICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0
b3JlX0l0ZW0qIGl0ZW07CisgICAgICAgIEVJTkFfSU5MSVNUX0ZPUkVBQ0goKml0ZXJhdG9yLCBp
dGVtKQorICAgICAgICAgICAgaWYgKGl0ZW0tPnRpbGUpCiAgICAgICAgICAgICAgICAgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fc21vb3RoX3NjYWxlX3NldAotICAgICAgICAgICAgICAg
ICAgICAoaXQsIHNtb290aFNjYWxlKTsKKyAgICAgICAgICAgICAgICAgICAgKGl0ZW0sIHNtb290
aFNjYWxlKTsKICAgICB9CiB9CiAKQEAgLTE3MzYsMTUgKzE3MzYsMTUgQEAgRWluYV9Cb29sIGV3
a190aWxlZF9iYWNraW5nX3N0b3JlX3VwZGF0ZShFdmFzX09iamVjdCogZXdrVGlsZSwgY29uc3Qg
RWluYV9SZWN0YW4KIHZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRlc19wcm9jZXNz
X3ByZV9zZXQoRXZhc19PYmplY3QqIGV3a1RpbGUsIHZvaWQqICgqY2FsbGJhY2spKHZvaWQqIGRh
dGEsIEV2YXNfT2JqZWN0ICpld2tUaWxlKSwgY29uc3Qgdm9pZCogZGF0YSkKIHsKICAgICBQUklW
X0RBVEFfR0VUX09SX1JFVFVSTihld2tUaWxlLCBwcml2KTsKLSAgICBwcml2LT5wcm9jZXNzLnBy
ZV9jYiA9IGNhbGxiYWNrOwotICAgIHByaXYtPnByb2Nlc3MucHJlX2RhdGEgPSAodm9pZCopZGF0
YTsKKyAgICBwcml2LT5wcm9jZXNzLnByZUNhbGxiYWNrID0gY2FsbGJhY2s7CisgICAgcHJpdi0+
cHJvY2Vzcy5wcmVEYXRhID0gKHZvaWQqKWRhdGE7CiB9CiAKLXZvaWQgZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfdXBkYXRlc19wcm9jZXNzX3Bvc3Rfc2V0KEV2YXNfT2JqZWN0KiBld2tUaWxlLCB2
b2lkKiAoKmNhbGxiYWNrKSh2b2lkKiBkYXRhLCB2b2lkKiBwcmVfZGF0YSwgRXZhc19PYmplY3Qg
KmV3a1RpbGUpLCBjb25zdCB2b2lkKiBkYXRhKQordm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV91cGRhdGVzX3Byb2Nlc3NfcG9zdF9zZXQoRXZhc19PYmplY3QqIGV3a1RpbGUsIHZvaWQqICgq
Y2FsbGJhY2spKHZvaWQqIGRhdGEsIHZvaWQqIHByZURhdGEsIEV2YXNfT2JqZWN0ICpld2tUaWxl
KSwgY29uc3Qgdm9pZCogZGF0YSkKIHsKICAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihld2tU
aWxlLCBwcml2KTsKLSAgICBwcml2LT5wcm9jZXNzLnBvc3RfY2IgPSBjYWxsYmFjazsKLSAgICBw
cml2LT5wcm9jZXNzLnBvc3RfZGF0YSA9ICh2b2lkKilkYXRhOworICAgIHByaXYtPnByb2Nlc3Mu
cG9zdENhbGxiYWNrID0gY2FsbGJhY2s7CisgICAgcHJpdi0+cHJvY2Vzcy5wb3N0RGF0YSA9ICh2
b2lkKilkYXRhOwogfQogCiB2b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3VwZGF0ZXNfcHJv
Y2VzcyhFdmFzX09iamVjdCogZXdrVGlsZSkKQEAgLTE3ODYsNyArMTc4Niw3IEBAIHZvaWQgZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfZGlzYWJsZWRfdXBkYXRlX3NldChFdmFzX09iamVjdCogZXdr
VGlsZSwgRWluYV9Cb29sCiB2b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX2ZsdXNoKEV2YXNf
T2JqZWN0KiBld2tUaWxlKQogewogICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKGV3a1RpbGUs
IHByaXYpOwotICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSogdHVjID0gMDsKKyAgICBFd2tfVGls
ZV9VbnVzZWRfQ2FjaGUqIHRpbGVVbnVzZWRDYWNoZSA9IDA7CiAKICAgICBwcml2LT52aWV3Lm9m
ZnNldC5jdXIueCA9IDA7CiAgICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkgPSAwOwpAQCAtMTc5
NCwxMSArMTc5NCwxMSBAQCB2b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX2ZsdXNoKEV2YXNf
T2JqZWN0KiBld2tUaWxlKQogICAgIHByaXYtPnZpZXcub2Zmc2V0Lm9sZC55ID0gMDsKICAgICBw
cml2LT52aWV3Lm9mZnNldC5iYXNlLnggPSAwOwogICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2Uu
eSA9IDA7Ci0gICAgcHJpdi0+bW9kZWwuYmFzZS5jb2wgPSAwOworICAgIHByaXYtPm1vZGVsLmJh
c2UuY29sdW1uID0gMDsKICAgICBwcml2LT5tb2RlbC5iYXNlLnJvdyA9IDA7Ci0gICAgcHJpdi0+
bW9kZWwuY3VyLmNvbHMgPSAxOwotICAgIHByaXYtPm1vZGVsLmN1ci5yb3dzID0gMTsKLSAgICBw
cml2LT5tb2RlbC5vbGQuY29scyA9IDA7CisgICAgcHJpdi0+bW9kZWwuY3VycmVudC5jb2x1bW5z
ID0gMTsKKyAgICBwcml2LT5tb2RlbC5jdXJyZW50LnJvd3MgPSAxOworICAgIHByaXYtPm1vZGVs
Lm9sZC5jb2x1bW5zID0gMDsKICAgICBwcml2LT5tb2RlbC5vbGQucm93cyA9IDA7CiAgICAgcHJp
di0+Y2hhbmdlZC5zaXplID0gRUlOQV9UUlVFOwogCkBAIC0xODA5LDggKzE4MDksOCBAQCB2b2lk
IGV3a190aWxlZF9iYWNraW5nX3N0b3JlX2ZsdXNoKEV2YXNfT2JqZWN0KiBld2tUaWxlKQogCiAg
ICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9mbHVzaChwcml2
KTsKICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9kaXNzb2NpYXRlX2FsbChwcml2
KTsKLSAgICB0dWMgPSBld2tfdGlsZV9tYXRyaXhfdW51c2VkX2NhY2hlX2dldChwcml2LT5tb2Rl
bC5tYXRyaXgpOwotICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9jbGVhcih0dWMpOworICAgIHRp
bGVVbnVzZWRDYWNoZSA9IGV3a190aWxlX21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1v
ZGVsLm1hdHJpeCk7CisgICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2NsZWFyKHRpbGVVbnVzZWRD
YWNoZSk7CiAKICNpZmRlZiBERUJVR19NRU1fTEVBS1MKICAgICBwcmludGYoIlxuRkxVU0hFRCBC
QUNLSU5HIFNUT1JFLCBTVEFUVVMgQUZURVIgUkVDUkVBVElORyBUSUxFIE1BVFJJWDpcbiIpOwpA
QCAtMTgyMywxNiArMTgyMywxNiBAQCBFaW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
cHJlX3JlbmRlcl9yZWdpb24oRXZhc19PYmplY3QqIGV3a1RpbGUsIEV2YXNfQwogICAgIFBSSVZf
REFUQV9HRVRfT1JfUkVUVVJOKGV3a1RpbGUsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIEVpbmFf
VGlsZV9HcmlkX1NsaWNlciBzbGljZXI7CiAgICAgY29uc3QgRWluYV9UaWxlX0dyaWRfSW5mbyog
aW5mbzsKLSAgICBFdmFzX0Nvb3JkIHR3LCB0aDsKLSAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUq
IHR1YzsKKyAgICBFdmFzX0Nvb3JkIHRpbGVXaWR0aCwgdGlsZUhlaWdodDsKKyAgICBFd2tfVGls
ZV9VbnVzZWRfQ2FjaGUqIHRpbGVVbnVzZWRDYWNoZTsKIAotICAgIHR3ID0gcHJpdi0+dmlldy50
aWxlLndpZHRoOwotICAgIHRoID0gcHJpdi0+dmlldy50aWxlLmhlaWdodDsKKyAgICB0aWxlV2lk
dGggPSBwcml2LT52aWV3LnRpbGUud2lkdGg7CisgICAgdGlsZUhlaWdodCA9IHByaXYtPnZpZXcu
dGlsZS5oZWlnaHQ7CiAgICAgem9vbSA9IFJPVU5ERURfWk9PTShwcml2LT52aWV3LnRpbGUud2lk
dGgsIHpvb20pOwogCi0gICAgaWYgKCFlaW5hX3RpbGVfZ3JpZF9zbGljZXJfc2V0dXAoJnNsaWNl
ciwgeCwgeSwgd2lkdGgsIGhlaWdodCwgdHcsIHRoKSkgeworICAgIGlmICghZWluYV90aWxlX2dy
aWRfc2xpY2VyX3NldHVwKCZzbGljZXIsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHRpbGVXaWR0aCwg
dGlsZUhlaWdodCkpIHsKICAgICAgICAgRVJSKCJjb3VsZCBub3Qgc2V0dXAgZ3JpZCBzbGljZXIg
Zm9yICVkLCVkKyVkeCVkIHRpbGU9JWR4JWQiLAotICAgICAgICAgICAgeCwgeSwgd2lkdGgsIGhl
aWdodCwgdHcsIHRoKTsKKyAgICAgICAgICAgIHgsIHksIHdpZHRoLCBoZWlnaHQsIHRpbGVXaWR0
aCwgdGlsZUhlaWdodCk7CiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwogICAgIH0KIApAQCAt
MTg0NSw0NSArMTg0NSw0NSBAQCBFaW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJl
X3JlbmRlcl9yZWdpb24oRXZhc19PYmplY3QqIGV3a1RpbGUsIEV2YXNfQwogCiAgICAgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcHJvY2Vzc19pZGxlcl9zdGFydChwcml2KTsKIAotICAg
IHR1YyA9IGV3a190aWxlX21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJp
eCk7Ci0gICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2xvY2tfYXJlYSh0dWMsIHgsIHksIHdpZHRo
LCBoZWlnaHQsIHpvb20pOworICAgIHRpbGVVbnVzZWRDYWNoZSA9IGV3a190aWxlX21hdHJpeF91
bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7CisgICAgZXdrX3RpbGVfdW51c2Vk
X2NhY2hlX2xvY2tfYXJlYSh0aWxlVW51c2VkQ2FjaGUsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHpv
b20pOwogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKIEVpbmFfQm9vbCBld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlbGF0aXZlX3JhZGl1cyhFdmFzX09iamVjdCogZXdrVGls
ZSwgdW5zaWduZWQgaW50IG4sIGZsb2F0IHpvb20pCiB7CiAgICAgUFJJVl9EQVRBX0dFVF9PUl9S
RVRVUk4oZXdrVGlsZSwgcHJpdiwgRUlOQV9GQUxTRSk7Ci0gICAgdW5zaWduZWQgbG9uZyBzdGFy
dF9yb3csIGVuZF9yb3csIHN0YXJ0X2NvbCwgZW5kX2NvbCwgaSwgaiwgd2lkdGgsIGhlaWdodDsK
LSAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHR1YzsKKyAgICB1bnNpZ25lZCBsb25nIHN0YXJ0
Um93LCBlbmRSb3csIHN0YXJ0Q29sLCBlbmRDb2wsIGksIGosIHdpZHRoLCBoZWlnaHQ7CisgICAg
RXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0aWxlVW51c2VkQ2FjaGU7CiAKICAgICBJTkYoInByaXYt
Pm1vZGVsLmJhc2Uucm93ID0lbGQsIG49JXUgcHJpdi0+dmlldy5yb3dzPSVsdSIsCiAgICAgICAg
IHByaXYtPm1vZGVsLmJhc2Uucm93LCBuLCBwcml2LT52aWV3LnJvd3MpOwotICAgIHN0YXJ0X3Jv
dyA9IChsb25nKXByaXYtPm1vZGVsLmJhc2Uucm93IC0gbjsKLSAgICBzdGFydF9jb2wgPSAobG9u
Zylwcml2LT5tb2RlbC5iYXNlLmNvbCAtIG47Ci0gICAgZW5kX3JvdyA9IHN0ZDo6bWluKHByaXYt
Pm1vZGVsLmN1ci5yb3dzIC0gMSwKKyAgICBzdGFydFJvdyA9IChsb25nKXByaXYtPm1vZGVsLmJh
c2Uucm93IC0gbjsKKyAgICBzdGFydENvbCA9IChsb25nKXByaXYtPm1vZGVsLmJhc2UuY29sdW1u
IC0gbjsKKyAgICBlbmRSb3cgPSBzdGQ6Om1pbihwcml2LT5tb2RlbC5jdXJyZW50LnJvd3MgLSAx
LAogICAgICAgICAgICAgICAgICAgICAgICBwcml2LT5tb2RlbC5iYXNlLnJvdyArIHByaXYtPnZp
ZXcucm93cyArIG4gLSAxKTsKLSAgICBlbmRfY29sID0gc3RkOjptaW4ocHJpdi0+bW9kZWwuY3Vy
LmNvbHMgLSAxLAotICAgICAgICAgICAgICAgICAgICAgICBwcml2LT5tb2RlbC5iYXNlLmNvbCAr
IHByaXYtPnZpZXcuY29scyArIG4gLSAxKTsKKyAgICBlbmRDb2wgPSBzdGQ6Om1pbihwcml2LT5t
b2RlbC5jdXJyZW50LmNvbHVtbnMgLSAxLAorICAgICAgICAgICAgICAgICAgICAgICBwcml2LT5t
b2RlbC5iYXNlLmNvbHVtbiArIHByaXYtPnZpZXcuY29scyArIG4gLSAxKTsKIAotICAgIElORigi
c3RhcnRfcm93PSVsdSwgZW5kX3Jvdz0lbHUsIHN0YXJ0X2NvbD0lbHUsIGVuZF9jb2w9JWx1IiwK
LSAgICAgICAgc3RhcnRfcm93LCBlbmRfcm93LCBzdGFydF9jb2wsIGVuZF9jb2wpOworICAgIElO
Rigic3RhcnRSb3c9JWx1LCBlbmRSb3c9JWx1LCBzdGFydENvbD0lbHUsIGVuZENvbD0lbHUiLAor
ICAgICAgICBzdGFydFJvdywgZW5kUm93LCBzdGFydENvbCwgZW5kQ29sKTsKIAogICAgIHpvb20g
PSBST1VOREVEX1pPT00ocHJpdi0+dmlldy50aWxlLndpZHRoLCB6b29tKTsKIAotICAgIGZvciAo
aSA9IHN0YXJ0X3JvdzsgaSA8PSBlbmRfcm93OyBpKyspCi0gICAgICAgIGZvciAoaiA9IHN0YXJ0
X2NvbDsgaiA8PSBlbmRfY29sOyBqKyspCisgICAgZm9yIChpID0gc3RhcnRSb3c7IGkgPD0gZW5k
Um93OyBpKyspCisgICAgICAgIGZvciAoaiA9IHN0YXJ0Q29sOyBqIDw9IGVuZENvbDsgaisrKQog
ICAgICAgICAgICAgaWYgKCFfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1
ZXN0X2FkZChwcml2LCBqLCBpLCB6b29tLCBQUkVfUkVOREVSX1BSSU9SSVRZX0xPVykpCiAgICAg
ICAgICAgICAgICAgZ290byBzdGFydF9wcm9jZXNzaW5nOwogCiBzdGFydF9wcm9jZXNzaW5nOgog
ICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Byb2Nlc3NfaWRsZXJfc3RhcnQocHJp
dik7CiAKLSAgICB0dWMgPSBld2tfdGlsZV9tYXRyaXhfdW51c2VkX2NhY2hlX2dldChwcml2LT5t
b2RlbC5tYXRyaXgpOwotICAgIGhlaWdodCA9IChlbmRfcm93IC0gc3RhcnRfcm93ICsgMSkgKiBU
SUxFX1NJWkVfQVRfWk9PTShwcml2LT52aWV3LnRpbGUuaGVpZ2h0LCB6b29tKTsKLSAgICB3aWR0
aCA9IChlbmRfY29sIC0gc3RhcnRfY29sICsgMSkgKiBUSUxFX1NJWkVfQVRfWk9PTShwcml2LT52
aWV3LnRpbGUud2lkdGgsIHpvb20pOwotICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9sb2NrX2Fy
ZWEodHVjLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRfY29sICog
VElMRV9TSVpFX0FUX1pPT00ocHJpdi0+dmlldy50aWxlLndpZHRoLCB6b29tKSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0X3JvdyAqIFRJTEVfU0laRV9BVF9aT09N
KHByaXYtPnZpZXcudGlsZS5oZWlnaHQsIHpvb20pLCB3aWR0aCwgaGVpZ2h0LCB6b29tKTsKKyAg
ICB0aWxlVW51c2VkQ2FjaGUgPSBld2tfdGlsZV9tYXRyaXhfdW51c2VkX2NhY2hlX2dldChwcml2
LT5tb2RlbC5tYXRyaXgpOworICAgIGhlaWdodCA9IChlbmRSb3cgLSBzdGFydFJvdyArIDEpICog
VElMRV9TSVpFX0FUX1pPT00ocHJpdi0+dmlldy50aWxlLmhlaWdodCwgem9vbSk7CisgICAgd2lk
dGggPSAoZW5kQ29sIC0gc3RhcnRDb2wgKyAxKSAqIFRJTEVfU0laRV9BVF9aT09NKHByaXYtPnZp
ZXcudGlsZS53aWR0aCwgem9vbSk7CisgICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2xvY2tfYXJl
YSh0aWxlVW51c2VkQ2FjaGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dGFydENvbCAqIFRJTEVfU0laRV9BVF9aT09NKHByaXYtPnZpZXcudGlsZS53aWR0aCwgem9vbSks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydFJvdyAqIFRJTEVfU0la
RV9BVF9aT09NKHByaXYtPnZpZXcudGlsZS5oZWlnaHQsIHpvb20pLCB3aWR0aCwgaGVpZ2h0LCB6
b29tKTsKIAogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CkBAIC0xODkxLDEyICsxODkxLDEyIEBA
IHN0YXJ0X3Byb2Nlc3Npbmc6CiB2b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5k
ZXJfY2FuY2VsKEV2YXNfT2JqZWN0KiBld2tUaWxlKQogewogICAgIFBSSVZfREFUQV9HRVRfT1Jf
UkVUVVJOKGV3a1RpbGUsIHByaXYpOwotICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSogdHVjOwor
ICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSogdGlsZVVudXNlZENhY2hlOwogCiAgICAgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9jbGVhcihwcml2KTsKIAotICAg
IHR1YyA9IGV3a190aWxlX21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJp
eCk7Ci0gICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3VubG9ja19hcmVhKHR1Yyk7CisgICAgdGls
ZVVudXNlZENhY2hlID0gZXdrX3RpbGVfbWF0cml4X3VudXNlZF9jYWNoZV9nZXQocHJpdi0+bW9k
ZWwubWF0cml4KTsKKyAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfdW5sb2NrX2FyZWEodGlsZVVu
dXNlZENhY2hlKTsKIH0KIAogRWluYV9Cb29sIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX2Rpc2Fi
bGVfcmVuZGVyKEV2YXNfT2JqZWN0KiBld2tUaWxlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9lZmwvZXdrL2V3a190aWxlZF9tYXRyaXguY3BwIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3
a190aWxlZF9tYXRyaXguY3BwCmluZGV4IGU5MWJkNzc3NzdlMTA1ZDBmZTIyZGNhZjhmMmQ2YWEw
MDE2ZDIyNGUuLmM4YzM0ODUzMjA2ZDFkYmRlYTY1MTg4NjQ4MDc0YTQ0ZTY5NDkzM2UgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfbWF0cml4LmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX21hdHJpeC5jcHAKQEAgLTMzLDEwICszMywx
MCBAQAogCiBzdHJ1Y3QgX0V3a19UaWxlX01hdHJpeCB7CiAgICAgRWluYV9NYXRyaXhzcGFyc2Uq
IG1hdHJpeDsKLSAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHR1YzsKKyAgICBFd2tfVGlsZV9V
bnVzZWRfQ2FjaGUqIHRpbGllVW51c2VkQ2FjaGU7CiAgICAgRXZhc19Db2xvcnNwYWNlIGNzcGFj
ZTsKICAgICBzdHJ1Y3QgewotICAgICAgICB2b2lkICgqY2IpKHZvaWQqIGRhdGEsIEV3a19UaWxl
KiB0aWxlLCBjb25zdCBFaW5hX1JlY3RhbmdsZSogdXBkYXRlKTsKKyAgICAgICAgdm9pZCAoKmNh
bGxiYWNrKSh2b2lkKiBkYXRhLCBFd2tfVGlsZSogdGlsZSwgY29uc3QgRWluYV9SZWN0YW5nbGUq
IHVwZGF0ZSk7CiAgICAgICAgIHZvaWQqIGRhdGE7CiAgICAgfSByZW5kZXI7CiAgICAgdW5zaWdu
ZWQgaW50IGZyb3plbjsKQEAgLTYxLDQyICs2MSw0MiBAQCBzdGF0aWMgdWludDY0X3QgYnl0ZXNf
bGVha2VkID0gMDsKIC8qIGNhbGxlZCB3aGVuIG1hdHJpeHNwYXJzZSBpcyByZXNpemVkIG9yIGZy
ZWVkICovCiBzdGF0aWMgdm9pZCBfZXdrX3RpbGVfbWF0cml4X2NlbGxfZnJlZSh2b2lkKiB1c2Vy
RGF0YSwgdm9pZCogY2VsbERhdGEpCiB7Ci0gICAgRXdrX1RpbGVfTWF0cml4KiB0bSA9IHN0YXRp
Y19jYXN0PEV3a19UaWxlX01hdHJpeCo+KHVzZXJEYXRhKTsKKyAgICBFd2tfVGlsZV9NYXRyaXgq
IHRpbGVNYXRyaXggPSBzdGF0aWNfY2FzdDxFd2tfVGlsZV9NYXRyaXgqPih1c2VyRGF0YSk7CiAg
ICAgRXdrX1RpbGUqIHRpbGUgPSBzdGF0aWNfY2FzdDxFd2tfVGlsZSo+KGNlbGxEYXRhKTsKIAog
ICAgIGlmICghdGlsZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZXdrX3RpbGVfdW51c2VkX2Nh
Y2hlX2ZyZWV6ZSh0bS0+dHVjKTsKKyAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfZnJlZXplKHRp
bGVNYXRyaXgtPnRpbGllVW51c2VkQ2FjaGUpOwogCiAgICAgaWYgKHRpbGUtPnVwZGF0ZXMgfHwg
dGlsZS0+c3RhdHMuZnVsbF91cGRhdGUpCi0gICAgICAgIHRtLT51cGRhdGVzID0gZWluYV9saXN0
X3JlbW92ZSh0bS0+dXBkYXRlcywgdGlsZSk7CisgICAgICAgIHRpbGVNYXRyaXgtPnVwZGF0ZXMg
PSBlaW5hX2xpc3RfcmVtb3ZlKHRpbGVNYXRyaXgtPnVwZGF0ZXMsIHRpbGUpOwogCiAgICAgaWYg
KHRpbGUtPnZpc2libGUpCiAgICAgICAgIEVSUigiZnJlZWluZyBjZWxsIHRoYXQgaXMgdmlzaWJs
ZSwgbGVha2luZyB0aWxlICVwIiwgdGlsZSk7CiAgICAgZWxzZSB7Ci0gICAgICAgIGlmICghZXdr
X3RpbGVfdW51c2VkX2NhY2hlX3RpbGVfZ2V0KHRtLT50dWMsIHRpbGUpKQotICAgICAgICAgICAg
RVJSKCJ0aWxlICVwIHdhcyBub3QgaW4gY2FjaGUgJXA/IGxlYWtpbmcuLi4iLCB0aWxlLCB0bS0+
dHVjKTsKKyAgICAgICAgaWYgKCFld2tfdGlsZV91bnVzZWRfY2FjaGVfdGlsZV9nZXQodGlsZU1h
dHJpeC0+dGlsaWVVbnVzZWRDYWNoZSwgdGlsZSkpCisgICAgICAgICAgICBFUlIoInRpbGUgJXAg
d2FzIG5vdCBpbiBjYWNoZSAlcD8gbGVha2luZy4uLiIsIHRpbGUsIHRpbGVNYXRyaXgtPnRpbGll
VW51c2VkQ2FjaGUpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIERCRygidGlsZSBjZWxs
IGRvZXMgbm90IGV4aXN0IGFueW1vcmUsIGZyZWUgaXQgJXAiLCB0aWxlKTsKICNpZmRlZiBERUJV
R19NRU1fTEVBS1MKLSAgICAgICAgICAgIHRtLT5zdGF0cy5ieXRlcy5mcmVlZCArPSB0aWxlLT5i
eXRlczsKLSAgICAgICAgICAgIHRtLT5zdGF0cy50aWxlcy5mcmVlZCsrOworICAgICAgICAgICAg
dGlsZU1hdHJpeC0+c3RhdHMuYnl0ZXMuZnJlZWQgKz0gdGlsZS0+Ynl0ZXM7CisgICAgICAgICAg
ICB0aWxlTWF0cml4LT5zdGF0cy50aWxlcy5mcmVlZCsrOwogI2VuZGlmCiAgICAgICAgICAgICBl
d2tfdGlsZV9mcmVlKHRpbGUpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgZXdrX3RpbGVfdW51
c2VkX2NhY2hlX3RoYXcodG0tPnR1Yyk7CisgICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3RoYXco
dGlsZU1hdHJpeC0+dGlsaWVVbnVzZWRDYWNoZSk7CiB9CiAKIC8qIGNhbGxlZCB3aGVuIGNhY2hl
IG9mIHVudXNlZCB0aWxlIGlzIGZsdXNoZWQgKi8KIHN0YXRpYyB2b2lkIF9ld2tfdGlsZV9tYXRy
aXhfdGlsZV9mcmVlKHZvaWQqIGRhdGEsIEV3a19UaWxlKiB0aWxlKQogewotICAgIEV3a19UaWxl
X01hdHJpeCogdG0gPSBzdGF0aWNfY2FzdDxFd2tfVGlsZV9NYXRyaXgqPihkYXRhKTsKKyAgICBF
d2tfVGlsZV9NYXRyaXgqIHRpbGVNYXRyaXggPSBzdGF0aWNfY2FzdDxFd2tfVGlsZV9NYXRyaXgq
PihkYXRhKTsKICAgICBFaW5hX01hdHJpeHNwYXJzZV9DZWxsKiBjZWxsOwogCi0gICAgaWYgKCFl
aW5hX21hdHJpeHNwYXJzZV9jZWxsX2lkeF9nZXQodG0tPm1hdHJpeCwgdGlsZS0+cm93LCB0aWxl
LT5jb2wsICZjZWxsKSkgeworICAgIGlmICghZWluYV9tYXRyaXhzcGFyc2VfY2VsbF9pZHhfZ2V0
KHRpbGVNYXRyaXgtPm1hdHJpeCwgdGlsZS0+cm93LCB0aWxlLT5jb2wsICZjZWxsKSkgewogICAg
ICAgICBFUlIoInJlbW92aW5nIHRpbGUgJXAgdGhhdCB3YXMgbm90IGluIHRoZSBtYXRyaXg/IExl
YWtpbmcuLi4iLCB0aWxlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTEwNyw3ICsxMDcs
NyBAQCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVfbWF0cml4X3RpbGVfZnJlZSh2b2lkKiBkYXRhLCBF
d2tfVGlsZSogdGlsZSkKICAgICB9CiAKICAgICBpZiAodGlsZS0+dXBkYXRlcyB8fCB0aWxlLT5z
dGF0cy5mdWxsX3VwZGF0ZSkKLSAgICAgICAgdG0tPnVwZGF0ZXMgPSBlaW5hX2xpc3RfcmVtb3Zl
KHRtLT51cGRhdGVzLCB0aWxlKTsKKyAgICAgICAgdGlsZU1hdHJpeC0+dXBkYXRlcyA9IGVpbmFf
bGlzdF9yZW1vdmUodGlsZU1hdHJpeC0+dXBkYXRlcywgdGlsZSk7CiAKICAgICAvKiBzZXQgdG8g
bnVsbCB0byBhdm9pZCBkb3VibGUgZnJlZSAqLwogICAgIGVpbmFfbWF0cml4c3BhcnNlX2NlbGxf
ZGF0YV9yZXBsYWNlKGNlbGwsIDAsIDApOwpAQCAtMTIwLDggKzEyMCw4IEBAIHN0YXRpYyB2b2lk
IF9ld2tfdGlsZV9tYXRyaXhfdGlsZV9mcmVlKHZvaWQqIGRhdGEsIEV3a19UaWxlKiB0aWxlKQog
ICAgIH0KIAogI2lmZGVmIERFQlVHX01FTV9MRUFLUwotICAgIHRtLT5zdGF0cy5ieXRlcy5mcmVl
ZCArPSB0aWxlLT5ieXRlczsKLSAgICB0bS0+c3RhdHMudGlsZXMuZnJlZWQrKzsKKyAgICB0aWxl
TWF0cml4LT5zdGF0cy5ieXRlcy5mcmVlZCArPSB0aWxlLT5ieXRlczsKKyAgICB0aWxlTWF0cml4
LT5zdGF0cy50aWxlcy5mcmVlZCsrOwogI2VuZGlmCiAKICAgICBld2tfdGlsZV9mcmVlKHRpbGUp
OwpAQCAtMTQ1LDM4ICsxNDUsMzggQEAgc3RhdGljIHZvaWQgX2V3a190aWxlX21hdHJpeF90aWxl
X2ZyZWUodm9pZCogZGF0YSwgRXdrX1RpbGUqIHRpbGUpCiAgKgogICogQHJldHVybiBuZXdseSBh
bGxvY2F0ZWQgaW5zdGFuY2Ugb24gc3VjY2VzcywgQGMgMCBvbiBmYWlsdXJlLgogICovCi1Fd2tf
VGlsZV9NYXRyaXgqIGV3a190aWxlX21hdHJpeF9uZXcoRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0
aWxlVW51c2VkQ2FjaGUsIHVuc2lnbmVkIGxvbmcgY29sdW1ucywgdW5zaWduZWQgbG9uZyByb3dz
LCBFdmFzX0NvbG9yc3BhY2UgY29sb3JTcGFjZSwgdm9pZCAoKnJlbmRlcl9jYWxsYmFjaykodm9p
ZCogZGF0YSwgRXdrX1RpbGUqIHRpbGUsIGNvbnN0IEVpbmFfUmVjdGFuZ2xlKiB1cGRhdGUpLCBj
b25zdCB2b2lkKiByZW5kZXJEYXRhKQorRXdrX1RpbGVfTWF0cml4KiBld2tfdGlsZV9tYXRyaXhf
bmV3KEV3a19UaWxlX1VudXNlZF9DYWNoZSogdGlsZVVudXNlZENhY2hlLCB1bnNpZ25lZCBsb25n
IGNvbHVtbnMsIHVuc2lnbmVkIGxvbmcgcm93cywgRXZhc19Db2xvcnNwYWNlIGNvbG9yU3BhY2Us
IHZvaWQgKCpyZW5kZXJDYWxsYmFjaykodm9pZCogZGF0YSwgRXdrX1RpbGUqIHRpbGUsIGNvbnN0
IEVpbmFfUmVjdGFuZ2xlKiB1cGRhdGUpLCBjb25zdCB2b2lkKiByZW5kZXJEYXRhKQogewotICAg
IEV3a19UaWxlX01hdHJpeCogdG0gPSBzdGF0aWNfY2FzdDxFd2tfVGlsZV9NYXRyaXgqPihjYWxs
b2MoMSwgc2l6ZW9mKEV3a19UaWxlX01hdHJpeCkpKTsKLSAgICBpZiAoIXRtKQorICAgIEV3a19U
aWxlX01hdHJpeCogdGlsZU1hdHJpeCA9IHN0YXRpY19jYXN0PEV3a19UaWxlX01hdHJpeCo+KGNh
bGxvYygxLCBzaXplb2YoRXdrX1RpbGVfTWF0cml4KSkpOworICAgIGlmICghdGlsZU1hdHJpeCkK
ICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICB0bS0+bWF0cml4ID0gZWluYV9tYXRyaXhzcGFyc2Vf
bmV3KHJvd3MsIGNvbHVtbnMsIF9ld2tfdGlsZV9tYXRyaXhfY2VsbF9mcmVlLCB0bSk7Ci0gICAg
aWYgKCF0bS0+bWF0cml4KSB7CisgICAgdGlsZU1hdHJpeC0+bWF0cml4ID0gZWluYV9tYXRyaXhz
cGFyc2VfbmV3KHJvd3MsIGNvbHVtbnMsIF9ld2tfdGlsZV9tYXRyaXhfY2VsbF9mcmVlLCB0aWxl
TWF0cml4KTsKKyAgICBpZiAoIXRpbGVNYXRyaXgtPm1hdHJpeCkgewogICAgICAgICBFUlIoImNv
dWxkIG5vdCBjcmVhdGUgc3BhcnNlIG1hdHJpeC4iKTsKLSAgICAgICAgZnJlZSh0bSk7CisgICAg
ICAgIGZyZWUodGlsZU1hdHJpeCk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAogICAgIGlm
ICh0aWxlVW51c2VkQ2FjaGUpCi0gICAgICAgIHRtLT50dWMgPSBld2tfdGlsZV91bnVzZWRfY2Fj
aGVfcmVmKHRpbGVVbnVzZWRDYWNoZSk7CisgICAgICAgIHRpbGVNYXRyaXgtPnRpbGllVW51c2Vk
Q2FjaGUgPSBld2tfdGlsZV91bnVzZWRfY2FjaGVfcmVmKHRpbGVVbnVzZWRDYWNoZSk7CiAgICAg
ZWxzZSB7Ci0gICAgICAgIHRtLT50dWMgPSBld2tfdGlsZV91bnVzZWRfY2FjaGVfbmV3KDQwOTYw
MDAwKTsKLSAgICAgICAgaWYgKCF0bS0+dHVjKSB7CisgICAgICAgIHRpbGVNYXRyaXgtPnRpbGll
VW51c2VkQ2FjaGUgPSBld2tfdGlsZV91bnVzZWRfY2FjaGVfbmV3KDQwOTYwMDAwKTsKKyAgICAg
ICAgaWYgKCF0aWxlTWF0cml4LT50aWxpZVVudXNlZENhY2hlKSB7CiAgICAgICAgICAgICBFUlIo
Im5vIGNhY2hlIG9mIHVudXNlZCB0aWxlISIpOwotICAgICAgICAgICAgZWluYV9tYXRyaXhzcGFy
c2VfZnJlZSh0bS0+bWF0cml4KTsKLSAgICAgICAgICAgIGZyZWUodG0pOworICAgICAgICAgICAg
ZWluYV9tYXRyaXhzcGFyc2VfZnJlZSh0aWxlTWF0cml4LT5tYXRyaXgpOworICAgICAgICAgICAg
ZnJlZSh0aWxlTWF0cml4KTsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAgICAg
fQogCi0gICAgdG0tPmNzcGFjZSA9IGNvbG9yU3BhY2U7Ci0gICAgdG0tPnJlbmRlci5jYiA9IHJl
bmRlcl9jYWxsYmFjazsKLSAgICB0bS0+cmVuZGVyLmRhdGEgPSAodm9pZCopcmVuZGVyRGF0YTsK
LSAgICB0bS0+dGlsZS53aWR0aCA9IERFRkFVTFRfVElMRV9XOwotICAgIHRtLT50aWxlLmhlaWdo
dCA9IERFRkFVTFRfVElMRV9IOworICAgIHRpbGVNYXRyaXgtPmNzcGFjZSA9IGNvbG9yU3BhY2U7
CisgICAgdGlsZU1hdHJpeC0+cmVuZGVyLmNhbGxiYWNrID0gcmVuZGVyQ2FsbGJhY2s7CisgICAg
dGlsZU1hdHJpeC0+cmVuZGVyLmRhdGEgPSAodm9pZCopcmVuZGVyRGF0YTsKKyAgICB0aWxlTWF0
cml4LT50aWxlLndpZHRoID0gREVGQVVMVF9USUxFX1c7CisgICAgdGlsZU1hdHJpeC0+dGlsZS5o
ZWlnaHQgPSBERUZBVUxUX1RJTEVfSDsKIAotICAgIHJldHVybiB0bTsKKyAgICByZXR1cm4gdGls
ZU1hdHJpeDsKIH0KIAogLyoqCkBAIC0xOTEsMTIgKzE5MSwxMiBAQCB2b2lkIGV3a190aWxlX21h
dHJpeF9mcmVlKEV3a19UaWxlX01hdHJpeCogdGlsZU1hdHJpeCkKICNlbmRpZgogCiAgICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk4odGlsZU1hdHJpeCk7Ci0gICAgZXdrX3RpbGVfdW51c2Vk
X2NhY2hlX2ZyZWV6ZSh0aWxlTWF0cml4LT50dWMpOworICAgIGV3a190aWxlX3VudXNlZF9jYWNo
ZV9mcmVlemUodGlsZU1hdHJpeC0+dGlsaWVVbnVzZWRDYWNoZSk7CiAKICAgICBlaW5hX21hdHJp
eHNwYXJzZV9mcmVlKHRpbGVNYXRyaXgtPm1hdHJpeCk7CiAKLSAgICBld2tfdGlsZV91bnVzZWRf
Y2FjaGVfdGhhdyh0aWxlTWF0cml4LT50dWMpOwotICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV91
bnJlZih0aWxlTWF0cml4LT50dWMpOworICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV90aGF3KHRp
bGVNYXRyaXgtPnRpbGllVW51c2VkQ2FjaGUpOworICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV91
bnJlZih0aWxlTWF0cml4LT50aWxpZVVudXNlZENhY2hlKTsKIAogI2lmZGVmIERFQlVHX01FTV9M
RUFLUwogICAgIHRpbGVzID0gdGlsZU1hdHJpeC0+c3RhdHMudGlsZXMuYWxsb2NhdGVkIC0gdGls
ZU1hdHJpeC0+c3RhdHMudGlsZXMuZnJlZWQ7CkBAIC0yNDQsNyArMjQ0LDcgQEAgdm9pZCBld2tf
dGlsZV9tYXRyaXhfcmVzaXplKEV3a19UaWxlX01hdHJpeCogdGlsZU1hdHJpeCwgdW5zaWduZWQg
bG9uZyBjb2xzLCB1bnMKIEV3a19UaWxlX1VudXNlZF9DYWNoZSogZXdrX3RpbGVfbWF0cml4X3Vu
dXNlZF9jYWNoZV9nZXQoY29uc3QgRXdrX1RpbGVfTWF0cml4KiB0aWxlTWF0cml4KQogewogICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh0aWxlTWF0cml4LCAwKTsKLSAgICByZXR1
cm4gdGlsZU1hdHJpeC0+dHVjOworICAgIHJldHVybiB0aWxlTWF0cml4LT50aWxpZVVudXNlZENh
Y2hlOwogfQogCiAvKioKQEAgLTI3OSw3ICsyNzksNyBAQCBFd2tfVGlsZSogZXdrX3RpbGVfbWF0
cml4X3RpbGVfZXhhY3RfZ2V0KEV3a19UaWxlX01hdHJpeCogdGlsZU1hdHJpeCwgdW5zaWduZWQg
bAogCiBlbmQ6CiAgICAgaWYgKCF0aWxlLT52aXNpYmxlKSB7Ci0gICAgICAgIGlmICghZXdrX3Rp
bGVfdW51c2VkX2NhY2hlX3RpbGVfZ2V0KHRpbGVNYXRyaXgtPnR1YywgdGlsZSkpCisgICAgICAg
IGlmICghZXdrX3RpbGVfdW51c2VkX2NhY2hlX3RpbGVfZ2V0KHRpbGVNYXRyaXgtPnRpbGllVW51
c2VkQ2FjaGUsIHRpbGUpKQogICAgICAgICAgICAgV1JOKCJFd2tfVGlsZSB3YXMgdW51c2VkIGJ1
dCBub3QgaW4gY2FjaGU/IGJ1ZyEiKTsKICAgICB9CiAKQEAgLTMyMCwxOCArMzIwLDE4IEBAIEVp
bmFfQm9vbCBld2tfdGlsZV9tYXRyaXhfdGlsZV9leGFjdF9leGlzdHMoRXdrX1RpbGVfTWF0cml4
KiB0aWxlTWF0cml4LCB1bnNpZ25lCiAgKi8KIEV3a19UaWxlKiBld2tfdGlsZV9tYXRyaXhfdGls
ZV9uZXcoRXdrX1RpbGVfTWF0cml4KiB0aWxlTWF0cml4LCBFdmFzKiBjYW52YXMsIHVuc2lnbmVk
IGxvbmcgY29sdW1uLCB1bnNpZ25lZCBsb25nIHJvdywgZmxvYXQgem9vbSkKIHsKLSAgICBFdmFz
X0Nvb3JkIHR3LCB0aDsKKyAgICBFdmFzX0Nvb3JkIHRpbGVXaWR0aCwgdGlsZUhlaWdodDsKICAg
ICBFd2tfVGlsZSogdGlsZTsKIAogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh0
aWxlTWF0cml4LCAwKTsKICAgICBFSU5BX1NBRkVUWV9PTl9GQUxTRV9SRVRVUk5fVkFMKHpvb20g
PiAwLjAsIDApOwogCi0gICAgdHcgPSB0aWxlTWF0cml4LT50aWxlLndpZHRoOwotICAgIHRoID0g
dGlsZU1hdHJpeC0+dGlsZS5oZWlnaHQ7CisgICAgdGlsZVdpZHRoID0gdGlsZU1hdHJpeC0+dGls
ZS53aWR0aDsKKyAgICB0aWxlSGVpZ2h0ID0gdGlsZU1hdHJpeC0+dGlsZS5oZWlnaHQ7CiAKLSAg
ICB0aWxlID0gZXdrX3RpbGVfbmV3KGNhbnZhcywgdHcsIHRoLCB6b29tLCB0aWxlTWF0cml4LT5j
c3BhY2UpOworICAgIHRpbGUgPSBld2tfdGlsZV9uZXcoY2FudmFzLCB0aWxlV2lkdGgsIHRpbGVI
ZWlnaHQsIHpvb20sIHRpbGVNYXRyaXgtPmNzcGFjZSk7CiAgICAgaWYgKCF0aWxlKSB7Ci0gICAg
ICAgIEVSUigiY291bGQgbm90IGNyZWF0ZSB0aWxlICVkeCVkIGF0ICVmLCBjc3BhY2U9JWQiLCB0
dywgdGgsIChkb3VibGUpem9vbSwgdGlsZU1hdHJpeC0+Y3NwYWNlKTsKKyAgICAgICAgRVJSKCJj
b3VsZCBub3QgY3JlYXRlIHRpbGUgJWR4JWQgYXQgJWYsIGNzcGFjZT0lZCIsIHRpbGVXaWR0aCwg
dGlsZUhlaWdodCwgKGRvdWJsZSl6b29tLCB0aWxlTWF0cml4LT5jc3BhY2UpOwogICAgICAgICBy
ZXR1cm4gMDsKICAgICB9CiAKQEAgLTM0Myw4ICszNDMsOCBAQCBFd2tfVGlsZSogZXdrX3RpbGVf
bWF0cml4X3RpbGVfbmV3KEV3a19UaWxlX01hdHJpeCogdGlsZU1hdHJpeCwgRXZhcyogY2FudmFz
LCB1bgogCiAgICAgdGlsZS0+Y29sID0gY29sdW1uOwogICAgIHRpbGUtPnJvdyA9IHJvdzsKLSAg
ICB0aWxlLT54ID0gY29sdW1uICogdHc7Ci0gICAgdGlsZS0+eSA9IHJvdyAqIHRoOworICAgIHRp
bGUtPnggPSBjb2x1bW4gKiB0aWxlV2lkdGg7CisgICAgdGlsZS0+eSA9IHJvdyAqIHRpbGVIZWln
aHQ7CiAKICAgICBjYWlyb190cmFuc2xhdGUodGlsZS0+Y2Fpcm8sIC10aWxlLT54LCAtdGlsZS0+
eSk7CiAKQEAgLTM4NSwxNiArMzg1LDE2IEBAIEVpbmFfQm9vbCBld2tfdGlsZV9tYXRyaXhfdGls
ZV9wdXQoRXdrX1RpbGVfTWF0cml4KiB0aWxlTWF0cml4LCBFd2tfVGlsZSogdGlsZSwKICAgICAg
ICAgcmV0dXJuIEVJTkFfVFJVRTsKIAogICAgIHRpbGUtPnN0YXRzLmxhc3RfdXNlZCA9IGxhc3RV
c2VkOwotICAgIHJldHVybiBld2tfdGlsZV91bnVzZWRfY2FjaGVfdGlsZV9wdXQodGlsZU1hdHJp
eC0+dHVjLCB0aWxlLCBfZXdrX3RpbGVfbWF0cml4X3RpbGVfZnJlZSwgdGlsZU1hdHJpeCk7Cisg
ICAgcmV0dXJuIGV3a190aWxlX3VudXNlZF9jYWNoZV90aWxlX3B1dCh0aWxlTWF0cml4LT50aWxp
ZVVudXNlZENhY2hlLCB0aWxlLCBfZXdrX3RpbGVfbWF0cml4X3RpbGVfZnJlZSwgdGlsZU1hdHJp
eCk7CiB9CiAKIEVpbmFfQm9vbCBld2tfdGlsZV9tYXRyaXhfdGlsZV91cGRhdGUoRXdrX1RpbGVf
TWF0cml4KiB0aWxlTWF0cml4LCB1bnNpZ25lZCBsb25nIGNvbCwgdW5zaWduZWQgbG9uZyByb3cs
IGNvbnN0IEVpbmFfUmVjdGFuZ2xlKiB1cGRhdGUpCiB7Ci0gICAgRWluYV9SZWN0YW5nbGUgbmV3
X3VwZGF0ZTsKKyAgICBFaW5hX1JlY3RhbmdsZSBuZXdVcGRhdGU7CiAgICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk5fVkFMKHRpbGVNYXRyaXgsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOX1ZBTCh1cGRhdGUsIEVJTkFfRkFMU0UpOwogCi0gICAgbWVtY3B5
KCZuZXdfdXBkYXRlLCB1cGRhdGUsIHNpemVvZihuZXdfdXBkYXRlKSk7CisgICAgbWVtY3B5KCZu
ZXdVcGRhdGUsIHVwZGF0ZSwgc2l6ZW9mKG5ld1VwZGF0ZSkpOwogICAgIC8vIGNoZWNrIHVwZGF0
ZSBpcyB2YWxpZCwgb3RoZXJ3aXNlIHJldHVybiBFSU5BX0ZBTFNFCiAgICAgaWYgKHVwZGF0ZS0+
eCA8IDAgfHwgdXBkYXRlLT55IDwgMCB8fCB1cGRhdGUtPncgPD0gMCB8fCB1cGRhdGUtPmggPD0g
MCkgewogICAgICAgICBFUlIoImludmFsaWQgdXBkYXRlIHJlZ2lvbi4iKTsKQEAgLTQwMiw5ICs0
MDIsOSBAQCBFaW5hX0Jvb2wgZXdrX3RpbGVfbWF0cml4X3RpbGVfdXBkYXRlKEV3a19UaWxlX01h
dHJpeCogdGlsZU1hdHJpeCwgdW5zaWduZWQgbG9uZwogICAgIH0KIAogICAgIGlmICh1cGRhdGUt
PnggKyB1cGRhdGUtPncgLSAxID49IHRpbGVNYXRyaXgtPnRpbGUud2lkdGgpCi0gICAgICAgIG5l
d191cGRhdGUudyA9IHRpbGVNYXRyaXgtPnRpbGUud2lkdGggLSB1cGRhdGUtPng7CisgICAgICAg
IG5ld1VwZGF0ZS53ID0gdGlsZU1hdHJpeC0+dGlsZS53aWR0aCAtIHVwZGF0ZS0+eDsKICAgICBp
ZiAodXBkYXRlLT55ICsgdXBkYXRlLT5oIC0gMSA+PSB0aWxlTWF0cml4LT50aWxlLmhlaWdodCkK
LSAgICAgICAgbmV3X3VwZGF0ZS5oID0gdGlsZU1hdHJpeC0+dGlsZS5oZWlnaHQgLSB1cGRhdGUt
Pnk7CisgICAgICAgIG5ld1VwZGF0ZS5oID0gdGlsZU1hdHJpeC0+dGlsZS5oZWlnaHQgLSB1cGRh
dGUtPnk7CiAKICAgICBFd2tfVGlsZSogdGlsZSA9IHN0YXRpY19jYXN0PEV3a19UaWxlKj4oZWlu
YV9tYXRyaXhzcGFyc2VfZGF0YV9pZHhfZ2V0KHRpbGVNYXRyaXgtPm1hdHJpeCwgcm93LCBjb2wp
KTsKICAgICBpZiAoIXRpbGUpCkBAIC00MTIsNyArNDEyLDcgQEAgRWluYV9Cb29sIGV3a190aWxl
X21hdHJpeF90aWxlX3VwZGF0ZShFd2tfVGlsZV9NYXRyaXgqIHRpbGVNYXRyaXgsIHVuc2lnbmVk
IGxvbmcKIAogICAgIGlmICghdGlsZS0+dXBkYXRlcyAmJiAhdGlsZS0+c3RhdHMuZnVsbF91cGRh
dGUpCiAgICAgICAgIHRpbGVNYXRyaXgtPnVwZGF0ZXMgPSBlaW5hX2xpc3RfYXBwZW5kKHRpbGVN
YXRyaXgtPnVwZGF0ZXMsIHRpbGUpOwotICAgIGV3a190aWxlX3VwZGF0ZV9hcmVhKHRpbGUsICZu
ZXdfdXBkYXRlKTsKKyAgICBld2tfdGlsZV91cGRhdGVfYXJlYSh0aWxlLCAmbmV3VXBkYXRlKTsK
IAogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CkBAIC00NTMsNyArNDUzLDcgQEAgdm9pZCBld2tf
dGlsZV9tYXRyaXhfdGlsZV91cGRhdGVzX2NsZWFyKEV3a19UaWxlX01hdHJpeCogdGlsZU1hdHJp
eCwgRXdrX1RpbGUqIHQKIHN0YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxlX21hdHJpeF9zbGljZXJf
c2V0dXAoRXdrX1RpbGVfTWF0cml4KiB0aWxlTWF0cml4LCBjb25zdCBFaW5hX1JlY3RhbmdsZSog
YXJlYSwgZmxvYXQgem9vbSwgRWluYV9UaWxlX0dyaWRfU2xpY2VyKiBzbGljZXIpCiB7CiAgICAg
dW5zaWduZWQgbG9uZyByb3dzLCBjb2xzOwotICAgIEV2YXNfQ29vcmQgeCwgeSwgd2lkdGgsIGhl
aWdodCwgdHcsIHRoOworICAgIEV2YXNfQ29vcmQgeCwgeSwgd2lkdGgsIGhlaWdodCwgdGlsZVdp
ZHRoLCB0aWxlSGVpZ2h0OwogCiAgICAgaWYgKGFyZWEtPncgPD0gMCB8fCBhcmVhLT5oIDw9IDAp
IHsKICAgICAgICAgV1JOKCJpbnZhbGlkIGFyZWEgcmVnaW9uOiAlZCwlZCslZHglZC4iLApAQCAt
NDY2LDggKzQ2Niw4IEBAIHN0YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxlX21hdHJpeF9zbGljZXJf
c2V0dXAoRXdrX1RpbGVfTWF0cml4KiB0aWxlTWF0cml4LCBjb25zCiAgICAgd2lkdGggPSBhcmVh
LT53OwogICAgIGhlaWdodCA9IGFyZWEtPmg7CiAKLSAgICB0dyA9IHRpbGVNYXRyaXgtPnRpbGUu
d2lkdGg7Ci0gICAgdGggPSB0aWxlTWF0cml4LT50aWxlLmhlaWdodDsKKyAgICB0aWxlV2lkdGgg
PSB0aWxlTWF0cml4LT50aWxlLndpZHRoOworICAgIHRpbGVIZWlnaHQgPSB0aWxlTWF0cml4LT50
aWxlLmhlaWdodDsKIAogICAgIC8vIGNyb3BwaW5nIGFyZWEgcmVnaW9uIHRvIGZpdCBtYXRyaXgK
ICAgICBlaW5hX21hdHJpeHNwYXJzZV9zaXplX2dldCh0aWxlTWF0cml4LT5tYXRyaXgsICZyb3dz
LCAmY29scyk7CkBAIC00ODAsMTIgKzQ4MCwxMiBAQCBzdGF0aWMgRWluYV9Cb29sIF9ld2tfdGls
ZV9tYXRyaXhfc2xpY2VyX3NldHVwKEV3a19UaWxlX01hdHJpeCogdGlsZU1hdHJpeCwgY29ucwog
ICAgICAgICB5ID0gMDsKICAgICB9CiAKLSAgICBpZiAoeSArIGhlaWdodCAtIDEgPiAobG9uZyko
cm93cyAqIHRoKSkKLSAgICAgICAgaGVpZ2h0ID0gcm93cyAqIHRoIC0geTsKLSAgICBpZiAoeCAr
IHdpZHRoIC0gMSA+IChsb25nKShjb2xzICogdHcpKQotICAgICAgICB3aWR0aCA9IGNvbHMgKiB0
dyAtIHg7CisgICAgaWYgKHkgKyBoZWlnaHQgLSAxID4gKGxvbmcpKHJvd3MgKiB0aWxlSGVpZ2h0
KSkKKyAgICAgICAgaGVpZ2h0ID0gcm93cyAqIHRpbGVIZWlnaHQgLSB5OworICAgIGlmICh4ICsg
d2lkdGggLSAxID4gKGxvbmcpKGNvbHMgKiB0aWxlV2lkdGgpKQorICAgICAgICB3aWR0aCA9IGNv
bHMgKiB0aWxlV2lkdGggLSB4OwogCi0gICAgcmV0dXJuIGVpbmFfdGlsZV9ncmlkX3NsaWNlcl9z
ZXR1cChzbGljZXIsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHR3LCB0aCk7CisgICAgcmV0dXJuIGVp
bmFfdGlsZV9ncmlkX3NsaWNlcl9zZXR1cChzbGljZXIsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHRp
bGVXaWR0aCwgdGlsZUhlaWdodCk7CiB9CiAKIApAQCAtNTMxLDE3ICs1MzEsMTcgQEAgRWluYV9C
b29sIGV3a190aWxlX21hdHJpeF91cGRhdGUoRXdrX1RpbGVfTWF0cml4KiB0aWxlTWF0cml4LCBj
b25zdCBFaW5hX1JlY3RhbmcKIAogdm9pZCBld2tfdGlsZV9tYXRyaXhfdXBkYXRlc19wcm9jZXNz
KEV3a19UaWxlX01hdHJpeCogdGlsZU1hdHJpeCkKIHsKLSAgICBFaW5hX0xpc3QqIGwsICogbF9u
ZXh0OworICAgIEVpbmFfTGlzdCogbGlzdCwgKmxpc3ROZXh0OwogICAgIHZvaWQqIGl0ZW07CiAg
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4odGlsZU1hdHJpeCk7CiAKICAgICAvLyBwcm9j
ZXNzIHVwZGF0ZXMsIHVuZmxhZyB0aWxlcwotICAgIEVJTkFfTElTVF9GT1JFQUNIX1NBRkUodGls
ZU1hdHJpeC0+dXBkYXRlcywgbCwgbF9uZXh0LCBpdGVtKSB7CisgICAgRUlOQV9MSVNUX0ZPUkVB
Q0hfU0FGRSh0aWxlTWF0cml4LT51cGRhdGVzLCBsaXN0LCBsaXN0TmV4dCwgaXRlbSkgewogICAg
ICAgICBFd2tfVGlsZSogdGlsZSA9IHN0YXRpY19jYXN0PEV3a19UaWxlKj4oaXRlbSk7Ci0gICAg
ICAgIGV3a190aWxlX3VwZGF0ZXNfcHJvY2Vzcyh0aWxlLCB0aWxlTWF0cml4LT5yZW5kZXIuY2Is
IHRpbGVNYXRyaXgtPnJlbmRlci5kYXRhKTsKKyAgICAgICAgZXdrX3RpbGVfdXBkYXRlc19wcm9j
ZXNzKHRpbGUsIHRpbGVNYXRyaXgtPnJlbmRlci5jYWxsYmFjaywgdGlsZU1hdHJpeC0+cmVuZGVy
LmRhdGEpOwogICAgICAgICBpZiAodGlsZS0+dmlzaWJsZSkgewogICAgICAgICAgICAgZXdrX3Rp
bGVfdXBkYXRlc19jbGVhcih0aWxlKTsKLSAgICAgICAgICAgIHRpbGVNYXRyaXgtPnVwZGF0ZXMg
PSBlaW5hX2xpc3RfcmVtb3ZlX2xpc3QodGlsZU1hdHJpeC0+dXBkYXRlcywgbCk7CisgICAgICAg
ICAgICB0aWxlTWF0cml4LT51cGRhdGVzID0gZWluYV9saXN0X3JlbW92ZV9saXN0KHRpbGVNYXRy
aXgtPnVwZGF0ZXMsIGxpc3QpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAtNTU5LDcgKzU1OSw3
IEBAIHZvaWQgZXdrX3RpbGVfbWF0cml4X3VwZGF0ZXNfY2xlYXIoRXdrX1RpbGVfTWF0cml4KiB0
aWxlTWF0cml4KQogLy8gcmVtb3ZlIG1lIGxhdGVyIQogdm9pZCBld2tfdGlsZV9tYXRyaXhfZGJn
KGNvbnN0IEV3a19UaWxlX01hdHJpeCogdGlsZU1hdHJpeCkKIHsKLSAgICBFaW5hX0l0ZXJhdG9y
KiBpdCA9IGVpbmFfbWF0cml4c3BhcnNlX2l0ZXJhdG9yX2NvbXBsZXRlX25ldyh0aWxlTWF0cml4
LT5tYXRyaXgpOworICAgIEVpbmFfSXRlcmF0b3IqIGl0ZXJhdG9yID0gZWluYV9tYXRyaXhzcGFy
c2VfaXRlcmF0b3JfY29tcGxldGVfbmV3KHRpbGVNYXRyaXgtPm1hdHJpeCk7CiAgICAgRWluYV9N
YXRyaXhzcGFyc2VfQ2VsbCogY2VsbDsKICAgICBFaW5hX0Jvb2wgbGFzdF9lbXB0eSA9IEVJTkFf
RkFMU0U7CiAKQEAgLTU3NCw5ICs1NzQsOSBAQCB2b2lkIGV3a190aWxlX21hdHJpeF9kYmcoY29u
c3QgRXdrX1RpbGVfTWF0cml4KiB0aWxlTWF0cml4KQogICAgIHByaW50ZigiRXdrX1RpbGUgTWF0
cml4OlxuIik7CiAjZW5kaWYKIAotICAgIEVJTkFfSVRFUkFUT1JfRk9SRUFDSChpdCwgY2VsbCkg
ewotICAgICAgICB1bnNpZ25lZCBsb25nIHJvdywgY29sOwotICAgICAgICBlaW5hX21hdHJpeHNw
YXJzZV9jZWxsX3Bvc2l0aW9uX2dldChjZWxsLCAmcm93LCAmY29sKTsKKyAgICBFSU5BX0lURVJB
VE9SX0ZPUkVBQ0goaXRlcmF0b3IsIGNlbGwpIHsKKyAgICAgICAgdW5zaWduZWQgbG9uZyByb3cs
IGNvbHVtbjsKKyAgICAgICAgZWluYV9tYXRyaXhzcGFyc2VfY2VsbF9wb3NpdGlvbl9nZXQoY2Vs
bCwgJnJvdywgJmNvbHVtbik7CiAKICAgICAgICAgRXdrX1RpbGUqIHRpbGUgPSBzdGF0aWNfY2Fz
dDxFd2tfVGlsZSo+KGVpbmFfbWF0cml4c3BhcnNlX2NlbGxfZGF0YV9nZXQoY2VsbCkpOwogICAg
ICAgICBpZiAoIXRpbGUpIHsKQEAgLTU4NCwyMiArNTg0LDIyIEBAIHZvaWQgZXdrX3RpbGVfbWF0
cml4X2RiZyhjb25zdCBFd2tfVGlsZV9NYXRyaXgqIHRpbGVNYXRyaXgpCiAgICAgICAgICAgICAg
ICAgbGFzdF9lbXB0eSA9IEVJTkFfVFJVRTsKICAgICAgICAgICAgICAgICBwcmludGYoIkVtcHR5
OiIpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgcHJpbnRmKCIgWyVsdSwlbHVdIiwgY29s
LCByb3cpOworICAgICAgICAgICAgcHJpbnRmKCIgWyVsdSwlbHVdIiwgY29sdW1uLCByb3cpOwog
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKGxhc3RfZW1wdHkpIHsKICAgICAgICAg
ICAgICAgICBsYXN0X2VtcHR5ID0gRUlOQV9GQUxTRTsKICAgICAgICAgICAgICAgICBwcmludGYo
IlxuIik7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBwcmludGYoIiUzbHUsJTNsdSAlMTBw
OiIsIGNvbCwgcm93LCB0aWxlKTsKKyAgICAgICAgICAgIHByaW50ZigiJTNsdSwlM2x1ICUxMHA6
IiwgY29sdW1uLCByb3csIHRpbGUpOwogICAgICAgICAgICAgcHJpbnRmKCIgWyUzbHUsJTNsdSAr
ICVkeCVkIEAgJTAuM2ZdJWMiLCB0aWxlLT5jb2wsIHRpbGUtPnJvdywgdGlsZS0+d2lkdGgsIHRp
bGUtPmhlaWdodCwgdGlsZS0+em9vbSwgdGlsZS0+dmlzaWJsZSA/ICcqJyA6ICcgJyk7CiAgICAg
ICAgICAgICBwcmludGYoIlxuIik7CiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKGxhc3RfZW1w
dHkpCiAgICAgICAgIHByaW50ZigiXG4iKTsKLSAgICBlaW5hX2l0ZXJhdG9yX2ZyZWUoaXQpOwor
ICAgIGVpbmFfaXRlcmF0b3JfZnJlZShpdGVyYXRvcik7CiAKLSAgICBld2tfdGlsZV91bnVzZWRf
Y2FjaGVfZGJnKHRpbGVNYXRyaXgtPnR1Yyk7CisgICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2Ri
Zyh0aWxlTWF0cml4LT50aWxpZVVudXNlZENhY2hlKTsKIH0KIAogLyoqCkBAIC02MTUsNyArNjE1
LDcgQEAgdm9pZCBld2tfdGlsZV9tYXRyaXhfZnJlZXplKEV3a19UaWxlX01hdHJpeCogdGlsZU1h
dHJpeCkKIHsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0aWxlTWF0cml4KTsKICAg
ICBpZiAoIXRpbGVNYXRyaXgtPmZyb3plbikKLSAgICAgICAgZXdrX3RpbGVfdW51c2VkX2NhY2hl
X2ZyZWV6ZSh0aWxlTWF0cml4LT50dWMpOworICAgICAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVf
ZnJlZXplKHRpbGVNYXRyaXgtPnRpbGllVW51c2VkQ2FjaGUpOwogICAgIHRpbGVNYXRyaXgtPmZy
b3plbisrOwogfQogCkBAIC02MzUsNSArNjM1LDUgQEAgdm9pZCBld2tfdGlsZV9tYXRyaXhfdGhh
dyhFd2tfVGlsZV9NYXRyaXgqIHRpbGVNYXRyaXgpCiAKICAgICB0aWxlTWF0cml4LT5mcm96ZW4t
LTsKICAgICBpZiAoIXRpbGVNYXRyaXgtPmZyb3plbikKLSAgICAgICAgZXdrX3RpbGVfdW51c2Vk
X2NhY2hlX3RoYXcodGlsZU1hdHJpeC0+dHVjKTsKKyAgICAgICAgZXdrX3RpbGVfdW51c2VkX2Nh
Y2hlX3RoYXcodGlsZU1hdHJpeC0+dGlsaWVVbnVzZWRDYWNoZSk7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX21vZGVsLmNwcCBiL1NvdXJjZS9XZWJLaXQv
ZWZsL2V3ay9ld2tfdGlsZWRfbW9kZWwuY3BwCmluZGV4IDIwOWIwYzM5ZjE2NzhlYWIxMzgyOWI2
NThhNWMzN2I5YTA0MGFlM2UuLmRkNWYwZDVhODBjYTU0MzQ0MjA0MmRkZDlhNzZhYzYzYzBhMjQ3
NTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfbW9kZWwuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfbW9kZWwuY3BwCkBAIC0xNDks
NTkgKzE0OSw1OSBAQCB2b2lkIGV3a190aWxlX2FjY291bnRpbmdfZGJnKCkKIAogc3RhdGljIGlu
bGluZSB2b2lkIF9ld2tfdGlsZV9wYWludF9yZ2I4ODgoRXdrX1RpbGUqIHRpbGUsIHVpbnQ4X3Qg
cmVkLCB1aW50OF90IGdyZWVuLCB1aW50OF90IGJsdWUpCiB7Ci0gICAgdWludDMyX3QgYzEgPSAw
eGZmMDAwMDAwIHwgKCh1aW50MzJfdClyZWQgPDwgMTYpIHwgKCh1aW50MzJfdClncmVlbiA8PCA4
KSB8IGJsdWU7Ci0gICAgdWludDMyX3QgYzIgPSAoKHVpbnQ2NF90KWMxIDw8IDMyKSB8IGMxOwor
ICAgIHVpbnQzMl90IGNvbG9yMSA9IDB4ZmYwMDAwMDAgfCAoKHVpbnQzMl90KXJlZCA8PCAxNikg
fCAoKHVpbnQzMl90KWdyZWVuIDw8IDgpIHwgYmx1ZTsKKyAgICB1aW50MzJfdCBjb2xvcjIgPSAo
KHVpbnQ2NF90KWNvbG9yMSA8PCAzMikgfCBjb2xvcjE7CiAKICAgICB1aW50NjRfdCogZHN0NjQg
PSAodWludDY0X3QqKXRpbGUtPnBpeGVsczsKICAgICB1aW50NjRfdCogZHN0NjRfZW5kID0gZHN0
NjQgKyAoKHRpbGUtPmJ5dGVzIC8gOCkgJiB+Nyk7CiAgICAgZm9yICg7IGRzdDY0IDwgZHN0NjRf
ZW5kOyBkc3Q2NCArPSA4KSB7CiAgICAgICAgIC8qIFRPRE86IEFSTSBhZGQgcGxkIG9yIE5FT04g
aW5zdHJ1Y3Rpb25zICovCi0gICAgICAgIGRzdDY0WzBdID0gYzI7Ci0gICAgICAgIGRzdDY0WzFd
ID0gYzI7Ci0gICAgICAgIGRzdDY0WzJdID0gYzI7Ci0gICAgICAgIGRzdDY0WzNdID0gYzI7Ci0g
ICAgICAgIGRzdDY0WzRdID0gYzI7Ci0gICAgICAgIGRzdDY0WzVdID0gYzI7Ci0gICAgICAgIGRz
dDY0WzZdID0gYzI7Ci0gICAgICAgIGRzdDY0WzddID0gYzI7CisgICAgICAgIGRzdDY0WzBdID0g
Y29sb3IyOworICAgICAgICBkc3Q2NFsxXSA9IGNvbG9yMjsKKyAgICAgICAgZHN0NjRbMl0gPSBj
b2xvcjI7CisgICAgICAgIGRzdDY0WzNdID0gY29sb3IyOworICAgICAgICBkc3Q2NFs0XSA9IGNv
bG9yMjsKKyAgICAgICAgZHN0NjRbNV0gPSBjb2xvcjI7CisgICAgICAgIGRzdDY0WzZdID0gY29s
b3IyOworICAgICAgICBkc3Q2NFs3XSA9IGNvbG9yMjsKICAgICB9CiAKICAgICB1aW50MzJfdCog
ZHN0MzIgPSAodWludDMyX3QqKWRzdDY0X2VuZDsKICAgICB1aW50MzJfdCogZHN0MzJfZW5kID0g
KHVpbnQzMl90KikodGlsZS0+cGl4ZWxzICsgdGlsZS0+Ynl0ZXMpOwogICAgIGZvciAoOyBkc3Qz
MiA8IGRzdDMyX2VuZDsgZHN0MzIrKykKLSAgICAgICAgKmRzdDMyID0gYzE7CisgICAgICAgICpk
c3QzMiA9IGNvbG9yMTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZV9wYWludF9y
Z2I1NjUoRXdrX1RpbGUqIHRpbGUsIHVpbnQ4X3QgcmVkLCB1aW50OF90IGdyZWVuLCB1aW50OF90
IGJsdWUpCiB7Ci0gICAgdWludDE2X3QqIGRzdDE2LCAqIGRzdDE2X2VuZCwgYzE7Ci0gICAgdWlu
dDY0X3QqIGRzdDY0LCAqIGRzdDY0X2VuZCwgYzI7CisgICAgdWludDE2X3QqIGRzdDE2LCAqIGRz
dDE2X2VuZCwgY29sb3IxOworICAgIHVpbnQ2NF90KiBkc3Q2NCwgKiBkc3Q2NF9lbmQsIGNvbG9y
MjsKIAotICAgIGMxID0gKCgoKHJlZCA+PiAzKSAmIDB4MWYpIDw8IDExKSB8CisgICAgY29sb3Ix
ID0gKCgoKHJlZCA+PiAzKSAmIDB4MWYpIDw8IDExKSB8CiAgICAgICAgICAgKCgoZ3JlZW4gPj4g
MikgJiAweDNmKSA8PCA1KSB8CiAgICAgICAgICAgKChibHVlID4+IDMpICYgMHgxZikpOwogCi0g
ICAgYzIgPSAoKCh1aW50NjRfdCljMSA8PCA0OCkgfCAoKHVpbnQ2NF90KWMxIDw8IDMyKSB8Ci0g
ICAgICAgICAgKCh1aW50NjRfdCljMSA8PCAxNikgfCBjMSk7CisgICAgY29sb3IyID0gKCgodWlu
dDY0X3QpY29sb3IxIDw8IDQ4KSB8ICgodWludDY0X3QpY29sb3IxIDw8IDMyKSB8CisgICAgICAg
ICAgKCh1aW50NjRfdCljb2xvcjEgPDwgMTYpIHwgY29sb3IxKTsKIAogICAgIGRzdDY0ID0gKHVp
bnQ2NF90Kil0aWxlLT5waXhlbHM7CiAgICAgZHN0NjRfZW5kID0gZHN0NjQgKyAoKHRpbGUtPmJ5
dGVzIC8gOCkgJiB+Nyk7CiAgICAgZm9yICg7IGRzdDY0IDwgZHN0NjRfZW5kOyBkc3Q2NCArPSA4
KSB7CiAgICAgICAgIC8qIFRPRE86IEFSTSBhZGQgcGxkIG9yIE5FT04gaW5zdHJ1Y3Rpb25zICov
Ci0gICAgICAgIGRzdDY0WzBdID0gYzI7Ci0gICAgICAgIGRzdDY0WzFdID0gYzI7Ci0gICAgICAg
IGRzdDY0WzJdID0gYzI7Ci0gICAgICAgIGRzdDY0WzNdID0gYzI7Ci0gICAgICAgIGRzdDY0WzRd
ID0gYzI7Ci0gICAgICAgIGRzdDY0WzVdID0gYzI7Ci0gICAgICAgIGRzdDY0WzZdID0gYzI7Ci0g
ICAgICAgIGRzdDY0WzddID0gYzI7CisgICAgICAgIGRzdDY0WzBdID0gY29sb3IyOworICAgICAg
ICBkc3Q2NFsxXSA9IGNvbG9yMjsKKyAgICAgICAgZHN0NjRbMl0gPSBjb2xvcjI7CisgICAgICAg
IGRzdDY0WzNdID0gY29sb3IyOworICAgICAgICBkc3Q2NFs0XSA9IGNvbG9yMjsKKyAgICAgICAg
ZHN0NjRbNV0gPSBjb2xvcjI7CisgICAgICAgIGRzdDY0WzZdID0gY29sb3IyOworICAgICAgICBk
c3Q2NFs3XSA9IGNvbG9yMjsKICAgICB9CiAKICAgICBkc3QxNiA9ICh1aW50MTZfdCopZHN0MTZf
ZW5kOwogICAgIGRzdDE2X2VuZCA9ICh1aW50MTZfdCopKHRpbGUtPnBpeGVscyArIHRpbGUtPmJ5
dGVzKTsKICAgICBmb3IgKDsgZHN0MTYgPCBkc3QxNl9lbmQ7IGRzdDE2KyspCi0gICAgICAgICpk
c3QxNiA9IGMxOworICAgICAgICAqZHN0MTYgPSBjb2xvcjE7CiB9CiAKIHN0YXRpYyBpbmxpbmUg
dm9pZCBfZXdrX3RpbGVfcGFpbnQoRXdrX1RpbGUqIHRpbGUsIHVpbnQ4X3QgcmVkLCB1aW50OF90
IGdyZWVuLCB1aW50OF90IGJsdWUpCkBAIC0yMzEsMTcgKzIzMSwxNyBAQCBzdGF0aWMgaW5saW5l
IHZvaWQgX2V3a190aWxlX3BhaW50KEV3a19UaWxlKiB0aWxlLCB1aW50OF90IHJlZCwgdWludDhf
dCBncmVlbiwgdQogICovCiBFd2tfVGlsZSogZXdrX3RpbGVfbmV3KEV2YXMqIGV2YXMsIEV2YXNf
Q29vcmQgd2lkdGgsIEV2YXNfQ29vcmQgaGVpZ2h0LCBmbG9hdCB6b29tLCBFdmFzX0NvbG9yc3Bh
Y2UgY29sb3JTcGFjZSkKIHsKLSAgICBFdmFzX0Nvb3JkKiBlYzsKLSAgICBFdmFzX0NvbG9yc3Bh
Y2UqIGVjczsKLSAgICBmbG9hdCogZjsKLSAgICBzaXplX3QqIHM7CisgICAgRXZhc19Db29yZCog
ZXZhc0Nvb3JkOworICAgIEV2YXNfQ29sb3JzcGFjZSogZXZhc0NvbG9yU3BhY2U7CisgICAgZmxv
YXQqIHRpbGVab29tOworICAgIHNpemVfdCogdGlsZVNpemU7CiAgICAgRXdrX1RpbGUqIHRpbGU7
CiAgICAgdW5zaWduZWQgaW50IGFyZWE7CiAgICAgc2l6ZV90IGJ5dGVzOwogICAgIGNhaXJvX2Zv
cm1hdF90IGZvcm1hdDsKICAgICBjYWlyb19zdGF0dXNfdCBzdGF0dXM7CiAgICAgaW50IHN0cmlk
ZTsKLSAgICBFY29yZV9FdmFzKiBlZTsKKyAgICBFY29yZV9FdmFzKiBlY29yZUV2YXM7CiAgICAg
Y29uc3QgY2hhciogZW5naW5lOwogCiAgICAgYXJlYSA9IHdpZHRoICogaGVpZ2h0OwpAQCAtMjY3
LDggKzI2Nyw4IEBAIEV3a19UaWxlKiBld2tfdGlsZV9uZXcoRXZhcyogZXZhcywgRXZhc19Db29y
ZCB3aWR0aCwgRXZhc19Db29yZCBoZWlnaHQsIGZsb2F0IHpvCiAKICAgICB0aWxlLT5pbWFnZSA9
IGV2YXNfb2JqZWN0X2ltYWdlX2FkZChldmFzKTsKIAotICAgIGVlID0gZWNvcmVfZXZhc19lY29y
ZV9ldmFzX2dldChldmFzKTsKLSAgICBlbmdpbmUgPSBlY29yZV9ldmFzX2VuZ2luZV9uYW1lX2dl
dChlZSk7CisgICAgZWNvcmVFdmFzID0gZWNvcmVfZXZhc19lY29yZV9ldmFzX2dldChldmFzKTsK
KyAgICBlbmdpbmUgPSBlY29yZV9ldmFzX2VuZ2luZV9uYW1lX2dldChlY29yZUV2YXMpOwogICAg
IGlmIChlbmdpbmUgJiYgIXN0cmNtcChlbmdpbmUsICJvcGVuZ2xfeDExIikpCiAgICAgICAgIGV2
YXNfb2JqZWN0X2ltYWdlX2NvbnRlbnRfaGludF9zZXQodGlsZS0+aW1hZ2UsIEVWQVNfSU1BR0Vf
Q09OVEVOVF9ISU5UX0RZTkFNSUMpOwogCkBAIC0yNzksMjAgKzI3OSwyMCBAQCBFd2tfVGlsZSog
ZXdrX3RpbGVfbmV3KEV2YXMqIGV2YXMsIEV2YXNfQ29vcmQgd2lkdGgsIEV2YXNfQ29vcmQgaGVp
Z2h0LCBmbG9hdCB6bwogICAgIHRpbGUtPnN0YXRzLmFyZWEgPSBhcmVhOwogCiAgICAgLyogdWds
eSwgYnV0IGxldCdzIGF2b2lkIGF0IGFsbCBjb3N0cyBoYXZpbmcgdXNlcnMgdG8gbW9kaWZ5IHRo
b3NlICovCi0gICAgZWMgPSAoRXZhc19Db29yZCopJnRpbGUtPndpZHRoOwotICAgICplYyA9IHdp
ZHRoOworICAgIGV2YXNDb29yZCA9IChFdmFzX0Nvb3JkKikmdGlsZS0+d2lkdGg7CisgICAgKmV2
YXNDb29yZCA9IHdpZHRoOwogCi0gICAgZWMgPSAoRXZhc19Db29yZCopJnRpbGUtPmhlaWdodDsK
LSAgICAqZWMgPSBoZWlnaHQ7CisgICAgZXZhc0Nvb3JkID0gKEV2YXNfQ29vcmQqKSZ0aWxlLT5o
ZWlnaHQ7CisgICAgKmV2YXNDb29yZCA9IGhlaWdodDsKIAotICAgIGVjcyA9IChFdmFzX0NvbG9y
c3BhY2UqKSZ0aWxlLT5jc3BhY2U7Ci0gICAgKmVjcyA9IGNvbG9yU3BhY2U7CisgICAgZXZhc0Nv
bG9yU3BhY2UgPSAoRXZhc19Db2xvcnNwYWNlKikmdGlsZS0+Y3NwYWNlOworICAgICpldmFzQ29s
b3JTcGFjZSA9IGNvbG9yU3BhY2U7CiAKLSAgICBmID0gKGZsb2F0KikmdGlsZS0+em9vbTsKLSAg
ICAqZiA9IHpvb207CisgICAgdGlsZVpvb20gPSAoZmxvYXQqKSZ0aWxlLT56b29tOworICAgICp0
aWxlWm9vbSA9IHpvb207CiAKLSAgICBzID0gKHNpemVfdCopJnRpbGUtPmJ5dGVzOwotICAgICpz
ID0gYnl0ZXM7CisgICAgdGlsZVNpemUgPSAoc2l6ZV90KikmdGlsZS0+Ynl0ZXM7CisgICAgKnRp
bGVTaXplID0gYnl0ZXM7CiAKICAgICBldmFzX29iamVjdF9pbWFnZV9zaXplX3NldCh0aWxlLT5p
bWFnZSwgdGlsZS0+d2lkdGgsIHRpbGUtPmhlaWdodCk7CiAgICAgZXZhc19vYmplY3RfaW1hZ2Vf
Y29sb3JzcGFjZV9zZXQodGlsZS0+aW1hZ2UsIHRpbGUtPmNzcGFjZSk7CkBAIC00ODAsNyArNDgw
LDcgQEAgc3RydWN0IF9Fd2tfVGlsZV9VbnVzZWRfQ2FjaGVfRW50cnkgewogICAgIEV3a19UaWxl
KiB0aWxlOwogICAgIGludCB3ZWlnaHQ7CiAgICAgc3RydWN0IHsKLSAgICAgICAgdm9pZCAoKmNi
KSh2b2lkKiBkYXRhLCBFd2tfVGlsZSogdGlsZSk7CisgICAgICAgIHZvaWQgKCpjYWxsYmFjayko
dm9pZCogZGF0YSwgRXdrX1RpbGUqIHRpbGUpOwogICAgICAgICB2b2lkKiBkYXRhOwogICAgIH0g
dGlsZV9mcmVlOwogfTsKQEAgLTQ5Niw3ICs0OTYsNyBAQCBzdHJ1Y3QgX0V3a19UaWxlX1VudXNl
ZF9DYWNoZSB7CiAgICAgICAgIHNpemVfdCB1c2VkOyAvKio8IGluIGJ5dGVzLCBtYXliZSBtb3Jl
IHRoYW4gbWF4LiAqLwogICAgIH0gbWVtb3J5OwogICAgIHN0cnVjdCB7Ci0gICAgICAgIEV2YXNf
Q29vcmQgeCwgeSwgdywgaDsKKyAgICAgICAgRXZhc19Db29yZCB4LCB5LCB3aWR0aCwgaGVpZ2h0
OwogICAgICAgICBmbG9hdCB6b29tOwogICAgICAgICBFaW5hX0Jvb2wgbG9ja2VkOwogICAgIH0g
bG9ja2VkOwpAQCAtNTQwLDggKzU0MCw4IEBAIHZvaWQgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2xv
Y2tfYXJlYShFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHRpbGVVbnVzZWRDYWNoZSwgRXZhCiAgICAg
dGlsZVVudXNlZENhY2hlLT5sb2NrZWQubG9ja2VkID0gRUlOQV9UUlVFOwogICAgIHRpbGVVbnVz
ZWRDYWNoZS0+bG9ja2VkLnggPSB4OwogICAgIHRpbGVVbnVzZWRDYWNoZS0+bG9ja2VkLnkgPSB5
OwotICAgIHRpbGVVbnVzZWRDYWNoZS0+bG9ja2VkLncgPSB3aWR0aDsKLSAgICB0aWxlVW51c2Vk
Q2FjaGUtPmxvY2tlZC5oID0gaGVpZ2h0OworICAgIHRpbGVVbnVzZWRDYWNoZS0+bG9ja2VkLndp
ZHRoID0gd2lkdGg7CisgICAgdGlsZVVudXNlZENhY2hlLT5sb2NrZWQuaGVpZ2h0ID0gaGVpZ2h0
OwogICAgIHRpbGVVbnVzZWRDYWNoZS0+bG9ja2VkLnpvb20gPSB6b29tOwogfQogCkBAIC01OTQs
NyArNTk0LDcgQEAgdm9pZCBld2tfdGlsZV91bnVzZWRfY2FjaGVfY2xlYXIoRXdrX1RpbGVfVW51
c2VkX0NhY2hlKiB0aWxlVW51c2VkQ2FjaGUpCiAgICAgdm9pZCogaXRlbTsKICAgICBFSU5BX0xJ
U1RfRlJFRSh0aWxlVW51c2VkQ2FjaGUtPmVudHJpZXMubGlzdCwgaXRlbSkgewogICAgICAgICBF
d2tfVGlsZV9VbnVzZWRfQ2FjaGVfRW50cnkqIGl0ciA9IHN0YXRpY19jYXN0PEV3a19UaWxlX1Vu
dXNlZF9DYWNoZV9FbnRyeSo+KGl0ZW0pOwotICAgICAgICBpdHItPnRpbGVfZnJlZS5jYihpdHIt
PnRpbGVfZnJlZS5kYXRhLCBpdHItPnRpbGUpOworICAgICAgICBpdHItPnRpbGVfZnJlZS5jYWxs
YmFjayhpdHItPnRpbGVfZnJlZS5kYXRhLCBpdHItPnRpbGUpOwogICAgICAgICBmcmVlKGl0cik7
CiAgICAgfQogCkBAIC02NTAsNyArNjUwLDcgQEAgc2l6ZV90IGV3a190aWxlX3VudXNlZF9jYWNo
ZV91c2VkX2dldChjb25zdCBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHRpbGVVbnVzZWRDYWMKIAog
c2l6ZV90IGV3a190aWxlX3VudXNlZF9jYWNoZV9mbHVzaChFd2tfVGlsZV9VbnVzZWRfQ2FjaGUq
IHRpbGVVbnVzZWRDYWNoZSwgc2l6ZV90IGJ5dGVzKQogewotICAgIEVpbmFfTGlzdCogbCwgKiBs
X25leHQ7CisgICAgRWluYV9MaXN0KiBsaXN0LCAqIGxpc3ROZXh0OwogICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOX1ZBTCh0aWxlVW51c2VkQ2FjaGUsIDApOwogICAgIHNpemVfdCBkb25l
OwogICAgIHVuc2lnbmVkIGludCBjb3VudDsKQEAgLTY2OCw3ICs2NjgsNyBAQCBzaXplX3QgZXdr
X3RpbGVfdW51c2VkX2NhY2hlX2ZsdXNoKEV3a19UaWxlX1VudXNlZF9DYWNoZSogdGlsZVVudXNl
ZENhY2hlLCBzaXplXwogICAgIHZvaWQqIGl0ZW07CiAgICAgZG9uZSA9IDA7CiAgICAgY291bnQg
PSAwOwotICAgIEVJTkFfTElTVF9GT1JFQUNIX1NBRkUodGlsZVVudXNlZENhY2hlLT5lbnRyaWVz
Lmxpc3QsIGwsIGxfbmV4dCwgaXRlbSkgeworICAgIEVJTkFfTElTVF9GT1JFQUNIX1NBRkUodGls
ZVVudXNlZENhY2hlLT5lbnRyaWVzLmxpc3QsIGxpc3QsIGxpc3ROZXh0LCBpdGVtKSB7CiAgICAg
ICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZV9FbnRyeSogaXRyID0gc3RhdGljX2Nhc3Q8RXdrX1Rp
bGVfVW51c2VkX0NhY2hlX0VudHJ5Kj4oaXRlbSk7CiAgICAgICAgIEV3a19UaWxlKiB0aWxlID0g
aXRyLT50aWxlOwogICAgICAgICBpZiAoZG9uZSA+IGJ5dGVzKQpAQCAtNjc2LDE0ICs2NzYsMTQg
QEAgc2l6ZV90IGV3a190aWxlX3VudXNlZF9jYWNoZV9mbHVzaChFd2tfVGlsZV9VbnVzZWRfQ2Fj
aGUqIHRpbGVVbnVzZWRDYWNoZSwgc2l6ZV8KICAgICAgICAgaWYgKHRpbGVVbnVzZWRDYWNoZS0+
bG9ja2VkLmxvY2tlZAogICAgICAgICAgICAgJiYgdGlsZS0+eCArIHRpbGUtPndpZHRoID4gdGls
ZVVudXNlZENhY2hlLT5sb2NrZWQueAogICAgICAgICAgICAgJiYgdGlsZS0+eSArIHRpbGUtPmhl
aWdodCA+IHRpbGVVbnVzZWRDYWNoZS0+bG9ja2VkLnkKLSAgICAgICAgICAgICYmIHRpbGUtPngg
PCB0aWxlVW51c2VkQ2FjaGUtPmxvY2tlZC54ICsgdGlsZVVudXNlZENhY2hlLT5sb2NrZWQudwot
ICAgICAgICAgICAgJiYgdGlsZS0+eSA8IHRpbGVVbnVzZWRDYWNoZS0+bG9ja2VkLnkgKyB0aWxl
VW51c2VkQ2FjaGUtPmxvY2tlZC5oCisgICAgICAgICAgICAmJiB0aWxlLT54IDwgdGlsZVVudXNl
ZENhY2hlLT5sb2NrZWQueCArIHRpbGVVbnVzZWRDYWNoZS0+bG9ja2VkLndpZHRoCisgICAgICAg
ICAgICAmJiB0aWxlLT55IDwgdGlsZVVudXNlZENhY2hlLT5sb2NrZWQueSArIHRpbGVVbnVzZWRD
YWNoZS0+bG9ja2VkLmhlaWdodAogICAgICAgICAgICAgJiYgdGlsZS0+em9vbSA9PSB0aWxlVW51
c2VkQ2FjaGUtPmxvY2tlZC56b29tKSB7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
fQogICAgICAgICBkb25lICs9IHNpemVvZihFd2tfVGlsZSkgKyBpdHItPnRpbGUtPmJ5dGVzOwot
ICAgICAgICBpdHItPnRpbGVfZnJlZS5jYihpdHItPnRpbGVfZnJlZS5kYXRhLCBpdHItPnRpbGUp
OwotICAgICAgICB0aWxlVW51c2VkQ2FjaGUtPmVudHJpZXMubGlzdCA9IGVpbmFfbGlzdF9yZW1v
dmVfbGlzdCh0aWxlVW51c2VkQ2FjaGUtPmVudHJpZXMubGlzdCwgbCk7CisgICAgICAgIGl0ci0+
dGlsZV9mcmVlLmNhbGxiYWNrKGl0ci0+dGlsZV9mcmVlLmRhdGEsIGl0ci0+dGlsZSk7CisgICAg
ICAgIHRpbGVVbnVzZWRDYWNoZS0+ZW50cmllcy5saXN0ID0gZWluYV9saXN0X3JlbW92ZV9saXN0
KHRpbGVVbnVzZWRDYWNoZS0+ZW50cmllcy5saXN0LCBsaXN0KTsKICAgICAgICAgZnJlZShpdHIp
OwogICAgICAgICBjb3VudCsrOwogICAgIH0KQEAgLTc0MywzMSArNzQzLDMxIEBAIHZvaWQgZXdr
X3RpbGVfdW51c2VkX2NhY2hlX3RoYXcoRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0aWxlVW51c2Vk
Q2FjaGUpCiAgKiBld2tfdGlsZV91bnVzZWRfY2FjaGVfdGlsZV9wdXQoKS4KICAqCiAgKiBAcGFy
YW0gdGlsZVVudXNlZENhY2hlIGNhY2hlIG9mIHVudXNlZCB0aWxlcwotICogQHBhcmFtIHQgdGhl
IHRpbGUgdG8gYmUgcmVtb3ZlZCBmcm9tIEV3a19UaWxlX1VudXNlZF9DYWNoZS4KKyAqIEBwYXJh
bSB0aWxlIHRoZSB0aWxlIHRvIGJlIHJlbW92ZWQgZnJvbSBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUu
CiAgKgogICogQHJldHVybiAjRUlOQV9UUlVFIG9uIHN1Y2Nlc3MsICNFSU5BX0ZBTFNFIG90aGVy
d2lzZS4KICAqLwogRWluYV9Cb29sIGV3a190aWxlX3VudXNlZF9jYWNoZV90aWxlX2dldChFd2tf
VGlsZV9VbnVzZWRfQ2FjaGUqIHRpbGVVbnVzZWRDYWNoZSwgRXdrX1RpbGUqIHRpbGUpCiB7Ci0g
ICAgRWluYV9MaXN0KiBlLCAqIGw7CisgICAgRWluYV9MaXN0KiBmb3VuZEVudHJ5LCAqaXRlcmF0
ZUVudHJ5OwogCiAgICAgdm9pZCogaXRlbTsKLSAgICBlID0gMDsKLSAgICBFSU5BX0xJU1RfRk9S
RUFDSCh0aWxlVW51c2VkQ2FjaGUtPmVudHJpZXMubGlzdCwgbCwgaXRlbSkgeworICAgIGZvdW5k
RW50cnkgPSAwOworICAgIEVJTkFfTElTVF9GT1JFQUNIKHRpbGVVbnVzZWRDYWNoZS0+ZW50cmll
cy5saXN0LCBpdGVyYXRlRW50cnksIGl0ZW0pIHsKICAgICAgICAgRXdrX1RpbGVfVW51c2VkX0Nh
Y2hlX0VudHJ5KiBlbnRyeSA9IHN0YXRpY19jYXN0PEV3a19UaWxlX1VudXNlZF9DYWNoZV9FbnRy
eSo+KGl0ZW0pOwogICAgICAgICBpZiAoZW50cnktPnRpbGUgPT0gdGlsZSkgewotICAgICAgICAg
ICAgZSA9IGw7CisgICAgICAgICAgICBmb3VuZEVudHJ5ID0gaXRlcmF0ZUVudHJ5OwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9Ci0gICAgaWYgKCFlKSB7CisgICAgaWYgKCFm
b3VuZEVudHJ5KSB7CiAgICAgICAgIEVSUigidGlsZSAlcCBub3QgZm91bmQgaW4gY2FjaGUgJXAi
LCB0aWxlLCB0aWxlVW51c2VkQ2FjaGUpOwogICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKICAg
ICB9CiAKICAgICB0aWxlVW51c2VkQ2FjaGUtPmVudHJpZXMuY291bnQtLTsKICAgICB0aWxlVW51
c2VkQ2FjaGUtPm1lbW9yeS51c2VkIC09IHNpemVvZihFd2tfVGlsZSkgKyB0aWxlLT5ieXRlczsK
LSAgICB0aWxlVW51c2VkQ2FjaGUtPmVudHJpZXMubGlzdCA9IGVpbmFfbGlzdF9yZW1vdmVfbGlz
dCh0aWxlVW51c2VkQ2FjaGUtPmVudHJpZXMubGlzdCwgZSk7CisgICAgdGlsZVVudXNlZENhY2hl
LT5lbnRyaWVzLmxpc3QgPSBlaW5hX2xpc3RfcmVtb3ZlX2xpc3QodGlsZVVudXNlZENhY2hlLT5l
bnRyaWVzLmxpc3QsIGZvdW5kRW50cnkpOwogICAgIGZyZWUoaXRlbSk7CiAKICAgICByZXR1cm4g
RUlOQV9UUlVFOwpAQCAtNzk1LDI5ICs3OTUsMjkgQEAgRWluYV9Cb29sIGV3a190aWxlX3VudXNl
ZF9jYWNoZV90aWxlX2dldChFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHRpbGVVbnVzZWRDYWNoZSwK
ICAqCiAgKiBAc2VlIGV3a190aWxlX3VudXNlZF9jYWNoZV9hdXRvX2ZsdXNoKCkKICAqLwotRWlu
YV9Cb29sIGV3a190aWxlX3VudXNlZF9jYWNoZV90aWxlX3B1dChFd2tfVGlsZV9VbnVzZWRfQ2Fj
aGUqIHRpbGVVbnVzZWRDYWNoZSwgRXdrX1RpbGUqIHRpbGUsIHZvaWQgKCogdGlsZV9mcmVlX2Ni
KSh2b2lkKiBkYXRhLCBFd2tfVGlsZSogdGlsZSksIGNvbnN0IHZvaWQqIGRhdGEpCitFaW5hX0Jv
b2wgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3RpbGVfcHV0KEV3a19UaWxlX1VudXNlZF9DYWNoZSog
dGlsZVVudXNlZENhY2hlLCBFd2tfVGlsZSogdGlsZSwgdm9pZCAoKiB0aWxlRnJlZUNiKSh2b2lk
KiBkYXRhLCBFd2tfVGlsZSogdGlsZSksIGNvbnN0IHZvaWQqIGRhdGEpCiB7Ci0gICAgRXdrX1Rp
bGVfVW51c2VkX0NhY2hlX0VudHJ5KiB1Y2U7CisgICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlX0Vu
dHJ5KiB1bnVzZWRDYWNoZUVudHJ5OwogCiAgICAgaWYgKHRpbGUtPnZpc2libGUpIHsKICAgICAg
ICAgRVJSKCJ0aWxlPSVwIGlzIG5vdCB1bnVzZWQgKHZpc2libGU9JWQpIiwgdGlsZSwgdGlsZS0+
dmlzaWJsZSk7CiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwogICAgIH0KIAotICAgIHVjZSA9
IHN0YXRpY19jYXN0PEV3a19UaWxlX1VudXNlZF9DYWNoZV9FbnRyeSo+KG1hbGxvYyhzaXplb2Yo
RXdrX1RpbGVfVW51c2VkX0NhY2hlX0VudHJ5KSkpOwotICAgIGlmICghdWNlKQorICAgIHVudXNl
ZENhY2hlRW50cnkgPSBzdGF0aWNfY2FzdDxFd2tfVGlsZV9VbnVzZWRfQ2FjaGVfRW50cnkqPiht
YWxsb2Moc2l6ZW9mKEV3a19UaWxlX1VudXNlZF9DYWNoZV9FbnRyeSkpKTsKKyAgICBpZiAoIXVu
dXNlZENhY2hlRW50cnkpCiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwogCi0gICAgdGlsZVVu
dXNlZENhY2hlLT5lbnRyaWVzLmxpc3QgPSBlaW5hX2xpc3RfYXBwZW5kKHRpbGVVbnVzZWRDYWNo
ZS0+ZW50cmllcy5saXN0LCB1Y2UpOworICAgIHRpbGVVbnVzZWRDYWNoZS0+ZW50cmllcy5saXN0
ID0gZWluYV9saXN0X2FwcGVuZCh0aWxlVW51c2VkQ2FjaGUtPmVudHJpZXMubGlzdCwgdW51c2Vk
Q2FjaGVFbnRyeSk7CiAgICAgaWYgKGVpbmFfZXJyb3JfZ2V0KCkpIHsKICAgICAgICAgRVJSKCJM
aXN0IGFsbG9jYXRpb24gZmFpbGVkIik7CiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwogICAg
IH0KIAotICAgIHVjZS0+dGlsZSA9IHRpbGU7Ci0gICAgdWNlLT53ZWlnaHQgPSAwOyAvKiBjYWxj
dWxhdGVkIGp1c3QgYmVmb3JlIHNvcnQgKi8KLSAgICB1Y2UtPnRpbGVfZnJlZS5jYiA9IHRpbGVf
ZnJlZV9jYjsKLSAgICB1Y2UtPnRpbGVfZnJlZS5kYXRhID0gKHZvaWQqKWRhdGE7CisgICAgdW51
c2VkQ2FjaGVFbnRyeS0+dGlsZSA9IHRpbGU7CisgICAgdW51c2VkQ2FjaGVFbnRyeS0+d2VpZ2h0
ID0gMDsgLyogY2FsY3VsYXRlZCBqdXN0IGJlZm9yZSBzb3J0ICovCisgICAgdW51c2VkQ2FjaGVF
bnRyeS0+dGlsZV9mcmVlLmNhbGxiYWNrID0gdGlsZUZyZWVDYjsKKyAgICB1bnVzZWRDYWNoZUVu
dHJ5LT50aWxlX2ZyZWUuZGF0YSA9ICh2b2lkKilkYXRhOwogCiAgICAgdGlsZVVudXNlZENhY2hl
LT5lbnRyaWVzLmNvdW50Kys7CiAgICAgdGlsZVVudXNlZENhY2hlLT5tZW1vcnkudXNlZCArPSBz
aXplb2YoRXdrX1RpbGUpICsgdGlsZS0+Ynl0ZXM7CkBAIC04MjgsMTMgKzgyOCwxMyBAQCBFaW5h
X0Jvb2wgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3RpbGVfcHV0KEV3a19UaWxlX1VudXNlZF9DYWNo
ZSogdGlsZVVudXNlZENhY2hlLAogdm9pZCBld2tfdGlsZV91bnVzZWRfY2FjaGVfZGJnKGNvbnN0
IEV3a19UaWxlX1VudXNlZF9DYWNoZSogdGlsZVVudXNlZENhY2hlKQogewogICAgIHZvaWQqIGl0
ZW07Ci0gICAgRWluYV9MaXN0KiBsOworICAgIEVpbmFfTGlzdCogbGlzdDsKICAgICBpbnQgY291
bnQgPSAwOwogICAgIHByaW50ZigiQ2FjaGUgb2YgdW51c2VkIHRpbGVzOiBlbnRyaWVzOiAlenUv
JXp1LCBtZW1vcnk6ICV6dS8lenVcbiIsCiAgICAgICAgICAgIHRpbGVVbnVzZWRDYWNoZS0+ZW50
cmllcy5jb3VudCwgdGlsZVVudXNlZENhY2hlLT5lbnRyaWVzLmFsbG9jYXRlZCwKICAgICAgICAg
ICAgdGlsZVVudXNlZENhY2hlLT5tZW1vcnkudXNlZCwgdGlsZVVudXNlZENhY2hlLT5tZW1vcnku
bWF4KTsKIAotICAgIEVJTkFfTElTVF9GT1JFQUNIKHRpbGVVbnVzZWRDYWNoZS0+ZW50cmllcy5s
aXN0LCBsLCBpdGVtKSB7CisgICAgRUlOQV9MSVNUX0ZPUkVBQ0godGlsZVVudXNlZENhY2hlLT5l
bnRyaWVzLmxpc3QsIGxpc3QsIGl0ZW0pIHsKICAgICAgICAgY29uc3QgRXdrX1RpbGUqIHRpbGUg
PSBzdGF0aWNfY2FzdDxFd2tfVGlsZV9VbnVzZWRfQ2FjaGVfRW50cnkqPihpdGVtKS0+dGlsZTsK
ICAgICAgICAgcHJpbnRmKCIgWyUzbHUsJTNsdSArICVkeCVkIEAgJTAuM2ZdJWMiLAogICAgICAg
ICAgICAgICAgdGlsZS0+Y29sLCB0aWxlLT5yb3csIHRpbGUtPndpZHRoLCB0aWxlLT5oZWlnaHQs
IHRpbGUtPnpvb20sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXcu
Y3BwIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a192aWV3LmNwcAppbmRleCBiOTRmMDY5YmM2
NjM1OGM5OWRmZWVhYTdjYmZmMjhhYTE2YTVhMzhhLi44NGU0OTUxNDhjODM3ZGE3YWI3NmZlODE4
YmI1YjE5OWUxYzM0YWYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3Zp
ZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5jcHAKQEAgLTkwLDE3
ICs5MCwxNyBAQCBzdGF0aWMgY29uc3Qgc2l6ZV90IEVXS19WSUVXX1NDUk9MTFNfU0laRV9NQVhf
RlJFRSA9IDMyOwogICovCiBzdHJ1Y3QgX0V3a19WaWV3X1ByaXZhdGVfRGF0YSB7CiAgICAgV2Vi
Q29yZTo6UGFnZSogcGFnZTsKLSAgICBXZWJDb3JlOjpTZXR0aW5ncyogcGFnZV9zZXR0aW5nczsK
LSAgICBXZWJDb3JlOjpGcmFtZSogbWFpbl9mcmFtZTsKLSAgICBXZWJDb3JlOjpWaWV3cG9ydEFy
Z3VtZW50cyB2aWV3cG9ydF9hcmd1bWVudHM7CisgICAgV2ViQ29yZTo6U2V0dGluZ3MqIHBhZ2VT
ZXR0aW5nczsKKyAgICBXZWJDb3JlOjpGcmFtZSogbWFpbkZyYW1lOworICAgIFdlYkNvcmU6OlZp
ZXdwb3J0QXJndW1lbnRzIHZpZXdwb3J0QXJndW1lbnRzOwogICAgIEV3a19IaXN0b3J5KiBoaXN0
b3J5OwogICAgIHN0cnVjdCB7CiAgICAgICAgIHZvaWQqIGNvbnRleHQ7CiAgICAgICAgIEV3a19W
aWV3X1Jlc291cmNlX0hhbmRsZXJfQ2IgZnVuY3Rpb247Ci0gICAgfSBjdXN0b21fcmVzb3VyY2Vf
aGFuZGxlcjsKKyAgICB9IGN1c3RvbVJlc291cmNlSGFuZGxlcjsKICAgICBzdHJ1Y3QgewogICAg
ICAgICBFd2tfTWVudSBtZW51OwotICAgICAgICBXZWJDb3JlOjpQb3B1cE1lbnVDbGllbnQqIG1l
bnVfY2xpZW50OworICAgICAgICBXZWJDb3JlOjpQb3B1cE1lbnVDbGllbnQqIG1lbnVDbGllbnQ7
CiAgICAgfSBwb3B1cDsKICAgICBzdHJ1Y3QgewogICAgICAgICBFaW5hX1JlY3RhbmdsZSogYXJy
YXk7CkBAIC0xMTQsNTAgKzExNCw1MCBAQCBzdHJ1Y3QgX0V3a19WaWV3X1ByaXZhdGVfRGF0YSB7
CiAgICAgfSBzY3JvbGxzOwogICAgIHVuc2lnbmVkIGludCBpbWg7IC8qKjwgaW5wdXQgbWV0aG9k
IGhpbnRzICovCiAgICAgc3RydWN0IHsKLSAgICAgICAgRWluYV9Cb29sIHZpZXdfY2xlYXJlZCA6
IDE7Ci0gICAgICAgIEVpbmFfQm9vbCBuZWVkX3RvdWNoX2V2ZW50cyA6IDE7CisgICAgICAgIEVp
bmFfQm9vbCB2aWV3Q2xlYXJlZCA6IDE7CisgICAgICAgIEVpbmFfQm9vbCBuZWVkVG91Y2hFdmVu
dHMgOiAxOwogICAgIH0gZmxhZ3M7CiAgICAgc3RydWN0IHsKLSAgICAgICAgY29uc3QgY2hhciog
dXNlcl9hZ2VudDsKLSAgICAgICAgY29uc3QgY2hhciogdXNlcl9zdHlsZXNoZWV0OwotICAgICAg
ICBjb25zdCBjaGFyKiBlbmNvZGluZ19kZWZhdWx0OwotICAgICAgICBjb25zdCBjaGFyKiBlbmNv
ZGluZ19jdXN0b207CisgICAgICAgIGNvbnN0IGNoYXIqIHVzZXJBZ2VudDsKKyAgICAgICAgY29u
c3QgY2hhciogdXNlclN0eWxlc2hlZXQ7CisgICAgICAgIGNvbnN0IGNoYXIqIGVuY29kaW5nRGVm
YXVsdDsKKyAgICAgICAgY29uc3QgY2hhciogZW5jb2RpbmdDdXN0b207CiAgICAgICAgIGNvbnN0
IGNoYXIqIHRoZW1lOwotICAgICAgICBjb25zdCBjaGFyKiBsb2NhbF9zdG9yYWdlX2RhdGFiYXNl
X3BhdGg7Ci0gICAgICAgIGludCBmb250X21pbmltdW1fc2l6ZTsKLSAgICAgICAgaW50IGZvbnRf
bWluaW11bV9sb2dpY2FsX3NpemU7Ci0gICAgICAgIGludCBmb250X2RlZmF1bHRfc2l6ZTsKLSAg
ICAgICAgaW50IGZvbnRfbW9ub3NwYWNlX3NpemU7Ci0gICAgICAgIGNvbnN0IGNoYXIqIGZvbnRf
c3RhbmRhcmQ7Ci0gICAgICAgIGNvbnN0IGNoYXIqIGZvbnRfY3Vyc2l2ZTsKLSAgICAgICAgY29u
c3QgY2hhciogZm9udF9tb25vc3BhY2U7Ci0gICAgICAgIGNvbnN0IGNoYXIqIGZvbnRfZmFudGFz
eTsKLSAgICAgICAgY29uc3QgY2hhciogZm9udF9zZXJpZjsKLSAgICAgICAgY29uc3QgY2hhciog
Zm9udF9zYW5zX3NlcmlmOwotICAgICAgICBFaW5hX0Jvb2wgYXV0b19sb2FkX2ltYWdlcyA6IDE7
Ci0gICAgICAgIEVpbmFfQm9vbCBhdXRvX3Nocmlua19pbWFnZXMgOiAxOwotICAgICAgICBFaW5h
X0Jvb2wgZW5hYmxlX2F1dG9fcmVzaXplX3dpbmRvdyA6IDE7Ci0gICAgICAgIEVpbmFfQm9vbCBl
bmFibGVfZGV2ZWxvcGVyX2V4dHJhcyA6IDE7Ci0gICAgICAgIEVpbmFfQm9vbCBlbmFibGVfc2Ny
aXB0cyA6IDE7Ci0gICAgICAgIEVpbmFfQm9vbCBlbmFibGVfcGx1Z2lucyA6IDE7Ci0gICAgICAg
IEVpbmFfQm9vbCBlbmFibGVfZnJhbWVfZmxhdHRlbmluZyA6IDE7Ci0gICAgICAgIEVpbmFfQm9v
bCBlbmNvZGluZ19kZXRlY3RvciA6IDE7Ci0gICAgICAgIEVpbmFfQm9vbCBzY3JpcHRzX3dpbmRv
d19vcGVuIDogMTsKLSAgICAgICAgRWluYV9Cb29sIHNjcmlwdHNfY2FuX2Nsb3NlX3dpbmRvd3Mg
OiAxOwotICAgICAgICBFaW5hX0Jvb2wgcmVzaXphYmxlX3RleHRhcmVhcyA6IDE7Ci0gICAgICAg
IEVpbmFfQm9vbCBwcml2YXRlX2Jyb3dzaW5nIDogMTsKLSAgICAgICAgRWluYV9Cb29sIGNhcmV0
X2Jyb3dzaW5nIDogMTsKLSAgICAgICAgRWluYV9Cb29sIHNwYXRpYWxfbmF2aWdhdGlvbiA6IDE7
Ci0gICAgICAgIEVpbmFfQm9vbCBsb2NhbF9zdG9yYWdlIDogMTsKLSAgICAgICAgRWluYV9Cb29s
IG9mZmxpbmVfYXBwX2NhY2hlIDogMTsKLSAgICAgICAgRWluYV9Cb29sIHBhZ2VfY2FjaGUgOiAx
OworICAgICAgICBjb25zdCBjaGFyKiBsb2NhbFN0b3JhZ2VEYXRhYmFzZVBhdGg7CisgICAgICAg
IGludCBmb250TWluaW11bVNpemU7CisgICAgICAgIGludCBmb250TWluaW11bUxvZ2ljYWxTaXpl
OworICAgICAgICBpbnQgZm9udERlZmF1bHRTaXplOworICAgICAgICBpbnQgZm9udE1vbm9zcGFj
ZVNpemU7CisgICAgICAgIGNvbnN0IGNoYXIqIGZvbnRTdGFuZGFyZDsKKyAgICAgICAgY29uc3Qg
Y2hhciogZm9udEN1cnNpdmU7CisgICAgICAgIGNvbnN0IGNoYXIqIGZvbnRNb25vc3BhY2U7Cisg
ICAgICAgIGNvbnN0IGNoYXIqIGZvbnRGYW50YXN5OworICAgICAgICBjb25zdCBjaGFyKiBmb250
U2VyaWY7CisgICAgICAgIGNvbnN0IGNoYXIqIGZvbnRTYW5zU2VyaWY7CisgICAgICAgIEVpbmFf
Qm9vbCBhdXRvTG9hZEltYWdlcyA6IDE7CisgICAgICAgIEVpbmFfQm9vbCBhdXRvU2hyaW5rSW1h
Z2VzIDogMTsKKyAgICAgICAgRWluYV9Cb29sIGVuYWJsZUF1dG9SZXNpemVXaW5kb3cgOiAxOwor
ICAgICAgICBFaW5hX0Jvb2wgZW5hYmxlRGV2ZWxvcGVyRXh0cmFzIDogMTsKKyAgICAgICAgRWlu
YV9Cb29sIGVuYWJsZVNjcmlwdHMgOiAxOworICAgICAgICBFaW5hX0Jvb2wgZW5hYmxlUGx1Z2lu
cyA6IDE7CisgICAgICAgIEVpbmFfQm9vbCBlbmFibGVGcmFtZUZsYXR0ZW5pbmcgOiAxOworICAg
ICAgICBFaW5hX0Jvb2wgZW5jb2RpbmdEZXRlY3RvciA6IDE7CisgICAgICAgIEVpbmFfQm9vbCBz
Y3JpcHRzV2luZG93T3BlbiA6IDE7CisgICAgICAgIEVpbmFfQm9vbCBzY3JpcHRzQ2FuQ2xvc2VX
aW5kb3dzIDogMTsKKyAgICAgICAgRWluYV9Cb29sIHJlc2l6YWJsZVRleHRhcmVhcyA6IDE7Cisg
ICAgICAgIEVpbmFfQm9vbCBwcml2YXRlQnJvd3NpbmcgOiAxOworICAgICAgICBFaW5hX0Jvb2wg
Y2FyZXRCcm93c2luZyA6IDE7CisgICAgICAgIEVpbmFfQm9vbCBzcGF0aWFsTmF2aWdhdGlvbiA6
IDE7CisgICAgICAgIEVpbmFfQm9vbCBsb2NhbFN0b3JhZ2UgOiAxOworICAgICAgICBFaW5hX0Jv
b2wgb2ZmbGluZUFwcENhY2hlIDogMTsKKyAgICAgICAgRWluYV9Cb29sIHBhZ2VDYWNoZSA6IDE7
CiAgICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICBmbG9hdCBtaW5fc2NhbGU7Ci0gICAgICAg
ICAgICBmbG9hdCBtYXhfc2NhbGU7Ci0gICAgICAgICAgICBFaW5hX0Jvb2wgdXNlcl9zY2FsYWJs
ZSA6IDE7Ci0gICAgICAgIH0gem9vbV9yYW5nZTsKLSAgICAgICAgZmxvYXQgZGV2aWNlX3BpeGVs
X3JhdGlvOwotICAgICAgICBkb3VibGUgZG9tX3RpbWVyX2ludGVydmFsOworICAgICAgICAgICAg
ZmxvYXQgbWluU2NhbGU7CisgICAgICAgICAgICBmbG9hdCBtYXhTY2FsZTsKKyAgICAgICAgICAg
IEVpbmFfQm9vbCB1c2VyU2NhbGFibGUgOiAxOworICAgICAgICB9IHpvb21SYW5nZTsKKyAgICAg
ICAgZmxvYXQgZGV2aWNlUGl4ZWxSYXRpbzsKKyAgICAgICAgZG91YmxlIGRvbVRpbWVySW50ZXJ2
YWw7CiAgICAgfSBzZXR0aW5nczsKICAgICBzdHJ1Y3QgewogICAgICAgICBzdHJ1Y3QgewpAQCAt
MTc0LDcgKzE3NCw3IEBAIHN0cnVjdCBfRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhIHsKICAgICAgICAg
ICAgIEV2YXNfQ29vcmQgeCwgeTsKICAgICAgICAgfSBjZW50ZXI7CiAgICAgICAgIEVjb3JlX0Fu
aW1hdG9yKiBhbmltYXRvcjsKLSAgICB9IGFuaW1hdGVkX3pvb207CisgICAgfSBhbmltYXRlZFpv
b207CiB9OwogCiAjaWZuZGVmIEVXS19UWVBFX0NIRUNLCkBAIC0yMTksMTQgKzIxOSwxNCBAQCBz
dHJ1Y3QgX0V3a19WaWV3X1ByaXZhdGVfRGF0YSB7CiAgICAgICAgIHJldHVybiBfX1ZBX0FSR1Nf
XzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICB9CiAKLSNkZWZpbmUgRVdLX1ZJ
RVdfUFJJVl9HRVQoc2QsIHB0cikgICAgICAgICAgICAgIFwKLSAgICBFd2tfVmlld19Qcml2YXRl
X0RhdGEgKnB0ciA9IHNkLT5fcHJpdgorI2RlZmluZSBFV0tfVklFV19QUklWX0dFVChzbWFydERh
dGEsIHB0cikgICAgICAgICAgICAgIFwKKyAgICBFd2tfVmlld19Qcml2YXRlX0RhdGEgKnB0ciA9
IHNtYXJ0RGF0YS0+X3ByaXYKIAotI2RlZmluZSBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4o
c2QsIHB0ciwgLi4uKSAgICAgICAgICAgICAgIFwKLSAgICBFV0tfVklFV19QUklWX0dFVChzZCwg
cHRyKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIEVXS19WSUVX
X1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHB0ciwgLi4uKSAgICAgICAgICAgICAgIFwK
KyAgICBFV0tfVklFV19QUklWX0dFVChzbWFydERhdGEsIHB0cik7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAogICAgIGlmICghcHRyKSB7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgQ1JJVElDQUwoIm5vIHByaXZhdGUg
ZGF0YSBmb3Igb2JqZWN0ICVwICglcykiLCAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgIHNk
LT5zZWxmLCBldmFzX29iamVjdF90eXBlX2dldChzZC0+c2VsZikpOyAgICAgXAorICAgICAgICAg
ICAgICAgICBzbWFydERhdGEtPnNlbGYsIGV2YXNfb2JqZWN0X3R5cGVfZ2V0KHNtYXJ0RGF0YS0+
c2VsZikpOyAgICAgXAogICAgICAgICByZXR1cm4gX19WQV9BUkdTX187ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKICAgICB9CiAKQEAgLTI1Miw3ICsyNTIsNyBAQCBzdGF0
aWMgRWluYV9Cb29sIF9ld2tfdmlld19yZXBhaW50c19yZXNpemUoRXdrX1ZpZXdfUHJpdmF0ZV9E
YXRhKiBwcml2LCBzaXplX3QgcwogCiBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfcmVwYWludF9hZGQo
RXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKiBwcml2LCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwg
RXZhc19Db29yZCB3aWR0aCwgRXZhc19Db29yZCBoZWlnaHQpCiB7Ci0gICAgRWluYV9SZWN0YW5n
bGUqIHI7CisgICAgRWluYV9SZWN0YW5nbGUqIHJlY3Q7CiAKICAgICAvLyBmcHJpbnRmKHN0ZGVy
ciwgIj4+PiByZXBhaW50IHJlcXVlc3RlZDogJWQsJWQrJWR4JWRcbiIsIHgsIHksIHcsIGgpOwog
ICAgIGlmIChwcml2LT5yZXBhaW50cy5hbGxvY2F0ZWQgPT0gcHJpdi0+cmVwYWludHMuY291bnQp
IHsKQEAgLTI2NSwxMyArMjY1LDEzIEBAIHN0YXRpYyB2b2lkIF9ld2tfdmlld19yZXBhaW50X2Fk
ZChFd2tfVmlld19Qcml2YXRlX0RhdGEqIHByaXYsIEV2YXNfQ29vcmQgeCwgRXZhCiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgciA9IHByaXYtPnJlcGFpbnRzLmFycmF5ICsgcHJp
di0+cmVwYWludHMuY291bnQ7CisgICAgcmVjdCA9IHByaXYtPnJlcGFpbnRzLmFycmF5ICsgcHJp
di0+cmVwYWludHMuY291bnQ7CiAgICAgcHJpdi0+cmVwYWludHMuY291bnQrKzsKIAotICAgIHIt
PnggPSB4OwotICAgIHItPnkgPSB5OwotICAgIHItPncgPSB3aWR0aDsKLSAgICByLT5oID0gaGVp
Z2h0OworICAgIHJlY3QtPnggPSB4OworICAgIHJlY3QtPnkgPSB5OworICAgIHJlY3QtPncgPSB3
aWR0aDsKKyAgICByZWN0LT5oID0gaGVpZ2h0OwogCiAgICAgREJHKCJhZGQgcmVwYWludCAlZCwg
JWQrJWR4JWQiLCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKIH0KQEAgLTI5NiwyOSArMjk2LDI5IEBA
IHN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3Njcm9sbHNfcmVzaXplKEV3a19WaWV3X1ByaXZh
dGVfRGF0YSogcHJpdiwgc2l6ZV90IHNpCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAotc3Rh
dGljIHZvaWQgX2V3a192aWV3X3Njcm9sbF9hZGQoRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKiBwcml2
LCBFdmFzX0Nvb3JkIGR4LCBFdmFzX0Nvb3JkIGR5LCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQg
eSwgRXZhc19Db29yZCB3aWR0aCwgRXZhc19Db29yZCBoZWlnaHQsIEVpbmFfQm9vbCBtYWluU2Ny
b2xsKQorc3RhdGljIHZvaWQgX2V3a192aWV3X3Njcm9sbF9hZGQoRXdrX1ZpZXdfUHJpdmF0ZV9E
YXRhKiBwcml2LCBFdmFzX0Nvb3JkIGRlbHRhWCwgRXZhc19Db29yZCBkZWx0YVksIEV2YXNfQ29v
cmQgeCwgRXZhc19Db29yZCB5LCBFdmFzX0Nvb3JkIHdpZHRoLCBFdmFzX0Nvb3JkIGhlaWdodCwg
RWluYV9Cb29sIG1haW5TY3JvbGwpCiB7Ci0gICAgRXdrX1Njcm9sbF9SZXF1ZXN0KiByOwotICAg
IEV3a19TY3JvbGxfUmVxdWVzdCogcl9lbmQ7CisgICAgRXdrX1Njcm9sbF9SZXF1ZXN0KiByZWN0
OworICAgIEV3a19TY3JvbGxfUmVxdWVzdCogcmVjdF9lbmQ7CiAgICAgRXZhc19Db29yZCB4MiA9
IHggKyB3aWR0aCwgeTIgPSB5ICsgaGVpZ2h0OwogCi0gICAgciA9IHByaXYtPnNjcm9sbHMuYXJy
YXk7Ci0gICAgcl9lbmQgPSByICsgcHJpdi0+c2Nyb2xscy5jb3VudDsKLSAgICBmb3IgKDsgciA8
IHJfZW5kOyByKyspIHsKLSAgICAgICAgaWYgKHItPnggPT0geCAmJiByLT55ID09IHkgJiYgci0+
dyA9PSB3aWR0aCAmJiByLT5oID09IGhlaWdodCkgeworICAgIHJlY3QgPSBwcml2LT5zY3JvbGxz
LmFycmF5OworICAgIHJlY3RfZW5kID0gcmVjdCArIHByaXYtPnNjcm9sbHMuY291bnQ7CisgICAg
Zm9yICg7IHJlY3QgPCByZWN0X2VuZDsgcmVjdCsrKSB7CisgICAgICAgIGlmIChyZWN0LT54ID09
IHggJiYgcmVjdC0+eSA9PSB5ICYmIHJlY3QtPncgPT0gd2lkdGggJiYgcmVjdC0+aCA9PSBoZWln
aHQpIHsKICAgICAgICAgICAgIERCRygicmVnaW9uIGFscmVhZHkgc2Nyb2xsZWQgJWQsJWQrJWR4
JWQgJSswM2QsJSswM2QgYWRkICIKICAgICAgICAgICAgICAgICAiJSswM2QsJSswM2QiLAotICAg
ICAgICAgICAgICAgIHItPngsIHItPnksIHItPncsIHItPmgsIHItPmR4LCByLT5keSwgZHgsIGR5
KTsKLSAgICAgICAgICAgIHItPmR4ICs9IGR4OwotICAgICAgICAgICAgci0+ZHkgKz0gZHk7Cisg
ICAgICAgICAgICAgICAgcmVjdC0+eCwgcmVjdC0+eSwgcmVjdC0+dywgcmVjdC0+aCwgcmVjdC0+
ZHgsIHJlY3QtPmR5LCBkZWx0YVgsIGRlbHRhWSk7CisgICAgICAgICAgICByZWN0LT5keCArPSBk
ZWx0YVg7CisgICAgICAgICAgICByZWN0LT5keSArPSBkZWx0YVk7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KLSAgICAgICAgaWYgKCh4IDw9IHItPnggJiYgeDIgPj0gci0+eDIpICYm
ICh5IDw9IHItPnkgJiYgeTIgPj0gci0+eTIpKSB7CisgICAgICAgIGlmICgoeCA8PSByZWN0LT54
ICYmIHgyID49IHJlY3QtPngyKSAmJiAoeSA8PSByZWN0LT55ICYmIHkyID49IHJlY3QtPnkyKSkg
ewogICAgICAgICAgICAgREJHKCJvbGQgdmlld3BvcnQgKCVkLCVkKyVkeCVkICUrMDNkLCUrMDNk
KSB3YXMgc2Nyb2xsZWQgaXRzZWxmLCAiCiAgICAgICAgICAgICAgICAgImFkZCAlKzAzZCwlKzAz
ZCIsCi0gICAgICAgICAgICAgICAgci0+eCwgci0+eSwgci0+dywgci0+aCwgci0+ZHgsIHItPmR5
LCBkeCwgZHkpOwotICAgICAgICAgICAgci0+eCArPSBkeDsKLSAgICAgICAgICAgIHItPnkgKz0g
ZHk7CisgICAgICAgICAgICAgICAgcmVjdC0+eCwgcmVjdC0+eSwgcmVjdC0+dywgcmVjdC0+aCwg
cmVjdC0+ZHgsIHJlY3QtPmR5LCBkZWx0YVgsIGRlbHRhWSk7CisgICAgICAgICAgICByZWN0LT54
ICs9IGRlbHRhWDsKKyAgICAgICAgICAgIHJlY3QtPnkgKz0gZGVsdGFZOwogICAgICAgICB9CiAg
ICAgfQogCkBAIC0zMzIsMTkgKzMzMiwxOSBAQCBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc2Nyb2xs
X2FkZChFd2tfVmlld19Qcml2YXRlX0RhdGEqIHByaXYsIEV2YXNfQ29vcmQgZHgsIEV2YQogICAg
ICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHIgPSBwcml2LT5zY3JvbGxzLmFycmF5ICsg
cHJpdi0+c2Nyb2xscy5jb3VudDsKKyAgICByZWN0ID0gcHJpdi0+c2Nyb2xscy5hcnJheSArIHBy
aXYtPnNjcm9sbHMuY291bnQ7CiAgICAgcHJpdi0+c2Nyb2xscy5jb3VudCsrOwogCi0gICAgci0+
eCA9IHg7Ci0gICAgci0+eSA9IHk7Ci0gICAgci0+dyA9IHdpZHRoOwotICAgIHItPmggPSBoZWln
aHQ7Ci0gICAgci0+eDIgPSB4MjsKLSAgICByLT55MiA9IHkyOwotICAgIHItPmR4ID0gZHg7Ci0g
ICAgci0+ZHkgPSBkeTsKLSAgICByLT5tYWluX3Njcm9sbCA9IG1haW5TY3JvbGw7Ci0gICAgREJH
KCJhZGQgc2Nyb2xsIGluIHJlZ2lvbjogJWQsICVkKyVkeCVkICUrMDNkLCAlKzAzZCIsIHgsIHks
IHdpZHRoLCBoZWlnaHQsIGR4LCBkeSk7CisgICAgcmVjdC0+eCA9IHg7CisgICAgcmVjdC0+eSA9
IHk7CisgICAgcmVjdC0+dyA9IHdpZHRoOworICAgIHJlY3QtPmggPSBoZWlnaHQ7CisgICAgcmVj
dC0+eDIgPSB4MjsKKyAgICByZWN0LT55MiA9IHkyOworICAgIHJlY3QtPmR4ID0gZGVsdGFYOwor
ICAgIHJlY3QtPmR5ID0gZGVsdGFZOworICAgIHJlY3QtPm1haW5fc2Nyb2xsID0gbWFpblNjcm9s
bDsKKyAgICBEQkcoImFkZCBzY3JvbGwgaW4gcmVnaW9uOiAlZCwgJWQrJWR4JWQgJSswM2QsICUr
MDNkIiwgeCwgeSwgd2lkdGgsIGhlaWdodCwgZGVsdGFYLCBkZWx0YVkpOwogCiAgICAgRWluYV9S
ZWN0YW5nbGUqIHByOwogICAgIEVpbmFfUmVjdGFuZ2xlKiBwcl9lbmQ7CkBAIC0zNTMsOCArMzUz
LDggQEAgc3RhdGljIHZvaWQgX2V3a192aWV3X3Njcm9sbF9hZGQoRXdrX1ZpZXdfUHJpdmF0ZV9E
YXRhKiBwcml2LCBFdmFzX0Nvb3JkIGR4LCBFdmEKICAgICBjb3VudCA9IHByaXYtPnJlcGFpbnRz
LmNvdW50OwogICAgIHByX2VuZCA9IHByICsgY291bnQ7CiAgICAgZm9yICg7IHByIDwgcHJfZW5k
OyBwcisrKSB7Ci0gICAgICAgIHByLT54ICs9IGR4OwotICAgICAgICBwci0+eSArPSBkeTsKKyAg
ICAgICAgcHItPnggKz0gZGVsdGFYOworICAgICAgICBwci0+eSArPSBkZWx0YVk7CiAgICAgfQog
fQogCkBAIC0zODIsMTIgKzM4MiwxMiBAQCBzdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19zbWFy
dF9mb2N1c19pbihFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEpCiBzdGF0aWMgRWluYV9C
b29sIF9ld2tfdmlld19zbWFydF9mb2N1c19vdXQoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnRE
YXRhKQogewogICAgIEVXS19WSUVXX1BSSVZfR0VUKHNtYXJ0RGF0YSwgcHJpdik7Ci0gICAgV2Vi
Q29yZTo6Rm9jdXNDb250cm9sbGVyKiBmYyA9IHByaXYtPnBhZ2UtPmZvY3VzQ29udHJvbGxlcigp
OwotICAgIERCRygiZXdrVmlldz0lcCwgZmM9JXAiLCBzbWFydERhdGEtPnNlbGYsIGZjKTsKLSAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZmMsIEVJTkFfRkFMU0UpOworICAgIFdl
YkNvcmU6OkZvY3VzQ29udHJvbGxlciogZm9jdXNDb250cm9sbGVyID0gcHJpdi0+cGFnZS0+Zm9j
dXNDb250cm9sbGVyKCk7CisgICAgREJHKCJld2tWaWV3PSVwLCBmYz0lcCIsIHNtYXJ0RGF0YS0+
c2VsZiwgZm9jdXNDb250cm9sbGVyKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9W
QUwoZm9jdXNDb250cm9sbGVyLCBFSU5BX0ZBTFNFKTsKIAotICAgIGZjLT5zZXRBY3RpdmUoZmFs
c2UpOwotICAgIGZjLT5zZXRGb2N1c2VkKGZhbHNlKTsKKyAgICBmb2N1c0NvbnRyb2xsZXItPnNl
dEFjdGl2ZShmYWxzZSk7CisgICAgZm9jdXNDb250cm9sbGVyLT5zZXRGb2N1c2VkKGZhbHNlKTsK
ICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCkBAIC00NTgsOTcgKzQ1OCw5NyBAQCBzdGF0aWMg
RWluYV9Cb29sIF9ld2tfdmlld19zbWFydF9zaG91bGRfaW50ZXJydXB0X2phdmFzY3JpcHQoRXdr
X1ZpZXdfU21hcnRfRGF0YQogc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfc21hcnRfcnVuX2ph
dmFzY3JpcHRfcHJvbXB0KEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSwgRXZhc19PYmpl
Y3QqIGZyYW1lLCBjb25zdCBjaGFyKiBtZXNzYWdlLCBjb25zdCBjaGFyKiBkZWZhdWx0VmFsdWUs
IGNoYXIqKiB2YWx1ZSkKIHsKICAgICAqdmFsdWUgPSBzdHJkdXAoInRlc3QiKTsKLSAgICBFaW5h
X0Jvb2wgcmV0ID0gRUlOQV9UUlVFOworICAgIEVpbmFfQm9vbCByZXN1bHQgPSBFSU5BX1RSVUU7
CiAgICAgSU5GKCJqYXZhc2NyaXB0IHByb21wdDpcbiIKICAgICAgICAgIlx0ICAgICAgbWVzc2Fn
ZTogJXNcbiIKICAgICAgICAgIlx0ZGVmYXVsdCB2YWx1ZTogJXNcbiIKICAgICAgICAgIlx0Z2l2
aW5nIGFuc3dlcjogJXNcbiIKLSAgICAgICAgIlx0ICAgICAgIGJ1dHRvbjogJXMiLCBtZXNzYWdl
LCBkZWZhdWx0VmFsdWUsICp2YWx1ZSwgcmV0ID8gIm9rIiA6ICJjYW5jZWwiKTsKKyAgICAgICAg
Ilx0ICAgICAgIGJ1dHRvbjogJXMiLCBtZXNzYWdlLCBkZWZhdWx0VmFsdWUsICp2YWx1ZSwgcmVz
dWx0ID8gIm9rIiA6ICJjYW5jZWwiKTsKIAotICAgIHJldHVybiByZXQ7CisgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAogLy8gRXZlbnQgSGFuZGxpbmcgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfb25fZm9j
dXNfaW4odm9pZCogZGF0YSwgRXZhcyogZXZlbnRUeXBlLCBFdmFzX09iamVjdCogY2FsbGJhY2ss
IHZvaWQqIGV2ZW50SW5mbykKIHsKLSAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzZCA9IHN0YXRp
Y19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihkYXRhKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTihzZC0+YXBpKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+
YXBpLT5mb2N1c19pbik7Ci0gICAgc2QtPmFwaS0+Zm9jdXNfaW4oc2QpOworICAgIEV3a19WaWV3
X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEq
PihkYXRhKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmFwaSk7
CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRhLT5hcGktPmZvY3VzX2lu
KTsKKyAgICBzbWFydERhdGEtPmFwaS0+Zm9jdXNfaW4oc21hcnREYXRhKTsKIH0KIAogc3RhdGlj
IHZvaWQgX2V3a192aWV3X29uX2ZvY3VzX291dCh2b2lkKiBkYXRhLCBFdmFzKiBldmVudFR5cGUs
IEV2YXNfT2JqZWN0KiBjYWxsYmFjaywgdm9pZCogZXZlbnRJbmZvKQogewotICAgIEV3a19WaWV3
X1NtYXJ0X0RhdGEqIHNkID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEp
OwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGkpOwotICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGktPmZvY3VzX291dCk7Ci0gICAgc2QtPmFwaS0+Zm9j
dXNfb3V0KHNkKTsKKyAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEgPSBzdGF0aWNf
Y2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZGF0YSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk4oc21hcnREYXRhLT5hcGkpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJO
KHNtYXJ0RGF0YS0+YXBpLT5mb2N1c19vdXQpOworICAgIHNtYXJ0RGF0YS0+YXBpLT5mb2N1c19v
dXQoc21hcnREYXRhKTsKIH0KIAogc3RhdGljIHZvaWQgX2V3a192aWV3X29uX21vdXNlX3doZWVs
KHZvaWQqIGRhdGEsIEV2YXMqIGV2ZW50VHlwZSwgRXZhc19PYmplY3QqIGNhbGxiYWNrLCB2b2lk
KiBldmVudEluZm8pCiB7Ci0gICAgRXZhc19FdmVudF9Nb3VzZV9XaGVlbCogZXYgPSBzdGF0aWNf
Y2FzdDxFdmFzX0V2ZW50X01vdXNlX1doZWVsKj4oZXZlbnRJbmZvKTsKLSAgICBFd2tfVmlld19T
bWFydF9EYXRhKiBzZCA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihkYXRhKTsK
LSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpKTsKLSAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpLT5tb3VzZV93aGVlbCk7Ci0gICAgc2QtPmFwaS0+bW91
c2Vfd2hlZWwoc2QsIGV2KTsKKyAgICBFdmFzX0V2ZW50X01vdXNlX1doZWVsKiB3aGVlbEV2ZW50
ID0gc3RhdGljX2Nhc3Q8RXZhc19FdmVudF9Nb3VzZV9XaGVlbCo+KGV2ZW50SW5mbyk7CisgICAg
RXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21h
cnRfRGF0YSo+KGRhdGEpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0
YS0+YXBpKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmFwaS0+
bW91c2Vfd2hlZWwpOworICAgIHNtYXJ0RGF0YS0+YXBpLT5tb3VzZV93aGVlbChzbWFydERhdGEs
IHdoZWVsRXZlbnQpOwogfQogCiBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfb25fbW91c2VfZG93bih2
b2lkKiBkYXRhLCBFdmFzKiBldmVudFR5cGUsIEV2YXNfT2JqZWN0KiBjYWxsYmFjaywgdm9pZCog
ZXZlbnRJbmZvKQogewotICAgIEV2YXNfRXZlbnRfTW91c2VfRG93biogZXYgPSBzdGF0aWNfY2Fz
dDxFdmFzX0V2ZW50X01vdXNlX0Rvd24qPihldmVudEluZm8pOwotICAgIEV3a19WaWV3X1NtYXJ0
X0RhdGEqIHNkID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEpOwotICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGkpOwotICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOKHNkLT5hcGktPm1vdXNlX2Rvd24pOwotICAgIHNkLT5hcGktPm1vdXNlX2Rv
d24oc2QsIGV2KTsKKyAgICBFdmFzX0V2ZW50X01vdXNlX0Rvd24qIGRvd25FdmVudCA9IHN0YXRp
Y19jYXN0PEV2YXNfRXZlbnRfTW91c2VfRG93bio+KGV2ZW50SW5mbyk7CisgICAgRXdrX1ZpZXdf
U21hcnRfRGF0YSogc21hcnREYXRhID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+
KGRhdGEpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+YXBpKTsK
KyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmFwaS0+bW91c2VfZG93
bik7CisgICAgc21hcnREYXRhLT5hcGktPm1vdXNlX2Rvd24oc21hcnREYXRhLCBkb3duRXZlbnQp
OwogfQogCiBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfb25fbW91c2VfdXAodm9pZCogZGF0YSwgRXZh
cyogZXZlbnRUeXBlLCBFdmFzX09iamVjdCogY2FsbGJhY2ssIHZvaWQqIGV2ZW50SW5mbykKIHsK
LSAgICBFdmFzX0V2ZW50X01vdXNlX1VwKiBldiA9IHN0YXRpY19jYXN0PEV2YXNfRXZlbnRfTW91
c2VfVXAqPihldmVudEluZm8pOwotICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0gc3RhdGlj
X2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEpOwotICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOKHNkLT5hcGkpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5h
cGktPm1vdXNlX3VwKTsKLSAgICBzZC0+YXBpLT5tb3VzZV91cChzZCwgZXYpOworICAgIEV2YXNf
RXZlbnRfTW91c2VfVXAqIHVwRXZlbnQgPSBzdGF0aWNfY2FzdDxFdmFzX0V2ZW50X01vdXNlX1Vw
Kj4oZXZlbnRJbmZvKTsKKyAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEgPSBzdGF0
aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZGF0YSk7CisgICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk4oc21hcnREYXRhLT5hcGkpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOKHNtYXJ0RGF0YS0+YXBpLT5tb3VzZV91cCk7CisgICAgc21hcnREYXRhLT5hcGktPm1vdXNl
X3VwKHNtYXJ0RGF0YSwgdXBFdmVudCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9ld2tfdmlld19vbl9t
b3VzZV9tb3ZlKHZvaWQqIGRhdGEsIEV2YXMqIGV2ZW50VHlwZSwgRXZhc19PYmplY3QqIGNhbGxi
YWNrLCB2b2lkKiBldmVudEluZm8pCiB7Ci0gICAgRXZhc19FdmVudF9Nb3VzZV9Nb3ZlKiBldiA9
IHN0YXRpY19jYXN0PEV2YXNfRXZlbnRfTW91c2VfTW92ZSo+KGV2ZW50SW5mbyk7Ci0gICAgRXdr
X1ZpZXdfU21hcnRfRGF0YSogc2QgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4o
ZGF0YSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFwaSk7Ci0gICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFwaS0+bW91c2VfbW92ZSk7Ci0gICAgc2QtPmFw
aS0+bW91c2VfbW92ZShzZCwgZXYpOworICAgIEV2YXNfRXZlbnRfTW91c2VfTW92ZSogbW92ZUV2
ZW50ID0gc3RhdGljX2Nhc3Q8RXZhc19FdmVudF9Nb3VzZV9Nb3ZlKj4oZXZlbnRJbmZvKTsKKyAg
ICBFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19T
bWFydF9EYXRhKj4oZGF0YSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnRE
YXRhLT5hcGkpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+YXBp
LT5tb3VzZV9tb3ZlKTsKKyAgICBzbWFydERhdGEtPmFwaS0+bW91c2VfbW92ZShzbWFydERhdGEs
IG1vdmVFdmVudCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9ld2tfdmlld19vbl9rZXlfZG93bih2b2lk
KiBkYXRhLCBFdmFzKiBldmVudFR5cGUsIEV2YXNfT2JqZWN0KiBjYWxsYmFjaywgdm9pZCogZXZl
bnRJbmZvKQogewotICAgIEV2YXNfRXZlbnRfS2V5X0Rvd24qIGV2ID0gc3RhdGljX2Nhc3Q8RXZh
c19FdmVudF9LZXlfRG93bio+KGV2ZW50SW5mbyk7Ci0gICAgRXdrX1ZpZXdfU21hcnRfRGF0YSog
c2QgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZGF0YSk7Ci0gICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFwaSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk4oc2QtPmFwaS0+a2V5X2Rvd24pOwotICAgIHNkLT5hcGktPmtleV9kb3duKHNkLCBldik7
CisgICAgRXZhc19FdmVudF9LZXlfRG93biogZG93bkV2ZW50ID0gc3RhdGljX2Nhc3Q8RXZhc19F
dmVudF9LZXlfRG93bio+KGV2ZW50SW5mbyk7CisgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc21h
cnREYXRhID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEpOworICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+YXBpKTsKKyAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmFwaS0+a2V5X2Rvd24pOworICAgIHNtYXJ0RGF0
YS0+YXBpLT5rZXlfZG93bihzbWFydERhdGEsIGRvd25FdmVudCk7CiB9CiAKIHN0YXRpYyB2b2lk
IF9ld2tfdmlld19vbl9rZXlfdXAodm9pZCogZGF0YSwgRXZhcyogZXZlbnRUeXBlLCBFdmFzX09i
amVjdCogY2FsbGJhY2ssIHZvaWQqIGV2ZW50SW5mbykKIHsKLSAgICBFdmFzX0V2ZW50X0tleV9V
cCogZXYgPSBzdGF0aWNfY2FzdDxFdmFzX0V2ZW50X0tleV9VcCo+KGV2ZW50SW5mbyk7Ci0gICAg
RXdrX1ZpZXdfU21hcnRfRGF0YSogc2QgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRh
Kj4oZGF0YSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFwaSk7Ci0gICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFwaS0+a2V5X3VwKTsKLSAgICBzZC0+YXBp
LT5rZXlfdXAoc2QsIGV2KTsKKyAgICBFdmFzX0V2ZW50X0tleV9VcCogdXBFdmVudCA9IHN0YXRp
Y19jYXN0PEV2YXNfRXZlbnRfS2V5X1VwKj4oZXZlbnRJbmZvKTsKKyAgICBFd2tfVmlld19TbWFy
dF9EYXRhKiBzbWFydERhdGEgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZGF0
YSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRhLT5hcGkpOworICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+YXBpLT5rZXlfdXApOworICAg
IHNtYXJ0RGF0YS0+YXBpLT5rZXlfdXAoc21hcnREYXRhLCB1cEV2ZW50KTsKIH0KIAogc3RhdGlj
IFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpGcmFtZT4gX2V3a192aWV3X2NvcmVfZnJhbWVfbmV3
KEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSwgRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKiBw
cml2LCBXZWJDb3JlOjpIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVyKQogewotICAgIFdlYkNv
cmU6OkZyYW1lTG9hZGVyQ2xpZW50RWZsKiBmbGMgPSBuZXcgV2ViQ29yZTo6RnJhbWVMb2FkZXJD
bGllbnRFZmwoc21hcnREYXRhLT5zZWxmKTsKLSAgICBpZiAoIWZsYykgeworICAgIFdlYkNvcmU6
OkZyYW1lTG9hZGVyQ2xpZW50RWZsKiBmcmFtZUxvYWRlckNsaWVudCA9IG5ldyBXZWJDb3JlOjpG
cmFtZUxvYWRlckNsaWVudEVmbChzbWFydERhdGEtPnNlbGYpOworICAgIGlmICghZnJhbWVMb2Fk
ZXJDbGllbnQpIHsKICAgICAgICAgQ1JJVElDQUwoIkNvdWxkIG5vdCBjcmVhdGUgZnJhbWUgbG9h
ZGVyIGNsaWVudC4iKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIGZsYy0+c2V0Q3Vz
dG9tVXNlckFnZW50KFN0cmluZzo6ZnJvbVVURjgocHJpdi0+c2V0dGluZ3MudXNlcl9hZ2VudCkp
OworICAgIGZyYW1lTG9hZGVyQ2xpZW50LT5zZXRDdXN0b21Vc2VyQWdlbnQoU3RyaW5nOjpmcm9t
VVRGOChwcml2LT5zZXR0aW5ncy51c2VyQWdlbnQpKTsKIAotICAgIHJldHVybiBXZWJDb3JlOjpG
cmFtZTo6Y3JlYXRlKHByaXYtPnBhZ2UsIG93bmVyLCBmbGMpOworICAgIHJldHVybiBXZWJDb3Jl
OjpGcmFtZTo6Y3JlYXRlKHByaXYtPnBhZ2UsIG93bmVyLCBmcmFtZUxvYWRlckNsaWVudCk7CiB9
CiAKIHN0YXRpYyBFdmFzX1NtYXJ0X0NsYXNzIF9wYXJlbnRfc2MgPSBFVkFTX1NNQVJUX0NMQVNT
X0lOSVRfTlVMTDsKQEAgLTU1Nyw3ICs1NTcsNyBAQCBzdGF0aWMgRXdrX1ZpZXdfUHJpdmF0ZV9E
YXRhKiBfZXdrX3ZpZXdfcHJpdl9uZXcoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhKQog
ewogICAgIEV3a19WaWV3X1ByaXZhdGVfRGF0YSogcHJpdiA9CiAgICAgICAgIHN0YXRpY19jYXN0
PEV3a19WaWV3X1ByaXZhdGVfRGF0YSo+KGNhbGxvYygxLCBzaXplb2YoRXdrX1ZpZXdfUHJpdmF0
ZV9EYXRhKSkpOwotICAgIEF0b21pY1N0cmluZyBzOworICAgIEF0b21pY1N0cmluZyBzdHJpbmc7
CiAgICAgV2ViQ29yZTo6S1VSTCB1cmw7CiAKICAgICBpZiAoIXByaXYpIHsKQEAgLTU4MCw5NSAr
NTgwLDk1IEBAIHN0YXRpYyBFd2tfVmlld19Qcml2YXRlX0RhdGEqIF9ld2tfdmlld19wcml2X25l
dyhFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEpCiAgICAgICAgIGdvdG8gZXJyb3JfcGFn
ZTsKICAgICB9CiAKLSAgICBwcml2LT5wYWdlX3NldHRpbmdzID0gcHJpdi0+cGFnZS0+c2V0dGlu
Z3MoKTsKLSAgICBpZiAoIXByaXYtPnBhZ2Vfc2V0dGluZ3MpIHsKKyAgICBwcml2LT5wYWdlU2V0
dGluZ3MgPSBwcml2LT5wYWdlLT5zZXR0aW5ncygpOworICAgIGlmICghcHJpdi0+cGFnZVNldHRp
bmdzKSB7CiAgICAgICAgIENSSVRJQ0FMKCJDb3VsZCBub3QgZ2V0IHBhZ2Ugc2V0dGluZ3MuIik7
CiAgICAgICAgIGdvdG8gZXJyb3Jfc2V0dGluZ3M7CiAgICAgfQogCi0gICAgcHJpdi0+dmlld3Bv
cnRfYXJndW1lbnRzLndpZHRoID0gV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHM6OlZhbHVlQXV0
bzsKLSAgICBwcml2LT52aWV3cG9ydF9hcmd1bWVudHMuaGVpZ2h0ID0gV2ViQ29yZTo6Vmlld3Bv
cnRBcmd1bWVudHM6OlZhbHVlQXV0bzsKLSAgICBwcml2LT52aWV3cG9ydF9hcmd1bWVudHMuaW5p
dGlhbFNjYWxlID0gV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHM6OlZhbHVlQXV0bzsKLSAgICBw
cml2LT52aWV3cG9ydF9hcmd1bWVudHMubWluaW11bVNjYWxlID0gV2ViQ29yZTo6Vmlld3BvcnRB
cmd1bWVudHM6OlZhbHVlQXV0bzsKLSAgICBwcml2LT52aWV3cG9ydF9hcmd1bWVudHMubWF4aW11
bVNjYWxlID0gV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHM6OlZhbHVlQXV0bzsKLSAgICBwcml2
LT52aWV3cG9ydF9hcmd1bWVudHMudGFyZ2V0RGVuc2l0eURwaSA9IFdlYkNvcmU6OlZpZXdwb3J0
QXJndW1lbnRzOjpWYWx1ZUF1dG87Ci0gICAgcHJpdi0+dmlld3BvcnRfYXJndW1lbnRzLnVzZXJT
Y2FsYWJsZSA9IEVJTkFfVFJVRTsKLQotICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNldExvYWRz
SW1hZ2VzQXV0b21hdGljYWxseSh0cnVlKTsKLSAgICBwcml2LT5wYWdlX3NldHRpbmdzLT5zZXRE
ZWZhdWx0VGV4dEVuY29kaW5nTmFtZSgiaXNvLTg4NTktMSIpOwotICAgIHByaXYtPnBhZ2Vfc2V0
dGluZ3MtPnNldERlZmF1bHRGaXhlZEZvbnRTaXplKDEyKTsKLSAgICBwcml2LT5wYWdlX3NldHRp
bmdzLT5zZXREZWZhdWx0Rm9udFNpemUoMTYpOwotICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNl
dFNlcmlmRm9udEZhbWlseSgic2VyaWYiKTsKLSAgICBwcml2LT5wYWdlX3NldHRpbmdzLT5zZXRG
aXhlZEZvbnRGYW1pbHkoIm1vbm90eXBlIik7Ci0gICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0
U2Fuc1NlcmlmRm9udEZhbWlseSgic2FucyIpOwotICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNl
dFN0YW5kYXJkRm9udEZhbWlseSgic2FucyIpOwotICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNl
dEphdmFTY3JpcHRFbmFibGVkKHRydWUpOwotICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNldFBs
dWdpbnNFbmFibGVkKHRydWUpOwotICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNldExvY2FsU3Rv
cmFnZUVuYWJsZWQodHJ1ZSk7Ci0gICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0T2ZmbGluZVdl
YkFwcGxpY2F0aW9uQ2FjaGVFbmFibGVkKHRydWUpOwotICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3Mt
PnNldFVzZXNQYWdlQ2FjaGUodHJ1ZSk7Ci0gICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0VXNl
c0VuY29kaW5nRGV0ZWN0b3IoZmFsc2UpOwotCi0gICAgdXJsID0gcHJpdi0+cGFnZV9zZXR0aW5n
cy0+dXNlclN0eWxlU2hlZXRMb2NhdGlvbigpOwotICAgIHByaXYtPnNldHRpbmdzLnVzZXJfc3R5
bGVzaGVldCA9IGVpbmFfc3RyaW5nc2hhcmVfYWRkKHVybC5zdHJpbmcoKS51dGY4KCkuZGF0YSgp
KTsKLQotICAgIHByaXYtPnNldHRpbmdzLmVuY29kaW5nX2RlZmF1bHQgPSBlaW5hX3N0cmluZ3No
YXJlX2FkZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHByaXYt
PnBhZ2Vfc2V0dGluZ3MtPmRlZmF1bHRUZXh0RW5jb2RpbmdOYW1lKCkudXRmOCgpLmRhdGEoKSk7
Ci0gICAgcHJpdi0+c2V0dGluZ3MuZW5jb2RpbmdfY3VzdG9tID0gMDsKLQotICAgIHMgPSBwcml2
LT5wYWdlX3NldHRpbmdzLT5sb2NhbFN0b3JhZ2VEYXRhYmFzZVBhdGgoKTsKLSAgICBwcml2LT5z
ZXR0aW5ncy5sb2NhbF9zdG9yYWdlX2RhdGFiYXNlX3BhdGggPSBlaW5hX3N0cmluZ3NoYXJlX2Fk
ZChzLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotCi0gICAgcHJpdi0+c2V0dGluZ3MuZm9udF9t
aW5pbXVtX3NpemUgPSBwcml2LT5wYWdlX3NldHRpbmdzLT5taW5pbXVtRm9udFNpemUoKTsKLSAg
ICBwcml2LT5zZXR0aW5ncy5mb250X21pbmltdW1fbG9naWNhbF9zaXplID0gcHJpdi0+cGFnZV9z
ZXR0aW5ncy0+bWluaW11bUxvZ2ljYWxGb250U2l6ZSgpOwotICAgIHByaXYtPnNldHRpbmdzLmZv
bnRfZGVmYXVsdF9zaXplID0gcHJpdi0+cGFnZV9zZXR0aW5ncy0+ZGVmYXVsdEZvbnRTaXplKCk7
Ci0gICAgcHJpdi0+c2V0dGluZ3MuZm9udF9tb25vc3BhY2Vfc2l6ZSA9IHByaXYtPnBhZ2Vfc2V0
dGluZ3MtPmRlZmF1bHRGaXhlZEZvbnRTaXplKCk7Ci0KLSAgICBzID0gcHJpdi0+cGFnZV9zZXR0
aW5ncy0+c3RhbmRhcmRGb250RmFtaWx5KCk7Ci0gICAgcHJpdi0+c2V0dGluZ3MuZm9udF9zdGFu
ZGFyZCA9IGVpbmFfc3RyaW5nc2hhcmVfYWRkKHMuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0g
ICAgcyA9IHByaXYtPnBhZ2Vfc2V0dGluZ3MtPmN1cnNpdmVGb250RmFtaWx5KCk7Ci0gICAgcHJp
di0+c2V0dGluZ3MuZm9udF9jdXJzaXZlID0gZWluYV9zdHJpbmdzaGFyZV9hZGQocy5zdHJpbmco
KS51dGY4KCkuZGF0YSgpKTsKLSAgICBzID0gcHJpdi0+cGFnZV9zZXR0aW5ncy0+Zml4ZWRGb250
RmFtaWx5KCk7Ci0gICAgcHJpdi0+c2V0dGluZ3MuZm9udF9tb25vc3BhY2UgPSBlaW5hX3N0cmlu
Z3NoYXJlX2FkZChzLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotICAgIHMgPSBwcml2LT5wYWdl
X3NldHRpbmdzLT5mYW50YXN5Rm9udEZhbWlseSgpOwotICAgIHByaXYtPnNldHRpbmdzLmZvbnRf
ZmFudGFzeSA9IGVpbmFfc3RyaW5nc2hhcmVfYWRkKHMuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7
Ci0gICAgcyA9IHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNlcmlmRm9udEZhbWlseSgpOwotICAgIHBy
aXYtPnNldHRpbmdzLmZvbnRfc2VyaWYgPSBlaW5hX3N0cmluZ3NoYXJlX2FkZChzLnN0cmluZygp
LnV0ZjgoKS5kYXRhKCkpOwotICAgIHMgPSBwcml2LT5wYWdlX3NldHRpbmdzLT5zYW5zU2VyaWZG
b250RmFtaWx5KCk7Ci0gICAgcHJpdi0+c2V0dGluZ3MuZm9udF9zYW5zX3NlcmlmID0gZWluYV9z
dHJpbmdzaGFyZV9hZGQocy5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLQotICAgIHByaXYtPnNl
dHRpbmdzLmF1dG9fbG9hZF9pbWFnZXMgPSBwcml2LT5wYWdlX3NldHRpbmdzLT5sb2Fkc0ltYWdl
c0F1dG9tYXRpY2FsbHkoKTsKLSAgICBwcml2LT5zZXR0aW5ncy5hdXRvX3Nocmlua19pbWFnZXMg
PSBwcml2LT5wYWdlX3NldHRpbmdzLT5zaHJpbmtzU3RhbmRhbG9uZUltYWdlc1RvRml0KCk7Ci0g
ICAgcHJpdi0+c2V0dGluZ3MuZW5hYmxlX2F1dG9fcmVzaXplX3dpbmRvdyA9IEVJTkFfVFJVRTsK
LSAgICBwcml2LT5zZXR0aW5ncy5lbmFibGVfZGV2ZWxvcGVyX2V4dHJhcyA9IHByaXYtPnBhZ2Vf
c2V0dGluZ3MtPmRldmVsb3BlckV4dHJhc0VuYWJsZWQoKTsKLSAgICBwcml2LT5zZXR0aW5ncy5l
bmFibGVfc2NyaXB0cyA9IHByaXYtPnBhZ2Vfc2V0dGluZ3MtPmlzSmF2YVNjcmlwdEVuYWJsZWQo
KTsKLSAgICBwcml2LT5zZXR0aW5ncy5lbmFibGVfcGx1Z2lucyA9IHByaXYtPnBhZ2Vfc2V0dGlu
Z3MtPmFyZVBsdWdpbnNFbmFibGVkKCk7Ci0gICAgcHJpdi0+c2V0dGluZ3MuZW5hYmxlX2ZyYW1l
X2ZsYXR0ZW5pbmcgPSBwcml2LT5wYWdlX3NldHRpbmdzLT5mcmFtZUZsYXR0ZW5pbmdFbmFibGVk
KCk7Ci0gICAgcHJpdi0+c2V0dGluZ3Muc2NyaXB0c193aW5kb3dfb3BlbiA9IHByaXYtPnBhZ2Vf
c2V0dGluZ3MtPmphdmFTY3JpcHRDYW5PcGVuV2luZG93c0F1dG9tYXRpY2FsbHkoKTsKLSAgICBw
cml2LT5zZXR0aW5ncy5zY3JpcHRzX2Nhbl9jbG9zZV93aW5kb3dzID0gcHJpdi0+cGFnZV9zZXR0
aW5ncy0+YWxsb3dTY3JpcHRzVG9DbG9zZVdpbmRvd3MoKTsKLSAgICBwcml2LT5zZXR0aW5ncy5y
ZXNpemFibGVfdGV4dGFyZWFzID0gcHJpdi0+cGFnZV9zZXR0aW5ncy0+dGV4dEFyZWFzQXJlUmVz
aXphYmxlKCk7Ci0gICAgcHJpdi0+c2V0dGluZ3MucHJpdmF0ZV9icm93c2luZyA9IHByaXYtPnBh
Z2Vfc2V0dGluZ3MtPnByaXZhdGVCcm93c2luZ0VuYWJsZWQoKTsKLSAgICBwcml2LT5zZXR0aW5n
cy5jYXJldF9icm93c2luZyA9IHByaXYtPnBhZ2Vfc2V0dGluZ3MtPmNhcmV0QnJvd3NpbmdFbmFi
bGVkKCk7Ci0gICAgcHJpdi0+c2V0dGluZ3Muc3BhdGlhbF9uYXZpZ2F0aW9uID0gcHJpdi0+cGFn
ZV9zZXR0aW5ncy0+aXNTcGF0aWFsTmF2aWdhdGlvbkVuYWJsZWQoKTsKLSAgICBwcml2LT5zZXR0
aW5ncy5sb2NhbF9zdG9yYWdlID0gcHJpdi0+cGFnZV9zZXR0aW5ncy0+bG9jYWxTdG9yYWdlRW5h
YmxlZCgpOwotICAgIHByaXYtPnNldHRpbmdzLm9mZmxpbmVfYXBwX2NhY2hlID0gdHJ1ZTsgLy8g
WFhYIG5vIGZ1bmN0aW9uIHRvIHJlYWQgc2V0dGluZzsgdGhpcyBrZWVwcyB0aGUgb3JpZ2luYWwg
c2V0dGluZwotICAgIHByaXYtPnNldHRpbmdzLnBhZ2VfY2FjaGUgPSBwcml2LT5wYWdlX3NldHRp
bmdzLT51c2VzUGFnZUNhY2hlKCk7Ci0gICAgcHJpdi0+c2V0dGluZ3MuZW5jb2RpbmdfZGV0ZWN0
b3IgPSBwcml2LT5wYWdlX3NldHRpbmdzLT51c2VzRW5jb2RpbmdEZXRlY3RvcigpOwotCi0gICAg
cHJpdi0+c2V0dGluZ3MudXNlcl9hZ2VudCA9IGV3a19zZXR0aW5nc19kZWZhdWx0X3VzZXJfYWdl
bnRfZ2V0KCk7CisgICAgcHJpdi0+dmlld3BvcnRBcmd1bWVudHMud2lkdGggPSBXZWJDb3JlOjpW
aWV3cG9ydEFyZ3VtZW50czo6VmFsdWVBdXRvOworICAgIHByaXYtPnZpZXdwb3J0QXJndW1lbnRz
LmhlaWdodCA9IFdlYkNvcmU6OlZpZXdwb3J0QXJndW1lbnRzOjpWYWx1ZUF1dG87CisgICAgcHJp
di0+dmlld3BvcnRBcmd1bWVudHMuaW5pdGlhbFNjYWxlID0gV2ViQ29yZTo6Vmlld3BvcnRBcmd1
bWVudHM6OlZhbHVlQXV0bzsKKyAgICBwcml2LT52aWV3cG9ydEFyZ3VtZW50cy5taW5pbXVtU2Nh
bGUgPSBXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50czo6VmFsdWVBdXRvOworICAgIHByaXYtPnZp
ZXdwb3J0QXJndW1lbnRzLm1heGltdW1TY2FsZSA9IFdlYkNvcmU6OlZpZXdwb3J0QXJndW1lbnRz
OjpWYWx1ZUF1dG87CisgICAgcHJpdi0+dmlld3BvcnRBcmd1bWVudHMudGFyZ2V0RGVuc2l0eURw
aSA9IFdlYkNvcmU6OlZpZXdwb3J0QXJndW1lbnRzOjpWYWx1ZUF1dG87CisgICAgcHJpdi0+dmll
d3BvcnRBcmd1bWVudHMudXNlclNjYWxhYmxlID0gRUlOQV9UUlVFOworCisgICAgcHJpdi0+cGFn
ZVNldHRpbmdzLT5zZXRMb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkodHJ1ZSk7CisgICAgcHJpdi0+
cGFnZVNldHRpbmdzLT5zZXREZWZhdWx0VGV4dEVuY29kaW5nTmFtZSgiaXNvLTg4NTktMSIpOwor
ICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0RGVmYXVsdEZpeGVkRm9udFNpemUoMTIpOworICAg
IHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0RGVmYXVsdEZvbnRTaXplKDE2KTsKKyAgICBwcml2LT5w
YWdlU2V0dGluZ3MtPnNldFNlcmlmRm9udEZhbWlseSgic2VyaWYiKTsKKyAgICBwcml2LT5wYWdl
U2V0dGluZ3MtPnNldEZpeGVkRm9udEZhbWlseSgibW9ub3R5cGUiKTsKKyAgICBwcml2LT5wYWdl
U2V0dGluZ3MtPnNldFNhbnNTZXJpZkZvbnRGYW1pbHkoInNhbnMiKTsKKyAgICBwcml2LT5wYWdl
U2V0dGluZ3MtPnNldFN0YW5kYXJkRm9udEZhbWlseSgic2FucyIpOworICAgIHByaXYtPnBhZ2VT
ZXR0aW5ncy0+c2V0SmF2YVNjcmlwdEVuYWJsZWQodHJ1ZSk7CisgICAgcHJpdi0+cGFnZVNldHRp
bmdzLT5zZXRQbHVnaW5zRW5hYmxlZCh0cnVlKTsKKyAgICBwcml2LT5wYWdlU2V0dGluZ3MtPnNl
dExvY2FsU3RvcmFnZUVuYWJsZWQodHJ1ZSk7CisgICAgcHJpdi0+cGFnZVNldHRpbmdzLT5zZXRP
ZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZUVuYWJsZWQodHJ1ZSk7CisgICAgcHJpdi0+cGFnZVNl
dHRpbmdzLT5zZXRVc2VzUGFnZUNhY2hlKHRydWUpOworICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+
c2V0VXNlc0VuY29kaW5nRGV0ZWN0b3IoZmFsc2UpOworCisgICAgdXJsID0gcHJpdi0+cGFnZVNl
dHRpbmdzLT51c2VyU3R5bGVTaGVldExvY2F0aW9uKCk7CisgICAgcHJpdi0+c2V0dGluZ3MudXNl
clN0eWxlc2hlZXQgPSBlaW5hX3N0cmluZ3NoYXJlX2FkZCh1cmwuc3RyaW5nKCkudXRmOCgpLmRh
dGEoKSk7CisKKyAgICBwcml2LT5zZXR0aW5ncy5lbmNvZGluZ0RlZmF1bHQgPSBlaW5hX3N0cmlu
Z3NoYXJlX2FkZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBy
aXYtPnBhZ2VTZXR0aW5ncy0+ZGVmYXVsdFRleHRFbmNvZGluZ05hbWUoKS51dGY4KCkuZGF0YSgp
KTsKKyAgICBwcml2LT5zZXR0aW5ncy5lbmNvZGluZ0N1c3RvbSA9IDA7CisKKyAgICBzdHJpbmcg
PSBwcml2LT5wYWdlU2V0dGluZ3MtPmxvY2FsU3RvcmFnZURhdGFiYXNlUGF0aCgpOworICAgIHBy
aXYtPnNldHRpbmdzLmxvY2FsU3RvcmFnZURhdGFiYXNlUGF0aCA9IGVpbmFfc3RyaW5nc2hhcmVf
YWRkKHN0cmluZy5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKworICAgIHByaXYtPnNldHRpbmdz
LmZvbnRNaW5pbXVtU2l6ZSA9IHByaXYtPnBhZ2VTZXR0aW5ncy0+bWluaW11bUZvbnRTaXplKCk7
CisgICAgcHJpdi0+c2V0dGluZ3MuZm9udE1pbmltdW1Mb2dpY2FsU2l6ZSA9IHByaXYtPnBhZ2VT
ZXR0aW5ncy0+bWluaW11bUxvZ2ljYWxGb250U2l6ZSgpOworICAgIHByaXYtPnNldHRpbmdzLmZv
bnREZWZhdWx0U2l6ZSA9IHByaXYtPnBhZ2VTZXR0aW5ncy0+ZGVmYXVsdEZvbnRTaXplKCk7Cisg
ICAgcHJpdi0+c2V0dGluZ3MuZm9udE1vbm9zcGFjZVNpemUgPSBwcml2LT5wYWdlU2V0dGluZ3Mt
PmRlZmF1bHRGaXhlZEZvbnRTaXplKCk7CisKKyAgICBzdHJpbmcgPSBwcml2LT5wYWdlU2V0dGlu
Z3MtPnN0YW5kYXJkRm9udEZhbWlseSgpOworICAgIHByaXYtPnNldHRpbmdzLmZvbnRTdGFuZGFy
ZCA9IGVpbmFfc3RyaW5nc2hhcmVfYWRkKHN0cmluZy5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsK
KyAgICBzdHJpbmcgPSBwcml2LT5wYWdlU2V0dGluZ3MtPmN1cnNpdmVGb250RmFtaWx5KCk7Cisg
ICAgcHJpdi0+c2V0dGluZ3MuZm9udEN1cnNpdmUgPSBlaW5hX3N0cmluZ3NoYXJlX2FkZChzdHJp
bmcuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgc3RyaW5nID0gcHJpdi0+cGFnZVNldHRp
bmdzLT5maXhlZEZvbnRGYW1pbHkoKTsKKyAgICBwcml2LT5zZXR0aW5ncy5mb250TW9ub3NwYWNl
ID0gZWluYV9zdHJpbmdzaGFyZV9hZGQoc3RyaW5nLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwor
ICAgIHN0cmluZyA9IHByaXYtPnBhZ2VTZXR0aW5ncy0+ZmFudGFzeUZvbnRGYW1pbHkoKTsKKyAg
ICBwcml2LT5zZXR0aW5ncy5mb250RmFudGFzeSA9IGVpbmFfc3RyaW5nc2hhcmVfYWRkKHN0cmlu
Zy5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBzdHJpbmcgPSBwcml2LT5wYWdlU2V0dGlu
Z3MtPnNlcmlmRm9udEZhbWlseSgpOworICAgIHByaXYtPnNldHRpbmdzLmZvbnRTZXJpZiA9IGVp
bmFfc3RyaW5nc2hhcmVfYWRkKHN0cmluZy5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBz
dHJpbmcgPSBwcml2LT5wYWdlU2V0dGluZ3MtPnNhbnNTZXJpZkZvbnRGYW1pbHkoKTsKKyAgICBw
cml2LT5zZXR0aW5ncy5mb250U2Fuc1NlcmlmID0gZWluYV9zdHJpbmdzaGFyZV9hZGQoc3RyaW5n
LnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworCisgICAgcHJpdi0+c2V0dGluZ3MuYXV0b0xvYWRJ
bWFnZXMgPSBwcml2LT5wYWdlU2V0dGluZ3MtPmxvYWRzSW1hZ2VzQXV0b21hdGljYWxseSgpOwor
ICAgIHByaXYtPnNldHRpbmdzLmF1dG9TaHJpbmtJbWFnZXMgPSBwcml2LT5wYWdlU2V0dGluZ3Mt
PnNocmlua3NTdGFuZGFsb25lSW1hZ2VzVG9GaXQoKTsKKyAgICBwcml2LT5zZXR0aW5ncy5lbmFi
bGVBdXRvUmVzaXplV2luZG93ID0gRUlOQV9UUlVFOworICAgIHByaXYtPnNldHRpbmdzLmVuYWJs
ZURldmVsb3BlckV4dHJhcyA9IHByaXYtPnBhZ2VTZXR0aW5ncy0+ZGV2ZWxvcGVyRXh0cmFzRW5h
YmxlZCgpOworICAgIHByaXYtPnNldHRpbmdzLmVuYWJsZVNjcmlwdHMgPSBwcml2LT5wYWdlU2V0
dGluZ3MtPmlzSmF2YVNjcmlwdEVuYWJsZWQoKTsKKyAgICBwcml2LT5zZXR0aW5ncy5lbmFibGVQ
bHVnaW5zID0gcHJpdi0+cGFnZVNldHRpbmdzLT5hcmVQbHVnaW5zRW5hYmxlZCgpOworICAgIHBy
aXYtPnNldHRpbmdzLmVuYWJsZUZyYW1lRmxhdHRlbmluZyA9IHByaXYtPnBhZ2VTZXR0aW5ncy0+
ZnJhbWVGbGF0dGVuaW5nRW5hYmxlZCgpOworICAgIHByaXYtPnNldHRpbmdzLnNjcmlwdHNXaW5k
b3dPcGVuID0gcHJpdi0+cGFnZVNldHRpbmdzLT5qYXZhU2NyaXB0Q2FuT3BlbldpbmRvd3NBdXRv
bWF0aWNhbGx5KCk7CisgICAgcHJpdi0+c2V0dGluZ3Muc2NyaXB0c0NhbkNsb3NlV2luZG93cyA9
IHByaXYtPnBhZ2VTZXR0aW5ncy0+YWxsb3dTY3JpcHRzVG9DbG9zZVdpbmRvd3MoKTsKKyAgICBw
cml2LT5zZXR0aW5ncy5yZXNpemFibGVUZXh0YXJlYXMgPSBwcml2LT5wYWdlU2V0dGluZ3MtPnRl
eHRBcmVhc0FyZVJlc2l6YWJsZSgpOworICAgIHByaXYtPnNldHRpbmdzLnByaXZhdGVCcm93c2lu
ZyA9IHByaXYtPnBhZ2VTZXR0aW5ncy0+cHJpdmF0ZUJyb3dzaW5nRW5hYmxlZCgpOworICAgIHBy
aXYtPnNldHRpbmdzLmNhcmV0QnJvd3NpbmcgPSBwcml2LT5wYWdlU2V0dGluZ3MtPmNhcmV0QnJv
d3NpbmdFbmFibGVkKCk7CisgICAgcHJpdi0+c2V0dGluZ3Muc3BhdGlhbE5hdmlnYXRpb24gPSBw
cml2LT5wYWdlU2V0dGluZ3MtPmlzU3BhdGlhbE5hdmlnYXRpb25FbmFibGVkKCk7CisgICAgcHJp
di0+c2V0dGluZ3MubG9jYWxTdG9yYWdlID0gcHJpdi0+cGFnZVNldHRpbmdzLT5sb2NhbFN0b3Jh
Z2VFbmFibGVkKCk7CisgICAgcHJpdi0+c2V0dGluZ3Mub2ZmbGluZUFwcENhY2hlID0gdHJ1ZTsg
Ly8gWFhYIG5vIGZ1bmN0aW9uIHRvIHJlYWQgc2V0dGluZzsgdGhpcyBrZWVwcyB0aGUgb3JpZ2lu
YWwgc2V0dGluZworICAgIHByaXYtPnNldHRpbmdzLnBhZ2VDYWNoZSA9IHByaXYtPnBhZ2VTZXR0
aW5ncy0+dXNlc1BhZ2VDYWNoZSgpOworICAgIHByaXYtPnNldHRpbmdzLmVuY29kaW5nRGV0ZWN0
b3IgPSBwcml2LT5wYWdlU2V0dGluZ3MtPnVzZXNFbmNvZGluZ0RldGVjdG9yKCk7CisKKyAgICBw
cml2LT5zZXR0aW5ncy51c2VyQWdlbnQgPSBld2tfc2V0dGluZ3NfZGVmYXVsdF91c2VyX2FnZW50
X2dldCgpOwogCiAgICAgLy8gU2luY2UgdGhlcmUncyBubyBzY2FsZSBzZXBhcmF0ZWQgZnJvbSB6
b29taW5nIGluIHdlYmtpdC1lZmwsIHRoaXMgZnVuY3Rpb25hbGl0eSBvZgogICAgIC8vIHZpZXdw
b3J0IG1ldGEgdGFnIGlzIGltcGxlbWVudGVkIHVzaW5nIHpvb20uIFdoZW4gc2NhbGUgem9vbSBp
cyBzdXBwb3J0ZWQgYnkgd2Via2l0LWVmbCwKICAgICAvLyB0aGlzIGZ1bmN0aW9uYWxpdHkgd2ls
bCBiZSBtb2RpZmllZCBieSB0aGUgc2NhbGUgem9vbSBwYXRjaC4KLSAgICBwcml2LT5zZXR0aW5n
cy56b29tX3JhbmdlLm1pbl9zY2FsZSA9IFpPT01fTUlOOwotICAgIHByaXYtPnNldHRpbmdzLnpv
b21fcmFuZ2UubWF4X3NjYWxlID0gWk9PTV9NQVg7Ci0gICAgcHJpdi0+c2V0dGluZ3Muem9vbV9y
YW5nZS51c2VyX3NjYWxhYmxlID0gRUlOQV9UUlVFOwotICAgIHByaXYtPnNldHRpbmdzLmRldmlj
ZV9waXhlbF9yYXRpbyA9IERFVklDRV9QSVhFTF9SQVRJTzsKKyAgICBwcml2LT5zZXR0aW5ncy56
b29tUmFuZ2UubWluU2NhbGUgPSBaT09NX01JTjsKKyAgICBwcml2LT5zZXR0aW5ncy56b29tUmFu
Z2UubWF4U2NhbGUgPSBaT09NX01BWDsKKyAgICBwcml2LT5zZXR0aW5ncy56b29tUmFuZ2UudXNl
clNjYWxhYmxlID0gRUlOQV9UUlVFOworICAgIHByaXYtPnNldHRpbmdzLmRldmljZVBpeGVsUmF0
aW8gPSBERVZJQ0VfUElYRUxfUkFUSU87CiAKLSAgICBwcml2LT5zZXR0aW5ncy5kb21fdGltZXJf
aW50ZXJ2YWwgPSBwcml2LT5wYWdlX3NldHRpbmdzLT5kZWZhdWx0TWluRE9NVGltZXJJbnRlcnZh
bCgpOworICAgIHByaXYtPnNldHRpbmdzLmRvbVRpbWVySW50ZXJ2YWwgPSBwcml2LT5wYWdlU2V0
dGluZ3MtPmRlZmF1bHRNaW5ET01UaW1lckludGVydmFsKCk7CiAKLSAgICBwcml2LT5tYWluX2Zy
YW1lID0gX2V3a192aWV3X2NvcmVfZnJhbWVfbmV3KHNtYXJ0RGF0YSwgcHJpdiwgMCkuZ2V0KCk7
Ci0gICAgaWYgKCFwcml2LT5tYWluX2ZyYW1lKSB7CisgICAgcHJpdi0+bWFpbkZyYW1lID0gX2V3
a192aWV3X2NvcmVfZnJhbWVfbmV3KHNtYXJ0RGF0YSwgcHJpdiwgMCkuZ2V0KCk7CisgICAgaWYg
KCFwcml2LT5tYWluRnJhbWUpIHsKICAgICAgICAgQ1JJVElDQUwoIkNvdWxkIG5vdCBjcmVhdGUg
bWFpbiBmcmFtZS4iKTsKICAgICAgICAgZ290byBlcnJvcl9tYWluX2ZyYW1lOwogICAgIH0KQEAg
LTcwMSwyMCArNzAxLDIwIEBAIHN0YXRpYyB2b2lkIF9ld2tfdmlld19wcml2X2RlbChFd2tfVmll
d19Qcml2YXRlX0RhdGEqIHByaXYpCiAgICAgZnJlZShwcml2LT5yZXBhaW50cy5hcnJheSk7CiAg
ICAgZnJlZShwcml2LT5zY3JvbGxzLmFycmF5KTsKIAotICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVs
KHByaXYtPnNldHRpbmdzLnVzZXJfYWdlbnQpOwotICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVsKHBy
aXYtPnNldHRpbmdzLnVzZXJfc3R5bGVzaGVldCk7Ci0gICAgZWluYV9zdHJpbmdzaGFyZV9kZWwo
cHJpdi0+c2V0dGluZ3MuZW5jb2RpbmdfZGVmYXVsdCk7Ci0gICAgZWluYV9zdHJpbmdzaGFyZV9k
ZWwocHJpdi0+c2V0dGluZ3MuZW5jb2RpbmdfY3VzdG9tKTsKLSAgICBlaW5hX3N0cmluZ3NoYXJl
X2RlbChwcml2LT5zZXR0aW5ncy5mb250X3N0YW5kYXJkKTsKLSAgICBlaW5hX3N0cmluZ3NoYXJl
X2RlbChwcml2LT5zZXR0aW5ncy5mb250X2N1cnNpdmUpOwotICAgIGVpbmFfc3RyaW5nc2hhcmVf
ZGVsKHByaXYtPnNldHRpbmdzLmZvbnRfbW9ub3NwYWNlKTsKLSAgICBlaW5hX3N0cmluZ3NoYXJl
X2RlbChwcml2LT5zZXR0aW5ncy5mb250X2ZhbnRhc3kpOwotICAgIGVpbmFfc3RyaW5nc2hhcmVf
ZGVsKHByaXYtPnNldHRpbmdzLmZvbnRfc2VyaWYpOwotICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVs
KHByaXYtPnNldHRpbmdzLmZvbnRfc2Fuc19zZXJpZik7Ci0gICAgZWluYV9zdHJpbmdzaGFyZV9k
ZWwocHJpdi0+c2V0dGluZ3MubG9jYWxfc3RvcmFnZV9kYXRhYmFzZV9wYXRoKTsKLQotICAgIGlm
IChwcml2LT5hbmltYXRlZF96b29tLmFuaW1hdG9yKQotICAgICAgICBlY29yZV9hbmltYXRvcl9k
ZWwocHJpdi0+YW5pbWF0ZWRfem9vbS5hbmltYXRvcik7CisgICAgZWluYV9zdHJpbmdzaGFyZV9k
ZWwocHJpdi0+c2V0dGluZ3MudXNlckFnZW50KTsKKyAgICBlaW5hX3N0cmluZ3NoYXJlX2RlbChw
cml2LT5zZXR0aW5ncy51c2VyU3R5bGVzaGVldCk7CisgICAgZWluYV9zdHJpbmdzaGFyZV9kZWwo
cHJpdi0+c2V0dGluZ3MuZW5jb2RpbmdEZWZhdWx0KTsKKyAgICBlaW5hX3N0cmluZ3NoYXJlX2Rl
bChwcml2LT5zZXR0aW5ncy5lbmNvZGluZ0N1c3RvbSk7CisgICAgZWluYV9zdHJpbmdzaGFyZV9k
ZWwocHJpdi0+c2V0dGluZ3MuZm9udFN0YW5kYXJkKTsKKyAgICBlaW5hX3N0cmluZ3NoYXJlX2Rl
bChwcml2LT5zZXR0aW5ncy5mb250Q3Vyc2l2ZSk7CisgICAgZWluYV9zdHJpbmdzaGFyZV9kZWwo
cHJpdi0+c2V0dGluZ3MuZm9udE1vbm9zcGFjZSk7CisgICAgZWluYV9zdHJpbmdzaGFyZV9kZWwo
cHJpdi0+c2V0dGluZ3MuZm9udEZhbnRhc3kpOworICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVsKHBy
aXYtPnNldHRpbmdzLmZvbnRTZXJpZik7CisgICAgZWluYV9zdHJpbmdzaGFyZV9kZWwocHJpdi0+
c2V0dGluZ3MuZm9udFNhbnNTZXJpZik7CisgICAgZWluYV9zdHJpbmdzaGFyZV9kZWwocHJpdi0+
c2V0dGluZ3MubG9jYWxTdG9yYWdlRGF0YWJhc2VQYXRoKTsKKworICAgIGlmIChwcml2LT5hbmlt
YXRlZFpvb20uYW5pbWF0b3IpCisgICAgICAgIGVjb3JlX2FuaW1hdG9yX2RlbChwcml2LT5hbmlt
YXRlZFpvb20uYW5pbWF0b3IpOwogCiAgICAgZXdrX2hpc3RvcnlfZnJlZShwcml2LT5oaXN0b3J5
KTsKIApAQCAtNzI1LDcyICs3MjUsNzIgQEAgc3RhdGljIHZvaWQgX2V3a192aWV3X3ByaXZfZGVs
KEV3a19WaWV3X1ByaXZhdGVfRGF0YSogcHJpdikKIHN0YXRpYyB2b2lkIF9ld2tfdmlld19zbWFy
dF9hZGQoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7CiAgICAgY29uc3QgRXZhc19TbWFydCogc21h
cnQgPSBldmFzX29iamVjdF9zbWFydF9zbWFydF9nZXQoZXdrVmlldyk7Ci0gICAgY29uc3QgRXZh
c19TbWFydF9DbGFzcyogc2MgPSBldmFzX3NtYXJ0X2NsYXNzX2dldChzbWFydCk7Ci0gICAgY29u
c3QgRXdrX1ZpZXdfU21hcnRfQ2xhc3MqIGFwaSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgRXdr
X1ZpZXdfU21hcnRfQ2xhc3MqPihzYyk7CisgICAgY29uc3QgRXZhc19TbWFydF9DbGFzcyogc21h
cnRDbGFzcyA9IGV2YXNfc21hcnRfY2xhc3NfZ2V0KHNtYXJ0KTsKKyAgICBjb25zdCBFd2tfVmll
d19TbWFydF9DbGFzcyogYXBpID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBFd2tfVmlld19TbWFy
dF9DbGFzcyo+KHNtYXJ0Q2xhc3MpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGFw
aS0+YmFja2luZ19zdG9yZV9hZGQpOwotICAgIEVXS19WSUVXX1NEX0dFVChld2tWaWV3LCBzZCk7
CisgICAgRVdLX1ZJRVdfU0RfR0VUKGV3a1ZpZXcsIHNtYXJ0RGF0YSk7CiAKLSAgICBpZiAoIXNk
KSB7Ci0gICAgICAgIHNkID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGNhbGxv
YygxLCBzaXplb2YoRXdrX1ZpZXdfU21hcnRfRGF0YSkpKTsKLSAgICAgICAgaWYgKCFzZCkgewor
ICAgIGlmICghc21hcnREYXRhKSB7CisgICAgICAgIHNtYXJ0RGF0YSA9IHN0YXRpY19jYXN0PEV3
a19WaWV3X1NtYXJ0X0RhdGEqPihjYWxsb2MoMSwgc2l6ZW9mKEV3a19WaWV3X1NtYXJ0X0RhdGEp
KSk7CisgICAgICAgIGlmICghc21hcnREYXRhKSB7CiAgICAgICAgICAgICBDUklUSUNBTCgiY291
bGQgbm90IGFsbG9jYXRlIEV3a19WaWV3X1NtYXJ0X0RhdGEiKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQotICAgICAgICBldmFzX29iamVjdF9zbWFydF9kYXRhX3NldChld2tWaWV3
LCBzZCk7CisgICAgICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2RhdGFfc2V0KGV3a1ZpZXcsIHNtYXJ0
RGF0YSk7CiAgICAgfQogCi0gICAgc2QtPmJnX2NvbG9yLnIgPSAyNTU7Ci0gICAgc2QtPmJnX2Nv
bG9yLmcgPSAyNTU7Ci0gICAgc2QtPmJnX2NvbG9yLmIgPSAyNTU7Ci0gICAgc2QtPmJnX2NvbG9y
LmEgPSAyNTU7CisgICAgc21hcnREYXRhLT5iZ19jb2xvci5yID0gMjU1OworICAgIHNtYXJ0RGF0
YS0+YmdfY29sb3IuZyA9IDI1NTsKKyAgICBzbWFydERhdGEtPmJnX2NvbG9yLmIgPSAyNTU7Cisg
ICAgc21hcnREYXRhLT5iZ19jb2xvci5hID0gMjU1OwogCi0gICAgc2QtPnNlbGYgPSBld2tWaWV3
OwotICAgIHNkLT5fcHJpdiA9IF9ld2tfdmlld19wcml2X25ldyhzZCk7Ci0gICAgc2QtPmFwaSA9
IGFwaTsKKyAgICBzbWFydERhdGEtPnNlbGYgPSBld2tWaWV3OworICAgIHNtYXJ0RGF0YS0+X3By
aXYgPSBfZXdrX3ZpZXdfcHJpdl9uZXcoc21hcnREYXRhKTsKKyAgICBzbWFydERhdGEtPmFwaSA9
IGFwaTsKIAogICAgIF9wYXJlbnRfc2MuYWRkKGV3a1ZpZXcpOwogCi0gICAgaWYgKCFzZC0+X3By
aXYpCisgICAgaWYgKCFzbWFydERhdGEtPl9wcml2KQogICAgICAgICByZXR1cm47CiAKLSAgICBF
V0tfVklFV19QUklWX0dFVChzZCwgcHJpdik7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVQoc21hcnRE
YXRhLCBwcml2KTsKIAotICAgIHNkLT5iYWNraW5nX3N0b3JlID0gYXBpLT5iYWNraW5nX3N0b3Jl
X2FkZChzZCk7Ci0gICAgaWYgKCFzZC0+YmFja2luZ19zdG9yZSkgeworICAgIHNtYXJ0RGF0YS0+
YmFja2luZ19zdG9yZSA9IGFwaS0+YmFja2luZ19zdG9yZV9hZGQoc21hcnREYXRhKTsKKyAgICBp
ZiAoIXNtYXJ0RGF0YS0+YmFja2luZ19zdG9yZSkgewogICAgICAgICBFUlIoIkNvdWxkIG5vdCBj
cmVhdGUgYmFja2luZyBzdG9yZSBvYmplY3QuIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBldmFzX29iamVjdF9zbWFydF9tZW1iZXJfYWRkKHNkLT5iYWNraW5nX3N0b3JlLCBld2tW
aWV3KTsKLSAgICBldmFzX29iamVjdF9zaG93KHNkLT5iYWNraW5nX3N0b3JlKTsKLSAgICBldmFz
X29iamVjdF9wYXNzX2V2ZW50c19zZXQoc2QtPmJhY2tpbmdfc3RvcmUsIEVJTkFfVFJVRSk7Cisg
ICAgZXZhc19vYmplY3Rfc21hcnRfbWVtYmVyX2FkZChzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUs
IGV3a1ZpZXcpOworICAgIGV2YXNfb2JqZWN0X3Nob3coc21hcnREYXRhLT5iYWNraW5nX3N0b3Jl
KTsKKyAgICBldmFzX29iamVjdF9wYXNzX2V2ZW50c19zZXQoc21hcnREYXRhLT5iYWNraW5nX3N0
b3JlLCBFSU5BX1RSVUUpOwogCi0gICAgc2QtPmV2ZW50c19yZWN0ID0gZXZhc19vYmplY3RfcmVj
dGFuZ2xlX2FkZChzZC0+YmFzZS5ldmFzKTsKLSAgICBldmFzX29iamVjdF9jb2xvcl9zZXQoc2Qt
PmV2ZW50c19yZWN0LCAwLCAwLCAwLCAwKTsKLSAgICBldmFzX29iamVjdF9zbWFydF9tZW1iZXJf
YWRkKHNkLT5ldmVudHNfcmVjdCwgZXdrVmlldyk7Ci0gICAgZXZhc19vYmplY3Rfc2hvdyhzZC0+
ZXZlbnRzX3JlY3QpOworICAgIHNtYXJ0RGF0YS0+ZXZlbnRzX3JlY3QgPSBldmFzX29iamVjdF9y
ZWN0YW5nbGVfYWRkKHNtYXJ0RGF0YS0+YmFzZS5ldmFzKTsKKyAgICBldmFzX29iamVjdF9jb2xv
cl9zZXQoc21hcnREYXRhLT5ldmVudHNfcmVjdCwgMCwgMCwgMCwgMCk7CisgICAgZXZhc19vYmpl
Y3Rfc21hcnRfbWVtYmVyX2FkZChzbWFydERhdGEtPmV2ZW50c19yZWN0LCBld2tWaWV3KTsKKyAg
ICBldmFzX29iamVjdF9zaG93KHNtYXJ0RGF0YS0+ZXZlbnRzX3JlY3QpOwogCi0gICAgc2QtPm1h
aW5fZnJhbWUgPSBld2tfZnJhbWVfYWRkKHNkLT5iYXNlLmV2YXMpOwotICAgIGlmICghc2QtPm1h
aW5fZnJhbWUpIHsKKyAgICBzbWFydERhdGEtPm1haW5fZnJhbWUgPSBld2tfZnJhbWVfYWRkKHNt
YXJ0RGF0YS0+YmFzZS5ldmFzKTsKKyAgICBpZiAoIXNtYXJ0RGF0YS0+bWFpbl9mcmFtZSkgewog
ICAgICAgICBFUlIoIkNvdWxkIG5vdCBjcmVhdGUgbWFpbiBmcmFtZSBvYmplY3QuIik7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAoIWV3a19mcmFtZV9pbml0KHNkLT5tYWluX2Zy
YW1lLCBld2tWaWV3LCBwcml2LT5tYWluX2ZyYW1lKSkgeworICAgIGlmICghZXdrX2ZyYW1lX2lu
aXQoc21hcnREYXRhLT5tYWluX2ZyYW1lLCBld2tWaWV3LCBwcml2LT5tYWluRnJhbWUpKSB7CiAg
ICAgICAgIEVSUigiQ291bGQgbm90IGluaXRpYWxpemUgbWFpbiBmcm1lIG9iamVjdC4iKTsKLSAg
ICAgICAgZXZhc19vYmplY3RfZGVsKHNkLT5tYWluX2ZyYW1lKTsKLSAgICAgICAgc2QtPm1haW5f
ZnJhbWUgPSAwOworICAgICAgICBldmFzX29iamVjdF9kZWwoc21hcnREYXRhLT5tYWluX2ZyYW1l
KTsKKyAgICAgICAgc21hcnREYXRhLT5tYWluX2ZyYW1lID0gMDsKIAotICAgICAgICBkZWxldGUg
cHJpdi0+bWFpbl9mcmFtZTsKLSAgICAgICAgcHJpdi0+bWFpbl9mcmFtZSA9IDA7CisgICAgICAg
IGRlbGV0ZSBwcml2LT5tYWluRnJhbWU7CisgICAgICAgIHByaXYtPm1haW5GcmFtZSA9IDA7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBldmFzX29iamVjdF9uYW1lX3NldChzZC0+bWFp
bl9mcmFtZSwgIkVXS19GcmFtZTptYWluIik7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfbWVtYmVy
X2FkZChzZC0+bWFpbl9mcmFtZSwgZXdrVmlldyk7Ci0gICAgZXZhc19vYmplY3Rfc2hvdyhzZC0+
bWFpbl9mcmFtZSk7CisgICAgZXZhc19vYmplY3RfbmFtZV9zZXQoc21hcnREYXRhLT5tYWluX2Zy
YW1lLCAiRVdLX0ZyYW1lOm1haW4iKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9tZW1iZXJfYWRk
KHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSwgZXdrVmlldyk7CisgICAgZXZhc19vYmplY3Rfc2hvdyhz
bWFydERhdGEtPm1haW5fZnJhbWUpOwogCi0jZGVmaW5lIENPTk5FQ1QocywgYykgZXZhc19vYmpl
Y3RfZXZlbnRfY2FsbGJhY2tfYWRkKGV3a1ZpZXcsIHMsIGMsIHNkKQorI2RlZmluZSBDT05ORUNU
KHMsIGMpIGV2YXNfb2JqZWN0X2V2ZW50X2NhbGxiYWNrX2FkZChld2tWaWV3LCBzLCBjLCBzbWFy
dERhdGEpCiAgICAgQ09OTkVDVChFVkFTX0NBTExCQUNLX0ZPQ1VTX0lOLCBfZXdrX3ZpZXdfb25f
Zm9jdXNfaW4pOwogICAgIENPTk5FQ1QoRVZBU19DQUxMQkFDS19GT0NVU19PVVQsIF9ld2tfdmll
d19vbl9mb2N1c19vdXQpOwogICAgIENPTk5FQ1QoRVZBU19DQUxMQkFDS19NT1VTRV9XSEVFTCwg
X2V3a192aWV3X29uX21vdXNlX3doZWVsKTsKQEAgLTgwNCw4ICs4MDQsOCBAQCBzdGF0aWMgdm9p
ZCBfZXdrX3ZpZXdfc21hcnRfYWRkKEV2YXNfT2JqZWN0KiBld2tWaWV3KQogCiBzdGF0aWMgdm9p
ZCBfZXdrX3ZpZXdfc21hcnRfZGVsKEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19W
SUVXX1NEX0dFVChld2tWaWV3LCBzZCk7Ci0gICAgRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKiBwcml2
ID0gc2QgPyBzZC0+X3ByaXYgOiAwOworICAgIEVXS19WSUVXX1NEX0dFVChld2tWaWV3LCBzbWFy
dERhdGEpOworICAgIEV3a19WaWV3X1ByaXZhdGVfRGF0YSogcHJpdiA9IHNtYXJ0RGF0YSA/IHNt
YXJ0RGF0YS0+X3ByaXYgOiAwOwogCiAgICAgZXdrX3ZpZXdfc3RvcChld2tWaWV3KTsKICAgICBf
cGFyZW50X3NjLmRlbChld2tWaWV3KTsKQEAgLTgxNCwxMDMgKzgxNCwxMDMgQEAgc3RhdGljIHZv
aWQgX2V3a192aWV3X3NtYXJ0X2RlbChFdmFzX09iamVjdCogZXdrVmlldykKIAogc3RhdGljIHZv
aWQgX2V3a192aWV3X3NtYXJ0X3Jlc2l6ZShFdmFzX09iamVjdCogZXdrVmlldywgRXZhc19Db29y
ZCB3LCBFdmFzX0Nvb3JkIGgpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tW
aWV3LCBzZCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERh
dGEpOwogCiAgICAgLy8gdGhlc2Ugc2hvdWxkIGJlIHF1ZXVlZCBhbmQgcHJvY2Vzc2VkIGluIGNh
bGN1bGF0ZSBhcyB3ZWxsIQotICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShzZC0+YmFja2luZ19zdG9y
ZSwgdywgaCk7CisgICAgZXZhc19vYmplY3RfcmVzaXplKHNtYXJ0RGF0YS0+YmFja2luZ19zdG9y
ZSwgdywgaCk7CiAKLSAgICBzZC0+Y2hhbmdlZC5zaXplID0gRUlOQV9UUlVFOwotICAgIF9ld2tf
dmlld19zbWFydF9jaGFuZ2VkKHNkKTsKKyAgICBzbWFydERhdGEtPmNoYW5nZWQuc2l6ZSA9IEVJ
TkFfVFJVRTsKKyAgICBfZXdrX3ZpZXdfc21hcnRfY2hhbmdlZChzbWFydERhdGEpOwogfQogCiBz
dGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21hcnRfbW92ZShFdmFzX09iamVjdCogZXdrVmlldywgRXZh
c19Db29yZCB4LCBFdmFzX0Nvb3JkIHkpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
Tihld2tWaWV3LCBzZCk7Ci0gICAgc2QtPmNoYW5nZWQucG9zaXRpb24gPSBFSU5BX1RSVUU7Ci0g
ICAgX2V3a192aWV3X3NtYXJ0X2NoYW5nZWQoc2QpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9S
RVRVUk4oZXdrVmlldywgc21hcnREYXRhKTsKKyAgICBzbWFydERhdGEtPmNoYW5nZWQucG9zaXRp
b24gPSBFSU5BX1RSVUU7CisgICAgX2V3a192aWV3X3NtYXJ0X2NoYW5nZWQoc21hcnREYXRhKTsK
IH0KIAogc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X2NhbGN1bGF0ZShFdmFzX09iamVjdCog
ZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVQoZXdrVmlldywgc2QpOwotICAgIEVXS19W
SUVXX1BSSVZfR0VUKHNkLCBwcml2KTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihz
ZC0+YXBpLT5jb250ZW50c19yZXNpemUpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJO
KHNkLT5hcGktPnNjcm9sbHNfcHJvY2Vzcyk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk4oc2QtPmFwaS0+cmVwYWludHNfcHJvY2Vzcyk7Ci0gICAgRXZhc19Db29yZCB4LCB5LCB3LCBo
OworICAgIEVXS19WSUVXX1NEX0dFVChld2tWaWV3LCBzbWFydERhdGEpOworICAgIEVXS19WSUVX
X1BSSVZfR0VUKHNtYXJ0RGF0YSwgcHJpdik7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk4oc21hcnREYXRhLT5hcGktPmNvbnRlbnRzX3Jlc2l6ZSk7CisgICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk4oc21hcnREYXRhLT5hcGktPnNjcm9sbHNfcHJvY2Vzcyk7CisgICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRhLT5hcGktPnJlcGFpbnRzX3Byb2Nlc3MpOwor
ICAgIEV2YXNfQ29vcmQgeCwgeSwgd2lkdGgsIGhlaWdodDsKIAotICAgIHNkLT5jaGFuZ2VkLmFu
eSA9IEVJTkFfRkFMU0U7CisgICAgc21hcnREYXRhLT5jaGFuZ2VkLmFueSA9IEVJTkFfRkFMU0U7
CiAKLSAgICBpZiAoIXNkLT5tYWluX2ZyYW1lIHx8ICFwcml2LT5tYWluX2ZyYW1lKQorICAgIGlm
ICghc21hcnREYXRhLT5tYWluX2ZyYW1lIHx8ICFwcml2LT5tYWluRnJhbWUpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldChld2tWaWV3LCAmeCwgJnksICZ3
LCAmaCk7CisgICAgZXZhc19vYmplY3RfZ2VvbWV0cnlfZ2V0KGV3a1ZpZXcsICZ4LCAmeSwgJndp
ZHRoLCAmaGVpZ2h0KTsKIAogICAgIERCRygiZXdrVmlldz0lcCBnZW89WyVkLCAlZCArICVkeCVk
XSwgY2hhbmdlZDogc2l6ZT0laGh1LCAiCiAgICAgICAgICJzY3JvbGxzPSV6dSwgcmVwYWludHM9
JXp1IiwKLSAgICAgICAgZXdrVmlldywgeCwgeSwgdywgaCwgc2QtPmNoYW5nZWQuc2l6ZSwKKyAg
ICAgICAgZXdrVmlldywgeCwgeSwgd2lkdGgsIGhlaWdodCwgc21hcnREYXRhLT5jaGFuZ2VkLnNp
emUsCiAgICAgICAgIHByaXYtPnNjcm9sbHMuY291bnQsIHByaXYtPnJlcGFpbnRzLmNvdW50KTsK
IAotICAgIGlmIChzZC0+Y2hhbmdlZC5zaXplICYmICgodyAhPSBzZC0+dmlldy53KSB8fCAoaCAh
PSBzZC0+dmlldy5oKSkpIHsKLSAgICAgICAgV2ViQ29yZTo6RnJhbWVWaWV3KiB2aWV3ID0gcHJp
di0+bWFpbl9mcmFtZS0+dmlldygpOworICAgIGlmIChzbWFydERhdGEtPmNoYW5nZWQuc2l6ZSAm
JiAoKHdpZHRoICE9IHNtYXJ0RGF0YS0+dmlldy53KSB8fCAoaGVpZ2h0ICE9IHNtYXJ0RGF0YS0+
dmlldy5oKSkpIHsKKyAgICAgICAgV2ViQ29yZTo6RnJhbWVWaWV3KiB2aWV3ID0gcHJpdi0+bWFp
bkZyYW1lLT52aWV3KCk7CiAgICAgICAgIGlmICh2aWV3KSB7Ci0gICAgICAgICAgICB2aWV3LT5y
ZXNpemUodywgaCk7CisgICAgICAgICAgICB2aWV3LT5yZXNpemUod2lkdGgsIGhlaWdodCk7CiAg
ICAgICAgICAgICB2aWV3LT5mb3JjZUxheW91dCgpOwogICAgICAgICAgICAgdmlldy0+YWRqdXN0
Vmlld1NpemUoKTsKICAgICAgICAgfQotICAgICAgICBldmFzX29iamVjdF9yZXNpemUoc2QtPm1h
aW5fZnJhbWUsIHcsIGgpOwotICAgICAgICBldmFzX29iamVjdF9yZXNpemUoc2QtPmV2ZW50c19y
ZWN0LCB3LCBoKTsKLSAgICAgICAgc2QtPmNoYW5nZWQuZnJhbWVfcmVjdCA9IEVJTkFfVFJVRTsK
LSAgICAgICAgc2QtPnZpZXcudyA9IHc7Ci0gICAgICAgIHNkLT52aWV3LmggPSBoOworICAgICAg
ICBldmFzX29iamVjdF9yZXNpemUoc21hcnREYXRhLT5tYWluX2ZyYW1lLCB3aWR0aCwgaGVpZ2h0
KTsKKyAgICAgICAgZXZhc19vYmplY3RfcmVzaXplKHNtYXJ0RGF0YS0+ZXZlbnRzX3JlY3QsIHdp
ZHRoLCBoZWlnaHQpOworICAgICAgICBzbWFydERhdGEtPmNoYW5nZWQuZnJhbWVfcmVjdCA9IEVJ
TkFfVFJVRTsKKyAgICAgICAgc21hcnREYXRhLT52aWV3LncgPSB3aWR0aDsKKyAgICAgICAgc21h
cnREYXRhLT52aWV3LmggPSBoZWlnaHQ7CiAKLSAgICAgICAgX2V3a192aWV3X3JlcGFpbnRfYWRk
KHByaXYsIDAsIDAsIHcsIGgpOworICAgICAgICBfZXdrX3ZpZXdfcmVwYWludF9hZGQocHJpdiwg
MCwgMCwgd2lkdGgsIGhlaWdodCk7CiAKICAgICAgICAgLy8gVGhpcyBjYWxsYmFjayBpcyBhIGdv
b2QgcGxhY2UgZS5nLiB0byBjaGFuZ2UgZml4ZWQgbGF5b3V0IHNpemUgKGV3a192aWV3X2ZpeGVk
X2xheW91dF9zaXplX3NldCkuCiAgICAgICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2Nh
bGwoZXdrVmlldywgInZpZXcscmVzaXplZCIsIDApOwogICAgIH0KLSAgICBzZC0+Y2hhbmdlZC5z
aXplID0gRUlOQV9GQUxTRTsKKyAgICBzbWFydERhdGEtPmNoYW5nZWQuc2l6ZSA9IEVJTkFfRkFM
U0U7CiAKLSAgICBpZiAoc2QtPmNoYW5nZWQucG9zaXRpb24gJiYgKCh4ICE9IHNkLT52aWV3Lngp
IHx8ICh5ICE9IHNkLT52aWV3LnkpKSkgewotICAgICAgICBldmFzX29iamVjdF9tb3ZlKHNkLT5t
YWluX2ZyYW1lLCB4LCB5KTsKLSAgICAgICAgZXZhc19vYmplY3RfbW92ZShzZC0+YmFja2luZ19z
dG9yZSwgeCwgeSk7Ci0gICAgICAgIGV2YXNfb2JqZWN0X21vdmUoc2QtPmV2ZW50c19yZWN0LCB4
LCB5KTsKLSAgICAgICAgc2QtPmNoYW5nZWQuZnJhbWVfcmVjdCA9IEVJTkFfVFJVRTsKLSAgICAg
ICAgc2QtPnZpZXcueCA9IHg7Ci0gICAgICAgIHNkLT52aWV3LnkgPSB5OworICAgIGlmIChzbWFy
dERhdGEtPmNoYW5nZWQucG9zaXRpb24gJiYgKCh4ICE9IHNtYXJ0RGF0YS0+dmlldy54KSB8fCAo
eSAhPSBzbWFydERhdGEtPnZpZXcueSkpKSB7CisgICAgICAgIGV2YXNfb2JqZWN0X21vdmUoc21h
cnREYXRhLT5tYWluX2ZyYW1lLCB4LCB5KTsKKyAgICAgICAgZXZhc19vYmplY3RfbW92ZShzbWFy
dERhdGEtPmJhY2tpbmdfc3RvcmUsIHgsIHkpOworICAgICAgICBldmFzX29iamVjdF9tb3ZlKHNt
YXJ0RGF0YS0+ZXZlbnRzX3JlY3QsIHgsIHkpOworICAgICAgICBzbWFydERhdGEtPmNoYW5nZWQu
ZnJhbWVfcmVjdCA9IEVJTkFfVFJVRTsKKyAgICAgICAgc21hcnREYXRhLT52aWV3LnggPSB4Owor
ICAgICAgICBzbWFydERhdGEtPnZpZXcueSA9IHk7CiAgICAgfQotICAgIHNkLT5jaGFuZ2VkLnBv
c2l0aW9uID0gRUlOQV9GQUxTRTsKKyAgICBzbWFydERhdGEtPmNoYW5nZWQucG9zaXRpb24gPSBF
SU5BX0ZBTFNFOwogCi0gICAgaWYgKCFzZC0+YXBpLT5zY3JvbGxzX3Byb2Nlc3Moc2QpKQorICAg
IGlmICghc21hcnREYXRhLT5hcGktPnNjcm9sbHNfcHJvY2VzcyhzbWFydERhdGEpKQogICAgICAg
ICBFUlIoImZhaWxlZCB0byBwcm9jZXNzIHNjcm9sbHMuIik7CiAgICAgX2V3a192aWV3X3Njcm9s
bHNfZmx1c2gocHJpdik7CiAKLSAgICBpZiAoIXNkLT5hcGktPnJlcGFpbnRzX3Byb2Nlc3Moc2Qp
KQorICAgIGlmICghc21hcnREYXRhLT5hcGktPnJlcGFpbnRzX3Byb2Nlc3Moc21hcnREYXRhKSkK
ICAgICAgICAgRVJSKCJmYWlsZWQgdG8gcHJvY2VzcyByZXBhaW50cy4iKTsKICAgICBfZXdrX3Zp
ZXdfcmVwYWludHNfZmx1c2gocHJpdik7CiAKLSAgICBpZiAoc2QtPmNoYW5nZWQuZnJhbWVfcmVj
dCkgewotICAgICAgICBXZWJDb3JlOjpGcmFtZVZpZXcqIHZpZXcgPSBwcml2LT5tYWluX2ZyYW1l
LT52aWV3KCk7CisgICAgaWYgKHNtYXJ0RGF0YS0+Y2hhbmdlZC5mcmFtZV9yZWN0KSB7CisgICAg
ICAgIFdlYkNvcmU6OkZyYW1lVmlldyogdmlldyA9IHByaXYtPm1haW5GcmFtZS0+dmlldygpOwog
ICAgICAgICB2aWV3LT5mcmFtZVJlY3RzQ2hhbmdlZCgpOyAvKiBmb3JjZSB0cmVlIHRvIGdldCBw
b3NpdGlvbiBmcm9tIHJvb3QgKi8KLSAgICAgICAgc2QtPmNoYW5nZWQuZnJhbWVfcmVjdCA9IEVJ
TkFfRkFMU0U7CisgICAgICAgIHNtYXJ0RGF0YS0+Y2hhbmdlZC5mcmFtZV9yZWN0ID0gRUlOQV9G
QUxTRTsKICAgICB9CiB9CiAKIHN0YXRpYyB2b2lkIF9ld2tfdmlld19zbWFydF9zaG93KEV2YXNf
T2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmll
dywgc2QpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRh
KTsKIAotICAgIGlmIChldmFzX29iamVjdF9jbGlwZWVzX2dldChzZC0+YmFzZS5jbGlwcGVyKSkK
LSAgICAgICAgZXZhc19vYmplY3Rfc2hvdyhzZC0+YmFzZS5jbGlwcGVyKTsKLSAgICBldmFzX29i
amVjdF9zaG93KHNkLT5iYWNraW5nX3N0b3JlKTsKKyAgICBpZiAoZXZhc19vYmplY3RfY2xpcGVl
c19nZXQoc21hcnREYXRhLT5iYXNlLmNsaXBwZXIpKQorICAgICAgICBldmFzX29iamVjdF9zaG93
KHNtYXJ0RGF0YS0+YmFzZS5jbGlwcGVyKTsKKyAgICBldmFzX29iamVjdF9zaG93KHNtYXJ0RGF0
YS0+YmFja2luZ19zdG9yZSk7CiB9CiAKIHN0YXRpYyB2b2lkIF9ld2tfdmlld19zbWFydF9oaWRl
KEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrVmlldywgc2QpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21h
cnREYXRhKTsKIAotICAgIGV2YXNfb2JqZWN0X2hpZGUoc2QtPmJhc2UuY2xpcHBlcik7Ci0gICAg
ZXZhc19vYmplY3RfaGlkZShzZC0+YmFja2luZ19zdG9yZSk7CisgICAgZXZhc19vYmplY3RfaGlk
ZShzbWFydERhdGEtPmJhc2UuY2xpcHBlcik7CisgICAgZXZhc19vYmplY3RfaGlkZShzbWFydERh
dGEtPmJhY2tpbmdfc3RvcmUpOwogfQogCiBzdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19zbWFy
dF9jb250ZW50c19yZXNpemUoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhLCBpbnQgd2lk
dGgsIGludCBoZWlnaHQpCkBAIC05MjEsMjkgKzkyMSwyOSBAQCBzdGF0aWMgRWluYV9Cb29sIF9l
d2tfdmlld19zbWFydF9jb250ZW50c19yZXNpemUoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnRE
YXRhLAogc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfc21hcnRfem9vbV9zZXQoRXdrX1ZpZXdf
U21hcnRfRGF0YSogc21hcnREYXRhLCBmbG9hdCB6b29tLCBFdmFzX0Nvb3JkIGNlbnRlclgsIEV2
YXNfQ29vcmQgY2VudGVyWSkKIHsKICAgICBkb3VibGUgcHgsIHB5OwotICAgIEV2YXNfQ29vcmQg
eCwgeSwgdywgaDsKLSAgICBFaW5hX0Jvb2wgcmV0OworICAgIEV2YXNfQ29vcmQgeCwgeSwgd2lk
dGgsIGhlaWdodDsKKyAgICBFaW5hX0Jvb2wgcmVzdWx0OwogCi0gICAgZXdrX2ZyYW1lX3Njcm9s
bF9zaXplX2dldChzbWFydERhdGEtPm1haW5fZnJhbWUsICZ3LCAmaCk7CisgICAgZXdrX2ZyYW1l
X3Njcm9sbF9zaXplX2dldChzbWFydERhdGEtPm1haW5fZnJhbWUsICZ3aWR0aCwgJmhlaWdodCk7
CiAgICAgZXdrX2ZyYW1lX3Njcm9sbF9wb3NfZ2V0KHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSwgJngs
ICZ5KTsKIAotICAgIGlmICh3ICsgc21hcnREYXRhLT52aWV3LncgPiAwKQotICAgICAgICBweCA9
IHN0YXRpY19jYXN0PGRvdWJsZT4oeCArIGNlbnRlclgpIC8gKHcgKyBzbWFydERhdGEtPnZpZXcu
dyk7CisgICAgaWYgKHdpZHRoICsgc21hcnREYXRhLT52aWV3LncgPiAwKQorICAgICAgICBweCA9
IHN0YXRpY19jYXN0PGRvdWJsZT4oeCArIGNlbnRlclgpIC8gKHdpZHRoICsgc21hcnREYXRhLT52
aWV3LncpOwogICAgIGVsc2UKICAgICAgICAgcHggPSAwLjA7CiAKLSAgICBpZiAoaCArIHNtYXJ0
RGF0YS0+dmlldy5oID4gMCkKLSAgICAgICAgcHkgPSBzdGF0aWNfY2FzdDxkb3VibGU+KHkgKyBj
ZW50ZXJZKSAvIChoICsgc21hcnREYXRhLT52aWV3LmgpOworICAgIGlmIChoZWlnaHQgKyBzbWFy
dERhdGEtPnZpZXcuaCA+IDApCisgICAgICAgIHB5ID0gc3RhdGljX2Nhc3Q8ZG91YmxlPih5ICsg
Y2VudGVyWSkgLyAoaGVpZ2h0ICsgc21hcnREYXRhLT52aWV3LmgpOwogICAgIGVsc2UKICAgICAg
ICAgcHkgPSAwLjA7CiAKLSAgICByZXQgPSBld2tfZnJhbWVfcGFnZV96b29tX3NldChzbWFydERh
dGEtPm1haW5fZnJhbWUsIHpvb20pOworICAgIHJlc3VsdCA9IGV3a19mcmFtZV9wYWdlX3pvb21f
c2V0KHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSwgem9vbSk7CiAKLSAgICBld2tfZnJhbWVfc2Nyb2xs
X3NpemVfZ2V0KHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSwgJncsICZoKTsKLSAgICB4ID0gKHcgKyBz
bWFydERhdGEtPnZpZXcudykgKiBweCAtIGNlbnRlclg7Ci0gICAgeSA9IChoICsgc21hcnREYXRh
LT52aWV3LmgpICogcHkgLSBjZW50ZXJZOworICAgIGV3a19mcmFtZV9zY3JvbGxfc2l6ZV9nZXQo
c21hcnREYXRhLT5tYWluX2ZyYW1lLCAmd2lkdGgsICZoZWlnaHQpOworICAgIHggPSAod2lkdGgg
KyBzbWFydERhdGEtPnZpZXcudykgKiBweCAtIGNlbnRlclg7CisgICAgeSA9IChoZWlnaHQgKyBz
bWFydERhdGEtPnZpZXcuaCkgKiBweSAtIGNlbnRlclk7CiAgICAgZXdrX2ZyYW1lX3Njcm9sbF9z
ZXQoc21hcnREYXRhLT5tYWluX2ZyYW1lLCB4LCB5KTsKLSAgICByZXR1cm4gcmV0OworICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKIHN0YXRpYyB2b2lkIF9ld2tfdmlld19zbWFydF9mbHVzaChFd2tf
Vmlld19TbWFydF9EYXRhKiBzbWFydERhdGEpCkBAIC05ODIsOCArOTgyLDggQEAgc3RhdGljIHZv
aWQgX2V3a192aWV3X3pvb21fYW5pbWF0ZWRfbWFya19zdG9wKEV3a19WaWV3X1NtYXJ0X0RhdGEq
IHNtYXJ0RGF0YSkKIHN0YXRpYyB2b2lkIF9ld2tfdmlld196b29tX2FuaW1hdGVkX2ZpbmlzaChF
d2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEpCiB7CiAgICAgRVdLX1ZJRVdfUFJJVl9HRVQo
c21hcnREYXRhLCBwcml2KTsKLSAgICBlY29yZV9hbmltYXRvcl9kZWwocHJpdi0+YW5pbWF0ZWRf
em9vbS5hbmltYXRvcik7Ci0gICAgcHJpdi0+YW5pbWF0ZWRfem9vbS5hbmltYXRvciA9IDA7Cisg
ICAgZWNvcmVfYW5pbWF0b3JfZGVsKHByaXYtPmFuaW1hdGVkWm9vbS5hbmltYXRvcik7CisgICAg
cHJpdi0+YW5pbWF0ZWRab29tLmFuaW1hdG9yID0gMDsKICAgICBfZXdrX3ZpZXdfem9vbV9hbmlt
YXRlZF9tYXJrX3N0b3Aoc21hcnREYXRhKTsKICAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFj
a19jYWxsKHNtYXJ0RGF0YS0+c2VsZiwgInpvb20sYW5pbWF0ZWQsZW5kIiwgMCk7CiB9CkBAIC05
OTEsNjkgKzk5MSw2OSBAQCBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9maW5p
c2goRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhKQogc3RhdGljIGZsb2F0IF9ld2tfdmll
d196b29tX2FuaW1hdGVkX2N1cnJlbnQoRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKiBwcml2KQogewog
ICAgIGRvdWJsZSBub3cgPSBlY29yZV9sb29wX3RpbWVfZ2V0KCk7Ci0gICAgZG91YmxlIGRlbHRh
ID0gbm93IC0gcHJpdi0+YW5pbWF0ZWRfem9vbS50aW1lLnN0YXJ0OworICAgIGRvdWJsZSBkZWx0
YSA9IG5vdyAtIHByaXYtPmFuaW1hdGVkWm9vbS50aW1lLnN0YXJ0OwogCi0gICAgaWYgKGRlbHRh
ID4gcHJpdi0+YW5pbWF0ZWRfem9vbS50aW1lLmR1cmF0aW9uKQotICAgICAgICBkZWx0YSA9IHBy
aXYtPmFuaW1hdGVkX3pvb20udGltZS5kdXJhdGlvbjsKKyAgICBpZiAoZGVsdGEgPiBwcml2LT5h
bmltYXRlZFpvb20udGltZS5kdXJhdGlvbikKKyAgICAgICAgZGVsdGEgPSBwcml2LT5hbmltYXRl
ZFpvb20udGltZS5kdXJhdGlvbjsKICAgICBpZiAoZGVsdGEgPCAwLjApIC8vIHRpbWUgd2VudCBi
YWNrLCBjbG9jayBhZGp1c3RlZD8KICAgICAgICAgZGVsdGEgPSAwLjA7CiAKLSAgICBkZWx0YSAv
PSBwcml2LT5hbmltYXRlZF96b29tLnRpbWUuZHVyYXRpb247CisgICAgZGVsdGEgLz0gcHJpdi0+
YW5pbWF0ZWRab29tLnRpbWUuZHVyYXRpb247CiAKLSAgICByZXR1cm4gKChwcml2LT5hbmltYXRl
ZF96b29tLnpvb20ucmFuZ2UgKiBkZWx0YSkKLSAgICAgICAgICAgICsgcHJpdi0+YW5pbWF0ZWRf
em9vbS56b29tLnN0YXJ0KTsKKyAgICByZXR1cm4gKChwcml2LT5hbmltYXRlZFpvb20uem9vbS5y
YW5nZSAqIGRlbHRhKQorICAgICAgICAgICAgKyBwcml2LT5hbmltYXRlZFpvb20uem9vbS5zdGFy
dCk7CiB9CiAKIHN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3pvb21fYW5pbWF0b3JfY2Iodm9p
ZCogZGF0YSkKIHsKLSAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzZCA9IHN0YXRpY19jYXN0PEV3
a19WaWV3X1NtYXJ0X0RhdGEqPihkYXRhKTsKLSAgICBFdmFzX0Nvb3JkIGN4LCBjeTsKLSAgICBF
V0tfVklFV19QUklWX0dFVChzZCwgcHJpdik7CisgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc21h
cnREYXRhID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEpOworICAgIEV2
YXNfQ29vcmQgY2VudGVyWCwgY2VudGVyWTsKKyAgICBFV0tfVklFV19QUklWX0dFVChzbWFydERh
dGEsIHByaXYpOwogICAgIGRvdWJsZSBub3cgPSBlY29yZV9sb29wX3RpbWVfZ2V0KCk7CiAKLSAg
ICBjeCA9IHByaXYtPmFuaW1hdGVkX3pvb20uY2VudGVyLng7Ci0gICAgY3kgPSBwcml2LT5hbmlt
YXRlZF96b29tLmNlbnRlci55OworICAgIGNlbnRlclggPSBwcml2LT5hbmltYXRlZFpvb20uY2Vu
dGVyLng7CisgICAgY2VudGVyWSA9IHByaXYtPmFuaW1hdGVkWm9vbS5jZW50ZXIueTsKIAogICAg
IC8vIFRPRE86IHByb2dyZXNzaXZlbHkgY2VudGVyIChjeCwgY3kpIC0+ICh2aWV3LnggKyB2aWV3
LmgvMiwgdmlldy55ICsgdmlldy5oLzIpCi0gICAgaWYgKGN4ID49IHNkLT52aWV3LncpCi0gICAg
ICAgIGN4ID0gc2QtPnZpZXcudyAtIDE7Ci0gICAgaWYgKGN5ID49IHNkLT52aWV3LmgpCi0gICAg
ICAgIGN5ID0gc2QtPnZpZXcuaCAtIDE7Ci0KLSAgICBpZiAoKG5vdyA+PSBwcml2LT5hbmltYXRl
ZF96b29tLnRpbWUuZW5kKQotICAgICAgICB8fCAobm93IDwgcHJpdi0+YW5pbWF0ZWRfem9vbS50
aW1lLnN0YXJ0KSkgewotICAgICAgICBfZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9maW5pc2goc2Qp
OwotICAgICAgICBld2tfdmlld196b29tX3NldChzZC0+c2VsZiwgcHJpdi0+YW5pbWF0ZWRfem9v
bS56b29tLmVuZCwgY3gsIGN5KTsKLSAgICAgICAgc2QtPmFwaS0+c2MuY2FsY3VsYXRlKHNkLT5z
ZWxmKTsKKyAgICBpZiAoY2VudGVyWCA+PSBzbWFydERhdGEtPnZpZXcudykKKyAgICAgICAgY2Vu
dGVyWCA9IHNtYXJ0RGF0YS0+dmlldy53IC0gMTsKKyAgICBpZiAoY2VudGVyWSA+PSBzbWFydERh
dGEtPnZpZXcuaCkKKyAgICAgICAgY2VudGVyWSA9IHNtYXJ0RGF0YS0+dmlldy5oIC0gMTsKKwor
ICAgIGlmICgobm93ID49IHByaXYtPmFuaW1hdGVkWm9vbS50aW1lLmVuZCkKKyAgICAgICAgfHwg
KG5vdyA8IHByaXYtPmFuaW1hdGVkWm9vbS50aW1lLnN0YXJ0KSkgeworICAgICAgICBfZXdrX3Zp
ZXdfem9vbV9hbmltYXRlZF9maW5pc2goc21hcnREYXRhKTsKKyAgICAgICAgZXdrX3ZpZXdfem9v
bV9zZXQoc21hcnREYXRhLT5zZWxmLCBwcml2LT5hbmltYXRlZFpvb20uem9vbS5lbmQsIGNlbnRl
clgsIGNlbnRlclkpOworICAgICAgICBzbWFydERhdGEtPmFwaS0+c2MuY2FsY3VsYXRlKHNtYXJ0
RGF0YS0+c2VsZik7CiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwogICAgIH0KIAotICAgIHNk
LT5hbmltYXRlZF96b29tLnpvb20uY3VycmVudCA9IF9ld2tfdmlld196b29tX2FuaW1hdGVkX2N1
cnJlbnQocHJpdik7Ci0gICAgc2QtPmFwaS0+em9vbV93ZWFrX3NldChzZCwgc2QtPmFuaW1hdGVk
X3pvb20uem9vbS5jdXJyZW50LCBjeCwgY3kpOworICAgIHNtYXJ0RGF0YS0+YW5pbWF0ZWRfem9v
bS56b29tLmN1cnJlbnQgPSBfZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9jdXJyZW50KHByaXYpOwor
ICAgIHNtYXJ0RGF0YS0+YXBpLT56b29tX3dlYWtfc2V0KHNtYXJ0RGF0YSwgc21hcnREYXRhLT5h
bmltYXRlZF96b29tLnpvb20uY3VycmVudCwgY2VudGVyWCwgY2VudGVyWSk7CiAgICAgcmV0dXJu
IEVJTkFfVFJVRTsKIH0KIAogc3RhdGljIHZvaWQgX2V3a192aWV3X3pvb21fYW5pbWF0aW9uX3N0
YXJ0KEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSkKIHsKICAgICBFV0tfVklFV19QUklW
X0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2KTsKLSAgICBpZiAocHJpdi0+YW5pbWF0ZWRf
em9vbS5hbmltYXRvcikKKyAgICBpZiAocHJpdi0+YW5pbWF0ZWRab29tLmFuaW1hdG9yKQogICAg
ICAgICByZXR1cm47Ci0gICAgcHJpdi0+YW5pbWF0ZWRfem9vbS5hbmltYXRvciA9IGVjb3JlX2Fu
aW1hdG9yX2FkZAorICAgIHByaXYtPmFuaW1hdGVkWm9vbS5hbmltYXRvciA9IGVjb3JlX2FuaW1h
dG9yX2FkZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9ld2tfdmll
d196b29tX2FuaW1hdG9yX2NiLCBzbWFydERhdGEpOwogfQogCiBzdGF0aWMgV2ViQ29yZTo6Vmll
d3BvcnRBdHRyaWJ1dGVzIF9ld2tfdmlld192aWV3cG9ydF9hdHRyaWJ1dGVzX2NvbXB1dGUoY29u
c3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUKGV3a1ZpZXcs
IHNkKTsKLSAgICBFV0tfVklFV19QUklWX0dFVChzZCwgcHJpdik7CisgICAgRVdLX1ZJRVdfU0Rf
R0VUKGV3a1ZpZXcsIHNtYXJ0RGF0YSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVQoc21hcnREYXRh
LCBwcml2KTsKIAotICAgIGludCBkZXNrdG9wX3dpZHRoID0gOTgwOwotICAgIGludCBkZXZpY2Vf
ZHBpID0gZXdrX3V0aWxfZHBpX2dldCgpOworICAgIGludCBkZXNrdG9wV2lkdGggPSA5ODA7Cisg
ICAgaW50IGRldmljZURQSSA9IGV3a191dGlsX2RwaV9nZXQoKTsKIAotICAgIFdlYkNvcmU6Oklu
dFJlY3QgYXZhaWxhYmxlX3JlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KHByaXYtPnBhZ2UtPmNocm9t
ZSgpLT5jbGllbnQoKS0+cGFnZVJlY3QoKSk7Ci0gICAgV2ViQ29yZTo6SW50UmVjdCBkZXZpY2Vf
cmVjdCA9IGVuY2xvc2luZ0ludFJlY3QocHJpdi0+cGFnZS0+Y2hyb21lKCktPmNsaWVudCgpLT53
aW5kb3dSZWN0KCkpOworICAgIFdlYkNvcmU6OkludFJlY3QgYXZhaWxhYmxlUmVjdCA9IGVuY2xv
c2luZ0ludFJlY3QocHJpdi0+cGFnZS0+Y2hyb21lKCktPmNsaWVudCgpLT5wYWdlUmVjdCgpKTsK
KyAgICBXZWJDb3JlOjpJbnRSZWN0IGRldmljZVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KHByaXYt
PnBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+d2luZG93UmVjdCgpKTsKIAotICAgIFdlYkNvcmU6
OlZpZXdwb3J0QXR0cmlidXRlcyBhdHRyaWJ1dGVzID0gV2ViQ29yZTo6Y29tcHV0ZVZpZXdwb3J0
QXR0cmlidXRlcyhwcml2LT52aWV3cG9ydF9hcmd1bWVudHMsIGRlc2t0b3Bfd2lkdGgsIGRldmlj
ZV9yZWN0LndpZHRoKCksIGRldmljZV9yZWN0LmhlaWdodCgpLCBkZXZpY2VfZHBpLCBhdmFpbGFi
bGVfcmVjdC5zaXplKCkpOworICAgIFdlYkNvcmU6OlZpZXdwb3J0QXR0cmlidXRlcyBhdHRyaWJ1
dGVzID0gV2ViQ29yZTo6Y29tcHV0ZVZpZXdwb3J0QXR0cmlidXRlcyhwcml2LT52aWV3cG9ydEFy
Z3VtZW50cywgZGVza3RvcFdpZHRoLCBkZXZpY2VSZWN0LndpZHRoKCksIGRldmljZVJlY3QuaGVp
Z2h0KCksIGRldmljZURQSSwgYXZhaWxhYmxlUmVjdC5zaXplKCkpOwogCiAgICAgcmV0dXJuIGF0
dHJpYnV0ZXM7CiB9CkBAIC0xMTIzLDEwICsxMTIzLDEwIEBAIEVpbmFfQm9vbCBld2tfdmlld19i
YXNlX3NtYXJ0X3NldChFd2tfVmlld19TbWFydF9DbGFzcyogYXBpKQogCiB2b2lkIGV3a192aWV3
X2ZpeGVkX2xheW91dF9zaXplX3NldChFdmFzX09iamVjdCogZXdrVmlldywgRXZhc19Db29yZCB3
aWR0aCwgRXZhc19Db29yZCBoZWlnaHQpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
Tihld2tWaWV3LCBzZCk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2
KTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSk7Cisg
ICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdik7CiAKLSAgICBX
ZWJDb3JlOjpGcmFtZVZpZXcqIHZpZXcgPSBwcml2LT5tYWluX2ZyYW1lLT52aWV3KCk7CisgICAg
V2ViQ29yZTo6RnJhbWVWaWV3KiB2aWV3ID0gcHJpdi0+bWFpbkZyYW1lLT52aWV3KCk7CiAgICAg
aWYgKHdpZHRoIDw9IDAgJiYgaGVpZ2h0IDw9IDApIHsKICAgICAgICAgaWYgKCF2aWV3LT51c2VG
aXhlZExheW91dCgpKQogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTE1MSw5ICsxMTUxLDkgQEAg
dm9pZCBld2tfdmlld19maXhlZF9sYXlvdXRfc2l6ZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3
a1ZpZXcsIEV2YXNfQ29vcmQqIHdpZHQKICAgICAgICAgKndpZHRoID0gMDsKICAgICBpZiAoaGVp
Z2h0KQogICAgICAgICAqaGVpZ2h0ID0gMDsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJO
KGV3a1ZpZXcsIHNkKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYp
OwotICAgIFdlYkNvcmU6OkZyYW1lVmlldyogdmlldyA9IHByaXYtPm1haW5fZnJhbWUtPnZpZXco
KTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSk7Cisg
ICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdik7CisgICAgV2Vi
Q29yZTo6RnJhbWVWaWV3KiB2aWV3ID0gcHJpdi0+bWFpbkZyYW1lLT52aWV3KCk7CiAgICAgaWYg
KHZpZXctPnVzZUZpeGVkTGF5b3V0KCkpIHsKICAgICAgICAgV2ViQ29yZTo6SW50U2l6ZSBzaXpl
ID0gdmlldy0+Zml4ZWRMYXlvdXRTaXplKCk7CiAgICAgICAgIGlmICh3aWR0aCkKQEAgLTExNjUs
MTIgKzExNjUsMTIgQEAgdm9pZCBld2tfdmlld19maXhlZF9sYXlvdXRfc2l6ZV9nZXQoY29uc3Qg
RXZhc19PYmplY3QqIGV3a1ZpZXcsIEV2YXNfQ29vcmQqIHdpZHQKIAogdm9pZCBld2tfdmlld190
aGVtZV9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGNvbnN0IGNoYXIqIHBhdGgpCiB7Ci0gICAg
RVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCk7Ci0gICAgRVdLX1ZJRVdfUFJJ
Vl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2KTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJO
KGV3a1ZpZXcsIHNtYXJ0RGF0YSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNt
YXJ0RGF0YSwgcHJpdik7CiAgICAgaWYgKCFlaW5hX3N0cmluZ3NoYXJlX3JlcGxhY2UoJnByaXYt
PnNldHRpbmdzLnRoZW1lLCBwYXRoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgV2ViQ29yZTo6
RnJhbWVWaWV3KiB2aWV3ID0gcHJpdi0+bWFpbl9mcmFtZS0+dmlldygpOworICAgIFdlYkNvcmU6
OkZyYW1lVmlldyogdmlldyA9IHByaXYtPm1haW5GcmFtZS0+dmlldygpOwogICAgIGlmICh2aWV3
KSB7CiAgICAgICAgIHZpZXctPnNldEVkamVUaGVtZShXVEY6OlN0cmluZyhwYXRoKSk7CiAgICAg
ICAgIHByaXYtPnBhZ2UtPnRoZW1lKCktPnRoZW1lQ2hhbmdlZCgpOwpAQCAtMTE4MCwyMSArMTE4
MCwyMSBAQCB2b2lkIGV3a192aWV3X3RoZW1lX3NldChFdmFzX09iamVjdCogZXdrVmlldywgY29u
c3QgY2hhciogcGF0aCkKIAogY29uc3QgY2hhciogZXdrX3ZpZXdfdGhlbWVfZ2V0KGNvbnN0IEV2
YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdr
Vmlldywgc2QsIDApOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwg
MCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIDAp
OworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIDApOwog
ICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy50aGVtZTsKIH0KIAogRXZhc19PYmplY3QqIGV3a192
aWV3X2ZyYW1lX21haW5fZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIDApOwotICAgIHJldHVybiBzZC0+
bWFpbl9mcmFtZTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0
RGF0YSwgMCk7CisgICAgcmV0dXJuIHNtYXJ0RGF0YS0+bWFpbl9mcmFtZTsKIH0KIAogRXZhc19P
YmplY3QqIGV3a192aWV3X2ZyYW1lX2ZvY3VzZWRfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tW
aWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIDApOwot
ICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgMCk7CisgICAgRVdLX1ZJ
RVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIDApOworICAgIEVXS19WSUVX
X1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIDApOwogCiAgICAgV2ViQ29yZTo6
RnJhbWUqIGNvcmUgPSBwcml2LT5wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZEZyYW1l
KCk7CiAgICAgaWYgKCFjb3JlKQpAQCAtMTIwOCwzMyArMTIwOCwzMyBAQCBFdmFzX09iamVjdCog
ZXdrX3ZpZXdfZnJhbWVfZm9jdXNlZF9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiAK
IEVpbmFfQm9vbCBld2tfdmlld191cmlfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBj
aGFyKiB1cmkpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwg
RUlOQV9GQUxTRSk7Ci0gICAgcmV0dXJuIGV3a19mcmFtZV91cmlfc2V0KHNkLT5tYWluX2ZyYW1l
LCB1cmkpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRh
LCBFSU5BX0ZBTFNFKTsKKyAgICByZXR1cm4gZXdrX2ZyYW1lX3VyaV9zZXQoc21hcnREYXRhLT5t
YWluX2ZyYW1lLCB1cmkpOwogfQogCiBjb25zdCBjaGFyKiBld2tfdmlld191cmlfZ2V0KGNvbnN0
IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrVmlldywgc2QsIDApOwotICAgIHJldHVybiBld2tfZnJhbWVfdXJpX2dldChzZC0+bWFpbl9m
cmFtZSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEs
IDApOworICAgIHJldHVybiBld2tfZnJhbWVfdXJpX2dldChzbWFydERhdGEtPm1haW5fZnJhbWUp
OwogfQogCiBjb25zdCBjaGFyKiBld2tfdmlld190aXRsZV9nZXQoY29uc3QgRXZhc19PYmplY3Qq
IGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwg
MCk7Ci0gICAgcmV0dXJuIGV3a19mcmFtZV90aXRsZV9nZXQoc2QtPm1haW5fZnJhbWUpOworICAg
IEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCAwKTsKKyAgICBy
ZXR1cm4gZXdrX2ZyYW1lX3RpdGxlX2dldChzbWFydERhdGEtPm1haW5fZnJhbWUpOwogfQogCiBF
aW5hX0Jvb2wgZXdrX3ZpZXdfZWRpdGFibGVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3
KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFM
U0UpOwotICAgIHJldHVybiBld2tfZnJhbWVfZWRpdGFibGVfZ2V0KHNkLT5tYWluX2ZyYW1lKTsK
KyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9G
QUxTRSk7CisgICAgcmV0dXJuIGV3a19mcmFtZV9lZGl0YWJsZV9nZXQoc21hcnREYXRhLT5tYWlu
X2ZyYW1lKTsKIH0KIAogdm9pZCBld2tfdmlld19iZ19jb2xvcl9zZXQoRXZhc19PYmplY3QqIGV3
a1ZpZXcsIGludCByZWQsIGludCBncmVlbiwgaW50IGJsdWUsIGludCBhbHBoYSkKIHsKLSAgICBF
V0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkKTsKLSAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTihzZC0+YXBpKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihz
ZC0+YXBpLT5iZ19jb2xvcl9zZXQpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdr
Vmlldywgc21hcnREYXRhKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERh
dGEtPmFwaSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRhLT5hcGkt
PmJnX2NvbG9yX3NldCk7CiAKICAgICBpZiAoYWxwaGEgPCAwKSB7CiAgICAgICAgIFdSTigiQWxw
aGEgbGVzcyB0aGFuIHplcm8gKCVkKS4iLCBhbHBoYSk7CkBAIC0xMjQ0LDI4ICsxMjQ0LDI4IEBA
IHZvaWQgZXdrX3ZpZXdfYmdfY29sb3Jfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBpbnQgcmVk
LCBpbnQgZ3JlZW4sIGludCBibHVlLCBpCiAgICAgICAgIGFscGhhID0gMjU1OwogICAgIH0KIAot
I2RlZmluZSBDSEVDS19QUkVNVUxfQ09MT1IoYywgYSkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgIGlmIChjIDwgMCkgeyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBXUk4oIkNvbG9yIGNv
bXBvbmVudCAiICNjICIgaXMgbGVzcyB0aGFuIHplcm8gKCVkKS4iLCBjKTsgICAgICAgICBcCi0g
ICAgICAgIGMgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0gICAgfSBlbHNlIGlmIChjID4gYSkgeyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIFdSTigiQ29sb3IgY29t
cG9uZW50ICIgI2MgIiBpcyBncmVhdGVyIHRoYW4gYWxwaGEgKCVkLCBhbHBoYT0lZCkuIiwgXAot
ICAgICAgICAgICAgYywgYSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgICAgICBjID0gYTsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorI2RlZmluZSBDSEVDS19QUkVNVUxf
Q09MT1IoY29sb3IsIGFscGhhKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgaWYgKGNvbG9yIDwgMCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBXUk4oIkNvbG9yIGNvbXBvbmVudCAi
ICNjb2xvciAiIGlzIGxlc3MgdGhhbiB6ZXJvICglZCkuIiwgY29sb3IpOyAgICAgICAgIFwKKyAg
ICAgICAgY29sb3IgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgfSBlbHNlIGlmIChjb2xvciA+IGFscGhhKSB7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgV1JO
KCJDb2xvciBjb21wb25lbnQgIiAjY29sb3IgIiBpcyBncmVhdGVyIHRoYW4gYWxwaGEgKCVkLCBh
bHBoYT0lZCkuIiwgXAorICAgICAgICAgICAgY29sb3IsIGFscGhhKTsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGNvbG9yID0g
YWxwaGE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKICAgICB9CiAgICAgQ0hFQ0tfUFJFTVVMX0NPTE9SKHJlZCwgYWxwaGEpOwogICAg
IENIRUNLX1BSRU1VTF9DT0xPUihncmVlbiwgYWxwaGEpOwogICAgIENIRUNLX1BSRU1VTF9DT0xP
UihibHVlLCBhbHBoYSk7CiAjdW5kZWYgQ0hFQ0tfUFJFTVVMX0NPTE9SCiAKLSAgICBzZC0+Ymdf
Y29sb3IuciA9IHJlZDsKLSAgICBzZC0+YmdfY29sb3IuZyA9IGdyZWVuOwotICAgIHNkLT5iZ19j
b2xvci5iID0gYmx1ZTsKLSAgICBzZC0+YmdfY29sb3IuYSA9IGFscGhhOworICAgIHNtYXJ0RGF0
YS0+YmdfY29sb3IuciA9IHJlZDsKKyAgICBzbWFydERhdGEtPmJnX2NvbG9yLmcgPSBncmVlbjsK
KyAgICBzbWFydERhdGEtPmJnX2NvbG9yLmIgPSBibHVlOworICAgIHNtYXJ0RGF0YS0+YmdfY29s
b3IuYSA9IGFscGhhOwogCi0gICAgc2QtPmFwaS0+YmdfY29sb3Jfc2V0KHNkLCByZWQsIGdyZWVu
LCBibHVlLCBhbHBoYSk7CisgICAgc21hcnREYXRhLT5hcGktPmJnX2NvbG9yX3NldChzbWFydERh
dGEsIHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKIAotICAgIFdlYkNvcmU6OkZyYW1lVmlldyog
dmlldyA9IHNkLT5fcHJpdi0+bWFpbl9mcmFtZS0+dmlldygpOworICAgIFdlYkNvcmU6OkZyYW1l
VmlldyogdmlldyA9IHNtYXJ0RGF0YS0+X3ByaXYtPm1haW5GcmFtZS0+dmlldygpOwogICAgIGlm
ICh2aWV3KSB7CiAgICAgICAgIFdlYkNvcmU6OkNvbG9yIGNvbG9yOwogCkBAIC0xMjkwLDIxICsx
MjkwLDIxIEBAIHZvaWQgZXdrX3ZpZXdfYmdfY29sb3JfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBl
d2tWaWV3LCBpbnQqIHJlZCwgaW50KiBncmVlbiwgaW50CiAgICAgICAgICpibHVlID0gMDsKICAg
ICBpZiAoYWxwaGEpCiAgICAgICAgICphbHBoYSA9IDA7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihld2tWaWV3LCBzZCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tW
aWV3LCBzbWFydERhdGEpOwogICAgIGlmIChyZWQpCi0gICAgICAgICpyZWQgPSBzZC0+YmdfY29s
b3IucjsKKyAgICAgICAgKnJlZCA9IHNtYXJ0RGF0YS0+YmdfY29sb3IucjsKICAgICBpZiAoZ3Jl
ZW4pCi0gICAgICAgICpncmVlbiA9IHNkLT5iZ19jb2xvci5nOworICAgICAgICAqZ3JlZW4gPSBz
bWFydERhdGEtPmJnX2NvbG9yLmc7CiAgICAgaWYgKGJsdWUpCi0gICAgICAgICpibHVlID0gc2Qt
PmJnX2NvbG9yLmI7CisgICAgICAgICpibHVlID0gc21hcnREYXRhLT5iZ19jb2xvci5iOwogICAg
IGlmIChhbHBoYSkKLSAgICAgICAgKmFscGhhID0gc2QtPmJnX2NvbG9yLmE7CisgICAgICAgICph
bHBoYSA9IHNtYXJ0RGF0YS0+YmdfY29sb3IuYTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3Rl
eHRfc2VhcmNoKGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBjaGFyKiBzdHJpbmcs
IEVpbmFfQm9vbCBjYXNlU2Vuc2l0aXZlLCBFaW5hX0Jvb2wgZm9yd2FyZCwgRWluYV9Cb29sIHdy
YXApCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9G
QUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZB
TFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwg
RUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwg
cHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHN0
cmluZywgRUlOQV9GQUxTRSk7CiAgICAgV1RGOjpUZXh0Q2FzZVNlbnNpdGl2aXR5IHNlbnNpdGl2
ZTsKICAgICBXZWJDb3JlOjpGaW5kRGlyZWN0aW9uIGRpcmVjdGlvbjsKQEAgLTEzMjUsMTggKzEz
MjUsMTggQEAgRWluYV9Cb29sIGV3a192aWV3X3RleHRfc2VhcmNoKGNvbnN0IEV2YXNfT2JqZWN0
KiBld2tWaWV3LCBjb25zdCBjaGFyKiBzdHJpbmcsIEUKIC8qKgogICogTWFyayBtYXRjaGVzIHRo
ZSBnaXZlbiB0ZXh0IHN0cmluZyBpbiBkb2N1bWVudC4KICAqCi0gKiBAcGFyYW0gbyB2aWV3IG9i
amVjdCB3aGVyZSB0byBzZWFyY2ggdGV4dC4KKyAqIEBwYXJhbSBld2tWaWV3IHZpZXcgb2JqZWN0
IHdoZXJlIHRvIHNlYXJjaCB0ZXh0LgogICogQHBhcmFtIHN0cmluZyByZWZlcmVuY2Ugc3RyaW5n
IHRvIG1hdGNoLgogICogQHBhcmFtIGNhc2VTZW5zaXRpdmUgaWYgbWF0Y2ggc2hvdWxkIGJlIGNh
c2Ugc2Vuc2l0aXZlIG9yIG5vdC4KLSAqIEBwYXJhbSBoaWdobGlnaHQgaWYgbWF0Y2hlcyBzaG91
bGQgYmUgaGlnaGxpZ2h0ZWQuCisgKiBAcGFyYW0gaGVpZ2h0aWdobGlnaHQgaWYgbWF0Y2hlcyBz
aG91bGQgYmUgaGlnaGxpZ2h0ZWQuCiAgKiBAcGFyYW0gbGltaXQgbWF4aW11bSBhbW91bnQgb2Yg
bWF0Y2hlcywgb3IgemVybyB0byB1bmxpbWl0ZWQuCiAgKgogICogQHJldHVybiBudW1iZXIgb2Yg
bWF0Y2hlcy4KICAqLwogdW5zaWduZWQgaW50IGV3a192aWV3X3RleHRfbWF0Y2hlc19tYXJrKEV2
YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBjaGFyKiBzdHJpbmcsIEVpbmFfQm9vbCBjYXNlU2Vu
c2l0aXZlLCBFaW5hX0Jvb2wgaGlnaGxpZ2h0LCB1bnNpZ25lZCBpbnQgbGltaXQpCiB7Ci0gICAg
RVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgMCk7Ci0gICAgRVdLX1ZJRVdf
UFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCAwKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1Jf
UkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgMCk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1Jf
UkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgMCk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk5fVkFMKHN0cmluZywgMCk7CiAgICAgV1RGOjpUZXh0Q2FzZVNlbnNpdGl2aXR5IHNlbnNpdGl2
ZTsKIApAQCAtMTM1MCwzOCArMTM1MCwzOCBAQCB1bnNpZ25lZCBpbnQgZXdrX3ZpZXdfdGV4dF9t
YXRjaGVzX21hcmsoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGNvbnN0IGNoYXIqIHN0cmluZwogCiBF
aW5hX0Jvb2wgZXdrX3ZpZXdfdGV4dF9tYXRjaGVzX3VubWFya19hbGwoRXZhc19PYmplY3QqIGV3
a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlO
QV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5B
X0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0
YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0
YSwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgcHJpdi0+cGFnZS0+dW5tYXJrQWxsVGV4dE1hdGNo
ZXMoKTsKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfdGV4
dF9tYXRjaGVzX2hpZ2hsaWdodF9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCBo
aWdobGlnaHQpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwg
RUlOQV9GQUxTRSk7Ci0gICAgcmV0dXJuIGV3a19mcmFtZV90ZXh0X21hdGNoZXNfaGlnaGxpZ2h0
X3NldChzZC0+bWFpbl9mcmFtZSwgaGlnaGxpZ2h0KTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1Jf
UkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgcmV0dXJuIGV3a19m
cmFtZV90ZXh0X21hdGNoZXNfaGlnaGxpZ2h0X3NldChzbWFydERhdGEtPm1haW5fZnJhbWUsIGhp
Z2hsaWdodCk7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld190ZXh0X21hdGNoZXNfaGlnaGxpZ2h0
X2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRf
T1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICByZXR1cm4gZXdrX2ZyYW1l
X3RleHRfbWF0Y2hlc19oaWdobGlnaHRfZ2V0KHNkLT5tYWluX2ZyYW1lKTsKKyAgICBFV0tfVklF
V19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAg
cmV0dXJuIGV3a19mcmFtZV90ZXh0X21hdGNoZXNfaGlnaGxpZ2h0X2dldChzbWFydERhdGEtPm1h
aW5fZnJhbWUpOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfZWRpdGFibGVfc2V0KEV2YXNfT2Jq
ZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wgZWRpdGFibGUpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgcmV0dXJuIGV3a19mcmFt
ZV9lZGl0YWJsZV9zZXQoc2QtPm1haW5fZnJhbWUsIGVkaXRhYmxlKTsKKyAgICBFV0tfVklFV19T
RF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgcmV0
dXJuIGV3a19mcmFtZV9lZGl0YWJsZV9zZXQoc21hcnREYXRhLT5tYWluX2ZyYW1lLCBlZGl0YWJs
ZSk7CiB9CiAKIGNoYXIqIGV3a192aWV3X3NlbGVjdGlvbl9nZXQoY29uc3QgRXZhc19PYmplY3Qq
IGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwg
MCk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCAwKTsKLSAgICBD
U3RyaW5nIHMgPSBwcml2LT5wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZy
YW1lKCktPmVkaXRvcigpLT5zZWxlY3RlZFRleHQoKS51dGY4KCk7Ci0gICAgaWYgKHMuaXNOdWxs
KCkpCisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIDAp
OworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIDApOwor
ICAgIENTdHJpbmcgc2VsZWN0ZWRTdHJpbmcgPSBwcml2LT5wYWdlLT5mb2N1c0NvbnRyb2xsZXIo
KS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCktPmVkaXRvcigpLT5zZWxlY3RlZFRleHQoKS51dGY4KCk7
CisgICAgaWYgKHNlbGVjdGVkU3RyaW5nLmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gMDsKLSAg
ICByZXR1cm4gc3RyZHVwKHMuZGF0YSgpKTsKKyAgICByZXR1cm4gc3RyZHVwKHNlbGVjdGVkU3Ry
aW5nLmRhdGEoKSk7CiB9CiAKIHN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X2VkaXRvcl9jb21t
YW5kKEV3a19WaWV3X1ByaXZhdGVfRGF0YSogcHJpdiwgY29uc3QgY2hhciogY29tbWFuZCwgY29u
c3QgY2hhciogdmFsdWUgPSAwKQpAQCAtMTM5MSw4ICsxMzkxLDggQEAgc3RhdGljIEVpbmFfQm9v
bCBfZXdrX3ZpZXdfZWRpdG9yX2NvbW1hbmQoRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKiBwcml2LCBj
b25zdCBjaGEKIAogRWluYV9Cb29sIGV3a192aWV3X2V4ZWN1dGVfZWRpdG9yX2NvbW1hbmQoRXZh
c19PYmplY3QqIGV3a1ZpZXcsIGNvbnN0IEV3a19FZGl0b3JfQ29tbWFuZCBjb21tYW5kLCBjb25z
dCBjaGFyKiB2YWx1ZSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcs
IHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHBy
aXYsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywg
c21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4o
c21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKIAogICAgIHN3aXRjaCAoY29tbWFuZCkgewog
ICAgIGNhc2UgRVdLX0VESVRPUl9DT01NQU5EX0lOU0VSVF9JTUFHRToKQEAgLTE0MTksMjMgKzE0
MTksMjMgQEAgRWluYV9Cb29sIGV3a192aWV3X2V4ZWN1dGVfZWRpdG9yX2NvbW1hbmQoRXZhc19P
YmplY3QqIGV3a1ZpZXcsIGNvbnN0IEV3a19FZGl0b3IKIEVpbmFfQm9vbCBld2tfdmlld19jb250
ZXh0X21lbnVfZm9yd2FyZF9ldmVudChFdmFzX09iamVjdCogZXdrVmlldywgY29uc3QgRXZhc19F
dmVudF9Nb3VzZV9Eb3duKiBkb3duRXZlbnQpCiB7CiAjaWYgRU5BQkxFKENPTlRFWFRfTUVOVVMp
Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7
Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsK
KyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9G
QUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwg
RUlOQV9GQUxTRSk7CiAgICAgRWluYV9Cb29sIG1vdXNlX3ByZXNzX2hhbmRsZWQgPSBFSU5BX0ZB
TFNFOwogCiAgICAgcHJpdi0+cGFnZS0+Y29udGV4dE1lbnVDb250cm9sbGVyKCktPmNsZWFyQ29u
dGV4dE1lbnUoKTsKLSAgICBXZWJDb3JlOjpGcmFtZSogbWFpbl9mcmFtZSA9IHByaXYtPnBhZ2Ut
Pm1haW5GcmFtZSgpOworICAgIFdlYkNvcmU6OkZyYW1lKiBtYWluRnJhbWUgPSBwcml2LT5wYWdl
LT5tYWluRnJhbWUoKTsKICAgICBFdmFzX0Nvb3JkIHgsIHk7Ci0gICAgZXZhc19vYmplY3RfZ2Vv
bWV0cnlfZ2V0KHNkLT5zZWxmLCAmeCwgJnksIDAsIDApOworICAgIGV2YXNfb2JqZWN0X2dlb21l
dHJ5X2dldChzbWFydERhdGEtPnNlbGYsICZ4LCAmeSwgMCwgMCk7CiAKICAgICBXZWJDb3JlOjpQ
bGF0Zm9ybU1vdXNlRXZlbnQgZXZlbnQoZG93bkV2ZW50LCBXZWJDb3JlOjpJbnRQb2ludCh4LCB5
KSk7CiAKLSAgICBpZiAobWFpbl9mcmFtZS0+dmlldygpKSB7CisgICAgaWYgKG1haW5GcmFtZS0+
dmlldygpKSB7CiAgICAgICAgIG1vdXNlX3ByZXNzX2hhbmRsZWQgPQotICAgICAgICAgICAgbWFp
bl9mcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmhhbmRsZU1vdXNlUHJlc3NFdmVudChldmVudCk7Cisg
ICAgICAgICAgICBtYWluRnJhbWUtPmV2ZW50SGFuZGxlcigpLT5oYW5kbGVNb3VzZVByZXNzRXZl
bnQoZXZlbnQpOwogICAgIH0KIAotICAgIGlmIChtYWluX2ZyYW1lLT5ldmVudEhhbmRsZXIoKS0+
c2VuZENvbnRleHRNZW51RXZlbnQoZXZlbnQpKQorICAgIGlmIChtYWluRnJhbWUtPmV2ZW50SGFu
ZGxlcigpLT5zZW5kQ29udGV4dE1lbnVFdmVudChldmVudCkpCiAgICAgICAgIHJldHVybiBFSU5B
X0ZBTFNFOwogCiAgICAgV2ViQ29yZTo6Q29udGV4dE1lbnUqIGNvcmVNZW51ID0KQEAgLTE0NTQs
ODQgKzE0NTQsODQgQEAgRWluYV9Cb29sIGV3a192aWV3X2NvbnRleHRfbWVudV9mb3J3YXJkX2V2
ZW50KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBFdmFzX0UKIAogZG91YmxlIGV3a192aWV3
X2xvYWRfcHJvZ3Jlc3NfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIC0xLjApOwotICAgIEVXS19WSUVX
X1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgLTEuMCk7CisgICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIC0xLjApOworICAgIEVXS19WSUVXX1BSSVZf
R0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIC0xLjApOwogICAgIHJldHVybiBwcml2LT5w
YWdlLT5wcm9ncmVzcygpLT5lc3RpbWF0ZWRQcm9ncmVzcygpOwogfQogCiBFaW5hX0Jvb2wgZXdr
X3ZpZXdfc3RvcChFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRf
T1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICByZXR1cm4gZXdrX2ZyYW1l
X3N0b3Aoc2QtPm1haW5fZnJhbWUpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdr
Vmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICByZXR1cm4gZXdrX2ZyYW1lX3N0b3Ao
c21hcnREYXRhLT5tYWluX2ZyYW1lKTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3JlbG9hZChF
dmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3
a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICByZXR1cm4gZXdrX2ZyYW1lX3JlbG9hZChzZC0+
bWFpbl9mcmFtZSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFy
dERhdGEsIEVJTkFfRkFMU0UpOworICAgIHJldHVybiBld2tfZnJhbWVfcmVsb2FkKHNtYXJ0RGF0
YS0+bWFpbl9mcmFtZSk7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19yZWxvYWRfZnVsbChFdmFz
X09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1Zp
ZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICByZXR1cm4gZXdrX2ZyYW1lX3JlbG9hZF9mdWxsKHNk
LT5tYWluX2ZyYW1lKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNt
YXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgcmV0dXJuIGV3a19mcmFtZV9yZWxvYWRfZnVsbChz
bWFydERhdGEtPm1haW5fZnJhbWUpOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfYmFjayhFdmFz
X09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1Zp
ZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICByZXR1cm4gZXdrX2ZyYW1lX2JhY2soc2QtPm1haW5f
ZnJhbWUpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRh
LCBFSU5BX0ZBTFNFKTsKKyAgICByZXR1cm4gZXdrX2ZyYW1lX2JhY2soc21hcnREYXRhLT5tYWlu
X2ZyYW1lKTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X2ZvcndhcmQoRXZhc19PYmplY3QqIGV3
a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlO
QV9GQUxTRSk7Ci0gICAgcmV0dXJuIGV3a19mcmFtZV9mb3J3YXJkKHNkLT5tYWluX2ZyYW1lKTsK
KyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9G
QUxTRSk7CisgICAgcmV0dXJuIGV3a19mcmFtZV9mb3J3YXJkKHNtYXJ0RGF0YS0+bWFpbl9mcmFt
ZSk7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19uYXZpZ2F0ZShFdmFzX09iamVjdCogZXdrVmll
dywgaW50IHN0ZXBzKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywg
c2QsIEVJTkFfRkFMU0UpOwotICAgIHJldHVybiBld2tfZnJhbWVfbmF2aWdhdGUoc2QtPm1haW5f
ZnJhbWUsIHN0ZXBzKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNt
YXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgcmV0dXJuIGV3a19mcmFtZV9uYXZpZ2F0ZShzbWFy
dERhdGEtPm1haW5fZnJhbWUsIHN0ZXBzKTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X2JhY2tf
cG9zc2libGUoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgcmV0dXJuIGV3a19mcmFtZV9i
YWNrX3Bvc3NpYmxlKHNkLT5tYWluX2ZyYW1lKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVU
VVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgcmV0dXJuIGV3a19mcmFt
ZV9iYWNrX3Bvc3NpYmxlKHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSk7CiB9CiAKIEVpbmFfQm9vbCBl
d2tfdmlld19mb3J3YXJkX3Bvc3NpYmxlKEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIHJl
dHVybiBld2tfZnJhbWVfZm9yd2FyZF9wb3NzaWJsZShzZC0+bWFpbl9mcmFtZSk7CisgICAgRVdL
X1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOwor
ICAgIHJldHVybiBld2tfZnJhbWVfZm9yd2FyZF9wb3NzaWJsZShzbWFydERhdGEtPm1haW5fZnJh
bWUpOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfbmF2aWdhdGVfcG9zc2libGUoRXZhc19PYmpl
Y3QqIGV3a1ZpZXcsIGludCBzdGVwcykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJO
KGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICByZXR1cm4gZXdrX2ZyYW1lX25hdmlnYXRl
X3Bvc3NpYmxlKHNkLT5tYWluX2ZyYW1lLCBzdGVwcyk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIHJldHVybiBld2tf
ZnJhbWVfbmF2aWdhdGVfcG9zc2libGUoc21hcnREYXRhLT5tYWluX2ZyYW1lLCBzdGVwcyk7CiB9
CiAKIEVpbmFfQm9vbCBld2tfdmlld19oaXN0b3J5X2VuYWJsZV9nZXQoY29uc3QgRXZhc19PYmpl
Y3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBz
ZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2
LCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNt
YXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNt
YXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYkNv
cmU6OkJhY2tGb3J3YXJkTGlzdEltcGwqPihwcml2LT5wYWdlLT5iYWNrRm9yd2FyZExpc3QoKSkt
PmVuYWJsZWQoKTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X2hpc3RvcnlfZW5hYmxlX3NldChF
dmFzX09iamVjdCogZXdrVmlldywgRWluYV9Cb29sIGVuYWJsZSkKIHsKLSAgICBFV0tfVklFV19T
RF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19Q
UklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NE
X0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tf
VklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAg
ICBzdGF0aWNfY2FzdDxXZWJDb3JlOjpCYWNrRm9yd2FyZExpc3RJbXBsKj4ocHJpdi0+cGFnZS0+
YmFja0ZvcndhcmRMaXN0KCkpLT5zZXRFbmFibGVkKGVuYWJsZSk7CiAgICAgcmV0dXJuIEVJTkFf
VFJVRTsKIH0KIAogRXdrX0hpc3RvcnkqIGV3a192aWV3X2hpc3RvcnlfZ2V0KGNvbnN0IEV2YXNf
T2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmll
dywgc2QsIDApOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgMCk7
CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIDApOwor
ICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIDApOwogICAg
IGlmICghc3RhdGljX2Nhc3Q8V2ViQ29yZTo6QmFja0ZvcndhcmRMaXN0SW1wbCo+KHByaXYtPnBh
Z2UtPmJhY2tGb3J3YXJkTGlzdCgpKS0+ZW5hYmxlZCgpKSB7CiAgICAgICAgIEVSUigiYXNrZWQg
aGlzdG9yeSwgYnV0IGl0J3MgZGlzYWJsZWQhIFJldHVybmluZyAwISIpOwogICAgICAgICByZXR1
cm4gMDsKQEAgLTE1NDEsMTg2ICsxNTQxLDE4NiBAQCBFd2tfSGlzdG9yeSogZXdrX3ZpZXdfaGlz
dG9yeV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiAKIGZsb2F0IGV3a192aWV3X3pv
b21fZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dF
VF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIC0xLjApOwotICAgIHJldHVybiBld2tfZnJhbWVfcGFn
ZV96b29tX2dldChzZC0+bWFpbl9mcmFtZSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
Tihld2tWaWV3LCBzbWFydERhdGEsIC0xLjApOworICAgIHJldHVybiBld2tfZnJhbWVfcGFnZV96
b29tX2dldChzbWFydERhdGEtPm1haW5fZnJhbWUpOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdf
em9vbV9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGZsb2F0IHpvb20sIEV2YXNfQ29vcmQgY3gs
IEV2YXNfQ29vcmQgY3kpCitFaW5hX0Jvb2wgZXdrX3ZpZXdfem9vbV9zZXQoRXZhc19PYmplY3Qq
IGV3a1ZpZXcsIGZsb2F0IHpvb20sIEV2YXNfQ29vcmQgY2VudGVyWCwgRXZhc19Db29yZCBjZW50
ZXJZKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFf
RkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUKHNkLCBwcml2KTsKKyAgICBFV0tfVklFV19T
RF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdL
X1ZJRVdfUFJJVl9HRVQoc21hcnREYXRhLCBwcml2KTsKIAotICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOX1ZBTChzZC0+YXBpLCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTl9WQUwoc2QtPmFwaS0+em9vbV9zZXQsIEVJTkFfRkFMU0UpOworICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmFwaSwgRUlOQV9GQUxTRSk7Cisg
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+YXBpLT56b29tX3Nl
dCwgRUlOQV9GQUxTRSk7CiAKLSAgICBpZiAoIXByaXYtPnNldHRpbmdzLnpvb21fcmFuZ2UudXNl
cl9zY2FsYWJsZSkgeworICAgIGlmICghcHJpdi0+c2V0dGluZ3Muem9vbVJhbmdlLnVzZXJTY2Fs
YWJsZSkgewogICAgICAgICBXUk4oInVzZXJTY2FsYWJsZSBpcyBmYWxzZSIpOwogICAgICAgICBy
ZXR1cm4gRUlOQV9GQUxTRTsKICAgICB9CiAKLSAgICBpZiAoem9vbSA8IHByaXYtPnNldHRpbmdz
Lnpvb21fcmFuZ2UubWluX3NjYWxlKSB7Ci0gICAgICAgIFdSTigiem9vbSBsZXZlbCBpcyA8ICVm
IDogJWYiLCBwcml2LT5zZXR0aW5ncy56b29tX3JhbmdlLm1pbl9zY2FsZSwgem9vbSk7CisgICAg
aWYgKHpvb20gPCBwcml2LT5zZXR0aW5ncy56b29tUmFuZ2UubWluU2NhbGUpIHsKKyAgICAgICAg
V1JOKCJ6b29tIGxldmVsIGlzIDwgJWYgOiAlZiIsIHByaXYtPnNldHRpbmdzLnpvb21SYW5nZS5t
aW5TY2FsZSwgem9vbSk7CiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwogICAgIH0KLSAgICBp
ZiAoem9vbSA+IHByaXYtPnNldHRpbmdzLnpvb21fcmFuZ2UubWF4X3NjYWxlKSB7Ci0gICAgICAg
IFdSTigiem9vbSBsZXZlbCBpcyA+ICVmIDogJWYiLCBwcml2LT5zZXR0aW5ncy56b29tX3Jhbmdl
Lm1heF9zY2FsZSwgem9vbSk7CisgICAgaWYgKHpvb20gPiBwcml2LT5zZXR0aW5ncy56b29tUmFu
Z2UubWF4U2NhbGUpIHsKKyAgICAgICAgV1JOKCJ6b29tIGxldmVsIGlzID4gJWYgOiAlZiIsIHBy
aXYtPnNldHRpbmdzLnpvb21SYW5nZS5tYXhTY2FsZSwgem9vbSk7CiAgICAgICAgIHJldHVybiBF
SU5BX0ZBTFNFOwogICAgIH0KIAotICAgIF9ld2tfdmlld196b29tX2FuaW1hdGVkX21hcmtfc3Rv
cChzZCk7Ci0gICAgcmV0dXJuIHNkLT5hcGktPnpvb21fc2V0KHNkLCB6b29tLCBjeCwgY3kpOwor
ICAgIF9ld2tfdmlld196b29tX2FuaW1hdGVkX21hcmtfc3RvcChzbWFydERhdGEpOworICAgIHJl
dHVybiBzbWFydERhdGEtPmFwaS0+em9vbV9zZXQoc21hcnREYXRhLCB6b29tLCBjZW50ZXJYLCBj
ZW50ZXJZKTsKIH0KIAogZmxvYXQgZXdrX3ZpZXdfcGFnZV96b29tX2dldChjb25zdCBFdmFzX09i
amVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcs
IHNkLCAtMS4wKTsKLSAgICByZXR1cm4gZXdrX2ZyYW1lX3BhZ2Vfem9vbV9nZXQoc2QtPm1haW5f
ZnJhbWUpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRh
LCAtMS4wKTsKKyAgICByZXR1cm4gZXdrX2ZyYW1lX3BhZ2Vfem9vbV9nZXQoc21hcnREYXRhLT5t
YWluX2ZyYW1lKTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3BhZ2Vfem9vbV9zZXQoRXZhc19P
YmplY3QqIGV3a1ZpZXcsIGZsb2F0IHBhZ2Vab29tRmFjdG9yKQogewotICAgIEVXS19WSUVXX1NE
X0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIHJldHVybiBld2tf
ZnJhbWVfcGFnZV96b29tX3NldChzZC0+bWFpbl9mcmFtZSwgcGFnZVpvb21GYWN0b3IpOworICAg
IEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNF
KTsKKyAgICByZXR1cm4gZXdrX2ZyYW1lX3BhZ2Vfem9vbV9zZXQoc21hcnREYXRhLT5tYWluX2Zy
YW1lLCBwYWdlWm9vbUZhY3Rvcik7CiB9CiAKIGZsb2F0IGV3a192aWV3X3NjYWxlX2dldChjb25z
dCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJO
KGV3a1ZpZXcsIHNkLCAtMS4wKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2Qs
IHByaXYsIC0xLjApOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21h
cnREYXRhLCAtMS4wKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRh
LCBwcml2LCAtMS4wKTsKICAgICByZXR1cm4gcHJpdi0+cGFnZS0+cGFnZVNjYWxlRmFjdG9yKCk7
CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld19zY2FsZV9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcs
IGZsb2F0IHNjYWxlRmFjdG9yLCBFdmFzX0Nvb3JkIGN4LCBFdmFzX0Nvb3JkIGN5KQorRWluYV9C
b29sIGV3a192aWV3X3NjYWxlX3NldChFdmFzX09iamVjdCogZXdrVmlldywgZmxvYXQgc2NhbGVG
YWN0b3IsIEV2YXNfQ29vcmQgY2VudGVyWCwgRXZhc19Db29yZCBjZW50ZXJZKQogewotICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVX
S19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgRVdL
X1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOwor
ICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFM
U0UpOwogCiAgICAgZmxvYXQgY3VycmVudFNjYWxlRmFjdG9yID0gZXdrX3ZpZXdfc2NhbGVfZ2V0
KGV3a1ZpZXcpOwogICAgIGlmIChjdXJyZW50U2NhbGVGYWN0b3IgPT0gLTEpCiAgICAgICAgIHJl
dHVybiBFSU5BX0ZBTFNFOwogCiAgICAgaW50IHgsIHk7Ci0gICAgZXdrX2ZyYW1lX3Njcm9sbF9w
b3NfZ2V0KHNkLT5tYWluX2ZyYW1lLCAmeCwgJnkpOworICAgIGV3a19mcmFtZV9zY3JvbGxfcG9z
X2dldChzbWFydERhdGEtPm1haW5fZnJhbWUsICZ4LCAmeSk7CiAKLSAgICB4ID0gc3RhdGljX2Nh
c3Q8aW50PigoKHggKyBjeCkgLyBjdXJyZW50U2NhbGVGYWN0b3IpICogc2NhbGVGYWN0b3IpIC0g
Y3g7Ci0gICAgeSA9IHN0YXRpY19jYXN0PGludD4oKCh5ICsgY3kpIC8gY3VycmVudFNjYWxlRmFj
dG9yKSAqIHNjYWxlRmFjdG9yKSAtIGN5OworICAgIHggPSBzdGF0aWNfY2FzdDxpbnQ+KCgoeCAr
IGNlbnRlclgpIC8gY3VycmVudFNjYWxlRmFjdG9yKSAqIHNjYWxlRmFjdG9yKSAtIGNlbnRlclg7
CisgICAgeSA9IHN0YXRpY19jYXN0PGludD4oKCh5ICsgY2VudGVyWSkgLyBjdXJyZW50U2NhbGVG
YWN0b3IpICogc2NhbGVGYWN0b3IpIC0gY2VudGVyWTsKICAgICBwcml2LT5wYWdlLT5zZXRQYWdl
U2NhbGVGYWN0b3Ioc2NhbGVGYWN0b3IsIFdlYkNvcmU6OkxheW91dFBvaW50KHgsIHkpKTsKICAg
ICByZXR1cm4gRUlOQV9UUlVFOwogfQogCiBmbG9hdCBld2tfdmlld190ZXh0X3pvb21fZ2V0KGNv
bnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRV
Uk4oZXdrVmlldywgc2QsIC0xLjApOwotICAgIHJldHVybiBld2tfZnJhbWVfdGV4dF96b29tX2dl
dChzZC0+bWFpbl9mcmFtZSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3
LCBzbWFydERhdGEsIC0xLjApOworICAgIHJldHVybiBld2tfZnJhbWVfdGV4dF96b29tX2dldChz
bWFydERhdGEtPm1haW5fZnJhbWUpOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfdGV4dF96b29t
X3NldChFdmFzX09iamVjdCogZXdrVmlldywgZmxvYXQgdGV4dFpvb21GYWN0b3IpCiB7Ci0gICAg
RVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAg
cmV0dXJuIGV3a19mcmFtZV90ZXh0X3pvb21fc2V0KHNkLT5tYWluX2ZyYW1lLCB0ZXh0Wm9vbUZh
Y3Rvcik7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEs
IEVJTkFfRkFMU0UpOworICAgIHJldHVybiBld2tfZnJhbWVfdGV4dF96b29tX3NldChzbWFydERh
dGEtPm1haW5fZnJhbWUsIHRleHRab29tRmFjdG9yKTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3
X3pvb21fd2Vha19zbW9vdGhfc2NhbGVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQog
ewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0Up
OwotICAgIHJldHVybiBzZC0+em9vbV93ZWFrX3Ntb290aF9zY2FsZTsKKyAgICBFV0tfVklFV19T
RF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgcmV0
dXJuIHNtYXJ0RGF0YS0+em9vbV93ZWFrX3Ntb290aF9zY2FsZTsKIH0KIAogdm9pZCBld2tfdmll
d196b29tX3dlYWtfc21vb3RoX3NjYWxlX3NldChFdmFzX09iamVjdCogZXdrVmlldywgRWluYV9C
b29sIHNtb290aFNjYWxlKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmll
dywgc2QpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRh
KTsKICAgICBzbW9vdGhTY2FsZSA9ICEhc21vb3RoU2NhbGU7Ci0gICAgaWYgKHNkLT56b29tX3dl
YWtfc21vb3RoX3NjYWxlID09IHNtb290aFNjYWxlKQorICAgIGlmIChzbWFydERhdGEtPnpvb21f
d2Vha19zbW9vdGhfc2NhbGUgPT0gc21vb3RoU2NhbGUpCiAgICAgICAgIHJldHVybjsKLSAgICBz
ZC0+em9vbV93ZWFrX3Ntb290aF9zY2FsZSA9IHNtb290aFNjYWxlOwotICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOKHNkLT5hcGkpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJO
KHNkLT5hcGktPnpvb21fd2Vha19zbW9vdGhfc2NhbGVfc2V0KTsKLSAgICBzZC0+YXBpLT56b29t
X3dlYWtfc21vb3RoX3NjYWxlX3NldChzZCwgc21vb3RoU2NhbGUpOworICAgIHNtYXJ0RGF0YS0+
em9vbV93ZWFrX3Ntb290aF9zY2FsZSA9IHNtb290aFNjYWxlOworICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+YXBpKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTihzbWFydERhdGEtPmFwaS0+em9vbV93ZWFrX3Ntb290aF9zY2FsZV9zZXQpOworICAgIHNt
YXJ0RGF0YS0+YXBpLT56b29tX3dlYWtfc21vb3RoX3NjYWxlX3NldChzbWFydERhdGEsIHNtb290
aFNjYWxlKTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3pvb21fd2Vha19zZXQoRXZhc19PYmpl
Y3QqIGV3a1ZpZXcsIGZsb2F0IHpvb20sIEV2YXNfQ29vcmQgY2VudGVyWCwgRXZhc19Db29yZCBj
ZW50ZXJZKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJ
TkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUKHNkLCBwcml2KTsKKyAgICBFV0tfVklF
V19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAg
RVdLX1ZJRVdfUFJJVl9HRVQoc21hcnREYXRhLCBwcml2KTsKIAotICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOX1ZBTChzZC0+YXBpLCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTl9WQUwoc2QtPmFwaS0+em9vbV93ZWFrX3NldCwgRUlOQV9GQUxTRSk7Cisg
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+YXBpLCBFSU5BX0ZB
TFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5hcGkt
Pnpvb21fd2Vha19zZXQsIEVJTkFfRkFMU0UpOwogCi0gICAgaWYgKCFwcml2LT5zZXR0aW5ncy56
b29tX3JhbmdlLnVzZXJfc2NhbGFibGUpIHsKKyAgICBpZiAoIXByaXYtPnNldHRpbmdzLnpvb21S
YW5nZS51c2VyU2NhbGFibGUpIHsKICAgICAgICAgV1JOKCJ1c2VyU2NhbGFibGUgaXMgZmFsc2Ui
KTsKICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CiAgICAgfQogCi0gICAgaWYgKHpvb20gPCBw
cml2LT5zZXR0aW5ncy56b29tX3JhbmdlLm1pbl9zY2FsZSkgewotICAgICAgICBXUk4oInpvb20g
bGV2ZWwgaXMgPCAlZiA6ICVmIiwgcHJpdi0+c2V0dGluZ3Muem9vbV9yYW5nZS5taW5fc2NhbGUs
IHpvb20pOworICAgIGlmICh6b29tIDwgcHJpdi0+c2V0dGluZ3Muem9vbVJhbmdlLm1pblNjYWxl
KSB7CisgICAgICAgIFdSTigiem9vbSBsZXZlbCBpcyA8ICVmIDogJWYiLCBwcml2LT5zZXR0aW5n
cy56b29tUmFuZ2UubWluU2NhbGUsIHpvb20pOwogICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsK
ICAgICB9Ci0gICAgaWYgKHpvb20gPiBwcml2LT5zZXR0aW5ncy56b29tX3JhbmdlLm1heF9zY2Fs
ZSkgewotICAgICAgICBXUk4oInpvb20gbGV2ZWwgaXMgPiAlZiA6ICVmIiwgcHJpdi0+c2V0dGlu
Z3Muem9vbV9yYW5nZS5tYXhfc2NhbGUsIHpvb20pOworICAgIGlmICh6b29tID4gcHJpdi0+c2V0
dGluZ3Muem9vbVJhbmdlLm1heFNjYWxlKSB7CisgICAgICAgIFdSTigiem9vbSBsZXZlbCBpcyA+
ICVmIDogJWYiLCBwcml2LT5zZXR0aW5ncy56b29tUmFuZ2UubWF4U2NhbGUsIHpvb20pOwogICAg
ICAgICByZXR1cm4gRUlOQV9GQUxTRTsKICAgICB9CiAKLSAgICBzZC0+YW5pbWF0ZWRfem9vbS56
b29tLnN0YXJ0ID0gZXdrX2ZyYW1lX3BhZ2Vfem9vbV9nZXQoc2QtPm1haW5fZnJhbWUpOwotICAg
IHNkLT5hbmltYXRlZF96b29tLnpvb20uZW5kID0gem9vbTsKLSAgICBzZC0+YW5pbWF0ZWRfem9v
bS56b29tLmN1cnJlbnQgPSB6b29tOwotICAgIHJldHVybiBzZC0+YXBpLT56b29tX3dlYWtfc2V0
KHNkLCB6b29tLCBjZW50ZXJYLCBjZW50ZXJZKTsKKyAgICBzbWFydERhdGEtPmFuaW1hdGVkX3pv
b20uem9vbS5zdGFydCA9IGV3a19mcmFtZV9wYWdlX3pvb21fZ2V0KHNtYXJ0RGF0YS0+bWFpbl9m
cmFtZSk7CisgICAgc21hcnREYXRhLT5hbmltYXRlZF96b29tLnpvb20uZW5kID0gem9vbTsKKyAg
ICBzbWFydERhdGEtPmFuaW1hdGVkX3pvb20uem9vbS5jdXJyZW50ID0gem9vbTsKKyAgICByZXR1
cm4gc21hcnREYXRhLT5hcGktPnpvb21fd2Vha19zZXQoc21hcnREYXRhLCB6b29tLCBjZW50ZXJY
LCBjZW50ZXJZKTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3pvb21fYW5pbWF0ZWRfbWFya19z
dGFydChFdmFzX09iamVjdCogZXdrVmlldywgZmxvYXQgem9vbSkKIHsKLSAgICBFV0tfVklFV19T
RF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBzZC0+YW5pbWF0
ZWRfem9vbS56b29tLnN0YXJ0ID0gem9vbTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJO
KGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgc21hcnREYXRhLT5hbmltYXRl
ZF96b29tLnpvb20uc3RhcnQgPSB6b29tOwogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKIEVp
bmFfQm9vbCBld2tfdmlld196b29tX2FuaW1hdGVkX21hcmtfZW5kKEV2YXNfT2JqZWN0KiBld2tW
aWV3LCBmbG9hdCB6b29tKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmll
dywgc2QsIEVJTkFfRkFMU0UpOwotICAgIHNkLT5hbmltYXRlZF96b29tLnpvb20uZW5kID0gem9v
bTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlO
QV9GQUxTRSk7CisgICAgc21hcnREYXRhLT5hbmltYXRlZF96b29tLnpvb20uZW5kID0gem9vbTsK
ICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfem9vbV9hbmlt
YXRlZF9tYXJrX2N1cnJlbnQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGZsb2F0IHpvb20pCiB7Ci0g
ICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0g
ICAgc2QtPmFuaW1hdGVkX3pvb20uem9vbS5jdXJyZW50ID0gem9vbTsKKyAgICBFV0tfVklFV19T
RF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgc21h
cnREYXRhLT5hbmltYXRlZF96b29tLnpvb20uY3VycmVudCA9IHpvb207CiAgICAgcmV0dXJuIEVJ
TkFfVFJVRTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3pvb21fYW5pbWF0ZWRfbWFya19zdG9w
KEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIF9ld2tfdmlld196b29tX2FuaW1hdGVkX21h
cmtfc3RvcChzZCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFy
dERhdGEsIEVJTkFfRkFMU0UpOworICAgIF9ld2tfdmlld196b29tX2FuaW1hdGVkX21hcmtfc3Rv
cChzbWFydERhdGEpOwogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKIEVpbmFfQm9vbCBld2tf
dmlld196b29tX2FuaW1hdGVkX3NldChFdmFzX09iamVjdCogZXdrVmlldywgZmxvYXQgem9vbSwg
ZmxvYXQgZHVyYXRpb24sIEV2YXNfQ29vcmQgY2VudGVyWCwgRXZhc19Db29yZCBjZW50ZXJZKQog
ewogICAgIGRvdWJsZSBub3c7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3
LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBw
cml2LCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2Qt
PmFwaSwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNk
LT5hcGktPnpvb21fd2Vha19zZXQsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9P
Ul9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19Q
UklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5hcGksIEVJTkFfRkFMU0UpOwor
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmFwaS0+em9vbV93
ZWFrX3NldCwgRUlOQV9GQUxTRSk7CiAKLSAgICBpZiAoIXByaXYtPnNldHRpbmdzLnpvb21fcmFu
Z2UudXNlcl9zY2FsYWJsZSkgeworICAgIGlmICghcHJpdi0+c2V0dGluZ3Muem9vbVJhbmdlLnVz
ZXJTY2FsYWJsZSkgewogICAgICAgICBXUk4oInVzZXJTY2FsYWJsZSBpcyBmYWxzZSIpOwogICAg
ICAgICByZXR1cm4gRUlOQV9GQUxTRTsKICAgICB9CiAKLSAgICBpZiAoem9vbSA8IHByaXYtPnNl
dHRpbmdzLnpvb21fcmFuZ2UubWluX3NjYWxlKSB7Ci0gICAgICAgIFdSTigiem9vbSBsZXZlbCBp
cyA8ICVmIDogJWYiLCBwcml2LT5zZXR0aW5ncy56b29tX3JhbmdlLm1pbl9zY2FsZSwgem9vbSk7
CisgICAgaWYgKHpvb20gPCBwcml2LT5zZXR0aW5ncy56b29tUmFuZ2UubWluU2NhbGUpIHsKKyAg
ICAgICAgV1JOKCJ6b29tIGxldmVsIGlzIDwgJWYgOiAlZiIsIHByaXYtPnNldHRpbmdzLnpvb21S
YW5nZS5taW5TY2FsZSwgem9vbSk7CiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwogICAgIH0K
LSAgICBpZiAoem9vbSA+IHByaXYtPnNldHRpbmdzLnpvb21fcmFuZ2UubWF4X3NjYWxlKSB7Ci0g
ICAgICAgIFdSTigiem9vbSBsZXZlbCBpcyA+ICVmIDogJWYiLCBwcml2LT5zZXR0aW5ncy56b29t
X3JhbmdlLm1heF9zY2FsZSwgem9vbSk7CisgICAgaWYgKHpvb20gPiBwcml2LT5zZXR0aW5ncy56
b29tUmFuZ2UubWF4U2NhbGUpIHsKKyAgICAgICAgV1JOKCJ6b29tIGxldmVsIGlzID4gJWYgOiAl
ZiIsIHByaXYtPnNldHRpbmdzLnpvb21SYW5nZS5tYXhTY2FsZSwgem9vbSk7CiAgICAgICAgIHJl
dHVybiBFSU5BX0ZBTFNFOwogICAgIH0KIAotICAgIGlmIChwcml2LT5hbmltYXRlZF96b29tLmFu
aW1hdG9yKQotICAgICAgICBwcml2LT5hbmltYXRlZF96b29tLnpvb20uc3RhcnQgPSBfZXdrX3Zp
ZXdfem9vbV9hbmltYXRlZF9jdXJyZW50KHByaXYpOworICAgIGlmIChwcml2LT5hbmltYXRlZFpv
b20uYW5pbWF0b3IpCisgICAgICAgIHByaXYtPmFuaW1hdGVkWm9vbS56b29tLnN0YXJ0ID0gX2V3
a192aWV3X3pvb21fYW5pbWF0ZWRfY3VycmVudChwcml2KTsKICAgICBlbHNlIHsKLSAgICAgICAg
cHJpdi0+YW5pbWF0ZWRfem9vbS56b29tLnN0YXJ0ID0gZXdrX2ZyYW1lX3BhZ2Vfem9vbV9nZXQo
c2QtPm1haW5fZnJhbWUpOwotICAgICAgICBfZXdrX3ZpZXdfem9vbV9hbmltYXRpb25fc3RhcnQo
c2QpOworICAgICAgICBwcml2LT5hbmltYXRlZFpvb20uem9vbS5zdGFydCA9IGV3a19mcmFtZV9w
YWdlX3pvb21fZ2V0KHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSk7CisgICAgICAgIF9ld2tfdmlld196
b29tX2FuaW1hdGlvbl9zdGFydChzbWFydERhdGEpOwogICAgIH0KIAogICAgIGlmIChjZW50ZXJY
IDwgMCkKQEAgLTE3MjksNTAgKzE3MjksNTAgQEAgRWluYV9Cb29sIGV3a192aWV3X3pvb21fYW5p
bWF0ZWRfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBmbG9hdCB6b29tLCBmbG9hdCBkdXIKICAg
ICAgICAgY2VudGVyWSA9IDA7CiAKICAgICBub3cgPSBlY29yZV9sb29wX3RpbWVfZ2V0KCk7Ci0g
ICAgcHJpdi0+YW5pbWF0ZWRfem9vbS50aW1lLnN0YXJ0ID0gbm93OwotICAgIHByaXYtPmFuaW1h
dGVkX3pvb20udGltZS5lbmQgPSBub3cgKyBkdXJhdGlvbjsKLSAgICBwcml2LT5hbmltYXRlZF96
b29tLnRpbWUuZHVyYXRpb24gPSBkdXJhdGlvbjsKLSAgICBwcml2LT5hbmltYXRlZF96b29tLnpv
b20uZW5kID0gem9vbTsKLSAgICBwcml2LT5hbmltYXRlZF96b29tLnpvb20ucmFuZ2UgPSAocHJp
di0+YW5pbWF0ZWRfem9vbS56b29tLmVuZCAtIHByaXYtPmFuaW1hdGVkX3pvb20uem9vbS5zdGFy
dCk7Ci0gICAgcHJpdi0+YW5pbWF0ZWRfem9vbS5jZW50ZXIueCA9IGNlbnRlclg7Ci0gICAgcHJp
di0+YW5pbWF0ZWRfem9vbS5jZW50ZXIueSA9IGNlbnRlclk7Ci0gICAgc2QtPmFuaW1hdGVkX3pv
b20uem9vbS5jdXJyZW50ID0gcHJpdi0+YW5pbWF0ZWRfem9vbS56b29tLnN0YXJ0OwotICAgIHNk
LT5hbmltYXRlZF96b29tLnpvb20uc3RhcnQgPSBwcml2LT5hbmltYXRlZF96b29tLnpvb20uc3Rh
cnQ7Ci0gICAgc2QtPmFuaW1hdGVkX3pvb20uem9vbS5lbmQgPSBwcml2LT5hbmltYXRlZF96b29t
Lnpvb20uZW5kOworICAgIHByaXYtPmFuaW1hdGVkWm9vbS50aW1lLnN0YXJ0ID0gbm93OworICAg
IHByaXYtPmFuaW1hdGVkWm9vbS50aW1lLmVuZCA9IG5vdyArIGR1cmF0aW9uOworICAgIHByaXYt
PmFuaW1hdGVkWm9vbS50aW1lLmR1cmF0aW9uID0gZHVyYXRpb247CisgICAgcHJpdi0+YW5pbWF0
ZWRab29tLnpvb20uZW5kID0gem9vbTsKKyAgICBwcml2LT5hbmltYXRlZFpvb20uem9vbS5yYW5n
ZSA9IChwcml2LT5hbmltYXRlZFpvb20uem9vbS5lbmQgLSBwcml2LT5hbmltYXRlZFpvb20uem9v
bS5zdGFydCk7CisgICAgcHJpdi0+YW5pbWF0ZWRab29tLmNlbnRlci54ID0gY2VudGVyWDsKKyAg
ICBwcml2LT5hbmltYXRlZFpvb20uY2VudGVyLnkgPSBjZW50ZXJZOworICAgIHNtYXJ0RGF0YS0+
YW5pbWF0ZWRfem9vbS56b29tLmN1cnJlbnQgPSBwcml2LT5hbmltYXRlZFpvb20uem9vbS5zdGFy
dDsKKyAgICBzbWFydERhdGEtPmFuaW1hdGVkX3pvb20uem9vbS5zdGFydCA9IHByaXYtPmFuaW1h
dGVkWm9vbS56b29tLnN0YXJ0OworICAgIHNtYXJ0RGF0YS0+YW5pbWF0ZWRfem9vbS56b29tLmVu
ZCA9IHByaXYtPmFuaW1hdGVkWm9vbS56b29tLmVuZDsKIAogICAgIHJldHVybiBFSU5BX1RSVUU7
CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19wcmVfcmVuZGVyX3JlZ2lvbihFdmFzX09iamVjdCog
ZXdrVmlldywgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHksIEV2YXNfQ29vcmQgd2lkdGgsIEV2
YXNfQ29vcmQgaGVpZ2h0LCBmbG9hdCB6b29tKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9S
RVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09S
X1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk5fVkFMKHNkLT5hcGktPnByZV9yZW5kZXJfcmVnaW9uLCBFSU5BX0ZBTFNFKTsKKyAgICBF
V0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7
CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9G
QUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+YXBp
LT5wcmVfcmVuZGVyX3JlZ2lvbiwgRUlOQV9GQUxTRSk7CiAgICAgZmxvYXQgY3VyX3pvb207Ci0g
ICAgRXZhc19Db29yZCBjdywgY2g7CisgICAgRXZhc19Db29yZCBjb250ZW50c1dpZHRoLCBjb250
ZW50c0hlaWdodDsKIAogICAgIC8qIFdoZW4gZG9pbmcgYW5pbWF0ZWQgem9vbSBpdCdzIG5vdCBw
b3NzaWJsZSB0byBjYWxsIHByZS1yZW5kZXIgc2luY2UgaXQKICAgICAgKiB3b3VsZCBzY3JldyB1
cCBwYXJhbWV0ZXJzIHRoYXQgYW5pbWF0aW9uIGlzIGN1cnJlbnRseSB1c2luZwogICAgICAqLwot
ICAgIGlmIChwcml2LT5hbmltYXRlZF96b29tLmFuaW1hdG9yKQorICAgIGlmIChwcml2LT5hbmlt
YXRlZFpvb20uYW5pbWF0b3IpCiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwogCi0gICAgY3Vy
X3pvb20gPSBld2tfZnJhbWVfcGFnZV96b29tX2dldChzZC0+bWFpbl9mcmFtZSk7CisgICAgY3Vy
X3pvb20gPSBld2tfZnJhbWVfcGFnZV96b29tX2dldChzbWFydERhdGEtPm1haW5fZnJhbWUpOwog
CiAgICAgaWYgKGN1cl96b29tIDwgMC4wMDAwMSkKICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7
Ci0gICAgaWYgKCFld2tfZnJhbWVfY29udGVudHNfc2l6ZV9nZXQoc2QtPm1haW5fZnJhbWUsICZj
dywgJmNoKSkKKyAgICBpZiAoIWV3a19mcmFtZV9jb250ZW50c19zaXplX2dldChzbWFydERhdGEt
Pm1haW5fZnJhbWUsICZjb250ZW50c1dpZHRoLCAmY29udGVudHNIZWlnaHQpKQogICAgICAgICBy
ZXR1cm4gRUlOQV9GQUxTRTsKIAotICAgIGN3ICo9IHpvb20gLyBjdXJfem9vbTsKLSAgICBjaCAq
PSB6b29tIC8gY3VyX3pvb207Ci0gICAgREJHKCJyZWdpb24gJWQsJWQrJWR4JWQgQCAlZiBjb250
ZW50cz0lZHglZCIsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHpvb20sIGN3LCBjaCk7CisgICAgY29u
dGVudHNXaWR0aCAqPSB6b29tIC8gY3VyX3pvb207CisgICAgY29udGVudHNIZWlnaHQgKj0gem9v
bSAvIGN1cl96b29tOworICAgIERCRygicmVnaW9uICVkLCVkKyVkeCVkIEAgJWYgY29udGVudHM9
JWR4JWQiLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCB6b29tLCBjb250ZW50c1dpZHRoLCBjb250ZW50
c0hlaWdodCk7CiAKLSAgICBpZiAoeCArIHdpZHRoID4gY3cpCi0gICAgICAgIHdpZHRoID0gY3cg
LSB4OworICAgIGlmICh4ICsgd2lkdGggPiBjb250ZW50c1dpZHRoKQorICAgICAgICB3aWR0aCA9
IGNvbnRlbnRzV2lkdGggLSB4OwogCi0gICAgaWYgKHkgKyBoZWlnaHQgPiBjaCkKLSAgICAgICAg
aGVpZ2h0ID0gY2ggLSB5OworICAgIGlmICh5ICsgaGVpZ2h0ID4gY29udGVudHNIZWlnaHQpCisg
ICAgICAgIGhlaWdodCA9IGNvbnRlbnRzSGVpZ2h0IC0geTsKIAogICAgIGlmICh4IDwgMCkgewog
ICAgICAgICB3aWR0aCArPSB4OwpAQCAtMTc4Myw2NCArMTc4Myw2NCBAQCBFaW5hX0Jvb2wgZXdr
X3ZpZXdfcHJlX3JlbmRlcl9yZWdpb24oRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV2YXNfQ29vcmQg
eCwgRXZhc19DbwogICAgICAgICB5ID0gMDsKICAgICB9CiAKLSAgICByZXR1cm4gc2QtPmFwaS0+
cHJlX3JlbmRlcl9yZWdpb24oc2QsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHpvb20pOworICAgIHJl
dHVybiBzbWFydERhdGEtPmFwaS0+cHJlX3JlbmRlcl9yZWdpb24oc21hcnREYXRhLCB4LCB5LCB3
aWR0aCwgaGVpZ2h0LCB6b29tKTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3ByZV9yZW5kZXJf
cmVsYXRpdmVfcmFkaXVzKEV2YXNfT2JqZWN0KiBld2tWaWV3LCB1bnNpZ25lZCBpbnQgbnVtYmVy
KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFM
U0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxT
RSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5hcGktPnByZV9yZW5k
ZXJfcmVsYXRpdmVfcmFkaXVzLCBFSU5BX0ZBTFNFKTsKLSAgICBmbG9hdCBjdXJfem9vbTsKKyAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxT
RSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlO
QV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+
YXBpLT5wcmVfcmVuZGVyX3JlbGF0aXZlX3JhZGl1cywgRUlOQV9GQUxTRSk7CisgICAgZmxvYXQg
Y3VycmVudFpvb207CiAKLSAgICBpZiAocHJpdi0+YW5pbWF0ZWRfem9vbS5hbmltYXRvcikKKyAg
ICBpZiAocHJpdi0+YW5pbWF0ZWRab29tLmFuaW1hdG9yKQogICAgICAgICByZXR1cm4gRUlOQV9G
QUxTRTsKIAotICAgIGN1cl96b29tID0gZXdrX2ZyYW1lX3BhZ2Vfem9vbV9nZXQoc2QtPm1haW5f
ZnJhbWUpOwotICAgIHJldHVybiBzZC0+YXBpLT5wcmVfcmVuZGVyX3JlbGF0aXZlX3JhZGl1cyhz
ZCwgbnVtYmVyLCBjdXJfem9vbSk7CisgICAgY3VycmVudFpvb20gPSBld2tfZnJhbWVfcGFnZV96
b29tX2dldChzbWFydERhdGEtPm1haW5fZnJhbWUpOworICAgIHJldHVybiBzbWFydERhdGEtPmFw
aS0+cHJlX3JlbmRlcl9yZWxhdGl2ZV9yYWRpdXMoc21hcnREYXRhLCBudW1iZXIsIGN1cnJlbnRa
b29tKTsKIH0KIAogdW5zaWduZWQgaW50IGV3a192aWV3X2ltaF9nZXQoY29uc3QgRXZhc19PYmpl
Y3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBz
ZCwgMCk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCAwKTsKKyAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgMCk7CisgICAg
RVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgMCk7CiAgICAgcmV0
dXJuIHByaXYtPmltaDsKIH0KIAogdm9pZCBld2tfdmlld19wcmVfcmVuZGVyX2NhbmNlbChFdmFz
X09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1Zp
ZXcsIHNkKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpLT5wcmVfcmVu
ZGVyX2NhbmNlbCk7Ci0gICAgc2QtPmFwaS0+cHJlX3JlbmRlcl9jYW5jZWwoc2QpOworICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhKTsKKyAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmFwaS0+cHJlX3JlbmRlcl9jYW5jZWwpOwor
ICAgIHNtYXJ0RGF0YS0+YXBpLT5wcmVfcmVuZGVyX2NhbmNlbChzbWFydERhdGEpOwogfQogCiBF
aW5hX0Jvb2wgZXdrX3ZpZXdfZW5hYmxlX3JlbmRlcihjb25zdCBFdmFzX09iamVjdCogZXdrVmll
dykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZB
TFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmFwaS0+ZW5hYmxl
X3JlbmRlciwgRUlOQV9GQUxTRSk7Ci0gICAgcmV0dXJuIHNkLT5hcGktPmVuYWJsZV9yZW5kZXIo
c2QpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBF
SU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRh
LT5hcGktPmVuYWJsZV9yZW5kZXIsIEVJTkFfRkFMU0UpOworICAgIHJldHVybiBzbWFydERhdGEt
PmFwaS0+ZW5hYmxlX3JlbmRlcihzbWFydERhdGEpOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdf
ZGlzYWJsZV9yZW5kZXIoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJ
RVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5hcGktPmRpc2FibGVfcmVuZGVyLCBFSU5BX0ZB
TFNFKTsKLSAgICByZXR1cm4gc2QtPmFwaS0+ZGlzYWJsZV9yZW5kZXIoc2QpOworICAgIEVXS19W
SUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5hcGktPmRpc2FibGVf
cmVuZGVyLCBFSU5BX0ZBTFNFKTsKKyAgICByZXR1cm4gc21hcnREYXRhLT5hcGktPmRpc2FibGVf
cmVuZGVyKHNtYXJ0RGF0YSk7CiB9CiAKIGNvbnN0IGNoYXIqIGV3a192aWV3X3NldHRpbmdfdXNl
cl9hZ2VudF9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgMCk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRf
T1JfUkVUVVJOKHNkLCBwcml2LCAwKTsKLSAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MudXNlcl9h
Z2VudDsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwg
MCk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgMCk7
CisgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLnVzZXJBZ2VudDsKIH0KIAogRWluYV9Cb29sIGV3
a192aWV3X3NldHRpbmdfdXNlcl9hZ2VudF9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGNvbnN0
IGNoYXIqIHVzZXJBZ2VudCkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1Zp
ZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2Qs
IHByaXYsIEVJTkFfRkFMU0UpOwotICAgIGlmIChlaW5hX3N0cmluZ3NoYXJlX3JlcGxhY2UoJnBy
aXYtPnNldHRpbmdzLnVzZXJfYWdlbnQsIHVzZXJBZ2VudCkpIHsKLSAgICAgICAgV2ViQ29yZTo6
RnJhbWVMb2FkZXJDbGllbnRFZmwqIGNsaWVudCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkZyYW1l
TG9hZGVyQ2xpZW50RWZsKj4ocHJpdi0+bWFpbl9mcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpKTsK
KyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9G
QUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwg
RUlOQV9GQUxTRSk7CisgICAgaWYgKGVpbmFfc3RyaW5nc2hhcmVfcmVwbGFjZSgmcHJpdi0+c2V0
dGluZ3MudXNlckFnZW50LCB1c2VyQWdlbnQpKSB7CisgICAgICAgIFdlYkNvcmU6OkZyYW1lTG9h
ZGVyQ2xpZW50RWZsKiBjbGllbnQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpGcmFtZUxvYWRlckNs
aWVudEVmbCo+KHByaXYtPm1haW5GcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpKTsKICAgICAgICAg
Y2xpZW50LT5zZXRDdXN0b21Vc2VyQWdlbnQoU3RyaW5nOjpmcm9tVVRGOCh1c2VyQWdlbnQpKTsK
ICAgICB9CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKQEAgLTE4NDgsMjIzICsxODQ4LDIyMyBAQCBF
aW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ191c2VyX2FnZW50X3NldChFdmFzX09iamVjdCogZXdr
VmlldywgY29uc3QgY2hhciogdXNlcgogCiBjb25zdCBjaGFyKiBld2tfdmlld19zZXR0aW5nX3Vz
ZXJfc3R5bGVzaGVldF9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdL
X1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgMCk7Ci0gICAgRVdLX1ZJRVdfUFJJ
Vl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCAwKTsKLSAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3Mu
dXNlcl9zdHlsZXNoZWV0OworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywg
c21hcnREYXRhLCAwKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRh
LCBwcml2LCAwKTsKKyAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MudXNlclN0eWxlc2hlZXQ7CiB9
CiAKIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX3VzZXJfc3R5bGVzaGVldF9zZXQoRXZhc19P
YmplY3QqIGV3a1ZpZXcsIGNvbnN0IGNoYXIqIHVyaSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRf
T1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dF
VF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwotICAgIGlmIChlaW5hX3N0cmluZ3No
YXJlX3JlcGxhY2UoJnByaXYtPnNldHRpbmdzLnVzZXJfc3R5bGVzaGVldCwgdXJpKSkgeworICAg
IEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNF
KTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5B
X0ZBTFNFKTsKKyAgICBpZiAoZWluYV9zdHJpbmdzaGFyZV9yZXBsYWNlKCZwcml2LT5zZXR0aW5n
cy51c2VyU3R5bGVzaGVldCwgdXJpKSkgewogICAgICAgICBXZWJDb3JlOjpLVVJMIGt1cmwoV2Vi
Q29yZTo6S1VSTCgpLCBTdHJpbmc6OmZyb21VVEY4KHVyaSkpOwotICAgICAgICBwcml2LT5wYWdl
X3NldHRpbmdzLT5zZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uKGt1cmwpOworICAgICAgICBwcml2
LT5wYWdlU2V0dGluZ3MtPnNldFVzZXJTdHlsZVNoZWV0TG9jYXRpb24oa3VybCk7CiAgICAgfQog
ICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2F1
dG9fbG9hZF9pbWFnZXNfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVX
S19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7Ci0gICAgcmV0
dXJuIHByaXYtPnNldHRpbmdzLmF1dG9fbG9hZF9pbWFnZXM7CisgICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVX
X1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIHJl
dHVybiBwcml2LT5zZXR0aW5ncy5hdXRvTG9hZEltYWdlczsKIH0KIAogRWluYV9Cb29sIGV3a192
aWV3X3NldHRpbmdfYXV0b19sb2FkX2ltYWdlc19zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVp
bmFfQm9vbCBhdXRvbWF0aWMpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tW
aWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNk
LCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1Zp
ZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVU
VVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgYXV0b21hdGljID0gISFhdXRv
bWF0aWM7Ci0gICAgaWYgKHByaXYtPnNldHRpbmdzLmF1dG9fbG9hZF9pbWFnZXMgIT0gYXV0b21h
dGljKSB7Ci0gICAgICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNldExvYWRzSW1hZ2VzQXV0b21h
dGljYWxseShhdXRvbWF0aWMpOwotICAgICAgICBwcml2LT5zZXR0aW5ncy5hdXRvX2xvYWRfaW1h
Z2VzID0gYXV0b21hdGljOworICAgIGlmIChwcml2LT5zZXR0aW5ncy5hdXRvTG9hZEltYWdlcyAh
PSBhdXRvbWF0aWMpIHsKKyAgICAgICAgcHJpdi0+cGFnZVNldHRpbmdzLT5zZXRMb2Fkc0ltYWdl
c0F1dG9tYXRpY2FsbHkoYXV0b21hdGljKTsKKyAgICAgICAgcHJpdi0+c2V0dGluZ3MuYXV0b0xv
YWRJbWFnZXMgPSBhdXRvbWF0aWM7CiAgICAgfQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAK
IEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2F1dG9fc2hyaW5rX2ltYWdlc19nZXQoY29uc3Qg
RXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihl
d2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJO
KHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKLSAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuYXV0b19z
aHJpbmtfaW1hZ2VzOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21h
cnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21h
cnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuYXV0
b1Nocmlua0ltYWdlczsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfYXV0b19zaHJp
bmtfaW1hZ2VzX3NldChFdmFzX09iamVjdCogZXdrVmlldywgRWluYV9Cb29sIGF1dG9tYXRpYykK
IHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNF
KTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0Up
OworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5B
X0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2
LCBFSU5BX0ZBTFNFKTsKICAgICBhdXRvbWF0aWMgPSAhIWF1dG9tYXRpYzsKLSAgICBpZiAocHJp
di0+c2V0dGluZ3MuYXV0b19zaHJpbmtfaW1hZ2VzICE9IGF1dG9tYXRpYykgewotICAgICAgICBw
cml2LT5wYWdlX3NldHRpbmdzLT5zZXRTaHJpbmtzU3RhbmRhbG9uZUltYWdlc1RvRml0KGF1dG9t
YXRpYyk7Ci0gICAgICAgIHByaXYtPnNldHRpbmdzLmF1dG9fc2hyaW5rX2ltYWdlcyA9IGF1dG9t
YXRpYzsKKyAgICBpZiAocHJpdi0+c2V0dGluZ3MuYXV0b1Nocmlua0ltYWdlcyAhPSBhdXRvbWF0
aWMpIHsKKyAgICAgICAgcHJpdi0+cGFnZVNldHRpbmdzLT5zZXRTaHJpbmtzU3RhbmRhbG9uZUlt
YWdlc1RvRml0KGF1dG9tYXRpYyk7CisgICAgICAgIHByaXYtPnNldHRpbmdzLmF1dG9TaHJpbmtJ
bWFnZXMgPSBhdXRvbWF0aWM7CiAgICAgfQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKIEVp
bmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2VuYWJsZV9hdXRvX3Jlc2l6ZV93aW5kb3dfZ2V0KGNv
bnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRV
Uk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JF
VFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7Ci0gICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmVu
YWJsZV9hdXRvX3Jlc2l6ZV93aW5kb3c7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihl
d2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09S
X1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIHJldHVybiBwcml2LT5z
ZXR0aW5ncy5lbmFibGVBdXRvUmVzaXplV2luZG93OwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdf
c2V0dGluZ19lbmFibGVfYXV0b19yZXNpemVfd2luZG93X3NldChFdmFzX09iamVjdCogZXdrVmll
dywgRWluYV9Cb29sIHJlc2l6YWJsZSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJO
KGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRV
Uk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwotICAgIHByaXYtPnNldHRpbmdzLmVuYWJsZV9hdXRv
X3Jlc2l6ZV93aW5kb3cgPSByZXNpemFibGU7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
Tihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VU
X09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIHByaXYtPnNldHRp
bmdzLmVuYWJsZUF1dG9SZXNpemVXaW5kb3cgPSByZXNpemFibGU7CiAgICAgcmV0dXJuIEVJTkFf
VFJVRTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfZW5hYmxlX3NjcmlwdHNfZ2V0
KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9S
RVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09S
X1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7Ci0gICAgcmV0dXJuIHByaXYtPnNldHRpbmdz
LmVuYWJsZV9zY3JpcHRzOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywg
c21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4o
c21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3Mu
ZW5hYmxlU2NyaXB0czsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfZW5hYmxlX3Nj
cmlwdHNfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wgZW5hYmxlKQogewotICAg
IEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAg
IEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAg
RVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0Up
OworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFf
RkFMU0UpOwogICAgIGVuYWJsZSA9ICEhZW5hYmxlOwotICAgIGlmIChwcml2LT5zZXR0aW5ncy5l
bmFibGVfc2NyaXB0cyAhPSBlbmFibGUpIHsKLSAgICAgICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+
c2V0SmF2YVNjcmlwdEVuYWJsZWQoZW5hYmxlKTsKLSAgICAgICAgcHJpdi0+c2V0dGluZ3MuZW5h
YmxlX3NjcmlwdHMgPSBlbmFibGU7CisgICAgaWYgKHByaXYtPnNldHRpbmdzLmVuYWJsZVNjcmlw
dHMgIT0gZW5hYmxlKSB7CisgICAgICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0SmF2YVNjcmlw
dEVuYWJsZWQoZW5hYmxlKTsKKyAgICAgICAgcHJpdi0+c2V0dGluZ3MuZW5hYmxlU2NyaXB0cyA9
IGVuYWJsZTsKICAgICB9CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAogRWluYV9Cb29sIGV3
a192aWV3X3NldHRpbmdfZW5hYmxlX3BsdWdpbnNfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tW
aWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFf
RkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9G
QUxTRSk7Ci0gICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmVuYWJsZV9wbHVnaW5zOworICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsK
KyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZB
TFNFKTsKKyAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZW5hYmxlUGx1Z2luczsKIH0KIAogRWlu
YV9Cb29sIGV3a192aWV3X3NldHRpbmdfZW5hYmxlX3BsdWdpbnNfc2V0KEV2YXNfT2JqZWN0KiBl
d2tWaWV3LCBFaW5hX0Jvb2wgZW5hYmxlKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRV
Uk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JF
VFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
Tihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VU
X09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIGVuYWJsZSA9ICEh
ZW5hYmxlOwotICAgIGlmIChwcml2LT5zZXR0aW5ncy5lbmFibGVfcGx1Z2lucyAhPSBlbmFibGUp
IHsKLSAgICAgICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0UGx1Z2luc0VuYWJsZWQoZW5hYmxl
KTsKLSAgICAgICAgcHJpdi0+c2V0dGluZ3MuZW5hYmxlX3BsdWdpbnMgPSBlbmFibGU7CisgICAg
aWYgKHByaXYtPnNldHRpbmdzLmVuYWJsZVBsdWdpbnMgIT0gZW5hYmxlKSB7CisgICAgICAgIHBy
aXYtPnBhZ2VTZXR0aW5ncy0+c2V0UGx1Z2luc0VuYWJsZWQoZW5hYmxlKTsKKyAgICAgICAgcHJp
di0+c2V0dGluZ3MuZW5hYmxlUGx1Z2lucyA9IGVuYWJsZTsKICAgICB9CiAgICAgcmV0dXJuIEVJ
TkFfVFJVRTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfZW5hYmxlX2ZyYW1lX2Zs
YXR0ZW5pbmdfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVX
X1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVX
X1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7Ci0gICAgcmV0dXJuIHBy
aXYtPnNldHRpbmdzLmVuYWJsZV9mcmFtZV9mbGF0dGVuaW5nOworICAgIEVXS19WSUVXX1NEX0dF
VF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklF
V19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBy
ZXR1cm4gcHJpdi0+c2V0dGluZ3MuZW5hYmxlRnJhbWVGbGF0dGVuaW5nOwogfQogCiBFaW5hX0Jv
b2wgZXdrX3ZpZXdfc2V0dGluZ19lbmFibGVfZnJhbWVfZmxhdHRlbmluZ19zZXQoRXZhc19PYmpl
Y3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCBlbmFibGUpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRf
T1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1Jf
UkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJ
Vl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgZW5hYmxl
ID0gISFlbmFibGU7Ci0gICAgaWYgKHByaXYtPnNldHRpbmdzLmVuYWJsZV9mcmFtZV9mbGF0dGVu
aW5nICE9IGVuYWJsZSkgewotICAgICAgICBwcml2LT5wYWdlX3NldHRpbmdzLT5zZXRGcmFtZUZs
YXR0ZW5pbmdFbmFibGVkKGVuYWJsZSk7Ci0gICAgICAgIHByaXYtPnNldHRpbmdzLmVuYWJsZV9m
cmFtZV9mbGF0dGVuaW5nID0gZW5hYmxlOworICAgIGlmIChwcml2LT5zZXR0aW5ncy5lbmFibGVG
cmFtZUZsYXR0ZW5pbmcgIT0gZW5hYmxlKSB7CisgICAgICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+
c2V0RnJhbWVGbGF0dGVuaW5nRW5hYmxlZChlbmFibGUpOworICAgICAgICBwcml2LT5zZXR0aW5n
cy5lbmFibGVGcmFtZUZsYXR0ZW5pbmcgPSBlbmFibGU7CiAgICAgfQogICAgIHJldHVybiBFSU5B
X1RSVUU7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX3NjcmlwdHNfd2luZG93X29w
ZW5fZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dF
VF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZf
R0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7Ci0gICAgcmV0dXJuIHByaXYtPnNl
dHRpbmdzLnNjcmlwdHNfd2luZG93X29wZW47CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
Tihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VU
X09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIHJldHVybiBwcml2
LT5zZXR0aW5ncy5zY3JpcHRzV2luZG93T3BlbjsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3Nl
dHRpbmdfc2NyaXB0c193aW5kb3dfb3Blbl9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFf
Qm9vbCBhbGxvdykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNk
LCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYs
IEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21h
cnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21h
cnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBhbGxvdyA9ICEhYWxsb3c7Ci0gICAgaWYg
KHByaXYtPnNldHRpbmdzLnNjcmlwdHNfd2luZG93X29wZW4gIT0gYWxsb3cpIHsKLSAgICAgICAg
cHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0SmF2YVNjcmlwdENhbk9wZW5XaW5kb3dzQXV0b21hdGlj
YWxseShhbGxvdyk7Ci0gICAgICAgIHByaXYtPnNldHRpbmdzLnNjcmlwdHNfd2luZG93X29wZW4g
PSBhbGxvdzsKKyAgICBpZiAocHJpdi0+c2V0dGluZ3Muc2NyaXB0c1dpbmRvd09wZW4gIT0gYWxs
b3cpIHsKKyAgICAgICAgcHJpdi0+cGFnZVNldHRpbmdzLT5zZXRKYXZhU2NyaXB0Q2FuT3Blbldp
bmRvd3NBdXRvbWF0aWNhbGx5KGFsbG93KTsKKyAgICAgICAgcHJpdi0+c2V0dGluZ3Muc2NyaXB0
c1dpbmRvd09wZW4gPSBhbGxvdzsKICAgICB9CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAog
RWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfc2NyaXB0c19jYW5fY2xvc2Vfd2luZG93c19nZXQo
Y29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JF
VFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1Jf
UkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKLSAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3Mu
c2NyaXB0c19jYW5fY2xvc2Vfd2luZG93czsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJO
KGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRf
T1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgcmV0dXJuIHByaXYt
PnNldHRpbmdzLnNjcmlwdHNDYW5DbG9zZVdpbmRvd3M7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmll
d19zZXR0aW5nX3NjcmlwdHNfY2FuX2Nsb3NlX3dpbmRvd3Nfc2V0KEV2YXNfT2JqZWN0KiBld2tW
aWV3LCBFaW5hX0Jvb2wgYWxsb3cpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihl
d2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJO
KHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3
a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1Jf
UkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgYWxsb3cgPSAhIWFsbG93
OwotICAgIGlmIChwcml2LT5zZXR0aW5ncy5zY3JpcHRzX2Nhbl9jbG9zZV93aW5kb3dzICE9IGFs
bG93KSB7Ci0gICAgICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNldEFsbG93U2NyaXB0c1RvQ2xv
c2VXaW5kb3dzKGFsbG93KTsKLSAgICAgICAgcHJpdi0+c2V0dGluZ3Muc2NyaXB0c19jYW5fY2xv
c2Vfd2luZG93cyA9IGFsbG93OworICAgIGlmIChwcml2LT5zZXR0aW5ncy5zY3JpcHRzQ2FuQ2xv
c2VXaW5kb3dzICE9IGFsbG93KSB7CisgICAgICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0QWxs
b3dTY3JpcHRzVG9DbG9zZVdpbmRvd3MoYWxsb3cpOworICAgICAgICBwcml2LT5zZXR0aW5ncy5z
Y3JpcHRzQ2FuQ2xvc2VXaW5kb3dzID0gYWxsb3c7CiAgICAgfQogICAgIHJldHVybiBFSU5BX1RS
VUU7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX3Jlc2l6YWJsZV90ZXh0YXJlYXNf
Z2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9P
Ul9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VU
X09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7Ci0gICAgcmV0dXJuIHByaXYtPnNldHRp
bmdzLnJlc2l6YWJsZV90ZXh0YXJlYXM7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihl
d2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09S
X1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIHJldHVybiBwcml2LT5z
ZXR0aW5ncy5yZXNpemFibGVUZXh0YXJlYXM7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19zZXR0
aW5nX3Jlc2l6YWJsZV90ZXh0YXJlYXNfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jv
b2wgZW5hYmxlKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2Qs
IEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwg
RUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFy
dERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFy
dERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIGVuYWJsZSA9ICEhZW5hYmxlOwotICAgIGlm
IChwcml2LT5zZXR0aW5ncy5yZXNpemFibGVfdGV4dGFyZWFzICE9IGVuYWJsZSkgewotICAgICAg
ICBwcml2LT5wYWdlX3NldHRpbmdzLT5zZXRUZXh0QXJlYXNBcmVSZXNpemFibGUoZW5hYmxlKTsK
LSAgICAgICAgcHJpdi0+c2V0dGluZ3MucmVzaXphYmxlX3RleHRhcmVhcyA9IGVuYWJsZTsKKyAg
ICBpZiAocHJpdi0+c2V0dGluZ3MucmVzaXphYmxlVGV4dGFyZWFzICE9IGVuYWJsZSkgeworICAg
ICAgICBwcml2LT5wYWdlU2V0dGluZ3MtPnNldFRleHRBcmVhc0FyZVJlc2l6YWJsZShlbmFibGUp
OworICAgICAgICBwcml2LT5zZXR0aW5ncy5yZXNpemFibGVUZXh0YXJlYXMgPSBlbmFibGU7CiAg
ICAgfQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19zZXR0
aW5nX3ByaXZhdGVfYnJvd3NpbmdfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewot
ICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwot
ICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7Ci0g
ICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLnByaXZhdGVfYnJvd3Npbmc7CisgICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVX
S19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOwor
ICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5wcml2YXRlQnJvd3Npbmc7CiB9CiAKIEVpbmFfQm9v
bCBld2tfdmlld19zZXR0aW5nX3ByaXZhdGVfYnJvd3Npbmdfc2V0KEV2YXNfT2JqZWN0KiBld2tW
aWV3LCBFaW5hX0Jvb2wgZW5hYmxlKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVS
TihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihl
d2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09S
X1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIGVuYWJsZSA9ICEhZW5h
YmxlOwotICAgIGlmIChwcml2LT5zZXR0aW5ncy5wcml2YXRlX2Jyb3dzaW5nICE9IGVuYWJsZSkg
ewotICAgICAgICBwcml2LT5wYWdlX3NldHRpbmdzLT5zZXRQcml2YXRlQnJvd3NpbmdFbmFibGVk
KGVuYWJsZSk7Ci0gICAgICAgIHByaXYtPnNldHRpbmdzLnByaXZhdGVfYnJvd3NpbmcgPSBlbmFi
bGU7CisgICAgaWYgKHByaXYtPnNldHRpbmdzLnByaXZhdGVCcm93c2luZyAhPSBlbmFibGUpIHsK
KyAgICAgICAgcHJpdi0+cGFnZVNldHRpbmdzLT5zZXRQcml2YXRlQnJvd3NpbmdFbmFibGVkKGVu
YWJsZSk7CisgICAgICAgIHByaXYtPnNldHRpbmdzLnByaXZhdGVCcm93c2luZyA9IGVuYWJsZTsK
ICAgICB9CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3Nl
dHRpbmdfb2ZmbGluZV9hcHBfY2FjaGVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQog
ewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0Up
OwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7
Ci0gICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLm9mZmxpbmVfYXBwX2NhY2hlOworICAgIEVXS19W
SUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAg
ICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNF
KTsKKyAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3Mub2ZmbGluZUFwcENhY2hlOwogfQogCiBFaW5h
X0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19vZmZsaW5lX2FwcF9jYWNoZV9zZXQoRXZhc19PYmplY3Qq
IGV3a1ZpZXcsIEVpbmFfQm9vbCBlbmFibGUpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JF
VFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1Jf
UkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVU
VVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9H
RVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgZW5hYmxlID0g
ISFlbmFibGU7Ci0gICAgaWYgKHByaXYtPnNldHRpbmdzLm9mZmxpbmVfYXBwX2NhY2hlICE9IGVu
YWJsZSkgewotICAgICAgICBwcml2LT5wYWdlX3NldHRpbmdzLT5zZXRPZmZsaW5lV2ViQXBwbGlj
YXRpb25DYWNoZUVuYWJsZWQoZW5hYmxlKTsKLSAgICAgICAgcHJpdi0+c2V0dGluZ3Mub2ZmbGlu
ZV9hcHBfY2FjaGUgPSBlbmFibGU7CisgICAgaWYgKHByaXYtPnNldHRpbmdzLm9mZmxpbmVBcHBD
YWNoZSAhPSBlbmFibGUpIHsKKyAgICAgICAgcHJpdi0+cGFnZVNldHRpbmdzLT5zZXRPZmZsaW5l
V2ViQXBwbGljYXRpb25DYWNoZUVuYWJsZWQoZW5hYmxlKTsKKyAgICAgICAgcHJpdi0+c2V0dGlu
Z3Mub2ZmbGluZUFwcENhY2hlID0gZW5hYmxlOwogICAgIH0KICAgICByZXR1cm4gRUlOQV9UUlVF
OwogfQpAQCAtMjA3MiwyNyArMjA3MiwyNyBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19v
ZmZsaW5lX2FwcF9jYWNoZV9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbAogCiBF
aW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19jYXJldF9icm93c2luZ19nZXQoY29uc3QgRXZhc19P
YmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3
LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBw
cml2LCBFSU5BX0ZBTFNFKTsKLSAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuY2FyZXRfYnJvd3Np
bmc7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJ
TkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHBy
aXYsIEVJTkFfRkFMU0UpOworICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5jYXJldEJyb3dzaW5n
OwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19jYXJldF9icm93c2luZ19zZXQoRXZh
c19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCBlbmFibGUpCiB7Ci0gICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJ
Vl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9H
RVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJ
RVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAg
ZW5hYmxlID0gISFlbmFibGU7Ci0gICAgaWYgKHByaXYtPnNldHRpbmdzLmNhcmV0X2Jyb3dzaW5n
ICE9IGVuYWJsZSkgewotICAgICAgICBwcml2LT5wYWdlX3NldHRpbmdzLT5zZXRDYXJldEJyb3dz
aW5nRW5hYmxlZChlbmFibGUpOwotICAgICAgICBwcml2LT5zZXR0aW5ncy5jYXJldF9icm93c2lu
ZyA9IGVuYWJsZTsKKyAgICBpZiAocHJpdi0+c2V0dGluZ3MuY2FyZXRCcm93c2luZyAhPSBlbmFi
bGUpIHsKKyAgICAgICAgcHJpdi0+cGFnZVNldHRpbmdzLT5zZXRDYXJldEJyb3dzaW5nRW5hYmxl
ZChlbmFibGUpOworICAgICAgICBwcml2LT5zZXR0aW5ncy5jYXJldEJyb3dzaW5nID0gZW5hYmxl
OwogICAgIH0KICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCiBjb25zdCBjaGFyKiBld2tfdmll
d19zZXR0aW5nX2VuY29kaW5nX2N1c3RvbV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcp
CiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgMCk7Ci0gICAg
RVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCAwKTsKKyAgICBFV0tfVklFV19T
RF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgMCk7CisgICAgRVdLX1ZJRVdfUFJJ
Vl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgMCk7CiAgICAgRXZhc19PYmplY3QqIG1h
aW5fZnJhbWUgPSBld2tfdmlld19mcmFtZV9tYWluX2dldChld2tWaWV3KTsKICAgICBXZWJDb3Jl
OjpGcmFtZSogY29yZV9mcmFtZSA9IEVXS1ByaXZhdGU6OmNvcmVGcmFtZShtYWluX2ZyYW1lKTsK
IApAQCAtMjEwMSwxOTkgKzIxMDEsMTk5IEBAIGNvbnN0IGNoYXIqIGV3a192aWV3X3NldHRpbmdf
ZW5jb2RpbmdfY3VzdG9tX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKICAgICBpZiAo
b3ZlcnJpZGVFbmNvZGluZy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgZWlu
YV9zdHJpbmdzaGFyZV9yZXBsYWNlKCZwcml2LT5zZXR0aW5ncy5lbmNvZGluZ19jdXN0b20sIG92
ZXJyaWRlRW5jb2RpbmcudXRmOCgpLmRhdGEoKSk7Ci0gICAgcmV0dXJuIHByaXYtPnNldHRpbmdz
LmVuY29kaW5nX2N1c3RvbTsKKyAgICBlaW5hX3N0cmluZ3NoYXJlX3JlcGxhY2UoJnByaXYtPnNl
dHRpbmdzLmVuY29kaW5nQ3VzdG9tLCBvdmVycmlkZUVuY29kaW5nLnV0ZjgoKS5kYXRhKCkpOwor
ICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5lbmNvZGluZ0N1c3RvbTsKIH0KIAogRWluYV9Cb29s
IGV3a192aWV3X3NldHRpbmdfZW5jb2RpbmdfY3VzdG9tX3NldChFdmFzX09iamVjdCogZXdrVmll
dywgY29uc3QgY2hhciogZW5jb2RpbmcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
Tihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVU
VVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJO
KGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRf
T1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgRXZhc19PYmplY3Qq
IG1haW5fZnJhbWUgPSBld2tfdmlld19mcmFtZV9tYWluX2dldChld2tWaWV3KTsKLSAgICBXZWJD
b3JlOjpGcmFtZSogY29yZV9mcmFtZSA9IEVXS1ByaXZhdGU6OmNvcmVGcmFtZShtYWluX2ZyYW1l
KTsKKyAgICBXZWJDb3JlOjpGcmFtZSogY29yZUZyYW1lID0gRVdLUHJpdmF0ZTo6Y29yZUZyYW1l
KG1haW5fZnJhbWUpOwogICAgIERCRygiJXMiLCBlbmNvZGluZyk7Ci0gICAgaWYgKGVpbmFfc3Ry
aW5nc2hhcmVfcmVwbGFjZSgmcHJpdi0+c2V0dGluZ3MuZW5jb2RpbmdfY3VzdG9tLCBlbmNvZGlu
ZykpCi0gICAgICAgIGNvcmVfZnJhbWUtPmxvYWRlcigpLT5yZWxvYWRXaXRoT3ZlcnJpZGVFbmNv
ZGluZyhTdHJpbmc6OmZyb21VVEY4KGVuY29kaW5nKSk7CisgICAgaWYgKGVpbmFfc3RyaW5nc2hh
cmVfcmVwbGFjZSgmcHJpdi0+c2V0dGluZ3MuZW5jb2RpbmdDdXN0b20sIGVuY29kaW5nKSkKKyAg
ICAgICAgY29yZUZyYW1lLT5sb2FkZXIoKS0+cmVsb2FkV2l0aE92ZXJyaWRlRW5jb2RpbmcoU3Ry
aW5nOjpmcm9tVVRGOChlbmNvZGluZykpOwogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKIGNv
bnN0IGNoYXIqIGV3a192aWV3X3NldHRpbmdfZW5jb2RpbmdfZGVmYXVsdF9nZXQoY29uc3QgRXZh
c19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tW
aWV3LCBzZCwgMCk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCAw
KTsKLSAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZW5jb2RpbmdfZGVmYXVsdDsKKyAgICBFV0tf
VklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgMCk7CisgICAgRVdLX1ZJ
RVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgMCk7CisgICAgcmV0dXJuIHBy
aXYtPnNldHRpbmdzLmVuY29kaW5nRGVmYXVsdDsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3Nl
dHRpbmdfZW5jb2RpbmdfZGVmYXVsdF9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGNvbnN0IGNo
YXIqIGVuY29kaW5nKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywg
c2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJp
diwgRUlOQV9GQUxTRSk7Ci0gICAgaWYgKGVpbmFfc3RyaW5nc2hhcmVfcmVwbGFjZSgmcHJpdi0+
c2V0dGluZ3MuZW5jb2RpbmdfZGVmYXVsdCwgZW5jb2RpbmcpKQotICAgICAgICBwcml2LT5wYWdl
X3NldHRpbmdzLT5zZXREZWZhdWx0VGV4dEVuY29kaW5nTmFtZShTdHJpbmc6OmZyb21VVEY4KGVu
Y29kaW5nKSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERh
dGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERh
dGEsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIGlmIChlaW5hX3N0cmluZ3NoYXJlX3JlcGxhY2Uo
JnByaXYtPnNldHRpbmdzLmVuY29kaW5nRGVmYXVsdCwgZW5jb2RpbmcpKQorICAgICAgICBwcml2
LT5wYWdlU2V0dGluZ3MtPnNldERlZmF1bHRUZXh0RW5jb2RpbmdOYW1lKFN0cmluZzo6ZnJvbVVU
RjgoZW5jb2RpbmcpKTsKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCiBFaW5hX0Jvb2wgZXdr
X3ZpZXdfc2V0dGluZ19lbmNvZGluZ19kZXRlY3Rvcl9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcs
IEVpbmFfQm9vbCBlbmFibGUpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tW
aWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNk
LCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1Zp
ZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVU
VVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgZW5hYmxlID0gISFlbmFibGU7
Ci0gICAgaWYgKHByaXYtPnNldHRpbmdzLmVuY29kaW5nX2RldGVjdG9yICE9IGVuYWJsZSkgewot
ICAgICAgICBwcml2LT5wYWdlX3NldHRpbmdzLT5zZXRVc2VzRW5jb2RpbmdEZXRlY3RvcihlbmFi
bGUpOwotICAgICAgICBwcml2LT5zZXR0aW5ncy5lbmNvZGluZ19kZXRlY3RvciA9IGVuYWJsZTsK
KyAgICBpZiAocHJpdi0+c2V0dGluZ3MuZW5jb2RpbmdEZXRlY3RvciAhPSBlbmFibGUpIHsKKyAg
ICAgICAgcHJpdi0+cGFnZVNldHRpbmdzLT5zZXRVc2VzRW5jb2RpbmdEZXRlY3RvcihlbmFibGUp
OworICAgICAgICBwcml2LT5zZXR0aW5ncy5lbmNvZGluZ0RldGVjdG9yID0gZW5hYmxlOwogICAg
IH0KICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGlu
Z19lbmNvZGluZ19kZXRlY3Rvcl9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0g
ICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0g
ICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKLSAg
ICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZW5jb2RpbmdfZGV0ZWN0b3I7CisgICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVX
S19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOwor
ICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5lbmNvZGluZ0RldGVjdG9yOwogfQogCiBFaW5hX0Jv
b2wgZXdrX3ZpZXdfc2V0dGluZ19lbmFibGVfZGV2ZWxvcGVyX2V4dHJhc19nZXQoY29uc3QgRXZh
c19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tW
aWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNk
LCBwcml2LCBFSU5BX0ZBTFNFKTsKLSAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZW5hYmxlX2Rl
dmVsb3Blcl9leHRyYXM7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBz
bWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihz
bWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5l
bmFibGVEZXZlbG9wZXJFeHRyYXM7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2Vu
YWJsZV9kZXZlbG9wZXJfZXh0cmFzX3NldChFdmFzX09iamVjdCogZXdrVmlldywgRWluYV9Cb29s
IGVuYWJsZSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBF
SU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJ
TkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnRE
YXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnRE
YXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBlbmFibGUgPSAhIWVuYWJsZTsKLSAgICBpZiAo
cHJpdi0+c2V0dGluZ3MuZW5hYmxlX2RldmVsb3Blcl9leHRyYXMgIT0gZW5hYmxlKSB7Ci0gICAg
ICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNldERldmVsb3BlckV4dHJhc0VuYWJsZWQoZW5hYmxl
KTsKLSAgICAgICAgcHJpdi0+c2V0dGluZ3MuZW5hYmxlX2RldmVsb3Blcl9leHRyYXMgPSBlbmFi
bGU7CisgICAgaWYgKHByaXYtPnNldHRpbmdzLmVuYWJsZURldmVsb3BlckV4dHJhcyAhPSBlbmFi
bGUpIHsKKyAgICAgICAgcHJpdi0+cGFnZVNldHRpbmdzLT5zZXREZXZlbG9wZXJFeHRyYXNFbmFi
bGVkKGVuYWJsZSk7CisgICAgICAgIHByaXYtPnNldHRpbmdzLmVuYWJsZURldmVsb3BlckV4dHJh
cyA9IGVuYWJsZTsKICAgICB9CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAogaW50IGV3a192
aWV3X3NldHRpbmdfZm9udF9taW5pbXVtX3NpemVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tW
aWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIDApOwot
ICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgMCk7Ci0gICAgcmV0dXJu
IHByaXYtPnNldHRpbmdzLmZvbnRfbWluaW11bV9zaXplOworICAgIEVXS19WSUVXX1NEX0dFVF9P
Ul9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCAwKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9P
Ul9SRVRVUk4oc21hcnREYXRhLCBwcml2LCAwKTsKKyAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3Mu
Zm9udE1pbmltdW1TaXplOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19mb250X21p
bmltdW1fc2l6ZV9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGludCBzaXplKQogewotICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVX
S19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7Ci0gICAgaWYg
KHByaXYtPnNldHRpbmdzLmZvbnRfbWluaW11bV9zaXplICE9IHNpemUpIHsKLSAgICAgICAgcHJp
di0+cGFnZV9zZXR0aW5ncy0+c2V0TWluaW11bUZvbnRTaXplKHNpemUpOwotICAgICAgICBwcml2
LT5zZXR0aW5ncy5mb250X21pbmltdW1fc2l6ZSA9IHNpemU7CisgICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVX
X1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIGlm
IChwcml2LT5zZXR0aW5ncy5mb250TWluaW11bVNpemUgIT0gc2l6ZSkgeworICAgICAgICBwcml2
LT5wYWdlU2V0dGluZ3MtPnNldE1pbmltdW1Gb250U2l6ZShzaXplKTsKKyAgICAgICAgcHJpdi0+
c2V0dGluZ3MuZm9udE1pbmltdW1TaXplID0gc2l6ZTsKICAgICB9CiAgICAgcmV0dXJuIEVJTkFf
VFJVRTsKIH0KIAogaW50IGV3a192aWV3X3NldHRpbmdfZm9udF9taW5pbXVtX2xvZ2ljYWxfc2l6
ZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihld2tWaWV3LCBzZCwgMCk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVU
VVJOKHNkLCBwcml2LCAwKTsKLSAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZm9udF9taW5pbXVt
X2xvZ2ljYWxfc2l6ZTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNt
YXJ0RGF0YSwgMCk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwg
cHJpdiwgMCk7CisgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmZvbnRNaW5pbXVtTG9naWNhbFNp
emU7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2ZvbnRfbWluaW11bV9sb2dpY2Fs
X3NpemVfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBpbnQgc2l6ZSkKIHsKLSAgICBFV0tfVklF
V19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklF
V19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwotICAgIGlmIChwcml2
LT5zZXR0aW5ncy5mb250X21pbmltdW1fbG9naWNhbF9zaXplICE9IHNpemUpIHsKLSAgICAgICAg
cHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0TWluaW11bUxvZ2ljYWxGb250U2l6ZShzaXplKTsKLSAg
ICAgICAgcHJpdi0+c2V0dGluZ3MuZm9udF9taW5pbXVtX2xvZ2ljYWxfc2l6ZSA9IHNpemU7Cisg
ICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFM
U0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJ
TkFfRkFMU0UpOworICAgIGlmIChwcml2LT5zZXR0aW5ncy5mb250TWluaW11bUxvZ2ljYWxTaXpl
ICE9IHNpemUpIHsKKyAgICAgICAgcHJpdi0+cGFnZVNldHRpbmdzLT5zZXRNaW5pbXVtTG9naWNh
bEZvbnRTaXplKHNpemUpOworICAgICAgICBwcml2LT5zZXR0aW5ncy5mb250TWluaW11bUxvZ2lj
YWxTaXplID0gc2l6ZTsKICAgICB9CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAogaW50IGV3
a192aWV3X3NldHRpbmdfZm9udF9kZWZhdWx0X3NpemVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBl
d2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIDAp
OwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgMCk7Ci0gICAgcmV0
dXJuIHByaXYtPnNldHRpbmdzLmZvbnRfZGVmYXVsdF9zaXplOworICAgIEVXS19WSUVXX1NEX0dF
VF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCAwKTsKKyAgICBFV0tfVklFV19QUklWX0dF
VF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCAwKTsKKyAgICByZXR1cm4gcHJpdi0+c2V0dGlu
Z3MuZm9udERlZmF1bHRTaXplOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19mb250
X2RlZmF1bHRfc2l6ZV9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGludCBzaXplKQogewotICAg
IEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAg
IEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7Ci0gICAg
aWYgKHByaXYtPnNldHRpbmdzLmZvbnRfZGVmYXVsdF9zaXplICE9IHNpemUpIHsKLSAgICAgICAg
cHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0RGVmYXVsdEZvbnRTaXplKHNpemUpOwotICAgICAgICBw
cml2LT5zZXR0aW5ncy5mb250X2RlZmF1bHRfc2l6ZSA9IHNpemU7CisgICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19W
SUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOworICAg
IGlmIChwcml2LT5zZXR0aW5ncy5mb250RGVmYXVsdFNpemUgIT0gc2l6ZSkgeworICAgICAgICBw
cml2LT5wYWdlU2V0dGluZ3MtPnNldERlZmF1bHRGb250U2l6ZShzaXplKTsKKyAgICAgICAgcHJp
di0+c2V0dGluZ3MuZm9udERlZmF1bHRTaXplID0gc2l6ZTsKICAgICB9CiAgICAgcmV0dXJuIEVJ
TkFfVFJVRTsKIH0KIAogaW50IGV3a192aWV3X3NldHRpbmdfZm9udF9tb25vc3BhY2Vfc2l6ZV9n
ZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihld2tWaWV3LCBzZCwgMCk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJO
KHNkLCBwcml2LCAwKTsKLSAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZm9udF9tb25vc3BhY2Vf
c2l6ZTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwg
MCk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgMCk7
CisgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmZvbnRNb25vc3BhY2VTaXplOwogfQogCiBFaW5h
X0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19mb250X21vbm9zcGFjZV9zaXplX3NldChFdmFzX09iamVj
dCogZXdrVmlldywgaW50IHNpemUpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihl
d2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJO
KHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKLSAgICBpZiAocHJpdi0+c2V0dGluZ3MuZm9udF9tb25v
c3BhY2Vfc2l6ZSAhPSBzaXplKSB7Ci0gICAgICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNldERl
ZmF1bHRGaXhlZEZvbnRTaXplKHNpemUpOwotICAgICAgICBwcml2LT5zZXR0aW5ncy5mb250X21v
bm9zcGFjZV9zaXplID0gc2l6ZTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1Zp
ZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVU
VVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgaWYgKHByaXYtPnNldHRpbmdz
LmZvbnRNb25vc3BhY2VTaXplICE9IHNpemUpIHsKKyAgICAgICAgcHJpdi0+cGFnZVNldHRpbmdz
LT5zZXREZWZhdWx0Rml4ZWRGb250U2l6ZShzaXplKTsKKyAgICAgICAgcHJpdi0+c2V0dGluZ3Mu
Zm9udE1vbm9zcGFjZVNpemUgPSBzaXplOwogICAgIH0KICAgICByZXR1cm4gRUlOQV9UUlVFOwog
fQogCiBjb25zdCBjaGFyKiBld2tfdmlld19mb250X2ZhbWlseV9uYW1lX2dldChjb25zdCBFdmFz
X09iamVjdCogZXdrVmlldywgRXdrX0ZvbnRfRmFtaWx5IGZvbnRGYW1pbHkpCiB7Ci0gICAgRVdL
X1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgMCk7Ci0gICAgRVdLX1ZJRVdfUFJJ
Vl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCAwKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVU
VVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgMCk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVU
VVJOKHNtYXJ0RGF0YSwgcHJpdiwgMCk7CiAKICAgICBzd2l0Y2ggKGZvbnRGYW1pbHkpIHsKICAg
ICBjYXNlIEVXS19GT05UX0ZBTUlMWV9TVEFOREFSRDoKLSAgICAgICAgcmV0dXJuIHByaXYtPnNl
dHRpbmdzLmZvbnRfc3RhbmRhcmQ7CisgICAgICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5mb250
U3RhbmRhcmQ7CiAgICAgY2FzZSBFV0tfRk9OVF9GQU1JTFlfQ1VSU0lWRToKLSAgICAgICAgcmV0
dXJuIHByaXYtPnNldHRpbmdzLmZvbnRfY3Vyc2l2ZTsKKyAgICAgICAgcmV0dXJuIHByaXYtPnNl
dHRpbmdzLmZvbnRDdXJzaXZlOwogICAgIGNhc2UgRVdLX0ZPTlRfRkFNSUxZX0ZBTlRBU1k6Ci0g
ICAgICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5mb250X2ZhbnRhc3k7CisgICAgICAgIHJldHVy
biBwcml2LT5zZXR0aW5ncy5mb250RmFudGFzeTsKICAgICBjYXNlIEVXS19GT05UX0ZBTUlMWV9N
T05PU1BBQ0U6Ci0gICAgICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5mb250X21vbm9zcGFjZTsK
KyAgICAgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmZvbnRNb25vc3BhY2U7CiAgICAgY2FzZSBF
V0tfRk9OVF9GQU1JTFlfU0VSSUY6Ci0gICAgICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5mb250
X3NlcmlmOworICAgICAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZm9udFNlcmlmOwogICAgIGNh
c2UgRVdLX0ZPTlRfRkFNSUxZX1NBTlNfU0VSSUY6Ci0gICAgICAgIHJldHVybiBwcml2LT5zZXR0
aW5ncy5mb250X3NhbnNfc2VyaWY7CisgICAgICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5mb250
U2Fuc1NlcmlmOwogICAgIH0KICAgICByZXR1cm4gMDsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3
X2ZvbnRfZmFtaWx5X25hbWVfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFd2tfRm9udF9GYW1p
bHkgZm9udEZhbWlseSwgY29uc3QgY2hhciogbmFtZSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRf
T1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dF
VF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9P
Ul9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19Q
UklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKIAogICAgIHN3
aXRjaCAoZm9udEZhbWlseSkgewogICAgIGNhc2UgRVdLX0ZPTlRfRkFNSUxZX1NUQU5EQVJEOgot
ICAgICAgICBpZiAoZWluYV9zdHJpbmdzaGFyZV9yZXBsYWNlKCZwcml2LT5zZXR0aW5ncy5mb250
X3N0YW5kYXJkLCBuYW1lKSkKLSAgICAgICAgICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNldFN0
YW5kYXJkRm9udEZhbWlseShBdG9taWNTdHJpbmc6OmZyb21VVEY4KG5hbWUpKTsKKyAgICAgICAg
aWYgKGVpbmFfc3RyaW5nc2hhcmVfcmVwbGFjZSgmcHJpdi0+c2V0dGluZ3MuZm9udFN0YW5kYXJk
LCBuYW1lKSkKKyAgICAgICAgICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0U3RhbmRhcmRGb250
RmFtaWx5KEF0b21pY1N0cmluZzo6ZnJvbVVURjgobmFtZSkpOwogICAgICAgICBicmVhazsKICAg
ICBjYXNlIEVXS19GT05UX0ZBTUlMWV9DVVJTSVZFOgotICAgICAgICBpZiAoZWluYV9zdHJpbmdz
aGFyZV9yZXBsYWNlKCZwcml2LT5zZXR0aW5ncy5mb250X2N1cnNpdmUsIG5hbWUpKQotICAgICAg
ICAgICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0Q3Vyc2l2ZUZvbnRGYW1pbHkoQXRvbWljU3Ry
aW5nOjpmcm9tVVRGOChuYW1lKSk7CisgICAgICAgIGlmIChlaW5hX3N0cmluZ3NoYXJlX3JlcGxh
Y2UoJnByaXYtPnNldHRpbmdzLmZvbnRDdXJzaXZlLCBuYW1lKSkKKyAgICAgICAgICAgIHByaXYt
PnBhZ2VTZXR0aW5ncy0+c2V0Q3Vyc2l2ZUZvbnRGYW1pbHkoQXRvbWljU3RyaW5nOjpmcm9tVVRG
OChuYW1lKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRVdLX0ZPTlRfRkFNSUxZX0ZBTlRB
U1k6Ci0gICAgICAgIGlmIChlaW5hX3N0cmluZ3NoYXJlX3JlcGxhY2UoJnByaXYtPnNldHRpbmdz
LmZvbnRfZmFudGFzeSwgbmFtZSkpCi0gICAgICAgICAgICBwcml2LT5wYWdlX3NldHRpbmdzLT5z
ZXRGYW50YXN5Rm9udEZhbWlseShBdG9taWNTdHJpbmc6OmZyb21VVEY4KG5hbWUpKTsKKyAgICAg
ICAgaWYgKGVpbmFfc3RyaW5nc2hhcmVfcmVwbGFjZSgmcHJpdi0+c2V0dGluZ3MuZm9udEZhbnRh
c3ksIG5hbWUpKQorICAgICAgICAgICAgcHJpdi0+cGFnZVNldHRpbmdzLT5zZXRGYW50YXN5Rm9u
dEZhbWlseShBdG9taWNTdHJpbmc6OmZyb21VVEY4KG5hbWUpKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBFV0tfRk9OVF9GQU1JTFlfTU9OT1NQQUNFOgotICAgICAgICBpZiAoZWluYV9zdHJp
bmdzaGFyZV9yZXBsYWNlKCZwcml2LT5zZXR0aW5ncy5mb250X21vbm9zcGFjZSwgbmFtZSkpCi0g
ICAgICAgICAgICBwcml2LT5wYWdlX3NldHRpbmdzLT5zZXRGaXhlZEZvbnRGYW1pbHkoQXRvbWlj
U3RyaW5nOjpmcm9tVVRGOChuYW1lKSk7CisgICAgICAgIGlmIChlaW5hX3N0cmluZ3NoYXJlX3Jl
cGxhY2UoJnByaXYtPnNldHRpbmdzLmZvbnRNb25vc3BhY2UsIG5hbWUpKQorICAgICAgICAgICAg
cHJpdi0+cGFnZVNldHRpbmdzLT5zZXRGaXhlZEZvbnRGYW1pbHkoQXRvbWljU3RyaW5nOjpmcm9t
VVRGOChuYW1lKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRVdLX0ZPTlRfRkFNSUxZX1NF
UklGOgotICAgICAgICBpZiAoZWluYV9zdHJpbmdzaGFyZV9yZXBsYWNlKCZwcml2LT5zZXR0aW5n
cy5mb250X3NlcmlmLCBuYW1lKSkKLSAgICAgICAgICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNl
dFNlcmlmRm9udEZhbWlseShBdG9taWNTdHJpbmc6OmZyb21VVEY4KG5hbWUpKTsKKyAgICAgICAg
aWYgKGVpbmFfc3RyaW5nc2hhcmVfcmVwbGFjZSgmcHJpdi0+c2V0dGluZ3MuZm9udFNlcmlmLCBu
YW1lKSkKKyAgICAgICAgICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0U2VyaWZGb250RmFtaWx5
KEF0b21pY1N0cmluZzo6ZnJvbVVURjgobmFtZSkpOwogICAgICAgICBicmVhazsKICAgICBjYXNl
IEVXS19GT05UX0ZBTUlMWV9TQU5TX1NFUklGOgotICAgICAgICBpZiAoZWluYV9zdHJpbmdzaGFy
ZV9yZXBsYWNlKCZwcml2LT5zZXR0aW5ncy5mb250X3NhbnNfc2VyaWYsIG5hbWUpKQotICAgICAg
ICAgICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0U2Fuc1NlcmlmRm9udEZhbWlseShBdG9taWNT
dHJpbmc6OmZyb21VVEY4KG5hbWUpKTsKKyAgICAgICAgaWYgKGVpbmFfc3RyaW5nc2hhcmVfcmVw
bGFjZSgmcHJpdi0+c2V0dGluZ3MuZm9udFNhbnNTZXJpZiwgbmFtZSkpCisgICAgICAgICAgICBw
cml2LT5wYWdlU2V0dGluZ3MtPnNldFNhbnNTZXJpZkZvbnRGYW1pbHkoQXRvbWljU3RyaW5nOjpm
cm9tVVRGOChuYW1lKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJl
dHVybiBFSU5BX0ZBTFNFOwpAQCAtMjMwNCw5OSArMjMwNCw5OSBAQCBFaW5hX0Jvb2wgZXdrX3Zp
ZXdfZm9udF9mYW1pbHlfbmFtZV9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV3a19Gb250X0Zh
bWlseSBmbwogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19zcGF0aWFsX25hdmlnYXRpb25f
Z2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9P
Ul9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VU
X09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7Ci0gICAgcmV0dXJuIHByaXYtPnNldHRp
bmdzLnNwYXRpYWxfbmF2aWdhdGlvbjsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3
a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1Jf
UkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgcmV0dXJuIHByaXYtPnNl
dHRpbmdzLnNwYXRpYWxOYXZpZ2F0aW9uOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGlu
Z19zcGF0aWFsX25hdmlnYXRpb25fc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wg
ZW5hYmxlKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJ
TkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlO
QV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERh
dGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERh
dGEsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIGVuYWJsZSA9ICEhZW5hYmxlOwotICAgIGlmIChw
cml2LT5zZXR0aW5ncy5zcGF0aWFsX25hdmlnYXRpb24gIT0gZW5hYmxlKSB7Ci0gICAgICAgIHBy
aXYtPnBhZ2Vfc2V0dGluZ3MtPnNldFNwYXRpYWxOYXZpZ2F0aW9uRW5hYmxlZChlbmFibGUpOwot
ICAgICAgICBwcml2LT5zZXR0aW5ncy5zcGF0aWFsX25hdmlnYXRpb24gPSBlbmFibGU7CisgICAg
aWYgKHByaXYtPnNldHRpbmdzLnNwYXRpYWxOYXZpZ2F0aW9uICE9IGVuYWJsZSkgeworICAgICAg
ICBwcml2LT5wYWdlU2V0dGluZ3MtPnNldFNwYXRpYWxOYXZpZ2F0aW9uRW5hYmxlZChlbmFibGUp
OworICAgICAgICBwcml2LT5zZXR0aW5ncy5zcGF0aWFsTmF2aWdhdGlvbiA9IGVuYWJsZTsKICAg
ICB9CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3NldHRp
bmdfbG9jYWxfc3RvcmFnZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAg
RVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAg
RVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKLSAgICBy
ZXR1cm4gcHJpdi0+c2V0dGluZ3MubG9jYWxfc3RvcmFnZTsKKyAgICBFV0tfVklFV19TRF9HRVRf
T1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdf
UFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgcmV0
dXJuIHByaXYtPnNldHRpbmdzLmxvY2FsU3RvcmFnZTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3
X3NldHRpbmdfbG9jYWxfc3RvcmFnZV9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9v
bCBlbmFibGUpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwg
RUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBF
SU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0
RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0
RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgZW5hYmxlID0gISFlbmFibGU7Ci0gICAgaWYg
KHByaXYtPnNldHRpbmdzLmxvY2FsX3N0b3JhZ2UgIT0gZW5hYmxlKSB7Ci0gICAgICAgIHByaXYt
PnBhZ2Vfc2V0dGluZ3MtPnNldExvY2FsU3RvcmFnZUVuYWJsZWQoZW5hYmxlKTsKLSAgICAgICAg
cHJpdi0+c2V0dGluZ3MubG9jYWxfc3RvcmFnZSA9IGVuYWJsZTsKKyAgICBpZiAocHJpdi0+c2V0
dGluZ3MubG9jYWxTdG9yYWdlICE9IGVuYWJsZSkgeworICAgICAgICBwcml2LT5wYWdlU2V0dGlu
Z3MtPnNldExvY2FsU3RvcmFnZUVuYWJsZWQoZW5hYmxlKTsKKyAgICAgICAgcHJpdi0+c2V0dGlu
Z3MubG9jYWxTdG9yYWdlID0gZW5hYmxlOwogICAgIH0KICAgICByZXR1cm4gRUlOQV9UUlVFOwog
fQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19wYWdlX2NhY2hlX2dldChjb25zdCBFdmFz
X09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1Zp
ZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2Qs
IHByaXYsIEVJTkFfRkFMU0UpOwotICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5wYWdlX2NhY2hl
OworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5B
X0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2
LCBFSU5BX0ZBTFNFKTsKKyAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MucGFnZUNhY2hlOwogfQog
CiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19wYWdlX2NhY2hlX3NldChFdmFzX09iamVjdCog
ZXdrVmlldywgRWluYV9Cb29sIGVuYWJsZSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVU
VVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9S
RVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRV
Uk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dF
VF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBlbmFibGUgPSAh
IWVuYWJsZTsKLSAgICBpZiAocHJpdi0+c2V0dGluZ3MucGFnZV9jYWNoZSAhPSBlbmFibGUpIHsK
LSAgICAgICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0VXNlc1BhZ2VDYWNoZShlbmFibGUpOwot
ICAgICAgICBwcml2LT5zZXR0aW5ncy5wYWdlX2NhY2hlID0gZW5hYmxlOworICAgIGlmIChwcml2
LT5zZXR0aW5ncy5wYWdlQ2FjaGUgIT0gZW5hYmxlKSB7CisgICAgICAgIHByaXYtPnBhZ2VTZXR0
aW5ncy0+c2V0VXNlc1BhZ2VDYWNoZShlbmFibGUpOworICAgICAgICBwcml2LT5zZXR0aW5ncy5w
YWdlQ2FjaGUgPSBlbmFibGU7CiAgICAgfQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKIGNv
bnN0IGNoYXIqIGV3a192aWV3X3NldHRpbmdfbG9jYWxfc3RvcmFnZV9kYXRhYmFzZV9wYXRoX2dl
dChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1Jf
UkVUVVJOKGV3a1ZpZXcsIHNkLCAwKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4o
c2QsIHByaXYsIDApOwotICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5sb2NhbF9zdG9yYWdlX2Rh
dGFiYXNlX3BhdGg7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFy
dERhdGEsIDApOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHBy
aXYsIDApOworICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5sb2NhbFN0b3JhZ2VEYXRhYmFzZVBh
dGg7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2xvY2FsX3N0b3JhZ2VfZGF0YWJh
c2VfcGF0aF9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGNvbnN0IGNoYXIqIHBhdGgpCiB7Ci0g
ICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0g
ICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKLSAg
ICBpZiAoZWluYV9zdHJpbmdzaGFyZV9yZXBsYWNlKCZwcml2LT5zZXR0aW5ncy5sb2NhbF9zdG9y
YWdlX2RhdGFiYXNlX3BhdGgsIHBhdGgpKQotICAgICAgICBwcml2LT5wYWdlX3NldHRpbmdzLT5z
ZXRMb2NhbFN0b3JhZ2VEYXRhYmFzZVBhdGgoU3RyaW5nOjpmcm9tVVRGOChwYXRoKSk7CisgICAg
RVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0Up
OworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFf
RkFMU0UpOworICAgIGlmIChlaW5hX3N0cmluZ3NoYXJlX3JlcGxhY2UoJnByaXYtPnNldHRpbmdz
LmxvY2FsU3RvcmFnZURhdGFiYXNlUGF0aCwgcGF0aCkpCisgICAgICAgIHByaXYtPnBhZ2VTZXR0
aW5ncy0+c2V0TG9jYWxTdG9yYWdlRGF0YWJhc2VQYXRoKFN0cmluZzo6ZnJvbVVURjgocGF0aCkp
OwogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5n
X21pbmltdW1fdGltZXJfaW50ZXJ2YWxfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBkb3VibGUg
aW50ZXJ2YWwpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwg
RUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBF
SU5BX0ZBTFNFKTsKLSAgICBpZiAoZmFicyhwcml2LT5zZXR0aW5ncy5kb21fdGltZXJfaW50ZXJ2
YWwgLSBpbnRlcnZhbCkgPj0gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjplcHNpbG9uKCkp
IHsKLSAgICAgICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0TWluRE9NVGltZXJJbnRlcnZhbChp
bnRlcnZhbCk7Ci0gICAgICAgIHByaXYtPnNldHRpbmdzLmRvbV90aW1lcl9pbnRlcnZhbCA9IGlu
dGVydmFsOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRh
LCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRh
LCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBpZiAoZmFicyhwcml2LT5zZXR0aW5ncy5kb21UaW1l
ckludGVydmFsIC0gaW50ZXJ2YWwpID49IHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6ZXBz
aWxvbigpKSB7CisgICAgICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0TWluRE9NVGltZXJJbnRl
cnZhbChpbnRlcnZhbCk7CisgICAgICAgIHByaXYtPnNldHRpbmdzLmRvbVRpbWVySW50ZXJ2YWwg
PSBpbnRlcnZhbDsKICAgICB9CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAogZG91YmxlIGV3
a192aWV3X3NldHRpbmdfbWluaW11bV90aW1lcl9pbnRlcnZhbF9nZXQoY29uc3QgRXZhc19PYmpl
Y3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBz
ZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2
LCBFSU5BX0ZBTFNFKTsKLSAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZG9tX3RpbWVyX2ludGVy
dmFsOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBF
SU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBw
cml2LCBFSU5BX0ZBTFNFKTsKKyAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZG9tVGltZXJJbnRl
cnZhbDsKIH0KIAogRXdrX1ZpZXdfU21hcnRfRGF0YSogZXdrX3ZpZXdfc21hcnRfZGF0YV9nZXQo
Y29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JF
VFVSTihld2tWaWV3LCBzZCwgMCk7Ci0gICAgcmV0dXJuIHNkOworICAgIEVXS19WSUVXX1NEX0dF
VF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCAwKTsKKyAgICByZXR1cm4gc21hcnREYXRh
OwogfQogCiAvKioKQEAgLTI0NjEsOCArMjQ2MSw4IEBAIGNvbnN0IEV3a19TY3JvbGxfUmVxdWVz
dCogZXdrX3ZpZXdfc2Nyb2xsX3JlcXVlc3RzX2dldChjb25zdCBFd2tfVmlld19Qcml2YXRlX0Rh
CiAgKiBAcGFyYW0gcHJpdiBwcml2YXRlIGhhbmRsZSBwb2ludGVyIG9mIHRoZSB2aWV3IHRvIGFk
ZCByZXBhaW50IHJlcXVlc3QuCiAgKiBAcGFyYW0geCBob3Jpem9udGFsIHBvc2l0aW9uIHJlbGF0
aXZlIHRvIGN1cnJlbnQgdmlldyBwb3J0IChzY3JvbGxlZCkuCiAgKiBAcGFyYW0geSB2ZXJ0aWNh
bCBwb3NpdGlvbiByZWxhdGl2ZSB0byBjdXJyZW50IHZpZXcgcG9ydCAoc2Nyb2xsZWQpLgotICog
QHBhcmFtIHcgd2lkdGggb2YgYXJlYSB0byBiZSByZXBhaW50ZWQKLSAqIEBwYXJhbSBoIGhlaWdo
dCBvZiBhcmVhIHRvIGJlIHJlcGFpbnRlZAorICogQHBhcmFtIHdpZHRoIHdpZHRoIG9mIGFyZWEg
dG8gYmUgcmVwYWludGVkCisgKiBAcGFyYW0gaGVpZ2h0IGhlaWdodCBvZiBhcmVhIHRvIGJlIHJl
cGFpbnRlZAogICoKICAqIEBub3RlIHRoaXMgaXMgbm90IGZvciBnZW5lcmFsIHVzZSBidXQganVz
dCBmb3Igc3ViY2xhc3NlcyB0aGF0IHdhbnQKICAqICAgICAgIHRvIGRlZmluZSB0aGVpciBvd24g
YmFja2luZyBzdG9yZS4KQEAgLTI0ODUsMTIgKzI0ODUsMTIgQEAgdm9pZCBld2tfdmlld19sYXlv
dXRfaWZfbmVlZGVkX3JlY3Vyc2l2ZShFd2tfVmlld19Qcml2YXRlX0RhdGEqIHByaXYpCiB7CiAg
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4ocHJpdik7CiAKLSAgICBXZWJDb3JlOjpGcmFt
ZVZpZXcqIHYgPSBwcml2LT5tYWluX2ZyYW1lLT52aWV3KCk7Ci0gICAgaWYgKCF2KSB7CisgICAg
V2ViQ29yZTo6RnJhbWVWaWV3KiB2aWV3ID0gcHJpdi0+bWFpbkZyYW1lLT52aWV3KCk7CisgICAg
aWYgKCF2aWV3KSB7CiAgICAgICAgIEVSUigibm8gbWFpbiBmcmFtZSB2aWV3Iik7CiAgICAgICAg
IHJldHVybjsKICAgICB9Ci0gICAgdi0+dXBkYXRlTGF5b3V0QW5kU3R5bGVJZk5lZWRlZFJlY3Vy
c2l2ZSgpOworICAgIHZpZXctPnVwZGF0ZUxheW91dEFuZFN0eWxlSWZOZWVkZWRSZWN1cnNpdmUo
KTsKIH0KIAogdm9pZCBld2tfdmlld19zY3JvbGxzX3Byb2Nlc3MoRXdrX1ZpZXdfU21hcnRfRGF0
YSogc21hcnREYXRhKQpAQCAtMjUxMSw3ICsyNTExLDcgQEAgdm9pZCBld2tfdmlld19zY3JvbGxz
X3Byb2Nlc3MoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhKQogICogICAgICAgdG8gZGVm
aW5lIHRoZWlyIG93biBiYWNraW5nIHN0b3JlLgogICovCiBzdHJ1Y3QgX0V3a19WaWV3X1BhaW50
X0NvbnRleHQgewotICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCogZ2M7CisgICAgV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0KiBncmFwaGljQ29udGV4dDsKICAgICBXZWJDb3JlOjpGcmFtZVZp
ZXcqIHZpZXc7CiAgICAgY2Fpcm9fdCogY3I7CiB9OwpAQCAtMjUyMCwyNiArMjUyMCwyNiBAQCBF
d2tfVmlld19QYWludF9Db250ZXh0KiBld2tfdmlld19wYWludF9jb250ZXh0X25ldyhFd2tfVmll
d19Qcml2YXRlX0RhdGEqIHByaXYsCiB7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5f
VkFMKHByaXYsIDApOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChjciwgMCk7
Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHByaXYtPm1haW5fZnJhbWUsIDAp
OwotICAgIFdlYkNvcmU6OkZyYW1lVmlldyogdmlldyA9IHByaXYtPm1haW5fZnJhbWUtPnZpZXco
KTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwocHJpdi0+bWFpbkZyYW1lLCAw
KTsKKyAgICBXZWJDb3JlOjpGcmFtZVZpZXcqIHZpZXcgPSBwcml2LT5tYWluRnJhbWUtPnZpZXco
KTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodmlldywgMCk7Ci0gICAgRXdr
X1ZpZXdfUGFpbnRfQ29udGV4dCogY3R4dCA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1BhaW50X0Nv
bnRleHQqPihtYWxsb2Moc2l6ZW9mKCpjdHh0KSkpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOX1ZBTChjdHh0LCAwKTsKKyAgICBFd2tfVmlld19QYWludF9Db250ZXh0KiBjb250ZXh0
ID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfUGFpbnRfQ29udGV4dCo+KG1hbGxvYyhzaXplb2YoKmNv
bnRleHQpKSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGNvbnRleHQsIDAp
OwogCi0gICAgY3R4dC0+Z2MgPSBuZXcgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0KGNyKTsKLSAg
ICBpZiAoIWN0eHQtPmdjKSB7Ci0gICAgICAgIGZyZWUoY3R4dCk7CisgICAgY29udGV4dC0+Z3Jh
cGhpY0NvbnRleHQgPSBuZXcgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0KGNyKTsKKyAgICBpZiAo
IWNvbnRleHQtPmdyYXBoaWNDb250ZXh0KSB7CisgICAgICAgIGZyZWUoY29udGV4dCk7CiAgICAg
ICAgIHJldHVybiAwOwogICAgIH0KLSAgICBjdHh0LT52aWV3ID0gdmlldzsKLSAgICBjdHh0LT5j
ciA9IGNhaXJvX3JlZmVyZW5jZShjcik7Ci0gICAgcmV0dXJuIGN0eHQ7CisgICAgY29udGV4dC0+
dmlldyA9IHZpZXc7CisgICAgY29udGV4dC0+Y3IgPSBjYWlyb19yZWZlcmVuY2UoY3IpOworICAg
IHJldHVybiBjb250ZXh0OwogfQogCiB2b2lkIGV3a192aWV3X3BhaW50X2NvbnRleHRfZnJlZShF
d2tfVmlld19QYWludF9Db250ZXh0KiBjb250ZXh0KQogewogICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOKGNvbnRleHQpOwotICAgIGRlbGV0ZSBjb250ZXh0LT5nYzsKKyAgICBkZWxldGUg
Y29udGV4dC0+Z3JhcGhpY0NvbnRleHQ7CiAgICAgY2Fpcm9fZGVzdHJveShjb250ZXh0LT5jcik7
CiAgICAgZnJlZShjb250ZXh0KTsKIH0KQEAgLTI1NDgsMTMgKzI1NDgsMTMgQEAgdm9pZCBld2tf
dmlld19wYWludF9jb250ZXh0X3NhdmUoRXdrX1ZpZXdfUGFpbnRfQ29udGV4dCogY29udGV4dCkK
IHsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihjb250ZXh0KTsKICAgICBjYWlyb19z
YXZlKGNvbnRleHQtPmNyKTsKLSAgICBjb250ZXh0LT5nYy0+c2F2ZSgpOworICAgIGNvbnRleHQt
PmdyYXBoaWNDb250ZXh0LT5zYXZlKCk7CiB9CiAKIHZvaWQgZXdrX3ZpZXdfcGFpbnRfY29udGV4
dF9yZXN0b3JlKEV3a19WaWV3X1BhaW50X0NvbnRleHQqIGNvbnRleHQpCiB7CiAgICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk4oY29udGV4dCk7Ci0gICAgY29udGV4dC0+Z2MtPnJlc3RvcmUo
KTsKKyAgICBjb250ZXh0LT5ncmFwaGljQ29udGV4dC0+cmVzdG9yZSgpOwogICAgIGNhaXJvX3Jl
c3RvcmUoY29udGV4dC0+Y3IpOwogfQogCkBAIC0yNTYyLDcgKzI1NjIsNyBAQCB2b2lkIGV3a192
aWV3X3BhaW50X2NvbnRleHRfY2xpcChFd2tfVmlld19QYWludF9Db250ZXh0KiBjb250ZXh0LCBj
b25zdCBFaW5hX1JlYwogewogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGNvbnRleHQp
OwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGFyZWEpOwotICAgIGNvbnRleHQtPmdj
LT5jbGlwKFdlYkNvcmU6OkludFJlY3QoYXJlYS0+eCwgYXJlYS0+eSwgYXJlYS0+dywgYXJlYS0+
aCkpOworICAgIGNvbnRleHQtPmdyYXBoaWNDb250ZXh0LT5jbGlwKFdlYkNvcmU6OkludFJlY3Qo
YXJlYS0+eCwgYXJlYS0+eSwgYXJlYS0+dywgYXJlYS0+aCkpOwogfQogCiB2b2lkIGV3a192aWV3
X3BhaW50X2NvbnRleHRfcGFpbnQoRXdrX1ZpZXdfUGFpbnRfQ29udGV4dCogY29udGV4dCwgY29u
c3QgRWluYV9SZWN0YW5nbGUqIGFyZWEpCkBAIC0yNTczLDggKzI1NzMsOCBAQCB2b2lkIGV3a192
aWV3X3BhaW50X2NvbnRleHRfcGFpbnQoRXdrX1ZpZXdfUGFpbnRfQ29udGV4dCogY29udGV4dCwg
Y29uc3QgRWluYV9SZQogICAgIFdlYkNvcmU6OkludFJlY3QgcmVjdChhcmVhLT54LCBhcmVhLT55
LCBhcmVhLT53LCBhcmVhLT5oKTsKIAogICAgIGlmIChjb250ZXh0LT52aWV3LT5pc1RyYW5zcGFy
ZW50KCkpCi0gICAgICAgIGNvbnRleHQtPmdjLT5jbGVhclJlY3QocmVjdCk7Ci0gICAgY29udGV4
dC0+dmlldy0+cGFpbnQoY29udGV4dC0+Z2MsIHJlY3QpOworICAgICAgICBjb250ZXh0LT5ncmFw
aGljQ29udGV4dC0+Y2xlYXJSZWN0KHJlY3QpOworICAgIGNvbnRleHQtPnZpZXctPnBhaW50KGNv
bnRleHQtPmdyYXBoaWNDb250ZXh0LCByZWN0KTsKIH0KIAogdm9pZCBld2tfdmlld19wYWludF9j
b250ZXh0X3BhaW50X2NvbnRlbnRzKEV3a19WaWV3X1BhaW50X0NvbnRleHQqIGNvbnRleHQsIGNv
bnN0IEVpbmFfUmVjdGFuZ2xlKiBhcmVhKQpAQCAtMjU4NSwyMyArMjU4NSwyMyBAQCB2b2lkIGV3
a192aWV3X3BhaW50X2NvbnRleHRfcGFpbnRfY29udGVudHMoRXdrX1ZpZXdfUGFpbnRfQ29udGV4
dCogY29udGV4dCwgY29ucwogICAgIFdlYkNvcmU6OkludFJlY3QgcmVjdChhcmVhLT54LCBhcmVh
LT55LCBhcmVhLT53LCBhcmVhLT5oKTsKIAogICAgIGlmIChjb250ZXh0LT52aWV3LT5pc1RyYW5z
cGFyZW50KCkpCi0gICAgICAgIGNvbnRleHQtPmdjLT5jbGVhclJlY3QocmVjdCk7CisgICAgICAg
IGNvbnRleHQtPmdyYXBoaWNDb250ZXh0LT5jbGVhclJlY3QocmVjdCk7CiAKLSAgICBjb250ZXh0
LT52aWV3LT5wYWludENvbnRlbnRzKGNvbnRleHQtPmdjLCByZWN0KTsKKyAgICBjb250ZXh0LT52
aWV3LT5wYWludENvbnRlbnRzKGNvbnRleHQtPmdyYXBoaWNDb250ZXh0LCByZWN0KTsKIH0KIAog
dm9pZCBld2tfdmlld19wYWludF9jb250ZXh0X3NjYWxlKEV3a19WaWV3X1BhaW50X0NvbnRleHQq
IGNvbnRleHQsIGZsb2F0IHNjYWxlWCwgZmxvYXQgc2NhbGVZKQogewogICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOKGNvbnRleHQpOwogCi0gICAgY29udGV4dC0+Z2MtPnNjYWxlKFdlYkNv
cmU6OkZsb2F0U2l6ZShzY2FsZVgsIHNjYWxlWSkpOworICAgIGNvbnRleHQtPmdyYXBoaWNDb250
ZXh0LT5zY2FsZShXZWJDb3JlOjpGbG9hdFNpemUoc2NhbGVYLCBzY2FsZVkpKTsKIH0KIAogdm9p
ZCBld2tfdmlld19wYWludF9jb250ZXh0X3RyYW5zbGF0ZShFd2tfVmlld19QYWludF9Db250ZXh0
KiBjb250ZXh0LCBmbG9hdCB4LCBmbG9hdCB5KQogewogICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOKGNvbnRleHQpOwogCi0gICAgY29udGV4dC0+Z2MtPnRyYW5zbGF0ZSh4LCB5KTsKKyAg
ICBjb250ZXh0LT5ncmFwaGljQ29udGV4dC0+dHJhbnNsYXRlKHgsIHkpOwogfQogCiBFaW5hX0Jv
b2wgZXdrX3ZpZXdfcGFpbnQoRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKiBwcml2LCBjYWlyb190KiBj
ciwgY29uc3QgRWluYV9SZWN0YW5nbGUqIGFyZWEpCkBAIC0yNjA5LDIxICsyNjA5LDIxIEBAIEVp
bmFfQm9vbCBld2tfdmlld19wYWludChFd2tfVmlld19Qcml2YXRlX0RhdGEqIHByaXYsIGNhaXJv
X3QqIGNyLCBjb25zdCBFaW5hX1JlCiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFM
KHByaXYsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChj
ciwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGFyZWEs
IEVJTkFfRkFMU0UpOwotICAgIFdlYkNvcmU6OkZyYW1lVmlldyogdmlldyA9IHByaXYtPm1haW5f
ZnJhbWUtPnZpZXcoKTsKKyAgICBXZWJDb3JlOjpGcmFtZVZpZXcqIHZpZXcgPSBwcml2LT5tYWlu
RnJhbWUtPnZpZXcoKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodmlldywg
RUlOQV9GQUxTRSk7CiAKICAgICBpZiAodmlldy0+bmVlZHNMYXlvdXQoKSkKICAgICAgICAgdmll
dy0+Zm9yY2VMYXlvdXQoKTsKLSAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQgZ2MoY3IpOwor
ICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHQoY3IpOwogICAgIFdl
YkNvcmU6OkludFJlY3QgcmVjdChhcmVhLT54LCBhcmVhLT55LCBhcmVhLT53LCBhcmVhLT5oKTsK
IAogICAgIGNhaXJvX3NhdmUoY3IpOwotICAgIGdjLnNhdmUoKTsKLSAgICBnYy5jbGlwKHJlY3Qp
OworICAgIGdyYXBoaWNzQ29udGV4dC5zYXZlKCk7CisgICAgZ3JhcGhpY3NDb250ZXh0LmNsaXAo
cmVjdCk7CiAgICAgaWYgKHZpZXctPmlzVHJhbnNwYXJlbnQoKSkKLSAgICAgICAgZ2MuY2xlYXJS
ZWN0KHJlY3QpOwotICAgIHZpZXctPnBhaW50KCZnYywgcmVjdCk7Ci0gICAgZ2MucmVzdG9yZSgp
OworICAgICAgICBncmFwaGljc0NvbnRleHQuY2xlYXJSZWN0KHJlY3QpOworICAgIHZpZXctPnBh
aW50KCZncmFwaGljc0NvbnRleHQsIHJlY3QpOworICAgIGdyYXBoaWNzQ29udGV4dC5yZXN0b3Jl
KCk7CiAgICAgY2Fpcm9fcmVzdG9yZShjcik7CiAKICAgICByZXR1cm4gRUlOQV9UUlVFOwpAQCAt
MjYzNCwxOSArMjYzNCwxOSBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfcGFpbnRfY29udGVudHMoRXdr
X1ZpZXdfUHJpdmF0ZV9EYXRhKiBwcml2LCBjYWlyb190KiBjciwgY29ucwogICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOX1ZBTChwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTl9WQUwoY3IsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOX1ZBTChhcmVhLCBFSU5BX0ZBTFNFKTsKLSAgICBXZWJDb3JlOjpGcmFtZVZp
ZXcqIHZpZXcgPSBwcml2LT5tYWluX2ZyYW1lLT52aWV3KCk7CisgICAgV2ViQ29yZTo6RnJhbWVW
aWV3KiB2aWV3ID0gcHJpdi0+bWFpbkZyYW1lLT52aWV3KCk7CiAgICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk5fVkFMKHZpZXcsIEVJTkFfRkFMU0UpOwogCi0gICAgV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0IGdjKGNyKTsKKyAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3ND
b250ZXh0KGNyKTsKICAgICBXZWJDb3JlOjpJbnRSZWN0IHJlY3QoYXJlYS0+eCwgYXJlYS0+eSwg
YXJlYS0+dywgYXJlYS0+aCk7CiAKICAgICBjYWlyb19zYXZlKGNyKTsKLSAgICBnYy5zYXZlKCk7
Ci0gICAgZ2MuY2xpcChyZWN0KTsKKyAgICBncmFwaGljc0NvbnRleHQuc2F2ZSgpOworICAgIGdy
YXBoaWNzQ29udGV4dC5jbGlwKHJlY3QpOwogICAgIGlmICh2aWV3LT5pc1RyYW5zcGFyZW50KCkp
Ci0gICAgICAgIGdjLmNsZWFyUmVjdChyZWN0KTsKLSAgICB2aWV3LT5wYWludENvbnRlbnRzKCZn
YywgIHJlY3QpOwotICAgIGdjLnJlc3RvcmUoKTsKKyAgICAgICAgZ3JhcGhpY3NDb250ZXh0LmNs
ZWFyUmVjdChyZWN0KTsKKyAgICB2aWV3LT5wYWludENvbnRlbnRzKCZncmFwaGljc0NvbnRleHQs
ICByZWN0KTsKKyAgICBncmFwaGljc0NvbnRleHQucmVzdG9yZSgpOwogICAgIGNhaXJvX3Jlc3Rv
cmUoY3IpOwogCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKQEAgLTI2NzYsOCArMjY3Niw4IEBAIHZv
aWQgZXdrX3ZpZXdfcmVhZHkoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiAgKi8KIHZvaWQgZXdrX3Zp
ZXdfaW5wdXRfbWV0aG9kX3N0YXRlX3NldChFdmFzX09iamVjdCogZXdrVmlldywgRWluYV9Cb29s
IGFjdGl2ZSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkKTsK
LSAgICBFV0tfVklFV19QUklWX0dFVChzZCwgcHJpdik7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEpOworICAgIEVXS19WSUVXX1BSSVZfR0VUKHNtYXJ0
RGF0YSwgcHJpdik7CiAgICAgV2ViQ29yZTo6RnJhbWUqIGZvY3VzZWRGcmFtZSA9IHByaXYtPnBh
Z2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKTsKIAogICAgIHByaXYt
PmltaCA9IDA7CkBAIC0yNzI2LDggKzI3MjYsOCBAQCB2b2lkIGV3a192aWV3X3RpdGxlX3NldChF
dmFzX09iamVjdCogZXdrVmlldywgY29uc3QgY2hhciogdGl0bGUpCiAgKi8KIHZvaWQgZXdrX3Zp
ZXdfdXJpX2NoYW5nZWQoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCk7Ci0gICAgY29uc3QgY2hhciogdXJpID0gZXdrX2Zy
YW1lX3VyaV9nZXQoc2QtPm1haW5fZnJhbWUpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRV
Uk4oZXdrVmlldywgc21hcnREYXRhKTsKKyAgICBjb25zdCBjaGFyKiB1cmkgPSBld2tfZnJhbWVf
dXJpX2dldChzbWFydERhdGEtPm1haW5fZnJhbWUpOwogICAgIERCRygiZXdrVmlldz0lcCwgdXJp
PSVzIiwgZXdrVmlldywgdXJpID8gdXJpIDogIihudWxsKSIpOwogICAgIGV2YXNfb2JqZWN0X3Nt
YXJ0X2NhbGxiYWNrX2NhbGwoZXdrVmlldywgInVyaSxjaGFuZ2VkIiwgKHZvaWQqKXVyaSk7CiB9
CkBAIC0yNzM2LDcgKzI3MzYsNyBAQCB2b2lkIGV3a192aWV3X3VyaV9jaGFuZ2VkKEV2YXNfT2Jq
ZWN0KiBld2tWaWV3KQogICogQGludGVybmFsCiAgKiBSZXBvcnRzIHRoYXQgYSBET00gZG9jdW1l
bnQgb2JqZWN0IGhhcyBmaW5pc2hlZCBsb2FkaW5nIGZvciBAcCBmcmFtZS4KICAqCi0gKiBAcGFy
YW0gbyBWaWV3IHdoaWNoIGNvbnRhaW5zIHRoZSBmcmFtZS4KKyAqIEBwYXJhbSBld2tWaWV3IFZp
ZXcgd2hpY2ggY29udGFpbnMgdGhlIGZyYW1lLgogICogQHBhcmFtIGZyYW1lIFRoZSBmcmFtZSB3
aG9zZSBsb2FkIGhhcyB0cmlnZ2VyZWQgdGhlIGV2ZW50LgogICoKICAqIEVtaXRzIHNpZ25hbDog
ImxvYWQsZG9jdW1lbnQsZmluaXNoZWQiIHdpdGggQHAgZnJhbWUgYXMgdGhlIHBhcmFtZXRlci4K
QEAgLTI3NTAsNyArMjc1MCw3IEBAIHZvaWQgZXdrX3ZpZXdfbG9hZF9kb2N1bWVudF9maW5pc2hl
ZChFdmFzX09iamVjdCogZXdrVmlldywgRXZhc19PYmplY3QqIGZyYW1lKQogICogQGludGVybmFs
CiAgKiBSZXBvcnRzIHRoZSB2aWV3IHN0YXJ0ZWQgbG9hZGluZyBzb21ldGhpbmcuCiAgKgotICog
QHBhcmFtIG8gVmlldy4KKyAqIEBwYXJhbSBld2tWaWV3IFZpZXcuCiAgKgogICogRW1pdHMgc2ln
bmFsOiAibG9hZCxzdGFydGVkIiB3aXRoIG5vIHBhcmFtZXRlcnMuCiAgKi8KQEAgLTI3NjMsNyAr
Mjc2Myw3IEBAIHZvaWQgZXdrX3ZpZXdfbG9hZF9zdGFydGVkKEV2YXNfT2JqZWN0KiBld2tWaWV3
KQogLyoqCiAgKiBSZXBvcnRzIHRoZSBmcmFtZSBzdGFydGVkIGxvYWRpbmcgc29tZXRoaW5nLgog
ICoKLSAqIEBwYXJhbSBvIFZpZXcuCisgKiBAcGFyYW0gZXdrVmlldyBWaWV3LgogICoKICAqIEVt
aXRzIHNpZ25hbDogImxvYWQsc3RhcnRlZCIgb24gbWFpbiBmcmFtZSB3aXRoIG5vIHBhcmFtZXRl
cnMuCiAgKi8KQEAgLTI3NzgsNyArMjc3OCw3IEBAIHZvaWQgZXdrX3ZpZXdfZnJhbWVfbWFpbl9s
b2FkX3N0YXJ0ZWQoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiAgKiBAaW50ZXJuYWwKICAqIFJlcG9y
dHMgdGhlIG1haW4gZnJhbWUgc3RhcnRlZCBwcm92aXNpb25hbCBsb2FkLgogICoKLSAqIEBwYXJh
bSBvIFZpZXcuCisgKiBAcGFyYW0gZXdrVmlldyBWaWV3LgogICoKICAqIEVtaXRzIHNpZ25hbDog
ImxvYWQscHJvdmlzaW9uYWwiIG9uIFZpZXcgd2l0aCBubyBwYXJhbWV0ZXJzLgogICovCkBAIC0y
NzkyLDcgKzI3OTIsNyBAQCB2b2lkIGV3a192aWV3X2xvYWRfcHJvdmlzaW9uYWwoRXZhc19PYmpl
Y3QqIGV3a1ZpZXcpCiAgKiBAaW50ZXJuYWwKICAqIFJlcG9ydHMgdmlldyBjYW4gYmUgc2hvd24g
YWZ0ZXIgYSBuZXcgd2luZG93IGlzIGNyZWF0ZWQuCiAgKgotICogQHBhcmFtIG8gRnJhbWUuCisg
KiBAcGFyYW0gZXdrVmlldyBGcmFtZS4KICAqCiAgKiBFbWl0cyBzaWduYWw6ICJsb2FkLG5ld3dp
bmRvdyxzaG93IiBvbiB2aWV3IHdpdGggbm8gcGFyYW1ldGVycy4KICAqLwpAQCAtMjgwNywyMSAr
MjgwNywyMSBAQCB2b2lkIGV3a192aWV3X2xvYWRfc2hvdyhFdmFzX09iamVjdCogZXdrVmlldykK
ICAqIEBpbnRlcm5hbAogICogUmVwb3J0cyB0aGUgbWFpbiBmcmFtZSB3YXMgY2xlYXJlZC4KICAq
Ci0gKiBAcGFyYW0gbyBWaWV3LgorICogQHBhcmFtIGV3a1ZpZXcgVmlldy4KICAqLwogdm9pZCBl
d2tfdmlld19mcmFtZV9tYWluX2NsZWFyZWQoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7CiAgICAg
REJHKCJld2tWaWV3PSVwIiwgZXdrVmlldyk7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
Tihld2tWaWV3LCBzZCk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFwaS0+
Zmx1c2gpOwotICAgIHNkLT5hcGktPmZsdXNoKHNkKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1Jf
UkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk4oc21hcnREYXRhLT5hcGktPmZsdXNoKTsKKyAgICBzbWFydERhdGEtPmFwaS0+Zmx1c2goc21h
cnREYXRhKTsKIH0KIAogLyoqCiAgKiBAaW50ZXJuYWwKICAqIFJlcG9ydHMgdGhlIG1haW4gZnJh
bWUgcmVjZWl2ZWQgYW4gaWNvbi4KICAqCi0gKiBAcGFyYW0gbyBWaWV3LgorICogQHBhcmFtIGV3
a1ZpZXcgVmlldy4KICAqCiAgKiBFbWl0cyBzaWduYWw6ICJpY29uLHJlY2VpdmVkIiB3aXRoIG5v
IHBhcmFtZXRlcnMuCiAgKi8KQEAgLTI4NjgsMTAgKzI4NjgsMTAgQEAgdm9pZCBld2tfdmlld19s
b2FkX2Vycm9yKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBFd2tfRnJhbWVfTG9hZF9FcnJv
ciogZXJyb3IKICAqLwogdm9pZCBld2tfdmlld19sb2FkX3Byb2dyZXNzX2NoYW5nZWQoRXZhc19P
YmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3
LCBzZCk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2KTsKKyAgICBF
V0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSk7CisgICAgRVdLX1ZJ
RVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdik7CiAKLSAgICAvLyBFdmFzX0Nv
b3JkIHcsIGg7CisgICAgLy8gRXZhc19Db29yZCB3aWR0aCwgaGVpZ2h0OwogICAgIGRvdWJsZSBw
cm9ncmVzcyA9IHByaXYtPnBhZ2UtPnByb2dyZXNzKCktPmVzdGltYXRlZFByb2dyZXNzKCk7CiAK
ICAgICBEQkcoImV3a1ZpZXc9JXAgKHA9JTAuM2YpIiwgZXdrVmlldywgcHJvZ3Jlc3MpOwpAQCAt
Mjg4MSw5ICsyODgxLDkgQEAgdm9pZCBld2tfdmlld19sb2FkX3Byb2dyZXNzX2NoYW5nZWQoRXZh
c19PYmplY3QqIGV3a1ZpZXcpCiAKIC8qKgogICogQGludGVybmFsCi0gKiBSZXBvcnRzIHZpZXcg
QHBhcmFtIG8gc2hvdWxkIGJlIHJlc3RvcmVkIHRvIGRlZmF1bHQgY29uZGl0aW9ucworICogUmVw
b3J0cyB2aWV3IEBwYXJhbSBld2tWaWV3IHNob3VsZCBiZSByZXN0b3JlZCB0byBkZWZhdWx0IGNv
bmRpdGlvbnMKICAqCi0gKiBAcGFyYW0gbyBWaWV3LgorICogQHBhcmFtIGV3a1ZpZXcgVmlldy4K
ICAqIEBwYXJhbSBmcmFtZSBGcmFtZSB0aGF0IG9yaWdpbmF0ZWQgcmVzdG9yZS4KICAqCiAgKiBF
bWl0cyBzaWduYWw6ICJyZXN0b3JlIiB3aXRoIGZyYW1lLgpAQCAtMjkwMywzMCArMjkwMywzMCBA
QCB2b2lkIGV3a192aWV3X3Jlc3RvcmVfc3RhdGUoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV2YXNf
T2JqZWN0KiBmcmFtZSkKICAqIGNhbGxpbmcgZXdrX3dpbmRvd19mZWF0dXJlc19yZWYod2luZG93
X2ZlYXR1cmVzKS4gT3RoZXJ3aXNlIHRoaXMgc3RydWN0IHdpbGwKICAqIGJlIGZyZWVkIGFmdGVy
IHJldHVybmluZyB0byB0aGlzIGZ1bmN0aW9uLgogICoKLSAqIEBwYXJhbSBvIEN1cnJlbnQgdmll
dy4KKyAqIEBwYXJhbSBld2tWaWV3IEN1cnJlbnQgdmlldy4KICAqIEBwYXJhbSBqYXZhc2NyaXB0
IEBjIEVJTkFfVFJVRSBpZiB0aGUgbmV3IHdpbmRvdyBpcyBvcmlnaW5hdGVkIGZyb20gamF2YXNj
cmlwdCwKICAqIEBjIEVJTkFfRkFMU0Ugb3RoZXJ3aXNlCi0gKiBAcGFyYW0gd2luZG93X2ZlYXR1
cmVzIEZlYXR1cmVzIG9mIHRoZSBuZXcgd2luZG93IGJlaW5nIGNyZWF0ZWQuIElmIGl0J3MgQGMK
KyAqIEBwYXJhbSB3aWR0aGluZG93X2ZlYXR1cmVzIEZlYXR1cmVzIG9mIHRoZSBuZXcgd2luZG93
IGJlaW5nIGNyZWF0ZWQuIElmIGl0J3MgQGMKICAqIE5VTEwsIGl0IHdpbGwgYmUgY3JlYXRlZCBh
IHdpbmRvdyB3aXRoIGRlZmF1bHQgZmVhdHVyZXMuCiAgKgogICogQHJldHVybiBOZXcgdmlldywg
aW4gY2FzZSBzbWFydCBjbGFzcyBpbXBsZW1lbnRzIHRoZSBjcmVhdGlvbiBvZiBuZXcgd2luZG93
czsKLSAqIGVsc2UsIGN1cnJlbnQgdmlldyBAcGFyYW0gbyBvciBAYyAwIG9uIGZhaWx1cmUuCisg
KiBlbHNlLCBjdXJyZW50IHZpZXcgQHBhcmFtIGV3a1ZpZXcgb3IgQGMgMCBvbiBmYWlsdXJlLgog
ICoKICAqIEBzZWUgZXdrX3dpbmRvd19mZWF0dXJlc19yZWYoKS4KICAqLwogRXZhc19PYmplY3Qq
IGV3a192aWV3X3dpbmRvd19jcmVhdGUoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCBq
YXZhc2NyaXB0LCBjb25zdCBXZWJDb3JlOjpXaW5kb3dGZWF0dXJlcyogY29yZUZlYXR1cmVzKQog
ewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIDApOworICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCAwKTsKIAotICAgIGlm
ICghc2QtPmFwaS0+d2luZG93X2NyZWF0ZSkKKyAgICBpZiAoIXNtYXJ0RGF0YS0+YXBpLT53aW5k
b3dfY3JlYXRlKQogICAgICAgICByZXR1cm4gZXdrVmlldzsKIAotICAgIEV3a19XaW5kb3dfRmVh
dHVyZXMqIHdpbmRvd19mZWF0dXJlcyA9IGV3a193aW5kb3dfZmVhdHVyZXNfbmV3X2Zyb21fY29y
ZShjb3JlRmVhdHVyZXMpOwotICAgIGlmICghd2luZG93X2ZlYXR1cmVzKQorICAgIEV3a19XaW5k
b3dfRmVhdHVyZXMqIHdpbmRvd0ZlYXR1cmVzID0gZXdrX3dpbmRvd19mZWF0dXJlc19uZXdfZnJv
bV9jb3JlKGNvcmVGZWF0dXJlcyk7CisgICAgaWYgKCF3aW5kb3dGZWF0dXJlcykKICAgICAgICAg
cmV0dXJuIDA7CiAKLSAgICBFdmFzX09iamVjdCogdmlldyA9IHNkLT5hcGktPndpbmRvd19jcmVh
dGUoc2QsIGphdmFzY3JpcHQsIHdpbmRvd19mZWF0dXJlcyk7Ci0gICAgZXdrX3dpbmRvd19mZWF0
dXJlc191bnJlZih3aW5kb3dfZmVhdHVyZXMpOworICAgIEV2YXNfT2JqZWN0KiB2aWV3ID0gc21h
cnREYXRhLT5hcGktPndpbmRvd19jcmVhdGUoc21hcnREYXRhLCBqYXZhc2NyaXB0LCB3aW5kb3dG
ZWF0dXJlcyk7CisgICAgZXdrX3dpbmRvd19mZWF0dXJlc191bnJlZih3aW5kb3dGZWF0dXJlcyk7
CiAKICAgICByZXR1cm4gdmlldzsKIH0KQEAgLTI5NDAsMTYgKzI5NDAsMTYgQEAgRXZhc19PYmpl
Y3QqIGV3a192aWV3X3dpbmRvd19jcmVhdGUoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9v
bCBqYXZhc2NyaXB0LAogICogd2l0aCBhICdzZWxmLmNsb3NlKCknIGluIEphdmFzY3JpcHQpIGJy
b3dzZXIgbXVzdCBwb3N0cG9uZSB0aGUgZGVsZXRpb24gdG8gYW4KICAqIGlkbGVyLgogICoKLSAq
IEBwYXJhbSBvIFZpZXcgdG8gYmUgY2xvc2VkLgorICogQHBhcmFtIGV3a1ZpZXcgVmlldyB0byBi
ZSBjbG9zZWQuCiAgKi8KIHZvaWQgZXdrX3ZpZXdfd2luZG93X2Nsb3NlKEV2YXNfT2JqZWN0KiBl
d2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QpOwor
ICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhKTsKIAogICAg
IGV3a192aWV3X3N0b3AoZXdrVmlldyk7Ci0gICAgaWYgKCFzZC0+YXBpLT53aW5kb3dfY2xvc2Up
CisgICAgaWYgKCFzbWFydERhdGEtPmFwaS0+d2luZG93X2Nsb3NlKQogICAgICAgICByZXR1cm47
Ci0gICAgc2QtPmFwaS0+d2luZG93X2Nsb3NlKHNkKTsKKyAgICBzbWFydERhdGEtPmFwaS0+d2lu
ZG93X2Nsb3NlKHNtYXJ0RGF0YSk7CiB9CiAKIC8qKgpAQCAtMjk5MCw3ICsyOTkwLDcgQEAgdm9p
ZCBld2tfdmlld190b29sYmFyc192aXNpYmxlX3NldChFdmFzX09iamVjdCogZXdrVmlldywgRWlu
YV9Cb29sIHZpc2libGUpCiAgKiBAaW50ZXJuYWwKICAqIEdldCB0b29sYmFyIHZpc2liaWxpdHku
CiAgKgotICogQHBhcmFtIG8gVmlldy4KKyAqIEBwYXJhbSBld2tWaWV3IFZpZXcuCiAgKiBAcGFy
YW0gdmlzaWJsZSBib29sZWFuIHBvaW50ZXIgaW4gd2hpY2ggdG8gc2F2ZSB0aGUgcmVzdWx0LiBJ
dCBkZWZhdWx0cwogICogdG8gQGMgRkFMU0UsIGkuZS4gaWYgYnJvd3NlciBkb2VzIG5vIGxpc3Rl
biB0byBlbWl0dGVkIHNpZ25hbCwgaXQgbWVhbnMKICAqIHRoZXJlIGFyZSBubyB0b29sYmFycyBh
bmQgdGhlcmVmb3JlIHRoZXkgYXJlIG5vdCB2aXNpYmxlLgpAQCAtMzAwOCw3ICszMDA4LDcgQEAg
dm9pZCBld2tfdmlld190b29sYmFyc192aXNpYmxlX2dldChFdmFzX09iamVjdCogZXdrVmlldywg
RWluYV9Cb29sKiB2aXNpYmxlKQogICogQGludGVybmFsCiAgKiBTZXQgc3RhdHVzYmFyIHZpc2li
bGUuCiAgKgotICogQHBhcmFtIG8gVmlldy4KKyAqIEBwYXJhbSBld2tWaWV3IFZpZXcuCiAgKiBA
cGFyYW0gdmlzaWJsZSBAYyBUUlVFIGlmIHN0YXR1c2JhciBhcmUgdmlzaWJsZSwgQGMgRkFMU0Ug
b3RoZXJ3aXNlLgogICoKICAqIEVtaXRzIHNpZ25hbDogInN0YXR1c2Jhcix2aXNpYmxlLHNldCIg
d2l0aCBhIHBvaW50ZXIgdG8gYSBib29sZWFuLgpAQCAtMzAyMyw3ICszMDIzLDcgQEAgdm9pZCBl
d2tfdmlld19zdGF0dXNiYXJfdmlzaWJsZV9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFf
Qm9vbCB2aXNpYmxlKQogICogQGludGVybmFsCiAgKiBHZXQgc3RhdHVzYmFyIHZpc2liaWxpdHku
CiAgKgotICogQHBhcmFtIG8gVmlldy4KKyAqIEBwYXJhbSBld2tWaWV3IFZpZXcuCiAgKiBAcGFy
YW0gdmlzaWJsZSBib29sZWFuIHBvaW50ZXIgaW4gd2hpY2ggdG8gc2F2ZSB0aGUgcmVzdWx0LiBJ
dCBkZWZhdWx0cwogICogdG8gQGMgRkFMU0UsIGkuZS4gaWYgYnJvd3NlciBkb2VzIG5vIGxpc3Rl
biB0byBlbWl0dGVkIHNpZ25hbCwgaXQgbWVhbnMKICAqIHRoZXJlIGlzIG5vIHN0YXR1c2JhciBh
bmQgdGhlcmVmb3JlIGl0IGlzIG5vdCB2aXNpYmxlLgpAQCAtMzA0MSw3ICszMDQxLDcgQEAgdm9p
ZCBld2tfdmlld19zdGF0dXNiYXJfdmlzaWJsZV9nZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVp
bmFfQm9vbCogdmlzaWJsZSkKICAqIEBpbnRlcm5hbAogICogU2V0IHRleHQgb2Ygc3RhdHVzYmFy
CiAgKgotICogQHBhcmFtIG8gVmlldy4KKyAqIEBwYXJhbSBld2tWaWV3IFZpZXcuCiAgKiBAcGFy
YW0gdGV4dCBOZXcgdGV4dCB0byBwdXQgb24gc3RhdHVzYmFyLgogICoKICAqIEVtaXRzIHNpZ25h
bDogInN0YXR1c2Jhcix0ZXh0LHNldCIgd2l0aCBhIHN0cmluZy4KQEAgLTMwNTcsNyArMzA1Nyw3
IEBAIHZvaWQgZXdrX3ZpZXdfc3RhdHVzYmFyX3RleHRfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3
LCBjb25zdCBjaGFyKiB0ZXh0KQogICogQGludGVybmFsCiAgKiBTZXQgc2Nyb2xsYmFycyB2aXNp
YmxlLgogICoKLSAqIEBwYXJhbSBvIFZpZXcuCisgKiBAcGFyYW0gZXdrVmlldyBWaWV3LgogICog
QHBhcmFtIHZpc2libGUgQGMgVFJVRSBpZiBzY3JvbGxiYXJzIGFyZSB2aXNpYmxlLCBAYyBGQUxT
RSBvdGhlcndpc2UuCiAgKgogICogRW1pdHMgc2lnbmFsOiAic2Nyb2xsYmFycyx2aXNpYmxlLHNl
dCIgd2l0aCBhIHBvaW50ZXIgdG8gYSBib29sZWFuLgpAQCAtMzA3Miw3ICszMDcyLDcgQEAgdm9p
ZCBld2tfdmlld19zY3JvbGxiYXJzX3Zpc2libGVfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBF
aW5hX0Jvb2wgdmlzaWJsZSkKICAqIEBpbnRlcm5hbAogICogR2V0IHNjcm9sbGJhcnMgdmlzaWJp
bGl0eS4KICAqCi0gKiBAcGFyYW0gbyBWaWV3LgorICogQHBhcmFtIGV3a1ZpZXcgVmlldy4KICAq
IEBwYXJhbSB2aXNpYmxlIGJvb2xlYW4gcG9pbnRlciBpbiB3aGljaCB0byBzYXZlIHRoZSByZXN1
bHQuIEl0IGRlZmF1bHRzCiAgKiB0byBAYyBGQUxTRSwgaS5lLiBpZiBicm93c2VyIGRvZXMgbm8g
bGlzdGVuIHRvIGVtaXR0ZWQgc2lnbmFsLCBpdCBtZWFucwogICogdGhlcmUgYXJlIG5vIHNjcm9s
bGJhcnMgYW5kIHRoZXJlZm9yZSB0aGV5IGFyZSBub3QgdmlzaWJsZS4KQEAgLTMwOTAsNyArMzA5
MCw3IEBAIHZvaWQgZXdrX3ZpZXdfc2Nyb2xsYmFyc192aXNpYmxlX2dldChFdmFzX09iamVjdCog
ZXdrVmlldywgRWluYV9Cb29sKiB2aXNpYmxlKQogICogQGludGVybmFsCiAgKiBTZXQgbWVudWJh
ciB2aXNpYmxlLgogICoKLSAqIEBwYXJhbSBvIFZpZXcuCisgKiBAcGFyYW0gZXdrVmlldyBWaWV3
LgogICogQHBhcmFtIHZpc2libGUgQGMgVFJVRSBpZiBtZW51YmFyIGlzIHZpc2libGUsIEBjIEZB
TFNFIG90aGVyd2lzZS4KICAqCiAgKiBFbWl0cyBzaWduYWw6ICJtZW51YmFyLHZpc2libGUsc2V0
IiB3aXRoIGEgcG9pbnRlciB0byBhIGJvb2xlYW4uCkBAIC0zMTA1LDcgKzMxMDUsNyBAQCB2b2lk
IGV3a192aWV3X21lbnViYXJfdmlzaWJsZV9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFf
Qm9vbCB2aXNpYmxlKQogICogQGludGVybmFsCiAgKiBHZXQgbWVudWJhciB2aXNpYmlsaXR5Lgog
ICoKLSAqIEBwYXJhbSBvIFZpZXcuCisgKiBAcGFyYW0gZXdrVmlldyBWaWV3LgogICogQHBhcmFt
IHZpc2libGUgYm9vbGVhbiBwb2ludGVyIGluIHdoaWNoIHRvIHNhdmUgdGhlIHJlc3VsdC4gSXQg
ZGVmYXVsdHMKICAqIHRvIEBjIEZBTFNFLCBpLmUuIGlmIGJyb3dzZXIgZG9lcyBubyBsaXN0ZW4g
dG8gZW1pdHRlZCBzaWduYWwsIGl0IG1lYW5zCiAgKiB0aGVyZSBpcyBubyBtZW51YmFyIGFuZCB0
aGVyZWZvcmUgaXQgaXMgbm90IHZpc2libGUuCkBAIC0zMTIzLDcgKzMxMjMsNyBAQCB2b2lkIGV3
a192aWV3X21lbnViYXJfdmlzaWJsZV9nZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9v
bCogdmlzaWJsZSkKICAqIEBpbnRlcm5hbAogICogU2V0IHRvb2x0aXAgdGV4dCBhbmQgZGlzcGxh
eSBpZiBpdCBpcyBjdXJyZW50bHkgaGlkZGVuLgogICoKLSAqIEBwYXJhbSBvIFZpZXcuCisgKiBA
cGFyYW0gZXdrVmlldyBWaWV3LgogICogQHBhcmFtIHRleHQgVGV4dCB0byBzZXQgdG9vbHRpcCB0
by4KICAqCiAgKiBFbWl0cyBzaWduYWw6ICJ0b29sdGlwLHRleHQsc2V0IiB3aXRoIGEgc3RyaW5n
LiBJZiB0b29sdGlwIG11c3QgYmUgYWN0dWFsbHkKQEAgLTMxMzgsNyArMzEzOCw3IEBAIHZvaWQg
ZXdrX3ZpZXdfdG9vbHRpcF90ZXh0X3NldChFdmFzX09iamVjdCogZXdrVmlldywgY29uc3QgY2hh
ciogdGV4dCkKIC8qKgogICogQGludGVybmFsCiAgKgotICogQHBhcmFtIG8gVmlldy4KKyAqIEBw
YXJhbSBld2tWaWV3IFZpZXcuCiAgKiBAcGFyYW0gbWVzc2FnZSBTdHJpbmcgdG8gc2hvdyBvbiBj
b25zb2xlLgogICogQHBhcmFtIGxpbmVOdW1iZXIgTGluZSBudW1iZXIuCiAgKiBAc291cmNlSUQg
U291cmNlIGlkLgpAQCAtMzE0Nyw1OCArMzE0Nyw1OCBAQCB2b2lkIGV3a192aWV3X3Rvb2x0aXBf
dGV4dF9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGNvbnN0IGNoYXIqIHRleHQpCiB2b2lkIGV3
a192aWV3X2FkZF9jb25zb2xlX21lc3NhZ2UoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGNvbnN0IGNo
YXIqIG1lc3NhZ2UsIHVuc2lnbmVkIGludCBsaW5lTnVtYmVyLCBjb25zdCBjaGFyKiBzb3VyY2VJ
RCkKIHsKICAgICBEQkcoImV3a1ZpZXc9JXAgbWVzc2FnZT0lcyBsaW5lTnVtYmVyPSV1IHNvdXJj
ZUlEPSVzIiwgZXdrVmlldywgbWVzc2FnZSwgbGluZU51bWJlciwgc291cmNlSUQpOwotICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QpOwotICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOKHNkLT5hcGkpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNk
LT5hcGktPmFkZF9jb25zb2xlX21lc3NhZ2UpOwotICAgIHNkLT5hcGktPmFkZF9jb25zb2xlX21l
c3NhZ2Uoc2QsIG1lc3NhZ2UsIGxpbmVOdW1iZXIsIHNvdXJjZUlEKTsKKyAgICBFV0tfVklFV19T
RF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSk7CisgICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk4oc21hcnREYXRhLT5hcGkpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOKHNtYXJ0RGF0YS0+YXBpLT5hZGRfY29uc29sZV9tZXNzYWdlKTsKKyAgICBzbWFydERhdGEt
PmFwaS0+YWRkX2NvbnNvbGVfbWVzc2FnZShzbWFydERhdGEsIG1lc3NhZ2UsIGxpbmVOdW1iZXIs
IHNvdXJjZUlEKTsKIH0KIAogYm9vbCBld2tfdmlld19mb2N1c19jYW5fY3ljbGUoRXZhc19PYmpl
Y3QqIGV3a1ZpZXcsIEV3a19Gb2N1c19EaXJlY3Rpb24gZGlyZWN0aW9uKQogewogICAgIERCRygi
ZXdrVmlldz0lcCBkaXJlY3Rpb249JWQiLCBld2tWaWV3LCBkaXJlY3Rpb24pOwotICAgIEVXS19W
SUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIGZhbHNlKTsKLSAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmFwaSwgZmFsc2UpOworICAgIEVXS19WSUVXX1NEX0dF
VF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBmYWxzZSk7CisgICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+YXBpLCBmYWxzZSk7CiAKLSAgICBpZiAoIXNk
LT5hcGktPmZvY3VzX2Nhbl9jeWNsZSkKKyAgICBpZiAoIXNtYXJ0RGF0YS0+YXBpLT5mb2N1c19j
YW5fY3ljbGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIHJldHVybiBzZC0+YXBpLT5m
b2N1c19jYW5fY3ljbGUoc2QsIGRpcmVjdGlvbik7CisgICAgcmV0dXJuIHNtYXJ0RGF0YS0+YXBp
LT5mb2N1c19jYW5fY3ljbGUoc21hcnREYXRhLCBkaXJlY3Rpb24pOwogfQogCiB2b2lkIGV3a192
aWV3X3J1bl9qYXZhc2NyaXB0X2FsZXJ0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFdmFzX09iamVj
dCogZnJhbWUsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpCiB7CiAgICAgREJHKCJld2tWaWV3PSVwIGZy
YW1lPSVwIG1lc3NhZ2U9JXMiLCBld2tWaWV3LCBmcmFtZSwgbWVzc2FnZSk7Ci0gICAgRVdLX1ZJ
RVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk4oc2QtPmFwaSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3
LCBzbWFydERhdGEpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+
YXBpKTsKIAotICAgIGlmICghc2QtPmFwaS0+cnVuX2phdmFzY3JpcHRfYWxlcnQpCisgICAgaWYg
KCFzbWFydERhdGEtPmFwaS0+cnVuX2phdmFzY3JpcHRfYWxlcnQpCiAgICAgICAgIHJldHVybjsK
IAotICAgIHNkLT5hcGktPnJ1bl9qYXZhc2NyaXB0X2FsZXJ0KHNkLCBmcmFtZSwgbWVzc2FnZSk7
CisgICAgc21hcnREYXRhLT5hcGktPnJ1bl9qYXZhc2NyaXB0X2FsZXJ0KHNtYXJ0RGF0YSwgZnJh
bWUsIG1lc3NhZ2UpOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfcnVuX2phdmFzY3JpcHRfY29u
ZmlybShFdmFzX09iamVjdCogZXdrVmlldywgRXZhc19PYmplY3QqIGZyYW1lLCBjb25zdCBjaGFy
KiBtZXNzYWdlKQogewogICAgIERCRygiZXdrVmlldz0lcCBmcmFtZT0lcCBtZXNzYWdlPSVzIiwg
ZXdrVmlldywgZnJhbWUsIG1lc3NhZ2UpOwotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJO
X1ZBTChzZC0+YXBpLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJO
KGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+YXBpLCBFSU5BX0ZBTFNFKTsKIAotICAgIGlmICghc2Qt
PmFwaS0+cnVuX2phdmFzY3JpcHRfY29uZmlybSkKKyAgICBpZiAoIXNtYXJ0RGF0YS0+YXBpLT5y
dW5famF2YXNjcmlwdF9jb25maXJtKQogICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKIAotICAg
IHJldHVybiBzZC0+YXBpLT5ydW5famF2YXNjcmlwdF9jb25maXJtKHNkLCBmcmFtZSwgbWVzc2Fn
ZSk7CisgICAgcmV0dXJuIHNtYXJ0RGF0YS0+YXBpLT5ydW5famF2YXNjcmlwdF9jb25maXJtKHNt
YXJ0RGF0YSwgZnJhbWUsIG1lc3NhZ2UpOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfcnVuX2ph
dmFzY3JpcHRfcHJvbXB0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFdmFzX09iamVjdCogZnJhbWUs
IGNvbnN0IGNoYXIqIG1lc3NhZ2UsIGNvbnN0IGNoYXIqIGRlZmF1bHRWYWx1ZSwgY2hhcioqIHZh
bHVlKQogewogICAgIERCRygiZXdrVmlldz0lcCBmcmFtZT0lcCBtZXNzYWdlPSVzIiwgZXdrVmll
dywgZnJhbWUsIG1lc3NhZ2UpOwotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmll
dywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChz
ZC0+YXBpLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1Zp
ZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk5fVkFMKHNtYXJ0RGF0YS0+YXBpLCBFSU5BX0ZBTFNFKTsKIAotICAgIGlmICghc2QtPmFwaS0+
cnVuX2phdmFzY3JpcHRfcHJvbXB0KQorICAgIGlmICghc21hcnREYXRhLT5hcGktPnJ1bl9qYXZh
c2NyaXB0X3Byb21wdCkKICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CiAKLSAgICByZXR1cm4g
c2QtPmFwaS0+cnVuX2phdmFzY3JpcHRfcHJvbXB0KHNkLCBmcmFtZSwgbWVzc2FnZSwgZGVmYXVs
dFZhbHVlLCB2YWx1ZSk7CisgICAgcmV0dXJuIHNtYXJ0RGF0YS0+YXBpLT5ydW5famF2YXNjcmlw
dF9wcm9tcHQoc21hcnREYXRhLCBmcmFtZSwgbWVzc2FnZSwgZGVmYXVsdFZhbHVlLCB2YWx1ZSk7
CiB9CiAKIC8qKgpAQCAtMzIwOCwyMCArMzIwOCwyMCBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfcnVu
X2phdmFzY3JpcHRfcHJvbXB0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFdmFzX09iamVjdCogZnJh
bQogICogaW1wbGVtZW50YXRpb24sIHdoaWNoIGxvZ3MgYW5kIHJldHVybnMgRUlOQV9GQUxTRS4g
Q2xpZW50IG1heSByZW1vdmUgbG9nIGJ5CiAgKiBzZXR0aW5nIHRoaXMgZnVuY3Rpb24gMCwgd2hp
Y2ggd2lsbCBqdXN0IHJldHVybiBFSU5BX0ZBTFNFLgogICoKLSAqIEBwYXJhbSBvIFZpZXcuCisg
KiBAcGFyYW0gZXdrVmlldyBWaWV3LgogICoKICAqIEByZXR1cm4gQGMgRUlOQV9UUlVFIGlmIHNj
cmlwdCBzaG91bGQgYmUgc3RvcHBlZDsgQGMgRUlOQV9GQUxTRSBvdGhlcndpc2UKICAqLwogRWlu
YV9Cb29sIGV3a192aWV3X3Nob3VsZF9pbnRlcnJ1cHRfamF2YXNjcmlwdChFdmFzX09iamVjdCog
ZXdrVmlldykKIHsKICAgICBEQkcoImV3a1ZpZXc9JXAiLCBld2tWaWV3KTsKLSAgICBFV0tfVklF
V19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmFwaSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJ
RVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmFwaSwgRUlOQV9GQUxT
RSk7CiAKLSAgICBpZiAoIXNkLT5hcGktPnNob3VsZF9pbnRlcnJ1cHRfamF2YXNjcmlwdCkKKyAg
ICBpZiAoIXNtYXJ0RGF0YS0+YXBpLT5zaG91bGRfaW50ZXJydXB0X2phdmFzY3JpcHQpCiAgICAg
ICAgIHJldHVybiBFSU5BX0ZBTFNFOwogCi0gICAgcmV0dXJuIHNkLT5hcGktPnNob3VsZF9pbnRl
cnJ1cHRfamF2YXNjcmlwdChzZCk7CisgICAgcmV0dXJuIHNtYXJ0RGF0YS0+YXBpLT5zaG91bGRf
aW50ZXJydXB0X2phdmFzY3JpcHQoc21hcnREYXRhKTsKIH0KIAogLyoqCkBAIC0zMjMxLDIzICsz
MjMxLDIzIEBAIEVpbmFfQm9vbCBld2tfdmlld19zaG91bGRfaW50ZXJydXB0X2phdmFzY3JpcHQo
RXZhc19PYmplY3QqIGV3a1ZpZXcpCiAgKiBpcyBleGNlZWRlZC4gQnJvd3NlciBtYXkgdXNlIHRo
aXMgdG8gaW5jcmVhc2UgdGhlIHNpemUgb2YgcXVvdGEgYmVmb3JlIHRoZQogICogb3JpZ2luYXRp
bmcgb3BlcmF0aW9uYSBmYWlscy4KICAqCi0gKiBAcGFyYW0gbyBWaWV3LgorICogQHBhcmFtIGV3
a1ZpZXcgVmlldy4KICAqIEBwYXJhbSBmcmFtZSBUaGUgZnJhbWUgd2hvc2Ugd2ViIHBhZ2UgZXhj
ZWVkZWQgaXRzIGRhdGFiYXNlIHF1b3RhLgogICogQHBhcmFtIGRhdGFiYXNlTmFtZSBEYXRhYmFz
ZSBuYW1lLgotICogQHBhcmFtIGN1cnJlbnRfc2l6ZSBDdXJyZW50IHNpemUgb2YgdGhpcyBkYXRh
YmFzZQotICogQHBhcmFtIGV4cGVjdGVkX3NpemUgVGhlIGV4cGVjdGVkIHNpemUgb2YgdGhpcyBk
YXRhYmFzZSBpbiBvcmRlciB0byBmdWxmaWxsCisgKiBAcGFyYW0gY3VycmVudFNpemUgQ3VycmVu
dCBzaXplIG9mIHRoaXMgZGF0YWJhc2UKKyAqIEBwYXJhbSBleHBlY3RlZFNpemUgVGhlIGV4cGVj
dGVkIHNpemUgb2YgdGhpcyBkYXRhYmFzZSBpbiBvcmRlciB0byBmdWxmaWxsCiAgKiBzaXRlJ3Mg
cmVxdWlyZW1lbnQuCiAgKi8KIHVpbnQ2NF90IGV3a192aWV3X2V4Y2VlZGVkX2RhdGFiYXNlX3F1
b3RhKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFdmFzX09iamVjdCogZnJhbWUsIGNvbnN0IGNoYXIq
IGRhdGFiYXNlTmFtZSwgdWludDY0X3QgY3VycmVudFNpemUsIHVpbnQ2NF90IGV4cGVjdGVkU2l6
ZSkKIHsKICAgICBEQkcoImV3a1ZpZXc9JXAiLCBld2tWaWV3KTsKLSAgICBFV0tfVklFV19TRF9H
RVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAwKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTl9WQUwoc2QtPmFwaSwgMCk7Ci0gICAgaWYgKCFzZC0+YXBpLT5leGNlZWRlZF9kYXRhYmFz
ZV9xdW90YSkKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0
YSwgMCk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+YXBp
LCAwKTsKKyAgICBpZiAoIXNtYXJ0RGF0YS0+YXBpLT5leGNlZWRlZF9kYXRhYmFzZV9xdW90YSkK
ICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBJTkYoImN1cnJlbnRfc2l6ZT0lIiBQUkl1NjQgIiBl
eHBlY3RlZF9zaXplPSUiIFBSSXU2NCwgY3VycmVudFNpemUsIGV4cGVjdGVkU2l6ZSk7Ci0gICAg
cmV0dXJuIHNkLT5hcGktPmV4Y2VlZGVkX2RhdGFiYXNlX3F1b3RhKHNkLCBmcmFtZSwgZGF0YWJh
c2VOYW1lLCBjdXJyZW50U2l6ZSwgZXhwZWN0ZWRTaXplKTsKKyAgICBJTkYoImN1cnJlbnRTaXpl
PSUiIFBSSXU2NCAiIGV4cGVjdGVkU2l6ZT0lIiBQUkl1NjQsIGN1cnJlbnRTaXplLCBleHBlY3Rl
ZFNpemUpOworICAgIHJldHVybiBzbWFydERhdGEtPmFwaS0+ZXhjZWVkZWRfZGF0YWJhc2VfcXVv
dGEoc21hcnREYXRhLCBmcmFtZSwgZGF0YWJhc2VOYW1lLCBjdXJyZW50U2l6ZSwgZXhwZWN0ZWRT
aXplKTsKIH0KIAogLyoqCkBAIC0zMjY1LDE5ICszMjY1LDE5IEBAIHVpbnQ2NF90IGV3a192aWV3
X2V4Y2VlZGVkX2RhdGFiYXNlX3F1b3RhKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFdmFzX09iamVj
dCogZnJhCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfcnVuX29wZW5fcGFuZWwoRXZhc19PYmplY3QqIGV3
a1ZpZXcsIEV2YXNfT2JqZWN0KiBmcmFtZSwgYm9vbCBhbGxvd3NNdWx0aXBsZUZpbGVzLCBjb25z
dCBXVEY6OlZlY3RvcjxXVEY6OlN0cmluZz4mIGFjY2VwdE1JTUVUeXBlcywgRWluYV9MaXN0Kiog
c2VsZWN0ZWRGaWxlbmFtZXMpCiB7CiAgICAgREJHKCJld2tWaWV3PSVwIGZyYW1lPSVwIGFsbG93
c19tdWx0aXBsZV9maWxlcz0lZCIsIGV3a1ZpZXcsIGZyYW1lLCBhbGxvd3NNdWx0aXBsZUZpbGVz
KTsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNF
KTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmFwaSwgRUlOQV9GQUxT
RSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJ
TkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEt
PmFwaSwgRUlOQV9GQUxTRSk7CiAKLSAgICBpZiAoIXNkLT5hcGktPnJ1bl9vcGVuX3BhbmVsKQor
ICAgIGlmICghc21hcnREYXRhLT5hcGktPnJ1bl9vcGVuX3BhbmVsKQogICAgICAgICByZXR1cm4g
RUlOQV9GQUxTRTsKIAogICAgICpzZWxlY3RlZEZpbGVuYW1lcyA9IDA7CiAKICAgICBFaW5hX0xp
c3QqIGNBY2NlcHRNSU1FVHlwZXMgPSAwOwotICAgIGZvciAoV1RGOjpWZWN0b3I8V1RGOjpTdHJp
bmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGFjY2VwdE1JTUVUeXBlcy5iZWdpbigpOyBpdCAhPSBh
Y2NlcHRNSU1FVHlwZXMuZW5kKCk7ICsraXQpCi0gICAgICAgIGNBY2NlcHRNSU1FVHlwZXMgPSBl
aW5hX2xpc3RfYXBwZW5kKGNBY2NlcHRNSU1FVHlwZXMsIHN0cmR1cCgoKml0KS51dGY4KCkuZGF0
YSgpKSk7CisgICAgZm9yIChXVEY6OlZlY3RvcjxXVEY6OlN0cmluZz46OmNvbnN0X2l0ZXJhdG9y
IGl0ZXJhdG9yID0gYWNjZXB0TUlNRVR5cGVzLmJlZ2luKCk7IGl0ZXJhdG9yICE9IGFjY2VwdE1J
TUVUeXBlcy5lbmQoKTsgKytpdGVyYXRvcikKKyAgICAgICAgY0FjY2VwdE1JTUVUeXBlcyA9IGVp
bmFfbGlzdF9hcHBlbmQoY0FjY2VwdE1JTUVUeXBlcywgc3RyZHVwKCgqaXRlcmF0b3IpLnV0Zjgo
KS5kYXRhKCkpKTsKIAotICAgIGJvb2wgY29uZmlybSA9IHNkLT5hcGktPnJ1bl9vcGVuX3BhbmVs
KHNkLCBmcmFtZSwgYWxsb3dzTXVsdGlwbGVGaWxlcywgY0FjY2VwdE1JTUVUeXBlcywgc2VsZWN0
ZWRGaWxlbmFtZXMpOworICAgIGJvb2wgY29uZmlybSA9IHNtYXJ0RGF0YS0+YXBpLT5ydW5fb3Bl
bl9wYW5lbChzbWFydERhdGEsIGZyYW1lLCBhbGxvd3NNdWx0aXBsZUZpbGVzLCBjQWNjZXB0TUlN
RVR5cGVzLCBzZWxlY3RlZEZpbGVuYW1lcyk7CiAgICAgaWYgKCFjb25maXJtICYmICpzZWxlY3Rl
ZEZpbGVuYW1lcykKICAgICAgICAgRVJSKCJDYW5jZWxlZCBmaWxlIHNlbGVjdGlvbiwgYnV0IHNl
bGVjdGVkIGZpbGVuYW1lcyAhPSAwLiBGcmVlIG5hbWVzIGJlZm9yZSByZXR1cm4uIik7CiAKQEAg
LTMyOTEsMTEgKzMyOTEsMTEgQEAgRWluYV9Cb29sIGV3a192aWV3X3J1bl9vcGVuX3BhbmVsKEV2
YXNfT2JqZWN0KiBld2tWaWV3LCBFdmFzX09iamVjdCogZnJhbWUsIGJvb2wKIHZvaWQgZXdrX3Zp
ZXdfcmVwYWludChFdmFzX09iamVjdCogZXdrVmlldywgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3Jk
IHksIEV2YXNfQ29vcmQgd2lkdGgsIEV2YXNfQ29vcmQgaGVpZ2h0KQogewogICAgIERCRygiZXdr
Vmlldz0lcCwgcmVnaW9uPSVkLCVkICsgJWR4JWQiLCBld2tWaWV3LCB4LCB5LCB3aWR0aCwgaGVp
Z2h0KTsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkKTsKLSAgICBF
V0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYpOworICAgIEVXS19WSUVXX1NEX0dF
VF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9P
Ul9SRVRVUk4oc21hcnREYXRhLCBwcml2KTsKIAogICAgIF9ld2tfdmlld19yZXBhaW50X2FkZChw
cml2LCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICBfZXdrX3ZpZXdfc21hcnRfY2hhbmdlZChz
ZCk7CisgICAgX2V3a192aWV3X3NtYXJ0X2NoYW5nZWQoc21hcnREYXRhKTsKIH0KIAogdm9pZCBl
d2tfdmlld19zY3JvbGwoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV2YXNfQ29vcmQgZHgsIEV2YXNf
Q29vcmQgZHksIEV2YXNfQ29vcmQgc2Nyb2xsWCwgRXZhc19Db29yZCBzY3JvbGxZLCBFdmFzX0Nv
b3JkIHNjcm9sbFdpZHRoLCBFdmFzX0Nvb3JkIHNjcm9sbEhlaWdodCwgRXZhc19Db29yZCBjZW50
ZXJYLCBFdmFzX0Nvb3JkIGNlbnRlclksIEV2YXNfQ29vcmQgY2VudGVyV2lkdGgsIEV2YXNfQ29v
cmQgY2VudGVySGVpZ2h0LCBFaW5hX0Jvb2wgbWFpbkZyYW1lKQpAQCAtMzMwNywxOSArMzMwNywx
OSBAQCB2b2lkIGV3a192aWV3X3Njcm9sbChFdmFzX09iamVjdCogZXdrVmlldywgRXZhc19Db29y
ZCBkeCwgRXZhc19Db29yZCBkeSwgRXZhc19DbwogICAgICAgICBXUk4oInNjcm9sbCByZWdpb24g
YW5kIGNsaXAgYXJlIGRpZmZlcmVudCEgJWQsJWQrJWR4JWQgYW5kICVkLCVkKyVkeCVkIiwKICAg
ICAgICAgICAgIHNjcm9sbFgsIHNjcm9sbFksIHNjcm9sbFdpZHRoLCBzY3JvbGxIZWlnaHQsIGNl
bnRlclgsIGNlbnRlclksIGNlbnRlcldpZHRoLCBjZW50ZXJIZWlnaHQpOwogCi0gICAgRVdLX1ZJ
RVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRf
T1JfUkVUVVJOKHNkLCBwcml2KTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1Zp
ZXcsIHNtYXJ0RGF0YSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0
YSwgcHJpdik7CiAgICAgRUlOQV9TQUZFVFlfT05fVFJVRV9SRVRVUk4oIWR4ICYmICFkeSk7CiAK
ICAgICBfZXdrX3ZpZXdfc2Nyb2xsX2FkZChwcml2LCBkeCwgZHksIHNjcm9sbFgsIHNjcm9sbFks
IHNjcm9sbFdpZHRoLCBzY3JvbGxIZWlnaHQsIG1haW5GcmFtZSk7CiAKLSAgICBfZXdrX3ZpZXdf
c21hcnRfY2hhbmdlZChzZCk7CisgICAgX2V3a192aWV3X3NtYXJ0X2NoYW5nZWQoc21hcnREYXRh
KTsKIH0KIAogV2ViQ29yZTo6UGFnZSogZXdrX3ZpZXdfY29yZV9wYWdlX2dldChjb25zdCBFdmFz
X09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1Zp
ZXcsIHNkLCAwKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIDAp
OworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCAwKTsK
KyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCAwKTsKICAg
ICByZXR1cm4gcHJpdi0+cGFnZTsKIH0KIApAQCAtMzMzNCwzMCArMzMzNCwzMCBAQCBXVEY6OlBh
c3NSZWZQdHI8V2ViQ29yZTo6RnJhbWU+IGV3a192aWV3X2ZyYW1lX2NyZWF0ZShFdmFzX09iamVj
dCogZXdrVmlldywgRXZhcwogICAgICAgICBld2tWaWV3LCBmcmFtZSwgbmFtZS51dGY4KCkuZGF0
YSgpLCBvd25lckVsZW1lbnQsCiAgICAgICAgIHVybC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBy
ZWZlcnJlci51dGY4KCkuZGF0YSgpKTsKIAotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrVmlldywgc2QsIDApOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJp
diwgMCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEs
IDApOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIDAp
OwogCi0gICAgV1RGOjpSZWZQdHI8V2ViQ29yZTo6RnJhbWU+IGNmID0gX2V3a192aWV3X2NvcmVf
ZnJhbWVfbmV3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZCwg
cHJpdiwgb3duZXJFbGVtZW50KTsKLSAgICBpZiAoIWNmKSB7CisgICAgV1RGOjpSZWZQdHI8V2Vi
Q29yZTo6RnJhbWU+IGNvcmVGcmFtZSA9IF9ld2tfdmlld19jb3JlX2ZyYW1lX25ldworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc21hcnREYXRhLCBwcml2LCBvd25l
ckVsZW1lbnQpOworICAgIGlmICghY29yZUZyYW1lKSB7CiAgICAgICAgIEVSUigiQ291bGQgbm90
IGNyZWF0ZSBjaGlsZCBjb3JlIGZyYW1lICclcyciLCBuYW1lLnV0ZjgoKS5kYXRhKCkpOwogICAg
ICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBpZiAoIWV3a19mcmFtZV9jaGlsZF9hZGQoZnJh
bWUsIGNmLCBuYW1lLCB1cmwsIHJlZmVycmVyKSkgeworICAgIGlmICghZXdrX2ZyYW1lX2NoaWxk
X2FkZChmcmFtZSwgY29yZUZyYW1lLCBuYW1lLCB1cmwsIHJlZmVycmVyKSkgewogICAgICAgICBF
UlIoIkNvdWxkIG5vdCBjcmVhdGUgY2hpbGQgZnJhbWUgb2JqZWN0ICclcyciLCBuYW1lLnV0Zjgo
KS5kYXRhKCkpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKICAgICAvLyBUaGUgY3JlYXRp
b24gb2YgdGhlIGZyYW1lIG1heSBoYXZlIHJlbW92ZWQgaXRzZWxmIGFscmVhZHkuCi0gICAgaWYg
KCFjZi0+cGFnZSgpIHx8ICFjZi0+dHJlZSgpIHx8ICFjZi0+dHJlZSgpLT5wYXJlbnQoKSkKKyAg
ICBpZiAoIWNvcmVGcmFtZS0+cGFnZSgpIHx8ICFjb3JlRnJhbWUtPnRyZWUoKSB8fCAhY29yZUZy
YW1lLT50cmVlKCktPnBhcmVudCgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIHNkLT5jaGFu
Z2VkLmZyYW1lX3JlY3QgPSBFSU5BX1RSVUU7Ci0gICAgX2V3a192aWV3X3NtYXJ0X2NoYW5nZWQo
c2QpOworICAgIHNtYXJ0RGF0YS0+Y2hhbmdlZC5mcmFtZV9yZWN0ID0gRUlOQV9UUlVFOworICAg
IF9ld2tfdmlld19zbWFydF9jaGFuZ2VkKHNtYXJ0RGF0YSk7CiAKICAgICBldmFzX29iamVjdF9z
bWFydF9jYWxsYmFja19jYWxsKGV3a1ZpZXcsICJmcmFtZSxjcmVhdGVkIiwgZnJhbWUpOwotICAg
IHJldHVybiBjZi5yZWxlYXNlKCk7CisgICAgcmV0dXJuIGNvcmVGcmFtZS5yZWxlYXNlKCk7CiB9
CiAKIFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpXaWRnZXQ+IGV3a192aWV3X3BsdWdpbl9jcmVh
dGUoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV2YXNfT2JqZWN0KiBmcmFtZSwgY29uc3QgV2ViQ29y
ZTo6SW50U2l6ZSYgcGx1Z2luU2l6ZSwgV2ViQ29yZTo6SFRNTFBsdWdJbkVsZW1lbnQqIGVsZW1l
bnQsIGNvbnN0IFdlYkNvcmU6OktVUkwmIHVybCwgY29uc3QgV1RGOjpWZWN0b3I8V1RGOjpTdHJp
bmc+JiBwYXJhbU5hbWVzLCBjb25zdCBXVEY6OlZlY3RvcjxXVEY6OlN0cmluZz4mIHBhcmFtVmFs
dWVzLCBjb25zdCBXVEY6OlN0cmluZyYgbWltZVR5cGUsIGJvb2wgbG9hZE1hbnVhbGx5KQpAQCAt
MzM2Niw5ICszMzY2LDkgQEAgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OldpZGdldD4gZXdrX3Zp
ZXdfcGx1Z2luX2NyZWF0ZShFdmFzX09iamVjdCogZXdrVmlldywgRXYKICAgICAgICAgZXdrVmll
dywgZnJhbWUsIHBsdWdpblNpemUud2lkdGgoKSwgcGx1Z2luU2l6ZS5oZWlnaHQoKSwgZWxlbWVu
dCwKICAgICAgICAgdXJsLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIG1pbWVUeXBlLnV0ZjgoKS5k
YXRhKCkpOwogCi0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgMCk7
Ci0gICAgc2QtPmNoYW5nZWQuZnJhbWVfcmVjdCA9IEVJTkFfVFJVRTsKLSAgICBfZXdrX3ZpZXdf
c21hcnRfY2hhbmdlZChzZCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3
LCBzbWFydERhdGEsIDApOworICAgIHNtYXJ0RGF0YS0+Y2hhbmdlZC5mcmFtZV9yZWN0ID0gRUlO
QV9UUlVFOworICAgIF9ld2tfdmlld19zbWFydF9jaGFuZ2VkKHNtYXJ0RGF0YSk7CiAKICAgICBy
ZXR1cm4gZXdrX2ZyYW1lX3BsdWdpbl9jcmVhdGUKICAgICAgICAgICAgICAgIChmcmFtZSwgcGx1
Z2luU2l6ZSwgZWxlbWVudCwgdXJsLCBwYXJhbU5hbWVzLCBwYXJhbVZhbHVlcywKQEAgLTMzODks
MTMgKzMzODksMTMgQEAgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OldpZGdldD4gZXdrX3ZpZXdf
cGx1Z2luX2NyZWF0ZShFdmFzX09iamVjdCogZXdrVmlldywgRXYKIHZvaWQgZXdrX3ZpZXdfcG9w
dXBfbmV3KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBXZWJDb3JlOjpQb3B1cE1lbnVDbGllbnQqIGNs
aWVudCwgaW50IHNlbGVjdGVkLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KQogewogICAg
IElORigiZXdrVmlldz0lcCIsIGV3a1ZpZXcpOwotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRV
Uk4oZXdrVmlldywgc2QpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJp
dik7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEpOwor
ICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYpOwogCi0gICAg
aWYgKHByaXYtPnBvcHVwLm1lbnVfY2xpZW50KQorICAgIGlmIChwcml2LT5wb3B1cC5tZW51Q2xp
ZW50KQogICAgICAgICBld2tfdmlld19wb3B1cF9kZXN0cm95KGV3a1ZpZXcpOwogCi0gICAgcHJp
di0+cG9wdXAubWVudV9jbGllbnQgPSBjbGllbnQ7CisgICAgcHJpdi0+cG9wdXAubWVudUNsaWVu
dCA9IGNsaWVudDsKIAogICAgIC8vIHBvcHVsYXRlIGl0ZW1zCiAgICAgY29uc3QgaW50IHNpemUg
PSBjbGllbnQtPmxpc3RTaXplKCk7CkBAIC0zNDIyLDEwICszNDIyLDEwIEBAIHZvaWQgZXdrX3Zp
ZXdfcG9wdXBfbmV3KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBXZWJDb3JlOjpQb3B1cE1lbnVDbGll
bnQqIGNsaWVudCwKIEVpbmFfQm9vbCBld2tfdmlld19wb3B1cF9kZXN0cm95KEV2YXNfT2JqZWN0
KiBld2tWaWV3KQogewogICAgIElORigiZXdrVmlldz0lcCIsIGV3a1ZpZXcpOwotICAgIEVXS19W
SUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19W
SUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJ
RVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAg
IEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0Up
OwogCi0gICAgaWYgKCFwcml2LT5wb3B1cC5tZW51X2NsaWVudCkKKyAgICBpZiAoIXByaXYtPnBv
cHVwLm1lbnVDbGllbnQpCiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwogCiAgICAgZXZhc19v
YmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChld2tWaWV3LCAicG9wdXAsd2lsbGRlbGV0ZSIsICZw
cml2LT5wb3B1cC5tZW51KTsKQEAgLTM0MzYsOCArMzQzNiw4IEBAIEVpbmFfQm9vbCBld2tfdmll
d19wb3B1cF9kZXN0cm95KEV2YXNfT2JqZWN0KiBld2tWaWV3KQogICAgICAgICBlaW5hX3N0cmlu
Z3NoYXJlX2RlbChpdGVtLT50ZXh0KTsKICAgICAgICAgZnJlZShpdGVtKTsKICAgICB9Ci0gICAg
cHJpdi0+cG9wdXAubWVudV9jbGllbnQtPnBvcHVwRGlkSGlkZSgpOwotICAgIHByaXYtPnBvcHVw
Lm1lbnVfY2xpZW50ID0gMDsKKyAgICBwcml2LT5wb3B1cC5tZW51Q2xpZW50LT5wb3B1cERpZEhp
ZGUoKTsKKyAgICBwcml2LT5wb3B1cC5tZW51Q2xpZW50ID0gMDsKIAogICAgIHJldHVybiBFSU5B
X1RSVUU7CiB9CkBAIC0zNDQ1LDE4ICszNDQ1LDE4IEBAIEVpbmFfQm9vbCBld2tfdmlld19wb3B1
cF9kZXN0cm95KEV2YXNfT2JqZWN0KiBld2tWaWV3KQogdm9pZCBld2tfdmlld19wb3B1cF9zZWxl
Y3RlZF9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGludCBpbmRleCkKIHsKICAgICBJTkYoImV3
a1ZpZXc9JXAiLCBld2tWaWV3KTsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1Zp
ZXcsIHNkKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYpOwotICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHByaXYtPnBvcHVwLm1lbnVfY2xpZW50KTsKKyAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSk7CisgICAgRVdL
X1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdik7CisgICAgRUlOQV9TQUZF
VFlfT05fTlVMTF9SRVRVUk4ocHJpdi0+cG9wdXAubWVudUNsaWVudCk7CiAKLSAgICBwcml2LT5w
b3B1cC5tZW51X2NsaWVudC0+dmFsdWVDaGFuZ2VkKGluZGV4KTsKKyAgICBwcml2LT5wb3B1cC5t
ZW51Q2xpZW50LT52YWx1ZUNoYW5nZWQoaW5kZXgpOwogfQogCiAvKioKICAqIEBpbnRlcm5hbAog
ICogUmVxdWVzdCBhIGRvd25sb2FkIHRvIHVzZXIuCiAgKgotICogQHBhcmFtIG8gVmlldy4KKyAq
IEBwYXJhbSBld2tWaWV3IFZpZXcuCiAgKiBAb2FyYW0gZG93bmxvYWQgRXdrX0Rvd25sb2FkIHN0
cnVjdCB0byBiZSBzZW50LgogICoKICAqIEVtaXRzOiAiZG93bmxvYWQscmVxdWVzdCIgd2l0aCBh
biBFd2tfRG93bmxvYWQgY29udGFpbmluZyB0aGUgZGV0YWlscyBvZiB0aGUKQEAgLTM0NzIsNyAr
MzQ3Miw3IEBAIHZvaWQgZXdrX3ZpZXdfZG93bmxvYWRfcmVxdWVzdChFdmFzX09iamVjdCogZXdr
VmlldywgRXdrX0Rvd25sb2FkKiBkb3dubG9hZCkKICAqIEBpbnRlcm5hbAogICogUmVwb3J0cyB0
aGUgSlMgd2luZG93IG9iamVjdCB3YXMgY2xlYXJlZC4KICAqCi0gKiBAcGFyYW0gbyB2aWV3Lgor
ICogQHBhcmFtIGV3a1ZpZXcgdmlldy4KICAqIEBwYXJhbSBmcmFtZSB0aGUgZnJhbWUuCiAgKi8K
IHZvaWQgZXdrX3ZpZXdfanNfd2luZG93X29iamVjdF9jbGVhcihFdmFzX09iamVjdCogZXdrVmll
dywgRXZhc19PYmplY3QqIGZyYW1lKQpAQCAtMzQ5MCwxMCArMzQ5MCwxMCBAQCB2b2lkIGV3a192
aWV3X2pzX3dpbmRvd19vYmplY3RfY2xlYXIoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV2YXNfT2Jq
ZWN0KiBmcmFtZSkKICAqLwogdm9pZCBld2tfdmlld192aWV3cG9ydF9hdHRyaWJ1dGVzX3NldChF
dmFzX09iamVjdCogZXdrVmlldywgY29uc3QgV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHMmIGFy
Z3VtZW50cykKIHsKLSAgICBFV0tfVklFV19TRF9HRVQoZXdrVmlldywgc2QpOwotICAgIEVXS19W
SUVXX1BSSVZfR0VUKHNkLCBwcml2KTsKKyAgICBFV0tfVklFV19TRF9HRVQoZXdrVmlldywgc21h
cnREYXRhKTsKKyAgICBFV0tfVklFV19QUklWX0dFVChzbWFydERhdGEsIHByaXYpOwogCi0gICAg
cHJpdi0+dmlld3BvcnRfYXJndW1lbnRzID0gYXJndW1lbnRzOworICAgIHByaXYtPnZpZXdwb3J0
QXJndW1lbnRzID0gYXJndW1lbnRzOwogICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2Nh
bGwoZXdrVmlldywgInZpZXdwb3J0LGNoYW5nZWQiLCAwKTsKIH0KIApAQCAtMzUxOSw3MCArMzUx
OSw3MCBAQCB2b2lkIGV3a192aWV3X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfZ2V0KGNvbnN0IEV2YXNf
T2JqZWN0KiBld2tWaWV3LCBpbnQqIHdpZHRoLCBpbgogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfem9v
bV9yYW5nZV9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGZsb2F0IG1pblNjYWxlLCBmbG9hdCBt
YXhTY2FsZSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBF
SU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJ
TkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnRE
YXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnRE
YXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKIAogICAgIGlmIChtYXhTY2FsZSA8IG1pblNjYWxlKSB7
CiAgICAgICAgIFdSTigibWluX3NjYWxlIGlzIGxhcmdlciB0aGFuIG1heF9zY2FsZSIpOwogICAg
ICAgICByZXR1cm4gRUlOQV9GQUxTRTsKICAgICB9CiAKLSAgICBwcml2LT5zZXR0aW5ncy56b29t
X3JhbmdlLm1pbl9zY2FsZSA9IG1pblNjYWxlOwotICAgIHByaXYtPnNldHRpbmdzLnpvb21fcmFu
Z2UubWF4X3NjYWxlID0gbWF4U2NhbGU7CisgICAgcHJpdi0+c2V0dGluZ3Muem9vbVJhbmdlLm1p
blNjYWxlID0gbWluU2NhbGU7CisgICAgcHJpdi0+c2V0dGluZ3Muem9vbVJhbmdlLm1heFNjYWxl
ID0gbWF4U2NhbGU7CiAKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCiBmbG9hdCBld2tfdmll
d196b29tX3JhbmdlX21pbl9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAg
RVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgLTEuMCk7Ci0gICAgRVdLX1ZJ
RVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCAtMS4wKTsKKyAgICBFV0tfVklFV19TRF9H
RVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgLTEuMCk7CisgICAgRVdLX1ZJRVdfUFJJ
Vl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgLTEuMCk7CiAKLSAgICByZXR1cm4gcHJp
di0+c2V0dGluZ3Muem9vbV9yYW5nZS5taW5fc2NhbGU7CisgICAgcmV0dXJuIHByaXYtPnNldHRp
bmdzLnpvb21SYW5nZS5taW5TY2FsZTsKIH0KIAogZmxvYXQgZXdrX3ZpZXdfem9vbV9yYW5nZV9t
YXhfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dF
VF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIC0xLjApOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09S
X1JFVFVSTihzZCwgcHJpdiwgLTEuMCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihl
d2tWaWV3LCBzbWFydERhdGEsIC0xLjApOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVS
TihzbWFydERhdGEsIHByaXYsIC0xLjApOwogCi0gICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLnpv
b21fcmFuZ2UubWF4X3NjYWxlOworICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy56b29tUmFuZ2Uu
bWF4U2NhbGU7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld191c2VyX3NjYWxhYmxlX3NldChFdmFz
X09iamVjdCogZXdrVmlldywgRWluYV9Cb29sIHVzZXJTY2FsYWJsZSkKIHsKLSAgICBFV0tfVklF
V19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklF
V19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVX
X1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBF
V0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsK
IAotICAgIHByaXYtPnNldHRpbmdzLnpvb21fcmFuZ2UudXNlcl9zY2FsYWJsZSA9IHVzZXJTY2Fs
YWJsZTsKKyAgICBwcml2LT5zZXR0aW5ncy56b29tUmFuZ2UudXNlclNjYWxhYmxlID0gdXNlclNj
YWxhYmxlOwogCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3
X3VzZXJfc2NhbGFibGVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVX
S19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgRVdL
X1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOwor
ICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFM
U0UpOwogCi0gICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLnpvb21fcmFuZ2UudXNlcl9zY2FsYWJs
ZTsKKyAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3Muem9vbVJhbmdlLnVzZXJTY2FsYWJsZTsKIH0K
IAogZmxvYXQgZXdrX3ZpZXdfZGV2aWNlX3BpeGVsX3JhdGlvX2dldChjb25zdCBFdmFzX09iamVj
dCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNk
LCAtMS4wKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIC0xLjAp
OworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCAtMS4w
KTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCAtMS4w
KTsKIAotICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5kZXZpY2VfcGl4ZWxfcmF0aW87CisgICAg
cmV0dXJuIHByaXYtPnNldHRpbmdzLmRldmljZVBpeGVsUmF0aW87CiB9CiAKIHZvaWQgZXdrX3Zp
ZXdfZGlkX2ZpcnN0X3Zpc3VhbGx5X25vbmVtcHR5X2xheW91dChFdmFzX09iamVjdCogZXdrVmll
dykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkKTsKLSAgICBF
V0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYpOwotICAgIGlmICghcHJpdi0+Zmxh
Z3Mudmlld19jbGVhcmVkKSB7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3
LCBzbWFydERhdGEpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEs
IHByaXYpOworICAgIGlmICghcHJpdi0+ZmxhZ3Mudmlld0NsZWFyZWQpIHsKICAgICAgICAgZXdr
X3ZpZXdfZnJhbWVfbWFpbl9jbGVhcmVkKGV3a1ZpZXcpOwogICAgICAgICBld2tfdmlld19lbmFi
bGVfcmVuZGVyKGV3a1ZpZXcpOwotICAgICAgICBwcml2LT5mbGFncy52aWV3X2NsZWFyZWQgPSBF
SU5BX1RSVUU7CisgICAgICAgIHByaXYtPmZsYWdzLnZpZXdDbGVhcmVkID0gRUlOQV9UUlVFOwog
ICAgIH0KIH0KIApAQCAtMzU5MCw3ICszNTkwLDcgQEAgdm9pZCBld2tfdmlld19kaWRfZmlyc3Rf
dmlzdWFsbHlfbm9uZW1wdHlfbGF5b3V0KEV2YXNfT2JqZWN0KiBld2tWaWV3KQogICogQGludGVy
bmFsCiAgKiBEaXNwYXRjaCBmaW5pc2hlZCBsb2FkaW5nLgogICoKLSAqIEBwYXJhbSBvIHZpZXcu
CisgKiBAcGFyYW0gZXdrVmlldyB2aWV3LgogICovCiB2b2lkIGV3a192aWV3X2Rpc3BhdGNoX2Rp
ZF9maW5pc2hfbG9hZGluZyhFdmFzX09iamVjdCogZXdrVmlldykKIHsKQEAgLTM2MDMsMTEgKzM2
MDMsMTEgQEAgdm9pZCBld2tfdmlld19kaXNwYXRjaF9kaWRfZmluaXNoX2xvYWRpbmcoRXZhc19P
YmplY3QqIGV3a1ZpZXcpCiAKIHZvaWQgZXdrX3ZpZXdfdHJhbnNpdGlvbl90b19jb21taXRlZF9m
b3JfbmV3cGFnZShFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRf
T1JfUkVUVVJOKGV3a1ZpZXcsIHNkKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4o
c2QsIHByaXYpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnRE
YXRhKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2KTsK
IAogICAgIGV3a192aWV3X2Rpc2FibGVfcmVuZGVyKGV3a1ZpZXcpOwotICAgIHByaXYtPmZsYWdz
LnZpZXdfY2xlYXJlZCA9IEVJTkFfRkFMU0U7CisgICAgcHJpdi0+ZmxhZ3Mudmlld0NsZWFyZWQg
PSBFSU5BX0ZBTFNFOwogfQogCiAKQEAgLTM2MTcsMTggKzM2MTcsMTggQEAgdm9pZCBld2tfdmll
d190cmFuc2l0aW9uX3RvX2NvbW1pdGVkX2Zvcl9uZXdwYWdlKEV2YXNfT2JqZWN0KiBld2tWaWV3
KQogICogcmVxdWVzdCB3b3VsZCBiZSB1c2VkLiBJZiBAcmV0dXJuIGlzIHRydWUsIGxvYWRlciB3
aWxsIHRyeSB0byBsb2FkLiBFbHNlLAogICogTG9hZGVyIGlnbm9yZSBhY3Rpb24gb2YgcmVxdWVz
dC4KICAqCi0gKiBAcGFyYW0gbyBWaWV3IHRvIGxvYWQKKyAqIEBwYXJhbSBld2tWaWV3IFZpZXcg
dG8gbG9hZAogICogQHBhcmFtIHJlcXVlc3QgUmVxdWVzdCB3aGljaCBjb250YWluIHVybCB0byBu
YXZpZ2F0ZQogICovCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfbmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNp
b24oRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV3a19GcmFtZV9SZXNvdXJjZV9SZXF1ZXN0KiByZXF1
ZXN0KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFf
VFJVRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5hcGksIEVJTkFf
VFJVRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEs
IEVJTkFfVFJVRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0
YS0+YXBpLCBFSU5BX1RSVUUpOwogCi0gICAgaWYgKCFzZC0+YXBpLT5uYXZpZ2F0aW9uX3BvbGlj
eV9kZWNpc2lvbikKKyAgICBpZiAoIXNtYXJ0RGF0YS0+YXBpLT5uYXZpZ2F0aW9uX3BvbGljeV9k
ZWNpc2lvbikKICAgICAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIAotICAgIHJldHVybiBzZC0+YXBp
LT5uYXZpZ2F0aW9uX3BvbGljeV9kZWNpc2lvbihzZCwgcmVxdWVzdCk7CisgICAgcmV0dXJuIHNt
YXJ0RGF0YS0+YXBpLT5uYXZpZ2F0aW9uX3BvbGljeV9kZWNpc2lvbihzbWFydERhdGEsIHJlcXVl
c3QpOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfanNfb2JqZWN0X2FkZChFdmFzX09iamVjdCog
ZXdrVmlldywgRXdrX0pTX09iamVjdCogb2JqZWN0LCBjb25zdCBjaGFyKiBvYmplY3ROYW1lKQpA
QCAtMzYzNiwyNSArMzYzNiwyNSBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfanNfb2JqZWN0X2FkZChF
dmFzX09iamVjdCogZXdrVmlldywgRXdrX0pTX09iamVjdCogb2JqZWN0LCBjbwogI2lmIEVOQUJM
RShORVRTQ0FQRV9QTFVHSU5fQVBJKQogICAgIGlmIChvYmplY3QtPnZpZXcpIC8vIG9iamVjdCBo
YXMgYWxyZWFkeSBiZWVuIGFkZGVkIHRvIGFub3RoZXIgZXdrX3ZpZXcKICAgICAgICAgcmV0dXJu
IEVJTkFfRkFMU0U7Ci0gICAgb2JqZWN0LT5uYW1lID0gZWluYV9zdHJpbmdzaGFyZV9hZGQob2Jq
ZWN0X25hbWUpOwotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJ
TkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlO
QV9GQUxTRSk7CisgICAgb2JqZWN0LT5uYW1lID0gZWluYV9zdHJpbmdzaGFyZV9hZGQob2JqZWN0
TmFtZSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEs
IEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEs
IHByaXYsIEVJTkFfRkFMU0UpOwogCiAgICAgSlNDOjpKU0xvY2sgbG9jayhKU0M6OlNpbGVuY2VB
c3NlcnRpb25zT25seSk7Ci0gICAgV2ViQ29yZTo6SlNET01XaW5kb3cqIHdpbmRvdyA9IHRvSlNE
T01XaW5kb3cocHJpdi0+bWFpbl9mcmFtZSwgV2ViQ29yZTo6bWFpblRocmVhZE5vcm1hbFdvcmxk
KCkpOworICAgIFdlYkNvcmU6OkpTRE9NV2luZG93KiB3aW5kb3cgPSB0b0pTRE9NV2luZG93KHBy
aXYtPm1haW5GcmFtZSwgV2ViQ29yZTo6bWFpblRocmVhZE5vcm1hbFdvcmxkKCkpOwogICAgIEpT
Qzo6QmluZGluZ3M6OlJvb3RPYmplY3QqIHJvb3Q7Ci0gICAgcm9vdCA9IHByaXYtPm1haW5fZnJh
bWUtPnNjcmlwdCgpLT5iaW5kaW5nUm9vdE9iamVjdCgpOworICAgIHJvb3QgPSBwcml2LT5tYWlu
RnJhbWUtPnNjcmlwdCgpLT5iaW5kaW5nUm9vdE9iamVjdCgpOwogCiAgICAgaWYgKCF3aW5kb3cp
IHsKICAgICAgICAgRVJSKCJXYXJuaW5nOiBjb3VsZG4ndCBnZXQgd2luZG93IG9iamVjdCIpOwog
ICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKICAgICB9CiAKLSAgICBKU0M6OkV4ZWNTdGF0ZSog
ZXhlYyA9IHdpbmRvdy0+Z2xvYmFsRXhlYygpOworICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjdXRl
U3RhdGUgPSB3aW5kb3ctPmdsb2JhbEV4ZWMoKTsKIAotICAgIG9iai0+dmlldyA9IGV3a1ZpZXc7
Ci0gICAgSlNDOjpKU09iamVjdCogcnVudGltZU9iamVjdCA9IChKU0M6OkpTT2JqZWN0KilKU0M6
OkJpbmRpbmdzOjpDSW5zdGFuY2U6OmNyZWF0ZSgoTlBPYmplY3QqKW9iaiwgcm9vdCktPmNyZWF0
ZVJ1bnRpbWVPYmplY3QoZXhlYyk7Ci0gICAgSlNDOjpJZGVudGlmaWVyIGlkID0gSlNDOjpJZGVu
dGlmaWVyKGV4ZWMsIG9ial9uYW1lKTsKKyAgICBvYmplY3QtPnZpZXcgPSBld2tWaWV3OworICAg
IEpTQzo6SlNPYmplY3QqIHJ1bnRpbWVPYmplY3QgPSAoSlNDOjpKU09iamVjdCopSlNDOjpCaW5k
aW5nczo6Q0luc3RhbmNlOjpjcmVhdGUoKE5QT2JqZWN0KilvYmplY3QsIHJvb3QpLT5jcmVhdGVS
dW50aW1lT2JqZWN0KGV4ZWN1dGVTdGF0ZSk7CisgICAgSlNDOjpJZGVudGlmaWVyIGlkID0gSlND
OjpJZGVudGlmaWVyKGV4ZWMsIG9iamVjdE5hbWUpOwogCiAgICAgSlNDOjpQdXRQcm9wZXJ0eVNs
b3Qgc2xvdDsKICAgICB3aW5kb3ctPnB1dFZpcnR1YWwoZXhlYywgaWQsIHJ1bnRpbWVPYmplY3Qs
IHNsb3QpOwpAQCAtMzY2NiwyNyArMzY2NiwyNyBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfanNfb2Jq
ZWN0X2FkZChFdmFzX09iamVjdCogZXdrVmlldywgRXdrX0pTX09iamVjdCogb2JqZWN0LCBjbwog
CiBFaW5hX0Jvb2wgZXdrX3ZpZXdfcHJvdG9jb2xfaGFuZGxlcl9zZXQoRXZhc19PYmplY3QqIGV3
a1ZpZXcsIGNvbnN0IGNoYXIqKiBwcm90b2NvbHMsIEV3a19WaWV3X1Jlc291cmNlX0hhbmRsZXJf
Q2IgaGFuZGxlciwgdm9pZCogY29udGV4dCkKIHsKLSAgICBFV0tfVklFV19TRF9HRVQoZXdrVmll
dywgc2QpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUKHNkLCBwcml2KTsKKyAgICBFV0tfVklFV19T
RF9HRVQoZXdrVmlldywgc21hcnREYXRhKTsKKyAgICBFV0tfVklFV19QUklWX0dFVChzbWFydERh
dGEsIHByaXYpOwogCiAgICAgaWYgKCFoYW5kbGVyKQogICAgICAgICByZXR1cm4gRUlOQV9GQUxT
RTsKIAotICAgIHByaXYtPmN1c3RvbV9yZXNvdXJjZV9oYW5kbGVyLmZ1bmN0aW9uID0gaGFuZGxl
cjsKLSAgICBwcml2LT5jdXN0b21fcmVzb3VyY2VfaGFuZGxlci5jb250ZXh0ID0gY29udGV4dDsK
KyAgICBwcml2LT5jdXN0b21SZXNvdXJjZUhhbmRsZXIuZnVuY3Rpb24gPSBoYW5kbGVyOworICAg
IHByaXYtPmN1c3RvbVJlc291cmNlSGFuZGxlci5jb250ZXh0ID0gY29udGV4dDsKIAogICAgIHJl
dHVybiBld2tfY3VzdG9tX3Byb3RvY29sX2hhbmRsZXJfc2V0KHByb3RvY29scyk7CiB9CiAKIEVp
bmFfQm9vbCBld2tfdmlld19wcm90b2NvbF9oYW5kbGVyX3Vuc2V0KEV2YXNfT2JqZWN0KiBld2tW
aWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVChld2tWaWV3LCBzZCk7Ci0gICAgRVdLX1ZJRVdf
UFJJVl9HRVQoc2QsIHByaXYpOworICAgIEVXS19WSUVXX1NEX0dFVChld2tWaWV3LCBzbWFydERh
dGEpOworICAgIEVXS19WSUVXX1BSSVZfR0VUKHNtYXJ0RGF0YSwgcHJpdik7CiAgICAgRWluYV9C
b29sIHJldCA9IGV3a19jdXN0b21fcHJvdG9jb2xfaGFuZGxlcl9hbGxfdW5zZXQoKTsKIAogICAg
IGlmIChyZXQpIHsKLSAgICAgICAgcHJpdi0+Y3VzdG9tX3Jlc291cmNlX2hhbmRsZXIuZnVuY3Rp
b24gPSAwOwotICAgICAgICBwcml2LT5jdXN0b21fcmVzb3VyY2VfaGFuZGxlci5jb250ZXh0ID0g
MDsKKyAgICAgICAgcHJpdi0+Y3VzdG9tUmVzb3VyY2VIYW5kbGVyLmZ1bmN0aW9uID0gMDsKKyAg
ICAgICAgcHJpdi0+Y3VzdG9tUmVzb3VyY2VIYW5kbGVyLmNvbnRleHQgPSAwOwogICAgIH0KIAog
ICAgIHJldHVybiByZXQ7CkBAIC0zNjk0LDEyICszNjk0LDEyIEBAIEVpbmFfQm9vbCBld2tfdmll
d19wcm90b2NvbF9oYW5kbGVyX3Vuc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3KQogCiB2b2lkKiBl
d2tfdmlld19wcm90b2NvbF9oYW5kbGVyX3Jlc291cmNlX2dldChFdmFzX09iamVjdCogZXdrVmll
dywgc2l6ZV90KiBieXRlc1JlYWQsIGNoYXIqKiBtaW1lLCBjb25zdCBjaGFyKiBmaWxlKQogewot
ICAgIEVXS19WSUVXX1NEX0dFVChld2tWaWV3LCBzZCk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVQo
c2QsIHByaXYpOworICAgIEVXS19WSUVXX1NEX0dFVChld2tWaWV3LCBzbWFydERhdGEpOworICAg
IEVXS19WSUVXX1BSSVZfR0VUKHNtYXJ0RGF0YSwgcHJpdik7CiAKLSAgICBFd2tfVmlld19SZXNv
dXJjZV9IYW5kbGVyX0NiIGZ1bmN0aW9uID0gcHJpdi0+Y3VzdG9tX3Jlc291cmNlX2hhbmRsZXIu
ZnVuY3Rpb247CisgICAgRXdrX1ZpZXdfUmVzb3VyY2VfSGFuZGxlcl9DYiBmdW5jdGlvbiA9IHBy
aXYtPmN1c3RvbVJlc291cmNlSGFuZGxlci5mdW5jdGlvbjsKICAgICBpZiAoZnVuY3Rpb24pCi0g
ICAgICAgIHJldHVybiBmdW5jdGlvbihmaWxlLCBieXRlc1JlYWQsIG1pbWUsIHByaXYtPmN1c3Rv
bV9yZXNvdXJjZV9oYW5kbGVyLmNvbnRleHQpOworICAgICAgICByZXR1cm4gZnVuY3Rpb24oZmls
ZSwgYnl0ZXNSZWFkLCBtaW1lLCBwcml2LT5jdXN0b21SZXNvdXJjZUhhbmRsZXIuY29udGV4dCk7
CiAKICAgICByZXR1cm4gMDsKIH0KQEAgLTM3MDksMTcgKzM3MDksMTcgQEAgdm9pZCogZXdrX3Zp
ZXdfcHJvdG9jb2xfaGFuZGxlcl9yZXNvdXJjZV9nZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIHNp
emVfdCogYnl0ZXMKICAqIFJlcG9ydHMgdGhhdCB0aGUgY29udGVudHMgaGF2ZSByZXNpemVkLiBU
aGUgZXdrX3ZpZXcgY2FsbHMgY29udGVudHNfcmVzaXplLAogICogd2hpY2ggY2FuIGJlIHJlaW1w
bGVtZW50ZWQgYXMgbmVlZGVkLgogICoKLSAqIEBwYXJhbSBvIHZpZXcuCi0gKiBAcGFyYW0gdyBu
ZXcgY29udGVudCB3aWR0aC4KLSAqIEBwYXJhbSBoIG5ldyBjb250ZW50IGhlaWdodC4KKyAqIEBw
YXJhbSBld2tWaWV3IHZpZXcuCisgKiBAcGFyYW0gd2lkdGggbmV3IGNvbnRlbnQgd2lkdGguCisg
KiBAcGFyYW0gaGVpZ2h0IG5ldyBjb250ZW50IGhlaWdodC4KICAqLwogdm9pZCBld2tfdmlld19j
b250ZW50c19zaXplX2NoYW5nZWQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGludCB3aWR0aCwgaW50
IGhlaWdodCkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkKTsK
LSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpKTsKLSAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpLT5jb250ZW50c19yZXNpemUpOworICAgIEVXS19WSUVX
X1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhKTsKKyAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmFwaSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk4oc21hcnREYXRhLT5hcGktPmNvbnRlbnRzX3Jlc2l6ZSk7CiAKLSAgICBpZiAoIXNkLT5h
cGktPmNvbnRlbnRzX3Jlc2l6ZShzZCwgd2lkdGgsIGhlaWdodCkpCisgICAgaWYgKCFzbWFydERh
dGEtPmFwaS0+Y29udGVudHNfcmVzaXplKHNtYXJ0RGF0YSwgd2lkdGgsIGhlaWdodCkpCiAgICAg
ICAgIEVSUigiZmFpbGVkIHRvIHJlc2l6ZSBjb250ZW50cyB0byAlZHglZCIsIHdpZHRoLCBoZWln
aHQpOwogfQogCkBAIC0zNzI3LDE0ICszNzI3LDE0IEBAIHZvaWQgZXdrX3ZpZXdfY29udGVudHNf
c2l6ZV9jaGFuZ2VkKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBpbnQgd2lkdGgsIGludCBoZWlnaHQp
CiAgKiBAaW50ZXJuYWwKICAqIEdldHMgcGFnZSBzaXplIGZyb20gZnJhbWV2aWV3LgogICoKLSAq
IEBwYXJhbSBvIHZpZXcuCisgKiBAcGFyYW0gZXdrVmlldyB2aWV3LgogICoKICAqIEByZXR1cm4g
cGFnZSBzaXplLgogICovCiBXZWJDb3JlOjpGbG9hdFJlY3QgZXdrX3ZpZXdfcGFnZV9yZWN0X2dl
dChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVQoZXdr
Vmlldywgc2QpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUKHNkLCBwcml2KTsKKyAgICBFV0tfVklF
V19TRF9HRVQoZXdrVmlldywgc21hcnREYXRhKTsKKyAgICBFV0tfVklFV19QUklWX0dFVChzbWFy
dERhdGEsIHByaXYpOwogCiAgICAgV2ViQ29yZTo6RnJhbWUqIG1haW5fZnJhbWUgPSBwcml2LT5w
YWdlLT5tYWluRnJhbWUoKTsKICAgICByZXR1cm4gbWFpbl9mcmFtZS0+dmlldygpLT5mcmFtZVJl
Y3QoKTsKQEAgLTM3NDMsMjQgKzM3NDMsMjQgQEAgV2ViQ29yZTo6RmxvYXRSZWN0IGV3a192aWV3
X3BhZ2VfcmVjdF9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiAjaWYgRU5BQkxFKFRP
VUNIX0VWRU5UUykKIHZvaWQgZXdrX3ZpZXdfbmVlZF90b3VjaF9ldmVudHNfc2V0KEV2YXNfT2Jq
ZWN0KiBld2tWaWV3LCBib29sIG5lZWRlZCkKIHsKLSAgICBFV0tfVklFV19TRF9HRVQoZXdrVmll
dywgc2QpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUKHNkLCBwcml2KTsKKyAgICBFV0tfVklFV19T
RF9HRVQoZXdrVmlldywgc21hcnREYXRhKTsKKyAgICBFV0tfVklFV19QUklWX0dFVChzbWFydERh
dGEsIHByaXYpOwogCi0gICAgcHJpdi0+ZmxhZ3MubmVlZF90b3VjaF9ldmVudHMgPSBuZWVkZWQ7
CisgICAgcHJpdi0+ZmxhZ3MubmVlZFRvdWNoRXZlbnRzID0gbmVlZGVkOwogfQogCiBFaW5hX0Jv
b2wgZXdrX3ZpZXdfbmVlZF90b3VjaF9ldmVudHNfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tW
aWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFf
RkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9G
QUxTRSk7Ci0gICAgcmV0dXJuIHByaXYtPmZsYWdzLm5lZWRfdG91Y2hfZXZlbnRzOworICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsK
KyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZB
TFNFKTsKKyAgICByZXR1cm4gcHJpdi0+ZmxhZ3MubmVlZFRvdWNoRXZlbnRzOwogfQogI2VuZGlm
CiAKIEVpbmFfQm9vbCBld2tfdmlld19tb2RlX3NldChFdmFzX09iamVjdCogZXdrVmlldywgRXdr
X1ZpZXdfTW9kZSB2aWV3TW9kZSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3
a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4o
c2QsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdr
Vmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9S
RVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKIAogICAgIHN3aXRjaCAodmlld01v
ZGUpIHsKICAgICBjYXNlIEVXS19WSUVXX01PREVfV0lORE9XRUQ6CkBAIC0zNzg5LDEwICszNzg5
LDEwIEBAIEV3a19WaWV3X01vZGUgZXdrX3ZpZXdfbW9kZV9nZXQoY29uc3QgRXZhc19PYmplY3Qq
IGV3a1ZpZXcpCiB7CiAgICAgRXdrX1ZpZXdfTW9kZSBtb2RlID0gRVdLX1ZJRVdfTU9ERV9XSU5E
T1dFRDsKIAotICAgIEVXS19WSUVXX1NEX0dFVChld2tWaWV3LCBzZCk7Ci0gICAgaWYgKCFzZCkK
KyAgICBFV0tfVklFV19TRF9HRVQoZXdrVmlldywgc21hcnREYXRhKTsKKyAgICBpZiAoIXNtYXJ0
RGF0YSkKICAgICAgICAgcmV0dXJuIG1vZGU7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVQoc2QsIHBy
aXYpOworICAgIEVXS19WSUVXX1BSSVZfR0VUKHNtYXJ0RGF0YSwgcHJpdik7CiAgICAgaWYgKCFw
cml2KQogICAgICAgICByZXR1cm4gbW9kZTsKIApAQCAtMzgyMCw3ICszODIwLDcgQEAgRXdrX1Zp
ZXdfTW9kZSBld2tfdmlld19tb2RlX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKICAq
IEBpbnRlcm5hbAogICogUmVwb3J0cyB0aGUgdmlldyB0aGF0IGVkaXRvciBjbGllbnQgc2VsZWN0
aW9uIGhhcyBjaGFuZ2VkLgogICoKLSAqIEBwYXJhbSBvIFZpZXcuCisgKiBAcGFyYW0gZXdrVmll
dyBWaWV3LgogICoKICAqIEVtaXRzIHNpZ25hbDogImVkaXRvcmNsaWVudHNlbGVjdGlvbixjaGFu
Z2VkIiB3aXRoIG5vIHBhcmFtZXRlcnMuCiAgKi8KQEAgLTM4MzMsNyArMzgzMyw3IEBAIHZvaWQg
ZXdrX3ZpZXdfZWRpdG9yX2NsaWVudF9zZWxlY3Rpb25fY2hhbmdlZChFdmFzX09iamVjdCogZXdr
VmlldykKICAqIEBpbnRlcm5hbAogICogUmVwb3J0cyB0byB0aGUgdmlldyB0aGF0IGVkaXRvciBj
bGllbnQncyBjb250ZW50cyB3ZXJlIGNoYW5nZWQuCiAgKgotICogQHBhcmFtIG8gVmlldy4KKyAq
IEBwYXJhbSBld2tWaWV3IFZpZXcuCiAgKgogICogRW1pdHMgc2lnbmFsOiAiZWRpdG9yY2xpZW50
LGNvbnRlbnRzLGNoYW5nZWQiIHdpdGggbm8gcGFyYW1ldGVycy4KICAqLwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111737</attachid>
            <date>2011-10-20 00:48:57 -0700</date>
            <delta_ts>2011-10-20 00:55:09 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69988-20111020164856.patch</filename>
            <type>text/plain</type>
            <size>368011</size>
            <attacher name="Gyuyoung Kim">gyuyoung.kim</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTc3MzYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZs
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZwppbmRleCA1NDBjMDEyMTEy
NTY1NzJmNzkwMWM0NjI0NzdmMzQzMTY3ZTFiNGNkLi40NjdjNDg3NDViYTJhYjRiOGMzMWYwOWM0
MzY3ZmEzMzZkZmU2OGRkIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDcgQEAKKzIwMTEt
MTAtMTggIEd5dXlvdW5nIEtpbSAgPGd5dXlvdW5nLmtpbUBzYW1zdW5nLmNvbT4KKworICAgICAg
ICBbRUZMXSBDaGFuZ2UgZWZsIHN0eWxlIGxvY2FsIHZhcmlhYmxlcyB3aXRoIFdlYktpdCBjb2Rp
bmcgU3R5bGUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD02OTk4OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEluIGNvbW1vbiB3aXRoIEJ1ZyA2OTA3MywgdGhpcyBpcyBhIHRoaXJkIHN0ZXAgaW4gb3JkZXIg
dG8gYmUgbW9yZSBjb21wbGlhbnQgd2l0aCBXZWJLaXQgY29kaW5nIHN0eWxlLgorICAgICAgICBX
ZSBoYXZlIHVzZWQgb25lLWxldHRlcnwgdHdvLWxldHRlciBsb2NhbCB2YXJpYWJsZSBhY2NvcmRp
bmcgdG8gZWZsIHN0eWxlLiBIb3dldmVyLCBpdCdzCisgICAgICAgIG1vcmUgZGlmZmljdWx0IGZv
ciBvdGhlciByZXZpZXdlcnMgdG8gcmV2aWV3IEVGTCBwYXRjaGVzLiBTbywgdGhpcyBwYXRjaCBj
aGFuZ2VzIGVmbCBzdHlsZQorICAgICAgICBsb2NhbCB2YXJpYWJsZSB3aXRoIG1lYW5pbmdmdWwg
b25lLgorCisgICAgICAgIC0gVXNlICptZW51KiBpbnN0ZWFkIG9mICpvKiBpbiBjb21tZW50IG9m
IGV3a19jb250ZXh0bWVudS5jcHAuCisgICAgICAgIC0gVXNlICpsaXN0KiBpbnN0ZWFkIG9mICps
KiBsb2NhbCB2YXJpYWJsZQorICAgICAgICAtIFVzZSAqZXdrUG9saWN5KiBpbnN0ZWFkIG9mICpl
d2tfcG9saWN5KiBpbiBld2tfY29va2llcy5jcHAKKyAgICAgICAgLSBVc2UgKnNtYXJ0RGF0YSog
aW5zdGVhZCBvZiAqc2QqIGxvY2FsIHZhcmlhYmxlIGZvciBFd2tfWFhYWF9TbWFydF9EYXRhIHN0
cnVjdC4KKyAgICAgICAgLSBVc2UgKndpZHRoKiwgKmhlaWdodCogaW5zdGVhZCBvZiAqdyosICpo
KiBsb2NhbCB2YXJpYWJsZXMuCisgICAgICAgIC0gVXNlICpzY3JvbGxYKiwgKnNjcm9sbFkqLCAq
c2Nyb2xsV2lkdGgqLCAqc2Nyb2xsSGVpZ2h0KiwgKmNlbnRlclgqLCAqY2VudGVyWSosICpkZWx0
YVgqLCAqZGVsdGFZKiwKKyAgICAgICAgKmJhc2VYKiwgKmJhc2VZKiBpbnN0ZWFkIG9mICpzeCos
ICpzeSosICpzdyosICpzaCosICpjeCosICpjeSosICpkeCosICpkeSosICpieCosICpieSouCisg
ICAgICAgIC0gVXNlICpyZWQqLCAqZ3JlZW4qLCAqYmx1ZSosICphbHBoYSosICpjb250ZW50UmVk
KiwgKmNvbnRlbnRHcmVlbiosICpjb250ZW50Qmx1ZSogYW5kICpjb250ZW50QWxwaGEqCisgICAg
ICAgIGluc3RlYWQgb2YgKnIqLCpnKiwqYiosKmEqLCpjciosKmNnKiwqY2IqLCpjYSouCisgICAg
ICAgIC0gVXNlICp0aWxlUG9zaXRpb25YKiwgKnRpbGVQb3NpdGlvblkqIGluc3RlYWQgb2YgKm94
Kiwqb3kqIGluIHRpbGVkIGJhY2tpbmdzdG9yZSBmaWxlcy4KKyAgICAgICAgLSBVc2UgKm9iamVj
dCogaW5zdGVhZCBvZiAqb2JqKiAKKyAgICAgICAgLSBVc2UgKmxlbmd0aCogaW5zdGVhZCBvZiAq
bGVuKgorICAgICAgICAtIFVzZSAqY29yZUZyYW1lKiBpbnN0ZWFkIG9mICpjZioKKyAgICAgICAg
LSBVc2UgKmJ1ZmZlciogaW5zdGVhZCBvZiAqYnVmKgorICAgICAgICAtIFVzZSAqaXRlbSogaW5z
dGVhZCBvZiAqaSoKKyAgICAgICAgLSBVc2UgKmN1cnJlbnRDb2x1bW4qLCAqY3VycmVudFJvdyog
aW5zdGVhZCBvZiAqbV9jb2wqLCAqbV9yb3cqIAorICAgICAgICAtIFJlbW92ZSAiXyIgaW4gbG9j
YWwgdmFyaWFibGUuCisgICAgICAgIC0gQW5kIHNvIG9uLgorCisgICAgICAgICogZXdrL2V3a19h
dXRoX3NvdXAuY3BwOgorICAgICAgICAqIGV3ay9ld2tfY29udGV4dG1lbnUuY3BwOgorICAgICAg
ICAqIGV3ay9ld2tfY29va2llcy5jcHA6CisgICAgICAgICogZXdrL2V3a19mcmFtZS5jcHA6Cisg
ICAgICAgICogZXdrL2V3a19oaXN0b3J5LmNwcDoKKyAgICAgICAgKiBld2svZXdrX2pzLmNwcDoK
KyAgICAgICAgKiBld2svZXdrX21haW4uY3BwOgorICAgICAgICAqIGV3ay9ld2tfc2V0dGluZ3Mu
Y3BwOgorICAgICAgICAqIGV3ay9ld2tfdGlsZWRfYmFja2luZ19zdG9yZS5jcHA6CisgICAgICAg
ICogZXdrL2V3a190aWxlZF9tYXRyaXguY3BwOgorICAgICAgICAqIGV3ay9ld2tfdGlsZWRfbW9k
ZWwuY3BwOgorICAgICAgICAqIGV3ay9ld2tfdmlldy5jcHA6CisKIDIwMTEtMTAtMTcgIFJhcGhh
ZWwgS3VibyBkYSBDb3N0YSAgPGt1Ym9AcHJvZnVzaW9uLm1vYmk+CiAKICAgICAgICAgW0VGTF0g
RXhwb3NlIHRoZSBraXQoKSBmcmFtZSBmdW5jdGlvbiB0byB0aGUgcmVzdCBvZiBld2suCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2F1dGhfc291cC5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L2VmbC9ld2svZXdrX2F1dGhfc291cC5jcHAKaW5kZXggY2JjODc1NmVkODVlYmMxNWU3
N2JjNDFiMzNlMDUzM2M0MjVhMTkyZi4uOTY1NjNjMGM0MzdkZjdiNzczMDY3OTU3NTcyMGM2NmEz
YWJlNTVjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19hdXRoX3NvdXAu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfYXV0aF9zb3VwLmNwcApAQCAtNDAs
NyArNDAsNyBAQCBleHRlcm4gIkMiIHsKICAqLwogCiB0eXBlZGVmIHN0cnVjdCBfRXdrX0F1dGhf
RGF0YSB7Ci0gICAgU291cE1lc3NhZ2UqIG1zZzsKKyAgICBTb3VwTWVzc2FnZSogbWVzc2FnZTsK
ICAgICBTb3VwQXV0aCogYXV0aDsKICAgICBTb3VwU2Vzc2lvbiogc2Vzc2lvbjsKIH0gRXdrX0F1
dGhfRGF0YTsKQEAgLTc5LDUxICs3OSw1MSBAQCB2b2lkIGV3a19hdXRoX3NvdXBfY3JlZGVudGlh
bHNfc2V0KGNvbnN0IGNoYXIqIHVzZXJuYW1lLCBjb25zdCBjaGFyKiBwYXNzd29yZCwgdgogICAg
IGlmICghZGF0YSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRXdrX0F1dGhfRGF0YSogYXV0aF9k
YXRhID0gc3RhdGljX2Nhc3Q8RXdrX0F1dGhfRGF0YSo+KGRhdGEpOwotICAgIHNvdXBfYXV0aF9h
dXRoZW50aWNhdGUoYXV0aF9kYXRhLT5hdXRoLCB1c2VybmFtZSwgcGFzc3dvcmQpOwotICAgIHNv
dXBfc2Vzc2lvbl91bnBhdXNlX21lc3NhZ2UoYXV0aF9kYXRhLT5zZXNzaW9uLCBhdXRoX2RhdGEt
Pm1zZyk7Ci0gICAgZnJlZV9hdXRoX2RhdGEoYXV0aF9kYXRhKTsKKyAgICBFd2tfQXV0aF9EYXRh
KiBhdXRoZW50aWNhdGlvbkRhdGEgPSBzdGF0aWNfY2FzdDxFd2tfQXV0aF9EYXRhKj4oZGF0YSk7
CisgICAgc291cF9hdXRoX2F1dGhlbnRpY2F0ZShhdXRoZW50aWNhdGlvbkRhdGEtPmF1dGgsIHVz
ZXJuYW1lLCBwYXNzd29yZCk7CisgICAgc291cF9zZXNzaW9uX3VucGF1c2VfbWVzc2FnZShhdXRo
ZW50aWNhdGlvbkRhdGEtPnNlc3Npb24sIGF1dGhlbnRpY2F0aW9uRGF0YS0+bWVzc2FnZSk7Cisg
ICAgZnJlZV9hdXRoX2RhdGEoYXV0aGVudGljYXRpb25EYXRhKTsKIH0KIAotc3RhdGljIHZvaWQg
c2Vzc2lvbl9hdXRoZW50aWNhdGUoU291cFNlc3Npb24qIHNlc3Npb24sIFNvdXBNZXNzYWdlKiBt
c2csIFNvdXBBdXRoKiBhdXRoLCBnYm9vbGVhbiByZXRyeWluZywgZ3BvaW50ZXIgLyogdXNlcl9k
YXRhICovKQorc3RhdGljIHZvaWQgc2Vzc2lvbl9hdXRoZW50aWNhdGUoU291cFNlc3Npb24qIHNl
c3Npb24sIFNvdXBNZXNzYWdlKiBtZXNzYWdlLCBTb3VwQXV0aCogYXV0aCwgZ2Jvb2xlYW4gcmV0
cnlpbmcsIGdwb2ludGVyIC8qIHVzZXJfZGF0YSAqLykKIHsKICAgICBTb3VwVVJJKiB1cmk7Ci0g
ICAgRXdrX0F1dGhfRGF0YSogYXV0aF9kYXRhOworICAgIEV3a19BdXRoX0RhdGEqIGF1dGhlbnRp
Y2F0aW9uRGF0YTsKICAgICBjb25zdCBjaGFyKiByZWFsbTsKIAogICAgIGlmICghZXdrX2F1dGhf
c2hvd19kaWFsb2dfY2FsbGJhY2spCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dGhfZGF0YSA9
IHN0YXRpY19jYXN0PEV3a19BdXRoX0RhdGEqPihjYWxsb2MoMSwgc2l6ZW9mKEV3a19BdXRoX0Rh
dGEpKSk7CisgICAgYXV0aGVudGljYXRpb25EYXRhID0gc3RhdGljX2Nhc3Q8RXdrX0F1dGhfRGF0
YSo+KGNhbGxvYygxLCBzaXplb2YoRXdrX0F1dGhfRGF0YSkpKTsKIAotICAgIGlmICghYXV0aF9k
YXRhKSB7CisgICAgaWYgKCFhdXRoZW50aWNhdGlvbkRhdGEpIHsKICAgICAgICAgQ1JJVElDQUwo
ImNvdWxkIG5vdCBhbGxvY2F0ZSBFd2tfQXV0aF9EYXRhIik7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBzb3VwX3Nlc3Npb25fcGF1c2VfbWVzc2FnZShzZXNzaW9uLCBtc2cpOworICAg
IHNvdXBfc2Vzc2lvbl9wYXVzZV9tZXNzYWdlKHNlc3Npb24sIG1lc3NhZ2UpOwogICAgIC8vIFdl
IG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBtZXNzYWdlIHN0aWNrcyBhcm91bmQgd2hlbiBwYXVzaW5n
IGl0LgotICAgIGdfb2JqZWN0X3JlZihtc2cpOworICAgIGdfb2JqZWN0X3JlZihtZXNzYWdlKTsK
ICAgICBnX29iamVjdF9yZWYoc2Vzc2lvbik7CiAgICAgZ19vYmplY3RfcmVmKGF1dGgpOwogCi0g
ICAgYXV0aF9kYXRhLT5tc2cgPSBtc2c7Ci0gICAgYXV0aF9kYXRhLT5hdXRoID0gYXV0aDsKLSAg
ICBhdXRoX2RhdGEtPnNlc3Npb24gPSBzZXNzaW9uOworICAgIGF1dGhlbnRpY2F0aW9uRGF0YS0+
bWVzc2FnZSA9IG1lc3NhZ2U7CisgICAgYXV0aGVudGljYXRpb25EYXRhLT5hdXRoID0gYXV0aDsK
KyAgICBhdXRoZW50aWNhdGlvbkRhdGEtPnNlc3Npb24gPSBzZXNzaW9uOwogCi0gICAgdXJpID0g
c291cF9tZXNzYWdlX2dldF91cmkoYXV0aF9kYXRhLT5tc2cpOwotICAgIHJlYWxtID0gc291cF9h
dXRoX2dldF9yZWFsbShhdXRoX2RhdGEtPmF1dGgpOworICAgIHVyaSA9IHNvdXBfbWVzc2FnZV9n
ZXRfdXJpKGF1dGhlbnRpY2F0aW9uRGF0YS0+bWVzc2FnZSk7CisgICAgcmVhbG0gPSBzb3VwX2F1
dGhfZ2V0X3JlYWxtKGF1dGhlbnRpY2F0aW9uRGF0YS0+YXV0aCk7CiAKICAgICAvLyBDYWxsIGFw
cGxpY2F0aW9uIG1ldGhvZCByZXNwb25zaWJsZSBmb3Igc2hvd2luZyBhdXRoZW50aWNhdGlvbiBk
aWFsb2cgYW5kIHNlbmRpbmcgYmFjayBhdXRob3JpemF0aW9uIGRhdGEuCi0gICAgZXdrX2F1dGhf
c2hvd19kaWFsb2dfY2FsbGJhY2socmVhbG0sIHNvdXBfdXJpX3RvX3N0cmluZyh1cmksIFRSVUUp
LCBhdXRoX2RhdGEpOworICAgIGV3a19hdXRoX3Nob3dfZGlhbG9nX2NhbGxiYWNrKHJlYWxtLCBz
b3VwX3VyaV90b19zdHJpbmcodXJpLCBUUlVFKSwgYXV0aGVudGljYXRpb25EYXRhKTsKIH0KIAot
c3RhdGljIHZvaWQgZnJlZV9hdXRoX2RhdGEoRXdrX0F1dGhfRGF0YSogYXV0aF9kYXRhKQorc3Rh
dGljIHZvaWQgZnJlZV9hdXRoX2RhdGEoRXdrX0F1dGhfRGF0YSogYXV0aERhdGEpCiB7Ci0gICAg
Z19vYmplY3RfdW5yZWYoYXV0aF9kYXRhLT5tc2cpOwotICAgIGdfb2JqZWN0X3VucmVmKGF1dGhf
ZGF0YS0+c2Vzc2lvbik7Ci0gICAgZ19vYmplY3RfdW5yZWYoYXV0aF9kYXRhLT5hdXRoKTsKLSAg
ICBmcmVlKGF1dGhfZGF0YSk7CisgICAgZ19vYmplY3RfdW5yZWYoYXV0aERhdGEtPm1lc3NhZ2Up
OworICAgIGdfb2JqZWN0X3VucmVmKGF1dGhEYXRhLT5zZXNzaW9uKTsKKyAgICBnX29iamVjdF91
bnJlZihhdXRoRGF0YS0+YXV0aCk7CisgICAgZnJlZShhdXRoRGF0YSk7CiB9CiAKIHN0YXRpYyB2
b2lkIGF0dGFjaChTb3VwU2Vzc2lvbkZlYXR1cmUqIG1hbmFnZXIsIFNvdXBTZXNzaW9uKiBzZXNz
aW9uKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19jb250ZXh0bWVudS5j
cHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2NvbnRleHRtZW51LmNwcAppbmRleCA2MjFj
NzljNzA1MWQzZTgwMGRhMDc1NTllOTQ4ZGE1ZTljODQ5OTNiLi5mYTczNjIzZjAyMmFlODBlNjVl
NjE2MDQ1MmE2MTE2YmEwZWU4OTY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2sv
ZXdrX2NvbnRleHRtZW51LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2NvbnRl
eHRtZW51LmNwcApAQCAtMjQ4LDcgKzI0OCw3IEBAIEV3a19Db250ZXh0X01lbnUqIGV3a19jb250
ZXh0X21lbnVfbmV3KEV2YXNfT2JqZWN0KiB2aWV3LCBXZWJDb3JlOjpDb250ZXh0TWVudUNvCiAg
KgogICogRnJlZXMgdGhlIGNvbnRleHQgbWVudS4KICAqCi0gKiBAcGFyYW0gbyB0aGUgdmlldyBv
YmplY3QKKyAqIEBwYXJhbSBtZW51IHRoZSB2aWV3IG9iamVjdAogICogQHJldHVybiBAYyBFSU5B
X1RSVUUgb24gc3VjY2Vzcywgb3IgQGMgRUlOQV9GQUxTRSBvbiBmYWlsdXJlCiAgKgogICogQG5v
dGUgZW1pdHMgYSBzaWduYWwgImNvbnRleHRtZW51LGZyZWUiCkBAIC0yNjksNyArMjY5LDcgQEAg
RWluYV9Cb29sIGV3a19jb250ZXh0X21lbnVfZnJlZShFd2tfQ29udGV4dF9NZW51KiBtZW51KQog
ICoKICAqIEFwcGVuZHMgdGhlIFdlYkNvcmUncyBpdGVtIHRvIHRoZSBjb250ZXh0IG1lbnUgb2Jq
ZWN0LgogICoKLSAqIEBwYXJhbSBvIHRoZSBjb250ZXh0IG1lbnUgb2JqZWN0CisgKiBAcGFyYW0g
bWVudSB0aGUgY29udGV4dCBtZW51IG9iamVjdAogICogQHBhcmFtIGNvcmUgdGhlIFdlYkNvcmUn
cyBjb250ZXh0IG1lbnUgaXRlbSB0aGF0IHdpbGwgYmUgYWRkZWQgdG8gdGhlIGNvbnRleHQgbWVu
dQogICogQG5vdGUgZW1pdHMgYSBzaWduYWwgImNvbnRleHRtZW51LGl0ZW0sYXBwZW5kZWQiCiAg
KgpAQCAtMjk0LDcgKzI5NCw3IEBAIHZvaWQgZXdrX2NvbnRleHRfbWVudV9pdGVtX2FwcGVuZChF
d2tfQ29udGV4dF9NZW51KiBtZW51LCBXZWJDb3JlOjpDb250ZXh0TWVudUl0CiAgKgogICogRW1p
dHMgYSBzaWduYWwgd2l0aCB0aGUgaXRlbXMgb2YgdGhlIGNvbnRleHQgbWVudS4KICAqCi0gKiBA
cGFyYW0gbyB0aGUgY29udGV4dCBtZW51IG9iamVjdAorICogQHBhcmFtIG1lbnUgdGhlIGNvbnRl
eHQgbWVudSBvYmplY3QKICAqIEByZXR1cm4gdGhlIHNhbWUgY29udGV4dCBtZW51IG9iamVjdCB0
aGF0IHdhcyBnaXZlbiB0aHJvdWdoIHBhcmFtZXRlcgogICoKICAqIEBub3RlIGVtaXRzIGEgc2ln
bmFsICJjb250ZXh0bWVudSxjdXN0b21pemUiCkBAIC0zMTQsNyArMzE0LDcgQEAgRXdrX0NvbnRl
eHRfTWVudSogZXdrX2NvbnRleHRfbWVudV9jdXN0b21fZ2V0KGNvbnN0IEV3a19Db250ZXh0X01l
bnUqIG1lbnUpCiAgKgogICogRW1pdHMgYSBzaWduYWwgImNvbnRleHRtZW51LHNob3ciCiAgKgot
ICogQHBhcmFtIG8gdGhlIGNvbnRleHQgbWVudSBvYmplY3QKKyAqIEBwYXJhbSBtZW51IHRoZSBj
b250ZXh0IG1lbnUgb2JqZWN0CiAgKi8KIHZvaWQgZXdrX2NvbnRleHRfbWVudV9zaG93KGNvbnN0
IEV3a19Db250ZXh0X01lbnUqIG1lbnUpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Vm
bC9ld2svZXdrX2Nvb2tpZXMuY3BwIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19jb29raWVz
LmNwcAppbmRleCAwNGQ3MDQxNTdkMzU4ZTNiODZjOTcyNWZjOTU4M2I4M2FhYzA4NTVmLi5mZjZm
OTc0NTQ4OTM3NTU4MGUzZWVlOGExZWQ5ZTM1Y2YyMWZjZjE2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2VmbC9ld2svZXdrX2Nvb2tpZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3
ay9ld2tfY29va2llcy5jcHAKQEAgLTY3LDY2ICs2Nyw2NiBAQCBFaW5hX0Jvb2wgZXdrX2Nvb2tp
ZXNfZmlsZV9zZXQoY29uc3QgY2hhciogZmlsZW5hbWUpCiB2b2lkIGV3a19jb29raWVzX2NsZWFy
KHZvaWQpCiB7CiAjaWYgVVNFKFNPVVApCi0gICAgR1NMaXN0KiBsOworICAgIEdTTGlzdCogbGlz
dDsKICAgICBHU0xpc3QqIHA7CiAgICAgU291cENvb2tpZUphciogY29va2llSmFyID0gV2ViQ29y
ZTo6ZGVmYXVsdENvb2tpZUphcigpOwogCi0gICAgbCA9IHNvdXBfY29va2llX2phcl9hbGxfY29v
a2llcyhjb29raWVKYXIpOwotICAgIGZvciAocCA9IGw7IHA7IHAgPSBwLT5uZXh0KQorICAgIGxp
c3QgPSBzb3VwX2Nvb2tpZV9qYXJfYWxsX2Nvb2tpZXMoY29va2llSmFyKTsKKyAgICBmb3IgKHAg
PSBsaXN0OyBwOyBwID0gcC0+bmV4dCkKICAgICAgICAgc291cF9jb29raWVfamFyX2RlbGV0ZV9j
b29raWUoY29va2llSmFyLCAoU291cENvb2tpZSopcC0+ZGF0YSk7CiAKLSAgICBzb3VwX2Nvb2tp
ZXNfZnJlZShsKTsKKyAgICBzb3VwX2Nvb2tpZXNfZnJlZShsaXN0KTsKICNlbmRpZgogfQogCiBF
aW5hX0xpc3QqIGV3a19jb29raWVzX2dldF9hbGwodm9pZCkKIHsKLSAgICBFaW5hX0xpc3QqIGVs
ID0gMDsKKyAgICBFaW5hX0xpc3QqIHJlc3VsdCA9IDA7CiAjaWYgVVNFKFNPVVApCi0gICAgR1NM
aXN0KiBsOworICAgIEdTTGlzdCogbGlzdDsKICAgICBHU0xpc3QqIHA7CiAgICAgU291cENvb2tp
ZUphciogY29va2llSmFyID0gV2ViQ29yZTo6ZGVmYXVsdENvb2tpZUphcigpOwogCi0gICAgbCA9
IHNvdXBfY29va2llX2phcl9hbGxfY29va2llcyhjb29raWVKYXIpOwotICAgIGZvciAocCA9IGw7
IHA7IHAgPSBwLT5uZXh0KSB7CisgICAgbGlzdCA9IHNvdXBfY29va2llX2phcl9hbGxfY29va2ll
cyhjb29raWVKYXIpOworICAgIGZvciAocCA9IGxpc3Q7IHA7IHAgPSBwLT5uZXh0KSB7CiAgICAg
ICAgIFNvdXBDb29raWUqIGNvb2tpZSA9IHN0YXRpY19jYXN0PFNvdXBDb29raWUqPihwLT5kYXRh
KTsKLSAgICAgICAgRXdrX0Nvb2tpZSogYyA9IHN0YXRpY19jYXN0PEV3a19Db29raWUqPihtYWxs
b2Moc2l6ZW9mKCpjKSkpOwotICAgICAgICBjLT5uYW1lID0gc3RyZHVwKGNvb2tpZS0+bmFtZSk7
Ci0gICAgICAgIGMtPnZhbHVlID0gc3RyZHVwKGNvb2tpZS0+dmFsdWUpOwotICAgICAgICBjLT5k
b21haW4gPSBzdHJkdXAoY29va2llLT5kb21haW4pOwotICAgICAgICBjLT5wYXRoID0gc3RyZHVw
KGNvb2tpZS0+cGF0aCk7Ci0gICAgICAgIGMtPmV4cGlyZXMgPSBzb3VwX2RhdGVfdG9fdGltZV90
KGNvb2tpZS0+ZXhwaXJlcyk7Ci0gICAgICAgIGMtPnNlY3VyZSA9IHN0YXRpY19jYXN0PEVpbmFf
Qm9vbD4oY29va2llLT5zZWN1cmUpOwotICAgICAgICBjLT5odHRwX29ubHkgPSBzdGF0aWNfY2Fz
dDxFaW5hX0Jvb2w+KGNvb2tpZS0+aHR0cF9vbmx5KTsKLSAgICAgICAgZWwgPSBlaW5hX2xpc3Rf
YXBwZW5kKGVsLCBjKTsKKyAgICAgICAgRXdrX0Nvb2tpZSogZXdrQ29va2llID0gc3RhdGljX2Nh
c3Q8RXdrX0Nvb2tpZSo+KG1hbGxvYyhzaXplb2YoKmV3a0Nvb2tpZSkpKTsKKyAgICAgICAgZXdr
Q29va2llLT5uYW1lID0gc3RyZHVwKGNvb2tpZS0+bmFtZSk7CisgICAgICAgIGV3a0Nvb2tpZS0+
dmFsdWUgPSBzdHJkdXAoY29va2llLT52YWx1ZSk7CisgICAgICAgIGV3a0Nvb2tpZS0+ZG9tYWlu
ID0gc3RyZHVwKGNvb2tpZS0+ZG9tYWluKTsKKyAgICAgICAgZXdrQ29va2llLT5wYXRoID0gc3Ry
ZHVwKGNvb2tpZS0+cGF0aCk7CisgICAgICAgIGV3a0Nvb2tpZS0+ZXhwaXJlcyA9IHNvdXBfZGF0
ZV90b190aW1lX3QoY29va2llLT5leHBpcmVzKTsKKyAgICAgICAgZXdrQ29va2llLT5zZWN1cmUg
PSBzdGF0aWNfY2FzdDxFaW5hX0Jvb2w+KGNvb2tpZS0+c2VjdXJlKTsKKyAgICAgICAgZXdrQ29v
a2llLT5odHRwX29ubHkgPSBzdGF0aWNfY2FzdDxFaW5hX0Jvb2w+KGNvb2tpZS0+aHR0cF9vbmx5
KTsKKyAgICAgICAgcmVzdWx0ID0gZWluYV9saXN0X2FwcGVuZChyZXN1bHQsIGV3a0Nvb2tpZSk7
CiAgICAgfQogCi0gICAgc291cF9jb29raWVzX2ZyZWUobCk7CisgICAgc291cF9jb29raWVzX2Zy
ZWUobGlzdCk7CiAjZW5kaWYKLSAgICByZXR1cm4gZWw7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAogdm9pZCBld2tfY29va2llc19jb29raWVfZGVsKEV3a19Db29raWUqIGNvb2tpZSkKIHsKICNp
ZiBVU0UoU09VUCkKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihjb29raWUpOwotICAg
IEdTTGlzdCogbDsKKyAgICBHU0xpc3QqIGxpc3Q7CiAgICAgR1NMaXN0KiBwOwogICAgIFNvdXBD
b29raWVKYXIqIGNvb2tpZUphciA9IFdlYkNvcmU6OmRlZmF1bHRDb29raWVKYXIoKTsKLSAgICBT
b3VwQ29va2llKiBjMSA9IHNvdXBfY29va2llX25ldygKKyAgICBTb3VwQ29va2llKiBjb29raWUx
ID0gc291cF9jb29raWVfbmV3KAogICAgICAgICBjb29raWUtPm5hbWUsIGNvb2tpZS0+dmFsdWUs
IGNvb2tpZS0+ZG9tYWluLCBjb29raWUtPnBhdGgsIC0xKTsKIAotICAgIGwgPSBzb3VwX2Nvb2tp
ZV9qYXJfYWxsX2Nvb2tpZXMoY29va2llSmFyKTsKLSAgICBmb3IgKHAgPSBsOyBwOyBwID0gcC0+
bmV4dCkgewotICAgICAgICBTb3VwQ29va2llKiBjMiA9IHN0YXRpY19jYXN0PFNvdXBDb29raWUq
PihwLT5kYXRhKTsKLSAgICAgICAgaWYgKHNvdXBfY29va2llX2VxdWFsKGMxLCBjMikpIHsKLSAg
ICAgICAgICAgIHNvdXBfY29va2llX2phcl9kZWxldGVfY29va2llKGNvb2tpZUphciwgYzIpOwor
ICAgIGxpc3QgPSBzb3VwX2Nvb2tpZV9qYXJfYWxsX2Nvb2tpZXMoY29va2llSmFyKTsKKyAgICBm
b3IgKHAgPSBsaXN0OyBwOyBwID0gcC0+bmV4dCkgeworICAgICAgICBTb3VwQ29va2llKiBjb29r
aWUyID0gc3RhdGljX2Nhc3Q8U291cENvb2tpZSo+KHAtPmRhdGEpOworICAgICAgICBpZiAoc291
cF9jb29raWVfZXF1YWwoY29va2llMSwgY29va2llMikpIHsKKyAgICAgICAgICAgIHNvdXBfY29v
a2llX2phcl9kZWxldGVfY29va2llKGNvb2tpZUphciwgY29va2llMik7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQogICAgIH0KIAotICAgIHNvdXBfY29va2llX2ZyZWUoYzEpOwotICAg
IHNvdXBfY29va2llc19mcmVlKGwpOworICAgIHNvdXBfY29va2llX2ZyZWUoY29va2llMSk7Cisg
ICAgc291cF9jb29raWVzX2ZyZWUobGlzdCk7CiAjZW5kaWYKIH0KIApAQCAtMTY3LDcgKzE2Nyw3
IEBAIHZvaWQgZXdrX2Nvb2tpZXNfcG9saWN5X3NldChFd2tfQ29va2llX1BvbGljeSBjb29raWVQ
b2xpY3kpCiAKIEV3a19Db29raWVfUG9saWN5IGV3a19jb29raWVzX3BvbGljeV9nZXQodm9pZCkK
IHsKLSAgICBFd2tfQ29va2llX1BvbGljeSBld2tfcG9saWN5ID0gRVdLX0NPT0tJRV9KQVJfQUND
RVBUX0FMV0FZUzsKKyAgICBFd2tfQ29va2llX1BvbGljeSBld2tQb2xpY3kgPSBFV0tfQ09PS0lF
X0pBUl9BQ0NFUFRfQUxXQVlTOwogI2lmIFVTRShTT1VQKQogICAgIFNvdXBDb29raWVKYXIqIGNv
b2tpZUphciA9IFdlYkNvcmU6OmRlZmF1bHRDb29raWVKYXIoKTsKICAgICBTb3VwQ29va2llSmFy
QWNjZXB0UG9saWN5IHBvbGljeTsKQEAgLTE3NSwxNiArMTc1LDE2IEBAIEV3a19Db29raWVfUG9s
aWN5IGV3a19jb29raWVzX3BvbGljeV9nZXQodm9pZCkKICAgICBwb2xpY3kgPSBzb3VwX2Nvb2tp
ZV9qYXJfZ2V0X2FjY2VwdF9wb2xpY3koY29va2llSmFyKTsKICAgICBzd2l0Y2ggKHBvbGljeSkg
ewogICAgIGNhc2UgU09VUF9DT09LSUVfSkFSX0FDQ0VQVF9ORVZFUjoKLSAgICAgICAgZXdrX3Bv
bGljeSA9IEVXS19DT09LSUVfSkFSX0FDQ0VQVF9ORVZFUjsKKyAgICAgICAgZXdrUG9saWN5ID0g
RVdLX0NPT0tJRV9KQVJfQUNDRVBUX05FVkVSOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFNP
VVBfQ09PS0lFX0pBUl9BQ0NFUFRfQUxXQVlTOgotICAgICAgICBld2tfcG9saWN5ID0gRVdLX0NP
T0tJRV9KQVJfQUNDRVBUX0FMV0FZUzsKKyAgICAgICAgZXdrUG9saWN5ID0gRVdLX0NPT0tJRV9K
QVJfQUNDRVBUX0FMV0FZUzsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTT1VQX0NPT0tJRV9K
QVJfQUNDRVBUX05PX1RISVJEX1BBUlRZOgotICAgICAgICBld2tfcG9saWN5ID0gRVdLX0NPT0tJ
RV9KQVJfQUNDRVBUX05PX1RISVJEX1BBUlRZOworICAgICAgICBld2tQb2xpY3kgPSBFV0tfQ09P
S0lFX0pBUl9BQ0NFUFRfTk9fVEhJUkRfUEFSVFk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICNl
bmRpZgogCi0gICAgcmV0dXJuIGV3a19wb2xpY3k7CisgICAgcmV0dXJuIGV3a1BvbGljeTsKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfZnJhbWUuY3BwIGIvU291cmNl
L1dlYktpdC9lZmwvZXdrL2V3a19mcmFtZS5jcHAKaW5kZXggODdjZTYzYzY2NzZlMmQ0Mzg3ZmFl
OTdiMzEzODQwNWU1YzM0OThjNS4uZjA5NTBjYzEwNDNlZjdiNjMwNDVjZjI1YWFjMWY1YjE3YzFk
YjQ3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19mcmFtZS5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19mcmFtZS5jcHAKQEAgLTc2LDcgKzc2LDcgQEAg
c3RydWN0IEV3a19GcmFtZV9TbWFydF9EYXRhIHsKIAogc3RydWN0IEVpbmFfSXRlcmF0b3JfRXdr
X0ZyYW1lIHsKICAgICBFaW5hX0l0ZXJhdG9yIGJhc2U7Ci0gICAgRXZhc19PYmplY3QqIG9iajsK
KyAgICBFdmFzX09iamVjdCogb2JqZWN0OwogICAgIHVuc2lnbmVkIGN1cnJlbnRJbmRleDsKIH07
CiAKQEAgLTExMywyMCArMTEzLDIwIEBAIHN0YXRpYyBFdmFzX1NtYXJ0X0NsYXNzIF9wYXJlbnRf
c2MgPSBFVkFTX1NNQVJUX0NMQVNTX0lOSVRfTlVMTDsKIHN0YXRpYyBpbmxpbmUgdm9pZCBfZXdr
X2ZyYW1lX2RlYnVnKEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsKICAgICBFdmFzX09iamVjdCog
Y2xpcCwgKiBwYXJlbnQ7Ci0gICAgRXZhc19Db29yZCB4LCB5LCB3LCBoLCBjeCwgY3ksIGN3LCBj
aDsKLSAgICBpbnQgciwgZywgYiwgYSwgY3IsIGNnLCBjYiwgY2E7CisgICAgRXZhc19Db29yZCB4
LCB5LCB3aWR0aCwgaGVpZ2h0LCBjb250ZW50WCwgY29udGVudFksIGNvbnRlbnRXaWR0aCwgY29u
dGVudEhlaWdodDsKKyAgICBpbnQgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEsIGNvbnRlbnRSZWQs
IGNvbnRlbnRHcmVlbiwgY29udGVudEJsdWUsIGNvbnRlbnRBbHBoYTsKIAotICAgIGV2YXNfb2Jq
ZWN0X2NvbG9yX2dldChld2tGcmFtZSwgJnIsICZnLCAmYiwgJmEpOwotICAgIGV2YXNfb2JqZWN0
X2dlb21ldHJ5X2dldChld2tGcmFtZSwgJngsICZ5LCAmdywgJmgpOworICAgIGV2YXNfb2JqZWN0
X2NvbG9yX2dldChld2tGcmFtZSwgJnJlZCwgJmdyZWVuLCAmYmx1ZSwgJmFscGhhKTsKKyAgICBl
dmFzX29iamVjdF9nZW9tZXRyeV9nZXQoZXdrRnJhbWUsICZ4LCAmeSwgJndpZHRoLCAmaGVpZ2h0
KTsKIAogICAgIGNsaXAgPSBldmFzX29iamVjdF9jbGlwX2dldChld2tGcmFtZSk7Ci0gICAgZXZh
c19vYmplY3RfY29sb3JfZ2V0KGNsaXAsICZjciwgJmNnLCAmY2IsICZjYSk7Ci0gICAgZXZhc19v
YmplY3RfZ2VvbWV0cnlfZ2V0KGNsaXAsICZjeCwgJmN5LCAmY3csICZjaCk7CisgICAgZXZhc19v
YmplY3RfY29sb3JfZ2V0KGNsaXAsICZjb250ZW50UmVkLCAmY29udGVudEdyZWVuLCAmY29udGVu
dEJsdWUsICZjb250ZW50QWxwaGEpOworICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldChjbGlw
LCAmY29udGVudFgsICZjb250ZW50WSwgJmNvbnRlbnRXaWR0aCwgJmNvbnRlbnRIZWlnaHQpOwog
CiAgICAgZnByaW50ZihzdGRlcnIsICIlcDogdHlwZT0lcyBuYW1lPSVzLCB2aXNpYmxlPSVkLCBj
b2xvcj0lMDJ4JTAyeCUwMnglMDJ4LCAlZCwlZCslZHglZCwgY2xpcHBlcj0lcCAoJWQsICUwMngl
MDJ4JTAyeCUwMngsICVkLCVkKyVkeCVkKVxuIiwKICAgICAgICAgICAgIGV3a0ZyYW1lLCBldmFz
X29iamVjdF90eXBlX2dldChld2tGcmFtZSksIGV2YXNfb2JqZWN0X25hbWVfZ2V0KGV3a0ZyYW1l
KSwgZXZhc19vYmplY3RfdmlzaWJsZV9nZXQoZXdrRnJhbWUpLAotICAgICAgICAgICAgciwgZywg
YiwgYSwgeCwgeSwgdywgaCwKLSAgICAgICAgICAgIGNsaXAsIGV2YXNfb2JqZWN0X3Zpc2libGVf
Z2V0KGNsaXApLCBjciwgY2csIGNiLCBjYSwgY3gsIGN5LCBjdywgY2gpOworICAgICAgICAgICAg
cmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEsIHgsIHksIHdpZHRoLCBoZWlnaHQsCisgICAgICAgICAg
ICBjbGlwLCBldmFzX29iamVjdF92aXNpYmxlX2dldChjbGlwKSwgY29udGVudFJlZCwgY29udGVu
dEdyZWVuLCBjb250ZW50Qmx1ZSwgY29udGVudEFscGhhLCBjb250ZW50WCwgY29udGVudFksIGNv
bnRlbnRXaWR0aCwgY29udGVudEhlaWdodCk7CiAgICAgcGFyZW50ID0gZXZhc19vYmplY3Rfc21h
cnRfcGFyZW50X2dldChld2tGcmFtZSk7CiAgICAgaWYgKCFwYXJlbnQpCiAgICAgICAgIGZwcmlu
dGYoc3RkZXJyLCAiXG4iKTsKQEAgLTE0MCwxNiArMTQwLDE2IEBAIHN0YXRpYyBXZWJDb3JlOjpG
cmFtZUxvYWRlckNsaWVudEVmbCogX2V3a19mcmFtZV9sb2FkZXJfZWZsX2dldChjb25zdCBXZWJD
b3JlOjpGCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50
RWZsKj4oZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKSk7CiB9CiAKLXN0YXRpYyBFaW5hX0Jvb2wg
X2V3a19mcmFtZV9jaGlsZHJlbl9pdGVyYXRvcl9uZXh0KEVpbmFfSXRlcmF0b3JfRXdrX0ZyYW1l
KiBpdCwgRXZhc19PYmplY3QqKiBkYXRhKQorc3RhdGljIEVpbmFfQm9vbCBfZXdrX2ZyYW1lX2No
aWxkcmVuX2l0ZXJhdG9yX25leHQoRWluYV9JdGVyYXRvcl9Fd2tfRnJhbWUqIGl0ZXJhdG9yLCBF
dmFzX09iamVjdCoqIGRhdGEpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oaXQt
Pm9iaiwgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZB
TChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJO
KGl0ZXJhdG9yLT5vYmplY3QsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZF
VFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUsIEVJTkFfRkFMU0UpOwogCi0g
ICAgV2ViQ29yZTo6RnJhbWVUcmVlKiB0cmVlID0gc2QtPmZyYW1lLT50cmVlKCk7IC8vIGNoZWNr
IGlmIGl0J3Mgc3RpbGwgdmFsaWQKKyAgICBXZWJDb3JlOjpGcmFtZVRyZWUqIHRyZWUgPSBzbWFy
dERhdGEtPmZyYW1lLT50cmVlKCk7IC8vIGNoZWNrIGlmIGl0J3Mgc3RpbGwgdmFsaWQKICAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodHJlZSwgRUlOQV9GQUxTRSk7CiAKLSAgICBp
ZiAoaXQtPmN1cnJlbnRJbmRleCA8IHRyZWUtPmNoaWxkQ291bnQoKSkgewotICAgICAgICAqZGF0
YSA9IEVXS1ByaXZhdGU6OmtpdEZyYW1lKHRyZWUtPmNoaWxkKGl0LT5jdXJyZW50SW5kZXgrKykp
OworICAgIGlmIChpdGVyYXRvci0+Y3VycmVudEluZGV4IDwgdHJlZS0+Y2hpbGRDb3VudCgpKSB7
CisgICAgICAgICpkYXRhID0gRVdLUHJpdmF0ZTo6a2l0RnJhbWUodHJlZS0+Y2hpbGQoaXRlcmF0
b3ItPmN1cnJlbnRJbmRleCsrKSk7CiAgICAgICAgIHJldHVybiBFSU5BX1RSVUU7CiAgICAgfQog
CkBAIC0xNTgsNTMgKzE1OCw1MyBAQCBzdGF0aWMgRWluYV9Cb29sIF9ld2tfZnJhbWVfY2hpbGRy
ZW5faXRlcmF0b3JfbmV4dChFaW5hX0l0ZXJhdG9yX0V3a19GcmFtZSogaXQsCiAKIHN0YXRpYyBF
dmFzX09iamVjdCogX2V3a19mcmFtZV9jaGlsZHJlbl9pdGVyYXRvcl9nZXRfY29udGFpbmVyKEVp
bmFfSXRlcmF0b3JfRXdrX0ZyYW1lKiBpdGVyYXRvcikKIHsKLSAgICByZXR1cm4gaXRlcmF0b3It
Pm9iajsKKyAgICByZXR1cm4gaXRlcmF0b3ItPm9iamVjdDsKIH0KIAogc3RhdGljIHZvaWQgX2V3
a19mcmFtZV9zbWFydF9hZGQoRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewotICAgIEVXS19GUkFN
RV9TRF9HRVQoZXdrRnJhbWUsIHNkKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUKGV3a0ZyYW1lLCBz
bWFydERhdGEpOwogCi0gICAgaWYgKCFzZCkgewotICAgICAgICBzZCA9IHN0YXRpY19jYXN0PEV3
a19GcmFtZV9TbWFydF9EYXRhKj4oY2FsbG9jKDEsIHNpemVvZihFd2tfRnJhbWVfU21hcnRfRGF0
YSkpKTsKLSAgICAgICAgaWYgKCFzZCkgeworICAgIGlmICghc21hcnREYXRhKSB7CisgICAgICAg
IHNtYXJ0RGF0YSA9IHN0YXRpY19jYXN0PEV3a19GcmFtZV9TbWFydF9EYXRhKj4oY2FsbG9jKDEs
IHNpemVvZihFd2tfRnJhbWVfU21hcnRfRGF0YSkpKTsKKyAgICAgICAgaWYgKCFzbWFydERhdGEp
IHsKICAgICAgICAgICAgIENSSVRJQ0FMKCJjb3VsZCBub3QgYWxsb2NhdGUgRXdrX0ZyYW1lX1Nt
YXJ0X0RhdGEiKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBldmFz
X29iamVjdF9zbWFydF9kYXRhX3NldChld2tGcmFtZSwgc2QpOworICAgICAgICBldmFzX29iamVj
dF9zbWFydF9kYXRhX3NldChld2tGcmFtZSwgc21hcnREYXRhKTsKICAgICB9CiAKLSAgICBzZC0+
c2VsZiA9IGV3a0ZyYW1lOworICAgIHNtYXJ0RGF0YS0+c2VsZiA9IGV3a0ZyYW1lOwogCiAgICAg
X3BhcmVudF9zYy5hZGQoZXdrRnJhbWUpOwotICAgIGV2YXNfb2JqZWN0X3N0YXRpY19jbGlwX3Nl
dChzZC0+YmFzZS5jbGlwcGVyLCBFSU5BX0ZBTFNFKTsKLSAgICBldmFzX29iamVjdF9tb3ZlKHNk
LT5iYXNlLmNsaXBwZXIsIDAsIDApOwotICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShzZC0+YmFzZS5j
bGlwcGVyLCAwLCAwKTsKKyAgICBldmFzX29iamVjdF9zdGF0aWNfY2xpcF9zZXQoc21hcnREYXRh
LT5iYXNlLmNsaXBwZXIsIEVJTkFfRkFMU0UpOworICAgIGV2YXNfb2JqZWN0X21vdmUoc21hcnRE
YXRhLT5iYXNlLmNsaXBwZXIsIDAsIDApOworICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShzbWFydERh
dGEtPmJhc2UuY2xpcHBlciwgMCwgMCk7CiAKICNpZmRlZiBFV0tfRlJBTUVfREVCVUcKLSAgICBz
ZC0+cmVnaW9uID0gZXZhc19vYmplY3RfcmVjdGFuZ2xlX2FkZChzZC0+YmFzZS5ldmFzKTsKKyAg
ICBzbWFydERhdGEtPnJlZ2lvbiA9IGV2YXNfb2JqZWN0X3JlY3RhbmdsZV9hZGQoc21hcnREYXRh
LT5iYXNlLmV2YXMpOwogICAgIHN0YXRpYyBpbnQgaSA9IDA7CiAgICAgc3dpdGNoIChpKSB7CiAg
ICAgY2FzZSAwOgotICAgICAgICBldmFzX29iamVjdF9jb2xvcl9zZXQoc2QtPnJlZ2lvbiwgMTI4
LCAwLCAwLCAxMjgpOworICAgICAgICBldmFzX29iamVjdF9jb2xvcl9zZXQoc21hcnREYXRhLT5y
ZWdpb24sIDEyOCwgMCwgMCwgMTI4KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSAxOgotICAg
ICAgICBldmFzX29iamVjdF9jb2xvcl9zZXQoc2QtPnJlZ2lvbiwgMCwgMTI4LCAwLCAxMjgpOwor
ICAgICAgICBldmFzX29iamVjdF9jb2xvcl9zZXQoc21hcnREYXRhLT5yZWdpb24sIDAsIDEyOCwg
MCwgMTI4KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSAyOgotICAgICAgICBldmFzX29iamVj
dF9jb2xvcl9zZXQoc2QtPnJlZ2lvbiwgMCwgMCwgMTI4LCAxMjgpOworICAgICAgICBldmFzX29i
amVjdF9jb2xvcl9zZXQoc21hcnREYXRhLT5yZWdpb24sIDAsIDAsIDEyOCwgMTI4KTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSAzOgotICAgICAgICBldmFzX29iamVjdF9jb2xvcl9zZXQoc2Qt
PnJlZ2lvbiwgMTI4LCAwLCAwLCAxMjgpOworICAgICAgICBldmFzX29iamVjdF9jb2xvcl9zZXQo
c21hcnREYXRhLT5yZWdpb24sIDEyOCwgMCwgMCwgMTI4KTsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSA0OgotICAgICAgICBldmFzX29iamVjdF9jb2xvcl9zZXQoc2QtPnJlZ2lvbiwgMTI4LCAx
MjgsIDAsIDEyOCk7CisgICAgICAgIGV2YXNfb2JqZWN0X2NvbG9yX3NldChzbWFydERhdGEtPnJl
Z2lvbiwgMTI4LCAxMjgsIDAsIDEyOCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgNToKLSAg
ICAgICAgZXZhc19vYmplY3RfY29sb3Jfc2V0KHNkLT5yZWdpb24sIDEyOCwgMCwgMTI4LCAxMjgp
OworICAgICAgICBldmFzX29iamVjdF9jb2xvcl9zZXQoc21hcnREYXRhLT5yZWdpb24sIDEyOCwg
MCwgMTI4LCAxMjgpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIDY6Ci0gICAgICAgIGV2YXNf
b2JqZWN0X2NvbG9yX3NldChzZC0+cmVnaW9uLCAwLCAxMjgsIDEyOCwgMTI4KTsKKyAgICAgICAg
ZXZhc19vYmplY3RfY29sb3Jfc2V0KHNtYXJ0RGF0YS0+cmVnaW9uLCAwLCAxMjgsIDEyOCwgMTI4
KTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJlYWs7CkBAIC0yMTMs
MjcgKzIxMywyNyBAQCBzdGF0aWMgdm9pZCBfZXdrX2ZyYW1lX3NtYXJ0X2FkZChFdmFzX09iamVj
dCogZXdrRnJhbWUpCiAgICAgaWYgKGkgPiA2KQogICAgICAgICBpID0gMDsKIAotICAgIGV2YXNf
b2JqZWN0X3NtYXJ0X21lbWJlcl9hZGQoc2QtPnJlZ2lvbiwgZXdrRnJhbWUpOwotICAgIGV2YXNf
b2JqZWN0X2hpZGUoc2QtPnJlZ2lvbik7CisgICAgZXZhc19vYmplY3Rfc21hcnRfbWVtYmVyX2Fk
ZChzbWFydERhdGEtPnJlZ2lvbiwgZXdrRnJhbWUpOworICAgIGV2YXNfb2JqZWN0X2hpZGUoc21h
cnREYXRhLT5yZWdpb24pOwogI2VuZGlmCiB9CiAKIHN0YXRpYyB2b2lkIF9ld2tfZnJhbWVfc21h
cnRfZGVsKEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUKGV3
a0ZyYW1lLCBzZCk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVChld2tGcmFtZSwgc21hcnREYXRhKTsK
IAotICAgIGlmIChzZCkgewotICAgICAgICBpZiAoc2QtPmZyYW1lKSB7Ci0gICAgICAgICAgICBX
ZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEVmbCogZmxjID0gX2V3a19mcmFtZV9sb2FkZXJfZWZs
X2dldChzZC0+ZnJhbWUpOworICAgIGlmIChzbWFydERhdGEpIHsKKyAgICAgICAgaWYgKHNtYXJ0
RGF0YS0+ZnJhbWUpIHsKKyAgICAgICAgICAgIFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50RWZs
KiBmbGMgPSBfZXdrX2ZyYW1lX2xvYWRlcl9lZmxfZ2V0KHNtYXJ0RGF0YS0+ZnJhbWUpOwogICAg
ICAgICAgICAgZmxjLT5zZXRXZWJGcmFtZSgwKTsKLSAgICAgICAgICAgIHNkLT5mcmFtZS0+bG9h
ZGVyKCktPmRldGFjaEZyb21QYXJlbnQoKTsKLSAgICAgICAgICAgIHNkLT5mcmFtZS0+bG9hZGVy
KCktPmNhbmNlbEFuZENsZWFyKCk7Ci0gICAgICAgICAgICBzZC0+ZnJhbWUgPSAwOworICAgICAg
ICAgICAgc21hcnREYXRhLT5mcmFtZS0+bG9hZGVyKCktPmRldGFjaEZyb21QYXJlbnQoKTsKKyAg
ICAgICAgICAgIHNtYXJ0RGF0YS0+ZnJhbWUtPmxvYWRlcigpLT5jYW5jZWxBbmRDbGVhcigpOwor
ICAgICAgICAgICAgc21hcnREYXRhLT5mcmFtZSA9IDA7CiAgICAgICAgIH0KIAotICAgICAgICBl
aW5hX3N0cmluZ3NoYXJlX2RlbChzZC0+dGl0bGUpOwotICAgICAgICBlaW5hX3N0cmluZ3NoYXJl
X2RlbChzZC0+dXJpKTsKLSAgICAgICAgZWluYV9zdHJpbmdzaGFyZV9kZWwoc2QtPm5hbWUpOwor
ICAgICAgICBlaW5hX3N0cmluZ3NoYXJlX2RlbChzbWFydERhdGEtPnRpdGxlKTsKKyAgICAgICAg
ZWluYV9zdHJpbmdzaGFyZV9kZWwoc21hcnREYXRhLT51cmkpOworICAgICAgICBlaW5hX3N0cmlu
Z3NoYXJlX2RlbChzbWFydERhdGEtPm5hbWUpOwogICAgIH0KIAogICAgIF9wYXJlbnRfc2MuZGVs
KGV3a0ZyYW1lKTsKQEAgLTI0MSwxNSArMjQxLDE1IEBAIHN0YXRpYyB2b2lkIF9ld2tfZnJhbWVf
c21hcnRfZGVsKEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIAogc3RhdGljIHZvaWQgX2V3a19mcmFt
ZV9zbWFydF9yZXNpemUoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBFdmFzX0Nvb3JkIHdpZHRoLCBF
dmFzX0Nvb3JkIGhlaWdodCkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUKGV3a0ZyYW1lLCBzZCk7
Ci0gICAgZXZhc19vYmplY3RfcmVzaXplKHNkLT5iYXNlLmNsaXBwZXIsIHdpZHRoLCBoZWlnaHQp
OworICAgIEVXS19GUkFNRV9TRF9HRVQoZXdrRnJhbWUsIHNtYXJ0RGF0YSk7CisgICAgZXZhc19v
YmplY3RfcmVzaXplKHNtYXJ0RGF0YS0+YmFzZS5jbGlwcGVyLCB3aWR0aCwgaGVpZ2h0KTsKIAog
I2lmZGVmIEVXS19GUkFNRV9ERUJVRwotICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShzZC0+cmVnaW9u
LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBldmFzX29iamVjdF9yZXNpemUoc21hcnREYXRhLT5yZWdp
b24sIHdpZHRoLCBoZWlnaHQpOwogICAgIEV2YXNfQ29vcmQgeCwgeTsKLSAgICBldmFzX29iamVj
dF9nZW9tZXRyeV9nZXQoc2QtPnJlZ2lvbiwgJngsICZ5LCAmd2lkdGgsICZoZWlnaHQpOworICAg
IGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldChzbWFydERhdGEtPnJlZ2lvbiwgJngsICZ5LCAmd2lk
dGgsICZoZWlnaHQpOwogICAgIElORigicmVnaW9uPSVwLCB2aXNpYmxlPSVkLCBnZW89JWQsJWQg
KyAlZHglZCIsCi0gICAgICAgIHNkLT5yZWdpb24sIGV2YXNfb2JqZWN0X3Zpc2libGVfZ2V0KHNk
LT5yZWdpb24pLCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgc21hcnREYXRhLT5yZWdp
b24sIGV2YXNfb2JqZWN0X3Zpc2libGVfZ2V0KHNtYXJ0RGF0YS0+cmVnaW9uKSwgeCwgeSwgd2lk
dGgsIGhlaWdodCk7CiAgICAgX2V3a19mcmFtZV9kZWJ1Zyhld2tGcmFtZSk7CiAjZW5kaWYKIH0K
QEAgLTI2NCwxMyArMjY0LDEzIEBAIHN0YXRpYyB2b2lkIF9ld2tfZnJhbWVfc21hcnRfc2V0KEV2
YXNfU21hcnRfQ2xhc3MqIGFwaSkKIAogc3RhdGljIGlubGluZSBFdmFzX1NtYXJ0KiBfZXdrX2Zy
YW1lX3NtYXJ0X2NsYXNzX25ldyh2b2lkKQogewotICAgIHN0YXRpYyBFdmFzX1NtYXJ0X0NsYXNz
IHNjID0gRVZBU19TTUFSVF9DTEFTU19JTklUX05BTUVfVkVSU0lPTihFV0tfRlJBTUVfVFlQRV9T
VFIpOworICAgIHN0YXRpYyBFdmFzX1NtYXJ0X0NsYXNzIHNtYXJ0Q2xhc3MgPSBFVkFTX1NNQVJU
X0NMQVNTX0lOSVRfTkFNRV9WRVJTSU9OKEVXS19GUkFNRV9UWVBFX1NUUik7CiAgICAgc3RhdGlj
IEV2YXNfU21hcnQqIHNtYXJ0ID0gMDsKIAogICAgIGlmIChFSU5BX1VOTElLRUxZKCFzbWFydCkp
IHsKICAgICAgICAgZXZhc19vYmplY3Rfc21hcnRfY2xpcHBlZF9zbWFydF9zZXQoJl9wYXJlbnRf
c2MpOwotICAgICAgICBfZXdrX2ZyYW1lX3NtYXJ0X3NldCgmc2MpOwotICAgICAgICBzbWFydCA9
IGV2YXNfc21hcnRfY2xhc3NfbmV3KCZzYyk7CisgICAgICAgIF9ld2tfZnJhbWVfc21hcnRfc2V0
KCZzbWFydENsYXNzKTsKKyAgICAgICAgc21hcnQgPSBldmFzX3NtYXJ0X2NsYXNzX25ldygmc21h
cnRDbGFzcyk7CiAgICAgfQogCiAgICAgcmV0dXJuIHNtYXJ0OwpAQCAtMjg0LDI4ICsyODQsMjgg
QEAgRXZhc19PYmplY3QqIGV3a19mcmFtZV92aWV3X2dldChjb25zdCBFdmFzX09iamVjdCogZXdr
RnJhbWUpCiAKIEVpbmFfSXRlcmF0b3IqIGV3a19mcmFtZV9jaGlsZHJlbl9pdGVyYXRvcl9uZXco
RXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJO
KGV3a0ZyYW1lLCBzZCwgMCk7Ci0gICAgRWluYV9JdGVyYXRvcl9Fd2tfRnJhbWUqIGl0ID0gc3Rh
dGljX2Nhc3Q8RWluYV9JdGVyYXRvcl9Fd2tfRnJhbWUqPgorICAgIEVXS19GUkFNRV9TRF9HRVRf
T1JfUkVUVVJOKGV3a0ZyYW1lLCBzbWFydERhdGEsIDApOworICAgIEVpbmFfSXRlcmF0b3JfRXdr
X0ZyYW1lKiBpdGVyYXRvciA9IHN0YXRpY19jYXN0PEVpbmFfSXRlcmF0b3JfRXdrX0ZyYW1lKj4K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2FsbG9jKDEsIHNpemVvZihFaW5h
X0l0ZXJhdG9yX0V3a19GcmFtZSkpKTsKLSAgICBpZiAoIWl0KQorICAgIGlmICghaXRlcmF0b3Ip
CiAgICAgICAgIHJldHVybiAwOwogCi0gICAgRUlOQV9NQUdJQ19TRVQoJml0LT5iYXNlLCBFSU5B
X01BR0lDX0lURVJBVE9SKTsKLSAgICBpdC0+YmFzZS5uZXh0ID0gRlVOQ19JVEVSQVRPUl9ORVhU
KF9ld2tfZnJhbWVfY2hpbGRyZW5faXRlcmF0b3JfbmV4dCk7Ci0gICAgaXQtPmJhc2UuZ2V0X2Nv
bnRhaW5lciA9IEZVTkNfSVRFUkFUT1JfR0VUX0NPTlRBSU5FUihfZXdrX2ZyYW1lX2NoaWxkcmVu
X2l0ZXJhdG9yX2dldF9jb250YWluZXIpOwotICAgIGl0LT5iYXNlLmZyZWUgPSBGVU5DX0lURVJB
VE9SX0ZSRUUoZnJlZSk7Ci0gICAgaXQtPm9iaiA9IGV3a0ZyYW1lOwotICAgIGl0LT5jdXJyZW50
SW5kZXggPSAwOwotICAgIHJldHVybiAmaXQtPmJhc2U7CisgICAgRUlOQV9NQUdJQ19TRVQoJml0
ZXJhdG9yLT5iYXNlLCBFSU5BX01BR0lDX0lURVJBVE9SKTsKKyAgICBpdGVyYXRvci0+YmFzZS5u
ZXh0ID0gRlVOQ19JVEVSQVRPUl9ORVhUKF9ld2tfZnJhbWVfY2hpbGRyZW5faXRlcmF0b3JfbmV4
dCk7CisgICAgaXRlcmF0b3ItPmJhc2UuZ2V0X2NvbnRhaW5lciA9IEZVTkNfSVRFUkFUT1JfR0VU
X0NPTlRBSU5FUihfZXdrX2ZyYW1lX2NoaWxkcmVuX2l0ZXJhdG9yX2dldF9jb250YWluZXIpOwor
ICAgIGl0ZXJhdG9yLT5iYXNlLmZyZWUgPSBGVU5DX0lURVJBVE9SX0ZSRUUoZnJlZSk7CisgICAg
aXRlcmF0b3ItPm9iamVjdCA9IGV3a0ZyYW1lOworICAgIGl0ZXJhdG9yLT5jdXJyZW50SW5kZXgg
PSAwOworICAgIHJldHVybiAmaXRlcmF0b3ItPmJhc2U7CiB9CiAKIEV2YXNfT2JqZWN0KiBld2tf
ZnJhbWVfY2hpbGRfZmluZChFdmFzX09iamVjdCogZXdrRnJhbWUsIGNvbnN0IGNoYXIqIG5hbWUp
CiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCAwKTsKKyAg
ICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRhLCAwKTsKICAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwobmFtZSwgMCk7Ci0gICAgRUlOQV9TQUZF
VFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgMCk7Ci0gICAgV1RGOjpTdHJpbmcgcyA9
IFdURjo6U3RyaW5nOjpmcm9tVVRGOChuYW1lKTsKLSAgICByZXR1cm4gRVdLUHJpdmF0ZTo6a2l0
RnJhbWUoc2QtPmZyYW1lLT50cmVlKCktPmZpbmQoV1RGOjpBdG9taWNTdHJpbmcocykpKTsKKyAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5mcmFtZSwgMCk7Cisg
ICAgV1RGOjpTdHJpbmcgZnJhbWVOYW1lID0gV1RGOjpTdHJpbmc6OmZyb21VVEY4KG5hbWUpOwor
ICAgIHJldHVybiBFV0tQcml2YXRlOjpraXRGcmFtZShzbWFydERhdGEtPmZyYW1lLT50cmVlKCkt
PmZpbmQoV1RGOjpBdG9taWNTdHJpbmcoZnJhbWVOYW1lKSkpOwogfQogCiBFaW5hX0Jvb2wgZXdr
X2ZyYW1lX3VyaV9zZXQoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBjb25zdCBjaGFyKiB1cmkpCkBA
IC0zMjYsMjcgKzMyNiwyNyBAQCBjb25zdCBjaGFyKiBld2tfZnJhbWVfdXJpX2dldChjb25zdCBF
dmFzX09iamVjdCogZXdrRnJhbWUpCiAKIGNvbnN0IGNoYXIqIGV3a19mcmFtZV90aXRsZV9nZXQo
Y29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1Jf
UkVUVVJOKGV3a0ZyYW1lLCBzZCwgMCk7Ci0gICAgcmV0dXJuIHNkLT50aXRsZTsKKyAgICBFV0tf
RlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRhLCAwKTsKKyAgICByZXR1
cm4gc21hcnREYXRhLT50aXRsZTsKIH0KIAogY29uc3QgY2hhciogZXdrX2ZyYW1lX25hbWVfZ2V0
KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09S
X1JFVFVSTihld2tGcmFtZSwgc2QsIDApOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJO
KGV3a0ZyYW1lLCBzbWFydERhdGEsIDApOwogCi0gICAgaWYgKCFzZC0+ZnJhbWUpIHsKKyAgICBp
ZiAoIXNtYXJ0RGF0YS0+ZnJhbWUpIHsKICAgICAgICAgRVJSKCJjb3VsZCBub3QgZ2V0IG5hbWUg
b2YgdW5pbml0aWFsaXplZCBmcmFtZS4iKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0g
ICAgY29uc3QgV1RGOjpTdHJpbmcgZnJhbWVOYW1lID0gc2QtPmZyYW1lLT50cmVlKCktPnVuaXF1
ZU5hbWUoKTsKKyAgICBjb25zdCBXVEY6OlN0cmluZyBmcmFtZU5hbWUgPSBzbWFydERhdGEtPmZy
YW1lLT50cmVlKCktPnVuaXF1ZU5hbWUoKTsKIAotICAgIGlmICgoc2QtPm5hbWUpICYmIChzZC0+
bmFtZSA9PSBmcmFtZU5hbWUpKQotICAgICAgICByZXR1cm4gc2QtPm5hbWU7CisgICAgaWYgKChz
bWFydERhdGEtPm5hbWUpICYmIChzbWFydERhdGEtPm5hbWUgPT0gZnJhbWVOYW1lKSkKKyAgICAg
ICAgcmV0dXJuIHNtYXJ0RGF0YS0+bmFtZTsKIAotICAgIGVpbmFfc3RyaW5nc2hhcmVfcmVwbGFj
ZV9sZW5ndGgoJihzZC0+bmFtZSksIGZyYW1lTmFtZS51dGY4KCkuZGF0YSgpLCBmcmFtZU5hbWUu
bGVuZ3RoKCkpOworICAgIGVpbmFfc3RyaW5nc2hhcmVfcmVwbGFjZV9sZW5ndGgoJihzbWFydERh
dGEtPm5hbWUpLCBmcmFtZU5hbWUudXRmOCgpLmRhdGEoKSwgZnJhbWVOYW1lLmxlbmd0aCgpKTsK
IAotICAgIHJldHVybiBzZC0+bmFtZTsKKyAgICByZXR1cm4gc21hcnREYXRhLT5uYW1lOwogfQog
CiBFaW5hX0Jvb2wgZXdrX2ZyYW1lX2NvbnRlbnRzX3NpemVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0
KiBld2tGcmFtZSwgRXZhc19Db29yZCogd2lkdGgsIEV2YXNfQ29vcmQqIGhlaWdodCkKQEAgLTM2
Nyw5ICszNjcsOSBAQCBFaW5hX0Jvb2wgZXdrX2ZyYW1lX2NvbnRlbnRzX3NpemVfZ2V0KGNvbnN0
IEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgRXZhc19Db29yZCogdwogCiBzdGF0aWMgRWluYV9Cb29s
IF9ld2tfZnJhbWVfY29udGVudHNfc2V0X2ludGVybmFsKEV3a19GcmFtZV9TbWFydF9EYXRhKiBz
bWFydERhdGEsIGNvbnN0IGNoYXIqIGNvbnRlbnRzLCBzaXplX3QgY29udGVudHNTaXplLCBjb25z
dCBjaGFyKiBtaW1lVHlwZSwgY29uc3QgY2hhciogZW5jb2RpbmcsIGNvbnN0IGNoYXIqIGJhc2VV
cmksIGNvbnN0IGNoYXIqIHVucmVhY2hhYmxlVXJpKQogewotICAgIHNpemVfdCBsZW4gPSBzdHJs
ZW4oY29udGVudHMpOwotICAgIGlmIChjb250ZW50c1NpemUgPCAxIHx8IGNvbnRlbnRzU2l6ZSA+
IGxlbikKLSAgICAgICAgY29udGVudHNTaXplID0gbGVuOworICAgIHNpemVfdCBsZW5ndGggPSBz
dHJsZW4oY29udGVudHMpOworICAgIGlmIChjb250ZW50c1NpemUgPCAxIHx8IGNvbnRlbnRzU2l6
ZSA+IGxlbmd0aCkKKyAgICAgICAgY29udGVudHNTaXplID0gbGVuZ3RoOwogICAgIGlmICghbWlt
ZVR5cGUpCiAgICAgICAgIG1pbWVUeXBlID0gInRleHQvaHRtbCI7CiAgICAgaWYgKCFlbmNvZGlu
ZykKQEAgLTM5OCw1NyArMzk4LDU3IEBAIHN0YXRpYyBFaW5hX0Jvb2wgX2V3a19mcmFtZV9jb250
ZW50c19zZXRfaW50ZXJuYWwoRXdrX0ZyYW1lX1NtYXJ0X0RhdGEqIHNtYXJ0RGF0CiAKIEVpbmFf
Qm9vbCBld2tfZnJhbWVfY29udGVudHNfc2V0KEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgY29uc3Qg
Y2hhciogY29udGVudHMsIHNpemVfdCBjb250ZW50c1NpemUsIGNvbnN0IGNoYXIqIG1pbWVUeXBl
LCBjb25zdCBjaGFyKiBlbmNvZGluZywgY29uc3QgY2hhciogYmFzZVVyaSkKIHsKLSAgICBFV0tf
RlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVJ
TkFfU0FGRVRZX09OX0ZBTFNFX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKKyAg
ICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRhLCBFSU5BX0ZB
TFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9GQUxTRV9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJh
bWUsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChjb250
ZW50cywgRUlOQV9GQUxTRSk7CiAgICAgcmV0dXJuIF9ld2tfZnJhbWVfY29udGVudHNfc2V0X2lu
dGVybmFsCi0gICAgICAgICAgICAgICAoc2QsIGNvbnRlbnRzLCBjb250ZW50c1NpemUsIG1pbWVU
eXBlLCBlbmNvZGluZywgYmFzZVVyaSwgMCk7CisgICAgICAgICAgICAgICAoc21hcnREYXRhLCBj
b250ZW50cywgY29udGVudHNTaXplLCBtaW1lVHlwZSwgZW5jb2RpbmcsIGJhc2VVcmksIDApOwog
fQogCiBFaW5hX0Jvb2wgZXdrX2ZyYW1lX2NvbnRlbnRzX2FsdGVybmF0ZV9zZXQoRXZhc19PYmpl
Y3QqIGV3a0ZyYW1lLCBjb25zdCBjaGFyKiBjb250ZW50cywgc2l6ZV90IGNvbnRlbnRzU2l6ZSwg
Y29uc3QgY2hhciogbWltZVR5cGUsIGNvbnN0IGNoYXIqIGVuY29kaW5nLCBjb25zdCBjaGFyKiBi
YXNlVXJpLCBjb25zdCBjaGFyKiB1bnJlYWNoYWJsZVVyaSkKIHsKLSAgICBFV0tfRlJBTUVfU0Rf
R0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVJTkFfU0FGRVRZ
X09OX0ZBTFNFX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfRlJB
TUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAg
ICBFSU5BX1NBRkVUWV9PTl9GQUxTRV9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUsIEVJTkFf
RkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChjb250ZW50cywgRUlO
QV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHVucmVhY2hhYmxl
VXJpLCBFSU5BX0ZBTFNFKTsKICAgICByZXR1cm4gX2V3a19mcmFtZV9jb250ZW50c19zZXRfaW50
ZXJuYWwKLSAgICAgICAgICAgICAgIChzZCwgY29udGVudHMsIGNvbnRlbnRzU2l6ZSwgbWltZVR5
cGUsIGVuY29kaW5nLCBiYXNlVXJpLAorICAgICAgICAgICAgICAgKHNtYXJ0RGF0YSwgY29udGVu
dHMsIGNvbnRlbnRzU2l6ZSwgbWltZVR5cGUsIGVuY29kaW5nLCBiYXNlVXJpLAogICAgICAgICAg
ICAgICAgdW5yZWFjaGFibGVVcmkpOwogfQogCiBFaW5hX0Jvb2wgZXdrX2ZyYW1lX3NjcmlwdF9l
eGVjdXRlKEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgY29uc3QgY2hhciogc2NyaXB0KQogewotICAg
IEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7Ci0g
ICAgRUlOQV9TQUZFVFlfT05fRkFMU0VfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0Up
OworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzbWFydERhdGEsIEVJ
TkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09OX0ZBTFNFX1JFVFVSTl9WQUwoc21hcnREYXRh
LT5mcmFtZSwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFM
KHNjcmlwdCwgRUlOQV9GQUxTRSk7Ci0gICAgc2QtPmZyYW1lLT5zY3JpcHQoKS0+ZXhlY3V0ZVNj
cmlwdChXVEY6OlN0cmluZzo6ZnJvbVVURjgoc2NyaXB0KSwgdHJ1ZSk7CisgICAgc21hcnREYXRh
LT5mcmFtZS0+c2NyaXB0KCktPmV4ZWN1dGVTY3JpcHQoV1RGOjpTdHJpbmc6OmZyb21VVEY4KHNj
cmlwdCksIHRydWUpOwogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKIEVpbmFfQm9vbCBld2tf
ZnJhbWVfZWRpdGFibGVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsKLSAgICBF
V0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOwotICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOwot
ICAgIHJldHVybiBzZC0+ZWRpdGFibGU7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrRnJhbWUsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUsIEVJTkFfRkFMU0UpOworICAgIHJldHVybiBz
bWFydERhdGEtPmVkaXRhYmxlOwogfQogCiBFaW5hX0Jvb2wgZXdrX2ZyYW1lX2VkaXRhYmxlX3Nl
dChFdmFzX09iamVjdCogZXdrRnJhbWUsIEVpbmFfQm9vbCBlZGl0YWJsZSkKIHsKLSAgICBFV0tf
RlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOworICAg
IEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzbWFydERhdGEsIEVJTkFfRkFM
U0UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmZyYW1l
LCBFSU5BX0ZBTFNFKTsKICAgICBlZGl0YWJsZSA9ICEhZWRpdGFibGU7Ci0gICAgaWYgKHNkLT5l
ZGl0YWJsZSA9PSBlZGl0YWJsZSkKKyAgICBpZiAoc21hcnREYXRhLT5lZGl0YWJsZSA9PSBlZGl0
YWJsZSkKICAgICAgICAgcmV0dXJuIEVJTkFfVFJVRTsKICAgICBpZiAoZWRpdGFibGUpCi0gICAg
ICAgIHNkLT5mcmFtZS0+ZWRpdG9yKCktPmFwcGx5RWRpdGluZ1N0eWxlVG9Cb2R5RWxlbWVudCgp
OworICAgICAgICBzbWFydERhdGEtPmZyYW1lLT5lZGl0b3IoKS0+YXBwbHlFZGl0aW5nU3R5bGVU
b0JvZHlFbGVtZW50KCk7CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAogY2hhciogZXdrX2Zy
YW1lX3NlbGVjdGlvbl9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewotICAgIEVX
S19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgMCk7Ci0gICAgRUlOQV9TQUZF
VFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgMCk7Ci0gICAgV1RGOjpDU3RyaW5nIHMg
PSBzZC0+ZnJhbWUtPmVkaXRvcigpLT5zZWxlY3RlZFRleHQoKS51dGY4KCk7CisgICAgRVdLX0ZS
QU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSwgMCk7CisgICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUsIDApOworICAgIFdURjo6
Q1N0cmluZyBzID0gc21hcnREYXRhLT5mcmFtZS0+ZWRpdG9yKCktPnNlbGVjdGVkVGV4dCgpLnV0
ZjgoKTsKICAgICBpZiAocy5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJu
IHN0cmR1cChzLmRhdGEoKSk7CkBAIC00NTYsNDUgKzQ1Niw0NSBAQCBjaGFyKiBld2tfZnJhbWVf
c2VsZWN0aW9uX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrRnJhbWUpCiAKIEVpbmFfQm9vbCBl
d2tfZnJhbWVfdGV4dF9zZWFyY2goY29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBjb25zdCBj
aGFyKiB0ZXh0LCBFaW5hX0Jvb2wgY2FzZVNlbnNpdGl2ZSwgRWluYV9Cb29sIGZvcndhcmQsIEVp
bmFfQm9vbCB3cmFwKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1l
LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNk
LT5mcmFtZSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdr
RnJhbWUsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOX1ZBTCh0ZXh0LCBFSU5BX0ZBTFNFKTsKIAotICAgIHJldHVybiBzZC0+
ZnJhbWUtPmVkaXRvcigpLT5maW5kU3RyaW5nKFdURjo6U3RyaW5nOjpmcm9tVVRGOCh0ZXh0KSwg
Zm9yd2FyZCwgY2FzZVNlbnNpdGl2ZSwgd3JhcCwgdHJ1ZSk7CisgICAgcmV0dXJuIHNtYXJ0RGF0
YS0+ZnJhbWUtPmVkaXRvcigpLT5maW5kU3RyaW5nKFdURjo6U3RyaW5nOjpmcm9tVVRGOCh0ZXh0
KSwgZm9yd2FyZCwgY2FzZVNlbnNpdGl2ZSwgd3JhcCwgdHJ1ZSk7CiB9CiAKIHVuc2lnbmVkIGlu
dCBld2tfZnJhbWVfdGV4dF9tYXRjaGVzX21hcmsoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBjb25z
dCBjaGFyKiBzdHJpbmcsIEVpbmFfQm9vbCBjYXNlU2Vuc2l0aXZlLCBFaW5hX0Jvb2wgaGlnaGxp
Z2h0LCB1bnNpZ25lZCBpbnQgbGltaXQpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRV
Uk4oZXdrRnJhbWUsIHNkLCAwKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwo
c2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihl
d2tGcmFtZSwgc21hcnREYXRhLCAwKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9W
QUwoc21hcnREYXRhLT5mcmFtZSwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk5fVkFMKHN0cmluZywgMCk7CiAKLSAgICBzZC0+ZnJhbWUtPmVkaXRvcigpLT5zZXRN
YXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkKGhpZ2hsaWdodCk7Ci0gICAgcmV0dXJuIHNk
LT5mcmFtZS0+ZWRpdG9yKCktPmNvdW50TWF0Y2hlc0ZvclRleHQoV1RGOjpTdHJpbmc6OmZyb21V
VEY4KHN0cmluZyksIGNhc2VTZW5zaXRpdmUsIGxpbWl0LCB0cnVlKTsKKyAgICBzbWFydERhdGEt
PmZyYW1lLT5lZGl0b3IoKS0+c2V0TWFya2VkVGV4dE1hdGNoZXNBcmVIaWdobGlnaHRlZChoaWdo
bGlnaHQpOworICAgIHJldHVybiBzbWFydERhdGEtPmZyYW1lLT5lZGl0b3IoKS0+Y291bnRNYXRj
aGVzRm9yVGV4dChXVEY6OlN0cmluZzo6ZnJvbVVURjgoc3RyaW5nKSwgY2FzZVNlbnNpdGl2ZSwg
bGltaXQsIHRydWUpOwogfQogCiBFaW5hX0Jvb2wgZXdrX2ZyYW1lX3RleHRfbWF0Y2hlc191bm1h
cmtfYWxsKEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09S
X1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOworICAgIEVXS19GUkFNRV9TRF9H
RVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmZyYW1lLCBFSU5BX0ZBTFNFKTsK
IAotICAgIHNkLT5mcmFtZS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5yZW1vdmVNYXJrZXJzKFdl
YkNvcmU6OkRvY3VtZW50TWFya2VyOjpUZXh0TWF0Y2gpOworICAgIHNtYXJ0RGF0YS0+ZnJhbWUt
PmRvY3VtZW50KCktPm1hcmtlcnMoKS0+cmVtb3ZlTWFya2VycyhXZWJDb3JlOjpEb2N1bWVudE1h
cmtlcjo6VGV4dE1hdGNoKTsKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCiBFaW5hX0Jvb2wg
ZXdrX2ZyYW1lX3RleHRfbWF0Y2hlc19oaWdobGlnaHRfc2V0KEV2YXNfT2JqZWN0KiBld2tGcmFt
ZSwgRWluYV9Cb29sIGhpZ2hsaWdodCkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVS
Tihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOwotICAgIHNkLT5mcmFtZS0+ZWRpdG9yKCkt
PnNldE1hcmtlZFRleHRNYXRjaGVzQXJlSGlnaGxpZ2h0ZWQoaGlnaGxpZ2h0KTsKKyAgICBFV0tf
RlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsK
KyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5mcmFtZSwgRUlO
QV9GQUxTRSk7CisgICAgc21hcnREYXRhLT5mcmFtZS0+ZWRpdG9yKCktPnNldE1hcmtlZFRleHRN
YXRjaGVzQXJlSGlnaGxpZ2h0ZWQoaGlnaGxpZ2h0KTsKICAgICByZXR1cm4gRUlOQV9UUlVFOwog
fQogCiBFaW5hX0Jvb2wgZXdrX2ZyYW1lX3RleHRfbWF0Y2hlc19oaWdobGlnaHRfZ2V0KGNvbnN0
IEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVS
Tihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOwotICAgIHJldHVybiBzZC0+ZnJhbWUtPmVk
aXRvcigpLT5tYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkKCk7CisgICAgRVdLX0ZSQU1F
X1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUsIEVJTkFfRkFM
U0UpOworICAgIHJldHVybiBzbWFydERhdGEtPmZyYW1lLT5lZGl0b3IoKS0+bWFya2VkVGV4dE1h
dGNoZXNBcmVIaWdobGlnaHRlZCgpOwogfQogCiAvKioKQEAgLTUxNSwxMCArNTE1LDEwIEBAIHN0
YXRpYyBib29sIF9ld2tfZnJhbWVfcmVjdF9pc19uZWdhdGl2ZV92YWx1ZShjb25zdCBXZWJDb3Jl
OjpJbnRSZWN0JiByZWN0KQogCiBFaW5hX0Jvb2wgZXdrX2ZyYW1lX3RleHRfbWF0Y2hlc19udGhf
cG9zX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrRnJhbWUsIHNpemVfdCBudW1iZXIsIGludCog
eCwgaW50KiB5KQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBz
ZCwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5m
cmFtZSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJh
bWUsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUsIEVJTkFfRkFMU0UpOwogCi0gICAgVmVjdG9yPFdlYkNv
cmU6OkludFJlY3Q+IGludFJlY3RzID0gc2QtPmZyYW1lLT5kb2N1bWVudCgpLT5tYXJrZXJzKCkt
PnJlbmRlcmVkUmVjdHNGb3JNYXJrZXJzKFdlYkNvcmU6OkRvY3VtZW50TWFya2VyOjpUZXh0TWF0
Y2gpOworICAgIFZlY3RvcjxXZWJDb3JlOjpJbnRSZWN0PiBpbnRSZWN0cyA9IHNtYXJ0RGF0YS0+
ZnJhbWUtPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+cmVuZGVyZWRSZWN0c0Zvck1hcmtlcnMoV2Vi
Q29yZTo6RG9jdW1lbnRNYXJrZXI6OlRleHRNYXRjaCk7CiAKICAgICAvKiByZW1vdmUgdXNlbGVz
cyB2YWx1ZXMgKi8KICAgICBzdGQ6OnJlbW92ZV9pZihpbnRSZWN0cy5iZWdpbigpLCBpbnRSZWN0
cy5lbmQoKSwgX2V3a19mcmFtZV9yZWN0X2lzX25lZ2F0aXZlX3ZhbHVlKTsKQEAgLTUzNywyNSAr
NTM3LDI1IEBAIEVpbmFfQm9vbCBld2tfZnJhbWVfdGV4dF9tYXRjaGVzX250aF9wb3NfZ2V0KGNv
bnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgc2l6ZV90CiAKIEVpbmFfQm9vbCBld2tfZnJhbWVf
c3RvcChFdmFzX09iamVjdCogZXdrRnJhbWUpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9S
RVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKLSAgICBzZC0+ZnJhbWUtPmxvYWRl
cigpLT5zdG9wQWxsTG9hZGVycygpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3
a0ZyYW1lLCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOX1ZBTChzbWFydERhdGEtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKKyAgICBzbWFydERhdGEt
PmZyYW1lLT5sb2FkZXIoKS0+c3RvcEFsbExvYWRlcnMoKTsKICAgICByZXR1cm4gRUlOQV9UUlVF
OwogfQogCiBFaW5hX0Jvb2wgZXdrX2ZyYW1lX3JlbG9hZChFdmFzX09iamVjdCogZXdrRnJhbWUp
CiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZB
TFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5B
X0ZBTFNFKTsKLSAgICBzZC0+ZnJhbWUtPmxvYWRlcigpLT5yZWxvYWQoKTsKKyAgICBFV0tfRlJB
TUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5mcmFtZSwgRUlOQV9G
QUxTRSk7CisgICAgc21hcnREYXRhLT5mcmFtZS0+bG9hZGVyKCktPnJlbG9hZCgpOwogICAgIHJl
dHVybiBFSU5BX1RSVUU7CiB9CiAKIEVpbmFfQm9vbCBld2tfZnJhbWVfcmVsb2FkX2Z1bGwoRXZh
c19PYmplY3QqIGV3a0ZyYW1lKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3
a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5f
VkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7Ci0gICAgc2QtPmZyYW1lLT5sb2FkZXIoKS0+cmVs
b2FkKHRydWUpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzbWFy
dERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChz
bWFydERhdGEtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKKyAgICBzbWFydERhdGEtPmZyYW1lLT5sb2Fk
ZXIoKS0+cmVsb2FkKHRydWUpOwogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKQEAgLTU3MSw5
ICs1NzEsOSBAQCBFaW5hX0Jvb2wgZXdrX2ZyYW1lX2ZvcndhcmQoRXZhc19PYmplY3QqIGV3a0Zy
YW1lKQogCiBFaW5hX0Jvb2wgZXdrX2ZyYW1lX25hdmlnYXRlKEV2YXNfT2JqZWN0KiBld2tGcmFt
ZSwgaW50IHN0ZXBzKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1l
LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNk
LT5mcmFtZSwgRUlOQV9GQUxTRSk7Ci0gICAgV2ViQ29yZTo6UGFnZSogcGFnZSA9IHNkLT5mcmFt
ZS0+cGFnZSgpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzbWFy
dERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChz
bWFydERhdGEtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKKyAgICBXZWJDb3JlOjpQYWdlKiBwYWdlID0g
c21hcnREYXRhLT5mcmFtZS0+cGFnZSgpOwogICAgIGlmICghcGFnZS0+Y2FuR29CYWNrT3JGb3J3
YXJkKHN0ZXBzKSkKICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CiAgICAgcGFnZS0+Z29CYWNr
T3JGb3J3YXJkKHN0ZXBzKTsKQEAgLTU5MiwzOSArNTkyLDM5IEBAIEVpbmFfQm9vbCBld2tfZnJh
bWVfZm9yd2FyZF9wb3NzaWJsZShFdmFzX09iamVjdCogZXdrRnJhbWUpCiAKIEVpbmFfQm9vbCBl
d2tfZnJhbWVfbmF2aWdhdGVfcG9zc2libGUoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBpbnQgc3Rl
cHMpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5B
X0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBF
SU5BX0ZBTFNFKTsKLSAgICBXZWJDb3JlOjpQYWdlKiBwYWdlID0gc2QtPmZyYW1lLT5wYWdlKCk7
CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSwgRUlO
QV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+
ZnJhbWUsIEVJTkFfRkFMU0UpOworICAgIFdlYkNvcmU6OlBhZ2UqIHBhZ2UgPSBzbWFydERhdGEt
PmZyYW1lLT5wYWdlKCk7CiAgICAgcmV0dXJuIHBhZ2UtPmNhbkdvQmFja09yRm9yd2FyZChzdGVw
cyk7CiB9CiAKIGZsb2F0IGV3a19mcmFtZV9wYWdlX3pvb21fZ2V0KGNvbnN0IEV2YXNfT2JqZWN0
KiBld2tGcmFtZSkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwg
c2QsIC0xLjApOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUs
IC0xLjApOwotICAgIHJldHVybiBzZC0+ZnJhbWUtPnBhZ2Vab29tRmFjdG9yKCk7CisgICAgRVdL
X0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSwgLTEuMCk7CisgICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUsIC0xLjApOwor
ICAgIHJldHVybiBzbWFydERhdGEtPmZyYW1lLT5wYWdlWm9vbUZhY3RvcigpOwogfQogCiBFaW5h
X0Jvb2wgZXdrX2ZyYW1lX3BhZ2Vfem9vbV9zZXQoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBmbG9h
dCBwYWdlWm9vbUZhY3RvcikKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tG
cmFtZSwgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZB
TChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOwotICAgIHNkLT5mcmFtZS0+c2V0UGFnZVpvb21GYWN0
b3IocGFnZVpvb21GYWN0b3IpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0Zy
YW1lLCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOX1ZBTChzbWFydERhdGEtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKKyAgICBzbWFydERhdGEtPmZy
YW1lLT5zZXRQYWdlWm9vbUZhY3RvcihwYWdlWm9vbUZhY3Rvcik7CiAgICAgcmV0dXJuIEVJTkFf
VFJVRTsKIH0KIAogZmxvYXQgZXdrX2ZyYW1lX3RleHRfem9vbV9nZXQoY29uc3QgRXZhc19PYmpl
Y3QqIGV3a0ZyYW1lKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1l
LCBzZCwgLTEuMCk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFt
ZSwgLTEuMCk7Ci0gICAgcmV0dXJuIHNkLT5mcmFtZS0+dGV4dFpvb21GYWN0b3IoKTsKKyAgICBF
V0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRhLCAtMS4wKTsKKyAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5mcmFtZSwgLTEuMCk7
CisgICAgcmV0dXJuIHNtYXJ0RGF0YS0+ZnJhbWUtPnRleHRab29tRmFjdG9yKCk7CiB9CiAKIEVp
bmFfQm9vbCBld2tfZnJhbWVfdGV4dF96b29tX3NldChFdmFzX09iamVjdCogZXdrRnJhbWUsIGZs
b2F0IHRleHRab29tRmFjdG9yKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3
a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5f
VkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7Ci0gICAgc2QtPmZyYW1lLT5zZXRUZXh0Wm9vbUZh
Y3Rvcih0ZXh0Wm9vbUZhY3Rvcik7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdr
RnJhbWUsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUsIEVJTkFfRkFMU0UpOworICAgIHNtYXJ0RGF0YS0+
ZnJhbWUtPnNldFRleHRab29tRmFjdG9yKHRleHRab29tRmFjdG9yKTsKICAgICByZXR1cm4gRUlO
QV9UUlVFOwogfQogCkBAIC02NDMsMTQgKzY0MywxNCBAQCB2b2lkIGV3a19mcmFtZV9oaXRfdGVz
dF9mcmVlKEV3a19IaXRfVGVzdCogaGl0VGVzdCkKIAogRXdrX0hpdF9UZXN0KiBld2tfZnJhbWVf
aGl0X3Rlc3RfbmV3KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgaW50IHgsIGludCB5KQog
ewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgMCk7Ci0gICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgMCk7CisgICAgRVdLX0ZS
QU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSwgMCk7CisgICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUsIDApOwogCi0gICAgV2Vi
Q29yZTo6RnJhbWVWaWV3KiB2aWV3ID0gc2QtPmZyYW1lLT52aWV3KCk7CisgICAgV2ViQ29yZTo6
RnJhbWVWaWV3KiB2aWV3ID0gc21hcnREYXRhLT5mcmFtZS0+dmlldygpOwogICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOX1ZBTCh2aWV3LCAwKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTl9WQUwoc2QtPmZyYW1lLT5jb250ZW50UmVuZGVyZXIoKSwgMCk7CisgICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUtPmNvbnRlbnRSZW5kZXJl
cigpLCAwKTsKIAotICAgIFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQgcmVzdWx0ID0gc2QtPmZyYW1l
LT5ldmVudEhhbmRsZXIoKS0+aGl0VGVzdFJlc3VsdEF0UG9pbnQKKyAgICBXZWJDb3JlOjpIaXRU
ZXN0UmVzdWx0IHJlc3VsdCA9IHNtYXJ0RGF0YS0+ZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5oaXRU
ZXN0UmVzdWx0QXRQb2ludAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICh2aWV3LT53aW5kb3dUb0NvbnRlbnRzKFdlYkNvcmU6OkludFBvaW50KHgsIHkpKSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKmFsbG93U2hhZG93Q29udGVudCov
IGZhbHNlLCAvKmlnbm9yZUNsaXBwaW5nKi8gdHJ1ZSk7CiAKQEAgLTY1OSw0MSArNjU5LDQxIEBA
IEV3a19IaXRfVGVzdCogZXdrX2ZyYW1lX2hpdF90ZXN0X25ldyhjb25zdCBFdmFzX09iamVjdCog
ZXdrRnJhbWUsIGludCB4LCBpbnQgeSkKICAgICBpZiAoIXJlc3VsdC5pbm5lck5vZGUoKSkKICAg
ICAgICAgcmV0dXJuIDA7CiAKLSAgICBFd2tfSGl0X1Rlc3QqIGhpdF90ZXN0ID0gc3RhdGljX2Nh
c3Q8RXdrX0hpdF9UZXN0Kj4oY2FsbG9jKDEsIHNpemVvZihFd2tfSGl0X1Rlc3QpKSk7Ci0gICAg
aWYgKCFoaXRfdGVzdCkgeworICAgIEV3a19IaXRfVGVzdCogaGl0VGVzdCA9IHN0YXRpY19jYXN0
PEV3a19IaXRfVGVzdCo+KGNhbGxvYygxLCBzaXplb2YoRXdrX0hpdF9UZXN0KSkpOworICAgIGlm
ICghaGl0VGVzdCkgewogICAgICAgICBDUklUSUNBTCgiQ291bGQgbm90IGFsbG9jYXRlIG1lbW9y
eSBmb3IgaGl0IHRlc3QuIik7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIGhpdF90
ZXN0LT54ID0gcmVzdWx0LnBvaW50KCkueCgpOwotICAgIGhpdF90ZXN0LT55ID0gcmVzdWx0LnBv
aW50KCkueSgpOworICAgIGhpdFRlc3QtPnggPSByZXN1bHQucG9pbnQoKS54KCk7CisgICAgaGl0
VGVzdC0+eSA9IHJlc3VsdC5wb2ludCgpLnkoKTsKICNpZiAwCiAgICAgLy8gRklYTUUKLSAgICBo
aXRfdGVzdC0+Ym91bmRpbmdfYm94LnggPSByZXN1bHQuYm91bmRpbmdCb3goKS54KCk7Ci0gICAg
aGl0X3Rlc3QtPmJvdW5kaW5nX2JveC55ID0gcmVzdWx0LmJvdW5kaW5nQm94KCkueSgpOwotICAg
IGhpdF90ZXN0LT5ib3VuZGluZ19ib3gudyA9IHJlc3VsdC5ib3VuZGluZ0JveCgpLndpZHRoKCk7
Ci0gICAgaGl0X3Rlc3QtPmJvdW5kaW5nX2JveC5oID0gcmVzdWx0LmJvdW5kaW5nQm94KCkuaGVp
Z2h0KCk7CisgICAgaGl0VGVzdC0+Ym91bmRpbmdfYm94LnggPSByZXN1bHQuYm91bmRpbmdCb3go
KS54KCk7CisgICAgaGl0VGVzdC0+Ym91bmRpbmdfYm94LnkgPSByZXN1bHQuYm91bmRpbmdCb3go
KS55KCk7CisgICAgaGl0VGVzdC0+Ym91bmRpbmdfYm94LndpZHRoID0gcmVzdWx0LmJvdW5kaW5n
Qm94KCkud2lkdGgoKTsKKyAgICBoaXRUZXN0LT5ib3VuZGluZ19ib3guaGVpZ2h0ID0gcmVzdWx0
LmJvdW5kaW5nQm94KCkuaGVpZ2h0KCk7CiAjZWxzZQotICAgIGhpdF90ZXN0LT5ib3VuZGluZ19i
b3gueCA9IDA7Ci0gICAgaGl0X3Rlc3QtPmJvdW5kaW5nX2JveC55ID0gMDsKLSAgICBoaXRfdGVz
dC0+Ym91bmRpbmdfYm94LncgPSAwOwotICAgIGhpdF90ZXN0LT5ib3VuZGluZ19ib3guaCA9IDA7
CisgICAgaGl0VGVzdC0+Ym91bmRpbmdfYm94LnggPSAwOworICAgIGhpdFRlc3QtPmJvdW5kaW5n
X2JveC55ID0gMDsKKyAgICBoaXRUZXN0LT5ib3VuZGluZ19ib3gudyA9IDA7CisgICAgaGl0VGVz
dC0+Ym91bmRpbmdfYm94LmggPSAwOwogI2VuZGlmCiAKLSAgICBXZWJDb3JlOjpUZXh0RGlyZWN0
aW9uIGRpcjsKLSAgICBoaXRfdGVzdC0+dGl0bGUgPSBlaW5hX3N0cmluZ3NoYXJlX2FkZChyZXN1
bHQudGl0bGUoZGlyKS51dGY4KCkuZGF0YSgpKTsKLSAgICBoaXRfdGVzdC0+YWx0ZXJuYXRlX3Rl
eHQgPSBlaW5hX3N0cmluZ3NoYXJlX2FkZChyZXN1bHQuYWx0RGlzcGxheVN0cmluZygpLnV0Zjgo
KS5kYXRhKCkpOworICAgIFdlYkNvcmU6OlRleHREaXJlY3Rpb24gZGlyZWN0aW9uOworICAgIGhp
dFRlc3QtPnRpdGxlID0gZWluYV9zdHJpbmdzaGFyZV9hZGQocmVzdWx0LnRpdGxlKGRpcmVjdGlv
bikudXRmOCgpLmRhdGEoKSk7CisgICAgaGl0VGVzdC0+YWx0ZXJuYXRlX3RleHQgPSBlaW5hX3N0
cmluZ3NoYXJlX2FkZChyZXN1bHQuYWx0RGlzcGxheVN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwog
ICAgIGlmIChyZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCkgJiYgcmVzdWx0LmlubmVyTm9uU2hh
cmVkTm9kZSgpLT5kb2N1bWVudCgpCiAgICAgICAgICYmIHJlc3VsdC5pbm5lck5vblNoYXJlZE5v
ZGUoKS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSkKLSAgICAgICAgaGl0X3Rlc3QtPmZyYW1lID0gRVdL
UHJpdmF0ZTo6a2l0RnJhbWUocmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpLT5kb2N1bWVudCgp
LT5mcmFtZSgpKTsKKyAgICAgICAgaGl0VGVzdC0+ZnJhbWUgPSBFV0tQcml2YXRlOjpraXRGcmFt
ZShyZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCktPmRvY3VtZW50KCktPmZyYW1lKCkpOwogCi0g
ICAgaGl0X3Rlc3QtPmxpbmsudGV4dCA9IGVpbmFfc3RyaW5nc2hhcmVfYWRkKHJlc3VsdC50ZXh0
Q29udGVudCgpLnV0ZjgoKS5kYXRhKCkpOwotICAgIGhpdF90ZXN0LT5saW5rLnVybCA9IGVpbmFf
c3RyaW5nc2hhcmVfYWRkKHJlc3VsdC5hYnNvbHV0ZUxpbmtVUkwoKS5zdHJpbmcoKS51dGY4KCku
ZGF0YSgpKTsKLSAgICBoaXRfdGVzdC0+bGluay50aXRsZSA9IGVpbmFfc3RyaW5nc2hhcmVfYWRk
KHJlc3VsdC50aXRsZURpc3BsYXlTdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLSAgICBoaXRfdGVz
dC0+bGluay50YXJnZXRfZnJhbWUgPSBFV0tQcml2YXRlOjpraXRGcmFtZShyZXN1bHQudGFyZ2V0
RnJhbWUoKSk7CisgICAgaGl0VGVzdC0+bGluay50ZXh0ID0gZWluYV9zdHJpbmdzaGFyZV9hZGQo
cmVzdWx0LnRleHRDb250ZW50KCkudXRmOCgpLmRhdGEoKSk7CisgICAgaGl0VGVzdC0+bGluay51
cmwgPSBlaW5hX3N0cmluZ3NoYXJlX2FkZChyZXN1bHQuYWJzb2x1dGVMaW5rVVJMKCkuc3RyaW5n
KCkudXRmOCgpLmRhdGEoKSk7CisgICAgaGl0VGVzdC0+bGluay50aXRsZSA9IGVpbmFfc3RyaW5n
c2hhcmVfYWRkKHJlc3VsdC50aXRsZURpc3BsYXlTdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAg
ICBoaXRUZXN0LT5saW5rLnRhcmdldF9mcmFtZSA9IEVXS1ByaXZhdGU6OmtpdEZyYW1lKHJlc3Vs
dC50YXJnZXRGcmFtZSgpKTsKIAotICAgIGhpdF90ZXN0LT5pbWFnZV91cmkgPSBlaW5hX3N0cmlu
Z3NoYXJlX2FkZChyZXN1bHQuYWJzb2x1dGVJbWFnZVVSTCgpLnN0cmluZygpLnV0ZjgoKS5kYXRh
KCkpOwotICAgIGhpdF90ZXN0LT5tZWRpYV91cmkgPSBlaW5hX3N0cmluZ3NoYXJlX2FkZChyZXN1
bHQuYWJzb2x1dGVNZWRpYVVSTCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgIGhpdFRl
c3QtPmltYWdlX3VyaSA9IGVpbmFfc3RyaW5nc2hhcmVfYWRkKHJlc3VsdC5hYnNvbHV0ZUltYWdl
VVJMKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgaGl0VGVzdC0+bWVkaWFfdXJpID0g
ZWluYV9zdHJpbmdzaGFyZV9hZGQocmVzdWx0LmFic29sdXRlTWVkaWFVUkwoKS5zdHJpbmcoKS51
dGY4KCkuZGF0YSgpKTsKIAogICAgIGludCBjb250ZXh0ID0gRVdLX0hJVF9URVNUX1JFU1VMVF9D
T05URVhUX0RPQ1VNRU5UOwogCkBAIC03MDgsMjggKzcwOCwyOCBAQCBFd2tfSGl0X1Rlc3QqIGV3
a19mcmFtZV9oaXRfdGVzdF9uZXcoY29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBpbnQgeCwg
aW50IHkpCiAgICAgaWYgKHJlc3VsdC5pc0NvbnRlbnRFZGl0YWJsZSgpKQogICAgICAgICBjb250
ZXh0IHw9IEVXS19ISVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9FRElUQUJMRTsKIAotICAgIGhpdF90
ZXN0LT5jb250ZXh0ID0gc3RhdGljX2Nhc3Q8RXdrX0hpdF9UZXN0X1Jlc3VsdF9Db250ZXh0Pihj
b250ZXh0KTsKKyAgICBoaXRUZXN0LT5jb250ZXh0ID0gc3RhdGljX2Nhc3Q8RXdrX0hpdF9UZXN0
X1Jlc3VsdF9Db250ZXh0Pihjb250ZXh0KTsKIAotICAgIHJldHVybiBoaXRfdGVzdDsKKyAgICBy
ZXR1cm4gaGl0VGVzdDsKIH0KIAogRWluYV9Cb29sCiBld2tfZnJhbWVfc2Nyb2xsX2FkZChFdmFz
X09iamVjdCogZXdrRnJhbWUsIGludCBkZWx0YVgsIGludCBkZWx0YVkpCiB7Ci0gICAgRVdLX0ZS
QU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKLSAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLT52aWV3KCksIEVJTkFfRkFM
U0UpOwotICAgIHNkLT5mcmFtZS0+dmlldygpLT5zY3JvbGxCeShXZWJDb3JlOjpJbnRTaXplKGRl
bHRhWCwgZGVsdGFZKSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUs
IHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5f
VkFMKHNtYXJ0RGF0YS0+ZnJhbWUsIEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmZyYW1lLT52aWV3KCksIEVJTkFfRkFMU0UpOworICAg
IHNtYXJ0RGF0YS0+ZnJhbWUtPnZpZXcoKS0+c2Nyb2xsQnkoV2ViQ29yZTo6SW50U2l6ZShkZWx0
YVgsIGRlbHRhWSkpOwogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKIEVpbmFfQm9vbAogZXdr
X2ZyYW1lX3Njcm9sbF9zZXQoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBpbnQgeCwgaW50IHkpCiB7
Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNF
KTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZB
TFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLT52aWV3
KCksIEVJTkFfRkFMU0UpOwotICAgIHNkLT5mcmFtZS0+dmlldygpLT5zZXRTY3JvbGxQb3NpdGlv
bihXZWJDb3JlOjpJbnRQb2ludCh4LCB5KSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRV
Uk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUsIEVJTkFfRkFMU0UpOworICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmZyYW1lLT52aWV3KCksIEVJTkFf
RkFMU0UpOworICAgIHNtYXJ0RGF0YS0+ZnJhbWUtPnZpZXcoKS0+c2V0U2Nyb2xsUG9zaXRpb24o
V2ViQ29yZTo6SW50UG9pbnQoeCwgeSkpOwogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKQEAg
LTc0MCwxMCArNzQwLDEwIEBAIGV3a19mcmFtZV9zY3JvbGxfc2l6ZV9nZXQoY29uc3QgRXZhc19P
YmplY3QqIGV3a0ZyYW1lLCBpbnQqIHdpZHRoLCBpbnQqIGhlaWdodCkKICAgICAgICAgKndpZHRo
ID0gMDsKICAgICBpZiAoaGVpZ2h0KQogICAgICAgICAqaGVpZ2h0ID0gMDsKLSAgICBFV0tfRlJB
TUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOwotICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUtPnZpZXcoKSwgRUlOQV9GQUxT
RSk7Ci0gICAgV2ViQ29yZTo6SW50UG9pbnQgcG9pbnQgPSBzZC0+ZnJhbWUtPnZpZXcoKS0+bWF4
aW11bVNjcm9sbFBvc2l0aW9uKCk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdr
RnJhbWUsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUsIEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmZyYW1lLT52aWV3KCksIEVJTkFfRkFMU0Up
OworICAgIFdlYkNvcmU6OkludFBvaW50IHBvaW50ID0gc21hcnREYXRhLT5mcmFtZS0+dmlldygp
LT5tYXhpbXVtU2Nyb2xsUG9zaXRpb24oKTsKICAgICBpZiAod2lkdGgpCiAgICAgICAgICp3aWR0
aCA9IHBvaW50LngoKTsKICAgICBpZiAoaGVpZ2h0KQpAQCAtNzU4LDEwICs3NTgsMTAgQEAgZXdr
X2ZyYW1lX3Njcm9sbF9wb3NfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgaW50KiB4
LCBpbnQqIHkpCiAgICAgICAgICp4ID0gMDsKICAgICBpZiAoeSkKICAgICAgICAgKnkgPSAwOwot
ICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7
Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxT
RSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZS0+dmlldygp
LCBFSU5BX0ZBTFNFKTsKLSAgICBXZWJDb3JlOjpJbnRQb2ludCBwb3MgPSBzZC0+ZnJhbWUtPnZp
ZXcoKS0+c2Nyb2xsUG9zaXRpb24oKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihl
d2tGcmFtZSwgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTl9WQUwoc21hcnREYXRhLT5mcmFtZSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZF
VFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUtPnZpZXcoKSwgRUlOQV9GQUxT
RSk7CisgICAgV2ViQ29yZTo6SW50UG9pbnQgcG9zID0gc21hcnREYXRhLT5mcmFtZS0+dmlldygp
LT5zY3JvbGxQb3NpdGlvbigpOwogICAgIGlmICh4KQogICAgICAgICAqeCA9IHBvcy54KCk7CiAg
ICAgaWYgKHkpCkBAIC03NzksMTAgKzc3OSwxMCBAQCBFaW5hX0Jvb2wgZXdrX2ZyYW1lX3Zpc2li
bGVfY29udGVudF9nZW9tZXRyeV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBFaQog
ICAgICAgICAqd2lkdGggPSAwOwogICAgIGlmIChoZWlnaHQpCiAgICAgICAgICpoZWlnaHQgPSAw
OwotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxT
RSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9G
QUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZS0+dmll
dygpLCBFSU5BX0ZBTFNFKTsKLSAgICBXZWJDb3JlOjpJbnRSZWN0IHJlY3QgPSBzZC0+ZnJhbWUt
PnZpZXcoKS0+dmlzaWJsZUNvbnRlbnRSZWN0KGluY2x1ZGVTY3JvbGxiYXJzKTsKKyAgICBFV0tf
RlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsK
KyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5mcmFtZSwgRUlO
QV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+
ZnJhbWUtPnZpZXcoKSwgRUlOQV9GQUxTRSk7CisgICAgV2ViQ29yZTo6SW50UmVjdCByZWN0ID0g
c21hcnREYXRhLT5mcmFtZS0+dmlldygpLT52aXNpYmxlQ29udGVudFJlY3QoaW5jbHVkZVNjcm9s
bGJhcnMpOwogICAgIGlmICh4KQogICAgICAgICAqeCA9IHJlY3QueCgpOwogICAgIGlmICh5KQpA
QCAtNzk2LDI2ICs3OTYsMjYgQEAgRWluYV9Cb29sIGV3a19mcmFtZV92aXNpYmxlX2NvbnRlbnRf
Z2VvbWV0cnlfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgRWkKIAogRWluYV9Cb29s
IGV3a19mcmFtZV9wYWludF9mdWxsX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrRnJhbWUpCiB7
Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNF
KTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZB
TFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLT52aWV3
KCksIEVJTkFfRkFMU0UpOwotICAgIHJldHVybiBzZC0+ZnJhbWUtPnZpZXcoKS0+cGFpbnRzRW50
aXJlQ29udGVudHMoKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwg
c21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9W
QUwoc21hcnREYXRhLT5mcmFtZSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUtPnZpZXcoKSwgRUlOQV9GQUxTRSk7CisgICAg
cmV0dXJuIHNtYXJ0RGF0YS0+ZnJhbWUtPnZpZXcoKS0+cGFpbnRzRW50aXJlQ29udGVudHMoKTsK
IH0KIAogdm9pZCBld2tfZnJhbWVfcGFpbnRfZnVsbF9zZXQoRXZhc19PYmplY3QqIGV3a0ZyYW1l
LCBFaW5hX0Jvb2wgZmxhZykKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tG
cmFtZSwgc2QpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5mcmFtZSk7Ci0g
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmZyYW1lLT52aWV3KCkpOwotICAgIHNk
LT5mcmFtZS0+dmlldygpLT5zZXRQYWludHNFbnRpcmVDb250ZW50cyhmbGFnKTsKKyAgICBFV0tf
RlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRhKTsKKyAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmZyYW1lKTsKKyAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmZyYW1lLT52aWV3KCkpOworICAgIHNtYXJ0RGF0YS0+
ZnJhbWUtPnZpZXcoKS0+c2V0UGFpbnRzRW50aXJlQ29udGVudHMoZmxhZyk7CiB9CiAKIEVpbmFf
Qm9vbCBld2tfZnJhbWVfZmVlZF9mb2N1c19pbihFdmFzX09iamVjdCogZXdrRnJhbWUpCiB7Ci0g
ICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsK
LSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNF
KTsKLSAgICBXZWJDb3JlOjpGb2N1c0NvbnRyb2xsZXIqIGMgPSBzZC0+ZnJhbWUtPnBhZ2UoKS0+
Zm9jdXNDb250cm9sbGVyKCk7Ci0gICAgYy0+c2V0Rm9jdXNlZEZyYW1lKHNkLT5mcmFtZSk7Cisg
ICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSwgRUlOQV9G
QUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJh
bWUsIEVJTkFfRkFMU0UpOworICAgIFdlYkNvcmU6OkZvY3VzQ29udHJvbGxlciogYyA9IHNtYXJ0
RGF0YS0+ZnJhbWUtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCk7CisgICAgYy0+c2V0Rm9jdXNl
ZEZyYW1lKHNtYXJ0RGF0YS0+ZnJhbWUpOwogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKQEAg
LTgyOCw4NyArODI4LDg3IEBAIEVpbmFfQm9vbCBld2tfZnJhbWVfZmVlZF9mb2N1c19vdXQoRXZh
c19PYmplY3QqIGV3a0ZyYW1lKQogCiBFaW5hX0Jvb2wgZXdrX2ZyYW1lX2ZlZWRfbW91c2Vfd2hl
ZWwoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBjb25zdCBFdmFzX0V2ZW50X01vdXNlX1doZWVsKiB3
aGVlbEV2ZW50KQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBz
ZCwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5m
cmFtZSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJh
bWUsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOX1ZBTCh3aGVlbEV2ZW50LCBFSU5BX0ZBTFNFKTsKIAotICAgIFdlYkNvcmU6
OkZyYW1lVmlldyogdmlldyA9IHNkLT5mcmFtZS0+dmlldygpOworICAgIFdlYkNvcmU6OkZyYW1l
VmlldyogdmlldyA9IHNtYXJ0RGF0YS0+ZnJhbWUtPnZpZXcoKTsKICAgICBEQkcoImV3a0ZyYW1l
PSVwLCB2aWV3PSVwLCBkaXJlY3Rpb249JWQsIHo9JWQsIHBvcz0lZCwlZCIsCiAgICAgICAgIGV3
a0ZyYW1lLCB2aWV3LCB3aGVlbEV2ZW50LT5kaXJlY3Rpb24sIHdoZWVsRXZlbnQtPnosIHdoZWVs
RXZlbnQtPmNhbnZhcy54LCB3aGVlbEV2ZW50LT5jYW52YXMueSk7CiAgICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk5fVkFMKHZpZXcsIEVJTkFfRkFMU0UpOwogCiAgICAgV2ViQ29yZTo6UGxh
dGZvcm1XaGVlbEV2ZW50IGV2ZW50KHdoZWVsRXZlbnQpOwotICAgIHJldHVybiBzZC0+ZnJhbWUt
PmV2ZW50SGFuZGxlcigpLT5oYW5kbGVXaGVlbEV2ZW50KGV2ZW50KTsKKyAgICByZXR1cm4gc21h
cnREYXRhLT5mcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmhhbmRsZVdoZWVsRXZlbnQoZXZlbnQpOwog
fQogCiBFaW5hX0Jvb2wgZXdrX2ZyYW1lX2ZlZWRfbW91c2VfZG93bihFdmFzX09iamVjdCogZXdr
RnJhbWUsIGNvbnN0IEV2YXNfRXZlbnRfTW91c2VfRG93biogZG93bkV2ZW50KQogewotICAgIEVX
S19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7Cisg
ICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSwgRUlOQV9G
QUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJh
bWUsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChkb3du
RXZlbnQsIEVJTkFfRkFMU0UpOwogCi0gICAgV2ViQ29yZTo6RnJhbWVWaWV3KiB2aWV3ID0gc2Qt
PmZyYW1lLT52aWV3KCk7CisgICAgV2ViQ29yZTo6RnJhbWVWaWV3KiB2aWV3ID0gc21hcnREYXRh
LT5mcmFtZS0+dmlldygpOwogICAgIERCRygiZXdrRnJhbWU9JXAsIHZpZXc9JXAsIGJ1dHRvbj0l
ZCwgcG9zPSVkLCVkIiwKICAgICAgICAgZXdrRnJhbWUsIHZpZXcsIGRvd25FdmVudC0+YnV0dG9u
LCBkb3duRXZlbnQtPmNhbnZhcy54LCBkb3duRXZlbnQtPmNhbnZhcy55KTsKICAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodmlldywgRUlOQV9GQUxTRSk7CiAKICAgICBFdmFzX0Nv
b3JkIHgsIHk7Ci0gICAgZXZhc19vYmplY3RfZ2VvbWV0cnlfZ2V0KHNkLT52aWV3LCAmeCwgJnks
IDAsIDApOworICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldChzbWFydERhdGEtPnZpZXcsICZ4
LCAmeSwgMCwgMCk7CiAKICAgICBXZWJDb3JlOjpQbGF0Zm9ybU1vdXNlRXZlbnQgZXZlbnQoZG93
bkV2ZW50LCBXZWJDb3JlOjpJbnRQb2ludCh4LCB5KSk7Ci0gICAgcmV0dXJuIHNkLT5mcmFtZS0+
ZXZlbnRIYW5kbGVyKCktPmhhbmRsZU1vdXNlUHJlc3NFdmVudChldmVudCk7CisgICAgcmV0dXJu
IHNtYXJ0RGF0YS0+ZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5oYW5kbGVNb3VzZVByZXNzRXZlbnQo
ZXZlbnQpOwogfQogCiBFaW5hX0Jvb2wgZXdrX2ZyYW1lX2ZlZWRfbW91c2VfdXAoRXZhc19PYmpl
Y3QqIGV3a0ZyYW1lLCBjb25zdCBFdmFzX0V2ZW50X01vdXNlX1VwKiB1cEV2ZW50KQogewotICAg
IEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7Ci0g
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7
CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSwgRUlO
QV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+
ZnJhbWUsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh1
cEV2ZW50LCBFSU5BX0ZBTFNFKTsKIAotICAgIFdlYkNvcmU6OkZyYW1lVmlldyogdmlldyA9IHNk
LT5mcmFtZS0+dmlldygpOworICAgIFdlYkNvcmU6OkZyYW1lVmlldyogdmlldyA9IHNtYXJ0RGF0
YS0+ZnJhbWUtPnZpZXcoKTsKICAgICBEQkcoImV3a0ZyYW1lPSVwLCB2aWV3PSVwLCBidXR0b249
JWQsIHBvcz0lZCwlZCIsCiAgICAgICAgIGV3a0ZyYW1lLCB2aWV3LCB1cEV2ZW50LT5idXR0b24s
IHVwRXZlbnQtPmNhbnZhcy54LCB1cEV2ZW50LT5jYW52YXMueSk7CiAgICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk5fVkFMKHZpZXcsIEVJTkFfRkFMU0UpOwogCiAgICAgRXZhc19Db29yZCB4
LCB5OwotICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldChzZC0+dmlldywgJngsICZ5LCAwLCAw
KTsKKyAgICBldmFzX29iamVjdF9nZW9tZXRyeV9nZXQoc21hcnREYXRhLT52aWV3LCAmeCwgJnks
IDAsIDApOwogCiAgICAgV2ViQ29yZTo6UGxhdGZvcm1Nb3VzZUV2ZW50IGV2ZW50KHVwRXZlbnQs
IFdlYkNvcmU6OkludFBvaW50KHgsIHkpKTsKLSAgICByZXR1cm4gc2QtPmZyYW1lLT5ldmVudEhh
bmRsZXIoKS0+aGFuZGxlTW91c2VSZWxlYXNlRXZlbnQoZXZlbnQpOworICAgIHJldHVybiBzbWFy
dERhdGEtPmZyYW1lLT5ldmVudEhhbmRsZXIoKS0+aGFuZGxlTW91c2VSZWxlYXNlRXZlbnQoZXZl
bnQpOwogfQogCiBFaW5hX0Jvb2wgZXdrX2ZyYW1lX2ZlZWRfbW91c2VfbW92ZShFdmFzX09iamVj
dCogZXdrRnJhbWUsIGNvbnN0IEV2YXNfRXZlbnRfTW91c2VfTW92ZSogbW92ZUV2ZW50KQogewot
ICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7
Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxT
RSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSwg
RUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0
YS0+ZnJhbWUsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZB
TChtb3ZlRXZlbnQsIEVJTkFfRkFMU0UpOwogCi0gICAgV2ViQ29yZTo6RnJhbWVWaWV3KiB2aWV3
ID0gc2QtPmZyYW1lLT52aWV3KCk7CisgICAgV2ViQ29yZTo6RnJhbWVWaWV3KiB2aWV3ID0gc21h
cnREYXRhLT5mcmFtZS0+dmlldygpOwogICAgIERCRygiZXdrRnJhbWU9JXAsIHZpZXc9JXAsIHBv
czogb2xkPSVkLCVkLCBuZXc9JWQsJWQsIGJ1dHRvbnM9JWQiLAogICAgICAgICBld2tGcmFtZSwg
dmlldywgbW92ZUV2ZW50LT5jdXIuY2FudmFzLngsIG1vdmVFdmVudC0+Y3VyLmNhbnZhcy55LAog
ICAgICAgICBtb3ZlRXZlbnQtPnByZXYuY2FudmFzLngsIG1vdmVFdmVudC0+cHJldi5jYW52YXMu
eSwgbW92ZUV2ZW50LT5idXR0b25zKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9W
QUwodmlldywgRUlOQV9GQUxTRSk7CiAKICAgICBFdmFzX0Nvb3JkIHgsIHk7Ci0gICAgZXZhc19v
YmplY3RfZ2VvbWV0cnlfZ2V0KHNkLT52aWV3LCAmeCwgJnksIDAsIDApOworICAgIGV2YXNfb2Jq
ZWN0X2dlb21ldHJ5X2dldChzbWFydERhdGEtPnZpZXcsICZ4LCAmeSwgMCwgMCk7CiAKICAgICBX
ZWJDb3JlOjpQbGF0Zm9ybU1vdXNlRXZlbnQgZXZlbnQobW92ZUV2ZW50LCBXZWJDb3JlOjpJbnRQ
b2ludCh4LCB5KSk7Ci0gICAgcmV0dXJuIHNkLT5mcmFtZS0+ZXZlbnRIYW5kbGVyKCktPm1vdXNl
TW92ZWQoZXZlbnQpOworICAgIHJldHVybiBzbWFydERhdGEtPmZyYW1lLT5ldmVudEhhbmRsZXIo
KS0+bW91c2VNb3ZlZChldmVudCk7CiB9CiAKIEVpbmFfQm9vbCBld2tfZnJhbWVfZmVlZF90b3Vj
aF9ldmVudChFdmFzX09iamVjdCogZXdrRnJhbWUsIEV3a19Ub3VjaF9FdmVudF9UeXBlIGFjdGlv
biwgRWluYV9MaXN0KiBwb2ludHMsIGludCBtZXRhU3RhdGUpCiB7Ci0gICAgRWluYV9Cb29sIHJl
dCA9IEVJTkFfRkFMU0U7CisgICAgRWluYV9Cb29sIHJlc3VsdCA9IEVJTkFfRkFMU0U7CiAKICNp
ZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZB
TChwb2ludHMsIEVJTkFfRkFMU0UpOwotICAgIEVXS19GUkFNRV9TRF9HRVQoZXdrRnJhbWUsIHNk
KTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUKGV3a0ZyYW1lLCBzbWFydERhdGEpOwogCi0gICAgaWYg
KCFzZCB8fCAhc2QtPmZyYW1lIHx8ICFld2tfdmlld19uZWVkX3RvdWNoX2V2ZW50c19nZXQoc2Qt
PnZpZXcpKQorICAgIGlmICghc21hcnREYXRhIHx8ICFzbWFydERhdGEtPmZyYW1lIHx8ICFld2tf
dmlld19uZWVkX3RvdWNoX2V2ZW50c19nZXQoc21hcnREYXRhLT52aWV3KSkKICAgICAgICAgcmV0
dXJuIEVJTkFfRkFMU0U7CiAKICAgICBFdmFzX0Nvb3JkIHgsIHk7Ci0gICAgZXZhc19vYmplY3Rf
Z2VvbWV0cnlfZ2V0KHNkLT52aWV3LCAmeCwgJnksIDAsIDApOworICAgIGV2YXNfb2JqZWN0X2dl
b21ldHJ5X2dldChzbWFydERhdGEtPnZpZXcsICZ4LCAmeSwgMCwgMCk7CiAKICAgICBXZWJDb3Jl
OjpUb3VjaEV2ZW50VHlwZSB0eXBlID0gV2ViQ29yZTo6VG91Y2hTdGFydDsKICAgICBzd2l0Y2gg
KGFjdGlvbikgewpAQCAtOTI4LDEwICs5MjgsMTAgQEAgRWluYV9Cb29sIGV3a19mcmFtZV9mZWVk
X3RvdWNoX2V2ZW50KEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgRXdrX1RvdWNoX0V2ZW50X1R5cGUK
ICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CiAgICAgfQogCi0gICAgV2ViQ29yZTo6UGxhdGZv
cm1Ub3VjaEV2ZW50IHRlKHBvaW50cywgV2ViQ29yZTo6SW50UG9pbnQoeCwgeSksIHR5cGUsIG1l
dGFTdGF0ZSk7Ci0gICAgcmV0ID0gc2QtPmZyYW1lLT5ldmVudEhhbmRsZXIoKS0+aGFuZGxlVG91
Y2hFdmVudCh0ZSk7CisgICAgV2ViQ29yZTo6UGxhdGZvcm1Ub3VjaEV2ZW50IHRvdWNoRXZlbnQo
cG9pbnRzLCBXZWJDb3JlOjpJbnRQb2ludCh4LCB5KSwgdHlwZSwgbWV0YVN0YXRlKTsKKyAgICBy
ZXN1bHQgPSBzbWFydERhdGEtPmZyYW1lLT5ldmVudEhhbmRsZXIoKS0+aGFuZGxlVG91Y2hFdmVu
dCh0b3VjaEV2ZW50KTsKICNlbmRpZgotICAgIHJldHVybiByZXQ7CisgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIAogc3RhdGljIGlubGluZSBFaW5hX0Jvb2wgX2V3a19mcmFtZV9oYW5kbGVfa2V5X3Nj
cm9sbGluZyhXZWJDb3JlOjpGcmFtZSogZnJhbWUsIGNvbnN0IFdlYkNvcmU6OlBsYXRmb3JtS2V5
Ym9hcmRFdmVudCYga2V5RXZlbnQpCkBAIC0xMDAwLDM5ICsxMDAwLDM5IEBAIHN0YXRpYyBpbmxp
bmUgRWluYV9Cb29sIF9ld2tfZnJhbWVfaGFuZGxlX2tleV9zY3JvbGxpbmcoV2ViQ29yZTo6RnJh
bWUqIGZyYW1lLCBjCiAKIEVpbmFfQm9vbCBld2tfZnJhbWVfZmVlZF9rZXlfZG93bihFdmFzX09i
amVjdCogZXdrRnJhbWUsIGNvbnN0IEV2YXNfRXZlbnRfS2V5X0Rvd24qIGRvd25FdmVudCkKIHsK
LSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0Up
OwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFM
U0UpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzbWFydERhdGEs
IEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERh
dGEtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9W
QUwoZG93bkV2ZW50LCBFSU5BX0ZBTFNFKTsKIAogICAgIERCRygiZXdrRnJhbWU9JXAga2V5bmFt
ZT0lcyAoa2V5PSVzLCBzdHJpbmc9JXMpIiwKICAgICAgICAgZXdrRnJhbWUsIGRvd25FdmVudC0+
a2V5bmFtZSwgZG93bkV2ZW50LT5rZXkgPyBkb3duRXZlbnQtPmtleSA6ICIiLCBkb3duRXZlbnQt
PnN0cmluZyA/IGRvd25FdmVudC0+c3RyaW5nIDogIiIpOwogCiAgICAgV2ViQ29yZTo6UGxhdGZv
cm1LZXlib2FyZEV2ZW50IGV2ZW50KGRvd25FdmVudCk7Ci0gICAgaWYgKHNkLT5mcmFtZS0+ZXZl
bnRIYW5kbGVyKCktPmtleUV2ZW50KGV2ZW50KSkKKyAgICBpZiAoc21hcnREYXRhLT5mcmFtZS0+
ZXZlbnRIYW5kbGVyKCktPmtleUV2ZW50KGV2ZW50KSkKICAgICAgICAgcmV0dXJuIEVJTkFfVFJV
RTsKIAotICAgIHJldHVybiBfZXdrX2ZyYW1lX2hhbmRsZV9rZXlfc2Nyb2xsaW5nKHNkLT5mcmFt
ZSwgZXZlbnQpOworICAgIHJldHVybiBfZXdrX2ZyYW1lX2hhbmRsZV9rZXlfc2Nyb2xsaW5nKHNt
YXJ0RGF0YS0+ZnJhbWUsIGV2ZW50KTsKIH0KIAogRWluYV9Cb29sIGV3a19mcmFtZV9mZWVkX2tl
eV91cChFdmFzX09iamVjdCogZXdrRnJhbWUsIGNvbnN0IEV2YXNfRXZlbnRfS2V5X1VwKiB1cEV2
ZW50KQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgRUlO
QV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwg
RUlOQV9GQUxTRSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNt
YXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFM
KHNtYXJ0RGF0YS0+ZnJhbWUsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOX1ZBTCh1cEV2ZW50LCBFSU5BX0ZBTFNFKTsKIAogICAgIERCRygiZXdrRnJhbWU9JXAg
a2V5bmFtZT0lcyAoa2V5PSVzLCBzdHJpbmc9JXMpIiwKICAgICAgICAgZXdrRnJhbWUsIHVwRXZl
bnQtPmtleW5hbWUsIHVwRXZlbnQtPmtleSA/IHVwRXZlbnQtPmtleSA6ICIiLCB1cEV2ZW50LT5z
dHJpbmcgPyB1cEV2ZW50LT5zdHJpbmcgOiAiIik7CiAKICAgICBXZWJDb3JlOjpQbGF0Zm9ybUtl
eWJvYXJkRXZlbnQgZXZlbnQodXBFdmVudCk7Ci0gICAgcmV0dXJuIHNkLT5mcmFtZS0+ZXZlbnRI
YW5kbGVyKCktPmtleUV2ZW50KGV2ZW50KTsKKyAgICByZXR1cm4gc21hcnREYXRhLT5mcmFtZS0+
ZXZlbnRIYW5kbGVyKCktPmtleUV2ZW50KGV2ZW50KTsKIH0KIAogRXdrX1RleHRfU2VsZWN0aW9u
X1R5cGUgZXdrX2ZyYW1lX3RleHRfc2VsZWN0aW9uX3R5cGVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0
KiBld2tGcmFtZSkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwg
c2QsIEVXS19URVhUX1NFTEVDVElPTl9OT05FKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTl9WQUwoc2QtPmZyYW1lLCBFV0tfVEVYVF9TRUxFQ1RJT05fTk9ORSk7CisgICAgRVdLX0ZS
QU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSwgRVdLX1RFWFRfU0VMRUNU
SU9OX05PTkUpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEt
PmZyYW1lLCBFV0tfVEVYVF9TRUxFQ1RJT05fTk9ORSk7CiAKLSAgICBXZWJDb3JlOjpGcmFtZVNl
bGVjdGlvbiogY29udHJvbGxlciA9IHNkLT5mcmFtZS0+c2VsZWN0aW9uKCk7CisgICAgV2ViQ29y
ZTo6RnJhbWVTZWxlY3Rpb24qIGNvbnRyb2xsZXIgPSBzbWFydERhdGEtPmZyYW1lLT5zZWxlY3Rp
b24oKTsKICAgICBpZiAoIWNvbnRyb2xsZXIpCiAgICAgICAgIHJldHVybiBFV0tfVEVYVF9TRUxF
Q1RJT05fTk9ORTsKIApAQCAtMTA3NSwxOCArMTA3NSwxOCBAQCBFdmFzX09iamVjdCogZXdrX2Zy
YW1lX2FkZChFdmFzKiBjYW52YXMpCiAgKi8KIEVpbmFfQm9vbCBld2tfZnJhbWVfaW5pdChFdmFz
X09iamVjdCogZXdrRnJhbWUsIEV2YXNfT2JqZWN0KiB2aWV3LCBXZWJDb3JlOjpGcmFtZSogZnJh
bWUpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5B
X0ZBTFNFKTsKLSAgICBpZiAoIXNkLT5mcmFtZSkgewotICAgICAgICBXZWJDb3JlOjpGcmFtZUxv
YWRlckNsaWVudEVmbCogZmxjID0gX2V3a19mcmFtZV9sb2FkZXJfZWZsX2dldChmcmFtZSk7Ci0g
ICAgICAgIGZsYy0+c2V0V2ViRnJhbWUoZXdrRnJhbWUpOwotICAgICAgICBzZC0+ZnJhbWUgPSBm
cmFtZTsKLSAgICAgICAgc2QtPnZpZXcgPSB2aWV3OworICAgIEVXS19GUkFNRV9TRF9HRVRfT1Jf
UkVUVVJOKGV3a0ZyYW1lLCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIGlmICghc21hcnRE
YXRhLT5mcmFtZSkgeworICAgICAgICBXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEVmbCogZnJh
bWVMb2FkZXJDbGllbnQgPSBfZXdrX2ZyYW1lX2xvYWRlcl9lZmxfZ2V0KGZyYW1lKTsKKyAgICAg
ICAgZnJhbWVMb2FkZXJDbGllbnQtPnNldFdlYkZyYW1lKGV3a0ZyYW1lKTsKKyAgICAgICAgc21h
cnREYXRhLT5mcmFtZSA9IGZyYW1lOworICAgICAgICBzbWFydERhdGEtPnZpZXcgPSB2aWV3Owog
ICAgICAgICBmcmFtZS0+aW5pdCgpOwogICAgICAgICByZXR1cm4gRUlOQV9UUlVFOwogICAgIH0K
IAogICAgIEVSUigiZnJhbWUgJXAgYWxyZWFkeSBzZXQgZm9yICVwLCBpZ25vcmVkIG5ldyAlcCIs
Ci0gICAgICAgIHNkLT5mcmFtZSwgZXdrRnJhbWUsIGZyYW1lKTsKKyAgICAgICAgc21hcnREYXRh
LT5mcmFtZSwgZXdrRnJhbWUsIGZyYW1lKTsKICAgICByZXR1cm4gRUlOQV9GQUxTRTsKIH0KIApA
QCAtMTA5Nyw0NCArMTA5Nyw0NCBAQCBFaW5hX0Jvb2wgZXdrX2ZyYW1lX2luaXQoRXZhc19PYmpl
Y3QqIGV3a0ZyYW1lLCBFdmFzX09iamVjdCogdmlldywgV2ViQ29yZTo6RnJhbQogICovCiBFaW5h
X0Jvb2wgZXdrX2ZyYW1lX2NoaWxkX2FkZChFdmFzX09iamVjdCogZXdrRnJhbWUsIFdURjo6UGFz
c1JlZlB0cjxXZWJDb3JlOjpGcmFtZT4gY2hpbGQsIGNvbnN0IFdURjo6U3RyaW5nJiBuYW1lLCBj
b25zdCBXZWJDb3JlOjpLVVJMJiB1cmwsIGNvbnN0IFdURjo6U3RyaW5nJiByZWZlcnJlcikKIHsK
LSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIDApOwotICAgIGNo
YXIgYnVmWzI1Nl07CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNt
YXJ0RGF0YSwgMCk7CisgICAgY2hhciBidWZmZXJbMjU2XTsKICAgICBFdmFzX09iamVjdCogZnJh
bWU7Ci0gICAgV2ViQ29yZTo6RnJhbWUqIGNmOworICAgIFdlYkNvcmU6OkZyYW1lKiBjb3JlRnJh
bWU7CiAKLSAgICBmcmFtZSA9IGV3a19mcmFtZV9hZGQoc2QtPmJhc2UuZXZhcyk7CisgICAgZnJh
bWUgPSBld2tfZnJhbWVfYWRkKHNtYXJ0RGF0YS0+YmFzZS5ldmFzKTsKICAgICBpZiAoIWZyYW1l
KSB7CiAgICAgICAgIEVSUigiQ291bGQgbm90IGNyZWF0ZSBld2tfZnJhbWUgb2JqZWN0LiIpOwog
ICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKICAgICB9CiAKLSAgICBjZiA9IGNoaWxkLmdldCgp
OwotICAgIGlmIChjZi0+dHJlZSgpKQotICAgICAgICBjZi0+dHJlZSgpLT5zZXROYW1lKG5hbWUp
OworICAgIGNvcmVGcmFtZSA9IGNoaWxkLmdldCgpOworICAgIGlmIChjb3JlRnJhbWUtPnRyZWUo
KSkKKyAgICAgICAgY29yZUZyYW1lLT50cmVlKCktPnNldE5hbWUobmFtZSk7CiAgICAgZWxzZQog
ICAgICAgICBFUlIoIm5vIHRyZWUgZm9yIGNoaWxkIG9iamVjdCIpOwotICAgIHNkLT5mcmFtZS0+
dHJlZSgpLT5hcHBlbmRDaGlsZChjaGlsZCk7CisgICAgc21hcnREYXRhLT5mcmFtZS0+dHJlZSgp
LT5hcHBlbmRDaGlsZChjaGlsZCk7CiAKLSAgICBpZiAoIWV3a19mcmFtZV9pbml0KGZyYW1lLCBz
ZC0+dmlldywgY2YpKSB7CisgICAgaWYgKCFld2tfZnJhbWVfaW5pdChmcmFtZSwgc21hcnREYXRh
LT52aWV3LCBjb3JlRnJhbWUpKSB7CiAgICAgICAgIGV2YXNfb2JqZWN0X2RlbChmcmFtZSk7CiAg
ICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwogICAgIH0KLSAgICBzbnByaW50ZihidWYsIHNpemVv
ZihidWYpLCAiRVdLX0ZyYW1lOmNoaWxkLyVzIiwgbmFtZS51dGY4KCkuZGF0YSgpKTsKLSAgICBl
dmFzX29iamVjdF9uYW1lX3NldChmcmFtZSwgYnVmKTsKKyAgICBzbnByaW50ZihidWZmZXIsIHNp
emVvZihidWZmZXIpLCAiRVdLX0ZyYW1lOmNoaWxkLyVzIiwgbmFtZS51dGY4KCkuZGF0YSgpKTsK
KyAgICBldmFzX29iamVjdF9uYW1lX3NldChmcmFtZSwgYnVmZmVyKTsKICAgICBldmFzX29iamVj
dF9zbWFydF9tZW1iZXJfYWRkKGZyYW1lLCBld2tGcmFtZSk7CiAgICAgZXZhc19vYmplY3Rfc2hv
dyhmcmFtZSk7CiAKICAgICAvLyBUaGUgY3JlYXRpb24gb2YgdGhlIGZyYW1lIG1heSBoYXZlIHJ1
biBhcmJpdHJhcnkgSmF2YVNjcmlwdCB0aGF0IHJlbW92ZWQgaXQgZnJvbSB0aGUgcGFnZSBhbHJl
YWR5LgotICAgIGlmICghY2YtPnBhZ2UoKSkgeworICAgIGlmICghY29yZUZyYW1lLT5wYWdlKCkp
IHsKICAgICAgICAgZXZhc19vYmplY3RfZGVsKGZyYW1lKTsKICAgICAgICAgcmV0dXJuIEVJTkFf
VFJVRTsKICAgICB9CiAKLSAgICBzZC0+ZnJhbWUtPmxvYWRlcigpLT5sb2FkVVJMSW50b0NoaWxk
RnJhbWUodXJsLCByZWZlcnJlciwgY2YpOworICAgIHNtYXJ0RGF0YS0+ZnJhbWUtPmxvYWRlcigp
LT5sb2FkVVJMSW50b0NoaWxkRnJhbWUodXJsLCByZWZlcnJlciwgY29yZUZyYW1lKTsKIAogICAg
IC8vIFRoZSBmcmFtZSdzIG9ubG9hZCBoYW5kbGVyIG1heSBoYXZlIHJlbW92ZWQgaXQgZnJvbSB0
aGUgZG9jdW1lbnQuCiAgICAgLy8gU2VlIGZhc3QvZG9tL251bGwtcGFnZS1zaG93LW1vZGFsLWRp
YWxvZy1jcmFzaC5odG1sIGZvciBhbiBleGFtcGxlLgotICAgIGlmICghY2YtPnRyZWUoKS0+cGFy
ZW50KCkpIHsKKyAgICBpZiAoIWNvcmVGcmFtZS0+dHJlZSgpLT5wYXJlbnQoKSkgewogICAgICAg
ICBldmFzX29iamVjdF9kZWwoZnJhbWUpOwogICAgICAgICByZXR1cm4gRUlOQV9UUlVFOwogICAg
IH0KQEAgLTExNDcsMTcgKzExNDcsMTcgQEAgRWluYV9Cb29sIGV3a19mcmFtZV9jaGlsZF9hZGQo
RXZhc19PYmplY3QqIGV3a0ZyYW1lLCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6RnIKICAqIEBp
bnRlcm5hbAogICogQ2hhbmdlIHRoZSBld2sgdmlldyB0aGlzIGZyYW1lIGlzIGFzc29jaWF0ZWQg
d2l0aC4KICAqCi0gKiBAcGFyYW0gbyBUaGUgZXdrIGZyYW1lIHRvIGFjdCB1cG9uLgorICogQHBh
cmFtIGV3a0ZyYW1lIFRoZSBld2sgZnJhbWUgdG8gYWN0IHVwb24uCiAgKiBAcGFyYW0gbmV3UGFy
ZW50IFRoZSBuZXcgdmlldyB0aGF0IHdpbGwgYmUgc2V0IGFzIHRoZSBwYXJlbnQgb2YgdGhlIGZy
YW1lLgogICovCiB2b2lkIGV3a19mcmFtZV92aWV3X3NldChFdmFzX09iamVjdCogZXdrRnJhbWUs
IEV2YXNfT2JqZWN0KiBuZXdQYXJlbnQpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRV
Uk4oZXdrRnJhbWUsIHNkKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFt
ZSwgc21hcnREYXRhKTsKIAogICAgIGV2YXNfb2JqZWN0X3NtYXJ0X21lbWJlcl9kZWwoZXdrRnJh
bWUpOwogICAgIGV2YXNfb2JqZWN0X3NtYXJ0X21lbWJlcl9hZGQoZXdrRnJhbWUsIG5ld1BhcmVu
dCk7CiAKLSAgICBzZC0+dmlldyA9IG5ld1BhcmVudDsKKyAgICBzbWFydERhdGEtPnZpZXcgPSBu
ZXdQYXJlbnQ7CiB9CiAKIC8qKgpAQCAtMTE2Nyw4ICsxMTY3LDggQEAgdm9pZCBld2tfZnJhbWVf
dmlld19zZXQoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBFdmFzX09iamVjdCogbmV3UGFyZW50KQog
dm9pZCBld2tfZnJhbWVfY29yZV9nb25lKEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsKICAgICBE
QkcoImV3a0ZyYW1lPSVwIiwgZXdrRnJhbWUpOwotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVU
VVJOKGV3a0ZyYW1lLCBzZCk7Ci0gICAgc2QtPmZyYW1lID0gMDsKKyAgICBFV0tfRlJBTUVfU0Rf
R0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRhKTsKKyAgICBzbWFydERhdGEtPmZyYW1l
ID0gMDsKIH0KIAogLyoqCkBAIC0xMTc2LDcgKzExNzYsNyBAQCB2b2lkIGV3a19mcmFtZV9jb3Jl
X2dvbmUoRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogICogUmVwb3J0cyBhIHJlc291cmNlIHdpbGwg
YmUgcmVxdWVzdGVkLiBVc2VyIG1heSBvdmVycmlkZSBiZWhhdmlvciBvZiB3ZWJraXQgYnkKICAq
IGNoYW5naW5nIHZhbHVlcyBpbiBAcGFyYW0gcmVxdWVzdC4KICAqCi0gKiBAcGFyYW0gbyBGcmFt
ZS4KKyAqIEBwYXJhbSBld2tGcmFtZSBGcmFtZS4KICAqIEBwYXJhbSByZXF1ZXN0IFJlcXVlc3Qg
ZGV0YWlscyB0aGF0IHVzZXIgbWF5IG92ZXJyaWRlLiBXaGVuZXZlciB2YWx1ZXMgb24KICAqIHRo
aXMgc3RydWN0IGNoYW5nZXMsIGl0IG11c3QgYmUgcHJvcGVybHkgbWFsbG9jJ2QgYXMgaXQgd2ls
bCBiZSBmcmVlZAogICogYWZ0ZXJ3YXJkcy4KQEAgLTExOTIsNyArMTE5Miw3IEBAIHZvaWQgZXdr
X2ZyYW1lX3JlcXVlc3Rfd2lsbF9zZW5kKEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgRXdrX0ZyYW1l
X1Jlc291cmNlX1JlcXVlCiAgKiBAaW50ZXJuYWwKICAqIFJlcG9ydHMgdGhhdCB0aGVyZSdzIGEg
bmV3IHJlc291cmNlLgogICoKLSAqIEBwYXJhbSBvIEZyYW1lLgorICogQHBhcmFtIGV3a0ZyYW1l
IEZyYW1lLgogICogQHBhcmFtIHJlcXVlc3QgTmV3IHJlcXVlc3QgZGV0YWlscy4gTm8gY2hhbmdl
cyBhcmUgYWxsb3dlZCB0byBmaWVsZHMuCiAgKgogICogRW1pdHMgc2lnbmFsOiAicmVzb3VyY2Us
cmVxdWVzdCxuZXciCkBAIC0xMjA2LDcgKzEyMDYsNyBAQCB2b2lkIGV3a19mcmFtZV9yZXF1ZXN0
X2Fzc2lnbl9pZGVudGlmaWVyKEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgY29uc3QgRXdrX0ZyYW1l
XwogICogQGludGVybmFsCiAgKiBSZXBvcnRzIHRoYXQgZmlyc3QgbmF2aWdhdGlvbiBvY2N1cnJl
ZAogICoKLSAqIEBwYXJhbSBvIEZyYW1lLgorICogQHBhcmFtIGV3a0ZyYW1lIEZyYW1lLgogICoK
ICAqIEVtaXRzIHNpZ25hbDogIm5hdmlnYXRpb24sZmlyc3QiCiAgKi8KQEAgLTEyMTksNyArMTIx
OSw3IEBAIHZvaWQgZXdrX2ZyYW1lX2RpZF9wZXJmb3JtX2ZpcnN0X25hdmlnYXRpb24oRXZhc19P
YmplY3QqIGV3a0ZyYW1lKQogICogQGludGVybmFsCiAgKiBSZXBvcnRzIGZyYW1lIHdpbGwgYmUg
c2F2ZWQgdG8gY3VycmVudCBzdGF0ZQogICoKLSAqIEBwYXJhbSBvIEZyYW1lLgorICogQHBhcmFt
IGV3a0ZyYW1lIEZyYW1lLgogICogQHBhcmFtIGl0ZW0gSGlzdG9yeSBpdGVtIHRvIHNhdmUgZGV0
YWlscyB0by4KICAqCiAgKiBFbWl0cyBzaWduYWw6ICJzdGF0ZSxzYXZlIgpAQCAtMTIzNywyMiAr
MTIzNywyMiBAQCB2b2lkIGV3a19mcmFtZV92aWV3X3N0YXRlX3NhdmUoRXZhc19PYmplY3QqIGV3
a0ZyYW1lLCBXZWJDb3JlOjpIaXN0b3J5SXRlbSogaXRlbQogICovCiB2b2lkIGV3a19mcmFtZV9s
b2FkX3N0YXJ0ZWQoRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewotICAgIEV2YXNfT2JqZWN0KiBt
YWluX2ZyYW1lOworICAgIEV2YXNfT2JqZWN0KiBtYWluRnJhbWU7CiAgICAgREJHKCJld2tGcmFt
ZT0lcCIsIGV3a0ZyYW1lKTsKICAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKGV3
a0ZyYW1lLCAibG9hZCxzdGFydGVkIiwgMCk7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRV
Uk4oZXdrRnJhbWUsIHNkKTsKLSAgICBld2tfdmlld19sb2FkX3N0YXJ0ZWQoc2QtPnZpZXcpOwor
ICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzbWFydERhdGEpOworICAg
IGV3a192aWV3X2xvYWRfc3RhcnRlZChzbWFydERhdGEtPnZpZXcpOwogCi0gICAgbWFpbl9mcmFt
ZSA9IGV3a192aWV3X2ZyYW1lX21haW5fZ2V0KHNkLT52aWV3KTsKLSAgICBpZiAobWFpbl9mcmFt
ZSA9PSBld2tGcmFtZSkKLSAgICAgICAgZXdrX3ZpZXdfZnJhbWVfbWFpbl9sb2FkX3N0YXJ0ZWQo
c2QtPnZpZXcpOworICAgIG1haW5GcmFtZSA9IGV3a192aWV3X2ZyYW1lX21haW5fZ2V0KHNtYXJ0
RGF0YS0+dmlldyk7CisgICAgaWYgKG1haW5GcmFtZSA9PSBld2tGcmFtZSkKKyAgICAgICAgZXdr
X3ZpZXdfZnJhbWVfbWFpbl9sb2FkX3N0YXJ0ZWQoc21hcnREYXRhLT52aWV3KTsKIH0KIAogLyoq
CiAgKiBAaW50ZXJuYWwKICAqIFJlcG9ydHMgdGhlIGZyYW1lIHN0YXJ0ZWQgcHJvdmlzaW9uYWwg
bG9hZC4KICAqCi0gKiBAcGFyYW0gbyBGcmFtZS4KKyAqIEBwYXJhbSBld2tGcmFtZSBGcmFtZS4K
ICAqCiAgKiBFbWl0cyBzaWduYWw6ICJsb2FkLHByb3Zpc2lvbmFsIiB3aXRoIG5vIHBhcmFtZXRl
cnMuCiAgKi8KQEAgLTEyNjUsNyArMTI2NSw3IEBAIHZvaWQgZXdrX2ZyYW1lX2xvYWRfcHJvdmlz
aW9uYWwoRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogICogQGludGVybmFsCiAgKiBSZXBvcnRzIHRo
ZSBmcmFtZSBmaW5pc2hlZCBmaXJzdCBsYXlvdXQuCiAgKgotICogQHBhcmFtIG8gRnJhbWUuCisg
KiBAcGFyYW0gZXdrRnJhbWUgRnJhbWUuCiAgKgogICogRW1pdHMgc2lnbmFsOiAibG9hZCxmaXJz
dGxheW91dCxmaW5pc2hlZCIgd2l0aCBubyBwYXJhbWV0ZXJzLgogICovCkBAIC0xMjc4LDcgKzEy
NzgsNyBAQCB2b2lkIGV3a19mcmFtZV9sb2FkX2ZpcnN0bGF5b3V0X2ZpbmlzaGVkKEV2YXNfT2Jq
ZWN0KiBld2tGcmFtZSkKICAqIEBpbnRlcm5hbAogICogUmVwb3J0cyB0aGUgZnJhbWUgZmluaXNo
ZWQgZmlyc3Qgbm9uIGVtcHR5IGxheW91dC4KICAqCi0gKiBAcGFyYW0gbyBGcmFtZS4KKyAqIEBw
YXJhbSBld2tGcmFtZSBGcmFtZS4KICAqCiAgKiBFbWl0cyBzaWduYWw6ICJsb2FkLG5vbmVtcHR5
bGF5b3V0LGZpbmlzaGVkIiB3aXRoIG5vIHBhcmFtZXRlcnMuCiAgKi8KQEAgLTEyOTEsNyArMTI5
MSw3IEBAIHZvaWQgZXdrX2ZyYW1lX2xvYWRfZmlyc3RsYXlvdXRfbm9uZW1wdHlfZmluaXNoZWQo
RXZhc19PYmplY3QqIGV3a0ZyYW1lKQogICogQGludGVybmFsCiAgKiBSZXBvcnRzIHRoZSBsb2Fk
aW5nIG9mIGEgZG9jdW1lbnQgaGFzIGZpbmlzaGVkIG9uIGZyYW1lLgogICoKLSAqIEBwYXJhbSBv
IEZyYW1lLgorICogQHBhcmFtIGV3a0ZyYW1lIEZyYW1lLgogICoKICAqIEVtaXRzIHNpZ25hbDog
ImxvYWQsZG9jdW1lbnQsZmluaXNoZWQiIHdpdGggbm8gcGFyYW1ldGVycy4KICAqLwpAQCAtMTMx
NCw3ICsxMzE0LDcgQEAgdm9pZCBld2tfZnJhbWVfbG9hZF9kb2N1bWVudF9maW5pc2hlZChFdmFz
X09iamVjdCogZXdrRnJhbWUpCiAgKi8KIHZvaWQgZXdrX2ZyYW1lX2xvYWRfZmluaXNoZWQoRXZh
c19PYmplY3QqIGV3a0ZyYW1lLCBjb25zdCBjaGFyKiBlcnJvckRvbWFpbiwgaW50IGVycm9yQ29k
ZSwgRWluYV9Cb29sIGlzQ2FuY2VsbGF0aW9uLCBjb25zdCBjaGFyKiBlcnJvckRlc2NyaXB0aW9u
LCBjb25zdCBjaGFyKiBmYWlsaW5nVXJsKQogewotICAgIEV3a19GcmFtZV9Mb2FkX0Vycm9yIGJ1
ZiwgKmVycm9yOworICAgIEV3a19GcmFtZV9Mb2FkX0Vycm9yIGJ1ZmZlciwgKmVycm9yOwogICAg
IGlmICghZXJyb3JEb21haW4pIHsKICAgICAgICAgREJHKCJld2tGcmFtZT0lcCwgc3VjY2Vzcy4i
LCBld2tGcmFtZSk7CiAgICAgICAgIGVycm9yID0gMDsKQEAgLTEzMjMsMTcgKzEzMjMsMTcgQEAg
dm9pZCBld2tfZnJhbWVfbG9hZF9maW5pc2hlZChFdmFzX09iamVjdCogZXdrRnJhbWUsIGNvbnN0
IGNoYXIqIGVycm9yRG9tYWluLCBpbnQKICAgICAgICAgICAgIGV3a0ZyYW1lLCBlcnJvckRvbWFp
biwgZXJyb3JDb2RlLCBpc0NhbmNlbGxhdGlvbiwKICAgICAgICAgICAgIGVycm9yRGVzY3JpcHRp
b24sIGZhaWxpbmdVcmwpOwogCi0gICAgICAgIGJ1Zi5kb21haW4gPSBlcnJvckRvbWFpbjsKLSAg
ICAgICAgYnVmLmNvZGUgPSBlcnJvckNvZGU7Ci0gICAgICAgIGJ1Zi5pc19jYW5jZWxsYXRpb24g
PSBpc0NhbmNlbGxhdGlvbjsKLSAgICAgICAgYnVmLmRlc2NyaXB0aW9uID0gZXJyb3JEZXNjcmlw
dGlvbjsKLSAgICAgICAgYnVmLmZhaWxpbmdfdXJsID0gZmFpbGluZ1VybDsKLSAgICAgICAgYnVm
LmZyYW1lID0gZXdrRnJhbWU7Ci0gICAgICAgIGVycm9yID0gJmJ1ZjsKKyAgICAgICAgYnVmZmVy
LmRvbWFpbiA9IGVycm9yRG9tYWluOworICAgICAgICBidWZmZXIuY29kZSA9IGVycm9yQ29kZTsK
KyAgICAgICAgYnVmZmVyLmlzX2NhbmNlbGxhdGlvbiA9IGlzQ2FuY2VsbGF0aW9uOworICAgICAg
ICBidWZmZXIuZGVzY3JpcHRpb24gPSBlcnJvckRlc2NyaXB0aW9uOworICAgICAgICBidWZmZXIu
ZmFpbGluZ191cmwgPSBmYWlsaW5nVXJsOworICAgICAgICBidWZmZXIuZnJhbWUgPSBld2tGcmFt
ZTsKKyAgICAgICAgZXJyb3IgPSAmYnVmZmVyOwogICAgIH0KICAgICBldmFzX29iamVjdF9zbWFy
dF9jYWxsYmFja19jYWxsKGV3a0ZyYW1lLCAibG9hZCxmaW5pc2hlZCIsIGVycm9yKTsKLSAgICBF
V0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QpOwotICAgIGV3a192aWV3X2xv
YWRfZmluaXNoZWQoc2QtPnZpZXcsIGVycm9yKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JF
VFVSTihld2tGcmFtZSwgc21hcnREYXRhKTsKKyAgICBld2tfdmlld19sb2FkX2ZpbmlzaGVkKHNt
YXJ0RGF0YS0+dmlldywgZXJyb3IpOwogfQogCiAvKioKQEAgLTEzNzEsMTYgKzEzNzEsMTYgQEAg
dm9pZCBld2tfZnJhbWVfbG9hZF9lcnJvcihFdmFzX09iamVjdCogZXdrRnJhbWUsIGNvbnN0IGNo
YXIqIGVycm9yRG9tYWluLCBpbnQgZXIKICAqLwogdm9pZCBld2tfZnJhbWVfbG9hZF9wcm9ncmVz
c19jaGFuZ2VkKEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VU
X09SX1JFVFVSTihld2tGcmFtZSwgc2QpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJO
KHNkLT5mcmFtZSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNt
YXJ0RGF0YSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRhLT5mcmFt
ZSk7CiAKICAgICAvLyBUT0RPOiB0aGlzIGlzIHBlciBwYWdlLCB0aGVyZSBzaG91bGQgYmUgYSB3
YXkgdG8gaGF2ZSBwZXItZnJhbWUuCi0gICAgZG91YmxlIHByb2dyZXNzID0gc2QtPmZyYW1lLT5w
YWdlKCktPnByb2dyZXNzKCktPmVzdGltYXRlZFByb2dyZXNzKCk7CisgICAgZG91YmxlIHByb2dy
ZXNzID0gc21hcnREYXRhLT5mcmFtZS0+cGFnZSgpLT5wcm9ncmVzcygpLT5lc3RpbWF0ZWRQcm9n
cmVzcygpOwogCiAgICAgREJHKCJld2tGcmFtZT0lcCAocD0lMC4zZikiLCBld2tGcmFtZSwgcHJv
Z3Jlc3MpOwogCiAgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChld2tGcmFtZSwg
ImxvYWQscHJvZ3Jlc3MiLCAmcHJvZ3Jlc3MpOwotICAgIGV3a192aWV3X2xvYWRfcHJvZ3Jlc3Nf
Y2hhbmdlZChzZC0+dmlldyk7CisgICAgZXdrX3ZpZXdfbG9hZF9wcm9ncmVzc19jaGFuZ2VkKHNt
YXJ0RGF0YS0+dmlldyk7CiB9CiAKIApAQCAtMTQxNyw1MSArMTQxNyw1MSBAQCB2b2lkIGV3a19m
cmFtZV90aXRsZV9zZXQoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBjb25zdCBjaGFyKiB0aXRsZSkK
IHZvaWQgZXdrX2ZyYW1lX3ZpZXdfY3JlYXRlX2Zvcl92aWV3KEV2YXNfT2JqZWN0KiBld2tGcmFt
ZSwgRXZhc19PYmplY3QqIHZpZXcpCiB7CiAgICAgREJHKCJld2tGcmFtZT0lcCwgdmlldz0lcCIs
IGV3a0ZyYW1lLCB2aWV3KTsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFt
ZSwgc2QpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5mcmFtZSk7Ci0gICAg
RXZhc19Db29yZCB3LCBoOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1l
LCBzbWFydERhdGEpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+
ZnJhbWUpOworICAgIEV2YXNfQ29vcmQgd2lkdGgsIGhlaWdodDsKIAotICAgIGV2YXNfb2JqZWN0
X2dlb21ldHJ5X2dldCh2aWV3LCAwLCAwLCAmdywgJmgpOworICAgIGV2YXNfb2JqZWN0X2dlb21l
dHJ5X2dldCh2aWV3LCAwLCAwLCAmd2lkdGgsICZoZWlnaHQpOwogCi0gICAgV2ViQ29yZTo6SW50
U2l6ZSBzaXplKHcsIGgpOwotICAgIGludCByLCBnLCBiLCBhOwotICAgIFdlYkNvcmU6OkNvbG9y
IGJnOworICAgIFdlYkNvcmU6OkludFNpemUgc2l6ZSh3aWR0aCwgaGVpZ2h0KTsKKyAgICBpbnQg
cmVkLCBncmVlbiwgYmx1ZSwgYWxwaGE7CisgICAgV2ViQ29yZTo6Q29sb3IgYmFja2dyb3VuZDsK
IAotICAgIGV3a192aWV3X2JnX2NvbG9yX2dldCh2aWV3LCAmciwgJmcsICZiLCAmYSk7Ci0gICAg
aWYgKCFhKQotICAgICAgICBiZyA9IFdlYkNvcmU6OkNvbG9yKDAsIDAsIDAsIDApOwotICAgIGVs
c2UgaWYgKGEgPT0gMjU1KQotICAgICAgICBiZyA9IFdlYkNvcmU6OkNvbG9yKHIsIGcsIGIsIGEp
OworICAgIGV3a192aWV3X2JnX2NvbG9yX2dldCh2aWV3LCAmcmVkLCAmZ3JlZW4sICZibHVlLCAm
YWxwaGEpOworICAgIGlmICghYWxwaGEpCisgICAgICAgIGJhY2tncm91bmQgPSBXZWJDb3JlOjpD
b2xvcigwLCAwLCAwLCAwKTsKKyAgICBlbHNlIGlmIChhbHBoYSA9PSAyNTUpCisgICAgICAgIGJh
Y2tncm91bmQgPSBXZWJDb3JlOjpDb2xvcihyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7CiAgICAg
ZWxzZQotICAgICAgICBiZyA9IFdlYkNvcmU6OkNvbG9yKHIgKiAyNTUgLyBhLCBnICogMjU1IC8g
YSwgYiAqIDI1NSAvIGEsIGEpOworICAgICAgICBiYWNrZ3JvdW5kID0gV2ViQ29yZTo6Q29sb3Io
cmVkICogMjU1IC8gYWxwaGEsIGdyZWVuICogMjU1IC8gYWxwaGEsIGJsdWUgKiAyNTUgLyBhbHBo
YSwgYWxwaGEpOwogCi0gICAgc2QtPmZyYW1lLT5jcmVhdGVWaWV3KHNpemUsIGJnLCAhYSwgV2Vi
Q29yZTo6SW50U2l6ZSgpLCBmYWxzZSk7Ci0gICAgaWYgKCFzZC0+ZnJhbWUtPnZpZXcoKSkKKyAg
ICBzbWFydERhdGEtPmZyYW1lLT5jcmVhdGVWaWV3KHNpemUsIGJhY2tncm91bmQsICFhbHBoYSwg
V2ViQ29yZTo6SW50U2l6ZSgpLCBmYWxzZSk7CisgICAgaWYgKCFzbWFydERhdGEtPmZyYW1lLT52
aWV3KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGNvbnN0IGNoYXIqIHRoZW1lID0gZXdrX3Zp
ZXdfdGhlbWVfZ2V0KHZpZXcpOwotICAgIHNkLT5mcmFtZS0+dmlldygpLT5zZXRFZGplVGhlbWUo
dGhlbWUpOwotICAgIHNkLT5mcmFtZS0+dmlldygpLT5zZXRFdmFzT2JqZWN0KGV3a0ZyYW1lKTsK
KyAgICBzbWFydERhdGEtPmZyYW1lLT52aWV3KCktPnNldEVkamVUaGVtZSh0aGVtZSk7CisgICAg
c21hcnREYXRhLT5mcmFtZS0+dmlldygpLT5zZXRFdmFzT2JqZWN0KGV3a0ZyYW1lKTsKIH0KIAog
c3NpemVfdCBld2tfZnJhbWVfc291cmNlX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrRnJhbWUs
IGNoYXIqKiBmcmFtZVNvdXJjZSkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihl
d2tGcmFtZSwgc2QsIC0xKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2Qt
PmZyYW1lLCAtMSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFt
ZS0+ZG9jdW1lbnQoKSwgLTEpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0Zy
YW1lLCBzbWFydERhdGEsIC0xKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwo
c21hcnREYXRhLT5mcmFtZSwgLTEpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZB
TChzbWFydERhdGEtPmZyYW1lLT5kb2N1bWVudCgpLCAtMSk7CiAgICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk5fVkFMKGZyYW1lU291cmNlLCAtMSk7CiAKICAgICBXVEY6OlN0cmluZyBzb3Vy
Y2U7CiAgICAgKmZyYW1lU291cmNlID0gMDsgLy8gU2F2ZXMgMCB0byBwb2ludGVyIHVudGlsIGl0
J3Mgbm90IGFsbG9jYXRlZC4KIAotICAgIGlmICghc2QtPmZyYW1lLT5kb2N1bWVudCgpLT5pc0hU
TUxEb2N1bWVudCgpKSB7CisgICAgaWYgKCFzbWFydERhdGEtPmZyYW1lLT5kb2N1bWVudCgpLT5p
c0hUTUxEb2N1bWVudCgpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBTdXBwb3J0IG90aGVycyBkb2N1
bWVudHMuCiAgICAgICAgIFdSTigiT25seSBIVE1MIGRvY3VtZW50cyBhcmUgc3VwcG9ydGVkIik7
CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKICAgICAvLyBMb29rIGZvciA8aHRtbD4gdGFn
LiBJZiBpdCBleGlzdHMsIHRoZSBub2RlIGNvbnRhdGlucyBhbGwgZG9jdW1lbnQncyBzb3VyY2Uu
Ci0gICAgV2ViQ29yZTo6Tm9kZSogZG9jdW1lbnROb2RlID0gc2QtPmZyYW1lLT5kb2N1bWVudCgp
LT5kb2N1bWVudEVsZW1lbnQoKTsKKyAgICBXZWJDb3JlOjpOb2RlKiBkb2N1bWVudE5vZGUgPSBz
bWFydERhdGEtPmZyYW1lLT5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKTsKICAgICBpZiAo
ZG9jdW1lbnROb2RlKQogICAgICAgICBmb3IgKFdlYkNvcmU6Ok5vZGUqIG5vZGUgPSBkb2N1bWVu
dE5vZGUtPmZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPnBhcmVudEVsZW1lbnQoKSkg
ewogICAgICAgICAgICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUoV2ViQ29yZTo6SFRNTE5hbWVzOjpo
dG1sVGFnKSkgewpAQCAtMTQ3NCwzNiArMTQ3NCwzNiBAQCBzc2l6ZV90IGV3a19mcmFtZV9zb3Vy
Y2VfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgY2hhcioqIGZyYW1lU291cmNlKQog
CiAgICAgLy8gVHJ5IHRvIGdldCA8aGVhZD4gYW5kIDxib2R5PiB0YWdzIGlmIDxodG1sPiB0YWcg
d2FzIG5vdCBmb3VuZC4KICAgICBpZiAoc291cmNlLmlzRW1wdHkoKSkgewotICAgICAgICBpZiAo
c2QtPmZyYW1lLT5kb2N1bWVudCgpLT5oZWFkKCkpCi0gICAgICAgICAgICBzb3VyY2UgPSBzZC0+
ZnJhbWUtPmRvY3VtZW50KCktPmhlYWQoKS0+b3V0ZXJIVE1MKCk7CisgICAgICAgIGlmIChzbWFy
dERhdGEtPmZyYW1lLT5kb2N1bWVudCgpLT5oZWFkKCkpCisgICAgICAgICAgICBzb3VyY2UgPSBz
bWFydERhdGEtPmZyYW1lLT5kb2N1bWVudCgpLT5oZWFkKCktPm91dGVySFRNTCgpOwogCi0gICAg
ICAgIGlmIChzZC0+ZnJhbWUtPmRvY3VtZW50KCktPmJvZHkoKSkKLSAgICAgICAgICAgIHNvdXJj
ZSArPSBzZC0+ZnJhbWUtPmRvY3VtZW50KCktPmJvZHkoKS0+b3V0ZXJIVE1MKCk7CisgICAgICAg
IGlmIChzbWFydERhdGEtPmZyYW1lLT5kb2N1bWVudCgpLT5ib2R5KCkpCisgICAgICAgICAgICBz
b3VyY2UgKz0gc21hcnREYXRhLT5mcmFtZS0+ZG9jdW1lbnQoKS0+Ym9keSgpLT5vdXRlckhUTUwo
KTsKICAgICB9CiAKLSAgICBzaXplX3Qgc291cmNlX2xlbmd0aCA9IHN0cmxlbihzb3VyY2UudXRm
OCgpLmRhdGEoKSk7Ci0gICAgKmZyYW1lU291cmNlID0gc3RhdGljX2Nhc3Q8Y2hhcio+KG1hbGxv
Yyhzb3VyY2VfbGVuZ3RoICsgMSkpOworICAgIHNpemVfdCBzb3VyY2VMZW5ndGggPSBzdHJsZW4o
c291cmNlLnV0ZjgoKS5kYXRhKCkpOworICAgICpmcmFtZVNvdXJjZSA9IHN0YXRpY19jYXN0PGNo
YXIqPihtYWxsb2Moc291cmNlTGVuZ3RoICsgMSkpOwogICAgIGlmICghKmZyYW1lU291cmNlKSB7
CiAgICAgICAgIENSSVRJQ0FMKCJDb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5LiIpOwogICAgICAg
ICByZXR1cm4gLTE7CiAgICAgfQogCi0gICAgc3RybmNweSgqZnJhbWVTb3VyY2UsIHNvdXJjZS51
dGY4KCkuZGF0YSgpLCBzb3VyY2VfbGVuZ3RoKTsKLSAgICAoKmZyYW1lU291cmNlKVtzb3VyY2Vf
bGVuZ3RoXSA9ICdcMCc7CisgICAgc3RybmNweSgqZnJhbWVTb3VyY2UsIHNvdXJjZS51dGY4KCku
ZGF0YSgpLCBzb3VyY2VMZW5ndGgpOworICAgICgqZnJhbWVTb3VyY2UpW3NvdXJjZUxlbmd0aF0g
PSAnXDAnOwogCi0gICAgcmV0dXJuIHNvdXJjZV9sZW5ndGg7CisgICAgcmV0dXJuIHNvdXJjZUxl
bmd0aDsKIH0KIAogRWluYV9MaXN0KiBld2tfZnJhbWVfcmVzb3VyY2VzX2xvY2F0aW9uX2dldChj
b25zdCBFdmFzX09iamVjdCogZXdrRnJhbWUpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9S
RVRVUk4oZXdrRnJhbWUsIHNkLCAwKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9W
QUwoc2QtPmZyYW1lLCAwKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2Qt
PmZyYW1lLT5kb2N1bWVudCgpLCAwKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihl
d2tGcmFtZSwgc21hcnREYXRhLCAwKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9W
QUwoc21hcnREYXRhLT5mcmFtZSwgMCk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5f
VkFMKHNtYXJ0RGF0YS0+ZnJhbWUtPmRvY3VtZW50KCksIDApOwogCiAgICAgRWluYV9MaXN0KiBs
aXN0T2ZJbWFnZXNMb2NhdGlvbiA9IDA7CiAKICAgICAvLyBHZXQgc3JjIGF0dGlidXRlIG9mIGlt
YWdlcyBhbmQgc2F2ZXMgdGhlbSB0byB0aGUgRWluYV9MaXN0LgotICAgIFJlZlB0cjxXZWJDb3Jl
OjpIVE1MQ29sbGVjdGlvbj4gaW1hZ2VzID0gc2QtPmZyYW1lLT5kb2N1bWVudCgpLT5pbWFnZXMo
KTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6SFRNTENvbGxlY3Rpb24+IGltYWdlcyA9IHNtYXJ0RGF0
YS0+ZnJhbWUtPmRvY3VtZW50KCktPmltYWdlcygpOwogICAgIGZvciAoc2l6ZV90IGluZGV4ID0g
MDsgaW5kZXggPCBpbWFnZXMtPmxlbmd0aCgpOyArK2luZGV4KSB7CiAgICAgICAgIFdlYkNvcmU6
OkhUTUxJbWFnZUVsZW1lbnQqIGltYWdlRWxlbWVudCA9IHN0YXRpY19jYXN0PFdlYkNvcmU6OkhU
TUxJbWFnZUVsZW1lbnQqPihpbWFnZXMtPml0ZW0oaW5kZXgpKTsKICAgICAgICAgaWYgKCFpbWFn
ZUVsZW1lbnQgfHwgaW1hZ2VFbGVtZW50LT5zcmMoKS5pc051bGwoKSB8fCBpbWFnZUVsZW1lbnQt
PnNyYygpLmlzRW1wdHkoKSkKQEAgLTE1NDAsMTMgKzE1NDAsMTMgQEAgb3V0X29mX21lbW9yeV9o
YW5kbGVyOgogCiBjaGFyKiBld2tfZnJhbWVfcGxhaW5fdGV4dF9nZXQoY29uc3QgRXZhc19PYmpl
Y3QqIGV3a0ZyYW1lKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1l
LCBzZCwgMCk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwg
MCk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSwg
MCk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUs
IDApOwogCi0gICAgaWYgKCFzZC0+ZnJhbWUtPmRvY3VtZW50KCkpCisgICAgaWYgKCFzbWFydERh
dGEtPmZyYW1lLT5kb2N1bWVudCgpKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIFdlYkNvcmU6
OkVsZW1lbnQqIGRvY3VtZW50RWxlbWVudCA9IHNkLT5mcmFtZS0+ZG9jdW1lbnQoKS0+ZG9jdW1l
bnRFbGVtZW50KCk7CisgICAgV2ViQ29yZTo6RWxlbWVudCogZG9jdW1lbnRFbGVtZW50ID0gc21h
cnREYXRhLT5mcmFtZS0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCk7CiAKICAgICBpZiAo
IWRvY3VtZW50RWxlbWVudCkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xNTg1LDkgKzE1ODUsOSBA
QCBFaW5hX0Jvb2wgZXdrX2ZyYW1lX3VyaV9jaGFuZ2VkKEV2YXNfT2JqZWN0KiBld2tGcmFtZSkK
IHZvaWQgZXdrX2ZyYW1lX2ZvcmNlX2xheW91dChFdmFzX09iamVjdCogZXdrRnJhbWUpCiB7CiAg
ICAgREJHKCJld2tGcmFtZT0lcCIsIGV3a0ZyYW1lKTsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09S
X1JFVFVSTihld2tGcmFtZSwgc2QpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNk
LT5mcmFtZSk7Ci0gICAgV2ViQ29yZTo6RnJhbWVWaWV3KiB2aWV3ID0gc2QtPmZyYW1lLT52aWV3
KCk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSk7
CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRhLT5mcmFtZSk7CisgICAg
V2ViQ29yZTo6RnJhbWVWaWV3KiB2aWV3ID0gc21hcnREYXRhLT5mcmFtZS0+dmlldygpOwogICAg
IGlmICh2aWV3KQogICAgICAgICB2aWV3LT5mb3JjZUxheW91dCh0cnVlKTsKIH0KQEAgLTE2MDYs
NyArMTYwNiw3IEBAIFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpXaWRnZXQ+IGV3a19mcmFtZV9w
bHVnaW5fY3JlYXRlKEV2YXNfT2JqZWN0KiBld2tGcmFtZSwKICAqIEBpbnRlcm5hbAogICogUmVw
b3J0cyB0aGF0IGVkaXRvciBjbGllbnQgc2VsZWN0aW9uIHdhcyBjaGFuZ2VkLgogICoKLSAqIEBw
YXJhbSBvIEZyYW1lCisgKiBAcGFyYW0gZXdrRnJhbWUgRnJhbWUKICAqCiAgKiBFbWl0cyBzaWdu
YWw6ICJlZGl0b3JjbGllbnRzZWxlY3Rpb24sY2hhbmdlZCIgd2l0aCBubyBwYXJhbWV0ZXJzLgog
ICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2hpc3RvcnkuY3BwIGIv
U291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19oaXN0b3J5LmNwcAppbmRleCA4MWY2MGM1MDNhYTJh
ZjgyODcxM2I0Yjk4MmMwNjUyZDY2MjY3MmViLi43NTRhOTQyYzQ0ZGExNTc4MDQwZDUyMzU4YTEy
NzExNzc4YjEzNTBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2hpc3Rv
cnkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfaGlzdG9yeS5jcHAKQEAgLTU3
LDkgKzU3LDkgQEAgc3RydWN0IF9Fd2tfSGlzdG9yeV9JdGVtIHsKICAgICBXZWJDb3JlOjpIaXN0
b3J5SXRlbSogY29yZTsKIAogICAgIGNvbnN0IGNoYXIqIHRpdGxlOwotICAgIGNvbnN0IGNoYXIq
IGFsdGVybmF0ZV90aXRsZTsKKyAgICBjb25zdCBjaGFyKiBhbHRlcm5hdGVUaXRsZTsKICAgICBj
b25zdCBjaGFyKiB1cmk7Ci0gICAgY29uc3QgY2hhciogb3JpZ2luYWxfdXJpOworICAgIGNvbnN0
IGNoYXIqIG9yaWdpbmFsVXJpOwogfTsKIAogI2RlZmluZSBFV0tfSElTVE9SWV9JVEVNX0NPUkVf
R0VUX09SX1JFVFVSTihpdGVtLCBjb3JlXywgLi4uKSBcCkBAIC03NSwxNyArNzUsMTcgQEAgc3Ry
dWN0IF9Fd2tfSGlzdG9yeV9JdGVtIHsKIAogc3RhdGljIGlubGluZSBFaW5hX0xpc3QqIF9ld2tf
aGlzdG9yeV9pdGVtX2xpc3RfZ2V0KGNvbnN0IFdlYkNvcmU6Okhpc3RvcnlJdGVtVmVjdG9yJiBj
b3JlSXRlbXMpCiB7Ci0gICAgRWluYV9MaXN0KiByZXQgPSAwOwotICAgIHVuc2lnbmVkIGludCBp
LCBzaXplOworICAgIEVpbmFfTGlzdCogcmVzdWx0ID0gMDsKKyAgICB1bnNpZ25lZCBpbnQgc2l6
ZTsKIAogICAgIHNpemUgPSBjb3JlSXRlbXMuc2l6ZSgpOwotICAgIGZvciAoaSA9IDA7IGkgPCBz
aXplOyBpKyspIHsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IHNpemU7IGkrKykg
ewogICAgICAgICBFd2tfSGlzdG9yeV9JdGVtKiBpdGVtID0gZXdrX2hpc3RvcnlfaXRlbV9uZXdf
ZnJvbV9jb3JlKGNvcmVJdGVtc1tpXS5nZXQoKSk7CiAgICAgICAgIGlmIChpdGVtKQotICAgICAg
ICAgICAgcmV0ID0gZWluYV9saXN0X2FwcGVuZChyZXQsIGl0ZW0pOworICAgICAgICAgICAgcmVz
dWx0ID0gZWluYV9saXN0X2FwcGVuZChyZXN1bHQsIGl0ZW0pOwogICAgIH0KIAotICAgIHJldHVy
biByZXQ7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogRWluYV9Cb29sIGV3a19oaXN0b3J5X2Zv
cndhcmQoRXdrX0hpc3RvcnkqIGhpc3RvcnkpCkBAIC0yNTksOSArMjU5LDkgQEAgdm9pZCBld2tf
aGlzdG9yeV9pdGVtX2ZyZWUoRXdrX0hpc3RvcnlfSXRlbSogaXRlbSkKIAogdm9pZCBld2tfaGlz
dG9yeV9pdGVtX2xpc3RfZnJlZShFaW5hX0xpc3QqIGhpc3RvcnlfaXRlbXMpCiB7Ci0gICAgdm9p
ZCogZDsKLSAgICBFSU5BX0xJU1RfRlJFRShoaXN0b3J5X2l0ZW1zLCBkKSB7Ci0gICAgICAgIEV3
a19IaXN0b3J5X0l0ZW0qIGl0ZW0gPSAoRXdrX0hpc3RvcnlfSXRlbSopZDsKKyAgICB2b2lkKiBk
ZWxldGVJdGVtOworICAgIEVJTkFfTElTVF9GUkVFKGhpc3RvcnlfaXRlbXMsIGRlbGV0ZUl0ZW0p
IHsKKyAgICAgICAgRXdrX0hpc3RvcnlfSXRlbSogaXRlbSA9IChFd2tfSGlzdG9yeV9JdGVtKilk
ZWxldGVJdGVtOwogICAgICAgICBfZXdrX2hpc3RvcnlfaXRlbV9mcmVlKGl0ZW0sIGl0ZW0tPmNv
cmUpOwogICAgIH0KIH0KQEAgLTI3MCwyNSArMjcwLDI1IEBAIGNvbnN0IGNoYXIqIGV3a19oaXN0
b3J5X2l0ZW1fdGl0bGVfZ2V0KGNvbnN0IEV3a19IaXN0b3J5X0l0ZW0qIGl0ZW0pCiB7CiAgICAg
RVdLX0hJU1RPUllfSVRFTV9DT1JFX0dFVF9PUl9SRVRVUk4oaXRlbSwgY29yZSwgMCk7CiAgICAg
Ly8gaGlkZSB0aGUgZm9sbG93aW5nIG9wdGltemF0aW9uIGZyb20gb3V0c2lkZQotICAgIEV3a19I
aXN0b3J5X0l0ZW0qIGkgPSBjb25zdF9jYXN0PEV3a19IaXN0b3J5X0l0ZW0qPihpdGVtKTsKLSAg
ICBlaW5hX3N0cmluZ3NoYXJlX3JlcGxhY2UoJmktPnRpdGxlLCBjb3JlLT50aXRsZSgpLnV0Zjgo
KS5kYXRhKCkpOwotICAgIHJldHVybiBpLT50aXRsZTsKKyAgICBFd2tfSGlzdG9yeV9JdGVtKiBp
dGVtMSA9IGNvbnN0X2Nhc3Q8RXdrX0hpc3RvcnlfSXRlbSo+KGl0ZW0pOworICAgIGVpbmFfc3Ry
aW5nc2hhcmVfcmVwbGFjZSgmaXRlbTEtPnRpdGxlLCBjb3JlLT50aXRsZSgpLnV0ZjgoKS5kYXRh
KCkpOworICAgIHJldHVybiBpdGVtMS0+dGl0bGU7CiB9CiAKIGNvbnN0IGNoYXIqIGV3a19oaXN0
b3J5X2l0ZW1fdGl0bGVfYWx0ZXJuYXRlX2dldChjb25zdCBFd2tfSGlzdG9yeV9JdGVtKiBpdGVt
KQogewogICAgIEVXS19ISVNUT1JZX0lURU1fQ09SRV9HRVRfT1JfUkVUVVJOKGl0ZW0sIGNvcmUs
IDApOwogICAgIC8vIGhpZGUgdGhlIGZvbGxvd2luZyBvcHRpbXphdGlvbiBmcm9tIG91dHNpZGUK
LSAgICBFd2tfSGlzdG9yeV9JdGVtKiBpID0gY29uc3RfY2FzdDxFd2tfSGlzdG9yeV9JdGVtKj4o
aXRlbSk7Ci0gICAgZWluYV9zdHJpbmdzaGFyZV9yZXBsYWNlKCZpLT5hbHRlcm5hdGVfdGl0bGUs
CisgICAgRXdrX0hpc3RvcnlfSXRlbSogaXRlbTEgPSBjb25zdF9jYXN0PEV3a19IaXN0b3J5X0l0
ZW0qPihpdGVtKTsKKyAgICBlaW5hX3N0cmluZ3NoYXJlX3JlcGxhY2UoJml0ZW0xLT5hbHRlcm5h
dGVUaXRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZS0+YWx0ZXJuYXRlVGl0
bGUoKS51dGY4KCkuZGF0YSgpKTsKLSAgICByZXR1cm4gaS0+YWx0ZXJuYXRlX3RpdGxlOworICAg
IHJldHVybiBpdGVtMS0+YWx0ZXJuYXRlVGl0bGU7CiB9CiAKIHZvaWQgZXdrX2hpc3RvcnlfaXRl
bV90aXRsZV9hbHRlcm5hdGVfc2V0KEV3a19IaXN0b3J5X0l0ZW0qIGl0ZW0sIGNvbnN0IGNoYXIq
IHRpdGxlKQogewogICAgIEVXS19ISVNUT1JZX0lURU1fQ09SRV9HRVRfT1JfUkVUVVJOKGl0ZW0s
IGNvcmUpOwotICAgIGlmICghZWluYV9zdHJpbmdzaGFyZV9yZXBsYWNlKCZpdGVtLT5hbHRlcm5h
dGVfdGl0bGUsIHRpdGxlKSkKKyAgICBpZiAoIWVpbmFfc3RyaW5nc2hhcmVfcmVwbGFjZSgmaXRl
bS0+YWx0ZXJuYXRlVGl0bGUsIHRpdGxlKSkKICAgICAgICAgcmV0dXJuOwogICAgIGNvcmUtPnNl
dEFsdGVybmF0ZVRpdGxlKFdURjo6U3RyaW5nOjpmcm9tVVRGOCh0aXRsZSkpOwogfQpAQCAtMzA3
LDkgKzMwNyw5IEBAIGNvbnN0IGNoYXIqIGV3a19oaXN0b3J5X2l0ZW1fdXJpX29yaWdpbmFsX2dl
dChjb25zdCBFd2tfSGlzdG9yeV9JdGVtKiBpdGVtKQogICAgIEVXS19ISVNUT1JZX0lURU1fQ09S
RV9HRVRfT1JfUkVUVVJOKGl0ZW0sIGNvcmUsIDApOwogICAgIC8vIGhpZGUgdGhlIGZvbGxvd2lu
ZyBvcHRpbXphdGlvbiBmcm9tIG91dHNpZGUKICAgICBFd2tfSGlzdG9yeV9JdGVtKiBpID0gY29u
c3RfY2FzdDxFd2tfSGlzdG9yeV9JdGVtKj4oaXRlbSk7Ci0gICAgZWluYV9zdHJpbmdzaGFyZV9y
ZXBsYWNlKCZpLT5vcmlnaW5hbF91cmksCisgICAgZWluYV9zdHJpbmdzaGFyZV9yZXBsYWNlKCZp
LT5vcmlnaW5hbFVyaSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZS0+b3JpZ2lu
YWxVUkxTdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLSAgICByZXR1cm4gaS0+b3JpZ2luYWxfdXJp
OworICAgIHJldHVybiBpLT5vcmlnaW5hbFVyaTsKIH0KIAogZG91YmxlIGV3a19oaXN0b3J5X2l0
ZW1fdGltZV9sYXN0X3Zpc2l0ZWRfZ2V0KGNvbnN0IEV3a19IaXN0b3J5X0l0ZW0qIGl0ZW0pCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2pzLmNwcCBiL1NvdXJjZS9XZWJL
aXQvZWZsL2V3ay9ld2tfanMuY3BwCmluZGV4IDQyY2ZkZmVjMWE1YjQ4M2Y0ZmExM2Y1ZThjOGM0
MTVkNGVmNjAxYzEuLmY1YjNhZTU2YjUwNWMzMzliYmQ1ZmIyOTE3MGQzN2YxMmQyYzliNTQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfanMuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvZWZsL2V3ay9ld2tfanMuY3BwCkBAIC04NSwxMCArODUsMTAgQEAgc3RhdGljIEVpbmFf
Qm9vbCBld2tfanNfdmFyaWFudF90b19ucHZhcmlhbnQoY29uc3QgRXdrX0pTX1ZhcmlhbnQqIGRh
dGEsIE5QVmFyaWEKIC8vIFRoZXNlIG1ldGhvZHMgYXJlIHVzZWQgYnkgTlBBSSwgdGhhdHMgdGhl
IHJlYXNvbiB0byB1c2UgYm9vbCBpbnN0ZWFkIG9mIEVpbmFfQm9vbC4KIHN0YXRpYyBib29sIGV3
a19qc19wcm9wZXJ0eV9oYXMoTlBPYmplY3QqIG5wT2JqZWN0LCBOUElkZW50aWZpZXIgbmFtZSkK
IHsKLSAgICBFd2tfSlNfT2JqZWN0KiBvYmogPSByZWludGVycHJldF9jYXN0PEV3a19KU19PYmpl
Y3QqPihucE9iamVjdCk7CisgICAgRXdrX0pTX09iamVjdCogb2JqZWN0ID0gcmVpbnRlcnByZXRf
Y2FzdDxFd2tfSlNfT2JqZWN0Kj4obnBPYmplY3QpOwogCiAgICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk5fVkFMKG5wT2JqZWN0LCBmYWxzZSk7Ci0gICAgRUlOQV9NQUdJQ19DSEVDS19PUl9S
RVRVUk4ob2JqLCBmYWxzZSk7CisgICAgRUlOQV9NQUdJQ19DSEVDS19PUl9SRVRVUk4ob2JqZWN0
LCBmYWxzZSk7CiAKICAgICBpZiAoIV9OUE5fSWRlbnRpZmllcklzU3RyaW5nKG5hbWUpKSB7CiAg
ICAgICAgIEVSUigiaW50IE5QSWRlbnRpZmllciBpcyBub3Qgc3VwcG9ydGVkLiIpOwpAQCAtOTYs
NyArOTYsNyBAQCBzdGF0aWMgYm9vbCBld2tfanNfcHJvcGVydHlfaGFzKE5QT2JqZWN0KiBucE9i
amVjdCwgTlBJZGVudGlmaWVyIG5hbWUpCiAgICAgfQogCiAgICAgY2hhciogcHJvcF9uYW1lID0g
X05QTl9VVEY4RnJvbUlkZW50aWZpZXIobmFtZSk7Ci0gICAgYm9vbCBmYWlsID0gZWluYV9oYXNo
X2ZpbmQob2JqLT5wcm9wZXJ0aWVzLCBwcm9wX25hbWUpOyAvLyBGSVhNRTogc2hvdWxkIHNlYXJj
aCBtZXRob2RzIHRvbz8KKyAgICBib29sIGZhaWwgPSBlaW5hX2hhc2hfZmluZChvYmplY3QtPnBy
b3BlcnRpZXMsIHByb3BfbmFtZSk7IC8vIEZJWE1FOiBzaG91bGQgc2VhcmNoIG1ldGhvZHMgdG9v
PwogICAgIGZyZWUocHJvcF9uYW1lKTsKIAogICAgIHJldHVybiBmYWlsOwpAQCAtMTA0LDEzICsx
MDQsMTMgQEAgc3RhdGljIGJvb2wgZXdrX2pzX3Byb3BlcnR5X2hhcyhOUE9iamVjdCogbnBPYmpl
Y3QsIE5QSWRlbnRpZmllciBuYW1lKQogCiBzdGF0aWMgYm9vbCBld2tfanNfcHJvcGVydHlfZ2V0
KE5QT2JqZWN0KiBucE9iamVjdCwgTlBJZGVudGlmaWVyIG5hbWUsIE5QVmFyaWFudCogcmVzdWx0
KQogewotICAgIEV3a19KU19PYmplY3QqIG9iaiA9IHJlaW50ZXJwcmV0X2Nhc3Q8RXdrX0pTX09i
amVjdCo+KG5wT2JqZWN0KTsKKyAgICBFd2tfSlNfT2JqZWN0KiBvYmplY3QgPSByZWludGVycHJl
dF9jYXN0PEV3a19KU19PYmplY3QqPihucE9iamVjdCk7CiAgICAgRXdrX0pTX1ZhcmlhbnQqIHZh
bHVlOwogICAgIEV3a19KU19Qcm9wZXJ0eSogcHJvcDsKICAgICBib29sIGZhaWwgPSBmYWxzZTsK
IAogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChucE9iamVjdCwgZmFsc2UpOwot
ICAgIEVJTkFfTUFHSUNfQ0hFQ0tfT1JfUkVUVVJOKG9iaiwgZmFsc2UpOworICAgIEVJTkFfTUFH
SUNfQ0hFQ0tfT1JfUkVUVVJOKG9iamVjdCwgZmFsc2UpOwogCiAgICAgaWYgKCFfTlBOX0lkZW50
aWZpZXJJc1N0cmluZyhuYW1lKSkgewogICAgICAgICBFUlIoImludCBOUElkZW50aWZpZXIgaXMg
bm90IHN1cHBvcnRlZC4iKTsKQEAgLTEyMywxOSArMTIzLDE5IEBAIHN0YXRpYyBib29sIGV3a19q
c19wcm9wZXJ0eV9nZXQoTlBPYmplY3QqIG5wT2JqZWN0LCBOUElkZW50aWZpZXIgbmFtZSwgTlBW
YXJpYW50CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBwcm9wID0gc3RhdGlj
X2Nhc3Q8RXdrX0pTX1Byb3BlcnR5Kj4oZWluYV9oYXNoX2ZpbmQob2JqLT5jbHMtPnByb3BlcnRp
ZXMsIG5hbWUpKTsKKyAgICBwcm9wID0gc3RhdGljX2Nhc3Q8RXdrX0pTX1Byb3BlcnR5Kj4oZWlu
YV9oYXNoX2ZpbmQob2JqZWN0LT5jbHMtPnByb3BlcnRpZXMsIG5hbWUpKTsKICAgICBpZiAocHJv
cCAmJiBwcm9wLT5nZXQpIHsgLy8gQ2xhc3MgaGFzIHByb3BlcnR5IGFuZCBwcm9wZXJ0eSBoYXMg
Z2V0dGVyLgotICAgICAgICBmYWlsID0gcHJvcC0+Z2V0KG9iaiwgcHJvcC0+bmFtZSwgdmFsdWUp
OworICAgICAgICBmYWlsID0gcHJvcC0+Z2V0KG9iamVjdCwgcHJvcC0+bmFtZSwgdmFsdWUpOwog
ICAgICAgICBpZiAoIWZhaWwpCiAgICAgICAgICAgICBmYWlsID0gZXdrX2pzX3ZhcmlhbnRfdG9f
bnB2YXJpYW50KHZhbHVlLCByZXN1bHQpOwotICAgIH0gZWxzZSBpZiAob2JqLT5jbHMtPmRlZmF1
bHRfcHJvcC5nZXQpIHsgLy8gRGVmYXVsdCBnZXR0ZXIgZXhpc3RzLgotICAgICAgICBmYWlsID0g
b2JqLT5jbHMtPmRlZmF1bHRfcHJvcC5nZXQob2JqLCBwcm9wLT5uYW1lLCB2YWx1ZSk7CisgICAg
fSBlbHNlIGlmIChvYmplY3QtPmNscy0+ZGVmYXVsdF9wcm9wLmdldCkgeyAvLyBEZWZhdWx0IGdl
dHRlciBleGlzdHMuCisgICAgICAgIGZhaWwgPSBvYmplY3QtPmNscy0+ZGVmYXVsdF9wcm9wLmdl
dChvYmplY3QsIHByb3AtPm5hbWUsIHZhbHVlKTsKICAgICAgICAgaWYgKCFmYWlsKQogICAgICAg
ICAgICAgZmFpbCA9IGV3a19qc192YXJpYW50X3RvX25wdmFyaWFudCh2YWx1ZSwgcmVzdWx0KTsK
ICAgICB9IGVsc2UgeyAvLyBGYWxsYmFjayB0byBvYmplY3RzIGhhc2ggbWFwLgogICAgICAgICBj
aGFyKiBwcm9wX25hbWUgPSBfTlBOX1VURjhGcm9tSWRlbnRpZmllcihuYW1lKTsKICAgICAgICAg
ZnJlZSh2YWx1ZSk7Ci0gICAgICAgIHZhbHVlID0gc3RhdGljX2Nhc3Q8RXdrX0pTX1ZhcmlhbnQq
PihlaW5hX2hhc2hfZmluZChvYmotPnByb3BlcnRpZXMsIHByb3BfbmFtZSkpOworICAgICAgICB2
YWx1ZSA9IHN0YXRpY19jYXN0PEV3a19KU19WYXJpYW50Kj4oZWluYV9oYXNoX2ZpbmQob2JqZWN0
LT5wcm9wZXJ0aWVzLCBwcm9wX25hbWUpKTsKICAgICAgICAgZnJlZShwcm9wX25hbWUpOwogICAg
ICAgICBpZiAodmFsdWUpCiAgICAgICAgICAgICByZXR1cm4gZXdrX2pzX3ZhcmlhbnRfdG9fbnB2
YXJpYW50KHZhbHVlLCByZXN1bHQpOwpAQCAtMTQ3LDEzICsxNDcsMTMgQEAgc3RhdGljIGJvb2wg
ZXdrX2pzX3Byb3BlcnR5X2dldChOUE9iamVjdCogbnBPYmplY3QsIE5QSWRlbnRpZmllciBuYW1l
LCBOUFZhcmlhbnQKIAogc3RhdGljIGJvb2wgZXdrX2pzX3Byb3BlcnR5X3NldChOUE9iamVjdCog
bnBPYmplY3QsIE5QSWRlbnRpZmllciBuYW1lLCBjb25zdCBOUFZhcmlhbnQqIG5wVmFsdWUpCiB7
Ci0gICAgRXdrX0pTX09iamVjdCogb2JqID0gcmVpbnRlcnByZXRfY2FzdDxFd2tfSlNfT2JqZWN0
Kj4obnBPYmplY3QpOworICAgIEV3a19KU19PYmplY3QqIG9iamVjdCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8RXdrX0pTX09iamVjdCo+KG5wT2JqZWN0KTsKICAgICBFd2tfSlNfVmFyaWFudCogdmFsdWU7
CiAgICAgRXdrX0pTX1Byb3BlcnR5KiBwcm9wOwogICAgIGJvb2wgZmFpbCA9IGZhbHNlOwogCiAg
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKG5wT2JqLCBmYWxzZSk7Ci0gICAgRUlO
QV9NQUdJQ19DSEVDS19PUl9SRVRVUk4ob2JqLCBmYWxzZSk7CisgICAgRUlOQV9NQUdJQ19DSEVD
S19PUl9SRVRVUk4ob2JqZWN0LCBmYWxzZSk7CiAKICAgICBpZiAoIV9OUE5fSWRlbnRpZmllcklz
U3RyaW5nKG5hbWUpKSB7CiAgICAgICAgIEVSUigiaW50IE5QSWRlbnRpZmllciBpcyBub3Qgc3Vw
cG9ydGVkLiIpOwpAQCAtMTY4LDEzICsxNjgsMTMgQEAgc3RhdGljIGJvb2wgZXdrX2pzX3Byb3Bl
cnR5X3NldChOUE9iamVjdCogbnBPYmplY3QsIE5QSWRlbnRpZmllciBuYW1lLCBjb25zdCBOUFYK
IAogICAgIGV3a19qc19ucHZhcmlhbnRfdG9fdmFyaWFudCh2YWx1ZSwgbnBWYWx1ZSk7CiAgICAg
Y2hhciogcHJvcF9uYW1lID0gX05QTl9VVEY4RnJvbUlkZW50aWZpZXIobmFtZSk7Ci0gICAgcHJv
cCA9IHN0YXRpY19jYXN0PEV3a19KU19Qcm9wZXJ0eSo+KGVpbmFfaGFzaF9maW5kKG9iai0+Y2xz
LT5wcm9wZXJ0aWVzLCBwcm9wX25hbWUpKTsKKyAgICBwcm9wID0gc3RhdGljX2Nhc3Q8RXdrX0pT
X1Byb3BlcnR5Kj4oZWluYV9oYXNoX2ZpbmQob2JqZWN0LT5jbHMtPnByb3BlcnRpZXMsIHByb3Bf
bmFtZSkpOwogICAgIGlmIChwcm9wICYmIHByb3AtPnNldCkKLSAgICAgICAgZmFpbCA9IHByb3At
PnNldChvYmosIHByb3AtPm5hbWUsIHZhbHVlKTsgLy8gQ2xhc3MgaGFzIHByb3BlcnR5IGFuZCBw
cm9wZXJ0eSBoYXMgc2V0dGVyLgotICAgIGVsc2UgaWYgKG9iai0+Y2xzLT5kZWZhdWx0X3Byb3Au
c2V0KQotICAgICAgICBmYWlsID0gb2JqLT5jbHMtPmRlZmF1bHRfcHJvcC5zZXQob2JqLCBwcm9w
X25hbWUsIHZhbHVlKTsgLy8gRGVmYXVsdCBnZXR0ZXIgZXhpc3RzLgorICAgICAgICBmYWlsID0g
cHJvcC0+c2V0KG9iamVjdCwgcHJvcC0+bmFtZSwgdmFsdWUpOyAvLyBDbGFzcyBoYXMgcHJvcGVy
dHkgYW5kIHByb3BlcnR5IGhhcyBzZXR0ZXIuCisgICAgZWxzZSBpZiAob2JqZWN0LT5jbHMtPmRl
ZmF1bHRfcHJvcC5zZXQpCisgICAgICAgIGZhaWwgPSBvYmplY3QtPmNscy0+ZGVmYXVsdF9wcm9w
LnNldChvYmplY3QsIHByb3BfbmFtZSwgdmFsdWUpOyAvLyBEZWZhdWx0IGdldHRlciBleGlzdHMu
CiAgICAgZWxzZSB7IC8vIEZhbGxiYWNrIHRvIG9iamVjdHMgaGFzaCBtYXAuCi0gICAgICAgIHZv
aWQqIG9sZCA9IGVpbmFfaGFzaF9zZXQob2JqLT5wcm9wZXJ0aWVzLCBwcm9wX25hbWUsIHZhbHVl
KTsKKyAgICAgICAgdm9pZCogb2xkID0gZWluYV9oYXNoX3NldChvYmplY3QtPnByb3BlcnRpZXMs
IHByb3BfbmFtZSwgdmFsdWUpOwogICAgICAgICBmcmVlKG9sZCk7CiAgICAgICAgIGZhaWwgPSB0
cnVlOwogICAgIH0KQEAgLTE4NSwxMiArMTg1LDEyIEBAIHN0YXRpYyBib29sIGV3a19qc19wcm9w
ZXJ0eV9zZXQoTlBPYmplY3QqIG5wT2JqZWN0LCBOUElkZW50aWZpZXIgbmFtZSwgY29uc3QgTlBW
CiAKIHN0YXRpYyBib29sIGV3a19qc19wcm9wZXJ0eV9yZW1vdmUoTlBPYmplY3QqIG5wT2JqZWN0
LCBOUElkZW50aWZpZXIgbmFtZSkKIHsKLSAgICBFd2tfSlNfT2JqZWN0KiBvYmogPSByZWludGVy
cHJldF9jYXN0PEV3a19KU19PYmplY3QqPihucE9iamVjdCk7CisgICAgRXdrX0pTX09iamVjdCog
b2JqZWN0ID0gcmVpbnRlcnByZXRfY2FzdDxFd2tfSlNfT2JqZWN0Kj4obnBPYmplY3QpOwogICAg
IEV3a19KU19Qcm9wZXJ0eSogcHJvcDsKICAgICBib29sIGZhaWwgPSBmYWxzZTsKIAogICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChucE9iamVjdCwgZmFsc2UpOwotICAgIEVJTkFf
TUFHSUNfQ0hFQ0tfT1JfUkVUVVJOKG9iaiwgZmFsc2UpOworICAgIEVJTkFfTUFHSUNfQ0hFQ0tf
T1JfUkVUVVJOKG9iamVjdCwgZmFsc2UpOwogCiAgICAgaWYgKCFfTlBOX0lkZW50aWZpZXJJc1N0
cmluZyhuYW1lKSkgewogICAgICAgICBFUlIoImludCBOUElkZW50aWZpZXIgaXMgbm90IHN1cHBv
cnRlZC4iKTsKQEAgLTE5OCwxMyArMTk4LDEzIEBAIHN0YXRpYyBib29sIGV3a19qc19wcm9wZXJ0
eV9yZW1vdmUoTlBPYmplY3QqIG5wT2JqZWN0LCBOUElkZW50aWZpZXIgbmFtZSkKICAgICB9CiAK
ICAgICBjaGFyKiBwcm9wX25hbWUgPSBfTlBOX1VURjhGcm9tSWRlbnRpZmllcihuYW1lKTsKLSAg
ICBwcm9wID0gc3RhdGljX2Nhc3Q8RXdrX0pTX1Byb3BlcnR5Kj4oZWluYV9oYXNoX2ZpbmQob2Jq
LT5jbHMtPnByb3BlcnRpZXMsIHByb3BfbmFtZSkpOworICAgIHByb3AgPSBzdGF0aWNfY2FzdDxF
d2tfSlNfUHJvcGVydHkqPihlaW5hX2hhc2hfZmluZChvYmplY3QtPmNscy0+cHJvcGVydGllcywg
cHJvcF9uYW1lKSk7CiAgICAgaWYgKHByb3AgJiYgcHJvcC0+ZGVsKQotICAgICAgICBmYWlsID0g
cHJvcC0+ZGVsKG9iaiwgcHJvcC0+bmFtZSk7IC8vIENsYXNzIGhhcyBwcm9wZXJ0eSBhbmQgcHJv
cGVydHkgaGFzIGdldHRlci4KLSAgICBlbHNlIGlmIChvYmotPmNscy0+ZGVmYXVsdF9wcm9wLmRl
bCkKLSAgICAgICAgZmFpbCA9IG9iai0+Y2xzLT5kZWZhdWx0X3Byb3AuZGVsKG9iaiwgcHJvcF9u
YW1lKTsKKyAgICAgICAgZmFpbCA9IHByb3AtPmRlbChvYmplY3QsIHByb3AtPm5hbWUpOyAvLyBD
bGFzcyBoYXMgcHJvcGVydHkgYW5kIHByb3BlcnR5IGhhcyBnZXR0ZXIuCisgICAgZWxzZSBpZiAo
b2JqZWN0LT5jbHMtPmRlZmF1bHRfcHJvcC5kZWwpCisgICAgICAgIGZhaWwgPSBvYmplY3QtPmNs
cy0+ZGVmYXVsdF9wcm9wLmRlbChvYmplY3QsIHByb3BfbmFtZSk7CiAgICAgZWxzZQotICAgICAg
ICBmYWlsID0gZWluYV9oYXNoX2RlbChvYmotPnByb3BlcnRpZXMsIHByb3BfbmFtZSwgMCk7Cisg
ICAgICAgIGZhaWwgPSBlaW5hX2hhc2hfZGVsKG9iamVjdC0+cHJvcGVydGllcywgcHJvcF9uYW1l
LCAwKTsKIAogICAgIGZyZWUocHJvcF9uYW1lKTsKICAgICByZXR1cm4gZmFpbDsKQEAgLTIxMiwy
MiArMjEyLDIyIEBAIHN0YXRpYyBib29sIGV3a19qc19wcm9wZXJ0eV9yZW1vdmUoTlBPYmplY3Qq
IG5wT2JqZWN0LCBOUElkZW50aWZpZXIgbmFtZSkKIAogc3RhdGljIGJvb2wgZXdrX2pzX3Byb3Bl
cnRpZXNfZW51bWVyYXRlKE5QT2JqZWN0KiBucE9iamVjdCwgTlBJZGVudGlmaWVyKiogdmFsdWUs
IHVpbnQzMl90KiBjb3VudCkKIHsKLSAgICBFd2tfSlNfT2JqZWN0KiBvYmogPSByZWludGVycHJl
dF9jYXN0PEV3a19KU19PYmplY3QqPihucE9iamVjdCk7CisgICAgRXdrX0pTX09iamVjdCogb2Jq
ZWN0ID0gcmVpbnRlcnByZXRfY2FzdDxFd2tfSlNfT2JqZWN0Kj4obnBPYmplY3QpOwogICAgIEVp
bmFfSXRlcmF0b3IqIGl0OwogICAgIGNoYXIqIGtleTsKICAgICBpbnQgaSA9IDA7CiAKICAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwobnBPYmplY3QsIGZhbHNlKTsKLSAgICBFSU5B
X01BR0lDX0NIRUNLX09SX1JFVFVSTihvYmosIGZhbHNlKTsKKyAgICBFSU5BX01BR0lDX0NIRUNL
X09SX1JFVFVSTihvYmplY3QsIGZhbHNlKTsKIAotICAgICpjb3VudCA9IGVpbmFfaGFzaF9wb3B1
bGF0aW9uKG9iai0+cHJvcGVydGllcyk7CisgICAgKmNvdW50ID0gZWluYV9oYXNoX3BvcHVsYXRp
b24ob2JqZWN0LT5wcm9wZXJ0aWVzKTsKICAgICAqdmFsdWUgPSBzdGF0aWNfY2FzdDxOUElkZW50
aWZpZXIqPihtYWxsb2Moc2l6ZW9mKE5QSWRlbnRpZmllcikgKiAqY291bnQpKTsKICAgICBpZiAo
ISp2YWx1ZSkgewogICAgICAgICBFUlIoIkNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIE5Q
SWRlbnRpZmllciIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgaXQgPSBl
aW5hX2hhc2hfaXRlcmF0b3Jfa2V5X25ldyhvYmotPnByb3BlcnRpZXMpOworICAgIGl0ID0gZWlu
YV9oYXNoX2l0ZXJhdG9yX2tleV9uZXcob2JqZWN0LT5wcm9wZXJ0aWVzKTsKICAgICBFSU5BX0lU
RVJBVE9SX0ZPUkVBQ0goaXQsIGtleSkKICAgICAgICAgKCp2YWx1ZSlbaSsrXSA9IF9OUE5fR2V0
U3RyaW5nSWRlbnRpZmllcihrZXkpOwogCkBAIC0yMzcsMzQgKzIzNywzNCBAQCBzdGF0aWMgYm9v
bCBld2tfanNfcHJvcGVydGllc19lbnVtZXJhdGUoTlBPYmplY3QqIG5wT2JqZWN0LCBOUElkZW50
aWZpZXIqKiB2YWx1ZQogCiBzdGF0aWMgYm9vbCBld2tfanNfbWV0aG9kX2hhcyhOUE9iamVjdCog
bnBPYmplY3QsIE5QSWRlbnRpZmllciBuYW1lKQogewotICAgIEV3a19KU19PYmplY3QqIG9iaiA9
IHJlaW50ZXJwcmV0X2Nhc3Q8RXdrX0pTX09iamVjdCo+KG5wT2JqZWN0KTsKKyAgICBFd2tfSlNf
T2JqZWN0KiBvYmplY3QgPSByZWludGVycHJldF9jYXN0PEV3a19KU19PYmplY3QqPihucE9iamVj
dCk7CiAKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwobnBPYmplY3QsIGZhbHNl
KTsKLSAgICBFSU5BX01BR0lDX0NIRUNLX09SX1JFVFVSTihvYmosIGZhbHNlKTsKKyAgICBFSU5B
X01BR0lDX0NIRUNLX09SX1JFVFVSTihvYmplY3QsIGZhbHNlKTsKIAogICAgIGlmICghX05QTl9J
ZGVudGlmaWVySXNTdHJpbmcobmFtZSkpIHsKICAgICAgICAgRVJSKCJpbnQgTlBJZGVudGlmaWVy
IGlzIG5vdCBzdXBwb3J0ZWQuIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAg
cmV0dXJuIGVpbmFfaGFzaF9maW5kKG9iai0+Y2xzLT5tZXRob2RzLCBuYW1lKTsgLy8gUmV0dXJu
cyBwb2ludGVyIGlmIGZvdW5kKHRydWUpLCAwKGZhbHNlKSBvdGhlcndpc2UuCisgICAgcmV0dXJu
IGVpbmFfaGFzaF9maW5kKG9iamVjdC0+Y2xzLT5tZXRob2RzLCBuYW1lKTsgLy8gUmV0dXJucyBw
b2ludGVyIGlmIGZvdW5kKHRydWUpLCAwKGZhbHNlKSBvdGhlcndpc2UuCiB9CiAKIHN0YXRpYyBi
b29sIGV3a19qc19tZXRob2RfaW52b2tlKE5QT2JqZWN0KiBucE9iamVjdCwgTlBJZGVudGlmaWVy
IG5hbWUsIGNvbnN0IE5QVmFyaWFudCogbnBBcmdzLCB1aW50MzJfdCBucEFyZ0NvdW50LCBOUFZh
cmlhbnQqIHJlc3VsdCkKIHsKLSAgICBFd2tfSlNfT2JqZWN0KiBvYmogPSByZWludGVycHJldF9j
YXN0PEV3a19KU19PYmplY3QqPihucE9iamVjdCk7CisgICAgRXdrX0pTX09iamVjdCogb2JqZWN0
ID0gcmVpbnRlcnByZXRfY2FzdDxFd2tfSlNfT2JqZWN0Kj4obnBPYmplY3QpOwogICAgIEV3a19K
U19NZXRob2QqIG1ldGhvZDsKICAgICBFd2tfSlNfVmFyaWFudCogYXJnczsKICAgICBFd2tfSlNf
VmFyaWFudCogcmV0X3ZhbDsKIAogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChu
cE9iamVjdCwgZmFsc2UpOwotICAgIEVJTkFfTUFHSUNfQ0hFQ0tfT1JfUkVUVVJOKG9iaiwgZmFs
c2UpOworICAgIEVJTkFfTUFHSUNfQ0hFQ0tfT1JfUkVUVVJOKG9iamVjdCwgZmFsc2UpOwogCiAg
ICAgaWYgKCFfTlBOX0lkZW50aWZpZXJJc1N0cmluZyhuYW1lKSkgewogICAgICAgICBFUlIoImlu
dCBOUElkZW50aWZpZXIgaXMgbm90IHN1cHBvcnRlZC4iKTsKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KIAotICAgIG1ldGhvZCA9IHN0YXRpY19jYXN0PEV3a19KU19NZXRob2QqPihlaW5h
X2hhc2hfZmluZChvYmotPmNscy0+bWV0aG9kcywgbmFtZSkpOworICAgIG1ldGhvZCA9IHN0YXRp
Y19jYXN0PEV3a19KU19NZXRob2QqPihlaW5hX2hhc2hfZmluZChvYmplY3QtPmNscy0+bWV0aG9k
cywgbmFtZSkpOwogICAgIGlmICghbWV0aG9kKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAg
LTI3Niw3ICsyNzYsNyBAQCBzdGF0aWMgYm9vbCBld2tfanNfbWV0aG9kX2ludm9rZShOUE9iamVj
dCogbnBPYmplY3QsIE5QSWRlbnRpZmllciBuYW1lLCBjb25zdCBOUAogCiAgICAgZm9yICh1aW50
MzJfdCBpID0gMDsgaSA8IG5wQXJnQ291bnQ7IGkrKykKICAgICAgICAgZXdrX2pzX25wdmFyaWFu
dF90b192YXJpYW50KCZhcmdzW2ldLCAmbnBBcmdzW2ldKTsKLSAgICByZXRfdmFsID0gbWV0aG9k
LT5pbnZva2Uob2JqLCBhcmdzLCBucEFyZ0NvdW50KTsKKyAgICByZXRfdmFsID0gbWV0aG9kLT5p
bnZva2Uob2JqZWN0LCBhcmdzLCBucEFyZ0NvdW50KTsKICAgICBld2tfanNfdmFyaWFudF90b19u
cHZhcmlhbnQocmV0X3ZhbCwgcmVzdWx0KTsKIAogICAgIGV3a19qc192YXJpYW50X2ZyZWUocmV0
X3ZhbCk7CkBAIC0zOTMsNyArMzkzLDcgQEAgc3RhdGljIEV3a19KU19PYmplY3QqIGV3a19qc19u
cG9iamVjdF90b19vYmplY3QoTlBPYmplY3QqIG5wT2JqZWN0KQogICAgIE5QSWRlbnRpZmllciog
dmFsdWVzOwogICAgIHVpbnQzMl90IG5wX3Byb3BzX2NvdW50OwogICAgIEV3a19KU19DbGFzcyog
Y2xzOwotICAgIEV3a19KU19PYmplY3QqIG9iajsKKyAgICBFd2tfSlNfT2JqZWN0KiBvYmplY3Q7
CiAgICAgRWluYV9JdGVyYXRvciogaXQ7CiAgICAgRXdrX0pTX1Byb3BlcnR5KiBwcm9wOwogICAg
IEphdmFTY3JpcHRPYmplY3QqIGpzbzsKQEAgLTQzNiw0MiArNDM2LDQyIEBAIHN0YXRpYyBFd2tf
SlNfT2JqZWN0KiBld2tfanNfbnBvYmplY3RfdG9fb2JqZWN0KE5QT2JqZWN0KiBucE9iamVjdCkK
ICAgICB9CiAKICAgICAvLyBDYW4ndCB1c2UgZXdrX2pzX29iamVjdF9uZXcoY2xzKSBiZWNhdXNl
IGl0IGV4cGVjdHMgY2xzLT5tZXRhIHRvIGV4aXN0LgotICAgIG9iaiA9IHN0YXRpY19jYXN0PEV3
a19KU19PYmplY3QqPihtYWxsb2Moc2l6ZW9mKEV3a19KU19PYmplY3QpKSk7Ci0gICAgaWYgKCFv
YmopIHsKKyAgICBvYmplY3QgPSBzdGF0aWNfY2FzdDxFd2tfSlNfT2JqZWN0Kj4obWFsbG9jKHNp
emVvZihFd2tfSlNfT2JqZWN0KSkpOworICAgIGlmICghb2JqZWN0KSB7CiAgICAgICAgIEVSUigi
Q291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgZXdrX2pzX29iamVjdCIpOwogICAgICAgICBn
b3RvIGVycm9yOwogICAgIH0KIAogICAgIGZyZWUodmFsdWVzKTsKLSAgICBFSU5BX01BR0lDX1NF
VChvYmosIEVXS19KU19PQkpFQ1RfTUFHSUMpOwotICAgIG9iai0+bmFtZSA9IDA7Ci0gICAgb2Jq
LT5jbHMgPSBjbHM7Ci0gICAgb2JqLT52aWV3ID0gMDsKKyAgICBFSU5BX01BR0lDX1NFVChvYmpl
Y3QsIEVXS19KU19PQkpFQ1RfTUFHSUMpOworICAgIG9iamVjdC0+bmFtZSA9IDA7CisgICAgb2Jq
ZWN0LT5jbHMgPSBjbHM7CisgICAgb2JqZWN0LT52aWV3ID0gMDsKIAogICAgIGpzbyA9IHJlaW50
ZXJwcmV0X2Nhc3Q8SmF2YVNjcmlwdE9iamVjdCo+KG5wT2JqZWN0KTsKICAgICBpZiAoIXN0cmNt
cCgiQXJyYXkiLCBqc28tPmltcC0+Y2xhc3NOYW1lKCkuYXNjaWkoKS5kYXRhKCkpKQotICAgICAg
ICBvYmotPnR5cGUgPSBFV0tfSlNfT0JKRUNUX0FSUkFZOworICAgICAgICBvYmplY3QtPnR5cGUg
PSBFV0tfSlNfT0JKRUNUX0FSUkFZOwogICAgIGVsc2UgaWYgKCFzdHJjbXAoIkZ1bmN0aW9uIiwg
anNvLT5pbXAtPmNsYXNzTmFtZSgpLmFzY2lpKCkuZGF0YSgpKSkKLSAgICAgICAgb2JqLT50eXBl
ID0gRVdLX0pTX09CSkVDVF9GVU5DVElPTjsKKyAgICAgICAgb2JqZWN0LT50eXBlID0gRVdLX0pT
X09CSkVDVF9GVU5DVElPTjsKICAgICBlbHNlCi0gICAgICAgIG9iai0+dHlwZSA9IEVXS19KU19P
QkpFQ1RfT0JKRUNUOworICAgICAgICBvYmplY3QtPnR5cGUgPSBFV0tfSlNfT0JKRUNUX09CSkVD
VDsKIAogICAgIGlmIChlaW5hX2hhc2hfcG9wdWxhdGlvbihjbHMtPnByb3BlcnRpZXMpIDwgMjUp
Ci0gICAgICAgIG9iai0+cHJvcGVydGllcyA9IGVpbmFfaGFzaF9zdHJpbmdfc21hbGxfbmV3KDAp
OworICAgICAgICBvYmplY3QtPnByb3BlcnRpZXMgPSBlaW5hX2hhc2hfc3RyaW5nX3NtYWxsX25l
dygwKTsKICAgICBlbHNlCi0gICAgICAgIG9iai0+cHJvcGVydGllcyA9IGVpbmFfaGFzaF9zdHJp
bmdfc3VwZXJmYXN0X25ldygwKTsKKyAgICAgICAgb2JqZWN0LT5wcm9wZXJ0aWVzID0gZWluYV9o
YXNoX3N0cmluZ19zdXBlcmZhc3RfbmV3KDApOwogCiAgICAgaXQgPSBlaW5hX2hhc2hfaXRlcmF0
b3JfZGF0YV9uZXcoY2xzLT5wcm9wZXJ0aWVzKTsKICAgICBFSU5BX0lURVJBVE9SX0ZPUkVBQ0go
aXQsIHByb3ApIHsKICAgICAgICAgY29uc3QgY2hhcioga2V5ID0gcHJvcC0+bmFtZTsKICAgICAg
ICAgRXdrX0pTX1ZhcmlhbnQqIHZhbHVlID0gJnByb3AtPnZhbHVlOwotICAgICAgICBlaW5hX2hh
c2hfYWRkKG9iai0+cHJvcGVydGllcywga2V5LCB2YWx1ZSk7CisgICAgICAgIGVpbmFfaGFzaF9h
ZGQob2JqZWN0LT5wcm9wZXJ0aWVzLCBrZXksIHZhbHVlKTsKICAgICB9CiAKICAgICBlaW5hX2l0
ZXJhdG9yX2ZyZWUoaXQpOwotICAgIG9iai0+YmFzZSA9ICpyZWludGVycHJldF9jYXN0PEphdmFT
Y3JpcHRPYmplY3QqPihucE9iamVjdCk7CisgICAgb2JqZWN0LT5iYXNlID0gKnJlaW50ZXJwcmV0
X2Nhc3Q8SmF2YVNjcmlwdE9iamVjdCo+KG5wT2JqZWN0KTsKIAotICAgIHJldHVybiBvYmo7Cisg
ICAgcmV0dXJuIG9iamVjdDsKIAogZXJyb3I6CiAgICAgZXdrX2pzX2NsYXNzX2ZyZWUoY2xzKTsK
QEAgLTUyNywzNyArNTI3LDM3IEBAIHN0YXRpYyBFaW5hX0Jvb2wgZXdrX2pzX25wdmFyaWFudF90
b192YXJpYW50KEV3a19KU19WYXJpYW50KiBkYXRhLCBjb25zdCBOUFZhcmlhCiAKIEV3a19KU19P
YmplY3QqIGV3a19qc19vYmplY3RfbmV3KGNvbnN0IEV3a19KU19DbGFzc19NZXRhKiBqc01ldGFD
bGFzcykKIHsKLSAgICBFd2tfSlNfT2JqZWN0KiBvYmo7CisgICAgRXdrX0pTX09iamVjdCogb2Jq
ZWN0OwogCiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKG1ldGFfY2xzLCAwKTsK
IAotICAgIG9iaiA9IHN0YXRpY19jYXN0PEV3a19KU19PYmplY3QqPihtYWxsb2Moc2l6ZW9mKEV3
a19KU19PYmplY3QpKSk7Ci0gICAgaWYgKCFvYmopIHsKKyAgICBvYmplY3QgPSBzdGF0aWNfY2Fz
dDxFd2tfSlNfT2JqZWN0Kj4obWFsbG9jKHNpemVvZihFd2tfSlNfT2JqZWN0KSkpOworICAgIGlm
ICghb2JqZWN0KSB7CiAgICAgICAgIEVSUigiQ291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSBmb3Ig
ZXdrX2pzX29iamVjdCIpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBFSU5BX01B
R0lDX1NFVChvYmosIEVXS19KU19PQkpFQ1RfTUFHSUMpOwotICAgIG9iai0+Y2xzID0gZXdrX2pz
X2NsYXNzX25ldyhqc01ldGFDbGFzcyk7Ci0gICAgb2JqLT52aWV3ID0gMDsKLSAgICBvYmotPm5h
bWUgPSAwOwotICAgIG9iai0+dHlwZSA9IEVXS19KU19PQkpFQ1RfT0JKRUNUOworICAgIEVJTkFf
TUFHSUNfU0VUKG9iamVjdCwgRVdLX0pTX09CSkVDVF9NQUdJQyk7CisgICAgb2JqZWN0LT5jbHMg
PSBld2tfanNfY2xhc3NfbmV3KGpzTWV0YUNsYXNzKTsKKyAgICBvYmplY3QtPnZpZXcgPSAwOwor
ICAgIG9iamVjdC0+bmFtZSA9IDA7CisgICAgb2JqZWN0LT50eXBlID0gRVdLX0pTX09CSkVDVF9P
QkpFQ1Q7CiAKLSAgICBpZiAoZWluYV9oYXNoX3BvcHVsYXRpb24ob2JqLT5jbHMtPnByb3BlcnRp
ZXMpIDwgMjUpCi0gICAgICAgIG9iai0+cHJvcGVydGllcyA9IGVpbmFfaGFzaF9zdHJpbmdfc21h
bGxfbmV3KHJlaW50ZXJwcmV0X2Nhc3Q8RWluYV9GcmVlX0NiPihld2tfanNfdmFyaWFudF9mcmVl
KSk7CisgICAgaWYgKGVpbmFfaGFzaF9wb3B1bGF0aW9uKG9iamVjdC0+Y2xzLT5wcm9wZXJ0aWVz
KSA8IDI1KQorICAgICAgICBvYmplY3QtPnByb3BlcnRpZXMgPSBlaW5hX2hhc2hfc3RyaW5nX3Nt
YWxsX25ldyhyZWludGVycHJldF9jYXN0PEVpbmFfRnJlZV9DYj4oZXdrX2pzX3ZhcmlhbnRfZnJl
ZSkpOwogICAgIGVsc2UKLSAgICAgICAgb2JqLT5wcm9wZXJ0aWVzID0gZWluYV9oYXNoX3N0cmlu
Z19zdXBlcmZhc3RfbmV3KHJlaW50ZXJwcmV0X2Nhc3Q8RWluYV9GcmVlX0NiPihld2tfanNfdmFy
aWFudF9mcmVlKSk7CisgICAgICAgIG9iamVjdC0+cHJvcGVydGllcyA9IGVpbmFfaGFzaF9zdHJp
bmdfc3VwZXJmYXN0X25ldyhyZWludGVycHJldF9jYXN0PEVpbmFfRnJlZV9DYj4oZXdrX2pzX3Zh
cmlhbnRfZnJlZSkpOwogCi0gICAgZm9yIChpbnQgaSA9IDA7IG9iai0+Y2xzLT5tZXRhLT5wcm9w
ZXJ0aWVzICYmIG9iai0+Y2xzLT5tZXRhLT5wcm9wZXJ0aWVzW2ldLm5hbWU7IGkrKykgewotICAg
ICAgICBFd2tfSlNfUHJvcGVydHkgcHJvcCA9IG9iai0+Y2xzLT5tZXRhLT5wcm9wZXJ0aWVzW2ld
OwotICAgICAgICBjb25zdCBjaGFyKiBrZXkgPSBvYmotPmNscy0+bWV0YS0+cHJvcGVydGllc1tp
XS5uYW1lOworICAgIGZvciAoaW50IGkgPSAwOyBvYmplY3QtPmNscy0+bWV0YS0+cHJvcGVydGll
cyAmJiBvYmplY3QtPmNscy0+bWV0YS0+cHJvcGVydGllc1tpXS5uYW1lOyBpKyspIHsKKyAgICAg
ICAgRXdrX0pTX1Byb3BlcnR5IHByb3AgPSBvYmplY3QtPmNscy0+bWV0YS0+cHJvcGVydGllc1tp
XTsKKyAgICAgICAgY29uc3QgY2hhcioga2V5ID0gb2JqZWN0LT5jbHMtPm1ldGEtPnByb3BlcnRp
ZXNbaV0ubmFtZTsKICAgICAgICAgRXdrX0pTX1ZhcmlhbnQqIHZhbHVlID0gc3RhdGljX2Nhc3Q8
RXdrX0pTX1ZhcmlhbnQqPihtYWxsb2Moc2l6ZW9mKEV3a19KU19WYXJpYW50KSkpOwogICAgICAg
ICBpZiAoIXZhbHVlKSB7CiAgICAgICAgICAgICBFUlIoIkNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1v
cnkgZm9yIGV3a19qc192YXJpYW50Iik7CiAgICAgICAgICAgICBnb3RvIGVycm9yOwogICAgICAg
ICB9CiAgICAgICAgIGlmIChwcm9wLmdldCkKLSAgICAgICAgICAgIHByb3AuZ2V0KG9iaiwga2V5
LCB2YWx1ZSk7CisgICAgICAgICAgICBwcm9wLmdldChvYmplY3QsIGtleSwgdmFsdWUpOwogICAg
ICAgICBlbHNlIHsKICAgICAgICAgICAgIHZhbHVlLT50eXBlID0gcHJvcC52YWx1ZS50eXBlOwog
ICAgICAgICAgICAgc3dpdGNoICh2YWx1ZS0+dHlwZSkgewpAQCAtNTgyLDE1ICs1ODIsMTUgQEAg
RXdrX0pTX09iamVjdCogZXdrX2pzX29iamVjdF9uZXcoY29uc3QgRXdrX0pTX0NsYXNzX01ldGEq
IGpzTWV0YUNsYXNzKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAg
ICAgICB9Ci0gICAgICAgIGVpbmFfaGFzaF9hZGQob2JqLT5wcm9wZXJ0aWVzLCBrZXksIHZhbHVl
KTsKKyAgICAgICAgZWluYV9oYXNoX2FkZChvYmplY3QtPnByb3BlcnRpZXMsIGtleSwgdmFsdWUp
OwogICAgIH0KIAotICAgIG9iai0+YmFzZS5vYmplY3QucmVmZXJlbmNlQ291bnQgPSAxOwotICAg
IG9iai0+YmFzZS5vYmplY3QuX2NsYXNzID0gJkVXS19OUENMQVNTOwotICAgIHJldHVybiBvYmo7
CisgICAgb2JqZWN0LT5iYXNlLm9iamVjdC5yZWZlcmVuY2VDb3VudCA9IDE7CisgICAgb2JqZWN0
LT5iYXNlLm9iamVjdC5fY2xhc3MgPSAmRVdLX05QQ0xBU1M7CisgICAgcmV0dXJuIG9iamVjdDsK
IAogZXJyb3I6Ci0gICAgZXdrX2pzX29iamVjdF9mcmVlKG9iaik7CisgICAgZXdrX2pzX29iamVj
dF9mcmVlKG9iamVjdCk7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTY2Miw3ICs2NjIsNyBAQCBF
d2tfSlNfT2JqZWN0X1R5cGUgZXdrX2pzX29iamVjdF90eXBlX2dldChFd2tfSlNfT2JqZWN0KiBq
c09iamVjdCkKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoanNPYmplY3QsIEVX
S19KU19PQkpFQ1RfT0JKRUNUKTsKICAgICBFSU5BX01BR0lDX0NIRUNLX09SX1JFVFVSTihqc09v
YmplY3QsIEVXS19KU19PQkpFQ1RfT0JKRUNUKTsKIAotICAgIHJldHVybiBvYmotPnR5cGU7Cisg
ICAgcmV0dXJuIG9iamVjdC0+dHlwZTsKIH0KIAogdm9pZCBld2tfanNfb2JqZWN0X3R5cGVfc2V0
KEV3a19KU19PYmplY3QqIGpzT2JqZWN0LCBFd2tfSlNfT2JqZWN0X1R5cGUgdHlwZSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfbWFpbi5jcHAgYi9Tb3VyY2UvV2ViS2l0
L2VmbC9ld2svZXdrX21haW4uY3BwCmluZGV4IGViMDMyMzMyNGJhZTgxZmUxMjhkNjhiODE3YTll
YmE2OGYxZjRhNmIuLmM1MmMwMmIwOWY5MTUzNmEzMjI4MTg4NmRlYjNmYmIzNWJlMDNlYjAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfbWFpbi5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9lZmwvZXdrL2V3a19tYWluLmNwcApAQCAtNTcsNyArNTcsNyBAQAogI2luY2x1ZGUg
PGxpYnNvdXAvc291cC5oPgogI2VuZGlmCiAKLXN0YXRpYyBpbnQgX2V3a19pbml0X2NvdW50ID0g
MDsKK3N0YXRpYyBpbnQgX2V3a0luaXRDb3VudCA9IDA7CiAKIC8qKgogICogXHZhciAgICAgX2V3
a19sb2dfZG9tCkBAIC02OSw4ICs2OSw4IEBAIHN0YXRpYyBFaW5hX0Jvb2wgX2V3a19pbml0X2Jv
ZHkodm9pZCk7CiAKIGludCBld2tfaW5pdCh2b2lkKQogewotICAgIGlmIChfZXdrX2luaXRfY291
bnQpCi0gICAgICAgIHJldHVybiArK19ld2tfaW5pdF9jb3VudDsKKyAgICBpZiAoX2V3a0luaXRD
b3VudCkKKyAgICAgICAgcmV0dXJuICsrX2V3a0luaXRDb3VudDsKIAogICAgIGlmICghZWluYV9p
bml0KCkpCiAgICAgICAgIGdvdG8gZXJyb3JfZWluYTsKQEAgLTEwNiw3ICsxMDYsNyBAQCBpbnQg
ZXdrX2luaXQodm9pZCkKICAgICAgICAgZ290byBlcnJvcl9lZGplOwogICAgIH0KIAotICAgIHJl
dHVybiArK19ld2tfaW5pdF9jb3VudDsKKyAgICByZXR1cm4gKytfZXdrSW5pdENvdW50OwogCiBl
cnJvcl9lZGplOgogICAgIGVjb3JlX2V2YXNfc2h1dGRvd24oKTsKQEAgLTEyNSw5ICsxMjUsOSBA
QCBlcnJvcl9laW5hOgogCiBpbnQgZXdrX3NodXRkb3duKHZvaWQpCiB7Ci0gICAgX2V3a19pbml0
X2NvdW50LS07Ci0gICAgaWYgKF9ld2tfaW5pdF9jb3VudCkKLSAgICAgICAgcmV0dXJuIF9ld2tf
aW5pdF9jb3VudDsKKyAgICBfZXdrSW5pdENvdW50LS07CisgICAgaWYgKF9ld2tJbml0Q291bnQp
CisgICAgICAgIHJldHVybiBfZXdrSW5pdENvdW50OwogCiAgICAgZWNvcmVfZXZhc19zaHV0ZG93
bigpOwogICAgIGVjb3JlX3NodXRkb3duKCk7CkBAIC0xNzksMTAgKzE3OSwxMCBAQCBFaW5hX0Jv
b2wgX2V3a19pbml0X2JvZHkodm9pZCkKICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CiAgICAg
fQogCi0gICAgV1RGOjpTdHJpbmcgd2tkaXIgPSBob21lICsgIi8ud2Via2l0IjsKLSAgICBpZiAo
V2ViQ29yZTo6bWFrZUFsbERpcmVjdG9yaWVzKHdrZGlyKSkgewotICAgICAgICBld2tfc2V0dGlu
Z3Nfd2ViX2RhdGFiYXNlX3BhdGhfc2V0KHdrZGlyLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICBl
d2tfc2V0dGluZ3NfY2FjaGVfZGlyZWN0b3J5X3BhdGhfc2V0KHdrZGlyLnV0ZjgoKS5kYXRhKCkp
OworICAgIFdURjo6U3RyaW5nIHdlYmtpdERpcmVjdG9yeSA9IGhvbWUgKyAiLy53ZWJraXQiOwor
ICAgIGlmIChXZWJDb3JlOjptYWtlQWxsRGlyZWN0b3JpZXMod2Via2l0RGlyZWN0b3J5KSkgewor
ICAgICAgICBld2tfc2V0dGluZ3Nfd2ViX2RhdGFiYXNlX3BhdGhfc2V0KHdlYmtpdERpcmVjdG9y
eS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgZXdrX3NldHRpbmdzX2NhY2hlX2RpcmVjdG9yeV9w
YXRoX3NldCh3ZWJraXREaXJlY3RvcnkudXRmOCgpLmRhdGEoKSk7CiAgICAgfQogCiAgICAgLy8g
VE9ETzogdGhpcyBzaG91bGQgbW92ZSB0byBXZWJDb3JlLCBhbHJlYWR5IHJlcG9ydGVkIHRvIHdl
YmtpdC1ndGsgZm9sa3M6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3Nl
dHRpbmdzLmNwcCBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfc2V0dGluZ3MuY3BwCmluZGV4
IGYwYmE2ZWJjYjJmN2U1ZGMxMTFmZWM0NWI1ZjZjY2Q1MDM5ODNlYTYuLjY0ZjE0Zjg1NGMzZDcw
YTNiZGE4MGJiMTY0Yzg2Y2QxMWNlNmYwZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZs
L2V3ay9ld2tfc2V0dGluZ3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfc2V0
dGluZ3MuY3BwCkBAIC01NiwyNiArNTYsMjYgQEAgc3RhdGljIHVpbnQ2NF90IF9ld2tfZGVmYXVs
dF93ZWJfZGF0YWJhc2VfcXVvdGEgPSAxICogMTAyNCAqIDEwMjQ7CiAKIHN0YXRpYyBXVEY6OlN0
cmluZyBfZXdrX3NldHRpbmdzX3dlYmtpdF9wbGF0Zm9ybV9nZXQoKQogewotICAgIFdURjo6U3Ry
aW5nIHVhX3BsYXRmb3JtOworICAgIFdURjo6U3RyaW5nIHVhUGxhdGZvcm07CiAjaWYgUExBVEZP
Uk0oWDExKQotICAgIHVhX3BsYXRmb3JtID0gIlgxMSI7CisgICAgdWFQbGF0Zm9ybSA9ICJYMTEi
OwogI2Vsc2UKLSAgICB1YV9wbGF0Zm9ybSA9ICJVbmtub3duIjsKKyAgICB1YVBsYXRmb3JtID0g
IlVua25vd24iOwogI2VuZGlmCi0gICAgcmV0dXJuIHVhX3BsYXRmb3JtOworICAgIHJldHVybiB1
YVBsYXRmb3JtOwogfQogCiBzdGF0aWMgV1RGOjpTdHJpbmcgX2V3a19zZXR0aW5nc193ZWJraXRf
b3NfdmVyc2lvbl9nZXQoKQogewotICAgIFdURjo6U3RyaW5nIHVhX29zX3ZlcnNpb247CisgICAg
V1RGOjpTdHJpbmcgdWFPc1ZlcnNpb247CiAgICAgc3RydWN0IHV0c25hbWUgbmFtZTsKIAogICAg
IGlmICh1bmFtZSgmbmFtZSkgIT0gLTEpCi0gICAgICAgIHVhX29zX3ZlcnNpb24gPSBtYWtlU3Ry
aW5nKG5hbWUuc3lzbmFtZSwgJyAnLCBuYW1lLm1hY2hpbmUpOworICAgICAgICB1YU9zVmVyc2lv
biA9IG1ha2VTdHJpbmcobmFtZS5zeXNuYW1lLCAnICcsIG5hbWUubWFjaGluZSk7CiAgICAgZWxz
ZQotICAgICAgICB1YV9vc192ZXJzaW9uID0gIlVua25vd24iOworICAgICAgICB1YU9zVmVyc2lv
biA9ICJVbmtub3duIjsKIAotICAgIHJldHVybiB1YV9vc192ZXJzaW9uOworICAgIHJldHVybiB1
YU9zVmVyc2lvbjsKIH0KIAogdWludDY0X3QgZXdrX3NldHRpbmdzX3dlYl9kYXRhYmFzZV9kZWZh
dWx0X3F1b3RhX2dldCgpCkBAIC0yNDUsMTAgKzI0NSwxMCBAQCB2b2lkIGV3a19zZXR0aW5nc19y
ZXBhaW50X3Rocm90dGxpbmdfc2V0KGRvdWJsZSBkZWZlcnJlZFJlcGFpbnREZWxheSwgZG91Ymxl
IGluaQogICovCiBjb25zdCBjaGFyKiBld2tfc2V0dGluZ3NfZGVmYXVsdF91c2VyX2FnZW50X2dl
dCh2b2lkKQogewotICAgIFdURjo6U3RyaW5nIHVhX3ZlcnNpb24gPSBtYWtlU3RyaW5nKFN0cmlu
Zzo6bnVtYmVyKFdFQktJVF9VU0VSX0FHRU5UX01BSk9SX1ZFUlNJT04pLCAnLicsIFN0cmluZzo6
bnVtYmVyKFdFQktJVF9VU0VSX0FHRU5UX01JTk9SX1ZFUlNJT04pLCAnKycpOwotICAgIFdURjo6
U3RyaW5nIHN0YXRpY191YSA9IG1ha2VTdHJpbmcoIk1vemlsbGEvNS4wICgiLCBfZXdrX3NldHRp
bmdzX3dlYmtpdF9wbGF0Zm9ybV9nZXQoKSwgIjsgIiwgX2V3a19zZXR0aW5nc193ZWJraXRfb3Nf
dmVyc2lvbl9nZXQoKSwgIikgQXBwbGVXZWJLaXQvIiwgdWFfdmVyc2lvbikgKyBtYWtlU3RyaW5n
KCIgKEtIVE1MLCBsaWtlIEdlY2tvKSBWZXJzaW9uLzUuMCBTYWZhcmkvIiwgdWFfdmVyc2lvbik7
CisgICAgV1RGOjpTdHJpbmcgdWFWZXJzaW9uID0gbWFrZVN0cmluZyhTdHJpbmc6Om51bWJlcihX
RUJLSVRfVVNFUl9BR0VOVF9NQUpPUl9WRVJTSU9OKSwgJy4nLCBTdHJpbmc6Om51bWJlcihXRUJL
SVRfVVNFUl9BR0VOVF9NSU5PUl9WRVJTSU9OKSwgJysnKTsKKyAgICBXVEY6OlN0cmluZyBzdGF0
aWNVYSA9IG1ha2VTdHJpbmcoIk1vemlsbGEvNS4wICgiLCBfZXdrX3NldHRpbmdzX3dlYmtpdF9w
bGF0Zm9ybV9nZXQoKSwgIjsgIiwgX2V3a19zZXR0aW5nc193ZWJraXRfb3NfdmVyc2lvbl9nZXQo
KSwgIikgQXBwbGVXZWJLaXQvIiwgdWFWZXJzaW9uKSArIG1ha2VTdHJpbmcoIiAoS0hUTUwsIGxp
a2UgR2Vja28pIFZlcnNpb24vNS4wIFNhZmFyaS8iLCB1YVZlcnNpb24pOwogCi0gICAgcmV0dXJu
IGVpbmFfc3RyaW5nc2hhcmVfYWRkKHN0YXRpY191YS51dGY4KCkuZGF0YSgpKTsKKyAgICByZXR1
cm4gZWluYV9zdHJpbmdzaGFyZV9hZGQoc3RhdGljVWEudXRmOCgpLmRhdGEoKSk7CiB9CiAKIEVp
bmFfQm9vbCBld2tfc2V0dGluZ3NfY2FjaGVfZGlyZWN0b3J5X3BhdGhfc2V0KGNvbnN0IGNoYXIq
IHBhdGgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmUuY3BwIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a190aWxlZF9iYWNraW5nX3N0
b3JlLmNwcAppbmRleCA3OTRhOTBjNTc0NmY2MGU1MjNiNmRlNWUyNTJiYmNiMDUxYjA3NTY0Li4w
NThmNjA5NDA0N2E0MmM5NGFiNDI3ZTI1Zjk3YTM0MWI3OTA3NTBiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfYmFja2luZ19zdG9yZS5jcHAKQEAgLTU1LDE0ICs1
NSwxNCBAQCBzdHJ1Y3QgX0V3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gewogCiBzdHJ1Y3Qg
X0V3a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUmVxdWVzdCB7CiAgICAgRUlOQV9J
TkxJU1Q7Ci0gICAgdW5zaWduZWQgbG9uZyBjb2wsIHJvdzsKKyAgICB1bnNpZ25lZCBsb25nIGNv
bHVtbiwgcm93OwogICAgIGZsb2F0IHpvb207CiB9OwogCiBzdHJ1Y3QgX0V3a19UaWxlZF9CYWNr
aW5nX1N0b3JlX0RhdGEgewogICAgIEV2YXNfT2JqZWN0X1NtYXJ0X0NsaXBwZWRfRGF0YSBiYXNl
OwogICAgIEV2YXNfT2JqZWN0KiBzZWxmOwotICAgIEV2YXNfT2JqZWN0KiBjb250ZW50c19jbGlw
cGVyOworICAgIEV2YXNfT2JqZWN0KiBjb250ZW50c0NsaXBwZXI7CiAgICAgc3RydWN0IHsKICAg
ICAgICAgRWluYV9Jbmxpc3QqKiBpdGVtczsKICAgICAgICAgRXZhc19Db29yZCB4LCB5LCB3aWR0
aCwgaGVpZ2h0OwpAQCAtNzAsNDIgKzcwLDQyIEBAIHN0cnVjdCBfRXdrX1RpbGVkX0JhY2tpbmdf
U3RvcmVfRGF0YSB7CiAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICBFdmFzX0Nvb3JkIHdp
ZHRoLCBoZWlnaHQ7CiAgICAgICAgICAgICBmbG9hdCB6b29tOwotICAgICAgICAgICAgRWluYV9C
b29sIHpvb21fd2Vha19zbW9vdGhfc2NhbGUgOiAxOworICAgICAgICAgICAgRWluYV9Cb29sIHpv
b21XZWFrU21vb3RoU2NhbGUgOiAxOwogICAgICAgICB9IHRpbGU7CiAgICAgICAgIHN0cnVjdCB7
CiAgICAgICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgIEV2YXNfQ29vcmQgeCwgeTsK
LSAgICAgICAgICAgIH0gY3VyLCBvbGQsIGJhc2UsIHpvb21fY2VudGVyOworICAgICAgICAgICAg
fSBjdXIsIG9sZCwgYmFzZSwgem9vbUNlbnRlcjsKICAgICAgICAgfSBvZmZzZXQ7CiAgICAgfSB2
aWV3OwotICAgIEV2YXNfQ29sb3JzcGFjZSBjc3BhY2U7CisgICAgRXZhc19Db2xvcnNwYWNlIGNv
bG9yU3BhY2U7CiAgICAgc3RydWN0IHsKICAgICAgICAgRXdrX1RpbGVfTWF0cml4KiBtYXRyaXg7
CiAgICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBsb25nIGNvbCwgcm93Owor
ICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBjb2x1bW4sIHJvdzsKICAgICAgICAgfSBiYXNlOwog
ICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBjb2xzLCByb3dzOwot
ICAgICAgICB9IGN1ciwgb2xkOworICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBjb2x1bW5zLCBy
b3dzOworICAgICAgICB9IGN1cnJlbnQsIG9sZDsKICAgICAgICAgRXZhc19Db29yZCB3aWR0aCwg
aGVpZ2h0OwogICAgIH0gbW9kZWw7CiAgICAgc3RydWN0IHsKLSAgICAgICAgRWluYV9Cb29sICgq
Y2IpKHZvaWQqIGRhdGEsIEV3a19UaWxlKiB0aWxlLCBjb25zdCBFaW5hX1JlY3RhbmdsZSogYXJl
YSk7CisgICAgICAgIEVpbmFfQm9vbCAoKmNhbGxiYWNrKSh2b2lkKiBkYXRhLCBFd2tfVGlsZSog
dGlsZSwgY29uc3QgRWluYV9SZWN0YW5nbGUqIGFyZWEpOwogICAgICAgICB2b2lkKiBkYXRhOwot
ICAgICAgICBFaW5hX0lubGlzdCogcHJlX3JlbmRlcl9yZXF1ZXN0czsKKyAgICAgICAgRWluYV9J
bmxpc3QqIHByZVJlbmRlclJlcXVlc3RzOwogICAgICAgICBFY29yZV9JZGxlciogaWRsZXI7CiAg
ICAgICAgIEVpbmFfQm9vbCBkaXNhYmxlZDsKICAgICAgICAgRWluYV9Cb29sIHN1c3BlbmQgOiAx
OwogICAgIH0gcmVuZGVyOwogICAgIHN0cnVjdCB7Ci0gICAgICAgIHZvaWQqICgqcHJlX2NiKSh2
b2lkKiBkYXRhLCBFdmFzX09iamVjdCogZXdrVGlsZSk7Ci0gICAgICAgIHZvaWQqIHByZV9kYXRh
OwotICAgICAgICB2b2lkKiAoKnBvc3RfY2IpKHZvaWQqIGRhdGEsIHZvaWQqIHByZV9kYXRhLCBF
dmFzX09iamVjdCogZXdrVGlsZSk7Ci0gICAgICAgIHZvaWQqIHBvc3RfZGF0YTsKKyAgICAgICAg
dm9pZCogKCpwcmVDYWxsYmFjaykodm9pZCogZGF0YSwgRXZhc19PYmplY3QqIGV3a1RpbGUpOwor
ICAgICAgICB2b2lkKiBwcmVEYXRhOworICAgICAgICB2b2lkKiAoKnBvc3RDYWxsYmFjaykodm9p
ZCogZGF0YSwgdm9pZCogcHJlRGF0YSwgRXZhc19PYmplY3QqIGV3a1RpbGUpOworICAgICAgICB2
b2lkKiBwb3N0RGF0YTsKICAgICB9IHByb2Nlc3M7CiAgICAgc3RydWN0IHsKICAgICAgICAgRWlu
YV9Cb29sIGFueSA6IDE7Ci0gICAgICAgIEVpbmFfQm9vbCBwb3MgOiAxOworICAgICAgICBFaW5h
X0Jvb2wgcG9zaXRpb24gOiAxOwogICAgICAgICBFaW5hX0Jvb2wgc2l6ZSA6IDE7CiAgICAgICAg
IEVpbmFfQm9vbCBtb2RlbCA6IDE7CiAgICAgICAgIEVpbmFfQm9vbCBvZmZzZXQgOiAxOwpAQCAt
MTQwLDIzICsxNDAsMjMgQEAgc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV91cGRhdGVzX3Byb2Nlc3MoRXdrX1RpbGVkX0JhY2tpbmdfU3QKICAgICBpZiAocHJpdi0+
cmVuZGVyLnN1c3BlbmQgfHwgIWV2YXNfb2JqZWN0X3Zpc2libGVfZ2V0KHByaXYtPnNlbGYpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBpZiAocHJpdi0+cHJvY2Vzcy5wcmVfY2IpCi0gICAgICAg
IGRhdGEgPSBwcml2LT5wcm9jZXNzLnByZV9jYihwcml2LT5wcm9jZXNzLnByZV9kYXRhLCBwcml2
LT5zZWxmKTsKKyAgICBpZiAocHJpdi0+cHJvY2Vzcy5wcmVDYWxsYmFjaykKKyAgICAgICAgZGF0
YSA9IHByaXYtPnByb2Nlc3MucHJlQ2FsbGJhY2socHJpdi0+cHJvY2Vzcy5wcmVEYXRhLCBwcml2
LT5zZWxmKTsKIAogICAgIGV3a190aWxlX21hdHJpeF91cGRhdGVzX3Byb2Nlc3MocHJpdi0+bW9k
ZWwubWF0cml4KTsKIAotICAgIGlmIChwcml2LT5wcm9jZXNzLnBvc3RfY2IpCi0gICAgICAgIHBy
aXYtPnByb2Nlc3MucG9zdF9jYihwcml2LT5wcm9jZXNzLnBvc3RfZGF0YSwgZGF0YSwgcHJpdi0+
c2VsZik7CisgICAgaWYgKHByaXYtPnByb2Nlc3MucG9zdENhbGxiYWNrKQorICAgICAgICBwcml2
LT5wcm9jZXNzLnBvc3RDYWxsYmFjayhwcml2LT5wcm9jZXNzLnBvc3REYXRhLCBkYXRhLCBwcml2
LT5zZWxmKTsKIH0KIAogc3RhdGljIGludCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZmx1c2go
dm9pZCogZGF0YSkKIHsKICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2ID0g
c3RhdGljX2Nhc3Q8RXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSo+KGRhdGEpOwotICAgIEV3
a19UaWxlX1VudXNlZF9DYWNoZSogdHVjID0gZXdrX3RpbGVfbWF0cml4X3VudXNlZF9jYWNoZV9n
ZXQocHJpdi0+bW9kZWwubWF0cml4KTsKKyAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHRpbGVk
VW51c2VkQ2FjaGUgPSBld2tfdGlsZV9tYXRyaXhfdW51c2VkX2NhY2hlX2dldChwcml2LT5tb2Rl
bC5tYXRyaXgpOwogCi0gICAgaWYgKHR1YykgeworICAgIGlmICh0aWxlZFVudXNlZENhY2hlKSB7
CiAgICAgICAgIERCRygiZmx1c2ggdW51c2VkIHRpbGUgY2FjaGUuIik7Ci0gICAgICAgIGV3a190
aWxlX3VudXNlZF9jYWNoZV9hdXRvX2ZsdXNoKHR1Yyk7CisgICAgICAgIGV3a190aWxlX3VudXNl
ZF9jYWNoZV9hdXRvX2ZsdXNoKHRpbGVkVW51c2VkQ2FjaGUpOwogICAgIH0gZWxzZQogICAgICAg
ICBFUlIoIm5vIGNhY2hlPyEiKTsKIApAQCAtMjIyLDI3ICsyMjIsMjcgQEAgc3RhdGljIHZvaWQg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfYXNzb2NpYXRlKEV3a19UaWxlZF9CYWNraW5n
X1N0b3JlX0RhdGEKIAogc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVf
ZGlzc29jaWF0ZShFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2LCBFd2tfVGlsZWRf
QmFja2luZ19TdG9yZV9JdGVtKiBpdGVtLCBkb3VibGUgbGFzdFVzZWQpCiB7Ci0gICAgRXdrX1Rp
bGVfVW51c2VkX0NhY2hlKiB0dWM7CisgICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0aWxlZFVu
dXNlZENhY2hlOwogICAgIGV3a190aWxlX2hpZGUoaXRlbS0+dGlsZSk7CiAgICAgaWYgKCFld2tf
dGlsZV92aXNpYmxlX2dldChpdGVtLT50aWxlKSkKICAgICAgICAgZXZhc19vYmplY3Rfc21hcnRf
bWVtYmVyX2RlbChpdGVtLT50aWxlLT5pbWFnZSk7CiAgICAgZXdrX3RpbGVfbWF0cml4X3RpbGVf
cHV0KHByaXYtPm1vZGVsLm1hdHJpeCwgaXRlbS0+dGlsZSwgbGFzdFVzZWQpOwotICAgIHR1YyA9
IGV3a190aWxlX21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7Ci0g
ICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2F1dG9fZmx1c2godHVjKTsKKyAgICB0aWxlZFVudXNl
ZENhY2hlID0gZXdrX3RpbGVfbWF0cml4X3VudXNlZF9jYWNoZV9nZXQocHJpdi0+bW9kZWwubWF0
cml4KTsKKyAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfYXV0b19mbHVzaCh0aWxlZFVudXNlZENh
Y2hlKTsKIAogICAgIGl0ZW0tPnRpbGUgPSAwOwogfQogCiBzdGF0aWMgdm9pZCBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfdGlsZV9kaXNzb2NpYXRlX2FsbChFd2tfVGlsZWRfQmFja2luZ19TdG9y
ZV9EYXRhKiBwcml2KQogewotICAgIEVpbmFfSW5saXN0KiBpdDsKKyAgICBFaW5hX0lubGlzdCog
bGlzdDsKICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKiBpdGVtOwogICAgIGludCBp
OwogICAgIGRvdWJsZSBsYXN0X3VzZWQgPSBlY29yZV9sb29wX3RpbWVfZ2V0KCk7CiAKICAgICBm
b3IgKGkgPSAwOyBpIDwgcHJpdi0+dmlldy5yb3dzOyBpKyspIHsKLSAgICAgICAgaXQgPSBwcml2
LT52aWV3Lml0ZW1zW2ldOwotICAgICAgICBFSU5BX0lOTElTVF9GT1JFQUNIKGl0LCBpdGVtKQor
ICAgICAgICBsaXN0ID0gcHJpdi0+dmlldy5pdGVtc1tpXTsKKyAgICAgICAgRUlOQV9JTkxJU1Rf
Rk9SRUFDSChsaXN0LCBpdGVtKQogICAgICAgICAgICAgaWYgKGl0ZW0tPnRpbGUpCiAgICAgICAg
ICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfZGlzc29jaWF0ZShwcml2LCBp
dGVtLCBsYXN0X3VzZWQpOwogICAgIH0KQEAgLTI1MCw5MiArMjUwLDkyIEBAIHN0YXRpYyB2b2lk
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2Rpc3NvY2lhdGVfYWxsKEV3a19UaWxlZF9C
YWNraW5nX1N0b3JlCiAKIHN0YXRpYyBpbmxpbmUgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfYWRkKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0Rh
dGEqIHByaXYsIHVuc2lnbmVkIGxvbmcgY29sdW1uLCB1bnNpZ25lZCBsb25nIHJvdywgZmxvYXQg
em9vbSwgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9Qcmlvcml0eSBwcmlvcml0
eSkKIHsKLSAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QqIHI7
CisgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0KiByZXF1ZXN0
OwogCi0gICAgciA9IHN0YXRpY19jYXN0PEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5k
ZXJfUmVxdWVzdCo+KG1hbGxvYyhzaXplb2YoKnIpKSk7Ci0gICAgaWYgKCFyKQorICAgIHJlcXVl
c3QgPSBzdGF0aWNfY2FzdDxFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVl
c3QqPihtYWxsb2Moc2l6ZW9mKCpyZXF1ZXN0KSkpOworICAgIGlmICghcmVxdWVzdCkKICAgICAg
ICAgcmV0dXJuIEVJTkFfRkFMU0U7CiAKICAgICBpZiAocHJpb3JpdHkgPT0gUFJFX1JFTkRFUl9Q
UklPUklUWV9ISUdIKQotICAgICAgICBwcml2LT5yZW5kZXIucHJlX3JlbmRlcl9yZXF1ZXN0cyA9
IGVpbmFfaW5saXN0X3ByZXBlbmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKHByaXYtPnJlbmRlci5wcmVfcmVuZGVyX3JlcXVlc3RzLCBFSU5BX0lOTElT
VF9HRVQocikpOworICAgICAgICBwcml2LT5yZW5kZXIucHJlUmVuZGVyUmVxdWVzdHMgPSBlaW5h
X2lubGlzdF9wcmVwZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChwcml2LT5yZW5kZXIucHJlUmVuZGVyUmVxdWVzdHMsIEVJTkFfSU5MSVNUX0dFVChy
ZXF1ZXN0KSk7CiAgICAgZWxzZQotICAgICAgICBwcml2LT5yZW5kZXIucHJlX3JlbmRlcl9yZXF1
ZXN0cyA9IGVpbmFfaW5saXN0X2FwcGVuZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAocHJpdi0+cmVuZGVyLnByZV9yZW5kZXJfcmVxdWVzdHMsIEVJTkFf
SU5MSVNUX0dFVChyKSk7CisgICAgICAgIHByaXYtPnJlbmRlci5wcmVSZW5kZXJSZXF1ZXN0cyA9
IGVpbmFfaW5saXN0X2FwcGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAocHJpdi0+cmVuZGVyLnByZVJlbmRlclJlcXVlc3RzLCBFSU5BX0lOTElTVF9H
RVQocmVxdWVzdCkpOwogCi0gICAgci0+Y29sID0gY29sdW1uOwotICAgIHItPnJvdyA9IHJvdzsK
LSAgICByLT56b29tID0gem9vbTsKKyAgICByZXF1ZXN0LT5jb2x1bW4gPSBjb2x1bW47CisgICAg
cmVxdWVzdC0+cm93ID0gcm93OworICAgIHJlcXVlc3QtPnpvb20gPSB6b29tOwogCiAgICAgcmV0
dXJuIEVJTkFfVFJVRTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfZGVsKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0Rh
dGEqIHByaXYsIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUmVxdWVzdCogcmVx
dWVzdCkKIHsKLSAgICBwcml2LT5yZW5kZXIucHJlX3JlbmRlcl9yZXF1ZXN0cyA9IGVpbmFfaW5s
aXN0X3JlbW92ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChw
cml2LT5yZW5kZXIucHJlX3JlbmRlcl9yZXF1ZXN0cywgRUlOQV9JTkxJU1RfR0VUKHJlcXVlc3Qp
KTsKKyAgICBwcml2LT5yZW5kZXIucHJlUmVuZGVyUmVxdWVzdHMgPSBlaW5hX2lubGlzdF9yZW1v
dmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocHJpdi0+cmVu
ZGVyLnByZVJlbmRlclJlcXVlc3RzLCBFSU5BX0lOTElTVF9HRVQocmVxdWVzdCkpOwogICAgIGZy
ZWUocmVxdWVzdCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVf
UHJlX1JlbmRlcl9SZXF1ZXN0KiBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9y
ZXF1ZXN0X2ZpcnN0KGNvbnN0IEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYpCiB7
CiAgICAgcmV0dXJuIEVJTkFfSU5MSVNUX0NPTlRBSU5FUl9HRVQoCi0gICAgICAgICAgICAgICBw
cml2LT5yZW5kZXIucHJlX3JlbmRlcl9yZXF1ZXN0cywKKyAgICAgICAgICAgICAgIHByaXYtPnJl
bmRlci5wcmVSZW5kZXJSZXF1ZXN0cywKICAgICAgICAgICAgICAgIEV3a19UaWxlZF9CYWNraW5n
X1N0b3JlX1ByZV9SZW5kZXJfUmVxdWVzdCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfZmx1c2goRXdrX1RpbGVkX0JhY2tpbmdf
U3RvcmVfRGF0YSogcHJpdikKIHsKLSAgICBFaW5hX0lubGlzdCoqIHBsID0gJnByaXYtPnJlbmRl
ci5wcmVfcmVuZGVyX3JlcXVlc3RzOwotICAgIHdoaWxlICgqcGwpIHsKLSAgICAgICAgRXdrX1Rp
bGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0KiByOwotICAgICAgICByID0gX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9maXJzdChwcml2KTsKLSAg
ICAgICAgKnBsID0gZWluYV9pbmxpc3RfcmVtb3ZlKCpwbCwgKnBsKTsKLSAgICAgICAgZnJlZShy
KTsKKyAgICBFaW5hX0lubGlzdCoqIHByZVJlbmRlckxpc3QgPSAmcHJpdi0+cmVuZGVyLnByZVJl
bmRlclJlcXVlc3RzOworICAgIHdoaWxlICgqcHJlUmVuZGVyTGlzdCkgeworICAgICAgICBFd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QqIHJlcXVlc3Q7CisgICAgICAg
IHJlcXVlc3QgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2Zp
cnN0KHByaXYpOworICAgICAgICAqcHJlUmVuZGVyTGlzdCA9IGVpbmFfaW5saXN0X3JlbW92ZSgq
cHJlUmVuZGVyTGlzdCwgKnByZVJlbmRlckxpc3QpOworICAgICAgICBmcmVlKHJlcXVlc3QpOwog
ICAgIH0KIH0KIAogc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5k
ZXJfcmVxdWVzdF9jbGVhcihFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2KQogewot
ICAgIEVpbmFfSW5saXN0KiogcGwgPSAmcHJpdi0+cmVuZGVyLnByZV9yZW5kZXJfcmVxdWVzdHM7
Ci0gICAgRWluYV9Jbmxpc3QqIGl0ZXIgPSAqcGwsICogdG1wOworICAgIEVpbmFfSW5saXN0Kiog
cHJlUmVuZGVyTGlzdCA9ICZwcml2LT5yZW5kZXIucHJlUmVuZGVyUmVxdWVzdHM7CisgICAgRWlu
YV9Jbmxpc3QqIGl0ZXIgPSAqcHJlUmVuZGVyTGlzdCwgKnRtcDsKICAgICB3aGlsZSAoaXRlcikg
ewotICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QqIHIg
PQorICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QqIHJl
cXVlc3QgPQogICAgICAgICAgICAgRUlOQV9JTkxJU1RfQ09OVEFJTkVSX0dFVCgKICAgICAgICAg
ICAgICAgICBpdGVyLCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3Qp
OwogICAgICAgICB0bXAgPSBpdGVyLT5uZXh0OwotICAgICAgICAqcGwgPSBlaW5hX2lubGlzdF9y
ZW1vdmUoKnBsLCBpdGVyKTsKKyAgICAgICAgKnByZVJlbmRlckxpc3QgPSBlaW5hX2lubGlzdF9y
ZW1vdmUoKnByZVJlbmRlckxpc3QsIGl0ZXIpOwogICAgICAgICBpdGVyID0gdG1wOwotICAgICAg
ICBmcmVlKHIpOworICAgICAgICBmcmVlKHJlcXVlc3QpOwogICAgIH0KIH0KIAogLyogYXNzdW1l
cyBwcml2LT5wcm9jZXNzLnByZV9jYiB3YXMgY2FsbGVkIGlmIHJlcXVpcmVkISAqLwogc3RhdGlj
IHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9wcm9jZXNz
X3NpbmdsZShFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2KQogewotICAgIEV3a19U
aWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUmVxdWVzdCogcmVxOworICAgIEV3a19UaWxl
ZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUmVxdWVzdCogcmVxdWVzdDsKICAgICBFaW5hX1Jl
Y3RhbmdsZSBhcmVhOwotICAgIEV3a19UaWxlX01hdHJpeCogdG0gPSBwcml2LT5tb2RlbC5tYXRy
aXg7CisgICAgRXdrX1RpbGVfTWF0cml4KiB0aWxlTWF0cml4ID0gcHJpdi0+bW9kZWwubWF0cml4
OwogICAgIEV3a19UaWxlKiB0aWxlOwotICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSogdHVjOwot
ICAgIHVuc2lnbmVkIGxvbmcgY29sLCByb3c7CisgICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0
aWxlZFVudXNlZENhY2hlOworICAgIHVuc2lnbmVkIGxvbmcgY29sdW1uLCByb3c7CiAgICAgZmxv
YXQgem9vbTsKICAgICBkb3VibGUgbGFzdF91c2VkID0gZWNvcmVfbG9vcF90aW1lX2dldCgpOwog
Ci0gICAgcmVxID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9m
aXJzdChwcml2KTsKLSAgICBpZiAoIXJlcSkKKyAgICByZXF1ZXN0ID0gX2V3a190aWxlZF9iYWNr
aW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9maXJzdChwcml2KTsKKyAgICBpZiAoIXJlcXVl
c3QpCiAgICAgICAgIHJldHVybjsKIAotICAgIGNvbCA9IHJlcS0+Y29sOwotICAgIHJvdyA9IHJl
cS0+cm93OwotICAgIHpvb20gPSByZXEtPnpvb207CisgICAgY29sdW1uID0gcmVxdWVzdC0+Y29s
dW1uOworICAgIHJvdyA9IHJlcXVlc3QtPnJvdzsKKyAgICB6b29tID0gcmVxdWVzdC0+em9vbTsK
IAotICAgIGlmIChld2tfdGlsZV9tYXRyaXhfdGlsZV9leGFjdF9leGlzdHModG0sIGNvbCwgcm93
LCB6b29tKSkgewotICAgICAgICBEQkcoIm5vIHByZS1yZW5kZXIgcmVxdWlyZWQgZm9yIHRpbGUg
JWx1LCVsdSBAICVmLiIsIGNvbCwgcm93LCB6b29tKTsKKyAgICBpZiAoZXdrX3RpbGVfbWF0cml4
X3RpbGVfZXhhY3RfZXhpc3RzKHRpbGVNYXRyaXgsIGNvbHVtbiwgcm93LCB6b29tKSkgeworICAg
ICAgICBEQkcoIm5vIHByZS1yZW5kZXIgcmVxdWlyZWQgZm9yIHRpbGUgJWx1LCVsdSBAICVmLiIs
IGNvbHVtbiwgcm93LCB6b29tKTsKICAgICAgICAgZ290byBlbmQ7CiAgICAgfQogCi0gICAgdGls
ZSA9IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX25ldyhwcml2LCBjb2wsIHJvdywgem9v
bSk7CisgICAgdGlsZSA9IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX25ldyhwcml2LCBj
b2x1bW4sIHJvdywgem9vbSk7CiAgICAgaWYgKCF0aWxlKQogICAgICAgICBnb3RvIGVuZDsKIApA
QCAtMzQ0LDMzICszNDQsMzMgQEAgc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3ByZV9yZW5kZXJfcmVxdWVzdF9wcm9jZXNzX3NpbmdsZShFd2tfVGlsZWQKICAgICBhcmVhLncg
PSBwcml2LT52aWV3LnRpbGUud2lkdGg7CiAgICAgYXJlYS5oID0gcHJpdi0+dmlldy50aWxlLmhl
aWdodDsKIAotICAgIHByaXYtPnJlbmRlci5jYihwcml2LT5yZW5kZXIuZGF0YSwgdGlsZSwgJmFy
ZWEpOworICAgIHByaXYtPnJlbmRlci5jYWxsYmFjayhwcml2LT5yZW5kZXIuZGF0YSwgdGlsZSwg
JmFyZWEpOwogICAgIGV2YXNfb2JqZWN0X2ltYWdlX2RhdGFfdXBkYXRlX2FkZCgKICAgICAgICAg
dGlsZS0+aW1hZ2UsCiAgICAgICAgIGFyZWEueCwgYXJlYS55LCBhcmVhLncsIGFyZWEuaCk7Ci0g
ICAgZXdrX3RpbGVfbWF0cml4X3RpbGVfdXBkYXRlc19jbGVhcih0bSwgdGlsZSk7CisgICAgZXdr
X3RpbGVfbWF0cml4X3RpbGVfdXBkYXRlc19jbGVhcih0aWxlTWF0cml4LCB0aWxlKTsKIAotICAg
IGV3a190aWxlX21hdHJpeF90aWxlX3B1dCh0bSwgdGlsZSwgbGFzdF91c2VkKTsKKyAgICBld2tf
dGlsZV9tYXRyaXhfdGlsZV9wdXQodGlsZU1hdHJpeCwgdGlsZSwgbGFzdF91c2VkKTsKIAogZW5k
OgotICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfZGVsKHBy
aXYsIHJlcSk7Ci0gICAgdHVjID0gZXdrX3RpbGVfbWF0cml4X3VudXNlZF9jYWNoZV9nZXQocHJp
di0+bW9kZWwubWF0cml4KTsKLSAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfYXV0b19mbHVzaCh0
dWMpOworICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfZGVs
KHByaXYsIHJlcXVlc3QpOworICAgIHRpbGVkVW51c2VkQ2FjaGUgPSBld2tfdGlsZV9tYXRyaXhf
dW51c2VkX2NhY2hlX2dldChwcml2LT5tb2RlbC5tYXRyaXgpOworICAgIGV3a190aWxlX3VudXNl
ZF9jYWNoZV9hdXRvX2ZsdXNoKHRpbGVkVW51c2VkQ2FjaGUpOwogfQogCiBzdGF0aWMgRWluYV9C
b29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Byb2Nlc3NfaWRsZXJfY2Iodm9pZCog
ZGF0YSkKIHsKICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2ID0gc3RhdGlj
X2Nhc3Q8RXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSo+KGRhdGEpOwogCi0gICAgaWYgKHBy
aXYtPnByb2Nlc3MucHJlX2NiKQotICAgICAgICBkYXRhID0gcHJpdi0+cHJvY2Vzcy5wcmVfY2Io
cHJpdi0+cHJvY2Vzcy5wcmVfZGF0YSwgcHJpdi0+c2VsZik7CisgICAgaWYgKHByaXYtPnByb2Nl
c3MucHJlQ2FsbGJhY2spCisgICAgICAgIGRhdGEgPSBwcml2LT5wcm9jZXNzLnByZUNhbGxiYWNr
KHByaXYtPnByb2Nlc3MucHJlRGF0YSwgcHJpdi0+c2VsZik7CiAKICAgICBfZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X3Byb2Nlc3Nfc2luZ2xlKHByaXYpOwogCi0g
ICAgaWYgKHByaXYtPnByb2Nlc3MucG9zdF9jYikKLSAgICAgICAgcHJpdi0+cHJvY2Vzcy5wb3N0
X2NiKHByaXYtPnByb2Nlc3MucG9zdF9kYXRhLCBkYXRhLCBwcml2LT5zZWxmKTsKKyAgICBpZiAo
cHJpdi0+cHJvY2Vzcy5wb3N0Q2FsbGJhY2spCisgICAgICAgIHByaXYtPnByb2Nlc3MucG9zdENh
bGxiYWNrKHByaXYtPnByb2Nlc3MucG9zdERhdGEsIGRhdGEsIHByaXYtPnNlbGYpOwogCi0gICAg
aWYgKCFwcml2LT5yZW5kZXIucHJlX3JlbmRlcl9yZXF1ZXN0cykgeworICAgIGlmICghcHJpdi0+
cmVuZGVyLnByZVJlbmRlclJlcXVlc3RzKSB7CiAgICAgICAgIHByaXYtPnJlbmRlci5pZGxlciA9
IDA7CiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwogICAgIH0KQEAgLTQyMCwzOCArNDIwLDM4
IEBAIHN0YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2VuYWJsZV9yZW5k
ZXIoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfCiAKIHN0YXRpYyBpbmxpbmUgRWluYV9Cb29sIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2ZpbGwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVf
RGF0YSogcHJpdiwgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSogaXRlbSwgdW5zaWduZWQg
bG9uZyBjb2x1bW4sIHVuc2lnbmVkIGxvbmcgcm93KQogewotICAgIHVuc2lnbmVkIGxvbmcgbV9j
b2wgPSBwcml2LT5tb2RlbC5iYXNlLmNvbCArIGNvbHVtbjsKLSAgICB1bnNpZ25lZCBsb25nIG1f
cm93ID0gcHJpdi0+bW9kZWwuYmFzZS5yb3cgKyByb3c7Ci0gICAgZG91YmxlIGxhc3RfdXNlZCA9
IGVjb3JlX2xvb3BfdGltZV9nZXQoKTsKKyAgICB1bnNpZ25lZCBsb25nIGN1cnJlbnRDb2x1bW4g
PSBwcml2LT5tb2RlbC5iYXNlLmNvbHVtbiArIGNvbHVtbjsKKyAgICB1bnNpZ25lZCBsb25nIGN1
cnJlbnRSb3cgPSBwcml2LT5tb2RlbC5iYXNlLnJvdyArIHJvdzsKKyAgICBkb3VibGUgbGFzdFVz
ZWQgPSBlY29yZV9sb29wX3RpbWVfZ2V0KCk7CiAKLSAgICBpZiAobV9jb2wgPj0gcHJpdi0+bW9k
ZWwuY3VyLmNvbHMgfHwgbV9yb3cgPj0gcHJpdi0+bW9kZWwuY3VyLnJvd3MpIHsKKyAgICBpZiAo
Y3VycmVudENvbHVtbiA+PSBwcml2LT5tb2RlbC5jdXJyZW50LmNvbHVtbnMgfHwgY3VycmVudFJv
dyA+PSBwcml2LT5tb2RlbC5jdXJyZW50LnJvd3MpIHsKICAgICAgICAgaWYgKGl0ZW0tPnRpbGUp
Ci0gICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9kaXNzb2NpYXRlKHBy
aXYsIGl0ZW0sIGxhc3RfdXNlZCk7CisgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfdGlsZV9kaXNzb2NpYXRlKHByaXYsIGl0ZW0sIGxhc3RVc2VkKTsKICAgICB9IGVsc2Ugewog
ICAgICAgICBFd2tfVGlsZSogdGlsZTsKICAgICAgICAgY29uc3QgZmxvYXQgem9vbSA9IHByaXYt
PnZpZXcudGlsZS56b29tOwogCiAgICAgICAgIGlmIChpdGVtLT50aWxlKSB7CiAgICAgICAgICAg
ICBFd2tfVGlsZSogb2xkID0gaXRlbS0+dGlsZTsKLSAgICAgICAgICAgIGlmIChvbGQtPnJvdyAh
PSBtX3JvdyB8fCBvbGQtPmNvbCAhPSBtX2NvbCB8fCBvbGQtPnpvb20gIT0gem9vbSkKLSAgICAg
ICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9kaXNzb2NpYXRlKHByaXYs
IGl0ZW0sIGxhc3RfdXNlZCk7Ci0gICAgICAgICAgICBlbHNlIGlmIChvbGQtPnJvdyA9PSBtX3Jv
dyAmJiBvbGQtPmNvbCA9PSBtX2NvbCAmJiBvbGQtPnpvb20gPT0gem9vbSkKKyAgICAgICAgICAg
IGlmIChvbGQtPnJvdyAhPSBjdXJyZW50Um93IHx8IG9sZC0+Y29sICE9IGN1cnJlbnRDb2x1bW4g
fHwgb2xkLT56b29tICE9IHpvb20pCisgICAgICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5n
X3N0b3JlX3RpbGVfZGlzc29jaWF0ZShwcml2LCBpdGVtLCBsYXN0VXNlZCk7CisgICAgICAgICAg
ICBlbHNlIGlmIChvbGQtPnJvdyA9PSBjdXJyZW50Um93ICYmIG9sZC0+Y29sID09IGN1cnJlbnRD
b2x1bW4gJiYgb2xkLT56b29tID09IHpvb20pCiAgICAgICAgICAgICAgICAgZ290byBlbmQ7CiAg
ICAgICAgIH0KIAotICAgICAgICB0aWxlID0gZXdrX3RpbGVfbWF0cml4X3RpbGVfZXhhY3RfZ2V0
KHByaXYtPm1vZGVsLm1hdHJpeCwgbV9jb2wsIG1fcm93LCB6b29tKTsKKyAgICAgICAgdGlsZSA9
IGV3a190aWxlX21hdHJpeF90aWxlX2V4YWN0X2dldChwcml2LT5tb2RlbC5tYXRyaXgsIGN1cnJl
bnRDb2x1bW4sIGN1cnJlbnRSb3csIHpvb20pOwogCiAgICAgICAgIGlmICghdGlsZSkgewogICAg
ICAgICAgICAgLyogTk9URTogaXQgbmV2ZXIgcmV0dXJucyAwIGlmIGl0LT50aWxlIHdhcyBzZXQh
ICovCiAgICAgICAgICAgICBpZiAoaXRlbS0+dGlsZSkgewogICAgICAgICAgICAgICAgIENSSVRJ
Q0FMKCJpdC0+dGlsZT0lcCwgYnV0IGl0IHNob3VsZCBiZSAwISIsIGl0ZW0tPnRpbGUpOwogICAg
ICAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2Rpc3NvY2lhdGUocHJp
diwgaXRlbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGxhc3RfdXNlZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBsYXN0VXNlZCk7CiAgICAgICAgICAgICB9CiAKICAgICAg
ICAgICAgIC8qIERvIG5vdCBhZGQgbmV3IHJlcXVlc3RzIHRvIHRoZSByZW5kZXIgcXVldWUgKi8K
ICAgICAgICAgICAgIGlmICghcHJpdi0+cmVuZGVyLnN1c3BlbmQpIHsKLSAgICAgICAgICAgICAg
ICB0aWxlID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfbmV3KHByaXYsIG1fY29sLCBt
X3Jvdywgem9vbSk7CisgICAgICAgICAgICAgICAgdGlsZSA9IF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV90aWxlX25ldyhwcml2LCBjdXJyZW50Q29sdW1uLCBjdXJyZW50Um93LCB6b29tKTsKICAg
ICAgICAgICAgICAgICBpZiAoIXRpbGUpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBFSU5B
X0ZBTFNFOwogICAgICAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2Fz
c29jaWF0ZShwcml2LCB0aWxlLCBpdGVtKTsKQEAgLTQ1OSw3ICs0NTksNyBAQCBzdGF0aWMgaW5s
aW5lIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9maWxsKEV3a19UaWxl
ZF9CYWNraW5nX1N0bwogICAgICAgICB9IGVsc2UgaWYgKHRpbGUgIT0gaXRlbS0+dGlsZSkgewog
ICAgICAgICAgICAgaWYgKGl0ZW0tPnRpbGUpCiAgICAgICAgICAgICAgICAgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX3RpbGVfZGlzc29jaWF0ZShwcml2LAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbSwgbGFzdF91c2VkKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0
ZW0sIGxhc3RVc2VkKTsKICAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxl
X2Fzc29jaWF0ZShwcml2LCB0aWxlLCBpdGVtKTsKICAgICAgICAgfQogCkBAIC00NzMsMzEgKzQ3
MywzMSBAQCBlbmQ6CiAKIHN0YXRpYyBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKiBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9hZGQoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0
YSogcHJpdiwgdW5zaWduZWQgbG9uZyBjb2x1bW4sIHVuc2lnbmVkIGxvbmcgcm93KQogewotICAg
IEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0qIGl0OwotICAgIEV2YXNfQ29vcmQgeCwgeSwg
dHcsIHRoOworICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0qIGl0ZW07CisgICAgRXZh
c19Db29yZCB4LCB5LCB0aWxlV2lkdGgsIHRpbGVIZWlnaHQ7CiAKLSAgICBEQkcoIm89JXAiLCBw
cml2LT5zZWxmKTsKKyAgICBEQkcoImV3a1RpbGUlcCIsIHByaXYtPnNlbGYpOwogCi0gICAgaXQg
PSBzdGF0aWNfY2FzdDxFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKj4obWFsbG9jKHNpemVv
ZigqaXQpKSk7Ci0gICAgaWYgKCFpdCkKKyAgICBpdGVtID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGVk
X0JhY2tpbmdfU3RvcmVfSXRlbSo+KG1hbGxvYyhzaXplb2YoKml0ZW0pKSk7CisgICAgaWYgKCFp
dGVtKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIHR3ID0gcHJpdi0+dmlldy50aWxlLndpZHRo
OwotICAgIHRoID0gcHJpdi0+dmlldy50aWxlLmhlaWdodDsKLSAgICB4ID0gcHJpdi0+dmlldy5v
ZmZzZXQuYmFzZS54ICsgcHJpdi0+dmlldy54ICsgdHcgICpjb2x1bW47Ci0gICAgeSA9IHByaXYt
PnZpZXcub2Zmc2V0LmJhc2UueSArIHByaXYtPnZpZXcueSArIHRoICAqcm93OworICAgIHRpbGVX
aWR0aCA9IHByaXYtPnZpZXcudGlsZS53aWR0aDsKKyAgICB0aWxlSGVpZ2h0ID0gcHJpdi0+dmll
dy50aWxlLmhlaWdodDsKKyAgICB4ID0gcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54ICsgcHJpdi0+
dmlldy54ICsgdGlsZVdpZHRoICAqY29sdW1uOworICAgIHkgPSBwcml2LT52aWV3Lm9mZnNldC5i
YXNlLnkgKyBwcml2LT52aWV3LnkgKyB0aWxlSGVpZ2h0ICAqcm93OwogCi0gICAgaXQtPnRpbGUg
PSAwOworICAgIGl0ZW0tPnRpbGUgPSAwOwogCi0gICAgaXQtPnNtb290aF9zY2FsZSA9IHByaXYt
PnZpZXcudGlsZS56b29tX3dlYWtfc21vb3RoX3NjYWxlOwotICAgIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9pdGVtX21vdmUoaXQsIHgsIHkpOwotICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV9pdGVtX3Jlc2l6ZShpdCwgdHcsIHRoKTsKLSAgICBpZiAoIV9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9pdGVtX2ZpbGwocHJpdiwgaXQsIGNvbHVtbiwgcm93KSkgewotICAgICAgICBmcmVlKGl0
KTsKKyAgICBpdGVtLT5zbW9vdGhfc2NhbGUgPSBwcml2LT52aWV3LnRpbGUuem9vbVdlYWtTbW9v
dGhTY2FsZTsKKyAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9tb3ZlKGl0ZW0sIHgs
IHkpOworICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Jlc2l6ZShpdGVtLCB0aWxl
V2lkdGgsIHRpbGVIZWlnaHQpOworICAgIGlmICghX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0
ZW1fZmlsbChwcml2LCBpdGVtLCBjb2x1bW4sIHJvdykpIHsKKyAgICAgICAgZnJlZShpdGVtKTsK
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgcmV0dXJuIGl0OworICAgIHJldHVybiBp
dGVtOwogfQogCiBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9kZWwo
RXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdiwgRXdrX1RpbGVkX0JhY2tpbmdfU3Rv
cmVfSXRlbSogaXRlbSkKQEAgLTUyNyw0MCArNTI3LDQwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfY2hhbmdlZChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9E
YXRhCiAgICAgcHJpdi0+Y2hhbmdlZC5hbnkgPSBFSU5BX1RSVUU7CiB9CiAKLXN0YXRpYyB2b2lk
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X2NvbHNfZW5kX2RlbChFd2tfVGlsZWRfQmFj
a2luZ19TdG9yZV9EYXRhKiBwcml2LCBFaW5hX0lubGlzdCoqIHBfcm93LCB1bnNpZ25lZCBpbnQg
Y291bnQpCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19jb2xzX2Vu
ZF9kZWwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdiwgRWluYV9Jbmxpc3QqKiBy
b3dMaXN0LCB1bnNpZ25lZCBpbnQgY291bnQpCiB7Ci0gICAgRWluYV9Jbmxpc3QqIG47CisgICAg
RWluYV9Jbmxpc3QqIG5leHRJdGVtOwogICAgIHVuc2lnbmVkIGludCBpOwogCiAgICAgaWYgKCFj
b3VudCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbiA9ICgqcF9yb3cpLT5sYXN0OworICAgIG5l
eHRJdGVtID0gKCpyb3dMaXN0KS0+bGFzdDsKIAogICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsg
aSsrKSB7Ci0gICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0qIGl0OwotICAgICAg
ICBpdCA9IEVJTkFfSU5MSVNUX0NPTlRBSU5FUl9HRVQobiwgRXdrX1RpbGVkX0JhY2tpbmdfU3Rv
cmVfSXRlbSk7Ci0gICAgICAgIG4gPSBuLT5wcmV2OwotICAgICAgICAqcF9yb3cgPSBlaW5hX2lu
bGlzdF9yZW1vdmUoKnBfcm93LCBFSU5BX0lOTElTVF9HRVQoaXQpKTsKLSAgICAgICAgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZGVsKHByaXYsIGl0KTsKKyAgICAgICAgRXdrX1RpbGVk
X0JhY2tpbmdfU3RvcmVfSXRlbSogaXRlbTsKKyAgICAgICAgaXRlbSA9IEVJTkFfSU5MSVNUX0NP
TlRBSU5FUl9HRVQobmV4dEl0ZW0sIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0pOworICAg
ICAgICBuZXh0SXRlbSA9IG5leHRJdGVtLT5wcmV2OworICAgICAgICAqcm93TGlzdCA9IGVpbmFf
aW5saXN0X3JlbW92ZSgqcm93TGlzdCwgRUlOQV9JTkxJU1RfR0VUKGl0ZW0pKTsKKyAgICAgICAg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZGVsKHByaXYsIGl0ZW0pOwogICAgIH0KIH0K
IAotc3RhdGljIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19jb2xzX2Vu
ZF9hZGQoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdiwgRWluYV9Jbmxpc3QqKiBw
X3JvdywgdW5zaWduZWQgaW50IGJhc2VfY29sdW1uLCB1bnNpZ25lZCBpbnQgY291bnQpCitzdGF0
aWMgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X2NvbHNfZW5kX2FkZChF
d2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2LCBFaW5hX0lubGlzdCoqIHJvd0xpc3Qs
IHVuc2lnbmVkIGludCBiYXNlQ29sdW1uLCB1bnNpZ25lZCBpbnQgY291bnQpCiB7Ci0gICAgdW5z
aWduZWQgaW50IGksIHIgPSBwX3JvdyAtIHByaXYtPnZpZXcuaXRlbXM7CisgICAgdW5zaWduZWQg
aW50IGksIHJvdyA9IHJvd0xpc3QgLSBwcml2LT52aWV3Lml0ZW1zOwogCi0gICAgZm9yIChpID0g
MDsgaSA8IGNvdW50OyBpKyssIGJhc2VfY29sdW1uKyspIHsKKyAgICBmb3IgKGkgPSAwOyBpIDwg
Y291bnQ7IGkrKywgYmFzZUNvbHVtbisrKSB7CiAgICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0
b3JlX0l0ZW0qIGl0OwogCi0gICAgICAgIGl0ID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0
ZW1fYWRkKHByaXYsIGJhc2VfY29sdW1uLCByKTsKKyAgICAgICAgaXQgPSBfZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfaXRlbV9hZGQocHJpdiwgYmFzZUNvbHVtbiwgcm93KTsKICAgICAgICAgaWYg
KCFpdCkgewotICAgICAgICAgICAgQ1JJVElDQUwoImZhaWxlZCB0byBhZGQgY29sdW1uICV1IG9m
ICV1IGluIHJvdyAldS4iLCBpLCBjb3VudCwgcik7Ci0gICAgICAgICAgICBfZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfdmlld19jb2xzX2VuZF9kZWwocHJpdiwgcF9yb3csIGkpOworICAgICAgICAg
ICAgQ1JJVElDQUwoImZhaWxlZCB0byBhZGQgY29sdW1uICV1IG9mICV1IGluIHJvdyAldS4iLCBp
LCBjb3VudCwgcm93KTsKKyAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3
X2NvbHNfZW5kX2RlbChwcml2LCByb3dMaXN0LCBpKTsKICAgICAgICAgICAgIHJldHVybiBFSU5B
X0ZBTFNFOwogICAgICAgICB9CiAKLSAgICAgICAgKnBfcm93ID0gZWluYV9pbmxpc3RfYXBwZW5k
KCpwX3JvdywgRUlOQV9JTkxJU1RfR0VUKGl0KSk7CisgICAgICAgICpyb3dMaXN0ID0gZWluYV9p
bmxpc3RfYXBwZW5kKCpyb3dMaXN0LCBFSU5BX0lOTElTVF9HRVQoaXQpKTsKICAgICB9CiAgICAg
cmV0dXJuIEVJTkFfVFJVRTsKIH0KQEAgLTU2OCwxMCArNTY4LDEwIEBAIHN0YXRpYyBFaW5hX0Jv
b2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfY29sc19lbmRfYWRkKEV3a19UaWxlZF9C
YWNraW5nX1N0CiBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19yb3df
ZGVsKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYsIEVpbmFfSW5saXN0KiByb3cp
CiB7CiAgICAgd2hpbGUgKHJvdykgewotICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9J
dGVtKiBpdDsKLSAgICAgICAgaXQgPSBFSU5BX0lOTElTVF9DT05UQUlORVJfR0VUKHJvdywgRXdr
X1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSk7CisgICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0
b3JlX0l0ZW0qIGl0ZW07CisgICAgICAgIGl0ZW0gPSBFSU5BX0lOTElTVF9DT05UQUlORVJfR0VU
KHJvdywgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSk7CiAgICAgICAgIHJvdyA9IHJvdy0+
bmV4dDsKLSAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZGVsKHByaXYsIGl0
KTsKKyAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZGVsKHByaXYsIGl0ZW0p
OwogICAgIH0KIH0KIApAQCAtNjExLDggKzYxMSw4IEBAIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV9yZW5kZXIodm9pZCogZGF0YSwgRXdrX1RpbGUqIHRpbGUsIGNvbnN0IEVp
CiAgICAgaWYgKHByaXYtPnZpZXcudGlsZS53aWR0aCAhPSB0aWxlLT53aWR0aCB8fCBwcml2LT52
aWV3LnRpbGUuaGVpZ2h0ICE9IHRpbGUtPmhlaWdodCkKICAgICAgICAgcmV0dXJuOyAvLyB0b2Rv
OiByZW1vdmUgbWUgbGF0ZXIsIGRvbid0IGV2ZW4gZmxhZyBhcyBkaXJ0eSEKIAotICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOKHByaXYtPnJlbmRlci5jYik7Ci0gICAgaWYgKCFwcml2LT5y
ZW5kZXIuY2IocHJpdi0+cmVuZGVyLmRhdGEsIHRpbGUsIGFyZWEpKQorICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOKHByaXYtPnJlbmRlci5jYWxsYmFjayk7CisgICAgaWYgKCFwcml2LT5y
ZW5kZXIuY2FsbGJhY2socHJpdi0+cmVuZGVyLmRhdGEsIHRpbGUsIGFyZWEpKQogICAgICAgICBy
ZXR1cm47CiAKICAgICBldmFzX29iamVjdF9pbWFnZV9kYXRhX3VwZGF0ZV9hZGQodGlsZS0+aW1h
Z2UsIGFyZWEtPngsIGFyZWEtPnksIGFyZWEtPncsIGFyZWEtPmgpOwpAQCAtNjI5LDI3ICs2Mjks
MjcgQEAgc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9tb2RlbF9t
YXRyaXhfY3JlYXRlKEV3a19UaWxlZF9CYWNraW4KICAgICAgICAgZXdrX3RpbGVfbWF0cml4X2Zy
ZWUocHJpdi0+bW9kZWwubWF0cml4KTsKICAgICB9CiAKLSAgICBwcml2LT5tb2RlbC5tYXRyaXgg
PSBld2tfdGlsZV9tYXRyaXhfbmV3KHRpbGVVbnVzZWRDYWNoZSwgcHJpdi0+bW9kZWwuY3VyLmNv
bHMsIHByaXYtPm1vZGVsLmN1ci5yb3dzLCBwcml2LT5jc3BhY2UsIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9yZW5kZXIsIHByaXYpOworICAgIHByaXYtPm1vZGVsLm1hdHJpeCA9IGV3a190aWxl
X21hdHJpeF9uZXcodGlsZVVudXNlZENhY2hlLCBwcml2LT5tb2RlbC5jdXJyZW50LmNvbHVtbnMs
IHByaXYtPm1vZGVsLmN1cnJlbnQucm93cywgcHJpdi0+Y29sb3JTcGFjZSwgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX3JlbmRlciwgcHJpdik7CiB9CiAKIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV9zbWFydF9tZW1iZXJfZGVsKEV2YXNfT2JqZWN0KiBld2tUaWxlLCBFdmFz
X09iamVjdCogbWVtYmVyKQogewogICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKGV3a1RpbGUs
IHByaXYpOwotICAgIGlmICghcHJpdi0+Y29udGVudHNfY2xpcHBlcikKKyAgICBpZiAoIXByaXYt
PmNvbnRlbnRzQ2xpcHBlcikKICAgICAgICAgcmV0dXJuOwogICAgIGV2YXNfb2JqZWN0X2NsaXBf
dW5zZXQobWVtYmVyKTsKLSAgICBpZiAoIWV2YXNfb2JqZWN0X2NsaXBlZXNfZ2V0KHByaXYtPmNv
bnRlbnRzX2NsaXBwZXIpKQotICAgICAgICBldmFzX29iamVjdF9oaWRlKHByaXYtPmNvbnRlbnRz
X2NsaXBwZXIpOworICAgIGlmICghZXZhc19vYmplY3RfY2xpcGVlc19nZXQocHJpdi0+Y29udGVu
dHNDbGlwcGVyKSkKKyAgICAgICAgZXZhc19vYmplY3RfaGlkZShwcml2LT5jb250ZW50c0NsaXBw
ZXIpOwogfQogCiBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfbWVt
YmVyX2FkZChFdmFzX09iamVjdCogZXdrVGlsZSwgRXZhc19PYmplY3QqIG1lbWJlcikKIHsKICAg
ICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihld2tUaWxlLCBwcml2KTsKLSAgICBpZiAoIXByaXYt
PmNvbnRlbnRzX2NsaXBwZXIpCisgICAgaWYgKCFwcml2LT5jb250ZW50c0NsaXBwZXIpCiAgICAg
ICAgIHJldHVybjsKLSAgICBldmFzX29iamVjdF9jbGlwX3NldChtZW1iZXIsIHByaXYtPmNvbnRl
bnRzX2NsaXBwZXIpOworICAgIGV2YXNfb2JqZWN0X2NsaXBfc2V0KG1lbWJlciwgcHJpdi0+Y29u
dGVudHNDbGlwcGVyKTsKICAgICBpZiAoZXZhc19vYmplY3RfdmlzaWJsZV9nZXQoZXdrVGlsZSkp
Ci0gICAgICAgIGV2YXNfb2JqZWN0X3Nob3cocHJpdi0+Y29udGVudHNfY2xpcHBlcik7CisgICAg
ICAgIGV2YXNfb2JqZWN0X3Nob3cocHJpdi0+Y29udGVudHNDbGlwcGVyKTsKIH0KIAogI2lmZGVm
IERFQlVHX01FTV9MRUFLUwpAQCAtNjc2LDkgKzY3Niw5IEBAIHN0YXRpYyBFaW5hX0Jvb2wgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX3NpZ191c3Iodm9pZCogZGF0YSwgaW50IHR5cGUsIHZvaWQq
IGV2CiAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdiA9IChFd2tfVGlsZWRf
QmFja2luZ19TdG9yZV9EYXRhKilkYXRhOwogCiAgICAgaWYgKHNpZy0+bnVtYmVyID09IDIpIHsK
LSAgICAgICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0dWM7Ci0gICAgICAgIHR1YyA9IGV3a190
aWxlX21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7Ci0gICAgICAg
IGV3a190aWxlX3VudXNlZF9jYWNoZV9hdXRvX2ZsdXNoKHR1Yyk7CisgICAgICAgIEV3a19UaWxl
X1VudXNlZF9DYWNoZSogdGlsaWVVbnVzZWRDYWNoZTsKKyAgICAgICAgdGlsaWVVbnVzZWRDYWNo
ZSA9IGV3a190aWxlX21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7
CisgICAgICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9hdXRvX2ZsdXNoKHRpbGllVW51c2VkQ2Fj
aGUpOwogICAgIH0KIAogICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X2RiZyhwcml2
KTsKQEAgLTY5MSw3ICs2OTEsNyBAQCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfc21hcnRfYWRkKEV2YXNfT2JqZWN0KiBld2tUaWxlKQogewogICAgIEV3a19UaWxlZF9CYWNr
aW5nX1N0b3JlX0RhdGEqIHByaXY7CiAKLSAgICBEQkcoIm89JXAiLCBld2tUaWxlKTsKKyAgICBE
QkcoImV3a1RpbGU9JXAiLCBld2tUaWxlKTsKIAogICAgIHByaXYgPSBzdGF0aWNfY2FzdDxFd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKj4oY2FsbG9jKDEsIHNpemVvZigqcHJpdikpKTsKICAg
ICBpZiAoIXByaXYpCkBAIC03MDgsMzMgKzcwOCwzMyBAQCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfc21hcnRfYWRkKEV2YXNfT2JqZWN0KiBld2tUaWxlKQogICAgIHByaXYt
PnZpZXcub2Zmc2V0LmJhc2UueCA9IDA7CiAgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ID0g
MDsKIAotICAgIHByaXYtPm1vZGVsLmJhc2UuY29sID0gMDsKKyAgICBwcml2LT5tb2RlbC5iYXNl
LmNvbHVtbiA9IDA7CiAgICAgcHJpdi0+bW9kZWwuYmFzZS5yb3cgPSAwOwotICAgIHByaXYtPm1v
ZGVsLmN1ci5jb2xzID0gMTsKLSAgICBwcml2LT5tb2RlbC5jdXIucm93cyA9IDE7Ci0gICAgcHJp
di0+bW9kZWwub2xkLmNvbHMgPSAwOworICAgIHByaXYtPm1vZGVsLmN1cnJlbnQuY29sdW1ucyA9
IDE7CisgICAgcHJpdi0+bW9kZWwuY3VycmVudC5yb3dzID0gMTsKKyAgICBwcml2LT5tb2RlbC5v
bGQuY29sdW1ucyA9IDA7CiAgICAgcHJpdi0+bW9kZWwub2xkLnJvd3MgPSAwOwogICAgIHByaXYt
Pm1vZGVsLndpZHRoID0gMDsKICAgICBwcml2LT5tb2RlbC5oZWlnaHQgPSAwOwogICAgIHByaXYt
PnJlbmRlci5zdXNwZW5kID0gRUlOQV9GQUxTRTsKLSAgICBwcml2LT5jc3BhY2UgPSBFVkFTX0NP
TE9SU1BBQ0VfQVJHQjg4ODg7IC8vIFRPRE86IGRldGVjdCBpdC4KKyAgICBwcml2LT5jb2xvclNw
YWNlID0gRVZBU19DT0xPUlNQQUNFX0FSR0I4ODg4OyAvLyBUT0RPOiBkZXRlY3QgaXQuCiAKICAg
ICBldmFzX29iamVjdF9zbWFydF9kYXRhX3NldChld2tUaWxlLCBwcml2KTsKICAgICBfcGFyZW50
X3NjLmFkZChld2tUaWxlKTsKIAotICAgIHByaXYtPmNvbnRlbnRzX2NsaXBwZXIgPSBldmFzX29i
amVjdF9yZWN0YW5nbGVfYWRkKAorICAgIHByaXYtPmNvbnRlbnRzQ2xpcHBlciA9IGV2YXNfb2Jq
ZWN0X3JlY3RhbmdsZV9hZGQoCiAgICAgICAgIGV2YXNfb2JqZWN0X2V2YXNfZ2V0KGV3a1RpbGUp
KTsKLSAgICBldmFzX29iamVjdF9tb3ZlKHByaXYtPmNvbnRlbnRzX2NsaXBwZXIsIDAsIDApOwot
ICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShwcml2LT5jb250ZW50c19jbGlwcGVyLAorICAgIGV2YXNf
b2JqZWN0X21vdmUocHJpdi0+Y29udGVudHNDbGlwcGVyLCAwLCAwKTsKKyAgICBldmFzX29iamVj
dF9yZXNpemUocHJpdi0+Y29udGVudHNDbGlwcGVyLAogICAgICAgICAgICAgICAgICAgICAgICBw
cml2LT5tb2RlbC53aWR0aCwgcHJpdi0+bW9kZWwuaGVpZ2h0KTsKLSAgICBldmFzX29iamVjdF9j
b2xvcl9zZXQocHJpdi0+Y29udGVudHNfY2xpcHBlciwgMjU1LCAyNTUsIDI1NSwgMjU1KTsKLSAg
ICBldmFzX29iamVjdF9zaG93KHByaXYtPmNvbnRlbnRzX2NsaXBwZXIpOwotICAgIGV2YXNfb2Jq
ZWN0X3NtYXJ0X21lbWJlcl9hZGQocHJpdi0+Y29udGVudHNfY2xpcHBlciwgZXdrVGlsZSk7Cisg
ICAgZXZhc19vYmplY3RfY29sb3Jfc2V0KHByaXYtPmNvbnRlbnRzQ2xpcHBlciwgMjU1LCAyNTUs
IDI1NSwgMjU1KTsKKyAgICBldmFzX29iamVjdF9zaG93KHByaXYtPmNvbnRlbnRzQ2xpcHBlcik7
CisgICAgZXZhc19vYmplY3Rfc21hcnRfbWVtYmVyX2FkZChwcml2LT5jb250ZW50c0NsaXBwZXIs
IGV3a1RpbGUpOwogCiAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX21vZGVsX21hdHJpeF9j
cmVhdGUocHJpdiwgMCk7CiAgICAgZXZhc19vYmplY3RfbW92ZShwcml2LT5iYXNlLmNsaXBwZXIs
IDAsIDApOwogICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShwcml2LT5iYXNlLmNsaXBwZXIsIDAsIDAp
OwotICAgIGV2YXNfb2JqZWN0X2NsaXBfc2V0KHByaXYtPmNvbnRlbnRzX2NsaXBwZXIsIHByaXYt
PmJhc2UuY2xpcHBlcik7CisgICAgZXZhc19vYmplY3RfY2xpcF9zZXQocHJpdi0+Y29udGVudHND
bGlwcGVyLCBwcml2LT5iYXNlLmNsaXBwZXIpOwogCiAjaWZkZWYgREVCVUdfTUVNX0xFQUtTCiAg
ICAgcHJpdi0+c2lnX3VzciA9IGVjb3JlX2V2ZW50X2hhbmRsZXJfYWRkCkBAIC03NDUsMTEgKzc0
NSwxMSBAQCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfYWRkKEV2
YXNfT2JqZWN0KiBld2tUaWxlKQogc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3NtYXJ0X2RlbChFdmFzX09iamVjdCogZXdrVGlsZSkKIHsKICAgICBQUklWX0RBVEFfR0VUX09S
X1JFVFVSTihld2tUaWxlLCBwcml2KTsKLSAgICBEQkcoIm89JXAiLCBld2tUaWxlKTsKLSAgICBF
d2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHR1YzsKKyAgICBEQkcoImV3a1RpbGUlcCIsIGV3a1RpbGUp
OworICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSogdGlsZVVudXNlZENhY2hlOwogCi0gICAgdHVj
ID0gZXdrX3RpbGVfbWF0cml4X3VudXNlZF9jYWNoZV9nZXQocHJpdi0+bW9kZWwubWF0cml4KTsK
LSAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfdW5sb2NrX2FyZWEodHVjKTsKKyAgICB0aWxlVW51
c2VkQ2FjaGUgPSBld2tfdGlsZV9tYXRyaXhfdW51c2VkX2NhY2hlX2dldChwcml2LT5tb2RlbC5t
YXRyaXgpOworICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV91bmxvY2tfYXJlYSh0aWxlVW51c2Vk
Q2FjaGUpOwogCiAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2ZsdXNoKHByaXYpOwogCkBA
IC03NjQsOCArNzY0LDggQEAgc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3Nt
YXJ0X2RlbChFdmFzX09iamVjdCogZXdrVGlsZSkKICNlbmRpZgogCiAgICAgZXdrX3RpbGVfbWF0
cml4X2ZyZWUocHJpdi0+bW9kZWwubWF0cml4KTsKLSAgICBldmFzX29iamVjdF9zbWFydF9tZW1i
ZXJfZGVsKHByaXYtPmNvbnRlbnRzX2NsaXBwZXIpOwotICAgIGV2YXNfb2JqZWN0X2RlbChwcml2
LT5jb250ZW50c19jbGlwcGVyKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9tZW1iZXJfZGVsKHBy
aXYtPmNvbnRlbnRzQ2xpcHBlcik7CisgICAgZXZhc19vYmplY3RfZGVsKHByaXYtPmNvbnRlbnRz
Q2xpcHBlcik7CiAKICAgICBfcGFyZW50X3NjLmRlbChld2tUaWxlKTsKIApAQCAtNzc3LDIzICs3
NzcsMjMgQEAgc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2RlbChF
dmFzX09iamVjdCogZXdrVGlsZSkKIAogc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX3NtYXJ0X21vdmUoRXZhc19PYmplY3QqIGV3a1RpbGUsIEV2YXNfQ29vcmQgeCwgRXZhc19D
b29yZCB5KQogewotICAgIERCRygibz0lcCwgbmV3IHBvczogJWR4JWQiLCBld2tUaWxlLCB4LCB5
KTsKKyAgICBEQkcoImV3a1RpbGUlcCwgbmV3IHBvczogJWR4JWQiLCBld2tUaWxlLCB4LCB5KTsK
IAogICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKGV3a1RpbGUsIHByaXYpOwogCi0gICAgaWYg
KHByaXYtPmNoYW5nZWQucG9zKQorICAgIGlmIChwcml2LT5jaGFuZ2VkLnBvc2l0aW9uKQogICAg
ICAgICByZXR1cm47CiAKICAgICBpZiAocHJpdi0+dmlldy54ID09IHggJiYgcHJpdi0+dmlldy55
ID09IHkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHByaXYtPmNoYW5nZWQucG9zID0gRUlOQV9U
UlVFOworICAgIHByaXYtPmNoYW5nZWQucG9zaXRpb24gPSBFSU5BX1RSVUU7CiAgICAgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX2NoYW5nZWQocHJpdik7CiB9CiAKIHN0YXRpYyB2b2lkIF9ld2tf
dGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9yZXNpemUoRXZhc19PYmplY3QqIGV3a1RpbGUsIEV2
YXNfQ29vcmQgd2lkdGgsIEV2YXNfQ29vcmQgaGVpZ2h0KQogewotICAgIERCRygibz0lcCwgbmV3
IHNpemU6ICVkeCVkIiwgZXdrVGlsZSwgd2lkdGgsIGhlaWdodCk7CisgICAgREJHKCJld2tUaWxl
JXAsIG5ldyBzaXplOiAlZHglZCIsIGV3a1RpbGUsIHdpZHRoLCBoZWlnaHQpOwogCiAgICAgUFJJ
Vl9EQVRBX0dFVF9PUl9SRVRVUk4oZXdrVGlsZSwgcHJpdik7CiAKQEAgLTgwOSwyNSArODA5LDI1
IEBAIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9yZXNpemUoRXZh
c19PYmplY3QqIGV3a1RpbGUsIEV2YXNfQ29vCiAKIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9yZWNhbGNfcmVuZGVyZXJzKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEq
IHByaXYsIEV2YXNfQ29vcmQgd2lkdGgsIEV2YXNfQ29vcmQgaGVpZ2h0LCBFdmFzX0Nvb3JkIHRp
bGVXaWR0aCwgRXZhc19Db29yZCB0aWxlSGVpZ2h0KQogewotICAgIGxvbmcgY29scywgcm93cywg
b2xkX3Jvd3MsIG9sZF9jb2xzOwotICAgIElORigibz0lcCwgbmV3IHNpemU6ICVkeCVkIiwgcHJp
di0+c2VsZiwgd2lkdGgsIGhlaWdodCk7CisgICAgbG9uZyBjb2x1bW5zLCByb3dzLCBvbGRSb3dz
LCBvbGRDb2xzOworICAgIElORigiZXdrVGlsZSVwLCBuZXcgc2l6ZTogJWR4JWQiLCBwcml2LT5z
ZWxmLCB3aWR0aCwgaGVpZ2h0KTsKIAotICAgIGNvbHMgPSAxICsgc3RhdGljX2Nhc3Q8aW50Pihj
ZWlsKHN0YXRpY19jYXN0PGZsb2F0Pih3aWR0aCAvIHRpbGVXaWR0aCkpKTsKKyAgICBjb2x1bW5z
ID0gMSArIHN0YXRpY19jYXN0PGludD4oY2VpbChzdGF0aWNfY2FzdDxmbG9hdD4od2lkdGggLyB0
aWxlV2lkdGgpKSk7CiAgICAgcm93cyA9IDEgKyBzdGF0aWNfY2FzdDxpbnQ+KGNlaWwoc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KGhlaWdodCAvIHRpbGVIZWlnaHQpKSk7CiAKLSAgICBJTkYoIm89JXAgbmV3
IGdyaWQgc2l6ZSBjb2xzOiAlbGQsIHJvd3M6ICVsZCwgd2FzICVsZCwgJWxkIiwKLSAgICAgICAg
cHJpdi0+c2VsZiwgY29scywgcm93cywgcHJpdi0+dmlldy5jb2xzLCBwcml2LT52aWV3LnJvd3Mp
OworICAgIElORigiZXdrVGlsZSVwIG5ldyBncmlkIHNpemUgY29sczogJWxkLCByb3dzOiAlbGQs
IHdhcyAlbGQsICVsZCIsCisgICAgICAgIHByaXYtPnNlbGYsIGNvbHVtbnMsIHJvd3MsIHByaXYt
PnZpZXcuY29scywgcHJpdi0+dmlldy5yb3dzKTsKIAotICAgIGlmIChwcml2LT52aWV3LmNvbHMg
PT0gY29scyAmJiBwcml2LT52aWV3LnJvd3MgPT0gcm93cykKKyAgICBpZiAocHJpdi0+dmlldy5j
b2xzID09IGNvbHVtbnMgJiYgcHJpdi0+dmlldy5yb3dzID09IHJvd3MpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIG9sZF9jb2xzID0gcHJpdi0+dmlldy5jb2xzOwotICAgIG9sZF9yb3dzID0gcHJp
di0+dmlldy5yb3dzOworICAgIG9sZENvbHMgPSBwcml2LT52aWV3LmNvbHM7CisgICAgb2xkUm93
cyA9IHByaXYtPnZpZXcucm93czsKIAotICAgIGlmIChyb3dzIDwgb2xkX3Jvd3MpIHsKKyAgICBp
ZiAocm93cyA8IG9sZFJvd3MpIHsKICAgICAgICAgRWluYV9Jbmxpc3QqKiBzdGFydCwgKiplbmQ7
CiAgICAgICAgIHN0YXJ0ID0gcHJpdi0+dmlldy5pdGVtcyArIHJvd3M7Ci0gICAgICAgIGVuZCA9
IHByaXYtPnZpZXcuaXRlbXMgKyBvbGRfcm93czsKKyAgICAgICAgZW5kID0gcHJpdi0+dmlldy5p
dGVtcyArIG9sZFJvd3M7CiAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3Jv
d3NfcmFuZ2VfZGVsKHByaXYsIHN0YXJ0LCBlbmQpOwogICAgIH0KIApAQCAtODM3LDM2ICs4Mzcs
MzYgQEAgc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3JlY2FsY19yZW5kZXJl
cnMoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGEKIAogICAgIHByaXYtPnZpZXcuaXRlbXMgPSBz
dGF0aWNfY2FzdDxFaW5hX0lubGlzdCoqPihuZXdJdGVtcyk7CiAgICAgcHJpdi0+dmlldy5yb3dz
ID0gcm93czsKLSAgICBwcml2LT52aWV3LmNvbHMgPSBjb2xzOwotICAgIGlmIChyb3dzID4gb2xk
X3Jvd3MpIHsKLSAgICAgICAgRWluYV9Jbmxpc3QqKiBzdGFydCA9IHByaXYtPnZpZXcuaXRlbXMg
KyBvbGRfcm93czsKKyAgICBwcml2LT52aWV3LmNvbHMgPSBjb2x1bW5zOworICAgIGlmIChyb3dz
ID4gb2xkUm93cykgeworICAgICAgICBFaW5hX0lubGlzdCoqIHN0YXJ0ID0gcHJpdi0+dmlldy5p
dGVtcyArIG9sZFJvd3M7CiAgICAgICAgIEVpbmFfSW5saXN0KiogZW5kID0gcHJpdi0+dmlldy5p
dGVtcyArIHJvd3M7CiAgICAgICAgIGZvciAoOyBzdGFydCA8IGVuZDsgc3RhcnQrKykgewogICAg
ICAgICAgICAgKnN0YXJ0ID0gMDsKLSAgICAgICAgICAgIEVpbmFfQm9vbCByID0gX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX3ZpZXdfY29sc19lbmRfYWRkKHByaXYsIHN0YXJ0LCAwLCBjb2xzKTsK
KyAgICAgICAgICAgIEVpbmFfQm9vbCByID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdf
Y29sc19lbmRfYWRkKHByaXYsIHN0YXJ0LCAwLCBjb2x1bW5zKTsKICAgICAgICAgICAgIGlmICgh
cikgewotICAgICAgICAgICAgICAgIENSSVRJQ0FMKCJmYWlsZWQgdG8gYWxsb2NhdGUgJWxkIGNv
bHVtbnMiLCBjb2xzKTsKLSAgICAgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
dmlld19yb3dzX3JhbmdlX2RlbChwcml2LCBwcml2LT52aWV3Lml0ZW1zICsgb2xkX3Jvd3MsIHN0
YXJ0KTsKLSAgICAgICAgICAgICAgICBwcml2LT52aWV3LnJvd3MgPSBvbGRfcm93czsKKyAgICAg
ICAgICAgICAgICBDUklUSUNBTCgiZmFpbGVkIHRvIGFsbG9jYXRlICVsZCBjb2x1bW5zIiwgY29s
dW1ucyk7CisgICAgICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcm93
c19yYW5nZV9kZWwocHJpdiwgcHJpdi0+dmlldy5pdGVtcyArIG9sZFJvd3MsIHN0YXJ0KTsKKyAg
ICAgICAgICAgICAgICBwcml2LT52aWV3LnJvd3MgPSBvbGRSb3dzOwogICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChjb2xz
ICE9IG9sZF9jb2xzKSB7Ci0gICAgICAgIGludCB0b2RvID0gY29scyAtIG9sZF9jb2xzOworICAg
IGlmIChjb2x1bW5zICE9IG9sZENvbHMpIHsKKyAgICAgICAgaW50IHRvZG8gPSBjb2x1bW5zIC0g
b2xkQ29sczsKICAgICAgICAgRWluYV9Jbmxpc3QqKiBzdGFydCA9IHByaXYtPnZpZXcuaXRlbXM7
Ci0gICAgICAgIEVpbmFfSW5saXN0KiogZW5kID0gc3RhcnQgKyBzdGQ6Om1pbihvbGRfcm93cywg
cm93cyk7CisgICAgICAgIEVpbmFfSW5saXN0KiogZW5kID0gc3RhcnQgKyBzdGQ6Om1pbihvbGRS
b3dzLCByb3dzKTsKICAgICAgICAgaWYgKHRvZG8gPiAwKSB7CiAgICAgICAgICAgICBmb3IgKDsg
c3RhcnQgPCBlbmQ7IHN0YXJ0KyspIHsKLSAgICAgICAgICAgICAgICBFaW5hX0Jvb2wgciA9IF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X2NvbHNfZW5kX2FkZChwcml2LCBzdGFydCwgb2xk
X2NvbHMsIHRvZG8pOwotICAgICAgICAgICAgICAgIGlmICghcikgeworICAgICAgICAgICAgICAg
IEVpbmFfQm9vbCByZXN1bHQgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19jb2xzX2Vu
ZF9hZGQocHJpdiwgc3RhcnQsIG9sZENvbHMsIHRvZG8pOworICAgICAgICAgICAgICAgIGlmICgh
cmVzdWx0KSB7CiAgICAgICAgICAgICAgICAgICAgIENSSVRJQ0FMKCJmYWlsZWQgdG8gYWxsb2Nh
dGUgJWQgY29sdW1ucyEiLCB0b2RvKTsKIAogICAgICAgICAgICAgICAgICAgICBmb3IgKHN0YXJ0
LS07IHN0YXJ0ID49IHByaXYtPnZpZXcuaXRlbXM7IHN0YXJ0LS0pCiAgICAgICAgICAgICAgICAg
ICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19jb2xzX2VuZF9kZWwocHJpdiwg
c3RhcnQsIHRvZG8pOwotICAgICAgICAgICAgICAgICAgICBpZiAocm93cyA+IG9sZF9yb3dzKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGFydCA9IHByaXYtPnZpZXcuaXRlbXMgKyBvbGRf
cm93czsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJvd3MgPiBvbGRSb3dzKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBzdGFydCA9IHByaXYtPnZpZXcuaXRlbXMgKyBvbGRSb3dzOwogICAg
ICAgICAgICAgICAgICAgICAgICAgZW5kID0gcHJpdi0+dmlldy5pdGVtcyArIHJvd3M7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgKDsgc3RhcnQgPCBlbmQ7IHN0YXJ0KyspCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfY29sc19l
bmRfZGVsKHByaXYsIHN0YXJ0LCB0b2RvKTsKQEAgLTkwMSw5ICs5MDEsOSBAQCBzdGF0aWMgaW5s
aW5lIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfZGJnKGNvbnN0IEV3a19UaWxl
ZF9CYWNraW5nX1N0bwogICAgIEVpbmFfSW5saXN0Kiogc3RhcnQsICoqZW5kOwogICAgIHByaW50
ZigidGlsZXM9JTJsZCwlMmxkICBtb2RlbD0lMmxkLCUybGQgWyVkeCVkXSBiYXNlPSUrM2xkLCUr
NGxkIG9mZnNldD0lKzRkLCUrNGQgb2xkPSUrNGQsJSs0ZCBiYXNlPSUrM2QsJSszZFxuIiwKICAg
ICAgICAgICAgcHJpdi0+dmlldy5jb2xzLCBwcml2LT52aWV3LnJvd3MsCi0gICAgICAgICAgIHBy
aXYtPm1vZGVsLmN1ci5jb2xzLCBwcml2LT5tb2RlbC5jdXIucm93cywKKyAgICAgICAgICAgcHJp
di0+bW9kZWwuY3VycmVudC5jb2x1bW5zLCBwcml2LT5tb2RlbC5jdXJyZW50LnJvd3MsCiAgICAg
ICAgICAgIHByaXYtPm1vZGVsLndpZHRoLCBwcml2LT5tb2RlbC5oZWlnaHQsCi0gICAgICAgICAg
IHByaXYtPm1vZGVsLmJhc2UuY29sLCBwcml2LT5tb2RlbC5iYXNlLnJvdywKKyAgICAgICAgICAg
cHJpdi0+bW9kZWwuYmFzZS5jb2x1bW4sIHByaXYtPm1vZGVsLmJhc2Uucm93LAogICAgICAgICAg
ICBwcml2LT52aWV3Lm9mZnNldC5jdXIueCwgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnksCiAgICAg
ICAgICAgIHByaXYtPnZpZXcub2Zmc2V0Lm9sZC54LCBwcml2LT52aWV3Lm9mZnNldC5vbGQueSwK
ICAgICAgICAgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54LCBwcml2LT52aWV3Lm9mZnNldC5i
YXNlLnkpOwpAQCAtOTExLDE1ICs5MTEsMTUgQEAgc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV92aWV3X2RiZyhjb25zdCBFd2tfVGlsZWRfQmFja2luZ19TdG8KICAg
ICBzdGFydCA9IHByaXYtPnZpZXcuaXRlbXM7CiAgICAgZW5kID0gcHJpdi0+dmlldy5pdGVtcyAr
IHByaXYtPnZpZXcucm93czsKICAgICBmb3IgKDsgc3RhcnQgPCBlbmQ7IHN0YXJ0KyspIHsKLSAg
ICAgICAgY29uc3QgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSogaXQ7CisgICAgICAgIGNv
bnN0IEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0qIGl0ZW07CiAKLSAgICAgICAgRUlOQV9J
TkxJU1RfRk9SRUFDSCgqc3RhcnQsIGl0KSB7Ci0gICAgICAgICAgICBwcmludGYoIiAlKzRkLCUr
NGQgIiwgaXQtPmdlb21ldHJ5LngsIGl0LT5nZW9tZXRyeS55KTsKKyAgICAgICAgRUlOQV9JTkxJ
U1RfRk9SRUFDSCgqc3RhcnQsIGl0ZW0pIHsKKyAgICAgICAgICAgIHByaW50ZigiICUrNGQsJSs0
ZCAiLCBpdGVtLT5nZW9tZXRyeS54LCBpdGVtLT5nZW9tZXRyeS55KTsKIAotICAgICAgICAgICAg
aWYgKCFpdC0+dGlsZSkKKyAgICAgICAgICAgIGlmICghaXRlbS0+dGlsZSkKICAgICAgICAgICAg
ICAgICBwcmludGYoIiAgICAgICAgICAgIDsiKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICBwcmludGYoIiU4cCAlbHUsJWx1OyIsIGl0LT50aWxlLCBpdC0+dGlsZS0+Y29sLCBp
dC0+dGlsZS0+cm93KTsKKyAgICAgICAgICAgICAgICBwcmludGYoIiU4cCAlbHUsJWx1OyIsIGl0
ZW0tPnRpbGUsIGl0ZW0tPnRpbGUtPmNvbCwgaXRlbS0+dGlsZS0+cm93KTsKICAgICAgICAgfQog
ICAgICAgICBwcmludGYoIlxuIik7CiAgICAgfQpAQCAtOTQxLDM3ICs5NDEsMzcgQEAgc3RhdGlj
IGlubGluZSB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X2RiZyhjb25zdCBFd2tf
VGlsZWRfQmFja2luZ19TdG8KICAqLwogc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX3ZpZXdfd3JhcF91cChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2LCBFdmFz
X0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwgdW5zaWduZWQgaW50IGNvdW50KQogewotICAgIHVuc2ln
bmVkIGludCBsYXN0X3JvdyA9IHByaXYtPnZpZXcucm93cyAtIDE7Ci0gICAgRXZhc19Db29yZCB0
dyA9IHByaXYtPnZpZXcudGlsZS53aWR0aDsKLSAgICBFdmFzX0Nvb3JkIHRoID0gcHJpdi0+dmll
dy50aWxlLmhlaWdodDsKLSAgICBFdmFzX0Nvb3JkIG9mZl95ID0gcHJpdi0+dmlldy5vZmZzZXQu
YmFzZS55ICsgY291bnQgKiB0aDsKLSAgICBFdmFzX0Nvb3JkIG95ID0geSArIChsYXN0X3JvdyAt
IGNvdW50ICsgMSkgKiB0aCArIG9mZl95OwotICAgIEVpbmFfSW5saXN0KiogaXRyX3N0YXJ0LCAq
Kml0cl9lbmQ7CisgICAgdW5zaWduZWQgaW50IGxhc3RSb3cgPSBwcml2LT52aWV3LnJvd3MgLSAx
OworICAgIEV2YXNfQ29vcmQgdGlsZVdpZHRoID0gcHJpdi0+dmlldy50aWxlLndpZHRoOworICAg
IEV2YXNfQ29vcmQgdGlsZUhlaWdodCA9IHByaXYtPnZpZXcudGlsZS5oZWlnaHQ7CisgICAgRXZh
c19Db29yZCBvZmZzZXRZID0gcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ICsgY291bnQgKiB0aWxl
SGVpZ2h0OworICAgIEV2YXNfQ29vcmQgdGlsZVBvc2l0aW9uWSA9IHkgKyAobGFzdFJvdyAtIGNv
dW50ICsgMSkgKiB0aWxlSGVpZ2h0ICsgb2Zmc2V0WTsKKyAgICBFaW5hX0lubGlzdCoqIGl0ZXJh
dG9yU3RhcnQsICoqaXRlcmF0b3JFbmQ7CiAKLSAgICBpdHJfc3RhcnQgPSBwcml2LT52aWV3Lml0
ZW1zOwotICAgIGl0cl9lbmQgPSBpdHJfc3RhcnQgKyBsYXN0X3JvdzsKKyAgICBpdGVyYXRvclN0
YXJ0ID0gcHJpdi0+dmlldy5pdGVtczsKKyAgICBpdGVyYXRvckVuZCA9IGl0ZXJhdG9yU3RhcnQg
KyBsYXN0Um93OwogCiAgICAgZm9yICg7IGNvdW50ID4gMDsgY291bnQtLSkgewotICAgICAgICBF
aW5hX0lubGlzdCoqIGl0cjsKLSAgICAgICAgRWluYV9Jbmxpc3QqIHRtcCA9ICppdHJfc3RhcnQ7
Ci0gICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0qIGl0OwotICAgICAgICBFdmFz
X0Nvb3JkIG94ID0geCArIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueDsKLSAgICAgICAgaW50IGMg
PSAwOworICAgICAgICBFaW5hX0lubGlzdCoqIGl0ZXJhdG9yTGlzdDsKKyAgICAgICAgRWluYV9J
bmxpc3QqIHRlbXAgPSAqaXRlcmF0b3JTdGFydDsKKyAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdf
U3RvcmVfSXRlbSogaXRlbTsKKyAgICAgICAgRXZhc19Db29yZCBvcmlnaWFubFggPSB4ICsgcHJp
di0+dmlldy5vZmZzZXQuYmFzZS54OworICAgICAgICBpbnQgY291bnQxID0gMDsKIAotICAgICAg
ICBmb3IgKGl0ciA9IGl0cl9zdGFydDsgaXRyIDwgaXRyX2VuZDsgaXRyKyspCi0gICAgICAgICAg
ICAqaXRyID0gKihpdHIgKyAxKTsKLSAgICAgICAgKml0ciA9IHRtcDsKKyAgICAgICAgZm9yIChp
dGVyYXRvckxpc3QgPSBpdGVyYXRvclN0YXJ0OyBpdGVyYXRvckxpc3QgPCBpdGVyYXRvckVuZDsg
aXRlcmF0b3JMaXN0KyspCisgICAgICAgICAgICAqaXRlcmF0b3JMaXN0ID0gKihpdGVyYXRvckxp
c3QgKyAxKTsKKyAgICAgICAgKml0ZXJhdG9yTGlzdCA9IHRlbXA7CiAKICAgICAgICAgcHJpdi0+
bW9kZWwuYmFzZS5yb3crKzsKLSAgICAgICAgRUlOQV9JTkxJU1RfRk9SRUFDSCh0bXAsIGl0KSB7
Ci0gICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9tb3ZlKGl0LCBveCwg
b3kpOwotICAgICAgICAgICAgb3ggKz0gdHc7Ci0gICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfaXRlbV9maWxsKHByaXYsIGl0LCBjLCBsYXN0X3Jvdyk7Ci0gICAgICAgICAgICBj
Kys7CisgICAgICAgIEVJTkFfSU5MSVNUX0ZPUkVBQ0godGVtcCwgaXRlbSkgeworICAgICAgICAg
ICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fbW92ZShpdGVtLCBvcmlnaWFubFgsIHRp
bGVQb3NpdGlvblkpOworICAgICAgICAgICAgb3JpZ2lhbmxYICs9IHRpbGVXaWR0aDsKKyAgICAg
ICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2ZpbGwocHJpdiwgaXRlbSwgY291
bnQxLCBsYXN0Um93KTsKKyAgICAgICAgICAgIGNvdW50MSsrOwogICAgICAgICB9Ci0gICAgICAg
IG95ICs9IHRoOworICAgICAgICB0aWxlUG9zaXRpb25ZICs9IHRpbGVIZWlnaHQ7CiAgICAgfQot
ICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSA9IG9mZl95OworICAgIHByaXYtPnZpZXcub2Zm
c2V0LmJhc2UueSA9IG9mZnNldFk7CiB9CiAKIC8qKgpAQCAtOTg5LDM2ICs5ODksMzYgQEAgc3Rh
dGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfd3JhcF91cChFd2tfVGlsZWRf
QmFja2luZ19TdG9yZV9EYXRhKgogICovCiBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfdmlld193cmFwX2Rvd24oRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdiwg
RXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHksIHVuc2lnbmVkIGludCBjb3VudCkKIHsKLSAgICBF
dmFzX0Nvb3JkIHR3ID0gcHJpdi0+dmlldy50aWxlLndpZHRoOwotICAgIEV2YXNfQ29vcmQgdGgg
PSBwcml2LT52aWV3LnRpbGUuaGVpZ2h0OwotICAgIEV2YXNfQ29vcmQgb2ZmX3kgPSBwcml2LT52
aWV3Lm9mZnNldC5iYXNlLnkgLSBjb3VudCAqIHRoOwotICAgIEV2YXNfQ29vcmQgb3kgPSB5ICsg
b2ZmX3kgKyAoY291bnQgLSAxKSAqIHRoOwotICAgIEVpbmFfSW5saXN0KiogaXRyX3N0YXJ0LCAq
Kml0cl9lbmQ7CisgICAgRXZhc19Db29yZCB0aWxlV2lkdGggPSBwcml2LT52aWV3LnRpbGUud2lk
dGg7CisgICAgRXZhc19Db29yZCB0aWxlSGVpZ2h0ID0gcHJpdi0+dmlldy50aWxlLmhlaWdodDsK
KyAgICBFdmFzX0Nvb3JkIG9mZnNldFkgPSBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgLSBjb3Vu
dCAqIHRpbGVIZWlnaHQ7CisgICAgRXZhc19Db29yZCB0aWxlUG9zaXRpb25ZID0geSArIG9mZnNl
dFkgKyAoY291bnQgLSAxKSAqIHRpbGVIZWlnaHQ7CisgICAgRWluYV9Jbmxpc3QqKiBpdGVyYXRv
clN0YXJ0LCAqKml0ZXJhdG9yRW5kOwogCi0gICAgaXRyX3N0YXJ0ID0gcHJpdi0+dmlldy5pdGVt
cyArIHByaXYtPnZpZXcucm93cyAtIDE7Ci0gICAgaXRyX2VuZCA9IHByaXYtPnZpZXcuaXRlbXM7
CisgICAgaXRlcmF0b3JTdGFydCA9IHByaXYtPnZpZXcuaXRlbXMgKyBwcml2LT52aWV3LnJvd3Mg
LSAxOworICAgIGl0ZXJhdG9yRW5kID0gcHJpdi0+dmlldy5pdGVtczsKIAogICAgIGZvciAoOyBj
b3VudCA+IDA7IGNvdW50LS0pIHsKLSAgICAgICAgRWluYV9Jbmxpc3QqKiBpdHI7Ci0gICAgICAg
IEVpbmFfSW5saXN0KiB0bXAgPSAqaXRyX3N0YXJ0OwotICAgICAgICBFd2tfVGlsZWRfQmFja2lu
Z19TdG9yZV9JdGVtKiBpdDsKLSAgICAgICAgRXZhc19Db29yZCBveCA9IHggKyBwcml2LT52aWV3
Lm9mZnNldC5iYXNlLng7Ci0gICAgICAgIGludCBjID0gMDsKKyAgICAgICAgRWluYV9Jbmxpc3Qq
KiBpdGVyYXRvckxpc3Q7CisgICAgICAgIEVpbmFfSW5saXN0KiB0ZW1wID0gKml0ZXJhdG9yU3Rh
cnQ7CisgICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0qIGl0ZW07CisgICAgICAg
IEV2YXNfQ29vcmQgdGlsZVBvc2l0aW9uWCA9IHggKyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLng7
CisgICAgICAgIGludCBjb3VudDEgPSAwOwogCi0gICAgICAgIGZvciAoaXRyID0gaXRyX3N0YXJ0
OyBpdHIgPiBpdHJfZW5kOyBpdHItLSkKLSAgICAgICAgICAgICppdHIgPSAqKGl0ciAtIDEpOwot
ICAgICAgICAqaXRyID0gdG1wOworICAgICAgICBmb3IgKGl0ZXJhdG9yTGlzdCA9IGl0ZXJhdG9y
U3RhcnQ7IGl0ZXJhdG9yTGlzdCA+IGl0ZXJhdG9yRW5kOyBpdGVyYXRvckxpc3QtLSkKKyAgICAg
ICAgICAgICppdGVyYXRvckxpc3QgPSAqKGl0ZXJhdG9yTGlzdCAtIDEpOworICAgICAgICAqaXRl
cmF0b3JMaXN0ID0gdGVtcDsKIAogICAgICAgICBwcml2LT5tb2RlbC5iYXNlLnJvdy0tOwotICAg
ICAgICBFSU5BX0lOTElTVF9GT1JFQUNIKHRtcCwgaXQpIHsKLSAgICAgICAgICAgIF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9pdGVtX21vdmUoaXQsIG94LCBveSk7Ci0gICAgICAgICAgICBveCAr
PSB0dzsKLSAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2ZpbGwocHJp
diwgaXQsIGMsIDApOwotICAgICAgICAgICAgYysrOworICAgICAgICBFSU5BX0lOTElTVF9GT1JF
QUNIKHRlbXAsIGl0ZW0pIHsKKyAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9p
dGVtX21vdmUoaXRlbSwgdGlsZVBvc2l0aW9uWCwgdGlsZVBvc2l0aW9uWSk7CisgICAgICAgICAg
ICB0aWxlUG9zaXRpb25YICs9IHRpbGVXaWR0aDsKKyAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9pdGVtX2ZpbGwocHJpdiwgaXRlbSwgY291bnQxLCAwKTsKKyAgICAgICAgICAg
IGNvdW50MSsrOwogICAgICAgICB9Ci0gICAgICAgIG95IC09IHRoOworICAgICAgICB0aWxlUG9z
aXRpb25ZIC09IHRpbGVIZWlnaHQ7CiAgICAgfQotICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2Uu
eSA9IG9mZl95OworICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSA9IG9mZnNldFk7CiB9CiAK
IC8qKgpAQCAtMTAzNiwzNiArMTAzNiwzNiBAQCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfdmlld193cmFwX2Rvd24oRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YQogICov
CiBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld193cmFwX2xlZnQoRXdr
X1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdiwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3Jk
IHksIHVuc2lnbmVkIGludCBjb3VudCkKIHsKLSAgICB1bnNpZ25lZCBpbnQgciwgbGFzdF9jb2wg
PSBwcml2LT52aWV3LmNvbHMgLSAxOwotICAgIEV2YXNfQ29vcmQgdHcgPSBwcml2LT52aWV3LnRp
bGUud2lkdGg7Ci0gICAgRXZhc19Db29yZCB0aCA9IHByaXYtPnZpZXcudGlsZS5oZWlnaHQ7Ci0g
ICAgRXZhc19Db29yZCBvZmZfeCA9IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCArIGNvdW50ICog
dHc7CisgICAgdW5zaWduZWQgaW50IHJvdywgbGFzdENvbHVtbiA9IHByaXYtPnZpZXcuY29scyAt
IDE7CisgICAgRXZhc19Db29yZCB0aWxlV2lkdGggPSBwcml2LT52aWV3LnRpbGUud2lkdGg7Cisg
ICAgRXZhc19Db29yZCB0aWxlSGVpZ2h0ID0gcHJpdi0+dmlldy50aWxlLmhlaWdodDsKKyAgICBF
dmFzX0Nvb3JkIG9mZnNldFggPSBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggKyBjb3VudCAqIHRp
bGVXaWR0aDsKICAgICBFdmFzX0Nvb3JkIG95ID0geSArIHByaXYtPnZpZXcub2Zmc2V0LmJhc2Uu
eTsKLSAgICBFaW5hX0lubGlzdCoqIGl0cjsKLSAgICBFaW5hX0lubGlzdCoqIGl0cl9lbmQ7Cisg
ICAgRWluYV9Jbmxpc3QqKiBpdGVyYXRvcjsKKyAgICBFaW5hX0lubGlzdCoqIGl0ZXJhdG9yRW5k
OwogCi0gICAgaXRyID0gcHJpdi0+dmlldy5pdGVtczsKLSAgICBpdHJfZW5kID0gaXRyICsgcHJp
di0+dmlldy5yb3dzOwotICAgIHIgPSAwOworICAgIGl0ZXJhdG9yID0gcHJpdi0+dmlldy5pdGVt
czsKKyAgICBpdGVyYXRvckVuZCA9IGl0ZXJhdG9yICsgcHJpdi0+dmlldy5yb3dzOworICAgIHJv
dyA9IDA7CiAKLSAgICBwcml2LT5tb2RlbC5iYXNlLmNvbCArPSBjb3VudDsKKyAgICBwcml2LT5t
b2RlbC5iYXNlLmNvbHVtbiArPSBjb3VudDsKIAotICAgIGZvciAoOyBpdHIgPCBpdHJfZW5kOyBp
dHIrKywgcisrKSB7Ci0gICAgICAgIEV2YXNfQ29vcmQgb3ggPSB4ICsgKGxhc3RfY29sIC0gY291
bnQgKyAxKSAqIHR3ICsgb2ZmX3g7Ci0gICAgICAgIHVuc2lnbmVkIGludCBpLCBjID0gbGFzdF9j
b2wgLSBjb3VudCArIDE7CisgICAgZm9yICg7IGl0ZXJhdG9yIDwgaXRlcmF0b3JFbmQ7IGl0ZXJh
dG9yKyssIHJvdysrKSB7CisgICAgICAgIEV2YXNfQ29vcmQgb3ggPSB4ICsgKGxhc3RDb2x1bW4g
LSBjb3VudCArIDEpICogdGlsZVdpZHRoICsgb2Zmc2V0WDsKKyAgICAgICAgdW5zaWduZWQgaW50
IGMgPSBsYXN0Q29sdW1uIC0gY291bnQgKyAxOwogCi0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBj
b3VudDsgaSsrLCBjKyssIG94ICs9IHR3KSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkg
PSAwOyBpIDwgY291bnQ7IGkrKywgYysrLCBveCArPSB0aWxlV2lkdGgpIHsKICAgICAgICAgICAg
IEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0qIGl0OwotICAgICAgICAgICAgaXQgPSBFSU5B
X0lOTElTVF9DT05UQUlORVJfR0VUKCppdHIsIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0p
OwotICAgICAgICAgICAgKml0ciA9IGVpbmFfaW5saXN0X2RlbW90ZSgqaXRyLCAqaXRyKTsKKyAg
ICAgICAgICAgIGl0ID0gRUlOQV9JTkxJU1RfQ09OVEFJTkVSX0dFVCgqaXRlcmF0b3IsIEV3a19U
aWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0pOworICAgICAgICAgICAgKml0ZXJhdG9yID0gZWluYV9p
bmxpc3RfZGVtb3RlKCppdGVyYXRvciwgKml0ZXJhdG9yKTsKIAogICAgICAgICAgICAgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fbW92ZShpdCwgb3gsIG95KTsKLSAgICAgICAgICAgIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2ZpbGwocHJpdiwgaXQsIGMsIHIpOworICAgICAg
ICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZmlsbChwcml2LCBpdCwgYywgcm93
KTsKICAgICAgICAgfQotICAgICAgICBveSArPSB0aDsKKyAgICAgICAgb3kgKz0gdGlsZUhlaWdo
dDsKICAgICB9CiAKLSAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggPSBvZmZfeDsKKyAgICBw
cml2LT52aWV3Lm9mZnNldC5iYXNlLnggPSBvZmZzZXRYOwogfQogCiAvKioKQEAgLTEwODMsMTgz
ICsxMDgzLDE4MyBAQCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld193
cmFwX2xlZnQoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YQogICovCiBzdGF0aWMgdm9pZCBf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld193cmFwX3JpZ2h0KEV3a19UaWxlZF9CYWNraW5n
X1N0b3JlX0RhdGEqIHByaXYsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5LCB1bnNpZ25lZCBp
bnQgY291bnQpCiB7Ci0gICAgdW5zaWduZWQgaW50IHI7Ci0gICAgRXZhc19Db29yZCB0dyA9IHBy
aXYtPnZpZXcudGlsZS53aWR0aDsKLSAgICBFdmFzX0Nvb3JkIHRoID0gcHJpdi0+dmlldy50aWxl
LmhlaWdodDsKLSAgICBFdmFzX0Nvb3JkIG9mZl94ID0gcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54
IC0gY291bnQgKiB0dzsKLSAgICBFdmFzX0Nvb3JkIG95ID0geSArIHByaXYtPnZpZXcub2Zmc2V0
LmJhc2UueTsKLSAgICBFaW5hX0lubGlzdCoqIGl0ciwgKiogaXRyX2VuZDsKKyAgICB1bnNpZ25l
ZCBpbnQgcm93OworICAgIEV2YXNfQ29vcmQgdGlsZVdpZHRoID0gcHJpdi0+dmlldy50aWxlLndp
ZHRoOworICAgIEV2YXNfQ29vcmQgdGlsZUhlaWdodCA9IHByaXYtPnZpZXcudGlsZS5oZWlnaHQ7
CisgICAgRXZhc19Db29yZCBvZmZzZXRYID0gcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54IC0gY291
bnQgKiB0aWxlV2lkdGg7CisgICAgRXZhc19Db29yZCB0aWxlUG9zaXRpb25ZID0geSArIHByaXYt
PnZpZXcub2Zmc2V0LmJhc2UueTsKKyAgICBFaW5hX0lubGlzdCoqIGl0ZXJhdG9yLCAqKiBpdGVy
YXRvckVuZDsKIAotICAgIGl0ciA9IHByaXYtPnZpZXcuaXRlbXM7Ci0gICAgaXRyX2VuZCA9IGl0
ciArIHByaXYtPnZpZXcucm93czsKLSAgICByID0gMDsKKyAgICBpdGVyYXRvciA9IHByaXYtPnZp
ZXcuaXRlbXM7CisgICAgaXRlcmF0b3JFbmQgPSBpdGVyYXRvciArIHByaXYtPnZpZXcucm93czsK
KyAgICByb3cgPSAwOwogCi0gICAgcHJpdi0+bW9kZWwuYmFzZS5jb2wgLT0gY291bnQ7CisgICAg
cHJpdi0+bW9kZWwuYmFzZS5jb2x1bW4gLT0gY291bnQ7CiAKLSAgICBmb3IgKDsgaXRyIDwgaXRy
X2VuZDsgaXRyKyssIHIrKykgewotICAgICAgICBFdmFzX0Nvb3JkIG94ID0geCArIChjb3VudCAt
IDEpICogdHcgKyBvZmZfeDsKLSAgICAgICAgdW5zaWduZWQgaW50IGksIGMgPSBjb3VudCAtIDE7
CisgICAgZm9yICg7IGl0ZXJhdG9yIDwgaXRlcmF0b3JFbmQ7IGl0ZXJhdG9yKyssIHJvdysrKSB7
CisgICAgICAgIEV2YXNfQ29vcmQgb3ggPSB4ICsgKGNvdW50IC0gMSkgKiB0aWxlV2lkdGggKyBv
ZmZzZXRYOworICAgICAgICB1bnNpZ25lZCBpbnQgYyA9IGNvdW50IC0gMTsKIAotICAgICAgICBm
b3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKywgYy0tLCBveCAtPSB0dykgewotICAgICAgICAgICAg
RXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSogaXQ7Ci0gICAgICAgICAgICBpdCA9IEVJTkFf
SU5MSVNUX0NPTlRBSU5FUl9HRVQoKCppdHIpLT5sYXN0LCBFd2tfVGlsZWRfQmFja2luZ19TdG9y
ZV9JdGVtKTsKLSAgICAgICAgICAgICppdHIgPSBlaW5hX2lubGlzdF9wcm9tb3RlKCppdHIsICgq
aXRyKS0+bGFzdCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7
IGkrKywgYy0tLCBveCAtPSB0aWxlV2lkdGgpIHsKKyAgICAgICAgICAgIEV3a19UaWxlZF9CYWNr
aW5nX1N0b3JlX0l0ZW0qIGl0ZW07CisgICAgICAgICAgICBpdGVtID0gRUlOQV9JTkxJU1RfQ09O
VEFJTkVSX0dFVCgoKml0ZXJhdG9yKS0+bGFzdCwgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRl
bSk7CisgICAgICAgICAgICAqaXRlcmF0b3IgPSBlaW5hX2lubGlzdF9wcm9tb3RlKCppdGVyYXRv
ciwgKCppdGVyYXRvciktPmxhc3QpOwogCi0gICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfaXRlbV9tb3ZlKGl0LCBveCwgb3kpOwotICAgICAgICAgICAgX2V3a190aWxlZF9iYWNr
aW5nX3N0b3JlX2l0ZW1fZmlsbChwcml2LCBpdCwgYywgcik7CisgICAgICAgICAgICBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9tb3ZlKGl0ZW0sIG94LCB0aWxlUG9zaXRpb25ZKTsKKyAg
ICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2ZpbGwocHJpdiwgaXRlbSwg
Yywgcm93KTsKICAgICAgICAgfQotICAgICAgICBveSArPSB0aDsKKyAgICAgICAgdGlsZVBvc2l0
aW9uWSArPSB0aWxlSGVpZ2h0OwogICAgIH0KIAotICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2Uu
eCA9IG9mZl94OworICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCA9IG9mZnNldFg7CiB9CiAK
IHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3JlZmlsbChFd2tfVGls
ZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2LCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwg
aW50IHN0ZXBYLCBpbnQgc3RlcFkpCiB7Ci0gICAgRWluYV9Jbmxpc3QqKiBpdHIsICoqaXRyX2Vu
ZDsKLSAgICBFdmFzX0Nvb3JkIGJhc2Vfb3gsIG95LCB0dywgdGg7CisgICAgRWluYV9Jbmxpc3Qq
KiBpdGVyYXRvciwgKippdGVyYXRvckVuZDsKKyAgICBFdmFzX0Nvb3JkIGJhc2VUaWxlUG9zaXRp
b25YLCB0aWxlUG9zaXRpb25ZLCB0aWxlV2lkdGgsIHRpbGVIZWlnaHQ7CiAgICAgdW5zaWduZWQg
aW50IHI7CiAKICAgICBldmFzX29iamVjdF9tb3ZlKHByaXYtPmJhc2UuY2xpcHBlciwgeCwgeSk7
CiAKLSAgICB0dyA9IHByaXYtPnZpZXcudGlsZS53aWR0aDsKLSAgICB0aCA9IHByaXYtPnZpZXcu
dGlsZS5oZWlnaHQ7CisgICAgdGlsZVdpZHRoID0gcHJpdi0+dmlldy50aWxlLndpZHRoOworICAg
IHRpbGVIZWlnaHQgPSBwcml2LT52aWV3LnRpbGUuaGVpZ2h0OwogCi0gICAgYmFzZV9veCA9IHgg
KyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLng7Ci0gICAgb3kgPSB5ICsgcHJpdi0+dmlldy5vZmZz
ZXQuYmFzZS55OworICAgIGJhc2VUaWxlUG9zaXRpb25YID0geCArIHByaXYtPnZpZXcub2Zmc2V0
LmJhc2UueDsKKyAgICB0aWxlUG9zaXRpb25ZID0geSArIHByaXYtPnZpZXcub2Zmc2V0LmJhc2Uu
eTsKIAotICAgIGl0ciA9IHByaXYtPnZpZXcuaXRlbXM7Ci0gICAgaXRyX2VuZCA9IGl0ciArIHBy
aXYtPnZpZXcucm93czsKKyAgICBpdGVyYXRvciA9IHByaXYtPnZpZXcuaXRlbXM7CisgICAgaXRl
cmF0b3JFbmQgPSBpdGVyYXRvciArIHByaXYtPnZpZXcucm93czsKICAgICByID0gMDsKIAotICAg
IHByaXYtPm1vZGVsLmJhc2UuY29sIC09IHN0ZXBYOworICAgIHByaXYtPm1vZGVsLmJhc2UuY29s
dW1uIC09IHN0ZXBYOwogICAgIHByaXYtPm1vZGVsLmJhc2Uucm93IC09IHN0ZXBZOwogCi0gICAg
Zm9yICg7IGl0ciA8IGl0cl9lbmQ7IGl0cisrLCByKyspIHsKLSAgICAgICAgRXdrX1RpbGVkX0Jh
Y2tpbmdfU3RvcmVfSXRlbSogaXQ7Ci0gICAgICAgIEV2YXNfQ29vcmQgb3ggPSBiYXNlX294Owot
ICAgICAgICB1bnNpZ25lZCBpbnQgYyA9IDA7Ci0gICAgICAgIEVJTkFfSU5MSVNUX0ZPUkVBQ0go
Kml0ciwgaXQpIHsKLSAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2Zp
bGwocHJpdiwgaXQsIGMsIHIpOwotICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X2l0ZW1fbW92ZShpdCwgb3gsIG95KTsKLSAgICAgICAgICAgIGMrKzsKLSAgICAgICAgICAgIG94
ICs9IHR3OworICAgIGZvciAoOyBpdGVyYXRvciA8IGl0ZXJhdG9yRW5kOyBpdGVyYXRvcisrLCBy
KyspIHsKKyAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSogaXRlbTsKKyAgICAg
ICAgRXZhc19Db29yZCBuZXdUaWxlUG9zaXRpb25YID0gYmFzZVRpbGVQb3NpdGlvblg7CisgICAg
ICAgIHVuc2lnbmVkIGludCBjb3VudCA9IDA7CisgICAgICAgIEVJTkFfSU5MSVNUX0ZPUkVBQ0go
Kml0ZXJhdG9yLCBpdGVtKSB7CisgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
aXRlbV9maWxsKHByaXYsIGl0ZW0sIGNvdW50LCByKTsKKyAgICAgICAgICAgIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV9pdGVtX21vdmUoaXRlbSwgbmV3VGlsZVBvc2l0aW9uWCwgdGlsZVBvc2l0
aW9uWSk7CisgICAgICAgICAgICBjb3VudCsrOworICAgICAgICAgICAgbmV3VGlsZVBvc2l0aW9u
WCArPSB0aWxlV2lkdGg7CiAgICAgICAgIH0KLSAgICAgICAgb3kgKz0gdGg7CisgICAgICAgIHRp
bGVQb3NpdGlvblkgKz0gdGlsZUhlaWdodDsKICAgICB9CiB9CiAKIHN0YXRpYyB2b2lkIF9ld2tf
dGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3Bvc19hcHBseShFd2tfVGlsZWRfQmFja2luZ19TdG9y
ZV9EYXRhKiBwcml2LCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSkKIHsKLSAgICBFaW5hX0lu
bGlzdCoqIGl0ciwgKippdHJfZW5kOwotICAgIEV2YXNfQ29vcmQgYmFzZV9veCwgb3ksIHR3LCB0
aDsKKyAgICBFaW5hX0lubGlzdCoqIGl0ZXJhdG9yLCAqKml0ZXJhdG9yRW5kOworICAgIEV2YXNf
Q29vcmQgYmFzZVRpbGVQb3NpdGlvblgsIGJhc2VUaWxlUG9zaXRpb25ZLCB0aWxlV2lkdGgsIHRp
bGVIZWlnaHQ7CiAKICAgICBldmFzX29iamVjdF9tb3ZlKHByaXYtPmJhc2UuY2xpcHBlciwgeCwg
eSk7CiAKLSAgICB0dyA9IHByaXYtPnZpZXcudGlsZS53aWR0aDsKLSAgICB0aCA9IHByaXYtPnZp
ZXcudGlsZS5oZWlnaHQ7CisgICAgdGlsZVdpZHRoID0gcHJpdi0+dmlldy50aWxlLndpZHRoOwor
ICAgIHRpbGVIZWlnaHQgPSBwcml2LT52aWV3LnRpbGUuaGVpZ2h0OwogCi0gICAgYmFzZV9veCA9
IHggKyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLng7Ci0gICAgb3kgPSB5ICsgcHJpdi0+dmlldy5v
ZmZzZXQuYmFzZS55OworICAgIGJhc2VUaWxlUG9zaXRpb25YID0geCArIHByaXYtPnZpZXcub2Zm
c2V0LmJhc2UueDsKKyAgICBiYXNlVGlsZVBvc2l0aW9uWSA9IHkgKyBwcml2LT52aWV3Lm9mZnNl
dC5iYXNlLnk7CiAKLSAgICBpdHIgPSBwcml2LT52aWV3Lml0ZW1zOwotICAgIGl0cl9lbmQgPSBp
dHIgKyBwcml2LT52aWV3LnJvd3M7Ci0gICAgZm9yICg7IGl0ciA8IGl0cl9lbmQ7IGl0cisrKSB7
CisgICAgaXRlcmF0b3IgPSBwcml2LT52aWV3Lml0ZW1zOworICAgIGl0ZXJhdG9yRW5kID0gaXRl
cmF0b3IgKyBwcml2LT52aWV3LnJvd3M7CisgICAgZm9yICg7IGl0ZXJhdG9yIDwgaXRlcmF0b3JF
bmQ7IGl0ZXJhdG9yKyspIHsKICAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSog
aXQ7Ci0gICAgICAgIEV2YXNfQ29vcmQgb3ggPSBiYXNlX294OwotICAgICAgICBFSU5BX0lOTElT
VF9GT1JFQUNIKCppdHIsIGl0KSB7Ci0gICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfaXRlbV9tb3ZlKGl0LCBveCwgb3kpOwotICAgICAgICAgICAgb3ggKz0gdHc7CisgICAgICAg
IEV2YXNfQ29vcmQgb3ggPSBiYXNlVGlsZVBvc2l0aW9uWDsKKyAgICAgICAgRUlOQV9JTkxJU1Rf
Rk9SRUFDSCgqaXRlcmF0b3IsIGl0KSB7CisgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfaXRlbV9tb3ZlKGl0LCBveCwgYmFzZVRpbGVQb3NpdGlvblkpOworICAgICAgICAgICAg
b3ggKz0gdGlsZVdpZHRoOwogICAgICAgICB9Ci0gICAgICAgIG95ICs9IHRoOworICAgICAgICBi
YXNlVGlsZVBvc2l0aW9uWSArPSB0aWxlSGVpZ2h0OwogICAgIH0KIH0KIAogc3RhdGljIHZvaWQg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZV9vZmZzZXRfZm9yY2UoRXdr
X1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdikKIHsKLSAgICBFdmFzX0Nvb3JkIGR4ID0g
cHJpdi0+dmlldy5vZmZzZXQuY3VyLnggLSBwcml2LT52aWV3Lm9mZnNldC5vbGQueDsKLSAgICBF
dmFzX0Nvb3JkIGR5ID0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkgLSBwcml2LT52aWV3Lm9mZnNl
dC5vbGQueTsKLSAgICBFdmFzX0Nvb3JkIHR3LCB0aDsKLSAgICBpbnQgc3RlcF95LCBzdGVwX3g7
CisgICAgRXZhc19Db29yZCBkZWx0YVggPSBwcml2LT52aWV3Lm9mZnNldC5jdXIueCAtIHByaXYt
PnZpZXcub2Zmc2V0Lm9sZC54OworICAgIEV2YXNfQ29vcmQgZGVsdGFZID0gcHJpdi0+dmlldy5v
ZmZzZXQuY3VyLnkgLSBwcml2LT52aWV3Lm9mZnNldC5vbGQueTsKKyAgICBFdmFzX0Nvb3JkIHRp
bGVXaWR0aCwgdGlsZUhlaWdodDsKKyAgICBpbnQgc3RlcFksIHN0ZXBYOwogCi0gICAgSU5GKCJv
PSVwLCBvZmZzZXQ6ICUrNGQsICUrNGQgKCUrNGQsICUrNGQpIiwKLSAgICAgICAgcHJpdi0+c2Vs
ZiwgZHgsIGR5LCBwcml2LT52aWV3Lm9mZnNldC5jdXIueCwgcHJpdi0+dmlldy5vZmZzZXQuY3Vy
LnkpOworICAgIElORigiZXdrVGlsZSVwLCBvZmZzZXQ6ICUrNGQsICUrNGQgKCUrNGQsICUrNGQp
IiwKKyAgICAgICAgcHJpdi0+c2VsZiwgZGVsdGFYLCBkZWx0YVksIHByaXYtPnZpZXcub2Zmc2V0
LmN1ci54LCBwcml2LT52aWV3Lm9mZnNldC5jdXIueSk7CiAKLSAgICB0dyA9IHByaXYtPnZpZXcu
dGlsZS53aWR0aDsKLSAgICB0aCA9IHByaXYtPnZpZXcudGlsZS5oZWlnaHQ7CisgICAgdGlsZVdp
ZHRoID0gcHJpdi0+dmlldy50aWxlLndpZHRoOworICAgIHRpbGVIZWlnaHQgPSBwcml2LT52aWV3
LnRpbGUuaGVpZ2h0OwogCi0gICAgbG9uZyBuZXdfY29sID0gLXByaXYtPnZpZXcub2Zmc2V0LmN1
ci54IC8gdHc7Ci0gICAgc3RlcF94ID0gcHJpdi0+bW9kZWwuYmFzZS5jb2wgLSBuZXdfY29sOwot
ICAgIGxvbmcgbmV3X3JvdyA9IC1wcml2LT52aWV3Lm9mZnNldC5jdXIueSAvIHRoOwotICAgIHN0
ZXBfeSA9IHByaXYtPm1vZGVsLmJhc2Uucm93IC0gbmV3X3JvdzsKKyAgICBsb25nIG5ld0NvbHVt
biA9IC1wcml2LT52aWV3Lm9mZnNldC5jdXIueCAvIHRpbGVXaWR0aDsKKyAgICBzdGVwWCA9IHBy
aXYtPm1vZGVsLmJhc2UuY29sdW1uIC0gbmV3Q29sdW1uOworICAgIGxvbmcgbmV3Um93ID0gLXBy
aXYtPnZpZXcub2Zmc2V0LmN1ci55IC8gdGlsZUhlaWdodDsKKyAgICBzdGVwWSA9IHByaXYtPm1v
ZGVsLmJhc2Uucm93IC0gbmV3Um93OwogCiAgICAgcHJpdi0+dmlldy5vZmZzZXQub2xkLnggPSBw
cml2LT52aWV3Lm9mZnNldC5jdXIueDsKICAgICBwcml2LT52aWV3Lm9mZnNldC5vbGQueSA9IHBy
aXYtPnZpZXcub2Zmc2V0LmN1ci55OwogICAgIGV2YXNfb2JqZWN0X21vdmUoCi0gICAgICAgIHBy
aXYtPmNvbnRlbnRzX2NsaXBwZXIsCisgICAgICAgIHByaXYtPmNvbnRlbnRzQ2xpcHBlciwKICAg
ICAgICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggKyBwcml2LT52aWV3LngsCiAgICAgICAgIHBy
aXYtPnZpZXcub2Zmc2V0LmN1ci55ICsgcHJpdi0+dmlldy55KTsKIAotICAgIHByaXYtPnZpZXcu
b2Zmc2V0LmJhc2UueCArPSBkeCAtIHN0ZXBfeCAqIHR3OwotICAgIHByaXYtPnZpZXcub2Zmc2V0
LmJhc2UueSArPSBkeSAtIHN0ZXBfeSAqIHRoOworICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2Uu
eCArPSBkZWx0YVggLSBzdGVwWCAqIHRpbGVXaWR0aDsKKyAgICBwcml2LT52aWV3Lm9mZnNldC5i
YXNlLnkgKz0gZGVsdGFZIC0gc3RlcFkgKiB0aWxlSGVpZ2h0OwogCiAgICAgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX3ZpZXdfcmVmaWxsCi0gICAgICAgIChwcml2LCBwcml2LT52aWV3LngsIHBy
aXYtPnZpZXcueSwgc3RlcF94LCBzdGVwX3kpOworICAgICAgICAocHJpdiwgcHJpdi0+dmlldy54
LCBwcml2LT52aWV3LnksIHN0ZXBYLCBzdGVwWSk7CiB9CiAKIHN0YXRpYyB2b2lkIF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9zbWFydF9jYWxjdWxhdGVfb2Zmc2V0KEV3a19UaWxlZF9CYWNraW5n
X1N0b3JlX0RhdGEqIHByaXYsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5KQogewotICAgIEV2
YXNfQ29vcmQgZHggPSBwcml2LT52aWV3Lm9mZnNldC5jdXIueCAtIHByaXYtPnZpZXcub2Zmc2V0
Lm9sZC54OwotICAgIEV2YXNfQ29vcmQgZHkgPSBwcml2LT52aWV3Lm9mZnNldC5jdXIueSAtIHBy
aXYtPnZpZXcub2Zmc2V0Lm9sZC55OwotICAgIEV2YXNfQ29vcmQgdHcsIHRoOwotICAgIGludCBz
dGVwX3ksIHN0ZXBfeDsKKyAgICBFdmFzX0Nvb3JkIGRlbHRhWCA9IHByaXYtPnZpZXcub2Zmc2V0
LmN1ci54IC0gcHJpdi0+dmlldy5vZmZzZXQub2xkLng7CisgICAgRXZhc19Db29yZCBkZWx0YVkg
PSBwcml2LT52aWV3Lm9mZnNldC5jdXIueSAtIHByaXYtPnZpZXcub2Zmc2V0Lm9sZC55OworICAg
IEV2YXNfQ29vcmQgdGlsZVdpZHRoLCB0aWxlSGVpZ2h0OworICAgIGludCBzdGVwWSwgc3RlcFg7
CiAKLSAgICBJTkYoIm89JXAsIG9mZnNldDogJSs0ZCwgJSs0ZCAoJSs0ZCwgJSs0ZCkiLAotICAg
ICAgICBwcml2LT5zZWxmLCBkeCwgZHksIHByaXYtPnZpZXcub2Zmc2V0LmN1ci54LCBwcml2LT52
aWV3Lm9mZnNldC5jdXIueSk7CisgICAgSU5GKCJld2tUaWxlJXAsIG9mZnNldDogJSs0ZCwgJSs0
ZCAoJSs0ZCwgJSs0ZCkiLAorICAgICAgICBwcml2LT5zZWxmLCBkZWx0YVgsIGRlbHRhWSwgcHJp
di0+dmlldy5vZmZzZXQuY3VyLngsIHByaXYtPnZpZXcub2Zmc2V0LmN1ci55KTsKIAotICAgIGlm
ICghZHggJiYgIWR5KQorICAgIGlmICghZGVsdGFYICYmICFkZWx0YVkpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIHR3ID0gcHJpdi0+dmlldy50aWxlLndpZHRoOwotICAgIHRoID0gcHJpdi0+dmll
dy50aWxlLmhlaWdodDsKKyAgICB0aWxlV2lkdGggPSBwcml2LT52aWV3LnRpbGUud2lkdGg7Cisg
ICAgdGlsZUhlaWdodCA9IHByaXYtPnZpZXcudGlsZS5oZWlnaHQ7CiAKLSAgICBsb25nIG5ld19j
b2wgPSAtcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggLyB0dzsKLSAgICBzdGVwX3ggPSBwcml2LT5t
b2RlbC5iYXNlLmNvbCAtIG5ld19jb2w7Ci0gICAgbG9uZyBuZXdfcm93ID0gLXByaXYtPnZpZXcu
b2Zmc2V0LmN1ci55IC8gdGg7Ci0gICAgc3RlcF95ID0gcHJpdi0+bW9kZWwuYmFzZS5yb3cgLSBu
ZXdfcm93OworICAgIGxvbmcgbmV3Q29sID0gLXByaXYtPnZpZXcub2Zmc2V0LmN1ci54IC8gdGls
ZVdpZHRoOworICAgIHN0ZXBYID0gcHJpdi0+bW9kZWwuYmFzZS5jb2x1bW4gLSBuZXdDb2w7Cisg
ICAgbG9uZyBuZXdSb3cgPSAtcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkgLyB0aWxlSGVpZ2h0Owor
ICAgIHN0ZXBZID0gcHJpdi0+bW9kZWwuYmFzZS5yb3cgLSBuZXdSb3c7CiAKICAgICBwcml2LT52
aWV3Lm9mZnNldC5vbGQueCA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci54OwogICAgIHByaXYtPnZp
ZXcub2Zmc2V0Lm9sZC55ID0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLnk7CiAgICAgZXZhc19vYmpl
Y3RfbW92ZSgKLSAgICAgICAgcHJpdi0+Y29udGVudHNfY2xpcHBlciwKKyAgICAgICAgcHJpdi0+
Y29udGVudHNDbGlwcGVyLAogICAgICAgICBwcml2LT52aWV3Lm9mZnNldC5jdXIueCArIHByaXYt
PnZpZXcueCwKICAgICAgICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkgKyBwcml2LT52aWV3Lnkp
OwogCi0gICAgaWYgKChzdGVwX3ggPCAwICYmIHN0ZXBfeCA8PSAtcHJpdi0+dmlldy5jb2xzKQot
ICAgICAgICB8fCAoc3RlcF94ID4gMCAmJiBzdGVwX3ggPj0gcHJpdi0+dmlldy5jb2xzKQotICAg
ICAgICB8fCAoc3RlcF95IDwgMCAmJiBzdGVwX3kgPD0gLXByaXYtPnZpZXcucm93cykKLSAgICAg
ICAgfHwgKHN0ZXBfeSA+IDAgJiYgc3RlcF95ID49IHByaXYtPnZpZXcucm93cykpIHsKKyAgICBp
ZiAoKHN0ZXBYIDwgMCAmJiBzdGVwWCA8PSAtcHJpdi0+dmlldy5jb2xzKQorICAgICAgICB8fCAo
c3RlcFggPiAwICYmIHN0ZXBYID49IHByaXYtPnZpZXcuY29scykKKyAgICAgICAgfHwgKHN0ZXBZ
IDwgMCAmJiBzdGVwWSA8PSAtcHJpdi0+dmlldy5yb3dzKQorICAgICAgICB8fCAoc3RlcFkgPiAw
ICYmIHN0ZXBZID49IHByaXYtPnZpZXcucm93cykpIHsKIAotICAgICAgICBwcml2LT52aWV3Lm9m
ZnNldC5iYXNlLnggKz0gZHggLSBzdGVwX3ggKiB0dzsKLSAgICAgICAgcHJpdi0+dmlldy5vZmZz
ZXQuYmFzZS55ICs9IGR5IC0gc3RlcF95ICogdGg7CisgICAgICAgIHByaXYtPnZpZXcub2Zmc2V0
LmJhc2UueCArPSBkZWx0YVggLSBzdGVwWCAqIHRpbGVXaWR0aDsKKyAgICAgICAgcHJpdi0+dmll
dy5vZmZzZXQuYmFzZS55ICs9IGRlbHRhWSAtIHN0ZXBZICogdGlsZUhlaWdodDsKIAogICAgICAg
ICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19yZWZpbGwKLSAgICAgICAgICAgIChwcml2
LCBwcml2LT52aWV3LngsIHByaXYtPnZpZXcueSwgc3RlcF94LCBzdGVwX3kpOworICAgICAgICAg
ICAgKHByaXYsIHByaXYtPnZpZXcueCwgcHJpdi0+dmlldy55LCBzdGVwWCwgc3RlcFkpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54ICs9IGR4
OwotICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSArPSBkeTsKKyAgICBwcml2LT52aWV3Lm9m
ZnNldC5iYXNlLnggKz0gZGVsdGFYOworICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSArPSBk
ZWx0YVk7CiAKLSAgICBpZiAoc3RlcF95IDwgMCkKLSAgICAgICAgX2V3a190aWxlZF9iYWNraW5n
X3N0b3JlX3ZpZXdfd3JhcF91cChwcml2LCB4LCB5LCAtc3RlcF95KTsKLSAgICBlbHNlIGlmIChz
dGVwX3kgPiAwKQotICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld193cmFwX2Rv
d24ocHJpdiwgeCwgeSwgc3RlcF95KTsKKyAgICBpZiAoc3RlcFkgPCAwKQorICAgICAgICBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld193cmFwX3VwKHByaXYsIHgsIHksIC1zdGVwWSk7Cisg
ICAgZWxzZSBpZiAoc3RlcFkgPiAwKQorICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
dmlld193cmFwX2Rvd24ocHJpdiwgeCwgeSwgc3RlcFkpOwogCi0gICAgaWYgKHN0ZXBfeCA8IDAp
Ci0gICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3dyYXBfbGVmdChwcml2LCB4
LCB5LCAtc3RlcF94KTsKLSAgICBlbHNlIGlmIChzdGVwX3ggPiAwKQotICAgICAgICBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfdmlld193cmFwX3JpZ2h0KHByaXYsIHgsIHksIHN0ZXBfeCk7Cisg
ICAgaWYgKHN0ZXBYIDwgMCkKKyAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdf
d3JhcF9sZWZ0KHByaXYsIHgsIHksIC1zdGVwWCk7CisgICAgZWxzZSBpZiAoc3RlcFggPiAwKQor
ICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld193cmFwX3JpZ2h0KHByaXYsIHgs
IHksIHN0ZXBYKTsKIAogICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3Bvc19hcHBs
eShwcml2LCB4LCB5KTsKIH0KQEAgLTEyNzAsMzEgKzEyNzAsMzEgQEAgc3RhdGljIHZvaWQgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZV9wb3MoRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmUKICAgICBwcml2LT52aWV3LnggPSB4OwogICAgIHByaXYtPnZpZXcueSA9IHk7CiAg
ICAgZXZhc19vYmplY3RfbW92ZSgKLSAgICAgICAgcHJpdi0+Y29udGVudHNfY2xpcHBlciwKKyAg
ICAgICAgcHJpdi0+Y29udGVudHNDbGlwcGVyLAogICAgICAgICBwcml2LT52aWV3Lm9mZnNldC5j
dXIueCArIHByaXYtPnZpZXcueCwKICAgICAgICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkgKyBw
cml2LT52aWV3LnkpOwogfQogCiBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
ZmlsbF9yZW5kZXJlcnMoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdikKIHsKLSAg
ICBFaW5hX0lubGlzdCogaXQ7CisgICAgRWluYV9Jbmxpc3QqIGxpc3Q7CiAgICAgRXdrX1RpbGVk
X0JhY2tpbmdfU3RvcmVfSXRlbSogaXRlbTsKICAgICBpbnQgaSwgajsKIAogICAgIGZvciAoaSA9
IDA7IGkgPCBwcml2LT52aWV3LnJvd3M7IGkrKykgewotICAgICAgICBpdCA9IHByaXYtPnZpZXcu
aXRlbXNbaV07CisgICAgICAgIGxpc3QgPSBwcml2LT52aWV3Lml0ZW1zW2ldOwogICAgICAgICBq
ID0gMDsKLSAgICAgICAgRUlOQV9JTkxJU1RfRk9SRUFDSChpdCwgaXRlbSkKKyAgICAgICAgRUlO
QV9JTkxJU1RfRk9SRUFDSChsaXN0LCBpdGVtKQogICAgICAgICAgICAgX2V3a190aWxlZF9iYWNr
aW5nX3N0b3JlX2l0ZW1fZmlsbChwcml2LCBpdGVtLCBqKyssIGkpOwogICAgIH0KIH0KIAogc3Rh
dGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZShFdmFzX09i
amVjdCogZXdrVGlsZSkKIHsKLSAgICBFdmFzX0Nvb3JkIHgsIHksIHcsIGg7CisgICAgRXZhc19D
b29yZCB4LCB5LCB3aWR0aCwgaGVpZ2h0OwogCi0gICAgZXZhc19vYmplY3RfZ2VvbWV0cnlfZ2V0
KGV3a1RpbGUsICZ4LCAmeSwgJncsICZoKTsKLSAgICBEQkcoIm89JXAgYXQgJWQsJWQgKyAlZHgl
ZCIsIGV3a1RpbGUsIHgsIHksIHcsIGgpOworICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldChl
d2tUaWxlLCAmeCwgJnksICZ3aWR0aCwgJmhlaWdodCk7CisgICAgREJHKCJld2tUaWxlJXAgYXQg
JWQsJWQgKyAlZHglZCIsIGV3a1RpbGUsIHgsIHksIHdpZHRoLCBoZWlnaHQpOwogCiAgICAgUFJJ
Vl9EQVRBX0dFVF9PUl9SRVRVUk4oZXdrVGlsZSwgcHJpdik7CiAKQEAgLTEzMDMsMjUgKzEzMDMs
MjUgQEAgc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0
ZShFdmFzX09iamVjdCogZXdrVGlsZSkKICAgICBld2tfdGlsZV9tYXRyaXhfZnJlZXplKHByaXYt
Pm1vZGVsLm1hdHJpeCk7CiAKICAgICBpZiAoIXByaXYtPnJlbmRlci5zdXNwZW5kICYmIHByaXYt
PmNoYW5nZWQubW9kZWwpIHsKLSAgICAgICAgdW5zaWduZWQgbG9uZyBjb2xzLCByb3dzOworICAg
ICAgICB1bnNpZ25lZCBsb25nIGNvbHVtbnMsIHJvd3M7CiAKLSAgICAgICAgY29scyA9IHByaXYt
Pm1vZGVsLndpZHRoIC8gcHJpdi0+dmlldy50aWxlLndpZHRoICsgMTsKKyAgICAgICAgY29sdW1u
cyA9IHByaXYtPm1vZGVsLndpZHRoIC8gcHJpdi0+dmlldy50aWxlLndpZHRoICsgMTsKICAgICAg
ICAgcm93cyA9IHByaXYtPm1vZGVsLmhlaWdodCAvIHByaXYtPnZpZXcudGlsZS5oZWlnaHQgKyAx
OwogCi0gICAgICAgIHByaXYtPm1vZGVsLm9sZC5jb2xzID0gcHJpdi0+bW9kZWwuY3VyLmNvbHM7
Ci0gICAgICAgIHByaXYtPm1vZGVsLm9sZC5yb3dzID0gcHJpdi0+bW9kZWwuY3VyLnJvd3M7Ci0g
ICAgICAgIHByaXYtPm1vZGVsLmN1ci5jb2xzID0gY29sczsKLSAgICAgICAgcHJpdi0+bW9kZWwu
Y3VyLnJvd3MgPSByb3dzOwotICAgICAgICBpZiAocHJpdi0+bW9kZWwub2xkLmNvbHMgPiBjb2xz
KQotICAgICAgICAgICAgY29scyA9IHByaXYtPm1vZGVsLm9sZC5jb2xzOworICAgICAgICBwcml2
LT5tb2RlbC5vbGQuY29sdW1ucyA9IHByaXYtPm1vZGVsLmN1cnJlbnQuY29sdW1uczsKKyAgICAg
ICAgcHJpdi0+bW9kZWwub2xkLnJvd3MgPSBwcml2LT5tb2RlbC5jdXJyZW50LnJvd3M7CisgICAg
ICAgIHByaXYtPm1vZGVsLmN1cnJlbnQuY29sdW1ucyA9IGNvbHVtbnM7CisgICAgICAgIHByaXYt
Pm1vZGVsLmN1cnJlbnQucm93cyA9IHJvd3M7CisgICAgICAgIGlmIChwcml2LT5tb2RlbC5vbGQu
Y29sdW1ucyA+IGNvbHVtbnMpCisgICAgICAgICAgICBjb2x1bW5zID0gcHJpdi0+bW9kZWwub2xk
LmNvbHVtbnM7CiAgICAgICAgIGlmIChwcml2LT5tb2RlbC5vbGQucm93cyA+IHJvd3MpCiAgICAg
ICAgICAgICByb3dzID0gcHJpdi0+bW9kZWwub2xkLnJvd3M7Ci0gICAgICAgIGV3a190aWxlX21h
dHJpeF9yZXNpemUocHJpdi0+bW9kZWwubWF0cml4LCBjb2xzLCByb3dzKTsKKyAgICAgICAgZXdr
X3RpbGVfbWF0cml4X3Jlc2l6ZShwcml2LT5tb2RlbC5tYXRyaXgsIGNvbHVtbnMsIHJvd3MpOwog
ICAgIH0KIAotICAgIGlmIChwcml2LT5jaGFuZ2VkLnBvcyAmJiAocHJpdi0+dmlldy54ICE9IHgg
fHwgcHJpdi0+dmlldy55ICE9IHkpKSB7CisgICAgaWYgKHByaXYtPmNoYW5nZWQucG9zaXRpb24g
JiYgKHByaXYtPnZpZXcueCAhPSB4IHx8IHByaXYtPnZpZXcueSAhPSB5KSkgewogICAgICAgICBf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfY2FsY3VsYXRlX3Bvcyhwcml2LCB4LCB5KTsK
LSAgICAgICAgcHJpdi0+Y2hhbmdlZC5wb3MgPSBFSU5BX0ZBTFNFOworICAgICAgICBwcml2LT5j
aGFuZ2VkLnBvc2l0aW9uID0gRUlOQV9GQUxTRTsKICAgICB9CiAgICAgaWYgKHByaXYtPmNoYW5n
ZWQub2Zmc2V0KSB7CiAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9jYWxj
dWxhdGVfb2Zmc2V0KHByaXYsIHgsIHkpOwpAQCAtMTMyOSw3ICsxMzI5LDcgQEAgc3RhdGljIHZv
aWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZShFdmFzX09iamVjdCog
ZXdrVGlsZSkKICAgICB9CiAKICAgICBpZiAocHJpdi0+Y2hhbmdlZC5zaXplKSB7Ci0gICAgICAg
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9jYWxjdWxhdGVfc2l6ZShwcml2LCB3LCBo
KTsKKyAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZV9zaXpl
KHByaXYsIHdpZHRoLCBoZWlnaHQpOwogICAgICAgICBwcml2LT5jaGFuZ2VkLnNpemUgPSBFSU5B
X0ZBTFNFOwogICAgIH0KIApAQCAtMTM0MSwxNyArMTM0MSwxNyBAQCBzdGF0aWMgdm9pZCBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfY2FsY3VsYXRlKEV2YXNfT2JqZWN0KiBld2tUaWxl
KQogICAgICAgICByZWN0LmggPSBwcml2LT5tb2RlbC5oZWlnaHQ7CiAgICAgICAgIF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9maWxsX3JlbmRlcmVycyhwcml2KTsKICAgICAgICAgZXdrX3RpbGVf
bWF0cml4X3Jlc2l6ZShwcml2LT5tb2RlbC5tYXRyaXgsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcHJpdi0+bW9kZWwuY3VyLmNvbHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcHJpdi0+bW9kZWwuY3VyLnJvd3MpOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHByaXYtPm1vZGVsLmN1cnJlbnQuY29sdW1ucywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwcml2LT5tb2RlbC5jdXJyZW50LnJvd3MpOwogICAgICAgICBwcml2LT5jaGFuZ2Vk
Lm1vZGVsID0gRUlOQV9GQUxTRTsKLSAgICAgICAgZXZhc19vYmplY3RfcmVzaXplKHByaXYtPmNv
bnRlbnRzX2NsaXBwZXIsIHByaXYtPm1vZGVsLndpZHRoLCBwcml2LT5tb2RlbC5oZWlnaHQpOwor
ICAgICAgICBldmFzX29iamVjdF9yZXNpemUocHJpdi0+Y29udGVudHNDbGlwcGVyLCBwcml2LT5t
b2RlbC53aWR0aCwgcHJpdi0+bW9kZWwuaGVpZ2h0KTsKICAgICAgICAgX2V3a190aWxlZF9iYWNr
aW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZV9vZmZzZXRfZm9yY2UocHJpdik7CiAKICAgICAgICAg
LyogTWFrZSBzdXJlIHdlIGRvIG5vdCBtaXNzIGFueSBpbXBvcnRhbnQgcmVwYWludCBieQogICAg
ICAgICAgKiByZXBhaW50aW5nIHRoZSB3aG9sZSB2aWV3cG9ydCAqLwotICAgICAgICBjb25zdCBF
aW5hX1JlY3RhbmdsZSByID0KKyAgICAgICAgY29uc3QgRWluYV9SZWN0YW5nbGUgcmVjdDEgPQog
ICAgICAgICB7IDAsIDAsIHByaXYtPm1vZGVsLndpZHRoLCBwcml2LT5tb2RlbC5oZWlnaHQgfTsK
LSAgICAgICAgZXdrX3RpbGVfbWF0cml4X3VwZGF0ZShwcml2LT5tb2RlbC5tYXRyaXgsICZyLAor
ICAgICAgICBld2tfdGlsZV9tYXRyaXhfdXBkYXRlKHByaXYtPm1vZGVsLm1hdHJpeCwgJnJlY3Qx
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaXYtPnZpZXcudGlsZS56b29tKTsK
ICAgICB9CiAKQEAgLTE0MDIsNyArMTQwMiw3IEBAIHZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfcmVuZGVyX2NiX3NldChFdmFzX09iamVjdCogZXdrVGlsZSwgRWluYV9Cb29sICgqY2FsCiB7
CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oY2FsbGJhY2spOwogICAgIFBSSVZfREFU
QV9HRVRfT1JfUkVUVVJOKGV3a1RpbGUsIHByaXYpOwotICAgIHByaXYtPnJlbmRlci5jYiA9IGNh
bGxiYWNrOworICAgIHByaXYtPnJlbmRlci5jYWxsYmFjayA9IGNhbGxiYWNrOwogICAgIHByaXYt
PnJlbmRlci5kYXRhID0gKHZvaWQqKWRhdGE7CiB9CiAKQEAgLTE0MzksNyArMTQzOSw3IEBAIHN0
YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3Njcm9sbF9mdWxsX29mZnNl
dF9zZXRfaW50ZXJuYWwoRXdrX1RpCiAKIEVpbmFfQm9vbCBld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV9zY3JvbGxfZnVsbF9vZmZzZXRfc2V0KEV2YXNfT2JqZWN0KiBld2tUaWxlLCBFdmFzX0Nvb3Jk
IHgsIEV2YXNfQ29vcmQgeSkKIHsKLSAgICBEQkcoIm89JXAsIHg9JWQsIHk9JWQiLCBld2tUaWxl
LCB4LCB5KTsKKyAgICBEQkcoImV3a1RpbGUlcCwgeD0lZCwgeT0lZCIsIGV3a1RpbGUsIHgsIHkp
OwogCiAgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4oZXdrVGlsZSwgcHJpdiwgRUlOQV9GQUxT
RSk7CiAgICAgaWYgKHggPT0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggJiYgeSA9PSBwcml2LT52
aWV3Lm9mZnNldC5jdXIueSkKQEAgLTE0NDgsMTYgKzE0NDgsMTYgQEAgRWluYV9Cb29sIGV3a190
aWxlZF9iYWNraW5nX3N0b3JlX3Njcm9sbF9mdWxsX29mZnNldF9zZXQoRXZhc19PYmplY3QqIGV3
a1RpbGUsIEUKICAgICByZXR1cm4gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3Njcm9sbF9mdWxs
X29mZnNldF9zZXRfaW50ZXJuYWwocHJpdiwgeCwgeSk7CiB9CiAKLUVpbmFfQm9vbCBld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9zY3JvbGxfZnVsbF9vZmZzZXRfYWRkKEV2YXNfT2JqZWN0KiBld2tU
aWxlLCBFdmFzX0Nvb3JkIGR4LCBFdmFzX0Nvb3JkIGR5KQorRWluYV9Cb29sIGV3a190aWxlZF9i
YWNraW5nX3N0b3JlX3Njcm9sbF9mdWxsX29mZnNldF9hZGQoRXZhc19PYmplY3QqIGV3a1RpbGUs
IEV2YXNfQ29vcmQgZGVsdGFYLCBFdmFzX0Nvb3JkIGRlbHRhWSkKIHsKLSAgICBEQkcoIm89JXAs
IGR4PSVkLCBkeT0lZCIsIGV3a1RpbGUsIGR4LCBkeSk7CisgICAgREJHKCJld2tUaWxlJXAsIGRl
bHRhWD0lZCwgZGVsdGFZPSVkIiwgZXdrVGlsZSwgZGVsdGFYLCBkZWx0YVkpOwogCiAgICAgUFJJ
Vl9EQVRBX0dFVF9PUl9SRVRVUk4oZXdrVGlsZSwgcHJpdiwgRUlOQV9GQUxTRSk7Ci0gICAgaWYg
KCFkeCAmJiAhZHkpCisgICAgaWYgKCFkZWx0YVggJiYgIWRlbHRhWSkKICAgICAgICAgcmV0dXJu
IEVJTkFfVFJVRTsKIAogICAgIHJldHVybiBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc2Nyb2xs
X2Z1bGxfb2Zmc2V0X3NldF9pbnRlcm5hbAotICAgICAgICAgICAgICAgKHByaXYsIHByaXYtPnZp
ZXcub2Zmc2V0LmN1ci54ICsgZHgsIHByaXYtPnZpZXcub2Zmc2V0LmN1ci55ICsgZHkpOworICAg
ICAgICAgICAgICAgKHByaXYsIHByaXYtPnZpZXcub2Zmc2V0LmN1ci54ICsgZGVsdGFYLCBwcml2
LT52aWV3Lm9mZnNldC5jdXIueSArIGRlbHRhWSk7CiB9CiAKIHN0YXRpYyBFaW5hX0Jvb2wgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX3pvb21fc2V0X2ludGVybmFsKEV3a19UaWxlZF9CYWNraW5n
X1N0b3JlX0RhdGEqIHByaXYsIGZsb2F0KiB6b29tLCBFdmFzX0Nvb3JkIGN1cnJlbnRYLCBFdmFz
X0Nvb3JkIGN1cnJlbnRZLCBFdmFzX0Nvb3JkKiBvZmZzZXRYLCBFdmFzX0Nvb3JkKiBvZmZzZXRZ
KQpAQCAtMTQ3MiwxOSArMTQ3MiwxOSBAQCBzdGF0aWMgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV96b29tX3NldF9pbnRlcm5hbChFd2tfVGlsZWRfQmFja2luZ19TdAogICAgIH0K
IAogICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfZmx1c2go
cHJpdik7Ci0gICAgRXZhc19Db29yZCB0dywgdGg7CisgICAgRXZhc19Db29yZCB0aWxlV2lkdGgs
IHRpbGVIZWlnaHQ7CiAKICAgICAqem9vbSA9IFJPVU5ERURfWk9PTShwcml2LT52aWV3LnRpbGUu
d2lkdGgsICp6b29tKTsKIAotICAgIHR3ID0gcHJpdi0+dmlldy50aWxlLndpZHRoOwotICAgIHRo
ID0gcHJpdi0+dmlldy50aWxlLmhlaWdodDsKKyAgICB0aWxlV2lkdGggPSBwcml2LT52aWV3LnRp
bGUud2lkdGg7CisgICAgdGlsZUhlaWdodCA9IHByaXYtPnZpZXcudGlsZS5oZWlnaHQ7CiAKICAg
ICBmbG9hdCBzY2FsZSA9ICp6b29tIC8gcHJpdi0+dmlldy50aWxlLnpvb207CiAKICAgICBwcml2
LT52aWV3LnRpbGUuem9vbSA9ICp6b29tOwogICAgIC8vIHRvZG86IGNoZWNrIGN1cnJlbnRYIFsw
LCB3XS4uLgotICAgIHByaXYtPnZpZXcub2Zmc2V0Lnpvb21fY2VudGVyLnggPSBjdXJyZW50WDsK
LSAgICBwcml2LT52aWV3Lm9mZnNldC56b29tX2NlbnRlci55ID0gY3VycmVudFk7CisgICAgcHJp
di0+dmlldy5vZmZzZXQuem9vbUNlbnRlci54ID0gY3VycmVudFg7CisgICAgcHJpdi0+dmlldy5v
ZmZzZXQuem9vbUNlbnRlci55ID0gY3VycmVudFk7CiAKIAogICAgIGlmICghcHJpdi0+dmlldy53
aWR0aCB8fCAhcHJpdi0+dmlldy5oZWlnaHQpIHsKQEAgLTE0OTIsMzggKzE0OTIsMzggQEAgc3Rh
dGljIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfem9vbV9zZXRfaW50ZXJuYWwo
RXdrX1RpbGVkX0JhY2tpbmdfU3QKICAgICAgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ID0g
MDsKICAgICAgICAgcmV0dXJuIEVJTkFfVFJVRTsKICAgICB9Ci0gICAgRWluYV9Jbmxpc3QqKiBp
dHIsICoqaXRyX2VuZDsKKyAgICBFaW5hX0lubGlzdCoqIGl0ZXJhdG9yLCAqKml0ZXJhdG9yRW5k
OwogICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0qIGl0OwogCi0gICAgRXZhc19Db29y
ZCBuZXdfeCA9IGN1cnJlbnRYICsgKHByaXYtPnZpZXcub2Zmc2V0LmN1ci54IC0gY3VycmVudFgp
ICogc2NhbGU7Ci0gICAgRXZhc19Db29yZCBuZXdfeSA9IGN1cnJlbnRZICsgKHByaXYtPnZpZXcu
b2Zmc2V0LmN1ci55IC0gY3VycmVudFkpICogc2NhbGU7CisgICAgRXZhc19Db29yZCBuZXdYID0g
Y3VycmVudFggKyAocHJpdi0+dmlldy5vZmZzZXQuY3VyLnggLSBjdXJyZW50WCkgKiBzY2FsZTsK
KyAgICBFdmFzX0Nvb3JkIG5ld1kgPSBjdXJyZW50WSArIChwcml2LT52aWV3Lm9mZnNldC5jdXIu
eSAtIGN1cnJlbnRZKSAqIHNjYWxlOwogCi0gICAgRXZhc19Db29yZCBtb2RlbF93ID0gcHJpdi0+
bW9kZWwud2lkdGggKiBzY2FsZTsKLSAgICBFdmFzX0Nvb3JkIG1vZGVsX2ggPSBwcml2LT5tb2Rl
bC5oZWlnaHQgKiBzY2FsZTsKKyAgICBFdmFzX0Nvb3JkIG1vZGVsV2lkdGggPSBwcml2LT5tb2Rl
bC53aWR0aCAqIHNjYWxlOworICAgIEV2YXNfQ29vcmQgbW9kZWxIZWlnaHQgPSBwcml2LT5tb2Rl
bC5oZWlnaHQgKiBzY2FsZTsKIAotICAgIGlmIChtb2RlbF93IDwgcHJpdi0+dmlldy53aWR0aCB8
fCBuZXdfeCA+PSAwKQotICAgICAgICBuZXdfeCA9IDA7Ci0gICAgZWxzZSBpZiAoLW5ld194ICsg
cHJpdi0+dmlldy53aWR0aCA+PSBtb2RlbF93KQotICAgICAgICBuZXdfeCA9IC1tb2RlbF93ICsg
cHJpdi0+dmlldy53aWR0aDsKKyAgICBpZiAobW9kZWxXaWR0aCA8IHByaXYtPnZpZXcud2lkdGgg
fHwgbmV3WCA+PSAwKQorICAgICAgICBuZXdYID0gMDsKKyAgICBlbHNlIGlmICgtbmV3WCArIHBy
aXYtPnZpZXcud2lkdGggPj0gbW9kZWxXaWR0aCkKKyAgICAgICAgbmV3WCA9IC1tb2RlbFdpZHRo
ICsgcHJpdi0+dmlldy53aWR0aDsKIAotICAgIGlmIChtb2RlbF9oIDwgcHJpdi0+dmlldy5oZWln
aHQgfHwgbmV3X3kgPj0gMCkKLSAgICAgICAgbmV3X3kgPSAwOwotICAgIGVsc2UgaWYgKC1uZXdf
eSArIHByaXYtPnZpZXcuaGVpZ2h0ID49IG1vZGVsX2gpCi0gICAgICAgIG5ld195ID0gLW1vZGVs
X2ggKyBwcml2LT52aWV3LmhlaWdodDsKKyAgICBpZiAobW9kZWxIZWlnaHQgPCBwcml2LT52aWV3
LmhlaWdodCB8fCBuZXdZID49IDApCisgICAgICAgIG5ld1kgPSAwOworICAgIGVsc2UgaWYgKC1u
ZXdZICsgcHJpdi0+dmlldy5oZWlnaHQgPj0gbW9kZWxIZWlnaHQpCisgICAgICAgIG5ld1kgPSAt
bW9kZWxIZWlnaHQgKyBwcml2LT52aWV3LmhlaWdodDsKIAotICAgIEV2YXNfQ29vcmQgYnggPSBu
ZXdfeCAlIHR3OwotICAgIEV2YXNfQ29vcmQgYnkgPSBuZXdfeSAlIHRoOwotICAgIHByaXYtPm1v
ZGVsLmJhc2UuY29sID0gLW5ld194IC8gdHc7Ci0gICAgcHJpdi0+bW9kZWwuYmFzZS5yb3cgPSAt
bmV3X3kgLyB0aDsKKyAgICBFdmFzX0Nvb3JkIGJhc2VYID0gbmV3WCAlIHRpbGVXaWR0aDsKKyAg
ICBFdmFzX0Nvb3JkIGJhc2VZID0gbmV3WSAlIHRpbGVIZWlnaHQ7CisgICAgcHJpdi0+bW9kZWwu
YmFzZS5jb2x1bW4gPSAtbmV3WCAvIHRpbGVXaWR0aDsKKyAgICBwcml2LT5tb2RlbC5iYXNlLnJv
dyA9IC1uZXdZIC8gdGlsZUhlaWdodDsKIAogICAgIHByaXYtPmNoYW5nZWQuc2l6ZSA9IEVJTkFf
VFJVRTsKICAgICBwcml2LT5jaGFuZ2VkLm1vZGVsID0gRUlOQV9UUlVFOwogICAgIF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9jaGFuZ2VkKHByaXYpOwogCi0gICAgcHJpdi0+dmlldy5vZmZzZXQu
Y3VyLnggPSBuZXdfeDsKLSAgICBwcml2LT52aWV3Lm9mZnNldC5jdXIueSA9IG5ld195OwotICAg
IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCA9IGJ4OwotICAgIHByaXYtPnZpZXcub2Zmc2V0LmJh
c2UueSA9IGJ5OworICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1ci54ID0gbmV3WDsKKyAgICBwcml2
LT52aWV3Lm9mZnNldC5jdXIueSA9IG5ld1k7CisgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54
ID0gYmFzZVg7CisgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ID0gYmFzZVk7CiAKICAgICBw
cml2LT52aWV3Lm9mZnNldC5vbGQueCA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci54OwogICAgIHBy
aXYtPnZpZXcub2Zmc2V0Lm9sZC55ID0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLnk7CkBAIC0xNTMx
LDI4ICsxNTMxLDI4IEBAIHN0YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3pvb21fc2V0X2ludGVybmFsKEV3a19UaWxlZF9CYWNraW5nX1N0CiAgICAgKm9mZnNldFkgPSBw
cml2LT52aWV3Lm9mZnNldC5jdXIueTsKIAogICAgIGV2YXNfb2JqZWN0X21vdmUoCi0gICAgICAg
IHByaXYtPmNvbnRlbnRzX2NsaXBwZXIsCi0gICAgICAgIG5ld194ICsgcHJpdi0+dmlldy54LAot
ICAgICAgICBuZXdfeSArIHByaXYtPnZpZXcueSk7CisgICAgICAgIHByaXYtPmNvbnRlbnRzQ2xp
cHBlciwKKyAgICAgICAgbmV3WCArIHByaXYtPnZpZXcueCwKKyAgICAgICAgbmV3WSArIHByaXYt
PnZpZXcueSk7CiAKICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZmlsbF9yZW5kZXJlcnMo
cHJpdik7CiAKLSAgICBFdmFzX0Nvb3JkIG95ID0gcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ICsg
cHJpdi0+dmlldy55OwotICAgIEV2YXNfQ29vcmQgYmFzZV9veCA9IHByaXYtPnZpZXcueCArIHBy
aXYtPnZpZXcub2Zmc2V0LmJhc2UueDsKKyAgICBFdmFzX0Nvb3JkIHRpbGVQb3NpdGlvblkgPSBw
cml2LT52aWV3Lm9mZnNldC5iYXNlLnkgKyBwcml2LT52aWV3Lnk7CisgICAgRXZhc19Db29yZCBi
YXNlVGlsZVBvc2l0aW9uWCA9IHByaXYtPnZpZXcueCArIHByaXYtPnZpZXcub2Zmc2V0LmJhc2Uu
eDsKIAotICAgIGl0ciA9IHByaXYtPnZpZXcuaXRlbXM7Ci0gICAgaXRyX2VuZCA9IGl0ciArIHBy
aXYtPnZpZXcucm93czsKKyAgICBpdGVyYXRvciA9IHByaXYtPnZpZXcuaXRlbXM7CisgICAgaXRl
cmF0b3JFbmQgPSBpdGVyYXRvciArIHByaXYtPnZpZXcucm93czsKIAotICAgIGZvciAoOyBpdHIg
PCBpdHJfZW5kOyBpdHIrKykgewotICAgICAgICBFdmFzX0Nvb3JkIG94ID0gYmFzZV9veDsKLSAg
ICAgICAgRWluYV9Jbmxpc3QqIGxzdCA9ICppdHI7CisgICAgZm9yICg7IGl0ZXJhdG9yIDwgaXRl
cmF0b3JFbmQ7IGl0ZXJhdG9yKyspIHsKKyAgICAgICAgRXZhc19Db29yZCB0aWxlUG9zaXRpb25Y
ID0gYmFzZVRpbGVQb3NpdGlvblg7CisgICAgICAgIEVpbmFfSW5saXN0KiBsc3QgPSAqaXRlcmF0
b3I7CiAKICAgICAgICAgRUlOQV9JTkxJU1RfRk9SRUFDSChsc3QsIGl0KSB7Ci0gICAgICAgICAg
ICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9tb3ZlKGl0LCBveCwgb3kpOwotICAgICAg
ICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcmVzaXplKGl0LCB0dywgdGgpOwot
ICAgICAgICAgICAgb3ggKz0gdHc7CisgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfaXRlbV9tb3ZlKGl0LCB0aWxlUG9zaXRpb25YLCB0aWxlUG9zaXRpb25ZKTsKKyAgICAgICAg
ICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Jlc2l6ZShpdCwgdGlsZVdpZHRoLCB0
aWxlSGVpZ2h0KTsKKyAgICAgICAgICAgIHRpbGVQb3NpdGlvblggKz0gdGlsZVdpZHRoOwogICAg
ICAgICB9Ci0gICAgICAgIG95ICs9IHRoOworICAgICAgICB0aWxlUG9zaXRpb25ZICs9IHRpbGVI
ZWlnaHQ7CiAgICAgfQogCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKQEAgLTE1NjAsNyArMTU2MCw3
IEBAIHN0YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3pvb21fc2V0X2lu
dGVybmFsKEV3a19UaWxlZF9CYWNraW5nX1N0CiAKIEVpbmFfQm9vbCBld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV96b29tX3NldChFdmFzX09iamVjdCogZXdrVGlsZSwgZmxvYXQqIHpvb20sIEV2YXNf
Q29vcmQgY3VycmVudFgsIEV2YXNfQ29vcmQgY3VycmVudFksIEV2YXNfQ29vcmQqIG9mZnNldFgs
IEV2YXNfQ29vcmQqIG9mZnNldFkpCiB7Ci0gICAgREJHKCJvPSVwLCB6b29tPSVmIiwgZXdrVGls
ZSwgKnpvb20pOworICAgIERCRygiZXdrVGlsZSVwLCB6b29tPSVmIiwgZXdrVGlsZSwgKnpvb20p
OwogCiAgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4oZXdrVGlsZSwgcHJpdiwgRUlOQV9GQUxT
RSk7CiAKQEAgLTE1NjksNzMgKzE1NjksNzMgQEAgRWluYV9Cb29sIGV3a190aWxlZF9iYWNraW5n
X3N0b3JlX3pvb21fc2V0KEV2YXNfT2JqZWN0KiBld2tUaWxlLCBmbG9hdCogem9vbSwgRXYKIAog
RWluYV9Cb29sIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3pvb21fd2Vha19zZXQoRXZhc19PYmpl
Y3QqIGV3a1RpbGUsIGZsb2F0IHpvb20sIEV2YXNfQ29vcmQgY3VycmVudFgsIEV2YXNfQ29vcmQg
Y3VycmVudFkpCiB7Ci0gICAgREJHKCJvPSVwLCB6b29tPSVmIiwgZXdrVGlsZSwgem9vbSk7Cisg
ICAgREJHKCJld2tUaWxlJXAsIHpvb209JWYiLCBld2tUaWxlLCB6b29tKTsKICAgICBQUklWX0RB
VEFfR0VUX09SX1JFVFVSTihld2tUaWxlLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBpZiAoIXBy
aXYtPnZpZXcud2lkdGggfHwgIXByaXYtPnZpZXcuaGVpZ2h0KQogICAgICAgICByZXR1cm4gRUlO
QV9GQUxTRTsKLSAgICBFaW5hX0lubGlzdCoqIGl0ciwgKiogaXRyX2VuZDsKLSAgICBFd2tfVGls
ZWRfQmFja2luZ19TdG9yZV9JdGVtKiBpdDsKLSAgICBFdmFzX0Nvb3JkIHR3LCB0aDsKLSAgICBF
aW5hX0Jvb2wgcmVjYWxjID0gRUlOQV9GQUxTRTsKKyAgICBFaW5hX0lubGlzdCoqIGl0ZXJhdG9y
LCAqKiBpdGVyYXRvckVuZDsKKyAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKiBpdGVt
OworICAgIEV2YXNfQ29vcmQgdGlsZVdpZHRoLCB0aWxlSGVpZ2h0OworICAgIEVpbmFfQm9vbCBy
ZUNhbGN1bGF0ZSA9IEVJTkFfRkFMU0U7CiAKICAgICBmbG9hdCBzY2FsZSA9IHpvb20gLyBwcml2
LT52aWV3LnRpbGUuem9vbTsKIAotICAgIHR3ID0gVElMRV9TSVpFX0FUX1pPT00ocHJpdi0+dmll
dy50aWxlLndpZHRoLCBzY2FsZSk7Ci0gICAgc2NhbGUgPSBUSUxFX1pPT01fQVRfU0laRSh0dywg
cHJpdi0+dmlldy50aWxlLndpZHRoKTsKLSAgICB0aCA9IFRJTEVfU0laRV9BVF9aT09NKHByaXYt
PnZpZXcudGlsZS5oZWlnaHQsIHNjYWxlKTsKKyAgICB0aWxlV2lkdGggPSBUSUxFX1NJWkVfQVRf
Wk9PTShwcml2LT52aWV3LnRpbGUud2lkdGgsIHNjYWxlKTsKKyAgICBzY2FsZSA9IFRJTEVfWk9P
TV9BVF9TSVpFKHRpbGVXaWR0aCwgcHJpdi0+dmlldy50aWxlLndpZHRoKTsKKyAgICB0aWxlSGVp
Z2h0ID0gVElMRV9TSVpFX0FUX1pPT00ocHJpdi0+dmlldy50aWxlLmhlaWdodCwgc2NhbGUpOwog
ICAgIHpvb20gPSBzY2FsZSAqIHByaXYtPnZpZXcudGlsZS56b29tOwogCi0gICAgRXZhc19Db29y
ZCBtb2RlbF93ID0gcHJpdi0+bW9kZWwud2lkdGggKiBzY2FsZTsKLSAgICBFdmFzX0Nvb3JkIG1v
ZGVsX2ggPSBwcml2LT5tb2RlbC5oZWlnaHQgKiBzY2FsZTsKKyAgICBFdmFzX0Nvb3JkIG1vZGVs
V2lkdGggPSBwcml2LT5tb2RlbC53aWR0aCAqIHNjYWxlOworICAgIEV2YXNfQ29vcmQgbW9kZWxI
ZWlnaHQgPSBwcml2LT5tb2RlbC5oZWlnaHQgKiBzY2FsZTsKIAotICAgIGV2YXNfb2JqZWN0X3Jl
c2l6ZShwcml2LT5jb250ZW50c19jbGlwcGVyLCBtb2RlbF93LCBtb2RlbF9oKTsKKyAgICBldmFz
X29iamVjdF9yZXNpemUocHJpdi0+Y29udGVudHNDbGlwcGVyLCBtb2RlbFdpZHRoLCBtb2RlbEhl
aWdodCk7CiAKLSAgICBpbnQgdnJvd3MgPSBzdGF0aWNfY2FzdDxpbnQ+KGNlaWwoc3RhdGljX2Nh
c3Q8ZmxvYXQ+KHByaXYtPnZpZXcuaGVpZ2h0IC8gdGgpKSArIDEpOwotICAgIGludCB2Y29scyA9
IHN0YXRpY19jYXN0PGludD4oY2VpbChzdGF0aWNfY2FzdDxmbG9hdD4ocHJpdi0+dmlldy53aWR0
aCAvIHR3KSkgKyAxKTsKLSAgICBFdmFzX0Nvb3JkIG5ld194ID0gY3VycmVudFggKyAocHJpdi0+
dmlldy5vZmZzZXQuY3VyLnggLSBjdXJyZW50WCkgKiBzY2FsZTsKLSAgICBFdmFzX0Nvb3JkIG5l
d195ID0gY3VycmVudFkgKyAocHJpdi0+dmlldy5vZmZzZXQuY3VyLnkgLSBjdXJyZW50WSkgKiBz
Y2FsZTsKLSAgICBFdmFzX0Nvb3JkIGJ4ID0gbmV3X3ggJSB0dzsKLSAgICBFdmFzX0Nvb3JkIGJ5
ID0gbmV3X3kgJSB0aDsKLSAgICB1bnNpZ25lZCBsb25nIGJhc2Vfcm93ID0gLW5ld195IC8gdGg7
Ci0gICAgdW5zaWduZWQgbG9uZyBiYXNlX2NvbCA9IC1uZXdfeCAvIHR3OworICAgIGludCB2cm93
cyA9IHN0YXRpY19jYXN0PGludD4oY2VpbChzdGF0aWNfY2FzdDxmbG9hdD4ocHJpdi0+dmlldy5o
ZWlnaHQgLyB0aWxlSGVpZ2h0KSkgKyAxKTsKKyAgICBpbnQgdmNvbHMgPSBzdGF0aWNfY2FzdDxp
bnQ+KGNlaWwoc3RhdGljX2Nhc3Q8ZmxvYXQ+KHByaXYtPnZpZXcud2lkdGggLyB0aWxlV2lkdGgp
KSArIDEpOworICAgIEV2YXNfQ29vcmQgbmV3WCA9IGN1cnJlbnRYICsgKHByaXYtPnZpZXcub2Zm
c2V0LmN1ci54IC0gY3VycmVudFgpICogc2NhbGU7CisgICAgRXZhc19Db29yZCBuZXdZID0gY3Vy
cmVudFkgKyAocHJpdi0+dmlldy5vZmZzZXQuY3VyLnkgLSBjdXJyZW50WSkgKiBzY2FsZTsKKyAg
ICBFdmFzX0Nvb3JkIGJhc2VYID0gbmV3WCAlIHRpbGVXaWR0aDsKKyAgICBFdmFzX0Nvb3JkIGJh
c2VZID0gbmV3WSAlIHRpbGVIZWlnaHQ7CisgICAgdW5zaWduZWQgbG9uZyBiYXNlUm93ID0gLW5l
d1kgLyB0aWxlSGVpZ2h0OworICAgIHVuc2lnbmVkIGxvbmcgYmFzZUNvbHVtbiA9IC1uZXdYIC8g
dGlsZVdpZHRoOwogCi0gICAgaWYgKGJhc2Vfcm93ICE9IHByaXYtPm1vZGVsLmJhc2Uucm93IHx8
IGJhc2VfY29sICE9IHByaXYtPm1vZGVsLmJhc2UuY29sKSB7Ci0gICAgICAgIHByaXYtPm1vZGVs
LmJhc2Uucm93ID0gYmFzZV9yb3c7Ci0gICAgICAgIHByaXYtPm1vZGVsLmJhc2UuY29sID0gYmFz
ZV9jb2w7Ci0gICAgICAgIHJlY2FsYyA9IEVJTkFfVFJVRTsKKyAgICBpZiAoYmFzZVJvdyAhPSBw
cml2LT5tb2RlbC5iYXNlLnJvdyB8fCBiYXNlQ29sdW1uICE9IHByaXYtPm1vZGVsLmJhc2UuY29s
dW1uKSB7CisgICAgICAgIHByaXYtPm1vZGVsLmJhc2Uucm93ID0gYmFzZVJvdzsKKyAgICAgICAg
cHJpdi0+bW9kZWwuYmFzZS5jb2x1bW4gPSBiYXNlQ29sdW1uOworICAgICAgICByZUNhbGN1bGF0
ZSA9IEVJTkFfVFJVRTsKICAgICB9CiAKICAgICBpZiAodnJvd3MgPiBwcml2LT52aWV3LnJvd3Mg
fHwgdmNvbHMgPiBwcml2LT52aWV3LmNvbHMpCi0gICAgICAgIHJlY2FsYyA9IEVJTkFfVFJVRTsK
KyAgICAgICAgcmVDYWxjdWxhdGUgPSBFSU5BX1RSVUU7CiAKLSAgICBpZiAocmVjYWxjKSB7Cisg
ICAgaWYgKHJlQ2FsY3VsYXRlKSB7CiAgICAgICAgIEV2YXNfQ29vcmQgd2lkdGgsIGhlaWdodDsK
ICAgICAgICAgZXZhc19vYmplY3RfZ2VvbWV0cnlfZ2V0KGV3a1RpbGUsIDAsIDAsICZ3aWR0aCwg
JmhlaWdodCk7Ci0gICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9yZWNhbGNfcmVuZGVy
ZXJzKHByaXYsIHdpZHRoLCBoZWlnaHQsIHR3LCB0aCk7CisgICAgICAgIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9yZWNhbGNfcmVuZGVyZXJzKHByaXYsIHdpZHRoLCBoZWlnaHQsIHRpbGVXaWR0
aCwgdGlsZUhlaWdodCk7CiAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9maWxsX3Jl
bmRlcmVycyhwcml2KTsKICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3VwZGF0ZXNf
cHJvY2Vzcyhwcml2KTsKICAgICB9CiAKLSAgICBFdmFzX0Nvb3JkIGJhc2Vfb3ggPSBieCArIHBy
aXYtPnZpZXcueDsKLSAgICBFdmFzX0Nvb3JkIG95ID0gYnkgKyBwcml2LT52aWV3Lnk7CisgICAg
RXZhc19Db29yZCBiYXNlVGlsZVBvc2l0aW9uWCA9IGJhc2VYICsgcHJpdi0+dmlldy54OworICAg
IEV2YXNfQ29vcmQgdGlsZVBvc2l0aW9uWSA9IGJhc2VZICsgcHJpdi0+dmlldy55OwogCi0gICAg
ZXZhc19vYmplY3RfbW92ZShwcml2LT5jb250ZW50c19jbGlwcGVyLAotICAgICAgICAgICAgICAg
ICAgICAgbmV3X3ggKyBwcml2LT52aWV3LngsCi0gICAgICAgICAgICAgICAgICAgICBuZXdfeSAr
IHByaXYtPnZpZXcueSk7CisgICAgZXZhc19vYmplY3RfbW92ZShwcml2LT5jb250ZW50c0NsaXBw
ZXIsCisgICAgICAgICAgICAgICAgICAgICBuZXdYICsgcHJpdi0+dmlldy54LAorICAgICAgICAg
ICAgICAgICAgICAgbmV3WSArIHByaXYtPnZpZXcueSk7CiAKLSAgICBpdHIgPSBwcml2LT52aWV3
Lml0ZW1zOwotICAgIGl0cl9lbmQgPSBpdHIgKyBwcml2LT52aWV3LnJvd3M7CisgICAgaXRlcmF0
b3IgPSBwcml2LT52aWV3Lml0ZW1zOworICAgIGl0ZXJhdG9yRW5kID0gaXRlcmF0b3IgKyBwcml2
LT52aWV3LnJvd3M7CiAKLSAgICBmb3IgKDsgaXRyIDwgaXRyX2VuZDsgaXRyKyspIHsKLSAgICAg
ICAgRXZhc19Db29yZCBveCA9IGJhc2Vfb3g7Ci0gICAgICAgIEVpbmFfSW5saXN0KiBsc3QgPSAq
aXRyOworICAgIGZvciAoOyBpdGVyYXRvciA8IGl0ZXJhdG9yRW5kOyBpdGVyYXRvcisrKSB7Cisg
ICAgICAgIEV2YXNfQ29vcmQgdGlsZVBvc2l0aW9uWCA9IGJhc2VUaWxlUG9zaXRpb25YOworICAg
ICAgICBFaW5hX0lubGlzdCogbGlzdCA9ICppdGVyYXRvcjsKIAotICAgICAgICBFSU5BX0lOTElT
VF9GT1JFQUNIKGxzdCwgaXQpIHsKLSAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV9pdGVtX21vdmUoaXQsIG94LCBveSk7Ci0gICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfaXRlbV9yZXNpemUoaXQsIHR3LCB0aCk7Ci0gICAgICAgICAgICBveCArPSB0dzsKKyAg
ICAgICAgRUlOQV9JTkxJU1RfRk9SRUFDSChsaXN0LCBpdGVtKSB7CisgICAgICAgICAgICBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9tb3ZlKGl0ZW0sIHRpbGVQb3NpdGlvblgsIHRpbGVQ
b3NpdGlvblkpOworICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcmVz
aXplKGl0ZW0sIHRpbGVXaWR0aCwgdGlsZUhlaWdodCk7CisgICAgICAgICAgICB0aWxlUG9zaXRp
b25YICs9IHRpbGVXaWR0aDsKICAgICAgICAgfQotICAgICAgICBveSArPSB0aDsKKyAgICAgICAg
dGlsZVBvc2l0aW9uWSArPSB0aWxlSGVpZ2h0OwogICAgIH0KIAogICAgIHJldHVybiBFSU5BX1RS
VUU7CkBAIC0xNjQ0LDgxICsxNjQ0LDgxIEBAIEVpbmFfQm9vbCBld2tfdGlsZWRfYmFja2luZ19z
dG9yZV96b29tX3dlYWtfc2V0KEV2YXNfT2JqZWN0KiBld2tUaWxlLCBmbG9hdCB6b29tCiB2b2lk
IGV3a190aWxlZF9iYWNraW5nX3N0b3JlX2ZpeF9vZmZzZXRzKEV2YXNfT2JqZWN0KiBld2tUaWxl
LCBFdmFzX0Nvb3JkIHdpZHRoLCBFdmFzX0Nvb3JkIGhlaWdodCkKIHsKICAgICBQUklWX0RBVEFf
R0VUX09SX1JFVFVSTihld2tUaWxlLCBwcml2KTsKLSAgICBFaW5hX0lubGlzdCoqIGl0ciwgKipp
dHJfZW5kOwotICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0qIGl0OwotICAgIEV2YXNf
Q29vcmQgbmV3X3ggPSBwcml2LT52aWV3Lm9mZnNldC5jdXIueDsKLSAgICBFdmFzX0Nvb3JkIG5l
d195ID0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLnk7Ci0gICAgRXZhc19Db29yZCBieCA9IHByaXYt
PnZpZXcub2Zmc2V0LmJhc2UueDsKLSAgICBFdmFzX0Nvb3JkIGJ5ID0gcHJpdi0+dmlldy5vZmZz
ZXQuYmFzZS55OwotICAgIEV2YXNfQ29vcmQgdHcgPSBwcml2LT52aWV3LnRpbGUud2lkdGg7Ci0g
ICAgRXZhc19Db29yZCB0aCA9IHByaXYtPnZpZXcudGlsZS5oZWlnaHQ7Ci0KLSAgICBpZiAoLW5l
d194ID4gd2lkdGgpIHsKLSAgICAgICAgbmV3X3ggPSAtd2lkdGg7Ci0gICAgICAgIGJ4ID0gbmV3
X3ggJSB0dzsKLSAgICAgICAgcHJpdi0+bW9kZWwuYmFzZS5jb2wgPSAtbmV3X3ggLyB0dzsKKyAg
ICBFaW5hX0lubGlzdCoqIGl0ZXJhdG9yLCAqKml0ZXJhdG9yRW5kOworICAgIEV3a19UaWxlZF9C
YWNraW5nX1N0b3JlX0l0ZW0qIGl0ZW07CisgICAgRXZhc19Db29yZCBuZXdYID0gcHJpdi0+dmll
dy5vZmZzZXQuY3VyLng7CisgICAgRXZhc19Db29yZCBuZXdZID0gcHJpdi0+dmlldy5vZmZzZXQu
Y3VyLnk7CisgICAgRXZhc19Db29yZCBiYXNlWCA9IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueDsK
KyAgICBFdmFzX0Nvb3JkIGJhc2VZID0gcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55OworICAgIEV2
YXNfQ29vcmQgdGlsZVdpZHRoID0gcHJpdi0+dmlldy50aWxlLndpZHRoOworICAgIEV2YXNfQ29v
cmQgdGlsZUhlaWdodCA9IHByaXYtPnZpZXcudGlsZS5oZWlnaHQ7CisKKyAgICBpZiAoLW5ld1gg
PiB3aWR0aCkgeworICAgICAgICBuZXdYID0gLXdpZHRoOworICAgICAgICBiYXNlWCA9IG5ld1gg
JSB0aWxlV2lkdGg7CisgICAgICAgIHByaXYtPm1vZGVsLmJhc2UuY29sdW1uID0gLW5ld1ggLyB0
aWxlV2lkdGg7CiAgICAgfQogCi0gICAgaWYgKC1uZXdfeSA+IGhlaWdodCkgewotICAgICAgICBu
ZXdfeSA9IC1oZWlnaHQ7Ci0gICAgICAgIGJ5ID0gbmV3X3kgJSB0aDsKLSAgICAgICAgcHJpdi0+
bW9kZWwuYmFzZS5yb3cgPSAtbmV3X3kgLyB0aDsKKyAgICBpZiAoLW5ld1kgPiBoZWlnaHQpIHsK
KyAgICAgICAgbmV3WSA9IC1oZWlnaHQ7CisgICAgICAgIGJhc2VZID0gbmV3WSAlIHRpbGVIZWln
aHQ7CisgICAgICAgIHByaXYtPm1vZGVsLmJhc2Uucm93ID0gLW5ld1kgLyB0aWxlSGVpZ2h0Owog
ICAgIH0KIAotICAgIGlmIChieCA+PSAwIHx8IGJ4IDw9IC0yICogcHJpdi0+dmlldy50aWxlLndp
ZHRoKSB7Ci0gICAgICAgIGJ4ID0gbmV3X3ggJSB0dzsKLSAgICAgICAgcHJpdi0+bW9kZWwuYmFz
ZS5jb2wgPSAtbmV3X3ggLyB0dzsKKyAgICBpZiAoYmFzZVggPj0gMCB8fCBiYXNlWCA8PSAtMiAq
IHByaXYtPnZpZXcudGlsZS53aWR0aCkgeworICAgICAgICBiYXNlWCA9IG5ld1ggJSB0aWxlV2lk
dGg7CisgICAgICAgIHByaXYtPm1vZGVsLmJhc2UuY29sdW1uID0gLW5ld1ggLyB0aWxlV2lkdGg7
CiAgICAgfQogCi0gICAgaWYgKGJ5ID49IDAgfHwgYnkgPD0gLTIgKiBwcml2LT52aWV3LnRpbGUu
aGVpZ2h0KSB7Ci0gICAgICAgIGJ5ID0gbmV3X3kgJSB0aDsKLSAgICAgICAgcHJpdi0+bW9kZWwu
YmFzZS5yb3cgPSAtbmV3X3kgLyB0aDsKKyAgICBpZiAoYmFzZVkgPj0gMCB8fCBiYXNlWSA8PSAt
MiAqIHByaXYtPnZpZXcudGlsZS5oZWlnaHQpIHsKKyAgICAgICAgYmFzZVkgPSBuZXdZICUgdGls
ZUhlaWdodDsKKyAgICAgICAgcHJpdi0+bW9kZWwuYmFzZS5yb3cgPSAtbmV3WSAvIHRpbGVIZWln
aHQ7CiAgICAgfQogCi0gICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggPSBuZXdfeDsKLSAgICBw
cml2LT52aWV3Lm9mZnNldC5jdXIueSA9IG5ld195OwotICAgIHByaXYtPnZpZXcub2Zmc2V0Lm9s
ZC54ID0gbmV3X3g7Ci0gICAgcHJpdi0+dmlldy5vZmZzZXQub2xkLnkgPSBuZXdfeTsKLSAgICBw
cml2LT52aWV3Lm9mZnNldC5iYXNlLnggPSBieDsKLSAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNl
LnkgPSBieTsKLSAgICBldmFzX29iamVjdF9tb3ZlKHByaXYtPmNvbnRlbnRzX2NsaXBwZXIsCi0g
ICAgICAgICAgICAgICAgICAgICBuZXdfeCArIHByaXYtPnZpZXcueCwKLSAgICAgICAgICAgICAg
ICAgICAgIG5ld195ICsgcHJpdi0+dmlldy55KTsKLQotICAgIEV2YXNfQ29vcmQgb3kgPSBwcml2
LT52aWV3Lm9mZnNldC5iYXNlLnkgKyBwcml2LT52aWV3Lnk7Ci0gICAgRXZhc19Db29yZCBiYXNl
X294ID0gcHJpdi0+dmlldy54ICsgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54OwotCi0gICAgaXRy
ID0gcHJpdi0+dmlldy5pdGVtczsKLSAgICBpdHJfZW5kID0gaXRyICsgcHJpdi0+dmlldy5yb3dz
OwotCi0gICAgZm9yICg7IGl0ciA8IGl0cl9lbmQ7IGl0cisrKSB7Ci0gICAgICAgIEV2YXNfQ29v
cmQgb3ggPSBiYXNlX294OwotICAgICAgICBFaW5hX0lubGlzdCogbHN0ID0gKml0cjsKLQotICAg
ICAgICBFSU5BX0lOTElTVF9GT1JFQUNIKGxzdCwgaXQpIHsKLSAgICAgICAgICAgIF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9pdGVtX21vdmUoaXQsIG94LCBveSk7Ci0gICAgICAgICAgICBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9yZXNpemUoaXQsIHR3LCB0aCk7Ci0gICAgICAgICAg
ICBveCArPSB0dzsKKyAgICBwcml2LT52aWV3Lm9mZnNldC5jdXIueCA9IG5ld1g7CisgICAgcHJp
di0+dmlldy5vZmZzZXQuY3VyLnkgPSBuZXdZOworICAgIHByaXYtPnZpZXcub2Zmc2V0Lm9sZC54
ID0gbmV3WDsKKyAgICBwcml2LT52aWV3Lm9mZnNldC5vbGQueSA9IG5ld1k7CisgICAgcHJpdi0+
dmlldy5vZmZzZXQuYmFzZS54ID0gYmFzZVg7CisgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55
ID0gYmFzZVk7CisgICAgZXZhc19vYmplY3RfbW92ZShwcml2LT5jb250ZW50c0NsaXBwZXIsCisg
ICAgICAgICAgICAgICAgICAgICBuZXdYICsgcHJpdi0+dmlldy54LAorICAgICAgICAgICAgICAg
ICAgICAgbmV3WSArIHByaXYtPnZpZXcueSk7CisKKyAgICBFdmFzX0Nvb3JkIHRpbGVQb3NpdGlv
blkgPSBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgKyBwcml2LT52aWV3Lnk7CisgICAgRXZhc19D
b29yZCBiYXNlVGlsZVBvc2l0aW9uWCA9IHByaXYtPnZpZXcueCArIHByaXYtPnZpZXcub2Zmc2V0
LmJhc2UueDsKKworICAgIGl0ZXJhdG9yID0gcHJpdi0+dmlldy5pdGVtczsKKyAgICBpdGVyYXRv
ckVuZCA9IGl0ZXJhdG9yICsgcHJpdi0+dmlldy5yb3dzOworCisgICAgZm9yICg7IGl0ZXJhdG9y
IDwgaXRlcmF0b3JFbmQ7IGl0ZXJhdG9yKyspIHsKKyAgICAgICAgRXZhc19Db29yZCB0aWxlUG9z
aXRpb25YID0gYmFzZVRpbGVQb3NpdGlvblg7CisgICAgICAgIEVpbmFfSW5saXN0KiBsc3QgPSAq
aXRlcmF0b3I7CisKKyAgICAgICAgRUlOQV9JTkxJU1RfRk9SRUFDSChsc3QsIGl0ZW0pIHsKKyAg
ICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX21vdmUoaXRlbSwgdGlsZVBv
c2l0aW9uWCwgdGlsZVBvc2l0aW9uWSk7CisgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfaXRlbV9yZXNpemUoaXRlbSwgdGlsZVdpZHRoLCB0aWxlSGVpZ2h0KTsKKyAgICAgICAg
ICAgIHRpbGVQb3NpdGlvblggKz0gdGlsZVdpZHRoOwogICAgICAgICB9Ci0gICAgICAgIG95ICs9
IHRoOworICAgICAgICB0aWxlUG9zaXRpb25ZICs9IHRpbGVIZWlnaHQ7CiAgICAgfQogfQogCiB2
b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3pvb21fd2Vha19zbW9vdGhfc2NhbGVfc2V0KEV2
YXNfT2JqZWN0KiBld2tUaWxlLCBFaW5hX0Jvb2wgc21vb3RoU2NhbGUpCiB7CiAgICAgUFJJVl9E
QVRBX0dFVF9PUl9SRVRVUk4oZXdrVGlsZSwgcHJpdik7Ci0gICAgRWluYV9Jbmxpc3QqKiBpdHIs
ICoqaXRyX2VuZDsKKyAgICBFaW5hX0lubGlzdCoqIGl0ZXJhdG9yLCAqKml0ZXJhdG9yRW5kOwog
Ci0gICAgaXRyID0gcHJpdi0+dmlldy5pdGVtczsKLSAgICBpdHJfZW5kID0gaXRyICsgcHJpdi0+
dmlldy5yb3dzOwotICAgIHByaXYtPnZpZXcudGlsZS56b29tX3dlYWtfc21vb3RoX3NjYWxlID0g
c21vb3RoU2NhbGU7CisgICAgaXRlcmF0b3IgPSBwcml2LT52aWV3Lml0ZW1zOworICAgIGl0ZXJh
dG9yRW5kID0gaXRlcmF0b3IgKyBwcml2LT52aWV3LnJvd3M7CisgICAgcHJpdi0+dmlldy50aWxl
Lnpvb21XZWFrU21vb3RoU2NhbGUgPSBzbW9vdGhTY2FsZTsKIAotICAgIGZvciAoOyBpdHI8IGl0
cl9lbmQ7IGl0cisrKSB7Ci0gICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0qIGl0
OwotICAgICAgICBFSU5BX0lOTElTVF9GT1JFQUNIKCppdHIsIGl0KQotICAgICAgICAgICAgaWYg
KGl0LT50aWxlKQorICAgIGZvciAoOyBpdGVyYXRvcjwgaXRlcmF0b3JFbmQ7IGl0ZXJhdG9yKysp
IHsKKyAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSogaXRlbTsKKyAgICAgICAg
RUlOQV9JTkxJU1RfRk9SRUFDSCgqaXRlcmF0b3IsIGl0ZW0pCisgICAgICAgICAgICBpZiAoaXRl
bS0+dGlsZSkKICAgICAgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9z
bW9vdGhfc2NhbGVfc2V0Ci0gICAgICAgICAgICAgICAgICAgIChpdCwgc21vb3RoU2NhbGUpOwor
ICAgICAgICAgICAgICAgICAgICAoaXRlbSwgc21vb3RoU2NhbGUpOwogICAgIH0KIH0KIApAQCAt
MTczNiwxNSArMTczNiwxNSBAQCBFaW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdXBk
YXRlKEV2YXNfT2JqZWN0KiBld2tUaWxlLCBjb25zdCBFaW5hX1JlY3Rhbgogdm9pZCBld2tfdGls
ZWRfYmFja2luZ19zdG9yZV91cGRhdGVzX3Byb2Nlc3NfcHJlX3NldChFdmFzX09iamVjdCogZXdr
VGlsZSwgdm9pZCogKCpjYWxsYmFjaykodm9pZCogZGF0YSwgRXZhc19PYmplY3QgKmV3a1RpbGUp
LCBjb25zdCB2b2lkKiBkYXRhKQogewogICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKGV3a1Rp
bGUsIHByaXYpOwotICAgIHByaXYtPnByb2Nlc3MucHJlX2NiID0gY2FsbGJhY2s7Ci0gICAgcHJp
di0+cHJvY2Vzcy5wcmVfZGF0YSA9ICh2b2lkKilkYXRhOworICAgIHByaXYtPnByb2Nlc3MucHJl
Q2FsbGJhY2sgPSBjYWxsYmFjazsKKyAgICBwcml2LT5wcm9jZXNzLnByZURhdGEgPSAodm9pZCop
ZGF0YTsKIH0KIAotdm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV91cGRhdGVzX3Byb2Nlc3Nf
cG9zdF9zZXQoRXZhc19PYmplY3QqIGV3a1RpbGUsIHZvaWQqICgqY2FsbGJhY2spKHZvaWQqIGRh
dGEsIHZvaWQqIHByZV9kYXRhLCBFdmFzX09iamVjdCAqZXdrVGlsZSksIGNvbnN0IHZvaWQqIGRh
dGEpCit2b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3VwZGF0ZXNfcHJvY2Vzc19wb3N0X3Nl
dChFdmFzX09iamVjdCogZXdrVGlsZSwgdm9pZCogKCpjYWxsYmFjaykodm9pZCogZGF0YSwgdm9p
ZCogcHJlRGF0YSwgRXZhc19PYmplY3QgKmV3a1RpbGUpLCBjb25zdCB2b2lkKiBkYXRhKQogewog
ICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKGV3a1RpbGUsIHByaXYpOwotICAgIHByaXYtPnBy
b2Nlc3MucG9zdF9jYiA9IGNhbGxiYWNrOwotICAgIHByaXYtPnByb2Nlc3MucG9zdF9kYXRhID0g
KHZvaWQqKWRhdGE7CisgICAgcHJpdi0+cHJvY2Vzcy5wb3N0Q2FsbGJhY2sgPSBjYWxsYmFjazsK
KyAgICBwcml2LT5wcm9jZXNzLnBvc3REYXRhID0gKHZvaWQqKWRhdGE7CiB9CiAKIHZvaWQgZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRlc19wcm9jZXNzKEV2YXNfT2JqZWN0KiBld2tUaWxl
KQpAQCAtMTc4Niw3ICsxNzg2LDcgQEAgdm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9kaXNh
YmxlZF91cGRhdGVfc2V0KEV2YXNfT2JqZWN0KiBld2tUaWxlLCBFaW5hX0Jvb2wKIHZvaWQgZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfZmx1c2goRXZhc19PYmplY3QqIGV3a1RpbGUpCiB7CiAgICAg
UFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4oZXdrVGlsZSwgcHJpdik7Ci0gICAgRXdrX1RpbGVfVW51
c2VkX0NhY2hlKiB0dWMgPSAwOworICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSogdGlsZVVudXNl
ZENhY2hlID0gMDsKIAogICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1ci54ID0gMDsKICAgICBwcml2
LT52aWV3Lm9mZnNldC5jdXIueSA9IDA7CkBAIC0xNzk0LDExICsxNzk0LDExIEBAIHZvaWQgZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfZmx1c2goRXZhc19PYmplY3QqIGV3a1RpbGUpCiAgICAgcHJp
di0+dmlldy5vZmZzZXQub2xkLnkgPSAwOwogICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCA9
IDA7CiAgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ID0gMDsKLSAgICBwcml2LT5tb2RlbC5i
YXNlLmNvbCA9IDA7CisgICAgcHJpdi0+bW9kZWwuYmFzZS5jb2x1bW4gPSAwOwogICAgIHByaXYt
Pm1vZGVsLmJhc2Uucm93ID0gMDsKLSAgICBwcml2LT5tb2RlbC5jdXIuY29scyA9IDE7Ci0gICAg
cHJpdi0+bW9kZWwuY3VyLnJvd3MgPSAxOwotICAgIHByaXYtPm1vZGVsLm9sZC5jb2xzID0gMDsK
KyAgICBwcml2LT5tb2RlbC5jdXJyZW50LmNvbHVtbnMgPSAxOworICAgIHByaXYtPm1vZGVsLmN1
cnJlbnQucm93cyA9IDE7CisgICAgcHJpdi0+bW9kZWwub2xkLmNvbHVtbnMgPSAwOwogICAgIHBy
aXYtPm1vZGVsLm9sZC5yb3dzID0gMDsKICAgICBwcml2LT5jaGFuZ2VkLnNpemUgPSBFSU5BX1RS
VUU7CiAKQEAgLTE4MDksOCArMTgwOSw4IEBAIHZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
Zmx1c2goRXZhc19PYmplY3QqIGV3a1RpbGUpCiAKICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2ZsdXNoKHByaXYpOwogICAgIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV90aWxlX2Rpc3NvY2lhdGVfYWxsKHByaXYpOwotICAgIHR1YyA9IGV3a190aWxlX21h
dHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7Ci0gICAgZXdrX3RpbGVf
dW51c2VkX2NhY2hlX2NsZWFyKHR1Yyk7CisgICAgdGlsZVVudXNlZENhY2hlID0gZXdrX3RpbGVf
bWF0cml4X3VudXNlZF9jYWNoZV9nZXQocHJpdi0+bW9kZWwubWF0cml4KTsKKyAgICBld2tfdGls
ZV91bnVzZWRfY2FjaGVfY2xlYXIodGlsZVVudXNlZENhY2hlKTsKIAogI2lmZGVmIERFQlVHX01F
TV9MRUFLUwogICAgIHByaW50ZigiXG5GTFVTSEVEIEJBQ0tJTkcgU1RPUkUsIFNUQVRVUyBBRlRF
UiBSRUNSRUFUSU5HIFRJTEUgTUFUUklYOlxuIik7CkBAIC0xODIzLDE2ICsxODIzLDE2IEBAIEVp
bmFfQm9vbCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlZ2lvbihFdmFzX09i
amVjdCogZXdrVGlsZSwgRXZhc19DCiAgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4oZXdrVGls
ZSwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgRWluYV9UaWxlX0dyaWRfU2xpY2VyIHNsaWNlcjsK
ICAgICBjb25zdCBFaW5hX1RpbGVfR3JpZF9JbmZvKiBpbmZvOwotICAgIEV2YXNfQ29vcmQgdHcs
IHRoOwotICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSogdHVjOworICAgIEV2YXNfQ29vcmQgdGls
ZVdpZHRoLCB0aWxlSGVpZ2h0OworICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSogdGlsZVVudXNl
ZENhY2hlOwogCi0gICAgdHcgPSBwcml2LT52aWV3LnRpbGUud2lkdGg7Ci0gICAgdGggPSBwcml2
LT52aWV3LnRpbGUuaGVpZ2h0OworICAgIHRpbGVXaWR0aCA9IHByaXYtPnZpZXcudGlsZS53aWR0
aDsKKyAgICB0aWxlSGVpZ2h0ID0gcHJpdi0+dmlldy50aWxlLmhlaWdodDsKICAgICB6b29tID0g
Uk9VTkRFRF9aT09NKHByaXYtPnZpZXcudGlsZS53aWR0aCwgem9vbSk7CiAKLSAgICBpZiAoIWVp
bmFfdGlsZV9ncmlkX3NsaWNlcl9zZXR1cCgmc2xpY2VyLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCB0
dywgdGgpKSB7CisgICAgaWYgKCFlaW5hX3RpbGVfZ3JpZF9zbGljZXJfc2V0dXAoJnNsaWNlciwg
eCwgeSwgd2lkdGgsIGhlaWdodCwgdGlsZVdpZHRoLCB0aWxlSGVpZ2h0KSkgewogICAgICAgICBF
UlIoImNvdWxkIG5vdCBzZXR1cCBncmlkIHNsaWNlciBmb3IgJWQsJWQrJWR4JWQgdGlsZT0lZHgl
ZCIsCi0gICAgICAgICAgICB4LCB5LCB3aWR0aCwgaGVpZ2h0LCB0dywgdGgpOworICAgICAgICAg
ICAgeCwgeSwgd2lkdGgsIGhlaWdodCwgdGlsZVdpZHRoLCB0aWxlSGVpZ2h0KTsKICAgICAgICAg
cmV0dXJuIEVJTkFfRkFMU0U7CiAgICAgfQogCkBAIC0xODQ1LDQ1ICsxODQ1LDQ1IEBAIEVpbmFf
Qm9vbCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlZ2lvbihFdmFzX09iamVj
dCogZXdrVGlsZSwgRXZhc19DCiAKICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9w
cm9jZXNzX2lkbGVyX3N0YXJ0KHByaXYpOwogCi0gICAgdHVjID0gZXdrX3RpbGVfbWF0cml4X3Vu
dXNlZF9jYWNoZV9nZXQocHJpdi0+bW9kZWwubWF0cml4KTsKLSAgICBld2tfdGlsZV91bnVzZWRf
Y2FjaGVfbG9ja19hcmVhKHR1YywgeCwgeSwgd2lkdGgsIGhlaWdodCwgem9vbSk7CisgICAgdGls
ZVVudXNlZENhY2hlID0gZXdrX3RpbGVfbWF0cml4X3VudXNlZF9jYWNoZV9nZXQocHJpdi0+bW9k
ZWwubWF0cml4KTsKKyAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfbG9ja19hcmVhKHRpbGVVbnVz
ZWRDYWNoZSwgeCwgeSwgd2lkdGgsIGhlaWdodCwgem9vbSk7CiAgICAgcmV0dXJuIEVJTkFfVFJV
RTsKIH0KIAogRWluYV9Cb29sIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVs
YXRpdmVfcmFkaXVzKEV2YXNfT2JqZWN0KiBld2tUaWxlLCB1bnNpZ25lZCBpbnQgbiwgZmxvYXQg
em9vbSkKIHsKICAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihld2tUaWxlLCBwcml2LCBFSU5B
X0ZBTFNFKTsKLSAgICB1bnNpZ25lZCBsb25nIHN0YXJ0X3JvdywgZW5kX3Jvdywgc3RhcnRfY29s
LCBlbmRfY29sLCBpLCBqLCB3aWR0aCwgaGVpZ2h0OwotICAgIEV3a19UaWxlX1VudXNlZF9DYWNo
ZSogdHVjOworICAgIHVuc2lnbmVkIGxvbmcgc3RhcnRSb3csIGVuZFJvdywgc3RhcnRDb2wsIGVu
ZENvbCwgaSwgaiwgd2lkdGgsIGhlaWdodDsKKyAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHRp
bGVVbnVzZWRDYWNoZTsKIAogICAgIElORigicHJpdi0+bW9kZWwuYmFzZS5yb3cgPSVsZCwgbj0l
dSBwcml2LT52aWV3LnJvd3M9JWx1IiwKICAgICAgICAgcHJpdi0+bW9kZWwuYmFzZS5yb3csIG4s
IHByaXYtPnZpZXcucm93cyk7Ci0gICAgc3RhcnRfcm93ID0gKGxvbmcpcHJpdi0+bW9kZWwuYmFz
ZS5yb3cgLSBuOwotICAgIHN0YXJ0X2NvbCA9IChsb25nKXByaXYtPm1vZGVsLmJhc2UuY29sIC0g
bjsKLSAgICBlbmRfcm93ID0gc3RkOjptaW4ocHJpdi0+bW9kZWwuY3VyLnJvd3MgLSAxLAorICAg
IHN0YXJ0Um93ID0gKGxvbmcpcHJpdi0+bW9kZWwuYmFzZS5yb3cgLSBuOworICAgIHN0YXJ0Q29s
ID0gKGxvbmcpcHJpdi0+bW9kZWwuYmFzZS5jb2x1bW4gLSBuOworICAgIGVuZFJvdyA9IHN0ZDo6
bWluKHByaXYtPm1vZGVsLmN1cnJlbnQucm93cyAtIDEsCiAgICAgICAgICAgICAgICAgICAgICAg
IHByaXYtPm1vZGVsLmJhc2Uucm93ICsgcHJpdi0+dmlldy5yb3dzICsgbiAtIDEpOwotICAgIGVu
ZF9jb2wgPSBzdGQ6Om1pbihwcml2LT5tb2RlbC5jdXIuY29scyAtIDEsCi0gICAgICAgICAgICAg
ICAgICAgICAgIHByaXYtPm1vZGVsLmJhc2UuY29sICsgcHJpdi0+dmlldy5jb2xzICsgbiAtIDEp
OworICAgIGVuZENvbCA9IHN0ZDo6bWluKHByaXYtPm1vZGVsLmN1cnJlbnQuY29sdW1ucyAtIDEs
CisgICAgICAgICAgICAgICAgICAgICAgIHByaXYtPm1vZGVsLmJhc2UuY29sdW1uICsgcHJpdi0+
dmlldy5jb2xzICsgbiAtIDEpOwogCi0gICAgSU5GKCJzdGFydF9yb3c9JWx1LCBlbmRfcm93PSVs
dSwgc3RhcnRfY29sPSVsdSwgZW5kX2NvbD0lbHUiLAotICAgICAgICBzdGFydF9yb3csIGVuZF9y
b3csIHN0YXJ0X2NvbCwgZW5kX2NvbCk7CisgICAgSU5GKCJzdGFydFJvdz0lbHUsIGVuZFJvdz0l
bHUsIHN0YXJ0Q29sPSVsdSwgZW5kQ29sPSVsdSIsCisgICAgICAgIHN0YXJ0Um93LCBlbmRSb3cs
IHN0YXJ0Q29sLCBlbmRDb2wpOwogCiAgICAgem9vbSA9IFJPVU5ERURfWk9PTShwcml2LT52aWV3
LnRpbGUud2lkdGgsIHpvb20pOwogCi0gICAgZm9yIChpID0gc3RhcnRfcm93OyBpIDw9IGVuZF9y
b3c7IGkrKykKLSAgICAgICAgZm9yIChqID0gc3RhcnRfY29sOyBqIDw9IGVuZF9jb2w7IGorKykK
KyAgICBmb3IgKGkgPSBzdGFydFJvdzsgaSA8PSBlbmRSb3c7IGkrKykKKyAgICAgICAgZm9yIChq
ID0gc3RhcnRDb2w7IGogPD0gZW5kQ29sOyBqKyspCiAgICAgICAgICAgICBpZiAoIV9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfYWRkKHByaXYsIGosIGksIHpvb20s
IFBSRV9SRU5ERVJfUFJJT1JJVFlfTE9XKSkKICAgICAgICAgICAgICAgICBnb3RvIHN0YXJ0X3By
b2Nlc3Npbmc7CiAKIHN0YXJ0X3Byb2Nlc3Npbmc6CiAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX2l0ZW1fcHJvY2Vzc19pZGxlcl9zdGFydChwcml2KTsKIAotICAgIHR1YyA9IGV3a190aWxl
X21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7Ci0gICAgaGVpZ2h0
ID0gKGVuZF9yb3cgLSBzdGFydF9yb3cgKyAxKSAqIFRJTEVfU0laRV9BVF9aT09NKHByaXYtPnZp
ZXcudGlsZS5oZWlnaHQsIHpvb20pOwotICAgIHdpZHRoID0gKGVuZF9jb2wgLSBzdGFydF9jb2wg
KyAxKSAqIFRJTEVfU0laRV9BVF9aT09NKHByaXYtPnZpZXcudGlsZS53aWR0aCwgem9vbSk7Ci0g
ICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2xvY2tfYXJlYSh0dWMsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdGFydF9jb2wgKiBUSUxFX1NJWkVfQVRfWk9PTShwcml2LT52
aWV3LnRpbGUud2lkdGgsIHpvb20pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RhcnRfcm93ICogVElMRV9TSVpFX0FUX1pPT00ocHJpdi0+dmlldy50aWxlLmhlaWdodCwg
em9vbSksIHdpZHRoLCBoZWlnaHQsIHpvb20pOworICAgIHRpbGVVbnVzZWRDYWNoZSA9IGV3a190
aWxlX21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7CisgICAgaGVp
Z2h0ID0gKGVuZFJvdyAtIHN0YXJ0Um93ICsgMSkgKiBUSUxFX1NJWkVfQVRfWk9PTShwcml2LT52
aWV3LnRpbGUuaGVpZ2h0LCB6b29tKTsKKyAgICB3aWR0aCA9IChlbmRDb2wgLSBzdGFydENvbCAr
IDEpICogVElMRV9TSVpFX0FUX1pPT00ocHJpdi0+dmlldy50aWxlLndpZHRoLCB6b29tKTsKKyAg
ICBld2tfdGlsZV91bnVzZWRfY2FjaGVfbG9ja19hcmVhKHRpbGVVbnVzZWRDYWNoZSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0Q29sICogVElMRV9TSVpFX0FUX1pP
T00ocHJpdi0+dmlldy50aWxlLndpZHRoLCB6b29tKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0YXJ0Um93ICogVElMRV9TSVpFX0FUX1pPT00ocHJpdi0+dmlldy50aWxl
LmhlaWdodCwgem9vbSksIHdpZHRoLCBoZWlnaHQsIHpvb20pOwogCiAgICAgcmV0dXJuIEVJTkFf
VFJVRTsKIH0KQEAgLTE4OTEsMTIgKzE4OTEsMTIgQEAgc3RhcnRfcHJvY2Vzc2luZzoKIHZvaWQg
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9jYW5jZWwoRXZhc19PYmplY3QqIGV3
a1RpbGUpCiB7CiAgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4oZXdrVGlsZSwgcHJpdik7Ci0g
ICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0dWM7CisgICAgRXdrX1RpbGVfVW51c2VkX0NhY2hl
KiB0aWxlVW51c2VkQ2FjaGU7CiAKICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3Jl
bmRlcl9yZXF1ZXN0X2NsZWFyKHByaXYpOwogCi0gICAgdHVjID0gZXdrX3RpbGVfbWF0cml4X3Vu
dXNlZF9jYWNoZV9nZXQocHJpdi0+bW9kZWwubWF0cml4KTsKLSAgICBld2tfdGlsZV91bnVzZWRf
Y2FjaGVfdW5sb2NrX2FyZWEodHVjKTsKKyAgICB0aWxlVW51c2VkQ2FjaGUgPSBld2tfdGlsZV9t
YXRyaXhfdW51c2VkX2NhY2hlX2dldChwcml2LT5tb2RlbC5tYXRyaXgpOworICAgIGV3a190aWxl
X3VudXNlZF9jYWNoZV91bmxvY2tfYXJlYSh0aWxlVW51c2VkQ2FjaGUpOwogfQogCiBFaW5hX0Jv
b2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZGlzYWJsZV9yZW5kZXIoRXZhc19PYmplY3QqIGV3
a1RpbGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX21hdHJp
eC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX21hdHJpeC5jcHAKaW5kZXgg
ZTkxYmQ3Nzc3N2UxMDVkMGZlMjJkY2FmOGYyZDZhYTAwMTZkMjI0ZS4uYzhjMzQ4NTMyMDZkMWRi
ZGVhNjUxODg2NDgwNzRhNDRlNjk0OTMzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwv
ZXdrL2V3a190aWxlZF9tYXRyaXguY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tf
dGlsZWRfbWF0cml4LmNwcApAQCAtMzMsMTAgKzMzLDEwIEBACiAKIHN0cnVjdCBfRXdrX1RpbGVf
TWF0cml4IHsKICAgICBFaW5hX01hdHJpeHNwYXJzZSogbWF0cml4OwotICAgIEV3a19UaWxlX1Vu
dXNlZF9DYWNoZSogdHVjOworICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSogdGlsaWVVbnVzZWRD
YWNoZTsKICAgICBFdmFzX0NvbG9yc3BhY2UgY3NwYWNlOwogICAgIHN0cnVjdCB7Ci0gICAgICAg
IHZvaWQgKCpjYikodm9pZCogZGF0YSwgRXdrX1RpbGUqIHRpbGUsIGNvbnN0IEVpbmFfUmVjdGFu
Z2xlKiB1cGRhdGUpOworICAgICAgICB2b2lkICgqY2FsbGJhY2spKHZvaWQqIGRhdGEsIEV3a19U
aWxlKiB0aWxlLCBjb25zdCBFaW5hX1JlY3RhbmdsZSogdXBkYXRlKTsKICAgICAgICAgdm9pZCog
ZGF0YTsKICAgICB9IHJlbmRlcjsKICAgICB1bnNpZ25lZCBpbnQgZnJvemVuOwpAQCAtNjEsNDIg
KzYxLDQyIEBAIHN0YXRpYyB1aW50NjRfdCBieXRlc19sZWFrZWQgPSAwOwogLyogY2FsbGVkIHdo
ZW4gbWF0cml4c3BhcnNlIGlzIHJlc2l6ZWQgb3IgZnJlZWQgKi8KIHN0YXRpYyB2b2lkIF9ld2tf
dGlsZV9tYXRyaXhfY2VsbF9mcmVlKHZvaWQqIHVzZXJEYXRhLCB2b2lkKiBjZWxsRGF0YSkKIHsK
LSAgICBFd2tfVGlsZV9NYXRyaXgqIHRtID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGVfTWF0cml4Kj4o
dXNlckRhdGEpOworICAgIEV3a19UaWxlX01hdHJpeCogdGlsZU1hdHJpeCA9IHN0YXRpY19jYXN0
PEV3a19UaWxlX01hdHJpeCo+KHVzZXJEYXRhKTsKICAgICBFd2tfVGlsZSogdGlsZSA9IHN0YXRp
Y19jYXN0PEV3a19UaWxlKj4oY2VsbERhdGEpOwogCiAgICAgaWYgKCF0aWxlKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfZnJlZXplKHRtLT50dWMpOworICAg
IGV3a190aWxlX3VudXNlZF9jYWNoZV9mcmVlemUodGlsZU1hdHJpeC0+dGlsaWVVbnVzZWRDYWNo
ZSk7CiAKICAgICBpZiAodGlsZS0+dXBkYXRlcyB8fCB0aWxlLT5zdGF0cy5mdWxsX3VwZGF0ZSkK
LSAgICAgICAgdG0tPnVwZGF0ZXMgPSBlaW5hX2xpc3RfcmVtb3ZlKHRtLT51cGRhdGVzLCB0aWxl
KTsKKyAgICAgICAgdGlsZU1hdHJpeC0+dXBkYXRlcyA9IGVpbmFfbGlzdF9yZW1vdmUodGlsZU1h
dHJpeC0+dXBkYXRlcywgdGlsZSk7CiAKICAgICBpZiAodGlsZS0+dmlzaWJsZSkKICAgICAgICAg
RVJSKCJmcmVlaW5nIGNlbGwgdGhhdCBpcyB2aXNpYmxlLCBsZWFraW5nIHRpbGUgJXAiLCB0aWxl
KTsKICAgICBlbHNlIHsKLSAgICAgICAgaWYgKCFld2tfdGlsZV91bnVzZWRfY2FjaGVfdGlsZV9n
ZXQodG0tPnR1YywgdGlsZSkpCi0gICAgICAgICAgICBFUlIoInRpbGUgJXAgd2FzIG5vdCBpbiBj
YWNoZSAlcD8gbGVha2luZy4uLiIsIHRpbGUsIHRtLT50dWMpOworICAgICAgICBpZiAoIWV3a190
aWxlX3VudXNlZF9jYWNoZV90aWxlX2dldCh0aWxlTWF0cml4LT50aWxpZVVudXNlZENhY2hlLCB0
aWxlKSkKKyAgICAgICAgICAgIEVSUigidGlsZSAlcCB3YXMgbm90IGluIGNhY2hlICVwPyBsZWFr
aW5nLi4uIiwgdGlsZSwgdGlsZU1hdHJpeC0+dGlsaWVVbnVzZWRDYWNoZSk7CiAgICAgICAgIGVs
c2UgewogICAgICAgICAgICAgREJHKCJ0aWxlIGNlbGwgZG9lcyBub3QgZXhpc3QgYW55bW9yZSwg
ZnJlZSBpdCAlcCIsIHRpbGUpOwogI2lmZGVmIERFQlVHX01FTV9MRUFLUwotICAgICAgICAgICAg
dG0tPnN0YXRzLmJ5dGVzLmZyZWVkICs9IHRpbGUtPmJ5dGVzOwotICAgICAgICAgICAgdG0tPnN0
YXRzLnRpbGVzLmZyZWVkKys7CisgICAgICAgICAgICB0aWxlTWF0cml4LT5zdGF0cy5ieXRlcy5m
cmVlZCArPSB0aWxlLT5ieXRlczsKKyAgICAgICAgICAgIHRpbGVNYXRyaXgtPnN0YXRzLnRpbGVz
LmZyZWVkKys7CiAjZW5kaWYKICAgICAgICAgICAgIGV3a190aWxlX2ZyZWUodGlsZSk7CiAgICAg
ICAgIH0KICAgICB9CiAKLSAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfdGhhdyh0bS0+dHVjKTsK
KyAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfdGhhdyh0aWxlTWF0cml4LT50aWxpZVVudXNlZENh
Y2hlKTsKIH0KIAogLyogY2FsbGVkIHdoZW4gY2FjaGUgb2YgdW51c2VkIHRpbGUgaXMgZmx1c2hl
ZCAqLwogc3RhdGljIHZvaWQgX2V3a190aWxlX21hdHJpeF90aWxlX2ZyZWUodm9pZCogZGF0YSwg
RXdrX1RpbGUqIHRpbGUpCiB7Ci0gICAgRXdrX1RpbGVfTWF0cml4KiB0bSA9IHN0YXRpY19jYXN0
PEV3a19UaWxlX01hdHJpeCo+KGRhdGEpOworICAgIEV3a19UaWxlX01hdHJpeCogdGlsZU1hdHJp
eCA9IHN0YXRpY19jYXN0PEV3a19UaWxlX01hdHJpeCo+KGRhdGEpOwogICAgIEVpbmFfTWF0cml4
c3BhcnNlX0NlbGwqIGNlbGw7CiAKLSAgICBpZiAoIWVpbmFfbWF0cml4c3BhcnNlX2NlbGxfaWR4
X2dldCh0bS0+bWF0cml4LCB0aWxlLT5yb3csIHRpbGUtPmNvbCwgJmNlbGwpKSB7CisgICAgaWYg
KCFlaW5hX21hdHJpeHNwYXJzZV9jZWxsX2lkeF9nZXQodGlsZU1hdHJpeC0+bWF0cml4LCB0aWxl
LT5yb3csIHRpbGUtPmNvbCwgJmNlbGwpKSB7CiAgICAgICAgIEVSUigicmVtb3ZpbmcgdGlsZSAl
cCB0aGF0IHdhcyBub3QgaW4gdGhlIG1hdHJpeD8gTGVha2luZy4uLiIsIHRpbGUpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQpAQCAtMTA3LDcgKzEwNyw3IEBAIHN0YXRpYyB2b2lkIF9ld2tfdGls
ZV9tYXRyaXhfdGlsZV9mcmVlKHZvaWQqIGRhdGEsIEV3a19UaWxlKiB0aWxlKQogICAgIH0KIAog
ICAgIGlmICh0aWxlLT51cGRhdGVzIHx8IHRpbGUtPnN0YXRzLmZ1bGxfdXBkYXRlKQotICAgICAg
ICB0bS0+dXBkYXRlcyA9IGVpbmFfbGlzdF9yZW1vdmUodG0tPnVwZGF0ZXMsIHRpbGUpOworICAg
ICAgICB0aWxlTWF0cml4LT51cGRhdGVzID0gZWluYV9saXN0X3JlbW92ZSh0aWxlTWF0cml4LT51
cGRhdGVzLCB0aWxlKTsKIAogICAgIC8qIHNldCB0byBudWxsIHRvIGF2b2lkIGRvdWJsZSBmcmVl
ICovCiAgICAgZWluYV9tYXRyaXhzcGFyc2VfY2VsbF9kYXRhX3JlcGxhY2UoY2VsbCwgMCwgMCk7
CkBAIC0xMjAsOCArMTIwLDggQEAgc3RhdGljIHZvaWQgX2V3a190aWxlX21hdHJpeF90aWxlX2Zy
ZWUodm9pZCogZGF0YSwgRXdrX1RpbGUqIHRpbGUpCiAgICAgfQogCiAjaWZkZWYgREVCVUdfTUVN
X0xFQUtTCi0gICAgdG0tPnN0YXRzLmJ5dGVzLmZyZWVkICs9IHRpbGUtPmJ5dGVzOwotICAgIHRt
LT5zdGF0cy50aWxlcy5mcmVlZCsrOworICAgIHRpbGVNYXRyaXgtPnN0YXRzLmJ5dGVzLmZyZWVk
ICs9IHRpbGUtPmJ5dGVzOworICAgIHRpbGVNYXRyaXgtPnN0YXRzLnRpbGVzLmZyZWVkKys7CiAj
ZW5kaWYKIAogICAgIGV3a190aWxlX2ZyZWUodGlsZSk7CkBAIC0xNDUsMzggKzE0NSwzOCBAQCBz
dGF0aWMgdm9pZCBfZXdrX3RpbGVfbWF0cml4X3RpbGVfZnJlZSh2b2lkKiBkYXRhLCBFd2tfVGls
ZSogdGlsZSkKICAqCiAgKiBAcmV0dXJuIG5ld2x5IGFsbG9jYXRlZCBpbnN0YW5jZSBvbiBzdWNj
ZXNzLCBAYyAwIG9uIGZhaWx1cmUuCiAgKi8KLUV3a19UaWxlX01hdHJpeCogZXdrX3RpbGVfbWF0
cml4X25ldyhFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHRpbGVVbnVzZWRDYWNoZSwgdW5zaWduZWQg
bG9uZyBjb2x1bW5zLCB1bnNpZ25lZCBsb25nIHJvd3MsIEV2YXNfQ29sb3JzcGFjZSBjb2xvclNw
YWNlLCB2b2lkICgqcmVuZGVyX2NhbGxiYWNrKSh2b2lkKiBkYXRhLCBFd2tfVGlsZSogdGlsZSwg
Y29uc3QgRWluYV9SZWN0YW5nbGUqIHVwZGF0ZSksIGNvbnN0IHZvaWQqIHJlbmRlckRhdGEpCitF
d2tfVGlsZV9NYXRyaXgqIGV3a190aWxlX21hdHJpeF9uZXcoRXdrX1RpbGVfVW51c2VkX0NhY2hl
KiB0aWxlVW51c2VkQ2FjaGUsIHVuc2lnbmVkIGxvbmcgY29sdW1ucywgdW5zaWduZWQgbG9uZyBy
b3dzLCBFdmFzX0NvbG9yc3BhY2UgY29sb3JTcGFjZSwgdm9pZCAoKnJlbmRlckNhbGxiYWNrKSh2
b2lkKiBkYXRhLCBFd2tfVGlsZSogdGlsZSwgY29uc3QgRWluYV9SZWN0YW5nbGUqIHVwZGF0ZSks
IGNvbnN0IHZvaWQqIHJlbmRlckRhdGEpCiB7Ci0gICAgRXdrX1RpbGVfTWF0cml4KiB0bSA9IHN0
YXRpY19jYXN0PEV3a19UaWxlX01hdHJpeCo+KGNhbGxvYygxLCBzaXplb2YoRXdrX1RpbGVfTWF0
cml4KSkpOwotICAgIGlmICghdG0pCisgICAgRXdrX1RpbGVfTWF0cml4KiB0aWxlTWF0cml4ID0g
c3RhdGljX2Nhc3Q8RXdrX1RpbGVfTWF0cml4Kj4oY2FsbG9jKDEsIHNpemVvZihFd2tfVGlsZV9N
YXRyaXgpKSk7CisgICAgaWYgKCF0aWxlTWF0cml4KQogICAgICAgICByZXR1cm4gMDsKIAotICAg
IHRtLT5tYXRyaXggPSBlaW5hX21hdHJpeHNwYXJzZV9uZXcocm93cywgY29sdW1ucywgX2V3a190
aWxlX21hdHJpeF9jZWxsX2ZyZWUsIHRtKTsKLSAgICBpZiAoIXRtLT5tYXRyaXgpIHsKKyAgICB0
aWxlTWF0cml4LT5tYXRyaXggPSBlaW5hX21hdHJpeHNwYXJzZV9uZXcocm93cywgY29sdW1ucywg
X2V3a190aWxlX21hdHJpeF9jZWxsX2ZyZWUsIHRpbGVNYXRyaXgpOworICAgIGlmICghdGlsZU1h
dHJpeC0+bWF0cml4KSB7CiAgICAgICAgIEVSUigiY291bGQgbm90IGNyZWF0ZSBzcGFyc2UgbWF0
cml4LiIpOwotICAgICAgICBmcmVlKHRtKTsKKyAgICAgICAgZnJlZSh0aWxlTWF0cml4KTsKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgfQogCiAgICAgaWYgKHRpbGVVbnVzZWRDYWNoZSkKLSAgICAg
ICAgdG0tPnR1YyA9IGV3a190aWxlX3VudXNlZF9jYWNoZV9yZWYodGlsZVVudXNlZENhY2hlKTsK
KyAgICAgICAgdGlsZU1hdHJpeC0+dGlsaWVVbnVzZWRDYWNoZSA9IGV3a190aWxlX3VudXNlZF9j
YWNoZV9yZWYodGlsZVVudXNlZENhY2hlKTsKICAgICBlbHNlIHsKLSAgICAgICAgdG0tPnR1YyA9
IGV3a190aWxlX3VudXNlZF9jYWNoZV9uZXcoNDA5NjAwMDApOwotICAgICAgICBpZiAoIXRtLT50
dWMpIHsKKyAgICAgICAgdGlsZU1hdHJpeC0+dGlsaWVVbnVzZWRDYWNoZSA9IGV3a190aWxlX3Vu
dXNlZF9jYWNoZV9uZXcoNDA5NjAwMDApOworICAgICAgICBpZiAoIXRpbGVNYXRyaXgtPnRpbGll
VW51c2VkQ2FjaGUpIHsKICAgICAgICAgICAgIEVSUigibm8gY2FjaGUgb2YgdW51c2VkIHRpbGUh
Iik7Ci0gICAgICAgICAgICBlaW5hX21hdHJpeHNwYXJzZV9mcmVlKHRtLT5tYXRyaXgpOwotICAg
ICAgICAgICAgZnJlZSh0bSk7CisgICAgICAgICAgICBlaW5hX21hdHJpeHNwYXJzZV9mcmVlKHRp
bGVNYXRyaXgtPm1hdHJpeCk7CisgICAgICAgICAgICBmcmVlKHRpbGVNYXRyaXgpOwogICAgICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICB0bS0+Y3NwYWNlID0gY29s
b3JTcGFjZTsKLSAgICB0bS0+cmVuZGVyLmNiID0gcmVuZGVyX2NhbGxiYWNrOwotICAgIHRtLT5y
ZW5kZXIuZGF0YSA9ICh2b2lkKilyZW5kZXJEYXRhOwotICAgIHRtLT50aWxlLndpZHRoID0gREVG
QVVMVF9USUxFX1c7Ci0gICAgdG0tPnRpbGUuaGVpZ2h0ID0gREVGQVVMVF9USUxFX0g7CisgICAg
dGlsZU1hdHJpeC0+Y3NwYWNlID0gY29sb3JTcGFjZTsKKyAgICB0aWxlTWF0cml4LT5yZW5kZXIu
Y2FsbGJhY2sgPSByZW5kZXJDYWxsYmFjazsKKyAgICB0aWxlTWF0cml4LT5yZW5kZXIuZGF0YSA9
ICh2b2lkKilyZW5kZXJEYXRhOworICAgIHRpbGVNYXRyaXgtPnRpbGUud2lkdGggPSBERUZBVUxU
X1RJTEVfVzsKKyAgICB0aWxlTWF0cml4LT50aWxlLmhlaWdodCA9IERFRkFVTFRfVElMRV9IOwog
Ci0gICAgcmV0dXJuIHRtOworICAgIHJldHVybiB0aWxlTWF0cml4OwogfQogCiAvKioKQEAgLTE5
MSwxMiArMTkxLDEyIEBAIHZvaWQgZXdrX3RpbGVfbWF0cml4X2ZyZWUoRXdrX1RpbGVfTWF0cml4
KiB0aWxlTWF0cml4KQogI2VuZGlmCiAKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0
aWxlTWF0cml4KTsKLSAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfZnJlZXplKHRpbGVNYXRyaXgt
PnR1Yyk7CisgICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2ZyZWV6ZSh0aWxlTWF0cml4LT50aWxp
ZVVudXNlZENhY2hlKTsKIAogICAgIGVpbmFfbWF0cml4c3BhcnNlX2ZyZWUodGlsZU1hdHJpeC0+
bWF0cml4KTsKIAotICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV90aGF3KHRpbGVNYXRyaXgtPnR1
Yyk7Ci0gICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3VucmVmKHRpbGVNYXRyaXgtPnR1Yyk7Cisg
ICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3RoYXcodGlsZU1hdHJpeC0+dGlsaWVVbnVzZWRDYWNo
ZSk7CisgICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3VucmVmKHRpbGVNYXRyaXgtPnRpbGllVW51
c2VkQ2FjaGUpOwogCiAjaWZkZWYgREVCVUdfTUVNX0xFQUtTCiAgICAgdGlsZXMgPSB0aWxlTWF0
cml4LT5zdGF0cy50aWxlcy5hbGxvY2F0ZWQgLSB0aWxlTWF0cml4LT5zdGF0cy50aWxlcy5mcmVl
ZDsKQEAgLTI0NCw3ICsyNDQsNyBAQCB2b2lkIGV3a190aWxlX21hdHJpeF9yZXNpemUoRXdrX1Rp
bGVfTWF0cml4KiB0aWxlTWF0cml4LCB1bnNpZ25lZCBsb25nIGNvbHMsIHVucwogRXdrX1RpbGVf
VW51c2VkX0NhY2hlKiBld2tfdGlsZV9tYXRyaXhfdW51c2VkX2NhY2hlX2dldChjb25zdCBFd2tf
VGlsZV9NYXRyaXgqIHRpbGVNYXRyaXgpCiB7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk5fVkFMKHRpbGVNYXRyaXgsIDApOwotICAgIHJldHVybiB0aWxlTWF0cml4LT50dWM7CisgICAg
cmV0dXJuIHRpbGVNYXRyaXgtPnRpbGllVW51c2VkQ2FjaGU7CiB9CiAKIC8qKgpAQCAtMjc5LDcg
KzI3OSw3IEBAIEV3a19UaWxlKiBld2tfdGlsZV9tYXRyaXhfdGlsZV9leGFjdF9nZXQoRXdrX1Rp
bGVfTWF0cml4KiB0aWxlTWF0cml4LCB1bnNpZ25lZCBsCiAKIGVuZDoKICAgICBpZiAoIXRpbGUt
PnZpc2libGUpIHsKLSAgICAgICAgaWYgKCFld2tfdGlsZV91bnVzZWRfY2FjaGVfdGlsZV9nZXQo
dGlsZU1hdHJpeC0+dHVjLCB0aWxlKSkKKyAgICAgICAgaWYgKCFld2tfdGlsZV91bnVzZWRfY2Fj
aGVfdGlsZV9nZXQodGlsZU1hdHJpeC0+dGlsaWVVbnVzZWRDYWNoZSwgdGlsZSkpCiAgICAgICAg
ICAgICBXUk4oIkV3a19UaWxlIHdhcyB1bnVzZWQgYnV0IG5vdCBpbiBjYWNoZT8gYnVnISIpOwog
ICAgIH0KIApAQCAtMzIwLDE4ICszMjAsMTggQEAgRWluYV9Cb29sIGV3a190aWxlX21hdHJpeF90
aWxlX2V4YWN0X2V4aXN0cyhFd2tfVGlsZV9NYXRyaXgqIHRpbGVNYXRyaXgsIHVuc2lnbmUKICAq
LwogRXdrX1RpbGUqIGV3a190aWxlX21hdHJpeF90aWxlX25ldyhFd2tfVGlsZV9NYXRyaXgqIHRp
bGVNYXRyaXgsIEV2YXMqIGNhbnZhcywgdW5zaWduZWQgbG9uZyBjb2x1bW4sIHVuc2lnbmVkIGxv
bmcgcm93LCBmbG9hdCB6b29tKQogewotICAgIEV2YXNfQ29vcmQgdHcsIHRoOworICAgIEV2YXNf
Q29vcmQgdGlsZVdpZHRoLCB0aWxlSGVpZ2h0OwogICAgIEV3a19UaWxlKiB0aWxlOwogCiAgICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHRpbGVNYXRyaXgsIDApOwogICAgIEVJTkFf
U0FGRVRZX09OX0ZBTFNFX1JFVFVSTl9WQUwoem9vbSA+IDAuMCwgMCk7CiAKLSAgICB0dyA9IHRp
bGVNYXRyaXgtPnRpbGUud2lkdGg7Ci0gICAgdGggPSB0aWxlTWF0cml4LT50aWxlLmhlaWdodDsK
KyAgICB0aWxlV2lkdGggPSB0aWxlTWF0cml4LT50aWxlLndpZHRoOworICAgIHRpbGVIZWlnaHQg
PSB0aWxlTWF0cml4LT50aWxlLmhlaWdodDsKIAotICAgIHRpbGUgPSBld2tfdGlsZV9uZXcoY2Fu
dmFzLCB0dywgdGgsIHpvb20sIHRpbGVNYXRyaXgtPmNzcGFjZSk7CisgICAgdGlsZSA9IGV3a190
aWxlX25ldyhjYW52YXMsIHRpbGVXaWR0aCwgdGlsZUhlaWdodCwgem9vbSwgdGlsZU1hdHJpeC0+
Y3NwYWNlKTsKICAgICBpZiAoIXRpbGUpIHsKLSAgICAgICAgRVJSKCJjb3VsZCBub3QgY3JlYXRl
IHRpbGUgJWR4JWQgYXQgJWYsIGNzcGFjZT0lZCIsIHR3LCB0aCwgKGRvdWJsZSl6b29tLCB0aWxl
TWF0cml4LT5jc3BhY2UpOworICAgICAgICBFUlIoImNvdWxkIG5vdCBjcmVhdGUgdGlsZSAlZHgl
ZCBhdCAlZiwgY3NwYWNlPSVkIiwgdGlsZVdpZHRoLCB0aWxlSGVpZ2h0LCAoZG91YmxlKXpvb20s
IHRpbGVNYXRyaXgtPmNzcGFjZSk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIApAQCAtMzQz
LDggKzM0Myw4IEBAIEV3a19UaWxlKiBld2tfdGlsZV9tYXRyaXhfdGlsZV9uZXcoRXdrX1RpbGVf
TWF0cml4KiB0aWxlTWF0cml4LCBFdmFzKiBjYW52YXMsIHVuCiAKICAgICB0aWxlLT5jb2wgPSBj
b2x1bW47CiAgICAgdGlsZS0+cm93ID0gcm93OwotICAgIHRpbGUtPnggPSBjb2x1bW4gKiB0dzsK
LSAgICB0aWxlLT55ID0gcm93ICogdGg7CisgICAgdGlsZS0+eCA9IGNvbHVtbiAqIHRpbGVXaWR0
aDsKKyAgICB0aWxlLT55ID0gcm93ICogdGlsZUhlaWdodDsKIAogICAgIGNhaXJvX3RyYW5zbGF0
ZSh0aWxlLT5jYWlybywgLXRpbGUtPngsIC10aWxlLT55KTsKIApAQCAtMzg1LDE2ICszODUsMTYg
QEAgRWluYV9Cb29sIGV3a190aWxlX21hdHJpeF90aWxlX3B1dChFd2tfVGlsZV9NYXRyaXgqIHRp
bGVNYXRyaXgsIEV3a19UaWxlKiB0aWxlLAogICAgICAgICByZXR1cm4gRUlOQV9UUlVFOwogCiAg
ICAgdGlsZS0+c3RhdHMubGFzdF91c2VkID0gbGFzdFVzZWQ7Ci0gICAgcmV0dXJuIGV3a190aWxl
X3VudXNlZF9jYWNoZV90aWxlX3B1dCh0aWxlTWF0cml4LT50dWMsIHRpbGUsIF9ld2tfdGlsZV9t
YXRyaXhfdGlsZV9mcmVlLCB0aWxlTWF0cml4KTsKKyAgICByZXR1cm4gZXdrX3RpbGVfdW51c2Vk
X2NhY2hlX3RpbGVfcHV0KHRpbGVNYXRyaXgtPnRpbGllVW51c2VkQ2FjaGUsIHRpbGUsIF9ld2tf
dGlsZV9tYXRyaXhfdGlsZV9mcmVlLCB0aWxlTWF0cml4KTsKIH0KIAogRWluYV9Cb29sIGV3a190
aWxlX21hdHJpeF90aWxlX3VwZGF0ZShFd2tfVGlsZV9NYXRyaXgqIHRpbGVNYXRyaXgsIHVuc2ln
bmVkIGxvbmcgY29sLCB1bnNpZ25lZCBsb25nIHJvdywgY29uc3QgRWluYV9SZWN0YW5nbGUqIHVw
ZGF0ZSkKIHsKLSAgICBFaW5hX1JlY3RhbmdsZSBuZXdfdXBkYXRlOworICAgIEVpbmFfUmVjdGFu
Z2xlIG5ld1VwZGF0ZTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodGlsZU1h
dHJpeCwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHVw
ZGF0ZSwgRUlOQV9GQUxTRSk7CiAKLSAgICBtZW1jcHkoJm5ld191cGRhdGUsIHVwZGF0ZSwgc2l6
ZW9mKG5ld191cGRhdGUpKTsKKyAgICBtZW1jcHkoJm5ld1VwZGF0ZSwgdXBkYXRlLCBzaXplb2Yo
bmV3VXBkYXRlKSk7CiAgICAgLy8gY2hlY2sgdXBkYXRlIGlzIHZhbGlkLCBvdGhlcndpc2UgcmV0
dXJuIEVJTkFfRkFMU0UKICAgICBpZiAodXBkYXRlLT54IDwgMCB8fCB1cGRhdGUtPnkgPCAwIHx8
IHVwZGF0ZS0+dyA8PSAwIHx8IHVwZGF0ZS0+aCA8PSAwKSB7CiAgICAgICAgIEVSUigiaW52YWxp
ZCB1cGRhdGUgcmVnaW9uLiIpOwpAQCAtNDAyLDkgKzQwMiw5IEBAIEVpbmFfQm9vbCBld2tfdGls
ZV9tYXRyaXhfdGlsZV91cGRhdGUoRXdrX1RpbGVfTWF0cml4KiB0aWxlTWF0cml4LCB1bnNpZ25l
ZCBsb25nCiAgICAgfQogCiAgICAgaWYgKHVwZGF0ZS0+eCArIHVwZGF0ZS0+dyAtIDEgPj0gdGls
ZU1hdHJpeC0+dGlsZS53aWR0aCkKLSAgICAgICAgbmV3X3VwZGF0ZS53ID0gdGlsZU1hdHJpeC0+
dGlsZS53aWR0aCAtIHVwZGF0ZS0+eDsKKyAgICAgICAgbmV3VXBkYXRlLncgPSB0aWxlTWF0cml4
LT50aWxlLndpZHRoIC0gdXBkYXRlLT54OwogICAgIGlmICh1cGRhdGUtPnkgKyB1cGRhdGUtPmgg
LSAxID49IHRpbGVNYXRyaXgtPnRpbGUuaGVpZ2h0KQotICAgICAgICBuZXdfdXBkYXRlLmggPSB0
aWxlTWF0cml4LT50aWxlLmhlaWdodCAtIHVwZGF0ZS0+eTsKKyAgICAgICAgbmV3VXBkYXRlLmgg
PSB0aWxlTWF0cml4LT50aWxlLmhlaWdodCAtIHVwZGF0ZS0+eTsKIAogICAgIEV3a19UaWxlKiB0
aWxlID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGUqPihlaW5hX21hdHJpeHNwYXJzZV9kYXRhX2lkeF9n
ZXQodGlsZU1hdHJpeC0+bWF0cml4LCByb3csIGNvbCkpOwogICAgIGlmICghdGlsZSkKQEAgLTQx
Miw3ICs0MTIsNyBAQCBFaW5hX0Jvb2wgZXdrX3RpbGVfbWF0cml4X3RpbGVfdXBkYXRlKEV3a19U
aWxlX01hdHJpeCogdGlsZU1hdHJpeCwgdW5zaWduZWQgbG9uZwogCiAgICAgaWYgKCF0aWxlLT51
cGRhdGVzICYmICF0aWxlLT5zdGF0cy5mdWxsX3VwZGF0ZSkKICAgICAgICAgdGlsZU1hdHJpeC0+
dXBkYXRlcyA9IGVpbmFfbGlzdF9hcHBlbmQodGlsZU1hdHJpeC0+dXBkYXRlcywgdGlsZSk7Ci0g
ICAgZXdrX3RpbGVfdXBkYXRlX2FyZWEodGlsZSwgJm5ld191cGRhdGUpOworICAgIGV3a190aWxl
X3VwZGF0ZV9hcmVhKHRpbGUsICZuZXdVcGRhdGUpOwogCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsK
IH0KQEAgLTQ1Myw3ICs0NTMsNyBAQCB2b2lkIGV3a190aWxlX21hdHJpeF90aWxlX3VwZGF0ZXNf
Y2xlYXIoRXdrX1RpbGVfTWF0cml4KiB0aWxlTWF0cml4LCBFd2tfVGlsZSogdAogc3RhdGljIEVp
bmFfQm9vbCBfZXdrX3RpbGVfbWF0cml4X3NsaWNlcl9zZXR1cChFd2tfVGlsZV9NYXRyaXgqIHRp
bGVNYXRyaXgsIGNvbnN0IEVpbmFfUmVjdGFuZ2xlKiBhcmVhLCBmbG9hdCB6b29tLCBFaW5hX1Rp
bGVfR3JpZF9TbGljZXIqIHNsaWNlcikKIHsKICAgICB1bnNpZ25lZCBsb25nIHJvd3MsIGNvbHM7
Ci0gICAgRXZhc19Db29yZCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCB0dywgdGg7CisgICAgRXZhc19D
b29yZCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCB0aWxlV2lkdGgsIHRpbGVIZWlnaHQ7CiAKICAgICBp
ZiAoYXJlYS0+dyA8PSAwIHx8IGFyZWEtPmggPD0gMCkgewogICAgICAgICBXUk4oImludmFsaWQg
YXJlYSByZWdpb246ICVkLCVkKyVkeCVkLiIsCkBAIC00NjYsOCArNDY2LDggQEAgc3RhdGljIEVp
bmFfQm9vbCBfZXdrX3RpbGVfbWF0cml4X3NsaWNlcl9zZXR1cChFd2tfVGlsZV9NYXRyaXgqIHRp
bGVNYXRyaXgsIGNvbnMKICAgICB3aWR0aCA9IGFyZWEtPnc7CiAgICAgaGVpZ2h0ID0gYXJlYS0+
aDsKIAotICAgIHR3ID0gdGlsZU1hdHJpeC0+dGlsZS53aWR0aDsKLSAgICB0aCA9IHRpbGVNYXRy
aXgtPnRpbGUuaGVpZ2h0OworICAgIHRpbGVXaWR0aCA9IHRpbGVNYXRyaXgtPnRpbGUud2lkdGg7
CisgICAgdGlsZUhlaWdodCA9IHRpbGVNYXRyaXgtPnRpbGUuaGVpZ2h0OwogCiAgICAgLy8gY3Jv
cHBpbmcgYXJlYSByZWdpb24gdG8gZml0IG1hdHJpeAogICAgIGVpbmFfbWF0cml4c3BhcnNlX3Np
emVfZ2V0KHRpbGVNYXRyaXgtPm1hdHJpeCwgJnJvd3MsICZjb2xzKTsKQEAgLTQ4MCwxMiArNDgw
LDEyIEBAIHN0YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxlX21hdHJpeF9zbGljZXJfc2V0dXAoRXdr
X1RpbGVfTWF0cml4KiB0aWxlTWF0cml4LCBjb25zCiAgICAgICAgIHkgPSAwOwogICAgIH0KIAot
ICAgIGlmICh5ICsgaGVpZ2h0IC0gMSA+IChsb25nKShyb3dzICogdGgpKQotICAgICAgICBoZWln
aHQgPSByb3dzICogdGggLSB5OwotICAgIGlmICh4ICsgd2lkdGggLSAxID4gKGxvbmcpKGNvbHMg
KiB0dykpCi0gICAgICAgIHdpZHRoID0gY29scyAqIHR3IC0geDsKKyAgICBpZiAoeSArIGhlaWdo
dCAtIDEgPiAobG9uZykocm93cyAqIHRpbGVIZWlnaHQpKQorICAgICAgICBoZWlnaHQgPSByb3dz
ICogdGlsZUhlaWdodCAtIHk7CisgICAgaWYgKHggKyB3aWR0aCAtIDEgPiAobG9uZykoY29scyAq
IHRpbGVXaWR0aCkpCisgICAgICAgIHdpZHRoID0gY29scyAqIHRpbGVXaWR0aCAtIHg7CiAKLSAg
ICByZXR1cm4gZWluYV90aWxlX2dyaWRfc2xpY2VyX3NldHVwKHNsaWNlciwgeCwgeSwgd2lkdGgs
IGhlaWdodCwgdHcsIHRoKTsKKyAgICByZXR1cm4gZWluYV90aWxlX2dyaWRfc2xpY2VyX3NldHVw
KHNsaWNlciwgeCwgeSwgd2lkdGgsIGhlaWdodCwgdGlsZVdpZHRoLCB0aWxlSGVpZ2h0KTsKIH0K
IAogCkBAIC01MzEsMTcgKzUzMSwxNyBAQCBFaW5hX0Jvb2wgZXdrX3RpbGVfbWF0cml4X3VwZGF0
ZShFd2tfVGlsZV9NYXRyaXgqIHRpbGVNYXRyaXgsIGNvbnN0IEVpbmFfUmVjdGFuZwogCiB2b2lk
IGV3a190aWxlX21hdHJpeF91cGRhdGVzX3Byb2Nlc3MoRXdrX1RpbGVfTWF0cml4KiB0aWxlTWF0
cml4KQogewotICAgIEVpbmFfTGlzdCogbCwgKiBsX25leHQ7CisgICAgRWluYV9MaXN0KiBsaXN0
LCAqbGlzdE5leHQ7CiAgICAgdm9pZCogaXRlbTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTih0aWxlTWF0cml4KTsKIAogICAgIC8vIHByb2Nlc3MgdXBkYXRlcywgdW5mbGFnIHRpbGVz
Ci0gICAgRUlOQV9MSVNUX0ZPUkVBQ0hfU0FGRSh0aWxlTWF0cml4LT51cGRhdGVzLCBsLCBsX25l
eHQsIGl0ZW0pIHsKKyAgICBFSU5BX0xJU1RfRk9SRUFDSF9TQUZFKHRpbGVNYXRyaXgtPnVwZGF0
ZXMsIGxpc3QsIGxpc3ROZXh0LCBpdGVtKSB7CiAgICAgICAgIEV3a19UaWxlKiB0aWxlID0gc3Rh
dGljX2Nhc3Q8RXdrX1RpbGUqPihpdGVtKTsKLSAgICAgICAgZXdrX3RpbGVfdXBkYXRlc19wcm9j
ZXNzKHRpbGUsIHRpbGVNYXRyaXgtPnJlbmRlci5jYiwgdGlsZU1hdHJpeC0+cmVuZGVyLmRhdGEp
OworICAgICAgICBld2tfdGlsZV91cGRhdGVzX3Byb2Nlc3ModGlsZSwgdGlsZU1hdHJpeC0+cmVu
ZGVyLmNhbGxiYWNrLCB0aWxlTWF0cml4LT5yZW5kZXIuZGF0YSk7CiAgICAgICAgIGlmICh0aWxl
LT52aXNpYmxlKSB7CiAgICAgICAgICAgICBld2tfdGlsZV91cGRhdGVzX2NsZWFyKHRpbGUpOwot
ICAgICAgICAgICAgdGlsZU1hdHJpeC0+dXBkYXRlcyA9IGVpbmFfbGlzdF9yZW1vdmVfbGlzdCh0
aWxlTWF0cml4LT51cGRhdGVzLCBsKTsKKyAgICAgICAgICAgIHRpbGVNYXRyaXgtPnVwZGF0ZXMg
PSBlaW5hX2xpc3RfcmVtb3ZlX2xpc3QodGlsZU1hdHJpeC0+dXBkYXRlcywgbGlzdCk7CiAgICAg
ICAgIH0KICAgICB9CiB9CkBAIC01NTksNyArNTU5LDcgQEAgdm9pZCBld2tfdGlsZV9tYXRyaXhf
dXBkYXRlc19jbGVhcihFd2tfVGlsZV9NYXRyaXgqIHRpbGVNYXRyaXgpCiAvLyByZW1vdmUgbWUg
bGF0ZXIhCiB2b2lkIGV3a190aWxlX21hdHJpeF9kYmcoY29uc3QgRXdrX1RpbGVfTWF0cml4KiB0
aWxlTWF0cml4KQogewotICAgIEVpbmFfSXRlcmF0b3IqIGl0ID0gZWluYV9tYXRyaXhzcGFyc2Vf
aXRlcmF0b3JfY29tcGxldGVfbmV3KHRpbGVNYXRyaXgtPm1hdHJpeCk7CisgICAgRWluYV9JdGVy
YXRvciogaXRlcmF0b3IgPSBlaW5hX21hdHJpeHNwYXJzZV9pdGVyYXRvcl9jb21wbGV0ZV9uZXco
dGlsZU1hdHJpeC0+bWF0cml4KTsKICAgICBFaW5hX01hdHJpeHNwYXJzZV9DZWxsKiBjZWxsOwog
ICAgIEVpbmFfQm9vbCBsYXN0X2VtcHR5ID0gRUlOQV9GQUxTRTsKIApAQCAtNTc0LDkgKzU3NCw5
IEBAIHZvaWQgZXdrX3RpbGVfbWF0cml4X2RiZyhjb25zdCBFd2tfVGlsZV9NYXRyaXgqIHRpbGVN
YXRyaXgpCiAgICAgcHJpbnRmKCJFd2tfVGlsZSBNYXRyaXg6XG4iKTsKICNlbmRpZgogCi0gICAg
RUlOQV9JVEVSQVRPUl9GT1JFQUNIKGl0LCBjZWxsKSB7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcg
cm93LCBjb2w7Ci0gICAgICAgIGVpbmFfbWF0cml4c3BhcnNlX2NlbGxfcG9zaXRpb25fZ2V0KGNl
bGwsICZyb3csICZjb2wpOworICAgIEVJTkFfSVRFUkFUT1JfRk9SRUFDSChpdGVyYXRvciwgY2Vs
bCkgeworICAgICAgICB1bnNpZ25lZCBsb25nIHJvdywgY29sdW1uOworICAgICAgICBlaW5hX21h
dHJpeHNwYXJzZV9jZWxsX3Bvc2l0aW9uX2dldChjZWxsLCAmcm93LCAmY29sdW1uKTsKIAogICAg
ICAgICBFd2tfVGlsZSogdGlsZSA9IHN0YXRpY19jYXN0PEV3a19UaWxlKj4oZWluYV9tYXRyaXhz
cGFyc2VfY2VsbF9kYXRhX2dldChjZWxsKSk7CiAgICAgICAgIGlmICghdGlsZSkgewpAQCAtNTg0
LDIyICs1ODQsMjIgQEAgdm9pZCBld2tfdGlsZV9tYXRyaXhfZGJnKGNvbnN0IEV3a19UaWxlX01h
dHJpeCogdGlsZU1hdHJpeCkKICAgICAgICAgICAgICAgICBsYXN0X2VtcHR5ID0gRUlOQV9UUlVF
OwogICAgICAgICAgICAgICAgIHByaW50ZigiRW1wdHk6Iik7CiAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBwcmludGYoIiBbJWx1LCVsdV0iLCBjb2wsIHJvdyk7CisgICAgICAgICAgICBwcmlu
dGYoIiBbJWx1LCVsdV0iLCBjb2x1bW4sIHJvdyk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICBpZiAobGFzdF9lbXB0eSkgewogICAgICAgICAgICAgICAgIGxhc3RfZW1wdHkgPSBFSU5B
X0ZBTFNFOwogICAgICAgICAgICAgICAgIHByaW50ZigiXG4iKTsKICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIHByaW50ZigiJTNsdSwlM2x1ICUxMHA6IiwgY29sLCByb3csIHRpbGUpOworICAg
ICAgICAgICAgcHJpbnRmKCIlM2x1LCUzbHUgJTEwcDoiLCBjb2x1bW4sIHJvdywgdGlsZSk7CiAg
ICAgICAgICAgICBwcmludGYoIiBbJTNsdSwlM2x1ICsgJWR4JWQgQCAlMC4zZl0lYyIsIHRpbGUt
PmNvbCwgdGlsZS0+cm93LCB0aWxlLT53aWR0aCwgdGlsZS0+aGVpZ2h0LCB0aWxlLT56b29tLCB0
aWxlLT52aXNpYmxlID8gJyonIDogJyAnKTsKICAgICAgICAgICAgIHByaW50ZigiXG4iKTsKICAg
ICAgICAgfQogICAgIH0KICAgICBpZiAobGFzdF9lbXB0eSkKICAgICAgICAgcHJpbnRmKCJcbiIp
OwotICAgIGVpbmFfaXRlcmF0b3JfZnJlZShpdCk7CisgICAgZWluYV9pdGVyYXRvcl9mcmVlKGl0
ZXJhdG9yKTsKIAotICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9kYmcodGlsZU1hdHJpeC0+dHVj
KTsKKyAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfZGJnKHRpbGVNYXRyaXgtPnRpbGllVW51c2Vk
Q2FjaGUpOwogfQogCiAvKioKQEAgLTYxNSw3ICs2MTUsNyBAQCB2b2lkIGV3a190aWxlX21hdHJp
eF9mcmVlemUoRXdrX1RpbGVfTWF0cml4KiB0aWxlTWF0cml4KQogewogICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOKHRpbGVNYXRyaXgpOwogICAgIGlmICghdGlsZU1hdHJpeC0+ZnJvemVu
KQotICAgICAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfZnJlZXplKHRpbGVNYXRyaXgtPnR1Yyk7
CisgICAgICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9mcmVlemUodGlsZU1hdHJpeC0+dGlsaWVV
bnVzZWRDYWNoZSk7CiAgICAgdGlsZU1hdHJpeC0+ZnJvemVuKys7CiB9CiAKQEAgLTYzNSw1ICs2
MzUsNSBAQCB2b2lkIGV3a190aWxlX21hdHJpeF90aGF3KEV3a19UaWxlX01hdHJpeCogdGlsZU1h
dHJpeCkKIAogICAgIHRpbGVNYXRyaXgtPmZyb3plbi0tOwogICAgIGlmICghdGlsZU1hdHJpeC0+
ZnJvemVuKQotICAgICAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfdGhhdyh0aWxlTWF0cml4LT50
dWMpOworICAgICAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfdGhhdyh0aWxlTWF0cml4LT50aWxp
ZVVudXNlZENhY2hlKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tf
dGlsZWRfbW9kZWwuY3BwIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a190aWxlZF9tb2RlbC5j
cHAKaW5kZXggMjA5YjBjMzlmMTY3OGVhYjEzODI5YjY1OGE1YzM3YjlhMDQwYWUzZS4uZGQ1ZjBk
NWE4MGNhNTQzNDQyMDQyZGRkOWE3NmFjNjNjMGEyNDc1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9lZmwvZXdrL2V3a190aWxlZF9tb2RlbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9lZmwv
ZXdrL2V3a190aWxlZF9tb2RlbC5jcHAKQEAgLTE0OSw1OSArMTQ5LDU5IEBAIHZvaWQgZXdrX3Rp
bGVfYWNjb3VudGluZ19kYmcoKQogCiBzdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlX3BhaW50
X3JnYjg4OChFd2tfVGlsZSogdGlsZSwgdWludDhfdCByZWQsIHVpbnQ4X3QgZ3JlZW4sIHVpbnQ4
X3QgYmx1ZSkKIHsKLSAgICB1aW50MzJfdCBjMSA9IDB4ZmYwMDAwMDAgfCAoKHVpbnQzMl90KXJl
ZCA8PCAxNikgfCAoKHVpbnQzMl90KWdyZWVuIDw8IDgpIHwgYmx1ZTsKLSAgICB1aW50MzJfdCBj
MiA9ICgodWludDY0X3QpYzEgPDwgMzIpIHwgYzE7CisgICAgdWludDMyX3QgY29sb3IxID0gMHhm
ZjAwMDAwMCB8ICgodWludDMyX3QpcmVkIDw8IDE2KSB8ICgodWludDMyX3QpZ3JlZW4gPDwgOCkg
fCBibHVlOworICAgIHVpbnQzMl90IGNvbG9yMiA9ICgodWludDY0X3QpY29sb3IxIDw8IDMyKSB8
IGNvbG9yMTsKIAogICAgIHVpbnQ2NF90KiBkc3Q2NCA9ICh1aW50NjRfdCopdGlsZS0+cGl4ZWxz
OwogICAgIHVpbnQ2NF90KiBkc3Q2NF9lbmQgPSBkc3Q2NCArICgodGlsZS0+Ynl0ZXMgLyA4KSAm
IH43KTsKICAgICBmb3IgKDsgZHN0NjQgPCBkc3Q2NF9lbmQ7IGRzdDY0ICs9IDgpIHsKICAgICAg
ICAgLyogVE9ETzogQVJNIGFkZCBwbGQgb3IgTkVPTiBpbnN0cnVjdGlvbnMgKi8KLSAgICAgICAg
ZHN0NjRbMF0gPSBjMjsKLSAgICAgICAgZHN0NjRbMV0gPSBjMjsKLSAgICAgICAgZHN0NjRbMl0g
PSBjMjsKLSAgICAgICAgZHN0NjRbM10gPSBjMjsKLSAgICAgICAgZHN0NjRbNF0gPSBjMjsKLSAg
ICAgICAgZHN0NjRbNV0gPSBjMjsKLSAgICAgICAgZHN0NjRbNl0gPSBjMjsKLSAgICAgICAgZHN0
NjRbN10gPSBjMjsKKyAgICAgICAgZHN0NjRbMF0gPSBjb2xvcjI7CisgICAgICAgIGRzdDY0WzFd
ID0gY29sb3IyOworICAgICAgICBkc3Q2NFsyXSA9IGNvbG9yMjsKKyAgICAgICAgZHN0NjRbM10g
PSBjb2xvcjI7CisgICAgICAgIGRzdDY0WzRdID0gY29sb3IyOworICAgICAgICBkc3Q2NFs1XSA9
IGNvbG9yMjsKKyAgICAgICAgZHN0NjRbNl0gPSBjb2xvcjI7CisgICAgICAgIGRzdDY0WzddID0g
Y29sb3IyOwogICAgIH0KIAogICAgIHVpbnQzMl90KiBkc3QzMiA9ICh1aW50MzJfdCopZHN0NjRf
ZW5kOwogICAgIHVpbnQzMl90KiBkc3QzMl9lbmQgPSAodWludDMyX3QqKSh0aWxlLT5waXhlbHMg
KyB0aWxlLT5ieXRlcyk7CiAgICAgZm9yICg7IGRzdDMyIDwgZHN0MzJfZW5kOyBkc3QzMisrKQot
ICAgICAgICAqZHN0MzIgPSBjMTsKKyAgICAgICAgKmRzdDMyID0gY29sb3IxOwogfQogCiBzdGF0
aWMgaW5saW5lIHZvaWQgX2V3a190aWxlX3BhaW50X3JnYjU2NShFd2tfVGlsZSogdGlsZSwgdWlu
dDhfdCByZWQsIHVpbnQ4X3QgZ3JlZW4sIHVpbnQ4X3QgYmx1ZSkKIHsKLSAgICB1aW50MTZfdCog
ZHN0MTYsICogZHN0MTZfZW5kLCBjMTsKLSAgICB1aW50NjRfdCogZHN0NjQsICogZHN0NjRfZW5k
LCBjMjsKKyAgICB1aW50MTZfdCogZHN0MTYsICogZHN0MTZfZW5kLCBjb2xvcjE7CisgICAgdWlu
dDY0X3QqIGRzdDY0LCAqIGRzdDY0X2VuZCwgY29sb3IyOwogCi0gICAgYzEgPSAoKCgocmVkID4+
IDMpICYgMHgxZikgPDwgMTEpIHwKKyAgICBjb2xvcjEgPSAoKCgocmVkID4+IDMpICYgMHgxZikg
PDwgMTEpIHwKICAgICAgICAgICAoKChncmVlbiA+PiAyKSAmIDB4M2YpIDw8IDUpIHwKICAgICAg
ICAgICAoKGJsdWUgPj4gMykgJiAweDFmKSk7CiAKLSAgICBjMiA9ICgoKHVpbnQ2NF90KWMxIDw8
IDQ4KSB8ICgodWludDY0X3QpYzEgPDwgMzIpIHwKLSAgICAgICAgICAoKHVpbnQ2NF90KWMxIDw8
IDE2KSB8IGMxKTsKKyAgICBjb2xvcjIgPSAoKCh1aW50NjRfdCljb2xvcjEgPDwgNDgpIHwgKCh1
aW50NjRfdCljb2xvcjEgPDwgMzIpIHwKKyAgICAgICAgICAoKHVpbnQ2NF90KWNvbG9yMSA8PCAx
NikgfCBjb2xvcjEpOwogCiAgICAgZHN0NjQgPSAodWludDY0X3QqKXRpbGUtPnBpeGVsczsKICAg
ICBkc3Q2NF9lbmQgPSBkc3Q2NCArICgodGlsZS0+Ynl0ZXMgLyA4KSAmIH43KTsKICAgICBmb3Ig
KDsgZHN0NjQgPCBkc3Q2NF9lbmQ7IGRzdDY0ICs9IDgpIHsKICAgICAgICAgLyogVE9ETzogQVJN
IGFkZCBwbGQgb3IgTkVPTiBpbnN0cnVjdGlvbnMgKi8KLSAgICAgICAgZHN0NjRbMF0gPSBjMjsK
LSAgICAgICAgZHN0NjRbMV0gPSBjMjsKLSAgICAgICAgZHN0NjRbMl0gPSBjMjsKLSAgICAgICAg
ZHN0NjRbM10gPSBjMjsKLSAgICAgICAgZHN0NjRbNF0gPSBjMjsKLSAgICAgICAgZHN0NjRbNV0g
PSBjMjsKLSAgICAgICAgZHN0NjRbNl0gPSBjMjsKLSAgICAgICAgZHN0NjRbN10gPSBjMjsKKyAg
ICAgICAgZHN0NjRbMF0gPSBjb2xvcjI7CisgICAgICAgIGRzdDY0WzFdID0gY29sb3IyOworICAg
ICAgICBkc3Q2NFsyXSA9IGNvbG9yMjsKKyAgICAgICAgZHN0NjRbM10gPSBjb2xvcjI7CisgICAg
ICAgIGRzdDY0WzRdID0gY29sb3IyOworICAgICAgICBkc3Q2NFs1XSA9IGNvbG9yMjsKKyAgICAg
ICAgZHN0NjRbNl0gPSBjb2xvcjI7CisgICAgICAgIGRzdDY0WzddID0gY29sb3IyOwogICAgIH0K
IAogICAgIGRzdDE2ID0gKHVpbnQxNl90Kilkc3QxNl9lbmQ7CiAgICAgZHN0MTZfZW5kID0gKHVp
bnQxNl90KikodGlsZS0+cGl4ZWxzICsgdGlsZS0+Ynl0ZXMpOwogICAgIGZvciAoOyBkc3QxNiA8
IGRzdDE2X2VuZDsgZHN0MTYrKykKLSAgICAgICAgKmRzdDE2ID0gYzE7CisgICAgICAgICpkc3Qx
NiA9IGNvbG9yMTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZV9wYWludChFd2tf
VGlsZSogdGlsZSwgdWludDhfdCByZWQsIHVpbnQ4X3QgZ3JlZW4sIHVpbnQ4X3QgYmx1ZSkKQEAg
LTIzMSwxNyArMjMxLDE3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVfcGFpbnQoRXdr
X1RpbGUqIHRpbGUsIHVpbnQ4X3QgcmVkLCB1aW50OF90IGdyZWVuLCB1CiAgKi8KIEV3a19UaWxl
KiBld2tfdGlsZV9uZXcoRXZhcyogZXZhcywgRXZhc19Db29yZCB3aWR0aCwgRXZhc19Db29yZCBo
ZWlnaHQsIGZsb2F0IHpvb20sIEV2YXNfQ29sb3JzcGFjZSBjb2xvclNwYWNlKQogewotICAgIEV2
YXNfQ29vcmQqIGVjOwotICAgIEV2YXNfQ29sb3JzcGFjZSogZWNzOwotICAgIGZsb2F0KiBmOwot
ICAgIHNpemVfdCogczsKKyAgICBFdmFzX0Nvb3JkKiBldmFzQ29vcmQ7CisgICAgRXZhc19Db2xv
cnNwYWNlKiBldmFzQ29sb3JTcGFjZTsKKyAgICBmbG9hdCogdGlsZVpvb207CisgICAgc2l6ZV90
KiB0aWxlU2l6ZTsKICAgICBFd2tfVGlsZSogdGlsZTsKICAgICB1bnNpZ25lZCBpbnQgYXJlYTsK
ICAgICBzaXplX3QgYnl0ZXM7CiAgICAgY2Fpcm9fZm9ybWF0X3QgZm9ybWF0OwogICAgIGNhaXJv
X3N0YXR1c190IHN0YXR1czsKICAgICBpbnQgc3RyaWRlOwotICAgIEVjb3JlX0V2YXMqIGVlOwor
ICAgIEVjb3JlX0V2YXMqIGVjb3JlRXZhczsKICAgICBjb25zdCBjaGFyKiBlbmdpbmU7CiAKICAg
ICBhcmVhID0gd2lkdGggKiBoZWlnaHQ7CkBAIC0yNjcsOCArMjY3LDggQEAgRXdrX1RpbGUqIGV3
a190aWxlX25ldyhFdmFzKiBldmFzLCBFdmFzX0Nvb3JkIHdpZHRoLCBFdmFzX0Nvb3JkIGhlaWdo
dCwgZmxvYXQgem8KIAogICAgIHRpbGUtPmltYWdlID0gZXZhc19vYmplY3RfaW1hZ2VfYWRkKGV2
YXMpOwogCi0gICAgZWUgPSBlY29yZV9ldmFzX2Vjb3JlX2V2YXNfZ2V0KGV2YXMpOwotICAgIGVu
Z2luZSA9IGVjb3JlX2V2YXNfZW5naW5lX25hbWVfZ2V0KGVlKTsKKyAgICBlY29yZUV2YXMgPSBl
Y29yZV9ldmFzX2Vjb3JlX2V2YXNfZ2V0KGV2YXMpOworICAgIGVuZ2luZSA9IGVjb3JlX2V2YXNf
ZW5naW5lX25hbWVfZ2V0KGVjb3JlRXZhcyk7CiAgICAgaWYgKGVuZ2luZSAmJiAhc3RyY21wKGVu
Z2luZSwgIm9wZW5nbF94MTEiKSkKICAgICAgICAgZXZhc19vYmplY3RfaW1hZ2VfY29udGVudF9o
aW50X3NldCh0aWxlLT5pbWFnZSwgRVZBU19JTUFHRV9DT05URU5UX0hJTlRfRFlOQU1JQyk7CiAK
QEAgLTI3OSwyMCArMjc5LDIwIEBAIEV3a19UaWxlKiBld2tfdGlsZV9uZXcoRXZhcyogZXZhcywg
RXZhc19Db29yZCB3aWR0aCwgRXZhc19Db29yZCBoZWlnaHQsIGZsb2F0IHpvCiAgICAgdGlsZS0+
c3RhdHMuYXJlYSA9IGFyZWE7CiAKICAgICAvKiB1Z2x5LCBidXQgbGV0J3MgYXZvaWQgYXQgYWxs
IGNvc3RzIGhhdmluZyB1c2VycyB0byBtb2RpZnkgdGhvc2UgKi8KLSAgICBlYyA9IChFdmFzX0Nv
b3JkKikmdGlsZS0+d2lkdGg7Ci0gICAgKmVjID0gd2lkdGg7CisgICAgZXZhc0Nvb3JkID0gKEV2
YXNfQ29vcmQqKSZ0aWxlLT53aWR0aDsKKyAgICAqZXZhc0Nvb3JkID0gd2lkdGg7CiAKLSAgICBl
YyA9IChFdmFzX0Nvb3JkKikmdGlsZS0+aGVpZ2h0OwotICAgICplYyA9IGhlaWdodDsKKyAgICBl
dmFzQ29vcmQgPSAoRXZhc19Db29yZCopJnRpbGUtPmhlaWdodDsKKyAgICAqZXZhc0Nvb3JkID0g
aGVpZ2h0OwogCi0gICAgZWNzID0gKEV2YXNfQ29sb3JzcGFjZSopJnRpbGUtPmNzcGFjZTsKLSAg
ICAqZWNzID0gY29sb3JTcGFjZTsKKyAgICBldmFzQ29sb3JTcGFjZSA9IChFdmFzX0NvbG9yc3Bh
Y2UqKSZ0aWxlLT5jc3BhY2U7CisgICAgKmV2YXNDb2xvclNwYWNlID0gY29sb3JTcGFjZTsKIAot
ICAgIGYgPSAoZmxvYXQqKSZ0aWxlLT56b29tOwotICAgICpmID0gem9vbTsKKyAgICB0aWxlWm9v
bSA9IChmbG9hdCopJnRpbGUtPnpvb207CisgICAgKnRpbGVab29tID0gem9vbTsKIAotICAgIHMg
PSAoc2l6ZV90KikmdGlsZS0+Ynl0ZXM7Ci0gICAgKnMgPSBieXRlczsKKyAgICB0aWxlU2l6ZSA9
IChzaXplX3QqKSZ0aWxlLT5ieXRlczsKKyAgICAqdGlsZVNpemUgPSBieXRlczsKIAogICAgIGV2
YXNfb2JqZWN0X2ltYWdlX3NpemVfc2V0KHRpbGUtPmltYWdlLCB0aWxlLT53aWR0aCwgdGlsZS0+
aGVpZ2h0KTsKICAgICBldmFzX29iamVjdF9pbWFnZV9jb2xvcnNwYWNlX3NldCh0aWxlLT5pbWFn
ZSwgdGlsZS0+Y3NwYWNlKTsKQEAgLTQ4MCw3ICs0ODAsNyBAQCBzdHJ1Y3QgX0V3a19UaWxlX1Vu
dXNlZF9DYWNoZV9FbnRyeSB7CiAgICAgRXdrX1RpbGUqIHRpbGU7CiAgICAgaW50IHdlaWdodDsK
ICAgICBzdHJ1Y3QgewotICAgICAgICB2b2lkICgqY2IpKHZvaWQqIGRhdGEsIEV3a19UaWxlKiB0
aWxlKTsKKyAgICAgICAgdm9pZCAoKmNhbGxiYWNrKSh2b2lkKiBkYXRhLCBFd2tfVGlsZSogdGls
ZSk7CiAgICAgICAgIHZvaWQqIGRhdGE7CiAgICAgfSB0aWxlX2ZyZWU7CiB9OwpAQCAtNDk2LDcg
KzQ5Niw3IEBAIHN0cnVjdCBfRXdrX1RpbGVfVW51c2VkX0NhY2hlIHsKICAgICAgICAgc2l6ZV90
IHVzZWQ7IC8qKjwgaW4gYnl0ZXMsIG1heWJlIG1vcmUgdGhhbiBtYXguICovCiAgICAgfSBtZW1v
cnk7CiAgICAgc3RydWN0IHsKLSAgICAgICAgRXZhc19Db29yZCB4LCB5LCB3LCBoOworICAgICAg
ICBFdmFzX0Nvb3JkIHgsIHksIHdpZHRoLCBoZWlnaHQ7CiAgICAgICAgIGZsb2F0IHpvb207CiAg
ICAgICAgIEVpbmFfQm9vbCBsb2NrZWQ7CiAgICAgfSBsb2NrZWQ7CkBAIC01NDAsOCArNTQwLDgg
QEAgdm9pZCBld2tfdGlsZV91bnVzZWRfY2FjaGVfbG9ja19hcmVhKEV3a19UaWxlX1VudXNlZF9D
YWNoZSogdGlsZVVudXNlZENhY2hlLCBFdmEKICAgICB0aWxlVW51c2VkQ2FjaGUtPmxvY2tlZC5s
b2NrZWQgPSBFSU5BX1RSVUU7CiAgICAgdGlsZVVudXNlZENhY2hlLT5sb2NrZWQueCA9IHg7CiAg
ICAgdGlsZVVudXNlZENhY2hlLT5sb2NrZWQueSA9IHk7Ci0gICAgdGlsZVVudXNlZENhY2hlLT5s
b2NrZWQudyA9IHdpZHRoOwotICAgIHRpbGVVbnVzZWRDYWNoZS0+bG9ja2VkLmggPSBoZWlnaHQ7
CisgICAgdGlsZVVudXNlZENhY2hlLT5sb2NrZWQud2lkdGggPSB3aWR0aDsKKyAgICB0aWxlVW51
c2VkQ2FjaGUtPmxvY2tlZC5oZWlnaHQgPSBoZWlnaHQ7CiAgICAgdGlsZVVudXNlZENhY2hlLT5s
b2NrZWQuem9vbSA9IHpvb207CiB9CiAKQEAgLTU5NCw3ICs1OTQsNyBAQCB2b2lkIGV3a190aWxl
X3VudXNlZF9jYWNoZV9jbGVhcihFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHRpbGVVbnVzZWRDYWNo
ZSkKICAgICB2b2lkKiBpdGVtOwogICAgIEVJTkFfTElTVF9GUkVFKHRpbGVVbnVzZWRDYWNoZS0+
ZW50cmllcy5saXN0LCBpdGVtKSB7CiAgICAgICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZV9FbnRy
eSogaXRyID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGVfVW51c2VkX0NhY2hlX0VudHJ5Kj4oaXRlbSk7
Ci0gICAgICAgIGl0ci0+dGlsZV9mcmVlLmNiKGl0ci0+dGlsZV9mcmVlLmRhdGEsIGl0ci0+dGls
ZSk7CisgICAgICAgIGl0ci0+dGlsZV9mcmVlLmNhbGxiYWNrKGl0ci0+dGlsZV9mcmVlLmRhdGEs
IGl0ci0+dGlsZSk7CiAgICAgICAgIGZyZWUoaXRyKTsKICAgICB9CiAKQEAgLTY1MCw3ICs2NTAs
NyBAQCBzaXplX3QgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3VzZWRfZ2V0KGNvbnN0IEV3a19UaWxl
X1VudXNlZF9DYWNoZSogdGlsZVVudXNlZENhYwogCiBzaXplX3QgZXdrX3RpbGVfdW51c2VkX2Nh
Y2hlX2ZsdXNoKEV3a19UaWxlX1VudXNlZF9DYWNoZSogdGlsZVVudXNlZENhY2hlLCBzaXplX3Qg
Ynl0ZXMpCiB7Ci0gICAgRWluYV9MaXN0KiBsLCAqIGxfbmV4dDsKKyAgICBFaW5hX0xpc3QqIGxp
c3QsICogbGlzdE5leHQ7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHRpbGVV
bnVzZWRDYWNoZSwgMCk7CiAgICAgc2l6ZV90IGRvbmU7CiAgICAgdW5zaWduZWQgaW50IGNvdW50
OwpAQCAtNjY4LDcgKzY2OCw3IEBAIHNpemVfdCBld2tfdGlsZV91bnVzZWRfY2FjaGVfZmx1c2go
RXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0aWxlVW51c2VkQ2FjaGUsIHNpemVfCiAgICAgdm9pZCog
aXRlbTsKICAgICBkb25lID0gMDsKICAgICBjb3VudCA9IDA7Ci0gICAgRUlOQV9MSVNUX0ZPUkVB
Q0hfU0FGRSh0aWxlVW51c2VkQ2FjaGUtPmVudHJpZXMubGlzdCwgbCwgbF9uZXh0LCBpdGVtKSB7
CisgICAgRUlOQV9MSVNUX0ZPUkVBQ0hfU0FGRSh0aWxlVW51c2VkQ2FjaGUtPmVudHJpZXMubGlz
dCwgbGlzdCwgbGlzdE5leHQsIGl0ZW0pIHsKICAgICAgICAgRXdrX1RpbGVfVW51c2VkX0NhY2hl
X0VudHJ5KiBpdHIgPSBzdGF0aWNfY2FzdDxFd2tfVGlsZV9VbnVzZWRfQ2FjaGVfRW50cnkqPihp
dGVtKTsKICAgICAgICAgRXdrX1RpbGUqIHRpbGUgPSBpdHItPnRpbGU7CiAgICAgICAgIGlmIChk
b25lID4gYnl0ZXMpCkBAIC02NzYsMTQgKzY3NiwxNCBAQCBzaXplX3QgZXdrX3RpbGVfdW51c2Vk
X2NhY2hlX2ZsdXNoKEV3a19UaWxlX1VudXNlZF9DYWNoZSogdGlsZVVudXNlZENhY2hlLCBzaXpl
XwogICAgICAgICBpZiAodGlsZVVudXNlZENhY2hlLT5sb2NrZWQubG9ja2VkCiAgICAgICAgICAg
ICAmJiB0aWxlLT54ICsgdGlsZS0+d2lkdGggPiB0aWxlVW51c2VkQ2FjaGUtPmxvY2tlZC54CiAg
ICAgICAgICAgICAmJiB0aWxlLT55ICsgdGlsZS0+aGVpZ2h0ID4gdGlsZVVudXNlZENhY2hlLT5s
b2NrZWQueQotICAgICAgICAgICAgJiYgdGlsZS0+eCA8IHRpbGVVbnVzZWRDYWNoZS0+bG9ja2Vk
LnggKyB0aWxlVW51c2VkQ2FjaGUtPmxvY2tlZC53Ci0gICAgICAgICAgICAmJiB0aWxlLT55IDwg
dGlsZVVudXNlZENhY2hlLT5sb2NrZWQueSArIHRpbGVVbnVzZWRDYWNoZS0+bG9ja2VkLmgKKyAg
ICAgICAgICAgICYmIHRpbGUtPnggPCB0aWxlVW51c2VkQ2FjaGUtPmxvY2tlZC54ICsgdGlsZVVu
dXNlZENhY2hlLT5sb2NrZWQud2lkdGgKKyAgICAgICAgICAgICYmIHRpbGUtPnkgPCB0aWxlVW51
c2VkQ2FjaGUtPmxvY2tlZC55ICsgdGlsZVVudXNlZENhY2hlLT5sb2NrZWQuaGVpZ2h0CiAgICAg
ICAgICAgICAmJiB0aWxlLT56b29tID09IHRpbGVVbnVzZWRDYWNoZS0+bG9ja2VkLnpvb20pIHsK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIGRvbmUgKz0gc2l6ZW9m
KEV3a19UaWxlKSArIGl0ci0+dGlsZS0+Ynl0ZXM7Ci0gICAgICAgIGl0ci0+dGlsZV9mcmVlLmNi
KGl0ci0+dGlsZV9mcmVlLmRhdGEsIGl0ci0+dGlsZSk7Ci0gICAgICAgIHRpbGVVbnVzZWRDYWNo
ZS0+ZW50cmllcy5saXN0ID0gZWluYV9saXN0X3JlbW92ZV9saXN0KHRpbGVVbnVzZWRDYWNoZS0+
ZW50cmllcy5saXN0LCBsKTsKKyAgICAgICAgaXRyLT50aWxlX2ZyZWUuY2FsbGJhY2soaXRyLT50
aWxlX2ZyZWUuZGF0YSwgaXRyLT50aWxlKTsKKyAgICAgICAgdGlsZVVudXNlZENhY2hlLT5lbnRy
aWVzLmxpc3QgPSBlaW5hX2xpc3RfcmVtb3ZlX2xpc3QodGlsZVVudXNlZENhY2hlLT5lbnRyaWVz
Lmxpc3QsIGxpc3QpOwogICAgICAgICBmcmVlKGl0cik7CiAgICAgICAgIGNvdW50Kys7CiAgICAg
fQpAQCAtNzQzLDMxICs3NDMsMzEgQEAgdm9pZCBld2tfdGlsZV91bnVzZWRfY2FjaGVfdGhhdyhF
d2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHRpbGVVbnVzZWRDYWNoZSkKICAqIGV3a190aWxlX3VudXNl
ZF9jYWNoZV90aWxlX3B1dCgpLgogICoKICAqIEBwYXJhbSB0aWxlVW51c2VkQ2FjaGUgY2FjaGUg
b2YgdW51c2VkIHRpbGVzCi0gKiBAcGFyYW0gdCB0aGUgdGlsZSB0byBiZSByZW1vdmVkIGZyb20g
RXdrX1RpbGVfVW51c2VkX0NhY2hlLgorICogQHBhcmFtIHRpbGUgdGhlIHRpbGUgdG8gYmUgcmVt
b3ZlZCBmcm9tIEV3a19UaWxlX1VudXNlZF9DYWNoZS4KICAqCiAgKiBAcmV0dXJuICNFSU5BX1RS
VUUgb24gc3VjY2VzcywgI0VJTkFfRkFMU0Ugb3RoZXJ3aXNlLgogICovCiBFaW5hX0Jvb2wgZXdr
X3RpbGVfdW51c2VkX2NhY2hlX3RpbGVfZ2V0KEV3a19UaWxlX1VudXNlZF9DYWNoZSogdGlsZVVu
dXNlZENhY2hlLCBFd2tfVGlsZSogdGlsZSkKIHsKLSAgICBFaW5hX0xpc3QqIGUsICogbDsKKyAg
ICBFaW5hX0xpc3QqIGZvdW5kRW50cnksICppdGVyYXRlRW50cnk7CiAKICAgICB2b2lkKiBpdGVt
OwotICAgIGUgPSAwOwotICAgIEVJTkFfTElTVF9GT1JFQUNIKHRpbGVVbnVzZWRDYWNoZS0+ZW50
cmllcy5saXN0LCBsLCBpdGVtKSB7CisgICAgZm91bmRFbnRyeSA9IDA7CisgICAgRUlOQV9MSVNU
X0ZPUkVBQ0godGlsZVVudXNlZENhY2hlLT5lbnRyaWVzLmxpc3QsIGl0ZXJhdGVFbnRyeSwgaXRl
bSkgewogICAgICAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGVfRW50cnkqIGVudHJ5ID0gc3RhdGlj
X2Nhc3Q8RXdrX1RpbGVfVW51c2VkX0NhY2hlX0VudHJ5Kj4oaXRlbSk7CiAgICAgICAgIGlmIChl
bnRyeS0+dGlsZSA9PSB0aWxlKSB7Ci0gICAgICAgICAgICBlID0gbDsKKyAgICAgICAgICAgIGZv
dW5kRW50cnkgPSBpdGVyYXRlRW50cnk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQog
ICAgIH0KLSAgICBpZiAoIWUpIHsKKyAgICBpZiAoIWZvdW5kRW50cnkpIHsKICAgICAgICAgRVJS
KCJ0aWxlICVwIG5vdCBmb3VuZCBpbiBjYWNoZSAlcCIsIHRpbGUsIHRpbGVVbnVzZWRDYWNoZSk7
CiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwogICAgIH0KIAogICAgIHRpbGVVbnVzZWRDYWNo
ZS0+ZW50cmllcy5jb3VudC0tOwogICAgIHRpbGVVbnVzZWRDYWNoZS0+bWVtb3J5LnVzZWQgLT0g
c2l6ZW9mKEV3a19UaWxlKSArIHRpbGUtPmJ5dGVzOwotICAgIHRpbGVVbnVzZWRDYWNoZS0+ZW50
cmllcy5saXN0ID0gZWluYV9saXN0X3JlbW92ZV9saXN0KHRpbGVVbnVzZWRDYWNoZS0+ZW50cmll
cy5saXN0LCBlKTsKKyAgICB0aWxlVW51c2VkQ2FjaGUtPmVudHJpZXMubGlzdCA9IGVpbmFfbGlz
dF9yZW1vdmVfbGlzdCh0aWxlVW51c2VkQ2FjaGUtPmVudHJpZXMubGlzdCwgZm91bmRFbnRyeSk7
CiAgICAgZnJlZShpdGVtKTsKIAogICAgIHJldHVybiBFSU5BX1RSVUU7CkBAIC03OTUsMjkgKzc5
NSwyOSBAQCBFaW5hX0Jvb2wgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3RpbGVfZ2V0KEV3a19UaWxl
X1VudXNlZF9DYWNoZSogdGlsZVVudXNlZENhY2hlLAogICoKICAqIEBzZWUgZXdrX3RpbGVfdW51
c2VkX2NhY2hlX2F1dG9fZmx1c2goKQogICovCi1FaW5hX0Jvb2wgZXdrX3RpbGVfdW51c2VkX2Nh
Y2hlX3RpbGVfcHV0KEV3a19UaWxlX1VudXNlZF9DYWNoZSogdGlsZVVudXNlZENhY2hlLCBFd2tf
VGlsZSogdGlsZSwgdm9pZCAoKiB0aWxlX2ZyZWVfY2IpKHZvaWQqIGRhdGEsIEV3a19UaWxlKiB0
aWxlKSwgY29uc3Qgdm9pZCogZGF0YSkKK0VpbmFfQm9vbCBld2tfdGlsZV91bnVzZWRfY2FjaGVf
dGlsZV9wdXQoRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0aWxlVW51c2VkQ2FjaGUsIEV3a19UaWxl
KiB0aWxlLCB2b2lkICgqIHRpbGVGcmVlQ2IpKHZvaWQqIGRhdGEsIEV3a19UaWxlKiB0aWxlKSwg
Y29uc3Qgdm9pZCogZGF0YSkKIHsKLSAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGVfRW50cnkqIHVj
ZTsKKyAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGVfRW50cnkqIHVudXNlZENhY2hlRW50cnk7CiAK
ICAgICBpZiAodGlsZS0+dmlzaWJsZSkgewogICAgICAgICBFUlIoInRpbGU9JXAgaXMgbm90IHVu
dXNlZCAodmlzaWJsZT0lZCkiLCB0aWxlLCB0aWxlLT52aXNpYmxlKTsKICAgICAgICAgcmV0dXJu
IEVJTkFfRkFMU0U7CiAgICAgfQogCi0gICAgdWNlID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGVfVW51
c2VkX0NhY2hlX0VudHJ5Kj4obWFsbG9jKHNpemVvZihFd2tfVGlsZV9VbnVzZWRfQ2FjaGVfRW50
cnkpKSk7Ci0gICAgaWYgKCF1Y2UpCisgICAgdW51c2VkQ2FjaGVFbnRyeSA9IHN0YXRpY19jYXN0
PEV3a19UaWxlX1VudXNlZF9DYWNoZV9FbnRyeSo+KG1hbGxvYyhzaXplb2YoRXdrX1RpbGVfVW51
c2VkX0NhY2hlX0VudHJ5KSkpOworICAgIGlmICghdW51c2VkQ2FjaGVFbnRyeSkKICAgICAgICAg
cmV0dXJuIEVJTkFfRkFMU0U7CiAKLSAgICB0aWxlVW51c2VkQ2FjaGUtPmVudHJpZXMubGlzdCA9
IGVpbmFfbGlzdF9hcHBlbmQodGlsZVVudXNlZENhY2hlLT5lbnRyaWVzLmxpc3QsIHVjZSk7Cisg
ICAgdGlsZVVudXNlZENhY2hlLT5lbnRyaWVzLmxpc3QgPSBlaW5hX2xpc3RfYXBwZW5kKHRpbGVV
bnVzZWRDYWNoZS0+ZW50cmllcy5saXN0LCB1bnVzZWRDYWNoZUVudHJ5KTsKICAgICBpZiAoZWlu
YV9lcnJvcl9nZXQoKSkgewogICAgICAgICBFUlIoIkxpc3QgYWxsb2NhdGlvbiBmYWlsZWQiKTsK
ICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CiAgICAgfQogCi0gICAgdWNlLT50aWxlID0gdGls
ZTsKLSAgICB1Y2UtPndlaWdodCA9IDA7IC8qIGNhbGN1bGF0ZWQganVzdCBiZWZvcmUgc29ydCAq
LwotICAgIHVjZS0+dGlsZV9mcmVlLmNiID0gdGlsZV9mcmVlX2NiOwotICAgIHVjZS0+dGlsZV9m
cmVlLmRhdGEgPSAodm9pZCopZGF0YTsKKyAgICB1bnVzZWRDYWNoZUVudHJ5LT50aWxlID0gdGls
ZTsKKyAgICB1bnVzZWRDYWNoZUVudHJ5LT53ZWlnaHQgPSAwOyAvKiBjYWxjdWxhdGVkIGp1c3Qg
YmVmb3JlIHNvcnQgKi8KKyAgICB1bnVzZWRDYWNoZUVudHJ5LT50aWxlX2ZyZWUuY2FsbGJhY2sg
PSB0aWxlRnJlZUNiOworICAgIHVudXNlZENhY2hlRW50cnktPnRpbGVfZnJlZS5kYXRhID0gKHZv
aWQqKWRhdGE7CiAKICAgICB0aWxlVW51c2VkQ2FjaGUtPmVudHJpZXMuY291bnQrKzsKICAgICB0
aWxlVW51c2VkQ2FjaGUtPm1lbW9yeS51c2VkICs9IHNpemVvZihFd2tfVGlsZSkgKyB0aWxlLT5i
eXRlczsKQEAgLTgyOCwxMyArODI4LDEzIEBAIEVpbmFfQm9vbCBld2tfdGlsZV91bnVzZWRfY2Fj
aGVfdGlsZV9wdXQoRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0aWxlVW51c2VkQ2FjaGUsCiB2b2lk
IGV3a190aWxlX3VudXNlZF9jYWNoZV9kYmcoY29uc3QgRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0
aWxlVW51c2VkQ2FjaGUpCiB7CiAgICAgdm9pZCogaXRlbTsKLSAgICBFaW5hX0xpc3QqIGw7Cisg
ICAgRWluYV9MaXN0KiBsaXN0OwogICAgIGludCBjb3VudCA9IDA7CiAgICAgcHJpbnRmKCJDYWNo
ZSBvZiB1bnVzZWQgdGlsZXM6IGVudHJpZXM6ICV6dS8lenUsIG1lbW9yeTogJXp1LyV6dVxuIiwK
ICAgICAgICAgICAgdGlsZVVudXNlZENhY2hlLT5lbnRyaWVzLmNvdW50LCB0aWxlVW51c2VkQ2Fj
aGUtPmVudHJpZXMuYWxsb2NhdGVkLAogICAgICAgICAgICB0aWxlVW51c2VkQ2FjaGUtPm1lbW9y
eS51c2VkLCB0aWxlVW51c2VkQ2FjaGUtPm1lbW9yeS5tYXgpOwogCi0gICAgRUlOQV9MSVNUX0ZP
UkVBQ0godGlsZVVudXNlZENhY2hlLT5lbnRyaWVzLmxpc3QsIGwsIGl0ZW0pIHsKKyAgICBFSU5B
X0xJU1RfRk9SRUFDSCh0aWxlVW51c2VkQ2FjaGUtPmVudHJpZXMubGlzdCwgbGlzdCwgaXRlbSkg
ewogICAgICAgICBjb25zdCBFd2tfVGlsZSogdGlsZSA9IHN0YXRpY19jYXN0PEV3a19UaWxlX1Vu
dXNlZF9DYWNoZV9FbnRyeSo+KGl0ZW0pLT50aWxlOwogICAgICAgICBwcmludGYoIiBbJTNsdSwl
M2x1ICsgJWR4JWQgQCAlMC4zZl0lYyIsCiAgICAgICAgICAgICAgICB0aWxlLT5jb2wsIHRpbGUt
PnJvdywgdGlsZS0+d2lkdGgsIHRpbGUtPmhlaWdodCwgdGlsZS0+em9vbSwKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC9l
d2svZXdrX3ZpZXcuY3BwCmluZGV4IGI5NGYwNjliYzY2MzU4Yzk5ZGZlZWFhN2NiZmYyOGFhMTZh
NWEzOGEuLjg0ZTQ5NTE0OGM4MzdkYTdhYjc2ZmU4MThiYjViMTk5ZTFjMzRhZjMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5jcHAKKysrIGIvU291cmNlL1dlYktp
dC9lZmwvZXdrL2V3a192aWV3LmNwcApAQCAtOTAsMTcgKzkwLDE3IEBAIHN0YXRpYyBjb25zdCBz
aXplX3QgRVdLX1ZJRVdfU0NST0xMU19TSVpFX01BWF9GUkVFID0gMzI7CiAgKi8KIHN0cnVjdCBf
RXdrX1ZpZXdfUHJpdmF0ZV9EYXRhIHsKICAgICBXZWJDb3JlOjpQYWdlKiBwYWdlOwotICAgIFdl
YkNvcmU6OlNldHRpbmdzKiBwYWdlX3NldHRpbmdzOwotICAgIFdlYkNvcmU6OkZyYW1lKiBtYWlu
X2ZyYW1lOwotICAgIFdlYkNvcmU6OlZpZXdwb3J0QXJndW1lbnRzIHZpZXdwb3J0X2FyZ3VtZW50
czsKKyAgICBXZWJDb3JlOjpTZXR0aW5ncyogcGFnZVNldHRpbmdzOworICAgIFdlYkNvcmU6OkZy
YW1lKiBtYWluRnJhbWU7CisgICAgV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHMgdmlld3BvcnRB
cmd1bWVudHM7CiAgICAgRXdrX0hpc3RvcnkqIGhpc3Rvcnk7CiAgICAgc3RydWN0IHsKICAgICAg
ICAgdm9pZCogY29udGV4dDsKICAgICAgICAgRXdrX1ZpZXdfUmVzb3VyY2VfSGFuZGxlcl9DYiBm
dW5jdGlvbjsKLSAgICB9IGN1c3RvbV9yZXNvdXJjZV9oYW5kbGVyOworICAgIH0gY3VzdG9tUmVz
b3VyY2VIYW5kbGVyOwogICAgIHN0cnVjdCB7CiAgICAgICAgIEV3a19NZW51IG1lbnU7Ci0gICAg
ICAgIFdlYkNvcmU6OlBvcHVwTWVudUNsaWVudCogbWVudV9jbGllbnQ7CisgICAgICAgIFdlYkNv
cmU6OlBvcHVwTWVudUNsaWVudCogbWVudUNsaWVudDsKICAgICB9IHBvcHVwOwogICAgIHN0cnVj
dCB7CiAgICAgICAgIEVpbmFfUmVjdGFuZ2xlKiBhcnJheTsKQEAgLTExNCw1MCArMTE0LDUwIEBA
IHN0cnVjdCBfRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhIHsKICAgICB9IHNjcm9sbHM7CiAgICAgdW5z
aWduZWQgaW50IGltaDsgLyoqPCBpbnB1dCBtZXRob2QgaGludHMgKi8KICAgICBzdHJ1Y3Qgewot
ICAgICAgICBFaW5hX0Jvb2wgdmlld19jbGVhcmVkIDogMTsKLSAgICAgICAgRWluYV9Cb29sIG5l
ZWRfdG91Y2hfZXZlbnRzIDogMTsKKyAgICAgICAgRWluYV9Cb29sIHZpZXdDbGVhcmVkIDogMTsK
KyAgICAgICAgRWluYV9Cb29sIG5lZWRUb3VjaEV2ZW50cyA6IDE7CiAgICAgfSBmbGFnczsKICAg
ICBzdHJ1Y3QgewotICAgICAgICBjb25zdCBjaGFyKiB1c2VyX2FnZW50OwotICAgICAgICBjb25z
dCBjaGFyKiB1c2VyX3N0eWxlc2hlZXQ7Ci0gICAgICAgIGNvbnN0IGNoYXIqIGVuY29kaW5nX2Rl
ZmF1bHQ7Ci0gICAgICAgIGNvbnN0IGNoYXIqIGVuY29kaW5nX2N1c3RvbTsKKyAgICAgICAgY29u
c3QgY2hhciogdXNlckFnZW50OworICAgICAgICBjb25zdCBjaGFyKiB1c2VyU3R5bGVzaGVldDsK
KyAgICAgICAgY29uc3QgY2hhciogZW5jb2RpbmdEZWZhdWx0OworICAgICAgICBjb25zdCBjaGFy
KiBlbmNvZGluZ0N1c3RvbTsKICAgICAgICAgY29uc3QgY2hhciogdGhlbWU7Ci0gICAgICAgIGNv
bnN0IGNoYXIqIGxvY2FsX3N0b3JhZ2VfZGF0YWJhc2VfcGF0aDsKLSAgICAgICAgaW50IGZvbnRf
bWluaW11bV9zaXplOwotICAgICAgICBpbnQgZm9udF9taW5pbXVtX2xvZ2ljYWxfc2l6ZTsKLSAg
ICAgICAgaW50IGZvbnRfZGVmYXVsdF9zaXplOwotICAgICAgICBpbnQgZm9udF9tb25vc3BhY2Vf
c2l6ZTsKLSAgICAgICAgY29uc3QgY2hhciogZm9udF9zdGFuZGFyZDsKLSAgICAgICAgY29uc3Qg
Y2hhciogZm9udF9jdXJzaXZlOwotICAgICAgICBjb25zdCBjaGFyKiBmb250X21vbm9zcGFjZTsK
LSAgICAgICAgY29uc3QgY2hhciogZm9udF9mYW50YXN5OwotICAgICAgICBjb25zdCBjaGFyKiBm
b250X3NlcmlmOwotICAgICAgICBjb25zdCBjaGFyKiBmb250X3NhbnNfc2VyaWY7Ci0gICAgICAg
IEVpbmFfQm9vbCBhdXRvX2xvYWRfaW1hZ2VzIDogMTsKLSAgICAgICAgRWluYV9Cb29sIGF1dG9f
c2hyaW5rX2ltYWdlcyA6IDE7Ci0gICAgICAgIEVpbmFfQm9vbCBlbmFibGVfYXV0b19yZXNpemVf
d2luZG93IDogMTsKLSAgICAgICAgRWluYV9Cb29sIGVuYWJsZV9kZXZlbG9wZXJfZXh0cmFzIDog
MTsKLSAgICAgICAgRWluYV9Cb29sIGVuYWJsZV9zY3JpcHRzIDogMTsKLSAgICAgICAgRWluYV9C
b29sIGVuYWJsZV9wbHVnaW5zIDogMTsKLSAgICAgICAgRWluYV9Cb29sIGVuYWJsZV9mcmFtZV9m
bGF0dGVuaW5nIDogMTsKLSAgICAgICAgRWluYV9Cb29sIGVuY29kaW5nX2RldGVjdG9yIDogMTsK
LSAgICAgICAgRWluYV9Cb29sIHNjcmlwdHNfd2luZG93X29wZW4gOiAxOwotICAgICAgICBFaW5h
X0Jvb2wgc2NyaXB0c19jYW5fY2xvc2Vfd2luZG93cyA6IDE7Ci0gICAgICAgIEVpbmFfQm9vbCBy
ZXNpemFibGVfdGV4dGFyZWFzIDogMTsKLSAgICAgICAgRWluYV9Cb29sIHByaXZhdGVfYnJvd3Np
bmcgOiAxOwotICAgICAgICBFaW5hX0Jvb2wgY2FyZXRfYnJvd3NpbmcgOiAxOwotICAgICAgICBF
aW5hX0Jvb2wgc3BhdGlhbF9uYXZpZ2F0aW9uIDogMTsKLSAgICAgICAgRWluYV9Cb29sIGxvY2Fs
X3N0b3JhZ2UgOiAxOwotICAgICAgICBFaW5hX0Jvb2wgb2ZmbGluZV9hcHBfY2FjaGUgOiAxOwot
ICAgICAgICBFaW5hX0Jvb2wgcGFnZV9jYWNoZSA6IDE7CisgICAgICAgIGNvbnN0IGNoYXIqIGxv
Y2FsU3RvcmFnZURhdGFiYXNlUGF0aDsKKyAgICAgICAgaW50IGZvbnRNaW5pbXVtU2l6ZTsKKyAg
ICAgICAgaW50IGZvbnRNaW5pbXVtTG9naWNhbFNpemU7CisgICAgICAgIGludCBmb250RGVmYXVs
dFNpemU7CisgICAgICAgIGludCBmb250TW9ub3NwYWNlU2l6ZTsKKyAgICAgICAgY29uc3QgY2hh
ciogZm9udFN0YW5kYXJkOworICAgICAgICBjb25zdCBjaGFyKiBmb250Q3Vyc2l2ZTsKKyAgICAg
ICAgY29uc3QgY2hhciogZm9udE1vbm9zcGFjZTsKKyAgICAgICAgY29uc3QgY2hhciogZm9udEZh
bnRhc3k7CisgICAgICAgIGNvbnN0IGNoYXIqIGZvbnRTZXJpZjsKKyAgICAgICAgY29uc3QgY2hh
ciogZm9udFNhbnNTZXJpZjsKKyAgICAgICAgRWluYV9Cb29sIGF1dG9Mb2FkSW1hZ2VzIDogMTsK
KyAgICAgICAgRWluYV9Cb29sIGF1dG9TaHJpbmtJbWFnZXMgOiAxOworICAgICAgICBFaW5hX0Jv
b2wgZW5hYmxlQXV0b1Jlc2l6ZVdpbmRvdyA6IDE7CisgICAgICAgIEVpbmFfQm9vbCBlbmFibGVE
ZXZlbG9wZXJFeHRyYXMgOiAxOworICAgICAgICBFaW5hX0Jvb2wgZW5hYmxlU2NyaXB0cyA6IDE7
CisgICAgICAgIEVpbmFfQm9vbCBlbmFibGVQbHVnaW5zIDogMTsKKyAgICAgICAgRWluYV9Cb29s
IGVuYWJsZUZyYW1lRmxhdHRlbmluZyA6IDE7CisgICAgICAgIEVpbmFfQm9vbCBlbmNvZGluZ0Rl
dGVjdG9yIDogMTsKKyAgICAgICAgRWluYV9Cb29sIHNjcmlwdHNXaW5kb3dPcGVuIDogMTsKKyAg
ICAgICAgRWluYV9Cb29sIHNjcmlwdHNDYW5DbG9zZVdpbmRvd3MgOiAxOworICAgICAgICBFaW5h
X0Jvb2wgcmVzaXphYmxlVGV4dGFyZWFzIDogMTsKKyAgICAgICAgRWluYV9Cb29sIHByaXZhdGVC
cm93c2luZyA6IDE7CisgICAgICAgIEVpbmFfQm9vbCBjYXJldEJyb3dzaW5nIDogMTsKKyAgICAg
ICAgRWluYV9Cb29sIHNwYXRpYWxOYXZpZ2F0aW9uIDogMTsKKyAgICAgICAgRWluYV9Cb29sIGxv
Y2FsU3RvcmFnZSA6IDE7CisgICAgICAgIEVpbmFfQm9vbCBvZmZsaW5lQXBwQ2FjaGUgOiAxOwor
ICAgICAgICBFaW5hX0Jvb2wgcGFnZUNhY2hlIDogMTsKICAgICAgICAgc3RydWN0IHsKLSAgICAg
ICAgICAgIGZsb2F0IG1pbl9zY2FsZTsKLSAgICAgICAgICAgIGZsb2F0IG1heF9zY2FsZTsKLSAg
ICAgICAgICAgIEVpbmFfQm9vbCB1c2VyX3NjYWxhYmxlIDogMTsKLSAgICAgICAgfSB6b29tX3Jh
bmdlOwotICAgICAgICBmbG9hdCBkZXZpY2VfcGl4ZWxfcmF0aW87Ci0gICAgICAgIGRvdWJsZSBk
b21fdGltZXJfaW50ZXJ2YWw7CisgICAgICAgICAgICBmbG9hdCBtaW5TY2FsZTsKKyAgICAgICAg
ICAgIGZsb2F0IG1heFNjYWxlOworICAgICAgICAgICAgRWluYV9Cb29sIHVzZXJTY2FsYWJsZSA6
IDE7CisgICAgICAgIH0gem9vbVJhbmdlOworICAgICAgICBmbG9hdCBkZXZpY2VQaXhlbFJhdGlv
OworICAgICAgICBkb3VibGUgZG9tVGltZXJJbnRlcnZhbDsKICAgICB9IHNldHRpbmdzOwogICAg
IHN0cnVjdCB7CiAgICAgICAgIHN0cnVjdCB7CkBAIC0xNzQsNyArMTc0LDcgQEAgc3RydWN0IF9F
d2tfVmlld19Qcml2YXRlX0RhdGEgewogICAgICAgICAgICAgRXZhc19Db29yZCB4LCB5OwogICAg
ICAgICB9IGNlbnRlcjsKICAgICAgICAgRWNvcmVfQW5pbWF0b3IqIGFuaW1hdG9yOwotICAgIH0g
YW5pbWF0ZWRfem9vbTsKKyAgICB9IGFuaW1hdGVkWm9vbTsKIH07CiAKICNpZm5kZWYgRVdLX1RZ
UEVfQ0hFQ0sKQEAgLTIxOSwxNCArMjE5LDE0IEBAIHN0cnVjdCBfRXdrX1ZpZXdfUHJpdmF0ZV9E
YXRhIHsKICAgICAgICAgcmV0dXJuIF9fVkFfQVJHU19fOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAogICAgIH0KIAotI2RlZmluZSBFV0tfVklFV19QUklWX0dFVChzZCwgcHRyKSAgICAg
ICAgICAgICAgXAotICAgIEV3a19WaWV3X1ByaXZhdGVfRGF0YSAqcHRyID0gc2QtPl9wcml2Cisj
ZGVmaW5lIEVXS19WSUVXX1BSSVZfR0VUKHNtYXJ0RGF0YSwgcHRyKSAgICAgICAgICAgICAgXAor
ICAgIEV3a19WaWV3X1ByaXZhdGVfRGF0YSAqcHRyID0gc21hcnREYXRhLT5fcHJpdgogCi0jZGVm
aW5lIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHRyLCAuLi4pICAgICAgICAgICAg
ICAgXAotICAgIEVXS19WSUVXX1BSSVZfR0VUKHNkLCBwdHIpOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyNkZWZpbmUgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0
RGF0YSwgcHRyLCAuLi4pICAgICAgICAgICAgICAgXAorICAgIEVXS19WSUVXX1BSSVZfR0VUKHNt
YXJ0RGF0YSwgcHRyKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgaWYg
KCFwdHIpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAogICAgICAgICBDUklUSUNBTCgibm8gcHJpdmF0ZSBkYXRhIGZvciBvYmplY3QgJXAgKCVzKSIs
ICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgc2QtPnNlbGYsIGV2YXNfb2JqZWN0X3R5cGVf
Z2V0KHNkLT5zZWxmKSk7ICAgICBcCisgICAgICAgICAgICAgICAgIHNtYXJ0RGF0YS0+c2VsZiwg
ZXZhc19vYmplY3RfdHlwZV9nZXQoc21hcnREYXRhLT5zZWxmKSk7ICAgICBcCiAgICAgICAgIHJl
dHVybiBfX1ZBX0FSR1NfXzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAog
ICAgIH0KIApAQCAtMjUyLDcgKzI1Miw3IEBAIHN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3Jl
cGFpbnRzX3Jlc2l6ZShFd2tfVmlld19Qcml2YXRlX0RhdGEqIHByaXYsIHNpemVfdCBzCiAKIHN0
YXRpYyB2b2lkIF9ld2tfdmlld19yZXBhaW50X2FkZChFd2tfVmlld19Qcml2YXRlX0RhdGEqIHBy
aXYsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5LCBFdmFzX0Nvb3JkIHdpZHRoLCBFdmFzX0Nv
b3JkIGhlaWdodCkKIHsKLSAgICBFaW5hX1JlY3RhbmdsZSogcjsKKyAgICBFaW5hX1JlY3Rhbmds
ZSogcmVjdDsKIAogICAgIC8vIGZwcmludGYoc3RkZXJyLCAiPj4+IHJlcGFpbnQgcmVxdWVzdGVk
OiAlZCwlZCslZHglZFxuIiwgeCwgeSwgdywgaCk7CiAgICAgaWYgKHByaXYtPnJlcGFpbnRzLmFs
bG9jYXRlZCA9PSBwcml2LT5yZXBhaW50cy5jb3VudCkgewpAQCAtMjY1LDEzICsyNjUsMTMgQEAg
c3RhdGljIHZvaWQgX2V3a192aWV3X3JlcGFpbnRfYWRkKEV3a19WaWV3X1ByaXZhdGVfRGF0YSog
cHJpdiwgRXZhc19Db29yZCB4LCBFdmEKICAgICAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICByID0gcHJpdi0+cmVwYWludHMuYXJyYXkgKyBwcml2LT5yZXBhaW50cy5jb3VudDsKKyAgICBy
ZWN0ID0gcHJpdi0+cmVwYWludHMuYXJyYXkgKyBwcml2LT5yZXBhaW50cy5jb3VudDsKICAgICBw
cml2LT5yZXBhaW50cy5jb3VudCsrOwogCi0gICAgci0+eCA9IHg7Ci0gICAgci0+eSA9IHk7Ci0g
ICAgci0+dyA9IHdpZHRoOwotICAgIHItPmggPSBoZWlnaHQ7CisgICAgcmVjdC0+eCA9IHg7Cisg
ICAgcmVjdC0+eSA9IHk7CisgICAgcmVjdC0+dyA9IHdpZHRoOworICAgIHJlY3QtPmggPSBoZWln
aHQ7CiAKICAgICBEQkcoImFkZCByZXBhaW50ICVkLCAlZCslZHglZCIsIHgsIHksIHdpZHRoLCBo
ZWlnaHQpOwogfQpAQCAtMjk2LDI5ICsyOTYsMjkgQEAgc3RhdGljIEVpbmFfQm9vbCBfZXdrX3Zp
ZXdfc2Nyb2xsc19yZXNpemUoRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKiBwcml2LCBzaXplX3Qgc2kK
ICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi1zdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc2Nyb2xs
X2FkZChFd2tfVmlld19Qcml2YXRlX0RhdGEqIHByaXYsIEV2YXNfQ29vcmQgZHgsIEV2YXNfQ29v
cmQgZHksIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5LCBFdmFzX0Nvb3JkIHdpZHRoLCBFdmFz
X0Nvb3JkIGhlaWdodCwgRWluYV9Cb29sIG1haW5TY3JvbGwpCitzdGF0aWMgdm9pZCBfZXdrX3Zp
ZXdfc2Nyb2xsX2FkZChFd2tfVmlld19Qcml2YXRlX0RhdGEqIHByaXYsIEV2YXNfQ29vcmQgZGVs
dGFYLCBFdmFzX0Nvb3JkIGRlbHRhWSwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHksIEV2YXNf
Q29vcmQgd2lkdGgsIEV2YXNfQ29vcmQgaGVpZ2h0LCBFaW5hX0Jvb2wgbWFpblNjcm9sbCkKIHsK
LSAgICBFd2tfU2Nyb2xsX1JlcXVlc3QqIHI7Ci0gICAgRXdrX1Njcm9sbF9SZXF1ZXN0KiByX2Vu
ZDsKKyAgICBFd2tfU2Nyb2xsX1JlcXVlc3QqIHJlY3Q7CisgICAgRXdrX1Njcm9sbF9SZXF1ZXN0
KiByZWN0X2VuZDsKICAgICBFdmFzX0Nvb3JkIHgyID0geCArIHdpZHRoLCB5MiA9IHkgKyBoZWln
aHQ7CiAKLSAgICByID0gcHJpdi0+c2Nyb2xscy5hcnJheTsKLSAgICByX2VuZCA9IHIgKyBwcml2
LT5zY3JvbGxzLmNvdW50OwotICAgIGZvciAoOyByIDwgcl9lbmQ7IHIrKykgewotICAgICAgICBp
ZiAoci0+eCA9PSB4ICYmIHItPnkgPT0geSAmJiByLT53ID09IHdpZHRoICYmIHItPmggPT0gaGVp
Z2h0KSB7CisgICAgcmVjdCA9IHByaXYtPnNjcm9sbHMuYXJyYXk7CisgICAgcmVjdF9lbmQgPSBy
ZWN0ICsgcHJpdi0+c2Nyb2xscy5jb3VudDsKKyAgICBmb3IgKDsgcmVjdCA8IHJlY3RfZW5kOyBy
ZWN0KyspIHsKKyAgICAgICAgaWYgKHJlY3QtPnggPT0geCAmJiByZWN0LT55ID09IHkgJiYgcmVj
dC0+dyA9PSB3aWR0aCAmJiByZWN0LT5oID09IGhlaWdodCkgewogICAgICAgICAgICAgREJHKCJy
ZWdpb24gYWxyZWFkeSBzY3JvbGxlZCAlZCwlZCslZHglZCAlKzAzZCwlKzAzZCBhZGQgIgogICAg
ICAgICAgICAgICAgICIlKzAzZCwlKzAzZCIsCi0gICAgICAgICAgICAgICAgci0+eCwgci0+eSwg
ci0+dywgci0+aCwgci0+ZHgsIHItPmR5LCBkeCwgZHkpOwotICAgICAgICAgICAgci0+ZHggKz0g
ZHg7Ci0gICAgICAgICAgICByLT5keSArPSBkeTsKKyAgICAgICAgICAgICAgICByZWN0LT54LCBy
ZWN0LT55LCByZWN0LT53LCByZWN0LT5oLCByZWN0LT5keCwgcmVjdC0+ZHksIGRlbHRhWCwgZGVs
dGFZKTsKKyAgICAgICAgICAgIHJlY3QtPmR4ICs9IGRlbHRhWDsKKyAgICAgICAgICAgIHJlY3Qt
PmR5ICs9IGRlbHRhWTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBp
ZiAoKHggPD0gci0+eCAmJiB4MiA+PSByLT54MikgJiYgKHkgPD0gci0+eSAmJiB5MiA+PSByLT55
MikpIHsKKyAgICAgICAgaWYgKCh4IDw9IHJlY3QtPnggJiYgeDIgPj0gcmVjdC0+eDIpICYmICh5
IDw9IHJlY3QtPnkgJiYgeTIgPj0gcmVjdC0+eTIpKSB7CiAgICAgICAgICAgICBEQkcoIm9sZCB2
aWV3cG9ydCAoJWQsJWQrJWR4JWQgJSswM2QsJSswM2QpIHdhcyBzY3JvbGxlZCBpdHNlbGYsICIK
ICAgICAgICAgICAgICAgICAiYWRkICUrMDNkLCUrMDNkIiwKLSAgICAgICAgICAgICAgICByLT54
LCByLT55LCByLT53LCByLT5oLCByLT5keCwgci0+ZHksIGR4LCBkeSk7Ci0gICAgICAgICAgICBy
LT54ICs9IGR4OwotICAgICAgICAgICAgci0+eSArPSBkeTsKKyAgICAgICAgICAgICAgICByZWN0
LT54LCByZWN0LT55LCByZWN0LT53LCByZWN0LT5oLCByZWN0LT5keCwgcmVjdC0+ZHksIGRlbHRh
WCwgZGVsdGFZKTsKKyAgICAgICAgICAgIHJlY3QtPnggKz0gZGVsdGFYOworICAgICAgICAgICAg
cmVjdC0+eSArPSBkZWx0YVk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTMzMiwxOSArMzMyLDE5
IEBAIHN0YXRpYyB2b2lkIF9ld2tfdmlld19zY3JvbGxfYWRkKEV3a19WaWV3X1ByaXZhdGVfRGF0
YSogcHJpdiwgRXZhc19Db29yZCBkeCwgRXZhCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgciA9IHByaXYtPnNjcm9sbHMuYXJyYXkgKyBwcml2LT5zY3JvbGxzLmNvdW50OworICAg
IHJlY3QgPSBwcml2LT5zY3JvbGxzLmFycmF5ICsgcHJpdi0+c2Nyb2xscy5jb3VudDsKICAgICBw
cml2LT5zY3JvbGxzLmNvdW50Kys7CiAKLSAgICByLT54ID0geDsKLSAgICByLT55ID0geTsKLSAg
ICByLT53ID0gd2lkdGg7Ci0gICAgci0+aCA9IGhlaWdodDsKLSAgICByLT54MiA9IHgyOwotICAg
IHItPnkyID0geTI7Ci0gICAgci0+ZHggPSBkeDsKLSAgICByLT5keSA9IGR5OwotICAgIHItPm1h
aW5fc2Nyb2xsID0gbWFpblNjcm9sbDsKLSAgICBEQkcoImFkZCBzY3JvbGwgaW4gcmVnaW9uOiAl
ZCwgJWQrJWR4JWQgJSswM2QsICUrMDNkIiwgeCwgeSwgd2lkdGgsIGhlaWdodCwgZHgsIGR5KTsK
KyAgICByZWN0LT54ID0geDsKKyAgICByZWN0LT55ID0geTsKKyAgICByZWN0LT53ID0gd2lkdGg7
CisgICAgcmVjdC0+aCA9IGhlaWdodDsKKyAgICByZWN0LT54MiA9IHgyOworICAgIHJlY3QtPnky
ID0geTI7CisgICAgcmVjdC0+ZHggPSBkZWx0YVg7CisgICAgcmVjdC0+ZHkgPSBkZWx0YVk7Cisg
ICAgcmVjdC0+bWFpbl9zY3JvbGwgPSBtYWluU2Nyb2xsOworICAgIERCRygiYWRkIHNjcm9sbCBp
biByZWdpb246ICVkLCAlZCslZHglZCAlKzAzZCwgJSswM2QiLCB4LCB5LCB3aWR0aCwgaGVpZ2h0
LCBkZWx0YVgsIGRlbHRhWSk7CiAKICAgICBFaW5hX1JlY3RhbmdsZSogcHI7CiAgICAgRWluYV9S
ZWN0YW5nbGUqIHByX2VuZDsKQEAgLTM1Myw4ICszNTMsOCBAQCBzdGF0aWMgdm9pZCBfZXdrX3Zp
ZXdfc2Nyb2xsX2FkZChFd2tfVmlld19Qcml2YXRlX0RhdGEqIHByaXYsIEV2YXNfQ29vcmQgZHgs
IEV2YQogICAgIGNvdW50ID0gcHJpdi0+cmVwYWludHMuY291bnQ7CiAgICAgcHJfZW5kID0gcHIg
KyBjb3VudDsKICAgICBmb3IgKDsgcHIgPCBwcl9lbmQ7IHByKyspIHsKLSAgICAgICAgcHItPngg
Kz0gZHg7Ci0gICAgICAgIHByLT55ICs9IGR5OworICAgICAgICBwci0+eCArPSBkZWx0YVg7Cisg
ICAgICAgIHByLT55ICs9IGRlbHRhWTsKICAgICB9CiB9CiAKQEAgLTM4MiwxMiArMzgyLDEyIEBA
IHN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3NtYXJ0X2ZvY3VzX2luKEV3a19WaWV3X1NtYXJ0
X0RhdGEqIHNtYXJ0RGF0YSkKIHN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3NtYXJ0X2ZvY3Vz
X291dChFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEpCiB7CiAgICAgRVdLX1ZJRVdfUFJJ
Vl9HRVQoc21hcnREYXRhLCBwcml2KTsKLSAgICBXZWJDb3JlOjpGb2N1c0NvbnRyb2xsZXIqIGZj
ID0gcHJpdi0+cGFnZS0+Zm9jdXNDb250cm9sbGVyKCk7Ci0gICAgREJHKCJld2tWaWV3PSVwLCBm
Yz0lcCIsIHNtYXJ0RGF0YS0+c2VsZiwgZmMpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOX1ZBTChmYywgRUlOQV9GQUxTRSk7CisgICAgV2ViQ29yZTo6Rm9jdXNDb250cm9sbGVyKiBm
b2N1c0NvbnRyb2xsZXIgPSBwcml2LT5wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKTsKKyAgICBEQkco
ImV3a1ZpZXc9JXAsIGZjPSVwIiwgc21hcnREYXRhLT5zZWxmLCBmb2N1c0NvbnRyb2xsZXIpOwor
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChmb2N1c0NvbnRyb2xsZXIsIEVJTkFf
RkFMU0UpOwogCi0gICAgZmMtPnNldEFjdGl2ZShmYWxzZSk7Ci0gICAgZmMtPnNldEZvY3VzZWQo
ZmFsc2UpOworICAgIGZvY3VzQ29udHJvbGxlci0+c2V0QWN0aXZlKGZhbHNlKTsKKyAgICBmb2N1
c0NvbnRyb2xsZXItPnNldEZvY3VzZWQoZmFsc2UpOwogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9
CiAKQEAgLTQ1OCw5NyArNDU4LDk3IEBAIHN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3NtYXJ0
X3Nob3VsZF9pbnRlcnJ1cHRfamF2YXNjcmlwdChFd2tfVmlld19TbWFydF9EYXRhCiBzdGF0aWMg
RWluYV9Cb29sIF9ld2tfdmlld19zbWFydF9ydW5famF2YXNjcmlwdF9wcm9tcHQoRXdrX1ZpZXdf
U21hcnRfRGF0YSogc21hcnREYXRhLCBFdmFzX09iamVjdCogZnJhbWUsIGNvbnN0IGNoYXIqIG1l
c3NhZ2UsIGNvbnN0IGNoYXIqIGRlZmF1bHRWYWx1ZSwgY2hhcioqIHZhbHVlKQogewogICAgICp2
YWx1ZSA9IHN0cmR1cCgidGVzdCIpOwotICAgIEVpbmFfQm9vbCByZXQgPSBFSU5BX1RSVUU7Cisg
ICAgRWluYV9Cb29sIHJlc3VsdCA9IEVJTkFfVFJVRTsKICAgICBJTkYoImphdmFzY3JpcHQgcHJv
bXB0OlxuIgogICAgICAgICAiXHQgICAgICBtZXNzYWdlOiAlc1xuIgogICAgICAgICAiXHRkZWZh
dWx0IHZhbHVlOiAlc1xuIgogICAgICAgICAiXHRnaXZpbmcgYW5zd2VyOiAlc1xuIgotICAgICAg
ICAiXHQgICAgICAgYnV0dG9uOiAlcyIsIG1lc3NhZ2UsIGRlZmF1bHRWYWx1ZSwgKnZhbHVlLCBy
ZXQgPyAib2siIDogImNhbmNlbCIpOworICAgICAgICAiXHQgICAgICAgYnV0dG9uOiAlcyIsIG1l
c3NhZ2UsIGRlZmF1bHRWYWx1ZSwgKnZhbHVlLCByZXN1bHQgPyAib2siIDogImNhbmNlbCIpOwog
Ci0gICAgcmV0dXJuIHJldDsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAvLyBFdmVudCBIYW5k
bGluZyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8KIHN0YXRpYyB2b2lkIF9ld2tfdmlld19vbl9mb2N1c19pbih2b2lkKiBkYXRhLCBFdmFzKiBl
dmVudFR5cGUsIEV2YXNfT2JqZWN0KiBjYWxsYmFjaywgdm9pZCogZXZlbnRJbmZvKQogewotICAg
IEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0
YSo+KGRhdGEpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGkpOwotICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGktPmZvY3VzX2luKTsKLSAgICBzZC0+
YXBpLT5mb2N1c19pbihzZCk7CisgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhID0g
c3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEpOworICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+YXBpKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTihzbWFydERhdGEtPmFwaS0+Zm9jdXNfaW4pOworICAgIHNtYXJ0RGF0YS0+YXBpLT5m
b2N1c19pbihzbWFydERhdGEpOwogfQogCiBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfb25fZm9jdXNf
b3V0KHZvaWQqIGRhdGEsIEV2YXMqIGV2ZW50VHlwZSwgRXZhc19PYmplY3QqIGNhbGxiYWNrLCB2
b2lkKiBldmVudEluZm8pCiB7Ci0gICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QgPSBzdGF0aWNf
Y2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZGF0YSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk4oc2QtPmFwaSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFw
aS0+Zm9jdXNfb3V0KTsKLSAgICBzZC0+YXBpLT5mb2N1c19vdXQoc2QpOworICAgIEV3a19WaWV3
X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEq
PihkYXRhKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmFwaSk7
CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRhLT5hcGktPmZvY3VzX291
dCk7CisgICAgc21hcnREYXRhLT5hcGktPmZvY3VzX291dChzbWFydERhdGEpOwogfQogCiBzdGF0
aWMgdm9pZCBfZXdrX3ZpZXdfb25fbW91c2Vfd2hlZWwodm9pZCogZGF0YSwgRXZhcyogZXZlbnRU
eXBlLCBFdmFzX09iamVjdCogY2FsbGJhY2ssIHZvaWQqIGV2ZW50SW5mbykKIHsKLSAgICBFdmFz
X0V2ZW50X01vdXNlX1doZWVsKiBldiA9IHN0YXRpY19jYXN0PEV2YXNfRXZlbnRfTW91c2VfV2hl
ZWwqPihldmVudEluZm8pOwotICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0gc3RhdGljX2Nh
c3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOKHNkLT5hcGkpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGkt
Pm1vdXNlX3doZWVsKTsKLSAgICBzZC0+YXBpLT5tb3VzZV93aGVlbChzZCwgZXYpOworICAgIEV2
YXNfRXZlbnRfTW91c2VfV2hlZWwqIHdoZWVsRXZlbnQgPSBzdGF0aWNfY2FzdDxFdmFzX0V2ZW50
X01vdXNlX1doZWVsKj4oZXZlbnRJbmZvKTsKKyAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzbWFy
dERhdGEgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZGF0YSk7CisgICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRhLT5hcGkpOworICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+YXBpLT5tb3VzZV93aGVlbCk7CisgICAgc21hcnRE
YXRhLT5hcGktPm1vdXNlX3doZWVsKHNtYXJ0RGF0YSwgd2hlZWxFdmVudCk7CiB9CiAKIHN0YXRp
YyB2b2lkIF9ld2tfdmlld19vbl9tb3VzZV9kb3duKHZvaWQqIGRhdGEsIEV2YXMqIGV2ZW50VHlw
ZSwgRXZhc19PYmplY3QqIGNhbGxiYWNrLCB2b2lkKiBldmVudEluZm8pCiB7Ci0gICAgRXZhc19F
dmVudF9Nb3VzZV9Eb3duKiBldiA9IHN0YXRpY19jYXN0PEV2YXNfRXZlbnRfTW91c2VfRG93bio+
KGV2ZW50SW5mbyk7Ci0gICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QgPSBzdGF0aWNfY2FzdDxF
d2tfVmlld19TbWFydF9EYXRhKj4oZGF0YSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk4oc2QtPmFwaSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFwaS0+bW91
c2VfZG93bik7Ci0gICAgc2QtPmFwaS0+bW91c2VfZG93bihzZCwgZXYpOworICAgIEV2YXNfRXZl
bnRfTW91c2VfRG93biogZG93bkV2ZW50ID0gc3RhdGljX2Nhc3Q8RXZhc19FdmVudF9Nb3VzZV9E
b3duKj4oZXZlbnRJbmZvKTsKKyAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEgPSBz
dGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZGF0YSk7CisgICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk4oc21hcnREYXRhLT5hcGkpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOKHNtYXJ0RGF0YS0+YXBpLT5tb3VzZV9kb3duKTsKKyAgICBzbWFydERhdGEtPmFwaS0+
bW91c2VfZG93bihzbWFydERhdGEsIGRvd25FdmVudCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9ld2tf
dmlld19vbl9tb3VzZV91cCh2b2lkKiBkYXRhLCBFdmFzKiBldmVudFR5cGUsIEV2YXNfT2JqZWN0
KiBjYWxsYmFjaywgdm9pZCogZXZlbnRJbmZvKQogewotICAgIEV2YXNfRXZlbnRfTW91c2VfVXAq
IGV2ID0gc3RhdGljX2Nhc3Q8RXZhc19FdmVudF9Nb3VzZV9VcCo+KGV2ZW50SW5mbyk7Ci0gICAg
RXdrX1ZpZXdfU21hcnRfRGF0YSogc2QgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRh
Kj4oZGF0YSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFwaSk7Ci0gICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFwaS0+bW91c2VfdXApOwotICAgIHNkLT5h
cGktPm1vdXNlX3VwKHNkLCBldik7CisgICAgRXZhc19FdmVudF9Nb3VzZV9VcCogdXBFdmVudCA9
IHN0YXRpY19jYXN0PEV2YXNfRXZlbnRfTW91c2VfVXAqPihldmVudEluZm8pOworICAgIEV3a19W
aWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0Rh
dGEqPihkYXRhKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmFw
aSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRhLT5hcGktPm1vdXNl
X3VwKTsKKyAgICBzbWFydERhdGEtPmFwaS0+bW91c2VfdXAoc21hcnREYXRhLCB1cEV2ZW50KTsK
IH0KIAogc3RhdGljIHZvaWQgX2V3a192aWV3X29uX21vdXNlX21vdmUodm9pZCogZGF0YSwgRXZh
cyogZXZlbnRUeXBlLCBFdmFzX09iamVjdCogY2FsbGJhY2ssIHZvaWQqIGV2ZW50SW5mbykKIHsK
LSAgICBFdmFzX0V2ZW50X01vdXNlX01vdmUqIGV2ID0gc3RhdGljX2Nhc3Q8RXZhc19FdmVudF9N
b3VzZV9Nb3ZlKj4oZXZlbnRJbmZvKTsKLSAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzZCA9IHN0
YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihkYXRhKTsKLSAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTihzZC0+YXBpKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihz
ZC0+YXBpLT5tb3VzZV9tb3ZlKTsKLSAgICBzZC0+YXBpLT5tb3VzZV9tb3ZlKHNkLCBldik7Cisg
ICAgRXZhc19FdmVudF9Nb3VzZV9Nb3ZlKiBtb3ZlRXZlbnQgPSBzdGF0aWNfY2FzdDxFdmFzX0V2
ZW50X01vdXNlX01vdmUqPihldmVudEluZm8pOworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNt
YXJ0RGF0YSA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihkYXRhKTsKKyAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmFwaSk7CisgICAgRUlOQV9TQUZF
VFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRhLT5hcGktPm1vdXNlX21vdmUpOworICAgIHNtYXJ0
RGF0YS0+YXBpLT5tb3VzZV9tb3ZlKHNtYXJ0RGF0YSwgbW92ZUV2ZW50KTsKIH0KIAogc3RhdGlj
IHZvaWQgX2V3a192aWV3X29uX2tleV9kb3duKHZvaWQqIGRhdGEsIEV2YXMqIGV2ZW50VHlwZSwg
RXZhc19PYmplY3QqIGNhbGxiYWNrLCB2b2lkKiBldmVudEluZm8pCiB7Ci0gICAgRXZhc19FdmVu
dF9LZXlfRG93biogZXYgPSBzdGF0aWNfY2FzdDxFdmFzX0V2ZW50X0tleV9Eb3duKj4oZXZlbnRJ
bmZvKTsKLSAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzZCA9IHN0YXRpY19jYXN0PEV3a19WaWV3
X1NtYXJ0X0RhdGEqPihkYXRhKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+
YXBpKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpLT5rZXlfZG93bik7
Ci0gICAgc2QtPmFwaS0+a2V5X2Rvd24oc2QsIGV2KTsKKyAgICBFdmFzX0V2ZW50X0tleV9Eb3du
KiBkb3duRXZlbnQgPSBzdGF0aWNfY2FzdDxFdmFzX0V2ZW50X0tleV9Eb3duKj4oZXZlbnRJbmZv
KTsKKyAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEgPSBzdGF0aWNfY2FzdDxFd2tf
Vmlld19TbWFydF9EYXRhKj4oZGF0YSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4o
c21hcnREYXRhLT5hcGkpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0
YS0+YXBpLT5rZXlfZG93bik7CisgICAgc21hcnREYXRhLT5hcGktPmtleV9kb3duKHNtYXJ0RGF0
YSwgZG93bkV2ZW50KTsKIH0KIAogc3RhdGljIHZvaWQgX2V3a192aWV3X29uX2tleV91cCh2b2lk
KiBkYXRhLCBFdmFzKiBldmVudFR5cGUsIEV2YXNfT2JqZWN0KiBjYWxsYmFjaywgdm9pZCogZXZl
bnRJbmZvKQogewotICAgIEV2YXNfRXZlbnRfS2V5X1VwKiBldiA9IHN0YXRpY19jYXN0PEV2YXNf
RXZlbnRfS2V5X1VwKj4oZXZlbnRJbmZvKTsKLSAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzZCA9
IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihkYXRhKTsKLSAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
TihzZC0+YXBpLT5rZXlfdXApOwotICAgIHNkLT5hcGktPmtleV91cChzZCwgZXYpOworICAgIEV2
YXNfRXZlbnRfS2V5X1VwKiB1cEV2ZW50ID0gc3RhdGljX2Nhc3Q8RXZhc19FdmVudF9LZXlfVXAq
PihldmVudEluZm8pOworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IHN0YXRp
Y19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihkYXRhKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTihzbWFydERhdGEtPmFwaSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk4oc21hcnREYXRhLT5hcGktPmtleV91cCk7CisgICAgc21hcnREYXRhLT5hcGktPmtleV91cChz
bWFydERhdGEsIHVwRXZlbnQpOwogfQogCiBzdGF0aWMgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6
OkZyYW1lPiBfZXdrX3ZpZXdfY29yZV9mcmFtZV9uZXcoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21h
cnREYXRhLCBFd2tfVmlld19Qcml2YXRlX0RhdGEqIHByaXYsIFdlYkNvcmU6OkhUTUxGcmFtZU93
bmVyRWxlbWVudCogb3duZXIpCiB7Ci0gICAgV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRFZmwq
IGZsYyA9IG5ldyBXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEVmbChzbWFydERhdGEtPnNlbGYp
OwotICAgIGlmICghZmxjKSB7CisgICAgV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRFZmwqIGZy
YW1lTG9hZGVyQ2xpZW50ID0gbmV3IFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50RWZsKHNtYXJ0
RGF0YS0+c2VsZik7CisgICAgaWYgKCFmcmFtZUxvYWRlckNsaWVudCkgewogICAgICAgICBDUklU
SUNBTCgiQ291bGQgbm90IGNyZWF0ZSBmcmFtZSBsb2FkZXIgY2xpZW50LiIpOwogICAgICAgICBy
ZXR1cm4gMDsKICAgICB9Ci0gICAgZmxjLT5zZXRDdXN0b21Vc2VyQWdlbnQoU3RyaW5nOjpmcm9t
VVRGOChwcml2LT5zZXR0aW5ncy51c2VyX2FnZW50KSk7CisgICAgZnJhbWVMb2FkZXJDbGllbnQt
PnNldEN1c3RvbVVzZXJBZ2VudChTdHJpbmc6OmZyb21VVEY4KHByaXYtPnNldHRpbmdzLnVzZXJB
Z2VudCkpOwogCi0gICAgcmV0dXJuIFdlYkNvcmU6OkZyYW1lOjpjcmVhdGUocHJpdi0+cGFnZSwg
b3duZXIsIGZsYyk7CisgICAgcmV0dXJuIFdlYkNvcmU6OkZyYW1lOjpjcmVhdGUocHJpdi0+cGFn
ZSwgb3duZXIsIGZyYW1lTG9hZGVyQ2xpZW50KTsKIH0KIAogc3RhdGljIEV2YXNfU21hcnRfQ2xh
c3MgX3BhcmVudF9zYyA9IEVWQVNfU01BUlRfQ0xBU1NfSU5JVF9OVUxMOwpAQCAtNTU3LDcgKzU1
Nyw3IEBAIHN0YXRpYyBFd2tfVmlld19Qcml2YXRlX0RhdGEqIF9ld2tfdmlld19wcml2X25ldyhF
d2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEpCiB7CiAgICAgRXdrX1ZpZXdfUHJpdmF0ZV9E
YXRhKiBwcml2ID0KICAgICAgICAgc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKj4o
Y2FsbG9jKDEsIHNpemVvZihFd2tfVmlld19Qcml2YXRlX0RhdGEpKSk7Ci0gICAgQXRvbWljU3Ry
aW5nIHM7CisgICAgQXRvbWljU3RyaW5nIHN0cmluZzsKICAgICBXZWJDb3JlOjpLVVJMIHVybDsK
IAogICAgIGlmICghcHJpdikgewpAQCAtNTgwLDk1ICs1ODAsOTUgQEAgc3RhdGljIEV3a19WaWV3
X1ByaXZhdGVfRGF0YSogX2V3a192aWV3X3ByaXZfbmV3KEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNt
YXJ0RGF0YSkKICAgICAgICAgZ290byBlcnJvcl9wYWdlOwogICAgIH0KIAotICAgIHByaXYtPnBh
Z2Vfc2V0dGluZ3MgPSBwcml2LT5wYWdlLT5zZXR0aW5ncygpOwotICAgIGlmICghcHJpdi0+cGFn
ZV9zZXR0aW5ncykgeworICAgIHByaXYtPnBhZ2VTZXR0aW5ncyA9IHByaXYtPnBhZ2UtPnNldHRp
bmdzKCk7CisgICAgaWYgKCFwcml2LT5wYWdlU2V0dGluZ3MpIHsKICAgICAgICAgQ1JJVElDQUwo
IkNvdWxkIG5vdCBnZXQgcGFnZSBzZXR0aW5ncy4iKTsKICAgICAgICAgZ290byBlcnJvcl9zZXR0
aW5nczsKICAgICB9CiAKLSAgICBwcml2LT52aWV3cG9ydF9hcmd1bWVudHMud2lkdGggPSBXZWJD
b3JlOjpWaWV3cG9ydEFyZ3VtZW50czo6VmFsdWVBdXRvOwotICAgIHByaXYtPnZpZXdwb3J0X2Fy
Z3VtZW50cy5oZWlnaHQgPSBXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50czo6VmFsdWVBdXRvOwot
ICAgIHByaXYtPnZpZXdwb3J0X2FyZ3VtZW50cy5pbml0aWFsU2NhbGUgPSBXZWJDb3JlOjpWaWV3
cG9ydEFyZ3VtZW50czo6VmFsdWVBdXRvOwotICAgIHByaXYtPnZpZXdwb3J0X2FyZ3VtZW50cy5t
aW5pbXVtU2NhbGUgPSBXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50czo6VmFsdWVBdXRvOwotICAg
IHByaXYtPnZpZXdwb3J0X2FyZ3VtZW50cy5tYXhpbXVtU2NhbGUgPSBXZWJDb3JlOjpWaWV3cG9y
dEFyZ3VtZW50czo6VmFsdWVBdXRvOwotICAgIHByaXYtPnZpZXdwb3J0X2FyZ3VtZW50cy50YXJn
ZXREZW5zaXR5RHBpID0gV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHM6OlZhbHVlQXV0bzsKLSAg
ICBwcml2LT52aWV3cG9ydF9hcmd1bWVudHMudXNlclNjYWxhYmxlID0gRUlOQV9UUlVFOwotCi0g
ICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0TG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5KHRydWUp
OwotICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNldERlZmF1bHRUZXh0RW5jb2RpbmdOYW1lKCJp
c28tODg1OS0xIik7Ci0gICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0RGVmYXVsdEZpeGVkRm9u
dFNpemUoMTIpOwotICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNldERlZmF1bHRGb250U2l6ZSgx
Nik7Ci0gICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0U2VyaWZGb250RmFtaWx5KCJzZXJpZiIp
OwotICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNldEZpeGVkRm9udEZhbWlseSgibW9ub3R5cGUi
KTsKLSAgICBwcml2LT5wYWdlX3NldHRpbmdzLT5zZXRTYW5zU2VyaWZGb250RmFtaWx5KCJzYW5z
Iik7Ci0gICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0U3RhbmRhcmRGb250RmFtaWx5KCJzYW5z
Iik7Ci0gICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0SmF2YVNjcmlwdEVuYWJsZWQodHJ1ZSk7
Ci0gICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0UGx1Z2luc0VuYWJsZWQodHJ1ZSk7Ci0gICAg
cHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0TG9jYWxTdG9yYWdlRW5hYmxlZCh0cnVlKTsKLSAgICBw
cml2LT5wYWdlX3NldHRpbmdzLT5zZXRPZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZUVuYWJsZWQo
dHJ1ZSk7Ci0gICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0VXNlc1BhZ2VDYWNoZSh0cnVlKTsK
LSAgICBwcml2LT5wYWdlX3NldHRpbmdzLT5zZXRVc2VzRW5jb2RpbmdEZXRlY3RvcihmYWxzZSk7
Ci0KLSAgICB1cmwgPSBwcml2LT5wYWdlX3NldHRpbmdzLT51c2VyU3R5bGVTaGVldExvY2F0aW9u
KCk7Ci0gICAgcHJpdi0+c2V0dGluZ3MudXNlcl9zdHlsZXNoZWV0ID0gZWluYV9zdHJpbmdzaGFy
ZV9hZGQodXJsLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotCi0gICAgcHJpdi0+c2V0dGluZ3Mu
ZW5jb2RpbmdfZGVmYXVsdCA9IGVpbmFfc3RyaW5nc2hhcmVfYWRkCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAocHJpdi0+cGFnZV9zZXR0aW5ncy0+ZGVmYXVsdFRl
eHRFbmNvZGluZ05hbWUoKS51dGY4KCkuZGF0YSgpKTsKLSAgICBwcml2LT5zZXR0aW5ncy5lbmNv
ZGluZ19jdXN0b20gPSAwOwotCi0gICAgcyA9IHByaXYtPnBhZ2Vfc2V0dGluZ3MtPmxvY2FsU3Rv
cmFnZURhdGFiYXNlUGF0aCgpOwotICAgIHByaXYtPnNldHRpbmdzLmxvY2FsX3N0b3JhZ2VfZGF0
YWJhc2VfcGF0aCA9IGVpbmFfc3RyaW5nc2hhcmVfYWRkKHMuc3RyaW5nKCkudXRmOCgpLmRhdGEo
KSk7Ci0KLSAgICBwcml2LT5zZXR0aW5ncy5mb250X21pbmltdW1fc2l6ZSA9IHByaXYtPnBhZ2Vf
c2V0dGluZ3MtPm1pbmltdW1Gb250U2l6ZSgpOwotICAgIHByaXYtPnNldHRpbmdzLmZvbnRfbWlu
aW11bV9sb2dpY2FsX3NpemUgPSBwcml2LT5wYWdlX3NldHRpbmdzLT5taW5pbXVtTG9naWNhbEZv
bnRTaXplKCk7Ci0gICAgcHJpdi0+c2V0dGluZ3MuZm9udF9kZWZhdWx0X3NpemUgPSBwcml2LT5w
YWdlX3NldHRpbmdzLT5kZWZhdWx0Rm9udFNpemUoKTsKLSAgICBwcml2LT5zZXR0aW5ncy5mb250
X21vbm9zcGFjZV9zaXplID0gcHJpdi0+cGFnZV9zZXR0aW5ncy0+ZGVmYXVsdEZpeGVkRm9udFNp
emUoKTsKLQotICAgIHMgPSBwcml2LT5wYWdlX3NldHRpbmdzLT5zdGFuZGFyZEZvbnRGYW1pbHko
KTsKLSAgICBwcml2LT5zZXR0aW5ncy5mb250X3N0YW5kYXJkID0gZWluYV9zdHJpbmdzaGFyZV9h
ZGQocy5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLSAgICBzID0gcHJpdi0+cGFnZV9zZXR0aW5n
cy0+Y3Vyc2l2ZUZvbnRGYW1pbHkoKTsKLSAgICBwcml2LT5zZXR0aW5ncy5mb250X2N1cnNpdmUg
PSBlaW5hX3N0cmluZ3NoYXJlX2FkZChzLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotICAgIHMg
PSBwcml2LT5wYWdlX3NldHRpbmdzLT5maXhlZEZvbnRGYW1pbHkoKTsKLSAgICBwcml2LT5zZXR0
aW5ncy5mb250X21vbm9zcGFjZSA9IGVpbmFfc3RyaW5nc2hhcmVfYWRkKHMuc3RyaW5nKCkudXRm
OCgpLmRhdGEoKSk7Ci0gICAgcyA9IHByaXYtPnBhZ2Vfc2V0dGluZ3MtPmZhbnRhc3lGb250RmFt
aWx5KCk7Ci0gICAgcHJpdi0+c2V0dGluZ3MuZm9udF9mYW50YXN5ID0gZWluYV9zdHJpbmdzaGFy
ZV9hZGQocy5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLSAgICBzID0gcHJpdi0+cGFnZV9zZXR0
aW5ncy0+c2VyaWZGb250RmFtaWx5KCk7Ci0gICAgcHJpdi0+c2V0dGluZ3MuZm9udF9zZXJpZiA9
IGVpbmFfc3RyaW5nc2hhcmVfYWRkKHMuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgcyA9
IHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNhbnNTZXJpZkZvbnRGYW1pbHkoKTsKLSAgICBwcml2LT5z
ZXR0aW5ncy5mb250X3NhbnNfc2VyaWYgPSBlaW5hX3N0cmluZ3NoYXJlX2FkZChzLnN0cmluZygp
LnV0ZjgoKS5kYXRhKCkpOwotCi0gICAgcHJpdi0+c2V0dGluZ3MuYXV0b19sb2FkX2ltYWdlcyA9
IHByaXYtPnBhZ2Vfc2V0dGluZ3MtPmxvYWRzSW1hZ2VzQXV0b21hdGljYWxseSgpOwotICAgIHBy
aXYtPnNldHRpbmdzLmF1dG9fc2hyaW5rX2ltYWdlcyA9IHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNo
cmlua3NTdGFuZGFsb25lSW1hZ2VzVG9GaXQoKTsKLSAgICBwcml2LT5zZXR0aW5ncy5lbmFibGVf
YXV0b19yZXNpemVfd2luZG93ID0gRUlOQV9UUlVFOwotICAgIHByaXYtPnNldHRpbmdzLmVuYWJs
ZV9kZXZlbG9wZXJfZXh0cmFzID0gcHJpdi0+cGFnZV9zZXR0aW5ncy0+ZGV2ZWxvcGVyRXh0cmFz
RW5hYmxlZCgpOwotICAgIHByaXYtPnNldHRpbmdzLmVuYWJsZV9zY3JpcHRzID0gcHJpdi0+cGFn
ZV9zZXR0aW5ncy0+aXNKYXZhU2NyaXB0RW5hYmxlZCgpOwotICAgIHByaXYtPnNldHRpbmdzLmVu
YWJsZV9wbHVnaW5zID0gcHJpdi0+cGFnZV9zZXR0aW5ncy0+YXJlUGx1Z2luc0VuYWJsZWQoKTsK
LSAgICBwcml2LT5zZXR0aW5ncy5lbmFibGVfZnJhbWVfZmxhdHRlbmluZyA9IHByaXYtPnBhZ2Vf
c2V0dGluZ3MtPmZyYW1lRmxhdHRlbmluZ0VuYWJsZWQoKTsKLSAgICBwcml2LT5zZXR0aW5ncy5z
Y3JpcHRzX3dpbmRvd19vcGVuID0gcHJpdi0+cGFnZV9zZXR0aW5ncy0+amF2YVNjcmlwdENhbk9w
ZW5XaW5kb3dzQXV0b21hdGljYWxseSgpOwotICAgIHByaXYtPnNldHRpbmdzLnNjcmlwdHNfY2Fu
X2Nsb3NlX3dpbmRvd3MgPSBwcml2LT5wYWdlX3NldHRpbmdzLT5hbGxvd1NjcmlwdHNUb0Nsb3Nl
V2luZG93cygpOwotICAgIHByaXYtPnNldHRpbmdzLnJlc2l6YWJsZV90ZXh0YXJlYXMgPSBwcml2
LT5wYWdlX3NldHRpbmdzLT50ZXh0QXJlYXNBcmVSZXNpemFibGUoKTsKLSAgICBwcml2LT5zZXR0
aW5ncy5wcml2YXRlX2Jyb3dzaW5nID0gcHJpdi0+cGFnZV9zZXR0aW5ncy0+cHJpdmF0ZUJyb3dz
aW5nRW5hYmxlZCgpOwotICAgIHByaXYtPnNldHRpbmdzLmNhcmV0X2Jyb3dzaW5nID0gcHJpdi0+
cGFnZV9zZXR0aW5ncy0+Y2FyZXRCcm93c2luZ0VuYWJsZWQoKTsKLSAgICBwcml2LT5zZXR0aW5n
cy5zcGF0aWFsX25hdmlnYXRpb24gPSBwcml2LT5wYWdlX3NldHRpbmdzLT5pc1NwYXRpYWxOYXZp
Z2F0aW9uRW5hYmxlZCgpOwotICAgIHByaXYtPnNldHRpbmdzLmxvY2FsX3N0b3JhZ2UgPSBwcml2
LT5wYWdlX3NldHRpbmdzLT5sb2NhbFN0b3JhZ2VFbmFibGVkKCk7Ci0gICAgcHJpdi0+c2V0dGlu
Z3Mub2ZmbGluZV9hcHBfY2FjaGUgPSB0cnVlOyAvLyBYWFggbm8gZnVuY3Rpb24gdG8gcmVhZCBz
ZXR0aW5nOyB0aGlzIGtlZXBzIHRoZSBvcmlnaW5hbCBzZXR0aW5nCi0gICAgcHJpdi0+c2V0dGlu
Z3MucGFnZV9jYWNoZSA9IHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnVzZXNQYWdlQ2FjaGUoKTsKLSAg
ICBwcml2LT5zZXR0aW5ncy5lbmNvZGluZ19kZXRlY3RvciA9IHByaXYtPnBhZ2Vfc2V0dGluZ3Mt
PnVzZXNFbmNvZGluZ0RldGVjdG9yKCk7Ci0KLSAgICBwcml2LT5zZXR0aW5ncy51c2VyX2FnZW50
ID0gZXdrX3NldHRpbmdzX2RlZmF1bHRfdXNlcl9hZ2VudF9nZXQoKTsKKyAgICBwcml2LT52aWV3
cG9ydEFyZ3VtZW50cy53aWR0aCA9IFdlYkNvcmU6OlZpZXdwb3J0QXJndW1lbnRzOjpWYWx1ZUF1
dG87CisgICAgcHJpdi0+dmlld3BvcnRBcmd1bWVudHMuaGVpZ2h0ID0gV2ViQ29yZTo6Vmlld3Bv
cnRBcmd1bWVudHM6OlZhbHVlQXV0bzsKKyAgICBwcml2LT52aWV3cG9ydEFyZ3VtZW50cy5pbml0
aWFsU2NhbGUgPSBXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50czo6VmFsdWVBdXRvOworICAgIHBy
aXYtPnZpZXdwb3J0QXJndW1lbnRzLm1pbmltdW1TY2FsZSA9IFdlYkNvcmU6OlZpZXdwb3J0QXJn
dW1lbnRzOjpWYWx1ZUF1dG87CisgICAgcHJpdi0+dmlld3BvcnRBcmd1bWVudHMubWF4aW11bVNj
YWxlID0gV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHM6OlZhbHVlQXV0bzsKKyAgICBwcml2LT52
aWV3cG9ydEFyZ3VtZW50cy50YXJnZXREZW5zaXR5RHBpID0gV2ViQ29yZTo6Vmlld3BvcnRBcmd1
bWVudHM6OlZhbHVlQXV0bzsKKyAgICBwcml2LT52aWV3cG9ydEFyZ3VtZW50cy51c2VyU2NhbGFi
bGUgPSBFSU5BX1RSVUU7CisKKyAgICBwcml2LT5wYWdlU2V0dGluZ3MtPnNldExvYWRzSW1hZ2Vz
QXV0b21hdGljYWxseSh0cnVlKTsKKyAgICBwcml2LT5wYWdlU2V0dGluZ3MtPnNldERlZmF1bHRU
ZXh0RW5jb2RpbmdOYW1lKCJpc28tODg1OS0xIik7CisgICAgcHJpdi0+cGFnZVNldHRpbmdzLT5z
ZXREZWZhdWx0Rml4ZWRGb250U2l6ZSgxMik7CisgICAgcHJpdi0+cGFnZVNldHRpbmdzLT5zZXRE
ZWZhdWx0Rm9udFNpemUoMTYpOworICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0U2VyaWZGb250
RmFtaWx5KCJzZXJpZiIpOworICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0Rml4ZWRGb250RmFt
aWx5KCJtb25vdHlwZSIpOworICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0U2Fuc1NlcmlmRm9u
dEZhbWlseSgic2FucyIpOworICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0U3RhbmRhcmRGb250
RmFtaWx5KCJzYW5zIik7CisgICAgcHJpdi0+cGFnZVNldHRpbmdzLT5zZXRKYXZhU2NyaXB0RW5h
YmxlZCh0cnVlKTsKKyAgICBwcml2LT5wYWdlU2V0dGluZ3MtPnNldFBsdWdpbnNFbmFibGVkKHRy
dWUpOworICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0TG9jYWxTdG9yYWdlRW5hYmxlZCh0cnVl
KTsKKyAgICBwcml2LT5wYWdlU2V0dGluZ3MtPnNldE9mZmxpbmVXZWJBcHBsaWNhdGlvbkNhY2hl
RW5hYmxlZCh0cnVlKTsKKyAgICBwcml2LT5wYWdlU2V0dGluZ3MtPnNldFVzZXNQYWdlQ2FjaGUo
dHJ1ZSk7CisgICAgcHJpdi0+cGFnZVNldHRpbmdzLT5zZXRVc2VzRW5jb2RpbmdEZXRlY3Rvcihm
YWxzZSk7CisKKyAgICB1cmwgPSBwcml2LT5wYWdlU2V0dGluZ3MtPnVzZXJTdHlsZVNoZWV0TG9j
YXRpb24oKTsKKyAgICBwcml2LT5zZXR0aW5ncy51c2VyU3R5bGVzaGVldCA9IGVpbmFfc3RyaW5n
c2hhcmVfYWRkKHVybC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKworICAgIHByaXYtPnNldHRp
bmdzLmVuY29kaW5nRGVmYXVsdCA9IGVpbmFfc3RyaW5nc2hhcmVfYWRkCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocHJpdi0+cGFnZVNldHRpbmdzLT5kZWZhdWx0
VGV4dEVuY29kaW5nTmFtZSgpLnV0ZjgoKS5kYXRhKCkpOworICAgIHByaXYtPnNldHRpbmdzLmVu
Y29kaW5nQ3VzdG9tID0gMDsKKworICAgIHN0cmluZyA9IHByaXYtPnBhZ2VTZXR0aW5ncy0+bG9j
YWxTdG9yYWdlRGF0YWJhc2VQYXRoKCk7CisgICAgcHJpdi0+c2V0dGluZ3MubG9jYWxTdG9yYWdl
RGF0YWJhc2VQYXRoID0gZWluYV9zdHJpbmdzaGFyZV9hZGQoc3RyaW5nLnN0cmluZygpLnV0Zjgo
KS5kYXRhKCkpOworCisgICAgcHJpdi0+c2V0dGluZ3MuZm9udE1pbmltdW1TaXplID0gcHJpdi0+
cGFnZVNldHRpbmdzLT5taW5pbXVtRm9udFNpemUoKTsKKyAgICBwcml2LT5zZXR0aW5ncy5mb250
TWluaW11bUxvZ2ljYWxTaXplID0gcHJpdi0+cGFnZVNldHRpbmdzLT5taW5pbXVtTG9naWNhbEZv
bnRTaXplKCk7CisgICAgcHJpdi0+c2V0dGluZ3MuZm9udERlZmF1bHRTaXplID0gcHJpdi0+cGFn
ZVNldHRpbmdzLT5kZWZhdWx0Rm9udFNpemUoKTsKKyAgICBwcml2LT5zZXR0aW5ncy5mb250TW9u
b3NwYWNlU2l6ZSA9IHByaXYtPnBhZ2VTZXR0aW5ncy0+ZGVmYXVsdEZpeGVkRm9udFNpemUoKTsK
KworICAgIHN0cmluZyA9IHByaXYtPnBhZ2VTZXR0aW5ncy0+c3RhbmRhcmRGb250RmFtaWx5KCk7
CisgICAgcHJpdi0+c2V0dGluZ3MuZm9udFN0YW5kYXJkID0gZWluYV9zdHJpbmdzaGFyZV9hZGQo
c3RyaW5nLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgIHN0cmluZyA9IHByaXYtPnBhZ2VT
ZXR0aW5ncy0+Y3Vyc2l2ZUZvbnRGYW1pbHkoKTsKKyAgICBwcml2LT5zZXR0aW5ncy5mb250Q3Vy
c2l2ZSA9IGVpbmFfc3RyaW5nc2hhcmVfYWRkKHN0cmluZy5zdHJpbmcoKS51dGY4KCkuZGF0YSgp
KTsKKyAgICBzdHJpbmcgPSBwcml2LT5wYWdlU2V0dGluZ3MtPmZpeGVkRm9udEZhbWlseSgpOwor
ICAgIHByaXYtPnNldHRpbmdzLmZvbnRNb25vc3BhY2UgPSBlaW5hX3N0cmluZ3NoYXJlX2FkZChz
dHJpbmcuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgc3RyaW5nID0gcHJpdi0+cGFnZVNl
dHRpbmdzLT5mYW50YXN5Rm9udEZhbWlseSgpOworICAgIHByaXYtPnNldHRpbmdzLmZvbnRGYW50
YXN5ID0gZWluYV9zdHJpbmdzaGFyZV9hZGQoc3RyaW5nLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkp
OworICAgIHN0cmluZyA9IHByaXYtPnBhZ2VTZXR0aW5ncy0+c2VyaWZGb250RmFtaWx5KCk7Cisg
ICAgcHJpdi0+c2V0dGluZ3MuZm9udFNlcmlmID0gZWluYV9zdHJpbmdzaGFyZV9hZGQoc3RyaW5n
LnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgIHN0cmluZyA9IHByaXYtPnBhZ2VTZXR0aW5n
cy0+c2Fuc1NlcmlmRm9udEZhbWlseSgpOworICAgIHByaXYtPnNldHRpbmdzLmZvbnRTYW5zU2Vy
aWYgPSBlaW5hX3N0cmluZ3NoYXJlX2FkZChzdHJpbmcuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7
CisKKyAgICBwcml2LT5zZXR0aW5ncy5hdXRvTG9hZEltYWdlcyA9IHByaXYtPnBhZ2VTZXR0aW5n
cy0+bG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5KCk7CisgICAgcHJpdi0+c2V0dGluZ3MuYXV0b1No
cmlua0ltYWdlcyA9IHByaXYtPnBhZ2VTZXR0aW5ncy0+c2hyaW5rc1N0YW5kYWxvbmVJbWFnZXNU
b0ZpdCgpOworICAgIHByaXYtPnNldHRpbmdzLmVuYWJsZUF1dG9SZXNpemVXaW5kb3cgPSBFSU5B
X1RSVUU7CisgICAgcHJpdi0+c2V0dGluZ3MuZW5hYmxlRGV2ZWxvcGVyRXh0cmFzID0gcHJpdi0+
cGFnZVNldHRpbmdzLT5kZXZlbG9wZXJFeHRyYXNFbmFibGVkKCk7CisgICAgcHJpdi0+c2V0dGlu
Z3MuZW5hYmxlU2NyaXB0cyA9IHByaXYtPnBhZ2VTZXR0aW5ncy0+aXNKYXZhU2NyaXB0RW5hYmxl
ZCgpOworICAgIHByaXYtPnNldHRpbmdzLmVuYWJsZVBsdWdpbnMgPSBwcml2LT5wYWdlU2V0dGlu
Z3MtPmFyZVBsdWdpbnNFbmFibGVkKCk7CisgICAgcHJpdi0+c2V0dGluZ3MuZW5hYmxlRnJhbWVG
bGF0dGVuaW5nID0gcHJpdi0+cGFnZVNldHRpbmdzLT5mcmFtZUZsYXR0ZW5pbmdFbmFibGVkKCk7
CisgICAgcHJpdi0+c2V0dGluZ3Muc2NyaXB0c1dpbmRvd09wZW4gPSBwcml2LT5wYWdlU2V0dGlu
Z3MtPmphdmFTY3JpcHRDYW5PcGVuV2luZG93c0F1dG9tYXRpY2FsbHkoKTsKKyAgICBwcml2LT5z
ZXR0aW5ncy5zY3JpcHRzQ2FuQ2xvc2VXaW5kb3dzID0gcHJpdi0+cGFnZVNldHRpbmdzLT5hbGxv
d1NjcmlwdHNUb0Nsb3NlV2luZG93cygpOworICAgIHByaXYtPnNldHRpbmdzLnJlc2l6YWJsZVRl
eHRhcmVhcyA9IHByaXYtPnBhZ2VTZXR0aW5ncy0+dGV4dEFyZWFzQXJlUmVzaXphYmxlKCk7Cisg
ICAgcHJpdi0+c2V0dGluZ3MucHJpdmF0ZUJyb3dzaW5nID0gcHJpdi0+cGFnZVNldHRpbmdzLT5w
cml2YXRlQnJvd3NpbmdFbmFibGVkKCk7CisgICAgcHJpdi0+c2V0dGluZ3MuY2FyZXRCcm93c2lu
ZyA9IHByaXYtPnBhZ2VTZXR0aW5ncy0+Y2FyZXRCcm93c2luZ0VuYWJsZWQoKTsKKyAgICBwcml2
LT5zZXR0aW5ncy5zcGF0aWFsTmF2aWdhdGlvbiA9IHByaXYtPnBhZ2VTZXR0aW5ncy0+aXNTcGF0
aWFsTmF2aWdhdGlvbkVuYWJsZWQoKTsKKyAgICBwcml2LT5zZXR0aW5ncy5sb2NhbFN0b3JhZ2Ug
PSBwcml2LT5wYWdlU2V0dGluZ3MtPmxvY2FsU3RvcmFnZUVuYWJsZWQoKTsKKyAgICBwcml2LT5z
ZXR0aW5ncy5vZmZsaW5lQXBwQ2FjaGUgPSB0cnVlOyAvLyBYWFggbm8gZnVuY3Rpb24gdG8gcmVh
ZCBzZXR0aW5nOyB0aGlzIGtlZXBzIHRoZSBvcmlnaW5hbCBzZXR0aW5nCisgICAgcHJpdi0+c2V0
dGluZ3MucGFnZUNhY2hlID0gcHJpdi0+cGFnZVNldHRpbmdzLT51c2VzUGFnZUNhY2hlKCk7Cisg
ICAgcHJpdi0+c2V0dGluZ3MuZW5jb2RpbmdEZXRlY3RvciA9IHByaXYtPnBhZ2VTZXR0aW5ncy0+
dXNlc0VuY29kaW5nRGV0ZWN0b3IoKTsKKworICAgIHByaXYtPnNldHRpbmdzLnVzZXJBZ2VudCA9
IGV3a19zZXR0aW5nc19kZWZhdWx0X3VzZXJfYWdlbnRfZ2V0KCk7CiAKICAgICAvLyBTaW5jZSB0
aGVyZSdzIG5vIHNjYWxlIHNlcGFyYXRlZCBmcm9tIHpvb21pbmcgaW4gd2Via2l0LWVmbCwgdGhp
cyBmdW5jdGlvbmFsaXR5IG9mCiAgICAgLy8gdmlld3BvcnQgbWV0YSB0YWcgaXMgaW1wbGVtZW50
ZWQgdXNpbmcgem9vbS4gV2hlbiBzY2FsZSB6b29tIGlzIHN1cHBvcnRlZCBieSB3ZWJraXQtZWZs
LAogICAgIC8vIHRoaXMgZnVuY3Rpb25hbGl0eSB3aWxsIGJlIG1vZGlmaWVkIGJ5IHRoZSBzY2Fs
ZSB6b29tIHBhdGNoLgotICAgIHByaXYtPnNldHRpbmdzLnpvb21fcmFuZ2UubWluX3NjYWxlID0g
Wk9PTV9NSU47Ci0gICAgcHJpdi0+c2V0dGluZ3Muem9vbV9yYW5nZS5tYXhfc2NhbGUgPSBaT09N
X01BWDsKLSAgICBwcml2LT5zZXR0aW5ncy56b29tX3JhbmdlLnVzZXJfc2NhbGFibGUgPSBFSU5B
X1RSVUU7Ci0gICAgcHJpdi0+c2V0dGluZ3MuZGV2aWNlX3BpeGVsX3JhdGlvID0gREVWSUNFX1BJ
WEVMX1JBVElPOworICAgIHByaXYtPnNldHRpbmdzLnpvb21SYW5nZS5taW5TY2FsZSA9IFpPT01f
TUlOOworICAgIHByaXYtPnNldHRpbmdzLnpvb21SYW5nZS5tYXhTY2FsZSA9IFpPT01fTUFYOwor
ICAgIHByaXYtPnNldHRpbmdzLnpvb21SYW5nZS51c2VyU2NhbGFibGUgPSBFSU5BX1RSVUU7Cisg
ICAgcHJpdi0+c2V0dGluZ3MuZGV2aWNlUGl4ZWxSYXRpbyA9IERFVklDRV9QSVhFTF9SQVRJTzsK
IAotICAgIHByaXYtPnNldHRpbmdzLmRvbV90aW1lcl9pbnRlcnZhbCA9IHByaXYtPnBhZ2Vfc2V0
dGluZ3MtPmRlZmF1bHRNaW5ET01UaW1lckludGVydmFsKCk7CisgICAgcHJpdi0+c2V0dGluZ3Mu
ZG9tVGltZXJJbnRlcnZhbCA9IHByaXYtPnBhZ2VTZXR0aW5ncy0+ZGVmYXVsdE1pbkRPTVRpbWVy
SW50ZXJ2YWwoKTsKIAotICAgIHByaXYtPm1haW5fZnJhbWUgPSBfZXdrX3ZpZXdfY29yZV9mcmFt
ZV9uZXcoc21hcnREYXRhLCBwcml2LCAwKS5nZXQoKTsKLSAgICBpZiAoIXByaXYtPm1haW5fZnJh
bWUpIHsKKyAgICBwcml2LT5tYWluRnJhbWUgPSBfZXdrX3ZpZXdfY29yZV9mcmFtZV9uZXcoc21h
cnREYXRhLCBwcml2LCAwKS5nZXQoKTsKKyAgICBpZiAoIXByaXYtPm1haW5GcmFtZSkgewogICAg
ICAgICBDUklUSUNBTCgiQ291bGQgbm90IGNyZWF0ZSBtYWluIGZyYW1lLiIpOwogICAgICAgICBn
b3RvIGVycm9yX21haW5fZnJhbWU7CiAgICAgfQpAQCAtNzAxLDIwICs3MDEsMjAgQEAgc3RhdGlj
IHZvaWQgX2V3a192aWV3X3ByaXZfZGVsKEV3a19WaWV3X1ByaXZhdGVfRGF0YSogcHJpdikKICAg
ICBmcmVlKHByaXYtPnJlcGFpbnRzLmFycmF5KTsKICAgICBmcmVlKHByaXYtPnNjcm9sbHMuYXJy
YXkpOwogCi0gICAgZWluYV9zdHJpbmdzaGFyZV9kZWwocHJpdi0+c2V0dGluZ3MudXNlcl9hZ2Vu
dCk7Ci0gICAgZWluYV9zdHJpbmdzaGFyZV9kZWwocHJpdi0+c2V0dGluZ3MudXNlcl9zdHlsZXNo
ZWV0KTsKLSAgICBlaW5hX3N0cmluZ3NoYXJlX2RlbChwcml2LT5zZXR0aW5ncy5lbmNvZGluZ19k
ZWZhdWx0KTsKLSAgICBlaW5hX3N0cmluZ3NoYXJlX2RlbChwcml2LT5zZXR0aW5ncy5lbmNvZGlu
Z19jdXN0b20pOwotICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVsKHByaXYtPnNldHRpbmdzLmZvbnRf
c3RhbmRhcmQpOwotICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVsKHByaXYtPnNldHRpbmdzLmZvbnRf
Y3Vyc2l2ZSk7Ci0gICAgZWluYV9zdHJpbmdzaGFyZV9kZWwocHJpdi0+c2V0dGluZ3MuZm9udF9t
b25vc3BhY2UpOwotICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVsKHByaXYtPnNldHRpbmdzLmZvbnRf
ZmFudGFzeSk7Ci0gICAgZWluYV9zdHJpbmdzaGFyZV9kZWwocHJpdi0+c2V0dGluZ3MuZm9udF9z
ZXJpZik7Ci0gICAgZWluYV9zdHJpbmdzaGFyZV9kZWwocHJpdi0+c2V0dGluZ3MuZm9udF9zYW5z
X3NlcmlmKTsKLSAgICBlaW5hX3N0cmluZ3NoYXJlX2RlbChwcml2LT5zZXR0aW5ncy5sb2NhbF9z
dG9yYWdlX2RhdGFiYXNlX3BhdGgpOwotCi0gICAgaWYgKHByaXYtPmFuaW1hdGVkX3pvb20uYW5p
bWF0b3IpCi0gICAgICAgIGVjb3JlX2FuaW1hdG9yX2RlbChwcml2LT5hbmltYXRlZF96b29tLmFu
aW1hdG9yKTsKKyAgICBlaW5hX3N0cmluZ3NoYXJlX2RlbChwcml2LT5zZXR0aW5ncy51c2VyQWdl
bnQpOworICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVsKHByaXYtPnNldHRpbmdzLnVzZXJTdHlsZXNo
ZWV0KTsKKyAgICBlaW5hX3N0cmluZ3NoYXJlX2RlbChwcml2LT5zZXR0aW5ncy5lbmNvZGluZ0Rl
ZmF1bHQpOworICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVsKHByaXYtPnNldHRpbmdzLmVuY29kaW5n
Q3VzdG9tKTsKKyAgICBlaW5hX3N0cmluZ3NoYXJlX2RlbChwcml2LT5zZXR0aW5ncy5mb250U3Rh
bmRhcmQpOworICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVsKHByaXYtPnNldHRpbmdzLmZvbnRDdXJz
aXZlKTsKKyAgICBlaW5hX3N0cmluZ3NoYXJlX2RlbChwcml2LT5zZXR0aW5ncy5mb250TW9ub3Nw
YWNlKTsKKyAgICBlaW5hX3N0cmluZ3NoYXJlX2RlbChwcml2LT5zZXR0aW5ncy5mb250RmFudGFz
eSk7CisgICAgZWluYV9zdHJpbmdzaGFyZV9kZWwocHJpdi0+c2V0dGluZ3MuZm9udFNlcmlmKTsK
KyAgICBlaW5hX3N0cmluZ3NoYXJlX2RlbChwcml2LT5zZXR0aW5ncy5mb250U2Fuc1NlcmlmKTsK
KyAgICBlaW5hX3N0cmluZ3NoYXJlX2RlbChwcml2LT5zZXR0aW5ncy5sb2NhbFN0b3JhZ2VEYXRh
YmFzZVBhdGgpOworCisgICAgaWYgKHByaXYtPmFuaW1hdGVkWm9vbS5hbmltYXRvcikKKyAgICAg
ICAgZWNvcmVfYW5pbWF0b3JfZGVsKHByaXYtPmFuaW1hdGVkWm9vbS5hbmltYXRvcik7CiAKICAg
ICBld2tfaGlzdG9yeV9mcmVlKHByaXYtPmhpc3RvcnkpOwogCkBAIC03MjUsNzIgKzcyNSw3MiBA
QCBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfcHJpdl9kZWwoRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKiBw
cml2KQogc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X2FkZChFdmFzX09iamVjdCogZXdrVmll
dykKIHsKICAgICBjb25zdCBFdmFzX1NtYXJ0KiBzbWFydCA9IGV2YXNfb2JqZWN0X3NtYXJ0X3Nt
YXJ0X2dldChld2tWaWV3KTsKLSAgICBjb25zdCBFdmFzX1NtYXJ0X0NsYXNzKiBzYyA9IGV2YXNf
c21hcnRfY2xhc3NfZ2V0KHNtYXJ0KTsKLSAgICBjb25zdCBFd2tfVmlld19TbWFydF9DbGFzcyog
YXBpID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBFd2tfVmlld19TbWFydF9DbGFzcyo+KHNjKTsK
KyAgICBjb25zdCBFdmFzX1NtYXJ0X0NsYXNzKiBzbWFydENsYXNzID0gZXZhc19zbWFydF9jbGFz
c19nZXQoc21hcnQpOworICAgIGNvbnN0IEV3a19WaWV3X1NtYXJ0X0NsYXNzKiBhcGkgPSByZWlu
dGVycHJldF9jYXN0PGNvbnN0IEV3a19WaWV3X1NtYXJ0X0NsYXNzKj4oc21hcnRDbGFzcyk7CiAg
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oYXBpLT5iYWNraW5nX3N0b3JlX2FkZCk7Ci0g
ICAgRVdLX1ZJRVdfU0RfR0VUKGV3a1ZpZXcsIHNkKTsKKyAgICBFV0tfVklFV19TRF9HRVQoZXdr
Vmlldywgc21hcnREYXRhKTsKIAotICAgIGlmICghc2QpIHsKLSAgICAgICAgc2QgPSBzdGF0aWNf
Y2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oY2FsbG9jKDEsIHNpemVvZihFd2tfVmlld19TbWFy
dF9EYXRhKSkpOwotICAgICAgICBpZiAoIXNkKSB7CisgICAgaWYgKCFzbWFydERhdGEpIHsKKyAg
ICAgICAgc21hcnREYXRhID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGNhbGxv
YygxLCBzaXplb2YoRXdrX1ZpZXdfU21hcnRfRGF0YSkpKTsKKyAgICAgICAgaWYgKCFzbWFydERh
dGEpIHsKICAgICAgICAgICAgIENSSVRJQ0FMKCJjb3VsZCBub3QgYWxsb2NhdGUgRXdrX1ZpZXdf
U21hcnRfRGF0YSIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGV2
YXNfb2JqZWN0X3NtYXJ0X2RhdGFfc2V0KGV3a1ZpZXcsIHNkKTsKKyAgICAgICAgZXZhc19vYmpl
Y3Rfc21hcnRfZGF0YV9zZXQoZXdrVmlldywgc21hcnREYXRhKTsKICAgICB9CiAKLSAgICBzZC0+
YmdfY29sb3IuciA9IDI1NTsKLSAgICBzZC0+YmdfY29sb3IuZyA9IDI1NTsKLSAgICBzZC0+Ymdf
Y29sb3IuYiA9IDI1NTsKLSAgICBzZC0+YmdfY29sb3IuYSA9IDI1NTsKKyAgICBzbWFydERhdGEt
PmJnX2NvbG9yLnIgPSAyNTU7CisgICAgc21hcnREYXRhLT5iZ19jb2xvci5nID0gMjU1OworICAg
IHNtYXJ0RGF0YS0+YmdfY29sb3IuYiA9IDI1NTsKKyAgICBzbWFydERhdGEtPmJnX2NvbG9yLmEg
PSAyNTU7CiAKLSAgICBzZC0+c2VsZiA9IGV3a1ZpZXc7Ci0gICAgc2QtPl9wcml2ID0gX2V3a192
aWV3X3ByaXZfbmV3KHNkKTsKLSAgICBzZC0+YXBpID0gYXBpOworICAgIHNtYXJ0RGF0YS0+c2Vs
ZiA9IGV3a1ZpZXc7CisgICAgc21hcnREYXRhLT5fcHJpdiA9IF9ld2tfdmlld19wcml2X25ldyhz
bWFydERhdGEpOworICAgIHNtYXJ0RGF0YS0+YXBpID0gYXBpOwogCiAgICAgX3BhcmVudF9zYy5h
ZGQoZXdrVmlldyk7CiAKLSAgICBpZiAoIXNkLT5fcHJpdikKKyAgICBpZiAoIXNtYXJ0RGF0YS0+
X3ByaXYpCiAgICAgICAgIHJldHVybjsKIAotICAgIEVXS19WSUVXX1BSSVZfR0VUKHNkLCBwcml2
KTsKKyAgICBFV0tfVklFV19QUklWX0dFVChzbWFydERhdGEsIHByaXYpOwogCi0gICAgc2QtPmJh
Y2tpbmdfc3RvcmUgPSBhcGktPmJhY2tpbmdfc3RvcmVfYWRkKHNkKTsKLSAgICBpZiAoIXNkLT5i
YWNraW5nX3N0b3JlKSB7CisgICAgc21hcnREYXRhLT5iYWNraW5nX3N0b3JlID0gYXBpLT5iYWNr
aW5nX3N0b3JlX2FkZChzbWFydERhdGEpOworICAgIGlmICghc21hcnREYXRhLT5iYWNraW5nX3N0
b3JlKSB7CiAgICAgICAgIEVSUigiQ291bGQgbm90IGNyZWF0ZSBiYWNraW5nIHN0b3JlIG9iamVj
dC4iKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X21l
bWJlcl9hZGQoc2QtPmJhY2tpbmdfc3RvcmUsIGV3a1ZpZXcpOwotICAgIGV2YXNfb2JqZWN0X3No
b3coc2QtPmJhY2tpbmdfc3RvcmUpOwotICAgIGV2YXNfb2JqZWN0X3Bhc3NfZXZlbnRzX3NldChz
ZC0+YmFja2luZ19zdG9yZSwgRUlOQV9UUlVFKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9tZW1i
ZXJfYWRkKHNtYXJ0RGF0YS0+YmFja2luZ19zdG9yZSwgZXdrVmlldyk7CisgICAgZXZhc19vYmpl
Y3Rfc2hvdyhzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUpOworICAgIGV2YXNfb2JqZWN0X3Bhc3Nf
ZXZlbnRzX3NldChzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUsIEVJTkFfVFJVRSk7CiAKLSAgICBz
ZC0+ZXZlbnRzX3JlY3QgPSBldmFzX29iamVjdF9yZWN0YW5nbGVfYWRkKHNkLT5iYXNlLmV2YXMp
OwotICAgIGV2YXNfb2JqZWN0X2NvbG9yX3NldChzZC0+ZXZlbnRzX3JlY3QsIDAsIDAsIDAsIDAp
OwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X21lbWJlcl9hZGQoc2QtPmV2ZW50c19yZWN0LCBld2tW
aWV3KTsKLSAgICBldmFzX29iamVjdF9zaG93KHNkLT5ldmVudHNfcmVjdCk7CisgICAgc21hcnRE
YXRhLT5ldmVudHNfcmVjdCA9IGV2YXNfb2JqZWN0X3JlY3RhbmdsZV9hZGQoc21hcnREYXRhLT5i
YXNlLmV2YXMpOworICAgIGV2YXNfb2JqZWN0X2NvbG9yX3NldChzbWFydERhdGEtPmV2ZW50c19y
ZWN0LCAwLCAwLCAwLCAwKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9tZW1iZXJfYWRkKHNtYXJ0
RGF0YS0+ZXZlbnRzX3JlY3QsIGV3a1ZpZXcpOworICAgIGV2YXNfb2JqZWN0X3Nob3coc21hcnRE
YXRhLT5ldmVudHNfcmVjdCk7CiAKLSAgICBzZC0+bWFpbl9mcmFtZSA9IGV3a19mcmFtZV9hZGQo
c2QtPmJhc2UuZXZhcyk7Ci0gICAgaWYgKCFzZC0+bWFpbl9mcmFtZSkgeworICAgIHNtYXJ0RGF0
YS0+bWFpbl9mcmFtZSA9IGV3a19mcmFtZV9hZGQoc21hcnREYXRhLT5iYXNlLmV2YXMpOworICAg
IGlmICghc21hcnREYXRhLT5tYWluX2ZyYW1lKSB7CiAgICAgICAgIEVSUigiQ291bGQgbm90IGNy
ZWF0ZSBtYWluIGZyYW1lIG9iamVjdC4iKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IGlmICghZXdrX2ZyYW1lX2luaXQoc2QtPm1haW5fZnJhbWUsIGV3a1ZpZXcsIHByaXYtPm1haW5f
ZnJhbWUpKSB7CisgICAgaWYgKCFld2tfZnJhbWVfaW5pdChzbWFydERhdGEtPm1haW5fZnJhbWUs
IGV3a1ZpZXcsIHByaXYtPm1haW5GcmFtZSkpIHsKICAgICAgICAgRVJSKCJDb3VsZCBub3QgaW5p
dGlhbGl6ZSBtYWluIGZybWUgb2JqZWN0LiIpOwotICAgICAgICBldmFzX29iamVjdF9kZWwoc2Qt
Pm1haW5fZnJhbWUpOwotICAgICAgICBzZC0+bWFpbl9mcmFtZSA9IDA7CisgICAgICAgIGV2YXNf
b2JqZWN0X2RlbChzbWFydERhdGEtPm1haW5fZnJhbWUpOworICAgICAgICBzbWFydERhdGEtPm1h
aW5fZnJhbWUgPSAwOwogCi0gICAgICAgIGRlbGV0ZSBwcml2LT5tYWluX2ZyYW1lOwotICAgICAg
ICBwcml2LT5tYWluX2ZyYW1lID0gMDsKKyAgICAgICAgZGVsZXRlIHByaXYtPm1haW5GcmFtZTsK
KyAgICAgICAgcHJpdi0+bWFpbkZyYW1lID0gMDsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIGV2YXNfb2JqZWN0X25hbWVfc2V0KHNkLT5tYWluX2ZyYW1lLCAiRVdLX0ZyYW1lOm1haW4i
KTsKLSAgICBldmFzX29iamVjdF9zbWFydF9tZW1iZXJfYWRkKHNkLT5tYWluX2ZyYW1lLCBld2tW
aWV3KTsKLSAgICBldmFzX29iamVjdF9zaG93KHNkLT5tYWluX2ZyYW1lKTsKKyAgICBldmFzX29i
amVjdF9uYW1lX3NldChzbWFydERhdGEtPm1haW5fZnJhbWUsICJFV0tfRnJhbWU6bWFpbiIpOwor
ICAgIGV2YXNfb2JqZWN0X3NtYXJ0X21lbWJlcl9hZGQoc21hcnREYXRhLT5tYWluX2ZyYW1lLCBl
d2tWaWV3KTsKKyAgICBldmFzX29iamVjdF9zaG93KHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSk7CiAK
LSNkZWZpbmUgQ09OTkVDVChzLCBjKSBldmFzX29iamVjdF9ldmVudF9jYWxsYmFja19hZGQoZXdr
VmlldywgcywgYywgc2QpCisjZGVmaW5lIENPTk5FQ1QocywgYykgZXZhc19vYmplY3RfZXZlbnRf
Y2FsbGJhY2tfYWRkKGV3a1ZpZXcsIHMsIGMsIHNtYXJ0RGF0YSkKICAgICBDT05ORUNUKEVWQVNf
Q0FMTEJBQ0tfRk9DVVNfSU4sIF9ld2tfdmlld19vbl9mb2N1c19pbik7CiAgICAgQ09OTkVDVChF
VkFTX0NBTExCQUNLX0ZPQ1VTX09VVCwgX2V3a192aWV3X29uX2ZvY3VzX291dCk7CiAgICAgQ09O
TkVDVChFVkFTX0NBTExCQUNLX01PVVNFX1dIRUVMLCBfZXdrX3ZpZXdfb25fbW91c2Vfd2hlZWwp
OwpAQCAtODA0LDggKzgwNCw4IEBAIHN0YXRpYyB2b2lkIF9ld2tfdmlld19zbWFydF9hZGQoRXZh
c19PYmplY3QqIGV3a1ZpZXcpCiAKIHN0YXRpYyB2b2lkIF9ld2tfdmlld19zbWFydF9kZWwoRXZh
c19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUKGV3a1ZpZXcsIHNkKTsK
LSAgICBFd2tfVmlld19Qcml2YXRlX0RhdGEqIHByaXYgPSBzZCA/IHNkLT5fcHJpdiA6IDA7Cisg
ICAgRVdLX1ZJRVdfU0RfR0VUKGV3a1ZpZXcsIHNtYXJ0RGF0YSk7CisgICAgRXdrX1ZpZXdfUHJp
dmF0ZV9EYXRhKiBwcml2ID0gc21hcnREYXRhID8gc21hcnREYXRhLT5fcHJpdiA6IDA7CiAKICAg
ICBld2tfdmlld19zdG9wKGV3a1ZpZXcpOwogICAgIF9wYXJlbnRfc2MuZGVsKGV3a1ZpZXcpOwpA
QCAtODE0LDEwMyArODE0LDEwMyBAQCBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21hcnRfZGVsKEV2
YXNfT2JqZWN0KiBld2tWaWV3KQogCiBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21hcnRfcmVzaXpl
KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFdmFzX0Nvb3JkIHcsIEV2YXNfQ29vcmQgaCkKIHsKLSAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkKTsKKyAgICBFV0tfVklFV19T
RF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSk7CiAKICAgICAvLyB0aGVzZSBzaG91
bGQgYmUgcXVldWVkIGFuZCBwcm9jZXNzZWQgaW4gY2FsY3VsYXRlIGFzIHdlbGwhCi0gICAgZXZh
c19vYmplY3RfcmVzaXplKHNkLT5iYWNraW5nX3N0b3JlLCB3LCBoKTsKKyAgICBldmFzX29iamVj
dF9yZXNpemUoc21hcnREYXRhLT5iYWNraW5nX3N0b3JlLCB3LCBoKTsKIAotICAgIHNkLT5jaGFu
Z2VkLnNpemUgPSBFSU5BX1RSVUU7Ci0gICAgX2V3a192aWV3X3NtYXJ0X2NoYW5nZWQoc2QpOwor
ICAgIHNtYXJ0RGF0YS0+Y2hhbmdlZC5zaXplID0gRUlOQV9UUlVFOworICAgIF9ld2tfdmlld19z
bWFydF9jaGFuZ2VkKHNtYXJ0RGF0YSk7CiB9CiAKIHN0YXRpYyB2b2lkIF9ld2tfdmlld19zbWFy
dF9tb3ZlKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSkK
IHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkKTsKLSAgICBzZC0+
Y2hhbmdlZC5wb3NpdGlvbiA9IEVJTkFfVFJVRTsKLSAgICBfZXdrX3ZpZXdfc21hcnRfY2hhbmdl
ZChzZCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEp
OworICAgIHNtYXJ0RGF0YS0+Y2hhbmdlZC5wb3NpdGlvbiA9IEVJTkFfVFJVRTsKKyAgICBfZXdr
X3ZpZXdfc21hcnRfY2hhbmdlZChzbWFydERhdGEpOwogfQogCiBzdGF0aWMgdm9pZCBfZXdrX3Zp
ZXdfc21hcnRfY2FsY3VsYXRlKEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVX
X1NEX0dFVChld2tWaWV3LCBzZCk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVQoc2QsIHByaXYpOwot
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGktPmNvbnRlbnRzX3Jlc2l6ZSk7
Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFwaS0+c2Nyb2xsc19wcm9jZXNz
KTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpLT5yZXBhaW50c19wcm9j
ZXNzKTsKLSAgICBFdmFzX0Nvb3JkIHgsIHksIHcsIGg7CisgICAgRVdLX1ZJRVdfU0RfR0VUKGV3
a1ZpZXcsIHNtYXJ0RGF0YSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVQoc21hcnREYXRhLCBwcml2
KTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmFwaS0+Y29udGVu
dHNfcmVzaXplKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmFw
aS0+c2Nyb2xsc19wcm9jZXNzKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFy
dERhdGEtPmFwaS0+cmVwYWludHNfcHJvY2Vzcyk7CisgICAgRXZhc19Db29yZCB4LCB5LCB3aWR0
aCwgaGVpZ2h0OwogCi0gICAgc2QtPmNoYW5nZWQuYW55ID0gRUlOQV9GQUxTRTsKKyAgICBzbWFy
dERhdGEtPmNoYW5nZWQuYW55ID0gRUlOQV9GQUxTRTsKIAotICAgIGlmICghc2QtPm1haW5fZnJh
bWUgfHwgIXByaXYtPm1haW5fZnJhbWUpCisgICAgaWYgKCFzbWFydERhdGEtPm1haW5fZnJhbWUg
fHwgIXByaXYtPm1haW5GcmFtZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZXZhc19vYmplY3Rf
Z2VvbWV0cnlfZ2V0KGV3a1ZpZXcsICZ4LCAmeSwgJncsICZoKTsKKyAgICBldmFzX29iamVjdF9n
ZW9tZXRyeV9nZXQoZXdrVmlldywgJngsICZ5LCAmd2lkdGgsICZoZWlnaHQpOwogCiAgICAgREJH
KCJld2tWaWV3PSVwIGdlbz1bJWQsICVkICsgJWR4JWRdLCBjaGFuZ2VkOiBzaXplPSVoaHUsICIK
ICAgICAgICAgInNjcm9sbHM9JXp1LCByZXBhaW50cz0lenUiLAotICAgICAgICBld2tWaWV3LCB4
LCB5LCB3LCBoLCBzZC0+Y2hhbmdlZC5zaXplLAorICAgICAgICBld2tWaWV3LCB4LCB5LCB3aWR0
aCwgaGVpZ2h0LCBzbWFydERhdGEtPmNoYW5nZWQuc2l6ZSwKICAgICAgICAgcHJpdi0+c2Nyb2xs
cy5jb3VudCwgcHJpdi0+cmVwYWludHMuY291bnQpOwogCi0gICAgaWYgKHNkLT5jaGFuZ2VkLnNp
emUgJiYgKCh3ICE9IHNkLT52aWV3LncpIHx8IChoICE9IHNkLT52aWV3LmgpKSkgewotICAgICAg
ICBXZWJDb3JlOjpGcmFtZVZpZXcqIHZpZXcgPSBwcml2LT5tYWluX2ZyYW1lLT52aWV3KCk7Cisg
ICAgaWYgKHNtYXJ0RGF0YS0+Y2hhbmdlZC5zaXplICYmICgod2lkdGggIT0gc21hcnREYXRhLT52
aWV3LncpIHx8IChoZWlnaHQgIT0gc21hcnREYXRhLT52aWV3LmgpKSkgeworICAgICAgICBXZWJD
b3JlOjpGcmFtZVZpZXcqIHZpZXcgPSBwcml2LT5tYWluRnJhbWUtPnZpZXcoKTsKICAgICAgICAg
aWYgKHZpZXcpIHsKLSAgICAgICAgICAgIHZpZXctPnJlc2l6ZSh3LCBoKTsKKyAgICAgICAgICAg
IHZpZXctPnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTsKICAgICAgICAgICAgIHZpZXctPmZvcmNlTGF5
b3V0KCk7CiAgICAgICAgICAgICB2aWV3LT5hZGp1c3RWaWV3U2l6ZSgpOwogICAgICAgICB9Ci0g
ICAgICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShzZC0+bWFpbl9mcmFtZSwgdywgaCk7Ci0gICAgICAg
IGV2YXNfb2JqZWN0X3Jlc2l6ZShzZC0+ZXZlbnRzX3JlY3QsIHcsIGgpOwotICAgICAgICBzZC0+
Y2hhbmdlZC5mcmFtZV9yZWN0ID0gRUlOQV9UUlVFOwotICAgICAgICBzZC0+dmlldy53ID0gdzsK
LSAgICAgICAgc2QtPnZpZXcuaCA9IGg7CisgICAgICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShzbWFy
dERhdGEtPm1haW5fZnJhbWUsIHdpZHRoLCBoZWlnaHQpOworICAgICAgICBldmFzX29iamVjdF9y
ZXNpemUoc21hcnREYXRhLT5ldmVudHNfcmVjdCwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgIHNt
YXJ0RGF0YS0+Y2hhbmdlZC5mcmFtZV9yZWN0ID0gRUlOQV9UUlVFOworICAgICAgICBzbWFydERh
dGEtPnZpZXcudyA9IHdpZHRoOworICAgICAgICBzbWFydERhdGEtPnZpZXcuaCA9IGhlaWdodDsK
IAotICAgICAgICBfZXdrX3ZpZXdfcmVwYWludF9hZGQocHJpdiwgMCwgMCwgdywgaCk7CisgICAg
ICAgIF9ld2tfdmlld19yZXBhaW50X2FkZChwcml2LCAwLCAwLCB3aWR0aCwgaGVpZ2h0KTsKIAog
ICAgICAgICAvLyBUaGlzIGNhbGxiYWNrIGlzIGEgZ29vZCBwbGFjZSBlLmcuIHRvIGNoYW5nZSBm
aXhlZCBsYXlvdXQgc2l6ZSAoZXdrX3ZpZXdfZml4ZWRfbGF5b3V0X3NpemVfc2V0KS4KICAgICAg
ICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChld2tWaWV3LCAidmlldyxyZXNpemVk
IiwgMCk7CiAgICAgfQotICAgIHNkLT5jaGFuZ2VkLnNpemUgPSBFSU5BX0ZBTFNFOworICAgIHNt
YXJ0RGF0YS0+Y2hhbmdlZC5zaXplID0gRUlOQV9GQUxTRTsKIAotICAgIGlmIChzZC0+Y2hhbmdl
ZC5wb3NpdGlvbiAmJiAoKHggIT0gc2QtPnZpZXcueCkgfHwgKHkgIT0gc2QtPnZpZXcueSkpKSB7
Ci0gICAgICAgIGV2YXNfb2JqZWN0X21vdmUoc2QtPm1haW5fZnJhbWUsIHgsIHkpOwotICAgICAg
ICBldmFzX29iamVjdF9tb3ZlKHNkLT5iYWNraW5nX3N0b3JlLCB4LCB5KTsKLSAgICAgICAgZXZh
c19vYmplY3RfbW92ZShzZC0+ZXZlbnRzX3JlY3QsIHgsIHkpOwotICAgICAgICBzZC0+Y2hhbmdl
ZC5mcmFtZV9yZWN0ID0gRUlOQV9UUlVFOwotICAgICAgICBzZC0+dmlldy54ID0geDsKLSAgICAg
ICAgc2QtPnZpZXcueSA9IHk7CisgICAgaWYgKHNtYXJ0RGF0YS0+Y2hhbmdlZC5wb3NpdGlvbiAm
JiAoKHggIT0gc21hcnREYXRhLT52aWV3LngpIHx8ICh5ICE9IHNtYXJ0RGF0YS0+dmlldy55KSkp
IHsKKyAgICAgICAgZXZhc19vYmplY3RfbW92ZShzbWFydERhdGEtPm1haW5fZnJhbWUsIHgsIHkp
OworICAgICAgICBldmFzX29iamVjdF9tb3ZlKHNtYXJ0RGF0YS0+YmFja2luZ19zdG9yZSwgeCwg
eSk7CisgICAgICAgIGV2YXNfb2JqZWN0X21vdmUoc21hcnREYXRhLT5ldmVudHNfcmVjdCwgeCwg
eSk7CisgICAgICAgIHNtYXJ0RGF0YS0+Y2hhbmdlZC5mcmFtZV9yZWN0ID0gRUlOQV9UUlVFOwor
ICAgICAgICBzbWFydERhdGEtPnZpZXcueCA9IHg7CisgICAgICAgIHNtYXJ0RGF0YS0+dmlldy55
ID0geTsKICAgICB9Ci0gICAgc2QtPmNoYW5nZWQucG9zaXRpb24gPSBFSU5BX0ZBTFNFOworICAg
IHNtYXJ0RGF0YS0+Y2hhbmdlZC5wb3NpdGlvbiA9IEVJTkFfRkFMU0U7CiAKLSAgICBpZiAoIXNk
LT5hcGktPnNjcm9sbHNfcHJvY2VzcyhzZCkpCisgICAgaWYgKCFzbWFydERhdGEtPmFwaS0+c2Ny
b2xsc19wcm9jZXNzKHNtYXJ0RGF0YSkpCiAgICAgICAgIEVSUigiZmFpbGVkIHRvIHByb2Nlc3Mg
c2Nyb2xscy4iKTsKICAgICBfZXdrX3ZpZXdfc2Nyb2xsc19mbHVzaChwcml2KTsKIAotICAgIGlm
ICghc2QtPmFwaS0+cmVwYWludHNfcHJvY2VzcyhzZCkpCisgICAgaWYgKCFzbWFydERhdGEtPmFw
aS0+cmVwYWludHNfcHJvY2VzcyhzbWFydERhdGEpKQogICAgICAgICBFUlIoImZhaWxlZCB0byBw
cm9jZXNzIHJlcGFpbnRzLiIpOwogICAgIF9ld2tfdmlld19yZXBhaW50c19mbHVzaChwcml2KTsK
IAotICAgIGlmIChzZC0+Y2hhbmdlZC5mcmFtZV9yZWN0KSB7Ci0gICAgICAgIFdlYkNvcmU6OkZy
YW1lVmlldyogdmlldyA9IHByaXYtPm1haW5fZnJhbWUtPnZpZXcoKTsKKyAgICBpZiAoc21hcnRE
YXRhLT5jaGFuZ2VkLmZyYW1lX3JlY3QpIHsKKyAgICAgICAgV2ViQ29yZTo6RnJhbWVWaWV3KiB2
aWV3ID0gcHJpdi0+bWFpbkZyYW1lLT52aWV3KCk7CiAgICAgICAgIHZpZXctPmZyYW1lUmVjdHND
aGFuZ2VkKCk7IC8qIGZvcmNlIHRyZWUgdG8gZ2V0IHBvc2l0aW9uIGZyb20gcm9vdCAqLwotICAg
ICAgICBzZC0+Y2hhbmdlZC5mcmFtZV9yZWN0ID0gRUlOQV9GQUxTRTsKKyAgICAgICAgc21hcnRE
YXRhLT5jaGFuZ2VkLmZyYW1lX3JlY3QgPSBFSU5BX0ZBTFNFOwogICAgIH0KIH0KIAogc3RhdGlj
IHZvaWQgX2V3a192aWV3X3NtYXJ0X3Nob3coRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAg
RVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCk7CisgICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEpOwogCi0gICAgaWYgKGV2YXNfb2JqZWN0
X2NsaXBlZXNfZ2V0KHNkLT5iYXNlLmNsaXBwZXIpKQotICAgICAgICBldmFzX29iamVjdF9zaG93
KHNkLT5iYXNlLmNsaXBwZXIpOwotICAgIGV2YXNfb2JqZWN0X3Nob3coc2QtPmJhY2tpbmdfc3Rv
cmUpOworICAgIGlmIChldmFzX29iamVjdF9jbGlwZWVzX2dldChzbWFydERhdGEtPmJhc2UuY2xp
cHBlcikpCisgICAgICAgIGV2YXNfb2JqZWN0X3Nob3coc21hcnREYXRhLT5iYXNlLmNsaXBwZXIp
OworICAgIGV2YXNfb2JqZWN0X3Nob3coc21hcnREYXRhLT5iYWNraW5nX3N0b3JlKTsKIH0KIAog
c3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X2hpZGUoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7
Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCk7CisgICAgRVdLX1ZJ
RVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEpOwogCi0gICAgZXZhc19vYmpl
Y3RfaGlkZShzZC0+YmFzZS5jbGlwcGVyKTsKLSAgICBldmFzX29iamVjdF9oaWRlKHNkLT5iYWNr
aW5nX3N0b3JlKTsKKyAgICBldmFzX29iamVjdF9oaWRlKHNtYXJ0RGF0YS0+YmFzZS5jbGlwcGVy
KTsKKyAgICBldmFzX29iamVjdF9oaWRlKHNtYXJ0RGF0YS0+YmFja2luZ19zdG9yZSk7CiB9CiAK
IHN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3NtYXJ0X2NvbnRlbnRzX3Jlc2l6ZShFd2tfVmll
d19TbWFydF9EYXRhKiBzbWFydERhdGEsIGludCB3aWR0aCwgaW50IGhlaWdodCkKQEAgLTkyMSwy
OSArOTIxLDI5IEBAIHN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3NtYXJ0X2NvbnRlbnRzX3Jl
c2l6ZShFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEsCiBzdGF0aWMgRWluYV9Cb29sIF9l
d2tfdmlld19zbWFydF96b29tX3NldChFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEsIGZs
b2F0IHpvb20sIEV2YXNfQ29vcmQgY2VudGVyWCwgRXZhc19Db29yZCBjZW50ZXJZKQogewogICAg
IGRvdWJsZSBweCwgcHk7Ci0gICAgRXZhc19Db29yZCB4LCB5LCB3LCBoOwotICAgIEVpbmFfQm9v
bCByZXQ7CisgICAgRXZhc19Db29yZCB4LCB5LCB3aWR0aCwgaGVpZ2h0OworICAgIEVpbmFfQm9v
bCByZXN1bHQ7CiAKLSAgICBld2tfZnJhbWVfc2Nyb2xsX3NpemVfZ2V0KHNtYXJ0RGF0YS0+bWFp
bl9mcmFtZSwgJncsICZoKTsKKyAgICBld2tfZnJhbWVfc2Nyb2xsX3NpemVfZ2V0KHNtYXJ0RGF0
YS0+bWFpbl9mcmFtZSwgJndpZHRoLCAmaGVpZ2h0KTsKICAgICBld2tfZnJhbWVfc2Nyb2xsX3Bv
c19nZXQoc21hcnREYXRhLT5tYWluX2ZyYW1lLCAmeCwgJnkpOwogCi0gICAgaWYgKHcgKyBzbWFy
dERhdGEtPnZpZXcudyA+IDApCi0gICAgICAgIHB4ID0gc3RhdGljX2Nhc3Q8ZG91YmxlPih4ICsg
Y2VudGVyWCkgLyAodyArIHNtYXJ0RGF0YS0+dmlldy53KTsKKyAgICBpZiAod2lkdGggKyBzbWFy
dERhdGEtPnZpZXcudyA+IDApCisgICAgICAgIHB4ID0gc3RhdGljX2Nhc3Q8ZG91YmxlPih4ICsg
Y2VudGVyWCkgLyAod2lkdGggKyBzbWFydERhdGEtPnZpZXcudyk7CiAgICAgZWxzZQogICAgICAg
ICBweCA9IDAuMDsKIAotICAgIGlmIChoICsgc21hcnREYXRhLT52aWV3LmggPiAwKQotICAgICAg
ICBweSA9IHN0YXRpY19jYXN0PGRvdWJsZT4oeSArIGNlbnRlclkpIC8gKGggKyBzbWFydERhdGEt
PnZpZXcuaCk7CisgICAgaWYgKGhlaWdodCArIHNtYXJ0RGF0YS0+dmlldy5oID4gMCkKKyAgICAg
ICAgcHkgPSBzdGF0aWNfY2FzdDxkb3VibGU+KHkgKyBjZW50ZXJZKSAvIChoZWlnaHQgKyBzbWFy
dERhdGEtPnZpZXcuaCk7CiAgICAgZWxzZQogICAgICAgICBweSA9IDAuMDsKIAotICAgIHJldCA9
IGV3a19mcmFtZV9wYWdlX3pvb21fc2V0KHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSwgem9vbSk7Cisg
ICAgcmVzdWx0ID0gZXdrX2ZyYW1lX3BhZ2Vfem9vbV9zZXQoc21hcnREYXRhLT5tYWluX2ZyYW1l
LCB6b29tKTsKIAotICAgIGV3a19mcmFtZV9zY3JvbGxfc2l6ZV9nZXQoc21hcnREYXRhLT5tYWlu
X2ZyYW1lLCAmdywgJmgpOwotICAgIHggPSAodyArIHNtYXJ0RGF0YS0+dmlldy53KSAqIHB4IC0g
Y2VudGVyWDsKLSAgICB5ID0gKGggKyBzbWFydERhdGEtPnZpZXcuaCkgKiBweSAtIGNlbnRlclk7
CisgICAgZXdrX2ZyYW1lX3Njcm9sbF9zaXplX2dldChzbWFydERhdGEtPm1haW5fZnJhbWUsICZ3
aWR0aCwgJmhlaWdodCk7CisgICAgeCA9ICh3aWR0aCArIHNtYXJ0RGF0YS0+dmlldy53KSAqIHB4
IC0gY2VudGVyWDsKKyAgICB5ID0gKGhlaWdodCArIHNtYXJ0RGF0YS0+dmlldy5oKSAqIHB5IC0g
Y2VudGVyWTsKICAgICBld2tfZnJhbWVfc2Nyb2xsX3NldChzbWFydERhdGEtPm1haW5fZnJhbWUs
IHgsIHkpOwotICAgIHJldHVybiByZXQ7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogc3RhdGlj
IHZvaWQgX2V3a192aWV3X3NtYXJ0X2ZsdXNoKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0
YSkKQEAgLTk4Miw4ICs5ODIsOCBAQCBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfem9vbV9hbmltYXRl
ZF9tYXJrX3N0b3AoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhKQogc3RhdGljIHZvaWQg
X2V3a192aWV3X3pvb21fYW5pbWF0ZWRfZmluaXNoKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0
RGF0YSkKIHsKICAgICBFV0tfVklFV19QUklWX0dFVChzbWFydERhdGEsIHByaXYpOwotICAgIGVj
b3JlX2FuaW1hdG9yX2RlbChwcml2LT5hbmltYXRlZF96b29tLmFuaW1hdG9yKTsKLSAgICBwcml2
LT5hbmltYXRlZF96b29tLmFuaW1hdG9yID0gMDsKKyAgICBlY29yZV9hbmltYXRvcl9kZWwocHJp
di0+YW5pbWF0ZWRab29tLmFuaW1hdG9yKTsKKyAgICBwcml2LT5hbmltYXRlZFpvb20uYW5pbWF0
b3IgPSAwOwogICAgIF9ld2tfdmlld196b29tX2FuaW1hdGVkX21hcmtfc3RvcChzbWFydERhdGEp
OwogICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoc21hcnREYXRhLT5zZWxmLCAi
em9vbSxhbmltYXRlZCxlbmQiLCAwKTsKIH0KQEAgLTk5MSw2OSArOTkxLDY5IEBAIHN0YXRpYyB2
b2lkIF9ld2tfdmlld196b29tX2FuaW1hdGVkX2ZpbmlzaChFd2tfVmlld19TbWFydF9EYXRhKiBz
bWFydERhdGEpCiBzdGF0aWMgZmxvYXQgX2V3a192aWV3X3pvb21fYW5pbWF0ZWRfY3VycmVudChF
d2tfVmlld19Qcml2YXRlX0RhdGEqIHByaXYpCiB7CiAgICAgZG91YmxlIG5vdyA9IGVjb3JlX2xv
b3BfdGltZV9nZXQoKTsKLSAgICBkb3VibGUgZGVsdGEgPSBub3cgLSBwcml2LT5hbmltYXRlZF96
b29tLnRpbWUuc3RhcnQ7CisgICAgZG91YmxlIGRlbHRhID0gbm93IC0gcHJpdi0+YW5pbWF0ZWRa
b29tLnRpbWUuc3RhcnQ7CiAKLSAgICBpZiAoZGVsdGEgPiBwcml2LT5hbmltYXRlZF96b29tLnRp
bWUuZHVyYXRpb24pCi0gICAgICAgIGRlbHRhID0gcHJpdi0+YW5pbWF0ZWRfem9vbS50aW1lLmR1
cmF0aW9uOworICAgIGlmIChkZWx0YSA+IHByaXYtPmFuaW1hdGVkWm9vbS50aW1lLmR1cmF0aW9u
KQorICAgICAgICBkZWx0YSA9IHByaXYtPmFuaW1hdGVkWm9vbS50aW1lLmR1cmF0aW9uOwogICAg
IGlmIChkZWx0YSA8IDAuMCkgLy8gdGltZSB3ZW50IGJhY2ssIGNsb2NrIGFkanVzdGVkPwogICAg
ICAgICBkZWx0YSA9IDAuMDsKIAotICAgIGRlbHRhIC89IHByaXYtPmFuaW1hdGVkX3pvb20udGlt
ZS5kdXJhdGlvbjsKKyAgICBkZWx0YSAvPSBwcml2LT5hbmltYXRlZFpvb20udGltZS5kdXJhdGlv
bjsKIAotICAgIHJldHVybiAoKHByaXYtPmFuaW1hdGVkX3pvb20uem9vbS5yYW5nZSAqIGRlbHRh
KQotICAgICAgICAgICAgKyBwcml2LT5hbmltYXRlZF96b29tLnpvb20uc3RhcnQpOworICAgIHJl
dHVybiAoKHByaXYtPmFuaW1hdGVkWm9vbS56b29tLnJhbmdlICogZGVsdGEpCisgICAgICAgICAg
ICArIHByaXYtPmFuaW1hdGVkWm9vbS56b29tLnN0YXJ0KTsKIH0KIAogc3RhdGljIEVpbmFfQm9v
bCBfZXdrX3ZpZXdfem9vbV9hbmltYXRvcl9jYih2b2lkKiBkYXRhKQogewotICAgIEV3a19WaWV3
X1NtYXJ0X0RhdGEqIHNkID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEp
OwotICAgIEV2YXNfQ29vcmQgY3gsIGN5OwotICAgIEVXS19WSUVXX1BSSVZfR0VUKHNkLCBwcml2
KTsKKyAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEgPSBzdGF0aWNfY2FzdDxFd2tf
Vmlld19TbWFydF9EYXRhKj4oZGF0YSk7CisgICAgRXZhc19Db29yZCBjZW50ZXJYLCBjZW50ZXJZ
OworICAgIEVXS19WSUVXX1BSSVZfR0VUKHNtYXJ0RGF0YSwgcHJpdik7CiAgICAgZG91YmxlIG5v
dyA9IGVjb3JlX2xvb3BfdGltZV9nZXQoKTsKIAotICAgIGN4ID0gcHJpdi0+YW5pbWF0ZWRfem9v
bS5jZW50ZXIueDsKLSAgICBjeSA9IHByaXYtPmFuaW1hdGVkX3pvb20uY2VudGVyLnk7CisgICAg
Y2VudGVyWCA9IHByaXYtPmFuaW1hdGVkWm9vbS5jZW50ZXIueDsKKyAgICBjZW50ZXJZID0gcHJp
di0+YW5pbWF0ZWRab29tLmNlbnRlci55OwogCiAgICAgLy8gVE9ETzogcHJvZ3Jlc3NpdmVseSBj
ZW50ZXIgKGN4LCBjeSkgLT4gKHZpZXcueCArIHZpZXcuaC8yLCB2aWV3LnkgKyB2aWV3LmgvMikK
LSAgICBpZiAoY3ggPj0gc2QtPnZpZXcudykKLSAgICAgICAgY3ggPSBzZC0+dmlldy53IC0gMTsK
LSAgICBpZiAoY3kgPj0gc2QtPnZpZXcuaCkKLSAgICAgICAgY3kgPSBzZC0+dmlldy5oIC0gMTsK
LQotICAgIGlmICgobm93ID49IHByaXYtPmFuaW1hdGVkX3pvb20udGltZS5lbmQpCi0gICAgICAg
IHx8IChub3cgPCBwcml2LT5hbmltYXRlZF96b29tLnRpbWUuc3RhcnQpKSB7Ci0gICAgICAgIF9l
d2tfdmlld196b29tX2FuaW1hdGVkX2ZpbmlzaChzZCk7Ci0gICAgICAgIGV3a192aWV3X3pvb21f
c2V0KHNkLT5zZWxmLCBwcml2LT5hbmltYXRlZF96b29tLnpvb20uZW5kLCBjeCwgY3kpOwotICAg
ICAgICBzZC0+YXBpLT5zYy5jYWxjdWxhdGUoc2QtPnNlbGYpOworICAgIGlmIChjZW50ZXJYID49
IHNtYXJ0RGF0YS0+dmlldy53KQorICAgICAgICBjZW50ZXJYID0gc21hcnREYXRhLT52aWV3Lncg
LSAxOworICAgIGlmIChjZW50ZXJZID49IHNtYXJ0RGF0YS0+dmlldy5oKQorICAgICAgICBjZW50
ZXJZID0gc21hcnREYXRhLT52aWV3LmggLSAxOworCisgICAgaWYgKChub3cgPj0gcHJpdi0+YW5p
bWF0ZWRab29tLnRpbWUuZW5kKQorICAgICAgICB8fCAobm93IDwgcHJpdi0+YW5pbWF0ZWRab29t
LnRpbWUuc3RhcnQpKSB7CisgICAgICAgIF9ld2tfdmlld196b29tX2FuaW1hdGVkX2ZpbmlzaChz
bWFydERhdGEpOworICAgICAgICBld2tfdmlld196b29tX3NldChzbWFydERhdGEtPnNlbGYsIHBy
aXYtPmFuaW1hdGVkWm9vbS56b29tLmVuZCwgY2VudGVyWCwgY2VudGVyWSk7CisgICAgICAgIHNt
YXJ0RGF0YS0+YXBpLT5zYy5jYWxjdWxhdGUoc21hcnREYXRhLT5zZWxmKTsKICAgICAgICAgcmV0
dXJuIEVJTkFfRkFMU0U7CiAgICAgfQogCi0gICAgc2QtPmFuaW1hdGVkX3pvb20uem9vbS5jdXJy
ZW50ID0gX2V3a192aWV3X3pvb21fYW5pbWF0ZWRfY3VycmVudChwcml2KTsKLSAgICBzZC0+YXBp
LT56b29tX3dlYWtfc2V0KHNkLCBzZC0+YW5pbWF0ZWRfem9vbS56b29tLmN1cnJlbnQsIGN4LCBj
eSk7CisgICAgc21hcnREYXRhLT5hbmltYXRlZF96b29tLnpvb20uY3VycmVudCA9IF9ld2tfdmll
d196b29tX2FuaW1hdGVkX2N1cnJlbnQocHJpdik7CisgICAgc21hcnREYXRhLT5hcGktPnpvb21f
d2Vha19zZXQoc21hcnREYXRhLCBzbWFydERhdGEtPmFuaW1hdGVkX3pvb20uem9vbS5jdXJyZW50
LCBjZW50ZXJYLCBjZW50ZXJZKTsKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCiBzdGF0aWMg
dm9pZCBfZXdrX3ZpZXdfem9vbV9hbmltYXRpb25fc3RhcnQoRXdrX1ZpZXdfU21hcnRfRGF0YSog
c21hcnREYXRhKQogewogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEs
IHByaXYpOwotICAgIGlmIChwcml2LT5hbmltYXRlZF96b29tLmFuaW1hdG9yKQorICAgIGlmIChw
cml2LT5hbmltYXRlZFpvb20uYW5pbWF0b3IpCiAgICAgICAgIHJldHVybjsKLSAgICBwcml2LT5h
bmltYXRlZF96b29tLmFuaW1hdG9yID0gZWNvcmVfYW5pbWF0b3JfYWRkCisgICAgcHJpdi0+YW5p
bWF0ZWRab29tLmFuaW1hdG9yID0gZWNvcmVfYW5pbWF0b3JfYWRkCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoX2V3a192aWV3X3pvb21fYW5pbWF0b3JfY2IsIHNtYXJ0
RGF0YSk7CiB9CiAKIHN0YXRpYyBXZWJDb3JlOjpWaWV3cG9ydEF0dHJpYnV0ZXMgX2V3a192aWV3
X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfY29tcHV0ZShjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykK
IHsKLSAgICBFV0tfVklFV19TRF9HRVQoZXdrVmlldywgc2QpOwotICAgIEVXS19WSUVXX1BSSVZf
R0VUKHNkLCBwcml2KTsKKyAgICBFV0tfVklFV19TRF9HRVQoZXdrVmlldywgc21hcnREYXRhKTsK
KyAgICBFV0tfVklFV19QUklWX0dFVChzbWFydERhdGEsIHByaXYpOwogCi0gICAgaW50IGRlc2t0
b3Bfd2lkdGggPSA5ODA7Ci0gICAgaW50IGRldmljZV9kcGkgPSBld2tfdXRpbF9kcGlfZ2V0KCk7
CisgICAgaW50IGRlc2t0b3BXaWR0aCA9IDk4MDsKKyAgICBpbnQgZGV2aWNlRFBJID0gZXdrX3V0
aWxfZHBpX2dldCgpOwogCi0gICAgV2ViQ29yZTo6SW50UmVjdCBhdmFpbGFibGVfcmVjdCA9IGVu
Y2xvc2luZ0ludFJlY3QocHJpdi0+cGFnZS0+Y2hyb21lKCktPmNsaWVudCgpLT5wYWdlUmVjdCgp
KTsKLSAgICBXZWJDb3JlOjpJbnRSZWN0IGRldmljZV9yZWN0ID0gZW5jbG9zaW5nSW50UmVjdChw
cml2LT5wYWdlLT5jaHJvbWUoKS0+Y2xpZW50KCktPndpbmRvd1JlY3QoKSk7CisgICAgV2ViQ29y
ZTo6SW50UmVjdCBhdmFpbGFibGVSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChwcml2LT5wYWdlLT5j
aHJvbWUoKS0+Y2xpZW50KCktPnBhZ2VSZWN0KCkpOworICAgIFdlYkNvcmU6OkludFJlY3QgZGV2
aWNlUmVjdCA9IGVuY2xvc2luZ0ludFJlY3QocHJpdi0+cGFnZS0+Y2hyb21lKCktPmNsaWVudCgp
LT53aW5kb3dSZWN0KCkpOwogCi0gICAgV2ViQ29yZTo6Vmlld3BvcnRBdHRyaWJ1dGVzIGF0dHJp
YnV0ZXMgPSBXZWJDb3JlOjpjb21wdXRlVmlld3BvcnRBdHRyaWJ1dGVzKHByaXYtPnZpZXdwb3J0
X2FyZ3VtZW50cywgZGVza3RvcF93aWR0aCwgZGV2aWNlX3JlY3Qud2lkdGgoKSwgZGV2aWNlX3Jl
Y3QuaGVpZ2h0KCksIGRldmljZV9kcGksIGF2YWlsYWJsZV9yZWN0LnNpemUoKSk7CisgICAgV2Vi
Q29yZTo6Vmlld3BvcnRBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMgPSBXZWJDb3JlOjpjb21wdXRlVmll
d3BvcnRBdHRyaWJ1dGVzKHByaXYtPnZpZXdwb3J0QXJndW1lbnRzLCBkZXNrdG9wV2lkdGgsIGRl
dmljZVJlY3Qud2lkdGgoKSwgZGV2aWNlUmVjdC5oZWlnaHQoKSwgZGV2aWNlRFBJLCBhdmFpbGFi
bGVSZWN0LnNpemUoKSk7CiAKICAgICByZXR1cm4gYXR0cmlidXRlczsKIH0KQEAgLTExMjMsMTAg
KzExMjMsMTAgQEAgRWluYV9Cb29sIGV3a192aWV3X2Jhc2Vfc21hcnRfc2V0KEV3a19WaWV3X1Nt
YXJ0X0NsYXNzKiBhcGkpCiAKIHZvaWQgZXdrX3ZpZXdfZml4ZWRfbGF5b3V0X3NpemVfc2V0KEV2
YXNfT2JqZWN0KiBld2tWaWV3LCBFdmFzX0Nvb3JkIHdpZHRoLCBFdmFzX0Nvb3JkIGhlaWdodCkK
IHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkKTsKLSAgICBFV0tf
VklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYpOworICAgIEVXS19WSUVXX1NEX0dFVF9P
Ul9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9S
RVRVUk4oc21hcnREYXRhLCBwcml2KTsKIAotICAgIFdlYkNvcmU6OkZyYW1lVmlldyogdmlldyA9
IHByaXYtPm1haW5fZnJhbWUtPnZpZXcoKTsKKyAgICBXZWJDb3JlOjpGcmFtZVZpZXcqIHZpZXcg
PSBwcml2LT5tYWluRnJhbWUtPnZpZXcoKTsKICAgICBpZiAod2lkdGggPD0gMCAmJiBoZWlnaHQg
PD0gMCkgewogICAgICAgICBpZiAoIXZpZXctPnVzZUZpeGVkTGF5b3V0KCkpCiAgICAgICAgICAg
ICByZXR1cm47CkBAIC0xMTUxLDkgKzExNTEsOSBAQCB2b2lkIGV3a192aWV3X2ZpeGVkX2xheW91
dF9zaXplX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldywgRXZhc19Db29yZCogd2lkdAog
ICAgICAgICAqd2lkdGggPSAwOwogICAgIGlmIChoZWlnaHQpCiAgICAgICAgICpoZWlnaHQgPSAw
OwotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QpOwotICAgIEVXS19W
SUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdik7Ci0gICAgV2ViQ29yZTo6RnJhbWVWaWV3
KiB2aWV3ID0gcHJpdi0+bWFpbl9mcmFtZS0+dmlldygpOworICAgIEVXS19WSUVXX1NEX0dFVF9P
Ul9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9S
RVRVUk4oc21hcnREYXRhLCBwcml2KTsKKyAgICBXZWJDb3JlOjpGcmFtZVZpZXcqIHZpZXcgPSBw
cml2LT5tYWluRnJhbWUtPnZpZXcoKTsKICAgICBpZiAodmlldy0+dXNlRml4ZWRMYXlvdXQoKSkg
ewogICAgICAgICBXZWJDb3JlOjpJbnRTaXplIHNpemUgPSB2aWV3LT5maXhlZExheW91dFNpemUo
KTsKICAgICAgICAgaWYgKHdpZHRoKQpAQCAtMTE2NSwxMiArMTE2NSwxMiBAQCB2b2lkIGV3a192
aWV3X2ZpeGVkX2xheW91dF9zaXplX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldywgRXZh
c19Db29yZCogd2lkdAogCiB2b2lkIGV3a192aWV3X3RoZW1lX3NldChFdmFzX09iamVjdCogZXdr
VmlldywgY29uc3QgY2hhciogcGF0aCkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJO
KGV3a1ZpZXcsIHNkKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYp
OworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhKTsKKyAg
ICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2KTsKICAgICBpZiAo
IWVpbmFfc3RyaW5nc2hhcmVfcmVwbGFjZSgmcHJpdi0+c2V0dGluZ3MudGhlbWUsIHBhdGgpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBXZWJDb3JlOjpGcmFtZVZpZXcqIHZpZXcgPSBwcml2LT5t
YWluX2ZyYW1lLT52aWV3KCk7CisgICAgV2ViQ29yZTo6RnJhbWVWaWV3KiB2aWV3ID0gcHJpdi0+
bWFpbkZyYW1lLT52aWV3KCk7CiAgICAgaWYgKHZpZXcpIHsKICAgICAgICAgdmlldy0+c2V0RWRq
ZVRoZW1lKFdURjo6U3RyaW5nKHBhdGgpKTsKICAgICAgICAgcHJpdi0+cGFnZS0+dGhlbWUoKS0+
dGhlbWVDaGFuZ2VkKCk7CkBAIC0xMTgwLDIxICsxMTgwLDIxIEBAIHZvaWQgZXdrX3ZpZXdfdGhl
bWVfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBjaGFyKiBwYXRoKQogCiBjb25zdCBj
aGFyKiBld2tfdmlld190aGVtZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0g
ICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgMCk7Ci0gICAgRVdLX1ZJ
RVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCAwKTsKKyAgICBFV0tfVklFV19TRF9HRVRf
T1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgMCk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRf
T1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgMCk7CiAgICAgcmV0dXJuIHByaXYtPnNldHRpbmdz
LnRoZW1lOwogfQogCiBFdmFzX09iamVjdCogZXdrX3ZpZXdfZnJhbWVfbWFpbl9nZXQoY29uc3Qg
RXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihl
d2tWaWV3LCBzZCwgMCk7Ci0gICAgcmV0dXJuIHNkLT5tYWluX2ZyYW1lOworICAgIEVXS19WSUVX
X1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCAwKTsKKyAgICByZXR1cm4gc21h
cnREYXRhLT5tYWluX2ZyYW1lOwogfQogCiBFdmFzX09iamVjdCogZXdrX3ZpZXdfZnJhbWVfZm9j
dXNlZF9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgMCk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1Jf
UkVUVVJOKHNkLCBwcml2LCAwKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1Zp
ZXcsIHNtYXJ0RGF0YSwgMCk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0
RGF0YSwgcHJpdiwgMCk7CiAKICAgICBXZWJDb3JlOjpGcmFtZSogY29yZSA9IHByaXYtPnBhZ2Ut
PmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkRnJhbWUoKTsKICAgICBpZiAoIWNvcmUpCkBAIC0x
MjA4LDMzICsxMjA4LDMzIEBAIEV2YXNfT2JqZWN0KiBld2tfdmlld19mcmFtZV9mb2N1c2VkX2dl
dChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIAogRWluYV9Cb29sIGV3a192aWV3X3VyaV9z
ZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGNvbnN0IGNoYXIqIHVyaSkKIHsKLSAgICBFV0tfVklF
V19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICByZXR1cm4g
ZXdrX2ZyYW1lX3VyaV9zZXQoc2QtPm1haW5fZnJhbWUsIHVyaSk7CisgICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIHJldHVy
biBld2tfZnJhbWVfdXJpX3NldChzbWFydERhdGEtPm1haW5fZnJhbWUsIHVyaSk7CiB9CiAKIGNv
bnN0IGNoYXIqIGV3a192aWV3X3VyaV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7
Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgMCk7Ci0gICAgcmV0
dXJuIGV3a19mcmFtZV91cmlfZ2V0KHNkLT5tYWluX2ZyYW1lKTsKKyAgICBFV0tfVklFV19TRF9H
RVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgMCk7CisgICAgcmV0dXJuIGV3a19mcmFt
ZV91cmlfZ2V0KHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSk7CiB9CiAKIGNvbnN0IGNoYXIqIGV3a192
aWV3X3RpdGxlX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklF
V19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAwKTsKLSAgICByZXR1cm4gZXdrX2ZyYW1l
X3RpdGxlX2dldChzZC0+bWFpbl9mcmFtZSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
Tihld2tWaWV3LCBzbWFydERhdGEsIDApOworICAgIHJldHVybiBld2tfZnJhbWVfdGl0bGVfZ2V0
KHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSk7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19lZGl0YWJs
ZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgcmV0dXJuIGV3a19mcmFt
ZV9lZGl0YWJsZV9nZXQoc2QtPm1haW5fZnJhbWUpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9S
RVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICByZXR1cm4gZXdrX2Zy
YW1lX2VkaXRhYmxlX2dldChzbWFydERhdGEtPm1haW5fZnJhbWUpOwogfQogCiB2b2lkIGV3a192
aWV3X2JnX2NvbG9yX3NldChFdmFzX09iamVjdCogZXdrVmlldywgaW50IHJlZCwgaW50IGdyZWVu
LCBpbnQgYmx1ZSwgaW50IGFscGhhKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrVmlldywgc2QpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGkpOwot
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGktPmJnX2NvbG9yX3NldCk7Cisg
ICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEpOworICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+YXBpKTsKKyAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmFwaS0+YmdfY29sb3Jfc2V0KTsKIAogICAgIGlm
IChhbHBoYSA8IDApIHsKICAgICAgICAgV1JOKCJBbHBoYSBsZXNzIHRoYW4gemVybyAoJWQpLiIs
IGFscGhhKTsKQEAgLTEyNDQsMjggKzEyNDQsMjggQEAgdm9pZCBld2tfdmlld19iZ19jb2xvcl9z
ZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGludCByZWQsIGludCBncmVlbiwgaW50IGJsdWUsIGkK
ICAgICAgICAgYWxwaGEgPSAyNTU7CiAgICAgfQogCi0jZGVmaW5lIENIRUNLX1BSRU1VTF9DT0xP
UihjLCBhKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYg
KGMgPCAwKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgICAgIFdSTigiQ29sb3IgY29tcG9uZW50ICIgI2MgIiBpcyBsZXNzIHRo
YW4gemVybyAoJWQpLiIsIGMpOyAgICAgICAgIFwKLSAgICAgICAgYyA9IDA7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9IGVs
c2UgaWYgKGMgPiBhKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICAgICAgV1JOKCJDb2xvciBjb21wb25lbnQgIiAjYyAiIGlzIGdyZWF0ZXIg
dGhhbiBhbHBoYSAoJWQsIGFscGhhPSVkKS4iLCBcCi0gICAgICAgICAgICBjLCBhKTsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAg
IGMgPSBhOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisjZGVmaW5lIENIRUNLX1BSRU1VTF9DT0xPUihjb2xvciwgYWxwaGEpICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoY29sb3IgPCAwKSB7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgICAgIFdSTigiQ29sb3IgY29tcG9uZW50ICIgI2NvbG9yICIgaXMgbGVzcyB0aGFuIHpl
cm8gKCVkKS4iLCBjb2xvcik7ICAgICAgICAgXAorICAgICAgICBjb2xvciA9IDA7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9
IGVsc2UgaWYgKGNvbG9yID4gYWxwaGEpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgICAgICBXUk4oIkNvbG9yIGNvbXBvbmVudCAiICNjb2xv
ciAiIGlzIGdyZWF0ZXIgdGhhbiBhbHBoYSAoJWQsIGFscGhhPSVkKS4iLCBcCisgICAgICAgICAg
ICBjb2xvciwgYWxwaGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICAgICAgY29sb3IgPSBhbHBoYTsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIH0KICAgICBDSEVD
S19QUkVNVUxfQ09MT1IocmVkLCBhbHBoYSk7CiAgICAgQ0hFQ0tfUFJFTVVMX0NPTE9SKGdyZWVu
LCBhbHBoYSk7CiAgICAgQ0hFQ0tfUFJFTVVMX0NPTE9SKGJsdWUsIGFscGhhKTsKICN1bmRlZiBD
SEVDS19QUkVNVUxfQ09MT1IKIAotICAgIHNkLT5iZ19jb2xvci5yID0gcmVkOwotICAgIHNkLT5i
Z19jb2xvci5nID0gZ3JlZW47Ci0gICAgc2QtPmJnX2NvbG9yLmIgPSBibHVlOwotICAgIHNkLT5i
Z19jb2xvci5hID0gYWxwaGE7CisgICAgc21hcnREYXRhLT5iZ19jb2xvci5yID0gcmVkOworICAg
IHNtYXJ0RGF0YS0+YmdfY29sb3IuZyA9IGdyZWVuOworICAgIHNtYXJ0RGF0YS0+YmdfY29sb3Iu
YiA9IGJsdWU7CisgICAgc21hcnREYXRhLT5iZ19jb2xvci5hID0gYWxwaGE7CiAKLSAgICBzZC0+
YXBpLT5iZ19jb2xvcl9zZXQoc2QsIHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKKyAgICBzbWFy
dERhdGEtPmFwaS0+YmdfY29sb3Jfc2V0KHNtYXJ0RGF0YSwgcmVkLCBncmVlbiwgYmx1ZSwgYWxw
aGEpOwogCi0gICAgV2ViQ29yZTo6RnJhbWVWaWV3KiB2aWV3ID0gc2QtPl9wcml2LT5tYWluX2Zy
YW1lLT52aWV3KCk7CisgICAgV2ViQ29yZTo6RnJhbWVWaWV3KiB2aWV3ID0gc21hcnREYXRhLT5f
cHJpdi0+bWFpbkZyYW1lLT52aWV3KCk7CiAgICAgaWYgKHZpZXcpIHsKICAgICAgICAgV2ViQ29y
ZTo6Q29sb3IgY29sb3I7CiAKQEAgLTEyOTAsMjEgKzEyOTAsMjEgQEAgdm9pZCBld2tfdmlld19i
Z19jb2xvcl9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcsIGludCogcmVkLCBpbnQqIGdy
ZWVuLCBpbnQKICAgICAgICAgKmJsdWUgPSAwOwogICAgIGlmIChhbHBoYSkKICAgICAgICAgKmFs
cGhhID0gMDsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkKTsKKyAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSk7CiAgICAgaWYg
KHJlZCkKLSAgICAgICAgKnJlZCA9IHNkLT5iZ19jb2xvci5yOworICAgICAgICAqcmVkID0gc21h
cnREYXRhLT5iZ19jb2xvci5yOwogICAgIGlmIChncmVlbikKLSAgICAgICAgKmdyZWVuID0gc2Qt
PmJnX2NvbG9yLmc7CisgICAgICAgICpncmVlbiA9IHNtYXJ0RGF0YS0+YmdfY29sb3IuZzsKICAg
ICBpZiAoYmx1ZSkKLSAgICAgICAgKmJsdWUgPSBzZC0+YmdfY29sb3IuYjsKKyAgICAgICAgKmJs
dWUgPSBzbWFydERhdGEtPmJnX2NvbG9yLmI7CiAgICAgaWYgKGFscGhhKQotICAgICAgICAqYWxw
aGEgPSBzZC0+YmdfY29sb3IuYTsKKyAgICAgICAgKmFscGhhID0gc21hcnREYXRhLT5iZ19jb2xv
ci5hOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfdGV4dF9zZWFyY2goY29uc3QgRXZhc19PYmpl
Y3QqIGV3a1ZpZXcsIGNvbnN0IGNoYXIqIHN0cmluZywgRWluYV9Cb29sIGNhc2VTZW5zaXRpdmUs
IEVpbmFfQm9vbCBmb3J3YXJkLCBFaW5hX0Jvb2wgd3JhcCkKIHsKLSAgICBFV0tfVklFV19TRF9H
RVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklW
X0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dF
VF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklF
V19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc3RyaW5nLCBFSU5BX0ZBTFNFKTsKICAgICBX
VEY6OlRleHRDYXNlU2Vuc2l0aXZpdHkgc2Vuc2l0aXZlOwogICAgIFdlYkNvcmU6OkZpbmREaXJl
Y3Rpb24gZGlyZWN0aW9uOwpAQCAtMTMyNSwxOCArMTMyNSwxOCBAQCBFaW5hX0Jvb2wgZXdrX3Zp
ZXdfdGV4dF9zZWFyY2goY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcsIGNvbnN0IGNoYXIqIHN0
cmluZywgRQogLyoqCiAgKiBNYXJrIG1hdGNoZXMgdGhlIGdpdmVuIHRleHQgc3RyaW5nIGluIGRv
Y3VtZW50LgogICoKLSAqIEBwYXJhbSBvIHZpZXcgb2JqZWN0IHdoZXJlIHRvIHNlYXJjaCB0ZXh0
LgorICogQHBhcmFtIGV3a1ZpZXcgdmlldyBvYmplY3Qgd2hlcmUgdG8gc2VhcmNoIHRleHQuCiAg
KiBAcGFyYW0gc3RyaW5nIHJlZmVyZW5jZSBzdHJpbmcgdG8gbWF0Y2guCiAgKiBAcGFyYW0gY2Fz
ZVNlbnNpdGl2ZSBpZiBtYXRjaCBzaG91bGQgYmUgY2FzZSBzZW5zaXRpdmUgb3Igbm90LgotICog
QHBhcmFtIGhpZ2hsaWdodCBpZiBtYXRjaGVzIHNob3VsZCBiZSBoaWdobGlnaHRlZC4KKyAqIEBw
YXJhbSBoZWlnaHRpZ2hsaWdodCBpZiBtYXRjaGVzIHNob3VsZCBiZSBoaWdobGlnaHRlZC4KICAq
IEBwYXJhbSBsaW1pdCBtYXhpbXVtIGFtb3VudCBvZiBtYXRjaGVzLCBvciB6ZXJvIHRvIHVubGlt
aXRlZC4KICAqCiAgKiBAcmV0dXJuIG51bWJlciBvZiBtYXRjaGVzLgogICovCiB1bnNpZ25lZCBp
bnQgZXdrX3ZpZXdfdGV4dF9tYXRjaGVzX21hcmsoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGNvbnN0
IGNoYXIqIHN0cmluZywgRWluYV9Cb29sIGNhc2VTZW5zaXRpdmUsIEVpbmFfQm9vbCBoaWdobGln
aHQsIHVuc2lnbmVkIGludCBsaW1pdCkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJO
KGV3a1ZpZXcsIHNkLCAwKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHBy
aXYsIDApOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRh
LCAwKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCAw
KTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc3RyaW5nLCAwKTsKICAgICBX
VEY6OlRleHRDYXNlU2Vuc2l0aXZpdHkgc2Vuc2l0aXZlOwogCkBAIC0xMzUwLDM4ICsxMzUwLDM4
IEBAIHVuc2lnbmVkIGludCBld2tfdmlld190ZXh0X21hdGNoZXNfbWFyayhFdmFzX09iamVjdCog
ZXdrVmlldywgY29uc3QgY2hhciogc3RyaW5nCiAKIEVpbmFfQm9vbCBld2tfdmlld190ZXh0X21h
dGNoZXNfdW5tYXJrX2FsbChFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19T
RF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19Q
UklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NE
X0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tf
VklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAg
ICBwcml2LT5wYWdlLT51bm1hcmtBbGxUZXh0TWF0Y2hlcygpOwogICAgIHJldHVybiBFSU5BX1RS
VUU7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld190ZXh0X21hdGNoZXNfaGlnaGxpZ2h0X3NldChF
dmFzX09iamVjdCogZXdrVmlldywgRWluYV9Cb29sIGhpZ2hsaWdodCkKIHsKLSAgICBFV0tfVklF
V19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICByZXR1cm4g
ZXdrX2ZyYW1lX3RleHRfbWF0Y2hlc19oaWdobGlnaHRfc2V0KHNkLT5tYWluX2ZyYW1lLCBoaWdo
bGlnaHQpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRh
LCBFSU5BX0ZBTFNFKTsKKyAgICByZXR1cm4gZXdrX2ZyYW1lX3RleHRfbWF0Y2hlc19oaWdobGln
aHRfc2V0KHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSwgaGlnaGxpZ2h0KTsKIH0KIAogRWluYV9Cb29s
IGV3a192aWV3X3RleHRfbWF0Y2hlc19oaWdobGlnaHRfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBl
d2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJ
TkFfRkFMU0UpOwotICAgIHJldHVybiBld2tfZnJhbWVfdGV4dF9tYXRjaGVzX2hpZ2hsaWdodF9n
ZXQoc2QtPm1haW5fZnJhbWUpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmll
dywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICByZXR1cm4gZXdrX2ZyYW1lX3RleHRfbWF0
Y2hlc19oaWdobGlnaHRfZ2V0KHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSk7CiB9CiAKIEVpbmFfQm9v
bCBld2tfdmlld19lZGl0YWJsZV9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCBl
ZGl0YWJsZSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBF
SU5BX0ZBTFNFKTsKLSAgICByZXR1cm4gZXdrX2ZyYW1lX2VkaXRhYmxlX3NldChzZC0+bWFpbl9m
cmFtZSwgZWRpdGFibGUpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywg
c21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICByZXR1cm4gZXdrX2ZyYW1lX2VkaXRhYmxlX3Nl
dChzbWFydERhdGEtPm1haW5fZnJhbWUsIGVkaXRhYmxlKTsKIH0KIAogY2hhciogZXdrX3ZpZXdf
c2VsZWN0aW9uX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklF
V19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAwKTsKLSAgICBFV0tfVklFV19QUklWX0dF
VF9PUl9SRVRVUk4oc2QsIHByaXYsIDApOwotICAgIENTdHJpbmcgcyA9IHByaXYtPnBhZ2UtPmZv
Y3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKS0+ZWRpdG9yKCktPnNlbGVjdGVk
VGV4dCgpLnV0ZjgoKTsKLSAgICBpZiAocy5pc051bGwoKSkKKyAgICBFV0tfVklFV19TRF9HRVRf
T1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgMCk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRf
T1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgMCk7CisgICAgQ1N0cmluZyBzZWxlY3RlZFN0cmlu
ZyA9IHByaXYtPnBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKS0+
ZWRpdG9yKCktPnNlbGVjdGVkVGV4dCgpLnV0ZjgoKTsKKyAgICBpZiAoc2VsZWN0ZWRTdHJpbmcu
aXNOdWxsKCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBzdHJkdXAocy5kYXRhKCkp
OworICAgIHJldHVybiBzdHJkdXAoc2VsZWN0ZWRTdHJpbmcuZGF0YSgpKTsKIH0KIAogc3RhdGlj
IEVpbmFfQm9vbCBfZXdrX3ZpZXdfZWRpdG9yX2NvbW1hbmQoRXdrX1ZpZXdfUHJpdmF0ZV9EYXRh
KiBwcml2LCBjb25zdCBjaGFyKiBjb21tYW5kLCBjb25zdCBjaGFyKiB2YWx1ZSA9IDApCkBAIC0x
MzkxLDggKzEzOTEsOCBAQCBzdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19lZGl0b3JfY29tbWFu
ZChFd2tfVmlld19Qcml2YXRlX0RhdGEqIHByaXYsIGNvbnN0IGNoYQogCiBFaW5hX0Jvb2wgZXdr
X3ZpZXdfZXhlY3V0ZV9lZGl0b3JfY29tbWFuZChFdmFzX09iamVjdCogZXdrVmlldywgY29uc3Qg
RXdrX0VkaXRvcl9Db21tYW5kIGNvbW1hbmQsIGNvbnN0IGNoYXIqIHZhbHVlKQogewotICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVX
S19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgRVdL
X1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOwor
ICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFM
U0UpOwogCiAgICAgc3dpdGNoIChjb21tYW5kKSB7CiAgICAgY2FzZSBFV0tfRURJVE9SX0NPTU1B
TkRfSU5TRVJUX0lNQUdFOgpAQCAtMTQxOSwyMyArMTQxOSwyMyBAQCBFaW5hX0Jvb2wgZXdrX3Zp
ZXdfZXhlY3V0ZV9lZGl0b3JfY29tbWFuZChFdmFzX09iamVjdCogZXdrVmlldywgY29uc3QgRXdr
X0VkaXRvcgogRWluYV9Cb29sIGV3a192aWV3X2NvbnRleHRfbWVudV9mb3J3YXJkX2V2ZW50KEV2
YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBFdmFzX0V2ZW50X01vdXNlX0Rvd24qIGRvd25FdmVu
dCkKIHsKICNpZiBFTkFCTEUoQ09OVEVYVF9NRU5VUykKLSAgICBFV0tfVklFV19TRF9HRVRfT1Jf
UkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9P
Ul9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9S
RVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklW
X0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBFaW5hX0Jv
b2wgbW91c2VfcHJlc3NfaGFuZGxlZCA9IEVJTkFfRkFMU0U7CiAKICAgICBwcml2LT5wYWdlLT5j
b250ZXh0TWVudUNvbnRyb2xsZXIoKS0+Y2xlYXJDb250ZXh0TWVudSgpOwotICAgIFdlYkNvcmU6
OkZyYW1lKiBtYWluX2ZyYW1lID0gcHJpdi0+cGFnZS0+bWFpbkZyYW1lKCk7CisgICAgV2ViQ29y
ZTo6RnJhbWUqIG1haW5GcmFtZSA9IHByaXYtPnBhZ2UtPm1haW5GcmFtZSgpOwogICAgIEV2YXNf
Q29vcmQgeCwgeTsKLSAgICBldmFzX29iamVjdF9nZW9tZXRyeV9nZXQoc2QtPnNlbGYsICZ4LCAm
eSwgMCwgMCk7CisgICAgZXZhc19vYmplY3RfZ2VvbWV0cnlfZ2V0KHNtYXJ0RGF0YS0+c2VsZiwg
JngsICZ5LCAwLCAwKTsKIAogICAgIFdlYkNvcmU6OlBsYXRmb3JtTW91c2VFdmVudCBldmVudChk
b3duRXZlbnQsIFdlYkNvcmU6OkludFBvaW50KHgsIHkpKTsKIAotICAgIGlmIChtYWluX2ZyYW1l
LT52aWV3KCkpIHsKKyAgICBpZiAobWFpbkZyYW1lLT52aWV3KCkpIHsKICAgICAgICAgbW91c2Vf
cHJlc3NfaGFuZGxlZCA9Ci0gICAgICAgICAgICBtYWluX2ZyYW1lLT5ldmVudEhhbmRsZXIoKS0+
aGFuZGxlTW91c2VQcmVzc0V2ZW50KGV2ZW50KTsKKyAgICAgICAgICAgIG1haW5GcmFtZS0+ZXZl
bnRIYW5kbGVyKCktPmhhbmRsZU1vdXNlUHJlc3NFdmVudChldmVudCk7CiAgICAgfQogCi0gICAg
aWYgKG1haW5fZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5zZW5kQ29udGV4dE1lbnVFdmVudChldmVu
dCkpCisgICAgaWYgKG1haW5GcmFtZS0+ZXZlbnRIYW5kbGVyKCktPnNlbmRDb250ZXh0TWVudUV2
ZW50KGV2ZW50KSkKICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CiAKICAgICBXZWJDb3JlOjpD
b250ZXh0TWVudSogY29yZU1lbnUgPQpAQCAtMTQ1NCw4NCArMTQ1NCw4NCBAQCBFaW5hX0Jvb2wg
ZXdrX3ZpZXdfY29udGV4dF9tZW51X2ZvcndhcmRfZXZlbnQoRXZhc19PYmplY3QqIGV3a1ZpZXcs
IGNvbnN0IEV2YXNfRQogCiBkb3VibGUgZXdrX3ZpZXdfbG9hZF9wcm9ncmVzc19nZXQoY29uc3Qg
RXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihl
d2tWaWV3LCBzZCwgLTEuMCk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBw
cml2LCAtMS4wKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0
RGF0YSwgLTEuMCk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwg
cHJpdiwgLTEuMCk7CiAgICAgcmV0dXJuIHByaXYtPnBhZ2UtPnByb2dyZXNzKCktPmVzdGltYXRl
ZFByb2dyZXNzKCk7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19zdG9wKEV2YXNfT2JqZWN0KiBl
d2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJ
TkFfRkFMU0UpOwotICAgIHJldHVybiBld2tfZnJhbWVfc3RvcChzZC0+bWFpbl9mcmFtZSk7Cisg
ICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFM
U0UpOworICAgIHJldHVybiBld2tfZnJhbWVfc3RvcChzbWFydERhdGEtPm1haW5fZnJhbWUpOwog
fQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfcmVsb2FkKEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewot
ICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwot
ICAgIHJldHVybiBld2tfZnJhbWVfcmVsb2FkKHNkLT5tYWluX2ZyYW1lKTsKKyAgICBFV0tfVklF
V19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAg
cmV0dXJuIGV3a19mcmFtZV9yZWxvYWQoc21hcnREYXRhLT5tYWluX2ZyYW1lKTsKIH0KIAogRWlu
YV9Cb29sIGV3a192aWV3X3JlbG9hZF9mdWxsKEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAg
IEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAg
IHJldHVybiBld2tfZnJhbWVfcmVsb2FkX2Z1bGwoc2QtPm1haW5fZnJhbWUpOworICAgIEVXS19W
SUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAg
ICByZXR1cm4gZXdrX2ZyYW1lX3JlbG9hZF9mdWxsKHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSk7CiB9
CiAKIEVpbmFfQm9vbCBld2tfdmlld19iYWNrKEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAg
IEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAg
IHJldHVybiBld2tfZnJhbWVfYmFjayhzZC0+bWFpbl9mcmFtZSk7CisgICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIHJldHVy
biBld2tfZnJhbWVfYmFjayhzbWFydERhdGEtPm1haW5fZnJhbWUpOwogfQogCiBFaW5hX0Jvb2wg
ZXdrX3ZpZXdfZm9yd2FyZChFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19T
RF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICByZXR1cm4gZXdr
X2ZyYW1lX2ZvcndhcmQoc2QtPm1haW5fZnJhbWUpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9S
RVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICByZXR1cm4gZXdrX2Zy
YW1lX2ZvcndhcmQoc21hcnREYXRhLT5tYWluX2ZyYW1lKTsKIH0KIAogRWluYV9Cb29sIGV3a192
aWV3X25hdmlnYXRlKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBpbnQgc3RlcHMpCiB7Ci0gICAgRVdL
X1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgcmV0
dXJuIGV3a19mcmFtZV9uYXZpZ2F0ZShzZC0+bWFpbl9mcmFtZSwgc3RlcHMpOworICAgIEVXS19W
SUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAg
ICByZXR1cm4gZXdrX2ZyYW1lX25hdmlnYXRlKHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSwgc3RlcHMp
OwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfYmFja19wb3NzaWJsZShFdmFzX09iamVjdCogZXdr
VmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5B
X0ZBTFNFKTsKLSAgICByZXR1cm4gZXdrX2ZyYW1lX2JhY2tfcG9zc2libGUoc2QtPm1haW5fZnJh
bWUpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBF
SU5BX0ZBTFNFKTsKKyAgICByZXR1cm4gZXdrX2ZyYW1lX2JhY2tfcG9zc2libGUoc21hcnREYXRh
LT5tYWluX2ZyYW1lKTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X2ZvcndhcmRfcG9zc2libGUo
RXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihl
d2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgcmV0dXJuIGV3a19mcmFtZV9mb3J3YXJkX3Bv
c3NpYmxlKHNkLT5tYWluX2ZyYW1lKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3
a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgcmV0dXJuIGV3a19mcmFtZV9mb3J3
YXJkX3Bvc3NpYmxlKHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSk7CiB9CiAKIEVpbmFfQm9vbCBld2tf
dmlld19uYXZpZ2F0ZV9wb3NzaWJsZShFdmFzX09iamVjdCogZXdrVmlldywgaW50IHN0ZXBzKQog
ewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0Up
OwotICAgIHJldHVybiBld2tfZnJhbWVfbmF2aWdhdGVfcG9zc2libGUoc2QtPm1haW5fZnJhbWUs
IHN0ZXBzKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0
YSwgRUlOQV9GQUxTRSk7CisgICAgcmV0dXJuIGV3a19mcmFtZV9uYXZpZ2F0ZV9wb3NzaWJsZShz
bWFydERhdGEtPm1haW5fZnJhbWUsIHN0ZXBzKTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X2hp
c3RvcnlfZW5hYmxlX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tf
VklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tf
VklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIEVXS19W
SUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAg
ICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNF
KTsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6QmFja0ZvcndhcmRMaXN0SW1wbCo+
KHByaXYtPnBhZ2UtPmJhY2tGb3J3YXJkTGlzdCgpKS0+ZW5hYmxlZCgpOwogfQogCiBFaW5hX0Jv
b2wgZXdrX3ZpZXdfaGlzdG9yeV9lbmFibGVfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5h
X0Jvb2wgZW5hYmxlKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywg
c2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJp
diwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBz
bWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihz
bWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIHN0YXRpY19jYXN0PFdlYkNvcmU6OkJh
Y2tGb3J3YXJkTGlzdEltcGwqPihwcml2LT5wYWdlLT5iYWNrRm9yd2FyZExpc3QoKSktPnNldEVu
YWJsZWQoZW5hYmxlKTsKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCiBFd2tfSGlzdG9yeSog
ZXdrX3ZpZXdfaGlzdG9yeV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAg
RVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgMCk7Ci0gICAgRVdLX1ZJRVdf
UFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCAwKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1Jf
UkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgMCk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1Jf
UkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgMCk7CiAgICAgaWYgKCFzdGF0aWNfY2FzdDxXZWJDb3Jl
OjpCYWNrRm9yd2FyZExpc3RJbXBsKj4ocHJpdi0+cGFnZS0+YmFja0ZvcndhcmRMaXN0KCkpLT5l
bmFibGVkKCkpIHsKICAgICAgICAgRVJSKCJhc2tlZCBoaXN0b3J5LCBidXQgaXQncyBkaXNhYmxl
ZCEgUmV0dXJuaW5nIDAhIik7CiAgICAgICAgIHJldHVybiAwOwpAQCAtMTU0MSwxODYgKzE1NDEs
MTg2IEBAIEV3a19IaXN0b3J5KiBld2tfdmlld19oaXN0b3J5X2dldChjb25zdCBFdmFzX09iamVj
dCogZXdrVmlldykKIAogZmxvYXQgZXdrX3ZpZXdfem9vbV9nZXQoY29uc3QgRXZhc19PYmplY3Qq
IGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwg
LTEuMCk7Ci0gICAgcmV0dXJuIGV3a19mcmFtZV9wYWdlX3pvb21fZ2V0KHNkLT5tYWluX2ZyYW1l
KTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgLTEu
MCk7CisgICAgcmV0dXJuIGV3a19mcmFtZV9wYWdlX3pvb21fZ2V0KHNtYXJ0RGF0YS0+bWFpbl9m
cmFtZSk7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld196b29tX3NldChFdmFzX09iamVjdCogZXdr
VmlldywgZmxvYXQgem9vbSwgRXZhc19Db29yZCBjeCwgRXZhc19Db29yZCBjeSkKK0VpbmFfQm9v
bCBld2tfdmlld196b29tX3NldChFdmFzX09iamVjdCogZXdrVmlldywgZmxvYXQgem9vbSwgRXZh
c19Db29yZCBjZW50ZXJYLCBFdmFzX0Nvb3JkIGNlbnRlclkpCiB7Ci0gICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJ
Vl9HRVQoc2QsIHByaXYpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywg
c21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVChzbWFydERhdGEs
IHByaXYpOwogCi0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5hcGksIEVJ
TkFfRkFMU0UpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+YXBpLT56
b29tX3NldCwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFM
KHNtYXJ0RGF0YS0+YXBpLCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTl9WQUwoc21hcnREYXRhLT5hcGktPnpvb21fc2V0LCBFSU5BX0ZBTFNFKTsKIAotICAgIGlm
ICghcHJpdi0+c2V0dGluZ3Muem9vbV9yYW5nZS51c2VyX3NjYWxhYmxlKSB7CisgICAgaWYgKCFw
cml2LT5zZXR0aW5ncy56b29tUmFuZ2UudXNlclNjYWxhYmxlKSB7CiAgICAgICAgIFdSTigidXNl
clNjYWxhYmxlIGlzIGZhbHNlIik7CiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwogICAgIH0K
IAotICAgIGlmICh6b29tIDwgcHJpdi0+c2V0dGluZ3Muem9vbV9yYW5nZS5taW5fc2NhbGUpIHsK
LSAgICAgICAgV1JOKCJ6b29tIGxldmVsIGlzIDwgJWYgOiAlZiIsIHByaXYtPnNldHRpbmdzLnpv
b21fcmFuZ2UubWluX3NjYWxlLCB6b29tKTsKKyAgICBpZiAoem9vbSA8IHByaXYtPnNldHRpbmdz
Lnpvb21SYW5nZS5taW5TY2FsZSkgeworICAgICAgICBXUk4oInpvb20gbGV2ZWwgaXMgPCAlZiA6
ICVmIiwgcHJpdi0+c2V0dGluZ3Muem9vbVJhbmdlLm1pblNjYWxlLCB6b29tKTsKICAgICAgICAg
cmV0dXJuIEVJTkFfRkFMU0U7CiAgICAgfQotICAgIGlmICh6b29tID4gcHJpdi0+c2V0dGluZ3Mu
em9vbV9yYW5nZS5tYXhfc2NhbGUpIHsKLSAgICAgICAgV1JOKCJ6b29tIGxldmVsIGlzID4gJWYg
OiAlZiIsIHByaXYtPnNldHRpbmdzLnpvb21fcmFuZ2UubWF4X3NjYWxlLCB6b29tKTsKKyAgICBp
ZiAoem9vbSA+IHByaXYtPnNldHRpbmdzLnpvb21SYW5nZS5tYXhTY2FsZSkgeworICAgICAgICBX
Uk4oInpvb20gbGV2ZWwgaXMgPiAlZiA6ICVmIiwgcHJpdi0+c2V0dGluZ3Muem9vbVJhbmdlLm1h
eFNjYWxlLCB6b29tKTsKICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CiAgICAgfQogCi0gICAg
X2V3a192aWV3X3pvb21fYW5pbWF0ZWRfbWFya19zdG9wKHNkKTsKLSAgICByZXR1cm4gc2QtPmFw
aS0+em9vbV9zZXQoc2QsIHpvb20sIGN4LCBjeSk7CisgICAgX2V3a192aWV3X3pvb21fYW5pbWF0
ZWRfbWFya19zdG9wKHNtYXJ0RGF0YSk7CisgICAgcmV0dXJuIHNtYXJ0RGF0YS0+YXBpLT56b29t
X3NldChzbWFydERhdGEsIHpvb20sIGNlbnRlclgsIGNlbnRlclkpOwogfQogCiBmbG9hdCBld2tf
dmlld19wYWdlX3pvb21fZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIC0xLjApOwotICAgIHJldHVybiBl
d2tfZnJhbWVfcGFnZV96b29tX2dldChzZC0+bWFpbl9mcmFtZSk7CisgICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIC0xLjApOworICAgIHJldHVybiBld2tf
ZnJhbWVfcGFnZV96b29tX2dldChzbWFydERhdGEtPm1haW5fZnJhbWUpOwogfQogCiBFaW5hX0Jv
b2wgZXdrX3ZpZXdfcGFnZV96b29tX3NldChFdmFzX09iamVjdCogZXdrVmlldywgZmxvYXQgcGFn
ZVpvb21GYWN0b3IpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBz
ZCwgRUlOQV9GQUxTRSk7Ci0gICAgcmV0dXJuIGV3a19mcmFtZV9wYWdlX3pvb21fc2V0KHNkLT5t
YWluX2ZyYW1lLCBwYWdlWm9vbUZhY3Rvcik7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
Tihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIHJldHVybiBld2tfZnJhbWVf
cGFnZV96b29tX3NldChzbWFydERhdGEtPm1haW5fZnJhbWUsIHBhZ2Vab29tRmFjdG9yKTsKIH0K
IAogZmxvYXQgZXdrX3ZpZXdfc2NhbGVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQog
ewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIC0xLjApOwotICAg
IEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgLTEuMCk7CisgICAgRVdLX1ZJ
RVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIC0xLjApOworICAgIEVXS19W
SUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIC0xLjApOwogICAgIHJldHVy
biBwcml2LT5wYWdlLT5wYWdlU2NhbGVGYWN0b3IoKTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3
X3NjYWxlX3NldChFdmFzX09iamVjdCogZXdrVmlldywgZmxvYXQgc2NhbGVGYWN0b3IsIEV2YXNf
Q29vcmQgY3gsIEV2YXNfQ29vcmQgY3kpCitFaW5hX0Jvb2wgZXdrX3ZpZXdfc2NhbGVfc2V0KEV2
YXNfT2JqZWN0KiBld2tWaWV3LCBmbG9hdCBzY2FsZUZhY3RvciwgRXZhc19Db29yZCBjZW50ZXJY
LCBFdmFzX0Nvb3JkIGNlbnRlclkpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihl
d2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJO
KHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3
a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1Jf
UkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CiAKICAgICBmbG9hdCBjdXJyZW50
U2NhbGVGYWN0b3IgPSBld2tfdmlld19zY2FsZV9nZXQoZXdrVmlldyk7CiAgICAgaWYgKGN1cnJl
bnRTY2FsZUZhY3RvciA9PSAtMSkKICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CiAKICAgICBp
bnQgeCwgeTsKLSAgICBld2tfZnJhbWVfc2Nyb2xsX3Bvc19nZXQoc2QtPm1haW5fZnJhbWUsICZ4
LCAmeSk7CisgICAgZXdrX2ZyYW1lX3Njcm9sbF9wb3NfZ2V0KHNtYXJ0RGF0YS0+bWFpbl9mcmFt
ZSwgJngsICZ5KTsKIAotICAgIHggPSBzdGF0aWNfY2FzdDxpbnQ+KCgoeCArIGN4KSAvIGN1cnJl
bnRTY2FsZUZhY3RvcikgKiBzY2FsZUZhY3RvcikgLSBjeDsKLSAgICB5ID0gc3RhdGljX2Nhc3Q8
aW50PigoKHkgKyBjeSkgLyBjdXJyZW50U2NhbGVGYWN0b3IpICogc2NhbGVGYWN0b3IpIC0gY3k7
CisgICAgeCA9IHN0YXRpY19jYXN0PGludD4oKCh4ICsgY2VudGVyWCkgLyBjdXJyZW50U2NhbGVG
YWN0b3IpICogc2NhbGVGYWN0b3IpIC0gY2VudGVyWDsKKyAgICB5ID0gc3RhdGljX2Nhc3Q8aW50
PigoKHkgKyBjZW50ZXJZKSAvIGN1cnJlbnRTY2FsZUZhY3RvcikgKiBzY2FsZUZhY3RvcikgLSBj
ZW50ZXJZOwogICAgIHByaXYtPnBhZ2UtPnNldFBhZ2VTY2FsZUZhY3RvcihzY2FsZUZhY3Rvciwg
V2ViQ29yZTo6TGF5b3V0UG9pbnQoeCwgeSkpOwogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAK
IGZsb2F0IGV3a192aWV3X3RleHRfem9vbV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcp
CiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgLTEuMCk7Ci0g
ICAgcmV0dXJuIGV3a19mcmFtZV90ZXh0X3pvb21fZ2V0KHNkLT5tYWluX2ZyYW1lKTsKKyAgICBF
V0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgLTEuMCk7CisgICAg
cmV0dXJuIGV3a19mcmFtZV90ZXh0X3pvb21fZ2V0KHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSk7CiB9
CiAKIEVpbmFfQm9vbCBld2tfdmlld190ZXh0X3pvb21fc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3
LCBmbG9hdCB0ZXh0Wm9vbUZhY3RvcikKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJO
KGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICByZXR1cm4gZXdrX2ZyYW1lX3RleHRfem9v
bV9zZXQoc2QtPm1haW5fZnJhbWUsIHRleHRab29tRmFjdG9yKTsKKyAgICBFV0tfVklFV19TRF9H
RVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgcmV0dXJu
IGV3a19mcmFtZV90ZXh0X3pvb21fc2V0KHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSwgdGV4dFpvb21G
YWN0b3IpOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfem9vbV93ZWFrX3Ntb290aF9zY2FsZV9n
ZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgcmV0dXJuIHNkLT56b29tX3dl
YWtfc21vb3RoX3NjYWxlOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywg
c21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICByZXR1cm4gc21hcnREYXRhLT56b29tX3dlYWtf
c21vb3RoX3NjYWxlOwogfQogCiB2b2lkIGV3a192aWV3X3pvb21fd2Vha19zbW9vdGhfc2NhbGVf
c2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wgc21vb3RoU2NhbGUpCiB7Ci0gICAg
RVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCk7CisgICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEpOwogICAgIHNtb290aFNjYWxlID0gISFz
bW9vdGhTY2FsZTsKLSAgICBpZiAoc2QtPnpvb21fd2Vha19zbW9vdGhfc2NhbGUgPT0gc21vb3Ro
U2NhbGUpCisgICAgaWYgKHNtYXJ0RGF0YS0+em9vbV93ZWFrX3Ntb290aF9zY2FsZSA9PSBzbW9v
dGhTY2FsZSkKICAgICAgICAgcmV0dXJuOwotICAgIHNkLT56b29tX3dlYWtfc21vb3RoX3NjYWxl
ID0gc21vb3RoU2NhbGU7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFwaSk7
Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFwaS0+em9vbV93ZWFrX3Ntb290
aF9zY2FsZV9zZXQpOwotICAgIHNkLT5hcGktPnpvb21fd2Vha19zbW9vdGhfc2NhbGVfc2V0KHNk
LCBzbW9vdGhTY2FsZSk7CisgICAgc21hcnREYXRhLT56b29tX3dlYWtfc21vb3RoX3NjYWxlID0g
c21vb3RoU2NhbGU7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRhLT5h
cGkpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+YXBpLT56b29t
X3dlYWtfc21vb3RoX3NjYWxlX3NldCk7CisgICAgc21hcnREYXRhLT5hcGktPnpvb21fd2Vha19z
bW9vdGhfc2NhbGVfc2V0KHNtYXJ0RGF0YSwgc21vb3RoU2NhbGUpOwogfQogCiBFaW5hX0Jvb2wg
ZXdrX3ZpZXdfem9vbV93ZWFrX3NldChFdmFzX09iamVjdCogZXdrVmlldywgZmxvYXQgem9vbSwg
RXZhc19Db29yZCBjZW50ZXJYLCBFdmFzX0Nvb3JkIGNlbnRlclkpCiB7Ci0gICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdf
UFJJVl9HRVQoc2QsIHByaXYpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmll
dywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVChzbWFydERh
dGEsIHByaXYpOwogCi0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5hcGks
IEVJTkFfRkFMU0UpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+YXBp
LT56b29tX3dlYWtfc2V0LCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTl9WQUwoc21hcnREYXRhLT5hcGksIEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmFwaS0+em9vbV93ZWFrX3NldCwgRUlOQV9GQUxT
RSk7CiAKLSAgICBpZiAoIXByaXYtPnNldHRpbmdzLnpvb21fcmFuZ2UudXNlcl9zY2FsYWJsZSkg
eworICAgIGlmICghcHJpdi0+c2V0dGluZ3Muem9vbVJhbmdlLnVzZXJTY2FsYWJsZSkgewogICAg
ICAgICBXUk4oInVzZXJTY2FsYWJsZSBpcyBmYWxzZSIpOwogICAgICAgICByZXR1cm4gRUlOQV9G
QUxTRTsKICAgICB9CiAKLSAgICBpZiAoem9vbSA8IHByaXYtPnNldHRpbmdzLnpvb21fcmFuZ2Uu
bWluX3NjYWxlKSB7Ci0gICAgICAgIFdSTigiem9vbSBsZXZlbCBpcyA8ICVmIDogJWYiLCBwcml2
LT5zZXR0aW5ncy56b29tX3JhbmdlLm1pbl9zY2FsZSwgem9vbSk7CisgICAgaWYgKHpvb20gPCBw
cml2LT5zZXR0aW5ncy56b29tUmFuZ2UubWluU2NhbGUpIHsKKyAgICAgICAgV1JOKCJ6b29tIGxl
dmVsIGlzIDwgJWYgOiAlZiIsIHByaXYtPnNldHRpbmdzLnpvb21SYW5nZS5taW5TY2FsZSwgem9v
bSk7CiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwogICAgIH0KLSAgICBpZiAoem9vbSA+IHBy
aXYtPnNldHRpbmdzLnpvb21fcmFuZ2UubWF4X3NjYWxlKSB7Ci0gICAgICAgIFdSTigiem9vbSBs
ZXZlbCBpcyA+ICVmIDogJWYiLCBwcml2LT5zZXR0aW5ncy56b29tX3JhbmdlLm1heF9zY2FsZSwg
em9vbSk7CisgICAgaWYgKHpvb20gPiBwcml2LT5zZXR0aW5ncy56b29tUmFuZ2UubWF4U2NhbGUp
IHsKKyAgICAgICAgV1JOKCJ6b29tIGxldmVsIGlzID4gJWYgOiAlZiIsIHByaXYtPnNldHRpbmdz
Lnpvb21SYW5nZS5tYXhTY2FsZSwgem9vbSk7CiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwog
ICAgIH0KIAotICAgIHNkLT5hbmltYXRlZF96b29tLnpvb20uc3RhcnQgPSBld2tfZnJhbWVfcGFn
ZV96b29tX2dldChzZC0+bWFpbl9mcmFtZSk7Ci0gICAgc2QtPmFuaW1hdGVkX3pvb20uem9vbS5l
bmQgPSB6b29tOwotICAgIHNkLT5hbmltYXRlZF96b29tLnpvb20uY3VycmVudCA9IHpvb207Ci0g
ICAgcmV0dXJuIHNkLT5hcGktPnpvb21fd2Vha19zZXQoc2QsIHpvb20sIGNlbnRlclgsIGNlbnRl
clkpOworICAgIHNtYXJ0RGF0YS0+YW5pbWF0ZWRfem9vbS56b29tLnN0YXJ0ID0gZXdrX2ZyYW1l
X3BhZ2Vfem9vbV9nZXQoc21hcnREYXRhLT5tYWluX2ZyYW1lKTsKKyAgICBzbWFydERhdGEtPmFu
aW1hdGVkX3pvb20uem9vbS5lbmQgPSB6b29tOworICAgIHNtYXJ0RGF0YS0+YW5pbWF0ZWRfem9v
bS56b29tLmN1cnJlbnQgPSB6b29tOworICAgIHJldHVybiBzbWFydERhdGEtPmFwaS0+em9vbV93
ZWFrX3NldChzbWFydERhdGEsIHpvb20sIGNlbnRlclgsIGNlbnRlclkpOwogfQogCiBFaW5hX0Jv
b2wgZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9tYXJrX3N0YXJ0KEV2YXNfT2JqZWN0KiBld2tWaWV3
LCBmbG9hdCB6b29tKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywg
c2QsIEVJTkFfRkFMU0UpOwotICAgIHNkLT5hbmltYXRlZF96b29tLnpvb20uc3RhcnQgPSB6b29t
OworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5B
X0ZBTFNFKTsKKyAgICBzbWFydERhdGEtPmFuaW1hdGVkX3pvb20uem9vbS5zdGFydCA9IHpvb207
CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3pvb21fYW5p
bWF0ZWRfbWFya19lbmQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGZsb2F0IHpvb20pCiB7Ci0gICAg
RVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAg
c2QtPmFuaW1hdGVkX3pvb20uem9vbS5lbmQgPSB6b29tOworICAgIEVXS19WSUVXX1NEX0dFVF9P
Ul9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBzbWFydERhdGEt
PmFuaW1hdGVkX3pvb20uem9vbS5lbmQgPSB6b29tOwogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9
CiAKIEVpbmFfQm9vbCBld2tfdmlld196b29tX2FuaW1hdGVkX21hcmtfY3VycmVudChFdmFzX09i
amVjdCogZXdrVmlldywgZmxvYXQgem9vbSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVU
VVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBzZC0+YW5pbWF0ZWRfem9vbS56b29t
LmN1cnJlbnQgPSB6b29tOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywg
c21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBzbWFydERhdGEtPmFuaW1hdGVkX3pvb20uem9v
bS5jdXJyZW50ID0gem9vbTsKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCiBFaW5hX0Jvb2wg
ZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9tYXJrX3N0b3AoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7
Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7
Ci0gICAgX2V3a192aWV3X3pvb21fYW5pbWF0ZWRfbWFya19zdG9wKHNkKTsKKyAgICBFV0tfVklF
V19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAg
X2V3a192aWV3X3pvb21fYW5pbWF0ZWRfbWFya19zdG9wKHNtYXJ0RGF0YSk7CiAgICAgcmV0dXJu
IEVJTkFfVFJVRTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3pvb21fYW5pbWF0ZWRfc2V0KEV2
YXNfT2JqZWN0KiBld2tWaWV3LCBmbG9hdCB6b29tLCBmbG9hdCBkdXJhdGlvbiwgRXZhc19Db29y
ZCBjZW50ZXJYLCBFdmFzX0Nvb3JkIGNlbnRlclkpCiB7CiAgICAgZG91YmxlIG5vdzsKLSAgICBF
V0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBF
V0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwotICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+YXBpLCBFSU5BX0ZBTFNFKTsKLSAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmFwaS0+em9vbV93ZWFrX3NldCwgRUlO
QV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERh
dGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERh
dGEsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZB
TChzbWFydERhdGEtPmFwaSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk5fVkFMKHNtYXJ0RGF0YS0+YXBpLT56b29tX3dlYWtfc2V0LCBFSU5BX0ZBTFNFKTsKIAot
ICAgIGlmICghcHJpdi0+c2V0dGluZ3Muem9vbV9yYW5nZS51c2VyX3NjYWxhYmxlKSB7CisgICAg
aWYgKCFwcml2LT5zZXR0aW5ncy56b29tUmFuZ2UudXNlclNjYWxhYmxlKSB7CiAgICAgICAgIFdS
TigidXNlclNjYWxhYmxlIGlzIGZhbHNlIik7CiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwog
ICAgIH0KIAotICAgIGlmICh6b29tIDwgcHJpdi0+c2V0dGluZ3Muem9vbV9yYW5nZS5taW5fc2Nh
bGUpIHsKLSAgICAgICAgV1JOKCJ6b29tIGxldmVsIGlzIDwgJWYgOiAlZiIsIHByaXYtPnNldHRp
bmdzLnpvb21fcmFuZ2UubWluX3NjYWxlLCB6b29tKTsKKyAgICBpZiAoem9vbSA8IHByaXYtPnNl
dHRpbmdzLnpvb21SYW5nZS5taW5TY2FsZSkgeworICAgICAgICBXUk4oInpvb20gbGV2ZWwgaXMg
PCAlZiA6ICVmIiwgcHJpdi0+c2V0dGluZ3Muem9vbVJhbmdlLm1pblNjYWxlLCB6b29tKTsKICAg
ICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CiAgICAgfQotICAgIGlmICh6b29tID4gcHJpdi0+c2V0
dGluZ3Muem9vbV9yYW5nZS5tYXhfc2NhbGUpIHsKLSAgICAgICAgV1JOKCJ6b29tIGxldmVsIGlz
ID4gJWYgOiAlZiIsIHByaXYtPnNldHRpbmdzLnpvb21fcmFuZ2UubWF4X3NjYWxlLCB6b29tKTsK
KyAgICBpZiAoem9vbSA+IHByaXYtPnNldHRpbmdzLnpvb21SYW5nZS5tYXhTY2FsZSkgeworICAg
ICAgICBXUk4oInpvb20gbGV2ZWwgaXMgPiAlZiA6ICVmIiwgcHJpdi0+c2V0dGluZ3Muem9vbVJh
bmdlLm1heFNjYWxlLCB6b29tKTsKICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CiAgICAgfQog
Ci0gICAgaWYgKHByaXYtPmFuaW1hdGVkX3pvb20uYW5pbWF0b3IpCi0gICAgICAgIHByaXYtPmFu
aW1hdGVkX3pvb20uem9vbS5zdGFydCA9IF9ld2tfdmlld196b29tX2FuaW1hdGVkX2N1cnJlbnQo
cHJpdik7CisgICAgaWYgKHByaXYtPmFuaW1hdGVkWm9vbS5hbmltYXRvcikKKyAgICAgICAgcHJp
di0+YW5pbWF0ZWRab29tLnpvb20uc3RhcnQgPSBfZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9jdXJy
ZW50KHByaXYpOwogICAgIGVsc2UgewotICAgICAgICBwcml2LT5hbmltYXRlZF96b29tLnpvb20u
c3RhcnQgPSBld2tfZnJhbWVfcGFnZV96b29tX2dldChzZC0+bWFpbl9mcmFtZSk7Ci0gICAgICAg
IF9ld2tfdmlld196b29tX2FuaW1hdGlvbl9zdGFydChzZCk7CisgICAgICAgIHByaXYtPmFuaW1h
dGVkWm9vbS56b29tLnN0YXJ0ID0gZXdrX2ZyYW1lX3BhZ2Vfem9vbV9nZXQoc21hcnREYXRhLT5t
YWluX2ZyYW1lKTsKKyAgICAgICAgX2V3a192aWV3X3pvb21fYW5pbWF0aW9uX3N0YXJ0KHNtYXJ0
RGF0YSk7CiAgICAgfQogCiAgICAgaWYgKGNlbnRlclggPCAwKQpAQCAtMTcyOSw1MCArMTcyOSw1
MCBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9zZXQoRXZhc19PYmplY3QqIGV3
a1ZpZXcsIGZsb2F0IHpvb20sIGZsb2F0IGR1cgogICAgICAgICBjZW50ZXJZID0gMDsKIAogICAg
IG5vdyA9IGVjb3JlX2xvb3BfdGltZV9nZXQoKTsKLSAgICBwcml2LT5hbmltYXRlZF96b29tLnRp
bWUuc3RhcnQgPSBub3c7Ci0gICAgcHJpdi0+YW5pbWF0ZWRfem9vbS50aW1lLmVuZCA9IG5vdyAr
IGR1cmF0aW9uOwotICAgIHByaXYtPmFuaW1hdGVkX3pvb20udGltZS5kdXJhdGlvbiA9IGR1cmF0
aW9uOwotICAgIHByaXYtPmFuaW1hdGVkX3pvb20uem9vbS5lbmQgPSB6b29tOwotICAgIHByaXYt
PmFuaW1hdGVkX3pvb20uem9vbS5yYW5nZSA9IChwcml2LT5hbmltYXRlZF96b29tLnpvb20uZW5k
IC0gcHJpdi0+YW5pbWF0ZWRfem9vbS56b29tLnN0YXJ0KTsKLSAgICBwcml2LT5hbmltYXRlZF96
b29tLmNlbnRlci54ID0gY2VudGVyWDsKLSAgICBwcml2LT5hbmltYXRlZF96b29tLmNlbnRlci55
ID0gY2VudGVyWTsKLSAgICBzZC0+YW5pbWF0ZWRfem9vbS56b29tLmN1cnJlbnQgPSBwcml2LT5h
bmltYXRlZF96b29tLnpvb20uc3RhcnQ7Ci0gICAgc2QtPmFuaW1hdGVkX3pvb20uem9vbS5zdGFy
dCA9IHByaXYtPmFuaW1hdGVkX3pvb20uem9vbS5zdGFydDsKLSAgICBzZC0+YW5pbWF0ZWRfem9v
bS56b29tLmVuZCA9IHByaXYtPmFuaW1hdGVkX3pvb20uem9vbS5lbmQ7CisgICAgcHJpdi0+YW5p
bWF0ZWRab29tLnRpbWUuc3RhcnQgPSBub3c7CisgICAgcHJpdi0+YW5pbWF0ZWRab29tLnRpbWUu
ZW5kID0gbm93ICsgZHVyYXRpb247CisgICAgcHJpdi0+YW5pbWF0ZWRab29tLnRpbWUuZHVyYXRp
b24gPSBkdXJhdGlvbjsKKyAgICBwcml2LT5hbmltYXRlZFpvb20uem9vbS5lbmQgPSB6b29tOwor
ICAgIHByaXYtPmFuaW1hdGVkWm9vbS56b29tLnJhbmdlID0gKHByaXYtPmFuaW1hdGVkWm9vbS56
b29tLmVuZCAtIHByaXYtPmFuaW1hdGVkWm9vbS56b29tLnN0YXJ0KTsKKyAgICBwcml2LT5hbmlt
YXRlZFpvb20uY2VudGVyLnggPSBjZW50ZXJYOworICAgIHByaXYtPmFuaW1hdGVkWm9vbS5jZW50
ZXIueSA9IGNlbnRlclk7CisgICAgc21hcnREYXRhLT5hbmltYXRlZF96b29tLnpvb20uY3VycmVu
dCA9IHByaXYtPmFuaW1hdGVkWm9vbS56b29tLnN0YXJ0OworICAgIHNtYXJ0RGF0YS0+YW5pbWF0
ZWRfem9vbS56b29tLnN0YXJ0ID0gcHJpdi0+YW5pbWF0ZWRab29tLnpvb20uc3RhcnQ7CisgICAg
c21hcnREYXRhLT5hbmltYXRlZF96b29tLnpvb20uZW5kID0gcHJpdi0+YW5pbWF0ZWRab29tLnpv
b20uZW5kOwogCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3
X3ByZV9yZW5kZXJfcmVnaW9uKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFdmFzX0Nvb3JkIHgsIEV2
YXNfQ29vcmQgeSwgRXZhc19Db29yZCB3aWR0aCwgRXZhc19Db29yZCBoZWlnaHQsIGZsb2F0IHpv
b20pCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9G
QUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZB
TFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmFwaS0+cHJlX3Jl
bmRlcl9yZWdpb24sIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9P
Ul9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5hcGktPnByZV9yZW5kZXJfcmVnaW9uLCBFSU5B
X0ZBTFNFKTsKICAgICBmbG9hdCBjdXJfem9vbTsKLSAgICBFdmFzX0Nvb3JkIGN3LCBjaDsKKyAg
ICBFdmFzX0Nvb3JkIGNvbnRlbnRzV2lkdGgsIGNvbnRlbnRzSGVpZ2h0OwogCiAgICAgLyogV2hl
biBkb2luZyBhbmltYXRlZCB6b29tIGl0J3Mgbm90IHBvc3NpYmxlIHRvIGNhbGwgcHJlLXJlbmRl
ciBzaW5jZSBpdAogICAgICAqIHdvdWxkIHNjcmV3IHVwIHBhcmFtZXRlcnMgdGhhdCBhbmltYXRp
b24gaXMgY3VycmVudGx5IHVzaW5nCiAgICAgICovCi0gICAgaWYgKHByaXYtPmFuaW1hdGVkX3pv
b20uYW5pbWF0b3IpCisgICAgaWYgKHByaXYtPmFuaW1hdGVkWm9vbS5hbmltYXRvcikKICAgICAg
ICAgcmV0dXJuIEVJTkFfRkFMU0U7CiAKLSAgICBjdXJfem9vbSA9IGV3a19mcmFtZV9wYWdlX3pv
b21fZ2V0KHNkLT5tYWluX2ZyYW1lKTsKKyAgICBjdXJfem9vbSA9IGV3a19mcmFtZV9wYWdlX3pv
b21fZ2V0KHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSk7CiAKICAgICBpZiAoY3VyX3pvb20gPCAwLjAw
MDAxKQogICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKLSAgICBpZiAoIWV3a19mcmFtZV9jb250
ZW50c19zaXplX2dldChzZC0+bWFpbl9mcmFtZSwgJmN3LCAmY2gpKQorICAgIGlmICghZXdrX2Zy
YW1lX2NvbnRlbnRzX3NpemVfZ2V0KHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSwgJmNvbnRlbnRzV2lk
dGgsICZjb250ZW50c0hlaWdodCkpCiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwogCi0gICAg
Y3cgKj0gem9vbSAvIGN1cl96b29tOwotICAgIGNoICo9IHpvb20gLyBjdXJfem9vbTsKLSAgICBE
QkcoInJlZ2lvbiAlZCwlZCslZHglZCBAICVmIGNvbnRlbnRzPSVkeCVkIiwgeCwgeSwgd2lkdGgs
IGhlaWdodCwgem9vbSwgY3csIGNoKTsKKyAgICBjb250ZW50c1dpZHRoICo9IHpvb20gLyBjdXJf
em9vbTsKKyAgICBjb250ZW50c0hlaWdodCAqPSB6b29tIC8gY3VyX3pvb207CisgICAgREJHKCJy
ZWdpb24gJWQsJWQrJWR4JWQgQCAlZiBjb250ZW50cz0lZHglZCIsIHgsIHksIHdpZHRoLCBoZWln
aHQsIHpvb20sIGNvbnRlbnRzV2lkdGgsIGNvbnRlbnRzSGVpZ2h0KTsKIAotICAgIGlmICh4ICsg
d2lkdGggPiBjdykKLSAgICAgICAgd2lkdGggPSBjdyAtIHg7CisgICAgaWYgKHggKyB3aWR0aCA+
IGNvbnRlbnRzV2lkdGgpCisgICAgICAgIHdpZHRoID0gY29udGVudHNXaWR0aCAtIHg7CiAKLSAg
ICBpZiAoeSArIGhlaWdodCA+IGNoKQotICAgICAgICBoZWlnaHQgPSBjaCAtIHk7CisgICAgaWYg
KHkgKyBoZWlnaHQgPiBjb250ZW50c0hlaWdodCkKKyAgICAgICAgaGVpZ2h0ID0gY29udGVudHNI
ZWlnaHQgLSB5OwogCiAgICAgaWYgKHggPCAwKSB7CiAgICAgICAgIHdpZHRoICs9IHg7CkBAIC0x
NzgzLDY0ICsxNzgzLDY0IEBAIEVpbmFfQm9vbCBld2tfdmlld19wcmVfcmVuZGVyX3JlZ2lvbihF
dmFzX09iamVjdCogZXdrVmlldywgRXZhc19Db29yZCB4LCBFdmFzX0NvCiAgICAgICAgIHkgPSAw
OwogICAgIH0KIAotICAgIHJldHVybiBzZC0+YXBpLT5wcmVfcmVuZGVyX3JlZ2lvbihzZCwgeCwg
eSwgd2lkdGgsIGhlaWdodCwgem9vbSk7CisgICAgcmV0dXJuIHNtYXJ0RGF0YS0+YXBpLT5wcmVf
cmVuZGVyX3JlZ2lvbihzbWFydERhdGEsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHpvb20pOwogfQog
CiBFaW5hX0Jvb2wgZXdrX3ZpZXdfcHJlX3JlbmRlcl9yZWxhdGl2ZV9yYWRpdXMoRXZhc19PYmpl
Y3QqIGV3a1ZpZXcsIHVuc2lnbmVkIGludCBudW1iZXIpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9H
RVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTl9WQUwoc2QtPmFwaS0+cHJlX3JlbmRlcl9yZWxhdGl2ZV9yYWRpdXMsIEVJTkFf
RkFMU0UpOwotICAgIGZsb2F0IGN1cl96b29tOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRV
Uk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dF
VF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5hcGktPnByZV9yZW5kZXJfcmVsYXRpdmVf
cmFkaXVzLCBFSU5BX0ZBTFNFKTsKKyAgICBmbG9hdCBjdXJyZW50Wm9vbTsKIAotICAgIGlmIChw
cml2LT5hbmltYXRlZF96b29tLmFuaW1hdG9yKQorICAgIGlmIChwcml2LT5hbmltYXRlZFpvb20u
YW5pbWF0b3IpCiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwogCi0gICAgY3VyX3pvb20gPSBl
d2tfZnJhbWVfcGFnZV96b29tX2dldChzZC0+bWFpbl9mcmFtZSk7Ci0gICAgcmV0dXJuIHNkLT5h
cGktPnByZV9yZW5kZXJfcmVsYXRpdmVfcmFkaXVzKHNkLCBudW1iZXIsIGN1cl96b29tKTsKKyAg
ICBjdXJyZW50Wm9vbSA9IGV3a19mcmFtZV9wYWdlX3pvb21fZ2V0KHNtYXJ0RGF0YS0+bWFpbl9m
cmFtZSk7CisgICAgcmV0dXJuIHNtYXJ0RGF0YS0+YXBpLT5wcmVfcmVuZGVyX3JlbGF0aXZlX3Jh
ZGl1cyhzbWFydERhdGEsIG51bWJlciwgY3VycmVudFpvb20pOwogfQogCiB1bnNpZ25lZCBpbnQg
ZXdrX3ZpZXdfaW1oX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tf
VklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAwKTsKLSAgICBFV0tfVklFV19QUklW
X0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIDApOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRV
Uk4oZXdrVmlldywgc21hcnREYXRhLCAwKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRV
Uk4oc21hcnREYXRhLCBwcml2LCAwKTsKICAgICByZXR1cm4gcHJpdi0+aW1oOwogfQogCiB2b2lk
IGV3a192aWV3X3ByZV9yZW5kZXJfY2FuY2VsKEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAg
IEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QpOwotICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOKHNkLT5hcGktPnByZV9yZW5kZXJfY2FuY2VsKTsKLSAgICBzZC0+YXBp
LT5wcmVfcmVuZGVyX2NhbmNlbChzZCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihl
d2tWaWV3LCBzbWFydERhdGEpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0
RGF0YS0+YXBpLT5wcmVfcmVuZGVyX2NhbmNlbCk7CisgICAgc21hcnREYXRhLT5hcGktPnByZV9y
ZW5kZXJfY2FuY2VsKHNtYXJ0RGF0YSk7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19lbmFibGVf
cmVuZGVyKGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dF
VF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOX1ZBTChzZC0+YXBpLT5lbmFibGVfcmVuZGVyLCBFSU5BX0ZBTFNFKTsKLSAg
ICByZXR1cm4gc2QtPmFwaS0+ZW5hYmxlX3JlbmRlcihzZCk7CisgICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmFwaS0+ZW5hYmxlX3JlbmRlciwgRUlO
QV9GQUxTRSk7CisgICAgcmV0dXJuIHNtYXJ0RGF0YS0+YXBpLT5lbmFibGVfcmVuZGVyKHNtYXJ0
RGF0YSk7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19kaXNhYmxlX3JlbmRlcihjb25zdCBFdmFz
X09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1Zp
ZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwo
c2QtPmFwaS0+ZGlzYWJsZV9yZW5kZXIsIEVJTkFfRkFMU0UpOwotICAgIHJldHVybiBzZC0+YXBp
LT5kaXNhYmxlX3JlbmRlcihzZCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tW
aWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOX1ZBTChzbWFydERhdGEtPmFwaS0+ZGlzYWJsZV9yZW5kZXIsIEVJTkFfRkFMU0UpOworICAg
IHJldHVybiBzbWFydERhdGEtPmFwaS0+ZGlzYWJsZV9yZW5kZXIoc21hcnREYXRhKTsKIH0KIAog
Y29uc3QgY2hhciogZXdrX3ZpZXdfc2V0dGluZ191c2VyX2FnZW50X2dldChjb25zdCBFdmFzX09i
amVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcs
IHNkLCAwKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIDApOwot
ICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy51c2VyX2FnZW50OworICAgIEVXS19WSUVXX1NEX0dF
VF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCAwKTsKKyAgICBFV0tfVklFV19QUklWX0dF
VF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCAwKTsKKyAgICByZXR1cm4gcHJpdi0+c2V0dGlu
Z3MudXNlckFnZW50OwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ191c2VyX2FnZW50
X3NldChFdmFzX09iamVjdCogZXdrVmlldywgY29uc3QgY2hhciogdXNlckFnZW50KQogewotICAg
IEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAg
IEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7Ci0gICAg
aWYgKGVpbmFfc3RyaW5nc2hhcmVfcmVwbGFjZSgmcHJpdi0+c2V0dGluZ3MudXNlcl9hZ2VudCwg
dXNlckFnZW50KSkgewotICAgICAgICBXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEVmbCogY2xp
ZW50ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRFZmwqPihwcml2LT5t
YWluX2ZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCkpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9S
RVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklW
X0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBpZiAoZWlu
YV9zdHJpbmdzaGFyZV9yZXBsYWNlKCZwcml2LT5zZXR0aW5ncy51c2VyQWdlbnQsIHVzZXJBZ2Vu
dCkpIHsKKyAgICAgICAgV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRFZmwqIGNsaWVudCA9IHN0
YXRpY19jYXN0PFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50RWZsKj4ocHJpdi0+bWFpbkZyYW1l
LT5sb2FkZXIoKS0+Y2xpZW50KCkpOwogICAgICAgICBjbGllbnQtPnNldEN1c3RvbVVzZXJBZ2Vu
dChTdHJpbmc6OmZyb21VVEY4KHVzZXJBZ2VudCkpOwogICAgIH0KICAgICByZXR1cm4gRUlOQV9U
UlVFOwpAQCAtMTg0OCwyMjMgKzE4NDgsMjIzIEBAIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5n
X3VzZXJfYWdlbnRfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBjaGFyKiB1c2VyCiAK
IGNvbnN0IGNoYXIqIGV3a192aWV3X3NldHRpbmdfdXNlcl9zdHlsZXNoZWV0X2dldChjb25zdCBF
dmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3
a1ZpZXcsIHNkLCAwKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYs
IDApOwotICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy51c2VyX3N0eWxlc2hlZXQ7CisgICAgRVdL
X1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIDApOworICAgIEVXS19W
SUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIDApOworICAgIHJldHVybiBw
cml2LT5zZXR0aW5ncy51c2VyU3R5bGVzaGVldDsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3Nl
dHRpbmdfdXNlcl9zdHlsZXNoZWV0X3NldChFdmFzX09iamVjdCogZXdrVmlldywgY29uc3QgY2hh
ciogdXJpKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJ
TkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlO
QV9GQUxTRSk7Ci0gICAgaWYgKGVpbmFfc3RyaW5nc2hhcmVfcmVwbGFjZSgmcHJpdi0+c2V0dGlu
Z3MudXNlcl9zdHlsZXNoZWV0LCB1cmkpKSB7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
Tihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VU
X09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIGlmIChlaW5hX3N0
cmluZ3NoYXJlX3JlcGxhY2UoJnByaXYtPnNldHRpbmdzLnVzZXJTdHlsZXNoZWV0LCB1cmkpKSB7
CiAgICAgICAgIFdlYkNvcmU6OktVUkwga3VybChXZWJDb3JlOjpLVVJMKCksIFN0cmluZzo6ZnJv
bVVURjgodXJpKSk7Ci0gICAgICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNldFVzZXJTdHlsZVNo
ZWV0TG9jYXRpb24oa3VybCk7CisgICAgICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0VXNlclN0
eWxlU2hlZXRMb2NhdGlvbihrdXJsKTsKICAgICB9CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0K
IAogRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfYXV0b19sb2FkX2ltYWdlc19nZXQoY29uc3Qg
RXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihl
d2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJO
KHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKLSAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuYXV0b19s
b2FkX2ltYWdlczsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0
RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0
RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmF1dG9M
b2FkSW1hZ2VzOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19hdXRvX2xvYWRfaW1h
Z2VzX3NldChFdmFzX09iamVjdCogZXdrVmlldywgRWluYV9Cb29sIGF1dG9tYXRpYykKIHsKLSAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAg
ICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOworICAg
IEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNF
KTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5B
X0ZBTFNFKTsKICAgICBhdXRvbWF0aWMgPSAhIWF1dG9tYXRpYzsKLSAgICBpZiAocHJpdi0+c2V0
dGluZ3MuYXV0b19sb2FkX2ltYWdlcyAhPSBhdXRvbWF0aWMpIHsKLSAgICAgICAgcHJpdi0+cGFn
ZV9zZXR0aW5ncy0+c2V0TG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5KGF1dG9tYXRpYyk7Ci0gICAg
ICAgIHByaXYtPnNldHRpbmdzLmF1dG9fbG9hZF9pbWFnZXMgPSBhdXRvbWF0aWM7CisgICAgaWYg
KHByaXYtPnNldHRpbmdzLmF1dG9Mb2FkSW1hZ2VzICE9IGF1dG9tYXRpYykgeworICAgICAgICBw
cml2LT5wYWdlU2V0dGluZ3MtPnNldExvYWRzSW1hZ2VzQXV0b21hdGljYWxseShhdXRvbWF0aWMp
OworICAgICAgICBwcml2LT5zZXR0aW5ncy5hdXRvTG9hZEltYWdlcyA9IGF1dG9tYXRpYzsKICAg
ICB9CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3NldHRp
bmdfYXV0b19zaHJpbmtfaW1hZ2VzX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsK
LSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsK
LSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwot
ICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5hdXRvX3Nocmlua19pbWFnZXM7CisgICAgRVdLX1ZJ
RVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAg
IEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0Up
OworICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5hdXRvU2hyaW5rSW1hZ2VzOwogfQogCiBFaW5h
X0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19hdXRvX3Nocmlua19pbWFnZXNfc2V0KEV2YXNfT2JqZWN0
KiBld2tWaWV3LCBFaW5hX0Jvb2wgYXV0b21hdGljKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9P
Ul9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VU
X09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BS
SVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIGF1dG9t
YXRpYyA9ICEhYXV0b21hdGljOwotICAgIGlmIChwcml2LT5zZXR0aW5ncy5hdXRvX3Nocmlua19p
bWFnZXMgIT0gYXV0b21hdGljKSB7Ci0gICAgICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNldFNo
cmlua3NTdGFuZGFsb25lSW1hZ2VzVG9GaXQoYXV0b21hdGljKTsKLSAgICAgICAgcHJpdi0+c2V0
dGluZ3MuYXV0b19zaHJpbmtfaW1hZ2VzID0gYXV0b21hdGljOworICAgIGlmIChwcml2LT5zZXR0
aW5ncy5hdXRvU2hyaW5rSW1hZ2VzICE9IGF1dG9tYXRpYykgeworICAgICAgICBwcml2LT5wYWdl
U2V0dGluZ3MtPnNldFNocmlua3NTdGFuZGFsb25lSW1hZ2VzVG9GaXQoYXV0b21hdGljKTsKKyAg
ICAgICAgcHJpdi0+c2V0dGluZ3MuYXV0b1Nocmlua0ltYWdlcyA9IGF1dG9tYXRpYzsKICAgICB9
CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdf
ZW5hYmxlX2F1dG9fcmVzaXplX3dpbmRvd19nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcp
CiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxT
RSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNF
KTsKLSAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZW5hYmxlX2F1dG9fcmVzaXplX3dpbmRvdzsK
KyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9G
QUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwg
RUlOQV9GQUxTRSk7CisgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmVuYWJsZUF1dG9SZXNpemVX
aW5kb3c7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2VuYWJsZV9hdXRvX3Jlc2l6
ZV93aW5kb3dfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wgcmVzaXphYmxlKQog
ewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0Up
OwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7
Ci0gICAgcHJpdi0+c2V0dGluZ3MuZW5hYmxlX2F1dG9fcmVzaXplX3dpbmRvdyA9IHJlc2l6YWJs
ZTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlO
QV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJp
diwgRUlOQV9GQUxTRSk7CisgICAgcHJpdi0+c2V0dGluZ3MuZW5hYmxlQXV0b1Jlc2l6ZVdpbmRv
dyA9IHJlc2l6YWJsZTsKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCiBFaW5hX0Jvb2wgZXdr
X3ZpZXdfc2V0dGluZ19lbmFibGVfc2NyaXB0c19nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1Zp
ZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9G
QUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZB
TFNFKTsKLSAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZW5hYmxlX3NjcmlwdHM7CisgICAgRVdL
X1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOwor
ICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFM
U0UpOworICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5lbmFibGVTY3JpcHRzOwogfQogCiBFaW5h
X0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19lbmFibGVfc2NyaXB0c19zZXQoRXZhc19PYmplY3QqIGV3
a1ZpZXcsIEVpbmFfQm9vbCBlbmFibGUpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
Tihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVU
VVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJO
KGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRf
T1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgZW5hYmxlID0gISFl
bmFibGU7Ci0gICAgaWYgKHByaXYtPnNldHRpbmdzLmVuYWJsZV9zY3JpcHRzICE9IGVuYWJsZSkg
ewotICAgICAgICBwcml2LT5wYWdlX3NldHRpbmdzLT5zZXRKYXZhU2NyaXB0RW5hYmxlZChlbmFi
bGUpOwotICAgICAgICBwcml2LT5zZXR0aW5ncy5lbmFibGVfc2NyaXB0cyA9IGVuYWJsZTsKKyAg
ICBpZiAocHJpdi0+c2V0dGluZ3MuZW5hYmxlU2NyaXB0cyAhPSBlbmFibGUpIHsKKyAgICAgICAg
cHJpdi0+cGFnZVNldHRpbmdzLT5zZXRKYXZhU2NyaXB0RW5hYmxlZChlbmFibGUpOworICAgICAg
ICBwcml2LT5zZXR0aW5ncy5lbmFibGVTY3JpcHRzID0gZW5hYmxlOwogICAgIH0KICAgICByZXR1
cm4gRUlOQV9UUlVFOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19lbmFibGVfcGx1
Z2luc19nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJ
Vl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKLSAgICByZXR1cm4gcHJpdi0+
c2V0dGluZ3MuZW5hYmxlX3BsdWdpbnM7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihl
d2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09S
X1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIHJldHVybiBwcml2LT5z
ZXR0aW5ncy5lbmFibGVQbHVnaW5zOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19l
bmFibGVfcGx1Z2luc19zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCBlbmFibGUp
CiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxT
RSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNF
KTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlO
QV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJp
diwgRUlOQV9GQUxTRSk7CiAgICAgZW5hYmxlID0gISFlbmFibGU7Ci0gICAgaWYgKHByaXYtPnNl
dHRpbmdzLmVuYWJsZV9wbHVnaW5zICE9IGVuYWJsZSkgewotICAgICAgICBwcml2LT5wYWdlX3Nl
dHRpbmdzLT5zZXRQbHVnaW5zRW5hYmxlZChlbmFibGUpOwotICAgICAgICBwcml2LT5zZXR0aW5n
cy5lbmFibGVfcGx1Z2lucyA9IGVuYWJsZTsKKyAgICBpZiAocHJpdi0+c2V0dGluZ3MuZW5hYmxl
UGx1Z2lucyAhPSBlbmFibGUpIHsKKyAgICAgICAgcHJpdi0+cGFnZVNldHRpbmdzLT5zZXRQbHVn
aW5zRW5hYmxlZChlbmFibGUpOworICAgICAgICBwcml2LT5zZXR0aW5ncy5lbmFibGVQbHVnaW5z
ID0gZW5hYmxlOwogICAgIH0KICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCiBFaW5hX0Jvb2wg
ZXdrX3ZpZXdfc2V0dGluZ19lbmFibGVfZnJhbWVfZmxhdHRlbmluZ19nZXQoY29uc3QgRXZhc19P
YmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3
LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBw
cml2LCBFSU5BX0ZBTFNFKTsKLSAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZW5hYmxlX2ZyYW1l
X2ZsYXR0ZW5pbmc7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFy
dERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFy
dERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5lbmFi
bGVGcmFtZUZsYXR0ZW5pbmc7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2VuYWJs
ZV9mcmFtZV9mbGF0dGVuaW5nX3NldChFdmFzX09iamVjdCogZXdrVmlldywgRWluYV9Cb29sIGVu
YWJsZSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5B
X0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFf
RkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRh
LCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRh
LCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBlbmFibGUgPSAhIWVuYWJsZTsKLSAgICBpZiAocHJp
di0+c2V0dGluZ3MuZW5hYmxlX2ZyYW1lX2ZsYXR0ZW5pbmcgIT0gZW5hYmxlKSB7Ci0gICAgICAg
IHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNldEZyYW1lRmxhdHRlbmluZ0VuYWJsZWQoZW5hYmxlKTsK
LSAgICAgICAgcHJpdi0+c2V0dGluZ3MuZW5hYmxlX2ZyYW1lX2ZsYXR0ZW5pbmcgPSBlbmFibGU7
CisgICAgaWYgKHByaXYtPnNldHRpbmdzLmVuYWJsZUZyYW1lRmxhdHRlbmluZyAhPSBlbmFibGUp
IHsKKyAgICAgICAgcHJpdi0+cGFnZVNldHRpbmdzLT5zZXRGcmFtZUZsYXR0ZW5pbmdFbmFibGVk
KGVuYWJsZSk7CisgICAgICAgIHByaXYtPnNldHRpbmdzLmVuYWJsZUZyYW1lRmxhdHRlbmluZyA9
IGVuYWJsZTsKICAgICB9CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAogRWluYV9Cb29sIGV3
a192aWV3X3NldHRpbmdfc2NyaXB0c193aW5kb3dfb3Blbl9nZXQoY29uc3QgRXZhc19PYmplY3Qq
IGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwg
RUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBF
SU5BX0ZBTFNFKTsKLSAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3Muc2NyaXB0c193aW5kb3dfb3Bl
bjsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlO
QV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJp
diwgRUlOQV9GQUxTRSk7CisgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLnNjcmlwdHNXaW5kb3dP
cGVuOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19zY3JpcHRzX3dpbmRvd19vcGVu
X3NldChFdmFzX09iamVjdCogZXdrVmlldywgRWluYV9Cb29sIGFsbG93KQogewotICAgIEVXS19W
SUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19W
SUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJ
RVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAg
IEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0Up
OwogICAgIGFsbG93ID0gISFhbGxvdzsKLSAgICBpZiAocHJpdi0+c2V0dGluZ3Muc2NyaXB0c193
aW5kb3dfb3BlbiAhPSBhbGxvdykgewotICAgICAgICBwcml2LT5wYWdlX3NldHRpbmdzLT5zZXRK
YXZhU2NyaXB0Q2FuT3BlbldpbmRvd3NBdXRvbWF0aWNhbGx5KGFsbG93KTsKLSAgICAgICAgcHJp
di0+c2V0dGluZ3Muc2NyaXB0c193aW5kb3dfb3BlbiA9IGFsbG93OworICAgIGlmIChwcml2LT5z
ZXR0aW5ncy5zY3JpcHRzV2luZG93T3BlbiAhPSBhbGxvdykgeworICAgICAgICBwcml2LT5wYWdl
U2V0dGluZ3MtPnNldEphdmFTY3JpcHRDYW5PcGVuV2luZG93c0F1dG9tYXRpY2FsbHkoYWxsb3cp
OworICAgICAgICBwcml2LT5zZXR0aW5ncy5zY3JpcHRzV2luZG93T3BlbiA9IGFsbG93OwogICAg
IH0KICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGlu
Z19zY3JpcHRzX2Nhbl9jbG9zZV93aW5kb3dzX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmll
dykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZB
TFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFM
U0UpOwotICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5zY3JpcHRzX2Nhbl9jbG9zZV93aW5kb3dz
OworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5B
X0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2
LCBFSU5BX0ZBTFNFKTsKKyAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3Muc2NyaXB0c0NhbkNsb3Nl
V2luZG93czsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfc2NyaXB0c19jYW5fY2xv
c2Vfd2luZG93c19zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCBhbGxvdykKIHsK
LSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsK
LSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwor
ICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZB
TFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBF
SU5BX0ZBTFNFKTsKICAgICBhbGxvdyA9ICEhYWxsb3c7Ci0gICAgaWYgKHByaXYtPnNldHRpbmdz
LnNjcmlwdHNfY2FuX2Nsb3NlX3dpbmRvd3MgIT0gYWxsb3cpIHsKLSAgICAgICAgcHJpdi0+cGFn
ZV9zZXR0aW5ncy0+c2V0QWxsb3dTY3JpcHRzVG9DbG9zZVdpbmRvd3MoYWxsb3cpOwotICAgICAg
ICBwcml2LT5zZXR0aW5ncy5zY3JpcHRzX2Nhbl9jbG9zZV93aW5kb3dzID0gYWxsb3c7CisgICAg
aWYgKHByaXYtPnNldHRpbmdzLnNjcmlwdHNDYW5DbG9zZVdpbmRvd3MgIT0gYWxsb3cpIHsKKyAg
ICAgICAgcHJpdi0+cGFnZVNldHRpbmdzLT5zZXRBbGxvd1NjcmlwdHNUb0Nsb3NlV2luZG93cyhh
bGxvdyk7CisgICAgICAgIHByaXYtPnNldHRpbmdzLnNjcmlwdHNDYW5DbG9zZVdpbmRvd3MgPSBh
bGxvdzsKICAgICB9CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAogRWluYV9Cb29sIGV3a192
aWV3X3NldHRpbmdfcmVzaXphYmxlX3RleHRhcmVhc19nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3
a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlO
QV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5B
X0ZBTFNFKTsKLSAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MucmVzaXphYmxlX3RleHRhcmVhczsK
KyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9G
QUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwg
RUlOQV9GQUxTRSk7CisgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLnJlc2l6YWJsZVRleHRhcmVh
czsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfcmVzaXphYmxlX3RleHRhcmVhc19z
ZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCBlbmFibGUpCiB7Ci0gICAgRVdLX1ZJ
RVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJ
RVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklF
V19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAg
RVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7
CiAgICAgZW5hYmxlID0gISFlbmFibGU7Ci0gICAgaWYgKHByaXYtPnNldHRpbmdzLnJlc2l6YWJs
ZV90ZXh0YXJlYXMgIT0gZW5hYmxlKSB7Ci0gICAgICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNl
dFRleHRBcmVhc0FyZVJlc2l6YWJsZShlbmFibGUpOwotICAgICAgICBwcml2LT5zZXR0aW5ncy5y
ZXNpemFibGVfdGV4dGFyZWFzID0gZW5hYmxlOworICAgIGlmIChwcml2LT5zZXR0aW5ncy5yZXNp
emFibGVUZXh0YXJlYXMgIT0gZW5hYmxlKSB7CisgICAgICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+
c2V0VGV4dEFyZWFzQXJlUmVzaXphYmxlKGVuYWJsZSk7CisgICAgICAgIHByaXYtPnNldHRpbmdz
LnJlc2l6YWJsZVRleHRhcmVhcyA9IGVuYWJsZTsKICAgICB9CiAgICAgcmV0dXJuIEVJTkFfVFJV
RTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfcHJpdmF0ZV9icm93c2luZ19nZXQo
Y29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JF
VFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1Jf
UkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKLSAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3Mu
cHJpdmF0ZV9icm93c2luZzsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcs
IHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJO
KHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgcmV0dXJuIHByaXYtPnNldHRpbmdz
LnByaXZhdGVCcm93c2luZzsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfcHJpdmF0
ZV9icm93c2luZ19zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCBlbmFibGUpCiB7
Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7
Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsK
KyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9G
QUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwg
RUlOQV9GQUxTRSk7CiAgICAgZW5hYmxlID0gISFlbmFibGU7Ci0gICAgaWYgKHByaXYtPnNldHRp
bmdzLnByaXZhdGVfYnJvd3NpbmcgIT0gZW5hYmxlKSB7Ci0gICAgICAgIHByaXYtPnBhZ2Vfc2V0
dGluZ3MtPnNldFByaXZhdGVCcm93c2luZ0VuYWJsZWQoZW5hYmxlKTsKLSAgICAgICAgcHJpdi0+
c2V0dGluZ3MucHJpdmF0ZV9icm93c2luZyA9IGVuYWJsZTsKKyAgICBpZiAocHJpdi0+c2V0dGlu
Z3MucHJpdmF0ZUJyb3dzaW5nICE9IGVuYWJsZSkgeworICAgICAgICBwcml2LT5wYWdlU2V0dGlu
Z3MtPnNldFByaXZhdGVCcm93c2luZ0VuYWJsZWQoZW5hYmxlKTsKKyAgICAgICAgcHJpdi0+c2V0
dGluZ3MucHJpdmF0ZUJyb3dzaW5nID0gZW5hYmxlOwogICAgIH0KICAgICByZXR1cm4gRUlOQV9U
UlVFOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19vZmZsaW5lX2FwcF9jYWNoZV9n
ZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRf
T1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKLSAgICByZXR1cm4gcHJpdi0+c2V0dGlu
Z3Mub2ZmbGluZV9hcHBfY2FjaGU7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tW
aWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JF
VFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIHJldHVybiBwcml2LT5zZXR0
aW5ncy5vZmZsaW5lQXBwQ2FjaGU7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX29m
ZmxpbmVfYXBwX2NhY2hlX3NldChFdmFzX09iamVjdCogZXdrVmlldywgRWluYV9Cb29sIGVuYWJs
ZSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZB
TFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFM
U0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBF
SU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBw
cml2LCBFSU5BX0ZBTFNFKTsKICAgICBlbmFibGUgPSAhIWVuYWJsZTsKLSAgICBpZiAocHJpdi0+
c2V0dGluZ3Mub2ZmbGluZV9hcHBfY2FjaGUgIT0gZW5hYmxlKSB7Ci0gICAgICAgIHByaXYtPnBh
Z2Vfc2V0dGluZ3MtPnNldE9mZmxpbmVXZWJBcHBsaWNhdGlvbkNhY2hlRW5hYmxlZChlbmFibGUp
OwotICAgICAgICBwcml2LT5zZXR0aW5ncy5vZmZsaW5lX2FwcF9jYWNoZSA9IGVuYWJsZTsKKyAg
ICBpZiAocHJpdi0+c2V0dGluZ3Mub2ZmbGluZUFwcENhY2hlICE9IGVuYWJsZSkgeworICAgICAg
ICBwcml2LT5wYWdlU2V0dGluZ3MtPnNldE9mZmxpbmVXZWJBcHBsaWNhdGlvbkNhY2hlRW5hYmxl
ZChlbmFibGUpOworICAgICAgICBwcml2LT5zZXR0aW5ncy5vZmZsaW5lQXBwQ2FjaGUgPSBlbmFi
bGU7CiAgICAgfQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CkBAIC0yMDcyLDI3ICsyMDcyLDI3
IEBAIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX29mZmxpbmVfYXBwX2NhY2hlX3NldChFdmFz
X09iamVjdCogZXdrVmlldywgRWluYV9Cb29sCiAKIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5n
X2NhcmV0X2Jyb3dzaW5nX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBF
V0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBF
V0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwotICAgIHJl
dHVybiBwcml2LT5zZXR0aW5ncy5jYXJldF9icm93c2luZzsKKyAgICBFV0tfVklFV19TRF9HRVRf
T1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdf
UFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgcmV0
dXJuIHByaXYtPnNldHRpbmdzLmNhcmV0QnJvd3Npbmc7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmll
d19zZXR0aW5nX2NhcmV0X2Jyb3dzaW5nX3NldChFdmFzX09iamVjdCogZXdrVmlldywgRWluYV9C
b29sIGVuYWJsZSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNk
LCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYs
IEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21h
cnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21h
cnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBlbmFibGUgPSAhIWVuYWJsZTsKLSAgICBp
ZiAocHJpdi0+c2V0dGluZ3MuY2FyZXRfYnJvd3NpbmcgIT0gZW5hYmxlKSB7Ci0gICAgICAgIHBy
aXYtPnBhZ2Vfc2V0dGluZ3MtPnNldENhcmV0QnJvd3NpbmdFbmFibGVkKGVuYWJsZSk7Ci0gICAg
ICAgIHByaXYtPnNldHRpbmdzLmNhcmV0X2Jyb3dzaW5nID0gZW5hYmxlOworICAgIGlmIChwcml2
LT5zZXR0aW5ncy5jYXJldEJyb3dzaW5nICE9IGVuYWJsZSkgeworICAgICAgICBwcml2LT5wYWdl
U2V0dGluZ3MtPnNldENhcmV0QnJvd3NpbmdFbmFibGVkKGVuYWJsZSk7CisgICAgICAgIHByaXYt
PnNldHRpbmdzLmNhcmV0QnJvd3NpbmcgPSBlbmFibGU7CiAgICAgfQogICAgIHJldHVybiBFSU5B
X1RSVUU7CiB9CiAKIGNvbnN0IGNoYXIqIGV3a192aWV3X3NldHRpbmdfZW5jb2RpbmdfY3VzdG9t
X2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRf
T1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAwKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRV
Uk4oc2QsIHByaXYsIDApOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywg
c21hcnREYXRhLCAwKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRh
LCBwcml2LCAwKTsKICAgICBFdmFzX09iamVjdCogbWFpbl9mcmFtZSA9IGV3a192aWV3X2ZyYW1l
X21haW5fZ2V0KGV3a1ZpZXcpOwogICAgIFdlYkNvcmU6OkZyYW1lKiBjb3JlX2ZyYW1lID0gRVdL
UHJpdmF0ZTo6Y29yZUZyYW1lKG1haW5fZnJhbWUpOwogCkBAIC0yMTAxLDE5OSArMjEwMSwxOTkg
QEAgY29uc3QgY2hhciogZXdrX3ZpZXdfc2V0dGluZ19lbmNvZGluZ19jdXN0b21fZ2V0KGNvbnN0
IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogICAgIGlmIChvdmVycmlkZUVuY29kaW5nLmlzRW1wdHko
KSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBlaW5hX3N0cmluZ3NoYXJlX3JlcGxhY2UoJnBy
aXYtPnNldHRpbmdzLmVuY29kaW5nX2N1c3RvbSwgb3ZlcnJpZGVFbmNvZGluZy51dGY4KCkuZGF0
YSgpKTsKLSAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZW5jb2RpbmdfY3VzdG9tOworICAgIGVp
bmFfc3RyaW5nc2hhcmVfcmVwbGFjZSgmcHJpdi0+c2V0dGluZ3MuZW5jb2RpbmdDdXN0b20sIG92
ZXJyaWRlRW5jb2RpbmcudXRmOCgpLmRhdGEoKSk7CisgICAgcmV0dXJuIHByaXYtPnNldHRpbmdz
LmVuY29kaW5nQ3VzdG9tOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19lbmNvZGlu
Z19jdXN0b21fc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBjaGFyKiBlbmNvZGluZykK
IHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNF
KTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0Up
OworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5B
X0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2
LCBFSU5BX0ZBTFNFKTsKICAgICBFdmFzX09iamVjdCogbWFpbl9mcmFtZSA9IGV3a192aWV3X2Zy
YW1lX21haW5fZ2V0KGV3a1ZpZXcpOwotICAgIFdlYkNvcmU6OkZyYW1lKiBjb3JlX2ZyYW1lID0g
RVdLUHJpdmF0ZTo6Y29yZUZyYW1lKG1haW5fZnJhbWUpOworICAgIFdlYkNvcmU6OkZyYW1lKiBj
b3JlRnJhbWUgPSBFV0tQcml2YXRlOjpjb3JlRnJhbWUobWFpbl9mcmFtZSk7CiAgICAgREJHKCIl
cyIsIGVuY29kaW5nKTsKLSAgICBpZiAoZWluYV9zdHJpbmdzaGFyZV9yZXBsYWNlKCZwcml2LT5z
ZXR0aW5ncy5lbmNvZGluZ19jdXN0b20sIGVuY29kaW5nKSkKLSAgICAgICAgY29yZV9mcmFtZS0+
bG9hZGVyKCktPnJlbG9hZFdpdGhPdmVycmlkZUVuY29kaW5nKFN0cmluZzo6ZnJvbVVURjgoZW5j
b2RpbmcpKTsKKyAgICBpZiAoZWluYV9zdHJpbmdzaGFyZV9yZXBsYWNlKCZwcml2LT5zZXR0aW5n
cy5lbmNvZGluZ0N1c3RvbSwgZW5jb2RpbmcpKQorICAgICAgICBjb3JlRnJhbWUtPmxvYWRlcigp
LT5yZWxvYWRXaXRoT3ZlcnJpZGVFbmNvZGluZyhTdHJpbmc6OmZyb21VVEY4KGVuY29kaW5nKSk7
CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAogY29uc3QgY2hhciogZXdrX3ZpZXdfc2V0dGlu
Z19lbmNvZGluZ19kZWZhdWx0X2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAwKTsKLSAgICBFV0tfVklF
V19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIDApOwotICAgIHJldHVybiBwcml2LT5zZXR0
aW5ncy5lbmNvZGluZ19kZWZhdWx0OworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdr
Vmlldywgc21hcnREYXRhLCAwKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21h
cnREYXRhLCBwcml2LCAwKTsKKyAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZW5jb2RpbmdEZWZh
dWx0OwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19lbmNvZGluZ19kZWZhdWx0X3Nl
dChFdmFzX09iamVjdCogZXdrVmlldywgY29uc3QgY2hhciogZW5jb2RpbmcpCiB7Ci0gICAgRVdL
X1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdL
X1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKLSAgICBpZiAo
ZWluYV9zdHJpbmdzaGFyZV9yZXBsYWNlKCZwcml2LT5zZXR0aW5ncy5lbmNvZGluZ19kZWZhdWx0
LCBlbmNvZGluZykpCi0gICAgICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNldERlZmF1bHRUZXh0
RW5jb2RpbmdOYW1lKFN0cmluZzo6ZnJvbVVURjgoZW5jb2RpbmcpKTsKKyAgICBFV0tfVklFV19T
RF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdL
X1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7Cisg
ICAgaWYgKGVpbmFfc3RyaW5nc2hhcmVfcmVwbGFjZSgmcHJpdi0+c2V0dGluZ3MuZW5jb2RpbmdE
ZWZhdWx0LCBlbmNvZGluZykpCisgICAgICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0RGVmYXVs
dFRleHRFbmNvZGluZ05hbWUoU3RyaW5nOjpmcm9tVVRGOChlbmNvZGluZykpOwogICAgIHJldHVy
biBFSU5BX1RSVUU7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2VuY29kaW5nX2Rl
dGVjdG9yX3NldChFdmFzX09iamVjdCogZXdrVmlldywgRWluYV9Cb29sIGVuYWJsZSkKIHsKLSAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAg
ICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOworICAg
IEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNF
KTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5B
X0ZBTFNFKTsKICAgICBlbmFibGUgPSAhIWVuYWJsZTsKLSAgICBpZiAocHJpdi0+c2V0dGluZ3Mu
ZW5jb2RpbmdfZGV0ZWN0b3IgIT0gZW5hYmxlKSB7Ci0gICAgICAgIHByaXYtPnBhZ2Vfc2V0dGlu
Z3MtPnNldFVzZXNFbmNvZGluZ0RldGVjdG9yKGVuYWJsZSk7Ci0gICAgICAgIHByaXYtPnNldHRp
bmdzLmVuY29kaW5nX2RldGVjdG9yID0gZW5hYmxlOworICAgIGlmIChwcml2LT5zZXR0aW5ncy5l
bmNvZGluZ0RldGVjdG9yICE9IGVuYWJsZSkgeworICAgICAgICBwcml2LT5wYWdlU2V0dGluZ3Mt
PnNldFVzZXNFbmNvZGluZ0RldGVjdG9yKGVuYWJsZSk7CisgICAgICAgIHByaXYtPnNldHRpbmdz
LmVuY29kaW5nRGV0ZWN0b3IgPSBlbmFibGU7CiAgICAgfQogICAgIHJldHVybiBFSU5BX1RSVUU7
CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2VuY29kaW5nX2RldGVjdG9yX2dldChj
b25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVU
VVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9S
RVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwotICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5l
bmNvZGluZ19kZXRlY3RvcjsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcs
IHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJO
KHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgcmV0dXJuIHByaXYtPnNldHRpbmdz
LmVuY29kaW5nRGV0ZWN0b3I7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2VuYWJs
ZV9kZXZlbG9wZXJfZXh0cmFzX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAg
ICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwotICAg
IHJldHVybiBwcml2LT5zZXR0aW5ncy5lbmFibGVfZGV2ZWxvcGVyX2V4dHJhczsKKyAgICBFV0tf
VklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7Cisg
ICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxT
RSk7CisgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmVuYWJsZURldmVsb3BlckV4dHJhczsKIH0K
IAogRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfZW5hYmxlX2RldmVsb3Blcl9leHRyYXNfc2V0
KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wgZW5hYmxlKQogewotICAgIEVXS19WSUVX
X1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVX
X1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVX
S19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOwog
ICAgIGVuYWJsZSA9ICEhZW5hYmxlOwotICAgIGlmIChwcml2LT5zZXR0aW5ncy5lbmFibGVfZGV2
ZWxvcGVyX2V4dHJhcyAhPSBlbmFibGUpIHsKLSAgICAgICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+
c2V0RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZChlbmFibGUpOwotICAgICAgICBwcml2LT5zZXR0aW5n
cy5lbmFibGVfZGV2ZWxvcGVyX2V4dHJhcyA9IGVuYWJsZTsKKyAgICBpZiAocHJpdi0+c2V0dGlu
Z3MuZW5hYmxlRGV2ZWxvcGVyRXh0cmFzICE9IGVuYWJsZSkgeworICAgICAgICBwcml2LT5wYWdl
U2V0dGluZ3MtPnNldERldmVsb3BlckV4dHJhc0VuYWJsZWQoZW5hYmxlKTsKKyAgICAgICAgcHJp
di0+c2V0dGluZ3MuZW5hYmxlRGV2ZWxvcGVyRXh0cmFzID0gZW5hYmxlOwogICAgIH0KICAgICBy
ZXR1cm4gRUlOQV9UUlVFOwogfQogCiBpbnQgZXdrX3ZpZXdfc2V0dGluZ19mb250X21pbmltdW1f
c2l6ZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgMCk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1Jf
UkVUVVJOKHNkLCBwcml2LCAwKTsKLSAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZm9udF9taW5p
bXVtX3NpemU7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERh
dGEsIDApOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYs
IDApOworICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5mb250TWluaW11bVNpemU7CiB9CiAKIEVp
bmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2ZvbnRfbWluaW11bV9zaXplX3NldChFdmFzX09iamVj
dCogZXdrVmlldywgaW50IHNpemUpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihl
d2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJO
KHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKLSAgICBpZiAocHJpdi0+c2V0dGluZ3MuZm9udF9taW5p
bXVtX3NpemUgIT0gc2l6ZSkgewotICAgICAgICBwcml2LT5wYWdlX3NldHRpbmdzLT5zZXRNaW5p
bXVtRm9udFNpemUoc2l6ZSk7Ci0gICAgICAgIHByaXYtPnNldHRpbmdzLmZvbnRfbWluaW11bV9z
aXplID0gc2l6ZTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0
RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0
RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgaWYgKHByaXYtPnNldHRpbmdzLmZvbnRNaW5p
bXVtU2l6ZSAhPSBzaXplKSB7CisgICAgICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0TWluaW11
bUZvbnRTaXplKHNpemUpOworICAgICAgICBwcml2LT5zZXR0aW5ncy5mb250TWluaW11bVNpemUg
PSBzaXplOwogICAgIH0KICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCiBpbnQgZXdrX3ZpZXdf
c2V0dGluZ19mb250X21pbmltdW1fbG9naWNhbF9zaXplX2dldChjb25zdCBFdmFzX09iamVjdCog
ZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAw
KTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIDApOwotICAgIHJl
dHVybiBwcml2LT5zZXR0aW5ncy5mb250X21pbmltdW1fbG9naWNhbF9zaXplOworICAgIEVXS19W
SUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCAwKTsKKyAgICBFV0tfVklF
V19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCAwKTsKKyAgICByZXR1cm4gcHJp
di0+c2V0dGluZ3MuZm9udE1pbmltdW1Mb2dpY2FsU2l6ZTsKIH0KIAogRWluYV9Cb29sIGV3a192
aWV3X3NldHRpbmdfZm9udF9taW5pbXVtX2xvZ2ljYWxfc2l6ZV9zZXQoRXZhc19PYmplY3QqIGV3
a1ZpZXcsIGludCBzaXplKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmll
dywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwg
cHJpdiwgRUlOQV9GQUxTRSk7Ci0gICAgaWYgKHByaXYtPnNldHRpbmdzLmZvbnRfbWluaW11bV9s
b2dpY2FsX3NpemUgIT0gc2l6ZSkgewotICAgICAgICBwcml2LT5wYWdlX3NldHRpbmdzLT5zZXRN
aW5pbXVtTG9naWNhbEZvbnRTaXplKHNpemUpOwotICAgICAgICBwcml2LT5zZXR0aW5ncy5mb250
X21pbmltdW1fbG9naWNhbF9zaXplID0gc2l6ZTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVU
VVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9H
RVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgaWYgKHByaXYt
PnNldHRpbmdzLmZvbnRNaW5pbXVtTG9naWNhbFNpemUgIT0gc2l6ZSkgeworICAgICAgICBwcml2
LT5wYWdlU2V0dGluZ3MtPnNldE1pbmltdW1Mb2dpY2FsRm9udFNpemUoc2l6ZSk7CisgICAgICAg
IHByaXYtPnNldHRpbmdzLmZvbnRNaW5pbXVtTG9naWNhbFNpemUgPSBzaXplOwogICAgIH0KICAg
ICByZXR1cm4gRUlOQV9UUlVFOwogfQogCiBpbnQgZXdrX3ZpZXdfc2V0dGluZ19mb250X2RlZmF1
bHRfc2l6ZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgMCk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRf
T1JfUkVUVVJOKHNkLCBwcml2LCAwKTsKLSAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZm9udF9k
ZWZhdWx0X3NpemU7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFy
dERhdGEsIDApOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHBy
aXYsIDApOworICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5mb250RGVmYXVsdFNpemU7CiB9CiAK
IEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2ZvbnRfZGVmYXVsdF9zaXplX3NldChFdmFzX09i
amVjdCogZXdrVmlldywgaW50IHNpemUpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
Tihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVU
VVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKLSAgICBpZiAocHJpdi0+c2V0dGluZ3MuZm9udF9k
ZWZhdWx0X3NpemUgIT0gc2l6ZSkgewotICAgICAgICBwcml2LT5wYWdlX3NldHRpbmdzLT5zZXRE
ZWZhdWx0Rm9udFNpemUoc2l6ZSk7Ci0gICAgICAgIHByaXYtPnNldHRpbmdzLmZvbnRfZGVmYXVs
dF9zaXplID0gc2l6ZTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNt
YXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNt
YXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgaWYgKHByaXYtPnNldHRpbmdzLmZvbnRE
ZWZhdWx0U2l6ZSAhPSBzaXplKSB7CisgICAgICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0RGVm
YXVsdEZvbnRTaXplKHNpemUpOworICAgICAgICBwcml2LT5zZXR0aW5ncy5mb250RGVmYXVsdFNp
emUgPSBzaXplOwogICAgIH0KICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCiBpbnQgZXdrX3Zp
ZXdfc2V0dGluZ19mb250X21vbm9zcGFjZV9zaXplX2dldChjb25zdCBFdmFzX09iamVjdCogZXdr
VmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAwKTsK
LSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIDApOwotICAgIHJldHVy
biBwcml2LT5zZXR0aW5ncy5mb250X21vbm9zcGFjZV9zaXplOworICAgIEVXS19WSUVXX1NEX0dF
VF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCAwKTsKKyAgICBFV0tfVklFV19QUklWX0dF
VF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCAwKTsKKyAgICByZXR1cm4gcHJpdi0+c2V0dGlu
Z3MuZm9udE1vbm9zcGFjZVNpemU7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2Zv
bnRfbW9ub3NwYWNlX3NpemVfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBpbnQgc2l6ZSkKIHsK
LSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsK
LSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwot
ICAgIGlmIChwcml2LT5zZXR0aW5ncy5mb250X21vbm9zcGFjZV9zaXplICE9IHNpemUpIHsKLSAg
ICAgICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0RGVmYXVsdEZpeGVkRm9udFNpemUoc2l6ZSk7
Ci0gICAgICAgIHByaXYtPnNldHRpbmdzLmZvbnRfbW9ub3NwYWNlX3NpemUgPSBzaXplOworICAg
IEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNF
KTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5B
X0ZBTFNFKTsKKyAgICBpZiAocHJpdi0+c2V0dGluZ3MuZm9udE1vbm9zcGFjZVNpemUgIT0gc2l6
ZSkgeworICAgICAgICBwcml2LT5wYWdlU2V0dGluZ3MtPnNldERlZmF1bHRGaXhlZEZvbnRTaXpl
KHNpemUpOworICAgICAgICBwcml2LT5zZXR0aW5ncy5mb250TW9ub3NwYWNlU2l6ZSA9IHNpemU7
CiAgICAgfQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKIGNvbnN0IGNoYXIqIGV3a192aWV3
X2ZvbnRfZmFtaWx5X25hbWVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFd2tfRm9u
dF9GYW1pbHkgZm9udEZhbWlseSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3
a1ZpZXcsIHNkLCAwKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYs
IDApOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCAw
KTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCAwKTsK
IAogICAgIHN3aXRjaCAoZm9udEZhbWlseSkgewogICAgIGNhc2UgRVdLX0ZPTlRfRkFNSUxZX1NU
QU5EQVJEOgotICAgICAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZm9udF9zdGFuZGFyZDsKKyAg
ICAgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmZvbnRTdGFuZGFyZDsKICAgICBjYXNlIEVXS19G
T05UX0ZBTUlMWV9DVVJTSVZFOgotICAgICAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZm9udF9j
dXJzaXZlOworICAgICAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZm9udEN1cnNpdmU7CiAgICAg
Y2FzZSBFV0tfRk9OVF9GQU1JTFlfRkFOVEFTWToKLSAgICAgICAgcmV0dXJuIHByaXYtPnNldHRp
bmdzLmZvbnRfZmFudGFzeTsKKyAgICAgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmZvbnRGYW50
YXN5OwogICAgIGNhc2UgRVdLX0ZPTlRfRkFNSUxZX01PTk9TUEFDRToKLSAgICAgICAgcmV0dXJu
IHByaXYtPnNldHRpbmdzLmZvbnRfbW9ub3NwYWNlOworICAgICAgICByZXR1cm4gcHJpdi0+c2V0
dGluZ3MuZm9udE1vbm9zcGFjZTsKICAgICBjYXNlIEVXS19GT05UX0ZBTUlMWV9TRVJJRjoKLSAg
ICAgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmZvbnRfc2VyaWY7CisgICAgICAgIHJldHVybiBw
cml2LT5zZXR0aW5ncy5mb250U2VyaWY7CiAgICAgY2FzZSBFV0tfRk9OVF9GQU1JTFlfU0FOU19T
RVJJRjoKLSAgICAgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmZvbnRfc2Fuc19zZXJpZjsKKyAg
ICAgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmZvbnRTYW5zU2VyaWY7CiAgICAgfQogICAgIHJl
dHVybiAwOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfZm9udF9mYW1pbHlfbmFtZV9zZXQoRXZh
c19PYmplY3QqIGV3a1ZpZXcsIEV3a19Gb250X0ZhbWlseSBmb250RmFtaWx5LCBjb25zdCBjaGFy
KiBuYW1lKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJ
TkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlO
QV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERh
dGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERh
dGEsIHByaXYsIEVJTkFfRkFMU0UpOwogCiAgICAgc3dpdGNoIChmb250RmFtaWx5KSB7CiAgICAg
Y2FzZSBFV0tfRk9OVF9GQU1JTFlfU1RBTkRBUkQ6Ci0gICAgICAgIGlmIChlaW5hX3N0cmluZ3No
YXJlX3JlcGxhY2UoJnByaXYtPnNldHRpbmdzLmZvbnRfc3RhbmRhcmQsIG5hbWUpKQotICAgICAg
ICAgICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0U3RhbmRhcmRGb250RmFtaWx5KEF0b21pY1N0
cmluZzo6ZnJvbVVURjgobmFtZSkpOworICAgICAgICBpZiAoZWluYV9zdHJpbmdzaGFyZV9yZXBs
YWNlKCZwcml2LT5zZXR0aW5ncy5mb250U3RhbmRhcmQsIG5hbWUpKQorICAgICAgICAgICAgcHJp
di0+cGFnZVNldHRpbmdzLT5zZXRTdGFuZGFyZEZvbnRGYW1pbHkoQXRvbWljU3RyaW5nOjpmcm9t
VVRGOChuYW1lKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRVdLX0ZPTlRfRkFNSUxZX0NV
UlNJVkU6Ci0gICAgICAgIGlmIChlaW5hX3N0cmluZ3NoYXJlX3JlcGxhY2UoJnByaXYtPnNldHRp
bmdzLmZvbnRfY3Vyc2l2ZSwgbmFtZSkpCi0gICAgICAgICAgICBwcml2LT5wYWdlX3NldHRpbmdz
LT5zZXRDdXJzaXZlRm9udEZhbWlseShBdG9taWNTdHJpbmc6OmZyb21VVEY4KG5hbWUpKTsKKyAg
ICAgICAgaWYgKGVpbmFfc3RyaW5nc2hhcmVfcmVwbGFjZSgmcHJpdi0+c2V0dGluZ3MuZm9udEN1
cnNpdmUsIG5hbWUpKQorICAgICAgICAgICAgcHJpdi0+cGFnZVNldHRpbmdzLT5zZXRDdXJzaXZl
Rm9udEZhbWlseShBdG9taWNTdHJpbmc6OmZyb21VVEY4KG5hbWUpKTsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBFV0tfRk9OVF9GQU1JTFlfRkFOVEFTWToKLSAgICAgICAgaWYgKGVpbmFfc3Ry
aW5nc2hhcmVfcmVwbGFjZSgmcHJpdi0+c2V0dGluZ3MuZm9udF9mYW50YXN5LCBuYW1lKSkKLSAg
ICAgICAgICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNldEZhbnRhc3lGb250RmFtaWx5KEF0b21p
Y1N0cmluZzo6ZnJvbVVURjgobmFtZSkpOworICAgICAgICBpZiAoZWluYV9zdHJpbmdzaGFyZV9y
ZXBsYWNlKCZwcml2LT5zZXR0aW5ncy5mb250RmFudGFzeSwgbmFtZSkpCisgICAgICAgICAgICBw
cml2LT5wYWdlU2V0dGluZ3MtPnNldEZhbnRhc3lGb250RmFtaWx5KEF0b21pY1N0cmluZzo6ZnJv
bVVURjgobmFtZSkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEVXS19GT05UX0ZBTUlMWV9N
T05PU1BBQ0U6Ci0gICAgICAgIGlmIChlaW5hX3N0cmluZ3NoYXJlX3JlcGxhY2UoJnByaXYtPnNl
dHRpbmdzLmZvbnRfbW9ub3NwYWNlLCBuYW1lKSkKLSAgICAgICAgICAgIHByaXYtPnBhZ2Vfc2V0
dGluZ3MtPnNldEZpeGVkRm9udEZhbWlseShBdG9taWNTdHJpbmc6OmZyb21VVEY4KG5hbWUpKTsK
KyAgICAgICAgaWYgKGVpbmFfc3RyaW5nc2hhcmVfcmVwbGFjZSgmcHJpdi0+c2V0dGluZ3MuZm9u
dE1vbm9zcGFjZSwgbmFtZSkpCisgICAgICAgICAgICBwcml2LT5wYWdlU2V0dGluZ3MtPnNldEZp
eGVkRm9udEZhbWlseShBdG9taWNTdHJpbmc6OmZyb21VVEY4KG5hbWUpKTsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBFV0tfRk9OVF9GQU1JTFlfU0VSSUY6Ci0gICAgICAgIGlmIChlaW5hX3N0
cmluZ3NoYXJlX3JlcGxhY2UoJnByaXYtPnNldHRpbmdzLmZvbnRfc2VyaWYsIG5hbWUpKQotICAg
ICAgICAgICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0U2VyaWZGb250RmFtaWx5KEF0b21pY1N0
cmluZzo6ZnJvbVVURjgobmFtZSkpOworICAgICAgICBpZiAoZWluYV9zdHJpbmdzaGFyZV9yZXBs
YWNlKCZwcml2LT5zZXR0aW5ncy5mb250U2VyaWYsIG5hbWUpKQorICAgICAgICAgICAgcHJpdi0+
cGFnZVNldHRpbmdzLT5zZXRTZXJpZkZvbnRGYW1pbHkoQXRvbWljU3RyaW5nOjpmcm9tVVRGOChu
YW1lKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRVdLX0ZPTlRfRkFNSUxZX1NBTlNfU0VS
SUY6Ci0gICAgICAgIGlmIChlaW5hX3N0cmluZ3NoYXJlX3JlcGxhY2UoJnByaXYtPnNldHRpbmdz
LmZvbnRfc2Fuc19zZXJpZiwgbmFtZSkpCi0gICAgICAgICAgICBwcml2LT5wYWdlX3NldHRpbmdz
LT5zZXRTYW5zU2VyaWZGb250RmFtaWx5KEF0b21pY1N0cmluZzo6ZnJvbVVURjgobmFtZSkpOwor
ICAgICAgICBpZiAoZWluYV9zdHJpbmdzaGFyZV9yZXBsYWNlKCZwcml2LT5zZXR0aW5ncy5mb250
U2Fuc1NlcmlmLCBuYW1lKSkKKyAgICAgICAgICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0U2Fu
c1NlcmlmRm9udEZhbWlseShBdG9taWNTdHJpbmc6OmZyb21VVEY4KG5hbWUpKTsKICAgICAgICAg
YnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CkBAIC0yMzA0
LDk5ICsyMzA0LDk5IEBAIEVpbmFfQm9vbCBld2tfdmlld19mb250X2ZhbWlseV9uYW1lX3NldChF
dmFzX09iamVjdCogZXdrVmlldywgRXdrX0ZvbnRfRmFtaWx5IGZvCiAKIEVpbmFfQm9vbCBld2tf
dmlld19zZXR0aW5nX3NwYXRpYWxfbmF2aWdhdGlvbl9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3
a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlO
QV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5B
X0ZBTFNFKTsKLSAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3Muc3BhdGlhbF9uYXZpZ2F0aW9uOwor
ICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZB
TFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBF
SU5BX0ZBTFNFKTsKKyAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3Muc3BhdGlhbE5hdmlnYXRpb247
CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX3NwYXRpYWxfbmF2aWdhdGlvbl9zZXQo
RXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCBlbmFibGUpCiB7Ci0gICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdf
UFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19T
RF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdL
X1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CiAg
ICAgZW5hYmxlID0gISFlbmFibGU7Ci0gICAgaWYgKHByaXYtPnNldHRpbmdzLnNwYXRpYWxfbmF2
aWdhdGlvbiAhPSBlbmFibGUpIHsKLSAgICAgICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0U3Bh
dGlhbE5hdmlnYXRpb25FbmFibGVkKGVuYWJsZSk7Ci0gICAgICAgIHByaXYtPnNldHRpbmdzLnNw
YXRpYWxfbmF2aWdhdGlvbiA9IGVuYWJsZTsKKyAgICBpZiAocHJpdi0+c2V0dGluZ3Muc3BhdGlh
bE5hdmlnYXRpb24gIT0gZW5hYmxlKSB7CisgICAgICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0
U3BhdGlhbE5hdmlnYXRpb25FbmFibGVkKGVuYWJsZSk7CisgICAgICAgIHByaXYtPnNldHRpbmdz
LnNwYXRpYWxOYXZpZ2F0aW9uID0gZW5hYmxlOwogICAgIH0KICAgICByZXR1cm4gRUlOQV9UUlVF
OwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19sb2NhbF9zdG9yYWdlX2dldChjb25z
dCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJO
KGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRV
Uk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwotICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5sb2Nh
bF9zdG9yYWdlOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnRE
YXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnRE
YXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MubG9jYWxT
dG9yYWdlOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19sb2NhbF9zdG9yYWdlX3Nl
dChFdmFzX09iamVjdCogZXdrVmlldywgRWluYV9Cb29sIGVuYWJsZSkKIHsKLSAgICBFV0tfVklF
V19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklF
V19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVX
X1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBF
V0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsK
ICAgICBlbmFibGUgPSAhIWVuYWJsZTsKLSAgICBpZiAocHJpdi0+c2V0dGluZ3MubG9jYWxfc3Rv
cmFnZSAhPSBlbmFibGUpIHsKLSAgICAgICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0TG9jYWxT
dG9yYWdlRW5hYmxlZChlbmFibGUpOwotICAgICAgICBwcml2LT5zZXR0aW5ncy5sb2NhbF9zdG9y
YWdlID0gZW5hYmxlOworICAgIGlmIChwcml2LT5zZXR0aW5ncy5sb2NhbFN0b3JhZ2UgIT0gZW5h
YmxlKSB7CisgICAgICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0TG9jYWxTdG9yYWdlRW5hYmxl
ZChlbmFibGUpOworICAgICAgICBwcml2LT5zZXR0aW5ncy5sb2NhbFN0b3JhZ2UgPSBlbmFibGU7
CiAgICAgfQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19z
ZXR0aW5nX3BhZ2VfY2FjaGVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAg
IEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAg
IEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7Ci0gICAg
cmV0dXJuIHByaXYtPnNldHRpbmdzLnBhZ2VfY2FjaGU7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BS
SVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIHJldHVy
biBwcml2LT5zZXR0aW5ncy5wYWdlQ2FjaGU7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19zZXR0
aW5nX3BhZ2VfY2FjaGVfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wgZW5hYmxl
KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFM
U0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxT
RSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJ
TkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHBy
aXYsIEVJTkFfRkFMU0UpOwogICAgIGVuYWJsZSA9ICEhZW5hYmxlOwotICAgIGlmIChwcml2LT5z
ZXR0aW5ncy5wYWdlX2NhY2hlICE9IGVuYWJsZSkgewotICAgICAgICBwcml2LT5wYWdlX3NldHRp
bmdzLT5zZXRVc2VzUGFnZUNhY2hlKGVuYWJsZSk7Ci0gICAgICAgIHByaXYtPnNldHRpbmdzLnBh
Z2VfY2FjaGUgPSBlbmFibGU7CisgICAgaWYgKHByaXYtPnNldHRpbmdzLnBhZ2VDYWNoZSAhPSBl
bmFibGUpIHsKKyAgICAgICAgcHJpdi0+cGFnZVNldHRpbmdzLT5zZXRVc2VzUGFnZUNhY2hlKGVu
YWJsZSk7CisgICAgICAgIHByaXYtPnNldHRpbmdzLnBhZ2VDYWNoZSA9IGVuYWJsZTsKICAgICB9
CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAogY29uc3QgY2hhciogZXdrX3ZpZXdfc2V0dGlu
Z19sb2NhbF9zdG9yYWdlX2RhdGFiYXNlX3BhdGhfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tW
aWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIDApOwot
ICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgMCk7Ci0gICAgcmV0dXJu
IHByaXYtPnNldHRpbmdzLmxvY2FsX3N0b3JhZ2VfZGF0YWJhc2VfcGF0aDsKKyAgICBFV0tfVklF
V19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgMCk7CisgICAgRVdLX1ZJRVdf
UFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgMCk7CisgICAgcmV0dXJuIHByaXYt
PnNldHRpbmdzLmxvY2FsU3RvcmFnZURhdGFiYXNlUGF0aDsKIH0KIAogRWluYV9Cb29sIGV3a192
aWV3X3NldHRpbmdfbG9jYWxfc3RvcmFnZV9kYXRhYmFzZV9wYXRoX3NldChFdmFzX09iamVjdCog
ZXdrVmlldywgY29uc3QgY2hhciogcGF0aCkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVU
VVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9S
RVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwotICAgIGlmIChlaW5hX3N0cmluZ3NoYXJlX3Jl
cGxhY2UoJnByaXYtPnNldHRpbmdzLmxvY2FsX3N0b3JhZ2VfZGF0YWJhc2VfcGF0aCwgcGF0aCkp
Ci0gICAgICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNldExvY2FsU3RvcmFnZURhdGFiYXNlUGF0
aChTdHJpbmc6OmZyb21VVEY4KHBhdGgpKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJO
KGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRf
T1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgaWYgKGVpbmFfc3Ry
aW5nc2hhcmVfcmVwbGFjZSgmcHJpdi0+c2V0dGluZ3MubG9jYWxTdG9yYWdlRGF0YWJhc2VQYXRo
LCBwYXRoKSkKKyAgICAgICAgcHJpdi0+cGFnZVNldHRpbmdzLT5zZXRMb2NhbFN0b3JhZ2VEYXRh
YmFzZVBhdGgoU3RyaW5nOjpmcm9tVVRGOChwYXRoKSk7CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsK
IH0KIAogRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfbWluaW11bV90aW1lcl9pbnRlcnZhbF9z
ZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGRvdWJsZSBpbnRlcnZhbCkKIHsKLSAgICBFV0tfVklF
V19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklF
V19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwotICAgIGlmIChmYWJz
KHByaXYtPnNldHRpbmdzLmRvbV90aW1lcl9pbnRlcnZhbCAtIGludGVydmFsKSA+PSBzdGQ6Om51
bWVyaWNfbGltaXRzPGRvdWJsZT46OmVwc2lsb24oKSkgewotICAgICAgICBwcml2LT5wYWdlX3Nl
dHRpbmdzLT5zZXRNaW5ET01UaW1lckludGVydmFsKGludGVydmFsKTsKLSAgICAgICAgcHJpdi0+
c2V0dGluZ3MuZG9tX3RpbWVyX2ludGVydmFsID0gaW50ZXJ2YWw7CisgICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19W
SUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOworICAg
IGlmIChmYWJzKHByaXYtPnNldHRpbmdzLmRvbVRpbWVySW50ZXJ2YWwgLSBpbnRlcnZhbCkgPj0g
c3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjplcHNpbG9uKCkpIHsKKyAgICAgICAgcHJpdi0+
cGFnZVNldHRpbmdzLT5zZXRNaW5ET01UaW1lckludGVydmFsKGludGVydmFsKTsKKyAgICAgICAg
cHJpdi0+c2V0dGluZ3MuZG9tVGltZXJJbnRlcnZhbCA9IGludGVydmFsOwogICAgIH0KICAgICBy
ZXR1cm4gRUlOQV9UUlVFOwogfQogCiBkb3VibGUgZXdrX3ZpZXdfc2V0dGluZ19taW5pbXVtX3Rp
bWVyX2ludGVydmFsX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tf
VklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tf
VklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwotICAgIHJldHVy
biBwcml2LT5zZXR0aW5ncy5kb21fdGltZXJfaW50ZXJ2YWw7CisgICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVX
X1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIHJl
dHVybiBwcml2LT5zZXR0aW5ncy5kb21UaW1lckludGVydmFsOwogfQogCiBFd2tfVmlld19TbWFy
dF9EYXRhKiBld2tfdmlld19zbWFydF9kYXRhX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmll
dykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAwKTsKLSAg
ICByZXR1cm4gc2Q7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFy
dERhdGEsIDApOworICAgIHJldHVybiBzbWFydERhdGE7CiB9CiAKIC8qKgpAQCAtMjQ2MSw4ICsy
NDYxLDggQEAgY29uc3QgRXdrX1Njcm9sbF9SZXF1ZXN0KiBld2tfdmlld19zY3JvbGxfcmVxdWVz
dHNfZ2V0KGNvbnN0IEV3a19WaWV3X1ByaXZhdGVfRGEKICAqIEBwYXJhbSBwcml2IHByaXZhdGUg
aGFuZGxlIHBvaW50ZXIgb2YgdGhlIHZpZXcgdG8gYWRkIHJlcGFpbnQgcmVxdWVzdC4KICAqIEBw
YXJhbSB4IGhvcml6b250YWwgcG9zaXRpb24gcmVsYXRpdmUgdG8gY3VycmVudCB2aWV3IHBvcnQg
KHNjcm9sbGVkKS4KICAqIEBwYXJhbSB5IHZlcnRpY2FsIHBvc2l0aW9uIHJlbGF0aXZlIHRvIGN1
cnJlbnQgdmlldyBwb3J0IChzY3JvbGxlZCkuCi0gKiBAcGFyYW0gdyB3aWR0aCBvZiBhcmVhIHRv
IGJlIHJlcGFpbnRlZAotICogQHBhcmFtIGggaGVpZ2h0IG9mIGFyZWEgdG8gYmUgcmVwYWludGVk
CisgKiBAcGFyYW0gd2lkdGggd2lkdGggb2YgYXJlYSB0byBiZSByZXBhaW50ZWQKKyAqIEBwYXJh
bSBoZWlnaHQgaGVpZ2h0IG9mIGFyZWEgdG8gYmUgcmVwYWludGVkCiAgKgogICogQG5vdGUgdGhp
cyBpcyBub3QgZm9yIGdlbmVyYWwgdXNlIGJ1dCBqdXN0IGZvciBzdWJjbGFzc2VzIHRoYXQgd2Fu
dAogICogICAgICAgdG8gZGVmaW5lIHRoZWlyIG93biBiYWNraW5nIHN0b3JlLgpAQCAtMjQ4NSwx
MiArMjQ4NSwxMiBAQCB2b2lkIGV3a192aWV3X2xheW91dF9pZl9uZWVkZWRfcmVjdXJzaXZlKEV3
a19WaWV3X1ByaXZhdGVfRGF0YSogcHJpdikKIHsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTihwcml2KTsKIAotICAgIFdlYkNvcmU6OkZyYW1lVmlldyogdiA9IHByaXYtPm1haW5fZnJh
bWUtPnZpZXcoKTsKLSAgICBpZiAoIXYpIHsKKyAgICBXZWJDb3JlOjpGcmFtZVZpZXcqIHZpZXcg
PSBwcml2LT5tYWluRnJhbWUtPnZpZXcoKTsKKyAgICBpZiAoIXZpZXcpIHsKICAgICAgICAgRVJS
KCJubyBtYWluIGZyYW1lIHZpZXciKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICB2LT51
cGRhdGVMYXlvdXRBbmRTdHlsZUlmTmVlZGVkUmVjdXJzaXZlKCk7CisgICAgdmlldy0+dXBkYXRl
TGF5b3V0QW5kU3R5bGVJZk5lZWRlZFJlY3Vyc2l2ZSgpOwogfQogCiB2b2lkIGV3a192aWV3X3Nj
cm9sbHNfcHJvY2VzcyhFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEpCkBAIC0yNTExLDcg
KzI1MTEsNyBAQCB2b2lkIGV3a192aWV3X3Njcm9sbHNfcHJvY2VzcyhFd2tfVmlld19TbWFydF9E
YXRhKiBzbWFydERhdGEpCiAgKiAgICAgICB0byBkZWZpbmUgdGhlaXIgb3duIGJhY2tpbmcgc3Rv
cmUuCiAgKi8KIHN0cnVjdCBfRXdrX1ZpZXdfUGFpbnRfQ29udGV4dCB7Ci0gICAgV2ViQ29yZTo6
R3JhcGhpY3NDb250ZXh0KiBnYzsKKyAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQqIGdyYXBo
aWNDb250ZXh0OwogICAgIFdlYkNvcmU6OkZyYW1lVmlldyogdmlldzsKICAgICBjYWlyb190KiBj
cjsKIH07CkBAIC0yNTIwLDI2ICsyNTIwLDI2IEBAIEV3a19WaWV3X1BhaW50X0NvbnRleHQqIGV3
a192aWV3X3BhaW50X2NvbnRleHRfbmV3KEV3a19WaWV3X1ByaXZhdGVfRGF0YSogcHJpdiwKIHsK
ICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwocHJpdiwgMCk7CiAgICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGNyLCAwKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTl9WQUwocHJpdi0+bWFpbl9mcmFtZSwgMCk7Ci0gICAgV2ViQ29yZTo6RnJhbWVWaWV3
KiB2aWV3ID0gcHJpdi0+bWFpbl9mcmFtZS0+dmlldygpOworICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOX1ZBTChwcml2LT5tYWluRnJhbWUsIDApOworICAgIFdlYkNvcmU6OkZyYW1lVmll
dyogdmlldyA9IHByaXYtPm1haW5GcmFtZS0+dmlldygpOwogICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOX1ZBTCh2aWV3LCAwKTsKLSAgICBFd2tfVmlld19QYWludF9Db250ZXh0KiBjdHh0
ID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfUGFpbnRfQ29udGV4dCo+KG1hbGxvYyhzaXplb2YoKmN0
eHQpKSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGN0eHQsIDApOworICAg
IEV3a19WaWV3X1BhaW50X0NvbnRleHQqIGNvbnRleHQgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19Q
YWludF9Db250ZXh0Kj4obWFsbG9jKHNpemVvZigqY29udGV4dCkpKTsKKyAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTl9WQUwoY29udGV4dCwgMCk7CiAKLSAgICBjdHh0LT5nYyA9IG5ldyBX
ZWJDb3JlOjpHcmFwaGljc0NvbnRleHQoY3IpOwotICAgIGlmICghY3R4dC0+Z2MpIHsKLSAgICAg
ICAgZnJlZShjdHh0KTsKKyAgICBjb250ZXh0LT5ncmFwaGljQ29udGV4dCA9IG5ldyBXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQoY3IpOworICAgIGlmICghY29udGV4dC0+Z3JhcGhpY0NvbnRleHQp
IHsKKyAgICAgICAgZnJlZShjb250ZXh0KTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAg
IGN0eHQtPnZpZXcgPSB2aWV3OwotICAgIGN0eHQtPmNyID0gY2Fpcm9fcmVmZXJlbmNlKGNyKTsK
LSAgICByZXR1cm4gY3R4dDsKKyAgICBjb250ZXh0LT52aWV3ID0gdmlldzsKKyAgICBjb250ZXh0
LT5jciA9IGNhaXJvX3JlZmVyZW5jZShjcik7CisgICAgcmV0dXJuIGNvbnRleHQ7CiB9CiAKIHZv
aWQgZXdrX3ZpZXdfcGFpbnRfY29udGV4dF9mcmVlKEV3a19WaWV3X1BhaW50X0NvbnRleHQqIGNv
bnRleHQpCiB7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oY29udGV4dCk7Ci0gICAg
ZGVsZXRlIGNvbnRleHQtPmdjOworICAgIGRlbGV0ZSBjb250ZXh0LT5ncmFwaGljQ29udGV4dDsK
ICAgICBjYWlyb19kZXN0cm95KGNvbnRleHQtPmNyKTsKICAgICBmcmVlKGNvbnRleHQpOwogfQpA
QCAtMjU0OCwxMyArMjU0OCwxMyBAQCB2b2lkIGV3a192aWV3X3BhaW50X2NvbnRleHRfc2F2ZShF
d2tfVmlld19QYWludF9Db250ZXh0KiBjb250ZXh0KQogewogICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOKGNvbnRleHQpOwogICAgIGNhaXJvX3NhdmUoY29udGV4dC0+Y3IpOwotICAgIGNv
bnRleHQtPmdjLT5zYXZlKCk7CisgICAgY29udGV4dC0+Z3JhcGhpY0NvbnRleHQtPnNhdmUoKTsK
IH0KIAogdm9pZCBld2tfdmlld19wYWludF9jb250ZXh0X3Jlc3RvcmUoRXdrX1ZpZXdfUGFpbnRf
Q29udGV4dCogY29udGV4dCkKIHsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihjb250
ZXh0KTsKLSAgICBjb250ZXh0LT5nYy0+cmVzdG9yZSgpOworICAgIGNvbnRleHQtPmdyYXBoaWND
b250ZXh0LT5yZXN0b3JlKCk7CiAgICAgY2Fpcm9fcmVzdG9yZShjb250ZXh0LT5jcik7CiB9CiAK
QEAgLTI1NjIsNyArMjU2Miw3IEBAIHZvaWQgZXdrX3ZpZXdfcGFpbnRfY29udGV4dF9jbGlwKEV3
a19WaWV3X1BhaW50X0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEVpbmFfUmVjCiB7CiAgICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oY29udGV4dCk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk4oYXJlYSk7Ci0gICAgY29udGV4dC0+Z2MtPmNsaXAoV2ViQ29yZTo6SW50UmVjdChh
cmVhLT54LCBhcmVhLT55LCBhcmVhLT53LCBhcmVhLT5oKSk7CisgICAgY29udGV4dC0+Z3JhcGhp
Y0NvbnRleHQtPmNsaXAoV2ViQ29yZTo6SW50UmVjdChhcmVhLT54LCBhcmVhLT55LCBhcmVhLT53
LCBhcmVhLT5oKSk7CiB9CiAKIHZvaWQgZXdrX3ZpZXdfcGFpbnRfY29udGV4dF9wYWludChFd2tf
Vmlld19QYWludF9Db250ZXh0KiBjb250ZXh0LCBjb25zdCBFaW5hX1JlY3RhbmdsZSogYXJlYSkK
QEAgLTI1NzMsOCArMjU3Myw4IEBAIHZvaWQgZXdrX3ZpZXdfcGFpbnRfY29udGV4dF9wYWludChF
d2tfVmlld19QYWludF9Db250ZXh0KiBjb250ZXh0LCBjb25zdCBFaW5hX1JlCiAgICAgV2ViQ29y
ZTo6SW50UmVjdCByZWN0KGFyZWEtPngsIGFyZWEtPnksIGFyZWEtPncsIGFyZWEtPmgpOwogCiAg
ICAgaWYgKGNvbnRleHQtPnZpZXctPmlzVHJhbnNwYXJlbnQoKSkKLSAgICAgICAgY29udGV4dC0+
Z2MtPmNsZWFyUmVjdChyZWN0KTsKLSAgICBjb250ZXh0LT52aWV3LT5wYWludChjb250ZXh0LT5n
YywgcmVjdCk7CisgICAgICAgIGNvbnRleHQtPmdyYXBoaWNDb250ZXh0LT5jbGVhclJlY3QocmVj
dCk7CisgICAgY29udGV4dC0+dmlldy0+cGFpbnQoY29udGV4dC0+Z3JhcGhpY0NvbnRleHQsIHJl
Y3QpOwogfQogCiB2b2lkIGV3a192aWV3X3BhaW50X2NvbnRleHRfcGFpbnRfY29udGVudHMoRXdr
X1ZpZXdfUGFpbnRfQ29udGV4dCogY29udGV4dCwgY29uc3QgRWluYV9SZWN0YW5nbGUqIGFyZWEp
CkBAIC0yNTg1LDIzICsyNTg1LDIzIEBAIHZvaWQgZXdrX3ZpZXdfcGFpbnRfY29udGV4dF9wYWlu
dF9jb250ZW50cyhFd2tfVmlld19QYWludF9Db250ZXh0KiBjb250ZXh0LCBjb25zCiAgICAgV2Vi
Q29yZTo6SW50UmVjdCByZWN0KGFyZWEtPngsIGFyZWEtPnksIGFyZWEtPncsIGFyZWEtPmgpOwog
CiAgICAgaWYgKGNvbnRleHQtPnZpZXctPmlzVHJhbnNwYXJlbnQoKSkKLSAgICAgICAgY29udGV4
dC0+Z2MtPmNsZWFyUmVjdChyZWN0KTsKKyAgICAgICAgY29udGV4dC0+Z3JhcGhpY0NvbnRleHQt
PmNsZWFyUmVjdChyZWN0KTsKIAotICAgIGNvbnRleHQtPnZpZXctPnBhaW50Q29udGVudHMoY29u
dGV4dC0+Z2MsIHJlY3QpOworICAgIGNvbnRleHQtPnZpZXctPnBhaW50Q29udGVudHMoY29udGV4
dC0+Z3JhcGhpY0NvbnRleHQsIHJlY3QpOwogfQogCiB2b2lkIGV3a192aWV3X3BhaW50X2NvbnRl
eHRfc2NhbGUoRXdrX1ZpZXdfUGFpbnRfQ29udGV4dCogY29udGV4dCwgZmxvYXQgc2NhbGVYLCBm
bG9hdCBzY2FsZVkpCiB7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oY29udGV4dCk7
CiAKLSAgICBjb250ZXh0LT5nYy0+c2NhbGUoV2ViQ29yZTo6RmxvYXRTaXplKHNjYWxlWCwgc2Nh
bGVZKSk7CisgICAgY29udGV4dC0+Z3JhcGhpY0NvbnRleHQtPnNjYWxlKFdlYkNvcmU6OkZsb2F0
U2l6ZShzY2FsZVgsIHNjYWxlWSkpOwogfQogCiB2b2lkIGV3a192aWV3X3BhaW50X2NvbnRleHRf
dHJhbnNsYXRlKEV3a19WaWV3X1BhaW50X0NvbnRleHQqIGNvbnRleHQsIGZsb2F0IHgsIGZsb2F0
IHkpCiB7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oY29udGV4dCk7CiAKLSAgICBj
b250ZXh0LT5nYy0+dHJhbnNsYXRlKHgsIHkpOworICAgIGNvbnRleHQtPmdyYXBoaWNDb250ZXh0
LT50cmFuc2xhdGUoeCwgeSk7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19wYWludChFd2tfVmll
d19Qcml2YXRlX0RhdGEqIHByaXYsIGNhaXJvX3QqIGNyLCBjb25zdCBFaW5hX1JlY3RhbmdsZSog
YXJlYSkKQEAgLTI2MDksMjEgKzI2MDksMjEgQEAgRWluYV9Cb29sIGV3a192aWV3X3BhaW50KEV3
a19WaWV3X1ByaXZhdGVfRGF0YSogcHJpdiwgY2Fpcm9fdCogY3IsIGNvbnN0IEVpbmFfUmUKICAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwocHJpdiwgRUlOQV9GQUxTRSk7CiAgICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGNyLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoYXJlYSwgRUlOQV9GQUxTRSk7Ci0gICAgV2ViQ29y
ZTo6RnJhbWVWaWV3KiB2aWV3ID0gcHJpdi0+bWFpbl9mcmFtZS0+dmlldygpOworICAgIFdlYkNv
cmU6OkZyYW1lVmlldyogdmlldyA9IHByaXYtPm1haW5GcmFtZS0+dmlldygpOwogICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh2aWV3LCBFSU5BX0ZBTFNFKTsKIAogICAgIGlmICh2
aWV3LT5uZWVkc0xheW91dCgpKQogICAgICAgICB2aWV3LT5mb3JjZUxheW91dCgpOwotICAgIFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dCBnYyhjcik7CisgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0IGdyYXBoaWNzQ29udGV4dChjcik7CiAgICAgV2ViQ29yZTo6SW50UmVjdCByZWN0KGFyZWEt
PngsIGFyZWEtPnksIGFyZWEtPncsIGFyZWEtPmgpOwogCiAgICAgY2Fpcm9fc2F2ZShjcik7Ci0g
ICAgZ2Muc2F2ZSgpOwotICAgIGdjLmNsaXAocmVjdCk7CisgICAgZ3JhcGhpY3NDb250ZXh0LnNh
dmUoKTsKKyAgICBncmFwaGljc0NvbnRleHQuY2xpcChyZWN0KTsKICAgICBpZiAodmlldy0+aXNU
cmFuc3BhcmVudCgpKQotICAgICAgICBnYy5jbGVhclJlY3QocmVjdCk7Ci0gICAgdmlldy0+cGFp
bnQoJmdjLCByZWN0KTsKLSAgICBnYy5yZXN0b3JlKCk7CisgICAgICAgIGdyYXBoaWNzQ29udGV4
dC5jbGVhclJlY3QocmVjdCk7CisgICAgdmlldy0+cGFpbnQoJmdyYXBoaWNzQ29udGV4dCwgcmVj
dCk7CisgICAgZ3JhcGhpY3NDb250ZXh0LnJlc3RvcmUoKTsKICAgICBjYWlyb19yZXN0b3JlKGNy
KTsKIAogICAgIHJldHVybiBFSU5BX1RSVUU7CkBAIC0yNjM0LDE5ICsyNjM0LDE5IEBAIEVpbmFf
Qm9vbCBld2tfdmlld19wYWludF9jb250ZW50cyhFd2tfVmlld19Qcml2YXRlX0RhdGEqIHByaXYs
IGNhaXJvX3QqIGNyLCBjb25zCiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHBy
aXYsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChjciwg
RUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGFyZWEsIEVJ
TkFfRkFMU0UpOwotICAgIFdlYkNvcmU6OkZyYW1lVmlldyogdmlldyA9IHByaXYtPm1haW5fZnJh
bWUtPnZpZXcoKTsKKyAgICBXZWJDb3JlOjpGcmFtZVZpZXcqIHZpZXcgPSBwcml2LT5tYWluRnJh
bWUtPnZpZXcoKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodmlldywgRUlO
QV9GQUxTRSk7CiAKLSAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQgZ2MoY3IpOworICAgIFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHQoY3IpOwogICAgIFdlYkNvcmU6
OkludFJlY3QgcmVjdChhcmVhLT54LCBhcmVhLT55LCBhcmVhLT53LCBhcmVhLT5oKTsKIAogICAg
IGNhaXJvX3NhdmUoY3IpOwotICAgIGdjLnNhdmUoKTsKLSAgICBnYy5jbGlwKHJlY3QpOworICAg
IGdyYXBoaWNzQ29udGV4dC5zYXZlKCk7CisgICAgZ3JhcGhpY3NDb250ZXh0LmNsaXAocmVjdCk7
CiAgICAgaWYgKHZpZXctPmlzVHJhbnNwYXJlbnQoKSkKLSAgICAgICAgZ2MuY2xlYXJSZWN0KHJl
Y3QpOwotICAgIHZpZXctPnBhaW50Q29udGVudHMoJmdjLCAgcmVjdCk7Ci0gICAgZ2MucmVzdG9y
ZSgpOworICAgICAgICBncmFwaGljc0NvbnRleHQuY2xlYXJSZWN0KHJlY3QpOworICAgIHZpZXct
PnBhaW50Q29udGVudHMoJmdyYXBoaWNzQ29udGV4dCwgIHJlY3QpOworICAgIGdyYXBoaWNzQ29u
dGV4dC5yZXN0b3JlKCk7CiAgICAgY2Fpcm9fcmVzdG9yZShjcik7CiAKICAgICByZXR1cm4gRUlO
QV9UUlVFOwpAQCAtMjY3Niw4ICsyNjc2LDggQEAgdm9pZCBld2tfdmlld19yZWFkeShFdmFzX09i
amVjdCogZXdrVmlldykKICAqLwogdm9pZCBld2tfdmlld19pbnB1dF9tZXRob2Rfc3RhdGVfc2V0
KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wgYWN0aXZlKQogewotICAgIEVXS19WSUVX
X1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUKHNk
LCBwcml2KTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0
YSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVQoc21hcnREYXRhLCBwcml2KTsKICAgICBXZWJDb3Jl
OjpGcmFtZSogZm9jdXNlZEZyYW1lID0gcHJpdi0+cGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZv
Y3VzZWRPck1haW5GcmFtZSgpOwogCiAgICAgcHJpdi0+aW1oID0gMDsKQEAgLTI3MjYsOCArMjcy
Niw4IEBAIHZvaWQgZXdrX3ZpZXdfdGl0bGVfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25z
dCBjaGFyKiB0aXRsZSkKICAqLwogdm9pZCBld2tfdmlld191cmlfY2hhbmdlZChFdmFzX09iamVj
dCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNk
KTsKLSAgICBjb25zdCBjaGFyKiB1cmkgPSBld2tfZnJhbWVfdXJpX2dldChzZC0+bWFpbl9mcmFt
ZSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEpOwor
ICAgIGNvbnN0IGNoYXIqIHVyaSA9IGV3a19mcmFtZV91cmlfZ2V0KHNtYXJ0RGF0YS0+bWFpbl9m
cmFtZSk7CiAgICAgREJHKCJld2tWaWV3PSVwLCB1cmk9JXMiLCBld2tWaWV3LCB1cmkgPyB1cmkg
OiAiKG51bGwpIik7CiAgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChld2tWaWV3
LCAidXJpLGNoYW5nZWQiLCAodm9pZCopdXJpKTsKIH0KQEAgLTI3MzYsNyArMjczNiw3IEBAIHZv
aWQgZXdrX3ZpZXdfdXJpX2NoYW5nZWQoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiAgKiBAaW50ZXJu
YWwKICAqIFJlcG9ydHMgdGhhdCBhIERPTSBkb2N1bWVudCBvYmplY3QgaGFzIGZpbmlzaGVkIGxv
YWRpbmcgZm9yIEBwIGZyYW1lLgogICoKLSAqIEBwYXJhbSBvIFZpZXcgd2hpY2ggY29udGFpbnMg
dGhlIGZyYW1lLgorICogQHBhcmFtIGV3a1ZpZXcgVmlldyB3aGljaCBjb250YWlucyB0aGUgZnJh
bWUuCiAgKiBAcGFyYW0gZnJhbWUgVGhlIGZyYW1lIHdob3NlIGxvYWQgaGFzIHRyaWdnZXJlZCB0
aGUgZXZlbnQuCiAgKgogICogRW1pdHMgc2lnbmFsOiAibG9hZCxkb2N1bWVudCxmaW5pc2hlZCIg
d2l0aCBAcCBmcmFtZSBhcyB0aGUgcGFyYW1ldGVyLgpAQCAtMjc1MCw3ICsyNzUwLDcgQEAgdm9p
ZCBld2tfdmlld19sb2FkX2RvY3VtZW50X2ZpbmlzaGVkKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBF
dmFzX09iamVjdCogZnJhbWUpCiAgKiBAaW50ZXJuYWwKICAqIFJlcG9ydHMgdGhlIHZpZXcgc3Rh
cnRlZCBsb2FkaW5nIHNvbWV0aGluZy4KICAqCi0gKiBAcGFyYW0gbyBWaWV3LgorICogQHBhcmFt
IGV3a1ZpZXcgVmlldy4KICAqCiAgKiBFbWl0cyBzaWduYWw6ICJsb2FkLHN0YXJ0ZWQiIHdpdGgg
bm8gcGFyYW1ldGVycy4KICAqLwpAQCAtMjc2Myw3ICsyNzYzLDcgQEAgdm9pZCBld2tfdmlld19s
b2FkX3N0YXJ0ZWQoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiAvKioKICAqIFJlcG9ydHMgdGhlIGZy
YW1lIHN0YXJ0ZWQgbG9hZGluZyBzb21ldGhpbmcuCiAgKgotICogQHBhcmFtIG8gVmlldy4KKyAq
IEBwYXJhbSBld2tWaWV3IFZpZXcuCiAgKgogICogRW1pdHMgc2lnbmFsOiAibG9hZCxzdGFydGVk
IiBvbiBtYWluIGZyYW1lIHdpdGggbm8gcGFyYW1ldGVycy4KICAqLwpAQCAtMjc3OCw3ICsyNzc4
LDcgQEAgdm9pZCBld2tfdmlld19mcmFtZV9tYWluX2xvYWRfc3RhcnRlZChFdmFzX09iamVjdCog
ZXdrVmlldykKICAqIEBpbnRlcm5hbAogICogUmVwb3J0cyB0aGUgbWFpbiBmcmFtZSBzdGFydGVk
IHByb3Zpc2lvbmFsIGxvYWQuCiAgKgotICogQHBhcmFtIG8gVmlldy4KKyAqIEBwYXJhbSBld2tW
aWV3IFZpZXcuCiAgKgogICogRW1pdHMgc2lnbmFsOiAibG9hZCxwcm92aXNpb25hbCIgb24gVmll
dyB3aXRoIG5vIHBhcmFtZXRlcnMuCiAgKi8KQEAgLTI3OTIsNyArMjc5Miw3IEBAIHZvaWQgZXdr
X3ZpZXdfbG9hZF9wcm92aXNpb25hbChFdmFzX09iamVjdCogZXdrVmlldykKICAqIEBpbnRlcm5h
bAogICogUmVwb3J0cyB2aWV3IGNhbiBiZSBzaG93biBhZnRlciBhIG5ldyB3aW5kb3cgaXMgY3Jl
YXRlZC4KICAqCi0gKiBAcGFyYW0gbyBGcmFtZS4KKyAqIEBwYXJhbSBld2tWaWV3IEZyYW1lLgog
ICoKICAqIEVtaXRzIHNpZ25hbDogImxvYWQsbmV3d2luZG93LHNob3ciIG9uIHZpZXcgd2l0aCBu
byBwYXJhbWV0ZXJzLgogICovCkBAIC0yODA3LDIxICsyODA3LDIxIEBAIHZvaWQgZXdrX3ZpZXdf
bG9hZF9zaG93KEV2YXNfT2JqZWN0KiBld2tWaWV3KQogICogQGludGVybmFsCiAgKiBSZXBvcnRz
IHRoZSBtYWluIGZyYW1lIHdhcyBjbGVhcmVkLgogICoKLSAqIEBwYXJhbSBvIFZpZXcuCisgKiBA
cGFyYW0gZXdrVmlldyBWaWV3LgogICovCiB2b2lkIGV3a192aWV3X2ZyYW1lX21haW5fY2xlYXJl
ZChFdmFzX09iamVjdCogZXdrVmlldykKIHsKICAgICBEQkcoImV3a1ZpZXc9JXAiLCBld2tWaWV3
KTsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkKTsKLSAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpLT5mbHVzaCk7Ci0gICAgc2QtPmFwaS0+Zmx1
c2goc2QpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRh
KTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmFwaS0+Zmx1c2gp
OworICAgIHNtYXJ0RGF0YS0+YXBpLT5mbHVzaChzbWFydERhdGEpOwogfQogCiAvKioKICAqIEBp
bnRlcm5hbAogICogUmVwb3J0cyB0aGUgbWFpbiBmcmFtZSByZWNlaXZlZCBhbiBpY29uLgogICoK
LSAqIEBwYXJhbSBvIFZpZXcuCisgKiBAcGFyYW0gZXdrVmlldyBWaWV3LgogICoKICAqIEVtaXRz
IHNpZ25hbDogImljb24scmVjZWl2ZWQiIHdpdGggbm8gcGFyYW1ldGVycy4KICAqLwpAQCAtMjg2
OCwxMCArMjg2OCwxMCBAQCB2b2lkIGV3a192aWV3X2xvYWRfZXJyb3IoRXZhc19PYmplY3QqIGV3
a1ZpZXcsIGNvbnN0IEV3a19GcmFtZV9Mb2FkX0Vycm9yKiBlcnJvcgogICovCiB2b2lkIGV3a192
aWV3X2xvYWRfcHJvZ3Jlc3NfY2hhbmdlZChFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBF
V0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkKTsKLSAgICBFV0tfVklFV19QUklW
X0dFVF9PUl9SRVRVUk4oc2QsIHByaXYpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrVmlldywgc21hcnREYXRhKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21h
cnREYXRhLCBwcml2KTsKIAotICAgIC8vIEV2YXNfQ29vcmQgdywgaDsKKyAgICAvLyBFdmFzX0Nv
b3JkIHdpZHRoLCBoZWlnaHQ7CiAgICAgZG91YmxlIHByb2dyZXNzID0gcHJpdi0+cGFnZS0+cHJv
Z3Jlc3MoKS0+ZXN0aW1hdGVkUHJvZ3Jlc3MoKTsKIAogICAgIERCRygiZXdrVmlldz0lcCAocD0l
MC4zZikiLCBld2tWaWV3LCBwcm9ncmVzcyk7CkBAIC0yODgxLDkgKzI4ODEsOSBAQCB2b2lkIGV3
a192aWV3X2xvYWRfcHJvZ3Jlc3NfY2hhbmdlZChFdmFzX09iamVjdCogZXdrVmlldykKIAogLyoq
CiAgKiBAaW50ZXJuYWwKLSAqIFJlcG9ydHMgdmlldyBAcGFyYW0gbyBzaG91bGQgYmUgcmVzdG9y
ZWQgdG8gZGVmYXVsdCBjb25kaXRpb25zCisgKiBSZXBvcnRzIHZpZXcgQHBhcmFtIGV3a1ZpZXcg
c2hvdWxkIGJlIHJlc3RvcmVkIHRvIGRlZmF1bHQgY29uZGl0aW9ucwogICoKLSAqIEBwYXJhbSBv
IFZpZXcuCisgKiBAcGFyYW0gZXdrVmlldyBWaWV3LgogICogQHBhcmFtIGZyYW1lIEZyYW1lIHRo
YXQgb3JpZ2luYXRlZCByZXN0b3JlLgogICoKICAqIEVtaXRzIHNpZ25hbDogInJlc3RvcmUiIHdp
dGggZnJhbWUuCkBAIC0yOTAzLDMwICsyOTAzLDMwIEBAIHZvaWQgZXdrX3ZpZXdfcmVzdG9yZV9z
dGF0ZShFdmFzX09iamVjdCogZXdrVmlldywgRXZhc19PYmplY3QqIGZyYW1lKQogICogY2FsbGlu
ZyBld2tfd2luZG93X2ZlYXR1cmVzX3JlZih3aW5kb3dfZmVhdHVyZXMpLiBPdGhlcndpc2UgdGhp
cyBzdHJ1Y3Qgd2lsbAogICogYmUgZnJlZWQgYWZ0ZXIgcmV0dXJuaW5nIHRvIHRoaXMgZnVuY3Rp
b24uCiAgKgotICogQHBhcmFtIG8gQ3VycmVudCB2aWV3LgorICogQHBhcmFtIGV3a1ZpZXcgQ3Vy
cmVudCB2aWV3LgogICogQHBhcmFtIGphdmFzY3JpcHQgQGMgRUlOQV9UUlVFIGlmIHRoZSBuZXcg
d2luZG93IGlzIG9yaWdpbmF0ZWQgZnJvbSBqYXZhc2NyaXB0LAogICogQGMgRUlOQV9GQUxTRSBv
dGhlcndpc2UKLSAqIEBwYXJhbSB3aW5kb3dfZmVhdHVyZXMgRmVhdHVyZXMgb2YgdGhlIG5ldyB3
aW5kb3cgYmVpbmcgY3JlYXRlZC4gSWYgaXQncyBAYworICogQHBhcmFtIHdpZHRoaW5kb3dfZmVh
dHVyZXMgRmVhdHVyZXMgb2YgdGhlIG5ldyB3aW5kb3cgYmVpbmcgY3JlYXRlZC4gSWYgaXQncyBA
YwogICogTlVMTCwgaXQgd2lsbCBiZSBjcmVhdGVkIGEgd2luZG93IHdpdGggZGVmYXVsdCBmZWF0
dXJlcy4KICAqCiAgKiBAcmV0dXJuIE5ldyB2aWV3LCBpbiBjYXNlIHNtYXJ0IGNsYXNzIGltcGxl
bWVudHMgdGhlIGNyZWF0aW9uIG9mIG5ldyB3aW5kb3dzOwotICogZWxzZSwgY3VycmVudCB2aWV3
IEBwYXJhbSBvIG9yIEBjIDAgb24gZmFpbHVyZS4KKyAqIGVsc2UsIGN1cnJlbnQgdmlldyBAcGFy
YW0gZXdrVmlldyBvciBAYyAwIG9uIGZhaWx1cmUuCiAgKgogICogQHNlZSBld2tfd2luZG93X2Zl
YXR1cmVzX3JlZigpLgogICovCiBFdmFzX09iamVjdCogZXdrX3ZpZXdfd2luZG93X2NyZWF0ZShF
dmFzX09iamVjdCogZXdrVmlldywgRWluYV9Cb29sIGphdmFzY3JpcHQsIGNvbnN0IFdlYkNvcmU6
OldpbmRvd0ZlYXR1cmVzKiBjb3JlRmVhdHVyZXMpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihld2tWaWV3LCBzZCwgMCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihl
d2tWaWV3LCBzbWFydERhdGEsIDApOwogCi0gICAgaWYgKCFzZC0+YXBpLT53aW5kb3dfY3JlYXRl
KQorICAgIGlmICghc21hcnREYXRhLT5hcGktPndpbmRvd19jcmVhdGUpCiAgICAgICAgIHJldHVy
biBld2tWaWV3OwogCi0gICAgRXdrX1dpbmRvd19GZWF0dXJlcyogd2luZG93X2ZlYXR1cmVzID0g
ZXdrX3dpbmRvd19mZWF0dXJlc19uZXdfZnJvbV9jb3JlKGNvcmVGZWF0dXJlcyk7Ci0gICAgaWYg
KCF3aW5kb3dfZmVhdHVyZXMpCisgICAgRXdrX1dpbmRvd19GZWF0dXJlcyogd2luZG93RmVhdHVy
ZXMgPSBld2tfd2luZG93X2ZlYXR1cmVzX25ld19mcm9tX2NvcmUoY29yZUZlYXR1cmVzKTsKKyAg
ICBpZiAoIXdpbmRvd0ZlYXR1cmVzKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIEV2YXNfT2Jq
ZWN0KiB2aWV3ID0gc2QtPmFwaS0+d2luZG93X2NyZWF0ZShzZCwgamF2YXNjcmlwdCwgd2luZG93
X2ZlYXR1cmVzKTsKLSAgICBld2tfd2luZG93X2ZlYXR1cmVzX3VucmVmKHdpbmRvd19mZWF0dXJl
cyk7CisgICAgRXZhc19PYmplY3QqIHZpZXcgPSBzbWFydERhdGEtPmFwaS0+d2luZG93X2NyZWF0
ZShzbWFydERhdGEsIGphdmFzY3JpcHQsIHdpbmRvd0ZlYXR1cmVzKTsKKyAgICBld2tfd2luZG93
X2ZlYXR1cmVzX3VucmVmKHdpbmRvd0ZlYXR1cmVzKTsKIAogICAgIHJldHVybiB2aWV3OwogfQpA
QCAtMjk0MCwxNiArMjk0MCwxNiBAQCBFdmFzX09iamVjdCogZXdrX3ZpZXdfd2luZG93X2NyZWF0
ZShFdmFzX09iamVjdCogZXdrVmlldywgRWluYV9Cb29sIGphdmFzY3JpcHQsCiAgKiB3aXRoIGEg
J3NlbGYuY2xvc2UoKScgaW4gSmF2YXNjcmlwdCkgYnJvd3NlciBtdXN0IHBvc3Rwb25lIHRoZSBk
ZWxldGlvbiB0byBhbgogICogaWRsZXIuCiAgKgotICogQHBhcmFtIG8gVmlldyB0byBiZSBjbG9z
ZWQuCisgKiBAcGFyYW0gZXdrVmlldyBWaWV3IHRvIGJlIGNsb3NlZC4KICAqLwogdm9pZCBld2tf
dmlld193aW5kb3dfY2xvc2UoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JF
VFVSTihld2tWaWV3LCBzbWFydERhdGEpOwogCiAgICAgZXdrX3ZpZXdfc3RvcChld2tWaWV3KTsK
LSAgICBpZiAoIXNkLT5hcGktPndpbmRvd19jbG9zZSkKKyAgICBpZiAoIXNtYXJ0RGF0YS0+YXBp
LT53aW5kb3dfY2xvc2UpCiAgICAgICAgIHJldHVybjsKLSAgICBzZC0+YXBpLT53aW5kb3dfY2xv
c2Uoc2QpOworICAgIHNtYXJ0RGF0YS0+YXBpLT53aW5kb3dfY2xvc2Uoc21hcnREYXRhKTsKIH0K
IAogLyoqCkBAIC0yOTkwLDcgKzI5OTAsNyBAQCB2b2lkIGV3a192aWV3X3Rvb2xiYXJzX3Zpc2li
bGVfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wgdmlzaWJsZSkKICAqIEBpbnRl
cm5hbAogICogR2V0IHRvb2xiYXIgdmlzaWJpbGl0eS4KICAqCi0gKiBAcGFyYW0gbyBWaWV3Lgor
ICogQHBhcmFtIGV3a1ZpZXcgVmlldy4KICAqIEBwYXJhbSB2aXNpYmxlIGJvb2xlYW4gcG9pbnRl
ciBpbiB3aGljaCB0byBzYXZlIHRoZSByZXN1bHQuIEl0IGRlZmF1bHRzCiAgKiB0byBAYyBGQUxT
RSwgaS5lLiBpZiBicm93c2VyIGRvZXMgbm8gbGlzdGVuIHRvIGVtaXR0ZWQgc2lnbmFsLCBpdCBt
ZWFucwogICogdGhlcmUgYXJlIG5vIHRvb2xiYXJzIGFuZCB0aGVyZWZvcmUgdGhleSBhcmUgbm90
IHZpc2libGUuCkBAIC0zMDA4LDcgKzMwMDgsNyBAQCB2b2lkIGV3a192aWV3X3Rvb2xiYXJzX3Zp
c2libGVfZ2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wqIHZpc2libGUpCiAgKiBA
aW50ZXJuYWwKICAqIFNldCBzdGF0dXNiYXIgdmlzaWJsZS4KICAqCi0gKiBAcGFyYW0gbyBWaWV3
LgorICogQHBhcmFtIGV3a1ZpZXcgVmlldy4KICAqIEBwYXJhbSB2aXNpYmxlIEBjIFRSVUUgaWYg
c3RhdHVzYmFyIGFyZSB2aXNpYmxlLCBAYyBGQUxTRSBvdGhlcndpc2UuCiAgKgogICogRW1pdHMg
c2lnbmFsOiAic3RhdHVzYmFyLHZpc2libGUsc2V0IiB3aXRoIGEgcG9pbnRlciB0byBhIGJvb2xl
YW4uCkBAIC0zMDIzLDcgKzMwMjMsNyBAQCB2b2lkIGV3a192aWV3X3N0YXR1c2Jhcl92aXNpYmxl
X3NldChFdmFzX09iamVjdCogZXdrVmlldywgRWluYV9Cb29sIHZpc2libGUpCiAgKiBAaW50ZXJu
YWwKICAqIEdldCBzdGF0dXNiYXIgdmlzaWJpbGl0eS4KICAqCi0gKiBAcGFyYW0gbyBWaWV3Lgor
ICogQHBhcmFtIGV3a1ZpZXcgVmlldy4KICAqIEBwYXJhbSB2aXNpYmxlIGJvb2xlYW4gcG9pbnRl
ciBpbiB3aGljaCB0byBzYXZlIHRoZSByZXN1bHQuIEl0IGRlZmF1bHRzCiAgKiB0byBAYyBGQUxT
RSwgaS5lLiBpZiBicm93c2VyIGRvZXMgbm8gbGlzdGVuIHRvIGVtaXR0ZWQgc2lnbmFsLCBpdCBt
ZWFucwogICogdGhlcmUgaXMgbm8gc3RhdHVzYmFyIGFuZCB0aGVyZWZvcmUgaXQgaXMgbm90IHZp
c2libGUuCkBAIC0zMDQxLDcgKzMwNDEsNyBAQCB2b2lkIGV3a192aWV3X3N0YXR1c2Jhcl92aXNp
YmxlX2dldChFdmFzX09iamVjdCogZXdrVmlldywgRWluYV9Cb29sKiB2aXNpYmxlKQogICogQGlu
dGVybmFsCiAgKiBTZXQgdGV4dCBvZiBzdGF0dXNiYXIKICAqCi0gKiBAcGFyYW0gbyBWaWV3Lgor
ICogQHBhcmFtIGV3a1ZpZXcgVmlldy4KICAqIEBwYXJhbSB0ZXh0IE5ldyB0ZXh0IHRvIHB1dCBv
biBzdGF0dXNiYXIuCiAgKgogICogRW1pdHMgc2lnbmFsOiAic3RhdHVzYmFyLHRleHQsc2V0IiB3
aXRoIGEgc3RyaW5nLgpAQCAtMzA1Nyw3ICszMDU3LDcgQEAgdm9pZCBld2tfdmlld19zdGF0dXNi
YXJfdGV4dF9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGNvbnN0IGNoYXIqIHRleHQpCiAgKiBA
aW50ZXJuYWwKICAqIFNldCBzY3JvbGxiYXJzIHZpc2libGUuCiAgKgotICogQHBhcmFtIG8gVmll
dy4KKyAqIEBwYXJhbSBld2tWaWV3IFZpZXcuCiAgKiBAcGFyYW0gdmlzaWJsZSBAYyBUUlVFIGlm
IHNjcm9sbGJhcnMgYXJlIHZpc2libGUsIEBjIEZBTFNFIG90aGVyd2lzZS4KICAqCiAgKiBFbWl0
cyBzaWduYWw6ICJzY3JvbGxiYXJzLHZpc2libGUsc2V0IiB3aXRoIGEgcG9pbnRlciB0byBhIGJv
b2xlYW4uCkBAIC0zMDcyLDcgKzMwNzIsNyBAQCB2b2lkIGV3a192aWV3X3Njcm9sbGJhcnNfdmlz
aWJsZV9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCB2aXNpYmxlKQogICogQGlu
dGVybmFsCiAgKiBHZXQgc2Nyb2xsYmFycyB2aXNpYmlsaXR5LgogICoKLSAqIEBwYXJhbSBvIFZp
ZXcuCisgKiBAcGFyYW0gZXdrVmlldyBWaWV3LgogICogQHBhcmFtIHZpc2libGUgYm9vbGVhbiBw
b2ludGVyIGluIHdoaWNoIHRvIHNhdmUgdGhlIHJlc3VsdC4gSXQgZGVmYXVsdHMKICAqIHRvIEBj
IEZBTFNFLCBpLmUuIGlmIGJyb3dzZXIgZG9lcyBubyBsaXN0ZW4gdG8gZW1pdHRlZCBzaWduYWws
IGl0IG1lYW5zCiAgKiB0aGVyZSBhcmUgbm8gc2Nyb2xsYmFycyBhbmQgdGhlcmVmb3JlIHRoZXkg
YXJlIG5vdCB2aXNpYmxlLgpAQCAtMzA5MCw3ICszMDkwLDcgQEAgdm9pZCBld2tfdmlld19zY3Jv
bGxiYXJzX3Zpc2libGVfZ2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wqIHZpc2li
bGUpCiAgKiBAaW50ZXJuYWwKICAqIFNldCBtZW51YmFyIHZpc2libGUuCiAgKgotICogQHBhcmFt
IG8gVmlldy4KKyAqIEBwYXJhbSBld2tWaWV3IFZpZXcuCiAgKiBAcGFyYW0gdmlzaWJsZSBAYyBU
UlVFIGlmIG1lbnViYXIgaXMgdmlzaWJsZSwgQGMgRkFMU0Ugb3RoZXJ3aXNlLgogICoKICAqIEVt
aXRzIHNpZ25hbDogIm1lbnViYXIsdmlzaWJsZSxzZXQiIHdpdGggYSBwb2ludGVyIHRvIGEgYm9v
bGVhbi4KQEAgLTMxMDUsNyArMzEwNSw3IEBAIHZvaWQgZXdrX3ZpZXdfbWVudWJhcl92aXNpYmxl
X3NldChFdmFzX09iamVjdCogZXdrVmlldywgRWluYV9Cb29sIHZpc2libGUpCiAgKiBAaW50ZXJu
YWwKICAqIEdldCBtZW51YmFyIHZpc2liaWxpdHkuCiAgKgotICogQHBhcmFtIG8gVmlldy4KKyAq
IEBwYXJhbSBld2tWaWV3IFZpZXcuCiAgKiBAcGFyYW0gdmlzaWJsZSBib29sZWFuIHBvaW50ZXIg
aW4gd2hpY2ggdG8gc2F2ZSB0aGUgcmVzdWx0LiBJdCBkZWZhdWx0cwogICogdG8gQGMgRkFMU0Us
IGkuZS4gaWYgYnJvd3NlciBkb2VzIG5vIGxpc3RlbiB0byBlbWl0dGVkIHNpZ25hbCwgaXQgbWVh
bnMKICAqIHRoZXJlIGlzIG5vIG1lbnViYXIgYW5kIHRoZXJlZm9yZSBpdCBpcyBub3QgdmlzaWJs
ZS4KQEAgLTMxMjMsNyArMzEyMyw3IEBAIHZvaWQgZXdrX3ZpZXdfbWVudWJhcl92aXNpYmxlX2dl
dChFdmFzX09iamVjdCogZXdrVmlldywgRWluYV9Cb29sKiB2aXNpYmxlKQogICogQGludGVybmFs
CiAgKiBTZXQgdG9vbHRpcCB0ZXh0IGFuZCBkaXNwbGF5IGlmIGl0IGlzIGN1cnJlbnRseSBoaWRk
ZW4uCiAgKgotICogQHBhcmFtIG8gVmlldy4KKyAqIEBwYXJhbSBld2tWaWV3IFZpZXcuCiAgKiBA
cGFyYW0gdGV4dCBUZXh0IHRvIHNldCB0b29sdGlwIHRvLgogICoKICAqIEVtaXRzIHNpZ25hbDog
InRvb2x0aXAsdGV4dCxzZXQiIHdpdGggYSBzdHJpbmcuIElmIHRvb2x0aXAgbXVzdCBiZSBhY3R1
YWxseQpAQCAtMzEzOCw3ICszMTM4LDcgQEAgdm9pZCBld2tfdmlld190b29sdGlwX3RleHRfc2V0
KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBjaGFyKiB0ZXh0KQogLyoqCiAgKiBAaW50ZXJu
YWwKICAqCi0gKiBAcGFyYW0gbyBWaWV3LgorICogQHBhcmFtIGV3a1ZpZXcgVmlldy4KICAqIEBw
YXJhbSBtZXNzYWdlIFN0cmluZyB0byBzaG93IG9uIGNvbnNvbGUuCiAgKiBAcGFyYW0gbGluZU51
bWJlciBMaW5lIG51bWJlci4KICAqIEBzb3VyY2VJRCBTb3VyY2UgaWQuCkBAIC0zMTQ3LDU4ICsz
MTQ3LDU4IEBAIHZvaWQgZXdrX3ZpZXdfdG9vbHRpcF90ZXh0X3NldChFdmFzX09iamVjdCogZXdr
VmlldywgY29uc3QgY2hhciogdGV4dCkKIHZvaWQgZXdrX3ZpZXdfYWRkX2NvbnNvbGVfbWVzc2Fn
ZShFdmFzX09iamVjdCogZXdrVmlldywgY29uc3QgY2hhciogbWVzc2FnZSwgdW5zaWduZWQgaW50
IGxpbmVOdW1iZXIsIGNvbnN0IGNoYXIqIHNvdXJjZUlEKQogewogICAgIERCRygiZXdrVmlldz0l
cCBtZXNzYWdlPSVzIGxpbmVOdW1iZXI9JXUgc291cmNlSUQ9JXMiLCBld2tWaWV3LCBtZXNzYWdl
LCBsaW5lTnVtYmVyLCBzb3VyY2VJRCk7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihl
d2tWaWV3LCBzZCk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFwaSk7Ci0g
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFwaS0+YWRkX2NvbnNvbGVfbWVzc2Fn
ZSk7Ci0gICAgc2QtPmFwaS0+YWRkX2NvbnNvbGVfbWVzc2FnZShzZCwgbWVzc2FnZSwgbGluZU51
bWJlciwgc291cmNlSUQpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywg
c21hcnREYXRhKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmFw
aSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRhLT5hcGktPmFkZF9j
b25zb2xlX21lc3NhZ2UpOworICAgIHNtYXJ0RGF0YS0+YXBpLT5hZGRfY29uc29sZV9tZXNzYWdl
KHNtYXJ0RGF0YSwgbWVzc2FnZSwgbGluZU51bWJlciwgc291cmNlSUQpOwogfQogCiBib29sIGV3
a192aWV3X2ZvY3VzX2Nhbl9jeWNsZShFdmFzX09iamVjdCogZXdrVmlldywgRXdrX0ZvY3VzX0Rp
cmVjdGlvbiBkaXJlY3Rpb24pCiB7CiAgICAgREJHKCJld2tWaWV3PSVwIGRpcmVjdGlvbj0lZCIs
IGV3a1ZpZXcsIGRpcmVjdGlvbik7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tW
aWV3LCBzZCwgZmFsc2UpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+
YXBpLCBmYWxzZSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFy
dERhdGEsIGZhbHNlKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnRE
YXRhLT5hcGksIGZhbHNlKTsKIAotICAgIGlmICghc2QtPmFwaS0+Zm9jdXNfY2FuX2N5Y2xlKQor
ICAgIGlmICghc21hcnREYXRhLT5hcGktPmZvY3VzX2Nhbl9jeWNsZSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgcmV0dXJuIHNkLT5hcGktPmZvY3VzX2Nhbl9jeWNsZShzZCwgZGlyZWN0
aW9uKTsKKyAgICByZXR1cm4gc21hcnREYXRhLT5hcGktPmZvY3VzX2Nhbl9jeWNsZShzbWFydERh
dGEsIGRpcmVjdGlvbik7CiB9CiAKIHZvaWQgZXdrX3ZpZXdfcnVuX2phdmFzY3JpcHRfYWxlcnQo
RXZhc19PYmplY3QqIGV3a1ZpZXcsIEV2YXNfT2JqZWN0KiBmcmFtZSwgY29uc3QgY2hhciogbWVz
c2FnZSkKIHsKICAgICBEQkcoImV3a1ZpZXc9JXAgZnJhbWU9JXAgbWVzc2FnZT0lcyIsIGV3a1Zp
ZXcsIGZyYW1lLCBtZXNzYWdlKTsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1Zp
ZXcsIHNkKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpKTsKKyAgICBF
V0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSk7CisgICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRhLT5hcGkpOwogCi0gICAgaWYgKCFzZC0+YXBp
LT5ydW5famF2YXNjcmlwdF9hbGVydCkKKyAgICBpZiAoIXNtYXJ0RGF0YS0+YXBpLT5ydW5famF2
YXNjcmlwdF9hbGVydCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgc2QtPmFwaS0+cnVuX2phdmFz
Y3JpcHRfYWxlcnQoc2QsIGZyYW1lLCBtZXNzYWdlKTsKKyAgICBzbWFydERhdGEtPmFwaS0+cnVu
X2phdmFzY3JpcHRfYWxlcnQoc21hcnREYXRhLCBmcmFtZSwgbWVzc2FnZSk7CiB9CiAKIEVpbmFf
Qm9vbCBld2tfdmlld19ydW5famF2YXNjcmlwdF9jb25maXJtKEV2YXNfT2JqZWN0KiBld2tWaWV3
LCBFdmFzX09iamVjdCogZnJhbWUsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpCiB7CiAgICAgREJHKCJl
d2tWaWV3PSVwIGZyYW1lPSVwIG1lc3NhZ2U9JXMiLCBld2tWaWV3LCBmcmFtZSwgbWVzc2FnZSk7
Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7
Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5hcGksIEVJTkFfRkFMU0Up
OworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5B
X0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5h
cGksIEVJTkFfRkFMU0UpOwogCi0gICAgaWYgKCFzZC0+YXBpLT5ydW5famF2YXNjcmlwdF9jb25m
aXJtKQorICAgIGlmICghc21hcnREYXRhLT5hcGktPnJ1bl9qYXZhc2NyaXB0X2NvbmZpcm0pCiAg
ICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwogCi0gICAgcmV0dXJuIHNkLT5hcGktPnJ1bl9qYXZh
c2NyaXB0X2NvbmZpcm0oc2QsIGZyYW1lLCBtZXNzYWdlKTsKKyAgICByZXR1cm4gc21hcnREYXRh
LT5hcGktPnJ1bl9qYXZhc2NyaXB0X2NvbmZpcm0oc21hcnREYXRhLCBmcmFtZSwgbWVzc2FnZSk7
CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19ydW5famF2YXNjcmlwdF9wcm9tcHQoRXZhc19PYmpl
Y3QqIGV3a1ZpZXcsIEV2YXNfT2JqZWN0KiBmcmFtZSwgY29uc3QgY2hhciogbWVzc2FnZSwgY29u
c3QgY2hhciogZGVmYXVsdFZhbHVlLCBjaGFyKiogdmFsdWUpCiB7CiAgICAgREJHKCJld2tWaWV3
PSVwIGZyYW1lPSVwIG1lc3NhZ2U9JXMiLCBld2tWaWV3LCBmcmFtZSwgbWVzc2FnZSk7Ci0gICAg
RVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5hcGksIEVJTkFfRkFMU0UpOworICAg
IEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNF
KTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5hcGksIEVJ
TkFfRkFMU0UpOwogCi0gICAgaWYgKCFzZC0+YXBpLT5ydW5famF2YXNjcmlwdF9wcm9tcHQpCisg
ICAgaWYgKCFzbWFydERhdGEtPmFwaS0+cnVuX2phdmFzY3JpcHRfcHJvbXB0KQogICAgICAgICBy
ZXR1cm4gRUlOQV9GQUxTRTsKIAotICAgIHJldHVybiBzZC0+YXBpLT5ydW5famF2YXNjcmlwdF9w
cm9tcHQoc2QsIGZyYW1lLCBtZXNzYWdlLCBkZWZhdWx0VmFsdWUsIHZhbHVlKTsKKyAgICByZXR1
cm4gc21hcnREYXRhLT5hcGktPnJ1bl9qYXZhc2NyaXB0X3Byb21wdChzbWFydERhdGEsIGZyYW1l
LCBtZXNzYWdlLCBkZWZhdWx0VmFsdWUsIHZhbHVlKTsKIH0KIAogLyoqCkBAIC0zMjA4LDIwICsz
MjA4LDIwIEBAIEVpbmFfQm9vbCBld2tfdmlld19ydW5famF2YXNjcmlwdF9wcm9tcHQoRXZhc19P
YmplY3QqIGV3a1ZpZXcsIEV2YXNfT2JqZWN0KiBmcmFtCiAgKiBpbXBsZW1lbnRhdGlvbiwgd2hp
Y2ggbG9ncyBhbmQgcmV0dXJucyBFSU5BX0ZBTFNFLiBDbGllbnQgbWF5IHJlbW92ZSBsb2cgYnkK
ICAqIHNldHRpbmcgdGhpcyBmdW5jdGlvbiAwLCB3aGljaCB3aWxsIGp1c3QgcmV0dXJuIEVJTkFf
RkFMU0UuCiAgKgotICogQHBhcmFtIG8gVmlldy4KKyAqIEBwYXJhbSBld2tWaWV3IFZpZXcuCiAg
KgogICogQHJldHVybiBAYyBFSU5BX1RSVUUgaWYgc2NyaXB0IHNob3VsZCBiZSBzdG9wcGVkOyBA
YyBFSU5BX0ZBTFNFIG90aGVyd2lzZQogICovCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2hvdWxkX2lu
dGVycnVwdF9qYXZhc2NyaXB0KEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewogICAgIERCRygiZXdr
Vmlldz0lcCIsIGV3a1ZpZXcpOwotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmll
dywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChz
ZC0+YXBpLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1Zp
ZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk5fVkFMKHNtYXJ0RGF0YS0+YXBpLCBFSU5BX0ZBTFNFKTsKIAotICAgIGlmICghc2QtPmFwaS0+
c2hvdWxkX2ludGVycnVwdF9qYXZhc2NyaXB0KQorICAgIGlmICghc21hcnREYXRhLT5hcGktPnNo
b3VsZF9pbnRlcnJ1cHRfamF2YXNjcmlwdCkKICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CiAK
LSAgICByZXR1cm4gc2QtPmFwaS0+c2hvdWxkX2ludGVycnVwdF9qYXZhc2NyaXB0KHNkKTsKKyAg
ICByZXR1cm4gc21hcnREYXRhLT5hcGktPnNob3VsZF9pbnRlcnJ1cHRfamF2YXNjcmlwdChzbWFy
dERhdGEpOwogfQogCiAvKioKQEAgLTMyMzEsMjMgKzMyMzEsMjMgQEAgRWluYV9Cb29sIGV3a192
aWV3X3Nob3VsZF9pbnRlcnJ1cHRfamF2YXNjcmlwdChFdmFzX09iamVjdCogZXdrVmlldykKICAq
IGlzIGV4Y2VlZGVkLiBCcm93c2VyIG1heSB1c2UgdGhpcyB0byBpbmNyZWFzZSB0aGUgc2l6ZSBv
ZiBxdW90YSBiZWZvcmUgdGhlCiAgKiBvcmlnaW5hdGluZyBvcGVyYXRpb25hIGZhaWxzLgogICoK
LSAqIEBwYXJhbSBvIFZpZXcuCisgKiBAcGFyYW0gZXdrVmlldyBWaWV3LgogICogQHBhcmFtIGZy
YW1lIFRoZSBmcmFtZSB3aG9zZSB3ZWIgcGFnZSBleGNlZWRlZCBpdHMgZGF0YWJhc2UgcXVvdGEu
CiAgKiBAcGFyYW0gZGF0YWJhc2VOYW1lIERhdGFiYXNlIG5hbWUuCi0gKiBAcGFyYW0gY3VycmVu
dF9zaXplIEN1cnJlbnQgc2l6ZSBvZiB0aGlzIGRhdGFiYXNlCi0gKiBAcGFyYW0gZXhwZWN0ZWRf
c2l6ZSBUaGUgZXhwZWN0ZWQgc2l6ZSBvZiB0aGlzIGRhdGFiYXNlIGluIG9yZGVyIHRvIGZ1bGZp
bGwKKyAqIEBwYXJhbSBjdXJyZW50U2l6ZSBDdXJyZW50IHNpemUgb2YgdGhpcyBkYXRhYmFzZQor
ICogQHBhcmFtIGV4cGVjdGVkU2l6ZSBUaGUgZXhwZWN0ZWQgc2l6ZSBvZiB0aGlzIGRhdGFiYXNl
IGluIG9yZGVyIHRvIGZ1bGZpbGwKICAqIHNpdGUncyByZXF1aXJlbWVudC4KICAqLwogdWludDY0
X3QgZXdrX3ZpZXdfZXhjZWVkZWRfZGF0YWJhc2VfcXVvdGEoRXZhc19PYmplY3QqIGV3a1ZpZXcs
IEV2YXNfT2JqZWN0KiBmcmFtZSwgY29uc3QgY2hhciogZGF0YWJhc2VOYW1lLCB1aW50NjRfdCBj
dXJyZW50U2l6ZSwgdWludDY0X3QgZXhwZWN0ZWRTaXplKQogewogICAgIERCRygiZXdrVmlldz0l
cCIsIGV3a1ZpZXcpOwotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2Qs
IDApOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+YXBpLCAwKTsKLSAg
ICBpZiAoIXNkLT5hcGktPmV4Y2VlZGVkX2RhdGFiYXNlX3F1b3RhKQorICAgIEVXS19WSUVXX1NE
X0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCAwKTsKKyAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5hcGksIDApOworICAgIGlmICghc21hcnREYXRh
LT5hcGktPmV4Y2VlZGVkX2RhdGFiYXNlX3F1b3RhKQogICAgICAgICByZXR1cm4gMDsKIAotICAg
IElORigiY3VycmVudF9zaXplPSUiIFBSSXU2NCAiIGV4cGVjdGVkX3NpemU9JSIgUFJJdTY0LCBj
dXJyZW50U2l6ZSwgZXhwZWN0ZWRTaXplKTsKLSAgICByZXR1cm4gc2QtPmFwaS0+ZXhjZWVkZWRf
ZGF0YWJhc2VfcXVvdGEoc2QsIGZyYW1lLCBkYXRhYmFzZU5hbWUsIGN1cnJlbnRTaXplLCBleHBl
Y3RlZFNpemUpOworICAgIElORigiY3VycmVudFNpemU9JSIgUFJJdTY0ICIgZXhwZWN0ZWRTaXpl
PSUiIFBSSXU2NCwgY3VycmVudFNpemUsIGV4cGVjdGVkU2l6ZSk7CisgICAgcmV0dXJuIHNtYXJ0
RGF0YS0+YXBpLT5leGNlZWRlZF9kYXRhYmFzZV9xdW90YShzbWFydERhdGEsIGZyYW1lLCBkYXRh
YmFzZU5hbWUsIGN1cnJlbnRTaXplLCBleHBlY3RlZFNpemUpOwogfQogCiAvKioKQEAgLTMyNjUs
MTkgKzMyNjUsMTkgQEAgdWludDY0X3QgZXdrX3ZpZXdfZXhjZWVkZWRfZGF0YWJhc2VfcXVvdGEo
RXZhc19PYmplY3QqIGV3a1ZpZXcsIEV2YXNfT2JqZWN0KiBmcmEKIEVpbmFfQm9vbCBld2tfdmll
d19ydW5fb3Blbl9wYW5lbChFdmFzX09iamVjdCogZXdrVmlldywgRXZhc19PYmplY3QqIGZyYW1l
LCBib29sIGFsbG93c011bHRpcGxlRmlsZXMsIGNvbnN0IFdURjo6VmVjdG9yPFdURjo6U3RyaW5n
PiYgYWNjZXB0TUlNRVR5cGVzLCBFaW5hX0xpc3QqKiBzZWxlY3RlZEZpbGVuYW1lcykKIHsKICAg
ICBEQkcoImV3a1ZpZXc9JXAgZnJhbWU9JXAgYWxsb3dzX211bHRpcGxlX2ZpbGVzPSVkIiwgZXdr
VmlldywgZnJhbWUsIGFsbG93c011bHRpcGxlRmlsZXMpOwotICAgIEVXS19WSUVXX1NEX0dFVF9P
Ul9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOX1ZBTChzZC0+YXBpLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRf
T1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZF
VFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+YXBpLCBFSU5BX0ZBTFNFKTsKIAotICAg
IGlmICghc2QtPmFwaS0+cnVuX29wZW5fcGFuZWwpCisgICAgaWYgKCFzbWFydERhdGEtPmFwaS0+
cnVuX29wZW5fcGFuZWwpCiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwogCiAgICAgKnNlbGVj
dGVkRmlsZW5hbWVzID0gMDsKIAogICAgIEVpbmFfTGlzdCogY0FjY2VwdE1JTUVUeXBlcyA9IDA7
Ci0gICAgZm9yIChXVEY6OlZlY3RvcjxXVEY6OlN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
YWNjZXB0TUlNRVR5cGVzLmJlZ2luKCk7IGl0ICE9IGFjY2VwdE1JTUVUeXBlcy5lbmQoKTsgKytp
dCkKLSAgICAgICAgY0FjY2VwdE1JTUVUeXBlcyA9IGVpbmFfbGlzdF9hcHBlbmQoY0FjY2VwdE1J
TUVUeXBlcywgc3RyZHVwKCgqaXQpLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICBmb3IgKFdURjo6VmVj
dG9yPFdURjo6U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXRlcmF0b3IgPSBhY2NlcHRNSU1FVHlw
ZXMuYmVnaW4oKTsgaXRlcmF0b3IgIT0gYWNjZXB0TUlNRVR5cGVzLmVuZCgpOyArK2l0ZXJhdG9y
KQorICAgICAgICBjQWNjZXB0TUlNRVR5cGVzID0gZWluYV9saXN0X2FwcGVuZChjQWNjZXB0TUlN
RVR5cGVzLCBzdHJkdXAoKCppdGVyYXRvcikudXRmOCgpLmRhdGEoKSkpOwogCi0gICAgYm9vbCBj
b25maXJtID0gc2QtPmFwaS0+cnVuX29wZW5fcGFuZWwoc2QsIGZyYW1lLCBhbGxvd3NNdWx0aXBs
ZUZpbGVzLCBjQWNjZXB0TUlNRVR5cGVzLCBzZWxlY3RlZEZpbGVuYW1lcyk7CisgICAgYm9vbCBj
b25maXJtID0gc21hcnREYXRhLT5hcGktPnJ1bl9vcGVuX3BhbmVsKHNtYXJ0RGF0YSwgZnJhbWUs
IGFsbG93c011bHRpcGxlRmlsZXMsIGNBY2NlcHRNSU1FVHlwZXMsIHNlbGVjdGVkRmlsZW5hbWVz
KTsKICAgICBpZiAoIWNvbmZpcm0gJiYgKnNlbGVjdGVkRmlsZW5hbWVzKQogICAgICAgICBFUlIo
IkNhbmNlbGVkIGZpbGUgc2VsZWN0aW9uLCBidXQgc2VsZWN0ZWQgZmlsZW5hbWVzICE9IDAuIEZy
ZWUgbmFtZXMgYmVmb3JlIHJldHVybi4iKTsKIApAQCAtMzI5MSwxMSArMzI5MSwxMSBAQCBFaW5h
X0Jvb2wgZXdrX3ZpZXdfcnVuX29wZW5fcGFuZWwoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV2YXNf
T2JqZWN0KiBmcmFtZSwgYm9vbAogdm9pZCBld2tfdmlld19yZXBhaW50KEV2YXNfT2JqZWN0KiBl
d2tWaWV3LCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwgRXZhc19Db29yZCB3aWR0aCwgRXZh
c19Db29yZCBoZWlnaHQpCiB7CiAgICAgREJHKCJld2tWaWV3PSVwLCByZWdpb249JWQsJWQgKyAl
ZHglZCIsIGV3a1ZpZXcsIHgsIHksIHdpZHRoLCBoZWlnaHQpOwotICAgIEVXS19WSUVXX1NEX0dF
VF9PUl9SRVRVUk4oZXdrVmlldywgc2QpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVS
TihzZCwgcHJpdik7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFy
dERhdGEpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYp
OwogCiAgICAgX2V3a192aWV3X3JlcGFpbnRfYWRkKHByaXYsIHgsIHksIHdpZHRoLCBoZWlnaHQp
OwotICAgIF9ld2tfdmlld19zbWFydF9jaGFuZ2VkKHNkKTsKKyAgICBfZXdrX3ZpZXdfc21hcnRf
Y2hhbmdlZChzbWFydERhdGEpOwogfQogCiB2b2lkIGV3a192aWV3X3Njcm9sbChFdmFzX09iamVj
dCogZXdrVmlldywgRXZhc19Db29yZCBkeCwgRXZhc19Db29yZCBkeSwgRXZhc19Db29yZCBzY3Jv
bGxYLCBFdmFzX0Nvb3JkIHNjcm9sbFksIEV2YXNfQ29vcmQgc2Nyb2xsV2lkdGgsIEV2YXNfQ29v
cmQgc2Nyb2xsSGVpZ2h0LCBFdmFzX0Nvb3JkIGNlbnRlclgsIEV2YXNfQ29vcmQgY2VudGVyWSwg
RXZhc19Db29yZCBjZW50ZXJXaWR0aCwgRXZhc19Db29yZCBjZW50ZXJIZWlnaHQsIEVpbmFfQm9v
bCBtYWluRnJhbWUpCkBAIC0zMzA3LDE5ICszMzA3LDE5IEBAIHZvaWQgZXdrX3ZpZXdfc2Nyb2xs
KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFdmFzX0Nvb3JkIGR4LCBFdmFzX0Nvb3JkIGR5LCBFdmFz
X0NvCiAgICAgICAgIFdSTigic2Nyb2xsIHJlZ2lvbiBhbmQgY2xpcCBhcmUgZGlmZmVyZW50ISAl
ZCwlZCslZHglZCBhbmQgJWQsJWQrJWR4JWQiLAogICAgICAgICAgICAgc2Nyb2xsWCwgc2Nyb2xs
WSwgc2Nyb2xsV2lkdGgsIHNjcm9sbEhlaWdodCwgY2VudGVyWCwgY2VudGVyWSwgY2VudGVyV2lk
dGgsIGNlbnRlckhlaWdodCk7CiAKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1Zp
ZXcsIHNkKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYpOworICAg
IEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhKTsKKyAgICBFV0tf
VklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2KTsKICAgICBFSU5BX1NBRkVU
WV9PTl9UUlVFX1JFVFVSTighZHggJiYgIWR5KTsKIAogICAgIF9ld2tfdmlld19zY3JvbGxfYWRk
KHByaXYsIGR4LCBkeSwgc2Nyb2xsWCwgc2Nyb2xsWSwgc2Nyb2xsV2lkdGgsIHNjcm9sbEhlaWdo
dCwgbWFpbkZyYW1lKTsKIAotICAgIF9ld2tfdmlld19zbWFydF9jaGFuZ2VkKHNkKTsKKyAgICBf
ZXdrX3ZpZXdfc21hcnRfY2hhbmdlZChzbWFydERhdGEpOwogfQogCiBXZWJDb3JlOjpQYWdlKiBl
d2tfdmlld19jb3JlX3BhZ2VfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAg
IEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIDApOwotICAgIEVXS19WSUVX
X1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgMCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIDApOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09S
X1JFVFVSTihzbWFydERhdGEsIHByaXYsIDApOwogICAgIHJldHVybiBwcml2LT5wYWdlOwogfQog
CkBAIC0zMzM0LDMwICszMzM0LDMwIEBAIFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpGcmFtZT4g
ZXdrX3ZpZXdfZnJhbWVfY3JlYXRlKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFdmFzCiAgICAgICAg
IGV3a1ZpZXcsIGZyYW1lLCBuYW1lLnV0ZjgoKS5kYXRhKCksIG93bmVyRWxlbWVudCwKICAgICAg
ICAgdXJsLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIHJlZmVycmVyLnV0ZjgoKS5kYXRhKCkpOwog
Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgMCk7Ci0gICAgRVdL
X1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCAwKTsKKyAgICBFV0tfVklFV19TRF9H
RVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgMCk7CisgICAgRVdLX1ZJRVdfUFJJVl9H
RVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgMCk7CiAKLSAgICBXVEY6OlJlZlB0cjxXZWJD
b3JlOjpGcmFtZT4gY2YgPSBfZXdrX3ZpZXdfY29yZV9mcmFtZV9uZXcKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNkLCBwcml2LCBvd25lckVsZW1lbnQpOwotICAg
IGlmICghY2YpIHsKKyAgICBXVEY6OlJlZlB0cjxXZWJDb3JlOjpGcmFtZT4gY29yZUZyYW1lID0g
X2V3a192aWV3X2NvcmVfZnJhbWVfbmV3CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIChzbWFydERhdGEsIHByaXYsIG93bmVyRWxlbWVudCk7CisgICAgaWYgKCFjb3Jl
RnJhbWUpIHsKICAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIGNoaWxkIGNvcmUgZnJhbWUg
JyVzJyIsIG5hbWUudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAot
ICAgIGlmICghZXdrX2ZyYW1lX2NoaWxkX2FkZChmcmFtZSwgY2YsIG5hbWUsIHVybCwgcmVmZXJy
ZXIpKSB7CisgICAgaWYgKCFld2tfZnJhbWVfY2hpbGRfYWRkKGZyYW1lLCBjb3JlRnJhbWUsIG5h
bWUsIHVybCwgcmVmZXJyZXIpKSB7CiAgICAgICAgIEVSUigiQ291bGQgbm90IGNyZWF0ZSBjaGls
ZCBmcmFtZSBvYmplY3QgJyVzJyIsIG5hbWUudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIHJldHVy
biAwOwogICAgIH0KIAogICAgIC8vIFRoZSBjcmVhdGlvbiBvZiB0aGUgZnJhbWUgbWF5IGhhdmUg
cmVtb3ZlZCBpdHNlbGYgYWxyZWFkeS4KLSAgICBpZiAoIWNmLT5wYWdlKCkgfHwgIWNmLT50cmVl
KCkgfHwgIWNmLT50cmVlKCktPnBhcmVudCgpKQorICAgIGlmICghY29yZUZyYW1lLT5wYWdlKCkg
fHwgIWNvcmVGcmFtZS0+dHJlZSgpIHx8ICFjb3JlRnJhbWUtPnRyZWUoKS0+cGFyZW50KCkpCiAg
ICAgICAgIHJldHVybiAwOwogCi0gICAgc2QtPmNoYW5nZWQuZnJhbWVfcmVjdCA9IEVJTkFfVFJV
RTsKLSAgICBfZXdrX3ZpZXdfc21hcnRfY2hhbmdlZChzZCk7CisgICAgc21hcnREYXRhLT5jaGFu
Z2VkLmZyYW1lX3JlY3QgPSBFSU5BX1RSVUU7CisgICAgX2V3a192aWV3X3NtYXJ0X2NoYW5nZWQo
c21hcnREYXRhKTsKIAogICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdrVmll
dywgImZyYW1lLGNyZWF0ZWQiLCBmcmFtZSk7Ci0gICAgcmV0dXJuIGNmLnJlbGVhc2UoKTsKKyAg
ICByZXR1cm4gY29yZUZyYW1lLnJlbGVhc2UoKTsKIH0KIAogV1RGOjpQYXNzUmVmUHRyPFdlYkNv
cmU6OldpZGdldD4gZXdrX3ZpZXdfcGx1Z2luX2NyZWF0ZShFdmFzX09iamVjdCogZXdrVmlldywg
RXZhc19PYmplY3QqIGZyYW1lLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBwbHVnaW5TaXplLCBX
ZWJDb3JlOjpIVE1MUGx1Z0luRWxlbWVudCogZWxlbWVudCwgY29uc3QgV2ViQ29yZTo6S1VSTCYg
dXJsLCBjb25zdCBXVEY6OlZlY3RvcjxXVEY6OlN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFdU
Rjo6VmVjdG9yPFdURjo6U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0IFdURjo6U3RyaW5nJiBt
aW1lVHlwZSwgYm9vbCBsb2FkTWFudWFsbHkpCkBAIC0zMzY2LDkgKzMzNjYsOSBAQCBXVEY6OlBh
c3NSZWZQdHI8V2ViQ29yZTo6V2lkZ2V0PiBld2tfdmlld19wbHVnaW5fY3JlYXRlKEV2YXNfT2Jq
ZWN0KiBld2tWaWV3LCBFdgogICAgICAgICBld2tWaWV3LCBmcmFtZSwgcGx1Z2luU2l6ZS53aWR0
aCgpLCBwbHVnaW5TaXplLmhlaWdodCgpLCBlbGVtZW50LAogICAgICAgICB1cmwuc3RyaW5nKCku
dXRmOCgpLmRhdGEoKSwgbWltZVR5cGUudXRmOCgpLmRhdGEoKSk7CiAKLSAgICBFV0tfVklFV19T
RF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAwKTsKLSAgICBzZC0+Y2hhbmdlZC5mcmFtZV9y
ZWN0ID0gRUlOQV9UUlVFOwotICAgIF9ld2tfdmlld19zbWFydF9jaGFuZ2VkKHNkKTsKKyAgICBF
V0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgMCk7CisgICAgc21h
cnREYXRhLT5jaGFuZ2VkLmZyYW1lX3JlY3QgPSBFSU5BX1RSVUU7CisgICAgX2V3a192aWV3X3Nt
YXJ0X2NoYW5nZWQoc21hcnREYXRhKTsKIAogICAgIHJldHVybiBld2tfZnJhbWVfcGx1Z2luX2Ny
ZWF0ZQogICAgICAgICAgICAgICAgKGZyYW1lLCBwbHVnaW5TaXplLCBlbGVtZW50LCB1cmwsIHBh
cmFtTmFtZXMsIHBhcmFtVmFsdWVzLApAQCAtMzM4OSwxMyArMzM4OSwxMyBAQCBXVEY6OlBhc3NS
ZWZQdHI8V2ViQ29yZTo6V2lkZ2V0PiBld2tfdmlld19wbHVnaW5fY3JlYXRlKEV2YXNfT2JqZWN0
KiBld2tWaWV3LCBFdgogdm9pZCBld2tfdmlld19wb3B1cF9uZXcoRXZhc19PYmplY3QqIGV3a1Zp
ZXcsIFdlYkNvcmU6OlBvcHVwTWVudUNsaWVudCogY2xpZW50LCBpbnQgc2VsZWN0ZWQsIGNvbnN0
IFdlYkNvcmU6OkludFJlY3QmIHJlY3QpCiB7CiAgICAgSU5GKCJld2tWaWV3PSVwIiwgZXdrVmll
dyk7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCk7Ci0gICAgRVdL
X1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2KTsKKyAgICBFV0tfVklFV19TRF9HRVRf
T1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1Jf
UkVUVVJOKHNtYXJ0RGF0YSwgcHJpdik7CiAKLSAgICBpZiAocHJpdi0+cG9wdXAubWVudV9jbGll
bnQpCisgICAgaWYgKHByaXYtPnBvcHVwLm1lbnVDbGllbnQpCiAgICAgICAgIGV3a192aWV3X3Bv
cHVwX2Rlc3Ryb3koZXdrVmlldyk7CiAKLSAgICBwcml2LT5wb3B1cC5tZW51X2NsaWVudCA9IGNs
aWVudDsKKyAgICBwcml2LT5wb3B1cC5tZW51Q2xpZW50ID0gY2xpZW50OwogCiAgICAgLy8gcG9w
dWxhdGUgaXRlbXMKICAgICBjb25zdCBpbnQgc2l6ZSA9IGNsaWVudC0+bGlzdFNpemUoKTsKQEAg
LTM0MjIsMTAgKzM0MjIsMTAgQEAgdm9pZCBld2tfdmlld19wb3B1cF9uZXcoRXZhc19PYmplY3Qq
IGV3a1ZpZXcsIFdlYkNvcmU6OlBvcHVwTWVudUNsaWVudCogY2xpZW50LAogRWluYV9Cb29sIGV3
a192aWV3X3BvcHVwX2Rlc3Ryb3koRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7CiAgICAgSU5GKCJl
d2tWaWV3PSVwIiwgZXdrVmlldyk7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tW
aWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNk
LCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1Zp
ZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVU
VVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CiAKLSAgICBpZiAoIXByaXYtPnBvcHVw
Lm1lbnVfY2xpZW50KQorICAgIGlmICghcHJpdi0+cG9wdXAubWVudUNsaWVudCkKICAgICAgICAg
cmV0dXJuIEVJTkFfRkFMU0U7CiAKICAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxs
KGV3a1ZpZXcsICJwb3B1cCx3aWxsZGVsZXRlIiwgJnByaXYtPnBvcHVwLm1lbnUpOwpAQCAtMzQz
Niw4ICszNDM2LDggQEAgRWluYV9Cb29sIGV3a192aWV3X3BvcHVwX2Rlc3Ryb3koRXZhc19PYmpl
Y3QqIGV3a1ZpZXcpCiAgICAgICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVsKGl0ZW0tPnRleHQpOwog
ICAgICAgICBmcmVlKGl0ZW0pOwogICAgIH0KLSAgICBwcml2LT5wb3B1cC5tZW51X2NsaWVudC0+
cG9wdXBEaWRIaWRlKCk7Ci0gICAgcHJpdi0+cG9wdXAubWVudV9jbGllbnQgPSAwOworICAgIHBy
aXYtPnBvcHVwLm1lbnVDbGllbnQtPnBvcHVwRGlkSGlkZSgpOworICAgIHByaXYtPnBvcHVwLm1l
bnVDbGllbnQgPSAwOwogCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KQEAgLTM0NDUsMTggKzM0
NDUsMTggQEAgRWluYV9Cb29sIGV3a192aWV3X3BvcHVwX2Rlc3Ryb3koRXZhc19PYmplY3QqIGV3
a1ZpZXcpCiB2b2lkIGV3a192aWV3X3BvcHVwX3NlbGVjdGVkX3NldChFdmFzX09iamVjdCogZXdr
VmlldywgaW50IGluZGV4KQogewogICAgIElORigiZXdrVmlldz0lcCIsIGV3a1ZpZXcpOwotICAg
IEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QpOwotICAgIEVXS19WSUVXX1BS
SVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdik7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk4ocHJpdi0+cG9wdXAubWVudV9jbGllbnQpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRV
Uk4oZXdrVmlldywgc21hcnREYXRhKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4o
c21hcnREYXRhLCBwcml2KTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihwcml2LT5w
b3B1cC5tZW51Q2xpZW50KTsKIAotICAgIHByaXYtPnBvcHVwLm1lbnVfY2xpZW50LT52YWx1ZUNo
YW5nZWQoaW5kZXgpOworICAgIHByaXYtPnBvcHVwLm1lbnVDbGllbnQtPnZhbHVlQ2hhbmdlZChp
bmRleCk7CiB9CiAKIC8qKgogICogQGludGVybmFsCiAgKiBSZXF1ZXN0IGEgZG93bmxvYWQgdG8g
dXNlci4KICAqCi0gKiBAcGFyYW0gbyBWaWV3LgorICogQHBhcmFtIGV3a1ZpZXcgVmlldy4KICAq
IEBvYXJhbSBkb3dubG9hZCBFd2tfRG93bmxvYWQgc3RydWN0IHRvIGJlIHNlbnQuCiAgKgogICog
RW1pdHM6ICJkb3dubG9hZCxyZXF1ZXN0IiB3aXRoIGFuIEV3a19Eb3dubG9hZCBjb250YWluaW5n
IHRoZSBkZXRhaWxzIG9mIHRoZQpAQCAtMzQ3Miw3ICszNDcyLDcgQEAgdm9pZCBld2tfdmlld19k
b3dubG9hZF9yZXF1ZXN0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFd2tfRG93bmxvYWQqIGRvd25s
b2FkKQogICogQGludGVybmFsCiAgKiBSZXBvcnRzIHRoZSBKUyB3aW5kb3cgb2JqZWN0IHdhcyBj
bGVhcmVkLgogICoKLSAqIEBwYXJhbSBvIHZpZXcuCisgKiBAcGFyYW0gZXdrVmlldyB2aWV3Lgog
ICogQHBhcmFtIGZyYW1lIHRoZSBmcmFtZS4KICAqLwogdm9pZCBld2tfdmlld19qc193aW5kb3df
b2JqZWN0X2NsZWFyKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFdmFzX09iamVjdCogZnJhbWUpCkBA
IC0zNDkwLDEwICszNDkwLDEwIEBAIHZvaWQgZXdrX3ZpZXdfanNfd2luZG93X29iamVjdF9jbGVh
cihFdmFzX09iamVjdCogZXdrVmlldywgRXZhc19PYmplY3QqIGZyYW1lKQogICovCiB2b2lkIGV3
a192aWV3X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25z
dCBXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50cyYgYXJndW1lbnRzKQogewotICAgIEVXS19WSUVX
X1NEX0dFVChld2tWaWV3LCBzZCk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVQoc2QsIHByaXYpOwor
ICAgIEVXS19WSUVXX1NEX0dFVChld2tWaWV3LCBzbWFydERhdGEpOworICAgIEVXS19WSUVXX1BS
SVZfR0VUKHNtYXJ0RGF0YSwgcHJpdik7CiAKLSAgICBwcml2LT52aWV3cG9ydF9hcmd1bWVudHMg
PSBhcmd1bWVudHM7CisgICAgcHJpdi0+dmlld3BvcnRBcmd1bWVudHMgPSBhcmd1bWVudHM7CiAg
ICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChld2tWaWV3LCAidmlld3BvcnQsY2hh
bmdlZCIsIDApOwogfQogCkBAIC0zNTE5LDcwICszNTE5LDcwIEBAIHZvaWQgZXdrX3ZpZXdfdmll
d3BvcnRfYXR0cmlidXRlc19nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcsIGludCogd2lk
dGgsIGluCiAKIEVpbmFfQm9vbCBld2tfdmlld196b29tX3JhbmdlX3NldChFdmFzX09iamVjdCog
ZXdrVmlldywgZmxvYXQgbWluU2NhbGUsIGZsb2F0IG1heFNjYWxlKQogewotICAgIEVXS19WSUVX
X1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVX
X1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVX
S19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOwog
CiAgICAgaWYgKG1heFNjYWxlIDwgbWluU2NhbGUpIHsKICAgICAgICAgV1JOKCJtaW5fc2NhbGUg
aXMgbGFyZ2VyIHRoYW4gbWF4X3NjYWxlIik7CiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwog
ICAgIH0KIAotICAgIHByaXYtPnNldHRpbmdzLnpvb21fcmFuZ2UubWluX3NjYWxlID0gbWluU2Nh
bGU7Ci0gICAgcHJpdi0+c2V0dGluZ3Muem9vbV9yYW5nZS5tYXhfc2NhbGUgPSBtYXhTY2FsZTsK
KyAgICBwcml2LT5zZXR0aW5ncy56b29tUmFuZ2UubWluU2NhbGUgPSBtaW5TY2FsZTsKKyAgICBw
cml2LT5zZXR0aW5ncy56b29tUmFuZ2UubWF4U2NhbGUgPSBtYXhTY2FsZTsKIAogICAgIHJldHVy
biBFSU5BX1RSVUU7CiB9CiAKIGZsb2F0IGV3a192aWV3X3pvb21fcmFuZ2VfbWluX2dldChjb25z
dCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJO
KGV3a1ZpZXcsIHNkLCAtMS4wKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2Qs
IHByaXYsIC0xLjApOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21h
cnREYXRhLCAtMS4wKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRh
LCBwcml2LCAtMS4wKTsKIAotICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy56b29tX3JhbmdlLm1p
bl9zY2FsZTsKKyAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3Muem9vbVJhbmdlLm1pblNjYWxlOwog
fQogCiBmbG9hdCBld2tfdmlld196b29tX3JhbmdlX21heF9nZXQoY29uc3QgRXZhc19PYmplY3Qq
IGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwg
LTEuMCk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCAtMS4wKTsK
KyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgLTEuMCk7
CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgLTEuMCk7
CiAKLSAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3Muem9vbV9yYW5nZS5tYXhfc2NhbGU7CisgICAg
cmV0dXJuIHByaXYtPnNldHRpbmdzLnpvb21SYW5nZS5tYXhTY2FsZTsKIH0KIAogRWluYV9Cb29s
IGV3a192aWV3X3VzZXJfc2NhbGFibGVfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jv
b2wgdXNlclNjYWxhYmxlKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmll
dywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwg
cHJpdiwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3
LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVS
TihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOwogCi0gICAgcHJpdi0+c2V0dGluZ3Muem9v
bV9yYW5nZS51c2VyX3NjYWxhYmxlID0gdXNlclNjYWxhYmxlOworICAgIHByaXYtPnNldHRpbmdz
Lnpvb21SYW5nZS51c2VyU2NhbGFibGUgPSB1c2VyU2NhbGFibGU7CiAKICAgICByZXR1cm4gRUlO
QV9UUlVFOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfdXNlcl9zY2FsYWJsZV9nZXQoY29uc3Qg
RXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihl
d2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJO
KHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3
a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1Jf
UkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CiAKLSAgICByZXR1cm4gcHJpdi0+
c2V0dGluZ3Muem9vbV9yYW5nZS51c2VyX3NjYWxhYmxlOworICAgIHJldHVybiBwcml2LT5zZXR0
aW5ncy56b29tUmFuZ2UudXNlclNjYWxhYmxlOwogfQogCiBmbG9hdCBld2tfdmlld19kZXZpY2Vf
cGl4ZWxfcmF0aW9fZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19W
SUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIC0xLjApOwotICAgIEVXS19WSUVXX1BS
SVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgLTEuMCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIC0xLjApOworICAgIEVXS19WSUVXX1BSSVZfR0VU
X09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIC0xLjApOwogCi0gICAgcmV0dXJuIHByaXYtPnNl
dHRpbmdzLmRldmljZV9waXhlbF9yYXRpbzsKKyAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZGV2
aWNlUGl4ZWxSYXRpbzsKIH0KIAogdm9pZCBld2tfdmlld19kaWRfZmlyc3RfdmlzdWFsbHlfbm9u
ZW1wdHlfbGF5b3V0KEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dF
VF9PUl9SRVRVUk4oZXdrVmlldywgc2QpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVS
TihzZCwgcHJpdik7Ci0gICAgaWYgKCFwcml2LT5mbGFncy52aWV3X2NsZWFyZWQpIHsKKyAgICBF
V0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSk7CisgICAgRVdLX1ZJ
RVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdik7CisgICAgaWYgKCFwcml2LT5m
bGFncy52aWV3Q2xlYXJlZCkgewogICAgICAgICBld2tfdmlld19mcmFtZV9tYWluX2NsZWFyZWQo
ZXdrVmlldyk7CiAgICAgICAgIGV3a192aWV3X2VuYWJsZV9yZW5kZXIoZXdrVmlldyk7Ci0gICAg
ICAgIHByaXYtPmZsYWdzLnZpZXdfY2xlYXJlZCA9IEVJTkFfVFJVRTsKKyAgICAgICAgcHJpdi0+
ZmxhZ3Mudmlld0NsZWFyZWQgPSBFSU5BX1RSVUU7CiAgICAgfQogfQogCkBAIC0zNTkwLDcgKzM1
OTAsNyBAQCB2b2lkIGV3a192aWV3X2RpZF9maXJzdF92aXN1YWxseV9ub25lbXB0eV9sYXlvdXQo
RXZhc19PYmplY3QqIGV3a1ZpZXcpCiAgKiBAaW50ZXJuYWwKICAqIERpc3BhdGNoIGZpbmlzaGVk
IGxvYWRpbmcuCiAgKgotICogQHBhcmFtIG8gdmlldy4KKyAqIEBwYXJhbSBld2tWaWV3IHZpZXcu
CiAgKi8KIHZvaWQgZXdrX3ZpZXdfZGlzcGF0Y2hfZGlkX2ZpbmlzaF9sb2FkaW5nKEV2YXNfT2Jq
ZWN0KiBld2tWaWV3KQogewpAQCAtMzYwMywxMSArMzYwMywxMSBAQCB2b2lkIGV3a192aWV3X2Rp
c3BhdGNoX2RpZF9maW5pc2hfbG9hZGluZyhFdmFzX09iamVjdCogZXdrVmlldykKIAogdm9pZCBl
d2tfdmlld190cmFuc2l0aW9uX3RvX2NvbW1pdGVkX2Zvcl9uZXdwYWdlKEV2YXNfT2JqZWN0KiBl
d2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QpOwot
ICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdik7CisgICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEpOworICAgIEVXS19WSUVXX1BSSVZf
R0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYpOwogCiAgICAgZXdrX3ZpZXdfZGlzYWJsZV9y
ZW5kZXIoZXdrVmlldyk7Ci0gICAgcHJpdi0+ZmxhZ3Mudmlld19jbGVhcmVkID0gRUlOQV9GQUxT
RTsKKyAgICBwcml2LT5mbGFncy52aWV3Q2xlYXJlZCA9IEVJTkFfRkFMU0U7CiB9CiAKIApAQCAt
MzYxNywxOCArMzYxNywxOCBAQCB2b2lkIGV3a192aWV3X3RyYW5zaXRpb25fdG9fY29tbWl0ZWRf
Zm9yX25ld3BhZ2UoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiAgKiByZXF1ZXN0IHdvdWxkIGJlIHVz
ZWQuIElmIEByZXR1cm4gaXMgdHJ1ZSwgbG9hZGVyIHdpbGwgdHJ5IHRvIGxvYWQuIEVsc2UsCiAg
KiBMb2FkZXIgaWdub3JlIGFjdGlvbiBvZiByZXF1ZXN0LgogICoKLSAqIEBwYXJhbSBvIFZpZXcg
dG8gbG9hZAorICogQHBhcmFtIGV3a1ZpZXcgVmlldyB0byBsb2FkCiAgKiBAcGFyYW0gcmVxdWVz
dCBSZXF1ZXN0IHdoaWNoIGNvbnRhaW4gdXJsIHRvIG5hdmlnYXRlCiAgKi8KIEVpbmFfQm9vbCBl
d2tfdmlld19uYXZpZ2F0aW9uX3BvbGljeV9kZWNpc2lvbihFdmFzX09iamVjdCogZXdrVmlldywg
RXdrX0ZyYW1lX1Jlc291cmNlX1JlcXVlc3QqIHJlcXVlc3QpCiB7Ci0gICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9UUlVFKTsKLSAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTl9WQUwoc2QtPmFwaSwgRUlOQV9UUlVFKTsKKyAgICBFV0tfVklFV19TRF9H
RVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9UUlVFKTsKKyAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5hcGksIEVJTkFfVFJVRSk7CiAKLSAg
ICBpZiAoIXNkLT5hcGktPm5hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9uKQorICAgIGlmICghc21h
cnREYXRhLT5hcGktPm5hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9uKQogICAgICAgICByZXR1cm4g
RUlOQV9UUlVFOwogCi0gICAgcmV0dXJuIHNkLT5hcGktPm5hdmlnYXRpb25fcG9saWN5X2RlY2lz
aW9uKHNkLCByZXF1ZXN0KTsKKyAgICByZXR1cm4gc21hcnREYXRhLT5hcGktPm5hdmlnYXRpb25f
cG9saWN5X2RlY2lzaW9uKHNtYXJ0RGF0YSwgcmVxdWVzdCk7CiB9CiAKIEVpbmFfQm9vbCBld2tf
dmlld19qc19vYmplY3RfYWRkKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFd2tfSlNfT2JqZWN0KiBv
YmplY3QsIGNvbnN0IGNoYXIqIG9iamVjdE5hbWUpCkBAIC0zNjM2LDI1ICszNjM2LDI1IEBAIEVp
bmFfQm9vbCBld2tfdmlld19qc19vYmplY3RfYWRkKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFd2tf
SlNfT2JqZWN0KiBvYmplY3QsIGNvCiAjaWYgRU5BQkxFKE5FVFNDQVBFX1BMVUdJTl9BUEkpCiAg
ICAgaWYgKG9iamVjdC0+dmlldykgLy8gb2JqZWN0IGhhcyBhbHJlYWR5IGJlZW4gYWRkZWQgdG8g
YW5vdGhlciBld2tfdmlldwogICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKLSAgICBvYmplY3Qt
Pm5hbWUgPSBlaW5hX3N0cmluZ3NoYXJlX2FkZChvYmplY3RfbmFtZSk7Ci0gICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdf
UFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBvYmplY3QtPm5h
bWUgPSBlaW5hX3N0cmluZ3NoYXJlX2FkZChvYmplY3ROYW1lKTsKKyAgICBFV0tfVklFV19TRF9H
RVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJ
RVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CiAKICAg
ICBKU0M6OkpTTG9jayBsb2NrKEpTQzo6U2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKLSAgICBXZWJD
b3JlOjpKU0RPTVdpbmRvdyogd2luZG93ID0gdG9KU0RPTVdpbmRvdyhwcml2LT5tYWluX2ZyYW1l
LCBXZWJDb3JlOjptYWluVGhyZWFkTm9ybWFsV29ybGQoKSk7CisgICAgV2ViQ29yZTo6SlNET01X
aW5kb3cqIHdpbmRvdyA9IHRvSlNET01XaW5kb3cocHJpdi0+bWFpbkZyYW1lLCBXZWJDb3JlOjpt
YWluVGhyZWFkTm9ybWFsV29ybGQoKSk7CiAgICAgSlNDOjpCaW5kaW5nczo6Um9vdE9iamVjdCog
cm9vdDsKLSAgICByb290ID0gcHJpdi0+bWFpbl9mcmFtZS0+c2NyaXB0KCktPmJpbmRpbmdSb290
T2JqZWN0KCk7CisgICAgcm9vdCA9IHByaXYtPm1haW5GcmFtZS0+c2NyaXB0KCktPmJpbmRpbmdS
b290T2JqZWN0KCk7CiAKICAgICBpZiAoIXdpbmRvdykgewogICAgICAgICBFUlIoIldhcm5pbmc6
IGNvdWxkbid0IGdldCB3aW5kb3cgb2JqZWN0Iik7CiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNF
OwogICAgIH0KIAotICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjID0gd2luZG93LT5nbG9iYWxFeGVj
KCk7CisgICAgSlNDOjpFeGVjU3RhdGUqIGV4ZWN1dGVTdGF0ZSA9IHdpbmRvdy0+Z2xvYmFsRXhl
YygpOwogCi0gICAgb2JqLT52aWV3ID0gZXdrVmlldzsKLSAgICBKU0M6OkpTT2JqZWN0KiBydW50
aW1lT2JqZWN0ID0gKEpTQzo6SlNPYmplY3QqKUpTQzo6QmluZGluZ3M6OkNJbnN0YW5jZTo6Y3Jl
YXRlKChOUE9iamVjdCopb2JqLCByb290KS0+Y3JlYXRlUnVudGltZU9iamVjdChleGVjKTsKLSAg
ICBKU0M6OklkZW50aWZpZXIgaWQgPSBKU0M6OklkZW50aWZpZXIoZXhlYywgb2JqX25hbWUpOwor
ICAgIG9iamVjdC0+dmlldyA9IGV3a1ZpZXc7CisgICAgSlNDOjpKU09iamVjdCogcnVudGltZU9i
amVjdCA9IChKU0M6OkpTT2JqZWN0KilKU0M6OkJpbmRpbmdzOjpDSW5zdGFuY2U6OmNyZWF0ZSgo
TlBPYmplY3QqKW9iamVjdCwgcm9vdCktPmNyZWF0ZVJ1bnRpbWVPYmplY3QoZXhlY3V0ZVN0YXRl
KTsKKyAgICBKU0M6OklkZW50aWZpZXIgaWQgPSBKU0M6OklkZW50aWZpZXIoZXhlYywgb2JqZWN0
TmFtZSk7CiAKICAgICBKU0M6OlB1dFByb3BlcnR5U2xvdCBzbG90OwogICAgIHdpbmRvdy0+cHV0
VmlydHVhbChleGVjLCBpZCwgcnVudGltZU9iamVjdCwgc2xvdCk7CkBAIC0zNjY2LDI3ICszNjY2
LDI3IEBAIEVpbmFfQm9vbCBld2tfdmlld19qc19vYmplY3RfYWRkKEV2YXNfT2JqZWN0KiBld2tW
aWV3LCBFd2tfSlNfT2JqZWN0KiBvYmplY3QsIGNvCiAKIEVpbmFfQm9vbCBld2tfdmlld19wcm90
b2NvbF9oYW5kbGVyX3NldChFdmFzX09iamVjdCogZXdrVmlldywgY29uc3QgY2hhcioqIHByb3Rv
Y29scywgRXdrX1ZpZXdfUmVzb3VyY2VfSGFuZGxlcl9DYiBoYW5kbGVyLCB2b2lkKiBjb250ZXh0
KQogewotICAgIEVXS19WSUVXX1NEX0dFVChld2tWaWV3LCBzZCk7Ci0gICAgRVdLX1ZJRVdfUFJJ
Vl9HRVQoc2QsIHByaXYpOworICAgIEVXS19WSUVXX1NEX0dFVChld2tWaWV3LCBzbWFydERhdGEp
OworICAgIEVXS19WSUVXX1BSSVZfR0VUKHNtYXJ0RGF0YSwgcHJpdik7CiAKICAgICBpZiAoIWhh
bmRsZXIpCiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwogCi0gICAgcHJpdi0+Y3VzdG9tX3Jl
c291cmNlX2hhbmRsZXIuZnVuY3Rpb24gPSBoYW5kbGVyOwotICAgIHByaXYtPmN1c3RvbV9yZXNv
dXJjZV9oYW5kbGVyLmNvbnRleHQgPSBjb250ZXh0OworICAgIHByaXYtPmN1c3RvbVJlc291cmNl
SGFuZGxlci5mdW5jdGlvbiA9IGhhbmRsZXI7CisgICAgcHJpdi0+Y3VzdG9tUmVzb3VyY2VIYW5k
bGVyLmNvbnRleHQgPSBjb250ZXh0OwogCiAgICAgcmV0dXJuIGV3a19jdXN0b21fcHJvdG9jb2xf
aGFuZGxlcl9zZXQocHJvdG9jb2xzKTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3Byb3RvY29s
X2hhbmRsZXJfdW5zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0Rf
R0VUKGV3a1ZpZXcsIHNkKTsKLSAgICBFV0tfVklFV19QUklWX0dFVChzZCwgcHJpdik7CisgICAg
RVdLX1ZJRVdfU0RfR0VUKGV3a1ZpZXcsIHNtYXJ0RGF0YSk7CisgICAgRVdLX1ZJRVdfUFJJVl9H
RVQoc21hcnREYXRhLCBwcml2KTsKICAgICBFaW5hX0Jvb2wgcmV0ID0gZXdrX2N1c3RvbV9wcm90
b2NvbF9oYW5kbGVyX2FsbF91bnNldCgpOwogCiAgICAgaWYgKHJldCkgewotICAgICAgICBwcml2
LT5jdXN0b21fcmVzb3VyY2VfaGFuZGxlci5mdW5jdGlvbiA9IDA7Ci0gICAgICAgIHByaXYtPmN1
c3RvbV9yZXNvdXJjZV9oYW5kbGVyLmNvbnRleHQgPSAwOworICAgICAgICBwcml2LT5jdXN0b21S
ZXNvdXJjZUhhbmRsZXIuZnVuY3Rpb24gPSAwOworICAgICAgICBwcml2LT5jdXN0b21SZXNvdXJj
ZUhhbmRsZXIuY29udGV4dCA9IDA7CiAgICAgfQogCiAgICAgcmV0dXJuIHJldDsKQEAgLTM2OTQs
MTIgKzM2OTQsMTIgQEAgRWluYV9Cb29sIGV3a192aWV3X3Byb3RvY29sX2hhbmRsZXJfdW5zZXQo
RXZhc19PYmplY3QqIGV3a1ZpZXcpCiAKIHZvaWQqIGV3a192aWV3X3Byb3RvY29sX2hhbmRsZXJf
cmVzb3VyY2VfZ2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBzaXplX3QqIGJ5dGVzUmVhZCwgY2hh
cioqIG1pbWUsIGNvbnN0IGNoYXIqIGZpbGUpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUKGV3a1Zp
ZXcsIHNkKTsKLSAgICBFV0tfVklFV19QUklWX0dFVChzZCwgcHJpdik7CisgICAgRVdLX1ZJRVdf
U0RfR0VUKGV3a1ZpZXcsIHNtYXJ0RGF0YSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVQoc21hcnRE
YXRhLCBwcml2KTsKIAotICAgIEV3a19WaWV3X1Jlc291cmNlX0hhbmRsZXJfQ2IgZnVuY3Rpb24g
PSBwcml2LT5jdXN0b21fcmVzb3VyY2VfaGFuZGxlci5mdW5jdGlvbjsKKyAgICBFd2tfVmlld19S
ZXNvdXJjZV9IYW5kbGVyX0NiIGZ1bmN0aW9uID0gcHJpdi0+Y3VzdG9tUmVzb3VyY2VIYW5kbGVy
LmZ1bmN0aW9uOwogICAgIGlmIChmdW5jdGlvbikKLSAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGZp
bGUsIGJ5dGVzUmVhZCwgbWltZSwgcHJpdi0+Y3VzdG9tX3Jlc291cmNlX2hhbmRsZXIuY29udGV4
dCk7CisgICAgICAgIHJldHVybiBmdW5jdGlvbihmaWxlLCBieXRlc1JlYWQsIG1pbWUsIHByaXYt
PmN1c3RvbVJlc291cmNlSGFuZGxlci5jb250ZXh0KTsKIAogICAgIHJldHVybiAwOwogfQpAQCAt
MzcwOSwxNyArMzcwOSwxNyBAQCB2b2lkKiBld2tfdmlld19wcm90b2NvbF9oYW5kbGVyX3Jlc291
cmNlX2dldChFdmFzX09iamVjdCogZXdrVmlldywgc2l6ZV90KiBieXRlcwogICogUmVwb3J0cyB0
aGF0IHRoZSBjb250ZW50cyBoYXZlIHJlc2l6ZWQuIFRoZSBld2tfdmlldyBjYWxscyBjb250ZW50
c19yZXNpemUsCiAgKiB3aGljaCBjYW4gYmUgcmVpbXBsZW1lbnRlZCBhcyBuZWVkZWQuCiAgKgot
ICogQHBhcmFtIG8gdmlldy4KLSAqIEBwYXJhbSB3IG5ldyBjb250ZW50IHdpZHRoLgotICogQHBh
cmFtIGggbmV3IGNvbnRlbnQgaGVpZ2h0LgorICogQHBhcmFtIGV3a1ZpZXcgdmlldy4KKyAqIEBw
YXJhbSB3aWR0aCBuZXcgY29udGVudCB3aWR0aC4KKyAqIEBwYXJhbSBoZWlnaHQgbmV3IGNvbnRl
bnQgaGVpZ2h0LgogICovCiB2b2lkIGV3a192aWV3X2NvbnRlbnRzX3NpemVfY2hhbmdlZChFdmFz
X09iamVjdCogZXdrVmlldywgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogewotICAgIEVXS19WSUVX
X1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOKHNkLT5hcGkpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGkt
PmNvbnRlbnRzX3Jlc2l6ZSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3
LCBzbWFydERhdGEpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+
YXBpKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmFwaS0+Y29u
dGVudHNfcmVzaXplKTsKIAotICAgIGlmICghc2QtPmFwaS0+Y29udGVudHNfcmVzaXplKHNkLCB3
aWR0aCwgaGVpZ2h0KSkKKyAgICBpZiAoIXNtYXJ0RGF0YS0+YXBpLT5jb250ZW50c19yZXNpemUo
c21hcnREYXRhLCB3aWR0aCwgaGVpZ2h0KSkKICAgICAgICAgRVJSKCJmYWlsZWQgdG8gcmVzaXpl
IGNvbnRlbnRzIHRvICVkeCVkIiwgd2lkdGgsIGhlaWdodCk7CiB9CiAKQEAgLTM3MjcsMTQgKzM3
MjcsMTQgQEAgdm9pZCBld2tfdmlld19jb250ZW50c19zaXplX2NoYW5nZWQoRXZhc19PYmplY3Qq
IGV3a1ZpZXcsIGludCB3aWR0aCwgaW50IGhlaWdodCkKICAqIEBpbnRlcm5hbAogICogR2V0cyBw
YWdlIHNpemUgZnJvbSBmcmFtZXZpZXcuCiAgKgotICogQHBhcmFtIG8gdmlldy4KKyAqIEBwYXJh
bSBld2tWaWV3IHZpZXcuCiAgKgogICogQHJldHVybiBwYWdlIHNpemUuCiAgKi8KIFdlYkNvcmU6
OkZsb2F0UmVjdCBld2tfdmlld19wYWdlX3JlY3RfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tW
aWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVChld2tWaWV3LCBzZCk7Ci0gICAgRVdLX1ZJRVdf
UFJJVl9HRVQoc2QsIHByaXYpOworICAgIEVXS19WSUVXX1NEX0dFVChld2tWaWV3LCBzbWFydERh
dGEpOworICAgIEVXS19WSUVXX1BSSVZfR0VUKHNtYXJ0RGF0YSwgcHJpdik7CiAKICAgICBXZWJD
b3JlOjpGcmFtZSogbWFpbl9mcmFtZSA9IHByaXYtPnBhZ2UtPm1haW5GcmFtZSgpOwogICAgIHJl
dHVybiBtYWluX2ZyYW1lLT52aWV3KCktPmZyYW1lUmVjdCgpOwpAQCAtMzc0MywyNCArMzc0Mywy
NCBAQCBXZWJDb3JlOjpGbG9hdFJlY3QgZXdrX3ZpZXdfcGFnZV9yZWN0X2dldChjb25zdCBFdmFz
X09iamVjdCogZXdrVmlldykKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogdm9pZCBld2tfdmll
d19uZWVkX3RvdWNoX2V2ZW50c19zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGJvb2wgbmVlZGVk
KQogewotICAgIEVXS19WSUVXX1NEX0dFVChld2tWaWV3LCBzZCk7Ci0gICAgRVdLX1ZJRVdfUFJJ
Vl9HRVQoc2QsIHByaXYpOworICAgIEVXS19WSUVXX1NEX0dFVChld2tWaWV3LCBzbWFydERhdGEp
OworICAgIEVXS19WSUVXX1BSSVZfR0VUKHNtYXJ0RGF0YSwgcHJpdik7CiAKLSAgICBwcml2LT5m
bGFncy5uZWVkX3RvdWNoX2V2ZW50cyA9IG5lZWRlZDsKKyAgICBwcml2LT5mbGFncy5uZWVkVG91
Y2hFdmVudHMgPSBuZWVkZWQ7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19uZWVkX3RvdWNoX2V2
ZW50c19nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJ
Vl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKLSAgICByZXR1cm4gcHJpdi0+
ZmxhZ3MubmVlZF90b3VjaF9ldmVudHM7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihl
d2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09S
X1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIHJldHVybiBwcml2LT5m
bGFncy5uZWVkVG91Y2hFdmVudHM7CiB9CiAjZW5kaWYKIAogRWluYV9Cb29sIGV3a192aWV3X21v
ZGVfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFd2tfVmlld19Nb2RlIHZpZXdNb2RlKQogewot
ICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwot
ICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7Cisg
ICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFM
U0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJ
TkFfRkFMU0UpOwogCiAgICAgc3dpdGNoICh2aWV3TW9kZSkgewogICAgIGNhc2UgRVdLX1ZJRVdf
TU9ERV9XSU5ET1dFRDoKQEAgLTM3ODksMTAgKzM3ODksMTAgQEAgRXdrX1ZpZXdfTW9kZSBld2tf
dmlld19tb2RlX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKICAgICBFd2tfVmll
d19Nb2RlIG1vZGUgPSBFV0tfVklFV19NT0RFX1dJTkRPV0VEOwogCi0gICAgRVdLX1ZJRVdfU0Rf
R0VUKGV3a1ZpZXcsIHNkKTsKLSAgICBpZiAoIXNkKQorICAgIEVXS19WSUVXX1NEX0dFVChld2tW
aWV3LCBzbWFydERhdGEpOworICAgIGlmICghc21hcnREYXRhKQogICAgICAgICByZXR1cm4gbW9k
ZTsKLSAgICBFV0tfVklFV19QUklWX0dFVChzZCwgcHJpdik7CisgICAgRVdLX1ZJRVdfUFJJVl9H
RVQoc21hcnREYXRhLCBwcml2KTsKICAgICBpZiAoIXByaXYpCiAgICAgICAgIHJldHVybiBtb2Rl
OwogCkBAIC0zODIwLDcgKzM4MjAsNyBAQCBFd2tfVmlld19Nb2RlIGV3a192aWV3X21vZGVfZ2V0
KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogICogQGludGVybmFsCiAgKiBSZXBvcnRzIHRo
ZSB2aWV3IHRoYXQgZWRpdG9yIGNsaWVudCBzZWxlY3Rpb24gaGFzIGNoYW5nZWQuCiAgKgotICog
QHBhcmFtIG8gVmlldy4KKyAqIEBwYXJhbSBld2tWaWV3IFZpZXcuCiAgKgogICogRW1pdHMgc2ln
bmFsOiAiZWRpdG9yY2xpZW50c2VsZWN0aW9uLGNoYW5nZWQiIHdpdGggbm8gcGFyYW1ldGVycy4K
ICAqLwpAQCAtMzgzMyw3ICszODMzLDcgQEAgdm9pZCBld2tfdmlld19lZGl0b3JfY2xpZW50X3Nl
bGVjdGlvbl9jaGFuZ2VkKEV2YXNfT2JqZWN0KiBld2tWaWV3KQogICogQGludGVybmFsCiAgKiBS
ZXBvcnRzIHRvIHRoZSB2aWV3IHRoYXQgZWRpdG9yIGNsaWVudCdzIGNvbnRlbnRzIHdlcmUgY2hh
bmdlZC4KICAqCi0gKiBAcGFyYW0gbyBWaWV3LgorICogQHBhcmFtIGV3a1ZpZXcgVmlldy4KICAq
CiAgKiBFbWl0cyBzaWduYWw6ICJlZGl0b3JjbGllbnQsY29udGVudHMsY2hhbmdlZCIgd2l0aCBu
byBwYXJhbWV0ZXJzLgogICovCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111738</attachid>
            <date>2011-10-20 00:55:27 -0700</date>
            <delta_ts>2011-10-21 09:19:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69988-20111020165526.patch</filename>
            <type>text/plain</type>
            <size>367155</size>
            <attacher name="Gyuyoung Kim">gyuyoung.kim</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTc5NDYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZs
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZwppbmRleCA3NjJjZGNjYTRm
NWMwYzlmMzUyNjM4ODk0MmMzOGI1ZTMyNzAyNmI1Li5kZjYyNzg3ZGVhMGNjY2YzZDAzZDFiNzJj
NGJmMjZkODMzY2Q1ZDdjIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDcgQEAKKzIwMTEt
MTAtMTggIEd5dXlvdW5nIEtpbSAgPGd5dXlvdW5nLmtpbUBzYW1zdW5nLmNvbT4KKworICAgICAg
ICBbRUZMXSBDaGFuZ2UgZWZsIHN0eWxlIGxvY2FsIHZhcmlhYmxlcyB3aXRoIFdlYktpdCBjb2Rp
bmcgU3R5bGUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD02OTk4OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEluIGNvbW1vbiB3aXRoIEJ1ZyA2OTA3MywgdGhpcyBpcyBhIHRoaXJkIHN0ZXAgaW4gb3JkZXIg
dG8gYmUgbW9yZSBjb21wbGlhbnQgd2l0aCBXZWJLaXQgY29kaW5nIHN0eWxlLgorICAgICAgICBX
ZSBoYXZlIHVzZWQgb25lLWxldHRlcnwgdHdvLWxldHRlciBsb2NhbCB2YXJpYWJsZSBhY2NvcmRp
bmcgdG8gZWZsIHN0eWxlLiBIb3dldmVyLCBpdCdzCisgICAgICAgIG1vcmUgZGlmZmljdWx0IGZv
ciBvdGhlciByZXZpZXdlcnMgdG8gcmV2aWV3IEVGTCBwYXRjaGVzLiBTbywgdGhpcyBwYXRjaCBj
aGFuZ2VzIGVmbCBzdHlsZQorICAgICAgICBsb2NhbCB2YXJpYWJsZSB3aXRoIG1lYW5pbmdmdWwg
b25lLgorCisgICAgICAgIC0gVXNlICptZW51KiBpbnN0ZWFkIG9mICpvKiBpbiBjb21tZW50IG9m
IGV3a19jb250ZXh0bWVudS5jcHAuCisgICAgICAgIC0gVXNlICpsaXN0KiBpbnN0ZWFkIG9mICps
KiBsb2NhbCB2YXJpYWJsZQorICAgICAgICAtIFVzZSAqZXdrUG9saWN5KiBpbnN0ZWFkIG9mICpl
d2tfcG9saWN5KiBpbiBld2tfY29va2llcy5jcHAKKyAgICAgICAgLSBVc2UgKnNtYXJ0RGF0YSog
aW5zdGVhZCBvZiAqc2QqIGxvY2FsIHZhcmlhYmxlIGZvciBFd2tfWFhYWF9TbWFydF9EYXRhIHN0
cnVjdC4KKyAgICAgICAgLSBVc2UgKndpZHRoKiwgKmhlaWdodCogaW5zdGVhZCBvZiAqdyosICpo
KiBsb2NhbCB2YXJpYWJsZXMuCisgICAgICAgIC0gVXNlICpzY3JvbGxYKiwgKnNjcm9sbFkqLCAq
c2Nyb2xsV2lkdGgqLCAqc2Nyb2xsSGVpZ2h0KiwgKmNlbnRlclgqLCAqY2VudGVyWSosICpkZWx0
YVgqLCAqZGVsdGFZKiwKKyAgICAgICAgKmJhc2VYKiwgKmJhc2VZKiBpbnN0ZWFkIG9mICpzeCos
ICpzeSosICpzdyosICpzaCosICpjeCosICpjeSosICpkeCosICpkeSosICpieCosICpieSouCisg
ICAgICAgIC0gVXNlICpyZWQqLCAqZ3JlZW4qLCAqYmx1ZSosICphbHBoYSosICpjb250ZW50UmVk
KiwgKmNvbnRlbnRHcmVlbiosICpjb250ZW50Qmx1ZSogYW5kICpjb250ZW50QWxwaGEqCisgICAg
ICAgIGluc3RlYWQgb2YgKnIqLCpnKiwqYiosKmEqLCpjciosKmNnKiwqY2IqLCpjYSouCisgICAg
ICAgIC0gVXNlICp0aWxlUG9zaXRpb25YKiwgKnRpbGVQb3NpdGlvblkqIGluc3RlYWQgb2YgKm94
Kiwqb3kqIGluIHRpbGVkIGJhY2tpbmdzdG9yZSBmaWxlcy4KKyAgICAgICAgLSBVc2UgKm9iamVj
dCogaW5zdGVhZCBvZiAqb2JqKiAKKyAgICAgICAgLSBVc2UgKmxlbmd0aCogaW5zdGVhZCBvZiAq
bGVuKgorICAgICAgICAtIFVzZSAqY29yZUZyYW1lKiBpbnN0ZWFkIG9mICpjZioKKyAgICAgICAg
LSBVc2UgKmJ1ZmZlciogaW5zdGVhZCBvZiAqYnVmKgorICAgICAgICAtIFVzZSAqaXRlbSogaW5z
dGVhZCBvZiAqaSoKKyAgICAgICAgLSBVc2UgKmN1cnJlbnRDb2x1bW4qLCAqY3VycmVudFJvdyog
aW5zdGVhZCBvZiAqbV9jb2wqLCAqbV9yb3cqIAorICAgICAgICAtIFJlbW92ZSAiXyIgaW4gbG9j
YWwgdmFyaWFibGUuCisgICAgICAgIC0gQW5kIHNvIG9uLgorCisgICAgICAgICogZXdrL2V3a19h
dXRoX3NvdXAuY3BwOgorICAgICAgICAqIGV3ay9ld2tfY29udGV4dG1lbnUuY3BwOgorICAgICAg
ICAqIGV3ay9ld2tfY29va2llcy5jcHA6CisgICAgICAgICogZXdrL2V3a19mcmFtZS5jcHA6Cisg
ICAgICAgICogZXdrL2V3a19oaXN0b3J5LmNwcDoKKyAgICAgICAgKiBld2svZXdrX2pzLmNwcDoK
KyAgICAgICAgKiBld2svZXdrX21haW4uY3BwOgorICAgICAgICAqIGV3ay9ld2tfc2V0dGluZ3Mu
Y3BwOgorICAgICAgICAqIGV3ay9ld2tfdGlsZWRfYmFja2luZ19zdG9yZS5jcHA6CisgICAgICAg
ICogZXdrL2V3a190aWxlZF9tYXRyaXguY3BwOgorICAgICAgICAqIGV3ay9ld2tfdGlsZWRfbW9k
ZWwuY3BwOgorICAgICAgICAqIGV3ay9ld2tfdmlldy5jcHA6CisKIDIwMTEtMTAtMTkgIFJhZmFl
bCBBbnRvZ25vbGxpICA8YW50b2dub2xsaUBwcm9mdXNpb24ubW9iaT4KIAogICAgICAgICBbRUZM
XSBGaXggdHlwb3Mgb24gZXdrX3ZpZXcgYW5kIGV3a19qcy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvZWZsL2V3ay9ld2tfYXV0aF9zb3VwLmNwcCBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9l
d2tfYXV0aF9zb3VwLmNwcAppbmRleCBjYmM4NzU2ZWQ4NWViYzE1ZTc3YmM0MWIzM2UwNTMzYzQy
NWExOTJmLi45NjU2M2MwYzQzN2RmN2I3NzMwNjc5NTc1NzIwYzY2YTNhYmU1NWM4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2F1dGhfc291cC5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9lZmwvZXdrL2V3a19hdXRoX3NvdXAuY3BwCkBAIC00MCw3ICs0MCw3IEBAIGV4dGVy
biAiQyIgewogICovCiAKIHR5cGVkZWYgc3RydWN0IF9Fd2tfQXV0aF9EYXRhIHsKLSAgICBTb3Vw
TWVzc2FnZSogbXNnOworICAgIFNvdXBNZXNzYWdlKiBtZXNzYWdlOwogICAgIFNvdXBBdXRoKiBh
dXRoOwogICAgIFNvdXBTZXNzaW9uKiBzZXNzaW9uOwogfSBFd2tfQXV0aF9EYXRhOwpAQCAtNzks
NTEgKzc5LDUxIEBAIHZvaWQgZXdrX2F1dGhfc291cF9jcmVkZW50aWFsc19zZXQoY29uc3QgY2hh
ciogdXNlcm5hbWUsIGNvbnN0IGNoYXIqIHBhc3N3b3JkLCB2CiAgICAgaWYgKCFkYXRhKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBFd2tfQXV0aF9EYXRhKiBhdXRoX2RhdGEgPSBzdGF0aWNfY2Fz
dDxFd2tfQXV0aF9EYXRhKj4oZGF0YSk7Ci0gICAgc291cF9hdXRoX2F1dGhlbnRpY2F0ZShhdXRo
X2RhdGEtPmF1dGgsIHVzZXJuYW1lLCBwYXNzd29yZCk7Ci0gICAgc291cF9zZXNzaW9uX3VucGF1
c2VfbWVzc2FnZShhdXRoX2RhdGEtPnNlc3Npb24sIGF1dGhfZGF0YS0+bXNnKTsKLSAgICBmcmVl
X2F1dGhfZGF0YShhdXRoX2RhdGEpOworICAgIEV3a19BdXRoX0RhdGEqIGF1dGhlbnRpY2F0aW9u
RGF0YSA9IHN0YXRpY19jYXN0PEV3a19BdXRoX0RhdGEqPihkYXRhKTsKKyAgICBzb3VwX2F1dGhf
YXV0aGVudGljYXRlKGF1dGhlbnRpY2F0aW9uRGF0YS0+YXV0aCwgdXNlcm5hbWUsIHBhc3N3b3Jk
KTsKKyAgICBzb3VwX3Nlc3Npb25fdW5wYXVzZV9tZXNzYWdlKGF1dGhlbnRpY2F0aW9uRGF0YS0+
c2Vzc2lvbiwgYXV0aGVudGljYXRpb25EYXRhLT5tZXNzYWdlKTsKKyAgICBmcmVlX2F1dGhfZGF0
YShhdXRoZW50aWNhdGlvbkRhdGEpOwogfQogCi1zdGF0aWMgdm9pZCBzZXNzaW9uX2F1dGhlbnRp
Y2F0ZShTb3VwU2Vzc2lvbiogc2Vzc2lvbiwgU291cE1lc3NhZ2UqIG1zZywgU291cEF1dGgqIGF1
dGgsIGdib29sZWFuIHJldHJ5aW5nLCBncG9pbnRlciAvKiB1c2VyX2RhdGEgKi8pCitzdGF0aWMg
dm9pZCBzZXNzaW9uX2F1dGhlbnRpY2F0ZShTb3VwU2Vzc2lvbiogc2Vzc2lvbiwgU291cE1lc3Nh
Z2UqIG1lc3NhZ2UsIFNvdXBBdXRoKiBhdXRoLCBnYm9vbGVhbiByZXRyeWluZywgZ3BvaW50ZXIg
LyogdXNlcl9kYXRhICovKQogewogICAgIFNvdXBVUkkqIHVyaTsKLSAgICBFd2tfQXV0aF9EYXRh
KiBhdXRoX2RhdGE7CisgICAgRXdrX0F1dGhfRGF0YSogYXV0aGVudGljYXRpb25EYXRhOwogICAg
IGNvbnN0IGNoYXIqIHJlYWxtOwogCiAgICAgaWYgKCFld2tfYXV0aF9zaG93X2RpYWxvZ19jYWxs
YmFjaykKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0aF9kYXRhID0gc3RhdGljX2Nhc3Q8RXdr
X0F1dGhfRGF0YSo+KGNhbGxvYygxLCBzaXplb2YoRXdrX0F1dGhfRGF0YSkpKTsKKyAgICBhdXRo
ZW50aWNhdGlvbkRhdGEgPSBzdGF0aWNfY2FzdDxFd2tfQXV0aF9EYXRhKj4oY2FsbG9jKDEsIHNp
emVvZihFd2tfQXV0aF9EYXRhKSkpOwogCi0gICAgaWYgKCFhdXRoX2RhdGEpIHsKKyAgICBpZiAo
IWF1dGhlbnRpY2F0aW9uRGF0YSkgewogICAgICAgICBDUklUSUNBTCgiY291bGQgbm90IGFsbG9j
YXRlIEV3a19BdXRoX0RhdGEiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHNvdXBf
c2Vzc2lvbl9wYXVzZV9tZXNzYWdlKHNlc3Npb24sIG1zZyk7CisgICAgc291cF9zZXNzaW9uX3Bh
dXNlX21lc3NhZ2Uoc2Vzc2lvbiwgbWVzc2FnZSk7CiAgICAgLy8gV2UgbmVlZCB0byBtYWtlIHN1
cmUgdGhlIG1lc3NhZ2Ugc3RpY2tzIGFyb3VuZCB3aGVuIHBhdXNpbmcgaXQuCi0gICAgZ19vYmpl
Y3RfcmVmKG1zZyk7CisgICAgZ19vYmplY3RfcmVmKG1lc3NhZ2UpOwogICAgIGdfb2JqZWN0X3Jl
ZihzZXNzaW9uKTsKICAgICBnX29iamVjdF9yZWYoYXV0aCk7CiAKLSAgICBhdXRoX2RhdGEtPm1z
ZyA9IG1zZzsKLSAgICBhdXRoX2RhdGEtPmF1dGggPSBhdXRoOwotICAgIGF1dGhfZGF0YS0+c2Vz
c2lvbiA9IHNlc3Npb247CisgICAgYXV0aGVudGljYXRpb25EYXRhLT5tZXNzYWdlID0gbWVzc2Fn
ZTsKKyAgICBhdXRoZW50aWNhdGlvbkRhdGEtPmF1dGggPSBhdXRoOworICAgIGF1dGhlbnRpY2F0
aW9uRGF0YS0+c2Vzc2lvbiA9IHNlc3Npb247CiAKLSAgICB1cmkgPSBzb3VwX21lc3NhZ2VfZ2V0
X3VyaShhdXRoX2RhdGEtPm1zZyk7Ci0gICAgcmVhbG0gPSBzb3VwX2F1dGhfZ2V0X3JlYWxtKGF1
dGhfZGF0YS0+YXV0aCk7CisgICAgdXJpID0gc291cF9tZXNzYWdlX2dldF91cmkoYXV0aGVudGlj
YXRpb25EYXRhLT5tZXNzYWdlKTsKKyAgICByZWFsbSA9IHNvdXBfYXV0aF9nZXRfcmVhbG0oYXV0
aGVudGljYXRpb25EYXRhLT5hdXRoKTsKIAogICAgIC8vIENhbGwgYXBwbGljYXRpb24gbWV0aG9k
IHJlc3BvbnNpYmxlIGZvciBzaG93aW5nIGF1dGhlbnRpY2F0aW9uIGRpYWxvZyBhbmQgc2VuZGlu
ZyBiYWNrIGF1dGhvcml6YXRpb24gZGF0YS4KLSAgICBld2tfYXV0aF9zaG93X2RpYWxvZ19jYWxs
YmFjayhyZWFsbSwgc291cF91cmlfdG9fc3RyaW5nKHVyaSwgVFJVRSksIGF1dGhfZGF0YSk7Cisg
ICAgZXdrX2F1dGhfc2hvd19kaWFsb2dfY2FsbGJhY2socmVhbG0sIHNvdXBfdXJpX3RvX3N0cmlu
Zyh1cmksIFRSVUUpLCBhdXRoZW50aWNhdGlvbkRhdGEpOwogfQogCi1zdGF0aWMgdm9pZCBmcmVl
X2F1dGhfZGF0YShFd2tfQXV0aF9EYXRhKiBhdXRoX2RhdGEpCitzdGF0aWMgdm9pZCBmcmVlX2F1
dGhfZGF0YShFd2tfQXV0aF9EYXRhKiBhdXRoRGF0YSkKIHsKLSAgICBnX29iamVjdF91bnJlZihh
dXRoX2RhdGEtPm1zZyk7Ci0gICAgZ19vYmplY3RfdW5yZWYoYXV0aF9kYXRhLT5zZXNzaW9uKTsK
LSAgICBnX29iamVjdF91bnJlZihhdXRoX2RhdGEtPmF1dGgpOwotICAgIGZyZWUoYXV0aF9kYXRh
KTsKKyAgICBnX29iamVjdF91bnJlZihhdXRoRGF0YS0+bWVzc2FnZSk7CisgICAgZ19vYmplY3Rf
dW5yZWYoYXV0aERhdGEtPnNlc3Npb24pOworICAgIGdfb2JqZWN0X3VucmVmKGF1dGhEYXRhLT5h
dXRoKTsKKyAgICBmcmVlKGF1dGhEYXRhKTsKIH0KIAogc3RhdGljIHZvaWQgYXR0YWNoKFNvdXBT
ZXNzaW9uRmVhdHVyZSogbWFuYWdlciwgU291cFNlc3Npb24qIHNlc3Npb24pCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2NvbnRleHRtZW51LmNwcCBiL1NvdXJjZS9XZWJL
aXQvZWZsL2V3ay9ld2tfY29udGV4dG1lbnUuY3BwCmluZGV4IDY5OGIyMDI5NzVjNjRlYTBiZDg3
Y2YwMDAyNzY5NjlhMjlhMTE4ZDQuLjFlNGI2ZmI3ZjM2ZTBiMjgxYmQ3NjJlYWQ3YjZmNzE5YWZj
ZDdmZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfY29udGV4dG1lbnUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfY29udGV4dG1lbnUuY3BwCkBAIC0y
NDgsNyArMjQ4LDcgQEAgRXdrX0NvbnRleHRfTWVudSogZXdrX2NvbnRleHRfbWVudV9uZXcoRXZh
c19PYmplY3QqIHZpZXcsIFdlYkNvcmU6OkNvbnRleHRNZW51Q28KICAqCiAgKiBGcmVlcyB0aGUg
Y29udGV4dCBtZW51LgogICoKLSAqIEBwYXJhbSBvIHRoZSB2aWV3IG9iamVjdAorICogQHBhcmFt
IG1lbnUgdGhlIHZpZXcgb2JqZWN0CiAgKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBvbiBzdWNjZXNz
LCBvciBAYyBFSU5BX0ZBTFNFIG9uIGZhaWx1cmUKICAqCiAgKiBAbm90ZSBlbWl0cyBhIHNpZ25h
bCAiY29udGV4dG1lbnUsZnJlZSIKQEAgLTI2OSw3ICsyNjksNyBAQCBFaW5hX0Jvb2wgZXdrX2Nv
bnRleHRfbWVudV9mcmVlKEV3a19Db250ZXh0X01lbnUqIG1lbnUpCiAgKgogICogQXBwZW5kcyB0
aGUgV2ViQ29yZSdzIGl0ZW0gdG8gdGhlIGNvbnRleHQgbWVudSBvYmplY3QuCiAgKgotICogQHBh
cmFtIG8gdGhlIGNvbnRleHQgbWVudSBvYmplY3QKKyAqIEBwYXJhbSBtZW51IHRoZSBjb250ZXh0
IG1lbnUgb2JqZWN0CiAgKiBAcGFyYW0gY29yZSB0aGUgV2ViQ29yZSdzIGNvbnRleHQgbWVudSBp
dGVtIHRoYXQgd2lsbCBiZSBhZGRlZCB0byB0aGUgY29udGV4dCBtZW51CiAgKiBAbm90ZSBlbWl0
cyBhIHNpZ25hbCAiY29udGV4dG1lbnUsaXRlbSxhcHBlbmRlZCIKICAqCkBAIC0yOTQsNyArMjk0
LDcgQEAgdm9pZCBld2tfY29udGV4dF9tZW51X2l0ZW1fYXBwZW5kKEV3a19Db250ZXh0X01lbnUq
IG1lbnUsIFdlYkNvcmU6OkNvbnRleHRNZW51SXQKICAqCiAgKiBFbWl0cyBhIHNpZ25hbCB3aXRo
IHRoZSBpdGVtcyBvZiB0aGUgY29udGV4dCBtZW51LgogICoKLSAqIEBwYXJhbSBvIHRoZSBjb250
ZXh0IG1lbnUgb2JqZWN0CisgKiBAcGFyYW0gbWVudSB0aGUgY29udGV4dCBtZW51IG9iamVjdAog
ICogQHJldHVybiB0aGUgc2FtZSBjb250ZXh0IG1lbnUgb2JqZWN0IHRoYXQgd2FzIGdpdmVuIHRo
cm91Z2ggcGFyYW1ldGVyCiAgKgogICogQG5vdGUgZW1pdHMgYSBzaWduYWwgImNvbnRleHRtZW51
LGN1c3RvbWl6ZSIKQEAgLTMxNCw3ICszMTQsNyBAQCBFd2tfQ29udGV4dF9NZW51KiBld2tfY29u
dGV4dF9tZW51X2N1c3RvbWl6ZShFd2tfQ29udGV4dF9NZW51KiBtZW51KQogICoKICAqIEVtaXRz
IGEgc2lnbmFsICJjb250ZXh0bWVudSxzaG93IgogICoKLSAqIEBwYXJhbSBvIHRoZSBjb250ZXh0
IG1lbnUgb2JqZWN0CisgKiBAcGFyYW0gbWVudSB0aGUgY29udGV4dCBtZW51IG9iamVjdAogICov
CiB2b2lkIGV3a19jb250ZXh0X21lbnVfc2hvdyhFd2tfQ29udGV4dF9NZW51KiBtZW51KQogewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19jb29raWVzLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvZWZsL2V3ay9ld2tfY29va2llcy5jcHAKaW5kZXggMDRkNzA0MTU3ZDM1OGUzYjg2
Yzk3MjVmYzk1ODNiODNhYWMwODU1Zi4uZmY2Zjk3NDU0ODkzNzU1ODBlM2VlZThhMWVkOWUzNWNm
MjFmY2YxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19jb29raWVzLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2Nvb2tpZXMuY3BwCkBAIC02Nyw2NiAr
NjcsNjYgQEAgRWluYV9Cb29sIGV3a19jb29raWVzX2ZpbGVfc2V0KGNvbnN0IGNoYXIqIGZpbGVu
YW1lKQogdm9pZCBld2tfY29va2llc19jbGVhcih2b2lkKQogewogI2lmIFVTRShTT1VQKQotICAg
IEdTTGlzdCogbDsKKyAgICBHU0xpc3QqIGxpc3Q7CiAgICAgR1NMaXN0KiBwOwogICAgIFNvdXBD
b29raWVKYXIqIGNvb2tpZUphciA9IFdlYkNvcmU6OmRlZmF1bHRDb29raWVKYXIoKTsKIAotICAg
IGwgPSBzb3VwX2Nvb2tpZV9qYXJfYWxsX2Nvb2tpZXMoY29va2llSmFyKTsKLSAgICBmb3IgKHAg
PSBsOyBwOyBwID0gcC0+bmV4dCkKKyAgICBsaXN0ID0gc291cF9jb29raWVfamFyX2FsbF9jb29r
aWVzKGNvb2tpZUphcik7CisgICAgZm9yIChwID0gbGlzdDsgcDsgcCA9IHAtPm5leHQpCiAgICAg
ICAgIHNvdXBfY29va2llX2phcl9kZWxldGVfY29va2llKGNvb2tpZUphciwgKFNvdXBDb29raWUq
KXAtPmRhdGEpOwogCi0gICAgc291cF9jb29raWVzX2ZyZWUobCk7CisgICAgc291cF9jb29raWVz
X2ZyZWUobGlzdCk7CiAjZW5kaWYKIH0KIAogRWluYV9MaXN0KiBld2tfY29va2llc19nZXRfYWxs
KHZvaWQpCiB7Ci0gICAgRWluYV9MaXN0KiBlbCA9IDA7CisgICAgRWluYV9MaXN0KiByZXN1bHQg
PSAwOwogI2lmIFVTRShTT1VQKQotICAgIEdTTGlzdCogbDsKKyAgICBHU0xpc3QqIGxpc3Q7CiAg
ICAgR1NMaXN0KiBwOwogICAgIFNvdXBDb29raWVKYXIqIGNvb2tpZUphciA9IFdlYkNvcmU6OmRl
ZmF1bHRDb29raWVKYXIoKTsKIAotICAgIGwgPSBzb3VwX2Nvb2tpZV9qYXJfYWxsX2Nvb2tpZXMo
Y29va2llSmFyKTsKLSAgICBmb3IgKHAgPSBsOyBwOyBwID0gcC0+bmV4dCkgeworICAgIGxpc3Qg
PSBzb3VwX2Nvb2tpZV9qYXJfYWxsX2Nvb2tpZXMoY29va2llSmFyKTsKKyAgICBmb3IgKHAgPSBs
aXN0OyBwOyBwID0gcC0+bmV4dCkgewogICAgICAgICBTb3VwQ29va2llKiBjb29raWUgPSBzdGF0
aWNfY2FzdDxTb3VwQ29va2llKj4ocC0+ZGF0YSk7Ci0gICAgICAgIEV3a19Db29raWUqIGMgPSBz
dGF0aWNfY2FzdDxFd2tfQ29va2llKj4obWFsbG9jKHNpemVvZigqYykpKTsKLSAgICAgICAgYy0+
bmFtZSA9IHN0cmR1cChjb29raWUtPm5hbWUpOwotICAgICAgICBjLT52YWx1ZSA9IHN0cmR1cChj
b29raWUtPnZhbHVlKTsKLSAgICAgICAgYy0+ZG9tYWluID0gc3RyZHVwKGNvb2tpZS0+ZG9tYWlu
KTsKLSAgICAgICAgYy0+cGF0aCA9IHN0cmR1cChjb29raWUtPnBhdGgpOwotICAgICAgICBjLT5l
eHBpcmVzID0gc291cF9kYXRlX3RvX3RpbWVfdChjb29raWUtPmV4cGlyZXMpOwotICAgICAgICBj
LT5zZWN1cmUgPSBzdGF0aWNfY2FzdDxFaW5hX0Jvb2w+KGNvb2tpZS0+c2VjdXJlKTsKLSAgICAg
ICAgYy0+aHR0cF9vbmx5ID0gc3RhdGljX2Nhc3Q8RWluYV9Cb29sPihjb29raWUtPmh0dHBfb25s
eSk7Ci0gICAgICAgIGVsID0gZWluYV9saXN0X2FwcGVuZChlbCwgYyk7CisgICAgICAgIEV3a19D
b29raWUqIGV3a0Nvb2tpZSA9IHN0YXRpY19jYXN0PEV3a19Db29raWUqPihtYWxsb2Moc2l6ZW9m
KCpld2tDb29raWUpKSk7CisgICAgICAgIGV3a0Nvb2tpZS0+bmFtZSA9IHN0cmR1cChjb29raWUt
Pm5hbWUpOworICAgICAgICBld2tDb29raWUtPnZhbHVlID0gc3RyZHVwKGNvb2tpZS0+dmFsdWUp
OworICAgICAgICBld2tDb29raWUtPmRvbWFpbiA9IHN0cmR1cChjb29raWUtPmRvbWFpbik7Cisg
ICAgICAgIGV3a0Nvb2tpZS0+cGF0aCA9IHN0cmR1cChjb29raWUtPnBhdGgpOworICAgICAgICBl
d2tDb29raWUtPmV4cGlyZXMgPSBzb3VwX2RhdGVfdG9fdGltZV90KGNvb2tpZS0+ZXhwaXJlcyk7
CisgICAgICAgIGV3a0Nvb2tpZS0+c2VjdXJlID0gc3RhdGljX2Nhc3Q8RWluYV9Cb29sPihjb29r
aWUtPnNlY3VyZSk7CisgICAgICAgIGV3a0Nvb2tpZS0+aHR0cF9vbmx5ID0gc3RhdGljX2Nhc3Q8
RWluYV9Cb29sPihjb29raWUtPmh0dHBfb25seSk7CisgICAgICAgIHJlc3VsdCA9IGVpbmFfbGlz
dF9hcHBlbmQocmVzdWx0LCBld2tDb29raWUpOwogICAgIH0KIAotICAgIHNvdXBfY29va2llc19m
cmVlKGwpOworICAgIHNvdXBfY29va2llc19mcmVlKGxpc3QpOwogI2VuZGlmCi0gICAgcmV0dXJu
IGVsOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIHZvaWQgZXdrX2Nvb2tpZXNfY29va2llX2Rl
bChFd2tfQ29va2llKiBjb29raWUpCiB7CiAjaWYgVVNFKFNPVVApCiAgICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk4oY29va2llKTsKLSAgICBHU0xpc3QqIGw7CisgICAgR1NMaXN0KiBsaXN0
OwogICAgIEdTTGlzdCogcDsKICAgICBTb3VwQ29va2llSmFyKiBjb29raWVKYXIgPSBXZWJDb3Jl
OjpkZWZhdWx0Q29va2llSmFyKCk7Ci0gICAgU291cENvb2tpZSogYzEgPSBzb3VwX2Nvb2tpZV9u
ZXcoCisgICAgU291cENvb2tpZSogY29va2llMSA9IHNvdXBfY29va2llX25ldygKICAgICAgICAg
Y29va2llLT5uYW1lLCBjb29raWUtPnZhbHVlLCBjb29raWUtPmRvbWFpbiwgY29va2llLT5wYXRo
LCAtMSk7CiAKLSAgICBsID0gc291cF9jb29raWVfamFyX2FsbF9jb29raWVzKGNvb2tpZUphcik7
Ci0gICAgZm9yIChwID0gbDsgcDsgcCA9IHAtPm5leHQpIHsKLSAgICAgICAgU291cENvb2tpZSog
YzIgPSBzdGF0aWNfY2FzdDxTb3VwQ29va2llKj4ocC0+ZGF0YSk7Ci0gICAgICAgIGlmIChzb3Vw
X2Nvb2tpZV9lcXVhbChjMSwgYzIpKSB7Ci0gICAgICAgICAgICBzb3VwX2Nvb2tpZV9qYXJfZGVs
ZXRlX2Nvb2tpZShjb29raWVKYXIsIGMyKTsKKyAgICBsaXN0ID0gc291cF9jb29raWVfamFyX2Fs
bF9jb29raWVzKGNvb2tpZUphcik7CisgICAgZm9yIChwID0gbGlzdDsgcDsgcCA9IHAtPm5leHQp
IHsKKyAgICAgICAgU291cENvb2tpZSogY29va2llMiA9IHN0YXRpY19jYXN0PFNvdXBDb29raWUq
PihwLT5kYXRhKTsKKyAgICAgICAgaWYgKHNvdXBfY29va2llX2VxdWFsKGNvb2tpZTEsIGNvb2tp
ZTIpKSB7CisgICAgICAgICAgICBzb3VwX2Nvb2tpZV9qYXJfZGVsZXRlX2Nvb2tpZShjb29raWVK
YXIsIGNvb2tpZTIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CiAKLSAg
ICBzb3VwX2Nvb2tpZV9mcmVlKGMxKTsKLSAgICBzb3VwX2Nvb2tpZXNfZnJlZShsKTsKKyAgICBz
b3VwX2Nvb2tpZV9mcmVlKGNvb2tpZTEpOworICAgIHNvdXBfY29va2llc19mcmVlKGxpc3QpOwog
I2VuZGlmCiB9CiAKQEAgLTE2Nyw3ICsxNjcsNyBAQCB2b2lkIGV3a19jb29raWVzX3BvbGljeV9z
ZXQoRXdrX0Nvb2tpZV9Qb2xpY3kgY29va2llUG9saWN5KQogCiBFd2tfQ29va2llX1BvbGljeSBl
d2tfY29va2llc19wb2xpY3lfZ2V0KHZvaWQpCiB7Ci0gICAgRXdrX0Nvb2tpZV9Qb2xpY3kgZXdr
X3BvbGljeSA9IEVXS19DT09LSUVfSkFSX0FDQ0VQVF9BTFdBWVM7CisgICAgRXdrX0Nvb2tpZV9Q
b2xpY3kgZXdrUG9saWN5ID0gRVdLX0NPT0tJRV9KQVJfQUNDRVBUX0FMV0FZUzsKICNpZiBVU0Uo
U09VUCkKICAgICBTb3VwQ29va2llSmFyKiBjb29raWVKYXIgPSBXZWJDb3JlOjpkZWZhdWx0Q29v
a2llSmFyKCk7CiAgICAgU291cENvb2tpZUphckFjY2VwdFBvbGljeSBwb2xpY3k7CkBAIC0xNzUs
MTYgKzE3NSwxNiBAQCBFd2tfQ29va2llX1BvbGljeSBld2tfY29va2llc19wb2xpY3lfZ2V0KHZv
aWQpCiAgICAgcG9saWN5ID0gc291cF9jb29raWVfamFyX2dldF9hY2NlcHRfcG9saWN5KGNvb2tp
ZUphcik7CiAgICAgc3dpdGNoIChwb2xpY3kpIHsKICAgICBjYXNlIFNPVVBfQ09PS0lFX0pBUl9B
Q0NFUFRfTkVWRVI6Ci0gICAgICAgIGV3a19wb2xpY3kgPSBFV0tfQ09PS0lFX0pBUl9BQ0NFUFRf
TkVWRVI7CisgICAgICAgIGV3a1BvbGljeSA9IEVXS19DT09LSUVfSkFSX0FDQ0VQVF9ORVZFUjsK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTT1VQX0NPT0tJRV9KQVJfQUNDRVBUX0FMV0FZUzoK
LSAgICAgICAgZXdrX3BvbGljeSA9IEVXS19DT09LSUVfSkFSX0FDQ0VQVF9BTFdBWVM7CisgICAg
ICAgIGV3a1BvbGljeSA9IEVXS19DT09LSUVfSkFSX0FDQ0VQVF9BTFdBWVM7CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgU09VUF9DT09LSUVfSkFSX0FDQ0VQVF9OT19USElSRF9QQVJUWToKLSAg
ICAgICAgZXdrX3BvbGljeSA9IEVXS19DT09LSUVfSkFSX0FDQ0VQVF9OT19USElSRF9QQVJUWTsK
KyAgICAgICAgZXdrUG9saWN5ID0gRVdLX0NPT0tJRV9KQVJfQUNDRVBUX05PX1RISVJEX1BBUlRZ
OwogICAgICAgICBicmVhazsKICAgICB9CiAjZW5kaWYKIAotICAgIHJldHVybiBld2tfcG9saWN5
OworICAgIHJldHVybiBld2tQb2xpY3k7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Vm
bC9ld2svZXdrX2ZyYW1lLmNwcCBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfZnJhbWUuY3Bw
CmluZGV4IDg3Y2U2M2M2Njc2ZTJkNDM4N2ZhZTk3YjMxMzg0MDVlNWMzNDk4YzUuLmYwOTUwY2Mx
MDQzZWY3YjYzMDQ1Y2YyNWFhYzFmNWIxN2MxZGI0NzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvZWZsL2V3ay9ld2tfZnJhbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tf
ZnJhbWUuY3BwCkBAIC03Niw3ICs3Niw3IEBAIHN0cnVjdCBFd2tfRnJhbWVfU21hcnRfRGF0YSB7
CiAKIHN0cnVjdCBFaW5hX0l0ZXJhdG9yX0V3a19GcmFtZSB7CiAgICAgRWluYV9JdGVyYXRvciBi
YXNlOwotICAgIEV2YXNfT2JqZWN0KiBvYmo7CisgICAgRXZhc19PYmplY3QqIG9iamVjdDsKICAg
ICB1bnNpZ25lZCBjdXJyZW50SW5kZXg7CiB9OwogCkBAIC0xMTMsMjAgKzExMywyMCBAQCBzdGF0
aWMgRXZhc19TbWFydF9DbGFzcyBfcGFyZW50X3NjID0gRVZBU19TTUFSVF9DTEFTU19JTklUX05V
TEw7CiBzdGF0aWMgaW5saW5lIHZvaWQgX2V3a19mcmFtZV9kZWJ1ZyhFdmFzX09iamVjdCogZXdr
RnJhbWUpCiB7CiAgICAgRXZhc19PYmplY3QqIGNsaXAsICogcGFyZW50OwotICAgIEV2YXNfQ29v
cmQgeCwgeSwgdywgaCwgY3gsIGN5LCBjdywgY2g7Ci0gICAgaW50IHIsIGcsIGIsIGEsIGNyLCBj
ZywgY2IsIGNhOworICAgIEV2YXNfQ29vcmQgeCwgeSwgd2lkdGgsIGhlaWdodCwgY29udGVudFgs
IGNvbnRlbnRZLCBjb250ZW50V2lkdGgsIGNvbnRlbnRIZWlnaHQ7CisgICAgaW50IHJlZCwgZ3Jl
ZW4sIGJsdWUsIGFscGhhLCBjb250ZW50UmVkLCBjb250ZW50R3JlZW4sIGNvbnRlbnRCbHVlLCBj
b250ZW50QWxwaGE7CiAKLSAgICBldmFzX29iamVjdF9jb2xvcl9nZXQoZXdrRnJhbWUsICZyLCAm
ZywgJmIsICZhKTsKLSAgICBldmFzX29iamVjdF9nZW9tZXRyeV9nZXQoZXdrRnJhbWUsICZ4LCAm
eSwgJncsICZoKTsKKyAgICBldmFzX29iamVjdF9jb2xvcl9nZXQoZXdrRnJhbWUsICZyZWQsICZn
cmVlbiwgJmJsdWUsICZhbHBoYSk7CisgICAgZXZhc19vYmplY3RfZ2VvbWV0cnlfZ2V0KGV3a0Zy
YW1lLCAmeCwgJnksICZ3aWR0aCwgJmhlaWdodCk7CiAKICAgICBjbGlwID0gZXZhc19vYmplY3Rf
Y2xpcF9nZXQoZXdrRnJhbWUpOwotICAgIGV2YXNfb2JqZWN0X2NvbG9yX2dldChjbGlwLCAmY3Is
ICZjZywgJmNiLCAmY2EpOwotICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldChjbGlwLCAmY3gs
ICZjeSwgJmN3LCAmY2gpOworICAgIGV2YXNfb2JqZWN0X2NvbG9yX2dldChjbGlwLCAmY29udGVu
dFJlZCwgJmNvbnRlbnRHcmVlbiwgJmNvbnRlbnRCbHVlLCAmY29udGVudEFscGhhKTsKKyAgICBl
dmFzX29iamVjdF9nZW9tZXRyeV9nZXQoY2xpcCwgJmNvbnRlbnRYLCAmY29udGVudFksICZjb250
ZW50V2lkdGgsICZjb250ZW50SGVpZ2h0KTsKIAogICAgIGZwcmludGYoc3RkZXJyLCAiJXA6IHR5
cGU9JXMgbmFtZT0lcywgdmlzaWJsZT0lZCwgY29sb3I9JTAyeCUwMnglMDJ4JTAyeCwgJWQsJWQr
JWR4JWQsIGNsaXBwZXI9JXAgKCVkLCAlMDJ4JTAyeCUwMnglMDJ4LCAlZCwlZCslZHglZClcbiIs
CiAgICAgICAgICAgICBld2tGcmFtZSwgZXZhc19vYmplY3RfdHlwZV9nZXQoZXdrRnJhbWUpLCBl
dmFzX29iamVjdF9uYW1lX2dldChld2tGcmFtZSksIGV2YXNfb2JqZWN0X3Zpc2libGVfZ2V0KGV3
a0ZyYW1lKSwKLSAgICAgICAgICAgIHIsIGcsIGIsIGEsIHgsIHksIHcsIGgsCi0gICAgICAgICAg
ICBjbGlwLCBldmFzX29iamVjdF92aXNpYmxlX2dldChjbGlwKSwgY3IsIGNnLCBjYiwgY2EsIGN4
LCBjeSwgY3csIGNoKTsKKyAgICAgICAgICAgIHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhLCB4LCB5
LCB3aWR0aCwgaGVpZ2h0LAorICAgICAgICAgICAgY2xpcCwgZXZhc19vYmplY3RfdmlzaWJsZV9n
ZXQoY2xpcCksIGNvbnRlbnRSZWQsIGNvbnRlbnRHcmVlbiwgY29udGVudEJsdWUsIGNvbnRlbnRB
bHBoYSwgY29udGVudFgsIGNvbnRlbnRZLCBjb250ZW50V2lkdGgsIGNvbnRlbnRIZWlnaHQpOwog
ICAgIHBhcmVudCA9IGV2YXNfb2JqZWN0X3NtYXJ0X3BhcmVudF9nZXQoZXdrRnJhbWUpOwogICAg
IGlmICghcGFyZW50KQogICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlxuIik7CkBAIC0xNDAsMTYg
KzE0MCwxNiBAQCBzdGF0aWMgV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRFZmwqIF9ld2tfZnJh
bWVfbG9hZGVyX2VmbF9nZXQoY29uc3QgV2ViQ29yZTo6RgogICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEVmbCo+KGZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50
KCkpOwogfQogCi1zdGF0aWMgRWluYV9Cb29sIF9ld2tfZnJhbWVfY2hpbGRyZW5faXRlcmF0b3Jf
bmV4dChFaW5hX0l0ZXJhdG9yX0V3a19GcmFtZSogaXQsIEV2YXNfT2JqZWN0KiogZGF0YSkKK3N0
YXRpYyBFaW5hX0Jvb2wgX2V3a19mcmFtZV9jaGlsZHJlbl9pdGVyYXRvcl9uZXh0KEVpbmFfSXRl
cmF0b3JfRXdrX0ZyYW1lKiBpdGVyYXRvciwgRXZhc19PYmplY3QqKiBkYXRhKQogewotICAgIEVX
S19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGl0LT5vYmosIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKKyAg
ICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihpdGVyYXRvci0+b2JqZWN0LCBzbWFydERhdGEs
IEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERh
dGEtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKIAotICAgIFdlYkNvcmU6OkZyYW1lVHJlZSogdHJlZSA9
IHNkLT5mcmFtZS0+dHJlZSgpOyAvLyBjaGVjayBpZiBpdCdzIHN0aWxsIHZhbGlkCisgICAgV2Vi
Q29yZTo6RnJhbWVUcmVlKiB0cmVlID0gc21hcnREYXRhLT5mcmFtZS0+dHJlZSgpOyAvLyBjaGVj
ayBpZiBpdCdzIHN0aWxsIHZhbGlkCiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFM
KHRyZWUsIEVJTkFfRkFMU0UpOwogCi0gICAgaWYgKGl0LT5jdXJyZW50SW5kZXggPCB0cmVlLT5j
aGlsZENvdW50KCkpIHsKLSAgICAgICAgKmRhdGEgPSBFV0tQcml2YXRlOjpraXRGcmFtZSh0cmVl
LT5jaGlsZChpdC0+Y3VycmVudEluZGV4KyspKTsKKyAgICBpZiAoaXRlcmF0b3ItPmN1cnJlbnRJ
bmRleCA8IHRyZWUtPmNoaWxkQ291bnQoKSkgeworICAgICAgICAqZGF0YSA9IEVXS1ByaXZhdGU6
OmtpdEZyYW1lKHRyZWUtPmNoaWxkKGl0ZXJhdG9yLT5jdXJyZW50SW5kZXgrKykpOwogICAgICAg
ICByZXR1cm4gRUlOQV9UUlVFOwogICAgIH0KIApAQCAtMTU4LDUzICsxNTgsNTMgQEAgc3RhdGlj
IEVpbmFfQm9vbCBfZXdrX2ZyYW1lX2NoaWxkcmVuX2l0ZXJhdG9yX25leHQoRWluYV9JdGVyYXRv
cl9Fd2tfRnJhbWUqIGl0LAogCiBzdGF0aWMgRXZhc19PYmplY3QqIF9ld2tfZnJhbWVfY2hpbGRy
ZW5faXRlcmF0b3JfZ2V0X2NvbnRhaW5lcihFaW5hX0l0ZXJhdG9yX0V3a19GcmFtZSogaXRlcmF0
b3IpCiB7Ci0gICAgcmV0dXJuIGl0ZXJhdG9yLT5vYmo7CisgICAgcmV0dXJuIGl0ZXJhdG9yLT5v
YmplY3Q7CiB9CiAKIHN0YXRpYyB2b2lkIF9ld2tfZnJhbWVfc21hcnRfYWRkKEV2YXNfT2JqZWN0
KiBld2tGcmFtZSkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUKGV3a0ZyYW1lLCBzZCk7CisgICAg
RVdLX0ZSQU1FX1NEX0dFVChld2tGcmFtZSwgc21hcnREYXRhKTsKIAotICAgIGlmICghc2QpIHsK
LSAgICAgICAgc2QgPSBzdGF0aWNfY2FzdDxFd2tfRnJhbWVfU21hcnRfRGF0YSo+KGNhbGxvYygx
LCBzaXplb2YoRXdrX0ZyYW1lX1NtYXJ0X0RhdGEpKSk7Ci0gICAgICAgIGlmICghc2QpIHsKKyAg
ICBpZiAoIXNtYXJ0RGF0YSkgeworICAgICAgICBzbWFydERhdGEgPSBzdGF0aWNfY2FzdDxFd2tf
RnJhbWVfU21hcnRfRGF0YSo+KGNhbGxvYygxLCBzaXplb2YoRXdrX0ZyYW1lX1NtYXJ0X0RhdGEp
KSk7CisgICAgICAgIGlmICghc21hcnREYXRhKSB7CiAgICAgICAgICAgICBDUklUSUNBTCgiY291
bGQgbm90IGFsbG9jYXRlIEV3a19GcmFtZV9TbWFydF9EYXRhIik7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KLSAgICAgICAgZXZhc19vYmplY3Rfc21hcnRfZGF0YV9zZXQoZXdrRnJh
bWUsIHNkKTsKKyAgICAgICAgZXZhc19vYmplY3Rfc21hcnRfZGF0YV9zZXQoZXdrRnJhbWUsIHNt
YXJ0RGF0YSk7CiAgICAgfQogCi0gICAgc2QtPnNlbGYgPSBld2tGcmFtZTsKKyAgICBzbWFydERh
dGEtPnNlbGYgPSBld2tGcmFtZTsKIAogICAgIF9wYXJlbnRfc2MuYWRkKGV3a0ZyYW1lKTsKLSAg
ICBldmFzX29iamVjdF9zdGF0aWNfY2xpcF9zZXQoc2QtPmJhc2UuY2xpcHBlciwgRUlOQV9GQUxT
RSk7Ci0gICAgZXZhc19vYmplY3RfbW92ZShzZC0+YmFzZS5jbGlwcGVyLCAwLCAwKTsKLSAgICBl
dmFzX29iamVjdF9yZXNpemUoc2QtPmJhc2UuY2xpcHBlciwgMCwgMCk7CisgICAgZXZhc19vYmpl
Y3Rfc3RhdGljX2NsaXBfc2V0KHNtYXJ0RGF0YS0+YmFzZS5jbGlwcGVyLCBFSU5BX0ZBTFNFKTsK
KyAgICBldmFzX29iamVjdF9tb3ZlKHNtYXJ0RGF0YS0+YmFzZS5jbGlwcGVyLCAwLCAwKTsKKyAg
ICBldmFzX29iamVjdF9yZXNpemUoc21hcnREYXRhLT5iYXNlLmNsaXBwZXIsIDAsIDApOwogCiAj
aWZkZWYgRVdLX0ZSQU1FX0RFQlVHCi0gICAgc2QtPnJlZ2lvbiA9IGV2YXNfb2JqZWN0X3JlY3Rh
bmdsZV9hZGQoc2QtPmJhc2UuZXZhcyk7CisgICAgc21hcnREYXRhLT5yZWdpb24gPSBldmFzX29i
amVjdF9yZWN0YW5nbGVfYWRkKHNtYXJ0RGF0YS0+YmFzZS5ldmFzKTsKICAgICBzdGF0aWMgaW50
IGkgPSAwOwogICAgIHN3aXRjaCAoaSkgewogICAgIGNhc2UgMDoKLSAgICAgICAgZXZhc19vYmpl
Y3RfY29sb3Jfc2V0KHNkLT5yZWdpb24sIDEyOCwgMCwgMCwgMTI4KTsKKyAgICAgICAgZXZhc19v
YmplY3RfY29sb3Jfc2V0KHNtYXJ0RGF0YS0+cmVnaW9uLCAxMjgsIDAsIDAsIDEyOCk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgMToKLSAgICAgICAgZXZhc19vYmplY3RfY29sb3Jfc2V0KHNk
LT5yZWdpb24sIDAsIDEyOCwgMCwgMTI4KTsKKyAgICAgICAgZXZhc19vYmplY3RfY29sb3Jfc2V0
KHNtYXJ0RGF0YS0+cmVnaW9uLCAwLCAxMjgsIDAsIDEyOCk7CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgMjoKLSAgICAgICAgZXZhc19vYmplY3RfY29sb3Jfc2V0KHNkLT5yZWdpb24sIDAsIDAs
IDEyOCwgMTI4KTsKKyAgICAgICAgZXZhc19vYmplY3RfY29sb3Jfc2V0KHNtYXJ0RGF0YS0+cmVn
aW9uLCAwLCAwLCAxMjgsIDEyOCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgMzoKLSAgICAg
ICAgZXZhc19vYmplY3RfY29sb3Jfc2V0KHNkLT5yZWdpb24sIDEyOCwgMCwgMCwgMTI4KTsKKyAg
ICAgICAgZXZhc19vYmplY3RfY29sb3Jfc2V0KHNtYXJ0RGF0YS0+cmVnaW9uLCAxMjgsIDAsIDAs
IDEyOCk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgNDoKLSAgICAgICAgZXZhc19vYmplY3Rf
Y29sb3Jfc2V0KHNkLT5yZWdpb24sIDEyOCwgMTI4LCAwLCAxMjgpOworICAgICAgICBldmFzX29i
amVjdF9jb2xvcl9zZXQoc21hcnREYXRhLT5yZWdpb24sIDEyOCwgMTI4LCAwLCAxMjgpOwogICAg
ICAgICBicmVhazsKICAgICBjYXNlIDU6Ci0gICAgICAgIGV2YXNfb2JqZWN0X2NvbG9yX3NldChz
ZC0+cmVnaW9uLCAxMjgsIDAsIDEyOCwgMTI4KTsKKyAgICAgICAgZXZhc19vYmplY3RfY29sb3Jf
c2V0KHNtYXJ0RGF0YS0+cmVnaW9uLCAxMjgsIDAsIDEyOCwgMTI4KTsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSA2OgotICAgICAgICBldmFzX29iamVjdF9jb2xvcl9zZXQoc2QtPnJlZ2lvbiwg
MCwgMTI4LCAxMjgsIDEyOCk7CisgICAgICAgIGV2YXNfb2JqZWN0X2NvbG9yX3NldChzbWFydERh
dGEtPnJlZ2lvbiwgMCwgMTI4LCAxMjgsIDEyOCk7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1
bHQ6CiAgICAgICAgIGJyZWFrOwpAQCAtMjEzLDI3ICsyMTMsMjcgQEAgc3RhdGljIHZvaWQgX2V3
a19mcmFtZV9zbWFydF9hZGQoRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogICAgIGlmIChpID4gNikK
ICAgICAgICAgaSA9IDA7CiAKLSAgICBldmFzX29iamVjdF9zbWFydF9tZW1iZXJfYWRkKHNkLT5y
ZWdpb24sIGV3a0ZyYW1lKTsKLSAgICBldmFzX29iamVjdF9oaWRlKHNkLT5yZWdpb24pOworICAg
IGV2YXNfb2JqZWN0X3NtYXJ0X21lbWJlcl9hZGQoc21hcnREYXRhLT5yZWdpb24sIGV3a0ZyYW1l
KTsKKyAgICBldmFzX29iamVjdF9oaWRlKHNtYXJ0RGF0YS0+cmVnaW9uKTsKICNlbmRpZgogfQog
CiBzdGF0aWMgdm9pZCBfZXdrX2ZyYW1lX3NtYXJ0X2RlbChFdmFzX09iamVjdCogZXdrRnJhbWUp
CiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVChld2tGcmFtZSwgc2QpOworICAgIEVXS19GUkFNRV9T
RF9HRVQoZXdrRnJhbWUsIHNtYXJ0RGF0YSk7CiAKLSAgICBpZiAoc2QpIHsKLSAgICAgICAgaWYg
KHNkLT5mcmFtZSkgewotICAgICAgICAgICAgV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRFZmwq
IGZsYyA9IF9ld2tfZnJhbWVfbG9hZGVyX2VmbF9nZXQoc2QtPmZyYW1lKTsKKyAgICBpZiAoc21h
cnREYXRhKSB7CisgICAgICAgIGlmIChzbWFydERhdGEtPmZyYW1lKSB7CisgICAgICAgICAgICBX
ZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEVmbCogZmxjID0gX2V3a19mcmFtZV9sb2FkZXJfZWZs
X2dldChzbWFydERhdGEtPmZyYW1lKTsKICAgICAgICAgICAgIGZsYy0+c2V0V2ViRnJhbWUoMCk7
Ci0gICAgICAgICAgICBzZC0+ZnJhbWUtPmxvYWRlcigpLT5kZXRhY2hGcm9tUGFyZW50KCk7Ci0g
ICAgICAgICAgICBzZC0+ZnJhbWUtPmxvYWRlcigpLT5jYW5jZWxBbmRDbGVhcigpOwotICAgICAg
ICAgICAgc2QtPmZyYW1lID0gMDsKKyAgICAgICAgICAgIHNtYXJ0RGF0YS0+ZnJhbWUtPmxvYWRl
cigpLT5kZXRhY2hGcm9tUGFyZW50KCk7CisgICAgICAgICAgICBzbWFydERhdGEtPmZyYW1lLT5s
b2FkZXIoKS0+Y2FuY2VsQW5kQ2xlYXIoKTsKKyAgICAgICAgICAgIHNtYXJ0RGF0YS0+ZnJhbWUg
PSAwOwogICAgICAgICB9CiAKLSAgICAgICAgZWluYV9zdHJpbmdzaGFyZV9kZWwoc2QtPnRpdGxl
KTsKLSAgICAgICAgZWluYV9zdHJpbmdzaGFyZV9kZWwoc2QtPnVyaSk7Ci0gICAgICAgIGVpbmFf
c3RyaW5nc2hhcmVfZGVsKHNkLT5uYW1lKTsKKyAgICAgICAgZWluYV9zdHJpbmdzaGFyZV9kZWwo
c21hcnREYXRhLT50aXRsZSk7CisgICAgICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVsKHNtYXJ0RGF0
YS0+dXJpKTsKKyAgICAgICAgZWluYV9zdHJpbmdzaGFyZV9kZWwoc21hcnREYXRhLT5uYW1lKTsK
ICAgICB9CiAKICAgICBfcGFyZW50X3NjLmRlbChld2tGcmFtZSk7CkBAIC0yNDEsMTUgKzI0MSwx
NSBAQCBzdGF0aWMgdm9pZCBfZXdrX2ZyYW1lX3NtYXJ0X2RlbChFdmFzX09iamVjdCogZXdrRnJh
bWUpCiAKIHN0YXRpYyB2b2lkIF9ld2tfZnJhbWVfc21hcnRfcmVzaXplKEV2YXNfT2JqZWN0KiBl
d2tGcmFtZSwgRXZhc19Db29yZCB3aWR0aCwgRXZhc19Db29yZCBoZWlnaHQpCiB7Ci0gICAgRVdL
X0ZSQU1FX1NEX0dFVChld2tGcmFtZSwgc2QpOwotICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShzZC0+
YmFzZS5jbGlwcGVyLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUKGV3a0Zy
YW1lLCBzbWFydERhdGEpOworICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShzbWFydERhdGEtPmJhc2Uu
Y2xpcHBlciwgd2lkdGgsIGhlaWdodCk7CiAKICNpZmRlZiBFV0tfRlJBTUVfREVCVUcKLSAgICBl
dmFzX29iamVjdF9yZXNpemUoc2QtPnJlZ2lvbiwgd2lkdGgsIGhlaWdodCk7CisgICAgZXZhc19v
YmplY3RfcmVzaXplKHNtYXJ0RGF0YS0+cmVnaW9uLCB3aWR0aCwgaGVpZ2h0KTsKICAgICBFdmFz
X0Nvb3JkIHgsIHk7Ci0gICAgZXZhc19vYmplY3RfZ2VvbWV0cnlfZ2V0KHNkLT5yZWdpb24sICZ4
LCAmeSwgJndpZHRoLCAmaGVpZ2h0KTsKKyAgICBldmFzX29iamVjdF9nZW9tZXRyeV9nZXQoc21h
cnREYXRhLT5yZWdpb24sICZ4LCAmeSwgJndpZHRoLCAmaGVpZ2h0KTsKICAgICBJTkYoInJlZ2lv
bj0lcCwgdmlzaWJsZT0lZCwgZ2VvPSVkLCVkICsgJWR4JWQiLAotICAgICAgICBzZC0+cmVnaW9u
LCBldmFzX29iamVjdF92aXNpYmxlX2dldChzZC0+cmVnaW9uKSwgeCwgeSwgd2lkdGgsIGhlaWdo
dCk7CisgICAgICAgIHNtYXJ0RGF0YS0+cmVnaW9uLCBldmFzX29iamVjdF92aXNpYmxlX2dldChz
bWFydERhdGEtPnJlZ2lvbiksIHgsIHksIHdpZHRoLCBoZWlnaHQpOwogICAgIF9ld2tfZnJhbWVf
ZGVidWcoZXdrRnJhbWUpOwogI2VuZGlmCiB9CkBAIC0yNjQsMTMgKzI2NCwxMyBAQCBzdGF0aWMg
dm9pZCBfZXdrX2ZyYW1lX3NtYXJ0X3NldChFdmFzX1NtYXJ0X0NsYXNzKiBhcGkpCiAKIHN0YXRp
YyBpbmxpbmUgRXZhc19TbWFydCogX2V3a19mcmFtZV9zbWFydF9jbGFzc19uZXcodm9pZCkKIHsK
LSAgICBzdGF0aWMgRXZhc19TbWFydF9DbGFzcyBzYyA9IEVWQVNfU01BUlRfQ0xBU1NfSU5JVF9O
QU1FX1ZFUlNJT04oRVdLX0ZSQU1FX1RZUEVfU1RSKTsKKyAgICBzdGF0aWMgRXZhc19TbWFydF9D
bGFzcyBzbWFydENsYXNzID0gRVZBU19TTUFSVF9DTEFTU19JTklUX05BTUVfVkVSU0lPTihFV0tf
RlJBTUVfVFlQRV9TVFIpOwogICAgIHN0YXRpYyBFdmFzX1NtYXJ0KiBzbWFydCA9IDA7CiAKICAg
ICBpZiAoRUlOQV9VTkxJS0VMWSghc21hcnQpKSB7CiAgICAgICAgIGV2YXNfb2JqZWN0X3NtYXJ0
X2NsaXBwZWRfc21hcnRfc2V0KCZfcGFyZW50X3NjKTsKLSAgICAgICAgX2V3a19mcmFtZV9zbWFy
dF9zZXQoJnNjKTsKLSAgICAgICAgc21hcnQgPSBldmFzX3NtYXJ0X2NsYXNzX25ldygmc2MpOwor
ICAgICAgICBfZXdrX2ZyYW1lX3NtYXJ0X3NldCgmc21hcnRDbGFzcyk7CisgICAgICAgIHNtYXJ0
ID0gZXZhc19zbWFydF9jbGFzc19uZXcoJnNtYXJ0Q2xhc3MpOwogICAgIH0KIAogICAgIHJldHVy
biBzbWFydDsKQEAgLTI4NCwyOCArMjg0LDI4IEBAIEV2YXNfT2JqZWN0KiBld2tfZnJhbWVfdmll
d19nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogCiBFaW5hX0l0ZXJhdG9yKiBld2tf
ZnJhbWVfY2hpbGRyZW5faXRlcmF0b3JfbmV3KEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsKLSAg
ICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIDApOwotICAgIEVpbmFf
SXRlcmF0b3JfRXdrX0ZyYW1lKiBpdCA9IHN0YXRpY19jYXN0PEVpbmFfSXRlcmF0b3JfRXdrX0Zy
YW1lKj4KKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRh
LCAwKTsKKyAgICBFaW5hX0l0ZXJhdG9yX0V3a19GcmFtZSogaXRlcmF0b3IgPSBzdGF0aWNfY2Fz
dDxFaW5hX0l0ZXJhdG9yX0V3a19GcmFtZSo+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKGNhbGxvYygxLCBzaXplb2YoRWluYV9JdGVyYXRvcl9Fd2tfRnJhbWUpKSk7Ci0gICAg
aWYgKCFpdCkKKyAgICBpZiAoIWl0ZXJhdG9yKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIEVJ
TkFfTUFHSUNfU0VUKCZpdC0+YmFzZSwgRUlOQV9NQUdJQ19JVEVSQVRPUik7Ci0gICAgaXQtPmJh
c2UubmV4dCA9IEZVTkNfSVRFUkFUT1JfTkVYVChfZXdrX2ZyYW1lX2NoaWxkcmVuX2l0ZXJhdG9y
X25leHQpOwotICAgIGl0LT5iYXNlLmdldF9jb250YWluZXIgPSBGVU5DX0lURVJBVE9SX0dFVF9D
T05UQUlORVIoX2V3a19mcmFtZV9jaGlsZHJlbl9pdGVyYXRvcl9nZXRfY29udGFpbmVyKTsKLSAg
ICBpdC0+YmFzZS5mcmVlID0gRlVOQ19JVEVSQVRPUl9GUkVFKGZyZWUpOwotICAgIGl0LT5vYmog
PSBld2tGcmFtZTsKLSAgICBpdC0+Y3VycmVudEluZGV4ID0gMDsKLSAgICByZXR1cm4gJml0LT5i
YXNlOworICAgIEVJTkFfTUFHSUNfU0VUKCZpdGVyYXRvci0+YmFzZSwgRUlOQV9NQUdJQ19JVEVS
QVRPUik7CisgICAgaXRlcmF0b3ItPmJhc2UubmV4dCA9IEZVTkNfSVRFUkFUT1JfTkVYVChfZXdr
X2ZyYW1lX2NoaWxkcmVuX2l0ZXJhdG9yX25leHQpOworICAgIGl0ZXJhdG9yLT5iYXNlLmdldF9j
b250YWluZXIgPSBGVU5DX0lURVJBVE9SX0dFVF9DT05UQUlORVIoX2V3a19mcmFtZV9jaGlsZHJl
bl9pdGVyYXRvcl9nZXRfY29udGFpbmVyKTsKKyAgICBpdGVyYXRvci0+YmFzZS5mcmVlID0gRlVO
Q19JVEVSQVRPUl9GUkVFKGZyZWUpOworICAgIGl0ZXJhdG9yLT5vYmplY3QgPSBld2tGcmFtZTsK
KyAgICBpdGVyYXRvci0+Y3VycmVudEluZGV4ID0gMDsKKyAgICByZXR1cm4gJml0ZXJhdG9yLT5i
YXNlOwogfQogCiBFdmFzX09iamVjdCogZXdrX2ZyYW1lX2NoaWxkX2ZpbmQoRXZhc19PYmplY3Qq
IGV3a0ZyYW1lLCBjb25zdCBjaGFyKiBuYW1lKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1Jf
UkVUVVJOKGV3a0ZyYW1lLCBzZCwgMCk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrRnJhbWUsIHNtYXJ0RGF0YSwgMCk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5f
VkFMKG5hbWUsIDApOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJh
bWUsIDApOwotICAgIFdURjo6U3RyaW5nIHMgPSBXVEY6OlN0cmluZzo6ZnJvbVVURjgobmFtZSk7
Ci0gICAgcmV0dXJuIEVXS1ByaXZhdGU6OmtpdEZyYW1lKHNkLT5mcmFtZS0+dHJlZSgpLT5maW5k
KFdURjo6QXRvbWljU3RyaW5nKHMpKSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5f
VkFMKHNtYXJ0RGF0YS0+ZnJhbWUsIDApOworICAgIFdURjo6U3RyaW5nIGZyYW1lTmFtZSA9IFdU
Rjo6U3RyaW5nOjpmcm9tVVRGOChuYW1lKTsKKyAgICByZXR1cm4gRVdLUHJpdmF0ZTo6a2l0RnJh
bWUoc21hcnREYXRhLT5mcmFtZS0+dHJlZSgpLT5maW5kKFdURjo6QXRvbWljU3RyaW5nKGZyYW1l
TmFtZSkpKTsKIH0KIAogRWluYV9Cb29sIGV3a19mcmFtZV91cmlfc2V0KEV2YXNfT2JqZWN0KiBl
d2tGcmFtZSwgY29uc3QgY2hhciogdXJpKQpAQCAtMzI2LDI3ICszMjYsMjcgQEAgY29uc3QgY2hh
ciogZXdrX2ZyYW1lX3VyaV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogCiBjb25z
dCBjaGFyKiBld2tfZnJhbWVfdGl0bGVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSkK
IHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIDApOwotICAg
IHJldHVybiBzZC0+dGl0bGU7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJh
bWUsIHNtYXJ0RGF0YSwgMCk7CisgICAgcmV0dXJuIHNtYXJ0RGF0YS0+dGl0bGU7CiB9CiAKIGNv
bnN0IGNoYXIqIGV3a19mcmFtZV9uYW1lX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrRnJhbWUp
CiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCAwKTsKKyAg
ICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRhLCAwKTsKIAot
ICAgIGlmICghc2QtPmZyYW1lKSB7CisgICAgaWYgKCFzbWFydERhdGEtPmZyYW1lKSB7CiAgICAg
ICAgIEVSUigiY291bGQgbm90IGdldCBuYW1lIG9mIHVuaW5pdGlhbGl6ZWQgZnJhbWUuIik7CiAg
ICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIGNvbnN0IFdURjo6U3RyaW5nIGZyYW1lTmFt
ZSA9IHNkLT5mcmFtZS0+dHJlZSgpLT51bmlxdWVOYW1lKCk7CisgICAgY29uc3QgV1RGOjpTdHJp
bmcgZnJhbWVOYW1lID0gc21hcnREYXRhLT5mcmFtZS0+dHJlZSgpLT51bmlxdWVOYW1lKCk7CiAK
LSAgICBpZiAoKHNkLT5uYW1lKSAmJiAoc2QtPm5hbWUgPT0gZnJhbWVOYW1lKSkKLSAgICAgICAg
cmV0dXJuIHNkLT5uYW1lOworICAgIGlmICgoc21hcnREYXRhLT5uYW1lKSAmJiAoc21hcnREYXRh
LT5uYW1lID09IGZyYW1lTmFtZSkpCisgICAgICAgIHJldHVybiBzbWFydERhdGEtPm5hbWU7CiAK
LSAgICBlaW5hX3N0cmluZ3NoYXJlX3JlcGxhY2VfbGVuZ3RoKCYoc2QtPm5hbWUpLCBmcmFtZU5h
bWUudXRmOCgpLmRhdGEoKSwgZnJhbWVOYW1lLmxlbmd0aCgpKTsKKyAgICBlaW5hX3N0cmluZ3No
YXJlX3JlcGxhY2VfbGVuZ3RoKCYoc21hcnREYXRhLT5uYW1lKSwgZnJhbWVOYW1lLnV0ZjgoKS5k
YXRhKCksIGZyYW1lTmFtZS5sZW5ndGgoKSk7CiAKLSAgICByZXR1cm4gc2QtPm5hbWU7CisgICAg
cmV0dXJuIHNtYXJ0RGF0YS0+bmFtZTsKIH0KIAogRWluYV9Cb29sIGV3a19mcmFtZV9jb250ZW50
c19zaXplX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrRnJhbWUsIEV2YXNfQ29vcmQqIHdpZHRo
LCBFdmFzX0Nvb3JkKiBoZWlnaHQpCkBAIC0zNjcsOSArMzY3LDkgQEAgRWluYV9Cb29sIGV3a19m
cmFtZV9jb250ZW50c19zaXplX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrRnJhbWUsIEV2YXNf
Q29vcmQqIHcKIAogc3RhdGljIEVpbmFfQm9vbCBfZXdrX2ZyYW1lX2NvbnRlbnRzX3NldF9pbnRl
cm5hbChFd2tfRnJhbWVfU21hcnRfRGF0YSogc21hcnREYXRhLCBjb25zdCBjaGFyKiBjb250ZW50
cywgc2l6ZV90IGNvbnRlbnRzU2l6ZSwgY29uc3QgY2hhciogbWltZVR5cGUsIGNvbnN0IGNoYXIq
IGVuY29kaW5nLCBjb25zdCBjaGFyKiBiYXNlVXJpLCBjb25zdCBjaGFyKiB1bnJlYWNoYWJsZVVy
aSkKIHsKLSAgICBzaXplX3QgbGVuID0gc3RybGVuKGNvbnRlbnRzKTsKLSAgICBpZiAoY29udGVu
dHNTaXplIDwgMSB8fCBjb250ZW50c1NpemUgPiBsZW4pCi0gICAgICAgIGNvbnRlbnRzU2l6ZSA9
IGxlbjsKKyAgICBzaXplX3QgbGVuZ3RoID0gc3RybGVuKGNvbnRlbnRzKTsKKyAgICBpZiAoY29u
dGVudHNTaXplIDwgMSB8fCBjb250ZW50c1NpemUgPiBsZW5ndGgpCisgICAgICAgIGNvbnRlbnRz
U2l6ZSA9IGxlbmd0aDsKICAgICBpZiAoIW1pbWVUeXBlKQogICAgICAgICBtaW1lVHlwZSA9ICJ0
ZXh0L2h0bWwiOwogICAgIGlmICghZW5jb2RpbmcpCkBAIC0zOTgsNTcgKzM5OCw1NyBAQCBzdGF0
aWMgRWluYV9Cb29sIF9ld2tfZnJhbWVfY29udGVudHNfc2V0X2ludGVybmFsKEV3a19GcmFtZV9T
bWFydF9EYXRhKiBzbWFydERhdAogCiBFaW5hX0Jvb2wgZXdrX2ZyYW1lX2NvbnRlbnRzX3NldChF
dmFzX09iamVjdCogZXdrRnJhbWUsIGNvbnN0IGNoYXIqIGNvbnRlbnRzLCBzaXplX3QgY29udGVu
dHNTaXplLCBjb25zdCBjaGFyKiBtaW1lVHlwZSwgY29uc3QgY2hhciogZW5jb2RpbmcsIGNvbnN0
IGNoYXIqIGJhc2VVcmkpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJh
bWUsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9GQUxTRV9SRVRVUk5fVkFM
KHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrRnJhbWUsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fRkFM
U0VfUkVUVVJOX1ZBTChzbWFydERhdGEtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoY29udGVudHMsIEVJTkFfRkFMU0UpOwogICAgIHJldHVy
biBfZXdrX2ZyYW1lX2NvbnRlbnRzX3NldF9pbnRlcm5hbAotICAgICAgICAgICAgICAgKHNkLCBj
b250ZW50cywgY29udGVudHNTaXplLCBtaW1lVHlwZSwgZW5jb2RpbmcsIGJhc2VVcmksIDApOwor
ICAgICAgICAgICAgICAgKHNtYXJ0RGF0YSwgY29udGVudHMsIGNvbnRlbnRzU2l6ZSwgbWltZVR5
cGUsIGVuY29kaW5nLCBiYXNlVXJpLCAwKTsKIH0KIAogRWluYV9Cb29sIGV3a19mcmFtZV9jb250
ZW50c19hbHRlcm5hdGVfc2V0KEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgY29uc3QgY2hhciogY29u
dGVudHMsIHNpemVfdCBjb250ZW50c1NpemUsIGNvbnN0IGNoYXIqIG1pbWVUeXBlLCBjb25zdCBj
aGFyKiBlbmNvZGluZywgY29uc3QgY2hhciogYmFzZVVyaSwgY29uc3QgY2hhciogdW5yZWFjaGFi
bGVVcmkpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBF
SU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9GQUxTRV9SRVRVUk5fVkFMKHNkLT5mcmFt
ZSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUs
IHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fRkFMU0VfUkVUVVJO
X1ZBTChzbWFydERhdGEtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTl9WQUwoY29udGVudHMsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOX1ZBTCh1bnJlYWNoYWJsZVVyaSwgRUlOQV9GQUxTRSk7CiAgICAgcmV0dXJu
IF9ld2tfZnJhbWVfY29udGVudHNfc2V0X2ludGVybmFsCi0gICAgICAgICAgICAgICAoc2QsIGNv
bnRlbnRzLCBjb250ZW50c1NpemUsIG1pbWVUeXBlLCBlbmNvZGluZywgYmFzZVVyaSwKKyAgICAg
ICAgICAgICAgIChzbWFydERhdGEsIGNvbnRlbnRzLCBjb250ZW50c1NpemUsIG1pbWVUeXBlLCBl
bmNvZGluZywgYmFzZVVyaSwKICAgICAgICAgICAgICAgIHVucmVhY2hhYmxlVXJpKTsKIH0KIAog
RWluYV9Cb29sIGV3a19mcmFtZV9zY3JpcHRfZXhlY3V0ZShFdmFzX09iamVjdCogZXdrRnJhbWUs
IGNvbnN0IGNoYXIqIHNjcmlwdCkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihl
d2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVJTkFfU0FGRVRZX09OX0ZBTFNFX1JFVFVS
Tl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JF
VFVSTihld2tGcmFtZSwgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9P
Tl9GQUxTRV9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUsIEVJTkFfRkFMU0UpOwogICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzY3JpcHQsIEVJTkFfRkFMU0UpOwotICAgIHNk
LT5mcmFtZS0+c2NyaXB0KCktPmV4ZWN1dGVTY3JpcHQoV1RGOjpTdHJpbmc6OmZyb21VVEY4KHNj
cmlwdCksIHRydWUpOworICAgIHNtYXJ0RGF0YS0+ZnJhbWUtPnNjcmlwdCgpLT5leGVjdXRlU2Ny
aXB0KFdURjo6U3RyaW5nOjpmcm9tVVRGOChzY3JpcHQpLCB0cnVlKTsKICAgICByZXR1cm4gRUlO
QV9UUlVFOwogfQogCiBFaW5hX0Jvb2wgZXdrX2ZyYW1lX2VkaXRhYmxlX2dldChjb25zdCBFdmFz
X09iamVjdCogZXdrRnJhbWUpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdr
RnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9W
QUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKLSAgICByZXR1cm4gc2QtPmVkaXRhYmxlOworICAg
IEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzbWFydERhdGEsIEVJTkFfRkFM
U0UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmZyYW1l
LCBFSU5BX0ZBTFNFKTsKKyAgICByZXR1cm4gc21hcnREYXRhLT5lZGl0YWJsZTsKIH0KIAogRWlu
YV9Cb29sIGV3a19mcmFtZV9lZGl0YWJsZV9zZXQoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBFaW5h
X0Jvb2wgZWRpdGFibGUpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJh
bWUsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwo
c2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihl
d2tGcmFtZSwgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTl9WQUwoc21hcnREYXRhLT5mcmFtZSwgRUlOQV9GQUxTRSk7CiAgICAgZWRpdGFibGUg
PSAhIWVkaXRhYmxlOwotICAgIGlmIChzZC0+ZWRpdGFibGUgPT0gZWRpdGFibGUpCisgICAgaWYg
KHNtYXJ0RGF0YS0+ZWRpdGFibGUgPT0gZWRpdGFibGUpCiAgICAgICAgIHJldHVybiBFSU5BX1RS
VUU7CiAgICAgaWYgKGVkaXRhYmxlKQotICAgICAgICBzZC0+ZnJhbWUtPmVkaXRvcigpLT5hcHBs
eUVkaXRpbmdTdHlsZVRvQm9keUVsZW1lbnQoKTsKKyAgICAgICAgc21hcnREYXRhLT5mcmFtZS0+
ZWRpdG9yKCktPmFwcGx5RWRpdGluZ1N0eWxlVG9Cb2R5RWxlbWVudCgpOwogICAgIHJldHVybiBF
SU5BX1RSVUU7CiB9CiAKIGNoYXIqIGV3a19mcmFtZV9zZWxlY3Rpb25fZ2V0KGNvbnN0IEV2YXNf
T2JqZWN0KiBld2tGcmFtZSkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tG
cmFtZSwgc2QsIDApOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJh
bWUsIDApOwotICAgIFdURjo6Q1N0cmluZyBzID0gc2QtPmZyYW1lLT5lZGl0b3IoKS0+c2VsZWN0
ZWRUZXh0KCkudXRmOCgpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1l
LCBzbWFydERhdGEsIDApOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFy
dERhdGEtPmZyYW1lLCAwKTsKKyAgICBXVEY6OkNTdHJpbmcgcyA9IHNtYXJ0RGF0YS0+ZnJhbWUt
PmVkaXRvcigpLT5zZWxlY3RlZFRleHQoKS51dGY4KCk7CiAgICAgaWYgKHMuaXNOdWxsKCkpCiAg
ICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiBzdHJkdXAocy5kYXRhKCkpOwpAQCAtNDU2LDQ1
ICs0NTYsNDUgQEAgY2hhciogZXdrX2ZyYW1lX3NlbGVjdGlvbl9nZXQoY29uc3QgRXZhc19PYmpl
Y3QqIGV3a0ZyYW1lKQogCiBFaW5hX0Jvb2wgZXdrX2ZyYW1lX3RleHRfc2VhcmNoKGNvbnN0IEV2
YXNfT2JqZWN0KiBld2tGcmFtZSwgY29uc3QgY2hhciogdGV4dCwgRWluYV9Cb29sIGNhc2VTZW5z
aXRpdmUsIEVpbmFfQm9vbCBmb3J3YXJkLCBFaW5hX0Jvb2wgd3JhcCkKIHsKLSAgICBFV0tfRlJB
TUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOworICAgIEVX
S19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzbWFydERhdGEsIEVJTkFfRkFMU0Up
OworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmZyYW1lLCBF
SU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodGV4dCwgRUlO
QV9GQUxTRSk7CiAKLSAgICByZXR1cm4gc2QtPmZyYW1lLT5lZGl0b3IoKS0+ZmluZFN0cmluZyhX
VEY6OlN0cmluZzo6ZnJvbVVURjgodGV4dCksIGZvcndhcmQsIGNhc2VTZW5zaXRpdmUsIHdyYXAs
IHRydWUpOworICAgIHJldHVybiBzbWFydERhdGEtPmZyYW1lLT5lZGl0b3IoKS0+ZmluZFN0cmlu
ZyhXVEY6OlN0cmluZzo6ZnJvbVVURjgodGV4dCksIGZvcndhcmQsIGNhc2VTZW5zaXRpdmUsIHdy
YXAsIHRydWUpOwogfQogCiB1bnNpZ25lZCBpbnQgZXdrX2ZyYW1lX3RleHRfbWF0Y2hlc19tYXJr
KEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgY29uc3QgY2hhciogc3RyaW5nLCBFaW5hX0Jvb2wgY2Fz
ZVNlbnNpdGl2ZSwgRWluYV9Cb29sIGhpZ2hsaWdodCwgdW5zaWduZWQgaW50IGxpbWl0KQogewot
ICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgMCk7Ci0gICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7CisgICAg
RVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSwgMCk7CisgICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUsIEVJTkFfRkFM
U0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzdHJpbmcsIDApOwogCi0g
ICAgc2QtPmZyYW1lLT5lZGl0b3IoKS0+c2V0TWFya2VkVGV4dE1hdGNoZXNBcmVIaWdobGlnaHRl
ZChoaWdobGlnaHQpOwotICAgIHJldHVybiBzZC0+ZnJhbWUtPmVkaXRvcigpLT5jb3VudE1hdGNo
ZXNGb3JUZXh0KFdURjo6U3RyaW5nOjpmcm9tVVRGOChzdHJpbmcpLCBjYXNlU2Vuc2l0aXZlLCBs
aW1pdCwgdHJ1ZSk7CisgICAgc21hcnREYXRhLT5mcmFtZS0+ZWRpdG9yKCktPnNldE1hcmtlZFRl
eHRNYXRjaGVzQXJlSGlnaGxpZ2h0ZWQoaGlnaGxpZ2h0KTsKKyAgICByZXR1cm4gc21hcnREYXRh
LT5mcmFtZS0+ZWRpdG9yKCktPmNvdW50TWF0Y2hlc0ZvclRleHQoV1RGOjpTdHJpbmc6OmZyb21V
VEY4KHN0cmluZyksIGNhc2VTZW5zaXRpdmUsIGxpbWl0LCB0cnVlKTsKIH0KIAogRWluYV9Cb29s
IGV3a19mcmFtZV90ZXh0X21hdGNoZXNfdW5tYXJrX2FsbChFdmFzX09iamVjdCogZXdrRnJhbWUp
CiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZB
TFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5B
X0ZBTFNFKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21hcnRE
YXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21h
cnREYXRhLT5mcmFtZSwgRUlOQV9GQUxTRSk7CiAKLSAgICBzZC0+ZnJhbWUtPmRvY3VtZW50KCkt
Pm1hcmtlcnMoKS0+cmVtb3ZlTWFya2VycyhXZWJDb3JlOjpEb2N1bWVudE1hcmtlcjo6VGV4dE1h
dGNoKTsKKyAgICBzbWFydERhdGEtPmZyYW1lLT5kb2N1bWVudCgpLT5tYXJrZXJzKCktPnJlbW92
ZU1hcmtlcnMoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXI6OlRleHRNYXRjaCk7CiAgICAgcmV0dXJu
IEVJTkFfVFJVRTsKIH0KIAogRWluYV9Cb29sIGV3a19mcmFtZV90ZXh0X21hdGNoZXNfaGlnaGxp
Z2h0X3NldChFdmFzX09iamVjdCogZXdrRnJhbWUsIEVpbmFfQm9vbCBoaWdobGlnaHQpCiB7Ci0g
ICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsK
LSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNF
KTsKLSAgICBzZC0+ZnJhbWUtPmVkaXRvcigpLT5zZXRNYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hs
aWdodGVkKGhpZ2hsaWdodCk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJh
bWUsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUsIEVJTkFfRkFMU0UpOworICAgIHNtYXJ0RGF0YS0+ZnJh
bWUtPmVkaXRvcigpLT5zZXRNYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkKGhpZ2hsaWdo
dCk7CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAogRWluYV9Cb29sIGV3a19mcmFtZV90ZXh0
X21hdGNoZXNfaGlnaGxpZ2h0X2dldChjb25zdCBFdmFzX09iamVjdCogZXdrRnJhbWUpCiB7Ci0g
ICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsK
LSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNF
KTsKLSAgICByZXR1cm4gc2QtPmZyYW1lLT5lZGl0b3IoKS0+bWFya2VkVGV4dE1hdGNoZXNBcmVI
aWdobGlnaHRlZCgpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBz
bWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZB
TChzbWFydERhdGEtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKKyAgICByZXR1cm4gc21hcnREYXRhLT5m
cmFtZS0+ZWRpdG9yKCktPm1hcmtlZFRleHRNYXRjaGVzQXJlSGlnaGxpZ2h0ZWQoKTsKIH0KIAog
LyoqCkBAIC01MTUsMTAgKzUxNSwxMCBAQCBzdGF0aWMgYm9vbCBfZXdrX2ZyYW1lX3JlY3RfaXNf
bmVnYXRpdmVfdmFsdWUoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdCkKIAogRWluYV9Cb29s
IGV3a19mcmFtZV90ZXh0X21hdGNoZXNfbnRoX3Bvc19nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3
a0ZyYW1lLCBzaXplX3QgbnVtYmVyLCBpbnQqIHgsIGludCogeSkKIHsKLSAgICBFV0tfRlJBTUVf
U0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOworICAgIEVXS19G
UkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOwor
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmZyYW1lLCBFSU5B
X0ZBTFNFKTsKIAotICAgIFZlY3RvcjxXZWJDb3JlOjpJbnRSZWN0PiBpbnRSZWN0cyA9IHNkLT5m
cmFtZS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5yZW5kZXJlZFJlY3RzRm9yTWFya2VycyhXZWJD
b3JlOjpEb2N1bWVudE1hcmtlcjo6VGV4dE1hdGNoKTsKKyAgICBWZWN0b3I8V2ViQ29yZTo6SW50
UmVjdD4gaW50UmVjdHMgPSBzbWFydERhdGEtPmZyYW1lLT5kb2N1bWVudCgpLT5tYXJrZXJzKCkt
PnJlbmRlcmVkUmVjdHNGb3JNYXJrZXJzKFdlYkNvcmU6OkRvY3VtZW50TWFya2VyOjpUZXh0TWF0
Y2gpOwogCiAgICAgLyogcmVtb3ZlIHVzZWxlc3MgdmFsdWVzICovCiAgICAgc3RkOjpyZW1vdmVf
aWYoaW50UmVjdHMuYmVnaW4oKSwgaW50UmVjdHMuZW5kKCksIF9ld2tfZnJhbWVfcmVjdF9pc19u
ZWdhdGl2ZV92YWx1ZSk7CkBAIC01MzcsMjUgKzUzNywyNSBAQCBFaW5hX0Jvb2wgZXdrX2ZyYW1l
X3RleHRfbWF0Y2hlc19udGhfcG9zX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrRnJhbWUsIHNp
emVfdAogCiBFaW5hX0Jvb2wgZXdrX2ZyYW1lX3N0b3AoRXZhc19PYmplY3QqIGV3a0ZyYW1lKQog
ewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxT
RSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9G
QUxTRSk7Ci0gICAgc2QtPmZyYW1lLT5sb2FkZXIoKS0+c3RvcEFsbExvYWRlcnMoKTsKKyAgICBF
V0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRhLCBFSU5BX0ZBTFNF
KTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5mcmFtZSwg
RUlOQV9GQUxTRSk7CisgICAgc21hcnREYXRhLT5mcmFtZS0+bG9hZGVyKCktPnN0b3BBbGxMb2Fk
ZXJzKCk7CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAogRWluYV9Cb29sIGV3a19mcmFtZV9y
ZWxvYWQoRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1Jf
UkVUVVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7Ci0gICAgc2QtPmZyYW1lLT5sb2Fk
ZXIoKS0+cmVsb2FkKCk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUs
IHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5f
VkFMKHNtYXJ0RGF0YS0+ZnJhbWUsIEVJTkFfRkFMU0UpOworICAgIHNtYXJ0RGF0YS0+ZnJhbWUt
PmxvYWRlcigpLT5yZWxvYWQoKTsKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCiBFaW5hX0Jv
b2wgZXdrX2ZyYW1lX3JlbG9hZF9mdWxsKEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsKLSAgICBF
V0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOwotICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOwot
ICAgIHNkLT5mcmFtZS0+bG9hZGVyKCktPnJlbG9hZCh0cnVlKTsKKyAgICBFV0tfRlJBTUVfU0Rf
R0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5mcmFtZSwgRUlOQV9GQUxTRSk7
CisgICAgc21hcnREYXRhLT5mcmFtZS0+bG9hZGVyKCktPnJlbG9hZCh0cnVlKTsKICAgICByZXR1
cm4gRUlOQV9UUlVFOwogfQogCkBAIC01NzEsOSArNTcxLDkgQEAgRWluYV9Cb29sIGV3a19mcmFt
ZV9mb3J3YXJkKEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIAogRWluYV9Cb29sIGV3a19mcmFtZV9u
YXZpZ2F0ZShFdmFzX09iamVjdCogZXdrRnJhbWUsIGludCBzdGVwcykKIHsKLSAgICBFV0tfRlJB
TUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOwotICAgIFdl
YkNvcmU6OlBhZ2UqIHBhZ2UgPSBzZC0+ZnJhbWUtPnBhZ2UoKTsKKyAgICBFV0tfRlJBTUVfU0Rf
R0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5mcmFtZSwgRUlOQV9GQUxTRSk7
CisgICAgV2ViQ29yZTo6UGFnZSogcGFnZSA9IHNtYXJ0RGF0YS0+ZnJhbWUtPnBhZ2UoKTsKICAg
ICBpZiAoIXBhZ2UtPmNhbkdvQmFja09yRm9yd2FyZChzdGVwcykpCiAgICAgICAgIHJldHVybiBF
SU5BX0ZBTFNFOwogICAgIHBhZ2UtPmdvQmFja09yRm9yd2FyZChzdGVwcyk7CkBAIC01OTIsMzkg
KzU5MiwzOSBAQCBFaW5hX0Jvb2wgZXdrX2ZyYW1lX2ZvcndhcmRfcG9zc2libGUoRXZhc19PYmpl
Y3QqIGV3a0ZyYW1lKQogCiBFaW5hX0Jvb2wgZXdrX2ZyYW1lX25hdmlnYXRlX3Bvc3NpYmxlKEV2
YXNfT2JqZWN0KiBld2tGcmFtZSwgaW50IHN0ZXBzKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRf
T1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7Ci0gICAgV2ViQ29yZTo6UGFn
ZSogcGFnZSA9IHNkLT5mcmFtZS0+cGFnZSgpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVU
VVJOKGV3a0ZyYW1lLCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKKyAgICBXZWJD
b3JlOjpQYWdlKiBwYWdlID0gc21hcnREYXRhLT5mcmFtZS0+cGFnZSgpOwogICAgIHJldHVybiBw
YWdlLT5jYW5Hb0JhY2tPckZvcndhcmQoc3RlcHMpOwogfQogCiBmbG9hdCBld2tfZnJhbWVfcGFn
ZV96b29tX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrRnJhbWUpCiB7Ci0gICAgRVdLX0ZSQU1F
X1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCAtMS4wKTsKLSAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCAtMS4wKTsKLSAgICByZXR1cm4gc2QtPmZyYW1l
LT5wYWdlWm9vbUZhY3RvcigpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0Zy
YW1lLCBzbWFydERhdGEsIC0xLjApOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZB
TChzbWFydERhdGEtPmZyYW1lLCAtMS4wKTsKKyAgICByZXR1cm4gc21hcnREYXRhLT5mcmFtZS0+
cGFnZVpvb21GYWN0b3IoKTsKIH0KIAogRWluYV9Cb29sIGV3a19mcmFtZV9wYWdlX3pvb21fc2V0
KEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgZmxvYXQgcGFnZVpvb21GYWN0b3IpCiB7Ci0gICAgRVdL
X0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKLSAg
ICBzZC0+ZnJhbWUtPnNldFBhZ2Vab29tRmFjdG9yKHBhZ2Vab29tRmFjdG9yKTsKKyAgICBFV0tf
RlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsK
KyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5mcmFtZSwgRUlO
QV9GQUxTRSk7CisgICAgc21hcnREYXRhLT5mcmFtZS0+c2V0UGFnZVpvb21GYWN0b3IocGFnZVpv
b21GYWN0b3IpOwogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKIGZsb2F0IGV3a19mcmFtZV90
ZXh0X3pvb21fZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsKLSAgICBFV0tfRlJB
TUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIC0xLjApOwotICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIC0xLjApOwotICAgIHJldHVybiBzZC0+ZnJh
bWUtPnRleHRab29tRmFjdG9yKCk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdr
RnJhbWUsIHNtYXJ0RGF0YSwgLTEuMCk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5f
VkFMKHNtYXJ0RGF0YS0+ZnJhbWUsIC0xLjApOworICAgIHJldHVybiBzbWFydERhdGEtPmZyYW1l
LT50ZXh0Wm9vbUZhY3RvcigpOwogfQogCiBFaW5hX0Jvb2wgZXdrX2ZyYW1lX3RleHRfem9vbV9z
ZXQoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBmbG9hdCB0ZXh0Wm9vbUZhY3RvcikKIHsKLSAgICBF
V0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOwotICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOwot
ICAgIHNkLT5mcmFtZS0+c2V0VGV4dFpvb21GYWN0b3IodGV4dFpvb21GYWN0b3IpOworICAgIEVX
S19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzbWFydERhdGEsIEVJTkFfRkFMU0Up
OworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmZyYW1lLCBF
SU5BX0ZBTFNFKTsKKyAgICBzbWFydERhdGEtPmZyYW1lLT5zZXRUZXh0Wm9vbUZhY3Rvcih0ZXh0
Wm9vbUZhY3Rvcik7CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIApAQCAtNjQzLDE0ICs2NDMs
MTQgQEAgdm9pZCBld2tfZnJhbWVfaGl0X3Rlc3RfZnJlZShFd2tfSGl0X1Rlc3QqIGhpdFRlc3Qp
CiAKIEV3a19IaXRfVGVzdCogZXdrX2ZyYW1lX2hpdF90ZXN0X25ldyhjb25zdCBFdmFzX09iamVj
dCogZXdrRnJhbWUsIGludCB4LCBpbnQgeSkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JF
VFVSTihld2tGcmFtZSwgc2QsIDApOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZB
TChzZC0+ZnJhbWUsIDApOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1l
LCBzbWFydERhdGEsIDApOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFy
dERhdGEtPmZyYW1lLCAwKTsKIAotICAgIFdlYkNvcmU6OkZyYW1lVmlldyogdmlldyA9IHNkLT5m
cmFtZS0+dmlldygpOworICAgIFdlYkNvcmU6OkZyYW1lVmlldyogdmlldyA9IHNtYXJ0RGF0YS0+
ZnJhbWUtPnZpZXcoKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodmlldywg
MCk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZS0+Y29udGVu
dFJlbmRlcmVyKCksIDApOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFy
dERhdGEtPmZyYW1lLT5jb250ZW50UmVuZGVyZXIoKSwgMCk7CiAKLSAgICBXZWJDb3JlOjpIaXRU
ZXN0UmVzdWx0IHJlc3VsdCA9IHNkLT5mcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmhpdFRlc3RSZXN1
bHRBdFBvaW50CisgICAgV2ViQ29yZTo6SGl0VGVzdFJlc3VsdCByZXN1bHQgPSBzbWFydERhdGEt
PmZyYW1lLT5ldmVudEhhbmRsZXIoKS0+aGl0VGVzdFJlc3VsdEF0UG9pbnQKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodmlldy0+d2luZG93VG9Db250ZW50cyhXZWJD
b3JlOjpJbnRQb2ludCh4LCB5KSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLyphbGxvd1NoYWRvd0NvbnRlbnQqLyBmYWxzZSwgLyppZ25vcmVDbGlwcGluZyovIHRy
dWUpOwogCkBAIC02NTksNDEgKzY1OSw0MSBAQCBFd2tfSGl0X1Rlc3QqIGV3a19mcmFtZV9oaXRf
dGVzdF9uZXcoY29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBpbnQgeCwgaW50IHkpCiAgICAg
aWYgKCFyZXN1bHQuaW5uZXJOb2RlKCkpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgRXdrX0hp
dF9UZXN0KiBoaXRfdGVzdCA9IHN0YXRpY19jYXN0PEV3a19IaXRfVGVzdCo+KGNhbGxvYygxLCBz
aXplb2YoRXdrX0hpdF9UZXN0KSkpOwotICAgIGlmICghaGl0X3Rlc3QpIHsKKyAgICBFd2tfSGl0
X1Rlc3QqIGhpdFRlc3QgPSBzdGF0aWNfY2FzdDxFd2tfSGl0X1Rlc3QqPihjYWxsb2MoMSwgc2l6
ZW9mKEV3a19IaXRfVGVzdCkpKTsKKyAgICBpZiAoIWhpdFRlc3QpIHsKICAgICAgICAgQ1JJVElD
QUwoIkNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGhpdCB0ZXN0LiIpOwogICAgICAgICBy
ZXR1cm4gMDsKICAgICB9CiAKLSAgICBoaXRfdGVzdC0+eCA9IHJlc3VsdC5wb2ludCgpLngoKTsK
LSAgICBoaXRfdGVzdC0+eSA9IHJlc3VsdC5wb2ludCgpLnkoKTsKKyAgICBoaXRUZXN0LT54ID0g
cmVzdWx0LnBvaW50KCkueCgpOworICAgIGhpdFRlc3QtPnkgPSByZXN1bHQucG9pbnQoKS55KCk7
CiAjaWYgMAogICAgIC8vIEZJWE1FCi0gICAgaGl0X3Rlc3QtPmJvdW5kaW5nX2JveC54ID0gcmVz
dWx0LmJvdW5kaW5nQm94KCkueCgpOwotICAgIGhpdF90ZXN0LT5ib3VuZGluZ19ib3gueSA9IHJl
c3VsdC5ib3VuZGluZ0JveCgpLnkoKTsKLSAgICBoaXRfdGVzdC0+Ym91bmRpbmdfYm94LncgPSBy
ZXN1bHQuYm91bmRpbmdCb3goKS53aWR0aCgpOwotICAgIGhpdF90ZXN0LT5ib3VuZGluZ19ib3gu
aCA9IHJlc3VsdC5ib3VuZGluZ0JveCgpLmhlaWdodCgpOworICAgIGhpdFRlc3QtPmJvdW5kaW5n
X2JveC54ID0gcmVzdWx0LmJvdW5kaW5nQm94KCkueCgpOworICAgIGhpdFRlc3QtPmJvdW5kaW5n
X2JveC55ID0gcmVzdWx0LmJvdW5kaW5nQm94KCkueSgpOworICAgIGhpdFRlc3QtPmJvdW5kaW5n
X2JveC53aWR0aCA9IHJlc3VsdC5ib3VuZGluZ0JveCgpLndpZHRoKCk7CisgICAgaGl0VGVzdC0+
Ym91bmRpbmdfYm94LmhlaWdodCA9IHJlc3VsdC5ib3VuZGluZ0JveCgpLmhlaWdodCgpOwogI2Vs
c2UKLSAgICBoaXRfdGVzdC0+Ym91bmRpbmdfYm94LnggPSAwOwotICAgIGhpdF90ZXN0LT5ib3Vu
ZGluZ19ib3gueSA9IDA7Ci0gICAgaGl0X3Rlc3QtPmJvdW5kaW5nX2JveC53ID0gMDsKLSAgICBo
aXRfdGVzdC0+Ym91bmRpbmdfYm94LmggPSAwOworICAgIGhpdFRlc3QtPmJvdW5kaW5nX2JveC54
ID0gMDsKKyAgICBoaXRUZXN0LT5ib3VuZGluZ19ib3gueSA9IDA7CisgICAgaGl0VGVzdC0+Ym91
bmRpbmdfYm94LncgPSAwOworICAgIGhpdFRlc3QtPmJvdW5kaW5nX2JveC5oID0gMDsKICNlbmRp
ZgogCi0gICAgV2ViQ29yZTo6VGV4dERpcmVjdGlvbiBkaXI7Ci0gICAgaGl0X3Rlc3QtPnRpdGxl
ID0gZWluYV9zdHJpbmdzaGFyZV9hZGQocmVzdWx0LnRpdGxlKGRpcikudXRmOCgpLmRhdGEoKSk7
Ci0gICAgaGl0X3Rlc3QtPmFsdGVybmF0ZV90ZXh0ID0gZWluYV9zdHJpbmdzaGFyZV9hZGQocmVz
dWx0LmFsdERpc3BsYXlTdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICBXZWJDb3JlOjpUZXh0
RGlyZWN0aW9uIGRpcmVjdGlvbjsKKyAgICBoaXRUZXN0LT50aXRsZSA9IGVpbmFfc3RyaW5nc2hh
cmVfYWRkKHJlc3VsdC50aXRsZShkaXJlY3Rpb24pLnV0ZjgoKS5kYXRhKCkpOworICAgIGhpdFRl
c3QtPmFsdGVybmF0ZV90ZXh0ID0gZWluYV9zdHJpbmdzaGFyZV9hZGQocmVzdWx0LmFsdERpc3Bs
YXlTdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKICAgICBpZiAocmVzdWx0LmlubmVyTm9uU2hhcmVk
Tm9kZSgpICYmIHJlc3VsdC5pbm5lck5vblNoYXJlZE5vZGUoKS0+ZG9jdW1lbnQoKQogICAgICAg
ICAmJiByZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCktPmRvY3VtZW50KCktPmZyYW1lKCkpCi0g
ICAgICAgIGhpdF90ZXN0LT5mcmFtZSA9IEVXS1ByaXZhdGU6OmtpdEZyYW1lKHJlc3VsdC5pbm5l
ck5vblNoYXJlZE5vZGUoKS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSk7CisgICAgICAgIGhpdFRlc3Qt
PmZyYW1lID0gRVdLUHJpdmF0ZTo6a2l0RnJhbWUocmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgp
LT5kb2N1bWVudCgpLT5mcmFtZSgpKTsKIAotICAgIGhpdF90ZXN0LT5saW5rLnRleHQgPSBlaW5h
X3N0cmluZ3NoYXJlX2FkZChyZXN1bHQudGV4dENvbnRlbnQoKS51dGY4KCkuZGF0YSgpKTsKLSAg
ICBoaXRfdGVzdC0+bGluay51cmwgPSBlaW5hX3N0cmluZ3NoYXJlX2FkZChyZXN1bHQuYWJzb2x1
dGVMaW5rVVJMKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgaGl0X3Rlc3QtPmxpbmsu
dGl0bGUgPSBlaW5hX3N0cmluZ3NoYXJlX2FkZChyZXN1bHQudGl0bGVEaXNwbGF5U3RyaW5nKCku
dXRmOCgpLmRhdGEoKSk7Ci0gICAgaGl0X3Rlc3QtPmxpbmsudGFyZ2V0X2ZyYW1lID0gRVdLUHJp
dmF0ZTo6a2l0RnJhbWUocmVzdWx0LnRhcmdldEZyYW1lKCkpOworICAgIGhpdFRlc3QtPmxpbmsu
dGV4dCA9IGVpbmFfc3RyaW5nc2hhcmVfYWRkKHJlc3VsdC50ZXh0Q29udGVudCgpLnV0ZjgoKS5k
YXRhKCkpOworICAgIGhpdFRlc3QtPmxpbmsudXJsID0gZWluYV9zdHJpbmdzaGFyZV9hZGQocmVz
dWx0LmFic29sdXRlTGlua1VSTCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgIGhpdFRl
c3QtPmxpbmsudGl0bGUgPSBlaW5hX3N0cmluZ3NoYXJlX2FkZChyZXN1bHQudGl0bGVEaXNwbGF5
U3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgaGl0VGVzdC0+bGluay50YXJnZXRfZnJhbWUg
PSBFV0tQcml2YXRlOjpraXRGcmFtZShyZXN1bHQudGFyZ2V0RnJhbWUoKSk7CiAKLSAgICBoaXRf
dGVzdC0+aW1hZ2VfdXJpID0gZWluYV9zdHJpbmdzaGFyZV9hZGQocmVzdWx0LmFic29sdXRlSW1h
Z2VVUkwoKS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLSAgICBoaXRfdGVzdC0+bWVkaWFfdXJp
ID0gZWluYV9zdHJpbmdzaGFyZV9hZGQocmVzdWx0LmFic29sdXRlTWVkaWFVUkwoKS5zdHJpbmco
KS51dGY4KCkuZGF0YSgpKTsKKyAgICBoaXRUZXN0LT5pbWFnZV91cmkgPSBlaW5hX3N0cmluZ3No
YXJlX2FkZChyZXN1bHQuYWJzb2x1dGVJbWFnZVVSTCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkp
OworICAgIGhpdFRlc3QtPm1lZGlhX3VyaSA9IGVpbmFfc3RyaW5nc2hhcmVfYWRkKHJlc3VsdC5h
YnNvbHV0ZU1lZGlhVVJMKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CiAKICAgICBpbnQgY29u
dGV4dCA9IEVXS19ISVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9ET0NVTUVOVDsKIApAQCAtNzA4LDI4
ICs3MDgsMjggQEAgRXdrX0hpdF9UZXN0KiBld2tfZnJhbWVfaGl0X3Rlc3RfbmV3KGNvbnN0IEV2
YXNfT2JqZWN0KiBld2tGcmFtZSwgaW50IHgsIGludCB5KQogICAgIGlmIChyZXN1bHQuaXNDb250
ZW50RWRpdGFibGUoKSkKICAgICAgICAgY29udGV4dCB8PSBFV0tfSElUX1RFU1RfUkVTVUxUX0NP
TlRFWFRfRURJVEFCTEU7CiAKLSAgICBoaXRfdGVzdC0+Y29udGV4dCA9IHN0YXRpY19jYXN0PEV3
a19IaXRfVGVzdF9SZXN1bHRfQ29udGV4dD4oY29udGV4dCk7CisgICAgaGl0VGVzdC0+Y29udGV4
dCA9IHN0YXRpY19jYXN0PEV3a19IaXRfVGVzdF9SZXN1bHRfQ29udGV4dD4oY29udGV4dCk7CiAK
LSAgICByZXR1cm4gaGl0X3Rlc3Q7CisgICAgcmV0dXJuIGhpdFRlc3Q7CiB9CiAKIEVpbmFfQm9v
bAogZXdrX2ZyYW1lX3Njcm9sbF9hZGQoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBpbnQgZGVsdGFY
LCBpbnQgZGVsdGFZKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1l
LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNk
LT5mcmFtZSwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFM
KHNkLT5mcmFtZS0+dmlldygpLCBFSU5BX0ZBTFNFKTsKLSAgICBzZC0+ZnJhbWUtPnZpZXcoKS0+
c2Nyb2xsQnkoV2ViQ29yZTo6SW50U2l6ZShkZWx0YVgsIGRlbHRhWSkpOworICAgIEVXS19GUkFN
RV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmZyYW1lLCBFSU5BX0ZB
TFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5mcmFt
ZS0+dmlldygpLCBFSU5BX0ZBTFNFKTsKKyAgICBzbWFydERhdGEtPmZyYW1lLT52aWV3KCktPnNj
cm9sbEJ5KFdlYkNvcmU6OkludFNpemUoZGVsdGFYLCBkZWx0YVkpKTsKICAgICByZXR1cm4gRUlO
QV9UUlVFOwogfQogCiBFaW5hX0Jvb2wKIGV3a19mcmFtZV9zY3JvbGxfc2V0KEV2YXNfT2JqZWN0
KiBld2tGcmFtZSwgaW50IHgsIGludCB5KQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVU
VVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk5fVkFMKHNkLT5mcmFtZS0+dmlldygpLCBFSU5BX0ZBTFNFKTsKLSAgICBzZC0+ZnJh
bWUtPnZpZXcoKS0+c2V0U2Nyb2xsUG9zaXRpb24oV2ViQ29yZTo6SW50UG9pbnQoeCwgeSkpOwor
ICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzbWFydERhdGEsIEVJTkFf
RkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmZy
YW1lLCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21h
cnREYXRhLT5mcmFtZS0+dmlldygpLCBFSU5BX0ZBTFNFKTsKKyAgICBzbWFydERhdGEtPmZyYW1l
LT52aWV3KCktPnNldFNjcm9sbFBvc2l0aW9uKFdlYkNvcmU6OkludFBvaW50KHgsIHkpKTsKICAg
ICByZXR1cm4gRUlOQV9UUlVFOwogfQogCkBAIC03NDAsMTAgKzc0MCwxMCBAQCBld2tfZnJhbWVf
c2Nyb2xsX3NpemVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgaW50KiB3aWR0aCwg
aW50KiBoZWlnaHQpCiAgICAgICAgICp3aWR0aCA9IDA7CiAgICAgaWYgKGhlaWdodCkKICAgICAg
ICAgKmhlaWdodCA9IDA7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUs
IHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2Qt
PmZyYW1lLCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwo
c2QtPmZyYW1lLT52aWV3KCksIEVJTkFfRkFMU0UpOwotICAgIFdlYkNvcmU6OkludFBvaW50IHBv
aW50ID0gc2QtPmZyYW1lLT52aWV3KCktPm1heGltdW1TY3JvbGxQb3NpdGlvbigpOworICAgIEVX
S19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzbWFydERhdGEsIEVJTkFfRkFMU0Up
OworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmZyYW1lLCBF
SU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRh
LT5mcmFtZS0+dmlldygpLCBFSU5BX0ZBTFNFKTsKKyAgICBXZWJDb3JlOjpJbnRQb2ludCBwb2lu
dCA9IHNtYXJ0RGF0YS0+ZnJhbWUtPnZpZXcoKS0+bWF4aW11bVNjcm9sbFBvc2l0aW9uKCk7CiAg
ICAgaWYgKHdpZHRoKQogICAgICAgICAqd2lkdGggPSBwb2ludC54KCk7CiAgICAgaWYgKGhlaWdo
dCkKQEAgLTc1OCwxMCArNzU4LDEwIEBAIGV3a19mcmFtZV9zY3JvbGxfcG9zX2dldChjb25zdCBF
dmFzX09iamVjdCogZXdrRnJhbWUsIGludCogeCwgaW50KiB5KQogICAgICAgICAqeCA9IDA7CiAg
ICAgaWYgKHkpCiAgICAgICAgICp5ID0gMDsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVS
Tihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOX1ZBTChzZC0+ZnJhbWUtPnZpZXcoKSwgRUlOQV9GQUxTRSk7Ci0gICAgV2ViQ29yZTo6
SW50UG9pbnQgcG9zID0gc2QtPmZyYW1lLT52aWV3KCktPnNjcm9sbFBvc2l0aW9uKCk7CisgICAg
RVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSwgRUlOQV9GQUxT
RSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUs
IEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERh
dGEtPmZyYW1lLT52aWV3KCksIEVJTkFfRkFMU0UpOworICAgIFdlYkNvcmU6OkludFBvaW50IHBv
cyA9IHNtYXJ0RGF0YS0+ZnJhbWUtPnZpZXcoKS0+c2Nyb2xsUG9zaXRpb24oKTsKICAgICBpZiAo
eCkKICAgICAgICAgKnggPSBwb3MueCgpOwogICAgIGlmICh5KQpAQCAtNzc5LDEwICs3NzksMTAg
QEAgRWluYV9Cb29sIGV3a19mcmFtZV92aXNpYmxlX2NvbnRlbnRfZ2VvbWV0cnlfZ2V0KGNvbnN0
IEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgRWkKICAgICAgICAgKndpZHRoID0gMDsKICAgICBpZiAo
aGVpZ2h0KQogICAgICAgICAqaGVpZ2h0ID0gMDsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JF
VFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOwotICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUtPnZpZXcoKSwgRUlOQV9GQUxTRSk7Ci0gICAgV2ViQ29y
ZTo6SW50UmVjdCByZWN0ID0gc2QtPmZyYW1lLT52aWV3KCktPnZpc2libGVDb250ZW50UmVjdChp
bmNsdWRlU2Nyb2xsYmFycyk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJh
bWUsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUsIEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmZyYW1lLT52aWV3KCksIEVJTkFfRkFMU0UpOwor
ICAgIFdlYkNvcmU6OkludFJlY3QgcmVjdCA9IHNtYXJ0RGF0YS0+ZnJhbWUtPnZpZXcoKS0+dmlz
aWJsZUNvbnRlbnRSZWN0KGluY2x1ZGVTY3JvbGxiYXJzKTsKICAgICBpZiAoeCkKICAgICAgICAg
KnggPSByZWN0LngoKTsKICAgICBpZiAoeSkKQEAgLTc5NiwyNiArNzk2LDI2IEBAIEVpbmFfQm9v
bCBld2tfZnJhbWVfdmlzaWJsZV9jb250ZW50X2dlb21ldHJ5X2dldChjb25zdCBFdmFzX09iamVj
dCogZXdrRnJhbWUsIEVpCiAKIEVpbmFfQm9vbCBld2tfZnJhbWVfcGFpbnRfZnVsbF9nZXQoY29u
c3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVU
VVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk5fVkFMKHNkLT5mcmFtZS0+dmlldygpLCBFSU5BX0ZBTFNFKTsKLSAgICByZXR1cm4g
c2QtPmZyYW1lLT52aWV3KCktPnBhaW50c0VudGlyZUNvbnRlbnRzKCk7CisgICAgRVdLX0ZSQU1F
X1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUsIEVJTkFfRkFM
U0UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmZyYW1l
LT52aWV3KCksIEVJTkFfRkFMU0UpOworICAgIHJldHVybiBzbWFydERhdGEtPmZyYW1lLT52aWV3
KCktPnBhaW50c0VudGlyZUNvbnRlbnRzKCk7CiB9CiAKIHZvaWQgZXdrX2ZyYW1lX3BhaW50X2Z1
bGxfc2V0KEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgRWluYV9Cb29sIGZsYWcpCiB7Ci0gICAgRVdL
X0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkKTsKLSAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTihzZC0+ZnJhbWUpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJO
KHNkLT5mcmFtZS0+dmlldygpKTsKLSAgICBzZC0+ZnJhbWUtPnZpZXcoKS0+c2V0UGFpbnRzRW50
aXJlQ29udGVudHMoZmxhZyk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJh
bWUsIHNtYXJ0RGF0YSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRh
LT5mcmFtZSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRhLT5mcmFt
ZS0+dmlldygpKTsKKyAgICBzbWFydERhdGEtPmZyYW1lLT52aWV3KCktPnNldFBhaW50c0VudGly
ZUNvbnRlbnRzKGZsYWcpOwogfQogCiBFaW5hX0Jvb2wgZXdrX2ZyYW1lX2ZlZWRfZm9jdXNfaW4o
RXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJO
KGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7Ci0gICAgV2ViQ29yZTo6Rm9jdXNDb250cm9s
bGVyKiBjID0gc2QtPmZyYW1lLT5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigpOwotICAgIGMtPnNl
dEZvY3VzZWRGcmFtZShzZC0+ZnJhbWUpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJO
KGV3a0ZyYW1lLCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKKyAgICBXZWJDb3Jl
OjpGb2N1c0NvbnRyb2xsZXIqIGMgPSBzbWFydERhdGEtPmZyYW1lLT5wYWdlKCktPmZvY3VzQ29u
dHJvbGxlcigpOworICAgIGMtPnNldEZvY3VzZWRGcmFtZShzbWFydERhdGEtPmZyYW1lKTsKICAg
ICByZXR1cm4gRUlOQV9UUlVFOwogfQogCkBAIC04MjgsODcgKzgyOCw4NyBAQCBFaW5hX0Jvb2wg
ZXdrX2ZyYW1lX2ZlZWRfZm9jdXNfb3V0KEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIAogRWluYV9C
b29sIGV3a19mcmFtZV9mZWVkX21vdXNlX3doZWVsKEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgY29u
c3QgRXZhc19FdmVudF9Nb3VzZV9XaGVlbCogd2hlZWxFdmVudCkKIHsKLSAgICBFV0tfRlJBTUVf
U0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOworICAgIEVXS19G
UkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOwor
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmZyYW1lLCBFSU5B
X0ZBTFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwod2hlZWxFdmVudCwg
RUlOQV9GQUxTRSk7CiAKLSAgICBXZWJDb3JlOjpGcmFtZVZpZXcqIHZpZXcgPSBzZC0+ZnJhbWUt
PnZpZXcoKTsKKyAgICBXZWJDb3JlOjpGcmFtZVZpZXcqIHZpZXcgPSBzbWFydERhdGEtPmZyYW1l
LT52aWV3KCk7CiAgICAgREJHKCJld2tGcmFtZT0lcCwgdmlldz0lcCwgZGlyZWN0aW9uPSVkLCB6
PSVkLCBwb3M9JWQsJWQiLAogICAgICAgICBld2tGcmFtZSwgdmlldywgd2hlZWxFdmVudC0+ZGly
ZWN0aW9uLCB3aGVlbEV2ZW50LT56LCB3aGVlbEV2ZW50LT5jYW52YXMueCwgd2hlZWxFdmVudC0+
Y2FudmFzLnkpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh2aWV3LCBFSU5B
X0ZBTFNFKTsKIAogICAgIFdlYkNvcmU6OlBsYXRmb3JtV2hlZWxFdmVudCBldmVudCh3aGVlbEV2
ZW50KTsKLSAgICByZXR1cm4gc2QtPmZyYW1lLT5ldmVudEhhbmRsZXIoKS0+aGFuZGxlV2hlZWxF
dmVudChldmVudCk7CisgICAgcmV0dXJuIHNtYXJ0RGF0YS0+ZnJhbWUtPmV2ZW50SGFuZGxlcigp
LT5oYW5kbGVXaGVlbEV2ZW50KGV2ZW50KTsKIH0KIAogRWluYV9Cb29sIGV3a19mcmFtZV9mZWVk
X21vdXNlX2Rvd24oRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBjb25zdCBFdmFzX0V2ZW50X01vdXNl
X0Rvd24qIGRvd25FdmVudCkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tG
cmFtZSwgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZB
TChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJO
KGV3a0ZyYW1lLCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoZG93bkV2ZW50LCBFSU5BX0ZBTFNFKTsKIAotICAgIFdl
YkNvcmU6OkZyYW1lVmlldyogdmlldyA9IHNkLT5mcmFtZS0+dmlldygpOworICAgIFdlYkNvcmU6
OkZyYW1lVmlldyogdmlldyA9IHNtYXJ0RGF0YS0+ZnJhbWUtPnZpZXcoKTsKICAgICBEQkcoImV3
a0ZyYW1lPSVwLCB2aWV3PSVwLCBidXR0b249JWQsIHBvcz0lZCwlZCIsCiAgICAgICAgIGV3a0Zy
YW1lLCB2aWV3LCBkb3duRXZlbnQtPmJ1dHRvbiwgZG93bkV2ZW50LT5jYW52YXMueCwgZG93bkV2
ZW50LT5jYW52YXMueSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHZpZXcs
IEVJTkFfRkFMU0UpOwogCiAgICAgRXZhc19Db29yZCB4LCB5OwotICAgIGV2YXNfb2JqZWN0X2dl
b21ldHJ5X2dldChzZC0+dmlldywgJngsICZ5LCAwLCAwKTsKKyAgICBldmFzX29iamVjdF9nZW9t
ZXRyeV9nZXQoc21hcnREYXRhLT52aWV3LCAmeCwgJnksIDAsIDApOwogCiAgICAgV2ViQ29yZTo6
UGxhdGZvcm1Nb3VzZUV2ZW50IGV2ZW50KGRvd25FdmVudCwgV2ViQ29yZTo6SW50UG9pbnQoeCwg
eSkpOwotICAgIHJldHVybiBzZC0+ZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5oYW5kbGVNb3VzZVBy
ZXNzRXZlbnQoZXZlbnQpOworICAgIHJldHVybiBzbWFydERhdGEtPmZyYW1lLT5ldmVudEhhbmRs
ZXIoKS0+aGFuZGxlTW91c2VQcmVzc0V2ZW50KGV2ZW50KTsKIH0KIAogRWluYV9Cb29sIGV3a19m
cmFtZV9mZWVkX21vdXNlX3VwKEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgY29uc3QgRXZhc19FdmVu
dF9Nb3VzZV9VcCogdXBFdmVudCkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihl
d2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJO
X1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVU
VVJOKGV3a0ZyYW1lLCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodXBFdmVudCwgRUlOQV9GQUxTRSk7CiAKLSAgICBX
ZWJDb3JlOjpGcmFtZVZpZXcqIHZpZXcgPSBzZC0+ZnJhbWUtPnZpZXcoKTsKKyAgICBXZWJDb3Jl
OjpGcmFtZVZpZXcqIHZpZXcgPSBzbWFydERhdGEtPmZyYW1lLT52aWV3KCk7CiAgICAgREJHKCJl
d2tGcmFtZT0lcCwgdmlldz0lcCwgYnV0dG9uPSVkLCBwb3M9JWQsJWQiLAogICAgICAgICBld2tG
cmFtZSwgdmlldywgdXBFdmVudC0+YnV0dG9uLCB1cEV2ZW50LT5jYW52YXMueCwgdXBFdmVudC0+
Y2FudmFzLnkpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh2aWV3LCBFSU5B
X0ZBTFNFKTsKIAogICAgIEV2YXNfQ29vcmQgeCwgeTsKLSAgICBldmFzX29iamVjdF9nZW9tZXRy
eV9nZXQoc2QtPnZpZXcsICZ4LCAmeSwgMCwgMCk7CisgICAgZXZhc19vYmplY3RfZ2VvbWV0cnlf
Z2V0KHNtYXJ0RGF0YS0+dmlldywgJngsICZ5LCAwLCAwKTsKIAogICAgIFdlYkNvcmU6OlBsYXRm
b3JtTW91c2VFdmVudCBldmVudCh1cEV2ZW50LCBXZWJDb3JlOjpJbnRQb2ludCh4LCB5KSk7Ci0g
ICAgcmV0dXJuIHNkLT5mcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmhhbmRsZU1vdXNlUmVsZWFzZUV2
ZW50KGV2ZW50KTsKKyAgICByZXR1cm4gc21hcnREYXRhLT5mcmFtZS0+ZXZlbnRIYW5kbGVyKCkt
PmhhbmRsZU1vdXNlUmVsZWFzZUV2ZW50KGV2ZW50KTsKIH0KIAogRWluYV9Cb29sIGV3a19mcmFt
ZV9mZWVkX21vdXNlX21vdmUoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBjb25zdCBFdmFzX0V2ZW50
X01vdXNlX01vdmUqIG1vdmVFdmVudCkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVS
Tihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1Jf
UkVUVVJOKGV3a0ZyYW1lLCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKICAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwobW92ZUV2ZW50LCBFSU5BX0ZBTFNFKTsKIAot
ICAgIFdlYkNvcmU6OkZyYW1lVmlldyogdmlldyA9IHNkLT5mcmFtZS0+dmlldygpOworICAgIFdl
YkNvcmU6OkZyYW1lVmlldyogdmlldyA9IHNtYXJ0RGF0YS0+ZnJhbWUtPnZpZXcoKTsKICAgICBE
QkcoImV3a0ZyYW1lPSVwLCB2aWV3PSVwLCBwb3M6IG9sZD0lZCwlZCwgbmV3PSVkLCVkLCBidXR0
b25zPSVkIiwKICAgICAgICAgZXdrRnJhbWUsIHZpZXcsIG1vdmVFdmVudC0+Y3VyLmNhbnZhcy54
LCBtb3ZlRXZlbnQtPmN1ci5jYW52YXMueSwKICAgICAgICAgbW92ZUV2ZW50LT5wcmV2LmNhbnZh
cy54LCBtb3ZlRXZlbnQtPnByZXYuY2FudmFzLnksIG1vdmVFdmVudC0+YnV0dG9ucyk7CiAgICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHZpZXcsIEVJTkFfRkFMU0UpOwogCiAgICAg
RXZhc19Db29yZCB4LCB5OwotICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldChzZC0+dmlldywg
JngsICZ5LCAwLCAwKTsKKyAgICBldmFzX29iamVjdF9nZW9tZXRyeV9nZXQoc21hcnREYXRhLT52
aWV3LCAmeCwgJnksIDAsIDApOwogCiAgICAgV2ViQ29yZTo6UGxhdGZvcm1Nb3VzZUV2ZW50IGV2
ZW50KG1vdmVFdmVudCwgV2ViQ29yZTo6SW50UG9pbnQoeCwgeSkpOwotICAgIHJldHVybiBzZC0+
ZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5tb3VzZU1vdmVkKGV2ZW50KTsKKyAgICByZXR1cm4gc21h
cnREYXRhLT5mcmFtZS0+ZXZlbnRIYW5kbGVyKCktPm1vdXNlTW92ZWQoZXZlbnQpOwogfQogCiBF
aW5hX0Jvb2wgZXdrX2ZyYW1lX2ZlZWRfdG91Y2hfZXZlbnQoRXZhc19PYmplY3QqIGV3a0ZyYW1l
LCBFd2tfVG91Y2hfRXZlbnRfVHlwZSBhY3Rpb24sIEVpbmFfTGlzdCogcG9pbnRzLCBpbnQgbWV0
YVN0YXRlKQogewotICAgIEVpbmFfQm9vbCByZXQgPSBFSU5BX0ZBTFNFOworICAgIEVpbmFfQm9v
bCByZXN1bHQgPSBFSU5BX0ZBTFNFOwogCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKICAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwocG9pbnRzLCBFSU5BX0ZBTFNFKTsKLSAgICBF
V0tfRlJBTUVfU0RfR0VUKGV3a0ZyYW1lLCBzZCk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVChld2tG
cmFtZSwgc21hcnREYXRhKTsKIAotICAgIGlmICghc2QgfHwgIXNkLT5mcmFtZSB8fCAhZXdrX3Zp
ZXdfbmVlZF90b3VjaF9ldmVudHNfZ2V0KHNkLT52aWV3KSkKKyAgICBpZiAoIXNtYXJ0RGF0YSB8
fCAhc21hcnREYXRhLT5mcmFtZSB8fCAhZXdrX3ZpZXdfbmVlZF90b3VjaF9ldmVudHNfZ2V0KHNt
YXJ0RGF0YS0+dmlldykpCiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwogCiAgICAgRXZhc19D
b29yZCB4LCB5OwotICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldChzZC0+dmlldywgJngsICZ5
LCAwLCAwKTsKKyAgICBldmFzX29iamVjdF9nZW9tZXRyeV9nZXQoc21hcnREYXRhLT52aWV3LCAm
eCwgJnksIDAsIDApOwogCiAgICAgV2ViQ29yZTo6VG91Y2hFdmVudFR5cGUgdHlwZSA9IFdlYkNv
cmU6OlRvdWNoU3RhcnQ7CiAgICAgc3dpdGNoIChhY3Rpb24pIHsKQEAgLTkyOCwxMCArOTI4LDEw
IEBAIEVpbmFfQm9vbCBld2tfZnJhbWVfZmVlZF90b3VjaF9ldmVudChFdmFzX09iamVjdCogZXdr
RnJhbWUsIEV3a19Ub3VjaF9FdmVudF9UeXBlCiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwog
ICAgIH0KIAotICAgIFdlYkNvcmU6OlBsYXRmb3JtVG91Y2hFdmVudCB0ZShwb2ludHMsIFdlYkNv
cmU6OkludFBvaW50KHgsIHkpLCB0eXBlLCBtZXRhU3RhdGUpOwotICAgIHJldCA9IHNkLT5mcmFt
ZS0+ZXZlbnRIYW5kbGVyKCktPmhhbmRsZVRvdWNoRXZlbnQodGUpOworICAgIFdlYkNvcmU6OlBs
YXRmb3JtVG91Y2hFdmVudCB0b3VjaEV2ZW50KHBvaW50cywgV2ViQ29yZTo6SW50UG9pbnQoeCwg
eSksIHR5cGUsIG1ldGFTdGF0ZSk7CisgICAgcmVzdWx0ID0gc21hcnREYXRhLT5mcmFtZS0+ZXZl
bnRIYW5kbGVyKCktPmhhbmRsZVRvdWNoRXZlbnQodG91Y2hFdmVudCk7CiAjZW5kaWYKLSAgICBy
ZXR1cm4gcmV0OworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIHN0YXRpYyBpbmxpbmUgRWluYV9C
b29sIF9ld2tfZnJhbWVfaGFuZGxlX2tleV9zY3JvbGxpbmcoV2ViQ29yZTo6RnJhbWUqIGZyYW1l
LCBjb25zdCBXZWJDb3JlOjpQbGF0Zm9ybUtleWJvYXJkRXZlbnQmIGtleUV2ZW50KQpAQCAtMTAw
MCwzOSArMTAwMCwzOSBAQCBzdGF0aWMgaW5saW5lIEVpbmFfQm9vbCBfZXdrX2ZyYW1lX2hhbmRs
ZV9rZXlfc2Nyb2xsaW5nKFdlYkNvcmU6OkZyYW1lKiBmcmFtZSwgYwogCiBFaW5hX0Jvb2wgZXdr
X2ZyYW1lX2ZlZWRfa2V5X2Rvd24oRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBjb25zdCBFdmFzX0V2
ZW50X0tleV9Eb3duKiBkb3duRXZlbnQpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRV
Uk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09S
X1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5mcmFtZSwgRUlOQV9GQUxTRSk7CiAgICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGRvd25FdmVudCwgRUlOQV9GQUxTRSk7CiAK
ICAgICBEQkcoImV3a0ZyYW1lPSVwIGtleW5hbWU9JXMgKGtleT0lcywgc3RyaW5nPSVzKSIsCiAg
ICAgICAgIGV3a0ZyYW1lLCBkb3duRXZlbnQtPmtleW5hbWUsIGRvd25FdmVudC0+a2V5ID8gZG93
bkV2ZW50LT5rZXkgOiAiIiwgZG93bkV2ZW50LT5zdHJpbmcgPyBkb3duRXZlbnQtPnN0cmluZyA6
ICIiKTsKIAogICAgIFdlYkNvcmU6OlBsYXRmb3JtS2V5Ym9hcmRFdmVudCBldmVudChkb3duRXZl
bnQpOwotICAgIGlmIChzZC0+ZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5rZXlFdmVudChldmVudCkp
CisgICAgaWYgKHNtYXJ0RGF0YS0+ZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5rZXlFdmVudChldmVu
dCkpCiAgICAgICAgIHJldHVybiBFSU5BX1RSVUU7CiAKLSAgICByZXR1cm4gX2V3a19mcmFtZV9o
YW5kbGVfa2V5X3Njcm9sbGluZyhzZC0+ZnJhbWUsIGV2ZW50KTsKKyAgICByZXR1cm4gX2V3a19m
cmFtZV9oYW5kbGVfa2V5X3Njcm9sbGluZyhzbWFydERhdGEtPmZyYW1lLCBldmVudCk7CiB9CiAK
IEVpbmFfQm9vbCBld2tfZnJhbWVfZmVlZF9rZXlfdXAoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBj
b25zdCBFdmFzX0V2ZW50X0tleV9VcCogdXBFdmVudCkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VU
X09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOworICAgIEVXS19GUkFNRV9T
RF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmZyYW1lLCBFSU5BX0ZBTFNF
KTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodXBFdmVudCwgRUlOQV9GQUxT
RSk7CiAKICAgICBEQkcoImV3a0ZyYW1lPSVwIGtleW5hbWU9JXMgKGtleT0lcywgc3RyaW5nPSVz
KSIsCiAgICAgICAgIGV3a0ZyYW1lLCB1cEV2ZW50LT5rZXluYW1lLCB1cEV2ZW50LT5rZXkgPyB1
cEV2ZW50LT5rZXkgOiAiIiwgdXBFdmVudC0+c3RyaW5nID8gdXBFdmVudC0+c3RyaW5nIDogIiIp
OwogCiAgICAgV2ViQ29yZTo6UGxhdGZvcm1LZXlib2FyZEV2ZW50IGV2ZW50KHVwRXZlbnQpOwot
ICAgIHJldHVybiBzZC0+ZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5rZXlFdmVudChldmVudCk7Cisg
ICAgcmV0dXJuIHNtYXJ0RGF0YS0+ZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5rZXlFdmVudChldmVu
dCk7CiB9CiAKIEV3a19UZXh0X1NlbGVjdGlvbl9UeXBlIGV3a19mcmFtZV90ZXh0X3NlbGVjdGlv
bl90eXBlX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrRnJhbWUpCiB7Ci0gICAgRVdLX0ZSQU1F
X1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFV0tfVEVYVF9TRUxFQ1RJT05fTk9ORSk7
Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgRVdLX1RFWFRf
U0VMRUNUSU9OX05PTkUpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1l
LCBzbWFydERhdGEsIEVXS19URVhUX1NFTEVDVElPTl9OT05FKTsKKyAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5mcmFtZSwgRVdLX1RFWFRfU0VMRUNUSU9OX05P
TkUpOwogCi0gICAgV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb24qIGNvbnRyb2xsZXIgPSBzZC0+ZnJh
bWUtPnNlbGVjdGlvbigpOworICAgIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uKiBjb250cm9sbGVy
ID0gc21hcnREYXRhLT5mcmFtZS0+c2VsZWN0aW9uKCk7CiAgICAgaWYgKCFjb250cm9sbGVyKQog
ICAgICAgICByZXR1cm4gRVdLX1RFWFRfU0VMRUNUSU9OX05PTkU7CiAKQEAgLTEwNzUsMTggKzEw
NzUsMTggQEAgRXZhc19PYmplY3QqIGV3a19mcmFtZV9hZGQoRXZhcyogY2FudmFzKQogICovCiBF
aW5hX0Jvb2wgZXdrX2ZyYW1lX2luaXQoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBFdmFzX09iamVj
dCogdmlldywgV2ViQ29yZTo6RnJhbWUqIGZyYW1lKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRf
T1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgaWYgKCFzZC0+ZnJhbWUp
IHsKLSAgICAgICAgV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRFZmwqIGZsYyA9IF9ld2tfZnJh
bWVfbG9hZGVyX2VmbF9nZXQoZnJhbWUpOwotICAgICAgICBmbGMtPnNldFdlYkZyYW1lKGV3a0Zy
YW1lKTsKLSAgICAgICAgc2QtPmZyYW1lID0gZnJhbWU7Ci0gICAgICAgIHNkLT52aWV3ID0gdmll
dzsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRhLCBF
SU5BX0ZBTFNFKTsKKyAgICBpZiAoIXNtYXJ0RGF0YS0+ZnJhbWUpIHsKKyAgICAgICAgV2ViQ29y
ZTo6RnJhbWVMb2FkZXJDbGllbnRFZmwqIGZyYW1lTG9hZGVyQ2xpZW50ID0gX2V3a19mcmFtZV9s
b2FkZXJfZWZsX2dldChmcmFtZSk7CisgICAgICAgIGZyYW1lTG9hZGVyQ2xpZW50LT5zZXRXZWJG
cmFtZShld2tGcmFtZSk7CisgICAgICAgIHNtYXJ0RGF0YS0+ZnJhbWUgPSBmcmFtZTsKKyAgICAg
ICAgc21hcnREYXRhLT52aWV3ID0gdmlldzsKICAgICAgICAgZnJhbWUtPmluaXQoKTsKICAgICAg
ICAgcmV0dXJuIEVJTkFfVFJVRTsKICAgICB9CiAKICAgICBFUlIoImZyYW1lICVwIGFscmVhZHkg
c2V0IGZvciAlcCwgaWdub3JlZCBuZXcgJXAiLAotICAgICAgICBzZC0+ZnJhbWUsIGV3a0ZyYW1l
LCBmcmFtZSk7CisgICAgICAgIHNtYXJ0RGF0YS0+ZnJhbWUsIGV3a0ZyYW1lLCBmcmFtZSk7CiAg
ICAgcmV0dXJuIEVJTkFfRkFMU0U7CiB9CiAKQEAgLTEwOTcsNDQgKzEwOTcsNDQgQEAgRWluYV9C
b29sIGV3a19mcmFtZV9pbml0KEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgRXZhc19PYmplY3QqIHZp
ZXcsIFdlYkNvcmU6OkZyYW0KICAqLwogRWluYV9Cb29sIGV3a19mcmFtZV9jaGlsZF9hZGQoRXZh
c19PYmplY3QqIGV3a0ZyYW1lLCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6RnJhbWU+IGNoaWxk
LCBjb25zdCBXVEY6OlN0cmluZyYgbmFtZSwgY29uc3QgV2ViQ29yZTo6S1VSTCYgdXJsLCBjb25z
dCBXVEY6OlN0cmluZyYgcmVmZXJyZXIpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRV
Uk4oZXdrRnJhbWUsIHNkLCAwKTsKLSAgICBjaGFyIGJ1ZlsyNTZdOworICAgIEVXS19GUkFNRV9T
RF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzbWFydERhdGEsIDApOworICAgIGNoYXIgYnVmZmVy
WzI1Nl07CiAgICAgRXZhc19PYmplY3QqIGZyYW1lOwotICAgIFdlYkNvcmU6OkZyYW1lKiBjZjsK
KyAgICBXZWJDb3JlOjpGcmFtZSogY29yZUZyYW1lOwogCi0gICAgZnJhbWUgPSBld2tfZnJhbWVf
YWRkKHNkLT5iYXNlLmV2YXMpOworICAgIGZyYW1lID0gZXdrX2ZyYW1lX2FkZChzbWFydERhdGEt
PmJhc2UuZXZhcyk7CiAgICAgaWYgKCFmcmFtZSkgewogICAgICAgICBFUlIoIkNvdWxkIG5vdCBj
cmVhdGUgZXdrX2ZyYW1lIG9iamVjdC4iKTsKICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CiAg
ICAgfQogCi0gICAgY2YgPSBjaGlsZC5nZXQoKTsKLSAgICBpZiAoY2YtPnRyZWUoKSkKLSAgICAg
ICAgY2YtPnRyZWUoKS0+c2V0TmFtZShuYW1lKTsKKyAgICBjb3JlRnJhbWUgPSBjaGlsZC5nZXQo
KTsKKyAgICBpZiAoY29yZUZyYW1lLT50cmVlKCkpCisgICAgICAgIGNvcmVGcmFtZS0+dHJlZSgp
LT5zZXROYW1lKG5hbWUpOwogICAgIGVsc2UKICAgICAgICAgRVJSKCJubyB0cmVlIGZvciBjaGls
ZCBvYmplY3QiKTsKLSAgICBzZC0+ZnJhbWUtPnRyZWUoKS0+YXBwZW5kQ2hpbGQoY2hpbGQpOwor
ICAgIHNtYXJ0RGF0YS0+ZnJhbWUtPnRyZWUoKS0+YXBwZW5kQ2hpbGQoY2hpbGQpOwogCi0gICAg
aWYgKCFld2tfZnJhbWVfaW5pdChmcmFtZSwgc2QtPnZpZXcsIGNmKSkgeworICAgIGlmICghZXdr
X2ZyYW1lX2luaXQoZnJhbWUsIHNtYXJ0RGF0YS0+dmlldywgY29yZUZyYW1lKSkgewogICAgICAg
ICBldmFzX29iamVjdF9kZWwoZnJhbWUpOwogICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKICAg
ICB9Ci0gICAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIkVXS19GcmFtZTpjaGlsZC8lcyIs
IG5hbWUudXRmOCgpLmRhdGEoKSk7Ci0gICAgZXZhc19vYmplY3RfbmFtZV9zZXQoZnJhbWUsIGJ1
Zik7CisgICAgc25wcmludGYoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgIkVXS19GcmFtZTpjaGls
ZC8lcyIsIG5hbWUudXRmOCgpLmRhdGEoKSk7CisgICAgZXZhc19vYmplY3RfbmFtZV9zZXQoZnJh
bWUsIGJ1ZmZlcik7CiAgICAgZXZhc19vYmplY3Rfc21hcnRfbWVtYmVyX2FkZChmcmFtZSwgZXdr
RnJhbWUpOwogICAgIGV2YXNfb2JqZWN0X3Nob3coZnJhbWUpOwogCiAgICAgLy8gVGhlIGNyZWF0
aW9uIG9mIHRoZSBmcmFtZSBtYXkgaGF2ZSBydW4gYXJiaXRyYXJ5IEphdmFTY3JpcHQgdGhhdCBy
ZW1vdmVkIGl0IGZyb20gdGhlIHBhZ2UgYWxyZWFkeS4KLSAgICBpZiAoIWNmLT5wYWdlKCkpIHsK
KyAgICBpZiAoIWNvcmVGcmFtZS0+cGFnZSgpKSB7CiAgICAgICAgIGV2YXNfb2JqZWN0X2RlbChm
cmFtZSk7CiAgICAgICAgIHJldHVybiBFSU5BX1RSVUU7CiAgICAgfQogCi0gICAgc2QtPmZyYW1l
LT5sb2FkZXIoKS0+bG9hZFVSTEludG9DaGlsZEZyYW1lKHVybCwgcmVmZXJyZXIsIGNmKTsKKyAg
ICBzbWFydERhdGEtPmZyYW1lLT5sb2FkZXIoKS0+bG9hZFVSTEludG9DaGlsZEZyYW1lKHVybCwg
cmVmZXJyZXIsIGNvcmVGcmFtZSk7CiAKICAgICAvLyBUaGUgZnJhbWUncyBvbmxvYWQgaGFuZGxl
ciBtYXkgaGF2ZSByZW1vdmVkIGl0IGZyb20gdGhlIGRvY3VtZW50LgogICAgIC8vIFNlZSBmYXN0
L2RvbS9udWxsLXBhZ2Utc2hvdy1tb2RhbC1kaWFsb2ctY3Jhc2guaHRtbCBmb3IgYW4gZXhhbXBs
ZS4KLSAgICBpZiAoIWNmLT50cmVlKCktPnBhcmVudCgpKSB7CisgICAgaWYgKCFjb3JlRnJhbWUt
PnRyZWUoKS0+cGFyZW50KCkpIHsKICAgICAgICAgZXZhc19vYmplY3RfZGVsKGZyYW1lKTsKICAg
ICAgICAgcmV0dXJuIEVJTkFfVFJVRTsKICAgICB9CkBAIC0xMTQ3LDE3ICsxMTQ3LDE3IEBAIEVp
bmFfQm9vbCBld2tfZnJhbWVfY2hpbGRfYWRkKEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgV1RGOjpQ
YXNzUmVmUHRyPFdlYkNvcmU6OkZyCiAgKiBAaW50ZXJuYWwKICAqIENoYW5nZSB0aGUgZXdrIHZp
ZXcgdGhpcyBmcmFtZSBpcyBhc3NvY2lhdGVkIHdpdGguCiAgKgotICogQHBhcmFtIG8gVGhlIGV3
ayBmcmFtZSB0byBhY3QgdXBvbi4KKyAqIEBwYXJhbSBld2tGcmFtZSBUaGUgZXdrIGZyYW1lIHRv
IGFjdCB1cG9uLgogICogQHBhcmFtIG5ld1BhcmVudCBUaGUgbmV3IHZpZXcgdGhhdCB3aWxsIGJl
IHNldCBhcyB0aGUgcGFyZW50IG9mIHRoZSBmcmFtZS4KICAqLwogdm9pZCBld2tfZnJhbWVfdmll
d19zZXQoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBFdmFzX09iamVjdCogbmV3UGFyZW50KQogewot
ICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCk7CisgICAgRVdLX0ZS
QU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSk7CiAKICAgICBldmFzX29i
amVjdF9zbWFydF9tZW1iZXJfZGVsKGV3a0ZyYW1lKTsKICAgICBldmFzX29iamVjdF9zbWFydF9t
ZW1iZXJfYWRkKGV3a0ZyYW1lLCBuZXdQYXJlbnQpOwogCi0gICAgc2QtPnZpZXcgPSBuZXdQYXJl
bnQ7CisgICAgc21hcnREYXRhLT52aWV3ID0gbmV3UGFyZW50OwogfQogCiAvKioKQEAgLTExNjcs
OCArMTE2Nyw4IEBAIHZvaWQgZXdrX2ZyYW1lX3ZpZXdfc2V0KEV2YXNfT2JqZWN0KiBld2tGcmFt
ZSwgRXZhc19PYmplY3QqIG5ld1BhcmVudCkKIHZvaWQgZXdrX2ZyYW1lX2NvcmVfZ29uZShFdmFz
X09iamVjdCogZXdrRnJhbWUpCiB7CiAgICAgREJHKCJld2tGcmFtZT0lcCIsIGV3a0ZyYW1lKTsK
LSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QpOwotICAgIHNkLT5m
cmFtZSA9IDA7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNtYXJ0
RGF0YSk7CisgICAgc21hcnREYXRhLT5mcmFtZSA9IDA7CiB9CiAKIC8qKgpAQCAtMTE3Niw3ICsx
MTc2LDcgQEAgdm9pZCBld2tfZnJhbWVfY29yZV9nb25lKEV2YXNfT2JqZWN0KiBld2tGcmFtZSkK
ICAqIFJlcG9ydHMgYSByZXNvdXJjZSB3aWxsIGJlIHJlcXVlc3RlZC4gVXNlciBtYXkgb3ZlcnJp
ZGUgYmVoYXZpb3Igb2Ygd2Via2l0IGJ5CiAgKiBjaGFuZ2luZyB2YWx1ZXMgaW4gQHBhcmFtIHJl
cXVlc3QuCiAgKgotICogQHBhcmFtIG8gRnJhbWUuCisgKiBAcGFyYW0gZXdrRnJhbWUgRnJhbWUu
CiAgKiBAcGFyYW0gcmVxdWVzdCBSZXF1ZXN0IGRldGFpbHMgdGhhdCB1c2VyIG1heSBvdmVycmlk
ZS4gV2hlbmV2ZXIgdmFsdWVzIG9uCiAgKiB0aGlzIHN0cnVjdCBjaGFuZ2VzLCBpdCBtdXN0IGJl
IHByb3Blcmx5IG1hbGxvYydkIGFzIGl0IHdpbGwgYmUgZnJlZWQKICAqIGFmdGVyd2FyZHMuCkBA
IC0xMTkyLDcgKzExOTIsNyBAQCB2b2lkIGV3a19mcmFtZV9yZXF1ZXN0X3dpbGxfc2VuZChFdmFz
X09iamVjdCogZXdrRnJhbWUsIEV3a19GcmFtZV9SZXNvdXJjZV9SZXF1ZQogICogQGludGVybmFs
CiAgKiBSZXBvcnRzIHRoYXQgdGhlcmUncyBhIG5ldyByZXNvdXJjZS4KICAqCi0gKiBAcGFyYW0g
byBGcmFtZS4KKyAqIEBwYXJhbSBld2tGcmFtZSBGcmFtZS4KICAqIEBwYXJhbSByZXF1ZXN0IE5l
dyByZXF1ZXN0IGRldGFpbHMuIE5vIGNoYW5nZXMgYXJlIGFsbG93ZWQgdG8gZmllbGRzLgogICoK
ICAqIEVtaXRzIHNpZ25hbDogInJlc291cmNlLHJlcXVlc3QsbmV3IgpAQCAtMTIwNiw3ICsxMjA2
LDcgQEAgdm9pZCBld2tfZnJhbWVfcmVxdWVzdF9hc3NpZ25faWRlbnRpZmllcihFdmFzX09iamVj
dCogZXdrRnJhbWUsIGNvbnN0IEV3a19GcmFtZV8KICAqIEBpbnRlcm5hbAogICogUmVwb3J0cyB0
aGF0IGZpcnN0IG5hdmlnYXRpb24gb2NjdXJyZWQKICAqCi0gKiBAcGFyYW0gbyBGcmFtZS4KKyAq
IEBwYXJhbSBld2tGcmFtZSBGcmFtZS4KICAqCiAgKiBFbWl0cyBzaWduYWw6ICJuYXZpZ2F0aW9u
LGZpcnN0IgogICovCkBAIC0xMjE5LDcgKzEyMTksNyBAQCB2b2lkIGV3a19mcmFtZV9kaWRfcGVy
Zm9ybV9maXJzdF9uYXZpZ2F0aW9uKEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKICAqIEBpbnRlcm5h
bAogICogUmVwb3J0cyBmcmFtZSB3aWxsIGJlIHNhdmVkIHRvIGN1cnJlbnQgc3RhdGUKICAqCi0g
KiBAcGFyYW0gbyBGcmFtZS4KKyAqIEBwYXJhbSBld2tGcmFtZSBGcmFtZS4KICAqIEBwYXJhbSBp
dGVtIEhpc3RvcnkgaXRlbSB0byBzYXZlIGRldGFpbHMgdG8uCiAgKgogICogRW1pdHMgc2lnbmFs
OiAic3RhdGUsc2F2ZSIKQEAgLTEyMzcsMjIgKzEyMzcsMjIgQEAgdm9pZCBld2tfZnJhbWVfdmll
d19zdGF0ZV9zYXZlKEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgV2ViQ29yZTo6SGlzdG9yeUl0ZW0q
IGl0ZW0KICAqLwogdm9pZCBld2tfZnJhbWVfbG9hZF9zdGFydGVkKEV2YXNfT2JqZWN0KiBld2tG
cmFtZSkKIHsKLSAgICBFdmFzX09iamVjdCogbWFpbl9mcmFtZTsKKyAgICBFdmFzX09iamVjdCog
bWFpbkZyYW1lOwogICAgIERCRygiZXdrRnJhbWU9JXAiLCBld2tGcmFtZSk7CiAgICAgZXZhc19v
YmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChld2tGcmFtZSwgImxvYWQsc3RhcnRlZCIsIDApOwot
ICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCk7Ci0gICAgZXdrX3Zp
ZXdfbG9hZF9zdGFydGVkKHNkLT52aWV3KTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVS
Tihld2tGcmFtZSwgc21hcnREYXRhKTsKKyAgICBld2tfdmlld19sb2FkX3N0YXJ0ZWQoc21hcnRE
YXRhLT52aWV3KTsKIAotICAgIG1haW5fZnJhbWUgPSBld2tfdmlld19mcmFtZV9tYWluX2dldChz
ZC0+dmlldyk7Ci0gICAgaWYgKG1haW5fZnJhbWUgPT0gZXdrRnJhbWUpCi0gICAgICAgIGV3a192
aWV3X2ZyYW1lX21haW5fbG9hZF9zdGFydGVkKHNkLT52aWV3KTsKKyAgICBtYWluRnJhbWUgPSBl
d2tfdmlld19mcmFtZV9tYWluX2dldChzbWFydERhdGEtPnZpZXcpOworICAgIGlmIChtYWluRnJh
bWUgPT0gZXdrRnJhbWUpCisgICAgICAgIGV3a192aWV3X2ZyYW1lX21haW5fbG9hZF9zdGFydGVk
KHNtYXJ0RGF0YS0+dmlldyk7CiB9CiAKIC8qKgogICogQGludGVybmFsCiAgKiBSZXBvcnRzIHRo
ZSBmcmFtZSBzdGFydGVkIHByb3Zpc2lvbmFsIGxvYWQuCiAgKgotICogQHBhcmFtIG8gRnJhbWUu
CisgKiBAcGFyYW0gZXdrRnJhbWUgRnJhbWUuCiAgKgogICogRW1pdHMgc2lnbmFsOiAibG9hZCxw
cm92aXNpb25hbCIgd2l0aCBubyBwYXJhbWV0ZXJzLgogICovCkBAIC0xMjY1LDcgKzEyNjUsNyBA
QCB2b2lkIGV3a19mcmFtZV9sb2FkX3Byb3Zpc2lvbmFsKEV2YXNfT2JqZWN0KiBld2tGcmFtZSkK
ICAqIEBpbnRlcm5hbAogICogUmVwb3J0cyB0aGUgZnJhbWUgZmluaXNoZWQgZmlyc3QgbGF5b3V0
LgogICoKLSAqIEBwYXJhbSBvIEZyYW1lLgorICogQHBhcmFtIGV3a0ZyYW1lIEZyYW1lLgogICoK
ICAqIEVtaXRzIHNpZ25hbDogImxvYWQsZmlyc3RsYXlvdXQsZmluaXNoZWQiIHdpdGggbm8gcGFy
YW1ldGVycy4KICAqLwpAQCAtMTI3OCw3ICsxMjc4LDcgQEAgdm9pZCBld2tfZnJhbWVfbG9hZF9m
aXJzdGxheW91dF9maW5pc2hlZChFdmFzX09iamVjdCogZXdrRnJhbWUpCiAgKiBAaW50ZXJuYWwK
ICAqIFJlcG9ydHMgdGhlIGZyYW1lIGZpbmlzaGVkIGZpcnN0IG5vbiBlbXB0eSBsYXlvdXQuCiAg
KgotICogQHBhcmFtIG8gRnJhbWUuCisgKiBAcGFyYW0gZXdrRnJhbWUgRnJhbWUuCiAgKgogICog
RW1pdHMgc2lnbmFsOiAibG9hZCxub25lbXB0eWxheW91dCxmaW5pc2hlZCIgd2l0aCBubyBwYXJh
bWV0ZXJzLgogICovCkBAIC0xMjkxLDcgKzEyOTEsNyBAQCB2b2lkIGV3a19mcmFtZV9sb2FkX2Zp
cnN0bGF5b3V0X25vbmVtcHR5X2ZpbmlzaGVkKEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKICAqIEBp
bnRlcm5hbAogICogUmVwb3J0cyB0aGUgbG9hZGluZyBvZiBhIGRvY3VtZW50IGhhcyBmaW5pc2hl
ZCBvbiBmcmFtZS4KICAqCi0gKiBAcGFyYW0gbyBGcmFtZS4KKyAqIEBwYXJhbSBld2tGcmFtZSBG
cmFtZS4KICAqCiAgKiBFbWl0cyBzaWduYWw6ICJsb2FkLGRvY3VtZW50LGZpbmlzaGVkIiB3aXRo
IG5vIHBhcmFtZXRlcnMuCiAgKi8KQEAgLTEzMTQsNyArMTMxNCw3IEBAIHZvaWQgZXdrX2ZyYW1l
X2xvYWRfZG9jdW1lbnRfZmluaXNoZWQoRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogICovCiB2b2lk
IGV3a19mcmFtZV9sb2FkX2ZpbmlzaGVkKEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgY29uc3QgY2hh
ciogZXJyb3JEb21haW4sIGludCBlcnJvckNvZGUsIEVpbmFfQm9vbCBpc0NhbmNlbGxhdGlvbiwg
Y29uc3QgY2hhciogZXJyb3JEZXNjcmlwdGlvbiwgY29uc3QgY2hhciogZmFpbGluZ1VybCkKIHsK
LSAgICBFd2tfRnJhbWVfTG9hZF9FcnJvciBidWYsICplcnJvcjsKKyAgICBFd2tfRnJhbWVfTG9h
ZF9FcnJvciBidWZmZXIsICplcnJvcjsKICAgICBpZiAoIWVycm9yRG9tYWluKSB7CiAgICAgICAg
IERCRygiZXdrRnJhbWU9JXAsIHN1Y2Nlc3MuIiwgZXdrRnJhbWUpOwogICAgICAgICBlcnJvciA9
IDA7CkBAIC0xMzIzLDE3ICsxMzIzLDE3IEBAIHZvaWQgZXdrX2ZyYW1lX2xvYWRfZmluaXNoZWQo
RXZhc19PYmplY3QqIGV3a0ZyYW1lLCBjb25zdCBjaGFyKiBlcnJvckRvbWFpbiwgaW50CiAgICAg
ICAgICAgICBld2tGcmFtZSwgZXJyb3JEb21haW4sIGVycm9yQ29kZSwgaXNDYW5jZWxsYXRpb24s
CiAgICAgICAgICAgICBlcnJvckRlc2NyaXB0aW9uLCBmYWlsaW5nVXJsKTsKIAotICAgICAgICBi
dWYuZG9tYWluID0gZXJyb3JEb21haW47Ci0gICAgICAgIGJ1Zi5jb2RlID0gZXJyb3JDb2RlOwot
ICAgICAgICBidWYuaXNfY2FuY2VsbGF0aW9uID0gaXNDYW5jZWxsYXRpb247Ci0gICAgICAgIGJ1
Zi5kZXNjcmlwdGlvbiA9IGVycm9yRGVzY3JpcHRpb247Ci0gICAgICAgIGJ1Zi5mYWlsaW5nX3Vy
bCA9IGZhaWxpbmdVcmw7Ci0gICAgICAgIGJ1Zi5mcmFtZSA9IGV3a0ZyYW1lOwotICAgICAgICBl
cnJvciA9ICZidWY7CisgICAgICAgIGJ1ZmZlci5kb21haW4gPSBlcnJvckRvbWFpbjsKKyAgICAg
ICAgYnVmZmVyLmNvZGUgPSBlcnJvckNvZGU7CisgICAgICAgIGJ1ZmZlci5pc19jYW5jZWxsYXRp
b24gPSBpc0NhbmNlbGxhdGlvbjsKKyAgICAgICAgYnVmZmVyLmRlc2NyaXB0aW9uID0gZXJyb3JE
ZXNjcmlwdGlvbjsKKyAgICAgICAgYnVmZmVyLmZhaWxpbmdfdXJsID0gZmFpbGluZ1VybDsKKyAg
ICAgICAgYnVmZmVyLmZyYW1lID0gZXdrRnJhbWU7CisgICAgICAgIGVycm9yID0gJmJ1ZmZlcjsK
ICAgICB9CiAgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChld2tGcmFtZSwgImxv
YWQsZmluaXNoZWQiLCBlcnJvcik7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdr
RnJhbWUsIHNkKTsKLSAgICBld2tfdmlld19sb2FkX2ZpbmlzaGVkKHNkLT52aWV3LCBlcnJvcik7
CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSk7Cisg
ICAgZXdrX3ZpZXdfbG9hZF9maW5pc2hlZChzbWFydERhdGEtPnZpZXcsIGVycm9yKTsKIH0KIAog
LyoqCkBAIC0xMzcxLDE2ICsxMzcxLDE2IEBAIHZvaWQgZXdrX2ZyYW1lX2xvYWRfZXJyb3IoRXZh
c19PYmplY3QqIGV3a0ZyYW1lLCBjb25zdCBjaGFyKiBlcnJvckRvbWFpbiwgaW50IGVyCiAgKi8K
IHZvaWQgZXdrX2ZyYW1lX2xvYWRfcHJvZ3Jlc3NfY2hhbmdlZChFdmFzX09iamVjdCogZXdrRnJh
bWUpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkKTsKLSAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+ZnJhbWUpOworICAgIEVXS19GUkFNRV9T
RF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzbWFydERhdGEpOworICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+ZnJhbWUpOwogCiAgICAgLy8gVE9ETzogdGhpcyBpcyBw
ZXIgcGFnZSwgdGhlcmUgc2hvdWxkIGJlIGEgd2F5IHRvIGhhdmUgcGVyLWZyYW1lLgotICAgIGRv
dWJsZSBwcm9ncmVzcyA9IHNkLT5mcmFtZS0+cGFnZSgpLT5wcm9ncmVzcygpLT5lc3RpbWF0ZWRQ
cm9ncmVzcygpOworICAgIGRvdWJsZSBwcm9ncmVzcyA9IHNtYXJ0RGF0YS0+ZnJhbWUtPnBhZ2Uo
KS0+cHJvZ3Jlc3MoKS0+ZXN0aW1hdGVkUHJvZ3Jlc3MoKTsKIAogICAgIERCRygiZXdrRnJhbWU9
JXAgKHA9JTAuM2YpIiwgZXdrRnJhbWUsIHByb2dyZXNzKTsKIAogICAgIGV2YXNfb2JqZWN0X3Nt
YXJ0X2NhbGxiYWNrX2NhbGwoZXdrRnJhbWUsICJsb2FkLHByb2dyZXNzIiwgJnByb2dyZXNzKTsK
LSAgICBld2tfdmlld19sb2FkX3Byb2dyZXNzX2NoYW5nZWQoc2QtPnZpZXcpOworICAgIGV3a192
aWV3X2xvYWRfcHJvZ3Jlc3NfY2hhbmdlZChzbWFydERhdGEtPnZpZXcpOwogfQogCiAKQEAgLTE0
MTcsNTEgKzE0MTcsNTEgQEAgdm9pZCBld2tfZnJhbWVfdGl0bGVfc2V0KEV2YXNfT2JqZWN0KiBl
d2tGcmFtZSwgY29uc3QgY2hhciogdGl0bGUpCiB2b2lkIGV3a19mcmFtZV92aWV3X2NyZWF0ZV9m
b3JfdmlldyhFdmFzX09iamVjdCogZXdrRnJhbWUsIEV2YXNfT2JqZWN0KiB2aWV3KQogewogICAg
IERCRygiZXdrRnJhbWU9JXAsIHZpZXc9JXAiLCBld2tGcmFtZSwgdmlldyk7Ci0gICAgRVdLX0ZS
QU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTihzZC0+ZnJhbWUpOwotICAgIEV2YXNfQ29vcmQgdywgaDsKKyAgICBFV0tfRlJB
TUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRhKTsKKyAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmZyYW1lKTsKKyAgICBFdmFzX0Nvb3JkIHdpZHRo
LCBoZWlnaHQ7CiAKLSAgICBldmFzX29iamVjdF9nZW9tZXRyeV9nZXQodmlldywgMCwgMCwgJncs
ICZoKTsKKyAgICBldmFzX29iamVjdF9nZW9tZXRyeV9nZXQodmlldywgMCwgMCwgJndpZHRoLCAm
aGVpZ2h0KTsKIAotICAgIFdlYkNvcmU6OkludFNpemUgc2l6ZSh3LCBoKTsKLSAgICBpbnQgciwg
ZywgYiwgYTsKLSAgICBXZWJDb3JlOjpDb2xvciBiZzsKKyAgICBXZWJDb3JlOjpJbnRTaXplIHNp
emUod2lkdGgsIGhlaWdodCk7CisgICAgaW50IHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhOworICAg
IFdlYkNvcmU6OkNvbG9yIGJhY2tncm91bmQ7CiAKLSAgICBld2tfdmlld19iZ19jb2xvcl9nZXQo
dmlldywgJnIsICZnLCAmYiwgJmEpOwotICAgIGlmICghYSkKLSAgICAgICAgYmcgPSBXZWJDb3Jl
OjpDb2xvcigwLCAwLCAwLCAwKTsKLSAgICBlbHNlIGlmIChhID09IDI1NSkKLSAgICAgICAgYmcg
PSBXZWJDb3JlOjpDb2xvcihyLCBnLCBiLCBhKTsKKyAgICBld2tfdmlld19iZ19jb2xvcl9nZXQo
dmlldywgJnJlZCwgJmdyZWVuLCAmYmx1ZSwgJmFscGhhKTsKKyAgICBpZiAoIWFscGhhKQorICAg
ICAgICBiYWNrZ3JvdW5kID0gV2ViQ29yZTo6Q29sb3IoMCwgMCwgMCwgMCk7CisgICAgZWxzZSBp
ZiAoYWxwaGEgPT0gMjU1KQorICAgICAgICBiYWNrZ3JvdW5kID0gV2ViQ29yZTo6Q29sb3IocmVk
LCBncmVlbiwgYmx1ZSwgYWxwaGEpOwogICAgIGVsc2UKLSAgICAgICAgYmcgPSBXZWJDb3JlOjpD
b2xvcihyICogMjU1IC8gYSwgZyAqIDI1NSAvIGEsIGIgKiAyNTUgLyBhLCBhKTsKKyAgICAgICAg
YmFja2dyb3VuZCA9IFdlYkNvcmU6OkNvbG9yKHJlZCAqIDI1NSAvIGFscGhhLCBncmVlbiAqIDI1
NSAvIGFscGhhLCBibHVlICogMjU1IC8gYWxwaGEsIGFscGhhKTsKIAotICAgIHNkLT5mcmFtZS0+
Y3JlYXRlVmlldyhzaXplLCBiZywgIWEsIFdlYkNvcmU6OkludFNpemUoKSwgZmFsc2UpOwotICAg
IGlmICghc2QtPmZyYW1lLT52aWV3KCkpCisgICAgc21hcnREYXRhLT5mcmFtZS0+Y3JlYXRlVmll
dyhzaXplLCBiYWNrZ3JvdW5kLCAhYWxwaGEsIFdlYkNvcmU6OkludFNpemUoKSwgZmFsc2UpOwor
ICAgIGlmICghc21hcnREYXRhLT5mcmFtZS0+dmlldygpKQogICAgICAgICByZXR1cm47CiAKICAg
ICBjb25zdCBjaGFyKiB0aGVtZSA9IGV3a192aWV3X3RoZW1lX2dldCh2aWV3KTsKLSAgICBzZC0+
ZnJhbWUtPnZpZXcoKS0+c2V0RWRqZVRoZW1lKHRoZW1lKTsKLSAgICBzZC0+ZnJhbWUtPnZpZXco
KS0+c2V0RXZhc09iamVjdChld2tGcmFtZSk7CisgICAgc21hcnREYXRhLT5mcmFtZS0+dmlldygp
LT5zZXRFZGplVGhlbWUodGhlbWUpOworICAgIHNtYXJ0RGF0YS0+ZnJhbWUtPnZpZXcoKS0+c2V0
RXZhc09iamVjdChld2tGcmFtZSk7CiB9CiAKIHNzaXplX3QgZXdrX2ZyYW1lX3NvdXJjZV9nZXQo
Y29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBjaGFyKiogZnJhbWVTb3VyY2UpCiB7Ci0gICAg
RVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCAtMSk7Ci0gICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgLTEpOwotICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUtPmRvY3VtZW50KCksIC0xKTsKKyAgICBFV0tf
RlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRhLCAtMSk7CisgICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUsIC0xKTsKKyAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5mcmFtZS0+ZG9jdW1lbnQo
KSwgLTEpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChmcmFtZVNvdXJjZSwg
LTEpOwogCiAgICAgV1RGOjpTdHJpbmcgc291cmNlOwogICAgICpmcmFtZVNvdXJjZSA9IDA7IC8v
IFNhdmVzIDAgdG8gcG9pbnRlciB1bnRpbCBpdCdzIG5vdCBhbGxvY2F0ZWQuCiAKLSAgICBpZiAo
IXNkLT5mcmFtZS0+ZG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSkgeworICAgIGlmICghc21h
cnREYXRhLT5mcmFtZS0+ZG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSkgewogICAgICAgICAv
LyBGSVhNRTogU3VwcG9ydCBvdGhlcnMgZG9jdW1lbnRzLgogICAgICAgICBXUk4oIk9ubHkgSFRN
TCBkb2N1bWVudHMgYXJlIHN1cHBvcnRlZCIpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQog
CiAgICAgLy8gTG9vayBmb3IgPGh0bWw+IHRhZy4gSWYgaXQgZXhpc3RzLCB0aGUgbm9kZSBjb250
YXRpbnMgYWxsIGRvY3VtZW50J3Mgc291cmNlLgotICAgIFdlYkNvcmU6Ok5vZGUqIGRvY3VtZW50
Tm9kZSA9IHNkLT5mcmFtZS0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCk7CisgICAgV2Vi
Q29yZTo6Tm9kZSogZG9jdW1lbnROb2RlID0gc21hcnREYXRhLT5mcmFtZS0+ZG9jdW1lbnQoKS0+
ZG9jdW1lbnRFbGVtZW50KCk7CiAgICAgaWYgKGRvY3VtZW50Tm9kZSkKICAgICAgICAgZm9yIChX
ZWJDb3JlOjpOb2RlKiBub2RlID0gZG9jdW1lbnROb2RlLT5maXJzdENoaWxkKCk7IG5vZGU7IG5v
ZGUgPSBub2RlLT5wYXJlbnRFbGVtZW50KCkpIHsKICAgICAgICAgICAgIGlmIChub2RlLT5oYXNU
YWdOYW1lKFdlYkNvcmU6OkhUTUxOYW1lczo6aHRtbFRhZykpIHsKQEAgLTE0NzQsMzYgKzE0NzQs
MzYgQEAgc3NpemVfdCBld2tfZnJhbWVfc291cmNlX2dldChjb25zdCBFdmFzX09iamVjdCogZXdr
RnJhbWUsIGNoYXIqKiBmcmFtZVNvdXJjZSkKIAogICAgIC8vIFRyeSB0byBnZXQgPGhlYWQ+IGFu
ZCA8Ym9keT4gdGFncyBpZiA8aHRtbD4gdGFnIHdhcyBub3QgZm91bmQuCiAgICAgaWYgKHNvdXJj
ZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgaWYgKHNkLT5mcmFtZS0+ZG9jdW1lbnQoKS0+aGVhZCgp
KQotICAgICAgICAgICAgc291cmNlID0gc2QtPmZyYW1lLT5kb2N1bWVudCgpLT5oZWFkKCktPm91
dGVySFRNTCgpOworICAgICAgICBpZiAoc21hcnREYXRhLT5mcmFtZS0+ZG9jdW1lbnQoKS0+aGVh
ZCgpKQorICAgICAgICAgICAgc291cmNlID0gc21hcnREYXRhLT5mcmFtZS0+ZG9jdW1lbnQoKS0+
aGVhZCgpLT5vdXRlckhUTUwoKTsKIAotICAgICAgICBpZiAoc2QtPmZyYW1lLT5kb2N1bWVudCgp
LT5ib2R5KCkpCi0gICAgICAgICAgICBzb3VyY2UgKz0gc2QtPmZyYW1lLT5kb2N1bWVudCgpLT5i
b2R5KCktPm91dGVySFRNTCgpOworICAgICAgICBpZiAoc21hcnREYXRhLT5mcmFtZS0+ZG9jdW1l
bnQoKS0+Ym9keSgpKQorICAgICAgICAgICAgc291cmNlICs9IHNtYXJ0RGF0YS0+ZnJhbWUtPmRv
Y3VtZW50KCktPmJvZHkoKS0+b3V0ZXJIVE1MKCk7CiAgICAgfQogCi0gICAgc2l6ZV90IHNvdXJj
ZV9sZW5ndGggPSBzdHJsZW4oc291cmNlLnV0ZjgoKS5kYXRhKCkpOwotICAgICpmcmFtZVNvdXJj
ZSA9IHN0YXRpY19jYXN0PGNoYXIqPihtYWxsb2Moc291cmNlX2xlbmd0aCArIDEpKTsKKyAgICBz
aXplX3Qgc291cmNlTGVuZ3RoID0gc3RybGVuKHNvdXJjZS51dGY4KCkuZGF0YSgpKTsKKyAgICAq
ZnJhbWVTb3VyY2UgPSBzdGF0aWNfY2FzdDxjaGFyKj4obWFsbG9jKHNvdXJjZUxlbmd0aCArIDEp
KTsKICAgICBpZiAoISpmcmFtZVNvdXJjZSkgewogICAgICAgICBDUklUSUNBTCgiQ291bGQgbm90
IGFsbG9jYXRlIG1lbW9yeS4iKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIAotICAgIHN0
cm5jcHkoKmZyYW1lU291cmNlLCBzb3VyY2UudXRmOCgpLmRhdGEoKSwgc291cmNlX2xlbmd0aCk7
Ci0gICAgKCpmcmFtZVNvdXJjZSlbc291cmNlX2xlbmd0aF0gPSAnXDAnOworICAgIHN0cm5jcHko
KmZyYW1lU291cmNlLCBzb3VyY2UudXRmOCgpLmRhdGEoKSwgc291cmNlTGVuZ3RoKTsKKyAgICAo
KmZyYW1lU291cmNlKVtzb3VyY2VMZW5ndGhdID0gJ1wwJzsKIAotICAgIHJldHVybiBzb3VyY2Vf
bGVuZ3RoOworICAgIHJldHVybiBzb3VyY2VMZW5ndGg7CiB9CiAKIEVpbmFfTGlzdCogZXdrX2Zy
YW1lX3Jlc291cmNlc19sb2NhdGlvbl9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lKQog
ewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgMCk7Ci0gICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgMCk7Ci0gICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZS0+ZG9jdW1lbnQoKSwgMCk7CisgICAg
RVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSwgMCk7CisgICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUsIDApOworICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmZyYW1lLT5kb2N1bWVu
dCgpLCAwKTsKIAogICAgIEVpbmFfTGlzdCogbGlzdE9mSW1hZ2VzTG9jYXRpb24gPSAwOwogCiAg
ICAgLy8gR2V0IHNyYyBhdHRpYnV0ZSBvZiBpbWFnZXMgYW5kIHNhdmVzIHRoZW0gdG8gdGhlIEVp
bmFfTGlzdC4KLSAgICBSZWZQdHI8V2ViQ29yZTo6SFRNTENvbGxlY3Rpb24+IGltYWdlcyA9IHNk
LT5mcmFtZS0+ZG9jdW1lbnQoKS0+aW1hZ2VzKCk7CisgICAgUmVmUHRyPFdlYkNvcmU6OkhUTUxD
b2xsZWN0aW9uPiBpbWFnZXMgPSBzbWFydERhdGEtPmZyYW1lLT5kb2N1bWVudCgpLT5pbWFnZXMo
KTsKICAgICBmb3IgKHNpemVfdCBpbmRleCA9IDA7IGluZGV4IDwgaW1hZ2VzLT5sZW5ndGgoKTsg
KytpbmRleCkgewogICAgICAgICBXZWJDb3JlOjpIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZUVsZW1l
bnQgPSBzdGF0aWNfY2FzdDxXZWJDb3JlOjpIVE1MSW1hZ2VFbGVtZW50Kj4oaW1hZ2VzLT5pdGVt
KGluZGV4KSk7CiAgICAgICAgIGlmICghaW1hZ2VFbGVtZW50IHx8IGltYWdlRWxlbWVudC0+c3Jj
KCkuaXNOdWxsKCkgfHwgaW1hZ2VFbGVtZW50LT5zcmMoKS5pc0VtcHR5KCkpCkBAIC0xNTQwLDEz
ICsxNTQwLDEzIEBAIG91dF9vZl9tZW1vcnlfaGFuZGxlcjoKIAogY2hhciogZXdrX2ZyYW1lX3Bs
YWluX3RleHRfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsKLSAgICBFV0tfRlJB
TUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIDApOwotICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIDApOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1Jf
UkVUVVJOKGV3a0ZyYW1lLCBzbWFydERhdGEsIDApOworICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOX1ZBTChzbWFydERhdGEtPmZyYW1lLCAwKTsKIAotICAgIGlmICghc2QtPmZyYW1lLT5k
b2N1bWVudCgpKQorICAgIGlmICghc21hcnREYXRhLT5mcmFtZS0+ZG9jdW1lbnQoKSkKICAgICAg
ICAgcmV0dXJuIDA7CiAKLSAgICBXZWJDb3JlOjpFbGVtZW50KiBkb2N1bWVudEVsZW1lbnQgPSBz
ZC0+ZnJhbWUtPmRvY3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpOworICAgIFdlYkNvcmU6OkVs
ZW1lbnQqIGRvY3VtZW50RWxlbWVudCA9IHNtYXJ0RGF0YS0+ZnJhbWUtPmRvY3VtZW50KCktPmRv
Y3VtZW50RWxlbWVudCgpOwogCiAgICAgaWYgKCFkb2N1bWVudEVsZW1lbnQpCiAgICAgICAgIHJl
dHVybiAwOwpAQCAtMTU4NSw5ICsxNTg1LDkgQEAgRWluYV9Cb29sIGV3a19mcmFtZV91cmlfY2hh
bmdlZChFdmFzX09iamVjdCogZXdrRnJhbWUpCiB2b2lkIGV3a19mcmFtZV9mb3JjZV9sYXlvdXQo
RXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewogICAgIERCRygiZXdrRnJhbWU9JXAiLCBld2tGcmFt
ZSk7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkKTsKLSAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+ZnJhbWUpOwotICAgIFdlYkNvcmU6OkZyYW1l
VmlldyogdmlldyA9IHNkLT5mcmFtZS0+dmlldygpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1Jf
UkVUVVJOKGV3a0ZyYW1lLCBzbWFydERhdGEpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOKHNtYXJ0RGF0YS0+ZnJhbWUpOworICAgIFdlYkNvcmU6OkZyYW1lVmlldyogdmlldyA9IHNt
YXJ0RGF0YS0+ZnJhbWUtPnZpZXcoKTsKICAgICBpZiAodmlldykKICAgICAgICAgdmlldy0+Zm9y
Y2VMYXlvdXQodHJ1ZSk7CiB9CkBAIC0xNjA2LDcgKzE2MDYsNyBAQCBXVEY6OlBhc3NSZWZQdHI8
V2ViQ29yZTo6V2lkZ2V0PiBld2tfZnJhbWVfcGx1Z2luX2NyZWF0ZShFdmFzX09iamVjdCogZXdr
RnJhbWUsCiAgKiBAaW50ZXJuYWwKICAqIFJlcG9ydHMgdGhhdCBlZGl0b3IgY2xpZW50IHNlbGVj
dGlvbiB3YXMgY2hhbmdlZC4KICAqCi0gKiBAcGFyYW0gbyBGcmFtZQorICogQHBhcmFtIGV3a0Zy
YW1lIEZyYW1lCiAgKgogICogRW1pdHMgc2lnbmFsOiAiZWRpdG9yY2xpZW50c2VsZWN0aW9uLGNo
YW5nZWQiIHdpdGggbm8gcGFyYW1ldGVycy4KICAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9lZmwvZXdrL2V3a19oaXN0b3J5LmNwcCBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfaGlz
dG9yeS5jcHAKaW5kZXggYmZmMGM1MjY3MTZlOGYyYTBlNzc2MzA1ZTcwMWJjODIzYTM1MjY1OC4u
ZmUwMWQ1MmNjYjFkNmNhZDgyN2FiOTZkMmQ5NWYzYzYyOWRhOTNiOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9lZmwvZXdrL2V3a19oaXN0b3J5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Vm
bC9ld2svZXdrX2hpc3RvcnkuY3BwCkBAIC01OSw5ICs1OSw5IEBAIHN0cnVjdCBfRXdrX0hpc3Rv
cnlfSXRlbSB7CiAgICAgV2ViQ29yZTo6SGlzdG9yeUl0ZW0qIGNvcmU7CiAKICAgICBjb25zdCBj
aGFyKiB0aXRsZTsKLSAgICBjb25zdCBjaGFyKiBhbHRlcm5hdGVfdGl0bGU7CisgICAgY29uc3Qg
Y2hhciogYWx0ZXJuYXRlVGl0bGU7CiAgICAgY29uc3QgY2hhciogdXJpOwotICAgIGNvbnN0IGNo
YXIqIG9yaWdpbmFsX3VyaTsKKyAgICBjb25zdCBjaGFyKiBvcmlnaW5hbFVyaTsKIH07CiAKICNk
ZWZpbmUgRVdLX0hJU1RPUllfSVRFTV9DT1JFX0dFVF9PUl9SRVRVUk4oaXRlbSwgY29yZV8sIC4u
LikgXApAQCAtNzcsMTcgKzc3LDE3IEBAIHN0cnVjdCBfRXdrX0hpc3RvcnlfSXRlbSB7CiAKIHN0
YXRpYyBpbmxpbmUgRWluYV9MaXN0KiBfZXdrX2hpc3RvcnlfaXRlbV9saXN0X2dldChjb25zdCBX
ZWJDb3JlOjpIaXN0b3J5SXRlbVZlY3RvciYgY29yZUl0ZW1zKQogewotICAgIEVpbmFfTGlzdCog
cmV0ID0gMDsKLSAgICB1bnNpZ25lZCBpbnQgaSwgc2l6ZTsKKyAgICBFaW5hX0xpc3QqIHJlc3Vs
dCA9IDA7CisgICAgdW5zaWduZWQgaW50IHNpemU7CiAKICAgICBzaXplID0gY29yZUl0ZW1zLnNp
emUoKTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgZm9yICh1bnNpZ25l
ZCBpbnQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKICAgICAgICAgRXdrX0hpc3RvcnlfSXRlbSog
aXRlbSA9IGV3a19oaXN0b3J5X2l0ZW1fbmV3X2Zyb21fY29yZShjb3JlSXRlbXNbaV0uZ2V0KCkp
OwogICAgICAgICBpZiAoaXRlbSkKLSAgICAgICAgICAgIHJldCA9IGVpbmFfbGlzdF9hcHBlbmQo
cmV0LCBpdGVtKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IGVpbmFfbGlzdF9hcHBlbmQocmVzdWx0
LCBpdGVtKTsKICAgICB9CiAKLSAgICByZXR1cm4gcmV0OworICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKIEVpbmFfQm9vbCBld2tfaGlzdG9yeV9jbGVhcihFd2tfSGlzdG9yeSogaGlzdG9yeSkKQEAg
LTI3Niw5ICsyNzYsOSBAQCB2b2lkIGV3a19oaXN0b3J5X2l0ZW1fZnJlZShFd2tfSGlzdG9yeV9J
dGVtKiBpdGVtKQogCiB2b2lkIGV3a19oaXN0b3J5X2l0ZW1fbGlzdF9mcmVlKEVpbmFfTGlzdCog
aGlzdG9yeV9pdGVtcykKIHsKLSAgICB2b2lkKiBkOwotICAgIEVJTkFfTElTVF9GUkVFKGhpc3Rv
cnlfaXRlbXMsIGQpIHsKLSAgICAgICAgRXdrX0hpc3RvcnlfSXRlbSogaXRlbSA9IChFd2tfSGlz
dG9yeV9JdGVtKilkOworICAgIHZvaWQqIGRlbGV0ZUl0ZW07CisgICAgRUlOQV9MSVNUX0ZSRUUo
aGlzdG9yeV9pdGVtcywgZGVsZXRlSXRlbSkgeworICAgICAgICBFd2tfSGlzdG9yeV9JdGVtKiBp
dGVtID0gKEV3a19IaXN0b3J5X0l0ZW0qKWRlbGV0ZUl0ZW07CiAgICAgICAgIF9ld2tfaGlzdG9y
eV9pdGVtX2ZyZWUoaXRlbSwgaXRlbS0+Y29yZSk7CiAgICAgfQogfQpAQCAtMjg3LDI1ICsyODcs
MjUgQEAgY29uc3QgY2hhciogZXdrX2hpc3RvcnlfaXRlbV90aXRsZV9nZXQoY29uc3QgRXdrX0hp
c3RvcnlfSXRlbSogaXRlbSkKIHsKICAgICBFV0tfSElTVE9SWV9JVEVNX0NPUkVfR0VUX09SX1JF
VFVSTihpdGVtLCBjb3JlLCAwKTsKICAgICAvLyBoaWRlIHRoZSBmb2xsb3dpbmcgb3B0aW16YXRp
b24gZnJvbSBvdXRzaWRlCi0gICAgRXdrX0hpc3RvcnlfSXRlbSogaSA9IGNvbnN0X2Nhc3Q8RXdr
X0hpc3RvcnlfSXRlbSo+KGl0ZW0pOwotICAgIGVpbmFfc3RyaW5nc2hhcmVfcmVwbGFjZSgmaS0+
dGl0bGUsIGNvcmUtPnRpdGxlKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgcmV0dXJuIGktPnRpdGxl
OworICAgIEV3a19IaXN0b3J5X0l0ZW0qIGl0ZW0xID0gY29uc3RfY2FzdDxFd2tfSGlzdG9yeV9J
dGVtKj4oaXRlbSk7CisgICAgZWluYV9zdHJpbmdzaGFyZV9yZXBsYWNlKCZpdGVtMS0+dGl0bGUs
IGNvcmUtPnRpdGxlKCkudXRmOCgpLmRhdGEoKSk7CisgICAgcmV0dXJuIGl0ZW0xLT50aXRsZTsK
IH0KIAogY29uc3QgY2hhciogZXdrX2hpc3RvcnlfaXRlbV90aXRsZV9hbHRlcm5hdGVfZ2V0KGNv
bnN0IEV3a19IaXN0b3J5X0l0ZW0qIGl0ZW0pCiB7CiAgICAgRVdLX0hJU1RPUllfSVRFTV9DT1JF
X0dFVF9PUl9SRVRVUk4oaXRlbSwgY29yZSwgMCk7CiAgICAgLy8gaGlkZSB0aGUgZm9sbG93aW5n
IG9wdGltemF0aW9uIGZyb20gb3V0c2lkZQotICAgIEV3a19IaXN0b3J5X0l0ZW0qIGkgPSBjb25z
dF9jYXN0PEV3a19IaXN0b3J5X0l0ZW0qPihpdGVtKTsKLSAgICBlaW5hX3N0cmluZ3NoYXJlX3Jl
cGxhY2UoJmktPmFsdGVybmF0ZV90aXRsZSwKKyAgICBFd2tfSGlzdG9yeV9JdGVtKiBpdGVtMSA9
IGNvbnN0X2Nhc3Q8RXdrX0hpc3RvcnlfSXRlbSo+KGl0ZW0pOworICAgIGVpbmFfc3RyaW5nc2hh
cmVfcmVwbGFjZSgmaXRlbTEtPmFsdGVybmF0ZVRpdGxlLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb3JlLT5hbHRlcm5hdGVUaXRsZSgpLnV0ZjgoKS5kYXRhKCkpOwotICAgIHJldHVy
biBpLT5hbHRlcm5hdGVfdGl0bGU7CisgICAgcmV0dXJuIGl0ZW0xLT5hbHRlcm5hdGVUaXRsZTsK
IH0KIAogdm9pZCBld2tfaGlzdG9yeV9pdGVtX3RpdGxlX2FsdGVybmF0ZV9zZXQoRXdrX0hpc3Rv
cnlfSXRlbSogaXRlbSwgY29uc3QgY2hhciogdGl0bGUpCiB7CiAgICAgRVdLX0hJU1RPUllfSVRF
TV9DT1JFX0dFVF9PUl9SRVRVUk4oaXRlbSwgY29yZSk7Ci0gICAgaWYgKCFlaW5hX3N0cmluZ3No
YXJlX3JlcGxhY2UoJml0ZW0tPmFsdGVybmF0ZV90aXRsZSwgdGl0bGUpKQorICAgIGlmICghZWlu
YV9zdHJpbmdzaGFyZV9yZXBsYWNlKCZpdGVtLT5hbHRlcm5hdGVUaXRsZSwgdGl0bGUpKQogICAg
ICAgICByZXR1cm47CiAgICAgY29yZS0+c2V0QWx0ZXJuYXRlVGl0bGUoV1RGOjpTdHJpbmc6OmZy
b21VVEY4KHRpdGxlKSk7CiB9CkBAIC0zMjQsOSArMzI0LDkgQEAgY29uc3QgY2hhciogZXdrX2hp
c3RvcnlfaXRlbV91cmlfb3JpZ2luYWxfZ2V0KGNvbnN0IEV3a19IaXN0b3J5X0l0ZW0qIGl0ZW0p
CiAgICAgRVdLX0hJU1RPUllfSVRFTV9DT1JFX0dFVF9PUl9SRVRVUk4oaXRlbSwgY29yZSwgMCk7
CiAgICAgLy8gaGlkZSB0aGUgZm9sbG93aW5nIG9wdGltemF0aW9uIGZyb20gb3V0c2lkZQogICAg
IEV3a19IaXN0b3J5X0l0ZW0qIGkgPSBjb25zdF9jYXN0PEV3a19IaXN0b3J5X0l0ZW0qPihpdGVt
KTsKLSAgICBlaW5hX3N0cmluZ3NoYXJlX3JlcGxhY2UoJmktPm9yaWdpbmFsX3VyaSwKKyAgICBl
aW5hX3N0cmluZ3NoYXJlX3JlcGxhY2UoJmktPm9yaWdpbmFsVXJpLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb3JlLT5vcmlnaW5hbFVSTFN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwot
ICAgIHJldHVybiBpLT5vcmlnaW5hbF91cmk7CisgICAgcmV0dXJuIGktPm9yaWdpbmFsVXJpOwog
fQogCiBkb3VibGUgZXdrX2hpc3RvcnlfaXRlbV90aW1lX2xhc3RfdmlzaXRlZF9nZXQoY29uc3Qg
RXdrX0hpc3RvcnlfSXRlbSogaXRlbSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3
ay9ld2tfanMuY3BwIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19qcy5jcHAKaW5kZXggZDQ5
YjY3ODg4NDIxYTZhYmZmZDNjYTAzZmYwMTU5MWZkMWU2Mjg2Yy4uM2RmOGM1MjQ5NzRhMzZkMjM0
NDhjYWMxZmY3NGM2MjBiMGZhMjA3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvZXdr
L2V3a19qcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19qcy5jcHAKQEAgLTg1
LDEwICs4NSwxMCBAQCBzdGF0aWMgRWluYV9Cb29sIGV3a19qc192YXJpYW50X3RvX25wdmFyaWFu
dChjb25zdCBFd2tfSlNfVmFyaWFudCogZGF0YSwgTlBWYXJpYQogLy8gVGhlc2UgbWV0aG9kcyBh
cmUgdXNlZCBieSBOUEFJLCB0aGF0cyB0aGUgcmVhc29uIHRvIHVzZSBib29sIGluc3RlYWQgb2Yg
RWluYV9Cb29sLgogc3RhdGljIGJvb2wgZXdrX2pzX3Byb3BlcnR5X2hhcyhOUE9iamVjdCogbnBP
YmplY3QsIE5QSWRlbnRpZmllciBuYW1lKQogewotICAgIEV3a19KU19PYmplY3QqIG9iaiA9IHJl
aW50ZXJwcmV0X2Nhc3Q8RXdrX0pTX09iamVjdCo+KG5wT2JqZWN0KTsKKyAgICBFd2tfSlNfT2Jq
ZWN0KiBvYmplY3QgPSByZWludGVycHJldF9jYXN0PEV3a19KU19PYmplY3QqPihucE9iamVjdCk7
CiAKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwobnBPYmplY3QsIGZhbHNlKTsK
LSAgICBFSU5BX01BR0lDX0NIRUNLX09SX1JFVFVSTihvYmosIGZhbHNlKTsKKyAgICBFSU5BX01B
R0lDX0NIRUNLX09SX1JFVFVSTihvYmplY3QsIGZhbHNlKTsKIAogICAgIGlmICghX05QTl9JZGVu
dGlmaWVySXNTdHJpbmcobmFtZSkpIHsKICAgICAgICAgRVJSKCJpbnQgTlBJZGVudGlmaWVyIGlz
IG5vdCBzdXBwb3J0ZWQuIik7CkBAIC05Niw3ICs5Niw3IEBAIHN0YXRpYyBib29sIGV3a19qc19w
cm9wZXJ0eV9oYXMoTlBPYmplY3QqIG5wT2JqZWN0LCBOUElkZW50aWZpZXIgbmFtZSkKICAgICB9
CiAKICAgICBjaGFyKiBwcm9wX25hbWUgPSBfTlBOX1VURjhGcm9tSWRlbnRpZmllcihuYW1lKTsK
LSAgICBib29sIGZhaWwgPSBlaW5hX2hhc2hfZmluZChvYmotPnByb3BlcnRpZXMsIHByb3BfbmFt
ZSk7IC8vIEZJWE1FOiBzaG91bGQgc2VhcmNoIG1ldGhvZHMgdG9vPworICAgIGJvb2wgZmFpbCA9
IGVpbmFfaGFzaF9maW5kKG9iamVjdC0+cHJvcGVydGllcywgcHJvcF9uYW1lKTsgLy8gRklYTUU6
IHNob3VsZCBzZWFyY2ggbWV0aG9kcyB0b28/CiAgICAgZnJlZShwcm9wX25hbWUpOwogCiAgICAg
cmV0dXJuIGZhaWw7CkBAIC0xMDQsMTMgKzEwNCwxMyBAQCBzdGF0aWMgYm9vbCBld2tfanNfcHJv
cGVydHlfaGFzKE5QT2JqZWN0KiBucE9iamVjdCwgTlBJZGVudGlmaWVyIG5hbWUpCiAKIHN0YXRp
YyBib29sIGV3a19qc19wcm9wZXJ0eV9nZXQoTlBPYmplY3QqIG5wT2JqZWN0LCBOUElkZW50aWZp
ZXIgbmFtZSwgTlBWYXJpYW50KiByZXN1bHQpCiB7Ci0gICAgRXdrX0pTX09iamVjdCogb2JqID0g
cmVpbnRlcnByZXRfY2FzdDxFd2tfSlNfT2JqZWN0Kj4obnBPYmplY3QpOworICAgIEV3a19KU19P
YmplY3QqIG9iamVjdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8RXdrX0pTX09iamVjdCo+KG5wT2JqZWN0
KTsKICAgICBFd2tfSlNfVmFyaWFudCogdmFsdWU7CiAgICAgRXdrX0pTX1Byb3BlcnR5KiBwcm9w
OwogICAgIGJvb2wgZmFpbCA9IGZhbHNlOwogCiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk5fVkFMKG5wT2JqZWN0LCBmYWxzZSk7Ci0gICAgRUlOQV9NQUdJQ19DSEVDS19PUl9SRVRVUk4o
b2JqLCBmYWxzZSk7CisgICAgRUlOQV9NQUdJQ19DSEVDS19PUl9SRVRVUk4ob2JqZWN0LCBmYWxz
ZSk7CiAKICAgICBpZiAoIV9OUE5fSWRlbnRpZmllcklzU3RyaW5nKG5hbWUpKSB7CiAgICAgICAg
IEVSUigiaW50IE5QSWRlbnRpZmllciBpcyBub3Qgc3VwcG9ydGVkLiIpOwpAQCAtMTIzLDE5ICsx
MjMsMTkgQEAgc3RhdGljIGJvb2wgZXdrX2pzX3Byb3BlcnR5X2dldChOUE9iamVjdCogbnBPYmpl
Y3QsIE5QSWRlbnRpZmllciBuYW1lLCBOUFZhcmlhbnQKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIH0KIAotICAgIHByb3AgPSBzdGF0aWNfY2FzdDxFd2tfSlNfUHJvcGVydHkqPihlaW5hX2hh
c2hfZmluZChvYmotPmNscy0+cHJvcGVydGllcywgbmFtZSkpOworICAgIHByb3AgPSBzdGF0aWNf
Y2FzdDxFd2tfSlNfUHJvcGVydHkqPihlaW5hX2hhc2hfZmluZChvYmplY3QtPmNscy0+cHJvcGVy
dGllcywgbmFtZSkpOwogICAgIGlmIChwcm9wICYmIHByb3AtPmdldCkgeyAvLyBDbGFzcyBoYXMg
cHJvcGVydHkgYW5kIHByb3BlcnR5IGhhcyBnZXR0ZXIuCi0gICAgICAgIGZhaWwgPSBwcm9wLT5n
ZXQob2JqLCBwcm9wLT5uYW1lLCB2YWx1ZSk7CisgICAgICAgIGZhaWwgPSBwcm9wLT5nZXQob2Jq
ZWN0LCBwcm9wLT5uYW1lLCB2YWx1ZSk7CiAgICAgICAgIGlmICghZmFpbCkKICAgICAgICAgICAg
IGZhaWwgPSBld2tfanNfdmFyaWFudF90b19ucHZhcmlhbnQodmFsdWUsIHJlc3VsdCk7Ci0gICAg
fSBlbHNlIGlmIChvYmotPmNscy0+ZGVmYXVsdF9wcm9wLmdldCkgeyAvLyBEZWZhdWx0IGdldHRl
ciBleGlzdHMuCi0gICAgICAgIGZhaWwgPSBvYmotPmNscy0+ZGVmYXVsdF9wcm9wLmdldChvYmos
IHByb3AtPm5hbWUsIHZhbHVlKTsKKyAgICB9IGVsc2UgaWYgKG9iamVjdC0+Y2xzLT5kZWZhdWx0
X3Byb3AuZ2V0KSB7IC8vIERlZmF1bHQgZ2V0dGVyIGV4aXN0cy4KKyAgICAgICAgZmFpbCA9IG9i
amVjdC0+Y2xzLT5kZWZhdWx0X3Byb3AuZ2V0KG9iamVjdCwgcHJvcC0+bmFtZSwgdmFsdWUpOwog
ICAgICAgICBpZiAoIWZhaWwpCiAgICAgICAgICAgICBmYWlsID0gZXdrX2pzX3ZhcmlhbnRfdG9f
bnB2YXJpYW50KHZhbHVlLCByZXN1bHQpOwogICAgIH0gZWxzZSB7IC8vIEZhbGxiYWNrIHRvIG9i
amVjdHMgaGFzaCBtYXAuCiAgICAgICAgIGNoYXIqIHByb3BfbmFtZSA9IF9OUE5fVVRGOEZyb21J
ZGVudGlmaWVyKG5hbWUpOwogICAgICAgICBmcmVlKHZhbHVlKTsKLSAgICAgICAgdmFsdWUgPSBz
dGF0aWNfY2FzdDxFd2tfSlNfVmFyaWFudCo+KGVpbmFfaGFzaF9maW5kKG9iai0+cHJvcGVydGll
cywgcHJvcF9uYW1lKSk7CisgICAgICAgIHZhbHVlID0gc3RhdGljX2Nhc3Q8RXdrX0pTX1Zhcmlh
bnQqPihlaW5hX2hhc2hfZmluZChvYmplY3QtPnByb3BlcnRpZXMsIHByb3BfbmFtZSkpOwogICAg
ICAgICBmcmVlKHByb3BfbmFtZSk7CiAgICAgICAgIGlmICh2YWx1ZSkKICAgICAgICAgICAgIHJl
dHVybiBld2tfanNfdmFyaWFudF90b19ucHZhcmlhbnQodmFsdWUsIHJlc3VsdCk7CkBAIC0xNDcs
NyArMTQ3LDcgQEAgc3RhdGljIGJvb2wgZXdrX2pzX3Byb3BlcnR5X2dldChOUE9iamVjdCogbnBP
YmplY3QsIE5QSWRlbnRpZmllciBuYW1lLCBOUFZhcmlhbnQKIAogc3RhdGljIGJvb2wgZXdrX2pz
X3Byb3BlcnR5X3NldChOUE9iamVjdCogbnBPYmplY3QsIE5QSWRlbnRpZmllciBuYW1lLCBjb25z
dCBOUFZhcmlhbnQqIG5wVmFsdWUpCiB7Ci0gICAgRXdrX0pTX09iamVjdCogb2JqID0gcmVpbnRl
cnByZXRfY2FzdDxFd2tfSlNfT2JqZWN0Kj4obnBPYmplY3QpOworICAgIEV3a19KU19PYmplY3Qq
IG9iamVjdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8RXdrX0pTX09iamVjdCo+KG5wT2JqZWN0KTsKICAg
ICBFd2tfSlNfVmFyaWFudCogdmFsdWU7CiAgICAgRXdrX0pTX1Byb3BlcnR5KiBwcm9wOwogICAg
IGJvb2wgZmFpbCA9IGZhbHNlOwpAQCAtMTY4LDEzICsxNjgsMTMgQEAgc3RhdGljIGJvb2wgZXdr
X2pzX3Byb3BlcnR5X3NldChOUE9iamVjdCogbnBPYmplY3QsIE5QSWRlbnRpZmllciBuYW1lLCBj
b25zdCBOUFYKIAogICAgIGV3a19qc19ucHZhcmlhbnRfdG9fdmFyaWFudCh2YWx1ZSwgbnBWYWx1
ZSk7CiAgICAgY2hhciogcHJvcF9uYW1lID0gX05QTl9VVEY4RnJvbUlkZW50aWZpZXIobmFtZSk7
Ci0gICAgcHJvcCA9IHN0YXRpY19jYXN0PEV3a19KU19Qcm9wZXJ0eSo+KGVpbmFfaGFzaF9maW5k
KG9iai0+Y2xzLT5wcm9wZXJ0aWVzLCBwcm9wX25hbWUpKTsKKyAgICBwcm9wID0gc3RhdGljX2Nh
c3Q8RXdrX0pTX1Byb3BlcnR5Kj4oZWluYV9oYXNoX2ZpbmQob2JqZWN0LT5jbHMtPnByb3BlcnRp
ZXMsIHByb3BfbmFtZSkpOwogICAgIGlmIChwcm9wICYmIHByb3AtPnNldCkKLSAgICAgICAgZmFp
bCA9IHByb3AtPnNldChvYmosIHByb3AtPm5hbWUsIHZhbHVlKTsgLy8gQ2xhc3MgaGFzIHByb3Bl
cnR5IGFuZCBwcm9wZXJ0eSBoYXMgc2V0dGVyLgotICAgIGVsc2UgaWYgKG9iai0+Y2xzLT5kZWZh
dWx0X3Byb3Auc2V0KQotICAgICAgICBmYWlsID0gb2JqLT5jbHMtPmRlZmF1bHRfcHJvcC5zZXQo
b2JqLCBwcm9wX25hbWUsIHZhbHVlKTsgLy8gRGVmYXVsdCBnZXR0ZXIgZXhpc3RzLgorICAgICAg
ICBmYWlsID0gcHJvcC0+c2V0KG9iamVjdCwgcHJvcC0+bmFtZSwgdmFsdWUpOyAvLyBDbGFzcyBo
YXMgcHJvcGVydHkgYW5kIHByb3BlcnR5IGhhcyBzZXR0ZXIuCisgICAgZWxzZSBpZiAob2JqZWN0
LT5jbHMtPmRlZmF1bHRfcHJvcC5zZXQpCisgICAgICAgIGZhaWwgPSBvYmplY3QtPmNscy0+ZGVm
YXVsdF9wcm9wLnNldChvYmplY3QsIHByb3BfbmFtZSwgdmFsdWUpOyAvLyBEZWZhdWx0IGdldHRl
ciBleGlzdHMuCiAgICAgZWxzZSB7IC8vIEZhbGxiYWNrIHRvIG9iamVjdHMgaGFzaCBtYXAuCi0g
ICAgICAgIHZvaWQqIG9sZCA9IGVpbmFfaGFzaF9zZXQob2JqLT5wcm9wZXJ0aWVzLCBwcm9wX25h
bWUsIHZhbHVlKTsKKyAgICAgICAgdm9pZCogb2xkID0gZWluYV9oYXNoX3NldChvYmplY3QtPnBy
b3BlcnRpZXMsIHByb3BfbmFtZSwgdmFsdWUpOwogICAgICAgICBmcmVlKG9sZCk7CiAgICAgICAg
IGZhaWwgPSB0cnVlOwogICAgIH0KQEAgLTE4NSwxMiArMTg1LDEyIEBAIHN0YXRpYyBib29sIGV3
a19qc19wcm9wZXJ0eV9zZXQoTlBPYmplY3QqIG5wT2JqZWN0LCBOUElkZW50aWZpZXIgbmFtZSwg
Y29uc3QgTlBWCiAKIHN0YXRpYyBib29sIGV3a19qc19wcm9wZXJ0eV9yZW1vdmUoTlBPYmplY3Qq
IG5wT2JqZWN0LCBOUElkZW50aWZpZXIgbmFtZSkKIHsKLSAgICBFd2tfSlNfT2JqZWN0KiBvYmog
PSByZWludGVycHJldF9jYXN0PEV3a19KU19PYmplY3QqPihucE9iamVjdCk7CisgICAgRXdrX0pT
X09iamVjdCogb2JqZWN0ID0gcmVpbnRlcnByZXRfY2FzdDxFd2tfSlNfT2JqZWN0Kj4obnBPYmpl
Y3QpOwogICAgIEV3a19KU19Qcm9wZXJ0eSogcHJvcDsKICAgICBib29sIGZhaWwgPSBmYWxzZTsK
IAogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChucE9iamVjdCwgZmFsc2UpOwot
ICAgIEVJTkFfTUFHSUNfQ0hFQ0tfT1JfUkVUVVJOKG9iaiwgZmFsc2UpOworICAgIEVJTkFfTUFH
SUNfQ0hFQ0tfT1JfUkVUVVJOKG9iamVjdCwgZmFsc2UpOwogCiAgICAgaWYgKCFfTlBOX0lkZW50
aWZpZXJJc1N0cmluZyhuYW1lKSkgewogICAgICAgICBFUlIoImludCBOUElkZW50aWZpZXIgaXMg
bm90IHN1cHBvcnRlZC4iKTsKQEAgLTE5OCwxMyArMTk4LDEzIEBAIHN0YXRpYyBib29sIGV3a19q
c19wcm9wZXJ0eV9yZW1vdmUoTlBPYmplY3QqIG5wT2JqZWN0LCBOUElkZW50aWZpZXIgbmFtZSkK
ICAgICB9CiAKICAgICBjaGFyKiBwcm9wX25hbWUgPSBfTlBOX1VURjhGcm9tSWRlbnRpZmllcihu
YW1lKTsKLSAgICBwcm9wID0gc3RhdGljX2Nhc3Q8RXdrX0pTX1Byb3BlcnR5Kj4oZWluYV9oYXNo
X2ZpbmQob2JqLT5jbHMtPnByb3BlcnRpZXMsIHByb3BfbmFtZSkpOworICAgIHByb3AgPSBzdGF0
aWNfY2FzdDxFd2tfSlNfUHJvcGVydHkqPihlaW5hX2hhc2hfZmluZChvYmplY3QtPmNscy0+cHJv
cGVydGllcywgcHJvcF9uYW1lKSk7CiAgICAgaWYgKHByb3AgJiYgcHJvcC0+ZGVsKQotICAgICAg
ICBmYWlsID0gcHJvcC0+ZGVsKG9iaiwgcHJvcC0+bmFtZSk7IC8vIENsYXNzIGhhcyBwcm9wZXJ0
eSBhbmQgcHJvcGVydHkgaGFzIGdldHRlci4KLSAgICBlbHNlIGlmIChvYmotPmNscy0+ZGVmYXVs
dF9wcm9wLmRlbCkKLSAgICAgICAgZmFpbCA9IG9iai0+Y2xzLT5kZWZhdWx0X3Byb3AuZGVsKG9i
aiwgcHJvcF9uYW1lKTsKKyAgICAgICAgZmFpbCA9IHByb3AtPmRlbChvYmplY3QsIHByb3AtPm5h
bWUpOyAvLyBDbGFzcyBoYXMgcHJvcGVydHkgYW5kIHByb3BlcnR5IGhhcyBnZXR0ZXIuCisgICAg
ZWxzZSBpZiAob2JqZWN0LT5jbHMtPmRlZmF1bHRfcHJvcC5kZWwpCisgICAgICAgIGZhaWwgPSBv
YmplY3QtPmNscy0+ZGVmYXVsdF9wcm9wLmRlbChvYmplY3QsIHByb3BfbmFtZSk7CiAgICAgZWxz
ZQotICAgICAgICBmYWlsID0gZWluYV9oYXNoX2RlbChvYmotPnByb3BlcnRpZXMsIHByb3BfbmFt
ZSwgMCk7CisgICAgICAgIGZhaWwgPSBlaW5hX2hhc2hfZGVsKG9iamVjdC0+cHJvcGVydGllcywg
cHJvcF9uYW1lLCAwKTsKIAogICAgIGZyZWUocHJvcF9uYW1lKTsKICAgICByZXR1cm4gZmFpbDsK
QEAgLTIxMiwyMiArMjEyLDIyIEBAIHN0YXRpYyBib29sIGV3a19qc19wcm9wZXJ0eV9yZW1vdmUo
TlBPYmplY3QqIG5wT2JqZWN0LCBOUElkZW50aWZpZXIgbmFtZSkKIAogc3RhdGljIGJvb2wgZXdr
X2pzX3Byb3BlcnRpZXNfZW51bWVyYXRlKE5QT2JqZWN0KiBucE9iamVjdCwgTlBJZGVudGlmaWVy
KiogdmFsdWUsIHVpbnQzMl90KiBjb3VudCkKIHsKLSAgICBFd2tfSlNfT2JqZWN0KiBvYmogPSBy
ZWludGVycHJldF9jYXN0PEV3a19KU19PYmplY3QqPihucE9iamVjdCk7CisgICAgRXdrX0pTX09i
amVjdCogb2JqZWN0ID0gcmVpbnRlcnByZXRfY2FzdDxFd2tfSlNfT2JqZWN0Kj4obnBPYmplY3Qp
OwogICAgIEVpbmFfSXRlcmF0b3IqIGl0OwogICAgIGNoYXIqIGtleTsKICAgICBpbnQgaSA9IDA7
CiAKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwobnBPYmplY3QsIGZhbHNlKTsK
LSAgICBFSU5BX01BR0lDX0NIRUNLX09SX1JFVFVSTihvYmosIGZhbHNlKTsKKyAgICBFSU5BX01B
R0lDX0NIRUNLX09SX1JFVFVSTihvYmplY3QsIGZhbHNlKTsKIAotICAgICpjb3VudCA9IGVpbmFf
aGFzaF9wb3B1bGF0aW9uKG9iai0+cHJvcGVydGllcyk7CisgICAgKmNvdW50ID0gZWluYV9oYXNo
X3BvcHVsYXRpb24ob2JqZWN0LT5wcm9wZXJ0aWVzKTsKICAgICAqdmFsdWUgPSBzdGF0aWNfY2Fz
dDxOUElkZW50aWZpZXIqPihtYWxsb2Moc2l6ZW9mKE5QSWRlbnRpZmllcikgKiAqY291bnQpKTsK
ICAgICBpZiAoISp2YWx1ZSkgewogICAgICAgICBFUlIoIkNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1v
cnkgZm9yIE5QSWRlbnRpZmllciIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0g
ICAgaXQgPSBlaW5hX2hhc2hfaXRlcmF0b3Jfa2V5X25ldyhvYmotPnByb3BlcnRpZXMpOworICAg
IGl0ID0gZWluYV9oYXNoX2l0ZXJhdG9yX2tleV9uZXcob2JqZWN0LT5wcm9wZXJ0aWVzKTsKICAg
ICBFSU5BX0lURVJBVE9SX0ZPUkVBQ0goaXQsIGtleSkKICAgICAgICAgKCp2YWx1ZSlbaSsrXSA9
IF9OUE5fR2V0U3RyaW5nSWRlbnRpZmllcihrZXkpOwogCkBAIC0yMzcsMzQgKzIzNywzNCBAQCBz
dGF0aWMgYm9vbCBld2tfanNfcHJvcGVydGllc19lbnVtZXJhdGUoTlBPYmplY3QqIG5wT2JqZWN0
LCBOUElkZW50aWZpZXIqKiB2YWx1ZQogCiBzdGF0aWMgYm9vbCBld2tfanNfbWV0aG9kX2hhcyhO
UE9iamVjdCogbnBPYmplY3QsIE5QSWRlbnRpZmllciBuYW1lKQogewotICAgIEV3a19KU19PYmpl
Y3QqIG9iaiA9IHJlaW50ZXJwcmV0X2Nhc3Q8RXdrX0pTX09iamVjdCo+KG5wT2JqZWN0KTsKKyAg
ICBFd2tfSlNfT2JqZWN0KiBvYmplY3QgPSByZWludGVycHJldF9jYXN0PEV3a19KU19PYmplY3Qq
PihucE9iamVjdCk7CiAKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwobnBPYmpl
Y3QsIGZhbHNlKTsKLSAgICBFSU5BX01BR0lDX0NIRUNLX09SX1JFVFVSTihvYmosIGZhbHNlKTsK
KyAgICBFSU5BX01BR0lDX0NIRUNLX09SX1JFVFVSTihvYmplY3QsIGZhbHNlKTsKIAogICAgIGlm
ICghX05QTl9JZGVudGlmaWVySXNTdHJpbmcobmFtZSkpIHsKICAgICAgICAgRVJSKCJpbnQgTlBJ
ZGVudGlmaWVyIGlzIG5vdCBzdXBwb3J0ZWQuIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9Ci0gICAgcmV0dXJuIGVpbmFfaGFzaF9maW5kKG9iai0+Y2xzLT5tZXRob2RzLCBuYW1lKTsg
Ly8gUmV0dXJucyBwb2ludGVyIGlmIGZvdW5kKHRydWUpLCAwKGZhbHNlKSBvdGhlcndpc2UuCisg
ICAgcmV0dXJuIGVpbmFfaGFzaF9maW5kKG9iamVjdC0+Y2xzLT5tZXRob2RzLCBuYW1lKTsgLy8g
UmV0dXJucyBwb2ludGVyIGlmIGZvdW5kKHRydWUpLCAwKGZhbHNlKSBvdGhlcndpc2UuCiB9CiAK
IHN0YXRpYyBib29sIGV3a19qc19tZXRob2RfaW52b2tlKE5QT2JqZWN0KiBucE9iamVjdCwgTlBJ
ZGVudGlmaWVyIG5hbWUsIGNvbnN0IE5QVmFyaWFudCogbnBBcmdzLCB1aW50MzJfdCBucEFyZ0Nv
dW50LCBOUFZhcmlhbnQqIHJlc3VsdCkKIHsKLSAgICBFd2tfSlNfT2JqZWN0KiBvYmogPSByZWlu
dGVycHJldF9jYXN0PEV3a19KU19PYmplY3QqPihucE9iamVjdCk7CisgICAgRXdrX0pTX09iamVj
dCogb2JqZWN0ID0gcmVpbnRlcnByZXRfY2FzdDxFd2tfSlNfT2JqZWN0Kj4obnBPYmplY3QpOwog
ICAgIEV3a19KU19NZXRob2QqIG1ldGhvZDsKICAgICBFd2tfSlNfVmFyaWFudCogYXJnczsKICAg
ICBFd2tfSlNfVmFyaWFudCogcmV0X3ZhbDsKIAogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOX1ZBTChucE9iamVjdCwgZmFsc2UpOwotICAgIEVJTkFfTUFHSUNfQ0hFQ0tfT1JfUkVUVVJO
KG9iaiwgZmFsc2UpOworICAgIEVJTkFfTUFHSUNfQ0hFQ0tfT1JfUkVUVVJOKG9iamVjdCwgZmFs
c2UpOwogCiAgICAgaWYgKCFfTlBOX0lkZW50aWZpZXJJc1N0cmluZyhuYW1lKSkgewogICAgICAg
ICBFUlIoImludCBOUElkZW50aWZpZXIgaXMgbm90IHN1cHBvcnRlZC4iKTsKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KIAotICAgIG1ldGhvZCA9IHN0YXRpY19jYXN0PEV3a19KU19NZXRo
b2QqPihlaW5hX2hhc2hfZmluZChvYmotPmNscy0+bWV0aG9kcywgbmFtZSkpOworICAgIG1ldGhv
ZCA9IHN0YXRpY19jYXN0PEV3a19KU19NZXRob2QqPihlaW5hX2hhc2hfZmluZChvYmplY3QtPmNs
cy0+bWV0aG9kcywgbmFtZSkpOwogICAgIGlmICghbWV0aG9kKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKQEAgLTI3Niw3ICsyNzYsNyBAQCBzdGF0aWMgYm9vbCBld2tfanNfbWV0aG9kX2ludm9r
ZShOUE9iamVjdCogbnBPYmplY3QsIE5QSWRlbnRpZmllciBuYW1lLCBjb25zdCBOUAogCiAgICAg
Zm9yICh1aW50MzJfdCBpID0gMDsgaSA8IG5wQXJnQ291bnQ7IGkrKykKICAgICAgICAgZXdrX2pz
X25wdmFyaWFudF90b192YXJpYW50KCZhcmdzW2ldLCAmbnBBcmdzW2ldKTsKLSAgICByZXRfdmFs
ID0gbWV0aG9kLT5pbnZva2Uob2JqLCBhcmdzLCBucEFyZ0NvdW50KTsKKyAgICByZXRfdmFsID0g
bWV0aG9kLT5pbnZva2Uob2JqZWN0LCBhcmdzLCBucEFyZ0NvdW50KTsKICAgICBld2tfanNfdmFy
aWFudF90b19ucHZhcmlhbnQocmV0X3ZhbCwgcmVzdWx0KTsKIAogICAgIGV3a19qc192YXJpYW50
X2ZyZWUocmV0X3ZhbCk7CkBAIC0zOTMsNyArMzkzLDcgQEAgc3RhdGljIEV3a19KU19PYmplY3Qq
IGV3a19qc19ucG9iamVjdF90b19vYmplY3QoTlBPYmplY3QqIG5wT2JqZWN0KQogICAgIE5QSWRl
bnRpZmllciogdmFsdWVzOwogICAgIHVpbnQzMl90IG5wX3Byb3BzX2NvdW50OwogICAgIEV3a19K
U19DbGFzcyogY2xzOwotICAgIEV3a19KU19PYmplY3QqIG9iajsKKyAgICBFd2tfSlNfT2JqZWN0
KiBvYmplY3Q7CiAgICAgRWluYV9JdGVyYXRvciogaXQ7CiAgICAgRXdrX0pTX1Byb3BlcnR5KiBw
cm9wOwogICAgIEphdmFTY3JpcHRPYmplY3QqIGpzbzsKQEAgLTQzNiw0MiArNDM2LDQyIEBAIHN0
YXRpYyBFd2tfSlNfT2JqZWN0KiBld2tfanNfbnBvYmplY3RfdG9fb2JqZWN0KE5QT2JqZWN0KiBu
cE9iamVjdCkKICAgICB9CiAKICAgICAvLyBDYW4ndCB1c2UgZXdrX2pzX29iamVjdF9uZXcoY2xz
KSBiZWNhdXNlIGl0IGV4cGVjdHMgY2xzLT5tZXRhIHRvIGV4aXN0LgotICAgIG9iaiA9IHN0YXRp
Y19jYXN0PEV3a19KU19PYmplY3QqPihtYWxsb2Moc2l6ZW9mKEV3a19KU19PYmplY3QpKSk7Ci0g
ICAgaWYgKCFvYmopIHsKKyAgICBvYmplY3QgPSBzdGF0aWNfY2FzdDxFd2tfSlNfT2JqZWN0Kj4o
bWFsbG9jKHNpemVvZihFd2tfSlNfT2JqZWN0KSkpOworICAgIGlmICghb2JqZWN0KSB7CiAgICAg
ICAgIEVSUigiQ291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgZXdrX2pzX29iamVjdCIpOwog
ICAgICAgICBnb3RvIGVycm9yOwogICAgIH0KIAogICAgIGZyZWUodmFsdWVzKTsKLSAgICBFSU5B
X01BR0lDX1NFVChvYmosIEVXS19KU19PQkpFQ1RfTUFHSUMpOwotICAgIG9iai0+bmFtZSA9IDA7
Ci0gICAgb2JqLT5jbHMgPSBjbHM7Ci0gICAgb2JqLT52aWV3ID0gMDsKKyAgICBFSU5BX01BR0lD
X1NFVChvYmplY3QsIEVXS19KU19PQkpFQ1RfTUFHSUMpOworICAgIG9iamVjdC0+bmFtZSA9IDA7
CisgICAgb2JqZWN0LT5jbHMgPSBjbHM7CisgICAgb2JqZWN0LT52aWV3ID0gMDsKIAogICAgIGpz
byA9IHJlaW50ZXJwcmV0X2Nhc3Q8SmF2YVNjcmlwdE9iamVjdCo+KG5wT2JqZWN0KTsKICAgICBp
ZiAoIXN0cmNtcCgiQXJyYXkiLCBqc28tPmltcC0+Y2xhc3NOYW1lKCkuYXNjaWkoKS5kYXRhKCkp
KQotICAgICAgICBvYmotPnR5cGUgPSBFV0tfSlNfT0JKRUNUX0FSUkFZOworICAgICAgICBvYmpl
Y3QtPnR5cGUgPSBFV0tfSlNfT0JKRUNUX0FSUkFZOwogICAgIGVsc2UgaWYgKCFzdHJjbXAoIkZ1
bmN0aW9uIiwganNvLT5pbXAtPmNsYXNzTmFtZSgpLmFzY2lpKCkuZGF0YSgpKSkKLSAgICAgICAg
b2JqLT50eXBlID0gRVdLX0pTX09CSkVDVF9GVU5DVElPTjsKKyAgICAgICAgb2JqZWN0LT50eXBl
ID0gRVdLX0pTX09CSkVDVF9GVU5DVElPTjsKICAgICBlbHNlCi0gICAgICAgIG9iai0+dHlwZSA9
IEVXS19KU19PQkpFQ1RfT0JKRUNUOworICAgICAgICBvYmplY3QtPnR5cGUgPSBFV0tfSlNfT0JK
RUNUX09CSkVDVDsKIAogICAgIGlmIChlaW5hX2hhc2hfcG9wdWxhdGlvbihjbHMtPnByb3BlcnRp
ZXMpIDwgMjUpCi0gICAgICAgIG9iai0+cHJvcGVydGllcyA9IGVpbmFfaGFzaF9zdHJpbmdfc21h
bGxfbmV3KDApOworICAgICAgICBvYmplY3QtPnByb3BlcnRpZXMgPSBlaW5hX2hhc2hfc3RyaW5n
X3NtYWxsX25ldygwKTsKICAgICBlbHNlCi0gICAgICAgIG9iai0+cHJvcGVydGllcyA9IGVpbmFf
aGFzaF9zdHJpbmdfc3VwZXJmYXN0X25ldygwKTsKKyAgICAgICAgb2JqZWN0LT5wcm9wZXJ0aWVz
ID0gZWluYV9oYXNoX3N0cmluZ19zdXBlcmZhc3RfbmV3KDApOwogCiAgICAgaXQgPSBlaW5hX2hh
c2hfaXRlcmF0b3JfZGF0YV9uZXcoY2xzLT5wcm9wZXJ0aWVzKTsKICAgICBFSU5BX0lURVJBVE9S
X0ZPUkVBQ0goaXQsIHByb3ApIHsKICAgICAgICAgY29uc3QgY2hhcioga2V5ID0gcHJvcC0+bmFt
ZTsKICAgICAgICAgRXdrX0pTX1ZhcmlhbnQqIHZhbHVlID0gJnByb3AtPnZhbHVlOwotICAgICAg
ICBlaW5hX2hhc2hfYWRkKG9iai0+cHJvcGVydGllcywga2V5LCB2YWx1ZSk7CisgICAgICAgIGVp
bmFfaGFzaF9hZGQob2JqZWN0LT5wcm9wZXJ0aWVzLCBrZXksIHZhbHVlKTsKICAgICB9CiAKICAg
ICBlaW5hX2l0ZXJhdG9yX2ZyZWUoaXQpOwotICAgIG9iai0+YmFzZSA9ICpyZWludGVycHJldF9j
YXN0PEphdmFTY3JpcHRPYmplY3QqPihucE9iamVjdCk7CisgICAgb2JqZWN0LT5iYXNlID0gKnJl
aW50ZXJwcmV0X2Nhc3Q8SmF2YVNjcmlwdE9iamVjdCo+KG5wT2JqZWN0KTsKIAotICAgIHJldHVy
biBvYmo7CisgICAgcmV0dXJuIG9iamVjdDsKIAogZXJyb3I6CiAgICAgZXdrX2pzX2NsYXNzX2Zy
ZWUoY2xzKTsKQEAgLTUyNywzNyArNTI3LDM3IEBAIHN0YXRpYyBFaW5hX0Jvb2wgZXdrX2pzX25w
dmFyaWFudF90b192YXJpYW50KEV3a19KU19WYXJpYW50KiBkYXRhLCBjb25zdCBOUFZhcmlhCiAK
IEV3a19KU19PYmplY3QqIGV3a19qc19vYmplY3RfbmV3KGNvbnN0IEV3a19KU19DbGFzc19NZXRh
KiBqc01ldGFDbGFzcykKIHsKLSAgICBFd2tfSlNfT2JqZWN0KiBvYmo7CisgICAgRXdrX0pTX09i
amVjdCogb2JqZWN0OwogCiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGpzTWV0
YUNsYXNzLCAwKTsKIAotICAgIG9iaiA9IHN0YXRpY19jYXN0PEV3a19KU19PYmplY3QqPihtYWxs
b2Moc2l6ZW9mKEV3a19KU19PYmplY3QpKSk7Ci0gICAgaWYgKCFvYmopIHsKKyAgICBvYmplY3Qg
PSBzdGF0aWNfY2FzdDxFd2tfSlNfT2JqZWN0Kj4obWFsbG9jKHNpemVvZihFd2tfSlNfT2JqZWN0
KSkpOworICAgIGlmICghb2JqZWN0KSB7CiAgICAgICAgIEVSUigiQ291bGQgbm90IGFsbG9jYXRl
IG1lbW9yeSBmb3IgZXdrX2pzX29iamVjdCIpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAK
LSAgICBFSU5BX01BR0lDX1NFVChvYmosIEVXS19KU19PQkpFQ1RfTUFHSUMpOwotICAgIG9iai0+
Y2xzID0gZXdrX2pzX2NsYXNzX25ldyhqc01ldGFDbGFzcyk7Ci0gICAgb2JqLT52aWV3ID0gMDsK
LSAgICBvYmotPm5hbWUgPSAwOwotICAgIG9iai0+dHlwZSA9IEVXS19KU19PQkpFQ1RfT0JKRUNU
OworICAgIEVJTkFfTUFHSUNfU0VUKG9iamVjdCwgRVdLX0pTX09CSkVDVF9NQUdJQyk7CisgICAg
b2JqZWN0LT5jbHMgPSBld2tfanNfY2xhc3NfbmV3KGpzTWV0YUNsYXNzKTsKKyAgICBvYmplY3Qt
PnZpZXcgPSAwOworICAgIG9iamVjdC0+bmFtZSA9IDA7CisgICAgb2JqZWN0LT50eXBlID0gRVdL
X0pTX09CSkVDVF9PQkpFQ1Q7CiAKLSAgICBpZiAoZWluYV9oYXNoX3BvcHVsYXRpb24ob2JqLT5j
bHMtPnByb3BlcnRpZXMpIDwgMjUpCi0gICAgICAgIG9iai0+cHJvcGVydGllcyA9IGVpbmFfaGFz
aF9zdHJpbmdfc21hbGxfbmV3KHJlaW50ZXJwcmV0X2Nhc3Q8RWluYV9GcmVlX0NiPihld2tfanNf
dmFyaWFudF9mcmVlKSk7CisgICAgaWYgKGVpbmFfaGFzaF9wb3B1bGF0aW9uKG9iamVjdC0+Y2xz
LT5wcm9wZXJ0aWVzKSA8IDI1KQorICAgICAgICBvYmplY3QtPnByb3BlcnRpZXMgPSBlaW5hX2hh
c2hfc3RyaW5nX3NtYWxsX25ldyhyZWludGVycHJldF9jYXN0PEVpbmFfRnJlZV9DYj4oZXdrX2pz
X3ZhcmlhbnRfZnJlZSkpOwogICAgIGVsc2UKLSAgICAgICAgb2JqLT5wcm9wZXJ0aWVzID0gZWlu
YV9oYXNoX3N0cmluZ19zdXBlcmZhc3RfbmV3KHJlaW50ZXJwcmV0X2Nhc3Q8RWluYV9GcmVlX0Ni
Pihld2tfanNfdmFyaWFudF9mcmVlKSk7CisgICAgICAgIG9iamVjdC0+cHJvcGVydGllcyA9IGVp
bmFfaGFzaF9zdHJpbmdfc3VwZXJmYXN0X25ldyhyZWludGVycHJldF9jYXN0PEVpbmFfRnJlZV9D
Yj4oZXdrX2pzX3ZhcmlhbnRfZnJlZSkpOwogCi0gICAgZm9yIChpbnQgaSA9IDA7IG9iai0+Y2xz
LT5tZXRhLT5wcm9wZXJ0aWVzICYmIG9iai0+Y2xzLT5tZXRhLT5wcm9wZXJ0aWVzW2ldLm5hbWU7
IGkrKykgewotICAgICAgICBFd2tfSlNfUHJvcGVydHkgcHJvcCA9IG9iai0+Y2xzLT5tZXRhLT5w
cm9wZXJ0aWVzW2ldOwotICAgICAgICBjb25zdCBjaGFyKiBrZXkgPSBvYmotPmNscy0+bWV0YS0+
cHJvcGVydGllc1tpXS5uYW1lOworICAgIGZvciAoaW50IGkgPSAwOyBvYmplY3QtPmNscy0+bWV0
YS0+cHJvcGVydGllcyAmJiBvYmplY3QtPmNscy0+bWV0YS0+cHJvcGVydGllc1tpXS5uYW1lOyBp
KyspIHsKKyAgICAgICAgRXdrX0pTX1Byb3BlcnR5IHByb3AgPSBvYmplY3QtPmNscy0+bWV0YS0+
cHJvcGVydGllc1tpXTsKKyAgICAgICAgY29uc3QgY2hhcioga2V5ID0gb2JqZWN0LT5jbHMtPm1l
dGEtPnByb3BlcnRpZXNbaV0ubmFtZTsKICAgICAgICAgRXdrX0pTX1ZhcmlhbnQqIHZhbHVlID0g
c3RhdGljX2Nhc3Q8RXdrX0pTX1ZhcmlhbnQqPihtYWxsb2Moc2l6ZW9mKEV3a19KU19WYXJpYW50
KSkpOwogICAgICAgICBpZiAoIXZhbHVlKSB7CiAgICAgICAgICAgICBFUlIoIkNvdWxkIG5vdCBh
bGxvY2F0ZSBtZW1vcnkgZm9yIGV3a19qc192YXJpYW50Iik7CiAgICAgICAgICAgICBnb3RvIGVy
cm9yOwogICAgICAgICB9CiAgICAgICAgIGlmIChwcm9wLmdldCkKLSAgICAgICAgICAgIHByb3Au
Z2V0KG9iaiwga2V5LCB2YWx1ZSk7CisgICAgICAgICAgICBwcm9wLmdldChvYmplY3QsIGtleSwg
dmFsdWUpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIHZhbHVlLT50eXBlID0gcHJvcC52
YWx1ZS50eXBlOwogICAgICAgICAgICAgc3dpdGNoICh2YWx1ZS0+dHlwZSkgewpAQCAtNTgyLDE1
ICs1ODIsMTUgQEAgRXdrX0pTX09iamVjdCogZXdrX2pzX29iamVjdF9uZXcoY29uc3QgRXdrX0pT
X0NsYXNzX01ldGEqIGpzTWV0YUNsYXNzKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGVpbmFfaGFzaF9hZGQob2JqLT5wcm9wZXJ0aWVz
LCBrZXksIHZhbHVlKTsKKyAgICAgICAgZWluYV9oYXNoX2FkZChvYmplY3QtPnByb3BlcnRpZXMs
IGtleSwgdmFsdWUpOwogICAgIH0KIAotICAgIG9iai0+YmFzZS5vYmplY3QucmVmZXJlbmNlQ291
bnQgPSAxOwotICAgIG9iai0+YmFzZS5vYmplY3QuX2NsYXNzID0gJkVXS19OUENMQVNTOwotICAg
IHJldHVybiBvYmo7CisgICAgb2JqZWN0LT5iYXNlLm9iamVjdC5yZWZlcmVuY2VDb3VudCA9IDE7
CisgICAgb2JqZWN0LT5iYXNlLm9iamVjdC5fY2xhc3MgPSAmRVdLX05QQ0xBU1M7CisgICAgcmV0
dXJuIG9iamVjdDsKIAogZXJyb3I6Ci0gICAgZXdrX2pzX29iamVjdF9mcmVlKG9iaik7CisgICAg
ZXdrX2pzX29iamVjdF9mcmVlKG9iamVjdCk7CiAgICAgcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfbWFpbi5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Vm
bC9ld2svZXdrX21haW4uY3BwCmluZGV4IGViMDMyMzMyNGJhZTgxZmUxMjhkNjhiODE3YTllYmE2
OGYxZjRhNmIuLmM1MmMwMmIwOWY5MTUzNmEzMjI4MTg4NmRlYjNmYmIzNWJlMDNlYjAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfbWFpbi5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9lZmwvZXdrL2V3a19tYWluLmNwcApAQCAtNTcsNyArNTcsNyBAQAogI2luY2x1ZGUgPGxp
YnNvdXAvc291cC5oPgogI2VuZGlmCiAKLXN0YXRpYyBpbnQgX2V3a19pbml0X2NvdW50ID0gMDsK
K3N0YXRpYyBpbnQgX2V3a0luaXRDb3VudCA9IDA7CiAKIC8qKgogICogXHZhciAgICAgX2V3a19s
b2dfZG9tCkBAIC02OSw4ICs2OSw4IEBAIHN0YXRpYyBFaW5hX0Jvb2wgX2V3a19pbml0X2JvZHko
dm9pZCk7CiAKIGludCBld2tfaW5pdCh2b2lkKQogewotICAgIGlmIChfZXdrX2luaXRfY291bnQp
Ci0gICAgICAgIHJldHVybiArK19ld2tfaW5pdF9jb3VudDsKKyAgICBpZiAoX2V3a0luaXRDb3Vu
dCkKKyAgICAgICAgcmV0dXJuICsrX2V3a0luaXRDb3VudDsKIAogICAgIGlmICghZWluYV9pbml0
KCkpCiAgICAgICAgIGdvdG8gZXJyb3JfZWluYTsKQEAgLTEwNiw3ICsxMDYsNyBAQCBpbnQgZXdr
X2luaXQodm9pZCkKICAgICAgICAgZ290byBlcnJvcl9lZGplOwogICAgIH0KIAotICAgIHJldHVy
biArK19ld2tfaW5pdF9jb3VudDsKKyAgICByZXR1cm4gKytfZXdrSW5pdENvdW50OwogCiBlcnJv
cl9lZGplOgogICAgIGVjb3JlX2V2YXNfc2h1dGRvd24oKTsKQEAgLTEyNSw5ICsxMjUsOSBAQCBl
cnJvcl9laW5hOgogCiBpbnQgZXdrX3NodXRkb3duKHZvaWQpCiB7Ci0gICAgX2V3a19pbml0X2Nv
dW50LS07Ci0gICAgaWYgKF9ld2tfaW5pdF9jb3VudCkKLSAgICAgICAgcmV0dXJuIF9ld2tfaW5p
dF9jb3VudDsKKyAgICBfZXdrSW5pdENvdW50LS07CisgICAgaWYgKF9ld2tJbml0Q291bnQpCisg
ICAgICAgIHJldHVybiBfZXdrSW5pdENvdW50OwogCiAgICAgZWNvcmVfZXZhc19zaHV0ZG93bigp
OwogICAgIGVjb3JlX3NodXRkb3duKCk7CkBAIC0xNzksMTAgKzE3OSwxMCBAQCBFaW5hX0Jvb2wg
X2V3a19pbml0X2JvZHkodm9pZCkKICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CiAgICAgfQog
Ci0gICAgV1RGOjpTdHJpbmcgd2tkaXIgPSBob21lICsgIi8ud2Via2l0IjsKLSAgICBpZiAoV2Vi
Q29yZTo6bWFrZUFsbERpcmVjdG9yaWVzKHdrZGlyKSkgewotICAgICAgICBld2tfc2V0dGluZ3Nf
d2ViX2RhdGFiYXNlX3BhdGhfc2V0KHdrZGlyLnV0ZjgoKS5kYXRhKCkpOwotICAgICAgICBld2tf
c2V0dGluZ3NfY2FjaGVfZGlyZWN0b3J5X3BhdGhfc2V0KHdrZGlyLnV0ZjgoKS5kYXRhKCkpOwor
ICAgIFdURjo6U3RyaW5nIHdlYmtpdERpcmVjdG9yeSA9IGhvbWUgKyAiLy53ZWJraXQiOworICAg
IGlmIChXZWJDb3JlOjptYWtlQWxsRGlyZWN0b3JpZXMod2Via2l0RGlyZWN0b3J5KSkgeworICAg
ICAgICBld2tfc2V0dGluZ3Nfd2ViX2RhdGFiYXNlX3BhdGhfc2V0KHdlYmtpdERpcmVjdG9yeS51
dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgZXdrX3NldHRpbmdzX2NhY2hlX2RpcmVjdG9yeV9wYXRo
X3NldCh3ZWJraXREaXJlY3RvcnkudXRmOCgpLmRhdGEoKSk7CiAgICAgfQogCiAgICAgLy8gVE9E
TzogdGhpcyBzaG91bGQgbW92ZSB0byBXZWJDb3JlLCBhbHJlYWR5IHJlcG9ydGVkIHRvIHdlYmtp
dC1ndGsgZm9sa3M6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3NldHRp
bmdzLmNwcCBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfc2V0dGluZ3MuY3BwCmluZGV4IGYw
YmE2ZWJjYjJmN2U1ZGMxMTFmZWM0NWI1ZjZjY2Q1MDM5ODNlYTYuLjY0ZjE0Zjg1NGMzZDcwYTNi
ZGE4MGJiMTY0Yzg2Y2QxMWNlNmYwZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3
ay9ld2tfc2V0dGluZ3MuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfc2V0dGlu
Z3MuY3BwCkBAIC01NiwyNiArNTYsMjYgQEAgc3RhdGljIHVpbnQ2NF90IF9ld2tfZGVmYXVsdF93
ZWJfZGF0YWJhc2VfcXVvdGEgPSAxICogMTAyNCAqIDEwMjQ7CiAKIHN0YXRpYyBXVEY6OlN0cmlu
ZyBfZXdrX3NldHRpbmdzX3dlYmtpdF9wbGF0Zm9ybV9nZXQoKQogewotICAgIFdURjo6U3RyaW5n
IHVhX3BsYXRmb3JtOworICAgIFdURjo6U3RyaW5nIHVhUGxhdGZvcm07CiAjaWYgUExBVEZPUk0o
WDExKQotICAgIHVhX3BsYXRmb3JtID0gIlgxMSI7CisgICAgdWFQbGF0Zm9ybSA9ICJYMTEiOwog
I2Vsc2UKLSAgICB1YV9wbGF0Zm9ybSA9ICJVbmtub3duIjsKKyAgICB1YVBsYXRmb3JtID0gIlVu
a25vd24iOwogI2VuZGlmCi0gICAgcmV0dXJuIHVhX3BsYXRmb3JtOworICAgIHJldHVybiB1YVBs
YXRmb3JtOwogfQogCiBzdGF0aWMgV1RGOjpTdHJpbmcgX2V3a19zZXR0aW5nc193ZWJraXRfb3Nf
dmVyc2lvbl9nZXQoKQogewotICAgIFdURjo6U3RyaW5nIHVhX29zX3ZlcnNpb247CisgICAgV1RG
OjpTdHJpbmcgdWFPc1ZlcnNpb247CiAgICAgc3RydWN0IHV0c25hbWUgbmFtZTsKIAogICAgIGlm
ICh1bmFtZSgmbmFtZSkgIT0gLTEpCi0gICAgICAgIHVhX29zX3ZlcnNpb24gPSBtYWtlU3RyaW5n
KG5hbWUuc3lzbmFtZSwgJyAnLCBuYW1lLm1hY2hpbmUpOworICAgICAgICB1YU9zVmVyc2lvbiA9
IG1ha2VTdHJpbmcobmFtZS5zeXNuYW1lLCAnICcsIG5hbWUubWFjaGluZSk7CiAgICAgZWxzZQot
ICAgICAgICB1YV9vc192ZXJzaW9uID0gIlVua25vd24iOworICAgICAgICB1YU9zVmVyc2lvbiA9
ICJVbmtub3duIjsKIAotICAgIHJldHVybiB1YV9vc192ZXJzaW9uOworICAgIHJldHVybiB1YU9z
VmVyc2lvbjsKIH0KIAogdWludDY0X3QgZXdrX3NldHRpbmdzX3dlYl9kYXRhYmFzZV9kZWZhdWx0
X3F1b3RhX2dldCgpCkBAIC0yNDUsMTAgKzI0NSwxMCBAQCB2b2lkIGV3a19zZXR0aW5nc19yZXBh
aW50X3Rocm90dGxpbmdfc2V0KGRvdWJsZSBkZWZlcnJlZFJlcGFpbnREZWxheSwgZG91YmxlIGlu
aQogICovCiBjb25zdCBjaGFyKiBld2tfc2V0dGluZ3NfZGVmYXVsdF91c2VyX2FnZW50X2dldCh2
b2lkKQogewotICAgIFdURjo6U3RyaW5nIHVhX3ZlcnNpb24gPSBtYWtlU3RyaW5nKFN0cmluZzo6
bnVtYmVyKFdFQktJVF9VU0VSX0FHRU5UX01BSk9SX1ZFUlNJT04pLCAnLicsIFN0cmluZzo6bnVt
YmVyKFdFQktJVF9VU0VSX0FHRU5UX01JTk9SX1ZFUlNJT04pLCAnKycpOwotICAgIFdURjo6U3Ry
aW5nIHN0YXRpY191YSA9IG1ha2VTdHJpbmcoIk1vemlsbGEvNS4wICgiLCBfZXdrX3NldHRpbmdz
X3dlYmtpdF9wbGF0Zm9ybV9nZXQoKSwgIjsgIiwgX2V3a19zZXR0aW5nc193ZWJraXRfb3NfdmVy
c2lvbl9nZXQoKSwgIikgQXBwbGVXZWJLaXQvIiwgdWFfdmVyc2lvbikgKyBtYWtlU3RyaW5nKCIg
KEtIVE1MLCBsaWtlIEdlY2tvKSBWZXJzaW9uLzUuMCBTYWZhcmkvIiwgdWFfdmVyc2lvbik7Cisg
ICAgV1RGOjpTdHJpbmcgdWFWZXJzaW9uID0gbWFrZVN0cmluZyhTdHJpbmc6Om51bWJlcihXRUJL
SVRfVVNFUl9BR0VOVF9NQUpPUl9WRVJTSU9OKSwgJy4nLCBTdHJpbmc6Om51bWJlcihXRUJLSVRf
VVNFUl9BR0VOVF9NSU5PUl9WRVJTSU9OKSwgJysnKTsKKyAgICBXVEY6OlN0cmluZyBzdGF0aWNV
YSA9IG1ha2VTdHJpbmcoIk1vemlsbGEvNS4wICgiLCBfZXdrX3NldHRpbmdzX3dlYmtpdF9wbGF0
Zm9ybV9nZXQoKSwgIjsgIiwgX2V3a19zZXR0aW5nc193ZWJraXRfb3NfdmVyc2lvbl9nZXQoKSwg
IikgQXBwbGVXZWJLaXQvIiwgdWFWZXJzaW9uKSArIG1ha2VTdHJpbmcoIiAoS0hUTUwsIGxpa2Ug
R2Vja28pIFZlcnNpb24vNS4wIFNhZmFyaS8iLCB1YVZlcnNpb24pOwogCi0gICAgcmV0dXJuIGVp
bmFfc3RyaW5nc2hhcmVfYWRkKHN0YXRpY191YS51dGY4KCkuZGF0YSgpKTsKKyAgICByZXR1cm4g
ZWluYV9zdHJpbmdzaGFyZV9hZGQoc3RhdGljVWEudXRmOCgpLmRhdGEoKSk7CiB9CiAKIEVpbmFf
Qm9vbCBld2tfc2V0dGluZ3NfY2FjaGVfZGlyZWN0b3J5X3BhdGhfc2V0KGNvbnN0IGNoYXIqIHBh
dGgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmUuY3BwIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
LmNwcAppbmRleCA3OTRhOTBjNTc0NmY2MGU1MjNiNmRlNWUyNTJiYmNiMDUxYjA3NTY0Li4wNThm
NjA5NDA0N2E0MmM5NGFiNDI3ZTI1Zjk3YTM0MWI3OTA3NTBiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfYmFja2luZ19zdG9yZS5jcHAKQEAgLTU1LDE0ICs1NSwx
NCBAQCBzdHJ1Y3QgX0V3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0gewogCiBzdHJ1Y3QgX0V3
a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUmVxdWVzdCB7CiAgICAgRUlOQV9JTkxJ
U1Q7Ci0gICAgdW5zaWduZWQgbG9uZyBjb2wsIHJvdzsKKyAgICB1bnNpZ25lZCBsb25nIGNvbHVt
biwgcm93OwogICAgIGZsb2F0IHpvb207CiB9OwogCiBzdHJ1Y3QgX0V3a19UaWxlZF9CYWNraW5n
X1N0b3JlX0RhdGEgewogICAgIEV2YXNfT2JqZWN0X1NtYXJ0X0NsaXBwZWRfRGF0YSBiYXNlOwog
ICAgIEV2YXNfT2JqZWN0KiBzZWxmOwotICAgIEV2YXNfT2JqZWN0KiBjb250ZW50c19jbGlwcGVy
OworICAgIEV2YXNfT2JqZWN0KiBjb250ZW50c0NsaXBwZXI7CiAgICAgc3RydWN0IHsKICAgICAg
ICAgRWluYV9Jbmxpc3QqKiBpdGVtczsKICAgICAgICAgRXZhc19Db29yZCB4LCB5LCB3aWR0aCwg
aGVpZ2h0OwpAQCAtNzAsNDIgKzcwLDQyIEBAIHN0cnVjdCBfRXdrX1RpbGVkX0JhY2tpbmdfU3Rv
cmVfRGF0YSB7CiAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICBFdmFzX0Nvb3JkIHdpZHRo
LCBoZWlnaHQ7CiAgICAgICAgICAgICBmbG9hdCB6b29tOwotICAgICAgICAgICAgRWluYV9Cb29s
IHpvb21fd2Vha19zbW9vdGhfc2NhbGUgOiAxOworICAgICAgICAgICAgRWluYV9Cb29sIHpvb21X
ZWFrU21vb3RoU2NhbGUgOiAxOwogICAgICAgICB9IHRpbGU7CiAgICAgICAgIHN0cnVjdCB7CiAg
ICAgICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgIEV2YXNfQ29vcmQgeCwgeTsKLSAg
ICAgICAgICAgIH0gY3VyLCBvbGQsIGJhc2UsIHpvb21fY2VudGVyOworICAgICAgICAgICAgfSBj
dXIsIG9sZCwgYmFzZSwgem9vbUNlbnRlcjsKICAgICAgICAgfSBvZmZzZXQ7CiAgICAgfSB2aWV3
OwotICAgIEV2YXNfQ29sb3JzcGFjZSBjc3BhY2U7CisgICAgRXZhc19Db2xvcnNwYWNlIGNvbG9y
U3BhY2U7CiAgICAgc3RydWN0IHsKICAgICAgICAgRXdrX1RpbGVfTWF0cml4KiBtYXRyaXg7CiAg
ICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBsb25nIGNvbCwgcm93OworICAg
ICAgICAgICAgdW5zaWduZWQgbG9uZyBjb2x1bW4sIHJvdzsKICAgICAgICAgfSBiYXNlOwogICAg
ICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBjb2xzLCByb3dzOwotICAg
ICAgICB9IGN1ciwgb2xkOworICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBjb2x1bW5zLCByb3dz
OworICAgICAgICB9IGN1cnJlbnQsIG9sZDsKICAgICAgICAgRXZhc19Db29yZCB3aWR0aCwgaGVp
Z2h0OwogICAgIH0gbW9kZWw7CiAgICAgc3RydWN0IHsKLSAgICAgICAgRWluYV9Cb29sICgqY2Ip
KHZvaWQqIGRhdGEsIEV3a19UaWxlKiB0aWxlLCBjb25zdCBFaW5hX1JlY3RhbmdsZSogYXJlYSk7
CisgICAgICAgIEVpbmFfQm9vbCAoKmNhbGxiYWNrKSh2b2lkKiBkYXRhLCBFd2tfVGlsZSogdGls
ZSwgY29uc3QgRWluYV9SZWN0YW5nbGUqIGFyZWEpOwogICAgICAgICB2b2lkKiBkYXRhOwotICAg
ICAgICBFaW5hX0lubGlzdCogcHJlX3JlbmRlcl9yZXF1ZXN0czsKKyAgICAgICAgRWluYV9Jbmxp
c3QqIHByZVJlbmRlclJlcXVlc3RzOwogICAgICAgICBFY29yZV9JZGxlciogaWRsZXI7CiAgICAg
ICAgIEVpbmFfQm9vbCBkaXNhYmxlZDsKICAgICAgICAgRWluYV9Cb29sIHN1c3BlbmQgOiAxOwog
ICAgIH0gcmVuZGVyOwogICAgIHN0cnVjdCB7Ci0gICAgICAgIHZvaWQqICgqcHJlX2NiKSh2b2lk
KiBkYXRhLCBFdmFzX09iamVjdCogZXdrVGlsZSk7Ci0gICAgICAgIHZvaWQqIHByZV9kYXRhOwot
ICAgICAgICB2b2lkKiAoKnBvc3RfY2IpKHZvaWQqIGRhdGEsIHZvaWQqIHByZV9kYXRhLCBFdmFz
X09iamVjdCogZXdrVGlsZSk7Ci0gICAgICAgIHZvaWQqIHBvc3RfZGF0YTsKKyAgICAgICAgdm9p
ZCogKCpwcmVDYWxsYmFjaykodm9pZCogZGF0YSwgRXZhc19PYmplY3QqIGV3a1RpbGUpOworICAg
ICAgICB2b2lkKiBwcmVEYXRhOworICAgICAgICB2b2lkKiAoKnBvc3RDYWxsYmFjaykodm9pZCog
ZGF0YSwgdm9pZCogcHJlRGF0YSwgRXZhc19PYmplY3QqIGV3a1RpbGUpOworICAgICAgICB2b2lk
KiBwb3N0RGF0YTsKICAgICB9IHByb2Nlc3M7CiAgICAgc3RydWN0IHsKICAgICAgICAgRWluYV9C
b29sIGFueSA6IDE7Ci0gICAgICAgIEVpbmFfQm9vbCBwb3MgOiAxOworICAgICAgICBFaW5hX0Jv
b2wgcG9zaXRpb24gOiAxOwogICAgICAgICBFaW5hX0Jvb2wgc2l6ZSA6IDE7CiAgICAgICAgIEVp
bmFfQm9vbCBtb2RlbCA6IDE7CiAgICAgICAgIEVpbmFfQm9vbCBvZmZzZXQgOiAxOwpAQCAtMTQw
LDIzICsxNDAsMjMgQEAgc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV91cGRhdGVzX3Byb2Nlc3MoRXdrX1RpbGVkX0JhY2tpbmdfU3QKICAgICBpZiAocHJpdi0+cmVu
ZGVyLnN1c3BlbmQgfHwgIWV2YXNfb2JqZWN0X3Zpc2libGVfZ2V0KHByaXYtPnNlbGYpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBpZiAocHJpdi0+cHJvY2Vzcy5wcmVfY2IpCi0gICAgICAgIGRh
dGEgPSBwcml2LT5wcm9jZXNzLnByZV9jYihwcml2LT5wcm9jZXNzLnByZV9kYXRhLCBwcml2LT5z
ZWxmKTsKKyAgICBpZiAocHJpdi0+cHJvY2Vzcy5wcmVDYWxsYmFjaykKKyAgICAgICAgZGF0YSA9
IHByaXYtPnByb2Nlc3MucHJlQ2FsbGJhY2socHJpdi0+cHJvY2Vzcy5wcmVEYXRhLCBwcml2LT5z
ZWxmKTsKIAogICAgIGV3a190aWxlX21hdHJpeF91cGRhdGVzX3Byb2Nlc3MocHJpdi0+bW9kZWwu
bWF0cml4KTsKIAotICAgIGlmIChwcml2LT5wcm9jZXNzLnBvc3RfY2IpCi0gICAgICAgIHByaXYt
PnByb2Nlc3MucG9zdF9jYihwcml2LT5wcm9jZXNzLnBvc3RfZGF0YSwgZGF0YSwgcHJpdi0+c2Vs
Zik7CisgICAgaWYgKHByaXYtPnByb2Nlc3MucG9zdENhbGxiYWNrKQorICAgICAgICBwcml2LT5w
cm9jZXNzLnBvc3RDYWxsYmFjayhwcml2LT5wcm9jZXNzLnBvc3REYXRhLCBkYXRhLCBwcml2LT5z
ZWxmKTsKIH0KIAogc3RhdGljIGludCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZmx1c2godm9p
ZCogZGF0YSkKIHsKICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2ID0gc3Rh
dGljX2Nhc3Q8RXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSo+KGRhdGEpOwotICAgIEV3a19U
aWxlX1VudXNlZF9DYWNoZSogdHVjID0gZXdrX3RpbGVfbWF0cml4X3VudXNlZF9jYWNoZV9nZXQo
cHJpdi0+bW9kZWwubWF0cml4KTsKKyAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHRpbGVkVW51
c2VkQ2FjaGUgPSBld2tfdGlsZV9tYXRyaXhfdW51c2VkX2NhY2hlX2dldChwcml2LT5tb2RlbC5t
YXRyaXgpOwogCi0gICAgaWYgKHR1YykgeworICAgIGlmICh0aWxlZFVudXNlZENhY2hlKSB7CiAg
ICAgICAgIERCRygiZmx1c2ggdW51c2VkIHRpbGUgY2FjaGUuIik7Ci0gICAgICAgIGV3a190aWxl
X3VudXNlZF9jYWNoZV9hdXRvX2ZsdXNoKHR1Yyk7CisgICAgICAgIGV3a190aWxlX3VudXNlZF9j
YWNoZV9hdXRvX2ZsdXNoKHRpbGVkVW51c2VkQ2FjaGUpOwogICAgIH0gZWxzZQogICAgICAgICBF
UlIoIm5vIGNhY2hlPyEiKTsKIApAQCAtMjIyLDI3ICsyMjIsMjcgQEAgc3RhdGljIHZvaWQgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfYXNzb2NpYXRlKEV3a19UaWxlZF9CYWNraW5nX1N0
b3JlX0RhdGEKIAogc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfZGlz
c29jaWF0ZShFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2LCBFd2tfVGlsZWRfQmFj
a2luZ19TdG9yZV9JdGVtKiBpdGVtLCBkb3VibGUgbGFzdFVzZWQpCiB7Ci0gICAgRXdrX1RpbGVf
VW51c2VkX0NhY2hlKiB0dWM7CisgICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0aWxlZFVudXNl
ZENhY2hlOwogICAgIGV3a190aWxlX2hpZGUoaXRlbS0+dGlsZSk7CiAgICAgaWYgKCFld2tfdGls
ZV92aXNpYmxlX2dldChpdGVtLT50aWxlKSkKICAgICAgICAgZXZhc19vYmplY3Rfc21hcnRfbWVt
YmVyX2RlbChpdGVtLT50aWxlLT5pbWFnZSk7CiAgICAgZXdrX3RpbGVfbWF0cml4X3RpbGVfcHV0
KHByaXYtPm1vZGVsLm1hdHJpeCwgaXRlbS0+dGlsZSwgbGFzdFVzZWQpOwotICAgIHR1YyA9IGV3
a190aWxlX21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7Ci0gICAg
ZXdrX3RpbGVfdW51c2VkX2NhY2hlX2F1dG9fZmx1c2godHVjKTsKKyAgICB0aWxlZFVudXNlZENh
Y2hlID0gZXdrX3RpbGVfbWF0cml4X3VudXNlZF9jYWNoZV9nZXQocHJpdi0+bW9kZWwubWF0cml4
KTsKKyAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfYXV0b19mbHVzaCh0aWxlZFVudXNlZENhY2hl
KTsKIAogICAgIGl0ZW0tPnRpbGUgPSAwOwogfQogCiBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfdGlsZV9kaXNzb2NpYXRlX2FsbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9E
YXRhKiBwcml2KQogewotICAgIEVpbmFfSW5saXN0KiBpdDsKKyAgICBFaW5hX0lubGlzdCogbGlz
dDsKICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKiBpdGVtOwogICAgIGludCBpOwog
ICAgIGRvdWJsZSBsYXN0X3VzZWQgPSBlY29yZV9sb29wX3RpbWVfZ2V0KCk7CiAKICAgICBmb3Ig
KGkgPSAwOyBpIDwgcHJpdi0+dmlldy5yb3dzOyBpKyspIHsKLSAgICAgICAgaXQgPSBwcml2LT52
aWV3Lml0ZW1zW2ldOwotICAgICAgICBFSU5BX0lOTElTVF9GT1JFQUNIKGl0LCBpdGVtKQorICAg
ICAgICBsaXN0ID0gcHJpdi0+dmlldy5pdGVtc1tpXTsKKyAgICAgICAgRUlOQV9JTkxJU1RfRk9S
RUFDSChsaXN0LCBpdGVtKQogICAgICAgICAgICAgaWYgKGl0ZW0tPnRpbGUpCiAgICAgICAgICAg
ICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfZGlzc29jaWF0ZShwcml2LCBpdGVt
LCBsYXN0X3VzZWQpOwogICAgIH0KQEAgLTI1MCw5MiArMjUwLDkyIEBAIHN0YXRpYyB2b2lkIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2Rpc3NvY2lhdGVfYWxsKEV3a19UaWxlZF9CYWNr
aW5nX1N0b3JlCiAKIHN0YXRpYyBpbmxpbmUgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfYWRkKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEq
IHByaXYsIHVuc2lnbmVkIGxvbmcgY29sdW1uLCB1bnNpZ25lZCBsb25nIHJvdywgZmxvYXQgem9v
bSwgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9Qcmlvcml0eSBwcmlvcml0eSkK
IHsKLSAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QqIHI7Cisg
ICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0KiByZXF1ZXN0Owog
Ci0gICAgciA9IHN0YXRpY19jYXN0PEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJf
UmVxdWVzdCo+KG1hbGxvYyhzaXplb2YoKnIpKSk7Ci0gICAgaWYgKCFyKQorICAgIHJlcXVlc3Qg
PSBzdGF0aWNfY2FzdDxFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3Qq
PihtYWxsb2Moc2l6ZW9mKCpyZXF1ZXN0KSkpOworICAgIGlmICghcmVxdWVzdCkKICAgICAgICAg
cmV0dXJuIEVJTkFfRkFMU0U7CiAKICAgICBpZiAocHJpb3JpdHkgPT0gUFJFX1JFTkRFUl9QUklP
UklUWV9ISUdIKQotICAgICAgICBwcml2LT5yZW5kZXIucHJlX3JlbmRlcl9yZXF1ZXN0cyA9IGVp
bmFfaW5saXN0X3ByZXBlbmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKHByaXYtPnJlbmRlci5wcmVfcmVuZGVyX3JlcXVlc3RzLCBFSU5BX0lOTElTVF9H
RVQocikpOworICAgICAgICBwcml2LT5yZW5kZXIucHJlUmVuZGVyUmVxdWVzdHMgPSBlaW5hX2lu
bGlzdF9wcmVwZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIChwcml2LT5yZW5kZXIucHJlUmVuZGVyUmVxdWVzdHMsIEVJTkFfSU5MSVNUX0dFVChyZXF1
ZXN0KSk7CiAgICAgZWxzZQotICAgICAgICBwcml2LT5yZW5kZXIucHJlX3JlbmRlcl9yZXF1ZXN0
cyA9IGVpbmFfaW5saXN0X2FwcGVuZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAocHJpdi0+cmVuZGVyLnByZV9yZW5kZXJfcmVxdWVzdHMsIEVJTkFfSU5M
SVNUX0dFVChyKSk7CisgICAgICAgIHByaXYtPnJlbmRlci5wcmVSZW5kZXJSZXF1ZXN0cyA9IGVp
bmFfaW5saXN0X2FwcGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAocHJpdi0+cmVuZGVyLnByZVJlbmRlclJlcXVlc3RzLCBFSU5BX0lOTElTVF9HRVQo
cmVxdWVzdCkpOwogCi0gICAgci0+Y29sID0gY29sdW1uOwotICAgIHItPnJvdyA9IHJvdzsKLSAg
ICByLT56b29tID0gem9vbTsKKyAgICByZXF1ZXN0LT5jb2x1bW4gPSBjb2x1bW47CisgICAgcmVx
dWVzdC0+cm93ID0gcm93OworICAgIHJlcXVlc3QtPnpvb20gPSB6b29tOwogCiAgICAgcmV0dXJu
IEVJTkFfVFJVRTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfZGVsKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEq
IHByaXYsIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUmVxdWVzdCogcmVxdWVz
dCkKIHsKLSAgICBwcml2LT5yZW5kZXIucHJlX3JlbmRlcl9yZXF1ZXN0cyA9IGVpbmFfaW5saXN0
X3JlbW92ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwcml2
LT5yZW5kZXIucHJlX3JlbmRlcl9yZXF1ZXN0cywgRUlOQV9JTkxJU1RfR0VUKHJlcXVlc3QpKTsK
KyAgICBwcml2LT5yZW5kZXIucHJlUmVuZGVyUmVxdWVzdHMgPSBlaW5hX2lubGlzdF9yZW1vdmUK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocHJpdi0+cmVuZGVy
LnByZVJlbmRlclJlcXVlc3RzLCBFSU5BX0lOTElTVF9HRVQocmVxdWVzdCkpOwogICAgIGZyZWUo
cmVxdWVzdCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJl
X1JlbmRlcl9SZXF1ZXN0KiBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1
ZXN0X2ZpcnN0KGNvbnN0IEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYpCiB7CiAg
ICAgcmV0dXJuIEVJTkFfSU5MSVNUX0NPTlRBSU5FUl9HRVQoCi0gICAgICAgICAgICAgICBwcml2
LT5yZW5kZXIucHJlX3JlbmRlcl9yZXF1ZXN0cywKKyAgICAgICAgICAgICAgIHByaXYtPnJlbmRl
ci5wcmVSZW5kZXJSZXF1ZXN0cywKICAgICAgICAgICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0
b3JlX1ByZV9SZW5kZXJfUmVxdWVzdCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfZmx1c2goRXdrX1RpbGVkX0JhY2tpbmdfU3Rv
cmVfRGF0YSogcHJpdikKIHsKLSAgICBFaW5hX0lubGlzdCoqIHBsID0gJnByaXYtPnJlbmRlci5w
cmVfcmVuZGVyX3JlcXVlc3RzOwotICAgIHdoaWxlICgqcGwpIHsKLSAgICAgICAgRXdrX1RpbGVk
X0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0KiByOwotICAgICAgICByID0gX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9maXJzdChwcml2KTsKLSAgICAg
ICAgKnBsID0gZWluYV9pbmxpc3RfcmVtb3ZlKCpwbCwgKnBsKTsKLSAgICAgICAgZnJlZShyKTsK
KyAgICBFaW5hX0lubGlzdCoqIHByZVJlbmRlckxpc3QgPSAmcHJpdi0+cmVuZGVyLnByZVJlbmRl
clJlcXVlc3RzOworICAgIHdoaWxlICgqcHJlUmVuZGVyTGlzdCkgeworICAgICAgICBFd2tfVGls
ZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QqIHJlcXVlc3Q7CisgICAgICAgIHJl
cXVlc3QgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2ZpcnN0
KHByaXYpOworICAgICAgICAqcHJlUmVuZGVyTGlzdCA9IGVpbmFfaW5saXN0X3JlbW92ZSgqcHJl
UmVuZGVyTGlzdCwgKnByZVJlbmRlckxpc3QpOworICAgICAgICBmcmVlKHJlcXVlc3QpOwogICAg
IH0KIH0KIAogc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJf
cmVxdWVzdF9jbGVhcihFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2KQogewotICAg
IEVpbmFfSW5saXN0KiogcGwgPSAmcHJpdi0+cmVuZGVyLnByZV9yZW5kZXJfcmVxdWVzdHM7Ci0g
ICAgRWluYV9Jbmxpc3QqIGl0ZXIgPSAqcGwsICogdG1wOworICAgIEVpbmFfSW5saXN0KiogcHJl
UmVuZGVyTGlzdCA9ICZwcml2LT5yZW5kZXIucHJlUmVuZGVyUmVxdWVzdHM7CisgICAgRWluYV9J
bmxpc3QqIGl0ZXIgPSAqcHJlUmVuZGVyTGlzdCwgKnRtcDsKICAgICB3aGlsZSAoaXRlcikgewot
ICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QqIHIgPQor
ICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QqIHJlcXVl
c3QgPQogICAgICAgICAgICAgRUlOQV9JTkxJU1RfQ09OVEFJTkVSX0dFVCgKICAgICAgICAgICAg
ICAgICBpdGVyLCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QpOwog
ICAgICAgICB0bXAgPSBpdGVyLT5uZXh0OwotICAgICAgICAqcGwgPSBlaW5hX2lubGlzdF9yZW1v
dmUoKnBsLCBpdGVyKTsKKyAgICAgICAgKnByZVJlbmRlckxpc3QgPSBlaW5hX2lubGlzdF9yZW1v
dmUoKnByZVJlbmRlckxpc3QsIGl0ZXIpOwogICAgICAgICBpdGVyID0gdG1wOwotICAgICAgICBm
cmVlKHIpOworICAgICAgICBmcmVlKHJlcXVlc3QpOwogICAgIH0KIH0KIAogLyogYXNzdW1lcyBw
cml2LT5wcm9jZXNzLnByZV9jYiB3YXMgY2FsbGVkIGlmIHJlcXVpcmVkISAqLwogc3RhdGljIHZv
aWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9wcm9jZXNzX3Np
bmdsZShFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2KQogewotICAgIEV3a19UaWxl
ZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUmVxdWVzdCogcmVxOworICAgIEV3a19UaWxlZF9C
YWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUmVxdWVzdCogcmVxdWVzdDsKICAgICBFaW5hX1JlY3Rh
bmdsZSBhcmVhOwotICAgIEV3a19UaWxlX01hdHJpeCogdG0gPSBwcml2LT5tb2RlbC5tYXRyaXg7
CisgICAgRXdrX1RpbGVfTWF0cml4KiB0aWxlTWF0cml4ID0gcHJpdi0+bW9kZWwubWF0cml4Owog
ICAgIEV3a19UaWxlKiB0aWxlOwotICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSogdHVjOwotICAg
IHVuc2lnbmVkIGxvbmcgY29sLCByb3c7CisgICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0aWxl
ZFVudXNlZENhY2hlOworICAgIHVuc2lnbmVkIGxvbmcgY29sdW1uLCByb3c7CiAgICAgZmxvYXQg
em9vbTsKICAgICBkb3VibGUgbGFzdF91c2VkID0gZWNvcmVfbG9vcF90aW1lX2dldCgpOwogCi0g
ICAgcmVxID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9maXJz
dChwcml2KTsKLSAgICBpZiAoIXJlcSkKKyAgICByZXF1ZXN0ID0gX2V3a190aWxlZF9iYWNraW5n
X3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9maXJzdChwcml2KTsKKyAgICBpZiAoIXJlcXVlc3Qp
CiAgICAgICAgIHJldHVybjsKIAotICAgIGNvbCA9IHJlcS0+Y29sOwotICAgIHJvdyA9IHJlcS0+
cm93OwotICAgIHpvb20gPSByZXEtPnpvb207CisgICAgY29sdW1uID0gcmVxdWVzdC0+Y29sdW1u
OworICAgIHJvdyA9IHJlcXVlc3QtPnJvdzsKKyAgICB6b29tID0gcmVxdWVzdC0+em9vbTsKIAot
ICAgIGlmIChld2tfdGlsZV9tYXRyaXhfdGlsZV9leGFjdF9leGlzdHModG0sIGNvbCwgcm93LCB6
b29tKSkgewotICAgICAgICBEQkcoIm5vIHByZS1yZW5kZXIgcmVxdWlyZWQgZm9yIHRpbGUgJWx1
LCVsdSBAICVmLiIsIGNvbCwgcm93LCB6b29tKTsKKyAgICBpZiAoZXdrX3RpbGVfbWF0cml4X3Rp
bGVfZXhhY3RfZXhpc3RzKHRpbGVNYXRyaXgsIGNvbHVtbiwgcm93LCB6b29tKSkgeworICAgICAg
ICBEQkcoIm5vIHByZS1yZW5kZXIgcmVxdWlyZWQgZm9yIHRpbGUgJWx1LCVsdSBAICVmLiIsIGNv
bHVtbiwgcm93LCB6b29tKTsKICAgICAgICAgZ290byBlbmQ7CiAgICAgfQogCi0gICAgdGlsZSA9
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX25ldyhwcml2LCBjb2wsIHJvdywgem9vbSk7
CisgICAgdGlsZSA9IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX25ldyhwcml2LCBjb2x1
bW4sIHJvdywgem9vbSk7CiAgICAgaWYgKCF0aWxlKQogICAgICAgICBnb3RvIGVuZDsKIApAQCAt
MzQ0LDMzICszNDQsMzMgQEAgc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3By
ZV9yZW5kZXJfcmVxdWVzdF9wcm9jZXNzX3NpbmdsZShFd2tfVGlsZWQKICAgICBhcmVhLncgPSBw
cml2LT52aWV3LnRpbGUud2lkdGg7CiAgICAgYXJlYS5oID0gcHJpdi0+dmlldy50aWxlLmhlaWdo
dDsKIAotICAgIHByaXYtPnJlbmRlci5jYihwcml2LT5yZW5kZXIuZGF0YSwgdGlsZSwgJmFyZWEp
OworICAgIHByaXYtPnJlbmRlci5jYWxsYmFjayhwcml2LT5yZW5kZXIuZGF0YSwgdGlsZSwgJmFy
ZWEpOwogICAgIGV2YXNfb2JqZWN0X2ltYWdlX2RhdGFfdXBkYXRlX2FkZCgKICAgICAgICAgdGls
ZS0+aW1hZ2UsCiAgICAgICAgIGFyZWEueCwgYXJlYS55LCBhcmVhLncsIGFyZWEuaCk7Ci0gICAg
ZXdrX3RpbGVfbWF0cml4X3RpbGVfdXBkYXRlc19jbGVhcih0bSwgdGlsZSk7CisgICAgZXdrX3Rp
bGVfbWF0cml4X3RpbGVfdXBkYXRlc19jbGVhcih0aWxlTWF0cml4LCB0aWxlKTsKIAotICAgIGV3
a190aWxlX21hdHJpeF90aWxlX3B1dCh0bSwgdGlsZSwgbGFzdF91c2VkKTsKKyAgICBld2tfdGls
ZV9tYXRyaXhfdGlsZV9wdXQodGlsZU1hdHJpeCwgdGlsZSwgbGFzdF91c2VkKTsKIAogZW5kOgot
ICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfZGVsKHByaXYs
IHJlcSk7Ci0gICAgdHVjID0gZXdrX3RpbGVfbWF0cml4X3VudXNlZF9jYWNoZV9nZXQocHJpdi0+
bW9kZWwubWF0cml4KTsKLSAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfYXV0b19mbHVzaCh0dWMp
OworICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfZGVsKHBy
aXYsIHJlcXVlc3QpOworICAgIHRpbGVkVW51c2VkQ2FjaGUgPSBld2tfdGlsZV9tYXRyaXhfdW51
c2VkX2NhY2hlX2dldChwcml2LT5tb2RlbC5tYXRyaXgpOworICAgIGV3a190aWxlX3VudXNlZF9j
YWNoZV9hdXRvX2ZsdXNoKHRpbGVkVW51c2VkQ2FjaGUpOwogfQogCiBzdGF0aWMgRWluYV9Cb29s
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Byb2Nlc3NfaWRsZXJfY2Iodm9pZCogZGF0
YSkKIHsKICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2ID0gc3RhdGljX2Nh
c3Q8RXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSo+KGRhdGEpOwogCi0gICAgaWYgKHByaXYt
PnByb2Nlc3MucHJlX2NiKQotICAgICAgICBkYXRhID0gcHJpdi0+cHJvY2Vzcy5wcmVfY2IocHJp
di0+cHJvY2Vzcy5wcmVfZGF0YSwgcHJpdi0+c2VsZik7CisgICAgaWYgKHByaXYtPnByb2Nlc3Mu
cHJlQ2FsbGJhY2spCisgICAgICAgIGRhdGEgPSBwcml2LT5wcm9jZXNzLnByZUNhbGxiYWNrKHBy
aXYtPnByb2Nlc3MucHJlRGF0YSwgcHJpdi0+c2VsZik7CiAKICAgICBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X3Byb2Nlc3Nfc2luZ2xlKHByaXYpOwogCi0gICAg
aWYgKHByaXYtPnByb2Nlc3MucG9zdF9jYikKLSAgICAgICAgcHJpdi0+cHJvY2Vzcy5wb3N0X2Ni
KHByaXYtPnByb2Nlc3MucG9zdF9kYXRhLCBkYXRhLCBwcml2LT5zZWxmKTsKKyAgICBpZiAocHJp
di0+cHJvY2Vzcy5wb3N0Q2FsbGJhY2spCisgICAgICAgIHByaXYtPnByb2Nlc3MucG9zdENhbGxi
YWNrKHByaXYtPnByb2Nlc3MucG9zdERhdGEsIGRhdGEsIHByaXYtPnNlbGYpOwogCi0gICAgaWYg
KCFwcml2LT5yZW5kZXIucHJlX3JlbmRlcl9yZXF1ZXN0cykgeworICAgIGlmICghcHJpdi0+cmVu
ZGVyLnByZVJlbmRlclJlcXVlc3RzKSB7CiAgICAgICAgIHByaXYtPnJlbmRlci5pZGxlciA9IDA7
CiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwogICAgIH0KQEAgLTQyMCwzOCArNDIwLDM4IEBA
IHN0YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2VuYWJsZV9yZW5kZXIo
RXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfCiAKIHN0YXRpYyBpbmxpbmUgRWluYV9Cb29sIF9ld2tf
dGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2ZpbGwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0
YSogcHJpdiwgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSogaXRlbSwgdW5zaWduZWQgbG9u
ZyBjb2x1bW4sIHVuc2lnbmVkIGxvbmcgcm93KQogewotICAgIHVuc2lnbmVkIGxvbmcgbV9jb2wg
PSBwcml2LT5tb2RlbC5iYXNlLmNvbCArIGNvbHVtbjsKLSAgICB1bnNpZ25lZCBsb25nIG1fcm93
ID0gcHJpdi0+bW9kZWwuYmFzZS5yb3cgKyByb3c7Ci0gICAgZG91YmxlIGxhc3RfdXNlZCA9IGVj
b3JlX2xvb3BfdGltZV9nZXQoKTsKKyAgICB1bnNpZ25lZCBsb25nIGN1cnJlbnRDb2x1bW4gPSBw
cml2LT5tb2RlbC5iYXNlLmNvbHVtbiArIGNvbHVtbjsKKyAgICB1bnNpZ25lZCBsb25nIGN1cnJl
bnRSb3cgPSBwcml2LT5tb2RlbC5iYXNlLnJvdyArIHJvdzsKKyAgICBkb3VibGUgbGFzdFVzZWQg
PSBlY29yZV9sb29wX3RpbWVfZ2V0KCk7CiAKLSAgICBpZiAobV9jb2wgPj0gcHJpdi0+bW9kZWwu
Y3VyLmNvbHMgfHwgbV9yb3cgPj0gcHJpdi0+bW9kZWwuY3VyLnJvd3MpIHsKKyAgICBpZiAoY3Vy
cmVudENvbHVtbiA+PSBwcml2LT5tb2RlbC5jdXJyZW50LmNvbHVtbnMgfHwgY3VycmVudFJvdyA+
PSBwcml2LT5tb2RlbC5jdXJyZW50LnJvd3MpIHsKICAgICAgICAgaWYgKGl0ZW0tPnRpbGUpCi0g
ICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9kaXNzb2NpYXRlKHByaXYs
IGl0ZW0sIGxhc3RfdXNlZCk7CisgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
dGlsZV9kaXNzb2NpYXRlKHByaXYsIGl0ZW0sIGxhc3RVc2VkKTsKICAgICB9IGVsc2UgewogICAg
ICAgICBFd2tfVGlsZSogdGlsZTsKICAgICAgICAgY29uc3QgZmxvYXQgem9vbSA9IHByaXYtPnZp
ZXcudGlsZS56b29tOwogCiAgICAgICAgIGlmIChpdGVtLT50aWxlKSB7CiAgICAgICAgICAgICBF
d2tfVGlsZSogb2xkID0gaXRlbS0+dGlsZTsKLSAgICAgICAgICAgIGlmIChvbGQtPnJvdyAhPSBt
X3JvdyB8fCBvbGQtPmNvbCAhPSBtX2NvbCB8fCBvbGQtPnpvb20gIT0gem9vbSkKLSAgICAgICAg
ICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9kaXNzb2NpYXRlKHByaXYsIGl0
ZW0sIGxhc3RfdXNlZCk7Ci0gICAgICAgICAgICBlbHNlIGlmIChvbGQtPnJvdyA9PSBtX3JvdyAm
JiBvbGQtPmNvbCA9PSBtX2NvbCAmJiBvbGQtPnpvb20gPT0gem9vbSkKKyAgICAgICAgICAgIGlm
IChvbGQtPnJvdyAhPSBjdXJyZW50Um93IHx8IG9sZC0+Y29sICE9IGN1cnJlbnRDb2x1bW4gfHwg
b2xkLT56b29tICE9IHpvb20pCisgICAgICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX3RpbGVfZGlzc29jaWF0ZShwcml2LCBpdGVtLCBsYXN0VXNlZCk7CisgICAgICAgICAgICBl
bHNlIGlmIChvbGQtPnJvdyA9PSBjdXJyZW50Um93ICYmIG9sZC0+Y29sID09IGN1cnJlbnRDb2x1
bW4gJiYgb2xkLT56b29tID09IHpvb20pCiAgICAgICAgICAgICAgICAgZ290byBlbmQ7CiAgICAg
ICAgIH0KIAotICAgICAgICB0aWxlID0gZXdrX3RpbGVfbWF0cml4X3RpbGVfZXhhY3RfZ2V0KHBy
aXYtPm1vZGVsLm1hdHJpeCwgbV9jb2wsIG1fcm93LCB6b29tKTsKKyAgICAgICAgdGlsZSA9IGV3
a190aWxlX21hdHJpeF90aWxlX2V4YWN0X2dldChwcml2LT5tb2RlbC5tYXRyaXgsIGN1cnJlbnRD
b2x1bW4sIGN1cnJlbnRSb3csIHpvb20pOwogCiAgICAgICAgIGlmICghdGlsZSkgewogICAgICAg
ICAgICAgLyogTk9URTogaXQgbmV2ZXIgcmV0dXJucyAwIGlmIGl0LT50aWxlIHdhcyBzZXQhICov
CiAgICAgICAgICAgICBpZiAoaXRlbS0+dGlsZSkgewogICAgICAgICAgICAgICAgIENSSVRJQ0FM
KCJpdC0+dGlsZT0lcCwgYnV0IGl0IHNob3VsZCBiZSAwISIsIGl0ZW0tPnRpbGUpOwogICAgICAg
ICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2Rpc3NvY2lhdGUocHJpdiwg
aXRlbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGxhc3RfdXNlZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBsYXN0VXNlZCk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAg
ICAgIC8qIERvIG5vdCBhZGQgbmV3IHJlcXVlc3RzIHRvIHRoZSByZW5kZXIgcXVldWUgKi8KICAg
ICAgICAgICAgIGlmICghcHJpdi0+cmVuZGVyLnN1c3BlbmQpIHsKLSAgICAgICAgICAgICAgICB0
aWxlID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfbmV3KHByaXYsIG1fY29sLCBtX3Jv
dywgem9vbSk7CisgICAgICAgICAgICAgICAgdGlsZSA9IF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV90aWxlX25ldyhwcml2LCBjdXJyZW50Q29sdW1uLCBjdXJyZW50Um93LCB6b29tKTsKICAgICAg
ICAgICAgICAgICBpZiAoIXRpbGUpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBFSU5BX0ZB
TFNFOwogICAgICAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2Fzc29j
aWF0ZShwcml2LCB0aWxlLCBpdGVtKTsKQEAgLTQ1OSw3ICs0NTksNyBAQCBzdGF0aWMgaW5saW5l
IEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9maWxsKEV3a19UaWxlZF9C
YWNraW5nX1N0bwogICAgICAgICB9IGVsc2UgaWYgKHRpbGUgIT0gaXRlbS0+dGlsZSkgewogICAg
ICAgICAgICAgaWYgKGl0ZW0tPnRpbGUpCiAgICAgICAgICAgICAgICAgX2V3a190aWxlZF9iYWNr
aW5nX3N0b3JlX3RpbGVfZGlzc29jaWF0ZShwcml2LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbSwgbGFzdF91c2VkKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0s
IGxhc3RVc2VkKTsKICAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2Fz
c29jaWF0ZShwcml2LCB0aWxlLCBpdGVtKTsKICAgICAgICAgfQogCkBAIC00NzMsMzEgKzQ3Mywz
MSBAQCBlbmQ6CiAKIHN0YXRpYyBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKiBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9hZGQoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSog
cHJpdiwgdW5zaWduZWQgbG9uZyBjb2x1bW4sIHVuc2lnbmVkIGxvbmcgcm93KQogewotICAgIEV3
a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0qIGl0OwotICAgIEV2YXNfQ29vcmQgeCwgeSwgdHcs
IHRoOworICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0qIGl0ZW07CisgICAgRXZhc19D
b29yZCB4LCB5LCB0aWxlV2lkdGgsIHRpbGVIZWlnaHQ7CiAKLSAgICBEQkcoIm89JXAiLCBwcml2
LT5zZWxmKTsKKyAgICBEQkcoImV3a1RpbGUlcCIsIHByaXYtPnNlbGYpOwogCi0gICAgaXQgPSBz
dGF0aWNfY2FzdDxFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKj4obWFsbG9jKHNpemVvZigq
aXQpKSk7Ci0gICAgaWYgKCFpdCkKKyAgICBpdGVtID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGVkX0Jh
Y2tpbmdfU3RvcmVfSXRlbSo+KG1hbGxvYyhzaXplb2YoKml0ZW0pKSk7CisgICAgaWYgKCFpdGVt
KQogICAgICAgICByZXR1cm4gMDsKIAotICAgIHR3ID0gcHJpdi0+dmlldy50aWxlLndpZHRoOwot
ICAgIHRoID0gcHJpdi0+dmlldy50aWxlLmhlaWdodDsKLSAgICB4ID0gcHJpdi0+dmlldy5vZmZz
ZXQuYmFzZS54ICsgcHJpdi0+dmlldy54ICsgdHcgICpjb2x1bW47Ci0gICAgeSA9IHByaXYtPnZp
ZXcub2Zmc2V0LmJhc2UueSArIHByaXYtPnZpZXcueSArIHRoICAqcm93OworICAgIHRpbGVXaWR0
aCA9IHByaXYtPnZpZXcudGlsZS53aWR0aDsKKyAgICB0aWxlSGVpZ2h0ID0gcHJpdi0+dmlldy50
aWxlLmhlaWdodDsKKyAgICB4ID0gcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54ICsgcHJpdi0+dmll
dy54ICsgdGlsZVdpZHRoICAqY29sdW1uOworICAgIHkgPSBwcml2LT52aWV3Lm9mZnNldC5iYXNl
LnkgKyBwcml2LT52aWV3LnkgKyB0aWxlSGVpZ2h0ICAqcm93OwogCi0gICAgaXQtPnRpbGUgPSAw
OworICAgIGl0ZW0tPnRpbGUgPSAwOwogCi0gICAgaXQtPnNtb290aF9zY2FsZSA9IHByaXYtPnZp
ZXcudGlsZS56b29tX3dlYWtfc21vb3RoX3NjYWxlOwotICAgIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9pdGVtX21vdmUoaXQsIHgsIHkpOwotICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9p
dGVtX3Jlc2l6ZShpdCwgdHcsIHRoKTsKLSAgICBpZiAoIV9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV9pdGVtX2ZpbGwocHJpdiwgaXQsIGNvbHVtbiwgcm93KSkgewotICAgICAgICBmcmVlKGl0KTsK
KyAgICBpdGVtLT5zbW9vdGhfc2NhbGUgPSBwcml2LT52aWV3LnRpbGUuem9vbVdlYWtTbW9vdGhT
Y2FsZTsKKyAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9tb3ZlKGl0ZW0sIHgsIHkp
OworICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Jlc2l6ZShpdGVtLCB0aWxlV2lk
dGgsIHRpbGVIZWlnaHQpOworICAgIGlmICghX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1f
ZmlsbChwcml2LCBpdGVtLCBjb2x1bW4sIHJvdykpIHsKKyAgICAgICAgZnJlZShpdGVtKTsKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgcmV0dXJuIGl0OworICAgIHJldHVybiBpdGVt
OwogfQogCiBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9kZWwoRXdr
X1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdiwgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVf
SXRlbSogaXRlbSkKQEAgLTUyNyw0MCArNTI3LDQwIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfY2hhbmdlZChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRh
CiAgICAgcHJpdi0+Y2hhbmdlZC5hbnkgPSBFSU5BX1RSVUU7CiB9CiAKLXN0YXRpYyB2b2lkIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X2NvbHNfZW5kX2RlbChFd2tfVGlsZWRfQmFja2lu
Z19TdG9yZV9EYXRhKiBwcml2LCBFaW5hX0lubGlzdCoqIHBfcm93LCB1bnNpZ25lZCBpbnQgY291
bnQpCitzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19jb2xzX2VuZF9k
ZWwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdiwgRWluYV9Jbmxpc3QqKiByb3dM
aXN0LCB1bnNpZ25lZCBpbnQgY291bnQpCiB7Ci0gICAgRWluYV9Jbmxpc3QqIG47CisgICAgRWlu
YV9Jbmxpc3QqIG5leHRJdGVtOwogICAgIHVuc2lnbmVkIGludCBpOwogCiAgICAgaWYgKCFjb3Vu
dCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbiA9ICgqcF9yb3cpLT5sYXN0OworICAgIG5leHRJ
dGVtID0gKCpyb3dMaXN0KS0+bGFzdDsKIAogICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsr
KSB7Ci0gICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0qIGl0OwotICAgICAgICBp
dCA9IEVJTkFfSU5MSVNUX0NPTlRBSU5FUl9HRVQobiwgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVf
SXRlbSk7Ci0gICAgICAgIG4gPSBuLT5wcmV2OwotICAgICAgICAqcF9yb3cgPSBlaW5hX2lubGlz
dF9yZW1vdmUoKnBfcm93LCBFSU5BX0lOTElTVF9HRVQoaXQpKTsKLSAgICAgICAgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX2l0ZW1fZGVsKHByaXYsIGl0KTsKKyAgICAgICAgRXdrX1RpbGVkX0Jh
Y2tpbmdfU3RvcmVfSXRlbSogaXRlbTsKKyAgICAgICAgaXRlbSA9IEVJTkFfSU5MSVNUX0NPTlRB
SU5FUl9HRVQobmV4dEl0ZW0sIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0pOworICAgICAg
ICBuZXh0SXRlbSA9IG5leHRJdGVtLT5wcmV2OworICAgICAgICAqcm93TGlzdCA9IGVpbmFfaW5s
aXN0X3JlbW92ZSgqcm93TGlzdCwgRUlOQV9JTkxJU1RfR0VUKGl0ZW0pKTsKKyAgICAgICAgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZGVsKHByaXYsIGl0ZW0pOwogICAgIH0KIH0KIAot
c3RhdGljIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19jb2xzX2VuZF9h
ZGQoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdiwgRWluYV9Jbmxpc3QqKiBwX3Jv
dywgdW5zaWduZWQgaW50IGJhc2VfY29sdW1uLCB1bnNpZ25lZCBpbnQgY291bnQpCitzdGF0aWMg
RWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X2NvbHNfZW5kX2FkZChFd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2LCBFaW5hX0lubGlzdCoqIHJvd0xpc3QsIHVu
c2lnbmVkIGludCBiYXNlQ29sdW1uLCB1bnNpZ25lZCBpbnQgY291bnQpCiB7Ci0gICAgdW5zaWdu
ZWQgaW50IGksIHIgPSBwX3JvdyAtIHByaXYtPnZpZXcuaXRlbXM7CisgICAgdW5zaWduZWQgaW50
IGksIHJvdyA9IHJvd0xpc3QgLSBwcml2LT52aWV3Lml0ZW1zOwogCi0gICAgZm9yIChpID0gMDsg
aSA8IGNvdW50OyBpKyssIGJhc2VfY29sdW1uKyspIHsKKyAgICBmb3IgKGkgPSAwOyBpIDwgY291
bnQ7IGkrKywgYmFzZUNvbHVtbisrKSB7CiAgICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3Jl
X0l0ZW0qIGl0OwogCi0gICAgICAgIGl0ID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1f
YWRkKHByaXYsIGJhc2VfY29sdW1uLCByKTsKKyAgICAgICAgaXQgPSBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfaXRlbV9hZGQocHJpdiwgYmFzZUNvbHVtbiwgcm93KTsKICAgICAgICAgaWYgKCFp
dCkgewotICAgICAgICAgICAgQ1JJVElDQUwoImZhaWxlZCB0byBhZGQgY29sdW1uICV1IG9mICV1
IGluIHJvdyAldS4iLCBpLCBjb3VudCwgcik7Ci0gICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfdmlld19jb2xzX2VuZF9kZWwocHJpdiwgcF9yb3csIGkpOworICAgICAgICAgICAg
Q1JJVElDQUwoImZhaWxlZCB0byBhZGQgY29sdW1uICV1IG9mICV1IGluIHJvdyAldS4iLCBpLCBj
b3VudCwgcm93KTsKKyAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X2Nv
bHNfZW5kX2RlbChwcml2LCByb3dMaXN0LCBpKTsKICAgICAgICAgICAgIHJldHVybiBFSU5BX0ZB
TFNFOwogICAgICAgICB9CiAKLSAgICAgICAgKnBfcm93ID0gZWluYV9pbmxpc3RfYXBwZW5kKCpw
X3JvdywgRUlOQV9JTkxJU1RfR0VUKGl0KSk7CisgICAgICAgICpyb3dMaXN0ID0gZWluYV9pbmxp
c3RfYXBwZW5kKCpyb3dMaXN0LCBFSU5BX0lOTElTVF9HRVQoaXQpKTsKICAgICB9CiAgICAgcmV0
dXJuIEVJTkFfVFJVRTsKIH0KQEAgLTU2OCwxMCArNTY4LDEwIEBAIHN0YXRpYyBFaW5hX0Jvb2wg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfY29sc19lbmRfYWRkKEV3a19UaWxlZF9CYWNr
aW5nX1N0CiBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19yb3dfZGVs
KEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYsIEVpbmFfSW5saXN0KiByb3cpCiB7
CiAgICAgd2hpbGUgKHJvdykgewotICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVt
KiBpdDsKLSAgICAgICAgaXQgPSBFSU5BX0lOTElTVF9DT05UQUlORVJfR0VUKHJvdywgRXdrX1Rp
bGVkX0JhY2tpbmdfU3RvcmVfSXRlbSk7CisgICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3Jl
X0l0ZW0qIGl0ZW07CisgICAgICAgIGl0ZW0gPSBFSU5BX0lOTElTVF9DT05UQUlORVJfR0VUKHJv
dywgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSk7CiAgICAgICAgIHJvdyA9IHJvdy0+bmV4
dDsKLSAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZGVsKHByaXYsIGl0KTsK
KyAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZGVsKHByaXYsIGl0ZW0pOwog
ICAgIH0KIH0KIApAQCAtNjExLDggKzYxMSw4IEBAIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9yZW5kZXIodm9pZCogZGF0YSwgRXdrX1RpbGUqIHRpbGUsIGNvbnN0IEVpCiAg
ICAgaWYgKHByaXYtPnZpZXcudGlsZS53aWR0aCAhPSB0aWxlLT53aWR0aCB8fCBwcml2LT52aWV3
LnRpbGUuaGVpZ2h0ICE9IHRpbGUtPmhlaWdodCkKICAgICAgICAgcmV0dXJuOyAvLyB0b2RvOiBy
ZW1vdmUgbWUgbGF0ZXIsIGRvbid0IGV2ZW4gZmxhZyBhcyBkaXJ0eSEKIAotICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOKHByaXYtPnJlbmRlci5jYik7Ci0gICAgaWYgKCFwcml2LT5yZW5k
ZXIuY2IocHJpdi0+cmVuZGVyLmRhdGEsIHRpbGUsIGFyZWEpKQorICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOKHByaXYtPnJlbmRlci5jYWxsYmFjayk7CisgICAgaWYgKCFwcml2LT5yZW5k
ZXIuY2FsbGJhY2socHJpdi0+cmVuZGVyLmRhdGEsIHRpbGUsIGFyZWEpKQogICAgICAgICByZXR1
cm47CiAKICAgICBldmFzX29iamVjdF9pbWFnZV9kYXRhX3VwZGF0ZV9hZGQodGlsZS0+aW1hZ2Us
IGFyZWEtPngsIGFyZWEtPnksIGFyZWEtPncsIGFyZWEtPmgpOwpAQCAtNjI5LDI3ICs2MjksMjcg
QEAgc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9tb2RlbF9tYXRy
aXhfY3JlYXRlKEV3a19UaWxlZF9CYWNraW4KICAgICAgICAgZXdrX3RpbGVfbWF0cml4X2ZyZWUo
cHJpdi0+bW9kZWwubWF0cml4KTsKICAgICB9CiAKLSAgICBwcml2LT5tb2RlbC5tYXRyaXggPSBl
d2tfdGlsZV9tYXRyaXhfbmV3KHRpbGVVbnVzZWRDYWNoZSwgcHJpdi0+bW9kZWwuY3VyLmNvbHMs
IHByaXYtPm1vZGVsLmN1ci5yb3dzLCBwcml2LT5jc3BhY2UsIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9yZW5kZXIsIHByaXYpOworICAgIHByaXYtPm1vZGVsLm1hdHJpeCA9IGV3a190aWxlX21h
dHJpeF9uZXcodGlsZVVudXNlZENhY2hlLCBwcml2LT5tb2RlbC5jdXJyZW50LmNvbHVtbnMsIHBy
aXYtPm1vZGVsLmN1cnJlbnQucm93cywgcHJpdi0+Y29sb3JTcGFjZSwgX2V3a190aWxlZF9iYWNr
aW5nX3N0b3JlX3JlbmRlciwgcHJpdik7CiB9CiAKIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9zbWFydF9tZW1iZXJfZGVsKEV2YXNfT2JqZWN0KiBld2tUaWxlLCBFdmFzX09i
amVjdCogbWVtYmVyKQogewogICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKGV3a1RpbGUsIHBy
aXYpOwotICAgIGlmICghcHJpdi0+Y29udGVudHNfY2xpcHBlcikKKyAgICBpZiAoIXByaXYtPmNv
bnRlbnRzQ2xpcHBlcikKICAgICAgICAgcmV0dXJuOwogICAgIGV2YXNfb2JqZWN0X2NsaXBfdW5z
ZXQobWVtYmVyKTsKLSAgICBpZiAoIWV2YXNfb2JqZWN0X2NsaXBlZXNfZ2V0KHByaXYtPmNvbnRl
bnRzX2NsaXBwZXIpKQotICAgICAgICBldmFzX29iamVjdF9oaWRlKHByaXYtPmNvbnRlbnRzX2Ns
aXBwZXIpOworICAgIGlmICghZXZhc19vYmplY3RfY2xpcGVlc19nZXQocHJpdi0+Y29udGVudHND
bGlwcGVyKSkKKyAgICAgICAgZXZhc19vYmplY3RfaGlkZShwcml2LT5jb250ZW50c0NsaXBwZXIp
OwogfQogCiBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfbWVtYmVy
X2FkZChFdmFzX09iamVjdCogZXdrVGlsZSwgRXZhc19PYmplY3QqIG1lbWJlcikKIHsKICAgICBQ
UklWX0RBVEFfR0VUX09SX1JFVFVSTihld2tUaWxlLCBwcml2KTsKLSAgICBpZiAoIXByaXYtPmNv
bnRlbnRzX2NsaXBwZXIpCisgICAgaWYgKCFwcml2LT5jb250ZW50c0NsaXBwZXIpCiAgICAgICAg
IHJldHVybjsKLSAgICBldmFzX29iamVjdF9jbGlwX3NldChtZW1iZXIsIHByaXYtPmNvbnRlbnRz
X2NsaXBwZXIpOworICAgIGV2YXNfb2JqZWN0X2NsaXBfc2V0KG1lbWJlciwgcHJpdi0+Y29udGVu
dHNDbGlwcGVyKTsKICAgICBpZiAoZXZhc19vYmplY3RfdmlzaWJsZV9nZXQoZXdrVGlsZSkpCi0g
ICAgICAgIGV2YXNfb2JqZWN0X3Nob3cocHJpdi0+Y29udGVudHNfY2xpcHBlcik7CisgICAgICAg
IGV2YXNfb2JqZWN0X3Nob3cocHJpdi0+Y29udGVudHNDbGlwcGVyKTsKIH0KIAogI2lmZGVmIERF
QlVHX01FTV9MRUFLUwpAQCAtNjc2LDkgKzY3Niw5IEBAIHN0YXRpYyBFaW5hX0Jvb2wgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX3NpZ191c3Iodm9pZCogZGF0YSwgaW50IHR5cGUsIHZvaWQqIGV2
CiAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdiA9IChFd2tfVGlsZWRfQmFj
a2luZ19TdG9yZV9EYXRhKilkYXRhOwogCiAgICAgaWYgKHNpZy0+bnVtYmVyID09IDIpIHsKLSAg
ICAgICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0dWM7Ci0gICAgICAgIHR1YyA9IGV3a190aWxl
X21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7Ci0gICAgICAgIGV3
a190aWxlX3VudXNlZF9jYWNoZV9hdXRvX2ZsdXNoKHR1Yyk7CisgICAgICAgIEV3a19UaWxlX1Vu
dXNlZF9DYWNoZSogdGlsaWVVbnVzZWRDYWNoZTsKKyAgICAgICAgdGlsaWVVbnVzZWRDYWNoZSA9
IGV3a190aWxlX21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7Cisg
ICAgICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9hdXRvX2ZsdXNoKHRpbGllVW51c2VkQ2FjaGUp
OwogICAgIH0KIAogICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X2RiZyhwcml2KTsK
QEAgLTY5MSw3ICs2OTEsNyBAQCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
c21hcnRfYWRkKEV2YXNfT2JqZWN0KiBld2tUaWxlKQogewogICAgIEV3a19UaWxlZF9CYWNraW5n
X1N0b3JlX0RhdGEqIHByaXY7CiAKLSAgICBEQkcoIm89JXAiLCBld2tUaWxlKTsKKyAgICBEQkco
ImV3a1RpbGU9JXAiLCBld2tUaWxlKTsKIAogICAgIHByaXYgPSBzdGF0aWNfY2FzdDxFd2tfVGls
ZWRfQmFja2luZ19TdG9yZV9EYXRhKj4oY2FsbG9jKDEsIHNpemVvZigqcHJpdikpKTsKICAgICBp
ZiAoIXByaXYpCkBAIC03MDgsMzMgKzcwOCwzMyBAQCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfc21hcnRfYWRkKEV2YXNfT2JqZWN0KiBld2tUaWxlKQogICAgIHByaXYtPnZp
ZXcub2Zmc2V0LmJhc2UueCA9IDA7CiAgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ID0gMDsK
IAotICAgIHByaXYtPm1vZGVsLmJhc2UuY29sID0gMDsKKyAgICBwcml2LT5tb2RlbC5iYXNlLmNv
bHVtbiA9IDA7CiAgICAgcHJpdi0+bW9kZWwuYmFzZS5yb3cgPSAwOwotICAgIHByaXYtPm1vZGVs
LmN1ci5jb2xzID0gMTsKLSAgICBwcml2LT5tb2RlbC5jdXIucm93cyA9IDE7Ci0gICAgcHJpdi0+
bW9kZWwub2xkLmNvbHMgPSAwOworICAgIHByaXYtPm1vZGVsLmN1cnJlbnQuY29sdW1ucyA9IDE7
CisgICAgcHJpdi0+bW9kZWwuY3VycmVudC5yb3dzID0gMTsKKyAgICBwcml2LT5tb2RlbC5vbGQu
Y29sdW1ucyA9IDA7CiAgICAgcHJpdi0+bW9kZWwub2xkLnJvd3MgPSAwOwogICAgIHByaXYtPm1v
ZGVsLndpZHRoID0gMDsKICAgICBwcml2LT5tb2RlbC5oZWlnaHQgPSAwOwogICAgIHByaXYtPnJl
bmRlci5zdXNwZW5kID0gRUlOQV9GQUxTRTsKLSAgICBwcml2LT5jc3BhY2UgPSBFVkFTX0NPTE9S
U1BBQ0VfQVJHQjg4ODg7IC8vIFRPRE86IGRldGVjdCBpdC4KKyAgICBwcml2LT5jb2xvclNwYWNl
ID0gRVZBU19DT0xPUlNQQUNFX0FSR0I4ODg4OyAvLyBUT0RPOiBkZXRlY3QgaXQuCiAKICAgICBl
dmFzX29iamVjdF9zbWFydF9kYXRhX3NldChld2tUaWxlLCBwcml2KTsKICAgICBfcGFyZW50X3Nj
LmFkZChld2tUaWxlKTsKIAotICAgIHByaXYtPmNvbnRlbnRzX2NsaXBwZXIgPSBldmFzX29iamVj
dF9yZWN0YW5nbGVfYWRkKAorICAgIHByaXYtPmNvbnRlbnRzQ2xpcHBlciA9IGV2YXNfb2JqZWN0
X3JlY3RhbmdsZV9hZGQoCiAgICAgICAgIGV2YXNfb2JqZWN0X2V2YXNfZ2V0KGV3a1RpbGUpKTsK
LSAgICBldmFzX29iamVjdF9tb3ZlKHByaXYtPmNvbnRlbnRzX2NsaXBwZXIsIDAsIDApOwotICAg
IGV2YXNfb2JqZWN0X3Jlc2l6ZShwcml2LT5jb250ZW50c19jbGlwcGVyLAorICAgIGV2YXNfb2Jq
ZWN0X21vdmUocHJpdi0+Y29udGVudHNDbGlwcGVyLCAwLCAwKTsKKyAgICBldmFzX29iamVjdF9y
ZXNpemUocHJpdi0+Y29udGVudHNDbGlwcGVyLAogICAgICAgICAgICAgICAgICAgICAgICBwcml2
LT5tb2RlbC53aWR0aCwgcHJpdi0+bW9kZWwuaGVpZ2h0KTsKLSAgICBldmFzX29iamVjdF9jb2xv
cl9zZXQocHJpdi0+Y29udGVudHNfY2xpcHBlciwgMjU1LCAyNTUsIDI1NSwgMjU1KTsKLSAgICBl
dmFzX29iamVjdF9zaG93KHByaXYtPmNvbnRlbnRzX2NsaXBwZXIpOwotICAgIGV2YXNfb2JqZWN0
X3NtYXJ0X21lbWJlcl9hZGQocHJpdi0+Y29udGVudHNfY2xpcHBlciwgZXdrVGlsZSk7CisgICAg
ZXZhc19vYmplY3RfY29sb3Jfc2V0KHByaXYtPmNvbnRlbnRzQ2xpcHBlciwgMjU1LCAyNTUsIDI1
NSwgMjU1KTsKKyAgICBldmFzX29iamVjdF9zaG93KHByaXYtPmNvbnRlbnRzQ2xpcHBlcik7Cisg
ICAgZXZhc19vYmplY3Rfc21hcnRfbWVtYmVyX2FkZChwcml2LT5jb250ZW50c0NsaXBwZXIsIGV3
a1RpbGUpOwogCiAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX21vZGVsX21hdHJpeF9jcmVh
dGUocHJpdiwgMCk7CiAgICAgZXZhc19vYmplY3RfbW92ZShwcml2LT5iYXNlLmNsaXBwZXIsIDAs
IDApOwogICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShwcml2LT5iYXNlLmNsaXBwZXIsIDAsIDApOwot
ICAgIGV2YXNfb2JqZWN0X2NsaXBfc2V0KHByaXYtPmNvbnRlbnRzX2NsaXBwZXIsIHByaXYtPmJh
c2UuY2xpcHBlcik7CisgICAgZXZhc19vYmplY3RfY2xpcF9zZXQocHJpdi0+Y29udGVudHNDbGlw
cGVyLCBwcml2LT5iYXNlLmNsaXBwZXIpOwogCiAjaWZkZWYgREVCVUdfTUVNX0xFQUtTCiAgICAg
cHJpdi0+c2lnX3VzciA9IGVjb3JlX2V2ZW50X2hhbmRsZXJfYWRkCkBAIC03NDUsMTEgKzc0NSwx
MSBAQCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfYWRkKEV2YXNf
T2JqZWN0KiBld2tUaWxlKQogc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3Nt
YXJ0X2RlbChFdmFzX09iamVjdCogZXdrVGlsZSkKIHsKICAgICBQUklWX0RBVEFfR0VUX09SX1JF
VFVSTihld2tUaWxlLCBwcml2KTsKLSAgICBEQkcoIm89JXAiLCBld2tUaWxlKTsKLSAgICBFd2tf
VGlsZV9VbnVzZWRfQ2FjaGUqIHR1YzsKKyAgICBEQkcoImV3a1RpbGUlcCIsIGV3a1RpbGUpOwor
ICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSogdGlsZVVudXNlZENhY2hlOwogCi0gICAgdHVjID0g
ZXdrX3RpbGVfbWF0cml4X3VudXNlZF9jYWNoZV9nZXQocHJpdi0+bW9kZWwubWF0cml4KTsKLSAg
ICBld2tfdGlsZV91bnVzZWRfY2FjaGVfdW5sb2NrX2FyZWEodHVjKTsKKyAgICB0aWxlVW51c2Vk
Q2FjaGUgPSBld2tfdGlsZV9tYXRyaXhfdW51c2VkX2NhY2hlX2dldChwcml2LT5tb2RlbC5tYXRy
aXgpOworICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV91bmxvY2tfYXJlYSh0aWxlVW51c2VkQ2Fj
aGUpOwogCiAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2ZsdXNoKHByaXYpOwogCkBAIC03
NjQsOCArNzY0LDggQEAgc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0
X2RlbChFdmFzX09iamVjdCogZXdrVGlsZSkKICNlbmRpZgogCiAgICAgZXdrX3RpbGVfbWF0cml4
X2ZyZWUocHJpdi0+bW9kZWwubWF0cml4KTsKLSAgICBldmFzX29iamVjdF9zbWFydF9tZW1iZXJf
ZGVsKHByaXYtPmNvbnRlbnRzX2NsaXBwZXIpOwotICAgIGV2YXNfb2JqZWN0X2RlbChwcml2LT5j
b250ZW50c19jbGlwcGVyKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9tZW1iZXJfZGVsKHByaXYt
PmNvbnRlbnRzQ2xpcHBlcik7CisgICAgZXZhc19vYmplY3RfZGVsKHByaXYtPmNvbnRlbnRzQ2xp
cHBlcik7CiAKICAgICBfcGFyZW50X3NjLmRlbChld2tUaWxlKTsKIApAQCAtNzc3LDIzICs3Nzcs
MjMgQEAgc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2RlbChFdmFz
X09iamVjdCogZXdrVGlsZSkKIAogc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3NtYXJ0X21vdmUoRXZhc19PYmplY3QqIGV3a1RpbGUsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29y
ZCB5KQogewotICAgIERCRygibz0lcCwgbmV3IHBvczogJWR4JWQiLCBld2tUaWxlLCB4LCB5KTsK
KyAgICBEQkcoImV3a1RpbGUlcCwgbmV3IHBvczogJWR4JWQiLCBld2tUaWxlLCB4LCB5KTsKIAog
ICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKGV3a1RpbGUsIHByaXYpOwogCi0gICAgaWYgKHBy
aXYtPmNoYW5nZWQucG9zKQorICAgIGlmIChwcml2LT5jaGFuZ2VkLnBvc2l0aW9uKQogICAgICAg
ICByZXR1cm47CiAKICAgICBpZiAocHJpdi0+dmlldy54ID09IHggJiYgcHJpdi0+dmlldy55ID09
IHkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHByaXYtPmNoYW5nZWQucG9zID0gRUlOQV9UUlVF
OworICAgIHByaXYtPmNoYW5nZWQucG9zaXRpb24gPSBFSU5BX1RSVUU7CiAgICAgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX2NoYW5nZWQocHJpdik7CiB9CiAKIHN0YXRpYyB2b2lkIF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9zbWFydF9yZXNpemUoRXZhc19PYmplY3QqIGV3a1RpbGUsIEV2YXNf
Q29vcmQgd2lkdGgsIEV2YXNfQ29vcmQgaGVpZ2h0KQogewotICAgIERCRygibz0lcCwgbmV3IHNp
emU6ICVkeCVkIiwgZXdrVGlsZSwgd2lkdGgsIGhlaWdodCk7CisgICAgREJHKCJld2tUaWxlJXAs
IG5ldyBzaXplOiAlZHglZCIsIGV3a1RpbGUsIHdpZHRoLCBoZWlnaHQpOwogCiAgICAgUFJJVl9E
QVRBX0dFVF9PUl9SRVRVUk4oZXdrVGlsZSwgcHJpdik7CiAKQEAgLTgwOSwyNSArODA5LDI1IEBA
IHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9yZXNpemUoRXZhc19P
YmplY3QqIGV3a1RpbGUsIEV2YXNfQ29vCiAKIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9yZWNhbGNfcmVuZGVyZXJzKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHBy
aXYsIEV2YXNfQ29vcmQgd2lkdGgsIEV2YXNfQ29vcmQgaGVpZ2h0LCBFdmFzX0Nvb3JkIHRpbGVX
aWR0aCwgRXZhc19Db29yZCB0aWxlSGVpZ2h0KQogewotICAgIGxvbmcgY29scywgcm93cywgb2xk
X3Jvd3MsIG9sZF9jb2xzOwotICAgIElORigibz0lcCwgbmV3IHNpemU6ICVkeCVkIiwgcHJpdi0+
c2VsZiwgd2lkdGgsIGhlaWdodCk7CisgICAgbG9uZyBjb2x1bW5zLCByb3dzLCBvbGRSb3dzLCBv
bGRDb2xzOworICAgIElORigiZXdrVGlsZSVwLCBuZXcgc2l6ZTogJWR4JWQiLCBwcml2LT5zZWxm
LCB3aWR0aCwgaGVpZ2h0KTsKIAotICAgIGNvbHMgPSAxICsgc3RhdGljX2Nhc3Q8aW50PihjZWls
KHN0YXRpY19jYXN0PGZsb2F0Pih3aWR0aCAvIHRpbGVXaWR0aCkpKTsKKyAgICBjb2x1bW5zID0g
MSArIHN0YXRpY19jYXN0PGludD4oY2VpbChzdGF0aWNfY2FzdDxmbG9hdD4od2lkdGggLyB0aWxl
V2lkdGgpKSk7CiAgICAgcm93cyA9IDEgKyBzdGF0aWNfY2FzdDxpbnQ+KGNlaWwoc3RhdGljX2Nh
c3Q8ZmxvYXQ+KGhlaWdodCAvIHRpbGVIZWlnaHQpKSk7CiAKLSAgICBJTkYoIm89JXAgbmV3IGdy
aWQgc2l6ZSBjb2xzOiAlbGQsIHJvd3M6ICVsZCwgd2FzICVsZCwgJWxkIiwKLSAgICAgICAgcHJp
di0+c2VsZiwgY29scywgcm93cywgcHJpdi0+dmlldy5jb2xzLCBwcml2LT52aWV3LnJvd3MpOwor
ICAgIElORigiZXdrVGlsZSVwIG5ldyBncmlkIHNpemUgY29sczogJWxkLCByb3dzOiAlbGQsIHdh
cyAlbGQsICVsZCIsCisgICAgICAgIHByaXYtPnNlbGYsIGNvbHVtbnMsIHJvd3MsIHByaXYtPnZp
ZXcuY29scywgcHJpdi0+dmlldy5yb3dzKTsKIAotICAgIGlmIChwcml2LT52aWV3LmNvbHMgPT0g
Y29scyAmJiBwcml2LT52aWV3LnJvd3MgPT0gcm93cykKKyAgICBpZiAocHJpdi0+dmlldy5jb2xz
ID09IGNvbHVtbnMgJiYgcHJpdi0+dmlldy5yb3dzID09IHJvd3MpCiAgICAgICAgIHJldHVybjsK
IAotICAgIG9sZF9jb2xzID0gcHJpdi0+dmlldy5jb2xzOwotICAgIG9sZF9yb3dzID0gcHJpdi0+
dmlldy5yb3dzOworICAgIG9sZENvbHMgPSBwcml2LT52aWV3LmNvbHM7CisgICAgb2xkUm93cyA9
IHByaXYtPnZpZXcucm93czsKIAotICAgIGlmIChyb3dzIDwgb2xkX3Jvd3MpIHsKKyAgICBpZiAo
cm93cyA8IG9sZFJvd3MpIHsKICAgICAgICAgRWluYV9Jbmxpc3QqKiBzdGFydCwgKiplbmQ7CiAg
ICAgICAgIHN0YXJ0ID0gcHJpdi0+dmlldy5pdGVtcyArIHJvd3M7Ci0gICAgICAgIGVuZCA9IHBy
aXYtPnZpZXcuaXRlbXMgKyBvbGRfcm93czsKKyAgICAgICAgZW5kID0gcHJpdi0+dmlldy5pdGVt
cyArIG9sZFJvd3M7CiAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3Jvd3Nf
cmFuZ2VfZGVsKHByaXYsIHN0YXJ0LCBlbmQpOwogICAgIH0KIApAQCAtODM3LDM2ICs4MzcsMzYg
QEAgc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3JlY2FsY19yZW5kZXJlcnMo
RXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGEKIAogICAgIHByaXYtPnZpZXcuaXRlbXMgPSBzdGF0
aWNfY2FzdDxFaW5hX0lubGlzdCoqPihuZXdJdGVtcyk7CiAgICAgcHJpdi0+dmlldy5yb3dzID0g
cm93czsKLSAgICBwcml2LT52aWV3LmNvbHMgPSBjb2xzOwotICAgIGlmIChyb3dzID4gb2xkX3Jv
d3MpIHsKLSAgICAgICAgRWluYV9Jbmxpc3QqKiBzdGFydCA9IHByaXYtPnZpZXcuaXRlbXMgKyBv
bGRfcm93czsKKyAgICBwcml2LT52aWV3LmNvbHMgPSBjb2x1bW5zOworICAgIGlmIChyb3dzID4g
b2xkUm93cykgeworICAgICAgICBFaW5hX0lubGlzdCoqIHN0YXJ0ID0gcHJpdi0+dmlldy5pdGVt
cyArIG9sZFJvd3M7CiAgICAgICAgIEVpbmFfSW5saXN0KiogZW5kID0gcHJpdi0+dmlldy5pdGVt
cyArIHJvd3M7CiAgICAgICAgIGZvciAoOyBzdGFydCA8IGVuZDsgc3RhcnQrKykgewogICAgICAg
ICAgICAgKnN0YXJ0ID0gMDsKLSAgICAgICAgICAgIEVpbmFfQm9vbCByID0gX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX3ZpZXdfY29sc19lbmRfYWRkKHByaXYsIHN0YXJ0LCAwLCBjb2xzKTsKKyAg
ICAgICAgICAgIEVpbmFfQm9vbCByID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfY29s
c19lbmRfYWRkKHByaXYsIHN0YXJ0LCAwLCBjb2x1bW5zKTsKICAgICAgICAgICAgIGlmICghcikg
ewotICAgICAgICAgICAgICAgIENSSVRJQ0FMKCJmYWlsZWQgdG8gYWxsb2NhdGUgJWxkIGNvbHVt
bnMiLCBjb2xzKTsKLSAgICAgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmll
d19yb3dzX3JhbmdlX2RlbChwcml2LCBwcml2LT52aWV3Lml0ZW1zICsgb2xkX3Jvd3MsIHN0YXJ0
KTsKLSAgICAgICAgICAgICAgICBwcml2LT52aWV3LnJvd3MgPSBvbGRfcm93czsKKyAgICAgICAg
ICAgICAgICBDUklUSUNBTCgiZmFpbGVkIHRvIGFsbG9jYXRlICVsZCBjb2x1bW5zIiwgY29sdW1u
cyk7CisgICAgICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcm93c19y
YW5nZV9kZWwocHJpdiwgcHJpdi0+dmlldy5pdGVtcyArIG9sZFJvd3MsIHN0YXJ0KTsKKyAgICAg
ICAgICAgICAgICBwcml2LT52aWV3LnJvd3MgPSBvbGRSb3dzOwogICAgICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChjb2xzICE9
IG9sZF9jb2xzKSB7Ci0gICAgICAgIGludCB0b2RvID0gY29scyAtIG9sZF9jb2xzOworICAgIGlm
IChjb2x1bW5zICE9IG9sZENvbHMpIHsKKyAgICAgICAgaW50IHRvZG8gPSBjb2x1bW5zIC0gb2xk
Q29sczsKICAgICAgICAgRWluYV9Jbmxpc3QqKiBzdGFydCA9IHByaXYtPnZpZXcuaXRlbXM7Ci0g
ICAgICAgIEVpbmFfSW5saXN0KiogZW5kID0gc3RhcnQgKyBzdGQ6Om1pbihvbGRfcm93cywgcm93
cyk7CisgICAgICAgIEVpbmFfSW5saXN0KiogZW5kID0gc3RhcnQgKyBzdGQ6Om1pbihvbGRSb3dz
LCByb3dzKTsKICAgICAgICAgaWYgKHRvZG8gPiAwKSB7CiAgICAgICAgICAgICBmb3IgKDsgc3Rh
cnQgPCBlbmQ7IHN0YXJ0KyspIHsKLSAgICAgICAgICAgICAgICBFaW5hX0Jvb2wgciA9IF9ld2tf
dGlsZWRfYmFja2luZ19zdG9yZV92aWV3X2NvbHNfZW5kX2FkZChwcml2LCBzdGFydCwgb2xkX2Nv
bHMsIHRvZG8pOwotICAgICAgICAgICAgICAgIGlmICghcikgeworICAgICAgICAgICAgICAgIEVp
bmFfQm9vbCByZXN1bHQgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19jb2xzX2VuZF9h
ZGQocHJpdiwgc3RhcnQsIG9sZENvbHMsIHRvZG8pOworICAgICAgICAgICAgICAgIGlmICghcmVz
dWx0KSB7CiAgICAgICAgICAgICAgICAgICAgIENSSVRJQ0FMKCJmYWlsZWQgdG8gYWxsb2NhdGUg
JWQgY29sdW1ucyEiLCB0b2RvKTsKIAogICAgICAgICAgICAgICAgICAgICBmb3IgKHN0YXJ0LS07
IHN0YXJ0ID49IHByaXYtPnZpZXcuaXRlbXM7IHN0YXJ0LS0pCiAgICAgICAgICAgICAgICAgICAg
ICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19jb2xzX2VuZF9kZWwocHJpdiwgc3Rh
cnQsIHRvZG8pOwotICAgICAgICAgICAgICAgICAgICBpZiAocm93cyA+IG9sZF9yb3dzKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBzdGFydCA9IHByaXYtPnZpZXcuaXRlbXMgKyBvbGRfcm93
czsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJvd3MgPiBvbGRSb3dzKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBzdGFydCA9IHByaXYtPnZpZXcuaXRlbXMgKyBvbGRSb3dzOwogICAgICAg
ICAgICAgICAgICAgICAgICAgZW5kID0gcHJpdi0+dmlldy5pdGVtcyArIHJvd3M7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBmb3IgKDsgc3RhcnQgPCBlbmQ7IHN0YXJ0KyspCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfY29sc19lbmRf
ZGVsKHByaXYsIHN0YXJ0LCB0b2RvKTsKQEAgLTkwMSw5ICs5MDEsOSBAQCBzdGF0aWMgaW5saW5l
IHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfZGJnKGNvbnN0IEV3a19UaWxlZF9C
YWNraW5nX1N0bwogICAgIEVpbmFfSW5saXN0Kiogc3RhcnQsICoqZW5kOwogICAgIHByaW50Zigi
dGlsZXM9JTJsZCwlMmxkICBtb2RlbD0lMmxkLCUybGQgWyVkeCVkXSBiYXNlPSUrM2xkLCUrNGxk
IG9mZnNldD0lKzRkLCUrNGQgb2xkPSUrNGQsJSs0ZCBiYXNlPSUrM2QsJSszZFxuIiwKICAgICAg
ICAgICAgcHJpdi0+dmlldy5jb2xzLCBwcml2LT52aWV3LnJvd3MsCi0gICAgICAgICAgIHByaXYt
Pm1vZGVsLmN1ci5jb2xzLCBwcml2LT5tb2RlbC5jdXIucm93cywKKyAgICAgICAgICAgcHJpdi0+
bW9kZWwuY3VycmVudC5jb2x1bW5zLCBwcml2LT5tb2RlbC5jdXJyZW50LnJvd3MsCiAgICAgICAg
ICAgIHByaXYtPm1vZGVsLndpZHRoLCBwcml2LT5tb2RlbC5oZWlnaHQsCi0gICAgICAgICAgIHBy
aXYtPm1vZGVsLmJhc2UuY29sLCBwcml2LT5tb2RlbC5iYXNlLnJvdywKKyAgICAgICAgICAgcHJp
di0+bW9kZWwuYmFzZS5jb2x1bW4sIHByaXYtPm1vZGVsLmJhc2Uucm93LAogICAgICAgICAgICBw
cml2LT52aWV3Lm9mZnNldC5jdXIueCwgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnksCiAgICAgICAg
ICAgIHByaXYtPnZpZXcub2Zmc2V0Lm9sZC54LCBwcml2LT52aWV3Lm9mZnNldC5vbGQueSwKICAg
ICAgICAgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54LCBwcml2LT52aWV3Lm9mZnNldC5iYXNl
LnkpOwpAQCAtOTExLDE1ICs5MTEsMTUgQEAgc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV92aWV3X2RiZyhjb25zdCBFd2tfVGlsZWRfQmFja2luZ19TdG8KICAgICBz
dGFydCA9IHByaXYtPnZpZXcuaXRlbXM7CiAgICAgZW5kID0gcHJpdi0+dmlldy5pdGVtcyArIHBy
aXYtPnZpZXcucm93czsKICAgICBmb3IgKDsgc3RhcnQgPCBlbmQ7IHN0YXJ0KyspIHsKLSAgICAg
ICAgY29uc3QgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSogaXQ7CisgICAgICAgIGNvbnN0
IEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0qIGl0ZW07CiAKLSAgICAgICAgRUlOQV9JTkxJ
U1RfRk9SRUFDSCgqc3RhcnQsIGl0KSB7Ci0gICAgICAgICAgICBwcmludGYoIiAlKzRkLCUrNGQg
IiwgaXQtPmdlb21ldHJ5LngsIGl0LT5nZW9tZXRyeS55KTsKKyAgICAgICAgRUlOQV9JTkxJU1Rf
Rk9SRUFDSCgqc3RhcnQsIGl0ZW0pIHsKKyAgICAgICAgICAgIHByaW50ZigiICUrNGQsJSs0ZCAi
LCBpdGVtLT5nZW9tZXRyeS54LCBpdGVtLT5nZW9tZXRyeS55KTsKIAotICAgICAgICAgICAgaWYg
KCFpdC0+dGlsZSkKKyAgICAgICAgICAgIGlmICghaXRlbS0+dGlsZSkKICAgICAgICAgICAgICAg
ICBwcmludGYoIiAgICAgICAgICAgIDsiKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICAgICBwcmludGYoIiU4cCAlbHUsJWx1OyIsIGl0LT50aWxlLCBpdC0+dGlsZS0+Y29sLCBpdC0+
dGlsZS0+cm93KTsKKyAgICAgICAgICAgICAgICBwcmludGYoIiU4cCAlbHUsJWx1OyIsIGl0ZW0t
PnRpbGUsIGl0ZW0tPnRpbGUtPmNvbCwgaXRlbS0+dGlsZS0+cm93KTsKICAgICAgICAgfQogICAg
ICAgICBwcmludGYoIlxuIik7CiAgICAgfQpAQCAtOTQxLDM3ICs5NDEsMzcgQEAgc3RhdGljIGlu
bGluZSB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X2RiZyhjb25zdCBFd2tfVGls
ZWRfQmFja2luZ19TdG8KICAqLwogc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3ZpZXdfd3JhcF91cChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2LCBFdmFzX0Nv
b3JkIHgsIEV2YXNfQ29vcmQgeSwgdW5zaWduZWQgaW50IGNvdW50KQogewotICAgIHVuc2lnbmVk
IGludCBsYXN0X3JvdyA9IHByaXYtPnZpZXcucm93cyAtIDE7Ci0gICAgRXZhc19Db29yZCB0dyA9
IHByaXYtPnZpZXcudGlsZS53aWR0aDsKLSAgICBFdmFzX0Nvb3JkIHRoID0gcHJpdi0+dmlldy50
aWxlLmhlaWdodDsKLSAgICBFdmFzX0Nvb3JkIG9mZl95ID0gcHJpdi0+dmlldy5vZmZzZXQuYmFz
ZS55ICsgY291bnQgKiB0aDsKLSAgICBFdmFzX0Nvb3JkIG95ID0geSArIChsYXN0X3JvdyAtIGNv
dW50ICsgMSkgKiB0aCArIG9mZl95OwotICAgIEVpbmFfSW5saXN0KiogaXRyX3N0YXJ0LCAqKml0
cl9lbmQ7CisgICAgdW5zaWduZWQgaW50IGxhc3RSb3cgPSBwcml2LT52aWV3LnJvd3MgLSAxOwor
ICAgIEV2YXNfQ29vcmQgdGlsZVdpZHRoID0gcHJpdi0+dmlldy50aWxlLndpZHRoOworICAgIEV2
YXNfQ29vcmQgdGlsZUhlaWdodCA9IHByaXYtPnZpZXcudGlsZS5oZWlnaHQ7CisgICAgRXZhc19D
b29yZCBvZmZzZXRZID0gcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ICsgY291bnQgKiB0aWxlSGVp
Z2h0OworICAgIEV2YXNfQ29vcmQgdGlsZVBvc2l0aW9uWSA9IHkgKyAobGFzdFJvdyAtIGNvdW50
ICsgMSkgKiB0aWxlSGVpZ2h0ICsgb2Zmc2V0WTsKKyAgICBFaW5hX0lubGlzdCoqIGl0ZXJhdG9y
U3RhcnQsICoqaXRlcmF0b3JFbmQ7CiAKLSAgICBpdHJfc3RhcnQgPSBwcml2LT52aWV3Lml0ZW1z
OwotICAgIGl0cl9lbmQgPSBpdHJfc3RhcnQgKyBsYXN0X3JvdzsKKyAgICBpdGVyYXRvclN0YXJ0
ID0gcHJpdi0+dmlldy5pdGVtczsKKyAgICBpdGVyYXRvckVuZCA9IGl0ZXJhdG9yU3RhcnQgKyBs
YXN0Um93OwogCiAgICAgZm9yICg7IGNvdW50ID4gMDsgY291bnQtLSkgewotICAgICAgICBFaW5h
X0lubGlzdCoqIGl0cjsKLSAgICAgICAgRWluYV9Jbmxpc3QqIHRtcCA9ICppdHJfc3RhcnQ7Ci0g
ICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0qIGl0OwotICAgICAgICBFdmFzX0Nv
b3JkIG94ID0geCArIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueDsKLSAgICAgICAgaW50IGMgPSAw
OworICAgICAgICBFaW5hX0lubGlzdCoqIGl0ZXJhdG9yTGlzdDsKKyAgICAgICAgRWluYV9Jbmxp
c3QqIHRlbXAgPSAqaXRlcmF0b3JTdGFydDsKKyAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3Rv
cmVfSXRlbSogaXRlbTsKKyAgICAgICAgRXZhc19Db29yZCBvcmlnaWFubFggPSB4ICsgcHJpdi0+
dmlldy5vZmZzZXQuYmFzZS54OworICAgICAgICBpbnQgY291bnQxID0gMDsKIAotICAgICAgICBm
b3IgKGl0ciA9IGl0cl9zdGFydDsgaXRyIDwgaXRyX2VuZDsgaXRyKyspCi0gICAgICAgICAgICAq
aXRyID0gKihpdHIgKyAxKTsKLSAgICAgICAgKml0ciA9IHRtcDsKKyAgICAgICAgZm9yIChpdGVy
YXRvckxpc3QgPSBpdGVyYXRvclN0YXJ0OyBpdGVyYXRvckxpc3QgPCBpdGVyYXRvckVuZDsgaXRl
cmF0b3JMaXN0KyspCisgICAgICAgICAgICAqaXRlcmF0b3JMaXN0ID0gKihpdGVyYXRvckxpc3Qg
KyAxKTsKKyAgICAgICAgKml0ZXJhdG9yTGlzdCA9IHRlbXA7CiAKICAgICAgICAgcHJpdi0+bW9k
ZWwuYmFzZS5yb3crKzsKLSAgICAgICAgRUlOQV9JTkxJU1RfRk9SRUFDSCh0bXAsIGl0KSB7Ci0g
ICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9tb3ZlKGl0LCBveCwgb3kp
OwotICAgICAgICAgICAgb3ggKz0gdHc7Ci0gICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfaXRlbV9maWxsKHByaXYsIGl0LCBjLCBsYXN0X3Jvdyk7Ci0gICAgICAgICAgICBjKys7
CisgICAgICAgIEVJTkFfSU5MSVNUX0ZPUkVBQ0godGVtcCwgaXRlbSkgeworICAgICAgICAgICAg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fbW92ZShpdGVtLCBvcmlnaWFubFgsIHRpbGVQ
b3NpdGlvblkpOworICAgICAgICAgICAgb3JpZ2lhbmxYICs9IHRpbGVXaWR0aDsKKyAgICAgICAg
ICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2ZpbGwocHJpdiwgaXRlbSwgY291bnQx
LCBsYXN0Um93KTsKKyAgICAgICAgICAgIGNvdW50MSsrOwogICAgICAgICB9Ci0gICAgICAgIG95
ICs9IHRoOworICAgICAgICB0aWxlUG9zaXRpb25ZICs9IHRpbGVIZWlnaHQ7CiAgICAgfQotICAg
IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSA9IG9mZl95OworICAgIHByaXYtPnZpZXcub2Zmc2V0
LmJhc2UueSA9IG9mZnNldFk7CiB9CiAKIC8qKgpAQCAtOTg5LDM2ICs5ODksMzYgQEAgc3RhdGlj
IHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfd3JhcF91cChFd2tfVGlsZWRfQmFj
a2luZ19TdG9yZV9EYXRhKgogICovCiBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfdmlld193cmFwX2Rvd24oRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdiwgRXZh
c19Db29yZCB4LCBFdmFzX0Nvb3JkIHksIHVuc2lnbmVkIGludCBjb3VudCkKIHsKLSAgICBFdmFz
X0Nvb3JkIHR3ID0gcHJpdi0+dmlldy50aWxlLndpZHRoOwotICAgIEV2YXNfQ29vcmQgdGggPSBw
cml2LT52aWV3LnRpbGUuaGVpZ2h0OwotICAgIEV2YXNfQ29vcmQgb2ZmX3kgPSBwcml2LT52aWV3
Lm9mZnNldC5iYXNlLnkgLSBjb3VudCAqIHRoOwotICAgIEV2YXNfQ29vcmQgb3kgPSB5ICsgb2Zm
X3kgKyAoY291bnQgLSAxKSAqIHRoOwotICAgIEVpbmFfSW5saXN0KiogaXRyX3N0YXJ0LCAqKml0
cl9lbmQ7CisgICAgRXZhc19Db29yZCB0aWxlV2lkdGggPSBwcml2LT52aWV3LnRpbGUud2lkdGg7
CisgICAgRXZhc19Db29yZCB0aWxlSGVpZ2h0ID0gcHJpdi0+dmlldy50aWxlLmhlaWdodDsKKyAg
ICBFdmFzX0Nvb3JkIG9mZnNldFkgPSBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgLSBjb3VudCAq
IHRpbGVIZWlnaHQ7CisgICAgRXZhc19Db29yZCB0aWxlUG9zaXRpb25ZID0geSArIG9mZnNldFkg
KyAoY291bnQgLSAxKSAqIHRpbGVIZWlnaHQ7CisgICAgRWluYV9Jbmxpc3QqKiBpdGVyYXRvclN0
YXJ0LCAqKml0ZXJhdG9yRW5kOwogCi0gICAgaXRyX3N0YXJ0ID0gcHJpdi0+dmlldy5pdGVtcyAr
IHByaXYtPnZpZXcucm93cyAtIDE7Ci0gICAgaXRyX2VuZCA9IHByaXYtPnZpZXcuaXRlbXM7Cisg
ICAgaXRlcmF0b3JTdGFydCA9IHByaXYtPnZpZXcuaXRlbXMgKyBwcml2LT52aWV3LnJvd3MgLSAx
OworICAgIGl0ZXJhdG9yRW5kID0gcHJpdi0+dmlldy5pdGVtczsKIAogICAgIGZvciAoOyBjb3Vu
dCA+IDA7IGNvdW50LS0pIHsKLSAgICAgICAgRWluYV9Jbmxpc3QqKiBpdHI7Ci0gICAgICAgIEVp
bmFfSW5saXN0KiB0bXAgPSAqaXRyX3N0YXJ0OwotICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19T
dG9yZV9JdGVtKiBpdDsKLSAgICAgICAgRXZhc19Db29yZCBveCA9IHggKyBwcml2LT52aWV3Lm9m
ZnNldC5iYXNlLng7Ci0gICAgICAgIGludCBjID0gMDsKKyAgICAgICAgRWluYV9Jbmxpc3QqKiBp
dGVyYXRvckxpc3Q7CisgICAgICAgIEVpbmFfSW5saXN0KiB0ZW1wID0gKml0ZXJhdG9yU3RhcnQ7
CisgICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0qIGl0ZW07CisgICAgICAgIEV2
YXNfQ29vcmQgdGlsZVBvc2l0aW9uWCA9IHggKyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLng7Cisg
ICAgICAgIGludCBjb3VudDEgPSAwOwogCi0gICAgICAgIGZvciAoaXRyID0gaXRyX3N0YXJ0OyBp
dHIgPiBpdHJfZW5kOyBpdHItLSkKLSAgICAgICAgICAgICppdHIgPSAqKGl0ciAtIDEpOwotICAg
ICAgICAqaXRyID0gdG1wOworICAgICAgICBmb3IgKGl0ZXJhdG9yTGlzdCA9IGl0ZXJhdG9yU3Rh
cnQ7IGl0ZXJhdG9yTGlzdCA+IGl0ZXJhdG9yRW5kOyBpdGVyYXRvckxpc3QtLSkKKyAgICAgICAg
ICAgICppdGVyYXRvckxpc3QgPSAqKGl0ZXJhdG9yTGlzdCAtIDEpOworICAgICAgICAqaXRlcmF0
b3JMaXN0ID0gdGVtcDsKIAogICAgICAgICBwcml2LT5tb2RlbC5iYXNlLnJvdy0tOwotICAgICAg
ICBFSU5BX0lOTElTVF9GT1JFQUNIKHRtcCwgaXQpIHsKLSAgICAgICAgICAgIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV9pdGVtX21vdmUoaXQsIG94LCBveSk7Ci0gICAgICAgICAgICBveCArPSB0
dzsKLSAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2ZpbGwocHJpdiwg
aXQsIGMsIDApOwotICAgICAgICAgICAgYysrOworICAgICAgICBFSU5BX0lOTElTVF9GT1JFQUNI
KHRlbXAsIGl0ZW0pIHsKKyAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVt
X21vdmUoaXRlbSwgdGlsZVBvc2l0aW9uWCwgdGlsZVBvc2l0aW9uWSk7CisgICAgICAgICAgICB0
aWxlUG9zaXRpb25YICs9IHRpbGVXaWR0aDsKKyAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9pdGVtX2ZpbGwocHJpdiwgaXRlbSwgY291bnQxLCAwKTsKKyAgICAgICAgICAgIGNv
dW50MSsrOwogICAgICAgICB9Ci0gICAgICAgIG95IC09IHRoOworICAgICAgICB0aWxlUG9zaXRp
b25ZIC09IHRpbGVIZWlnaHQ7CiAgICAgfQotICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSA9
IG9mZl95OworICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSA9IG9mZnNldFk7CiB9CiAKIC8q
KgpAQCAtMTAzNiwzNiArMTAzNiwzNiBAQCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfdmlld193cmFwX2Rvd24oRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YQogICovCiBz
dGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld193cmFwX2xlZnQoRXdrX1Rp
bGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdiwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHks
IHVuc2lnbmVkIGludCBjb3VudCkKIHsKLSAgICB1bnNpZ25lZCBpbnQgciwgbGFzdF9jb2wgPSBw
cml2LT52aWV3LmNvbHMgLSAxOwotICAgIEV2YXNfQ29vcmQgdHcgPSBwcml2LT52aWV3LnRpbGUu
d2lkdGg7Ci0gICAgRXZhc19Db29yZCB0aCA9IHByaXYtPnZpZXcudGlsZS5oZWlnaHQ7Ci0gICAg
RXZhc19Db29yZCBvZmZfeCA9IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCArIGNvdW50ICogdHc7
CisgICAgdW5zaWduZWQgaW50IHJvdywgbGFzdENvbHVtbiA9IHByaXYtPnZpZXcuY29scyAtIDE7
CisgICAgRXZhc19Db29yZCB0aWxlV2lkdGggPSBwcml2LT52aWV3LnRpbGUud2lkdGg7CisgICAg
RXZhc19Db29yZCB0aWxlSGVpZ2h0ID0gcHJpdi0+dmlldy50aWxlLmhlaWdodDsKKyAgICBFdmFz
X0Nvb3JkIG9mZnNldFggPSBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggKyBjb3VudCAqIHRpbGVX
aWR0aDsKICAgICBFdmFzX0Nvb3JkIG95ID0geSArIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueTsK
LSAgICBFaW5hX0lubGlzdCoqIGl0cjsKLSAgICBFaW5hX0lubGlzdCoqIGl0cl9lbmQ7CisgICAg
RWluYV9Jbmxpc3QqKiBpdGVyYXRvcjsKKyAgICBFaW5hX0lubGlzdCoqIGl0ZXJhdG9yRW5kOwog
Ci0gICAgaXRyID0gcHJpdi0+dmlldy5pdGVtczsKLSAgICBpdHJfZW5kID0gaXRyICsgcHJpdi0+
dmlldy5yb3dzOwotICAgIHIgPSAwOworICAgIGl0ZXJhdG9yID0gcHJpdi0+dmlldy5pdGVtczsK
KyAgICBpdGVyYXRvckVuZCA9IGl0ZXJhdG9yICsgcHJpdi0+dmlldy5yb3dzOworICAgIHJvdyA9
IDA7CiAKLSAgICBwcml2LT5tb2RlbC5iYXNlLmNvbCArPSBjb3VudDsKKyAgICBwcml2LT5tb2Rl
bC5iYXNlLmNvbHVtbiArPSBjb3VudDsKIAotICAgIGZvciAoOyBpdHIgPCBpdHJfZW5kOyBpdHIr
KywgcisrKSB7Ci0gICAgICAgIEV2YXNfQ29vcmQgb3ggPSB4ICsgKGxhc3RfY29sIC0gY291bnQg
KyAxKSAqIHR3ICsgb2ZmX3g7Ci0gICAgICAgIHVuc2lnbmVkIGludCBpLCBjID0gbGFzdF9jb2wg
LSBjb3VudCArIDE7CisgICAgZm9yICg7IGl0ZXJhdG9yIDwgaXRlcmF0b3JFbmQ7IGl0ZXJhdG9y
KyssIHJvdysrKSB7CisgICAgICAgIEV2YXNfQ29vcmQgb3ggPSB4ICsgKGxhc3RDb2x1bW4gLSBj
b3VudCArIDEpICogdGlsZVdpZHRoICsgb2Zmc2V0WDsKKyAgICAgICAgdW5zaWduZWQgaW50IGMg
PSBsYXN0Q29sdW1uIC0gY291bnQgKyAxOwogCi0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb3Vu
dDsgaSsrLCBjKyssIG94ICs9IHR3KSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAw
OyBpIDwgY291bnQ7IGkrKywgYysrLCBveCArPSB0aWxlV2lkdGgpIHsKICAgICAgICAgICAgIEV3
a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0qIGl0OwotICAgICAgICAgICAgaXQgPSBFSU5BX0lO
TElTVF9DT05UQUlORVJfR0VUKCppdHIsIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0pOwot
ICAgICAgICAgICAgKml0ciA9IGVpbmFfaW5saXN0X2RlbW90ZSgqaXRyLCAqaXRyKTsKKyAgICAg
ICAgICAgIGl0ID0gRUlOQV9JTkxJU1RfQ09OVEFJTkVSX0dFVCgqaXRlcmF0b3IsIEV3a19UaWxl
ZF9CYWNraW5nX1N0b3JlX0l0ZW0pOworICAgICAgICAgICAgKml0ZXJhdG9yID0gZWluYV9pbmxp
c3RfZGVtb3RlKCppdGVyYXRvciwgKml0ZXJhdG9yKTsKIAogICAgICAgICAgICAgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX2l0ZW1fbW92ZShpdCwgb3gsIG95KTsKLSAgICAgICAgICAgIF9ld2tf
dGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2ZpbGwocHJpdiwgaXQsIGMsIHIpOworICAgICAgICAg
ICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZmlsbChwcml2LCBpdCwgYywgcm93KTsK
ICAgICAgICAgfQotICAgICAgICBveSArPSB0aDsKKyAgICAgICAgb3kgKz0gdGlsZUhlaWdodDsK
ICAgICB9CiAKLSAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggPSBvZmZfeDsKKyAgICBwcml2
LT52aWV3Lm9mZnNldC5iYXNlLnggPSBvZmZzZXRYOwogfQogCiAvKioKQEAgLTEwODMsMTgzICsx
MDgzLDE4MyBAQCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld193cmFw
X2xlZnQoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YQogICovCiBzdGF0aWMgdm9pZCBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld193cmFwX3JpZ2h0KEV3a19UaWxlZF9CYWNraW5nX1N0
b3JlX0RhdGEqIHByaXYsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5LCB1bnNpZ25lZCBpbnQg
Y291bnQpCiB7Ci0gICAgdW5zaWduZWQgaW50IHI7Ci0gICAgRXZhc19Db29yZCB0dyA9IHByaXYt
PnZpZXcudGlsZS53aWR0aDsKLSAgICBFdmFzX0Nvb3JkIHRoID0gcHJpdi0+dmlldy50aWxlLmhl
aWdodDsKLSAgICBFdmFzX0Nvb3JkIG9mZl94ID0gcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54IC0g
Y291bnQgKiB0dzsKLSAgICBFdmFzX0Nvb3JkIG95ID0geSArIHByaXYtPnZpZXcub2Zmc2V0LmJh
c2UueTsKLSAgICBFaW5hX0lubGlzdCoqIGl0ciwgKiogaXRyX2VuZDsKKyAgICB1bnNpZ25lZCBp
bnQgcm93OworICAgIEV2YXNfQ29vcmQgdGlsZVdpZHRoID0gcHJpdi0+dmlldy50aWxlLndpZHRo
OworICAgIEV2YXNfQ29vcmQgdGlsZUhlaWdodCA9IHByaXYtPnZpZXcudGlsZS5oZWlnaHQ7Cisg
ICAgRXZhc19Db29yZCBvZmZzZXRYID0gcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54IC0gY291bnQg
KiB0aWxlV2lkdGg7CisgICAgRXZhc19Db29yZCB0aWxlUG9zaXRpb25ZID0geSArIHByaXYtPnZp
ZXcub2Zmc2V0LmJhc2UueTsKKyAgICBFaW5hX0lubGlzdCoqIGl0ZXJhdG9yLCAqKiBpdGVyYXRv
ckVuZDsKIAotICAgIGl0ciA9IHByaXYtPnZpZXcuaXRlbXM7Ci0gICAgaXRyX2VuZCA9IGl0ciAr
IHByaXYtPnZpZXcucm93czsKLSAgICByID0gMDsKKyAgICBpdGVyYXRvciA9IHByaXYtPnZpZXcu
aXRlbXM7CisgICAgaXRlcmF0b3JFbmQgPSBpdGVyYXRvciArIHByaXYtPnZpZXcucm93czsKKyAg
ICByb3cgPSAwOwogCi0gICAgcHJpdi0+bW9kZWwuYmFzZS5jb2wgLT0gY291bnQ7CisgICAgcHJp
di0+bW9kZWwuYmFzZS5jb2x1bW4gLT0gY291bnQ7CiAKLSAgICBmb3IgKDsgaXRyIDwgaXRyX2Vu
ZDsgaXRyKyssIHIrKykgewotICAgICAgICBFdmFzX0Nvb3JkIG94ID0geCArIChjb3VudCAtIDEp
ICogdHcgKyBvZmZfeDsKLSAgICAgICAgdW5zaWduZWQgaW50IGksIGMgPSBjb3VudCAtIDE7Cisg
ICAgZm9yICg7IGl0ZXJhdG9yIDwgaXRlcmF0b3JFbmQ7IGl0ZXJhdG9yKyssIHJvdysrKSB7Cisg
ICAgICAgIEV2YXNfQ29vcmQgb3ggPSB4ICsgKGNvdW50IC0gMSkgKiB0aWxlV2lkdGggKyBvZmZz
ZXRYOworICAgICAgICB1bnNpZ25lZCBpbnQgYyA9IGNvdW50IC0gMTsKIAotICAgICAgICBmb3Ig
KGkgPSAwOyBpIDwgY291bnQ7IGkrKywgYy0tLCBveCAtPSB0dykgewotICAgICAgICAgICAgRXdr
X1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSogaXQ7Ci0gICAgICAgICAgICBpdCA9IEVJTkFfSU5M
SVNUX0NPTlRBSU5FUl9HRVQoKCppdHIpLT5sYXN0LCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9J
dGVtKTsKLSAgICAgICAgICAgICppdHIgPSBlaW5hX2lubGlzdF9wcm9tb3RlKCppdHIsICgqaXRy
KS0+bGFzdCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgY291bnQ7IGkr
KywgYy0tLCBveCAtPSB0aWxlV2lkdGgpIHsKKyAgICAgICAgICAgIEV3a19UaWxlZF9CYWNraW5n
X1N0b3JlX0l0ZW0qIGl0ZW07CisgICAgICAgICAgICBpdGVtID0gRUlOQV9JTkxJU1RfQ09OVEFJ
TkVSX0dFVCgoKml0ZXJhdG9yKS0+bGFzdCwgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSk7
CisgICAgICAgICAgICAqaXRlcmF0b3IgPSBlaW5hX2lubGlzdF9wcm9tb3RlKCppdGVyYXRvciwg
KCppdGVyYXRvciktPmxhc3QpOwogCi0gICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfaXRlbV9tb3ZlKGl0LCBveCwgb3kpOwotICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5n
X3N0b3JlX2l0ZW1fZmlsbChwcml2LCBpdCwgYywgcik7CisgICAgICAgICAgICBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfaXRlbV9tb3ZlKGl0ZW0sIG94LCB0aWxlUG9zaXRpb25ZKTsKKyAgICAg
ICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2ZpbGwocHJpdiwgaXRlbSwgYywg
cm93KTsKICAgICAgICAgfQotICAgICAgICBveSArPSB0aDsKKyAgICAgICAgdGlsZVBvc2l0aW9u
WSArPSB0aWxlSGVpZ2h0OwogICAgIH0KIAotICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCA9
IG9mZl94OworICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCA9IG9mZnNldFg7CiB9CiAKIHN0
YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3JlZmlsbChFd2tfVGlsZWRf
QmFja2luZ19TdG9yZV9EYXRhKiBwcml2LCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwgaW50
IHN0ZXBYLCBpbnQgc3RlcFkpCiB7Ci0gICAgRWluYV9Jbmxpc3QqKiBpdHIsICoqaXRyX2VuZDsK
LSAgICBFdmFzX0Nvb3JkIGJhc2Vfb3gsIG95LCB0dywgdGg7CisgICAgRWluYV9Jbmxpc3QqKiBp
dGVyYXRvciwgKippdGVyYXRvckVuZDsKKyAgICBFdmFzX0Nvb3JkIGJhc2VUaWxlUG9zaXRpb25Y
LCB0aWxlUG9zaXRpb25ZLCB0aWxlV2lkdGgsIHRpbGVIZWlnaHQ7CiAgICAgdW5zaWduZWQgaW50
IHI7CiAKICAgICBldmFzX29iamVjdF9tb3ZlKHByaXYtPmJhc2UuY2xpcHBlciwgeCwgeSk7CiAK
LSAgICB0dyA9IHByaXYtPnZpZXcudGlsZS53aWR0aDsKLSAgICB0aCA9IHByaXYtPnZpZXcudGls
ZS5oZWlnaHQ7CisgICAgdGlsZVdpZHRoID0gcHJpdi0+dmlldy50aWxlLndpZHRoOworICAgIHRp
bGVIZWlnaHQgPSBwcml2LT52aWV3LnRpbGUuaGVpZ2h0OwogCi0gICAgYmFzZV9veCA9IHggKyBw
cml2LT52aWV3Lm9mZnNldC5iYXNlLng7Ci0gICAgb3kgPSB5ICsgcHJpdi0+dmlldy5vZmZzZXQu
YmFzZS55OworICAgIGJhc2VUaWxlUG9zaXRpb25YID0geCArIHByaXYtPnZpZXcub2Zmc2V0LmJh
c2UueDsKKyAgICB0aWxlUG9zaXRpb25ZID0geSArIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueTsK
IAotICAgIGl0ciA9IHByaXYtPnZpZXcuaXRlbXM7Ci0gICAgaXRyX2VuZCA9IGl0ciArIHByaXYt
PnZpZXcucm93czsKKyAgICBpdGVyYXRvciA9IHByaXYtPnZpZXcuaXRlbXM7CisgICAgaXRlcmF0
b3JFbmQgPSBpdGVyYXRvciArIHByaXYtPnZpZXcucm93czsKICAgICByID0gMDsKIAotICAgIHBy
aXYtPm1vZGVsLmJhc2UuY29sIC09IHN0ZXBYOworICAgIHByaXYtPm1vZGVsLmJhc2UuY29sdW1u
IC09IHN0ZXBYOwogICAgIHByaXYtPm1vZGVsLmJhc2Uucm93IC09IHN0ZXBZOwogCi0gICAgZm9y
ICg7IGl0ciA8IGl0cl9lbmQ7IGl0cisrLCByKyspIHsKLSAgICAgICAgRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfSXRlbSogaXQ7Ci0gICAgICAgIEV2YXNfQ29vcmQgb3ggPSBiYXNlX294OwotICAg
ICAgICB1bnNpZ25lZCBpbnQgYyA9IDA7Ci0gICAgICAgIEVJTkFfSU5MSVNUX0ZPUkVBQ0goKml0
ciwgaXQpIHsKLSAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2ZpbGwo
cHJpdiwgaXQsIGMsIHIpOwotICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0
ZW1fbW92ZShpdCwgb3gsIG95KTsKLSAgICAgICAgICAgIGMrKzsKLSAgICAgICAgICAgIG94ICs9
IHR3OworICAgIGZvciAoOyBpdGVyYXRvciA8IGl0ZXJhdG9yRW5kOyBpdGVyYXRvcisrLCByKysp
IHsKKyAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSogaXRlbTsKKyAgICAgICAg
RXZhc19Db29yZCBuZXdUaWxlUG9zaXRpb25YID0gYmFzZVRpbGVQb3NpdGlvblg7CisgICAgICAg
IHVuc2lnbmVkIGludCBjb3VudCA9IDA7CisgICAgICAgIEVJTkFfSU5MSVNUX0ZPUkVBQ0goKml0
ZXJhdG9yLCBpdGVtKSB7CisgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRl
bV9maWxsKHByaXYsIGl0ZW0sIGNvdW50LCByKTsKKyAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFj
a2luZ19zdG9yZV9pdGVtX21vdmUoaXRlbSwgbmV3VGlsZVBvc2l0aW9uWCwgdGlsZVBvc2l0aW9u
WSk7CisgICAgICAgICAgICBjb3VudCsrOworICAgICAgICAgICAgbmV3VGlsZVBvc2l0aW9uWCAr
PSB0aWxlV2lkdGg7CiAgICAgICAgIH0KLSAgICAgICAgb3kgKz0gdGg7CisgICAgICAgIHRpbGVQ
b3NpdGlvblkgKz0gdGlsZUhlaWdodDsKICAgICB9CiB9CiAKIHN0YXRpYyB2b2lkIF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV92aWV3X3Bvc19hcHBseShFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9E
YXRhKiBwcml2LCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSkKIHsKLSAgICBFaW5hX0lubGlz
dCoqIGl0ciwgKippdHJfZW5kOwotICAgIEV2YXNfQ29vcmQgYmFzZV9veCwgb3ksIHR3LCB0aDsK
KyAgICBFaW5hX0lubGlzdCoqIGl0ZXJhdG9yLCAqKml0ZXJhdG9yRW5kOworICAgIEV2YXNfQ29v
cmQgYmFzZVRpbGVQb3NpdGlvblgsIGJhc2VUaWxlUG9zaXRpb25ZLCB0aWxlV2lkdGgsIHRpbGVI
ZWlnaHQ7CiAKICAgICBldmFzX29iamVjdF9tb3ZlKHByaXYtPmJhc2UuY2xpcHBlciwgeCwgeSk7
CiAKLSAgICB0dyA9IHByaXYtPnZpZXcudGlsZS53aWR0aDsKLSAgICB0aCA9IHByaXYtPnZpZXcu
dGlsZS5oZWlnaHQ7CisgICAgdGlsZVdpZHRoID0gcHJpdi0+dmlldy50aWxlLndpZHRoOworICAg
IHRpbGVIZWlnaHQgPSBwcml2LT52aWV3LnRpbGUuaGVpZ2h0OwogCi0gICAgYmFzZV9veCA9IHgg
KyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLng7Ci0gICAgb3kgPSB5ICsgcHJpdi0+dmlldy5vZmZz
ZXQuYmFzZS55OworICAgIGJhc2VUaWxlUG9zaXRpb25YID0geCArIHByaXYtPnZpZXcub2Zmc2V0
LmJhc2UueDsKKyAgICBiYXNlVGlsZVBvc2l0aW9uWSA9IHkgKyBwcml2LT52aWV3Lm9mZnNldC5i
YXNlLnk7CiAKLSAgICBpdHIgPSBwcml2LT52aWV3Lml0ZW1zOwotICAgIGl0cl9lbmQgPSBpdHIg
KyBwcml2LT52aWV3LnJvd3M7Ci0gICAgZm9yICg7IGl0ciA8IGl0cl9lbmQ7IGl0cisrKSB7Cisg
ICAgaXRlcmF0b3IgPSBwcml2LT52aWV3Lml0ZW1zOworICAgIGl0ZXJhdG9yRW5kID0gaXRlcmF0
b3IgKyBwcml2LT52aWV3LnJvd3M7CisgICAgZm9yICg7IGl0ZXJhdG9yIDwgaXRlcmF0b3JFbmQ7
IGl0ZXJhdG9yKyspIHsKICAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSogaXQ7
Ci0gICAgICAgIEV2YXNfQ29vcmQgb3ggPSBiYXNlX294OwotICAgICAgICBFSU5BX0lOTElTVF9G
T1JFQUNIKCppdHIsIGl0KSB7Ci0gICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
aXRlbV9tb3ZlKGl0LCBveCwgb3kpOwotICAgICAgICAgICAgb3ggKz0gdHc7CisgICAgICAgIEV2
YXNfQ29vcmQgb3ggPSBiYXNlVGlsZVBvc2l0aW9uWDsKKyAgICAgICAgRUlOQV9JTkxJU1RfRk9S
RUFDSCgqaXRlcmF0b3IsIGl0KSB7CisgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfaXRlbV9tb3ZlKGl0LCBveCwgYmFzZVRpbGVQb3NpdGlvblkpOworICAgICAgICAgICAgb3gg
Kz0gdGlsZVdpZHRoOwogICAgICAgICB9Ci0gICAgICAgIG95ICs9IHRoOworICAgICAgICBiYXNl
VGlsZVBvc2l0aW9uWSArPSB0aWxlSGVpZ2h0OwogICAgIH0KIH0KIAogc3RhdGljIHZvaWQgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZV9vZmZzZXRfZm9yY2UoRXdrX1Rp
bGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdikKIHsKLSAgICBFdmFzX0Nvb3JkIGR4ID0gcHJp
di0+dmlldy5vZmZzZXQuY3VyLnggLSBwcml2LT52aWV3Lm9mZnNldC5vbGQueDsKLSAgICBFdmFz
X0Nvb3JkIGR5ID0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkgLSBwcml2LT52aWV3Lm9mZnNldC5v
bGQueTsKLSAgICBFdmFzX0Nvb3JkIHR3LCB0aDsKLSAgICBpbnQgc3RlcF95LCBzdGVwX3g7Cisg
ICAgRXZhc19Db29yZCBkZWx0YVggPSBwcml2LT52aWV3Lm9mZnNldC5jdXIueCAtIHByaXYtPnZp
ZXcub2Zmc2V0Lm9sZC54OworICAgIEV2YXNfQ29vcmQgZGVsdGFZID0gcHJpdi0+dmlldy5vZmZz
ZXQuY3VyLnkgLSBwcml2LT52aWV3Lm9mZnNldC5vbGQueTsKKyAgICBFdmFzX0Nvb3JkIHRpbGVX
aWR0aCwgdGlsZUhlaWdodDsKKyAgICBpbnQgc3RlcFksIHN0ZXBYOwogCi0gICAgSU5GKCJvPSVw
LCBvZmZzZXQ6ICUrNGQsICUrNGQgKCUrNGQsICUrNGQpIiwKLSAgICAgICAgcHJpdi0+c2VsZiwg
ZHgsIGR5LCBwcml2LT52aWV3Lm9mZnNldC5jdXIueCwgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkp
OworICAgIElORigiZXdrVGlsZSVwLCBvZmZzZXQ6ICUrNGQsICUrNGQgKCUrNGQsICUrNGQpIiwK
KyAgICAgICAgcHJpdi0+c2VsZiwgZGVsdGFYLCBkZWx0YVksIHByaXYtPnZpZXcub2Zmc2V0LmN1
ci54LCBwcml2LT52aWV3Lm9mZnNldC5jdXIueSk7CiAKLSAgICB0dyA9IHByaXYtPnZpZXcudGls
ZS53aWR0aDsKLSAgICB0aCA9IHByaXYtPnZpZXcudGlsZS5oZWlnaHQ7CisgICAgdGlsZVdpZHRo
ID0gcHJpdi0+dmlldy50aWxlLndpZHRoOworICAgIHRpbGVIZWlnaHQgPSBwcml2LT52aWV3LnRp
bGUuaGVpZ2h0OwogCi0gICAgbG9uZyBuZXdfY29sID0gLXByaXYtPnZpZXcub2Zmc2V0LmN1ci54
IC8gdHc7Ci0gICAgc3RlcF94ID0gcHJpdi0+bW9kZWwuYmFzZS5jb2wgLSBuZXdfY29sOwotICAg
IGxvbmcgbmV3X3JvdyA9IC1wcml2LT52aWV3Lm9mZnNldC5jdXIueSAvIHRoOwotICAgIHN0ZXBf
eSA9IHByaXYtPm1vZGVsLmJhc2Uucm93IC0gbmV3X3JvdzsKKyAgICBsb25nIG5ld0NvbHVtbiA9
IC1wcml2LT52aWV3Lm9mZnNldC5jdXIueCAvIHRpbGVXaWR0aDsKKyAgICBzdGVwWCA9IHByaXYt
Pm1vZGVsLmJhc2UuY29sdW1uIC0gbmV3Q29sdW1uOworICAgIGxvbmcgbmV3Um93ID0gLXByaXYt
PnZpZXcub2Zmc2V0LmN1ci55IC8gdGlsZUhlaWdodDsKKyAgICBzdGVwWSA9IHByaXYtPm1vZGVs
LmJhc2Uucm93IC0gbmV3Um93OwogCiAgICAgcHJpdi0+dmlldy5vZmZzZXQub2xkLnggPSBwcml2
LT52aWV3Lm9mZnNldC5jdXIueDsKICAgICBwcml2LT52aWV3Lm9mZnNldC5vbGQueSA9IHByaXYt
PnZpZXcub2Zmc2V0LmN1ci55OwogICAgIGV2YXNfb2JqZWN0X21vdmUoCi0gICAgICAgIHByaXYt
PmNvbnRlbnRzX2NsaXBwZXIsCisgICAgICAgIHByaXYtPmNvbnRlbnRzQ2xpcHBlciwKICAgICAg
ICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggKyBwcml2LT52aWV3LngsCiAgICAgICAgIHByaXYt
PnZpZXcub2Zmc2V0LmN1ci55ICsgcHJpdi0+dmlldy55KTsKIAotICAgIHByaXYtPnZpZXcub2Zm
c2V0LmJhc2UueCArPSBkeCAtIHN0ZXBfeCAqIHR3OwotICAgIHByaXYtPnZpZXcub2Zmc2V0LmJh
c2UueSArPSBkeSAtIHN0ZXBfeSAqIHRoOworICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCAr
PSBkZWx0YVggLSBzdGVwWCAqIHRpbGVXaWR0aDsKKyAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNl
LnkgKz0gZGVsdGFZIC0gc3RlcFkgKiB0aWxlSGVpZ2h0OwogCiAgICAgX2V3a190aWxlZF9iYWNr
aW5nX3N0b3JlX3ZpZXdfcmVmaWxsCi0gICAgICAgIChwcml2LCBwcml2LT52aWV3LngsIHByaXYt
PnZpZXcueSwgc3RlcF94LCBzdGVwX3kpOworICAgICAgICAocHJpdiwgcHJpdi0+dmlldy54LCBw
cml2LT52aWV3LnksIHN0ZXBYLCBzdGVwWSk7CiB9CiAKIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV9zbWFydF9jYWxjdWxhdGVfb2Zmc2V0KEV3a19UaWxlZF9CYWNraW5nX1N0
b3JlX0RhdGEqIHByaXYsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5KQogewotICAgIEV2YXNf
Q29vcmQgZHggPSBwcml2LT52aWV3Lm9mZnNldC5jdXIueCAtIHByaXYtPnZpZXcub2Zmc2V0Lm9s
ZC54OwotICAgIEV2YXNfQ29vcmQgZHkgPSBwcml2LT52aWV3Lm9mZnNldC5jdXIueSAtIHByaXYt
PnZpZXcub2Zmc2V0Lm9sZC55OwotICAgIEV2YXNfQ29vcmQgdHcsIHRoOwotICAgIGludCBzdGVw
X3ksIHN0ZXBfeDsKKyAgICBFdmFzX0Nvb3JkIGRlbHRhWCA9IHByaXYtPnZpZXcub2Zmc2V0LmN1
ci54IC0gcHJpdi0+dmlldy5vZmZzZXQub2xkLng7CisgICAgRXZhc19Db29yZCBkZWx0YVkgPSBw
cml2LT52aWV3Lm9mZnNldC5jdXIueSAtIHByaXYtPnZpZXcub2Zmc2V0Lm9sZC55OworICAgIEV2
YXNfQ29vcmQgdGlsZVdpZHRoLCB0aWxlSGVpZ2h0OworICAgIGludCBzdGVwWSwgc3RlcFg7CiAK
LSAgICBJTkYoIm89JXAsIG9mZnNldDogJSs0ZCwgJSs0ZCAoJSs0ZCwgJSs0ZCkiLAotICAgICAg
ICBwcml2LT5zZWxmLCBkeCwgZHksIHByaXYtPnZpZXcub2Zmc2V0LmN1ci54LCBwcml2LT52aWV3
Lm9mZnNldC5jdXIueSk7CisgICAgSU5GKCJld2tUaWxlJXAsIG9mZnNldDogJSs0ZCwgJSs0ZCAo
JSs0ZCwgJSs0ZCkiLAorICAgICAgICBwcml2LT5zZWxmLCBkZWx0YVgsIGRlbHRhWSwgcHJpdi0+
dmlldy5vZmZzZXQuY3VyLngsIHByaXYtPnZpZXcub2Zmc2V0LmN1ci55KTsKIAotICAgIGlmICgh
ZHggJiYgIWR5KQorICAgIGlmICghZGVsdGFYICYmICFkZWx0YVkpCiAgICAgICAgIHJldHVybjsK
IAotICAgIHR3ID0gcHJpdi0+dmlldy50aWxlLndpZHRoOwotICAgIHRoID0gcHJpdi0+dmlldy50
aWxlLmhlaWdodDsKKyAgICB0aWxlV2lkdGggPSBwcml2LT52aWV3LnRpbGUud2lkdGg7CisgICAg
dGlsZUhlaWdodCA9IHByaXYtPnZpZXcudGlsZS5oZWlnaHQ7CiAKLSAgICBsb25nIG5ld19jb2wg
PSAtcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggLyB0dzsKLSAgICBzdGVwX3ggPSBwcml2LT5tb2Rl
bC5iYXNlLmNvbCAtIG5ld19jb2w7Ci0gICAgbG9uZyBuZXdfcm93ID0gLXByaXYtPnZpZXcub2Zm
c2V0LmN1ci55IC8gdGg7Ci0gICAgc3RlcF95ID0gcHJpdi0+bW9kZWwuYmFzZS5yb3cgLSBuZXdf
cm93OworICAgIGxvbmcgbmV3Q29sID0gLXByaXYtPnZpZXcub2Zmc2V0LmN1ci54IC8gdGlsZVdp
ZHRoOworICAgIHN0ZXBYID0gcHJpdi0+bW9kZWwuYmFzZS5jb2x1bW4gLSBuZXdDb2w7CisgICAg
bG9uZyBuZXdSb3cgPSAtcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkgLyB0aWxlSGVpZ2h0OworICAg
IHN0ZXBZID0gcHJpdi0+bW9kZWwuYmFzZS5yb3cgLSBuZXdSb3c7CiAKICAgICBwcml2LT52aWV3
Lm9mZnNldC5vbGQueCA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci54OwogICAgIHByaXYtPnZpZXcu
b2Zmc2V0Lm9sZC55ID0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLnk7CiAgICAgZXZhc19vYmplY3Rf
bW92ZSgKLSAgICAgICAgcHJpdi0+Y29udGVudHNfY2xpcHBlciwKKyAgICAgICAgcHJpdi0+Y29u
dGVudHNDbGlwcGVyLAogICAgICAgICBwcml2LT52aWV3Lm9mZnNldC5jdXIueCArIHByaXYtPnZp
ZXcueCwKICAgICAgICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkgKyBwcml2LT52aWV3LnkpOwog
Ci0gICAgaWYgKChzdGVwX3ggPCAwICYmIHN0ZXBfeCA8PSAtcHJpdi0+dmlldy5jb2xzKQotICAg
ICAgICB8fCAoc3RlcF94ID4gMCAmJiBzdGVwX3ggPj0gcHJpdi0+dmlldy5jb2xzKQotICAgICAg
ICB8fCAoc3RlcF95IDwgMCAmJiBzdGVwX3kgPD0gLXByaXYtPnZpZXcucm93cykKLSAgICAgICAg
fHwgKHN0ZXBfeSA+IDAgJiYgc3RlcF95ID49IHByaXYtPnZpZXcucm93cykpIHsKKyAgICBpZiAo
KHN0ZXBYIDwgMCAmJiBzdGVwWCA8PSAtcHJpdi0+dmlldy5jb2xzKQorICAgICAgICB8fCAoc3Rl
cFggPiAwICYmIHN0ZXBYID49IHByaXYtPnZpZXcuY29scykKKyAgICAgICAgfHwgKHN0ZXBZIDwg
MCAmJiBzdGVwWSA8PSAtcHJpdi0+dmlldy5yb3dzKQorICAgICAgICB8fCAoc3RlcFkgPiAwICYm
IHN0ZXBZID49IHByaXYtPnZpZXcucm93cykpIHsKIAotICAgICAgICBwcml2LT52aWV3Lm9mZnNl
dC5iYXNlLnggKz0gZHggLSBzdGVwX3ggKiB0dzsKLSAgICAgICAgcHJpdi0+dmlldy5vZmZzZXQu
YmFzZS55ICs9IGR5IC0gc3RlcF95ICogdGg7CisgICAgICAgIHByaXYtPnZpZXcub2Zmc2V0LmJh
c2UueCArPSBkZWx0YVggLSBzdGVwWCAqIHRpbGVXaWR0aDsKKyAgICAgICAgcHJpdi0+dmlldy5v
ZmZzZXQuYmFzZS55ICs9IGRlbHRhWSAtIHN0ZXBZICogdGlsZUhlaWdodDsKIAogICAgICAgICBf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19yZWZpbGwKLSAgICAgICAgICAgIChwcml2LCBw
cml2LT52aWV3LngsIHByaXYtPnZpZXcueSwgc3RlcF94LCBzdGVwX3kpOworICAgICAgICAgICAg
KHByaXYsIHByaXYtPnZpZXcueCwgcHJpdi0+dmlldy55LCBzdGVwWCwgc3RlcFkpOwogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54ICs9IGR4Owot
ICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSArPSBkeTsKKyAgICBwcml2LT52aWV3Lm9mZnNl
dC5iYXNlLnggKz0gZGVsdGFYOworICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSArPSBkZWx0
YVk7CiAKLSAgICBpZiAoc3RlcF95IDwgMCkKLSAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX3ZpZXdfd3JhcF91cChwcml2LCB4LCB5LCAtc3RlcF95KTsKLSAgICBlbHNlIGlmIChzdGVw
X3kgPiAwKQotICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld193cmFwX2Rvd24o
cHJpdiwgeCwgeSwgc3RlcF95KTsKKyAgICBpZiAoc3RlcFkgPCAwKQorICAgICAgICBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfdmlld193cmFwX3VwKHByaXYsIHgsIHksIC1zdGVwWSk7CisgICAg
ZWxzZSBpZiAoc3RlcFkgPiAwKQorICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmll
d193cmFwX2Rvd24ocHJpdiwgeCwgeSwgc3RlcFkpOwogCi0gICAgaWYgKHN0ZXBfeCA8IDApCi0g
ICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3dyYXBfbGVmdChwcml2LCB4LCB5
LCAtc3RlcF94KTsKLSAgICBlbHNlIGlmIChzdGVwX3ggPiAwKQotICAgICAgICBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfdmlld193cmFwX3JpZ2h0KHByaXYsIHgsIHksIHN0ZXBfeCk7CisgICAg
aWYgKHN0ZXBYIDwgMCkKKyAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfd3Jh
cF9sZWZ0KHByaXYsIHgsIHksIC1zdGVwWCk7CisgICAgZWxzZSBpZiAoc3RlcFggPiAwKQorICAg
ICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld193cmFwX3JpZ2h0KHByaXYsIHgsIHks
IHN0ZXBYKTsKIAogICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3Bvc19hcHBseShw
cml2LCB4LCB5KTsKIH0KQEAgLTEyNzAsMzEgKzEyNzAsMzEgQEAgc3RhdGljIHZvaWQgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZV9wb3MoRXdrX1RpbGVkX0JhY2tpbmdf
U3RvcmUKICAgICBwcml2LT52aWV3LnggPSB4OwogICAgIHByaXYtPnZpZXcueSA9IHk7CiAgICAg
ZXZhc19vYmplY3RfbW92ZSgKLSAgICAgICAgcHJpdi0+Y29udGVudHNfY2xpcHBlciwKKyAgICAg
ICAgcHJpdi0+Y29udGVudHNDbGlwcGVyLAogICAgICAgICBwcml2LT52aWV3Lm9mZnNldC5jdXIu
eCArIHByaXYtPnZpZXcueCwKICAgICAgICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkgKyBwcml2
LT52aWV3LnkpOwogfQogCiBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZmls
bF9yZW5kZXJlcnMoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdikKIHsKLSAgICBF
aW5hX0lubGlzdCogaXQ7CisgICAgRWluYV9Jbmxpc3QqIGxpc3Q7CiAgICAgRXdrX1RpbGVkX0Jh
Y2tpbmdfU3RvcmVfSXRlbSogaXRlbTsKICAgICBpbnQgaSwgajsKIAogICAgIGZvciAoaSA9IDA7
IGkgPCBwcml2LT52aWV3LnJvd3M7IGkrKykgewotICAgICAgICBpdCA9IHByaXYtPnZpZXcuaXRl
bXNbaV07CisgICAgICAgIGxpc3QgPSBwcml2LT52aWV3Lml0ZW1zW2ldOwogICAgICAgICBqID0g
MDsKLSAgICAgICAgRUlOQV9JTkxJU1RfRk9SRUFDSChpdCwgaXRlbSkKKyAgICAgICAgRUlOQV9J
TkxJU1RfRk9SRUFDSChsaXN0LCBpdGVtKQogICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5n
X3N0b3JlX2l0ZW1fZmlsbChwcml2LCBpdGVtLCBqKyssIGkpOwogICAgIH0KIH0KIAogc3RhdGlj
IHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZShFdmFzX09iamVj
dCogZXdrVGlsZSkKIHsKLSAgICBFdmFzX0Nvb3JkIHgsIHksIHcsIGg7CisgICAgRXZhc19Db29y
ZCB4LCB5LCB3aWR0aCwgaGVpZ2h0OwogCi0gICAgZXZhc19vYmplY3RfZ2VvbWV0cnlfZ2V0KGV3
a1RpbGUsICZ4LCAmeSwgJncsICZoKTsKLSAgICBEQkcoIm89JXAgYXQgJWQsJWQgKyAlZHglZCIs
IGV3a1RpbGUsIHgsIHksIHcsIGgpOworICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldChld2tU
aWxlLCAmeCwgJnksICZ3aWR0aCwgJmhlaWdodCk7CisgICAgREJHKCJld2tUaWxlJXAgYXQgJWQs
JWQgKyAlZHglZCIsIGV3a1RpbGUsIHgsIHksIHdpZHRoLCBoZWlnaHQpOwogCiAgICAgUFJJVl9E
QVRBX0dFVF9PUl9SRVRVUk4oZXdrVGlsZSwgcHJpdik7CiAKQEAgLTEzMDMsMjUgKzEzMDMsMjUg
QEAgc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZShF
dmFzX09iamVjdCogZXdrVGlsZSkKICAgICBld2tfdGlsZV9tYXRyaXhfZnJlZXplKHByaXYtPm1v
ZGVsLm1hdHJpeCk7CiAKICAgICBpZiAoIXByaXYtPnJlbmRlci5zdXNwZW5kICYmIHByaXYtPmNo
YW5nZWQubW9kZWwpIHsKLSAgICAgICAgdW5zaWduZWQgbG9uZyBjb2xzLCByb3dzOworICAgICAg
ICB1bnNpZ25lZCBsb25nIGNvbHVtbnMsIHJvd3M7CiAKLSAgICAgICAgY29scyA9IHByaXYtPm1v
ZGVsLndpZHRoIC8gcHJpdi0+dmlldy50aWxlLndpZHRoICsgMTsKKyAgICAgICAgY29sdW1ucyA9
IHByaXYtPm1vZGVsLndpZHRoIC8gcHJpdi0+dmlldy50aWxlLndpZHRoICsgMTsKICAgICAgICAg
cm93cyA9IHByaXYtPm1vZGVsLmhlaWdodCAvIHByaXYtPnZpZXcudGlsZS5oZWlnaHQgKyAxOwog
Ci0gICAgICAgIHByaXYtPm1vZGVsLm9sZC5jb2xzID0gcHJpdi0+bW9kZWwuY3VyLmNvbHM7Ci0g
ICAgICAgIHByaXYtPm1vZGVsLm9sZC5yb3dzID0gcHJpdi0+bW9kZWwuY3VyLnJvd3M7Ci0gICAg
ICAgIHByaXYtPm1vZGVsLmN1ci5jb2xzID0gY29sczsKLSAgICAgICAgcHJpdi0+bW9kZWwuY3Vy
LnJvd3MgPSByb3dzOwotICAgICAgICBpZiAocHJpdi0+bW9kZWwub2xkLmNvbHMgPiBjb2xzKQot
ICAgICAgICAgICAgY29scyA9IHByaXYtPm1vZGVsLm9sZC5jb2xzOworICAgICAgICBwcml2LT5t
b2RlbC5vbGQuY29sdW1ucyA9IHByaXYtPm1vZGVsLmN1cnJlbnQuY29sdW1uczsKKyAgICAgICAg
cHJpdi0+bW9kZWwub2xkLnJvd3MgPSBwcml2LT5tb2RlbC5jdXJyZW50LnJvd3M7CisgICAgICAg
IHByaXYtPm1vZGVsLmN1cnJlbnQuY29sdW1ucyA9IGNvbHVtbnM7CisgICAgICAgIHByaXYtPm1v
ZGVsLmN1cnJlbnQucm93cyA9IHJvd3M7CisgICAgICAgIGlmIChwcml2LT5tb2RlbC5vbGQuY29s
dW1ucyA+IGNvbHVtbnMpCisgICAgICAgICAgICBjb2x1bW5zID0gcHJpdi0+bW9kZWwub2xkLmNv
bHVtbnM7CiAgICAgICAgIGlmIChwcml2LT5tb2RlbC5vbGQucm93cyA+IHJvd3MpCiAgICAgICAg
ICAgICByb3dzID0gcHJpdi0+bW9kZWwub2xkLnJvd3M7Ci0gICAgICAgIGV3a190aWxlX21hdHJp
eF9yZXNpemUocHJpdi0+bW9kZWwubWF0cml4LCBjb2xzLCByb3dzKTsKKyAgICAgICAgZXdrX3Rp
bGVfbWF0cml4X3Jlc2l6ZShwcml2LT5tb2RlbC5tYXRyaXgsIGNvbHVtbnMsIHJvd3MpOwogICAg
IH0KIAotICAgIGlmIChwcml2LT5jaGFuZ2VkLnBvcyAmJiAocHJpdi0+dmlldy54ICE9IHggfHwg
cHJpdi0+dmlldy55ICE9IHkpKSB7CisgICAgaWYgKHByaXYtPmNoYW5nZWQucG9zaXRpb24gJiYg
KHByaXYtPnZpZXcueCAhPSB4IHx8IHByaXYtPnZpZXcueSAhPSB5KSkgewogICAgICAgICBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfY2FsY3VsYXRlX3Bvcyhwcml2LCB4LCB5KTsKLSAg
ICAgICAgcHJpdi0+Y2hhbmdlZC5wb3MgPSBFSU5BX0ZBTFNFOworICAgICAgICBwcml2LT5jaGFu
Z2VkLnBvc2l0aW9uID0gRUlOQV9GQUxTRTsKICAgICB9CiAgICAgaWYgKHByaXYtPmNoYW5nZWQu
b2Zmc2V0KSB7CiAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9jYWxjdWxh
dGVfb2Zmc2V0KHByaXYsIHgsIHkpOwpAQCAtMTMyOSw3ICsxMzI5LDcgQEAgc3RhdGljIHZvaWQg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZShFdmFzX09iamVjdCogZXdr
VGlsZSkKICAgICB9CiAKICAgICBpZiAocHJpdi0+Y2hhbmdlZC5zaXplKSB7Ci0gICAgICAgIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9jYWxjdWxhdGVfc2l6ZShwcml2LCB3LCBoKTsK
KyAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZV9zaXplKHBy
aXYsIHdpZHRoLCBoZWlnaHQpOwogICAgICAgICBwcml2LT5jaGFuZ2VkLnNpemUgPSBFSU5BX0ZB
TFNFOwogICAgIH0KIApAQCAtMTM0MSwxNyArMTM0MSwxNyBAQCBzdGF0aWMgdm9pZCBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfY2FsY3VsYXRlKEV2YXNfT2JqZWN0KiBld2tUaWxlKQog
ICAgICAgICByZWN0LmggPSBwcml2LT5tb2RlbC5oZWlnaHQ7CiAgICAgICAgIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV9maWxsX3JlbmRlcmVycyhwcml2KTsKICAgICAgICAgZXdrX3RpbGVfbWF0
cml4X3Jlc2l6ZShwcml2LT5tb2RlbC5tYXRyaXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcHJpdi0+bW9kZWwuY3VyLmNvbHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcHJpdi0+bW9kZWwuY3VyLnJvd3MpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHByaXYtPm1vZGVsLmN1cnJlbnQuY29sdW1ucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwcml2LT5tb2RlbC5jdXJyZW50LnJvd3MpOwogICAgICAgICBwcml2LT5jaGFuZ2VkLm1v
ZGVsID0gRUlOQV9GQUxTRTsKLSAgICAgICAgZXZhc19vYmplY3RfcmVzaXplKHByaXYtPmNvbnRl
bnRzX2NsaXBwZXIsIHByaXYtPm1vZGVsLndpZHRoLCBwcml2LT5tb2RlbC5oZWlnaHQpOworICAg
ICAgICBldmFzX29iamVjdF9yZXNpemUocHJpdi0+Y29udGVudHNDbGlwcGVyLCBwcml2LT5tb2Rl
bC53aWR0aCwgcHJpdi0+bW9kZWwuaGVpZ2h0KTsKICAgICAgICAgX2V3a190aWxlZF9iYWNraW5n
X3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZV9vZmZzZXRfZm9yY2UocHJpdik7CiAKICAgICAgICAgLyog
TWFrZSBzdXJlIHdlIGRvIG5vdCBtaXNzIGFueSBpbXBvcnRhbnQgcmVwYWludCBieQogICAgICAg
ICAgKiByZXBhaW50aW5nIHRoZSB3aG9sZSB2aWV3cG9ydCAqLwotICAgICAgICBjb25zdCBFaW5h
X1JlY3RhbmdsZSByID0KKyAgICAgICAgY29uc3QgRWluYV9SZWN0YW5nbGUgcmVjdDEgPQogICAg
ICAgICB7IDAsIDAsIHByaXYtPm1vZGVsLndpZHRoLCBwcml2LT5tb2RlbC5oZWlnaHQgfTsKLSAg
ICAgICAgZXdrX3RpbGVfbWF0cml4X3VwZGF0ZShwcml2LT5tb2RlbC5tYXRyaXgsICZyLAorICAg
ICAgICBld2tfdGlsZV9tYXRyaXhfdXBkYXRlKHByaXYtPm1vZGVsLm1hdHJpeCwgJnJlY3QxLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaXYtPnZpZXcudGlsZS56b29tKTsKICAg
ICB9CiAKQEAgLTE0MDIsNyArMTQwMiw3IEBAIHZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
cmVuZGVyX2NiX3NldChFdmFzX09iamVjdCogZXdrVGlsZSwgRWluYV9Cb29sICgqY2FsCiB7CiAg
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oY2FsbGJhY2spOwogICAgIFBSSVZfREFUQV9H
RVRfT1JfUkVUVVJOKGV3a1RpbGUsIHByaXYpOwotICAgIHByaXYtPnJlbmRlci5jYiA9IGNhbGxi
YWNrOworICAgIHByaXYtPnJlbmRlci5jYWxsYmFjayA9IGNhbGxiYWNrOwogICAgIHByaXYtPnJl
bmRlci5kYXRhID0gKHZvaWQqKWRhdGE7CiB9CiAKQEAgLTE0MzksNyArMTQzOSw3IEBAIHN0YXRp
YyBFaW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3Njcm9sbF9mdWxsX29mZnNldF9z
ZXRfaW50ZXJuYWwoRXdrX1RpCiAKIEVpbmFfQm9vbCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9z
Y3JvbGxfZnVsbF9vZmZzZXRfc2V0KEV2YXNfT2JqZWN0KiBld2tUaWxlLCBFdmFzX0Nvb3JkIHgs
IEV2YXNfQ29vcmQgeSkKIHsKLSAgICBEQkcoIm89JXAsIHg9JWQsIHk9JWQiLCBld2tUaWxlLCB4
LCB5KTsKKyAgICBEQkcoImV3a1RpbGUlcCwgeD0lZCwgeT0lZCIsIGV3a1RpbGUsIHgsIHkpOwog
CiAgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4oZXdrVGlsZSwgcHJpdiwgRUlOQV9GQUxTRSk7
CiAgICAgaWYgKHggPT0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggJiYgeSA9PSBwcml2LT52aWV3
Lm9mZnNldC5jdXIueSkKQEAgLTE0NDgsMTYgKzE0NDgsMTYgQEAgRWluYV9Cb29sIGV3a190aWxl
ZF9iYWNraW5nX3N0b3JlX3Njcm9sbF9mdWxsX29mZnNldF9zZXQoRXZhc19PYmplY3QqIGV3a1Rp
bGUsIEUKICAgICByZXR1cm4gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3Njcm9sbF9mdWxsX29m
ZnNldF9zZXRfaW50ZXJuYWwocHJpdiwgeCwgeSk7CiB9CiAKLUVpbmFfQm9vbCBld2tfdGlsZWRf
YmFja2luZ19zdG9yZV9zY3JvbGxfZnVsbF9vZmZzZXRfYWRkKEV2YXNfT2JqZWN0KiBld2tUaWxl
LCBFdmFzX0Nvb3JkIGR4LCBFdmFzX0Nvb3JkIGR5KQorRWluYV9Cb29sIGV3a190aWxlZF9iYWNr
aW5nX3N0b3JlX3Njcm9sbF9mdWxsX29mZnNldF9hZGQoRXZhc19PYmplY3QqIGV3a1RpbGUsIEV2
YXNfQ29vcmQgZGVsdGFYLCBFdmFzX0Nvb3JkIGRlbHRhWSkKIHsKLSAgICBEQkcoIm89JXAsIGR4
PSVkLCBkeT0lZCIsIGV3a1RpbGUsIGR4LCBkeSk7CisgICAgREJHKCJld2tUaWxlJXAsIGRlbHRh
WD0lZCwgZGVsdGFZPSVkIiwgZXdrVGlsZSwgZGVsdGFYLCBkZWx0YVkpOwogCiAgICAgUFJJVl9E
QVRBX0dFVF9PUl9SRVRVUk4oZXdrVGlsZSwgcHJpdiwgRUlOQV9GQUxTRSk7Ci0gICAgaWYgKCFk
eCAmJiAhZHkpCisgICAgaWYgKCFkZWx0YVggJiYgIWRlbHRhWSkKICAgICAgICAgcmV0dXJuIEVJ
TkFfVFJVRTsKIAogICAgIHJldHVybiBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc2Nyb2xsX2Z1
bGxfb2Zmc2V0X3NldF9pbnRlcm5hbAotICAgICAgICAgICAgICAgKHByaXYsIHByaXYtPnZpZXcu
b2Zmc2V0LmN1ci54ICsgZHgsIHByaXYtPnZpZXcub2Zmc2V0LmN1ci55ICsgZHkpOworICAgICAg
ICAgICAgICAgKHByaXYsIHByaXYtPnZpZXcub2Zmc2V0LmN1ci54ICsgZGVsdGFYLCBwcml2LT52
aWV3Lm9mZnNldC5jdXIueSArIGRlbHRhWSk7CiB9CiAKIHN0YXRpYyBFaW5hX0Jvb2wgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX3pvb21fc2V0X2ludGVybmFsKEV3a19UaWxlZF9CYWNraW5nX1N0
b3JlX0RhdGEqIHByaXYsIGZsb2F0KiB6b29tLCBFdmFzX0Nvb3JkIGN1cnJlbnRYLCBFdmFzX0Nv
b3JkIGN1cnJlbnRZLCBFdmFzX0Nvb3JkKiBvZmZzZXRYLCBFdmFzX0Nvb3JkKiBvZmZzZXRZKQpA
QCAtMTQ3MiwxOSArMTQ3MiwxOSBAQCBzdGF0aWMgRWluYV9Cb29sIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV96b29tX3NldF9pbnRlcm5hbChFd2tfVGlsZWRfQmFja2luZ19TdAogICAgIH0KIAog
ICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfZmx1c2gocHJp
dik7Ci0gICAgRXZhc19Db29yZCB0dywgdGg7CisgICAgRXZhc19Db29yZCB0aWxlV2lkdGgsIHRp
bGVIZWlnaHQ7CiAKICAgICAqem9vbSA9IFJPVU5ERURfWk9PTShwcml2LT52aWV3LnRpbGUud2lk
dGgsICp6b29tKTsKIAotICAgIHR3ID0gcHJpdi0+dmlldy50aWxlLndpZHRoOwotICAgIHRoID0g
cHJpdi0+dmlldy50aWxlLmhlaWdodDsKKyAgICB0aWxlV2lkdGggPSBwcml2LT52aWV3LnRpbGUu
d2lkdGg7CisgICAgdGlsZUhlaWdodCA9IHByaXYtPnZpZXcudGlsZS5oZWlnaHQ7CiAKICAgICBm
bG9hdCBzY2FsZSA9ICp6b29tIC8gcHJpdi0+dmlldy50aWxlLnpvb207CiAKICAgICBwcml2LT52
aWV3LnRpbGUuem9vbSA9ICp6b29tOwogICAgIC8vIHRvZG86IGNoZWNrIGN1cnJlbnRYIFswLCB3
XS4uLgotICAgIHByaXYtPnZpZXcub2Zmc2V0Lnpvb21fY2VudGVyLnggPSBjdXJyZW50WDsKLSAg
ICBwcml2LT52aWV3Lm9mZnNldC56b29tX2NlbnRlci55ID0gY3VycmVudFk7CisgICAgcHJpdi0+
dmlldy5vZmZzZXQuem9vbUNlbnRlci54ID0gY3VycmVudFg7CisgICAgcHJpdi0+dmlldy5vZmZz
ZXQuem9vbUNlbnRlci55ID0gY3VycmVudFk7CiAKIAogICAgIGlmICghcHJpdi0+dmlldy53aWR0
aCB8fCAhcHJpdi0+dmlldy5oZWlnaHQpIHsKQEAgLTE0OTIsMzggKzE0OTIsMzggQEAgc3RhdGlj
IEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfem9vbV9zZXRfaW50ZXJuYWwoRXdr
X1RpbGVkX0JhY2tpbmdfU3QKICAgICAgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ID0gMDsK
ICAgICAgICAgcmV0dXJuIEVJTkFfVFJVRTsKICAgICB9Ci0gICAgRWluYV9Jbmxpc3QqKiBpdHIs
ICoqaXRyX2VuZDsKKyAgICBFaW5hX0lubGlzdCoqIGl0ZXJhdG9yLCAqKml0ZXJhdG9yRW5kOwog
ICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0qIGl0OwogCi0gICAgRXZhc19Db29yZCBu
ZXdfeCA9IGN1cnJlbnRYICsgKHByaXYtPnZpZXcub2Zmc2V0LmN1ci54IC0gY3VycmVudFgpICog
c2NhbGU7Ci0gICAgRXZhc19Db29yZCBuZXdfeSA9IGN1cnJlbnRZICsgKHByaXYtPnZpZXcub2Zm
c2V0LmN1ci55IC0gY3VycmVudFkpICogc2NhbGU7CisgICAgRXZhc19Db29yZCBuZXdYID0gY3Vy
cmVudFggKyAocHJpdi0+dmlldy5vZmZzZXQuY3VyLnggLSBjdXJyZW50WCkgKiBzY2FsZTsKKyAg
ICBFdmFzX0Nvb3JkIG5ld1kgPSBjdXJyZW50WSArIChwcml2LT52aWV3Lm9mZnNldC5jdXIueSAt
IGN1cnJlbnRZKSAqIHNjYWxlOwogCi0gICAgRXZhc19Db29yZCBtb2RlbF93ID0gcHJpdi0+bW9k
ZWwud2lkdGggKiBzY2FsZTsKLSAgICBFdmFzX0Nvb3JkIG1vZGVsX2ggPSBwcml2LT5tb2RlbC5o
ZWlnaHQgKiBzY2FsZTsKKyAgICBFdmFzX0Nvb3JkIG1vZGVsV2lkdGggPSBwcml2LT5tb2RlbC53
aWR0aCAqIHNjYWxlOworICAgIEV2YXNfQ29vcmQgbW9kZWxIZWlnaHQgPSBwcml2LT5tb2RlbC5o
ZWlnaHQgKiBzY2FsZTsKIAotICAgIGlmIChtb2RlbF93IDwgcHJpdi0+dmlldy53aWR0aCB8fCBu
ZXdfeCA+PSAwKQotICAgICAgICBuZXdfeCA9IDA7Ci0gICAgZWxzZSBpZiAoLW5ld194ICsgcHJp
di0+dmlldy53aWR0aCA+PSBtb2RlbF93KQotICAgICAgICBuZXdfeCA9IC1tb2RlbF93ICsgcHJp
di0+dmlldy53aWR0aDsKKyAgICBpZiAobW9kZWxXaWR0aCA8IHByaXYtPnZpZXcud2lkdGggfHwg
bmV3WCA+PSAwKQorICAgICAgICBuZXdYID0gMDsKKyAgICBlbHNlIGlmICgtbmV3WCArIHByaXYt
PnZpZXcud2lkdGggPj0gbW9kZWxXaWR0aCkKKyAgICAgICAgbmV3WCA9IC1tb2RlbFdpZHRoICsg
cHJpdi0+dmlldy53aWR0aDsKIAotICAgIGlmIChtb2RlbF9oIDwgcHJpdi0+dmlldy5oZWlnaHQg
fHwgbmV3X3kgPj0gMCkKLSAgICAgICAgbmV3X3kgPSAwOwotICAgIGVsc2UgaWYgKC1uZXdfeSAr
IHByaXYtPnZpZXcuaGVpZ2h0ID49IG1vZGVsX2gpCi0gICAgICAgIG5ld195ID0gLW1vZGVsX2gg
KyBwcml2LT52aWV3LmhlaWdodDsKKyAgICBpZiAobW9kZWxIZWlnaHQgPCBwcml2LT52aWV3Lmhl
aWdodCB8fCBuZXdZID49IDApCisgICAgICAgIG5ld1kgPSAwOworICAgIGVsc2UgaWYgKC1uZXdZ
ICsgcHJpdi0+dmlldy5oZWlnaHQgPj0gbW9kZWxIZWlnaHQpCisgICAgICAgIG5ld1kgPSAtbW9k
ZWxIZWlnaHQgKyBwcml2LT52aWV3LmhlaWdodDsKIAotICAgIEV2YXNfQ29vcmQgYnggPSBuZXdf
eCAlIHR3OwotICAgIEV2YXNfQ29vcmQgYnkgPSBuZXdfeSAlIHRoOwotICAgIHByaXYtPm1vZGVs
LmJhc2UuY29sID0gLW5ld194IC8gdHc7Ci0gICAgcHJpdi0+bW9kZWwuYmFzZS5yb3cgPSAtbmV3
X3kgLyB0aDsKKyAgICBFdmFzX0Nvb3JkIGJhc2VYID0gbmV3WCAlIHRpbGVXaWR0aDsKKyAgICBF
dmFzX0Nvb3JkIGJhc2VZID0gbmV3WSAlIHRpbGVIZWlnaHQ7CisgICAgcHJpdi0+bW9kZWwuYmFz
ZS5jb2x1bW4gPSAtbmV3WCAvIHRpbGVXaWR0aDsKKyAgICBwcml2LT5tb2RlbC5iYXNlLnJvdyA9
IC1uZXdZIC8gdGlsZUhlaWdodDsKIAogICAgIHByaXYtPmNoYW5nZWQuc2l6ZSA9IEVJTkFfVFJV
RTsKICAgICBwcml2LT5jaGFuZ2VkLm1vZGVsID0gRUlOQV9UUlVFOwogICAgIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV9jaGFuZ2VkKHByaXYpOwogCi0gICAgcHJpdi0+dmlldy5vZmZzZXQuY3Vy
LnggPSBuZXdfeDsKLSAgICBwcml2LT52aWV3Lm9mZnNldC5jdXIueSA9IG5ld195OwotICAgIHBy
aXYtPnZpZXcub2Zmc2V0LmJhc2UueCA9IGJ4OwotICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2Uu
eSA9IGJ5OworICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1ci54ID0gbmV3WDsKKyAgICBwcml2LT52
aWV3Lm9mZnNldC5jdXIueSA9IG5ld1k7CisgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54ID0g
YmFzZVg7CisgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ID0gYmFzZVk7CiAKICAgICBwcml2
LT52aWV3Lm9mZnNldC5vbGQueCA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci54OwogICAgIHByaXYt
PnZpZXcub2Zmc2V0Lm9sZC55ID0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLnk7CkBAIC0xNTMxLDI4
ICsxNTMxLDI4IEBAIHN0YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3pv
b21fc2V0X2ludGVybmFsKEV3a19UaWxlZF9CYWNraW5nX1N0CiAgICAgKm9mZnNldFkgPSBwcml2
LT52aWV3Lm9mZnNldC5jdXIueTsKIAogICAgIGV2YXNfb2JqZWN0X21vdmUoCi0gICAgICAgIHBy
aXYtPmNvbnRlbnRzX2NsaXBwZXIsCi0gICAgICAgIG5ld194ICsgcHJpdi0+dmlldy54LAotICAg
ICAgICBuZXdfeSArIHByaXYtPnZpZXcueSk7CisgICAgICAgIHByaXYtPmNvbnRlbnRzQ2xpcHBl
ciwKKyAgICAgICAgbmV3WCArIHByaXYtPnZpZXcueCwKKyAgICAgICAgbmV3WSArIHByaXYtPnZp
ZXcueSk7CiAKICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZmlsbF9yZW5kZXJlcnMocHJp
dik7CiAKLSAgICBFdmFzX0Nvb3JkIG95ID0gcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ICsgcHJp
di0+dmlldy55OwotICAgIEV2YXNfQ29vcmQgYmFzZV9veCA9IHByaXYtPnZpZXcueCArIHByaXYt
PnZpZXcub2Zmc2V0LmJhc2UueDsKKyAgICBFdmFzX0Nvb3JkIHRpbGVQb3NpdGlvblkgPSBwcml2
LT52aWV3Lm9mZnNldC5iYXNlLnkgKyBwcml2LT52aWV3Lnk7CisgICAgRXZhc19Db29yZCBiYXNl
VGlsZVBvc2l0aW9uWCA9IHByaXYtPnZpZXcueCArIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueDsK
IAotICAgIGl0ciA9IHByaXYtPnZpZXcuaXRlbXM7Ci0gICAgaXRyX2VuZCA9IGl0ciArIHByaXYt
PnZpZXcucm93czsKKyAgICBpdGVyYXRvciA9IHByaXYtPnZpZXcuaXRlbXM7CisgICAgaXRlcmF0
b3JFbmQgPSBpdGVyYXRvciArIHByaXYtPnZpZXcucm93czsKIAotICAgIGZvciAoOyBpdHIgPCBp
dHJfZW5kOyBpdHIrKykgewotICAgICAgICBFdmFzX0Nvb3JkIG94ID0gYmFzZV9veDsKLSAgICAg
ICAgRWluYV9Jbmxpc3QqIGxzdCA9ICppdHI7CisgICAgZm9yICg7IGl0ZXJhdG9yIDwgaXRlcmF0
b3JFbmQ7IGl0ZXJhdG9yKyspIHsKKyAgICAgICAgRXZhc19Db29yZCB0aWxlUG9zaXRpb25YID0g
YmFzZVRpbGVQb3NpdGlvblg7CisgICAgICAgIEVpbmFfSW5saXN0KiBsc3QgPSAqaXRlcmF0b3I7
CiAKICAgICAgICAgRUlOQV9JTkxJU1RfRk9SRUFDSChsc3QsIGl0KSB7Ci0gICAgICAgICAgICBf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9tb3ZlKGl0LCBveCwgb3kpOwotICAgICAgICAg
ICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcmVzaXplKGl0LCB0dywgdGgpOwotICAg
ICAgICAgICAgb3ggKz0gdHc7CisgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
aXRlbV9tb3ZlKGl0LCB0aWxlUG9zaXRpb25YLCB0aWxlUG9zaXRpb25ZKTsKKyAgICAgICAgICAg
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Jlc2l6ZShpdCwgdGlsZVdpZHRoLCB0aWxl
SGVpZ2h0KTsKKyAgICAgICAgICAgIHRpbGVQb3NpdGlvblggKz0gdGlsZVdpZHRoOwogICAgICAg
ICB9Ci0gICAgICAgIG95ICs9IHRoOworICAgICAgICB0aWxlUG9zaXRpb25ZICs9IHRpbGVIZWln
aHQ7CiAgICAgfQogCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKQEAgLTE1NjAsNyArMTU2MCw3IEBA
IHN0YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3pvb21fc2V0X2ludGVy
bmFsKEV3a19UaWxlZF9CYWNraW5nX1N0CiAKIEVpbmFfQm9vbCBld2tfdGlsZWRfYmFja2luZ19z
dG9yZV96b29tX3NldChFdmFzX09iamVjdCogZXdrVGlsZSwgZmxvYXQqIHpvb20sIEV2YXNfQ29v
cmQgY3VycmVudFgsIEV2YXNfQ29vcmQgY3VycmVudFksIEV2YXNfQ29vcmQqIG9mZnNldFgsIEV2
YXNfQ29vcmQqIG9mZnNldFkpCiB7Ci0gICAgREJHKCJvPSVwLCB6b29tPSVmIiwgZXdrVGlsZSwg
Knpvb20pOworICAgIERCRygiZXdrVGlsZSVwLCB6b29tPSVmIiwgZXdrVGlsZSwgKnpvb20pOwog
CiAgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4oZXdrVGlsZSwgcHJpdiwgRUlOQV9GQUxTRSk7
CiAKQEAgLTE1NjksNzMgKzE1NjksNzMgQEAgRWluYV9Cb29sIGV3a190aWxlZF9iYWNraW5nX3N0
b3JlX3pvb21fc2V0KEV2YXNfT2JqZWN0KiBld2tUaWxlLCBmbG9hdCogem9vbSwgRXYKIAogRWlu
YV9Cb29sIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3pvb21fd2Vha19zZXQoRXZhc19PYmplY3Qq
IGV3a1RpbGUsIGZsb2F0IHpvb20sIEV2YXNfQ29vcmQgY3VycmVudFgsIEV2YXNfQ29vcmQgY3Vy
cmVudFkpCiB7Ci0gICAgREJHKCJvPSVwLCB6b29tPSVmIiwgZXdrVGlsZSwgem9vbSk7CisgICAg
REJHKCJld2tUaWxlJXAsIHpvb209JWYiLCBld2tUaWxlLCB6b29tKTsKICAgICBQUklWX0RBVEFf
R0VUX09SX1JFVFVSTihld2tUaWxlLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBpZiAoIXByaXYt
PnZpZXcud2lkdGggfHwgIXByaXYtPnZpZXcuaGVpZ2h0KQogICAgICAgICByZXR1cm4gRUlOQV9G
QUxTRTsKLSAgICBFaW5hX0lubGlzdCoqIGl0ciwgKiogaXRyX2VuZDsKLSAgICBFd2tfVGlsZWRf
QmFja2luZ19TdG9yZV9JdGVtKiBpdDsKLSAgICBFdmFzX0Nvb3JkIHR3LCB0aDsKLSAgICBFaW5h
X0Jvb2wgcmVjYWxjID0gRUlOQV9GQUxTRTsKKyAgICBFaW5hX0lubGlzdCoqIGl0ZXJhdG9yLCAq
KiBpdGVyYXRvckVuZDsKKyAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKiBpdGVtOwor
ICAgIEV2YXNfQ29vcmQgdGlsZVdpZHRoLCB0aWxlSGVpZ2h0OworICAgIEVpbmFfQm9vbCByZUNh
bGN1bGF0ZSA9IEVJTkFfRkFMU0U7CiAKICAgICBmbG9hdCBzY2FsZSA9IHpvb20gLyBwcml2LT52
aWV3LnRpbGUuem9vbTsKIAotICAgIHR3ID0gVElMRV9TSVpFX0FUX1pPT00ocHJpdi0+dmlldy50
aWxlLndpZHRoLCBzY2FsZSk7Ci0gICAgc2NhbGUgPSBUSUxFX1pPT01fQVRfU0laRSh0dywgcHJp
di0+dmlldy50aWxlLndpZHRoKTsKLSAgICB0aCA9IFRJTEVfU0laRV9BVF9aT09NKHByaXYtPnZp
ZXcudGlsZS5oZWlnaHQsIHNjYWxlKTsKKyAgICB0aWxlV2lkdGggPSBUSUxFX1NJWkVfQVRfWk9P
TShwcml2LT52aWV3LnRpbGUud2lkdGgsIHNjYWxlKTsKKyAgICBzY2FsZSA9IFRJTEVfWk9PTV9B
VF9TSVpFKHRpbGVXaWR0aCwgcHJpdi0+dmlldy50aWxlLndpZHRoKTsKKyAgICB0aWxlSGVpZ2h0
ID0gVElMRV9TSVpFX0FUX1pPT00ocHJpdi0+dmlldy50aWxlLmhlaWdodCwgc2NhbGUpOwogICAg
IHpvb20gPSBzY2FsZSAqIHByaXYtPnZpZXcudGlsZS56b29tOwogCi0gICAgRXZhc19Db29yZCBt
b2RlbF93ID0gcHJpdi0+bW9kZWwud2lkdGggKiBzY2FsZTsKLSAgICBFdmFzX0Nvb3JkIG1vZGVs
X2ggPSBwcml2LT5tb2RlbC5oZWlnaHQgKiBzY2FsZTsKKyAgICBFdmFzX0Nvb3JkIG1vZGVsV2lk
dGggPSBwcml2LT5tb2RlbC53aWR0aCAqIHNjYWxlOworICAgIEV2YXNfQ29vcmQgbW9kZWxIZWln
aHQgPSBwcml2LT5tb2RlbC5oZWlnaHQgKiBzY2FsZTsKIAotICAgIGV2YXNfb2JqZWN0X3Jlc2l6
ZShwcml2LT5jb250ZW50c19jbGlwcGVyLCBtb2RlbF93LCBtb2RlbF9oKTsKKyAgICBldmFzX29i
amVjdF9yZXNpemUocHJpdi0+Y29udGVudHNDbGlwcGVyLCBtb2RlbFdpZHRoLCBtb2RlbEhlaWdo
dCk7CiAKLSAgICBpbnQgdnJvd3MgPSBzdGF0aWNfY2FzdDxpbnQ+KGNlaWwoc3RhdGljX2Nhc3Q8
ZmxvYXQ+KHByaXYtPnZpZXcuaGVpZ2h0IC8gdGgpKSArIDEpOwotICAgIGludCB2Y29scyA9IHN0
YXRpY19jYXN0PGludD4oY2VpbChzdGF0aWNfY2FzdDxmbG9hdD4ocHJpdi0+dmlldy53aWR0aCAv
IHR3KSkgKyAxKTsKLSAgICBFdmFzX0Nvb3JkIG5ld194ID0gY3VycmVudFggKyAocHJpdi0+dmll
dy5vZmZzZXQuY3VyLnggLSBjdXJyZW50WCkgKiBzY2FsZTsKLSAgICBFdmFzX0Nvb3JkIG5ld195
ID0gY3VycmVudFkgKyAocHJpdi0+dmlldy5vZmZzZXQuY3VyLnkgLSBjdXJyZW50WSkgKiBzY2Fs
ZTsKLSAgICBFdmFzX0Nvb3JkIGJ4ID0gbmV3X3ggJSB0dzsKLSAgICBFdmFzX0Nvb3JkIGJ5ID0g
bmV3X3kgJSB0aDsKLSAgICB1bnNpZ25lZCBsb25nIGJhc2Vfcm93ID0gLW5ld195IC8gdGg7Ci0g
ICAgdW5zaWduZWQgbG9uZyBiYXNlX2NvbCA9IC1uZXdfeCAvIHR3OworICAgIGludCB2cm93cyA9
IHN0YXRpY19jYXN0PGludD4oY2VpbChzdGF0aWNfY2FzdDxmbG9hdD4ocHJpdi0+dmlldy5oZWln
aHQgLyB0aWxlSGVpZ2h0KSkgKyAxKTsKKyAgICBpbnQgdmNvbHMgPSBzdGF0aWNfY2FzdDxpbnQ+
KGNlaWwoc3RhdGljX2Nhc3Q8ZmxvYXQ+KHByaXYtPnZpZXcud2lkdGggLyB0aWxlV2lkdGgpKSAr
IDEpOworICAgIEV2YXNfQ29vcmQgbmV3WCA9IGN1cnJlbnRYICsgKHByaXYtPnZpZXcub2Zmc2V0
LmN1ci54IC0gY3VycmVudFgpICogc2NhbGU7CisgICAgRXZhc19Db29yZCBuZXdZID0gY3VycmVu
dFkgKyAocHJpdi0+dmlldy5vZmZzZXQuY3VyLnkgLSBjdXJyZW50WSkgKiBzY2FsZTsKKyAgICBF
dmFzX0Nvb3JkIGJhc2VYID0gbmV3WCAlIHRpbGVXaWR0aDsKKyAgICBFdmFzX0Nvb3JkIGJhc2VZ
ID0gbmV3WSAlIHRpbGVIZWlnaHQ7CisgICAgdW5zaWduZWQgbG9uZyBiYXNlUm93ID0gLW5ld1kg
LyB0aWxlSGVpZ2h0OworICAgIHVuc2lnbmVkIGxvbmcgYmFzZUNvbHVtbiA9IC1uZXdYIC8gdGls
ZVdpZHRoOwogCi0gICAgaWYgKGJhc2Vfcm93ICE9IHByaXYtPm1vZGVsLmJhc2Uucm93IHx8IGJh
c2VfY29sICE9IHByaXYtPm1vZGVsLmJhc2UuY29sKSB7Ci0gICAgICAgIHByaXYtPm1vZGVsLmJh
c2Uucm93ID0gYmFzZV9yb3c7Ci0gICAgICAgIHByaXYtPm1vZGVsLmJhc2UuY29sID0gYmFzZV9j
b2w7Ci0gICAgICAgIHJlY2FsYyA9IEVJTkFfVFJVRTsKKyAgICBpZiAoYmFzZVJvdyAhPSBwcml2
LT5tb2RlbC5iYXNlLnJvdyB8fCBiYXNlQ29sdW1uICE9IHByaXYtPm1vZGVsLmJhc2UuY29sdW1u
KSB7CisgICAgICAgIHByaXYtPm1vZGVsLmJhc2Uucm93ID0gYmFzZVJvdzsKKyAgICAgICAgcHJp
di0+bW9kZWwuYmFzZS5jb2x1bW4gPSBiYXNlQ29sdW1uOworICAgICAgICByZUNhbGN1bGF0ZSA9
IEVJTkFfVFJVRTsKICAgICB9CiAKICAgICBpZiAodnJvd3MgPiBwcml2LT52aWV3LnJvd3MgfHwg
dmNvbHMgPiBwcml2LT52aWV3LmNvbHMpCi0gICAgICAgIHJlY2FsYyA9IEVJTkFfVFJVRTsKKyAg
ICAgICAgcmVDYWxjdWxhdGUgPSBFSU5BX1RSVUU7CiAKLSAgICBpZiAocmVjYWxjKSB7CisgICAg
aWYgKHJlQ2FsY3VsYXRlKSB7CiAgICAgICAgIEV2YXNfQ29vcmQgd2lkdGgsIGhlaWdodDsKICAg
ICAgICAgZXZhc19vYmplY3RfZ2VvbWV0cnlfZ2V0KGV3a1RpbGUsIDAsIDAsICZ3aWR0aCwgJmhl
aWdodCk7Ci0gICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9yZWNhbGNfcmVuZGVyZXJz
KHByaXYsIHdpZHRoLCBoZWlnaHQsIHR3LCB0aCk7CisgICAgICAgIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9yZWNhbGNfcmVuZGVyZXJzKHByaXYsIHdpZHRoLCBoZWlnaHQsIHRpbGVXaWR0aCwg
dGlsZUhlaWdodCk7CiAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9maWxsX3JlbmRl
cmVycyhwcml2KTsKICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3VwZGF0ZXNfcHJv
Y2Vzcyhwcml2KTsKICAgICB9CiAKLSAgICBFdmFzX0Nvb3JkIGJhc2Vfb3ggPSBieCArIHByaXYt
PnZpZXcueDsKLSAgICBFdmFzX0Nvb3JkIG95ID0gYnkgKyBwcml2LT52aWV3Lnk7CisgICAgRXZh
c19Db29yZCBiYXNlVGlsZVBvc2l0aW9uWCA9IGJhc2VYICsgcHJpdi0+dmlldy54OworICAgIEV2
YXNfQ29vcmQgdGlsZVBvc2l0aW9uWSA9IGJhc2VZICsgcHJpdi0+dmlldy55OwogCi0gICAgZXZh
c19vYmplY3RfbW92ZShwcml2LT5jb250ZW50c19jbGlwcGVyLAotICAgICAgICAgICAgICAgICAg
ICAgbmV3X3ggKyBwcml2LT52aWV3LngsCi0gICAgICAgICAgICAgICAgICAgICBuZXdfeSArIHBy
aXYtPnZpZXcueSk7CisgICAgZXZhc19vYmplY3RfbW92ZShwcml2LT5jb250ZW50c0NsaXBwZXIs
CisgICAgICAgICAgICAgICAgICAgICBuZXdYICsgcHJpdi0+dmlldy54LAorICAgICAgICAgICAg
ICAgICAgICAgbmV3WSArIHByaXYtPnZpZXcueSk7CiAKLSAgICBpdHIgPSBwcml2LT52aWV3Lml0
ZW1zOwotICAgIGl0cl9lbmQgPSBpdHIgKyBwcml2LT52aWV3LnJvd3M7CisgICAgaXRlcmF0b3Ig
PSBwcml2LT52aWV3Lml0ZW1zOworICAgIGl0ZXJhdG9yRW5kID0gaXRlcmF0b3IgKyBwcml2LT52
aWV3LnJvd3M7CiAKLSAgICBmb3IgKDsgaXRyIDwgaXRyX2VuZDsgaXRyKyspIHsKLSAgICAgICAg
RXZhc19Db29yZCBveCA9IGJhc2Vfb3g7Ci0gICAgICAgIEVpbmFfSW5saXN0KiBsc3QgPSAqaXRy
OworICAgIGZvciAoOyBpdGVyYXRvciA8IGl0ZXJhdG9yRW5kOyBpdGVyYXRvcisrKSB7CisgICAg
ICAgIEV2YXNfQ29vcmQgdGlsZVBvc2l0aW9uWCA9IGJhc2VUaWxlUG9zaXRpb25YOworICAgICAg
ICBFaW5hX0lubGlzdCogbGlzdCA9ICppdGVyYXRvcjsKIAotICAgICAgICBFSU5BX0lOTElTVF9G
T1JFQUNIKGxzdCwgaXQpIHsKLSAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9p
dGVtX21vdmUoaXQsIG94LCBveSk7Ci0gICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfaXRlbV9yZXNpemUoaXQsIHR3LCB0aCk7Ci0gICAgICAgICAgICBveCArPSB0dzsKKyAgICAg
ICAgRUlOQV9JTkxJU1RfRk9SRUFDSChsaXN0LCBpdGVtKSB7CisgICAgICAgICAgICBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9tb3ZlKGl0ZW0sIHRpbGVQb3NpdGlvblgsIHRpbGVQb3Np
dGlvblkpOworICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcmVzaXpl
KGl0ZW0sIHRpbGVXaWR0aCwgdGlsZUhlaWdodCk7CisgICAgICAgICAgICB0aWxlUG9zaXRpb25Y
ICs9IHRpbGVXaWR0aDsKICAgICAgICAgfQotICAgICAgICBveSArPSB0aDsKKyAgICAgICAgdGls
ZVBvc2l0aW9uWSArPSB0aWxlSGVpZ2h0OwogICAgIH0KIAogICAgIHJldHVybiBFSU5BX1RSVUU7
CkBAIC0xNjQ0LDgxICsxNjQ0LDgxIEBAIEVpbmFfQm9vbCBld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV96b29tX3dlYWtfc2V0KEV2YXNfT2JqZWN0KiBld2tUaWxlLCBmbG9hdCB6b29tCiB2b2lkIGV3
a190aWxlZF9iYWNraW5nX3N0b3JlX2ZpeF9vZmZzZXRzKEV2YXNfT2JqZWN0KiBld2tUaWxlLCBF
dmFzX0Nvb3JkIHdpZHRoLCBFdmFzX0Nvb3JkIGhlaWdodCkKIHsKICAgICBQUklWX0RBVEFfR0VU
X09SX1JFVFVSTihld2tUaWxlLCBwcml2KTsKLSAgICBFaW5hX0lubGlzdCoqIGl0ciwgKippdHJf
ZW5kOwotICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0qIGl0OwotICAgIEV2YXNfQ29v
cmQgbmV3X3ggPSBwcml2LT52aWV3Lm9mZnNldC5jdXIueDsKLSAgICBFdmFzX0Nvb3JkIG5ld195
ID0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLnk7Ci0gICAgRXZhc19Db29yZCBieCA9IHByaXYtPnZp
ZXcub2Zmc2V0LmJhc2UueDsKLSAgICBFdmFzX0Nvb3JkIGJ5ID0gcHJpdi0+dmlldy5vZmZzZXQu
YmFzZS55OwotICAgIEV2YXNfQ29vcmQgdHcgPSBwcml2LT52aWV3LnRpbGUud2lkdGg7Ci0gICAg
RXZhc19Db29yZCB0aCA9IHByaXYtPnZpZXcudGlsZS5oZWlnaHQ7Ci0KLSAgICBpZiAoLW5ld194
ID4gd2lkdGgpIHsKLSAgICAgICAgbmV3X3ggPSAtd2lkdGg7Ci0gICAgICAgIGJ4ID0gbmV3X3gg
JSB0dzsKLSAgICAgICAgcHJpdi0+bW9kZWwuYmFzZS5jb2wgPSAtbmV3X3ggLyB0dzsKKyAgICBF
aW5hX0lubGlzdCoqIGl0ZXJhdG9yLCAqKml0ZXJhdG9yRW5kOworICAgIEV3a19UaWxlZF9CYWNr
aW5nX1N0b3JlX0l0ZW0qIGl0ZW07CisgICAgRXZhc19Db29yZCBuZXdYID0gcHJpdi0+dmlldy5v
ZmZzZXQuY3VyLng7CisgICAgRXZhc19Db29yZCBuZXdZID0gcHJpdi0+dmlldy5vZmZzZXQuY3Vy
Lnk7CisgICAgRXZhc19Db29yZCBiYXNlWCA9IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueDsKKyAg
ICBFdmFzX0Nvb3JkIGJhc2VZID0gcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55OworICAgIEV2YXNf
Q29vcmQgdGlsZVdpZHRoID0gcHJpdi0+dmlldy50aWxlLndpZHRoOworICAgIEV2YXNfQ29vcmQg
dGlsZUhlaWdodCA9IHByaXYtPnZpZXcudGlsZS5oZWlnaHQ7CisKKyAgICBpZiAoLW5ld1ggPiB3
aWR0aCkgeworICAgICAgICBuZXdYID0gLXdpZHRoOworICAgICAgICBiYXNlWCA9IG5ld1ggJSB0
aWxlV2lkdGg7CisgICAgICAgIHByaXYtPm1vZGVsLmJhc2UuY29sdW1uID0gLW5ld1ggLyB0aWxl
V2lkdGg7CiAgICAgfQogCi0gICAgaWYgKC1uZXdfeSA+IGhlaWdodCkgewotICAgICAgICBuZXdf
eSA9IC1oZWlnaHQ7Ci0gICAgICAgIGJ5ID0gbmV3X3kgJSB0aDsKLSAgICAgICAgcHJpdi0+bW9k
ZWwuYmFzZS5yb3cgPSAtbmV3X3kgLyB0aDsKKyAgICBpZiAoLW5ld1kgPiBoZWlnaHQpIHsKKyAg
ICAgICAgbmV3WSA9IC1oZWlnaHQ7CisgICAgICAgIGJhc2VZID0gbmV3WSAlIHRpbGVIZWlnaHQ7
CisgICAgICAgIHByaXYtPm1vZGVsLmJhc2Uucm93ID0gLW5ld1kgLyB0aWxlSGVpZ2h0OwogICAg
IH0KIAotICAgIGlmIChieCA+PSAwIHx8IGJ4IDw9IC0yICogcHJpdi0+dmlldy50aWxlLndpZHRo
KSB7Ci0gICAgICAgIGJ4ID0gbmV3X3ggJSB0dzsKLSAgICAgICAgcHJpdi0+bW9kZWwuYmFzZS5j
b2wgPSAtbmV3X3ggLyB0dzsKKyAgICBpZiAoYmFzZVggPj0gMCB8fCBiYXNlWCA8PSAtMiAqIHBy
aXYtPnZpZXcudGlsZS53aWR0aCkgeworICAgICAgICBiYXNlWCA9IG5ld1ggJSB0aWxlV2lkdGg7
CisgICAgICAgIHByaXYtPm1vZGVsLmJhc2UuY29sdW1uID0gLW5ld1ggLyB0aWxlV2lkdGg7CiAg
ICAgfQogCi0gICAgaWYgKGJ5ID49IDAgfHwgYnkgPD0gLTIgKiBwcml2LT52aWV3LnRpbGUuaGVp
Z2h0KSB7Ci0gICAgICAgIGJ5ID0gbmV3X3kgJSB0aDsKLSAgICAgICAgcHJpdi0+bW9kZWwuYmFz
ZS5yb3cgPSAtbmV3X3kgLyB0aDsKKyAgICBpZiAoYmFzZVkgPj0gMCB8fCBiYXNlWSA8PSAtMiAq
IHByaXYtPnZpZXcudGlsZS5oZWlnaHQpIHsKKyAgICAgICAgYmFzZVkgPSBuZXdZICUgdGlsZUhl
aWdodDsKKyAgICAgICAgcHJpdi0+bW9kZWwuYmFzZS5yb3cgPSAtbmV3WSAvIHRpbGVIZWlnaHQ7
CiAgICAgfQogCi0gICAgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggPSBuZXdfeDsKLSAgICBwcml2
LT52aWV3Lm9mZnNldC5jdXIueSA9IG5ld195OwotICAgIHByaXYtPnZpZXcub2Zmc2V0Lm9sZC54
ID0gbmV3X3g7Ci0gICAgcHJpdi0+dmlldy5vZmZzZXQub2xkLnkgPSBuZXdfeTsKLSAgICBwcml2
LT52aWV3Lm9mZnNldC5iYXNlLnggPSBieDsKLSAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkg
PSBieTsKLSAgICBldmFzX29iamVjdF9tb3ZlKHByaXYtPmNvbnRlbnRzX2NsaXBwZXIsCi0gICAg
ICAgICAgICAgICAgICAgICBuZXdfeCArIHByaXYtPnZpZXcueCwKLSAgICAgICAgICAgICAgICAg
ICAgIG5ld195ICsgcHJpdi0+dmlldy55KTsKLQotICAgIEV2YXNfQ29vcmQgb3kgPSBwcml2LT52
aWV3Lm9mZnNldC5iYXNlLnkgKyBwcml2LT52aWV3Lnk7Ci0gICAgRXZhc19Db29yZCBiYXNlX294
ID0gcHJpdi0+dmlldy54ICsgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54OwotCi0gICAgaXRyID0g
cHJpdi0+dmlldy5pdGVtczsKLSAgICBpdHJfZW5kID0gaXRyICsgcHJpdi0+dmlldy5yb3dzOwot
Ci0gICAgZm9yICg7IGl0ciA8IGl0cl9lbmQ7IGl0cisrKSB7Ci0gICAgICAgIEV2YXNfQ29vcmQg
b3ggPSBiYXNlX294OwotICAgICAgICBFaW5hX0lubGlzdCogbHN0ID0gKml0cjsKLQotICAgICAg
ICBFSU5BX0lOTElTVF9GT1JFQUNIKGxzdCwgaXQpIHsKLSAgICAgICAgICAgIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV9pdGVtX21vdmUoaXQsIG94LCBveSk7Ci0gICAgICAgICAgICBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9yZXNpemUoaXQsIHR3LCB0aCk7Ci0gICAgICAgICAgICBv
eCArPSB0dzsKKyAgICBwcml2LT52aWV3Lm9mZnNldC5jdXIueCA9IG5ld1g7CisgICAgcHJpdi0+
dmlldy5vZmZzZXQuY3VyLnkgPSBuZXdZOworICAgIHByaXYtPnZpZXcub2Zmc2V0Lm9sZC54ID0g
bmV3WDsKKyAgICBwcml2LT52aWV3Lm9mZnNldC5vbGQueSA9IG5ld1k7CisgICAgcHJpdi0+dmll
dy5vZmZzZXQuYmFzZS54ID0gYmFzZVg7CisgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ID0g
YmFzZVk7CisgICAgZXZhc19vYmplY3RfbW92ZShwcml2LT5jb250ZW50c0NsaXBwZXIsCisgICAg
ICAgICAgICAgICAgICAgICBuZXdYICsgcHJpdi0+dmlldy54LAorICAgICAgICAgICAgICAgICAg
ICAgbmV3WSArIHByaXYtPnZpZXcueSk7CisKKyAgICBFdmFzX0Nvb3JkIHRpbGVQb3NpdGlvblkg
PSBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgKyBwcml2LT52aWV3Lnk7CisgICAgRXZhc19Db29y
ZCBiYXNlVGlsZVBvc2l0aW9uWCA9IHByaXYtPnZpZXcueCArIHByaXYtPnZpZXcub2Zmc2V0LmJh
c2UueDsKKworICAgIGl0ZXJhdG9yID0gcHJpdi0+dmlldy5pdGVtczsKKyAgICBpdGVyYXRvckVu
ZCA9IGl0ZXJhdG9yICsgcHJpdi0+dmlldy5yb3dzOworCisgICAgZm9yICg7IGl0ZXJhdG9yIDwg
aXRlcmF0b3JFbmQ7IGl0ZXJhdG9yKyspIHsKKyAgICAgICAgRXZhc19Db29yZCB0aWxlUG9zaXRp
b25YID0gYmFzZVRpbGVQb3NpdGlvblg7CisgICAgICAgIEVpbmFfSW5saXN0KiBsc3QgPSAqaXRl
cmF0b3I7CisKKyAgICAgICAgRUlOQV9JTkxJU1RfRk9SRUFDSChsc3QsIGl0ZW0pIHsKKyAgICAg
ICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX21vdmUoaXRlbSwgdGlsZVBvc2l0
aW9uWCwgdGlsZVBvc2l0aW9uWSk7CisgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfaXRlbV9yZXNpemUoaXRlbSwgdGlsZVdpZHRoLCB0aWxlSGVpZ2h0KTsKKyAgICAgICAgICAg
IHRpbGVQb3NpdGlvblggKz0gdGlsZVdpZHRoOwogICAgICAgICB9Ci0gICAgICAgIG95ICs9IHRo
OworICAgICAgICB0aWxlUG9zaXRpb25ZICs9IHRpbGVIZWlnaHQ7CiAgICAgfQogfQogCiB2b2lk
IGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3pvb21fd2Vha19zbW9vdGhfc2NhbGVfc2V0KEV2YXNf
T2JqZWN0KiBld2tUaWxlLCBFaW5hX0Jvb2wgc21vb3RoU2NhbGUpCiB7CiAgICAgUFJJVl9EQVRB
X0dFVF9PUl9SRVRVUk4oZXdrVGlsZSwgcHJpdik7Ci0gICAgRWluYV9Jbmxpc3QqKiBpdHIsICoq
aXRyX2VuZDsKKyAgICBFaW5hX0lubGlzdCoqIGl0ZXJhdG9yLCAqKml0ZXJhdG9yRW5kOwogCi0g
ICAgaXRyID0gcHJpdi0+dmlldy5pdGVtczsKLSAgICBpdHJfZW5kID0gaXRyICsgcHJpdi0+dmll
dy5yb3dzOwotICAgIHByaXYtPnZpZXcudGlsZS56b29tX3dlYWtfc21vb3RoX3NjYWxlID0gc21v
b3RoU2NhbGU7CisgICAgaXRlcmF0b3IgPSBwcml2LT52aWV3Lml0ZW1zOworICAgIGl0ZXJhdG9y
RW5kID0gaXRlcmF0b3IgKyBwcml2LT52aWV3LnJvd3M7CisgICAgcHJpdi0+dmlldy50aWxlLnpv
b21XZWFrU21vb3RoU2NhbGUgPSBzbW9vdGhTY2FsZTsKIAotICAgIGZvciAoOyBpdHI8IGl0cl9l
bmQ7IGl0cisrKSB7Ci0gICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0qIGl0Owot
ICAgICAgICBFSU5BX0lOTElTVF9GT1JFQUNIKCppdHIsIGl0KQotICAgICAgICAgICAgaWYgKGl0
LT50aWxlKQorICAgIGZvciAoOyBpdGVyYXRvcjwgaXRlcmF0b3JFbmQ7IGl0ZXJhdG9yKyspIHsK
KyAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSogaXRlbTsKKyAgICAgICAgRUlO
QV9JTkxJU1RfRk9SRUFDSCgqaXRlcmF0b3IsIGl0ZW0pCisgICAgICAgICAgICBpZiAoaXRlbS0+
dGlsZSkKICAgICAgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9zbW9v
dGhfc2NhbGVfc2V0Ci0gICAgICAgICAgICAgICAgICAgIChpdCwgc21vb3RoU2NhbGUpOworICAg
ICAgICAgICAgICAgICAgICAoaXRlbSwgc21vb3RoU2NhbGUpOwogICAgIH0KIH0KIApAQCAtMTcz
NiwxNSArMTczNiwxNSBAQCBFaW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRl
KEV2YXNfT2JqZWN0KiBld2tUaWxlLCBjb25zdCBFaW5hX1JlY3Rhbgogdm9pZCBld2tfdGlsZWRf
YmFja2luZ19zdG9yZV91cGRhdGVzX3Byb2Nlc3NfcHJlX3NldChFdmFzX09iamVjdCogZXdrVGls
ZSwgdm9pZCogKCpjYWxsYmFjaykodm9pZCogZGF0YSwgRXZhc19PYmplY3QgKmV3a1RpbGUpLCBj
b25zdCB2b2lkKiBkYXRhKQogewogICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKGV3a1RpbGUs
IHByaXYpOwotICAgIHByaXYtPnByb2Nlc3MucHJlX2NiID0gY2FsbGJhY2s7Ci0gICAgcHJpdi0+
cHJvY2Vzcy5wcmVfZGF0YSA9ICh2b2lkKilkYXRhOworICAgIHByaXYtPnByb2Nlc3MucHJlQ2Fs
bGJhY2sgPSBjYWxsYmFjazsKKyAgICBwcml2LT5wcm9jZXNzLnByZURhdGEgPSAodm9pZCopZGF0
YTsKIH0KIAotdm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV91cGRhdGVzX3Byb2Nlc3NfcG9z
dF9zZXQoRXZhc19PYmplY3QqIGV3a1RpbGUsIHZvaWQqICgqY2FsbGJhY2spKHZvaWQqIGRhdGEs
IHZvaWQqIHByZV9kYXRhLCBFdmFzX09iamVjdCAqZXdrVGlsZSksIGNvbnN0IHZvaWQqIGRhdGEp
Cit2b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3VwZGF0ZXNfcHJvY2Vzc19wb3N0X3NldChF
dmFzX09iamVjdCogZXdrVGlsZSwgdm9pZCogKCpjYWxsYmFjaykodm9pZCogZGF0YSwgdm9pZCog
cHJlRGF0YSwgRXZhc19PYmplY3QgKmV3a1RpbGUpLCBjb25zdCB2b2lkKiBkYXRhKQogewogICAg
IFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKGV3a1RpbGUsIHByaXYpOwotICAgIHByaXYtPnByb2Nl
c3MucG9zdF9jYiA9IGNhbGxiYWNrOwotICAgIHByaXYtPnByb2Nlc3MucG9zdF9kYXRhID0gKHZv
aWQqKWRhdGE7CisgICAgcHJpdi0+cHJvY2Vzcy5wb3N0Q2FsbGJhY2sgPSBjYWxsYmFjazsKKyAg
ICBwcml2LT5wcm9jZXNzLnBvc3REYXRhID0gKHZvaWQqKWRhdGE7CiB9CiAKIHZvaWQgZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRlc19wcm9jZXNzKEV2YXNfT2JqZWN0KiBld2tUaWxlKQpA
QCAtMTc4Niw3ICsxNzg2LDcgQEAgdm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9kaXNhYmxl
ZF91cGRhdGVfc2V0KEV2YXNfT2JqZWN0KiBld2tUaWxlLCBFaW5hX0Jvb2wKIHZvaWQgZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfZmx1c2goRXZhc19PYmplY3QqIGV3a1RpbGUpCiB7CiAgICAgUFJJ
Vl9EQVRBX0dFVF9PUl9SRVRVUk4oZXdrVGlsZSwgcHJpdik7Ci0gICAgRXdrX1RpbGVfVW51c2Vk
X0NhY2hlKiB0dWMgPSAwOworICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSogdGlsZVVudXNlZENh
Y2hlID0gMDsKIAogICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1ci54ID0gMDsKICAgICBwcml2LT52
aWV3Lm9mZnNldC5jdXIueSA9IDA7CkBAIC0xNzk0LDExICsxNzk0LDExIEBAIHZvaWQgZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfZmx1c2goRXZhc19PYmplY3QqIGV3a1RpbGUpCiAgICAgcHJpdi0+
dmlldy5vZmZzZXQub2xkLnkgPSAwOwogICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCA9IDA7
CiAgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ID0gMDsKLSAgICBwcml2LT5tb2RlbC5iYXNl
LmNvbCA9IDA7CisgICAgcHJpdi0+bW9kZWwuYmFzZS5jb2x1bW4gPSAwOwogICAgIHByaXYtPm1v
ZGVsLmJhc2Uucm93ID0gMDsKLSAgICBwcml2LT5tb2RlbC5jdXIuY29scyA9IDE7Ci0gICAgcHJp
di0+bW9kZWwuY3VyLnJvd3MgPSAxOwotICAgIHByaXYtPm1vZGVsLm9sZC5jb2xzID0gMDsKKyAg
ICBwcml2LT5tb2RlbC5jdXJyZW50LmNvbHVtbnMgPSAxOworICAgIHByaXYtPm1vZGVsLmN1cnJl
bnQucm93cyA9IDE7CisgICAgcHJpdi0+bW9kZWwub2xkLmNvbHVtbnMgPSAwOwogICAgIHByaXYt
Pm1vZGVsLm9sZC5yb3dzID0gMDsKICAgICBwcml2LT5jaGFuZ2VkLnNpemUgPSBFSU5BX1RSVUU7
CiAKQEAgLTE4MDksOCArMTgwOSw4IEBAIHZvaWQgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZmx1
c2goRXZhc19PYmplY3QqIGV3a1RpbGUpCiAKICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
cHJlX3JlbmRlcl9yZXF1ZXN0X2ZsdXNoKHByaXYpOwogICAgIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV90aWxlX2Rpc3NvY2lhdGVfYWxsKHByaXYpOwotICAgIHR1YyA9IGV3a190aWxlX21hdHJp
eF91bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7Ci0gICAgZXdrX3RpbGVfdW51
c2VkX2NhY2hlX2NsZWFyKHR1Yyk7CisgICAgdGlsZVVudXNlZENhY2hlID0gZXdrX3RpbGVfbWF0
cml4X3VudXNlZF9jYWNoZV9nZXQocHJpdi0+bW9kZWwubWF0cml4KTsKKyAgICBld2tfdGlsZV91
bnVzZWRfY2FjaGVfY2xlYXIodGlsZVVudXNlZENhY2hlKTsKIAogI2lmZGVmIERFQlVHX01FTV9M
RUFLUwogICAgIHByaW50ZigiXG5GTFVTSEVEIEJBQ0tJTkcgU1RPUkUsIFNUQVRVUyBBRlRFUiBS
RUNSRUFUSU5HIFRJTEUgTUFUUklYOlxuIik7CkBAIC0xODIzLDE2ICsxODIzLDE2IEBAIEVpbmFf
Qm9vbCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlZ2lvbihFdmFzX09iamVj
dCogZXdrVGlsZSwgRXZhc19DCiAgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4oZXdrVGlsZSwg
cHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgRWluYV9UaWxlX0dyaWRfU2xpY2VyIHNsaWNlcjsKICAg
ICBjb25zdCBFaW5hX1RpbGVfR3JpZF9JbmZvKiBpbmZvOwotICAgIEV2YXNfQ29vcmQgdHcsIHRo
OwotICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSogdHVjOworICAgIEV2YXNfQ29vcmQgdGlsZVdp
ZHRoLCB0aWxlSGVpZ2h0OworICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSogdGlsZVVudXNlZENh
Y2hlOwogCi0gICAgdHcgPSBwcml2LT52aWV3LnRpbGUud2lkdGg7Ci0gICAgdGggPSBwcml2LT52
aWV3LnRpbGUuaGVpZ2h0OworICAgIHRpbGVXaWR0aCA9IHByaXYtPnZpZXcudGlsZS53aWR0aDsK
KyAgICB0aWxlSGVpZ2h0ID0gcHJpdi0+dmlldy50aWxlLmhlaWdodDsKICAgICB6b29tID0gUk9V
TkRFRF9aT09NKHByaXYtPnZpZXcudGlsZS53aWR0aCwgem9vbSk7CiAKLSAgICBpZiAoIWVpbmFf
dGlsZV9ncmlkX3NsaWNlcl9zZXR1cCgmc2xpY2VyLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCB0dywg
dGgpKSB7CisgICAgaWYgKCFlaW5hX3RpbGVfZ3JpZF9zbGljZXJfc2V0dXAoJnNsaWNlciwgeCwg
eSwgd2lkdGgsIGhlaWdodCwgdGlsZVdpZHRoLCB0aWxlSGVpZ2h0KSkgewogICAgICAgICBFUlIo
ImNvdWxkIG5vdCBzZXR1cCBncmlkIHNsaWNlciBmb3IgJWQsJWQrJWR4JWQgdGlsZT0lZHglZCIs
Ci0gICAgICAgICAgICB4LCB5LCB3aWR0aCwgaGVpZ2h0LCB0dywgdGgpOworICAgICAgICAgICAg
eCwgeSwgd2lkdGgsIGhlaWdodCwgdGlsZVdpZHRoLCB0aWxlSGVpZ2h0KTsKICAgICAgICAgcmV0
dXJuIEVJTkFfRkFMU0U7CiAgICAgfQogCkBAIC0xODQ1LDQ1ICsxODQ1LDQ1IEBAIEVpbmFfQm9v
bCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlZ2lvbihFdmFzX09iamVjdCog
ZXdrVGlsZSwgRXZhc19DCiAKICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9wcm9j
ZXNzX2lkbGVyX3N0YXJ0KHByaXYpOwogCi0gICAgdHVjID0gZXdrX3RpbGVfbWF0cml4X3VudXNl
ZF9jYWNoZV9nZXQocHJpdi0+bW9kZWwubWF0cml4KTsKLSAgICBld2tfdGlsZV91bnVzZWRfY2Fj
aGVfbG9ja19hcmVhKHR1YywgeCwgeSwgd2lkdGgsIGhlaWdodCwgem9vbSk7CisgICAgdGlsZVVu
dXNlZENhY2hlID0gZXdrX3RpbGVfbWF0cml4X3VudXNlZF9jYWNoZV9nZXQocHJpdi0+bW9kZWwu
bWF0cml4KTsKKyAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfbG9ja19hcmVhKHRpbGVVbnVzZWRD
YWNoZSwgeCwgeSwgd2lkdGgsIGhlaWdodCwgem9vbSk7CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsK
IH0KIAogRWluYV9Cb29sIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVsYXRp
dmVfcmFkaXVzKEV2YXNfT2JqZWN0KiBld2tUaWxlLCB1bnNpZ25lZCBpbnQgbiwgZmxvYXQgem9v
bSkKIHsKICAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihld2tUaWxlLCBwcml2LCBFSU5BX0ZB
TFNFKTsKLSAgICB1bnNpZ25lZCBsb25nIHN0YXJ0X3JvdywgZW5kX3Jvdywgc3RhcnRfY29sLCBl
bmRfY29sLCBpLCBqLCB3aWR0aCwgaGVpZ2h0OwotICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSog
dHVjOworICAgIHVuc2lnbmVkIGxvbmcgc3RhcnRSb3csIGVuZFJvdywgc3RhcnRDb2wsIGVuZENv
bCwgaSwgaiwgd2lkdGgsIGhlaWdodDsKKyAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHRpbGVV
bnVzZWRDYWNoZTsKIAogICAgIElORigicHJpdi0+bW9kZWwuYmFzZS5yb3cgPSVsZCwgbj0ldSBw
cml2LT52aWV3LnJvd3M9JWx1IiwKICAgICAgICAgcHJpdi0+bW9kZWwuYmFzZS5yb3csIG4sIHBy
aXYtPnZpZXcucm93cyk7Ci0gICAgc3RhcnRfcm93ID0gKGxvbmcpcHJpdi0+bW9kZWwuYmFzZS5y
b3cgLSBuOwotICAgIHN0YXJ0X2NvbCA9IChsb25nKXByaXYtPm1vZGVsLmJhc2UuY29sIC0gbjsK
LSAgICBlbmRfcm93ID0gc3RkOjptaW4ocHJpdi0+bW9kZWwuY3VyLnJvd3MgLSAxLAorICAgIHN0
YXJ0Um93ID0gKGxvbmcpcHJpdi0+bW9kZWwuYmFzZS5yb3cgLSBuOworICAgIHN0YXJ0Q29sID0g
KGxvbmcpcHJpdi0+bW9kZWwuYmFzZS5jb2x1bW4gLSBuOworICAgIGVuZFJvdyA9IHN0ZDo6bWlu
KHByaXYtPm1vZGVsLmN1cnJlbnQucm93cyAtIDEsCiAgICAgICAgICAgICAgICAgICAgICAgIHBy
aXYtPm1vZGVsLmJhc2Uucm93ICsgcHJpdi0+dmlldy5yb3dzICsgbiAtIDEpOwotICAgIGVuZF9j
b2wgPSBzdGQ6Om1pbihwcml2LT5tb2RlbC5jdXIuY29scyAtIDEsCi0gICAgICAgICAgICAgICAg
ICAgICAgIHByaXYtPm1vZGVsLmJhc2UuY29sICsgcHJpdi0+dmlldy5jb2xzICsgbiAtIDEpOwor
ICAgIGVuZENvbCA9IHN0ZDo6bWluKHByaXYtPm1vZGVsLmN1cnJlbnQuY29sdW1ucyAtIDEsCisg
ICAgICAgICAgICAgICAgICAgICAgIHByaXYtPm1vZGVsLmJhc2UuY29sdW1uICsgcHJpdi0+dmll
dy5jb2xzICsgbiAtIDEpOwogCi0gICAgSU5GKCJzdGFydF9yb3c9JWx1LCBlbmRfcm93PSVsdSwg
c3RhcnRfY29sPSVsdSwgZW5kX2NvbD0lbHUiLAotICAgICAgICBzdGFydF9yb3csIGVuZF9yb3cs
IHN0YXJ0X2NvbCwgZW5kX2NvbCk7CisgICAgSU5GKCJzdGFydFJvdz0lbHUsIGVuZFJvdz0lbHUs
IHN0YXJ0Q29sPSVsdSwgZW5kQ29sPSVsdSIsCisgICAgICAgIHN0YXJ0Um93LCBlbmRSb3csIHN0
YXJ0Q29sLCBlbmRDb2wpOwogCiAgICAgem9vbSA9IFJPVU5ERURfWk9PTShwcml2LT52aWV3LnRp
bGUud2lkdGgsIHpvb20pOwogCi0gICAgZm9yIChpID0gc3RhcnRfcm93OyBpIDw9IGVuZF9yb3c7
IGkrKykKLSAgICAgICAgZm9yIChqID0gc3RhcnRfY29sOyBqIDw9IGVuZF9jb2w7IGorKykKKyAg
ICBmb3IgKGkgPSBzdGFydFJvdzsgaSA8PSBlbmRSb3c7IGkrKykKKyAgICAgICAgZm9yIChqID0g
c3RhcnRDb2w7IGogPD0gZW5kQ29sOyBqKyspCiAgICAgICAgICAgICBpZiAoIV9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfYWRkKHByaXYsIGosIGksIHpvb20sIFBS
RV9SRU5ERVJfUFJJT1JJVFlfTE9XKSkKICAgICAgICAgICAgICAgICBnb3RvIHN0YXJ0X3Byb2Nl
c3Npbmc7CiAKIHN0YXJ0X3Byb2Nlc3Npbmc6CiAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X2l0ZW1fcHJvY2Vzc19pZGxlcl9zdGFydChwcml2KTsKIAotICAgIHR1YyA9IGV3a190aWxlX21h
dHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7Ci0gICAgaGVpZ2h0ID0g
KGVuZF9yb3cgLSBzdGFydF9yb3cgKyAxKSAqIFRJTEVfU0laRV9BVF9aT09NKHByaXYtPnZpZXcu
dGlsZS5oZWlnaHQsIHpvb20pOwotICAgIHdpZHRoID0gKGVuZF9jb2wgLSBzdGFydF9jb2wgKyAx
KSAqIFRJTEVfU0laRV9BVF9aT09NKHByaXYtPnZpZXcudGlsZS53aWR0aCwgem9vbSk7Ci0gICAg
ZXdrX3RpbGVfdW51c2VkX2NhY2hlX2xvY2tfYXJlYSh0dWMsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdGFydF9jb2wgKiBUSUxFX1NJWkVfQVRfWk9PTShwcml2LT52aWV3
LnRpbGUud2lkdGgsIHpvb20pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RhcnRfcm93ICogVElMRV9TSVpFX0FUX1pPT00ocHJpdi0+dmlldy50aWxlLmhlaWdodCwgem9v
bSksIHdpZHRoLCBoZWlnaHQsIHpvb20pOworICAgIHRpbGVVbnVzZWRDYWNoZSA9IGV3a190aWxl
X21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7CisgICAgaGVpZ2h0
ID0gKGVuZFJvdyAtIHN0YXJ0Um93ICsgMSkgKiBUSUxFX1NJWkVfQVRfWk9PTShwcml2LT52aWV3
LnRpbGUuaGVpZ2h0LCB6b29tKTsKKyAgICB3aWR0aCA9IChlbmRDb2wgLSBzdGFydENvbCArIDEp
ICogVElMRV9TSVpFX0FUX1pPT00ocHJpdi0+dmlldy50aWxlLndpZHRoLCB6b29tKTsKKyAgICBl
d2tfdGlsZV91bnVzZWRfY2FjaGVfbG9ja19hcmVhKHRpbGVVbnVzZWRDYWNoZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0Q29sICogVElMRV9TSVpFX0FUX1pPT00o
cHJpdi0+dmlldy50aWxlLndpZHRoLCB6b29tKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0YXJ0Um93ICogVElMRV9TSVpFX0FUX1pPT00ocHJpdi0+dmlldy50aWxlLmhl
aWdodCwgem9vbSksIHdpZHRoLCBoZWlnaHQsIHpvb20pOwogCiAgICAgcmV0dXJuIEVJTkFfVFJV
RTsKIH0KQEAgLTE4OTEsMTIgKzE4OTEsMTIgQEAgc3RhcnRfcHJvY2Vzc2luZzoKIHZvaWQgZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9jYW5jZWwoRXZhc19PYmplY3QqIGV3a1Rp
bGUpCiB7CiAgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4oZXdrVGlsZSwgcHJpdik7Ci0gICAg
RXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0dWM7CisgICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0
aWxlVW51c2VkQ2FjaGU7CiAKICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRl
cl9yZXF1ZXN0X2NsZWFyKHByaXYpOwogCi0gICAgdHVjID0gZXdrX3RpbGVfbWF0cml4X3VudXNl
ZF9jYWNoZV9nZXQocHJpdi0+bW9kZWwubWF0cml4KTsKLSAgICBld2tfdGlsZV91bnVzZWRfY2Fj
aGVfdW5sb2NrX2FyZWEodHVjKTsKKyAgICB0aWxlVW51c2VkQ2FjaGUgPSBld2tfdGlsZV9tYXRy
aXhfdW51c2VkX2NhY2hlX2dldChwcml2LT5tb2RlbC5tYXRyaXgpOworICAgIGV3a190aWxlX3Vu
dXNlZF9jYWNoZV91bmxvY2tfYXJlYSh0aWxlVW51c2VkQ2FjaGUpOwogfQogCiBFaW5hX0Jvb2wg
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZGlzYWJsZV9yZW5kZXIoRXZhc19PYmplY3QqIGV3a1Rp
bGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX21hdHJpeC5j
cHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX21hdHJpeC5jcHAKaW5kZXggZTkx
YmQ3Nzc3N2UxMDVkMGZlMjJkY2FmOGYyZDZhYTAwMTZkMjI0ZS4uYzhjMzQ4NTMyMDZkMWRiZGVh
NjUxODg2NDgwNzRhNDRlNjk0OTMzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvZXdr
L2V3a190aWxlZF9tYXRyaXguY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGls
ZWRfbWF0cml4LmNwcApAQCAtMzMsMTAgKzMzLDEwIEBACiAKIHN0cnVjdCBfRXdrX1RpbGVfTWF0
cml4IHsKICAgICBFaW5hX01hdHJpeHNwYXJzZSogbWF0cml4OwotICAgIEV3a19UaWxlX1VudXNl
ZF9DYWNoZSogdHVjOworICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSogdGlsaWVVbnVzZWRDYWNo
ZTsKICAgICBFdmFzX0NvbG9yc3BhY2UgY3NwYWNlOwogICAgIHN0cnVjdCB7Ci0gICAgICAgIHZv
aWQgKCpjYikodm9pZCogZGF0YSwgRXdrX1RpbGUqIHRpbGUsIGNvbnN0IEVpbmFfUmVjdGFuZ2xl
KiB1cGRhdGUpOworICAgICAgICB2b2lkICgqY2FsbGJhY2spKHZvaWQqIGRhdGEsIEV3a19UaWxl
KiB0aWxlLCBjb25zdCBFaW5hX1JlY3RhbmdsZSogdXBkYXRlKTsKICAgICAgICAgdm9pZCogZGF0
YTsKICAgICB9IHJlbmRlcjsKICAgICB1bnNpZ25lZCBpbnQgZnJvemVuOwpAQCAtNjEsNDIgKzYx
LDQyIEBAIHN0YXRpYyB1aW50NjRfdCBieXRlc19sZWFrZWQgPSAwOwogLyogY2FsbGVkIHdoZW4g
bWF0cml4c3BhcnNlIGlzIHJlc2l6ZWQgb3IgZnJlZWQgKi8KIHN0YXRpYyB2b2lkIF9ld2tfdGls
ZV9tYXRyaXhfY2VsbF9mcmVlKHZvaWQqIHVzZXJEYXRhLCB2b2lkKiBjZWxsRGF0YSkKIHsKLSAg
ICBFd2tfVGlsZV9NYXRyaXgqIHRtID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGVfTWF0cml4Kj4odXNl
ckRhdGEpOworICAgIEV3a19UaWxlX01hdHJpeCogdGlsZU1hdHJpeCA9IHN0YXRpY19jYXN0PEV3
a19UaWxlX01hdHJpeCo+KHVzZXJEYXRhKTsKICAgICBFd2tfVGlsZSogdGlsZSA9IHN0YXRpY19j
YXN0PEV3a19UaWxlKj4oY2VsbERhdGEpOwogCiAgICAgaWYgKCF0aWxlKQogICAgICAgICByZXR1
cm47CiAKLSAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfZnJlZXplKHRtLT50dWMpOworICAgIGV3
a190aWxlX3VudXNlZF9jYWNoZV9mcmVlemUodGlsZU1hdHJpeC0+dGlsaWVVbnVzZWRDYWNoZSk7
CiAKICAgICBpZiAodGlsZS0+dXBkYXRlcyB8fCB0aWxlLT5zdGF0cy5mdWxsX3VwZGF0ZSkKLSAg
ICAgICAgdG0tPnVwZGF0ZXMgPSBlaW5hX2xpc3RfcmVtb3ZlKHRtLT51cGRhdGVzLCB0aWxlKTsK
KyAgICAgICAgdGlsZU1hdHJpeC0+dXBkYXRlcyA9IGVpbmFfbGlzdF9yZW1vdmUodGlsZU1hdHJp
eC0+dXBkYXRlcywgdGlsZSk7CiAKICAgICBpZiAodGlsZS0+dmlzaWJsZSkKICAgICAgICAgRVJS
KCJmcmVlaW5nIGNlbGwgdGhhdCBpcyB2aXNpYmxlLCBsZWFraW5nIHRpbGUgJXAiLCB0aWxlKTsK
ICAgICBlbHNlIHsKLSAgICAgICAgaWYgKCFld2tfdGlsZV91bnVzZWRfY2FjaGVfdGlsZV9nZXQo
dG0tPnR1YywgdGlsZSkpCi0gICAgICAgICAgICBFUlIoInRpbGUgJXAgd2FzIG5vdCBpbiBjYWNo
ZSAlcD8gbGVha2luZy4uLiIsIHRpbGUsIHRtLT50dWMpOworICAgICAgICBpZiAoIWV3a190aWxl
X3VudXNlZF9jYWNoZV90aWxlX2dldCh0aWxlTWF0cml4LT50aWxpZVVudXNlZENhY2hlLCB0aWxl
KSkKKyAgICAgICAgICAgIEVSUigidGlsZSAlcCB3YXMgbm90IGluIGNhY2hlICVwPyBsZWFraW5n
Li4uIiwgdGlsZSwgdGlsZU1hdHJpeC0+dGlsaWVVbnVzZWRDYWNoZSk7CiAgICAgICAgIGVsc2Ug
ewogICAgICAgICAgICAgREJHKCJ0aWxlIGNlbGwgZG9lcyBub3QgZXhpc3QgYW55bW9yZSwgZnJl
ZSBpdCAlcCIsIHRpbGUpOwogI2lmZGVmIERFQlVHX01FTV9MRUFLUwotICAgICAgICAgICAgdG0t
PnN0YXRzLmJ5dGVzLmZyZWVkICs9IHRpbGUtPmJ5dGVzOwotICAgICAgICAgICAgdG0tPnN0YXRz
LnRpbGVzLmZyZWVkKys7CisgICAgICAgICAgICB0aWxlTWF0cml4LT5zdGF0cy5ieXRlcy5mcmVl
ZCArPSB0aWxlLT5ieXRlczsKKyAgICAgICAgICAgIHRpbGVNYXRyaXgtPnN0YXRzLnRpbGVzLmZy
ZWVkKys7CiAjZW5kaWYKICAgICAgICAgICAgIGV3a190aWxlX2ZyZWUodGlsZSk7CiAgICAgICAg
IH0KICAgICB9CiAKLSAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfdGhhdyh0bS0+dHVjKTsKKyAg
ICBld2tfdGlsZV91bnVzZWRfY2FjaGVfdGhhdyh0aWxlTWF0cml4LT50aWxpZVVudXNlZENhY2hl
KTsKIH0KIAogLyogY2FsbGVkIHdoZW4gY2FjaGUgb2YgdW51c2VkIHRpbGUgaXMgZmx1c2hlZCAq
Lwogc3RhdGljIHZvaWQgX2V3a190aWxlX21hdHJpeF90aWxlX2ZyZWUodm9pZCogZGF0YSwgRXdr
X1RpbGUqIHRpbGUpCiB7Ci0gICAgRXdrX1RpbGVfTWF0cml4KiB0bSA9IHN0YXRpY19jYXN0PEV3
a19UaWxlX01hdHJpeCo+KGRhdGEpOworICAgIEV3a19UaWxlX01hdHJpeCogdGlsZU1hdHJpeCA9
IHN0YXRpY19jYXN0PEV3a19UaWxlX01hdHJpeCo+KGRhdGEpOwogICAgIEVpbmFfTWF0cml4c3Bh
cnNlX0NlbGwqIGNlbGw7CiAKLSAgICBpZiAoIWVpbmFfbWF0cml4c3BhcnNlX2NlbGxfaWR4X2dl
dCh0bS0+bWF0cml4LCB0aWxlLT5yb3csIHRpbGUtPmNvbCwgJmNlbGwpKSB7CisgICAgaWYgKCFl
aW5hX21hdHJpeHNwYXJzZV9jZWxsX2lkeF9nZXQodGlsZU1hdHJpeC0+bWF0cml4LCB0aWxlLT5y
b3csIHRpbGUtPmNvbCwgJmNlbGwpKSB7CiAgICAgICAgIEVSUigicmVtb3ZpbmcgdGlsZSAlcCB0
aGF0IHdhcyBub3QgaW4gdGhlIG1hdHJpeD8gTGVha2luZy4uLiIsIHRpbGUpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQpAQCAtMTA3LDcgKzEwNyw3IEBAIHN0YXRpYyB2b2lkIF9ld2tfdGlsZV9t
YXRyaXhfdGlsZV9mcmVlKHZvaWQqIGRhdGEsIEV3a19UaWxlKiB0aWxlKQogICAgIH0KIAogICAg
IGlmICh0aWxlLT51cGRhdGVzIHx8IHRpbGUtPnN0YXRzLmZ1bGxfdXBkYXRlKQotICAgICAgICB0
bS0+dXBkYXRlcyA9IGVpbmFfbGlzdF9yZW1vdmUodG0tPnVwZGF0ZXMsIHRpbGUpOworICAgICAg
ICB0aWxlTWF0cml4LT51cGRhdGVzID0gZWluYV9saXN0X3JlbW92ZSh0aWxlTWF0cml4LT51cGRh
dGVzLCB0aWxlKTsKIAogICAgIC8qIHNldCB0byBudWxsIHRvIGF2b2lkIGRvdWJsZSBmcmVlICov
CiAgICAgZWluYV9tYXRyaXhzcGFyc2VfY2VsbF9kYXRhX3JlcGxhY2UoY2VsbCwgMCwgMCk7CkBA
IC0xMjAsOCArMTIwLDggQEAgc3RhdGljIHZvaWQgX2V3a190aWxlX21hdHJpeF90aWxlX2ZyZWUo
dm9pZCogZGF0YSwgRXdrX1RpbGUqIHRpbGUpCiAgICAgfQogCiAjaWZkZWYgREVCVUdfTUVNX0xF
QUtTCi0gICAgdG0tPnN0YXRzLmJ5dGVzLmZyZWVkICs9IHRpbGUtPmJ5dGVzOwotICAgIHRtLT5z
dGF0cy50aWxlcy5mcmVlZCsrOworICAgIHRpbGVNYXRyaXgtPnN0YXRzLmJ5dGVzLmZyZWVkICs9
IHRpbGUtPmJ5dGVzOworICAgIHRpbGVNYXRyaXgtPnN0YXRzLnRpbGVzLmZyZWVkKys7CiAjZW5k
aWYKIAogICAgIGV3a190aWxlX2ZyZWUodGlsZSk7CkBAIC0xNDUsMzggKzE0NSwzOCBAQCBzdGF0
aWMgdm9pZCBfZXdrX3RpbGVfbWF0cml4X3RpbGVfZnJlZSh2b2lkKiBkYXRhLCBFd2tfVGlsZSog
dGlsZSkKICAqCiAgKiBAcmV0dXJuIG5ld2x5IGFsbG9jYXRlZCBpbnN0YW5jZSBvbiBzdWNjZXNz
LCBAYyAwIG9uIGZhaWx1cmUuCiAgKi8KLUV3a19UaWxlX01hdHJpeCogZXdrX3RpbGVfbWF0cml4
X25ldyhFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHRpbGVVbnVzZWRDYWNoZSwgdW5zaWduZWQgbG9u
ZyBjb2x1bW5zLCB1bnNpZ25lZCBsb25nIHJvd3MsIEV2YXNfQ29sb3JzcGFjZSBjb2xvclNwYWNl
LCB2b2lkICgqcmVuZGVyX2NhbGxiYWNrKSh2b2lkKiBkYXRhLCBFd2tfVGlsZSogdGlsZSwgY29u
c3QgRWluYV9SZWN0YW5nbGUqIHVwZGF0ZSksIGNvbnN0IHZvaWQqIHJlbmRlckRhdGEpCitFd2tf
VGlsZV9NYXRyaXgqIGV3a190aWxlX21hdHJpeF9uZXcoRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0
aWxlVW51c2VkQ2FjaGUsIHVuc2lnbmVkIGxvbmcgY29sdW1ucywgdW5zaWduZWQgbG9uZyByb3dz
LCBFdmFzX0NvbG9yc3BhY2UgY29sb3JTcGFjZSwgdm9pZCAoKnJlbmRlckNhbGxiYWNrKSh2b2lk
KiBkYXRhLCBFd2tfVGlsZSogdGlsZSwgY29uc3QgRWluYV9SZWN0YW5nbGUqIHVwZGF0ZSksIGNv
bnN0IHZvaWQqIHJlbmRlckRhdGEpCiB7Ci0gICAgRXdrX1RpbGVfTWF0cml4KiB0bSA9IHN0YXRp
Y19jYXN0PEV3a19UaWxlX01hdHJpeCo+KGNhbGxvYygxLCBzaXplb2YoRXdrX1RpbGVfTWF0cml4
KSkpOwotICAgIGlmICghdG0pCisgICAgRXdrX1RpbGVfTWF0cml4KiB0aWxlTWF0cml4ID0gc3Rh
dGljX2Nhc3Q8RXdrX1RpbGVfTWF0cml4Kj4oY2FsbG9jKDEsIHNpemVvZihFd2tfVGlsZV9NYXRy
aXgpKSk7CisgICAgaWYgKCF0aWxlTWF0cml4KQogICAgICAgICByZXR1cm4gMDsKIAotICAgIHRt
LT5tYXRyaXggPSBlaW5hX21hdHJpeHNwYXJzZV9uZXcocm93cywgY29sdW1ucywgX2V3a190aWxl
X21hdHJpeF9jZWxsX2ZyZWUsIHRtKTsKLSAgICBpZiAoIXRtLT5tYXRyaXgpIHsKKyAgICB0aWxl
TWF0cml4LT5tYXRyaXggPSBlaW5hX21hdHJpeHNwYXJzZV9uZXcocm93cywgY29sdW1ucywgX2V3
a190aWxlX21hdHJpeF9jZWxsX2ZyZWUsIHRpbGVNYXRyaXgpOworICAgIGlmICghdGlsZU1hdHJp
eC0+bWF0cml4KSB7CiAgICAgICAgIEVSUigiY291bGQgbm90IGNyZWF0ZSBzcGFyc2UgbWF0cml4
LiIpOwotICAgICAgICBmcmVlKHRtKTsKKyAgICAgICAgZnJlZSh0aWxlTWF0cml4KTsKICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgfQogCiAgICAgaWYgKHRpbGVVbnVzZWRDYWNoZSkKLSAgICAgICAg
dG0tPnR1YyA9IGV3a190aWxlX3VudXNlZF9jYWNoZV9yZWYodGlsZVVudXNlZENhY2hlKTsKKyAg
ICAgICAgdGlsZU1hdHJpeC0+dGlsaWVVbnVzZWRDYWNoZSA9IGV3a190aWxlX3VudXNlZF9jYWNo
ZV9yZWYodGlsZVVudXNlZENhY2hlKTsKICAgICBlbHNlIHsKLSAgICAgICAgdG0tPnR1YyA9IGV3
a190aWxlX3VudXNlZF9jYWNoZV9uZXcoNDA5NjAwMDApOwotICAgICAgICBpZiAoIXRtLT50dWMp
IHsKKyAgICAgICAgdGlsZU1hdHJpeC0+dGlsaWVVbnVzZWRDYWNoZSA9IGV3a190aWxlX3VudXNl
ZF9jYWNoZV9uZXcoNDA5NjAwMDApOworICAgICAgICBpZiAoIXRpbGVNYXRyaXgtPnRpbGllVW51
c2VkQ2FjaGUpIHsKICAgICAgICAgICAgIEVSUigibm8gY2FjaGUgb2YgdW51c2VkIHRpbGUhIik7
Ci0gICAgICAgICAgICBlaW5hX21hdHJpeHNwYXJzZV9mcmVlKHRtLT5tYXRyaXgpOwotICAgICAg
ICAgICAgZnJlZSh0bSk7CisgICAgICAgICAgICBlaW5hX21hdHJpeHNwYXJzZV9mcmVlKHRpbGVN
YXRyaXgtPm1hdHJpeCk7CisgICAgICAgICAgICBmcmVlKHRpbGVNYXRyaXgpOwogICAgICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICB0bS0+Y3NwYWNlID0gY29sb3JT
cGFjZTsKLSAgICB0bS0+cmVuZGVyLmNiID0gcmVuZGVyX2NhbGxiYWNrOwotICAgIHRtLT5yZW5k
ZXIuZGF0YSA9ICh2b2lkKilyZW5kZXJEYXRhOwotICAgIHRtLT50aWxlLndpZHRoID0gREVGQVVM
VF9USUxFX1c7Ci0gICAgdG0tPnRpbGUuaGVpZ2h0ID0gREVGQVVMVF9USUxFX0g7CisgICAgdGls
ZU1hdHJpeC0+Y3NwYWNlID0gY29sb3JTcGFjZTsKKyAgICB0aWxlTWF0cml4LT5yZW5kZXIuY2Fs
bGJhY2sgPSByZW5kZXJDYWxsYmFjazsKKyAgICB0aWxlTWF0cml4LT5yZW5kZXIuZGF0YSA9ICh2
b2lkKilyZW5kZXJEYXRhOworICAgIHRpbGVNYXRyaXgtPnRpbGUud2lkdGggPSBERUZBVUxUX1RJ
TEVfVzsKKyAgICB0aWxlTWF0cml4LT50aWxlLmhlaWdodCA9IERFRkFVTFRfVElMRV9IOwogCi0g
ICAgcmV0dXJuIHRtOworICAgIHJldHVybiB0aWxlTWF0cml4OwogfQogCiAvKioKQEAgLTE5MSwx
MiArMTkxLDEyIEBAIHZvaWQgZXdrX3RpbGVfbWF0cml4X2ZyZWUoRXdrX1RpbGVfTWF0cml4KiB0
aWxlTWF0cml4KQogI2VuZGlmCiAKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTih0aWxl
TWF0cml4KTsKLSAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfZnJlZXplKHRpbGVNYXRyaXgtPnR1
Yyk7CisgICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2ZyZWV6ZSh0aWxlTWF0cml4LT50aWxpZVVu
dXNlZENhY2hlKTsKIAogICAgIGVpbmFfbWF0cml4c3BhcnNlX2ZyZWUodGlsZU1hdHJpeC0+bWF0
cml4KTsKIAotICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV90aGF3KHRpbGVNYXRyaXgtPnR1Yyk7
Ci0gICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3VucmVmKHRpbGVNYXRyaXgtPnR1Yyk7CisgICAg
ZXdrX3RpbGVfdW51c2VkX2NhY2hlX3RoYXcodGlsZU1hdHJpeC0+dGlsaWVVbnVzZWRDYWNoZSk7
CisgICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3VucmVmKHRpbGVNYXRyaXgtPnRpbGllVW51c2Vk
Q2FjaGUpOwogCiAjaWZkZWYgREVCVUdfTUVNX0xFQUtTCiAgICAgdGlsZXMgPSB0aWxlTWF0cml4
LT5zdGF0cy50aWxlcy5hbGxvY2F0ZWQgLSB0aWxlTWF0cml4LT5zdGF0cy50aWxlcy5mcmVlZDsK
QEAgLTI0NCw3ICsyNDQsNyBAQCB2b2lkIGV3a190aWxlX21hdHJpeF9yZXNpemUoRXdrX1RpbGVf
TWF0cml4KiB0aWxlTWF0cml4LCB1bnNpZ25lZCBsb25nIGNvbHMsIHVucwogRXdrX1RpbGVfVW51
c2VkX0NhY2hlKiBld2tfdGlsZV9tYXRyaXhfdW51c2VkX2NhY2hlX2dldChjb25zdCBFd2tfVGls
ZV9NYXRyaXgqIHRpbGVNYXRyaXgpCiB7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5f
VkFMKHRpbGVNYXRyaXgsIDApOwotICAgIHJldHVybiB0aWxlTWF0cml4LT50dWM7CisgICAgcmV0
dXJuIHRpbGVNYXRyaXgtPnRpbGllVW51c2VkQ2FjaGU7CiB9CiAKIC8qKgpAQCAtMjc5LDcgKzI3
OSw3IEBAIEV3a19UaWxlKiBld2tfdGlsZV9tYXRyaXhfdGlsZV9leGFjdF9nZXQoRXdrX1RpbGVf
TWF0cml4KiB0aWxlTWF0cml4LCB1bnNpZ25lZCBsCiAKIGVuZDoKICAgICBpZiAoIXRpbGUtPnZp
c2libGUpIHsKLSAgICAgICAgaWYgKCFld2tfdGlsZV91bnVzZWRfY2FjaGVfdGlsZV9nZXQodGls
ZU1hdHJpeC0+dHVjLCB0aWxlKSkKKyAgICAgICAgaWYgKCFld2tfdGlsZV91bnVzZWRfY2FjaGVf
dGlsZV9nZXQodGlsZU1hdHJpeC0+dGlsaWVVbnVzZWRDYWNoZSwgdGlsZSkpCiAgICAgICAgICAg
ICBXUk4oIkV3a19UaWxlIHdhcyB1bnVzZWQgYnV0IG5vdCBpbiBjYWNoZT8gYnVnISIpOwogICAg
IH0KIApAQCAtMzIwLDE4ICszMjAsMTggQEAgRWluYV9Cb29sIGV3a190aWxlX21hdHJpeF90aWxl
X2V4YWN0X2V4aXN0cyhFd2tfVGlsZV9NYXRyaXgqIHRpbGVNYXRyaXgsIHVuc2lnbmUKICAqLwog
RXdrX1RpbGUqIGV3a190aWxlX21hdHJpeF90aWxlX25ldyhFd2tfVGlsZV9NYXRyaXgqIHRpbGVN
YXRyaXgsIEV2YXMqIGNhbnZhcywgdW5zaWduZWQgbG9uZyBjb2x1bW4sIHVuc2lnbmVkIGxvbmcg
cm93LCBmbG9hdCB6b29tKQogewotICAgIEV2YXNfQ29vcmQgdHcsIHRoOworICAgIEV2YXNfQ29v
cmQgdGlsZVdpZHRoLCB0aWxlSGVpZ2h0OwogICAgIEV3a19UaWxlKiB0aWxlOwogCiAgICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHRpbGVNYXRyaXgsIDApOwogICAgIEVJTkFfU0FG
RVRZX09OX0ZBTFNFX1JFVFVSTl9WQUwoem9vbSA+IDAuMCwgMCk7CiAKLSAgICB0dyA9IHRpbGVN
YXRyaXgtPnRpbGUud2lkdGg7Ci0gICAgdGggPSB0aWxlTWF0cml4LT50aWxlLmhlaWdodDsKKyAg
ICB0aWxlV2lkdGggPSB0aWxlTWF0cml4LT50aWxlLndpZHRoOworICAgIHRpbGVIZWlnaHQgPSB0
aWxlTWF0cml4LT50aWxlLmhlaWdodDsKIAotICAgIHRpbGUgPSBld2tfdGlsZV9uZXcoY2FudmFz
LCB0dywgdGgsIHpvb20sIHRpbGVNYXRyaXgtPmNzcGFjZSk7CisgICAgdGlsZSA9IGV3a190aWxl
X25ldyhjYW52YXMsIHRpbGVXaWR0aCwgdGlsZUhlaWdodCwgem9vbSwgdGlsZU1hdHJpeC0+Y3Nw
YWNlKTsKICAgICBpZiAoIXRpbGUpIHsKLSAgICAgICAgRVJSKCJjb3VsZCBub3QgY3JlYXRlIHRp
bGUgJWR4JWQgYXQgJWYsIGNzcGFjZT0lZCIsIHR3LCB0aCwgKGRvdWJsZSl6b29tLCB0aWxlTWF0
cml4LT5jc3BhY2UpOworICAgICAgICBFUlIoImNvdWxkIG5vdCBjcmVhdGUgdGlsZSAlZHglZCBh
dCAlZiwgY3NwYWNlPSVkIiwgdGlsZVdpZHRoLCB0aWxlSGVpZ2h0LCAoZG91YmxlKXpvb20sIHRp
bGVNYXRyaXgtPmNzcGFjZSk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIApAQCAtMzQzLDgg
KzM0Myw4IEBAIEV3a19UaWxlKiBld2tfdGlsZV9tYXRyaXhfdGlsZV9uZXcoRXdrX1RpbGVfTWF0
cml4KiB0aWxlTWF0cml4LCBFdmFzKiBjYW52YXMsIHVuCiAKICAgICB0aWxlLT5jb2wgPSBjb2x1
bW47CiAgICAgdGlsZS0+cm93ID0gcm93OwotICAgIHRpbGUtPnggPSBjb2x1bW4gKiB0dzsKLSAg
ICB0aWxlLT55ID0gcm93ICogdGg7CisgICAgdGlsZS0+eCA9IGNvbHVtbiAqIHRpbGVXaWR0aDsK
KyAgICB0aWxlLT55ID0gcm93ICogdGlsZUhlaWdodDsKIAogICAgIGNhaXJvX3RyYW5zbGF0ZSh0
aWxlLT5jYWlybywgLXRpbGUtPngsIC10aWxlLT55KTsKIApAQCAtMzg1LDE2ICszODUsMTYgQEAg
RWluYV9Cb29sIGV3a190aWxlX21hdHJpeF90aWxlX3B1dChFd2tfVGlsZV9NYXRyaXgqIHRpbGVN
YXRyaXgsIEV3a19UaWxlKiB0aWxlLAogICAgICAgICByZXR1cm4gRUlOQV9UUlVFOwogCiAgICAg
dGlsZS0+c3RhdHMubGFzdF91c2VkID0gbGFzdFVzZWQ7Ci0gICAgcmV0dXJuIGV3a190aWxlX3Vu
dXNlZF9jYWNoZV90aWxlX3B1dCh0aWxlTWF0cml4LT50dWMsIHRpbGUsIF9ld2tfdGlsZV9tYXRy
aXhfdGlsZV9mcmVlLCB0aWxlTWF0cml4KTsKKyAgICByZXR1cm4gZXdrX3RpbGVfdW51c2VkX2Nh
Y2hlX3RpbGVfcHV0KHRpbGVNYXRyaXgtPnRpbGllVW51c2VkQ2FjaGUsIHRpbGUsIF9ld2tfdGls
ZV9tYXRyaXhfdGlsZV9mcmVlLCB0aWxlTWF0cml4KTsKIH0KIAogRWluYV9Cb29sIGV3a190aWxl
X21hdHJpeF90aWxlX3VwZGF0ZShFd2tfVGlsZV9NYXRyaXgqIHRpbGVNYXRyaXgsIHVuc2lnbmVk
IGxvbmcgY29sLCB1bnNpZ25lZCBsb25nIHJvdywgY29uc3QgRWluYV9SZWN0YW5nbGUqIHVwZGF0
ZSkKIHsKLSAgICBFaW5hX1JlY3RhbmdsZSBuZXdfdXBkYXRlOworICAgIEVpbmFfUmVjdGFuZ2xl
IG5ld1VwZGF0ZTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodGlsZU1hdHJp
eCwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHVwZGF0
ZSwgRUlOQV9GQUxTRSk7CiAKLSAgICBtZW1jcHkoJm5ld191cGRhdGUsIHVwZGF0ZSwgc2l6ZW9m
KG5ld191cGRhdGUpKTsKKyAgICBtZW1jcHkoJm5ld1VwZGF0ZSwgdXBkYXRlLCBzaXplb2YobmV3
VXBkYXRlKSk7CiAgICAgLy8gY2hlY2sgdXBkYXRlIGlzIHZhbGlkLCBvdGhlcndpc2UgcmV0dXJu
IEVJTkFfRkFMU0UKICAgICBpZiAodXBkYXRlLT54IDwgMCB8fCB1cGRhdGUtPnkgPCAwIHx8IHVw
ZGF0ZS0+dyA8PSAwIHx8IHVwZGF0ZS0+aCA8PSAwKSB7CiAgICAgICAgIEVSUigiaW52YWxpZCB1
cGRhdGUgcmVnaW9uLiIpOwpAQCAtNDAyLDkgKzQwMiw5IEBAIEVpbmFfQm9vbCBld2tfdGlsZV9t
YXRyaXhfdGlsZV91cGRhdGUoRXdrX1RpbGVfTWF0cml4KiB0aWxlTWF0cml4LCB1bnNpZ25lZCBs
b25nCiAgICAgfQogCiAgICAgaWYgKHVwZGF0ZS0+eCArIHVwZGF0ZS0+dyAtIDEgPj0gdGlsZU1h
dHJpeC0+dGlsZS53aWR0aCkKLSAgICAgICAgbmV3X3VwZGF0ZS53ID0gdGlsZU1hdHJpeC0+dGls
ZS53aWR0aCAtIHVwZGF0ZS0+eDsKKyAgICAgICAgbmV3VXBkYXRlLncgPSB0aWxlTWF0cml4LT50
aWxlLndpZHRoIC0gdXBkYXRlLT54OwogICAgIGlmICh1cGRhdGUtPnkgKyB1cGRhdGUtPmggLSAx
ID49IHRpbGVNYXRyaXgtPnRpbGUuaGVpZ2h0KQotICAgICAgICBuZXdfdXBkYXRlLmggPSB0aWxl
TWF0cml4LT50aWxlLmhlaWdodCAtIHVwZGF0ZS0+eTsKKyAgICAgICAgbmV3VXBkYXRlLmggPSB0
aWxlTWF0cml4LT50aWxlLmhlaWdodCAtIHVwZGF0ZS0+eTsKIAogICAgIEV3a19UaWxlKiB0aWxl
ID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGUqPihlaW5hX21hdHJpeHNwYXJzZV9kYXRhX2lkeF9nZXQo
dGlsZU1hdHJpeC0+bWF0cml4LCByb3csIGNvbCkpOwogICAgIGlmICghdGlsZSkKQEAgLTQxMiw3
ICs0MTIsNyBAQCBFaW5hX0Jvb2wgZXdrX3RpbGVfbWF0cml4X3RpbGVfdXBkYXRlKEV3a19UaWxl
X01hdHJpeCogdGlsZU1hdHJpeCwgdW5zaWduZWQgbG9uZwogCiAgICAgaWYgKCF0aWxlLT51cGRh
dGVzICYmICF0aWxlLT5zdGF0cy5mdWxsX3VwZGF0ZSkKICAgICAgICAgdGlsZU1hdHJpeC0+dXBk
YXRlcyA9IGVpbmFfbGlzdF9hcHBlbmQodGlsZU1hdHJpeC0+dXBkYXRlcywgdGlsZSk7Ci0gICAg
ZXdrX3RpbGVfdXBkYXRlX2FyZWEodGlsZSwgJm5ld191cGRhdGUpOworICAgIGV3a190aWxlX3Vw
ZGF0ZV9hcmVhKHRpbGUsICZuZXdVcGRhdGUpOwogCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0K
QEAgLTQ1Myw3ICs0NTMsNyBAQCB2b2lkIGV3a190aWxlX21hdHJpeF90aWxlX3VwZGF0ZXNfY2xl
YXIoRXdrX1RpbGVfTWF0cml4KiB0aWxlTWF0cml4LCBFd2tfVGlsZSogdAogc3RhdGljIEVpbmFf
Qm9vbCBfZXdrX3RpbGVfbWF0cml4X3NsaWNlcl9zZXR1cChFd2tfVGlsZV9NYXRyaXgqIHRpbGVN
YXRyaXgsIGNvbnN0IEVpbmFfUmVjdGFuZ2xlKiBhcmVhLCBmbG9hdCB6b29tLCBFaW5hX1RpbGVf
R3JpZF9TbGljZXIqIHNsaWNlcikKIHsKICAgICB1bnNpZ25lZCBsb25nIHJvd3MsIGNvbHM7Ci0g
ICAgRXZhc19Db29yZCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCB0dywgdGg7CisgICAgRXZhc19Db29y
ZCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCB0aWxlV2lkdGgsIHRpbGVIZWlnaHQ7CiAKICAgICBpZiAo
YXJlYS0+dyA8PSAwIHx8IGFyZWEtPmggPD0gMCkgewogICAgICAgICBXUk4oImludmFsaWQgYXJl
YSByZWdpb246ICVkLCVkKyVkeCVkLiIsCkBAIC00NjYsOCArNDY2LDggQEAgc3RhdGljIEVpbmFf
Qm9vbCBfZXdrX3RpbGVfbWF0cml4X3NsaWNlcl9zZXR1cChFd2tfVGlsZV9NYXRyaXgqIHRpbGVN
YXRyaXgsIGNvbnMKICAgICB3aWR0aCA9IGFyZWEtPnc7CiAgICAgaGVpZ2h0ID0gYXJlYS0+aDsK
IAotICAgIHR3ID0gdGlsZU1hdHJpeC0+dGlsZS53aWR0aDsKLSAgICB0aCA9IHRpbGVNYXRyaXgt
PnRpbGUuaGVpZ2h0OworICAgIHRpbGVXaWR0aCA9IHRpbGVNYXRyaXgtPnRpbGUud2lkdGg7Cisg
ICAgdGlsZUhlaWdodCA9IHRpbGVNYXRyaXgtPnRpbGUuaGVpZ2h0OwogCiAgICAgLy8gY3JvcHBp
bmcgYXJlYSByZWdpb24gdG8gZml0IG1hdHJpeAogICAgIGVpbmFfbWF0cml4c3BhcnNlX3NpemVf
Z2V0KHRpbGVNYXRyaXgtPm1hdHJpeCwgJnJvd3MsICZjb2xzKTsKQEAgLTQ4MCwxMiArNDgwLDEy
IEBAIHN0YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxlX21hdHJpeF9zbGljZXJfc2V0dXAoRXdrX1Rp
bGVfTWF0cml4KiB0aWxlTWF0cml4LCBjb25zCiAgICAgICAgIHkgPSAwOwogICAgIH0KIAotICAg
IGlmICh5ICsgaGVpZ2h0IC0gMSA+IChsb25nKShyb3dzICogdGgpKQotICAgICAgICBoZWlnaHQg
PSByb3dzICogdGggLSB5OwotICAgIGlmICh4ICsgd2lkdGggLSAxID4gKGxvbmcpKGNvbHMgKiB0
dykpCi0gICAgICAgIHdpZHRoID0gY29scyAqIHR3IC0geDsKKyAgICBpZiAoeSArIGhlaWdodCAt
IDEgPiAobG9uZykocm93cyAqIHRpbGVIZWlnaHQpKQorICAgICAgICBoZWlnaHQgPSByb3dzICog
dGlsZUhlaWdodCAtIHk7CisgICAgaWYgKHggKyB3aWR0aCAtIDEgPiAobG9uZykoY29scyAqIHRp
bGVXaWR0aCkpCisgICAgICAgIHdpZHRoID0gY29scyAqIHRpbGVXaWR0aCAtIHg7CiAKLSAgICBy
ZXR1cm4gZWluYV90aWxlX2dyaWRfc2xpY2VyX3NldHVwKHNsaWNlciwgeCwgeSwgd2lkdGgsIGhl
aWdodCwgdHcsIHRoKTsKKyAgICByZXR1cm4gZWluYV90aWxlX2dyaWRfc2xpY2VyX3NldHVwKHNs
aWNlciwgeCwgeSwgd2lkdGgsIGhlaWdodCwgdGlsZVdpZHRoLCB0aWxlSGVpZ2h0KTsKIH0KIAog
CkBAIC01MzEsMTcgKzUzMSwxNyBAQCBFaW5hX0Jvb2wgZXdrX3RpbGVfbWF0cml4X3VwZGF0ZShF
d2tfVGlsZV9NYXRyaXgqIHRpbGVNYXRyaXgsIGNvbnN0IEVpbmFfUmVjdGFuZwogCiB2b2lkIGV3
a190aWxlX21hdHJpeF91cGRhdGVzX3Byb2Nlc3MoRXdrX1RpbGVfTWF0cml4KiB0aWxlTWF0cml4
KQogewotICAgIEVpbmFfTGlzdCogbCwgKiBsX25leHQ7CisgICAgRWluYV9MaXN0KiBsaXN0LCAq
bGlzdE5leHQ7CiAgICAgdm9pZCogaXRlbTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
Tih0aWxlTWF0cml4KTsKIAogICAgIC8vIHByb2Nlc3MgdXBkYXRlcywgdW5mbGFnIHRpbGVzCi0g
ICAgRUlOQV9MSVNUX0ZPUkVBQ0hfU0FGRSh0aWxlTWF0cml4LT51cGRhdGVzLCBsLCBsX25leHQs
IGl0ZW0pIHsKKyAgICBFSU5BX0xJU1RfRk9SRUFDSF9TQUZFKHRpbGVNYXRyaXgtPnVwZGF0ZXMs
IGxpc3QsIGxpc3ROZXh0LCBpdGVtKSB7CiAgICAgICAgIEV3a19UaWxlKiB0aWxlID0gc3RhdGlj
X2Nhc3Q8RXdrX1RpbGUqPihpdGVtKTsKLSAgICAgICAgZXdrX3RpbGVfdXBkYXRlc19wcm9jZXNz
KHRpbGUsIHRpbGVNYXRyaXgtPnJlbmRlci5jYiwgdGlsZU1hdHJpeC0+cmVuZGVyLmRhdGEpOwor
ICAgICAgICBld2tfdGlsZV91cGRhdGVzX3Byb2Nlc3ModGlsZSwgdGlsZU1hdHJpeC0+cmVuZGVy
LmNhbGxiYWNrLCB0aWxlTWF0cml4LT5yZW5kZXIuZGF0YSk7CiAgICAgICAgIGlmICh0aWxlLT52
aXNpYmxlKSB7CiAgICAgICAgICAgICBld2tfdGlsZV91cGRhdGVzX2NsZWFyKHRpbGUpOwotICAg
ICAgICAgICAgdGlsZU1hdHJpeC0+dXBkYXRlcyA9IGVpbmFfbGlzdF9yZW1vdmVfbGlzdCh0aWxl
TWF0cml4LT51cGRhdGVzLCBsKTsKKyAgICAgICAgICAgIHRpbGVNYXRyaXgtPnVwZGF0ZXMgPSBl
aW5hX2xpc3RfcmVtb3ZlX2xpc3QodGlsZU1hdHJpeC0+dXBkYXRlcywgbGlzdCk7CiAgICAgICAg
IH0KICAgICB9CiB9CkBAIC01NTksNyArNTU5LDcgQEAgdm9pZCBld2tfdGlsZV9tYXRyaXhfdXBk
YXRlc19jbGVhcihFd2tfVGlsZV9NYXRyaXgqIHRpbGVNYXRyaXgpCiAvLyByZW1vdmUgbWUgbGF0
ZXIhCiB2b2lkIGV3a190aWxlX21hdHJpeF9kYmcoY29uc3QgRXdrX1RpbGVfTWF0cml4KiB0aWxl
TWF0cml4KQogewotICAgIEVpbmFfSXRlcmF0b3IqIGl0ID0gZWluYV9tYXRyaXhzcGFyc2VfaXRl
cmF0b3JfY29tcGxldGVfbmV3KHRpbGVNYXRyaXgtPm1hdHJpeCk7CisgICAgRWluYV9JdGVyYXRv
ciogaXRlcmF0b3IgPSBlaW5hX21hdHJpeHNwYXJzZV9pdGVyYXRvcl9jb21wbGV0ZV9uZXcodGls
ZU1hdHJpeC0+bWF0cml4KTsKICAgICBFaW5hX01hdHJpeHNwYXJzZV9DZWxsKiBjZWxsOwogICAg
IEVpbmFfQm9vbCBsYXN0X2VtcHR5ID0gRUlOQV9GQUxTRTsKIApAQCAtNTc0LDkgKzU3NCw5IEBA
IHZvaWQgZXdrX3RpbGVfbWF0cml4X2RiZyhjb25zdCBFd2tfVGlsZV9NYXRyaXgqIHRpbGVNYXRy
aXgpCiAgICAgcHJpbnRmKCJFd2tfVGlsZSBNYXRyaXg6XG4iKTsKICNlbmRpZgogCi0gICAgRUlO
QV9JVEVSQVRPUl9GT1JFQUNIKGl0LCBjZWxsKSB7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgcm93
LCBjb2w7Ci0gICAgICAgIGVpbmFfbWF0cml4c3BhcnNlX2NlbGxfcG9zaXRpb25fZ2V0KGNlbGws
ICZyb3csICZjb2wpOworICAgIEVJTkFfSVRFUkFUT1JfRk9SRUFDSChpdGVyYXRvciwgY2VsbCkg
eworICAgICAgICB1bnNpZ25lZCBsb25nIHJvdywgY29sdW1uOworICAgICAgICBlaW5hX21hdHJp
eHNwYXJzZV9jZWxsX3Bvc2l0aW9uX2dldChjZWxsLCAmcm93LCAmY29sdW1uKTsKIAogICAgICAg
ICBFd2tfVGlsZSogdGlsZSA9IHN0YXRpY19jYXN0PEV3a19UaWxlKj4oZWluYV9tYXRyaXhzcGFy
c2VfY2VsbF9kYXRhX2dldChjZWxsKSk7CiAgICAgICAgIGlmICghdGlsZSkgewpAQCAtNTg0LDIy
ICs1ODQsMjIgQEAgdm9pZCBld2tfdGlsZV9tYXRyaXhfZGJnKGNvbnN0IEV3a19UaWxlX01hdHJp
eCogdGlsZU1hdHJpeCkKICAgICAgICAgICAgICAgICBsYXN0X2VtcHR5ID0gRUlOQV9UUlVFOwog
ICAgICAgICAgICAgICAgIHByaW50ZigiRW1wdHk6Iik7CiAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBwcmludGYoIiBbJWx1LCVsdV0iLCBjb2wsIHJvdyk7CisgICAgICAgICAgICBwcmludGYo
IiBbJWx1LCVsdV0iLCBjb2x1bW4sIHJvdyk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICBpZiAobGFzdF9lbXB0eSkgewogICAgICAgICAgICAgICAgIGxhc3RfZW1wdHkgPSBFSU5BX0ZB
TFNFOwogICAgICAgICAgICAgICAgIHByaW50ZigiXG4iKTsKICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIHByaW50ZigiJTNsdSwlM2x1ICUxMHA6IiwgY29sLCByb3csIHRpbGUpOworICAgICAg
ICAgICAgcHJpbnRmKCIlM2x1LCUzbHUgJTEwcDoiLCBjb2x1bW4sIHJvdywgdGlsZSk7CiAgICAg
ICAgICAgICBwcmludGYoIiBbJTNsdSwlM2x1ICsgJWR4JWQgQCAlMC4zZl0lYyIsIHRpbGUtPmNv
bCwgdGlsZS0+cm93LCB0aWxlLT53aWR0aCwgdGlsZS0+aGVpZ2h0LCB0aWxlLT56b29tLCB0aWxl
LT52aXNpYmxlID8gJyonIDogJyAnKTsKICAgICAgICAgICAgIHByaW50ZigiXG4iKTsKICAgICAg
ICAgfQogICAgIH0KICAgICBpZiAobGFzdF9lbXB0eSkKICAgICAgICAgcHJpbnRmKCJcbiIpOwot
ICAgIGVpbmFfaXRlcmF0b3JfZnJlZShpdCk7CisgICAgZWluYV9pdGVyYXRvcl9mcmVlKGl0ZXJh
dG9yKTsKIAotICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9kYmcodGlsZU1hdHJpeC0+dHVjKTsK
KyAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfZGJnKHRpbGVNYXRyaXgtPnRpbGllVW51c2VkQ2Fj
aGUpOwogfQogCiAvKioKQEAgLTYxNSw3ICs2MTUsNyBAQCB2b2lkIGV3a190aWxlX21hdHJpeF9m
cmVlemUoRXdrX1RpbGVfTWF0cml4KiB0aWxlTWF0cml4KQogewogICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOKHRpbGVNYXRyaXgpOwogICAgIGlmICghdGlsZU1hdHJpeC0+ZnJvemVuKQot
ICAgICAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfZnJlZXplKHRpbGVNYXRyaXgtPnR1Yyk7Cisg
ICAgICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9mcmVlemUodGlsZU1hdHJpeC0+dGlsaWVVbnVz
ZWRDYWNoZSk7CiAgICAgdGlsZU1hdHJpeC0+ZnJvemVuKys7CiB9CiAKQEAgLTYzNSw1ICs2MzUs
NSBAQCB2b2lkIGV3a190aWxlX21hdHJpeF90aGF3KEV3a19UaWxlX01hdHJpeCogdGlsZU1hdHJp
eCkKIAogICAgIHRpbGVNYXRyaXgtPmZyb3plbi0tOwogICAgIGlmICghdGlsZU1hdHJpeC0+ZnJv
emVuKQotICAgICAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfdGhhdyh0aWxlTWF0cml4LT50dWMp
OworICAgICAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfdGhhdyh0aWxlTWF0cml4LT50aWxpZVVu
dXNlZENhY2hlKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGls
ZWRfbW9kZWwuY3BwIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a190aWxlZF9tb2RlbC5jcHAK
aW5kZXggMjA5YjBjMzlmMTY3OGVhYjEzODI5YjY1OGE1YzM3YjlhMDQwYWUzZS4uZGQ1ZjBkNWE4
MGNhNTQzNDQyMDQyZGRkOWE3NmFjNjNjMGEyNDc1MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9lZmwvZXdrL2V3a190aWxlZF9tb2RlbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9lZmwvZXdr
L2V3a190aWxlZF9tb2RlbC5jcHAKQEAgLTE0OSw1OSArMTQ5LDU5IEBAIHZvaWQgZXdrX3RpbGVf
YWNjb3VudGluZ19kYmcoKQogCiBzdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlX3BhaW50X3Jn
Yjg4OChFd2tfVGlsZSogdGlsZSwgdWludDhfdCByZWQsIHVpbnQ4X3QgZ3JlZW4sIHVpbnQ4X3Qg
Ymx1ZSkKIHsKLSAgICB1aW50MzJfdCBjMSA9IDB4ZmYwMDAwMDAgfCAoKHVpbnQzMl90KXJlZCA8
PCAxNikgfCAoKHVpbnQzMl90KWdyZWVuIDw8IDgpIHwgYmx1ZTsKLSAgICB1aW50MzJfdCBjMiA9
ICgodWludDY0X3QpYzEgPDwgMzIpIHwgYzE7CisgICAgdWludDMyX3QgY29sb3IxID0gMHhmZjAw
MDAwMCB8ICgodWludDMyX3QpcmVkIDw8IDE2KSB8ICgodWludDMyX3QpZ3JlZW4gPDwgOCkgfCBi
bHVlOworICAgIHVpbnQzMl90IGNvbG9yMiA9ICgodWludDY0X3QpY29sb3IxIDw8IDMyKSB8IGNv
bG9yMTsKIAogICAgIHVpbnQ2NF90KiBkc3Q2NCA9ICh1aW50NjRfdCopdGlsZS0+cGl4ZWxzOwog
ICAgIHVpbnQ2NF90KiBkc3Q2NF9lbmQgPSBkc3Q2NCArICgodGlsZS0+Ynl0ZXMgLyA4KSAmIH43
KTsKICAgICBmb3IgKDsgZHN0NjQgPCBkc3Q2NF9lbmQ7IGRzdDY0ICs9IDgpIHsKICAgICAgICAg
LyogVE9ETzogQVJNIGFkZCBwbGQgb3IgTkVPTiBpbnN0cnVjdGlvbnMgKi8KLSAgICAgICAgZHN0
NjRbMF0gPSBjMjsKLSAgICAgICAgZHN0NjRbMV0gPSBjMjsKLSAgICAgICAgZHN0NjRbMl0gPSBj
MjsKLSAgICAgICAgZHN0NjRbM10gPSBjMjsKLSAgICAgICAgZHN0NjRbNF0gPSBjMjsKLSAgICAg
ICAgZHN0NjRbNV0gPSBjMjsKLSAgICAgICAgZHN0NjRbNl0gPSBjMjsKLSAgICAgICAgZHN0NjRb
N10gPSBjMjsKKyAgICAgICAgZHN0NjRbMF0gPSBjb2xvcjI7CisgICAgICAgIGRzdDY0WzFdID0g
Y29sb3IyOworICAgICAgICBkc3Q2NFsyXSA9IGNvbG9yMjsKKyAgICAgICAgZHN0NjRbM10gPSBj
b2xvcjI7CisgICAgICAgIGRzdDY0WzRdID0gY29sb3IyOworICAgICAgICBkc3Q2NFs1XSA9IGNv
bG9yMjsKKyAgICAgICAgZHN0NjRbNl0gPSBjb2xvcjI7CisgICAgICAgIGRzdDY0WzddID0gY29s
b3IyOwogICAgIH0KIAogICAgIHVpbnQzMl90KiBkc3QzMiA9ICh1aW50MzJfdCopZHN0NjRfZW5k
OwogICAgIHVpbnQzMl90KiBkc3QzMl9lbmQgPSAodWludDMyX3QqKSh0aWxlLT5waXhlbHMgKyB0
aWxlLT5ieXRlcyk7CiAgICAgZm9yICg7IGRzdDMyIDwgZHN0MzJfZW5kOyBkc3QzMisrKQotICAg
ICAgICAqZHN0MzIgPSBjMTsKKyAgICAgICAgKmRzdDMyID0gY29sb3IxOwogfQogCiBzdGF0aWMg
aW5saW5lIHZvaWQgX2V3a190aWxlX3BhaW50X3JnYjU2NShFd2tfVGlsZSogdGlsZSwgdWludDhf
dCByZWQsIHVpbnQ4X3QgZ3JlZW4sIHVpbnQ4X3QgYmx1ZSkKIHsKLSAgICB1aW50MTZfdCogZHN0
MTYsICogZHN0MTZfZW5kLCBjMTsKLSAgICB1aW50NjRfdCogZHN0NjQsICogZHN0NjRfZW5kLCBj
MjsKKyAgICB1aW50MTZfdCogZHN0MTYsICogZHN0MTZfZW5kLCBjb2xvcjE7CisgICAgdWludDY0
X3QqIGRzdDY0LCAqIGRzdDY0X2VuZCwgY29sb3IyOwogCi0gICAgYzEgPSAoKCgocmVkID4+IDMp
ICYgMHgxZikgPDwgMTEpIHwKKyAgICBjb2xvcjEgPSAoKCgocmVkID4+IDMpICYgMHgxZikgPDwg
MTEpIHwKICAgICAgICAgICAoKChncmVlbiA+PiAyKSAmIDB4M2YpIDw8IDUpIHwKICAgICAgICAg
ICAoKGJsdWUgPj4gMykgJiAweDFmKSk7CiAKLSAgICBjMiA9ICgoKHVpbnQ2NF90KWMxIDw8IDQ4
KSB8ICgodWludDY0X3QpYzEgPDwgMzIpIHwKLSAgICAgICAgICAoKHVpbnQ2NF90KWMxIDw8IDE2
KSB8IGMxKTsKKyAgICBjb2xvcjIgPSAoKCh1aW50NjRfdCljb2xvcjEgPDwgNDgpIHwgKCh1aW50
NjRfdCljb2xvcjEgPDwgMzIpIHwKKyAgICAgICAgICAoKHVpbnQ2NF90KWNvbG9yMSA8PCAxNikg
fCBjb2xvcjEpOwogCiAgICAgZHN0NjQgPSAodWludDY0X3QqKXRpbGUtPnBpeGVsczsKICAgICBk
c3Q2NF9lbmQgPSBkc3Q2NCArICgodGlsZS0+Ynl0ZXMgLyA4KSAmIH43KTsKICAgICBmb3IgKDsg
ZHN0NjQgPCBkc3Q2NF9lbmQ7IGRzdDY0ICs9IDgpIHsKICAgICAgICAgLyogVE9ETzogQVJNIGFk
ZCBwbGQgb3IgTkVPTiBpbnN0cnVjdGlvbnMgKi8KLSAgICAgICAgZHN0NjRbMF0gPSBjMjsKLSAg
ICAgICAgZHN0NjRbMV0gPSBjMjsKLSAgICAgICAgZHN0NjRbMl0gPSBjMjsKLSAgICAgICAgZHN0
NjRbM10gPSBjMjsKLSAgICAgICAgZHN0NjRbNF0gPSBjMjsKLSAgICAgICAgZHN0NjRbNV0gPSBj
MjsKLSAgICAgICAgZHN0NjRbNl0gPSBjMjsKLSAgICAgICAgZHN0NjRbN10gPSBjMjsKKyAgICAg
ICAgZHN0NjRbMF0gPSBjb2xvcjI7CisgICAgICAgIGRzdDY0WzFdID0gY29sb3IyOworICAgICAg
ICBkc3Q2NFsyXSA9IGNvbG9yMjsKKyAgICAgICAgZHN0NjRbM10gPSBjb2xvcjI7CisgICAgICAg
IGRzdDY0WzRdID0gY29sb3IyOworICAgICAgICBkc3Q2NFs1XSA9IGNvbG9yMjsKKyAgICAgICAg
ZHN0NjRbNl0gPSBjb2xvcjI7CisgICAgICAgIGRzdDY0WzddID0gY29sb3IyOwogICAgIH0KIAog
ICAgIGRzdDE2ID0gKHVpbnQxNl90Kilkc3QxNl9lbmQ7CiAgICAgZHN0MTZfZW5kID0gKHVpbnQx
Nl90KikodGlsZS0+cGl4ZWxzICsgdGlsZS0+Ynl0ZXMpOwogICAgIGZvciAoOyBkc3QxNiA8IGRz
dDE2X2VuZDsgZHN0MTYrKykKLSAgICAgICAgKmRzdDE2ID0gYzE7CisgICAgICAgICpkc3QxNiA9
IGNvbG9yMTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZV9wYWludChFd2tfVGls
ZSogdGlsZSwgdWludDhfdCByZWQsIHVpbnQ4X3QgZ3JlZW4sIHVpbnQ4X3QgYmx1ZSkKQEAgLTIz
MSwxNyArMjMxLDE3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVfcGFpbnQoRXdrX1Rp
bGUqIHRpbGUsIHVpbnQ4X3QgcmVkLCB1aW50OF90IGdyZWVuLCB1CiAgKi8KIEV3a19UaWxlKiBl
d2tfdGlsZV9uZXcoRXZhcyogZXZhcywgRXZhc19Db29yZCB3aWR0aCwgRXZhc19Db29yZCBoZWln
aHQsIGZsb2F0IHpvb20sIEV2YXNfQ29sb3JzcGFjZSBjb2xvclNwYWNlKQogewotICAgIEV2YXNf
Q29vcmQqIGVjOwotICAgIEV2YXNfQ29sb3JzcGFjZSogZWNzOwotICAgIGZsb2F0KiBmOwotICAg
IHNpemVfdCogczsKKyAgICBFdmFzX0Nvb3JkKiBldmFzQ29vcmQ7CisgICAgRXZhc19Db2xvcnNw
YWNlKiBldmFzQ29sb3JTcGFjZTsKKyAgICBmbG9hdCogdGlsZVpvb207CisgICAgc2l6ZV90KiB0
aWxlU2l6ZTsKICAgICBFd2tfVGlsZSogdGlsZTsKICAgICB1bnNpZ25lZCBpbnQgYXJlYTsKICAg
ICBzaXplX3QgYnl0ZXM7CiAgICAgY2Fpcm9fZm9ybWF0X3QgZm9ybWF0OwogICAgIGNhaXJvX3N0
YXR1c190IHN0YXR1czsKICAgICBpbnQgc3RyaWRlOwotICAgIEVjb3JlX0V2YXMqIGVlOworICAg
IEVjb3JlX0V2YXMqIGVjb3JlRXZhczsKICAgICBjb25zdCBjaGFyKiBlbmdpbmU7CiAKICAgICBh
cmVhID0gd2lkdGggKiBoZWlnaHQ7CkBAIC0yNjcsOCArMjY3LDggQEAgRXdrX1RpbGUqIGV3a190
aWxlX25ldyhFdmFzKiBldmFzLCBFdmFzX0Nvb3JkIHdpZHRoLCBFdmFzX0Nvb3JkIGhlaWdodCwg
ZmxvYXQgem8KIAogICAgIHRpbGUtPmltYWdlID0gZXZhc19vYmplY3RfaW1hZ2VfYWRkKGV2YXMp
OwogCi0gICAgZWUgPSBlY29yZV9ldmFzX2Vjb3JlX2V2YXNfZ2V0KGV2YXMpOwotICAgIGVuZ2lu
ZSA9IGVjb3JlX2V2YXNfZW5naW5lX25hbWVfZ2V0KGVlKTsKKyAgICBlY29yZUV2YXMgPSBlY29y
ZV9ldmFzX2Vjb3JlX2V2YXNfZ2V0KGV2YXMpOworICAgIGVuZ2luZSA9IGVjb3JlX2V2YXNfZW5n
aW5lX25hbWVfZ2V0KGVjb3JlRXZhcyk7CiAgICAgaWYgKGVuZ2luZSAmJiAhc3RyY21wKGVuZ2lu
ZSwgIm9wZW5nbF94MTEiKSkKICAgICAgICAgZXZhc19vYmplY3RfaW1hZ2VfY29udGVudF9oaW50
X3NldCh0aWxlLT5pbWFnZSwgRVZBU19JTUFHRV9DT05URU5UX0hJTlRfRFlOQU1JQyk7CiAKQEAg
LTI3OSwyMCArMjc5LDIwIEBAIEV3a19UaWxlKiBld2tfdGlsZV9uZXcoRXZhcyogZXZhcywgRXZh
c19Db29yZCB3aWR0aCwgRXZhc19Db29yZCBoZWlnaHQsIGZsb2F0IHpvCiAgICAgdGlsZS0+c3Rh
dHMuYXJlYSA9IGFyZWE7CiAKICAgICAvKiB1Z2x5LCBidXQgbGV0J3MgYXZvaWQgYXQgYWxsIGNv
c3RzIGhhdmluZyB1c2VycyB0byBtb2RpZnkgdGhvc2UgKi8KLSAgICBlYyA9IChFdmFzX0Nvb3Jk
KikmdGlsZS0+d2lkdGg7Ci0gICAgKmVjID0gd2lkdGg7CisgICAgZXZhc0Nvb3JkID0gKEV2YXNf
Q29vcmQqKSZ0aWxlLT53aWR0aDsKKyAgICAqZXZhc0Nvb3JkID0gd2lkdGg7CiAKLSAgICBlYyA9
IChFdmFzX0Nvb3JkKikmdGlsZS0+aGVpZ2h0OwotICAgICplYyA9IGhlaWdodDsKKyAgICBldmFz
Q29vcmQgPSAoRXZhc19Db29yZCopJnRpbGUtPmhlaWdodDsKKyAgICAqZXZhc0Nvb3JkID0gaGVp
Z2h0OwogCi0gICAgZWNzID0gKEV2YXNfQ29sb3JzcGFjZSopJnRpbGUtPmNzcGFjZTsKLSAgICAq
ZWNzID0gY29sb3JTcGFjZTsKKyAgICBldmFzQ29sb3JTcGFjZSA9IChFdmFzX0NvbG9yc3BhY2Uq
KSZ0aWxlLT5jc3BhY2U7CisgICAgKmV2YXNDb2xvclNwYWNlID0gY29sb3JTcGFjZTsKIAotICAg
IGYgPSAoZmxvYXQqKSZ0aWxlLT56b29tOwotICAgICpmID0gem9vbTsKKyAgICB0aWxlWm9vbSA9
IChmbG9hdCopJnRpbGUtPnpvb207CisgICAgKnRpbGVab29tID0gem9vbTsKIAotICAgIHMgPSAo
c2l6ZV90KikmdGlsZS0+Ynl0ZXM7Ci0gICAgKnMgPSBieXRlczsKKyAgICB0aWxlU2l6ZSA9IChz
aXplX3QqKSZ0aWxlLT5ieXRlczsKKyAgICAqdGlsZVNpemUgPSBieXRlczsKIAogICAgIGV2YXNf
b2JqZWN0X2ltYWdlX3NpemVfc2V0KHRpbGUtPmltYWdlLCB0aWxlLT53aWR0aCwgdGlsZS0+aGVp
Z2h0KTsKICAgICBldmFzX29iamVjdF9pbWFnZV9jb2xvcnNwYWNlX3NldCh0aWxlLT5pbWFnZSwg
dGlsZS0+Y3NwYWNlKTsKQEAgLTQ4MCw3ICs0ODAsNyBAQCBzdHJ1Y3QgX0V3a19UaWxlX1VudXNl
ZF9DYWNoZV9FbnRyeSB7CiAgICAgRXdrX1RpbGUqIHRpbGU7CiAgICAgaW50IHdlaWdodDsKICAg
ICBzdHJ1Y3QgewotICAgICAgICB2b2lkICgqY2IpKHZvaWQqIGRhdGEsIEV3a19UaWxlKiB0aWxl
KTsKKyAgICAgICAgdm9pZCAoKmNhbGxiYWNrKSh2b2lkKiBkYXRhLCBFd2tfVGlsZSogdGlsZSk7
CiAgICAgICAgIHZvaWQqIGRhdGE7CiAgICAgfSB0aWxlX2ZyZWU7CiB9OwpAQCAtNDk2LDcgKzQ5
Niw3IEBAIHN0cnVjdCBfRXdrX1RpbGVfVW51c2VkX0NhY2hlIHsKICAgICAgICAgc2l6ZV90IHVz
ZWQ7IC8qKjwgaW4gYnl0ZXMsIG1heWJlIG1vcmUgdGhhbiBtYXguICovCiAgICAgfSBtZW1vcnk7
CiAgICAgc3RydWN0IHsKLSAgICAgICAgRXZhc19Db29yZCB4LCB5LCB3LCBoOworICAgICAgICBF
dmFzX0Nvb3JkIHgsIHksIHdpZHRoLCBoZWlnaHQ7CiAgICAgICAgIGZsb2F0IHpvb207CiAgICAg
ICAgIEVpbmFfQm9vbCBsb2NrZWQ7CiAgICAgfSBsb2NrZWQ7CkBAIC01NDAsOCArNTQwLDggQEAg
dm9pZCBld2tfdGlsZV91bnVzZWRfY2FjaGVfbG9ja19hcmVhKEV3a19UaWxlX1VudXNlZF9DYWNo
ZSogdGlsZVVudXNlZENhY2hlLCBFdmEKICAgICB0aWxlVW51c2VkQ2FjaGUtPmxvY2tlZC5sb2Nr
ZWQgPSBFSU5BX1RSVUU7CiAgICAgdGlsZVVudXNlZENhY2hlLT5sb2NrZWQueCA9IHg7CiAgICAg
dGlsZVVudXNlZENhY2hlLT5sb2NrZWQueSA9IHk7Ci0gICAgdGlsZVVudXNlZENhY2hlLT5sb2Nr
ZWQudyA9IHdpZHRoOwotICAgIHRpbGVVbnVzZWRDYWNoZS0+bG9ja2VkLmggPSBoZWlnaHQ7Cisg
ICAgdGlsZVVudXNlZENhY2hlLT5sb2NrZWQud2lkdGggPSB3aWR0aDsKKyAgICB0aWxlVW51c2Vk
Q2FjaGUtPmxvY2tlZC5oZWlnaHQgPSBoZWlnaHQ7CiAgICAgdGlsZVVudXNlZENhY2hlLT5sb2Nr
ZWQuem9vbSA9IHpvb207CiB9CiAKQEAgLTU5NCw3ICs1OTQsNyBAQCB2b2lkIGV3a190aWxlX3Vu
dXNlZF9jYWNoZV9jbGVhcihFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHRpbGVVbnVzZWRDYWNoZSkK
ICAgICB2b2lkKiBpdGVtOwogICAgIEVJTkFfTElTVF9GUkVFKHRpbGVVbnVzZWRDYWNoZS0+ZW50
cmllcy5saXN0LCBpdGVtKSB7CiAgICAgICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZV9FbnRyeSog
aXRyID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGVfVW51c2VkX0NhY2hlX0VudHJ5Kj4oaXRlbSk7Ci0g
ICAgICAgIGl0ci0+dGlsZV9mcmVlLmNiKGl0ci0+dGlsZV9mcmVlLmRhdGEsIGl0ci0+dGlsZSk7
CisgICAgICAgIGl0ci0+dGlsZV9mcmVlLmNhbGxiYWNrKGl0ci0+dGlsZV9mcmVlLmRhdGEsIGl0
ci0+dGlsZSk7CiAgICAgICAgIGZyZWUoaXRyKTsKICAgICB9CiAKQEAgLTY1MCw3ICs2NTAsNyBA
QCBzaXplX3QgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3VzZWRfZ2V0KGNvbnN0IEV3a19UaWxlX1Vu
dXNlZF9DYWNoZSogdGlsZVVudXNlZENhYwogCiBzaXplX3QgZXdrX3RpbGVfdW51c2VkX2NhY2hl
X2ZsdXNoKEV3a19UaWxlX1VudXNlZF9DYWNoZSogdGlsZVVudXNlZENhY2hlLCBzaXplX3QgYnl0
ZXMpCiB7Ci0gICAgRWluYV9MaXN0KiBsLCAqIGxfbmV4dDsKKyAgICBFaW5hX0xpc3QqIGxpc3Qs
ICogbGlzdE5leHQ7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHRpbGVVbnVz
ZWRDYWNoZSwgMCk7CiAgICAgc2l6ZV90IGRvbmU7CiAgICAgdW5zaWduZWQgaW50IGNvdW50OwpA
QCAtNjY4LDcgKzY2OCw3IEBAIHNpemVfdCBld2tfdGlsZV91bnVzZWRfY2FjaGVfZmx1c2goRXdr
X1RpbGVfVW51c2VkX0NhY2hlKiB0aWxlVW51c2VkQ2FjaGUsIHNpemVfCiAgICAgdm9pZCogaXRl
bTsKICAgICBkb25lID0gMDsKICAgICBjb3VudCA9IDA7Ci0gICAgRUlOQV9MSVNUX0ZPUkVBQ0hf
U0FGRSh0aWxlVW51c2VkQ2FjaGUtPmVudHJpZXMubGlzdCwgbCwgbF9uZXh0LCBpdGVtKSB7Cisg
ICAgRUlOQV9MSVNUX0ZPUkVBQ0hfU0FGRSh0aWxlVW51c2VkQ2FjaGUtPmVudHJpZXMubGlzdCwg
bGlzdCwgbGlzdE5leHQsIGl0ZW0pIHsKICAgICAgICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlX0Vu
dHJ5KiBpdHIgPSBzdGF0aWNfY2FzdDxFd2tfVGlsZV9VbnVzZWRfQ2FjaGVfRW50cnkqPihpdGVt
KTsKICAgICAgICAgRXdrX1RpbGUqIHRpbGUgPSBpdHItPnRpbGU7CiAgICAgICAgIGlmIChkb25l
ID4gYnl0ZXMpCkBAIC02NzYsMTQgKzY3NiwxNCBAQCBzaXplX3QgZXdrX3RpbGVfdW51c2VkX2Nh
Y2hlX2ZsdXNoKEV3a19UaWxlX1VudXNlZF9DYWNoZSogdGlsZVVudXNlZENhY2hlLCBzaXplXwog
ICAgICAgICBpZiAodGlsZVVudXNlZENhY2hlLT5sb2NrZWQubG9ja2VkCiAgICAgICAgICAgICAm
JiB0aWxlLT54ICsgdGlsZS0+d2lkdGggPiB0aWxlVW51c2VkQ2FjaGUtPmxvY2tlZC54CiAgICAg
ICAgICAgICAmJiB0aWxlLT55ICsgdGlsZS0+aGVpZ2h0ID4gdGlsZVVudXNlZENhY2hlLT5sb2Nr
ZWQueQotICAgICAgICAgICAgJiYgdGlsZS0+eCA8IHRpbGVVbnVzZWRDYWNoZS0+bG9ja2VkLngg
KyB0aWxlVW51c2VkQ2FjaGUtPmxvY2tlZC53Ci0gICAgICAgICAgICAmJiB0aWxlLT55IDwgdGls
ZVVudXNlZENhY2hlLT5sb2NrZWQueSArIHRpbGVVbnVzZWRDYWNoZS0+bG9ja2VkLmgKKyAgICAg
ICAgICAgICYmIHRpbGUtPnggPCB0aWxlVW51c2VkQ2FjaGUtPmxvY2tlZC54ICsgdGlsZVVudXNl
ZENhY2hlLT5sb2NrZWQud2lkdGgKKyAgICAgICAgICAgICYmIHRpbGUtPnkgPCB0aWxlVW51c2Vk
Q2FjaGUtPmxvY2tlZC55ICsgdGlsZVVudXNlZENhY2hlLT5sb2NrZWQuaGVpZ2h0CiAgICAgICAg
ICAgICAmJiB0aWxlLT56b29tID09IHRpbGVVbnVzZWRDYWNoZS0+bG9ja2VkLnpvb20pIHsKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIGRvbmUgKz0gc2l6ZW9mKEV3
a19UaWxlKSArIGl0ci0+dGlsZS0+Ynl0ZXM7Ci0gICAgICAgIGl0ci0+dGlsZV9mcmVlLmNiKGl0
ci0+dGlsZV9mcmVlLmRhdGEsIGl0ci0+dGlsZSk7Ci0gICAgICAgIHRpbGVVbnVzZWRDYWNoZS0+
ZW50cmllcy5saXN0ID0gZWluYV9saXN0X3JlbW92ZV9saXN0KHRpbGVVbnVzZWRDYWNoZS0+ZW50
cmllcy5saXN0LCBsKTsKKyAgICAgICAgaXRyLT50aWxlX2ZyZWUuY2FsbGJhY2soaXRyLT50aWxl
X2ZyZWUuZGF0YSwgaXRyLT50aWxlKTsKKyAgICAgICAgdGlsZVVudXNlZENhY2hlLT5lbnRyaWVz
Lmxpc3QgPSBlaW5hX2xpc3RfcmVtb3ZlX2xpc3QodGlsZVVudXNlZENhY2hlLT5lbnRyaWVzLmxp
c3QsIGxpc3QpOwogICAgICAgICBmcmVlKGl0cik7CiAgICAgICAgIGNvdW50Kys7CiAgICAgfQpA
QCAtNzQzLDMxICs3NDMsMzEgQEAgdm9pZCBld2tfdGlsZV91bnVzZWRfY2FjaGVfdGhhdyhFd2tf
VGlsZV9VbnVzZWRfQ2FjaGUqIHRpbGVVbnVzZWRDYWNoZSkKICAqIGV3a190aWxlX3VudXNlZF9j
YWNoZV90aWxlX3B1dCgpLgogICoKICAqIEBwYXJhbSB0aWxlVW51c2VkQ2FjaGUgY2FjaGUgb2Yg
dW51c2VkIHRpbGVzCi0gKiBAcGFyYW0gdCB0aGUgdGlsZSB0byBiZSByZW1vdmVkIGZyb20gRXdr
X1RpbGVfVW51c2VkX0NhY2hlLgorICogQHBhcmFtIHRpbGUgdGhlIHRpbGUgdG8gYmUgcmVtb3Zl
ZCBmcm9tIEV3a19UaWxlX1VudXNlZF9DYWNoZS4KICAqCiAgKiBAcmV0dXJuICNFSU5BX1RSVUUg
b24gc3VjY2VzcywgI0VJTkFfRkFMU0Ugb3RoZXJ3aXNlLgogICovCiBFaW5hX0Jvb2wgZXdrX3Rp
bGVfdW51c2VkX2NhY2hlX3RpbGVfZ2V0KEV3a19UaWxlX1VudXNlZF9DYWNoZSogdGlsZVVudXNl
ZENhY2hlLCBFd2tfVGlsZSogdGlsZSkKIHsKLSAgICBFaW5hX0xpc3QqIGUsICogbDsKKyAgICBF
aW5hX0xpc3QqIGZvdW5kRW50cnksICppdGVyYXRlRW50cnk7CiAKICAgICB2b2lkKiBpdGVtOwot
ICAgIGUgPSAwOwotICAgIEVJTkFfTElTVF9GT1JFQUNIKHRpbGVVbnVzZWRDYWNoZS0+ZW50cmll
cy5saXN0LCBsLCBpdGVtKSB7CisgICAgZm91bmRFbnRyeSA9IDA7CisgICAgRUlOQV9MSVNUX0ZP
UkVBQ0godGlsZVVudXNlZENhY2hlLT5lbnRyaWVzLmxpc3QsIGl0ZXJhdGVFbnRyeSwgaXRlbSkg
ewogICAgICAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGVfRW50cnkqIGVudHJ5ID0gc3RhdGljX2Nh
c3Q8RXdrX1RpbGVfVW51c2VkX0NhY2hlX0VudHJ5Kj4oaXRlbSk7CiAgICAgICAgIGlmIChlbnRy
eS0+dGlsZSA9PSB0aWxlKSB7Ci0gICAgICAgICAgICBlID0gbDsKKyAgICAgICAgICAgIGZvdW5k
RW50cnkgPSBpdGVyYXRlRW50cnk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
IH0KLSAgICBpZiAoIWUpIHsKKyAgICBpZiAoIWZvdW5kRW50cnkpIHsKICAgICAgICAgRVJSKCJ0
aWxlICVwIG5vdCBmb3VuZCBpbiBjYWNoZSAlcCIsIHRpbGUsIHRpbGVVbnVzZWRDYWNoZSk7CiAg
ICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwogICAgIH0KIAogICAgIHRpbGVVbnVzZWRDYWNoZS0+
ZW50cmllcy5jb3VudC0tOwogICAgIHRpbGVVbnVzZWRDYWNoZS0+bWVtb3J5LnVzZWQgLT0gc2l6
ZW9mKEV3a19UaWxlKSArIHRpbGUtPmJ5dGVzOwotICAgIHRpbGVVbnVzZWRDYWNoZS0+ZW50cmll
cy5saXN0ID0gZWluYV9saXN0X3JlbW92ZV9saXN0KHRpbGVVbnVzZWRDYWNoZS0+ZW50cmllcy5s
aXN0LCBlKTsKKyAgICB0aWxlVW51c2VkQ2FjaGUtPmVudHJpZXMubGlzdCA9IGVpbmFfbGlzdF9y
ZW1vdmVfbGlzdCh0aWxlVW51c2VkQ2FjaGUtPmVudHJpZXMubGlzdCwgZm91bmRFbnRyeSk7CiAg
ICAgZnJlZShpdGVtKTsKIAogICAgIHJldHVybiBFSU5BX1RSVUU7CkBAIC03OTUsMjkgKzc5NSwy
OSBAQCBFaW5hX0Jvb2wgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3RpbGVfZ2V0KEV3a19UaWxlX1Vu
dXNlZF9DYWNoZSogdGlsZVVudXNlZENhY2hlLAogICoKICAqIEBzZWUgZXdrX3RpbGVfdW51c2Vk
X2NhY2hlX2F1dG9fZmx1c2goKQogICovCi1FaW5hX0Jvb2wgZXdrX3RpbGVfdW51c2VkX2NhY2hl
X3RpbGVfcHV0KEV3a19UaWxlX1VudXNlZF9DYWNoZSogdGlsZVVudXNlZENhY2hlLCBFd2tfVGls
ZSogdGlsZSwgdm9pZCAoKiB0aWxlX2ZyZWVfY2IpKHZvaWQqIGRhdGEsIEV3a19UaWxlKiB0aWxl
KSwgY29uc3Qgdm9pZCogZGF0YSkKK0VpbmFfQm9vbCBld2tfdGlsZV91bnVzZWRfY2FjaGVfdGls
ZV9wdXQoRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0aWxlVW51c2VkQ2FjaGUsIEV3a19UaWxlKiB0
aWxlLCB2b2lkICgqIHRpbGVGcmVlQ2IpKHZvaWQqIGRhdGEsIEV3a19UaWxlKiB0aWxlKSwgY29u
c3Qgdm9pZCogZGF0YSkKIHsKLSAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGVfRW50cnkqIHVjZTsK
KyAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGVfRW50cnkqIHVudXNlZENhY2hlRW50cnk7CiAKICAg
ICBpZiAodGlsZS0+dmlzaWJsZSkgewogICAgICAgICBFUlIoInRpbGU9JXAgaXMgbm90IHVudXNl
ZCAodmlzaWJsZT0lZCkiLCB0aWxlLCB0aWxlLT52aXNpYmxlKTsKICAgICAgICAgcmV0dXJuIEVJ
TkFfRkFMU0U7CiAgICAgfQogCi0gICAgdWNlID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGVfVW51c2Vk
X0NhY2hlX0VudHJ5Kj4obWFsbG9jKHNpemVvZihFd2tfVGlsZV9VbnVzZWRfQ2FjaGVfRW50cnkp
KSk7Ci0gICAgaWYgKCF1Y2UpCisgICAgdW51c2VkQ2FjaGVFbnRyeSA9IHN0YXRpY19jYXN0PEV3
a19UaWxlX1VudXNlZF9DYWNoZV9FbnRyeSo+KG1hbGxvYyhzaXplb2YoRXdrX1RpbGVfVW51c2Vk
X0NhY2hlX0VudHJ5KSkpOworICAgIGlmICghdW51c2VkQ2FjaGVFbnRyeSkKICAgICAgICAgcmV0
dXJuIEVJTkFfRkFMU0U7CiAKLSAgICB0aWxlVW51c2VkQ2FjaGUtPmVudHJpZXMubGlzdCA9IGVp
bmFfbGlzdF9hcHBlbmQodGlsZVVudXNlZENhY2hlLT5lbnRyaWVzLmxpc3QsIHVjZSk7CisgICAg
dGlsZVVudXNlZENhY2hlLT5lbnRyaWVzLmxpc3QgPSBlaW5hX2xpc3RfYXBwZW5kKHRpbGVVbnVz
ZWRDYWNoZS0+ZW50cmllcy5saXN0LCB1bnVzZWRDYWNoZUVudHJ5KTsKICAgICBpZiAoZWluYV9l
cnJvcl9nZXQoKSkgewogICAgICAgICBFUlIoIkxpc3QgYWxsb2NhdGlvbiBmYWlsZWQiKTsKICAg
ICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CiAgICAgfQogCi0gICAgdWNlLT50aWxlID0gdGlsZTsK
LSAgICB1Y2UtPndlaWdodCA9IDA7IC8qIGNhbGN1bGF0ZWQganVzdCBiZWZvcmUgc29ydCAqLwot
ICAgIHVjZS0+dGlsZV9mcmVlLmNiID0gdGlsZV9mcmVlX2NiOwotICAgIHVjZS0+dGlsZV9mcmVl
LmRhdGEgPSAodm9pZCopZGF0YTsKKyAgICB1bnVzZWRDYWNoZUVudHJ5LT50aWxlID0gdGlsZTsK
KyAgICB1bnVzZWRDYWNoZUVudHJ5LT53ZWlnaHQgPSAwOyAvKiBjYWxjdWxhdGVkIGp1c3QgYmVm
b3JlIHNvcnQgKi8KKyAgICB1bnVzZWRDYWNoZUVudHJ5LT50aWxlX2ZyZWUuY2FsbGJhY2sgPSB0
aWxlRnJlZUNiOworICAgIHVudXNlZENhY2hlRW50cnktPnRpbGVfZnJlZS5kYXRhID0gKHZvaWQq
KWRhdGE7CiAKICAgICB0aWxlVW51c2VkQ2FjaGUtPmVudHJpZXMuY291bnQrKzsKICAgICB0aWxl
VW51c2VkQ2FjaGUtPm1lbW9yeS51c2VkICs9IHNpemVvZihFd2tfVGlsZSkgKyB0aWxlLT5ieXRl
czsKQEAgLTgyOCwxMyArODI4LDEzIEBAIEVpbmFfQm9vbCBld2tfdGlsZV91bnVzZWRfY2FjaGVf
dGlsZV9wdXQoRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0aWxlVW51c2VkQ2FjaGUsCiB2b2lkIGV3
a190aWxlX3VudXNlZF9jYWNoZV9kYmcoY29uc3QgRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0aWxl
VW51c2VkQ2FjaGUpCiB7CiAgICAgdm9pZCogaXRlbTsKLSAgICBFaW5hX0xpc3QqIGw7CisgICAg
RWluYV9MaXN0KiBsaXN0OwogICAgIGludCBjb3VudCA9IDA7CiAgICAgcHJpbnRmKCJDYWNoZSBv
ZiB1bnVzZWQgdGlsZXM6IGVudHJpZXM6ICV6dS8lenUsIG1lbW9yeTogJXp1LyV6dVxuIiwKICAg
ICAgICAgICAgdGlsZVVudXNlZENhY2hlLT5lbnRyaWVzLmNvdW50LCB0aWxlVW51c2VkQ2FjaGUt
PmVudHJpZXMuYWxsb2NhdGVkLAogICAgICAgICAgICB0aWxlVW51c2VkQ2FjaGUtPm1lbW9yeS51
c2VkLCB0aWxlVW51c2VkQ2FjaGUtPm1lbW9yeS5tYXgpOwogCi0gICAgRUlOQV9MSVNUX0ZPUkVB
Q0godGlsZVVudXNlZENhY2hlLT5lbnRyaWVzLmxpc3QsIGwsIGl0ZW0pIHsKKyAgICBFSU5BX0xJ
U1RfRk9SRUFDSCh0aWxlVW51c2VkQ2FjaGUtPmVudHJpZXMubGlzdCwgbGlzdCwgaXRlbSkgewog
ICAgICAgICBjb25zdCBFd2tfVGlsZSogdGlsZSA9IHN0YXRpY19jYXN0PEV3a19UaWxlX1VudXNl
ZF9DYWNoZV9FbnRyeSo+KGl0ZW0pLT50aWxlOwogICAgICAgICBwcmludGYoIiBbJTNsdSwlM2x1
ICsgJWR4JWQgQCAlMC4zZl0lYyIsCiAgICAgICAgICAgICAgICB0aWxlLT5jb2wsIHRpbGUtPnJv
dywgdGlsZS0+d2lkdGgsIHRpbGUtPmhlaWdodCwgdGlsZS0+em9vbSwKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2sv
ZXdrX3ZpZXcuY3BwCmluZGV4IGQ1ZTZlYmQ0N2M5NGRjNDVlNDczZDI4MjZlYzRkNDJkMDZhOTAx
NTMuLjg0ZTQ5NTE0OGM4MzdkYTdhYjc2ZmU4MThiYjViMTk5ZTFjMzRhZjMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9l
ZmwvZXdrL2V3a192aWV3LmNwcApAQCAtOTAsMTcgKzkwLDE3IEBAIHN0YXRpYyBjb25zdCBzaXpl
X3QgRVdLX1ZJRVdfU0NST0xMU19TSVpFX01BWF9GUkVFID0gMzI7CiAgKi8KIHN0cnVjdCBfRXdr
X1ZpZXdfUHJpdmF0ZV9EYXRhIHsKICAgICBXZWJDb3JlOjpQYWdlKiBwYWdlOwotICAgIFdlYkNv
cmU6OlNldHRpbmdzKiBwYWdlX3NldHRpbmdzOwotICAgIFdlYkNvcmU6OkZyYW1lKiBtYWluX2Zy
YW1lOwotICAgIFdlYkNvcmU6OlZpZXdwb3J0QXJndW1lbnRzIHZpZXdwb3J0X2FyZ3VtZW50czsK
KyAgICBXZWJDb3JlOjpTZXR0aW5ncyogcGFnZVNldHRpbmdzOworICAgIFdlYkNvcmU6OkZyYW1l
KiBtYWluRnJhbWU7CisgICAgV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHMgdmlld3BvcnRBcmd1
bWVudHM7CiAgICAgRXdrX0hpc3RvcnkqIGhpc3Rvcnk7CiAgICAgc3RydWN0IHsKICAgICAgICAg
dm9pZCogY29udGV4dDsKICAgICAgICAgRXdrX1ZpZXdfUmVzb3VyY2VfSGFuZGxlcl9DYiBmdW5j
dGlvbjsKLSAgICB9IGN1c3RvbV9yZXNvdXJjZV9oYW5kbGVyOworICAgIH0gY3VzdG9tUmVzb3Vy
Y2VIYW5kbGVyOwogICAgIHN0cnVjdCB7CiAgICAgICAgIEV3a19NZW51IG1lbnU7Ci0gICAgICAg
IFdlYkNvcmU6OlBvcHVwTWVudUNsaWVudCogbWVudV9jbGllbnQ7CisgICAgICAgIFdlYkNvcmU6
OlBvcHVwTWVudUNsaWVudCogbWVudUNsaWVudDsKICAgICB9IHBvcHVwOwogICAgIHN0cnVjdCB7
CiAgICAgICAgIEVpbmFfUmVjdGFuZ2xlKiBhcnJheTsKQEAgLTExNCw1MCArMTE0LDUwIEBAIHN0
cnVjdCBfRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhIHsKICAgICB9IHNjcm9sbHM7CiAgICAgdW5zaWdu
ZWQgaW50IGltaDsgLyoqPCBpbnB1dCBtZXRob2QgaGludHMgKi8KICAgICBzdHJ1Y3QgewotICAg
ICAgICBFaW5hX0Jvb2wgdmlld19jbGVhcmVkIDogMTsKLSAgICAgICAgRWluYV9Cb29sIG5lZWRf
dG91Y2hfZXZlbnRzIDogMTsKKyAgICAgICAgRWluYV9Cb29sIHZpZXdDbGVhcmVkIDogMTsKKyAg
ICAgICAgRWluYV9Cb29sIG5lZWRUb3VjaEV2ZW50cyA6IDE7CiAgICAgfSBmbGFnczsKICAgICBz
dHJ1Y3QgewotICAgICAgICBjb25zdCBjaGFyKiB1c2VyX2FnZW50OwotICAgICAgICBjb25zdCBj
aGFyKiB1c2VyX3N0eWxlc2hlZXQ7Ci0gICAgICAgIGNvbnN0IGNoYXIqIGVuY29kaW5nX2RlZmF1
bHQ7Ci0gICAgICAgIGNvbnN0IGNoYXIqIGVuY29kaW5nX2N1c3RvbTsKKyAgICAgICAgY29uc3Qg
Y2hhciogdXNlckFnZW50OworICAgICAgICBjb25zdCBjaGFyKiB1c2VyU3R5bGVzaGVldDsKKyAg
ICAgICAgY29uc3QgY2hhciogZW5jb2RpbmdEZWZhdWx0OworICAgICAgICBjb25zdCBjaGFyKiBl
bmNvZGluZ0N1c3RvbTsKICAgICAgICAgY29uc3QgY2hhciogdGhlbWU7Ci0gICAgICAgIGNvbnN0
IGNoYXIqIGxvY2FsX3N0b3JhZ2VfZGF0YWJhc2VfcGF0aDsKLSAgICAgICAgaW50IGZvbnRfbWlu
aW11bV9zaXplOwotICAgICAgICBpbnQgZm9udF9taW5pbXVtX2xvZ2ljYWxfc2l6ZTsKLSAgICAg
ICAgaW50IGZvbnRfZGVmYXVsdF9zaXplOwotICAgICAgICBpbnQgZm9udF9tb25vc3BhY2Vfc2l6
ZTsKLSAgICAgICAgY29uc3QgY2hhciogZm9udF9zdGFuZGFyZDsKLSAgICAgICAgY29uc3QgY2hh
ciogZm9udF9jdXJzaXZlOwotICAgICAgICBjb25zdCBjaGFyKiBmb250X21vbm9zcGFjZTsKLSAg
ICAgICAgY29uc3QgY2hhciogZm9udF9mYW50YXN5OwotICAgICAgICBjb25zdCBjaGFyKiBmb250
X3NlcmlmOwotICAgICAgICBjb25zdCBjaGFyKiBmb250X3NhbnNfc2VyaWY7Ci0gICAgICAgIEVp
bmFfQm9vbCBhdXRvX2xvYWRfaW1hZ2VzIDogMTsKLSAgICAgICAgRWluYV9Cb29sIGF1dG9fc2hy
aW5rX2ltYWdlcyA6IDE7Ci0gICAgICAgIEVpbmFfQm9vbCBlbmFibGVfYXV0b19yZXNpemVfd2lu
ZG93IDogMTsKLSAgICAgICAgRWluYV9Cb29sIGVuYWJsZV9kZXZlbG9wZXJfZXh0cmFzIDogMTsK
LSAgICAgICAgRWluYV9Cb29sIGVuYWJsZV9zY3JpcHRzIDogMTsKLSAgICAgICAgRWluYV9Cb29s
IGVuYWJsZV9wbHVnaW5zIDogMTsKLSAgICAgICAgRWluYV9Cb29sIGVuYWJsZV9mcmFtZV9mbGF0
dGVuaW5nIDogMTsKLSAgICAgICAgRWluYV9Cb29sIGVuY29kaW5nX2RldGVjdG9yIDogMTsKLSAg
ICAgICAgRWluYV9Cb29sIHNjcmlwdHNfd2luZG93X29wZW4gOiAxOwotICAgICAgICBFaW5hX0Jv
b2wgc2NyaXB0c19jYW5fY2xvc2Vfd2luZG93cyA6IDE7Ci0gICAgICAgIEVpbmFfQm9vbCByZXNp
emFibGVfdGV4dGFyZWFzIDogMTsKLSAgICAgICAgRWluYV9Cb29sIHByaXZhdGVfYnJvd3Npbmcg
OiAxOwotICAgICAgICBFaW5hX0Jvb2wgY2FyZXRfYnJvd3NpbmcgOiAxOwotICAgICAgICBFaW5h
X0Jvb2wgc3BhdGlhbF9uYXZpZ2F0aW9uIDogMTsKLSAgICAgICAgRWluYV9Cb29sIGxvY2FsX3N0
b3JhZ2UgOiAxOwotICAgICAgICBFaW5hX0Jvb2wgb2ZmbGluZV9hcHBfY2FjaGUgOiAxOwotICAg
ICAgICBFaW5hX0Jvb2wgcGFnZV9jYWNoZSA6IDE7CisgICAgICAgIGNvbnN0IGNoYXIqIGxvY2Fs
U3RvcmFnZURhdGFiYXNlUGF0aDsKKyAgICAgICAgaW50IGZvbnRNaW5pbXVtU2l6ZTsKKyAgICAg
ICAgaW50IGZvbnRNaW5pbXVtTG9naWNhbFNpemU7CisgICAgICAgIGludCBmb250RGVmYXVsdFNp
emU7CisgICAgICAgIGludCBmb250TW9ub3NwYWNlU2l6ZTsKKyAgICAgICAgY29uc3QgY2hhciog
Zm9udFN0YW5kYXJkOworICAgICAgICBjb25zdCBjaGFyKiBmb250Q3Vyc2l2ZTsKKyAgICAgICAg
Y29uc3QgY2hhciogZm9udE1vbm9zcGFjZTsKKyAgICAgICAgY29uc3QgY2hhciogZm9udEZhbnRh
c3k7CisgICAgICAgIGNvbnN0IGNoYXIqIGZvbnRTZXJpZjsKKyAgICAgICAgY29uc3QgY2hhciog
Zm9udFNhbnNTZXJpZjsKKyAgICAgICAgRWluYV9Cb29sIGF1dG9Mb2FkSW1hZ2VzIDogMTsKKyAg
ICAgICAgRWluYV9Cb29sIGF1dG9TaHJpbmtJbWFnZXMgOiAxOworICAgICAgICBFaW5hX0Jvb2wg
ZW5hYmxlQXV0b1Jlc2l6ZVdpbmRvdyA6IDE7CisgICAgICAgIEVpbmFfQm9vbCBlbmFibGVEZXZl
bG9wZXJFeHRyYXMgOiAxOworICAgICAgICBFaW5hX0Jvb2wgZW5hYmxlU2NyaXB0cyA6IDE7Cisg
ICAgICAgIEVpbmFfQm9vbCBlbmFibGVQbHVnaW5zIDogMTsKKyAgICAgICAgRWluYV9Cb29sIGVu
YWJsZUZyYW1lRmxhdHRlbmluZyA6IDE7CisgICAgICAgIEVpbmFfQm9vbCBlbmNvZGluZ0RldGVj
dG9yIDogMTsKKyAgICAgICAgRWluYV9Cb29sIHNjcmlwdHNXaW5kb3dPcGVuIDogMTsKKyAgICAg
ICAgRWluYV9Cb29sIHNjcmlwdHNDYW5DbG9zZVdpbmRvd3MgOiAxOworICAgICAgICBFaW5hX0Jv
b2wgcmVzaXphYmxlVGV4dGFyZWFzIDogMTsKKyAgICAgICAgRWluYV9Cb29sIHByaXZhdGVCcm93
c2luZyA6IDE7CisgICAgICAgIEVpbmFfQm9vbCBjYXJldEJyb3dzaW5nIDogMTsKKyAgICAgICAg
RWluYV9Cb29sIHNwYXRpYWxOYXZpZ2F0aW9uIDogMTsKKyAgICAgICAgRWluYV9Cb29sIGxvY2Fs
U3RvcmFnZSA6IDE7CisgICAgICAgIEVpbmFfQm9vbCBvZmZsaW5lQXBwQ2FjaGUgOiAxOworICAg
ICAgICBFaW5hX0Jvb2wgcGFnZUNhY2hlIDogMTsKICAgICAgICAgc3RydWN0IHsKLSAgICAgICAg
ICAgIGZsb2F0IG1pbl9zY2FsZTsKLSAgICAgICAgICAgIGZsb2F0IG1heF9zY2FsZTsKLSAgICAg
ICAgICAgIEVpbmFfQm9vbCB1c2VyX3NjYWxhYmxlIDogMTsKLSAgICAgICAgfSB6b29tX3Jhbmdl
OwotICAgICAgICBmbG9hdCBkZXZpY2VfcGl4ZWxfcmF0aW87Ci0gICAgICAgIGRvdWJsZSBkb21f
dGltZXJfaW50ZXJ2YWw7CisgICAgICAgICAgICBmbG9hdCBtaW5TY2FsZTsKKyAgICAgICAgICAg
IGZsb2F0IG1heFNjYWxlOworICAgICAgICAgICAgRWluYV9Cb29sIHVzZXJTY2FsYWJsZSA6IDE7
CisgICAgICAgIH0gem9vbVJhbmdlOworICAgICAgICBmbG9hdCBkZXZpY2VQaXhlbFJhdGlvOwor
ICAgICAgICBkb3VibGUgZG9tVGltZXJJbnRlcnZhbDsKICAgICB9IHNldHRpbmdzOwogICAgIHN0
cnVjdCB7CiAgICAgICAgIHN0cnVjdCB7CkBAIC0xNzQsNyArMTc0LDcgQEAgc3RydWN0IF9Fd2tf
Vmlld19Qcml2YXRlX0RhdGEgewogICAgICAgICAgICAgRXZhc19Db29yZCB4LCB5OwogICAgICAg
ICB9IGNlbnRlcjsKICAgICAgICAgRWNvcmVfQW5pbWF0b3IqIGFuaW1hdG9yOwotICAgIH0gYW5p
bWF0ZWRfem9vbTsKKyAgICB9IGFuaW1hdGVkWm9vbTsKIH07CiAKICNpZm5kZWYgRVdLX1RZUEVf
Q0hFQ0sKQEAgLTIxOSwxNCArMjE5LDE0IEBAIHN0cnVjdCBfRXdrX1ZpZXdfUHJpdmF0ZV9EYXRh
IHsKICAgICAgICAgcmV0dXJuIF9fVkFfQVJHU19fOyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAogICAgIH0KIAotI2RlZmluZSBFV0tfVklFV19QUklWX0dFVChzZCwgcHRyKSAgICAgICAg
ICAgICAgXAotICAgIEV3a19WaWV3X1ByaXZhdGVfRGF0YSAqcHRyID0gc2QtPl9wcml2CisjZGVm
aW5lIEVXS19WSUVXX1BSSVZfR0VUKHNtYXJ0RGF0YSwgcHRyKSAgICAgICAgICAgICAgXAorICAg
IEV3a19WaWV3X1ByaXZhdGVfRGF0YSAqcHRyID0gc21hcnREYXRhLT5fcHJpdgogCi0jZGVmaW5l
IEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHRyLCAuLi4pICAgICAgICAgICAgICAg
XAotICAgIEVXS19WSUVXX1BSSVZfR0VUKHNkLCBwdHIpOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyNkZWZpbmUgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0
YSwgcHRyLCAuLi4pICAgICAgICAgICAgICAgXAorICAgIEVXS19WSUVXX1BSSVZfR0VUKHNtYXJ0
RGF0YSwgcHRyKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgaWYgKCFw
dHIpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAog
ICAgICAgICBDUklUSUNBTCgibm8gcHJpdmF0ZSBkYXRhIGZvciBvYmplY3QgJXAgKCVzKSIsICAg
ICAgICAgIFwKLSAgICAgICAgICAgICAgICAgc2QtPnNlbGYsIGV2YXNfb2JqZWN0X3R5cGVfZ2V0
KHNkLT5zZWxmKSk7ICAgICBcCisgICAgICAgICAgICAgICAgIHNtYXJ0RGF0YS0+c2VsZiwgZXZh
c19vYmplY3RfdHlwZV9nZXQoc21hcnREYXRhLT5zZWxmKSk7ICAgICBcCiAgICAgICAgIHJldHVy
biBfX1ZBX0FSR1NfXzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAg
IH0KIApAQCAtMjUyLDcgKzI1Miw3IEBAIHN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3JlcGFp
bnRzX3Jlc2l6ZShFd2tfVmlld19Qcml2YXRlX0RhdGEqIHByaXYsIHNpemVfdCBzCiAKIHN0YXRp
YyB2b2lkIF9ld2tfdmlld19yZXBhaW50X2FkZChFd2tfVmlld19Qcml2YXRlX0RhdGEqIHByaXYs
IEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5LCBFdmFzX0Nvb3JkIHdpZHRoLCBFdmFzX0Nvb3Jk
IGhlaWdodCkKIHsKLSAgICBFaW5hX1JlY3RhbmdsZSogcjsKKyAgICBFaW5hX1JlY3RhbmdsZSog
cmVjdDsKIAogICAgIC8vIGZwcmludGYoc3RkZXJyLCAiPj4+IHJlcGFpbnQgcmVxdWVzdGVkOiAl
ZCwlZCslZHglZFxuIiwgeCwgeSwgdywgaCk7CiAgICAgaWYgKHByaXYtPnJlcGFpbnRzLmFsbG9j
YXRlZCA9PSBwcml2LT5yZXBhaW50cy5jb3VudCkgewpAQCAtMjY1LDEzICsyNjUsMTMgQEAgc3Rh
dGljIHZvaWQgX2V3a192aWV3X3JlcGFpbnRfYWRkKEV3a19WaWV3X1ByaXZhdGVfRGF0YSogcHJp
diwgRXZhc19Db29yZCB4LCBFdmEKICAgICAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBy
ID0gcHJpdi0+cmVwYWludHMuYXJyYXkgKyBwcml2LT5yZXBhaW50cy5jb3VudDsKKyAgICByZWN0
ID0gcHJpdi0+cmVwYWludHMuYXJyYXkgKyBwcml2LT5yZXBhaW50cy5jb3VudDsKICAgICBwcml2
LT5yZXBhaW50cy5jb3VudCsrOwogCi0gICAgci0+eCA9IHg7Ci0gICAgci0+eSA9IHk7Ci0gICAg
ci0+dyA9IHdpZHRoOwotICAgIHItPmggPSBoZWlnaHQ7CisgICAgcmVjdC0+eCA9IHg7CisgICAg
cmVjdC0+eSA9IHk7CisgICAgcmVjdC0+dyA9IHdpZHRoOworICAgIHJlY3QtPmggPSBoZWlnaHQ7
CiAKICAgICBEQkcoImFkZCByZXBhaW50ICVkLCAlZCslZHglZCIsIHgsIHksIHdpZHRoLCBoZWln
aHQpOwogfQpAQCAtMjk2LDI5ICsyOTYsMjkgQEAgc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdf
c2Nyb2xsc19yZXNpemUoRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKiBwcml2LCBzaXplX3Qgc2kKICAg
ICByZXR1cm4gRUlOQV9UUlVFOwogfQogCi1zdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc2Nyb2xsX2Fk
ZChFd2tfVmlld19Qcml2YXRlX0RhdGEqIHByaXYsIEV2YXNfQ29vcmQgZHgsIEV2YXNfQ29vcmQg
ZHksIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5LCBFdmFzX0Nvb3JkIHdpZHRoLCBFdmFzX0Nv
b3JkIGhlaWdodCwgRWluYV9Cb29sIG1haW5TY3JvbGwpCitzdGF0aWMgdm9pZCBfZXdrX3ZpZXdf
c2Nyb2xsX2FkZChFd2tfVmlld19Qcml2YXRlX0RhdGEqIHByaXYsIEV2YXNfQ29vcmQgZGVsdGFY
LCBFdmFzX0Nvb3JkIGRlbHRhWSwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHksIEV2YXNfQ29v
cmQgd2lkdGgsIEV2YXNfQ29vcmQgaGVpZ2h0LCBFaW5hX0Jvb2wgbWFpblNjcm9sbCkKIHsKLSAg
ICBFd2tfU2Nyb2xsX1JlcXVlc3QqIHI7Ci0gICAgRXdrX1Njcm9sbF9SZXF1ZXN0KiByX2VuZDsK
KyAgICBFd2tfU2Nyb2xsX1JlcXVlc3QqIHJlY3Q7CisgICAgRXdrX1Njcm9sbF9SZXF1ZXN0KiBy
ZWN0X2VuZDsKICAgICBFdmFzX0Nvb3JkIHgyID0geCArIHdpZHRoLCB5MiA9IHkgKyBoZWlnaHQ7
CiAKLSAgICByID0gcHJpdi0+c2Nyb2xscy5hcnJheTsKLSAgICByX2VuZCA9IHIgKyBwcml2LT5z
Y3JvbGxzLmNvdW50OwotICAgIGZvciAoOyByIDwgcl9lbmQ7IHIrKykgewotICAgICAgICBpZiAo
ci0+eCA9PSB4ICYmIHItPnkgPT0geSAmJiByLT53ID09IHdpZHRoICYmIHItPmggPT0gaGVpZ2h0
KSB7CisgICAgcmVjdCA9IHByaXYtPnNjcm9sbHMuYXJyYXk7CisgICAgcmVjdF9lbmQgPSByZWN0
ICsgcHJpdi0+c2Nyb2xscy5jb3VudDsKKyAgICBmb3IgKDsgcmVjdCA8IHJlY3RfZW5kOyByZWN0
KyspIHsKKyAgICAgICAgaWYgKHJlY3QtPnggPT0geCAmJiByZWN0LT55ID09IHkgJiYgcmVjdC0+
dyA9PSB3aWR0aCAmJiByZWN0LT5oID09IGhlaWdodCkgewogICAgICAgICAgICAgREJHKCJyZWdp
b24gYWxyZWFkeSBzY3JvbGxlZCAlZCwlZCslZHglZCAlKzAzZCwlKzAzZCBhZGQgIgogICAgICAg
ICAgICAgICAgICIlKzAzZCwlKzAzZCIsCi0gICAgICAgICAgICAgICAgci0+eCwgci0+eSwgci0+
dywgci0+aCwgci0+ZHgsIHItPmR5LCBkeCwgZHkpOwotICAgICAgICAgICAgci0+ZHggKz0gZHg7
Ci0gICAgICAgICAgICByLT5keSArPSBkeTsKKyAgICAgICAgICAgICAgICByZWN0LT54LCByZWN0
LT55LCByZWN0LT53LCByZWN0LT5oLCByZWN0LT5keCwgcmVjdC0+ZHksIGRlbHRhWCwgZGVsdGFZ
KTsKKyAgICAgICAgICAgIHJlY3QtPmR4ICs9IGRlbHRhWDsKKyAgICAgICAgICAgIHJlY3QtPmR5
ICs9IGRlbHRhWTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBpZiAo
KHggPD0gci0+eCAmJiB4MiA+PSByLT54MikgJiYgKHkgPD0gci0+eSAmJiB5MiA+PSByLT55Mikp
IHsKKyAgICAgICAgaWYgKCh4IDw9IHJlY3QtPnggJiYgeDIgPj0gcmVjdC0+eDIpICYmICh5IDw9
IHJlY3QtPnkgJiYgeTIgPj0gcmVjdC0+eTIpKSB7CiAgICAgICAgICAgICBEQkcoIm9sZCB2aWV3
cG9ydCAoJWQsJWQrJWR4JWQgJSswM2QsJSswM2QpIHdhcyBzY3JvbGxlZCBpdHNlbGYsICIKICAg
ICAgICAgICAgICAgICAiYWRkICUrMDNkLCUrMDNkIiwKLSAgICAgICAgICAgICAgICByLT54LCBy
LT55LCByLT53LCByLT5oLCByLT5keCwgci0+ZHksIGR4LCBkeSk7Ci0gICAgICAgICAgICByLT54
ICs9IGR4OwotICAgICAgICAgICAgci0+eSArPSBkeTsKKyAgICAgICAgICAgICAgICByZWN0LT54
LCByZWN0LT55LCByZWN0LT53LCByZWN0LT5oLCByZWN0LT5keCwgcmVjdC0+ZHksIGRlbHRhWCwg
ZGVsdGFZKTsKKyAgICAgICAgICAgIHJlY3QtPnggKz0gZGVsdGFYOworICAgICAgICAgICAgcmVj
dC0+eSArPSBkZWx0YVk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTMzMiwxOSArMzMyLDE5IEBA
IHN0YXRpYyB2b2lkIF9ld2tfdmlld19zY3JvbGxfYWRkKEV3a19WaWV3X1ByaXZhdGVfRGF0YSog
cHJpdiwgRXZhc19Db29yZCBkeCwgRXZhCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgciA9IHByaXYtPnNjcm9sbHMuYXJyYXkgKyBwcml2LT5zY3JvbGxzLmNvdW50OworICAgIHJl
Y3QgPSBwcml2LT5zY3JvbGxzLmFycmF5ICsgcHJpdi0+c2Nyb2xscy5jb3VudDsKICAgICBwcml2
LT5zY3JvbGxzLmNvdW50Kys7CiAKLSAgICByLT54ID0geDsKLSAgICByLT55ID0geTsKLSAgICBy
LT53ID0gd2lkdGg7Ci0gICAgci0+aCA9IGhlaWdodDsKLSAgICByLT54MiA9IHgyOwotICAgIHIt
PnkyID0geTI7Ci0gICAgci0+ZHggPSBkeDsKLSAgICByLT5keSA9IGR5OwotICAgIHItPm1haW5f
c2Nyb2xsID0gbWFpblNjcm9sbDsKLSAgICBEQkcoImFkZCBzY3JvbGwgaW4gcmVnaW9uOiAlZCwg
JWQrJWR4JWQgJSswM2QsICUrMDNkIiwgeCwgeSwgd2lkdGgsIGhlaWdodCwgZHgsIGR5KTsKKyAg
ICByZWN0LT54ID0geDsKKyAgICByZWN0LT55ID0geTsKKyAgICByZWN0LT53ID0gd2lkdGg7Cisg
ICAgcmVjdC0+aCA9IGhlaWdodDsKKyAgICByZWN0LT54MiA9IHgyOworICAgIHJlY3QtPnkyID0g
eTI7CisgICAgcmVjdC0+ZHggPSBkZWx0YVg7CisgICAgcmVjdC0+ZHkgPSBkZWx0YVk7CisgICAg
cmVjdC0+bWFpbl9zY3JvbGwgPSBtYWluU2Nyb2xsOworICAgIERCRygiYWRkIHNjcm9sbCBpbiBy
ZWdpb246ICVkLCAlZCslZHglZCAlKzAzZCwgJSswM2QiLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBk
ZWx0YVgsIGRlbHRhWSk7CiAKICAgICBFaW5hX1JlY3RhbmdsZSogcHI7CiAgICAgRWluYV9SZWN0
YW5nbGUqIHByX2VuZDsKQEAgLTM1Myw4ICszNTMsOCBAQCBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdf
c2Nyb2xsX2FkZChFd2tfVmlld19Qcml2YXRlX0RhdGEqIHByaXYsIEV2YXNfQ29vcmQgZHgsIEV2
YQogICAgIGNvdW50ID0gcHJpdi0+cmVwYWludHMuY291bnQ7CiAgICAgcHJfZW5kID0gcHIgKyBj
b3VudDsKICAgICBmb3IgKDsgcHIgPCBwcl9lbmQ7IHByKyspIHsKLSAgICAgICAgcHItPnggKz0g
ZHg7Ci0gICAgICAgIHByLT55ICs9IGR5OworICAgICAgICBwci0+eCArPSBkZWx0YVg7CisgICAg
ICAgIHByLT55ICs9IGRlbHRhWTsKICAgICB9CiB9CiAKQEAgLTM4MiwxMiArMzgyLDEyIEBAIHN0
YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3NtYXJ0X2ZvY3VzX2luKEV3a19WaWV3X1NtYXJ0X0Rh
dGEqIHNtYXJ0RGF0YSkKIHN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3NtYXJ0X2ZvY3VzX291
dChFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEpCiB7CiAgICAgRVdLX1ZJRVdfUFJJVl9H
RVQoc21hcnREYXRhLCBwcml2KTsKLSAgICBXZWJDb3JlOjpGb2N1c0NvbnRyb2xsZXIqIGZjID0g
cHJpdi0+cGFnZS0+Zm9jdXNDb250cm9sbGVyKCk7Ci0gICAgREJHKCJld2tWaWV3PSVwLCBmYz0l
cCIsIHNtYXJ0RGF0YS0+c2VsZiwgZmMpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJO
X1ZBTChmYywgRUlOQV9GQUxTRSk7CisgICAgV2ViQ29yZTo6Rm9jdXNDb250cm9sbGVyKiBmb2N1
c0NvbnRyb2xsZXIgPSBwcml2LT5wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKTsKKyAgICBEQkcoImV3
a1ZpZXc9JXAsIGZjPSVwIiwgc21hcnREYXRhLT5zZWxmLCBmb2N1c0NvbnRyb2xsZXIpOworICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChmb2N1c0NvbnRyb2xsZXIsIEVJTkFfRkFM
U0UpOwogCi0gICAgZmMtPnNldEFjdGl2ZShmYWxzZSk7Ci0gICAgZmMtPnNldEZvY3VzZWQoZmFs
c2UpOworICAgIGZvY3VzQ29udHJvbGxlci0+c2V0QWN0aXZlKGZhbHNlKTsKKyAgICBmb2N1c0Nv
bnRyb2xsZXItPnNldEZvY3VzZWQoZmFsc2UpOwogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAK
QEAgLTQ1OCw5NyArNDU4LDk3IEBAIHN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3NtYXJ0X3No
b3VsZF9pbnRlcnJ1cHRfamF2YXNjcmlwdChFd2tfVmlld19TbWFydF9EYXRhCiBzdGF0aWMgRWlu
YV9Cb29sIF9ld2tfdmlld19zbWFydF9ydW5famF2YXNjcmlwdF9wcm9tcHQoRXdrX1ZpZXdfU21h
cnRfRGF0YSogc21hcnREYXRhLCBFdmFzX09iamVjdCogZnJhbWUsIGNvbnN0IGNoYXIqIG1lc3Nh
Z2UsIGNvbnN0IGNoYXIqIGRlZmF1bHRWYWx1ZSwgY2hhcioqIHZhbHVlKQogewogICAgICp2YWx1
ZSA9IHN0cmR1cCgidGVzdCIpOwotICAgIEVpbmFfQm9vbCByZXQgPSBFSU5BX1RSVUU7CisgICAg
RWluYV9Cb29sIHJlc3VsdCA9IEVJTkFfVFJVRTsKICAgICBJTkYoImphdmFzY3JpcHQgcHJvbXB0
OlxuIgogICAgICAgICAiXHQgICAgICBtZXNzYWdlOiAlc1xuIgogICAgICAgICAiXHRkZWZhdWx0
IHZhbHVlOiAlc1xuIgogICAgICAgICAiXHRnaXZpbmcgYW5zd2VyOiAlc1xuIgotICAgICAgICAi
XHQgICAgICAgYnV0dG9uOiAlcyIsIG1lc3NhZ2UsIGRlZmF1bHRWYWx1ZSwgKnZhbHVlLCByZXQg
PyAib2siIDogImNhbmNlbCIpOworICAgICAgICAiXHQgICAgICAgYnV0dG9uOiAlcyIsIG1lc3Nh
Z2UsIGRlZmF1bHRWYWx1ZSwgKnZhbHVlLCByZXN1bHQgPyAib2siIDogImNhbmNlbCIpOwogCi0g
ICAgcmV0dXJuIHJldDsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiAvLyBFdmVudCBIYW5kbGlu
ZyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8K
IHN0YXRpYyB2b2lkIF9ld2tfdmlld19vbl9mb2N1c19pbih2b2lkKiBkYXRhLCBFdmFzKiBldmVu
dFR5cGUsIEV2YXNfT2JqZWN0KiBjYWxsYmFjaywgdm9pZCogZXZlbnRJbmZvKQogewotICAgIEV3
a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+
KGRhdGEpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGkpOwotICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGktPmZvY3VzX2luKTsKLSAgICBzZC0+YXBp
LT5mb2N1c19pbihzZCk7CisgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhID0gc3Rh
dGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEpOworICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+YXBpKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTihzbWFydERhdGEtPmFwaS0+Zm9jdXNfaW4pOworICAgIHNtYXJ0RGF0YS0+YXBpLT5mb2N1
c19pbihzbWFydERhdGEpOwogfQogCiBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfb25fZm9jdXNfb3V0
KHZvaWQqIGRhdGEsIEV2YXMqIGV2ZW50VHlwZSwgRXZhc19PYmplY3QqIGNhbGxiYWNrLCB2b2lk
KiBldmVudEluZm8pCiB7Ci0gICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QgPSBzdGF0aWNfY2Fz
dDxFd2tfVmlld19TbWFydF9EYXRhKj4oZGF0YSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk4oc2QtPmFwaSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFwaS0+
Zm9jdXNfb3V0KTsKLSAgICBzZC0+YXBpLT5mb2N1c19vdXQoc2QpOworICAgIEV3a19WaWV3X1Nt
YXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihk
YXRhKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmFwaSk7Cisg
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRhLT5hcGktPmZvY3VzX291dCk7
CisgICAgc21hcnREYXRhLT5hcGktPmZvY3VzX291dChzbWFydERhdGEpOwogfQogCiBzdGF0aWMg
dm9pZCBfZXdrX3ZpZXdfb25fbW91c2Vfd2hlZWwodm9pZCogZGF0YSwgRXZhcyogZXZlbnRUeXBl
LCBFdmFzX09iamVjdCogY2FsbGJhY2ssIHZvaWQqIGV2ZW50SW5mbykKIHsKLSAgICBFdmFzX0V2
ZW50X01vdXNlX1doZWVsKiBldiA9IHN0YXRpY19jYXN0PEV2YXNfRXZlbnRfTW91c2VfV2hlZWwq
PihldmVudEluZm8pOwotICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0gc3RhdGljX2Nhc3Q8
RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOKHNkLT5hcGkpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGktPm1v
dXNlX3doZWVsKTsKLSAgICBzZC0+YXBpLT5tb3VzZV93aGVlbChzZCwgZXYpOworICAgIEV2YXNf
RXZlbnRfTW91c2VfV2hlZWwqIHdoZWVsRXZlbnQgPSBzdGF0aWNfY2FzdDxFdmFzX0V2ZW50X01v
dXNlX1doZWVsKj4oZXZlbnRJbmZvKTsKKyAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERh
dGEgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZGF0YSk7CisgICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRhLT5hcGkpOworICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+YXBpLT5tb3VzZV93aGVlbCk7CisgICAgc21hcnREYXRh
LT5hcGktPm1vdXNlX3doZWVsKHNtYXJ0RGF0YSwgd2hlZWxFdmVudCk7CiB9CiAKIHN0YXRpYyB2
b2lkIF9ld2tfdmlld19vbl9tb3VzZV9kb3duKHZvaWQqIGRhdGEsIEV2YXMqIGV2ZW50VHlwZSwg
RXZhc19PYmplY3QqIGNhbGxiYWNrLCB2b2lkKiBldmVudEluZm8pCiB7Ci0gICAgRXZhc19FdmVu
dF9Nb3VzZV9Eb3duKiBldiA9IHN0YXRpY19jYXN0PEV2YXNfRXZlbnRfTW91c2VfRG93bio+KGV2
ZW50SW5mbyk7Ci0gICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QgPSBzdGF0aWNfY2FzdDxFd2tf
Vmlld19TbWFydF9EYXRhKj4oZGF0YSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4o
c2QtPmFwaSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFwaS0+bW91c2Vf
ZG93bik7Ci0gICAgc2QtPmFwaS0+bW91c2VfZG93bihzZCwgZXYpOworICAgIEV2YXNfRXZlbnRf
TW91c2VfRG93biogZG93bkV2ZW50ID0gc3RhdGljX2Nhc3Q8RXZhc19FdmVudF9Nb3VzZV9Eb3du
Kj4oZXZlbnRJbmZvKTsKKyAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEgPSBzdGF0
aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZGF0YSk7CisgICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk4oc21hcnREYXRhLT5hcGkpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOKHNtYXJ0RGF0YS0+YXBpLT5tb3VzZV9kb3duKTsKKyAgICBzbWFydERhdGEtPmFwaS0+bW91
c2VfZG93bihzbWFydERhdGEsIGRvd25FdmVudCk7CiB9CiAKIHN0YXRpYyB2b2lkIF9ld2tfdmll
d19vbl9tb3VzZV91cCh2b2lkKiBkYXRhLCBFdmFzKiBldmVudFR5cGUsIEV2YXNfT2JqZWN0KiBj
YWxsYmFjaywgdm9pZCogZXZlbnRJbmZvKQogewotICAgIEV2YXNfRXZlbnRfTW91c2VfVXAqIGV2
ID0gc3RhdGljX2Nhc3Q8RXZhc19FdmVudF9Nb3VzZV9VcCo+KGV2ZW50SW5mbyk7Ci0gICAgRXdr
X1ZpZXdfU21hcnRfRGF0YSogc2QgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4o
ZGF0YSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFwaSk7Ci0gICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFwaS0+bW91c2VfdXApOwotICAgIHNkLT5hcGkt
Pm1vdXNlX3VwKHNkLCBldik7CisgICAgRXZhc19FdmVudF9Nb3VzZV9VcCogdXBFdmVudCA9IHN0
YXRpY19jYXN0PEV2YXNfRXZlbnRfTW91c2VfVXAqPihldmVudEluZm8pOworICAgIEV3a19WaWV3
X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEq
PihkYXRhKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmFwaSk7
CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRhLT5hcGktPm1vdXNlX3Vw
KTsKKyAgICBzbWFydERhdGEtPmFwaS0+bW91c2VfdXAoc21hcnREYXRhLCB1cEV2ZW50KTsKIH0K
IAogc3RhdGljIHZvaWQgX2V3a192aWV3X29uX21vdXNlX21vdmUodm9pZCogZGF0YSwgRXZhcyog
ZXZlbnRUeXBlLCBFdmFzX09iamVjdCogY2FsbGJhY2ssIHZvaWQqIGV2ZW50SW5mbykKIHsKLSAg
ICBFdmFzX0V2ZW50X01vdXNlX01vdmUqIGV2ID0gc3RhdGljX2Nhc3Q8RXZhc19FdmVudF9Nb3Vz
ZV9Nb3ZlKj4oZXZlbnRJbmZvKTsKLSAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzZCA9IHN0YXRp
Y19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihkYXRhKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTihzZC0+YXBpKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+
YXBpLT5tb3VzZV9tb3ZlKTsKLSAgICBzZC0+YXBpLT5tb3VzZV9tb3ZlKHNkLCBldik7CisgICAg
RXZhc19FdmVudF9Nb3VzZV9Nb3ZlKiBtb3ZlRXZlbnQgPSBzdGF0aWNfY2FzdDxFdmFzX0V2ZW50
X01vdXNlX01vdmUqPihldmVudEluZm8pOworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0
RGF0YSA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihkYXRhKTsKKyAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmFwaSk7CisgICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk4oc21hcnREYXRhLT5hcGktPm1vdXNlX21vdmUpOworICAgIHNtYXJ0RGF0
YS0+YXBpLT5tb3VzZV9tb3ZlKHNtYXJ0RGF0YSwgbW92ZUV2ZW50KTsKIH0KIAogc3RhdGljIHZv
aWQgX2V3a192aWV3X29uX2tleV9kb3duKHZvaWQqIGRhdGEsIEV2YXMqIGV2ZW50VHlwZSwgRXZh
c19PYmplY3QqIGNhbGxiYWNrLCB2b2lkKiBldmVudEluZm8pCiB7Ci0gICAgRXZhc19FdmVudF9L
ZXlfRG93biogZXYgPSBzdGF0aWNfY2FzdDxFdmFzX0V2ZW50X0tleV9Eb3duKj4oZXZlbnRJbmZv
KTsKLSAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzZCA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1Nt
YXJ0X0RhdGEqPihkYXRhKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBp
KTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpLT5rZXlfZG93bik7Ci0g
ICAgc2QtPmFwaS0+a2V5X2Rvd24oc2QsIGV2KTsKKyAgICBFdmFzX0V2ZW50X0tleV9Eb3duKiBk
b3duRXZlbnQgPSBzdGF0aWNfY2FzdDxFdmFzX0V2ZW50X0tleV9Eb3duKj4oZXZlbnRJbmZvKTsK
KyAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEgPSBzdGF0aWNfY2FzdDxFd2tfVmll
d19TbWFydF9EYXRhKj4oZGF0YSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21h
cnREYXRhLT5hcGkpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+
YXBpLT5rZXlfZG93bik7CisgICAgc21hcnREYXRhLT5hcGktPmtleV9kb3duKHNtYXJ0RGF0YSwg
ZG93bkV2ZW50KTsKIH0KIAogc3RhdGljIHZvaWQgX2V3a192aWV3X29uX2tleV91cCh2b2lkKiBk
YXRhLCBFdmFzKiBldmVudFR5cGUsIEV2YXNfT2JqZWN0KiBjYWxsYmFjaywgdm9pZCogZXZlbnRJ
bmZvKQogewotICAgIEV2YXNfRXZlbnRfS2V5X1VwKiBldiA9IHN0YXRpY19jYXN0PEV2YXNfRXZl
bnRfS2V5X1VwKj4oZXZlbnRJbmZvKTsKLSAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzZCA9IHN0
YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihkYXRhKTsKLSAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTihzZC0+YXBpKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihz
ZC0+YXBpLT5rZXlfdXApOwotICAgIHNkLT5hcGktPmtleV91cChzZCwgZXYpOworICAgIEV2YXNf
RXZlbnRfS2V5X1VwKiB1cEV2ZW50ID0gc3RhdGljX2Nhc3Q8RXZhc19FdmVudF9LZXlfVXAqPihl
dmVudEluZm8pOworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IHN0YXRpY19j
YXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihkYXRhKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTihzbWFydERhdGEtPmFwaSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4o
c21hcnREYXRhLT5hcGktPmtleV91cCk7CisgICAgc21hcnREYXRhLT5hcGktPmtleV91cChzbWFy
dERhdGEsIHVwRXZlbnQpOwogfQogCiBzdGF0aWMgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkZy
YW1lPiBfZXdrX3ZpZXdfY29yZV9mcmFtZV9uZXcoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnRE
YXRhLCBFd2tfVmlld19Qcml2YXRlX0RhdGEqIHByaXYsIFdlYkNvcmU6OkhUTUxGcmFtZU93bmVy
RWxlbWVudCogb3duZXIpCiB7Ci0gICAgV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRFZmwqIGZs
YyA9IG5ldyBXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEVmbChzbWFydERhdGEtPnNlbGYpOwot
ICAgIGlmICghZmxjKSB7CisgICAgV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRFZmwqIGZyYW1l
TG9hZGVyQ2xpZW50ID0gbmV3IFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50RWZsKHNtYXJ0RGF0
YS0+c2VsZik7CisgICAgaWYgKCFmcmFtZUxvYWRlckNsaWVudCkgewogICAgICAgICBDUklUSUNB
TCgiQ291bGQgbm90IGNyZWF0ZSBmcmFtZSBsb2FkZXIgY2xpZW50LiIpOwogICAgICAgICByZXR1
cm4gMDsKICAgICB9Ci0gICAgZmxjLT5zZXRDdXN0b21Vc2VyQWdlbnQoU3RyaW5nOjpmcm9tVVRG
OChwcml2LT5zZXR0aW5ncy51c2VyX2FnZW50KSk7CisgICAgZnJhbWVMb2FkZXJDbGllbnQtPnNl
dEN1c3RvbVVzZXJBZ2VudChTdHJpbmc6OmZyb21VVEY4KHByaXYtPnNldHRpbmdzLnVzZXJBZ2Vu
dCkpOwogCi0gICAgcmV0dXJuIFdlYkNvcmU6OkZyYW1lOjpjcmVhdGUocHJpdi0+cGFnZSwgb3du
ZXIsIGZsYyk7CisgICAgcmV0dXJuIFdlYkNvcmU6OkZyYW1lOjpjcmVhdGUocHJpdi0+cGFnZSwg
b3duZXIsIGZyYW1lTG9hZGVyQ2xpZW50KTsKIH0KIAogc3RhdGljIEV2YXNfU21hcnRfQ2xhc3Mg
X3BhcmVudF9zYyA9IEVWQVNfU01BUlRfQ0xBU1NfSU5JVF9OVUxMOwpAQCAtNTU3LDcgKzU1Nyw3
IEBAIHN0YXRpYyBFd2tfVmlld19Qcml2YXRlX0RhdGEqIF9ld2tfdmlld19wcml2X25ldyhFd2tf
Vmlld19TbWFydF9EYXRhKiBzbWFydERhdGEpCiB7CiAgICAgRXdrX1ZpZXdfUHJpdmF0ZV9EYXRh
KiBwcml2ID0KICAgICAgICAgc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKj4oY2Fs
bG9jKDEsIHNpemVvZihFd2tfVmlld19Qcml2YXRlX0RhdGEpKSk7Ci0gICAgQXRvbWljU3RyaW5n
IHM7CisgICAgQXRvbWljU3RyaW5nIHN0cmluZzsKICAgICBXZWJDb3JlOjpLVVJMIHVybDsKIAog
ICAgIGlmICghcHJpdikgewpAQCAtNTgwLDk1ICs1ODAsOTUgQEAgc3RhdGljIEV3a19WaWV3X1By
aXZhdGVfRGF0YSogX2V3a192aWV3X3ByaXZfbmV3KEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0
RGF0YSkKICAgICAgICAgZ290byBlcnJvcl9wYWdlOwogICAgIH0KIAotICAgIHByaXYtPnBhZ2Vf
c2V0dGluZ3MgPSBwcml2LT5wYWdlLT5zZXR0aW5ncygpOwotICAgIGlmICghcHJpdi0+cGFnZV9z
ZXR0aW5ncykgeworICAgIHByaXYtPnBhZ2VTZXR0aW5ncyA9IHByaXYtPnBhZ2UtPnNldHRpbmdz
KCk7CisgICAgaWYgKCFwcml2LT5wYWdlU2V0dGluZ3MpIHsKICAgICAgICAgQ1JJVElDQUwoIkNv
dWxkIG5vdCBnZXQgcGFnZSBzZXR0aW5ncy4iKTsKICAgICAgICAgZ290byBlcnJvcl9zZXR0aW5n
czsKICAgICB9CiAKLSAgICBwcml2LT52aWV3cG9ydF9hcmd1bWVudHMud2lkdGggPSBXZWJDb3Jl
OjpWaWV3cG9ydEFyZ3VtZW50czo6VmFsdWVBdXRvOwotICAgIHByaXYtPnZpZXdwb3J0X2FyZ3Vt
ZW50cy5oZWlnaHQgPSBXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50czo6VmFsdWVBdXRvOwotICAg
IHByaXYtPnZpZXdwb3J0X2FyZ3VtZW50cy5pbml0aWFsU2NhbGUgPSBXZWJDb3JlOjpWaWV3cG9y
dEFyZ3VtZW50czo6VmFsdWVBdXRvOwotICAgIHByaXYtPnZpZXdwb3J0X2FyZ3VtZW50cy5taW5p
bXVtU2NhbGUgPSBXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50czo6VmFsdWVBdXRvOwotICAgIHBy
aXYtPnZpZXdwb3J0X2FyZ3VtZW50cy5tYXhpbXVtU2NhbGUgPSBXZWJDb3JlOjpWaWV3cG9ydEFy
Z3VtZW50czo6VmFsdWVBdXRvOwotICAgIHByaXYtPnZpZXdwb3J0X2FyZ3VtZW50cy50YXJnZXRE
ZW5zaXR5RHBpID0gV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHM6OlZhbHVlQXV0bzsKLSAgICBw
cml2LT52aWV3cG9ydF9hcmd1bWVudHMudXNlclNjYWxhYmxlID0gRUlOQV9UUlVFOwotCi0gICAg
cHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0TG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5KHRydWUpOwot
ICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNldERlZmF1bHRUZXh0RW5jb2RpbmdOYW1lKCJpc28t
ODg1OS0xIik7Ci0gICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0RGVmYXVsdEZpeGVkRm9udFNp
emUoMTIpOwotICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNldERlZmF1bHRGb250U2l6ZSgxNik7
Ci0gICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0U2VyaWZGb250RmFtaWx5KCJzZXJpZiIpOwot
ICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNldEZpeGVkRm9udEZhbWlseSgibW9ub3R5cGUiKTsK
LSAgICBwcml2LT5wYWdlX3NldHRpbmdzLT5zZXRTYW5zU2VyaWZGb250RmFtaWx5KCJzYW5zIik7
Ci0gICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0U3RhbmRhcmRGb250RmFtaWx5KCJzYW5zIik7
Ci0gICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0SmF2YVNjcmlwdEVuYWJsZWQodHJ1ZSk7Ci0g
ICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0UGx1Z2luc0VuYWJsZWQodHJ1ZSk7Ci0gICAgcHJp
di0+cGFnZV9zZXR0aW5ncy0+c2V0TG9jYWxTdG9yYWdlRW5hYmxlZCh0cnVlKTsKLSAgICBwcml2
LT5wYWdlX3NldHRpbmdzLT5zZXRPZmZsaW5lV2ViQXBwbGljYXRpb25DYWNoZUVuYWJsZWQodHJ1
ZSk7Ci0gICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0VXNlc1BhZ2VDYWNoZSh0cnVlKTsKLSAg
ICBwcml2LT5wYWdlX3NldHRpbmdzLT5zZXRVc2VzRW5jb2RpbmdEZXRlY3RvcihmYWxzZSk7Ci0K
LSAgICB1cmwgPSBwcml2LT5wYWdlX3NldHRpbmdzLT51c2VyU3R5bGVTaGVldExvY2F0aW9uKCk7
Ci0gICAgcHJpdi0+c2V0dGluZ3MudXNlcl9zdHlsZXNoZWV0ID0gZWluYV9zdHJpbmdzaGFyZV9h
ZGQodXJsLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotCi0gICAgcHJpdi0+c2V0dGluZ3MuZW5j
b2RpbmdfZGVmYXVsdCA9IGVpbmFfc3RyaW5nc2hhcmVfYWRkCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAocHJpdi0+cGFnZV9zZXR0aW5ncy0+ZGVmYXVsdFRleHRF
bmNvZGluZ05hbWUoKS51dGY4KCkuZGF0YSgpKTsKLSAgICBwcml2LT5zZXR0aW5ncy5lbmNvZGlu
Z19jdXN0b20gPSAwOwotCi0gICAgcyA9IHByaXYtPnBhZ2Vfc2V0dGluZ3MtPmxvY2FsU3RvcmFn
ZURhdGFiYXNlUGF0aCgpOwotICAgIHByaXYtPnNldHRpbmdzLmxvY2FsX3N0b3JhZ2VfZGF0YWJh
c2VfcGF0aCA9IGVpbmFfc3RyaW5nc2hhcmVfYWRkKHMuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7
Ci0KLSAgICBwcml2LT5zZXR0aW5ncy5mb250X21pbmltdW1fc2l6ZSA9IHByaXYtPnBhZ2Vfc2V0
dGluZ3MtPm1pbmltdW1Gb250U2l6ZSgpOwotICAgIHByaXYtPnNldHRpbmdzLmZvbnRfbWluaW11
bV9sb2dpY2FsX3NpemUgPSBwcml2LT5wYWdlX3NldHRpbmdzLT5taW5pbXVtTG9naWNhbEZvbnRT
aXplKCk7Ci0gICAgcHJpdi0+c2V0dGluZ3MuZm9udF9kZWZhdWx0X3NpemUgPSBwcml2LT5wYWdl
X3NldHRpbmdzLT5kZWZhdWx0Rm9udFNpemUoKTsKLSAgICBwcml2LT5zZXR0aW5ncy5mb250X21v
bm9zcGFjZV9zaXplID0gcHJpdi0+cGFnZV9zZXR0aW5ncy0+ZGVmYXVsdEZpeGVkRm9udFNpemUo
KTsKLQotICAgIHMgPSBwcml2LT5wYWdlX3NldHRpbmdzLT5zdGFuZGFyZEZvbnRGYW1pbHkoKTsK
LSAgICBwcml2LT5zZXR0aW5ncy5mb250X3N0YW5kYXJkID0gZWluYV9zdHJpbmdzaGFyZV9hZGQo
cy5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLSAgICBzID0gcHJpdi0+cGFnZV9zZXR0aW5ncy0+
Y3Vyc2l2ZUZvbnRGYW1pbHkoKTsKLSAgICBwcml2LT5zZXR0aW5ncy5mb250X2N1cnNpdmUgPSBl
aW5hX3N0cmluZ3NoYXJlX2FkZChzLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwotICAgIHMgPSBw
cml2LT5wYWdlX3NldHRpbmdzLT5maXhlZEZvbnRGYW1pbHkoKTsKLSAgICBwcml2LT5zZXR0aW5n
cy5mb250X21vbm9zcGFjZSA9IGVpbmFfc3RyaW5nc2hhcmVfYWRkKHMuc3RyaW5nKCkudXRmOCgp
LmRhdGEoKSk7Ci0gICAgcyA9IHByaXYtPnBhZ2Vfc2V0dGluZ3MtPmZhbnRhc3lGb250RmFtaWx5
KCk7Ci0gICAgcHJpdi0+c2V0dGluZ3MuZm9udF9mYW50YXN5ID0gZWluYV9zdHJpbmdzaGFyZV9h
ZGQocy5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLSAgICBzID0gcHJpdi0+cGFnZV9zZXR0aW5n
cy0+c2VyaWZGb250RmFtaWx5KCk7Ci0gICAgcHJpdi0+c2V0dGluZ3MuZm9udF9zZXJpZiA9IGVp
bmFfc3RyaW5nc2hhcmVfYWRkKHMuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgcyA9IHBy
aXYtPnBhZ2Vfc2V0dGluZ3MtPnNhbnNTZXJpZkZvbnRGYW1pbHkoKTsKLSAgICBwcml2LT5zZXR0
aW5ncy5mb250X3NhbnNfc2VyaWYgPSBlaW5hX3N0cmluZ3NoYXJlX2FkZChzLnN0cmluZygpLnV0
ZjgoKS5kYXRhKCkpOwotCi0gICAgcHJpdi0+c2V0dGluZ3MuYXV0b19sb2FkX2ltYWdlcyA9IHBy
aXYtPnBhZ2Vfc2V0dGluZ3MtPmxvYWRzSW1hZ2VzQXV0b21hdGljYWxseSgpOwotICAgIHByaXYt
PnNldHRpbmdzLmF1dG9fc2hyaW5rX2ltYWdlcyA9IHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNocmlu
a3NTdGFuZGFsb25lSW1hZ2VzVG9GaXQoKTsKLSAgICBwcml2LT5zZXR0aW5ncy5lbmFibGVfYXV0
b19yZXNpemVfd2luZG93ID0gRUlOQV9UUlVFOwotICAgIHByaXYtPnNldHRpbmdzLmVuYWJsZV9k
ZXZlbG9wZXJfZXh0cmFzID0gcHJpdi0+cGFnZV9zZXR0aW5ncy0+ZGV2ZWxvcGVyRXh0cmFzRW5h
YmxlZCgpOwotICAgIHByaXYtPnNldHRpbmdzLmVuYWJsZV9zY3JpcHRzID0gcHJpdi0+cGFnZV9z
ZXR0aW5ncy0+aXNKYXZhU2NyaXB0RW5hYmxlZCgpOwotICAgIHByaXYtPnNldHRpbmdzLmVuYWJs
ZV9wbHVnaW5zID0gcHJpdi0+cGFnZV9zZXR0aW5ncy0+YXJlUGx1Z2luc0VuYWJsZWQoKTsKLSAg
ICBwcml2LT5zZXR0aW5ncy5lbmFibGVfZnJhbWVfZmxhdHRlbmluZyA9IHByaXYtPnBhZ2Vfc2V0
dGluZ3MtPmZyYW1lRmxhdHRlbmluZ0VuYWJsZWQoKTsKLSAgICBwcml2LT5zZXR0aW5ncy5zY3Jp
cHRzX3dpbmRvd19vcGVuID0gcHJpdi0+cGFnZV9zZXR0aW5ncy0+amF2YVNjcmlwdENhbk9wZW5X
aW5kb3dzQXV0b21hdGljYWxseSgpOwotICAgIHByaXYtPnNldHRpbmdzLnNjcmlwdHNfY2FuX2Ns
b3NlX3dpbmRvd3MgPSBwcml2LT5wYWdlX3NldHRpbmdzLT5hbGxvd1NjcmlwdHNUb0Nsb3NlV2lu
ZG93cygpOwotICAgIHByaXYtPnNldHRpbmdzLnJlc2l6YWJsZV90ZXh0YXJlYXMgPSBwcml2LT5w
YWdlX3NldHRpbmdzLT50ZXh0QXJlYXNBcmVSZXNpemFibGUoKTsKLSAgICBwcml2LT5zZXR0aW5n
cy5wcml2YXRlX2Jyb3dzaW5nID0gcHJpdi0+cGFnZV9zZXR0aW5ncy0+cHJpdmF0ZUJyb3dzaW5n
RW5hYmxlZCgpOwotICAgIHByaXYtPnNldHRpbmdzLmNhcmV0X2Jyb3dzaW5nID0gcHJpdi0+cGFn
ZV9zZXR0aW5ncy0+Y2FyZXRCcm93c2luZ0VuYWJsZWQoKTsKLSAgICBwcml2LT5zZXR0aW5ncy5z
cGF0aWFsX25hdmlnYXRpb24gPSBwcml2LT5wYWdlX3NldHRpbmdzLT5pc1NwYXRpYWxOYXZpZ2F0
aW9uRW5hYmxlZCgpOwotICAgIHByaXYtPnNldHRpbmdzLmxvY2FsX3N0b3JhZ2UgPSBwcml2LT5w
YWdlX3NldHRpbmdzLT5sb2NhbFN0b3JhZ2VFbmFibGVkKCk7Ci0gICAgcHJpdi0+c2V0dGluZ3Mu
b2ZmbGluZV9hcHBfY2FjaGUgPSB0cnVlOyAvLyBYWFggbm8gZnVuY3Rpb24gdG8gcmVhZCBzZXR0
aW5nOyB0aGlzIGtlZXBzIHRoZSBvcmlnaW5hbCBzZXR0aW5nCi0gICAgcHJpdi0+c2V0dGluZ3Mu
cGFnZV9jYWNoZSA9IHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnVzZXNQYWdlQ2FjaGUoKTsKLSAgICBw
cml2LT5zZXR0aW5ncy5lbmNvZGluZ19kZXRlY3RvciA9IHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnVz
ZXNFbmNvZGluZ0RldGVjdG9yKCk7Ci0KLSAgICBwcml2LT5zZXR0aW5ncy51c2VyX2FnZW50ID0g
ZXdrX3NldHRpbmdzX2RlZmF1bHRfdXNlcl9hZ2VudF9nZXQoKTsKKyAgICBwcml2LT52aWV3cG9y
dEFyZ3VtZW50cy53aWR0aCA9IFdlYkNvcmU6OlZpZXdwb3J0QXJndW1lbnRzOjpWYWx1ZUF1dG87
CisgICAgcHJpdi0+dmlld3BvcnRBcmd1bWVudHMuaGVpZ2h0ID0gV2ViQ29yZTo6Vmlld3BvcnRB
cmd1bWVudHM6OlZhbHVlQXV0bzsKKyAgICBwcml2LT52aWV3cG9ydEFyZ3VtZW50cy5pbml0aWFs
U2NhbGUgPSBXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50czo6VmFsdWVBdXRvOworICAgIHByaXYt
PnZpZXdwb3J0QXJndW1lbnRzLm1pbmltdW1TY2FsZSA9IFdlYkNvcmU6OlZpZXdwb3J0QXJndW1l
bnRzOjpWYWx1ZUF1dG87CisgICAgcHJpdi0+dmlld3BvcnRBcmd1bWVudHMubWF4aW11bVNjYWxl
ID0gV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHM6OlZhbHVlQXV0bzsKKyAgICBwcml2LT52aWV3
cG9ydEFyZ3VtZW50cy50YXJnZXREZW5zaXR5RHBpID0gV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVu
dHM6OlZhbHVlQXV0bzsKKyAgICBwcml2LT52aWV3cG9ydEFyZ3VtZW50cy51c2VyU2NhbGFibGUg
PSBFSU5BX1RSVUU7CisKKyAgICBwcml2LT5wYWdlU2V0dGluZ3MtPnNldExvYWRzSW1hZ2VzQXV0
b21hdGljYWxseSh0cnVlKTsKKyAgICBwcml2LT5wYWdlU2V0dGluZ3MtPnNldERlZmF1bHRUZXh0
RW5jb2RpbmdOYW1lKCJpc28tODg1OS0xIik7CisgICAgcHJpdi0+cGFnZVNldHRpbmdzLT5zZXRE
ZWZhdWx0Rml4ZWRGb250U2l6ZSgxMik7CisgICAgcHJpdi0+cGFnZVNldHRpbmdzLT5zZXREZWZh
dWx0Rm9udFNpemUoMTYpOworICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0U2VyaWZGb250RmFt
aWx5KCJzZXJpZiIpOworICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0Rml4ZWRGb250RmFtaWx5
KCJtb25vdHlwZSIpOworICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0U2Fuc1NlcmlmRm9udEZh
bWlseSgic2FucyIpOworICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0U3RhbmRhcmRGb250RmFt
aWx5KCJzYW5zIik7CisgICAgcHJpdi0+cGFnZVNldHRpbmdzLT5zZXRKYXZhU2NyaXB0RW5hYmxl
ZCh0cnVlKTsKKyAgICBwcml2LT5wYWdlU2V0dGluZ3MtPnNldFBsdWdpbnNFbmFibGVkKHRydWUp
OworICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0TG9jYWxTdG9yYWdlRW5hYmxlZCh0cnVlKTsK
KyAgICBwcml2LT5wYWdlU2V0dGluZ3MtPnNldE9mZmxpbmVXZWJBcHBsaWNhdGlvbkNhY2hlRW5h
YmxlZCh0cnVlKTsKKyAgICBwcml2LT5wYWdlU2V0dGluZ3MtPnNldFVzZXNQYWdlQ2FjaGUodHJ1
ZSk7CisgICAgcHJpdi0+cGFnZVNldHRpbmdzLT5zZXRVc2VzRW5jb2RpbmdEZXRlY3RvcihmYWxz
ZSk7CisKKyAgICB1cmwgPSBwcml2LT5wYWdlU2V0dGluZ3MtPnVzZXJTdHlsZVNoZWV0TG9jYXRp
b24oKTsKKyAgICBwcml2LT5zZXR0aW5ncy51c2VyU3R5bGVzaGVldCA9IGVpbmFfc3RyaW5nc2hh
cmVfYWRkKHVybC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKworICAgIHByaXYtPnNldHRpbmdz
LmVuY29kaW5nRGVmYXVsdCA9IGVpbmFfc3RyaW5nc2hhcmVfYWRkCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAocHJpdi0+cGFnZVNldHRpbmdzLT5kZWZhdWx0VGV4
dEVuY29kaW5nTmFtZSgpLnV0ZjgoKS5kYXRhKCkpOworICAgIHByaXYtPnNldHRpbmdzLmVuY29k
aW5nQ3VzdG9tID0gMDsKKworICAgIHN0cmluZyA9IHByaXYtPnBhZ2VTZXR0aW5ncy0+bG9jYWxT
dG9yYWdlRGF0YWJhc2VQYXRoKCk7CisgICAgcHJpdi0+c2V0dGluZ3MubG9jYWxTdG9yYWdlRGF0
YWJhc2VQYXRoID0gZWluYV9zdHJpbmdzaGFyZV9hZGQoc3RyaW5nLnN0cmluZygpLnV0ZjgoKS5k
YXRhKCkpOworCisgICAgcHJpdi0+c2V0dGluZ3MuZm9udE1pbmltdW1TaXplID0gcHJpdi0+cGFn
ZVNldHRpbmdzLT5taW5pbXVtRm9udFNpemUoKTsKKyAgICBwcml2LT5zZXR0aW5ncy5mb250TWlu
aW11bUxvZ2ljYWxTaXplID0gcHJpdi0+cGFnZVNldHRpbmdzLT5taW5pbXVtTG9naWNhbEZvbnRT
aXplKCk7CisgICAgcHJpdi0+c2V0dGluZ3MuZm9udERlZmF1bHRTaXplID0gcHJpdi0+cGFnZVNl
dHRpbmdzLT5kZWZhdWx0Rm9udFNpemUoKTsKKyAgICBwcml2LT5zZXR0aW5ncy5mb250TW9ub3Nw
YWNlU2l6ZSA9IHByaXYtPnBhZ2VTZXR0aW5ncy0+ZGVmYXVsdEZpeGVkRm9udFNpemUoKTsKKwor
ICAgIHN0cmluZyA9IHByaXYtPnBhZ2VTZXR0aW5ncy0+c3RhbmRhcmRGb250RmFtaWx5KCk7Cisg
ICAgcHJpdi0+c2V0dGluZ3MuZm9udFN0YW5kYXJkID0gZWluYV9zdHJpbmdzaGFyZV9hZGQoc3Ry
aW5nLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgIHN0cmluZyA9IHByaXYtPnBhZ2VTZXR0
aW5ncy0+Y3Vyc2l2ZUZvbnRGYW1pbHkoKTsKKyAgICBwcml2LT5zZXR0aW5ncy5mb250Q3Vyc2l2
ZSA9IGVpbmFfc3RyaW5nc2hhcmVfYWRkKHN0cmluZy5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsK
KyAgICBzdHJpbmcgPSBwcml2LT5wYWdlU2V0dGluZ3MtPmZpeGVkRm9udEZhbWlseSgpOworICAg
IHByaXYtPnNldHRpbmdzLmZvbnRNb25vc3BhY2UgPSBlaW5hX3N0cmluZ3NoYXJlX2FkZChzdHJp
bmcuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgc3RyaW5nID0gcHJpdi0+cGFnZVNldHRp
bmdzLT5mYW50YXN5Rm9udEZhbWlseSgpOworICAgIHByaXYtPnNldHRpbmdzLmZvbnRGYW50YXN5
ID0gZWluYV9zdHJpbmdzaGFyZV9hZGQoc3RyaW5nLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOwor
ICAgIHN0cmluZyA9IHByaXYtPnBhZ2VTZXR0aW5ncy0+c2VyaWZGb250RmFtaWx5KCk7CisgICAg
cHJpdi0+c2V0dGluZ3MuZm9udFNlcmlmID0gZWluYV9zdHJpbmdzaGFyZV9hZGQoc3RyaW5nLnN0
cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgIHN0cmluZyA9IHByaXYtPnBhZ2VTZXR0aW5ncy0+
c2Fuc1NlcmlmRm9udEZhbWlseSgpOworICAgIHByaXYtPnNldHRpbmdzLmZvbnRTYW5zU2VyaWYg
PSBlaW5hX3N0cmluZ3NoYXJlX2FkZChzdHJpbmcuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisK
KyAgICBwcml2LT5zZXR0aW5ncy5hdXRvTG9hZEltYWdlcyA9IHByaXYtPnBhZ2VTZXR0aW5ncy0+
bG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5KCk7CisgICAgcHJpdi0+c2V0dGluZ3MuYXV0b1Nocmlu
a0ltYWdlcyA9IHByaXYtPnBhZ2VTZXR0aW5ncy0+c2hyaW5rc1N0YW5kYWxvbmVJbWFnZXNUb0Zp
dCgpOworICAgIHByaXYtPnNldHRpbmdzLmVuYWJsZUF1dG9SZXNpemVXaW5kb3cgPSBFSU5BX1RS
VUU7CisgICAgcHJpdi0+c2V0dGluZ3MuZW5hYmxlRGV2ZWxvcGVyRXh0cmFzID0gcHJpdi0+cGFn
ZVNldHRpbmdzLT5kZXZlbG9wZXJFeHRyYXNFbmFibGVkKCk7CisgICAgcHJpdi0+c2V0dGluZ3Mu
ZW5hYmxlU2NyaXB0cyA9IHByaXYtPnBhZ2VTZXR0aW5ncy0+aXNKYXZhU2NyaXB0RW5hYmxlZCgp
OworICAgIHByaXYtPnNldHRpbmdzLmVuYWJsZVBsdWdpbnMgPSBwcml2LT5wYWdlU2V0dGluZ3Mt
PmFyZVBsdWdpbnNFbmFibGVkKCk7CisgICAgcHJpdi0+c2V0dGluZ3MuZW5hYmxlRnJhbWVGbGF0
dGVuaW5nID0gcHJpdi0+cGFnZVNldHRpbmdzLT5mcmFtZUZsYXR0ZW5pbmdFbmFibGVkKCk7Cisg
ICAgcHJpdi0+c2V0dGluZ3Muc2NyaXB0c1dpbmRvd09wZW4gPSBwcml2LT5wYWdlU2V0dGluZ3Mt
PmphdmFTY3JpcHRDYW5PcGVuV2luZG93c0F1dG9tYXRpY2FsbHkoKTsKKyAgICBwcml2LT5zZXR0
aW5ncy5zY3JpcHRzQ2FuQ2xvc2VXaW5kb3dzID0gcHJpdi0+cGFnZVNldHRpbmdzLT5hbGxvd1Nj
cmlwdHNUb0Nsb3NlV2luZG93cygpOworICAgIHByaXYtPnNldHRpbmdzLnJlc2l6YWJsZVRleHRh
cmVhcyA9IHByaXYtPnBhZ2VTZXR0aW5ncy0+dGV4dEFyZWFzQXJlUmVzaXphYmxlKCk7CisgICAg
cHJpdi0+c2V0dGluZ3MucHJpdmF0ZUJyb3dzaW5nID0gcHJpdi0+cGFnZVNldHRpbmdzLT5wcml2
YXRlQnJvd3NpbmdFbmFibGVkKCk7CisgICAgcHJpdi0+c2V0dGluZ3MuY2FyZXRCcm93c2luZyA9
IHByaXYtPnBhZ2VTZXR0aW5ncy0+Y2FyZXRCcm93c2luZ0VuYWJsZWQoKTsKKyAgICBwcml2LT5z
ZXR0aW5ncy5zcGF0aWFsTmF2aWdhdGlvbiA9IHByaXYtPnBhZ2VTZXR0aW5ncy0+aXNTcGF0aWFs
TmF2aWdhdGlvbkVuYWJsZWQoKTsKKyAgICBwcml2LT5zZXR0aW5ncy5sb2NhbFN0b3JhZ2UgPSBw
cml2LT5wYWdlU2V0dGluZ3MtPmxvY2FsU3RvcmFnZUVuYWJsZWQoKTsKKyAgICBwcml2LT5zZXR0
aW5ncy5vZmZsaW5lQXBwQ2FjaGUgPSB0cnVlOyAvLyBYWFggbm8gZnVuY3Rpb24gdG8gcmVhZCBz
ZXR0aW5nOyB0aGlzIGtlZXBzIHRoZSBvcmlnaW5hbCBzZXR0aW5nCisgICAgcHJpdi0+c2V0dGlu
Z3MucGFnZUNhY2hlID0gcHJpdi0+cGFnZVNldHRpbmdzLT51c2VzUGFnZUNhY2hlKCk7CisgICAg
cHJpdi0+c2V0dGluZ3MuZW5jb2RpbmdEZXRlY3RvciA9IHByaXYtPnBhZ2VTZXR0aW5ncy0+dXNl
c0VuY29kaW5nRGV0ZWN0b3IoKTsKKworICAgIHByaXYtPnNldHRpbmdzLnVzZXJBZ2VudCA9IGV3
a19zZXR0aW5nc19kZWZhdWx0X3VzZXJfYWdlbnRfZ2V0KCk7CiAKICAgICAvLyBTaW5jZSB0aGVy
ZSdzIG5vIHNjYWxlIHNlcGFyYXRlZCBmcm9tIHpvb21pbmcgaW4gd2Via2l0LWVmbCwgdGhpcyBm
dW5jdGlvbmFsaXR5IG9mCiAgICAgLy8gdmlld3BvcnQgbWV0YSB0YWcgaXMgaW1wbGVtZW50ZWQg
dXNpbmcgem9vbS4gV2hlbiBzY2FsZSB6b29tIGlzIHN1cHBvcnRlZCBieSB3ZWJraXQtZWZsLAog
ICAgIC8vIHRoaXMgZnVuY3Rpb25hbGl0eSB3aWxsIGJlIG1vZGlmaWVkIGJ5IHRoZSBzY2FsZSB6
b29tIHBhdGNoLgotICAgIHByaXYtPnNldHRpbmdzLnpvb21fcmFuZ2UubWluX3NjYWxlID0gWk9P
TV9NSU47Ci0gICAgcHJpdi0+c2V0dGluZ3Muem9vbV9yYW5nZS5tYXhfc2NhbGUgPSBaT09NX01B
WDsKLSAgICBwcml2LT5zZXR0aW5ncy56b29tX3JhbmdlLnVzZXJfc2NhbGFibGUgPSBFSU5BX1RS
VUU7Ci0gICAgcHJpdi0+c2V0dGluZ3MuZGV2aWNlX3BpeGVsX3JhdGlvID0gREVWSUNFX1BJWEVM
X1JBVElPOworICAgIHByaXYtPnNldHRpbmdzLnpvb21SYW5nZS5taW5TY2FsZSA9IFpPT01fTUlO
OworICAgIHByaXYtPnNldHRpbmdzLnpvb21SYW5nZS5tYXhTY2FsZSA9IFpPT01fTUFYOworICAg
IHByaXYtPnNldHRpbmdzLnpvb21SYW5nZS51c2VyU2NhbGFibGUgPSBFSU5BX1RSVUU7CisgICAg
cHJpdi0+c2V0dGluZ3MuZGV2aWNlUGl4ZWxSYXRpbyA9IERFVklDRV9QSVhFTF9SQVRJTzsKIAot
ICAgIHByaXYtPnNldHRpbmdzLmRvbV90aW1lcl9pbnRlcnZhbCA9IHByaXYtPnBhZ2Vfc2V0dGlu
Z3MtPmRlZmF1bHRNaW5ET01UaW1lckludGVydmFsKCk7CisgICAgcHJpdi0+c2V0dGluZ3MuZG9t
VGltZXJJbnRlcnZhbCA9IHByaXYtPnBhZ2VTZXR0aW5ncy0+ZGVmYXVsdE1pbkRPTVRpbWVySW50
ZXJ2YWwoKTsKIAotICAgIHByaXYtPm1haW5fZnJhbWUgPSBfZXdrX3ZpZXdfY29yZV9mcmFtZV9u
ZXcoc21hcnREYXRhLCBwcml2LCAwKS5nZXQoKTsKLSAgICBpZiAoIXByaXYtPm1haW5fZnJhbWUp
IHsKKyAgICBwcml2LT5tYWluRnJhbWUgPSBfZXdrX3ZpZXdfY29yZV9mcmFtZV9uZXcoc21hcnRE
YXRhLCBwcml2LCAwKS5nZXQoKTsKKyAgICBpZiAoIXByaXYtPm1haW5GcmFtZSkgewogICAgICAg
ICBDUklUSUNBTCgiQ291bGQgbm90IGNyZWF0ZSBtYWluIGZyYW1lLiIpOwogICAgICAgICBnb3Rv
IGVycm9yX21haW5fZnJhbWU7CiAgICAgfQpAQCAtNzAxLDIwICs3MDEsMjAgQEAgc3RhdGljIHZv
aWQgX2V3a192aWV3X3ByaXZfZGVsKEV3a19WaWV3X1ByaXZhdGVfRGF0YSogcHJpdikKICAgICBm
cmVlKHByaXYtPnJlcGFpbnRzLmFycmF5KTsKICAgICBmcmVlKHByaXYtPnNjcm9sbHMuYXJyYXkp
OwogCi0gICAgZWluYV9zdHJpbmdzaGFyZV9kZWwocHJpdi0+c2V0dGluZ3MudXNlcl9hZ2VudCk7
Ci0gICAgZWluYV9zdHJpbmdzaGFyZV9kZWwocHJpdi0+c2V0dGluZ3MudXNlcl9zdHlsZXNoZWV0
KTsKLSAgICBlaW5hX3N0cmluZ3NoYXJlX2RlbChwcml2LT5zZXR0aW5ncy5lbmNvZGluZ19kZWZh
dWx0KTsKLSAgICBlaW5hX3N0cmluZ3NoYXJlX2RlbChwcml2LT5zZXR0aW5ncy5lbmNvZGluZ19j
dXN0b20pOwotICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVsKHByaXYtPnNldHRpbmdzLmZvbnRfc3Rh
bmRhcmQpOwotICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVsKHByaXYtPnNldHRpbmdzLmZvbnRfY3Vy
c2l2ZSk7Ci0gICAgZWluYV9zdHJpbmdzaGFyZV9kZWwocHJpdi0+c2V0dGluZ3MuZm9udF9tb25v
c3BhY2UpOwotICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVsKHByaXYtPnNldHRpbmdzLmZvbnRfZmFu
dGFzeSk7Ci0gICAgZWluYV9zdHJpbmdzaGFyZV9kZWwocHJpdi0+c2V0dGluZ3MuZm9udF9zZXJp
Zik7Ci0gICAgZWluYV9zdHJpbmdzaGFyZV9kZWwocHJpdi0+c2V0dGluZ3MuZm9udF9zYW5zX3Nl
cmlmKTsKLSAgICBlaW5hX3N0cmluZ3NoYXJlX2RlbChwcml2LT5zZXR0aW5ncy5sb2NhbF9zdG9y
YWdlX2RhdGFiYXNlX3BhdGgpOwotCi0gICAgaWYgKHByaXYtPmFuaW1hdGVkX3pvb20uYW5pbWF0
b3IpCi0gICAgICAgIGVjb3JlX2FuaW1hdG9yX2RlbChwcml2LT5hbmltYXRlZF96b29tLmFuaW1h
dG9yKTsKKyAgICBlaW5hX3N0cmluZ3NoYXJlX2RlbChwcml2LT5zZXR0aW5ncy51c2VyQWdlbnQp
OworICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVsKHByaXYtPnNldHRpbmdzLnVzZXJTdHlsZXNoZWV0
KTsKKyAgICBlaW5hX3N0cmluZ3NoYXJlX2RlbChwcml2LT5zZXR0aW5ncy5lbmNvZGluZ0RlZmF1
bHQpOworICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVsKHByaXYtPnNldHRpbmdzLmVuY29kaW5nQ3Vz
dG9tKTsKKyAgICBlaW5hX3N0cmluZ3NoYXJlX2RlbChwcml2LT5zZXR0aW5ncy5mb250U3RhbmRh
cmQpOworICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVsKHByaXYtPnNldHRpbmdzLmZvbnRDdXJzaXZl
KTsKKyAgICBlaW5hX3N0cmluZ3NoYXJlX2RlbChwcml2LT5zZXR0aW5ncy5mb250TW9ub3NwYWNl
KTsKKyAgICBlaW5hX3N0cmluZ3NoYXJlX2RlbChwcml2LT5zZXR0aW5ncy5mb250RmFudGFzeSk7
CisgICAgZWluYV9zdHJpbmdzaGFyZV9kZWwocHJpdi0+c2V0dGluZ3MuZm9udFNlcmlmKTsKKyAg
ICBlaW5hX3N0cmluZ3NoYXJlX2RlbChwcml2LT5zZXR0aW5ncy5mb250U2Fuc1NlcmlmKTsKKyAg
ICBlaW5hX3N0cmluZ3NoYXJlX2RlbChwcml2LT5zZXR0aW5ncy5sb2NhbFN0b3JhZ2VEYXRhYmFz
ZVBhdGgpOworCisgICAgaWYgKHByaXYtPmFuaW1hdGVkWm9vbS5hbmltYXRvcikKKyAgICAgICAg
ZWNvcmVfYW5pbWF0b3JfZGVsKHByaXYtPmFuaW1hdGVkWm9vbS5hbmltYXRvcik7CiAKICAgICBl
d2tfaGlzdG9yeV9mcmVlKHByaXYtPmhpc3RvcnkpOwogCkBAIC03MjUsNzIgKzcyNSw3MiBAQCBz
dGF0aWMgdm9pZCBfZXdrX3ZpZXdfcHJpdl9kZWwoRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKiBwcml2
KQogc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X2FkZChFdmFzX09iamVjdCogZXdrVmlldykK
IHsKICAgICBjb25zdCBFdmFzX1NtYXJ0KiBzbWFydCA9IGV2YXNfb2JqZWN0X3NtYXJ0X3NtYXJ0
X2dldChld2tWaWV3KTsKLSAgICBjb25zdCBFdmFzX1NtYXJ0X0NsYXNzKiBzYyA9IGV2YXNfc21h
cnRfY2xhc3NfZ2V0KHNtYXJ0KTsKLSAgICBjb25zdCBFd2tfVmlld19TbWFydF9DbGFzcyogYXBp
ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBFd2tfVmlld19TbWFydF9DbGFzcyo+KHNjKTsKKyAg
ICBjb25zdCBFdmFzX1NtYXJ0X0NsYXNzKiBzbWFydENsYXNzID0gZXZhc19zbWFydF9jbGFzc19n
ZXQoc21hcnQpOworICAgIGNvbnN0IEV3a19WaWV3X1NtYXJ0X0NsYXNzKiBhcGkgPSByZWludGVy
cHJldF9jYXN0PGNvbnN0IEV3a19WaWV3X1NtYXJ0X0NsYXNzKj4oc21hcnRDbGFzcyk7CiAgICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oYXBpLT5iYWNraW5nX3N0b3JlX2FkZCk7Ci0gICAg
RVdLX1ZJRVdfU0RfR0VUKGV3a1ZpZXcsIHNkKTsKKyAgICBFV0tfVklFV19TRF9HRVQoZXdrVmll
dywgc21hcnREYXRhKTsKIAotICAgIGlmICghc2QpIHsKLSAgICAgICAgc2QgPSBzdGF0aWNfY2Fz
dDxFd2tfVmlld19TbWFydF9EYXRhKj4oY2FsbG9jKDEsIHNpemVvZihFd2tfVmlld19TbWFydF9E
YXRhKSkpOwotICAgICAgICBpZiAoIXNkKSB7CisgICAgaWYgKCFzbWFydERhdGEpIHsKKyAgICAg
ICAgc21hcnREYXRhID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGNhbGxvYygx
LCBzaXplb2YoRXdrX1ZpZXdfU21hcnRfRGF0YSkpKTsKKyAgICAgICAgaWYgKCFzbWFydERhdGEp
IHsKICAgICAgICAgICAgIENSSVRJQ0FMKCJjb3VsZCBub3QgYWxsb2NhdGUgRXdrX1ZpZXdfU21h
cnRfRGF0YSIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGV2YXNf
b2JqZWN0X3NtYXJ0X2RhdGFfc2V0KGV3a1ZpZXcsIHNkKTsKKyAgICAgICAgZXZhc19vYmplY3Rf
c21hcnRfZGF0YV9zZXQoZXdrVmlldywgc21hcnREYXRhKTsKICAgICB9CiAKLSAgICBzZC0+Ymdf
Y29sb3IuciA9IDI1NTsKLSAgICBzZC0+YmdfY29sb3IuZyA9IDI1NTsKLSAgICBzZC0+YmdfY29s
b3IuYiA9IDI1NTsKLSAgICBzZC0+YmdfY29sb3IuYSA9IDI1NTsKKyAgICBzbWFydERhdGEtPmJn
X2NvbG9yLnIgPSAyNTU7CisgICAgc21hcnREYXRhLT5iZ19jb2xvci5nID0gMjU1OworICAgIHNt
YXJ0RGF0YS0+YmdfY29sb3IuYiA9IDI1NTsKKyAgICBzbWFydERhdGEtPmJnX2NvbG9yLmEgPSAy
NTU7CiAKLSAgICBzZC0+c2VsZiA9IGV3a1ZpZXc7Ci0gICAgc2QtPl9wcml2ID0gX2V3a192aWV3
X3ByaXZfbmV3KHNkKTsKLSAgICBzZC0+YXBpID0gYXBpOworICAgIHNtYXJ0RGF0YS0+c2VsZiA9
IGV3a1ZpZXc7CisgICAgc21hcnREYXRhLT5fcHJpdiA9IF9ld2tfdmlld19wcml2X25ldyhzbWFy
dERhdGEpOworICAgIHNtYXJ0RGF0YS0+YXBpID0gYXBpOwogCiAgICAgX3BhcmVudF9zYy5hZGQo
ZXdrVmlldyk7CiAKLSAgICBpZiAoIXNkLT5fcHJpdikKKyAgICBpZiAoIXNtYXJ0RGF0YS0+X3By
aXYpCiAgICAgICAgIHJldHVybjsKIAotICAgIEVXS19WSUVXX1BSSVZfR0VUKHNkLCBwcml2KTsK
KyAgICBFV0tfVklFV19QUklWX0dFVChzbWFydERhdGEsIHByaXYpOwogCi0gICAgc2QtPmJhY2tp
bmdfc3RvcmUgPSBhcGktPmJhY2tpbmdfc3RvcmVfYWRkKHNkKTsKLSAgICBpZiAoIXNkLT5iYWNr
aW5nX3N0b3JlKSB7CisgICAgc21hcnREYXRhLT5iYWNraW5nX3N0b3JlID0gYXBpLT5iYWNraW5n
X3N0b3JlX2FkZChzbWFydERhdGEpOworICAgIGlmICghc21hcnREYXRhLT5iYWNraW5nX3N0b3Jl
KSB7CiAgICAgICAgIEVSUigiQ291bGQgbm90IGNyZWF0ZSBiYWNraW5nIHN0b3JlIG9iamVjdC4i
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X21lbWJl
cl9hZGQoc2QtPmJhY2tpbmdfc3RvcmUsIGV3a1ZpZXcpOwotICAgIGV2YXNfb2JqZWN0X3Nob3co
c2QtPmJhY2tpbmdfc3RvcmUpOwotICAgIGV2YXNfb2JqZWN0X3Bhc3NfZXZlbnRzX3NldChzZC0+
YmFja2luZ19zdG9yZSwgRUlOQV9UUlVFKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9tZW1iZXJf
YWRkKHNtYXJ0RGF0YS0+YmFja2luZ19zdG9yZSwgZXdrVmlldyk7CisgICAgZXZhc19vYmplY3Rf
c2hvdyhzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUpOworICAgIGV2YXNfb2JqZWN0X3Bhc3NfZXZl
bnRzX3NldChzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUsIEVJTkFfVFJVRSk7CiAKLSAgICBzZC0+
ZXZlbnRzX3JlY3QgPSBldmFzX29iamVjdF9yZWN0YW5nbGVfYWRkKHNkLT5iYXNlLmV2YXMpOwot
ICAgIGV2YXNfb2JqZWN0X2NvbG9yX3NldChzZC0+ZXZlbnRzX3JlY3QsIDAsIDAsIDAsIDApOwot
ICAgIGV2YXNfb2JqZWN0X3NtYXJ0X21lbWJlcl9hZGQoc2QtPmV2ZW50c19yZWN0LCBld2tWaWV3
KTsKLSAgICBldmFzX29iamVjdF9zaG93KHNkLT5ldmVudHNfcmVjdCk7CisgICAgc21hcnREYXRh
LT5ldmVudHNfcmVjdCA9IGV2YXNfb2JqZWN0X3JlY3RhbmdsZV9hZGQoc21hcnREYXRhLT5iYXNl
LmV2YXMpOworICAgIGV2YXNfb2JqZWN0X2NvbG9yX3NldChzbWFydERhdGEtPmV2ZW50c19yZWN0
LCAwLCAwLCAwLCAwKTsKKyAgICBldmFzX29iamVjdF9zbWFydF9tZW1iZXJfYWRkKHNtYXJ0RGF0
YS0+ZXZlbnRzX3JlY3QsIGV3a1ZpZXcpOworICAgIGV2YXNfb2JqZWN0X3Nob3coc21hcnREYXRh
LT5ldmVudHNfcmVjdCk7CiAKLSAgICBzZC0+bWFpbl9mcmFtZSA9IGV3a19mcmFtZV9hZGQoc2Qt
PmJhc2UuZXZhcyk7Ci0gICAgaWYgKCFzZC0+bWFpbl9mcmFtZSkgeworICAgIHNtYXJ0RGF0YS0+
bWFpbl9mcmFtZSA9IGV3a19mcmFtZV9hZGQoc21hcnREYXRhLT5iYXNlLmV2YXMpOworICAgIGlm
ICghc21hcnREYXRhLT5tYWluX2ZyYW1lKSB7CiAgICAgICAgIEVSUigiQ291bGQgbm90IGNyZWF0
ZSBtYWluIGZyYW1lIG9iamVjdC4iKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlm
ICghZXdrX2ZyYW1lX2luaXQoc2QtPm1haW5fZnJhbWUsIGV3a1ZpZXcsIHByaXYtPm1haW5fZnJh
bWUpKSB7CisgICAgaWYgKCFld2tfZnJhbWVfaW5pdChzbWFydERhdGEtPm1haW5fZnJhbWUsIGV3
a1ZpZXcsIHByaXYtPm1haW5GcmFtZSkpIHsKICAgICAgICAgRVJSKCJDb3VsZCBub3QgaW5pdGlh
bGl6ZSBtYWluIGZybWUgb2JqZWN0LiIpOwotICAgICAgICBldmFzX29iamVjdF9kZWwoc2QtPm1h
aW5fZnJhbWUpOwotICAgICAgICBzZC0+bWFpbl9mcmFtZSA9IDA7CisgICAgICAgIGV2YXNfb2Jq
ZWN0X2RlbChzbWFydERhdGEtPm1haW5fZnJhbWUpOworICAgICAgICBzbWFydERhdGEtPm1haW5f
ZnJhbWUgPSAwOwogCi0gICAgICAgIGRlbGV0ZSBwcml2LT5tYWluX2ZyYW1lOwotICAgICAgICBw
cml2LT5tYWluX2ZyYW1lID0gMDsKKyAgICAgICAgZGVsZXRlIHByaXYtPm1haW5GcmFtZTsKKyAg
ICAgICAgcHJpdi0+bWFpbkZyYW1lID0gMDsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAg
IGV2YXNfb2JqZWN0X25hbWVfc2V0KHNkLT5tYWluX2ZyYW1lLCAiRVdLX0ZyYW1lOm1haW4iKTsK
LSAgICBldmFzX29iamVjdF9zbWFydF9tZW1iZXJfYWRkKHNkLT5tYWluX2ZyYW1lLCBld2tWaWV3
KTsKLSAgICBldmFzX29iamVjdF9zaG93KHNkLT5tYWluX2ZyYW1lKTsKKyAgICBldmFzX29iamVj
dF9uYW1lX3NldChzbWFydERhdGEtPm1haW5fZnJhbWUsICJFV0tfRnJhbWU6bWFpbiIpOworICAg
IGV2YXNfb2JqZWN0X3NtYXJ0X21lbWJlcl9hZGQoc21hcnREYXRhLT5tYWluX2ZyYW1lLCBld2tW
aWV3KTsKKyAgICBldmFzX29iamVjdF9zaG93KHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSk7CiAKLSNk
ZWZpbmUgQ09OTkVDVChzLCBjKSBldmFzX29iamVjdF9ldmVudF9jYWxsYmFja19hZGQoZXdrVmll
dywgcywgYywgc2QpCisjZGVmaW5lIENPTk5FQ1QocywgYykgZXZhc19vYmplY3RfZXZlbnRfY2Fs
bGJhY2tfYWRkKGV3a1ZpZXcsIHMsIGMsIHNtYXJ0RGF0YSkKICAgICBDT05ORUNUKEVWQVNfQ0FM
TEJBQ0tfRk9DVVNfSU4sIF9ld2tfdmlld19vbl9mb2N1c19pbik7CiAgICAgQ09OTkVDVChFVkFT
X0NBTExCQUNLX0ZPQ1VTX09VVCwgX2V3a192aWV3X29uX2ZvY3VzX291dCk7CiAgICAgQ09OTkVD
VChFVkFTX0NBTExCQUNLX01PVVNFX1dIRUVMLCBfZXdrX3ZpZXdfb25fbW91c2Vfd2hlZWwpOwpA
QCAtODA0LDggKzgwNCw4IEBAIHN0YXRpYyB2b2lkIF9ld2tfdmlld19zbWFydF9hZGQoRXZhc19P
YmplY3QqIGV3a1ZpZXcpCiAKIHN0YXRpYyB2b2lkIF9ld2tfdmlld19zbWFydF9kZWwoRXZhc19P
YmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUKGV3a1ZpZXcsIHNkKTsKLSAg
ICBFd2tfVmlld19Qcml2YXRlX0RhdGEqIHByaXYgPSBzZCA/IHNkLT5fcHJpdiA6IDA7CisgICAg
RVdLX1ZJRVdfU0RfR0VUKGV3a1ZpZXcsIHNtYXJ0RGF0YSk7CisgICAgRXdrX1ZpZXdfUHJpdmF0
ZV9EYXRhKiBwcml2ID0gc21hcnREYXRhID8gc21hcnREYXRhLT5fcHJpdiA6IDA7CiAKICAgICBl
d2tfdmlld19zdG9wKGV3a1ZpZXcpOwogICAgIF9wYXJlbnRfc2MuZGVsKGV3a1ZpZXcpOwpAQCAt
ODE0LDEwMyArODE0LDEwMyBAQCBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21hcnRfZGVsKEV2YXNf
T2JqZWN0KiBld2tWaWV3KQogCiBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21hcnRfcmVzaXplKEV2
YXNfT2JqZWN0KiBld2tWaWV3LCBFdmFzX0Nvb3JkIHcsIEV2YXNfQ29vcmQgaCkKIHsKLSAgICBF
V0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkKTsKKyAgICBFV0tfVklFV19TRF9H
RVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSk7CiAKICAgICAvLyB0aGVzZSBzaG91bGQg
YmUgcXVldWVkIGFuZCBwcm9jZXNzZWQgaW4gY2FsY3VsYXRlIGFzIHdlbGwhCi0gICAgZXZhc19v
YmplY3RfcmVzaXplKHNkLT5iYWNraW5nX3N0b3JlLCB3LCBoKTsKKyAgICBldmFzX29iamVjdF9y
ZXNpemUoc21hcnREYXRhLT5iYWNraW5nX3N0b3JlLCB3LCBoKTsKIAotICAgIHNkLT5jaGFuZ2Vk
LnNpemUgPSBFSU5BX1RSVUU7Ci0gICAgX2V3a192aWV3X3NtYXJ0X2NoYW5nZWQoc2QpOworICAg
IHNtYXJ0RGF0YS0+Y2hhbmdlZC5zaXplID0gRUlOQV9UUlVFOworICAgIF9ld2tfdmlld19zbWFy
dF9jaGFuZ2VkKHNtYXJ0RGF0YSk7CiB9CiAKIHN0YXRpYyB2b2lkIF9ld2tfdmlld19zbWFydF9t
b3ZlKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSkKIHsK
LSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkKTsKLSAgICBzZC0+Y2hh
bmdlZC5wb3NpdGlvbiA9IEVJTkFfVFJVRTsKLSAgICBfZXdrX3ZpZXdfc21hcnRfY2hhbmdlZChz
ZCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEpOwor
ICAgIHNtYXJ0RGF0YS0+Y2hhbmdlZC5wb3NpdGlvbiA9IEVJTkFfVFJVRTsKKyAgICBfZXdrX3Zp
ZXdfc21hcnRfY2hhbmdlZChzbWFydERhdGEpOwogfQogCiBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdf
c21hcnRfY2FsY3VsYXRlKEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NE
X0dFVChld2tWaWV3LCBzZCk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVQoc2QsIHByaXYpOwotICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGktPmNvbnRlbnRzX3Jlc2l6ZSk7Ci0g
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFwaS0+c2Nyb2xsc19wcm9jZXNzKTsK
LSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpLT5yZXBhaW50c19wcm9jZXNz
KTsKLSAgICBFdmFzX0Nvb3JkIHgsIHksIHcsIGg7CisgICAgRVdLX1ZJRVdfU0RfR0VUKGV3a1Zp
ZXcsIHNtYXJ0RGF0YSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVQoc21hcnREYXRhLCBwcml2KTsK
KyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmFwaS0+Y29udGVudHNf
cmVzaXplKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmFwaS0+
c2Nyb2xsc19wcm9jZXNzKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERh
dGEtPmFwaS0+cmVwYWludHNfcHJvY2Vzcyk7CisgICAgRXZhc19Db29yZCB4LCB5LCB3aWR0aCwg
aGVpZ2h0OwogCi0gICAgc2QtPmNoYW5nZWQuYW55ID0gRUlOQV9GQUxTRTsKKyAgICBzbWFydERh
dGEtPmNoYW5nZWQuYW55ID0gRUlOQV9GQUxTRTsKIAotICAgIGlmICghc2QtPm1haW5fZnJhbWUg
fHwgIXByaXYtPm1haW5fZnJhbWUpCisgICAgaWYgKCFzbWFydERhdGEtPm1haW5fZnJhbWUgfHwg
IXByaXYtPm1haW5GcmFtZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZXZhc19vYmplY3RfZ2Vv
bWV0cnlfZ2V0KGV3a1ZpZXcsICZ4LCAmeSwgJncsICZoKTsKKyAgICBldmFzX29iamVjdF9nZW9t
ZXRyeV9nZXQoZXdrVmlldywgJngsICZ5LCAmd2lkdGgsICZoZWlnaHQpOwogCiAgICAgREJHKCJl
d2tWaWV3PSVwIGdlbz1bJWQsICVkICsgJWR4JWRdLCBjaGFuZ2VkOiBzaXplPSVoaHUsICIKICAg
ICAgICAgInNjcm9sbHM9JXp1LCByZXBhaW50cz0lenUiLAotICAgICAgICBld2tWaWV3LCB4LCB5
LCB3LCBoLCBzZC0+Y2hhbmdlZC5zaXplLAorICAgICAgICBld2tWaWV3LCB4LCB5LCB3aWR0aCwg
aGVpZ2h0LCBzbWFydERhdGEtPmNoYW5nZWQuc2l6ZSwKICAgICAgICAgcHJpdi0+c2Nyb2xscy5j
b3VudCwgcHJpdi0+cmVwYWludHMuY291bnQpOwogCi0gICAgaWYgKHNkLT5jaGFuZ2VkLnNpemUg
JiYgKCh3ICE9IHNkLT52aWV3LncpIHx8IChoICE9IHNkLT52aWV3LmgpKSkgewotICAgICAgICBX
ZWJDb3JlOjpGcmFtZVZpZXcqIHZpZXcgPSBwcml2LT5tYWluX2ZyYW1lLT52aWV3KCk7CisgICAg
aWYgKHNtYXJ0RGF0YS0+Y2hhbmdlZC5zaXplICYmICgod2lkdGggIT0gc21hcnREYXRhLT52aWV3
LncpIHx8IChoZWlnaHQgIT0gc21hcnREYXRhLT52aWV3LmgpKSkgeworICAgICAgICBXZWJDb3Jl
OjpGcmFtZVZpZXcqIHZpZXcgPSBwcml2LT5tYWluRnJhbWUtPnZpZXcoKTsKICAgICAgICAgaWYg
KHZpZXcpIHsKLSAgICAgICAgICAgIHZpZXctPnJlc2l6ZSh3LCBoKTsKKyAgICAgICAgICAgIHZp
ZXctPnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTsKICAgICAgICAgICAgIHZpZXctPmZvcmNlTGF5b3V0
KCk7CiAgICAgICAgICAgICB2aWV3LT5hZGp1c3RWaWV3U2l6ZSgpOwogICAgICAgICB9Ci0gICAg
ICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShzZC0+bWFpbl9mcmFtZSwgdywgaCk7Ci0gICAgICAgIGV2
YXNfb2JqZWN0X3Jlc2l6ZShzZC0+ZXZlbnRzX3JlY3QsIHcsIGgpOwotICAgICAgICBzZC0+Y2hh
bmdlZC5mcmFtZV9yZWN0ID0gRUlOQV9UUlVFOwotICAgICAgICBzZC0+dmlldy53ID0gdzsKLSAg
ICAgICAgc2QtPnZpZXcuaCA9IGg7CisgICAgICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShzbWFydERh
dGEtPm1haW5fZnJhbWUsIHdpZHRoLCBoZWlnaHQpOworICAgICAgICBldmFzX29iamVjdF9yZXNp
emUoc21hcnREYXRhLT5ldmVudHNfcmVjdCwgd2lkdGgsIGhlaWdodCk7CisgICAgICAgIHNtYXJ0
RGF0YS0+Y2hhbmdlZC5mcmFtZV9yZWN0ID0gRUlOQV9UUlVFOworICAgICAgICBzbWFydERhdGEt
PnZpZXcudyA9IHdpZHRoOworICAgICAgICBzbWFydERhdGEtPnZpZXcuaCA9IGhlaWdodDsKIAot
ICAgICAgICBfZXdrX3ZpZXdfcmVwYWludF9hZGQocHJpdiwgMCwgMCwgdywgaCk7CisgICAgICAg
IF9ld2tfdmlld19yZXBhaW50X2FkZChwcml2LCAwLCAwLCB3aWR0aCwgaGVpZ2h0KTsKIAogICAg
ICAgICAvLyBUaGlzIGNhbGxiYWNrIGlzIGEgZ29vZCBwbGFjZSBlLmcuIHRvIGNoYW5nZSBmaXhl
ZCBsYXlvdXQgc2l6ZSAoZXdrX3ZpZXdfZml4ZWRfbGF5b3V0X3NpemVfc2V0KS4KICAgICAgICAg
ZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChld2tWaWV3LCAidmlldyxyZXNpemVkIiwg
MCk7CiAgICAgfQotICAgIHNkLT5jaGFuZ2VkLnNpemUgPSBFSU5BX0ZBTFNFOworICAgIHNtYXJ0
RGF0YS0+Y2hhbmdlZC5zaXplID0gRUlOQV9GQUxTRTsKIAotICAgIGlmIChzZC0+Y2hhbmdlZC5w
b3NpdGlvbiAmJiAoKHggIT0gc2QtPnZpZXcueCkgfHwgKHkgIT0gc2QtPnZpZXcueSkpKSB7Ci0g
ICAgICAgIGV2YXNfb2JqZWN0X21vdmUoc2QtPm1haW5fZnJhbWUsIHgsIHkpOwotICAgICAgICBl
dmFzX29iamVjdF9tb3ZlKHNkLT5iYWNraW5nX3N0b3JlLCB4LCB5KTsKLSAgICAgICAgZXZhc19v
YmplY3RfbW92ZShzZC0+ZXZlbnRzX3JlY3QsIHgsIHkpOwotICAgICAgICBzZC0+Y2hhbmdlZC5m
cmFtZV9yZWN0ID0gRUlOQV9UUlVFOwotICAgICAgICBzZC0+dmlldy54ID0geDsKLSAgICAgICAg
c2QtPnZpZXcueSA9IHk7CisgICAgaWYgKHNtYXJ0RGF0YS0+Y2hhbmdlZC5wb3NpdGlvbiAmJiAo
KHggIT0gc21hcnREYXRhLT52aWV3LngpIHx8ICh5ICE9IHNtYXJ0RGF0YS0+dmlldy55KSkpIHsK
KyAgICAgICAgZXZhc19vYmplY3RfbW92ZShzbWFydERhdGEtPm1haW5fZnJhbWUsIHgsIHkpOwor
ICAgICAgICBldmFzX29iamVjdF9tb3ZlKHNtYXJ0RGF0YS0+YmFja2luZ19zdG9yZSwgeCwgeSk7
CisgICAgICAgIGV2YXNfb2JqZWN0X21vdmUoc21hcnREYXRhLT5ldmVudHNfcmVjdCwgeCwgeSk7
CisgICAgICAgIHNtYXJ0RGF0YS0+Y2hhbmdlZC5mcmFtZV9yZWN0ID0gRUlOQV9UUlVFOworICAg
ICAgICBzbWFydERhdGEtPnZpZXcueCA9IHg7CisgICAgICAgIHNtYXJ0RGF0YS0+dmlldy55ID0g
eTsKICAgICB9Ci0gICAgc2QtPmNoYW5nZWQucG9zaXRpb24gPSBFSU5BX0ZBTFNFOworICAgIHNt
YXJ0RGF0YS0+Y2hhbmdlZC5wb3NpdGlvbiA9IEVJTkFfRkFMU0U7CiAKLSAgICBpZiAoIXNkLT5h
cGktPnNjcm9sbHNfcHJvY2VzcyhzZCkpCisgICAgaWYgKCFzbWFydERhdGEtPmFwaS0+c2Nyb2xs
c19wcm9jZXNzKHNtYXJ0RGF0YSkpCiAgICAgICAgIEVSUigiZmFpbGVkIHRvIHByb2Nlc3Mgc2Ny
b2xscy4iKTsKICAgICBfZXdrX3ZpZXdfc2Nyb2xsc19mbHVzaChwcml2KTsKIAotICAgIGlmICgh
c2QtPmFwaS0+cmVwYWludHNfcHJvY2VzcyhzZCkpCisgICAgaWYgKCFzbWFydERhdGEtPmFwaS0+
cmVwYWludHNfcHJvY2VzcyhzbWFydERhdGEpKQogICAgICAgICBFUlIoImZhaWxlZCB0byBwcm9j
ZXNzIHJlcGFpbnRzLiIpOwogICAgIF9ld2tfdmlld19yZXBhaW50c19mbHVzaChwcml2KTsKIAot
ICAgIGlmIChzZC0+Y2hhbmdlZC5mcmFtZV9yZWN0KSB7Ci0gICAgICAgIFdlYkNvcmU6OkZyYW1l
VmlldyogdmlldyA9IHByaXYtPm1haW5fZnJhbWUtPnZpZXcoKTsKKyAgICBpZiAoc21hcnREYXRh
LT5jaGFuZ2VkLmZyYW1lX3JlY3QpIHsKKyAgICAgICAgV2ViQ29yZTo6RnJhbWVWaWV3KiB2aWV3
ID0gcHJpdi0+bWFpbkZyYW1lLT52aWV3KCk7CiAgICAgICAgIHZpZXctPmZyYW1lUmVjdHNDaGFu
Z2VkKCk7IC8qIGZvcmNlIHRyZWUgdG8gZ2V0IHBvc2l0aW9uIGZyb20gcm9vdCAqLwotICAgICAg
ICBzZC0+Y2hhbmdlZC5mcmFtZV9yZWN0ID0gRUlOQV9GQUxTRTsKKyAgICAgICAgc21hcnREYXRh
LT5jaGFuZ2VkLmZyYW1lX3JlY3QgPSBFSU5BX0ZBTFNFOwogICAgIH0KIH0KIAogc3RhdGljIHZv
aWQgX2V3a192aWV3X3NtYXJ0X3Nob3coRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdL
X1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCk7CisgICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEpOwogCi0gICAgaWYgKGV2YXNfb2JqZWN0X2Ns
aXBlZXNfZ2V0KHNkLT5iYXNlLmNsaXBwZXIpKQotICAgICAgICBldmFzX29iamVjdF9zaG93KHNk
LT5iYXNlLmNsaXBwZXIpOwotICAgIGV2YXNfb2JqZWN0X3Nob3coc2QtPmJhY2tpbmdfc3RvcmUp
OworICAgIGlmIChldmFzX29iamVjdF9jbGlwZWVzX2dldChzbWFydERhdGEtPmJhc2UuY2xpcHBl
cikpCisgICAgICAgIGV2YXNfb2JqZWN0X3Nob3coc21hcnREYXRhLT5iYXNlLmNsaXBwZXIpOwor
ICAgIGV2YXNfb2JqZWN0X3Nob3coc21hcnREYXRhLT5iYWNraW5nX3N0b3JlKTsKIH0KIAogc3Rh
dGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X2hpZGUoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0g
ICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCk7CisgICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEpOwogCi0gICAgZXZhc19vYmplY3Rf
aGlkZShzZC0+YmFzZS5jbGlwcGVyKTsKLSAgICBldmFzX29iamVjdF9oaWRlKHNkLT5iYWNraW5n
X3N0b3JlKTsKKyAgICBldmFzX29iamVjdF9oaWRlKHNtYXJ0RGF0YS0+YmFzZS5jbGlwcGVyKTsK
KyAgICBldmFzX29iamVjdF9oaWRlKHNtYXJ0RGF0YS0+YmFja2luZ19zdG9yZSk7CiB9CiAKIHN0
YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3NtYXJ0X2NvbnRlbnRzX3Jlc2l6ZShFd2tfVmlld19T
bWFydF9EYXRhKiBzbWFydERhdGEsIGludCB3aWR0aCwgaW50IGhlaWdodCkKQEAgLTkyMSwyOSAr
OTIxLDI5IEBAIHN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3NtYXJ0X2NvbnRlbnRzX3Jlc2l6
ZShFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEsCiBzdGF0aWMgRWluYV9Cb29sIF9ld2tf
dmlld19zbWFydF96b29tX3NldChFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEsIGZsb2F0
IHpvb20sIEV2YXNfQ29vcmQgY2VudGVyWCwgRXZhc19Db29yZCBjZW50ZXJZKQogewogICAgIGRv
dWJsZSBweCwgcHk7Ci0gICAgRXZhc19Db29yZCB4LCB5LCB3LCBoOwotICAgIEVpbmFfQm9vbCBy
ZXQ7CisgICAgRXZhc19Db29yZCB4LCB5LCB3aWR0aCwgaGVpZ2h0OworICAgIEVpbmFfQm9vbCBy
ZXN1bHQ7CiAKLSAgICBld2tfZnJhbWVfc2Nyb2xsX3NpemVfZ2V0KHNtYXJ0RGF0YS0+bWFpbl9m
cmFtZSwgJncsICZoKTsKKyAgICBld2tfZnJhbWVfc2Nyb2xsX3NpemVfZ2V0KHNtYXJ0RGF0YS0+
bWFpbl9mcmFtZSwgJndpZHRoLCAmaGVpZ2h0KTsKICAgICBld2tfZnJhbWVfc2Nyb2xsX3Bvc19n
ZXQoc21hcnREYXRhLT5tYWluX2ZyYW1lLCAmeCwgJnkpOwogCi0gICAgaWYgKHcgKyBzbWFydERh
dGEtPnZpZXcudyA+IDApCi0gICAgICAgIHB4ID0gc3RhdGljX2Nhc3Q8ZG91YmxlPih4ICsgY2Vu
dGVyWCkgLyAodyArIHNtYXJ0RGF0YS0+dmlldy53KTsKKyAgICBpZiAod2lkdGggKyBzbWFydERh
dGEtPnZpZXcudyA+IDApCisgICAgICAgIHB4ID0gc3RhdGljX2Nhc3Q8ZG91YmxlPih4ICsgY2Vu
dGVyWCkgLyAod2lkdGggKyBzbWFydERhdGEtPnZpZXcudyk7CiAgICAgZWxzZQogICAgICAgICBw
eCA9IDAuMDsKIAotICAgIGlmIChoICsgc21hcnREYXRhLT52aWV3LmggPiAwKQotICAgICAgICBw
eSA9IHN0YXRpY19jYXN0PGRvdWJsZT4oeSArIGNlbnRlclkpIC8gKGggKyBzbWFydERhdGEtPnZp
ZXcuaCk7CisgICAgaWYgKGhlaWdodCArIHNtYXJ0RGF0YS0+dmlldy5oID4gMCkKKyAgICAgICAg
cHkgPSBzdGF0aWNfY2FzdDxkb3VibGU+KHkgKyBjZW50ZXJZKSAvIChoZWlnaHQgKyBzbWFydERh
dGEtPnZpZXcuaCk7CiAgICAgZWxzZQogICAgICAgICBweSA9IDAuMDsKIAotICAgIHJldCA9IGV3
a19mcmFtZV9wYWdlX3pvb21fc2V0KHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSwgem9vbSk7CisgICAg
cmVzdWx0ID0gZXdrX2ZyYW1lX3BhZ2Vfem9vbV9zZXQoc21hcnREYXRhLT5tYWluX2ZyYW1lLCB6
b29tKTsKIAotICAgIGV3a19mcmFtZV9zY3JvbGxfc2l6ZV9nZXQoc21hcnREYXRhLT5tYWluX2Zy
YW1lLCAmdywgJmgpOwotICAgIHggPSAodyArIHNtYXJ0RGF0YS0+dmlldy53KSAqIHB4IC0gY2Vu
dGVyWDsKLSAgICB5ID0gKGggKyBzbWFydERhdGEtPnZpZXcuaCkgKiBweSAtIGNlbnRlclk7Cisg
ICAgZXdrX2ZyYW1lX3Njcm9sbF9zaXplX2dldChzbWFydERhdGEtPm1haW5fZnJhbWUsICZ3aWR0
aCwgJmhlaWdodCk7CisgICAgeCA9ICh3aWR0aCArIHNtYXJ0RGF0YS0+dmlldy53KSAqIHB4IC0g
Y2VudGVyWDsKKyAgICB5ID0gKGhlaWdodCArIHNtYXJ0RGF0YS0+dmlldy5oKSAqIHB5IC0gY2Vu
dGVyWTsKICAgICBld2tfZnJhbWVfc2Nyb2xsX3NldChzbWFydERhdGEtPm1haW5fZnJhbWUsIHgs
IHkpOwotICAgIHJldHVybiByZXQ7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogc3RhdGljIHZv
aWQgX2V3a192aWV3X3NtYXJ0X2ZsdXNoKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSkK
QEAgLTk4Miw4ICs5ODIsOCBAQCBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9t
YXJrX3N0b3AoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhKQogc3RhdGljIHZvaWQgX2V3
a192aWV3X3pvb21fYW5pbWF0ZWRfZmluaXNoKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0
YSkKIHsKICAgICBFV0tfVklFV19QUklWX0dFVChzbWFydERhdGEsIHByaXYpOwotICAgIGVjb3Jl
X2FuaW1hdG9yX2RlbChwcml2LT5hbmltYXRlZF96b29tLmFuaW1hdG9yKTsKLSAgICBwcml2LT5h
bmltYXRlZF96b29tLmFuaW1hdG9yID0gMDsKKyAgICBlY29yZV9hbmltYXRvcl9kZWwocHJpdi0+
YW5pbWF0ZWRab29tLmFuaW1hdG9yKTsKKyAgICBwcml2LT5hbmltYXRlZFpvb20uYW5pbWF0b3Ig
PSAwOwogICAgIF9ld2tfdmlld196b29tX2FuaW1hdGVkX21hcmtfc3RvcChzbWFydERhdGEpOwog
ICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoc21hcnREYXRhLT5zZWxmLCAiem9v
bSxhbmltYXRlZCxlbmQiLCAwKTsKIH0KQEAgLTk5MSw2OSArOTkxLDY5IEBAIHN0YXRpYyB2b2lk
IF9ld2tfdmlld196b29tX2FuaW1hdGVkX2ZpbmlzaChFd2tfVmlld19TbWFydF9EYXRhKiBzbWFy
dERhdGEpCiBzdGF0aWMgZmxvYXQgX2V3a192aWV3X3pvb21fYW5pbWF0ZWRfY3VycmVudChFd2tf
Vmlld19Qcml2YXRlX0RhdGEqIHByaXYpCiB7CiAgICAgZG91YmxlIG5vdyA9IGVjb3JlX2xvb3Bf
dGltZV9nZXQoKTsKLSAgICBkb3VibGUgZGVsdGEgPSBub3cgLSBwcml2LT5hbmltYXRlZF96b29t
LnRpbWUuc3RhcnQ7CisgICAgZG91YmxlIGRlbHRhID0gbm93IC0gcHJpdi0+YW5pbWF0ZWRab29t
LnRpbWUuc3RhcnQ7CiAKLSAgICBpZiAoZGVsdGEgPiBwcml2LT5hbmltYXRlZF96b29tLnRpbWUu
ZHVyYXRpb24pCi0gICAgICAgIGRlbHRhID0gcHJpdi0+YW5pbWF0ZWRfem9vbS50aW1lLmR1cmF0
aW9uOworICAgIGlmIChkZWx0YSA+IHByaXYtPmFuaW1hdGVkWm9vbS50aW1lLmR1cmF0aW9uKQor
ICAgICAgICBkZWx0YSA9IHByaXYtPmFuaW1hdGVkWm9vbS50aW1lLmR1cmF0aW9uOwogICAgIGlm
IChkZWx0YSA8IDAuMCkgLy8gdGltZSB3ZW50IGJhY2ssIGNsb2NrIGFkanVzdGVkPwogICAgICAg
ICBkZWx0YSA9IDAuMDsKIAotICAgIGRlbHRhIC89IHByaXYtPmFuaW1hdGVkX3pvb20udGltZS5k
dXJhdGlvbjsKKyAgICBkZWx0YSAvPSBwcml2LT5hbmltYXRlZFpvb20udGltZS5kdXJhdGlvbjsK
IAotICAgIHJldHVybiAoKHByaXYtPmFuaW1hdGVkX3pvb20uem9vbS5yYW5nZSAqIGRlbHRhKQot
ICAgICAgICAgICAgKyBwcml2LT5hbmltYXRlZF96b29tLnpvb20uc3RhcnQpOworICAgIHJldHVy
biAoKHByaXYtPmFuaW1hdGVkWm9vbS56b29tLnJhbmdlICogZGVsdGEpCisgICAgICAgICAgICAr
IHByaXYtPmFuaW1hdGVkWm9vbS56b29tLnN0YXJ0KTsKIH0KIAogc3RhdGljIEVpbmFfQm9vbCBf
ZXdrX3ZpZXdfem9vbV9hbmltYXRvcl9jYih2b2lkKiBkYXRhKQogewotICAgIEV3a19WaWV3X1Nt
YXJ0X0RhdGEqIHNkID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEpOwot
ICAgIEV2YXNfQ29vcmQgY3gsIGN5OwotICAgIEVXS19WSUVXX1BSSVZfR0VUKHNkLCBwcml2KTsK
KyAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEgPSBzdGF0aWNfY2FzdDxFd2tfVmll
d19TbWFydF9EYXRhKj4oZGF0YSk7CisgICAgRXZhc19Db29yZCBjZW50ZXJYLCBjZW50ZXJZOwor
ICAgIEVXS19WSUVXX1BSSVZfR0VUKHNtYXJ0RGF0YSwgcHJpdik7CiAgICAgZG91YmxlIG5vdyA9
IGVjb3JlX2xvb3BfdGltZV9nZXQoKTsKIAotICAgIGN4ID0gcHJpdi0+YW5pbWF0ZWRfem9vbS5j
ZW50ZXIueDsKLSAgICBjeSA9IHByaXYtPmFuaW1hdGVkX3pvb20uY2VudGVyLnk7CisgICAgY2Vu
dGVyWCA9IHByaXYtPmFuaW1hdGVkWm9vbS5jZW50ZXIueDsKKyAgICBjZW50ZXJZID0gcHJpdi0+
YW5pbWF0ZWRab29tLmNlbnRlci55OwogCiAgICAgLy8gVE9ETzogcHJvZ3Jlc3NpdmVseSBjZW50
ZXIgKGN4LCBjeSkgLT4gKHZpZXcueCArIHZpZXcuaC8yLCB2aWV3LnkgKyB2aWV3LmgvMikKLSAg
ICBpZiAoY3ggPj0gc2QtPnZpZXcudykKLSAgICAgICAgY3ggPSBzZC0+dmlldy53IC0gMTsKLSAg
ICBpZiAoY3kgPj0gc2QtPnZpZXcuaCkKLSAgICAgICAgY3kgPSBzZC0+dmlldy5oIC0gMTsKLQot
ICAgIGlmICgobm93ID49IHByaXYtPmFuaW1hdGVkX3pvb20udGltZS5lbmQpCi0gICAgICAgIHx8
IChub3cgPCBwcml2LT5hbmltYXRlZF96b29tLnRpbWUuc3RhcnQpKSB7Ci0gICAgICAgIF9ld2tf
dmlld196b29tX2FuaW1hdGVkX2ZpbmlzaChzZCk7Ci0gICAgICAgIGV3a192aWV3X3pvb21fc2V0
KHNkLT5zZWxmLCBwcml2LT5hbmltYXRlZF96b29tLnpvb20uZW5kLCBjeCwgY3kpOwotICAgICAg
ICBzZC0+YXBpLT5zYy5jYWxjdWxhdGUoc2QtPnNlbGYpOworICAgIGlmIChjZW50ZXJYID49IHNt
YXJ0RGF0YS0+dmlldy53KQorICAgICAgICBjZW50ZXJYID0gc21hcnREYXRhLT52aWV3LncgLSAx
OworICAgIGlmIChjZW50ZXJZID49IHNtYXJ0RGF0YS0+dmlldy5oKQorICAgICAgICBjZW50ZXJZ
ID0gc21hcnREYXRhLT52aWV3LmggLSAxOworCisgICAgaWYgKChub3cgPj0gcHJpdi0+YW5pbWF0
ZWRab29tLnRpbWUuZW5kKQorICAgICAgICB8fCAobm93IDwgcHJpdi0+YW5pbWF0ZWRab29tLnRp
bWUuc3RhcnQpKSB7CisgICAgICAgIF9ld2tfdmlld196b29tX2FuaW1hdGVkX2ZpbmlzaChzbWFy
dERhdGEpOworICAgICAgICBld2tfdmlld196b29tX3NldChzbWFydERhdGEtPnNlbGYsIHByaXYt
PmFuaW1hdGVkWm9vbS56b29tLmVuZCwgY2VudGVyWCwgY2VudGVyWSk7CisgICAgICAgIHNtYXJ0
RGF0YS0+YXBpLT5zYy5jYWxjdWxhdGUoc21hcnREYXRhLT5zZWxmKTsKICAgICAgICAgcmV0dXJu
IEVJTkFfRkFMU0U7CiAgICAgfQogCi0gICAgc2QtPmFuaW1hdGVkX3pvb20uem9vbS5jdXJyZW50
ID0gX2V3a192aWV3X3pvb21fYW5pbWF0ZWRfY3VycmVudChwcml2KTsKLSAgICBzZC0+YXBpLT56
b29tX3dlYWtfc2V0KHNkLCBzZC0+YW5pbWF0ZWRfem9vbS56b29tLmN1cnJlbnQsIGN4LCBjeSk7
CisgICAgc21hcnREYXRhLT5hbmltYXRlZF96b29tLnpvb20uY3VycmVudCA9IF9ld2tfdmlld196
b29tX2FuaW1hdGVkX2N1cnJlbnQocHJpdik7CisgICAgc21hcnREYXRhLT5hcGktPnpvb21fd2Vh
a19zZXQoc21hcnREYXRhLCBzbWFydERhdGEtPmFuaW1hdGVkX3pvb20uem9vbS5jdXJyZW50LCBj
ZW50ZXJYLCBjZW50ZXJZKTsKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCiBzdGF0aWMgdm9p
ZCBfZXdrX3ZpZXdfem9vbV9hbmltYXRpb25fc3RhcnQoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21h
cnREYXRhKQogewogICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHBy
aXYpOwotICAgIGlmIChwcml2LT5hbmltYXRlZF96b29tLmFuaW1hdG9yKQorICAgIGlmIChwcml2
LT5hbmltYXRlZFpvb20uYW5pbWF0b3IpCiAgICAgICAgIHJldHVybjsKLSAgICBwcml2LT5hbmlt
YXRlZF96b29tLmFuaW1hdG9yID0gZWNvcmVfYW5pbWF0b3JfYWRkCisgICAgcHJpdi0+YW5pbWF0
ZWRab29tLmFuaW1hdG9yID0gZWNvcmVfYW5pbWF0b3JfYWRkCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAoX2V3a192aWV3X3pvb21fYW5pbWF0b3JfY2IsIHNtYXJ0RGF0
YSk7CiB9CiAKIHN0YXRpYyBXZWJDb3JlOjpWaWV3cG9ydEF0dHJpYnV0ZXMgX2V3a192aWV3X3Zp
ZXdwb3J0X2F0dHJpYnV0ZXNfY29tcHV0ZShjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsK
LSAgICBFV0tfVklFV19TRF9HRVQoZXdrVmlldywgc2QpOwotICAgIEVXS19WSUVXX1BSSVZfR0VU
KHNkLCBwcml2KTsKKyAgICBFV0tfVklFV19TRF9HRVQoZXdrVmlldywgc21hcnREYXRhKTsKKyAg
ICBFV0tfVklFV19QUklWX0dFVChzbWFydERhdGEsIHByaXYpOwogCi0gICAgaW50IGRlc2t0b3Bf
d2lkdGggPSA5ODA7Ci0gICAgaW50IGRldmljZV9kcGkgPSBld2tfdXRpbF9kcGlfZ2V0KCk7Cisg
ICAgaW50IGRlc2t0b3BXaWR0aCA9IDk4MDsKKyAgICBpbnQgZGV2aWNlRFBJID0gZXdrX3V0aWxf
ZHBpX2dldCgpOwogCi0gICAgV2ViQ29yZTo6SW50UmVjdCBhdmFpbGFibGVfcmVjdCA9IGVuY2xv
c2luZ0ludFJlY3QocHJpdi0+cGFnZS0+Y2hyb21lKCktPmNsaWVudCgpLT5wYWdlUmVjdCgpKTsK
LSAgICBXZWJDb3JlOjpJbnRSZWN0IGRldmljZV9yZWN0ID0gZW5jbG9zaW5nSW50UmVjdChwcml2
LT5wYWdlLT5jaHJvbWUoKS0+Y2xpZW50KCktPndpbmRvd1JlY3QoKSk7CisgICAgV2ViQ29yZTo6
SW50UmVjdCBhdmFpbGFibGVSZWN0ID0gZW5jbG9zaW5nSW50UmVjdChwcml2LT5wYWdlLT5jaHJv
bWUoKS0+Y2xpZW50KCktPnBhZ2VSZWN0KCkpOworICAgIFdlYkNvcmU6OkludFJlY3QgZGV2aWNl
UmVjdCA9IGVuY2xvc2luZ0ludFJlY3QocHJpdi0+cGFnZS0+Y2hyb21lKCktPmNsaWVudCgpLT53
aW5kb3dSZWN0KCkpOwogCi0gICAgV2ViQ29yZTo6Vmlld3BvcnRBdHRyaWJ1dGVzIGF0dHJpYnV0
ZXMgPSBXZWJDb3JlOjpjb21wdXRlVmlld3BvcnRBdHRyaWJ1dGVzKHByaXYtPnZpZXdwb3J0X2Fy
Z3VtZW50cywgZGVza3RvcF93aWR0aCwgZGV2aWNlX3JlY3Qud2lkdGgoKSwgZGV2aWNlX3JlY3Qu
aGVpZ2h0KCksIGRldmljZV9kcGksIGF2YWlsYWJsZV9yZWN0LnNpemUoKSk7CisgICAgV2ViQ29y
ZTo6Vmlld3BvcnRBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMgPSBXZWJDb3JlOjpjb21wdXRlVmlld3Bv
cnRBdHRyaWJ1dGVzKHByaXYtPnZpZXdwb3J0QXJndW1lbnRzLCBkZXNrdG9wV2lkdGgsIGRldmlj
ZVJlY3Qud2lkdGgoKSwgZGV2aWNlUmVjdC5oZWlnaHQoKSwgZGV2aWNlRFBJLCBhdmFpbGFibGVS
ZWN0LnNpemUoKSk7CiAKICAgICByZXR1cm4gYXR0cmlidXRlczsKIH0KQEAgLTExMjMsMTAgKzEx
MjMsMTAgQEAgRWluYV9Cb29sIGV3a192aWV3X2Jhc2Vfc21hcnRfc2V0KEV3a19WaWV3X1NtYXJ0
X0NsYXNzKiBhcGkpCiAKIHZvaWQgZXdrX3ZpZXdfZml4ZWRfbGF5b3V0X3NpemVfc2V0KEV2YXNf
T2JqZWN0KiBld2tWaWV3LCBFdmFzX0Nvb3JkIHdpZHRoLCBFdmFzX0Nvb3JkIGhlaWdodCkKIHsK
LSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkKTsKLSAgICBFV0tfVklF
V19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9S
RVRVUk4oZXdrVmlldywgc21hcnREYXRhKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRV
Uk4oc21hcnREYXRhLCBwcml2KTsKIAotICAgIFdlYkNvcmU6OkZyYW1lVmlldyogdmlldyA9IHBy
aXYtPm1haW5fZnJhbWUtPnZpZXcoKTsKKyAgICBXZWJDb3JlOjpGcmFtZVZpZXcqIHZpZXcgPSBw
cml2LT5tYWluRnJhbWUtPnZpZXcoKTsKICAgICBpZiAod2lkdGggPD0gMCAmJiBoZWlnaHQgPD0g
MCkgewogICAgICAgICBpZiAoIXZpZXctPnVzZUZpeGVkTGF5b3V0KCkpCiAgICAgICAgICAgICBy
ZXR1cm47CkBAIC0xMTUxLDkgKzExNTEsOSBAQCB2b2lkIGV3a192aWV3X2ZpeGVkX2xheW91dF9z
aXplX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldywgRXZhc19Db29yZCogd2lkdAogICAg
ICAgICAqd2lkdGggPSAwOwogICAgIGlmIChoZWlnaHQpCiAgICAgICAgICpoZWlnaHQgPSAwOwot
ICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QpOwotICAgIEVXS19WSUVX
X1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdik7Ci0gICAgV2ViQ29yZTo6RnJhbWVWaWV3KiB2
aWV3ID0gcHJpdi0+bWFpbl9mcmFtZS0+dmlldygpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9S
RVRVUk4oZXdrVmlldywgc21hcnREYXRhKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRV
Uk4oc21hcnREYXRhLCBwcml2KTsKKyAgICBXZWJDb3JlOjpGcmFtZVZpZXcqIHZpZXcgPSBwcml2
LT5tYWluRnJhbWUtPnZpZXcoKTsKICAgICBpZiAodmlldy0+dXNlRml4ZWRMYXlvdXQoKSkgewog
ICAgICAgICBXZWJDb3JlOjpJbnRTaXplIHNpemUgPSB2aWV3LT5maXhlZExheW91dFNpemUoKTsK
ICAgICAgICAgaWYgKHdpZHRoKQpAQCAtMTE2NSwxMiArMTE2NSwxMiBAQCB2b2lkIGV3a192aWV3
X2ZpeGVkX2xheW91dF9zaXplX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldywgRXZhc19D
b29yZCogd2lkdAogCiB2b2lkIGV3a192aWV3X3RoZW1lX3NldChFdmFzX09iamVjdCogZXdrVmll
dywgY29uc3QgY2hhciogcGF0aCkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3
a1ZpZXcsIHNkKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYpOwor
ICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhKTsKKyAgICBF
V0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2KTsKICAgICBpZiAoIWVp
bmFfc3RyaW5nc2hhcmVfcmVwbGFjZSgmcHJpdi0+c2V0dGluZ3MudGhlbWUsIHBhdGgpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBXZWJDb3JlOjpGcmFtZVZpZXcqIHZpZXcgPSBwcml2LT5tYWlu
X2ZyYW1lLT52aWV3KCk7CisgICAgV2ViQ29yZTo6RnJhbWVWaWV3KiB2aWV3ID0gcHJpdi0+bWFp
bkZyYW1lLT52aWV3KCk7CiAgICAgaWYgKHZpZXcpIHsKICAgICAgICAgdmlldy0+c2V0RWRqZVRo
ZW1lKFdURjo6U3RyaW5nKHBhdGgpKTsKICAgICAgICAgcHJpdi0+cGFnZS0+dGhlbWUoKS0+dGhl
bWVDaGFuZ2VkKCk7CkBAIC0xMTgwLDIxICsxMTgwLDIxIEBAIHZvaWQgZXdrX3ZpZXdfdGhlbWVf
c2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBjaGFyKiBwYXRoKQogCiBjb25zdCBjaGFy
KiBld2tfdmlld190aGVtZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAg
RVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgMCk7Ci0gICAgRVdLX1ZJRVdf
UFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCAwKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1Jf
UkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgMCk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1Jf
UkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgMCk7CiAgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLnRo
ZW1lOwogfQogCiBFdmFzX09iamVjdCogZXdrX3ZpZXdfZnJhbWVfbWFpbl9nZXQoY29uc3QgRXZh
c19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tW
aWV3LCBzZCwgMCk7Ci0gICAgcmV0dXJuIHNkLT5tYWluX2ZyYW1lOworICAgIEVXS19WSUVXX1NE
X0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCAwKTsKKyAgICByZXR1cm4gc21hcnRE
YXRhLT5tYWluX2ZyYW1lOwogfQogCiBFdmFzX09iamVjdCogZXdrX3ZpZXdfZnJhbWVfZm9jdXNl
ZF9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihld2tWaWV3LCBzZCwgMCk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVU
VVJOKHNkLCBwcml2LCAwKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcs
IHNtYXJ0RGF0YSwgMCk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0
YSwgcHJpdiwgMCk7CiAKICAgICBXZWJDb3JlOjpGcmFtZSogY29yZSA9IHByaXYtPnBhZ2UtPmZv
Y3VzQ29udHJvbGxlcigpLT5mb2N1c2VkRnJhbWUoKTsKICAgICBpZiAoIWNvcmUpCkBAIC0xMjA4
LDMzICsxMjA4LDMzIEBAIEV2YXNfT2JqZWN0KiBld2tfdmlld19mcmFtZV9mb2N1c2VkX2dldChj
b25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIAogRWluYV9Cb29sIGV3a192aWV3X3VyaV9zZXQo
RXZhc19PYmplY3QqIGV3a1ZpZXcsIGNvbnN0IGNoYXIqIHVyaSkKIHsKLSAgICBFV0tfVklFV19T
RF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICByZXR1cm4gZXdr
X2ZyYW1lX3VyaV9zZXQoc2QtPm1haW5fZnJhbWUsIHVyaSk7CisgICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIHJldHVybiBl
d2tfZnJhbWVfdXJpX3NldChzbWFydERhdGEtPm1haW5fZnJhbWUsIHVyaSk7CiB9CiAKIGNvbnN0
IGNoYXIqIGV3a192aWV3X3VyaV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0g
ICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgMCk7Ci0gICAgcmV0dXJu
IGV3a19mcmFtZV91cmlfZ2V0KHNkLT5tYWluX2ZyYW1lKTsKKyAgICBFV0tfVklFV19TRF9HRVRf
T1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgMCk7CisgICAgcmV0dXJuIGV3a19mcmFtZV91
cmlfZ2V0KHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSk7CiB9CiAKIGNvbnN0IGNoYXIqIGV3a192aWV3
X3RpdGxlX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19T
RF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAwKTsKLSAgICByZXR1cm4gZXdrX2ZyYW1lX3Rp
dGxlX2dldChzZC0+bWFpbl9mcmFtZSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihl
d2tWaWV3LCBzbWFydERhdGEsIDApOworICAgIHJldHVybiBld2tfZnJhbWVfdGl0bGVfZ2V0KHNt
YXJ0RGF0YS0+bWFpbl9mcmFtZSk7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19lZGl0YWJsZV9n
ZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgcmV0dXJuIGV3a19mcmFtZV9l
ZGl0YWJsZV9nZXQoc2QtPm1haW5fZnJhbWUpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRV
Uk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICByZXR1cm4gZXdrX2ZyYW1l
X2VkaXRhYmxlX2dldChzbWFydERhdGEtPm1haW5fZnJhbWUpOwogfQogCiB2b2lkIGV3a192aWV3
X2JnX2NvbG9yX3NldChFdmFzX09iamVjdCogZXdrVmlldywgaW50IHJlZCwgaW50IGdyZWVuLCBp
bnQgYmx1ZSwgaW50IGFscGhhKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdr
Vmlldywgc2QpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGkpOwotICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGktPmJnX2NvbG9yX3NldCk7CisgICAg
RVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEpOworICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+YXBpKTsKKyAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmFwaS0+YmdfY29sb3Jfc2V0KTsKIAogICAgIGlmIChh
bHBoYSA8IDApIHsKICAgICAgICAgV1JOKCJBbHBoYSBsZXNzIHRoYW4gemVybyAoJWQpLiIsIGFs
cGhhKTsKQEAgLTEyNDQsMjggKzEyNDQsMjggQEAgdm9pZCBld2tfdmlld19iZ19jb2xvcl9zZXQo
RXZhc19PYmplY3QqIGV3a1ZpZXcsIGludCByZWQsIGludCBncmVlbiwgaW50IGJsdWUsIGkKICAg
ICAgICAgYWxwaGEgPSAyNTU7CiAgICAgfQogCi0jZGVmaW5lIENIRUNLX1BSRU1VTF9DT0xPUihj
LCBhKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYgKGMg
PCAwKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0gICAgICAgIFdSTigiQ29sb3IgY29tcG9uZW50ICIgI2MgIiBpcyBsZXNzIHRoYW4g
emVybyAoJWQpLiIsIGMpOyAgICAgICAgIFwKLSAgICAgICAgYyA9IDA7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9IGVsc2Ug
aWYgKGMgPiBhKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKLSAgICAgICAgV1JOKCJDb2xvciBjb21wb25lbnQgIiAjYyAiIGlzIGdyZWF0ZXIgdGhh
biBhbHBoYSAoJWQsIGFscGhhPSVkKS4iLCBcCi0gICAgICAgICAgICBjLCBhKTsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGMg
PSBhOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisjZGVmaW5lIENIRUNLX1BSRU1VTF9DT0xPUihjb2xvciwgYWxwaGEpICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoY29sb3IgPCAwKSB7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgICAgIFdSTigiQ29sb3IgY29tcG9uZW50ICIgI2NvbG9yICIgaXMgbGVzcyB0aGFuIHplcm8g
KCVkKS4iLCBjb2xvcik7ICAgICAgICAgXAorICAgICAgICBjb2xvciA9IDA7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IGVs
c2UgaWYgKGNvbG9yID4gYWxwaGEpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgICAgICBXUk4oIkNvbG9yIGNvbXBvbmVudCAiICNjb2xvciAi
IGlzIGdyZWF0ZXIgdGhhbiBhbHBoYSAoJWQsIGFscGhhPSVkKS4iLCBcCisgICAgICAgICAgICBj
b2xvciwgYWxwaGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICAgICAgY29sb3IgPSBhbHBoYTsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIH0KICAgICBDSEVDS19Q
UkVNVUxfQ09MT1IocmVkLCBhbHBoYSk7CiAgICAgQ0hFQ0tfUFJFTVVMX0NPTE9SKGdyZWVuLCBh
bHBoYSk7CiAgICAgQ0hFQ0tfUFJFTVVMX0NPTE9SKGJsdWUsIGFscGhhKTsKICN1bmRlZiBDSEVD
S19QUkVNVUxfQ09MT1IKIAotICAgIHNkLT5iZ19jb2xvci5yID0gcmVkOwotICAgIHNkLT5iZ19j
b2xvci5nID0gZ3JlZW47Ci0gICAgc2QtPmJnX2NvbG9yLmIgPSBibHVlOwotICAgIHNkLT5iZ19j
b2xvci5hID0gYWxwaGE7CisgICAgc21hcnREYXRhLT5iZ19jb2xvci5yID0gcmVkOworICAgIHNt
YXJ0RGF0YS0+YmdfY29sb3IuZyA9IGdyZWVuOworICAgIHNtYXJ0RGF0YS0+YmdfY29sb3IuYiA9
IGJsdWU7CisgICAgc21hcnREYXRhLT5iZ19jb2xvci5hID0gYWxwaGE7CiAKLSAgICBzZC0+YXBp
LT5iZ19jb2xvcl9zZXQoc2QsIHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKTsKKyAgICBzbWFydERh
dGEtPmFwaS0+YmdfY29sb3Jfc2V0KHNtYXJ0RGF0YSwgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEp
OwogCi0gICAgV2ViQ29yZTo6RnJhbWVWaWV3KiB2aWV3ID0gc2QtPl9wcml2LT5tYWluX2ZyYW1l
LT52aWV3KCk7CisgICAgV2ViQ29yZTo6RnJhbWVWaWV3KiB2aWV3ID0gc21hcnREYXRhLT5fcHJp
di0+bWFpbkZyYW1lLT52aWV3KCk7CiAgICAgaWYgKHZpZXcpIHsKICAgICAgICAgV2ViQ29yZTo6
Q29sb3IgY29sb3I7CiAKQEAgLTEyOTAsMjEgKzEyOTAsMjEgQEAgdm9pZCBld2tfdmlld19iZ19j
b2xvcl9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcsIGludCogcmVkLCBpbnQqIGdyZWVu
LCBpbnQKICAgICAgICAgKmJsdWUgPSAwOwogICAgIGlmIChhbHBoYSkKICAgICAgICAgKmFscGhh
ID0gMDsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkKTsKKyAgICBF
V0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSk7CiAgICAgaWYgKHJl
ZCkKLSAgICAgICAgKnJlZCA9IHNkLT5iZ19jb2xvci5yOworICAgICAgICAqcmVkID0gc21hcnRE
YXRhLT5iZ19jb2xvci5yOwogICAgIGlmIChncmVlbikKLSAgICAgICAgKmdyZWVuID0gc2QtPmJn
X2NvbG9yLmc7CisgICAgICAgICpncmVlbiA9IHNtYXJ0RGF0YS0+YmdfY29sb3IuZzsKICAgICBp
ZiAoYmx1ZSkKLSAgICAgICAgKmJsdWUgPSBzZC0+YmdfY29sb3IuYjsKKyAgICAgICAgKmJsdWUg
PSBzbWFydERhdGEtPmJnX2NvbG9yLmI7CiAgICAgaWYgKGFscGhhKQotICAgICAgICAqYWxwaGEg
PSBzZC0+YmdfY29sb3IuYTsKKyAgICAgICAgKmFscGhhID0gc21hcnREYXRhLT5iZ19jb2xvci5h
OwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfdGV4dF9zZWFyY2goY29uc3QgRXZhc19PYmplY3Qq
IGV3a1ZpZXcsIGNvbnN0IGNoYXIqIHN0cmluZywgRWluYV9Cb29sIGNhc2VTZW5zaXRpdmUsIEVp
bmFfQm9vbCBmb3J3YXJkLCBFaW5hX0Jvb2wgd3JhcCkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRf
T1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dF
VF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9P
Ul9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19Q
UklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc3RyaW5nLCBFSU5BX0ZBTFNFKTsKICAgICBXVEY6
OlRleHRDYXNlU2Vuc2l0aXZpdHkgc2Vuc2l0aXZlOwogICAgIFdlYkNvcmU6OkZpbmREaXJlY3Rp
b24gZGlyZWN0aW9uOwpAQCAtMTMyNSwxOCArMTMyNSwxOCBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdf
dGV4dF9zZWFyY2goY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcsIGNvbnN0IGNoYXIqIHN0cmlu
ZywgRQogLyoqCiAgKiBNYXJrIG1hdGNoZXMgdGhlIGdpdmVuIHRleHQgc3RyaW5nIGluIGRvY3Vt
ZW50LgogICoKLSAqIEBwYXJhbSBvIHZpZXcgb2JqZWN0IHdoZXJlIHRvIHNlYXJjaCB0ZXh0Lgor
ICogQHBhcmFtIGV3a1ZpZXcgdmlldyBvYmplY3Qgd2hlcmUgdG8gc2VhcmNoIHRleHQuCiAgKiBA
cGFyYW0gc3RyaW5nIHJlZmVyZW5jZSBzdHJpbmcgdG8gbWF0Y2guCiAgKiBAcGFyYW0gY2FzZVNl
bnNpdGl2ZSBpZiBtYXRjaCBzaG91bGQgYmUgY2FzZSBzZW5zaXRpdmUgb3Igbm90LgotICogQHBh
cmFtIGhpZ2hsaWdodCBpZiBtYXRjaGVzIHNob3VsZCBiZSBoaWdobGlnaHRlZC4KKyAqIEBwYXJh
bSBoZWlnaHRpZ2hsaWdodCBpZiBtYXRjaGVzIHNob3VsZCBiZSBoaWdobGlnaHRlZC4KICAqIEBw
YXJhbSBsaW1pdCBtYXhpbXVtIGFtb3VudCBvZiBtYXRjaGVzLCBvciB6ZXJvIHRvIHVubGltaXRl
ZC4KICAqCiAgKiBAcmV0dXJuIG51bWJlciBvZiBtYXRjaGVzLgogICovCiB1bnNpZ25lZCBpbnQg
ZXdrX3ZpZXdfdGV4dF9tYXRjaGVzX21hcmsoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGNvbnN0IGNo
YXIqIHN0cmluZywgRWluYV9Cb29sIGNhc2VTZW5zaXRpdmUsIEVpbmFfQm9vbCBoaWdobGlnaHQs
IHVuc2lnbmVkIGludCBsaW1pdCkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3
a1ZpZXcsIHNkLCAwKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYs
IDApOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCAw
KTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCAwKTsK
ICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc3RyaW5nLCAwKTsKICAgICBXVEY6
OlRleHRDYXNlU2Vuc2l0aXZpdHkgc2Vuc2l0aXZlOwogCkBAIC0xMzUwLDM4ICsxMzUwLDM4IEBA
IHVuc2lnbmVkIGludCBld2tfdmlld190ZXh0X21hdGNoZXNfbWFyayhFdmFzX09iamVjdCogZXdr
VmlldywgY29uc3QgY2hhciogc3RyaW5nCiAKIEVpbmFfQm9vbCBld2tfdmlld190ZXh0X21hdGNo
ZXNfdW5tYXJrX2FsbChFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9H
RVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklW
X0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dF
VF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklF
V19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBw
cml2LT5wYWdlLT51bm1hcmtBbGxUZXh0TWF0Y2hlcygpOwogICAgIHJldHVybiBFSU5BX1RSVUU7
CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld190ZXh0X21hdGNoZXNfaGlnaGxpZ2h0X3NldChFdmFz
X09iamVjdCogZXdrVmlldywgRWluYV9Cb29sIGhpZ2hsaWdodCkKIHsKLSAgICBFV0tfVklFV19T
RF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICByZXR1cm4gZXdr
X2ZyYW1lX3RleHRfbWF0Y2hlc19oaWdobGlnaHRfc2V0KHNkLT5tYWluX2ZyYW1lLCBoaWdobGln
aHQpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBF
SU5BX0ZBTFNFKTsKKyAgICByZXR1cm4gZXdrX2ZyYW1lX3RleHRfbWF0Y2hlc19oaWdobGlnaHRf
c2V0KHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSwgaGlnaGxpZ2h0KTsKIH0KIAogRWluYV9Cb29sIGV3
a192aWV3X3RleHRfbWF0Y2hlc19oaWdobGlnaHRfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tW
aWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFf
RkFMU0UpOwotICAgIHJldHVybiBld2tfZnJhbWVfdGV4dF9tYXRjaGVzX2hpZ2hsaWdodF9nZXQo
c2QtPm1haW5fZnJhbWUpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywg
c21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICByZXR1cm4gZXdrX2ZyYW1lX3RleHRfbWF0Y2hl
c19oaWdobGlnaHRfZ2V0KHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSk7CiB9CiAKIEVpbmFfQm9vbCBl
d2tfdmlld19lZGl0YWJsZV9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCBlZGl0
YWJsZSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5B
X0ZBTFNFKTsKLSAgICByZXR1cm4gZXdrX2ZyYW1lX2VkaXRhYmxlX3NldChzZC0+bWFpbl9mcmFt
ZSwgZWRpdGFibGUpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21h
cnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICByZXR1cm4gZXdrX2ZyYW1lX2VkaXRhYmxlX3NldChz
bWFydERhdGEtPm1haW5fZnJhbWUsIGVkaXRhYmxlKTsKIH0KIAogY2hhciogZXdrX3ZpZXdfc2Vs
ZWN0aW9uX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19T
RF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAwKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9P
Ul9SRVRVUk4oc2QsIHByaXYsIDApOwotICAgIENTdHJpbmcgcyA9IHByaXYtPnBhZ2UtPmZvY3Vz
Q29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKS0+ZWRpdG9yKCktPnNlbGVjdGVkVGV4
dCgpLnV0ZjgoKTsKLSAgICBpZiAocy5pc051bGwoKSkKKyAgICBFV0tfVklFV19TRF9HRVRfT1Jf
UkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgMCk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1Jf
UkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgMCk7CisgICAgQ1N0cmluZyBzZWxlY3RlZFN0cmluZyA9
IHByaXYtPnBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLT5mb2N1c2VkT3JNYWluRnJhbWUoKS0+ZWRp
dG9yKCktPnNlbGVjdGVkVGV4dCgpLnV0ZjgoKTsKKyAgICBpZiAoc2VsZWN0ZWRTdHJpbmcuaXNO
dWxsKCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBzdHJkdXAocy5kYXRhKCkpOwor
ICAgIHJldHVybiBzdHJkdXAoc2VsZWN0ZWRTdHJpbmcuZGF0YSgpKTsKIH0KIAogc3RhdGljIEVp
bmFfQm9vbCBfZXdrX3ZpZXdfZWRpdG9yX2NvbW1hbmQoRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKiBw
cml2LCBjb25zdCBjaGFyKiBjb21tYW5kLCBjb25zdCBjaGFyKiB2YWx1ZSA9IDApCkBAIC0xMzkx
LDggKzEzOTEsOCBAQCBzdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19lZGl0b3JfY29tbWFuZChF
d2tfVmlld19Qcml2YXRlX0RhdGEqIHByaXYsIGNvbnN0IGNoYQogCiBFaW5hX0Jvb2wgZXdrX3Zp
ZXdfZXhlY3V0ZV9lZGl0b3JfY29tbWFuZChFdmFzX09iamVjdCogZXdrVmlldywgY29uc3QgRXdr
X0VkaXRvcl9Db21tYW5kIGNvbW1hbmQsIGNvbnN0IGNoYXIqIHZhbHVlKQogewotICAgIEVXS19W
SUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19W
SUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJ
RVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAg
IEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0Up
OwogCiAgICAgc3dpdGNoIChjb21tYW5kKSB7CiAgICAgY2FzZSBFV0tfRURJVE9SX0NPTU1BTkRf
SU5TRVJUX0lNQUdFOgpAQCAtMTQxOSwyMyArMTQxOSwyMyBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdf
ZXhlY3V0ZV9lZGl0b3JfY29tbWFuZChFdmFzX09iamVjdCogZXdrVmlldywgY29uc3QgRXdrX0Vk
aXRvcgogRWluYV9Cb29sIGV3a192aWV3X2NvbnRleHRfbWVudV9mb3J3YXJkX2V2ZW50KEV2YXNf
T2JqZWN0KiBld2tWaWV3LCBjb25zdCBFdmFzX0V2ZW50X01vdXNlX0Rvd24qIGRvd25FdmVudCkK
IHsKICNpZiBFTkFCTEUoQ09OVEVYVF9NRU5VUykKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVU
VVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9S
RVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRV
Uk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dF
VF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBFaW5hX0Jvb2wg
bW91c2VfcHJlc3NfaGFuZGxlZCA9IEVJTkFfRkFMU0U7CiAKICAgICBwcml2LT5wYWdlLT5jb250
ZXh0TWVudUNvbnRyb2xsZXIoKS0+Y2xlYXJDb250ZXh0TWVudSgpOwotICAgIFdlYkNvcmU6OkZy
YW1lKiBtYWluX2ZyYW1lID0gcHJpdi0+cGFnZS0+bWFpbkZyYW1lKCk7CisgICAgV2ViQ29yZTo6
RnJhbWUqIG1haW5GcmFtZSA9IHByaXYtPnBhZ2UtPm1haW5GcmFtZSgpOwogICAgIEV2YXNfQ29v
cmQgeCwgeTsKLSAgICBldmFzX29iamVjdF9nZW9tZXRyeV9nZXQoc2QtPnNlbGYsICZ4LCAmeSwg
MCwgMCk7CisgICAgZXZhc19vYmplY3RfZ2VvbWV0cnlfZ2V0KHNtYXJ0RGF0YS0+c2VsZiwgJngs
ICZ5LCAwLCAwKTsKIAogICAgIFdlYkNvcmU6OlBsYXRmb3JtTW91c2VFdmVudCBldmVudChkb3du
RXZlbnQsIFdlYkNvcmU6OkludFBvaW50KHgsIHkpKTsKIAotICAgIGlmIChtYWluX2ZyYW1lLT52
aWV3KCkpIHsKKyAgICBpZiAobWFpbkZyYW1lLT52aWV3KCkpIHsKICAgICAgICAgbW91c2VfcHJl
c3NfaGFuZGxlZCA9Ci0gICAgICAgICAgICBtYWluX2ZyYW1lLT5ldmVudEhhbmRsZXIoKS0+aGFu
ZGxlTW91c2VQcmVzc0V2ZW50KGV2ZW50KTsKKyAgICAgICAgICAgIG1haW5GcmFtZS0+ZXZlbnRI
YW5kbGVyKCktPmhhbmRsZU1vdXNlUHJlc3NFdmVudChldmVudCk7CiAgICAgfQogCi0gICAgaWYg
KG1haW5fZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5zZW5kQ29udGV4dE1lbnVFdmVudChldmVudCkp
CisgICAgaWYgKG1haW5GcmFtZS0+ZXZlbnRIYW5kbGVyKCktPnNlbmRDb250ZXh0TWVudUV2ZW50
KGV2ZW50KSkKICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CiAKICAgICBXZWJDb3JlOjpDb250
ZXh0TWVudSogY29yZU1lbnUgPQpAQCAtMTQ1NCw4NCArMTQ1NCw4NCBAQCBFaW5hX0Jvb2wgZXdr
X3ZpZXdfY29udGV4dF9tZW51X2ZvcndhcmRfZXZlbnQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGNv
bnN0IEV2YXNfRQogCiBkb3VibGUgZXdrX3ZpZXdfbG9hZF9wcm9ncmVzc19nZXQoY29uc3QgRXZh
c19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tW
aWV3LCBzZCwgLTEuMCk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2
LCAtMS4wKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0
YSwgLTEuMCk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJp
diwgLTEuMCk7CiAgICAgcmV0dXJuIHByaXYtPnBhZ2UtPnByb2dyZXNzKCktPmVzdGltYXRlZFBy
b2dyZXNzKCk7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19zdG9wKEV2YXNfT2JqZWN0KiBld2tW
aWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFf
RkFMU0UpOwotICAgIHJldHVybiBld2tfZnJhbWVfc3RvcChzZC0+bWFpbl9mcmFtZSk7CisgICAg
RVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0Up
OworICAgIHJldHVybiBld2tfZnJhbWVfc3RvcChzbWFydERhdGEtPm1haW5fZnJhbWUpOwogfQog
CiBFaW5hX0Jvb2wgZXdrX3ZpZXdfcmVsb2FkKEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAg
IEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAg
IHJldHVybiBld2tfZnJhbWVfcmVsb2FkKHNkLT5tYWluX2ZyYW1lKTsKKyAgICBFV0tfVklFV19T
RF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgcmV0
dXJuIGV3a19mcmFtZV9yZWxvYWQoc21hcnREYXRhLT5tYWluX2ZyYW1lKTsKIH0KIAogRWluYV9C
b29sIGV3a192aWV3X3JlbG9hZF9mdWxsKEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIHJl
dHVybiBld2tfZnJhbWVfcmVsb2FkX2Z1bGwoc2QtPm1haW5fZnJhbWUpOworICAgIEVXS19WSUVX
X1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBy
ZXR1cm4gZXdrX2ZyYW1lX3JlbG9hZF9mdWxsKHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSk7CiB9CiAK
IEVpbmFfQm9vbCBld2tfdmlld19iYWNrKEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIHJl
dHVybiBld2tfZnJhbWVfYmFjayhzZC0+bWFpbl9mcmFtZSk7CisgICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIHJldHVybiBl
d2tfZnJhbWVfYmFjayhzbWFydERhdGEtPm1haW5fZnJhbWUpOwogfQogCiBFaW5hX0Jvb2wgZXdr
X3ZpZXdfZm9yd2FyZChFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9H
RVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICByZXR1cm4gZXdrX2Zy
YW1lX2ZvcndhcmQoc2QtPm1haW5fZnJhbWUpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRV
Uk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICByZXR1cm4gZXdrX2ZyYW1l
X2ZvcndhcmQoc21hcnREYXRhLT5tYWluX2ZyYW1lKTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3
X25hdmlnYXRlKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBpbnQgc3RlcHMpCiB7Ci0gICAgRVdLX1ZJ
RVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgcmV0dXJu
IGV3a19mcmFtZV9uYXZpZ2F0ZShzZC0+bWFpbl9mcmFtZSwgc3RlcHMpOworICAgIEVXS19WSUVX
X1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBy
ZXR1cm4gZXdrX2ZyYW1lX25hdmlnYXRlKHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSwgc3RlcHMpOwog
fQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfYmFja19wb3NzaWJsZShFdmFzX09iamVjdCogZXdrVmll
dykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZB
TFNFKTsKLSAgICByZXR1cm4gZXdrX2ZyYW1lX2JhY2tfcG9zc2libGUoc2QtPm1haW5fZnJhbWUp
OworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5B
X0ZBTFNFKTsKKyAgICByZXR1cm4gZXdrX2ZyYW1lX2JhY2tfcG9zc2libGUoc21hcnREYXRhLT5t
YWluX2ZyYW1lKTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X2ZvcndhcmRfcG9zc2libGUoRXZh
c19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tW
aWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgcmV0dXJuIGV3a19mcmFtZV9mb3J3YXJkX3Bvc3Np
YmxlKHNkLT5tYWluX2ZyYW1lKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1Zp
ZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgcmV0dXJuIGV3a19mcmFtZV9mb3J3YXJk
X3Bvc3NpYmxlKHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSk7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmll
d19uYXZpZ2F0ZV9wb3NzaWJsZShFdmFzX09iamVjdCogZXdrVmlldywgaW50IHN0ZXBzKQogewot
ICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwot
ICAgIHJldHVybiBld2tfZnJhbWVfbmF2aWdhdGVfcG9zc2libGUoc2QtPm1haW5fZnJhbWUsIHN0
ZXBzKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwg
RUlOQV9GQUxTRSk7CisgICAgcmV0dXJuIGV3a19mcmFtZV9uYXZpZ2F0ZV9wb3NzaWJsZShzbWFy
dERhdGEtPm1haW5fZnJhbWUsIHN0ZXBzKTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X2hpc3Rv
cnlfZW5hYmxlX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklF
V19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklF
V19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVX
X1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBF
V0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsK
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6QmFja0ZvcndhcmRMaXN0SW1wbCo+KHBy
aXYtPnBhZ2UtPmJhY2tGb3J3YXJkTGlzdCgpKS0+ZW5hYmxlZCgpOwogfQogCiBFaW5hX0Jvb2wg
ZXdrX3ZpZXdfaGlzdG9yeV9lbmFibGVfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jv
b2wgZW5hYmxlKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2Qs
IEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwg
RUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFy
dERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFy
dERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIHN0YXRpY19jYXN0PFdlYkNvcmU6OkJhY2tG
b3J3YXJkTGlzdEltcGwqPihwcml2LT5wYWdlLT5iYWNrRm9yd2FyZExpc3QoKSktPnNldEVuYWJs
ZWQoZW5hYmxlKTsKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCiBFd2tfSGlzdG9yeSogZXdr
X3ZpZXdfaGlzdG9yeV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdL
X1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgMCk7Ci0gICAgRVdLX1ZJRVdfUFJJ
Vl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCAwKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVU
VVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgMCk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVU
VVJOKHNtYXJ0RGF0YSwgcHJpdiwgMCk7CiAgICAgaWYgKCFzdGF0aWNfY2FzdDxXZWJDb3JlOjpC
YWNrRm9yd2FyZExpc3RJbXBsKj4ocHJpdi0+cGFnZS0+YmFja0ZvcndhcmRMaXN0KCkpLT5lbmFi
bGVkKCkpIHsKICAgICAgICAgRVJSKCJhc2tlZCBoaXN0b3J5LCBidXQgaXQncyBkaXNhYmxlZCEg
UmV0dXJuaW5nIDAhIik7CiAgICAgICAgIHJldHVybiAwOwpAQCAtMTU0MSwxODYgKzE1NDEsMTg2
IEBAIEV3a19IaXN0b3J5KiBld2tfdmlld19oaXN0b3J5X2dldChjb25zdCBFdmFzX09iamVjdCog
ZXdrVmlldykKIAogZmxvYXQgZXdrX3ZpZXdfem9vbV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3
a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgLTEu
MCk7Ci0gICAgcmV0dXJuIGV3a19mcmFtZV9wYWdlX3pvb21fZ2V0KHNkLT5tYWluX2ZyYW1lKTsK
KyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgLTEuMCk7
CisgICAgcmV0dXJuIGV3a19mcmFtZV9wYWdlX3pvb21fZ2V0KHNtYXJ0RGF0YS0+bWFpbl9mcmFt
ZSk7CiB9CiAKLUVpbmFfQm9vbCBld2tfdmlld196b29tX3NldChFdmFzX09iamVjdCogZXdrVmll
dywgZmxvYXQgem9vbSwgRXZhc19Db29yZCBjeCwgRXZhc19Db29yZCBjeSkKK0VpbmFfQm9vbCBl
d2tfdmlld196b29tX3NldChFdmFzX09iamVjdCogZXdrVmlldywgZmxvYXQgem9vbSwgRXZhc19D
b29yZCBjZW50ZXJYLCBFdmFzX0Nvb3JkIGNlbnRlclkpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9H
RVQoc2QsIHByaXYpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21h
cnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVChzbWFydERhdGEsIHBy
aXYpOwogCi0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5hcGksIEVJTkFf
RkFMU0UpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+YXBpLT56b29t
X3NldCwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNt
YXJ0RGF0YS0+YXBpLCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
Tl9WQUwoc21hcnREYXRhLT5hcGktPnpvb21fc2V0LCBFSU5BX0ZBTFNFKTsKIAotICAgIGlmICgh
cHJpdi0+c2V0dGluZ3Muem9vbV9yYW5nZS51c2VyX3NjYWxhYmxlKSB7CisgICAgaWYgKCFwcml2
LT5zZXR0aW5ncy56b29tUmFuZ2UudXNlclNjYWxhYmxlKSB7CiAgICAgICAgIFdSTigidXNlclNj
YWxhYmxlIGlzIGZhbHNlIik7CiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwogICAgIH0KIAot
ICAgIGlmICh6b29tIDwgcHJpdi0+c2V0dGluZ3Muem9vbV9yYW5nZS5taW5fc2NhbGUpIHsKLSAg
ICAgICAgV1JOKCJ6b29tIGxldmVsIGlzIDwgJWYgOiAlZiIsIHByaXYtPnNldHRpbmdzLnpvb21f
cmFuZ2UubWluX3NjYWxlLCB6b29tKTsKKyAgICBpZiAoem9vbSA8IHByaXYtPnNldHRpbmdzLnpv
b21SYW5nZS5taW5TY2FsZSkgeworICAgICAgICBXUk4oInpvb20gbGV2ZWwgaXMgPCAlZiA6ICVm
IiwgcHJpdi0+c2V0dGluZ3Muem9vbVJhbmdlLm1pblNjYWxlLCB6b29tKTsKICAgICAgICAgcmV0
dXJuIEVJTkFfRkFMU0U7CiAgICAgfQotICAgIGlmICh6b29tID4gcHJpdi0+c2V0dGluZ3Muem9v
bV9yYW5nZS5tYXhfc2NhbGUpIHsKLSAgICAgICAgV1JOKCJ6b29tIGxldmVsIGlzID4gJWYgOiAl
ZiIsIHByaXYtPnNldHRpbmdzLnpvb21fcmFuZ2UubWF4X3NjYWxlLCB6b29tKTsKKyAgICBpZiAo
em9vbSA+IHByaXYtPnNldHRpbmdzLnpvb21SYW5nZS5tYXhTY2FsZSkgeworICAgICAgICBXUk4o
Inpvb20gbGV2ZWwgaXMgPiAlZiA6ICVmIiwgcHJpdi0+c2V0dGluZ3Muem9vbVJhbmdlLm1heFNj
YWxlLCB6b29tKTsKICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CiAgICAgfQogCi0gICAgX2V3
a192aWV3X3pvb21fYW5pbWF0ZWRfbWFya19zdG9wKHNkKTsKLSAgICByZXR1cm4gc2QtPmFwaS0+
em9vbV9zZXQoc2QsIHpvb20sIGN4LCBjeSk7CisgICAgX2V3a192aWV3X3pvb21fYW5pbWF0ZWRf
bWFya19zdG9wKHNtYXJ0RGF0YSk7CisgICAgcmV0dXJuIHNtYXJ0RGF0YS0+YXBpLT56b29tX3Nl
dChzbWFydERhdGEsIHpvb20sIGNlbnRlclgsIGNlbnRlclkpOwogfQogCiBmbG9hdCBld2tfdmll
d19wYWdlX3pvb21fZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19W
SUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIC0xLjApOwotICAgIHJldHVybiBld2tf
ZnJhbWVfcGFnZV96b29tX2dldChzZC0+bWFpbl9mcmFtZSk7CisgICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIC0xLjApOworICAgIHJldHVybiBld2tfZnJh
bWVfcGFnZV96b29tX2dldChzbWFydERhdGEtPm1haW5fZnJhbWUpOwogfQogCiBFaW5hX0Jvb2wg
ZXdrX3ZpZXdfcGFnZV96b29tX3NldChFdmFzX09iamVjdCogZXdrVmlldywgZmxvYXQgcGFnZVpv
b21GYWN0b3IpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwg
RUlOQV9GQUxTRSk7Ci0gICAgcmV0dXJuIGV3a19mcmFtZV9wYWdlX3pvb21fc2V0KHNkLT5tYWlu
X2ZyYW1lLCBwYWdlWm9vbUZhY3Rvcik7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihl
d2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIHJldHVybiBld2tfZnJhbWVfcGFn
ZV96b29tX3NldChzbWFydERhdGEtPm1haW5fZnJhbWUsIHBhZ2Vab29tRmFjdG9yKTsKIH0KIAog
ZmxvYXQgZXdrX3ZpZXdfc2NhbGVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewot
ICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIC0xLjApOwotICAgIEVX
S19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgLTEuMCk7CisgICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIC0xLjApOworICAgIEVXS19WSUVX
X1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIC0xLjApOwogICAgIHJldHVybiBw
cml2LT5wYWdlLT5wYWdlU2NhbGVGYWN0b3IoKTsKIH0KIAotRWluYV9Cb29sIGV3a192aWV3X3Nj
YWxlX3NldChFdmFzX09iamVjdCogZXdrVmlldywgZmxvYXQgc2NhbGVGYWN0b3IsIEV2YXNfQ29v
cmQgY3gsIEV2YXNfQ29vcmQgY3kpCitFaW5hX0Jvb2wgZXdrX3ZpZXdfc2NhbGVfc2V0KEV2YXNf
T2JqZWN0KiBld2tWaWV3LCBmbG9hdCBzY2FsZUZhY3RvciwgRXZhc19Db29yZCBjZW50ZXJYLCBF
dmFzX0Nvb3JkIGNlbnRlclkpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tW
aWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNk
LCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1Zp
ZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVU
VVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CiAKICAgICBmbG9hdCBjdXJyZW50U2Nh
bGVGYWN0b3IgPSBld2tfdmlld19zY2FsZV9nZXQoZXdrVmlldyk7CiAgICAgaWYgKGN1cnJlbnRT
Y2FsZUZhY3RvciA9PSAtMSkKICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CiAKICAgICBpbnQg
eCwgeTsKLSAgICBld2tfZnJhbWVfc2Nyb2xsX3Bvc19nZXQoc2QtPm1haW5fZnJhbWUsICZ4LCAm
eSk7CisgICAgZXdrX2ZyYW1lX3Njcm9sbF9wb3NfZ2V0KHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSwg
JngsICZ5KTsKIAotICAgIHggPSBzdGF0aWNfY2FzdDxpbnQ+KCgoeCArIGN4KSAvIGN1cnJlbnRT
Y2FsZUZhY3RvcikgKiBzY2FsZUZhY3RvcikgLSBjeDsKLSAgICB5ID0gc3RhdGljX2Nhc3Q8aW50
PigoKHkgKyBjeSkgLyBjdXJyZW50U2NhbGVGYWN0b3IpICogc2NhbGVGYWN0b3IpIC0gY3k7Cisg
ICAgeCA9IHN0YXRpY19jYXN0PGludD4oKCh4ICsgY2VudGVyWCkgLyBjdXJyZW50U2NhbGVGYWN0
b3IpICogc2NhbGVGYWN0b3IpIC0gY2VudGVyWDsKKyAgICB5ID0gc3RhdGljX2Nhc3Q8aW50Pigo
KHkgKyBjZW50ZXJZKSAvIGN1cnJlbnRTY2FsZUZhY3RvcikgKiBzY2FsZUZhY3RvcikgLSBjZW50
ZXJZOwogICAgIHByaXYtPnBhZ2UtPnNldFBhZ2VTY2FsZUZhY3RvcihzY2FsZUZhY3RvciwgV2Vi
Q29yZTo6TGF5b3V0UG9pbnQoeCwgeSkpOwogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKIGZs
b2F0IGV3a192aWV3X3RleHRfem9vbV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7
Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgLTEuMCk7Ci0gICAg
cmV0dXJuIGV3a19mcmFtZV90ZXh0X3pvb21fZ2V0KHNkLT5tYWluX2ZyYW1lKTsKKyAgICBFV0tf
VklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgLTEuMCk7CisgICAgcmV0
dXJuIGV3a19mcmFtZV90ZXh0X3pvb21fZ2V0KHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSk7CiB9CiAK
IEVpbmFfQm9vbCBld2tfdmlld190ZXh0X3pvb21fc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBm
bG9hdCB0ZXh0Wm9vbUZhY3RvcikKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3
a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICByZXR1cm4gZXdrX2ZyYW1lX3RleHRfem9vbV9z
ZXQoc2QtPm1haW5fZnJhbWUsIHRleHRab29tRmFjdG9yKTsKKyAgICBFV0tfVklFV19TRF9HRVRf
T1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgcmV0dXJuIGV3
a19mcmFtZV90ZXh0X3pvb21fc2V0KHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSwgdGV4dFpvb21GYWN0
b3IpOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfem9vbV93ZWFrX3Ntb290aF9zY2FsZV9nZXQo
Y29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JF
VFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgcmV0dXJuIHNkLT56b29tX3dlYWtf
c21vb3RoX3NjYWxlOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21h
cnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICByZXR1cm4gc21hcnREYXRhLT56b29tX3dlYWtfc21v
b3RoX3NjYWxlOwogfQogCiB2b2lkIGV3a192aWV3X3pvb21fd2Vha19zbW9vdGhfc2NhbGVfc2V0
KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wgc21vb3RoU2NhbGUpCiB7Ci0gICAgRVdL
X1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCk7CisgICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEpOwogICAgIHNtb290aFNjYWxlID0gISFzbW9v
dGhTY2FsZTsKLSAgICBpZiAoc2QtPnpvb21fd2Vha19zbW9vdGhfc2NhbGUgPT0gc21vb3RoU2Nh
bGUpCisgICAgaWYgKHNtYXJ0RGF0YS0+em9vbV93ZWFrX3Ntb290aF9zY2FsZSA9PSBzbW9vdGhT
Y2FsZSkKICAgICAgICAgcmV0dXJuOwotICAgIHNkLT56b29tX3dlYWtfc21vb3RoX3NjYWxlID0g
c21vb3RoU2NhbGU7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFwaSk7Ci0g
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFwaS0+em9vbV93ZWFrX3Ntb290aF9z
Y2FsZV9zZXQpOwotICAgIHNkLT5hcGktPnpvb21fd2Vha19zbW9vdGhfc2NhbGVfc2V0KHNkLCBz
bW9vdGhTY2FsZSk7CisgICAgc21hcnREYXRhLT56b29tX3dlYWtfc21vb3RoX3NjYWxlID0gc21v
b3RoU2NhbGU7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRhLT5hcGkp
OworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+YXBpLT56b29tX3dl
YWtfc21vb3RoX3NjYWxlX3NldCk7CisgICAgc21hcnREYXRhLT5hcGktPnpvb21fd2Vha19zbW9v
dGhfc2NhbGVfc2V0KHNtYXJ0RGF0YSwgc21vb3RoU2NhbGUpOwogfQogCiBFaW5hX0Jvb2wgZXdr
X3ZpZXdfem9vbV93ZWFrX3NldChFdmFzX09iamVjdCogZXdrVmlldywgZmxvYXQgem9vbSwgRXZh
c19Db29yZCBjZW50ZXJYLCBFdmFzX0Nvb3JkIGNlbnRlclkpCiB7Ci0gICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJ
Vl9HRVQoc2QsIHByaXYpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywg
c21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVChzbWFydERhdGEs
IHByaXYpOwogCi0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5hcGksIEVJ
TkFfRkFMU0UpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+YXBpLT56
b29tX3dlYWtfc2V0LCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
Tl9WQUwoc21hcnREYXRhLT5hcGksIEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmFwaS0+em9vbV93ZWFrX3NldCwgRUlOQV9GQUxTRSk7
CiAKLSAgICBpZiAoIXByaXYtPnNldHRpbmdzLnpvb21fcmFuZ2UudXNlcl9zY2FsYWJsZSkgewor
ICAgIGlmICghcHJpdi0+c2V0dGluZ3Muem9vbVJhbmdlLnVzZXJTY2FsYWJsZSkgewogICAgICAg
ICBXUk4oInVzZXJTY2FsYWJsZSBpcyBmYWxzZSIpOwogICAgICAgICByZXR1cm4gRUlOQV9GQUxT
RTsKICAgICB9CiAKLSAgICBpZiAoem9vbSA8IHByaXYtPnNldHRpbmdzLnpvb21fcmFuZ2UubWlu
X3NjYWxlKSB7Ci0gICAgICAgIFdSTigiem9vbSBsZXZlbCBpcyA8ICVmIDogJWYiLCBwcml2LT5z
ZXR0aW5ncy56b29tX3JhbmdlLm1pbl9zY2FsZSwgem9vbSk7CisgICAgaWYgKHpvb20gPCBwcml2
LT5zZXR0aW5ncy56b29tUmFuZ2UubWluU2NhbGUpIHsKKyAgICAgICAgV1JOKCJ6b29tIGxldmVs
IGlzIDwgJWYgOiAlZiIsIHByaXYtPnNldHRpbmdzLnpvb21SYW5nZS5taW5TY2FsZSwgem9vbSk7
CiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwogICAgIH0KLSAgICBpZiAoem9vbSA+IHByaXYt
PnNldHRpbmdzLnpvb21fcmFuZ2UubWF4X3NjYWxlKSB7Ci0gICAgICAgIFdSTigiem9vbSBsZXZl
bCBpcyA+ICVmIDogJWYiLCBwcml2LT5zZXR0aW5ncy56b29tX3JhbmdlLm1heF9zY2FsZSwgem9v
bSk7CisgICAgaWYgKHpvb20gPiBwcml2LT5zZXR0aW5ncy56b29tUmFuZ2UubWF4U2NhbGUpIHsK
KyAgICAgICAgV1JOKCJ6b29tIGxldmVsIGlzID4gJWYgOiAlZiIsIHByaXYtPnNldHRpbmdzLnpv
b21SYW5nZS5tYXhTY2FsZSwgem9vbSk7CiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwogICAg
IH0KIAotICAgIHNkLT5hbmltYXRlZF96b29tLnpvb20uc3RhcnQgPSBld2tfZnJhbWVfcGFnZV96
b29tX2dldChzZC0+bWFpbl9mcmFtZSk7Ci0gICAgc2QtPmFuaW1hdGVkX3pvb20uem9vbS5lbmQg
PSB6b29tOwotICAgIHNkLT5hbmltYXRlZF96b29tLnpvb20uY3VycmVudCA9IHpvb207Ci0gICAg
cmV0dXJuIHNkLT5hcGktPnpvb21fd2Vha19zZXQoc2QsIHpvb20sIGNlbnRlclgsIGNlbnRlclkp
OworICAgIHNtYXJ0RGF0YS0+YW5pbWF0ZWRfem9vbS56b29tLnN0YXJ0ID0gZXdrX2ZyYW1lX3Bh
Z2Vfem9vbV9nZXQoc21hcnREYXRhLT5tYWluX2ZyYW1lKTsKKyAgICBzbWFydERhdGEtPmFuaW1h
dGVkX3pvb20uem9vbS5lbmQgPSB6b29tOworICAgIHNtYXJ0RGF0YS0+YW5pbWF0ZWRfem9vbS56
b29tLmN1cnJlbnQgPSB6b29tOworICAgIHJldHVybiBzbWFydERhdGEtPmFwaS0+em9vbV93ZWFr
X3NldChzbWFydERhdGEsIHpvb20sIGNlbnRlclgsIGNlbnRlclkpOwogfQogCiBFaW5hX0Jvb2wg
ZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9tYXJrX3N0YXJ0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBm
bG9hdCB6b29tKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2Qs
IEVJTkFfRkFMU0UpOwotICAgIHNkLT5hbmltYXRlZF96b29tLnpvb20uc3RhcnQgPSB6b29tOwor
ICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZB
TFNFKTsKKyAgICBzbWFydERhdGEtPmFuaW1hdGVkX3pvb20uem9vbS5zdGFydCA9IHpvb207CiAg
ICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3pvb21fYW5pbWF0
ZWRfbWFya19lbmQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGZsb2F0IHpvb20pCiB7Ci0gICAgRVdL
X1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgc2Qt
PmFuaW1hdGVkX3pvb20uem9vbS5lbmQgPSB6b29tOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9S
RVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBzbWFydERhdGEtPmFu
aW1hdGVkX3pvb20uem9vbS5lbmQgPSB6b29tOwogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAK
IEVpbmFfQm9vbCBld2tfdmlld196b29tX2FuaW1hdGVkX21hcmtfY3VycmVudChFdmFzX09iamVj
dCogZXdrVmlldywgZmxvYXQgem9vbSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJO
KGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBzZC0+YW5pbWF0ZWRfem9vbS56b29tLmN1
cnJlbnQgPSB6b29tOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21h
cnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBzbWFydERhdGEtPmFuaW1hdGVkX3pvb20uem9vbS5j
dXJyZW50ID0gem9vbTsKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCiBFaW5hX0Jvb2wgZXdr
X3ZpZXdfem9vbV9hbmltYXRlZF9tYXJrX3N0b3AoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0g
ICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0g
ICAgX2V3a192aWV3X3pvb21fYW5pbWF0ZWRfbWFya19zdG9wKHNkKTsKKyAgICBFV0tfVklFV19T
RF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgX2V3
a192aWV3X3pvb21fYW5pbWF0ZWRfbWFya19zdG9wKHNtYXJ0RGF0YSk7CiAgICAgcmV0dXJuIEVJ
TkFfVFJVRTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3pvb21fYW5pbWF0ZWRfc2V0KEV2YXNf
T2JqZWN0KiBld2tWaWV3LCBmbG9hdCB6b29tLCBmbG9hdCBkdXJhdGlvbiwgRXZhc19Db29yZCBj
ZW50ZXJYLCBFdmFzX0Nvb3JkIGNlbnRlclkpCiB7CiAgICAgZG91YmxlIG5vdzsKLSAgICBFV0tf
VklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tf
VklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwotICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+YXBpLCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmFwaS0+em9vbV93ZWFrX3NldCwgRUlOQV9G
QUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEs
IEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEs
IHByaXYsIEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChz
bWFydERhdGEtPmFwaSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk5fVkFMKHNtYXJ0RGF0YS0+YXBpLT56b29tX3dlYWtfc2V0LCBFSU5BX0ZBTFNFKTsKIAotICAg
IGlmICghcHJpdi0+c2V0dGluZ3Muem9vbV9yYW5nZS51c2VyX3NjYWxhYmxlKSB7CisgICAgaWYg
KCFwcml2LT5zZXR0aW5ncy56b29tUmFuZ2UudXNlclNjYWxhYmxlKSB7CiAgICAgICAgIFdSTigi
dXNlclNjYWxhYmxlIGlzIGZhbHNlIik7CiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwogICAg
IH0KIAotICAgIGlmICh6b29tIDwgcHJpdi0+c2V0dGluZ3Muem9vbV9yYW5nZS5taW5fc2NhbGUp
IHsKLSAgICAgICAgV1JOKCJ6b29tIGxldmVsIGlzIDwgJWYgOiAlZiIsIHByaXYtPnNldHRpbmdz
Lnpvb21fcmFuZ2UubWluX3NjYWxlLCB6b29tKTsKKyAgICBpZiAoem9vbSA8IHByaXYtPnNldHRp
bmdzLnpvb21SYW5nZS5taW5TY2FsZSkgeworICAgICAgICBXUk4oInpvb20gbGV2ZWwgaXMgPCAl
ZiA6ICVmIiwgcHJpdi0+c2V0dGluZ3Muem9vbVJhbmdlLm1pblNjYWxlLCB6b29tKTsKICAgICAg
ICAgcmV0dXJuIEVJTkFfRkFMU0U7CiAgICAgfQotICAgIGlmICh6b29tID4gcHJpdi0+c2V0dGlu
Z3Muem9vbV9yYW5nZS5tYXhfc2NhbGUpIHsKLSAgICAgICAgV1JOKCJ6b29tIGxldmVsIGlzID4g
JWYgOiAlZiIsIHByaXYtPnNldHRpbmdzLnpvb21fcmFuZ2UubWF4X3NjYWxlLCB6b29tKTsKKyAg
ICBpZiAoem9vbSA+IHByaXYtPnNldHRpbmdzLnpvb21SYW5nZS5tYXhTY2FsZSkgeworICAgICAg
ICBXUk4oInpvb20gbGV2ZWwgaXMgPiAlZiA6ICVmIiwgcHJpdi0+c2V0dGluZ3Muem9vbVJhbmdl
Lm1heFNjYWxlLCB6b29tKTsKICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CiAgICAgfQogCi0g
ICAgaWYgKHByaXYtPmFuaW1hdGVkX3pvb20uYW5pbWF0b3IpCi0gICAgICAgIHByaXYtPmFuaW1h
dGVkX3pvb20uem9vbS5zdGFydCA9IF9ld2tfdmlld196b29tX2FuaW1hdGVkX2N1cnJlbnQocHJp
dik7CisgICAgaWYgKHByaXYtPmFuaW1hdGVkWm9vbS5hbmltYXRvcikKKyAgICAgICAgcHJpdi0+
YW5pbWF0ZWRab29tLnpvb20uc3RhcnQgPSBfZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9jdXJyZW50
KHByaXYpOwogICAgIGVsc2UgewotICAgICAgICBwcml2LT5hbmltYXRlZF96b29tLnpvb20uc3Rh
cnQgPSBld2tfZnJhbWVfcGFnZV96b29tX2dldChzZC0+bWFpbl9mcmFtZSk7Ci0gICAgICAgIF9l
d2tfdmlld196b29tX2FuaW1hdGlvbl9zdGFydChzZCk7CisgICAgICAgIHByaXYtPmFuaW1hdGVk
Wm9vbS56b29tLnN0YXJ0ID0gZXdrX2ZyYW1lX3BhZ2Vfem9vbV9nZXQoc21hcnREYXRhLT5tYWlu
X2ZyYW1lKTsKKyAgICAgICAgX2V3a192aWV3X3pvb21fYW5pbWF0aW9uX3N0YXJ0KHNtYXJ0RGF0
YSk7CiAgICAgfQogCiAgICAgaWYgKGNlbnRlclggPCAwKQpAQCAtMTcyOSw1MCArMTcyOSw1MCBA
QCBFaW5hX0Jvb2wgZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9zZXQoRXZhc19PYmplY3QqIGV3a1Zp
ZXcsIGZsb2F0IHpvb20sIGZsb2F0IGR1cgogICAgICAgICBjZW50ZXJZID0gMDsKIAogICAgIG5v
dyA9IGVjb3JlX2xvb3BfdGltZV9nZXQoKTsKLSAgICBwcml2LT5hbmltYXRlZF96b29tLnRpbWUu
c3RhcnQgPSBub3c7Ci0gICAgcHJpdi0+YW5pbWF0ZWRfem9vbS50aW1lLmVuZCA9IG5vdyArIGR1
cmF0aW9uOwotICAgIHByaXYtPmFuaW1hdGVkX3pvb20udGltZS5kdXJhdGlvbiA9IGR1cmF0aW9u
OwotICAgIHByaXYtPmFuaW1hdGVkX3pvb20uem9vbS5lbmQgPSB6b29tOwotICAgIHByaXYtPmFu
aW1hdGVkX3pvb20uem9vbS5yYW5nZSA9IChwcml2LT5hbmltYXRlZF96b29tLnpvb20uZW5kIC0g
cHJpdi0+YW5pbWF0ZWRfem9vbS56b29tLnN0YXJ0KTsKLSAgICBwcml2LT5hbmltYXRlZF96b29t
LmNlbnRlci54ID0gY2VudGVyWDsKLSAgICBwcml2LT5hbmltYXRlZF96b29tLmNlbnRlci55ID0g
Y2VudGVyWTsKLSAgICBzZC0+YW5pbWF0ZWRfem9vbS56b29tLmN1cnJlbnQgPSBwcml2LT5hbmlt
YXRlZF96b29tLnpvb20uc3RhcnQ7Ci0gICAgc2QtPmFuaW1hdGVkX3pvb20uem9vbS5zdGFydCA9
IHByaXYtPmFuaW1hdGVkX3pvb20uem9vbS5zdGFydDsKLSAgICBzZC0+YW5pbWF0ZWRfem9vbS56
b29tLmVuZCA9IHByaXYtPmFuaW1hdGVkX3pvb20uem9vbS5lbmQ7CisgICAgcHJpdi0+YW5pbWF0
ZWRab29tLnRpbWUuc3RhcnQgPSBub3c7CisgICAgcHJpdi0+YW5pbWF0ZWRab29tLnRpbWUuZW5k
ID0gbm93ICsgZHVyYXRpb247CisgICAgcHJpdi0+YW5pbWF0ZWRab29tLnRpbWUuZHVyYXRpb24g
PSBkdXJhdGlvbjsKKyAgICBwcml2LT5hbmltYXRlZFpvb20uem9vbS5lbmQgPSB6b29tOworICAg
IHByaXYtPmFuaW1hdGVkWm9vbS56b29tLnJhbmdlID0gKHByaXYtPmFuaW1hdGVkWm9vbS56b29t
LmVuZCAtIHByaXYtPmFuaW1hdGVkWm9vbS56b29tLnN0YXJ0KTsKKyAgICBwcml2LT5hbmltYXRl
ZFpvb20uY2VudGVyLnggPSBjZW50ZXJYOworICAgIHByaXYtPmFuaW1hdGVkWm9vbS5jZW50ZXIu
eSA9IGNlbnRlclk7CisgICAgc21hcnREYXRhLT5hbmltYXRlZF96b29tLnpvb20uY3VycmVudCA9
IHByaXYtPmFuaW1hdGVkWm9vbS56b29tLnN0YXJ0OworICAgIHNtYXJ0RGF0YS0+YW5pbWF0ZWRf
em9vbS56b29tLnN0YXJ0ID0gcHJpdi0+YW5pbWF0ZWRab29tLnpvb20uc3RhcnQ7CisgICAgc21h
cnREYXRhLT5hbmltYXRlZF96b29tLnpvb20uZW5kID0gcHJpdi0+YW5pbWF0ZWRab29tLnpvb20u
ZW5kOwogCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3By
ZV9yZW5kZXJfcmVnaW9uKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFdmFzX0Nvb3JkIHgsIEV2YXNf
Q29vcmQgeSwgRXZhc19Db29yZCB3aWR0aCwgRXZhc19Db29yZCBoZWlnaHQsIGZsb2F0IHpvb20p
CiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxT
RSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNF
KTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmFwaS0+cHJlX3JlbmRl
cl9yZWdpb24sIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdr
Vmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9S
RVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5hcGktPnByZV9yZW5kZXJfcmVnaW9uLCBFSU5BX0ZB
TFNFKTsKICAgICBmbG9hdCBjdXJfem9vbTsKLSAgICBFdmFzX0Nvb3JkIGN3LCBjaDsKKyAgICBF
dmFzX0Nvb3JkIGNvbnRlbnRzV2lkdGgsIGNvbnRlbnRzSGVpZ2h0OwogCiAgICAgLyogV2hlbiBk
b2luZyBhbmltYXRlZCB6b29tIGl0J3Mgbm90IHBvc3NpYmxlIHRvIGNhbGwgcHJlLXJlbmRlciBz
aW5jZSBpdAogICAgICAqIHdvdWxkIHNjcmV3IHVwIHBhcmFtZXRlcnMgdGhhdCBhbmltYXRpb24g
aXMgY3VycmVudGx5IHVzaW5nCiAgICAgICovCi0gICAgaWYgKHByaXYtPmFuaW1hdGVkX3pvb20u
YW5pbWF0b3IpCisgICAgaWYgKHByaXYtPmFuaW1hdGVkWm9vbS5hbmltYXRvcikKICAgICAgICAg
cmV0dXJuIEVJTkFfRkFMU0U7CiAKLSAgICBjdXJfem9vbSA9IGV3a19mcmFtZV9wYWdlX3pvb21f
Z2V0KHNkLT5tYWluX2ZyYW1lKTsKKyAgICBjdXJfem9vbSA9IGV3a19mcmFtZV9wYWdlX3pvb21f
Z2V0KHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSk7CiAKICAgICBpZiAoY3VyX3pvb20gPCAwLjAwMDAx
KQogICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKLSAgICBpZiAoIWV3a19mcmFtZV9jb250ZW50
c19zaXplX2dldChzZC0+bWFpbl9mcmFtZSwgJmN3LCAmY2gpKQorICAgIGlmICghZXdrX2ZyYW1l
X2NvbnRlbnRzX3NpemVfZ2V0KHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSwgJmNvbnRlbnRzV2lkdGgs
ICZjb250ZW50c0hlaWdodCkpCiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwogCi0gICAgY3cg
Kj0gem9vbSAvIGN1cl96b29tOwotICAgIGNoICo9IHpvb20gLyBjdXJfem9vbTsKLSAgICBEQkco
InJlZ2lvbiAlZCwlZCslZHglZCBAICVmIGNvbnRlbnRzPSVkeCVkIiwgeCwgeSwgd2lkdGgsIGhl
aWdodCwgem9vbSwgY3csIGNoKTsKKyAgICBjb250ZW50c1dpZHRoICo9IHpvb20gLyBjdXJfem9v
bTsKKyAgICBjb250ZW50c0hlaWdodCAqPSB6b29tIC8gY3VyX3pvb207CisgICAgREJHKCJyZWdp
b24gJWQsJWQrJWR4JWQgQCAlZiBjb250ZW50cz0lZHglZCIsIHgsIHksIHdpZHRoLCBoZWlnaHQs
IHpvb20sIGNvbnRlbnRzV2lkdGgsIGNvbnRlbnRzSGVpZ2h0KTsKIAotICAgIGlmICh4ICsgd2lk
dGggPiBjdykKLSAgICAgICAgd2lkdGggPSBjdyAtIHg7CisgICAgaWYgKHggKyB3aWR0aCA+IGNv
bnRlbnRzV2lkdGgpCisgICAgICAgIHdpZHRoID0gY29udGVudHNXaWR0aCAtIHg7CiAKLSAgICBp
ZiAoeSArIGhlaWdodCA+IGNoKQotICAgICAgICBoZWlnaHQgPSBjaCAtIHk7CisgICAgaWYgKHkg
KyBoZWlnaHQgPiBjb250ZW50c0hlaWdodCkKKyAgICAgICAgaGVpZ2h0ID0gY29udGVudHNIZWln
aHQgLSB5OwogCiAgICAgaWYgKHggPCAwKSB7CiAgICAgICAgIHdpZHRoICs9IHg7CkBAIC0xNzgz
LDY0ICsxNzgzLDY0IEBAIEVpbmFfQm9vbCBld2tfdmlld19wcmVfcmVuZGVyX3JlZ2lvbihFdmFz
X09iamVjdCogZXdrVmlldywgRXZhc19Db29yZCB4LCBFdmFzX0NvCiAgICAgICAgIHkgPSAwOwog
ICAgIH0KIAotICAgIHJldHVybiBzZC0+YXBpLT5wcmVfcmVuZGVyX3JlZ2lvbihzZCwgeCwgeSwg
d2lkdGgsIGhlaWdodCwgem9vbSk7CisgICAgcmV0dXJuIHNtYXJ0RGF0YS0+YXBpLT5wcmVfcmVu
ZGVyX3JlZ2lvbihzbWFydERhdGEsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHpvb20pOwogfQogCiBF
aW5hX0Jvb2wgZXdrX3ZpZXdfcHJlX3JlbmRlcl9yZWxhdGl2ZV9yYWRpdXMoRXZhc19PYmplY3Qq
IGV3a1ZpZXcsIHVuc2lnbmVkIGludCBudW1iZXIpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRf
T1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTl9WQUwoc2QtPmFwaS0+cHJlX3JlbmRlcl9yZWxhdGl2ZV9yYWRpdXMsIEVJTkFfRkFM
U0UpOwotICAgIGZsb2F0IGN1cl96b29tOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9P
Ul9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5hcGktPnByZV9yZW5kZXJfcmVsYXRpdmVfcmFk
aXVzLCBFSU5BX0ZBTFNFKTsKKyAgICBmbG9hdCBjdXJyZW50Wm9vbTsKIAotICAgIGlmIChwcml2
LT5hbmltYXRlZF96b29tLmFuaW1hdG9yKQorICAgIGlmIChwcml2LT5hbmltYXRlZFpvb20uYW5p
bWF0b3IpCiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwogCi0gICAgY3VyX3pvb20gPSBld2tf
ZnJhbWVfcGFnZV96b29tX2dldChzZC0+bWFpbl9mcmFtZSk7Ci0gICAgcmV0dXJuIHNkLT5hcGkt
PnByZV9yZW5kZXJfcmVsYXRpdmVfcmFkaXVzKHNkLCBudW1iZXIsIGN1cl96b29tKTsKKyAgICBj
dXJyZW50Wm9vbSA9IGV3a19mcmFtZV9wYWdlX3pvb21fZ2V0KHNtYXJ0RGF0YS0+bWFpbl9mcmFt
ZSk7CisgICAgcmV0dXJuIHNtYXJ0RGF0YS0+YXBpLT5wcmVfcmVuZGVyX3JlbGF0aXZlX3JhZGl1
cyhzbWFydERhdGEsIG51bWJlciwgY3VycmVudFpvb20pOwogfQogCiB1bnNpZ25lZCBpbnQgZXdr
X3ZpZXdfaW1oX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklF
V19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAwKTsKLSAgICBFV0tfVklFV19QUklWX0dF
VF9PUl9SRVRVUk4oc2QsIHByaXYsIDApOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrVmlldywgc21hcnREYXRhLCAwKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4o
c21hcnREYXRhLCBwcml2LCAwKTsKICAgICByZXR1cm4gcHJpdi0+aW1oOwogfQogCiB2b2lkIGV3
a192aWV3X3ByZV9yZW5kZXJfY2FuY2VsKEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QpOwotICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOKHNkLT5hcGktPnByZV9yZW5kZXJfY2FuY2VsKTsKLSAgICBzZC0+YXBpLT5w
cmVfcmVuZGVyX2NhbmNlbChzZCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tW
aWV3LCBzbWFydERhdGEpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0
YS0+YXBpLT5wcmVfcmVuZGVyX2NhbmNlbCk7CisgICAgc21hcnREYXRhLT5hcGktPnByZV9yZW5k
ZXJfY2FuY2VsKHNtYXJ0RGF0YSk7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19lbmFibGVfcmVu
ZGVyKGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9P
Ul9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOX1ZBTChzZC0+YXBpLT5lbmFibGVfcmVuZGVyLCBFSU5BX0ZBTFNFKTsKLSAgICBy
ZXR1cm4gc2QtPmFwaS0+ZW5hYmxlX3JlbmRlcihzZCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmFwaS0+ZW5hYmxlX3JlbmRlciwgRUlOQV9G
QUxTRSk7CisgICAgcmV0dXJuIHNtYXJ0RGF0YS0+YXBpLT5lbmFibGVfcmVuZGVyKHNtYXJ0RGF0
YSk7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19kaXNhYmxlX3JlbmRlcihjb25zdCBFdmFzX09i
amVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcs
IHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2Qt
PmFwaS0+ZGlzYWJsZV9yZW5kZXIsIEVJTkFfRkFMU0UpOwotICAgIHJldHVybiBzZC0+YXBpLT5k
aXNhYmxlX3JlbmRlcihzZCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3
LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJO
X1ZBTChzbWFydERhdGEtPmFwaS0+ZGlzYWJsZV9yZW5kZXIsIEVJTkFfRkFMU0UpOworICAgIHJl
dHVybiBzbWFydERhdGEtPmFwaS0+ZGlzYWJsZV9yZW5kZXIoc21hcnREYXRhKTsKIH0KIAogY29u
c3QgY2hhciogZXdrX3ZpZXdfc2V0dGluZ191c2VyX2FnZW50X2dldChjb25zdCBFdmFzX09iamVj
dCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNk
LCAwKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIDApOwotICAg
IHJldHVybiBwcml2LT5zZXR0aW5ncy51c2VyX2FnZW50OworICAgIEVXS19WSUVXX1NEX0dFVF9P
Ul9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCAwKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9P
Ul9SRVRVUk4oc21hcnREYXRhLCBwcml2LCAwKTsKKyAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3Mu
dXNlckFnZW50OwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ191c2VyX2FnZW50X3Nl
dChFdmFzX09iamVjdCogZXdrVmlldywgY29uc3QgY2hhciogdXNlckFnZW50KQogewotICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVX
S19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7Ci0gICAgaWYg
KGVpbmFfc3RyaW5nc2hhcmVfcmVwbGFjZSgmcHJpdi0+c2V0dGluZ3MudXNlcl9hZ2VudCwgdXNl
ckFnZW50KSkgewotICAgICAgICBXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEVmbCogY2xpZW50
ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRFZmwqPihwcml2LT5tYWlu
X2ZyYW1lLT5sb2FkZXIoKS0+Y2xpZW50KCkpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRV
Uk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dF
VF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBpZiAoZWluYV9z
dHJpbmdzaGFyZV9yZXBsYWNlKCZwcml2LT5zZXR0aW5ncy51c2VyQWdlbnQsIHVzZXJBZ2VudCkp
IHsKKyAgICAgICAgV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRFZmwqIGNsaWVudCA9IHN0YXRp
Y19jYXN0PFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50RWZsKj4ocHJpdi0+bWFpbkZyYW1lLT5s
b2FkZXIoKS0+Y2xpZW50KCkpOwogICAgICAgICBjbGllbnQtPnNldEN1c3RvbVVzZXJBZ2VudChT
dHJpbmc6OmZyb21VVEY4KHVzZXJBZ2VudCkpOwogICAgIH0KICAgICByZXR1cm4gRUlOQV9UUlVF
OwpAQCAtMTg0OCwyMjMgKzE4NDgsMjIzIEBAIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX3Vz
ZXJfYWdlbnRfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBjaGFyKiB1c2VyCiAKIGNv
bnN0IGNoYXIqIGV3a192aWV3X3NldHRpbmdfdXNlcl9zdHlsZXNoZWV0X2dldChjb25zdCBFdmFz
X09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1Zp
ZXcsIHNkLCAwKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIDAp
OwotICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy51c2VyX3N0eWxlc2hlZXQ7CisgICAgRVdLX1ZJ
RVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIDApOworICAgIEVXS19WSUVX
X1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIDApOworICAgIHJldHVybiBwcml2
LT5zZXR0aW5ncy51c2VyU3R5bGVzaGVldDsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3NldHRp
bmdfdXNlcl9zdHlsZXNoZWV0X3NldChFdmFzX09iamVjdCogZXdrVmlldywgY29uc3QgY2hhciog
dXJpKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFf
RkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9G
QUxTRSk7Ci0gICAgaWYgKGVpbmFfc3RyaW5nc2hhcmVfcmVwbGFjZSgmcHJpdi0+c2V0dGluZ3Mu
dXNlcl9zdHlsZXNoZWV0LCB1cmkpKSB7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihl
d2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09S
X1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIGlmIChlaW5hX3N0cmlu
Z3NoYXJlX3JlcGxhY2UoJnByaXYtPnNldHRpbmdzLnVzZXJTdHlsZXNoZWV0LCB1cmkpKSB7CiAg
ICAgICAgIFdlYkNvcmU6OktVUkwga3VybChXZWJDb3JlOjpLVVJMKCksIFN0cmluZzo6ZnJvbVVU
RjgodXJpKSk7Ci0gICAgICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNldFVzZXJTdHlsZVNoZWV0
TG9jYXRpb24oa3VybCk7CisgICAgICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0VXNlclN0eWxl
U2hlZXRMb2NhdGlvbihrdXJsKTsKICAgICB9CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAog
RWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfYXV0b19sb2FkX2ltYWdlc19nZXQoY29uc3QgRXZh
c19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tW
aWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNk
LCBwcml2LCBFSU5BX0ZBTFNFKTsKLSAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuYXV0b19sb2Fk
X2ltYWdlczsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0
YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0
YSwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmF1dG9Mb2Fk
SW1hZ2VzOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19hdXRvX2xvYWRfaW1hZ2Vz
X3NldChFdmFzX09iamVjdCogZXdrVmlldywgRWluYV9Cb29sIGF1dG9tYXRpYykKIHsKLSAgICBF
V0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBF
V0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsK
KyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZB
TFNFKTsKICAgICBhdXRvbWF0aWMgPSAhIWF1dG9tYXRpYzsKLSAgICBpZiAocHJpdi0+c2V0dGlu
Z3MuYXV0b19sb2FkX2ltYWdlcyAhPSBhdXRvbWF0aWMpIHsKLSAgICAgICAgcHJpdi0+cGFnZV9z
ZXR0aW5ncy0+c2V0TG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5KGF1dG9tYXRpYyk7Ci0gICAgICAg
IHByaXYtPnNldHRpbmdzLmF1dG9fbG9hZF9pbWFnZXMgPSBhdXRvbWF0aWM7CisgICAgaWYgKHBy
aXYtPnNldHRpbmdzLmF1dG9Mb2FkSW1hZ2VzICE9IGF1dG9tYXRpYykgeworICAgICAgICBwcml2
LT5wYWdlU2V0dGluZ3MtPnNldExvYWRzSW1hZ2VzQXV0b21hdGljYWxseShhdXRvbWF0aWMpOwor
ICAgICAgICBwcml2LT5zZXR0aW5ncy5hdXRvTG9hZEltYWdlcyA9IGF1dG9tYXRpYzsKICAgICB9
CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdf
YXV0b19zaHJpbmtfaW1hZ2VzX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAg
ICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwotICAg
IHJldHVybiBwcml2LT5zZXR0aW5ncy5hdXRvX3Nocmlua19pbWFnZXM7CisgICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVX
S19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOwor
ICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5hdXRvU2hyaW5rSW1hZ2VzOwogfQogCiBFaW5hX0Jv
b2wgZXdrX3ZpZXdfc2V0dGluZ19hdXRvX3Nocmlua19pbWFnZXNfc2V0KEV2YXNfT2JqZWN0KiBl
d2tWaWV3LCBFaW5hX0Jvb2wgYXV0b21hdGljKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9S
RVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09S
X1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JF
VFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZf
R0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIGF1dG9tYXRp
YyA9ICEhYXV0b21hdGljOwotICAgIGlmIChwcml2LT5zZXR0aW5ncy5hdXRvX3Nocmlua19pbWFn
ZXMgIT0gYXV0b21hdGljKSB7Ci0gICAgICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNldFNocmlu
a3NTdGFuZGFsb25lSW1hZ2VzVG9GaXQoYXV0b21hdGljKTsKLSAgICAgICAgcHJpdi0+c2V0dGlu
Z3MuYXV0b19zaHJpbmtfaW1hZ2VzID0gYXV0b21hdGljOworICAgIGlmIChwcml2LT5zZXR0aW5n
cy5hdXRvU2hyaW5rSW1hZ2VzICE9IGF1dG9tYXRpYykgeworICAgICAgICBwcml2LT5wYWdlU2V0
dGluZ3MtPnNldFNocmlua3NTdGFuZGFsb25lSW1hZ2VzVG9GaXQoYXV0b21hdGljKTsKKyAgICAg
ICAgcHJpdi0+c2V0dGluZ3MuYXV0b1Nocmlua0ltYWdlcyA9IGF1dG9tYXRpYzsKICAgICB9CiAg
ICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfZW5h
YmxlX2F1dG9fcmVzaXplX3dpbmRvd19nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7
Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7
Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsK
LSAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZW5hYmxlX2F1dG9fcmVzaXplX3dpbmRvdzsKKyAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxT
RSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlO
QV9GQUxTRSk7CisgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmVuYWJsZUF1dG9SZXNpemVXaW5k
b3c7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2VuYWJsZV9hdXRvX3Jlc2l6ZV93
aW5kb3dfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wgcmVzaXphYmxlKQogewot
ICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwot
ICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7Ci0g
ICAgcHJpdi0+c2V0dGluZ3MuZW5hYmxlX2F1dG9fcmVzaXplX3dpbmRvdyA9IHJlc2l6YWJsZTsK
KyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9G
QUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwg
RUlOQV9GQUxTRSk7CisgICAgcHJpdi0+c2V0dGluZ3MuZW5hYmxlQXV0b1Jlc2l6ZVdpbmRvdyA9
IHJlc2l6YWJsZTsKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCiBFaW5hX0Jvb2wgZXdrX3Zp
ZXdfc2V0dGluZ19lbmFibGVfc2NyaXB0c19nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcp
CiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxT
RSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNF
KTsKLSAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZW5hYmxlX3NjcmlwdHM7CisgICAgRVdLX1ZJ
RVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAg
IEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0Up
OworICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5lbmFibGVTY3JpcHRzOwogfQogCiBFaW5hX0Jv
b2wgZXdrX3ZpZXdfc2V0dGluZ19lbmFibGVfc2NyaXB0c19zZXQoRXZhc19PYmplY3QqIGV3a1Zp
ZXcsIEVpbmFfQm9vbCBlbmFibGUpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihl
d2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJO
KHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3
a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1Jf
UkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgZW5hYmxlID0gISFlbmFi
bGU7Ci0gICAgaWYgKHByaXYtPnNldHRpbmdzLmVuYWJsZV9zY3JpcHRzICE9IGVuYWJsZSkgewot
ICAgICAgICBwcml2LT5wYWdlX3NldHRpbmdzLT5zZXRKYXZhU2NyaXB0RW5hYmxlZChlbmFibGUp
OwotICAgICAgICBwcml2LT5zZXR0aW5ncy5lbmFibGVfc2NyaXB0cyA9IGVuYWJsZTsKKyAgICBp
ZiAocHJpdi0+c2V0dGluZ3MuZW5hYmxlU2NyaXB0cyAhPSBlbmFibGUpIHsKKyAgICAgICAgcHJp
di0+cGFnZVNldHRpbmdzLT5zZXRKYXZhU2NyaXB0RW5hYmxlZChlbmFibGUpOworICAgICAgICBw
cml2LT5zZXR0aW5ncy5lbmFibGVTY3JpcHRzID0gZW5hYmxlOwogICAgIH0KICAgICByZXR1cm4g
RUlOQV9UUlVFOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19lbmFibGVfcGx1Z2lu
c19nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9H
RVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKLSAgICByZXR1cm4gcHJpdi0+c2V0
dGluZ3MuZW5hYmxlX3BsdWdpbnM7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tW
aWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JF
VFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIHJldHVybiBwcml2LT5zZXR0
aW5ncy5lbmFibGVQbHVnaW5zOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19lbmFi
bGVfcGx1Z2luc19zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCBlbmFibGUpCiB7
Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7
Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsK
KyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9G
QUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwg
RUlOQV9GQUxTRSk7CiAgICAgZW5hYmxlID0gISFlbmFibGU7Ci0gICAgaWYgKHByaXYtPnNldHRp
bmdzLmVuYWJsZV9wbHVnaW5zICE9IGVuYWJsZSkgewotICAgICAgICBwcml2LT5wYWdlX3NldHRp
bmdzLT5zZXRQbHVnaW5zRW5hYmxlZChlbmFibGUpOwotICAgICAgICBwcml2LT5zZXR0aW5ncy5l
bmFibGVfcGx1Z2lucyA9IGVuYWJsZTsKKyAgICBpZiAocHJpdi0+c2V0dGluZ3MuZW5hYmxlUGx1
Z2lucyAhPSBlbmFibGUpIHsKKyAgICAgICAgcHJpdi0+cGFnZVNldHRpbmdzLT5zZXRQbHVnaW5z
RW5hYmxlZChlbmFibGUpOworICAgICAgICBwcml2LT5zZXR0aW5ncy5lbmFibGVQbHVnaW5zID0g
ZW5hYmxlOwogICAgIH0KICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCiBFaW5hX0Jvb2wgZXdr
X3ZpZXdfc2V0dGluZ19lbmFibGVfZnJhbWVfZmxhdHRlbmluZ19nZXQoY29uc3QgRXZhc19PYmpl
Y3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBz
ZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2
LCBFSU5BX0ZBTFNFKTsKLSAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZW5hYmxlX2ZyYW1lX2Zs
YXR0ZW5pbmc7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERh
dGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERh
dGEsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5lbmFibGVG
cmFtZUZsYXR0ZW5pbmc7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2VuYWJsZV9m
cmFtZV9mbGF0dGVuaW5nX3NldChFdmFzX09iamVjdCogZXdrVmlldywgRWluYV9Cb29sIGVuYWJs
ZSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZB
TFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFM
U0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBF
SU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBw
cml2LCBFSU5BX0ZBTFNFKTsKICAgICBlbmFibGUgPSAhIWVuYWJsZTsKLSAgICBpZiAocHJpdi0+
c2V0dGluZ3MuZW5hYmxlX2ZyYW1lX2ZsYXR0ZW5pbmcgIT0gZW5hYmxlKSB7Ci0gICAgICAgIHBy
aXYtPnBhZ2Vfc2V0dGluZ3MtPnNldEZyYW1lRmxhdHRlbmluZ0VuYWJsZWQoZW5hYmxlKTsKLSAg
ICAgICAgcHJpdi0+c2V0dGluZ3MuZW5hYmxlX2ZyYW1lX2ZsYXR0ZW5pbmcgPSBlbmFibGU7Cisg
ICAgaWYgKHByaXYtPnNldHRpbmdzLmVuYWJsZUZyYW1lRmxhdHRlbmluZyAhPSBlbmFibGUpIHsK
KyAgICAgICAgcHJpdi0+cGFnZVNldHRpbmdzLT5zZXRGcmFtZUZsYXR0ZW5pbmdFbmFibGVkKGVu
YWJsZSk7CisgICAgICAgIHByaXYtPnNldHRpbmdzLmVuYWJsZUZyYW1lRmxhdHRlbmluZyA9IGVu
YWJsZTsKICAgICB9CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAogRWluYV9Cb29sIGV3a192
aWV3X3NldHRpbmdfc2NyaXB0c193aW5kb3dfb3Blbl9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3
a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlO
QV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5B
X0ZBTFNFKTsKLSAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3Muc2NyaXB0c193aW5kb3dfb3BlbjsK
KyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9G
QUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwg
RUlOQV9GQUxTRSk7CisgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLnNjcmlwdHNXaW5kb3dPcGVu
OwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19zY3JpcHRzX3dpbmRvd19vcGVuX3Nl
dChFdmFzX09iamVjdCogZXdrVmlldywgRWluYV9Cb29sIGFsbG93KQogewotICAgIEVXS19WSUVX
X1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVX
X1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVX
S19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOwog
ICAgIGFsbG93ID0gISFhbGxvdzsKLSAgICBpZiAocHJpdi0+c2V0dGluZ3Muc2NyaXB0c193aW5k
b3dfb3BlbiAhPSBhbGxvdykgewotICAgICAgICBwcml2LT5wYWdlX3NldHRpbmdzLT5zZXRKYXZh
U2NyaXB0Q2FuT3BlbldpbmRvd3NBdXRvbWF0aWNhbGx5KGFsbG93KTsKLSAgICAgICAgcHJpdi0+
c2V0dGluZ3Muc2NyaXB0c193aW5kb3dfb3BlbiA9IGFsbG93OworICAgIGlmIChwcml2LT5zZXR0
aW5ncy5zY3JpcHRzV2luZG93T3BlbiAhPSBhbGxvdykgeworICAgICAgICBwcml2LT5wYWdlU2V0
dGluZ3MtPnNldEphdmFTY3JpcHRDYW5PcGVuV2luZG93c0F1dG9tYXRpY2FsbHkoYWxsb3cpOwor
ICAgICAgICBwcml2LT5zZXR0aW5ncy5zY3JpcHRzV2luZG93T3BlbiA9IGFsbG93OwogICAgIH0K
ICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19z
Y3JpcHRzX2Nhbl9jbG9zZV93aW5kb3dzX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykK
IHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNF
KTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0Up
OwotICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5zY3JpcHRzX2Nhbl9jbG9zZV93aW5kb3dzOwor
ICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZB
TFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBF
SU5BX0ZBTFNFKTsKKyAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3Muc2NyaXB0c0NhbkNsb3NlV2lu
ZG93czsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfc2NyaXB0c19jYW5fY2xvc2Vf
d2luZG93c19zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCBhbGxvdykKIHsKLSAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAg
ICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOworICAg
IEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNF
KTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5B
X0ZBTFNFKTsKICAgICBhbGxvdyA9ICEhYWxsb3c7Ci0gICAgaWYgKHByaXYtPnNldHRpbmdzLnNj
cmlwdHNfY2FuX2Nsb3NlX3dpbmRvd3MgIT0gYWxsb3cpIHsKLSAgICAgICAgcHJpdi0+cGFnZV9z
ZXR0aW5ncy0+c2V0QWxsb3dTY3JpcHRzVG9DbG9zZVdpbmRvd3MoYWxsb3cpOwotICAgICAgICBw
cml2LT5zZXR0aW5ncy5zY3JpcHRzX2Nhbl9jbG9zZV93aW5kb3dzID0gYWxsb3c7CisgICAgaWYg
KHByaXYtPnNldHRpbmdzLnNjcmlwdHNDYW5DbG9zZVdpbmRvd3MgIT0gYWxsb3cpIHsKKyAgICAg
ICAgcHJpdi0+cGFnZVNldHRpbmdzLT5zZXRBbGxvd1NjcmlwdHNUb0Nsb3NlV2luZG93cyhhbGxv
dyk7CisgICAgICAgIHByaXYtPnNldHRpbmdzLnNjcmlwdHNDYW5DbG9zZVdpbmRvd3MgPSBhbGxv
dzsKICAgICB9CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3
X3NldHRpbmdfcmVzaXphYmxlX3RleHRhcmVhc19nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1Zp
ZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9G
QUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZB
TFNFKTsKLSAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MucmVzaXphYmxlX3RleHRhcmVhczsKKyAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxT
RSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlO
QV9GQUxTRSk7CisgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLnJlc2l6YWJsZVRleHRhcmVhczsK
IH0KIAogRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfcmVzaXphYmxlX3RleHRhcmVhc19zZXQo
RXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCBlbmFibGUpCiB7Ci0gICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdf
UFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19T
RF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdL
X1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CiAg
ICAgZW5hYmxlID0gISFlbmFibGU7Ci0gICAgaWYgKHByaXYtPnNldHRpbmdzLnJlc2l6YWJsZV90
ZXh0YXJlYXMgIT0gZW5hYmxlKSB7Ci0gICAgICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNldFRl
eHRBcmVhc0FyZVJlc2l6YWJsZShlbmFibGUpOwotICAgICAgICBwcml2LT5zZXR0aW5ncy5yZXNp
emFibGVfdGV4dGFyZWFzID0gZW5hYmxlOworICAgIGlmIChwcml2LT5zZXR0aW5ncy5yZXNpemFi
bGVUZXh0YXJlYXMgIT0gZW5hYmxlKSB7CisgICAgICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0
VGV4dEFyZWFzQXJlUmVzaXphYmxlKGVuYWJsZSk7CisgICAgICAgIHByaXYtPnNldHRpbmdzLnJl
c2l6YWJsZVRleHRhcmVhcyA9IGVuYWJsZTsKICAgICB9CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsK
IH0KIAogRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfcHJpdmF0ZV9icm93c2luZ19nZXQoY29u
c3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
Tihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVU
VVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKLSAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MucHJp
dmF0ZV9icm93c2luZzsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNt
YXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNt
YXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLnBy
aXZhdGVCcm93c2luZzsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfcHJpdmF0ZV9i
cm93c2luZ19zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCBlbmFibGUpCiB7Ci0g
ICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0g
ICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxT
RSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlO
QV9GQUxTRSk7CiAgICAgZW5hYmxlID0gISFlbmFibGU7Ci0gICAgaWYgKHByaXYtPnNldHRpbmdz
LnByaXZhdGVfYnJvd3NpbmcgIT0gZW5hYmxlKSB7Ci0gICAgICAgIHByaXYtPnBhZ2Vfc2V0dGlu
Z3MtPnNldFByaXZhdGVCcm93c2luZ0VuYWJsZWQoZW5hYmxlKTsKLSAgICAgICAgcHJpdi0+c2V0
dGluZ3MucHJpdmF0ZV9icm93c2luZyA9IGVuYWJsZTsKKyAgICBpZiAocHJpdi0+c2V0dGluZ3Mu
cHJpdmF0ZUJyb3dzaW5nICE9IGVuYWJsZSkgeworICAgICAgICBwcml2LT5wYWdlU2V0dGluZ3Mt
PnNldFByaXZhdGVCcm93c2luZ0VuYWJsZWQoZW5hYmxlKTsKKyAgICAgICAgcHJpdi0+c2V0dGlu
Z3MucHJpdmF0ZUJyb3dzaW5nID0gZW5hYmxlOwogICAgIH0KICAgICByZXR1cm4gRUlOQV9UUlVF
OwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19vZmZsaW5lX2FwcF9jYWNoZV9nZXQo
Y29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JF
VFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1Jf
UkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKLSAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3Mu
b2ZmbGluZV9hcHBfY2FjaGU7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3
LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVS
TihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIHJldHVybiBwcml2LT5zZXR0aW5n
cy5vZmZsaW5lQXBwQ2FjaGU7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX29mZmxp
bmVfYXBwX2NhY2hlX3NldChFdmFzX09iamVjdCogZXdrVmlldywgRWluYV9Cb29sIGVuYWJsZSkK
IHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNF
KTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0Up
OworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5B
X0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2
LCBFSU5BX0ZBTFNFKTsKICAgICBlbmFibGUgPSAhIWVuYWJsZTsKLSAgICBpZiAocHJpdi0+c2V0
dGluZ3Mub2ZmbGluZV9hcHBfY2FjaGUgIT0gZW5hYmxlKSB7Ci0gICAgICAgIHByaXYtPnBhZ2Vf
c2V0dGluZ3MtPnNldE9mZmxpbmVXZWJBcHBsaWNhdGlvbkNhY2hlRW5hYmxlZChlbmFibGUpOwot
ICAgICAgICBwcml2LT5zZXR0aW5ncy5vZmZsaW5lX2FwcF9jYWNoZSA9IGVuYWJsZTsKKyAgICBp
ZiAocHJpdi0+c2V0dGluZ3Mub2ZmbGluZUFwcENhY2hlICE9IGVuYWJsZSkgeworICAgICAgICBw
cml2LT5wYWdlU2V0dGluZ3MtPnNldE9mZmxpbmVXZWJBcHBsaWNhdGlvbkNhY2hlRW5hYmxlZChl
bmFibGUpOworICAgICAgICBwcml2LT5zZXR0aW5ncy5vZmZsaW5lQXBwQ2FjaGUgPSBlbmFibGU7
CiAgICAgfQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CkBAIC0yMDcyLDI3ICsyMDcyLDI3IEBA
IEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX29mZmxpbmVfYXBwX2NhY2hlX3NldChFdmFzX09i
amVjdCogZXdrVmlldywgRWluYV9Cb29sCiAKIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2Nh
cmV0X2Jyb3dzaW5nX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tf
VklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tf
VklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwotICAgIHJldHVy
biBwcml2LT5zZXR0aW5ncy5jYXJldF9icm93c2luZzsKKyAgICBFV0tfVklFV19TRF9HRVRfT1Jf
UkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJ
Vl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgcmV0dXJu
IHByaXYtPnNldHRpbmdzLmNhcmV0QnJvd3Npbmc7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19z
ZXR0aW5nX2NhcmV0X2Jyb3dzaW5nX3NldChFdmFzX09iamVjdCogZXdrVmlldywgRWluYV9Cb29s
IGVuYWJsZSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBF
SU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJ
TkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnRE
YXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnRE
YXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBlbmFibGUgPSAhIWVuYWJsZTsKLSAgICBpZiAo
cHJpdi0+c2V0dGluZ3MuY2FyZXRfYnJvd3NpbmcgIT0gZW5hYmxlKSB7Ci0gICAgICAgIHByaXYt
PnBhZ2Vfc2V0dGluZ3MtPnNldENhcmV0QnJvd3NpbmdFbmFibGVkKGVuYWJsZSk7Ci0gICAgICAg
IHByaXYtPnNldHRpbmdzLmNhcmV0X2Jyb3dzaW5nID0gZW5hYmxlOworICAgIGlmIChwcml2LT5z
ZXR0aW5ncy5jYXJldEJyb3dzaW5nICE9IGVuYWJsZSkgeworICAgICAgICBwcml2LT5wYWdlU2V0
dGluZ3MtPnNldENhcmV0QnJvd3NpbmdFbmFibGVkKGVuYWJsZSk7CisgICAgICAgIHByaXYtPnNl
dHRpbmdzLmNhcmV0QnJvd3NpbmcgPSBlbmFibGU7CiAgICAgfQogICAgIHJldHVybiBFSU5BX1RS
VUU7CiB9CiAKIGNvbnN0IGNoYXIqIGV3a192aWV3X3NldHRpbmdfZW5jb2RpbmdfY3VzdG9tX2dl
dChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1Jf
UkVUVVJOKGV3a1ZpZXcsIHNkLCAwKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4o
c2QsIHByaXYsIDApOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21h
cnREYXRhLCAwKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBw
cml2LCAwKTsKICAgICBFdmFzX09iamVjdCogbWFpbl9mcmFtZSA9IGV3a192aWV3X2ZyYW1lX21h
aW5fZ2V0KGV3a1ZpZXcpOwogICAgIFdlYkNvcmU6OkZyYW1lKiBjb3JlX2ZyYW1lID0gRVdLUHJp
dmF0ZTo6Y29yZUZyYW1lKG1haW5fZnJhbWUpOwogCkBAIC0yMTAxLDE5OSArMjEwMSwxOTkgQEAg
Y29uc3QgY2hhciogZXdrX3ZpZXdfc2V0dGluZ19lbmNvZGluZ19jdXN0b21fZ2V0KGNvbnN0IEV2
YXNfT2JqZWN0KiBld2tWaWV3KQogICAgIGlmIChvdmVycmlkZUVuY29kaW5nLmlzRW1wdHkoKSkK
ICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBlaW5hX3N0cmluZ3NoYXJlX3JlcGxhY2UoJnByaXYt
PnNldHRpbmdzLmVuY29kaW5nX2N1c3RvbSwgb3ZlcnJpZGVFbmNvZGluZy51dGY4KCkuZGF0YSgp
KTsKLSAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZW5jb2RpbmdfY3VzdG9tOworICAgIGVpbmFf
c3RyaW5nc2hhcmVfcmVwbGFjZSgmcHJpdi0+c2V0dGluZ3MuZW5jb2RpbmdDdXN0b20sIG92ZXJy
aWRlRW5jb2RpbmcudXRmOCgpLmRhdGEoKSk7CisgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmVu
Y29kaW5nQ3VzdG9tOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19lbmNvZGluZ19j
dXN0b21fc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBjaGFyKiBlbmNvZGluZykKIHsK
LSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsK
LSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwor
ICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZB
TFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBF
SU5BX0ZBTFNFKTsKICAgICBFdmFzX09iamVjdCogbWFpbl9mcmFtZSA9IGV3a192aWV3X2ZyYW1l
X21haW5fZ2V0KGV3a1ZpZXcpOwotICAgIFdlYkNvcmU6OkZyYW1lKiBjb3JlX2ZyYW1lID0gRVdL
UHJpdmF0ZTo6Y29yZUZyYW1lKG1haW5fZnJhbWUpOworICAgIFdlYkNvcmU6OkZyYW1lKiBjb3Jl
RnJhbWUgPSBFV0tQcml2YXRlOjpjb3JlRnJhbWUobWFpbl9mcmFtZSk7CiAgICAgREJHKCIlcyIs
IGVuY29kaW5nKTsKLSAgICBpZiAoZWluYV9zdHJpbmdzaGFyZV9yZXBsYWNlKCZwcml2LT5zZXR0
aW5ncy5lbmNvZGluZ19jdXN0b20sIGVuY29kaW5nKSkKLSAgICAgICAgY29yZV9mcmFtZS0+bG9h
ZGVyKCktPnJlbG9hZFdpdGhPdmVycmlkZUVuY29kaW5nKFN0cmluZzo6ZnJvbVVURjgoZW5jb2Rp
bmcpKTsKKyAgICBpZiAoZWluYV9zdHJpbmdzaGFyZV9yZXBsYWNlKCZwcml2LT5zZXR0aW5ncy5l
bmNvZGluZ0N1c3RvbSwgZW5jb2RpbmcpKQorICAgICAgICBjb3JlRnJhbWUtPmxvYWRlcigpLT5y
ZWxvYWRXaXRoT3ZlcnJpZGVFbmNvZGluZyhTdHJpbmc6OmZyb21VVEY4KGVuY29kaW5nKSk7CiAg
ICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAogY29uc3QgY2hhciogZXdrX3ZpZXdfc2V0dGluZ19l
bmNvZGluZ19kZWZhdWx0X2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBF
V0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAwKTsKLSAgICBFV0tfVklFV19Q
UklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIDApOwotICAgIHJldHVybiBwcml2LT5zZXR0aW5n
cy5lbmNvZGluZ19kZWZhdWx0OworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmll
dywgc21hcnREYXRhLCAwKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnRE
YXRhLCBwcml2LCAwKTsKKyAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZW5jb2RpbmdEZWZhdWx0
OwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19lbmNvZGluZ19kZWZhdWx0X3NldChF
dmFzX09iamVjdCogZXdrVmlldywgY29uc3QgY2hhciogZW5jb2RpbmcpCiB7Ci0gICAgRVdLX1ZJ
RVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJ
RVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKLSAgICBpZiAoZWlu
YV9zdHJpbmdzaGFyZV9yZXBsYWNlKCZwcml2LT5zZXR0aW5ncy5lbmNvZGluZ19kZWZhdWx0LCBl
bmNvZGluZykpCi0gICAgICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNldERlZmF1bHRUZXh0RW5j
b2RpbmdOYW1lKFN0cmluZzo6ZnJvbVVURjgoZW5jb2RpbmcpKTsKKyAgICBFV0tfVklFV19TRF9H
RVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJ
RVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAg
aWYgKGVpbmFfc3RyaW5nc2hhcmVfcmVwbGFjZSgmcHJpdi0+c2V0dGluZ3MuZW5jb2RpbmdEZWZh
dWx0LCBlbmNvZGluZykpCisgICAgICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0RGVmYXVsdFRl
eHRFbmNvZGluZ05hbWUoU3RyaW5nOjpmcm9tVVRGOChlbmNvZGluZykpOwogICAgIHJldHVybiBF
SU5BX1RSVUU7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2VuY29kaW5nX2RldGVj
dG9yX3NldChFdmFzX09iamVjdCogZXdrVmlldywgRWluYV9Cb29sIGVuYWJsZSkKIHsKLSAgICBF
V0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBF
V0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsK
KyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZB
TFNFKTsKICAgICBlbmFibGUgPSAhIWVuYWJsZTsKLSAgICBpZiAocHJpdi0+c2V0dGluZ3MuZW5j
b2RpbmdfZGV0ZWN0b3IgIT0gZW5hYmxlKSB7Ci0gICAgICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3Mt
PnNldFVzZXNFbmNvZGluZ0RldGVjdG9yKGVuYWJsZSk7Ci0gICAgICAgIHByaXYtPnNldHRpbmdz
LmVuY29kaW5nX2RldGVjdG9yID0gZW5hYmxlOworICAgIGlmIChwcml2LT5zZXR0aW5ncy5lbmNv
ZGluZ0RldGVjdG9yICE9IGVuYWJsZSkgeworICAgICAgICBwcml2LT5wYWdlU2V0dGluZ3MtPnNl
dFVzZXNFbmNvZGluZ0RldGVjdG9yKGVuYWJsZSk7CisgICAgICAgIHByaXYtPnNldHRpbmdzLmVu
Y29kaW5nRGV0ZWN0b3IgPSBlbmFibGU7CiAgICAgfQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9
CiAKIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2VuY29kaW5nX2RldGVjdG9yX2dldChjb25z
dCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJO
KGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRV
Uk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwotICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5lbmNv
ZGluZ19kZXRlY3RvcjsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNt
YXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNt
YXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmVu
Y29kaW5nRGV0ZWN0b3I7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2VuYWJsZV9k
ZXZlbG9wZXJfZXh0cmFzX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBF
V0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBF
V0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwotICAgIHJl
dHVybiBwcml2LT5zZXR0aW5ncy5lbmFibGVfZGV2ZWxvcGVyX2V4dHJhczsKKyAgICBFV0tfVklF
V19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAg
RVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7
CisgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmVuYWJsZURldmVsb3BlckV4dHJhczsKIH0KIAog
RWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfZW5hYmxlX2RldmVsb3Blcl9leHRyYXNfc2V0KEV2
YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wgZW5hYmxlKQogewotICAgIEVXS19WSUVXX1NE
X0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BS
SVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19W
SUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOwogICAg
IGVuYWJsZSA9ICEhZW5hYmxlOwotICAgIGlmIChwcml2LT5zZXR0aW5ncy5lbmFibGVfZGV2ZWxv
cGVyX2V4dHJhcyAhPSBlbmFibGUpIHsKLSAgICAgICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0
RGV2ZWxvcGVyRXh0cmFzRW5hYmxlZChlbmFibGUpOwotICAgICAgICBwcml2LT5zZXR0aW5ncy5l
bmFibGVfZGV2ZWxvcGVyX2V4dHJhcyA9IGVuYWJsZTsKKyAgICBpZiAocHJpdi0+c2V0dGluZ3Mu
ZW5hYmxlRGV2ZWxvcGVyRXh0cmFzICE9IGVuYWJsZSkgeworICAgICAgICBwcml2LT5wYWdlU2V0
dGluZ3MtPnNldERldmVsb3BlckV4dHJhc0VuYWJsZWQoZW5hYmxlKTsKKyAgICAgICAgcHJpdi0+
c2V0dGluZ3MuZW5hYmxlRGV2ZWxvcGVyRXh0cmFzID0gZW5hYmxlOwogICAgIH0KICAgICByZXR1
cm4gRUlOQV9UUlVFOwogfQogCiBpbnQgZXdrX3ZpZXdfc2V0dGluZ19mb250X21pbmltdW1fc2l6
ZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihld2tWaWV3LCBzZCwgMCk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVU
VVJOKHNkLCBwcml2LCAwKTsKLSAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZm9udF9taW5pbXVt
X3NpemU7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEs
IDApOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIDAp
OworICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5mb250TWluaW11bVNpemU7CiB9CiAKIEVpbmFf
Qm9vbCBld2tfdmlld19zZXR0aW5nX2ZvbnRfbWluaW11bV9zaXplX3NldChFdmFzX09iamVjdCog
ZXdrVmlldywgaW50IHNpemUpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tW
aWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNk
LCBwcml2LCBFSU5BX0ZBTFNFKTsKLSAgICBpZiAocHJpdi0+c2V0dGluZ3MuZm9udF9taW5pbXVt
X3NpemUgIT0gc2l6ZSkgewotICAgICAgICBwcml2LT5wYWdlX3NldHRpbmdzLT5zZXRNaW5pbXVt
Rm9udFNpemUoc2l6ZSk7Ci0gICAgICAgIHByaXYtPnNldHRpbmdzLmZvbnRfbWluaW11bV9zaXpl
ID0gc2l6ZTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0
YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0
YSwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgaWYgKHByaXYtPnNldHRpbmdzLmZvbnRNaW5pbXVt
U2l6ZSAhPSBzaXplKSB7CisgICAgICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0TWluaW11bUZv
bnRTaXplKHNpemUpOworICAgICAgICBwcml2LT5zZXR0aW5ncy5mb250TWluaW11bVNpemUgPSBz
aXplOwogICAgIH0KICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCiBpbnQgZXdrX3ZpZXdfc2V0
dGluZ19mb250X21pbmltdW1fbG9naWNhbF9zaXplX2dldChjb25zdCBFdmFzX09iamVjdCogZXdr
VmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAwKTsK
LSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIDApOwotICAgIHJldHVy
biBwcml2LT5zZXR0aW5ncy5mb250X21pbmltdW1fbG9naWNhbF9zaXplOworICAgIEVXS19WSUVX
X1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCAwKTsKKyAgICBFV0tfVklFV19Q
UklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCAwKTsKKyAgICByZXR1cm4gcHJpdi0+
c2V0dGluZ3MuZm9udE1pbmltdW1Mb2dpY2FsU2l6ZTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3
X3NldHRpbmdfZm9udF9taW5pbXVtX2xvZ2ljYWxfc2l6ZV9zZXQoRXZhc19PYmplY3QqIGV3a1Zp
ZXcsIGludCBzaXplKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywg
c2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJp
diwgRUlOQV9GQUxTRSk7Ci0gICAgaWYgKHByaXYtPnNldHRpbmdzLmZvbnRfbWluaW11bV9sb2dp
Y2FsX3NpemUgIT0gc2l6ZSkgewotICAgICAgICBwcml2LT5wYWdlX3NldHRpbmdzLT5zZXRNaW5p
bXVtTG9naWNhbEZvbnRTaXplKHNpemUpOwotICAgICAgICBwcml2LT5zZXR0aW5ncy5mb250X21p
bmltdW1fbG9naWNhbF9zaXplID0gc2l6ZTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJO
KGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRf
T1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgaWYgKHByaXYtPnNl
dHRpbmdzLmZvbnRNaW5pbXVtTG9naWNhbFNpemUgIT0gc2l6ZSkgeworICAgICAgICBwcml2LT5w
YWdlU2V0dGluZ3MtPnNldE1pbmltdW1Mb2dpY2FsRm9udFNpemUoc2l6ZSk7CisgICAgICAgIHBy
aXYtPnNldHRpbmdzLmZvbnRNaW5pbXVtTG9naWNhbFNpemUgPSBzaXplOwogICAgIH0KICAgICBy
ZXR1cm4gRUlOQV9UUlVFOwogfQogCiBpbnQgZXdrX3ZpZXdfc2V0dGluZ19mb250X2RlZmF1bHRf
c2l6ZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgMCk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1Jf
UkVUVVJOKHNkLCBwcml2LCAwKTsKLSAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZm9udF9kZWZh
dWx0X3NpemU7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERh
dGEsIDApOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYs
IDApOworICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5mb250RGVmYXVsdFNpemU7CiB9CiAKIEVp
bmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2ZvbnRfZGVmYXVsdF9zaXplX3NldChFdmFzX09iamVj
dCogZXdrVmlldywgaW50IHNpemUpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihl
d2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJO
KHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKLSAgICBpZiAocHJpdi0+c2V0dGluZ3MuZm9udF9kZWZh
dWx0X3NpemUgIT0gc2l6ZSkgewotICAgICAgICBwcml2LT5wYWdlX3NldHRpbmdzLT5zZXREZWZh
dWx0Rm9udFNpemUoc2l6ZSk7Ci0gICAgICAgIHByaXYtPnNldHRpbmdzLmZvbnRfZGVmYXVsdF9z
aXplID0gc2l6ZTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0
RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0
RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgaWYgKHByaXYtPnNldHRpbmdzLmZvbnREZWZh
dWx0U2l6ZSAhPSBzaXplKSB7CisgICAgICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0RGVmYXVs
dEZvbnRTaXplKHNpemUpOworICAgICAgICBwcml2LT5zZXR0aW5ncy5mb250RGVmYXVsdFNpemUg
PSBzaXplOwogICAgIH0KICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCiBpbnQgZXdrX3ZpZXdf
c2V0dGluZ19mb250X21vbm9zcGFjZV9zaXplX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmll
dykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAwKTsKLSAg
ICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIDApOwotICAgIHJldHVybiBw
cml2LT5zZXR0aW5ncy5mb250X21vbm9zcGFjZV9zaXplOworICAgIEVXS19WSUVXX1NEX0dFVF9P
Ul9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCAwKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9P
Ul9SRVRVUk4oc21hcnREYXRhLCBwcml2LCAwKTsKKyAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3Mu
Zm9udE1vbm9zcGFjZVNpemU7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2ZvbnRf
bW9ub3NwYWNlX3NpemVfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBpbnQgc2l6ZSkKIHsKLSAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAg
ICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwotICAg
IGlmIChwcml2LT5zZXR0aW5ncy5mb250X21vbm9zcGFjZV9zaXplICE9IHNpemUpIHsKLSAgICAg
ICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0RGVmYXVsdEZpeGVkRm9udFNpemUoc2l6ZSk7Ci0g
ICAgICAgIHByaXYtPnNldHRpbmdzLmZvbnRfbW9ub3NwYWNlX3NpemUgPSBzaXplOworICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsK
KyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZB
TFNFKTsKKyAgICBpZiAocHJpdi0+c2V0dGluZ3MuZm9udE1vbm9zcGFjZVNpemUgIT0gc2l6ZSkg
eworICAgICAgICBwcml2LT5wYWdlU2V0dGluZ3MtPnNldERlZmF1bHRGaXhlZEZvbnRTaXplKHNp
emUpOworICAgICAgICBwcml2LT5zZXR0aW5ncy5mb250TW9ub3NwYWNlU2l6ZSA9IHNpemU7CiAg
ICAgfQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKIGNvbnN0IGNoYXIqIGV3a192aWV3X2Zv
bnRfZmFtaWx5X25hbWVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFd2tfRm9udF9G
YW1pbHkgZm9udEZhbWlseSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1Zp
ZXcsIHNkLCAwKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIDAp
OworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCAwKTsK
KyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCAwKTsKIAog
ICAgIHN3aXRjaCAoZm9udEZhbWlseSkgewogICAgIGNhc2UgRVdLX0ZPTlRfRkFNSUxZX1NUQU5E
QVJEOgotICAgICAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZm9udF9zdGFuZGFyZDsKKyAgICAg
ICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmZvbnRTdGFuZGFyZDsKICAgICBjYXNlIEVXS19GT05U
X0ZBTUlMWV9DVVJTSVZFOgotICAgICAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZm9udF9jdXJz
aXZlOworICAgICAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZm9udEN1cnNpdmU7CiAgICAgY2Fz
ZSBFV0tfRk9OVF9GQU1JTFlfRkFOVEFTWToKLSAgICAgICAgcmV0dXJuIHByaXYtPnNldHRpbmdz
LmZvbnRfZmFudGFzeTsKKyAgICAgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmZvbnRGYW50YXN5
OwogICAgIGNhc2UgRVdLX0ZPTlRfRkFNSUxZX01PTk9TUEFDRToKLSAgICAgICAgcmV0dXJuIHBy
aXYtPnNldHRpbmdzLmZvbnRfbW9ub3NwYWNlOworICAgICAgICByZXR1cm4gcHJpdi0+c2V0dGlu
Z3MuZm9udE1vbm9zcGFjZTsKICAgICBjYXNlIEVXS19GT05UX0ZBTUlMWV9TRVJJRjoKLSAgICAg
ICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmZvbnRfc2VyaWY7CisgICAgICAgIHJldHVybiBwcml2
LT5zZXR0aW5ncy5mb250U2VyaWY7CiAgICAgY2FzZSBFV0tfRk9OVF9GQU1JTFlfU0FOU19TRVJJ
RjoKLSAgICAgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmZvbnRfc2Fuc19zZXJpZjsKKyAgICAg
ICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmZvbnRTYW5zU2VyaWY7CiAgICAgfQogICAgIHJldHVy
biAwOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfZm9udF9mYW1pbHlfbmFtZV9zZXQoRXZhc19P
YmplY3QqIGV3a1ZpZXcsIEV3a19Gb250X0ZhbWlseSBmb250RmFtaWx5LCBjb25zdCBjaGFyKiBu
YW1lKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFf
RkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9G
QUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEs
IEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEs
IHByaXYsIEVJTkFfRkFMU0UpOwogCiAgICAgc3dpdGNoIChmb250RmFtaWx5KSB7CiAgICAgY2Fz
ZSBFV0tfRk9OVF9GQU1JTFlfU1RBTkRBUkQ6Ci0gICAgICAgIGlmIChlaW5hX3N0cmluZ3NoYXJl
X3JlcGxhY2UoJnByaXYtPnNldHRpbmdzLmZvbnRfc3RhbmRhcmQsIG5hbWUpKQotICAgICAgICAg
ICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0U3RhbmRhcmRGb250RmFtaWx5KEF0b21pY1N0cmlu
Zzo6ZnJvbVVURjgobmFtZSkpOworICAgICAgICBpZiAoZWluYV9zdHJpbmdzaGFyZV9yZXBsYWNl
KCZwcml2LT5zZXR0aW5ncy5mb250U3RhbmRhcmQsIG5hbWUpKQorICAgICAgICAgICAgcHJpdi0+
cGFnZVNldHRpbmdzLT5zZXRTdGFuZGFyZEZvbnRGYW1pbHkoQXRvbWljU3RyaW5nOjpmcm9tVVRG
OChuYW1lKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRVdLX0ZPTlRfRkFNSUxZX0NVUlNJ
VkU6Ci0gICAgICAgIGlmIChlaW5hX3N0cmluZ3NoYXJlX3JlcGxhY2UoJnByaXYtPnNldHRpbmdz
LmZvbnRfY3Vyc2l2ZSwgbmFtZSkpCi0gICAgICAgICAgICBwcml2LT5wYWdlX3NldHRpbmdzLT5z
ZXRDdXJzaXZlRm9udEZhbWlseShBdG9taWNTdHJpbmc6OmZyb21VVEY4KG5hbWUpKTsKKyAgICAg
ICAgaWYgKGVpbmFfc3RyaW5nc2hhcmVfcmVwbGFjZSgmcHJpdi0+c2V0dGluZ3MuZm9udEN1cnNp
dmUsIG5hbWUpKQorICAgICAgICAgICAgcHJpdi0+cGFnZVNldHRpbmdzLT5zZXRDdXJzaXZlRm9u
dEZhbWlseShBdG9taWNTdHJpbmc6OmZyb21VVEY4KG5hbWUpKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBFV0tfRk9OVF9GQU1JTFlfRkFOVEFTWToKLSAgICAgICAgaWYgKGVpbmFfc3RyaW5n
c2hhcmVfcmVwbGFjZSgmcHJpdi0+c2V0dGluZ3MuZm9udF9mYW50YXN5LCBuYW1lKSkKLSAgICAg
ICAgICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNldEZhbnRhc3lGb250RmFtaWx5KEF0b21pY1N0
cmluZzo6ZnJvbVVURjgobmFtZSkpOworICAgICAgICBpZiAoZWluYV9zdHJpbmdzaGFyZV9yZXBs
YWNlKCZwcml2LT5zZXR0aW5ncy5mb250RmFudGFzeSwgbmFtZSkpCisgICAgICAgICAgICBwcml2
LT5wYWdlU2V0dGluZ3MtPnNldEZhbnRhc3lGb250RmFtaWx5KEF0b21pY1N0cmluZzo6ZnJvbVVU
RjgobmFtZSkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEVXS19GT05UX0ZBTUlMWV9NT05P
U1BBQ0U6Ci0gICAgICAgIGlmIChlaW5hX3N0cmluZ3NoYXJlX3JlcGxhY2UoJnByaXYtPnNldHRp
bmdzLmZvbnRfbW9ub3NwYWNlLCBuYW1lKSkKLSAgICAgICAgICAgIHByaXYtPnBhZ2Vfc2V0dGlu
Z3MtPnNldEZpeGVkRm9udEZhbWlseShBdG9taWNTdHJpbmc6OmZyb21VVEY4KG5hbWUpKTsKKyAg
ICAgICAgaWYgKGVpbmFfc3RyaW5nc2hhcmVfcmVwbGFjZSgmcHJpdi0+c2V0dGluZ3MuZm9udE1v
bm9zcGFjZSwgbmFtZSkpCisgICAgICAgICAgICBwcml2LT5wYWdlU2V0dGluZ3MtPnNldEZpeGVk
Rm9udEZhbWlseShBdG9taWNTdHJpbmc6OmZyb21VVEY4KG5hbWUpKTsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBFV0tfRk9OVF9GQU1JTFlfU0VSSUY6Ci0gICAgICAgIGlmIChlaW5hX3N0cmlu
Z3NoYXJlX3JlcGxhY2UoJnByaXYtPnNldHRpbmdzLmZvbnRfc2VyaWYsIG5hbWUpKQotICAgICAg
ICAgICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0U2VyaWZGb250RmFtaWx5KEF0b21pY1N0cmlu
Zzo6ZnJvbVVURjgobmFtZSkpOworICAgICAgICBpZiAoZWluYV9zdHJpbmdzaGFyZV9yZXBsYWNl
KCZwcml2LT5zZXR0aW5ncy5mb250U2VyaWYsIG5hbWUpKQorICAgICAgICAgICAgcHJpdi0+cGFn
ZVNldHRpbmdzLT5zZXRTZXJpZkZvbnRGYW1pbHkoQXRvbWljU3RyaW5nOjpmcm9tVVRGOChuYW1l
KSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRVdLX0ZPTlRfRkFNSUxZX1NBTlNfU0VSSUY6
Ci0gICAgICAgIGlmIChlaW5hX3N0cmluZ3NoYXJlX3JlcGxhY2UoJnByaXYtPnNldHRpbmdzLmZv
bnRfc2Fuc19zZXJpZiwgbmFtZSkpCi0gICAgICAgICAgICBwcml2LT5wYWdlX3NldHRpbmdzLT5z
ZXRTYW5zU2VyaWZGb250RmFtaWx5KEF0b21pY1N0cmluZzo6ZnJvbVVURjgobmFtZSkpOworICAg
ICAgICBpZiAoZWluYV9zdHJpbmdzaGFyZV9yZXBsYWNlKCZwcml2LT5zZXR0aW5ncy5mb250U2Fu
c1NlcmlmLCBuYW1lKSkKKyAgICAgICAgICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0U2Fuc1Nl
cmlmRm9udEZhbWlseShBdG9taWNTdHJpbmc6OmZyb21VVEY4KG5hbWUpKTsKICAgICAgICAgYnJl
YWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CkBAIC0yMzA0LDk5
ICsyMzA0LDk5IEBAIEVpbmFfQm9vbCBld2tfdmlld19mb250X2ZhbWlseV9uYW1lX3NldChFdmFz
X09iamVjdCogZXdrVmlldywgRXdrX0ZvbnRfRmFtaWx5IGZvCiAKIEVpbmFfQm9vbCBld2tfdmll
d19zZXR0aW5nX3NwYXRpYWxfbmF2aWdhdGlvbl9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1Zp
ZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9G
QUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZB
TFNFKTsKLSAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3Muc3BhdGlhbF9uYXZpZ2F0aW9uOworICAg
IEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNF
KTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5B
X0ZBTFNFKTsKKyAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3Muc3BhdGlhbE5hdmlnYXRpb247CiB9
CiAKIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX3NwYXRpYWxfbmF2aWdhdGlvbl9zZXQoRXZh
c19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCBlbmFibGUpCiB7Ci0gICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJ
Vl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9H
RVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJ
RVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAg
ZW5hYmxlID0gISFlbmFibGU7Ci0gICAgaWYgKHByaXYtPnNldHRpbmdzLnNwYXRpYWxfbmF2aWdh
dGlvbiAhPSBlbmFibGUpIHsKLSAgICAgICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0U3BhdGlh
bE5hdmlnYXRpb25FbmFibGVkKGVuYWJsZSk7Ci0gICAgICAgIHByaXYtPnNldHRpbmdzLnNwYXRp
YWxfbmF2aWdhdGlvbiA9IGVuYWJsZTsKKyAgICBpZiAocHJpdi0+c2V0dGluZ3Muc3BhdGlhbE5h
dmlnYXRpb24gIT0gZW5hYmxlKSB7CisgICAgICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0U3Bh
dGlhbE5hdmlnYXRpb25FbmFibGVkKGVuYWJsZSk7CisgICAgICAgIHByaXYtPnNldHRpbmdzLnNw
YXRpYWxOYXZpZ2F0aW9uID0gZW5hYmxlOwogICAgIH0KICAgICByZXR1cm4gRUlOQV9UUlVFOwog
fQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19sb2NhbF9zdG9yYWdlX2dldChjb25zdCBF
dmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3
a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4o
c2QsIHByaXYsIEVJTkFfRkFMU0UpOwotICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5sb2NhbF9z
dG9yYWdlOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRh
LCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRh
LCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MubG9jYWxTdG9y
YWdlOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19sb2NhbF9zdG9yYWdlX3NldChF
dmFzX09iamVjdCogZXdrVmlldywgRWluYV9Cb29sIGVuYWJsZSkKIHsKLSAgICBFV0tfVklFV19T
RF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19Q
UklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NE
X0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tf
VklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAg
ICBlbmFibGUgPSAhIWVuYWJsZTsKLSAgICBpZiAocHJpdi0+c2V0dGluZ3MubG9jYWxfc3RvcmFn
ZSAhPSBlbmFibGUpIHsKLSAgICAgICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0TG9jYWxTdG9y
YWdlRW5hYmxlZChlbmFibGUpOwotICAgICAgICBwcml2LT5zZXR0aW5ncy5sb2NhbF9zdG9yYWdl
ID0gZW5hYmxlOworICAgIGlmIChwcml2LT5zZXR0aW5ncy5sb2NhbFN0b3JhZ2UgIT0gZW5hYmxl
KSB7CisgICAgICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0TG9jYWxTdG9yYWdlRW5hYmxlZChl
bmFibGUpOworICAgICAgICBwcml2LT5zZXR0aW5ncy5sb2NhbFN0b3JhZ2UgPSBlbmFibGU7CiAg
ICAgfQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19zZXR0
aW5nX3BhZ2VfY2FjaGVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVX
S19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7Ci0gICAgcmV0
dXJuIHByaXYtPnNldHRpbmdzLnBhZ2VfY2FjaGU7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JF
VFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZf
R0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIHJldHVybiBw
cml2LT5zZXR0aW5ncy5wYWdlQ2FjaGU7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5n
X3BhZ2VfY2FjaGVfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wgZW5hYmxlKQog
ewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0Up
OwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7
CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFf
RkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYs
IEVJTkFfRkFMU0UpOwogICAgIGVuYWJsZSA9ICEhZW5hYmxlOwotICAgIGlmIChwcml2LT5zZXR0
aW5ncy5wYWdlX2NhY2hlICE9IGVuYWJsZSkgewotICAgICAgICBwcml2LT5wYWdlX3NldHRpbmdz
LT5zZXRVc2VzUGFnZUNhY2hlKGVuYWJsZSk7Ci0gICAgICAgIHByaXYtPnNldHRpbmdzLnBhZ2Vf
Y2FjaGUgPSBlbmFibGU7CisgICAgaWYgKHByaXYtPnNldHRpbmdzLnBhZ2VDYWNoZSAhPSBlbmFi
bGUpIHsKKyAgICAgICAgcHJpdi0+cGFnZVNldHRpbmdzLT5zZXRVc2VzUGFnZUNhY2hlKGVuYWJs
ZSk7CisgICAgICAgIHByaXYtPnNldHRpbmdzLnBhZ2VDYWNoZSA9IGVuYWJsZTsKICAgICB9CiAg
ICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAogY29uc3QgY2hhciogZXdrX3ZpZXdfc2V0dGluZ19s
b2NhbF9zdG9yYWdlX2RhdGFiYXNlX3BhdGhfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3
KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIDApOwotICAg
IEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgMCk7Ci0gICAgcmV0dXJuIHBy
aXYtPnNldHRpbmdzLmxvY2FsX3N0b3JhZ2VfZGF0YWJhc2VfcGF0aDsKKyAgICBFV0tfVklFV19T
RF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgMCk7CisgICAgRVdLX1ZJRVdfUFJJ
Vl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgMCk7CisgICAgcmV0dXJuIHByaXYtPnNl
dHRpbmdzLmxvY2FsU3RvcmFnZURhdGFiYXNlUGF0aDsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3
X3NldHRpbmdfbG9jYWxfc3RvcmFnZV9kYXRhYmFzZV9wYXRoX3NldChFdmFzX09iamVjdCogZXdr
VmlldywgY29uc3QgY2hhciogcGF0aCkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJO
KGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRV
Uk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwotICAgIGlmIChlaW5hX3N0cmluZ3NoYXJlX3JlcGxh
Y2UoJnByaXYtPnNldHRpbmdzLmxvY2FsX3N0b3JhZ2VfZGF0YWJhc2VfcGF0aCwgcGF0aCkpCi0g
ICAgICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNldExvY2FsU3RvcmFnZURhdGFiYXNlUGF0aChT
dHJpbmc6OmZyb21VVEY4KHBhdGgpKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3
a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1Jf
UkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgaWYgKGVpbmFfc3RyaW5n
c2hhcmVfcmVwbGFjZSgmcHJpdi0+c2V0dGluZ3MubG9jYWxTdG9yYWdlRGF0YWJhc2VQYXRoLCBw
YXRoKSkKKyAgICAgICAgcHJpdi0+cGFnZVNldHRpbmdzLT5zZXRMb2NhbFN0b3JhZ2VEYXRhYmFz
ZVBhdGgoU3RyaW5nOjpmcm9tVVRGOChwYXRoKSk7CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0K
IAogRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfbWluaW11bV90aW1lcl9pbnRlcnZhbF9zZXQo
RXZhc19PYmplY3QqIGV3a1ZpZXcsIGRvdWJsZSBpbnRlcnZhbCkKIHsKLSAgICBFV0tfVklFV19T
RF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19Q
UklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwotICAgIGlmIChmYWJzKHBy
aXYtPnNldHRpbmdzLmRvbV90aW1lcl9pbnRlcnZhbCAtIGludGVydmFsKSA+PSBzdGQ6Om51bWVy
aWNfbGltaXRzPGRvdWJsZT46OmVwc2lsb24oKSkgewotICAgICAgICBwcml2LT5wYWdlX3NldHRp
bmdzLT5zZXRNaW5ET01UaW1lckludGVydmFsKGludGVydmFsKTsKLSAgICAgICAgcHJpdi0+c2V0
dGluZ3MuZG9tX3RpbWVyX2ludGVydmFsID0gaW50ZXJ2YWw7CisgICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVX
X1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIGlm
IChmYWJzKHByaXYtPnNldHRpbmdzLmRvbVRpbWVySW50ZXJ2YWwgLSBpbnRlcnZhbCkgPj0gc3Rk
OjpudW1lcmljX2xpbWl0czxkb3VibGU+OjplcHNpbG9uKCkpIHsKKyAgICAgICAgcHJpdi0+cGFn
ZVNldHRpbmdzLT5zZXRNaW5ET01UaW1lckludGVydmFsKGludGVydmFsKTsKKyAgICAgICAgcHJp
di0+c2V0dGluZ3MuZG9tVGltZXJJbnRlcnZhbCA9IGludGVydmFsOwogICAgIH0KICAgICByZXR1
cm4gRUlOQV9UUlVFOwogfQogCiBkb3VibGUgZXdrX3ZpZXdfc2V0dGluZ19taW5pbXVtX3RpbWVy
X2ludGVydmFsX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklF
V19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklF
V19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwotICAgIHJldHVybiBw
cml2LT5zZXR0aW5ncy5kb21fdGltZXJfaW50ZXJ2YWw7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BS
SVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIHJldHVy
biBwcml2LT5zZXR0aW5ncy5kb21UaW1lckludGVydmFsOwogfQogCiBFd2tfVmlld19TbWFydF9E
YXRhKiBld2tfdmlld19zbWFydF9kYXRhX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykK
IHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAwKTsKLSAgICBy
ZXR1cm4gc2Q7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERh
dGEsIDApOworICAgIHJldHVybiBzbWFydERhdGE7CiB9CiAKIC8qKgpAQCAtMjQ2MSw4ICsyNDYx
LDggQEAgY29uc3QgRXdrX1Njcm9sbF9SZXF1ZXN0KiBld2tfdmlld19zY3JvbGxfcmVxdWVzdHNf
Z2V0KGNvbnN0IEV3a19WaWV3X1ByaXZhdGVfRGEKICAqIEBwYXJhbSBwcml2IHByaXZhdGUgaGFu
ZGxlIHBvaW50ZXIgb2YgdGhlIHZpZXcgdG8gYWRkIHJlcGFpbnQgcmVxdWVzdC4KICAqIEBwYXJh
bSB4IGhvcml6b250YWwgcG9zaXRpb24gcmVsYXRpdmUgdG8gY3VycmVudCB2aWV3IHBvcnQgKHNj
cm9sbGVkKS4KICAqIEBwYXJhbSB5IHZlcnRpY2FsIHBvc2l0aW9uIHJlbGF0aXZlIHRvIGN1cnJl
bnQgdmlldyBwb3J0IChzY3JvbGxlZCkuCi0gKiBAcGFyYW0gdyB3aWR0aCBvZiBhcmVhIHRvIGJl
IHJlcGFpbnRlZAotICogQHBhcmFtIGggaGVpZ2h0IG9mIGFyZWEgdG8gYmUgcmVwYWludGVkCisg
KiBAcGFyYW0gd2lkdGggd2lkdGggb2YgYXJlYSB0byBiZSByZXBhaW50ZWQKKyAqIEBwYXJhbSBo
ZWlnaHQgaGVpZ2h0IG9mIGFyZWEgdG8gYmUgcmVwYWludGVkCiAgKgogICogQG5vdGUgdGhpcyBp
cyBub3QgZm9yIGdlbmVyYWwgdXNlIGJ1dCBqdXN0IGZvciBzdWJjbGFzc2VzIHRoYXQgd2FudAog
ICogICAgICAgdG8gZGVmaW5lIHRoZWlyIG93biBiYWNraW5nIHN0b3JlLgpAQCAtMjQ4NSwxMiAr
MjQ4NSwxMiBAQCB2b2lkIGV3a192aWV3X2xheW91dF9pZl9uZWVkZWRfcmVjdXJzaXZlKEV3a19W
aWV3X1ByaXZhdGVfRGF0YSogcHJpdikKIHsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
Tihwcml2KTsKIAotICAgIFdlYkNvcmU6OkZyYW1lVmlldyogdiA9IHByaXYtPm1haW5fZnJhbWUt
PnZpZXcoKTsKLSAgICBpZiAoIXYpIHsKKyAgICBXZWJDb3JlOjpGcmFtZVZpZXcqIHZpZXcgPSBw
cml2LT5tYWluRnJhbWUtPnZpZXcoKTsKKyAgICBpZiAoIXZpZXcpIHsKICAgICAgICAgRVJSKCJu
byBtYWluIGZyYW1lIHZpZXciKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICB2LT51cGRh
dGVMYXlvdXRBbmRTdHlsZUlmTmVlZGVkUmVjdXJzaXZlKCk7CisgICAgdmlldy0+dXBkYXRlTGF5
b3V0QW5kU3R5bGVJZk5lZWRlZFJlY3Vyc2l2ZSgpOwogfQogCiB2b2lkIGV3a192aWV3X3Njcm9s
bHNfcHJvY2VzcyhFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEpCkBAIC0yNTExLDcgKzI1
MTEsNyBAQCB2b2lkIGV3a192aWV3X3Njcm9sbHNfcHJvY2VzcyhFd2tfVmlld19TbWFydF9EYXRh
KiBzbWFydERhdGEpCiAgKiAgICAgICB0byBkZWZpbmUgdGhlaXIgb3duIGJhY2tpbmcgc3RvcmUu
CiAgKi8KIHN0cnVjdCBfRXdrX1ZpZXdfUGFpbnRfQ29udGV4dCB7Ci0gICAgV2ViQ29yZTo6R3Jh
cGhpY3NDb250ZXh0KiBnYzsKKyAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQqIGdyYXBoaWND
b250ZXh0OwogICAgIFdlYkNvcmU6OkZyYW1lVmlldyogdmlldzsKICAgICBjYWlyb190KiBjcjsK
IH07CkBAIC0yNTIwLDI2ICsyNTIwLDI2IEBAIEV3a19WaWV3X1BhaW50X0NvbnRleHQqIGV3a192
aWV3X3BhaW50X2NvbnRleHRfbmV3KEV3a19WaWV3X1ByaXZhdGVfRGF0YSogcHJpdiwKIHsKICAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwocHJpdiwgMCk7CiAgICAgRUlOQV9TQUZF
VFlfT05fTlVMTF9SRVRVUk5fVkFMKGNyLCAwKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTl9WQUwocHJpdi0+bWFpbl9mcmFtZSwgMCk7Ci0gICAgV2ViQ29yZTo6RnJhbWVWaWV3KiB2
aWV3ID0gcHJpdi0+bWFpbl9mcmFtZS0+dmlldygpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOX1ZBTChwcml2LT5tYWluRnJhbWUsIDApOworICAgIFdlYkNvcmU6OkZyYW1lVmlldyog
dmlldyA9IHByaXYtPm1haW5GcmFtZS0+dmlldygpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOX1ZBTCh2aWV3LCAwKTsKLSAgICBFd2tfVmlld19QYWludF9Db250ZXh0KiBjdHh0ID0g
c3RhdGljX2Nhc3Q8RXdrX1ZpZXdfUGFpbnRfQ29udGV4dCo+KG1hbGxvYyhzaXplb2YoKmN0eHQp
KSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGN0eHQsIDApOworICAgIEV3
a19WaWV3X1BhaW50X0NvbnRleHQqIGNvbnRleHQgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19QYWlu
dF9Db250ZXh0Kj4obWFsbG9jKHNpemVvZigqY29udGV4dCkpKTsKKyAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTl9WQUwoY29udGV4dCwgMCk7CiAKLSAgICBjdHh0LT5nYyA9IG5ldyBXZWJD
b3JlOjpHcmFwaGljc0NvbnRleHQoY3IpOwotICAgIGlmICghY3R4dC0+Z2MpIHsKLSAgICAgICAg
ZnJlZShjdHh0KTsKKyAgICBjb250ZXh0LT5ncmFwaGljQ29udGV4dCA9IG5ldyBXZWJDb3JlOjpH
cmFwaGljc0NvbnRleHQoY3IpOworICAgIGlmICghY29udGV4dC0+Z3JhcGhpY0NvbnRleHQpIHsK
KyAgICAgICAgZnJlZShjb250ZXh0KTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIGN0
eHQtPnZpZXcgPSB2aWV3OwotICAgIGN0eHQtPmNyID0gY2Fpcm9fcmVmZXJlbmNlKGNyKTsKLSAg
ICByZXR1cm4gY3R4dDsKKyAgICBjb250ZXh0LT52aWV3ID0gdmlldzsKKyAgICBjb250ZXh0LT5j
ciA9IGNhaXJvX3JlZmVyZW5jZShjcik7CisgICAgcmV0dXJuIGNvbnRleHQ7CiB9CiAKIHZvaWQg
ZXdrX3ZpZXdfcGFpbnRfY29udGV4dF9mcmVlKEV3a19WaWV3X1BhaW50X0NvbnRleHQqIGNvbnRl
eHQpCiB7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oY29udGV4dCk7Ci0gICAgZGVs
ZXRlIGNvbnRleHQtPmdjOworICAgIGRlbGV0ZSBjb250ZXh0LT5ncmFwaGljQ29udGV4dDsKICAg
ICBjYWlyb19kZXN0cm95KGNvbnRleHQtPmNyKTsKICAgICBmcmVlKGNvbnRleHQpOwogfQpAQCAt
MjU0OCwxMyArMjU0OCwxMyBAQCB2b2lkIGV3a192aWV3X3BhaW50X2NvbnRleHRfc2F2ZShFd2tf
Vmlld19QYWludF9Db250ZXh0KiBjb250ZXh0KQogewogICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOKGNvbnRleHQpOwogICAgIGNhaXJvX3NhdmUoY29udGV4dC0+Y3IpOwotICAgIGNvbnRl
eHQtPmdjLT5zYXZlKCk7CisgICAgY29udGV4dC0+Z3JhcGhpY0NvbnRleHQtPnNhdmUoKTsKIH0K
IAogdm9pZCBld2tfdmlld19wYWludF9jb250ZXh0X3Jlc3RvcmUoRXdrX1ZpZXdfUGFpbnRfQ29u
dGV4dCogY29udGV4dCkKIHsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihjb250ZXh0
KTsKLSAgICBjb250ZXh0LT5nYy0+cmVzdG9yZSgpOworICAgIGNvbnRleHQtPmdyYXBoaWNDb250
ZXh0LT5yZXN0b3JlKCk7CiAgICAgY2Fpcm9fcmVzdG9yZShjb250ZXh0LT5jcik7CiB9CiAKQEAg
LTI1NjIsNyArMjU2Miw3IEBAIHZvaWQgZXdrX3ZpZXdfcGFpbnRfY29udGV4dF9jbGlwKEV3a19W
aWV3X1BhaW50X0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEVpbmFfUmVjCiB7CiAgICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk4oY29udGV4dCk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk4oYXJlYSk7Ci0gICAgY29udGV4dC0+Z2MtPmNsaXAoV2ViQ29yZTo6SW50UmVjdChhcmVh
LT54LCBhcmVhLT55LCBhcmVhLT53LCBhcmVhLT5oKSk7CisgICAgY29udGV4dC0+Z3JhcGhpY0Nv
bnRleHQtPmNsaXAoV2ViQ29yZTo6SW50UmVjdChhcmVhLT54LCBhcmVhLT55LCBhcmVhLT53LCBh
cmVhLT5oKSk7CiB9CiAKIHZvaWQgZXdrX3ZpZXdfcGFpbnRfY29udGV4dF9wYWludChFd2tfVmll
d19QYWludF9Db250ZXh0KiBjb250ZXh0LCBjb25zdCBFaW5hX1JlY3RhbmdsZSogYXJlYSkKQEAg
LTI1NzMsOCArMjU3Myw4IEBAIHZvaWQgZXdrX3ZpZXdfcGFpbnRfY29udGV4dF9wYWludChFd2tf
Vmlld19QYWludF9Db250ZXh0KiBjb250ZXh0LCBjb25zdCBFaW5hX1JlCiAgICAgV2ViQ29yZTo6
SW50UmVjdCByZWN0KGFyZWEtPngsIGFyZWEtPnksIGFyZWEtPncsIGFyZWEtPmgpOwogCiAgICAg
aWYgKGNvbnRleHQtPnZpZXctPmlzVHJhbnNwYXJlbnQoKSkKLSAgICAgICAgY29udGV4dC0+Z2Mt
PmNsZWFyUmVjdChyZWN0KTsKLSAgICBjb250ZXh0LT52aWV3LT5wYWludChjb250ZXh0LT5nYywg
cmVjdCk7CisgICAgICAgIGNvbnRleHQtPmdyYXBoaWNDb250ZXh0LT5jbGVhclJlY3QocmVjdCk7
CisgICAgY29udGV4dC0+dmlldy0+cGFpbnQoY29udGV4dC0+Z3JhcGhpY0NvbnRleHQsIHJlY3Qp
OwogfQogCiB2b2lkIGV3a192aWV3X3BhaW50X2NvbnRleHRfcGFpbnRfY29udGVudHMoRXdrX1Zp
ZXdfUGFpbnRfQ29udGV4dCogY29udGV4dCwgY29uc3QgRWluYV9SZWN0YW5nbGUqIGFyZWEpCkBA
IC0yNTg1LDIzICsyNTg1LDIzIEBAIHZvaWQgZXdrX3ZpZXdfcGFpbnRfY29udGV4dF9wYWludF9j
b250ZW50cyhFd2tfVmlld19QYWludF9Db250ZXh0KiBjb250ZXh0LCBjb25zCiAgICAgV2ViQ29y
ZTo6SW50UmVjdCByZWN0KGFyZWEtPngsIGFyZWEtPnksIGFyZWEtPncsIGFyZWEtPmgpOwogCiAg
ICAgaWYgKGNvbnRleHQtPnZpZXctPmlzVHJhbnNwYXJlbnQoKSkKLSAgICAgICAgY29udGV4dC0+
Z2MtPmNsZWFyUmVjdChyZWN0KTsKKyAgICAgICAgY29udGV4dC0+Z3JhcGhpY0NvbnRleHQtPmNs
ZWFyUmVjdChyZWN0KTsKIAotICAgIGNvbnRleHQtPnZpZXctPnBhaW50Q29udGVudHMoY29udGV4
dC0+Z2MsIHJlY3QpOworICAgIGNvbnRleHQtPnZpZXctPnBhaW50Q29udGVudHMoY29udGV4dC0+
Z3JhcGhpY0NvbnRleHQsIHJlY3QpOwogfQogCiB2b2lkIGV3a192aWV3X3BhaW50X2NvbnRleHRf
c2NhbGUoRXdrX1ZpZXdfUGFpbnRfQ29udGV4dCogY29udGV4dCwgZmxvYXQgc2NhbGVYLCBmbG9h
dCBzY2FsZVkpCiB7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oY29udGV4dCk7CiAK
LSAgICBjb250ZXh0LT5nYy0+c2NhbGUoV2ViQ29yZTo6RmxvYXRTaXplKHNjYWxlWCwgc2NhbGVZ
KSk7CisgICAgY29udGV4dC0+Z3JhcGhpY0NvbnRleHQtPnNjYWxlKFdlYkNvcmU6OkZsb2F0U2l6
ZShzY2FsZVgsIHNjYWxlWSkpOwogfQogCiB2b2lkIGV3a192aWV3X3BhaW50X2NvbnRleHRfdHJh
bnNsYXRlKEV3a19WaWV3X1BhaW50X0NvbnRleHQqIGNvbnRleHQsIGZsb2F0IHgsIGZsb2F0IHkp
CiB7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oY29udGV4dCk7CiAKLSAgICBjb250
ZXh0LT5nYy0+dHJhbnNsYXRlKHgsIHkpOworICAgIGNvbnRleHQtPmdyYXBoaWNDb250ZXh0LT50
cmFuc2xhdGUoeCwgeSk7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19wYWludChFd2tfVmlld19Q
cml2YXRlX0RhdGEqIHByaXYsIGNhaXJvX3QqIGNyLCBjb25zdCBFaW5hX1JlY3RhbmdsZSogYXJl
YSkKQEAgLTI2MDksMjEgKzI2MDksMjEgQEAgRWluYV9Cb29sIGV3a192aWV3X3BhaW50KEV3a19W
aWV3X1ByaXZhdGVfRGF0YSogcHJpdiwgY2Fpcm9fdCogY3IsIGNvbnN0IEVpbmFfUmUKICAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwocHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGNyLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoYXJlYSwgRUlOQV9GQUxTRSk7Ci0gICAgV2ViQ29yZTo6
RnJhbWVWaWV3KiB2aWV3ID0gcHJpdi0+bWFpbl9mcmFtZS0+dmlldygpOworICAgIFdlYkNvcmU6
OkZyYW1lVmlldyogdmlldyA9IHByaXYtPm1haW5GcmFtZS0+dmlldygpOwogICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOX1ZBTCh2aWV3LCBFSU5BX0ZBTFNFKTsKIAogICAgIGlmICh2aWV3
LT5uZWVkc0xheW91dCgpKQogICAgICAgICB2aWV3LT5mb3JjZUxheW91dCgpOwotICAgIFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dCBnYyhjcik7CisgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0
IGdyYXBoaWNzQ29udGV4dChjcik7CiAgICAgV2ViQ29yZTo6SW50UmVjdCByZWN0KGFyZWEtPngs
IGFyZWEtPnksIGFyZWEtPncsIGFyZWEtPmgpOwogCiAgICAgY2Fpcm9fc2F2ZShjcik7Ci0gICAg
Z2Muc2F2ZSgpOwotICAgIGdjLmNsaXAocmVjdCk7CisgICAgZ3JhcGhpY3NDb250ZXh0LnNhdmUo
KTsKKyAgICBncmFwaGljc0NvbnRleHQuY2xpcChyZWN0KTsKICAgICBpZiAodmlldy0+aXNUcmFu
c3BhcmVudCgpKQotICAgICAgICBnYy5jbGVhclJlY3QocmVjdCk7Ci0gICAgdmlldy0+cGFpbnQo
JmdjLCByZWN0KTsKLSAgICBnYy5yZXN0b3JlKCk7CisgICAgICAgIGdyYXBoaWNzQ29udGV4dC5j
bGVhclJlY3QocmVjdCk7CisgICAgdmlldy0+cGFpbnQoJmdyYXBoaWNzQ29udGV4dCwgcmVjdCk7
CisgICAgZ3JhcGhpY3NDb250ZXh0LnJlc3RvcmUoKTsKICAgICBjYWlyb19yZXN0b3JlKGNyKTsK
IAogICAgIHJldHVybiBFSU5BX1RSVUU7CkBAIC0yNjM0LDE5ICsyNjM0LDE5IEBAIEVpbmFfQm9v
bCBld2tfdmlld19wYWludF9jb250ZW50cyhFd2tfVmlld19Qcml2YXRlX0RhdGEqIHByaXYsIGNh
aXJvX3QqIGNyLCBjb25zCiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHByaXYs
IEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChjciwgRUlO
QV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGFyZWEsIEVJTkFf
RkFMU0UpOwotICAgIFdlYkNvcmU6OkZyYW1lVmlldyogdmlldyA9IHByaXYtPm1haW5fZnJhbWUt
PnZpZXcoKTsKKyAgICBXZWJDb3JlOjpGcmFtZVZpZXcqIHZpZXcgPSBwcml2LT5tYWluRnJhbWUt
PnZpZXcoKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodmlldywgRUlOQV9G
QUxTRSk7CiAKLSAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQgZ2MoY3IpOworICAgIFdlYkNv
cmU6OkdyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHQoY3IpOwogICAgIFdlYkNvcmU6Oklu
dFJlY3QgcmVjdChhcmVhLT54LCBhcmVhLT55LCBhcmVhLT53LCBhcmVhLT5oKTsKIAogICAgIGNh
aXJvX3NhdmUoY3IpOwotICAgIGdjLnNhdmUoKTsKLSAgICBnYy5jbGlwKHJlY3QpOworICAgIGdy
YXBoaWNzQ29udGV4dC5zYXZlKCk7CisgICAgZ3JhcGhpY3NDb250ZXh0LmNsaXAocmVjdCk7CiAg
ICAgaWYgKHZpZXctPmlzVHJhbnNwYXJlbnQoKSkKLSAgICAgICAgZ2MuY2xlYXJSZWN0KHJlY3Qp
OwotICAgIHZpZXctPnBhaW50Q29udGVudHMoJmdjLCAgcmVjdCk7Ci0gICAgZ2MucmVzdG9yZSgp
OworICAgICAgICBncmFwaGljc0NvbnRleHQuY2xlYXJSZWN0KHJlY3QpOworICAgIHZpZXctPnBh
aW50Q29udGVudHMoJmdyYXBoaWNzQ29udGV4dCwgIHJlY3QpOworICAgIGdyYXBoaWNzQ29udGV4
dC5yZXN0b3JlKCk7CiAgICAgY2Fpcm9fcmVzdG9yZShjcik7CiAKICAgICByZXR1cm4gRUlOQV9U
UlVFOwpAQCAtMjY3Niw4ICsyNjc2LDggQEAgdm9pZCBld2tfdmlld19yZWFkeShFdmFzX09iamVj
dCogZXdrVmlldykKICAqLwogdm9pZCBld2tfdmlld19pbnB1dF9tZXRob2Rfc3RhdGVfc2V0KEV2
YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wgYWN0aXZlKQogewotICAgIEVXS19WSUVXX1NE
X0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUKHNkLCBw
cml2KTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSk7
CisgICAgRVdLX1ZJRVdfUFJJVl9HRVQoc21hcnREYXRhLCBwcml2KTsKICAgICBXZWJDb3JlOjpG
cmFtZSogZm9jdXNlZEZyYW1lID0gcHJpdi0+cGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZvY3Vz
ZWRPck1haW5GcmFtZSgpOwogCiAgICAgcHJpdi0+aW1oID0gMDsKQEAgLTI3MjYsOCArMjcyNiw4
IEBAIHZvaWQgZXdrX3ZpZXdfdGl0bGVfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBj
aGFyKiB0aXRsZSkKICAqLwogdm9pZCBld2tfdmlld191cmlfY2hhbmdlZChFdmFzX09iamVjdCog
ZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkKTsK
LSAgICBjb25zdCBjaGFyKiB1cmkgPSBld2tfZnJhbWVfdXJpX2dldChzZC0+bWFpbl9mcmFtZSk7
CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEpOworICAg
IGNvbnN0IGNoYXIqIHVyaSA9IGV3a19mcmFtZV91cmlfZ2V0KHNtYXJ0RGF0YS0+bWFpbl9mcmFt
ZSk7CiAgICAgREJHKCJld2tWaWV3PSVwLCB1cmk9JXMiLCBld2tWaWV3LCB1cmkgPyB1cmkgOiAi
KG51bGwpIik7CiAgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChld2tWaWV3LCAi
dXJpLGNoYW5nZWQiLCAodm9pZCopdXJpKTsKIH0KQEAgLTI3MzYsNyArMjczNiw3IEBAIHZvaWQg
ZXdrX3ZpZXdfdXJpX2NoYW5nZWQoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiAgKiBAaW50ZXJuYWwK
ICAqIFJlcG9ydHMgdGhhdCBhIERPTSBkb2N1bWVudCBvYmplY3QgaGFzIGZpbmlzaGVkIGxvYWRp
bmcgZm9yIEBwIGZyYW1lLgogICoKLSAqIEBwYXJhbSBvIFZpZXcgd2hpY2ggY29udGFpbnMgdGhl
IGZyYW1lLgorICogQHBhcmFtIGV3a1ZpZXcgVmlldyB3aGljaCBjb250YWlucyB0aGUgZnJhbWUu
CiAgKiBAcGFyYW0gZnJhbWUgVGhlIGZyYW1lIHdob3NlIGxvYWQgaGFzIHRyaWdnZXJlZCB0aGUg
ZXZlbnQuCiAgKgogICogRW1pdHMgc2lnbmFsOiAibG9hZCxkb2N1bWVudCxmaW5pc2hlZCIgd2l0
aCBAcCBmcmFtZSBhcyB0aGUgcGFyYW1ldGVyLgpAQCAtMjc1MCw3ICsyNzUwLDcgQEAgdm9pZCBl
d2tfdmlld19sb2FkX2RvY3VtZW50X2ZpbmlzaGVkKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFdmFz
X09iamVjdCogZnJhbWUpCiAgKiBAaW50ZXJuYWwKICAqIFJlcG9ydHMgdGhlIHZpZXcgc3RhcnRl
ZCBsb2FkaW5nIHNvbWV0aGluZy4KICAqCi0gKiBAcGFyYW0gbyBWaWV3LgorICogQHBhcmFtIGV3
a1ZpZXcgVmlldy4KICAqCiAgKiBFbWl0cyBzaWduYWw6ICJsb2FkLHN0YXJ0ZWQiIHdpdGggbm8g
cGFyYW1ldGVycy4KICAqLwpAQCAtMjc2Myw3ICsyNzYzLDcgQEAgdm9pZCBld2tfdmlld19sb2Fk
X3N0YXJ0ZWQoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiAvKioKICAqIFJlcG9ydHMgdGhlIGZyYW1l
IHN0YXJ0ZWQgbG9hZGluZyBzb21ldGhpbmcuCiAgKgotICogQHBhcmFtIG8gVmlldy4KKyAqIEBw
YXJhbSBld2tWaWV3IFZpZXcuCiAgKgogICogRW1pdHMgc2lnbmFsOiAibG9hZCxzdGFydGVkIiBv
biBtYWluIGZyYW1lIHdpdGggbm8gcGFyYW1ldGVycy4KICAqLwpAQCAtMjc3OCw3ICsyNzc4LDcg
QEAgdm9pZCBld2tfdmlld19mcmFtZV9tYWluX2xvYWRfc3RhcnRlZChFdmFzX09iamVjdCogZXdr
VmlldykKICAqIEBpbnRlcm5hbAogICogUmVwb3J0cyB0aGUgbWFpbiBmcmFtZSBzdGFydGVkIHBy
b3Zpc2lvbmFsIGxvYWQuCiAgKgotICogQHBhcmFtIG8gVmlldy4KKyAqIEBwYXJhbSBld2tWaWV3
IFZpZXcuCiAgKgogICogRW1pdHMgc2lnbmFsOiAibG9hZCxwcm92aXNpb25hbCIgb24gVmlldyB3
aXRoIG5vIHBhcmFtZXRlcnMuCiAgKi8KQEAgLTI3OTIsNyArMjc5Miw3IEBAIHZvaWQgZXdrX3Zp
ZXdfbG9hZF9wcm92aXNpb25hbChFdmFzX09iamVjdCogZXdrVmlldykKICAqIEBpbnRlcm5hbAog
ICogUmVwb3J0cyB2aWV3IGNhbiBiZSBzaG93biBhZnRlciBhIG5ldyB3aW5kb3cgaXMgY3JlYXRl
ZC4KICAqCi0gKiBAcGFyYW0gbyBGcmFtZS4KKyAqIEBwYXJhbSBld2tWaWV3IEZyYW1lLgogICoK
ICAqIEVtaXRzIHNpZ25hbDogImxvYWQsbmV3d2luZG93LHNob3ciIG9uIHZpZXcgd2l0aCBubyBw
YXJhbWV0ZXJzLgogICovCkBAIC0yODA3LDIxICsyODA3LDIxIEBAIHZvaWQgZXdrX3ZpZXdfbG9h
ZF9zaG93KEV2YXNfT2JqZWN0KiBld2tWaWV3KQogICogQGludGVybmFsCiAgKiBSZXBvcnRzIHRo
ZSBtYWluIGZyYW1lIHdhcyBjbGVhcmVkLgogICoKLSAqIEBwYXJhbSBvIFZpZXcuCisgKiBAcGFy
YW0gZXdrVmlldyBWaWV3LgogICovCiB2b2lkIGV3a192aWV3X2ZyYW1lX21haW5fY2xlYXJlZChF
dmFzX09iamVjdCogZXdrVmlldykKIHsKICAgICBEQkcoImV3a1ZpZXc9JXAiLCBld2tWaWV3KTsK
LSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkKTsKLSAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpLT5mbHVzaCk7Ci0gICAgc2QtPmFwaS0+Zmx1c2go
c2QpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhKTsK
KyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmFwaS0+Zmx1c2gpOwor
ICAgIHNtYXJ0RGF0YS0+YXBpLT5mbHVzaChzbWFydERhdGEpOwogfQogCiAvKioKICAqIEBpbnRl
cm5hbAogICogUmVwb3J0cyB0aGUgbWFpbiBmcmFtZSByZWNlaXZlZCBhbiBpY29uLgogICoKLSAq
IEBwYXJhbSBvIFZpZXcuCisgKiBAcGFyYW0gZXdrVmlldyBWaWV3LgogICoKICAqIEVtaXRzIHNp
Z25hbDogImljb24scmVjZWl2ZWQiIHdpdGggbm8gcGFyYW1ldGVycy4KICAqLwpAQCAtMjg2OCwx
MCArMjg2OCwxMCBAQCB2b2lkIGV3a192aWV3X2xvYWRfZXJyb3IoRXZhc19PYmplY3QqIGV3a1Zp
ZXcsIGNvbnN0IEV3a19GcmFtZV9Mb2FkX0Vycm9yKiBlcnJvcgogICovCiB2b2lkIGV3a192aWV3
X2xvYWRfcHJvZ3Jlc3NfY2hhbmdlZChFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tf
VklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkKTsKLSAgICBFV0tfVklFV19QUklWX0dF
VF9PUl9SRVRVUk4oc2QsIHByaXYpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdr
Vmlldywgc21hcnREYXRhKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnRE
YXRhLCBwcml2KTsKIAotICAgIC8vIEV2YXNfQ29vcmQgdywgaDsKKyAgICAvLyBFdmFzX0Nvb3Jk
IHdpZHRoLCBoZWlnaHQ7CiAgICAgZG91YmxlIHByb2dyZXNzID0gcHJpdi0+cGFnZS0+cHJvZ3Jl
c3MoKS0+ZXN0aW1hdGVkUHJvZ3Jlc3MoKTsKIAogICAgIERCRygiZXdrVmlldz0lcCAocD0lMC4z
ZikiLCBld2tWaWV3LCBwcm9ncmVzcyk7CkBAIC0yODgxLDkgKzI4ODEsOSBAQCB2b2lkIGV3a192
aWV3X2xvYWRfcHJvZ3Jlc3NfY2hhbmdlZChFdmFzX09iamVjdCogZXdrVmlldykKIAogLyoqCiAg
KiBAaW50ZXJuYWwKLSAqIFJlcG9ydHMgdmlldyBAcGFyYW0gbyBzaG91bGQgYmUgcmVzdG9yZWQg
dG8gZGVmYXVsdCBjb25kaXRpb25zCisgKiBSZXBvcnRzIHZpZXcgQHBhcmFtIGV3a1ZpZXcgc2hv
dWxkIGJlIHJlc3RvcmVkIHRvIGRlZmF1bHQgY29uZGl0aW9ucwogICoKLSAqIEBwYXJhbSBvIFZp
ZXcuCisgKiBAcGFyYW0gZXdrVmlldyBWaWV3LgogICogQHBhcmFtIGZyYW1lIEZyYW1lIHRoYXQg
b3JpZ2luYXRlZCByZXN0b3JlLgogICoKICAqIEVtaXRzIHNpZ25hbDogInJlc3RvcmUiIHdpdGgg
ZnJhbWUuCkBAIC0yOTAzLDMwICsyOTAzLDMwIEBAIHZvaWQgZXdrX3ZpZXdfcmVzdG9yZV9zdGF0
ZShFdmFzX09iamVjdCogZXdrVmlldywgRXZhc19PYmplY3QqIGZyYW1lKQogICogY2FsbGluZyBl
d2tfd2luZG93X2ZlYXR1cmVzX3JlZih3aW5kb3dfZmVhdHVyZXMpLiBPdGhlcndpc2UgdGhpcyBz
dHJ1Y3Qgd2lsbAogICogYmUgZnJlZWQgYWZ0ZXIgcmV0dXJuaW5nIHRvIHRoaXMgZnVuY3Rpb24u
CiAgKgotICogQHBhcmFtIG8gQ3VycmVudCB2aWV3LgorICogQHBhcmFtIGV3a1ZpZXcgQ3VycmVu
dCB2aWV3LgogICogQHBhcmFtIGphdmFzY3JpcHQgQGMgRUlOQV9UUlVFIGlmIHRoZSBuZXcgd2lu
ZG93IGlzIG9yaWdpbmF0ZWQgZnJvbSBqYXZhc2NyaXB0LAogICogQGMgRUlOQV9GQUxTRSBvdGhl
cndpc2UKLSAqIEBwYXJhbSB3aW5kb3dfZmVhdHVyZXMgRmVhdHVyZXMgb2YgdGhlIG5ldyB3aW5k
b3cgYmVpbmcgY3JlYXRlZC4gSWYgaXQncyBAYworICogQHBhcmFtIHdpZHRoaW5kb3dfZmVhdHVy
ZXMgRmVhdHVyZXMgb2YgdGhlIG5ldyB3aW5kb3cgYmVpbmcgY3JlYXRlZC4gSWYgaXQncyBAYwog
ICogTlVMTCwgaXQgd2lsbCBiZSBjcmVhdGVkIGEgd2luZG93IHdpdGggZGVmYXVsdCBmZWF0dXJl
cy4KICAqCiAgKiBAcmV0dXJuIE5ldyB2aWV3LCBpbiBjYXNlIHNtYXJ0IGNsYXNzIGltcGxlbWVu
dHMgdGhlIGNyZWF0aW9uIG9mIG5ldyB3aW5kb3dzOwotICogZWxzZSwgY3VycmVudCB2aWV3IEBw
YXJhbSBvIG9yIEBjIDAgb24gZmFpbHVyZS4KKyAqIGVsc2UsIGN1cnJlbnQgdmlldyBAcGFyYW0g
ZXdrVmlldyBvciBAYyAwIG9uIGZhaWx1cmUuCiAgKgogICogQHNlZSBld2tfd2luZG93X2ZlYXR1
cmVzX3JlZigpLgogICovCiBFdmFzX09iamVjdCogZXdrX3ZpZXdfd2luZG93X2NyZWF0ZShFdmFz
X09iamVjdCogZXdrVmlldywgRWluYV9Cb29sIGphdmFzY3JpcHQsIGNvbnN0IFdlYkNvcmU6Oldp
bmRvd0ZlYXR1cmVzKiBjb3JlRmVhdHVyZXMpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JF
VFVSTihld2tWaWV3LCBzZCwgMCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tW
aWV3LCBzbWFydERhdGEsIDApOwogCi0gICAgaWYgKCFzZC0+YXBpLT53aW5kb3dfY3JlYXRlKQor
ICAgIGlmICghc21hcnREYXRhLT5hcGktPndpbmRvd19jcmVhdGUpCiAgICAgICAgIHJldHVybiBl
d2tWaWV3OwogCi0gICAgRXdrX1dpbmRvd19GZWF0dXJlcyogd2luZG93X2ZlYXR1cmVzID0gZXdr
X3dpbmRvd19mZWF0dXJlc19uZXdfZnJvbV9jb3JlKGNvcmVGZWF0dXJlcyk7Ci0gICAgaWYgKCF3
aW5kb3dfZmVhdHVyZXMpCisgICAgRXdrX1dpbmRvd19GZWF0dXJlcyogd2luZG93RmVhdHVyZXMg
PSBld2tfd2luZG93X2ZlYXR1cmVzX25ld19mcm9tX2NvcmUoY29yZUZlYXR1cmVzKTsKKyAgICBp
ZiAoIXdpbmRvd0ZlYXR1cmVzKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIEV2YXNfT2JqZWN0
KiB2aWV3ID0gc2QtPmFwaS0+d2luZG93X2NyZWF0ZShzZCwgamF2YXNjcmlwdCwgd2luZG93X2Zl
YXR1cmVzKTsKLSAgICBld2tfd2luZG93X2ZlYXR1cmVzX3VucmVmKHdpbmRvd19mZWF0dXJlcyk7
CisgICAgRXZhc19PYmplY3QqIHZpZXcgPSBzbWFydERhdGEtPmFwaS0+d2luZG93X2NyZWF0ZShz
bWFydERhdGEsIGphdmFzY3JpcHQsIHdpbmRvd0ZlYXR1cmVzKTsKKyAgICBld2tfd2luZG93X2Zl
YXR1cmVzX3VucmVmKHdpbmRvd0ZlYXR1cmVzKTsKIAogICAgIHJldHVybiB2aWV3OwogfQpAQCAt
Mjk0MCwxNiArMjk0MCwxNiBAQCBFdmFzX09iamVjdCogZXdrX3ZpZXdfd2luZG93X2NyZWF0ZShF
dmFzX09iamVjdCogZXdrVmlldywgRWluYV9Cb29sIGphdmFzY3JpcHQsCiAgKiB3aXRoIGEgJ3Nl
bGYuY2xvc2UoKScgaW4gSmF2YXNjcmlwdCkgYnJvd3NlciBtdXN0IHBvc3Rwb25lIHRoZSBkZWxl
dGlvbiB0byBhbgogICogaWRsZXIuCiAgKgotICogQHBhcmFtIG8gVmlldyB0byBiZSBjbG9zZWQu
CisgKiBAcGFyYW0gZXdrVmlldyBWaWV3IHRvIGJlIGNsb3NlZC4KICAqLwogdm9pZCBld2tfdmll
d193aW5kb3dfY2xvc2UoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
Tihld2tWaWV3LCBzbWFydERhdGEpOwogCiAgICAgZXdrX3ZpZXdfc3RvcChld2tWaWV3KTsKLSAg
ICBpZiAoIXNkLT5hcGktPndpbmRvd19jbG9zZSkKKyAgICBpZiAoIXNtYXJ0RGF0YS0+YXBpLT53
aW5kb3dfY2xvc2UpCiAgICAgICAgIHJldHVybjsKLSAgICBzZC0+YXBpLT53aW5kb3dfY2xvc2Uo
c2QpOworICAgIHNtYXJ0RGF0YS0+YXBpLT53aW5kb3dfY2xvc2Uoc21hcnREYXRhKTsKIH0KIAog
LyoqCkBAIC0yOTkwLDcgKzI5OTAsNyBAQCB2b2lkIGV3a192aWV3X3Rvb2xiYXJzX3Zpc2libGVf
c2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wgdmlzaWJsZSkKICAqIEBpbnRlcm5h
bAogICogR2V0IHRvb2xiYXIgdmlzaWJpbGl0eS4KICAqCi0gKiBAcGFyYW0gbyBWaWV3LgorICog
QHBhcmFtIGV3a1ZpZXcgVmlldy4KICAqIEBwYXJhbSB2aXNpYmxlIGJvb2xlYW4gcG9pbnRlciBp
biB3aGljaCB0byBzYXZlIHRoZSByZXN1bHQuIEl0IGRlZmF1bHRzCiAgKiB0byBAYyBGQUxTRSwg
aS5lLiBpZiBicm93c2VyIGRvZXMgbm8gbGlzdGVuIHRvIGVtaXR0ZWQgc2lnbmFsLCBpdCBtZWFu
cwogICogdGhlcmUgYXJlIG5vIHRvb2xiYXJzIGFuZCB0aGVyZWZvcmUgdGhleSBhcmUgbm90IHZp
c2libGUuCkBAIC0zMDA4LDcgKzMwMDgsNyBAQCB2b2lkIGV3a192aWV3X3Rvb2xiYXJzX3Zpc2li
bGVfZ2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wqIHZpc2libGUpCiAgKiBAaW50
ZXJuYWwKICAqIFNldCBzdGF0dXNiYXIgdmlzaWJsZS4KICAqCi0gKiBAcGFyYW0gbyBWaWV3Lgor
ICogQHBhcmFtIGV3a1ZpZXcgVmlldy4KICAqIEBwYXJhbSB2aXNpYmxlIEBjIFRSVUUgaWYgc3Rh
dHVzYmFyIGFyZSB2aXNpYmxlLCBAYyBGQUxTRSBvdGhlcndpc2UuCiAgKgogICogRW1pdHMgc2ln
bmFsOiAic3RhdHVzYmFyLHZpc2libGUsc2V0IiB3aXRoIGEgcG9pbnRlciB0byBhIGJvb2xlYW4u
CkBAIC0zMDIzLDcgKzMwMjMsNyBAQCB2b2lkIGV3a192aWV3X3N0YXR1c2Jhcl92aXNpYmxlX3Nl
dChFdmFzX09iamVjdCogZXdrVmlldywgRWluYV9Cb29sIHZpc2libGUpCiAgKiBAaW50ZXJuYWwK
ICAqIEdldCBzdGF0dXNiYXIgdmlzaWJpbGl0eS4KICAqCi0gKiBAcGFyYW0gbyBWaWV3LgorICog
QHBhcmFtIGV3a1ZpZXcgVmlldy4KICAqIEBwYXJhbSB2aXNpYmxlIGJvb2xlYW4gcG9pbnRlciBp
biB3aGljaCB0byBzYXZlIHRoZSByZXN1bHQuIEl0IGRlZmF1bHRzCiAgKiB0byBAYyBGQUxTRSwg
aS5lLiBpZiBicm93c2VyIGRvZXMgbm8gbGlzdGVuIHRvIGVtaXR0ZWQgc2lnbmFsLCBpdCBtZWFu
cwogICogdGhlcmUgaXMgbm8gc3RhdHVzYmFyIGFuZCB0aGVyZWZvcmUgaXQgaXMgbm90IHZpc2li
bGUuCkBAIC0zMDQxLDcgKzMwNDEsNyBAQCB2b2lkIGV3a192aWV3X3N0YXR1c2Jhcl92aXNpYmxl
X2dldChFdmFzX09iamVjdCogZXdrVmlldywgRWluYV9Cb29sKiB2aXNpYmxlKQogICogQGludGVy
bmFsCiAgKiBTZXQgdGV4dCBvZiBzdGF0dXNiYXIKICAqCi0gKiBAcGFyYW0gbyBWaWV3LgorICog
QHBhcmFtIGV3a1ZpZXcgVmlldy4KICAqIEBwYXJhbSB0ZXh0IE5ldyB0ZXh0IHRvIHB1dCBvbiBz
dGF0dXNiYXIuCiAgKgogICogRW1pdHMgc2lnbmFsOiAic3RhdHVzYmFyLHRleHQsc2V0IiB3aXRo
IGEgc3RyaW5nLgpAQCAtMzA1Nyw3ICszMDU3LDcgQEAgdm9pZCBld2tfdmlld19zdGF0dXNiYXJf
dGV4dF9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGNvbnN0IGNoYXIqIHRleHQpCiAgKiBAaW50
ZXJuYWwKICAqIFNldCBzY3JvbGxiYXJzIHZpc2libGUuCiAgKgotICogQHBhcmFtIG8gVmlldy4K
KyAqIEBwYXJhbSBld2tWaWV3IFZpZXcuCiAgKiBAcGFyYW0gdmlzaWJsZSBAYyBUUlVFIGlmIHNj
cm9sbGJhcnMgYXJlIHZpc2libGUsIEBjIEZBTFNFIG90aGVyd2lzZS4KICAqCiAgKiBFbWl0cyBz
aWduYWw6ICJzY3JvbGxiYXJzLHZpc2libGUsc2V0IiB3aXRoIGEgcG9pbnRlciB0byBhIGJvb2xl
YW4uCkBAIC0zMDcyLDcgKzMwNzIsNyBAQCB2b2lkIGV3a192aWV3X3Njcm9sbGJhcnNfdmlzaWJs
ZV9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCB2aXNpYmxlKQogICogQGludGVy
bmFsCiAgKiBHZXQgc2Nyb2xsYmFycyB2aXNpYmlsaXR5LgogICoKLSAqIEBwYXJhbSBvIFZpZXcu
CisgKiBAcGFyYW0gZXdrVmlldyBWaWV3LgogICogQHBhcmFtIHZpc2libGUgYm9vbGVhbiBwb2lu
dGVyIGluIHdoaWNoIHRvIHNhdmUgdGhlIHJlc3VsdC4gSXQgZGVmYXVsdHMKICAqIHRvIEBjIEZB
TFNFLCBpLmUuIGlmIGJyb3dzZXIgZG9lcyBubyBsaXN0ZW4gdG8gZW1pdHRlZCBzaWduYWwsIGl0
IG1lYW5zCiAgKiB0aGVyZSBhcmUgbm8gc2Nyb2xsYmFycyBhbmQgdGhlcmVmb3JlIHRoZXkgYXJl
IG5vdCB2aXNpYmxlLgpAQCAtMzA5MCw3ICszMDkwLDcgQEAgdm9pZCBld2tfdmlld19zY3JvbGxi
YXJzX3Zpc2libGVfZ2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wqIHZpc2libGUp
CiAgKiBAaW50ZXJuYWwKICAqIFNldCBtZW51YmFyIHZpc2libGUuCiAgKgotICogQHBhcmFtIG8g
Vmlldy4KKyAqIEBwYXJhbSBld2tWaWV3IFZpZXcuCiAgKiBAcGFyYW0gdmlzaWJsZSBAYyBUUlVF
IGlmIG1lbnViYXIgaXMgdmlzaWJsZSwgQGMgRkFMU0Ugb3RoZXJ3aXNlLgogICoKICAqIEVtaXRz
IHNpZ25hbDogIm1lbnViYXIsdmlzaWJsZSxzZXQiIHdpdGggYSBwb2ludGVyIHRvIGEgYm9vbGVh
bi4KQEAgLTMxMDUsNyArMzEwNSw3IEBAIHZvaWQgZXdrX3ZpZXdfbWVudWJhcl92aXNpYmxlX3Nl
dChFdmFzX09iamVjdCogZXdrVmlldywgRWluYV9Cb29sIHZpc2libGUpCiAgKiBAaW50ZXJuYWwK
ICAqIEdldCBtZW51YmFyIHZpc2liaWxpdHkuCiAgKgotICogQHBhcmFtIG8gVmlldy4KKyAqIEBw
YXJhbSBld2tWaWV3IFZpZXcuCiAgKiBAcGFyYW0gdmlzaWJsZSBib29sZWFuIHBvaW50ZXIgaW4g
d2hpY2ggdG8gc2F2ZSB0aGUgcmVzdWx0LiBJdCBkZWZhdWx0cwogICogdG8gQGMgRkFMU0UsIGku
ZS4gaWYgYnJvd3NlciBkb2VzIG5vIGxpc3RlbiB0byBlbWl0dGVkIHNpZ25hbCwgaXQgbWVhbnMK
ICAqIHRoZXJlIGlzIG5vIG1lbnViYXIgYW5kIHRoZXJlZm9yZSBpdCBpcyBub3QgdmlzaWJsZS4K
QEAgLTMxMjMsNyArMzEyMyw3IEBAIHZvaWQgZXdrX3ZpZXdfbWVudWJhcl92aXNpYmxlX2dldChF
dmFzX09iamVjdCogZXdrVmlldywgRWluYV9Cb29sKiB2aXNpYmxlKQogICogQGludGVybmFsCiAg
KiBTZXQgdG9vbHRpcCB0ZXh0IGFuZCBkaXNwbGF5IGlmIGl0IGlzIGN1cnJlbnRseSBoaWRkZW4u
CiAgKgotICogQHBhcmFtIG8gVmlldy4KKyAqIEBwYXJhbSBld2tWaWV3IFZpZXcuCiAgKiBAcGFy
YW0gdGV4dCBUZXh0IHRvIHNldCB0b29sdGlwIHRvLgogICoKICAqIEVtaXRzIHNpZ25hbDogInRv
b2x0aXAsdGV4dCxzZXQiIHdpdGggYSBzdHJpbmcuIElmIHRvb2x0aXAgbXVzdCBiZSBhY3R1YWxs
eQpAQCAtMzEzOCw3ICszMTM4LDcgQEAgdm9pZCBld2tfdmlld190b29sdGlwX3RleHRfc2V0KEV2
YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBjaGFyKiB0ZXh0KQogLyoqCiAgKiBAaW50ZXJuYWwK
ICAqCi0gKiBAcGFyYW0gbyBWaWV3LgorICogQHBhcmFtIGV3a1ZpZXcgVmlldy4KICAqIEBwYXJh
bSBtZXNzYWdlIFN0cmluZyB0byBzaG93IG9uIGNvbnNvbGUuCiAgKiBAcGFyYW0gbGluZU51bWJl
ciBMaW5lIG51bWJlci4KICAqIEBzb3VyY2VJRCBTb3VyY2UgaWQuCkBAIC0zMTQ3LDU4ICszMTQ3
LDU4IEBAIHZvaWQgZXdrX3ZpZXdfdG9vbHRpcF90ZXh0X3NldChFdmFzX09iamVjdCogZXdrVmll
dywgY29uc3QgY2hhciogdGV4dCkKIHZvaWQgZXdrX3ZpZXdfYWRkX2NvbnNvbGVfbWVzc2FnZShF
dmFzX09iamVjdCogZXdrVmlldywgY29uc3QgY2hhciogbWVzc2FnZSwgdW5zaWduZWQgaW50IGxp
bmVOdW1iZXIsIGNvbnN0IGNoYXIqIHNvdXJjZUlEKQogewogICAgIERCRygiZXdrVmlldz0lcCBt
ZXNzYWdlPSVzIGxpbmVOdW1iZXI9JXUgc291cmNlSUQ9JXMiLCBld2tWaWV3LCBtZXNzYWdlLCBs
aW5lTnVtYmVyLCBzb3VyY2VJRCk7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tW
aWV3LCBzZCk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFwaSk7Ci0gICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFwaS0+YWRkX2NvbnNvbGVfbWVzc2FnZSk7
Ci0gICAgc2QtPmFwaS0+YWRkX2NvbnNvbGVfbWVzc2FnZShzZCwgbWVzc2FnZSwgbGluZU51bWJl
ciwgc291cmNlSUQpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21h
cnREYXRhKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmFwaSk7
CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRhLT5hcGktPmFkZF9jb25z
b2xlX21lc3NhZ2UpOworICAgIHNtYXJ0RGF0YS0+YXBpLT5hZGRfY29uc29sZV9tZXNzYWdlKHNt
YXJ0RGF0YSwgbWVzc2FnZSwgbGluZU51bWJlciwgc291cmNlSUQpOwogfQogCiBib29sIGV3a192
aWV3X2ZvY3VzX2Nhbl9jeWNsZShFdmFzX09iamVjdCogZXdrVmlldywgRXdrX0ZvY3VzX0RpcmVj
dGlvbiBkaXJlY3Rpb24pCiB7CiAgICAgREJHKCJld2tWaWV3PSVwIGRpcmVjdGlvbj0lZCIsIGV3
a1ZpZXcsIGRpcmVjdGlvbik7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3
LCBzZCwgZmFsc2UpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+YXBp
LCBmYWxzZSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERh
dGEsIGZhbHNlKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRh
LT5hcGksIGZhbHNlKTsKIAotICAgIGlmICghc2QtPmFwaS0+Zm9jdXNfY2FuX2N5Y2xlKQorICAg
IGlmICghc21hcnREYXRhLT5hcGktPmZvY3VzX2Nhbl9jeWNsZSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCi0gICAgcmV0dXJuIHNkLT5hcGktPmZvY3VzX2Nhbl9jeWNsZShzZCwgZGlyZWN0aW9u
KTsKKyAgICByZXR1cm4gc21hcnREYXRhLT5hcGktPmZvY3VzX2Nhbl9jeWNsZShzbWFydERhdGEs
IGRpcmVjdGlvbik7CiB9CiAKIHZvaWQgZXdrX3ZpZXdfcnVuX2phdmFzY3JpcHRfYWxlcnQoRXZh
c19PYmplY3QqIGV3a1ZpZXcsIEV2YXNfT2JqZWN0KiBmcmFtZSwgY29uc3QgY2hhciogbWVzc2Fn
ZSkKIHsKICAgICBEQkcoImV3a1ZpZXc9JXAgZnJhbWU9JXAgbWVzc2FnZT0lcyIsIGV3a1ZpZXcs
IGZyYW1lLCBtZXNzYWdlKTsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcs
IHNkKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpKTsKKyAgICBFV0tf
VklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSk7CisgICAgRUlOQV9TQUZF
VFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRhLT5hcGkpOwogCi0gICAgaWYgKCFzZC0+YXBpLT5y
dW5famF2YXNjcmlwdF9hbGVydCkKKyAgICBpZiAoIXNtYXJ0RGF0YS0+YXBpLT5ydW5famF2YXNj
cmlwdF9hbGVydCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgc2QtPmFwaS0+cnVuX2phdmFzY3Jp
cHRfYWxlcnQoc2QsIGZyYW1lLCBtZXNzYWdlKTsKKyAgICBzbWFydERhdGEtPmFwaS0+cnVuX2ph
dmFzY3JpcHRfYWxlcnQoc21hcnREYXRhLCBmcmFtZSwgbWVzc2FnZSk7CiB9CiAKIEVpbmFfQm9v
bCBld2tfdmlld19ydW5famF2YXNjcmlwdF9jb25maXJtKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBF
dmFzX09iamVjdCogZnJhbWUsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpCiB7CiAgICAgREJHKCJld2tW
aWV3PSVwIGZyYW1lPSVwIG1lc3NhZ2U9JXMiLCBld2tWaWV3LCBmcmFtZSwgbWVzc2FnZSk7Ci0g
ICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0g
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5hcGksIEVJTkFfRkFMU0UpOwor
ICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZB
TFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5hcGks
IEVJTkFfRkFMU0UpOwogCi0gICAgaWYgKCFzZC0+YXBpLT5ydW5famF2YXNjcmlwdF9jb25maXJt
KQorICAgIGlmICghc21hcnREYXRhLT5hcGktPnJ1bl9qYXZhc2NyaXB0X2NvbmZpcm0pCiAgICAg
ICAgIHJldHVybiBFSU5BX0ZBTFNFOwogCi0gICAgcmV0dXJuIHNkLT5hcGktPnJ1bl9qYXZhc2Ny
aXB0X2NvbmZpcm0oc2QsIGZyYW1lLCBtZXNzYWdlKTsKKyAgICByZXR1cm4gc21hcnREYXRhLT5h
cGktPnJ1bl9qYXZhc2NyaXB0X2NvbmZpcm0oc21hcnREYXRhLCBmcmFtZSwgbWVzc2FnZSk7CiB9
CiAKIEVpbmFfQm9vbCBld2tfdmlld19ydW5famF2YXNjcmlwdF9wcm9tcHQoRXZhc19PYmplY3Qq
IGV3a1ZpZXcsIEV2YXNfT2JqZWN0KiBmcmFtZSwgY29uc3QgY2hhciogbWVzc2FnZSwgY29uc3Qg
Y2hhciogZGVmYXVsdFZhbHVlLCBjaGFyKiogdmFsdWUpCiB7CiAgICAgREJHKCJld2tWaWV3PSVw
IGZyYW1lPSVwIG1lc3NhZ2U9JXMiLCBld2tWaWV3LCBmcmFtZSwgbWVzc2FnZSk7Ci0gICAgRVdL
X1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5hcGksIEVJTkFfRkFMU0UpOworICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsK
KyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5hcGksIEVJTkFf
RkFMU0UpOwogCi0gICAgaWYgKCFzZC0+YXBpLT5ydW5famF2YXNjcmlwdF9wcm9tcHQpCisgICAg
aWYgKCFzbWFydERhdGEtPmFwaS0+cnVuX2phdmFzY3JpcHRfcHJvbXB0KQogICAgICAgICByZXR1
cm4gRUlOQV9GQUxTRTsKIAotICAgIHJldHVybiBzZC0+YXBpLT5ydW5famF2YXNjcmlwdF9wcm9t
cHQoc2QsIGZyYW1lLCBtZXNzYWdlLCBkZWZhdWx0VmFsdWUsIHZhbHVlKTsKKyAgICByZXR1cm4g
c21hcnREYXRhLT5hcGktPnJ1bl9qYXZhc2NyaXB0X3Byb21wdChzbWFydERhdGEsIGZyYW1lLCBt
ZXNzYWdlLCBkZWZhdWx0VmFsdWUsIHZhbHVlKTsKIH0KIAogLyoqCkBAIC0zMjA4LDIwICszMjA4
LDIwIEBAIEVpbmFfQm9vbCBld2tfdmlld19ydW5famF2YXNjcmlwdF9wcm9tcHQoRXZhc19PYmpl
Y3QqIGV3a1ZpZXcsIEV2YXNfT2JqZWN0KiBmcmFtCiAgKiBpbXBsZW1lbnRhdGlvbiwgd2hpY2gg
bG9ncyBhbmQgcmV0dXJucyBFSU5BX0ZBTFNFLiBDbGllbnQgbWF5IHJlbW92ZSBsb2cgYnkKICAq
IHNldHRpbmcgdGhpcyBmdW5jdGlvbiAwLCB3aGljaCB3aWxsIGp1c3QgcmV0dXJuIEVJTkFfRkFM
U0UuCiAgKgotICogQHBhcmFtIG8gVmlldy4KKyAqIEBwYXJhbSBld2tWaWV3IFZpZXcuCiAgKgog
ICogQHJldHVybiBAYyBFSU5BX1RSVUUgaWYgc2NyaXB0IHNob3VsZCBiZSBzdG9wcGVkOyBAYyBF
SU5BX0ZBTFNFIG90aGVyd2lzZQogICovCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2hvdWxkX2ludGVy
cnVwdF9qYXZhc2NyaXB0KEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewogICAgIERCRygiZXdrVmll
dz0lcCIsIGV3a1ZpZXcpOwotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywg
c2QsIEVJTkFfRkFMU0UpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+
YXBpLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcs
IHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5f
VkFMKHNtYXJ0RGF0YS0+YXBpLCBFSU5BX0ZBTFNFKTsKIAotICAgIGlmICghc2QtPmFwaS0+c2hv
dWxkX2ludGVycnVwdF9qYXZhc2NyaXB0KQorICAgIGlmICghc21hcnREYXRhLT5hcGktPnNob3Vs
ZF9pbnRlcnJ1cHRfamF2YXNjcmlwdCkKICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CiAKLSAg
ICByZXR1cm4gc2QtPmFwaS0+c2hvdWxkX2ludGVycnVwdF9qYXZhc2NyaXB0KHNkKTsKKyAgICBy
ZXR1cm4gc21hcnREYXRhLT5hcGktPnNob3VsZF9pbnRlcnJ1cHRfamF2YXNjcmlwdChzbWFydERh
dGEpOwogfQogCiAvKioKQEAgLTMyMzEsMjMgKzMyMzEsMjMgQEAgRWluYV9Cb29sIGV3a192aWV3
X3Nob3VsZF9pbnRlcnJ1cHRfamF2YXNjcmlwdChFdmFzX09iamVjdCogZXdrVmlldykKICAqIGlz
IGV4Y2VlZGVkLiBCcm93c2VyIG1heSB1c2UgdGhpcyB0byBpbmNyZWFzZSB0aGUgc2l6ZSBvZiBx
dW90YSBiZWZvcmUgdGhlCiAgKiBvcmlnaW5hdGluZyBvcGVyYXRpb25hIGZhaWxzLgogICoKLSAq
IEBwYXJhbSBvIFZpZXcuCisgKiBAcGFyYW0gZXdrVmlldyBWaWV3LgogICogQHBhcmFtIGZyYW1l
IFRoZSBmcmFtZSB3aG9zZSB3ZWIgcGFnZSBleGNlZWRlZCBpdHMgZGF0YWJhc2UgcXVvdGEuCiAg
KiBAcGFyYW0gZGF0YWJhc2VOYW1lIERhdGFiYXNlIG5hbWUuCi0gKiBAcGFyYW0gY3VycmVudF9z
aXplIEN1cnJlbnQgc2l6ZSBvZiB0aGlzIGRhdGFiYXNlCi0gKiBAcGFyYW0gZXhwZWN0ZWRfc2l6
ZSBUaGUgZXhwZWN0ZWQgc2l6ZSBvZiB0aGlzIGRhdGFiYXNlIGluIG9yZGVyIHRvIGZ1bGZpbGwK
KyAqIEBwYXJhbSBjdXJyZW50U2l6ZSBDdXJyZW50IHNpemUgb2YgdGhpcyBkYXRhYmFzZQorICog
QHBhcmFtIGV4cGVjdGVkU2l6ZSBUaGUgZXhwZWN0ZWQgc2l6ZSBvZiB0aGlzIGRhdGFiYXNlIGlu
IG9yZGVyIHRvIGZ1bGZpbGwKICAqIHNpdGUncyByZXF1aXJlbWVudC4KICAqLwogdWludDY0X3Qg
ZXdrX3ZpZXdfZXhjZWVkZWRfZGF0YWJhc2VfcXVvdGEoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV2
YXNfT2JqZWN0KiBmcmFtZSwgY29uc3QgY2hhciogZGF0YWJhc2VOYW1lLCB1aW50NjRfdCBjdXJy
ZW50U2l6ZSwgdWludDY0X3QgZXhwZWN0ZWRTaXplKQogewogICAgIERCRygiZXdrVmlldz0lcCIs
IGV3a1ZpZXcpOwotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIDAp
OwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+YXBpLCAwKTsKLSAgICBp
ZiAoIXNkLT5hcGktPmV4Y2VlZGVkX2RhdGFiYXNlX3F1b3RhKQorICAgIEVXS19WSUVXX1NEX0dF
VF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCAwKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5hcGksIDApOworICAgIGlmICghc21hcnREYXRhLT5h
cGktPmV4Y2VlZGVkX2RhdGFiYXNlX3F1b3RhKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIElO
RigiY3VycmVudF9zaXplPSUiIFBSSXU2NCAiIGV4cGVjdGVkX3NpemU9JSIgUFJJdTY0LCBjdXJy
ZW50U2l6ZSwgZXhwZWN0ZWRTaXplKTsKLSAgICByZXR1cm4gc2QtPmFwaS0+ZXhjZWVkZWRfZGF0
YWJhc2VfcXVvdGEoc2QsIGZyYW1lLCBkYXRhYmFzZU5hbWUsIGN1cnJlbnRTaXplLCBleHBlY3Rl
ZFNpemUpOworICAgIElORigiY3VycmVudFNpemU9JSIgUFJJdTY0ICIgZXhwZWN0ZWRTaXplPSUi
IFBSSXU2NCwgY3VycmVudFNpemUsIGV4cGVjdGVkU2l6ZSk7CisgICAgcmV0dXJuIHNtYXJ0RGF0
YS0+YXBpLT5leGNlZWRlZF9kYXRhYmFzZV9xdW90YShzbWFydERhdGEsIGZyYW1lLCBkYXRhYmFz
ZU5hbWUsIGN1cnJlbnRTaXplLCBleHBlY3RlZFNpemUpOwogfQogCiAvKioKQEAgLTMyNjUsMTkg
KzMyNjUsMTkgQEAgdWludDY0X3QgZXdrX3ZpZXdfZXhjZWVkZWRfZGF0YWJhc2VfcXVvdGEoRXZh
c19PYmplY3QqIGV3a1ZpZXcsIEV2YXNfT2JqZWN0KiBmcmEKIEVpbmFfQm9vbCBld2tfdmlld19y
dW5fb3Blbl9wYW5lbChFdmFzX09iamVjdCogZXdrVmlldywgRXZhc19PYmplY3QqIGZyYW1lLCBi
b29sIGFsbG93c011bHRpcGxlRmlsZXMsIGNvbnN0IFdURjo6VmVjdG9yPFdURjo6U3RyaW5nPiYg
YWNjZXB0TUlNRVR5cGVzLCBFaW5hX0xpc3QqKiBzZWxlY3RlZEZpbGVuYW1lcykKIHsKICAgICBE
QkcoImV3a1ZpZXc9JXAgZnJhbWU9JXAgYWxsb3dzX211bHRpcGxlX2ZpbGVzPSVkIiwgZXdrVmll
dywgZnJhbWUsIGFsbG93c011bHRpcGxlRmlsZXMpOwotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9S
RVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOX1ZBTChzZC0+YXBpLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1Jf
UkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+YXBpLCBFSU5BX0ZBTFNFKTsKIAotICAgIGlm
ICghc2QtPmFwaS0+cnVuX29wZW5fcGFuZWwpCisgICAgaWYgKCFzbWFydERhdGEtPmFwaS0+cnVu
X29wZW5fcGFuZWwpCiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwogCiAgICAgKnNlbGVjdGVk
RmlsZW5hbWVzID0gMDsKIAogICAgIEVpbmFfTGlzdCogY0FjY2VwdE1JTUVUeXBlcyA9IDA7Ci0g
ICAgZm9yIChXVEY6OlZlY3RvcjxXVEY6OlN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gYWNj
ZXB0TUlNRVR5cGVzLmJlZ2luKCk7IGl0ICE9IGFjY2VwdE1JTUVUeXBlcy5lbmQoKTsgKytpdCkK
LSAgICAgICAgY0FjY2VwdE1JTUVUeXBlcyA9IGVpbmFfbGlzdF9hcHBlbmQoY0FjY2VwdE1JTUVU
eXBlcywgc3RyZHVwKCgqaXQpLnV0ZjgoKS5kYXRhKCkpKTsKKyAgICBmb3IgKFdURjo6VmVjdG9y
PFdURjo6U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXRlcmF0b3IgPSBhY2NlcHRNSU1FVHlwZXMu
YmVnaW4oKTsgaXRlcmF0b3IgIT0gYWNjZXB0TUlNRVR5cGVzLmVuZCgpOyArK2l0ZXJhdG9yKQor
ICAgICAgICBjQWNjZXB0TUlNRVR5cGVzID0gZWluYV9saXN0X2FwcGVuZChjQWNjZXB0TUlNRVR5
cGVzLCBzdHJkdXAoKCppdGVyYXRvcikudXRmOCgpLmRhdGEoKSkpOwogCi0gICAgYm9vbCBjb25m
aXJtID0gc2QtPmFwaS0+cnVuX29wZW5fcGFuZWwoc2QsIGZyYW1lLCBhbGxvd3NNdWx0aXBsZUZp
bGVzLCBjQWNjZXB0TUlNRVR5cGVzLCBzZWxlY3RlZEZpbGVuYW1lcyk7CisgICAgYm9vbCBjb25m
aXJtID0gc21hcnREYXRhLT5hcGktPnJ1bl9vcGVuX3BhbmVsKHNtYXJ0RGF0YSwgZnJhbWUsIGFs
bG93c011bHRpcGxlRmlsZXMsIGNBY2NlcHRNSU1FVHlwZXMsIHNlbGVjdGVkRmlsZW5hbWVzKTsK
ICAgICBpZiAoIWNvbmZpcm0gJiYgKnNlbGVjdGVkRmlsZW5hbWVzKQogICAgICAgICBFUlIoIkNh
bmNlbGVkIGZpbGUgc2VsZWN0aW9uLCBidXQgc2VsZWN0ZWQgZmlsZW5hbWVzICE9IDAuIEZyZWUg
bmFtZXMgYmVmb3JlIHJldHVybi4iKTsKIApAQCAtMzI5MSwxMSArMzI5MSwxMSBAQCBFaW5hX0Jv
b2wgZXdrX3ZpZXdfcnVuX29wZW5fcGFuZWwoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV2YXNfT2Jq
ZWN0KiBmcmFtZSwgYm9vbAogdm9pZCBld2tfdmlld19yZXBhaW50KEV2YXNfT2JqZWN0KiBld2tW
aWV3LCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwgRXZhc19Db29yZCB3aWR0aCwgRXZhc19D
b29yZCBoZWlnaHQpCiB7CiAgICAgREJHKCJld2tWaWV3PSVwLCByZWdpb249JWQsJWQgKyAlZHgl
ZCIsIGV3a1ZpZXcsIHgsIHksIHdpZHRoLCBoZWlnaHQpOwotICAgIEVXS19WSUVXX1NEX0dFVF9P
Ul9SRVRVUk4oZXdrVmlldywgc2QpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihz
ZCwgcHJpdik7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERh
dGEpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYpOwog
CiAgICAgX2V3a192aWV3X3JlcGFpbnRfYWRkKHByaXYsIHgsIHksIHdpZHRoLCBoZWlnaHQpOwot
ICAgIF9ld2tfdmlld19zbWFydF9jaGFuZ2VkKHNkKTsKKyAgICBfZXdrX3ZpZXdfc21hcnRfY2hh
bmdlZChzbWFydERhdGEpOwogfQogCiB2b2lkIGV3a192aWV3X3Njcm9sbChFdmFzX09iamVjdCog
ZXdrVmlldywgRXZhc19Db29yZCBkeCwgRXZhc19Db29yZCBkeSwgRXZhc19Db29yZCBzY3JvbGxY
LCBFdmFzX0Nvb3JkIHNjcm9sbFksIEV2YXNfQ29vcmQgc2Nyb2xsV2lkdGgsIEV2YXNfQ29vcmQg
c2Nyb2xsSGVpZ2h0LCBFdmFzX0Nvb3JkIGNlbnRlclgsIEV2YXNfQ29vcmQgY2VudGVyWSwgRXZh
c19Db29yZCBjZW50ZXJXaWR0aCwgRXZhc19Db29yZCBjZW50ZXJIZWlnaHQsIEVpbmFfQm9vbCBt
YWluRnJhbWUpCkBAIC0zMzA3LDE5ICszMzA3LDE5IEBAIHZvaWQgZXdrX3ZpZXdfc2Nyb2xsKEV2
YXNfT2JqZWN0KiBld2tWaWV3LCBFdmFzX0Nvb3JkIGR4LCBFdmFzX0Nvb3JkIGR5LCBFdmFzX0Nv
CiAgICAgICAgIFdSTigic2Nyb2xsIHJlZ2lvbiBhbmQgY2xpcCBhcmUgZGlmZmVyZW50ISAlZCwl
ZCslZHglZCBhbmQgJWQsJWQrJWR4JWQiLAogICAgICAgICAgICAgc2Nyb2xsWCwgc2Nyb2xsWSwg
c2Nyb2xsV2lkdGgsIHNjcm9sbEhlaWdodCwgY2VudGVyWCwgY2VudGVyWSwgY2VudGVyV2lkdGgs
IGNlbnRlckhlaWdodCk7CiAKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcs
IHNkKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYpOworICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhKTsKKyAgICBFV0tfVklF
V19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2KTsKICAgICBFSU5BX1NBRkVUWV9P
Tl9UUlVFX1JFVFVSTighZHggJiYgIWR5KTsKIAogICAgIF9ld2tfdmlld19zY3JvbGxfYWRkKHBy
aXYsIGR4LCBkeSwgc2Nyb2xsWCwgc2Nyb2xsWSwgc2Nyb2xsV2lkdGgsIHNjcm9sbEhlaWdodCwg
bWFpbkZyYW1lKTsKIAotICAgIF9ld2tfdmlld19zbWFydF9jaGFuZ2VkKHNkKTsKKyAgICBfZXdr
X3ZpZXdfc21hcnRfY2hhbmdlZChzbWFydERhdGEpOwogfQogCiBXZWJDb3JlOjpQYWdlKiBld2tf
dmlld19jb3JlX3BhZ2VfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIDApOwotICAgIEVXS19WSUVXX1BS
SVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgMCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JF
VFVSTihld2tWaWV3LCBzbWFydERhdGEsIDApOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JF
VFVSTihzbWFydERhdGEsIHByaXYsIDApOwogICAgIHJldHVybiBwcml2LT5wYWdlOwogfQogCkBA
IC0zMzM0LDMwICszMzM0LDMwIEBAIFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpGcmFtZT4gZXdr
X3ZpZXdfZnJhbWVfY3JlYXRlKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFdmFzCiAgICAgICAgIGV3
a1ZpZXcsIGZyYW1lLCBuYW1lLnV0ZjgoKS5kYXRhKCksIG93bmVyRWxlbWVudCwKICAgICAgICAg
dXJsLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIHJlZmVycmVyLnV0ZjgoKS5kYXRhKCkpOwogCi0g
ICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgMCk7Ci0gICAgRVdLX1ZJ
RVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCAwKTsKKyAgICBFV0tfVklFV19TRF9HRVRf
T1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgMCk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRf
T1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgMCk7CiAKLSAgICBXVEY6OlJlZlB0cjxXZWJDb3Jl
OjpGcmFtZT4gY2YgPSBfZXdrX3ZpZXdfY29yZV9mcmFtZV9uZXcKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKHNkLCBwcml2LCBvd25lckVsZW1lbnQpOwotICAgIGlm
ICghY2YpIHsKKyAgICBXVEY6OlJlZlB0cjxXZWJDb3JlOjpGcmFtZT4gY29yZUZyYW1lID0gX2V3
a192aWV3X2NvcmVfZnJhbWVfbmV3CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChzbWFydERhdGEsIHByaXYsIG93bmVyRWxlbWVudCk7CisgICAgaWYgKCFjb3JlRnJh
bWUpIHsKICAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIGNoaWxkIGNvcmUgZnJhbWUgJyVz
JyIsIG5hbWUudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAg
IGlmICghZXdrX2ZyYW1lX2NoaWxkX2FkZChmcmFtZSwgY2YsIG5hbWUsIHVybCwgcmVmZXJyZXIp
KSB7CisgICAgaWYgKCFld2tfZnJhbWVfY2hpbGRfYWRkKGZyYW1lLCBjb3JlRnJhbWUsIG5hbWUs
IHVybCwgcmVmZXJyZXIpKSB7CiAgICAgICAgIEVSUigiQ291bGQgbm90IGNyZWF0ZSBjaGlsZCBm
cmFtZSBvYmplY3QgJyVzJyIsIG5hbWUudXRmOCgpLmRhdGEoKSk7CiAgICAgICAgIHJldHVybiAw
OwogICAgIH0KIAogICAgIC8vIFRoZSBjcmVhdGlvbiBvZiB0aGUgZnJhbWUgbWF5IGhhdmUgcmVt
b3ZlZCBpdHNlbGYgYWxyZWFkeS4KLSAgICBpZiAoIWNmLT5wYWdlKCkgfHwgIWNmLT50cmVlKCkg
fHwgIWNmLT50cmVlKCktPnBhcmVudCgpKQorICAgIGlmICghY29yZUZyYW1lLT5wYWdlKCkgfHwg
IWNvcmVGcmFtZS0+dHJlZSgpIHx8ICFjb3JlRnJhbWUtPnRyZWUoKS0+cGFyZW50KCkpCiAgICAg
ICAgIHJldHVybiAwOwogCi0gICAgc2QtPmNoYW5nZWQuZnJhbWVfcmVjdCA9IEVJTkFfVFJVRTsK
LSAgICBfZXdrX3ZpZXdfc21hcnRfY2hhbmdlZChzZCk7CisgICAgc21hcnREYXRhLT5jaGFuZ2Vk
LmZyYW1lX3JlY3QgPSBFSU5BX1RSVUU7CisgICAgX2V3a192aWV3X3NtYXJ0X2NoYW5nZWQoc21h
cnREYXRhKTsKIAogICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdrVmlldywg
ImZyYW1lLGNyZWF0ZWQiLCBmcmFtZSk7Ci0gICAgcmV0dXJuIGNmLnJlbGVhc2UoKTsKKyAgICBy
ZXR1cm4gY29yZUZyYW1lLnJlbGVhc2UoKTsKIH0KIAogV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6
OldpZGdldD4gZXdrX3ZpZXdfcGx1Z2luX2NyZWF0ZShFdmFzX09iamVjdCogZXdrVmlldywgRXZh
c19PYmplY3QqIGZyYW1lLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBwbHVnaW5TaXplLCBXZWJD
b3JlOjpIVE1MUGx1Z0luRWxlbWVudCogZWxlbWVudCwgY29uc3QgV2ViQ29yZTo6S1VSTCYgdXJs
LCBjb25zdCBXVEY6OlZlY3RvcjxXVEY6OlN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFdURjo6
VmVjdG9yPFdURjo6U3RyaW5nPiYgcGFyYW1WYWx1ZXMsIGNvbnN0IFdURjo6U3RyaW5nJiBtaW1l
VHlwZSwgYm9vbCBsb2FkTWFudWFsbHkpCkBAIC0zMzY2LDkgKzMzNjYsOSBAQCBXVEY6OlBhc3NS
ZWZQdHI8V2ViQ29yZTo6V2lkZ2V0PiBld2tfdmlld19wbHVnaW5fY3JlYXRlKEV2YXNfT2JqZWN0
KiBld2tWaWV3LCBFdgogICAgICAgICBld2tWaWV3LCBmcmFtZSwgcGx1Z2luU2l6ZS53aWR0aCgp
LCBwbHVnaW5TaXplLmhlaWdodCgpLCBlbGVtZW50LAogICAgICAgICB1cmwuc3RyaW5nKCkudXRm
OCgpLmRhdGEoKSwgbWltZVR5cGUudXRmOCgpLmRhdGEoKSk7CiAKLSAgICBFV0tfVklFV19TRF9H
RVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAwKTsKLSAgICBzZC0+Y2hhbmdlZC5mcmFtZV9yZWN0
ID0gRUlOQV9UUlVFOwotICAgIF9ld2tfdmlld19zbWFydF9jaGFuZ2VkKHNkKTsKKyAgICBFV0tf
VklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgMCk7CisgICAgc21hcnRE
YXRhLT5jaGFuZ2VkLmZyYW1lX3JlY3QgPSBFSU5BX1RSVUU7CisgICAgX2V3a192aWV3X3NtYXJ0
X2NoYW5nZWQoc21hcnREYXRhKTsKIAogICAgIHJldHVybiBld2tfZnJhbWVfcGx1Z2luX2NyZWF0
ZQogICAgICAgICAgICAgICAgKGZyYW1lLCBwbHVnaW5TaXplLCBlbGVtZW50LCB1cmwsIHBhcmFt
TmFtZXMsIHBhcmFtVmFsdWVzLApAQCAtMzM4OSwxMyArMzM4OSwxMyBAQCBXVEY6OlBhc3NSZWZQ
dHI8V2ViQ29yZTo6V2lkZ2V0PiBld2tfdmlld19wbHVnaW5fY3JlYXRlKEV2YXNfT2JqZWN0KiBl
d2tWaWV3LCBFdgogdm9pZCBld2tfdmlld19wb3B1cF9uZXcoRXZhc19PYmplY3QqIGV3a1ZpZXcs
IFdlYkNvcmU6OlBvcHVwTWVudUNsaWVudCogY2xpZW50LCBpbnQgc2VsZWN0ZWQsIGNvbnN0IFdl
YkNvcmU6OkludFJlY3QmIHJlY3QpCiB7CiAgICAgSU5GKCJld2tWaWV3PSVwIiwgZXdrVmlldyk7
Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCk7Ci0gICAgRVdLX1ZJ
RVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2KTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1Jf
UkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVU
VVJOKHNtYXJ0RGF0YSwgcHJpdik7CiAKLSAgICBpZiAocHJpdi0+cG9wdXAubWVudV9jbGllbnQp
CisgICAgaWYgKHByaXYtPnBvcHVwLm1lbnVDbGllbnQpCiAgICAgICAgIGV3a192aWV3X3BvcHVw
X2Rlc3Ryb3koZXdrVmlldyk7CiAKLSAgICBwcml2LT5wb3B1cC5tZW51X2NsaWVudCA9IGNsaWVu
dDsKKyAgICBwcml2LT5wb3B1cC5tZW51Q2xpZW50ID0gY2xpZW50OwogCiAgICAgLy8gcG9wdWxh
dGUgaXRlbXMKICAgICBjb25zdCBpbnQgc2l6ZSA9IGNsaWVudC0+bGlzdFNpemUoKTsKQEAgLTM0
MjIsMTAgKzM0MjIsMTAgQEAgdm9pZCBld2tfdmlld19wb3B1cF9uZXcoRXZhc19PYmplY3QqIGV3
a1ZpZXcsIFdlYkNvcmU6OlBvcHVwTWVudUNsaWVudCogY2xpZW50LAogRWluYV9Cb29sIGV3a192
aWV3X3BvcHVwX2Rlc3Ryb3koRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7CiAgICAgSU5GKCJld2tW
aWV3PSVwIiwgZXdrVmlldyk7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3
LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBw
cml2LCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcs
IHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJO
KHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CiAKLSAgICBpZiAoIXByaXYtPnBvcHVwLm1l
bnVfY2xpZW50KQorICAgIGlmICghcHJpdi0+cG9wdXAubWVudUNsaWVudCkKICAgICAgICAgcmV0
dXJuIEVJTkFfRkFMU0U7CiAKICAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKGV3
a1ZpZXcsICJwb3B1cCx3aWxsZGVsZXRlIiwgJnByaXYtPnBvcHVwLm1lbnUpOwpAQCAtMzQzNiw4
ICszNDM2LDggQEAgRWluYV9Cb29sIGV3a192aWV3X3BvcHVwX2Rlc3Ryb3koRXZhc19PYmplY3Qq
IGV3a1ZpZXcpCiAgICAgICAgIGVpbmFfc3RyaW5nc2hhcmVfZGVsKGl0ZW0tPnRleHQpOwogICAg
ICAgICBmcmVlKGl0ZW0pOwogICAgIH0KLSAgICBwcml2LT5wb3B1cC5tZW51X2NsaWVudC0+cG9w
dXBEaWRIaWRlKCk7Ci0gICAgcHJpdi0+cG9wdXAubWVudV9jbGllbnQgPSAwOworICAgIHByaXYt
PnBvcHVwLm1lbnVDbGllbnQtPnBvcHVwRGlkSGlkZSgpOworICAgIHByaXYtPnBvcHVwLm1lbnVD
bGllbnQgPSAwOwogCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KQEAgLTM0NDUsMTggKzM0NDUs
MTggQEAgRWluYV9Cb29sIGV3a192aWV3X3BvcHVwX2Rlc3Ryb3koRXZhc19PYmplY3QqIGV3a1Zp
ZXcpCiB2b2lkIGV3a192aWV3X3BvcHVwX3NlbGVjdGVkX3NldChFdmFzX09iamVjdCogZXdrVmll
dywgaW50IGluZGV4KQogewogICAgIElORigiZXdrVmlldz0lcCIsIGV3a1ZpZXcpOwotICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QpOwotICAgIEVXS19WSUVXX1BSSVZf
R0VUX09SX1JFVFVSTihzZCwgcHJpdik7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4o
cHJpdi0+cG9wdXAubWVudV9jbGllbnQpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrVmlldywgc21hcnREYXRhKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21h
cnREYXRhLCBwcml2KTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihwcml2LT5wb3B1
cC5tZW51Q2xpZW50KTsKIAotICAgIHByaXYtPnBvcHVwLm1lbnVfY2xpZW50LT52YWx1ZUNoYW5n
ZWQoaW5kZXgpOworICAgIHByaXYtPnBvcHVwLm1lbnVDbGllbnQtPnZhbHVlQ2hhbmdlZChpbmRl
eCk7CiB9CiAKIC8qKgogICogQGludGVybmFsCiAgKiBSZXF1ZXN0IGEgZG93bmxvYWQgdG8gdXNl
ci4KICAqCi0gKiBAcGFyYW0gbyBWaWV3LgorICogQHBhcmFtIGV3a1ZpZXcgVmlldy4KICAqIEBv
YXJhbSBkb3dubG9hZCBFd2tfRG93bmxvYWQgc3RydWN0IHRvIGJlIHNlbnQuCiAgKgogICogRW1p
dHM6ICJkb3dubG9hZCxyZXF1ZXN0IiB3aXRoIGFuIEV3a19Eb3dubG9hZCBjb250YWluaW5nIHRo
ZSBkZXRhaWxzIG9mIHRoZQpAQCAtMzQ3Miw3ICszNDcyLDcgQEAgdm9pZCBld2tfdmlld19kb3du
bG9hZF9yZXF1ZXN0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFd2tfRG93bmxvYWQqIGRvd25sb2Fk
KQogICogQGludGVybmFsCiAgKiBSZXBvcnRzIHRoZSBKUyB3aW5kb3cgb2JqZWN0IHdhcyBjbGVh
cmVkLgogICoKLSAqIEBwYXJhbSBvIHZpZXcuCisgKiBAcGFyYW0gZXdrVmlldyB2aWV3LgogICog
QHBhcmFtIGZyYW1lIHRoZSBmcmFtZS4KICAqLwogdm9pZCBld2tfdmlld19qc193aW5kb3dfb2Jq
ZWN0X2NsZWFyKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFdmFzX09iamVjdCogZnJhbWUpCkBAIC0z
NDkwLDEwICszNDkwLDEwIEBAIHZvaWQgZXdrX3ZpZXdfanNfd2luZG93X29iamVjdF9jbGVhcihF
dmFzX09iamVjdCogZXdrVmlldywgRXZhc19PYmplY3QqIGZyYW1lKQogICovCiB2b2lkIGV3a192
aWV3X3ZpZXdwb3J0X2F0dHJpYnV0ZXNfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBX
ZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50cyYgYXJndW1lbnRzKQogewotICAgIEVXS19WSUVXX1NE
X0dFVChld2tWaWV3LCBzZCk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVQoc2QsIHByaXYpOworICAg
IEVXS19WSUVXX1NEX0dFVChld2tWaWV3LCBzbWFydERhdGEpOworICAgIEVXS19WSUVXX1BSSVZf
R0VUKHNtYXJ0RGF0YSwgcHJpdik7CiAKLSAgICBwcml2LT52aWV3cG9ydF9hcmd1bWVudHMgPSBh
cmd1bWVudHM7CisgICAgcHJpdi0+dmlld3BvcnRBcmd1bWVudHMgPSBhcmd1bWVudHM7CiAgICAg
ZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChld2tWaWV3LCAidmlld3BvcnQsY2hhbmdl
ZCIsIDApOwogfQogCkBAIC0zNTE5LDcwICszNTE5LDcwIEBAIHZvaWQgZXdrX3ZpZXdfdmlld3Bv
cnRfYXR0cmlidXRlc19nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcsIGludCogd2lkdGgs
IGluCiAKIEVpbmFfQm9vbCBld2tfdmlld196b29tX3JhbmdlX3NldChFdmFzX09iamVjdCogZXdr
VmlldywgZmxvYXQgbWluU2NhbGUsIGZsb2F0IG1heFNjYWxlKQogewotICAgIEVXS19WSUVXX1NE
X0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BS
SVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19W
SUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOwogCiAg
ICAgaWYgKG1heFNjYWxlIDwgbWluU2NhbGUpIHsKICAgICAgICAgV1JOKCJtaW5fc2NhbGUgaXMg
bGFyZ2VyIHRoYW4gbWF4X3NjYWxlIik7CiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwogICAg
IH0KIAotICAgIHByaXYtPnNldHRpbmdzLnpvb21fcmFuZ2UubWluX3NjYWxlID0gbWluU2NhbGU7
Ci0gICAgcHJpdi0+c2V0dGluZ3Muem9vbV9yYW5nZS5tYXhfc2NhbGUgPSBtYXhTY2FsZTsKKyAg
ICBwcml2LT5zZXR0aW5ncy56b29tUmFuZ2UubWluU2NhbGUgPSBtaW5TY2FsZTsKKyAgICBwcml2
LT5zZXR0aW5ncy56b29tUmFuZ2UubWF4U2NhbGUgPSBtYXhTY2FsZTsKIAogICAgIHJldHVybiBF
SU5BX1RSVUU7CiB9CiAKIGZsb2F0IGV3a192aWV3X3pvb21fcmFuZ2VfbWluX2dldChjb25zdCBF
dmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3
a1ZpZXcsIHNkLCAtMS4wKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHBy
aXYsIC0xLjApOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnRE
YXRhLCAtMS4wKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBw
cml2LCAtMS4wKTsKIAotICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy56b29tX3JhbmdlLm1pbl9z
Y2FsZTsKKyAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3Muem9vbVJhbmdlLm1pblNjYWxlOwogfQog
CiBmbG9hdCBld2tfdmlld196b29tX3JhbmdlX21heF9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3
a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgLTEu
MCk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCAtMS4wKTsKKyAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgLTEuMCk7Cisg
ICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgLTEuMCk7CiAK
LSAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3Muem9vbV9yYW5nZS5tYXhfc2NhbGU7CisgICAgcmV0
dXJuIHByaXYtPnNldHRpbmdzLnpvb21SYW5nZS5tYXhTY2FsZTsKIH0KIAogRWluYV9Cb29sIGV3
a192aWV3X3VzZXJfc2NhbGFibGVfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wg
dXNlclNjYWxhYmxlKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywg
c2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJp
diwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBz
bWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihz
bWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOwogCi0gICAgcHJpdi0+c2V0dGluZ3Muem9vbV9y
YW5nZS51c2VyX3NjYWxhYmxlID0gdXNlclNjYWxhYmxlOworICAgIHByaXYtPnNldHRpbmdzLnpv
b21SYW5nZS51c2VyU2NhbGFibGUgPSB1c2VyU2NhbGFibGU7CiAKICAgICByZXR1cm4gRUlOQV9U
UlVFOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfdXNlcl9zY2FsYWJsZV9nZXQoY29uc3QgRXZh
c19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tW
aWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNk
LCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1Zp
ZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVU
VVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CiAKLSAgICByZXR1cm4gcHJpdi0+c2V0
dGluZ3Muem9vbV9yYW5nZS51c2VyX3NjYWxhYmxlOworICAgIHJldHVybiBwcml2LT5zZXR0aW5n
cy56b29tUmFuZ2UudXNlclNjYWxhYmxlOwogfQogCiBmbG9hdCBld2tfdmlld19kZXZpY2VfcGl4
ZWxfcmF0aW9fZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVX
X1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIC0xLjApOwotICAgIEVXS19WSUVXX1BSSVZf
R0VUX09SX1JFVFVSTihzZCwgcHJpdiwgLTEuMCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JF
VFVSTihld2tWaWV3LCBzbWFydERhdGEsIC0xLjApOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09S
X1JFVFVSTihzbWFydERhdGEsIHByaXYsIC0xLjApOwogCi0gICAgcmV0dXJuIHByaXYtPnNldHRp
bmdzLmRldmljZV9waXhlbF9yYXRpbzsKKyAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZGV2aWNl
UGl4ZWxSYXRpbzsKIH0KIAogdm9pZCBld2tfdmlld19kaWRfZmlyc3RfdmlzdWFsbHlfbm9uZW1w
dHlfbGF5b3V0KEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9P
Ul9SRVRVUk4oZXdrVmlldywgc2QpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihz
ZCwgcHJpdik7Ci0gICAgaWYgKCFwcml2LT5mbGFncy52aWV3X2NsZWFyZWQpIHsKKyAgICBFV0tf
VklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSk7CisgICAgRVdLX1ZJRVdf
UFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdik7CisgICAgaWYgKCFwcml2LT5mbGFn
cy52aWV3Q2xlYXJlZCkgewogICAgICAgICBld2tfdmlld19mcmFtZV9tYWluX2NsZWFyZWQoZXdr
Vmlldyk7CiAgICAgICAgIGV3a192aWV3X2VuYWJsZV9yZW5kZXIoZXdrVmlldyk7Ci0gICAgICAg
IHByaXYtPmZsYWdzLnZpZXdfY2xlYXJlZCA9IEVJTkFfVFJVRTsKKyAgICAgICAgcHJpdi0+Zmxh
Z3Mudmlld0NsZWFyZWQgPSBFSU5BX1RSVUU7CiAgICAgfQogfQogCkBAIC0zNTkwLDcgKzM1OTAs
NyBAQCB2b2lkIGV3a192aWV3X2RpZF9maXJzdF92aXN1YWxseV9ub25lbXB0eV9sYXlvdXQoRXZh
c19PYmplY3QqIGV3a1ZpZXcpCiAgKiBAaW50ZXJuYWwKICAqIERpc3BhdGNoIGZpbmlzaGVkIGxv
YWRpbmcuCiAgKgotICogQHBhcmFtIG8gdmlldy4KKyAqIEBwYXJhbSBld2tWaWV3IHZpZXcuCiAg
Ki8KIHZvaWQgZXdrX3ZpZXdfZGlzcGF0Y2hfZGlkX2ZpbmlzaF9sb2FkaW5nKEV2YXNfT2JqZWN0
KiBld2tWaWV3KQogewpAQCAtMzYwMywxMSArMzYwMywxMSBAQCB2b2lkIGV3a192aWV3X2Rpc3Bh
dGNoX2RpZF9maW5pc2hfbG9hZGluZyhFdmFzX09iamVjdCogZXdrVmlldykKIAogdm9pZCBld2tf
dmlld190cmFuc2l0aW9uX3RvX2NvbW1pdGVkX2Zvcl9uZXdwYWdlKEV2YXNfT2JqZWN0KiBld2tW
aWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QpOwotICAg
IEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdik7CisgICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEpOworICAgIEVXS19WSUVXX1BSSVZfR0VU
X09SX1JFVFVSTihzbWFydERhdGEsIHByaXYpOwogCiAgICAgZXdrX3ZpZXdfZGlzYWJsZV9yZW5k
ZXIoZXdrVmlldyk7Ci0gICAgcHJpdi0+ZmxhZ3Mudmlld19jbGVhcmVkID0gRUlOQV9GQUxTRTsK
KyAgICBwcml2LT5mbGFncy52aWV3Q2xlYXJlZCA9IEVJTkFfRkFMU0U7CiB9CiAKIApAQCAtMzYx
NywxOCArMzYxNywxOCBAQCB2b2lkIGV3a192aWV3X3RyYW5zaXRpb25fdG9fY29tbWl0ZWRfZm9y
X25ld3BhZ2UoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiAgKiByZXF1ZXN0IHdvdWxkIGJlIHVzZWQu
IElmIEByZXR1cm4gaXMgdHJ1ZSwgbG9hZGVyIHdpbGwgdHJ5IHRvIGxvYWQuIEVsc2UsCiAgKiBM
b2FkZXIgaWdub3JlIGFjdGlvbiBvZiByZXF1ZXN0LgogICoKLSAqIEBwYXJhbSBvIFZpZXcgdG8g
bG9hZAorICogQHBhcmFtIGV3a1ZpZXcgVmlldyB0byBsb2FkCiAgKiBAcGFyYW0gcmVxdWVzdCBS
ZXF1ZXN0IHdoaWNoIGNvbnRhaW4gdXJsIHRvIG5hdmlnYXRlCiAgKi8KIEVpbmFfQm9vbCBld2tf
dmlld19uYXZpZ2F0aW9uX3BvbGljeV9kZWNpc2lvbihFdmFzX09iamVjdCogZXdrVmlldywgRXdr
X0ZyYW1lX1Jlc291cmNlX1JlcXVlc3QqIHJlcXVlc3QpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9UUlVFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTl9WQUwoc2QtPmFwaSwgRUlOQV9UUlVFKTsKKyAgICBFV0tfVklFV19TRF9HRVRf
T1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9UUlVFKTsKKyAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5hcGksIEVJTkFfVFJVRSk7CiAKLSAgICBp
ZiAoIXNkLT5hcGktPm5hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9uKQorICAgIGlmICghc21hcnRE
YXRhLT5hcGktPm5hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9uKQogICAgICAgICByZXR1cm4gRUlO
QV9UUlVFOwogCi0gICAgcmV0dXJuIHNkLT5hcGktPm5hdmlnYXRpb25fcG9saWN5X2RlY2lzaW9u
KHNkLCByZXF1ZXN0KTsKKyAgICByZXR1cm4gc21hcnREYXRhLT5hcGktPm5hdmlnYXRpb25fcG9s
aWN5X2RlY2lzaW9uKHNtYXJ0RGF0YSwgcmVxdWVzdCk7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmll
d19qc19vYmplY3RfYWRkKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFd2tfSlNfT2JqZWN0KiBvYmpl
Y3QsIGNvbnN0IGNoYXIqIG9iamVjdE5hbWUpCkBAIC0zNjM3LDIzICszNjM3LDIzIEBAIEVpbmFf
Qm9vbCBld2tfdmlld19qc19vYmplY3RfYWRkKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFd2tfSlNf
T2JqZWN0KiBvYmplY3QsIGNvCiAgICAgaWYgKG9iamVjdC0+dmlldykgLy8gb2JqZWN0IGhhcyBh
bHJlYWR5IGJlZW4gYWRkZWQgdG8gYW5vdGhlciBld2tfdmlldwogICAgICAgICByZXR1cm4gRUlO
QV9GQUxTRTsKICAgICBvYmplY3QtPm5hbWUgPSBlaW5hX3N0cmluZ3NoYXJlX2FkZChvYmplY3RO
YW1lKTsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZB
TFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFM
U0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBF
SU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBw
cml2LCBFSU5BX0ZBTFNFKTsKIAogICAgIEpTQzo6SlNMb2NrIGxvY2soSlNDOjpTaWxlbmNlQXNz
ZXJ0aW9uc09ubHkpOwotICAgIFdlYkNvcmU6OkpTRE9NV2luZG93KiB3aW5kb3cgPSB0b0pTRE9N
V2luZG93KHByaXYtPm1haW5fZnJhbWUsIFdlYkNvcmU6Om1haW5UaHJlYWROb3JtYWxXb3JsZCgp
KTsKKyAgICBXZWJDb3JlOjpKU0RPTVdpbmRvdyogd2luZG93ID0gdG9KU0RPTVdpbmRvdyhwcml2
LT5tYWluRnJhbWUsIFdlYkNvcmU6Om1haW5UaHJlYWROb3JtYWxXb3JsZCgpKTsKICAgICBKU0M6
OkJpbmRpbmdzOjpSb290T2JqZWN0KiByb290OwotICAgIHJvb3QgPSBwcml2LT5tYWluX2ZyYW1l
LT5zY3JpcHQoKS0+YmluZGluZ1Jvb3RPYmplY3QoKTsKKyAgICByb290ID0gcHJpdi0+bWFpbkZy
YW1lLT5zY3JpcHQoKS0+YmluZGluZ1Jvb3RPYmplY3QoKTsKIAogICAgIGlmICghd2luZG93KSB7
CiAgICAgICAgIEVSUigiV2FybmluZzogY291bGRuJ3QgZ2V0IHdpbmRvdyBvYmplY3QiKTsKICAg
ICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CiAgICAgfQogCi0gICAgSlNDOjpFeGVjU3RhdGUqIGV4
ZWMgPSB3aW5kb3ctPmdsb2JhbEV4ZWMoKTsKKyAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlY3V0ZVN0
YXRlID0gd2luZG93LT5nbG9iYWxFeGVjKCk7CiAKICAgICBvYmplY3QtPnZpZXcgPSBld2tWaWV3
OwotICAgIEpTQzo6SlNPYmplY3QqIHJ1bnRpbWVPYmplY3QgPSAoSlNDOjpKU09iamVjdCopSlND
OjpCaW5kaW5nczo6Q0luc3RhbmNlOjpjcmVhdGUoKE5QT2JqZWN0KilvYmplY3QsIHJvb3QpLT5j
cmVhdGVSdW50aW1lT2JqZWN0KGV4ZWMpOworICAgIEpTQzo6SlNPYmplY3QqIHJ1bnRpbWVPYmpl
Y3QgPSAoSlNDOjpKU09iamVjdCopSlNDOjpCaW5kaW5nczo6Q0luc3RhbmNlOjpjcmVhdGUoKE5Q
T2JqZWN0KilvYmplY3QsIHJvb3QpLT5jcmVhdGVSdW50aW1lT2JqZWN0KGV4ZWN1dGVTdGF0ZSk7
CiAgICAgSlNDOjpJZGVudGlmaWVyIGlkID0gSlNDOjpJZGVudGlmaWVyKGV4ZWMsIG9iamVjdE5h
bWUpOwogCiAgICAgSlNDOjpQdXRQcm9wZXJ0eVNsb3Qgc2xvdDsKQEAgLTM2NjYsMjcgKzM2NjYs
MjcgQEAgRWluYV9Cb29sIGV3a192aWV3X2pzX29iamVjdF9hZGQoRXZhc19PYmplY3QqIGV3a1Zp
ZXcsIEV3a19KU19PYmplY3QqIG9iamVjdCwgY28KIAogRWluYV9Cb29sIGV3a192aWV3X3Byb3Rv
Y29sX2hhbmRsZXJfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBjaGFyKiogcHJvdG9j
b2xzLCBFd2tfVmlld19SZXNvdXJjZV9IYW5kbGVyX0NiIGhhbmRsZXIsIHZvaWQqIGNvbnRleHQp
CiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUKGV3a1ZpZXcsIHNkKTsKLSAgICBFV0tfVklFV19QUklW
X0dFVChzZCwgcHJpdik7CisgICAgRVdLX1ZJRVdfU0RfR0VUKGV3a1ZpZXcsIHNtYXJ0RGF0YSk7
CisgICAgRVdLX1ZJRVdfUFJJVl9HRVQoc21hcnREYXRhLCBwcml2KTsKIAogICAgIGlmICghaGFu
ZGxlcikKICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CiAKLSAgICBwcml2LT5jdXN0b21fcmVz
b3VyY2VfaGFuZGxlci5mdW5jdGlvbiA9IGhhbmRsZXI7Ci0gICAgcHJpdi0+Y3VzdG9tX3Jlc291
cmNlX2hhbmRsZXIuY29udGV4dCA9IGNvbnRleHQ7CisgICAgcHJpdi0+Y3VzdG9tUmVzb3VyY2VI
YW5kbGVyLmZ1bmN0aW9uID0gaGFuZGxlcjsKKyAgICBwcml2LT5jdXN0b21SZXNvdXJjZUhhbmRs
ZXIuY29udGV4dCA9IGNvbnRleHQ7CiAKICAgICByZXR1cm4gZXdrX2N1c3RvbV9wcm90b2NvbF9o
YW5kbGVyX3NldChwcm90b2NvbHMpOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfcHJvdG9jb2xf
aGFuZGxlcl91bnNldChFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9H
RVQoZXdrVmlldywgc2QpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUKHNkLCBwcml2KTsKKyAgICBF
V0tfVklFV19TRF9HRVQoZXdrVmlldywgc21hcnREYXRhKTsKKyAgICBFV0tfVklFV19QUklWX0dF
VChzbWFydERhdGEsIHByaXYpOwogICAgIEVpbmFfQm9vbCByZXQgPSBld2tfY3VzdG9tX3Byb3Rv
Y29sX2hhbmRsZXJfYWxsX3Vuc2V0KCk7CiAKICAgICBpZiAocmV0KSB7Ci0gICAgICAgIHByaXYt
PmN1c3RvbV9yZXNvdXJjZV9oYW5kbGVyLmZ1bmN0aW9uID0gMDsKLSAgICAgICAgcHJpdi0+Y3Vz
dG9tX3Jlc291cmNlX2hhbmRsZXIuY29udGV4dCA9IDA7CisgICAgICAgIHByaXYtPmN1c3RvbVJl
c291cmNlSGFuZGxlci5mdW5jdGlvbiA9IDA7CisgICAgICAgIHByaXYtPmN1c3RvbVJlc291cmNl
SGFuZGxlci5jb250ZXh0ID0gMDsKICAgICB9CiAKICAgICByZXR1cm4gcmV0OwpAQCAtMzY5NCwx
MiArMzY5NCwxMiBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfcHJvdG9jb2xfaGFuZGxlcl91bnNldChF
dmFzX09iamVjdCogZXdrVmlldykKIAogdm9pZCogZXdrX3ZpZXdfcHJvdG9jb2xfaGFuZGxlcl9y
ZXNvdXJjZV9nZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIHNpemVfdCogYnl0ZXNSZWFkLCBjaGFy
KiogbWltZSwgY29uc3QgY2hhciogZmlsZSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVQoZXdrVmll
dywgc2QpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUKHNkLCBwcml2KTsKKyAgICBFV0tfVklFV19T
RF9HRVQoZXdrVmlldywgc21hcnREYXRhKTsKKyAgICBFV0tfVklFV19QUklWX0dFVChzbWFydERh
dGEsIHByaXYpOwogCi0gICAgRXdrX1ZpZXdfUmVzb3VyY2VfSGFuZGxlcl9DYiBmdW5jdGlvbiA9
IHByaXYtPmN1c3RvbV9yZXNvdXJjZV9oYW5kbGVyLmZ1bmN0aW9uOworICAgIEV3a19WaWV3X1Jl
c291cmNlX0hhbmRsZXJfQ2IgZnVuY3Rpb24gPSBwcml2LT5jdXN0b21SZXNvdXJjZUhhbmRsZXIu
ZnVuY3Rpb247CiAgICAgaWYgKGZ1bmN0aW9uKQotICAgICAgICByZXR1cm4gZnVuY3Rpb24oZmls
ZSwgYnl0ZXNSZWFkLCBtaW1lLCBwcml2LT5jdXN0b21fcmVzb3VyY2VfaGFuZGxlci5jb250ZXh0
KTsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGZpbGUsIGJ5dGVzUmVhZCwgbWltZSwgcHJpdi0+
Y3VzdG9tUmVzb3VyY2VIYW5kbGVyLmNvbnRleHQpOwogCiAgICAgcmV0dXJuIDA7CiB9CkBAIC0z
NzA5LDE3ICszNzA5LDE3IEBAIHZvaWQqIGV3a192aWV3X3Byb3RvY29sX2hhbmRsZXJfcmVzb3Vy
Y2VfZ2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBzaXplX3QqIGJ5dGVzCiAgKiBSZXBvcnRzIHRo
YXQgdGhlIGNvbnRlbnRzIGhhdmUgcmVzaXplZC4gVGhlIGV3a192aWV3IGNhbGxzIGNvbnRlbnRz
X3Jlc2l6ZSwKICAqIHdoaWNoIGNhbiBiZSByZWltcGxlbWVudGVkIGFzIG5lZWRlZC4KICAqCi0g
KiBAcGFyYW0gbyB2aWV3LgotICogQHBhcmFtIHcgbmV3IGNvbnRlbnQgd2lkdGguCi0gKiBAcGFy
YW0gaCBuZXcgY29udGVudCBoZWlnaHQuCisgKiBAcGFyYW0gZXdrVmlldyB2aWV3LgorICogQHBh
cmFtIHdpZHRoIG5ldyBjb250ZW50IHdpZHRoLgorICogQHBhcmFtIGhlaWdodCBuZXcgY29udGVu
dCBoZWlnaHQuCiAgKi8KIHZvaWQgZXdrX3ZpZXdfY29udGVudHNfc2l6ZV9jaGFuZ2VkKEV2YXNf
T2JqZWN0KiBld2tWaWV3LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCiB7Ci0gICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk4oc2QtPmFwaSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFwaS0+
Y29udGVudHNfcmVzaXplKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcs
IHNtYXJ0RGF0YSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRhLT5h
cGkpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+YXBpLT5jb250
ZW50c19yZXNpemUpOwogCi0gICAgaWYgKCFzZC0+YXBpLT5jb250ZW50c19yZXNpemUoc2QsIHdp
ZHRoLCBoZWlnaHQpKQorICAgIGlmICghc21hcnREYXRhLT5hcGktPmNvbnRlbnRzX3Jlc2l6ZShz
bWFydERhdGEsIHdpZHRoLCBoZWlnaHQpKQogICAgICAgICBFUlIoImZhaWxlZCB0byByZXNpemUg
Y29udGVudHMgdG8gJWR4JWQiLCB3aWR0aCwgaGVpZ2h0KTsKIH0KIApAQCAtMzcyNywxNCArMzcy
NywxNCBAQCB2b2lkIGV3a192aWV3X2NvbnRlbnRzX3NpemVfY2hhbmdlZChFdmFzX09iamVjdCog
ZXdrVmlldywgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogICogQGludGVybmFsCiAgKiBHZXRzIHBh
Z2Ugc2l6ZSBmcm9tIGZyYW1ldmlldy4KICAqCi0gKiBAcGFyYW0gbyB2aWV3LgorICogQHBhcmFt
IGV3a1ZpZXcgdmlldy4KICAqCiAgKiBAcmV0dXJuIHBhZ2Ugc2l6ZS4KICAqLwogV2ViQ29yZTo6
RmxvYXRSZWN0IGV3a192aWV3X3BhZ2VfcmVjdF9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1Zp
ZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUKGV3a1ZpZXcsIHNkKTsKLSAgICBFV0tfVklFV19Q
UklWX0dFVChzZCwgcHJpdik7CisgICAgRVdLX1ZJRVdfU0RfR0VUKGV3a1ZpZXcsIHNtYXJ0RGF0
YSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVQoc21hcnREYXRhLCBwcml2KTsKIAogICAgIFdlYkNv
cmU6OkZyYW1lKiBtYWluX2ZyYW1lID0gcHJpdi0+cGFnZS0+bWFpbkZyYW1lKCk7CiAgICAgcmV0
dXJuIG1haW5fZnJhbWUtPnZpZXcoKS0+ZnJhbWVSZWN0KCk7CkBAIC0zNzQzLDI0ICszNzQzLDI0
IEBAIFdlYkNvcmU6OkZsb2F0UmVjdCBld2tfdmlld19wYWdlX3JlY3RfZ2V0KGNvbnN0IEV2YXNf
T2JqZWN0KiBld2tWaWV3KQogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCiB2b2lkIGV3a192aWV3
X25lZWRfdG91Y2hfZXZlbnRzX3NldChFdmFzX09iamVjdCogZXdrVmlldywgYm9vbCBuZWVkZWQp
CiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUKGV3a1ZpZXcsIHNkKTsKLSAgICBFV0tfVklFV19QUklW
X0dFVChzZCwgcHJpdik7CisgICAgRVdLX1ZJRVdfU0RfR0VUKGV3a1ZpZXcsIHNtYXJ0RGF0YSk7
CisgICAgRVdLX1ZJRVdfUFJJVl9HRVQoc21hcnREYXRhLCBwcml2KTsKIAotICAgIHByaXYtPmZs
YWdzLm5lZWRfdG91Y2hfZXZlbnRzID0gbmVlZGVkOworICAgIHByaXYtPmZsYWdzLm5lZWRUb3Vj
aEV2ZW50cyA9IG5lZWRlZDsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X25lZWRfdG91Y2hfZXZl
bnRzX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9H
RVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklW
X0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwotICAgIHJldHVybiBwcml2LT5m
bGFncy5uZWVkX3RvdWNoX2V2ZW50czsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3
a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1Jf
UkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgcmV0dXJuIHByaXYtPmZs
YWdzLm5lZWRUb3VjaEV2ZW50czsKIH0KICNlbmRpZgogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfbW9k
ZV9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV3a19WaWV3X01vZGUgdmlld01vZGUpCiB7Ci0g
ICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0g
ICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxT
RSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlO
QV9GQUxTRSk7CiAKICAgICBzd2l0Y2ggKHZpZXdNb2RlKSB7CiAgICAgY2FzZSBFV0tfVklFV19N
T0RFX1dJTkRPV0VEOgpAQCAtMzc4OSwxMCArMzc4OSwxMCBAQCBFd2tfVmlld19Nb2RlIGV3a192
aWV3X21vZGVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewogICAgIEV3a19WaWV3
X01vZGUgbW9kZSA9IEVXS19WSUVXX01PREVfV0lORE9XRUQ7CiAKLSAgICBFV0tfVklFV19TRF9H
RVQoZXdrVmlldywgc2QpOwotICAgIGlmICghc2QpCisgICAgRVdLX1ZJRVdfU0RfR0VUKGV3a1Zp
ZXcsIHNtYXJ0RGF0YSk7CisgICAgaWYgKCFzbWFydERhdGEpCiAgICAgICAgIHJldHVybiBtb2Rl
OwotICAgIEVXS19WSUVXX1BSSVZfR0VUKHNkLCBwcml2KTsKKyAgICBFV0tfVklFV19QUklWX0dF
VChzbWFydERhdGEsIHByaXYpOwogICAgIGlmICghcHJpdikKICAgICAgICAgcmV0dXJuIG1vZGU7
CiAKQEAgLTM4MjAsNyArMzgyMCw3IEBAIEV3a19WaWV3X01vZGUgZXdrX3ZpZXdfbW9kZV9nZXQo
Y29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiAgKiBAaW50ZXJuYWwKICAqIFJlcG9ydHMgdGhl
IHZpZXcgdGhhdCBlZGl0b3IgY2xpZW50IHNlbGVjdGlvbiBoYXMgY2hhbmdlZC4KICAqCi0gKiBA
cGFyYW0gbyBWaWV3LgorICogQHBhcmFtIGV3a1ZpZXcgVmlldy4KICAqCiAgKiBFbWl0cyBzaWdu
YWw6ICJlZGl0b3JjbGllbnRzZWxlY3Rpb24sY2hhbmdlZCIgd2l0aCBubyBwYXJhbWV0ZXJzLgog
ICovCkBAIC0zODMzLDcgKzM4MzMsNyBAQCB2b2lkIGV3a192aWV3X2VkaXRvcl9jbGllbnRfc2Vs
ZWN0aW9uX2NoYW5nZWQoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiAgKiBAaW50ZXJuYWwKICAqIFJl
cG9ydHMgdG8gdGhlIHZpZXcgdGhhdCBlZGl0b3IgY2xpZW50J3MgY29udGVudHMgd2VyZSBjaGFu
Z2VkLgogICoKLSAqIEBwYXJhbSBvIFZpZXcuCisgKiBAcGFyYW0gZXdrVmlldyBWaWV3LgogICoK
ICAqIEVtaXRzIHNpZ25hbDogImVkaXRvcmNsaWVudCxjb250ZW50cyxjaGFuZ2VkIiB3aXRoIG5v
IHBhcmFtZXRlcnMuCiAgKi8K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>111975</attachid>
            <date>2011-10-21 09:20:04 -0700</date>
            <delta_ts>2011-10-21 21:15:55 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69988-20111022012001.patch</filename>
            <type>text/plain</type>
            <size>366808</size>
            <attacher name="Gyuyoung Kim">gyuyoung.kim</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTgxMDMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZs
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZwppbmRleCA4NTM2ZTM3NTg0
NmQ5MmI0NzcyY2JlODFjMGM2Zjg5N2Q4ZGFmNjNiLi45MWEzOTliNDQwMWQ2MTI5NTcyMWI4YWY0
YTg4NTNhM2FkMzdjZGVlIDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDcgQEAKKzIwMTEt
MTAtMjAgIEd5dXlvdW5nIEtpbSAgPGd5dXlvdW5nLmtpbUBzYW1zdW5nLmNvbT4KKworICAgICAg
ICBbRUZMXSBDaGFuZ2UgZWZsIHN0eWxlIGxvY2FsIHZhcmlhYmxlcyB3aXRoIFdlYktpdCBjb2Rp
bmcgU3R5bGUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD02OTk4OAorCisgICAgICAgIFJldmlld2VkIGJ5IEFudG9uaW8gR29tZXMuCisKKyAgICAgICAg
SW4gY29tbW9uIHdpdGggQnVnIDY5MDczLCB0aGlzIGlzIGEgdGhpcmQgc3RlcCBpbiBvcmRlciB0
byBiZSBtb3JlIGNvbXBsaWFudCB3aXRoIFdlYktpdCBjb2Rpbmcgc3R5bGUuCisgICAgICAgIFdl
IGhhdmUgdXNlZCBvbmUtbGV0dGVyfCB0d28tbGV0dGVyIGxvY2FsIHZhcmlhYmxlIGFjY29yZGlu
ZyB0byBlZmwgc3R5bGUuIEhvd2V2ZXIsIGl0J3MKKyAgICAgICAgbW9yZSBkaWZmaWN1bHQgZm9y
IG90aGVyIHJldmlld2VycyB0byByZXZpZXcgRUZMIHBhdGNoZXMuIFNvLCB0aGlzIHBhdGNoIGNo
YW5nZXMgZWZsIHN0eWxlCisgICAgICAgIGxvY2FsIHZhcmlhYmxlIHdpdGggbWVhbmluZ2Z1bCBv
bmUuCisKKyAgICAgICAgLSBVc2UgKm1lbnUqIGluc3RlYWQgb2YgKm8qIGluIGNvbW1lbnQgb2Yg
ZXdrX2NvbnRleHRtZW51LmNwcC4KKyAgICAgICAgLSBVc2UgKmxpc3QqIGluc3RlYWQgb2YgKmwq
IGxvY2FsIHZhcmlhYmxlCisgICAgICAgIC0gVXNlICpld2tQb2xpY3kqIGluc3RlYWQgb2YgKmV3
a19wb2xpY3kqIGluIGV3a19jb29raWVzLmNwcAorICAgICAgICAtIFVzZSAqc21hcnREYXRhKiBp
bnN0ZWFkIG9mICpzZCogbG9jYWwgdmFyaWFibGUgZm9yIEV3a19YWFhYX1NtYXJ0X0RhdGEgc3Ry
dWN0LgorICAgICAgICAtIFVzZSAqd2lkdGgqLCAqaGVpZ2h0KiBpbnN0ZWFkIG9mICp3KiwgKmgq
IGxvY2FsIHZhcmlhYmxlcy4KKyAgICAgICAgLSBVc2UgKnNjcm9sbFgqLCAqc2Nyb2xsWSosICpz
Y3JvbGxXaWR0aCosICpzY3JvbGxIZWlnaHQqLCAqY2VudGVyWCosICpjZW50ZXJZKiwgKmRlbHRh
WCosICpkZWx0YVkqLAorICAgICAgICAqYmFzZVgqLCAqYmFzZVkqIGluc3RlYWQgb2YgKnN4Kiwg
KnN5KiwgKnN3KiwgKnNoKiwgKmN4KiwgKmN5KiwgKmR4KiwgKmR5KiwgKmJ4KiwgKmJ5Ki4KKyAg
ICAgICAgLSBVc2UgKnJlZCosICpncmVlbiosICpibHVlKiwgKmFscGhhKiwgKmNvbnRlbnRSZWQq
LCAqY29udGVudEdyZWVuKiwgKmNvbnRlbnRCbHVlKiBhbmQgKmNvbnRlbnRBbHBoYSoKKyAgICAg
ICAgaW5zdGVhZCBvZiAqciosKmcqLCpiKiwqYSosKmNyKiwqY2cqLCpjYiosKmNhKi4KKyAgICAg
ICAgLSBVc2UgKnRpbGVQb3NpdGlvblgqLCAqdGlsZVBvc2l0aW9uWSogaW5zdGVhZCBvZiAqb3gq
LCpveSogaW4gdGlsZWQgYmFja2luZ3N0b3JlIGZpbGVzLgorICAgICAgICAtIFVzZSAqb2JqZWN0
KiBpbnN0ZWFkIG9mICpvYmoqIAorICAgICAgICAtIFVzZSAqbGVuZ3RoKiBpbnN0ZWFkIG9mICps
ZW4qCisgICAgICAgIC0gVXNlICpjb3JlRnJhbWUqIGluc3RlYWQgb2YgKmNmKgorICAgICAgICAt
IFVzZSAqYnVmZmVyKiBpbnN0ZWFkIG9mICpidWYqCisgICAgICAgIC0gVXNlICppdGVtKiBpbnN0
ZWFkIG9mICppKgorICAgICAgICAtIFVzZSAqY3VycmVudENvbHVtbiosICpjdXJyZW50Um93KiBp
bnN0ZWFkIG9mICptX2NvbCosICptX3JvdyogCisgICAgICAgIC0gUmVtb3ZlICJfIiBpbiBsb2Nh
bCB2YXJpYWJsZS4KKyAgICAgICAgLSBBbmQgc28gb24uCisKKyAgICAgICAgKiBld2svZXdrX2F1
dGhfc291cC5jcHA6CisgICAgICAgICogZXdrL2V3a19jb250ZXh0bWVudS5jcHA6CisgICAgICAg
ICogZXdrL2V3a19jb29raWVzLmNwcDoKKyAgICAgICAgKiBld2svZXdrX2ZyYW1lLmNwcDoKKyAg
ICAgICAgKiBld2svZXdrX2hpc3RvcnkuY3BwOgorICAgICAgICAqIGV3ay9ld2tfanMuY3BwOgor
ICAgICAgICAqIGV3ay9ld2tfbWFpbi5jcHA6CisgICAgICAgICogZXdrL2V3a19zZXR0aW5ncy5j
cHA6CisgICAgICAgICogZXdrL2V3a190aWxlZF9iYWNraW5nX3N0b3JlLmNwcDoKKyAgICAgICAg
KiBld2svZXdrX3RpbGVkX21hdHJpeC5jcHA6CisgICAgICAgICogZXdrL2V3a190aWxlZF9tb2Rl
bC5jcHA6CisgICAgICAgICogZXdrL2V3a192aWV3LmNwcDoKKwogMjAxMS0xMC0yMSAgR3J6ZWdv
cnogQ3phamtvd3NraSAgPGcuY3phamtvd3NraUBzYW1zdW5nLmNvbT4KIAogICAgICAgICBbRUZM
XSBld2tfdmlld19tb2RlX2dldCB1c2VzIGRlZGljYXRlZCBtYWNyb3MgaW5zdGVhZCBvZiBzdGFu
ZGFyZCBOVUxMIGNoZWNraW5nLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3
a19hdXRoX3NvdXAuY3BwIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19hdXRoX3NvdXAuY3Bw
CmluZGV4IGNiYzg3NTZlZDg1ZWJjMTVlNzdiYzQxYjMzZTA1MzNjNDI1YTE5MmYuLjk2NTYzYzBj
NDM3ZGY3Yjc3MzA2Nzk1NzU3MjBjNjZhM2FiZTU1YzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvZWZsL2V3ay9ld2tfYXV0aF9zb3VwLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2sv
ZXdrX2F1dGhfc291cC5jcHAKQEAgLTQwLDcgKzQwLDcgQEAgZXh0ZXJuICJDIiB7CiAgKi8KIAog
dHlwZWRlZiBzdHJ1Y3QgX0V3a19BdXRoX0RhdGEgewotICAgIFNvdXBNZXNzYWdlKiBtc2c7Cisg
ICAgU291cE1lc3NhZ2UqIG1lc3NhZ2U7CiAgICAgU291cEF1dGgqIGF1dGg7CiAgICAgU291cFNl
c3Npb24qIHNlc3Npb247CiB9IEV3a19BdXRoX0RhdGE7CkBAIC03OSw1MSArNzksNTEgQEAgdm9p
ZCBld2tfYXV0aF9zb3VwX2NyZWRlbnRpYWxzX3NldChjb25zdCBjaGFyKiB1c2VybmFtZSwgY29u
c3QgY2hhciogcGFzc3dvcmQsIHYKICAgICBpZiAoIWRhdGEpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIEV3a19BdXRoX0RhdGEqIGF1dGhfZGF0YSA9IHN0YXRpY19jYXN0PEV3a19BdXRoX0RhdGEq
PihkYXRhKTsKLSAgICBzb3VwX2F1dGhfYXV0aGVudGljYXRlKGF1dGhfZGF0YS0+YXV0aCwgdXNl
cm5hbWUsIHBhc3N3b3JkKTsKLSAgICBzb3VwX3Nlc3Npb25fdW5wYXVzZV9tZXNzYWdlKGF1dGhf
ZGF0YS0+c2Vzc2lvbiwgYXV0aF9kYXRhLT5tc2cpOwotICAgIGZyZWVfYXV0aF9kYXRhKGF1dGhf
ZGF0YSk7CisgICAgRXdrX0F1dGhfRGF0YSogYXV0aGVudGljYXRpb25EYXRhID0gc3RhdGljX2Nh
c3Q8RXdrX0F1dGhfRGF0YSo+KGRhdGEpOworICAgIHNvdXBfYXV0aF9hdXRoZW50aWNhdGUoYXV0
aGVudGljYXRpb25EYXRhLT5hdXRoLCB1c2VybmFtZSwgcGFzc3dvcmQpOworICAgIHNvdXBfc2Vz
c2lvbl91bnBhdXNlX21lc3NhZ2UoYXV0aGVudGljYXRpb25EYXRhLT5zZXNzaW9uLCBhdXRoZW50
aWNhdGlvbkRhdGEtPm1lc3NhZ2UpOworICAgIGZyZWVfYXV0aF9kYXRhKGF1dGhlbnRpY2F0aW9u
RGF0YSk7CiB9CiAKLXN0YXRpYyB2b2lkIHNlc3Npb25fYXV0aGVudGljYXRlKFNvdXBTZXNzaW9u
KiBzZXNzaW9uLCBTb3VwTWVzc2FnZSogbXNnLCBTb3VwQXV0aCogYXV0aCwgZ2Jvb2xlYW4gcmV0
cnlpbmcsIGdwb2ludGVyIC8qIHVzZXJfZGF0YSAqLykKK3N0YXRpYyB2b2lkIHNlc3Npb25fYXV0
aGVudGljYXRlKFNvdXBTZXNzaW9uKiBzZXNzaW9uLCBTb3VwTWVzc2FnZSogbWVzc2FnZSwgU291
cEF1dGgqIGF1dGgsIGdib29sZWFuIHJldHJ5aW5nLCBncG9pbnRlciAvKiB1c2VyX2RhdGEgKi8p
CiB7CiAgICAgU291cFVSSSogdXJpOwotICAgIEV3a19BdXRoX0RhdGEqIGF1dGhfZGF0YTsKKyAg
ICBFd2tfQXV0aF9EYXRhKiBhdXRoZW50aWNhdGlvbkRhdGE7CiAgICAgY29uc3QgY2hhciogcmVh
bG07CiAKICAgICBpZiAoIWV3a19hdXRoX3Nob3dfZGlhbG9nX2NhbGxiYWNrKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBhdXRoX2RhdGEgPSBzdGF0aWNfY2FzdDxFd2tfQXV0aF9EYXRhKj4oY2Fs
bG9jKDEsIHNpemVvZihFd2tfQXV0aF9EYXRhKSkpOworICAgIGF1dGhlbnRpY2F0aW9uRGF0YSA9
IHN0YXRpY19jYXN0PEV3a19BdXRoX0RhdGEqPihjYWxsb2MoMSwgc2l6ZW9mKEV3a19BdXRoX0Rh
dGEpKSk7CiAKLSAgICBpZiAoIWF1dGhfZGF0YSkgeworICAgIGlmICghYXV0aGVudGljYXRpb25E
YXRhKSB7CiAgICAgICAgIENSSVRJQ0FMKCJjb3VsZCBub3QgYWxsb2NhdGUgRXdrX0F1dGhfRGF0
YSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgc291cF9zZXNzaW9uX3BhdXNlX21l
c3NhZ2Uoc2Vzc2lvbiwgbXNnKTsKKyAgICBzb3VwX3Nlc3Npb25fcGF1c2VfbWVzc2FnZShzZXNz
aW9uLCBtZXNzYWdlKTsKICAgICAvLyBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgbWVzc2FnZSBz
dGlja3MgYXJvdW5kIHdoZW4gcGF1c2luZyBpdC4KLSAgICBnX29iamVjdF9yZWYobXNnKTsKKyAg
ICBnX29iamVjdF9yZWYobWVzc2FnZSk7CiAgICAgZ19vYmplY3RfcmVmKHNlc3Npb24pOwogICAg
IGdfb2JqZWN0X3JlZihhdXRoKTsKIAotICAgIGF1dGhfZGF0YS0+bXNnID0gbXNnOwotICAgIGF1
dGhfZGF0YS0+YXV0aCA9IGF1dGg7Ci0gICAgYXV0aF9kYXRhLT5zZXNzaW9uID0gc2Vzc2lvbjsK
KyAgICBhdXRoZW50aWNhdGlvbkRhdGEtPm1lc3NhZ2UgPSBtZXNzYWdlOworICAgIGF1dGhlbnRp
Y2F0aW9uRGF0YS0+YXV0aCA9IGF1dGg7CisgICAgYXV0aGVudGljYXRpb25EYXRhLT5zZXNzaW9u
ID0gc2Vzc2lvbjsKIAotICAgIHVyaSA9IHNvdXBfbWVzc2FnZV9nZXRfdXJpKGF1dGhfZGF0YS0+
bXNnKTsKLSAgICByZWFsbSA9IHNvdXBfYXV0aF9nZXRfcmVhbG0oYXV0aF9kYXRhLT5hdXRoKTsK
KyAgICB1cmkgPSBzb3VwX21lc3NhZ2VfZ2V0X3VyaShhdXRoZW50aWNhdGlvbkRhdGEtPm1lc3Nh
Z2UpOworICAgIHJlYWxtID0gc291cF9hdXRoX2dldF9yZWFsbShhdXRoZW50aWNhdGlvbkRhdGEt
PmF1dGgpOwogCiAgICAgLy8gQ2FsbCBhcHBsaWNhdGlvbiBtZXRob2QgcmVzcG9uc2libGUgZm9y
IHNob3dpbmcgYXV0aGVudGljYXRpb24gZGlhbG9nIGFuZCBzZW5kaW5nIGJhY2sgYXV0aG9yaXph
dGlvbiBkYXRhLgotICAgIGV3a19hdXRoX3Nob3dfZGlhbG9nX2NhbGxiYWNrKHJlYWxtLCBzb3Vw
X3VyaV90b19zdHJpbmcodXJpLCBUUlVFKSwgYXV0aF9kYXRhKTsKKyAgICBld2tfYXV0aF9zaG93
X2RpYWxvZ19jYWxsYmFjayhyZWFsbSwgc291cF91cmlfdG9fc3RyaW5nKHVyaSwgVFJVRSksIGF1
dGhlbnRpY2F0aW9uRGF0YSk7CiB9CiAKLXN0YXRpYyB2b2lkIGZyZWVfYXV0aF9kYXRhKEV3a19B
dXRoX0RhdGEqIGF1dGhfZGF0YSkKK3N0YXRpYyB2b2lkIGZyZWVfYXV0aF9kYXRhKEV3a19BdXRo
X0RhdGEqIGF1dGhEYXRhKQogewotICAgIGdfb2JqZWN0X3VucmVmKGF1dGhfZGF0YS0+bXNnKTsK
LSAgICBnX29iamVjdF91bnJlZihhdXRoX2RhdGEtPnNlc3Npb24pOwotICAgIGdfb2JqZWN0X3Vu
cmVmKGF1dGhfZGF0YS0+YXV0aCk7Ci0gICAgZnJlZShhdXRoX2RhdGEpOworICAgIGdfb2JqZWN0
X3VucmVmKGF1dGhEYXRhLT5tZXNzYWdlKTsKKyAgICBnX29iamVjdF91bnJlZihhdXRoRGF0YS0+
c2Vzc2lvbik7CisgICAgZ19vYmplY3RfdW5yZWYoYXV0aERhdGEtPmF1dGgpOworICAgIGZyZWUo
YXV0aERhdGEpOwogfQogCiBzdGF0aWMgdm9pZCBhdHRhY2goU291cFNlc3Npb25GZWF0dXJlKiBt
YW5hZ2VyLCBTb3VwU2Vzc2lvbiogc2Vzc2lvbikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
ZWZsL2V3ay9ld2tfY29udGV4dG1lbnUuY3BwIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19j
b250ZXh0bWVudS5jcHAKaW5kZXggNjk4YjIwMjk3NWM2NGVhMGJkODdjZjAwMDI3Njk2OWEyOWEx
MThkNC4uMWU0YjZmYjdmMzZlMGIyODFiZDc2MmVhZDdiNmY3MTlhZmNkN2ZkMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19jb250ZXh0bWVudS5jcHAKKysrIGIvU291cmNl
L1dlYktpdC9lZmwvZXdrL2V3a19jb250ZXh0bWVudS5jcHAKQEAgLTI0OCw3ICsyNDgsNyBAQCBF
d2tfQ29udGV4dF9NZW51KiBld2tfY29udGV4dF9tZW51X25ldyhFdmFzX09iamVjdCogdmlldywg
V2ViQ29yZTo6Q29udGV4dE1lbnVDbwogICoKICAqIEZyZWVzIHRoZSBjb250ZXh0IG1lbnUuCiAg
KgotICogQHBhcmFtIG8gdGhlIHZpZXcgb2JqZWN0CisgKiBAcGFyYW0gbWVudSB0aGUgdmlldyBv
YmplY3QKICAqIEByZXR1cm4gQGMgRUlOQV9UUlVFIG9uIHN1Y2Nlc3MsIG9yIEBjIEVJTkFfRkFM
U0Ugb24gZmFpbHVyZQogICoKICAqIEBub3RlIGVtaXRzIGEgc2lnbmFsICJjb250ZXh0bWVudSxm
cmVlIgpAQCAtMjY5LDcgKzI2OSw3IEBAIEVpbmFfQm9vbCBld2tfY29udGV4dF9tZW51X2ZyZWUo
RXdrX0NvbnRleHRfTWVudSogbWVudSkKICAqCiAgKiBBcHBlbmRzIHRoZSBXZWJDb3JlJ3MgaXRl
bSB0byB0aGUgY29udGV4dCBtZW51IG9iamVjdC4KICAqCi0gKiBAcGFyYW0gbyB0aGUgY29udGV4
dCBtZW51IG9iamVjdAorICogQHBhcmFtIG1lbnUgdGhlIGNvbnRleHQgbWVudSBvYmplY3QKICAq
IEBwYXJhbSBjb3JlIHRoZSBXZWJDb3JlJ3MgY29udGV4dCBtZW51IGl0ZW0gdGhhdCB3aWxsIGJl
IGFkZGVkIHRvIHRoZSBjb250ZXh0IG1lbnUKICAqIEBub3RlIGVtaXRzIGEgc2lnbmFsICJjb250
ZXh0bWVudSxpdGVtLGFwcGVuZGVkIgogICoKQEAgLTI5NCw3ICsyOTQsNyBAQCB2b2lkIGV3a19j
b250ZXh0X21lbnVfaXRlbV9hcHBlbmQoRXdrX0NvbnRleHRfTWVudSogbWVudSwgV2ViQ29yZTo6
Q29udGV4dE1lbnVJdAogICoKICAqIEVtaXRzIGEgc2lnbmFsIHdpdGggdGhlIGl0ZW1zIG9mIHRo
ZSBjb250ZXh0IG1lbnUuCiAgKgotICogQHBhcmFtIG8gdGhlIGNvbnRleHQgbWVudSBvYmplY3QK
KyAqIEBwYXJhbSBtZW51IHRoZSBjb250ZXh0IG1lbnUgb2JqZWN0CiAgKiBAcmV0dXJuIHRoZSBz
YW1lIGNvbnRleHQgbWVudSBvYmplY3QgdGhhdCB3YXMgZ2l2ZW4gdGhyb3VnaCBwYXJhbWV0ZXIK
ICAqCiAgKiBAbm90ZSBlbWl0cyBhIHNpZ25hbCAiY29udGV4dG1lbnUsY3VzdG9taXplIgpAQCAt
MzE0LDcgKzMxNCw3IEBAIEV3a19Db250ZXh0X01lbnUqIGV3a19jb250ZXh0X21lbnVfY3VzdG9t
aXplKEV3a19Db250ZXh0X01lbnUqIG1lbnUpCiAgKgogICogRW1pdHMgYSBzaWduYWwgImNvbnRl
eHRtZW51LHNob3ciCiAgKgotICogQHBhcmFtIG8gdGhlIGNvbnRleHQgbWVudSBvYmplY3QKKyAq
IEBwYXJhbSBtZW51IHRoZSBjb250ZXh0IG1lbnUgb2JqZWN0CiAgKi8KIHZvaWQgZXdrX2NvbnRl
eHRfbWVudV9zaG93KEV3a19Db250ZXh0X01lbnUqIG1lbnUpCiB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2VmbC9ld2svZXdrX2Nvb2tpZXMuY3BwIGIvU291cmNlL1dlYktpdC9lZmwvZXdr
L2V3a19jb29raWVzLmNwcAppbmRleCAwNGQ3MDQxNTdkMzU4ZTNiODZjOTcyNWZjOTU4M2I4M2Fh
YzA4NTVmLi5mZjZmOTc0NTQ4OTM3NTU4MGUzZWVlOGExZWQ5ZTM1Y2YyMWZjZjE2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2Nvb2tpZXMuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvZWZsL2V3ay9ld2tfY29va2llcy5jcHAKQEAgLTY3LDY2ICs2Nyw2NiBAQCBFaW5hX0Jv
b2wgZXdrX2Nvb2tpZXNfZmlsZV9zZXQoY29uc3QgY2hhciogZmlsZW5hbWUpCiB2b2lkIGV3a19j
b29raWVzX2NsZWFyKHZvaWQpCiB7CiAjaWYgVVNFKFNPVVApCi0gICAgR1NMaXN0KiBsOworICAg
IEdTTGlzdCogbGlzdDsKICAgICBHU0xpc3QqIHA7CiAgICAgU291cENvb2tpZUphciogY29va2ll
SmFyID0gV2ViQ29yZTo6ZGVmYXVsdENvb2tpZUphcigpOwogCi0gICAgbCA9IHNvdXBfY29va2ll
X2phcl9hbGxfY29va2llcyhjb29raWVKYXIpOwotICAgIGZvciAocCA9IGw7IHA7IHAgPSBwLT5u
ZXh0KQorICAgIGxpc3QgPSBzb3VwX2Nvb2tpZV9qYXJfYWxsX2Nvb2tpZXMoY29va2llSmFyKTsK
KyAgICBmb3IgKHAgPSBsaXN0OyBwOyBwID0gcC0+bmV4dCkKICAgICAgICAgc291cF9jb29raWVf
amFyX2RlbGV0ZV9jb29raWUoY29va2llSmFyLCAoU291cENvb2tpZSopcC0+ZGF0YSk7CiAKLSAg
ICBzb3VwX2Nvb2tpZXNfZnJlZShsKTsKKyAgICBzb3VwX2Nvb2tpZXNfZnJlZShsaXN0KTsKICNl
bmRpZgogfQogCiBFaW5hX0xpc3QqIGV3a19jb29raWVzX2dldF9hbGwodm9pZCkKIHsKLSAgICBF
aW5hX0xpc3QqIGVsID0gMDsKKyAgICBFaW5hX0xpc3QqIHJlc3VsdCA9IDA7CiAjaWYgVVNFKFNP
VVApCi0gICAgR1NMaXN0KiBsOworICAgIEdTTGlzdCogbGlzdDsKICAgICBHU0xpc3QqIHA7CiAg
ICAgU291cENvb2tpZUphciogY29va2llSmFyID0gV2ViQ29yZTo6ZGVmYXVsdENvb2tpZUphcigp
OwogCi0gICAgbCA9IHNvdXBfY29va2llX2phcl9hbGxfY29va2llcyhjb29raWVKYXIpOwotICAg
IGZvciAocCA9IGw7IHA7IHAgPSBwLT5uZXh0KSB7CisgICAgbGlzdCA9IHNvdXBfY29va2llX2ph
cl9hbGxfY29va2llcyhjb29raWVKYXIpOworICAgIGZvciAocCA9IGxpc3Q7IHA7IHAgPSBwLT5u
ZXh0KSB7CiAgICAgICAgIFNvdXBDb29raWUqIGNvb2tpZSA9IHN0YXRpY19jYXN0PFNvdXBDb29r
aWUqPihwLT5kYXRhKTsKLSAgICAgICAgRXdrX0Nvb2tpZSogYyA9IHN0YXRpY19jYXN0PEV3a19D
b29raWUqPihtYWxsb2Moc2l6ZW9mKCpjKSkpOwotICAgICAgICBjLT5uYW1lID0gc3RyZHVwKGNv
b2tpZS0+bmFtZSk7Ci0gICAgICAgIGMtPnZhbHVlID0gc3RyZHVwKGNvb2tpZS0+dmFsdWUpOwot
ICAgICAgICBjLT5kb21haW4gPSBzdHJkdXAoY29va2llLT5kb21haW4pOwotICAgICAgICBjLT5w
YXRoID0gc3RyZHVwKGNvb2tpZS0+cGF0aCk7Ci0gICAgICAgIGMtPmV4cGlyZXMgPSBzb3VwX2Rh
dGVfdG9fdGltZV90KGNvb2tpZS0+ZXhwaXJlcyk7Ci0gICAgICAgIGMtPnNlY3VyZSA9IHN0YXRp
Y19jYXN0PEVpbmFfQm9vbD4oY29va2llLT5zZWN1cmUpOwotICAgICAgICBjLT5odHRwX29ubHkg
PSBzdGF0aWNfY2FzdDxFaW5hX0Jvb2w+KGNvb2tpZS0+aHR0cF9vbmx5KTsKLSAgICAgICAgZWwg
PSBlaW5hX2xpc3RfYXBwZW5kKGVsLCBjKTsKKyAgICAgICAgRXdrX0Nvb2tpZSogZXdrQ29va2ll
ID0gc3RhdGljX2Nhc3Q8RXdrX0Nvb2tpZSo+KG1hbGxvYyhzaXplb2YoKmV3a0Nvb2tpZSkpKTsK
KyAgICAgICAgZXdrQ29va2llLT5uYW1lID0gc3RyZHVwKGNvb2tpZS0+bmFtZSk7CisgICAgICAg
IGV3a0Nvb2tpZS0+dmFsdWUgPSBzdHJkdXAoY29va2llLT52YWx1ZSk7CisgICAgICAgIGV3a0Nv
b2tpZS0+ZG9tYWluID0gc3RyZHVwKGNvb2tpZS0+ZG9tYWluKTsKKyAgICAgICAgZXdrQ29va2ll
LT5wYXRoID0gc3RyZHVwKGNvb2tpZS0+cGF0aCk7CisgICAgICAgIGV3a0Nvb2tpZS0+ZXhwaXJl
cyA9IHNvdXBfZGF0ZV90b190aW1lX3QoY29va2llLT5leHBpcmVzKTsKKyAgICAgICAgZXdrQ29v
a2llLT5zZWN1cmUgPSBzdGF0aWNfY2FzdDxFaW5hX0Jvb2w+KGNvb2tpZS0+c2VjdXJlKTsKKyAg
ICAgICAgZXdrQ29va2llLT5odHRwX29ubHkgPSBzdGF0aWNfY2FzdDxFaW5hX0Jvb2w+KGNvb2tp
ZS0+aHR0cF9vbmx5KTsKKyAgICAgICAgcmVzdWx0ID0gZWluYV9saXN0X2FwcGVuZChyZXN1bHQs
IGV3a0Nvb2tpZSk7CiAgICAgfQogCi0gICAgc291cF9jb29raWVzX2ZyZWUobCk7CisgICAgc291
cF9jb29raWVzX2ZyZWUobGlzdCk7CiAjZW5kaWYKLSAgICByZXR1cm4gZWw7CisgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAogdm9pZCBld2tfY29va2llc19jb29raWVfZGVsKEV3a19Db29raWUqIGNv
b2tpZSkKIHsKICNpZiBVU0UoU09VUCkKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihj
b29raWUpOwotICAgIEdTTGlzdCogbDsKKyAgICBHU0xpc3QqIGxpc3Q7CiAgICAgR1NMaXN0KiBw
OwogICAgIFNvdXBDb29raWVKYXIqIGNvb2tpZUphciA9IFdlYkNvcmU6OmRlZmF1bHRDb29raWVK
YXIoKTsKLSAgICBTb3VwQ29va2llKiBjMSA9IHNvdXBfY29va2llX25ldygKKyAgICBTb3VwQ29v
a2llKiBjb29raWUxID0gc291cF9jb29raWVfbmV3KAogICAgICAgICBjb29raWUtPm5hbWUsIGNv
b2tpZS0+dmFsdWUsIGNvb2tpZS0+ZG9tYWluLCBjb29raWUtPnBhdGgsIC0xKTsKIAotICAgIGwg
PSBzb3VwX2Nvb2tpZV9qYXJfYWxsX2Nvb2tpZXMoY29va2llSmFyKTsKLSAgICBmb3IgKHAgPSBs
OyBwOyBwID0gcC0+bmV4dCkgewotICAgICAgICBTb3VwQ29va2llKiBjMiA9IHN0YXRpY19jYXN0
PFNvdXBDb29raWUqPihwLT5kYXRhKTsKLSAgICAgICAgaWYgKHNvdXBfY29va2llX2VxdWFsKGMx
LCBjMikpIHsKLSAgICAgICAgICAgIHNvdXBfY29va2llX2phcl9kZWxldGVfY29va2llKGNvb2tp
ZUphciwgYzIpOworICAgIGxpc3QgPSBzb3VwX2Nvb2tpZV9qYXJfYWxsX2Nvb2tpZXMoY29va2ll
SmFyKTsKKyAgICBmb3IgKHAgPSBsaXN0OyBwOyBwID0gcC0+bmV4dCkgeworICAgICAgICBTb3Vw
Q29va2llKiBjb29raWUyID0gc3RhdGljX2Nhc3Q8U291cENvb2tpZSo+KHAtPmRhdGEpOworICAg
ICAgICBpZiAoc291cF9jb29raWVfZXF1YWwoY29va2llMSwgY29va2llMikpIHsKKyAgICAgICAg
ICAgIHNvdXBfY29va2llX2phcl9kZWxldGVfY29va2llKGNvb2tpZUphciwgY29va2llMik7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KIAotICAgIHNvdXBfY29va2llX2Zy
ZWUoYzEpOwotICAgIHNvdXBfY29va2llc19mcmVlKGwpOworICAgIHNvdXBfY29va2llX2ZyZWUo
Y29va2llMSk7CisgICAgc291cF9jb29raWVzX2ZyZWUobGlzdCk7CiAjZW5kaWYKIH0KIApAQCAt
MTY3LDcgKzE2Nyw3IEBAIHZvaWQgZXdrX2Nvb2tpZXNfcG9saWN5X3NldChFd2tfQ29va2llX1Bv
bGljeSBjb29raWVQb2xpY3kpCiAKIEV3a19Db29raWVfUG9saWN5IGV3a19jb29raWVzX3BvbGlj
eV9nZXQodm9pZCkKIHsKLSAgICBFd2tfQ29va2llX1BvbGljeSBld2tfcG9saWN5ID0gRVdLX0NP
T0tJRV9KQVJfQUNDRVBUX0FMV0FZUzsKKyAgICBFd2tfQ29va2llX1BvbGljeSBld2tQb2xpY3kg
PSBFV0tfQ09PS0lFX0pBUl9BQ0NFUFRfQUxXQVlTOwogI2lmIFVTRShTT1VQKQogICAgIFNvdXBD
b29raWVKYXIqIGNvb2tpZUphciA9IFdlYkNvcmU6OmRlZmF1bHRDb29raWVKYXIoKTsKICAgICBT
b3VwQ29va2llSmFyQWNjZXB0UG9saWN5IHBvbGljeTsKQEAgLTE3NSwxNiArMTc1LDE2IEBAIEV3
a19Db29raWVfUG9saWN5IGV3a19jb29raWVzX3BvbGljeV9nZXQodm9pZCkKICAgICBwb2xpY3kg
PSBzb3VwX2Nvb2tpZV9qYXJfZ2V0X2FjY2VwdF9wb2xpY3koY29va2llSmFyKTsKICAgICBzd2l0
Y2ggKHBvbGljeSkgewogICAgIGNhc2UgU09VUF9DT09LSUVfSkFSX0FDQ0VQVF9ORVZFUjoKLSAg
ICAgICAgZXdrX3BvbGljeSA9IEVXS19DT09LSUVfSkFSX0FDQ0VQVF9ORVZFUjsKKyAgICAgICAg
ZXdrUG9saWN5ID0gRVdLX0NPT0tJRV9KQVJfQUNDRVBUX05FVkVSOwogICAgICAgICBicmVhazsK
ICAgICBjYXNlIFNPVVBfQ09PS0lFX0pBUl9BQ0NFUFRfQUxXQVlTOgotICAgICAgICBld2tfcG9s
aWN5ID0gRVdLX0NPT0tJRV9KQVJfQUNDRVBUX0FMV0FZUzsKKyAgICAgICAgZXdrUG9saWN5ID0g
RVdLX0NPT0tJRV9KQVJfQUNDRVBUX0FMV0FZUzsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBT
T1VQX0NPT0tJRV9KQVJfQUNDRVBUX05PX1RISVJEX1BBUlRZOgotICAgICAgICBld2tfcG9saWN5
ID0gRVdLX0NPT0tJRV9KQVJfQUNDRVBUX05PX1RISVJEX1BBUlRZOworICAgICAgICBld2tQb2xp
Y3kgPSBFV0tfQ09PS0lFX0pBUl9BQ0NFUFRfTk9fVEhJUkRfUEFSVFk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KICNlbmRpZgogCi0gICAgcmV0dXJuIGV3a19wb2xpY3k7CisgICAgcmV0dXJuIGV3
a1BvbGljeTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfZnJhbWUu
Y3BwIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19mcmFtZS5jcHAKaW5kZXggODdjZTYzYzY2
NzZlMmQ0Mzg3ZmFlOTdiMzEzODQwNWU1YzM0OThjNS4uZjA5NTBjYzEwNDNlZjdiNjMwNDVjZjI1
YWFjMWY1YjE3YzFkYjQ3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19m
cmFtZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19mcmFtZS5jcHAKQEAgLTc2
LDcgKzc2LDcgQEAgc3RydWN0IEV3a19GcmFtZV9TbWFydF9EYXRhIHsKIAogc3RydWN0IEVpbmFf
SXRlcmF0b3JfRXdrX0ZyYW1lIHsKICAgICBFaW5hX0l0ZXJhdG9yIGJhc2U7Ci0gICAgRXZhc19P
YmplY3QqIG9iajsKKyAgICBFdmFzX09iamVjdCogb2JqZWN0OwogICAgIHVuc2lnbmVkIGN1cnJl
bnRJbmRleDsKIH07CiAKQEAgLTExMywyMCArMTEzLDIwIEBAIHN0YXRpYyBFdmFzX1NtYXJ0X0Ns
YXNzIF9wYXJlbnRfc2MgPSBFVkFTX1NNQVJUX0NMQVNTX0lOSVRfTlVMTDsKIHN0YXRpYyBpbmxp
bmUgdm9pZCBfZXdrX2ZyYW1lX2RlYnVnKEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsKICAgICBF
dmFzX09iamVjdCogY2xpcCwgKiBwYXJlbnQ7Ci0gICAgRXZhc19Db29yZCB4LCB5LCB3LCBoLCBj
eCwgY3ksIGN3LCBjaDsKLSAgICBpbnQgciwgZywgYiwgYSwgY3IsIGNnLCBjYiwgY2E7CisgICAg
RXZhc19Db29yZCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBjb250ZW50WCwgY29udGVudFksIGNvbnRl
bnRXaWR0aCwgY29udGVudEhlaWdodDsKKyAgICBpbnQgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEs
IGNvbnRlbnRSZWQsIGNvbnRlbnRHcmVlbiwgY29udGVudEJsdWUsIGNvbnRlbnRBbHBoYTsKIAot
ICAgIGV2YXNfb2JqZWN0X2NvbG9yX2dldChld2tGcmFtZSwgJnIsICZnLCAmYiwgJmEpOwotICAg
IGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldChld2tGcmFtZSwgJngsICZ5LCAmdywgJmgpOworICAg
IGV2YXNfb2JqZWN0X2NvbG9yX2dldChld2tGcmFtZSwgJnJlZCwgJmdyZWVuLCAmYmx1ZSwgJmFs
cGhhKTsKKyAgICBldmFzX29iamVjdF9nZW9tZXRyeV9nZXQoZXdrRnJhbWUsICZ4LCAmeSwgJndp
ZHRoLCAmaGVpZ2h0KTsKIAogICAgIGNsaXAgPSBldmFzX29iamVjdF9jbGlwX2dldChld2tGcmFt
ZSk7Ci0gICAgZXZhc19vYmplY3RfY29sb3JfZ2V0KGNsaXAsICZjciwgJmNnLCAmY2IsICZjYSk7
Ci0gICAgZXZhc19vYmplY3RfZ2VvbWV0cnlfZ2V0KGNsaXAsICZjeCwgJmN5LCAmY3csICZjaCk7
CisgICAgZXZhc19vYmplY3RfY29sb3JfZ2V0KGNsaXAsICZjb250ZW50UmVkLCAmY29udGVudEdy
ZWVuLCAmY29udGVudEJsdWUsICZjb250ZW50QWxwaGEpOworICAgIGV2YXNfb2JqZWN0X2dlb21l
dHJ5X2dldChjbGlwLCAmY29udGVudFgsICZjb250ZW50WSwgJmNvbnRlbnRXaWR0aCwgJmNvbnRl
bnRIZWlnaHQpOwogCiAgICAgZnByaW50ZihzdGRlcnIsICIlcDogdHlwZT0lcyBuYW1lPSVzLCB2
aXNpYmxlPSVkLCBjb2xvcj0lMDJ4JTAyeCUwMnglMDJ4LCAlZCwlZCslZHglZCwgY2xpcHBlcj0l
cCAoJWQsICUwMnglMDJ4JTAyeCUwMngsICVkLCVkKyVkeCVkKVxuIiwKICAgICAgICAgICAgIGV3
a0ZyYW1lLCBldmFzX29iamVjdF90eXBlX2dldChld2tGcmFtZSksIGV2YXNfb2JqZWN0X25hbWVf
Z2V0KGV3a0ZyYW1lKSwgZXZhc19vYmplY3RfdmlzaWJsZV9nZXQoZXdrRnJhbWUpLAotICAgICAg
ICAgICAgciwgZywgYiwgYSwgeCwgeSwgdywgaCwKLSAgICAgICAgICAgIGNsaXAsIGV2YXNfb2Jq
ZWN0X3Zpc2libGVfZ2V0KGNsaXApLCBjciwgY2csIGNiLCBjYSwgY3gsIGN5LCBjdywgY2gpOwor
ICAgICAgICAgICAgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEsIHgsIHksIHdpZHRoLCBoZWlnaHQs
CisgICAgICAgICAgICBjbGlwLCBldmFzX29iamVjdF92aXNpYmxlX2dldChjbGlwKSwgY29udGVu
dFJlZCwgY29udGVudEdyZWVuLCBjb250ZW50Qmx1ZSwgY29udGVudEFscGhhLCBjb250ZW50WCwg
Y29udGVudFksIGNvbnRlbnRXaWR0aCwgY29udGVudEhlaWdodCk7CiAgICAgcGFyZW50ID0gZXZh
c19vYmplY3Rfc21hcnRfcGFyZW50X2dldChld2tGcmFtZSk7CiAgICAgaWYgKCFwYXJlbnQpCiAg
ICAgICAgIGZwcmludGYoc3RkZXJyLCAiXG4iKTsKQEAgLTE0MCwxNiArMTQwLDE2IEBAIHN0YXRp
YyBXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEVmbCogX2V3a19mcmFtZV9sb2FkZXJfZWZsX2dl
dChjb25zdCBXZWJDb3JlOjpGCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYkNvcmU6OkZyYW1l
TG9hZGVyQ2xpZW50RWZsKj4oZnJhbWUtPmxvYWRlcigpLT5jbGllbnQoKSk7CiB9CiAKLXN0YXRp
YyBFaW5hX0Jvb2wgX2V3a19mcmFtZV9jaGlsZHJlbl9pdGVyYXRvcl9uZXh0KEVpbmFfSXRlcmF0
b3JfRXdrX0ZyYW1lKiBpdCwgRXZhc19PYmplY3QqKiBkYXRhKQorc3RhdGljIEVpbmFfQm9vbCBf
ZXdrX2ZyYW1lX2NoaWxkcmVuX2l0ZXJhdG9yX25leHQoRWluYV9JdGVyYXRvcl9Fd2tfRnJhbWUq
IGl0ZXJhdG9yLCBFdmFzX09iamVjdCoqIGRhdGEpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9P
Ul9SRVRVUk4oaXQtPm9iaiwgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOworICAgIEVXS19GUkFNRV9TRF9H
RVRfT1JfUkVUVVJOKGl0ZXJhdG9yLT5vYmplY3QsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7Cisg
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUsIEVJTkFf
RkFMU0UpOwogCi0gICAgV2ViQ29yZTo6RnJhbWVUcmVlKiB0cmVlID0gc2QtPmZyYW1lLT50cmVl
KCk7IC8vIGNoZWNrIGlmIGl0J3Mgc3RpbGwgdmFsaWQKKyAgICBXZWJDb3JlOjpGcmFtZVRyZWUq
IHRyZWUgPSBzbWFydERhdGEtPmZyYW1lLT50cmVlKCk7IC8vIGNoZWNrIGlmIGl0J3Mgc3RpbGwg
dmFsaWQKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodHJlZSwgRUlOQV9GQUxT
RSk7CiAKLSAgICBpZiAoaXQtPmN1cnJlbnRJbmRleCA8IHRyZWUtPmNoaWxkQ291bnQoKSkgewot
ICAgICAgICAqZGF0YSA9IEVXS1ByaXZhdGU6OmtpdEZyYW1lKHRyZWUtPmNoaWxkKGl0LT5jdXJy
ZW50SW5kZXgrKykpOworICAgIGlmIChpdGVyYXRvci0+Y3VycmVudEluZGV4IDwgdHJlZS0+Y2hp
bGRDb3VudCgpKSB7CisgICAgICAgICpkYXRhID0gRVdLUHJpdmF0ZTo6a2l0RnJhbWUodHJlZS0+
Y2hpbGQoaXRlcmF0b3ItPmN1cnJlbnRJbmRleCsrKSk7CiAgICAgICAgIHJldHVybiBFSU5BX1RS
VUU7CiAgICAgfQogCkBAIC0xNTgsNTMgKzE1OCw1MyBAQCBzdGF0aWMgRWluYV9Cb29sIF9ld2tf
ZnJhbWVfY2hpbGRyZW5faXRlcmF0b3JfbmV4dChFaW5hX0l0ZXJhdG9yX0V3a19GcmFtZSogaXQs
CiAKIHN0YXRpYyBFdmFzX09iamVjdCogX2V3a19mcmFtZV9jaGlsZHJlbl9pdGVyYXRvcl9nZXRf
Y29udGFpbmVyKEVpbmFfSXRlcmF0b3JfRXdrX0ZyYW1lKiBpdGVyYXRvcikKIHsKLSAgICByZXR1
cm4gaXRlcmF0b3ItPm9iajsKKyAgICByZXR1cm4gaXRlcmF0b3ItPm9iamVjdDsKIH0KIAogc3Rh
dGljIHZvaWQgX2V3a19mcmFtZV9zbWFydF9hZGQoRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewot
ICAgIEVXS19GUkFNRV9TRF9HRVQoZXdrRnJhbWUsIHNkKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VU
KGV3a0ZyYW1lLCBzbWFydERhdGEpOwogCi0gICAgaWYgKCFzZCkgewotICAgICAgICBzZCA9IHN0
YXRpY19jYXN0PEV3a19GcmFtZV9TbWFydF9EYXRhKj4oY2FsbG9jKDEsIHNpemVvZihFd2tfRnJh
bWVfU21hcnRfRGF0YSkpKTsKLSAgICAgICAgaWYgKCFzZCkgeworICAgIGlmICghc21hcnREYXRh
KSB7CisgICAgICAgIHNtYXJ0RGF0YSA9IHN0YXRpY19jYXN0PEV3a19GcmFtZV9TbWFydF9EYXRh
Kj4oY2FsbG9jKDEsIHNpemVvZihFd2tfRnJhbWVfU21hcnRfRGF0YSkpKTsKKyAgICAgICAgaWYg
KCFzbWFydERhdGEpIHsKICAgICAgICAgICAgIENSSVRJQ0FMKCJjb3VsZCBub3QgYWxsb2NhdGUg
RXdrX0ZyYW1lX1NtYXJ0X0RhdGEiKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQot
ICAgICAgICBldmFzX29iamVjdF9zbWFydF9kYXRhX3NldChld2tGcmFtZSwgc2QpOworICAgICAg
ICBldmFzX29iamVjdF9zbWFydF9kYXRhX3NldChld2tGcmFtZSwgc21hcnREYXRhKTsKICAgICB9
CiAKLSAgICBzZC0+c2VsZiA9IGV3a0ZyYW1lOworICAgIHNtYXJ0RGF0YS0+c2VsZiA9IGV3a0Zy
YW1lOwogCiAgICAgX3BhcmVudF9zYy5hZGQoZXdrRnJhbWUpOwotICAgIGV2YXNfb2JqZWN0X3N0
YXRpY19jbGlwX3NldChzZC0+YmFzZS5jbGlwcGVyLCBFSU5BX0ZBTFNFKTsKLSAgICBldmFzX29i
amVjdF9tb3ZlKHNkLT5iYXNlLmNsaXBwZXIsIDAsIDApOwotICAgIGV2YXNfb2JqZWN0X3Jlc2l6
ZShzZC0+YmFzZS5jbGlwcGVyLCAwLCAwKTsKKyAgICBldmFzX29iamVjdF9zdGF0aWNfY2xpcF9z
ZXQoc21hcnREYXRhLT5iYXNlLmNsaXBwZXIsIEVJTkFfRkFMU0UpOworICAgIGV2YXNfb2JqZWN0
X21vdmUoc21hcnREYXRhLT5iYXNlLmNsaXBwZXIsIDAsIDApOworICAgIGV2YXNfb2JqZWN0X3Jl
c2l6ZShzbWFydERhdGEtPmJhc2UuY2xpcHBlciwgMCwgMCk7CiAKICNpZmRlZiBFV0tfRlJBTUVf
REVCVUcKLSAgICBzZC0+cmVnaW9uID0gZXZhc19vYmplY3RfcmVjdGFuZ2xlX2FkZChzZC0+YmFz
ZS5ldmFzKTsKKyAgICBzbWFydERhdGEtPnJlZ2lvbiA9IGV2YXNfb2JqZWN0X3JlY3RhbmdsZV9h
ZGQoc21hcnREYXRhLT5iYXNlLmV2YXMpOwogICAgIHN0YXRpYyBpbnQgaSA9IDA7CiAgICAgc3dp
dGNoIChpKSB7CiAgICAgY2FzZSAwOgotICAgICAgICBldmFzX29iamVjdF9jb2xvcl9zZXQoc2Qt
PnJlZ2lvbiwgMTI4LCAwLCAwLCAxMjgpOworICAgICAgICBldmFzX29iamVjdF9jb2xvcl9zZXQo
c21hcnREYXRhLT5yZWdpb24sIDEyOCwgMCwgMCwgMTI4KTsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSAxOgotICAgICAgICBldmFzX29iamVjdF9jb2xvcl9zZXQoc2QtPnJlZ2lvbiwgMCwgMTI4
LCAwLCAxMjgpOworICAgICAgICBldmFzX29iamVjdF9jb2xvcl9zZXQoc21hcnREYXRhLT5yZWdp
b24sIDAsIDEyOCwgMCwgMTI4KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSAyOgotICAgICAg
ICBldmFzX29iamVjdF9jb2xvcl9zZXQoc2QtPnJlZ2lvbiwgMCwgMCwgMTI4LCAxMjgpOworICAg
ICAgICBldmFzX29iamVjdF9jb2xvcl9zZXQoc21hcnREYXRhLT5yZWdpb24sIDAsIDAsIDEyOCwg
MTI4KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSAzOgotICAgICAgICBldmFzX29iamVjdF9j
b2xvcl9zZXQoc2QtPnJlZ2lvbiwgMTI4LCAwLCAwLCAxMjgpOworICAgICAgICBldmFzX29iamVj
dF9jb2xvcl9zZXQoc21hcnREYXRhLT5yZWdpb24sIDEyOCwgMCwgMCwgMTI4KTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSA0OgotICAgICAgICBldmFzX29iamVjdF9jb2xvcl9zZXQoc2QtPnJl
Z2lvbiwgMTI4LCAxMjgsIDAsIDEyOCk7CisgICAgICAgIGV2YXNfb2JqZWN0X2NvbG9yX3NldChz
bWFydERhdGEtPnJlZ2lvbiwgMTI4LCAxMjgsIDAsIDEyOCk7CiAgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgNToKLSAgICAgICAgZXZhc19vYmplY3RfY29sb3Jfc2V0KHNkLT5yZWdpb24sIDEyOCwg
MCwgMTI4LCAxMjgpOworICAgICAgICBldmFzX29iamVjdF9jb2xvcl9zZXQoc21hcnREYXRhLT5y
ZWdpb24sIDEyOCwgMCwgMTI4LCAxMjgpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIDY6Ci0g
ICAgICAgIGV2YXNfb2JqZWN0X2NvbG9yX3NldChzZC0+cmVnaW9uLCAwLCAxMjgsIDEyOCwgMTI4
KTsKKyAgICAgICAgZXZhc19vYmplY3RfY29sb3Jfc2V0KHNtYXJ0RGF0YS0+cmVnaW9uLCAwLCAx
MjgsIDEyOCwgMTI4KTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgYnJl
YWs7CkBAIC0yMTMsMjcgKzIxMywyNyBAQCBzdGF0aWMgdm9pZCBfZXdrX2ZyYW1lX3NtYXJ0X2Fk
ZChFdmFzX09iamVjdCogZXdrRnJhbWUpCiAgICAgaWYgKGkgPiA2KQogICAgICAgICBpID0gMDsK
IAotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X21lbWJlcl9hZGQoc2QtPnJlZ2lvbiwgZXdrRnJhbWUp
OwotICAgIGV2YXNfb2JqZWN0X2hpZGUoc2QtPnJlZ2lvbik7CisgICAgZXZhc19vYmplY3Rfc21h
cnRfbWVtYmVyX2FkZChzbWFydERhdGEtPnJlZ2lvbiwgZXdrRnJhbWUpOworICAgIGV2YXNfb2Jq
ZWN0X2hpZGUoc21hcnREYXRhLT5yZWdpb24pOwogI2VuZGlmCiB9CiAKIHN0YXRpYyB2b2lkIF9l
d2tfZnJhbWVfc21hcnRfZGVsKEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsKLSAgICBFV0tfRlJB
TUVfU0RfR0VUKGV3a0ZyYW1lLCBzZCk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVChld2tGcmFtZSwg
c21hcnREYXRhKTsKIAotICAgIGlmIChzZCkgewotICAgICAgICBpZiAoc2QtPmZyYW1lKSB7Ci0g
ICAgICAgICAgICBXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEVmbCogZmxjID0gX2V3a19mcmFt
ZV9sb2FkZXJfZWZsX2dldChzZC0+ZnJhbWUpOworICAgIGlmIChzbWFydERhdGEpIHsKKyAgICAg
ICAgaWYgKHNtYXJ0RGF0YS0+ZnJhbWUpIHsKKyAgICAgICAgICAgIFdlYkNvcmU6OkZyYW1lTG9h
ZGVyQ2xpZW50RWZsKiBmbGMgPSBfZXdrX2ZyYW1lX2xvYWRlcl9lZmxfZ2V0KHNtYXJ0RGF0YS0+
ZnJhbWUpOwogICAgICAgICAgICAgZmxjLT5zZXRXZWJGcmFtZSgwKTsKLSAgICAgICAgICAgIHNk
LT5mcmFtZS0+bG9hZGVyKCktPmRldGFjaEZyb21QYXJlbnQoKTsKLSAgICAgICAgICAgIHNkLT5m
cmFtZS0+bG9hZGVyKCktPmNhbmNlbEFuZENsZWFyKCk7Ci0gICAgICAgICAgICBzZC0+ZnJhbWUg
PSAwOworICAgICAgICAgICAgc21hcnREYXRhLT5mcmFtZS0+bG9hZGVyKCktPmRldGFjaEZyb21Q
YXJlbnQoKTsKKyAgICAgICAgICAgIHNtYXJ0RGF0YS0+ZnJhbWUtPmxvYWRlcigpLT5jYW5jZWxB
bmRDbGVhcigpOworICAgICAgICAgICAgc21hcnREYXRhLT5mcmFtZSA9IDA7CiAgICAgICAgIH0K
IAotICAgICAgICBlaW5hX3N0cmluZ3NoYXJlX2RlbChzZC0+dGl0bGUpOwotICAgICAgICBlaW5h
X3N0cmluZ3NoYXJlX2RlbChzZC0+dXJpKTsKLSAgICAgICAgZWluYV9zdHJpbmdzaGFyZV9kZWwo
c2QtPm5hbWUpOworICAgICAgICBlaW5hX3N0cmluZ3NoYXJlX2RlbChzbWFydERhdGEtPnRpdGxl
KTsKKyAgICAgICAgZWluYV9zdHJpbmdzaGFyZV9kZWwoc21hcnREYXRhLT51cmkpOworICAgICAg
ICBlaW5hX3N0cmluZ3NoYXJlX2RlbChzbWFydERhdGEtPm5hbWUpOwogICAgIH0KIAogICAgIF9w
YXJlbnRfc2MuZGVsKGV3a0ZyYW1lKTsKQEAgLTI0MSwxNSArMjQxLDE1IEBAIHN0YXRpYyB2b2lk
IF9ld2tfZnJhbWVfc21hcnRfZGVsKEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIAogc3RhdGljIHZv
aWQgX2V3a19mcmFtZV9zbWFydF9yZXNpemUoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBFdmFzX0Nv
b3JkIHdpZHRoLCBFdmFzX0Nvb3JkIGhlaWdodCkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUKGV3
a0ZyYW1lLCBzZCk7Ci0gICAgZXZhc19vYmplY3RfcmVzaXplKHNkLT5iYXNlLmNsaXBwZXIsIHdp
ZHRoLCBoZWlnaHQpOworICAgIEVXS19GUkFNRV9TRF9HRVQoZXdrRnJhbWUsIHNtYXJ0RGF0YSk7
CisgICAgZXZhc19vYmplY3RfcmVzaXplKHNtYXJ0RGF0YS0+YmFzZS5jbGlwcGVyLCB3aWR0aCwg
aGVpZ2h0KTsKIAogI2lmZGVmIEVXS19GUkFNRV9ERUJVRwotICAgIGV2YXNfb2JqZWN0X3Jlc2l6
ZShzZC0+cmVnaW9uLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBldmFzX29iamVjdF9yZXNpemUoc21h
cnREYXRhLT5yZWdpb24sIHdpZHRoLCBoZWlnaHQpOwogICAgIEV2YXNfQ29vcmQgeCwgeTsKLSAg
ICBldmFzX29iamVjdF9nZW9tZXRyeV9nZXQoc2QtPnJlZ2lvbiwgJngsICZ5LCAmd2lkdGgsICZo
ZWlnaHQpOworICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldChzbWFydERhdGEtPnJlZ2lvbiwg
JngsICZ5LCAmd2lkdGgsICZoZWlnaHQpOwogICAgIElORigicmVnaW9uPSVwLCB2aXNpYmxlPSVk
LCBnZW89JWQsJWQgKyAlZHglZCIsCi0gICAgICAgIHNkLT5yZWdpb24sIGV2YXNfb2JqZWN0X3Zp
c2libGVfZ2V0KHNkLT5yZWdpb24pLCB4LCB5LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgc21h
cnREYXRhLT5yZWdpb24sIGV2YXNfb2JqZWN0X3Zpc2libGVfZ2V0KHNtYXJ0RGF0YS0+cmVnaW9u
KSwgeCwgeSwgd2lkdGgsIGhlaWdodCk7CiAgICAgX2V3a19mcmFtZV9kZWJ1Zyhld2tGcmFtZSk7
CiAjZW5kaWYKIH0KQEAgLTI2NCwxMyArMjY0LDEzIEBAIHN0YXRpYyB2b2lkIF9ld2tfZnJhbWVf
c21hcnRfc2V0KEV2YXNfU21hcnRfQ2xhc3MqIGFwaSkKIAogc3RhdGljIGlubGluZSBFdmFzX1Nt
YXJ0KiBfZXdrX2ZyYW1lX3NtYXJ0X2NsYXNzX25ldyh2b2lkKQogewotICAgIHN0YXRpYyBFdmFz
X1NtYXJ0X0NsYXNzIHNjID0gRVZBU19TTUFSVF9DTEFTU19JTklUX05BTUVfVkVSU0lPTihFV0tf
RlJBTUVfVFlQRV9TVFIpOworICAgIHN0YXRpYyBFdmFzX1NtYXJ0X0NsYXNzIHNtYXJ0Q2xhc3Mg
PSBFVkFTX1NNQVJUX0NMQVNTX0lOSVRfTkFNRV9WRVJTSU9OKEVXS19GUkFNRV9UWVBFX1NUUik7
CiAgICAgc3RhdGljIEV2YXNfU21hcnQqIHNtYXJ0ID0gMDsKIAogICAgIGlmIChFSU5BX1VOTElL
RUxZKCFzbWFydCkpIHsKICAgICAgICAgZXZhc19vYmplY3Rfc21hcnRfY2xpcHBlZF9zbWFydF9z
ZXQoJl9wYXJlbnRfc2MpOwotICAgICAgICBfZXdrX2ZyYW1lX3NtYXJ0X3NldCgmc2MpOwotICAg
ICAgICBzbWFydCA9IGV2YXNfc21hcnRfY2xhc3NfbmV3KCZzYyk7CisgICAgICAgIF9ld2tfZnJh
bWVfc21hcnRfc2V0KCZzbWFydENsYXNzKTsKKyAgICAgICAgc21hcnQgPSBldmFzX3NtYXJ0X2Ns
YXNzX25ldygmc21hcnRDbGFzcyk7CiAgICAgfQogCiAgICAgcmV0dXJuIHNtYXJ0OwpAQCAtMjg0
LDI4ICsyODQsMjggQEAgRXZhc19PYmplY3QqIGV3a19mcmFtZV92aWV3X2dldChjb25zdCBFdmFz
X09iamVjdCogZXdrRnJhbWUpCiAKIEVpbmFfSXRlcmF0b3IqIGV3a19mcmFtZV9jaGlsZHJlbl9p
dGVyYXRvcl9uZXcoRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewotICAgIEVXS19GUkFNRV9TRF9H
RVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgMCk7Ci0gICAgRWluYV9JdGVyYXRvcl9Fd2tfRnJh
bWUqIGl0ID0gc3RhdGljX2Nhc3Q8RWluYV9JdGVyYXRvcl9Fd2tfRnJhbWUqPgorICAgIEVXS19G
UkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzbWFydERhdGEsIDApOworICAgIEVpbmFf
SXRlcmF0b3JfRXdrX0ZyYW1lKiBpdGVyYXRvciA9IHN0YXRpY19jYXN0PEVpbmFfSXRlcmF0b3Jf
RXdrX0ZyYW1lKj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2FsbG9jKDEs
IHNpemVvZihFaW5hX0l0ZXJhdG9yX0V3a19GcmFtZSkpKTsKLSAgICBpZiAoIWl0KQorICAgIGlm
ICghaXRlcmF0b3IpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgRUlOQV9NQUdJQ19TRVQoJml0
LT5iYXNlLCBFSU5BX01BR0lDX0lURVJBVE9SKTsKLSAgICBpdC0+YmFzZS5uZXh0ID0gRlVOQ19J
VEVSQVRPUl9ORVhUKF9ld2tfZnJhbWVfY2hpbGRyZW5faXRlcmF0b3JfbmV4dCk7Ci0gICAgaXQt
PmJhc2UuZ2V0X2NvbnRhaW5lciA9IEZVTkNfSVRFUkFUT1JfR0VUX0NPTlRBSU5FUihfZXdrX2Zy
YW1lX2NoaWxkcmVuX2l0ZXJhdG9yX2dldF9jb250YWluZXIpOwotICAgIGl0LT5iYXNlLmZyZWUg
PSBGVU5DX0lURVJBVE9SX0ZSRUUoZnJlZSk7Ci0gICAgaXQtPm9iaiA9IGV3a0ZyYW1lOwotICAg
IGl0LT5jdXJyZW50SW5kZXggPSAwOwotICAgIHJldHVybiAmaXQtPmJhc2U7CisgICAgRUlOQV9N
QUdJQ19TRVQoJml0ZXJhdG9yLT5iYXNlLCBFSU5BX01BR0lDX0lURVJBVE9SKTsKKyAgICBpdGVy
YXRvci0+YmFzZS5uZXh0ID0gRlVOQ19JVEVSQVRPUl9ORVhUKF9ld2tfZnJhbWVfY2hpbGRyZW5f
aXRlcmF0b3JfbmV4dCk7CisgICAgaXRlcmF0b3ItPmJhc2UuZ2V0X2NvbnRhaW5lciA9IEZVTkNf
SVRFUkFUT1JfR0VUX0NPTlRBSU5FUihfZXdrX2ZyYW1lX2NoaWxkcmVuX2l0ZXJhdG9yX2dldF9j
b250YWluZXIpOworICAgIGl0ZXJhdG9yLT5iYXNlLmZyZWUgPSBGVU5DX0lURVJBVE9SX0ZSRUUo
ZnJlZSk7CisgICAgaXRlcmF0b3ItPm9iamVjdCA9IGV3a0ZyYW1lOworICAgIGl0ZXJhdG9yLT5j
dXJyZW50SW5kZXggPSAwOworICAgIHJldHVybiAmaXRlcmF0b3ItPmJhc2U7CiB9CiAKIEV2YXNf
T2JqZWN0KiBld2tfZnJhbWVfY2hpbGRfZmluZChFdmFzX09iamVjdCogZXdrRnJhbWUsIGNvbnN0
IGNoYXIqIG5hbWUpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUs
IHNkLCAwKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21hcnRE
YXRhLCAwKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwobmFtZSwgMCk7Ci0g
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgMCk7Ci0gICAgV1RG
OjpTdHJpbmcgcyA9IFdURjo6U3RyaW5nOjpmcm9tVVRGOChuYW1lKTsKLSAgICByZXR1cm4gRVdL
UHJpdmF0ZTo6a2l0RnJhbWUoc2QtPmZyYW1lLT50cmVlKCktPmZpbmQoV1RGOjpBdG9taWNTdHJp
bmcocykpKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5m
cmFtZSwgMCk7CisgICAgV1RGOjpTdHJpbmcgZnJhbWVOYW1lID0gV1RGOjpTdHJpbmc6OmZyb21V
VEY4KG5hbWUpOworICAgIHJldHVybiBFV0tQcml2YXRlOjpraXRGcmFtZShzbWFydERhdGEtPmZy
YW1lLT50cmVlKCktPmZpbmQoV1RGOjpBdG9taWNTdHJpbmcoZnJhbWVOYW1lKSkpOwogfQogCiBF
aW5hX0Jvb2wgZXdrX2ZyYW1lX3VyaV9zZXQoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBjb25zdCBj
aGFyKiB1cmkpCkBAIC0zMjYsMjcgKzMyNiwyNyBAQCBjb25zdCBjaGFyKiBld2tfZnJhbWVfdXJp
X2dldChjb25zdCBFdmFzX09iamVjdCogZXdrRnJhbWUpCiAKIGNvbnN0IGNoYXIqIGV3a19mcmFt
ZV90aXRsZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewotICAgIEVXS19GUkFN
RV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgMCk7Ci0gICAgcmV0dXJuIHNkLT50aXRs
ZTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRhLCAw
KTsKKyAgICByZXR1cm4gc21hcnREYXRhLT50aXRsZTsKIH0KIAogY29uc3QgY2hhciogZXdrX2Zy
YW1lX25hbWVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsKLSAgICBFV0tfRlJB
TUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIDApOworICAgIEVXS19GUkFNRV9TRF9H
RVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzbWFydERhdGEsIDApOwogCi0gICAgaWYgKCFzZC0+ZnJh
bWUpIHsKKyAgICBpZiAoIXNtYXJ0RGF0YS0+ZnJhbWUpIHsKICAgICAgICAgRVJSKCJjb3VsZCBu
b3QgZ2V0IG5hbWUgb2YgdW5pbml0aWFsaXplZCBmcmFtZS4iKTsKICAgICAgICAgcmV0dXJuIDA7
CiAgICAgfQogCi0gICAgY29uc3QgV1RGOjpTdHJpbmcgZnJhbWVOYW1lID0gc2QtPmZyYW1lLT50
cmVlKCktPnVuaXF1ZU5hbWUoKTsKKyAgICBjb25zdCBXVEY6OlN0cmluZyBmcmFtZU5hbWUgPSBz
bWFydERhdGEtPmZyYW1lLT50cmVlKCktPnVuaXF1ZU5hbWUoKTsKIAotICAgIGlmICgoc2QtPm5h
bWUpICYmIChzZC0+bmFtZSA9PSBmcmFtZU5hbWUpKQotICAgICAgICByZXR1cm4gc2QtPm5hbWU7
CisgICAgaWYgKChzbWFydERhdGEtPm5hbWUpICYmIChzbWFydERhdGEtPm5hbWUgPT0gZnJhbWVO
YW1lKSkKKyAgICAgICAgcmV0dXJuIHNtYXJ0RGF0YS0+bmFtZTsKIAotICAgIGVpbmFfc3RyaW5n
c2hhcmVfcmVwbGFjZV9sZW5ndGgoJihzZC0+bmFtZSksIGZyYW1lTmFtZS51dGY4KCkuZGF0YSgp
LCBmcmFtZU5hbWUubGVuZ3RoKCkpOworICAgIGVpbmFfc3RyaW5nc2hhcmVfcmVwbGFjZV9sZW5n
dGgoJihzbWFydERhdGEtPm5hbWUpLCBmcmFtZU5hbWUudXRmOCgpLmRhdGEoKSwgZnJhbWVOYW1l
Lmxlbmd0aCgpKTsKIAotICAgIHJldHVybiBzZC0+bmFtZTsKKyAgICByZXR1cm4gc21hcnREYXRh
LT5uYW1lOwogfQogCiBFaW5hX0Jvb2wgZXdrX2ZyYW1lX2NvbnRlbnRzX3NpemVfZ2V0KGNvbnN0
IEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgRXZhc19Db29yZCogd2lkdGgsIEV2YXNfQ29vcmQqIGhl
aWdodCkKQEAgLTM2Nyw5ICszNjcsOSBAQCBFaW5hX0Jvb2wgZXdrX2ZyYW1lX2NvbnRlbnRzX3Np
emVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgRXZhc19Db29yZCogdwogCiBzdGF0
aWMgRWluYV9Cb29sIF9ld2tfZnJhbWVfY29udGVudHNfc2V0X2ludGVybmFsKEV3a19GcmFtZV9T
bWFydF9EYXRhKiBzbWFydERhdGEsIGNvbnN0IGNoYXIqIGNvbnRlbnRzLCBzaXplX3QgY29udGVu
dHNTaXplLCBjb25zdCBjaGFyKiBtaW1lVHlwZSwgY29uc3QgY2hhciogZW5jb2RpbmcsIGNvbnN0
IGNoYXIqIGJhc2VVcmksIGNvbnN0IGNoYXIqIHVucmVhY2hhYmxlVXJpKQogewotICAgIHNpemVf
dCBsZW4gPSBzdHJsZW4oY29udGVudHMpOwotICAgIGlmIChjb250ZW50c1NpemUgPCAxIHx8IGNv
bnRlbnRzU2l6ZSA+IGxlbikKLSAgICAgICAgY29udGVudHNTaXplID0gbGVuOworICAgIHNpemVf
dCBsZW5ndGggPSBzdHJsZW4oY29udGVudHMpOworICAgIGlmIChjb250ZW50c1NpemUgPCAxIHx8
IGNvbnRlbnRzU2l6ZSA+IGxlbmd0aCkKKyAgICAgICAgY29udGVudHNTaXplID0gbGVuZ3RoOwog
ICAgIGlmICghbWltZVR5cGUpCiAgICAgICAgIG1pbWVUeXBlID0gInRleHQvaHRtbCI7CiAgICAg
aWYgKCFlbmNvZGluZykKQEAgLTM5OCw1NyArMzk4LDU3IEBAIHN0YXRpYyBFaW5hX0Jvb2wgX2V3
a19mcmFtZV9jb250ZW50c19zZXRfaW50ZXJuYWwoRXdrX0ZyYW1lX1NtYXJ0X0RhdGEqIHNtYXJ0
RGF0CiAKIEVpbmFfQm9vbCBld2tfZnJhbWVfY29udGVudHNfc2V0KEV2YXNfT2JqZWN0KiBld2tG
cmFtZSwgY29uc3QgY2hhciogY29udGVudHMsIHNpemVfdCBjb250ZW50c1NpemUsIGNvbnN0IGNo
YXIqIG1pbWVUeXBlLCBjb25zdCBjaGFyKiBlbmNvZGluZywgY29uc3QgY2hhciogYmFzZVVyaSkK
IHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFM
U0UpOwotICAgIEVJTkFfU0FGRVRZX09OX0ZBTFNFX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5B
X0ZBTFNFKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21hcnRE
YXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9GQUxTRV9SRVRVUk5fVkFMKHNt
YXJ0RGF0YS0+ZnJhbWUsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOX1ZBTChjb250ZW50cywgRUlOQV9GQUxTRSk7CiAgICAgcmV0dXJuIF9ld2tfZnJhbWVfY29u
dGVudHNfc2V0X2ludGVybmFsCi0gICAgICAgICAgICAgICAoc2QsIGNvbnRlbnRzLCBjb250ZW50
c1NpemUsIG1pbWVUeXBlLCBlbmNvZGluZywgYmFzZVVyaSwgMCk7CisgICAgICAgICAgICAgICAo
c21hcnREYXRhLCBjb250ZW50cywgY29udGVudHNTaXplLCBtaW1lVHlwZSwgZW5jb2RpbmcsIGJh
c2VVcmksIDApOwogfQogCiBFaW5hX0Jvb2wgZXdrX2ZyYW1lX2NvbnRlbnRzX2FsdGVybmF0ZV9z
ZXQoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBjb25zdCBjaGFyKiBjb250ZW50cywgc2l6ZV90IGNv
bnRlbnRzU2l6ZSwgY29uc3QgY2hhciogbWltZVR5cGUsIGNvbnN0IGNoYXIqIGVuY29kaW5nLCBj
b25zdCBjaGFyKiBiYXNlVXJpLCBjb25zdCBjaGFyKiB1bnJlYWNoYWJsZVVyaSkKIHsKLSAgICBF
V0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOwotICAg
IEVJTkFfU0FGRVRZX09OX0ZBTFNFX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsK
KyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRhLCBFSU5B
X0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9GQUxTRV9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+
ZnJhbWUsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChj
b250ZW50cywgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFM
KHVucmVhY2hhYmxlVXJpLCBFSU5BX0ZBTFNFKTsKICAgICByZXR1cm4gX2V3a19mcmFtZV9jb250
ZW50c19zZXRfaW50ZXJuYWwKLSAgICAgICAgICAgICAgIChzZCwgY29udGVudHMsIGNvbnRlbnRz
U2l6ZSwgbWltZVR5cGUsIGVuY29kaW5nLCBiYXNlVXJpLAorICAgICAgICAgICAgICAgKHNtYXJ0
RGF0YSwgY29udGVudHMsIGNvbnRlbnRzU2l6ZSwgbWltZVR5cGUsIGVuY29kaW5nLCBiYXNlVXJp
LAogICAgICAgICAgICAgICAgdW5yZWFjaGFibGVVcmkpOwogfQogCiBFaW5hX0Jvb2wgZXdrX2Zy
YW1lX3NjcmlwdF9leGVjdXRlKEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgY29uc3QgY2hhciogc2Ny
aXB0KQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgRUlO
QV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fRkFMU0VfUkVUVVJOX1ZBTChzZC0+ZnJhbWUs
IEVJTkFfRkFMU0UpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBz
bWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09OX0ZBTFNFX1JFVFVSTl9W
QUwoc21hcnREYXRhLT5mcmFtZSwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk5fVkFMKHNjcmlwdCwgRUlOQV9GQUxTRSk7Ci0gICAgc2QtPmZyYW1lLT5zY3JpcHQo
KS0+ZXhlY3V0ZVNjcmlwdChXVEY6OlN0cmluZzo6ZnJvbVVURjgoc2NyaXB0KSwgdHJ1ZSk7Cisg
ICAgc21hcnREYXRhLT5mcmFtZS0+c2NyaXB0KCktPmV4ZWN1dGVTY3JpcHQoV1RGOjpTdHJpbmc6
OmZyb21VVEY4KHNjcmlwdCksIHRydWUpOwogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKIEVp
bmFfQm9vbCBld2tfZnJhbWVfZWRpdGFibGVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tGcmFt
ZSkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFf
RkFMU0UpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJ
TkFfRkFMU0UpOwotICAgIHJldHVybiBzZC0+ZWRpdGFibGU7CisgICAgRVdLX0ZSQU1FX1NEX0dF
VF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUsIEVJTkFfRkFMU0UpOwor
ICAgIHJldHVybiBzbWFydERhdGEtPmVkaXRhYmxlOwogfQogCiBFaW5hX0Jvb2wgZXdrX2ZyYW1l
X2VkaXRhYmxlX3NldChFdmFzX09iamVjdCogZXdrRnJhbWUsIEVpbmFfQm9vbCBlZGl0YWJsZSkK
IHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFM
U0UpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFf
RkFMU0UpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzbWFydERh
dGEsIEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFy
dERhdGEtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKICAgICBlZGl0YWJsZSA9ICEhZWRpdGFibGU7Ci0g
ICAgaWYgKHNkLT5lZGl0YWJsZSA9PSBlZGl0YWJsZSkKKyAgICBpZiAoc21hcnREYXRhLT5lZGl0
YWJsZSA9PSBlZGl0YWJsZSkKICAgICAgICAgcmV0dXJuIEVJTkFfVFJVRTsKICAgICBpZiAoZWRp
dGFibGUpCi0gICAgICAgIHNkLT5mcmFtZS0+ZWRpdG9yKCktPmFwcGx5RWRpdGluZ1N0eWxlVG9C
b2R5RWxlbWVudCgpOworICAgICAgICBzbWFydERhdGEtPmZyYW1lLT5lZGl0b3IoKS0+YXBwbHlF
ZGl0aW5nU3R5bGVUb0JvZHlFbGVtZW50KCk7CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAog
Y2hhciogZXdrX2ZyYW1lX3NlbGVjdGlvbl9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1l
KQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgMCk7Ci0g
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgMCk7Ci0gICAgV1RG
OjpDU3RyaW5nIHMgPSBzZC0+ZnJhbWUtPmVkaXRvcigpLT5zZWxlY3RlZFRleHQoKS51dGY4KCk7
CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSwgMCk7
CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUsIDAp
OworICAgIFdURjo6Q1N0cmluZyBzID0gc21hcnREYXRhLT5mcmFtZS0+ZWRpdG9yKCktPnNlbGVj
dGVkVGV4dCgpLnV0ZjgoKTsKICAgICBpZiAocy5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIDA7
CiAgICAgcmV0dXJuIHN0cmR1cChzLmRhdGEoKSk7CkBAIC00NTYsNDUgKzQ1Niw0NSBAQCBjaGFy
KiBld2tfZnJhbWVfc2VsZWN0aW9uX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrRnJhbWUpCiAK
IEVpbmFfQm9vbCBld2tfZnJhbWVfdGV4dF9zZWFyY2goY29uc3QgRXZhc19PYmplY3QqIGV3a0Zy
YW1lLCBjb25zdCBjaGFyKiB0ZXh0LCBFaW5hX0Jvb2wgY2FzZVNlbnNpdGl2ZSwgRWluYV9Cb29s
IGZvcndhcmQsIEVpbmFfQm9vbCB3cmFwKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVU
VVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9P
Ul9SRVRVUk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZF
VFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUsIEVJTkFfRkFMU0UpOwogICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh0ZXh0LCBFSU5BX0ZBTFNFKTsKIAotICAg
IHJldHVybiBzZC0+ZnJhbWUtPmVkaXRvcigpLT5maW5kU3RyaW5nKFdURjo6U3RyaW5nOjpmcm9t
VVRGOCh0ZXh0KSwgZm9yd2FyZCwgY2FzZVNlbnNpdGl2ZSwgd3JhcCwgdHJ1ZSk7CisgICAgcmV0
dXJuIHNtYXJ0RGF0YS0+ZnJhbWUtPmVkaXRvcigpLT5maW5kU3RyaW5nKFdURjo6U3RyaW5nOjpm
cm9tVVRGOCh0ZXh0KSwgZm9yd2FyZCwgY2FzZVNlbnNpdGl2ZSwgd3JhcCwgdHJ1ZSk7CiB9CiAK
IHVuc2lnbmVkIGludCBld2tfZnJhbWVfdGV4dF9tYXRjaGVzX21hcmsoRXZhc19PYmplY3QqIGV3
a0ZyYW1lLCBjb25zdCBjaGFyKiBzdHJpbmcsIEVpbmFfQm9vbCBjYXNlU2Vuc2l0aXZlLCBFaW5h
X0Jvb2wgaGlnaGxpZ2h0LCB1bnNpZ25lZCBpbnQgbGltaXQpCiB7Ci0gICAgRVdLX0ZSQU1FX1NE
X0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCAwKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VU
X09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRhLCAwKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5mcmFtZSwgRUlOQV9GQUxTRSk7CiAgICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHN0cmluZywgMCk7CiAKLSAgICBzZC0+ZnJhbWUtPmVk
aXRvcigpLT5zZXRNYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkKGhpZ2hsaWdodCk7Ci0g
ICAgcmV0dXJuIHNkLT5mcmFtZS0+ZWRpdG9yKCktPmNvdW50TWF0Y2hlc0ZvclRleHQoV1RGOjpT
dHJpbmc6OmZyb21VVEY4KHN0cmluZyksIGNhc2VTZW5zaXRpdmUsIGxpbWl0LCB0cnVlKTsKKyAg
ICBzbWFydERhdGEtPmZyYW1lLT5lZGl0b3IoKS0+c2V0TWFya2VkVGV4dE1hdGNoZXNBcmVIaWdo
bGlnaHRlZChoaWdobGlnaHQpOworICAgIHJldHVybiBzbWFydERhdGEtPmZyYW1lLT5lZGl0b3Io
KS0+Y291bnRNYXRjaGVzRm9yVGV4dChXVEY6OlN0cmluZzo6ZnJvbVVURjgoc3RyaW5nKSwgY2Fz
ZVNlbnNpdGl2ZSwgbGltaXQsIHRydWUpOwogfQogCiBFaW5hX0Jvb2wgZXdrX2ZyYW1lX3RleHRf
bWF0Y2hlc191bm1hcmtfYWxsKEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsKLSAgICBFV0tfRlJB
TUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOworICAgIEVX
S19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzbWFydERhdGEsIEVJTkFfRkFMU0Up
OworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmZyYW1lLCBF
SU5BX0ZBTFNFKTsKIAotICAgIHNkLT5mcmFtZS0+ZG9jdW1lbnQoKS0+bWFya2VycygpLT5yZW1v
dmVNYXJrZXJzKFdlYkNvcmU6OkRvY3VtZW50TWFya2VyOjpUZXh0TWF0Y2gpOworICAgIHNtYXJ0
RGF0YS0+ZnJhbWUtPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+cmVtb3ZlTWFya2VycyhXZWJDb3Jl
OjpEb2N1bWVudE1hcmtlcjo6VGV4dE1hdGNoKTsKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQog
CiBFaW5hX0Jvb2wgZXdrX2ZyYW1lX3RleHRfbWF0Y2hlc19oaWdobGlnaHRfc2V0KEV2YXNfT2Jq
ZWN0KiBld2tGcmFtZSwgRWluYV9Cb29sIGhpZ2hsaWdodCkKIHsKLSAgICBFV0tfRlJBTUVfU0Rf
R0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOwotICAgIHNkLT5mcmFt
ZS0+ZWRpdG9yKCktPnNldE1hcmtlZFRleHRNYXRjaGVzQXJlSGlnaGxpZ2h0ZWQoaGlnaGxpZ2h0
KTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRhLCBF
SU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRh
LT5mcmFtZSwgRUlOQV9GQUxTRSk7CisgICAgc21hcnREYXRhLT5mcmFtZS0+ZWRpdG9yKCktPnNl
dE1hcmtlZFRleHRNYXRjaGVzQXJlSGlnaGxpZ2h0ZWQoaGlnaGxpZ2h0KTsKICAgICByZXR1cm4g
RUlOQV9UUlVFOwogfQogCiBFaW5hX0Jvb2wgZXdrX2ZyYW1lX3RleHRfbWF0Y2hlc19oaWdobGln
aHRfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsKLSAgICBFV0tfRlJBTUVfU0Rf
R0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOwotICAgIHJldHVybiBz
ZC0+ZnJhbWUtPmVkaXRvcigpLT5tYXJrZWRUZXh0TWF0Y2hlc0FyZUhpZ2hsaWdodGVkKCk7Cisg
ICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSwgRUlOQV9G
QUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJh
bWUsIEVJTkFfRkFMU0UpOworICAgIHJldHVybiBzbWFydERhdGEtPmZyYW1lLT5lZGl0b3IoKS0+
bWFya2VkVGV4dE1hdGNoZXNBcmVIaWdobGlnaHRlZCgpOwogfQogCiAvKioKQEAgLTUxNSwxMCAr
NTE1LDEwIEBAIHN0YXRpYyBib29sIF9ld2tfZnJhbWVfcmVjdF9pc19uZWdhdGl2ZV92YWx1ZShj
b25zdCBXZWJDb3JlOjpJbnRSZWN0JiByZWN0KQogCiBFaW5hX0Jvb2wgZXdrX2ZyYW1lX3RleHRf
bWF0Y2hlc19udGhfcG9zX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrRnJhbWUsIHNpemVfdCBu
dW1iZXIsIGludCogeCwgaW50KiB5KQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJO
KGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9S
RVRVUk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUsIEVJTkFfRkFMU0UpOwogCi0gICAg
VmVjdG9yPFdlYkNvcmU6OkludFJlY3Q+IGludFJlY3RzID0gc2QtPmZyYW1lLT5kb2N1bWVudCgp
LT5tYXJrZXJzKCktPnJlbmRlcmVkUmVjdHNGb3JNYXJrZXJzKFdlYkNvcmU6OkRvY3VtZW50TWFy
a2VyOjpUZXh0TWF0Y2gpOworICAgIFZlY3RvcjxXZWJDb3JlOjpJbnRSZWN0PiBpbnRSZWN0cyA9
IHNtYXJ0RGF0YS0+ZnJhbWUtPmRvY3VtZW50KCktPm1hcmtlcnMoKS0+cmVuZGVyZWRSZWN0c0Zv
ck1hcmtlcnMoV2ViQ29yZTo6RG9jdW1lbnRNYXJrZXI6OlRleHRNYXRjaCk7CiAKICAgICAvKiBy
ZW1vdmUgdXNlbGVzcyB2YWx1ZXMgKi8KICAgICBzdGQ6OnJlbW92ZV9pZihpbnRSZWN0cy5iZWdp
bigpLCBpbnRSZWN0cy5lbmQoKSwgX2V3a19mcmFtZV9yZWN0X2lzX25lZ2F0aXZlX3ZhbHVlKTsK
QEAgLTUzNywyNSArNTM3LDI1IEBAIEVpbmFfQm9vbCBld2tfZnJhbWVfdGV4dF9tYXRjaGVzX250
aF9wb3NfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgc2l6ZV90CiAKIEVpbmFfQm9v
bCBld2tfZnJhbWVfc3RvcChFdmFzX09iamVjdCogZXdrRnJhbWUpCiB7Ci0gICAgRVdLX0ZSQU1F
X1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKLSAgICBzZC0+
ZnJhbWUtPmxvYWRlcigpLT5zdG9wQWxsTG9hZGVycygpOworICAgIEVXS19GUkFNRV9TRF9HRVRf
T1JfUkVUVVJOKGV3a0ZyYW1lLCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKKyAg
ICBzbWFydERhdGEtPmZyYW1lLT5sb2FkZXIoKS0+c3RvcEFsbExvYWRlcnMoKTsKICAgICByZXR1
cm4gRUlOQV9UUlVFOwogfQogCiBFaW5hX0Jvb2wgZXdrX2ZyYW1lX3JlbG9hZChFdmFzX09iamVj
dCogZXdrRnJhbWUpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUs
IHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2Qt
PmZyYW1lLCBFSU5BX0ZBTFNFKTsKLSAgICBzZC0+ZnJhbWUtPmxvYWRlcigpLT5yZWxvYWQoKTsK
KyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRhLCBFSU5B
X0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5m
cmFtZSwgRUlOQV9GQUxTRSk7CisgICAgc21hcnREYXRhLT5mcmFtZS0+bG9hZGVyKCktPnJlbG9h
ZCgpOwogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKIEVpbmFfQm9vbCBld2tfZnJhbWVfcmVs
b2FkX2Z1bGwoRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRf
T1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7Ci0gICAgc2QtPmZyYW1lLT5s
b2FkZXIoKS0+cmVsb2FkKHRydWUpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3
a0ZyYW1lLCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOX1ZBTChzbWFydERhdGEtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKKyAgICBzbWFydERhdGEt
PmZyYW1lLT5sb2FkZXIoKS0+cmVsb2FkKHRydWUpOwogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9
CiAKQEAgLTU3MSw5ICs1NzEsOSBAQCBFaW5hX0Jvb2wgZXdrX2ZyYW1lX2ZvcndhcmQoRXZhc19P
YmplY3QqIGV3a0ZyYW1lKQogCiBFaW5hX0Jvb2wgZXdrX2ZyYW1lX25hdmlnYXRlKEV2YXNfT2Jq
ZWN0KiBld2tGcmFtZSwgaW50IHN0ZXBzKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVU
VVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7Ci0gICAgV2ViQ29yZTo6UGFnZSogcGFn
ZSA9IHNkLT5mcmFtZS0+cGFnZSgpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3
a0ZyYW1lLCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOX1ZBTChzbWFydERhdGEtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKKyAgICBXZWJDb3JlOjpQ
YWdlKiBwYWdlID0gc21hcnREYXRhLT5mcmFtZS0+cGFnZSgpOwogICAgIGlmICghcGFnZS0+Y2Fu
R29CYWNrT3JGb3J3YXJkKHN0ZXBzKSkKICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CiAgICAg
cGFnZS0+Z29CYWNrT3JGb3J3YXJkKHN0ZXBzKTsKQEAgLTU5MiwzOSArNTkyLDM5IEBAIEVpbmFf
Qm9vbCBld2tfZnJhbWVfZm9yd2FyZF9wb3NzaWJsZShFdmFzX09iamVjdCogZXdrRnJhbWUpCiAK
IEVpbmFfQm9vbCBld2tfZnJhbWVfbmF2aWdhdGVfcG9zc2libGUoRXZhc19PYmplY3QqIGV3a0Zy
YW1lLCBpbnQgc3RlcHMpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJh
bWUsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwo
c2QtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKLSAgICBXZWJDb3JlOjpQYWdlKiBwYWdlID0gc2QtPmZy
YW1lLT5wYWdlKCk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNt
YXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFM
KHNtYXJ0RGF0YS0+ZnJhbWUsIEVJTkFfRkFMU0UpOworICAgIFdlYkNvcmU6OlBhZ2UqIHBhZ2Ug
PSBzbWFydERhdGEtPmZyYW1lLT5wYWdlKCk7CiAgICAgcmV0dXJuIHBhZ2UtPmNhbkdvQmFja09y
Rm9yd2FyZChzdGVwcyk7CiB9CiAKIGZsb2F0IGV3a19mcmFtZV9wYWdlX3pvb21fZ2V0KGNvbnN0
IEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVS
Tihld2tGcmFtZSwgc2QsIC0xLjApOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZB
TChzZC0+ZnJhbWUsIC0xLjApOwotICAgIHJldHVybiBzZC0+ZnJhbWUtPnBhZ2Vab29tRmFjdG9y
KCk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSwg
LTEuMCk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJh
bWUsIC0xLjApOworICAgIHJldHVybiBzbWFydERhdGEtPmZyYW1lLT5wYWdlWm9vbUZhY3Rvcigp
OwogfQogCiBFaW5hX0Jvb2wgZXdrX2ZyYW1lX3BhZ2Vfem9vbV9zZXQoRXZhc19PYmplY3QqIGV3
a0ZyYW1lLCBmbG9hdCBwYWdlWm9vbUZhY3RvcikKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09S
X1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFMU0UpOwotICAgIHNkLT5mcmFtZS0+c2V0
UGFnZVpvb21GYWN0b3IocGFnZVpvb21GYWN0b3IpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1Jf
UkVUVVJOKGV3a0ZyYW1lLCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKKyAgICBz
bWFydERhdGEtPmZyYW1lLT5zZXRQYWdlWm9vbUZhY3RvcihwYWdlWm9vbUZhY3Rvcik7CiAgICAg
cmV0dXJuIEVJTkFfVFJVRTsKIH0KIAogZmxvYXQgZXdrX2ZyYW1lX3RleHRfem9vbV9nZXQoY29u
c3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVU
VVJOKGV3a0ZyYW1lLCBzZCwgLTEuMCk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5f
VkFMKHNkLT5mcmFtZSwgLTEuMCk7Ci0gICAgcmV0dXJuIHNkLT5mcmFtZS0+dGV4dFpvb21GYWN0
b3IoKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRh
LCAtMS4wKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5m
cmFtZSwgLTEuMCk7CisgICAgcmV0dXJuIHNtYXJ0RGF0YS0+ZnJhbWUtPnRleHRab29tRmFjdG9y
KCk7CiB9CiAKIEVpbmFfQm9vbCBld2tfZnJhbWVfdGV4dF96b29tX3NldChFdmFzX09iamVjdCog
ZXdrRnJhbWUsIGZsb2F0IHRleHRab29tRmFjdG9yKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRf
T1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7Ci0gICAgc2QtPmZyYW1lLT5z
ZXRUZXh0Wm9vbUZhY3Rvcih0ZXh0Wm9vbUZhY3Rvcik7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9P
Ul9SRVRVUk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZF
VFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUsIEVJTkFfRkFMU0UpOworICAg
IHNtYXJ0RGF0YS0+ZnJhbWUtPnNldFRleHRab29tRmFjdG9yKHRleHRab29tRmFjdG9yKTsKICAg
ICByZXR1cm4gRUlOQV9UUlVFOwogfQogCkBAIC02NDMsMTQgKzY0MywxNCBAQCB2b2lkIGV3a19m
cmFtZV9oaXRfdGVzdF9mcmVlKEV3a19IaXRfVGVzdCogaGl0VGVzdCkKIAogRXdrX0hpdF9UZXN0
KiBld2tfZnJhbWVfaGl0X3Rlc3RfbmV3KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgaW50
IHgsIGludCB5KQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBz
ZCwgMCk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgMCk7
CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSwgMCk7
CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUsIDAp
OwogCi0gICAgV2ViQ29yZTo6RnJhbWVWaWV3KiB2aWV3ID0gc2QtPmZyYW1lLT52aWV3KCk7Cisg
ICAgV2ViQ29yZTo6RnJhbWVWaWV3KiB2aWV3ID0gc21hcnREYXRhLT5mcmFtZS0+dmlldygpOwog
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh2aWV3LCAwKTsKLSAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLT5jb250ZW50UmVuZGVyZXIoKSwgMCk7
CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUtPmNv
bnRlbnRSZW5kZXJlcigpLCAwKTsKIAotICAgIFdlYkNvcmU6OkhpdFRlc3RSZXN1bHQgcmVzdWx0
ID0gc2QtPmZyYW1lLT5ldmVudEhhbmRsZXIoKS0+aGl0VGVzdFJlc3VsdEF0UG9pbnQKKyAgICBX
ZWJDb3JlOjpIaXRUZXN0UmVzdWx0IHJlc3VsdCA9IHNtYXJ0RGF0YS0+ZnJhbWUtPmV2ZW50SGFu
ZGxlcigpLT5oaXRUZXN0UmVzdWx0QXRQb2ludAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICh2aWV3LT53aW5kb3dUb0NvbnRlbnRzKFdlYkNvcmU6OkludFBvaW50KHgs
IHkpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKmFsbG93U2hh
ZG93Q29udGVudCovIGZhbHNlLCAvKmlnbm9yZUNsaXBwaW5nKi8gdHJ1ZSk7CiAKQEAgLTY1OSw0
MSArNjU5LDQxIEBAIEV3a19IaXRfVGVzdCogZXdrX2ZyYW1lX2hpdF90ZXN0X25ldyhjb25zdCBF
dmFzX09iamVjdCogZXdrRnJhbWUsIGludCB4LCBpbnQgeSkKICAgICBpZiAoIXJlc3VsdC5pbm5l
ck5vZGUoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBFd2tfSGl0X1Rlc3QqIGhpdF90ZXN0
ID0gc3RhdGljX2Nhc3Q8RXdrX0hpdF9UZXN0Kj4oY2FsbG9jKDEsIHNpemVvZihFd2tfSGl0X1Rl
c3QpKSk7Ci0gICAgaWYgKCFoaXRfdGVzdCkgeworICAgIEV3a19IaXRfVGVzdCogaGl0VGVzdCA9
IHN0YXRpY19jYXN0PEV3a19IaXRfVGVzdCo+KGNhbGxvYygxLCBzaXplb2YoRXdrX0hpdF9UZXN0
KSkpOworICAgIGlmICghaGl0VGVzdCkgewogICAgICAgICBDUklUSUNBTCgiQ291bGQgbm90IGFs
bG9jYXRlIG1lbW9yeSBmb3IgaGl0IHRlc3QuIik7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0K
IAotICAgIGhpdF90ZXN0LT54ID0gcmVzdWx0LnBvaW50KCkueCgpOwotICAgIGhpdF90ZXN0LT55
ID0gcmVzdWx0LnBvaW50KCkueSgpOworICAgIGhpdFRlc3QtPnggPSByZXN1bHQucG9pbnQoKS54
KCk7CisgICAgaGl0VGVzdC0+eSA9IHJlc3VsdC5wb2ludCgpLnkoKTsKICNpZiAwCiAgICAgLy8g
RklYTUUKLSAgICBoaXRfdGVzdC0+Ym91bmRpbmdfYm94LnggPSByZXN1bHQuYm91bmRpbmdCb3go
KS54KCk7Ci0gICAgaGl0X3Rlc3QtPmJvdW5kaW5nX2JveC55ID0gcmVzdWx0LmJvdW5kaW5nQm94
KCkueSgpOwotICAgIGhpdF90ZXN0LT5ib3VuZGluZ19ib3gudyA9IHJlc3VsdC5ib3VuZGluZ0Jv
eCgpLndpZHRoKCk7Ci0gICAgaGl0X3Rlc3QtPmJvdW5kaW5nX2JveC5oID0gcmVzdWx0LmJvdW5k
aW5nQm94KCkuaGVpZ2h0KCk7CisgICAgaGl0VGVzdC0+Ym91bmRpbmdfYm94LnggPSByZXN1bHQu
Ym91bmRpbmdCb3goKS54KCk7CisgICAgaGl0VGVzdC0+Ym91bmRpbmdfYm94LnkgPSByZXN1bHQu
Ym91bmRpbmdCb3goKS55KCk7CisgICAgaGl0VGVzdC0+Ym91bmRpbmdfYm94LndpZHRoID0gcmVz
dWx0LmJvdW5kaW5nQm94KCkud2lkdGgoKTsKKyAgICBoaXRUZXN0LT5ib3VuZGluZ19ib3guaGVp
Z2h0ID0gcmVzdWx0LmJvdW5kaW5nQm94KCkuaGVpZ2h0KCk7CiAjZWxzZQotICAgIGhpdF90ZXN0
LT5ib3VuZGluZ19ib3gueCA9IDA7Ci0gICAgaGl0X3Rlc3QtPmJvdW5kaW5nX2JveC55ID0gMDsK
LSAgICBoaXRfdGVzdC0+Ym91bmRpbmdfYm94LncgPSAwOwotICAgIGhpdF90ZXN0LT5ib3VuZGlu
Z19ib3guaCA9IDA7CisgICAgaGl0VGVzdC0+Ym91bmRpbmdfYm94LnggPSAwOworICAgIGhpdFRl
c3QtPmJvdW5kaW5nX2JveC55ID0gMDsKKyAgICBoaXRUZXN0LT5ib3VuZGluZ19ib3gudyA9IDA7
CisgICAgaGl0VGVzdC0+Ym91bmRpbmdfYm94LmggPSAwOwogI2VuZGlmCiAKLSAgICBXZWJDb3Jl
OjpUZXh0RGlyZWN0aW9uIGRpcjsKLSAgICBoaXRfdGVzdC0+dGl0bGUgPSBlaW5hX3N0cmluZ3No
YXJlX2FkZChyZXN1bHQudGl0bGUoZGlyKS51dGY4KCkuZGF0YSgpKTsKLSAgICBoaXRfdGVzdC0+
YWx0ZXJuYXRlX3RleHQgPSBlaW5hX3N0cmluZ3NoYXJlX2FkZChyZXN1bHQuYWx0RGlzcGxheVN0
cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgIFdlYkNvcmU6OlRleHREaXJlY3Rpb24gZGlyZWN0
aW9uOworICAgIGhpdFRlc3QtPnRpdGxlID0gZWluYV9zdHJpbmdzaGFyZV9hZGQocmVzdWx0LnRp
dGxlKGRpcmVjdGlvbikudXRmOCgpLmRhdGEoKSk7CisgICAgaGl0VGVzdC0+YWx0ZXJuYXRlX3Rl
eHQgPSBlaW5hX3N0cmluZ3NoYXJlX2FkZChyZXN1bHQuYWx0RGlzcGxheVN0cmluZygpLnV0Zjgo
KS5kYXRhKCkpOwogICAgIGlmIChyZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCkgJiYgcmVzdWx0
LmlubmVyTm9uU2hhcmVkTm9kZSgpLT5kb2N1bWVudCgpCiAgICAgICAgICYmIHJlc3VsdC5pbm5l
ck5vblNoYXJlZE5vZGUoKS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSkKLSAgICAgICAgaGl0X3Rlc3Qt
PmZyYW1lID0gRVdLUHJpdmF0ZTo6a2l0RnJhbWUocmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgp
LT5kb2N1bWVudCgpLT5mcmFtZSgpKTsKKyAgICAgICAgaGl0VGVzdC0+ZnJhbWUgPSBFV0tQcml2
YXRlOjpraXRGcmFtZShyZXN1bHQuaW5uZXJOb25TaGFyZWROb2RlKCktPmRvY3VtZW50KCktPmZy
YW1lKCkpOwogCi0gICAgaGl0X3Rlc3QtPmxpbmsudGV4dCA9IGVpbmFfc3RyaW5nc2hhcmVfYWRk
KHJlc3VsdC50ZXh0Q29udGVudCgpLnV0ZjgoKS5kYXRhKCkpOwotICAgIGhpdF90ZXN0LT5saW5r
LnVybCA9IGVpbmFfc3RyaW5nc2hhcmVfYWRkKHJlc3VsdC5hYnNvbHV0ZUxpbmtVUkwoKS5zdHJp
bmcoKS51dGY4KCkuZGF0YSgpKTsKLSAgICBoaXRfdGVzdC0+bGluay50aXRsZSA9IGVpbmFfc3Ry
aW5nc2hhcmVfYWRkKHJlc3VsdC50aXRsZURpc3BsYXlTdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsK
LSAgICBoaXRfdGVzdC0+bGluay50YXJnZXRfZnJhbWUgPSBFV0tQcml2YXRlOjpraXRGcmFtZShy
ZXN1bHQudGFyZ2V0RnJhbWUoKSk7CisgICAgaGl0VGVzdC0+bGluay50ZXh0ID0gZWluYV9zdHJp
bmdzaGFyZV9hZGQocmVzdWx0LnRleHRDb250ZW50KCkudXRmOCgpLmRhdGEoKSk7CisgICAgaGl0
VGVzdC0+bGluay51cmwgPSBlaW5hX3N0cmluZ3NoYXJlX2FkZChyZXN1bHQuYWJzb2x1dGVMaW5r
VVJMKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgaGl0VGVzdC0+bGluay50aXRsZSA9
IGVpbmFfc3RyaW5nc2hhcmVfYWRkKHJlc3VsdC50aXRsZURpc3BsYXlTdHJpbmcoKS51dGY4KCku
ZGF0YSgpKTsKKyAgICBoaXRUZXN0LT5saW5rLnRhcmdldF9mcmFtZSA9IEVXS1ByaXZhdGU6Omtp
dEZyYW1lKHJlc3VsdC50YXJnZXRGcmFtZSgpKTsKIAotICAgIGhpdF90ZXN0LT5pbWFnZV91cmkg
PSBlaW5hX3N0cmluZ3NoYXJlX2FkZChyZXN1bHQuYWJzb2x1dGVJbWFnZVVSTCgpLnN0cmluZygp
LnV0ZjgoKS5kYXRhKCkpOwotICAgIGhpdF90ZXN0LT5tZWRpYV91cmkgPSBlaW5hX3N0cmluZ3No
YXJlX2FkZChyZXN1bHQuYWJzb2x1dGVNZWRpYVVSTCgpLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkp
OworICAgIGhpdFRlc3QtPmltYWdlX3VyaSA9IGVpbmFfc3RyaW5nc2hhcmVfYWRkKHJlc3VsdC5h
YnNvbHV0ZUltYWdlVVJMKCkuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgaGl0VGVzdC0+
bWVkaWFfdXJpID0gZWluYV9zdHJpbmdzaGFyZV9hZGQocmVzdWx0LmFic29sdXRlTWVkaWFVUkwo
KS5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKIAogICAgIGludCBjb250ZXh0ID0gRVdLX0hJVF9U
RVNUX1JFU1VMVF9DT05URVhUX0RPQ1VNRU5UOwogCkBAIC03MDgsMjggKzcwOCwyOCBAQCBFd2tf
SGl0X1Rlc3QqIGV3a19mcmFtZV9oaXRfdGVzdF9uZXcoY29uc3QgRXZhc19PYmplY3QqIGV3a0Zy
YW1lLCBpbnQgeCwgaW50IHkpCiAgICAgaWYgKHJlc3VsdC5pc0NvbnRlbnRFZGl0YWJsZSgpKQog
ICAgICAgICBjb250ZXh0IHw9IEVXS19ISVRfVEVTVF9SRVNVTFRfQ09OVEVYVF9FRElUQUJMRTsK
IAotICAgIGhpdF90ZXN0LT5jb250ZXh0ID0gc3RhdGljX2Nhc3Q8RXdrX0hpdF9UZXN0X1Jlc3Vs
dF9Db250ZXh0Pihjb250ZXh0KTsKKyAgICBoaXRUZXN0LT5jb250ZXh0ID0gc3RhdGljX2Nhc3Q8
RXdrX0hpdF9UZXN0X1Jlc3VsdF9Db250ZXh0Pihjb250ZXh0KTsKIAotICAgIHJldHVybiBoaXRf
dGVzdDsKKyAgICByZXR1cm4gaGl0VGVzdDsKIH0KIAogRWluYV9Cb29sCiBld2tfZnJhbWVfc2Ny
b2xsX2FkZChFdmFzX09iamVjdCogZXdrRnJhbWUsIGludCBkZWx0YVgsIGludCBkZWx0YVkpCiB7
Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBFSU5BX0ZBTFNF
KTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFSU5BX0ZB
TFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLT52aWV3
KCksIEVJTkFfRkFMU0UpOwotICAgIHNkLT5mcmFtZS0+dmlldygpLT5zY3JvbGxCeShXZWJDb3Jl
OjpJbnRTaXplKGRlbHRhWCwgZGVsdGFZKSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRV
Uk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUsIEVJTkFfRkFMU0UpOworICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmZyYW1lLT52aWV3KCksIEVJTkFf
RkFMU0UpOworICAgIHNtYXJ0RGF0YS0+ZnJhbWUtPnZpZXcoKS0+c2Nyb2xsQnkoV2ViQ29yZTo6
SW50U2l6ZShkZWx0YVgsIGRlbHRhWSkpOwogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKIEVp
bmFfQm9vbAogZXdrX2ZyYW1lX3Njcm9sbF9zZXQoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBpbnQg
eCwgaW50IHkpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNk
LCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZy
YW1lLCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2Qt
PmZyYW1lLT52aWV3KCksIEVJTkFfRkFMU0UpOwotICAgIHNkLT5mcmFtZS0+dmlldygpLT5zZXRT
Y3JvbGxQb3NpdGlvbihXZWJDb3JlOjpJbnRQb2ludCh4LCB5KSk7CisgICAgRVdLX0ZSQU1FX1NE
X0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUsIEVJTkFfRkFMU0Up
OworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmZyYW1lLT52
aWV3KCksIEVJTkFfRkFMU0UpOworICAgIHNtYXJ0RGF0YS0+ZnJhbWUtPnZpZXcoKS0+c2V0U2Ny
b2xsUG9zaXRpb24oV2ViQ29yZTo6SW50UG9pbnQoeCwgeSkpOwogICAgIHJldHVybiBFSU5BX1RS
VUU7CiB9CiAKQEAgLTc0MCwxMCArNzQwLDEwIEBAIGV3a19mcmFtZV9zY3JvbGxfc2l6ZV9nZXQo
Y29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBpbnQqIHdpZHRoLCBpbnQqIGhlaWdodCkKICAg
ICAgICAgKndpZHRoID0gMDsKICAgICBpZiAoaGVpZ2h0KQogICAgICAgICAqaGVpZ2h0ID0gMDsK
LSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFfRkFMU0Up
OwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUsIEVJTkFfRkFM
U0UpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJhbWUtPnZpZXco
KSwgRUlOQV9GQUxTRSk7Ci0gICAgV2ViQ29yZTo6SW50UG9pbnQgcG9pbnQgPSBzZC0+ZnJhbWUt
PnZpZXcoKS0+bWF4aW11bVNjcm9sbFBvc2l0aW9uKCk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9P
Ul9SRVRVUk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZF
VFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUsIEVJTkFfRkFMU0UpOworICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmZyYW1lLT52aWV3KCks
IEVJTkFfRkFMU0UpOworICAgIFdlYkNvcmU6OkludFBvaW50IHBvaW50ID0gc21hcnREYXRhLT5m
cmFtZS0+dmlldygpLT5tYXhpbXVtU2Nyb2xsUG9zaXRpb24oKTsKICAgICBpZiAod2lkdGgpCiAg
ICAgICAgICp3aWR0aCA9IHBvaW50LngoKTsKICAgICBpZiAoaGVpZ2h0KQpAQCAtNzU4LDEwICs3
NTgsMTAgQEAgZXdrX2ZyYW1lX3Njcm9sbF9wb3NfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tG
cmFtZSwgaW50KiB4LCBpbnQqIHkpCiAgICAgICAgICp4ID0gMDsKICAgICBpZiAoeSkKICAgICAg
ICAgKnkgPSAwOwotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwg
RUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFt
ZSwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5m
cmFtZS0+dmlldygpLCBFSU5BX0ZBTFNFKTsKLSAgICBXZWJDb3JlOjpJbnRQb2ludCBwb3MgPSBz
ZC0+ZnJhbWUtPnZpZXcoKS0+c2Nyb2xsUG9zaXRpb24oKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VU
X09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5mcmFtZSwgRUlOQV9GQUxTRSk7Cisg
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUtPnZpZXco
KSwgRUlOQV9GQUxTRSk7CisgICAgV2ViQ29yZTo6SW50UG9pbnQgcG9zID0gc21hcnREYXRhLT5m
cmFtZS0+dmlldygpLT5zY3JvbGxQb3NpdGlvbigpOwogICAgIGlmICh4KQogICAgICAgICAqeCA9
IHBvcy54KCk7CiAgICAgaWYgKHkpCkBAIC03NzksMTAgKzc3OSwxMCBAQCBFaW5hX0Jvb2wgZXdr
X2ZyYW1lX3Zpc2libGVfY29udGVudF9nZW9tZXRyeV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3
a0ZyYW1lLCBFaQogICAgICAgICAqd2lkdGggPSAwOwogICAgIGlmIChoZWlnaHQpCiAgICAgICAg
ICpoZWlnaHQgPSAwOwotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBz
ZCwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5m
cmFtZSwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNk
LT5mcmFtZS0+dmlldygpLCBFSU5BX0ZBTFNFKTsKLSAgICBXZWJDb3JlOjpJbnRSZWN0IHJlY3Qg
PSBzZC0+ZnJhbWUtPnZpZXcoKS0+dmlzaWJsZUNvbnRlbnRSZWN0KGluY2x1ZGVTY3JvbGxiYXJz
KTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRhLCBF
SU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRh
LT5mcmFtZSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFM
KHNtYXJ0RGF0YS0+ZnJhbWUtPnZpZXcoKSwgRUlOQV9GQUxTRSk7CisgICAgV2ViQ29yZTo6SW50
UmVjdCByZWN0ID0gc21hcnREYXRhLT5mcmFtZS0+dmlldygpLT52aXNpYmxlQ29udGVudFJlY3Qo
aW5jbHVkZVNjcm9sbGJhcnMpOwogICAgIGlmICh4KQogICAgICAgICAqeCA9IHJlY3QueCgpOwog
ICAgIGlmICh5KQpAQCAtNzk2LDI2ICs3OTYsMjYgQEAgRWluYV9Cb29sIGV3a19mcmFtZV92aXNp
YmxlX2NvbnRlbnRfZ2VvbWV0cnlfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgRWkK
IAogRWluYV9Cb29sIGV3a19mcmFtZV9wYWludF9mdWxsX2dldChjb25zdCBFdmFzX09iamVjdCog
ZXdrRnJhbWUpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNk
LCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZy
YW1lLCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2Qt
PmZyYW1lLT52aWV3KCksIEVJTkFfRkFMU0UpOwotICAgIHJldHVybiBzZC0+ZnJhbWUtPnZpZXco
KS0+cGFpbnRzRW50aXJlQ29udGVudHMoKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVS
Tihld2tGcmFtZSwgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5mcmFtZSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUtPnZpZXcoKSwgRUlOQV9G
QUxTRSk7CisgICAgcmV0dXJuIHNtYXJ0RGF0YS0+ZnJhbWUtPnZpZXcoKS0+cGFpbnRzRW50aXJl
Q29udGVudHMoKTsKIH0KIAogdm9pZCBld2tfZnJhbWVfcGFpbnRfZnVsbF9zZXQoRXZhc19PYmpl
Y3QqIGV3a0ZyYW1lLCBFaW5hX0Jvb2wgZmxhZykKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09S
X1JFVFVSTihld2tGcmFtZSwgc2QpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNk
LT5mcmFtZSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmZyYW1lLT52aWV3
KCkpOwotICAgIHNkLT5mcmFtZS0+dmlldygpLT5zZXRQYWludHNFbnRpcmVDb250ZW50cyhmbGFn
KTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRhKTsK
KyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmZyYW1lKTsKKyAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmZyYW1lLT52aWV3KCkpOworICAg
IHNtYXJ0RGF0YS0+ZnJhbWUtPnZpZXcoKS0+c2V0UGFpbnRzRW50aXJlQ29udGVudHMoZmxhZyk7
CiB9CiAKIEVpbmFfQm9vbCBld2tfZnJhbWVfZmVlZF9mb2N1c19pbihFdmFzX09iamVjdCogZXdr
RnJhbWUpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCBF
SU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1l
LCBFSU5BX0ZBTFNFKTsKLSAgICBXZWJDb3JlOjpGb2N1c0NvbnRyb2xsZXIqIGMgPSBzZC0+ZnJh
bWUtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCk7Ci0gICAgYy0+c2V0Rm9jdXNlZEZyYW1lKHNk
LT5mcmFtZSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNtYXJ0
RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNt
YXJ0RGF0YS0+ZnJhbWUsIEVJTkFfRkFMU0UpOworICAgIFdlYkNvcmU6OkZvY3VzQ29udHJvbGxl
ciogYyA9IHNtYXJ0RGF0YS0+ZnJhbWUtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCk7CisgICAg
Yy0+c2V0Rm9jdXNlZEZyYW1lKHNtYXJ0RGF0YS0+ZnJhbWUpOwogICAgIHJldHVybiBFSU5BX1RS
VUU7CiB9CiAKQEAgLTgyOCw4NyArODI4LDg3IEBAIEVpbmFfQm9vbCBld2tfZnJhbWVfZmVlZF9m
b2N1c19vdXQoRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogCiBFaW5hX0Jvb2wgZXdrX2ZyYW1lX2Zl
ZWRfbW91c2Vfd2hlZWwoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBjb25zdCBFdmFzX0V2ZW50X01v
dXNlX1doZWVsKiB3aGVlbEV2ZW50KQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJO
KGV3a0ZyYW1lLCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk5fVkFMKHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9S
RVRVUk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUsIEVJTkFfRkFMU0UpOwogICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh3aGVlbEV2ZW50LCBFSU5BX0ZBTFNFKTsKIAot
ICAgIFdlYkNvcmU6OkZyYW1lVmlldyogdmlldyA9IHNkLT5mcmFtZS0+dmlldygpOworICAgIFdl
YkNvcmU6OkZyYW1lVmlldyogdmlldyA9IHNtYXJ0RGF0YS0+ZnJhbWUtPnZpZXcoKTsKICAgICBE
QkcoImV3a0ZyYW1lPSVwLCB2aWV3PSVwLCBkaXJlY3Rpb249JWQsIHo9JWQsIHBvcz0lZCwlZCIs
CiAgICAgICAgIGV3a0ZyYW1lLCB2aWV3LCB3aGVlbEV2ZW50LT5kaXJlY3Rpb24sIHdoZWVsRXZl
bnQtPnosIHdoZWVsRXZlbnQtPmNhbnZhcy54LCB3aGVlbEV2ZW50LT5jYW52YXMueSk7CiAgICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHZpZXcsIEVJTkFfRkFMU0UpOwogCiAgICAg
V2ViQ29yZTo6UGxhdGZvcm1XaGVlbEV2ZW50IGV2ZW50KHdoZWVsRXZlbnQpOwotICAgIHJldHVy
biBzZC0+ZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5oYW5kbGVXaGVlbEV2ZW50KGV2ZW50KTsKKyAg
ICByZXR1cm4gc21hcnREYXRhLT5mcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmhhbmRsZVdoZWVsRXZl
bnQoZXZlbnQpOwogfQogCiBFaW5hX0Jvb2wgZXdrX2ZyYW1lX2ZlZWRfbW91c2VfZG93bihFdmFz
X09iamVjdCogZXdrRnJhbWUsIGNvbnN0IEV2YXNfRXZlbnRfTW91c2VfRG93biogZG93bkV2ZW50
KQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgRUlOQV9G
QUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwgRUlO
QV9GQUxTRSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNtYXJ0
RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNt
YXJ0RGF0YS0+ZnJhbWUsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOX1ZBTChkb3duRXZlbnQsIEVJTkFfRkFMU0UpOwogCi0gICAgV2ViQ29yZTo6RnJhbWVWaWV3
KiB2aWV3ID0gc2QtPmZyYW1lLT52aWV3KCk7CisgICAgV2ViQ29yZTo6RnJhbWVWaWV3KiB2aWV3
ID0gc21hcnREYXRhLT5mcmFtZS0+dmlldygpOwogICAgIERCRygiZXdrRnJhbWU9JXAsIHZpZXc9
JXAsIGJ1dHRvbj0lZCwgcG9zPSVkLCVkIiwKICAgICAgICAgZXdrRnJhbWUsIHZpZXcsIGRvd25F
dmVudC0+YnV0dG9uLCBkb3duRXZlbnQtPmNhbnZhcy54LCBkb3duRXZlbnQtPmNhbnZhcy55KTsK
ICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodmlldywgRUlOQV9GQUxTRSk7CiAK
ICAgICBFdmFzX0Nvb3JkIHgsIHk7Ci0gICAgZXZhc19vYmplY3RfZ2VvbWV0cnlfZ2V0KHNkLT52
aWV3LCAmeCwgJnksIDAsIDApOworICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldChzbWFydERh
dGEtPnZpZXcsICZ4LCAmeSwgMCwgMCk7CiAKICAgICBXZWJDb3JlOjpQbGF0Zm9ybU1vdXNlRXZl
bnQgZXZlbnQoZG93bkV2ZW50LCBXZWJDb3JlOjpJbnRQb2ludCh4LCB5KSk7Ci0gICAgcmV0dXJu
IHNkLT5mcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmhhbmRsZU1vdXNlUHJlc3NFdmVudChldmVudCk7
CisgICAgcmV0dXJuIHNtYXJ0RGF0YS0+ZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5oYW5kbGVNb3Vz
ZVByZXNzRXZlbnQoZXZlbnQpOwogfQogCiBFaW5hX0Jvb2wgZXdrX2ZyYW1lX2ZlZWRfbW91c2Vf
dXAoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBjb25zdCBFdmFzX0V2ZW50X01vdXNlX1VwKiB1cEV2
ZW50KQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgRUlO
QV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFtZSwg
RUlOQV9GQUxTRSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNt
YXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFM
KHNtYXJ0RGF0YS0+ZnJhbWUsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOX1ZBTCh1cEV2ZW50LCBFSU5BX0ZBTFNFKTsKIAotICAgIFdlYkNvcmU6OkZyYW1lVmll
dyogdmlldyA9IHNkLT5mcmFtZS0+dmlldygpOworICAgIFdlYkNvcmU6OkZyYW1lVmlldyogdmll
dyA9IHNtYXJ0RGF0YS0+ZnJhbWUtPnZpZXcoKTsKICAgICBEQkcoImV3a0ZyYW1lPSVwLCB2aWV3
PSVwLCBidXR0b249JWQsIHBvcz0lZCwlZCIsCiAgICAgICAgIGV3a0ZyYW1lLCB2aWV3LCB1cEV2
ZW50LT5idXR0b24sIHVwRXZlbnQtPmNhbnZhcy54LCB1cEV2ZW50LT5jYW52YXMueSk7CiAgICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHZpZXcsIEVJTkFfRkFMU0UpOwogCiAgICAg
RXZhc19Db29yZCB4LCB5OwotICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldChzZC0+dmlldywg
JngsICZ5LCAwLCAwKTsKKyAgICBldmFzX29iamVjdF9nZW9tZXRyeV9nZXQoc21hcnREYXRhLT52
aWV3LCAmeCwgJnksIDAsIDApOwogCiAgICAgV2ViQ29yZTo6UGxhdGZvcm1Nb3VzZUV2ZW50IGV2
ZW50KHVwRXZlbnQsIFdlYkNvcmU6OkludFBvaW50KHgsIHkpKTsKLSAgICByZXR1cm4gc2QtPmZy
YW1lLT5ldmVudEhhbmRsZXIoKS0+aGFuZGxlTW91c2VSZWxlYXNlRXZlbnQoZXZlbnQpOworICAg
IHJldHVybiBzbWFydERhdGEtPmZyYW1lLT5ldmVudEhhbmRsZXIoKS0+aGFuZGxlTW91c2VSZWxl
YXNlRXZlbnQoZXZlbnQpOwogfQogCiBFaW5hX0Jvb2wgZXdrX2ZyYW1lX2ZlZWRfbW91c2VfbW92
ZShFdmFzX09iamVjdCogZXdrRnJhbWUsIGNvbnN0IEV2YXNfRXZlbnRfTW91c2VfTW92ZSogbW92
ZUV2ZW50KQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwg
RUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFt
ZSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUs
IHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5f
VkFMKHNtYXJ0RGF0YS0+ZnJhbWUsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOX1ZBTChtb3ZlRXZlbnQsIEVJTkFfRkFMU0UpOwogCi0gICAgV2ViQ29yZTo6RnJh
bWVWaWV3KiB2aWV3ID0gc2QtPmZyYW1lLT52aWV3KCk7CisgICAgV2ViQ29yZTo6RnJhbWVWaWV3
KiB2aWV3ID0gc21hcnREYXRhLT5mcmFtZS0+dmlldygpOwogICAgIERCRygiZXdrRnJhbWU9JXAs
IHZpZXc9JXAsIHBvczogb2xkPSVkLCVkLCBuZXc9JWQsJWQsIGJ1dHRvbnM9JWQiLAogICAgICAg
ICBld2tGcmFtZSwgdmlldywgbW92ZUV2ZW50LT5jdXIuY2FudmFzLngsIG1vdmVFdmVudC0+Y3Vy
LmNhbnZhcy55LAogICAgICAgICBtb3ZlRXZlbnQtPnByZXYuY2FudmFzLngsIG1vdmVFdmVudC0+
cHJldi5jYW52YXMueSwgbW92ZUV2ZW50LT5idXR0b25zKTsKICAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTl9WQUwodmlldywgRUlOQV9GQUxTRSk7CiAKICAgICBFdmFzX0Nvb3JkIHgsIHk7
Ci0gICAgZXZhc19vYmplY3RfZ2VvbWV0cnlfZ2V0KHNkLT52aWV3LCAmeCwgJnksIDAsIDApOwor
ICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldChzbWFydERhdGEtPnZpZXcsICZ4LCAmeSwgMCwg
MCk7CiAKICAgICBXZWJDb3JlOjpQbGF0Zm9ybU1vdXNlRXZlbnQgZXZlbnQobW92ZUV2ZW50LCBX
ZWJDb3JlOjpJbnRQb2ludCh4LCB5KSk7Ci0gICAgcmV0dXJuIHNkLT5mcmFtZS0+ZXZlbnRIYW5k
bGVyKCktPm1vdXNlTW92ZWQoZXZlbnQpOworICAgIHJldHVybiBzbWFydERhdGEtPmZyYW1lLT5l
dmVudEhhbmRsZXIoKS0+bW91c2VNb3ZlZChldmVudCk7CiB9CiAKIEVpbmFfQm9vbCBld2tfZnJh
bWVfZmVlZF90b3VjaF9ldmVudChFdmFzX09iamVjdCogZXdrRnJhbWUsIEV3a19Ub3VjaF9FdmVu
dF9UeXBlIGFjdGlvbiwgRWluYV9MaXN0KiBwb2ludHMsIGludCBtZXRhU3RhdGUpCiB7Ci0gICAg
RWluYV9Cb29sIHJldCA9IEVJTkFfRkFMU0U7CisgICAgRWluYV9Cb29sIHJlc3VsdCA9IEVJTkFf
RkFMU0U7CiAKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOX1ZBTChwb2ludHMsIEVJTkFfRkFMU0UpOwotICAgIEVXS19GUkFNRV9TRF9HRVQo
ZXdrRnJhbWUsIHNkKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUKGV3a0ZyYW1lLCBzbWFydERhdGEp
OwogCi0gICAgaWYgKCFzZCB8fCAhc2QtPmZyYW1lIHx8ICFld2tfdmlld19uZWVkX3RvdWNoX2V2
ZW50c19nZXQoc2QtPnZpZXcpKQorICAgIGlmICghc21hcnREYXRhIHx8ICFzbWFydERhdGEtPmZy
YW1lIHx8ICFld2tfdmlld19uZWVkX3RvdWNoX2V2ZW50c19nZXQoc21hcnREYXRhLT52aWV3KSkK
ICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CiAKICAgICBFdmFzX0Nvb3JkIHgsIHk7Ci0gICAg
ZXZhc19vYmplY3RfZ2VvbWV0cnlfZ2V0KHNkLT52aWV3LCAmeCwgJnksIDAsIDApOworICAgIGV2
YXNfb2JqZWN0X2dlb21ldHJ5X2dldChzbWFydERhdGEtPnZpZXcsICZ4LCAmeSwgMCwgMCk7CiAK
ICAgICBXZWJDb3JlOjpUb3VjaEV2ZW50VHlwZSB0eXBlID0gV2ViQ29yZTo6VG91Y2hTdGFydDsK
ICAgICBzd2l0Y2ggKGFjdGlvbikgewpAQCAtOTI4LDEwICs5MjgsMTAgQEAgRWluYV9Cb29sIGV3
a19mcmFtZV9mZWVkX3RvdWNoX2V2ZW50KEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgRXdrX1RvdWNo
X0V2ZW50X1R5cGUKICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CiAgICAgfQogCi0gICAgV2Vi
Q29yZTo6UGxhdGZvcm1Ub3VjaEV2ZW50IHRlKHBvaW50cywgV2ViQ29yZTo6SW50UG9pbnQoeCwg
eSksIHR5cGUsIG1ldGFTdGF0ZSk7Ci0gICAgcmV0ID0gc2QtPmZyYW1lLT5ldmVudEhhbmRsZXIo
KS0+aGFuZGxlVG91Y2hFdmVudCh0ZSk7CisgICAgV2ViQ29yZTo6UGxhdGZvcm1Ub3VjaEV2ZW50
IHRvdWNoRXZlbnQocG9pbnRzLCBXZWJDb3JlOjpJbnRQb2ludCh4LCB5KSwgdHlwZSwgbWV0YVN0
YXRlKTsKKyAgICByZXN1bHQgPSBzbWFydERhdGEtPmZyYW1lLT5ldmVudEhhbmRsZXIoKS0+aGFu
ZGxlVG91Y2hFdmVudCh0b3VjaEV2ZW50KTsKICNlbmRpZgotICAgIHJldHVybiByZXQ7CisgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAogc3RhdGljIGlubGluZSBFaW5hX0Jvb2wgX2V3a19mcmFtZV9o
YW5kbGVfa2V5X3Njcm9sbGluZyhXZWJDb3JlOjpGcmFtZSogZnJhbWUsIGNvbnN0IFdlYkNvcmU6
OlBsYXRmb3JtS2V5Ym9hcmRFdmVudCYga2V5RXZlbnQpCkBAIC0xMDAwLDM5ICsxMDAwLDM5IEBA
IHN0YXRpYyBpbmxpbmUgRWluYV9Cb29sIF9ld2tfZnJhbWVfaGFuZGxlX2tleV9zY3JvbGxpbmco
V2ViQ29yZTo6RnJhbWUqIGZyYW1lLCBjCiAKIEVpbmFfQm9vbCBld2tfZnJhbWVfZmVlZF9rZXlf
ZG93bihFdmFzX09iamVjdCogZXdrRnJhbWUsIGNvbnN0IEV2YXNfRXZlbnRfS2V5X0Rvd24qIGRv
d25FdmVudCkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2Qs
IEVJTkFfRkFMU0UpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+ZnJh
bWUsIEVJTkFfRkFMU0UpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1l
LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJO
X1ZBTChzbWFydERhdGEtPmZyYW1lLCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTl9WQUwoZG93bkV2ZW50LCBFSU5BX0ZBTFNFKTsKIAogICAgIERCRygiZXdrRnJh
bWU9JXAga2V5bmFtZT0lcyAoa2V5PSVzLCBzdHJpbmc9JXMpIiwKICAgICAgICAgZXdrRnJhbWUs
IGRvd25FdmVudC0+a2V5bmFtZSwgZG93bkV2ZW50LT5rZXkgPyBkb3duRXZlbnQtPmtleSA6ICIi
LCBkb3duRXZlbnQtPnN0cmluZyA/IGRvd25FdmVudC0+c3RyaW5nIDogIiIpOwogCiAgICAgV2Vi
Q29yZTo6UGxhdGZvcm1LZXlib2FyZEV2ZW50IGV2ZW50KGRvd25FdmVudCk7Ci0gICAgaWYgKHNk
LT5mcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmtleUV2ZW50KGV2ZW50KSkKKyAgICBpZiAoc21hcnRE
YXRhLT5mcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmtleUV2ZW50KGV2ZW50KSkKICAgICAgICAgcmV0
dXJuIEVJTkFfVFJVRTsKIAotICAgIHJldHVybiBfZXdrX2ZyYW1lX2hhbmRsZV9rZXlfc2Nyb2xs
aW5nKHNkLT5mcmFtZSwgZXZlbnQpOworICAgIHJldHVybiBfZXdrX2ZyYW1lX2hhbmRsZV9rZXlf
c2Nyb2xsaW5nKHNtYXJ0RGF0YS0+ZnJhbWUsIGV2ZW50KTsKIH0KIAogRWluYV9Cb29sIGV3a19m
cmFtZV9mZWVkX2tleV91cChFdmFzX09iamVjdCogZXdrRnJhbWUsIGNvbnN0IEV2YXNfRXZlbnRf
S2V5X1VwKiB1cEV2ZW50KQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0Zy
YW1lLCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFM
KHNkLT5mcmFtZSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrRnJhbWUsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOX1ZBTCh1cEV2ZW50LCBFSU5BX0ZBTFNFKTsKIAogICAgIERCRygi
ZXdrRnJhbWU9JXAga2V5bmFtZT0lcyAoa2V5PSVzLCBzdHJpbmc9JXMpIiwKICAgICAgICAgZXdr
RnJhbWUsIHVwRXZlbnQtPmtleW5hbWUsIHVwRXZlbnQtPmtleSA/IHVwRXZlbnQtPmtleSA6ICIi
LCB1cEV2ZW50LT5zdHJpbmcgPyB1cEV2ZW50LT5zdHJpbmcgOiAiIik7CiAKICAgICBXZWJDb3Jl
OjpQbGF0Zm9ybUtleWJvYXJkRXZlbnQgZXZlbnQodXBFdmVudCk7Ci0gICAgcmV0dXJuIHNkLT5m
cmFtZS0+ZXZlbnRIYW5kbGVyKCktPmtleUV2ZW50KGV2ZW50KTsKKyAgICByZXR1cm4gc21hcnRE
YXRhLT5mcmFtZS0+ZXZlbnRIYW5kbGVyKCktPmtleUV2ZW50KGV2ZW50KTsKIH0KIAogRXdrX1Rl
eHRfU2VsZWN0aW9uX1R5cGUgZXdrX2ZyYW1lX3RleHRfc2VsZWN0aW9uX3R5cGVfZ2V0KGNvbnN0
IEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVS
Tihld2tGcmFtZSwgc2QsIEVXS19URVhUX1NFTEVDVElPTl9OT05FKTsKLSAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCBFV0tfVEVYVF9TRUxFQ1RJT05fTk9ORSk7
CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSwgRVdL
X1RFWFRfU0VMRUNUSU9OX05PTkUpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZB
TChzbWFydERhdGEtPmZyYW1lLCBFV0tfVEVYVF9TRUxFQ1RJT05fTk9ORSk7CiAKLSAgICBXZWJD
b3JlOjpGcmFtZVNlbGVjdGlvbiogY29udHJvbGxlciA9IHNkLT5mcmFtZS0+c2VsZWN0aW9uKCk7
CisgICAgV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb24qIGNvbnRyb2xsZXIgPSBzbWFydERhdGEtPmZy
YW1lLT5zZWxlY3Rpb24oKTsKICAgICBpZiAoIWNvbnRyb2xsZXIpCiAgICAgICAgIHJldHVybiBF
V0tfVEVYVF9TRUxFQ1RJT05fTk9ORTsKIApAQCAtMTA3NSwxOCArMTA3NSwxOCBAQCBFdmFzX09i
amVjdCogZXdrX2ZyYW1lX2FkZChFdmFzKiBjYW52YXMpCiAgKi8KIEVpbmFfQm9vbCBld2tfZnJh
bWVfaW5pdChFdmFzX09iamVjdCogZXdrRnJhbWUsIEV2YXNfT2JqZWN0KiB2aWV3LCBXZWJDb3Jl
OjpGcmFtZSogZnJhbWUpCiB7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJh
bWUsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBpZiAoIXNkLT5mcmFtZSkgewotICAgICAgICBXZWJD
b3JlOjpGcmFtZUxvYWRlckNsaWVudEVmbCogZmxjID0gX2V3a19mcmFtZV9sb2FkZXJfZWZsX2dl
dChmcmFtZSk7Ci0gICAgICAgIGZsYy0+c2V0V2ViRnJhbWUoZXdrRnJhbWUpOwotICAgICAgICBz
ZC0+ZnJhbWUgPSBmcmFtZTsKLSAgICAgICAgc2QtPnZpZXcgPSB2aWV3OworICAgIEVXS19GUkFN
RV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAg
IGlmICghc21hcnREYXRhLT5mcmFtZSkgeworICAgICAgICBXZWJDb3JlOjpGcmFtZUxvYWRlckNs
aWVudEVmbCogZnJhbWVMb2FkZXJDbGllbnQgPSBfZXdrX2ZyYW1lX2xvYWRlcl9lZmxfZ2V0KGZy
YW1lKTsKKyAgICAgICAgZnJhbWVMb2FkZXJDbGllbnQtPnNldFdlYkZyYW1lKGV3a0ZyYW1lKTsK
KyAgICAgICAgc21hcnREYXRhLT5mcmFtZSA9IGZyYW1lOworICAgICAgICBzbWFydERhdGEtPnZp
ZXcgPSB2aWV3OwogICAgICAgICBmcmFtZS0+aW5pdCgpOwogICAgICAgICByZXR1cm4gRUlOQV9U
UlVFOwogICAgIH0KIAogICAgIEVSUigiZnJhbWUgJXAgYWxyZWFkeSBzZXQgZm9yICVwLCBpZ25v
cmVkIG5ldyAlcCIsCi0gICAgICAgIHNkLT5mcmFtZSwgZXdrRnJhbWUsIGZyYW1lKTsKKyAgICAg
ICAgc21hcnREYXRhLT5mcmFtZSwgZXdrRnJhbWUsIGZyYW1lKTsKICAgICByZXR1cm4gRUlOQV9G
QUxTRTsKIH0KIApAQCAtMTA5Nyw0NCArMTA5Nyw0NCBAQCBFaW5hX0Jvb2wgZXdrX2ZyYW1lX2lu
aXQoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBFdmFzX09iamVjdCogdmlldywgV2ViQ29yZTo6RnJh
bQogICovCiBFaW5hX0Jvb2wgZXdrX2ZyYW1lX2NoaWxkX2FkZChFdmFzX09iamVjdCogZXdrRnJh
bWUsIFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpGcmFtZT4gY2hpbGQsIGNvbnN0IFdURjo6U3Ry
aW5nJiBuYW1lLCBjb25zdCBXZWJDb3JlOjpLVVJMJiB1cmwsIGNvbnN0IFdURjo6U3RyaW5nJiBy
ZWZlcnJlcikKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2Qs
IDApOwotICAgIGNoYXIgYnVmWzI1Nl07CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrRnJhbWUsIHNtYXJ0RGF0YSwgMCk7CisgICAgY2hhciBidWZmZXJbMjU2XTsKICAgICBFdmFz
X09iamVjdCogZnJhbWU7Ci0gICAgV2ViQ29yZTo6RnJhbWUqIGNmOworICAgIFdlYkNvcmU6OkZy
YW1lKiBjb3JlRnJhbWU7CiAKLSAgICBmcmFtZSA9IGV3a19mcmFtZV9hZGQoc2QtPmJhc2UuZXZh
cyk7CisgICAgZnJhbWUgPSBld2tfZnJhbWVfYWRkKHNtYXJ0RGF0YS0+YmFzZS5ldmFzKTsKICAg
ICBpZiAoIWZyYW1lKSB7CiAgICAgICAgIEVSUigiQ291bGQgbm90IGNyZWF0ZSBld2tfZnJhbWUg
b2JqZWN0LiIpOwogICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKICAgICB9CiAKLSAgICBjZiA9
IGNoaWxkLmdldCgpOwotICAgIGlmIChjZi0+dHJlZSgpKQotICAgICAgICBjZi0+dHJlZSgpLT5z
ZXROYW1lKG5hbWUpOworICAgIGNvcmVGcmFtZSA9IGNoaWxkLmdldCgpOworICAgIGlmIChjb3Jl
RnJhbWUtPnRyZWUoKSkKKyAgICAgICAgY29yZUZyYW1lLT50cmVlKCktPnNldE5hbWUobmFtZSk7
CiAgICAgZWxzZQogICAgICAgICBFUlIoIm5vIHRyZWUgZm9yIGNoaWxkIG9iamVjdCIpOwotICAg
IHNkLT5mcmFtZS0+dHJlZSgpLT5hcHBlbmRDaGlsZChjaGlsZCk7CisgICAgc21hcnREYXRhLT5m
cmFtZS0+dHJlZSgpLT5hcHBlbmRDaGlsZChjaGlsZCk7CiAKLSAgICBpZiAoIWV3a19mcmFtZV9p
bml0KGZyYW1lLCBzZC0+dmlldywgY2YpKSB7CisgICAgaWYgKCFld2tfZnJhbWVfaW5pdChmcmFt
ZSwgc21hcnREYXRhLT52aWV3LCBjb3JlRnJhbWUpKSB7CiAgICAgICAgIGV2YXNfb2JqZWN0X2Rl
bChmcmFtZSk7CiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwogICAgIH0KLSAgICBzbnByaW50
ZihidWYsIHNpemVvZihidWYpLCAiRVdLX0ZyYW1lOmNoaWxkLyVzIiwgbmFtZS51dGY4KCkuZGF0
YSgpKTsKLSAgICBldmFzX29iamVjdF9uYW1lX3NldChmcmFtZSwgYnVmKTsKKyAgICBzbnByaW50
ZihidWZmZXIsIHNpemVvZihidWZmZXIpLCAiRVdLX0ZyYW1lOmNoaWxkLyVzIiwgbmFtZS51dGY4
KCkuZGF0YSgpKTsKKyAgICBldmFzX29iamVjdF9uYW1lX3NldChmcmFtZSwgYnVmZmVyKTsKICAg
ICBldmFzX29iamVjdF9zbWFydF9tZW1iZXJfYWRkKGZyYW1lLCBld2tGcmFtZSk7CiAgICAgZXZh
c19vYmplY3Rfc2hvdyhmcmFtZSk7CiAKICAgICAvLyBUaGUgY3JlYXRpb24gb2YgdGhlIGZyYW1l
IG1heSBoYXZlIHJ1biBhcmJpdHJhcnkgSmF2YVNjcmlwdCB0aGF0IHJlbW92ZWQgaXQgZnJvbSB0
aGUgcGFnZSBhbHJlYWR5LgotICAgIGlmICghY2YtPnBhZ2UoKSkgeworICAgIGlmICghY29yZUZy
YW1lLT5wYWdlKCkpIHsKICAgICAgICAgZXZhc19vYmplY3RfZGVsKGZyYW1lKTsKICAgICAgICAg
cmV0dXJuIEVJTkFfVFJVRTsKICAgICB9CiAKLSAgICBzZC0+ZnJhbWUtPmxvYWRlcigpLT5sb2Fk
VVJMSW50b0NoaWxkRnJhbWUodXJsLCByZWZlcnJlciwgY2YpOworICAgIHNtYXJ0RGF0YS0+ZnJh
bWUtPmxvYWRlcigpLT5sb2FkVVJMSW50b0NoaWxkRnJhbWUodXJsLCByZWZlcnJlciwgY29yZUZy
YW1lKTsKIAogICAgIC8vIFRoZSBmcmFtZSdzIG9ubG9hZCBoYW5kbGVyIG1heSBoYXZlIHJlbW92
ZWQgaXQgZnJvbSB0aGUgZG9jdW1lbnQuCiAgICAgLy8gU2VlIGZhc3QvZG9tL251bGwtcGFnZS1z
aG93LW1vZGFsLWRpYWxvZy1jcmFzaC5odG1sIGZvciBhbiBleGFtcGxlLgotICAgIGlmICghY2Yt
PnRyZWUoKS0+cGFyZW50KCkpIHsKKyAgICBpZiAoIWNvcmVGcmFtZS0+dHJlZSgpLT5wYXJlbnQo
KSkgewogICAgICAgICBldmFzX29iamVjdF9kZWwoZnJhbWUpOwogICAgICAgICByZXR1cm4gRUlO
QV9UUlVFOwogICAgIH0KQEAgLTExNDcsMTcgKzExNDcsMTcgQEAgRWluYV9Cb29sIGV3a19mcmFt
ZV9jaGlsZF9hZGQoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBXVEY6OlBhc3NSZWZQdHI8V2ViQ29y
ZTo6RnIKICAqIEBpbnRlcm5hbAogICogQ2hhbmdlIHRoZSBld2sgdmlldyB0aGlzIGZyYW1lIGlz
IGFzc29jaWF0ZWQgd2l0aC4KICAqCi0gKiBAcGFyYW0gbyBUaGUgZXdrIGZyYW1lIHRvIGFjdCB1
cG9uLgorICogQHBhcmFtIGV3a0ZyYW1lIFRoZSBld2sgZnJhbWUgdG8gYWN0IHVwb24uCiAgKiBA
cGFyYW0gbmV3UGFyZW50IFRoZSBuZXcgdmlldyB0aGF0IHdpbGwgYmUgc2V0IGFzIHRoZSBwYXJl
bnQgb2YgdGhlIGZyYW1lLgogICovCiB2b2lkIGV3a19mcmFtZV92aWV3X3NldChFdmFzX09iamVj
dCogZXdrRnJhbWUsIEV2YXNfT2JqZWN0KiBuZXdQYXJlbnQpCiB7Ci0gICAgRVdLX0ZSQU1FX1NE
X0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JF
VFVSTihld2tGcmFtZSwgc21hcnREYXRhKTsKIAogICAgIGV2YXNfb2JqZWN0X3NtYXJ0X21lbWJl
cl9kZWwoZXdrRnJhbWUpOwogICAgIGV2YXNfb2JqZWN0X3NtYXJ0X21lbWJlcl9hZGQoZXdrRnJh
bWUsIG5ld1BhcmVudCk7CiAKLSAgICBzZC0+dmlldyA9IG5ld1BhcmVudDsKKyAgICBzbWFydERh
dGEtPnZpZXcgPSBuZXdQYXJlbnQ7CiB9CiAKIC8qKgpAQCAtMTE2Nyw4ICsxMTY3LDggQEAgdm9p
ZCBld2tfZnJhbWVfdmlld19zZXQoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBFdmFzX09iamVjdCog
bmV3UGFyZW50KQogdm9pZCBld2tfZnJhbWVfY29yZV9nb25lKEV2YXNfT2JqZWN0KiBld2tGcmFt
ZSkKIHsKICAgICBEQkcoImV3a0ZyYW1lPSVwIiwgZXdrRnJhbWUpOwotICAgIEVXS19GUkFNRV9T
RF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCk7Ci0gICAgc2QtPmZyYW1lID0gMDsKKyAgICBF
V0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRhKTsKKyAgICBzbWFy
dERhdGEtPmZyYW1lID0gMDsKIH0KIAogLyoqCkBAIC0xMTc2LDcgKzExNzYsNyBAQCB2b2lkIGV3
a19mcmFtZV9jb3JlX2dvbmUoRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogICogUmVwb3J0cyBhIHJl
c291cmNlIHdpbGwgYmUgcmVxdWVzdGVkLiBVc2VyIG1heSBvdmVycmlkZSBiZWhhdmlvciBvZiB3
ZWJraXQgYnkKICAqIGNoYW5naW5nIHZhbHVlcyBpbiBAcGFyYW0gcmVxdWVzdC4KICAqCi0gKiBA
cGFyYW0gbyBGcmFtZS4KKyAqIEBwYXJhbSBld2tGcmFtZSBGcmFtZS4KICAqIEBwYXJhbSByZXF1
ZXN0IFJlcXVlc3QgZGV0YWlscyB0aGF0IHVzZXIgbWF5IG92ZXJyaWRlLiBXaGVuZXZlciB2YWx1
ZXMgb24KICAqIHRoaXMgc3RydWN0IGNoYW5nZXMsIGl0IG11c3QgYmUgcHJvcGVybHkgbWFsbG9j
J2QgYXMgaXQgd2lsbCBiZSBmcmVlZAogICogYWZ0ZXJ3YXJkcy4KQEAgLTExOTIsNyArMTE5Miw3
IEBAIHZvaWQgZXdrX2ZyYW1lX3JlcXVlc3Rfd2lsbF9zZW5kKEV2YXNfT2JqZWN0KiBld2tGcmFt
ZSwgRXdrX0ZyYW1lX1Jlc291cmNlX1JlcXVlCiAgKiBAaW50ZXJuYWwKICAqIFJlcG9ydHMgdGhh
dCB0aGVyZSdzIGEgbmV3IHJlc291cmNlLgogICoKLSAqIEBwYXJhbSBvIEZyYW1lLgorICogQHBh
cmFtIGV3a0ZyYW1lIEZyYW1lLgogICogQHBhcmFtIHJlcXVlc3QgTmV3IHJlcXVlc3QgZGV0YWls
cy4gTm8gY2hhbmdlcyBhcmUgYWxsb3dlZCB0byBmaWVsZHMuCiAgKgogICogRW1pdHMgc2lnbmFs
OiAicmVzb3VyY2UscmVxdWVzdCxuZXciCkBAIC0xMjA2LDcgKzEyMDYsNyBAQCB2b2lkIGV3a19m
cmFtZV9yZXF1ZXN0X2Fzc2lnbl9pZGVudGlmaWVyKEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgY29u
c3QgRXdrX0ZyYW1lXwogICogQGludGVybmFsCiAgKiBSZXBvcnRzIHRoYXQgZmlyc3QgbmF2aWdh
dGlvbiBvY2N1cnJlZAogICoKLSAqIEBwYXJhbSBvIEZyYW1lLgorICogQHBhcmFtIGV3a0ZyYW1l
IEZyYW1lLgogICoKICAqIEVtaXRzIHNpZ25hbDogIm5hdmlnYXRpb24sZmlyc3QiCiAgKi8KQEAg
LTEyMTksNyArMTIxOSw3IEBAIHZvaWQgZXdrX2ZyYW1lX2RpZF9wZXJmb3JtX2ZpcnN0X25hdmln
YXRpb24oRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogICogQGludGVybmFsCiAgKiBSZXBvcnRzIGZy
YW1lIHdpbGwgYmUgc2F2ZWQgdG8gY3VycmVudCBzdGF0ZQogICoKLSAqIEBwYXJhbSBvIEZyYW1l
LgorICogQHBhcmFtIGV3a0ZyYW1lIEZyYW1lLgogICogQHBhcmFtIGl0ZW0gSGlzdG9yeSBpdGVt
IHRvIHNhdmUgZGV0YWlscyB0by4KICAqCiAgKiBFbWl0cyBzaWduYWw6ICJzdGF0ZSxzYXZlIgpA
QCAtMTIzNywyMiArMTIzNywyMiBAQCB2b2lkIGV3a19mcmFtZV92aWV3X3N0YXRlX3NhdmUoRXZh
c19PYmplY3QqIGV3a0ZyYW1lLCBXZWJDb3JlOjpIaXN0b3J5SXRlbSogaXRlbQogICovCiB2b2lk
IGV3a19mcmFtZV9sb2FkX3N0YXJ0ZWQoRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewotICAgIEV2
YXNfT2JqZWN0KiBtYWluX2ZyYW1lOworICAgIEV2YXNfT2JqZWN0KiBtYWluRnJhbWU7CiAgICAg
REJHKCJld2tGcmFtZT0lcCIsIGV3a0ZyYW1lKTsKICAgICBldmFzX29iamVjdF9zbWFydF9jYWxs
YmFja19jYWxsKGV3a0ZyYW1lLCAibG9hZCxzdGFydGVkIiwgMCk7Ci0gICAgRVdLX0ZSQU1FX1NE
X0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkKTsKLSAgICBld2tfdmlld19sb2FkX3N0YXJ0ZWQo
c2QtPnZpZXcpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzbWFy
dERhdGEpOworICAgIGV3a192aWV3X2xvYWRfc3RhcnRlZChzbWFydERhdGEtPnZpZXcpOwogCi0g
ICAgbWFpbl9mcmFtZSA9IGV3a192aWV3X2ZyYW1lX21haW5fZ2V0KHNkLT52aWV3KTsKLSAgICBp
ZiAobWFpbl9mcmFtZSA9PSBld2tGcmFtZSkKLSAgICAgICAgZXdrX3ZpZXdfZnJhbWVfbWFpbl9s
b2FkX3N0YXJ0ZWQoc2QtPnZpZXcpOworICAgIG1haW5GcmFtZSA9IGV3a192aWV3X2ZyYW1lX21h
aW5fZ2V0KHNtYXJ0RGF0YS0+dmlldyk7CisgICAgaWYgKG1haW5GcmFtZSA9PSBld2tGcmFtZSkK
KyAgICAgICAgZXdrX3ZpZXdfZnJhbWVfbWFpbl9sb2FkX3N0YXJ0ZWQoc21hcnREYXRhLT52aWV3
KTsKIH0KIAogLyoqCiAgKiBAaW50ZXJuYWwKICAqIFJlcG9ydHMgdGhlIGZyYW1lIHN0YXJ0ZWQg
cHJvdmlzaW9uYWwgbG9hZC4KICAqCi0gKiBAcGFyYW0gbyBGcmFtZS4KKyAqIEBwYXJhbSBld2tG
cmFtZSBGcmFtZS4KICAqCiAgKiBFbWl0cyBzaWduYWw6ICJsb2FkLHByb3Zpc2lvbmFsIiB3aXRo
IG5vIHBhcmFtZXRlcnMuCiAgKi8KQEAgLTEyNjUsNyArMTI2NSw3IEBAIHZvaWQgZXdrX2ZyYW1l
X2xvYWRfcHJvdmlzaW9uYWwoRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogICogQGludGVybmFsCiAg
KiBSZXBvcnRzIHRoZSBmcmFtZSBmaW5pc2hlZCBmaXJzdCBsYXlvdXQuCiAgKgotICogQHBhcmFt
IG8gRnJhbWUuCisgKiBAcGFyYW0gZXdrRnJhbWUgRnJhbWUuCiAgKgogICogRW1pdHMgc2lnbmFs
OiAibG9hZCxmaXJzdGxheW91dCxmaW5pc2hlZCIgd2l0aCBubyBwYXJhbWV0ZXJzLgogICovCkBA
IC0xMjc4LDcgKzEyNzgsNyBAQCB2b2lkIGV3a19mcmFtZV9sb2FkX2ZpcnN0bGF5b3V0X2Zpbmlz
aGVkKEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKICAqIEBpbnRlcm5hbAogICogUmVwb3J0cyB0aGUg
ZnJhbWUgZmluaXNoZWQgZmlyc3Qgbm9uIGVtcHR5IGxheW91dC4KICAqCi0gKiBAcGFyYW0gbyBG
cmFtZS4KKyAqIEBwYXJhbSBld2tGcmFtZSBGcmFtZS4KICAqCiAgKiBFbWl0cyBzaWduYWw6ICJs
b2FkLG5vbmVtcHR5bGF5b3V0LGZpbmlzaGVkIiB3aXRoIG5vIHBhcmFtZXRlcnMuCiAgKi8KQEAg
LTEyOTEsNyArMTI5MSw3IEBAIHZvaWQgZXdrX2ZyYW1lX2xvYWRfZmlyc3RsYXlvdXRfbm9uZW1w
dHlfZmluaXNoZWQoRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogICogQGludGVybmFsCiAgKiBSZXBv
cnRzIHRoZSBsb2FkaW5nIG9mIGEgZG9jdW1lbnQgaGFzIGZpbmlzaGVkIG9uIGZyYW1lLgogICoK
LSAqIEBwYXJhbSBvIEZyYW1lLgorICogQHBhcmFtIGV3a0ZyYW1lIEZyYW1lLgogICoKICAqIEVt
aXRzIHNpZ25hbDogImxvYWQsZG9jdW1lbnQsZmluaXNoZWQiIHdpdGggbm8gcGFyYW1ldGVycy4K
ICAqLwpAQCAtMTMxNCw3ICsxMzE0LDcgQEAgdm9pZCBld2tfZnJhbWVfbG9hZF9kb2N1bWVudF9m
aW5pc2hlZChFdmFzX09iamVjdCogZXdrRnJhbWUpCiAgKi8KIHZvaWQgZXdrX2ZyYW1lX2xvYWRf
ZmluaXNoZWQoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBjb25zdCBjaGFyKiBlcnJvckRvbWFpbiwg
aW50IGVycm9yQ29kZSwgRWluYV9Cb29sIGlzQ2FuY2VsbGF0aW9uLCBjb25zdCBjaGFyKiBlcnJv
ckRlc2NyaXB0aW9uLCBjb25zdCBjaGFyKiBmYWlsaW5nVXJsKQogewotICAgIEV3a19GcmFtZV9M
b2FkX0Vycm9yIGJ1ZiwgKmVycm9yOworICAgIEV3a19GcmFtZV9Mb2FkX0Vycm9yIGJ1ZmZlciwg
KmVycm9yOwogICAgIGlmICghZXJyb3JEb21haW4pIHsKICAgICAgICAgREJHKCJld2tGcmFtZT0l
cCwgc3VjY2Vzcy4iLCBld2tGcmFtZSk7CiAgICAgICAgIGVycm9yID0gMDsKQEAgLTEzMjMsMTcg
KzEzMjMsMTcgQEAgdm9pZCBld2tfZnJhbWVfbG9hZF9maW5pc2hlZChFdmFzX09iamVjdCogZXdr
RnJhbWUsIGNvbnN0IGNoYXIqIGVycm9yRG9tYWluLCBpbnQKICAgICAgICAgICAgIGV3a0ZyYW1l
LCBlcnJvckRvbWFpbiwgZXJyb3JDb2RlLCBpc0NhbmNlbGxhdGlvbiwKICAgICAgICAgICAgIGVy
cm9yRGVzY3JpcHRpb24sIGZhaWxpbmdVcmwpOwogCi0gICAgICAgIGJ1Zi5kb21haW4gPSBlcnJv
ckRvbWFpbjsKLSAgICAgICAgYnVmLmNvZGUgPSBlcnJvckNvZGU7Ci0gICAgICAgIGJ1Zi5pc19j
YW5jZWxsYXRpb24gPSBpc0NhbmNlbGxhdGlvbjsKLSAgICAgICAgYnVmLmRlc2NyaXB0aW9uID0g
ZXJyb3JEZXNjcmlwdGlvbjsKLSAgICAgICAgYnVmLmZhaWxpbmdfdXJsID0gZmFpbGluZ1VybDsK
LSAgICAgICAgYnVmLmZyYW1lID0gZXdrRnJhbWU7Ci0gICAgICAgIGVycm9yID0gJmJ1ZjsKKyAg
ICAgICAgYnVmZmVyLmRvbWFpbiA9IGVycm9yRG9tYWluOworICAgICAgICBidWZmZXIuY29kZSA9
IGVycm9yQ29kZTsKKyAgICAgICAgYnVmZmVyLmlzX2NhbmNlbGxhdGlvbiA9IGlzQ2FuY2VsbGF0
aW9uOworICAgICAgICBidWZmZXIuZGVzY3JpcHRpb24gPSBlcnJvckRlc2NyaXB0aW9uOworICAg
ICAgICBidWZmZXIuZmFpbGluZ191cmwgPSBmYWlsaW5nVXJsOworICAgICAgICBidWZmZXIuZnJh
bWUgPSBld2tGcmFtZTsKKyAgICAgICAgZXJyb3IgPSAmYnVmZmVyOwogICAgIH0KICAgICBldmFz
X29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKGV3a0ZyYW1lLCAibG9hZCxmaW5pc2hlZCIsIGVy
cm9yKTsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QpOwotICAg
IGV3a192aWV3X2xvYWRfZmluaXNoZWQoc2QtPnZpZXcsIGVycm9yKTsKKyAgICBFV0tfRlJBTUVf
U0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRhKTsKKyAgICBld2tfdmlld19sb2Fk
X2ZpbmlzaGVkKHNtYXJ0RGF0YS0+dmlldywgZXJyb3IpOwogfQogCiAvKioKQEAgLTEzNzEsMTYg
KzEzNzEsMTYgQEAgdm9pZCBld2tfZnJhbWVfbG9hZF9lcnJvcihFdmFzX09iamVjdCogZXdrRnJh
bWUsIGNvbnN0IGNoYXIqIGVycm9yRG9tYWluLCBpbnQgZXIKICAqLwogdm9pZCBld2tfZnJhbWVf
bG9hZF9wcm9ncmVzc19jaGFuZ2VkKEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsKLSAgICBFV0tf
RlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QpOwotICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOKHNkLT5mcmFtZSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrRnJhbWUsIHNtYXJ0RGF0YSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21h
cnREYXRhLT5mcmFtZSk7CiAKICAgICAvLyBUT0RPOiB0aGlzIGlzIHBlciBwYWdlLCB0aGVyZSBz
aG91bGQgYmUgYSB3YXkgdG8gaGF2ZSBwZXItZnJhbWUuCi0gICAgZG91YmxlIHByb2dyZXNzID0g
c2QtPmZyYW1lLT5wYWdlKCktPnByb2dyZXNzKCktPmVzdGltYXRlZFByb2dyZXNzKCk7CisgICAg
ZG91YmxlIHByb2dyZXNzID0gc21hcnREYXRhLT5mcmFtZS0+cGFnZSgpLT5wcm9ncmVzcygpLT5l
c3RpbWF0ZWRQcm9ncmVzcygpOwogCiAgICAgREJHKCJld2tGcmFtZT0lcCAocD0lMC4zZikiLCBl
d2tGcmFtZSwgcHJvZ3Jlc3MpOwogCiAgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2Fs
bChld2tGcmFtZSwgImxvYWQscHJvZ3Jlc3MiLCAmcHJvZ3Jlc3MpOwotICAgIGV3a192aWV3X2xv
YWRfcHJvZ3Jlc3NfY2hhbmdlZChzZC0+dmlldyk7CisgICAgZXdrX3ZpZXdfbG9hZF9wcm9ncmVz
c19jaGFuZ2VkKHNtYXJ0RGF0YS0+dmlldyk7CiB9CiAKIApAQCAtMTQxNyw1MSArMTQxNyw1MSBA
QCB2b2lkIGV3a19mcmFtZV90aXRsZV9zZXQoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBjb25zdCBj
aGFyKiB0aXRsZSkKIHZvaWQgZXdrX2ZyYW1lX3ZpZXdfY3JlYXRlX2Zvcl92aWV3KEV2YXNfT2Jq
ZWN0KiBld2tGcmFtZSwgRXZhc19PYmplY3QqIHZpZXcpCiB7CiAgICAgREJHKCJld2tGcmFtZT0l
cCwgdmlldz0lcCIsIGV3a0ZyYW1lLCB2aWV3KTsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JF
VFVSTihld2tGcmFtZSwgc2QpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5m
cmFtZSk7Ci0gICAgRXZhc19Db29yZCB3LCBoOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVU
VVJOKGV3a0ZyYW1lLCBzbWFydERhdGEpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJO
KHNtYXJ0RGF0YS0+ZnJhbWUpOworICAgIEV2YXNfQ29vcmQgd2lkdGgsIGhlaWdodDsKIAotICAg
IGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldCh2aWV3LCAwLCAwLCAmdywgJmgpOworICAgIGV2YXNf
b2JqZWN0X2dlb21ldHJ5X2dldCh2aWV3LCAwLCAwLCAmd2lkdGgsICZoZWlnaHQpOwogCi0gICAg
V2ViQ29yZTo6SW50U2l6ZSBzaXplKHcsIGgpOwotICAgIGludCByLCBnLCBiLCBhOwotICAgIFdl
YkNvcmU6OkNvbG9yIGJnOworICAgIFdlYkNvcmU6OkludFNpemUgc2l6ZSh3aWR0aCwgaGVpZ2h0
KTsKKyAgICBpbnQgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGE7CisgICAgV2ViQ29yZTo6Q29sb3Ig
YmFja2dyb3VuZDsKIAotICAgIGV3a192aWV3X2JnX2NvbG9yX2dldCh2aWV3LCAmciwgJmcsICZi
LCAmYSk7Ci0gICAgaWYgKCFhKQotICAgICAgICBiZyA9IFdlYkNvcmU6OkNvbG9yKDAsIDAsIDAs
IDApOwotICAgIGVsc2UgaWYgKGEgPT0gMjU1KQotICAgICAgICBiZyA9IFdlYkNvcmU6OkNvbG9y
KHIsIGcsIGIsIGEpOworICAgIGV3a192aWV3X2JnX2NvbG9yX2dldCh2aWV3LCAmcmVkLCAmZ3Jl
ZW4sICZibHVlLCAmYWxwaGEpOworICAgIGlmICghYWxwaGEpCisgICAgICAgIGJhY2tncm91bmQg
PSBXZWJDb3JlOjpDb2xvcigwLCAwLCAwLCAwKTsKKyAgICBlbHNlIGlmIChhbHBoYSA9PSAyNTUp
CisgICAgICAgIGJhY2tncm91bmQgPSBXZWJDb3JlOjpDb2xvcihyZWQsIGdyZWVuLCBibHVlLCBh
bHBoYSk7CiAgICAgZWxzZQotICAgICAgICBiZyA9IFdlYkNvcmU6OkNvbG9yKHIgKiAyNTUgLyBh
LCBnICogMjU1IC8gYSwgYiAqIDI1NSAvIGEsIGEpOworICAgICAgICBiYWNrZ3JvdW5kID0gV2Vi
Q29yZTo6Q29sb3IocmVkICogMjU1IC8gYWxwaGEsIGdyZWVuICogMjU1IC8gYWxwaGEsIGJsdWUg
KiAyNTUgLyBhbHBoYSwgYWxwaGEpOwogCi0gICAgc2QtPmZyYW1lLT5jcmVhdGVWaWV3KHNpemUs
IGJnLCAhYSwgV2ViQ29yZTo6SW50U2l6ZSgpLCBmYWxzZSk7Ci0gICAgaWYgKCFzZC0+ZnJhbWUt
PnZpZXcoKSkKKyAgICBzbWFydERhdGEtPmZyYW1lLT5jcmVhdGVWaWV3KHNpemUsIGJhY2tncm91
bmQsICFhbHBoYSwgV2ViQ29yZTo6SW50U2l6ZSgpLCBmYWxzZSk7CisgICAgaWYgKCFzbWFydERh
dGEtPmZyYW1lLT52aWV3KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGNvbnN0IGNoYXIqIHRo
ZW1lID0gZXdrX3ZpZXdfdGhlbWVfZ2V0KHZpZXcpOwotICAgIHNkLT5mcmFtZS0+dmlldygpLT5z
ZXRFZGplVGhlbWUodGhlbWUpOwotICAgIHNkLT5mcmFtZS0+dmlldygpLT5zZXRFdmFzT2JqZWN0
KGV3a0ZyYW1lKTsKKyAgICBzbWFydERhdGEtPmZyYW1lLT52aWV3KCktPnNldEVkamVUaGVtZSh0
aGVtZSk7CisgICAgc21hcnREYXRhLT5mcmFtZS0+dmlldygpLT5zZXRFdmFzT2JqZWN0KGV3a0Zy
YW1lKTsKIH0KIAogc3NpemVfdCBld2tfZnJhbWVfc291cmNlX2dldChjb25zdCBFdmFzX09iamVj
dCogZXdrRnJhbWUsIGNoYXIqKiBmcmFtZVNvdXJjZSkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VU
X09SX1JFVFVSTihld2tGcmFtZSwgc2QsIC0xKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTl9WQUwoc2QtPmZyYW1lLCAtMSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5f
VkFMKHNkLT5mcmFtZS0+ZG9jdW1lbnQoKSwgLTEpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1Jf
UkVUVVJOKGV3a0ZyYW1lLCBzbWFydERhdGEsIC0xKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTl9WQUwoc21hcnREYXRhLT5mcmFtZSwgLTEpOworICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmZyYW1lLT5kb2N1bWVudCgpLCAtMSk7CiAgICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGZyYW1lU291cmNlLCAtMSk7CiAKICAgICBXVEY6
OlN0cmluZyBzb3VyY2U7CiAgICAgKmZyYW1lU291cmNlID0gMDsgLy8gU2F2ZXMgMCB0byBwb2lu
dGVyIHVudGlsIGl0J3Mgbm90IGFsbG9jYXRlZC4KIAotICAgIGlmICghc2QtPmZyYW1lLT5kb2N1
bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpKSB7CisgICAgaWYgKCFzbWFydERhdGEtPmZyYW1lLT5k
b2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBTdXBwb3J0
IG90aGVycyBkb2N1bWVudHMuCiAgICAgICAgIFdSTigiT25seSBIVE1MIGRvY3VtZW50cyBhcmUg
c3VwcG9ydGVkIik7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKICAgICAvLyBMb29rIGZv
ciA8aHRtbD4gdGFnLiBJZiBpdCBleGlzdHMsIHRoZSBub2RlIGNvbnRhdGlucyBhbGwgZG9jdW1l
bnQncyBzb3VyY2UuCi0gICAgV2ViQ29yZTo6Tm9kZSogZG9jdW1lbnROb2RlID0gc2QtPmZyYW1l
LT5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKTsKKyAgICBXZWJDb3JlOjpOb2RlKiBkb2N1
bWVudE5vZGUgPSBzbWFydERhdGEtPmZyYW1lLT5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQo
KTsKICAgICBpZiAoZG9jdW1lbnROb2RlKQogICAgICAgICBmb3IgKFdlYkNvcmU6Ok5vZGUqIG5v
ZGUgPSBkb2N1bWVudE5vZGUtPmZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPnBhcmVu
dEVsZW1lbnQoKSkgewogICAgICAgICAgICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUoV2ViQ29yZTo6
SFRNTE5hbWVzOjpodG1sVGFnKSkgewpAQCAtMTQ3NCwzNiArMTQ3NCwzNiBAQCBzc2l6ZV90IGV3
a19mcmFtZV9zb3VyY2VfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSwgY2hhcioqIGZy
YW1lU291cmNlKQogCiAgICAgLy8gVHJ5IHRvIGdldCA8aGVhZD4gYW5kIDxib2R5PiB0YWdzIGlm
IDxodG1sPiB0YWcgd2FzIG5vdCBmb3VuZC4KICAgICBpZiAoc291cmNlLmlzRW1wdHkoKSkgewot
ICAgICAgICBpZiAoc2QtPmZyYW1lLT5kb2N1bWVudCgpLT5oZWFkKCkpCi0gICAgICAgICAgICBz
b3VyY2UgPSBzZC0+ZnJhbWUtPmRvY3VtZW50KCktPmhlYWQoKS0+b3V0ZXJIVE1MKCk7CisgICAg
ICAgIGlmIChzbWFydERhdGEtPmZyYW1lLT5kb2N1bWVudCgpLT5oZWFkKCkpCisgICAgICAgICAg
ICBzb3VyY2UgPSBzbWFydERhdGEtPmZyYW1lLT5kb2N1bWVudCgpLT5oZWFkKCktPm91dGVySFRN
TCgpOwogCi0gICAgICAgIGlmIChzZC0+ZnJhbWUtPmRvY3VtZW50KCktPmJvZHkoKSkKLSAgICAg
ICAgICAgIHNvdXJjZSArPSBzZC0+ZnJhbWUtPmRvY3VtZW50KCktPmJvZHkoKS0+b3V0ZXJIVE1M
KCk7CisgICAgICAgIGlmIChzbWFydERhdGEtPmZyYW1lLT5kb2N1bWVudCgpLT5ib2R5KCkpCisg
ICAgICAgICAgICBzb3VyY2UgKz0gc21hcnREYXRhLT5mcmFtZS0+ZG9jdW1lbnQoKS0+Ym9keSgp
LT5vdXRlckhUTUwoKTsKICAgICB9CiAKLSAgICBzaXplX3Qgc291cmNlX2xlbmd0aCA9IHN0cmxl
bihzb3VyY2UudXRmOCgpLmRhdGEoKSk7Ci0gICAgKmZyYW1lU291cmNlID0gc3RhdGljX2Nhc3Q8
Y2hhcio+KG1hbGxvYyhzb3VyY2VfbGVuZ3RoICsgMSkpOworICAgIHNpemVfdCBzb3VyY2VMZW5n
dGggPSBzdHJsZW4oc291cmNlLnV0ZjgoKS5kYXRhKCkpOworICAgICpmcmFtZVNvdXJjZSA9IHN0
YXRpY19jYXN0PGNoYXIqPihtYWxsb2Moc291cmNlTGVuZ3RoICsgMSkpOwogICAgIGlmICghKmZy
YW1lU291cmNlKSB7CiAgICAgICAgIENSSVRJQ0FMKCJDb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5
LiIpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCi0gICAgc3RybmNweSgqZnJhbWVTb3Vy
Y2UsIHNvdXJjZS51dGY4KCkuZGF0YSgpLCBzb3VyY2VfbGVuZ3RoKTsKLSAgICAoKmZyYW1lU291
cmNlKVtzb3VyY2VfbGVuZ3RoXSA9ICdcMCc7CisgICAgc3RybmNweSgqZnJhbWVTb3VyY2UsIHNv
dXJjZS51dGY4KCkuZGF0YSgpLCBzb3VyY2VMZW5ndGgpOworICAgICgqZnJhbWVTb3VyY2UpW3Nv
dXJjZUxlbmd0aF0gPSAnXDAnOwogCi0gICAgcmV0dXJuIHNvdXJjZV9sZW5ndGg7CisgICAgcmV0
dXJuIHNvdXJjZUxlbmd0aDsKIH0KIAogRWluYV9MaXN0KiBld2tfZnJhbWVfcmVzb3VyY2VzX2xv
Y2F0aW9uX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrRnJhbWUpCiB7Ci0gICAgRVdLX0ZSQU1F
X1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkLCAwKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTl9WQUwoc2QtPmZyYW1lLCAwKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTl9WQUwoc2QtPmZyYW1lLT5kb2N1bWVudCgpLCAwKTsKKyAgICBFV0tfRlJBTUVfU0RfR0VU
X09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRhLCAwKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5mcmFtZSwgMCk7CisgICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUtPmRvY3VtZW50KCksIDApOwogCiAgICAg
RWluYV9MaXN0KiBsaXN0T2ZJbWFnZXNMb2NhdGlvbiA9IDA7CiAKICAgICAvLyBHZXQgc3JjIGF0
dGlidXRlIG9mIGltYWdlcyBhbmQgc2F2ZXMgdGhlbSB0byB0aGUgRWluYV9MaXN0LgotICAgIFJl
ZlB0cjxXZWJDb3JlOjpIVE1MQ29sbGVjdGlvbj4gaW1hZ2VzID0gc2QtPmZyYW1lLT5kb2N1bWVu
dCgpLT5pbWFnZXMoKTsKKyAgICBSZWZQdHI8V2ViQ29yZTo6SFRNTENvbGxlY3Rpb24+IGltYWdl
cyA9IHNtYXJ0RGF0YS0+ZnJhbWUtPmRvY3VtZW50KCktPmltYWdlcygpOwogICAgIGZvciAoc2l6
ZV90IGluZGV4ID0gMDsgaW5kZXggPCBpbWFnZXMtPmxlbmd0aCgpOyArK2luZGV4KSB7CiAgICAg
ICAgIFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQqIGltYWdlRWxlbWVudCA9IHN0YXRpY19jYXN0
PFdlYkNvcmU6OkhUTUxJbWFnZUVsZW1lbnQqPihpbWFnZXMtPml0ZW0oaW5kZXgpKTsKICAgICAg
ICAgaWYgKCFpbWFnZUVsZW1lbnQgfHwgaW1hZ2VFbGVtZW50LT5zcmMoKS5pc051bGwoKSB8fCBp
bWFnZUVsZW1lbnQtPnNyYygpLmlzRW1wdHkoKSkKQEAgLTE1NDAsMTMgKzE1NDAsMTMgQEAgb3V0
X29mX21lbW9yeV9oYW5kbGVyOgogCiBjaGFyKiBld2tfZnJhbWVfcGxhaW5fdGV4dF9nZXQoY29u
c3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVU
VVJOKGV3a0ZyYW1lLCBzZCwgMCk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFM
KHNkLT5mcmFtZSwgMCk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUs
IHNtYXJ0RGF0YSwgMCk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0
RGF0YS0+ZnJhbWUsIDApOwogCi0gICAgaWYgKCFzZC0+ZnJhbWUtPmRvY3VtZW50KCkpCisgICAg
aWYgKCFzbWFydERhdGEtPmZyYW1lLT5kb2N1bWVudCgpKQogICAgICAgICByZXR1cm4gMDsKIAot
ICAgIFdlYkNvcmU6OkVsZW1lbnQqIGRvY3VtZW50RWxlbWVudCA9IHNkLT5mcmFtZS0+ZG9jdW1l
bnQoKS0+ZG9jdW1lbnRFbGVtZW50KCk7CisgICAgV2ViQ29yZTo6RWxlbWVudCogZG9jdW1lbnRF
bGVtZW50ID0gc21hcnREYXRhLT5mcmFtZS0+ZG9jdW1lbnQoKS0+ZG9jdW1lbnRFbGVtZW50KCk7
CiAKICAgICBpZiAoIWRvY3VtZW50RWxlbWVudCkKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xNTg1
LDkgKzE1ODUsOSBAQCBFaW5hX0Jvb2wgZXdrX2ZyYW1lX3VyaV9jaGFuZ2VkKEV2YXNfT2JqZWN0
KiBld2tGcmFtZSkKIHZvaWQgZXdrX2ZyYW1lX2ZvcmNlX2xheW91dChFdmFzX09iamVjdCogZXdr
RnJhbWUpCiB7CiAgICAgREJHKCJld2tGcmFtZT0lcCIsIGV3a0ZyYW1lKTsKLSAgICBFV0tfRlJB
TUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QpOwotICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOKHNkLT5mcmFtZSk7Ci0gICAgV2ViQ29yZTo6RnJhbWVWaWV3KiB2aWV3ID0gc2Qt
PmZyYW1lLT52aWV3KCk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUs
IHNtYXJ0RGF0YSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRhLT5m
cmFtZSk7CisgICAgV2ViQ29yZTo6RnJhbWVWaWV3KiB2aWV3ID0gc21hcnREYXRhLT5mcmFtZS0+
dmlldygpOwogICAgIGlmICh2aWV3KQogICAgICAgICB2aWV3LT5mb3JjZUxheW91dCh0cnVlKTsK
IH0KQEAgLTE2MDYsNyArMTYwNiw3IEBAIFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpXaWRnZXQ+
IGV3a19mcmFtZV9wbHVnaW5fY3JlYXRlKEV2YXNfT2JqZWN0KiBld2tGcmFtZSwKICAqIEBpbnRl
cm5hbAogICogUmVwb3J0cyB0aGF0IGVkaXRvciBjbGllbnQgc2VsZWN0aW9uIHdhcyBjaGFuZ2Vk
LgogICoKLSAqIEBwYXJhbSBvIEZyYW1lCisgKiBAcGFyYW0gZXdrRnJhbWUgRnJhbWUKICAqCiAg
KiBFbWl0cyBzaWduYWw6ICJlZGl0b3JjbGllbnRzZWxlY3Rpb24sY2hhbmdlZCIgd2l0aCBubyBw
YXJhbWV0ZXJzLgogICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2hp
c3RvcnkuY3BwIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19oaXN0b3J5LmNwcAppbmRleCBi
ZmYwYzUyNjcxNmU4ZjJhMGU3NzYzMDVlNzAxYmM4MjNhMzUyNjU4Li5mZTAxZDUyY2NiMWQ2Y2Fk
ODI3YWI5NmQyZDk1ZjNjNjI5ZGE5M2I4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9l
d2svZXdrX2hpc3RvcnkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfaGlzdG9y
eS5jcHAKQEAgLTU5LDkgKzU5LDkgQEAgc3RydWN0IF9Fd2tfSGlzdG9yeV9JdGVtIHsKICAgICBX
ZWJDb3JlOjpIaXN0b3J5SXRlbSogY29yZTsKIAogICAgIGNvbnN0IGNoYXIqIHRpdGxlOwotICAg
IGNvbnN0IGNoYXIqIGFsdGVybmF0ZV90aXRsZTsKKyAgICBjb25zdCBjaGFyKiBhbHRlcm5hdGVU
aXRsZTsKICAgICBjb25zdCBjaGFyKiB1cmk7Ci0gICAgY29uc3QgY2hhciogb3JpZ2luYWxfdXJp
OworICAgIGNvbnN0IGNoYXIqIG9yaWdpbmFsVXJpOwogfTsKIAogI2RlZmluZSBFV0tfSElTVE9S
WV9JVEVNX0NPUkVfR0VUX09SX1JFVFVSTihpdGVtLCBjb3JlXywgLi4uKSBcCkBAIC03NywxNyAr
NzcsMTcgQEAgc3RydWN0IF9Fd2tfSGlzdG9yeV9JdGVtIHsKIAogc3RhdGljIGlubGluZSBFaW5h
X0xpc3QqIF9ld2tfaGlzdG9yeV9pdGVtX2xpc3RfZ2V0KGNvbnN0IFdlYkNvcmU6Okhpc3RvcnlJ
dGVtVmVjdG9yJiBjb3JlSXRlbXMpCiB7Ci0gICAgRWluYV9MaXN0KiByZXQgPSAwOwotICAgIHVu
c2lnbmVkIGludCBpLCBzaXplOworICAgIEVpbmFfTGlzdCogcmVzdWx0ID0gMDsKKyAgICB1bnNp
Z25lZCBpbnQgc2l6ZTsKIAogICAgIHNpemUgPSBjb3JlSXRlbXMuc2l6ZSgpOwotICAgIGZvciAo
aSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8
IHNpemU7IGkrKykgewogICAgICAgICBFd2tfSGlzdG9yeV9JdGVtKiBpdGVtID0gZXdrX2hpc3Rv
cnlfaXRlbV9uZXdfZnJvbV9jb3JlKGNvcmVJdGVtc1tpXS5nZXQoKSk7CiAgICAgICAgIGlmIChp
dGVtKQotICAgICAgICAgICAgcmV0ID0gZWluYV9saXN0X2FwcGVuZChyZXQsIGl0ZW0pOworICAg
ICAgICAgICAgcmVzdWx0ID0gZWluYV9saXN0X2FwcGVuZChyZXN1bHQsIGl0ZW0pOwogICAgIH0K
IAotICAgIHJldHVybiByZXQ7CisgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAogRWluYV9Cb29sIGV3
a19oaXN0b3J5X2NsZWFyKEV3a19IaXN0b3J5KiBoaXN0b3J5KQpAQCAtMjc2LDkgKzI3Niw5IEBA
IHZvaWQgZXdrX2hpc3RvcnlfaXRlbV9mcmVlKEV3a19IaXN0b3J5X0l0ZW0qIGl0ZW0pCiAKIHZv
aWQgZXdrX2hpc3RvcnlfaXRlbV9saXN0X2ZyZWUoRWluYV9MaXN0KiBoaXN0b3J5X2l0ZW1zKQog
ewotICAgIHZvaWQqIGQ7Ci0gICAgRUlOQV9MSVNUX0ZSRUUoaGlzdG9yeV9pdGVtcywgZCkgewot
ICAgICAgICBFd2tfSGlzdG9yeV9JdGVtKiBpdGVtID0gKEV3a19IaXN0b3J5X0l0ZW0qKWQ7Cisg
ICAgdm9pZCogZGVsZXRlSXRlbTsKKyAgICBFSU5BX0xJU1RfRlJFRShoaXN0b3J5X2l0ZW1zLCBk
ZWxldGVJdGVtKSB7CisgICAgICAgIEV3a19IaXN0b3J5X0l0ZW0qIGl0ZW0gPSAoRXdrX0hpc3Rv
cnlfSXRlbSopZGVsZXRlSXRlbTsKICAgICAgICAgX2V3a19oaXN0b3J5X2l0ZW1fZnJlZShpdGVt
LCBpdGVtLT5jb3JlKTsKICAgICB9CiB9CkBAIC0yODcsMjUgKzI4NywyNSBAQCBjb25zdCBjaGFy
KiBld2tfaGlzdG9yeV9pdGVtX3RpdGxlX2dldChjb25zdCBFd2tfSGlzdG9yeV9JdGVtKiBpdGVt
KQogewogICAgIEVXS19ISVNUT1JZX0lURU1fQ09SRV9HRVRfT1JfUkVUVVJOKGl0ZW0sIGNvcmUs
IDApOwogICAgIC8vIGhpZGUgdGhlIGZvbGxvd2luZyBvcHRpbXphdGlvbiBmcm9tIG91dHNpZGUK
LSAgICBFd2tfSGlzdG9yeV9JdGVtKiBpID0gY29uc3RfY2FzdDxFd2tfSGlzdG9yeV9JdGVtKj4o
aXRlbSk7Ci0gICAgZWluYV9zdHJpbmdzaGFyZV9yZXBsYWNlKCZpLT50aXRsZSwgY29yZS0+dGl0
bGUoKS51dGY4KCkuZGF0YSgpKTsKLSAgICByZXR1cm4gaS0+dGl0bGU7CisgICAgRXdrX0hpc3Rv
cnlfSXRlbSogaXRlbTEgPSBjb25zdF9jYXN0PEV3a19IaXN0b3J5X0l0ZW0qPihpdGVtKTsKKyAg
ICBlaW5hX3N0cmluZ3NoYXJlX3JlcGxhY2UoJml0ZW0xLT50aXRsZSwgY29yZS0+dGl0bGUoKS51
dGY4KCkuZGF0YSgpKTsKKyAgICByZXR1cm4gaXRlbTEtPnRpdGxlOwogfQogCiBjb25zdCBjaGFy
KiBld2tfaGlzdG9yeV9pdGVtX3RpdGxlX2FsdGVybmF0ZV9nZXQoY29uc3QgRXdrX0hpc3Rvcnlf
SXRlbSogaXRlbSkKIHsKICAgICBFV0tfSElTVE9SWV9JVEVNX0NPUkVfR0VUX09SX1JFVFVSTihp
dGVtLCBjb3JlLCAwKTsKICAgICAvLyBoaWRlIHRoZSBmb2xsb3dpbmcgb3B0aW16YXRpb24gZnJv
bSBvdXRzaWRlCi0gICAgRXdrX0hpc3RvcnlfSXRlbSogaSA9IGNvbnN0X2Nhc3Q8RXdrX0hpc3Rv
cnlfSXRlbSo+KGl0ZW0pOwotICAgIGVpbmFfc3RyaW5nc2hhcmVfcmVwbGFjZSgmaS0+YWx0ZXJu
YXRlX3RpdGxlLAorICAgIEV3a19IaXN0b3J5X0l0ZW0qIGl0ZW0xID0gY29uc3RfY2FzdDxFd2tf
SGlzdG9yeV9JdGVtKj4oaXRlbSk7CisgICAgZWluYV9zdHJpbmdzaGFyZV9yZXBsYWNlKCZpdGVt
MS0+YWx0ZXJuYXRlVGl0bGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmUtPmFs
dGVybmF0ZVRpdGxlKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgcmV0dXJuIGktPmFsdGVybmF0ZV90
aXRsZTsKKyAgICByZXR1cm4gaXRlbTEtPmFsdGVybmF0ZVRpdGxlOwogfQogCiB2b2lkIGV3a19o
aXN0b3J5X2l0ZW1fdGl0bGVfYWx0ZXJuYXRlX3NldChFd2tfSGlzdG9yeV9JdGVtKiBpdGVtLCBj
b25zdCBjaGFyKiB0aXRsZSkKIHsKICAgICBFV0tfSElTVE9SWV9JVEVNX0NPUkVfR0VUX09SX1JF
VFVSTihpdGVtLCBjb3JlKTsKLSAgICBpZiAoIWVpbmFfc3RyaW5nc2hhcmVfcmVwbGFjZSgmaXRl
bS0+YWx0ZXJuYXRlX3RpdGxlLCB0aXRsZSkpCisgICAgaWYgKCFlaW5hX3N0cmluZ3NoYXJlX3Jl
cGxhY2UoJml0ZW0tPmFsdGVybmF0ZVRpdGxlLCB0aXRsZSkpCiAgICAgICAgIHJldHVybjsKICAg
ICBjb3JlLT5zZXRBbHRlcm5hdGVUaXRsZShXVEY6OlN0cmluZzo6ZnJvbVVURjgodGl0bGUpKTsK
IH0KQEAgLTMyNCw5ICszMjQsOSBAQCBjb25zdCBjaGFyKiBld2tfaGlzdG9yeV9pdGVtX3VyaV9v
cmlnaW5hbF9nZXQoY29uc3QgRXdrX0hpc3RvcnlfSXRlbSogaXRlbSkKICAgICBFV0tfSElTVE9S
WV9JVEVNX0NPUkVfR0VUX09SX1JFVFVSTihpdGVtLCBjb3JlLCAwKTsKICAgICAvLyBoaWRlIHRo
ZSBmb2xsb3dpbmcgb3B0aW16YXRpb24gZnJvbSBvdXRzaWRlCiAgICAgRXdrX0hpc3RvcnlfSXRl
bSogaSA9IGNvbnN0X2Nhc3Q8RXdrX0hpc3RvcnlfSXRlbSo+KGl0ZW0pOwotICAgIGVpbmFfc3Ry
aW5nc2hhcmVfcmVwbGFjZSgmaS0+b3JpZ2luYWxfdXJpLAorICAgIGVpbmFfc3RyaW5nc2hhcmVf
cmVwbGFjZSgmaS0+b3JpZ2luYWxVcmksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
cmUtPm9yaWdpbmFsVVJMU3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgcmV0dXJuIGktPm9y
aWdpbmFsX3VyaTsKKyAgICByZXR1cm4gaS0+b3JpZ2luYWxVcmk7CiB9CiAKIGRvdWJsZSBld2tf
aGlzdG9yeV9pdGVtX3RpbWVfbGFzdF92aXNpdGVkX2dldChjb25zdCBFd2tfSGlzdG9yeV9JdGVt
KiBpdGVtKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19qcy5jcHAgYi9T
b3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2pzLmNwcAppbmRleCBkNDliNjc4ODg0MjFhNmFiZmZk
M2NhMDNmZjAxNTkxZmQxZTYyODZjLi4zZGY4YzUyNDk3NGEzNmQyMzQ0OGNhYzFmZjc0YzYyMGIw
ZmEyMDdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2pzLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2pzLmNwcApAQCAtODUsMTAgKzg1LDEwIEBAIHN0
YXRpYyBFaW5hX0Jvb2wgZXdrX2pzX3ZhcmlhbnRfdG9fbnB2YXJpYW50KGNvbnN0IEV3a19KU19W
YXJpYW50KiBkYXRhLCBOUFZhcmlhCiAvLyBUaGVzZSBtZXRob2RzIGFyZSB1c2VkIGJ5IE5QQUks
IHRoYXRzIHRoZSByZWFzb24gdG8gdXNlIGJvb2wgaW5zdGVhZCBvZiBFaW5hX0Jvb2wuCiBzdGF0
aWMgYm9vbCBld2tfanNfcHJvcGVydHlfaGFzKE5QT2JqZWN0KiBucE9iamVjdCwgTlBJZGVudGlm
aWVyIG5hbWUpCiB7Ci0gICAgRXdrX0pTX09iamVjdCogb2JqID0gcmVpbnRlcnByZXRfY2FzdDxF
d2tfSlNfT2JqZWN0Kj4obnBPYmplY3QpOworICAgIEV3a19KU19PYmplY3QqIG9iamVjdCA9IHJl
aW50ZXJwcmV0X2Nhc3Q8RXdrX0pTX09iamVjdCo+KG5wT2JqZWN0KTsKIAogICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOX1ZBTChucE9iamVjdCwgZmFsc2UpOwotICAgIEVJTkFfTUFHSUNf
Q0hFQ0tfT1JfUkVUVVJOKG9iaiwgZmFsc2UpOworICAgIEVJTkFfTUFHSUNfQ0hFQ0tfT1JfUkVU
VVJOKG9iamVjdCwgZmFsc2UpOwogCiAgICAgaWYgKCFfTlBOX0lkZW50aWZpZXJJc1N0cmluZyhu
YW1lKSkgewogICAgICAgICBFUlIoImludCBOUElkZW50aWZpZXIgaXMgbm90IHN1cHBvcnRlZC4i
KTsKQEAgLTk2LDcgKzk2LDcgQEAgc3RhdGljIGJvb2wgZXdrX2pzX3Byb3BlcnR5X2hhcyhOUE9i
amVjdCogbnBPYmplY3QsIE5QSWRlbnRpZmllciBuYW1lKQogICAgIH0KIAogICAgIGNoYXIqIHBy
b3BfbmFtZSA9IF9OUE5fVVRGOEZyb21JZGVudGlmaWVyKG5hbWUpOwotICAgIGJvb2wgZmFpbCA9
IGVpbmFfaGFzaF9maW5kKG9iai0+cHJvcGVydGllcywgcHJvcF9uYW1lKTsgLy8gRklYTUU6IHNo
b3VsZCBzZWFyY2ggbWV0aG9kcyB0b28/CisgICAgYm9vbCBmYWlsID0gZWluYV9oYXNoX2ZpbmQo
b2JqZWN0LT5wcm9wZXJ0aWVzLCBwcm9wX25hbWUpOyAvLyBGSVhNRTogc2hvdWxkIHNlYXJjaCBt
ZXRob2RzIHRvbz8KICAgICBmcmVlKHByb3BfbmFtZSk7CiAKICAgICByZXR1cm4gZmFpbDsKQEAg
LTEwNCwxMyArMTA0LDEzIEBAIHN0YXRpYyBib29sIGV3a19qc19wcm9wZXJ0eV9oYXMoTlBPYmpl
Y3QqIG5wT2JqZWN0LCBOUElkZW50aWZpZXIgbmFtZSkKIAogc3RhdGljIGJvb2wgZXdrX2pzX3By
b3BlcnR5X2dldChOUE9iamVjdCogbnBPYmplY3QsIE5QSWRlbnRpZmllciBuYW1lLCBOUFZhcmlh
bnQqIHJlc3VsdCkKIHsKLSAgICBFd2tfSlNfT2JqZWN0KiBvYmogPSByZWludGVycHJldF9jYXN0
PEV3a19KU19PYmplY3QqPihucE9iamVjdCk7CisgICAgRXdrX0pTX09iamVjdCogb2JqZWN0ID0g
cmVpbnRlcnByZXRfY2FzdDxFd2tfSlNfT2JqZWN0Kj4obnBPYmplY3QpOwogICAgIEV3a19KU19W
YXJpYW50KiB2YWx1ZTsKICAgICBFd2tfSlNfUHJvcGVydHkqIHByb3A7CiAgICAgYm9vbCBmYWls
ID0gZmFsc2U7CiAKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwobnBPYmplY3Qs
IGZhbHNlKTsKLSAgICBFSU5BX01BR0lDX0NIRUNLX09SX1JFVFVSTihvYmosIGZhbHNlKTsKKyAg
ICBFSU5BX01BR0lDX0NIRUNLX09SX1JFVFVSTihvYmplY3QsIGZhbHNlKTsKIAogICAgIGlmICgh
X05QTl9JZGVudGlmaWVySXNTdHJpbmcobmFtZSkpIHsKICAgICAgICAgRVJSKCJpbnQgTlBJZGVu
dGlmaWVyIGlzIG5vdCBzdXBwb3J0ZWQuIik7CkBAIC0xMjMsMTkgKzEyMywxOSBAQCBzdGF0aWMg
Ym9vbCBld2tfanNfcHJvcGVydHlfZ2V0KE5QT2JqZWN0KiBucE9iamVjdCwgTlBJZGVudGlmaWVy
IG5hbWUsIE5QVmFyaWFudAogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAgcHJv
cCA9IHN0YXRpY19jYXN0PEV3a19KU19Qcm9wZXJ0eSo+KGVpbmFfaGFzaF9maW5kKG9iai0+Y2xz
LT5wcm9wZXJ0aWVzLCBuYW1lKSk7CisgICAgcHJvcCA9IHN0YXRpY19jYXN0PEV3a19KU19Qcm9w
ZXJ0eSo+KGVpbmFfaGFzaF9maW5kKG9iamVjdC0+Y2xzLT5wcm9wZXJ0aWVzLCBuYW1lKSk7CiAg
ICAgaWYgKHByb3AgJiYgcHJvcC0+Z2V0KSB7IC8vIENsYXNzIGhhcyBwcm9wZXJ0eSBhbmQgcHJv
cGVydHkgaGFzIGdldHRlci4KLSAgICAgICAgZmFpbCA9IHByb3AtPmdldChvYmosIHByb3AtPm5h
bWUsIHZhbHVlKTsKKyAgICAgICAgZmFpbCA9IHByb3AtPmdldChvYmplY3QsIHByb3AtPm5hbWUs
IHZhbHVlKTsKICAgICAgICAgaWYgKCFmYWlsKQogICAgICAgICAgICAgZmFpbCA9IGV3a19qc192
YXJpYW50X3RvX25wdmFyaWFudCh2YWx1ZSwgcmVzdWx0KTsKLSAgICB9IGVsc2UgaWYgKG9iai0+
Y2xzLT5kZWZhdWx0X3Byb3AuZ2V0KSB7IC8vIERlZmF1bHQgZ2V0dGVyIGV4aXN0cy4KLSAgICAg
ICAgZmFpbCA9IG9iai0+Y2xzLT5kZWZhdWx0X3Byb3AuZ2V0KG9iaiwgcHJvcC0+bmFtZSwgdmFs
dWUpOworICAgIH0gZWxzZSBpZiAob2JqZWN0LT5jbHMtPmRlZmF1bHRfcHJvcC5nZXQpIHsgLy8g
RGVmYXVsdCBnZXR0ZXIgZXhpc3RzLgorICAgICAgICBmYWlsID0gb2JqZWN0LT5jbHMtPmRlZmF1
bHRfcHJvcC5nZXQob2JqZWN0LCBwcm9wLT5uYW1lLCB2YWx1ZSk7CiAgICAgICAgIGlmICghZmFp
bCkKICAgICAgICAgICAgIGZhaWwgPSBld2tfanNfdmFyaWFudF90b19ucHZhcmlhbnQodmFsdWUs
IHJlc3VsdCk7CiAgICAgfSBlbHNlIHsgLy8gRmFsbGJhY2sgdG8gb2JqZWN0cyBoYXNoIG1hcC4K
ICAgICAgICAgY2hhciogcHJvcF9uYW1lID0gX05QTl9VVEY4RnJvbUlkZW50aWZpZXIobmFtZSk7
CiAgICAgICAgIGZyZWUodmFsdWUpOwotICAgICAgICB2YWx1ZSA9IHN0YXRpY19jYXN0PEV3a19K
U19WYXJpYW50Kj4oZWluYV9oYXNoX2ZpbmQob2JqLT5wcm9wZXJ0aWVzLCBwcm9wX25hbWUpKTsK
KyAgICAgICAgdmFsdWUgPSBzdGF0aWNfY2FzdDxFd2tfSlNfVmFyaWFudCo+KGVpbmFfaGFzaF9m
aW5kKG9iamVjdC0+cHJvcGVydGllcywgcHJvcF9uYW1lKSk7CiAgICAgICAgIGZyZWUocHJvcF9u
YW1lKTsKICAgICAgICAgaWYgKHZhbHVlKQogICAgICAgICAgICAgcmV0dXJuIGV3a19qc192YXJp
YW50X3RvX25wdmFyaWFudCh2YWx1ZSwgcmVzdWx0KTsKQEAgLTE0Nyw3ICsxNDcsNyBAQCBzdGF0
aWMgYm9vbCBld2tfanNfcHJvcGVydHlfZ2V0KE5QT2JqZWN0KiBucE9iamVjdCwgTlBJZGVudGlm
aWVyIG5hbWUsIE5QVmFyaWFudAogCiBzdGF0aWMgYm9vbCBld2tfanNfcHJvcGVydHlfc2V0KE5Q
T2JqZWN0KiBucE9iamVjdCwgTlBJZGVudGlmaWVyIG5hbWUsIGNvbnN0IE5QVmFyaWFudCogbnBW
YWx1ZSkKIHsKLSAgICBFd2tfSlNfT2JqZWN0KiBvYmogPSByZWludGVycHJldF9jYXN0PEV3a19K
U19PYmplY3QqPihucE9iamVjdCk7CisgICAgRXdrX0pTX09iamVjdCogb2JqZWN0ID0gcmVpbnRl
cnByZXRfY2FzdDxFd2tfSlNfT2JqZWN0Kj4obnBPYmplY3QpOwogICAgIEV3a19KU19WYXJpYW50
KiB2YWx1ZTsKICAgICBFd2tfSlNfUHJvcGVydHkqIHByb3A7CiAgICAgYm9vbCBmYWlsID0gZmFs
c2U7CkBAIC0xNjgsMTMgKzE2OCwxMyBAQCBzdGF0aWMgYm9vbCBld2tfanNfcHJvcGVydHlfc2V0
KE5QT2JqZWN0KiBucE9iamVjdCwgTlBJZGVudGlmaWVyIG5hbWUsIGNvbnN0IE5QVgogCiAgICAg
ZXdrX2pzX25wdmFyaWFudF90b192YXJpYW50KHZhbHVlLCBucFZhbHVlKTsKICAgICBjaGFyKiBw
cm9wX25hbWUgPSBfTlBOX1VURjhGcm9tSWRlbnRpZmllcihuYW1lKTsKLSAgICBwcm9wID0gc3Rh
dGljX2Nhc3Q8RXdrX0pTX1Byb3BlcnR5Kj4oZWluYV9oYXNoX2ZpbmQob2JqLT5jbHMtPnByb3Bl
cnRpZXMsIHByb3BfbmFtZSkpOworICAgIHByb3AgPSBzdGF0aWNfY2FzdDxFd2tfSlNfUHJvcGVy
dHkqPihlaW5hX2hhc2hfZmluZChvYmplY3QtPmNscy0+cHJvcGVydGllcywgcHJvcF9uYW1lKSk7
CiAgICAgaWYgKHByb3AgJiYgcHJvcC0+c2V0KQotICAgICAgICBmYWlsID0gcHJvcC0+c2V0KG9i
aiwgcHJvcC0+bmFtZSwgdmFsdWUpOyAvLyBDbGFzcyBoYXMgcHJvcGVydHkgYW5kIHByb3BlcnR5
IGhhcyBzZXR0ZXIuCi0gICAgZWxzZSBpZiAob2JqLT5jbHMtPmRlZmF1bHRfcHJvcC5zZXQpCi0g
ICAgICAgIGZhaWwgPSBvYmotPmNscy0+ZGVmYXVsdF9wcm9wLnNldChvYmosIHByb3BfbmFtZSwg
dmFsdWUpOyAvLyBEZWZhdWx0IGdldHRlciBleGlzdHMuCisgICAgICAgIGZhaWwgPSBwcm9wLT5z
ZXQob2JqZWN0LCBwcm9wLT5uYW1lLCB2YWx1ZSk7IC8vIENsYXNzIGhhcyBwcm9wZXJ0eSBhbmQg
cHJvcGVydHkgaGFzIHNldHRlci4KKyAgICBlbHNlIGlmIChvYmplY3QtPmNscy0+ZGVmYXVsdF9w
cm9wLnNldCkKKyAgICAgICAgZmFpbCA9IG9iamVjdC0+Y2xzLT5kZWZhdWx0X3Byb3Auc2V0KG9i
amVjdCwgcHJvcF9uYW1lLCB2YWx1ZSk7IC8vIERlZmF1bHQgZ2V0dGVyIGV4aXN0cy4KICAgICBl
bHNlIHsgLy8gRmFsbGJhY2sgdG8gb2JqZWN0cyBoYXNoIG1hcC4KLSAgICAgICAgdm9pZCogb2xk
ID0gZWluYV9oYXNoX3NldChvYmotPnByb3BlcnRpZXMsIHByb3BfbmFtZSwgdmFsdWUpOworICAg
ICAgICB2b2lkKiBvbGQgPSBlaW5hX2hhc2hfc2V0KG9iamVjdC0+cHJvcGVydGllcywgcHJvcF9u
YW1lLCB2YWx1ZSk7CiAgICAgICAgIGZyZWUob2xkKTsKICAgICAgICAgZmFpbCA9IHRydWU7CiAg
ICAgfQpAQCAtMTg1LDEyICsxODUsMTIgQEAgc3RhdGljIGJvb2wgZXdrX2pzX3Byb3BlcnR5X3Nl
dChOUE9iamVjdCogbnBPYmplY3QsIE5QSWRlbnRpZmllciBuYW1lLCBjb25zdCBOUFYKIAogc3Rh
dGljIGJvb2wgZXdrX2pzX3Byb3BlcnR5X3JlbW92ZShOUE9iamVjdCogbnBPYmplY3QsIE5QSWRl
bnRpZmllciBuYW1lKQogewotICAgIEV3a19KU19PYmplY3QqIG9iaiA9IHJlaW50ZXJwcmV0X2Nh
c3Q8RXdrX0pTX09iamVjdCo+KG5wT2JqZWN0KTsKKyAgICBFd2tfSlNfT2JqZWN0KiBvYmplY3Qg
PSByZWludGVycHJldF9jYXN0PEV3a19KU19PYmplY3QqPihucE9iamVjdCk7CiAgICAgRXdrX0pT
X1Byb3BlcnR5KiBwcm9wOwogICAgIGJvb2wgZmFpbCA9IGZhbHNlOwogCiAgICAgRUlOQV9TQUZF
VFlfT05fTlVMTF9SRVRVUk5fVkFMKG5wT2JqZWN0LCBmYWxzZSk7Ci0gICAgRUlOQV9NQUdJQ19D
SEVDS19PUl9SRVRVUk4ob2JqLCBmYWxzZSk7CisgICAgRUlOQV9NQUdJQ19DSEVDS19PUl9SRVRV
Uk4ob2JqZWN0LCBmYWxzZSk7CiAKICAgICBpZiAoIV9OUE5fSWRlbnRpZmllcklzU3RyaW5nKG5h
bWUpKSB7CiAgICAgICAgIEVSUigiaW50IE5QSWRlbnRpZmllciBpcyBub3Qgc3VwcG9ydGVkLiIp
OwpAQCAtMTk4LDEzICsxOTgsMTMgQEAgc3RhdGljIGJvb2wgZXdrX2pzX3Byb3BlcnR5X3JlbW92
ZShOUE9iamVjdCogbnBPYmplY3QsIE5QSWRlbnRpZmllciBuYW1lKQogICAgIH0KIAogICAgIGNo
YXIqIHByb3BfbmFtZSA9IF9OUE5fVVRGOEZyb21JZGVudGlmaWVyKG5hbWUpOwotICAgIHByb3Ag
PSBzdGF0aWNfY2FzdDxFd2tfSlNfUHJvcGVydHkqPihlaW5hX2hhc2hfZmluZChvYmotPmNscy0+
cHJvcGVydGllcywgcHJvcF9uYW1lKSk7CisgICAgcHJvcCA9IHN0YXRpY19jYXN0PEV3a19KU19Q
cm9wZXJ0eSo+KGVpbmFfaGFzaF9maW5kKG9iamVjdC0+Y2xzLT5wcm9wZXJ0aWVzLCBwcm9wX25h
bWUpKTsKICAgICBpZiAocHJvcCAmJiBwcm9wLT5kZWwpCi0gICAgICAgIGZhaWwgPSBwcm9wLT5k
ZWwob2JqLCBwcm9wLT5uYW1lKTsgLy8gQ2xhc3MgaGFzIHByb3BlcnR5IGFuZCBwcm9wZXJ0eSBo
YXMgZ2V0dGVyLgotICAgIGVsc2UgaWYgKG9iai0+Y2xzLT5kZWZhdWx0X3Byb3AuZGVsKQotICAg
ICAgICBmYWlsID0gb2JqLT5jbHMtPmRlZmF1bHRfcHJvcC5kZWwob2JqLCBwcm9wX25hbWUpOwor
ICAgICAgICBmYWlsID0gcHJvcC0+ZGVsKG9iamVjdCwgcHJvcC0+bmFtZSk7IC8vIENsYXNzIGhh
cyBwcm9wZXJ0eSBhbmQgcHJvcGVydHkgaGFzIGdldHRlci4KKyAgICBlbHNlIGlmIChvYmplY3Qt
PmNscy0+ZGVmYXVsdF9wcm9wLmRlbCkKKyAgICAgICAgZmFpbCA9IG9iamVjdC0+Y2xzLT5kZWZh
dWx0X3Byb3AuZGVsKG9iamVjdCwgcHJvcF9uYW1lKTsKICAgICBlbHNlCi0gICAgICAgIGZhaWwg
PSBlaW5hX2hhc2hfZGVsKG9iai0+cHJvcGVydGllcywgcHJvcF9uYW1lLCAwKTsKKyAgICAgICAg
ZmFpbCA9IGVpbmFfaGFzaF9kZWwob2JqZWN0LT5wcm9wZXJ0aWVzLCBwcm9wX25hbWUsIDApOwog
CiAgICAgZnJlZShwcm9wX25hbWUpOwogICAgIHJldHVybiBmYWlsOwpAQCAtMjEyLDIyICsyMTIs
MjIgQEAgc3RhdGljIGJvb2wgZXdrX2pzX3Byb3BlcnR5X3JlbW92ZShOUE9iamVjdCogbnBPYmpl
Y3QsIE5QSWRlbnRpZmllciBuYW1lKQogCiBzdGF0aWMgYm9vbCBld2tfanNfcHJvcGVydGllc19l
bnVtZXJhdGUoTlBPYmplY3QqIG5wT2JqZWN0LCBOUElkZW50aWZpZXIqKiB2YWx1ZSwgdWludDMy
X3QqIGNvdW50KQogewotICAgIEV3a19KU19PYmplY3QqIG9iaiA9IHJlaW50ZXJwcmV0X2Nhc3Q8
RXdrX0pTX09iamVjdCo+KG5wT2JqZWN0KTsKKyAgICBFd2tfSlNfT2JqZWN0KiBvYmplY3QgPSBy
ZWludGVycHJldF9jYXN0PEV3a19KU19PYmplY3QqPihucE9iamVjdCk7CiAgICAgRWluYV9JdGVy
YXRvciogaXQ7CiAgICAgY2hhcioga2V5OwogICAgIGludCBpID0gMDsKIAogICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOX1ZBTChucE9iamVjdCwgZmFsc2UpOwotICAgIEVJTkFfTUFHSUNf
Q0hFQ0tfT1JfUkVUVVJOKG9iaiwgZmFsc2UpOworICAgIEVJTkFfTUFHSUNfQ0hFQ0tfT1JfUkVU
VVJOKG9iamVjdCwgZmFsc2UpOwogCi0gICAgKmNvdW50ID0gZWluYV9oYXNoX3BvcHVsYXRpb24o
b2JqLT5wcm9wZXJ0aWVzKTsKKyAgICAqY291bnQgPSBlaW5hX2hhc2hfcG9wdWxhdGlvbihvYmpl
Y3QtPnByb3BlcnRpZXMpOwogICAgICp2YWx1ZSA9IHN0YXRpY19jYXN0PE5QSWRlbnRpZmllcio+
KG1hbGxvYyhzaXplb2YoTlBJZGVudGlmaWVyKSAqICpjb3VudCkpOwogICAgIGlmICghKnZhbHVl
KSB7CiAgICAgICAgIEVSUigiQ291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgTlBJZGVudGlm
aWVyIik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKLSAgICBpdCA9IGVpbmFfaGFz
aF9pdGVyYXRvcl9rZXlfbmV3KG9iai0+cHJvcGVydGllcyk7CisgICAgaXQgPSBlaW5hX2hhc2hf
aXRlcmF0b3Jfa2V5X25ldyhvYmplY3QtPnByb3BlcnRpZXMpOwogICAgIEVJTkFfSVRFUkFUT1Jf
Rk9SRUFDSChpdCwga2V5KQogICAgICAgICAoKnZhbHVlKVtpKytdID0gX05QTl9HZXRTdHJpbmdJ
ZGVudGlmaWVyKGtleSk7CiAKQEAgLTIzNywzNCArMjM3LDM0IEBAIHN0YXRpYyBib29sIGV3a19q
c19wcm9wZXJ0aWVzX2VudW1lcmF0ZShOUE9iamVjdCogbnBPYmplY3QsIE5QSWRlbnRpZmllcioq
IHZhbHVlCiAKIHN0YXRpYyBib29sIGV3a19qc19tZXRob2RfaGFzKE5QT2JqZWN0KiBucE9iamVj
dCwgTlBJZGVudGlmaWVyIG5hbWUpCiB7Ci0gICAgRXdrX0pTX09iamVjdCogb2JqID0gcmVpbnRl
cnByZXRfY2FzdDxFd2tfSlNfT2JqZWN0Kj4obnBPYmplY3QpOworICAgIEV3a19KU19PYmplY3Qq
IG9iamVjdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8RXdrX0pTX09iamVjdCo+KG5wT2JqZWN0KTsKIAog
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChucE9iamVjdCwgZmFsc2UpOwotICAg
IEVJTkFfTUFHSUNfQ0hFQ0tfT1JfUkVUVVJOKG9iaiwgZmFsc2UpOworICAgIEVJTkFfTUFHSUNf
Q0hFQ0tfT1JfUkVUVVJOKG9iamVjdCwgZmFsc2UpOwogCiAgICAgaWYgKCFfTlBOX0lkZW50aWZp
ZXJJc1N0cmluZyhuYW1lKSkgewogICAgICAgICBFUlIoImludCBOUElkZW50aWZpZXIgaXMgbm90
IHN1cHBvcnRlZC4iKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICByZXR1cm4g
ZWluYV9oYXNoX2ZpbmQob2JqLT5jbHMtPm1ldGhvZHMsIG5hbWUpOyAvLyBSZXR1cm5zIHBvaW50
ZXIgaWYgZm91bmQodHJ1ZSksIDAoZmFsc2UpIG90aGVyd2lzZS4KKyAgICByZXR1cm4gZWluYV9o
YXNoX2ZpbmQob2JqZWN0LT5jbHMtPm1ldGhvZHMsIG5hbWUpOyAvLyBSZXR1cm5zIHBvaW50ZXIg
aWYgZm91bmQodHJ1ZSksIDAoZmFsc2UpIG90aGVyd2lzZS4KIH0KIAogc3RhdGljIGJvb2wgZXdr
X2pzX21ldGhvZF9pbnZva2UoTlBPYmplY3QqIG5wT2JqZWN0LCBOUElkZW50aWZpZXIgbmFtZSwg
Y29uc3QgTlBWYXJpYW50KiBucEFyZ3MsIHVpbnQzMl90IG5wQXJnQ291bnQsIE5QVmFyaWFudCog
cmVzdWx0KQogewotICAgIEV3a19KU19PYmplY3QqIG9iaiA9IHJlaW50ZXJwcmV0X2Nhc3Q8RXdr
X0pTX09iamVjdCo+KG5wT2JqZWN0KTsKKyAgICBFd2tfSlNfT2JqZWN0KiBvYmplY3QgPSByZWlu
dGVycHJldF9jYXN0PEV3a19KU19PYmplY3QqPihucE9iamVjdCk7CiAgICAgRXdrX0pTX01ldGhv
ZCogbWV0aG9kOwogICAgIEV3a19KU19WYXJpYW50KiBhcmdzOwogICAgIEV3a19KU19WYXJpYW50
KiByZXRfdmFsOwogCiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKG5wT2JqZWN0
LCBmYWxzZSk7Ci0gICAgRUlOQV9NQUdJQ19DSEVDS19PUl9SRVRVUk4ob2JqLCBmYWxzZSk7Cisg
ICAgRUlOQV9NQUdJQ19DSEVDS19PUl9SRVRVUk4ob2JqZWN0LCBmYWxzZSk7CiAKICAgICBpZiAo
IV9OUE5fSWRlbnRpZmllcklzU3RyaW5nKG5hbWUpKSB7CiAgICAgICAgIEVSUigiaW50IE5QSWRl
bnRpZmllciBpcyBub3Qgc3VwcG9ydGVkLiIpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQogCi0gICAgbWV0aG9kID0gc3RhdGljX2Nhc3Q8RXdrX0pTX01ldGhvZCo+KGVpbmFfaGFzaF9m
aW5kKG9iai0+Y2xzLT5tZXRob2RzLCBuYW1lKSk7CisgICAgbWV0aG9kID0gc3RhdGljX2Nhc3Q8
RXdrX0pTX01ldGhvZCo+KGVpbmFfaGFzaF9maW5kKG9iamVjdC0+Y2xzLT5tZXRob2RzLCBuYW1l
KSk7CiAgICAgaWYgKCFtZXRob2QpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApAQCAtMjc2LDcg
KzI3Niw3IEBAIHN0YXRpYyBib29sIGV3a19qc19tZXRob2RfaW52b2tlKE5QT2JqZWN0KiBucE9i
amVjdCwgTlBJZGVudGlmaWVyIG5hbWUsIGNvbnN0IE5QCiAKICAgICBmb3IgKHVpbnQzMl90IGkg
PSAwOyBpIDwgbnBBcmdDb3VudDsgaSsrKQogICAgICAgICBld2tfanNfbnB2YXJpYW50X3RvX3Zh
cmlhbnQoJmFyZ3NbaV0sICZucEFyZ3NbaV0pOwotICAgIHJldF92YWwgPSBtZXRob2QtPmludm9r
ZShvYmosIGFyZ3MsIG5wQXJnQ291bnQpOworICAgIHJldF92YWwgPSBtZXRob2QtPmludm9rZShv
YmplY3QsIGFyZ3MsIG5wQXJnQ291bnQpOwogICAgIGV3a19qc192YXJpYW50X3RvX25wdmFyaWFu
dChyZXRfdmFsLCByZXN1bHQpOwogCiAgICAgZXdrX2pzX3ZhcmlhbnRfZnJlZShyZXRfdmFsKTsK
QEAgLTM5Myw3ICszOTMsNyBAQCBzdGF0aWMgRXdrX0pTX09iamVjdCogZXdrX2pzX25wb2JqZWN0
X3RvX29iamVjdChOUE9iamVjdCogbnBPYmplY3QpCiAgICAgTlBJZGVudGlmaWVyKiB2YWx1ZXM7
CiAgICAgdWludDMyX3QgbnBfcHJvcHNfY291bnQ7CiAgICAgRXdrX0pTX0NsYXNzKiBjbHM7Ci0g
ICAgRXdrX0pTX09iamVjdCogb2JqOworICAgIEV3a19KU19PYmplY3QqIG9iamVjdDsKICAgICBF
aW5hX0l0ZXJhdG9yKiBpdDsKICAgICBFd2tfSlNfUHJvcGVydHkqIHByb3A7CiAgICAgSmF2YVNj
cmlwdE9iamVjdCoganNvOwpAQCAtNDM2LDQyICs0MzYsNDIgQEAgc3RhdGljIEV3a19KU19PYmpl
Y3QqIGV3a19qc19ucG9iamVjdF90b19vYmplY3QoTlBPYmplY3QqIG5wT2JqZWN0KQogICAgIH0K
IAogICAgIC8vIENhbid0IHVzZSBld2tfanNfb2JqZWN0X25ldyhjbHMpIGJlY2F1c2UgaXQgZXhw
ZWN0cyBjbHMtPm1ldGEgdG8gZXhpc3QuCi0gICAgb2JqID0gc3RhdGljX2Nhc3Q8RXdrX0pTX09i
amVjdCo+KG1hbGxvYyhzaXplb2YoRXdrX0pTX09iamVjdCkpKTsKLSAgICBpZiAoIW9iaikgewor
ICAgIG9iamVjdCA9IHN0YXRpY19jYXN0PEV3a19KU19PYmplY3QqPihtYWxsb2Moc2l6ZW9mKEV3
a19KU19PYmplY3QpKSk7CisgICAgaWYgKCFvYmplY3QpIHsKICAgICAgICAgRVJSKCJDb3VsZCBu
b3QgYWxsb2NhdGUgbWVtb3J5IGZvciBld2tfanNfb2JqZWN0Iik7CiAgICAgICAgIGdvdG8gZXJy
b3I7CiAgICAgfQogCiAgICAgZnJlZSh2YWx1ZXMpOwotICAgIEVJTkFfTUFHSUNfU0VUKG9iaiwg
RVdLX0pTX09CSkVDVF9NQUdJQyk7Ci0gICAgb2JqLT5uYW1lID0gMDsKLSAgICBvYmotPmNscyA9
IGNsczsKLSAgICBvYmotPnZpZXcgPSAwOworICAgIEVJTkFfTUFHSUNfU0VUKG9iamVjdCwgRVdL
X0pTX09CSkVDVF9NQUdJQyk7CisgICAgb2JqZWN0LT5uYW1lID0gMDsKKyAgICBvYmplY3QtPmNs
cyA9IGNsczsKKyAgICBvYmplY3QtPnZpZXcgPSAwOwogCiAgICAganNvID0gcmVpbnRlcnByZXRf
Y2FzdDxKYXZhU2NyaXB0T2JqZWN0Kj4obnBPYmplY3QpOwogICAgIGlmICghc3RyY21wKCJBcnJh
eSIsIGpzby0+aW1wLT5jbGFzc05hbWUoKS5hc2NpaSgpLmRhdGEoKSkpCi0gICAgICAgIG9iai0+
dHlwZSA9IEVXS19KU19PQkpFQ1RfQVJSQVk7CisgICAgICAgIG9iamVjdC0+dHlwZSA9IEVXS19K
U19PQkpFQ1RfQVJSQVk7CiAgICAgZWxzZSBpZiAoIXN0cmNtcCgiRnVuY3Rpb24iLCBqc28tPmlt
cC0+Y2xhc3NOYW1lKCkuYXNjaWkoKS5kYXRhKCkpKQotICAgICAgICBvYmotPnR5cGUgPSBFV0tf
SlNfT0JKRUNUX0ZVTkNUSU9OOworICAgICAgICBvYmplY3QtPnR5cGUgPSBFV0tfSlNfT0JKRUNU
X0ZVTkNUSU9OOwogICAgIGVsc2UKLSAgICAgICAgb2JqLT50eXBlID0gRVdLX0pTX09CSkVDVF9P
QkpFQ1Q7CisgICAgICAgIG9iamVjdC0+dHlwZSA9IEVXS19KU19PQkpFQ1RfT0JKRUNUOwogCiAg
ICAgaWYgKGVpbmFfaGFzaF9wb3B1bGF0aW9uKGNscy0+cHJvcGVydGllcykgPCAyNSkKLSAgICAg
ICAgb2JqLT5wcm9wZXJ0aWVzID0gZWluYV9oYXNoX3N0cmluZ19zbWFsbF9uZXcoMCk7CisgICAg
ICAgIG9iamVjdC0+cHJvcGVydGllcyA9IGVpbmFfaGFzaF9zdHJpbmdfc21hbGxfbmV3KDApOwog
ICAgIGVsc2UKLSAgICAgICAgb2JqLT5wcm9wZXJ0aWVzID0gZWluYV9oYXNoX3N0cmluZ19zdXBl
cmZhc3RfbmV3KDApOworICAgICAgICBvYmplY3QtPnByb3BlcnRpZXMgPSBlaW5hX2hhc2hfc3Ry
aW5nX3N1cGVyZmFzdF9uZXcoMCk7CiAKICAgICBpdCA9IGVpbmFfaGFzaF9pdGVyYXRvcl9kYXRh
X25ldyhjbHMtPnByb3BlcnRpZXMpOwogICAgIEVJTkFfSVRFUkFUT1JfRk9SRUFDSChpdCwgcHJv
cCkgewogICAgICAgICBjb25zdCBjaGFyKiBrZXkgPSBwcm9wLT5uYW1lOwogICAgICAgICBFd2tf
SlNfVmFyaWFudCogdmFsdWUgPSAmcHJvcC0+dmFsdWU7Ci0gICAgICAgIGVpbmFfaGFzaF9hZGQo
b2JqLT5wcm9wZXJ0aWVzLCBrZXksIHZhbHVlKTsKKyAgICAgICAgZWluYV9oYXNoX2FkZChvYmpl
Y3QtPnByb3BlcnRpZXMsIGtleSwgdmFsdWUpOwogICAgIH0KIAogICAgIGVpbmFfaXRlcmF0b3Jf
ZnJlZShpdCk7Ci0gICAgb2JqLT5iYXNlID0gKnJlaW50ZXJwcmV0X2Nhc3Q8SmF2YVNjcmlwdE9i
amVjdCo+KG5wT2JqZWN0KTsKKyAgICBvYmplY3QtPmJhc2UgPSAqcmVpbnRlcnByZXRfY2FzdDxK
YXZhU2NyaXB0T2JqZWN0Kj4obnBPYmplY3QpOwogCi0gICAgcmV0dXJuIG9iajsKKyAgICByZXR1
cm4gb2JqZWN0OwogCiBlcnJvcjoKICAgICBld2tfanNfY2xhc3NfZnJlZShjbHMpOwpAQCAtNTI3
LDM3ICs1MjcsMzcgQEAgc3RhdGljIEVpbmFfQm9vbCBld2tfanNfbnB2YXJpYW50X3RvX3Zhcmlh
bnQoRXdrX0pTX1ZhcmlhbnQqIGRhdGEsIGNvbnN0IE5QVmFyaWEKIAogRXdrX0pTX09iamVjdCog
ZXdrX2pzX29iamVjdF9uZXcoY29uc3QgRXdrX0pTX0NsYXNzX01ldGEqIGpzTWV0YUNsYXNzKQog
ewotICAgIEV3a19KU19PYmplY3QqIG9iajsKKyAgICBFd2tfSlNfT2JqZWN0KiBvYmplY3Q7CiAK
ICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoanNNZXRhQ2xhc3MsIDApOwogCi0g
ICAgb2JqID0gc3RhdGljX2Nhc3Q8RXdrX0pTX09iamVjdCo+KG1hbGxvYyhzaXplb2YoRXdrX0pT
X09iamVjdCkpKTsKLSAgICBpZiAoIW9iaikgeworICAgIG9iamVjdCA9IHN0YXRpY19jYXN0PEV3
a19KU19PYmplY3QqPihtYWxsb2Moc2l6ZW9mKEV3a19KU19PYmplY3QpKSk7CisgICAgaWYgKCFv
YmplY3QpIHsKICAgICAgICAgRVJSKCJDb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBld2tf
anNfb2JqZWN0Iik7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIEVJTkFfTUFHSUNf
U0VUKG9iaiwgRVdLX0pTX09CSkVDVF9NQUdJQyk7Ci0gICAgb2JqLT5jbHMgPSBld2tfanNfY2xh
c3NfbmV3KGpzTWV0YUNsYXNzKTsKLSAgICBvYmotPnZpZXcgPSAwOwotICAgIG9iai0+bmFtZSA9
IDA7Ci0gICAgb2JqLT50eXBlID0gRVdLX0pTX09CSkVDVF9PQkpFQ1Q7CisgICAgRUlOQV9NQUdJ
Q19TRVQob2JqZWN0LCBFV0tfSlNfT0JKRUNUX01BR0lDKTsKKyAgICBvYmplY3QtPmNscyA9IGV3
a19qc19jbGFzc19uZXcoanNNZXRhQ2xhc3MpOworICAgIG9iamVjdC0+dmlldyA9IDA7CisgICAg
b2JqZWN0LT5uYW1lID0gMDsKKyAgICBvYmplY3QtPnR5cGUgPSBFV0tfSlNfT0JKRUNUX09CSkVD
VDsKIAotICAgIGlmIChlaW5hX2hhc2hfcG9wdWxhdGlvbihvYmotPmNscy0+cHJvcGVydGllcykg
PCAyNSkKLSAgICAgICAgb2JqLT5wcm9wZXJ0aWVzID0gZWluYV9oYXNoX3N0cmluZ19zbWFsbF9u
ZXcocmVpbnRlcnByZXRfY2FzdDxFaW5hX0ZyZWVfQ2I+KGV3a19qc192YXJpYW50X2ZyZWUpKTsK
KyAgICBpZiAoZWluYV9oYXNoX3BvcHVsYXRpb24ob2JqZWN0LT5jbHMtPnByb3BlcnRpZXMpIDwg
MjUpCisgICAgICAgIG9iamVjdC0+cHJvcGVydGllcyA9IGVpbmFfaGFzaF9zdHJpbmdfc21hbGxf
bmV3KHJlaW50ZXJwcmV0X2Nhc3Q8RWluYV9GcmVlX0NiPihld2tfanNfdmFyaWFudF9mcmVlKSk7
CiAgICAgZWxzZQotICAgICAgICBvYmotPnByb3BlcnRpZXMgPSBlaW5hX2hhc2hfc3RyaW5nX3N1
cGVyZmFzdF9uZXcocmVpbnRlcnByZXRfY2FzdDxFaW5hX0ZyZWVfQ2I+KGV3a19qc192YXJpYW50
X2ZyZWUpKTsKKyAgICAgICAgb2JqZWN0LT5wcm9wZXJ0aWVzID0gZWluYV9oYXNoX3N0cmluZ19z
dXBlcmZhc3RfbmV3KHJlaW50ZXJwcmV0X2Nhc3Q8RWluYV9GcmVlX0NiPihld2tfanNfdmFyaWFu
dF9mcmVlKSk7CiAKLSAgICBmb3IgKGludCBpID0gMDsgb2JqLT5jbHMtPm1ldGEtPnByb3BlcnRp
ZXMgJiYgb2JqLT5jbHMtPm1ldGEtPnByb3BlcnRpZXNbaV0ubmFtZTsgaSsrKSB7Ci0gICAgICAg
IEV3a19KU19Qcm9wZXJ0eSBwcm9wID0gb2JqLT5jbHMtPm1ldGEtPnByb3BlcnRpZXNbaV07Ci0g
ICAgICAgIGNvbnN0IGNoYXIqIGtleSA9IG9iai0+Y2xzLT5tZXRhLT5wcm9wZXJ0aWVzW2ldLm5h
bWU7CisgICAgZm9yIChpbnQgaSA9IDA7IG9iamVjdC0+Y2xzLT5tZXRhLT5wcm9wZXJ0aWVzICYm
IG9iamVjdC0+Y2xzLT5tZXRhLT5wcm9wZXJ0aWVzW2ldLm5hbWU7IGkrKykgeworICAgICAgICBF
d2tfSlNfUHJvcGVydHkgcHJvcCA9IG9iamVjdC0+Y2xzLT5tZXRhLT5wcm9wZXJ0aWVzW2ldOwor
ICAgICAgICBjb25zdCBjaGFyKiBrZXkgPSBvYmplY3QtPmNscy0+bWV0YS0+cHJvcGVydGllc1tp
XS5uYW1lOwogICAgICAgICBFd2tfSlNfVmFyaWFudCogdmFsdWUgPSBzdGF0aWNfY2FzdDxFd2tf
SlNfVmFyaWFudCo+KG1hbGxvYyhzaXplb2YoRXdrX0pTX1ZhcmlhbnQpKSk7CiAgICAgICAgIGlm
ICghdmFsdWUpIHsKICAgICAgICAgICAgIEVSUigiQ291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSBm
b3IgZXdrX2pzX3ZhcmlhbnQiKTsKICAgICAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgICAgIH0K
ICAgICAgICAgaWYgKHByb3AuZ2V0KQotICAgICAgICAgICAgcHJvcC5nZXQob2JqLCBrZXksIHZh
bHVlKTsKKyAgICAgICAgICAgIHByb3AuZ2V0KG9iamVjdCwga2V5LCB2YWx1ZSk7CiAgICAgICAg
IGVsc2UgewogICAgICAgICAgICAgdmFsdWUtPnR5cGUgPSBwcm9wLnZhbHVlLnR5cGU7CiAgICAg
ICAgICAgICBzd2l0Y2ggKHZhbHVlLT50eXBlKSB7CkBAIC01ODIsMTUgKzU4MiwxNSBAQCBFd2tf
SlNfT2JqZWN0KiBld2tfanNfb2JqZWN0X25ldyhjb25zdCBFd2tfSlNfQ2xhc3NfTWV0YSoganNN
ZXRhQ2xhc3MpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KLSAgICAgICAgZWluYV9oYXNoX2FkZChvYmotPnByb3BlcnRpZXMsIGtleSwgdmFsdWUpOwor
ICAgICAgICBlaW5hX2hhc2hfYWRkKG9iamVjdC0+cHJvcGVydGllcywga2V5LCB2YWx1ZSk7CiAg
ICAgfQogCi0gICAgb2JqLT5iYXNlLm9iamVjdC5yZWZlcmVuY2VDb3VudCA9IDE7Ci0gICAgb2Jq
LT5iYXNlLm9iamVjdC5fY2xhc3MgPSAmRVdLX05QQ0xBU1M7Ci0gICAgcmV0dXJuIG9iajsKKyAg
ICBvYmplY3QtPmJhc2Uub2JqZWN0LnJlZmVyZW5jZUNvdW50ID0gMTsKKyAgICBvYmplY3QtPmJh
c2Uub2JqZWN0Ll9jbGFzcyA9ICZFV0tfTlBDTEFTUzsKKyAgICByZXR1cm4gb2JqZWN0OwogCiBl
cnJvcjoKLSAgICBld2tfanNfb2JqZWN0X2ZyZWUob2JqKTsKKyAgICBld2tfanNfb2JqZWN0X2Zy
ZWUob2JqZWN0KTsKICAgICByZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9lZmwvZXdrL2V3a19tYWluLmNwcCBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfbWFpbi5j
cHAKaW5kZXggZWIwMzIzMzI0YmFlODFmZTEyOGQ2OGI4MTdhOWViYTY4ZjFmNGE2Yi4uYzUyYzAy
YjA5ZjkxNTM2YTMyMjgxODg2ZGViM2ZiYjM1YmUwM2ViMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9lZmwvZXdrL2V3a19tYWluLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdr
X21haW4uY3BwCkBAIC01Nyw3ICs1Nyw3IEBACiAjaW5jbHVkZSA8bGlic291cC9zb3VwLmg+CiAj
ZW5kaWYKIAotc3RhdGljIGludCBfZXdrX2luaXRfY291bnQgPSAwOworc3RhdGljIGludCBfZXdr
SW5pdENvdW50ID0gMDsKIAogLyoqCiAgKiBcdmFyICAgICBfZXdrX2xvZ19kb20KQEAgLTY5LDgg
KzY5LDggQEAgc3RhdGljIEVpbmFfQm9vbCBfZXdrX2luaXRfYm9keSh2b2lkKTsKIAogaW50IGV3
a19pbml0KHZvaWQpCiB7Ci0gICAgaWYgKF9ld2tfaW5pdF9jb3VudCkKLSAgICAgICAgcmV0dXJu
ICsrX2V3a19pbml0X2NvdW50OworICAgIGlmIChfZXdrSW5pdENvdW50KQorICAgICAgICByZXR1
cm4gKytfZXdrSW5pdENvdW50OwogCiAgICAgaWYgKCFlaW5hX2luaXQoKSkKICAgICAgICAgZ290
byBlcnJvcl9laW5hOwpAQCAtMTA2LDcgKzEwNiw3IEBAIGludCBld2tfaW5pdCh2b2lkKQogICAg
ICAgICBnb3RvIGVycm9yX2VkamU7CiAgICAgfQogCi0gICAgcmV0dXJuICsrX2V3a19pbml0X2Nv
dW50OworICAgIHJldHVybiArK19ld2tJbml0Q291bnQ7CiAKIGVycm9yX2VkamU6CiAgICAgZWNv
cmVfZXZhc19zaHV0ZG93bigpOwpAQCAtMTI1LDkgKzEyNSw5IEBAIGVycm9yX2VpbmE6CiAKIGlu
dCBld2tfc2h1dGRvd24odm9pZCkKIHsKLSAgICBfZXdrX2luaXRfY291bnQtLTsKLSAgICBpZiAo
X2V3a19pbml0X2NvdW50KQotICAgICAgICByZXR1cm4gX2V3a19pbml0X2NvdW50OworICAgIF9l
d2tJbml0Q291bnQtLTsKKyAgICBpZiAoX2V3a0luaXRDb3VudCkKKyAgICAgICAgcmV0dXJuIF9l
d2tJbml0Q291bnQ7CiAKICAgICBlY29yZV9ldmFzX3NodXRkb3duKCk7CiAgICAgZWNvcmVfc2h1
dGRvd24oKTsKQEAgLTE3OSwxMCArMTc5LDEwIEBAIEVpbmFfQm9vbCBfZXdrX2luaXRfYm9keSh2
b2lkKQogICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKICAgICB9CiAKLSAgICBXVEY6OlN0cmlu
ZyB3a2RpciA9IGhvbWUgKyAiLy53ZWJraXQiOwotICAgIGlmIChXZWJDb3JlOjptYWtlQWxsRGly
ZWN0b3JpZXMod2tkaXIpKSB7Ci0gICAgICAgIGV3a19zZXR0aW5nc193ZWJfZGF0YWJhc2VfcGF0
aF9zZXQod2tkaXIudXRmOCgpLmRhdGEoKSk7Ci0gICAgICAgIGV3a19zZXR0aW5nc19jYWNoZV9k
aXJlY3RvcnlfcGF0aF9zZXQod2tkaXIudXRmOCgpLmRhdGEoKSk7CisgICAgV1RGOjpTdHJpbmcg
d2Via2l0RGlyZWN0b3J5ID0gaG9tZSArICIvLndlYmtpdCI7CisgICAgaWYgKFdlYkNvcmU6Om1h
a2VBbGxEaXJlY3Rvcmllcyh3ZWJraXREaXJlY3RvcnkpKSB7CisgICAgICAgIGV3a19zZXR0aW5n
c193ZWJfZGF0YWJhc2VfcGF0aF9zZXQod2Via2l0RGlyZWN0b3J5LnV0ZjgoKS5kYXRhKCkpOwor
ICAgICAgICBld2tfc2V0dGluZ3NfY2FjaGVfZGlyZWN0b3J5X3BhdGhfc2V0KHdlYmtpdERpcmVj
dG9yeS51dGY4KCkuZGF0YSgpKTsKICAgICB9CiAKICAgICAvLyBUT0RPOiB0aGlzIHNob3VsZCBt
b3ZlIHRvIFdlYkNvcmUsIGFscmVhZHkgcmVwb3J0ZWQgdG8gd2Via2l0LWd0ayBmb2xrczoKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfc2V0dGluZ3MuY3BwIGIvU291cmNl
L1dlYktpdC9lZmwvZXdrL2V3a19zZXR0aW5ncy5jcHAKaW5kZXggZjBiYTZlYmNiMmY3ZTVkYzEx
MWZlYzQ1YjVmNmNjZDUwMzk4M2VhNi4uNjRmMTRmODU0YzNkNzBhM2JkYTgwYmIxNjRjODZjZDEx
Y2U2ZjBlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19zZXR0aW5ncy5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19zZXR0aW5ncy5jcHAKQEAgLTU2LDI2
ICs1NiwyNiBAQCBzdGF0aWMgdWludDY0X3QgX2V3a19kZWZhdWx0X3dlYl9kYXRhYmFzZV9xdW90
YSA9IDEgKiAxMDI0ICogMTAyNDsKIAogc3RhdGljIFdURjo6U3RyaW5nIF9ld2tfc2V0dGluZ3Nf
d2Via2l0X3BsYXRmb3JtX2dldCgpCiB7Ci0gICAgV1RGOjpTdHJpbmcgdWFfcGxhdGZvcm07Cisg
ICAgV1RGOjpTdHJpbmcgdWFQbGF0Zm9ybTsKICNpZiBQTEFURk9STShYMTEpCi0gICAgdWFfcGxh
dGZvcm0gPSAiWDExIjsKKyAgICB1YVBsYXRmb3JtID0gIlgxMSI7CiAjZWxzZQotICAgIHVhX3Bs
YXRmb3JtID0gIlVua25vd24iOworICAgIHVhUGxhdGZvcm0gPSAiVW5rbm93biI7CiAjZW5kaWYK
LSAgICByZXR1cm4gdWFfcGxhdGZvcm07CisgICAgcmV0dXJuIHVhUGxhdGZvcm07CiB9CiAKIHN0
YXRpYyBXVEY6OlN0cmluZyBfZXdrX3NldHRpbmdzX3dlYmtpdF9vc192ZXJzaW9uX2dldCgpCiB7
Ci0gICAgV1RGOjpTdHJpbmcgdWFfb3NfdmVyc2lvbjsKKyAgICBXVEY6OlN0cmluZyB1YU9zVmVy
c2lvbjsKICAgICBzdHJ1Y3QgdXRzbmFtZSBuYW1lOwogCiAgICAgaWYgKHVuYW1lKCZuYW1lKSAh
PSAtMSkKLSAgICAgICAgdWFfb3NfdmVyc2lvbiA9IG1ha2VTdHJpbmcobmFtZS5zeXNuYW1lLCAn
ICcsIG5hbWUubWFjaGluZSk7CisgICAgICAgIHVhT3NWZXJzaW9uID0gbWFrZVN0cmluZyhuYW1l
LnN5c25hbWUsICcgJywgbmFtZS5tYWNoaW5lKTsKICAgICBlbHNlCi0gICAgICAgIHVhX29zX3Zl
cnNpb24gPSAiVW5rbm93biI7CisgICAgICAgIHVhT3NWZXJzaW9uID0gIlVua25vd24iOwogCi0g
ICAgcmV0dXJuIHVhX29zX3ZlcnNpb247CisgICAgcmV0dXJuIHVhT3NWZXJzaW9uOwogfQogCiB1
aW50NjRfdCBld2tfc2V0dGluZ3Nfd2ViX2RhdGFiYXNlX2RlZmF1bHRfcXVvdGFfZ2V0KCkKQEAg
LTI0NSwxMCArMjQ1LDEwIEBAIHZvaWQgZXdrX3NldHRpbmdzX3JlcGFpbnRfdGhyb3R0bGluZ19z
ZXQoZG91YmxlIGRlZmVycmVkUmVwYWludERlbGF5LCBkb3VibGUgaW5pCiAgKi8KIGNvbnN0IGNo
YXIqIGV3a19zZXR0aW5nc19kZWZhdWx0X3VzZXJfYWdlbnRfZ2V0KHZvaWQpCiB7Ci0gICAgV1RG
OjpTdHJpbmcgdWFfdmVyc2lvbiA9IG1ha2VTdHJpbmcoU3RyaW5nOjpudW1iZXIoV0VCS0lUX1VT
RVJfQUdFTlRfTUFKT1JfVkVSU0lPTiksICcuJywgU3RyaW5nOjpudW1iZXIoV0VCS0lUX1VTRVJf
QUdFTlRfTUlOT1JfVkVSU0lPTiksICcrJyk7Ci0gICAgV1RGOjpTdHJpbmcgc3RhdGljX3VhID0g
bWFrZVN0cmluZygiTW96aWxsYS81LjAgKCIsIF9ld2tfc2V0dGluZ3Nfd2Via2l0X3BsYXRmb3Jt
X2dldCgpLCAiOyAiLCBfZXdrX3NldHRpbmdzX3dlYmtpdF9vc192ZXJzaW9uX2dldCgpLCAiKSBB
cHBsZVdlYktpdC8iLCB1YV92ZXJzaW9uKSArIG1ha2VTdHJpbmcoIiAoS0hUTUwsIGxpa2UgR2Vj
a28pIFZlcnNpb24vNS4wIFNhZmFyaS8iLCB1YV92ZXJzaW9uKTsKKyAgICBXVEY6OlN0cmluZyB1
YVZlcnNpb24gPSBtYWtlU3RyaW5nKFN0cmluZzo6bnVtYmVyKFdFQktJVF9VU0VSX0FHRU5UX01B
Sk9SX1ZFUlNJT04pLCAnLicsIFN0cmluZzo6bnVtYmVyKFdFQktJVF9VU0VSX0FHRU5UX01JTk9S
X1ZFUlNJT04pLCAnKycpOworICAgIFdURjo6U3RyaW5nIHN0YXRpY1VhID0gbWFrZVN0cmluZygi
TW96aWxsYS81LjAgKCIsIF9ld2tfc2V0dGluZ3Nfd2Via2l0X3BsYXRmb3JtX2dldCgpLCAiOyAi
LCBfZXdrX3NldHRpbmdzX3dlYmtpdF9vc192ZXJzaW9uX2dldCgpLCAiKSBBcHBsZVdlYktpdC8i
LCB1YVZlcnNpb24pICsgbWFrZVN0cmluZygiIChLSFRNTCwgbGlrZSBHZWNrbykgVmVyc2lvbi81
LjAgU2FmYXJpLyIsIHVhVmVyc2lvbik7CiAKLSAgICByZXR1cm4gZWluYV9zdHJpbmdzaGFyZV9h
ZGQoc3RhdGljX3VhLnV0ZjgoKS5kYXRhKCkpOworICAgIHJldHVybiBlaW5hX3N0cmluZ3NoYXJl
X2FkZChzdGF0aWNVYS51dGY4KCkuZGF0YSgpKTsKIH0KIAogRWluYV9Cb29sIGV3a19zZXR0aW5n
c19jYWNoZV9kaXJlY3RvcnlfcGF0aF9zZXQoY29uc3QgY2hhciogcGF0aCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfYmFja2luZ19zdG9yZS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmUuY3BwCmluZGV4IDc5NGE5
MGM1NzQ2ZjYwZTUyM2I2ZGU1ZTI1MmJiY2IwNTFiMDc1NjQuLjA1OGY2MDk0MDQ3YTQyYzk0YWI0
MjdlMjVmOTdhMzQxYjc5MDc1MGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3
a190aWxlZF9iYWNraW5nX3N0b3JlLmNwcApAQCAtNTUsMTQgKzU1LDE0IEBAIHN0cnVjdCBfRXdr
X1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSB7CiAKIHN0cnVjdCBfRXdrX1RpbGVkX0JhY2tpbmdf
U3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0IHsKICAgICBFSU5BX0lOTElTVDsKLSAgICB1bnNpZ25l
ZCBsb25nIGNvbCwgcm93OworICAgIHVuc2lnbmVkIGxvbmcgY29sdW1uLCByb3c7CiAgICAgZmxv
YXQgem9vbTsKIH07CiAKIHN0cnVjdCBfRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSB7CiAg
ICAgRXZhc19PYmplY3RfU21hcnRfQ2xpcHBlZF9EYXRhIGJhc2U7CiAgICAgRXZhc19PYmplY3Qq
IHNlbGY7Ci0gICAgRXZhc19PYmplY3QqIGNvbnRlbnRzX2NsaXBwZXI7CisgICAgRXZhc19PYmpl
Y3QqIGNvbnRlbnRzQ2xpcHBlcjsKICAgICBzdHJ1Y3QgewogICAgICAgICBFaW5hX0lubGlzdCoq
IGl0ZW1zOwogICAgICAgICBFdmFzX0Nvb3JkIHgsIHksIHdpZHRoLCBoZWlnaHQ7CkBAIC03MCw0
MiArNzAsNDIgQEAgc3RydWN0IF9Fd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhIHsKICAgICAg
ICAgc3RydWN0IHsKICAgICAgICAgICAgIEV2YXNfQ29vcmQgd2lkdGgsIGhlaWdodDsKICAgICAg
ICAgICAgIGZsb2F0IHpvb207Ci0gICAgICAgICAgICBFaW5hX0Jvb2wgem9vbV93ZWFrX3Ntb290
aF9zY2FsZSA6IDE7CisgICAgICAgICAgICBFaW5hX0Jvb2wgem9vbVdlYWtTbW9vdGhTY2FsZSA6
IDE7CiAgICAgICAgIH0gdGlsZTsKICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgIHN0cnVj
dCB7CiAgICAgICAgICAgICAgICAgRXZhc19Db29yZCB4LCB5OwotICAgICAgICAgICAgfSBjdXIs
IG9sZCwgYmFzZSwgem9vbV9jZW50ZXI7CisgICAgICAgICAgICB9IGN1ciwgb2xkLCBiYXNlLCB6
b29tQ2VudGVyOwogICAgICAgICB9IG9mZnNldDsKICAgICB9IHZpZXc7Ci0gICAgRXZhc19Db2xv
cnNwYWNlIGNzcGFjZTsKKyAgICBFdmFzX0NvbG9yc3BhY2UgY29sb3JTcGFjZTsKICAgICBzdHJ1
Y3QgewogICAgICAgICBFd2tfVGlsZV9NYXRyaXgqIG1hdHJpeDsKICAgICAgICAgc3RydWN0IHsK
LSAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgY29sLCByb3c7CisgICAgICAgICAgICB1bnNpZ25l
ZCBsb25nIGNvbHVtbiwgcm93OwogICAgICAgICB9IGJhc2U7CiAgICAgICAgIHN0cnVjdCB7Ci0g
ICAgICAgICAgICB1bnNpZ25lZCBsb25nIGNvbHMsIHJvd3M7Ci0gICAgICAgIH0gY3VyLCBvbGQ7
CisgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGNvbHVtbnMsIHJvd3M7CisgICAgICAgIH0gY3Vy
cmVudCwgb2xkOwogICAgICAgICBFdmFzX0Nvb3JkIHdpZHRoLCBoZWlnaHQ7CiAgICAgfSBtb2Rl
bDsKICAgICBzdHJ1Y3QgewotICAgICAgICBFaW5hX0Jvb2wgKCpjYikodm9pZCogZGF0YSwgRXdr
X1RpbGUqIHRpbGUsIGNvbnN0IEVpbmFfUmVjdGFuZ2xlKiBhcmVhKTsKKyAgICAgICAgRWluYV9C
b29sICgqY2FsbGJhY2spKHZvaWQqIGRhdGEsIEV3a19UaWxlKiB0aWxlLCBjb25zdCBFaW5hX1Jl
Y3RhbmdsZSogYXJlYSk7CiAgICAgICAgIHZvaWQqIGRhdGE7Ci0gICAgICAgIEVpbmFfSW5saXN0
KiBwcmVfcmVuZGVyX3JlcXVlc3RzOworICAgICAgICBFaW5hX0lubGlzdCogcHJlUmVuZGVyUmVx
dWVzdHM7CiAgICAgICAgIEVjb3JlX0lkbGVyKiBpZGxlcjsKICAgICAgICAgRWluYV9Cb29sIGRp
c2FibGVkOwogICAgICAgICBFaW5hX0Jvb2wgc3VzcGVuZCA6IDE7CiAgICAgfSByZW5kZXI7CiAg
ICAgc3RydWN0IHsKLSAgICAgICAgdm9pZCogKCpwcmVfY2IpKHZvaWQqIGRhdGEsIEV2YXNfT2Jq
ZWN0KiBld2tUaWxlKTsKLSAgICAgICAgdm9pZCogcHJlX2RhdGE7Ci0gICAgICAgIHZvaWQqICgq
cG9zdF9jYikodm9pZCogZGF0YSwgdm9pZCogcHJlX2RhdGEsIEV2YXNfT2JqZWN0KiBld2tUaWxl
KTsKLSAgICAgICAgdm9pZCogcG9zdF9kYXRhOworICAgICAgICB2b2lkKiAoKnByZUNhbGxiYWNr
KSh2b2lkKiBkYXRhLCBFdmFzX09iamVjdCogZXdrVGlsZSk7CisgICAgICAgIHZvaWQqIHByZURh
dGE7CisgICAgICAgIHZvaWQqICgqcG9zdENhbGxiYWNrKSh2b2lkKiBkYXRhLCB2b2lkKiBwcmVE
YXRhLCBFdmFzX09iamVjdCogZXdrVGlsZSk7CisgICAgICAgIHZvaWQqIHBvc3REYXRhOwogICAg
IH0gcHJvY2VzczsKICAgICBzdHJ1Y3QgewogICAgICAgICBFaW5hX0Jvb2wgYW55IDogMTsKLSAg
ICAgICAgRWluYV9Cb29sIHBvcyA6IDE7CisgICAgICAgIEVpbmFfQm9vbCBwb3NpdGlvbiA6IDE7
CiAgICAgICAgIEVpbmFfQm9vbCBzaXplIDogMTsKICAgICAgICAgRWluYV9Cb29sIG1vZGVsIDog
MTsKICAgICAgICAgRWluYV9Cb29sIG9mZnNldCA6IDE7CkBAIC0xNDAsMjMgKzE0MCwyMyBAQCBz
dGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3VwZGF0ZXNfcHJvY2Vz
cyhFd2tfVGlsZWRfQmFja2luZ19TdAogICAgIGlmIChwcml2LT5yZW5kZXIuc3VzcGVuZCB8fCAh
ZXZhc19vYmplY3RfdmlzaWJsZV9nZXQocHJpdi0+c2VsZikpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGlmIChwcml2LT5wcm9jZXNzLnByZV9jYikKLSAgICAgICAgZGF0YSA9IHByaXYtPnByb2Nl
c3MucHJlX2NiKHByaXYtPnByb2Nlc3MucHJlX2RhdGEsIHByaXYtPnNlbGYpOworICAgIGlmIChw
cml2LT5wcm9jZXNzLnByZUNhbGxiYWNrKQorICAgICAgICBkYXRhID0gcHJpdi0+cHJvY2Vzcy5w
cmVDYWxsYmFjayhwcml2LT5wcm9jZXNzLnByZURhdGEsIHByaXYtPnNlbGYpOwogCiAgICAgZXdr
X3RpbGVfbWF0cml4X3VwZGF0ZXNfcHJvY2Vzcyhwcml2LT5tb2RlbC5tYXRyaXgpOwogCi0gICAg
aWYgKHByaXYtPnByb2Nlc3MucG9zdF9jYikKLSAgICAgICAgcHJpdi0+cHJvY2Vzcy5wb3N0X2Ni
KHByaXYtPnByb2Nlc3MucG9zdF9kYXRhLCBkYXRhLCBwcml2LT5zZWxmKTsKKyAgICBpZiAocHJp
di0+cHJvY2Vzcy5wb3N0Q2FsbGJhY2spCisgICAgICAgIHByaXYtPnByb2Nlc3MucG9zdENhbGxi
YWNrKHByaXYtPnByb2Nlc3MucG9zdERhdGEsIGRhdGEsIHByaXYtPnNlbGYpOwogfQogCiBzdGF0
aWMgaW50IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9mbHVzaCh2b2lkKiBkYXRhKQogewogICAg
IEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYgPSBzdGF0aWNfY2FzdDxFd2tfVGls
ZWRfQmFja2luZ19TdG9yZV9EYXRhKj4oZGF0YSk7Ci0gICAgRXdrX1RpbGVfVW51c2VkX0NhY2hl
KiB0dWMgPSBld2tfdGlsZV9tYXRyaXhfdW51c2VkX2NhY2hlX2dldChwcml2LT5tb2RlbC5tYXRy
aXgpOworICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSogdGlsZWRVbnVzZWRDYWNoZSA9IGV3a190
aWxlX21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7CiAKLSAgICBp
ZiAodHVjKSB7CisgICAgaWYgKHRpbGVkVW51c2VkQ2FjaGUpIHsKICAgICAgICAgREJHKCJmbHVz
aCB1bnVzZWQgdGlsZSBjYWNoZS4iKTsKLSAgICAgICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2F1
dG9fZmx1c2godHVjKTsKKyAgICAgICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2F1dG9fZmx1c2go
dGlsZWRVbnVzZWRDYWNoZSk7CiAgICAgfSBlbHNlCiAgICAgICAgIEVSUigibm8gY2FjaGU/ISIp
OwogCkBAIC0yMjIsMjcgKzIyMiwyNyBAQCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfdGlsZV9hc3NvY2lhdGUoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YQogCiBzdGF0
aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9kaXNzb2NpYXRlKEV3a19UaWxl
ZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYsIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0q
IGl0ZW0sIGRvdWJsZSBsYXN0VXNlZCkKIHsKLSAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHR1
YzsKKyAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHRpbGVkVW51c2VkQ2FjaGU7CiAgICAgZXdr
X3RpbGVfaGlkZShpdGVtLT50aWxlKTsKICAgICBpZiAoIWV3a190aWxlX3Zpc2libGVfZ2V0KGl0
ZW0tPnRpbGUpKQogICAgICAgICBldmFzX29iamVjdF9zbWFydF9tZW1iZXJfZGVsKGl0ZW0tPnRp
bGUtPmltYWdlKTsKICAgICBld2tfdGlsZV9tYXRyaXhfdGlsZV9wdXQocHJpdi0+bW9kZWwubWF0
cml4LCBpdGVtLT50aWxlLCBsYXN0VXNlZCk7Ci0gICAgdHVjID0gZXdrX3RpbGVfbWF0cml4X3Vu
dXNlZF9jYWNoZV9nZXQocHJpdi0+bW9kZWwubWF0cml4KTsKLSAgICBld2tfdGlsZV91bnVzZWRf
Y2FjaGVfYXV0b19mbHVzaCh0dWMpOworICAgIHRpbGVkVW51c2VkQ2FjaGUgPSBld2tfdGlsZV9t
YXRyaXhfdW51c2VkX2NhY2hlX2dldChwcml2LT5tb2RlbC5tYXRyaXgpOworICAgIGV3a190aWxl
X3VudXNlZF9jYWNoZV9hdXRvX2ZsdXNoKHRpbGVkVW51c2VkQ2FjaGUpOwogCiAgICAgaXRlbS0+
dGlsZSA9IDA7CiB9CiAKIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxl
X2Rpc3NvY2lhdGVfYWxsKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYpCiB7Ci0g
ICAgRWluYV9Jbmxpc3QqIGl0OworICAgIEVpbmFfSW5saXN0KiBsaXN0OwogICAgIEV3a19UaWxl
ZF9CYWNraW5nX1N0b3JlX0l0ZW0qIGl0ZW07CiAgICAgaW50IGk7CiAgICAgZG91YmxlIGxhc3Rf
dXNlZCA9IGVjb3JlX2xvb3BfdGltZV9nZXQoKTsKIAogICAgIGZvciAoaSA9IDA7IGkgPCBwcml2
LT52aWV3LnJvd3M7IGkrKykgewotICAgICAgICBpdCA9IHByaXYtPnZpZXcuaXRlbXNbaV07Ci0g
ICAgICAgIEVJTkFfSU5MSVNUX0ZPUkVBQ0goaXQsIGl0ZW0pCisgICAgICAgIGxpc3QgPSBwcml2
LT52aWV3Lml0ZW1zW2ldOworICAgICAgICBFSU5BX0lOTElTVF9GT1JFQUNIKGxpc3QsIGl0ZW0p
CiAgICAgICAgICAgICBpZiAoaXRlbS0+dGlsZSkKICAgICAgICAgICAgICAgICBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfdGlsZV9kaXNzb2NpYXRlKHByaXYsIGl0ZW0sIGxhc3RfdXNlZCk7CiAg
ICAgfQpAQCAtMjUwLDkyICsyNTAsOTIgQEAgc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5n
X3N0b3JlX3RpbGVfZGlzc29jaWF0ZV9hbGwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmUKIAogc3Rh
dGljIGlubGluZSBFaW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJf
cmVxdWVzdF9hZGQoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdiwgdW5zaWduZWQg
bG9uZyBjb2x1bW4sIHVuc2lnbmVkIGxvbmcgcm93LCBmbG9hdCB6b29tLCBFd2tfVGlsZWRfQmFj
a2luZ19TdG9yZV9QcmVfUmVuZGVyX1ByaW9yaXR5IHByaW9yaXR5KQogewotICAgIEV3a19UaWxl
ZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUmVxdWVzdCogcjsKKyAgICBFd2tfVGlsZWRfQmFj
a2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3QqIHJlcXVlc3Q7CiAKLSAgICByID0gc3RhdGlj
X2Nhc3Q8RXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0Kj4obWFsbG9j
KHNpemVvZigqcikpKTsKLSAgICBpZiAoIXIpCisgICAgcmVxdWVzdCA9IHN0YXRpY19jYXN0PEV3
a19UaWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUmVxdWVzdCo+KG1hbGxvYyhzaXplb2Yo
KnJlcXVlc3QpKSk7CisgICAgaWYgKCFyZXF1ZXN0KQogICAgICAgICByZXR1cm4gRUlOQV9GQUxT
RTsKIAogICAgIGlmIChwcmlvcml0eSA9PSBQUkVfUkVOREVSX1BSSU9SSVRZX0hJR0gpCi0gICAg
ICAgIHByaXYtPnJlbmRlci5wcmVfcmVuZGVyX3JlcXVlc3RzID0gZWluYV9pbmxpc3RfcHJlcGVu
ZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocHJpdi0+
cmVuZGVyLnByZV9yZW5kZXJfcmVxdWVzdHMsIEVJTkFfSU5MSVNUX0dFVChyKSk7CisgICAgICAg
IHByaXYtPnJlbmRlci5wcmVSZW5kZXJSZXF1ZXN0cyA9IGVpbmFfaW5saXN0X3ByZXBlbmQKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHByaXYtPnJlbmRl
ci5wcmVSZW5kZXJSZXF1ZXN0cywgRUlOQV9JTkxJU1RfR0VUKHJlcXVlc3QpKTsKICAgICBlbHNl
Ci0gICAgICAgIHByaXYtPnJlbmRlci5wcmVfcmVuZGVyX3JlcXVlc3RzID0gZWluYV9pbmxpc3Rf
YXBwZW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChw
cml2LT5yZW5kZXIucHJlX3JlbmRlcl9yZXF1ZXN0cywgRUlOQV9JTkxJU1RfR0VUKHIpKTsKKyAg
ICAgICAgcHJpdi0+cmVuZGVyLnByZVJlbmRlclJlcXVlc3RzID0gZWluYV9pbmxpc3RfYXBwZW5k
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwcml2LT5y
ZW5kZXIucHJlUmVuZGVyUmVxdWVzdHMsIEVJTkFfSU5MSVNUX0dFVChyZXF1ZXN0KSk7CiAKLSAg
ICByLT5jb2wgPSBjb2x1bW47Ci0gICAgci0+cm93ID0gcm93OwotICAgIHItPnpvb20gPSB6b29t
OworICAgIHJlcXVlc3QtPmNvbHVtbiA9IGNvbHVtbjsKKyAgICByZXF1ZXN0LT5yb3cgPSByb3c7
CisgICAgcmVxdWVzdC0+em9vbSA9IHpvb207CiAKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQog
CiBzdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJf
cmVxdWVzdF9kZWwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdiwgRXdrX1RpbGVk
X0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9SZXF1ZXN0KiByZXF1ZXN0KQogewotICAgIHByaXYt
PnJlbmRlci5wcmVfcmVuZGVyX3JlcXVlc3RzID0gZWluYV9pbmxpc3RfcmVtb3ZlCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHByaXYtPnJlbmRlci5wcmVfcmVu
ZGVyX3JlcXVlc3RzLCBFSU5BX0lOTElTVF9HRVQocmVxdWVzdCkpOworICAgIHByaXYtPnJlbmRl
ci5wcmVSZW5kZXJSZXF1ZXN0cyA9IGVpbmFfaW5saXN0X3JlbW92ZQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwcml2LT5yZW5kZXIucHJlUmVuZGVyUmVxdWVz
dHMsIEVJTkFfSU5MSVNUX0dFVChyZXF1ZXN0KSk7CiAgICAgZnJlZShyZXF1ZXN0KTsKIH0KIAog
c3RhdGljIGlubGluZSBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9QcmVfUmVuZGVyX1JlcXVlc3Qq
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfZmlyc3QoY29uc3Qg
RXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdikKIHsKICAgICByZXR1cm4gRUlOQV9J
TkxJU1RfQ09OVEFJTkVSX0dFVCgKLSAgICAgICAgICAgICAgIHByaXYtPnJlbmRlci5wcmVfcmVu
ZGVyX3JlcXVlc3RzLAorICAgICAgICAgICAgICAgcHJpdi0+cmVuZGVyLnByZVJlbmRlclJlcXVl
c3RzLAogICAgICAgICAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJlX1JlbmRlcl9S
ZXF1ZXN0KTsKIH0KIAogc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ByZV9y
ZW5kZXJfcmVxdWVzdF9mbHVzaChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2KQog
ewotICAgIEVpbmFfSW5saXN0KiogcGwgPSAmcHJpdi0+cmVuZGVyLnByZV9yZW5kZXJfcmVxdWVz
dHM7Ci0gICAgd2hpbGUgKCpwbCkgewotICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9Q
cmVfUmVuZGVyX1JlcXVlc3QqIHI7Ci0gICAgICAgIHIgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2ZpcnN0KHByaXYpOwotICAgICAgICAqcGwgPSBlaW5hX2lu
bGlzdF9yZW1vdmUoKnBsLCAqcGwpOwotICAgICAgICBmcmVlKHIpOworICAgIEVpbmFfSW5saXN0
KiogcHJlUmVuZGVyTGlzdCA9ICZwcml2LT5yZW5kZXIucHJlUmVuZGVyUmVxdWVzdHM7CisgICAg
d2hpbGUgKCpwcmVSZW5kZXJMaXN0KSB7CisgICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3Jl
X1ByZV9SZW5kZXJfUmVxdWVzdCogcmVxdWVzdDsKKyAgICAgICAgcmVxdWVzdCA9IF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfZmlyc3QocHJpdik7CisgICAgICAg
ICpwcmVSZW5kZXJMaXN0ID0gZWluYV9pbmxpc3RfcmVtb3ZlKCpwcmVSZW5kZXJMaXN0LCAqcHJl
UmVuZGVyTGlzdCk7CisgICAgICAgIGZyZWUocmVxdWVzdCk7CiAgICAgfQogfQogCiBzdGF0aWMg
dm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2NsZWFyKEV3
a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYpCiB7Ci0gICAgRWluYV9Jbmxpc3QqKiBw
bCA9ICZwcml2LT5yZW5kZXIucHJlX3JlbmRlcl9yZXF1ZXN0czsKLSAgICBFaW5hX0lubGlzdCog
aXRlciA9ICpwbCwgKiB0bXA7CisgICAgRWluYV9Jbmxpc3QqKiBwcmVSZW5kZXJMaXN0ID0gJnBy
aXYtPnJlbmRlci5wcmVSZW5kZXJSZXF1ZXN0czsKKyAgICBFaW5hX0lubGlzdCogaXRlciA9ICpw
cmVSZW5kZXJMaXN0LCAqdG1wOwogICAgIHdoaWxlIChpdGVyKSB7Ci0gICAgICAgIEV3a19UaWxl
ZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUmVxdWVzdCogciA9CisgICAgICAgIEV3a19UaWxl
ZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUmVxdWVzdCogcmVxdWVzdCA9CiAgICAgICAgICAg
ICBFSU5BX0lOTElTVF9DT05UQUlORVJfR0VUKAogICAgICAgICAgICAgICAgIGl0ZXIsIEV3a19U
aWxlZF9CYWNraW5nX1N0b3JlX1ByZV9SZW5kZXJfUmVxdWVzdCk7CiAgICAgICAgIHRtcCA9IGl0
ZXItPm5leHQ7Ci0gICAgICAgICpwbCA9IGVpbmFfaW5saXN0X3JlbW92ZSgqcGwsIGl0ZXIpOwor
ICAgICAgICAqcHJlUmVuZGVyTGlzdCA9IGVpbmFfaW5saXN0X3JlbW92ZSgqcHJlUmVuZGVyTGlz
dCwgaXRlcik7CiAgICAgICAgIGl0ZXIgPSB0bXA7Ci0gICAgICAgIGZyZWUocik7CisgICAgICAg
IGZyZWUocmVxdWVzdCk7CiAgICAgfQogfQogCiAvKiBhc3N1bWVzIHByaXYtPnByb2Nlc3MucHJl
X2NiIHdhcyBjYWxsZWQgaWYgcmVxdWlyZWQhICovCiBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X3Byb2Nlc3Nfc2luZ2xlKEV3a19UaWxlZF9C
YWNraW5nX1N0b3JlX0RhdGEqIHByaXYpCiB7Ci0gICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVf
UHJlX1JlbmRlcl9SZXF1ZXN0KiByZXE7CisgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfUHJl
X1JlbmRlcl9SZXF1ZXN0KiByZXF1ZXN0OwogICAgIEVpbmFfUmVjdGFuZ2xlIGFyZWE7Ci0gICAg
RXdrX1RpbGVfTWF0cml4KiB0bSA9IHByaXYtPm1vZGVsLm1hdHJpeDsKKyAgICBFd2tfVGlsZV9N
YXRyaXgqIHRpbGVNYXRyaXggPSBwcml2LT5tb2RlbC5tYXRyaXg7CiAgICAgRXdrX1RpbGUqIHRp
bGU7Ci0gICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0dWM7Ci0gICAgdW5zaWduZWQgbG9uZyBj
b2wsIHJvdzsKKyAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHRpbGVkVW51c2VkQ2FjaGU7Cisg
ICAgdW5zaWduZWQgbG9uZyBjb2x1bW4sIHJvdzsKICAgICBmbG9hdCB6b29tOwogICAgIGRvdWJs
ZSBsYXN0X3VzZWQgPSBlY29yZV9sb29wX3RpbWVfZ2V0KCk7CiAKLSAgICByZXEgPSBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0X2ZpcnN0KHByaXYpOwotICAgIGlm
ICghcmVxKQorICAgIHJlcXVlc3QgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRl
cl9yZXF1ZXN0X2ZpcnN0KHByaXYpOworICAgIGlmICghcmVxdWVzdCkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgY29sID0gcmVxLT5jb2w7Ci0gICAgcm93ID0gcmVxLT5yb3c7Ci0gICAgem9vbSA9
IHJlcS0+em9vbTsKKyAgICBjb2x1bW4gPSByZXF1ZXN0LT5jb2x1bW47CisgICAgcm93ID0gcmVx
dWVzdC0+cm93OworICAgIHpvb20gPSByZXF1ZXN0LT56b29tOwogCi0gICAgaWYgKGV3a190aWxl
X21hdHJpeF90aWxlX2V4YWN0X2V4aXN0cyh0bSwgY29sLCByb3csIHpvb20pKSB7Ci0gICAgICAg
IERCRygibm8gcHJlLXJlbmRlciByZXF1aXJlZCBmb3IgdGlsZSAlbHUsJWx1IEAgJWYuIiwgY29s
LCByb3csIHpvb20pOworICAgIGlmIChld2tfdGlsZV9tYXRyaXhfdGlsZV9leGFjdF9leGlzdHMo
dGlsZU1hdHJpeCwgY29sdW1uLCByb3csIHpvb20pKSB7CisgICAgICAgIERCRygibm8gcHJlLXJl
bmRlciByZXF1aXJlZCBmb3IgdGlsZSAlbHUsJWx1IEAgJWYuIiwgY29sdW1uLCByb3csIHpvb20p
OwogICAgICAgICBnb3RvIGVuZDsKICAgICB9CiAKLSAgICB0aWxlID0gX2V3a190aWxlZF9iYWNr
aW5nX3N0b3JlX3RpbGVfbmV3KHByaXYsIGNvbCwgcm93LCB6b29tKTsKKyAgICB0aWxlID0gX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfbmV3KHByaXYsIGNvbHVtbiwgcm93LCB6b29tKTsK
ICAgICBpZiAoIXRpbGUpCiAgICAgICAgIGdvdG8gZW5kOwogCkBAIC0zNDQsMzMgKzM0NCwzMyBA
QCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZXF1ZXN0
X3Byb2Nlc3Nfc2luZ2xlKEV3a19UaWxlZAogICAgIGFyZWEudyA9IHByaXYtPnZpZXcudGlsZS53
aWR0aDsKICAgICBhcmVhLmggPSBwcml2LT52aWV3LnRpbGUuaGVpZ2h0OwogCi0gICAgcHJpdi0+
cmVuZGVyLmNiKHByaXYtPnJlbmRlci5kYXRhLCB0aWxlLCAmYXJlYSk7CisgICAgcHJpdi0+cmVu
ZGVyLmNhbGxiYWNrKHByaXYtPnJlbmRlci5kYXRhLCB0aWxlLCAmYXJlYSk7CiAgICAgZXZhc19v
YmplY3RfaW1hZ2VfZGF0YV91cGRhdGVfYWRkKAogICAgICAgICB0aWxlLT5pbWFnZSwKICAgICAg
ICAgYXJlYS54LCBhcmVhLnksIGFyZWEudywgYXJlYS5oKTsKLSAgICBld2tfdGlsZV9tYXRyaXhf
dGlsZV91cGRhdGVzX2NsZWFyKHRtLCB0aWxlKTsKKyAgICBld2tfdGlsZV9tYXRyaXhfdGlsZV91
cGRhdGVzX2NsZWFyKHRpbGVNYXRyaXgsIHRpbGUpOwogCi0gICAgZXdrX3RpbGVfbWF0cml4X3Rp
bGVfcHV0KHRtLCB0aWxlLCBsYXN0X3VzZWQpOworICAgIGV3a190aWxlX21hdHJpeF90aWxlX3B1
dCh0aWxlTWF0cml4LCB0aWxlLCBsYXN0X3VzZWQpOwogCiBlbmQ6Ci0gICAgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9kZWwocHJpdiwgcmVxKTsKLSAgICB0dWMg
PSBld2tfdGlsZV9tYXRyaXhfdW51c2VkX2NhY2hlX2dldChwcml2LT5tb2RlbC5tYXRyaXgpOwot
ICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9hdXRvX2ZsdXNoKHR1Yyk7CisgICAgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9kZWwocHJpdiwgcmVxdWVzdCk7Cisg
ICAgdGlsZWRVbnVzZWRDYWNoZSA9IGV3a190aWxlX21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KHBy
aXYtPm1vZGVsLm1hdHJpeCk7CisgICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2F1dG9fZmx1c2go
dGlsZWRVbnVzZWRDYWNoZSk7CiB9CiAKIHN0YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxlZF9iYWNr
aW5nX3N0b3JlX2l0ZW1fcHJvY2Vzc19pZGxlcl9jYih2b2lkKiBkYXRhKQogewogICAgIEV3a19U
aWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYgPSBzdGF0aWNfY2FzdDxFd2tfVGlsZWRfQmFj
a2luZ19TdG9yZV9EYXRhKj4oZGF0YSk7CiAKLSAgICBpZiAocHJpdi0+cHJvY2Vzcy5wcmVfY2Ip
Ci0gICAgICAgIGRhdGEgPSBwcml2LT5wcm9jZXNzLnByZV9jYihwcml2LT5wcm9jZXNzLnByZV9k
YXRhLCBwcml2LT5zZWxmKTsKKyAgICBpZiAocHJpdi0+cHJvY2Vzcy5wcmVDYWxsYmFjaykKKyAg
ICAgICAgZGF0YSA9IHByaXYtPnByb2Nlc3MucHJlQ2FsbGJhY2socHJpdi0+cHJvY2Vzcy5wcmVE
YXRhLCBwcml2LT5zZWxmKTsKIAogICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVu
ZGVyX3JlcXVlc3RfcHJvY2Vzc19zaW5nbGUocHJpdik7CiAKLSAgICBpZiAocHJpdi0+cHJvY2Vz
cy5wb3N0X2NiKQotICAgICAgICBwcml2LT5wcm9jZXNzLnBvc3RfY2IocHJpdi0+cHJvY2Vzcy5w
b3N0X2RhdGEsIGRhdGEsIHByaXYtPnNlbGYpOworICAgIGlmIChwcml2LT5wcm9jZXNzLnBvc3RD
YWxsYmFjaykKKyAgICAgICAgcHJpdi0+cHJvY2Vzcy5wb3N0Q2FsbGJhY2socHJpdi0+cHJvY2Vz
cy5wb3N0RGF0YSwgZGF0YSwgcHJpdi0+c2VsZik7CiAKLSAgICBpZiAoIXByaXYtPnJlbmRlci5w
cmVfcmVuZGVyX3JlcXVlc3RzKSB7CisgICAgaWYgKCFwcml2LT5yZW5kZXIucHJlUmVuZGVyUmVx
dWVzdHMpIHsKICAgICAgICAgcHJpdi0+cmVuZGVyLmlkbGVyID0gMDsKICAgICAgICAgcmV0dXJu
IEVJTkFfRkFMU0U7CiAgICAgfQpAQCAtNDIwLDM4ICs0MjAsMzggQEAgc3RhdGljIEVpbmFfQm9v
bCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfZW5hYmxlX3JlbmRlcihFd2tfVGlsZWRfQmFja2lu
Z19TdG9yZV8KIAogc3RhdGljIGlubGluZSBFaW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX2l0ZW1fZmlsbChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2LCBFd2tfVGls
ZWRfQmFja2luZ19TdG9yZV9JdGVtKiBpdGVtLCB1bnNpZ25lZCBsb25nIGNvbHVtbiwgdW5zaWdu
ZWQgbG9uZyByb3cpCiB7Ci0gICAgdW5zaWduZWQgbG9uZyBtX2NvbCA9IHByaXYtPm1vZGVsLmJh
c2UuY29sICsgY29sdW1uOwotICAgIHVuc2lnbmVkIGxvbmcgbV9yb3cgPSBwcml2LT5tb2RlbC5i
YXNlLnJvdyArIHJvdzsKLSAgICBkb3VibGUgbGFzdF91c2VkID0gZWNvcmVfbG9vcF90aW1lX2dl
dCgpOworICAgIHVuc2lnbmVkIGxvbmcgY3VycmVudENvbHVtbiA9IHByaXYtPm1vZGVsLmJhc2Uu
Y29sdW1uICsgY29sdW1uOworICAgIHVuc2lnbmVkIGxvbmcgY3VycmVudFJvdyA9IHByaXYtPm1v
ZGVsLmJhc2Uucm93ICsgcm93OworICAgIGRvdWJsZSBsYXN0VXNlZCA9IGVjb3JlX2xvb3BfdGlt
ZV9nZXQoKTsKIAotICAgIGlmIChtX2NvbCA+PSBwcml2LT5tb2RlbC5jdXIuY29scyB8fCBtX3Jv
dyA+PSBwcml2LT5tb2RlbC5jdXIucm93cykgeworICAgIGlmIChjdXJyZW50Q29sdW1uID49IHBy
aXYtPm1vZGVsLmN1cnJlbnQuY29sdW1ucyB8fCBjdXJyZW50Um93ID49IHByaXYtPm1vZGVsLmN1
cnJlbnQucm93cykgewogICAgICAgICBpZiAoaXRlbS0+dGlsZSkKLSAgICAgICAgICAgIF9ld2tf
dGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2Rpc3NvY2lhdGUocHJpdiwgaXRlbSwgbGFzdF91c2Vk
KTsKKyAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV90aWxlX2Rpc3NvY2lhdGUo
cHJpdiwgaXRlbSwgbGFzdFVzZWQpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIEV3a19UaWxlKiB0
aWxlOwogICAgICAgICBjb25zdCBmbG9hdCB6b29tID0gcHJpdi0+dmlldy50aWxlLnpvb207CiAK
ICAgICAgICAgaWYgKGl0ZW0tPnRpbGUpIHsKICAgICAgICAgICAgIEV3a19UaWxlKiBvbGQgPSBp
dGVtLT50aWxlOwotICAgICAgICAgICAgaWYgKG9sZC0+cm93ICE9IG1fcm93IHx8IG9sZC0+Y29s
ICE9IG1fY29sIHx8IG9sZC0+em9vbSAhPSB6b29tKQotICAgICAgICAgICAgICAgIF9ld2tfdGls
ZWRfYmFja2luZ19zdG9yZV90aWxlX2Rpc3NvY2lhdGUocHJpdiwgaXRlbSwgbGFzdF91c2VkKTsK
LSAgICAgICAgICAgIGVsc2UgaWYgKG9sZC0+cm93ID09IG1fcm93ICYmIG9sZC0+Y29sID09IG1f
Y29sICYmIG9sZC0+em9vbSA9PSB6b29tKQorICAgICAgICAgICAgaWYgKG9sZC0+cm93ICE9IGN1
cnJlbnRSb3cgfHwgb2xkLT5jb2wgIT0gY3VycmVudENvbHVtbiB8fCBvbGQtPnpvb20gIT0gem9v
bSkKKyAgICAgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9kaXNzb2Np
YXRlKHByaXYsIGl0ZW0sIGxhc3RVc2VkKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKG9sZC0+cm93
ID09IGN1cnJlbnRSb3cgJiYgb2xkLT5jb2wgPT0gY3VycmVudENvbHVtbiAmJiBvbGQtPnpvb20g
PT0gem9vbSkKICAgICAgICAgICAgICAgICBnb3RvIGVuZDsKICAgICAgICAgfQogCi0gICAgICAg
IHRpbGUgPSBld2tfdGlsZV9tYXRyaXhfdGlsZV9leGFjdF9nZXQocHJpdi0+bW9kZWwubWF0cml4
LCBtX2NvbCwgbV9yb3csIHpvb20pOworICAgICAgICB0aWxlID0gZXdrX3RpbGVfbWF0cml4X3Rp
bGVfZXhhY3RfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCwgY3VycmVudENvbHVtbiwgY3VycmVudFJv
dywgem9vbSk7CiAKICAgICAgICAgaWYgKCF0aWxlKSB7CiAgICAgICAgICAgICAvKiBOT1RFOiBp
dCBuZXZlciByZXR1cm5zIDAgaWYgaXQtPnRpbGUgd2FzIHNldCEgKi8KICAgICAgICAgICAgIGlm
IChpdGVtLT50aWxlKSB7CiAgICAgICAgICAgICAgICAgQ1JJVElDQUwoIml0LT50aWxlPSVwLCBi
dXQgaXQgc2hvdWxkIGJlIDAhIiwgaXRlbS0+dGlsZSk7CiAgICAgICAgICAgICAgICAgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfZGlzc29jaWF0ZShwcml2LCBpdGVtLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdF91c2Vk
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGxhc3RVc2VkKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgLyogRG8gbm90IGFk
ZCBuZXcgcmVxdWVzdHMgdG8gdGhlIHJlbmRlciBxdWV1ZSAqLwogICAgICAgICAgICAgaWYgKCFw
cml2LT5yZW5kZXIuc3VzcGVuZCkgewotICAgICAgICAgICAgICAgIHRpbGUgPSBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfdGlsZV9uZXcocHJpdiwgbV9jb2wsIG1fcm93LCB6b29tKTsKKyAgICAg
ICAgICAgICAgICB0aWxlID0gX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfbmV3KHByaXYs
IGN1cnJlbnRDb2x1bW4sIGN1cnJlbnRSb3csIHpvb20pOwogICAgICAgICAgICAgICAgIGlmICgh
dGlsZSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CiAgICAgICAgICAg
ICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfYXNzb2NpYXRlKHByaXYsIHRpbGUs
IGl0ZW0pOwpAQCAtNDU5LDcgKzQ1OSw3IEBAIHN0YXRpYyBpbmxpbmUgRWluYV9Cb29sIF9ld2tf
dGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2ZpbGwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvCiAgICAg
ICAgIH0gZWxzZSBpZiAodGlsZSAhPSBpdGVtLT50aWxlKSB7CiAgICAgICAgICAgICBpZiAoaXRl
bS0+dGlsZSkKICAgICAgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdGlsZV9k
aXNzb2NpYXRlKHByaXYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpdGVtLCBsYXN0X3VzZWQpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbSwgbGFzdFVzZWQpOwogICAg
ICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfYXNzb2NpYXRlKHByaXYsIHRp
bGUsIGl0ZW0pOwogICAgICAgICB9CiAKQEAgLTQ3MywzMSArNDczLDMxIEBAIGVuZDoKIAogc3Rh
dGljIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0qIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV9pdGVtX2FkZChFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2LCB1bnNpZ25lZCBs
b25nIGNvbHVtbiwgdW5zaWduZWQgbG9uZyByb3cpCiB7Ci0gICAgRXdrX1RpbGVkX0JhY2tpbmdf
U3RvcmVfSXRlbSogaXQ7Ci0gICAgRXZhc19Db29yZCB4LCB5LCB0dywgdGg7CisgICAgRXdrX1Rp
bGVkX0JhY2tpbmdfU3RvcmVfSXRlbSogaXRlbTsKKyAgICBFdmFzX0Nvb3JkIHgsIHksIHRpbGVX
aWR0aCwgdGlsZUhlaWdodDsKIAotICAgIERCRygibz0lcCIsIHByaXYtPnNlbGYpOworICAgIERC
RygiZXdrVGlsZSVwIiwgcHJpdi0+c2VsZik7CiAKLSAgICBpdCA9IHN0YXRpY19jYXN0PEV3a19U
aWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0qPihtYWxsb2Moc2l6ZW9mKCppdCkpKTsKLSAgICBpZiAo
IWl0KQorICAgIGl0ZW0gPSBzdGF0aWNfY2FzdDxFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVt
Kj4obWFsbG9jKHNpemVvZigqaXRlbSkpKTsKKyAgICBpZiAoIWl0ZW0pCiAgICAgICAgIHJldHVy
biAwOwogCi0gICAgdHcgPSBwcml2LT52aWV3LnRpbGUud2lkdGg7Ci0gICAgdGggPSBwcml2LT52
aWV3LnRpbGUuaGVpZ2h0OwotICAgIHggPSBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggKyBwcml2
LT52aWV3LnggKyB0dyAgKmNvbHVtbjsKLSAgICB5ID0gcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55
ICsgcHJpdi0+dmlldy55ICsgdGggICpyb3c7CisgICAgdGlsZVdpZHRoID0gcHJpdi0+dmlldy50
aWxlLndpZHRoOworICAgIHRpbGVIZWlnaHQgPSBwcml2LT52aWV3LnRpbGUuaGVpZ2h0OworICAg
IHggPSBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggKyBwcml2LT52aWV3LnggKyB0aWxlV2lkdGgg
ICpjb2x1bW47CisgICAgeSA9IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSArIHByaXYtPnZpZXcu
eSArIHRpbGVIZWlnaHQgICpyb3c7CiAKLSAgICBpdC0+dGlsZSA9IDA7CisgICAgaXRlbS0+dGls
ZSA9IDA7CiAKLSAgICBpdC0+c21vb3RoX3NjYWxlID0gcHJpdi0+dmlldy50aWxlLnpvb21fd2Vh
a19zbW9vdGhfc2NhbGU7Ci0gICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fbW92ZShp
dCwgeCwgeSk7Ci0gICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fcmVzaXplKGl0LCB0
dywgdGgpOwotICAgIGlmICghX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZmlsbChwcml2
LCBpdCwgY29sdW1uLCByb3cpKSB7Ci0gICAgICAgIGZyZWUoaXQpOworICAgIGl0ZW0tPnNtb290
aF9zY2FsZSA9IHByaXYtPnZpZXcudGlsZS56b29tV2Vha1Ntb290aFNjYWxlOworICAgIF9ld2tf
dGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX21vdmUoaXRlbSwgeCwgeSk7CisgICAgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX2l0ZW1fcmVzaXplKGl0ZW0sIHRpbGVXaWR0aCwgdGlsZUhlaWdodCk7
CisgICAgaWYgKCFfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9maWxsKHByaXYsIGl0ZW0s
IGNvbHVtbiwgcm93KSkgeworICAgICAgICBmcmVlKGl0ZW0pOwogICAgICAgICByZXR1cm4gMDsK
ICAgICB9CiAKLSAgICByZXR1cm4gaXQ7CisgICAgcmV0dXJuIGl0ZW07CiB9CiAKIHN0YXRpYyB2
b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2RlbChFd2tfVGlsZWRfQmFja2luZ19T
dG9yZV9EYXRhKiBwcml2LCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKiBpdGVtKQpAQCAt
NTI3LDQwICs1MjcsNDAgQEAgc3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9jaGFuZ2VkKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEKICAgICBwcml2LT5jaGFu
Z2VkLmFueSA9IEVJTkFfVFJVRTsKIH0KIAotc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5n
X3N0b3JlX3ZpZXdfY29sc19lbmRfZGVsKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHBy
aXYsIEVpbmFfSW5saXN0KiogcF9yb3csIHVuc2lnbmVkIGludCBjb3VudCkKK3N0YXRpYyB2b2lk
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X2NvbHNfZW5kX2RlbChFd2tfVGlsZWRfQmFj
a2luZ19TdG9yZV9EYXRhKiBwcml2LCBFaW5hX0lubGlzdCoqIHJvd0xpc3QsIHVuc2lnbmVkIGlu
dCBjb3VudCkKIHsKLSAgICBFaW5hX0lubGlzdCogbjsKKyAgICBFaW5hX0lubGlzdCogbmV4dEl0
ZW07CiAgICAgdW5zaWduZWQgaW50IGk7CiAKICAgICBpZiAoIWNvdW50KQogICAgICAgICByZXR1
cm47CiAKLSAgICBuID0gKCpwX3JvdyktPmxhc3Q7CisgICAgbmV4dEl0ZW0gPSAoKnJvd0xpc3Qp
LT5sYXN0OwogCiAgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKLSAgICAgICAgRXdr
X1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSogaXQ7Ci0gICAgICAgIGl0ID0gRUlOQV9JTkxJU1Rf
Q09OVEFJTkVSX0dFVChuLCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKTsKLSAgICAgICAg
biA9IG4tPnByZXY7Ci0gICAgICAgICpwX3JvdyA9IGVpbmFfaW5saXN0X3JlbW92ZSgqcF9yb3cs
IEVJTkFfSU5MSVNUX0dFVChpdCkpOwotICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
aXRlbV9kZWwocHJpdiwgaXQpOworICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVt
KiBpdGVtOworICAgICAgICBpdGVtID0gRUlOQV9JTkxJU1RfQ09OVEFJTkVSX0dFVChuZXh0SXRl
bSwgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSk7CisgICAgICAgIG5leHRJdGVtID0gbmV4
dEl0ZW0tPnByZXY7CisgICAgICAgICpyb3dMaXN0ID0gZWluYV9pbmxpc3RfcmVtb3ZlKCpyb3dM
aXN0LCBFSU5BX0lOTElTVF9HRVQoaXRlbSkpOworICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfaXRlbV9kZWwocHJpdiwgaXRlbSk7CiAgICAgfQogfQogCi1zdGF0aWMgRWluYV9Cb29s
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X2NvbHNfZW5kX2FkZChFd2tfVGlsZWRfQmFj
a2luZ19TdG9yZV9EYXRhKiBwcml2LCBFaW5hX0lubGlzdCoqIHBfcm93LCB1bnNpZ25lZCBpbnQg
YmFzZV9jb2x1bW4sIHVuc2lnbmVkIGludCBjb3VudCkKK3N0YXRpYyBFaW5hX0Jvb2wgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfY29sc19lbmRfYWRkKEV3a19UaWxlZF9CYWNraW5nX1N0
b3JlX0RhdGEqIHByaXYsIEVpbmFfSW5saXN0Kiogcm93TGlzdCwgdW5zaWduZWQgaW50IGJhc2VD
b2x1bW4sIHVuc2lnbmVkIGludCBjb3VudCkKIHsKLSAgICB1bnNpZ25lZCBpbnQgaSwgciA9IHBf
cm93IC0gcHJpdi0+dmlldy5pdGVtczsKKyAgICB1bnNpZ25lZCBpbnQgaSwgcm93ID0gcm93TGlz
dCAtIHByaXYtPnZpZXcuaXRlbXM7CiAKLSAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKywg
YmFzZV9jb2x1bW4rKykgeworICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrLCBiYXNlQ29s
dW1uKyspIHsKICAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSogaXQ7CiAKLSAg
ICAgICAgaXQgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9hZGQocHJpdiwgYmFzZV9j
b2x1bW4sIHIpOworICAgICAgICBpdCA9IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2Fk
ZChwcml2LCBiYXNlQ29sdW1uLCByb3cpOwogICAgICAgICBpZiAoIWl0KSB7Ci0gICAgICAgICAg
ICBDUklUSUNBTCgiZmFpbGVkIHRvIGFkZCBjb2x1bW4gJXUgb2YgJXUgaW4gcm93ICV1LiIsIGks
IGNvdW50LCByKTsKLSAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X2Nv
bHNfZW5kX2RlbChwcml2LCBwX3JvdywgaSk7CisgICAgICAgICAgICBDUklUSUNBTCgiZmFpbGVk
IHRvIGFkZCBjb2x1bW4gJXUgb2YgJXUgaW4gcm93ICV1LiIsIGksIGNvdW50LCByb3cpOworICAg
ICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfY29sc19lbmRfZGVsKHByaXYs
IHJvd0xpc3QsIGkpOwogICAgICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CiAgICAgICAgIH0K
IAotICAgICAgICAqcF9yb3cgPSBlaW5hX2lubGlzdF9hcHBlbmQoKnBfcm93LCBFSU5BX0lOTElT
VF9HRVQoaXQpKTsKKyAgICAgICAgKnJvd0xpc3QgPSBlaW5hX2lubGlzdF9hcHBlbmQoKnJvd0xp
c3QsIEVJTkFfSU5MSVNUX0dFVChpdCkpOwogICAgIH0KICAgICByZXR1cm4gRUlOQV9UUlVFOwog
fQpAQCAtNTY4LDEwICs1NjgsMTAgQEAgc3RhdGljIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfdmlld19jb2xzX2VuZF9hZGQoRXdrX1RpbGVkX0JhY2tpbmdfU3QKIHN0YXRpYyB2
b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3Jvd19kZWwoRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfRGF0YSogcHJpdiwgRWluYV9Jbmxpc3QqIHJvdykKIHsKICAgICB3aGlsZSAocm93
KSB7Ci0gICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0qIGl0OwotICAgICAgICBp
dCA9IEVJTkFfSU5MSVNUX0NPTlRBSU5FUl9HRVQocm93LCBFd2tfVGlsZWRfQmFja2luZ19TdG9y
ZV9JdGVtKTsKKyAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSogaXRlbTsKKyAg
ICAgICAgaXRlbSA9IEVJTkFfSU5MSVNUX0NPTlRBSU5FUl9HRVQocm93LCBFd2tfVGlsZWRfQmFj
a2luZ19TdG9yZV9JdGVtKTsKICAgICAgICAgcm93ID0gcm93LT5uZXh0OwotICAgICAgICBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9kZWwocHJpdiwgaXQpOworICAgICAgICBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9kZWwocHJpdiwgaXRlbSk7CiAgICAgfQogfQogCkBAIC02
MTEsOCArNjExLDggQEAgc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3JlbmRl
cih2b2lkKiBkYXRhLCBFd2tfVGlsZSogdGlsZSwgY29uc3QgRWkKICAgICBpZiAocHJpdi0+dmll
dy50aWxlLndpZHRoICE9IHRpbGUtPndpZHRoIHx8IHByaXYtPnZpZXcudGlsZS5oZWlnaHQgIT0g
dGlsZS0+aGVpZ2h0KQogICAgICAgICByZXR1cm47IC8vIHRvZG86IHJlbW92ZSBtZSBsYXRlciwg
ZG9uJ3QgZXZlbiBmbGFnIGFzIGRpcnR5IQogCi0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk4ocHJpdi0+cmVuZGVyLmNiKTsKLSAgICBpZiAoIXByaXYtPnJlbmRlci5jYihwcml2LT5yZW5k
ZXIuZGF0YSwgdGlsZSwgYXJlYSkpCisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4ocHJp
di0+cmVuZGVyLmNhbGxiYWNrKTsKKyAgICBpZiAoIXByaXYtPnJlbmRlci5jYWxsYmFjayhwcml2
LT5yZW5kZXIuZGF0YSwgdGlsZSwgYXJlYSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGV2YXNf
b2JqZWN0X2ltYWdlX2RhdGFfdXBkYXRlX2FkZCh0aWxlLT5pbWFnZSwgYXJlYS0+eCwgYXJlYS0+
eSwgYXJlYS0+dywgYXJlYS0+aCk7CkBAIC02MjksMjcgKzYyOSwyNyBAQCBzdGF0aWMgaW5saW5l
IHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX21vZGVsX21hdHJpeF9jcmVhdGUoRXdrX1Rp
bGVkX0JhY2tpbgogICAgICAgICBld2tfdGlsZV9tYXRyaXhfZnJlZShwcml2LT5tb2RlbC5tYXRy
aXgpOwogICAgIH0KIAotICAgIHByaXYtPm1vZGVsLm1hdHJpeCA9IGV3a190aWxlX21hdHJpeF9u
ZXcodGlsZVVudXNlZENhY2hlLCBwcml2LT5tb2RlbC5jdXIuY29scywgcHJpdi0+bW9kZWwuY3Vy
LnJvd3MsIHByaXYtPmNzcGFjZSwgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3JlbmRlciwgcHJp
dik7CisgICAgcHJpdi0+bW9kZWwubWF0cml4ID0gZXdrX3RpbGVfbWF0cml4X25ldyh0aWxlVW51
c2VkQ2FjaGUsIHByaXYtPm1vZGVsLmN1cnJlbnQuY29sdW1ucywgcHJpdi0+bW9kZWwuY3VycmVu
dC5yb3dzLCBwcml2LT5jb2xvclNwYWNlLCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcmVuZGVy
LCBwcml2KTsKIH0KIAogc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0
X21lbWJlcl9kZWwoRXZhc19PYmplY3QqIGV3a1RpbGUsIEV2YXNfT2JqZWN0KiBtZW1iZXIpCiB7
CiAgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4oZXdrVGlsZSwgcHJpdik7Ci0gICAgaWYgKCFw
cml2LT5jb250ZW50c19jbGlwcGVyKQorICAgIGlmICghcHJpdi0+Y29udGVudHNDbGlwcGVyKQog
ICAgICAgICByZXR1cm47CiAgICAgZXZhc19vYmplY3RfY2xpcF91bnNldChtZW1iZXIpOwotICAg
IGlmICghZXZhc19vYmplY3RfY2xpcGVlc19nZXQocHJpdi0+Y29udGVudHNfY2xpcHBlcikpCi0g
ICAgICAgIGV2YXNfb2JqZWN0X2hpZGUocHJpdi0+Y29udGVudHNfY2xpcHBlcik7CisgICAgaWYg
KCFldmFzX29iamVjdF9jbGlwZWVzX2dldChwcml2LT5jb250ZW50c0NsaXBwZXIpKQorICAgICAg
ICBldmFzX29iamVjdF9oaWRlKHByaXYtPmNvbnRlbnRzQ2xpcHBlcik7CiB9CiAKIHN0YXRpYyB2
b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9tZW1iZXJfYWRkKEV2YXNfT2JqZWN0
KiBld2tUaWxlLCBFdmFzX09iamVjdCogbWVtYmVyKQogewogICAgIFBSSVZfREFUQV9HRVRfT1Jf
UkVUVVJOKGV3a1RpbGUsIHByaXYpOwotICAgIGlmICghcHJpdi0+Y29udGVudHNfY2xpcHBlcikK
KyAgICBpZiAoIXByaXYtPmNvbnRlbnRzQ2xpcHBlcikKICAgICAgICAgcmV0dXJuOwotICAgIGV2
YXNfb2JqZWN0X2NsaXBfc2V0KG1lbWJlciwgcHJpdi0+Y29udGVudHNfY2xpcHBlcik7CisgICAg
ZXZhc19vYmplY3RfY2xpcF9zZXQobWVtYmVyLCBwcml2LT5jb250ZW50c0NsaXBwZXIpOwogICAg
IGlmIChldmFzX29iamVjdF92aXNpYmxlX2dldChld2tUaWxlKSkKLSAgICAgICAgZXZhc19vYmpl
Y3Rfc2hvdyhwcml2LT5jb250ZW50c19jbGlwcGVyKTsKKyAgICAgICAgZXZhc19vYmplY3Rfc2hv
dyhwcml2LT5jb250ZW50c0NsaXBwZXIpOwogfQogCiAjaWZkZWYgREVCVUdfTUVNX0xFQUtTCkBA
IC02NzYsOSArNjc2LDkgQEAgc3RhdGljIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfc2lnX3Vzcih2b2lkKiBkYXRhLCBpbnQgdHlwZSwgdm9pZCogZXYKICAgICBFd2tfVGlsZWRf
QmFja2luZ19TdG9yZV9EYXRhKiBwcml2ID0gKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEq
KWRhdGE7CiAKICAgICBpZiAoc2lnLT5udW1iZXIgPT0gMikgewotICAgICAgICBFd2tfVGlsZV9V
bnVzZWRfQ2FjaGUqIHR1YzsKLSAgICAgICAgdHVjID0gZXdrX3RpbGVfbWF0cml4X3VudXNlZF9j
YWNoZV9nZXQocHJpdi0+bW9kZWwubWF0cml4KTsKLSAgICAgICAgZXdrX3RpbGVfdW51c2VkX2Nh
Y2hlX2F1dG9fZmx1c2godHVjKTsKKyAgICAgICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0aWxp
ZVVudXNlZENhY2hlOworICAgICAgICB0aWxpZVVudXNlZENhY2hlID0gZXdrX3RpbGVfbWF0cml4
X3VudXNlZF9jYWNoZV9nZXQocHJpdi0+bW9kZWwubWF0cml4KTsKKyAgICAgICAgZXdrX3RpbGVf
dW51c2VkX2NhY2hlX2F1dG9fZmx1c2godGlsaWVVbnVzZWRDYWNoZSk7CiAgICAgfQogCiAgICAg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfZGJnKHByaXYpOwpAQCAtNjkxLDcgKzY5MSw3
IEBAIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9hZGQoRXZhc19P
YmplY3QqIGV3a1RpbGUpCiB7CiAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJp
djsKIAotICAgIERCRygibz0lcCIsIGV3a1RpbGUpOworICAgIERCRygiZXdrVGlsZT0lcCIsIGV3
a1RpbGUpOwogCiAgICAgcHJpdiA9IHN0YXRpY19jYXN0PEV3a19UaWxlZF9CYWNraW5nX1N0b3Jl
X0RhdGEqPihjYWxsb2MoMSwgc2l6ZW9mKCpwcml2KSkpOwogICAgIGlmICghcHJpdikKQEAgLTcw
OCwzMyArNzA4LDMzIEBAIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFy
dF9hZGQoRXZhc19PYmplY3QqIGV3a1RpbGUpCiAgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54
ID0gMDsKICAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgPSAwOwogCi0gICAgcHJpdi0+bW9k
ZWwuYmFzZS5jb2wgPSAwOworICAgIHByaXYtPm1vZGVsLmJhc2UuY29sdW1uID0gMDsKICAgICBw
cml2LT5tb2RlbC5iYXNlLnJvdyA9IDA7Ci0gICAgcHJpdi0+bW9kZWwuY3VyLmNvbHMgPSAxOwot
ICAgIHByaXYtPm1vZGVsLmN1ci5yb3dzID0gMTsKLSAgICBwcml2LT5tb2RlbC5vbGQuY29scyA9
IDA7CisgICAgcHJpdi0+bW9kZWwuY3VycmVudC5jb2x1bW5zID0gMTsKKyAgICBwcml2LT5tb2Rl
bC5jdXJyZW50LnJvd3MgPSAxOworICAgIHByaXYtPm1vZGVsLm9sZC5jb2x1bW5zID0gMDsKICAg
ICBwcml2LT5tb2RlbC5vbGQucm93cyA9IDA7CiAgICAgcHJpdi0+bW9kZWwud2lkdGggPSAwOwog
ICAgIHByaXYtPm1vZGVsLmhlaWdodCA9IDA7CiAgICAgcHJpdi0+cmVuZGVyLnN1c3BlbmQgPSBF
SU5BX0ZBTFNFOwotICAgIHByaXYtPmNzcGFjZSA9IEVWQVNfQ09MT1JTUEFDRV9BUkdCODg4ODsg
Ly8gVE9ETzogZGV0ZWN0IGl0LgorICAgIHByaXYtPmNvbG9yU3BhY2UgPSBFVkFTX0NPTE9SU1BB
Q0VfQVJHQjg4ODg7IC8vIFRPRE86IGRldGVjdCBpdC4KIAogICAgIGV2YXNfb2JqZWN0X3NtYXJ0
X2RhdGFfc2V0KGV3a1RpbGUsIHByaXYpOwogICAgIF9wYXJlbnRfc2MuYWRkKGV3a1RpbGUpOwog
Ci0gICAgcHJpdi0+Y29udGVudHNfY2xpcHBlciA9IGV2YXNfb2JqZWN0X3JlY3RhbmdsZV9hZGQo
CisgICAgcHJpdi0+Y29udGVudHNDbGlwcGVyID0gZXZhc19vYmplY3RfcmVjdGFuZ2xlX2FkZCgK
ICAgICAgICAgZXZhc19vYmplY3RfZXZhc19nZXQoZXdrVGlsZSkpOwotICAgIGV2YXNfb2JqZWN0
X21vdmUocHJpdi0+Y29udGVudHNfY2xpcHBlciwgMCwgMCk7Ci0gICAgZXZhc19vYmplY3RfcmVz
aXplKHByaXYtPmNvbnRlbnRzX2NsaXBwZXIsCisgICAgZXZhc19vYmplY3RfbW92ZShwcml2LT5j
b250ZW50c0NsaXBwZXIsIDAsIDApOworICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShwcml2LT5jb250
ZW50c0NsaXBwZXIsCiAgICAgICAgICAgICAgICAgICAgICAgIHByaXYtPm1vZGVsLndpZHRoLCBw
cml2LT5tb2RlbC5oZWlnaHQpOwotICAgIGV2YXNfb2JqZWN0X2NvbG9yX3NldChwcml2LT5jb250
ZW50c19jbGlwcGVyLCAyNTUsIDI1NSwgMjU1LCAyNTUpOwotICAgIGV2YXNfb2JqZWN0X3Nob3co
cHJpdi0+Y29udGVudHNfY2xpcHBlcik7Ci0gICAgZXZhc19vYmplY3Rfc21hcnRfbWVtYmVyX2Fk
ZChwcml2LT5jb250ZW50c19jbGlwcGVyLCBld2tUaWxlKTsKKyAgICBldmFzX29iamVjdF9jb2xv
cl9zZXQocHJpdi0+Y29udGVudHNDbGlwcGVyLCAyNTUsIDI1NSwgMjU1LCAyNTUpOworICAgIGV2
YXNfb2JqZWN0X3Nob3cocHJpdi0+Y29udGVudHNDbGlwcGVyKTsKKyAgICBldmFzX29iamVjdF9z
bWFydF9tZW1iZXJfYWRkKHByaXYtPmNvbnRlbnRzQ2xpcHBlciwgZXdrVGlsZSk7CiAKICAgICBf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfbW9kZWxfbWF0cml4X2NyZWF0ZShwcml2LCAwKTsKICAg
ICBldmFzX29iamVjdF9tb3ZlKHByaXYtPmJhc2UuY2xpcHBlciwgMCwgMCk7CiAgICAgZXZhc19v
YmplY3RfcmVzaXplKHByaXYtPmJhc2UuY2xpcHBlciwgMCwgMCk7Ci0gICAgZXZhc19vYmplY3Rf
Y2xpcF9zZXQocHJpdi0+Y29udGVudHNfY2xpcHBlciwgcHJpdi0+YmFzZS5jbGlwcGVyKTsKKyAg
ICBldmFzX29iamVjdF9jbGlwX3NldChwcml2LT5jb250ZW50c0NsaXBwZXIsIHByaXYtPmJhc2Uu
Y2xpcHBlcik7CiAKICNpZmRlZiBERUJVR19NRU1fTEVBS1MKICAgICBwcml2LT5zaWdfdXNyID0g
ZWNvcmVfZXZlbnRfaGFuZGxlcl9hZGQKQEAgLTc0NSwxMSArNzQ1LDExIEBAIHN0YXRpYyB2b2lk
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zbWFydF9hZGQoRXZhc19PYmplY3QqIGV3a1RpbGUp
CiBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfZGVsKEV2YXNfT2Jq
ZWN0KiBld2tUaWxlKQogewogICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKGV3a1RpbGUsIHBy
aXYpOwotICAgIERCRygibz0lcCIsIGV3a1RpbGUpOwotICAgIEV3a19UaWxlX1VudXNlZF9DYWNo
ZSogdHVjOworICAgIERCRygiZXdrVGlsZSVwIiwgZXdrVGlsZSk7CisgICAgRXdrX1RpbGVfVW51
c2VkX0NhY2hlKiB0aWxlVW51c2VkQ2FjaGU7CiAKLSAgICB0dWMgPSBld2tfdGlsZV9tYXRyaXhf
dW51c2VkX2NhY2hlX2dldChwcml2LT5tb2RlbC5tYXRyaXgpOwotICAgIGV3a190aWxlX3VudXNl
ZF9jYWNoZV91bmxvY2tfYXJlYSh0dWMpOworICAgIHRpbGVVbnVzZWRDYWNoZSA9IGV3a190aWxl
X21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7CisgICAgZXdrX3Rp
bGVfdW51c2VkX2NhY2hlX3VubG9ja19hcmVhKHRpbGVVbnVzZWRDYWNoZSk7CiAKICAgICBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfZmx1c2gocHJpdik7CiAKQEAgLTc2NCw4ICs3NjQsOCBAQCBz
dGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfZGVsKEV2YXNfT2JqZWN0
KiBld2tUaWxlKQogI2VuZGlmCiAKICAgICBld2tfdGlsZV9tYXRyaXhfZnJlZShwcml2LT5tb2Rl
bC5tYXRyaXgpOwotICAgIGV2YXNfb2JqZWN0X3NtYXJ0X21lbWJlcl9kZWwocHJpdi0+Y29udGVu
dHNfY2xpcHBlcik7Ci0gICAgZXZhc19vYmplY3RfZGVsKHByaXYtPmNvbnRlbnRzX2NsaXBwZXIp
OworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X21lbWJlcl9kZWwocHJpdi0+Y29udGVudHNDbGlwcGVy
KTsKKyAgICBldmFzX29iamVjdF9kZWwocHJpdi0+Y29udGVudHNDbGlwcGVyKTsKIAogICAgIF9w
YXJlbnRfc2MuZGVsKGV3a1RpbGUpOwogCkBAIC03NzcsMjMgKzc3NywyMyBAQCBzdGF0aWMgdm9p
ZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfZGVsKEV2YXNfT2JqZWN0KiBld2tUaWxl
KQogCiBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfbW92ZShFdmFz
X09iamVjdCogZXdrVGlsZSwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHkpCiB7Ci0gICAgREJH
KCJvPSVwLCBuZXcgcG9zOiAlZHglZCIsIGV3a1RpbGUsIHgsIHkpOworICAgIERCRygiZXdrVGls
ZSVwLCBuZXcgcG9zOiAlZHglZCIsIGV3a1RpbGUsIHgsIHkpOwogCiAgICAgUFJJVl9EQVRBX0dF
VF9PUl9SRVRVUk4oZXdrVGlsZSwgcHJpdik7CiAKLSAgICBpZiAocHJpdi0+Y2hhbmdlZC5wb3Mp
CisgICAgaWYgKHByaXYtPmNoYW5nZWQucG9zaXRpb24pCiAgICAgICAgIHJldHVybjsKIAogICAg
IGlmIChwcml2LT52aWV3LnggPT0geCAmJiBwcml2LT52aWV3LnkgPT0geSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgcHJpdi0+Y2hhbmdlZC5wb3MgPSBFSU5BX1RSVUU7CisgICAgcHJpdi0+Y2hh
bmdlZC5wb3NpdGlvbiA9IEVJTkFfVFJVRTsKICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
Y2hhbmdlZChwcml2KTsKIH0KIAogc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3NtYXJ0X3Jlc2l6ZShFdmFzX09iamVjdCogZXdrVGlsZSwgRXZhc19Db29yZCB3aWR0aCwgRXZh
c19Db29yZCBoZWlnaHQpCiB7Ci0gICAgREJHKCJvPSVwLCBuZXcgc2l6ZTogJWR4JWQiLCBld2tU
aWxlLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBEQkcoImV3a1RpbGUlcCwgbmV3IHNpemU6ICVkeCVk
IiwgZXdrVGlsZSwgd2lkdGgsIGhlaWdodCk7CiAKICAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVS
Tihld2tUaWxlLCBwcml2KTsKIApAQCAtODA5LDI1ICs4MDksMjUgQEAgc3RhdGljIHZvaWQgX2V3
a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X3Jlc2l6ZShFdmFzX09iamVjdCogZXdrVGlsZSwg
RXZhc19Db28KIAogc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3JlY2FsY19y
ZW5kZXJlcnMoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdiwgRXZhc19Db29yZCB3
aWR0aCwgRXZhc19Db29yZCBoZWlnaHQsIEV2YXNfQ29vcmQgdGlsZVdpZHRoLCBFdmFzX0Nvb3Jk
IHRpbGVIZWlnaHQpCiB7Ci0gICAgbG9uZyBjb2xzLCByb3dzLCBvbGRfcm93cywgb2xkX2NvbHM7
Ci0gICAgSU5GKCJvPSVwLCBuZXcgc2l6ZTogJWR4JWQiLCBwcml2LT5zZWxmLCB3aWR0aCwgaGVp
Z2h0KTsKKyAgICBsb25nIGNvbHVtbnMsIHJvd3MsIG9sZFJvd3MsIG9sZENvbHM7CisgICAgSU5G
KCJld2tUaWxlJXAsIG5ldyBzaXplOiAlZHglZCIsIHByaXYtPnNlbGYsIHdpZHRoLCBoZWlnaHQp
OwogCi0gICAgY29scyA9IDEgKyBzdGF0aWNfY2FzdDxpbnQ+KGNlaWwoc3RhdGljX2Nhc3Q8Zmxv
YXQ+KHdpZHRoIC8gdGlsZVdpZHRoKSkpOworICAgIGNvbHVtbnMgPSAxICsgc3RhdGljX2Nhc3Q8
aW50PihjZWlsKHN0YXRpY19jYXN0PGZsb2F0Pih3aWR0aCAvIHRpbGVXaWR0aCkpKTsKICAgICBy
b3dzID0gMSArIHN0YXRpY19jYXN0PGludD4oY2VpbChzdGF0aWNfY2FzdDxmbG9hdD4oaGVpZ2h0
IC8gdGlsZUhlaWdodCkpKTsKIAotICAgIElORigibz0lcCBuZXcgZ3JpZCBzaXplIGNvbHM6ICVs
ZCwgcm93czogJWxkLCB3YXMgJWxkLCAlbGQiLAotICAgICAgICBwcml2LT5zZWxmLCBjb2xzLCBy
b3dzLCBwcml2LT52aWV3LmNvbHMsIHByaXYtPnZpZXcucm93cyk7CisgICAgSU5GKCJld2tUaWxl
JXAgbmV3IGdyaWQgc2l6ZSBjb2xzOiAlbGQsIHJvd3M6ICVsZCwgd2FzICVsZCwgJWxkIiwKKyAg
ICAgICAgcHJpdi0+c2VsZiwgY29sdW1ucywgcm93cywgcHJpdi0+dmlldy5jb2xzLCBwcml2LT52
aWV3LnJvd3MpOwogCi0gICAgaWYgKHByaXYtPnZpZXcuY29scyA9PSBjb2xzICYmIHByaXYtPnZp
ZXcucm93cyA9PSByb3dzKQorICAgIGlmIChwcml2LT52aWV3LmNvbHMgPT0gY29sdW1ucyAmJiBw
cml2LT52aWV3LnJvd3MgPT0gcm93cykKICAgICAgICAgcmV0dXJuOwogCi0gICAgb2xkX2NvbHMg
PSBwcml2LT52aWV3LmNvbHM7Ci0gICAgb2xkX3Jvd3MgPSBwcml2LT52aWV3LnJvd3M7CisgICAg
b2xkQ29scyA9IHByaXYtPnZpZXcuY29sczsKKyAgICBvbGRSb3dzID0gcHJpdi0+dmlldy5yb3dz
OwogCi0gICAgaWYgKHJvd3MgPCBvbGRfcm93cykgeworICAgIGlmIChyb3dzIDwgb2xkUm93cykg
ewogICAgICAgICBFaW5hX0lubGlzdCoqIHN0YXJ0LCAqKmVuZDsKICAgICAgICAgc3RhcnQgPSBw
cml2LT52aWV3Lml0ZW1zICsgcm93czsKLSAgICAgICAgZW5kID0gcHJpdi0+dmlldy5pdGVtcyAr
IG9sZF9yb3dzOworICAgICAgICBlbmQgPSBwcml2LT52aWV3Lml0ZW1zICsgb2xkUm93czsKICAg
ICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcm93c19yYW5nZV9kZWwocHJpdiwg
c3RhcnQsIGVuZCk7CiAgICAgfQogCkBAIC04MzcsMzYgKzgzNywzNiBAQCBzdGF0aWMgdm9pZCBf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcmVjYWxjX3JlbmRlcmVycyhFd2tfVGlsZWRfQmFja2lu
Z19TdG9yZV9EYQogCiAgICAgcHJpdi0+dmlldy5pdGVtcyA9IHN0YXRpY19jYXN0PEVpbmFfSW5s
aXN0Kio+KG5ld0l0ZW1zKTsKICAgICBwcml2LT52aWV3LnJvd3MgPSByb3dzOwotICAgIHByaXYt
PnZpZXcuY29scyA9IGNvbHM7Ci0gICAgaWYgKHJvd3MgPiBvbGRfcm93cykgewotICAgICAgICBF
aW5hX0lubGlzdCoqIHN0YXJ0ID0gcHJpdi0+dmlldy5pdGVtcyArIG9sZF9yb3dzOworICAgIHBy
aXYtPnZpZXcuY29scyA9IGNvbHVtbnM7CisgICAgaWYgKHJvd3MgPiBvbGRSb3dzKSB7CisgICAg
ICAgIEVpbmFfSW5saXN0Kiogc3RhcnQgPSBwcml2LT52aWV3Lml0ZW1zICsgb2xkUm93czsKICAg
ICAgICAgRWluYV9Jbmxpc3QqKiBlbmQgPSBwcml2LT52aWV3Lml0ZW1zICsgcm93czsKICAgICAg
ICAgZm9yICg7IHN0YXJ0IDwgZW5kOyBzdGFydCsrKSB7CiAgICAgICAgICAgICAqc3RhcnQgPSAw
OwotICAgICAgICAgICAgRWluYV9Cb29sIHIgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmll
d19jb2xzX2VuZF9hZGQocHJpdiwgc3RhcnQsIDAsIGNvbHMpOworICAgICAgICAgICAgRWluYV9C
b29sIHIgPSBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19jb2xzX2VuZF9hZGQocHJpdiwg
c3RhcnQsIDAsIGNvbHVtbnMpOwogICAgICAgICAgICAgaWYgKCFyKSB7Ci0gICAgICAgICAgICAg
ICAgQ1JJVElDQUwoImZhaWxlZCB0byBhbGxvY2F0ZSAlbGQgY29sdW1ucyIsIGNvbHMpOwotICAg
ICAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3Jvd3NfcmFuZ2VfZGVs
KHByaXYsIHByaXYtPnZpZXcuaXRlbXMgKyBvbGRfcm93cywgc3RhcnQpOwotICAgICAgICAgICAg
ICAgIHByaXYtPnZpZXcucm93cyA9IG9sZF9yb3dzOworICAgICAgICAgICAgICAgIENSSVRJQ0FM
KCJmYWlsZWQgdG8gYWxsb2NhdGUgJWxkIGNvbHVtbnMiLCBjb2x1bW5zKTsKKyAgICAgICAgICAg
ICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19yb3dzX3JhbmdlX2RlbChwcml2LCBw
cml2LT52aWV3Lml0ZW1zICsgb2xkUm93cywgc3RhcnQpOworICAgICAgICAgICAgICAgIHByaXYt
PnZpZXcucm93cyA9IG9sZFJvd3M7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAg
ICAgfQogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKGNvbHMgIT0gb2xkX2NvbHMpIHsKLSAg
ICAgICAgaW50IHRvZG8gPSBjb2xzIC0gb2xkX2NvbHM7CisgICAgaWYgKGNvbHVtbnMgIT0gb2xk
Q29scykgeworICAgICAgICBpbnQgdG9kbyA9IGNvbHVtbnMgLSBvbGRDb2xzOwogICAgICAgICBF
aW5hX0lubGlzdCoqIHN0YXJ0ID0gcHJpdi0+dmlldy5pdGVtczsKLSAgICAgICAgRWluYV9Jbmxp
c3QqKiBlbmQgPSBzdGFydCArIHN0ZDo6bWluKG9sZF9yb3dzLCByb3dzKTsKKyAgICAgICAgRWlu
YV9Jbmxpc3QqKiBlbmQgPSBzdGFydCArIHN0ZDo6bWluKG9sZFJvd3MsIHJvd3MpOwogICAgICAg
ICBpZiAodG9kbyA+IDApIHsKICAgICAgICAgICAgIGZvciAoOyBzdGFydCA8IGVuZDsgc3RhcnQr
KykgewotICAgICAgICAgICAgICAgIEVpbmFfQm9vbCByID0gX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX3ZpZXdfY29sc19lbmRfYWRkKHByaXYsIHN0YXJ0LCBvbGRfY29scywgdG9kbyk7Ci0gICAg
ICAgICAgICAgICAgaWYgKCFyKSB7CisgICAgICAgICAgICAgICAgRWluYV9Cb29sIHJlc3VsdCA9
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X2NvbHNfZW5kX2FkZChwcml2LCBzdGFydCwg
b2xkQ29scywgdG9kbyk7CisgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHsKICAgICAgICAg
ICAgICAgICAgICAgQ1JJVElDQUwoImZhaWxlZCB0byBhbGxvY2F0ZSAlZCBjb2x1bW5zISIsIHRv
ZG8pOwogCiAgICAgICAgICAgICAgICAgICAgIGZvciAoc3RhcnQtLTsgc3RhcnQgPj0gcHJpdi0+
dmlldy5pdGVtczsgc3RhcnQtLSkKICAgICAgICAgICAgICAgICAgICAgICAgIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV92aWV3X2NvbHNfZW5kX2RlbChwcml2LCBzdGFydCwgdG9kbyk7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChyb3dzID4gb2xkX3Jvd3MpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHN0YXJ0ID0gcHJpdi0+dmlldy5pdGVtcyArIG9sZF9yb3dzOworICAgICAgICAgICAg
ICAgICAgICBpZiAocm93cyA+IG9sZFJvd3MpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0
YXJ0ID0gcHJpdi0+dmlldy5pdGVtcyArIG9sZFJvd3M7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBlbmQgPSBwcml2LT52aWV3Lml0ZW1zICsgcm93czsKICAgICAgICAgICAgICAgICAgICAgICAg
IGZvciAoOyBzdGFydCA8IGVuZDsgc3RhcnQrKykKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19jb2xzX2VuZF9kZWwocHJpdiwgc3RhcnQs
IHRvZG8pOwpAQCAtOTAxLDkgKzkwMSw5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfdmlld19kYmcoY29uc3QgRXdrX1RpbGVkX0JhY2tpbmdfU3RvCiAgICAg
RWluYV9Jbmxpc3QqKiBzdGFydCwgKiplbmQ7CiAgICAgcHJpbnRmKCJ0aWxlcz0lMmxkLCUybGQg
IG1vZGVsPSUybGQsJTJsZCBbJWR4JWRdIGJhc2U9JSszbGQsJSs0bGQgb2Zmc2V0PSUrNGQsJSs0
ZCBvbGQ9JSs0ZCwlKzRkIGJhc2U9JSszZCwlKzNkXG4iLAogICAgICAgICAgICBwcml2LT52aWV3
LmNvbHMsIHByaXYtPnZpZXcucm93cywKLSAgICAgICAgICAgcHJpdi0+bW9kZWwuY3VyLmNvbHMs
IHByaXYtPm1vZGVsLmN1ci5yb3dzLAorICAgICAgICAgICBwcml2LT5tb2RlbC5jdXJyZW50LmNv
bHVtbnMsIHByaXYtPm1vZGVsLmN1cnJlbnQucm93cywKICAgICAgICAgICAgcHJpdi0+bW9kZWwu
d2lkdGgsIHByaXYtPm1vZGVsLmhlaWdodCwKLSAgICAgICAgICAgcHJpdi0+bW9kZWwuYmFzZS5j
b2wsIHByaXYtPm1vZGVsLmJhc2Uucm93LAorICAgICAgICAgICBwcml2LT5tb2RlbC5iYXNlLmNv
bHVtbiwgcHJpdi0+bW9kZWwuYmFzZS5yb3csCiAgICAgICAgICAgIHByaXYtPnZpZXcub2Zmc2V0
LmN1ci54LCBwcml2LT52aWV3Lm9mZnNldC5jdXIueSwKICAgICAgICAgICAgcHJpdi0+dmlldy5v
ZmZzZXQub2xkLngsIHByaXYtPnZpZXcub2Zmc2V0Lm9sZC55LAogICAgICAgICAgICBwcml2LT52
aWV3Lm9mZnNldC5iYXNlLngsIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSk7CkBAIC05MTEsMTUg
KzkxMSwxNSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3Zp
ZXdfZGJnKGNvbnN0IEV3a19UaWxlZF9CYWNraW5nX1N0bwogICAgIHN0YXJ0ID0gcHJpdi0+dmll
dy5pdGVtczsKICAgICBlbmQgPSBwcml2LT52aWV3Lml0ZW1zICsgcHJpdi0+dmlldy5yb3dzOwog
ICAgIGZvciAoOyBzdGFydCA8IGVuZDsgc3RhcnQrKykgewotICAgICAgICBjb25zdCBFd2tfVGls
ZWRfQmFja2luZ19TdG9yZV9JdGVtKiBpdDsKKyAgICAgICAgY29uc3QgRXdrX1RpbGVkX0JhY2tp
bmdfU3RvcmVfSXRlbSogaXRlbTsKIAotICAgICAgICBFSU5BX0lOTElTVF9GT1JFQUNIKCpzdGFy
dCwgaXQpIHsKLSAgICAgICAgICAgIHByaW50ZigiICUrNGQsJSs0ZCAiLCBpdC0+Z2VvbWV0cnku
eCwgaXQtPmdlb21ldHJ5LnkpOworICAgICAgICBFSU5BX0lOTElTVF9GT1JFQUNIKCpzdGFydCwg
aXRlbSkgeworICAgICAgICAgICAgcHJpbnRmKCIgJSs0ZCwlKzRkICIsIGl0ZW0tPmdlb21ldHJ5
LngsIGl0ZW0tPmdlb21ldHJ5LnkpOwogCi0gICAgICAgICAgICBpZiAoIWl0LT50aWxlKQorICAg
ICAgICAgICAgaWYgKCFpdGVtLT50aWxlKQogICAgICAgICAgICAgICAgIHByaW50ZigiICAgICAg
ICAgICAgOyIpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHByaW50ZigiJThw
ICVsdSwlbHU7IiwgaXQtPnRpbGUsIGl0LT50aWxlLT5jb2wsIGl0LT50aWxlLT5yb3cpOworICAg
ICAgICAgICAgICAgIHByaW50ZigiJThwICVsdSwlbHU7IiwgaXRlbS0+dGlsZSwgaXRlbS0+dGls
ZS0+Y29sLCBpdGVtLT50aWxlLT5yb3cpOwogICAgICAgICB9CiAgICAgICAgIHByaW50ZigiXG4i
KTsKICAgICB9CkBAIC05NDEsMzcgKzk0MSwzNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfZGJnKGNvbnN0IEV3a19UaWxlZF9CYWNraW5nX1N0bwog
ICovCiBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld193cmFwX3VwKEV3
a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29y
ZCB5LCB1bnNpZ25lZCBpbnQgY291bnQpCiB7Ci0gICAgdW5zaWduZWQgaW50IGxhc3Rfcm93ID0g
cHJpdi0+dmlldy5yb3dzIC0gMTsKLSAgICBFdmFzX0Nvb3JkIHR3ID0gcHJpdi0+dmlldy50aWxl
LndpZHRoOwotICAgIEV2YXNfQ29vcmQgdGggPSBwcml2LT52aWV3LnRpbGUuaGVpZ2h0OwotICAg
IEV2YXNfQ29vcmQgb2ZmX3kgPSBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgKyBjb3VudCAqIHRo
OwotICAgIEV2YXNfQ29vcmQgb3kgPSB5ICsgKGxhc3Rfcm93IC0gY291bnQgKyAxKSAqIHRoICsg
b2ZmX3k7Ci0gICAgRWluYV9Jbmxpc3QqKiBpdHJfc3RhcnQsICoqaXRyX2VuZDsKKyAgICB1bnNp
Z25lZCBpbnQgbGFzdFJvdyA9IHByaXYtPnZpZXcucm93cyAtIDE7CisgICAgRXZhc19Db29yZCB0
aWxlV2lkdGggPSBwcml2LT52aWV3LnRpbGUud2lkdGg7CisgICAgRXZhc19Db29yZCB0aWxlSGVp
Z2h0ID0gcHJpdi0+dmlldy50aWxlLmhlaWdodDsKKyAgICBFdmFzX0Nvb3JkIG9mZnNldFkgPSBw
cml2LT52aWV3Lm9mZnNldC5iYXNlLnkgKyBjb3VudCAqIHRpbGVIZWlnaHQ7CisgICAgRXZhc19D
b29yZCB0aWxlUG9zaXRpb25ZID0geSArIChsYXN0Um93IC0gY291bnQgKyAxKSAqIHRpbGVIZWln
aHQgKyBvZmZzZXRZOworICAgIEVpbmFfSW5saXN0KiogaXRlcmF0b3JTdGFydCwgKippdGVyYXRv
ckVuZDsKIAotICAgIGl0cl9zdGFydCA9IHByaXYtPnZpZXcuaXRlbXM7Ci0gICAgaXRyX2VuZCA9
IGl0cl9zdGFydCArIGxhc3Rfcm93OworICAgIGl0ZXJhdG9yU3RhcnQgPSBwcml2LT52aWV3Lml0
ZW1zOworICAgIGl0ZXJhdG9yRW5kID0gaXRlcmF0b3JTdGFydCArIGxhc3RSb3c7CiAKICAgICBm
b3IgKDsgY291bnQgPiAwOyBjb3VudC0tKSB7Ci0gICAgICAgIEVpbmFfSW5saXN0KiogaXRyOwot
ICAgICAgICBFaW5hX0lubGlzdCogdG1wID0gKml0cl9zdGFydDsKLSAgICAgICAgRXdrX1RpbGVk
X0JhY2tpbmdfU3RvcmVfSXRlbSogaXQ7Ci0gICAgICAgIEV2YXNfQ29vcmQgb3ggPSB4ICsgcHJp
di0+dmlldy5vZmZzZXQuYmFzZS54OwotICAgICAgICBpbnQgYyA9IDA7CisgICAgICAgIEVpbmFf
SW5saXN0KiogaXRlcmF0b3JMaXN0OworICAgICAgICBFaW5hX0lubGlzdCogdGVtcCA9ICppdGVy
YXRvclN0YXJ0OworICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKiBpdGVtOwor
ICAgICAgICBFdmFzX0Nvb3JkIG9yaWdpYW5sWCA9IHggKyBwcml2LT52aWV3Lm9mZnNldC5iYXNl
Lng7CisgICAgICAgIGludCBjb3VudDEgPSAwOwogCi0gICAgICAgIGZvciAoaXRyID0gaXRyX3N0
YXJ0OyBpdHIgPCBpdHJfZW5kOyBpdHIrKykKLSAgICAgICAgICAgICppdHIgPSAqKGl0ciArIDEp
OwotICAgICAgICAqaXRyID0gdG1wOworICAgICAgICBmb3IgKGl0ZXJhdG9yTGlzdCA9IGl0ZXJh
dG9yU3RhcnQ7IGl0ZXJhdG9yTGlzdCA8IGl0ZXJhdG9yRW5kOyBpdGVyYXRvckxpc3QrKykKKyAg
ICAgICAgICAgICppdGVyYXRvckxpc3QgPSAqKGl0ZXJhdG9yTGlzdCArIDEpOworICAgICAgICAq
aXRlcmF0b3JMaXN0ID0gdGVtcDsKIAogICAgICAgICBwcml2LT5tb2RlbC5iYXNlLnJvdysrOwot
ICAgICAgICBFSU5BX0lOTElTVF9GT1JFQUNIKHRtcCwgaXQpIHsKLSAgICAgICAgICAgIF9ld2tf
dGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX21vdmUoaXQsIG94LCBveSk7Ci0gICAgICAgICAgICBv
eCArPSB0dzsKLSAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2ZpbGwo
cHJpdiwgaXQsIGMsIGxhc3Rfcm93KTsKLSAgICAgICAgICAgIGMrKzsKKyAgICAgICAgRUlOQV9J
TkxJU1RfRk9SRUFDSCh0ZW1wLCBpdGVtKSB7CisgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfaXRlbV9tb3ZlKGl0ZW0sIG9yaWdpYW5sWCwgdGlsZVBvc2l0aW9uWSk7CisgICAg
ICAgICAgICBvcmlnaWFubFggKz0gdGlsZVdpZHRoOworICAgICAgICAgICAgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX2l0ZW1fZmlsbChwcml2LCBpdGVtLCBjb3VudDEsIGxhc3RSb3cpOworICAg
ICAgICAgICAgY291bnQxKys7CiAgICAgICAgIH0KLSAgICAgICAgb3kgKz0gdGg7CisgICAgICAg
IHRpbGVQb3NpdGlvblkgKz0gdGlsZUhlaWdodDsKICAgICB9Ci0gICAgcHJpdi0+dmlldy5vZmZz
ZXQuYmFzZS55ID0gb2ZmX3k7CisgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ID0gb2Zmc2V0
WTsKIH0KIAogLyoqCkBAIC05ODksMzYgKzk4OSwzNiBAQCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfdmlld193cmFwX3VwKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEq
CiAgKi8KIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3dyYXBfZG93
bihFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2LCBFdmFzX0Nvb3JkIHgsIEV2YXNf
Q29vcmQgeSwgdW5zaWduZWQgaW50IGNvdW50KQogewotICAgIEV2YXNfQ29vcmQgdHcgPSBwcml2
LT52aWV3LnRpbGUud2lkdGg7Ci0gICAgRXZhc19Db29yZCB0aCA9IHByaXYtPnZpZXcudGlsZS5o
ZWlnaHQ7Ci0gICAgRXZhc19Db29yZCBvZmZfeSA9IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSAt
IGNvdW50ICogdGg7Ci0gICAgRXZhc19Db29yZCBveSA9IHkgKyBvZmZfeSArIChjb3VudCAtIDEp
ICogdGg7Ci0gICAgRWluYV9Jbmxpc3QqKiBpdHJfc3RhcnQsICoqaXRyX2VuZDsKKyAgICBFdmFz
X0Nvb3JkIHRpbGVXaWR0aCA9IHByaXYtPnZpZXcudGlsZS53aWR0aDsKKyAgICBFdmFzX0Nvb3Jk
IHRpbGVIZWlnaHQgPSBwcml2LT52aWV3LnRpbGUuaGVpZ2h0OworICAgIEV2YXNfQ29vcmQgb2Zm
c2V0WSA9IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSAtIGNvdW50ICogdGlsZUhlaWdodDsKKyAg
ICBFdmFzX0Nvb3JkIHRpbGVQb3NpdGlvblkgPSB5ICsgb2Zmc2V0WSArIChjb3VudCAtIDEpICog
dGlsZUhlaWdodDsKKyAgICBFaW5hX0lubGlzdCoqIGl0ZXJhdG9yU3RhcnQsICoqaXRlcmF0b3JF
bmQ7CiAKLSAgICBpdHJfc3RhcnQgPSBwcml2LT52aWV3Lml0ZW1zICsgcHJpdi0+dmlldy5yb3dz
IC0gMTsKLSAgICBpdHJfZW5kID0gcHJpdi0+dmlldy5pdGVtczsKKyAgICBpdGVyYXRvclN0YXJ0
ID0gcHJpdi0+dmlldy5pdGVtcyArIHByaXYtPnZpZXcucm93cyAtIDE7CisgICAgaXRlcmF0b3JF
bmQgPSBwcml2LT52aWV3Lml0ZW1zOwogCiAgICAgZm9yICg7IGNvdW50ID4gMDsgY291bnQtLSkg
ewotICAgICAgICBFaW5hX0lubGlzdCoqIGl0cjsKLSAgICAgICAgRWluYV9Jbmxpc3QqIHRtcCA9
ICppdHJfc3RhcnQ7Ci0gICAgICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0qIGl0Owot
ICAgICAgICBFdmFzX0Nvb3JkIG94ID0geCArIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueDsKLSAg
ICAgICAgaW50IGMgPSAwOworICAgICAgICBFaW5hX0lubGlzdCoqIGl0ZXJhdG9yTGlzdDsKKyAg
ICAgICAgRWluYV9Jbmxpc3QqIHRlbXAgPSAqaXRlcmF0b3JTdGFydDsKKyAgICAgICAgRXdrX1Rp
bGVkX0JhY2tpbmdfU3RvcmVfSXRlbSogaXRlbTsKKyAgICAgICAgRXZhc19Db29yZCB0aWxlUG9z
aXRpb25YID0geCArIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueDsKKyAgICAgICAgaW50IGNvdW50
MSA9IDA7CiAKLSAgICAgICAgZm9yIChpdHIgPSBpdHJfc3RhcnQ7IGl0ciA+IGl0cl9lbmQ7IGl0
ci0tKQotICAgICAgICAgICAgKml0ciA9ICooaXRyIC0gMSk7Ci0gICAgICAgICppdHIgPSB0bXA7
CisgICAgICAgIGZvciAoaXRlcmF0b3JMaXN0ID0gaXRlcmF0b3JTdGFydDsgaXRlcmF0b3JMaXN0
ID4gaXRlcmF0b3JFbmQ7IGl0ZXJhdG9yTGlzdC0tKQorICAgICAgICAgICAgKml0ZXJhdG9yTGlz
dCA9ICooaXRlcmF0b3JMaXN0IC0gMSk7CisgICAgICAgICppdGVyYXRvckxpc3QgPSB0ZW1wOwog
CiAgICAgICAgIHByaXYtPm1vZGVsLmJhc2Uucm93LS07Ci0gICAgICAgIEVJTkFfSU5MSVNUX0ZP
UkVBQ0godG1wLCBpdCkgewotICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0
ZW1fbW92ZShpdCwgb3gsIG95KTsKLSAgICAgICAgICAgIG94ICs9IHR3OwotICAgICAgICAgICAg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZmlsbChwcml2LCBpdCwgYywgMCk7Ci0gICAg
ICAgICAgICBjKys7CisgICAgICAgIEVJTkFfSU5MSVNUX0ZPUkVBQ0godGVtcCwgaXRlbSkgewor
ICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fbW92ZShpdGVtLCB0aWxl
UG9zaXRpb25YLCB0aWxlUG9zaXRpb25ZKTsKKyAgICAgICAgICAgIHRpbGVQb3NpdGlvblggKz0g
dGlsZVdpZHRoOworICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZmls
bChwcml2LCBpdGVtLCBjb3VudDEsIDApOworICAgICAgICAgICAgY291bnQxKys7CiAgICAgICAg
IH0KLSAgICAgICAgb3kgLT0gdGg7CisgICAgICAgIHRpbGVQb3NpdGlvblkgLT0gdGlsZUhlaWdo
dDsKICAgICB9Ci0gICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ID0gb2ZmX3k7CisgICAgcHJp
di0+dmlldy5vZmZzZXQuYmFzZS55ID0gb2Zmc2V0WTsKIH0KIAogLyoqCkBAIC0xMDM2LDM2ICsx
MDM2LDM2IEBAIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3dyYXBf
ZG93bihFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9EYXRhCiAgKi8KIHN0YXRpYyB2b2lkIF9ld2tf
dGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3dyYXBfbGVmdChFd2tfVGlsZWRfQmFja2luZ19TdG9y
ZV9EYXRhKiBwcml2LCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwgdW5zaWduZWQgaW50IGNv
dW50KQogewotICAgIHVuc2lnbmVkIGludCByLCBsYXN0X2NvbCA9IHByaXYtPnZpZXcuY29scyAt
IDE7Ci0gICAgRXZhc19Db29yZCB0dyA9IHByaXYtPnZpZXcudGlsZS53aWR0aDsKLSAgICBFdmFz
X0Nvb3JkIHRoID0gcHJpdi0+dmlldy50aWxlLmhlaWdodDsKLSAgICBFdmFzX0Nvb3JkIG9mZl94
ID0gcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54ICsgY291bnQgKiB0dzsKKyAgICB1bnNpZ25lZCBp
bnQgcm93LCBsYXN0Q29sdW1uID0gcHJpdi0+dmlldy5jb2xzIC0gMTsKKyAgICBFdmFzX0Nvb3Jk
IHRpbGVXaWR0aCA9IHByaXYtPnZpZXcudGlsZS53aWR0aDsKKyAgICBFdmFzX0Nvb3JkIHRpbGVI
ZWlnaHQgPSBwcml2LT52aWV3LnRpbGUuaGVpZ2h0OworICAgIEV2YXNfQ29vcmQgb2Zmc2V0WCA9
IHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCArIGNvdW50ICogdGlsZVdpZHRoOwogICAgIEV2YXNf
Q29vcmQgb3kgPSB5ICsgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55OwotICAgIEVpbmFfSW5saXN0
KiogaXRyOwotICAgIEVpbmFfSW5saXN0KiogaXRyX2VuZDsKKyAgICBFaW5hX0lubGlzdCoqIGl0
ZXJhdG9yOworICAgIEVpbmFfSW5saXN0KiogaXRlcmF0b3JFbmQ7CiAKLSAgICBpdHIgPSBwcml2
LT52aWV3Lml0ZW1zOwotICAgIGl0cl9lbmQgPSBpdHIgKyBwcml2LT52aWV3LnJvd3M7Ci0gICAg
ciA9IDA7CisgICAgaXRlcmF0b3IgPSBwcml2LT52aWV3Lml0ZW1zOworICAgIGl0ZXJhdG9yRW5k
ID0gaXRlcmF0b3IgKyBwcml2LT52aWV3LnJvd3M7CisgICAgcm93ID0gMDsKIAotICAgIHByaXYt
Pm1vZGVsLmJhc2UuY29sICs9IGNvdW50OworICAgIHByaXYtPm1vZGVsLmJhc2UuY29sdW1uICs9
IGNvdW50OwogCi0gICAgZm9yICg7IGl0ciA8IGl0cl9lbmQ7IGl0cisrLCByKyspIHsKLSAgICAg
ICAgRXZhc19Db29yZCBveCA9IHggKyAobGFzdF9jb2wgLSBjb3VudCArIDEpICogdHcgKyBvZmZf
eDsKLSAgICAgICAgdW5zaWduZWQgaW50IGksIGMgPSBsYXN0X2NvbCAtIGNvdW50ICsgMTsKKyAg
ICBmb3IgKDsgaXRlcmF0b3IgPCBpdGVyYXRvckVuZDsgaXRlcmF0b3IrKywgcm93KyspIHsKKyAg
ICAgICAgRXZhc19Db29yZCBveCA9IHggKyAobGFzdENvbHVtbiAtIGNvdW50ICsgMSkgKiB0aWxl
V2lkdGggKyBvZmZzZXRYOworICAgICAgICB1bnNpZ25lZCBpbnQgYyA9IGxhc3RDb2x1bW4gLSBj
b3VudCArIDE7CiAKLSAgICAgICAgZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyssIGMrKywgb3gg
Kz0gdHcpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsr
LCBjKyssIG94ICs9IHRpbGVXaWR0aCkgewogICAgICAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdf
U3RvcmVfSXRlbSogaXQ7Ci0gICAgICAgICAgICBpdCA9IEVJTkFfSU5MSVNUX0NPTlRBSU5FUl9H
RVQoKml0ciwgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSk7Ci0gICAgICAgICAgICAqaXRy
ID0gZWluYV9pbmxpc3RfZGVtb3RlKCppdHIsICppdHIpOworICAgICAgICAgICAgaXQgPSBFSU5B
X0lOTElTVF9DT05UQUlORVJfR0VUKCppdGVyYXRvciwgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVf
SXRlbSk7CisgICAgICAgICAgICAqaXRlcmF0b3IgPSBlaW5hX2lubGlzdF9kZW1vdGUoKml0ZXJh
dG9yLCAqaXRlcmF0b3IpOwogCiAgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
aXRlbV9tb3ZlKGl0LCBveCwgb3kpOwotICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0
b3JlX2l0ZW1fZmlsbChwcml2LCBpdCwgYywgcik7CisgICAgICAgICAgICBfZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfaXRlbV9maWxsKHByaXYsIGl0LCBjLCByb3cpOwogICAgICAgICB9Ci0gICAg
ICAgIG95ICs9IHRoOworICAgICAgICBveSArPSB0aWxlSGVpZ2h0OwogICAgIH0KIAotICAgIHBy
aXYtPnZpZXcub2Zmc2V0LmJhc2UueCA9IG9mZl94OworICAgIHByaXYtPnZpZXcub2Zmc2V0LmJh
c2UueCA9IG9mZnNldFg7CiB9CiAKIC8qKgpAQCAtMTA4MywxODMgKzEwODMsMTgzIEBAIHN0YXRp
YyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3dyYXBfbGVmdChFd2tfVGlsZWRf
QmFja2luZ19TdG9yZV9EYXRhCiAgKi8KIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV92aWV3X3dyYXBfcmlnaHQoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdiwg
RXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHksIHVuc2lnbmVkIGludCBjb3VudCkKIHsKLSAgICB1
bnNpZ25lZCBpbnQgcjsKLSAgICBFdmFzX0Nvb3JkIHR3ID0gcHJpdi0+dmlldy50aWxlLndpZHRo
OwotICAgIEV2YXNfQ29vcmQgdGggPSBwcml2LT52aWV3LnRpbGUuaGVpZ2h0OwotICAgIEV2YXNf
Q29vcmQgb2ZmX3ggPSBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggLSBjb3VudCAqIHR3OwotICAg
IEV2YXNfQ29vcmQgb3kgPSB5ICsgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55OwotICAgIEVpbmFf
SW5saXN0KiogaXRyLCAqKiBpdHJfZW5kOworICAgIHVuc2lnbmVkIGludCByb3c7CisgICAgRXZh
c19Db29yZCB0aWxlV2lkdGggPSBwcml2LT52aWV3LnRpbGUud2lkdGg7CisgICAgRXZhc19Db29y
ZCB0aWxlSGVpZ2h0ID0gcHJpdi0+dmlldy50aWxlLmhlaWdodDsKKyAgICBFdmFzX0Nvb3JkIG9m
ZnNldFggPSBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggLSBjb3VudCAqIHRpbGVXaWR0aDsKKyAg
ICBFdmFzX0Nvb3JkIHRpbGVQb3NpdGlvblkgPSB5ICsgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55
OworICAgIEVpbmFfSW5saXN0KiogaXRlcmF0b3IsICoqIGl0ZXJhdG9yRW5kOwogCi0gICAgaXRy
ID0gcHJpdi0+dmlldy5pdGVtczsKLSAgICBpdHJfZW5kID0gaXRyICsgcHJpdi0+dmlldy5yb3dz
OwotICAgIHIgPSAwOworICAgIGl0ZXJhdG9yID0gcHJpdi0+dmlldy5pdGVtczsKKyAgICBpdGVy
YXRvckVuZCA9IGl0ZXJhdG9yICsgcHJpdi0+dmlldy5yb3dzOworICAgIHJvdyA9IDA7CiAKLSAg
ICBwcml2LT5tb2RlbC5iYXNlLmNvbCAtPSBjb3VudDsKKyAgICBwcml2LT5tb2RlbC5iYXNlLmNv
bHVtbiAtPSBjb3VudDsKIAotICAgIGZvciAoOyBpdHIgPCBpdHJfZW5kOyBpdHIrKywgcisrKSB7
Ci0gICAgICAgIEV2YXNfQ29vcmQgb3ggPSB4ICsgKGNvdW50IC0gMSkgKiB0dyArIG9mZl94Owot
ICAgICAgICB1bnNpZ25lZCBpbnQgaSwgYyA9IGNvdW50IC0gMTsKKyAgICBmb3IgKDsgaXRlcmF0
b3IgPCBpdGVyYXRvckVuZDsgaXRlcmF0b3IrKywgcm93KyspIHsKKyAgICAgICAgRXZhc19Db29y
ZCBveCA9IHggKyAoY291bnQgLSAxKSAqIHRpbGVXaWR0aCArIG9mZnNldFg7CisgICAgICAgIHVu
c2lnbmVkIGludCBjID0gY291bnQgLSAxOwogCi0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb3Vu
dDsgaSsrLCBjLS0sIG94IC09IHR3KSB7Ci0gICAgICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19T
dG9yZV9JdGVtKiBpdDsKLSAgICAgICAgICAgIGl0ID0gRUlOQV9JTkxJU1RfQ09OVEFJTkVSX0dF
VCgoKml0ciktPmxhc3QsIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0pOwotICAgICAgICAg
ICAgKml0ciA9IGVpbmFfaW5saXN0X3Byb21vdGUoKml0ciwgKCppdHIpLT5sYXN0KTsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrLCBjLS0sIG94IC09IHRp
bGVXaWR0aCkgeworICAgICAgICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSogaXRl
bTsKKyAgICAgICAgICAgIGl0ZW0gPSBFSU5BX0lOTElTVF9DT05UQUlORVJfR0VUKCgqaXRlcmF0
b3IpLT5sYXN0LCBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKTsKKyAgICAgICAgICAgICpp
dGVyYXRvciA9IGVpbmFfaW5saXN0X3Byb21vdGUoKml0ZXJhdG9yLCAoKml0ZXJhdG9yKS0+bGFz
dCk7CiAKLSAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX21vdmUoaXQs
IG94LCBveSk7Ci0gICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9maWxs
KHByaXYsIGl0LCBjLCByKTsKKyAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9p
dGVtX21vdmUoaXRlbSwgb3gsIHRpbGVQb3NpdGlvblkpOworICAgICAgICAgICAgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX2l0ZW1fZmlsbChwcml2LCBpdGVtLCBjLCByb3cpOwogICAgICAgICB9
Ci0gICAgICAgIG95ICs9IHRoOworICAgICAgICB0aWxlUG9zaXRpb25ZICs9IHRpbGVIZWlnaHQ7
CiAgICAgfQogCi0gICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54ID0gb2ZmX3g7CisgICAgcHJp
di0+dmlldy5vZmZzZXQuYmFzZS54ID0gb2Zmc2V0WDsKIH0KIAogc3RhdGljIHZvaWQgX2V3a190
aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcmVmaWxsKEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0Rh
dGEqIHByaXYsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5LCBpbnQgc3RlcFgsIGludCBzdGVw
WSkKIHsKLSAgICBFaW5hX0lubGlzdCoqIGl0ciwgKippdHJfZW5kOwotICAgIEV2YXNfQ29vcmQg
YmFzZV9veCwgb3ksIHR3LCB0aDsKKyAgICBFaW5hX0lubGlzdCoqIGl0ZXJhdG9yLCAqKml0ZXJh
dG9yRW5kOworICAgIEV2YXNfQ29vcmQgYmFzZVRpbGVQb3NpdGlvblgsIHRpbGVQb3NpdGlvblks
IHRpbGVXaWR0aCwgdGlsZUhlaWdodDsKICAgICB1bnNpZ25lZCBpbnQgcjsKIAogICAgIGV2YXNf
b2JqZWN0X21vdmUocHJpdi0+YmFzZS5jbGlwcGVyLCB4LCB5KTsKIAotICAgIHR3ID0gcHJpdi0+
dmlldy50aWxlLndpZHRoOwotICAgIHRoID0gcHJpdi0+dmlldy50aWxlLmhlaWdodDsKKyAgICB0
aWxlV2lkdGggPSBwcml2LT52aWV3LnRpbGUud2lkdGg7CisgICAgdGlsZUhlaWdodCA9IHByaXYt
PnZpZXcudGlsZS5oZWlnaHQ7CiAKLSAgICBiYXNlX294ID0geCArIHByaXYtPnZpZXcub2Zmc2V0
LmJhc2UueDsKLSAgICBveSA9IHkgKyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnk7CisgICAgYmFz
ZVRpbGVQb3NpdGlvblggPSB4ICsgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54OworICAgIHRpbGVQ
b3NpdGlvblkgPSB5ICsgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55OwogCi0gICAgaXRyID0gcHJp
di0+dmlldy5pdGVtczsKLSAgICBpdHJfZW5kID0gaXRyICsgcHJpdi0+dmlldy5yb3dzOworICAg
IGl0ZXJhdG9yID0gcHJpdi0+dmlldy5pdGVtczsKKyAgICBpdGVyYXRvckVuZCA9IGl0ZXJhdG9y
ICsgcHJpdi0+dmlldy5yb3dzOwogICAgIHIgPSAwOwogCi0gICAgcHJpdi0+bW9kZWwuYmFzZS5j
b2wgLT0gc3RlcFg7CisgICAgcHJpdi0+bW9kZWwuYmFzZS5jb2x1bW4gLT0gc3RlcFg7CiAgICAg
cHJpdi0+bW9kZWwuYmFzZS5yb3cgLT0gc3RlcFk7CiAKLSAgICBmb3IgKDsgaXRyIDwgaXRyX2Vu
ZDsgaXRyKyssIHIrKykgewotICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKiBp
dDsKLSAgICAgICAgRXZhc19Db29yZCBveCA9IGJhc2Vfb3g7Ci0gICAgICAgIHVuc2lnbmVkIGlu
dCBjID0gMDsKLSAgICAgICAgRUlOQV9JTkxJU1RfRk9SRUFDSCgqaXRyLCBpdCkgewotICAgICAg
ICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fZmlsbChwcml2LCBpdCwgYywgcik7
Ci0gICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9tb3ZlKGl0LCBveCwg
b3kpOwotICAgICAgICAgICAgYysrOwotICAgICAgICAgICAgb3ggKz0gdHc7CisgICAgZm9yICg7
IGl0ZXJhdG9yIDwgaXRlcmF0b3JFbmQ7IGl0ZXJhdG9yKyssIHIrKykgeworICAgICAgICBFd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKiBpdGVtOworICAgICAgICBFdmFzX0Nvb3JkIG5ld1Rp
bGVQb3NpdGlvblggPSBiYXNlVGlsZVBvc2l0aW9uWDsKKyAgICAgICAgdW5zaWduZWQgaW50IGNv
dW50ID0gMDsKKyAgICAgICAgRUlOQV9JTkxJU1RfRk9SRUFDSCgqaXRlcmF0b3IsIGl0ZW0pIHsK
KyAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX2ZpbGwocHJpdiwgaXRl
bSwgY291bnQsIHIpOworICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1f
bW92ZShpdGVtLCBuZXdUaWxlUG9zaXRpb25YLCB0aWxlUG9zaXRpb25ZKTsKKyAgICAgICAgICAg
IGNvdW50Kys7CisgICAgICAgICAgICBuZXdUaWxlUG9zaXRpb25YICs9IHRpbGVXaWR0aDsKICAg
ICAgICAgfQotICAgICAgICBveSArPSB0aDsKKyAgICAgICAgdGlsZVBvc2l0aW9uWSArPSB0aWxl
SGVpZ2h0OwogICAgIH0KIH0KIAogc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3Jl
X3ZpZXdfcG9zX2FwcGx5KEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0RhdGEqIHByaXYsIEV2YXNf
Q29vcmQgeCwgRXZhc19Db29yZCB5KQogewotICAgIEVpbmFfSW5saXN0KiogaXRyLCAqKml0cl9l
bmQ7Ci0gICAgRXZhc19Db29yZCBiYXNlX294LCBveSwgdHcsIHRoOworICAgIEVpbmFfSW5saXN0
KiogaXRlcmF0b3IsICoqaXRlcmF0b3JFbmQ7CisgICAgRXZhc19Db29yZCBiYXNlVGlsZVBvc2l0
aW9uWCwgYmFzZVRpbGVQb3NpdGlvblksIHRpbGVXaWR0aCwgdGlsZUhlaWdodDsKIAogICAgIGV2
YXNfb2JqZWN0X21vdmUocHJpdi0+YmFzZS5jbGlwcGVyLCB4LCB5KTsKIAotICAgIHR3ID0gcHJp
di0+dmlldy50aWxlLndpZHRoOwotICAgIHRoID0gcHJpdi0+dmlldy50aWxlLmhlaWdodDsKKyAg
ICB0aWxlV2lkdGggPSBwcml2LT52aWV3LnRpbGUud2lkdGg7CisgICAgdGlsZUhlaWdodCA9IHBy
aXYtPnZpZXcudGlsZS5oZWlnaHQ7CiAKLSAgICBiYXNlX294ID0geCArIHByaXYtPnZpZXcub2Zm
c2V0LmJhc2UueDsKLSAgICBveSA9IHkgKyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnk7CisgICAg
YmFzZVRpbGVQb3NpdGlvblggPSB4ICsgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54OworICAgIGJh
c2VUaWxlUG9zaXRpb25ZID0geSArIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueTsKIAotICAgIGl0
ciA9IHByaXYtPnZpZXcuaXRlbXM7Ci0gICAgaXRyX2VuZCA9IGl0ciArIHByaXYtPnZpZXcucm93
czsKLSAgICBmb3IgKDsgaXRyIDwgaXRyX2VuZDsgaXRyKyspIHsKKyAgICBpdGVyYXRvciA9IHBy
aXYtPnZpZXcuaXRlbXM7CisgICAgaXRlcmF0b3JFbmQgPSBpdGVyYXRvciArIHByaXYtPnZpZXcu
cm93czsKKyAgICBmb3IgKDsgaXRlcmF0b3IgPCBpdGVyYXRvckVuZDsgaXRlcmF0b3IrKykgewog
ICAgICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVtKiBpdDsKLSAgICAgICAgRXZhc19D
b29yZCBveCA9IGJhc2Vfb3g7Ci0gICAgICAgIEVJTkFfSU5MSVNUX0ZPUkVBQ0goKml0ciwgaXQp
IHsKLSAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX21vdmUoaXQsIG94
LCBveSk7Ci0gICAgICAgICAgICBveCArPSB0dzsKKyAgICAgICAgRXZhc19Db29yZCBveCA9IGJh
c2VUaWxlUG9zaXRpb25YOworICAgICAgICBFSU5BX0lOTElTVF9GT1JFQUNIKCppdGVyYXRvciwg
aXQpIHsKKyAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX21vdmUoaXQs
IG94LCBiYXNlVGlsZVBvc2l0aW9uWSk7CisgICAgICAgICAgICBveCArPSB0aWxlV2lkdGg7CiAg
ICAgICAgIH0KLSAgICAgICAgb3kgKz0gdGg7CisgICAgICAgIGJhc2VUaWxlUG9zaXRpb25ZICs9
IHRpbGVIZWlnaHQ7CiAgICAgfQogfQogCiBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfc21hcnRfY2FsY3VsYXRlX29mZnNldF9mb3JjZShFd2tfVGlsZWRfQmFja2luZ19TdG9y
ZV9EYXRhKiBwcml2KQogewotICAgIEV2YXNfQ29vcmQgZHggPSBwcml2LT52aWV3Lm9mZnNldC5j
dXIueCAtIHByaXYtPnZpZXcub2Zmc2V0Lm9sZC54OwotICAgIEV2YXNfQ29vcmQgZHkgPSBwcml2
LT52aWV3Lm9mZnNldC5jdXIueSAtIHByaXYtPnZpZXcub2Zmc2V0Lm9sZC55OwotICAgIEV2YXNf
Q29vcmQgdHcsIHRoOwotICAgIGludCBzdGVwX3ksIHN0ZXBfeDsKKyAgICBFdmFzX0Nvb3JkIGRl
bHRhWCA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci54IC0gcHJpdi0+dmlldy5vZmZzZXQub2xkLng7
CisgICAgRXZhc19Db29yZCBkZWx0YVkgPSBwcml2LT52aWV3Lm9mZnNldC5jdXIueSAtIHByaXYt
PnZpZXcub2Zmc2V0Lm9sZC55OworICAgIEV2YXNfQ29vcmQgdGlsZVdpZHRoLCB0aWxlSGVpZ2h0
OworICAgIGludCBzdGVwWSwgc3RlcFg7CiAKLSAgICBJTkYoIm89JXAsIG9mZnNldDogJSs0ZCwg
JSs0ZCAoJSs0ZCwgJSs0ZCkiLAotICAgICAgICBwcml2LT5zZWxmLCBkeCwgZHksIHByaXYtPnZp
ZXcub2Zmc2V0LmN1ci54LCBwcml2LT52aWV3Lm9mZnNldC5jdXIueSk7CisgICAgSU5GKCJld2tU
aWxlJXAsIG9mZnNldDogJSs0ZCwgJSs0ZCAoJSs0ZCwgJSs0ZCkiLAorICAgICAgICBwcml2LT5z
ZWxmLCBkZWx0YVgsIGRlbHRhWSwgcHJpdi0+dmlldy5vZmZzZXQuY3VyLngsIHByaXYtPnZpZXcu
b2Zmc2V0LmN1ci55KTsKIAotICAgIHR3ID0gcHJpdi0+dmlldy50aWxlLndpZHRoOwotICAgIHRo
ID0gcHJpdi0+dmlldy50aWxlLmhlaWdodDsKKyAgICB0aWxlV2lkdGggPSBwcml2LT52aWV3LnRp
bGUud2lkdGg7CisgICAgdGlsZUhlaWdodCA9IHByaXYtPnZpZXcudGlsZS5oZWlnaHQ7CiAKLSAg
ICBsb25nIG5ld19jb2wgPSAtcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggLyB0dzsKLSAgICBzdGVw
X3ggPSBwcml2LT5tb2RlbC5iYXNlLmNvbCAtIG5ld19jb2w7Ci0gICAgbG9uZyBuZXdfcm93ID0g
LXByaXYtPnZpZXcub2Zmc2V0LmN1ci55IC8gdGg7Ci0gICAgc3RlcF95ID0gcHJpdi0+bW9kZWwu
YmFzZS5yb3cgLSBuZXdfcm93OworICAgIGxvbmcgbmV3Q29sdW1uID0gLXByaXYtPnZpZXcub2Zm
c2V0LmN1ci54IC8gdGlsZVdpZHRoOworICAgIHN0ZXBYID0gcHJpdi0+bW9kZWwuYmFzZS5jb2x1
bW4gLSBuZXdDb2x1bW47CisgICAgbG9uZyBuZXdSb3cgPSAtcHJpdi0+dmlldy5vZmZzZXQuY3Vy
LnkgLyB0aWxlSGVpZ2h0OworICAgIHN0ZXBZID0gcHJpdi0+bW9kZWwuYmFzZS5yb3cgLSBuZXdS
b3c7CiAKICAgICBwcml2LT52aWV3Lm9mZnNldC5vbGQueCA9IHByaXYtPnZpZXcub2Zmc2V0LmN1
ci54OwogICAgIHByaXYtPnZpZXcub2Zmc2V0Lm9sZC55ID0gcHJpdi0+dmlldy5vZmZzZXQuY3Vy
Lnk7CiAgICAgZXZhc19vYmplY3RfbW92ZSgKLSAgICAgICAgcHJpdi0+Y29udGVudHNfY2xpcHBl
ciwKKyAgICAgICAgcHJpdi0+Y29udGVudHNDbGlwcGVyLAogICAgICAgICBwcml2LT52aWV3Lm9m
ZnNldC5jdXIueCArIHByaXYtPnZpZXcueCwKICAgICAgICAgcHJpdi0+dmlldy5vZmZzZXQuY3Vy
LnkgKyBwcml2LT52aWV3LnkpOwogCi0gICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54ICs9IGR4
IC0gc3RlcF94ICogdHc7Ci0gICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ICs9IGR5IC0gc3Rl
cF95ICogdGg7CisgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54ICs9IGRlbHRhWCAtIHN0ZXBY
ICogdGlsZVdpZHRoOworICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSArPSBkZWx0YVkgLSBz
dGVwWSAqIHRpbGVIZWlnaHQ7CiAKICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld19y
ZWZpbGwKLSAgICAgICAgKHByaXYsIHByaXYtPnZpZXcueCwgcHJpdi0+dmlldy55LCBzdGVwX3gs
IHN0ZXBfeSk7CisgICAgICAgIChwcml2LCBwcml2LT52aWV3LngsIHByaXYtPnZpZXcueSwgc3Rl
cFgsIHN0ZXBZKTsKIH0KIAogc3RhdGljIHZvaWQgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3Nt
YXJ0X2NhbGN1bGF0ZV9vZmZzZXQoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdiwg
RXZhc19Db29yZCB4LCBFdmFzX0Nvb3JkIHkpCiB7Ci0gICAgRXZhc19Db29yZCBkeCA9IHByaXYt
PnZpZXcub2Zmc2V0LmN1ci54IC0gcHJpdi0+dmlldy5vZmZzZXQub2xkLng7Ci0gICAgRXZhc19D
b29yZCBkeSA9IHByaXYtPnZpZXcub2Zmc2V0LmN1ci55IC0gcHJpdi0+dmlldy5vZmZzZXQub2xk
Lnk7Ci0gICAgRXZhc19Db29yZCB0dywgdGg7Ci0gICAgaW50IHN0ZXBfeSwgc3RlcF94OworICAg
IEV2YXNfQ29vcmQgZGVsdGFYID0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggLSBwcml2LT52aWV3
Lm9mZnNldC5vbGQueDsKKyAgICBFdmFzX0Nvb3JkIGRlbHRhWSA9IHByaXYtPnZpZXcub2Zmc2V0
LmN1ci55IC0gcHJpdi0+dmlldy5vZmZzZXQub2xkLnk7CisgICAgRXZhc19Db29yZCB0aWxlV2lk
dGgsIHRpbGVIZWlnaHQ7CisgICAgaW50IHN0ZXBZLCBzdGVwWDsKIAotICAgIElORigibz0lcCwg
b2Zmc2V0OiAlKzRkLCAlKzRkICglKzRkLCAlKzRkKSIsCi0gICAgICAgIHByaXYtPnNlbGYsIGR4
LCBkeSwgcHJpdi0+dmlldy5vZmZzZXQuY3VyLngsIHByaXYtPnZpZXcub2Zmc2V0LmN1ci55KTsK
KyAgICBJTkYoImV3a1RpbGUlcCwgb2Zmc2V0OiAlKzRkLCAlKzRkICglKzRkLCAlKzRkKSIsCisg
ICAgICAgIHByaXYtPnNlbGYsIGRlbHRhWCwgZGVsdGFZLCBwcml2LT52aWV3Lm9mZnNldC5jdXIu
eCwgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkpOwogCi0gICAgaWYgKCFkeCAmJiAhZHkpCisgICAg
aWYgKCFkZWx0YVggJiYgIWRlbHRhWSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgdHcgPSBwcml2
LT52aWV3LnRpbGUud2lkdGg7Ci0gICAgdGggPSBwcml2LT52aWV3LnRpbGUuaGVpZ2h0OworICAg
IHRpbGVXaWR0aCA9IHByaXYtPnZpZXcudGlsZS53aWR0aDsKKyAgICB0aWxlSGVpZ2h0ID0gcHJp
di0+dmlldy50aWxlLmhlaWdodDsKIAotICAgIGxvbmcgbmV3X2NvbCA9IC1wcml2LT52aWV3Lm9m
ZnNldC5jdXIueCAvIHR3OwotICAgIHN0ZXBfeCA9IHByaXYtPm1vZGVsLmJhc2UuY29sIC0gbmV3
X2NvbDsKLSAgICBsb25nIG5ld19yb3cgPSAtcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkgLyB0aDsK
LSAgICBzdGVwX3kgPSBwcml2LT5tb2RlbC5iYXNlLnJvdyAtIG5ld19yb3c7CisgICAgbG9uZyBu
ZXdDb2wgPSAtcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggLyB0aWxlV2lkdGg7CisgICAgc3RlcFgg
PSBwcml2LT5tb2RlbC5iYXNlLmNvbHVtbiAtIG5ld0NvbDsKKyAgICBsb25nIG5ld1JvdyA9IC1w
cml2LT52aWV3Lm9mZnNldC5jdXIueSAvIHRpbGVIZWlnaHQ7CisgICAgc3RlcFkgPSBwcml2LT5t
b2RlbC5iYXNlLnJvdyAtIG5ld1JvdzsKIAogICAgIHByaXYtPnZpZXcub2Zmc2V0Lm9sZC54ID0g
cHJpdi0+dmlldy5vZmZzZXQuY3VyLng7CiAgICAgcHJpdi0+dmlldy5vZmZzZXQub2xkLnkgPSBw
cml2LT52aWV3Lm9mZnNldC5jdXIueTsKICAgICBldmFzX29iamVjdF9tb3ZlKAotICAgICAgICBw
cml2LT5jb250ZW50c19jbGlwcGVyLAorICAgICAgICBwcml2LT5jb250ZW50c0NsaXBwZXIsCiAg
ICAgICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1ci54ICsgcHJpdi0+dmlldy54LAogICAgICAgICBw
cml2LT52aWV3Lm9mZnNldC5jdXIueSArIHByaXYtPnZpZXcueSk7CiAKLSAgICBpZiAoKHN0ZXBf
eCA8IDAgJiYgc3RlcF94IDw9IC1wcml2LT52aWV3LmNvbHMpCi0gICAgICAgIHx8IChzdGVwX3gg
PiAwICYmIHN0ZXBfeCA+PSBwcml2LT52aWV3LmNvbHMpCi0gICAgICAgIHx8IChzdGVwX3kgPCAw
ICYmIHN0ZXBfeSA8PSAtcHJpdi0+dmlldy5yb3dzKQotICAgICAgICB8fCAoc3RlcF95ID4gMCAm
JiBzdGVwX3kgPj0gcHJpdi0+dmlldy5yb3dzKSkgeworICAgIGlmICgoc3RlcFggPCAwICYmIHN0
ZXBYIDw9IC1wcml2LT52aWV3LmNvbHMpCisgICAgICAgIHx8IChzdGVwWCA+IDAgJiYgc3RlcFgg
Pj0gcHJpdi0+dmlldy5jb2xzKQorICAgICAgICB8fCAoc3RlcFkgPCAwICYmIHN0ZXBZIDw9IC1w
cml2LT52aWV3LnJvd3MpCisgICAgICAgIHx8IChzdGVwWSA+IDAgJiYgc3RlcFkgPj0gcHJpdi0+
dmlldy5yb3dzKSkgewogCi0gICAgICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCArPSBkeCAt
IHN0ZXBfeCAqIHR3OwotICAgICAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgKz0gZHkgLSBz
dGVwX3kgKiB0aDsKKyAgICAgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54ICs9IGRlbHRhWCAt
IHN0ZXBYICogdGlsZVdpZHRoOworICAgICAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgKz0g
ZGVsdGFZIC0gc3RlcFkgKiB0aWxlSGVpZ2h0OwogCiAgICAgICAgIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV92aWV3X3JlZmlsbAotICAgICAgICAgICAgKHByaXYsIHByaXYtPnZpZXcueCwgcHJp
di0+dmlldy55LCBzdGVwX3gsIHN0ZXBfeSk7CisgICAgICAgICAgICAocHJpdiwgcHJpdi0+dmll
dy54LCBwcml2LT52aWV3LnksIHN0ZXBYLCBzdGVwWSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggKz0gZHg7Ci0gICAgcHJpdi0+dmlldy5v
ZmZzZXQuYmFzZS55ICs9IGR5OworICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueCArPSBkZWx0
YVg7CisgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ICs9IGRlbHRhWTsKIAotICAgIGlmIChz
dGVwX3kgPCAwKQotICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld193cmFwX3Vw
KHByaXYsIHgsIHksIC1zdGVwX3kpOwotICAgIGVsc2UgaWYgKHN0ZXBfeSA+IDApCi0gICAgICAg
IF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3dyYXBfZG93bihwcml2LCB4LCB5LCBzdGVw
X3kpOworICAgIGlmIChzdGVwWSA8IDApCisgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV92aWV3X3dyYXBfdXAocHJpdiwgeCwgeSwgLXN0ZXBZKTsKKyAgICBlbHNlIGlmIChzdGVwWSA+
IDApCisgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92aWV3X3dyYXBfZG93bihwcml2
LCB4LCB5LCBzdGVwWSk7CiAKLSAgICBpZiAoc3RlcF94IDwgMCkKLSAgICAgICAgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX3ZpZXdfd3JhcF9sZWZ0KHByaXYsIHgsIHksIC1zdGVwX3gpOwotICAg
IGVsc2UgaWYgKHN0ZXBfeCA+IDApCi0gICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV92
aWV3X3dyYXBfcmlnaHQocHJpdiwgeCwgeSwgc3RlcF94KTsKKyAgICBpZiAoc3RlcFggPCAwKQor
ICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdmlld193cmFwX2xlZnQocHJpdiwgeCwg
eSwgLXN0ZXBYKTsKKyAgICBlbHNlIGlmIChzdGVwWCA+IDApCisgICAgICAgIF9ld2tfdGlsZWRf
YmFja2luZ19zdG9yZV92aWV3X3dyYXBfcmlnaHQocHJpdiwgeCwgeSwgc3RlcFgpOwogCiAgICAg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3ZpZXdfcG9zX2FwcGx5KHByaXYsIHgsIHkpOwogfQpA
QCAtMTI3MCwzMSArMTI3MCwzMSBAQCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfc21hcnRfY2FsY3VsYXRlX3BvcyhFd2tfVGlsZWRfQmFja2luZ19TdG9yZQogICAgIHByaXYt
PnZpZXcueCA9IHg7CiAgICAgcHJpdi0+dmlldy55ID0geTsKICAgICBldmFzX29iamVjdF9tb3Zl
KAotICAgICAgICBwcml2LT5jb250ZW50c19jbGlwcGVyLAorICAgICAgICBwcml2LT5jb250ZW50
c0NsaXBwZXIsCiAgICAgICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1ci54ICsgcHJpdi0+dmlldy54
LAogICAgICAgICBwcml2LT52aWV3Lm9mZnNldC5jdXIueSArIHByaXYtPnZpZXcueSk7CiB9CiAK
IHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9maWxsX3JlbmRlcmVycyhFd2tf
VGlsZWRfQmFja2luZ19TdG9yZV9EYXRhKiBwcml2KQogewotICAgIEVpbmFfSW5saXN0KiBpdDsK
KyAgICBFaW5hX0lubGlzdCogbGlzdDsKICAgICBFd2tfVGlsZWRfQmFja2luZ19TdG9yZV9JdGVt
KiBpdGVtOwogICAgIGludCBpLCBqOwogCiAgICAgZm9yIChpID0gMDsgaSA8IHByaXYtPnZpZXcu
cm93czsgaSsrKSB7Ci0gICAgICAgIGl0ID0gcHJpdi0+dmlldy5pdGVtc1tpXTsKKyAgICAgICAg
bGlzdCA9IHByaXYtPnZpZXcuaXRlbXNbaV07CiAgICAgICAgIGogPSAwOwotICAgICAgICBFSU5B
X0lOTElTVF9GT1JFQUNIKGl0LCBpdGVtKQorICAgICAgICBFSU5BX0lOTElTVF9GT1JFQUNIKGxp
c3QsIGl0ZW0pCiAgICAgICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9maWxs
KHByaXYsIGl0ZW0sIGorKywgaSk7CiAgICAgfQogfQogCiBzdGF0aWMgdm9pZCBfZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfc21hcnRfY2FsY3VsYXRlKEV2YXNfT2JqZWN0KiBld2tUaWxlKQogewot
ICAgIEV2YXNfQ29vcmQgeCwgeSwgdywgaDsKKyAgICBFdmFzX0Nvb3JkIHgsIHksIHdpZHRoLCBo
ZWlnaHQ7CiAKLSAgICBldmFzX29iamVjdF9nZW9tZXRyeV9nZXQoZXdrVGlsZSwgJngsICZ5LCAm
dywgJmgpOwotICAgIERCRygibz0lcCBhdCAlZCwlZCArICVkeCVkIiwgZXdrVGlsZSwgeCwgeSwg
dywgaCk7CisgICAgZXZhc19vYmplY3RfZ2VvbWV0cnlfZ2V0KGV3a1RpbGUsICZ4LCAmeSwgJndp
ZHRoLCAmaGVpZ2h0KTsKKyAgICBEQkcoImV3a1RpbGUlcCBhdCAlZCwlZCArICVkeCVkIiwgZXdr
VGlsZSwgeCwgeSwgd2lkdGgsIGhlaWdodCk7CiAKICAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVS
Tihld2tUaWxlLCBwcml2KTsKIApAQCAtMTMwMywyNSArMTMwMywyNSBAQCBzdGF0aWMgdm9pZCBf
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfY2FsY3VsYXRlKEV2YXNfT2JqZWN0KiBld2tU
aWxlKQogICAgIGV3a190aWxlX21hdHJpeF9mcmVlemUocHJpdi0+bW9kZWwubWF0cml4KTsKIAog
ICAgIGlmICghcHJpdi0+cmVuZGVyLnN1c3BlbmQgJiYgcHJpdi0+Y2hhbmdlZC5tb2RlbCkgewot
ICAgICAgICB1bnNpZ25lZCBsb25nIGNvbHMsIHJvd3M7CisgICAgICAgIHVuc2lnbmVkIGxvbmcg
Y29sdW1ucywgcm93czsKIAotICAgICAgICBjb2xzID0gcHJpdi0+bW9kZWwud2lkdGggLyBwcml2
LT52aWV3LnRpbGUud2lkdGggKyAxOworICAgICAgICBjb2x1bW5zID0gcHJpdi0+bW9kZWwud2lk
dGggLyBwcml2LT52aWV3LnRpbGUud2lkdGggKyAxOwogICAgICAgICByb3dzID0gcHJpdi0+bW9k
ZWwuaGVpZ2h0IC8gcHJpdi0+dmlldy50aWxlLmhlaWdodCArIDE7CiAKLSAgICAgICAgcHJpdi0+
bW9kZWwub2xkLmNvbHMgPSBwcml2LT5tb2RlbC5jdXIuY29sczsKLSAgICAgICAgcHJpdi0+bW9k
ZWwub2xkLnJvd3MgPSBwcml2LT5tb2RlbC5jdXIucm93czsKLSAgICAgICAgcHJpdi0+bW9kZWwu
Y3VyLmNvbHMgPSBjb2xzOwotICAgICAgICBwcml2LT5tb2RlbC5jdXIucm93cyA9IHJvd3M7Ci0g
ICAgICAgIGlmIChwcml2LT5tb2RlbC5vbGQuY29scyA+IGNvbHMpCi0gICAgICAgICAgICBjb2xz
ID0gcHJpdi0+bW9kZWwub2xkLmNvbHM7CisgICAgICAgIHByaXYtPm1vZGVsLm9sZC5jb2x1bW5z
ID0gcHJpdi0+bW9kZWwuY3VycmVudC5jb2x1bW5zOworICAgICAgICBwcml2LT5tb2RlbC5vbGQu
cm93cyA9IHByaXYtPm1vZGVsLmN1cnJlbnQucm93czsKKyAgICAgICAgcHJpdi0+bW9kZWwuY3Vy
cmVudC5jb2x1bW5zID0gY29sdW1uczsKKyAgICAgICAgcHJpdi0+bW9kZWwuY3VycmVudC5yb3dz
ID0gcm93czsKKyAgICAgICAgaWYgKHByaXYtPm1vZGVsLm9sZC5jb2x1bW5zID4gY29sdW1ucykK
KyAgICAgICAgICAgIGNvbHVtbnMgPSBwcml2LT5tb2RlbC5vbGQuY29sdW1uczsKICAgICAgICAg
aWYgKHByaXYtPm1vZGVsLm9sZC5yb3dzID4gcm93cykKICAgICAgICAgICAgIHJvd3MgPSBwcml2
LT5tb2RlbC5vbGQucm93czsKLSAgICAgICAgZXdrX3RpbGVfbWF0cml4X3Jlc2l6ZShwcml2LT5t
b2RlbC5tYXRyaXgsIGNvbHMsIHJvd3MpOworICAgICAgICBld2tfdGlsZV9tYXRyaXhfcmVzaXpl
KHByaXYtPm1vZGVsLm1hdHJpeCwgY29sdW1ucywgcm93cyk7CiAgICAgfQogCi0gICAgaWYgKHBy
aXYtPmNoYW5nZWQucG9zICYmIChwcml2LT52aWV3LnggIT0geCB8fCBwcml2LT52aWV3LnkgIT0g
eSkpIHsKKyAgICBpZiAocHJpdi0+Y2hhbmdlZC5wb3NpdGlvbiAmJiAocHJpdi0+dmlldy54ICE9
IHggfHwgcHJpdi0+dmlldy55ICE9IHkpKSB7CiAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9zbWFydF9jYWxjdWxhdGVfcG9zKHByaXYsIHgsIHkpOwotICAgICAgICBwcml2LT5jaGFu
Z2VkLnBvcyA9IEVJTkFfRkFMU0U7CisgICAgICAgIHByaXYtPmNoYW5nZWQucG9zaXRpb24gPSBF
SU5BX0ZBTFNFOwogICAgIH0KICAgICBpZiAocHJpdi0+Y2hhbmdlZC5vZmZzZXQpIHsKICAgICAg
ICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZV9vZmZzZXQocHJpdiwg
eCwgeSk7CkBAIC0xMzI5LDcgKzEzMjksNyBAQCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfc21hcnRfY2FsY3VsYXRlKEV2YXNfT2JqZWN0KiBld2tUaWxlKQogICAgIH0KIAog
ICAgIGlmIChwcml2LT5jaGFuZ2VkLnNpemUpIHsKLSAgICAgICAgX2V3a190aWxlZF9iYWNraW5n
X3N0b3JlX3NtYXJ0X2NhbGN1bGF0ZV9zaXplKHByaXYsIHcsIGgpOworICAgICAgICBfZXdrX3Rp
bGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfY2FsY3VsYXRlX3NpemUocHJpdiwgd2lkdGgsIGhlaWdo
dCk7CiAgICAgICAgIHByaXYtPmNoYW5nZWQuc2l6ZSA9IEVJTkFfRkFMU0U7CiAgICAgfQogCkBA
IC0xMzQxLDE3ICsxMzQxLDE3IEBAIHN0YXRpYyB2b2lkIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV9zbWFydF9jYWxjdWxhdGUoRXZhc19PYmplY3QqIGV3a1RpbGUpCiAgICAgICAgIHJlY3QuaCA9
IHByaXYtPm1vZGVsLmhlaWdodDsKICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2Zp
bGxfcmVuZGVyZXJzKHByaXYpOwogICAgICAgICBld2tfdGlsZV9tYXRyaXhfcmVzaXplKHByaXYt
Pm1vZGVsLm1hdHJpeCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcml2LT5tb2Rl
bC5jdXIuY29scywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcml2LT5tb2RlbC5j
dXIucm93cyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpdi0+bW9kZWwuY3Vy
cmVudC5jb2x1bW5zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaXYtPm1vZGVs
LmN1cnJlbnQucm93cyk7CiAgICAgICAgIHByaXYtPmNoYW5nZWQubW9kZWwgPSBFSU5BX0ZBTFNF
OwotICAgICAgICBldmFzX29iamVjdF9yZXNpemUocHJpdi0+Y29udGVudHNfY2xpcHBlciwgcHJp
di0+bW9kZWwud2lkdGgsIHByaXYtPm1vZGVsLmhlaWdodCk7CisgICAgICAgIGV2YXNfb2JqZWN0
X3Jlc2l6ZShwcml2LT5jb250ZW50c0NsaXBwZXIsIHByaXYtPm1vZGVsLndpZHRoLCBwcml2LT5t
b2RlbC5oZWlnaHQpOwogICAgICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc21hcnRfY2Fs
Y3VsYXRlX29mZnNldF9mb3JjZShwcml2KTsKIAogICAgICAgICAvKiBNYWtlIHN1cmUgd2UgZG8g
bm90IG1pc3MgYW55IGltcG9ydGFudCByZXBhaW50IGJ5CiAgICAgICAgICAqIHJlcGFpbnRpbmcg
dGhlIHdob2xlIHZpZXdwb3J0ICovCi0gICAgICAgIGNvbnN0IEVpbmFfUmVjdGFuZ2xlIHIgPQor
ICAgICAgICBjb25zdCBFaW5hX1JlY3RhbmdsZSByZWN0MSA9CiAgICAgICAgIHsgMCwgMCwgcHJp
di0+bW9kZWwud2lkdGgsIHByaXYtPm1vZGVsLmhlaWdodCB9OwotICAgICAgICBld2tfdGlsZV9t
YXRyaXhfdXBkYXRlKHByaXYtPm1vZGVsLm1hdHJpeCwgJnIsCisgICAgICAgIGV3a190aWxlX21h
dHJpeF91cGRhdGUocHJpdi0+bW9kZWwubWF0cml4LCAmcmVjdDEsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcHJpdi0+dmlldy50aWxlLnpvb20pOwogICAgIH0KIApAQCAtMTQwMiw3
ICsxNDAyLDcgQEAgdm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9yZW5kZXJfY2Jfc2V0KEV2
YXNfT2JqZWN0KiBld2tUaWxlLCBFaW5hX0Jvb2wgKCpjYWwKIHsKICAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTihjYWxsYmFjayk7CiAgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4oZXdr
VGlsZSwgcHJpdik7Ci0gICAgcHJpdi0+cmVuZGVyLmNiID0gY2FsbGJhY2s7CisgICAgcHJpdi0+
cmVuZGVyLmNhbGxiYWNrID0gY2FsbGJhY2s7CiAgICAgcHJpdi0+cmVuZGVyLmRhdGEgPSAodm9p
ZCopZGF0YTsKIH0KIApAQCAtMTQzOSw3ICsxNDM5LDcgQEAgc3RhdGljIEVpbmFfQm9vbCBfZXdr
X3RpbGVkX2JhY2tpbmdfc3RvcmVfc2Nyb2xsX2Z1bGxfb2Zmc2V0X3NldF9pbnRlcm5hbChFd2tf
VGkKIAogRWluYV9Cb29sIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3Njcm9sbF9mdWxsX29mZnNl
dF9zZXQoRXZhc19PYmplY3QqIGV3a1RpbGUsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5KQog
ewotICAgIERCRygibz0lcCwgeD0lZCwgeT0lZCIsIGV3a1RpbGUsIHgsIHkpOworICAgIERCRygi
ZXdrVGlsZSVwLCB4PSVkLCB5PSVkIiwgZXdrVGlsZSwgeCwgeSk7CiAKICAgICBQUklWX0RBVEFf
R0VUX09SX1JFVFVSTihld2tUaWxlLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBpZiAoeCA9PSBw
cml2LT52aWV3Lm9mZnNldC5jdXIueCAmJiB5ID09IHByaXYtPnZpZXcub2Zmc2V0LmN1ci55KQpA
QCAtMTQ0OCwxNiArMTQ0OCwxNiBAQCBFaW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVf
c2Nyb2xsX2Z1bGxfb2Zmc2V0X3NldChFdmFzX09iamVjdCogZXdrVGlsZSwgRQogICAgIHJldHVy
biBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc2Nyb2xsX2Z1bGxfb2Zmc2V0X3NldF9pbnRlcm5h
bChwcml2LCB4LCB5KTsKIH0KIAotRWluYV9Cb29sIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3Nj
cm9sbF9mdWxsX29mZnNldF9hZGQoRXZhc19PYmplY3QqIGV3a1RpbGUsIEV2YXNfQ29vcmQgZHgs
IEV2YXNfQ29vcmQgZHkpCitFaW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfc2Nyb2xs
X2Z1bGxfb2Zmc2V0X2FkZChFdmFzX09iamVjdCogZXdrVGlsZSwgRXZhc19Db29yZCBkZWx0YVgs
IEV2YXNfQ29vcmQgZGVsdGFZKQogewotICAgIERCRygibz0lcCwgZHg9JWQsIGR5PSVkIiwgZXdr
VGlsZSwgZHgsIGR5KTsKKyAgICBEQkcoImV3a1RpbGUlcCwgZGVsdGFYPSVkLCBkZWx0YVk9JWQi
LCBld2tUaWxlLCBkZWx0YVgsIGRlbHRhWSk7CiAKICAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVS
Tihld2tUaWxlLCBwcml2LCBFSU5BX0ZBTFNFKTsKLSAgICBpZiAoIWR4ICYmICFkeSkKKyAgICBp
ZiAoIWRlbHRhWCAmJiAhZGVsdGFZKQogICAgICAgICByZXR1cm4gRUlOQV9UUlVFOwogCiAgICAg
cmV0dXJuIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9zY3JvbGxfZnVsbF9vZmZzZXRfc2V0X2lu
dGVybmFsCi0gICAgICAgICAgICAgICAocHJpdiwgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnggKyBk
eCwgcHJpdi0+dmlldy5vZmZzZXQuY3VyLnkgKyBkeSk7CisgICAgICAgICAgICAgICAocHJpdiwg
cHJpdi0+dmlldy5vZmZzZXQuY3VyLnggKyBkZWx0YVgsIHByaXYtPnZpZXcub2Zmc2V0LmN1ci55
ICsgZGVsdGFZKTsKIH0KIAogc3RhdGljIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdfc3Rv
cmVfem9vbV9zZXRfaW50ZXJuYWwoRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfRGF0YSogcHJpdiwg
ZmxvYXQqIHpvb20sIEV2YXNfQ29vcmQgY3VycmVudFgsIEV2YXNfQ29vcmQgY3VycmVudFksIEV2
YXNfQ29vcmQqIG9mZnNldFgsIEV2YXNfQ29vcmQqIG9mZnNldFkpCkBAIC0xNDcyLDE5ICsxNDcy
LDE5IEBAIHN0YXRpYyBFaW5hX0Jvb2wgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3pvb21fc2V0
X2ludGVybmFsKEV3a19UaWxlZF9CYWNraW5nX1N0CiAgICAgfQogCiAgICAgX2V3a190aWxlZF9i
YWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVxdWVzdF9mbHVzaChwcml2KTsKLSAgICBFdmFzX0Nv
b3JkIHR3LCB0aDsKKyAgICBFdmFzX0Nvb3JkIHRpbGVXaWR0aCwgdGlsZUhlaWdodDsKIAogICAg
ICp6b29tID0gUk9VTkRFRF9aT09NKHByaXYtPnZpZXcudGlsZS53aWR0aCwgKnpvb20pOwogCi0g
ICAgdHcgPSBwcml2LT52aWV3LnRpbGUud2lkdGg7Ci0gICAgdGggPSBwcml2LT52aWV3LnRpbGUu
aGVpZ2h0OworICAgIHRpbGVXaWR0aCA9IHByaXYtPnZpZXcudGlsZS53aWR0aDsKKyAgICB0aWxl
SGVpZ2h0ID0gcHJpdi0+dmlldy50aWxlLmhlaWdodDsKIAogICAgIGZsb2F0IHNjYWxlID0gKnpv
b20gLyBwcml2LT52aWV3LnRpbGUuem9vbTsKIAogICAgIHByaXYtPnZpZXcudGlsZS56b29tID0g
Knpvb207CiAgICAgLy8gdG9kbzogY2hlY2sgY3VycmVudFggWzAsIHddLi4uCi0gICAgcHJpdi0+
dmlldy5vZmZzZXQuem9vbV9jZW50ZXIueCA9IGN1cnJlbnRYOwotICAgIHByaXYtPnZpZXcub2Zm
c2V0Lnpvb21fY2VudGVyLnkgPSBjdXJyZW50WTsKKyAgICBwcml2LT52aWV3Lm9mZnNldC56b29t
Q2VudGVyLnggPSBjdXJyZW50WDsKKyAgICBwcml2LT52aWV3Lm9mZnNldC56b29tQ2VudGVyLnkg
PSBjdXJyZW50WTsKIAogCiAgICAgaWYgKCFwcml2LT52aWV3LndpZHRoIHx8ICFwcml2LT52aWV3
LmhlaWdodCkgewpAQCAtMTQ5MiwzOCArMTQ5MiwzOCBAQCBzdGF0aWMgRWluYV9Cb29sIF9ld2tf
dGlsZWRfYmFja2luZ19zdG9yZV96b29tX3NldF9pbnRlcm5hbChFd2tfVGlsZWRfQmFja2luZ19T
dAogICAgICAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgPSAwOwogICAgICAgICByZXR1cm4g
RUlOQV9UUlVFOwogICAgIH0KLSAgICBFaW5hX0lubGlzdCoqIGl0ciwgKippdHJfZW5kOworICAg
IEVpbmFfSW5saXN0KiogaXRlcmF0b3IsICoqaXRlcmF0b3JFbmQ7CiAgICAgRXdrX1RpbGVkX0Jh
Y2tpbmdfU3RvcmVfSXRlbSogaXQ7CiAKLSAgICBFdmFzX0Nvb3JkIG5ld194ID0gY3VycmVudFgg
KyAocHJpdi0+dmlldy5vZmZzZXQuY3VyLnggLSBjdXJyZW50WCkgKiBzY2FsZTsKLSAgICBFdmFz
X0Nvb3JkIG5ld195ID0gY3VycmVudFkgKyAocHJpdi0+dmlldy5vZmZzZXQuY3VyLnkgLSBjdXJy
ZW50WSkgKiBzY2FsZTsKKyAgICBFdmFzX0Nvb3JkIG5ld1ggPSBjdXJyZW50WCArIChwcml2LT52
aWV3Lm9mZnNldC5jdXIueCAtIGN1cnJlbnRYKSAqIHNjYWxlOworICAgIEV2YXNfQ29vcmQgbmV3
WSA9IGN1cnJlbnRZICsgKHByaXYtPnZpZXcub2Zmc2V0LmN1ci55IC0gY3VycmVudFkpICogc2Nh
bGU7CiAKLSAgICBFdmFzX0Nvb3JkIG1vZGVsX3cgPSBwcml2LT5tb2RlbC53aWR0aCAqIHNjYWxl
OwotICAgIEV2YXNfQ29vcmQgbW9kZWxfaCA9IHByaXYtPm1vZGVsLmhlaWdodCAqIHNjYWxlOwor
ICAgIEV2YXNfQ29vcmQgbW9kZWxXaWR0aCA9IHByaXYtPm1vZGVsLndpZHRoICogc2NhbGU7Cisg
ICAgRXZhc19Db29yZCBtb2RlbEhlaWdodCA9IHByaXYtPm1vZGVsLmhlaWdodCAqIHNjYWxlOwog
Ci0gICAgaWYgKG1vZGVsX3cgPCBwcml2LT52aWV3LndpZHRoIHx8IG5ld194ID49IDApCi0gICAg
ICAgIG5ld194ID0gMDsKLSAgICBlbHNlIGlmICgtbmV3X3ggKyBwcml2LT52aWV3LndpZHRoID49
IG1vZGVsX3cpCi0gICAgICAgIG5ld194ID0gLW1vZGVsX3cgKyBwcml2LT52aWV3LndpZHRoOwor
ICAgIGlmIChtb2RlbFdpZHRoIDwgcHJpdi0+dmlldy53aWR0aCB8fCBuZXdYID49IDApCisgICAg
ICAgIG5ld1ggPSAwOworICAgIGVsc2UgaWYgKC1uZXdYICsgcHJpdi0+dmlldy53aWR0aCA+PSBt
b2RlbFdpZHRoKQorICAgICAgICBuZXdYID0gLW1vZGVsV2lkdGggKyBwcml2LT52aWV3LndpZHRo
OwogCi0gICAgaWYgKG1vZGVsX2ggPCBwcml2LT52aWV3LmhlaWdodCB8fCBuZXdfeSA+PSAwKQot
ICAgICAgICBuZXdfeSA9IDA7Ci0gICAgZWxzZSBpZiAoLW5ld195ICsgcHJpdi0+dmlldy5oZWln
aHQgPj0gbW9kZWxfaCkKLSAgICAgICAgbmV3X3kgPSAtbW9kZWxfaCArIHByaXYtPnZpZXcuaGVp
Z2h0OworICAgIGlmIChtb2RlbEhlaWdodCA8IHByaXYtPnZpZXcuaGVpZ2h0IHx8IG5ld1kgPj0g
MCkKKyAgICAgICAgbmV3WSA9IDA7CisgICAgZWxzZSBpZiAoLW5ld1kgKyBwcml2LT52aWV3Lmhl
aWdodCA+PSBtb2RlbEhlaWdodCkKKyAgICAgICAgbmV3WSA9IC1tb2RlbEhlaWdodCArIHByaXYt
PnZpZXcuaGVpZ2h0OwogCi0gICAgRXZhc19Db29yZCBieCA9IG5ld194ICUgdHc7Ci0gICAgRXZh
c19Db29yZCBieSA9IG5ld195ICUgdGg7Ci0gICAgcHJpdi0+bW9kZWwuYmFzZS5jb2wgPSAtbmV3
X3ggLyB0dzsKLSAgICBwcml2LT5tb2RlbC5iYXNlLnJvdyA9IC1uZXdfeSAvIHRoOworICAgIEV2
YXNfQ29vcmQgYmFzZVggPSBuZXdYICUgdGlsZVdpZHRoOworICAgIEV2YXNfQ29vcmQgYmFzZVkg
PSBuZXdZICUgdGlsZUhlaWdodDsKKyAgICBwcml2LT5tb2RlbC5iYXNlLmNvbHVtbiA9IC1uZXdY
IC8gdGlsZVdpZHRoOworICAgIHByaXYtPm1vZGVsLmJhc2Uucm93ID0gLW5ld1kgLyB0aWxlSGVp
Z2h0OwogCiAgICAgcHJpdi0+Y2hhbmdlZC5zaXplID0gRUlOQV9UUlVFOwogICAgIHByaXYtPmNo
YW5nZWQubW9kZWwgPSBFSU5BX1RSVUU7CiAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2No
YW5nZWQocHJpdik7CiAKLSAgICBwcml2LT52aWV3Lm9mZnNldC5jdXIueCA9IG5ld194OwotICAg
IHByaXYtPnZpZXcub2Zmc2V0LmN1ci55ID0gbmV3X3k7Ci0gICAgcHJpdi0+dmlldy5vZmZzZXQu
YmFzZS54ID0gYng7Ci0gICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS55ID0gYnk7CisgICAgcHJp
di0+dmlldy5vZmZzZXQuY3VyLnggPSBuZXdYOworICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1ci55
ID0gbmV3WTsKKyAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnggPSBiYXNlWDsKKyAgICBwcml2
LT52aWV3Lm9mZnNldC5iYXNlLnkgPSBiYXNlWTsKIAogICAgIHByaXYtPnZpZXcub2Zmc2V0Lm9s
ZC54ID0gcHJpdi0+dmlldy5vZmZzZXQuY3VyLng7CiAgICAgcHJpdi0+dmlldy5vZmZzZXQub2xk
LnkgPSBwcml2LT52aWV3Lm9mZnNldC5jdXIueTsKQEAgLTE1MzEsMjggKzE1MzEsMjggQEAgc3Rh
dGljIEVpbmFfQm9vbCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfem9vbV9zZXRfaW50ZXJuYWwo
RXdrX1RpbGVkX0JhY2tpbmdfU3QKICAgICAqb2Zmc2V0WSA9IHByaXYtPnZpZXcub2Zmc2V0LmN1
ci55OwogCiAgICAgZXZhc19vYmplY3RfbW92ZSgKLSAgICAgICAgcHJpdi0+Y29udGVudHNfY2xp
cHBlciwKLSAgICAgICAgbmV3X3ggKyBwcml2LT52aWV3LngsCi0gICAgICAgIG5ld195ICsgcHJp
di0+dmlldy55KTsKKyAgICAgICAgcHJpdi0+Y29udGVudHNDbGlwcGVyLAorICAgICAgICBuZXdY
ICsgcHJpdi0+dmlldy54LAorICAgICAgICBuZXdZICsgcHJpdi0+dmlldy55KTsKIAogICAgIF9l
d2tfdGlsZWRfYmFja2luZ19zdG9yZV9maWxsX3JlbmRlcmVycyhwcml2KTsKIAotICAgIEV2YXNf
Q29vcmQgb3kgPSBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgKyBwcml2LT52aWV3Lnk7Ci0gICAg
RXZhc19Db29yZCBiYXNlX294ID0gcHJpdi0+dmlldy54ICsgcHJpdi0+dmlldy5vZmZzZXQuYmFz
ZS54OworICAgIEV2YXNfQ29vcmQgdGlsZVBvc2l0aW9uWSA9IHByaXYtPnZpZXcub2Zmc2V0LmJh
c2UueSArIHByaXYtPnZpZXcueTsKKyAgICBFdmFzX0Nvb3JkIGJhc2VUaWxlUG9zaXRpb25YID0g
cHJpdi0+dmlldy54ICsgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54OwogCi0gICAgaXRyID0gcHJp
di0+dmlldy5pdGVtczsKLSAgICBpdHJfZW5kID0gaXRyICsgcHJpdi0+dmlldy5yb3dzOworICAg
IGl0ZXJhdG9yID0gcHJpdi0+dmlldy5pdGVtczsKKyAgICBpdGVyYXRvckVuZCA9IGl0ZXJhdG9y
ICsgcHJpdi0+dmlldy5yb3dzOwogCi0gICAgZm9yICg7IGl0ciA8IGl0cl9lbmQ7IGl0cisrKSB7
Ci0gICAgICAgIEV2YXNfQ29vcmQgb3ggPSBiYXNlX294OwotICAgICAgICBFaW5hX0lubGlzdCog
bHN0ID0gKml0cjsKKyAgICBmb3IgKDsgaXRlcmF0b3IgPCBpdGVyYXRvckVuZDsgaXRlcmF0b3Ir
KykgeworICAgICAgICBFdmFzX0Nvb3JkIHRpbGVQb3NpdGlvblggPSBiYXNlVGlsZVBvc2l0aW9u
WDsKKyAgICAgICAgRWluYV9Jbmxpc3QqIGxzdCA9ICppdGVyYXRvcjsKIAogICAgICAgICBFSU5B
X0lOTElTVF9GT1JFQUNIKGxzdCwgaXQpIHsKLSAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9pdGVtX21vdmUoaXQsIG94LCBveSk7Ci0gICAgICAgICAgICBfZXdrX3RpbGVkX2Jh
Y2tpbmdfc3RvcmVfaXRlbV9yZXNpemUoaXQsIHR3LCB0aCk7Ci0gICAgICAgICAgICBveCArPSB0
dzsKKyAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX21vdmUoaXQsIHRp
bGVQb3NpdGlvblgsIHRpbGVQb3NpdGlvblkpOworICAgICAgICAgICAgX2V3a190aWxlZF9iYWNr
aW5nX3N0b3JlX2l0ZW1fcmVzaXplKGl0LCB0aWxlV2lkdGgsIHRpbGVIZWlnaHQpOworICAgICAg
ICAgICAgdGlsZVBvc2l0aW9uWCArPSB0aWxlV2lkdGg7CiAgICAgICAgIH0KLSAgICAgICAgb3kg
Kz0gdGg7CisgICAgICAgIHRpbGVQb3NpdGlvblkgKz0gdGlsZUhlaWdodDsKICAgICB9CiAKICAg
ICByZXR1cm4gRUlOQV9UUlVFOwpAQCAtMTU2MCw3ICsxNTYwLDcgQEAgc3RhdGljIEVpbmFfQm9v
bCBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfem9vbV9zZXRfaW50ZXJuYWwoRXdrX1RpbGVkX0Jh
Y2tpbmdfU3QKIAogRWluYV9Cb29sIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3pvb21fc2V0KEV2
YXNfT2JqZWN0KiBld2tUaWxlLCBmbG9hdCogem9vbSwgRXZhc19Db29yZCBjdXJyZW50WCwgRXZh
c19Db29yZCBjdXJyZW50WSwgRXZhc19Db29yZCogb2Zmc2V0WCwgRXZhc19Db29yZCogb2Zmc2V0
WSkKIHsKLSAgICBEQkcoIm89JXAsIHpvb209JWYiLCBld2tUaWxlLCAqem9vbSk7CisgICAgREJH
KCJld2tUaWxlJXAsIHpvb209JWYiLCBld2tUaWxlLCAqem9vbSk7CiAKICAgICBQUklWX0RBVEFf
R0VUX09SX1JFVFVSTihld2tUaWxlLCBwcml2LCBFSU5BX0ZBTFNFKTsKIApAQCAtMTU2OSw3MyAr
MTU2OSw3MyBAQCBFaW5hX0Jvb2wgZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfem9vbV9zZXQoRXZh
c19PYmplY3QqIGV3a1RpbGUsIGZsb2F0KiB6b29tLCBFdgogCiBFaW5hX0Jvb2wgZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfem9vbV93ZWFrX3NldChFdmFzX09iamVjdCogZXdrVGlsZSwgZmxvYXQg
em9vbSwgRXZhc19Db29yZCBjdXJyZW50WCwgRXZhc19Db29yZCBjdXJyZW50WSkKIHsKLSAgICBE
QkcoIm89JXAsIHpvb209JWYiLCBld2tUaWxlLCB6b29tKTsKKyAgICBEQkcoImV3a1RpbGUlcCwg
em9vbT0lZiIsIGV3a1RpbGUsIHpvb20pOwogICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKGV3
a1RpbGUsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIGlmICghcHJpdi0+dmlldy53aWR0aCB8fCAh
cHJpdi0+dmlldy5oZWlnaHQpCiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwotICAgIEVpbmFf
SW5saXN0KiogaXRyLCAqKiBpdHJfZW5kOwotICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0
ZW0qIGl0OwotICAgIEV2YXNfQ29vcmQgdHcsIHRoOwotICAgIEVpbmFfQm9vbCByZWNhbGMgPSBF
SU5BX0ZBTFNFOworICAgIEVpbmFfSW5saXN0KiogaXRlcmF0b3IsICoqIGl0ZXJhdG9yRW5kOwor
ICAgIEV3a19UaWxlZF9CYWNraW5nX1N0b3JlX0l0ZW0qIGl0ZW07CisgICAgRXZhc19Db29yZCB0
aWxlV2lkdGgsIHRpbGVIZWlnaHQ7CisgICAgRWluYV9Cb29sIHJlQ2FsY3VsYXRlID0gRUlOQV9G
QUxTRTsKIAogICAgIGZsb2F0IHNjYWxlID0gem9vbSAvIHByaXYtPnZpZXcudGlsZS56b29tOwog
Ci0gICAgdHcgPSBUSUxFX1NJWkVfQVRfWk9PTShwcml2LT52aWV3LnRpbGUud2lkdGgsIHNjYWxl
KTsKLSAgICBzY2FsZSA9IFRJTEVfWk9PTV9BVF9TSVpFKHR3LCBwcml2LT52aWV3LnRpbGUud2lk
dGgpOwotICAgIHRoID0gVElMRV9TSVpFX0FUX1pPT00ocHJpdi0+dmlldy50aWxlLmhlaWdodCwg
c2NhbGUpOworICAgIHRpbGVXaWR0aCA9IFRJTEVfU0laRV9BVF9aT09NKHByaXYtPnZpZXcudGls
ZS53aWR0aCwgc2NhbGUpOworICAgIHNjYWxlID0gVElMRV9aT09NX0FUX1NJWkUodGlsZVdpZHRo
LCBwcml2LT52aWV3LnRpbGUud2lkdGgpOworICAgIHRpbGVIZWlnaHQgPSBUSUxFX1NJWkVfQVRf
Wk9PTShwcml2LT52aWV3LnRpbGUuaGVpZ2h0LCBzY2FsZSk7CiAgICAgem9vbSA9IHNjYWxlICog
cHJpdi0+dmlldy50aWxlLnpvb207CiAKLSAgICBFdmFzX0Nvb3JkIG1vZGVsX3cgPSBwcml2LT5t
b2RlbC53aWR0aCAqIHNjYWxlOwotICAgIEV2YXNfQ29vcmQgbW9kZWxfaCA9IHByaXYtPm1vZGVs
LmhlaWdodCAqIHNjYWxlOworICAgIEV2YXNfQ29vcmQgbW9kZWxXaWR0aCA9IHByaXYtPm1vZGVs
LndpZHRoICogc2NhbGU7CisgICAgRXZhc19Db29yZCBtb2RlbEhlaWdodCA9IHByaXYtPm1vZGVs
LmhlaWdodCAqIHNjYWxlOwogCi0gICAgZXZhc19vYmplY3RfcmVzaXplKHByaXYtPmNvbnRlbnRz
X2NsaXBwZXIsIG1vZGVsX3csIG1vZGVsX2gpOworICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShwcml2
LT5jb250ZW50c0NsaXBwZXIsIG1vZGVsV2lkdGgsIG1vZGVsSGVpZ2h0KTsKIAotICAgIGludCB2
cm93cyA9IHN0YXRpY19jYXN0PGludD4oY2VpbChzdGF0aWNfY2FzdDxmbG9hdD4ocHJpdi0+dmll
dy5oZWlnaHQgLyB0aCkpICsgMSk7Ci0gICAgaW50IHZjb2xzID0gc3RhdGljX2Nhc3Q8aW50Pihj
ZWlsKHN0YXRpY19jYXN0PGZsb2F0Pihwcml2LT52aWV3LndpZHRoIC8gdHcpKSArIDEpOwotICAg
IEV2YXNfQ29vcmQgbmV3X3ggPSBjdXJyZW50WCArIChwcml2LT52aWV3Lm9mZnNldC5jdXIueCAt
IGN1cnJlbnRYKSAqIHNjYWxlOwotICAgIEV2YXNfQ29vcmQgbmV3X3kgPSBjdXJyZW50WSArIChw
cml2LT52aWV3Lm9mZnNldC5jdXIueSAtIGN1cnJlbnRZKSAqIHNjYWxlOwotICAgIEV2YXNfQ29v
cmQgYnggPSBuZXdfeCAlIHR3OwotICAgIEV2YXNfQ29vcmQgYnkgPSBuZXdfeSAlIHRoOwotICAg
IHVuc2lnbmVkIGxvbmcgYmFzZV9yb3cgPSAtbmV3X3kgLyB0aDsKLSAgICB1bnNpZ25lZCBsb25n
IGJhc2VfY29sID0gLW5ld194IC8gdHc7CisgICAgaW50IHZyb3dzID0gc3RhdGljX2Nhc3Q8aW50
PihjZWlsKHN0YXRpY19jYXN0PGZsb2F0Pihwcml2LT52aWV3LmhlaWdodCAvIHRpbGVIZWlnaHQp
KSArIDEpOworICAgIGludCB2Y29scyA9IHN0YXRpY19jYXN0PGludD4oY2VpbChzdGF0aWNfY2Fz
dDxmbG9hdD4ocHJpdi0+dmlldy53aWR0aCAvIHRpbGVXaWR0aCkpICsgMSk7CisgICAgRXZhc19D
b29yZCBuZXdYID0gY3VycmVudFggKyAocHJpdi0+dmlldy5vZmZzZXQuY3VyLnggLSBjdXJyZW50
WCkgKiBzY2FsZTsKKyAgICBFdmFzX0Nvb3JkIG5ld1kgPSBjdXJyZW50WSArIChwcml2LT52aWV3
Lm9mZnNldC5jdXIueSAtIGN1cnJlbnRZKSAqIHNjYWxlOworICAgIEV2YXNfQ29vcmQgYmFzZVgg
PSBuZXdYICUgdGlsZVdpZHRoOworICAgIEV2YXNfQ29vcmQgYmFzZVkgPSBuZXdZICUgdGlsZUhl
aWdodDsKKyAgICB1bnNpZ25lZCBsb25nIGJhc2VSb3cgPSAtbmV3WSAvIHRpbGVIZWlnaHQ7Cisg
ICAgdW5zaWduZWQgbG9uZyBiYXNlQ29sdW1uID0gLW5ld1ggLyB0aWxlV2lkdGg7CiAKLSAgICBp
ZiAoYmFzZV9yb3cgIT0gcHJpdi0+bW9kZWwuYmFzZS5yb3cgfHwgYmFzZV9jb2wgIT0gcHJpdi0+
bW9kZWwuYmFzZS5jb2wpIHsKLSAgICAgICAgcHJpdi0+bW9kZWwuYmFzZS5yb3cgPSBiYXNlX3Jv
dzsKLSAgICAgICAgcHJpdi0+bW9kZWwuYmFzZS5jb2wgPSBiYXNlX2NvbDsKLSAgICAgICAgcmVj
YWxjID0gRUlOQV9UUlVFOworICAgIGlmIChiYXNlUm93ICE9IHByaXYtPm1vZGVsLmJhc2Uucm93
IHx8IGJhc2VDb2x1bW4gIT0gcHJpdi0+bW9kZWwuYmFzZS5jb2x1bW4pIHsKKyAgICAgICAgcHJp
di0+bW9kZWwuYmFzZS5yb3cgPSBiYXNlUm93OworICAgICAgICBwcml2LT5tb2RlbC5iYXNlLmNv
bHVtbiA9IGJhc2VDb2x1bW47CisgICAgICAgIHJlQ2FsY3VsYXRlID0gRUlOQV9UUlVFOwogICAg
IH0KIAogICAgIGlmICh2cm93cyA+IHByaXYtPnZpZXcucm93cyB8fCB2Y29scyA+IHByaXYtPnZp
ZXcuY29scykKLSAgICAgICAgcmVjYWxjID0gRUlOQV9UUlVFOworICAgICAgICByZUNhbGN1bGF0
ZSA9IEVJTkFfVFJVRTsKIAotICAgIGlmIChyZWNhbGMpIHsKKyAgICBpZiAocmVDYWxjdWxhdGUp
IHsKICAgICAgICAgRXZhc19Db29yZCB3aWR0aCwgaGVpZ2h0OwogICAgICAgICBldmFzX29iamVj
dF9nZW9tZXRyeV9nZXQoZXdrVGlsZSwgMCwgMCwgJndpZHRoLCAmaGVpZ2h0KTsKLSAgICAgICAg
X2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3JlY2FsY19yZW5kZXJlcnMocHJpdiwgd2lkdGgsIGhl
aWdodCwgdHcsIHRoKTsKKyAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3JlY2FsY19y
ZW5kZXJlcnMocHJpdiwgd2lkdGgsIGhlaWdodCwgdGlsZVdpZHRoLCB0aWxlSGVpZ2h0KTsKICAg
ICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2ZpbGxfcmVuZGVyZXJzKHByaXYpOwogICAg
ICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfdXBkYXRlc19wcm9jZXNzKHByaXYpOwogICAg
IH0KIAotICAgIEV2YXNfQ29vcmQgYmFzZV9veCA9IGJ4ICsgcHJpdi0+dmlldy54OwotICAgIEV2
YXNfQ29vcmQgb3kgPSBieSArIHByaXYtPnZpZXcueTsKKyAgICBFdmFzX0Nvb3JkIGJhc2VUaWxl
UG9zaXRpb25YID0gYmFzZVggKyBwcml2LT52aWV3Lng7CisgICAgRXZhc19Db29yZCB0aWxlUG9z
aXRpb25ZID0gYmFzZVkgKyBwcml2LT52aWV3Lnk7CiAKLSAgICBldmFzX29iamVjdF9tb3ZlKHBy
aXYtPmNvbnRlbnRzX2NsaXBwZXIsCi0gICAgICAgICAgICAgICAgICAgICBuZXdfeCArIHByaXYt
PnZpZXcueCwKLSAgICAgICAgICAgICAgICAgICAgIG5ld195ICsgcHJpdi0+dmlldy55KTsKKyAg
ICBldmFzX29iamVjdF9tb3ZlKHByaXYtPmNvbnRlbnRzQ2xpcHBlciwKKyAgICAgICAgICAgICAg
ICAgICAgIG5ld1ggKyBwcml2LT52aWV3LngsCisgICAgICAgICAgICAgICAgICAgICBuZXdZICsg
cHJpdi0+dmlldy55KTsKIAotICAgIGl0ciA9IHByaXYtPnZpZXcuaXRlbXM7Ci0gICAgaXRyX2Vu
ZCA9IGl0ciArIHByaXYtPnZpZXcucm93czsKKyAgICBpdGVyYXRvciA9IHByaXYtPnZpZXcuaXRl
bXM7CisgICAgaXRlcmF0b3JFbmQgPSBpdGVyYXRvciArIHByaXYtPnZpZXcucm93czsKIAotICAg
IGZvciAoOyBpdHIgPCBpdHJfZW5kOyBpdHIrKykgewotICAgICAgICBFdmFzX0Nvb3JkIG94ID0g
YmFzZV9veDsKLSAgICAgICAgRWluYV9Jbmxpc3QqIGxzdCA9ICppdHI7CisgICAgZm9yICg7IGl0
ZXJhdG9yIDwgaXRlcmF0b3JFbmQ7IGl0ZXJhdG9yKyspIHsKKyAgICAgICAgRXZhc19Db29yZCB0
aWxlUG9zaXRpb25YID0gYmFzZVRpbGVQb3NpdGlvblg7CisgICAgICAgIEVpbmFfSW5saXN0KiBs
aXN0ID0gKml0ZXJhdG9yOwogCi0gICAgICAgIEVJTkFfSU5MSVNUX0ZPUkVBQ0gobHN0LCBpdCkg
ewotICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0ZW1fbW92ZShpdCwgb3gs
IG95KTsKLSAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Jlc2l6ZShp
dCwgdHcsIHRoKTsKLSAgICAgICAgICAgIG94ICs9IHR3OworICAgICAgICBFSU5BX0lOTElTVF9G
T1JFQUNIKGxpc3QsIGl0ZW0pIHsKKyAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV9pdGVtX21vdmUoaXRlbSwgdGlsZVBvc2l0aW9uWCwgdGlsZVBvc2l0aW9uWSk7CisgICAgICAg
ICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9yZXNpemUoaXRlbSwgdGlsZVdpZHRo
LCB0aWxlSGVpZ2h0KTsKKyAgICAgICAgICAgIHRpbGVQb3NpdGlvblggKz0gdGlsZVdpZHRoOwog
ICAgICAgICB9Ci0gICAgICAgIG95ICs9IHRoOworICAgICAgICB0aWxlUG9zaXRpb25ZICs9IHRp
bGVIZWlnaHQ7CiAgICAgfQogCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKQEAgLTE2NDQsODEgKzE2
NDQsODEgQEAgRWluYV9Cb29sIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3pvb21fd2Vha19zZXQo
RXZhc19PYmplY3QqIGV3a1RpbGUsIGZsb2F0IHpvb20KIHZvaWQgZXdrX3RpbGVkX2JhY2tpbmdf
c3RvcmVfZml4X29mZnNldHMoRXZhc19PYmplY3QqIGV3a1RpbGUsIEV2YXNfQ29vcmQgd2lkdGgs
IEV2YXNfQ29vcmQgaGVpZ2h0KQogewogICAgIFBSSVZfREFUQV9HRVRfT1JfUkVUVVJOKGV3a1Rp
bGUsIHByaXYpOwotICAgIEVpbmFfSW5saXN0KiogaXRyLCAqKml0cl9lbmQ7Ci0gICAgRXdrX1Rp
bGVkX0JhY2tpbmdfU3RvcmVfSXRlbSogaXQ7Ci0gICAgRXZhc19Db29yZCBuZXdfeCA9IHByaXYt
PnZpZXcub2Zmc2V0LmN1ci54OwotICAgIEV2YXNfQ29vcmQgbmV3X3kgPSBwcml2LT52aWV3Lm9m
ZnNldC5jdXIueTsKLSAgICBFdmFzX0Nvb3JkIGJ4ID0gcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54
OwotICAgIEV2YXNfQ29vcmQgYnkgPSBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnk7Ci0gICAgRXZh
c19Db29yZCB0dyA9IHByaXYtPnZpZXcudGlsZS53aWR0aDsKLSAgICBFdmFzX0Nvb3JkIHRoID0g
cHJpdi0+dmlldy50aWxlLmhlaWdodDsKLQotICAgIGlmICgtbmV3X3ggPiB3aWR0aCkgewotICAg
ICAgICBuZXdfeCA9IC13aWR0aDsKLSAgICAgICAgYnggPSBuZXdfeCAlIHR3OwotICAgICAgICBw
cml2LT5tb2RlbC5iYXNlLmNvbCA9IC1uZXdfeCAvIHR3OworICAgIEVpbmFfSW5saXN0KiogaXRl
cmF0b3IsICoqaXRlcmF0b3JFbmQ7CisgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSog
aXRlbTsKKyAgICBFdmFzX0Nvb3JkIG5ld1ggPSBwcml2LT52aWV3Lm9mZnNldC5jdXIueDsKKyAg
ICBFdmFzX0Nvb3JkIG5ld1kgPSBwcml2LT52aWV3Lm9mZnNldC5jdXIueTsKKyAgICBFdmFzX0Nv
b3JkIGJhc2VYID0gcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54OworICAgIEV2YXNfQ29vcmQgYmFz
ZVkgPSBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnk7CisgICAgRXZhc19Db29yZCB0aWxlV2lkdGgg
PSBwcml2LT52aWV3LnRpbGUud2lkdGg7CisgICAgRXZhc19Db29yZCB0aWxlSGVpZ2h0ID0gcHJp
di0+dmlldy50aWxlLmhlaWdodDsKKworICAgIGlmICgtbmV3WCA+IHdpZHRoKSB7CisgICAgICAg
IG5ld1ggPSAtd2lkdGg7CisgICAgICAgIGJhc2VYID0gbmV3WCAlIHRpbGVXaWR0aDsKKyAgICAg
ICAgcHJpdi0+bW9kZWwuYmFzZS5jb2x1bW4gPSAtbmV3WCAvIHRpbGVXaWR0aDsKICAgICB9CiAK
LSAgICBpZiAoLW5ld195ID4gaGVpZ2h0KSB7Ci0gICAgICAgIG5ld195ID0gLWhlaWdodDsKLSAg
ICAgICAgYnkgPSBuZXdfeSAlIHRoOwotICAgICAgICBwcml2LT5tb2RlbC5iYXNlLnJvdyA9IC1u
ZXdfeSAvIHRoOworICAgIGlmICgtbmV3WSA+IGhlaWdodCkgeworICAgICAgICBuZXdZID0gLWhl
aWdodDsKKyAgICAgICAgYmFzZVkgPSBuZXdZICUgdGlsZUhlaWdodDsKKyAgICAgICAgcHJpdi0+
bW9kZWwuYmFzZS5yb3cgPSAtbmV3WSAvIHRpbGVIZWlnaHQ7CiAgICAgfQogCi0gICAgaWYgKGJ4
ID49IDAgfHwgYnggPD0gLTIgKiBwcml2LT52aWV3LnRpbGUud2lkdGgpIHsKLSAgICAgICAgYngg
PSBuZXdfeCAlIHR3OwotICAgICAgICBwcml2LT5tb2RlbC5iYXNlLmNvbCA9IC1uZXdfeCAvIHR3
OworICAgIGlmIChiYXNlWCA+PSAwIHx8IGJhc2VYIDw9IC0yICogcHJpdi0+dmlldy50aWxlLndp
ZHRoKSB7CisgICAgICAgIGJhc2VYID0gbmV3WCAlIHRpbGVXaWR0aDsKKyAgICAgICAgcHJpdi0+
bW9kZWwuYmFzZS5jb2x1bW4gPSAtbmV3WCAvIHRpbGVXaWR0aDsKICAgICB9CiAKLSAgICBpZiAo
YnkgPj0gMCB8fCBieSA8PSAtMiAqIHByaXYtPnZpZXcudGlsZS5oZWlnaHQpIHsKLSAgICAgICAg
YnkgPSBuZXdfeSAlIHRoOwotICAgICAgICBwcml2LT5tb2RlbC5iYXNlLnJvdyA9IC1uZXdfeSAv
IHRoOworICAgIGlmIChiYXNlWSA+PSAwIHx8IGJhc2VZIDw9IC0yICogcHJpdi0+dmlldy50aWxl
LmhlaWdodCkgeworICAgICAgICBiYXNlWSA9IG5ld1kgJSB0aWxlSGVpZ2h0OworICAgICAgICBw
cml2LT5tb2RlbC5iYXNlLnJvdyA9IC1uZXdZIC8gdGlsZUhlaWdodDsKICAgICB9CiAKLSAgICBw
cml2LT52aWV3Lm9mZnNldC5jdXIueCA9IG5ld194OwotICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1
ci55ID0gbmV3X3k7Ci0gICAgcHJpdi0+dmlldy5vZmZzZXQub2xkLnggPSBuZXdfeDsKLSAgICBw
cml2LT52aWV3Lm9mZnNldC5vbGQueSA9IG5ld195OwotICAgIHByaXYtPnZpZXcub2Zmc2V0LmJh
c2UueCA9IGJ4OwotICAgIHByaXYtPnZpZXcub2Zmc2V0LmJhc2UueSA9IGJ5OwotICAgIGV2YXNf
b2JqZWN0X21vdmUocHJpdi0+Y29udGVudHNfY2xpcHBlciwKLSAgICAgICAgICAgICAgICAgICAg
IG5ld194ICsgcHJpdi0+dmlldy54LAotICAgICAgICAgICAgICAgICAgICAgbmV3X3kgKyBwcml2
LT52aWV3LnkpOwotCi0gICAgRXZhc19Db29yZCBveSA9IHByaXYtPnZpZXcub2Zmc2V0LmJhc2Uu
eSArIHByaXYtPnZpZXcueTsKLSAgICBFdmFzX0Nvb3JkIGJhc2Vfb3ggPSBwcml2LT52aWV3Lngg
KyBwcml2LT52aWV3Lm9mZnNldC5iYXNlLng7Ci0KLSAgICBpdHIgPSBwcml2LT52aWV3Lml0ZW1z
OwotICAgIGl0cl9lbmQgPSBpdHIgKyBwcml2LT52aWV3LnJvd3M7Ci0KLSAgICBmb3IgKDsgaXRy
IDwgaXRyX2VuZDsgaXRyKyspIHsKLSAgICAgICAgRXZhc19Db29yZCBveCA9IGJhc2Vfb3g7Ci0g
ICAgICAgIEVpbmFfSW5saXN0KiBsc3QgPSAqaXRyOwotCi0gICAgICAgIEVJTkFfSU5MSVNUX0ZP
UkVBQ0gobHN0LCBpdCkgewotICAgICAgICAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX2l0
ZW1fbW92ZShpdCwgb3gsIG95KTsKLSAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV9pdGVtX3Jlc2l6ZShpdCwgdHcsIHRoKTsKLSAgICAgICAgICAgIG94ICs9IHR3OworICAgIHBy
aXYtPnZpZXcub2Zmc2V0LmN1ci54ID0gbmV3WDsKKyAgICBwcml2LT52aWV3Lm9mZnNldC5jdXIu
eSA9IG5ld1k7CisgICAgcHJpdi0+dmlldy5vZmZzZXQub2xkLnggPSBuZXdYOworICAgIHByaXYt
PnZpZXcub2Zmc2V0Lm9sZC55ID0gbmV3WTsKKyAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLngg
PSBiYXNlWDsKKyAgICBwcml2LT52aWV3Lm9mZnNldC5iYXNlLnkgPSBiYXNlWTsKKyAgICBldmFz
X29iamVjdF9tb3ZlKHByaXYtPmNvbnRlbnRzQ2xpcHBlciwKKyAgICAgICAgICAgICAgICAgICAg
IG5ld1ggKyBwcml2LT52aWV3LngsCisgICAgICAgICAgICAgICAgICAgICBuZXdZICsgcHJpdi0+
dmlldy55KTsKKworICAgIEV2YXNfQ29vcmQgdGlsZVBvc2l0aW9uWSA9IHByaXYtPnZpZXcub2Zm
c2V0LmJhc2UueSArIHByaXYtPnZpZXcueTsKKyAgICBFdmFzX0Nvb3JkIGJhc2VUaWxlUG9zaXRp
b25YID0gcHJpdi0+dmlldy54ICsgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54OworCisgICAgaXRl
cmF0b3IgPSBwcml2LT52aWV3Lml0ZW1zOworICAgIGl0ZXJhdG9yRW5kID0gaXRlcmF0b3IgKyBw
cml2LT52aWV3LnJvd3M7CisKKyAgICBmb3IgKDsgaXRlcmF0b3IgPCBpdGVyYXRvckVuZDsgaXRl
cmF0b3IrKykgeworICAgICAgICBFdmFzX0Nvb3JkIHRpbGVQb3NpdGlvblggPSBiYXNlVGlsZVBv
c2l0aW9uWDsKKyAgICAgICAgRWluYV9Jbmxpc3QqIGxzdCA9ICppdGVyYXRvcjsKKworICAgICAg
ICBFSU5BX0lOTElTVF9GT1JFQUNIKGxzdCwgaXRlbSkgeworICAgICAgICAgICAgX2V3a190aWxl
ZF9iYWNraW5nX3N0b3JlX2l0ZW1fbW92ZShpdGVtLCB0aWxlUG9zaXRpb25YLCB0aWxlUG9zaXRp
b25ZKTsKKyAgICAgICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Jlc2l6ZShp
dGVtLCB0aWxlV2lkdGgsIHRpbGVIZWlnaHQpOworICAgICAgICAgICAgdGlsZVBvc2l0aW9uWCAr
PSB0aWxlV2lkdGg7CiAgICAgICAgIH0KLSAgICAgICAgb3kgKz0gdGg7CisgICAgICAgIHRpbGVQ
b3NpdGlvblkgKz0gdGlsZUhlaWdodDsKICAgICB9CiB9CiAKIHZvaWQgZXdrX3RpbGVkX2JhY2tp
bmdfc3RvcmVfem9vbV93ZWFrX3Ntb290aF9zY2FsZV9zZXQoRXZhc19PYmplY3QqIGV3a1RpbGUs
IEVpbmFfQm9vbCBzbW9vdGhTY2FsZSkKIHsKICAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihl
d2tUaWxlLCBwcml2KTsKLSAgICBFaW5hX0lubGlzdCoqIGl0ciwgKippdHJfZW5kOworICAgIEVp
bmFfSW5saXN0KiogaXRlcmF0b3IsICoqaXRlcmF0b3JFbmQ7CiAKLSAgICBpdHIgPSBwcml2LT52
aWV3Lml0ZW1zOwotICAgIGl0cl9lbmQgPSBpdHIgKyBwcml2LT52aWV3LnJvd3M7Ci0gICAgcHJp
di0+dmlldy50aWxlLnpvb21fd2Vha19zbW9vdGhfc2NhbGUgPSBzbW9vdGhTY2FsZTsKKyAgICBp
dGVyYXRvciA9IHByaXYtPnZpZXcuaXRlbXM7CisgICAgaXRlcmF0b3JFbmQgPSBpdGVyYXRvciAr
IHByaXYtPnZpZXcucm93czsKKyAgICBwcml2LT52aWV3LnRpbGUuem9vbVdlYWtTbW9vdGhTY2Fs
ZSA9IHNtb290aFNjYWxlOwogCi0gICAgZm9yICg7IGl0cjwgaXRyX2VuZDsgaXRyKyspIHsKLSAg
ICAgICAgRXdrX1RpbGVkX0JhY2tpbmdfU3RvcmVfSXRlbSogaXQ7Ci0gICAgICAgIEVJTkFfSU5M
SVNUX0ZPUkVBQ0goKml0ciwgaXQpCi0gICAgICAgICAgICBpZiAoaXQtPnRpbGUpCisgICAgZm9y
ICg7IGl0ZXJhdG9yPCBpdGVyYXRvckVuZDsgaXRlcmF0b3IrKykgeworICAgICAgICBFd2tfVGls
ZWRfQmFja2luZ19TdG9yZV9JdGVtKiBpdGVtOworICAgICAgICBFSU5BX0lOTElTVF9GT1JFQUNI
KCppdGVyYXRvciwgaXRlbSkKKyAgICAgICAgICAgIGlmIChpdGVtLT50aWxlKQogICAgICAgICAg
ICAgICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Ntb290aF9zY2FsZV9zZXQKLSAg
ICAgICAgICAgICAgICAgICAgKGl0LCBzbW9vdGhTY2FsZSk7CisgICAgICAgICAgICAgICAgICAg
IChpdGVtLCBzbW9vdGhTY2FsZSk7CiAgICAgfQogfQogCkBAIC0xNzM2LDE1ICsxNzM2LDE1IEBA
IEVpbmFfQm9vbCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV91cGRhdGUoRXZhc19PYmplY3QqIGV3
a1RpbGUsIGNvbnN0IEVpbmFfUmVjdGFuCiB2b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX3Vw
ZGF0ZXNfcHJvY2Vzc19wcmVfc2V0KEV2YXNfT2JqZWN0KiBld2tUaWxlLCB2b2lkKiAoKmNhbGxi
YWNrKSh2b2lkKiBkYXRhLCBFdmFzX09iamVjdCAqZXdrVGlsZSksIGNvbnN0IHZvaWQqIGRhdGEp
CiB7CiAgICAgUFJJVl9EQVRBX0dFVF9PUl9SRVRVUk4oZXdrVGlsZSwgcHJpdik7Ci0gICAgcHJp
di0+cHJvY2Vzcy5wcmVfY2IgPSBjYWxsYmFjazsKLSAgICBwcml2LT5wcm9jZXNzLnByZV9kYXRh
ID0gKHZvaWQqKWRhdGE7CisgICAgcHJpdi0+cHJvY2Vzcy5wcmVDYWxsYmFjayA9IGNhbGxiYWNr
OworICAgIHByaXYtPnByb2Nlc3MucHJlRGF0YSA9ICh2b2lkKilkYXRhOwogfQogCi12b2lkIGV3
a190aWxlZF9iYWNraW5nX3N0b3JlX3VwZGF0ZXNfcHJvY2Vzc19wb3N0X3NldChFdmFzX09iamVj
dCogZXdrVGlsZSwgdm9pZCogKCpjYWxsYmFjaykodm9pZCogZGF0YSwgdm9pZCogcHJlX2RhdGEs
IEV2YXNfT2JqZWN0ICpld2tUaWxlKSwgY29uc3Qgdm9pZCogZGF0YSkKK3ZvaWQgZXdrX3RpbGVk
X2JhY2tpbmdfc3RvcmVfdXBkYXRlc19wcm9jZXNzX3Bvc3Rfc2V0KEV2YXNfT2JqZWN0KiBld2tU
aWxlLCB2b2lkKiAoKmNhbGxiYWNrKSh2b2lkKiBkYXRhLCB2b2lkKiBwcmVEYXRhLCBFdmFzX09i
amVjdCAqZXdrVGlsZSksIGNvbnN0IHZvaWQqIGRhdGEpCiB7CiAgICAgUFJJVl9EQVRBX0dFVF9P
Ul9SRVRVUk4oZXdrVGlsZSwgcHJpdik7Ci0gICAgcHJpdi0+cHJvY2Vzcy5wb3N0X2NiID0gY2Fs
bGJhY2s7Ci0gICAgcHJpdi0+cHJvY2Vzcy5wb3N0X2RhdGEgPSAodm9pZCopZGF0YTsKKyAgICBw
cml2LT5wcm9jZXNzLnBvc3RDYWxsYmFjayA9IGNhbGxiYWNrOworICAgIHByaXYtPnByb2Nlc3Mu
cG9zdERhdGEgPSAodm9pZCopZGF0YTsKIH0KIAogdm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV91cGRhdGVzX3Byb2Nlc3MoRXZhc19PYmplY3QqIGV3a1RpbGUpCkBAIC0xNzg2LDcgKzE3ODYs
NyBAQCB2b2lkIGV3a190aWxlZF9iYWNraW5nX3N0b3JlX2Rpc2FibGVkX3VwZGF0ZV9zZXQoRXZh
c19PYmplY3QqIGV3a1RpbGUsIEVpbmFfQm9vbAogdm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV9mbHVzaChFdmFzX09iamVjdCogZXdrVGlsZSkKIHsKICAgICBQUklWX0RBVEFfR0VUX09SX1JF
VFVSTihld2tUaWxlLCBwcml2KTsKLSAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHR1YyA9IDA7
CisgICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0aWxlVW51c2VkQ2FjaGUgPSAwOwogCiAgICAg
cHJpdi0+dmlldy5vZmZzZXQuY3VyLnggPSAwOwogICAgIHByaXYtPnZpZXcub2Zmc2V0LmN1ci55
ID0gMDsKQEAgLTE3OTQsMTEgKzE3OTQsMTEgQEAgdm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9y
ZV9mbHVzaChFdmFzX09iamVjdCogZXdrVGlsZSkKICAgICBwcml2LT52aWV3Lm9mZnNldC5vbGQu
eSA9IDA7CiAgICAgcHJpdi0+dmlldy5vZmZzZXQuYmFzZS54ID0gMDsKICAgICBwcml2LT52aWV3
Lm9mZnNldC5iYXNlLnkgPSAwOwotICAgIHByaXYtPm1vZGVsLmJhc2UuY29sID0gMDsKKyAgICBw
cml2LT5tb2RlbC5iYXNlLmNvbHVtbiA9IDA7CiAgICAgcHJpdi0+bW9kZWwuYmFzZS5yb3cgPSAw
OwotICAgIHByaXYtPm1vZGVsLmN1ci5jb2xzID0gMTsKLSAgICBwcml2LT5tb2RlbC5jdXIucm93
cyA9IDE7Ci0gICAgcHJpdi0+bW9kZWwub2xkLmNvbHMgPSAwOworICAgIHByaXYtPm1vZGVsLmN1
cnJlbnQuY29sdW1ucyA9IDE7CisgICAgcHJpdi0+bW9kZWwuY3VycmVudC5yb3dzID0gMTsKKyAg
ICBwcml2LT5tb2RlbC5vbGQuY29sdW1ucyA9IDA7CiAgICAgcHJpdi0+bW9kZWwub2xkLnJvd3Mg
PSAwOwogICAgIHByaXYtPmNoYW5nZWQuc2l6ZSA9IEVJTkFfVFJVRTsKIApAQCAtMTgwOSw4ICsx
ODA5LDggQEAgdm9pZCBld2tfdGlsZWRfYmFja2luZ19zdG9yZV9mbHVzaChFdmFzX09iamVjdCog
ZXdrVGlsZSkKIAogICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVl
c3RfZmx1c2gocHJpdik7CiAgICAgX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3RpbGVfZGlzc29j
aWF0ZV9hbGwocHJpdik7Ci0gICAgdHVjID0gZXdrX3RpbGVfbWF0cml4X3VudXNlZF9jYWNoZV9n
ZXQocHJpdi0+bW9kZWwubWF0cml4KTsKLSAgICBld2tfdGlsZV91bnVzZWRfY2FjaGVfY2xlYXIo
dHVjKTsKKyAgICB0aWxlVW51c2VkQ2FjaGUgPSBld2tfdGlsZV9tYXRyaXhfdW51c2VkX2NhY2hl
X2dldChwcml2LT5tb2RlbC5tYXRyaXgpOworICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9jbGVh
cih0aWxlVW51c2VkQ2FjaGUpOwogCiAjaWZkZWYgREVCVUdfTUVNX0xFQUtTCiAgICAgcHJpbnRm
KCJcbkZMVVNIRUQgQkFDS0lORyBTVE9SRSwgU1RBVFVTIEFGVEVSIFJFQ1JFQVRJTkcgVElMRSBN
QVRSSVg6XG4iKTsKQEAgLTE4MjMsMTYgKzE4MjMsMTYgQEAgRWluYV9Cb29sIGV3a190aWxlZF9i
YWNraW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVnaW9uKEV2YXNfT2JqZWN0KiBld2tUaWxlLCBFdmFz
X0MKICAgICBQUklWX0RBVEFfR0VUX09SX1JFVFVSTihld2tUaWxlLCBwcml2LCBFSU5BX0ZBTFNF
KTsKICAgICBFaW5hX1RpbGVfR3JpZF9TbGljZXIgc2xpY2VyOwogICAgIGNvbnN0IEVpbmFfVGls
ZV9HcmlkX0luZm8qIGluZm87Ci0gICAgRXZhc19Db29yZCB0dywgdGg7Ci0gICAgRXdrX1RpbGVf
VW51c2VkX0NhY2hlKiB0dWM7CisgICAgRXZhc19Db29yZCB0aWxlV2lkdGgsIHRpbGVIZWlnaHQ7
CisgICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0aWxlVW51c2VkQ2FjaGU7CiAKLSAgICB0dyA9
IHByaXYtPnZpZXcudGlsZS53aWR0aDsKLSAgICB0aCA9IHByaXYtPnZpZXcudGlsZS5oZWlnaHQ7
CisgICAgdGlsZVdpZHRoID0gcHJpdi0+dmlldy50aWxlLndpZHRoOworICAgIHRpbGVIZWlnaHQg
PSBwcml2LT52aWV3LnRpbGUuaGVpZ2h0OwogICAgIHpvb20gPSBST1VOREVEX1pPT00ocHJpdi0+
dmlldy50aWxlLndpZHRoLCB6b29tKTsKIAotICAgIGlmICghZWluYV90aWxlX2dyaWRfc2xpY2Vy
X3NldHVwKCZzbGljZXIsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHR3LCB0aCkpIHsKKyAgICBpZiAo
IWVpbmFfdGlsZV9ncmlkX3NsaWNlcl9zZXR1cCgmc2xpY2VyLCB4LCB5LCB3aWR0aCwgaGVpZ2h0
LCB0aWxlV2lkdGgsIHRpbGVIZWlnaHQpKSB7CiAgICAgICAgIEVSUigiY291bGQgbm90IHNldHVw
IGdyaWQgc2xpY2VyIGZvciAlZCwlZCslZHglZCB0aWxlPSVkeCVkIiwKLSAgICAgICAgICAgIHgs
IHksIHdpZHRoLCBoZWlnaHQsIHR3LCB0aCk7CisgICAgICAgICAgICB4LCB5LCB3aWR0aCwgaGVp
Z2h0LCB0aWxlV2lkdGgsIHRpbGVIZWlnaHQpOwogICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsK
ICAgICB9CiAKQEAgLTE4NDUsNDUgKzE4NDUsNDUgQEAgRWluYV9Cb29sIGV3a190aWxlZF9iYWNr
aW5nX3N0b3JlX3ByZV9yZW5kZXJfcmVnaW9uKEV2YXNfT2JqZWN0KiBld2tUaWxlLCBFdmFzX0MK
IAogICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9pdGVtX3Byb2Nlc3NfaWRsZXJfc3RhcnQo
cHJpdik7CiAKLSAgICB0dWMgPSBld2tfdGlsZV9tYXRyaXhfdW51c2VkX2NhY2hlX2dldChwcml2
LT5tb2RlbC5tYXRyaXgpOwotICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV9sb2NrX2FyZWEodHVj
LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCB6b29tKTsKKyAgICB0aWxlVW51c2VkQ2FjaGUgPSBld2tf
dGlsZV9tYXRyaXhfdW51c2VkX2NhY2hlX2dldChwcml2LT5tb2RlbC5tYXRyaXgpOworICAgIGV3
a190aWxlX3VudXNlZF9jYWNoZV9sb2NrX2FyZWEodGlsZVVudXNlZENhY2hlLCB4LCB5LCB3aWR0
aCwgaGVpZ2h0LCB6b29tKTsKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCiBFaW5hX0Jvb2wg
ZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfcHJlX3JlbmRlcl9yZWxhdGl2ZV9yYWRpdXMoRXZhc19P
YmplY3QqIGV3a1RpbGUsIHVuc2lnbmVkIGludCBuLCBmbG9hdCB6b29tKQogewogICAgIFBSSVZf
REFUQV9HRVRfT1JfUkVUVVJOKGV3a1RpbGUsIHByaXYsIEVJTkFfRkFMU0UpOwotICAgIHVuc2ln
bmVkIGxvbmcgc3RhcnRfcm93LCBlbmRfcm93LCBzdGFydF9jb2wsIGVuZF9jb2wsIGksIGosIHdp
ZHRoLCBoZWlnaHQ7Ci0gICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0dWM7CisgICAgdW5zaWdu
ZWQgbG9uZyBzdGFydFJvdywgZW5kUm93LCBzdGFydENvbCwgZW5kQ29sLCBpLCBqLCB3aWR0aCwg
aGVpZ2h0OworICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZSogdGlsZVVudXNlZENhY2hlOwogCiAg
ICAgSU5GKCJwcml2LT5tb2RlbC5iYXNlLnJvdyA9JWxkLCBuPSV1IHByaXYtPnZpZXcucm93cz0l
bHUiLAogICAgICAgICBwcml2LT5tb2RlbC5iYXNlLnJvdywgbiwgcHJpdi0+dmlldy5yb3dzKTsK
LSAgICBzdGFydF9yb3cgPSAobG9uZylwcml2LT5tb2RlbC5iYXNlLnJvdyAtIG47Ci0gICAgc3Rh
cnRfY29sID0gKGxvbmcpcHJpdi0+bW9kZWwuYmFzZS5jb2wgLSBuOwotICAgIGVuZF9yb3cgPSBz
dGQ6Om1pbihwcml2LT5tb2RlbC5jdXIucm93cyAtIDEsCisgICAgc3RhcnRSb3cgPSAobG9uZylw
cml2LT5tb2RlbC5iYXNlLnJvdyAtIG47CisgICAgc3RhcnRDb2wgPSAobG9uZylwcml2LT5tb2Rl
bC5iYXNlLmNvbHVtbiAtIG47CisgICAgZW5kUm93ID0gc3RkOjptaW4ocHJpdi0+bW9kZWwuY3Vy
cmVudC5yb3dzIC0gMSwKICAgICAgICAgICAgICAgICAgICAgICAgcHJpdi0+bW9kZWwuYmFzZS5y
b3cgKyBwcml2LT52aWV3LnJvd3MgKyBuIC0gMSk7Ci0gICAgZW5kX2NvbCA9IHN0ZDo6bWluKHBy
aXYtPm1vZGVsLmN1ci5jb2xzIC0gMSwKLSAgICAgICAgICAgICAgICAgICAgICAgcHJpdi0+bW9k
ZWwuYmFzZS5jb2wgKyBwcml2LT52aWV3LmNvbHMgKyBuIC0gMSk7CisgICAgZW5kQ29sID0gc3Rk
OjptaW4ocHJpdi0+bW9kZWwuY3VycmVudC5jb2x1bW5zIC0gMSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgcHJpdi0+bW9kZWwuYmFzZS5jb2x1bW4gKyBwcml2LT52aWV3LmNvbHMgKyBuIC0gMSk7
CiAKLSAgICBJTkYoInN0YXJ0X3Jvdz0lbHUsIGVuZF9yb3c9JWx1LCBzdGFydF9jb2w9JWx1LCBl
bmRfY29sPSVsdSIsCi0gICAgICAgIHN0YXJ0X3JvdywgZW5kX3Jvdywgc3RhcnRfY29sLCBlbmRf
Y29sKTsKKyAgICBJTkYoInN0YXJ0Um93PSVsdSwgZW5kUm93PSVsdSwgc3RhcnRDb2w9JWx1LCBl
bmRDb2w9JWx1IiwKKyAgICAgICAgc3RhcnRSb3csIGVuZFJvdywgc3RhcnRDb2wsIGVuZENvbCk7
CiAKICAgICB6b29tID0gUk9VTkRFRF9aT09NKHByaXYtPnZpZXcudGlsZS53aWR0aCwgem9vbSk7
CiAKLSAgICBmb3IgKGkgPSBzdGFydF9yb3c7IGkgPD0gZW5kX3JvdzsgaSsrKQotICAgICAgICBm
b3IgKGogPSBzdGFydF9jb2w7IGogPD0gZW5kX2NvbDsgaisrKQorICAgIGZvciAoaSA9IHN0YXJ0
Um93OyBpIDw9IGVuZFJvdzsgaSsrKQorICAgICAgICBmb3IgKGogPSBzdGFydENvbDsgaiA8PSBl
bmRDb2w7IGorKykKICAgICAgICAgICAgIGlmICghX2V3a190aWxlZF9iYWNraW5nX3N0b3JlX3By
ZV9yZW5kZXJfcmVxdWVzdF9hZGQocHJpdiwgaiwgaSwgem9vbSwgUFJFX1JFTkRFUl9QUklPUklU
WV9MT1cpKQogICAgICAgICAgICAgICAgIGdvdG8gc3RhcnRfcHJvY2Vzc2luZzsKIAogc3RhcnRf
cHJvY2Vzc2luZzoKICAgICBfZXdrX3RpbGVkX2JhY2tpbmdfc3RvcmVfaXRlbV9wcm9jZXNzX2lk
bGVyX3N0YXJ0KHByaXYpOwogCi0gICAgdHVjID0gZXdrX3RpbGVfbWF0cml4X3VudXNlZF9jYWNo
ZV9nZXQocHJpdi0+bW9kZWwubWF0cml4KTsKLSAgICBoZWlnaHQgPSAoZW5kX3JvdyAtIHN0YXJ0
X3JvdyArIDEpICogVElMRV9TSVpFX0FUX1pPT00ocHJpdi0+dmlldy50aWxlLmhlaWdodCwgem9v
bSk7Ci0gICAgd2lkdGggPSAoZW5kX2NvbCAtIHN0YXJ0X2NvbCArIDEpICogVElMRV9TSVpFX0FU
X1pPT00ocHJpdi0+dmlldy50aWxlLndpZHRoLCB6b29tKTsKLSAgICBld2tfdGlsZV91bnVzZWRf
Y2FjaGVfbG9ja19hcmVhKHR1YywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0YXJ0X2NvbCAqIFRJTEVfU0laRV9BVF9aT09NKHByaXYtPnZpZXcudGlsZS53aWR0aCwgem9v
bSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGFydF9yb3cgKiBUSUxF
X1NJWkVfQVRfWk9PTShwcml2LT52aWV3LnRpbGUuaGVpZ2h0LCB6b29tKSwgd2lkdGgsIGhlaWdo
dCwgem9vbSk7CisgICAgdGlsZVVudXNlZENhY2hlID0gZXdrX3RpbGVfbWF0cml4X3VudXNlZF9j
YWNoZV9nZXQocHJpdi0+bW9kZWwubWF0cml4KTsKKyAgICBoZWlnaHQgPSAoZW5kUm93IC0gc3Rh
cnRSb3cgKyAxKSAqIFRJTEVfU0laRV9BVF9aT09NKHByaXYtPnZpZXcudGlsZS5oZWlnaHQsIHpv
b20pOworICAgIHdpZHRoID0gKGVuZENvbCAtIHN0YXJ0Q29sICsgMSkgKiBUSUxFX1NJWkVfQVRf
Wk9PTShwcml2LT52aWV3LnRpbGUud2lkdGgsIHpvb20pOworICAgIGV3a190aWxlX3VudXNlZF9j
YWNoZV9sb2NrX2FyZWEodGlsZVVudXNlZENhY2hlLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RhcnRDb2wgKiBUSUxFX1NJWkVfQVRfWk9PTShwcml2LT52aWV3LnRpbGUu
d2lkdGgsIHpvb20pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRS
b3cgKiBUSUxFX1NJWkVfQVRfWk9PTShwcml2LT52aWV3LnRpbGUuaGVpZ2h0LCB6b29tKSwgd2lk
dGgsIGhlaWdodCwgem9vbSk7CiAKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQpAQCAtMTg5MSwx
MiArMTg5MSwxMiBAQCBzdGFydF9wcm9jZXNzaW5nOgogdm9pZCBld2tfdGlsZWRfYmFja2luZ19z
dG9yZV9wcmVfcmVuZGVyX2NhbmNlbChFdmFzX09iamVjdCogZXdrVGlsZSkKIHsKICAgICBQUklW
X0RBVEFfR0VUX09SX1JFVFVSTihld2tUaWxlLCBwcml2KTsKLSAgICBFd2tfVGlsZV9VbnVzZWRf
Q2FjaGUqIHR1YzsKKyAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHRpbGVVbnVzZWRDYWNoZTsK
IAogICAgIF9ld2tfdGlsZWRfYmFja2luZ19zdG9yZV9wcmVfcmVuZGVyX3JlcXVlc3RfY2xlYXIo
cHJpdik7CiAKLSAgICB0dWMgPSBld2tfdGlsZV9tYXRyaXhfdW51c2VkX2NhY2hlX2dldChwcml2
LT5tb2RlbC5tYXRyaXgpOwotICAgIGV3a190aWxlX3VudXNlZF9jYWNoZV91bmxvY2tfYXJlYSh0
dWMpOworICAgIHRpbGVVbnVzZWRDYWNoZSA9IGV3a190aWxlX21hdHJpeF91bnVzZWRfY2FjaGVf
Z2V0KHByaXYtPm1vZGVsLm1hdHJpeCk7CisgICAgZXdrX3RpbGVfdW51c2VkX2NhY2hlX3VubG9j
a19hcmVhKHRpbGVVbnVzZWRDYWNoZSk7CiB9CiAKIEVpbmFfQm9vbCBld2tfdGlsZWRfYmFja2lu
Z19zdG9yZV9kaXNhYmxlX3JlbmRlcihFdmFzX09iamVjdCogZXdrVGlsZSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdGlsZWRfbWF0cml4LmNwcCBiL1NvdXJjZS9XZWJL
aXQvZWZsL2V3ay9ld2tfdGlsZWRfbWF0cml4LmNwcAppbmRleCBlOTFiZDc3Nzc3ZTEwNWQwZmUy
MmRjYWY4ZjJkNmFhMDAxNmQyMjRlLi5jOGMzNDg1MzIwNmQxZGJkZWE2NTE4ODY0ODA3NGE0NGU2
OTQ5MzNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX21hdHJp
eC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a190aWxlZF9tYXRyaXguY3BwCkBA
IC0zMywxMCArMzMsMTAgQEAKIAogc3RydWN0IF9Fd2tfVGlsZV9NYXRyaXggewogICAgIEVpbmFf
TWF0cml4c3BhcnNlKiBtYXRyaXg7Ci0gICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0dWM7Cisg
ICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0aWxpZVVudXNlZENhY2hlOwogICAgIEV2YXNfQ29s
b3JzcGFjZSBjc3BhY2U7CiAgICAgc3RydWN0IHsKLSAgICAgICAgdm9pZCAoKmNiKSh2b2lkKiBk
YXRhLCBFd2tfVGlsZSogdGlsZSwgY29uc3QgRWluYV9SZWN0YW5nbGUqIHVwZGF0ZSk7CisgICAg
ICAgIHZvaWQgKCpjYWxsYmFjaykodm9pZCogZGF0YSwgRXdrX1RpbGUqIHRpbGUsIGNvbnN0IEVp
bmFfUmVjdGFuZ2xlKiB1cGRhdGUpOwogICAgICAgICB2b2lkKiBkYXRhOwogICAgIH0gcmVuZGVy
OwogICAgIHVuc2lnbmVkIGludCBmcm96ZW47CkBAIC02MSw0MiArNjEsNDIgQEAgc3RhdGljIHVp
bnQ2NF90IGJ5dGVzX2xlYWtlZCA9IDA7CiAvKiBjYWxsZWQgd2hlbiBtYXRyaXhzcGFyc2UgaXMg
cmVzaXplZCBvciBmcmVlZCAqLwogc3RhdGljIHZvaWQgX2V3a190aWxlX21hdHJpeF9jZWxsX2Zy
ZWUodm9pZCogdXNlckRhdGEsIHZvaWQqIGNlbGxEYXRhKQogewotICAgIEV3a19UaWxlX01hdHJp
eCogdG0gPSBzdGF0aWNfY2FzdDxFd2tfVGlsZV9NYXRyaXgqPih1c2VyRGF0YSk7CisgICAgRXdr
X1RpbGVfTWF0cml4KiB0aWxlTWF0cml4ID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGVfTWF0cml4Kj4o
dXNlckRhdGEpOwogICAgIEV3a19UaWxlKiB0aWxlID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGUqPihj
ZWxsRGF0YSk7CiAKICAgICBpZiAoIXRpbGUpCiAgICAgICAgIHJldHVybjsKIAotICAgIGV3a190
aWxlX3VudXNlZF9jYWNoZV9mcmVlemUodG0tPnR1Yyk7CisgICAgZXdrX3RpbGVfdW51c2VkX2Nh
Y2hlX2ZyZWV6ZSh0aWxlTWF0cml4LT50aWxpZVVudXNlZENhY2hlKTsKIAogICAgIGlmICh0aWxl
LT51cGRhdGVzIHx8IHRpbGUtPnN0YXRzLmZ1bGxfdXBkYXRlKQotICAgICAgICB0bS0+dXBkYXRl
cyA9IGVpbmFfbGlzdF9yZW1vdmUodG0tPnVwZGF0ZXMsIHRpbGUpOworICAgICAgICB0aWxlTWF0
cml4LT51cGRhdGVzID0gZWluYV9saXN0X3JlbW92ZSh0aWxlTWF0cml4LT51cGRhdGVzLCB0aWxl
KTsKIAogICAgIGlmICh0aWxlLT52aXNpYmxlKQogICAgICAgICBFUlIoImZyZWVpbmcgY2VsbCB0
aGF0IGlzIHZpc2libGUsIGxlYWtpbmcgdGlsZSAlcCIsIHRpbGUpOwogICAgIGVsc2UgewotICAg
ICAgICBpZiAoIWV3a190aWxlX3VudXNlZF9jYWNoZV90aWxlX2dldCh0bS0+dHVjLCB0aWxlKSkK
LSAgICAgICAgICAgIEVSUigidGlsZSAlcCB3YXMgbm90IGluIGNhY2hlICVwPyBsZWFraW5nLi4u
IiwgdGlsZSwgdG0tPnR1Yyk7CisgICAgICAgIGlmICghZXdrX3RpbGVfdW51c2VkX2NhY2hlX3Rp
bGVfZ2V0KHRpbGVNYXRyaXgtPnRpbGllVW51c2VkQ2FjaGUsIHRpbGUpKQorICAgICAgICAgICAg
RVJSKCJ0aWxlICVwIHdhcyBub3QgaW4gY2FjaGUgJXA/IGxlYWtpbmcuLi4iLCB0aWxlLCB0aWxl
TWF0cml4LT50aWxpZVVudXNlZENhY2hlKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBE
QkcoInRpbGUgY2VsbCBkb2VzIG5vdCBleGlzdCBhbnltb3JlLCBmcmVlIGl0ICVwIiwgdGlsZSk7
CiAjaWZkZWYgREVCVUdfTUVNX0xFQUtTCi0gICAgICAgICAgICB0bS0+c3RhdHMuYnl0ZXMuZnJl
ZWQgKz0gdGlsZS0+Ynl0ZXM7Ci0gICAgICAgICAgICB0bS0+c3RhdHMudGlsZXMuZnJlZWQrKzsK
KyAgICAgICAgICAgIHRpbGVNYXRyaXgtPnN0YXRzLmJ5dGVzLmZyZWVkICs9IHRpbGUtPmJ5dGVz
OworICAgICAgICAgICAgdGlsZU1hdHJpeC0+c3RhdHMudGlsZXMuZnJlZWQrKzsKICNlbmRpZgog
ICAgICAgICAgICAgZXdrX3RpbGVfZnJlZSh0aWxlKTsKICAgICAgICAgfQogICAgIH0KIAotICAg
IGV3a190aWxlX3VudXNlZF9jYWNoZV90aGF3KHRtLT50dWMpOworICAgIGV3a190aWxlX3VudXNl
ZF9jYWNoZV90aGF3KHRpbGVNYXRyaXgtPnRpbGllVW51c2VkQ2FjaGUpOwogfQogCiAvKiBjYWxs
ZWQgd2hlbiBjYWNoZSBvZiB1bnVzZWQgdGlsZSBpcyBmbHVzaGVkICovCiBzdGF0aWMgdm9pZCBf
ZXdrX3RpbGVfbWF0cml4X3RpbGVfZnJlZSh2b2lkKiBkYXRhLCBFd2tfVGlsZSogdGlsZSkKIHsK
LSAgICBFd2tfVGlsZV9NYXRyaXgqIHRtID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGVfTWF0cml4Kj4o
ZGF0YSk7CisgICAgRXdrX1RpbGVfTWF0cml4KiB0aWxlTWF0cml4ID0gc3RhdGljX2Nhc3Q8RXdr
X1RpbGVfTWF0cml4Kj4oZGF0YSk7CiAgICAgRWluYV9NYXRyaXhzcGFyc2VfQ2VsbCogY2VsbDsK
IAotICAgIGlmICghZWluYV9tYXRyaXhzcGFyc2VfY2VsbF9pZHhfZ2V0KHRtLT5tYXRyaXgsIHRp
bGUtPnJvdywgdGlsZS0+Y29sLCAmY2VsbCkpIHsKKyAgICBpZiAoIWVpbmFfbWF0cml4c3BhcnNl
X2NlbGxfaWR4X2dldCh0aWxlTWF0cml4LT5tYXRyaXgsIHRpbGUtPnJvdywgdGlsZS0+Y29sLCAm
Y2VsbCkpIHsKICAgICAgICAgRVJSKCJyZW1vdmluZyB0aWxlICVwIHRoYXQgd2FzIG5vdCBpbiB0
aGUgbWF0cml4PyBMZWFraW5nLi4uIiwgdGlsZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBA
IC0xMDcsNyArMTA3LDcgQEAgc3RhdGljIHZvaWQgX2V3a190aWxlX21hdHJpeF90aWxlX2ZyZWUo
dm9pZCogZGF0YSwgRXdrX1RpbGUqIHRpbGUpCiAgICAgfQogCiAgICAgaWYgKHRpbGUtPnVwZGF0
ZXMgfHwgdGlsZS0+c3RhdHMuZnVsbF91cGRhdGUpCi0gICAgICAgIHRtLT51cGRhdGVzID0gZWlu
YV9saXN0X3JlbW92ZSh0bS0+dXBkYXRlcywgdGlsZSk7CisgICAgICAgIHRpbGVNYXRyaXgtPnVw
ZGF0ZXMgPSBlaW5hX2xpc3RfcmVtb3ZlKHRpbGVNYXRyaXgtPnVwZGF0ZXMsIHRpbGUpOwogCiAg
ICAgLyogc2V0IHRvIG51bGwgdG8gYXZvaWQgZG91YmxlIGZyZWUgKi8KICAgICBlaW5hX21hdHJp
eHNwYXJzZV9jZWxsX2RhdGFfcmVwbGFjZShjZWxsLCAwLCAwKTsKQEAgLTEyMCw4ICsxMjAsOCBA
QCBzdGF0aWMgdm9pZCBfZXdrX3RpbGVfbWF0cml4X3RpbGVfZnJlZSh2b2lkKiBkYXRhLCBFd2tf
VGlsZSogdGlsZSkKICAgICB9CiAKICNpZmRlZiBERUJVR19NRU1fTEVBS1MKLSAgICB0bS0+c3Rh
dHMuYnl0ZXMuZnJlZWQgKz0gdGlsZS0+Ynl0ZXM7Ci0gICAgdG0tPnN0YXRzLnRpbGVzLmZyZWVk
Kys7CisgICAgdGlsZU1hdHJpeC0+c3RhdHMuYnl0ZXMuZnJlZWQgKz0gdGlsZS0+Ynl0ZXM7Cisg
ICAgdGlsZU1hdHJpeC0+c3RhdHMudGlsZXMuZnJlZWQrKzsKICNlbmRpZgogCiAgICAgZXdrX3Rp
bGVfZnJlZSh0aWxlKTsKQEAgLTE0NSwzOCArMTQ1LDM4IEBAIHN0YXRpYyB2b2lkIF9ld2tfdGls
ZV9tYXRyaXhfdGlsZV9mcmVlKHZvaWQqIGRhdGEsIEV3a19UaWxlKiB0aWxlKQogICoKICAqIEBy
ZXR1cm4gbmV3bHkgYWxsb2NhdGVkIGluc3RhbmNlIG9uIHN1Y2Nlc3MsIEBjIDAgb24gZmFpbHVy
ZS4KICAqLwotRXdrX1RpbGVfTWF0cml4KiBld2tfdGlsZV9tYXRyaXhfbmV3KEV3a19UaWxlX1Vu
dXNlZF9DYWNoZSogdGlsZVVudXNlZENhY2hlLCB1bnNpZ25lZCBsb25nIGNvbHVtbnMsIHVuc2ln
bmVkIGxvbmcgcm93cywgRXZhc19Db2xvcnNwYWNlIGNvbG9yU3BhY2UsIHZvaWQgKCpyZW5kZXJf
Y2FsbGJhY2spKHZvaWQqIGRhdGEsIEV3a19UaWxlKiB0aWxlLCBjb25zdCBFaW5hX1JlY3Rhbmds
ZSogdXBkYXRlKSwgY29uc3Qgdm9pZCogcmVuZGVyRGF0YSkKK0V3a19UaWxlX01hdHJpeCogZXdr
X3RpbGVfbWF0cml4X25ldyhFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHRpbGVVbnVzZWRDYWNoZSwg
dW5zaWduZWQgbG9uZyBjb2x1bW5zLCB1bnNpZ25lZCBsb25nIHJvd3MsIEV2YXNfQ29sb3JzcGFj
ZSBjb2xvclNwYWNlLCB2b2lkICgqcmVuZGVyQ2FsbGJhY2spKHZvaWQqIGRhdGEsIEV3a19UaWxl
KiB0aWxlLCBjb25zdCBFaW5hX1JlY3RhbmdsZSogdXBkYXRlKSwgY29uc3Qgdm9pZCogcmVuZGVy
RGF0YSkKIHsKLSAgICBFd2tfVGlsZV9NYXRyaXgqIHRtID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGVf
TWF0cml4Kj4oY2FsbG9jKDEsIHNpemVvZihFd2tfVGlsZV9NYXRyaXgpKSk7Ci0gICAgaWYgKCF0
bSkKKyAgICBFd2tfVGlsZV9NYXRyaXgqIHRpbGVNYXRyaXggPSBzdGF0aWNfY2FzdDxFd2tfVGls
ZV9NYXRyaXgqPihjYWxsb2MoMSwgc2l6ZW9mKEV3a19UaWxlX01hdHJpeCkpKTsKKyAgICBpZiAo
IXRpbGVNYXRyaXgpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgdG0tPm1hdHJpeCA9IGVpbmFf
bWF0cml4c3BhcnNlX25ldyhyb3dzLCBjb2x1bW5zLCBfZXdrX3RpbGVfbWF0cml4X2NlbGxfZnJl
ZSwgdG0pOwotICAgIGlmICghdG0tPm1hdHJpeCkgeworICAgIHRpbGVNYXRyaXgtPm1hdHJpeCA9
IGVpbmFfbWF0cml4c3BhcnNlX25ldyhyb3dzLCBjb2x1bW5zLCBfZXdrX3RpbGVfbWF0cml4X2Nl
bGxfZnJlZSwgdGlsZU1hdHJpeCk7CisgICAgaWYgKCF0aWxlTWF0cml4LT5tYXRyaXgpIHsKICAg
ICAgICAgRVJSKCJjb3VsZCBub3QgY3JlYXRlIHNwYXJzZSBtYXRyaXguIik7Ci0gICAgICAgIGZy
ZWUodG0pOworICAgICAgICBmcmVlKHRpbGVNYXRyaXgpOwogICAgICAgICByZXR1cm4gMDsKICAg
ICB9CiAKICAgICBpZiAodGlsZVVudXNlZENhY2hlKQotICAgICAgICB0bS0+dHVjID0gZXdrX3Rp
bGVfdW51c2VkX2NhY2hlX3JlZih0aWxlVW51c2VkQ2FjaGUpOworICAgICAgICB0aWxlTWF0cml4
LT50aWxpZVVudXNlZENhY2hlID0gZXdrX3RpbGVfdW51c2VkX2NhY2hlX3JlZih0aWxlVW51c2Vk
Q2FjaGUpOwogICAgIGVsc2UgewotICAgICAgICB0bS0+dHVjID0gZXdrX3RpbGVfdW51c2VkX2Nh
Y2hlX25ldyg0MDk2MDAwMCk7Ci0gICAgICAgIGlmICghdG0tPnR1YykgeworICAgICAgICB0aWxl
TWF0cml4LT50aWxpZVVudXNlZENhY2hlID0gZXdrX3RpbGVfdW51c2VkX2NhY2hlX25ldyg0MDk2
MDAwMCk7CisgICAgICAgIGlmICghdGlsZU1hdHJpeC0+dGlsaWVVbnVzZWRDYWNoZSkgewogICAg
ICAgICAgICAgRVJSKCJubyBjYWNoZSBvZiB1bnVzZWQgdGlsZSEiKTsKLSAgICAgICAgICAgIGVp
bmFfbWF0cml4c3BhcnNlX2ZyZWUodG0tPm1hdHJpeCk7Ci0gICAgICAgICAgICBmcmVlKHRtKTsK
KyAgICAgICAgICAgIGVpbmFfbWF0cml4c3BhcnNlX2ZyZWUodGlsZU1hdHJpeC0+bWF0cml4KTsK
KyAgICAgICAgICAgIGZyZWUodGlsZU1hdHJpeCk7CiAgICAgICAgICAgICByZXR1cm4gMDsKICAg
ICAgICAgfQogICAgIH0KIAotICAgIHRtLT5jc3BhY2UgPSBjb2xvclNwYWNlOwotICAgIHRtLT5y
ZW5kZXIuY2IgPSByZW5kZXJfY2FsbGJhY2s7Ci0gICAgdG0tPnJlbmRlci5kYXRhID0gKHZvaWQq
KXJlbmRlckRhdGE7Ci0gICAgdG0tPnRpbGUud2lkdGggPSBERUZBVUxUX1RJTEVfVzsKLSAgICB0
bS0+dGlsZS5oZWlnaHQgPSBERUZBVUxUX1RJTEVfSDsKKyAgICB0aWxlTWF0cml4LT5jc3BhY2Ug
PSBjb2xvclNwYWNlOworICAgIHRpbGVNYXRyaXgtPnJlbmRlci5jYWxsYmFjayA9IHJlbmRlckNh
bGxiYWNrOworICAgIHRpbGVNYXRyaXgtPnJlbmRlci5kYXRhID0gKHZvaWQqKXJlbmRlckRhdGE7
CisgICAgdGlsZU1hdHJpeC0+dGlsZS53aWR0aCA9IERFRkFVTFRfVElMRV9XOworICAgIHRpbGVN
YXRyaXgtPnRpbGUuaGVpZ2h0ID0gREVGQVVMVF9USUxFX0g7CiAKLSAgICByZXR1cm4gdG07Cisg
ICAgcmV0dXJuIHRpbGVNYXRyaXg7CiB9CiAKIC8qKgpAQCAtMTkxLDEyICsxOTEsMTIgQEAgdm9p
ZCBld2tfdGlsZV9tYXRyaXhfZnJlZShFd2tfVGlsZV9NYXRyaXgqIHRpbGVNYXRyaXgpCiAjZW5k
aWYKIAogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHRpbGVNYXRyaXgpOwotICAgIGV3
a190aWxlX3VudXNlZF9jYWNoZV9mcmVlemUodGlsZU1hdHJpeC0+dHVjKTsKKyAgICBld2tfdGls
ZV91bnVzZWRfY2FjaGVfZnJlZXplKHRpbGVNYXRyaXgtPnRpbGllVW51c2VkQ2FjaGUpOwogCiAg
ICAgZWluYV9tYXRyaXhzcGFyc2VfZnJlZSh0aWxlTWF0cml4LT5tYXRyaXgpOwogCi0gICAgZXdr
X3RpbGVfdW51c2VkX2NhY2hlX3RoYXcodGlsZU1hdHJpeC0+dHVjKTsKLSAgICBld2tfdGlsZV91
bnVzZWRfY2FjaGVfdW5yZWYodGlsZU1hdHJpeC0+dHVjKTsKKyAgICBld2tfdGlsZV91bnVzZWRf
Y2FjaGVfdGhhdyh0aWxlTWF0cml4LT50aWxpZVVudXNlZENhY2hlKTsKKyAgICBld2tfdGlsZV91
bnVzZWRfY2FjaGVfdW5yZWYodGlsZU1hdHJpeC0+dGlsaWVVbnVzZWRDYWNoZSk7CiAKICNpZmRl
ZiBERUJVR19NRU1fTEVBS1MKICAgICB0aWxlcyA9IHRpbGVNYXRyaXgtPnN0YXRzLnRpbGVzLmFs
bG9jYXRlZCAtIHRpbGVNYXRyaXgtPnN0YXRzLnRpbGVzLmZyZWVkOwpAQCAtMjQ0LDcgKzI0NCw3
IEBAIHZvaWQgZXdrX3RpbGVfbWF0cml4X3Jlc2l6ZShFd2tfVGlsZV9NYXRyaXgqIHRpbGVNYXRy
aXgsIHVuc2lnbmVkIGxvbmcgY29scywgdW5zCiBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIGV3a190
aWxlX21hdHJpeF91bnVzZWRfY2FjaGVfZ2V0KGNvbnN0IEV3a19UaWxlX01hdHJpeCogdGlsZU1h
dHJpeCkKIHsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodGlsZU1hdHJpeCwg
MCk7Ci0gICAgcmV0dXJuIHRpbGVNYXRyaXgtPnR1YzsKKyAgICByZXR1cm4gdGlsZU1hdHJpeC0+
dGlsaWVVbnVzZWRDYWNoZTsKIH0KIAogLyoqCkBAIC0yNzksNyArMjc5LDcgQEAgRXdrX1RpbGUq
IGV3a190aWxlX21hdHJpeF90aWxlX2V4YWN0X2dldChFd2tfVGlsZV9NYXRyaXgqIHRpbGVNYXRy
aXgsIHVuc2lnbmVkIGwKIAogZW5kOgogICAgIGlmICghdGlsZS0+dmlzaWJsZSkgewotICAgICAg
ICBpZiAoIWV3a190aWxlX3VudXNlZF9jYWNoZV90aWxlX2dldCh0aWxlTWF0cml4LT50dWMsIHRp
bGUpKQorICAgICAgICBpZiAoIWV3a190aWxlX3VudXNlZF9jYWNoZV90aWxlX2dldCh0aWxlTWF0
cml4LT50aWxpZVVudXNlZENhY2hlLCB0aWxlKSkKICAgICAgICAgICAgIFdSTigiRXdrX1RpbGUg
d2FzIHVudXNlZCBidXQgbm90IGluIGNhY2hlPyBidWchIik7CiAgICAgfQogCkBAIC0zMjAsMTgg
KzMyMCwxOCBAQCBFaW5hX0Jvb2wgZXdrX3RpbGVfbWF0cml4X3RpbGVfZXhhY3RfZXhpc3RzKEV3
a19UaWxlX01hdHJpeCogdGlsZU1hdHJpeCwgdW5zaWduZQogICovCiBFd2tfVGlsZSogZXdrX3Rp
bGVfbWF0cml4X3RpbGVfbmV3KEV3a19UaWxlX01hdHJpeCogdGlsZU1hdHJpeCwgRXZhcyogY2Fu
dmFzLCB1bnNpZ25lZCBsb25nIGNvbHVtbiwgdW5zaWduZWQgbG9uZyByb3csIGZsb2F0IHpvb20p
CiB7Ci0gICAgRXZhc19Db29yZCB0dywgdGg7CisgICAgRXZhc19Db29yZCB0aWxlV2lkdGgsIHRp
bGVIZWlnaHQ7CiAgICAgRXdrX1RpbGUqIHRpbGU7CiAKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTl9WQUwodGlsZU1hdHJpeCwgMCk7CiAgICAgRUlOQV9TQUZFVFlfT05fRkFMU0VfUkVU
VVJOX1ZBTCh6b29tID4gMC4wLCAwKTsKIAotICAgIHR3ID0gdGlsZU1hdHJpeC0+dGlsZS53aWR0
aDsKLSAgICB0aCA9IHRpbGVNYXRyaXgtPnRpbGUuaGVpZ2h0OworICAgIHRpbGVXaWR0aCA9IHRp
bGVNYXRyaXgtPnRpbGUud2lkdGg7CisgICAgdGlsZUhlaWdodCA9IHRpbGVNYXRyaXgtPnRpbGUu
aGVpZ2h0OwogCi0gICAgdGlsZSA9IGV3a190aWxlX25ldyhjYW52YXMsIHR3LCB0aCwgem9vbSwg
dGlsZU1hdHJpeC0+Y3NwYWNlKTsKKyAgICB0aWxlID0gZXdrX3RpbGVfbmV3KGNhbnZhcywgdGls
ZVdpZHRoLCB0aWxlSGVpZ2h0LCB6b29tLCB0aWxlTWF0cml4LT5jc3BhY2UpOwogICAgIGlmICgh
dGlsZSkgewotICAgICAgICBFUlIoImNvdWxkIG5vdCBjcmVhdGUgdGlsZSAlZHglZCBhdCAlZiwg
Y3NwYWNlPSVkIiwgdHcsIHRoLCAoZG91YmxlKXpvb20sIHRpbGVNYXRyaXgtPmNzcGFjZSk7Cisg
ICAgICAgIEVSUigiY291bGQgbm90IGNyZWF0ZSB0aWxlICVkeCVkIGF0ICVmLCBjc3BhY2U9JWQi
LCB0aWxlV2lkdGgsIHRpbGVIZWlnaHQsIChkb3VibGUpem9vbSwgdGlsZU1hdHJpeC0+Y3NwYWNl
KTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCkBAIC0zNDMsOCArMzQzLDggQEAgRXdrX1Rp
bGUqIGV3a190aWxlX21hdHJpeF90aWxlX25ldyhFd2tfVGlsZV9NYXRyaXgqIHRpbGVNYXRyaXgs
IEV2YXMqIGNhbnZhcywgdW4KIAogICAgIHRpbGUtPmNvbCA9IGNvbHVtbjsKICAgICB0aWxlLT5y
b3cgPSByb3c7Ci0gICAgdGlsZS0+eCA9IGNvbHVtbiAqIHR3OwotICAgIHRpbGUtPnkgPSByb3cg
KiB0aDsKKyAgICB0aWxlLT54ID0gY29sdW1uICogdGlsZVdpZHRoOworICAgIHRpbGUtPnkgPSBy
b3cgKiB0aWxlSGVpZ2h0OwogCiAgICAgY2Fpcm9fdHJhbnNsYXRlKHRpbGUtPmNhaXJvLCAtdGls
ZS0+eCwgLXRpbGUtPnkpOwogCkBAIC0zODUsMTYgKzM4NSwxNiBAQCBFaW5hX0Jvb2wgZXdrX3Rp
bGVfbWF0cml4X3RpbGVfcHV0KEV3a19UaWxlX01hdHJpeCogdGlsZU1hdHJpeCwgRXdrX1RpbGUq
IHRpbGUsCiAgICAgICAgIHJldHVybiBFSU5BX1RSVUU7CiAKICAgICB0aWxlLT5zdGF0cy5sYXN0
X3VzZWQgPSBsYXN0VXNlZDsKLSAgICByZXR1cm4gZXdrX3RpbGVfdW51c2VkX2NhY2hlX3RpbGVf
cHV0KHRpbGVNYXRyaXgtPnR1YywgdGlsZSwgX2V3a190aWxlX21hdHJpeF90aWxlX2ZyZWUsIHRp
bGVNYXRyaXgpOworICAgIHJldHVybiBld2tfdGlsZV91bnVzZWRfY2FjaGVfdGlsZV9wdXQodGls
ZU1hdHJpeC0+dGlsaWVVbnVzZWRDYWNoZSwgdGlsZSwgX2V3a190aWxlX21hdHJpeF90aWxlX2Zy
ZWUsIHRpbGVNYXRyaXgpOwogfQogCiBFaW5hX0Jvb2wgZXdrX3RpbGVfbWF0cml4X3RpbGVfdXBk
YXRlKEV3a19UaWxlX01hdHJpeCogdGlsZU1hdHJpeCwgdW5zaWduZWQgbG9uZyBjb2wsIHVuc2ln
bmVkIGxvbmcgcm93LCBjb25zdCBFaW5hX1JlY3RhbmdsZSogdXBkYXRlKQogewotICAgIEVpbmFf
UmVjdGFuZ2xlIG5ld191cGRhdGU7CisgICAgRWluYV9SZWN0YW5nbGUgbmV3VXBkYXRlOwogICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh0aWxlTWF0cml4LCBFSU5BX0ZBTFNFKTsK
ICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodXBkYXRlLCBFSU5BX0ZBTFNFKTsK
IAotICAgIG1lbWNweSgmbmV3X3VwZGF0ZSwgdXBkYXRlLCBzaXplb2YobmV3X3VwZGF0ZSkpOwor
ICAgIG1lbWNweSgmbmV3VXBkYXRlLCB1cGRhdGUsIHNpemVvZihuZXdVcGRhdGUpKTsKICAgICAv
LyBjaGVjayB1cGRhdGUgaXMgdmFsaWQsIG90aGVyd2lzZSByZXR1cm4gRUlOQV9GQUxTRQogICAg
IGlmICh1cGRhdGUtPnggPCAwIHx8IHVwZGF0ZS0+eSA8IDAgfHwgdXBkYXRlLT53IDw9IDAgfHwg
dXBkYXRlLT5oIDw9IDApIHsKICAgICAgICAgRVJSKCJpbnZhbGlkIHVwZGF0ZSByZWdpb24uIik7
CkBAIC00MDIsOSArNDAyLDkgQEAgRWluYV9Cb29sIGV3a190aWxlX21hdHJpeF90aWxlX3VwZGF0
ZShFd2tfVGlsZV9NYXRyaXgqIHRpbGVNYXRyaXgsIHVuc2lnbmVkIGxvbmcKICAgICB9CiAKICAg
ICBpZiAodXBkYXRlLT54ICsgdXBkYXRlLT53IC0gMSA+PSB0aWxlTWF0cml4LT50aWxlLndpZHRo
KQotICAgICAgICBuZXdfdXBkYXRlLncgPSB0aWxlTWF0cml4LT50aWxlLndpZHRoIC0gdXBkYXRl
LT54OworICAgICAgICBuZXdVcGRhdGUudyA9IHRpbGVNYXRyaXgtPnRpbGUud2lkdGggLSB1cGRh
dGUtPng7CiAgICAgaWYgKHVwZGF0ZS0+eSArIHVwZGF0ZS0+aCAtIDEgPj0gdGlsZU1hdHJpeC0+
dGlsZS5oZWlnaHQpCi0gICAgICAgIG5ld191cGRhdGUuaCA9IHRpbGVNYXRyaXgtPnRpbGUuaGVp
Z2h0IC0gdXBkYXRlLT55OworICAgICAgICBuZXdVcGRhdGUuaCA9IHRpbGVNYXRyaXgtPnRpbGUu
aGVpZ2h0IC0gdXBkYXRlLT55OwogCiAgICAgRXdrX1RpbGUqIHRpbGUgPSBzdGF0aWNfY2FzdDxF
d2tfVGlsZSo+KGVpbmFfbWF0cml4c3BhcnNlX2RhdGFfaWR4X2dldCh0aWxlTWF0cml4LT5tYXRy
aXgsIHJvdywgY29sKSk7CiAgICAgaWYgKCF0aWxlKQpAQCAtNDEyLDcgKzQxMiw3IEBAIEVpbmFf
Qm9vbCBld2tfdGlsZV9tYXRyaXhfdGlsZV91cGRhdGUoRXdrX1RpbGVfTWF0cml4KiB0aWxlTWF0
cml4LCB1bnNpZ25lZCBsb25nCiAKICAgICBpZiAoIXRpbGUtPnVwZGF0ZXMgJiYgIXRpbGUtPnN0
YXRzLmZ1bGxfdXBkYXRlKQogICAgICAgICB0aWxlTWF0cml4LT51cGRhdGVzID0gZWluYV9saXN0
X2FwcGVuZCh0aWxlTWF0cml4LT51cGRhdGVzLCB0aWxlKTsKLSAgICBld2tfdGlsZV91cGRhdGVf
YXJlYSh0aWxlLCAmbmV3X3VwZGF0ZSk7CisgICAgZXdrX3RpbGVfdXBkYXRlX2FyZWEodGlsZSwg
Jm5ld1VwZGF0ZSk7CiAKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQpAQCAtNDUzLDcgKzQ1Myw3
IEBAIHZvaWQgZXdrX3RpbGVfbWF0cml4X3RpbGVfdXBkYXRlc19jbGVhcihFd2tfVGlsZV9NYXRy
aXgqIHRpbGVNYXRyaXgsIEV3a19UaWxlKiB0CiBzdGF0aWMgRWluYV9Cb29sIF9ld2tfdGlsZV9t
YXRyaXhfc2xpY2VyX3NldHVwKEV3a19UaWxlX01hdHJpeCogdGlsZU1hdHJpeCwgY29uc3QgRWlu
YV9SZWN0YW5nbGUqIGFyZWEsIGZsb2F0IHpvb20sIEVpbmFfVGlsZV9HcmlkX1NsaWNlciogc2xp
Y2VyKQogewogICAgIHVuc2lnbmVkIGxvbmcgcm93cywgY29sczsKLSAgICBFdmFzX0Nvb3JkIHgs
IHksIHdpZHRoLCBoZWlnaHQsIHR3LCB0aDsKKyAgICBFdmFzX0Nvb3JkIHgsIHksIHdpZHRoLCBo
ZWlnaHQsIHRpbGVXaWR0aCwgdGlsZUhlaWdodDsKIAogICAgIGlmIChhcmVhLT53IDw9IDAgfHwg
YXJlYS0+aCA8PSAwKSB7CiAgICAgICAgIFdSTigiaW52YWxpZCBhcmVhIHJlZ2lvbjogJWQsJWQr
JWR4JWQuIiwKQEAgLTQ2Niw4ICs0NjYsOCBAQCBzdGF0aWMgRWluYV9Cb29sIF9ld2tfdGlsZV9t
YXRyaXhfc2xpY2VyX3NldHVwKEV3a19UaWxlX01hdHJpeCogdGlsZU1hdHJpeCwgY29ucwogICAg
IHdpZHRoID0gYXJlYS0+dzsKICAgICBoZWlnaHQgPSBhcmVhLT5oOwogCi0gICAgdHcgPSB0aWxl
TWF0cml4LT50aWxlLndpZHRoOwotICAgIHRoID0gdGlsZU1hdHJpeC0+dGlsZS5oZWlnaHQ7Cisg
ICAgdGlsZVdpZHRoID0gdGlsZU1hdHJpeC0+dGlsZS53aWR0aDsKKyAgICB0aWxlSGVpZ2h0ID0g
dGlsZU1hdHJpeC0+dGlsZS5oZWlnaHQ7CiAKICAgICAvLyBjcm9wcGluZyBhcmVhIHJlZ2lvbiB0
byBmaXQgbWF0cml4CiAgICAgZWluYV9tYXRyaXhzcGFyc2Vfc2l6ZV9nZXQodGlsZU1hdHJpeC0+
bWF0cml4LCAmcm93cywgJmNvbHMpOwpAQCAtNDgwLDEyICs0ODAsMTIgQEAgc3RhdGljIEVpbmFf
Qm9vbCBfZXdrX3RpbGVfbWF0cml4X3NsaWNlcl9zZXR1cChFd2tfVGlsZV9NYXRyaXgqIHRpbGVN
YXRyaXgsIGNvbnMKICAgICAgICAgeSA9IDA7CiAgICAgfQogCi0gICAgaWYgKHkgKyBoZWlnaHQg
LSAxID4gKGxvbmcpKHJvd3MgKiB0aCkpCi0gICAgICAgIGhlaWdodCA9IHJvd3MgKiB0aCAtIHk7
Ci0gICAgaWYgKHggKyB3aWR0aCAtIDEgPiAobG9uZykoY29scyAqIHR3KSkKLSAgICAgICAgd2lk
dGggPSBjb2xzICogdHcgLSB4OworICAgIGlmICh5ICsgaGVpZ2h0IC0gMSA+IChsb25nKShyb3dz
ICogdGlsZUhlaWdodCkpCisgICAgICAgIGhlaWdodCA9IHJvd3MgKiB0aWxlSGVpZ2h0IC0geTsK
KyAgICBpZiAoeCArIHdpZHRoIC0gMSA+IChsb25nKShjb2xzICogdGlsZVdpZHRoKSkKKyAgICAg
ICAgd2lkdGggPSBjb2xzICogdGlsZVdpZHRoIC0geDsKIAotICAgIHJldHVybiBlaW5hX3RpbGVf
Z3JpZF9zbGljZXJfc2V0dXAoc2xpY2VyLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCB0dywgdGgpOwor
ICAgIHJldHVybiBlaW5hX3RpbGVfZ3JpZF9zbGljZXJfc2V0dXAoc2xpY2VyLCB4LCB5LCB3aWR0
aCwgaGVpZ2h0LCB0aWxlV2lkdGgsIHRpbGVIZWlnaHQpOwogfQogCiAKQEAgLTUzMSwxNyArNTMx
LDE3IEBAIEVpbmFfQm9vbCBld2tfdGlsZV9tYXRyaXhfdXBkYXRlKEV3a19UaWxlX01hdHJpeCog
dGlsZU1hdHJpeCwgY29uc3QgRWluYV9SZWN0YW5nCiAKIHZvaWQgZXdrX3RpbGVfbWF0cml4X3Vw
ZGF0ZXNfcHJvY2VzcyhFd2tfVGlsZV9NYXRyaXgqIHRpbGVNYXRyaXgpCiB7Ci0gICAgRWluYV9M
aXN0KiBsLCAqIGxfbmV4dDsKKyAgICBFaW5hX0xpc3QqIGxpc3QsICpsaXN0TmV4dDsKICAgICB2
b2lkKiBpdGVtOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHRpbGVNYXRyaXgpOwog
CiAgICAgLy8gcHJvY2VzcyB1cGRhdGVzLCB1bmZsYWcgdGlsZXMKLSAgICBFSU5BX0xJU1RfRk9S
RUFDSF9TQUZFKHRpbGVNYXRyaXgtPnVwZGF0ZXMsIGwsIGxfbmV4dCwgaXRlbSkgeworICAgIEVJ
TkFfTElTVF9GT1JFQUNIX1NBRkUodGlsZU1hdHJpeC0+dXBkYXRlcywgbGlzdCwgbGlzdE5leHQs
IGl0ZW0pIHsKICAgICAgICAgRXdrX1RpbGUqIHRpbGUgPSBzdGF0aWNfY2FzdDxFd2tfVGlsZSo+
KGl0ZW0pOwotICAgICAgICBld2tfdGlsZV91cGRhdGVzX3Byb2Nlc3ModGlsZSwgdGlsZU1hdHJp
eC0+cmVuZGVyLmNiLCB0aWxlTWF0cml4LT5yZW5kZXIuZGF0YSk7CisgICAgICAgIGV3a190aWxl
X3VwZGF0ZXNfcHJvY2Vzcyh0aWxlLCB0aWxlTWF0cml4LT5yZW5kZXIuY2FsbGJhY2ssIHRpbGVN
YXRyaXgtPnJlbmRlci5kYXRhKTsKICAgICAgICAgaWYgKHRpbGUtPnZpc2libGUpIHsKICAgICAg
ICAgICAgIGV3a190aWxlX3VwZGF0ZXNfY2xlYXIodGlsZSk7Ci0gICAgICAgICAgICB0aWxlTWF0
cml4LT51cGRhdGVzID0gZWluYV9saXN0X3JlbW92ZV9saXN0KHRpbGVNYXRyaXgtPnVwZGF0ZXMs
IGwpOworICAgICAgICAgICAgdGlsZU1hdHJpeC0+dXBkYXRlcyA9IGVpbmFfbGlzdF9yZW1vdmVf
bGlzdCh0aWxlTWF0cml4LT51cGRhdGVzLCBsaXN0KTsKICAgICAgICAgfQogICAgIH0KIH0KQEAg
LTU1OSw3ICs1NTksNyBAQCB2b2lkIGV3a190aWxlX21hdHJpeF91cGRhdGVzX2NsZWFyKEV3a19U
aWxlX01hdHJpeCogdGlsZU1hdHJpeCkKIC8vIHJlbW92ZSBtZSBsYXRlciEKIHZvaWQgZXdrX3Rp
bGVfbWF0cml4X2RiZyhjb25zdCBFd2tfVGlsZV9NYXRyaXgqIHRpbGVNYXRyaXgpCiB7Ci0gICAg
RWluYV9JdGVyYXRvciogaXQgPSBlaW5hX21hdHJpeHNwYXJzZV9pdGVyYXRvcl9jb21wbGV0ZV9u
ZXcodGlsZU1hdHJpeC0+bWF0cml4KTsKKyAgICBFaW5hX0l0ZXJhdG9yKiBpdGVyYXRvciA9IGVp
bmFfbWF0cml4c3BhcnNlX2l0ZXJhdG9yX2NvbXBsZXRlX25ldyh0aWxlTWF0cml4LT5tYXRyaXgp
OwogICAgIEVpbmFfTWF0cml4c3BhcnNlX0NlbGwqIGNlbGw7CiAgICAgRWluYV9Cb29sIGxhc3Rf
ZW1wdHkgPSBFSU5BX0ZBTFNFOwogCkBAIC01NzQsOSArNTc0LDkgQEAgdm9pZCBld2tfdGlsZV9t
YXRyaXhfZGJnKGNvbnN0IEV3a19UaWxlX01hdHJpeCogdGlsZU1hdHJpeCkKICAgICBwcmludGYo
IkV3a19UaWxlIE1hdHJpeDpcbiIpOwogI2VuZGlmCiAKLSAgICBFSU5BX0lURVJBVE9SX0ZPUkVB
Q0goaXQsIGNlbGwpIHsKLSAgICAgICAgdW5zaWduZWQgbG9uZyByb3csIGNvbDsKLSAgICAgICAg
ZWluYV9tYXRyaXhzcGFyc2VfY2VsbF9wb3NpdGlvbl9nZXQoY2VsbCwgJnJvdywgJmNvbCk7Cisg
ICAgRUlOQV9JVEVSQVRPUl9GT1JFQUNIKGl0ZXJhdG9yLCBjZWxsKSB7CisgICAgICAgIHVuc2ln
bmVkIGxvbmcgcm93LCBjb2x1bW47CisgICAgICAgIGVpbmFfbWF0cml4c3BhcnNlX2NlbGxfcG9z
aXRpb25fZ2V0KGNlbGwsICZyb3csICZjb2x1bW4pOwogCiAgICAgICAgIEV3a19UaWxlKiB0aWxl
ID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGUqPihlaW5hX21hdHJpeHNwYXJzZV9jZWxsX2RhdGFfZ2V0
KGNlbGwpKTsKICAgICAgICAgaWYgKCF0aWxlKSB7CkBAIC01ODQsMjIgKzU4NCwyMiBAQCB2b2lk
IGV3a190aWxlX21hdHJpeF9kYmcoY29uc3QgRXdrX1RpbGVfTWF0cml4KiB0aWxlTWF0cml4KQog
ICAgICAgICAgICAgICAgIGxhc3RfZW1wdHkgPSBFSU5BX1RSVUU7CiAgICAgICAgICAgICAgICAg
cHJpbnRmKCJFbXB0eToiKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHByaW50ZigiIFsl
bHUsJWx1XSIsIGNvbCwgcm93KTsKKyAgICAgICAgICAgIHByaW50ZigiIFslbHUsJWx1XSIsIGNv
bHVtbiwgcm93KTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmIChsYXN0X2VtcHR5
KSB7CiAgICAgICAgICAgICAgICAgbGFzdF9lbXB0eSA9IEVJTkFfRkFMU0U7CiAgICAgICAgICAg
ICAgICAgcHJpbnRmKCJcbiIpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgcHJpbnRmKCIl
M2x1LCUzbHUgJTEwcDoiLCBjb2wsIHJvdywgdGlsZSk7CisgICAgICAgICAgICBwcmludGYoIiUz
bHUsJTNsdSAlMTBwOiIsIGNvbHVtbiwgcm93LCB0aWxlKTsKICAgICAgICAgICAgIHByaW50Zigi
IFslM2x1LCUzbHUgKyAlZHglZCBAICUwLjNmXSVjIiwgdGlsZS0+Y29sLCB0aWxlLT5yb3csIHRp
bGUtPndpZHRoLCB0aWxlLT5oZWlnaHQsIHRpbGUtPnpvb20sIHRpbGUtPnZpc2libGUgPyAnKicg
OiAnICcpOwogICAgICAgICAgICAgcHJpbnRmKCJcbiIpOwogICAgICAgICB9CiAgICAgfQogICAg
IGlmIChsYXN0X2VtcHR5KQogICAgICAgICBwcmludGYoIlxuIik7Ci0gICAgZWluYV9pdGVyYXRv
cl9mcmVlKGl0KTsKKyAgICBlaW5hX2l0ZXJhdG9yX2ZyZWUoaXRlcmF0b3IpOwogCi0gICAgZXdr
X3RpbGVfdW51c2VkX2NhY2hlX2RiZyh0aWxlTWF0cml4LT50dWMpOworICAgIGV3a190aWxlX3Vu
dXNlZF9jYWNoZV9kYmcodGlsZU1hdHJpeC0+dGlsaWVVbnVzZWRDYWNoZSk7CiB9CiAKIC8qKgpA
QCAtNjE1LDcgKzYxNSw3IEBAIHZvaWQgZXdrX3RpbGVfbWF0cml4X2ZyZWV6ZShFd2tfVGlsZV9N
YXRyaXgqIHRpbGVNYXRyaXgpCiB7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4odGls
ZU1hdHJpeCk7CiAgICAgaWYgKCF0aWxlTWF0cml4LT5mcm96ZW4pCi0gICAgICAgIGV3a190aWxl
X3VudXNlZF9jYWNoZV9mcmVlemUodGlsZU1hdHJpeC0+dHVjKTsKKyAgICAgICAgZXdrX3RpbGVf
dW51c2VkX2NhY2hlX2ZyZWV6ZSh0aWxlTWF0cml4LT50aWxpZVVudXNlZENhY2hlKTsKICAgICB0
aWxlTWF0cml4LT5mcm96ZW4rKzsKIH0KIApAQCAtNjM1LDUgKzYzNSw1IEBAIHZvaWQgZXdrX3Rp
bGVfbWF0cml4X3RoYXcoRXdrX1RpbGVfTWF0cml4KiB0aWxlTWF0cml4KQogCiAgICAgdGlsZU1h
dHJpeC0+ZnJvemVuLS07CiAgICAgaWYgKCF0aWxlTWF0cml4LT5mcm96ZW4pCi0gICAgICAgIGV3
a190aWxlX3VudXNlZF9jYWNoZV90aGF3KHRpbGVNYXRyaXgtPnR1Yyk7CisgICAgICAgIGV3a190
aWxlX3VudXNlZF9jYWNoZV90aGF3KHRpbGVNYXRyaXgtPnRpbGllVW51c2VkQ2FjaGUpOwogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a190aWxlZF9tb2RlbC5jcHAgYi9T
b3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX21vZGVsLmNwcAppbmRleCAyMDliMGMzOWYx
Njc4ZWFiMTM4MjliNjU4YTVjMzdiOWEwNDBhZTNlLi5kZDVmMGQ1YTgwY2E1NDM0NDIwNDJkZGQ5
YTc2YWM2M2MwYTI0NzUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3Rp
bGVkX21vZGVsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3RpbGVkX21vZGVs
LmNwcApAQCAtMTQ5LDU5ICsxNDksNTkgQEAgdm9pZCBld2tfdGlsZV9hY2NvdW50aW5nX2RiZygp
CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfZXdrX3RpbGVfcGFpbnRfcmdiODg4KEV3a19UaWxlKiB0
aWxlLCB1aW50OF90IHJlZCwgdWludDhfdCBncmVlbiwgdWludDhfdCBibHVlKQogewotICAgIHVp
bnQzMl90IGMxID0gMHhmZjAwMDAwMCB8ICgodWludDMyX3QpcmVkIDw8IDE2KSB8ICgodWludDMy
X3QpZ3JlZW4gPDwgOCkgfCBibHVlOwotICAgIHVpbnQzMl90IGMyID0gKCh1aW50NjRfdCljMSA8
PCAzMikgfCBjMTsKKyAgICB1aW50MzJfdCBjb2xvcjEgPSAweGZmMDAwMDAwIHwgKCh1aW50MzJf
dClyZWQgPDwgMTYpIHwgKCh1aW50MzJfdClncmVlbiA8PCA4KSB8IGJsdWU7CisgICAgdWludDMy
X3QgY29sb3IyID0gKCh1aW50NjRfdCljb2xvcjEgPDwgMzIpIHwgY29sb3IxOwogCiAgICAgdWlu
dDY0X3QqIGRzdDY0ID0gKHVpbnQ2NF90Kil0aWxlLT5waXhlbHM7CiAgICAgdWludDY0X3QqIGRz
dDY0X2VuZCA9IGRzdDY0ICsgKCh0aWxlLT5ieXRlcyAvIDgpICYgfjcpOwogICAgIGZvciAoOyBk
c3Q2NCA8IGRzdDY0X2VuZDsgZHN0NjQgKz0gOCkgewogICAgICAgICAvKiBUT0RPOiBBUk0gYWRk
IHBsZCBvciBORU9OIGluc3RydWN0aW9ucyAqLwotICAgICAgICBkc3Q2NFswXSA9IGMyOwotICAg
ICAgICBkc3Q2NFsxXSA9IGMyOwotICAgICAgICBkc3Q2NFsyXSA9IGMyOwotICAgICAgICBkc3Q2
NFszXSA9IGMyOwotICAgICAgICBkc3Q2NFs0XSA9IGMyOwotICAgICAgICBkc3Q2NFs1XSA9IGMy
OwotICAgICAgICBkc3Q2NFs2XSA9IGMyOwotICAgICAgICBkc3Q2NFs3XSA9IGMyOworICAgICAg
ICBkc3Q2NFswXSA9IGNvbG9yMjsKKyAgICAgICAgZHN0NjRbMV0gPSBjb2xvcjI7CisgICAgICAg
IGRzdDY0WzJdID0gY29sb3IyOworICAgICAgICBkc3Q2NFszXSA9IGNvbG9yMjsKKyAgICAgICAg
ZHN0NjRbNF0gPSBjb2xvcjI7CisgICAgICAgIGRzdDY0WzVdID0gY29sb3IyOworICAgICAgICBk
c3Q2NFs2XSA9IGNvbG9yMjsKKyAgICAgICAgZHN0NjRbN10gPSBjb2xvcjI7CiAgICAgfQogCiAg
ICAgdWludDMyX3QqIGRzdDMyID0gKHVpbnQzMl90Kilkc3Q2NF9lbmQ7CiAgICAgdWludDMyX3Qq
IGRzdDMyX2VuZCA9ICh1aW50MzJfdCopKHRpbGUtPnBpeGVscyArIHRpbGUtPmJ5dGVzKTsKICAg
ICBmb3IgKDsgZHN0MzIgPCBkc3QzMl9lbmQ7IGRzdDMyKyspCi0gICAgICAgICpkc3QzMiA9IGMx
OworICAgICAgICAqZHN0MzIgPSBjb2xvcjE7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfZXdr
X3RpbGVfcGFpbnRfcmdiNTY1KEV3a19UaWxlKiB0aWxlLCB1aW50OF90IHJlZCwgdWludDhfdCBn
cmVlbiwgdWludDhfdCBibHVlKQogewotICAgIHVpbnQxNl90KiBkc3QxNiwgKiBkc3QxNl9lbmQs
IGMxOwotICAgIHVpbnQ2NF90KiBkc3Q2NCwgKiBkc3Q2NF9lbmQsIGMyOworICAgIHVpbnQxNl90
KiBkc3QxNiwgKiBkc3QxNl9lbmQsIGNvbG9yMTsKKyAgICB1aW50NjRfdCogZHN0NjQsICogZHN0
NjRfZW5kLCBjb2xvcjI7CiAKLSAgICBjMSA9ICgoKChyZWQgPj4gMykgJiAweDFmKSA8PCAxMSkg
fAorICAgIGNvbG9yMSA9ICgoKChyZWQgPj4gMykgJiAweDFmKSA8PCAxMSkgfAogICAgICAgICAg
ICgoKGdyZWVuID4+IDIpICYgMHgzZikgPDwgNSkgfAogICAgICAgICAgICgoYmx1ZSA+PiAzKSAm
IDB4MWYpKTsKIAotICAgIGMyID0gKCgodWludDY0X3QpYzEgPDwgNDgpIHwgKCh1aW50NjRfdClj
MSA8PCAzMikgfAotICAgICAgICAgICgodWludDY0X3QpYzEgPDwgMTYpIHwgYzEpOworICAgIGNv
bG9yMiA9ICgoKHVpbnQ2NF90KWNvbG9yMSA8PCA0OCkgfCAoKHVpbnQ2NF90KWNvbG9yMSA8PCAz
MikgfAorICAgICAgICAgICgodWludDY0X3QpY29sb3IxIDw8IDE2KSB8IGNvbG9yMSk7CiAKICAg
ICBkc3Q2NCA9ICh1aW50NjRfdCopdGlsZS0+cGl4ZWxzOwogICAgIGRzdDY0X2VuZCA9IGRzdDY0
ICsgKCh0aWxlLT5ieXRlcyAvIDgpICYgfjcpOwogICAgIGZvciAoOyBkc3Q2NCA8IGRzdDY0X2Vu
ZDsgZHN0NjQgKz0gOCkgewogICAgICAgICAvKiBUT0RPOiBBUk0gYWRkIHBsZCBvciBORU9OIGlu
c3RydWN0aW9ucyAqLwotICAgICAgICBkc3Q2NFswXSA9IGMyOwotICAgICAgICBkc3Q2NFsxXSA9
IGMyOwotICAgICAgICBkc3Q2NFsyXSA9IGMyOwotICAgICAgICBkc3Q2NFszXSA9IGMyOwotICAg
ICAgICBkc3Q2NFs0XSA9IGMyOwotICAgICAgICBkc3Q2NFs1XSA9IGMyOwotICAgICAgICBkc3Q2
NFs2XSA9IGMyOwotICAgICAgICBkc3Q2NFs3XSA9IGMyOworICAgICAgICBkc3Q2NFswXSA9IGNv
bG9yMjsKKyAgICAgICAgZHN0NjRbMV0gPSBjb2xvcjI7CisgICAgICAgIGRzdDY0WzJdID0gY29s
b3IyOworICAgICAgICBkc3Q2NFszXSA9IGNvbG9yMjsKKyAgICAgICAgZHN0NjRbNF0gPSBjb2xv
cjI7CisgICAgICAgIGRzdDY0WzVdID0gY29sb3IyOworICAgICAgICBkc3Q2NFs2XSA9IGNvbG9y
MjsKKyAgICAgICAgZHN0NjRbN10gPSBjb2xvcjI7CiAgICAgfQogCiAgICAgZHN0MTYgPSAodWlu
dDE2X3QqKWRzdDE2X2VuZDsKICAgICBkc3QxNl9lbmQgPSAodWludDE2X3QqKSh0aWxlLT5waXhl
bHMgKyB0aWxlLT5ieXRlcyk7CiAgICAgZm9yICg7IGRzdDE2IDwgZHN0MTZfZW5kOyBkc3QxNisr
KQotICAgICAgICAqZHN0MTYgPSBjMTsKKyAgICAgICAgKmRzdDE2ID0gY29sb3IxOwogfQogCiBz
dGF0aWMgaW5saW5lIHZvaWQgX2V3a190aWxlX3BhaW50KEV3a19UaWxlKiB0aWxlLCB1aW50OF90
IHJlZCwgdWludDhfdCBncmVlbiwgdWludDhfdCBibHVlKQpAQCAtMjMxLDE3ICsyMzEsMTcgQEAg
c3RhdGljIGlubGluZSB2b2lkIF9ld2tfdGlsZV9wYWludChFd2tfVGlsZSogdGlsZSwgdWludDhf
dCByZWQsIHVpbnQ4X3QgZ3JlZW4sIHUKICAqLwogRXdrX1RpbGUqIGV3a190aWxlX25ldyhFdmFz
KiBldmFzLCBFdmFzX0Nvb3JkIHdpZHRoLCBFdmFzX0Nvb3JkIGhlaWdodCwgZmxvYXQgem9vbSwg
RXZhc19Db2xvcnNwYWNlIGNvbG9yU3BhY2UpCiB7Ci0gICAgRXZhc19Db29yZCogZWM7Ci0gICAg
RXZhc19Db2xvcnNwYWNlKiBlY3M7Ci0gICAgZmxvYXQqIGY7Ci0gICAgc2l6ZV90KiBzOworICAg
IEV2YXNfQ29vcmQqIGV2YXNDb29yZDsKKyAgICBFdmFzX0NvbG9yc3BhY2UqIGV2YXNDb2xvclNw
YWNlOworICAgIGZsb2F0KiB0aWxlWm9vbTsKKyAgICBzaXplX3QqIHRpbGVTaXplOwogICAgIEV3
a19UaWxlKiB0aWxlOwogICAgIHVuc2lnbmVkIGludCBhcmVhOwogICAgIHNpemVfdCBieXRlczsK
ICAgICBjYWlyb19mb3JtYXRfdCBmb3JtYXQ7CiAgICAgY2Fpcm9fc3RhdHVzX3Qgc3RhdHVzOwog
ICAgIGludCBzdHJpZGU7Ci0gICAgRWNvcmVfRXZhcyogZWU7CisgICAgRWNvcmVfRXZhcyogZWNv
cmVFdmFzOwogICAgIGNvbnN0IGNoYXIqIGVuZ2luZTsKIAogICAgIGFyZWEgPSB3aWR0aCAqIGhl
aWdodDsKQEAgLTI2Nyw4ICsyNjcsOCBAQCBFd2tfVGlsZSogZXdrX3RpbGVfbmV3KEV2YXMqIGV2
YXMsIEV2YXNfQ29vcmQgd2lkdGgsIEV2YXNfQ29vcmQgaGVpZ2h0LCBmbG9hdCB6bwogCiAgICAg
dGlsZS0+aW1hZ2UgPSBldmFzX29iamVjdF9pbWFnZV9hZGQoZXZhcyk7CiAKLSAgICBlZSA9IGVj
b3JlX2V2YXNfZWNvcmVfZXZhc19nZXQoZXZhcyk7Ci0gICAgZW5naW5lID0gZWNvcmVfZXZhc19l
bmdpbmVfbmFtZV9nZXQoZWUpOworICAgIGVjb3JlRXZhcyA9IGVjb3JlX2V2YXNfZWNvcmVfZXZh
c19nZXQoZXZhcyk7CisgICAgZW5naW5lID0gZWNvcmVfZXZhc19lbmdpbmVfbmFtZV9nZXQoZWNv
cmVFdmFzKTsKICAgICBpZiAoZW5naW5lICYmICFzdHJjbXAoZW5naW5lLCAib3BlbmdsX3gxMSIp
KQogICAgICAgICBldmFzX29iamVjdF9pbWFnZV9jb250ZW50X2hpbnRfc2V0KHRpbGUtPmltYWdl
LCBFVkFTX0lNQUdFX0NPTlRFTlRfSElOVF9EWU5BTUlDKTsKIApAQCAtMjc5LDIwICsyNzksMjAg
QEAgRXdrX1RpbGUqIGV3a190aWxlX25ldyhFdmFzKiBldmFzLCBFdmFzX0Nvb3JkIHdpZHRoLCBF
dmFzX0Nvb3JkIGhlaWdodCwgZmxvYXQgem8KICAgICB0aWxlLT5zdGF0cy5hcmVhID0gYXJlYTsK
IAogICAgIC8qIHVnbHksIGJ1dCBsZXQncyBhdm9pZCBhdCBhbGwgY29zdHMgaGF2aW5nIHVzZXJz
IHRvIG1vZGlmeSB0aG9zZSAqLwotICAgIGVjID0gKEV2YXNfQ29vcmQqKSZ0aWxlLT53aWR0aDsK
LSAgICAqZWMgPSB3aWR0aDsKKyAgICBldmFzQ29vcmQgPSAoRXZhc19Db29yZCopJnRpbGUtPndp
ZHRoOworICAgICpldmFzQ29vcmQgPSB3aWR0aDsKIAotICAgIGVjID0gKEV2YXNfQ29vcmQqKSZ0
aWxlLT5oZWlnaHQ7Ci0gICAgKmVjID0gaGVpZ2h0OworICAgIGV2YXNDb29yZCA9IChFdmFzX0Nv
b3JkKikmdGlsZS0+aGVpZ2h0OworICAgICpldmFzQ29vcmQgPSBoZWlnaHQ7CiAKLSAgICBlY3Mg
PSAoRXZhc19Db2xvcnNwYWNlKikmdGlsZS0+Y3NwYWNlOwotICAgICplY3MgPSBjb2xvclNwYWNl
OworICAgIGV2YXNDb2xvclNwYWNlID0gKEV2YXNfQ29sb3JzcGFjZSopJnRpbGUtPmNzcGFjZTsK
KyAgICAqZXZhc0NvbG9yU3BhY2UgPSBjb2xvclNwYWNlOwogCi0gICAgZiA9IChmbG9hdCopJnRp
bGUtPnpvb207Ci0gICAgKmYgPSB6b29tOworICAgIHRpbGVab29tID0gKGZsb2F0KikmdGlsZS0+
em9vbTsKKyAgICAqdGlsZVpvb20gPSB6b29tOwogCi0gICAgcyA9IChzaXplX3QqKSZ0aWxlLT5i
eXRlczsKLSAgICAqcyA9IGJ5dGVzOworICAgIHRpbGVTaXplID0gKHNpemVfdCopJnRpbGUtPmJ5
dGVzOworICAgICp0aWxlU2l6ZSA9IGJ5dGVzOwogCiAgICAgZXZhc19vYmplY3RfaW1hZ2Vfc2l6
ZV9zZXQodGlsZS0+aW1hZ2UsIHRpbGUtPndpZHRoLCB0aWxlLT5oZWlnaHQpOwogICAgIGV2YXNf
b2JqZWN0X2ltYWdlX2NvbG9yc3BhY2Vfc2V0KHRpbGUtPmltYWdlLCB0aWxlLT5jc3BhY2UpOwpA
QCAtNDgwLDcgKzQ4MCw3IEBAIHN0cnVjdCBfRXdrX1RpbGVfVW51c2VkX0NhY2hlX0VudHJ5IHsK
ICAgICBFd2tfVGlsZSogdGlsZTsKICAgICBpbnQgd2VpZ2h0OwogICAgIHN0cnVjdCB7Ci0gICAg
ICAgIHZvaWQgKCpjYikodm9pZCogZGF0YSwgRXdrX1RpbGUqIHRpbGUpOworICAgICAgICB2b2lk
ICgqY2FsbGJhY2spKHZvaWQqIGRhdGEsIEV3a19UaWxlKiB0aWxlKTsKICAgICAgICAgdm9pZCog
ZGF0YTsKICAgICB9IHRpbGVfZnJlZTsKIH07CkBAIC00OTYsNyArNDk2LDcgQEAgc3RydWN0IF9F
d2tfVGlsZV9VbnVzZWRfQ2FjaGUgewogICAgICAgICBzaXplX3QgdXNlZDsgLyoqPCBpbiBieXRl
cywgbWF5YmUgbW9yZSB0aGFuIG1heC4gKi8KICAgICB9IG1lbW9yeTsKICAgICBzdHJ1Y3Qgewot
ICAgICAgICBFdmFzX0Nvb3JkIHgsIHksIHcsIGg7CisgICAgICAgIEV2YXNfQ29vcmQgeCwgeSwg
d2lkdGgsIGhlaWdodDsKICAgICAgICAgZmxvYXQgem9vbTsKICAgICAgICAgRWluYV9Cb29sIGxv
Y2tlZDsKICAgICB9IGxvY2tlZDsKQEAgLTU0MCw4ICs1NDAsOCBAQCB2b2lkIGV3a190aWxlX3Vu
dXNlZF9jYWNoZV9sb2NrX2FyZWEoRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0aWxlVW51c2VkQ2Fj
aGUsIEV2YQogICAgIHRpbGVVbnVzZWRDYWNoZS0+bG9ja2VkLmxvY2tlZCA9IEVJTkFfVFJVRTsK
ICAgICB0aWxlVW51c2VkQ2FjaGUtPmxvY2tlZC54ID0geDsKICAgICB0aWxlVW51c2VkQ2FjaGUt
PmxvY2tlZC55ID0geTsKLSAgICB0aWxlVW51c2VkQ2FjaGUtPmxvY2tlZC53ID0gd2lkdGg7Ci0g
ICAgdGlsZVVudXNlZENhY2hlLT5sb2NrZWQuaCA9IGhlaWdodDsKKyAgICB0aWxlVW51c2VkQ2Fj
aGUtPmxvY2tlZC53aWR0aCA9IHdpZHRoOworICAgIHRpbGVVbnVzZWRDYWNoZS0+bG9ja2VkLmhl
aWdodCA9IGhlaWdodDsKICAgICB0aWxlVW51c2VkQ2FjaGUtPmxvY2tlZC56b29tID0gem9vbTsK
IH0KIApAQCAtNTk0LDcgKzU5NCw3IEBAIHZvaWQgZXdrX3RpbGVfdW51c2VkX2NhY2hlX2NsZWFy
KEV3a19UaWxlX1VudXNlZF9DYWNoZSogdGlsZVVudXNlZENhY2hlKQogICAgIHZvaWQqIGl0ZW07
CiAgICAgRUlOQV9MSVNUX0ZSRUUodGlsZVVudXNlZENhY2hlLT5lbnRyaWVzLmxpc3QsIGl0ZW0p
IHsKICAgICAgICAgRXdrX1RpbGVfVW51c2VkX0NhY2hlX0VudHJ5KiBpdHIgPSBzdGF0aWNfY2Fz
dDxFd2tfVGlsZV9VbnVzZWRfQ2FjaGVfRW50cnkqPihpdGVtKTsKLSAgICAgICAgaXRyLT50aWxl
X2ZyZWUuY2IoaXRyLT50aWxlX2ZyZWUuZGF0YSwgaXRyLT50aWxlKTsKKyAgICAgICAgaXRyLT50
aWxlX2ZyZWUuY2FsbGJhY2soaXRyLT50aWxlX2ZyZWUuZGF0YSwgaXRyLT50aWxlKTsKICAgICAg
ICAgZnJlZShpdHIpOwogICAgIH0KIApAQCAtNjUwLDcgKzY1MCw3IEBAIHNpemVfdCBld2tfdGls
ZV91bnVzZWRfY2FjaGVfdXNlZF9nZXQoY29uc3QgRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0aWxl
VW51c2VkQ2FjCiAKIHNpemVfdCBld2tfdGlsZV91bnVzZWRfY2FjaGVfZmx1c2goRXdrX1RpbGVf
VW51c2VkX0NhY2hlKiB0aWxlVW51c2VkQ2FjaGUsIHNpemVfdCBieXRlcykKIHsKLSAgICBFaW5h
X0xpc3QqIGwsICogbF9uZXh0OworICAgIEVpbmFfTGlzdCogbGlzdCwgKiBsaXN0TmV4dDsKICAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwodGlsZVVudXNlZENhY2hlLCAwKTsKICAg
ICBzaXplX3QgZG9uZTsKICAgICB1bnNpZ25lZCBpbnQgY291bnQ7CkBAIC02NjgsNyArNjY4LDcg
QEAgc2l6ZV90IGV3a190aWxlX3VudXNlZF9jYWNoZV9mbHVzaChFd2tfVGlsZV9VbnVzZWRfQ2Fj
aGUqIHRpbGVVbnVzZWRDYWNoZSwgc2l6ZV8KICAgICB2b2lkKiBpdGVtOwogICAgIGRvbmUgPSAw
OwogICAgIGNvdW50ID0gMDsKLSAgICBFSU5BX0xJU1RfRk9SRUFDSF9TQUZFKHRpbGVVbnVzZWRD
YWNoZS0+ZW50cmllcy5saXN0LCBsLCBsX25leHQsIGl0ZW0pIHsKKyAgICBFSU5BX0xJU1RfRk9S
RUFDSF9TQUZFKHRpbGVVbnVzZWRDYWNoZS0+ZW50cmllcy5saXN0LCBsaXN0LCBsaXN0TmV4dCwg
aXRlbSkgewogICAgICAgICBFd2tfVGlsZV9VbnVzZWRfQ2FjaGVfRW50cnkqIGl0ciA9IHN0YXRp
Y19jYXN0PEV3a19UaWxlX1VudXNlZF9DYWNoZV9FbnRyeSo+KGl0ZW0pOwogICAgICAgICBFd2tf
VGlsZSogdGlsZSA9IGl0ci0+dGlsZTsKICAgICAgICAgaWYgKGRvbmUgPiBieXRlcykKQEAgLTY3
NiwxNCArNjc2LDE0IEBAIHNpemVfdCBld2tfdGlsZV91bnVzZWRfY2FjaGVfZmx1c2goRXdrX1Rp
bGVfVW51c2VkX0NhY2hlKiB0aWxlVW51c2VkQ2FjaGUsIHNpemVfCiAgICAgICAgIGlmICh0aWxl
VW51c2VkQ2FjaGUtPmxvY2tlZC5sb2NrZWQKICAgICAgICAgICAgICYmIHRpbGUtPnggKyB0aWxl
LT53aWR0aCA+IHRpbGVVbnVzZWRDYWNoZS0+bG9ja2VkLngKICAgICAgICAgICAgICYmIHRpbGUt
PnkgKyB0aWxlLT5oZWlnaHQgPiB0aWxlVW51c2VkQ2FjaGUtPmxvY2tlZC55Ci0gICAgICAgICAg
ICAmJiB0aWxlLT54IDwgdGlsZVVudXNlZENhY2hlLT5sb2NrZWQueCArIHRpbGVVbnVzZWRDYWNo
ZS0+bG9ja2VkLncKLSAgICAgICAgICAgICYmIHRpbGUtPnkgPCB0aWxlVW51c2VkQ2FjaGUtPmxv
Y2tlZC55ICsgdGlsZVVudXNlZENhY2hlLT5sb2NrZWQuaAorICAgICAgICAgICAgJiYgdGlsZS0+
eCA8IHRpbGVVbnVzZWRDYWNoZS0+bG9ja2VkLnggKyB0aWxlVW51c2VkQ2FjaGUtPmxvY2tlZC53
aWR0aAorICAgICAgICAgICAgJiYgdGlsZS0+eSA8IHRpbGVVbnVzZWRDYWNoZS0+bG9ja2VkLnkg
KyB0aWxlVW51c2VkQ2FjaGUtPmxvY2tlZC5oZWlnaHQKICAgICAgICAgICAgICYmIHRpbGUtPnpv
b20gPT0gdGlsZVVudXNlZENhY2hlLT5sb2NrZWQuem9vbSkgewogICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgIH0KICAgICAgICAgZG9uZSArPSBzaXplb2YoRXdrX1RpbGUpICsgaXRyLT50
aWxlLT5ieXRlczsKLSAgICAgICAgaXRyLT50aWxlX2ZyZWUuY2IoaXRyLT50aWxlX2ZyZWUuZGF0
YSwgaXRyLT50aWxlKTsKLSAgICAgICAgdGlsZVVudXNlZENhY2hlLT5lbnRyaWVzLmxpc3QgPSBl
aW5hX2xpc3RfcmVtb3ZlX2xpc3QodGlsZVVudXNlZENhY2hlLT5lbnRyaWVzLmxpc3QsIGwpOwor
ICAgICAgICBpdHItPnRpbGVfZnJlZS5jYWxsYmFjayhpdHItPnRpbGVfZnJlZS5kYXRhLCBpdHIt
PnRpbGUpOworICAgICAgICB0aWxlVW51c2VkQ2FjaGUtPmVudHJpZXMubGlzdCA9IGVpbmFfbGlz
dF9yZW1vdmVfbGlzdCh0aWxlVW51c2VkQ2FjaGUtPmVudHJpZXMubGlzdCwgbGlzdCk7CiAgICAg
ICAgIGZyZWUoaXRyKTsKICAgICAgICAgY291bnQrKzsKICAgICB9CkBAIC03NDMsMzEgKzc0Mywz
MSBAQCB2b2lkIGV3a190aWxlX3VudXNlZF9jYWNoZV90aGF3KEV3a19UaWxlX1VudXNlZF9DYWNo
ZSogdGlsZVVudXNlZENhY2hlKQogICogZXdrX3RpbGVfdW51c2VkX2NhY2hlX3RpbGVfcHV0KCku
CiAgKgogICogQHBhcmFtIHRpbGVVbnVzZWRDYWNoZSBjYWNoZSBvZiB1bnVzZWQgdGlsZXMKLSAq
IEBwYXJhbSB0IHRoZSB0aWxlIHRvIGJlIHJlbW92ZWQgZnJvbSBFd2tfVGlsZV9VbnVzZWRfQ2Fj
aGUuCisgKiBAcGFyYW0gdGlsZSB0aGUgdGlsZSB0byBiZSByZW1vdmVkIGZyb20gRXdrX1RpbGVf
VW51c2VkX0NhY2hlLgogICoKICAqIEByZXR1cm4gI0VJTkFfVFJVRSBvbiBzdWNjZXNzLCAjRUlO
QV9GQUxTRSBvdGhlcndpc2UuCiAgKi8KIEVpbmFfQm9vbCBld2tfdGlsZV91bnVzZWRfY2FjaGVf
dGlsZV9nZXQoRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0aWxlVW51c2VkQ2FjaGUsIEV3a19UaWxl
KiB0aWxlKQogewotICAgIEVpbmFfTGlzdCogZSwgKiBsOworICAgIEVpbmFfTGlzdCogZm91bmRF
bnRyeSwgKml0ZXJhdGVFbnRyeTsKIAogICAgIHZvaWQqIGl0ZW07Ci0gICAgZSA9IDA7Ci0gICAg
RUlOQV9MSVNUX0ZPUkVBQ0godGlsZVVudXNlZENhY2hlLT5lbnRyaWVzLmxpc3QsIGwsIGl0ZW0p
IHsKKyAgICBmb3VuZEVudHJ5ID0gMDsKKyAgICBFSU5BX0xJU1RfRk9SRUFDSCh0aWxlVW51c2Vk
Q2FjaGUtPmVudHJpZXMubGlzdCwgaXRlcmF0ZUVudHJ5LCBpdGVtKSB7CiAgICAgICAgIEV3a19U
aWxlX1VudXNlZF9DYWNoZV9FbnRyeSogZW50cnkgPSBzdGF0aWNfY2FzdDxFd2tfVGlsZV9VbnVz
ZWRfQ2FjaGVfRW50cnkqPihpdGVtKTsKICAgICAgICAgaWYgKGVudHJ5LT50aWxlID09IHRpbGUp
IHsKLSAgICAgICAgICAgIGUgPSBsOworICAgICAgICAgICAgZm91bmRFbnRyeSA9IGl0ZXJhdGVF
bnRyeTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQotICAgIGlmICghZSkg
eworICAgIGlmICghZm91bmRFbnRyeSkgewogICAgICAgICBFUlIoInRpbGUgJXAgbm90IGZvdW5k
IGluIGNhY2hlICVwIiwgdGlsZSwgdGlsZVVudXNlZENhY2hlKTsKICAgICAgICAgcmV0dXJuIEVJ
TkFfRkFMU0U7CiAgICAgfQogCiAgICAgdGlsZVVudXNlZENhY2hlLT5lbnRyaWVzLmNvdW50LS07
CiAgICAgdGlsZVVudXNlZENhY2hlLT5tZW1vcnkudXNlZCAtPSBzaXplb2YoRXdrX1RpbGUpICsg
dGlsZS0+Ynl0ZXM7Ci0gICAgdGlsZVVudXNlZENhY2hlLT5lbnRyaWVzLmxpc3QgPSBlaW5hX2xp
c3RfcmVtb3ZlX2xpc3QodGlsZVVudXNlZENhY2hlLT5lbnRyaWVzLmxpc3QsIGUpOworICAgIHRp
bGVVbnVzZWRDYWNoZS0+ZW50cmllcy5saXN0ID0gZWluYV9saXN0X3JlbW92ZV9saXN0KHRpbGVV
bnVzZWRDYWNoZS0+ZW50cmllcy5saXN0LCBmb3VuZEVudHJ5KTsKICAgICBmcmVlKGl0ZW0pOwog
CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKQEAgLTc5NSwyOSArNzk1LDI5IEBAIEVpbmFfQm9vbCBl
d2tfdGlsZV91bnVzZWRfY2FjaGVfdGlsZV9nZXQoRXdrX1RpbGVfVW51c2VkX0NhY2hlKiB0aWxl
VW51c2VkQ2FjaGUsCiAgKgogICogQHNlZSBld2tfdGlsZV91bnVzZWRfY2FjaGVfYXV0b19mbHVz
aCgpCiAgKi8KLUVpbmFfQm9vbCBld2tfdGlsZV91bnVzZWRfY2FjaGVfdGlsZV9wdXQoRXdrX1Rp
bGVfVW51c2VkX0NhY2hlKiB0aWxlVW51c2VkQ2FjaGUsIEV3a19UaWxlKiB0aWxlLCB2b2lkICgq
IHRpbGVfZnJlZV9jYikodm9pZCogZGF0YSwgRXdrX1RpbGUqIHRpbGUpLCBjb25zdCB2b2lkKiBk
YXRhKQorRWluYV9Cb29sIGV3a190aWxlX3VudXNlZF9jYWNoZV90aWxlX3B1dChFd2tfVGlsZV9V
bnVzZWRfQ2FjaGUqIHRpbGVVbnVzZWRDYWNoZSwgRXdrX1RpbGUqIHRpbGUsIHZvaWQgKCogdGls
ZUZyZWVDYikodm9pZCogZGF0YSwgRXdrX1RpbGUqIHRpbGUpLCBjb25zdCB2b2lkKiBkYXRhKQog
ewotICAgIEV3a19UaWxlX1VudXNlZF9DYWNoZV9FbnRyeSogdWNlOworICAgIEV3a19UaWxlX1Vu
dXNlZF9DYWNoZV9FbnRyeSogdW51c2VkQ2FjaGVFbnRyeTsKIAogICAgIGlmICh0aWxlLT52aXNp
YmxlKSB7CiAgICAgICAgIEVSUigidGlsZT0lcCBpcyBub3QgdW51c2VkICh2aXNpYmxlPSVkKSIs
IHRpbGUsIHRpbGUtPnZpc2libGUpOwogICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKICAgICB9
CiAKLSAgICB1Y2UgPSBzdGF0aWNfY2FzdDxFd2tfVGlsZV9VbnVzZWRfQ2FjaGVfRW50cnkqPiht
YWxsb2Moc2l6ZW9mKEV3a19UaWxlX1VudXNlZF9DYWNoZV9FbnRyeSkpKTsKLSAgICBpZiAoIXVj
ZSkKKyAgICB1bnVzZWRDYWNoZUVudHJ5ID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGVfVW51c2VkX0Nh
Y2hlX0VudHJ5Kj4obWFsbG9jKHNpemVvZihFd2tfVGlsZV9VbnVzZWRfQ2FjaGVfRW50cnkpKSk7
CisgICAgaWYgKCF1bnVzZWRDYWNoZUVudHJ5KQogICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsK
IAotICAgIHRpbGVVbnVzZWRDYWNoZS0+ZW50cmllcy5saXN0ID0gZWluYV9saXN0X2FwcGVuZCh0
aWxlVW51c2VkQ2FjaGUtPmVudHJpZXMubGlzdCwgdWNlKTsKKyAgICB0aWxlVW51c2VkQ2FjaGUt
PmVudHJpZXMubGlzdCA9IGVpbmFfbGlzdF9hcHBlbmQodGlsZVVudXNlZENhY2hlLT5lbnRyaWVz
Lmxpc3QsIHVudXNlZENhY2hlRW50cnkpOwogICAgIGlmIChlaW5hX2Vycm9yX2dldCgpKSB7CiAg
ICAgICAgIEVSUigiTGlzdCBhbGxvY2F0aW9uIGZhaWxlZCIpOwogICAgICAgICByZXR1cm4gRUlO
QV9GQUxTRTsKICAgICB9CiAKLSAgICB1Y2UtPnRpbGUgPSB0aWxlOwotICAgIHVjZS0+d2VpZ2h0
ID0gMDsgLyogY2FsY3VsYXRlZCBqdXN0IGJlZm9yZSBzb3J0ICovCi0gICAgdWNlLT50aWxlX2Zy
ZWUuY2IgPSB0aWxlX2ZyZWVfY2I7Ci0gICAgdWNlLT50aWxlX2ZyZWUuZGF0YSA9ICh2b2lkKilk
YXRhOworICAgIHVudXNlZENhY2hlRW50cnktPnRpbGUgPSB0aWxlOworICAgIHVudXNlZENhY2hl
RW50cnktPndlaWdodCA9IDA7IC8qIGNhbGN1bGF0ZWQganVzdCBiZWZvcmUgc29ydCAqLworICAg
IHVudXNlZENhY2hlRW50cnktPnRpbGVfZnJlZS5jYWxsYmFjayA9IHRpbGVGcmVlQ2I7CisgICAg
dW51c2VkQ2FjaGVFbnRyeS0+dGlsZV9mcmVlLmRhdGEgPSAodm9pZCopZGF0YTsKIAogICAgIHRp
bGVVbnVzZWRDYWNoZS0+ZW50cmllcy5jb3VudCsrOwogICAgIHRpbGVVbnVzZWRDYWNoZS0+bWVt
b3J5LnVzZWQgKz0gc2l6ZW9mKEV3a19UaWxlKSArIHRpbGUtPmJ5dGVzOwpAQCAtODI4LDEzICs4
MjgsMTMgQEAgRWluYV9Cb29sIGV3a190aWxlX3VudXNlZF9jYWNoZV90aWxlX3B1dChFd2tfVGls
ZV9VbnVzZWRfQ2FjaGUqIHRpbGVVbnVzZWRDYWNoZSwKIHZvaWQgZXdrX3RpbGVfdW51c2VkX2Nh
Y2hlX2RiZyhjb25zdCBFd2tfVGlsZV9VbnVzZWRfQ2FjaGUqIHRpbGVVbnVzZWRDYWNoZSkKIHsK
ICAgICB2b2lkKiBpdGVtOwotICAgIEVpbmFfTGlzdCogbDsKKyAgICBFaW5hX0xpc3QqIGxpc3Q7
CiAgICAgaW50IGNvdW50ID0gMDsKICAgICBwcmludGYoIkNhY2hlIG9mIHVudXNlZCB0aWxlczog
ZW50cmllczogJXp1LyV6dSwgbWVtb3J5OiAlenUvJXp1XG4iLAogICAgICAgICAgICB0aWxlVW51
c2VkQ2FjaGUtPmVudHJpZXMuY291bnQsIHRpbGVVbnVzZWRDYWNoZS0+ZW50cmllcy5hbGxvY2F0
ZWQsCiAgICAgICAgICAgIHRpbGVVbnVzZWRDYWNoZS0+bWVtb3J5LnVzZWQsIHRpbGVVbnVzZWRD
YWNoZS0+bWVtb3J5Lm1heCk7CiAKLSAgICBFSU5BX0xJU1RfRk9SRUFDSCh0aWxlVW51c2VkQ2Fj
aGUtPmVudHJpZXMubGlzdCwgbCwgaXRlbSkgeworICAgIEVJTkFfTElTVF9GT1JFQUNIKHRpbGVV
bnVzZWRDYWNoZS0+ZW50cmllcy5saXN0LCBsaXN0LCBpdGVtKSB7CiAgICAgICAgIGNvbnN0IEV3
a19UaWxlKiB0aWxlID0gc3RhdGljX2Nhc3Q8RXdrX1RpbGVfVW51c2VkX0NhY2hlX0VudHJ5Kj4o
aXRlbSktPnRpbGU7CiAgICAgICAgIHByaW50ZigiIFslM2x1LCUzbHUgKyAlZHglZCBAICUwLjNm
XSVjIiwKICAgICAgICAgICAgICAgIHRpbGUtPmNvbCwgdGlsZS0+cm93LCB0aWxlLT53aWR0aCwg
dGlsZS0+aGVpZ2h0LCB0aWxlLT56b29tLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9lZmwv
ZXdrL2V3a192aWV3LmNwcCBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5jcHAKaW5k
ZXggNjQzNmNkYmRjNjUwNGFjMTVkYjMwZDFlYjE2NmU4ZTQ1ODNlMDBjMS4uYjgxOWQ1Y2FmMWRj
ZDliMGIzY2Y5MTE4NTNlYWVmOWNhMTdlMTI2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9l
ZmwvZXdrL2V3a192aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXcu
Y3BwCkBAIC05MCwxNyArOTAsMTcgQEAgc3RhdGljIGNvbnN0IHNpemVfdCBFV0tfVklFV19TQ1JP
TExTX1NJWkVfTUFYX0ZSRUUgPSAzMjsKICAqLwogc3RydWN0IF9Fd2tfVmlld19Qcml2YXRlX0Rh
dGEgewogICAgIFdlYkNvcmU6OlBhZ2UqIHBhZ2U7Ci0gICAgV2ViQ29yZTo6U2V0dGluZ3MqIHBh
Z2Vfc2V0dGluZ3M7Ci0gICAgV2ViQ29yZTo6RnJhbWUqIG1haW5fZnJhbWU7Ci0gICAgV2ViQ29y
ZTo6Vmlld3BvcnRBcmd1bWVudHMgdmlld3BvcnRfYXJndW1lbnRzOworICAgIFdlYkNvcmU6OlNl
dHRpbmdzKiBwYWdlU2V0dGluZ3M7CisgICAgV2ViQ29yZTo6RnJhbWUqIG1haW5GcmFtZTsKKyAg
ICBXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50cyB2aWV3cG9ydEFyZ3VtZW50czsKICAgICBFd2tf
SGlzdG9yeSogaGlzdG9yeTsKICAgICBzdHJ1Y3QgewogICAgICAgICB2b2lkKiBjb250ZXh0Owog
ICAgICAgICBFd2tfVmlld19SZXNvdXJjZV9IYW5kbGVyX0NiIGZ1bmN0aW9uOwotICAgIH0gY3Vz
dG9tX3Jlc291cmNlX2hhbmRsZXI7CisgICAgfSBjdXN0b21SZXNvdXJjZUhhbmRsZXI7CiAgICAg
c3RydWN0IHsKICAgICAgICAgRXdrX01lbnUgbWVudTsKLSAgICAgICAgV2ViQ29yZTo6UG9wdXBN
ZW51Q2xpZW50KiBtZW51X2NsaWVudDsKKyAgICAgICAgV2ViQ29yZTo6UG9wdXBNZW51Q2xpZW50
KiBtZW51Q2xpZW50OwogICAgIH0gcG9wdXA7CiAgICAgc3RydWN0IHsKICAgICAgICAgRWluYV9S
ZWN0YW5nbGUqIGFycmF5OwpAQCAtMTE0LDUwICsxMTQsNTAgQEAgc3RydWN0IF9Fd2tfVmlld19Q
cml2YXRlX0RhdGEgewogICAgIH0gc2Nyb2xsczsKICAgICB1bnNpZ25lZCBpbnQgaW1oOyAvKio8
IGlucHV0IG1ldGhvZCBoaW50cyAqLwogICAgIHN0cnVjdCB7Ci0gICAgICAgIEVpbmFfQm9vbCB2
aWV3X2NsZWFyZWQgOiAxOwotICAgICAgICBFaW5hX0Jvb2wgbmVlZF90b3VjaF9ldmVudHMgOiAx
OworICAgICAgICBFaW5hX0Jvb2wgdmlld0NsZWFyZWQgOiAxOworICAgICAgICBFaW5hX0Jvb2wg
bmVlZFRvdWNoRXZlbnRzIDogMTsKICAgICB9IGZsYWdzOwogICAgIHN0cnVjdCB7Ci0gICAgICAg
IGNvbnN0IGNoYXIqIHVzZXJfYWdlbnQ7Ci0gICAgICAgIGNvbnN0IGNoYXIqIHVzZXJfc3R5bGVz
aGVldDsKLSAgICAgICAgY29uc3QgY2hhciogZW5jb2RpbmdfZGVmYXVsdDsKLSAgICAgICAgY29u
c3QgY2hhciogZW5jb2RpbmdfY3VzdG9tOworICAgICAgICBjb25zdCBjaGFyKiB1c2VyQWdlbnQ7
CisgICAgICAgIGNvbnN0IGNoYXIqIHVzZXJTdHlsZXNoZWV0OworICAgICAgICBjb25zdCBjaGFy
KiBlbmNvZGluZ0RlZmF1bHQ7CisgICAgICAgIGNvbnN0IGNoYXIqIGVuY29kaW5nQ3VzdG9tOwog
ICAgICAgICBjb25zdCBjaGFyKiB0aGVtZTsKLSAgICAgICAgY29uc3QgY2hhciogbG9jYWxfc3Rv
cmFnZV9kYXRhYmFzZV9wYXRoOwotICAgICAgICBpbnQgZm9udF9taW5pbXVtX3NpemU7Ci0gICAg
ICAgIGludCBmb250X21pbmltdW1fbG9naWNhbF9zaXplOwotICAgICAgICBpbnQgZm9udF9kZWZh
dWx0X3NpemU7Ci0gICAgICAgIGludCBmb250X21vbm9zcGFjZV9zaXplOwotICAgICAgICBjb25z
dCBjaGFyKiBmb250X3N0YW5kYXJkOwotICAgICAgICBjb25zdCBjaGFyKiBmb250X2N1cnNpdmU7
Ci0gICAgICAgIGNvbnN0IGNoYXIqIGZvbnRfbW9ub3NwYWNlOwotICAgICAgICBjb25zdCBjaGFy
KiBmb250X2ZhbnRhc3k7Ci0gICAgICAgIGNvbnN0IGNoYXIqIGZvbnRfc2VyaWY7Ci0gICAgICAg
IGNvbnN0IGNoYXIqIGZvbnRfc2Fuc19zZXJpZjsKLSAgICAgICAgRWluYV9Cb29sIGF1dG9fbG9h
ZF9pbWFnZXMgOiAxOwotICAgICAgICBFaW5hX0Jvb2wgYXV0b19zaHJpbmtfaW1hZ2VzIDogMTsK
LSAgICAgICAgRWluYV9Cb29sIGVuYWJsZV9hdXRvX3Jlc2l6ZV93aW5kb3cgOiAxOwotICAgICAg
ICBFaW5hX0Jvb2wgZW5hYmxlX2RldmVsb3Blcl9leHRyYXMgOiAxOwotICAgICAgICBFaW5hX0Jv
b2wgZW5hYmxlX3NjcmlwdHMgOiAxOwotICAgICAgICBFaW5hX0Jvb2wgZW5hYmxlX3BsdWdpbnMg
OiAxOwotICAgICAgICBFaW5hX0Jvb2wgZW5hYmxlX2ZyYW1lX2ZsYXR0ZW5pbmcgOiAxOwotICAg
ICAgICBFaW5hX0Jvb2wgZW5jb2RpbmdfZGV0ZWN0b3IgOiAxOwotICAgICAgICBFaW5hX0Jvb2wg
c2NyaXB0c193aW5kb3dfb3BlbiA6IDE7Ci0gICAgICAgIEVpbmFfQm9vbCBzY3JpcHRzX2Nhbl9j
bG9zZV93aW5kb3dzIDogMTsKLSAgICAgICAgRWluYV9Cb29sIHJlc2l6YWJsZV90ZXh0YXJlYXMg
OiAxOwotICAgICAgICBFaW5hX0Jvb2wgcHJpdmF0ZV9icm93c2luZyA6IDE7Ci0gICAgICAgIEVp
bmFfQm9vbCBjYXJldF9icm93c2luZyA6IDE7Ci0gICAgICAgIEVpbmFfQm9vbCBzcGF0aWFsX25h
dmlnYXRpb24gOiAxOwotICAgICAgICBFaW5hX0Jvb2wgbG9jYWxfc3RvcmFnZSA6IDE7Ci0gICAg
ICAgIEVpbmFfQm9vbCBvZmZsaW5lX2FwcF9jYWNoZSA6IDE7Ci0gICAgICAgIEVpbmFfQm9vbCBw
YWdlX2NhY2hlIDogMTsKKyAgICAgICAgY29uc3QgY2hhciogbG9jYWxTdG9yYWdlRGF0YWJhc2VQ
YXRoOworICAgICAgICBpbnQgZm9udE1pbmltdW1TaXplOworICAgICAgICBpbnQgZm9udE1pbmlt
dW1Mb2dpY2FsU2l6ZTsKKyAgICAgICAgaW50IGZvbnREZWZhdWx0U2l6ZTsKKyAgICAgICAgaW50
IGZvbnRNb25vc3BhY2VTaXplOworICAgICAgICBjb25zdCBjaGFyKiBmb250U3RhbmRhcmQ7Cisg
ICAgICAgIGNvbnN0IGNoYXIqIGZvbnRDdXJzaXZlOworICAgICAgICBjb25zdCBjaGFyKiBmb250
TW9ub3NwYWNlOworICAgICAgICBjb25zdCBjaGFyKiBmb250RmFudGFzeTsKKyAgICAgICAgY29u
c3QgY2hhciogZm9udFNlcmlmOworICAgICAgICBjb25zdCBjaGFyKiBmb250U2Fuc1NlcmlmOwor
ICAgICAgICBFaW5hX0Jvb2wgYXV0b0xvYWRJbWFnZXMgOiAxOworICAgICAgICBFaW5hX0Jvb2wg
YXV0b1Nocmlua0ltYWdlcyA6IDE7CisgICAgICAgIEVpbmFfQm9vbCBlbmFibGVBdXRvUmVzaXpl
V2luZG93IDogMTsKKyAgICAgICAgRWluYV9Cb29sIGVuYWJsZURldmVsb3BlckV4dHJhcyA6IDE7
CisgICAgICAgIEVpbmFfQm9vbCBlbmFibGVTY3JpcHRzIDogMTsKKyAgICAgICAgRWluYV9Cb29s
IGVuYWJsZVBsdWdpbnMgOiAxOworICAgICAgICBFaW5hX0Jvb2wgZW5hYmxlRnJhbWVGbGF0dGVu
aW5nIDogMTsKKyAgICAgICAgRWluYV9Cb29sIGVuY29kaW5nRGV0ZWN0b3IgOiAxOworICAgICAg
ICBFaW5hX0Jvb2wgc2NyaXB0c1dpbmRvd09wZW4gOiAxOworICAgICAgICBFaW5hX0Jvb2wgc2Ny
aXB0c0NhbkNsb3NlV2luZG93cyA6IDE7CisgICAgICAgIEVpbmFfQm9vbCByZXNpemFibGVUZXh0
YXJlYXMgOiAxOworICAgICAgICBFaW5hX0Jvb2wgcHJpdmF0ZUJyb3dzaW5nIDogMTsKKyAgICAg
ICAgRWluYV9Cb29sIGNhcmV0QnJvd3NpbmcgOiAxOworICAgICAgICBFaW5hX0Jvb2wgc3BhdGlh
bE5hdmlnYXRpb24gOiAxOworICAgICAgICBFaW5hX0Jvb2wgbG9jYWxTdG9yYWdlIDogMTsKKyAg
ICAgICAgRWluYV9Cb29sIG9mZmxpbmVBcHBDYWNoZSA6IDE7CisgICAgICAgIEVpbmFfQm9vbCBw
YWdlQ2FjaGUgOiAxOwogICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgZmxvYXQgbWluX3Nj
YWxlOwotICAgICAgICAgICAgZmxvYXQgbWF4X3NjYWxlOwotICAgICAgICAgICAgRWluYV9Cb29s
IHVzZXJfc2NhbGFibGUgOiAxOwotICAgICAgICB9IHpvb21fcmFuZ2U7Ci0gICAgICAgIGZsb2F0
IGRldmljZV9waXhlbF9yYXRpbzsKLSAgICAgICAgZG91YmxlIGRvbV90aW1lcl9pbnRlcnZhbDsK
KyAgICAgICAgICAgIGZsb2F0IG1pblNjYWxlOworICAgICAgICAgICAgZmxvYXQgbWF4U2NhbGU7
CisgICAgICAgICAgICBFaW5hX0Jvb2wgdXNlclNjYWxhYmxlIDogMTsKKyAgICAgICAgfSB6b29t
UmFuZ2U7CisgICAgICAgIGZsb2F0IGRldmljZVBpeGVsUmF0aW87CisgICAgICAgIGRvdWJsZSBk
b21UaW1lckludGVydmFsOwogICAgIH0gc2V0dGluZ3M7CiAgICAgc3RydWN0IHsKICAgICAgICAg
c3RydWN0IHsKQEAgLTE3NCw3ICsxNzQsNyBAQCBzdHJ1Y3QgX0V3a19WaWV3X1ByaXZhdGVfRGF0
YSB7CiAgICAgICAgICAgICBFdmFzX0Nvb3JkIHgsIHk7CiAgICAgICAgIH0gY2VudGVyOwogICAg
ICAgICBFY29yZV9BbmltYXRvciogYW5pbWF0b3I7Ci0gICAgfSBhbmltYXRlZF96b29tOworICAg
IH0gYW5pbWF0ZWRab29tOwogfTsKIAogI2lmbmRlZiBFV0tfVFlQRV9DSEVDSwpAQCAtMjE5LDE0
ICsyMTksMTQgQEAgc3RydWN0IF9Fd2tfVmlld19Qcml2YXRlX0RhdGEgewogICAgICAgICByZXR1
cm4gX19WQV9BUkdTX187ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgfQogCi0j
ZGVmaW5lIEVXS19WSUVXX1BSSVZfR0VUKHNkLCBwdHIpICAgICAgICAgICAgICBcCi0gICAgRXdr
X1ZpZXdfUHJpdmF0ZV9EYXRhICpwdHIgPSBzZC0+X3ByaXYKKyNkZWZpbmUgRVdLX1ZJRVdfUFJJ
Vl9HRVQoc21hcnREYXRhLCBwdHIpICAgICAgICAgICAgICBcCisgICAgRXdrX1ZpZXdfUHJpdmF0
ZV9EYXRhICpwdHIgPSBzbWFydERhdGEtPl9wcml2CiAKLSNkZWZpbmUgRVdLX1ZJRVdfUFJJVl9H
RVRfT1JfUkVUVVJOKHNkLCBwdHIsIC4uLikgICAgICAgICAgICAgICBcCi0gICAgRVdLX1ZJRVdf
UFJJVl9HRVQoc2QsIHB0cik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorI2Rl
ZmluZSBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwdHIsIC4uLikgICAg
ICAgICAgICAgICBcCisgICAgRVdLX1ZJRVdfUFJJVl9HRVQoc21hcnREYXRhLCBwdHIpOyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICBpZiAoIXB0cikgeyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIENSSVRJQ0FM
KCJubyBwcml2YXRlIGRhdGEgZm9yIG9iamVjdCAlcCAoJXMpIiwgICAgICAgICAgXAotICAgICAg
ICAgICAgICAgICBzZC0+c2VsZiwgZXZhc19vYmplY3RfdHlwZV9nZXQoc2QtPnNlbGYpKTsgICAg
IFwKKyAgICAgICAgICAgICAgICAgc21hcnREYXRhLT5zZWxmLCBldmFzX29iamVjdF90eXBlX2dl
dChzbWFydERhdGEtPnNlbGYpKTsgICAgIFwKICAgICAgICAgcmV0dXJuIF9fVkFfQVJHU19fOyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgfQogCkBAIC0yNTIsNyAr
MjUyLDcgQEAgc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfcmVwYWludHNfcmVzaXplKEV3a19W
aWV3X1ByaXZhdGVfRGF0YSogcHJpdiwgc2l6ZV90IHMKIAogc3RhdGljIHZvaWQgX2V3a192aWV3
X3JlcGFpbnRfYWRkKEV3a19WaWV3X1ByaXZhdGVfRGF0YSogcHJpdiwgRXZhc19Db29yZCB4LCBF
dmFzX0Nvb3JkIHksIEV2YXNfQ29vcmQgd2lkdGgsIEV2YXNfQ29vcmQgaGVpZ2h0KQogewotICAg
IEVpbmFfUmVjdGFuZ2xlKiByOworICAgIEVpbmFfUmVjdGFuZ2xlKiByZWN0OwogCiAgICAgLy8g
ZnByaW50ZihzdGRlcnIsICI+Pj4gcmVwYWludCByZXF1ZXN0ZWQ6ICVkLCVkKyVkeCVkXG4iLCB4
LCB5LCB3LCBoKTsKICAgICBpZiAocHJpdi0+cmVwYWludHMuYWxsb2NhdGVkID09IHByaXYtPnJl
cGFpbnRzLmNvdW50KSB7CkBAIC0yNjUsMTMgKzI2NSwxMyBAQCBzdGF0aWMgdm9pZCBfZXdrX3Zp
ZXdfcmVwYWludF9hZGQoRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKiBwcml2LCBFdmFzX0Nvb3JkIHgs
IEV2YQogICAgICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHIgPSBwcml2LT5yZXBhaW50
cy5hcnJheSArIHByaXYtPnJlcGFpbnRzLmNvdW50OworICAgIHJlY3QgPSBwcml2LT5yZXBhaW50
cy5hcnJheSArIHByaXYtPnJlcGFpbnRzLmNvdW50OwogICAgIHByaXYtPnJlcGFpbnRzLmNvdW50
Kys7CiAKLSAgICByLT54ID0geDsKLSAgICByLT55ID0geTsKLSAgICByLT53ID0gd2lkdGg7Ci0g
ICAgci0+aCA9IGhlaWdodDsKKyAgICByZWN0LT54ID0geDsKKyAgICByZWN0LT55ID0geTsKKyAg
ICByZWN0LT53ID0gd2lkdGg7CisgICAgcmVjdC0+aCA9IGhlaWdodDsKIAogICAgIERCRygiYWRk
IHJlcGFpbnQgJWQsICVkKyVkeCVkIiwgeCwgeSwgd2lkdGgsIGhlaWdodCk7CiB9CkBAIC0yOTYs
MjkgKzI5NiwyOSBAQCBzdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19zY3JvbGxzX3Jlc2l6ZShF
d2tfVmlld19Qcml2YXRlX0RhdGEqIHByaXYsIHNpemVfdCBzaQogICAgIHJldHVybiBFSU5BX1RS
VUU7CiB9CiAKLXN0YXRpYyB2b2lkIF9ld2tfdmlld19zY3JvbGxfYWRkKEV3a19WaWV3X1ByaXZh
dGVfRGF0YSogcHJpdiwgRXZhc19Db29yZCBkeCwgRXZhc19Db29yZCBkeSwgRXZhc19Db29yZCB4
LCBFdmFzX0Nvb3JkIHksIEV2YXNfQ29vcmQgd2lkdGgsIEV2YXNfQ29vcmQgaGVpZ2h0LCBFaW5h
X0Jvb2wgbWFpblNjcm9sbCkKK3N0YXRpYyB2b2lkIF9ld2tfdmlld19zY3JvbGxfYWRkKEV3a19W
aWV3X1ByaXZhdGVfRGF0YSogcHJpdiwgRXZhc19Db29yZCBkZWx0YVgsIEV2YXNfQ29vcmQgZGVs
dGFZLCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ29vcmQgeSwgRXZhc19Db29yZCB3aWR0aCwgRXZhc19D
b29yZCBoZWlnaHQsIEVpbmFfQm9vbCBtYWluU2Nyb2xsKQogewotICAgIEV3a19TY3JvbGxfUmVx
dWVzdCogcjsKLSAgICBFd2tfU2Nyb2xsX1JlcXVlc3QqIHJfZW5kOworICAgIEV3a19TY3JvbGxf
UmVxdWVzdCogcmVjdDsKKyAgICBFd2tfU2Nyb2xsX1JlcXVlc3QqIHJlY3RfZW5kOwogICAgIEV2
YXNfQ29vcmQgeDIgPSB4ICsgd2lkdGgsIHkyID0geSArIGhlaWdodDsKIAotICAgIHIgPSBwcml2
LT5zY3JvbGxzLmFycmF5OwotICAgIHJfZW5kID0gciArIHByaXYtPnNjcm9sbHMuY291bnQ7Ci0g
ICAgZm9yICg7IHIgPCByX2VuZDsgcisrKSB7Ci0gICAgICAgIGlmIChyLT54ID09IHggJiYgci0+
eSA9PSB5ICYmIHItPncgPT0gd2lkdGggJiYgci0+aCA9PSBoZWlnaHQpIHsKKyAgICByZWN0ID0g
cHJpdi0+c2Nyb2xscy5hcnJheTsKKyAgICByZWN0X2VuZCA9IHJlY3QgKyBwcml2LT5zY3JvbGxz
LmNvdW50OworICAgIGZvciAoOyByZWN0IDwgcmVjdF9lbmQ7IHJlY3QrKykgeworICAgICAgICBp
ZiAocmVjdC0+eCA9PSB4ICYmIHJlY3QtPnkgPT0geSAmJiByZWN0LT53ID09IHdpZHRoICYmIHJl
Y3QtPmggPT0gaGVpZ2h0KSB7CiAgICAgICAgICAgICBEQkcoInJlZ2lvbiBhbHJlYWR5IHNjcm9s
bGVkICVkLCVkKyVkeCVkICUrMDNkLCUrMDNkIGFkZCAiCiAgICAgICAgICAgICAgICAgIiUrMDNk
LCUrMDNkIiwKLSAgICAgICAgICAgICAgICByLT54LCByLT55LCByLT53LCByLT5oLCByLT5keCwg
ci0+ZHksIGR4LCBkeSk7Ci0gICAgICAgICAgICByLT5keCArPSBkeDsKLSAgICAgICAgICAgIHIt
PmR5ICs9IGR5OworICAgICAgICAgICAgICAgIHJlY3QtPngsIHJlY3QtPnksIHJlY3QtPncsIHJl
Y3QtPmgsIHJlY3QtPmR4LCByZWN0LT5keSwgZGVsdGFYLCBkZWx0YVkpOworICAgICAgICAgICAg
cmVjdC0+ZHggKz0gZGVsdGFYOworICAgICAgICAgICAgcmVjdC0+ZHkgKz0gZGVsdGFZOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGlmICgoeCA8PSByLT54ICYmIHgy
ID49IHItPngyKSAmJiAoeSA8PSByLT55ICYmIHkyID49IHItPnkyKSkgeworICAgICAgICBpZiAo
KHggPD0gcmVjdC0+eCAmJiB4MiA+PSByZWN0LT54MikgJiYgKHkgPD0gcmVjdC0+eSAmJiB5MiA+
PSByZWN0LT55MikpIHsKICAgICAgICAgICAgIERCRygib2xkIHZpZXdwb3J0ICglZCwlZCslZHgl
ZCAlKzAzZCwlKzAzZCkgd2FzIHNjcm9sbGVkIGl0c2VsZiwgIgogICAgICAgICAgICAgICAgICJh
ZGQgJSswM2QsJSswM2QiLAotICAgICAgICAgICAgICAgIHItPngsIHItPnksIHItPncsIHItPmgs
IHItPmR4LCByLT5keSwgZHgsIGR5KTsKLSAgICAgICAgICAgIHItPnggKz0gZHg7Ci0gICAgICAg
ICAgICByLT55ICs9IGR5OworICAgICAgICAgICAgICAgIHJlY3QtPngsIHJlY3QtPnksIHJlY3Qt
PncsIHJlY3QtPmgsIHJlY3QtPmR4LCByZWN0LT5keSwgZGVsdGFYLCBkZWx0YVkpOworICAgICAg
ICAgICAgcmVjdC0+eCArPSBkZWx0YVg7CisgICAgICAgICAgICByZWN0LT55ICs9IGRlbHRhWTsK
ICAgICAgICAgfQogICAgIH0KIApAQCAtMzMyLDE5ICszMzIsMTkgQEAgc3RhdGljIHZvaWQgX2V3
a192aWV3X3Njcm9sbF9hZGQoRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKiBwcml2LCBFdmFzX0Nvb3Jk
IGR4LCBFdmEKICAgICAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICByID0gcHJpdi0+c2Ny
b2xscy5hcnJheSArIHByaXYtPnNjcm9sbHMuY291bnQ7CisgICAgcmVjdCA9IHByaXYtPnNjcm9s
bHMuYXJyYXkgKyBwcml2LT5zY3JvbGxzLmNvdW50OwogICAgIHByaXYtPnNjcm9sbHMuY291bnQr
KzsKIAotICAgIHItPnggPSB4OwotICAgIHItPnkgPSB5OwotICAgIHItPncgPSB3aWR0aDsKLSAg
ICByLT5oID0gaGVpZ2h0OwotICAgIHItPngyID0geDI7Ci0gICAgci0+eTIgPSB5MjsKLSAgICBy
LT5keCA9IGR4OwotICAgIHItPmR5ID0gZHk7Ci0gICAgci0+bWFpbl9zY3JvbGwgPSBtYWluU2Ny
b2xsOwotICAgIERCRygiYWRkIHNjcm9sbCBpbiByZWdpb246ICVkLCAlZCslZHglZCAlKzAzZCwg
JSswM2QiLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBkeCwgZHkpOworICAgIHJlY3QtPnggPSB4Owor
ICAgIHJlY3QtPnkgPSB5OworICAgIHJlY3QtPncgPSB3aWR0aDsKKyAgICByZWN0LT5oID0gaGVp
Z2h0OworICAgIHJlY3QtPngyID0geDI7CisgICAgcmVjdC0+eTIgPSB5MjsKKyAgICByZWN0LT5k
eCA9IGRlbHRhWDsKKyAgICByZWN0LT5keSA9IGRlbHRhWTsKKyAgICByZWN0LT5tYWluX3Njcm9s
bCA9IG1haW5TY3JvbGw7CisgICAgREJHKCJhZGQgc2Nyb2xsIGluIHJlZ2lvbjogJWQsICVkKyVk
eCVkICUrMDNkLCAlKzAzZCIsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGRlbHRhWCwgZGVsdGFZKTsK
IAogICAgIEVpbmFfUmVjdGFuZ2xlKiBwcjsKICAgICBFaW5hX1JlY3RhbmdsZSogcHJfZW5kOwpA
QCAtMzUzLDggKzM1Myw4IEBAIHN0YXRpYyB2b2lkIF9ld2tfdmlld19zY3JvbGxfYWRkKEV3a19W
aWV3X1ByaXZhdGVfRGF0YSogcHJpdiwgRXZhc19Db29yZCBkeCwgRXZhCiAgICAgY291bnQgPSBw
cml2LT5yZXBhaW50cy5jb3VudDsKICAgICBwcl9lbmQgPSBwciArIGNvdW50OwogICAgIGZvciAo
OyBwciA8IHByX2VuZDsgcHIrKykgewotICAgICAgICBwci0+eCArPSBkeDsKLSAgICAgICAgcHIt
PnkgKz0gZHk7CisgICAgICAgIHByLT54ICs9IGRlbHRhWDsKKyAgICAgICAgcHItPnkgKz0gZGVs
dGFZOwogICAgIH0KIH0KIApAQCAtMzgyLDEyICszODIsMTIgQEAgc3RhdGljIEVpbmFfQm9vbCBf
ZXdrX3ZpZXdfc21hcnRfZm9jdXNfaW4oRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhKQog
c3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfc21hcnRfZm9jdXNfb3V0KEV3a19WaWV3X1NtYXJ0
X0RhdGEqIHNtYXJ0RGF0YSkKIHsKICAgICBFV0tfVklFV19QUklWX0dFVChzbWFydERhdGEsIHBy
aXYpOwotICAgIFdlYkNvcmU6OkZvY3VzQ29udHJvbGxlciogZmMgPSBwcml2LT5wYWdlLT5mb2N1
c0NvbnRyb2xsZXIoKTsKLSAgICBEQkcoImV3a1ZpZXc9JXAsIGZjPSVwIiwgc21hcnREYXRhLT5z
ZWxmLCBmYyk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGZjLCBFSU5BX0ZB
TFNFKTsKKyAgICBXZWJDb3JlOjpGb2N1c0NvbnRyb2xsZXIqIGZvY3VzQ29udHJvbGxlciA9IHBy
aXYtPnBhZ2UtPmZvY3VzQ29udHJvbGxlcigpOworICAgIERCRygiZXdrVmlldz0lcCwgZmM9JXAi
LCBzbWFydERhdGEtPnNlbGYsIGZvY3VzQ29udHJvbGxlcik7CisgICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk5fVkFMKGZvY3VzQ29udHJvbGxlciwgRUlOQV9GQUxTRSk7CiAKLSAgICBmYy0+
c2V0QWN0aXZlKGZhbHNlKTsKLSAgICBmYy0+c2V0Rm9jdXNlZChmYWxzZSk7CisgICAgZm9jdXND
b250cm9sbGVyLT5zZXRBY3RpdmUoZmFsc2UpOworICAgIGZvY3VzQ29udHJvbGxlci0+c2V0Rm9j
dXNlZChmYWxzZSk7CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIApAQCAtNDU4LDk3ICs0NTgs
OTcgQEAgc3RhdGljIEVpbmFfQm9vbCBfZXdrX3ZpZXdfc21hcnRfc2hvdWxkX2ludGVycnVwdF9q
YXZhc2NyaXB0KEV3a19WaWV3X1NtYXJ0X0RhdGEKIHN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3
X3NtYXJ0X3J1bl9qYXZhc2NyaXB0X3Byb21wdChFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERh
dGEsIEV2YXNfT2JqZWN0KiBmcmFtZSwgY29uc3QgY2hhciogbWVzc2FnZSwgY29uc3QgY2hhciog
ZGVmYXVsdFZhbHVlLCBjaGFyKiogdmFsdWUpCiB7CiAgICAgKnZhbHVlID0gc3RyZHVwKCJ0ZXN0
Iik7Ci0gICAgRWluYV9Cb29sIHJldCA9IEVJTkFfVFJVRTsKKyAgICBFaW5hX0Jvb2wgcmVzdWx0
ID0gRUlOQV9UUlVFOwogICAgIElORigiamF2YXNjcmlwdCBwcm9tcHQ6XG4iCiAgICAgICAgICJc
dCAgICAgIG1lc3NhZ2U6ICVzXG4iCiAgICAgICAgICJcdGRlZmF1bHQgdmFsdWU6ICVzXG4iCiAg
ICAgICAgICJcdGdpdmluZyBhbnN3ZXI6ICVzXG4iCi0gICAgICAgICJcdCAgICAgICBidXR0b246
ICVzIiwgbWVzc2FnZSwgZGVmYXVsdFZhbHVlLCAqdmFsdWUsIHJldCA/ICJvayIgOiAiY2FuY2Vs
Iik7CisgICAgICAgICJcdCAgICAgICBidXR0b246ICVzIiwgbWVzc2FnZSwgZGVmYXVsdFZhbHVl
LCAqdmFsdWUsIHJlc3VsdCA/ICJvayIgOiAiY2FuY2VsIik7CiAKLSAgICByZXR1cm4gcmV0Owor
ICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIC8vIEV2ZW50IEhhbmRsaW5nIC8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogc3RhdGljIHZvaWQgX2V3
a192aWV3X29uX2ZvY3VzX2luKHZvaWQqIGRhdGEsIEV2YXMqIGV2ZW50VHlwZSwgRXZhc19PYmpl
Y3QqIGNhbGxiYWNrLCB2b2lkKiBldmVudEluZm8pCiB7Ci0gICAgRXdrX1ZpZXdfU21hcnRfRGF0
YSogc2QgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZGF0YSk7Ci0gICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFwaSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk4oc2QtPmFwaS0+Zm9jdXNfaW4pOwotICAgIHNkLT5hcGktPmZvY3VzX2luKHNkKTsK
KyAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEgPSBzdGF0aWNfY2FzdDxFd2tfVmll
d19TbWFydF9EYXRhKj4oZGF0YSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21h
cnREYXRhLT5hcGkpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+
YXBpLT5mb2N1c19pbik7CisgICAgc21hcnREYXRhLT5hcGktPmZvY3VzX2luKHNtYXJ0RGF0YSk7
CiB9CiAKIHN0YXRpYyB2b2lkIF9ld2tfdmlld19vbl9mb2N1c19vdXQodm9pZCogZGF0YSwgRXZh
cyogZXZlbnRUeXBlLCBFdmFzX09iamVjdCogY2FsbGJhY2ssIHZvaWQqIGV2ZW50SW5mbykKIHsK
LSAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzZCA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0
X0RhdGEqPihkYXRhKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpKTsK
LSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpLT5mb2N1c19vdXQpOwotICAg
IHNkLT5hcGktPmZvY3VzX291dChzZCk7CisgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnRE
YXRhID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEpOworICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+YXBpKTsKKyAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmFwaS0+Zm9jdXNfb3V0KTsKKyAgICBzbWFydERhdGEt
PmFwaS0+Zm9jdXNfb3V0KHNtYXJ0RGF0YSk7CiB9CiAKIHN0YXRpYyB2b2lkIF9ld2tfdmlld19v
bl9tb3VzZV93aGVlbCh2b2lkKiBkYXRhLCBFdmFzKiBldmVudFR5cGUsIEV2YXNfT2JqZWN0KiBj
YWxsYmFjaywgdm9pZCogZXZlbnRJbmZvKQogewotICAgIEV2YXNfRXZlbnRfTW91c2VfV2hlZWwq
IGV2ID0gc3RhdGljX2Nhc3Q8RXZhc19FdmVudF9Nb3VzZV9XaGVlbCo+KGV2ZW50SW5mbyk7Ci0g
ICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9E
YXRhKj4oZGF0YSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFwaSk7Ci0g
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFwaS0+bW91c2Vfd2hlZWwpOwotICAg
IHNkLT5hcGktPm1vdXNlX3doZWVsKHNkLCBldik7CisgICAgRXZhc19FdmVudF9Nb3VzZV9XaGVl
bCogd2hlZWxFdmVudCA9IHN0YXRpY19jYXN0PEV2YXNfRXZlbnRfTW91c2VfV2hlZWwqPihldmVu
dEluZm8pOworICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IHN0YXRpY19jYXN0
PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihkYXRhKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTihzbWFydERhdGEtPmFwaSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21h
cnREYXRhLT5hcGktPm1vdXNlX3doZWVsKTsKKyAgICBzbWFydERhdGEtPmFwaS0+bW91c2Vfd2hl
ZWwoc21hcnREYXRhLCB3aGVlbEV2ZW50KTsKIH0KIAogc3RhdGljIHZvaWQgX2V3a192aWV3X29u
X21vdXNlX2Rvd24odm9pZCogZGF0YSwgRXZhcyogZXZlbnRUeXBlLCBFdmFzX09iamVjdCogY2Fs
bGJhY2ssIHZvaWQqIGV2ZW50SW5mbykKIHsKLSAgICBFdmFzX0V2ZW50X01vdXNlX0Rvd24qIGV2
ID0gc3RhdGljX2Nhc3Q8RXZhc19FdmVudF9Nb3VzZV9Eb3duKj4oZXZlbnRJbmZvKTsKLSAgICBF
d2tfVmlld19TbWFydF9EYXRhKiBzZCA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEq
PihkYXRhKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpKTsKLSAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpLT5tb3VzZV9kb3duKTsKLSAgICBzZC0+
YXBpLT5tb3VzZV9kb3duKHNkLCBldik7CisgICAgRXZhc19FdmVudF9Nb3VzZV9Eb3duKiBkb3du
RXZlbnQgPSBzdGF0aWNfY2FzdDxFdmFzX0V2ZW50X01vdXNlX0Rvd24qPihldmVudEluZm8pOwor
ICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IHN0YXRpY19jYXN0PEV3a19WaWV3
X1NtYXJ0X0RhdGEqPihkYXRhKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFy
dERhdGEtPmFwaSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRhLT5h
cGktPm1vdXNlX2Rvd24pOworICAgIHNtYXJ0RGF0YS0+YXBpLT5tb3VzZV9kb3duKHNtYXJ0RGF0
YSwgZG93bkV2ZW50KTsKIH0KIAogc3RhdGljIHZvaWQgX2V3a192aWV3X29uX21vdXNlX3VwKHZv
aWQqIGRhdGEsIEV2YXMqIGV2ZW50VHlwZSwgRXZhc19PYmplY3QqIGNhbGxiYWNrLCB2b2lkKiBl
dmVudEluZm8pCiB7Ci0gICAgRXZhc19FdmVudF9Nb3VzZV9VcCogZXYgPSBzdGF0aWNfY2FzdDxF
dmFzX0V2ZW50X01vdXNlX1VwKj4oZXZlbnRJbmZvKTsKLSAgICBFd2tfVmlld19TbWFydF9EYXRh
KiBzZCA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihkYXRhKTsKLSAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTihzZC0+YXBpLT5tb3VzZV91cCk7Ci0gICAgc2QtPmFwaS0+bW91c2VfdXAoc2QsIGV2
KTsKKyAgICBFdmFzX0V2ZW50X01vdXNlX1VwKiB1cEV2ZW50ID0gc3RhdGljX2Nhc3Q8RXZhc19F
dmVudF9Nb3VzZV9VcCo+KGV2ZW50SW5mbyk7CisgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc21h
cnREYXRhID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEpOworICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+YXBpKTsKKyAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmFwaS0+bW91c2VfdXApOworICAgIHNtYXJ0RGF0
YS0+YXBpLT5tb3VzZV91cChzbWFydERhdGEsIHVwRXZlbnQpOwogfQogCiBzdGF0aWMgdm9pZCBf
ZXdrX3ZpZXdfb25fbW91c2VfbW92ZSh2b2lkKiBkYXRhLCBFdmFzKiBldmVudFR5cGUsIEV2YXNf
T2JqZWN0KiBjYWxsYmFjaywgdm9pZCogZXZlbnRJbmZvKQogewotICAgIEV2YXNfRXZlbnRfTW91
c2VfTW92ZSogZXYgPSBzdGF0aWNfY2FzdDxFdmFzX0V2ZW50X01vdXNlX01vdmUqPihldmVudElu
Zm8pOwotICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdf
U21hcnRfRGF0YSo+KGRhdGEpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5h
cGkpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGktPm1vdXNlX21vdmUp
OwotICAgIHNkLT5hcGktPm1vdXNlX21vdmUoc2QsIGV2KTsKKyAgICBFdmFzX0V2ZW50X01vdXNl
X01vdmUqIG1vdmVFdmVudCA9IHN0YXRpY19jYXN0PEV2YXNfRXZlbnRfTW91c2VfTW92ZSo+KGV2
ZW50SW5mbyk7CisgICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhID0gc3RhdGljX2Nh
c3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOKHNtYXJ0RGF0YS0+YXBpKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihz
bWFydERhdGEtPmFwaS0+bW91c2VfbW92ZSk7CisgICAgc21hcnREYXRhLT5hcGktPm1vdXNlX21v
dmUoc21hcnREYXRhLCBtb3ZlRXZlbnQpOwogfQogCiBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfb25f
a2V5X2Rvd24odm9pZCogZGF0YSwgRXZhcyogZXZlbnRUeXBlLCBFdmFzX09iamVjdCogY2FsbGJh
Y2ssIHZvaWQqIGV2ZW50SW5mbykKIHsKLSAgICBFdmFzX0V2ZW50X0tleV9Eb3duKiBldiA9IHN0
YXRpY19jYXN0PEV2YXNfRXZlbnRfS2V5X0Rvd24qPihldmVudEluZm8pOwotICAgIEV3a19WaWV3
X1NtYXJ0X0RhdGEqIHNkID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21hcnRfRGF0YSo+KGRhdGEp
OwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGkpOwotICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGktPmtleV9kb3duKTsKLSAgICBzZC0+YXBpLT5rZXlf
ZG93bihzZCwgZXYpOworICAgIEV2YXNfRXZlbnRfS2V5X0Rvd24qIGRvd25FdmVudCA9IHN0YXRp
Y19jYXN0PEV2YXNfRXZlbnRfS2V5X0Rvd24qPihldmVudEluZm8pOworICAgIEV3a19WaWV3X1Nt
YXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihk
YXRhKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmFwaSk7Cisg
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRhLT5hcGktPmtleV9kb3duKTsK
KyAgICBzbWFydERhdGEtPmFwaS0+a2V5X2Rvd24oc21hcnREYXRhLCBkb3duRXZlbnQpOwogfQog
CiBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfb25fa2V5X3VwKHZvaWQqIGRhdGEsIEV2YXMqIGV2ZW50
VHlwZSwgRXZhc19PYmplY3QqIGNhbGxiYWNrLCB2b2lkKiBldmVudEluZm8pCiB7Ci0gICAgRXZh
c19FdmVudF9LZXlfVXAqIGV2ID0gc3RhdGljX2Nhc3Q8RXZhc19FdmVudF9LZXlfVXAqPihldmVu
dEluZm8pOwotICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0gc3RhdGljX2Nhc3Q8RXdrX1Zp
ZXdfU21hcnRfRGF0YSo+KGRhdGEpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNk
LT5hcGkpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGktPmtleV91cCk7
Ci0gICAgc2QtPmFwaS0+a2V5X3VwKHNkLCBldik7CisgICAgRXZhc19FdmVudF9LZXlfVXAqIHVw
RXZlbnQgPSBzdGF0aWNfY2FzdDxFdmFzX0V2ZW50X0tleV9VcCo+KGV2ZW50SW5mbyk7CisgICAg
RXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhID0gc3RhdGljX2Nhc3Q8RXdrX1ZpZXdfU21h
cnRfRGF0YSo+KGRhdGEpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0
YS0+YXBpKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmFwaS0+
a2V5X3VwKTsKKyAgICBzbWFydERhdGEtPmFwaS0+a2V5X3VwKHNtYXJ0RGF0YSwgdXBFdmVudCk7
CiB9CiAKIHN0YXRpYyBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6RnJhbWU+IF9ld2tfdmlld19j
b3JlX2ZyYW1lX25ldyhFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEsIEV3a19WaWV3X1By
aXZhdGVfRGF0YSogcHJpdiwgV2ViQ29yZTo6SFRNTEZyYW1lT3duZXJFbGVtZW50KiBvd25lcikK
IHsKLSAgICBXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEVmbCogZmxjID0gbmV3IFdlYkNvcmU6
OkZyYW1lTG9hZGVyQ2xpZW50RWZsKHNtYXJ0RGF0YS0+c2VsZik7Ci0gICAgaWYgKCFmbGMpIHsK
KyAgICBXZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEVmbCogZnJhbWVMb2FkZXJDbGllbnQgPSBu
ZXcgV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRFZmwoc21hcnREYXRhLT5zZWxmKTsKKyAgICBp
ZiAoIWZyYW1lTG9hZGVyQ2xpZW50KSB7CiAgICAgICAgIENSSVRJQ0FMKCJDb3VsZCBub3QgY3Jl
YXRlIGZyYW1lIGxvYWRlciBjbGllbnQuIik7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAg
ICBmbGMtPnNldEN1c3RvbVVzZXJBZ2VudChTdHJpbmc6OmZyb21VVEY4KHByaXYtPnNldHRpbmdz
LnVzZXJfYWdlbnQpKTsKKyAgICBmcmFtZUxvYWRlckNsaWVudC0+c2V0Q3VzdG9tVXNlckFnZW50
KFN0cmluZzo6ZnJvbVVURjgocHJpdi0+c2V0dGluZ3MudXNlckFnZW50KSk7CiAKLSAgICByZXR1
cm4gV2ViQ29yZTo6RnJhbWU6OmNyZWF0ZShwcml2LT5wYWdlLCBvd25lciwgZmxjKTsKKyAgICBy
ZXR1cm4gV2ViQ29yZTo6RnJhbWU6OmNyZWF0ZShwcml2LT5wYWdlLCBvd25lciwgZnJhbWVMb2Fk
ZXJDbGllbnQpOwogfQogCiBzdGF0aWMgRXZhc19TbWFydF9DbGFzcyBfcGFyZW50X3NjID0gRVZB
U19TTUFSVF9DTEFTU19JTklUX05VTEw7CkBAIC01NTcsNyArNTU3LDcgQEAgc3RhdGljIEV3a19W
aWV3X1ByaXZhdGVfRGF0YSogX2V3a192aWV3X3ByaXZfbmV3KEV3a19WaWV3X1NtYXJ0X0RhdGEq
IHNtYXJ0RGF0YSkKIHsKICAgICBFd2tfVmlld19Qcml2YXRlX0RhdGEqIHByaXYgPQogICAgICAg
ICBzdGF0aWNfY2FzdDxFd2tfVmlld19Qcml2YXRlX0RhdGEqPihjYWxsb2MoMSwgc2l6ZW9mKEV3
a19WaWV3X1ByaXZhdGVfRGF0YSkpKTsKLSAgICBBdG9taWNTdHJpbmcgczsKKyAgICBBdG9taWNT
dHJpbmcgc3RyaW5nOwogICAgIFdlYkNvcmU6OktVUkwgdXJsOwogCiAgICAgaWYgKCFwcml2KSB7
CkBAIC01ODAsOTUgKzU4MCw5NSBAQCBzdGF0aWMgRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKiBfZXdr
X3ZpZXdfcHJpdl9uZXcoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhKQogICAgICAgICBn
b3RvIGVycm9yX3BhZ2U7CiAgICAgfQogCi0gICAgcHJpdi0+cGFnZV9zZXR0aW5ncyA9IHByaXYt
PnBhZ2UtPnNldHRpbmdzKCk7Ci0gICAgaWYgKCFwcml2LT5wYWdlX3NldHRpbmdzKSB7CisgICAg
cHJpdi0+cGFnZVNldHRpbmdzID0gcHJpdi0+cGFnZS0+c2V0dGluZ3MoKTsKKyAgICBpZiAoIXBy
aXYtPnBhZ2VTZXR0aW5ncykgewogICAgICAgICBDUklUSUNBTCgiQ291bGQgbm90IGdldCBwYWdl
IHNldHRpbmdzLiIpOwogICAgICAgICBnb3RvIGVycm9yX3NldHRpbmdzOwogICAgIH0KIAotICAg
IHByaXYtPnZpZXdwb3J0X2FyZ3VtZW50cy53aWR0aCA9IFdlYkNvcmU6OlZpZXdwb3J0QXJndW1l
bnRzOjpWYWx1ZUF1dG87Ci0gICAgcHJpdi0+dmlld3BvcnRfYXJndW1lbnRzLmhlaWdodCA9IFdl
YkNvcmU6OlZpZXdwb3J0QXJndW1lbnRzOjpWYWx1ZUF1dG87Ci0gICAgcHJpdi0+dmlld3BvcnRf
YXJndW1lbnRzLmluaXRpYWxTY2FsZSA9IFdlYkNvcmU6OlZpZXdwb3J0QXJndW1lbnRzOjpWYWx1
ZUF1dG87Ci0gICAgcHJpdi0+dmlld3BvcnRfYXJndW1lbnRzLm1pbmltdW1TY2FsZSA9IFdlYkNv
cmU6OlZpZXdwb3J0QXJndW1lbnRzOjpWYWx1ZUF1dG87Ci0gICAgcHJpdi0+dmlld3BvcnRfYXJn
dW1lbnRzLm1heGltdW1TY2FsZSA9IFdlYkNvcmU6OlZpZXdwb3J0QXJndW1lbnRzOjpWYWx1ZUF1
dG87Ci0gICAgcHJpdi0+dmlld3BvcnRfYXJndW1lbnRzLnRhcmdldERlbnNpdHlEcGkgPSBXZWJD
b3JlOjpWaWV3cG9ydEFyZ3VtZW50czo6VmFsdWVBdXRvOwotICAgIHByaXYtPnZpZXdwb3J0X2Fy
Z3VtZW50cy51c2VyU2NhbGFibGUgPSBFSU5BX1RSVUU7Ci0KLSAgICBwcml2LT5wYWdlX3NldHRp
bmdzLT5zZXRMb2Fkc0ltYWdlc0F1dG9tYXRpY2FsbHkodHJ1ZSk7Ci0gICAgcHJpdi0+cGFnZV9z
ZXR0aW5ncy0+c2V0RGVmYXVsdFRleHRFbmNvZGluZ05hbWUoImlzby04ODU5LTEiKTsKLSAgICBw
cml2LT5wYWdlX3NldHRpbmdzLT5zZXREZWZhdWx0Rml4ZWRGb250U2l6ZSgxMik7Ci0gICAgcHJp
di0+cGFnZV9zZXR0aW5ncy0+c2V0RGVmYXVsdEZvbnRTaXplKDE2KTsKLSAgICBwcml2LT5wYWdl
X3NldHRpbmdzLT5zZXRTZXJpZkZvbnRGYW1pbHkoInNlcmlmIik7Ci0gICAgcHJpdi0+cGFnZV9z
ZXR0aW5ncy0+c2V0Rml4ZWRGb250RmFtaWx5KCJtb25vdHlwZSIpOwotICAgIHByaXYtPnBhZ2Vf
c2V0dGluZ3MtPnNldFNhbnNTZXJpZkZvbnRGYW1pbHkoInNhbnMiKTsKLSAgICBwcml2LT5wYWdl
X3NldHRpbmdzLT5zZXRTdGFuZGFyZEZvbnRGYW1pbHkoInNhbnMiKTsKLSAgICBwcml2LT5wYWdl
X3NldHRpbmdzLT5zZXRKYXZhU2NyaXB0RW5hYmxlZCh0cnVlKTsKLSAgICBwcml2LT5wYWdlX3Nl
dHRpbmdzLT5zZXRQbHVnaW5zRW5hYmxlZCh0cnVlKTsKLSAgICBwcml2LT5wYWdlX3NldHRpbmdz
LT5zZXRMb2NhbFN0b3JhZ2VFbmFibGVkKHRydWUpOwotICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3Mt
PnNldE9mZmxpbmVXZWJBcHBsaWNhdGlvbkNhY2hlRW5hYmxlZCh0cnVlKTsKLSAgICBwcml2LT5w
YWdlX3NldHRpbmdzLT5zZXRVc2VzUGFnZUNhY2hlKHRydWUpOwotICAgIHByaXYtPnBhZ2Vfc2V0
dGluZ3MtPnNldFVzZXNFbmNvZGluZ0RldGVjdG9yKGZhbHNlKTsKLQotICAgIHVybCA9IHByaXYt
PnBhZ2Vfc2V0dGluZ3MtPnVzZXJTdHlsZVNoZWV0TG9jYXRpb24oKTsKLSAgICBwcml2LT5zZXR0
aW5ncy51c2VyX3N0eWxlc2hlZXQgPSBlaW5hX3N0cmluZ3NoYXJlX2FkZCh1cmwuc3RyaW5nKCku
dXRmOCgpLmRhdGEoKSk7Ci0KLSAgICBwcml2LT5zZXR0aW5ncy5lbmNvZGluZ19kZWZhdWx0ID0g
ZWluYV9zdHJpbmdzaGFyZV9hZGQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChwcml2LT5wYWdlX3NldHRpbmdzLT5kZWZhdWx0VGV4dEVuY29kaW5nTmFtZSgpLnV0
ZjgoKS5kYXRhKCkpOwotICAgIHByaXYtPnNldHRpbmdzLmVuY29kaW5nX2N1c3RvbSA9IDA7Ci0K
LSAgICBzID0gcHJpdi0+cGFnZV9zZXR0aW5ncy0+bG9jYWxTdG9yYWdlRGF0YWJhc2VQYXRoKCk7
Ci0gICAgcHJpdi0+c2V0dGluZ3MubG9jYWxfc3RvcmFnZV9kYXRhYmFzZV9wYXRoID0gZWluYV9z
dHJpbmdzaGFyZV9hZGQocy5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLQotICAgIHByaXYtPnNl
dHRpbmdzLmZvbnRfbWluaW11bV9zaXplID0gcHJpdi0+cGFnZV9zZXR0aW5ncy0+bWluaW11bUZv
bnRTaXplKCk7Ci0gICAgcHJpdi0+c2V0dGluZ3MuZm9udF9taW5pbXVtX2xvZ2ljYWxfc2l6ZSA9
IHByaXYtPnBhZ2Vfc2V0dGluZ3MtPm1pbmltdW1Mb2dpY2FsRm9udFNpemUoKTsKLSAgICBwcml2
LT5zZXR0aW5ncy5mb250X2RlZmF1bHRfc2l6ZSA9IHByaXYtPnBhZ2Vfc2V0dGluZ3MtPmRlZmF1
bHRGb250U2l6ZSgpOwotICAgIHByaXYtPnNldHRpbmdzLmZvbnRfbW9ub3NwYWNlX3NpemUgPSBw
cml2LT5wYWdlX3NldHRpbmdzLT5kZWZhdWx0Rml4ZWRGb250U2l6ZSgpOwotCi0gICAgcyA9IHBy
aXYtPnBhZ2Vfc2V0dGluZ3MtPnN0YW5kYXJkRm9udEZhbWlseSgpOwotICAgIHByaXYtPnNldHRp
bmdzLmZvbnRfc3RhbmRhcmQgPSBlaW5hX3N0cmluZ3NoYXJlX2FkZChzLnN0cmluZygpLnV0Zjgo
KS5kYXRhKCkpOwotICAgIHMgPSBwcml2LT5wYWdlX3NldHRpbmdzLT5jdXJzaXZlRm9udEZhbWls
eSgpOwotICAgIHByaXYtPnNldHRpbmdzLmZvbnRfY3Vyc2l2ZSA9IGVpbmFfc3RyaW5nc2hhcmVf
YWRkKHMuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0gICAgcyA9IHByaXYtPnBhZ2Vfc2V0dGlu
Z3MtPmZpeGVkRm9udEZhbWlseSgpOwotICAgIHByaXYtPnNldHRpbmdzLmZvbnRfbW9ub3NwYWNl
ID0gZWluYV9zdHJpbmdzaGFyZV9hZGQocy5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLSAgICBz
ID0gcHJpdi0+cGFnZV9zZXR0aW5ncy0+ZmFudGFzeUZvbnRGYW1pbHkoKTsKLSAgICBwcml2LT5z
ZXR0aW5ncy5mb250X2ZhbnRhc3kgPSBlaW5hX3N0cmluZ3NoYXJlX2FkZChzLnN0cmluZygpLnV0
ZjgoKS5kYXRhKCkpOwotICAgIHMgPSBwcml2LT5wYWdlX3NldHRpbmdzLT5zZXJpZkZvbnRGYW1p
bHkoKTsKLSAgICBwcml2LT5zZXR0aW5ncy5mb250X3NlcmlmID0gZWluYV9zdHJpbmdzaGFyZV9h
ZGQocy5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKLSAgICBzID0gcHJpdi0+cGFnZV9zZXR0aW5n
cy0+c2Fuc1NlcmlmRm9udEZhbWlseSgpOwotICAgIHByaXYtPnNldHRpbmdzLmZvbnRfc2Fuc19z
ZXJpZiA9IGVpbmFfc3RyaW5nc2hhcmVfYWRkKHMuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7Ci0K
LSAgICBwcml2LT5zZXR0aW5ncy5hdXRvX2xvYWRfaW1hZ2VzID0gcHJpdi0+cGFnZV9zZXR0aW5n
cy0+bG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5KCk7Ci0gICAgcHJpdi0+c2V0dGluZ3MuYXV0b19z
aHJpbmtfaW1hZ2VzID0gcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2hyaW5rc1N0YW5kYWxvbmVJbWFn
ZXNUb0ZpdCgpOwotICAgIHByaXYtPnNldHRpbmdzLmVuYWJsZV9hdXRvX3Jlc2l6ZV93aW5kb3cg
PSBFSU5BX1RSVUU7Ci0gICAgcHJpdi0+c2V0dGluZ3MuZW5hYmxlX2RldmVsb3Blcl9leHRyYXMg
PSBwcml2LT5wYWdlX3NldHRpbmdzLT5kZXZlbG9wZXJFeHRyYXNFbmFibGVkKCk7Ci0gICAgcHJp
di0+c2V0dGluZ3MuZW5hYmxlX3NjcmlwdHMgPSBwcml2LT5wYWdlX3NldHRpbmdzLT5pc0phdmFT
Y3JpcHRFbmFibGVkKCk7Ci0gICAgcHJpdi0+c2V0dGluZ3MuZW5hYmxlX3BsdWdpbnMgPSBwcml2
LT5wYWdlX3NldHRpbmdzLT5hcmVQbHVnaW5zRW5hYmxlZCgpOwotICAgIHByaXYtPnNldHRpbmdz
LmVuYWJsZV9mcmFtZV9mbGF0dGVuaW5nID0gcHJpdi0+cGFnZV9zZXR0aW5ncy0+ZnJhbWVGbGF0
dGVuaW5nRW5hYmxlZCgpOwotICAgIHByaXYtPnNldHRpbmdzLnNjcmlwdHNfd2luZG93X29wZW4g
PSBwcml2LT5wYWdlX3NldHRpbmdzLT5qYXZhU2NyaXB0Q2FuT3BlbldpbmRvd3NBdXRvbWF0aWNh
bGx5KCk7Ci0gICAgcHJpdi0+c2V0dGluZ3Muc2NyaXB0c19jYW5fY2xvc2Vfd2luZG93cyA9IHBy
aXYtPnBhZ2Vfc2V0dGluZ3MtPmFsbG93U2NyaXB0c1RvQ2xvc2VXaW5kb3dzKCk7Ci0gICAgcHJp
di0+c2V0dGluZ3MucmVzaXphYmxlX3RleHRhcmVhcyA9IHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnRl
eHRBcmVhc0FyZVJlc2l6YWJsZSgpOwotICAgIHByaXYtPnNldHRpbmdzLnByaXZhdGVfYnJvd3Np
bmcgPSBwcml2LT5wYWdlX3NldHRpbmdzLT5wcml2YXRlQnJvd3NpbmdFbmFibGVkKCk7Ci0gICAg
cHJpdi0+c2V0dGluZ3MuY2FyZXRfYnJvd3NpbmcgPSBwcml2LT5wYWdlX3NldHRpbmdzLT5jYXJl
dEJyb3dzaW5nRW5hYmxlZCgpOwotICAgIHByaXYtPnNldHRpbmdzLnNwYXRpYWxfbmF2aWdhdGlv
biA9IHByaXYtPnBhZ2Vfc2V0dGluZ3MtPmlzU3BhdGlhbE5hdmlnYXRpb25FbmFibGVkKCk7Ci0g
ICAgcHJpdi0+c2V0dGluZ3MubG9jYWxfc3RvcmFnZSA9IHByaXYtPnBhZ2Vfc2V0dGluZ3MtPmxv
Y2FsU3RvcmFnZUVuYWJsZWQoKTsKLSAgICBwcml2LT5zZXR0aW5ncy5vZmZsaW5lX2FwcF9jYWNo
ZSA9IHRydWU7IC8vIFhYWCBubyBmdW5jdGlvbiB0byByZWFkIHNldHRpbmc7IHRoaXMga2VlcHMg
dGhlIG9yaWdpbmFsIHNldHRpbmcKLSAgICBwcml2LT5zZXR0aW5ncy5wYWdlX2NhY2hlID0gcHJp
di0+cGFnZV9zZXR0aW5ncy0+dXNlc1BhZ2VDYWNoZSgpOwotICAgIHByaXYtPnNldHRpbmdzLmVu
Y29kaW5nX2RldGVjdG9yID0gcHJpdi0+cGFnZV9zZXR0aW5ncy0+dXNlc0VuY29kaW5nRGV0ZWN0
b3IoKTsKLQotICAgIHByaXYtPnNldHRpbmdzLnVzZXJfYWdlbnQgPSBld2tfc2V0dGluZ3NfZGVm
YXVsdF91c2VyX2FnZW50X2dldCgpOworICAgIHByaXYtPnZpZXdwb3J0QXJndW1lbnRzLndpZHRo
ID0gV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHM6OlZhbHVlQXV0bzsKKyAgICBwcml2LT52aWV3
cG9ydEFyZ3VtZW50cy5oZWlnaHQgPSBXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50czo6VmFsdWVB
dXRvOworICAgIHByaXYtPnZpZXdwb3J0QXJndW1lbnRzLmluaXRpYWxTY2FsZSA9IFdlYkNvcmU6
OlZpZXdwb3J0QXJndW1lbnRzOjpWYWx1ZUF1dG87CisgICAgcHJpdi0+dmlld3BvcnRBcmd1bWVu
dHMubWluaW11bVNjYWxlID0gV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHM6OlZhbHVlQXV0bzsK
KyAgICBwcml2LT52aWV3cG9ydEFyZ3VtZW50cy5tYXhpbXVtU2NhbGUgPSBXZWJDb3JlOjpWaWV3
cG9ydEFyZ3VtZW50czo6VmFsdWVBdXRvOworICAgIHByaXYtPnZpZXdwb3J0QXJndW1lbnRzLnRh
cmdldERlbnNpdHlEcGkgPSBXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50czo6VmFsdWVBdXRvOwor
ICAgIHByaXYtPnZpZXdwb3J0QXJndW1lbnRzLnVzZXJTY2FsYWJsZSA9IEVJTkFfVFJVRTsKKwor
ICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0TG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5KHRydWUp
OworICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0RGVmYXVsdFRleHRFbmNvZGluZ05hbWUoImlz
by04ODU5LTEiKTsKKyAgICBwcml2LT5wYWdlU2V0dGluZ3MtPnNldERlZmF1bHRGaXhlZEZvbnRT
aXplKDEyKTsKKyAgICBwcml2LT5wYWdlU2V0dGluZ3MtPnNldERlZmF1bHRGb250U2l6ZSgxNik7
CisgICAgcHJpdi0+cGFnZVNldHRpbmdzLT5zZXRTZXJpZkZvbnRGYW1pbHkoInNlcmlmIik7Cisg
ICAgcHJpdi0+cGFnZVNldHRpbmdzLT5zZXRGaXhlZEZvbnRGYW1pbHkoIm1vbm90eXBlIik7Cisg
ICAgcHJpdi0+cGFnZVNldHRpbmdzLT5zZXRTYW5zU2VyaWZGb250RmFtaWx5KCJzYW5zIik7Cisg
ICAgcHJpdi0+cGFnZVNldHRpbmdzLT5zZXRTdGFuZGFyZEZvbnRGYW1pbHkoInNhbnMiKTsKKyAg
ICBwcml2LT5wYWdlU2V0dGluZ3MtPnNldEphdmFTY3JpcHRFbmFibGVkKHRydWUpOworICAgIHBy
aXYtPnBhZ2VTZXR0aW5ncy0+c2V0UGx1Z2luc0VuYWJsZWQodHJ1ZSk7CisgICAgcHJpdi0+cGFn
ZVNldHRpbmdzLT5zZXRMb2NhbFN0b3JhZ2VFbmFibGVkKHRydWUpOworICAgIHByaXYtPnBhZ2VT
ZXR0aW5ncy0+c2V0T2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGVFbmFibGVkKHRydWUpOworICAg
IHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0VXNlc1BhZ2VDYWNoZSh0cnVlKTsKKyAgICBwcml2LT5w
YWdlU2V0dGluZ3MtPnNldFVzZXNFbmNvZGluZ0RldGVjdG9yKGZhbHNlKTsKKworICAgIHVybCA9
IHByaXYtPnBhZ2VTZXR0aW5ncy0+dXNlclN0eWxlU2hlZXRMb2NhdGlvbigpOworICAgIHByaXYt
PnNldHRpbmdzLnVzZXJTdHlsZXNoZWV0ID0gZWluYV9zdHJpbmdzaGFyZV9hZGQodXJsLnN0cmlu
ZygpLnV0ZjgoKS5kYXRhKCkpOworCisgICAgcHJpdi0+c2V0dGluZ3MuZW5jb2RpbmdEZWZhdWx0
ID0gZWluYV9zdHJpbmdzaGFyZV9hZGQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIChwcml2LT5wYWdlU2V0dGluZ3MtPmRlZmF1bHRUZXh0RW5jb2RpbmdOYW1lKCku
dXRmOCgpLmRhdGEoKSk7CisgICAgcHJpdi0+c2V0dGluZ3MuZW5jb2RpbmdDdXN0b20gPSAwOwor
CisgICAgc3RyaW5nID0gcHJpdi0+cGFnZVNldHRpbmdzLT5sb2NhbFN0b3JhZ2VEYXRhYmFzZVBh
dGgoKTsKKyAgICBwcml2LT5zZXR0aW5ncy5sb2NhbFN0b3JhZ2VEYXRhYmFzZVBhdGggPSBlaW5h
X3N0cmluZ3NoYXJlX2FkZChzdHJpbmcuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisKKyAgICBw
cml2LT5zZXR0aW5ncy5mb250TWluaW11bVNpemUgPSBwcml2LT5wYWdlU2V0dGluZ3MtPm1pbmlt
dW1Gb250U2l6ZSgpOworICAgIHByaXYtPnNldHRpbmdzLmZvbnRNaW5pbXVtTG9naWNhbFNpemUg
PSBwcml2LT5wYWdlU2V0dGluZ3MtPm1pbmltdW1Mb2dpY2FsRm9udFNpemUoKTsKKyAgICBwcml2
LT5zZXR0aW5ncy5mb250RGVmYXVsdFNpemUgPSBwcml2LT5wYWdlU2V0dGluZ3MtPmRlZmF1bHRG
b250U2l6ZSgpOworICAgIHByaXYtPnNldHRpbmdzLmZvbnRNb25vc3BhY2VTaXplID0gcHJpdi0+
cGFnZVNldHRpbmdzLT5kZWZhdWx0Rml4ZWRGb250U2l6ZSgpOworCisgICAgc3RyaW5nID0gcHJp
di0+cGFnZVNldHRpbmdzLT5zdGFuZGFyZEZvbnRGYW1pbHkoKTsKKyAgICBwcml2LT5zZXR0aW5n
cy5mb250U3RhbmRhcmQgPSBlaW5hX3N0cmluZ3NoYXJlX2FkZChzdHJpbmcuc3RyaW5nKCkudXRm
OCgpLmRhdGEoKSk7CisgICAgc3RyaW5nID0gcHJpdi0+cGFnZVNldHRpbmdzLT5jdXJzaXZlRm9u
dEZhbWlseSgpOworICAgIHByaXYtPnNldHRpbmdzLmZvbnRDdXJzaXZlID0gZWluYV9zdHJpbmdz
aGFyZV9hZGQoc3RyaW5nLnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgIHN0cmluZyA9IHBy
aXYtPnBhZ2VTZXR0aW5ncy0+Zml4ZWRGb250RmFtaWx5KCk7CisgICAgcHJpdi0+c2V0dGluZ3Mu
Zm9udE1vbm9zcGFjZSA9IGVpbmFfc3RyaW5nc2hhcmVfYWRkKHN0cmluZy5zdHJpbmcoKS51dGY4
KCkuZGF0YSgpKTsKKyAgICBzdHJpbmcgPSBwcml2LT5wYWdlU2V0dGluZ3MtPmZhbnRhc3lGb250
RmFtaWx5KCk7CisgICAgcHJpdi0+c2V0dGluZ3MuZm9udEZhbnRhc3kgPSBlaW5hX3N0cmluZ3No
YXJlX2FkZChzdHJpbmcuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgc3RyaW5nID0gcHJp
di0+cGFnZVNldHRpbmdzLT5zZXJpZkZvbnRGYW1pbHkoKTsKKyAgICBwcml2LT5zZXR0aW5ncy5m
b250U2VyaWYgPSBlaW5hX3N0cmluZ3NoYXJlX2FkZChzdHJpbmcuc3RyaW5nKCkudXRmOCgpLmRh
dGEoKSk7CisgICAgc3RyaW5nID0gcHJpdi0+cGFnZVNldHRpbmdzLT5zYW5zU2VyaWZGb250RmFt
aWx5KCk7CisgICAgcHJpdi0+c2V0dGluZ3MuZm9udFNhbnNTZXJpZiA9IGVpbmFfc3RyaW5nc2hh
cmVfYWRkKHN0cmluZy5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKworICAgIHByaXYtPnNldHRp
bmdzLmF1dG9Mb2FkSW1hZ2VzID0gcHJpdi0+cGFnZVNldHRpbmdzLT5sb2Fkc0ltYWdlc0F1dG9t
YXRpY2FsbHkoKTsKKyAgICBwcml2LT5zZXR0aW5ncy5hdXRvU2hyaW5rSW1hZ2VzID0gcHJpdi0+
cGFnZVNldHRpbmdzLT5zaHJpbmtzU3RhbmRhbG9uZUltYWdlc1RvRml0KCk7CisgICAgcHJpdi0+
c2V0dGluZ3MuZW5hYmxlQXV0b1Jlc2l6ZVdpbmRvdyA9IEVJTkFfVFJVRTsKKyAgICBwcml2LT5z
ZXR0aW5ncy5lbmFibGVEZXZlbG9wZXJFeHRyYXMgPSBwcml2LT5wYWdlU2V0dGluZ3MtPmRldmVs
b3BlckV4dHJhc0VuYWJsZWQoKTsKKyAgICBwcml2LT5zZXR0aW5ncy5lbmFibGVTY3JpcHRzID0g
cHJpdi0+cGFnZVNldHRpbmdzLT5pc0phdmFTY3JpcHRFbmFibGVkKCk7CisgICAgcHJpdi0+c2V0
dGluZ3MuZW5hYmxlUGx1Z2lucyA9IHByaXYtPnBhZ2VTZXR0aW5ncy0+YXJlUGx1Z2luc0VuYWJs
ZWQoKTsKKyAgICBwcml2LT5zZXR0aW5ncy5lbmFibGVGcmFtZUZsYXR0ZW5pbmcgPSBwcml2LT5w
YWdlU2V0dGluZ3MtPmZyYW1lRmxhdHRlbmluZ0VuYWJsZWQoKTsKKyAgICBwcml2LT5zZXR0aW5n
cy5zY3JpcHRzV2luZG93T3BlbiA9IHByaXYtPnBhZ2VTZXR0aW5ncy0+amF2YVNjcmlwdENhbk9w
ZW5XaW5kb3dzQXV0b21hdGljYWxseSgpOworICAgIHByaXYtPnNldHRpbmdzLnNjcmlwdHNDYW5D
bG9zZVdpbmRvd3MgPSBwcml2LT5wYWdlU2V0dGluZ3MtPmFsbG93U2NyaXB0c1RvQ2xvc2VXaW5k
b3dzKCk7CisgICAgcHJpdi0+c2V0dGluZ3MucmVzaXphYmxlVGV4dGFyZWFzID0gcHJpdi0+cGFn
ZVNldHRpbmdzLT50ZXh0QXJlYXNBcmVSZXNpemFibGUoKTsKKyAgICBwcml2LT5zZXR0aW5ncy5w
cml2YXRlQnJvd3NpbmcgPSBwcml2LT5wYWdlU2V0dGluZ3MtPnByaXZhdGVCcm93c2luZ0VuYWJs
ZWQoKTsKKyAgICBwcml2LT5zZXR0aW5ncy5jYXJldEJyb3dzaW5nID0gcHJpdi0+cGFnZVNldHRp
bmdzLT5jYXJldEJyb3dzaW5nRW5hYmxlZCgpOworICAgIHByaXYtPnNldHRpbmdzLnNwYXRpYWxO
YXZpZ2F0aW9uID0gcHJpdi0+cGFnZVNldHRpbmdzLT5pc1NwYXRpYWxOYXZpZ2F0aW9uRW5hYmxl
ZCgpOworICAgIHByaXYtPnNldHRpbmdzLmxvY2FsU3RvcmFnZSA9IHByaXYtPnBhZ2VTZXR0aW5n
cy0+bG9jYWxTdG9yYWdlRW5hYmxlZCgpOworICAgIHByaXYtPnNldHRpbmdzLm9mZmxpbmVBcHBD
YWNoZSA9IHRydWU7IC8vIFhYWCBubyBmdW5jdGlvbiB0byByZWFkIHNldHRpbmc7IHRoaXMga2Vl
cHMgdGhlIG9yaWdpbmFsIHNldHRpbmcKKyAgICBwcml2LT5zZXR0aW5ncy5wYWdlQ2FjaGUgPSBw
cml2LT5wYWdlU2V0dGluZ3MtPnVzZXNQYWdlQ2FjaGUoKTsKKyAgICBwcml2LT5zZXR0aW5ncy5l
bmNvZGluZ0RldGVjdG9yID0gcHJpdi0+cGFnZVNldHRpbmdzLT51c2VzRW5jb2RpbmdEZXRlY3Rv
cigpOworCisgICAgcHJpdi0+c2V0dGluZ3MudXNlckFnZW50ID0gZXdrX3NldHRpbmdzX2RlZmF1
bHRfdXNlcl9hZ2VudF9nZXQoKTsKIAogICAgIC8vIFNpbmNlIHRoZXJlJ3Mgbm8gc2NhbGUgc2Vw
YXJhdGVkIGZyb20gem9vbWluZyBpbiB3ZWJraXQtZWZsLCB0aGlzIGZ1bmN0aW9uYWxpdHkgb2YK
ICAgICAvLyB2aWV3cG9ydCBtZXRhIHRhZyBpcyBpbXBsZW1lbnRlZCB1c2luZyB6b29tLiBXaGVu
IHNjYWxlIHpvb20gaXMgc3VwcG9ydGVkIGJ5IHdlYmtpdC1lZmwsCiAgICAgLy8gdGhpcyBmdW5j
dGlvbmFsaXR5IHdpbGwgYmUgbW9kaWZpZWQgYnkgdGhlIHNjYWxlIHpvb20gcGF0Y2guCi0gICAg
cHJpdi0+c2V0dGluZ3Muem9vbV9yYW5nZS5taW5fc2NhbGUgPSBaT09NX01JTjsKLSAgICBwcml2
LT5zZXR0aW5ncy56b29tX3JhbmdlLm1heF9zY2FsZSA9IFpPT01fTUFYOwotICAgIHByaXYtPnNl
dHRpbmdzLnpvb21fcmFuZ2UudXNlcl9zY2FsYWJsZSA9IEVJTkFfVFJVRTsKLSAgICBwcml2LT5z
ZXR0aW5ncy5kZXZpY2VfcGl4ZWxfcmF0aW8gPSBERVZJQ0VfUElYRUxfUkFUSU87CisgICAgcHJp
di0+c2V0dGluZ3Muem9vbVJhbmdlLm1pblNjYWxlID0gWk9PTV9NSU47CisgICAgcHJpdi0+c2V0
dGluZ3Muem9vbVJhbmdlLm1heFNjYWxlID0gWk9PTV9NQVg7CisgICAgcHJpdi0+c2V0dGluZ3Mu
em9vbVJhbmdlLnVzZXJTY2FsYWJsZSA9IEVJTkFfVFJVRTsKKyAgICBwcml2LT5zZXR0aW5ncy5k
ZXZpY2VQaXhlbFJhdGlvID0gREVWSUNFX1BJWEVMX1JBVElPOwogCi0gICAgcHJpdi0+c2V0dGlu
Z3MuZG9tX3RpbWVyX2ludGVydmFsID0gcHJpdi0+cGFnZV9zZXR0aW5ncy0+ZGVmYXVsdE1pbkRP
TVRpbWVySW50ZXJ2YWwoKTsKKyAgICBwcml2LT5zZXR0aW5ncy5kb21UaW1lckludGVydmFsID0g
cHJpdi0+cGFnZVNldHRpbmdzLT5kZWZhdWx0TWluRE9NVGltZXJJbnRlcnZhbCgpOwogCi0gICAg
cHJpdi0+bWFpbl9mcmFtZSA9IF9ld2tfdmlld19jb3JlX2ZyYW1lX25ldyhzbWFydERhdGEsIHBy
aXYsIDApLmdldCgpOwotICAgIGlmICghcHJpdi0+bWFpbl9mcmFtZSkgeworICAgIHByaXYtPm1h
aW5GcmFtZSA9IF9ld2tfdmlld19jb3JlX2ZyYW1lX25ldyhzbWFydERhdGEsIHByaXYsIDApLmdl
dCgpOworICAgIGlmICghcHJpdi0+bWFpbkZyYW1lKSB7CiAgICAgICAgIENSSVRJQ0FMKCJDb3Vs
ZCBub3QgY3JlYXRlIG1haW4gZnJhbWUuIik7CiAgICAgICAgIGdvdG8gZXJyb3JfbWFpbl9mcmFt
ZTsKICAgICB9CkBAIC03MDEsMjAgKzcwMSwyMCBAQCBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfcHJp
dl9kZWwoRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKiBwcml2KQogICAgIGZyZWUocHJpdi0+cmVwYWlu
dHMuYXJyYXkpOwogICAgIGZyZWUocHJpdi0+c2Nyb2xscy5hcnJheSk7CiAKLSAgICBlaW5hX3N0
cmluZ3NoYXJlX2RlbChwcml2LT5zZXR0aW5ncy51c2VyX2FnZW50KTsKLSAgICBlaW5hX3N0cmlu
Z3NoYXJlX2RlbChwcml2LT5zZXR0aW5ncy51c2VyX3N0eWxlc2hlZXQpOwotICAgIGVpbmFfc3Ry
aW5nc2hhcmVfZGVsKHByaXYtPnNldHRpbmdzLmVuY29kaW5nX2RlZmF1bHQpOwotICAgIGVpbmFf
c3RyaW5nc2hhcmVfZGVsKHByaXYtPnNldHRpbmdzLmVuY29kaW5nX2N1c3RvbSk7Ci0gICAgZWlu
YV9zdHJpbmdzaGFyZV9kZWwocHJpdi0+c2V0dGluZ3MuZm9udF9zdGFuZGFyZCk7Ci0gICAgZWlu
YV9zdHJpbmdzaGFyZV9kZWwocHJpdi0+c2V0dGluZ3MuZm9udF9jdXJzaXZlKTsKLSAgICBlaW5h
X3N0cmluZ3NoYXJlX2RlbChwcml2LT5zZXR0aW5ncy5mb250X21vbm9zcGFjZSk7Ci0gICAgZWlu
YV9zdHJpbmdzaGFyZV9kZWwocHJpdi0+c2V0dGluZ3MuZm9udF9mYW50YXN5KTsKLSAgICBlaW5h
X3N0cmluZ3NoYXJlX2RlbChwcml2LT5zZXR0aW5ncy5mb250X3NlcmlmKTsKLSAgICBlaW5hX3N0
cmluZ3NoYXJlX2RlbChwcml2LT5zZXR0aW5ncy5mb250X3NhbnNfc2VyaWYpOwotICAgIGVpbmFf
c3RyaW5nc2hhcmVfZGVsKHByaXYtPnNldHRpbmdzLmxvY2FsX3N0b3JhZ2VfZGF0YWJhc2VfcGF0
aCk7Ci0KLSAgICBpZiAocHJpdi0+YW5pbWF0ZWRfem9vbS5hbmltYXRvcikKLSAgICAgICAgZWNv
cmVfYW5pbWF0b3JfZGVsKHByaXYtPmFuaW1hdGVkX3pvb20uYW5pbWF0b3IpOworICAgIGVpbmFf
c3RyaW5nc2hhcmVfZGVsKHByaXYtPnNldHRpbmdzLnVzZXJBZ2VudCk7CisgICAgZWluYV9zdHJp
bmdzaGFyZV9kZWwocHJpdi0+c2V0dGluZ3MudXNlclN0eWxlc2hlZXQpOworICAgIGVpbmFfc3Ry
aW5nc2hhcmVfZGVsKHByaXYtPnNldHRpbmdzLmVuY29kaW5nRGVmYXVsdCk7CisgICAgZWluYV9z
dHJpbmdzaGFyZV9kZWwocHJpdi0+c2V0dGluZ3MuZW5jb2RpbmdDdXN0b20pOworICAgIGVpbmFf
c3RyaW5nc2hhcmVfZGVsKHByaXYtPnNldHRpbmdzLmZvbnRTdGFuZGFyZCk7CisgICAgZWluYV9z
dHJpbmdzaGFyZV9kZWwocHJpdi0+c2V0dGluZ3MuZm9udEN1cnNpdmUpOworICAgIGVpbmFfc3Ry
aW5nc2hhcmVfZGVsKHByaXYtPnNldHRpbmdzLmZvbnRNb25vc3BhY2UpOworICAgIGVpbmFfc3Ry
aW5nc2hhcmVfZGVsKHByaXYtPnNldHRpbmdzLmZvbnRGYW50YXN5KTsKKyAgICBlaW5hX3N0cmlu
Z3NoYXJlX2RlbChwcml2LT5zZXR0aW5ncy5mb250U2VyaWYpOworICAgIGVpbmFfc3RyaW5nc2hh
cmVfZGVsKHByaXYtPnNldHRpbmdzLmZvbnRTYW5zU2VyaWYpOworICAgIGVpbmFfc3RyaW5nc2hh
cmVfZGVsKHByaXYtPnNldHRpbmdzLmxvY2FsU3RvcmFnZURhdGFiYXNlUGF0aCk7CisKKyAgICBp
ZiAocHJpdi0+YW5pbWF0ZWRab29tLmFuaW1hdG9yKQorICAgICAgICBlY29yZV9hbmltYXRvcl9k
ZWwocHJpdi0+YW5pbWF0ZWRab29tLmFuaW1hdG9yKTsKIAogICAgIGV3a19oaXN0b3J5X2ZyZWUo
cHJpdi0+aGlzdG9yeSk7CiAKQEAgLTcyNSw3MiArNzI1LDcyIEBAIHN0YXRpYyB2b2lkIF9ld2tf
dmlld19wcml2X2RlbChFd2tfVmlld19Qcml2YXRlX0RhdGEqIHByaXYpCiBzdGF0aWMgdm9pZCBf
ZXdrX3ZpZXdfc21hcnRfYWRkKEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewogICAgIGNvbnN0IEV2
YXNfU21hcnQqIHNtYXJ0ID0gZXZhc19vYmplY3Rfc21hcnRfc21hcnRfZ2V0KGV3a1ZpZXcpOwot
ICAgIGNvbnN0IEV2YXNfU21hcnRfQ2xhc3MqIHNjID0gZXZhc19zbWFydF9jbGFzc19nZXQoc21h
cnQpOwotICAgIGNvbnN0IEV3a19WaWV3X1NtYXJ0X0NsYXNzKiBhcGkgPSByZWludGVycHJldF9j
YXN0PGNvbnN0IEV3a19WaWV3X1NtYXJ0X0NsYXNzKj4oc2MpOworICAgIGNvbnN0IEV2YXNfU21h
cnRfQ2xhc3MqIHNtYXJ0Q2xhc3MgPSBldmFzX3NtYXJ0X2NsYXNzX2dldChzbWFydCk7CisgICAg
Y29uc3QgRXdrX1ZpZXdfU21hcnRfQ2xhc3MqIGFwaSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
RXdrX1ZpZXdfU21hcnRfQ2xhc3MqPihzbWFydENsYXNzKTsKICAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTihhcGktPmJhY2tpbmdfc3RvcmVfYWRkKTsKLSAgICBFV0tfVklFV19TRF9HRVQo
ZXdrVmlldywgc2QpOworICAgIEVXS19WSUVXX1NEX0dFVChld2tWaWV3LCBzbWFydERhdGEpOwog
Ci0gICAgaWYgKCFzZCkgewotICAgICAgICBzZCA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0
X0RhdGEqPihjYWxsb2MoMSwgc2l6ZW9mKEV3a19WaWV3X1NtYXJ0X0RhdGEpKSk7Ci0gICAgICAg
IGlmICghc2QpIHsKKyAgICBpZiAoIXNtYXJ0RGF0YSkgeworICAgICAgICBzbWFydERhdGEgPSBz
dGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oY2FsbG9jKDEsIHNpemVvZihFd2tfVmll
d19TbWFydF9EYXRhKSkpOworICAgICAgICBpZiAoIXNtYXJ0RGF0YSkgewogICAgICAgICAgICAg
Q1JJVElDQUwoImNvdWxkIG5vdCBhbGxvY2F0ZSBFd2tfVmlld19TbWFydF9EYXRhIik7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgZXZhc19vYmplY3Rfc21hcnRfZGF0
YV9zZXQoZXdrVmlldywgc2QpOworICAgICAgICBldmFzX29iamVjdF9zbWFydF9kYXRhX3NldChl
d2tWaWV3LCBzbWFydERhdGEpOwogICAgIH0KIAotICAgIHNkLT5iZ19jb2xvci5yID0gMjU1Owot
ICAgIHNkLT5iZ19jb2xvci5nID0gMjU1OwotICAgIHNkLT5iZ19jb2xvci5iID0gMjU1OwotICAg
IHNkLT5iZ19jb2xvci5hID0gMjU1OworICAgIHNtYXJ0RGF0YS0+YmdfY29sb3IuciA9IDI1NTsK
KyAgICBzbWFydERhdGEtPmJnX2NvbG9yLmcgPSAyNTU7CisgICAgc21hcnREYXRhLT5iZ19jb2xv
ci5iID0gMjU1OworICAgIHNtYXJ0RGF0YS0+YmdfY29sb3IuYSA9IDI1NTsKIAotICAgIHNkLT5z
ZWxmID0gZXdrVmlldzsKLSAgICBzZC0+X3ByaXYgPSBfZXdrX3ZpZXdfcHJpdl9uZXcoc2QpOwot
ICAgIHNkLT5hcGkgPSBhcGk7CisgICAgc21hcnREYXRhLT5zZWxmID0gZXdrVmlldzsKKyAgICBz
bWFydERhdGEtPl9wcml2ID0gX2V3a192aWV3X3ByaXZfbmV3KHNtYXJ0RGF0YSk7CisgICAgc21h
cnREYXRhLT5hcGkgPSBhcGk7CiAKICAgICBfcGFyZW50X3NjLmFkZChld2tWaWV3KTsKIAotICAg
IGlmICghc2QtPl9wcml2KQorICAgIGlmICghc21hcnREYXRhLT5fcHJpdikKICAgICAgICAgcmV0
dXJuOwogCi0gICAgRVdLX1ZJRVdfUFJJVl9HRVQoc2QsIHByaXYpOworICAgIEVXS19WSUVXX1BS
SVZfR0VUKHNtYXJ0RGF0YSwgcHJpdik7CiAKLSAgICBzZC0+YmFja2luZ19zdG9yZSA9IGFwaS0+
YmFja2luZ19zdG9yZV9hZGQoc2QpOwotICAgIGlmICghc2QtPmJhY2tpbmdfc3RvcmUpIHsKKyAg
ICBzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUgPSBhcGktPmJhY2tpbmdfc3RvcmVfYWRkKHNtYXJ0
RGF0YSk7CisgICAgaWYgKCFzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUpIHsKICAgICAgICAgRVJS
KCJDb3VsZCBub3QgY3JlYXRlIGJhY2tpbmcgc3RvcmUgb2JqZWN0LiIpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgZXZhc19vYmplY3Rfc21hcnRfbWVtYmVyX2FkZChzZC0+YmFja2lu
Z19zdG9yZSwgZXdrVmlldyk7Ci0gICAgZXZhc19vYmplY3Rfc2hvdyhzZC0+YmFja2luZ19zdG9y
ZSk7Ci0gICAgZXZhc19vYmplY3RfcGFzc19ldmVudHNfc2V0KHNkLT5iYWNraW5nX3N0b3JlLCBF
SU5BX1RSVUUpOworICAgIGV2YXNfb2JqZWN0X3NtYXJ0X21lbWJlcl9hZGQoc21hcnREYXRhLT5i
YWNraW5nX3N0b3JlLCBld2tWaWV3KTsKKyAgICBldmFzX29iamVjdF9zaG93KHNtYXJ0RGF0YS0+
YmFja2luZ19zdG9yZSk7CisgICAgZXZhc19vYmplY3RfcGFzc19ldmVudHNfc2V0KHNtYXJ0RGF0
YS0+YmFja2luZ19zdG9yZSwgRUlOQV9UUlVFKTsKIAotICAgIHNkLT5ldmVudHNfcmVjdCA9IGV2
YXNfb2JqZWN0X3JlY3RhbmdsZV9hZGQoc2QtPmJhc2UuZXZhcyk7Ci0gICAgZXZhc19vYmplY3Rf
Y29sb3Jfc2V0KHNkLT5ldmVudHNfcmVjdCwgMCwgMCwgMCwgMCk7Ci0gICAgZXZhc19vYmplY3Rf
c21hcnRfbWVtYmVyX2FkZChzZC0+ZXZlbnRzX3JlY3QsIGV3a1ZpZXcpOwotICAgIGV2YXNfb2Jq
ZWN0X3Nob3coc2QtPmV2ZW50c19yZWN0KTsKKyAgICBzbWFydERhdGEtPmV2ZW50c19yZWN0ID0g
ZXZhc19vYmplY3RfcmVjdGFuZ2xlX2FkZChzbWFydERhdGEtPmJhc2UuZXZhcyk7CisgICAgZXZh
c19vYmplY3RfY29sb3Jfc2V0KHNtYXJ0RGF0YS0+ZXZlbnRzX3JlY3QsIDAsIDAsIDAsIDApOwor
ICAgIGV2YXNfb2JqZWN0X3NtYXJ0X21lbWJlcl9hZGQoc21hcnREYXRhLT5ldmVudHNfcmVjdCwg
ZXdrVmlldyk7CisgICAgZXZhc19vYmplY3Rfc2hvdyhzbWFydERhdGEtPmV2ZW50c19yZWN0KTsK
IAotICAgIHNkLT5tYWluX2ZyYW1lID0gZXdrX2ZyYW1lX2FkZChzZC0+YmFzZS5ldmFzKTsKLSAg
ICBpZiAoIXNkLT5tYWluX2ZyYW1lKSB7CisgICAgc21hcnREYXRhLT5tYWluX2ZyYW1lID0gZXdr
X2ZyYW1lX2FkZChzbWFydERhdGEtPmJhc2UuZXZhcyk7CisgICAgaWYgKCFzbWFydERhdGEtPm1h
aW5fZnJhbWUpIHsKICAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIG1haW4gZnJhbWUgb2Jq
ZWN0LiIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCFld2tfZnJhbWVfaW5p
dChzZC0+bWFpbl9mcmFtZSwgZXdrVmlldywgcHJpdi0+bWFpbl9mcmFtZSkpIHsKKyAgICBpZiAo
IWV3a19mcmFtZV9pbml0KHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSwgZXdrVmlldywgcHJpdi0+bWFp
bkZyYW1lKSkgewogICAgICAgICBFUlIoIkNvdWxkIG5vdCBpbml0aWFsaXplIG1haW4gZnJtZSBv
YmplY3QuIik7Ci0gICAgICAgIGV2YXNfb2JqZWN0X2RlbChzZC0+bWFpbl9mcmFtZSk7Ci0gICAg
ICAgIHNkLT5tYWluX2ZyYW1lID0gMDsKKyAgICAgICAgZXZhc19vYmplY3RfZGVsKHNtYXJ0RGF0
YS0+bWFpbl9mcmFtZSk7CisgICAgICAgIHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSA9IDA7CiAKLSAg
ICAgICAgZGVsZXRlIHByaXYtPm1haW5fZnJhbWU7Ci0gICAgICAgIHByaXYtPm1haW5fZnJhbWUg
PSAwOworICAgICAgICBkZWxldGUgcHJpdi0+bWFpbkZyYW1lOworICAgICAgICBwcml2LT5tYWlu
RnJhbWUgPSAwOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgZXZhc19vYmplY3RfbmFt
ZV9zZXQoc2QtPm1haW5fZnJhbWUsICJFV0tfRnJhbWU6bWFpbiIpOwotICAgIGV2YXNfb2JqZWN0
X3NtYXJ0X21lbWJlcl9hZGQoc2QtPm1haW5fZnJhbWUsIGV3a1ZpZXcpOwotICAgIGV2YXNfb2Jq
ZWN0X3Nob3coc2QtPm1haW5fZnJhbWUpOworICAgIGV2YXNfb2JqZWN0X25hbWVfc2V0KHNtYXJ0
RGF0YS0+bWFpbl9mcmFtZSwgIkVXS19GcmFtZTptYWluIik7CisgICAgZXZhc19vYmplY3Rfc21h
cnRfbWVtYmVyX2FkZChzbWFydERhdGEtPm1haW5fZnJhbWUsIGV3a1ZpZXcpOworICAgIGV2YXNf
b2JqZWN0X3Nob3coc21hcnREYXRhLT5tYWluX2ZyYW1lKTsKIAotI2RlZmluZSBDT05ORUNUKHMs
IGMpIGV2YXNfb2JqZWN0X2V2ZW50X2NhbGxiYWNrX2FkZChld2tWaWV3LCBzLCBjLCBzZCkKKyNk
ZWZpbmUgQ09OTkVDVChzLCBjKSBldmFzX29iamVjdF9ldmVudF9jYWxsYmFja19hZGQoZXdrVmll
dywgcywgYywgc21hcnREYXRhKQogICAgIENPTk5FQ1QoRVZBU19DQUxMQkFDS19GT0NVU19JTiwg
X2V3a192aWV3X29uX2ZvY3VzX2luKTsKICAgICBDT05ORUNUKEVWQVNfQ0FMTEJBQ0tfRk9DVVNf
T1VULCBfZXdrX3ZpZXdfb25fZm9jdXNfb3V0KTsKICAgICBDT05ORUNUKEVWQVNfQ0FMTEJBQ0tf
TU9VU0VfV0hFRUwsIF9ld2tfdmlld19vbl9tb3VzZV93aGVlbCk7CkBAIC04MDQsOCArODA0LDgg
QEAgc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X2FkZChFdmFzX09iamVjdCogZXdrVmlldykK
IAogc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X2RlbChFdmFzX09iamVjdCogZXdrVmlldykK
IHsKLSAgICBFV0tfVklFV19TRF9HRVQoZXdrVmlldywgc2QpOwotICAgIEV3a19WaWV3X1ByaXZh
dGVfRGF0YSogcHJpdiA9IHNkID8gc2QtPl9wcml2IDogMDsKKyAgICBFV0tfVklFV19TRF9HRVQo
ZXdrVmlldywgc21hcnREYXRhKTsKKyAgICBFd2tfVmlld19Qcml2YXRlX0RhdGEqIHByaXYgPSBz
bWFydERhdGEgPyBzbWFydERhdGEtPl9wcml2IDogMDsKIAogICAgIGV3a192aWV3X3N0b3AoZXdr
Vmlldyk7CiAgICAgX3BhcmVudF9zYy5kZWwoZXdrVmlldyk7CkBAIC04MTQsMTAzICs4MTQsMTAz
IEBAIHN0YXRpYyB2b2lkIF9ld2tfdmlld19zbWFydF9kZWwoRXZhc19PYmplY3QqIGV3a1ZpZXcp
CiAKIHN0YXRpYyB2b2lkIF9ld2tfdmlld19zbWFydF9yZXNpemUoRXZhc19PYmplY3QqIGV3a1Zp
ZXcsIEV2YXNfQ29vcmQgdywgRXZhc19Db29yZCBoKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9P
Ul9SRVRVUk4oZXdrVmlldywgc2QpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdr
Vmlldywgc21hcnREYXRhKTsKIAogICAgIC8vIHRoZXNlIHNob3VsZCBiZSBxdWV1ZWQgYW5kIHBy
b2Nlc3NlZCBpbiBjYWxjdWxhdGUgYXMgd2VsbCEKLSAgICBldmFzX29iamVjdF9yZXNpemUoc2Qt
PmJhY2tpbmdfc3RvcmUsIHcsIGgpOworICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShzbWFydERhdGEt
PmJhY2tpbmdfc3RvcmUsIHcsIGgpOwogCi0gICAgc2QtPmNoYW5nZWQuc2l6ZSA9IEVJTkFfVFJV
RTsKLSAgICBfZXdrX3ZpZXdfc21hcnRfY2hhbmdlZChzZCk7CisgICAgc21hcnREYXRhLT5jaGFu
Z2VkLnNpemUgPSBFSU5BX1RSVUU7CisgICAgX2V3a192aWV3X3NtYXJ0X2NoYW5nZWQoc21hcnRE
YXRhKTsKIH0KIAogc3RhdGljIHZvaWQgX2V3a192aWV3X3NtYXJ0X21vdmUoRXZhc19PYmplY3Qq
IGV3a1ZpZXcsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5KQogewotICAgIEVXS19WSUVXX1NE
X0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QpOwotICAgIHNkLT5jaGFuZ2VkLnBvc2l0aW9uID0g
RUlOQV9UUlVFOwotICAgIF9ld2tfdmlld19zbWFydF9jaGFuZ2VkKHNkKTsKKyAgICBFV0tfVklF
V19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSk7CisgICAgc21hcnREYXRhLT5j
aGFuZ2VkLnBvc2l0aW9uID0gRUlOQV9UUlVFOworICAgIF9ld2tfdmlld19zbWFydF9jaGFuZ2Vk
KHNtYXJ0RGF0YSk7CiB9CiAKIHN0YXRpYyB2b2lkIF9ld2tfdmlld19zbWFydF9jYWxjdWxhdGUo
RXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUKGV3a1ZpZXcsIHNk
KTsKLSAgICBFV0tfVklFV19QUklWX0dFVChzZCwgcHJpdik7Ci0gICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk4oc2QtPmFwaS0+Y29udGVudHNfcmVzaXplKTsKLSAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTihzZC0+YXBpLT5zY3JvbGxzX3Byb2Nlc3MpOwotICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOKHNkLT5hcGktPnJlcGFpbnRzX3Byb2Nlc3MpOwotICAgIEV2YXNfQ29v
cmQgeCwgeSwgdywgaDsKKyAgICBFV0tfVklFV19TRF9HRVQoZXdrVmlldywgc21hcnREYXRhKTsK
KyAgICBFV0tfVklFV19QUklWX0dFVChzbWFydERhdGEsIHByaXYpOworICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+YXBpLT5jb250ZW50c19yZXNpemUpOworICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+YXBpLT5zY3JvbGxzX3Byb2Nlc3Mp
OworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+YXBpLT5yZXBhaW50
c19wcm9jZXNzKTsKKyAgICBFdmFzX0Nvb3JkIHgsIHksIHdpZHRoLCBoZWlnaHQ7CiAKLSAgICBz
ZC0+Y2hhbmdlZC5hbnkgPSBFSU5BX0ZBTFNFOworICAgIHNtYXJ0RGF0YS0+Y2hhbmdlZC5hbnkg
PSBFSU5BX0ZBTFNFOwogCi0gICAgaWYgKCFzZC0+bWFpbl9mcmFtZSB8fCAhcHJpdi0+bWFpbl9m
cmFtZSkKKyAgICBpZiAoIXNtYXJ0RGF0YS0+bWFpbl9mcmFtZSB8fCAhcHJpdi0+bWFpbkZyYW1l
KQogICAgICAgICByZXR1cm47CiAKLSAgICBldmFzX29iamVjdF9nZW9tZXRyeV9nZXQoZXdrVmll
dywgJngsICZ5LCAmdywgJmgpOworICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldChld2tWaWV3
LCAmeCwgJnksICZ3aWR0aCwgJmhlaWdodCk7CiAKICAgICBEQkcoImV3a1ZpZXc9JXAgZ2VvPVsl
ZCwgJWQgKyAlZHglZF0sIGNoYW5nZWQ6IHNpemU9JWhodSwgIgogICAgICAgICAic2Nyb2xscz0l
enUsIHJlcGFpbnRzPSV6dSIsCi0gICAgICAgIGV3a1ZpZXcsIHgsIHksIHcsIGgsIHNkLT5jaGFu
Z2VkLnNpemUsCisgICAgICAgIGV3a1ZpZXcsIHgsIHksIHdpZHRoLCBoZWlnaHQsIHNtYXJ0RGF0
YS0+Y2hhbmdlZC5zaXplLAogICAgICAgICBwcml2LT5zY3JvbGxzLmNvdW50LCBwcml2LT5yZXBh
aW50cy5jb3VudCk7CiAKLSAgICBpZiAoc2QtPmNoYW5nZWQuc2l6ZSAmJiAoKHcgIT0gc2QtPnZp
ZXcudykgfHwgKGggIT0gc2QtPnZpZXcuaCkpKSB7Ci0gICAgICAgIFdlYkNvcmU6OkZyYW1lVmll
dyogdmlldyA9IHByaXYtPm1haW5fZnJhbWUtPnZpZXcoKTsKKyAgICBpZiAoc21hcnREYXRhLT5j
aGFuZ2VkLnNpemUgJiYgKCh3aWR0aCAhPSBzbWFydERhdGEtPnZpZXcudykgfHwgKGhlaWdodCAh
PSBzbWFydERhdGEtPnZpZXcuaCkpKSB7CisgICAgICAgIFdlYkNvcmU6OkZyYW1lVmlldyogdmll
dyA9IHByaXYtPm1haW5GcmFtZS0+dmlldygpOwogICAgICAgICBpZiAodmlldykgewotICAgICAg
ICAgICAgdmlldy0+cmVzaXplKHcsIGgpOworICAgICAgICAgICAgdmlldy0+cmVzaXplKHdpZHRo
LCBoZWlnaHQpOwogICAgICAgICAgICAgdmlldy0+Zm9yY2VMYXlvdXQoKTsKICAgICAgICAgICAg
IHZpZXctPmFkanVzdFZpZXdTaXplKCk7CiAgICAgICAgIH0KLSAgICAgICAgZXZhc19vYmplY3Rf
cmVzaXplKHNkLT5tYWluX2ZyYW1lLCB3LCBoKTsKLSAgICAgICAgZXZhc19vYmplY3RfcmVzaXpl
KHNkLT5ldmVudHNfcmVjdCwgdywgaCk7Ci0gICAgICAgIHNkLT5jaGFuZ2VkLmZyYW1lX3JlY3Qg
PSBFSU5BX1RSVUU7Ci0gICAgICAgIHNkLT52aWV3LncgPSB3OwotICAgICAgICBzZC0+dmlldy5o
ID0gaDsKKyAgICAgICAgZXZhc19vYmplY3RfcmVzaXplKHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSwg
d2lkdGgsIGhlaWdodCk7CisgICAgICAgIGV2YXNfb2JqZWN0X3Jlc2l6ZShzbWFydERhdGEtPmV2
ZW50c19yZWN0LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgc21hcnREYXRhLT5jaGFuZ2VkLmZy
YW1lX3JlY3QgPSBFSU5BX1RSVUU7CisgICAgICAgIHNtYXJ0RGF0YS0+dmlldy53ID0gd2lkdGg7
CisgICAgICAgIHNtYXJ0RGF0YS0+dmlldy5oID0gaGVpZ2h0OwogCi0gICAgICAgIF9ld2tfdmll
d19yZXBhaW50X2FkZChwcml2LCAwLCAwLCB3LCBoKTsKKyAgICAgICAgX2V3a192aWV3X3JlcGFp
bnRfYWRkKHByaXYsIDAsIDAsIHdpZHRoLCBoZWlnaHQpOwogCiAgICAgICAgIC8vIFRoaXMgY2Fs
bGJhY2sgaXMgYSBnb29kIHBsYWNlIGUuZy4gdG8gY2hhbmdlIGZpeGVkIGxheW91dCBzaXplIChl
d2tfdmlld19maXhlZF9sYXlvdXRfc2l6ZV9zZXQpLgogICAgICAgICBldmFzX29iamVjdF9zbWFy
dF9jYWxsYmFja19jYWxsKGV3a1ZpZXcsICJ2aWV3LHJlc2l6ZWQiLCAwKTsKICAgICB9Ci0gICAg
c2QtPmNoYW5nZWQuc2l6ZSA9IEVJTkFfRkFMU0U7CisgICAgc21hcnREYXRhLT5jaGFuZ2VkLnNp
emUgPSBFSU5BX0ZBTFNFOwogCi0gICAgaWYgKHNkLT5jaGFuZ2VkLnBvc2l0aW9uICYmICgoeCAh
PSBzZC0+dmlldy54KSB8fCAoeSAhPSBzZC0+dmlldy55KSkpIHsKLSAgICAgICAgZXZhc19vYmpl
Y3RfbW92ZShzZC0+bWFpbl9mcmFtZSwgeCwgeSk7Ci0gICAgICAgIGV2YXNfb2JqZWN0X21vdmUo
c2QtPmJhY2tpbmdfc3RvcmUsIHgsIHkpOwotICAgICAgICBldmFzX29iamVjdF9tb3ZlKHNkLT5l
dmVudHNfcmVjdCwgeCwgeSk7Ci0gICAgICAgIHNkLT5jaGFuZ2VkLmZyYW1lX3JlY3QgPSBFSU5B
X1RSVUU7Ci0gICAgICAgIHNkLT52aWV3LnggPSB4OwotICAgICAgICBzZC0+dmlldy55ID0geTsK
KyAgICBpZiAoc21hcnREYXRhLT5jaGFuZ2VkLnBvc2l0aW9uICYmICgoeCAhPSBzbWFydERhdGEt
PnZpZXcueCkgfHwgKHkgIT0gc21hcnREYXRhLT52aWV3LnkpKSkgeworICAgICAgICBldmFzX29i
amVjdF9tb3ZlKHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSwgeCwgeSk7CisgICAgICAgIGV2YXNfb2Jq
ZWN0X21vdmUoc21hcnREYXRhLT5iYWNraW5nX3N0b3JlLCB4LCB5KTsKKyAgICAgICAgZXZhc19v
YmplY3RfbW92ZShzbWFydERhdGEtPmV2ZW50c19yZWN0LCB4LCB5KTsKKyAgICAgICAgc21hcnRE
YXRhLT5jaGFuZ2VkLmZyYW1lX3JlY3QgPSBFSU5BX1RSVUU7CisgICAgICAgIHNtYXJ0RGF0YS0+
dmlldy54ID0geDsKKyAgICAgICAgc21hcnREYXRhLT52aWV3LnkgPSB5OwogICAgIH0KLSAgICBz
ZC0+Y2hhbmdlZC5wb3NpdGlvbiA9IEVJTkFfRkFMU0U7CisgICAgc21hcnREYXRhLT5jaGFuZ2Vk
LnBvc2l0aW9uID0gRUlOQV9GQUxTRTsKIAotICAgIGlmICghc2QtPmFwaS0+c2Nyb2xsc19wcm9j
ZXNzKHNkKSkKKyAgICBpZiAoIXNtYXJ0RGF0YS0+YXBpLT5zY3JvbGxzX3Byb2Nlc3Moc21hcnRE
YXRhKSkKICAgICAgICAgRVJSKCJmYWlsZWQgdG8gcHJvY2VzcyBzY3JvbGxzLiIpOwogICAgIF9l
d2tfdmlld19zY3JvbGxzX2ZsdXNoKHByaXYpOwogCi0gICAgaWYgKCFzZC0+YXBpLT5yZXBhaW50
c19wcm9jZXNzKHNkKSkKKyAgICBpZiAoIXNtYXJ0RGF0YS0+YXBpLT5yZXBhaW50c19wcm9jZXNz
KHNtYXJ0RGF0YSkpCiAgICAgICAgIEVSUigiZmFpbGVkIHRvIHByb2Nlc3MgcmVwYWludHMuIik7
CiAgICAgX2V3a192aWV3X3JlcGFpbnRzX2ZsdXNoKHByaXYpOwogCi0gICAgaWYgKHNkLT5jaGFu
Z2VkLmZyYW1lX3JlY3QpIHsKLSAgICAgICAgV2ViQ29yZTo6RnJhbWVWaWV3KiB2aWV3ID0gcHJp
di0+bWFpbl9mcmFtZS0+dmlldygpOworICAgIGlmIChzbWFydERhdGEtPmNoYW5nZWQuZnJhbWVf
cmVjdCkgeworICAgICAgICBXZWJDb3JlOjpGcmFtZVZpZXcqIHZpZXcgPSBwcml2LT5tYWluRnJh
bWUtPnZpZXcoKTsKICAgICAgICAgdmlldy0+ZnJhbWVSZWN0c0NoYW5nZWQoKTsgLyogZm9yY2Ug
dHJlZSB0byBnZXQgcG9zaXRpb24gZnJvbSByb290ICovCi0gICAgICAgIHNkLT5jaGFuZ2VkLmZy
YW1lX3JlY3QgPSBFSU5BX0ZBTFNFOworICAgICAgICBzbWFydERhdGEtPmNoYW5nZWQuZnJhbWVf
cmVjdCA9IEVJTkFfRkFMU0U7CiAgICAgfQogfQogCiBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21h
cnRfc2hvdyhFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1Jf
UkVUVVJOKGV3a1ZpZXcsIHNkKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1Zp
ZXcsIHNtYXJ0RGF0YSk7CiAKLSAgICBpZiAoZXZhc19vYmplY3RfY2xpcGVlc19nZXQoc2QtPmJh
c2UuY2xpcHBlcikpCi0gICAgICAgIGV2YXNfb2JqZWN0X3Nob3coc2QtPmJhc2UuY2xpcHBlcik7
Ci0gICAgZXZhc19vYmplY3Rfc2hvdyhzZC0+YmFja2luZ19zdG9yZSk7CisgICAgaWYgKGV2YXNf
b2JqZWN0X2NsaXBlZXNfZ2V0KHNtYXJ0RGF0YS0+YmFzZS5jbGlwcGVyKSkKKyAgICAgICAgZXZh
c19vYmplY3Rfc2hvdyhzbWFydERhdGEtPmJhc2UuY2xpcHBlcik7CisgICAgZXZhc19vYmplY3Rf
c2hvdyhzbWFydERhdGEtPmJhY2tpbmdfc3RvcmUpOwogfQogCiBzdGF0aWMgdm9pZCBfZXdrX3Zp
ZXdfc21hcnRfaGlkZShFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9H
RVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJO
KGV3a1ZpZXcsIHNtYXJ0RGF0YSk7CiAKLSAgICBldmFzX29iamVjdF9oaWRlKHNkLT5iYXNlLmNs
aXBwZXIpOwotICAgIGV2YXNfb2JqZWN0X2hpZGUoc2QtPmJhY2tpbmdfc3RvcmUpOworICAgIGV2
YXNfb2JqZWN0X2hpZGUoc21hcnREYXRhLT5iYXNlLmNsaXBwZXIpOworICAgIGV2YXNfb2JqZWN0
X2hpZGUoc21hcnREYXRhLT5iYWNraW5nX3N0b3JlKTsKIH0KIAogc3RhdGljIEVpbmFfQm9vbCBf
ZXdrX3ZpZXdfc21hcnRfY29udGVudHNfcmVzaXplKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0
RGF0YSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQpAQCAtOTIxLDI5ICs5MjEsMjkgQEAgc3RhdGlj
IEVpbmFfQm9vbCBfZXdrX3ZpZXdfc21hcnRfY29udGVudHNfcmVzaXplKEV3a19WaWV3X1NtYXJ0
X0RhdGEqIHNtYXJ0RGF0YSwKIHN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3NtYXJ0X3pvb21f
c2V0KEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSwgZmxvYXQgem9vbSwgRXZhc19Db29y
ZCBjZW50ZXJYLCBFdmFzX0Nvb3JkIGNlbnRlclkpCiB7CiAgICAgZG91YmxlIHB4LCBweTsKLSAg
ICBFdmFzX0Nvb3JkIHgsIHksIHcsIGg7Ci0gICAgRWluYV9Cb29sIHJldDsKKyAgICBFdmFzX0Nv
b3JkIHgsIHksIHdpZHRoLCBoZWlnaHQ7CisgICAgRWluYV9Cb29sIHJlc3VsdDsKIAotICAgIGV3
a19mcmFtZV9zY3JvbGxfc2l6ZV9nZXQoc21hcnREYXRhLT5tYWluX2ZyYW1lLCAmdywgJmgpOwor
ICAgIGV3a19mcmFtZV9zY3JvbGxfc2l6ZV9nZXQoc21hcnREYXRhLT5tYWluX2ZyYW1lLCAmd2lk
dGgsICZoZWlnaHQpOwogICAgIGV3a19mcmFtZV9zY3JvbGxfcG9zX2dldChzbWFydERhdGEtPm1h
aW5fZnJhbWUsICZ4LCAmeSk7CiAKLSAgICBpZiAodyArIHNtYXJ0RGF0YS0+dmlldy53ID4gMCkK
LSAgICAgICAgcHggPSBzdGF0aWNfY2FzdDxkb3VibGU+KHggKyBjZW50ZXJYKSAvICh3ICsgc21h
cnREYXRhLT52aWV3LncpOworICAgIGlmICh3aWR0aCArIHNtYXJ0RGF0YS0+dmlldy53ID4gMCkK
KyAgICAgICAgcHggPSBzdGF0aWNfY2FzdDxkb3VibGU+KHggKyBjZW50ZXJYKSAvICh3aWR0aCAr
IHNtYXJ0RGF0YS0+dmlldy53KTsKICAgICBlbHNlCiAgICAgICAgIHB4ID0gMC4wOwogCi0gICAg
aWYgKGggKyBzbWFydERhdGEtPnZpZXcuaCA+IDApCi0gICAgICAgIHB5ID0gc3RhdGljX2Nhc3Q8
ZG91YmxlPih5ICsgY2VudGVyWSkgLyAoaCArIHNtYXJ0RGF0YS0+dmlldy5oKTsKKyAgICBpZiAo
aGVpZ2h0ICsgc21hcnREYXRhLT52aWV3LmggPiAwKQorICAgICAgICBweSA9IHN0YXRpY19jYXN0
PGRvdWJsZT4oeSArIGNlbnRlclkpIC8gKGhlaWdodCArIHNtYXJ0RGF0YS0+dmlldy5oKTsKICAg
ICBlbHNlCiAgICAgICAgIHB5ID0gMC4wOwogCi0gICAgcmV0ID0gZXdrX2ZyYW1lX3BhZ2Vfem9v
bV9zZXQoc21hcnREYXRhLT5tYWluX2ZyYW1lLCB6b29tKTsKKyAgICByZXN1bHQgPSBld2tfZnJh
bWVfcGFnZV96b29tX3NldChzbWFydERhdGEtPm1haW5fZnJhbWUsIHpvb20pOwogCi0gICAgZXdr
X2ZyYW1lX3Njcm9sbF9zaXplX2dldChzbWFydERhdGEtPm1haW5fZnJhbWUsICZ3LCAmaCk7Ci0g
ICAgeCA9ICh3ICsgc21hcnREYXRhLT52aWV3LncpICogcHggLSBjZW50ZXJYOwotICAgIHkgPSAo
aCArIHNtYXJ0RGF0YS0+dmlldy5oKSAqIHB5IC0gY2VudGVyWTsKKyAgICBld2tfZnJhbWVfc2Ny
b2xsX3NpemVfZ2V0KHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSwgJndpZHRoLCAmaGVpZ2h0KTsKKyAg
ICB4ID0gKHdpZHRoICsgc21hcnREYXRhLT52aWV3LncpICogcHggLSBjZW50ZXJYOworICAgIHkg
PSAoaGVpZ2h0ICsgc21hcnREYXRhLT52aWV3LmgpICogcHkgLSBjZW50ZXJZOwogICAgIGV3a19m
cmFtZV9zY3JvbGxfc2V0KHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSwgeCwgeSk7Ci0gICAgcmV0dXJu
IHJldDsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21h
cnRfZmx1c2goRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhKQpAQCAtOTgyLDggKzk4Miw4
IEBAIHN0YXRpYyB2b2lkIF9ld2tfdmlld196b29tX2FuaW1hdGVkX21hcmtfc3RvcChFd2tfVmll
d19TbWFydF9EYXRhKiBzbWFydERhdGEpCiBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfem9vbV9hbmlt
YXRlZF9maW5pc2goRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhKQogewogICAgIEVXS19W
SUVXX1BSSVZfR0VUKHNtYXJ0RGF0YSwgcHJpdik7Ci0gICAgZWNvcmVfYW5pbWF0b3JfZGVsKHBy
aXYtPmFuaW1hdGVkX3pvb20uYW5pbWF0b3IpOwotICAgIHByaXYtPmFuaW1hdGVkX3pvb20uYW5p
bWF0b3IgPSAwOworICAgIGVjb3JlX2FuaW1hdG9yX2RlbChwcml2LT5hbmltYXRlZFpvb20uYW5p
bWF0b3IpOworICAgIHByaXYtPmFuaW1hdGVkWm9vbS5hbmltYXRvciA9IDA7CiAgICAgX2V3a192
aWV3X3pvb21fYW5pbWF0ZWRfbWFya19zdG9wKHNtYXJ0RGF0YSk7CiAgICAgZXZhc19vYmplY3Rf
c21hcnRfY2FsbGJhY2tfY2FsbChzbWFydERhdGEtPnNlbGYsICJ6b29tLGFuaW1hdGVkLGVuZCIs
IDApOwogfQpAQCAtOTkxLDY5ICs5OTEsNjkgQEAgc3RhdGljIHZvaWQgX2V3a192aWV3X3pvb21f
YW5pbWF0ZWRfZmluaXNoKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSkKIHN0YXRpYyBm
bG9hdCBfZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9jdXJyZW50KEV3a19WaWV3X1ByaXZhdGVfRGF0
YSogcHJpdikKIHsKICAgICBkb3VibGUgbm93ID0gZWNvcmVfbG9vcF90aW1lX2dldCgpOwotICAg
IGRvdWJsZSBkZWx0YSA9IG5vdyAtIHByaXYtPmFuaW1hdGVkX3pvb20udGltZS5zdGFydDsKKyAg
ICBkb3VibGUgZGVsdGEgPSBub3cgLSBwcml2LT5hbmltYXRlZFpvb20udGltZS5zdGFydDsKIAot
ICAgIGlmIChkZWx0YSA+IHByaXYtPmFuaW1hdGVkX3pvb20udGltZS5kdXJhdGlvbikKLSAgICAg
ICAgZGVsdGEgPSBwcml2LT5hbmltYXRlZF96b29tLnRpbWUuZHVyYXRpb247CisgICAgaWYgKGRl
bHRhID4gcHJpdi0+YW5pbWF0ZWRab29tLnRpbWUuZHVyYXRpb24pCisgICAgICAgIGRlbHRhID0g
cHJpdi0+YW5pbWF0ZWRab29tLnRpbWUuZHVyYXRpb247CiAgICAgaWYgKGRlbHRhIDwgMC4wKSAv
LyB0aW1lIHdlbnQgYmFjaywgY2xvY2sgYWRqdXN0ZWQ/CiAgICAgICAgIGRlbHRhID0gMC4wOwog
Ci0gICAgZGVsdGEgLz0gcHJpdi0+YW5pbWF0ZWRfem9vbS50aW1lLmR1cmF0aW9uOworICAgIGRl
bHRhIC89IHByaXYtPmFuaW1hdGVkWm9vbS50aW1lLmR1cmF0aW9uOwogCi0gICAgcmV0dXJuICgo
cHJpdi0+YW5pbWF0ZWRfem9vbS56b29tLnJhbmdlICogZGVsdGEpCi0gICAgICAgICAgICArIHBy
aXYtPmFuaW1hdGVkX3pvb20uem9vbS5zdGFydCk7CisgICAgcmV0dXJuICgocHJpdi0+YW5pbWF0
ZWRab29tLnpvb20ucmFuZ2UgKiBkZWx0YSkKKyAgICAgICAgICAgICsgcHJpdi0+YW5pbWF0ZWRa
b29tLnpvb20uc3RhcnQpOwogfQogCiBzdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld196b29tX2Fu
aW1hdG9yX2NiKHZvaWQqIGRhdGEpCiB7Ci0gICAgRXdrX1ZpZXdfU21hcnRfRGF0YSogc2QgPSBz
dGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZGF0YSk7Ci0gICAgRXZhc19Db29yZCBj
eCwgY3k7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVQoc2QsIHByaXYpOworICAgIEV3a19WaWV3X1Nt
YXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1NtYXJ0X0RhdGEqPihk
YXRhKTsKKyAgICBFdmFzX0Nvb3JkIGNlbnRlclgsIGNlbnRlclk7CisgICAgRVdLX1ZJRVdfUFJJ
Vl9HRVQoc21hcnREYXRhLCBwcml2KTsKICAgICBkb3VibGUgbm93ID0gZWNvcmVfbG9vcF90aW1l
X2dldCgpOwogCi0gICAgY3ggPSBwcml2LT5hbmltYXRlZF96b29tLmNlbnRlci54OwotICAgIGN5
ID0gcHJpdi0+YW5pbWF0ZWRfem9vbS5jZW50ZXIueTsKKyAgICBjZW50ZXJYID0gcHJpdi0+YW5p
bWF0ZWRab29tLmNlbnRlci54OworICAgIGNlbnRlclkgPSBwcml2LT5hbmltYXRlZFpvb20uY2Vu
dGVyLnk7CiAKICAgICAvLyBUT0RPOiBwcm9ncmVzc2l2ZWx5IGNlbnRlciAoY3gsIGN5KSAtPiAo
dmlldy54ICsgdmlldy5oLzIsIHZpZXcueSArIHZpZXcuaC8yKQotICAgIGlmIChjeCA+PSBzZC0+
dmlldy53KQotICAgICAgICBjeCA9IHNkLT52aWV3LncgLSAxOwotICAgIGlmIChjeSA+PSBzZC0+
dmlldy5oKQotICAgICAgICBjeSA9IHNkLT52aWV3LmggLSAxOwotCi0gICAgaWYgKChub3cgPj0g
cHJpdi0+YW5pbWF0ZWRfem9vbS50aW1lLmVuZCkKLSAgICAgICAgfHwgKG5vdyA8IHByaXYtPmFu
aW1hdGVkX3pvb20udGltZS5zdGFydCkpIHsKLSAgICAgICAgX2V3a192aWV3X3pvb21fYW5pbWF0
ZWRfZmluaXNoKHNkKTsKLSAgICAgICAgZXdrX3ZpZXdfem9vbV9zZXQoc2QtPnNlbGYsIHByaXYt
PmFuaW1hdGVkX3pvb20uem9vbS5lbmQsIGN4LCBjeSk7Ci0gICAgICAgIHNkLT5hcGktPnNjLmNh
bGN1bGF0ZShzZC0+c2VsZik7CisgICAgaWYgKGNlbnRlclggPj0gc21hcnREYXRhLT52aWV3Lncp
CisgICAgICAgIGNlbnRlclggPSBzbWFydERhdGEtPnZpZXcudyAtIDE7CisgICAgaWYgKGNlbnRl
clkgPj0gc21hcnREYXRhLT52aWV3LmgpCisgICAgICAgIGNlbnRlclkgPSBzbWFydERhdGEtPnZp
ZXcuaCAtIDE7CisKKyAgICBpZiAoKG5vdyA+PSBwcml2LT5hbmltYXRlZFpvb20udGltZS5lbmQp
CisgICAgICAgIHx8IChub3cgPCBwcml2LT5hbmltYXRlZFpvb20udGltZS5zdGFydCkpIHsKKyAg
ICAgICAgX2V3a192aWV3X3pvb21fYW5pbWF0ZWRfZmluaXNoKHNtYXJ0RGF0YSk7CisgICAgICAg
IGV3a192aWV3X3pvb21fc2V0KHNtYXJ0RGF0YS0+c2VsZiwgcHJpdi0+YW5pbWF0ZWRab29tLnpv
b20uZW5kLCBjZW50ZXJYLCBjZW50ZXJZKTsKKyAgICAgICAgc21hcnREYXRhLT5hcGktPnNjLmNh
bGN1bGF0ZShzbWFydERhdGEtPnNlbGYpOwogICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKICAg
ICB9CiAKLSAgICBzZC0+YW5pbWF0ZWRfem9vbS56b29tLmN1cnJlbnQgPSBfZXdrX3ZpZXdfem9v
bV9hbmltYXRlZF9jdXJyZW50KHByaXYpOwotICAgIHNkLT5hcGktPnpvb21fd2Vha19zZXQoc2Qs
IHNkLT5hbmltYXRlZF96b29tLnpvb20uY3VycmVudCwgY3gsIGN5KTsKKyAgICBzbWFydERhdGEt
PmFuaW1hdGVkX3pvb20uem9vbS5jdXJyZW50ID0gX2V3a192aWV3X3pvb21fYW5pbWF0ZWRfY3Vy
cmVudChwcml2KTsKKyAgICBzbWFydERhdGEtPmFwaS0+em9vbV93ZWFrX3NldChzbWFydERhdGEs
IHNtYXJ0RGF0YS0+YW5pbWF0ZWRfem9vbS56b29tLmN1cnJlbnQsIGNlbnRlclgsIGNlbnRlclkp
OwogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKIHN0YXRpYyB2b2lkIF9ld2tfdmlld196b29t
X2FuaW1hdGlvbl9zdGFydChFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEpCiB7CiAgICAg
RVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdik7Ci0gICAgaWYgKHBy
aXYtPmFuaW1hdGVkX3pvb20uYW5pbWF0b3IpCisgICAgaWYgKHByaXYtPmFuaW1hdGVkWm9vbS5h
bmltYXRvcikKICAgICAgICAgcmV0dXJuOwotICAgIHByaXYtPmFuaW1hdGVkX3pvb20uYW5pbWF0
b3IgPSBlY29yZV9hbmltYXRvcl9hZGQKKyAgICBwcml2LT5hbmltYXRlZFpvb20uYW5pbWF0b3Ig
PSBlY29yZV9hbmltYXRvcl9hZGQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIChfZXdrX3ZpZXdfem9vbV9hbmltYXRvcl9jYiwgc21hcnREYXRhKTsKIH0KIAogc3RhdGlj
IFdlYkNvcmU6OlZpZXdwb3J0QXR0cmlidXRlcyBfZXdrX3ZpZXdfdmlld3BvcnRfYXR0cmlidXRl
c19jb21wdXRlKGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NE
X0dFVChld2tWaWV3LCBzZCk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVQoc2QsIHByaXYpOworICAg
IEVXS19WSUVXX1NEX0dFVChld2tWaWV3LCBzbWFydERhdGEpOworICAgIEVXS19WSUVXX1BSSVZf
R0VUKHNtYXJ0RGF0YSwgcHJpdik7CiAKLSAgICBpbnQgZGVza3RvcF93aWR0aCA9IDk4MDsKLSAg
ICBpbnQgZGV2aWNlX2RwaSA9IGV3a191dGlsX2RwaV9nZXQoKTsKKyAgICBpbnQgZGVza3RvcFdp
ZHRoID0gOTgwOworICAgIGludCBkZXZpY2VEUEkgPSBld2tfdXRpbF9kcGlfZ2V0KCk7CiAKLSAg
ICBXZWJDb3JlOjpJbnRSZWN0IGF2YWlsYWJsZV9yZWN0ID0gZW5jbG9zaW5nSW50UmVjdChwcml2
LT5wYWdlLT5jaHJvbWUoKS0+Y2xpZW50KCktPnBhZ2VSZWN0KCkpOwotICAgIFdlYkNvcmU6Oklu
dFJlY3QgZGV2aWNlX3JlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KHByaXYtPnBhZ2UtPmNocm9tZSgp
LT5jbGllbnQoKS0+d2luZG93UmVjdCgpKTsKKyAgICBXZWJDb3JlOjpJbnRSZWN0IGF2YWlsYWJs
ZVJlY3QgPSBlbmNsb3NpbmdJbnRSZWN0KHByaXYtPnBhZ2UtPmNocm9tZSgpLT5jbGllbnQoKS0+
cGFnZVJlY3QoKSk7CisgICAgV2ViQ29yZTo6SW50UmVjdCBkZXZpY2VSZWN0ID0gZW5jbG9zaW5n
SW50UmVjdChwcml2LT5wYWdlLT5jaHJvbWUoKS0+Y2xpZW50KCktPndpbmRvd1JlY3QoKSk7CiAK
LSAgICBXZWJDb3JlOjpWaWV3cG9ydEF0dHJpYnV0ZXMgYXR0cmlidXRlcyA9IFdlYkNvcmU6OmNv
bXB1dGVWaWV3cG9ydEF0dHJpYnV0ZXMocHJpdi0+dmlld3BvcnRfYXJndW1lbnRzLCBkZXNrdG9w
X3dpZHRoLCBkZXZpY2VfcmVjdC53aWR0aCgpLCBkZXZpY2VfcmVjdC5oZWlnaHQoKSwgZGV2aWNl
X2RwaSwgYXZhaWxhYmxlX3JlY3Quc2l6ZSgpKTsKKyAgICBXZWJDb3JlOjpWaWV3cG9ydEF0dHJp
YnV0ZXMgYXR0cmlidXRlcyA9IFdlYkNvcmU6OmNvbXB1dGVWaWV3cG9ydEF0dHJpYnV0ZXMocHJp
di0+dmlld3BvcnRBcmd1bWVudHMsIGRlc2t0b3BXaWR0aCwgZGV2aWNlUmVjdC53aWR0aCgpLCBk
ZXZpY2VSZWN0LmhlaWdodCgpLCBkZXZpY2VEUEksIGF2YWlsYWJsZVJlY3Quc2l6ZSgpKTsKIAog
ICAgIHJldHVybiBhdHRyaWJ1dGVzOwogfQpAQCAtMTEyMywxMCArMTEyMywxMCBAQCBFaW5hX0Jv
b2wgZXdrX3ZpZXdfYmFzZV9zbWFydF9zZXQoRXdrX1ZpZXdfU21hcnRfQ2xhc3MqIGFwaSkKIAog
dm9pZCBld2tfdmlld19maXhlZF9sYXlvdXRfc2l6ZV9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcs
IEV2YXNfQ29vcmQgd2lkdGgsIEV2YXNfQ29vcmQgaGVpZ2h0KQogewotICAgIEVXS19WSUVXX1NE
X0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JF
VFVSTihzZCwgcHJpdik7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBz
bWFydERhdGEpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHBy
aXYpOwogCi0gICAgV2ViQ29yZTo6RnJhbWVWaWV3KiB2aWV3ID0gcHJpdi0+bWFpbl9mcmFtZS0+
dmlldygpOworICAgIFdlYkNvcmU6OkZyYW1lVmlldyogdmlldyA9IHByaXYtPm1haW5GcmFtZS0+
dmlldygpOwogICAgIGlmICh3aWR0aCA8PSAwICYmIGhlaWdodCA8PSAwKSB7CiAgICAgICAgIGlm
ICghdmlldy0+dXNlRml4ZWRMYXlvdXQoKSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTExNTEs
OSArMTE1MSw5IEBAIHZvaWQgZXdrX3ZpZXdfZml4ZWRfbGF5b3V0X3NpemVfZ2V0KGNvbnN0IEV2
YXNfT2JqZWN0KiBld2tWaWV3LCBFdmFzX0Nvb3JkKiB3aWR0CiAgICAgICAgICp3aWR0aCA9IDA7
CiAgICAgaWYgKGhlaWdodCkKICAgICAgICAgKmhlaWdodCA9IDA7Ci0gICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVU
VVJOKHNkLCBwcml2KTsKLSAgICBXZWJDb3JlOjpGcmFtZVZpZXcqIHZpZXcgPSBwcml2LT5tYWlu
X2ZyYW1lLT52aWV3KCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBz
bWFydERhdGEpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHBy
aXYpOworICAgIFdlYkNvcmU6OkZyYW1lVmlldyogdmlldyA9IHByaXYtPm1haW5GcmFtZS0+dmll
dygpOwogICAgIGlmICh2aWV3LT51c2VGaXhlZExheW91dCgpKSB7CiAgICAgICAgIFdlYkNvcmU6
OkludFNpemUgc2l6ZSA9IHZpZXctPmZpeGVkTGF5b3V0U2l6ZSgpOwogICAgICAgICBpZiAod2lk
dGgpCkBAIC0xMTY1LDEyICsxMTY1LDEyIEBAIHZvaWQgZXdrX3ZpZXdfZml4ZWRfbGF5b3V0X3Np
emVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFdmFzX0Nvb3JkKiB3aWR0CiAKIHZv
aWQgZXdrX3ZpZXdfdGhlbWVfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBjaGFyKiBw
YXRoKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QpOwotICAg
IEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdik7CisgICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEpOworICAgIEVXS19WSUVXX1BSSVZfR0VU
X09SX1JFVFVSTihzbWFydERhdGEsIHByaXYpOwogICAgIGlmICghZWluYV9zdHJpbmdzaGFyZV9y
ZXBsYWNlKCZwcml2LT5zZXR0aW5ncy50aGVtZSwgcGF0aCkpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIFdlYkNvcmU6OkZyYW1lVmlldyogdmlldyA9IHByaXYtPm1haW5fZnJhbWUtPnZpZXcoKTsK
KyAgICBXZWJDb3JlOjpGcmFtZVZpZXcqIHZpZXcgPSBwcml2LT5tYWluRnJhbWUtPnZpZXcoKTsK
ICAgICBpZiAodmlldykgewogICAgICAgICB2aWV3LT5zZXRFZGplVGhlbWUoV1RGOjpTdHJpbmco
cGF0aCkpOwogICAgICAgICBwcml2LT5wYWdlLT50aGVtZSgpLT50aGVtZUNoYW5nZWQoKTsKQEAg
LTExODAsMjEgKzExODAsMjEgQEAgdm9pZCBld2tfdmlld190aGVtZV9zZXQoRXZhc19PYmplY3Qq
IGV3a1ZpZXcsIGNvbnN0IGNoYXIqIHBhdGgpCiAKIGNvbnN0IGNoYXIqIGV3a192aWV3X3RoZW1l
X2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRf
T1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAwKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRV
Uk4oc2QsIHByaXYsIDApOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywg
c21hcnREYXRhLCAwKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRh
LCBwcml2LCAwKTsKICAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MudGhlbWU7CiB9CiAKIEV2YXNf
T2JqZWN0KiBld2tfdmlld19mcmFtZV9tYWluX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmll
dykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAwKTsKLSAg
ICByZXR1cm4gc2QtPm1haW5fZnJhbWU7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihl
d2tWaWV3LCBzbWFydERhdGEsIDApOworICAgIHJldHVybiBzbWFydERhdGEtPm1haW5fZnJhbWU7
CiB9CiAKIEV2YXNfT2JqZWN0KiBld2tfdmlld19mcmFtZV9mb2N1c2VkX2dldChjb25zdCBFdmFz
X09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1Zp
ZXcsIHNkLCAwKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIDAp
OworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCAwKTsK
KyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCAwKTsKIAog
ICAgIFdlYkNvcmU6OkZyYW1lKiBjb3JlID0gcHJpdi0+cGFnZS0+Zm9jdXNDb250cm9sbGVyKCkt
PmZvY3VzZWRGcmFtZSgpOwogICAgIGlmICghY29yZSkKQEAgLTEyMDgsMzMgKzEyMDgsMzMgQEAg
RXZhc19PYmplY3QqIGV3a192aWV3X2ZyYW1lX2ZvY3VzZWRfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0
KiBld2tWaWV3KQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfdXJpX3NldChFdmFzX09iamVjdCogZXdr
VmlldywgY29uc3QgY2hhciogdXJpKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIHJldHVybiBld2tfZnJhbWVfdXJpX3NldChz
ZC0+bWFpbl9mcmFtZSwgdXJpKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1Zp
ZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgcmV0dXJuIGV3a19mcmFtZV91cmlfc2V0
KHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSwgdXJpKTsKIH0KIAogY29uc3QgY2hhciogZXdrX3ZpZXdf
dXJpX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9H
RVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAwKTsKLSAgICByZXR1cm4gZXdrX2ZyYW1lX3VyaV9n
ZXQoc2QtPm1haW5fZnJhbWUpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmll
dywgc21hcnREYXRhLCAwKTsKKyAgICByZXR1cm4gZXdrX2ZyYW1lX3VyaV9nZXQoc21hcnREYXRh
LT5tYWluX2ZyYW1lKTsKIH0KIAogY29uc3QgY2hhciogZXdrX3ZpZXdfdGl0bGVfZ2V0KGNvbnN0
IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrVmlldywgc2QsIDApOwotICAgIHJldHVybiBld2tfZnJhbWVfdGl0bGVfZ2V0KHNkLT5tYWlu
X2ZyYW1lKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0
YSwgMCk7CisgICAgcmV0dXJuIGV3a19mcmFtZV90aXRsZV9nZXQoc21hcnREYXRhLT5tYWluX2Zy
YW1lKTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X2VkaXRhYmxlX2dldChjb25zdCBFdmFzX09i
amVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcs
IHNkLCBFSU5BX0ZBTFNFKTsKLSAgICByZXR1cm4gZXdrX2ZyYW1lX2VkaXRhYmxlX2dldChzZC0+
bWFpbl9mcmFtZSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFy
dERhdGEsIEVJTkFfRkFMU0UpOworICAgIHJldHVybiBld2tfZnJhbWVfZWRpdGFibGVfZ2V0KHNt
YXJ0RGF0YS0+bWFpbl9mcmFtZSk7CiB9CiAKIHZvaWQgZXdrX3ZpZXdfYmdfY29sb3Jfc2V0KEV2
YXNfT2JqZWN0KiBld2tWaWV3LCBpbnQgcmVkLCBpbnQgZ3JlZW4sIGludCBibHVlLCBpbnQgYWxw
aGEpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCk7Ci0gICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2QtPmFwaSk7Ci0gICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk4oc2QtPmFwaS0+YmdfY29sb3Jfc2V0KTsKKyAgICBFV0tfVklFV19TRF9HRVRf
T1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk4oc21hcnREYXRhLT5hcGkpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNt
YXJ0RGF0YS0+YXBpLT5iZ19jb2xvcl9zZXQpOwogCiAgICAgaWYgKGFscGhhIDwgMCkgewogICAg
ICAgICBXUk4oIkFscGhhIGxlc3MgdGhhbiB6ZXJvICglZCkuIiwgYWxwaGEpOwpAQCAtMTI0NCwy
OCArMTI0NCwyOCBAQCB2b2lkIGV3a192aWV3X2JnX2NvbG9yX3NldChFdmFzX09iamVjdCogZXdr
VmlldywgaW50IHJlZCwgaW50IGdyZWVuLCBpbnQgYmx1ZSwgaQogICAgICAgICBhbHBoYSA9IDI1
NTsKICAgICB9CiAKLSNkZWZpbmUgQ0hFQ0tfUFJFTVVMX0NPTE9SKGMsIGEpICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBpZiAoYyA8IDApIHsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAg
V1JOKCJDb2xvciBjb21wb25lbnQgIiAjYyAiIGlzIGxlc3MgdGhhbiB6ZXJvICglZCkuIiwgYyk7
ICAgICAgICAgXAotICAgICAgICBjID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gZWxzZSBpZiAoYyA+IGEpIHsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBX
Uk4oIkNvbG9yIGNvbXBvbmVudCAiICNjICIgaXMgZ3JlYXRlciB0aGFuIGFscGhhICglZCwgYWxw
aGE9JWQpLiIsIFwKLSAgICAgICAgICAgIGMsIGEpOyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgYyA9IGE7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyNkZWZpbmUg
Q0hFQ0tfUFJFTVVMX0NPTE9SKGNvbG9yLCBhbHBoYSkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgIGlmIChjb2xvciA8IDApIHsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgV1JOKCJDb2xv
ciBjb21wb25lbnQgIiAjY29sb3IgIiBpcyBsZXNzIHRoYW4gemVybyAoJWQpLiIsIGNvbG9yKTsg
ICAgICAgICBcCisgICAgICAgIGNvbG9yID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gZWxzZSBpZiAoY29sb3IgPiBh
bHBoYSkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgICAgIFdSTigiQ29sb3IgY29tcG9uZW50ICIgI2NvbG9yICIgaXMgZ3JlYXRlciB0aGFu
IGFscGhhICglZCwgYWxwaGE9JWQpLiIsIFwKKyAgICAgICAgICAgIGNvbG9yLCBhbHBoYSk7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
ICAgICBjb2xvciA9IGFscGhhOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCiAgICAgfQogICAgIENIRUNLX1BSRU1VTF9DT0xPUihyZWQs
IGFscGhhKTsKICAgICBDSEVDS19QUkVNVUxfQ09MT1IoZ3JlZW4sIGFscGhhKTsKICAgICBDSEVD
S19QUkVNVUxfQ09MT1IoYmx1ZSwgYWxwaGEpOwogI3VuZGVmIENIRUNLX1BSRU1VTF9DT0xPUgog
Ci0gICAgc2QtPmJnX2NvbG9yLnIgPSByZWQ7Ci0gICAgc2QtPmJnX2NvbG9yLmcgPSBncmVlbjsK
LSAgICBzZC0+YmdfY29sb3IuYiA9IGJsdWU7Ci0gICAgc2QtPmJnX2NvbG9yLmEgPSBhbHBoYTsK
KyAgICBzbWFydERhdGEtPmJnX2NvbG9yLnIgPSByZWQ7CisgICAgc21hcnREYXRhLT5iZ19jb2xv
ci5nID0gZ3JlZW47CisgICAgc21hcnREYXRhLT5iZ19jb2xvci5iID0gYmx1ZTsKKyAgICBzbWFy
dERhdGEtPmJnX2NvbG9yLmEgPSBhbHBoYTsKIAotICAgIHNkLT5hcGktPmJnX2NvbG9yX3NldChz
ZCwgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpOworICAgIHNtYXJ0RGF0YS0+YXBpLT5iZ19jb2xv
cl9zZXQoc21hcnREYXRhLCByZWQsIGdyZWVuLCBibHVlLCBhbHBoYSk7CiAKLSAgICBXZWJDb3Jl
OjpGcmFtZVZpZXcqIHZpZXcgPSBzZC0+X3ByaXYtPm1haW5fZnJhbWUtPnZpZXcoKTsKKyAgICBX
ZWJDb3JlOjpGcmFtZVZpZXcqIHZpZXcgPSBzbWFydERhdGEtPl9wcml2LT5tYWluRnJhbWUtPnZp
ZXcoKTsKICAgICBpZiAodmlldykgewogICAgICAgICBXZWJDb3JlOjpDb2xvciBjb2xvcjsKIApA
QCAtMTI5MCwyMSArMTI5MCwyMSBAQCB2b2lkIGV3a192aWV3X2JnX2NvbG9yX2dldChjb25zdCBF
dmFzX09iamVjdCogZXdrVmlldywgaW50KiByZWQsIGludCogZ3JlZW4sIGludAogICAgICAgICAq
Ymx1ZSA9IDA7CiAgICAgaWYgKGFscGhhKQogICAgICAgICAqYWxwaGEgPSAwOwotICAgIEVXS19W
SUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QpOworICAgIEVXS19WSUVXX1NEX0dFVF9P
Ul9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhKTsKICAgICBpZiAocmVkKQotICAgICAgICAqcmVk
ID0gc2QtPmJnX2NvbG9yLnI7CisgICAgICAgICpyZWQgPSBzbWFydERhdGEtPmJnX2NvbG9yLnI7
CiAgICAgaWYgKGdyZWVuKQotICAgICAgICAqZ3JlZW4gPSBzZC0+YmdfY29sb3IuZzsKKyAgICAg
ICAgKmdyZWVuID0gc21hcnREYXRhLT5iZ19jb2xvci5nOwogICAgIGlmIChibHVlKQotICAgICAg
ICAqYmx1ZSA9IHNkLT5iZ19jb2xvci5iOworICAgICAgICAqYmx1ZSA9IHNtYXJ0RGF0YS0+Ymdf
Y29sb3IuYjsKICAgICBpZiAoYWxwaGEpCi0gICAgICAgICphbHBoYSA9IHNkLT5iZ19jb2xvci5h
OworICAgICAgICAqYWxwaGEgPSBzbWFydERhdGEtPmJnX2NvbG9yLmE7CiB9CiAKIEVpbmFfQm9v
bCBld2tfdmlld190ZXh0X3NlYXJjaChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldywgY29uc3Qg
Y2hhciogc3RyaW5nLCBFaW5hX0Jvb2wgY2FzZVNlbnNpdGl2ZSwgRWluYV9Cb29sIGZvcndhcmQs
IEVpbmFfQm9vbCB3cmFwKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmll
dywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwg
cHJpdiwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3
LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVS
TihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOX1ZBTChzdHJpbmcsIEVJTkFfRkFMU0UpOwogICAgIFdURjo6VGV4dENhc2VTZW5zaXRp
dml0eSBzZW5zaXRpdmU7CiAgICAgV2ViQ29yZTo6RmluZERpcmVjdGlvbiBkaXJlY3Rpb247CkBA
IC0xMzI1LDE4ICsxMzI1LDE4IEBAIEVpbmFfQm9vbCBld2tfdmlld190ZXh0X3NlYXJjaChjb25z
dCBFdmFzX09iamVjdCogZXdrVmlldywgY29uc3QgY2hhciogc3RyaW5nLCBFCiAvKioKICAqIE1h
cmsgbWF0Y2hlcyB0aGUgZ2l2ZW4gdGV4dCBzdHJpbmcgaW4gZG9jdW1lbnQuCiAgKgotICogQHBh
cmFtIG8gdmlldyBvYmplY3Qgd2hlcmUgdG8gc2VhcmNoIHRleHQuCisgKiBAcGFyYW0gZXdrVmll
dyB2aWV3IG9iamVjdCB3aGVyZSB0byBzZWFyY2ggdGV4dC4KICAqIEBwYXJhbSBzdHJpbmcgcmVm
ZXJlbmNlIHN0cmluZyB0byBtYXRjaC4KICAqIEBwYXJhbSBjYXNlU2Vuc2l0aXZlIGlmIG1hdGNo
IHNob3VsZCBiZSBjYXNlIHNlbnNpdGl2ZSBvciBub3QuCi0gKiBAcGFyYW0gaGlnaGxpZ2h0IGlm
IG1hdGNoZXMgc2hvdWxkIGJlIGhpZ2hsaWdodGVkLgorICogQHBhcmFtIGhlaWdodGlnaGxpZ2h0
IGlmIG1hdGNoZXMgc2hvdWxkIGJlIGhpZ2hsaWdodGVkLgogICogQHBhcmFtIGxpbWl0IG1heGlt
dW0gYW1vdW50IG9mIG1hdGNoZXMsIG9yIHplcm8gdG8gdW5saW1pdGVkLgogICoKICAqIEByZXR1
cm4gbnVtYmVyIG9mIG1hdGNoZXMuCiAgKi8KIHVuc2lnbmVkIGludCBld2tfdmlld190ZXh0X21h
dGNoZXNfbWFyayhFdmFzX09iamVjdCogZXdrVmlldywgY29uc3QgY2hhciogc3RyaW5nLCBFaW5h
X0Jvb2wgY2FzZVNlbnNpdGl2ZSwgRWluYV9Cb29sIGhpZ2hsaWdodCwgdW5zaWduZWQgaW50IGxp
bWl0KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIDApOwot
ICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgMCk7CisgICAgRVdLX1ZJ
RVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIDApOworICAgIEVXS19WSUVX
X1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIDApOwogICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOX1ZBTChzdHJpbmcsIDApOwogICAgIFdURjo6VGV4dENhc2VTZW5zaXRp
dml0eSBzZW5zaXRpdmU7CiAKQEAgLTEzNTAsMzggKzEzNTAsMzggQEAgdW5zaWduZWQgaW50IGV3
a192aWV3X3RleHRfbWF0Y2hlc19tYXJrKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBjaGFy
KiBzdHJpbmcKIAogRWluYV9Cb29sIGV3a192aWV3X3RleHRfbWF0Y2hlc191bm1hcmtfYWxsKEV2
YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdr
Vmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihz
ZCwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tW
aWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JF
VFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIHByaXYtPnBhZ2UtPnVubWFy
a0FsbFRleHRNYXRjaGVzKCk7CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAogRWluYV9Cb29s
IGV3a192aWV3X3RleHRfbWF0Y2hlc19oaWdobGlnaHRfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3
LCBFaW5hX0Jvb2wgaGlnaGxpZ2h0KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIHJldHVybiBld2tfZnJhbWVfdGV4dF9tYXRj
aGVzX2hpZ2hsaWdodF9zZXQoc2QtPm1haW5fZnJhbWUsIGhpZ2hsaWdodCk7CisgICAgRVdLX1ZJ
RVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAg
IHJldHVybiBld2tfZnJhbWVfdGV4dF9tYXRjaGVzX2hpZ2hsaWdodF9zZXQoc21hcnREYXRhLT5t
YWluX2ZyYW1lLCBoaWdobGlnaHQpOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfdGV4dF9tYXRj
aGVzX2hpZ2hsaWdodF9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdL
X1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgcmV0
dXJuIGV3a19mcmFtZV90ZXh0X21hdGNoZXNfaGlnaGxpZ2h0X2dldChzZC0+bWFpbl9mcmFtZSk7
CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFf
RkFMU0UpOworICAgIHJldHVybiBld2tfZnJhbWVfdGV4dF9tYXRjaGVzX2hpZ2hsaWdodF9nZXQo
c21hcnREYXRhLT5tYWluX2ZyYW1lKTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X2VkaXRhYmxl
X3NldChFdmFzX09iamVjdCogZXdrVmlldywgRWluYV9Cb29sIGVkaXRhYmxlKQogewotICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIHJl
dHVybiBld2tfZnJhbWVfZWRpdGFibGVfc2V0KHNkLT5tYWluX2ZyYW1lLCBlZGl0YWJsZSk7Cisg
ICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFM
U0UpOworICAgIHJldHVybiBld2tfZnJhbWVfZWRpdGFibGVfc2V0KHNtYXJ0RGF0YS0+bWFpbl9m
cmFtZSwgZWRpdGFibGUpOwogfQogCiBjaGFyKiBld2tfdmlld19zZWxlY3Rpb25fZ2V0KGNvbnN0
IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrVmlldywgc2QsIDApOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJp
diwgMCk7Ci0gICAgQ1N0cmluZyBzID0gcHJpdi0+cGFnZS0+Zm9jdXNDb250cm9sbGVyKCktPmZv
Y3VzZWRPck1haW5GcmFtZSgpLT5lZGl0b3IoKS0+c2VsZWN0ZWRUZXh0KCkudXRmOCgpOwotICAg
IGlmIChzLmlzTnVsbCgpKQorICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywg
c21hcnREYXRhLCAwKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRh
LCBwcml2LCAwKTsKKyAgICBDU3RyaW5nIHNlbGVjdGVkU3RyaW5nID0gcHJpdi0+cGFnZS0+Zm9j
dXNDb250cm9sbGVyKCktPmZvY3VzZWRPck1haW5GcmFtZSgpLT5lZGl0b3IoKS0+c2VsZWN0ZWRU
ZXh0KCkudXRmOCgpOworICAgIGlmIChzZWxlY3RlZFN0cmluZy5pc051bGwoKSkKICAgICAgICAg
cmV0dXJuIDA7Ci0gICAgcmV0dXJuIHN0cmR1cChzLmRhdGEoKSk7CisgICAgcmV0dXJuIHN0cmR1
cChzZWxlY3RlZFN0cmluZy5kYXRhKCkpOwogfQogCiBzdGF0aWMgRWluYV9Cb29sIF9ld2tfdmll
d19lZGl0b3JfY29tbWFuZChFd2tfVmlld19Qcml2YXRlX0RhdGEqIHByaXYsIGNvbnN0IGNoYXIq
IGNvbW1hbmQsIGNvbnN0IGNoYXIqIHZhbHVlID0gMCkKQEAgLTEzOTEsOCArMTM5MSw4IEBAIHN0
YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X2VkaXRvcl9jb21tYW5kKEV3a19WaWV3X1ByaXZhdGVf
RGF0YSogcHJpdiwgY29uc3QgY2hhCiAKIEVpbmFfQm9vbCBld2tfdmlld19leGVjdXRlX2VkaXRv
cl9jb21tYW5kKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBFd2tfRWRpdG9yX0NvbW1hbmQg
Y29tbWFuZCwgY29uc3QgY2hhciogdmFsdWUpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JF
VFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1Jf
UkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVU
VVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9H
RVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CiAKICAgICBzd2l0Y2gg
KGNvbW1hbmQpIHsKICAgICBjYXNlIEVXS19FRElUT1JfQ09NTUFORF9JTlNFUlRfSU1BR0U6CkBA
IC0xNDE5LDIzICsxNDE5LDIzIEBAIEVpbmFfQm9vbCBld2tfdmlld19leGVjdXRlX2VkaXRvcl9j
b21tYW5kKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBFd2tfRWRpdG9yCiBFaW5hX0Jvb2wg
ZXdrX3ZpZXdfY29udGV4dF9tZW51X2ZvcndhcmRfZXZlbnQoRXZhc19PYmplY3QqIGV3a1ZpZXcs
IGNvbnN0IEV2YXNfRXZlbnRfTW91c2VfRG93biogZG93bkV2ZW50KQogewogI2lmIEVOQUJMRShD
T05URVhUX01FTlVTKQotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2Qs
IEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwg
RUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFy
dERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFy
dERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIEVpbmFfQm9vbCBtb3VzZV9wcmVzc19oYW5k
bGVkID0gRUlOQV9GQUxTRTsKIAogICAgIHByaXYtPnBhZ2UtPmNvbnRleHRNZW51Q29udHJvbGxl
cigpLT5jbGVhckNvbnRleHRNZW51KCk7Ci0gICAgV2ViQ29yZTo6RnJhbWUqIG1haW5fZnJhbWUg
PSBwcml2LT5wYWdlLT5tYWluRnJhbWUoKTsKKyAgICBXZWJDb3JlOjpGcmFtZSogbWFpbkZyYW1l
ID0gcHJpdi0+cGFnZS0+bWFpbkZyYW1lKCk7CiAgICAgRXZhc19Db29yZCB4LCB5OwotICAgIGV2
YXNfb2JqZWN0X2dlb21ldHJ5X2dldChzZC0+c2VsZiwgJngsICZ5LCAwLCAwKTsKKyAgICBldmFz
X29iamVjdF9nZW9tZXRyeV9nZXQoc21hcnREYXRhLT5zZWxmLCAmeCwgJnksIDAsIDApOwogCiAg
ICAgV2ViQ29yZTo6UGxhdGZvcm1Nb3VzZUV2ZW50IGV2ZW50KGRvd25FdmVudCwgV2ViQ29yZTo6
SW50UG9pbnQoeCwgeSkpOwogCi0gICAgaWYgKG1haW5fZnJhbWUtPnZpZXcoKSkgeworICAgIGlm
IChtYWluRnJhbWUtPnZpZXcoKSkgewogICAgICAgICBtb3VzZV9wcmVzc19oYW5kbGVkID0KLSAg
ICAgICAgICAgIG1haW5fZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5oYW5kbGVNb3VzZVByZXNzRXZl
bnQoZXZlbnQpOworICAgICAgICAgICAgbWFpbkZyYW1lLT5ldmVudEhhbmRsZXIoKS0+aGFuZGxl
TW91c2VQcmVzc0V2ZW50KGV2ZW50KTsKICAgICB9CiAKLSAgICBpZiAobWFpbl9mcmFtZS0+ZXZl
bnRIYW5kbGVyKCktPnNlbmRDb250ZXh0TWVudUV2ZW50KGV2ZW50KSkKKyAgICBpZiAobWFpbkZy
YW1lLT5ldmVudEhhbmRsZXIoKS0+c2VuZENvbnRleHRNZW51RXZlbnQoZXZlbnQpKQogICAgICAg
ICByZXR1cm4gRUlOQV9GQUxTRTsKIAogICAgIFdlYkNvcmU6OkNvbnRleHRNZW51KiBjb3JlTWVu
dSA9CkBAIC0xNDU0LDg0ICsxNDU0LDg0IEBAIEVpbmFfQm9vbCBld2tfdmlld19jb250ZXh0X21l
bnVfZm9yd2FyZF9ldmVudChFdmFzX09iamVjdCogZXdrVmlldywgY29uc3QgRXZhc19FCiAKIGRv
dWJsZSBld2tfdmlld19sb2FkX3Byb2dyZXNzX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmll
dykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAtMS4wKTsK
LSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIC0xLjApOworICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCAtMS4wKTsKKyAgICBF
V0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCAtMS4wKTsKICAgICBy
ZXR1cm4gcHJpdi0+cGFnZS0+cHJvZ3Jlc3MoKS0+ZXN0aW1hdGVkUHJvZ3Jlc3MoKTsKIH0KIAog
RWluYV9Cb29sIGV3a192aWV3X3N0b3AoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdL
X1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgcmV0
dXJuIGV3a19mcmFtZV9zdG9wKHNkLT5tYWluX2ZyYW1lKTsKKyAgICBFV0tfVklFV19TRF9HRVRf
T1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgcmV0dXJuIGV3
a19mcmFtZV9zdG9wKHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSk7CiB9CiAKIEVpbmFfQm9vbCBld2tf
dmlld19yZWxvYWQoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgcmV0dXJuIGV3a19mcmFt
ZV9yZWxvYWQoc2QtPm1haW5fZnJhbWUpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICByZXR1cm4gZXdrX2ZyYW1lX3Jl
bG9hZChzbWFydERhdGEtPm1haW5fZnJhbWUpOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfcmVs
b2FkX2Z1bGwoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgcmV0dXJuIGV3a19mcmFtZV9y
ZWxvYWRfZnVsbChzZC0+bWFpbl9mcmFtZSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
Tihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIHJldHVybiBld2tfZnJhbWVf
cmVsb2FkX2Z1bGwoc21hcnREYXRhLT5tYWluX2ZyYW1lKTsKIH0KIAogRWluYV9Cb29sIGV3a192
aWV3X2JhY2soRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgcmV0dXJuIGV3a19mcmFtZV9i
YWNrKHNkLT5tYWluX2ZyYW1lKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1Zp
ZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgcmV0dXJuIGV3a19mcmFtZV9iYWNrKHNt
YXJ0RGF0YS0+bWFpbl9mcmFtZSk7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19mb3J3YXJkKEV2
YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdr
Vmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIHJldHVybiBld2tfZnJhbWVfZm9yd2FyZChzZC0+
bWFpbl9mcmFtZSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFy
dERhdGEsIEVJTkFfRkFMU0UpOworICAgIHJldHVybiBld2tfZnJhbWVfZm9yd2FyZChzbWFydERh
dGEtPm1haW5fZnJhbWUpOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfbmF2aWdhdGUoRXZhc19P
YmplY3QqIGV3a1ZpZXcsIGludCBzdGVwcykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVU
VVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICByZXR1cm4gZXdrX2ZyYW1lX25hdmln
YXRlKHNkLT5tYWluX2ZyYW1lLCBzdGVwcyk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
Tihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIHJldHVybiBld2tfZnJhbWVf
bmF2aWdhdGUoc21hcnREYXRhLT5tYWluX2ZyYW1lLCBzdGVwcyk7CiB9CiAKIEVpbmFfQm9vbCBl
d2tfdmlld19iYWNrX3Bvc3NpYmxlKEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19W
SUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIHJldHVy
biBld2tfZnJhbWVfYmFja19wb3NzaWJsZShzZC0+bWFpbl9mcmFtZSk7CisgICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIHJl
dHVybiBld2tfZnJhbWVfYmFja19wb3NzaWJsZShzbWFydERhdGEtPm1haW5fZnJhbWUpOwogfQog
CiBFaW5hX0Jvb2wgZXdrX3ZpZXdfZm9yd2FyZF9wb3NzaWJsZShFdmFzX09iamVjdCogZXdrVmll
dykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZB
TFNFKTsKLSAgICByZXR1cm4gZXdrX2ZyYW1lX2ZvcndhcmRfcG9zc2libGUoc2QtPm1haW5fZnJh
bWUpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBF
SU5BX0ZBTFNFKTsKKyAgICByZXR1cm4gZXdrX2ZyYW1lX2ZvcndhcmRfcG9zc2libGUoc21hcnRE
YXRhLT5tYWluX2ZyYW1lKTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X25hdmlnYXRlX3Bvc3Np
YmxlKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBpbnQgc3RlcHMpCiB7Ci0gICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgcmV0dXJuIGV3a19m
cmFtZV9uYXZpZ2F0ZV9wb3NzaWJsZShzZC0+bWFpbl9mcmFtZSwgc3RlcHMpOworICAgIEVXS19W
SUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAg
ICByZXR1cm4gZXdrX2ZyYW1lX25hdmlnYXRlX3Bvc3NpYmxlKHNtYXJ0RGF0YS0+bWFpbl9mcmFt
ZSwgc3RlcHMpOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfaGlzdG9yeV9lbmFibGVfZ2V0KGNv
bnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRV
Uk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JF
VFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
Tihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VU
X09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIHJldHVybiBzdGF0
aWNfY2FzdDxXZWJDb3JlOjpCYWNrRm9yd2FyZExpc3RJbXBsKj4ocHJpdi0+cGFnZS0+YmFja0Zv
cndhcmRMaXN0KCkpLT5lbmFibGVkKCk7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19oaXN0b3J5
X2VuYWJsZV9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCBlbmFibGUpCiB7Ci0g
ICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0g
ICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxT
RSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlO
QV9GQUxTRSk7CiAgICAgc3RhdGljX2Nhc3Q8V2ViQ29yZTo6QmFja0ZvcndhcmRMaXN0SW1wbCo+
KHByaXYtPnBhZ2UtPmJhY2tGb3J3YXJkTGlzdCgpKS0+c2V0RW5hYmxlZChlbmFibGUpOwogICAg
IHJldHVybiBFSU5BX1RSVUU7CiB9CiAKIEV3a19IaXN0b3J5KiBld2tfdmlld19oaXN0b3J5X2dl
dChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1Jf
UkVUVVJOKGV3a1ZpZXcsIHNkLCAwKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4o
c2QsIHByaXYsIDApOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21h
cnREYXRhLCAwKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBw
cml2LCAwKTsKICAgICBpZiAoIXN0YXRpY19jYXN0PFdlYkNvcmU6OkJhY2tGb3J3YXJkTGlzdElt
cGwqPihwcml2LT5wYWdlLT5iYWNrRm9yd2FyZExpc3QoKSktPmVuYWJsZWQoKSkgewogICAgICAg
ICBFUlIoImFza2VkIGhpc3RvcnksIGJ1dCBpdCdzIGRpc2FibGVkISBSZXR1cm5pbmcgMCEiKTsK
ICAgICAgICAgcmV0dXJuIDA7CkBAIC0xNTQxLDE4NiArMTU0MSwxODYgQEAgRXdrX0hpc3Rvcnkq
IGV3a192aWV3X2hpc3RvcnlfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogCiBmbG9h
dCBld2tfdmlld196b29tX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBF
V0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAtMS4wKTsKLSAgICByZXR1cm4g
ZXdrX2ZyYW1lX3BhZ2Vfem9vbV9nZXQoc2QtPm1haW5fZnJhbWUpOworICAgIEVXS19WSUVXX1NE
X0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCAtMS4wKTsKKyAgICByZXR1cm4gZXdr
X2ZyYW1lX3BhZ2Vfem9vbV9nZXQoc21hcnREYXRhLT5tYWluX2ZyYW1lKTsKIH0KIAotRWluYV9C
b29sIGV3a192aWV3X3pvb21fc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBmbG9hdCB6b29tLCBF
dmFzX0Nvb3JkIGN4LCBFdmFzX0Nvb3JkIGN5KQorRWluYV9Cb29sIGV3a192aWV3X3pvb21fc2V0
KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBmbG9hdCB6b29tLCBFdmFzX0Nvb3JkIGNlbnRlclgsIEV2
YXNfQ29vcmQgY2VudGVyWSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1Zp
ZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVChzZCwgcHJpdik7Cisg
ICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFM
U0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUKHNtYXJ0RGF0YSwgcHJpdik7CiAKLSAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmFwaSwgRUlOQV9GQUxTRSk7Ci0gICAgRUlO
QV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5hcGktPnpvb21fc2V0LCBFSU5BX0ZBTFNF
KTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5hcGksIEVJ
TkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEt
PmFwaS0+em9vbV9zZXQsIEVJTkFfRkFMU0UpOwogCi0gICAgaWYgKCFwcml2LT5zZXR0aW5ncy56
b29tX3JhbmdlLnVzZXJfc2NhbGFibGUpIHsKKyAgICBpZiAoIXByaXYtPnNldHRpbmdzLnpvb21S
YW5nZS51c2VyU2NhbGFibGUpIHsKICAgICAgICAgV1JOKCJ1c2VyU2NhbGFibGUgaXMgZmFsc2Ui
KTsKICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CiAgICAgfQogCi0gICAgaWYgKHpvb20gPCBw
cml2LT5zZXR0aW5ncy56b29tX3JhbmdlLm1pbl9zY2FsZSkgewotICAgICAgICBXUk4oInpvb20g
bGV2ZWwgaXMgPCAlZiA6ICVmIiwgcHJpdi0+c2V0dGluZ3Muem9vbV9yYW5nZS5taW5fc2NhbGUs
IHpvb20pOworICAgIGlmICh6b29tIDwgcHJpdi0+c2V0dGluZ3Muem9vbVJhbmdlLm1pblNjYWxl
KSB7CisgICAgICAgIFdSTigiem9vbSBsZXZlbCBpcyA8ICVmIDogJWYiLCBwcml2LT5zZXR0aW5n
cy56b29tUmFuZ2UubWluU2NhbGUsIHpvb20pOwogICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsK
ICAgICB9Ci0gICAgaWYgKHpvb20gPiBwcml2LT5zZXR0aW5ncy56b29tX3JhbmdlLm1heF9zY2Fs
ZSkgewotICAgICAgICBXUk4oInpvb20gbGV2ZWwgaXMgPiAlZiA6ICVmIiwgcHJpdi0+c2V0dGlu
Z3Muem9vbV9yYW5nZS5tYXhfc2NhbGUsIHpvb20pOworICAgIGlmICh6b29tID4gcHJpdi0+c2V0
dGluZ3Muem9vbVJhbmdlLm1heFNjYWxlKSB7CisgICAgICAgIFdSTigiem9vbSBsZXZlbCBpcyA+
ICVmIDogJWYiLCBwcml2LT5zZXR0aW5ncy56b29tUmFuZ2UubWF4U2NhbGUsIHpvb20pOwogICAg
ICAgICByZXR1cm4gRUlOQV9GQUxTRTsKICAgICB9CiAKLSAgICBfZXdrX3ZpZXdfem9vbV9hbmlt
YXRlZF9tYXJrX3N0b3Aoc2QpOwotICAgIHJldHVybiBzZC0+YXBpLT56b29tX3NldChzZCwgem9v
bSwgY3gsIGN5KTsKKyAgICBfZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9tYXJrX3N0b3Aoc21hcnRE
YXRhKTsKKyAgICByZXR1cm4gc21hcnREYXRhLT5hcGktPnpvb21fc2V0KHNtYXJ0RGF0YSwgem9v
bSwgY2VudGVyWCwgY2VudGVyWSk7CiB9CiAKIGZsb2F0IGV3a192aWV3X3BhZ2Vfem9vbV9nZXQo
Y29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JF
VFVSTihld2tWaWV3LCBzZCwgLTEuMCk7Ci0gICAgcmV0dXJuIGV3a19mcmFtZV9wYWdlX3pvb21f
Z2V0KHNkLT5tYWluX2ZyYW1lKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1Zp
ZXcsIHNtYXJ0RGF0YSwgLTEuMCk7CisgICAgcmV0dXJuIGV3a19mcmFtZV9wYWdlX3pvb21fZ2V0
KHNtYXJ0RGF0YS0+bWFpbl9mcmFtZSk7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19wYWdlX3pv
b21fc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBmbG9hdCBwYWdlWm9vbUZhY3RvcikKIHsKLSAg
ICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAg
ICByZXR1cm4gZXdrX2ZyYW1lX3BhZ2Vfem9vbV9zZXQoc2QtPm1haW5fZnJhbWUsIHBhZ2Vab29t
RmFjdG9yKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0
YSwgRUlOQV9GQUxTRSk7CisgICAgcmV0dXJuIGV3a19mcmFtZV9wYWdlX3pvb21fc2V0KHNtYXJ0
RGF0YS0+bWFpbl9mcmFtZSwgcGFnZVpvb21GYWN0b3IpOwogfQogCiBmbG9hdCBld2tfdmlld19z
Y2FsZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgLTEuMCk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRf
T1JfUkVUVVJOKHNkLCBwcml2LCAtMS4wKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJO
KGV3a1ZpZXcsIHNtYXJ0RGF0YSwgLTEuMCk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVU
VVJOKHNtYXJ0RGF0YSwgcHJpdiwgLTEuMCk7CiAgICAgcmV0dXJuIHByaXYtPnBhZ2UtPnBhZ2VT
Y2FsZUZhY3RvcigpOwogfQogCi1FaW5hX0Jvb2wgZXdrX3ZpZXdfc2NhbGVfc2V0KEV2YXNfT2Jq
ZWN0KiBld2tWaWV3LCBmbG9hdCBzY2FsZUZhY3RvciwgRXZhc19Db29yZCBjeCwgRXZhc19Db29y
ZCBjeSkKK0VpbmFfQm9vbCBld2tfdmlld19zY2FsZV9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcs
IGZsb2F0IHNjYWxlRmFjdG9yLCBFdmFzX0Nvb3JkIGNlbnRlclgsIEV2YXNfQ29vcmQgY2VudGVy
WSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZB
TFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFM
U0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBF
SU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBw
cml2LCBFSU5BX0ZBTFNFKTsKIAogICAgIGZsb2F0IGN1cnJlbnRTY2FsZUZhY3RvciA9IGV3a192
aWV3X3NjYWxlX2dldChld2tWaWV3KTsKICAgICBpZiAoY3VycmVudFNjYWxlRmFjdG9yID09IC0x
KQogICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKIAogICAgIGludCB4LCB5OwotICAgIGV3a19m
cmFtZV9zY3JvbGxfcG9zX2dldChzZC0+bWFpbl9mcmFtZSwgJngsICZ5KTsKKyAgICBld2tfZnJh
bWVfc2Nyb2xsX3Bvc19nZXQoc21hcnREYXRhLT5tYWluX2ZyYW1lLCAmeCwgJnkpOwogCi0gICAg
eCA9IHN0YXRpY19jYXN0PGludD4oKCh4ICsgY3gpIC8gY3VycmVudFNjYWxlRmFjdG9yKSAqIHNj
YWxlRmFjdG9yKSAtIGN4OwotICAgIHkgPSBzdGF0aWNfY2FzdDxpbnQ+KCgoeSArIGN5KSAvIGN1
cnJlbnRTY2FsZUZhY3RvcikgKiBzY2FsZUZhY3RvcikgLSBjeTsKKyAgICB4ID0gc3RhdGljX2Nh
c3Q8aW50PigoKHggKyBjZW50ZXJYKSAvIGN1cnJlbnRTY2FsZUZhY3RvcikgKiBzY2FsZUZhY3Rv
cikgLSBjZW50ZXJYOworICAgIHkgPSBzdGF0aWNfY2FzdDxpbnQ+KCgoeSArIGNlbnRlclkpIC8g
Y3VycmVudFNjYWxlRmFjdG9yKSAqIHNjYWxlRmFjdG9yKSAtIGNlbnRlclk7CiAgICAgcHJpdi0+
cGFnZS0+c2V0UGFnZVNjYWxlRmFjdG9yKHNjYWxlRmFjdG9yLCBXZWJDb3JlOjpMYXlvdXRQb2lu
dCh4LCB5KSk7CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAogZmxvYXQgZXdrX3ZpZXdfdGV4
dF96b29tX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19T
RF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAtMS4wKTsKLSAgICByZXR1cm4gZXdrX2ZyYW1l
X3RleHRfem9vbV9nZXQoc2QtPm1haW5fZnJhbWUpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9S
RVRVUk4oZXdrVmlldywgc21hcnREYXRhLCAtMS4wKTsKKyAgICByZXR1cm4gZXdrX2ZyYW1lX3Rl
eHRfem9vbV9nZXQoc21hcnREYXRhLT5tYWluX2ZyYW1lKTsKIH0KIAogRWluYV9Cb29sIGV3a192
aWV3X3RleHRfem9vbV9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGZsb2F0IHRleHRab29tRmFj
dG9yKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFf
RkFMU0UpOwotICAgIHJldHVybiBld2tfZnJhbWVfdGV4dF96b29tX3NldChzZC0+bWFpbl9mcmFt
ZSwgdGV4dFpvb21GYWN0b3IpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmll
dywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICByZXR1cm4gZXdrX2ZyYW1lX3RleHRfem9v
bV9zZXQoc21hcnREYXRhLT5tYWluX2ZyYW1lLCB0ZXh0Wm9vbUZhY3Rvcik7CiB9CiAKIEVpbmFf
Qm9vbCBld2tfdmlld196b29tX3dlYWtfc21vb3RoX3NjYWxlX2dldChjb25zdCBFdmFzX09iamVj
dCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNk
LCBFSU5BX0ZBTFNFKTsKLSAgICByZXR1cm4gc2QtPnpvb21fd2Vha19zbW9vdGhfc2NhbGU7Cisg
ICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFM
U0UpOworICAgIHJldHVybiBzbWFydERhdGEtPnpvb21fd2Vha19zbW9vdGhfc2NhbGU7CiB9CiAK
IHZvaWQgZXdrX3ZpZXdfem9vbV93ZWFrX3Ntb290aF9zY2FsZV9zZXQoRXZhc19PYmplY3QqIGV3
a1ZpZXcsIEVpbmFfQm9vbCBzbW9vdGhTY2FsZSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1Jf
UkVUVVJOKGV3a1ZpZXcsIHNkKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1Zp
ZXcsIHNtYXJ0RGF0YSk7CiAgICAgc21vb3RoU2NhbGUgPSAhIXNtb290aFNjYWxlOwotICAgIGlm
IChzZC0+em9vbV93ZWFrX3Ntb290aF9zY2FsZSA9PSBzbW9vdGhTY2FsZSkKKyAgICBpZiAoc21h
cnREYXRhLT56b29tX3dlYWtfc21vb3RoX3NjYWxlID09IHNtb290aFNjYWxlKQogICAgICAgICBy
ZXR1cm47Ci0gICAgc2QtPnpvb21fd2Vha19zbW9vdGhfc2NhbGUgPSBzbW9vdGhTY2FsZTsKLSAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpKTsKLSAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTihzZC0+YXBpLT56b29tX3dlYWtfc21vb3RoX3NjYWxlX3NldCk7Ci0gICAg
c2QtPmFwaS0+em9vbV93ZWFrX3Ntb290aF9zY2FsZV9zZXQoc2QsIHNtb290aFNjYWxlKTsKKyAg
ICBzbWFydERhdGEtPnpvb21fd2Vha19zbW9vdGhfc2NhbGUgPSBzbW9vdGhTY2FsZTsKKyAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmFwaSk7CisgICAgRUlOQV9TQUZF
VFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRhLT5hcGktPnpvb21fd2Vha19zbW9vdGhfc2NhbGVf
c2V0KTsKKyAgICBzbWFydERhdGEtPmFwaS0+em9vbV93ZWFrX3Ntb290aF9zY2FsZV9zZXQoc21h
cnREYXRhLCBzbW9vdGhTY2FsZSk7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld196b29tX3dlYWtf
c2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBmbG9hdCB6b29tLCBFdmFzX0Nvb3JkIGNlbnRlclgs
IEV2YXNfQ29vcmQgY2VudGVyWSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3
a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVChzZCwgcHJpdik7
CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFf
RkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUKHNtYXJ0RGF0YSwgcHJpdik7CiAKLSAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc2QtPmFwaSwgRUlOQV9GQUxTRSk7Ci0gICAg
RUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5hcGktPnpvb21fd2Vha19zZXQsIEVJ
TkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEt
PmFwaSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNt
YXJ0RGF0YS0+YXBpLT56b29tX3dlYWtfc2V0LCBFSU5BX0ZBTFNFKTsKIAotICAgIGlmICghcHJp
di0+c2V0dGluZ3Muem9vbV9yYW5nZS51c2VyX3NjYWxhYmxlKSB7CisgICAgaWYgKCFwcml2LT5z
ZXR0aW5ncy56b29tUmFuZ2UudXNlclNjYWxhYmxlKSB7CiAgICAgICAgIFdSTigidXNlclNjYWxh
YmxlIGlzIGZhbHNlIik7CiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwogICAgIH0KIAotICAg
IGlmICh6b29tIDwgcHJpdi0+c2V0dGluZ3Muem9vbV9yYW5nZS5taW5fc2NhbGUpIHsKLSAgICAg
ICAgV1JOKCJ6b29tIGxldmVsIGlzIDwgJWYgOiAlZiIsIHByaXYtPnNldHRpbmdzLnpvb21fcmFu
Z2UubWluX3NjYWxlLCB6b29tKTsKKyAgICBpZiAoem9vbSA8IHByaXYtPnNldHRpbmdzLnpvb21S
YW5nZS5taW5TY2FsZSkgeworICAgICAgICBXUk4oInpvb20gbGV2ZWwgaXMgPCAlZiA6ICVmIiwg
cHJpdi0+c2V0dGluZ3Muem9vbVJhbmdlLm1pblNjYWxlLCB6b29tKTsKICAgICAgICAgcmV0dXJu
IEVJTkFfRkFMU0U7CiAgICAgfQotICAgIGlmICh6b29tID4gcHJpdi0+c2V0dGluZ3Muem9vbV9y
YW5nZS5tYXhfc2NhbGUpIHsKLSAgICAgICAgV1JOKCJ6b29tIGxldmVsIGlzID4gJWYgOiAlZiIs
IHByaXYtPnNldHRpbmdzLnpvb21fcmFuZ2UubWF4X3NjYWxlLCB6b29tKTsKKyAgICBpZiAoem9v
bSA+IHByaXYtPnNldHRpbmdzLnpvb21SYW5nZS5tYXhTY2FsZSkgeworICAgICAgICBXUk4oInpv
b20gbGV2ZWwgaXMgPiAlZiA6ICVmIiwgcHJpdi0+c2V0dGluZ3Muem9vbVJhbmdlLm1heFNjYWxl
LCB6b29tKTsKICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CiAgICAgfQogCi0gICAgc2QtPmFu
aW1hdGVkX3pvb20uem9vbS5zdGFydCA9IGV3a19mcmFtZV9wYWdlX3pvb21fZ2V0KHNkLT5tYWlu
X2ZyYW1lKTsKLSAgICBzZC0+YW5pbWF0ZWRfem9vbS56b29tLmVuZCA9IHpvb207Ci0gICAgc2Qt
PmFuaW1hdGVkX3pvb20uem9vbS5jdXJyZW50ID0gem9vbTsKLSAgICByZXR1cm4gc2QtPmFwaS0+
em9vbV93ZWFrX3NldChzZCwgem9vbSwgY2VudGVyWCwgY2VudGVyWSk7CisgICAgc21hcnREYXRh
LT5hbmltYXRlZF96b29tLnpvb20uc3RhcnQgPSBld2tfZnJhbWVfcGFnZV96b29tX2dldChzbWFy
dERhdGEtPm1haW5fZnJhbWUpOworICAgIHNtYXJ0RGF0YS0+YW5pbWF0ZWRfem9vbS56b29tLmVu
ZCA9IHpvb207CisgICAgc21hcnREYXRhLT5hbmltYXRlZF96b29tLnpvb20uY3VycmVudCA9IHpv
b207CisgICAgcmV0dXJuIHNtYXJ0RGF0YS0+YXBpLT56b29tX3dlYWtfc2V0KHNtYXJ0RGF0YSwg
em9vbSwgY2VudGVyWCwgY2VudGVyWSk7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld196b29tX2Fu
aW1hdGVkX21hcmtfc3RhcnQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGZsb2F0IHpvb20pCiB7Ci0g
ICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0g
ICAgc2QtPmFuaW1hdGVkX3pvb20uem9vbS5zdGFydCA9IHpvb207CisgICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIHNtYXJ0
RGF0YS0+YW5pbWF0ZWRfem9vbS56b29tLnN0YXJ0ID0gem9vbTsKICAgICByZXR1cm4gRUlOQV9U
UlVFOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9tYXJrX2VuZChFdmFz
X09iamVjdCogZXdrVmlldywgZmxvYXQgem9vbSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1Jf
UkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBzZC0+YW5pbWF0ZWRfem9vbS56
b29tLmVuZCA9IHpvb207CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBz
bWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIHNtYXJ0RGF0YS0+YW5pbWF0ZWRfem9vbS56b29t
LmVuZCA9IHpvb207CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAogRWluYV9Cb29sIGV3a192
aWV3X3pvb21fYW5pbWF0ZWRfbWFya19jdXJyZW50KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBmbG9h
dCB6b29tKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJ
TkFfRkFMU0UpOwotICAgIHNkLT5hbmltYXRlZF96b29tLnpvb20uY3VycmVudCA9IHpvb207Cisg
ICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFM
U0UpOworICAgIHNtYXJ0RGF0YS0+YW5pbWF0ZWRfem9vbS56b29tLmN1cnJlbnQgPSB6b29tOwog
ICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld196b29tX2FuaW1h
dGVkX21hcmtfc3RvcChFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9H
RVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBfZXdrX3ZpZXdfem9v
bV9hbmltYXRlZF9tYXJrX3N0b3Aoc2QpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBfZXdrX3ZpZXdfem9vbV9hbmlt
YXRlZF9tYXJrX3N0b3Aoc21hcnREYXRhKTsKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCiBF
aW5hX0Jvb2wgZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcs
IGZsb2F0IHpvb20sIGZsb2F0IGR1cmF0aW9uLCBFdmFzX0Nvb3JkIGNlbnRlclgsIEV2YXNfQ29v
cmQgY2VudGVyWSkKIHsKICAgICBkb3VibGUgbm93OwotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9S
RVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09S
X1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9S
RVRVUk5fVkFMKHNkLT5hcGksIEVJTkFfRkFMU0UpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOX1ZBTChzZC0+YXBpLT56b29tX3dlYWtfc2V0LCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tf
VklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7Cisg
ICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxT
RSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+YXBpLCBF
SU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRh
LT5hcGktPnpvb21fd2Vha19zZXQsIEVJTkFfRkFMU0UpOwogCi0gICAgaWYgKCFwcml2LT5zZXR0
aW5ncy56b29tX3JhbmdlLnVzZXJfc2NhbGFibGUpIHsKKyAgICBpZiAoIXByaXYtPnNldHRpbmdz
Lnpvb21SYW5nZS51c2VyU2NhbGFibGUpIHsKICAgICAgICAgV1JOKCJ1c2VyU2NhbGFibGUgaXMg
ZmFsc2UiKTsKICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CiAgICAgfQogCi0gICAgaWYgKHpv
b20gPCBwcml2LT5zZXR0aW5ncy56b29tX3JhbmdlLm1pbl9zY2FsZSkgewotICAgICAgICBXUk4o
Inpvb20gbGV2ZWwgaXMgPCAlZiA6ICVmIiwgcHJpdi0+c2V0dGluZ3Muem9vbV9yYW5nZS5taW5f
c2NhbGUsIHpvb20pOworICAgIGlmICh6b29tIDwgcHJpdi0+c2V0dGluZ3Muem9vbVJhbmdlLm1p
blNjYWxlKSB7CisgICAgICAgIFdSTigiem9vbSBsZXZlbCBpcyA8ICVmIDogJWYiLCBwcml2LT5z
ZXR0aW5ncy56b29tUmFuZ2UubWluU2NhbGUsIHpvb20pOwogICAgICAgICByZXR1cm4gRUlOQV9G
QUxTRTsKICAgICB9Ci0gICAgaWYgKHpvb20gPiBwcml2LT5zZXR0aW5ncy56b29tX3JhbmdlLm1h
eF9zY2FsZSkgewotICAgICAgICBXUk4oInpvb20gbGV2ZWwgaXMgPiAlZiA6ICVmIiwgcHJpdi0+
c2V0dGluZ3Muem9vbV9yYW5nZS5tYXhfc2NhbGUsIHpvb20pOworICAgIGlmICh6b29tID4gcHJp
di0+c2V0dGluZ3Muem9vbVJhbmdlLm1heFNjYWxlKSB7CisgICAgICAgIFdSTigiem9vbSBsZXZl
bCBpcyA+ICVmIDogJWYiLCBwcml2LT5zZXR0aW5ncy56b29tUmFuZ2UubWF4U2NhbGUsIHpvb20p
OwogICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKICAgICB9CiAKLSAgICBpZiAocHJpdi0+YW5p
bWF0ZWRfem9vbS5hbmltYXRvcikKLSAgICAgICAgcHJpdi0+YW5pbWF0ZWRfem9vbS56b29tLnN0
YXJ0ID0gX2V3a192aWV3X3pvb21fYW5pbWF0ZWRfY3VycmVudChwcml2KTsKKyAgICBpZiAocHJp
di0+YW5pbWF0ZWRab29tLmFuaW1hdG9yKQorICAgICAgICBwcml2LT5hbmltYXRlZFpvb20uem9v
bS5zdGFydCA9IF9ld2tfdmlld196b29tX2FuaW1hdGVkX2N1cnJlbnQocHJpdik7CiAgICAgZWxz
ZSB7Ci0gICAgICAgIHByaXYtPmFuaW1hdGVkX3pvb20uem9vbS5zdGFydCA9IGV3a19mcmFtZV9w
YWdlX3pvb21fZ2V0KHNkLT5tYWluX2ZyYW1lKTsKLSAgICAgICAgX2V3a192aWV3X3pvb21fYW5p
bWF0aW9uX3N0YXJ0KHNkKTsKKyAgICAgICAgcHJpdi0+YW5pbWF0ZWRab29tLnpvb20uc3RhcnQg
PSBld2tfZnJhbWVfcGFnZV96b29tX2dldChzbWFydERhdGEtPm1haW5fZnJhbWUpOworICAgICAg
ICBfZXdrX3ZpZXdfem9vbV9hbmltYXRpb25fc3RhcnQoc21hcnREYXRhKTsKICAgICB9CiAKICAg
ICBpZiAoY2VudGVyWCA8IDApCkBAIC0xNzI5LDUwICsxNzI5LDUwIEBAIEVpbmFfQm9vbCBld2tf
dmlld196b29tX2FuaW1hdGVkX3NldChFdmFzX09iamVjdCogZXdrVmlldywgZmxvYXQgem9vbSwg
ZmxvYXQgZHVyCiAgICAgICAgIGNlbnRlclkgPSAwOwogCiAgICAgbm93ID0gZWNvcmVfbG9vcF90
aW1lX2dldCgpOwotICAgIHByaXYtPmFuaW1hdGVkX3pvb20udGltZS5zdGFydCA9IG5vdzsKLSAg
ICBwcml2LT5hbmltYXRlZF96b29tLnRpbWUuZW5kID0gbm93ICsgZHVyYXRpb247Ci0gICAgcHJp
di0+YW5pbWF0ZWRfem9vbS50aW1lLmR1cmF0aW9uID0gZHVyYXRpb247Ci0gICAgcHJpdi0+YW5p
bWF0ZWRfem9vbS56b29tLmVuZCA9IHpvb207Ci0gICAgcHJpdi0+YW5pbWF0ZWRfem9vbS56b29t
LnJhbmdlID0gKHByaXYtPmFuaW1hdGVkX3pvb20uem9vbS5lbmQgLSBwcml2LT5hbmltYXRlZF96
b29tLnpvb20uc3RhcnQpOwotICAgIHByaXYtPmFuaW1hdGVkX3pvb20uY2VudGVyLnggPSBjZW50
ZXJYOwotICAgIHByaXYtPmFuaW1hdGVkX3pvb20uY2VudGVyLnkgPSBjZW50ZXJZOwotICAgIHNk
LT5hbmltYXRlZF96b29tLnpvb20uY3VycmVudCA9IHByaXYtPmFuaW1hdGVkX3pvb20uem9vbS5z
dGFydDsKLSAgICBzZC0+YW5pbWF0ZWRfem9vbS56b29tLnN0YXJ0ID0gcHJpdi0+YW5pbWF0ZWRf
em9vbS56b29tLnN0YXJ0OwotICAgIHNkLT5hbmltYXRlZF96b29tLnpvb20uZW5kID0gcHJpdi0+
YW5pbWF0ZWRfem9vbS56b29tLmVuZDsKKyAgICBwcml2LT5hbmltYXRlZFpvb20udGltZS5zdGFy
dCA9IG5vdzsKKyAgICBwcml2LT5hbmltYXRlZFpvb20udGltZS5lbmQgPSBub3cgKyBkdXJhdGlv
bjsKKyAgICBwcml2LT5hbmltYXRlZFpvb20udGltZS5kdXJhdGlvbiA9IGR1cmF0aW9uOworICAg
IHByaXYtPmFuaW1hdGVkWm9vbS56b29tLmVuZCA9IHpvb207CisgICAgcHJpdi0+YW5pbWF0ZWRa
b29tLnpvb20ucmFuZ2UgPSAocHJpdi0+YW5pbWF0ZWRab29tLnpvb20uZW5kIC0gcHJpdi0+YW5p
bWF0ZWRab29tLnpvb20uc3RhcnQpOworICAgIHByaXYtPmFuaW1hdGVkWm9vbS5jZW50ZXIueCA9
IGNlbnRlclg7CisgICAgcHJpdi0+YW5pbWF0ZWRab29tLmNlbnRlci55ID0gY2VudGVyWTsKKyAg
ICBzbWFydERhdGEtPmFuaW1hdGVkX3pvb20uem9vbS5jdXJyZW50ID0gcHJpdi0+YW5pbWF0ZWRa
b29tLnpvb20uc3RhcnQ7CisgICAgc21hcnREYXRhLT5hbmltYXRlZF96b29tLnpvb20uc3RhcnQg
PSBwcml2LT5hbmltYXRlZFpvb20uem9vbS5zdGFydDsKKyAgICBzbWFydERhdGEtPmFuaW1hdGVk
X3pvb20uem9vbS5lbmQgPSBwcml2LT5hbmltYXRlZFpvb20uem9vbS5lbmQ7CiAKICAgICByZXR1
cm4gRUlOQV9UUlVFOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfcHJlX3JlbmRlcl9yZWdpb24o
RXZhc19PYmplY3QqIGV3a1ZpZXcsIEV2YXNfQ29vcmQgeCwgRXZhc19Db29yZCB5LCBFdmFzX0Nv
b3JkIHdpZHRoLCBFdmFzX0Nvb3JkIGhlaWdodCwgZmxvYXQgem9vbSkKIHsKLSAgICBFV0tfVklF
V19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklF
V19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwotICAgIEVJTkFfU0FG
RVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+YXBpLT5wcmVfcmVuZGVyX3JlZ2lvbiwgRUlOQV9G
QUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEs
IEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEs
IHByaXYsIEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChz
bWFydERhdGEtPmFwaS0+cHJlX3JlbmRlcl9yZWdpb24sIEVJTkFfRkFMU0UpOwogICAgIGZsb2F0
IGN1cl96b29tOwotICAgIEV2YXNfQ29vcmQgY3csIGNoOworICAgIEV2YXNfQ29vcmQgY29udGVu
dHNXaWR0aCwgY29udGVudHNIZWlnaHQ7CiAKICAgICAvKiBXaGVuIGRvaW5nIGFuaW1hdGVkIHpv
b20gaXQncyBub3QgcG9zc2libGUgdG8gY2FsbCBwcmUtcmVuZGVyIHNpbmNlIGl0CiAgICAgICog
d291bGQgc2NyZXcgdXAgcGFyYW1ldGVycyB0aGF0IGFuaW1hdGlvbiBpcyBjdXJyZW50bHkgdXNp
bmcKICAgICAgKi8KLSAgICBpZiAocHJpdi0+YW5pbWF0ZWRfem9vbS5hbmltYXRvcikKKyAgICBp
ZiAocHJpdi0+YW5pbWF0ZWRab29tLmFuaW1hdG9yKQogICAgICAgICByZXR1cm4gRUlOQV9GQUxT
RTsKIAotICAgIGN1cl96b29tID0gZXdrX2ZyYW1lX3BhZ2Vfem9vbV9nZXQoc2QtPm1haW5fZnJh
bWUpOworICAgIGN1cl96b29tID0gZXdrX2ZyYW1lX3BhZ2Vfem9vbV9nZXQoc21hcnREYXRhLT5t
YWluX2ZyYW1lKTsKIAogICAgIGlmIChjdXJfem9vbSA8IDAuMDAwMDEpCiAgICAgICAgIHJldHVy
biBFSU5BX0ZBTFNFOwotICAgIGlmICghZXdrX2ZyYW1lX2NvbnRlbnRzX3NpemVfZ2V0KHNkLT5t
YWluX2ZyYW1lLCAmY3csICZjaCkpCisgICAgaWYgKCFld2tfZnJhbWVfY29udGVudHNfc2l6ZV9n
ZXQoc21hcnREYXRhLT5tYWluX2ZyYW1lLCAmY29udGVudHNXaWR0aCwgJmNvbnRlbnRzSGVpZ2h0
KSkKICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CiAKLSAgICBjdyAqPSB6b29tIC8gY3VyX3pv
b207Ci0gICAgY2ggKj0gem9vbSAvIGN1cl96b29tOwotICAgIERCRygicmVnaW9uICVkLCVkKyVk
eCVkIEAgJWYgY29udGVudHM9JWR4JWQiLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCB6b29tLCBjdywg
Y2gpOworICAgIGNvbnRlbnRzV2lkdGggKj0gem9vbSAvIGN1cl96b29tOworICAgIGNvbnRlbnRz
SGVpZ2h0ICo9IHpvb20gLyBjdXJfem9vbTsKKyAgICBEQkcoInJlZ2lvbiAlZCwlZCslZHglZCBA
ICVmIGNvbnRlbnRzPSVkeCVkIiwgeCwgeSwgd2lkdGgsIGhlaWdodCwgem9vbSwgY29udGVudHNX
aWR0aCwgY29udGVudHNIZWlnaHQpOwogCi0gICAgaWYgKHggKyB3aWR0aCA+IGN3KQotICAgICAg
ICB3aWR0aCA9IGN3IC0geDsKKyAgICBpZiAoeCArIHdpZHRoID4gY29udGVudHNXaWR0aCkKKyAg
ICAgICAgd2lkdGggPSBjb250ZW50c1dpZHRoIC0geDsKIAotICAgIGlmICh5ICsgaGVpZ2h0ID4g
Y2gpCi0gICAgICAgIGhlaWdodCA9IGNoIC0geTsKKyAgICBpZiAoeSArIGhlaWdodCA+IGNvbnRl
bnRzSGVpZ2h0KQorICAgICAgICBoZWlnaHQgPSBjb250ZW50c0hlaWdodCAtIHk7CiAKICAgICBp
ZiAoeCA8IDApIHsKICAgICAgICAgd2lkdGggKz0geDsKQEAgLTE3ODMsNjQgKzE3ODMsNjQgQEAg
RWluYV9Cb29sIGV3a192aWV3X3ByZV9yZW5kZXJfcmVnaW9uKEV2YXNfT2JqZWN0KiBld2tWaWV3
LCBFdmFzX0Nvb3JkIHgsIEV2YXNfQ28KICAgICAgICAgeSA9IDA7CiAgICAgfQogCi0gICAgcmV0
dXJuIHNkLT5hcGktPnByZV9yZW5kZXJfcmVnaW9uKHNkLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCB6
b29tKTsKKyAgICByZXR1cm4gc21hcnREYXRhLT5hcGktPnByZV9yZW5kZXJfcmVnaW9uKHNtYXJ0
RGF0YSwgeCwgeSwgd2lkdGgsIGhlaWdodCwgem9vbSk7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmll
d19wcmVfcmVuZGVyX3JlbGF0aXZlX3JhZGl1cyhFdmFzX09iamVjdCogZXdrVmlldywgdW5zaWdu
ZWQgaW50IG51bWJlcikKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcs
IHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHBy
aXYsIEVJTkFfRkFMU0UpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+
YXBpLT5wcmVfcmVuZGVyX3JlbGF0aXZlX3JhZGl1cywgRUlOQV9GQUxTRSk7Ci0gICAgZmxvYXQg
Y3VyX3pvb207CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERh
dGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERh
dGEsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZB
TChzbWFydERhdGEtPmFwaS0+cHJlX3JlbmRlcl9yZWxhdGl2ZV9yYWRpdXMsIEVJTkFfRkFMU0Up
OworICAgIGZsb2F0IGN1cnJlbnRab29tOwogCi0gICAgaWYgKHByaXYtPmFuaW1hdGVkX3pvb20u
YW5pbWF0b3IpCisgICAgaWYgKHByaXYtPmFuaW1hdGVkWm9vbS5hbmltYXRvcikKICAgICAgICAg
cmV0dXJuIEVJTkFfRkFMU0U7CiAKLSAgICBjdXJfem9vbSA9IGV3a19mcmFtZV9wYWdlX3pvb21f
Z2V0KHNkLT5tYWluX2ZyYW1lKTsKLSAgICByZXR1cm4gc2QtPmFwaS0+cHJlX3JlbmRlcl9yZWxh
dGl2ZV9yYWRpdXMoc2QsIG51bWJlciwgY3VyX3pvb20pOworICAgIGN1cnJlbnRab29tID0gZXdr
X2ZyYW1lX3BhZ2Vfem9vbV9nZXQoc21hcnREYXRhLT5tYWluX2ZyYW1lKTsKKyAgICByZXR1cm4g
c21hcnREYXRhLT5hcGktPnByZV9yZW5kZXJfcmVsYXRpdmVfcmFkaXVzKHNtYXJ0RGF0YSwgbnVt
YmVyLCBjdXJyZW50Wm9vbSk7CiB9CiAKIHVuc2lnbmVkIGludCBld2tfdmlld19pbWhfZ2V0KGNv
bnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRV
Uk4oZXdrVmlldywgc2QsIDApOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwg
cHJpdiwgMCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERh
dGEsIDApOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYs
IDApOwogICAgIHJldHVybiBwcml2LT5pbWg7CiB9CiAKIHZvaWQgZXdrX3ZpZXdfcHJlX3JlbmRl
cl9jYW5jZWwoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihld2tWaWV3LCBzZCk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc2Qt
PmFwaS0+cHJlX3JlbmRlcl9jYW5jZWwpOwotICAgIHNkLT5hcGktPnByZV9yZW5kZXJfY2FuY2Vs
KHNkKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSk7
CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRhLT5hcGktPnByZV9yZW5k
ZXJfY2FuY2VsKTsKKyAgICBzbWFydERhdGEtPmFwaS0+cHJlX3JlbmRlcl9jYW5jZWwoc21hcnRE
YXRhKTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X2VuYWJsZV9yZW5kZXIoY29uc3QgRXZhc19P
YmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3
LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNk
LT5hcGktPmVuYWJsZV9yZW5kZXIsIEVJTkFfRkFMU0UpOwotICAgIHJldHVybiBzZC0+YXBpLT5l
bmFibGVfcmVuZGVyKHNkKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcs
IHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5f
VkFMKHNtYXJ0RGF0YS0+YXBpLT5lbmFibGVfcmVuZGVyLCBFSU5BX0ZBTFNFKTsKKyAgICByZXR1
cm4gc21hcnREYXRhLT5hcGktPmVuYWJsZV9yZW5kZXIoc21hcnREYXRhKTsKIH0KIAogRWluYV9C
b29sIGV3a192aWV3X2Rpc2FibGVfcmVuZGVyKGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQog
ewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0Up
OwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzZC0+YXBpLT5kaXNhYmxlX3Jl
bmRlciwgRUlOQV9GQUxTRSk7Ci0gICAgcmV0dXJuIHNkLT5hcGktPmRpc2FibGVfcmVuZGVyKHNk
KTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlO
QV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+
YXBpLT5kaXNhYmxlX3JlbmRlciwgRUlOQV9GQUxTRSk7CisgICAgcmV0dXJuIHNtYXJ0RGF0YS0+
YXBpLT5kaXNhYmxlX3JlbmRlcihzbWFydERhdGEpOwogfQogCiBjb25zdCBjaGFyKiBld2tfdmll
d19zZXR0aW5nX3VzZXJfYWdlbnRfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewot
ICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIDApOwotICAgIEVXS19W
SUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgMCk7Ci0gICAgcmV0dXJuIHByaXYtPnNl
dHRpbmdzLnVzZXJfYWdlbnQ7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3
LCBzbWFydERhdGEsIDApOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERh
dGEsIHByaXYsIDApOworICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy51c2VyQWdlbnQ7CiB9CiAK
IEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX3VzZXJfYWdlbnRfc2V0KEV2YXNfT2JqZWN0KiBl
d2tWaWV3LCBjb25zdCBjaGFyKiB1c2VyQWdlbnQpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRf
T1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKLSAgICBpZiAoZWluYV9zdHJpbmdzaGFy
ZV9yZXBsYWNlKCZwcml2LT5zZXR0aW5ncy51c2VyX2FnZW50LCB1c2VyQWdlbnQpKSB7Ci0gICAg
ICAgIFdlYkNvcmU6OkZyYW1lTG9hZGVyQ2xpZW50RWZsKiBjbGllbnQgPSBzdGF0aWNfY2FzdDxX
ZWJDb3JlOjpGcmFtZUxvYWRlckNsaWVudEVmbCo+KHByaXYtPm1haW5fZnJhbWUtPmxvYWRlcigp
LT5jbGllbnQoKSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFy
dERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFy
dERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIGlmIChlaW5hX3N0cmluZ3NoYXJlX3JlcGxh
Y2UoJnByaXYtPnNldHRpbmdzLnVzZXJBZ2VudCwgdXNlckFnZW50KSkgeworICAgICAgICBXZWJD
b3JlOjpGcmFtZUxvYWRlckNsaWVudEVmbCogY2xpZW50ID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6
RnJhbWVMb2FkZXJDbGllbnRFZmwqPihwcml2LT5tYWluRnJhbWUtPmxvYWRlcigpLT5jbGllbnQo
KSk7CiAgICAgICAgIGNsaWVudC0+c2V0Q3VzdG9tVXNlckFnZW50KFN0cmluZzo6ZnJvbVVURjgo
dXNlckFnZW50KSk7CiAgICAgfQogICAgIHJldHVybiBFSU5BX1RSVUU7CkBAIC0xODQ4LDIyMyAr
MTg0OCwyMjMgQEAgRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfdXNlcl9hZ2VudF9zZXQoRXZh
c19PYmplY3QqIGV3a1ZpZXcsIGNvbnN0IGNoYXIqIHVzZXIKIAogY29uc3QgY2hhciogZXdrX3Zp
ZXdfc2V0dGluZ191c2VyX3N0eWxlc2hlZXRfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3
KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIDApOwotICAg
IEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgMCk7Ci0gICAgcmV0dXJuIHBy
aXYtPnNldHRpbmdzLnVzZXJfc3R5bGVzaGVldDsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVU
VVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgMCk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVU
VVJOKHNtYXJ0RGF0YSwgcHJpdiwgMCk7CisgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLnVzZXJT
dHlsZXNoZWV0OwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ191c2VyX3N0eWxlc2hl
ZXRfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBjaGFyKiB1cmkpCiB7Ci0gICAgRVdL
X1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdL
X1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKLSAgICBpZiAo
ZWluYV9zdHJpbmdzaGFyZV9yZXBsYWNlKCZwcml2LT5zZXR0aW5ncy51c2VyX3N0eWxlc2hlZXQs
IHVyaSkpIHsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0
YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0
YSwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgaWYgKGVpbmFfc3RyaW5nc2hhcmVfcmVwbGFjZSgm
cHJpdi0+c2V0dGluZ3MudXNlclN0eWxlc2hlZXQsIHVyaSkpIHsKICAgICAgICAgV2ViQ29yZTo6
S1VSTCBrdXJsKFdlYkNvcmU6OktVUkwoKSwgU3RyaW5nOjpmcm9tVVRGOCh1cmkpKTsKLSAgICAg
ICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0VXNlclN0eWxlU2hlZXRMb2NhdGlvbihrdXJsKTsK
KyAgICAgICAgcHJpdi0+cGFnZVNldHRpbmdzLT5zZXRVc2VyU3R5bGVTaGVldExvY2F0aW9uKGt1
cmwpOwogICAgIH0KICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCiBFaW5hX0Jvb2wgZXdrX3Zp
ZXdfc2V0dGluZ19hdXRvX2xvYWRfaW1hZ2VzX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmll
dykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZB
TFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFM
U0UpOwotICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5hdXRvX2xvYWRfaW1hZ2VzOworICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsK
KyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZB
TFNFKTsKKyAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuYXV0b0xvYWRJbWFnZXM7CiB9CiAKIEVp
bmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2F1dG9fbG9hZF9pbWFnZXNfc2V0KEV2YXNfT2JqZWN0
KiBld2tWaWV3LCBFaW5hX0Jvb2wgYXV0b21hdGljKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9P
Ul9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VU
X09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BS
SVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIGF1dG9t
YXRpYyA9ICEhYXV0b21hdGljOwotICAgIGlmIChwcml2LT5zZXR0aW5ncy5hdXRvX2xvYWRfaW1h
Z2VzICE9IGF1dG9tYXRpYykgewotICAgICAgICBwcml2LT5wYWdlX3NldHRpbmdzLT5zZXRMb2Fk
c0ltYWdlc0F1dG9tYXRpY2FsbHkoYXV0b21hdGljKTsKLSAgICAgICAgcHJpdi0+c2V0dGluZ3Mu
YXV0b19sb2FkX2ltYWdlcyA9IGF1dG9tYXRpYzsKKyAgICBpZiAocHJpdi0+c2V0dGluZ3MuYXV0
b0xvYWRJbWFnZXMgIT0gYXV0b21hdGljKSB7CisgICAgICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+
c2V0TG9hZHNJbWFnZXNBdXRvbWF0aWNhbGx5KGF1dG9tYXRpYyk7CisgICAgICAgIHByaXYtPnNl
dHRpbmdzLmF1dG9Mb2FkSW1hZ2VzID0gYXV0b21hdGljOwogICAgIH0KICAgICByZXR1cm4gRUlO
QV9UUlVFOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19hdXRvX3Nocmlua19pbWFn
ZXNfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dF
VF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZf
R0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7Ci0gICAgcmV0dXJuIHByaXYtPnNl
dHRpbmdzLmF1dG9fc2hyaW5rX2ltYWdlczsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJO
KGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRf
T1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgcmV0dXJuIHByaXYt
PnNldHRpbmdzLmF1dG9TaHJpbmtJbWFnZXM7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19zZXR0
aW5nX2F1dG9fc2hyaW5rX2ltYWdlc19zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9v
bCBhdXRvbWF0aWMpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBz
ZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2
LCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNt
YXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNt
YXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgYXV0b21hdGljID0gISFhdXRvbWF0aWM7
Ci0gICAgaWYgKHByaXYtPnNldHRpbmdzLmF1dG9fc2hyaW5rX2ltYWdlcyAhPSBhdXRvbWF0aWMp
IHsKLSAgICAgICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0U2hyaW5rc1N0YW5kYWxvbmVJbWFn
ZXNUb0ZpdChhdXRvbWF0aWMpOwotICAgICAgICBwcml2LT5zZXR0aW5ncy5hdXRvX3Nocmlua19p
bWFnZXMgPSBhdXRvbWF0aWM7CisgICAgaWYgKHByaXYtPnNldHRpbmdzLmF1dG9TaHJpbmtJbWFn
ZXMgIT0gYXV0b21hdGljKSB7CisgICAgICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0U2hyaW5r
c1N0YW5kYWxvbmVJbWFnZXNUb0ZpdChhdXRvbWF0aWMpOworICAgICAgICBwcml2LT5zZXR0aW5n
cy5hdXRvU2hyaW5rSW1hZ2VzID0gYXV0b21hdGljOwogICAgIH0KICAgICByZXR1cm4gRUlOQV9U
UlVFOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19lbmFibGVfYXV0b19yZXNpemVf
d2luZG93X2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19T
RF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19Q
UklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwotICAgIHJldHVybiBwcml2
LT5zZXR0aW5ncy5lbmFibGVfYXV0b19yZXNpemVfd2luZG93OworICAgIEVXS19WSUVXX1NEX0dF
VF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklF
V19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBy
ZXR1cm4gcHJpdi0+c2V0dGluZ3MuZW5hYmxlQXV0b1Jlc2l6ZVdpbmRvdzsKIH0KIAogRWluYV9C
b29sIGV3a192aWV3X3NldHRpbmdfZW5hYmxlX2F1dG9fcmVzaXplX3dpbmRvd19zZXQoRXZhc19P
YmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCByZXNpemFibGUpCiB7Ci0gICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJ
Vl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKLSAgICBwcml2LT5zZXR0aW5n
cy5lbmFibGVfYXV0b19yZXNpemVfd2luZG93ID0gcmVzaXphYmxlOworICAgIEVXS19WSUVXX1NE
X0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tf
VklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAg
ICBwcml2LT5zZXR0aW5ncy5lbmFibGVBdXRvUmVzaXplV2luZG93ID0gcmVzaXphYmxlOwogICAg
IHJldHVybiBFSU5BX1RSVUU7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2VuYWJs
ZV9zY3JpcHRzX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklF
V19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklF
V19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwotICAgIHJldHVybiBw
cml2LT5zZXR0aW5ncy5lbmFibGVfc2NyaXB0czsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVU
VVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9H
RVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgcmV0dXJuIHBy
aXYtPnNldHRpbmdzLmVuYWJsZVNjcmlwdHM7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19zZXR0
aW5nX2VuYWJsZV9zY3JpcHRzX3NldChFdmFzX09iamVjdCogZXdrVmlldywgRWluYV9Cb29sIGVu
YWJsZSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5B
X0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFf
RkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRh
LCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRh
LCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBlbmFibGUgPSAhIWVuYWJsZTsKLSAgICBpZiAocHJp
di0+c2V0dGluZ3MuZW5hYmxlX3NjcmlwdHMgIT0gZW5hYmxlKSB7Ci0gICAgICAgIHByaXYtPnBh
Z2Vfc2V0dGluZ3MtPnNldEphdmFTY3JpcHRFbmFibGVkKGVuYWJsZSk7Ci0gICAgICAgIHByaXYt
PnNldHRpbmdzLmVuYWJsZV9zY3JpcHRzID0gZW5hYmxlOworICAgIGlmIChwcml2LT5zZXR0aW5n
cy5lbmFibGVTY3JpcHRzICE9IGVuYWJsZSkgeworICAgICAgICBwcml2LT5wYWdlU2V0dGluZ3Mt
PnNldEphdmFTY3JpcHRFbmFibGVkKGVuYWJsZSk7CisgICAgICAgIHByaXYtPnNldHRpbmdzLmVu
YWJsZVNjcmlwdHMgPSBlbmFibGU7CiAgICAgfQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAK
IEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2VuYWJsZV9wbHVnaW5zX2dldChjb25zdCBFdmFz
X09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1Zp
ZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2Qs
IHByaXYsIEVJTkFfRkFMU0UpOwotICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5lbmFibGVfcGx1
Z2luczsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwg
RUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwg
cHJpdiwgRUlOQV9GQUxTRSk7CisgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmVuYWJsZVBsdWdp
bnM7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2VuYWJsZV9wbHVnaW5zX3NldChF
dmFzX09iamVjdCogZXdrVmlldywgRWluYV9Cb29sIGVuYWJsZSkKIHsKLSAgICBFV0tfVklFV19T
RF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19Q
UklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NE
X0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tf
VklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAg
ICBlbmFibGUgPSAhIWVuYWJsZTsKLSAgICBpZiAocHJpdi0+c2V0dGluZ3MuZW5hYmxlX3BsdWdp
bnMgIT0gZW5hYmxlKSB7Ci0gICAgICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNldFBsdWdpbnNF
bmFibGVkKGVuYWJsZSk7Ci0gICAgICAgIHByaXYtPnNldHRpbmdzLmVuYWJsZV9wbHVnaW5zID0g
ZW5hYmxlOworICAgIGlmIChwcml2LT5zZXR0aW5ncy5lbmFibGVQbHVnaW5zICE9IGVuYWJsZSkg
eworICAgICAgICBwcml2LT5wYWdlU2V0dGluZ3MtPnNldFBsdWdpbnNFbmFibGVkKGVuYWJsZSk7
CisgICAgICAgIHByaXYtPnNldHRpbmdzLmVuYWJsZVBsdWdpbnMgPSBlbmFibGU7CiAgICAgfQog
ICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2Vu
YWJsZV9mcmFtZV9mbGF0dGVuaW5nX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsK
LSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsK
LSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwot
ICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5lbmFibGVfZnJhbWVfZmxhdHRlbmluZzsKKyAgICBF
V0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7
CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9G
QUxTRSk7CisgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmVuYWJsZUZyYW1lRmxhdHRlbmluZzsK
IH0KIAogRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfZW5hYmxlX2ZyYW1lX2ZsYXR0ZW5pbmdf
c2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wgZW5hYmxlKQogewotICAgIEVXS19W
SUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19W
SUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJ
RVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAg
IEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0Up
OwogICAgIGVuYWJsZSA9ICEhZW5hYmxlOwotICAgIGlmIChwcml2LT5zZXR0aW5ncy5lbmFibGVf
ZnJhbWVfZmxhdHRlbmluZyAhPSBlbmFibGUpIHsKLSAgICAgICAgcHJpdi0+cGFnZV9zZXR0aW5n
cy0+c2V0RnJhbWVGbGF0dGVuaW5nRW5hYmxlZChlbmFibGUpOwotICAgICAgICBwcml2LT5zZXR0
aW5ncy5lbmFibGVfZnJhbWVfZmxhdHRlbmluZyA9IGVuYWJsZTsKKyAgICBpZiAocHJpdi0+c2V0
dGluZ3MuZW5hYmxlRnJhbWVGbGF0dGVuaW5nICE9IGVuYWJsZSkgeworICAgICAgICBwcml2LT5w
YWdlU2V0dGluZ3MtPnNldEZyYW1lRmxhdHRlbmluZ0VuYWJsZWQoZW5hYmxlKTsKKyAgICAgICAg
cHJpdi0+c2V0dGluZ3MuZW5hYmxlRnJhbWVGbGF0dGVuaW5nID0gZW5hYmxlOwogICAgIH0KICAg
ICByZXR1cm4gRUlOQV9UUlVFOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19zY3Jp
cHRzX3dpbmRvd19vcGVuX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBF
V0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBF
V0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwotICAgIHJl
dHVybiBwcml2LT5zZXR0aW5ncy5zY3JpcHRzX3dpbmRvd19vcGVuOworICAgIEVXS19WSUVXX1NE
X0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tf
VklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAg
ICByZXR1cm4gcHJpdi0+c2V0dGluZ3Muc2NyaXB0c1dpbmRvd09wZW47CiB9CiAKIEVpbmFfQm9v
bCBld2tfdmlld19zZXR0aW5nX3NjcmlwdHNfd2luZG93X29wZW5fc2V0KEV2YXNfT2JqZWN0KiBl
d2tWaWV3LCBFaW5hX0Jvb2wgYWxsb3cpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
Tihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVU
VVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJO
KGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRf
T1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgYWxsb3cgPSAhIWFs
bG93OwotICAgIGlmIChwcml2LT5zZXR0aW5ncy5zY3JpcHRzX3dpbmRvd19vcGVuICE9IGFsbG93
KSB7Ci0gICAgICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNldEphdmFTY3JpcHRDYW5PcGVuV2lu
ZG93c0F1dG9tYXRpY2FsbHkoYWxsb3cpOwotICAgICAgICBwcml2LT5zZXR0aW5ncy5zY3JpcHRz
X3dpbmRvd19vcGVuID0gYWxsb3c7CisgICAgaWYgKHByaXYtPnNldHRpbmdzLnNjcmlwdHNXaW5k
b3dPcGVuICE9IGFsbG93KSB7CisgICAgICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0SmF2YVNj
cmlwdENhbk9wZW5XaW5kb3dzQXV0b21hdGljYWxseShhbGxvdyk7CisgICAgICAgIHByaXYtPnNl
dHRpbmdzLnNjcmlwdHNXaW5kb3dPcGVuID0gYWxsb3c7CiAgICAgfQogICAgIHJldHVybiBFSU5B
X1RSVUU7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX3NjcmlwdHNfY2FuX2Nsb3Nl
X3dpbmRvd3NfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVX
X1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVX
X1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7Ci0gICAgcmV0dXJuIHBy
aXYtPnNldHRpbmdzLnNjcmlwdHNfY2FuX2Nsb3NlX3dpbmRvd3M7CisgICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19W
SUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOworICAg
IHJldHVybiBwcml2LT5zZXR0aW5ncy5zY3JpcHRzQ2FuQ2xvc2VXaW5kb3dzOwogfQogCiBFaW5h
X0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19zY3JpcHRzX2Nhbl9jbG9zZV93aW5kb3dzX3NldChFdmFz
X09iamVjdCogZXdrVmlldywgRWluYV9Cb29sIGFsbG93KQogewotICAgIEVXS19WSUVXX1NEX0dF
VF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZf
R0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVX
X1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIGFs
bG93ID0gISFhbGxvdzsKLSAgICBpZiAocHJpdi0+c2V0dGluZ3Muc2NyaXB0c19jYW5fY2xvc2Vf
d2luZG93cyAhPSBhbGxvdykgewotICAgICAgICBwcml2LT5wYWdlX3NldHRpbmdzLT5zZXRBbGxv
d1NjcmlwdHNUb0Nsb3NlV2luZG93cyhhbGxvdyk7Ci0gICAgICAgIHByaXYtPnNldHRpbmdzLnNj
cmlwdHNfY2FuX2Nsb3NlX3dpbmRvd3MgPSBhbGxvdzsKKyAgICBpZiAocHJpdi0+c2V0dGluZ3Mu
c2NyaXB0c0NhbkNsb3NlV2luZG93cyAhPSBhbGxvdykgeworICAgICAgICBwcml2LT5wYWdlU2V0
dGluZ3MtPnNldEFsbG93U2NyaXB0c1RvQ2xvc2VXaW5kb3dzKGFsbG93KTsKKyAgICAgICAgcHJp
di0+c2V0dGluZ3Muc2NyaXB0c0NhbkNsb3NlV2luZG93cyA9IGFsbG93OwogICAgIH0KICAgICBy
ZXR1cm4gRUlOQV9UUlVFOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19yZXNpemFi
bGVfdGV4dGFyZWFzX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tf
VklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tf
VklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwotICAgIHJldHVy
biBwcml2LT5zZXR0aW5ncy5yZXNpemFibGVfdGV4dGFyZWFzOworICAgIEVXS19WSUVXX1NEX0dF
VF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklF
V19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBy
ZXR1cm4gcHJpdi0+c2V0dGluZ3MucmVzaXphYmxlVGV4dGFyZWFzOwogfQogCiBFaW5hX0Jvb2wg
ZXdrX3ZpZXdfc2V0dGluZ19yZXNpemFibGVfdGV4dGFyZWFzX3NldChFdmFzX09iamVjdCogZXdr
VmlldywgRWluYV9Cb29sIGVuYWJsZSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJO
KGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRV
Uk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9P
Ul9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBlbmFibGUgPSAhIWVu
YWJsZTsKLSAgICBpZiAocHJpdi0+c2V0dGluZ3MucmVzaXphYmxlX3RleHRhcmVhcyAhPSBlbmFi
bGUpIHsKLSAgICAgICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0VGV4dEFyZWFzQXJlUmVzaXph
YmxlKGVuYWJsZSk7Ci0gICAgICAgIHByaXYtPnNldHRpbmdzLnJlc2l6YWJsZV90ZXh0YXJlYXMg
PSBlbmFibGU7CisgICAgaWYgKHByaXYtPnNldHRpbmdzLnJlc2l6YWJsZVRleHRhcmVhcyAhPSBl
bmFibGUpIHsKKyAgICAgICAgcHJpdi0+cGFnZVNldHRpbmdzLT5zZXRUZXh0QXJlYXNBcmVSZXNp
emFibGUoZW5hYmxlKTsKKyAgICAgICAgcHJpdi0+c2V0dGluZ3MucmVzaXphYmxlVGV4dGFyZWFz
ID0gZW5hYmxlOwogICAgIH0KICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCiBFaW5hX0Jvb2wg
ZXdrX3ZpZXdfc2V0dGluZ19wcml2YXRlX2Jyb3dzaW5nX2dldChjb25zdCBFdmFzX09iamVjdCog
ZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBF
SU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJ
TkFfRkFMU0UpOwotICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5wcml2YXRlX2Jyb3dzaW5nOwor
ICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZB
TFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBF
SU5BX0ZBTFNFKTsKKyAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MucHJpdmF0ZUJyb3dzaW5nOwog
fQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19wcml2YXRlX2Jyb3dzaW5nX3NldChFdmFz
X09iamVjdCogZXdrVmlldywgRWluYV9Cb29sIGVuYWJsZSkKIHsKLSAgICBFV0tfVklFV19TRF9H
RVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklW
X0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dF
VF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklF
V19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBl
bmFibGUgPSAhIWVuYWJsZTsKLSAgICBpZiAocHJpdi0+c2V0dGluZ3MucHJpdmF0ZV9icm93c2lu
ZyAhPSBlbmFibGUpIHsKLSAgICAgICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0UHJpdmF0ZUJy
b3dzaW5nRW5hYmxlZChlbmFibGUpOwotICAgICAgICBwcml2LT5zZXR0aW5ncy5wcml2YXRlX2Jy
b3dzaW5nID0gZW5hYmxlOworICAgIGlmIChwcml2LT5zZXR0aW5ncy5wcml2YXRlQnJvd3Npbmcg
IT0gZW5hYmxlKSB7CisgICAgICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0UHJpdmF0ZUJyb3dz
aW5nRW5hYmxlZChlbmFibGUpOworICAgICAgICBwcml2LT5zZXR0aW5ncy5wcml2YXRlQnJvd3Np
bmcgPSBlbmFibGU7CiAgICAgfQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKIEVpbmFfQm9v
bCBld2tfdmlld19zZXR0aW5nX29mZmxpbmVfYXBwX2NhY2hlX2dldChjb25zdCBFdmFzX09iamVj
dCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNk
LCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYs
IEVJTkFfRkFMU0UpOwotICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5vZmZsaW5lX2FwcF9jYWNo
ZTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlO
QV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJp
diwgRUlOQV9GQUxTRSk7CisgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLm9mZmxpbmVBcHBDYWNo
ZTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfb2ZmbGluZV9hcHBfY2FjaGVfc2V0
KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wgZW5hYmxlKQogewotICAgIEVXS19WSUVX
X1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVX
X1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVX
S19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOwog
ICAgIGVuYWJsZSA9ICEhZW5hYmxlOwotICAgIGlmIChwcml2LT5zZXR0aW5ncy5vZmZsaW5lX2Fw
cF9jYWNoZSAhPSBlbmFibGUpIHsKLSAgICAgICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0T2Zm
bGluZVdlYkFwcGxpY2F0aW9uQ2FjaGVFbmFibGVkKGVuYWJsZSk7Ci0gICAgICAgIHByaXYtPnNl
dHRpbmdzLm9mZmxpbmVfYXBwX2NhY2hlID0gZW5hYmxlOworICAgIGlmIChwcml2LT5zZXR0aW5n
cy5vZmZsaW5lQXBwQ2FjaGUgIT0gZW5hYmxlKSB7CisgICAgICAgIHByaXYtPnBhZ2VTZXR0aW5n
cy0+c2V0T2ZmbGluZVdlYkFwcGxpY2F0aW9uQ2FjaGVFbmFibGVkKGVuYWJsZSk7CisgICAgICAg
IHByaXYtPnNldHRpbmdzLm9mZmxpbmVBcHBDYWNoZSA9IGVuYWJsZTsKICAgICB9CiAgICAgcmV0
dXJuIEVJTkFfVFJVRTsKIH0KQEAgLTIwNzIsMjcgKzIwNzIsMjcgQEAgRWluYV9Cb29sIGV3a192
aWV3X3NldHRpbmdfb2ZmbGluZV9hcHBfY2FjaGVfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBF
aW5hX0Jvb2wKIAogRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfY2FyZXRfYnJvd3NpbmdfZ2V0
KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9S
RVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09S
X1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7Ci0gICAgcmV0dXJuIHByaXYtPnNldHRpbmdz
LmNhcmV0X2Jyb3dzaW5nOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywg
c21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4o
c21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3Mu
Y2FyZXRCcm93c2luZzsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfY2FyZXRfYnJv
d3Npbmdfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wgZW5hYmxlKQogewotICAg
IEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAg
IEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAg
RVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0Up
OworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFf
RkFMU0UpOwogICAgIGVuYWJsZSA9ICEhZW5hYmxlOwotICAgIGlmIChwcml2LT5zZXR0aW5ncy5j
YXJldF9icm93c2luZyAhPSBlbmFibGUpIHsKLSAgICAgICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+
c2V0Q2FyZXRCcm93c2luZ0VuYWJsZWQoZW5hYmxlKTsKLSAgICAgICAgcHJpdi0+c2V0dGluZ3Mu
Y2FyZXRfYnJvd3NpbmcgPSBlbmFibGU7CisgICAgaWYgKHByaXYtPnNldHRpbmdzLmNhcmV0QnJv
d3NpbmcgIT0gZW5hYmxlKSB7CisgICAgICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0Q2FyZXRC
cm93c2luZ0VuYWJsZWQoZW5hYmxlKTsKKyAgICAgICAgcHJpdi0+c2V0dGluZ3MuY2FyZXRCcm93
c2luZyA9IGVuYWJsZTsKICAgICB9CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAogY29uc3Qg
Y2hhciogZXdrX3ZpZXdfc2V0dGluZ19lbmNvZGluZ19jdXN0b21fZ2V0KGNvbnN0IEV2YXNfT2Jq
ZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywg
c2QsIDApOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgMCk7Cisg
ICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIDApOworICAg
IEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIDApOwogICAgIEV2
YXNfT2JqZWN0KiBtYWluX2ZyYW1lID0gZXdrX3ZpZXdfZnJhbWVfbWFpbl9nZXQoZXdrVmlldyk7
CiAgICAgV2ViQ29yZTo6RnJhbWUqIGNvcmVfZnJhbWUgPSBFV0tQcml2YXRlOjpjb3JlRnJhbWUo
bWFpbl9mcmFtZSk7CiAKQEAgLTIxMDEsMTk5ICsyMTAxLDE5OSBAQCBjb25zdCBjaGFyKiBld2tf
dmlld19zZXR0aW5nX2VuY29kaW5nX2N1c3RvbV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1Zp
ZXcpCiAgICAgaWYgKG92ZXJyaWRlRW5jb2RpbmcuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4g
MDsKIAotICAgIGVpbmFfc3RyaW5nc2hhcmVfcmVwbGFjZSgmcHJpdi0+c2V0dGluZ3MuZW5jb2Rp
bmdfY3VzdG9tLCBvdmVycmlkZUVuY29kaW5nLnV0ZjgoKS5kYXRhKCkpOwotICAgIHJldHVybiBw
cml2LT5zZXR0aW5ncy5lbmNvZGluZ19jdXN0b207CisgICAgZWluYV9zdHJpbmdzaGFyZV9yZXBs
YWNlKCZwcml2LT5zZXR0aW5ncy5lbmNvZGluZ0N1c3RvbSwgb3ZlcnJpZGVFbmNvZGluZy51dGY4
KCkuZGF0YSgpKTsKKyAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZW5jb2RpbmdDdXN0b207CiB9
CiAKIEVpbmFfQm9vbCBld2tfdmlld19zZXR0aW5nX2VuY29kaW5nX2N1c3RvbV9zZXQoRXZhc19P
YmplY3QqIGV3a1ZpZXcsIGNvbnN0IGNoYXIqIGVuY29kaW5nKQogewotICAgIEVXS19WSUVXX1NE
X0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BS
SVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19W
SUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOwogICAg
IEV2YXNfT2JqZWN0KiBtYWluX2ZyYW1lID0gZXdrX3ZpZXdfZnJhbWVfbWFpbl9nZXQoZXdrVmll
dyk7Ci0gICAgV2ViQ29yZTo6RnJhbWUqIGNvcmVfZnJhbWUgPSBFV0tQcml2YXRlOjpjb3JlRnJh
bWUobWFpbl9mcmFtZSk7CisgICAgV2ViQ29yZTo6RnJhbWUqIGNvcmVGcmFtZSA9IEVXS1ByaXZh
dGU6OmNvcmVGcmFtZShtYWluX2ZyYW1lKTsKICAgICBEQkcoIiVzIiwgZW5jb2RpbmcpOwotICAg
IGlmIChlaW5hX3N0cmluZ3NoYXJlX3JlcGxhY2UoJnByaXYtPnNldHRpbmdzLmVuY29kaW5nX2N1
c3RvbSwgZW5jb2RpbmcpKQotICAgICAgICBjb3JlX2ZyYW1lLT5sb2FkZXIoKS0+cmVsb2FkV2l0
aE92ZXJyaWRlRW5jb2RpbmcoU3RyaW5nOjpmcm9tVVRGOChlbmNvZGluZykpOworICAgIGlmIChl
aW5hX3N0cmluZ3NoYXJlX3JlcGxhY2UoJnByaXYtPnNldHRpbmdzLmVuY29kaW5nQ3VzdG9tLCBl
bmNvZGluZykpCisgICAgICAgIGNvcmVGcmFtZS0+bG9hZGVyKCktPnJlbG9hZFdpdGhPdmVycmlk
ZUVuY29kaW5nKFN0cmluZzo6ZnJvbVVURjgoZW5jb2RpbmcpKTsKICAgICByZXR1cm4gRUlOQV9U
UlVFOwogfQogCiBjb25zdCBjaGFyKiBld2tfdmlld19zZXR0aW5nX2VuY29kaW5nX2RlZmF1bHRf
Z2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9P
Ul9SRVRVUk4oZXdrVmlldywgc2QsIDApOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVS
TihzZCwgcHJpdiwgMCk7Ci0gICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmVuY29kaW5nX2RlZmF1
bHQ7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIDAp
OworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIDApOwor
ICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5lbmNvZGluZ0RlZmF1bHQ7CiB9CiAKIEVpbmFfQm9v
bCBld2tfdmlld19zZXR0aW5nX2VuY29kaW5nX2RlZmF1bHRfc2V0KEV2YXNfT2JqZWN0KiBld2tW
aWV3LCBjb25zdCBjaGFyKiBlbmNvZGluZykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVU
VVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9S
RVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwotICAgIGlmIChlaW5hX3N0cmluZ3NoYXJlX3Jl
cGxhY2UoJnByaXYtPnNldHRpbmdzLmVuY29kaW5nX2RlZmF1bHQsIGVuY29kaW5nKSkKLSAgICAg
ICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0RGVmYXVsdFRleHRFbmNvZGluZ05hbWUoU3RyaW5n
Ojpmcm9tVVRGOChlbmNvZGluZykpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdr
Vmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9S
RVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBpZiAoZWluYV9zdHJpbmdz
aGFyZV9yZXBsYWNlKCZwcml2LT5zZXR0aW5ncy5lbmNvZGluZ0RlZmF1bHQsIGVuY29kaW5nKSkK
KyAgICAgICAgcHJpdi0+cGFnZVNldHRpbmdzLT5zZXREZWZhdWx0VGV4dEVuY29kaW5nTmFtZShT
dHJpbmc6OmZyb21VVEY4KGVuY29kaW5nKSk7CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAog
RWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfZW5jb2RpbmdfZGV0ZWN0b3Jfc2V0KEV2YXNfT2Jq
ZWN0KiBld2tWaWV3LCBFaW5hX0Jvb2wgZW5hYmxlKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9P
Ul9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VU
X09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BS
SVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIGVuYWJs
ZSA9ICEhZW5hYmxlOwotICAgIGlmIChwcml2LT5zZXR0aW5ncy5lbmNvZGluZ19kZXRlY3RvciAh
PSBlbmFibGUpIHsKLSAgICAgICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0VXNlc0VuY29kaW5n
RGV0ZWN0b3IoZW5hYmxlKTsKLSAgICAgICAgcHJpdi0+c2V0dGluZ3MuZW5jb2RpbmdfZGV0ZWN0
b3IgPSBlbmFibGU7CisgICAgaWYgKHByaXYtPnNldHRpbmdzLmVuY29kaW5nRGV0ZWN0b3IgIT0g
ZW5hYmxlKSB7CisgICAgICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0VXNlc0VuY29kaW5nRGV0
ZWN0b3IoZW5hYmxlKTsKKyAgICAgICAgcHJpdi0+c2V0dGluZ3MuZW5jb2RpbmdEZXRlY3RvciA9
IGVuYWJsZTsKICAgICB9CiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAogRWluYV9Cb29sIGV3
a192aWV3X3NldHRpbmdfZW5jb2RpbmdfZGV0ZWN0b3JfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBl
d2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJ
TkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlO
QV9GQUxTRSk7Ci0gICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmVuY29kaW5nX2RldGVjdG9yOwor
ICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZB
TFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBF
SU5BX0ZBTFNFKTsKKyAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZW5jb2RpbmdEZXRlY3RvcjsK
IH0KIAogRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfZW5hYmxlX2RldmVsb3Blcl9leHRyYXNf
Z2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9P
Ul9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VU
X09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7Ci0gICAgcmV0dXJuIHByaXYtPnNldHRp
bmdzLmVuYWJsZV9kZXZlbG9wZXJfZXh0cmFzOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRV
Uk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dF
VF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICByZXR1cm4gcHJp
di0+c2V0dGluZ3MuZW5hYmxlRGV2ZWxvcGVyRXh0cmFzOwogfQogCiBFaW5hX0Jvb2wgZXdrX3Zp
ZXdfc2V0dGluZ19lbmFibGVfZGV2ZWxvcGVyX2V4dHJhc19zZXQoRXZhc19PYmplY3QqIGV3a1Zp
ZXcsIEVpbmFfQm9vbCBlbmFibGUpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihl
d2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJO
KHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3
a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1Jf
UkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CiAgICAgZW5hYmxlID0gISFlbmFi
bGU7Ci0gICAgaWYgKHByaXYtPnNldHRpbmdzLmVuYWJsZV9kZXZlbG9wZXJfZXh0cmFzICE9IGVu
YWJsZSkgewotICAgICAgICBwcml2LT5wYWdlX3NldHRpbmdzLT5zZXREZXZlbG9wZXJFeHRyYXNF
bmFibGVkKGVuYWJsZSk7Ci0gICAgICAgIHByaXYtPnNldHRpbmdzLmVuYWJsZV9kZXZlbG9wZXJf
ZXh0cmFzID0gZW5hYmxlOworICAgIGlmIChwcml2LT5zZXR0aW5ncy5lbmFibGVEZXZlbG9wZXJF
eHRyYXMgIT0gZW5hYmxlKSB7CisgICAgICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0RGV2ZWxv
cGVyRXh0cmFzRW5hYmxlZChlbmFibGUpOworICAgICAgICBwcml2LT5zZXR0aW5ncy5lbmFibGVE
ZXZlbG9wZXJFeHRyYXMgPSBlbmFibGU7CiAgICAgfQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9
CiAKIGludCBld2tfdmlld19zZXR0aW5nX2ZvbnRfbWluaW11bV9zaXplX2dldChjb25zdCBFdmFz
X09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1Zp
ZXcsIHNkLCAwKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIDAp
OwotICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5mb250X21pbmltdW1fc2l6ZTsKKyAgICBFV0tf
VklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgMCk7CisgICAgRVdLX1ZJ
RVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgMCk7CisgICAgcmV0dXJuIHBy
aXYtPnNldHRpbmdzLmZvbnRNaW5pbXVtU2l6ZTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3Nl
dHRpbmdfZm9udF9taW5pbXVtX3NpemVfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBpbnQgc2l6
ZSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZB
TFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFM
U0UpOwotICAgIGlmIChwcml2LT5zZXR0aW5ncy5mb250X21pbmltdW1fc2l6ZSAhPSBzaXplKSB7
Ci0gICAgICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNldE1pbmltdW1Gb250U2l6ZShzaXplKTsK
LSAgICAgICAgcHJpdi0+c2V0dGluZ3MuZm9udF9taW5pbXVtX3NpemUgPSBzaXplOworICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsK
KyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZB
TFNFKTsKKyAgICBpZiAocHJpdi0+c2V0dGluZ3MuZm9udE1pbmltdW1TaXplICE9IHNpemUpIHsK
KyAgICAgICAgcHJpdi0+cGFnZVNldHRpbmdzLT5zZXRNaW5pbXVtRm9udFNpemUoc2l6ZSk7Cisg
ICAgICAgIHByaXYtPnNldHRpbmdzLmZvbnRNaW5pbXVtU2l6ZSA9IHNpemU7CiAgICAgfQogICAg
IHJldHVybiBFSU5BX1RSVUU7CiB9CiAKIGludCBld2tfdmlld19zZXR0aW5nX2ZvbnRfbWluaW11
bV9sb2dpY2FsX3NpemVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVX
S19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIDApOwotICAgIEVXS19WSUVXX1BS
SVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgMCk7Ci0gICAgcmV0dXJuIHByaXYtPnNldHRpbmdz
LmZvbnRfbWluaW11bV9sb2dpY2FsX3NpemU7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
Tihld2tWaWV3LCBzbWFydERhdGEsIDApOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVS
TihzbWFydERhdGEsIHByaXYsIDApOworICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5mb250TWlu
aW11bUxvZ2ljYWxTaXplOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19mb250X21p
bmltdW1fbG9naWNhbF9zaXplX3NldChFdmFzX09iamVjdCogZXdrVmlldywgaW50IHNpemUpCiB7
Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7
Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsK
LSAgICBpZiAocHJpdi0+c2V0dGluZ3MuZm9udF9taW5pbXVtX2xvZ2ljYWxfc2l6ZSAhPSBzaXpl
KSB7Ci0gICAgICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNldE1pbmltdW1Mb2dpY2FsRm9udFNp
emUoc2l6ZSk7Ci0gICAgICAgIHByaXYtPnNldHRpbmdzLmZvbnRfbWluaW11bV9sb2dpY2FsX3Np
emUgPSBzaXplOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnRE
YXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnRE
YXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBpZiAocHJpdi0+c2V0dGluZ3MuZm9udE1pbmlt
dW1Mb2dpY2FsU2l6ZSAhPSBzaXplKSB7CisgICAgICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0
TWluaW11bUxvZ2ljYWxGb250U2l6ZShzaXplKTsKKyAgICAgICAgcHJpdi0+c2V0dGluZ3MuZm9u
dE1pbmltdW1Mb2dpY2FsU2l6ZSA9IHNpemU7CiAgICAgfQogICAgIHJldHVybiBFSU5BX1RSVUU7
CiB9CiAKIGludCBld2tfdmlld19zZXR0aW5nX2ZvbnRfZGVmYXVsdF9zaXplX2dldChjb25zdCBF
dmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3
a1ZpZXcsIHNkLCAwKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYs
IDApOwotICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5mb250X2RlZmF1bHRfc2l6ZTsKKyAgICBF
V0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgMCk7CisgICAgRVdL
X1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgMCk7CisgICAgcmV0dXJu
IHByaXYtPnNldHRpbmdzLmZvbnREZWZhdWx0U2l6ZTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3
X3NldHRpbmdfZm9udF9kZWZhdWx0X3NpemVfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBpbnQg
c2l6ZSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5B
X0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFf
RkFMU0UpOwotICAgIGlmIChwcml2LT5zZXR0aW5ncy5mb250X2RlZmF1bHRfc2l6ZSAhPSBzaXpl
KSB7Ci0gICAgICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNldERlZmF1bHRGb250U2l6ZShzaXpl
KTsKLSAgICAgICAgcHJpdi0+c2V0dGluZ3MuZm9udF9kZWZhdWx0X3NpemUgPSBzaXplOworICAg
IEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNF
KTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5B
X0ZBTFNFKTsKKyAgICBpZiAocHJpdi0+c2V0dGluZ3MuZm9udERlZmF1bHRTaXplICE9IHNpemUp
IHsKKyAgICAgICAgcHJpdi0+cGFnZVNldHRpbmdzLT5zZXREZWZhdWx0Rm9udFNpemUoc2l6ZSk7
CisgICAgICAgIHByaXYtPnNldHRpbmdzLmZvbnREZWZhdWx0U2l6ZSA9IHNpemU7CiAgICAgfQog
ICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKIGludCBld2tfdmlld19zZXR0aW5nX2ZvbnRfbW9u
b3NwYWNlX3NpemVfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19W
SUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIDApOwotICAgIEVXS19WSUVXX1BSSVZf
R0VUX09SX1JFVFVSTihzZCwgcHJpdiwgMCk7Ci0gICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmZv
bnRfbW9ub3NwYWNlX3NpemU7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3
LCBzbWFydERhdGEsIDApOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERh
dGEsIHByaXYsIDApOworICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5mb250TW9ub3NwYWNlU2l6
ZTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfZm9udF9tb25vc3BhY2Vfc2l6ZV9z
ZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGludCBzaXplKQogewotICAgIEVXS19WSUVXX1NEX0dF
VF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZf
R0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7Ci0gICAgaWYgKHByaXYtPnNldHRp
bmdzLmZvbnRfbW9ub3NwYWNlX3NpemUgIT0gc2l6ZSkgewotICAgICAgICBwcml2LT5wYWdlX3Nl
dHRpbmdzLT5zZXREZWZhdWx0Rml4ZWRGb250U2l6ZShzaXplKTsKLSAgICAgICAgcHJpdi0+c2V0
dGluZ3MuZm9udF9tb25vc3BhY2Vfc2l6ZSA9IHNpemU7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BS
SVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIGlmIChw
cml2LT5zZXR0aW5ncy5mb250TW9ub3NwYWNlU2l6ZSAhPSBzaXplKSB7CisgICAgICAgIHByaXYt
PnBhZ2VTZXR0aW5ncy0+c2V0RGVmYXVsdEZpeGVkRm9udFNpemUoc2l6ZSk7CisgICAgICAgIHBy
aXYtPnNldHRpbmdzLmZvbnRNb25vc3BhY2VTaXplID0gc2l6ZTsKICAgICB9CiAgICAgcmV0dXJu
IEVJTkFfVFJVRTsKIH0KIAogY29uc3QgY2hhciogZXdrX3ZpZXdfZm9udF9mYW1pbHlfbmFtZV9n
ZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV3a19Gb250X0ZhbWlseSBmb250RmFtaWx5
KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIDApOwotICAg
IEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgMCk7CisgICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIDApOworICAgIEVXS19WSUVXX1BS
SVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIDApOwogCiAgICAgc3dpdGNoIChmb250
RmFtaWx5KSB7CiAgICAgY2FzZSBFV0tfRk9OVF9GQU1JTFlfU1RBTkRBUkQ6Ci0gICAgICAgIHJl
dHVybiBwcml2LT5zZXR0aW5ncy5mb250X3N0YW5kYXJkOworICAgICAgICByZXR1cm4gcHJpdi0+
c2V0dGluZ3MuZm9udFN0YW5kYXJkOwogICAgIGNhc2UgRVdLX0ZPTlRfRkFNSUxZX0NVUlNJVkU6
Ci0gICAgICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5mb250X2N1cnNpdmU7CisgICAgICAgIHJl
dHVybiBwcml2LT5zZXR0aW5ncy5mb250Q3Vyc2l2ZTsKICAgICBjYXNlIEVXS19GT05UX0ZBTUlM
WV9GQU5UQVNZOgotICAgICAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZm9udF9mYW50YXN5Owor
ICAgICAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZm9udEZhbnRhc3k7CiAgICAgY2FzZSBFV0tf
Rk9OVF9GQU1JTFlfTU9OT1NQQUNFOgotICAgICAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZm9u
dF9tb25vc3BhY2U7CisgICAgICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5mb250TW9ub3NwYWNl
OwogICAgIGNhc2UgRVdLX0ZPTlRfRkFNSUxZX1NFUklGOgotICAgICAgICByZXR1cm4gcHJpdi0+
c2V0dGluZ3MuZm9udF9zZXJpZjsKKyAgICAgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmZvbnRT
ZXJpZjsKICAgICBjYXNlIEVXS19GT05UX0ZBTUlMWV9TQU5TX1NFUklGOgotICAgICAgICByZXR1
cm4gcHJpdi0+c2V0dGluZ3MuZm9udF9zYW5zX3NlcmlmOworICAgICAgICByZXR1cm4gcHJpdi0+
c2V0dGluZ3MuZm9udFNhbnNTZXJpZjsKICAgICB9CiAgICAgcmV0dXJuIDA7CiB9CiAKIEVpbmFf
Qm9vbCBld2tfdmlld19mb250X2ZhbWlseV9uYW1lX3NldChFdmFzX09iamVjdCogZXdrVmlldywg
RXdrX0ZvbnRfRmFtaWx5IGZvbnRGYW1pbHksIGNvbnN0IGNoYXIqIG5hbWUpCiB7Ci0gICAgRVdL
X1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdL
X1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tf
VklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7Cisg
ICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxT
RSk7CiAKICAgICBzd2l0Y2ggKGZvbnRGYW1pbHkpIHsKICAgICBjYXNlIEVXS19GT05UX0ZBTUlM
WV9TVEFOREFSRDoKLSAgICAgICAgaWYgKGVpbmFfc3RyaW5nc2hhcmVfcmVwbGFjZSgmcHJpdi0+
c2V0dGluZ3MuZm9udF9zdGFuZGFyZCwgbmFtZSkpCi0gICAgICAgICAgICBwcml2LT5wYWdlX3Nl
dHRpbmdzLT5zZXRTdGFuZGFyZEZvbnRGYW1pbHkoQXRvbWljU3RyaW5nOjpmcm9tVVRGOChuYW1l
KSk7CisgICAgICAgIGlmIChlaW5hX3N0cmluZ3NoYXJlX3JlcGxhY2UoJnByaXYtPnNldHRpbmdz
LmZvbnRTdGFuZGFyZCwgbmFtZSkpCisgICAgICAgICAgICBwcml2LT5wYWdlU2V0dGluZ3MtPnNl
dFN0YW5kYXJkRm9udEZhbWlseShBdG9taWNTdHJpbmc6OmZyb21VVEY4KG5hbWUpKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBFV0tfRk9OVF9GQU1JTFlfQ1VSU0lWRToKLSAgICAgICAgaWYg
KGVpbmFfc3RyaW5nc2hhcmVfcmVwbGFjZSgmcHJpdi0+c2V0dGluZ3MuZm9udF9jdXJzaXZlLCBu
YW1lKSkKLSAgICAgICAgICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNldEN1cnNpdmVGb250RmFt
aWx5KEF0b21pY1N0cmluZzo6ZnJvbVVURjgobmFtZSkpOworICAgICAgICBpZiAoZWluYV9zdHJp
bmdzaGFyZV9yZXBsYWNlKCZwcml2LT5zZXR0aW5ncy5mb250Q3Vyc2l2ZSwgbmFtZSkpCisgICAg
ICAgICAgICBwcml2LT5wYWdlU2V0dGluZ3MtPnNldEN1cnNpdmVGb250RmFtaWx5KEF0b21pY1N0
cmluZzo6ZnJvbVVURjgobmFtZSkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEVXS19GT05U
X0ZBTUlMWV9GQU5UQVNZOgotICAgICAgICBpZiAoZWluYV9zdHJpbmdzaGFyZV9yZXBsYWNlKCZw
cml2LT5zZXR0aW5ncy5mb250X2ZhbnRhc3ksIG5hbWUpKQotICAgICAgICAgICAgcHJpdi0+cGFn
ZV9zZXR0aW5ncy0+c2V0RmFudGFzeUZvbnRGYW1pbHkoQXRvbWljU3RyaW5nOjpmcm9tVVRGOChu
YW1lKSk7CisgICAgICAgIGlmIChlaW5hX3N0cmluZ3NoYXJlX3JlcGxhY2UoJnByaXYtPnNldHRp
bmdzLmZvbnRGYW50YXN5LCBuYW1lKSkKKyAgICAgICAgICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+
c2V0RmFudGFzeUZvbnRGYW1pbHkoQXRvbWljU3RyaW5nOjpmcm9tVVRGOChuYW1lKSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgRVdLX0ZPTlRfRkFNSUxZX01PTk9TUEFDRToKLSAgICAgICAg
aWYgKGVpbmFfc3RyaW5nc2hhcmVfcmVwbGFjZSgmcHJpdi0+c2V0dGluZ3MuZm9udF9tb25vc3Bh
Y2UsIG5hbWUpKQotICAgICAgICAgICAgcHJpdi0+cGFnZV9zZXR0aW5ncy0+c2V0Rml4ZWRGb250
RmFtaWx5KEF0b21pY1N0cmluZzo6ZnJvbVVURjgobmFtZSkpOworICAgICAgICBpZiAoZWluYV9z
dHJpbmdzaGFyZV9yZXBsYWNlKCZwcml2LT5zZXR0aW5ncy5mb250TW9ub3NwYWNlLCBuYW1lKSkK
KyAgICAgICAgICAgIHByaXYtPnBhZ2VTZXR0aW5ncy0+c2V0Rml4ZWRGb250RmFtaWx5KEF0b21p
Y1N0cmluZzo6ZnJvbVVURjgobmFtZSkpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEVXS19G
T05UX0ZBTUlMWV9TRVJJRjoKLSAgICAgICAgaWYgKGVpbmFfc3RyaW5nc2hhcmVfcmVwbGFjZSgm
cHJpdi0+c2V0dGluZ3MuZm9udF9zZXJpZiwgbmFtZSkpCi0gICAgICAgICAgICBwcml2LT5wYWdl
X3NldHRpbmdzLT5zZXRTZXJpZkZvbnRGYW1pbHkoQXRvbWljU3RyaW5nOjpmcm9tVVRGOChuYW1l
KSk7CisgICAgICAgIGlmIChlaW5hX3N0cmluZ3NoYXJlX3JlcGxhY2UoJnByaXYtPnNldHRpbmdz
LmZvbnRTZXJpZiwgbmFtZSkpCisgICAgICAgICAgICBwcml2LT5wYWdlU2V0dGluZ3MtPnNldFNl
cmlmRm9udEZhbWlseShBdG9taWNTdHJpbmc6OmZyb21VVEY4KG5hbWUpKTsKICAgICAgICAgYnJl
YWs7CiAgICAgY2FzZSBFV0tfRk9OVF9GQU1JTFlfU0FOU19TRVJJRjoKLSAgICAgICAgaWYgKGVp
bmFfc3RyaW5nc2hhcmVfcmVwbGFjZSgmcHJpdi0+c2V0dGluZ3MuZm9udF9zYW5zX3NlcmlmLCBu
YW1lKSkKLSAgICAgICAgICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNldFNhbnNTZXJpZkZvbnRG
YW1pbHkoQXRvbWljU3RyaW5nOjpmcm9tVVRGOChuYW1lKSk7CisgICAgICAgIGlmIChlaW5hX3N0
cmluZ3NoYXJlX3JlcGxhY2UoJnByaXYtPnNldHRpbmdzLmZvbnRTYW5zU2VyaWYsIG5hbWUpKQor
ICAgICAgICAgICAgcHJpdi0+cGFnZVNldHRpbmdzLT5zZXRTYW5zU2VyaWZGb250RmFtaWx5KEF0
b21pY1N0cmluZzo6ZnJvbVVURjgobmFtZSkpOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0
OgogICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKQEAgLTIzMDQsOTkgKzIzMDQsOTkgQEAgRWlu
YV9Cb29sIGV3a192aWV3X2ZvbnRfZmFtaWx5X25hbWVfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3
LCBFd2tfRm9udF9GYW1pbHkgZm8KIAogRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfc3BhdGlh
bF9uYXZpZ2F0aW9uX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tf
VklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tf
VklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOwotICAgIHJldHVy
biBwcml2LT5zZXR0aW5ncy5zcGF0aWFsX25hdmlnYXRpb247CisgICAgRVdLX1ZJRVdfU0RfR0VU
X09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVX
X1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIHJl
dHVybiBwcml2LT5zZXR0aW5ncy5zcGF0aWFsTmF2aWdhdGlvbjsKIH0KIAogRWluYV9Cb29sIGV3
a192aWV3X3NldHRpbmdfc3BhdGlhbF9uYXZpZ2F0aW9uX3NldChFdmFzX09iamVjdCogZXdrVmll
dywgRWluYV9Cb29sIGVuYWJsZSkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3
a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4o
c2QsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdr
Vmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9S
RVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBlbmFibGUgPSAhIWVuYWJs
ZTsKLSAgICBpZiAocHJpdi0+c2V0dGluZ3Muc3BhdGlhbF9uYXZpZ2F0aW9uICE9IGVuYWJsZSkg
ewotICAgICAgICBwcml2LT5wYWdlX3NldHRpbmdzLT5zZXRTcGF0aWFsTmF2aWdhdGlvbkVuYWJs
ZWQoZW5hYmxlKTsKLSAgICAgICAgcHJpdi0+c2V0dGluZ3Muc3BhdGlhbF9uYXZpZ2F0aW9uID0g
ZW5hYmxlOworICAgIGlmIChwcml2LT5zZXR0aW5ncy5zcGF0aWFsTmF2aWdhdGlvbiAhPSBlbmFi
bGUpIHsKKyAgICAgICAgcHJpdi0+cGFnZVNldHRpbmdzLT5zZXRTcGF0aWFsTmF2aWdhdGlvbkVu
YWJsZWQoZW5hYmxlKTsKKyAgICAgICAgcHJpdi0+c2V0dGluZ3Muc3BhdGlhbE5hdmlnYXRpb24g
PSBlbmFibGU7CiAgICAgfQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKIEVpbmFfQm9vbCBl
d2tfdmlld19zZXR0aW5nX2xvY2FsX3N0b3JhZ2VfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tW
aWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFf
RkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9G
QUxTRSk7Ci0gICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmxvY2FsX3N0b3JhZ2U7CisgICAgRVdL
X1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOwor
ICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFM
U0UpOworICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5sb2NhbFN0b3JhZ2U7CiB9CiAKIEVpbmFf
Qm9vbCBld2tfdmlld19zZXR0aW5nX2xvY2FsX3N0b3JhZ2Vfc2V0KEV2YXNfT2JqZWN0KiBld2tW
aWV3LCBFaW5hX0Jvb2wgZW5hYmxlKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVS
TihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihl
d2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09S
X1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0UpOwogICAgIGVuYWJsZSA9ICEhZW5h
YmxlOwotICAgIGlmIChwcml2LT5zZXR0aW5ncy5sb2NhbF9zdG9yYWdlICE9IGVuYWJsZSkgewot
ICAgICAgICBwcml2LT5wYWdlX3NldHRpbmdzLT5zZXRMb2NhbFN0b3JhZ2VFbmFibGVkKGVuYWJs
ZSk7Ci0gICAgICAgIHByaXYtPnNldHRpbmdzLmxvY2FsX3N0b3JhZ2UgPSBlbmFibGU7CisgICAg
aWYgKHByaXYtPnNldHRpbmdzLmxvY2FsU3RvcmFnZSAhPSBlbmFibGUpIHsKKyAgICAgICAgcHJp
di0+cGFnZVNldHRpbmdzLT5zZXRMb2NhbFN0b3JhZ2VFbmFibGVkKGVuYWJsZSk7CisgICAgICAg
IHByaXYtPnNldHRpbmdzLmxvY2FsU3RvcmFnZSA9IGVuYWJsZTsKICAgICB9CiAgICAgcmV0dXJu
IEVJTkFfVFJVRTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfcGFnZV9jYWNoZV9n
ZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRf
T1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKLSAgICByZXR1cm4gcHJpdi0+c2V0dGlu
Z3MucGFnZV9jYWNoZTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNt
YXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNt
YXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLnBh
Z2VDYWNoZTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3NldHRpbmdfcGFnZV9jYWNoZV9zZXQo
RXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCBlbmFibGUpCiB7Ci0gICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdf
UFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19T
RF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdL
X1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CiAg
ICAgZW5hYmxlID0gISFlbmFibGU7Ci0gICAgaWYgKHByaXYtPnNldHRpbmdzLnBhZ2VfY2FjaGUg
IT0gZW5hYmxlKSB7Ci0gICAgICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNldFVzZXNQYWdlQ2Fj
aGUoZW5hYmxlKTsKLSAgICAgICAgcHJpdi0+c2V0dGluZ3MucGFnZV9jYWNoZSA9IGVuYWJsZTsK
KyAgICBpZiAocHJpdi0+c2V0dGluZ3MucGFnZUNhY2hlICE9IGVuYWJsZSkgeworICAgICAgICBw
cml2LT5wYWdlU2V0dGluZ3MtPnNldFVzZXNQYWdlQ2FjaGUoZW5hYmxlKTsKKyAgICAgICAgcHJp
di0+c2V0dGluZ3MucGFnZUNhY2hlID0gZW5hYmxlOwogICAgIH0KICAgICByZXR1cm4gRUlOQV9U
UlVFOwogfQogCiBjb25zdCBjaGFyKiBld2tfdmlld19zZXR0aW5nX2xvY2FsX3N0b3JhZ2VfZGF0
YWJhc2VfcGF0aF9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJ
RVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgMCk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9H
RVRfT1JfUkVUVVJOKHNkLCBwcml2LCAwKTsKLSAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MubG9j
YWxfc3RvcmFnZV9kYXRhYmFzZV9wYXRoOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrVmlldywgc21hcnREYXRhLCAwKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4o
c21hcnREYXRhLCBwcml2LCAwKTsKKyAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MubG9jYWxTdG9y
YWdlRGF0YWJhc2VQYXRoOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2V0dGluZ19sb2NhbF9z
dG9yYWdlX2RhdGFiYXNlX3BhdGhfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBjaGFy
KiBwYXRoKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJ
TkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlO
QV9GQUxTRSk7Ci0gICAgaWYgKGVpbmFfc3RyaW5nc2hhcmVfcmVwbGFjZSgmcHJpdi0+c2V0dGlu
Z3MubG9jYWxfc3RvcmFnZV9kYXRhYmFzZV9wYXRoLCBwYXRoKSkKLSAgICAgICAgcHJpdi0+cGFn
ZV9zZXR0aW5ncy0+c2V0TG9jYWxTdG9yYWdlRGF0YWJhc2VQYXRoKFN0cmluZzo6ZnJvbVVURjgo
cGF0aCkpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRh
LCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRh
LCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBpZiAoZWluYV9zdHJpbmdzaGFyZV9yZXBsYWNlKCZw
cml2LT5zZXR0aW5ncy5sb2NhbFN0b3JhZ2VEYXRhYmFzZVBhdGgsIHBhdGgpKQorICAgICAgICBw
cml2LT5wYWdlU2V0dGluZ3MtPnNldExvY2FsU3RvcmFnZURhdGFiYXNlUGF0aChTdHJpbmc6OmZy
b21VVEY4KHBhdGgpKTsKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCiBFaW5hX0Jvb2wgZXdr
X3ZpZXdfc2V0dGluZ19taW5pbXVtX3RpbWVyX2ludGVydmFsX3NldChFdmFzX09iamVjdCogZXdr
VmlldywgZG91YmxlIGludGVydmFsKQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVS
TihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7Ci0gICAgaWYgKGZhYnMocHJpdi0+c2V0dGluZ3MuZG9t
X3RpbWVyX2ludGVydmFsIC0gaW50ZXJ2YWwpID49IHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91Ymxl
Pjo6ZXBzaWxvbigpKSB7Ci0gICAgICAgIHByaXYtPnBhZ2Vfc2V0dGluZ3MtPnNldE1pbkRPTVRp
bWVySW50ZXJ2YWwoaW50ZXJ2YWwpOwotICAgICAgICBwcml2LT5zZXR0aW5ncy5kb21fdGltZXJf
aW50ZXJ2YWwgPSBpbnRlcnZhbDsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1Zp
ZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVU
VVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgaWYgKGZhYnMocHJpdi0+c2V0
dGluZ3MuZG9tVGltZXJJbnRlcnZhbCAtIGludGVydmFsKSA+PSBzdGQ6Om51bWVyaWNfbGltaXRz
PGRvdWJsZT46OmVwc2lsb24oKSkgeworICAgICAgICBwcml2LT5wYWdlU2V0dGluZ3MtPnNldE1p
bkRPTVRpbWVySW50ZXJ2YWwoaW50ZXJ2YWwpOworICAgICAgICBwcml2LT5zZXR0aW5ncy5kb21U
aW1lckludGVydmFsID0gaW50ZXJ2YWw7CiAgICAgfQogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9
CiAKIGRvdWJsZSBld2tfdmlld19zZXR0aW5nX21pbmltdW1fdGltZXJfaW50ZXJ2YWxfZ2V0KGNv
bnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRV
Uk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JF
VFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7Ci0gICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLmRv
bV90aW1lcl9pbnRlcnZhbDsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcs
IHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJO
KHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgcmV0dXJuIHByaXYtPnNldHRpbmdz
LmRvbVRpbWVySW50ZXJ2YWw7CiB9CiAKIEV3a19WaWV3X1NtYXJ0X0RhdGEqIGV3a192aWV3X3Nt
YXJ0X2RhdGFfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVX
X1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIDApOwotICAgIHJldHVybiBzZDsKKyAgICBF
V0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgMCk7CisgICAgcmV0
dXJuIHNtYXJ0RGF0YTsKIH0KIAogLyoqCkBAIC0yNDYxLDggKzI0NjEsOCBAQCBjb25zdCBFd2tf
U2Nyb2xsX1JlcXVlc3QqIGV3a192aWV3X3Njcm9sbF9yZXF1ZXN0c19nZXQoY29uc3QgRXdrX1Zp
ZXdfUHJpdmF0ZV9EYQogICogQHBhcmFtIHByaXYgcHJpdmF0ZSBoYW5kbGUgcG9pbnRlciBvZiB0
aGUgdmlldyB0byBhZGQgcmVwYWludCByZXF1ZXN0LgogICogQHBhcmFtIHggaG9yaXpvbnRhbCBw
b3NpdGlvbiByZWxhdGl2ZSB0byBjdXJyZW50IHZpZXcgcG9ydCAoc2Nyb2xsZWQpLgogICogQHBh
cmFtIHkgdmVydGljYWwgcG9zaXRpb24gcmVsYXRpdmUgdG8gY3VycmVudCB2aWV3IHBvcnQgKHNj
cm9sbGVkKS4KLSAqIEBwYXJhbSB3IHdpZHRoIG9mIGFyZWEgdG8gYmUgcmVwYWludGVkCi0gKiBA
cGFyYW0gaCBoZWlnaHQgb2YgYXJlYSB0byBiZSByZXBhaW50ZWQKKyAqIEBwYXJhbSB3aWR0aCB3
aWR0aCBvZiBhcmVhIHRvIGJlIHJlcGFpbnRlZAorICogQHBhcmFtIGhlaWdodCBoZWlnaHQgb2Yg
YXJlYSB0byBiZSByZXBhaW50ZWQKICAqCiAgKiBAbm90ZSB0aGlzIGlzIG5vdCBmb3IgZ2VuZXJh
bCB1c2UgYnV0IGp1c3QgZm9yIHN1YmNsYXNzZXMgdGhhdCB3YW50CiAgKiAgICAgICB0byBkZWZp
bmUgdGhlaXIgb3duIGJhY2tpbmcgc3RvcmUuCkBAIC0yNDg1LDEyICsyNDg1LDEyIEBAIHZvaWQg
ZXdrX3ZpZXdfbGF5b3V0X2lmX25lZWRlZF9yZWN1cnNpdmUoRXdrX1ZpZXdfUHJpdmF0ZV9EYXRh
KiBwcml2KQogewogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHByaXYpOwogCi0gICAg
V2ViQ29yZTo6RnJhbWVWaWV3KiB2ID0gcHJpdi0+bWFpbl9mcmFtZS0+dmlldygpOwotICAgIGlm
ICghdikgeworICAgIFdlYkNvcmU6OkZyYW1lVmlldyogdmlldyA9IHByaXYtPm1haW5GcmFtZS0+
dmlldygpOworICAgIGlmICghdmlldykgewogICAgICAgICBFUlIoIm5vIG1haW4gZnJhbWUgdmll
dyIpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIHYtPnVwZGF0ZUxheW91dEFuZFN0eWxl
SWZOZWVkZWRSZWN1cnNpdmUoKTsKKyAgICB2aWV3LT51cGRhdGVMYXlvdXRBbmRTdHlsZUlmTmVl
ZGVkUmVjdXJzaXZlKCk7CiB9CiAKIHZvaWQgZXdrX3ZpZXdfc2Nyb2xsc19wcm9jZXNzKEV3a19W
aWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSkKQEAgLTI1MTEsNyArMjUxMSw3IEBAIHZvaWQgZXdr
X3ZpZXdfc2Nyb2xsc19wcm9jZXNzKEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSkKICAq
ICAgICAgIHRvIGRlZmluZSB0aGVpciBvd24gYmFja2luZyBzdG9yZS4KICAqLwogc3RydWN0IF9F
d2tfVmlld19QYWludF9Db250ZXh0IHsKLSAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQqIGdj
OworICAgIFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dCogZ3JhcGhpY0NvbnRleHQ7CiAgICAgV2Vi
Q29yZTo6RnJhbWVWaWV3KiB2aWV3OwogICAgIGNhaXJvX3QqIGNyOwogfTsKQEAgLTI1MjAsMjYg
KzI1MjAsMjYgQEAgRXdrX1ZpZXdfUGFpbnRfQ29udGV4dCogZXdrX3ZpZXdfcGFpbnRfY29udGV4
dF9uZXcoRXdrX1ZpZXdfUHJpdmF0ZV9EYXRhKiBwcml2LAogewogICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOX1ZBTChwcml2LCAwKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
Tl9WQUwoY3IsIDApOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChwcml2LT5t
YWluX2ZyYW1lLCAwKTsKLSAgICBXZWJDb3JlOjpGcmFtZVZpZXcqIHZpZXcgPSBwcml2LT5tYWlu
X2ZyYW1lLT52aWV3KCk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHByaXYt
Pm1haW5GcmFtZSwgMCk7CisgICAgV2ViQ29yZTo6RnJhbWVWaWV3KiB2aWV3ID0gcHJpdi0+bWFp
bkZyYW1lLT52aWV3KCk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHZpZXcs
IDApOwotICAgIEV3a19WaWV3X1BhaW50X0NvbnRleHQqIGN0eHQgPSBzdGF0aWNfY2FzdDxFd2tf
Vmlld19QYWludF9Db250ZXh0Kj4obWFsbG9jKHNpemVvZigqY3R4dCkpKTsKLSAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoY3R4dCwgMCk7CisgICAgRXdrX1ZpZXdfUGFpbnRfQ29u
dGV4dCogY29udGV4dCA9IHN0YXRpY19jYXN0PEV3a19WaWV3X1BhaW50X0NvbnRleHQqPihtYWxs
b2Moc2l6ZW9mKCpjb250ZXh0KSkpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZB
TChjb250ZXh0LCAwKTsKIAotICAgIGN0eHQtPmdjID0gbmV3IFdlYkNvcmU6OkdyYXBoaWNzQ29u
dGV4dChjcik7Ci0gICAgaWYgKCFjdHh0LT5nYykgewotICAgICAgICBmcmVlKGN0eHQpOworICAg
IGNvbnRleHQtPmdyYXBoaWNDb250ZXh0ID0gbmV3IFdlYkNvcmU6OkdyYXBoaWNzQ29udGV4dChj
cik7CisgICAgaWYgKCFjb250ZXh0LT5ncmFwaGljQ29udGV4dCkgeworICAgICAgICBmcmVlKGNv
bnRleHQpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAgY3R4dC0+dmlldyA9IHZpZXc7
Ci0gICAgY3R4dC0+Y3IgPSBjYWlyb19yZWZlcmVuY2UoY3IpOwotICAgIHJldHVybiBjdHh0Owor
ICAgIGNvbnRleHQtPnZpZXcgPSB2aWV3OworICAgIGNvbnRleHQtPmNyID0gY2Fpcm9fcmVmZXJl
bmNlKGNyKTsKKyAgICByZXR1cm4gY29udGV4dDsKIH0KIAogdm9pZCBld2tfdmlld19wYWludF9j
b250ZXh0X2ZyZWUoRXdrX1ZpZXdfUGFpbnRfQ29udGV4dCogY29udGV4dCkKIHsKICAgICBFSU5B
X1NBRkVUWV9PTl9OVUxMX1JFVFVSTihjb250ZXh0KTsKLSAgICBkZWxldGUgY29udGV4dC0+Z2M7
CisgICAgZGVsZXRlIGNvbnRleHQtPmdyYXBoaWNDb250ZXh0OwogICAgIGNhaXJvX2Rlc3Ryb3ko
Y29udGV4dC0+Y3IpOwogICAgIGZyZWUoY29udGV4dCk7CiB9CkBAIC0yNTQ4LDEzICsyNTQ4LDEz
IEBAIHZvaWQgZXdrX3ZpZXdfcGFpbnRfY29udGV4dF9zYXZlKEV3a19WaWV3X1BhaW50X0NvbnRl
eHQqIGNvbnRleHQpCiB7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oY29udGV4dCk7
CiAgICAgY2Fpcm9fc2F2ZShjb250ZXh0LT5jcik7Ci0gICAgY29udGV4dC0+Z2MtPnNhdmUoKTsK
KyAgICBjb250ZXh0LT5ncmFwaGljQ29udGV4dC0+c2F2ZSgpOwogfQogCiB2b2lkIGV3a192aWV3
X3BhaW50X2NvbnRleHRfcmVzdG9yZShFd2tfVmlld19QYWludF9Db250ZXh0KiBjb250ZXh0KQog
ewogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGNvbnRleHQpOwotICAgIGNvbnRleHQt
PmdjLT5yZXN0b3JlKCk7CisgICAgY29udGV4dC0+Z3JhcGhpY0NvbnRleHQtPnJlc3RvcmUoKTsK
ICAgICBjYWlyb19yZXN0b3JlKGNvbnRleHQtPmNyKTsKIH0KIApAQCAtMjU2Miw3ICsyNTYyLDcg
QEAgdm9pZCBld2tfdmlld19wYWludF9jb250ZXh0X2NsaXAoRXdrX1ZpZXdfUGFpbnRfQ29udGV4
dCogY29udGV4dCwgY29uc3QgRWluYV9SZWMKIHsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JF
VFVSTihjb250ZXh0KTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihhcmVhKTsKLSAg
ICBjb250ZXh0LT5nYy0+Y2xpcChXZWJDb3JlOjpJbnRSZWN0KGFyZWEtPngsIGFyZWEtPnksIGFy
ZWEtPncsIGFyZWEtPmgpKTsKKyAgICBjb250ZXh0LT5ncmFwaGljQ29udGV4dC0+Y2xpcChXZWJD
b3JlOjpJbnRSZWN0KGFyZWEtPngsIGFyZWEtPnksIGFyZWEtPncsIGFyZWEtPmgpKTsKIH0KIAog
dm9pZCBld2tfdmlld19wYWludF9jb250ZXh0X3BhaW50KEV3a19WaWV3X1BhaW50X0NvbnRleHQq
IGNvbnRleHQsIGNvbnN0IEVpbmFfUmVjdGFuZ2xlKiBhcmVhKQpAQCAtMjU3Myw4ICsyNTczLDgg
QEAgdm9pZCBld2tfdmlld19wYWludF9jb250ZXh0X3BhaW50KEV3a19WaWV3X1BhaW50X0NvbnRl
eHQqIGNvbnRleHQsIGNvbnN0IEVpbmFfUmUKICAgICBXZWJDb3JlOjpJbnRSZWN0IHJlY3QoYXJl
YS0+eCwgYXJlYS0+eSwgYXJlYS0+dywgYXJlYS0+aCk7CiAKICAgICBpZiAoY29udGV4dC0+dmll
dy0+aXNUcmFuc3BhcmVudCgpKQotICAgICAgICBjb250ZXh0LT5nYy0+Y2xlYXJSZWN0KHJlY3Qp
OwotICAgIGNvbnRleHQtPnZpZXctPnBhaW50KGNvbnRleHQtPmdjLCByZWN0KTsKKyAgICAgICAg
Y29udGV4dC0+Z3JhcGhpY0NvbnRleHQtPmNsZWFyUmVjdChyZWN0KTsKKyAgICBjb250ZXh0LT52
aWV3LT5wYWludChjb250ZXh0LT5ncmFwaGljQ29udGV4dCwgcmVjdCk7CiB9CiAKIHZvaWQgZXdr
X3ZpZXdfcGFpbnRfY29udGV4dF9wYWludF9jb250ZW50cyhFd2tfVmlld19QYWludF9Db250ZXh0
KiBjb250ZXh0LCBjb25zdCBFaW5hX1JlY3RhbmdsZSogYXJlYSkKQEAgLTI1ODUsMjMgKzI1ODUs
MjMgQEAgdm9pZCBld2tfdmlld19wYWludF9jb250ZXh0X3BhaW50X2NvbnRlbnRzKEV3a19WaWV3
X1BhaW50X0NvbnRleHQqIGNvbnRleHQsIGNvbnMKICAgICBXZWJDb3JlOjpJbnRSZWN0IHJlY3Qo
YXJlYS0+eCwgYXJlYS0+eSwgYXJlYS0+dywgYXJlYS0+aCk7CiAKICAgICBpZiAoY29udGV4dC0+
dmlldy0+aXNUcmFuc3BhcmVudCgpKQotICAgICAgICBjb250ZXh0LT5nYy0+Y2xlYXJSZWN0KHJl
Y3QpOworICAgICAgICBjb250ZXh0LT5ncmFwaGljQ29udGV4dC0+Y2xlYXJSZWN0KHJlY3QpOwog
Ci0gICAgY29udGV4dC0+dmlldy0+cGFpbnRDb250ZW50cyhjb250ZXh0LT5nYywgcmVjdCk7Cisg
ICAgY29udGV4dC0+dmlldy0+cGFpbnRDb250ZW50cyhjb250ZXh0LT5ncmFwaGljQ29udGV4dCwg
cmVjdCk7CiB9CiAKIHZvaWQgZXdrX3ZpZXdfcGFpbnRfY29udGV4dF9zY2FsZShFd2tfVmlld19Q
YWludF9Db250ZXh0KiBjb250ZXh0LCBmbG9hdCBzY2FsZVgsIGZsb2F0IHNjYWxlWSkKIHsKICAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihjb250ZXh0KTsKIAotICAgIGNvbnRleHQtPmdj
LT5zY2FsZShXZWJDb3JlOjpGbG9hdFNpemUoc2NhbGVYLCBzY2FsZVkpKTsKKyAgICBjb250ZXh0
LT5ncmFwaGljQ29udGV4dC0+c2NhbGUoV2ViQ29yZTo6RmxvYXRTaXplKHNjYWxlWCwgc2NhbGVZ
KSk7CiB9CiAKIHZvaWQgZXdrX3ZpZXdfcGFpbnRfY29udGV4dF90cmFuc2xhdGUoRXdrX1ZpZXdf
UGFpbnRfQ29udGV4dCogY29udGV4dCwgZmxvYXQgeCwgZmxvYXQgeSkKIHsKICAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTihjb250ZXh0KTsKIAotICAgIGNvbnRleHQtPmdjLT50cmFuc2xh
dGUoeCwgeSk7CisgICAgY29udGV4dC0+Z3JhcGhpY0NvbnRleHQtPnRyYW5zbGF0ZSh4LCB5KTsK
IH0KIAogRWluYV9Cb29sIGV3a192aWV3X3BhaW50KEV3a19WaWV3X1ByaXZhdGVfRGF0YSogcHJp
diwgY2Fpcm9fdCogY3IsIGNvbnN0IEVpbmFfUmVjdGFuZ2xlKiBhcmVhKQpAQCAtMjYwOSwyMSAr
MjYwOSwyMSBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfcGFpbnQoRXdrX1ZpZXdfUHJpdmF0ZV9EYXRh
KiBwcml2LCBjYWlyb190KiBjciwgY29uc3QgRWluYV9SZQogICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOX1ZBTChwcml2LCBFSU5BX0ZBTFNFKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTl9WQUwoY3IsIEVJTkFfRkFMU0UpOwogICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOX1ZBTChhcmVhLCBFSU5BX0ZBTFNFKTsKLSAgICBXZWJDb3JlOjpGcmFtZVZpZXcqIHZpZXcg
PSBwcml2LT5tYWluX2ZyYW1lLT52aWV3KCk7CisgICAgV2ViQ29yZTo6RnJhbWVWaWV3KiB2aWV3
ID0gcHJpdi0+bWFpbkZyYW1lLT52aWV3KCk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRV
Uk5fVkFMKHZpZXcsIEVJTkFfRkFMU0UpOwogCiAgICAgaWYgKHZpZXctPm5lZWRzTGF5b3V0KCkp
CiAgICAgICAgIHZpZXctPmZvcmNlTGF5b3V0KCk7Ci0gICAgV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0IGdjKGNyKTsKKyAgICBXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0
KGNyKTsKICAgICBXZWJDb3JlOjpJbnRSZWN0IHJlY3QoYXJlYS0+eCwgYXJlYS0+eSwgYXJlYS0+
dywgYXJlYS0+aCk7CiAKICAgICBjYWlyb19zYXZlKGNyKTsKLSAgICBnYy5zYXZlKCk7Ci0gICAg
Z2MuY2xpcChyZWN0KTsKKyAgICBncmFwaGljc0NvbnRleHQuc2F2ZSgpOworICAgIGdyYXBoaWNz
Q29udGV4dC5jbGlwKHJlY3QpOwogICAgIGlmICh2aWV3LT5pc1RyYW5zcGFyZW50KCkpCi0gICAg
ICAgIGdjLmNsZWFyUmVjdChyZWN0KTsKLSAgICB2aWV3LT5wYWludCgmZ2MsIHJlY3QpOwotICAg
IGdjLnJlc3RvcmUoKTsKKyAgICAgICAgZ3JhcGhpY3NDb250ZXh0LmNsZWFyUmVjdChyZWN0KTsK
KyAgICB2aWV3LT5wYWludCgmZ3JhcGhpY3NDb250ZXh0LCByZWN0KTsKKyAgICBncmFwaGljc0Nv
bnRleHQucmVzdG9yZSgpOwogICAgIGNhaXJvX3Jlc3RvcmUoY3IpOwogCiAgICAgcmV0dXJuIEVJ
TkFfVFJVRTsKQEAgLTI2MzQsMTkgKzI2MzQsMTkgQEAgRWluYV9Cb29sIGV3a192aWV3X3BhaW50
X2NvbnRlbnRzKEV3a19WaWV3X1ByaXZhdGVfRGF0YSogcHJpdiwgY2Fpcm9fdCogY3IsIGNvbnMK
ICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwocHJpdiwgRUlOQV9GQUxTRSk7CiAg
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGNyLCBFSU5BX0ZBTFNFKTsKICAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoYXJlYSwgRUlOQV9GQUxTRSk7Ci0gICAgV2Vi
Q29yZTo6RnJhbWVWaWV3KiB2aWV3ID0gcHJpdi0+bWFpbl9mcmFtZS0+dmlldygpOworICAgIFdl
YkNvcmU6OkZyYW1lVmlldyogdmlldyA9IHByaXYtPm1haW5GcmFtZS0+dmlldygpOwogICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTCh2aWV3LCBFSU5BX0ZBTFNFKTsKIAotICAgIFdl
YkNvcmU6OkdyYXBoaWNzQ29udGV4dCBnYyhjcik7CisgICAgV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0IGdyYXBoaWNzQ29udGV4dChjcik7CiAgICAgV2ViQ29yZTo6SW50UmVjdCByZWN0KGFyZWEt
PngsIGFyZWEtPnksIGFyZWEtPncsIGFyZWEtPmgpOwogCiAgICAgY2Fpcm9fc2F2ZShjcik7Ci0g
ICAgZ2Muc2F2ZSgpOwotICAgIGdjLmNsaXAocmVjdCk7CisgICAgZ3JhcGhpY3NDb250ZXh0LnNh
dmUoKTsKKyAgICBncmFwaGljc0NvbnRleHQuY2xpcChyZWN0KTsKICAgICBpZiAodmlldy0+aXNU
cmFuc3BhcmVudCgpKQotICAgICAgICBnYy5jbGVhclJlY3QocmVjdCk7Ci0gICAgdmlldy0+cGFp
bnRDb250ZW50cygmZ2MsICByZWN0KTsKLSAgICBnYy5yZXN0b3JlKCk7CisgICAgICAgIGdyYXBo
aWNzQ29udGV4dC5jbGVhclJlY3QocmVjdCk7CisgICAgdmlldy0+cGFpbnRDb250ZW50cygmZ3Jh
cGhpY3NDb250ZXh0LCAgcmVjdCk7CisgICAgZ3JhcGhpY3NDb250ZXh0LnJlc3RvcmUoKTsKICAg
ICBjYWlyb19yZXN0b3JlKGNyKTsKIAogICAgIHJldHVybiBFSU5BX1RSVUU7CkBAIC0yNjc2LDgg
KzI2NzYsOCBAQCB2b2lkIGV3a192aWV3X3JlYWR5KEV2YXNfT2JqZWN0KiBld2tWaWV3KQogICov
CiB2b2lkIGV3a192aWV3X2lucHV0X21ldGhvZF9zdGF0ZV9zZXQoRXZhc19PYmplY3QqIGV3a1Zp
ZXcsIEVpbmFfQm9vbCBhY3RpdmUpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihl
d2tWaWV3LCBzZCk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVQoc2QsIHByaXYpOworICAgIEVXS19W
SUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhKTsKKyAgICBFV0tfVklFV19Q
UklWX0dFVChzbWFydERhdGEsIHByaXYpOwogICAgIFdlYkNvcmU6OkZyYW1lKiBmb2N1c2VkRnJh
bWUgPSBwcml2LT5wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS0+Zm9jdXNlZE9yTWFpbkZyYW1lKCk7
CiAKICAgICBwcml2LT5pbWggPSAwOwpAQCAtMjcyNiw4ICsyNzI2LDggQEAgdm9pZCBld2tfdmll
d190aXRsZV9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGNvbnN0IGNoYXIqIHRpdGxlKQogICov
CiB2b2lkIGV3a192aWV3X3VyaV9jaGFuZ2VkKEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAg
IEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QpOwotICAgIGNvbnN0IGNoYXIq
IHVyaSA9IGV3a19mcmFtZV91cmlfZ2V0KHNkLT5tYWluX2ZyYW1lKTsKKyAgICBFV0tfVklFV19T
RF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSk7CisgICAgY29uc3QgY2hhciogdXJp
ID0gZXdrX2ZyYW1lX3VyaV9nZXQoc21hcnREYXRhLT5tYWluX2ZyYW1lKTsKICAgICBEQkcoImV3
a1ZpZXc9JXAsIHVyaT0lcyIsIGV3a1ZpZXcsIHVyaSA/IHVyaSA6ICIobnVsbCkiKTsKICAgICBl
dmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKGV3a1ZpZXcsICJ1cmksY2hhbmdlZCIsICh2
b2lkKil1cmkpOwogfQpAQCAtMjczNiw3ICsyNzM2LDcgQEAgdm9pZCBld2tfdmlld191cmlfY2hh
bmdlZChFdmFzX09iamVjdCogZXdrVmlldykKICAqIEBpbnRlcm5hbAogICogUmVwb3J0cyB0aGF0
IGEgRE9NIGRvY3VtZW50IG9iamVjdCBoYXMgZmluaXNoZWQgbG9hZGluZyBmb3IgQHAgZnJhbWUu
CiAgKgotICogQHBhcmFtIG8gVmlldyB3aGljaCBjb250YWlucyB0aGUgZnJhbWUuCisgKiBAcGFy
YW0gZXdrVmlldyBWaWV3IHdoaWNoIGNvbnRhaW5zIHRoZSBmcmFtZS4KICAqIEBwYXJhbSBmcmFt
ZSBUaGUgZnJhbWUgd2hvc2UgbG9hZCBoYXMgdHJpZ2dlcmVkIHRoZSBldmVudC4KICAqCiAgKiBF
bWl0cyBzaWduYWw6ICJsb2FkLGRvY3VtZW50LGZpbmlzaGVkIiB3aXRoIEBwIGZyYW1lIGFzIHRo
ZSBwYXJhbWV0ZXIuCkBAIC0yNzUwLDcgKzI3NTAsNyBAQCB2b2lkIGV3a192aWV3X2xvYWRfZG9j
dW1lbnRfZmluaXNoZWQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV2YXNfT2JqZWN0KiBmcmFtZSkK
ICAqIEBpbnRlcm5hbAogICogUmVwb3J0cyB0aGUgdmlldyBzdGFydGVkIGxvYWRpbmcgc29tZXRo
aW5nLgogICoKLSAqIEBwYXJhbSBvIFZpZXcuCisgKiBAcGFyYW0gZXdrVmlldyBWaWV3LgogICoK
ICAqIEVtaXRzIHNpZ25hbDogImxvYWQsc3RhcnRlZCIgd2l0aCBubyBwYXJhbWV0ZXJzLgogICov
CkBAIC0yNzYzLDcgKzI3NjMsNyBAQCB2b2lkIGV3a192aWV3X2xvYWRfc3RhcnRlZChFdmFzX09i
amVjdCogZXdrVmlldykKIC8qKgogICogUmVwb3J0cyB0aGUgZnJhbWUgc3RhcnRlZCBsb2FkaW5n
IHNvbWV0aGluZy4KICAqCi0gKiBAcGFyYW0gbyBWaWV3LgorICogQHBhcmFtIGV3a1ZpZXcgVmll
dy4KICAqCiAgKiBFbWl0cyBzaWduYWw6ICJsb2FkLHN0YXJ0ZWQiIG9uIG1haW4gZnJhbWUgd2l0
aCBubyBwYXJhbWV0ZXJzLgogICovCkBAIC0yNzc4LDcgKzI3NzgsNyBAQCB2b2lkIGV3a192aWV3
X2ZyYW1lX21haW5fbG9hZF9zdGFydGVkKEV2YXNfT2JqZWN0KiBld2tWaWV3KQogICogQGludGVy
bmFsCiAgKiBSZXBvcnRzIHRoZSBtYWluIGZyYW1lIHN0YXJ0ZWQgcHJvdmlzaW9uYWwgbG9hZC4K
ICAqCi0gKiBAcGFyYW0gbyBWaWV3LgorICogQHBhcmFtIGV3a1ZpZXcgVmlldy4KICAqCiAgKiBF
bWl0cyBzaWduYWw6ICJsb2FkLHByb3Zpc2lvbmFsIiBvbiBWaWV3IHdpdGggbm8gcGFyYW1ldGVy
cy4KICAqLwpAQCAtMjc5Miw3ICsyNzkyLDcgQEAgdm9pZCBld2tfdmlld19sb2FkX3Byb3Zpc2lv
bmFsKEV2YXNfT2JqZWN0KiBld2tWaWV3KQogICogQGludGVybmFsCiAgKiBSZXBvcnRzIHZpZXcg
Y2FuIGJlIHNob3duIGFmdGVyIGEgbmV3IHdpbmRvdyBpcyBjcmVhdGVkLgogICoKLSAqIEBwYXJh
bSBvIEZyYW1lLgorICogQHBhcmFtIGV3a1ZpZXcgRnJhbWUuCiAgKgogICogRW1pdHMgc2lnbmFs
OiAibG9hZCxuZXd3aW5kb3csc2hvdyIgb24gdmlldyB3aXRoIG5vIHBhcmFtZXRlcnMuCiAgKi8K
QEAgLTI4MDcsMjEgKzI4MDcsMjEgQEAgdm9pZCBld2tfdmlld19sb2FkX3Nob3coRXZhc19PYmpl
Y3QqIGV3a1ZpZXcpCiAgKiBAaW50ZXJuYWwKICAqIFJlcG9ydHMgdGhlIG1haW4gZnJhbWUgd2Fz
IGNsZWFyZWQuCiAgKgotICogQHBhcmFtIG8gVmlldy4KKyAqIEBwYXJhbSBld2tWaWV3IFZpZXcu
CiAgKi8KIHZvaWQgZXdrX3ZpZXdfZnJhbWVfbWFpbl9jbGVhcmVkKEV2YXNfT2JqZWN0KiBld2tW
aWV3KQogewogICAgIERCRygiZXdrVmlldz0lcCIsIGV3a1ZpZXcpOwotICAgIEVXS19WSUVXX1NE
X0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVU
VVJOKHNkLT5hcGktPmZsdXNoKTsKLSAgICBzZC0+YXBpLT5mbHVzaChzZCk7CisgICAgRVdLX1ZJ
RVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEpOworICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+YXBpLT5mbHVzaCk7CisgICAgc21hcnREYXRhLT5h
cGktPmZsdXNoKHNtYXJ0RGF0YSk7CiB9CiAKIC8qKgogICogQGludGVybmFsCiAgKiBSZXBvcnRz
IHRoZSBtYWluIGZyYW1lIHJlY2VpdmVkIGFuIGljb24uCiAgKgotICogQHBhcmFtIG8gVmlldy4K
KyAqIEBwYXJhbSBld2tWaWV3IFZpZXcuCiAgKgogICogRW1pdHMgc2lnbmFsOiAiaWNvbixyZWNl
aXZlZCIgd2l0aCBubyBwYXJhbWV0ZXJzLgogICovCkBAIC0yODY4LDEwICsyODY4LDEwIEBAIHZv
aWQgZXdrX3ZpZXdfbG9hZF9lcnJvcihFdmFzX09iamVjdCogZXdrVmlldywgY29uc3QgRXdrX0Zy
YW1lX0xvYWRfRXJyb3IqIGVycm9yCiAgKi8KIHZvaWQgZXdrX3ZpZXdfbG9hZF9wcm9ncmVzc19j
aGFuZ2VkKEV2YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9S
RVRVUk4oZXdrVmlldywgc2QpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwg
cHJpdik7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEp
OworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYpOwogCi0g
ICAgLy8gRXZhc19Db29yZCB3LCBoOworICAgIC8vIEV2YXNfQ29vcmQgd2lkdGgsIGhlaWdodDsK
ICAgICBkb3VibGUgcHJvZ3Jlc3MgPSBwcml2LT5wYWdlLT5wcm9ncmVzcygpLT5lc3RpbWF0ZWRQ
cm9ncmVzcygpOwogCiAgICAgREJHKCJld2tWaWV3PSVwIChwPSUwLjNmKSIsIGV3a1ZpZXcsIHBy
b2dyZXNzKTsKQEAgLTI4ODEsOSArMjg4MSw5IEBAIHZvaWQgZXdrX3ZpZXdfbG9hZF9wcm9ncmVz
c19jaGFuZ2VkKEV2YXNfT2JqZWN0KiBld2tWaWV3KQogCiAvKioKICAqIEBpbnRlcm5hbAotICog
UmVwb3J0cyB2aWV3IEBwYXJhbSBvIHNob3VsZCBiZSByZXN0b3JlZCB0byBkZWZhdWx0IGNvbmRp
dGlvbnMKKyAqIFJlcG9ydHMgdmlldyBAcGFyYW0gZXdrVmlldyBzaG91bGQgYmUgcmVzdG9yZWQg
dG8gZGVmYXVsdCBjb25kaXRpb25zCiAgKgotICogQHBhcmFtIG8gVmlldy4KKyAqIEBwYXJhbSBl
d2tWaWV3IFZpZXcuCiAgKiBAcGFyYW0gZnJhbWUgRnJhbWUgdGhhdCBvcmlnaW5hdGVkIHJlc3Rv
cmUuCiAgKgogICogRW1pdHMgc2lnbmFsOiAicmVzdG9yZSIgd2l0aCBmcmFtZS4KQEAgLTI5MDMs
MzAgKzI5MDMsMzAgQEAgdm9pZCBld2tfdmlld19yZXN0b3JlX3N0YXRlKEV2YXNfT2JqZWN0KiBl
d2tWaWV3LCBFdmFzX09iamVjdCogZnJhbWUpCiAgKiBjYWxsaW5nIGV3a193aW5kb3dfZmVhdHVy
ZXNfcmVmKHdpbmRvd19mZWF0dXJlcykuIE90aGVyd2lzZSB0aGlzIHN0cnVjdCB3aWxsCiAgKiBi
ZSBmcmVlZCBhZnRlciByZXR1cm5pbmcgdG8gdGhpcyBmdW5jdGlvbi4KICAqCi0gKiBAcGFyYW0g
byBDdXJyZW50IHZpZXcuCisgKiBAcGFyYW0gZXdrVmlldyBDdXJyZW50IHZpZXcuCiAgKiBAcGFy
YW0gamF2YXNjcmlwdCBAYyBFSU5BX1RSVUUgaWYgdGhlIG5ldyB3aW5kb3cgaXMgb3JpZ2luYXRl
ZCBmcm9tIGphdmFzY3JpcHQsCiAgKiBAYyBFSU5BX0ZBTFNFIG90aGVyd2lzZQotICogQHBhcmFt
IHdpbmRvd19mZWF0dXJlcyBGZWF0dXJlcyBvZiB0aGUgbmV3IHdpbmRvdyBiZWluZyBjcmVhdGVk
LiBJZiBpdCdzIEBjCisgKiBAcGFyYW0gd2lkdGhpbmRvd19mZWF0dXJlcyBGZWF0dXJlcyBvZiB0
aGUgbmV3IHdpbmRvdyBiZWluZyBjcmVhdGVkLiBJZiBpdCdzIEBjCiAgKiBOVUxMLCBpdCB3aWxs
IGJlIGNyZWF0ZWQgYSB3aW5kb3cgd2l0aCBkZWZhdWx0IGZlYXR1cmVzLgogICoKICAqIEByZXR1
cm4gTmV3IHZpZXcsIGluIGNhc2Ugc21hcnQgY2xhc3MgaW1wbGVtZW50cyB0aGUgY3JlYXRpb24g
b2YgbmV3IHdpbmRvd3M7Ci0gKiBlbHNlLCBjdXJyZW50IHZpZXcgQHBhcmFtIG8gb3IgQGMgMCBv
biBmYWlsdXJlLgorICogZWxzZSwgY3VycmVudCB2aWV3IEBwYXJhbSBld2tWaWV3IG9yIEBjIDAg
b24gZmFpbHVyZS4KICAqCiAgKiBAc2VlIGV3a193aW5kb3dfZmVhdHVyZXNfcmVmKCkuCiAgKi8K
IEV2YXNfT2JqZWN0KiBld2tfdmlld193aW5kb3dfY3JlYXRlKEV2YXNfT2JqZWN0KiBld2tWaWV3
LCBFaW5hX0Jvb2wgamF2YXNjcmlwdCwgY29uc3QgV2ViQ29yZTo6V2luZG93RmVhdHVyZXMqIGNv
cmVGZWF0dXJlcykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNk
LCAwKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwg
MCk7CiAKLSAgICBpZiAoIXNkLT5hcGktPndpbmRvd19jcmVhdGUpCisgICAgaWYgKCFzbWFydERh
dGEtPmFwaS0+d2luZG93X2NyZWF0ZSkKICAgICAgICAgcmV0dXJuIGV3a1ZpZXc7CiAKLSAgICBF
d2tfV2luZG93X0ZlYXR1cmVzKiB3aW5kb3dfZmVhdHVyZXMgPSBld2tfd2luZG93X2ZlYXR1cmVz
X25ld19mcm9tX2NvcmUoY29yZUZlYXR1cmVzKTsKLSAgICBpZiAoIXdpbmRvd19mZWF0dXJlcykK
KyAgICBFd2tfV2luZG93X0ZlYXR1cmVzKiB3aW5kb3dGZWF0dXJlcyA9IGV3a193aW5kb3dfZmVh
dHVyZXNfbmV3X2Zyb21fY29yZShjb3JlRmVhdHVyZXMpOworICAgIGlmICghd2luZG93RmVhdHVy
ZXMpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgRXZhc19PYmplY3QqIHZpZXcgPSBzZC0+YXBp
LT53aW5kb3dfY3JlYXRlKHNkLCBqYXZhc2NyaXB0LCB3aW5kb3dfZmVhdHVyZXMpOwotICAgIGV3
a193aW5kb3dfZmVhdHVyZXNfdW5yZWYod2luZG93X2ZlYXR1cmVzKTsKKyAgICBFdmFzX09iamVj
dCogdmlldyA9IHNtYXJ0RGF0YS0+YXBpLT53aW5kb3dfY3JlYXRlKHNtYXJ0RGF0YSwgamF2YXNj
cmlwdCwgd2luZG93RmVhdHVyZXMpOworICAgIGV3a193aW5kb3dfZmVhdHVyZXNfdW5yZWYod2lu
ZG93RmVhdHVyZXMpOwogCiAgICAgcmV0dXJuIHZpZXc7CiB9CkBAIC0yOTQwLDE2ICsyOTQwLDE2
IEBAIEV2YXNfT2JqZWN0KiBld2tfdmlld193aW5kb3dfY3JlYXRlKEV2YXNfT2JqZWN0KiBld2tW
aWV3LCBFaW5hX0Jvb2wgamF2YXNjcmlwdCwKICAqIHdpdGggYSAnc2VsZi5jbG9zZSgpJyBpbiBK
YXZhc2NyaXB0KSBicm93c2VyIG11c3QgcG9zdHBvbmUgdGhlIGRlbGV0aW9uIHRvIGFuCiAgKiBp
ZGxlci4KICAqCi0gKiBAcGFyYW0gbyBWaWV3IHRvIGJlIGNsb3NlZC4KKyAqIEBwYXJhbSBld2tW
aWV3IFZpZXcgdG8gYmUgY2xvc2VkLgogICovCiB2b2lkIGV3a192aWV3X3dpbmRvd19jbG9zZShF
dmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3
a1ZpZXcsIHNkKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0
RGF0YSk7CiAKICAgICBld2tfdmlld19zdG9wKGV3a1ZpZXcpOwotICAgIGlmICghc2QtPmFwaS0+
d2luZG93X2Nsb3NlKQorICAgIGlmICghc21hcnREYXRhLT5hcGktPndpbmRvd19jbG9zZSkKICAg
ICAgICAgcmV0dXJuOwotICAgIHNkLT5hcGktPndpbmRvd19jbG9zZShzZCk7CisgICAgc21hcnRE
YXRhLT5hcGktPndpbmRvd19jbG9zZShzbWFydERhdGEpOwogfQogCiAvKioKQEAgLTI5OTAsNyAr
Mjk5MCw3IEBAIHZvaWQgZXdrX3ZpZXdfdG9vbGJhcnNfdmlzaWJsZV9zZXQoRXZhc19PYmplY3Qq
IGV3a1ZpZXcsIEVpbmFfQm9vbCB2aXNpYmxlKQogICogQGludGVybmFsCiAgKiBHZXQgdG9vbGJh
ciB2aXNpYmlsaXR5LgogICoKLSAqIEBwYXJhbSBvIFZpZXcuCisgKiBAcGFyYW0gZXdrVmlldyBW
aWV3LgogICogQHBhcmFtIHZpc2libGUgYm9vbGVhbiBwb2ludGVyIGluIHdoaWNoIHRvIHNhdmUg
dGhlIHJlc3VsdC4gSXQgZGVmYXVsdHMKICAqIHRvIEBjIEZBTFNFLCBpLmUuIGlmIGJyb3dzZXIg
ZG9lcyBubyBsaXN0ZW4gdG8gZW1pdHRlZCBzaWduYWwsIGl0IG1lYW5zCiAgKiB0aGVyZSBhcmUg
bm8gdG9vbGJhcnMgYW5kIHRoZXJlZm9yZSB0aGV5IGFyZSBub3QgdmlzaWJsZS4KQEAgLTMwMDgs
NyArMzAwOCw3IEBAIHZvaWQgZXdrX3ZpZXdfdG9vbGJhcnNfdmlzaWJsZV9nZXQoRXZhc19PYmpl
Y3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCogdmlzaWJsZSkKICAqIEBpbnRlcm5hbAogICogU2V0IHN0
YXR1c2JhciB2aXNpYmxlLgogICoKLSAqIEBwYXJhbSBvIFZpZXcuCisgKiBAcGFyYW0gZXdrVmll
dyBWaWV3LgogICogQHBhcmFtIHZpc2libGUgQGMgVFJVRSBpZiBzdGF0dXNiYXIgYXJlIHZpc2li
bGUsIEBjIEZBTFNFIG90aGVyd2lzZS4KICAqCiAgKiBFbWl0cyBzaWduYWw6ICJzdGF0dXNiYXIs
dmlzaWJsZSxzZXQiIHdpdGggYSBwb2ludGVyIHRvIGEgYm9vbGVhbi4KQEAgLTMwMjMsNyArMzAy
Myw3IEBAIHZvaWQgZXdrX3ZpZXdfc3RhdHVzYmFyX3Zpc2libGVfc2V0KEV2YXNfT2JqZWN0KiBl
d2tWaWV3LCBFaW5hX0Jvb2wgdmlzaWJsZSkKICAqIEBpbnRlcm5hbAogICogR2V0IHN0YXR1c2Jh
ciB2aXNpYmlsaXR5LgogICoKLSAqIEBwYXJhbSBvIFZpZXcuCisgKiBAcGFyYW0gZXdrVmlldyBW
aWV3LgogICogQHBhcmFtIHZpc2libGUgYm9vbGVhbiBwb2ludGVyIGluIHdoaWNoIHRvIHNhdmUg
dGhlIHJlc3VsdC4gSXQgZGVmYXVsdHMKICAqIHRvIEBjIEZBTFNFLCBpLmUuIGlmIGJyb3dzZXIg
ZG9lcyBubyBsaXN0ZW4gdG8gZW1pdHRlZCBzaWduYWwsIGl0IG1lYW5zCiAgKiB0aGVyZSBpcyBu
byBzdGF0dXNiYXIgYW5kIHRoZXJlZm9yZSBpdCBpcyBub3QgdmlzaWJsZS4KQEAgLTMwNDEsNyAr
MzA0MSw3IEBAIHZvaWQgZXdrX3ZpZXdfc3RhdHVzYmFyX3Zpc2libGVfZ2V0KEV2YXNfT2JqZWN0
KiBld2tWaWV3LCBFaW5hX0Jvb2wqIHZpc2libGUpCiAgKiBAaW50ZXJuYWwKICAqIFNldCB0ZXh0
IG9mIHN0YXR1c2JhcgogICoKLSAqIEBwYXJhbSBvIFZpZXcuCisgKiBAcGFyYW0gZXdrVmlldyBW
aWV3LgogICogQHBhcmFtIHRleHQgTmV3IHRleHQgdG8gcHV0IG9uIHN0YXR1c2Jhci4KICAqCiAg
KiBFbWl0cyBzaWduYWw6ICJzdGF0dXNiYXIsdGV4dCxzZXQiIHdpdGggYSBzdHJpbmcuCkBAIC0z
MDU3LDcgKzMwNTcsNyBAQCB2b2lkIGV3a192aWV3X3N0YXR1c2Jhcl90ZXh0X3NldChFdmFzX09i
amVjdCogZXdrVmlldywgY29uc3QgY2hhciogdGV4dCkKICAqIEBpbnRlcm5hbAogICogU2V0IHNj
cm9sbGJhcnMgdmlzaWJsZS4KICAqCi0gKiBAcGFyYW0gbyBWaWV3LgorICogQHBhcmFtIGV3a1Zp
ZXcgVmlldy4KICAqIEBwYXJhbSB2aXNpYmxlIEBjIFRSVUUgaWYgc2Nyb2xsYmFycyBhcmUgdmlz
aWJsZSwgQGMgRkFMU0Ugb3RoZXJ3aXNlLgogICoKICAqIEVtaXRzIHNpZ25hbDogInNjcm9sbGJh
cnMsdmlzaWJsZSxzZXQiIHdpdGggYSBwb2ludGVyIHRvIGEgYm9vbGVhbi4KQEAgLTMwNzIsNyAr
MzA3Miw3IEBAIHZvaWQgZXdrX3ZpZXdfc2Nyb2xsYmFyc192aXNpYmxlX3NldChFdmFzX09iamVj
dCogZXdrVmlldywgRWluYV9Cb29sIHZpc2libGUpCiAgKiBAaW50ZXJuYWwKICAqIEdldCBzY3Jv
bGxiYXJzIHZpc2liaWxpdHkuCiAgKgotICogQHBhcmFtIG8gVmlldy4KKyAqIEBwYXJhbSBld2tW
aWV3IFZpZXcuCiAgKiBAcGFyYW0gdmlzaWJsZSBib29sZWFuIHBvaW50ZXIgaW4gd2hpY2ggdG8g
c2F2ZSB0aGUgcmVzdWx0LiBJdCBkZWZhdWx0cwogICogdG8gQGMgRkFMU0UsIGkuZS4gaWYgYnJv
d3NlciBkb2VzIG5vIGxpc3RlbiB0byBlbWl0dGVkIHNpZ25hbCwgaXQgbWVhbnMKICAqIHRoZXJl
IGFyZSBubyBzY3JvbGxiYXJzIGFuZCB0aGVyZWZvcmUgdGhleSBhcmUgbm90IHZpc2libGUuCkBA
IC0zMDkwLDcgKzMwOTAsNyBAQCB2b2lkIGV3a192aWV3X3Njcm9sbGJhcnNfdmlzaWJsZV9nZXQo
RXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCogdmlzaWJsZSkKICAqIEBpbnRlcm5hbAog
ICogU2V0IG1lbnViYXIgdmlzaWJsZS4KICAqCi0gKiBAcGFyYW0gbyBWaWV3LgorICogQHBhcmFt
IGV3a1ZpZXcgVmlldy4KICAqIEBwYXJhbSB2aXNpYmxlIEBjIFRSVUUgaWYgbWVudWJhciBpcyB2
aXNpYmxlLCBAYyBGQUxTRSBvdGhlcndpc2UuCiAgKgogICogRW1pdHMgc2lnbmFsOiAibWVudWJh
cix2aXNpYmxlLHNldCIgd2l0aCBhIHBvaW50ZXIgdG8gYSBib29sZWFuLgpAQCAtMzEwNSw3ICsz
MTA1LDcgQEAgdm9pZCBld2tfdmlld19tZW51YmFyX3Zpc2libGVfc2V0KEV2YXNfT2JqZWN0KiBl
d2tWaWV3LCBFaW5hX0Jvb2wgdmlzaWJsZSkKICAqIEBpbnRlcm5hbAogICogR2V0IG1lbnViYXIg
dmlzaWJpbGl0eS4KICAqCi0gKiBAcGFyYW0gbyBWaWV3LgorICogQHBhcmFtIGV3a1ZpZXcgVmll
dy4KICAqIEBwYXJhbSB2aXNpYmxlIGJvb2xlYW4gcG9pbnRlciBpbiB3aGljaCB0byBzYXZlIHRo
ZSByZXN1bHQuIEl0IGRlZmF1bHRzCiAgKiB0byBAYyBGQUxTRSwgaS5lLiBpZiBicm93c2VyIGRv
ZXMgbm8gbGlzdGVuIHRvIGVtaXR0ZWQgc2lnbmFsLCBpdCBtZWFucwogICogdGhlcmUgaXMgbm8g
bWVudWJhciBhbmQgdGhlcmVmb3JlIGl0IGlzIG5vdCB2aXNpYmxlLgpAQCAtMzEyMyw3ICszMTIz
LDcgQEAgdm9pZCBld2tfdmlld19tZW51YmFyX3Zpc2libGVfZ2V0KEV2YXNfT2JqZWN0KiBld2tW
aWV3LCBFaW5hX0Jvb2wqIHZpc2libGUpCiAgKiBAaW50ZXJuYWwKICAqIFNldCB0b29sdGlwIHRl
eHQgYW5kIGRpc3BsYXkgaWYgaXQgaXMgY3VycmVudGx5IGhpZGRlbi4KICAqCi0gKiBAcGFyYW0g
byBWaWV3LgorICogQHBhcmFtIGV3a1ZpZXcgVmlldy4KICAqIEBwYXJhbSB0ZXh0IFRleHQgdG8g
c2V0IHRvb2x0aXAgdG8uCiAgKgogICogRW1pdHMgc2lnbmFsOiAidG9vbHRpcCx0ZXh0LHNldCIg
d2l0aCBhIHN0cmluZy4gSWYgdG9vbHRpcCBtdXN0IGJlIGFjdHVhbGx5CkBAIC0zMTM4LDcgKzMx
MzgsNyBAQCB2b2lkIGV3a192aWV3X3Rvb2x0aXBfdGV4dF9zZXQoRXZhc19PYmplY3QqIGV3a1Zp
ZXcsIGNvbnN0IGNoYXIqIHRleHQpCiAvKioKICAqIEBpbnRlcm5hbAogICoKLSAqIEBwYXJhbSBv
IFZpZXcuCisgKiBAcGFyYW0gZXdrVmlldyBWaWV3LgogICogQHBhcmFtIG1lc3NhZ2UgU3RyaW5n
IHRvIHNob3cgb24gY29uc29sZS4KICAqIEBwYXJhbSBsaW5lTnVtYmVyIExpbmUgbnVtYmVyLgog
ICogQHNvdXJjZUlEIFNvdXJjZSBpZC4KQEAgLTMxNDcsNTggKzMxNDcsNTggQEAgdm9pZCBld2tf
dmlld190b29sdGlwX3RleHRfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBjb25zdCBjaGFyKiB0
ZXh0KQogdm9pZCBld2tfdmlld19hZGRfY29uc29sZV9tZXNzYWdlKEV2YXNfT2JqZWN0KiBld2tW
aWV3LCBjb25zdCBjaGFyKiBtZXNzYWdlLCB1bnNpZ25lZCBpbnQgbGluZU51bWJlciwgY29uc3Qg
Y2hhciogc291cmNlSUQpCiB7CiAgICAgREJHKCJld2tWaWV3PSVwIG1lc3NhZ2U9JXMgbGluZU51
bWJlcj0ldSBzb3VyY2VJRD0lcyIsIGV3a1ZpZXcsIG1lc3NhZ2UsIGxpbmVOdW1iZXIsIHNvdXJj
ZUlEKTsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkKTsKLSAgICBF
SU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9O
VUxMX1JFVFVSTihzZC0+YXBpLT5hZGRfY29uc29sZV9tZXNzYWdlKTsKLSAgICBzZC0+YXBpLT5h
ZGRfY29uc29sZV9tZXNzYWdlKHNkLCBtZXNzYWdlLCBsaW5lTnVtYmVyLCBzb3VyY2VJRCk7Cisg
ICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEpOworICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHNtYXJ0RGF0YS0+YXBpKTsKKyAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmFwaS0+YWRkX2NvbnNvbGVfbWVzc2FnZSk7Cisg
ICAgc21hcnREYXRhLT5hcGktPmFkZF9jb25zb2xlX21lc3NhZ2Uoc21hcnREYXRhLCBtZXNzYWdl
LCBsaW5lTnVtYmVyLCBzb3VyY2VJRCk7CiB9CiAKIGJvb2wgZXdrX3ZpZXdfZm9jdXNfY2FuX2N5
Y2xlKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFd2tfRm9jdXNfRGlyZWN0aW9uIGRpcmVjdGlvbikK
IHsKICAgICBEQkcoImV3a1ZpZXc9JXAgZGlyZWN0aW9uPSVkIiwgZXdrVmlldywgZGlyZWN0aW9u
KTsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBmYWxzZSk7Ci0g
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5hcGksIGZhbHNlKTsKKyAgICBF
V0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgZmFsc2UpOworICAg
IEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmFwaSwgZmFsc2UpOwog
Ci0gICAgaWYgKCFzZC0+YXBpLT5mb2N1c19jYW5fY3ljbGUpCisgICAgaWYgKCFzbWFydERhdGEt
PmFwaS0+Zm9jdXNfY2FuX2N5Y2xlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1
cm4gc2QtPmFwaS0+Zm9jdXNfY2FuX2N5Y2xlKHNkLCBkaXJlY3Rpb24pOworICAgIHJldHVybiBz
bWFydERhdGEtPmFwaS0+Zm9jdXNfY2FuX2N5Y2xlKHNtYXJ0RGF0YSwgZGlyZWN0aW9uKTsKIH0K
IAogdm9pZCBld2tfdmlld19ydW5famF2YXNjcmlwdF9hbGVydChFdmFzX09iamVjdCogZXdrVmll
dywgRXZhc19PYmplY3QqIGZyYW1lLCBjb25zdCBjaGFyKiBtZXNzYWdlKQogewogICAgIERCRygi
ZXdrVmlldz0lcCBmcmFtZT0lcCBtZXNzYWdlPSVzIiwgZXdrVmlldywgZnJhbWUsIG1lc3NhZ2Up
OwotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QpOwotICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOKHNkLT5hcGkpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9S
RVRVUk4oZXdrVmlldywgc21hcnREYXRhKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
TihzbWFydERhdGEtPmFwaSk7CiAKLSAgICBpZiAoIXNkLT5hcGktPnJ1bl9qYXZhc2NyaXB0X2Fs
ZXJ0KQorICAgIGlmICghc21hcnREYXRhLT5hcGktPnJ1bl9qYXZhc2NyaXB0X2FsZXJ0KQogICAg
ICAgICByZXR1cm47CiAKLSAgICBzZC0+YXBpLT5ydW5famF2YXNjcmlwdF9hbGVydChzZCwgZnJh
bWUsIG1lc3NhZ2UpOworICAgIHNtYXJ0RGF0YS0+YXBpLT5ydW5famF2YXNjcmlwdF9hbGVydChz
bWFydERhdGEsIGZyYW1lLCBtZXNzYWdlKTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X3J1bl9q
YXZhc2NyaXB0X2NvbmZpcm0oRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV2YXNfT2JqZWN0KiBmcmFt
ZSwgY29uc3QgY2hhciogbWVzc2FnZSkKIHsKICAgICBEQkcoImV3a1ZpZXc9JXAgZnJhbWU9JXAg
bWVzc2FnZT0lcyIsIGV3a1ZpZXcsIGZyYW1lLCBtZXNzYWdlKTsKLSAgICBFV0tfVklFV19TRF9H
RVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9P
Tl9OVUxMX1JFVFVSTl9WQUwoc2QtPmFwaSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0Rf
R0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmFwaSwgRUlOQV9GQUxTRSk7CiAK
LSAgICBpZiAoIXNkLT5hcGktPnJ1bl9qYXZhc2NyaXB0X2NvbmZpcm0pCisgICAgaWYgKCFzbWFy
dERhdGEtPmFwaS0+cnVuX2phdmFzY3JpcHRfY29uZmlybSkKICAgICAgICAgcmV0dXJuIEVJTkFf
RkFMU0U7CiAKLSAgICByZXR1cm4gc2QtPmFwaS0+cnVuX2phdmFzY3JpcHRfY29uZmlybShzZCwg
ZnJhbWUsIG1lc3NhZ2UpOworICAgIHJldHVybiBzbWFydERhdGEtPmFwaS0+cnVuX2phdmFzY3Jp
cHRfY29uZmlybShzbWFydERhdGEsIGZyYW1lLCBtZXNzYWdlKTsKIH0KIAogRWluYV9Cb29sIGV3
a192aWV3X3J1bl9qYXZhc2NyaXB0X3Byb21wdChFdmFzX09iamVjdCogZXdrVmlldywgRXZhc19P
YmplY3QqIGZyYW1lLCBjb25zdCBjaGFyKiBtZXNzYWdlLCBjb25zdCBjaGFyKiBkZWZhdWx0VmFs
dWUsIGNoYXIqKiB2YWx1ZSkKIHsKICAgICBEQkcoImV3a1ZpZXc9JXAgZnJhbWU9JXAgbWVzc2Fn
ZT0lcyIsIGV3a1ZpZXcsIGZyYW1lLCBtZXNzYWdlKTsKLSAgICBFV0tfVklFV19TRF9HRVRfT1Jf
UkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxM
X1JFVFVSTl9WQUwoc2QtPmFwaSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAgIEVJTkFfU0FGRVRZ
X09OX05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmFwaSwgRUlOQV9GQUxTRSk7CiAKLSAgICBp
ZiAoIXNkLT5hcGktPnJ1bl9qYXZhc2NyaXB0X3Byb21wdCkKKyAgICBpZiAoIXNtYXJ0RGF0YS0+
YXBpLT5ydW5famF2YXNjcmlwdF9wcm9tcHQpCiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwog
Ci0gICAgcmV0dXJuIHNkLT5hcGktPnJ1bl9qYXZhc2NyaXB0X3Byb21wdChzZCwgZnJhbWUsIG1l
c3NhZ2UsIGRlZmF1bHRWYWx1ZSwgdmFsdWUpOworICAgIHJldHVybiBzbWFydERhdGEtPmFwaS0+
cnVuX2phdmFzY3JpcHRfcHJvbXB0KHNtYXJ0RGF0YSwgZnJhbWUsIG1lc3NhZ2UsIGRlZmF1bHRW
YWx1ZSwgdmFsdWUpOwogfQogCiAvKioKQEAgLTMyMDgsMjAgKzMyMDgsMjAgQEAgRWluYV9Cb29s
IGV3a192aWV3X3J1bl9qYXZhc2NyaXB0X3Byb21wdChFdmFzX09iamVjdCogZXdrVmlldywgRXZh
c19PYmplY3QqIGZyYW0KICAqIGltcGxlbWVudGF0aW9uLCB3aGljaCBsb2dzIGFuZCByZXR1cm5z
IEVJTkFfRkFMU0UuIENsaWVudCBtYXkgcmVtb3ZlIGxvZyBieQogICogc2V0dGluZyB0aGlzIGZ1
bmN0aW9uIDAsIHdoaWNoIHdpbGwganVzdCByZXR1cm4gRUlOQV9GQUxTRS4KICAqCi0gKiBAcGFy
YW0gbyBWaWV3LgorICogQHBhcmFtIGV3a1ZpZXcgVmlldy4KICAqCiAgKiBAcmV0dXJuIEBjIEVJ
TkFfVFJVRSBpZiBzY3JpcHQgc2hvdWxkIGJlIHN0b3BwZWQ7IEBjIEVJTkFfRkFMU0Ugb3RoZXJ3
aXNlCiAgKi8KIEVpbmFfQm9vbCBld2tfdmlld19zaG91bGRfaW50ZXJydXB0X2phdmFzY3JpcHQo
RXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7CiAgICAgREJHKCJld2tWaWV3PSVwIiwgZXdrVmlldyk7
Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7
Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5hcGksIEVJTkFfRkFMU0Up
OworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5B
X0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwoc21hcnREYXRhLT5h
cGksIEVJTkFfRkFMU0UpOwogCi0gICAgaWYgKCFzZC0+YXBpLT5zaG91bGRfaW50ZXJydXB0X2ph
dmFzY3JpcHQpCisgICAgaWYgKCFzbWFydERhdGEtPmFwaS0+c2hvdWxkX2ludGVycnVwdF9qYXZh
c2NyaXB0KQogICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsKIAotICAgIHJldHVybiBzZC0+YXBp
LT5zaG91bGRfaW50ZXJydXB0X2phdmFzY3JpcHQoc2QpOworICAgIHJldHVybiBzbWFydERhdGEt
PmFwaS0+c2hvdWxkX2ludGVycnVwdF9qYXZhc2NyaXB0KHNtYXJ0RGF0YSk7CiB9CiAKIC8qKgpA
QCAtMzIzMSwyMyArMzIzMSwyMyBAQCBFaW5hX0Jvb2wgZXdrX3ZpZXdfc2hvdWxkX2ludGVycnVw
dF9qYXZhc2NyaXB0KEV2YXNfT2JqZWN0KiBld2tWaWV3KQogICogaXMgZXhjZWVkZWQuIEJyb3dz
ZXIgbWF5IHVzZSB0aGlzIHRvIGluY3JlYXNlIHRoZSBzaXplIG9mIHF1b3RhIGJlZm9yZSB0aGUK
ICAqIG9yaWdpbmF0aW5nIG9wZXJhdGlvbmEgZmFpbHMuCiAgKgotICogQHBhcmFtIG8gVmlldy4K
KyAqIEBwYXJhbSBld2tWaWV3IFZpZXcuCiAgKiBAcGFyYW0gZnJhbWUgVGhlIGZyYW1lIHdob3Nl
IHdlYiBwYWdlIGV4Y2VlZGVkIGl0cyBkYXRhYmFzZSBxdW90YS4KICAqIEBwYXJhbSBkYXRhYmFz
ZU5hbWUgRGF0YWJhc2UgbmFtZS4KLSAqIEBwYXJhbSBjdXJyZW50X3NpemUgQ3VycmVudCBzaXpl
IG9mIHRoaXMgZGF0YWJhc2UKLSAqIEBwYXJhbSBleHBlY3RlZF9zaXplIFRoZSBleHBlY3RlZCBz
aXplIG9mIHRoaXMgZGF0YWJhc2UgaW4gb3JkZXIgdG8gZnVsZmlsbAorICogQHBhcmFtIGN1cnJl
bnRTaXplIEN1cnJlbnQgc2l6ZSBvZiB0aGlzIGRhdGFiYXNlCisgKiBAcGFyYW0gZXhwZWN0ZWRT
aXplIFRoZSBleHBlY3RlZCBzaXplIG9mIHRoaXMgZGF0YWJhc2UgaW4gb3JkZXIgdG8gZnVsZmls
bAogICogc2l0ZSdzIHJlcXVpcmVtZW50LgogICovCiB1aW50NjRfdCBld2tfdmlld19leGNlZWRl
ZF9kYXRhYmFzZV9xdW90YShFdmFzX09iamVjdCogZXdrVmlldywgRXZhc19PYmplY3QqIGZyYW1l
LCBjb25zdCBjaGFyKiBkYXRhYmFzZU5hbWUsIHVpbnQ2NF90IGN1cnJlbnRTaXplLCB1aW50NjRf
dCBleHBlY3RlZFNpemUpCiB7CiAgICAgREJHKCJld2tWaWV3PSVwIiwgZXdrVmlldyk7Ci0gICAg
RVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgMCk7Ci0gICAgRUlOQV9TQUZF
VFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5hcGksIDApOwotICAgIGlmICghc2QtPmFwaS0+ZXhj
ZWVkZWRfZGF0YWJhc2VfcXVvdGEpCisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tW
aWV3LCBzbWFydERhdGEsIDApOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChz
bWFydERhdGEtPmFwaSwgMCk7CisgICAgaWYgKCFzbWFydERhdGEtPmFwaS0+ZXhjZWVkZWRfZGF0
YWJhc2VfcXVvdGEpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgSU5GKCJjdXJyZW50X3NpemU9
JSIgUFJJdTY0ICIgZXhwZWN0ZWRfc2l6ZT0lIiBQUkl1NjQsIGN1cnJlbnRTaXplLCBleHBlY3Rl
ZFNpemUpOwotICAgIHJldHVybiBzZC0+YXBpLT5leGNlZWRlZF9kYXRhYmFzZV9xdW90YShzZCwg
ZnJhbWUsIGRhdGFiYXNlTmFtZSwgY3VycmVudFNpemUsIGV4cGVjdGVkU2l6ZSk7CisgICAgSU5G
KCJjdXJyZW50U2l6ZT0lIiBQUkl1NjQgIiBleHBlY3RlZFNpemU9JSIgUFJJdTY0LCBjdXJyZW50
U2l6ZSwgZXhwZWN0ZWRTaXplKTsKKyAgICByZXR1cm4gc21hcnREYXRhLT5hcGktPmV4Y2VlZGVk
X2RhdGFiYXNlX3F1b3RhKHNtYXJ0RGF0YSwgZnJhbWUsIGRhdGFiYXNlTmFtZSwgY3VycmVudFNp
emUsIGV4cGVjdGVkU2l6ZSk7CiB9CiAKIC8qKgpAQCAtMzI2NSwxOSArMzI2NSwxOSBAQCB1aW50
NjRfdCBld2tfdmlld19leGNlZWRlZF9kYXRhYmFzZV9xdW90YShFdmFzX09iamVjdCogZXdrVmll
dywgRXZhc19PYmplY3QqIGZyYQogRWluYV9Cb29sIGV3a192aWV3X3J1bl9vcGVuX3BhbmVsKEV2
YXNfT2JqZWN0KiBld2tWaWV3LCBFdmFzX09iamVjdCogZnJhbWUsIGJvb2wgYWxsb3dzTXVsdGlw
bGVGaWxlcywgY29uc3QgV1RGOjpWZWN0b3I8V1RGOjpTdHJpbmc+JiBhY2NlcHRNSU1FVHlwZXMs
IEVpbmFfTGlzdCoqIHNlbGVjdGVkRmlsZW5hbWVzKQogewogICAgIERCRygiZXdrVmlldz0lcCBm
cmFtZT0lcCBhbGxvd3NfbXVsdGlwbGVfZmlsZXM9JWQiLCBld2tWaWV3LCBmcmFtZSwgYWxsb3dz
TXVsdGlwbGVGaWxlcyk7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBz
ZCwgRUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5h
cGksIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywg
c21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9W
QUwoc21hcnREYXRhLT5hcGksIEVJTkFfRkFMU0UpOwogCi0gICAgaWYgKCFzZC0+YXBpLT5ydW5f
b3Blbl9wYW5lbCkKKyAgICBpZiAoIXNtYXJ0RGF0YS0+YXBpLT5ydW5fb3Blbl9wYW5lbCkKICAg
ICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CiAKICAgICAqc2VsZWN0ZWRGaWxlbmFtZXMgPSAwOwog
CiAgICAgRWluYV9MaXN0KiBjQWNjZXB0TUlNRVR5cGVzID0gMDsKLSAgICBmb3IgKFdURjo6VmVj
dG9yPFdURjo6U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBhY2NlcHRNSU1FVHlwZXMuYmVn
aW4oKTsgaXQgIT0gYWNjZXB0TUlNRVR5cGVzLmVuZCgpOyArK2l0KQotICAgICAgICBjQWNjZXB0
TUlNRVR5cGVzID0gZWluYV9saXN0X2FwcGVuZChjQWNjZXB0TUlNRVR5cGVzLCBzdHJkdXAoKCpp
dCkudXRmOCgpLmRhdGEoKSkpOworICAgIGZvciAoV1RGOjpWZWN0b3I8V1RGOjpTdHJpbmc+Ojpj
b25zdF9pdGVyYXRvciBpdGVyYXRvciA9IGFjY2VwdE1JTUVUeXBlcy5iZWdpbigpOyBpdGVyYXRv
ciAhPSBhY2NlcHRNSU1FVHlwZXMuZW5kKCk7ICsraXRlcmF0b3IpCisgICAgICAgIGNBY2NlcHRN
SU1FVHlwZXMgPSBlaW5hX2xpc3RfYXBwZW5kKGNBY2NlcHRNSU1FVHlwZXMsIHN0cmR1cCgoKml0
ZXJhdG9yKS51dGY4KCkuZGF0YSgpKSk7CiAKLSAgICBib29sIGNvbmZpcm0gPSBzZC0+YXBpLT5y
dW5fb3Blbl9wYW5lbChzZCwgZnJhbWUsIGFsbG93c011bHRpcGxlRmlsZXMsIGNBY2NlcHRNSU1F
VHlwZXMsIHNlbGVjdGVkRmlsZW5hbWVzKTsKKyAgICBib29sIGNvbmZpcm0gPSBzbWFydERhdGEt
PmFwaS0+cnVuX29wZW5fcGFuZWwoc21hcnREYXRhLCBmcmFtZSwgYWxsb3dzTXVsdGlwbGVGaWxl
cywgY0FjY2VwdE1JTUVUeXBlcywgc2VsZWN0ZWRGaWxlbmFtZXMpOwogICAgIGlmICghY29uZmly
bSAmJiAqc2VsZWN0ZWRGaWxlbmFtZXMpCiAgICAgICAgIEVSUigiQ2FuY2VsZWQgZmlsZSBzZWxl
Y3Rpb24sIGJ1dCBzZWxlY3RlZCBmaWxlbmFtZXMgIT0gMC4gRnJlZSBuYW1lcyBiZWZvcmUgcmV0
dXJuLiIpOwogCkBAIC0zMjkxLDExICszMjkxLDExIEBAIEVpbmFfQm9vbCBld2tfdmlld19ydW5f
b3Blbl9wYW5lbChFdmFzX09iamVjdCogZXdrVmlldywgRXZhc19PYmplY3QqIGZyYW1lLCBib29s
CiB2b2lkIGV3a192aWV3X3JlcGFpbnQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV2YXNfQ29vcmQg
eCwgRXZhc19Db29yZCB5LCBFdmFzX0Nvb3JkIHdpZHRoLCBFdmFzX0Nvb3JkIGhlaWdodCkKIHsK
ICAgICBEQkcoImV3a1ZpZXc9JXAsIHJlZ2lvbj0lZCwlZCArICVkeCVkIiwgZXdrVmlldywgeCwg
eSwgd2lkdGgsIGhlaWdodCk7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3
LCBzZCk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2KTsKKyAgICBF
V0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSk7CisgICAgRVdLX1ZJ
RVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdik7CiAKICAgICBfZXdrX3ZpZXdf
cmVwYWludF9hZGQocHJpdiwgeCwgeSwgd2lkdGgsIGhlaWdodCk7Ci0gICAgX2V3a192aWV3X3Nt
YXJ0X2NoYW5nZWQoc2QpOworICAgIF9ld2tfdmlld19zbWFydF9jaGFuZ2VkKHNtYXJ0RGF0YSk7
CiB9CiAKIHZvaWQgZXdrX3ZpZXdfc2Nyb2xsKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFdmFzX0Nv
b3JkIGR4LCBFdmFzX0Nvb3JkIGR5LCBFdmFzX0Nvb3JkIHNjcm9sbFgsIEV2YXNfQ29vcmQgc2Ny
b2xsWSwgRXZhc19Db29yZCBzY3JvbGxXaWR0aCwgRXZhc19Db29yZCBzY3JvbGxIZWlnaHQsIEV2
YXNfQ29vcmQgY2VudGVyWCwgRXZhc19Db29yZCBjZW50ZXJZLCBFdmFzX0Nvb3JkIGNlbnRlcldp
ZHRoLCBFdmFzX0Nvb3JkIGNlbnRlckhlaWdodCwgRWluYV9Cb29sIG1haW5GcmFtZSkKQEAgLTMz
MDcsMTkgKzMzMDcsMTkgQEAgdm9pZCBld2tfdmlld19zY3JvbGwoRXZhc19PYmplY3QqIGV3a1Zp
ZXcsIEV2YXNfQ29vcmQgZHgsIEV2YXNfQ29vcmQgZHksIEV2YXNfQ28KICAgICAgICAgV1JOKCJz
Y3JvbGwgcmVnaW9uIGFuZCBjbGlwIGFyZSBkaWZmZXJlbnQhICVkLCVkKyVkeCVkIGFuZCAlZCwl
ZCslZHglZCIsCiAgICAgICAgICAgICBzY3JvbGxYLCBzY3JvbGxZLCBzY3JvbGxXaWR0aCwgc2Ny
b2xsSGVpZ2h0LCBjZW50ZXJYLCBjZW50ZXJZLCBjZW50ZXJXaWR0aCwgY2VudGVySGVpZ2h0KTsK
IAotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QpOwotICAgIEVXS19W
SUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdik7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JF
VFVSTihzbWFydERhdGEsIHByaXYpOwogICAgIEVJTkFfU0FGRVRZX09OX1RSVUVfUkVUVVJOKCFk
eCAmJiAhZHkpOwogCiAgICAgX2V3a192aWV3X3Njcm9sbF9hZGQocHJpdiwgZHgsIGR5LCBzY3Jv
bGxYLCBzY3JvbGxZLCBzY3JvbGxXaWR0aCwgc2Nyb2xsSGVpZ2h0LCBtYWluRnJhbWUpOwogCi0g
ICAgX2V3a192aWV3X3NtYXJ0X2NoYW5nZWQoc2QpOworICAgIF9ld2tfdmlld19zbWFydF9jaGFu
Z2VkKHNtYXJ0RGF0YSk7CiB9CiAKIFdlYkNvcmU6OlBhZ2UqIGV3a192aWV3X2NvcmVfcGFnZV9n
ZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihld2tWaWV3LCBzZCwgMCk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJO
KHNkLCBwcml2LCAwKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNt
YXJ0RGF0YSwgMCk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwg
cHJpdiwgMCk7CiAgICAgcmV0dXJuIHByaXYtPnBhZ2U7CiB9CiAKQEAgLTMzMzQsMzAgKzMzMzQs
MzAgQEAgV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkZyYW1lPiBld2tfdmlld19mcmFtZV9jcmVh
dGUoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV2YXMKICAgICAgICAgZXdrVmlldywgZnJhbWUsIG5h
bWUudXRmOCgpLmRhdGEoKSwgb3duZXJFbGVtZW50LAogICAgICAgICB1cmwuc3RyaW5nKCkudXRm
OCgpLmRhdGEoKSwgcmVmZXJyZXIudXRmOCgpLmRhdGEoKSk7CiAKLSAgICBFV0tfVklFV19TRF9H
RVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAwKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9S
RVRVUk4oc2QsIHByaXYsIDApOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmll
dywgc21hcnREYXRhLCAwKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnRE
YXRhLCBwcml2LCAwKTsKIAotICAgIFdURjo6UmVmUHRyPFdlYkNvcmU6OkZyYW1lPiBjZiA9IF9l
d2tfdmlld19jb3JlX2ZyYW1lX25ldwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAoc2QsIHByaXYsIG93bmVyRWxlbWVudCk7Ci0gICAgaWYgKCFjZikgeworICAgIFdU
Rjo6UmVmUHRyPFdlYkNvcmU6OkZyYW1lPiBjb3JlRnJhbWUgPSBfZXdrX3ZpZXdfY29yZV9mcmFt
ZV9uZXcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNtYXJ0RGF0
YSwgcHJpdiwgb3duZXJFbGVtZW50KTsKKyAgICBpZiAoIWNvcmVGcmFtZSkgewogICAgICAgICBF
UlIoIkNvdWxkIG5vdCBjcmVhdGUgY2hpbGQgY29yZSBmcmFtZSAnJXMnIiwgbmFtZS51dGY4KCku
ZGF0YSgpKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgaWYgKCFld2tfZnJhbWVf
Y2hpbGRfYWRkKGZyYW1lLCBjZiwgbmFtZSwgdXJsLCByZWZlcnJlcikpIHsKKyAgICBpZiAoIWV3
a19mcmFtZV9jaGlsZF9hZGQoZnJhbWUsIGNvcmVGcmFtZSwgbmFtZSwgdXJsLCByZWZlcnJlcikp
IHsKICAgICAgICAgRVJSKCJDb3VsZCBub3QgY3JlYXRlIGNoaWxkIGZyYW1lIG9iamVjdCAnJXMn
IiwgbmFtZS51dGY4KCkuZGF0YSgpKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCiAgICAg
Ly8gVGhlIGNyZWF0aW9uIG9mIHRoZSBmcmFtZSBtYXkgaGF2ZSByZW1vdmVkIGl0c2VsZiBhbHJl
YWR5LgotICAgIGlmICghY2YtPnBhZ2UoKSB8fCAhY2YtPnRyZWUoKSB8fCAhY2YtPnRyZWUoKS0+
cGFyZW50KCkpCisgICAgaWYgKCFjb3JlRnJhbWUtPnBhZ2UoKSB8fCAhY29yZUZyYW1lLT50cmVl
KCkgfHwgIWNvcmVGcmFtZS0+dHJlZSgpLT5wYXJlbnQoKSkKICAgICAgICAgcmV0dXJuIDA7CiAK
LSAgICBzZC0+Y2hhbmdlZC5mcmFtZV9yZWN0ID0gRUlOQV9UUlVFOwotICAgIF9ld2tfdmlld19z
bWFydF9jaGFuZ2VkKHNkKTsKKyAgICBzbWFydERhdGEtPmNoYW5nZWQuZnJhbWVfcmVjdCA9IEVJ
TkFfVFJVRTsKKyAgICBfZXdrX3ZpZXdfc21hcnRfY2hhbmdlZChzbWFydERhdGEpOwogCiAgICAg
ZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChld2tWaWV3LCAiZnJhbWUsY3JlYXRlZCIs
IGZyYW1lKTsKLSAgICByZXR1cm4gY2YucmVsZWFzZSgpOworICAgIHJldHVybiBjb3JlRnJhbWUu
cmVsZWFzZSgpOwogfQogCiBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6V2lkZ2V0PiBld2tfdmll
d19wbHVnaW5fY3JlYXRlKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFdmFzX09iamVjdCogZnJhbWUs
IGNvbnN0IFdlYkNvcmU6OkludFNpemUmIHBsdWdpblNpemUsIFdlYkNvcmU6OkhUTUxQbHVnSW5F
bGVtZW50KiBlbGVtZW50LCBjb25zdCBXZWJDb3JlOjpLVVJMJiB1cmwsIGNvbnN0IFdURjo6VmVj
dG9yPFdURjo6U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgV1RGOjpWZWN0b3I8V1RGOjpTdHJp
bmc+JiBwYXJhbVZhbHVlcywgY29uc3QgV1RGOjpTdHJpbmcmIG1pbWVUeXBlLCBib29sIGxvYWRN
YW51YWxseSkKQEAgLTMzNjYsOSArMzM2Niw5IEBAIFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpX
aWRnZXQ+IGV3a192aWV3X3BsdWdpbl9jcmVhdGUoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV2CiAg
ICAgICAgIGV3a1ZpZXcsIGZyYW1lLCBwbHVnaW5TaXplLndpZHRoKCksIHBsdWdpblNpemUuaGVp
Z2h0KCksIGVsZW1lbnQsCiAgICAgICAgIHVybC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBtaW1l
VHlwZS51dGY4KCkuZGF0YSgpKTsKIAotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdr
Vmlldywgc2QsIDApOwotICAgIHNkLT5jaGFuZ2VkLmZyYW1lX3JlY3QgPSBFSU5BX1RSVUU7Ci0g
ICAgX2V3a192aWV3X3NtYXJ0X2NoYW5nZWQoc2QpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9S
RVRVUk4oZXdrVmlldywgc21hcnREYXRhLCAwKTsKKyAgICBzbWFydERhdGEtPmNoYW5nZWQuZnJh
bWVfcmVjdCA9IEVJTkFfVFJVRTsKKyAgICBfZXdrX3ZpZXdfc21hcnRfY2hhbmdlZChzbWFydERh
dGEpOwogCiAgICAgcmV0dXJuIGV3a19mcmFtZV9wbHVnaW5fY3JlYXRlCiAgICAgICAgICAgICAg
ICAoZnJhbWUsIHBsdWdpblNpemUsIGVsZW1lbnQsIHVybCwgcGFyYW1OYW1lcywgcGFyYW1WYWx1
ZXMsCkBAIC0zMzg5LDEzICszMzg5LDEzIEBAIFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpXaWRn
ZXQ+IGV3a192aWV3X3BsdWdpbl9jcmVhdGUoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV2CiB2b2lk
IGV3a192aWV3X3BvcHVwX25ldyhFdmFzX09iamVjdCogZXdrVmlldywgV2ViQ29yZTo6UG9wdXBN
ZW51Q2xpZW50KiBjbGllbnQsIGludCBzZWxlY3RlZCwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYg
cmVjdCkKIHsKICAgICBJTkYoImV3a1ZpZXc9JXAiLCBld2tWaWV3KTsKLSAgICBFV0tfVklFV19T
RF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9S
RVRVUk4oc2QsIHByaXYpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywg
c21hcnREYXRhKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBw
cml2KTsKIAotICAgIGlmIChwcml2LT5wb3B1cC5tZW51X2NsaWVudCkKKyAgICBpZiAocHJpdi0+
cG9wdXAubWVudUNsaWVudCkKICAgICAgICAgZXdrX3ZpZXdfcG9wdXBfZGVzdHJveShld2tWaWV3
KTsKIAotICAgIHByaXYtPnBvcHVwLm1lbnVfY2xpZW50ID0gY2xpZW50OworICAgIHByaXYtPnBv
cHVwLm1lbnVDbGllbnQgPSBjbGllbnQ7CiAKICAgICAvLyBwb3B1bGF0ZSBpdGVtcwogICAgIGNv
bnN0IGludCBzaXplID0gY2xpZW50LT5saXN0U2l6ZSgpOwpAQCAtMzQyMiwxMCArMzQyMiwxMCBA
QCB2b2lkIGV3a192aWV3X3BvcHVwX25ldyhFdmFzX09iamVjdCogZXdrVmlldywgV2ViQ29yZTo6
UG9wdXBNZW51Q2xpZW50KiBjbGllbnQsCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfcG9wdXBfZGVzdHJv
eShFdmFzX09iamVjdCogZXdrVmlldykKIHsKICAgICBJTkYoImV3a1ZpZXc9JXAiLCBld2tWaWV3
KTsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNF
KTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0Up
OworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5B
X0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2
LCBFSU5BX0ZBTFNFKTsKIAotICAgIGlmICghcHJpdi0+cG9wdXAubWVudV9jbGllbnQpCisgICAg
aWYgKCFwcml2LT5wb3B1cC5tZW51Q2xpZW50KQogICAgICAgICByZXR1cm4gRUlOQV9GQUxTRTsK
IAogICAgIGV2YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdrVmlldywgInBvcHVwLHdp
bGxkZWxldGUiLCAmcHJpdi0+cG9wdXAubWVudSk7CkBAIC0zNDM2LDggKzM0MzYsOCBAQCBFaW5h
X0Jvb2wgZXdrX3ZpZXdfcG9wdXBfZGVzdHJveShFdmFzX09iamVjdCogZXdrVmlldykKICAgICAg
ICAgZWluYV9zdHJpbmdzaGFyZV9kZWwoaXRlbS0+dGV4dCk7CiAgICAgICAgIGZyZWUoaXRlbSk7
CiAgICAgfQotICAgIHByaXYtPnBvcHVwLm1lbnVfY2xpZW50LT5wb3B1cERpZEhpZGUoKTsKLSAg
ICBwcml2LT5wb3B1cC5tZW51X2NsaWVudCA9IDA7CisgICAgcHJpdi0+cG9wdXAubWVudUNsaWVu
dC0+cG9wdXBEaWRIaWRlKCk7CisgICAgcHJpdi0+cG9wdXAubWVudUNsaWVudCA9IDA7CiAKICAg
ICByZXR1cm4gRUlOQV9UUlVFOwogfQpAQCAtMzQ0NSwxOCArMzQ0NSwxOCBAQCBFaW5hX0Jvb2wg
ZXdrX3ZpZXdfcG9wdXBfZGVzdHJveShFdmFzX09iamVjdCogZXdrVmlldykKIHZvaWQgZXdrX3Zp
ZXdfcG9wdXBfc2VsZWN0ZWRfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBpbnQgaW5kZXgpCiB7
CiAgICAgSU5GKCJld2tWaWV3PSVwIiwgZXdrVmlldyk7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09S
X1JFVFVSTihld2tWaWV3LCBzZCk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNk
LCBwcml2KTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihwcml2LT5wb3B1cC5tZW51
X2NsaWVudCk7CisgICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERh
dGEpOworICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYpOwor
ICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKHByaXYtPnBvcHVwLm1lbnVDbGllbnQpOwog
Ci0gICAgcHJpdi0+cG9wdXAubWVudV9jbGllbnQtPnZhbHVlQ2hhbmdlZChpbmRleCk7CisgICAg
cHJpdi0+cG9wdXAubWVudUNsaWVudC0+dmFsdWVDaGFuZ2VkKGluZGV4KTsKIH0KIAogLyoqCiAg
KiBAaW50ZXJuYWwKICAqIFJlcXVlc3QgYSBkb3dubG9hZCB0byB1c2VyLgogICoKLSAqIEBwYXJh
bSBvIFZpZXcuCisgKiBAcGFyYW0gZXdrVmlldyBWaWV3LgogICogQG9hcmFtIGRvd25sb2FkIEV3
a19Eb3dubG9hZCBzdHJ1Y3QgdG8gYmUgc2VudC4KICAqCiAgKiBFbWl0czogImRvd25sb2FkLHJl
cXVlc3QiIHdpdGggYW4gRXdrX0Rvd25sb2FkIGNvbnRhaW5pbmcgdGhlIGRldGFpbHMgb2YgdGhl
CkBAIC0zNDcyLDcgKzM0NzIsNyBAQCB2b2lkIGV3a192aWV3X2Rvd25sb2FkX3JlcXVlc3QoRXZh
c19PYmplY3QqIGV3a1ZpZXcsIEV3a19Eb3dubG9hZCogZG93bmxvYWQpCiAgKiBAaW50ZXJuYWwK
ICAqIFJlcG9ydHMgdGhlIEpTIHdpbmRvdyBvYmplY3Qgd2FzIGNsZWFyZWQuCiAgKgotICogQHBh
cmFtIG8gdmlldy4KKyAqIEBwYXJhbSBld2tWaWV3IHZpZXcuCiAgKiBAcGFyYW0gZnJhbWUgdGhl
IGZyYW1lLgogICovCiB2b2lkIGV3a192aWV3X2pzX3dpbmRvd19vYmplY3RfY2xlYXIoRXZhc19P
YmplY3QqIGV3a1ZpZXcsIEV2YXNfT2JqZWN0KiBmcmFtZSkKQEAgLTM0OTAsMTAgKzM0OTAsMTAg
QEAgdm9pZCBld2tfdmlld19qc193aW5kb3dfb2JqZWN0X2NsZWFyKEV2YXNfT2JqZWN0KiBld2tW
aWV3LCBFdmFzX09iamVjdCogZnJhbWUpCiAgKi8KIHZvaWQgZXdrX3ZpZXdfdmlld3BvcnRfYXR0
cmlidXRlc19zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIGNvbnN0IFdlYkNvcmU6OlZpZXdwb3J0
QXJndW1lbnRzJiBhcmd1bWVudHMpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUKGV3a1ZpZXcsIHNk
KTsKLSAgICBFV0tfVklFV19QUklWX0dFVChzZCwgcHJpdik7CisgICAgRVdLX1ZJRVdfU0RfR0VU
KGV3a1ZpZXcsIHNtYXJ0RGF0YSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVQoc21hcnREYXRhLCBw
cml2KTsKIAotICAgIHByaXYtPnZpZXdwb3J0X2FyZ3VtZW50cyA9IGFyZ3VtZW50czsKKyAgICBw
cml2LT52aWV3cG9ydEFyZ3VtZW50cyA9IGFyZ3VtZW50czsKICAgICBldmFzX29iamVjdF9zbWFy
dF9jYWxsYmFja19jYWxsKGV3a1ZpZXcsICJ2aWV3cG9ydCxjaGFuZ2VkIiwgMCk7CiB9CiAKQEAg
LTM1MTksNzAgKzM1MTksNzAgQEAgdm9pZCBld2tfdmlld192aWV3cG9ydF9hdHRyaWJ1dGVzX2dl
dChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldywgaW50KiB3aWR0aCwgaW4KIAogRWluYV9Cb29s
IGV3a192aWV3X3pvb21fcmFuZ2Vfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBmbG9hdCBtaW5T
Y2FsZSwgZmxvYXQgbWF4U2NhbGUpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihl
d2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJO
KHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3
a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1Jf
UkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwgRUlOQV9GQUxTRSk7CiAKICAgICBpZiAobWF4U2NhbGUg
PCBtaW5TY2FsZSkgewogICAgICAgICBXUk4oIm1pbl9zY2FsZSBpcyBsYXJnZXIgdGhhbiBtYXhf
c2NhbGUiKTsKICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7CiAgICAgfQogCi0gICAgcHJpdi0+
c2V0dGluZ3Muem9vbV9yYW5nZS5taW5fc2NhbGUgPSBtaW5TY2FsZTsKLSAgICBwcml2LT5zZXR0
aW5ncy56b29tX3JhbmdlLm1heF9zY2FsZSA9IG1heFNjYWxlOworICAgIHByaXYtPnNldHRpbmdz
Lnpvb21SYW5nZS5taW5TY2FsZSA9IG1pblNjYWxlOworICAgIHByaXYtPnNldHRpbmdzLnpvb21S
YW5nZS5tYXhTY2FsZSA9IG1heFNjYWxlOwogCiAgICAgcmV0dXJuIEVJTkFfVFJVRTsKIH0KIAog
ZmxvYXQgZXdrX3ZpZXdfem9vbV9yYW5nZV9taW5fZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tW
aWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIC0xLjAp
OwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgLTEuMCk7CisgICAg
RVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIC0xLjApOworICAg
IEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIC0xLjApOwogCi0g
ICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLnpvb21fcmFuZ2UubWluX3NjYWxlOworICAgIHJldHVy
biBwcml2LT5zZXR0aW5ncy56b29tUmFuZ2UubWluU2NhbGU7CiB9CiAKIGZsb2F0IGV3a192aWV3
X3pvb21fcmFuZ2VfbWF4X2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBF
V0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCAtMS4wKTsKLSAgICBFV0tfVklF
V19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIC0xLjApOworICAgIEVXS19WSUVXX1NEX0dF
VF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCAtMS4wKTsKKyAgICBFV0tfVklFV19QUklW
X0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCAtMS4wKTsKIAotICAgIHJldHVybiBwcml2
LT5zZXR0aW5ncy56b29tX3JhbmdlLm1heF9zY2FsZTsKKyAgICByZXR1cm4gcHJpdi0+c2V0dGlu
Z3Muem9vbVJhbmdlLm1heFNjYWxlOwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfdXNlcl9zY2Fs
YWJsZV9zZXQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEVpbmFfQm9vbCB1c2VyU2NhbGFibGUpCiB7
Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCwgRUlOQV9GQUxTRSk7
Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2LCBFSU5BX0ZBTFNFKTsK
KyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNtYXJ0RGF0YSwgRUlOQV9G
QUxTRSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0YSwgcHJpdiwg
RUlOQV9GQUxTRSk7CiAKLSAgICBwcml2LT5zZXR0aW5ncy56b29tX3JhbmdlLnVzZXJfc2NhbGFi
bGUgPSB1c2VyU2NhbGFibGU7CisgICAgcHJpdi0+c2V0dGluZ3Muem9vbVJhbmdlLnVzZXJTY2Fs
YWJsZSA9IHVzZXJTY2FsYWJsZTsKIAogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKIEVpbmFf
Qm9vbCBld2tfdmlld191c2VyX3NjYWxhYmxlX2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmll
dykKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZB
TFNFKTsKLSAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFM
U0UpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBF
SU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBw
cml2LCBFSU5BX0ZBTFNFKTsKIAotICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy56b29tX3Jhbmdl
LnVzZXJfc2NhbGFibGU7CisgICAgcmV0dXJuIHByaXYtPnNldHRpbmdzLnpvb21SYW5nZS51c2Vy
U2NhbGFibGU7CiB9CiAKIGZsb2F0IGV3a192aWV3X2RldmljZV9waXhlbF9yYXRpb19nZXQoY29u
c3QgRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVS
Tihld2tWaWV3LCBzZCwgLTEuMCk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNk
LCBwcml2LCAtMS4wKTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNt
YXJ0RGF0YSwgLTEuMCk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0RGF0
YSwgcHJpdiwgLTEuMCk7CiAKLSAgICByZXR1cm4gcHJpdi0+c2V0dGluZ3MuZGV2aWNlX3BpeGVs
X3JhdGlvOworICAgIHJldHVybiBwcml2LT5zZXR0aW5ncy5kZXZpY2VQaXhlbFJhdGlvOwogfQog
CiB2b2lkIGV3a192aWV3X2RpZF9maXJzdF92aXN1YWxseV9ub25lbXB0eV9sYXlvdXQoRXZhc19P
YmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdLX1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3
LCBzZCk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNkLCBwcml2KTsKLSAgICBp
ZiAoIXByaXYtPmZsYWdzLnZpZXdfY2xlYXJlZCkgeworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9S
RVRVUk4oZXdrVmlldywgc21hcnREYXRhKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRV
Uk4oc21hcnREYXRhLCBwcml2KTsKKyAgICBpZiAoIXByaXYtPmZsYWdzLnZpZXdDbGVhcmVkKSB7
CiAgICAgICAgIGV3a192aWV3X2ZyYW1lX21haW5fY2xlYXJlZChld2tWaWV3KTsKICAgICAgICAg
ZXdrX3ZpZXdfZW5hYmxlX3JlbmRlcihld2tWaWV3KTsKLSAgICAgICAgcHJpdi0+ZmxhZ3Mudmll
d19jbGVhcmVkID0gRUlOQV9UUlVFOworICAgICAgICBwcml2LT5mbGFncy52aWV3Q2xlYXJlZCA9
IEVJTkFfVFJVRTsKICAgICB9CiB9CiAKQEAgLTM1OTAsNyArMzU5MCw3IEBAIHZvaWQgZXdrX3Zp
ZXdfZGlkX2ZpcnN0X3Zpc3VhbGx5X25vbmVtcHR5X2xheW91dChFdmFzX09iamVjdCogZXdrVmll
dykKICAqIEBpbnRlcm5hbAogICogRGlzcGF0Y2ggZmluaXNoZWQgbG9hZGluZy4KICAqCi0gKiBA
cGFyYW0gbyB2aWV3LgorICogQHBhcmFtIGV3a1ZpZXcgdmlldy4KICAqLwogdm9pZCBld2tfdmll
d19kaXNwYXRjaF9kaWRfZmluaXNoX2xvYWRpbmcoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7CkBA
IC0zNjAzLDExICszNjAzLDExIEBAIHZvaWQgZXdrX3ZpZXdfZGlzcGF0Y2hfZGlkX2ZpbmlzaF9s
b2FkaW5nKEV2YXNfT2JqZWN0KiBld2tWaWV3KQogCiB2b2lkIGV3a192aWV3X3RyYW5zaXRpb25f
dG9fY29tbWl0ZWRfZm9yX25ld3BhZ2UoRXZhc19PYmplY3QqIGV3a1ZpZXcpCiB7Ci0gICAgRVdL
X1ZJRVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzZCk7Ci0gICAgRVdLX1ZJRVdfUFJJVl9H
RVRfT1JfUkVUVVJOKHNkLCBwcml2KTsKKyAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3
a1ZpZXcsIHNtYXJ0RGF0YSk7CisgICAgRVdLX1ZJRVdfUFJJVl9HRVRfT1JfUkVUVVJOKHNtYXJ0
RGF0YSwgcHJpdik7CiAKICAgICBld2tfdmlld19kaXNhYmxlX3JlbmRlcihld2tWaWV3KTsKLSAg
ICBwcml2LT5mbGFncy52aWV3X2NsZWFyZWQgPSBFSU5BX0ZBTFNFOworICAgIHByaXYtPmZsYWdz
LnZpZXdDbGVhcmVkID0gRUlOQV9GQUxTRTsKIH0KIAogCkBAIC0zNjE3LDE4ICszNjE3LDE4IEBA
IHZvaWQgZXdrX3ZpZXdfdHJhbnNpdGlvbl90b19jb21taXRlZF9mb3JfbmV3cGFnZShFdmFzX09i
amVjdCogZXdrVmlldykKICAqIHJlcXVlc3Qgd291bGQgYmUgdXNlZC4gSWYgQHJldHVybiBpcyB0
cnVlLCBsb2FkZXIgd2lsbCB0cnkgdG8gbG9hZC4gRWxzZSwKICAqIExvYWRlciBpZ25vcmUgYWN0
aW9uIG9mIHJlcXVlc3QuCiAgKgotICogQHBhcmFtIG8gVmlldyB0byBsb2FkCisgKiBAcGFyYW0g
ZXdrVmlldyBWaWV3IHRvIGxvYWQKICAqIEBwYXJhbSByZXF1ZXN0IFJlcXVlc3Qgd2hpY2ggY29u
dGFpbiB1cmwgdG8gbmF2aWdhdGUKICAqLwogRWluYV9Cb29sIGV3a192aWV3X25hdmlnYXRpb25f
cG9saWN5X2RlY2lzaW9uKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBFd2tfRnJhbWVfUmVzb3VyY2Vf
UmVxdWVzdCogcmVxdWVzdCkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJOKGV3a1Zp
ZXcsIHNkLCBFSU5BX1RSVUUpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChz
ZC0+YXBpLCBFSU5BX1RSVUUpOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmll
dywgc21hcnREYXRhLCBFSU5BX1RSVUUpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJO
X1ZBTChzbWFydERhdGEtPmFwaSwgRUlOQV9UUlVFKTsKIAotICAgIGlmICghc2QtPmFwaS0+bmF2
aWdhdGlvbl9wb2xpY3lfZGVjaXNpb24pCisgICAgaWYgKCFzbWFydERhdGEtPmFwaS0+bmF2aWdh
dGlvbl9wb2xpY3lfZGVjaXNpb24pCiAgICAgICAgIHJldHVybiBFSU5BX1RSVUU7CiAKLSAgICBy
ZXR1cm4gc2QtPmFwaS0+bmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb24oc2QsIHJlcXVlc3QpOwor
ICAgIHJldHVybiBzbWFydERhdGEtPmFwaS0+bmF2aWdhdGlvbl9wb2xpY3lfZGVjaXNpb24oc21h
cnREYXRhLCByZXF1ZXN0KTsKIH0KIAogRWluYV9Cb29sIGV3a192aWV3X2pzX29iamVjdF9hZGQo
RXZhc19PYmplY3QqIGV3a1ZpZXcsIEV3a19KU19PYmplY3QqIG9iamVjdCwgY29uc3QgY2hhciog
b2JqZWN0TmFtZSkKQEAgLTM2MzcsMjMgKzM2MzcsMjMgQEAgRWluYV9Cb29sIGV3a192aWV3X2pz
X29iamVjdF9hZGQoRXZhc19PYmplY3QqIGV3a1ZpZXcsIEV3a19KU19PYmplY3QqIG9iamVjdCwg
Y28KICAgICBpZiAob2JqZWN0LT52aWV3KSAvLyBvYmplY3QgaGFzIGFscmVhZHkgYmVlbiBhZGRl
ZCB0byBhbm90aGVyIGV3a192aWV3CiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwogICAgIG9i
amVjdC0+bmFtZSA9IGVpbmFfc3RyaW5nc2hhcmVfYWRkKG9iamVjdE5hbWUpOwotICAgIEVXS19W
SUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19W
SUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgRUlOQV9GQUxTRSk7CisgICAgRVdLX1ZJ
RVdfU0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIEVJTkFfRkFMU0UpOworICAg
IEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIEVJTkFfRkFMU0Up
OwogCiAgICAgSlNDOjpKU0xvY2sgbG9jayhKU0M6OlNpbGVuY2VBc3NlcnRpb25zT25seSk7Ci0g
ICAgV2ViQ29yZTo6SlNET01XaW5kb3cqIHdpbmRvdyA9IHRvSlNET01XaW5kb3cocHJpdi0+bWFp
bl9mcmFtZSwgV2ViQ29yZTo6bWFpblRocmVhZE5vcm1hbFdvcmxkKCkpOworICAgIFdlYkNvcmU6
OkpTRE9NV2luZG93KiB3aW5kb3cgPSB0b0pTRE9NV2luZG93KHByaXYtPm1haW5GcmFtZSwgV2Vi
Q29yZTo6bWFpblRocmVhZE5vcm1hbFdvcmxkKCkpOwogICAgIEpTQzo6QmluZGluZ3M6OlJvb3RP
YmplY3QqIHJvb3Q7Ci0gICAgcm9vdCA9IHByaXYtPm1haW5fZnJhbWUtPnNjcmlwdCgpLT5iaW5k
aW5nUm9vdE9iamVjdCgpOworICAgIHJvb3QgPSBwcml2LT5tYWluRnJhbWUtPnNjcmlwdCgpLT5i
aW5kaW5nUm9vdE9iamVjdCgpOwogCiAgICAgaWYgKCF3aW5kb3cpIHsKICAgICAgICAgRVJSKCJX
YXJuaW5nOiBjb3VsZG4ndCBnZXQgd2luZG93IG9iamVjdCIpOwogICAgICAgICByZXR1cm4gRUlO
QV9GQUxTRTsKICAgICB9CiAKLSAgICBKU0M6OkV4ZWNTdGF0ZSogZXhlYyA9IHdpbmRvdy0+Z2xv
YmFsRXhlYygpOworICAgIEpTQzo6RXhlY1N0YXRlKiBleGVjdXRlU3RhdGUgPSB3aW5kb3ctPmds
b2JhbEV4ZWMoKTsKIAogICAgIG9iamVjdC0+dmlldyA9IGV3a1ZpZXc7Ci0gICAgSlNDOjpKU09i
amVjdCogcnVudGltZU9iamVjdCA9IChKU0M6OkpTT2JqZWN0KilKU0M6OkJpbmRpbmdzOjpDSW5z
dGFuY2U6OmNyZWF0ZSgoTlBPYmplY3QqKW9iamVjdCwgcm9vdCktPmNyZWF0ZVJ1bnRpbWVPYmpl
Y3QoZXhlYyk7CisgICAgSlNDOjpKU09iamVjdCogcnVudGltZU9iamVjdCA9IChKU0M6OkpTT2Jq
ZWN0KilKU0M6OkJpbmRpbmdzOjpDSW5zdGFuY2U6OmNyZWF0ZSgoTlBPYmplY3QqKW9iamVjdCwg
cm9vdCktPmNyZWF0ZVJ1bnRpbWVPYmplY3QoZXhlY3V0ZVN0YXRlKTsKICAgICBKU0M6OklkZW50
aWZpZXIgaWQgPSBKU0M6OklkZW50aWZpZXIoZXhlYywgb2JqZWN0TmFtZSk7CiAKICAgICBKU0M6
OlB1dFByb3BlcnR5U2xvdCBzbG90OwpAQCAtMzY2NiwyNyArMzY2NiwyNyBAQCBFaW5hX0Jvb2wg
ZXdrX3ZpZXdfanNfb2JqZWN0X2FkZChFdmFzX09iamVjdCogZXdrVmlldywgRXdrX0pTX09iamVj
dCogb2JqZWN0LCBjbwogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfcHJvdG9jb2xfaGFuZGxlcl9zZXQo
RXZhc19PYmplY3QqIGV3a1ZpZXcsIGNvbnN0IGNoYXIqKiBwcm90b2NvbHMsIEV3a19WaWV3X1Jl
c291cmNlX0hhbmRsZXJfQ2IgaGFuZGxlciwgdm9pZCogY29udGV4dCkKIHsKLSAgICBFV0tfVklF
V19TRF9HRVQoZXdrVmlldywgc2QpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUKHNkLCBwcml2KTsK
KyAgICBFV0tfVklFV19TRF9HRVQoZXdrVmlldywgc21hcnREYXRhKTsKKyAgICBFV0tfVklFV19Q
UklWX0dFVChzbWFydERhdGEsIHByaXYpOwogCiAgICAgaWYgKCFoYW5kbGVyKQogICAgICAgICBy
ZXR1cm4gRUlOQV9GQUxTRTsKIAotICAgIHByaXYtPmN1c3RvbV9yZXNvdXJjZV9oYW5kbGVyLmZ1
bmN0aW9uID0gaGFuZGxlcjsKLSAgICBwcml2LT5jdXN0b21fcmVzb3VyY2VfaGFuZGxlci5jb250
ZXh0ID0gY29udGV4dDsKKyAgICBwcml2LT5jdXN0b21SZXNvdXJjZUhhbmRsZXIuZnVuY3Rpb24g
PSBoYW5kbGVyOworICAgIHByaXYtPmN1c3RvbVJlc291cmNlSGFuZGxlci5jb250ZXh0ID0gY29u
dGV4dDsKIAogICAgIHJldHVybiBld2tfY3VzdG9tX3Byb3RvY29sX2hhbmRsZXJfc2V0KHByb3Rv
Y29scyk7CiB9CiAKIEVpbmFfQm9vbCBld2tfdmlld19wcm90b2NvbF9oYW5kbGVyX3Vuc2V0KEV2
YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVChld2tWaWV3LCBzZCk7
Ci0gICAgRVdLX1ZJRVdfUFJJVl9HRVQoc2QsIHByaXYpOworICAgIEVXS19WSUVXX1NEX0dFVChl
d2tWaWV3LCBzbWFydERhdGEpOworICAgIEVXS19WSUVXX1BSSVZfR0VUKHNtYXJ0RGF0YSwgcHJp
dik7CiAgICAgRWluYV9Cb29sIHJldCA9IGV3a19jdXN0b21fcHJvdG9jb2xfaGFuZGxlcl9hbGxf
dW5zZXQoKTsKIAogICAgIGlmIChyZXQpIHsKLSAgICAgICAgcHJpdi0+Y3VzdG9tX3Jlc291cmNl
X2hhbmRsZXIuZnVuY3Rpb24gPSAwOwotICAgICAgICBwcml2LT5jdXN0b21fcmVzb3VyY2VfaGFu
ZGxlci5jb250ZXh0ID0gMDsKKyAgICAgICAgcHJpdi0+Y3VzdG9tUmVzb3VyY2VIYW5kbGVyLmZ1
bmN0aW9uID0gMDsKKyAgICAgICAgcHJpdi0+Y3VzdG9tUmVzb3VyY2VIYW5kbGVyLmNvbnRleHQg
PSAwOwogICAgIH0KIAogICAgIHJldHVybiByZXQ7CkBAIC0zNjk0LDEyICszNjk0LDEyIEBAIEVp
bmFfQm9vbCBld2tfdmlld19wcm90b2NvbF9oYW5kbGVyX3Vuc2V0KEV2YXNfT2JqZWN0KiBld2tW
aWV3KQogCiB2b2lkKiBld2tfdmlld19wcm90b2NvbF9oYW5kbGVyX3Jlc291cmNlX2dldChFdmFz
X09iamVjdCogZXdrVmlldywgc2l6ZV90KiBieXRlc1JlYWQsIGNoYXIqKiBtaW1lLCBjb25zdCBj
aGFyKiBmaWxlKQogewotICAgIEVXS19WSUVXX1NEX0dFVChld2tWaWV3LCBzZCk7Ci0gICAgRVdL
X1ZJRVdfUFJJVl9HRVQoc2QsIHByaXYpOworICAgIEVXS19WSUVXX1NEX0dFVChld2tWaWV3LCBz
bWFydERhdGEpOworICAgIEVXS19WSUVXX1BSSVZfR0VUKHNtYXJ0RGF0YSwgcHJpdik7CiAKLSAg
ICBFd2tfVmlld19SZXNvdXJjZV9IYW5kbGVyX0NiIGZ1bmN0aW9uID0gcHJpdi0+Y3VzdG9tX3Jl
c291cmNlX2hhbmRsZXIuZnVuY3Rpb247CisgICAgRXdrX1ZpZXdfUmVzb3VyY2VfSGFuZGxlcl9D
YiBmdW5jdGlvbiA9IHByaXYtPmN1c3RvbVJlc291cmNlSGFuZGxlci5mdW5jdGlvbjsKICAgICBp
ZiAoZnVuY3Rpb24pCi0gICAgICAgIHJldHVybiBmdW5jdGlvbihmaWxlLCBieXRlc1JlYWQsIG1p
bWUsIHByaXYtPmN1c3RvbV9yZXNvdXJjZV9oYW5kbGVyLmNvbnRleHQpOworICAgICAgICByZXR1
cm4gZnVuY3Rpb24oZmlsZSwgYnl0ZXNSZWFkLCBtaW1lLCBwcml2LT5jdXN0b21SZXNvdXJjZUhh
bmRsZXIuY29udGV4dCk7CiAKICAgICByZXR1cm4gMDsKIH0KQEAgLTM3MDksMTcgKzM3MDksMTcg
QEAgdm9pZCogZXdrX3ZpZXdfcHJvdG9jb2xfaGFuZGxlcl9yZXNvdXJjZV9nZXQoRXZhc19PYmpl
Y3QqIGV3a1ZpZXcsIHNpemVfdCogYnl0ZXMKICAqIFJlcG9ydHMgdGhhdCB0aGUgY29udGVudHMg
aGF2ZSByZXNpemVkLiBUaGUgZXdrX3ZpZXcgY2FsbHMgY29udGVudHNfcmVzaXplLAogICogd2hp
Y2ggY2FuIGJlIHJlaW1wbGVtZW50ZWQgYXMgbmVlZGVkLgogICoKLSAqIEBwYXJhbSBvIHZpZXcu
Ci0gKiBAcGFyYW0gdyBuZXcgY29udGVudCB3aWR0aC4KLSAqIEBwYXJhbSBoIG5ldyBjb250ZW50
IGhlaWdodC4KKyAqIEBwYXJhbSBld2tWaWV3IHZpZXcuCisgKiBAcGFyYW0gd2lkdGggbmV3IGNv
bnRlbnQgd2lkdGguCisgKiBAcGFyYW0gaGVpZ2h0IG5ldyBjb250ZW50IGhlaWdodC4KICAqLwog
dm9pZCBld2tfdmlld19jb250ZW50c19zaXplX2NoYW5nZWQoRXZhc19PYmplY3QqIGV3a1ZpZXcs
IGludCB3aWR0aCwgaW50IGhlaWdodCkKIHsKLSAgICBFV0tfVklFV19TRF9HRVRfT1JfUkVUVVJO
KGV3a1ZpZXcsIHNkKTsKLSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpKTsK
LSAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzZC0+YXBpLT5jb250ZW50c19yZXNpemUp
OworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhKTsKKyAg
ICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTihzbWFydERhdGEtPmFwaSk7CisgICAgRUlOQV9T
QUZFVFlfT05fTlVMTF9SRVRVUk4oc21hcnREYXRhLT5hcGktPmNvbnRlbnRzX3Jlc2l6ZSk7CiAK
LSAgICBpZiAoIXNkLT5hcGktPmNvbnRlbnRzX3Jlc2l6ZShzZCwgd2lkdGgsIGhlaWdodCkpCisg
ICAgaWYgKCFzbWFydERhdGEtPmFwaS0+Y29udGVudHNfcmVzaXplKHNtYXJ0RGF0YSwgd2lkdGgs
IGhlaWdodCkpCiAgICAgICAgIEVSUigiZmFpbGVkIHRvIHJlc2l6ZSBjb250ZW50cyB0byAlZHgl
ZCIsIHdpZHRoLCBoZWlnaHQpOwogfQogCkBAIC0zNzI3LDE0ICszNzI3LDE0IEBAIHZvaWQgZXdr
X3ZpZXdfY29udGVudHNfc2l6ZV9jaGFuZ2VkKEV2YXNfT2JqZWN0KiBld2tWaWV3LCBpbnQgd2lk
dGgsIGludCBoZWlnaHQpCiAgKiBAaW50ZXJuYWwKICAqIEdldHMgcGFnZSBzaXplIGZyb20gZnJh
bWV2aWV3LgogICoKLSAqIEBwYXJhbSBvIHZpZXcuCisgKiBAcGFyYW0gZXdrVmlldyB2aWV3Lgog
ICoKICAqIEByZXR1cm4gcGFnZSBzaXplLgogICovCiBXZWJDb3JlOjpGbG9hdFJlY3QgZXdrX3Zp
ZXdfcGFnZV9yZWN0X2dldChjb25zdCBFdmFzX09iamVjdCogZXdrVmlldykKIHsKLSAgICBFV0tf
VklFV19TRF9HRVQoZXdrVmlldywgc2QpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUKHNkLCBwcml2
KTsKKyAgICBFV0tfVklFV19TRF9HRVQoZXdrVmlldywgc21hcnREYXRhKTsKKyAgICBFV0tfVklF
V19QUklWX0dFVChzbWFydERhdGEsIHByaXYpOwogCiAgICAgV2ViQ29yZTo6RnJhbWUqIG1haW5f
ZnJhbWUgPSBwcml2LT5wYWdlLT5tYWluRnJhbWUoKTsKICAgICByZXR1cm4gbWFpbl9mcmFtZS0+
dmlldygpLT5mcmFtZVJlY3QoKTsKQEAgLTM3NDMsMjQgKzM3NDMsMjQgQEAgV2ViQ29yZTo6Rmxv
YXRSZWN0IGV3a192aWV3X3BhZ2VfcmVjdF9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a1ZpZXcp
CiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKIHZvaWQgZXdrX3ZpZXdfbmVlZF90b3VjaF9ldmVu
dHNfc2V0KEV2YXNfT2JqZWN0KiBld2tWaWV3LCBib29sIG5lZWRlZCkKIHsKLSAgICBFV0tfVklF
V19TRF9HRVQoZXdrVmlldywgc2QpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUKHNkLCBwcml2KTsK
KyAgICBFV0tfVklFV19TRF9HRVQoZXdrVmlldywgc21hcnREYXRhKTsKKyAgICBFV0tfVklFV19Q
UklWX0dFVChzbWFydERhdGEsIHByaXYpOwogCi0gICAgcHJpdi0+ZmxhZ3MubmVlZF90b3VjaF9l
dmVudHMgPSBuZWVkZWQ7CisgICAgcHJpdi0+ZmxhZ3MubmVlZFRvdWNoRXZlbnRzID0gbmVlZGVk
OwogfQogCiBFaW5hX0Jvb2wgZXdrX3ZpZXdfbmVlZF90b3VjaF9ldmVudHNfZ2V0KGNvbnN0IEV2
YXNfT2JqZWN0KiBld2tWaWV3KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdr
Vmlldywgc2QsIEVJTkFfRkFMU0UpOwotICAgIEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihz
ZCwgcHJpdiwgRUlOQV9GQUxTRSk7Ci0gICAgcmV0dXJuIHByaXYtPmZsYWdzLm5lZWRfdG91Y2hf
ZXZlbnRzOworICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRh
LCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklFV19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRh
LCBwcml2LCBFSU5BX0ZBTFNFKTsKKyAgICByZXR1cm4gcHJpdi0+ZmxhZ3MubmVlZFRvdWNoRXZl
bnRzOwogfQogI2VuZGlmCiAKIEVpbmFfQm9vbCBld2tfdmlld19tb2RlX3NldChFdmFzX09iamVj
dCogZXdrVmlldywgRXdrX1ZpZXdfTW9kZSB2aWV3TW9kZSkKIHsKLSAgICBFV0tfVklFV19TRF9H
RVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBFV0tfVklFV19QUklW
X0dFVF9PUl9SRVRVUk4oc2QsIHByaXYsIEVJTkFfRkFMU0UpOworICAgIEVXS19WSUVXX1NEX0dF
VF9PUl9SRVRVUk4oZXdrVmlldywgc21hcnREYXRhLCBFSU5BX0ZBTFNFKTsKKyAgICBFV0tfVklF
V19QUklWX0dFVF9PUl9SRVRVUk4oc21hcnREYXRhLCBwcml2LCBFSU5BX0ZBTFNFKTsKIAogICAg
IHN3aXRjaCAodmlld01vZGUpIHsKICAgICBjYXNlIEVXS19WSUVXX01PREVfV0lORE9XRUQ6CkBA
IC0zODE1LDcgKzM4MTUsNyBAQCBFd2tfVmlld19Nb2RlIGV3a192aWV3X21vZGVfZ2V0KGNvbnN0
IEV2YXNfT2JqZWN0KiBld2tWaWV3KQogICogQGludGVybmFsCiAgKiBSZXBvcnRzIHRoZSB2aWV3
IHRoYXQgZWRpdG9yIGNsaWVudCBzZWxlY3Rpb24gaGFzIGNoYW5nZWQuCiAgKgotICogQHBhcmFt
IG8gVmlldy4KKyAqIEBwYXJhbSBld2tWaWV3IFZpZXcuCiAgKgogICogRW1pdHMgc2lnbmFsOiAi
ZWRpdG9yY2xpZW50c2VsZWN0aW9uLGNoYW5nZWQiIHdpdGggbm8gcGFyYW1ldGVycy4KICAqLwpA
QCAtMzgyOCw3ICszODI4LDcgQEAgdm9pZCBld2tfdmlld19lZGl0b3JfY2xpZW50X3NlbGVjdGlv
bl9jaGFuZ2VkKEV2YXNfT2JqZWN0KiBld2tWaWV3KQogICogQGludGVybmFsCiAgKiBSZXBvcnRz
IHRvIHRoZSB2aWV3IHRoYXQgZWRpdG9yIGNsaWVudCdzIGNvbnRlbnRzIHdlcmUgY2hhbmdlZC4K
ICAqCi0gKiBAcGFyYW0gbyBWaWV3LgorICogQHBhcmFtIGV3a1ZpZXcgVmlldy4KICAqCiAgKiBF
bWl0cyBzaWduYWw6ICJlZGl0b3JjbGllbnQsY29udGVudHMsY2hhbmdlZCIgd2l0aCBubyBwYXJh
bWV0ZXJzLgogICovCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>112069</attachid>
            <date>2011-10-21 21:16:16 -0700</date>
            <delta_ts>2011-10-21 22:31:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-69988-20111022131616.patch</filename>
            <type>text/plain</type>
            <size>13018</size>
            <attacher name="Gyuyoung Kim">gyuyoung.kim</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTgxODYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZWZs
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZwppbmRleCA5OTFkNTBlZDIz
OGI0ZDQzZTJjOGUwNmQ5YWVlMWViOTBmMzgyZWRkLi5hNzg4YzUxZTI4NDA0NjZjOTA5MzM5NDJh
MzQ0Njc0YmMxZTYwMzQ1IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCkBAIC01LDYgKzUsMzggQEAKIAogICAg
ICAgICBSZXZpZXdlZCBieSBBbnRvbmlvIEdvbWVzLgogCisgICAgICAgIENoYW5nZSAqc2QqIHZh
cmlhYmxlIG5hbWUgd2l0aCAqc21hcnREYXRhKi4gU29tZSB2YXJpYWJsZXMgd2VyZSBjaGFuZ2Vk
IGJ5IEJ1ZyA2OTk4OC4KKworICAgICAgICAqIGV3ay9ld2tfZnJhbWUuY3BwOgorICAgICAgICAo
ZXdrX2ZyYW1lX3ZpZXdfZ2V0KToKKyAgICAgICAgKGV3a19mcmFtZV91cmlfc2V0KToKKyAgICAg
ICAgKGV3a19mcmFtZV91cmlfZ2V0KToKKyAgICAgICAgKGV3a19mcmFtZV9jb250ZW50c19zaXpl
X2dldCk6CisgICAgICAgIChld2tfZnJhbWVfbG9hZF9kb2N1bWVudF9maW5pc2hlZCk6CisgICAg
ICAgIChld2tfZnJhbWVfbG9hZF9lcnJvcik6CisgICAgICAgIChld2tfZnJhbWVfdGl0bGVfc2V0
KToKKyAgICAgICAgKGV3a19mcmFtZV91cmlfY2hhbmdlZCk6CisgICAgICAgIChld2tfZnJhbWVf
ZWRpdG9yX2NsaWVudF9zZWxlY3Rpb25fY2hhbmdlZCk6CisgICAgICAgIChld2tfZnJhbWVfZWRp
dG9yX2NsaWVudF9jb250ZW50c19jaGFuZ2VkKToKKyAgICAgICAgKEVXS1ByaXZhdGU6OmNvcmVG
cmFtZSk6CisgICAgICAgICogZXdrL2V3a192aWV3LmNwcDoKKyAgICAgICAgKF9ld2tfdmlld19z
bWFydF9wcmVfcmVuZGVyX3JlZ2lvbik6CisgICAgICAgIChfZXdrX3ZpZXdfc21hcnRfcHJlX3Jl
bmRlcl9yZWxhdGl2ZV9yYWRpdXMpOgorICAgICAgICAoX2V3a192aWV3X3NtYXJ0X3ByZV9yZW5k
ZXJfY2FuY2VsKToKKyAgICAgICAgKF9ld2tfdmlld19zbWFydF9kaXNhYmxlX3JlbmRlcik6Cisg
ICAgICAgIChfZXdrX3ZpZXdfc21hcnRfZW5hYmxlX3JlbmRlcik6CisgICAgICAgIChFV0tQcml2
YXRlOjpjb3JlUGFnZSk6CisgICAgICAgICogZXdrL2V3a192aWV3X3NpbmdsZS5jcHA6CisgICAg
ICAgIChfZXdrX3ZpZXdfc2luZ2xlX3NtYXJ0X2FkZCk6CisgICAgICAgIChfZXdrX3ZpZXdfc2lu
Z2xlX3NtYXJ0X3Jlc2l6ZSk6CisKKzIwMTEtMTAtMjEgIEd5dXlvdW5nIEtpbSAgPGd5dXlvdW5n
LmtpbUBzYW1zdW5nLmNvbT4KKworICAgICAgICBbRUZMXSBDaGFuZ2UgZWZsIHN0eWxlIGxvY2Fs
IHZhcmlhYmxlcyB3aXRoIFdlYktpdCBjb2RpbmcgU3R5bGUuCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02OTk4OAorCisgICAgICAgIFJldmlld2VkIGJ5
IEFudG9uaW8gR29tZXMuCisKICAgICAgICAgSW4gY29tbW9uIHdpdGggQnVnIDY5MDczLCB0aGlz
IGlzIGEgdGhpcmQgc3RlcCBpbiBvcmRlciB0byBiZSBtb3JlIGNvbXBsaWFudCB3aXRoIFdlYktp
dCBjb2Rpbmcgc3R5bGUuCiAgICAgICAgIFdlIGhhdmUgdXNlZCBvbmUtbGV0dGVyfCB0d28tbGV0
dGVyIGxvY2FsIHZhcmlhYmxlIGFjY29yZGluZyB0byBlZmwgc3R5bGUuIEhvd2V2ZXIsIGl0J3MK
ICAgICAgICAgbW9yZSBkaWZmaWN1bHQgZm9yIG90aGVyIHJldmlld2VycyB0byByZXZpZXcgRUZM
IHBhdGNoZXMuIFNvLCB0aGlzIHBhdGNoIGNoYW5nZXMgZWZsIHN0eWxlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2ZyYW1lLmNwcCBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3
ay9ld2tfZnJhbWUuY3BwCmluZGV4IGYwOTUwY2MxMDQzZWY3YjYzMDQ1Y2YyNWFhYzFmNWIxN2Mx
ZGI0NzkuLjkxOTUwMGUyMGY5Y2IxMDdmYmFlNDExMzNhZDZjYmNlZDg1YjQ1NzQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfZnJhbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvZWZsL2V3ay9ld2tfZnJhbWUuY3BwCkBAIC0yNzgsOCArMjc4LDggQEAgc3RhdGljIGlubGlu
ZSBFdmFzX1NtYXJ0KiBfZXdrX2ZyYW1lX3NtYXJ0X2NsYXNzX25ldyh2b2lkKQogCiBFdmFzX09i
amVjdCogZXdrX2ZyYW1lX3ZpZXdfZ2V0KGNvbnN0IEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsK
LSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIDApOwotICAgIHJl
dHVybiBzZC0+dmlldzsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwg
c21hcnREYXRhLCAwKTsKKyAgICByZXR1cm4gc21hcnREYXRhLT52aWV3OwogfQogCiBFaW5hX0l0
ZXJhdG9yKiBld2tfZnJhbWVfY2hpbGRyZW5faXRlcmF0b3JfbmV3KEV2YXNfT2JqZWN0KiBld2tG
cmFtZSkKQEAgLTMxMCwxOCArMzEwLDE4IEBAIEV2YXNfT2JqZWN0KiBld2tfZnJhbWVfY2hpbGRf
ZmluZChFdmFzX09iamVjdCogZXdrRnJhbWUsIGNvbnN0IGNoYXIqIG5hbWUpCiAKIEVpbmFfQm9v
bCBld2tfZnJhbWVfdXJpX3NldChFdmFzX09iamVjdCogZXdrRnJhbWUsIGNvbnN0IGNoYXIqIHVy
aSkKIHsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QsIEVJTkFf
RkFMU0UpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzbWFydERh
dGEsIEVJTkFfRkFMU0UpOwogICAgIFdlYkNvcmU6OktVUkwga3VybChXZWJDb3JlOjpLVVJMKCks
IFdURjo6U3RyaW5nOjpmcm9tVVRGOCh1cmkpKTsKICAgICBXZWJDb3JlOjpSZXNvdXJjZVJlcXVl
c3QgcmVxKGt1cmwpOwotICAgIFdlYkNvcmU6OkZyYW1lTG9hZGVyKiBsb2FkZXIgPSBzZC0+ZnJh
bWUtPmxvYWRlcigpOworICAgIFdlYkNvcmU6OkZyYW1lTG9hZGVyKiBsb2FkZXIgPSBzbWFydERh
dGEtPmZyYW1lLT5sb2FkZXIoKTsKICAgICBsb2FkZXItPmxvYWQocmVxLCBmYWxzZSk7CiAgICAg
cmV0dXJuIEVJTkFfVFJVRTsKIH0KIAogY29uc3QgY2hhciogZXdrX2ZyYW1lX3VyaV9nZXQoY29u
c3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVU
VVJOKGV3a0ZyYW1lLCBzZCwgMCk7Ci0gICAgcmV0dXJuIHNkLT51cmk7CisgICAgRVdLX0ZSQU1F
X1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSwgMCk7CisgICAgcmV0dXJuIHNt
YXJ0RGF0YS0+dXJpOwogfQogCiBjb25zdCBjaGFyKiBld2tfZnJhbWVfdGl0bGVfZ2V0KGNvbnN0
IEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKQEAgLTM1NSwxMyArMzU1LDEzIEBAIEVpbmFfQm9vbCBl
d2tfZnJhbWVfY29udGVudHNfc2l6ZV9nZXQoY29uc3QgRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBF
dmFzX0Nvb3JkKiB3CiAgICAgICAgICp3aWR0aCA9IDA7CiAgICAgaWYgKGhlaWdodCkKICAgICAg
ICAgKmhlaWdodCA9IDA7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUs
IHNkLCBFSU5BX0ZBTFNFKTsKLSAgICBpZiAoIXNkLT5mcmFtZSB8fCAhc2QtPmZyYW1lLT52aWV3
KCkpCisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSwg
RUlOQV9GQUxTRSk7CisgICAgaWYgKCFzbWFydERhdGEtPmZyYW1lIHx8ICFzbWFydERhdGEtPmZy
YW1lLT52aWV3KCkpCiAgICAgICAgIHJldHVybiBFSU5BX0ZBTFNFOwogICAgIGlmICh3aWR0aCkK
LSAgICAgICAgKndpZHRoID0gc2QtPmZyYW1lLT52aWV3KCktPmNvbnRlbnRzV2lkdGgoKTsKKyAg
ICAgICAgKndpZHRoID0gc21hcnREYXRhLT5mcmFtZS0+dmlldygpLT5jb250ZW50c1dpZHRoKCk7
CiAgICAgaWYgKGhlaWdodCkKLSAgICAgICAgKmhlaWdodCA9IHNkLT5mcmFtZS0+dmlldygpLT5j
b250ZW50c0hlaWdodCgpOworICAgICAgICAqaGVpZ2h0ID0gc21hcnREYXRhLT5mcmFtZS0+dmll
dygpLT5jb250ZW50c0hlaWdodCgpOwogICAgIHJldHVybiBFSU5BX1RSVUU7CiB9CiAKQEAgLTEy
OTgsOCArMTI5OCw4IEBAIHZvaWQgZXdrX2ZyYW1lX2xvYWRfZmlyc3RsYXlvdXRfbm9uZW1wdHlf
ZmluaXNoZWQoRXZhc19PYmplY3QqIGV3a0ZyYW1lKQogdm9pZCBld2tfZnJhbWVfbG9hZF9kb2N1
bWVudF9maW5pc2hlZChFdmFzX09iamVjdCogZXdrRnJhbWUpCiB7CiAgICAgZXZhc19vYmplY3Rf
c21hcnRfY2FsbGJhY2tfY2FsbChld2tGcmFtZSwgImxvYWQsZG9jdW1lbnQsZmluaXNoZWQiLCAw
KTsKLSAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc2QpOwotICAgIGV3
a192aWV3X2xvYWRfZG9jdW1lbnRfZmluaXNoZWQoc2QtPnZpZXcsIGV3a0ZyYW1lKTsKKyAgICBF
V0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRhKTsKKyAgICBld2tf
dmlld19sb2FkX2RvY3VtZW50X2ZpbmlzaGVkKHNtYXJ0RGF0YS0+dmlldywgZXdrRnJhbWUpOwog
fQogCiAvKioKQEAgLTEzNTksOCArMTM1OSw4IEBAIHZvaWQgZXdrX2ZyYW1lX2xvYWRfZXJyb3Io
RXZhc19PYmplY3QqIGV3a0ZyYW1lLCBjb25zdCBjaGFyKiBlcnJvckRvbWFpbiwgaW50IGVyCiAg
ICAgZXJyb3IuZmFpbGluZ191cmwgPSBmYWlsaW5nVXJsOwogICAgIGVycm9yLmZyYW1lID0gZXdr
RnJhbWU7CiAgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChld2tGcmFtZSwgImxv
YWQsZXJyb3IiLCAmZXJyb3IpOwotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0Zy
YW1lLCBzZCk7Ci0gICAgZXdrX3ZpZXdfbG9hZF9lcnJvcihzZC0+dmlldywgJmVycm9yKTsKKyAg
ICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRhKTsKKyAgICBl
d2tfdmlld19sb2FkX2Vycm9yKHNtYXJ0RGF0YS0+dmlldywgJmVycm9yKTsKIH0KIAogLyoqCkBA
IC0xNDAzLDEwICsxNDAzLDEwIEBAIHZvaWQgZXdrX2ZyYW1lX2NvbnRlbnRzX3NpemVfY2hhbmdl
ZChFdmFzX09iamVjdCogZXdrRnJhbWUsIEV2YXNfQ29vcmQgd2lkdGgsIEV2CiB2b2lkIGV3a19m
cmFtZV90aXRsZV9zZXQoRXZhc19PYmplY3QqIGV3a0ZyYW1lLCBjb25zdCBjaGFyKiB0aXRsZSkK
IHsKICAgICBEQkcoImV3a0ZyYW1lPSVwLCB0aXRsZT0lcyIsIGV3a0ZyYW1lLCB0aXRsZSA/IHRp
dGxlIDogIihudWxsKSIpOwotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1l
LCBzZCk7Ci0gICAgaWYgKCFlaW5hX3N0cmluZ3NoYXJlX3JlcGxhY2UoJnNkLT50aXRsZSwgdGl0
bGUpKQorICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzbWFydERhdGEp
OworICAgIGlmICghZWluYV9zdHJpbmdzaGFyZV9yZXBsYWNlKCZzbWFydERhdGEtPnRpdGxlLCB0
aXRsZSkpCiAgICAgICAgIHJldHVybjsKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19j
YWxsKGV3a0ZyYW1lLCAidGl0bGUsY2hhbmdlZCIsICh2b2lkKilzZC0+dGl0bGUpOworICAgIGV2
YXNfb2JqZWN0X3NtYXJ0X2NhbGxiYWNrX2NhbGwoZXdrRnJhbWUsICJ0aXRsZSxjaGFuZ2VkIiwg
KHZvaWQqKXNtYXJ0RGF0YS0+dGl0bGUpOwogfQogCiAvKioKQEAgLTE1NjIsOSArMTU2Miw5IEBA
IGNoYXIqIGV3a19mcmFtZV9wbGFpbl90ZXh0X2dldChjb25zdCBFdmFzX09iamVjdCogZXdrRnJh
bWUpCiAgKi8KIEVpbmFfQm9vbCBld2tfZnJhbWVfdXJpX2NoYW5nZWQoRXZhc19PYmplY3QqIGV3
a0ZyYW1lKQogewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwg
RUlOQV9GQUxTRSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNkLT5mcmFt
ZSwgRUlOQV9GQUxTRSk7Ci0gICAgV1RGOjpDU3RyaW5nIHVyaShzZC0+ZnJhbWUtPmRvY3VtZW50
KCktPnVybCgpLnN0cmluZygpLnV0ZjgoKSk7CisgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRV
Uk4oZXdrRnJhbWUsIHNtYXJ0RGF0YSwgRUlOQV9GQUxTRSk7CisgICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUsIEVJTkFfRkFMU0UpOworICAgIFdURjo6
Q1N0cmluZyB1cmkoc21hcnREYXRhLT5mcmFtZS0+ZG9jdW1lbnQoKS0+dXJsKCkuc3RyaW5nKCku
dXRmOCgpKTsKIAogICAgIElORigidXJpPSVzIiwgdXJpLmRhdGEoKSk7CiAgICAgaWYgKCF1cmku
ZGF0YSgpKSB7CkBAIC0xNTcyLDggKzE1NzIsOCBAQCBFaW5hX0Jvb2wgZXdrX2ZyYW1lX3VyaV9j
aGFuZ2VkKEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKICAgICAgICAgcmV0dXJuIEVJTkFfRkFMU0U7
CiAgICAgfQogCi0gICAgZWluYV9zdHJpbmdzaGFyZV9yZXBsYWNlKCZzZC0+dXJpLCB1cmkuZGF0
YSgpKTsKLSAgICBldmFzX29iamVjdF9zbWFydF9jYWxsYmFja19jYWxsKGV3a0ZyYW1lLCAidXJp
LGNoYW5nZWQiLCAodm9pZCopc2QtPnVyaSk7CisgICAgZWluYV9zdHJpbmdzaGFyZV9yZXBsYWNl
KCZzbWFydERhdGEtPnVyaSwgdXJpLmRhdGEoKSk7CisgICAgZXZhc19vYmplY3Rfc21hcnRfY2Fs
bGJhY2tfY2FsbChld2tGcmFtZSwgInVyaSxjaGFuZ2VkIiwgKHZvaWQqKXNtYXJ0RGF0YS0+dXJp
KTsKICAgICByZXR1cm4gRUlOQV9UUlVFOwogfQogCkBAIC0xNjEzLDggKzE2MTMsOCBAQCBXVEY6
OlBhc3NSZWZQdHI8V2ViQ29yZTo6V2lkZ2V0PiBld2tfZnJhbWVfcGx1Z2luX2NyZWF0ZShFdmFz
X09iamVjdCogZXdrRnJhbWUsCiB2b2lkIGV3a19mcmFtZV9lZGl0b3JfY2xpZW50X3NlbGVjdGlv
bl9jaGFuZ2VkKEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIHsKICAgICBldmFzX29iamVjdF9zbWFy
dF9jYWxsYmFja19jYWxsKGV3a0ZyYW1lLCAiZWRpdG9yY2xpZW50LHNlbGVjdGlvbixjaGFuZ2Vk
IiwgMCk7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4oZXdrRnJhbWUsIHNkKTsKLSAg
ICBld2tfdmlld19lZGl0b3JfY2xpZW50X3NlbGVjdGlvbl9jaGFuZ2VkKHNkLT52aWV3KTsKKyAg
ICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRhKTsKKyAgICBl
d2tfdmlld19lZGl0b3JfY2xpZW50X3NlbGVjdGlvbl9jaGFuZ2VkKHNtYXJ0RGF0YS0+dmlldyk7
CiB9CiAKIC8qKgpAQCAtMTYyOCwxNiArMTYyOCwxNiBAQCB2b2lkIGV3a19mcmFtZV9lZGl0b3Jf
Y2xpZW50X3NlbGVjdGlvbl9jaGFuZ2VkKEV2YXNfT2JqZWN0KiBld2tGcmFtZSkKIHZvaWQgZXdr
X2ZyYW1lX2VkaXRvcl9jbGllbnRfY29udGVudHNfY2hhbmdlZChFdmFzX09iamVjdCogZXdrRnJh
bWUpCiB7CiAgICAgZXZhc19vYmplY3Rfc21hcnRfY2FsbGJhY2tfY2FsbChld2tGcmFtZSwgImVk
aXRvcmNsaWVudCxjb250ZW50cyxjaGFuZ2VkIiwgMCk7Ci0gICAgRVdLX0ZSQU1FX1NEX0dFVF9P
Ul9SRVRVUk4oZXdrRnJhbWUsIHNkKTsKLSAgICBld2tfdmlld19lZGl0b3JfY2xpZW50X2NvbnRl
bnRzX2NoYW5nZWQoc2QtPnZpZXcpOworICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3
a0ZyYW1lLCBzbWFydERhdGEpOworICAgIGV3a192aWV3X2VkaXRvcl9jbGllbnRfY29udGVudHNf
Y2hhbmdlZChzbWFydERhdGEtPnZpZXcpOwogfQogCiBuYW1lc3BhY2UgRVdLUHJpdmF0ZSB7CiAK
IFdlYkNvcmU6OkZyYW1lICpjb3JlRnJhbWUoY29uc3QgRXZhc19PYmplY3QgKmV3a0ZyYW1lKQog
ewotICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzZCwgMCk7Ci0gICAg
cmV0dXJuIHNkLT5mcmFtZTsKKyAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFt
ZSwgc21hcnREYXRhLCAwKTsKKyAgICByZXR1cm4gc21hcnREYXRhLT5mcmFtZTsKIH0KIAogRXZh
c19PYmplY3QqIGtpdEZyYW1lKGNvbnN0IFdlYkNvcmU6OkZyYW1lKiBjb3JlRnJhbWUpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXcuY3BwIGIvU291cmNlL1dlYktp
dC9lZmwvZXdrL2V3a192aWV3LmNwcAppbmRleCBiODE5ZDVjYWYxZGNkOWIwYjNjZjkxMTg1M2Vh
ZWY5Y2ExN2UxMjZkLi5kY2JlZTU1MjkxMjdlY2JkNmRlZDNjODkzZGQ5NDRjYWIyNTc3MzUzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXcuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlldy5jcHAKQEAgLTk1NSwyMSArOTU1LDIxIEBAIHN0YXRp
YyB2b2lkIF9ld2tfdmlld19zbWFydF9mbHVzaChFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERh
dGEpCiAKIHN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3NtYXJ0X3ByZV9yZW5kZXJfcmVnaW9u
KEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSwgRXZhc19Db29yZCB4LCBFdmFzX0Nvb3Jk
IHksIEV2YXNfQ29vcmQgd2lkdGgsIEV2YXNfQ29vcmQgaGVpZ2h0LCBmbG9hdCB6b29tKQogewot
ICAgIFdSTigibm90IHN1cHBvcnRlZCBieSBlbmdpbmUuIHNkPSVwIGFyZWE9JWQsJWQrJWR4JWQs
IHpvb209JWYiLAorICAgIFdSTigibm90IHN1cHBvcnRlZCBieSBlbmdpbmUuIHNtYXJ0REF0YT0l
cCBhcmVhPSVkLCVkKyVkeCVkLCB6b29tPSVmIiwKICAgICAgICAgc21hcnREYXRhLCB4LCB5LCB3
aWR0aCwgaGVpZ2h0LCB6b29tKTsKICAgICByZXR1cm4gRUlOQV9GQUxTRTsKIH0KIAogc3RhdGlj
IEVpbmFfQm9vbCBfZXdrX3ZpZXdfc21hcnRfcHJlX3JlbmRlcl9yZWxhdGl2ZV9yYWRpdXMoRXdr
X1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhLCB1bnNpZ25lZCBpbnQgbnVtYmVyLCBmbG9hdCB6
b29tKQogewotICAgIFdSTigibm90IHN1cHBvcnRlZCBieSBlbmdpbmUuIHNkPSVwLCBuPSV1IHpv
b209JWYiLAorICAgIFdSTigibm90IHN1cHBvcnRlZCBieSBlbmdpbmUuIHNtYXJ0RGF0YT0lcCwg
bj0ldSB6b29tPSVmIiwKICAgICAgICAgc21hcnREYXRhLCBudW1iZXIsIHpvb20pOwogICAgIHJl
dHVybiBFSU5BX0ZBTFNFOwogfQogCiBzdGF0aWMgdm9pZCBfZXdrX3ZpZXdfc21hcnRfcHJlX3Jl
bmRlcl9jYW5jZWwoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhKQogewotICAgIFdSTigi
bm90IHN1cHBvcnRlZCBieSBlbmdpbmUuIHNkPSVwIiwgc21hcnREYXRhKTsKKyAgICBXUk4oIm5v
dCBzdXBwb3J0ZWQgYnkgZW5naW5lLiBzbWFydERhdGE9JXAiLCBzbWFydERhdGEpOwogfQogCiBz
dGF0aWMgdm9pZCBfZXdrX3ZpZXdfem9vbV9hbmltYXRlZF9tYXJrX3N0b3AoRXdrX1ZpZXdfU21h
cnRfRGF0YSogc21hcnREYXRhKQpAQCAtMTA2MCwxMyArMTA2MCwxMyBAQCBzdGF0aWMgV2ViQ29y
ZTo6Vmlld3BvcnRBdHRyaWJ1dGVzIF9ld2tfdmlld192aWV3cG9ydF9hdHRyaWJ1dGVzX2NvbXB1
dGUoY29uc3QgRQogCiBzdGF0aWMgRWluYV9Cb29sIF9ld2tfdmlld19zbWFydF9kaXNhYmxlX3Jl
bmRlcihFd2tfVmlld19TbWFydF9EYXRhKiBzbWFydERhdGEpCiB7Ci0gICAgV1JOKCJub3Qgc3Vw
cG9ydGVkIGJ5IGVuZ2luZS4gc2Q9JXAiLCBzbWFydERhdGEpOworICAgIFdSTigibm90IHN1cHBv
cnRlZCBieSBlbmdpbmUuIHNtYXJ0RGF0YT0lcCIsIHNtYXJ0RGF0YSk7CiAgICAgcmV0dXJuIEVJ
TkFfRkFMU0U7CiB9CiAKIHN0YXRpYyBFaW5hX0Jvb2wgX2V3a192aWV3X3NtYXJ0X2VuYWJsZV9y
ZW5kZXIoRXdrX1ZpZXdfU21hcnRfRGF0YSogc21hcnREYXRhKQogewotICAgIFdSTigibm90IHN1
cHBvcnRlZCBieSBlbmdpbmUuIHNkPSVwIiwgc21hcnREYXRhKTsKKyAgICBXUk4oIm5vdCBzdXBw
b3J0ZWQgYnkgZW5naW5lLiBzbWFydERhdGE9JXAiLCBzbWFydERhdGEpOwogICAgIHJldHVybiBF
SU5BX0ZBTFNFOwogfQogCkBAIC0zODQxLDggKzM4NDEsOCBAQCBuYW1lc3BhY2UgRVdLUHJpdmF0
ZSB7CiAKIFdlYkNvcmU6OlBhZ2UgKmNvcmVQYWdlKGNvbnN0IEV2YXNfT2JqZWN0ICpld2tWaWV3
KQogewotICAgIEVXS19WSUVXX1NEX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgc2QsIDApOwotICAg
IEVXS19WSUVXX1BSSVZfR0VUX09SX1JFVFVSTihzZCwgcHJpdiwgMCk7CisgICAgRVdLX1ZJRVdf
U0RfR0VUX09SX1JFVFVSTihld2tWaWV3LCBzbWFydERhdGEsIDApOworICAgIEVXS19WSUVXX1BS
SVZfR0VUX09SX1JFVFVSTihzbWFydERhdGEsIHByaXYsIDApOwogICAgIHJldHVybiBwcml2LT5w
YWdlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX3ZpZXdfc2lu
Z2xlLmNwcCBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfdmlld19zaW5nbGUuY3BwCmluZGV4
IDRkMzVlOTM1ODM5Yzg5NDVhZDQ3OTY0YTdiOWIyYTM3ODkxMDJiYTIuLjdkY2JiMmNiYmViYjIy
NjMyMGNiNmYwYTJmZGE5N2FhZTExYjM0OGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZWZs
L2V3ay9ld2tfdmlld19zaW5nbGUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tf
dmlld19zaW5nbGUuY3BwCkBAIC0zOSwxOSArMzksMTkgQEAgc3RhdGljIHZvaWQgX2V3a192aWV3
X3NpbmdsZV9vbl9kZWwodm9pZCogZGF0YSwgRXZhcyogZXZlbnRUeXBlLCBFdmFzX09iamVjdCog
Y2EKIAogc3RhdGljIHZvaWQgX2V3a192aWV3X3NpbmdsZV9zbWFydF9hZGQoRXZhc19PYmplY3Qq
IGV3a1NpbmdsZSkKIHsKLSAgICBFd2tfVmlld19TbWFydF9EYXRhKiBzZDsKKyAgICBFd2tfVmll
d19TbWFydF9EYXRhKiBzbWFydERhdGE7CiAKICAgICBfcGFyZW50X3NjLnNjLmFkZChld2tTaW5n
bGUpOwogCi0gICAgc2QgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZXZhc19v
YmplY3Rfc21hcnRfZGF0YV9nZXQoZXdrU2luZ2xlKSk7Ci0gICAgaWYgKCFzZCkKKyAgICBzbWFy
dERhdGEgPSBzdGF0aWNfY2FzdDxFd2tfVmlld19TbWFydF9EYXRhKj4oZXZhc19vYmplY3Rfc21h
cnRfZGF0YV9nZXQoZXdrU2luZ2xlKSk7CisgICAgaWYgKCFzbWFydERhdGEpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIEV2YXNfT2JqZWN0KiBjbGlwID0gZXZhc19vYmplY3RfcmVjdGFuZ2xlX2Fk
ZChzZC0+YmFzZS5ldmFzKTsKKyAgICBFdmFzX09iamVjdCogY2xpcCA9IGV2YXNfb2JqZWN0X3Jl
Y3RhbmdsZV9hZGQoc21hcnREYXRhLT5iYXNlLmV2YXMpOwogICAgIGV2YXNfb2JqZWN0X3Nob3co
Y2xpcCk7CiAKICAgICBldmFzX29iamVjdF9ldmVudF9jYWxsYmFja19hZGQKLSAgICAgICAgKHNk
LT5iYWNraW5nX3N0b3JlLCBFVkFTX0NBTExCQUNLX0RFTCwgX2V3a192aWV3X3NpbmdsZV9vbl9k
ZWwsIGNsaXApOworICAgICAgICAoc21hcnREYXRhLT5iYWNraW5nX3N0b3JlLCBFVkFTX0NBTExC
QUNLX0RFTCwgX2V3a192aWV3X3NpbmdsZV9vbl9kZWwsIGNsaXApOwogfQogCiBzdGF0aWMgRXZh
c19PYmplY3QqIF9ld2tfdmlld19zaW5nbGVfc21hcnRfYmFja2luZ19zdG9yZV9hZGQoRXdrX1Zp
ZXdfU21hcnRfRGF0YSogc21hcnREYXRhKQpAQCAtNjUsMjEgKzY1LDIxIEBAIHN0YXRpYyBFdmFz
X09iamVjdCogX2V3a192aWV3X3NpbmdsZV9zbWFydF9iYWNraW5nX3N0b3JlX2FkZChFd2tfVmll
d19TbWFydF9EYXRhCiAKIHN0YXRpYyB2b2lkIF9ld2tfdmlld19zaW5nbGVfc21hcnRfcmVzaXpl
KEV2YXNfT2JqZWN0KiBld2tTaW5nbGUsIEV2YXNfQ29vcmQgd2lkdGgsIEV2YXNfQ29vcmQgaGVp
Z2h0KQogewotICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNkID0gc3RhdGljX2Nhc3Q8RXdrX1Zp
ZXdfU21hcnRfRGF0YSo+KGV2YXNfb2JqZWN0X3NtYXJ0X2RhdGFfZ2V0KGV3a1NpbmdsZSkpOwor
ICAgIEV3a19WaWV3X1NtYXJ0X0RhdGEqIHNtYXJ0RGF0YSA9IHN0YXRpY19jYXN0PEV3a19WaWV3
X1NtYXJ0X0RhdGEqPihldmFzX29iamVjdF9zbWFydF9kYXRhX2dldChld2tTaW5nbGUpKTsKICAg
ICBfcGFyZW50X3NjLnNjLnJlc2l6ZShld2tTaW5nbGUsIHdpZHRoLCBoZWlnaHQpOwogCi0gICAg
aWYgKCFzZCkKKyAgICBpZiAoIXNtYXJ0RGF0YSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8g
dGhlc2Ugc2hvdWxkIGJlIHF1ZXVlZCBhbmQgcHJvY2Vzc2VkIGluIGNhbGN1bGF0ZSBhcyB3ZWxs
IQotICAgIGV2YXNfb2JqZWN0X2ltYWdlX3NpemVfc2V0KHNkLT5iYWNraW5nX3N0b3JlLCB3aWR0
aCwgaGVpZ2h0KTsKLSAgICBpZiAoc2QtPmFuaW1hdGVkX3pvb20uem9vbS5jdXJyZW50IDwgMC4w
MDAwMSkgewotICAgICAgICBFdmFzX09iamVjdCogY2xpcCA9IGV2YXNfb2JqZWN0X2NsaXBfZ2V0
KHNkLT5iYWNraW5nX3N0b3JlKTsKKyAgICBldmFzX29iamVjdF9pbWFnZV9zaXplX3NldChzbWFy
dERhdGEtPmJhY2tpbmdfc3RvcmUsIHdpZHRoLCBoZWlnaHQpOworICAgIGlmIChzbWFydERhdGEt
PmFuaW1hdGVkX3pvb20uem9vbS5jdXJyZW50IDwgMC4wMDAwMSkgeworICAgICAgICBFdmFzX09i
amVjdCogY2xpcCA9IGV2YXNfb2JqZWN0X2NsaXBfZ2V0KHNtYXJ0RGF0YS0+YmFja2luZ19zdG9y
ZSk7CiAgICAgICAgIEV2YXNfQ29vcmQgeCwgeSwgY3csIGNoOwotICAgICAgICBldmFzX29iamVj
dF9pbWFnZV9maWxsX3NldChzZC0+YmFja2luZ19zdG9yZSwgMCwgMCwgd2lkdGgsIGhlaWdodCk7
Ci0gICAgICAgIGV2YXNfb2JqZWN0X2dlb21ldHJ5X2dldChzZC0+YmFja2luZ19zdG9yZSwgJngs
ICZ5LCAwLCAwKTsKKyAgICAgICAgZXZhc19vYmplY3RfaW1hZ2VfZmlsbF9zZXQoc21hcnREYXRh
LT5iYWNraW5nX3N0b3JlLCAwLCAwLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICAgICAgZXZhc19vYmpl
Y3RfZ2VvbWV0cnlfZ2V0KHNtYXJ0RGF0YS0+YmFja2luZ19zdG9yZSwgJngsICZ5LCAwLCAwKTsK
ICAgICAgICAgZXZhc19vYmplY3RfbW92ZShjbGlwLCB4LCB5KTsKLSAgICAgICAgZXdrX2ZyYW1l
X2NvbnRlbnRzX3NpemVfZ2V0KHNkLT5tYWluX2ZyYW1lLCAmY3csICZjaCk7CisgICAgICAgIGV3
a19mcmFtZV9jb250ZW50c19zaXplX2dldChzbWFydERhdGEtPm1haW5fZnJhbWUsICZjdywgJmNo
KTsKICAgICAgICAgaWYgKHdpZHRoID4gY3cpCiAgICAgICAgICAgICB3aWR0aCA9IGN3OwogICAg
ICAgICBpZiAoaGVpZ2h0ID4gY2gpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>