<?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>63706</bug_id>
          
          <creation_ts>2011-06-30 06:06:52 -0700</creation_ts>
          <short_desc>[GTK] Implement drag and drop support in WebKit2</short_desc>
          <delta_ts>2011-10-08 10:45: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>WebKit2</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>66890</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Martin Robinson">mrobinson</assigned_to>
          <cc>gustavo</cc>
    
    <cc>mrobinson</cc>
    
    <cc>pnormand</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>430345</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-06-30 06:06:52 -0700</bug_when>
    <thetext>Drag and drop isn&apos;t currently supported in WebKit2 GTK+ port.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>430349</commentid>
    <comment_count>1</comment_count>
      <attachid>99283</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-06-30 06:16:24 -0700</bug_when>
    <thetext>Created attachment 99283
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>430351</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-30 06:19:07 -0700</bug_when>
    <thetext>Attachment 99283 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebKit2/Shared/gtk/ArgumentCodersGtk.cpp:72:  Declaration has space between type name and * in cairo_surface_t *surface  [whitespace/declaration] [3]
Source/WebKit2/Shared/gtk/ArgumentCodersGtk.cpp:113:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Source/WebKit2/Shared/gtk/ArgumentCodersGtk.h:32:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Source/WebKit2/WebProcess/WebCoreSupport/gtk/WebDragClientGtk.cpp:59:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 4 in 21 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>430365</commentid>
    <comment_count>3</comment_count>
      <attachid>99289</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-06-30 06:38:26 -0700</bug_when>
    <thetext>Created attachment 99289
Updated patch to fix coding style issues</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>430368</commentid>
    <comment_count>4</comment_count>
      <attachid>99291</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-06-30 06:44:21 -0700</bug_when>
    <thetext>Created attachment 99291
Nuew patch, fix the build

Sorry, previous patch doesn&apos;t build, check-webkit-stye suggests to use PassRefPtr, but I don&apos;t know why RefPtr is wrong in this case.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>430370</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-30 06:47:13 -0700</bug_when>
    <thetext>Attachment 99291 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebKit2/Shared/gtk/ArgumentCodersGtk.cpp:113:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Total errors found: 1 in 21 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>430445</commentid>
    <comment_count>6</comment_count>
      <attachid>99291</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-06-30 08:46:43 -0700</bug_when>
    <thetext>Comment on attachment 99291
Nuew patch, fix the build

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

Looks good. Definitely need to use a PassRefPtr below. I&apos;ll do a full review later!

&gt;&gt; Source/WebKit2/Shared/gtk/ArgumentCodersGtk.cpp:113
&gt;&gt; +static bool decodeDataObject(ArgumentDecoder* decoder, RefPtr&lt;DataObjectGtk&gt;&amp; dataObject)
&gt; 
&gt; The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]

It&apos;s pretty weird to pass a reference to a RefPtr here. You should just use a PassRefPtr.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>430448</commentid>
    <comment_count>7</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-06-30 08:53:02 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 99291 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=99291&amp;action=review
&gt; 
&gt; Looks good. Definitely need to use a PassRefPtr below. I&apos;ll do a full review later!

Thanks!

&gt; &gt;&gt; Source/WebKit2/Shared/gtk/ArgumentCodersGtk.cpp:113
&gt; &gt;&gt; +static bool decodeDataObject(ArgumentDecoder* decoder, RefPtr&lt;DataObjectGtk&gt;&amp; dataObject)
&gt; &gt; 
&gt; &gt; The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
&gt; 
&gt; It&apos;s pretty weird to pass a reference to a RefPtr here. You should just use a PassRefPtr.

See decodeImage in Source/WebKit2/Shared/WebCoreArgumentCoders.cpp:

static bool decodeImage(ArgumentDecoder* decoder, RefPtr&lt;Image&gt;&amp; image)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>430455</commentid>
    <comment_count>8</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-06-30 09:09:13 -0700</bug_when>
    <thetext>(In reply to comment #7)

&gt; &gt; &gt;&gt; Source/WebKit2/Shared/gtk/ArgumentCodersGtk.cpp:113
&gt; &gt; &gt;&gt; +static bool decodeDataObject(ArgumentDecoder* decoder, RefPtr&lt;DataObjectGtk&gt;&amp; dataObject)
&gt; &gt; &gt; 
&gt; &gt; &gt; The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
&gt; &gt; 
&gt; &gt; It&apos;s pretty weird to pass a reference to a RefPtr here. You should just use a PassRefPtr.
&gt; 
&gt; See decodeImage in Source/WebKit2/Shared/WebCoreArgumentCoders.cpp:
&gt; static bool decodeImage(ArgumentDecoder* decoder, RefPtr&lt;Image&gt;&amp; image)

WebKit as a project has recently become more strict about RefPtr/PassRefPtr usage. Perhaps there was some reason it wasn&apos;t possible in that case, but my instinct says this should just be a PassRefPtr.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>430460</commentid>
    <comment_count>9</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-06-30 09:11:42 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; 
&gt; &gt; &gt; &gt;&gt; Source/WebKit2/Shared/gtk/ArgumentCodersGtk.cpp:113
&gt; &gt; &gt; &gt;&gt; +static bool decodeDataObject(ArgumentDecoder* decoder, RefPtr&lt;DataObjectGtk&gt;&amp; dataObject)
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
&gt; &gt; &gt; 
&gt; &gt; &gt; It&apos;s pretty weird to pass a reference to a RefPtr here. You should just use a PassRefPtr.
&gt; &gt; 
&gt; &gt; See decodeImage in Source/WebKit2/Shared/WebCoreArgumentCoders.cpp:
&gt; &gt; static bool decodeImage(ArgumentDecoder* decoder, RefPtr&lt;Image&gt;&amp; image)
&gt; 
&gt; WebKit as a project has recently become more strict about RefPtr/PassRefPtr usage. Perhaps there was some reason it wasn&apos;t possible in that case, but my instinct says this should just be a PassRefPtr.

Ok, I&apos;ll look at it again to try to use a PassRefPtr instead, thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>430469</commentid>
    <comment_count>10</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-06-30 09:27:54 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; Ok, I&apos;ll look at it again to try to use a PassRefPtr instead, thanks.

Apologies! You were correct originally. It seems this argument is actually an out-parameter and the return value expresses success. Please disregard my comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>430476</commentid>
    <comment_count>11</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-06-30 09:35:16 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; Ok, I&apos;ll look at it again to try to use a PassRefPtr instead, thanks.
&gt; 
&gt; Apologies! You were correct originally. It seems this argument is actually an out-parameter and the return value expresses success. Please disregard my comments.

No problem, I actually looked for an example before implement it, found decodeImage and copied it assuming it was correct.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437786</commentid>
    <comment_count>12</comment_count>
      <attachid>100991</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-07-15 09:21:07 -0700</bug_when>
    <thetext>Created attachment 100991
Updated patch

Updated to apply on current git master and fixed the FIXME about sending null handles, no that the null handles patch landed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>437790</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-07-15 09:24:34 -0700</bug_when>
    <thetext>Attachment 100991 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebKit2/Shared/gtk/ArgumentCodersGtk.cpp:113:  The parameter type should use PassRefPtr instead of RefPtr.  [readability/pass_ptr] [5]
Total errors found: 1 in 21 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465314</commentid>
    <comment_count>14</comment_count>
      <attachid>106978</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-09-10 12:40:04 -0700</bug_when>
    <thetext>Created attachment 106978
Patch using GtkWidgetDragAndDropGlue</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465316</commentid>
    <comment_count>15</comment_count>
      <attachid>106978</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2011-09-10 12:51:29 -0700</bug_when>
    <thetext>Comment on attachment 106978
Patch using GtkWidgetDragAndDropGlue

Attachment 106978 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/9636195</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465398</commentid>
    <comment_count>16</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-09-11 08:28:19 -0700</bug_when>
    <thetext>The build failed because this patch dependson 66890.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>465514</commentid>
    <comment_count>17</comment_count>
      <attachid>106978</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-09-12 00:17:40 -0700</bug_when>
    <thetext>Comment on attachment 106978
Patch using GtkWidgetDragAndDropGlue

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

Looks good to me.

&gt; Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp:151
&gt; +    priv-&gt;dragAndDropGlue.setWidget(GTK_WIDGET(webkitWebViewBase));

Use viewWidget here too, to avoid another GTK_WIDGET cast.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>477449</commentid>
    <comment_count>18</comment_count>
      <attachid>106978</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-10-03 23:15:44 -0700</bug_when>
    <thetext>Comment on attachment 106978
Patch using GtkWidgetDragAndDropGlue

Removing review bit. I found a memory leak and the dragging performance is quite bad without the transparent window implementation from WK1. I&apos;ll reupload a patch soon hopefully with this logic shared between the two platforms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479819</commentid>
    <comment_count>19</comment_count>
      <attachid>110095</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-10-06 23:26:34 -0700</bug_when>
    <thetext>Created attachment 110095
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479831</commentid>
    <comment_count>20</comment_count>
      <attachid>110095</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-10-06 23:43:06 -0700</bug_when>
    <thetext>Comment on attachment 110095
Patch

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

Looks good to me, great work!

&gt; Source/WebCore/platform/gtk/DragIcon.cpp:107
&gt; +    gtk_drag_set_icon_widget(context, m_window,
&gt; +                             hotspot.x(), hotspot.y());

I guess this could be just one line.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479845</commentid>
    <comment_count>21</comment_count>
      <attachid>110099</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-10-07 00:25:57 -0700</bug_when>
    <thetext>Created attachment 110099
Fix the funky licensing on DragIcon.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479865</commentid>
    <comment_count>22</comment_count>
      <attachid>110099</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2011-10-07 01:13:27 -0700</bug_when>
    <thetext>Comment on attachment 110099
Fix the funky licensing on DragIcon.h

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

Looks good, please fix this little early return issue and the one earlier spotted by Carlos before landing!

&gt; Source/WebKit2/WebProcess/WebCoreSupport/gtk/WebDragClientGtk.cpp:60
&gt; +    if (bitmap &amp;&amp; !bitmap-&gt;createHandle(handle))
&gt; +        return;

I think this should be:

if (!bitmap || !bitmap-&gt;createHandle(handle))
    return;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479870</commentid>
    <comment_count>23</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2011-10-07 01:33:44 -0700</bug_when>
    <thetext>(In reply to comment #22)
&gt; (From update of attachment 110099 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=110099&amp;action=review
&gt; 
&gt; Looks good, please fix this little early return issue and the one earlier spotted by Carlos before landing!
&gt; 
&gt; &gt; Source/WebKit2/WebProcess/WebCoreSupport/gtk/WebDragClientGtk.cpp:60
&gt; &gt; +    if (bitmap &amp;&amp; !bitmap-&gt;createHandle(handle))
&gt; &gt; +        return;
&gt; 
&gt; I think this should be:
&gt; 
&gt; if (!bitmap || !bitmap-&gt;createHandle(handle))
&gt;     return;

No, it&apos;s correct. !bitmap means there&apos;s no icon, is not an error, and we want to send StartDrag with a null handle. This case is handled by the UI process that used the default icon. If there&apos;s a bitmap, but we fail to create a handle for it, it&apos;s and error and we don&apos;t want to start a drag.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>479872</commentid>
    <comment_count>24</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2011-10-07 01:39:08 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; (In reply to comment #22)
&gt; &gt; (From update of attachment 110099 [details] [details])
&gt; &gt; View in context: https://bugs.webkit.org/attachment.cgi?id=110099&amp;action=review
&gt; &gt; 
&gt; &gt; Looks good, please fix this little early return issue and the one earlier spotted by Carlos before landing!
&gt; &gt; 
&gt; &gt; &gt; Source/WebKit2/WebProcess/WebCoreSupport/gtk/WebDragClientGtk.cpp:60
&gt; &gt; &gt; +    if (bitmap &amp;&amp; !bitmap-&gt;createHandle(handle))
&gt; &gt; &gt; +        return;
&gt; &gt; 
&gt; &gt; I think this should be:
&gt; &gt; 
&gt; &gt; if (!bitmap || !bitmap-&gt;createHandle(handle))
&gt; &gt;     return;
&gt; 
&gt; No, it&apos;s correct. !bitmap means there&apos;s no icon, is not an error, and we want to send StartDrag with a null handle. This case is handled by the UI process that used the default icon. If there&apos;s a bitmap, but we fail to create a handle for it, it&apos;s and error and we don&apos;t want to start a drag.

Ah ok it makes sense now! Thanks Carlos. It&apos;d be good I think to add a comment before the early-return.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480577</commentid>
    <comment_count>25</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-10-08 10:45:01 -0700</bug_when>
    <thetext>Committed r97012: &lt;http://trac.webkit.org/changeset/97012&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>480578</commentid>
    <comment_count>26</comment_count>
      <attachid>110099</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-10-08 10:45:31 -0700</bug_when>
    <thetext>Comment on attachment 110099
Fix the funky licensing on DragIcon.h

Landed with a comment. Thanks for the review!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>99283</attachid>
            <date>2011-06-30 06:16:24 -0700</date>
            <delta_ts>2011-06-30 06:38:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-dnd.diff</filename>
            <type>text/plain</type>
            <size>43652</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAzOWUxZTdlLi43OTcxYzdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjgg
QEAKKzIwMTEtMDYtMzAgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtd
IEltcGxlbWVudCBkcmFnIGFuZCBkcm9wIHN1cHBvcnQgaW4gV2ViS2l0MgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjM3MDYKKworICAgICAgICAqIHBs
YXRmb3JtL0RyYWdEYXRhLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3RrL0RhdGFPYmplY3RHdGsu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YU9iamVjdEd0azo6dGV4dCk6IE1hcmsgYXMgY29u
c3QuCisgICAgICAgIChXZWJDb3JlOjpEYXRhT2JqZWN0R3RrOjptYXJrdXApOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OkRhdGFPYmplY3RHdGs6OnVybExhYmVsKTogRGl0dG8uCisgICAgICAg
ICogcGxhdGZvcm0vZ3RrL0RhdGFPYmplY3RHdGsuaDogUmVtb3ZlIHVudXNlZCBtZW1iZXIKKyAg
ICAgICAgbV9kcmFnQ29udGV4dC4KKyAgICAgICAgKFdlYkNvcmU6OkRhdGFPYmplY3RHdGs6OnVy
bCk6IE1hcmsgYXMgY29uc3QuCisgICAgICAgIChXZWJDb3JlOjpEYXRhT2JqZWN0R3RrOjp1cmlM
aXN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpEYXRhT2JqZWN0R3RrOjpmaWxlbmFtZXMp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRhdGFPYmplY3RHdGs6OmltYWdlKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpEYXRhT2JqZWN0R3RrOjpoYXNUZXh0KTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpEYXRhT2JqZWN0R3RrOjpoYXNNYXJrdXApOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OkRhdGFPYmplY3RHdGs6Omhhc1VSSUxpc3QpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OkRhdGFPYmplY3RHdGs6Omhhc1VSTCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
RGF0YU9iamVjdEd0azo6aGFzRmlsZW5hbWVzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpE
YXRhT2JqZWN0R3RrOjpoYXNJbWFnZSk6IERpdHRvLgorCiAyMDExLTA2LTMwICBNaWtoYWlsIE5h
Z2Fub3YgIDxtbmFnYW5vdkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgWXVy
eSBTZW1pa2hhdHNreS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCBlMWIxNzdkLi4wNGIwNTRhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsNTMgQEAKKzIwMTEtMDYtMzAgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dh
cmNpYUBpZ2FsaWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFtHVEtdIEltcGxlbWVudCBkcmFnIGFuZCBkcm9wIHN1cHBvcnQgaW4gV2ViS2l0
MgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjM3MDYK
KworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOiBBZGQgbmV3IGZpbGVzIHRvIGNvbXBpbGF0aW9u
LgorICAgICAgICAqIFNoYXJlZC9ndGsvQXJndW1lbnRDb2RlcnNHdGsuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKENvcmVJUEM6OmVuY29kZUltYWdlKTogRW5jb2RlIGEgR2RrUGl4YnVmLgorICAgICAg
ICAoQ29yZUlQQzo6ZGVjb2RlSW1hZ2UpOiBEZWNvZGUgYSBHZGtQaXhidWYuCisgICAgICAgIChD
b3JlSVBDOjplbmNvZGVEYXRhT2JqZWN0KTogRW5jb2RlIGEgRGF0YU9iamVjdEd0ay4KKyAgICAg
ICAgKENvcmVJUEM6OmRlY29kZURhdGFPYmplY3QpOiBEZWNvZGUgYSBEYXRhT2JqZWN0R3RrLgor
ICAgICAgICAoQ29yZUlQQzo6OjplbmNvZGUpOiBFbmNvZGUgRHJhZ0RhdGEuCisgICAgICAgIChD
b3JlSVBDOjo6OmRlY29kZSk6IERlY29kZSBEcmFnRGF0YS4KKyAgICAgICAgKiBTaGFyZWQvZ3Rr
L0FyZ3VtZW50Q29kZXJzR3RrLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNs
aWVudEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6c3RhcnREcmFn
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5oOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcDoKKyAgICAgICAgKHdl
YmtpdF93ZWJfdmlld19iYXNlX2luaXQpOiBTZXQgdGhlIHZpZXcgYXMgYSBwb3RlbnRpYWwgZHJv
cAorICAgICAgICBkZXN0aW5hdGlvbi4KKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlRHJhZ0Rh
dGFHZXQpOgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VEcmFnRW5kKToKKyAgICAgICAgKHdl
YmtpdFdlYlZpZXdCYXNlRHJhZ0RhdGFSZWNlaXZlZCk6CisgICAgICAgICh3ZWJraXRXZWJWaWV3
QmFzZURyYWdFbnRlcik6CisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZURyYWdNb3Rpb24pOgor
ICAgICAgICAoZG9EcmFnTGVhdmVMYXRlcik6CisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZURy
YWdMZWF2ZSk6CisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZURyYWdEcm9wKToKKyAgICAgICAg
KHdlYmtpdF93ZWJfdmlld19iYXNlX2NsYXNzX2luaXQpOiBPdmVycmlkZSBHdGtXaWRnZXQgZHJh
ZyBhbmQKKyAgICAgICAgZHJvcCBtZXRob2RzLgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VT
dGFydERyYWcpOiBDYWxscyBndGtfZHJhZ19iZWdpbigpIHRvIHN0YXJ0IGEKKyAgICAgICAgZHJh
ZyBvcGVyYXRpb24uCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jh
c2VQcml2YXRlLmg6IEFkZAorICAgICAgICB3ZWJraXRXZWJWaWV3QmFzZVN0YXJ0RHJhZygpLgor
ICAgICAgICAqIFVJUHJvY2Vzcy9QYWdlQ2xpZW50Lmg6IEFkZCBzdGFydERyYWcoKS4KKyAgICAg
ICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFn
ZVByb3h5OjpwZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24pOgorICAgICAgICAqIFVJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3Nh
Z2VzLmluOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRHJhZ0NsaWVu
dC5jcHA6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9ndGsvV2ViRHJhZ0Ns
aWVudEd0ay5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0Ojpjb252ZXJ0Q2Fpcm9TdXJmYWNl
VG9TaGFyZWFibGVCaXRtYXApOgorICAgICAgICAoV2ViS2l0OjpXZWJEcmFnQ2xpZW50OjpzdGFy
dERyYWcpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZTo6cGVyZm9ybURyYWdDb250cm9sbGVyQWN0aW9uKToKKyAgICAg
ICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluOgorCiAyMDExLTA2LTI5ICBEYXJpbiBBZGxlciAg
PGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYW4gQmVybnN0ZWluLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0RhdGEuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL0RyYWdEYXRhLmgKaW5kZXggOTIzZmRiMi4uNTRiNTE2MiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0RhdGEuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9EcmFnRGF0YS5oCkBAIC0xMjMsNyArMTIzLDcgQEAgcHVibGljOgogICAg
IE5TUGFzdGVib2FyZCAqcGFzdGVib2FyZCgpIHsgcmV0dXJuIG1fcGFzdGVib2FyZC5nZXQoKTsg
fQogI2VuZGlmCiAKLSNpZiBQTEFURk9STShRVCkKKyNpZiBQTEFURk9STShRVCkgfHwgUExBVEZP
Uk0oR1RLKQogICAgIC8vIFRoaXMgY29uc3RydWN0b3Igc2hvdWxkIHVzZWQgb25seSBieSBXZWJL
aXQyIElQQyBiZWNhdXNlIERyYWdEYXRhCiAgICAgLy8gaXMgaW5pdGlhbGl6ZWQgYnkgdGhlIGRl
Y29kZXIgYW5kIG5vdCBpbiB0aGUgY29uc3RydWN0b3IuCiAgICAgRHJhZ0RhdGEoKSB7IH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EYXRhT2JqZWN0R3RrLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EYXRhT2JqZWN0R3RrLmNwcAppbmRleCAwNWEy
ZGE5Li43ZjQ1YzQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRGF0
YU9iamVjdEd0ay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0RhdGFPYmpl
Y3RHdGsuY3BwCkBAIC0zMiwxNCArMzIsMTQgQEAgc3RhdGljIHZvaWQgcmVwbGFjZU5vbkJyZWFr
aW5nU3BhY2VXaXRoU3BhY2UoU3RyaW5nJiBzdHIpCiAgICAgc3RyLnJlcGxhY2UoTm9uQnJlYWtp
bmdTcGFjZUNoYXJhY3RlciwgU3BhY2VDaGFyYWN0ZXIpOwogfQogCi1TdHJpbmcgRGF0YU9iamVj
dEd0azo6dGV4dCgpCitTdHJpbmcgRGF0YU9iamVjdEd0azo6dGV4dCgpIGNvbnN0CiB7CiAgICAg
aWYgKG1fcmFuZ2UpCiAgICAgICAgIHJldHVybiBtX3JhbmdlLT50ZXh0KCk7CiAgICAgcmV0dXJu
IG1fdGV4dDsKIH0KIAotU3RyaW5nIERhdGFPYmplY3RHdGs6Om1hcmt1cCgpCitTdHJpbmcgRGF0
YU9iamVjdEd0azo6bWFya3VwKCkgY29uc3QKIHsKICAgICBpZiAobV9yYW5nZSkKICAgICAgICAg
cmV0dXJuIGNyZWF0ZU1hcmt1cChtX3JhbmdlLmdldCgpLCAwLCBBbm5vdGF0ZUZvckludGVyY2hh
bmdlLCBmYWxzZSwgQWJzb2x1dGVVUkxzKTsKQEAgLTEzMiw3ICsxMzIsNyBAQCB2b2lkIERhdGFP
YmplY3RHdGs6OmNsZWFyTWFya3VwKCkKICAgICBtX21hcmt1cCA9ICIiOwogfQogCi1TdHJpbmcg
RGF0YU9iamVjdEd0azo6dXJsTGFiZWwoKQorU3RyaW5nIERhdGFPYmplY3RHdGs6OnVybExhYmVs
KCkgY29uc3QKIHsKICAgICBpZiAoaGFzVGV4dCgpKQogICAgICAgICByZXR1cm4gdGV4dCgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0RhdGFPYmplY3RHdGsuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EYXRhT2JqZWN0R3RrLmgKaW5kZXggNTQyM2Y4
MS4uZTI3YmM5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0RhdGFP
YmplY3RHdGsuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRGF0YU9iamVjdEd0
ay5oCkBAIC0zNiwzMSArMzYsMjkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IERhdGFPYmplY3RHdGsoKSk7CiAgICAgfQogCi0gICAgY29uc3QgS1VSTCYgdXJsKCkgeyBy
ZXR1cm4gbV91cmw7IH0KLSAgICBjb25zdCBTdHJpbmcmIHVyaUxpc3QoKSB7IHJldHVybiBtX3Vy
aUxpc3Q7IH0KLSAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgZmlsZW5hbWVzKCkgeyByZXR1cm4g
bV9maWxlbmFtZXM7IH0KLSAgICBHZGtQaXhidWYqIGltYWdlKCkgeyByZXR1cm4gbV9pbWFnZS5n
ZXQoKTsgfQorICAgIGNvbnN0IEtVUkwmIHVybCgpIGNvbnN0IHsgcmV0dXJuIG1fdXJsOyB9Cisg
ICAgY29uc3QgU3RyaW5nJiB1cmlMaXN0KCkgY29uc3QgeyByZXR1cm4gbV91cmlMaXN0OyB9Cisg
ICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIGZpbGVuYW1lcygpIGNvbnN0IHsgcmV0dXJuIG1fZmls
ZW5hbWVzOyB9CisgICAgR2RrUGl4YnVmKiBpbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1faW1hZ2Uu
Z2V0KCk7IH0KICAgICB2b2lkIHNldFJhbmdlKFBhc3NSZWZQdHI8UmFuZ2U+IG5ld1JhbmdlKSB7
IG1fcmFuZ2UgPSBuZXdSYW5nZTsgfQogICAgIHZvaWQgc2V0SW1hZ2UoR2RrUGl4YnVmKiBuZXdJ
bWFnZSkgeyBtX2ltYWdlID0gbmV3SW1hZ2U7IH0KLSAgICB2b2lkIHNldERyYWdDb250ZXh0KEdk
a0RyYWdDb250ZXh0KiBuZXdEcmFnQ29udGV4dCkgeyBtX2RyYWdDb250ZXh0ID0gbmV3RHJhZ0Nv
bnRleHQ7IH0KICAgICB2b2lkIHNldFVSTChjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJik7Ci0g
ICAgYm9vbCBoYXNUZXh0KCkgeyByZXR1cm4gbV9yYW5nZSB8fCAhbV90ZXh0LmlzRW1wdHkoKTsg
fQotICAgIGJvb2wgaGFzTWFya3VwKCkgeyByZXR1cm4gbV9yYW5nZSB8fCAhbV9tYXJrdXAuaXNF
bXB0eSgpOyB9Ci0gICAgYm9vbCBoYXNVUklMaXN0KCkgeyByZXR1cm4gIW1fdXJpTGlzdC5pc0Vt
cHR5KCk7IH0KLSAgICBib29sIGhhc1VSTCgpIHsgcmV0dXJuICFtX3VybC5pc0VtcHR5KCkgJiYg
bV91cmwuaXNWYWxpZCgpOyB9Ci0gICAgYm9vbCBoYXNGaWxlbmFtZXMoKSB7IHJldHVybiAhbV9m
aWxlbmFtZXMuaXNFbXB0eSgpOyB9Ci0gICAgYm9vbCBoYXNJbWFnZSgpIHsgcmV0dXJuIG1faW1h
Z2U7IH0KKyAgICBib29sIGhhc1RleHQoKSBjb25zdCB7IHJldHVybiBtX3JhbmdlIHx8ICFtX3Rl
eHQuaXNFbXB0eSgpOyB9CisgICAgYm9vbCBoYXNNYXJrdXAoKSBjb25zdCB7IHJldHVybiBtX3Jh
bmdlIHx8ICFtX21hcmt1cC5pc0VtcHR5KCk7IH0KKyAgICBib29sIGhhc1VSSUxpc3QoKSBjb25z
dCB7IHJldHVybiAhbV91cmlMaXN0LmlzRW1wdHkoKTsgfQorICAgIGJvb2wgaGFzVVJMKCkgY29u
c3QgeyByZXR1cm4gIW1fdXJsLmlzRW1wdHkoKSAmJiBtX3VybC5pc1ZhbGlkKCk7IH0KKyAgICBi
b29sIGhhc0ZpbGVuYW1lcygpIGNvbnN0IHsgcmV0dXJuICFtX2ZpbGVuYW1lcy5pc0VtcHR5KCk7
IH0KKyAgICBib29sIGhhc0ltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZTsgfQogICAgIHZv
aWQgY2xlYXJVUklMaXN0KCkgeyBtX3VyaUxpc3QgPSAiIjsgfQogICAgIHZvaWQgY2xlYXJVUkwo
KSB7IG1fdXJsID0gS1VSTCgpOyB9CiAgICAgdm9pZCBjbGVhckltYWdlKCkgeyBtX2ltYWdlID0g
MDsgfQotICAgIEdka0RyYWdDb250ZXh0KiBkcmFnQ29udGV4dCgpIHsgcmV0dXJuIG1fZHJhZ0Nv
bnRleHQuZ2V0KCk7IH0KIAotICAgIFN0cmluZyB0ZXh0KCk7Ci0gICAgU3RyaW5nIG1hcmt1cCgp
OworICAgIFN0cmluZyB0ZXh0KCkgY29uc3Q7CisgICAgU3RyaW5nIG1hcmt1cCgpIGNvbnN0Owog
ICAgIHZvaWQgc2V0VGV4dChjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIHNldE1hcmt1cChjb25z
dCBTdHJpbmcmKTsKICAgICB2b2lkIHNldFVSSUxpc3QoY29uc3QgU3RyaW5nJik7Ci0gICAgU3Ry
aW5nIHVybExhYmVsKCk7CisgICAgU3RyaW5nIHVybExhYmVsKCkgY29uc3Q7CiAgICAgdm9pZCBj
bGVhcigpOwogICAgIHZvaWQgY2xlYXJUZXh0KCk7CiAgICAgdm9pZCBjbGVhck1hcmt1cCgpOwpA
QCAtNzQsNyArNzIsNiBAQCBwcml2YXRlOgogICAgIFN0cmluZyBtX3VyaUxpc3Q7CiAgICAgVmVj
dG9yPFN0cmluZz4gbV9maWxlbmFtZXM7CiAgICAgR1JlZlB0cjxHZGtQaXhidWY+IG1faW1hZ2U7
Ci0gICAgR1JlZlB0cjxHZGtEcmFnQ29udGV4dD4gbV9kcmFnQ29udGV4dDsKICAgICBSZWZQdHI8
UmFuZ2U+IG1fcmFuZ2U7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtl
ZmlsZS5hbSBiL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCmluZGV4IDQzYWJkZTMuLmU3
ZjY0YjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCkBAIC0xOTMsNiArMTkzLDggQEAgbGlid2Via2l0
Mmd0a19AV0VCS0lUR1RLX0FQSV9NQUpPUl9WRVJTSU9OQF9AV0VCS0lUR1RLX0FQSV9NSU5PUl9W
RVJTSU9OQF9sYV9TT1UKIAlTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRm9udFNtb290aGluZ0xldmVs
LmggXAogCVNvdXJjZS9XZWJLaXQyL1NoYXJlZC9jYWlyby9MYXllclRyZWVDb250ZXh0Q2Fpcm8u
Y3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvY2Fpcm8vU2hhcmVhYmxlQml0bWFwQ2Fpcm8u
Y3BwIFwKKwlTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL0FyZ3VtZW50Q29kZXJzR3RrLmggXAor
CVNvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvQXJndW1lbnRDb2RlcnNHdGsuY3BwIFwKIAlTb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL05hdGl2ZVdlYktleWJvYXJkRXZlbnRHdGsuY3BwIFwKIAlT
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL05hdGl2ZVdlYk1vdXNlRXZlbnRHdGsuY3BwIFwKIAlT
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL05hdGl2ZVdlYldoZWVsRXZlbnRHdGsuY3BwIFwKQEAg
LTY0NCw2ICs2NDYsNyBAQCBsaWJ3ZWJraXQyZ3RrX0BXRUJLSVRHVEtfQVBJX01BSk9SX1ZFUlNJ
T05AX0BXRUJLSVRHVEtfQVBJX01JTk9SX1ZFUlNJT05AX2xhX1NPVQogCVNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvUmVzb3VyY2VDYWNoZS9XZWJSZXNvdXJjZUNhY2hlTWFuYWdlci5oIFwKIAlT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1Jlc291cmNlQ2FjaGUvV2ViUmVzb3VyY2VDYWNoZU1h
bmFnZXIuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0
ay9XZWJDb250ZXh0TWVudUNsaWVudEd0ay5jcHAgXAorCVNvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkRyYWdDbGllbnRHdGsuY3BwIFwKIAlTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJFZGl0b3JDbGllbnRHdGsuY3Bw
IFwKIAlTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJFcnJv
cnNHdGsuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0
ay9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0LmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvU2hhcmVkL2d0ay9Bcmd1bWVudENvZGVyc0d0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvZ3RrL0FyZ3VtZW50Q29kZXJzR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5mOTRmMDM0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVk
L2d0ay9Bcmd1bWVudENvZGVyc0d0ay5jcHAKQEAgLTAsMCArMSwyMTkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkFyZ3VtZW50Q29kZXJzR3RrLmgiCisKKyNpbmNsdWRlICJTaGFyZWFibGVC
aXRtYXAuaCIKKyNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlIDxX
ZWJDb3JlL0RhdGFPYmplY3RHdGsuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0RyYWdEYXRhLmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0d0
a1ZlcnNpb25pbmcuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtQ29udGV4dENhaXJvLmg+
CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKwor
bmFtZXNwYWNlIENvcmVJUEMgeworCitzdGF0aWMgdm9pZCBlbmNvZGVJbWFnZShBcmd1bWVudEVu
Y29kZXIqIGVuY29kZXIsIGNvbnN0IEdka1BpeGJ1ZiogcGl4YnVmKQoreworICAgIEludFNpemUg
aW1hZ2VTaXplKGdka19waXhidWZfZ2V0X3dpZHRoKHBpeGJ1ZiksIGdka19waXhidWZfZ2V0X2hl
aWdodChwaXhidWYpKTsKKyAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSBTaGFy
ZWFibGVCaXRtYXA6OmNyZWF0ZVNoYXJlYWJsZShpbWFnZVNpemUsIFNoYXJlYWJsZUJpdG1hcDo6
U3VwcG9ydHNBbHBoYSk7CisgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gZ3JhcGhpY3NDb250
ZXh0ID0gYml0bWFwLT5jcmVhdGVHcmFwaGljc0NvbnRleHQoKTsKKworICAgIGNhaXJvX3QqIGNy
ID0gZ3JhcGhpY3NDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKTsKKyAgICBnZGtfY2Fp
cm9fc2V0X3NvdXJjZV9waXhidWYoY3IsIHBpeGJ1ZiwgMCwgMCk7CisgICAgY2Fpcm9fcGFpbnQo
Y3IpOworCisgICAgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgaGFuZGxlOworICAgIGJpdG1hcC0+
Y3JlYXRlSGFuZGxlKGhhbmRsZSk7CisKKyAgICBlbmNvZGVyLT5lbmNvZGUoaGFuZGxlKTsKK30K
Kworc3RhdGljIGJvb2wgZGVjb2RlSW1hZ2UoQXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBHUmVm
UHRyPEdka1BpeGJ1Zj4mIHBpeGJ1ZikKK3sKKyAgICBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBo
YW5kbGU7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoaGFuZGxlKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0bWFwID0gU2hhcmVhYmxl
Qml0bWFwOjpjcmVhdGUoaGFuZGxlKTsKKyAgICBpZiAoIWJpdG1hcCkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IGJpdG1hcC0+Y3JlYXRlSW1hZ2Uo
KTsKKyAgICBpZiAoIWltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBjYWlyb19z
dXJmYWNlX3QgKnN1cmZhY2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsK
KyAgICBpZiAoIXN1cmZhY2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHBpeGJ1ZiA9
IGFkb3B0R1JlZihnZGtfcGl4YnVmX2dldF9mcm9tX3N1cmZhY2Uoc3VyZmFjZSwgMCwgMCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhaXJvX2lt
YWdlX3N1cmZhY2VfZ2V0X3dpZHRoKHN1cmZhY2UpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0
KHN1cmZhY2UpKSk7CisgICAgaWYgKCFwaXhidWYpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZCBlbmNvZGVEYXRhT2JqZWN0KEFyZ3Vt
ZW50RW5jb2RlciogZW5jb2RlciwgY29uc3QgRGF0YU9iamVjdEd0ayogZGF0YU9iamVjdCkKK3sK
KyAgICBib29sIGhhc1RleHQgPSBkYXRhT2JqZWN0LT5oYXNUZXh0KCk7CisgICAgZW5jb2Rlci0+
ZW5jb2RlKGhhc1RleHQpOworICAgIGlmIChoYXNUZXh0KQorICAgICAgICBlbmNvZGVyLT5lbmNv
ZGUoZGF0YU9iamVjdC0+dGV4dCgpKTsKKworICAgIGJvb2wgaGFzTWFya3VwID0gZGF0YU9iamVj
dC0+aGFzTWFya3VwKCk7CisgICAgZW5jb2Rlci0+ZW5jb2RlKGhhc01hcmt1cCk7CisgICAgaWYg
KGhhc01hcmt1cCkKKyAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKGRhdGFPYmplY3QtPm1hcmt1cCgp
KTsKKworICAgIGJvb2wgaGFzVVJMID0gZGF0YU9iamVjdC0+aGFzVVJMKCk7CisgICAgZW5jb2Rl
ci0+ZW5jb2RlKGhhc1VSTCk7CisgICAgaWYgKGhhc1VSTCkKKyAgICAgICAgZW5jb2Rlci0+ZW5j
b2RlKGRhdGFPYmplY3QtPnVybCgpLnN0cmluZygpKTsKKworICAgIGJvb2wgaGFzVVJJTGlzdCA9
IGRhdGFPYmplY3QtPmhhc1VSSUxpc3QoKTsKKyAgICBlbmNvZGVyLT5lbmNvZGUoaGFzVVJJTGlz
dCk7CisgICAgaWYgKGhhc1VSSUxpc3QpCisgICAgICAgIGVuY29kZXItPmVuY29kZShkYXRhT2Jq
ZWN0LT51cmlMaXN0KCkpOworCisgICAgYm9vbCBoYXNJbWFnZSA9IGRhdGFPYmplY3QtPmhhc0lt
YWdlKCk7CisgICAgZW5jb2Rlci0+ZW5jb2RlKGhhc0ltYWdlKTsKKyAgICBpZiAoaGFzSW1hZ2Up
CisgICAgICAgIGVuY29kZUltYWdlKGVuY29kZXIsIGRhdGFPYmplY3QtPmltYWdlKCkpOworfQor
CitzdGF0aWMgYm9vbCBkZWNvZGVEYXRhT2JqZWN0KEFyZ3VtZW50RGVjb2RlciogZGVjb2Rlciwg
UmVmUHRyPERhdGFPYmplY3RHdGs+JiBkYXRhT2JqZWN0KQoreworICAgIFJlZlB0cjxEYXRhT2Jq
ZWN0R3RrPiBkYXRhID0gRGF0YU9iamVjdEd0azo6Y3JlYXRlKCk7CisKKyAgICBib29sIGhhc1Rl
eHQ7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoaGFzVGV4dCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBpZiAoaGFzVGV4dCkgeworICAgICAgICBTdHJpbmcgdGV4dDsKKyAgICAgICAg
aWYgKCFkZWNvZGVyLT5kZWNvZGUodGV4dCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIGRhdGEtPnNldFRleHQodGV4dCk7CisgICAgfQorCisgICAgYm9vbCBoYXNNYXJrdXA7
CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoaGFzTWFya3VwKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGlmIChoYXNNYXJrdXApIHsKKyAgICAgICAgU3RyaW5nIG1hcmt1cDsKKyAgICAg
ICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUobWFya3VwKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgZGF0YS0+c2V0TWFya3VwKG1hcmt1cCk7CisgICAgfQorCisgICAgYm9vbCBo
YXNVUkw7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoaGFzVVJMKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGlmIChoYXNVUkwpIHsKKyAgICAgICAgU3RyaW5nIHVybDsKKyAgICAgICAg
aWYgKCFkZWNvZGVyLT5kZWNvZGUodXJsKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgZGF0YS0+c2V0VVJMKEtVUkwoS1VSTCgpLCB1cmwpLCBTdHJpbmcoKSk7CisgICAgfQor
CisgICAgYm9vbCBoYXNVUklMaXN0OworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGhhc1VSSUxp
c3QpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGhhc1VSSUxpc3QpIHsKKyAgICAg
ICAgU3RyaW5nIHVyaUxpc3Q7CisgICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKHVyaUxpc3Qp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBkYXRhLT5zZXRVUklMaXN0KHVy
aUxpc3QpOworICAgIH0KKworICAgIGJvb2wgaGFzSW1hZ2U7CisgICAgaWYgKCFkZWNvZGVyLT5k
ZWNvZGUoaGFzSW1hZ2UpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGhhc0ltYWdl
KSB7CisgICAgICAgIEdSZWZQdHI8R2RrUGl4YnVmPiBpbWFnZTsKKyAgICAgICAgaWYgKCFkZWNv
ZGVJbWFnZShkZWNvZGVyLCBpbWFnZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIGRhdGEtPnNldEltYWdlKGltYWdlLmdldCgpKTsKKyAgICB9CisKKyAgICBkYXRhT2JqZWN0
ID0gZGF0YTsKKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEFyZ3VtZW50Q29kZXI8RHJh
Z0RhdGE+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBjb25zdCBEcmFnRGF0YSYg
ZHJhZ0RhdGEpCit7CisgICAgZW5jb2Rlci0+ZW5jb2RlKGRyYWdEYXRhLmNsaWVudFBvc2l0aW9u
KCkpOworICAgIGVuY29kZXItPmVuY29kZShkcmFnRGF0YS5nbG9iYWxQb3NpdGlvbigpKTsKKyAg
ICBlbmNvZGVyLT5lbmNvZGUoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGRyYWdEYXRhLmRyYWdnaW5n
U291cmNlT3BlcmF0aW9uTWFzaygpKSk7CisgICAgZW5jb2Rlci0+ZW5jb2RlKHN0YXRpY19jYXN0
PHVpbnQ2NF90PihkcmFnRGF0YS5mbGFncygpKSk7CisKKyAgICBEYXRhT2JqZWN0R3RrKiBwbGF0
Zm9ybURhdGEgPSBkcmFnRGF0YS5wbGF0Zm9ybURhdGEoKTsKKyAgICBlbmNvZGVyLT5lbmNvZGUo
c3RhdGljX2Nhc3Q8Ym9vbD4ocGxhdGZvcm1EYXRhKSk7CisgICAgaWYgKHBsYXRmb3JtRGF0YSkK
KyAgICAgICAgZW5jb2RlRGF0YU9iamVjdChlbmNvZGVyLCBwbGF0Zm9ybURhdGEpOworfQorCiti
b29sIEFyZ3VtZW50Q29kZXI8RHJhZ0RhdGE+OjpkZWNvZGUoQXJndW1lbnREZWNvZGVyKiBkZWNv
ZGVyLCBEcmFnRGF0YSYgZHJhZ0RhdGEpCit7CisgICAgSW50UG9pbnQgY2xpZW50UG9zaXRpb247
CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoY2xpZW50UG9zaXRpb24pKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBJbnRQb2ludCBnbG9iYWxQb3NpdGlvbjsKKyAgICBpZiAoIWRlY29k
ZXItPmRlY29kZShnbG9iYWxQb3NpdGlvbikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IHVpbnQ2NF90IHNvdXJjZU9wZXJhdGlvbk1hc2s7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUo
c291cmNlT3BlcmF0aW9uTWFzaykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHVpbnQ2
NF90IGZsYWdzOworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGZsYWdzKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgYm9vbCBoYXNQbGF0Zm9ybURhdGE7CisgICAgaWYgKCFkZWNvZGVy
LT5kZWNvZGUoaGFzUGxhdGZvcm1EYXRhKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
UmVmUHRyPERhdGFPYmplY3RHdGs+IHBsYXRmb3JtRGF0YTsKKyAgICBpZiAoaGFzUGxhdGZvcm1E
YXRhKSB7CisgICAgICAgIGlmICghZGVjb2RlRGF0YU9iamVjdChkZWNvZGVyLCBwbGF0Zm9ybURh
dGEpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGRyYWdEYXRhID0g
RHJhZ0RhdGEocGxhdGZvcm1EYXRhLnJlbGVhc2UoKS5sZWFrUmVmKCksIGNsaWVudFBvc2l0aW9u
LCBnbG9iYWxQb3NpdGlvbiwgc3RhdGljX2Nhc3Q8RHJhZ09wZXJhdGlvbj4oc291cmNlT3BlcmF0
aW9uTWFzayksCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxEcmFnQXBwbGlj
YXRpb25GbGFncz4oZmxhZ3MpKTsKKworICAgIHJldHVybiB0cnVlOworfQorCit9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL0FyZ3VtZW50Q29kZXJzR3RrLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL0FyZ3VtZW50Q29kZXJzR3RrLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uNjRkNjkzYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9ndGsvQXJndW1lbnRDb2RlcnNHdGsuaApAQCAtMCwwICsxLDQ1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
QXJndW1lbnRDb2RlcnNHdGtfaAorI2RlZmluZSBBcmd1bWVudENvZGVyc0d0a19oCisKKyNpbmNs
dWRlICJBcmd1bWVudENvZGVycy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgY2xhc3Mg
RGF0YU9iamVjdEd0azsKKyAgICBjbGFzcyBEcmFnRGF0YTsKK30KKworbmFtZXNwYWNlIENvcmVJ
UEMgeworCit0ZW1wbGF0ZTw+IHN0cnVjdCBBcmd1bWVudENvZGVyPFdlYkNvcmU6OkRyYWdEYXRh
PiB7CisgICAgc3RhdGljIHZvaWQgZW5jb2RlKEFyZ3VtZW50RW5jb2RlciosIGNvbnN0IFdlYkNv
cmU6OkRyYWdEYXRhJik7CisgICAgc3RhdGljIGJvb2wgZGVjb2RlKEFyZ3VtZW50RGVjb2Rlcios
IFdlYkNvcmU6OkRyYWdEYXRhJik7Cit9OworCit9IC8vIG5hbWVzcGFjZSBDb3JlSVBDCisKKyNl
bmRpZiAvLyBBcmd1bWVudENvZGVyc0d0a19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5jcHAKaW5kZXggYWI1NjQ2Zi4uNWE4OTdlMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudElt
cGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJ
bXBsLmNwcApAQCAtMjg0LDQgKzI4NCw5IEBAIHZvaWQgUGFnZUNsaWVudEltcGw6OmNvdW50U3Ry
aW5nTWF0Y2hlc0luQ3VzdG9tUmVwcmVzZW50YXRpb24oY29uc3QgU3RyaW5nJiwgRmluCiAgICAg
bm90SW1wbGVtZW50ZWQoKTsKIH0KIAordm9pZCBQYWdlQ2xpZW50SW1wbDo6c3RhcnREcmFnKGNv
bnN0IFdlYkNvcmU6OkRyYWdEYXRhJiBkcmFnRGF0YSwgUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRt
YXA+IGRyYWdJbWFnZSkKK3sKKyAgICB3ZWJraXRXZWJWaWV3QmFzZVN0YXJ0RHJhZyhXRUJLSVRf
V0VCX1ZJRVdfQkFTRShtX3ZpZXdXaWRnZXQpLCBkcmFnRGF0YSwgZHJhZ0ltYWdlKTsKK30KKwog
fSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvUGFnZUNsaWVudEltcGwuaAppbmRleCBlYTU0ODQzLi5hYzMxNzhmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmgKQEAgLTg5
LDYgKzg5LDcgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgZ2V0RWRpdG9yQ29tbWFuZHNG
b3JLZXlFdmVudChjb25zdCBOYXRpdmVXZWJLZXlib2FyZEV2ZW50JiwgVmVjdG9yPFdURjo6U3Ry
aW5nPiYpOwogICAgIHZpcnR1YWwgdm9pZCBmaW5kU3RyaW5nSW5DdXN0b21SZXByZXNlbnRhdGlv
bihjb25zdCBTdHJpbmcmLCBGaW5kT3B0aW9ucywgdW5zaWduZWQpOwogICAgIHZpcnR1YWwgdm9p
ZCBjb3VudFN0cmluZ01hdGNoZXNJbkN1c3RvbVJlcHJlc2VudGF0aW9uKGNvbnN0IFN0cmluZyYs
IEZpbmRPcHRpb25zLCB1bnNpZ25lZCk7CisgICAgdmlydHVhbCB2b2lkIHN0YXJ0RHJhZyhjb25z
dCBXZWJDb3JlOjpEcmFnRGF0YSYsIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBkcmFnSW1h
Z2UpOwogCiAjaWYgVVNFKEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQogICAgIHZpcnR1YWwgdm9p
ZCBwYWdlRGlkRW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nKCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAKaW5kZXgg
N2ZhZjg0Mi4uMWUwMTkwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcApAQCAtMjgsMTUgKzI4LDIxIEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2ViS2l0V2ViVmlld0Jhc2UuaCIKIAorI2luY2x1
ZGUgIkNsaXBib2FyZEd0ay5oIgorI2luY2x1ZGUgIkNsaXBib2FyZFV0aWxpdGllc0d0ay5oIgor
I2luY2x1ZGUgIkRhdGFPYmplY3RHdGsuaCIKKyNpbmNsdWRlICJEcmFnRGF0YS5oIgogI2luY2x1
ZGUgIkRyYXdpbmdBcmVhUHJveHlJbXBsLmgiCiAjaW5jbHVkZSAiR093blB0ckd0ay5oIgogI2lu
Y2x1ZGUgIkd0a0NsaWNrQ291bnRlci5oIgorI2luY2x1ZGUgIkd0a1V0aWxpdGllcy5oIgogI2lu
Y2x1ZGUgIkd0a1ZlcnNpb25pbmcuaCIKICNpbmNsdWRlICJOYXRpdmVXZWJLZXlib2FyZEV2ZW50
LmgiCiAjaW5jbHVkZSAiTmF0aXZlV2ViTW91c2VFdmVudC5oIgogI2luY2x1ZGUgIk5hdGl2ZVdl
YldoZWVsRXZlbnQuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgogI2luY2x1ZGUgIlBh
Z2VDbGllbnRJbXBsLmgiCisjaW5jbHVkZSAiUGFzdGVib2FyZEhlbHBlci5oIgogI2luY2x1ZGUg
IlJlZlB0ckNhaXJvLmgiCiAjaW5jbHVkZSAiUmVnaW9uLmgiCiAjaW5jbHVkZSAiV2ViQ29udGV4
dC5oIgpAQCAtNDksNiArNTUsMTUgQEAKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiB1c2luZyBu
YW1lc3BhY2UgV2ViQ29yZTsKIAordHlwZWRlZiBzdHJ1Y3QgRHJvcENvbnRleHRfIHsKKyAgICBH
dGtXaWRnZXQqIHdpZGdldDsKKyAgICBHUmVmUHRyPEdka0RyYWdDb250ZXh0PiBnZGtDb250ZXh0
OworICAgIFJlZlB0cjxEYXRhT2JqZWN0R3RrPiBkYXRhT2JqZWN0OworICAgIEludFBvaW50IGxh
c3RNb3Rpb25Qb3NpdGlvbjsKKyAgICBzaXplX3QgcGVuZGluZ0RhdGFSZXF1ZXN0czsKKyAgICBi
b29sIGRyb3BIYXBwZW5lZDsKK30gRHJvcENvbnRleHQ7CisKIHN0cnVjdCBfV2ViS2l0V2ViVmll
d0Jhc2VQcml2YXRlIHsKICAgICBPd25QdHI8UGFnZUNsaWVudEltcGw+IHBhZ2VDbGllbnQ7CiAg
ICAgUmVmUHRyPFdlYlBhZ2VQcm94eT4gcGFnZVByb3h5OwpAQCAtMTMwLDExICsxNDUsMTYgQEAg
c3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2Jhc2VfaW5pdChXZWJLaXRXZWJWaWV3QmFzZSog
d2Via2l0V2ViVmlld0Jhc2UpCiAKICAgICBwcml2LT5pc1BhZ2VBY3RpdmUgPSBUUlVFOwogCi0g
ICAgZ3RrX3dpZGdldF9zZXRfZG91YmxlX2J1ZmZlcmVkKEdUS19XSURHRVQod2Via2l0V2ViVmll
d0Jhc2UpLCBGQUxTRSk7Ci0gICAgZ3RrX3dpZGdldF9zZXRfY2FuX2ZvY3VzKEdUS19XSURHRVQo
d2Via2l0V2ViVmlld0Jhc2UpLCBUUlVFKTsKKyAgICBHdGtXaWRnZXQqIHZpZXdXaWRnZXQgPSBH
VEtfV0lER0VUKHdlYmtpdFdlYlZpZXdCYXNlKTsKKyAgICBndGtfd2lkZ2V0X3NldF9kb3VibGVf
YnVmZmVyZWQodmlld1dpZGdldCwgRkFMU0UpOworICAgIGd0a193aWRnZXRfc2V0X2Nhbl9mb2N1
cyh2aWV3V2lkZ2V0LCBUUlVFKTsKICAgICBwcml2LT5pbUNvbnRleHQgPSBndGtfaW1fbXVsdGlj
b250ZXh0X25ldygpOwogCi0gICAgcHJpdi0+cGFnZUNsaWVudCA9IFBhZ2VDbGllbnRJbXBsOjpj
cmVhdGUoR1RLX1dJREdFVCh3ZWJraXRXZWJWaWV3QmFzZSkpOworICAgIHByaXYtPnBhZ2VDbGll
bnQgPSBQYWdlQ2xpZW50SW1wbDo6Y3JlYXRlKHZpZXdXaWRnZXQpOworCisgICAgZ3RrX2RyYWdf
ZGVzdF9zZXQodmlld1dpZGdldCwgc3RhdGljX2Nhc3Q8R3RrRGVzdERlZmF1bHRzPigwKSwgMCwg
MCwKKyAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxHZGtEcmFnQWN0aW9uPihHREtf
QUNUSU9OX0NPUFkgfCBHREtfQUNUSU9OX01PVkUgfCBHREtfQUNUSU9OX0xJTksgfCBHREtfQUNU
SU9OX1BSSVZBVEUpKTsKKyAgICBndGtfZHJhZ19kZXN0X3NldF90YXJnZXRfbGlzdCh2aWV3V2lk
Z2V0LCBQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpLT50YXJnZXRM
aXN0KCkpOwogfQogCiBzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0V2ViVmlld0Jhc2VEcmF3KEd0a1dp
ZGdldCogd2lkZ2V0LCBjYWlyb190KiBjcikKQEAgLTI4MSw2ICszMDEsMTUwIEBAIHN0YXRpYyBn
Ym9vbGVhbiB3ZWJraXRXZWJWaWV3QmFzZVF1ZXJ5VG9vbHRpcChHdGtXaWRnZXQqIHdpZGdldCwg
Z2ludCB4LCBnaW50IHksCiAgICAgcmV0dXJuIFRSVUU7CiB9CiAKK3N0YXRpYyB2b2lkIHdlYmtp
dFdlYlZpZXdCYXNlRHJhZ0RhdGFHZXQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0RyYWdDb250ZXh0
KiBjb250ZXh0LCBHdGtTZWxlY3Rpb25EYXRhKiBzZWxlY3Rpb25EYXRhLCBndWludCBpbmZvLCBn
dWludCB0aW1lKQoreworICAgIERhdGFPYmplY3RHdGsqIGRhdGFPYmplY3QgPSBzdGF0aWNfY2Fz
dDxEYXRhT2JqZWN0R3RrKj4oZ19vYmplY3RfZ2V0X2RhdGEoR19PQkpFQ1QoY29udGV4dCksICJk
cmFnLWRhdGEtb2JqZWN0IikpOworICAgIGlmICghZGF0YU9iamVjdCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+Zmls
bFNlbGVjdGlvbkRhdGEoc2VsZWN0aW9uRGF0YSwgaW5mbywgZGF0YU9iamVjdCk7Cit9CisKK3N0
YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlRHJhZ0VuZChHdGtXaWRnZXQqIHdpZGdldCwgR2Rr
RHJhZ0NvbnRleHQqIGNvbnRleHQpCit7CisgICAgRGF0YU9iamVjdEd0ayogZGF0YU9iamVjdCA9
IHN0YXRpY19jYXN0PERhdGFPYmplY3RHdGsqPihnX29iamVjdF9nZXRfZGF0YShHX09CSkVDVChj
b250ZXh0KSwgImRyYWctZGF0YS1vYmplY3QiKSk7CisgICAgaWYgKCFkYXRhT2JqZWN0KQorICAg
ICAgICByZXR1cm47CisKKyAgICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVChjb250ZXh0KSwg
ImRyYWctZGF0YS1vYmplY3QiLCAwKTsKKyAgICBkZWxldGUgZGF0YU9iamVjdDsKKworICAgIEdk
a0RldmljZSogZGV2aWNlID0gZ2RrX2RyYWdfY29udGV4dF9nZXRfZGV2aWNlKGNvbnRleHQpOwor
ICAgIGludCB4LCB5OworICAgIGdka19kZXZpY2VfZ2V0X3dpbmRvd19hdF9wb3NpdGlvbihkZXZp
Y2UsICZ4LCAmeSk7CisgICAgaW50IHhSb290LCB5Um9vdDsKKyAgICBnZGtfZGV2aWNlX2dldF9w
b3NpdGlvbihkZXZpY2UsIDAsICZ4Um9vdCwgJnlSb290KTsKKyAgICBXZWJLaXRXZWJWaWV3QmFz
ZSogd2ViVmlld0Jhc2UgPSBXRUJLSVRfV0VCX1ZJRVdfQkFTRSh3aWRnZXQpOworICAgIHdlYlZp
ZXdCYXNlLT5wcml2LT5wYWdlUHJveHktPmRyYWdFbmRlZChJbnRQb2ludCh4LCB5KSwgSW50UG9p
bnQoeFJvb3QsIHlSb290KSwgZ2RrRHJhZ0FjdGlvblRvRHJhZ09wZXJhdGlvbihnZGtfZHJhZ19j
b250ZXh0X2dldF9zZWxlY3RlZF9hY3Rpb24oY29udGV4dCkpKTsKK30KKworc3RhdGljIHZvaWQg
d2Via2l0V2ViVmlld0Jhc2VEcmFnRGF0YVJlY2VpdmVkKEd0a1dpZGdldCogd2lkZ2V0LCBHZGtE
cmFnQ29udGV4dCogY29udGV4dCwgZ2ludCB4LCBnaW50IHksIEd0a1NlbGVjdGlvbkRhdGEqIHNl
bGVjdGlvbkRhdGEsIGd1aW50IGluZm8sIGd1aW50IHRpbWUpCit7CisgICAgRHJvcENvbnRleHQq
IGRyb3BDb250ZXh0ID0gc3RhdGljX2Nhc3Q8RHJvcENvbnRleHQqPihnX29iamVjdF9nZXRfZGF0
YShHX09CSkVDVChjb250ZXh0KSwgImRyb3AtY29udGV4dCIpKTsKKyAgICBpZiAoIWRyb3BDb250
ZXh0KQorICAgICAgICByZXR1cm47CisKKyAgICBkcm9wQ29udGV4dC0+cGVuZGluZ0RhdGFSZXF1
ZXN0cy0tOworICAgIFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCkt
PmZpbGxEYXRhT2JqZWN0RnJvbURyb3BEYXRhKHNlbGVjdGlvbkRhdGEsIGluZm8sIGRyb3BDb250
ZXh0LT5kYXRhT2JqZWN0LmdldCgpKTsKKworICAgIGlmIChkcm9wQ29udGV4dC0+cGVuZGluZ0Rh
dGFSZXF1ZXN0cykKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gVGhlIGNvb3JkaW5hdGVzIHBh
c3NlZCB0byBkcmFnLWRhdGEtcmVjZWl2ZWQgc2lnbmFsIGFyZSBzb21ldGltZXMKKyAgICAvLyBp
bmFjY3VyYXRlIGluIERSVCwgc28gdXNlIHRoZSBjb29yZGluYXRlcyBvZiB0aGUgbGFzdCBtb3Rp
b24gZXZlbnQuCisgICAgY29uc3QgSW50UG9pbnQmIHBvc2l0aW9uID0gZHJvcENvbnRleHQtPmxh
c3RNb3Rpb25Qb3NpdGlvbjsKKworICAgIC8vIElmIHRoZXJlIGFyZSBubyBtb3JlIHBlbmRpbmcg
cmVxdWVzdHMsIHN0YXJ0IHNlbmRpbmcgZHJhZ2dpbmcgZGF0YSB0byBXZWJDb3JlLgorICAgIERy
YWdEYXRhIGRyYWdEYXRhKGRyb3BDb250ZXh0LT5kYXRhT2JqZWN0LmdldCgpLCBwb3NpdGlvbiwg
Y29udmVydFdpZGdldFBvaW50VG9TY3JlZW5Qb2ludCh3aWRnZXQsIHBvc2l0aW9uKSwKKyAgICAg
ICAgICAgICAgICAgICAgICBnZGtEcmFnQWN0aW9uVG9EcmFnT3BlcmF0aW9uKGdka19kcmFnX2Nv
bnRleHRfZ2V0X2FjdGlvbnMoY29udGV4dCkpKTsKKyAgICBXZWJLaXRXZWJWaWV3QmFzZSogd2Vi
Vmlld0Jhc2UgPSBXRUJLSVRfV0VCX1ZJRVdfQkFTRSh3aWRnZXQpOworICAgIHdlYlZpZXdCYXNl
LT5wcml2LT5wYWdlUHJveHktPmRyYWdFbnRlcmVkKCZkcmFnRGF0YSk7CisgICAgZ2RrX2RyYWdf
c3RhdHVzKGNvbnRleHQsIGdka19kcmFnX2NvbnRleHRfZ2V0X3N1Z2dlc3RlZF9hY3Rpb24oY29u
dGV4dCksIHRpbWUpOworfQorCitzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3QmFzZURyYWdFbnRl
cihHdGtXaWRnZXQqIHdpZGdldCwgR2RrRHJhZ0NvbnRleHQqIGNvbnRleHQsIGdpbnQgeCwgZ2lu
dCB5LCBndWludCB0aW1lKQoreworICAgIERyb3BDb250ZXh0KiBkcm9wQ29udGV4dCA9IG5ldyBE
cm9wQ29udGV4dDsKKyAgICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVChjb250ZXh0KSwgImRy
b3AtY29udGV4dCIsIGRyb3BDb250ZXh0KTsKKyAgICBkcm9wQ29udGV4dC0+bGFzdE1vdGlvblBv
c2l0aW9uID0gSW50UG9pbnQoeCwgeSk7CisgICAgZHJvcENvbnRleHQtPmRhdGFPYmplY3QgPSBE
YXRhT2JqZWN0R3RrOjpjcmVhdGUoKTsKKyAgICBkcm9wQ29udGV4dC0+d2lkZ2V0ID0gd2lkZ2V0
OworICAgIGRyb3BDb250ZXh0LT5nZGtDb250ZXh0ID0gY29udGV4dDsKKyAgICBkcm9wQ29udGV4
dC0+ZHJvcEhhcHBlbmVkID0gZmFsc2U7CisKKyAgICBWZWN0b3I8R2RrQXRvbT4gYWNjZXB0YWJs
ZVRhcmdldHMoUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+ZHJv
cEF0b21zRm9yQ29udGV4dCh3aWRnZXQsIGNvbnRleHQpKTsKKyAgICBkcm9wQ29udGV4dC0+cGVu
ZGluZ0RhdGFSZXF1ZXN0cyA9IGFjY2VwdGFibGVUYXJnZXRzLnNpemUoKTsKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGFjY2VwdGFibGVUYXJnZXRzLnNpemUoKTsgaSsrKQorICAgICAgICBn
dGtfZHJhZ19nZXRfZGF0YSh3aWRnZXQsIGNvbnRleHQsIGFjY2VwdGFibGVUYXJnZXRzLmF0KGkp
LCB0aW1lKTsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdFdlYlZpZXdCYXNlRHJhZ01vdGlv
bihHdGtXaWRnZXQqIHdpZGdldCwgR2RrRHJhZ0NvbnRleHQqIGNvbnRleHQsIGdpbnQgeCwgZ2lu
dCB5LCBndWludCB0aW1lKQoreworICAgIERyb3BDb250ZXh0KiBkcm9wQ29udGV4dCA9IHN0YXRp
Y19jYXN0PERyb3BDb250ZXh0Kj4oZ19vYmplY3RfZ2V0X2RhdGEoR19PQkpFQ1QoY29udGV4dCks
ICJkcm9wLWNvbnRleHQiKSk7CisgICAgaWYgKCFkcm9wQ29udGV4dCkgeworICAgICAgICB3ZWJr
aXRXZWJWaWV3QmFzZURyYWdFbnRlcih3aWRnZXQsIGNvbnRleHQsIHgsIHksIHRpbWUpOworICAg
ICAgICByZXR1cm4gVFJVRTsKKyAgICB9CisKKyAgICBkcm9wQ29udGV4dC0+bGFzdE1vdGlvblBv
c2l0aW9uID0gSW50UG9pbnQoeCwgeSk7CisgICAgaWYgKGRyb3BDb250ZXh0LT5wZW5kaW5nRGF0
YVJlcXVlc3RzKQorICAgICAgICByZXR1cm4gVFJVRTsKKworICAgIGNvbnN0IEludFBvaW50JiBw
b3NpdGlvbiA9IGRyb3BDb250ZXh0LT5sYXN0TW90aW9uUG9zaXRpb247CisgICAgRHJhZ0RhdGEg
ZHJhZ0RhdGEoZHJvcENvbnRleHQtPmRhdGFPYmplY3QuZ2V0KCksIHBvc2l0aW9uLCBjb252ZXJ0
V2lkZ2V0UG9pbnRUb1NjcmVlblBvaW50KHdpZGdldCwgcG9zaXRpb24pLAorICAgICAgICAgICAg
ICAgICAgICAgIGdka0RyYWdBY3Rpb25Ub0RyYWdPcGVyYXRpb24oZ2RrX2RyYWdfY29udGV4dF9n
ZXRfYWN0aW9ucyhjb250ZXh0KSkpOworICAgIFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJWaWV3QmFz
ZSA9IFdFQktJVF9XRUJfVklFV19CQVNFKHdpZGdldCk7CisgICAgd2ViVmlld0Jhc2UtPnByaXYt
PnBhZ2VQcm94eS0+ZHJhZ1VwZGF0ZWQoJmRyYWdEYXRhKTsKKyAgICBEcmFnT3BlcmF0aW9uIG9w
ZXJhdGlvbiA9IHdlYlZpZXdCYXNlLT5wcml2LT5wYWdlUHJveHktPmRyYWdPcGVyYXRpb24oKTsK
KyAgICBpZiAob3BlcmF0aW9uICE9IERyYWdPcGVyYXRpb25Ob25lKQorICAgICAgICBnZGtfZHJh
Z19zdGF0dXMoY29udGV4dCwgZHJhZ09wZXJhdGlvblRvU2luZ2xlR2RrRHJhZ0FjdGlvbihvcGVy
YXRpb24pLCB0aW1lKTsKKworICAgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgZ2Jvb2xlYW4g
ZG9EcmFnTGVhdmVMYXRlcihEcm9wQ29udGV4dCogZHJvcENvbnRleHQpCit7CisgICAgLy8gSWYg
dGhlIHZpZXcgZG9lc24ndCBrbm93IGFib3V0IHRoZSBkcmFnIHlldCAodGhlcmUgYXJlIHN0aWxs
IHBlbmRpbmcgZGF0YSkKKyAgICAvLyByZXF1ZXN0cywgZG9uJ3QgdXBkYXRlIGl0IHdpdGggaW5m
b3JtYXRpb24gYWJvdXQgdGhlIGRyYWcuCisgICAgaWYgKGRyb3BDb250ZXh0LT5wZW5kaW5nRGF0
YVJlcXVlc3RzKQorICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICAvLyBEb24ndCBjYWxsIGRy
YWdFeGl0ZWQgaWYgd2UgaGF2ZSBqdXN0IHJlY2VpdmVkIGEgZHJhZy1kcm9wIHNpZ25hbC4gVGhp
cworICAgIC8vIGhhcHBlbnMgaW4gdGhlIGNhc2Ugb2YgYSBzdWNjZXNzZnVsIGRyb3Agb250byB0
aGUgdmlldy4KKyAgICBpZiAoIWRyb3BDb250ZXh0LT5kcm9wSGFwcGVuZWQpIHsKKyAgICAgICAg
Y29uc3QgSW50UG9pbnQmIHBvc2l0aW9uID0gZHJvcENvbnRleHQtPmxhc3RNb3Rpb25Qb3NpdGlv
bjsKKyAgICAgICAgRHJhZ0RhdGEgZHJhZ0RhdGEoZHJvcENvbnRleHQtPmRhdGFPYmplY3QuZ2V0
KCksIHBvc2l0aW9uLCBjb252ZXJ0V2lkZ2V0UG9pbnRUb1NjcmVlblBvaW50KGRyb3BDb250ZXh0
LT53aWRnZXQsIHBvc2l0aW9uKSwgRHJhZ09wZXJhdGlvbk5vbmUpOworICAgICAgICBXZWJLaXRX
ZWJWaWV3QmFzZSogd2ViVmlld0Jhc2UgPSBXRUJLSVRfV0VCX1ZJRVdfQkFTRShkcm9wQ29udGV4
dC0+d2lkZ2V0KTsKKyAgICAgICAgd2ViVmlld0Jhc2UtPnByaXYtPnBhZ2VQcm94eS0+ZHJhZ0V4
aXRlZCgmZHJhZ0RhdGEpOworICAgICAgICB3ZWJWaWV3QmFzZS0+cHJpdi0+cGFnZVByb3h5LT5y
ZXNldERyYWdPcGVyYXRpb24oKTsKKyAgICB9CisKKyAgICBnX29iamVjdF9zZXRfZGF0YShHX09C
SkVDVChkcm9wQ29udGV4dC0+Z2RrQ29udGV4dC5nZXQoKSksICJkcm9wLWNvbnRleHQiLCAwKTsK
KyAgICBkZWxldGUgZHJvcENvbnRleHQ7CisKKyAgICByZXR1cm4gRkFMU0U7Cit9CisKK3N0YXRp
YyB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlRHJhZ0xlYXZlKEd0a1dpZGdldCogd2lkZ2V0LCBHZGtE
cmFnQ29udGV4dCogY29udGV4dCwgZ3VpbnQgdGltZSkKK3sKKyAgICBEcm9wQ29udGV4dCogZHJv
cENvbnRleHQgPSBzdGF0aWNfY2FzdDxEcm9wQ29udGV4dCo+KGdfb2JqZWN0X2dldF9kYXRhKEdf
T0JKRUNUKGNvbnRleHQpLCAiZHJvcC1jb250ZXh0IikpOworICAgIGlmICghZHJvcENvbnRleHQp
CisgICAgICAgIHJldHVybjsKKworICAgIC8vIER1cmluZyBhIGRyb3AgR1RLKyB3aWxsIGZpcmUg
YSBkcmFnLWxlYXZlIHNpZ25hbCByaWdodCBiZWZvcmUgZmlyaW5nCisgICAgLy8gdGhlIGRyYWct
ZHJvcCBzaWduYWwuIFdlIHdhbnQgdGhlIGFjdGlvbnMgZm9yIGRyYWctbGVhdmUgdG8gaGFwcGVu
IGFmdGVyCisgICAgLy8gdGhvc2UgZm9yIGRyYWctZHJvcCwgc28gc2NoZWR1bGUgdGhlbSB0byBo
YXBwZW4gYXN5bmNocm9ub3VzbHkgaGVyZS4KKyAgICBnX2lkbGVfYWRkX2Z1bGwoR19QUklPUklU
WV9ERUZBVUxULCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPihkb0RyYWdMZWF2ZUxhdGVy
KSwgZHJvcENvbnRleHQsIHN0YXRpY19jYXN0PEdEZXN0cm95Tm90aWZ5PigwKSk7Cit9CisKK3N0
YXRpYyBnYm9vbGVhbiB3ZWJraXRXZWJWaWV3QmFzZURyYWdEcm9wKEd0a1dpZGdldCogd2lkZ2V0
LCBHZGtEcmFnQ29udGV4dCogY29udGV4dCwgZ2ludCB4LCBnaW50IHksIGd1aW50IHRpbWUpCit7
CisgICAgRHJvcENvbnRleHQqIGRyb3BDb250ZXh0ID0gc3RhdGljX2Nhc3Q8RHJvcENvbnRleHQq
PihnX29iamVjdF9nZXRfZGF0YShHX09CSkVDVChjb250ZXh0KSwgImRyb3AtY29udGV4dCIpKTsK
KyAgICBpZiAoIWRyb3BDb250ZXh0KQorICAgICAgICByZXR1cm4gRkFMU0U7CisKKyAgICBkcm9w
Q29udGV4dC0+ZHJvcEhhcHBlbmVkID0gdHJ1ZTsKKworICAgIEludFBvaW50IHBvc2l0aW9uKHgs
IHkpOworICAgIERyYWdEYXRhIGRyYWdEYXRhKGRyb3BDb250ZXh0LT5kYXRhT2JqZWN0LmdldCgp
LCBwb3NpdGlvbiwgY29udmVydFdpZGdldFBvaW50VG9TY3JlZW5Qb2ludCh3aWRnZXQsIHBvc2l0
aW9uKSwgZ2RrRHJhZ0FjdGlvblRvRHJhZ09wZXJhdGlvbihnZGtfZHJhZ19jb250ZXh0X2dldF9h
Y3Rpb25zKGNvbnRleHQpKSk7CisgICAgV2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZpZXdCYXNlID0g
V0VCS0lUX1dFQl9WSUVXX0JBU0Uod2lkZ2V0KTsKKyAgICBTYW5kYm94RXh0ZW5zaW9uOjpIYW5k
bGUgaGFuZGxlOworICAgIHdlYlZpZXdCYXNlLT5wcml2LT5wYWdlUHJveHktPnBlcmZvcm1EcmFn
KCZkcmFnRGF0YSwgU3RyaW5nKCksIGhhbmRsZSk7CisgICAgZ3RrX2RyYWdfZmluaXNoKGNvbnRl
eHQsIFRSVUUsIEZBTFNFLCB0aW1lKTsKKworICAgIHJldHVybiBUUlVFOworfQorCiBzdGF0aWMg
dm9pZCB3ZWJraXRfd2ViX3ZpZXdfYmFzZV9jbGFzc19pbml0KFdlYktpdFdlYlZpZXdCYXNlQ2xh
c3MqIHdlYmtpdFdlYlZpZXdCYXNlQ2xhc3MpCiB7CiAgICAgR3RrV2lkZ2V0Q2xhc3MqIHdpZGdl
dENsYXNzID0gR1RLX1dJREdFVF9DTEFTUyh3ZWJraXRXZWJWaWV3QmFzZUNsYXNzKTsKQEAgLTI5
Niw2ICs0NjAsMTIgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl92aWV3X2Jhc2VfY2xhc3NfaW5p
dChXZWJLaXRXZWJWaWV3QmFzZUNsYXNzKiB3ZWJraXRXZWJWaWUKICAgICB3aWRnZXRDbGFzcy0+
c2Nyb2xsX2V2ZW50ID0gd2Via2l0V2ViVmlld0Jhc2VTY3JvbGxFdmVudDsKICAgICB3aWRnZXRD
bGFzcy0+bW90aW9uX25vdGlmeV9ldmVudCA9IHdlYmtpdFdlYlZpZXdCYXNlTW90aW9uTm90aWZ5
RXZlbnQ7CiAgICAgd2lkZ2V0Q2xhc3MtPnF1ZXJ5X3Rvb2x0aXAgPSB3ZWJraXRXZWJWaWV3QmFz
ZVF1ZXJ5VG9vbHRpcDsKKyAgICB3aWRnZXRDbGFzcy0+ZHJhZ19lbmQgPSB3ZWJraXRXZWJWaWV3
QmFzZURyYWdFbmQ7CisgICAgd2lkZ2V0Q2xhc3MtPmRyYWdfZGF0YV9nZXQgPSB3ZWJraXRXZWJW
aWV3QmFzZURyYWdEYXRhR2V0OworICAgIHdpZGdldENsYXNzLT5kcmFnX21vdGlvbiA9IHdlYmtp
dFdlYlZpZXdCYXNlRHJhZ01vdGlvbjsKKyAgICB3aWRnZXRDbGFzcy0+ZHJhZ19sZWF2ZSA9IHdl
YmtpdFdlYlZpZXdCYXNlRHJhZ0xlYXZlOworICAgIHdpZGdldENsYXNzLT5kcmFnX2Ryb3AgPSB3
ZWJraXRXZWJWaWV3QmFzZURyYWdEcm9wOworICAgIHdpZGdldENsYXNzLT5kcmFnX2RhdGFfcmVj
ZWl2ZWQgPSB3ZWJraXRXZWJWaWV3QmFzZURyYWdEYXRhUmVjZWl2ZWQ7CiAKICAgICBHT2JqZWN0
Q2xhc3MqIGdvYmplY3RDbGFzcyA9IEdfT0JKRUNUX0NMQVNTKHdlYmtpdFdlYlZpZXdCYXNlQ2xh
c3MpOwogICAgIGdvYmplY3RDbGFzcy0+ZmluYWxpemUgPSB3ZWJraXRXZWJWaWV3QmFzZUZpbmFs
aXplOwpAQCAtMzQzLDQgKzUxMywyMSBAQCB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlU2V0VG9vbHRp
cFRleHQoV2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZpZXdCYXNlLCBjb25zdCBjaGFyKgogICAgIGd0
a193aWRnZXRfdHJpZ2dlcl90b29sdGlwX3F1ZXJ5KEdUS19XSURHRVQod2ViVmlld0Jhc2UpKTsK
IH0KIAordm9pZCB3ZWJraXRXZWJWaWV3QmFzZVN0YXJ0RHJhZyhXZWJLaXRXZWJWaWV3QmFzZSog
d2ViVmlld0Jhc2UsIGNvbnN0IERyYWdEYXRhJiBkcmFnRGF0YSwgUGFzc1JlZlB0cjxTaGFyZWFi
bGVCaXRtYXA+IGRyYWdJbWFnZSkKK3sKKyAgICBSZWZQdHI8RGF0YU9iamVjdEd0az4gZGF0YU9i
amVjdChkcmFnRGF0YS5wbGF0Zm9ybURhdGEoKSk7CisgICAgR1JlZlB0cjxHdGtUYXJnZXRMaXN0
PiB0YXJnZXRMaXN0KFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCkt
PnRhcmdldExpc3RGb3JEYXRhT2JqZWN0KGRhdGFPYmplY3QuZ2V0KCkpKTsKKyAgICBHZGtEcmFn
Q29udGV4dCogY29udGV4dCA9IGd0a19kcmFnX2JlZ2luKEdUS19XSURHRVQod2ViVmlld0Jhc2Up
LCB0YXJnZXRMaXN0LmdldCgpLCBkcmFnT3BlcmF0aW9uVG9HZGtEcmFnQWN0aW9ucyhkcmFnRGF0
YS5kcmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1hc2soKSksIDEsIGd0a19nZXRfY3VycmVudF9ldmVu
dCgpKTsKKworICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKGNvbnRleHQpLCAiZHJhZy1k
YXRhLW9iamVjdCIsIGRhdGFPYmplY3QuZ2V0KCkpOwogCisgICAgLy8gQSBkcmFnIHN0YXJ0aW5n
IHNob3VsZCBwcmV2ZW50IGEgZG91YmxlLWNsaWNrIGZyb20gaGFwcGVuaW5nLiBUaGlzIG1pZ2h0
CisgICAgLy8gaGFwcGVuIGlmIGEgZHJhZyBpcyBmb2xsb3dlZCB2ZXJ5IHF1aWNrbHkgYnkgYW5v
dGhlciBjbGljayAobGlrZSBpbiB0aGUgRFJUKS4KKyAgICB3ZWJWaWV3QmFzZS0+cHJpdi0+Y2xp
Y2tDb3VudGVyLnJlc2V0KCk7CisKKyAgICBpZiAoZHJhZ0ltYWdlKSB7CisgICAgICAgIFJlZlB0
cjxjYWlyb19zdXJmYWNlX3Q+IGltYWdlKGRyYWdJbWFnZS0+Y3JlYXRlQ2Fpcm9TdXJmYWNlKCkp
OworICAgICAgICBndGtfZHJhZ19zZXRfaWNvbl9zdXJmYWNlKGNvbnRleHQsIGltYWdlLmdldCgp
KTsKKyAgICB9IGVsc2UKKyAgICAgICAgZ3RrX2RyYWdfc2V0X2ljb25fZGVmYXVsdChjb250ZXh0
KTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktp
dFdlYlZpZXdCYXNlUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlLmgKaW5kZXggNjk5NjczOC4uZjU4ZTVhOCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VQ
cml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vi
Vmlld0Jhc2VQcml2YXRlLmgKQEAgLTQ2LDYgKzQ2LDggQEAgdm9pZCB3ZWJraXRXZWJWaWV3QmFz
ZUNyZWF0ZVdlYlBhZ2UoV2ViS2l0V2ViVmlld0Jhc2UqLCBXS0NvbnRleHRSZWYsIFdLUGFnZUdy
b3UKIAogdm9pZCB3ZWJraXRXZWJWaWV3QmFzZVNldFRvb2x0aXBUZXh0KFdlYktpdFdlYlZpZXdC
YXNlKiwgY29uc3QgY2hhciopOwogCit2b2lkIHdlYmtpdFdlYlZpZXdCYXNlU3RhcnREcmFnKFdl
YktpdFdlYlZpZXdCYXNlKiwgY29uc3QgV2ViQ29yZTo6RHJhZ0RhdGEmLCBQYXNzUmVmUHRyPFNo
YXJlYWJsZUJpdG1hcD4gZHJhZ0ltYWdlKTsKKwogR19FTkRfREVDTFMKIAogI2VuZGlmIC8vIFdl
YktpdFdlYlZpZXdCYXNlUHJpdmF0ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvUGFnZUNsaWVudC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BhZ2VDbGllbnQu
aAppbmRleCBmN2JkYzJhLi5mZmNjNDRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvUGFnZUNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xp
ZW50LmgKQEAgLTEwNCwxMSArMTA0LDEzIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlk
Q2hhbmdlQ29udGVudHNTaXplKGNvbnN0IFdlYkNvcmU6OkludFNpemUmKSA9IDA7CiAgICAgdmly
dHVhbCB2b2lkIGRpZEZpbmRab29tYWJsZUFyZWEoY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpID0g
MDsKIAotICAgIHZpcnR1YWwgdm9pZCBzdGFydERyYWcoY29uc3QgV2ViQ29yZTo6RHJhZ0RhdGEm
LCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gZHJhZ0ltYWdlKSA9IDA7Ci0KICAgICB2aXJ0
dWFsIFdlYkNvcmU6OkludFJlY3Qgdmlld3BvcnRWaXNpYmxlUmVjdCgpIGNvbnN0ID0gMDsKICNl
bmRpZgogCisjaWYgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEdUSykKKyAgICB2aXJ0dWFsIHZv
aWQgc3RhcnREcmFnKGNvbnN0IFdlYkNvcmU6OkRyYWdEYXRhJiwgUGFzc1JlZlB0cjxTaGFyZWFi
bGVCaXRtYXA+IGRyYWdJbWFnZSkgPSAwOworI2VuZGlmCisKICAgICB2aXJ0dWFsIHZvaWQgc2V0
Q3Vyc29yKGNvbnN0IFdlYkNvcmU6OkN1cnNvciYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0
Vmlld3BvcnRBcmd1bWVudHMoY29uc3QgV2ViQ29yZTo6Vmlld3BvcnRBcmd1bWVudHMmKSA9IDA7
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3Bw
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKaW5kZXggMmQ4NDgz
Zi4uNDg5YzBmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAK
QEAgLTkyLDYgKzkyLDEwIEBACiAjaW5jbHVkZSAiQXJndW1lbnRDb2RlcnNRdC5oIgogI2VuZGlm
CiAKKyNpZiBQTEFURk9STShHVEspCisjaW5jbHVkZSAiQXJndW1lbnRDb2RlcnNHdGsuaCIKKyNl
bmRpZgorCiAjaWZuZGVmIE5ERUJVRwogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkTGVha0NvdW50
ZXIuaD4KICNlbmRpZgpAQCAtODEyLDcgKzgxNiw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpwZXJm
b3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24oRHJhZ0NvbnRyb2xsZXJBY3Rpb24gYWN0aW9uLCBEcmFn
CiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBwYXNzIHRoZSBkcmFnIGRhdGEgbWFwIG9ubHkgb24g
RHJhZ0VudGVyLgogICAgIHByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6UGVyZm9y
bURyYWdDb250cm9sbGVyQWN0aW9uKGFjdGlvbiwgZHJhZ0RhdGEtPmNsaWVudFBvc2l0aW9uKCks
IGRyYWdEYXRhLT5nbG9iYWxQb3NpdGlvbigpLAogICAgICAgICBkcmFnRGF0YS0+ZHJhZ2dpbmdT
b3VyY2VPcGVyYXRpb25NYXNrKCksIGRyYWdEYXRhLT5kcmFnRGF0YU1hcCgpLCBkcmFnRGF0YS0+
ZmxhZ3MoKSksIG1fcGFnZUlEKTsKLSNlbGlmIFBMQVRGT1JNKFFUKQorI2VsaWYgUExBVEZPUk0o
UVQpIHx8IFBMQVRGT1JNKEdUSykKICAgICBwcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OldlYlBh
Z2U6OlBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlvbihhY3Rpb24sICpkcmFnRGF0YSksIG1fcGFn
ZUlEKTsKICNlbHNlCiAgICAgcHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpQZXJm
b3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24oYWN0aW9uLCBkcmFnRGF0YS0+Y2xpZW50UG9zaXRpb24o
KSwgZHJhZ0RhdGEtPmdsb2JhbFBvc2l0aW9uKCksIGRyYWdEYXRhLT5kcmFnZ2luZ1NvdXJjZU9w
ZXJhdGlvbk1hc2soKSwgZHJhZ1N0b3JhZ2VOYW1lLCBkcmFnRGF0YS0+ZmxhZ3MoKSwgc2FuZGJv
eEV4dGVuc2lvbkhhbmRsZSksIG1fcGFnZUlEKTsKQEAgLTg4Niw3ICs4OTAsNyBAQCB2b2lkIFdl
YlBhZ2VQcm94eTo6c3RhcnREcmFnRHJvcChjb25zdCBJbnRQb2ludCYgaW1hZ2VPcmlnaW4sIGNv
bnN0IEludFBvaW50JiBkcgogfQogI2VuZGlmCiAKLSNpZiBQTEFURk9STShRVCkKKyNpZiBQTEFU
Rk9STShRVCkgfHwgUExBVEZPUk0oR1RLKQogdm9pZCBXZWJQYWdlUHJveHk6OnN0YXJ0RHJhZyhj
b25zdCBEcmFnRGF0YSYgZHJhZ0RhdGEsIGNvbnN0IFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJiBk
cmFnSW1hZ2VIYW5kbGUpCiB7CiAgICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gZHJhZ0ltYWdl
ID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGUoZHJhZ0ltYWdlSGFuZGxlKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAppbmRleCAyNjEyZDlhLi4wY2NmYzQzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCkBAIC00NDQsNyArNDQ0LDcgQEAgcHVi
bGljOgogI2lmIFBMQVRGT1JNKFdJTikKICAgICB2b2lkIHN0YXJ0RHJhZ0Ryb3AoY29uc3QgV2Vi
Q29yZTo6SW50UG9pbnQmIGltYWdlUG9pbnQsIGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBkcmFn
UG9pbnQsIHVpbnQ2NF90IG9rRWZmZWN0LCBjb25zdCBIYXNoTWFwPFVJTlQsIFZlY3RvcjxTdHJp
bmc+ID4mIGRhdGFNYXAsIHVpbnQ2NF90IGZpbGVTaXplLCBjb25zdCBTdHJpbmcmIHBhdGhuYW1l
LCBjb25zdCBTaGFyZWRNZW1vcnk6OkhhbmRsZSYgZmlsZUNvbnRlbnRIYW5kbGUsIGNvbnN0IFdl
YkNvcmU6OkludFNpemUmIGRyYWdJbWFnZVNpemUsIGNvbnN0IFNoYXJlZE1lbW9yeTo6SGFuZGxl
JiBkcmFnSW1hZ2VIYW5kbGUsIGJvb2wgaXNMaW5rRHJhZyk7CiAjZW5kaWYKLSNpZiBQTEFURk9S
TShRVCkKKyNpZiBQTEFURk9STShRVCkgfHwgUExBVEZPUk0oR1RLKQogICAgIHZvaWQgc3RhcnRE
cmFnKGNvbnN0IFdlYkNvcmU6OkRyYWdEYXRhJiwgY29uc3QgU2hhcmVhYmxlQml0bWFwOjpIYW5k
bGUmIGRyYWdJbWFnZSk7CiAjZW5kaWYKICAgICB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKENvcmVJ
UEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENvcmVJUEM6OkFyZ3VtZW50RGVj
b2RlciopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVz
c2FnZXMuaW4KaW5kZXggN2QwZmQ5OC4uODc0NDFjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCkBAIC0yMDksNyArMjA5LDcgQEAg
bWVzc2FnZXMgLT4gV2ViUGFnZVByb3h5IHsKICNpZiBQTEFURk9STShXSU4pCiAgICAgU3RhcnRE
cmFnRHJvcChXZWJDb3JlOjpJbnRQb2ludCBpbWFnZVBvaW50LCBXZWJDb3JlOjpJbnRQb2ludCBk
cmFnUG9pbnQsIHVpbnQ2NF90IG9rRWZmZWN0LCBIYXNoTWFwPFVJTlQsVmVjdG9yPFN0cmluZz4g
PiBkYXRhTWFwLCB1aW50NjRfdCBmaWxlU2l6ZSwgU3RyaW5nIHBhdGhuYW1lLCBXZWJLaXQ6OlNo
YXJlZE1lbW9yeTo6SGFuZGxlIGZpbGVDb250ZW50SGFuZGxlLCBXZWJDb3JlOjpJbnRTaXplIGRy
YWdJbWFnZVNpemUsIFdlYktpdDo6U2hhcmVkTWVtb3J5OjpIYW5kbGUgZHJhZ0ltYWdlLCBib29s
IGxpbmtEcmFnKQogI2VuZGlmCi0jaWYgUExBVEZPUk0oUVQpCisjaWYgUExBVEZPUk0oUVQpIHx8
IFBMQVRGT1JNKEdUSykKICAgICBTdGFydERyYWcoV2ViQ29yZTo6RHJhZ0RhdGEgZHJhZ0RhdGEs
IFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgZHJhZ0ltYWdlKQogI2VuZGlmCiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRHJh
Z0NsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dl
YkRyYWdDbGllbnQuY3BwCmluZGV4IGFlZmMwMWEuLjU3YWQ2YTQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRHJhZ0NsaWVudC5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJEcmFnQ2xpZW50
LmNwcApAQCAtNTIsNyArNTIsNyBAQCBEcmFnU291cmNlQWN0aW9uIFdlYkRyYWdDbGllbnQ6OmRy
YWdTb3VyY2VBY3Rpb25NYXNrRm9yUG9pbnQoY29uc3QgSW50UG9pbnQmIHdpbgogICAgIHJldHVy
biBEcmFnU291cmNlQWN0aW9uQW55OwogfQogCi0jaWYgIVBMQVRGT1JNKE1BQykgJiYgIVBMQVRG
T1JNKFdJTikgJiYgIVBMQVRGT1JNKFFUKQorI2lmICFQTEFURk9STShNQUMpICYmICFQTEFURk9S
TShXSU4pICYmICFQTEFURk9STShRVCkgJiYgIVBMQVRGT1JNKEdUSykKIHZvaWQgV2ViRHJhZ0Ns
aWVudDo6c3RhcnREcmFnKERyYWdJbWFnZVJlZiwgY29uc3QgSW50UG9pbnQmLCBjb25zdCBJbnRQ
b2ludCYsIENsaXBib2FyZCosIEZyYW1lKiwgYm9vbCkKIHsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkRyYWdDbGllbnRHdGsu
Y3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9ndGsvV2ViRHJh
Z0NsaWVudEd0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDkxM2Rl
MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvZ3RrL1dlYkRyYWdDbGllbnRHdGsuY3BwCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIldlYkRyYWdDbGllbnQuaCIKKworI2luY2x1ZGUgIkFyZ3VtZW50Q29k
ZXJzR3RrLmgiCisjaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCisjaW5jbHVkZSAiV2ViUGFn
ZS5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94eU1lc3NhZ2VzLmgiCisjaW5jbHVkZSA8V2ViQ29y
ZS9DbGlwYm9hcmRHdGsuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0RyYWdEYXRhLmg+CisjaW5jbHVk
ZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3Jt
Q29udGV4dENhaXJvLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2Ug
V2ViS2l0IHsKKworc3RhdGljIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBjb252ZXJ0Q2Fp
cm9TdXJmYWNlVG9TaGFyZWFibGVCaXRtYXAoY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlKQorewor
ICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBhbiBlYXJseSByZXR1cm4sIGFuZCBzdGFydERy
YWcgd291bGQgc2VuZCBhIG51bGwgaGFuZGxlLCBidXQKKyAgICAvLyBzZW5kaW5nIG51bGwgaGFu
ZGxlcyBpcyBub3Qgc3VwcG9ydGVkIHlldC4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9NjA2MjEKKyAgICBpZiAoIXN1cmZhY2UpCisgICAgICAgIHN1cmZh
Y2UgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZShDQUlST19GT1JNQVRfQTEsIDEsIDEpOwor
ICAgIEludFNpemUgaW1hZ2VTaXplKGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKHN1cmZh
Y2UpLCBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQoc3VyZmFjZSkpOworICAgIFJlZlB0
cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlU2hhcmVh
YmxlKGltYWdlU2l6ZSwgU2hhcmVhYmxlQml0bWFwOjpTdXBwb3J0c0FscGhhKTsKKyAgICBPd25Q
dHI8R3JhcGhpY3NDb250ZXh0PiBncmFwaGljc0NvbnRleHQgPSBiaXRtYXAtPmNyZWF0ZUdyYXBo
aWNzQ29udGV4dCgpOworCisgICAgZ3JhcGhpY3NDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+
ZHJhd1N1cmZhY2VUb0NvbnRleHQoc3VyZmFjZSwgSW50UmVjdChJbnRQb2ludCgpLCBpbWFnZVNp
emUpLCBJbnRSZWN0KEludFBvaW50KCksIGltYWdlU2l6ZSksIGdyYXBoaWNzQ29udGV4dC5nZXQo
KSk7CisgICAgcmV0dXJuIGJpdG1hcC5yZWxlYXNlKCk7Cit9CisKK3ZvaWQgV2ViRHJhZ0NsaWVu
dDo6c3RhcnREcmFnKERyYWdJbWFnZVJlZiBkcmFnSW1hZ2UsIGNvbnN0IEludFBvaW50JiBjbGll
bnRQb3NpdGlvbiwgY29uc3QgSW50UG9pbnQmIGdsb2JhbFBvc2l0aW9uLCBDbGlwYm9hcmQqIGNs
aXBib2FyZCwgRnJhbWUqLCBib29sKQoreworICAgICAgICBnX3ByaW50ICgiREJHOiBXZWJEcmFn
Q2xpZW50OjpzdGFydERyYWcsIGltYWdlOiAlcFxuIiwgZHJhZ0ltYWdlKTsKKyAgICBSZWZQdHI8
U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSBjb252ZXJ0Q2Fpcm9TdXJmYWNlVG9TaGFyZWFibGVC
aXRtYXAoZHJhZ0ltYWdlKTsKKyAgICBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBoYW5kbGU7Cisg
ICAgaWYgKCFiaXRtYXAtPmNyZWF0ZUhhbmRsZShoYW5kbGUpKQorICAgICAgICByZXR1cm47CisK
KyAgICBSZWZQdHI8RGF0YU9iamVjdEd0az4gZGF0YU9iamVjdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
Q2xpcGJvYXJkR3RrKj4oY2xpcGJvYXJkKS0+ZGF0YU9iamVjdCgpOworICAgIERyYWdEYXRhIGRy
YWdEYXRhKGRhdGFPYmplY3QuZ2V0KCksIGNsaWVudFBvc2l0aW9uLCBnbG9iYWxQb3NpdGlvbiwg
Y2xpcGJvYXJkLT5zb3VyY2VPcGVyYXRpb24oKSk7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlUHJveHk6OlN0YXJ0RHJhZyhkcmFnRGF0YSwgaGFuZGxlKSk7Cit9CisKK307IC8v
IG5hbWVzcGFjZSBXZWJLaXQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5jcHAKaW5kZXggOGYyN2VjZC4uYzhjN2NhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcApAQCAtMTY5OSwxMiArMTY5OSwxNiBAQCB2
b2lkIFdlYlBhZ2U6OnBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlvbih1aW50NjRfdCBhY3Rpb24s
IFdlYkNvcmU6OkludFBvaW50IGNsaQogICAgIH0KIH0KIAotI2VsaWYgUExBVEZPUk0oUVQpCisj
ZWxpZiBQTEFURk9STShRVCkgfHwgUExBVEZPUk0oR1RLKQogdm9pZCBXZWJQYWdlOjpwZXJmb3Jt
RHJhZ0NvbnRyb2xsZXJBY3Rpb24odWludDY0X3QgYWN0aW9uLCBXZWJDb3JlOjpEcmFnRGF0YSBk
cmFnRGF0YSkKIHsKICAgICBpZiAoIW1fcGFnZSkgewogICAgICAgICBzZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlUHJveHk6OkRpZFBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlvbihEcmFnT3BlcmF0aW9u
Tm9uZSkpOworI2lmIFBMQVRGT1JNKFFUKQogICAgICAgICBRTWltZURhdGEqIGRhdGEgPSBjb25z
dF9jYXN0PFFNaW1lRGF0YSo+KGRyYWdEYXRhLnBsYXRmb3JtRGF0YSgpKTsKKyNlbGlmIFBMQVRG
T1JNKEdUSykKKyAgICAgICAgRGF0YU9iamVjdEd0ayogZGF0YSA9IGNvbnN0X2Nhc3Q8RGF0YU9i
amVjdEd0ayo+KGRyYWdEYXRhLnBsYXRmb3JtRGF0YSgpKTsKKyNlbmRpZgogICAgICAgICBkZWxl
dGUgZGF0YTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE3MzEsNyArMTczNSwxMSBAQCB2
b2lkIFdlYlBhZ2U6OnBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlvbih1aW50NjRfdCBhY3Rpb24s
IFdlYkNvcmU6OkRyYWdEYXRhIGRyYQogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICB9CiAgICAgLy8gRHJhZ0RhdGEgZG9lcyBub3QgZGVsZXRlIGl0cyBwbGF0Zm9ybURhdGEgc28g
d2UgbmVlZCB0byBkbyB0aGF0IGhlcmUuCisjaWYgUExBVEZPUk0oUVQpCiAgICAgUU1pbWVEYXRh
KiBkYXRhID0gY29uc3RfY2FzdDxRTWltZURhdGEqPihkcmFnRGF0YS5wbGF0Zm9ybURhdGEoKSk7
CisjZWxpZiBQTEFURk9STShHVEspCisgICAgRGF0YU9iamVjdEd0ayogZGF0YSA9IGNvbnN0X2Nh
c3Q8RGF0YU9iamVjdEd0ayo+KGRyYWdEYXRhLnBsYXRmb3JtRGF0YSgpKTsKKyNlbmRpZgogICAg
IGRlbGV0ZSBkYXRhOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UuaAppbmRleCBiN2U5MzBlLi4xYmI1OWUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKQEAgLTYwLDYgKzYwLDEwIEBACiAjaW5jbHVkZSAiQXJn
dW1lbnRDb2RlcnNRdC5oIgogI2VuZGlmCiAKKyNpZiBQTEFURk9STShHVEspCisjaW5jbHVkZSAi
QXJndW1lbnRDb2RlcnNHdGsuaCIKKyNlbmRpZgorCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykK
ICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtVG91Y2hFdmVudC5oPgogI2VuZGlmCkBAIC0zNzgs
NyArMzgyLDcgQEAgcHVibGljOgogICAgIHZvaWQgY2xlYXJTZWxlY3Rpb24oKTsKICNpZiBQTEFU
Rk9STShXSU4pCiAgICAgdm9pZCBwZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24odWludDY0X3Qg
YWN0aW9uLCBXZWJDb3JlOjpJbnRQb2ludCBjbGllbnRQb3NpdGlvbiwgV2ViQ29yZTo6SW50UG9p
bnQgZ2xvYmFsUG9zaXRpb24sIHVpbnQ2NF90IGRyYWdnaW5nU291cmNlT3BlcmF0aW9uTWFzaywg
Y29uc3QgV2ViQ29yZTo6RHJhZ0RhdGFNYXAmLCB1aW50MzJfdCBmbGFncyk7Ci0jZWxpZiBQTEFU
Rk9STShRVCkKKyNlbGlmIFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShHVEspCiAgICAgdm9pZCBw
ZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24odWludDY0X3QgYWN0aW9uLCBXZWJDb3JlOjpEcmFn
RGF0YSk7CiAjZWxzZQogICAgIHZvaWQgcGVyZm9ybURyYWdDb250cm9sbGVyQWN0aW9uKHVpbnQ2
NF90IGFjdGlvbiwgV2ViQ29yZTo6SW50UG9pbnQgY2xpZW50UG9zaXRpb24sIFdlYkNvcmU6Oklu
dFBvaW50IGdsb2JhbFBvc2l0aW9uLCB1aW50NjRfdCBkcmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1h
c2ssIGNvbnN0IFdURjo6U3RyaW5nJiBkcmFnU3RvcmFnZU5hbWUsIHVpbnQzMl90IGZsYWdzLCBj
b25zdCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KaW5kZXggZWUzNTE0Mi4u
OGQ4YTQ3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UubWVzc2FnZXMuaW4KQEAgLTEyNCwxMCArMTI0LDEwIEBAIG1lc3NhZ2VzIC0+IFdl
YlBhZ2UgewogI2lmIFBMQVRGT1JNKFdJTikKICAgICBQZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rp
b24odWludDY0X3QgYWN0aW9uLCBXZWJDb3JlOjpJbnRQb2ludCBjbGllbnRQb3NpdGlvbiwgV2Vi
Q29yZTo6SW50UG9pbnQgZ2xvYmFsUG9zaXRpb24sIHVpbnQ2NF90IGRyYWdnaW5nU291cmNlT3Bl
cmF0aW9uTWFzaywgSGFzaE1hcDxVSU5ULFZlY3RvcjxTdHJpbmc+PiBkYXRhTWFwLCB1aW50MzJf
dCBmbGFncykKICNlbmRpZgotI2lmIFBMQVRGT1JNKFFUKQorI2lmIFBMQVRGT1JNKFFUKSB8fCBQ
TEFURk9STShHVEspCiAgICAgUGVyZm9ybURyYWdDb250cm9sbGVyQWN0aW9uKHVpbnQ2NF90IGFj
dGlvbiwgV2ViQ29yZTo6RHJhZ0RhdGEgZHJhZ0RhdGEpCiAjZW5kaWYKLSNpZiAhUExBVEZPUk0o
V0lOKSAmJiAhUExBVEZPUk0oUVQpCisjaWYgIVBMQVRGT1JNKFdJTikgJiYgIVBMQVRGT1JNKFFU
KSAmJiAhUExBVEZPUk0oR1RLKQogICAgIFBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlvbih1aW50
NjRfdCBhY3Rpb24sIFdlYkNvcmU6OkludFBvaW50IGNsaWVudFBvc2l0aW9uLCBXZWJDb3JlOjpJ
bnRQb2ludCBnbG9iYWxQb3NpdGlvbiwgdWludDY0X3QgZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25N
YXNrLCBXVEY6OlN0cmluZyBkcmFnU3RvcmFnZU5hbWUsIHVpbnQzMl90IGZsYWdzLCBXZWJLaXQ6
OlNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlKQogI2VuZGlm
CiAgICAgRHJhZ0VuZGVkKFdlYkNvcmU6OkludFBvaW50IGNsaWVudFBvc2l0aW9uLCBXZWJDb3Jl
OjpJbnRQb2ludCBnbG9iYWxQb3NpdGlvbiwgdWludDY0X3Qgb3BlcmF0aW9uKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>99289</attachid>
            <date>2011-06-30 06:38:26 -0700</date>
            <delta_ts>2011-06-30 06:44:21 -0700</delta_ts>
            <desc>Updated patch to fix coding style issues</desc>
            <filename>wk2-dnd2.diff</filename>
            <type>text/plain</type>
            <size>43572</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAzOWUxZTdlLi43OTcxYzdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjgg
QEAKKzIwMTEtMDYtMzAgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtd
IEltcGxlbWVudCBkcmFnIGFuZCBkcm9wIHN1cHBvcnQgaW4gV2ViS2l0MgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjM3MDYKKworICAgICAgICAqIHBs
YXRmb3JtL0RyYWdEYXRhLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3RrL0RhdGFPYmplY3RHdGsu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YU9iamVjdEd0azo6dGV4dCk6IE1hcmsgYXMgY29u
c3QuCisgICAgICAgIChXZWJDb3JlOjpEYXRhT2JqZWN0R3RrOjptYXJrdXApOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OkRhdGFPYmplY3RHdGs6OnVybExhYmVsKTogRGl0dG8uCisgICAgICAg
ICogcGxhdGZvcm0vZ3RrL0RhdGFPYmplY3RHdGsuaDogUmVtb3ZlIHVudXNlZCBtZW1iZXIKKyAg
ICAgICAgbV9kcmFnQ29udGV4dC4KKyAgICAgICAgKFdlYkNvcmU6OkRhdGFPYmplY3RHdGs6OnVy
bCk6IE1hcmsgYXMgY29uc3QuCisgICAgICAgIChXZWJDb3JlOjpEYXRhT2JqZWN0R3RrOjp1cmlM
aXN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpEYXRhT2JqZWN0R3RrOjpmaWxlbmFtZXMp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRhdGFPYmplY3RHdGs6OmltYWdlKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpEYXRhT2JqZWN0R3RrOjpoYXNUZXh0KTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpEYXRhT2JqZWN0R3RrOjpoYXNNYXJrdXApOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OkRhdGFPYmplY3RHdGs6Omhhc1VSSUxpc3QpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OkRhdGFPYmplY3RHdGs6Omhhc1VSTCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
RGF0YU9iamVjdEd0azo6aGFzRmlsZW5hbWVzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpE
YXRhT2JqZWN0R3RrOjpoYXNJbWFnZSk6IERpdHRvLgorCiAyMDExLTA2LTMwICBNaWtoYWlsIE5h
Z2Fub3YgIDxtbmFnYW5vdkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgWXVy
eSBTZW1pa2hhdHNreS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdE
YXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnRGF0YS5oCmluZGV4IDkyM2ZkYjIu
LjU0YjUxNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdEYXRhLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0RhdGEuaApAQCAtMTIzLDcgKzEyMyw3
IEBAIHB1YmxpYzoKICAgICBOU1Bhc3RlYm9hcmQgKnBhc3RlYm9hcmQoKSB7IHJldHVybiBtX3Bh
c3RlYm9hcmQuZ2V0KCk7IH0KICNlbmRpZgogCi0jaWYgUExBVEZPUk0oUVQpCisjaWYgUExBVEZP
Uk0oUVQpIHx8IFBMQVRGT1JNKEdUSykKICAgICAvLyBUaGlzIGNvbnN0cnVjdG9yIHNob3VsZCB1
c2VkIG9ubHkgYnkgV2ViS2l0MiBJUEMgYmVjYXVzZSBEcmFnRGF0YQogICAgIC8vIGlzIGluaXRp
YWxpemVkIGJ5IHRoZSBkZWNvZGVyIGFuZCBub3QgaW4gdGhlIGNvbnN0cnVjdG9yLgogICAgIERy
YWdEYXRhKCkgeyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRGF0
YU9iamVjdEd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRGF0YU9iamVjdEd0
ay5jcHAKaW5kZXggMDVhMmRhOS4uN2Y0NWM0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL0RhdGFPYmplY3RHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9EYXRhT2JqZWN0R3RrLmNwcApAQCAtMzIsMTQgKzMyLDE0IEBAIHN0YXRpYyB2b2lk
IHJlcGxhY2VOb25CcmVha2luZ1NwYWNlV2l0aFNwYWNlKFN0cmluZyYgc3RyKQogICAgIHN0ci5y
ZXBsYWNlKE5vbkJyZWFraW5nU3BhY2VDaGFyYWN0ZXIsIFNwYWNlQ2hhcmFjdGVyKTsKIH0KIAot
U3RyaW5nIERhdGFPYmplY3RHdGs6OnRleHQoKQorU3RyaW5nIERhdGFPYmplY3RHdGs6OnRleHQo
KSBjb25zdAogewogICAgIGlmIChtX3JhbmdlKQogICAgICAgICByZXR1cm4gbV9yYW5nZS0+dGV4
dCgpOwogICAgIHJldHVybiBtX3RleHQ7CiB9CiAKLVN0cmluZyBEYXRhT2JqZWN0R3RrOjptYXJr
dXAoKQorU3RyaW5nIERhdGFPYmplY3RHdGs6Om1hcmt1cCgpIGNvbnN0CiB7CiAgICAgaWYgKG1f
cmFuZ2UpCiAgICAgICAgIHJldHVybiBjcmVhdGVNYXJrdXAobV9yYW5nZS5nZXQoKSwgMCwgQW5u
b3RhdGVGb3JJbnRlcmNoYW5nZSwgZmFsc2UsIEFic29sdXRlVVJMcyk7CkBAIC0xMzIsNyArMTMy
LDcgQEAgdm9pZCBEYXRhT2JqZWN0R3RrOjpjbGVhck1hcmt1cCgpCiAgICAgbV9tYXJrdXAgPSAi
IjsKIH0KIAotU3RyaW5nIERhdGFPYmplY3RHdGs6OnVybExhYmVsKCkKK1N0cmluZyBEYXRhT2Jq
ZWN0R3RrOjp1cmxMYWJlbCgpIGNvbnN0CiB7CiAgICAgaWYgKGhhc1RleHQoKSkKICAgICAgICAg
cmV0dXJuIHRleHQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9E
YXRhT2JqZWN0R3RrLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRGF0YU9iamVjdEd0
ay5oCmluZGV4IDU0MjNmODEuLmUyN2JjOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9EYXRhT2JqZWN0R3RrLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL0RhdGFPYmplY3RHdGsuaApAQCAtMzYsMzEgKzM2LDI5IEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBEYXRhT2JqZWN0R3RrKCkpOwogICAgIH0KIAotICAgIGNvbnN0
IEtVUkwmIHVybCgpIHsgcmV0dXJuIG1fdXJsOyB9Ci0gICAgY29uc3QgU3RyaW5nJiB1cmlMaXN0
KCkgeyByZXR1cm4gbV91cmlMaXN0OyB9Ci0gICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIGZpbGVu
YW1lcygpIHsgcmV0dXJuIG1fZmlsZW5hbWVzOyB9Ci0gICAgR2RrUGl4YnVmKiBpbWFnZSgpIHsg
cmV0dXJuIG1faW1hZ2UuZ2V0KCk7IH0KKyAgICBjb25zdCBLVVJMJiB1cmwoKSBjb25zdCB7IHJl
dHVybiBtX3VybDsgfQorICAgIGNvbnN0IFN0cmluZyYgdXJpTGlzdCgpIGNvbnN0IHsgcmV0dXJu
IG1fdXJpTGlzdDsgfQorICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlbmFtZXMoKSBjb25z
dCB7IHJldHVybiBtX2ZpbGVuYW1lczsgfQorICAgIEdka1BpeGJ1ZiogaW1hZ2UoKSBjb25zdCB7
IHJldHVybiBtX2ltYWdlLmdldCgpOyB9CiAgICAgdm9pZCBzZXRSYW5nZShQYXNzUmVmUHRyPFJh
bmdlPiBuZXdSYW5nZSkgeyBtX3JhbmdlID0gbmV3UmFuZ2U7IH0KICAgICB2b2lkIHNldEltYWdl
KEdka1BpeGJ1ZiogbmV3SW1hZ2UpIHsgbV9pbWFnZSA9IG5ld0ltYWdlOyB9Ci0gICAgdm9pZCBz
ZXREcmFnQ29udGV4dChHZGtEcmFnQ29udGV4dCogbmV3RHJhZ0NvbnRleHQpIHsgbV9kcmFnQ29u
dGV4dCA9IG5ld0RyYWdDb250ZXh0OyB9CiAgICAgdm9pZCBzZXRVUkwoY29uc3QgS1VSTCYsIGNv
bnN0IFN0cmluZyYpOwotICAgIGJvb2wgaGFzVGV4dCgpIHsgcmV0dXJuIG1fcmFuZ2UgfHwgIW1f
dGV4dC5pc0VtcHR5KCk7IH0KLSAgICBib29sIGhhc01hcmt1cCgpIHsgcmV0dXJuIG1fcmFuZ2Ug
fHwgIW1fbWFya3VwLmlzRW1wdHkoKTsgfQotICAgIGJvb2wgaGFzVVJJTGlzdCgpIHsgcmV0dXJu
ICFtX3VyaUxpc3QuaXNFbXB0eSgpOyB9Ci0gICAgYm9vbCBoYXNVUkwoKSB7IHJldHVybiAhbV91
cmwuaXNFbXB0eSgpICYmIG1fdXJsLmlzVmFsaWQoKTsgfQotICAgIGJvb2wgaGFzRmlsZW5hbWVz
KCkgeyByZXR1cm4gIW1fZmlsZW5hbWVzLmlzRW1wdHkoKTsgfQotICAgIGJvb2wgaGFzSW1hZ2Uo
KSB7IHJldHVybiBtX2ltYWdlOyB9CisgICAgYm9vbCBoYXNUZXh0KCkgY29uc3QgeyByZXR1cm4g
bV9yYW5nZSB8fCAhbV90ZXh0LmlzRW1wdHkoKTsgfQorICAgIGJvb2wgaGFzTWFya3VwKCkgY29u
c3QgeyByZXR1cm4gbV9yYW5nZSB8fCAhbV9tYXJrdXAuaXNFbXB0eSgpOyB9CisgICAgYm9vbCBo
YXNVUklMaXN0KCkgY29uc3QgeyByZXR1cm4gIW1fdXJpTGlzdC5pc0VtcHR5KCk7IH0KKyAgICBi
b29sIGhhc1VSTCgpIGNvbnN0IHsgcmV0dXJuICFtX3VybC5pc0VtcHR5KCkgJiYgbV91cmwuaXNW
YWxpZCgpOyB9CisgICAgYm9vbCBoYXNGaWxlbmFtZXMoKSBjb25zdCB7IHJldHVybiAhbV9maWxl
bmFtZXMuaXNFbXB0eSgpOyB9CisgICAgYm9vbCBoYXNJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1f
aW1hZ2U7IH0KICAgICB2b2lkIGNsZWFyVVJJTGlzdCgpIHsgbV91cmlMaXN0ID0gIiI7IH0KICAg
ICB2b2lkIGNsZWFyVVJMKCkgeyBtX3VybCA9IEtVUkwoKTsgfQogICAgIHZvaWQgY2xlYXJJbWFn
ZSgpIHsgbV9pbWFnZSA9IDA7IH0KLSAgICBHZGtEcmFnQ29udGV4dCogZHJhZ0NvbnRleHQoKSB7
IHJldHVybiBtX2RyYWdDb250ZXh0LmdldCgpOyB9CiAKLSAgICBTdHJpbmcgdGV4dCgpOwotICAg
IFN0cmluZyBtYXJrdXAoKTsKKyAgICBTdHJpbmcgdGV4dCgpIGNvbnN0OworICAgIFN0cmluZyBt
YXJrdXAoKSBjb25zdDsKICAgICB2b2lkIHNldFRleHQoY29uc3QgU3RyaW5nJik7CiAgICAgdm9p
ZCBzZXRNYXJrdXAoY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCBzZXRVUklMaXN0KGNvbnN0IFN0
cmluZyYpOwotICAgIFN0cmluZyB1cmxMYWJlbCgpOworICAgIFN0cmluZyB1cmxMYWJlbCgpIGNv
bnN0OwogICAgIHZvaWQgY2xlYXIoKTsKICAgICB2b2lkIGNsZWFyVGV4dCgpOwogICAgIHZvaWQg
Y2xlYXJNYXJrdXAoKTsKQEAgLTc0LDcgKzcyLDYgQEAgcHJpdmF0ZToKICAgICBTdHJpbmcgbV91
cmlMaXN0OwogICAgIFZlY3RvcjxTdHJpbmc+IG1fZmlsZW5hbWVzOwogICAgIEdSZWZQdHI8R2Rr
UGl4YnVmPiBtX2ltYWdlOwotICAgIEdSZWZQdHI8R2RrRHJhZ0NvbnRleHQ+IG1fZHJhZ0NvbnRl
eHQ7CiAgICAgUmVmUHRyPFJhbmdlPiBtX3JhbmdlOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IGUxYjE3
N2QuLjA0YjA1NGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MyBAQAorMjAxMS0wNi0zMCAgQ2Fy
bG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW0dUS10gSW1wbGVtZW50IGRyYWcgYW5k
IGRyb3Agc3VwcG9ydCBpbiBXZWJLaXQyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD02MzcwNgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06IEFkZCBu
ZXcgZmlsZXMgdG8gY29tcGlsYXRpb24uCisgICAgICAgICogU2hhcmVkL2d0ay9Bcmd1bWVudENv
ZGVyc0d0ay5jcHA6IEFkZGVkLgorICAgICAgICAoQ29yZUlQQzo6ZW5jb2RlSW1hZ2UpOiBFbmNv
ZGUgYSBHZGtQaXhidWYuCisgICAgICAgIChDb3JlSVBDOjpkZWNvZGVJbWFnZSk6IERlY29kZSBh
IEdka1BpeGJ1Zi4KKyAgICAgICAgKENvcmVJUEM6OmVuY29kZURhdGFPYmplY3QpOiBFbmNvZGUg
YSBEYXRhT2JqZWN0R3RrLgorICAgICAgICAoQ29yZUlQQzo6ZGVjb2RlRGF0YU9iamVjdCk6IERl
Y29kZSBhIERhdGFPYmplY3RHdGsuCisgICAgICAgIChDb3JlSVBDOjo6OmVuY29kZSk6IEVuY29k
ZSBEcmFnRGF0YS4KKyAgICAgICAgKENvcmVJUEM6Ojo6ZGVjb2RlKTogRGVjb2RlIERyYWdEYXRh
LgorICAgICAgICAqIFNoYXJlZC9ndGsvQXJndW1lbnRDb2RlcnNHdGsuaDoKKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlBh
Z2VDbGllbnRJbXBsOjpzdGFydERyYWcpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1Bh
Z2VDbGllbnRJbXBsLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmll
d0Jhc2UuY3BwOgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2Jhc2VfaW5pdCk6IFNldCB0aGUg
dmlldyBhcyBhIHBvdGVudGlhbCBkcm9wCisgICAgICAgIGRlc3RpbmF0aW9uLgorICAgICAgICAo
d2Via2l0V2ViVmlld0Jhc2VEcmFnRGF0YUdldCk6CisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFz
ZURyYWdFbmQpOgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VEcmFnRGF0YVJlY2VpdmVkKToK
KyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlRHJhZ0VudGVyKToKKyAgICAgICAgKHdlYmtpdFdl
YlZpZXdCYXNlRHJhZ01vdGlvbik6CisgICAgICAgIChkb0RyYWdMZWF2ZUxhdGVyKToKKyAgICAg
ICAgKHdlYmtpdFdlYlZpZXdCYXNlRHJhZ0xlYXZlKToKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdC
YXNlRHJhZ0Ryb3ApOgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2Jhc2VfY2xhc3NfaW5pdCk6
IE92ZXJyaWRlIEd0a1dpZGdldCBkcmFnIGFuZAorICAgICAgICBkcm9wIG1ldGhvZHMuCisgICAg
ICAgICh3ZWJraXRXZWJWaWV3QmFzZVN0YXJ0RHJhZyk6IENhbGxzIGd0a19kcmFnX2JlZ2luKCkg
dG8gc3RhcnQgYQorICAgICAgICBkcmFnIG9wZXJhdGlvbi4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaDogQWRkCisgICAgICAgIHdlYmtpdFdl
YlZpZXdCYXNlU3RhcnREcmFnKCkuCisgICAgICAgICogVUlQcm9jZXNzL1BhZ2VDbGllbnQuaDog
QWRkIHN0YXJ0RHJhZygpLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlv
bik6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW46CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJEcmFnQ2xpZW50LmNwcDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L2d0ay9XZWJEcmFnQ2xpZW50R3RrLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJL
aXQ6OmNvbnZlcnRDYWlyb1N1cmZhY2VUb1NoYXJlYWJsZUJpdG1hcCk6CisgICAgICAgIChXZWJL
aXQ6OldlYkRyYWdDbGllbnQ6OnN0YXJ0RHJhZyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpwZXJmb3JtRHJhZ0Nv
bnRyb2xsZXJBY3Rpb24pOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmg6
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW46CisKIDIw
MTEtMDYtMjkgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IERhbiBCZXJuc3RlaW4uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtl
ZmlsZS5hbSBiL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCmluZGV4IDQzYWJkZTMuLmU3
ZjY0YjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCkBAIC0xOTMsNiArMTkzLDggQEAgbGlid2Via2l0
Mmd0a19AV0VCS0lUR1RLX0FQSV9NQUpPUl9WRVJTSU9OQF9AV0VCS0lUR1RLX0FQSV9NSU5PUl9W
RVJTSU9OQF9sYV9TT1UKIAlTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRm9udFNtb290aGluZ0xldmVs
LmggXAogCVNvdXJjZS9XZWJLaXQyL1NoYXJlZC9jYWlyby9MYXllclRyZWVDb250ZXh0Q2Fpcm8u
Y3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvY2Fpcm8vU2hhcmVhYmxlQml0bWFwQ2Fpcm8u
Y3BwIFwKKwlTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL0FyZ3VtZW50Q29kZXJzR3RrLmggXAor
CVNvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvQXJndW1lbnRDb2RlcnNHdGsuY3BwIFwKIAlTb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL05hdGl2ZVdlYktleWJvYXJkRXZlbnRHdGsuY3BwIFwKIAlT
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL05hdGl2ZVdlYk1vdXNlRXZlbnRHdGsuY3BwIFwKIAlT
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL05hdGl2ZVdlYldoZWVsRXZlbnRHdGsuY3BwIFwKQEAg
LTY0NCw2ICs2NDYsNyBAQCBsaWJ3ZWJraXQyZ3RrX0BXRUJLSVRHVEtfQVBJX01BSk9SX1ZFUlNJ
T05AX0BXRUJLSVRHVEtfQVBJX01JTk9SX1ZFUlNJT05AX2xhX1NPVQogCVNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvUmVzb3VyY2VDYWNoZS9XZWJSZXNvdXJjZUNhY2hlTWFuYWdlci5oIFwKIAlT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1Jlc291cmNlQ2FjaGUvV2ViUmVzb3VyY2VDYWNoZU1h
bmFnZXIuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0
ay9XZWJDb250ZXh0TWVudUNsaWVudEd0ay5jcHAgXAorCVNvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkRyYWdDbGllbnRHdGsuY3BwIFwKIAlTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJFZGl0b3JDbGllbnRHdGsuY3Bw
IFwKIAlTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJFcnJv
cnNHdGsuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0
ay9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0LmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvU2hhcmVkL2d0ay9Bcmd1bWVudENvZGVyc0d0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvZ3RrL0FyZ3VtZW50Q29kZXJzR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5lZWVjYjg3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVk
L2d0ay9Bcmd1bWVudENvZGVyc0d0ay5jcHAKQEAgLTAsMCArMSwyMTkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkFyZ3VtZW50Q29kZXJzR3RrLmgiCisKKyNpbmNsdWRlICJTaGFyZWFibGVC
aXRtYXAuaCIKKyNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlIDxX
ZWJDb3JlL0RhdGFPYmplY3RHdGsuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0RyYWdEYXRhLmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0d0
a1ZlcnNpb25pbmcuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtQ29udGV4dENhaXJvLmg+
CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKwor
bmFtZXNwYWNlIENvcmVJUEMgeworCitzdGF0aWMgdm9pZCBlbmNvZGVJbWFnZShBcmd1bWVudEVu
Y29kZXIqIGVuY29kZXIsIGNvbnN0IEdka1BpeGJ1ZiogcGl4YnVmKQoreworICAgIEludFNpemUg
aW1hZ2VTaXplKGdka19waXhidWZfZ2V0X3dpZHRoKHBpeGJ1ZiksIGdka19waXhidWZfZ2V0X2hl
aWdodChwaXhidWYpKTsKKyAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSBTaGFy
ZWFibGVCaXRtYXA6OmNyZWF0ZVNoYXJlYWJsZShpbWFnZVNpemUsIFNoYXJlYWJsZUJpdG1hcDo6
U3VwcG9ydHNBbHBoYSk7CisgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gZ3JhcGhpY3NDb250
ZXh0ID0gYml0bWFwLT5jcmVhdGVHcmFwaGljc0NvbnRleHQoKTsKKworICAgIGNhaXJvX3QqIGNy
ID0gZ3JhcGhpY3NDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKTsKKyAgICBnZGtfY2Fp
cm9fc2V0X3NvdXJjZV9waXhidWYoY3IsIHBpeGJ1ZiwgMCwgMCk7CisgICAgY2Fpcm9fcGFpbnQo
Y3IpOworCisgICAgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgaGFuZGxlOworICAgIGJpdG1hcC0+
Y3JlYXRlSGFuZGxlKGhhbmRsZSk7CisKKyAgICBlbmNvZGVyLT5lbmNvZGUoaGFuZGxlKTsKK30K
Kworc3RhdGljIGJvb2wgZGVjb2RlSW1hZ2UoQXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBHUmVm
UHRyPEdka1BpeGJ1Zj4mIHBpeGJ1ZikKK3sKKyAgICBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBo
YW5kbGU7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoaGFuZGxlKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0bWFwID0gU2hhcmVhYmxl
Qml0bWFwOjpjcmVhdGUoaGFuZGxlKTsKKyAgICBpZiAoIWJpdG1hcCkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IGJpdG1hcC0+Y3JlYXRlSW1hZ2Uo
KTsKKyAgICBpZiAoIWltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBjYWlyb19z
dXJmYWNlX3QqIHN1cmZhY2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsK
KyAgICBpZiAoIXN1cmZhY2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHBpeGJ1ZiA9
IGFkb3B0R1JlZihnZGtfcGl4YnVmX2dldF9mcm9tX3N1cmZhY2Uoc3VyZmFjZSwgMCwgMCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhaXJvX2lt
YWdlX3N1cmZhY2VfZ2V0X3dpZHRoKHN1cmZhY2UpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0
KHN1cmZhY2UpKSk7CisgICAgaWYgKCFwaXhidWYpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZCBlbmNvZGVEYXRhT2JqZWN0KEFyZ3Vt
ZW50RW5jb2RlciogZW5jb2RlciwgY29uc3QgRGF0YU9iamVjdEd0ayogZGF0YU9iamVjdCkKK3sK
KyAgICBib29sIGhhc1RleHQgPSBkYXRhT2JqZWN0LT5oYXNUZXh0KCk7CisgICAgZW5jb2Rlci0+
ZW5jb2RlKGhhc1RleHQpOworICAgIGlmIChoYXNUZXh0KQorICAgICAgICBlbmNvZGVyLT5lbmNv
ZGUoZGF0YU9iamVjdC0+dGV4dCgpKTsKKworICAgIGJvb2wgaGFzTWFya3VwID0gZGF0YU9iamVj
dC0+aGFzTWFya3VwKCk7CisgICAgZW5jb2Rlci0+ZW5jb2RlKGhhc01hcmt1cCk7CisgICAgaWYg
KGhhc01hcmt1cCkKKyAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKGRhdGFPYmplY3QtPm1hcmt1cCgp
KTsKKworICAgIGJvb2wgaGFzVVJMID0gZGF0YU9iamVjdC0+aGFzVVJMKCk7CisgICAgZW5jb2Rl
ci0+ZW5jb2RlKGhhc1VSTCk7CisgICAgaWYgKGhhc1VSTCkKKyAgICAgICAgZW5jb2Rlci0+ZW5j
b2RlKGRhdGFPYmplY3QtPnVybCgpLnN0cmluZygpKTsKKworICAgIGJvb2wgaGFzVVJJTGlzdCA9
IGRhdGFPYmplY3QtPmhhc1VSSUxpc3QoKTsKKyAgICBlbmNvZGVyLT5lbmNvZGUoaGFzVVJJTGlz
dCk7CisgICAgaWYgKGhhc1VSSUxpc3QpCisgICAgICAgIGVuY29kZXItPmVuY29kZShkYXRhT2Jq
ZWN0LT51cmlMaXN0KCkpOworCisgICAgYm9vbCBoYXNJbWFnZSA9IGRhdGFPYmplY3QtPmhhc0lt
YWdlKCk7CisgICAgZW5jb2Rlci0+ZW5jb2RlKGhhc0ltYWdlKTsKKyAgICBpZiAoaGFzSW1hZ2Up
CisgICAgICAgIGVuY29kZUltYWdlKGVuY29kZXIsIGRhdGFPYmplY3QtPmltYWdlKCkpOworfQor
CitzdGF0aWMgYm9vbCBkZWNvZGVEYXRhT2JqZWN0KEFyZ3VtZW50RGVjb2RlciogZGVjb2Rlciwg
UGFzc1JlZlB0cjxEYXRhT2JqZWN0R3RrPiYgZGF0YU9iamVjdCkKK3sKKyAgICBSZWZQdHI8RGF0
YU9iamVjdEd0az4gZGF0YSA9IERhdGFPYmplY3RHdGs6OmNyZWF0ZSgpOworCisgICAgYm9vbCBo
YXNUZXh0OworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGhhc1RleHQpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgaWYgKGhhc1RleHQpIHsKKyAgICAgICAgU3RyaW5nIHRleHQ7CisgICAg
ICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKHRleHQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICBkYXRhLT5zZXRUZXh0KHRleHQpOworICAgIH0KKworICAgIGJvb2wgaGFzTWFy
a3VwOworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGhhc01hcmt1cCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBpZiAoaGFzTWFya3VwKSB7CisgICAgICAgIFN0cmluZyBtYXJrdXA7Cisg
ICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKG1hcmt1cCkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIGRhdGEtPnNldE1hcmt1cChtYXJrdXApOworICAgIH0KKworICAgIGJv
b2wgaGFzVVJMOworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGhhc1VSTCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBpZiAoaGFzVVJMKSB7CisgICAgICAgIFN0cmluZyB1cmw7CisgICAg
ICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKHVybCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIGRhdGEtPnNldFVSTChLVVJMKEtVUkwoKSwgdXJsKSwgU3RyaW5nKCkpOworICAg
IH0KKworICAgIGJvb2wgaGFzVVJJTGlzdDsKKyAgICBpZiAoIWRlY29kZXItPmRlY29kZShoYXNV
UklMaXN0KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChoYXNVUklMaXN0KSB7Cisg
ICAgICAgIFN0cmluZyB1cmlMaXN0OworICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZSh1cmlM
aXN0KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZGF0YS0+c2V0VVJJTGlz
dCh1cmlMaXN0KTsKKyAgICB9CisKKyAgICBib29sIGhhc0ltYWdlOworICAgIGlmICghZGVjb2Rl
ci0+ZGVjb2RlKGhhc0ltYWdlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChoYXNJ
bWFnZSkgeworICAgICAgICBHUmVmUHRyPEdka1BpeGJ1Zj4gaW1hZ2U7CisgICAgICAgIGlmICgh
ZGVjb2RlSW1hZ2UoZGVjb2RlciwgaW1hZ2UpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICBkYXRhLT5zZXRJbWFnZShpbWFnZS5nZXQoKSk7CisgICAgfQorCisgICAgZGF0YU9i
amVjdCA9IGRhdGE7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBBcmd1bWVudENvZGVy
PERyYWdEYXRhPjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciogZW5jb2RlciwgY29uc3QgRHJhZ0Rh
dGEmIGRyYWdEYXRhKQoreworICAgIGVuY29kZXItPmVuY29kZShkcmFnRGF0YS5jbGllbnRQb3Np
dGlvbigpKTsKKyAgICBlbmNvZGVyLT5lbmNvZGUoZHJhZ0RhdGEuZ2xvYmFsUG9zaXRpb24oKSk7
CisgICAgZW5jb2Rlci0+ZW5jb2RlKHN0YXRpY19jYXN0PHVpbnQ2NF90PihkcmFnRGF0YS5kcmFn
Z2luZ1NvdXJjZU9wZXJhdGlvbk1hc2soKSkpOworICAgIGVuY29kZXItPmVuY29kZShzdGF0aWNf
Y2FzdDx1aW50NjRfdD4oZHJhZ0RhdGEuZmxhZ3MoKSkpOworCisgICAgRGF0YU9iamVjdEd0ayog
cGxhdGZvcm1EYXRhID0gZHJhZ0RhdGEucGxhdGZvcm1EYXRhKCk7CisgICAgZW5jb2Rlci0+ZW5j
b2RlKHN0YXRpY19jYXN0PGJvb2w+KHBsYXRmb3JtRGF0YSkpOworICAgIGlmIChwbGF0Zm9ybURh
dGEpCisgICAgICAgIGVuY29kZURhdGFPYmplY3QoZW5jb2RlciwgcGxhdGZvcm1EYXRhKTsKK30K
KworYm9vbCBBcmd1bWVudENvZGVyPERyYWdEYXRhPjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2Rlciog
ZGVjb2RlciwgRHJhZ0RhdGEmIGRyYWdEYXRhKQoreworICAgIEludFBvaW50IGNsaWVudFBvc2l0
aW9uOworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGNsaWVudFBvc2l0aW9uKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgSW50UG9pbnQgZ2xvYmFsUG9zaXRpb247CisgICAgaWYgKCFk
ZWNvZGVyLT5kZWNvZGUoZ2xvYmFsUG9zaXRpb24pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICB1aW50NjRfdCBzb3VyY2VPcGVyYXRpb25NYXNrOworICAgIGlmICghZGVjb2Rlci0+ZGVj
b2RlKHNvdXJjZU9wZXJhdGlvbk1hc2spKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB1
aW50NjRfdCBmbGFnczsKKyAgICBpZiAoIWRlY29kZXItPmRlY29kZShmbGFncykpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIGJvb2wgaGFzUGxhdGZvcm1EYXRhOworICAgIGlmICghZGVj
b2Rlci0+ZGVjb2RlKGhhc1BsYXRmb3JtRGF0YSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIFJlZlB0cjxEYXRhT2JqZWN0R3RrPiBwbGF0Zm9ybURhdGE7CisgICAgaWYgKGhhc1BsYXRm
b3JtRGF0YSkgeworICAgICAgICBpZiAoIWRlY29kZURhdGFPYmplY3QoZGVjb2RlciwgcGxhdGZv
cm1EYXRhKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBkcmFnRGF0
YSA9IERyYWdEYXRhKHBsYXRmb3JtRGF0YS5yZWxlYXNlKCkubGVha1JlZigpLCBjbGllbnRQb3Np
dGlvbiwgZ2xvYmFsUG9zaXRpb24sIHN0YXRpY19jYXN0PERyYWdPcGVyYXRpb24+KHNvdXJjZU9w
ZXJhdGlvbk1hc2spLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8RHJhZ0Fw
cGxpY2F0aW9uRmxhZ3M+KGZsYWdzKSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9Bcmd1bWVudENvZGVyc0d0ay5oIGIv
U291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9Bcmd1bWVudENvZGVyc0d0ay5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyZjQ2ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL0FyZ3VtZW50Q29kZXJzR3RrLmgKQEAgLTAsMCArMSw0NSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIEFyZ3VtZW50Q29kZXJzR3RrX2gKKyNkZWZpbmUgQXJndW1lbnRDb2RlcnNHdGtfaAorCisj
aW5jbHVkZSAiQXJndW1lbnRDb2RlcnMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3Mg
RGF0YU9iamVjdEd0azsKK2NsYXNzIERyYWdEYXRhOworfQorCituYW1lc3BhY2UgQ29yZUlQQyB7
CisKK3RlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6RHJhZ0RhdGE+IHsK
KyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyKiwgY29uc3QgV2ViQ29yZTo6
RHJhZ0RhdGEmKTsKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiwgV2Vi
Q29yZTo6RHJhZ0RhdGEmKTsKK307CisKK30gLy8gbmFtZXNwYWNlIENvcmVJUEMKKworI2VuZGlm
IC8vIEFyZ3VtZW50Q29kZXJzR3RrX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmNwcAppbmRleCBhYjU2NDZmLi41YTg5N2UyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwu
Y3BwCkBAIC0yODQsNCArMjg0LDkgQEAgdm9pZCBQYWdlQ2xpZW50SW1wbDo6Y291bnRTdHJpbmdN
YXRjaGVzSW5DdXN0b21SZXByZXNlbnRhdGlvbihjb25zdCBTdHJpbmcmLCBGaW4KICAgICBub3RJ
bXBsZW1lbnRlZCgpOwogfQogCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpzdGFydERyYWcoY29uc3Qg
V2ViQ29yZTo6RHJhZ0RhdGEmIGRyYWdEYXRhLCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4g
ZHJhZ0ltYWdlKQoreworICAgIHdlYmtpdFdlYlZpZXdCYXNlU3RhcnREcmFnKFdFQktJVF9XRUJf
VklFV19CQVNFKG1fdmlld1dpZGdldCksIGRyYWdEYXRhLCBkcmFnSW1hZ2UpOworfQorCiB9IC8v
IG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9QYWdlQ2xpZW50SW1wbC5oCmluZGV4IGVhNTQ4NDMuLmFjMzE3OGYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmgKKysrIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuaApAQCAtODksNiAr
ODksNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBnZXRFZGl0b3JDb21tYW5kc0Zvcktl
eUV2ZW50KGNvbnN0IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQmLCBWZWN0b3I8V1RGOjpTdHJpbmc+
Jik7CiAgICAgdmlydHVhbCB2b2lkIGZpbmRTdHJpbmdJbkN1c3RvbVJlcHJlc2VudGF0aW9uKGNv
bnN0IFN0cmluZyYsIEZpbmRPcHRpb25zLCB1bnNpZ25lZCk7CiAgICAgdmlydHVhbCB2b2lkIGNv
dW50U3RyaW5nTWF0Y2hlc0luQ3VzdG9tUmVwcmVzZW50YXRpb24oY29uc3QgU3RyaW5nJiwgRmlu
ZE9wdGlvbnMsIHVuc2lnbmVkKTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnREcmFnKGNvbnN0IFdl
YkNvcmU6OkRyYWdEYXRhJiwgUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGRyYWdJbWFnZSk7
CiAKICNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCiAgICAgdmlydHVhbCB2b2lkIHBh
Z2VEaWRFbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmcoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcAppbmRleCA3ZmFm
ODQyLi4xZTAxOTBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwCkBAIC0yOCwxNSArMjgsMjEgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJLaXRXZWJWaWV3QmFzZS5oIgogCisjaW5jbHVkZSAi
Q2xpcGJvYXJkR3RrLmgiCisjaW5jbHVkZSAiQ2xpcGJvYXJkVXRpbGl0aWVzR3RrLmgiCisjaW5j
bHVkZSAiRGF0YU9iamVjdEd0ay5oIgorI2luY2x1ZGUgIkRyYWdEYXRhLmgiCiAjaW5jbHVkZSAi
RHJhd2luZ0FyZWFQcm94eUltcGwuaCIKICNpbmNsdWRlICJHT3duUHRyR3RrLmgiCiAjaW5jbHVk
ZSAiR3RrQ2xpY2tDb3VudGVyLmgiCisjaW5jbHVkZSAiR3RrVXRpbGl0aWVzLmgiCiAjaW5jbHVk
ZSAiR3RrVmVyc2lvbmluZy5oIgogI2luY2x1ZGUgIk5hdGl2ZVdlYktleWJvYXJkRXZlbnQuaCIK
ICNpbmNsdWRlICJOYXRpdmVXZWJNb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiTmF0aXZlV2ViV2hl
ZWxFdmVudC5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGFnZUNs
aWVudEltcGwuaCIKKyNpbmNsdWRlICJQYXN0ZWJvYXJkSGVscGVyLmgiCiAjaW5jbHVkZSAiUmVm
UHRyQ2Fpcm8uaCIKICNpbmNsdWRlICJSZWdpb24uaCIKICNpbmNsdWRlICJXZWJDb250ZXh0Lmgi
CkBAIC00OSw2ICs1NSwxNSBAQAogdXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKIHVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwogCit0eXBlZGVmIHN0cnVjdCBEcm9wQ29udGV4dF8geworICAgIEd0a1dp
ZGdldCogd2lkZ2V0OworICAgIEdSZWZQdHI8R2RrRHJhZ0NvbnRleHQ+IGdka0NvbnRleHQ7Cisg
ICAgUmVmUHRyPERhdGFPYmplY3RHdGs+IGRhdGFPYmplY3Q7CisgICAgSW50UG9pbnQgbGFzdE1v
dGlvblBvc2l0aW9uOworICAgIHNpemVfdCBwZW5kaW5nRGF0YVJlcXVlc3RzOworICAgIGJvb2wg
ZHJvcEhhcHBlbmVkOworfSBEcm9wQ29udGV4dDsKKwogc3RydWN0IF9XZWJLaXRXZWJWaWV3QmFz
ZVByaXZhdGUgewogICAgIE93blB0cjxQYWdlQ2xpZW50SW1wbD4gcGFnZUNsaWVudDsKICAgICBS
ZWZQdHI8V2ViUGFnZVByb3h5PiBwYWdlUHJveHk7CkBAIC0xMzAsMTEgKzE0NSwxNiBAQCBzdGF0
aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfYmFzZV9pbml0KFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJr
aXRXZWJWaWV3QmFzZSkKIAogICAgIHByaXYtPmlzUGFnZUFjdGl2ZSA9IFRSVUU7CiAKLSAgICBn
dGtfd2lkZ2V0X3NldF9kb3VibGVfYnVmZmVyZWQoR1RLX1dJREdFVCh3ZWJraXRXZWJWaWV3QmFz
ZSksIEZBTFNFKTsKLSAgICBndGtfd2lkZ2V0X3NldF9jYW5fZm9jdXMoR1RLX1dJREdFVCh3ZWJr
aXRXZWJWaWV3QmFzZSksIFRSVUUpOworICAgIEd0a1dpZGdldCogdmlld1dpZGdldCA9IEdUS19X
SURHRVQod2Via2l0V2ViVmlld0Jhc2UpOworICAgIGd0a193aWRnZXRfc2V0X2RvdWJsZV9idWZm
ZXJlZCh2aWV3V2lkZ2V0LCBGQUxTRSk7CisgICAgZ3RrX3dpZGdldF9zZXRfY2FuX2ZvY3VzKHZp
ZXdXaWRnZXQsIFRSVUUpOwogICAgIHByaXYtPmltQ29udGV4dCA9IGd0a19pbV9tdWx0aWNvbnRl
eHRfbmV3KCk7CiAKLSAgICBwcml2LT5wYWdlQ2xpZW50ID0gUGFnZUNsaWVudEltcGw6OmNyZWF0
ZShHVEtfV0lER0VUKHdlYmtpdFdlYlZpZXdCYXNlKSk7CisgICAgcHJpdi0+cGFnZUNsaWVudCA9
IFBhZ2VDbGllbnRJbXBsOjpjcmVhdGUodmlld1dpZGdldCk7CisKKyAgICBndGtfZHJhZ19kZXN0
X3NldCh2aWV3V2lkZ2V0LCBzdGF0aWNfY2FzdDxHdGtEZXN0RGVmYXVsdHM+KDApLCAwLCAwLAor
ICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PEdka0RyYWdBY3Rpb24+KEdES19BQ1RJ
T05fQ09QWSB8IEdES19BQ1RJT05fTU9WRSB8IEdES19BQ1RJT05fTElOSyB8IEdES19BQ1RJT05f
UFJJVkFURSkpOworICAgIGd0a19kcmFnX2Rlc3Rfc2V0X3RhcmdldF9saXN0KHZpZXdXaWRnZXQs
IFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCktPnRhcmdldExpc3Qo
KSk7CiB9CiAKIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRXZWJWaWV3QmFzZURyYXcoR3RrV2lkZ2V0
KiB3aWRnZXQsIGNhaXJvX3QqIGNyKQpAQCAtMjgxLDYgKzMwMSwxNTAgQEAgc3RhdGljIGdib29s
ZWFuIHdlYmtpdFdlYlZpZXdCYXNlUXVlcnlUb29sdGlwKEd0a1dpZGdldCogd2lkZ2V0LCBnaW50
IHgsIGdpbnQgeSwKICAgICByZXR1cm4gVFJVRTsKIH0KIAorc3RhdGljIHZvaWQgd2Via2l0V2Vi
Vmlld0Jhc2VEcmFnRGF0YUdldChHdGtXaWRnZXQqIHdpZGdldCwgR2RrRHJhZ0NvbnRleHQqIGNv
bnRleHQsIEd0a1NlbGVjdGlvbkRhdGEqIHNlbGVjdGlvbkRhdGEsIGd1aW50IGluZm8sIGd1aW50
IHRpbWUpCit7CisgICAgRGF0YU9iamVjdEd0ayogZGF0YU9iamVjdCA9IHN0YXRpY19jYXN0PERh
dGFPYmplY3RHdGsqPihnX29iamVjdF9nZXRfZGF0YShHX09CSkVDVChjb250ZXh0KSwgImRyYWct
ZGF0YS1vYmplY3QiKSk7CisgICAgaWYgKCFkYXRhT2JqZWN0KQorICAgICAgICByZXR1cm47CisK
KyAgICBQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpLT5maWxsU2Vs
ZWN0aW9uRGF0YShzZWxlY3Rpb25EYXRhLCBpbmZvLCBkYXRhT2JqZWN0KTsKK30KKworc3RhdGlj
IHZvaWQgd2Via2l0V2ViVmlld0Jhc2VEcmFnRW5kKEd0a1dpZGdldCogd2lkZ2V0LCBHZGtEcmFn
Q29udGV4dCogY29udGV4dCkKK3sKKyAgICBEYXRhT2JqZWN0R3RrKiBkYXRhT2JqZWN0ID0gc3Rh
dGljX2Nhc3Q8RGF0YU9iamVjdEd0ayo+KGdfb2JqZWN0X2dldF9kYXRhKEdfT0JKRUNUKGNvbnRl
eHQpLCAiZHJhZy1kYXRhLW9iamVjdCIpKTsKKyAgICBpZiAoIWRhdGFPYmplY3QpCisgICAgICAg
IHJldHVybjsKKworICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKGNvbnRleHQpLCAiZHJh
Zy1kYXRhLW9iamVjdCIsIDApOworICAgIGRlbGV0ZSBkYXRhT2JqZWN0OworCisgICAgR2RrRGV2
aWNlKiBkZXZpY2UgPSBnZGtfZHJhZ19jb250ZXh0X2dldF9kZXZpY2UoY29udGV4dCk7CisgICAg
aW50IHgsIHk7CisgICAgZ2RrX2RldmljZV9nZXRfd2luZG93X2F0X3Bvc2l0aW9uKGRldmljZSwg
JngsICZ5KTsKKyAgICBpbnQgeFJvb3QsIHlSb290OworICAgIGdka19kZXZpY2VfZ2V0X3Bvc2l0
aW9uKGRldmljZSwgMCwgJnhSb290LCAmeVJvb3QpOworICAgIFdlYktpdFdlYlZpZXdCYXNlKiB3
ZWJWaWV3QmFzZSA9IFdFQktJVF9XRUJfVklFV19CQVNFKHdpZGdldCk7CisgICAgd2ViVmlld0Jh
c2UtPnByaXYtPnBhZ2VQcm94eS0+ZHJhZ0VuZGVkKEludFBvaW50KHgsIHkpLCBJbnRQb2ludCh4
Um9vdCwgeVJvb3QpLCBnZGtEcmFnQWN0aW9uVG9EcmFnT3BlcmF0aW9uKGdka19kcmFnX2NvbnRl
eHRfZ2V0X3NlbGVjdGVkX2FjdGlvbihjb250ZXh0KSkpOworfQorCitzdGF0aWMgdm9pZCB3ZWJr
aXRXZWJWaWV3QmFzZURyYWdEYXRhUmVjZWl2ZWQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0RyYWdD
b250ZXh0KiBjb250ZXh0LCBnaW50IHgsIGdpbnQgeSwgR3RrU2VsZWN0aW9uRGF0YSogc2VsZWN0
aW9uRGF0YSwgZ3VpbnQgaW5mbywgZ3VpbnQgdGltZSkKK3sKKyAgICBEcm9wQ29udGV4dCogZHJv
cENvbnRleHQgPSBzdGF0aWNfY2FzdDxEcm9wQ29udGV4dCo+KGdfb2JqZWN0X2dldF9kYXRhKEdf
T0JKRUNUKGNvbnRleHQpLCAiZHJvcC1jb250ZXh0IikpOworICAgIGlmICghZHJvcENvbnRleHQp
CisgICAgICAgIHJldHVybjsKKworICAgIGRyb3BDb250ZXh0LT5wZW5kaW5nRGF0YVJlcXVlc3Rz
LS07CisgICAgUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+Zmls
bERhdGFPYmplY3RGcm9tRHJvcERhdGEoc2VsZWN0aW9uRGF0YSwgaW5mbywgZHJvcENvbnRleHQt
PmRhdGFPYmplY3QuZ2V0KCkpOworCisgICAgaWYgKGRyb3BDb250ZXh0LT5wZW5kaW5nRGF0YVJl
cXVlc3RzKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBUaGUgY29vcmRpbmF0ZXMgcGFzc2Vk
IHRvIGRyYWctZGF0YS1yZWNlaXZlZCBzaWduYWwgYXJlIHNvbWV0aW1lcworICAgIC8vIGluYWNj
dXJhdGUgaW4gRFJULCBzbyB1c2UgdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBsYXN0IG1vdGlvbiBl
dmVudC4KKyAgICBjb25zdCBJbnRQb2ludCYgcG9zaXRpb24gPSBkcm9wQ29udGV4dC0+bGFzdE1v
dGlvblBvc2l0aW9uOworCisgICAgLy8gSWYgdGhlcmUgYXJlIG5vIG1vcmUgcGVuZGluZyByZXF1
ZXN0cywgc3RhcnQgc2VuZGluZyBkcmFnZ2luZyBkYXRhIHRvIFdlYkNvcmUuCisgICAgRHJhZ0Rh
dGEgZHJhZ0RhdGEoZHJvcENvbnRleHQtPmRhdGFPYmplY3QuZ2V0KCksIHBvc2l0aW9uLCBjb252
ZXJ0V2lkZ2V0UG9pbnRUb1NjcmVlblBvaW50KHdpZGdldCwgcG9zaXRpb24pLAorICAgICAgICAg
ICAgICAgICAgICAgIGdka0RyYWdBY3Rpb25Ub0RyYWdPcGVyYXRpb24oZ2RrX2RyYWdfY29udGV4
dF9nZXRfYWN0aW9ucyhjb250ZXh0KSkpOworICAgIFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJWaWV3
QmFzZSA9IFdFQktJVF9XRUJfVklFV19CQVNFKHdpZGdldCk7CisgICAgd2ViVmlld0Jhc2UtPnBy
aXYtPnBhZ2VQcm94eS0+ZHJhZ0VudGVyZWQoJmRyYWdEYXRhKTsKKyAgICBnZGtfZHJhZ19zdGF0
dXMoY29udGV4dCwgZ2RrX2RyYWdfY29udGV4dF9nZXRfc3VnZ2VzdGVkX2FjdGlvbihjb250ZXh0
KSwgdGltZSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlRHJhZ0VudGVyKEd0
a1dpZGdldCogd2lkZ2V0LCBHZGtEcmFnQ29udGV4dCogY29udGV4dCwgZ2ludCB4LCBnaW50IHks
IGd1aW50IHRpbWUpCit7CisgICAgRHJvcENvbnRleHQqIGRyb3BDb250ZXh0ID0gbmV3IERyb3BD
b250ZXh0OworICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNUKGNvbnRleHQpLCAiZHJvcC1j
b250ZXh0IiwgZHJvcENvbnRleHQpOworICAgIGRyb3BDb250ZXh0LT5sYXN0TW90aW9uUG9zaXRp
b24gPSBJbnRQb2ludCh4LCB5KTsKKyAgICBkcm9wQ29udGV4dC0+ZGF0YU9iamVjdCA9IERhdGFP
YmplY3RHdGs6OmNyZWF0ZSgpOworICAgIGRyb3BDb250ZXh0LT53aWRnZXQgPSB3aWRnZXQ7Cisg
ICAgZHJvcENvbnRleHQtPmdka0NvbnRleHQgPSBjb250ZXh0OworICAgIGRyb3BDb250ZXh0LT5k
cm9wSGFwcGVuZWQgPSBmYWxzZTsKKworICAgIFZlY3RvcjxHZGtBdG9tPiBhY2NlcHRhYmxlVGFy
Z2V0cyhQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpLT5kcm9wQXRv
bXNGb3JDb250ZXh0KHdpZGdldCwgY29udGV4dCkpOworICAgIGRyb3BDb250ZXh0LT5wZW5kaW5n
RGF0YVJlcXVlc3RzID0gYWNjZXB0YWJsZVRhcmdldHMuc2l6ZSgpOworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgYWNjZXB0YWJsZVRhcmdldHMuc2l6ZSgpOyBpKyspCisgICAgICAgIGd0a19k
cmFnX2dldF9kYXRhKHdpZGdldCwgY29udGV4dCwgYWNjZXB0YWJsZVRhcmdldHMuYXQoaSksIHRp
bWUpOworfQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0V2ViVmlld0Jhc2VEcmFnTW90aW9uKEd0
a1dpZGdldCogd2lkZ2V0LCBHZGtEcmFnQ29udGV4dCogY29udGV4dCwgZ2ludCB4LCBnaW50IHks
IGd1aW50IHRpbWUpCit7CisgICAgRHJvcENvbnRleHQqIGRyb3BDb250ZXh0ID0gc3RhdGljX2Nh
c3Q8RHJvcENvbnRleHQqPihnX29iamVjdF9nZXRfZGF0YShHX09CSkVDVChjb250ZXh0KSwgImRy
b3AtY29udGV4dCIpKTsKKyAgICBpZiAoIWRyb3BDb250ZXh0KSB7CisgICAgICAgIHdlYmtpdFdl
YlZpZXdCYXNlRHJhZ0VudGVyKHdpZGdldCwgY29udGV4dCwgeCwgeSwgdGltZSk7CisgICAgICAg
IHJldHVybiBUUlVFOworICAgIH0KKworICAgIGRyb3BDb250ZXh0LT5sYXN0TW90aW9uUG9zaXRp
b24gPSBJbnRQb2ludCh4LCB5KTsKKyAgICBpZiAoZHJvcENvbnRleHQtPnBlbmRpbmdEYXRhUmVx
dWVzdHMpCisgICAgICAgIHJldHVybiBUUlVFOworCisgICAgY29uc3QgSW50UG9pbnQmIHBvc2l0
aW9uID0gZHJvcENvbnRleHQtPmxhc3RNb3Rpb25Qb3NpdGlvbjsKKyAgICBEcmFnRGF0YSBkcmFn
RGF0YShkcm9wQ29udGV4dC0+ZGF0YU9iamVjdC5nZXQoKSwgcG9zaXRpb24sIGNvbnZlcnRXaWRn
ZXRQb2ludFRvU2NyZWVuUG9pbnQod2lkZ2V0LCBwb3NpdGlvbiksCisgICAgICAgICAgICAgICAg
ICAgICAgZ2RrRHJhZ0FjdGlvblRvRHJhZ09wZXJhdGlvbihnZGtfZHJhZ19jb250ZXh0X2dldF9h
Y3Rpb25zKGNvbnRleHQpKSk7CisgICAgV2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZpZXdCYXNlID0g
V0VCS0lUX1dFQl9WSUVXX0JBU0Uod2lkZ2V0KTsKKyAgICB3ZWJWaWV3QmFzZS0+cHJpdi0+cGFn
ZVByb3h5LT5kcmFnVXBkYXRlZCgmZHJhZ0RhdGEpOworICAgIERyYWdPcGVyYXRpb24gb3BlcmF0
aW9uID0gd2ViVmlld0Jhc2UtPnByaXYtPnBhZ2VQcm94eS0+ZHJhZ09wZXJhdGlvbigpOworICAg
IGlmIChvcGVyYXRpb24gIT0gRHJhZ09wZXJhdGlvbk5vbmUpCisgICAgICAgIGdka19kcmFnX3N0
YXR1cyhjb250ZXh0LCBkcmFnT3BlcmF0aW9uVG9TaW5nbGVHZGtEcmFnQWN0aW9uKG9wZXJhdGlv
biksIHRpbWUpOworCisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBkb0Ry
YWdMZWF2ZUxhdGVyKERyb3BDb250ZXh0KiBkcm9wQ29udGV4dCkKK3sKKyAgICAvLyBJZiB0aGUg
dmlldyBkb2Vzbid0IGtub3cgYWJvdXQgdGhlIGRyYWcgeWV0ICh0aGVyZSBhcmUgc3RpbGwgcGVu
ZGluZyBkYXRhKQorICAgIC8vIHJlcXVlc3RzLCBkb24ndCB1cGRhdGUgaXQgd2l0aCBpbmZvcm1h
dGlvbiBhYm91dCB0aGUgZHJhZy4KKyAgICBpZiAoZHJvcENvbnRleHQtPnBlbmRpbmdEYXRhUmVx
dWVzdHMpCisgICAgICAgIHJldHVybiBGQUxTRTsKKworICAgIC8vIERvbid0IGNhbGwgZHJhZ0V4
aXRlZCBpZiB3ZSBoYXZlIGp1c3QgcmVjZWl2ZWQgYSBkcmFnLWRyb3Agc2lnbmFsLiBUaGlzCisg
ICAgLy8gaGFwcGVucyBpbiB0aGUgY2FzZSBvZiBhIHN1Y2Nlc3NmdWwgZHJvcCBvbnRvIHRoZSB2
aWV3LgorICAgIGlmICghZHJvcENvbnRleHQtPmRyb3BIYXBwZW5lZCkgeworICAgICAgICBjb25z
dCBJbnRQb2ludCYgcG9zaXRpb24gPSBkcm9wQ29udGV4dC0+bGFzdE1vdGlvblBvc2l0aW9uOwor
ICAgICAgICBEcmFnRGF0YSBkcmFnRGF0YShkcm9wQ29udGV4dC0+ZGF0YU9iamVjdC5nZXQoKSwg
cG9zaXRpb24sIGNvbnZlcnRXaWRnZXRQb2ludFRvU2NyZWVuUG9pbnQoZHJvcENvbnRleHQtPndp
ZGdldCwgcG9zaXRpb24pLCBEcmFnT3BlcmF0aW9uTm9uZSk7CisgICAgICAgIFdlYktpdFdlYlZp
ZXdCYXNlKiB3ZWJWaWV3QmFzZSA9IFdFQktJVF9XRUJfVklFV19CQVNFKGRyb3BDb250ZXh0LT53
aWRnZXQpOworICAgICAgICB3ZWJWaWV3QmFzZS0+cHJpdi0+cGFnZVByb3h5LT5kcmFnRXhpdGVk
KCZkcmFnRGF0YSk7CisgICAgICAgIHdlYlZpZXdCYXNlLT5wcml2LT5wYWdlUHJveHktPnJlc2V0
RHJhZ09wZXJhdGlvbigpOworICAgIH0KKworICAgIGdfb2JqZWN0X3NldF9kYXRhKEdfT0JKRUNU
KGRyb3BDb250ZXh0LT5nZGtDb250ZXh0LmdldCgpKSwgImRyb3AtY29udGV4dCIsIDApOworICAg
IGRlbGV0ZSBkcm9wQ29udGV4dDsKKworICAgIHJldHVybiBGQUxTRTsKK30KKworc3RhdGljIHZv
aWQgd2Via2l0V2ViVmlld0Jhc2VEcmFnTGVhdmUoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0RyYWdD
b250ZXh0KiBjb250ZXh0LCBndWludCB0aW1lKQoreworICAgIERyb3BDb250ZXh0KiBkcm9wQ29u
dGV4dCA9IHN0YXRpY19jYXN0PERyb3BDb250ZXh0Kj4oZ19vYmplY3RfZ2V0X2RhdGEoR19PQkpF
Q1QoY29udGV4dCksICJkcm9wLWNvbnRleHQiKSk7CisgICAgaWYgKCFkcm9wQ29udGV4dCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgLy8gRHVyaW5nIGEgZHJvcCBHVEsrIHdpbGwgZmlyZSBhIGRy
YWctbGVhdmUgc2lnbmFsIHJpZ2h0IGJlZm9yZSBmaXJpbmcKKyAgICAvLyB0aGUgZHJhZy1kcm9w
IHNpZ25hbC4gV2Ugd2FudCB0aGUgYWN0aW9ucyBmb3IgZHJhZy1sZWF2ZSB0byBoYXBwZW4gYWZ0
ZXIKKyAgICAvLyB0aG9zZSBmb3IgZHJhZy1kcm9wLCBzbyBzY2hlZHVsZSB0aGVtIHRvIGhhcHBl
biBhc3luY2hyb25vdXNseSBoZXJlLgorICAgIGdfaWRsZV9hZGRfZnVsbChHX1BSSU9SSVRZX0RF
RkFVTFQsIHJlaW50ZXJwcmV0X2Nhc3Q8R1NvdXJjZUZ1bmM+KGRvRHJhZ0xlYXZlTGF0ZXIpLCBk
cm9wQ29udGV4dCwgc3RhdGljX2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KDApKTsKK30KKworc3RhdGlj
IGdib29sZWFuIHdlYmtpdFdlYlZpZXdCYXNlRHJhZ0Ryb3AoR3RrV2lkZ2V0KiB3aWRnZXQsIEdk
a0RyYWdDb250ZXh0KiBjb250ZXh0LCBnaW50IHgsIGdpbnQgeSwgZ3VpbnQgdGltZSkKK3sKKyAg
ICBEcm9wQ29udGV4dCogZHJvcENvbnRleHQgPSBzdGF0aWNfY2FzdDxEcm9wQ29udGV4dCo+KGdf
b2JqZWN0X2dldF9kYXRhKEdfT0JKRUNUKGNvbnRleHQpLCAiZHJvcC1jb250ZXh0IikpOworICAg
IGlmICghZHJvcENvbnRleHQpCisgICAgICAgIHJldHVybiBGQUxTRTsKKworICAgIGRyb3BDb250
ZXh0LT5kcm9wSGFwcGVuZWQgPSB0cnVlOworCisgICAgSW50UG9pbnQgcG9zaXRpb24oeCwgeSk7
CisgICAgRHJhZ0RhdGEgZHJhZ0RhdGEoZHJvcENvbnRleHQtPmRhdGFPYmplY3QuZ2V0KCksIHBv
c2l0aW9uLCBjb252ZXJ0V2lkZ2V0UG9pbnRUb1NjcmVlblBvaW50KHdpZGdldCwgcG9zaXRpb24p
LCBnZGtEcmFnQWN0aW9uVG9EcmFnT3BlcmF0aW9uKGdka19kcmFnX2NvbnRleHRfZ2V0X2FjdGlv
bnMoY29udGV4dCkpKTsKKyAgICBXZWJLaXRXZWJWaWV3QmFzZSogd2ViVmlld0Jhc2UgPSBXRUJL
SVRfV0VCX1ZJRVdfQkFTRSh3aWRnZXQpOworICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBo
YW5kbGU7CisgICAgd2ViVmlld0Jhc2UtPnByaXYtPnBhZ2VQcm94eS0+cGVyZm9ybURyYWcoJmRy
YWdEYXRhLCBTdHJpbmcoKSwgaGFuZGxlKTsKKyAgICBndGtfZHJhZ19maW5pc2goY29udGV4dCwg
VFJVRSwgRkFMU0UsIHRpbWUpOworCisgICAgcmV0dXJuIFRSVUU7Cit9CisKIHN0YXRpYyB2b2lk
IHdlYmtpdF93ZWJfdmlld19iYXNlX2NsYXNzX2luaXQoV2ViS2l0V2ViVmlld0Jhc2VDbGFzcyog
d2Via2l0V2ViVmlld0Jhc2VDbGFzcykKIHsKICAgICBHdGtXaWRnZXRDbGFzcyogd2lkZ2V0Q2xh
c3MgPSBHVEtfV0lER0VUX0NMQVNTKHdlYmtpdFdlYlZpZXdCYXNlQ2xhc3MpOwpAQCAtMjk2LDYg
KzQ2MCwxMiBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfYmFzZV9jbGFzc19pbml0KFdl
YktpdFdlYlZpZXdCYXNlQ2xhc3MqIHdlYmtpdFdlYlZpZQogICAgIHdpZGdldENsYXNzLT5zY3Jv
bGxfZXZlbnQgPSB3ZWJraXRXZWJWaWV3QmFzZVNjcm9sbEV2ZW50OwogICAgIHdpZGdldENsYXNz
LT5tb3Rpb25fbm90aWZ5X2V2ZW50ID0gd2Via2l0V2ViVmlld0Jhc2VNb3Rpb25Ob3RpZnlFdmVu
dDsKICAgICB3aWRnZXRDbGFzcy0+cXVlcnlfdG9vbHRpcCA9IHdlYmtpdFdlYlZpZXdCYXNlUXVl
cnlUb29sdGlwOworICAgIHdpZGdldENsYXNzLT5kcmFnX2VuZCA9IHdlYmtpdFdlYlZpZXdCYXNl
RHJhZ0VuZDsKKyAgICB3aWRnZXRDbGFzcy0+ZHJhZ19kYXRhX2dldCA9IHdlYmtpdFdlYlZpZXdC
YXNlRHJhZ0RhdGFHZXQ7CisgICAgd2lkZ2V0Q2xhc3MtPmRyYWdfbW90aW9uID0gd2Via2l0V2Vi
Vmlld0Jhc2VEcmFnTW90aW9uOworICAgIHdpZGdldENsYXNzLT5kcmFnX2xlYXZlID0gd2Via2l0
V2ViVmlld0Jhc2VEcmFnTGVhdmU7CisgICAgd2lkZ2V0Q2xhc3MtPmRyYWdfZHJvcCA9IHdlYmtp
dFdlYlZpZXdCYXNlRHJhZ0Ryb3A7CisgICAgd2lkZ2V0Q2xhc3MtPmRyYWdfZGF0YV9yZWNlaXZl
ZCA9IHdlYmtpdFdlYlZpZXdCYXNlRHJhZ0RhdGFSZWNlaXZlZDsKIAogICAgIEdPYmplY3RDbGFz
cyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1Mod2Via2l0V2ViVmlld0Jhc2VDbGFzcyk7
CiAgICAgZ29iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdFdlYlZpZXdCYXNlRmluYWxpemU7
CkBAIC0zNDMsNCArNTEzLDIxIEBAIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VTZXRUb29sdGlwVGV4
dChXZWJLaXRXZWJWaWV3QmFzZSogd2ViVmlld0Jhc2UsIGNvbnN0IGNoYXIqCiAgICAgZ3RrX3dp
ZGdldF90cmlnZ2VyX3Rvb2x0aXBfcXVlcnkoR1RLX1dJREdFVCh3ZWJWaWV3QmFzZSkpOwogfQog
Cit2b2lkIHdlYmtpdFdlYlZpZXdCYXNlU3RhcnREcmFnKFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJW
aWV3QmFzZSwgY29uc3QgRHJhZ0RhdGEmIGRyYWdEYXRhLCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJp
dG1hcD4gZHJhZ0ltYWdlKQoreworICAgIFJlZlB0cjxEYXRhT2JqZWN0R3RrPiBkYXRhT2JqZWN0
KGRyYWdEYXRhLnBsYXRmb3JtRGF0YSgpKTsKKyAgICBHUmVmUHRyPEd0a1RhcmdldExpc3Q+IHRh
cmdldExpc3QoUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+dGFy
Z2V0TGlzdEZvckRhdGFPYmplY3QoZGF0YU9iamVjdC5nZXQoKSkpOworICAgIEdka0RyYWdDb250
ZXh0KiBjb250ZXh0ID0gZ3RrX2RyYWdfYmVnaW4oR1RLX1dJREdFVCh3ZWJWaWV3QmFzZSksIHRh
cmdldExpc3QuZ2V0KCksIGRyYWdPcGVyYXRpb25Ub0dka0RyYWdBY3Rpb25zKGRyYWdEYXRhLmRy
YWdnaW5nU291cmNlT3BlcmF0aW9uTWFzaygpKSwgMSwgZ3RrX2dldF9jdXJyZW50X2V2ZW50KCkp
OworCisgICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1QoY29udGV4dCksICJkcmFnLWRhdGEt
b2JqZWN0IiwgZGF0YU9iamVjdC5nZXQoKSk7CiAKKyAgICAvLyBBIGRyYWcgc3RhcnRpbmcgc2hv
dWxkIHByZXZlbnQgYSBkb3VibGUtY2xpY2sgZnJvbSBoYXBwZW5pbmcuIFRoaXMgbWlnaHQKKyAg
ICAvLyBoYXBwZW4gaWYgYSBkcmFnIGlzIGZvbGxvd2VkIHZlcnkgcXVpY2tseSBieSBhbm90aGVy
IGNsaWNrIChsaWtlIGluIHRoZSBEUlQpLgorICAgIHdlYlZpZXdCYXNlLT5wcml2LT5jbGlja0Nv
dW50ZXIucmVzZXQoKTsKKworICAgIGlmIChkcmFnSW1hZ2UpIHsKKyAgICAgICAgUmVmUHRyPGNh
aXJvX3N1cmZhY2VfdD4gaW1hZ2UoZHJhZ0ltYWdlLT5jcmVhdGVDYWlyb1N1cmZhY2UoKSk7Cisg
ICAgICAgIGd0a19kcmFnX3NldF9pY29uX3N1cmZhY2UoY29udGV4dCwgaW1hZ2UuZ2V0KCkpOwor
ICAgIH0gZWxzZQorICAgICAgICBndGtfZHJhZ19zZXRfaWNvbl9kZWZhdWx0KGNvbnRleHQpOwor
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vi
Vmlld0Jhc2VQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRXZWJWaWV3QmFzZVByaXZhdGUuaAppbmRleCA2OTk2NzM4Li5mNThlNWE4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZVByaXZh
dGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3
QmFzZVByaXZhdGUuaApAQCAtNDYsNiArNDYsOCBAQCB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlQ3Jl
YXRlV2ViUGFnZShXZWJLaXRXZWJWaWV3QmFzZSosIFdLQ29udGV4dFJlZiwgV0tQYWdlR3JvdQog
CiB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlU2V0VG9vbHRpcFRleHQoV2ViS2l0V2ViVmlld0Jhc2Uq
LCBjb25zdCBjaGFyKik7CiAKK3ZvaWQgd2Via2l0V2ViVmlld0Jhc2VTdGFydERyYWcoV2ViS2l0
V2ViVmlld0Jhc2UqLCBjb25zdCBXZWJDb3JlOjpEcmFnRGF0YSYsIFBhc3NSZWZQdHI8U2hhcmVh
YmxlQml0bWFwPiBkcmFnSW1hZ2UpOworCiBHX0VORF9ERUNMUwogCiAjZW5kaWYgLy8gV2ViS2l0
V2ViVmlld0Jhc2VQcml2YXRlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9QYWdlQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCmlu
ZGV4IGY3YmRjMmEuLmZmY2M0NGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9QYWdlQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BhZ2VDbGllbnQu
aApAQCAtMTA0LDExICsxMDQsMTMgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBkaWRDaGFu
Z2VDb250ZW50c1NpemUoY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYpID0gMDsKICAgICB2aXJ0dWFs
IHZvaWQgZGlkRmluZFpvb21hYmxlQXJlYShjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgPSAwOwog
Ci0gICAgdmlydHVhbCB2b2lkIHN0YXJ0RHJhZyhjb25zdCBXZWJDb3JlOjpEcmFnRGF0YSYsIFBh
c3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBkcmFnSW1hZ2UpID0gMDsKLQogICAgIHZpcnR1YWwg
V2ViQ29yZTo6SW50UmVjdCB2aWV3cG9ydFZpc2libGVSZWN0KCkgY29uc3QgPSAwOwogI2VuZGlm
CiAKKyNpZiBQTEFURk9STShRVCkgfHwgUExBVEZPUk0oR1RLKQorICAgIHZpcnR1YWwgdm9pZCBz
dGFydERyYWcoY29uc3QgV2ViQ29yZTo6RHJhZ0RhdGEmLCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJp
dG1hcD4gZHJhZ0ltYWdlKSA9IDA7CisjZW5kaWYKKwogICAgIHZpcnR1YWwgdm9pZCBzZXRDdXJz
b3IoY29uc3QgV2ViQ29yZTo6Q3Vyc29yJikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXRWaWV3
cG9ydEFyZ3VtZW50cyhjb25zdCBXZWJDb3JlOjpWaWV3cG9ydEFyZ3VtZW50cyYpID0gMDsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAppbmRleCAyZDg0ODNmLi40
ODljMGYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcApAQCAt
OTIsNiArOTIsMTAgQEAKICNpbmNsdWRlICJBcmd1bWVudENvZGVyc1F0LmgiCiAjZW5kaWYKIAor
I2lmIFBMQVRGT1JNKEdUSykKKyNpbmNsdWRlICJBcmd1bWVudENvZGVyc0d0ay5oIgorI2VuZGlm
CisKICNpZm5kZWYgTkRFQlVHCiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWRMZWFrQ291bnRlci5o
PgogI2VuZGlmCkBAIC04MTIsNyArODE2LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnBlcmZvcm1E
cmFnQ29udHJvbGxlckFjdGlvbihEcmFnQ29udHJvbGxlckFjdGlvbiBhY3Rpb24sIERyYWcKICAg
ICAvLyBGSVhNRTogV2Ugc2hvdWxkIHBhc3MgdGhlIGRyYWcgZGF0YSBtYXAgb25seSBvbiBEcmFn
RW50ZXIuCiAgICAgcHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpQZXJmb3JtRHJh
Z0NvbnRyb2xsZXJBY3Rpb24oYWN0aW9uLCBkcmFnRGF0YS0+Y2xpZW50UG9zaXRpb24oKSwgZHJh
Z0RhdGEtPmdsb2JhbFBvc2l0aW9uKCksCiAgICAgICAgIGRyYWdEYXRhLT5kcmFnZ2luZ1NvdXJj
ZU9wZXJhdGlvbk1hc2soKSwgZHJhZ0RhdGEtPmRyYWdEYXRhTWFwKCksIGRyYWdEYXRhLT5mbGFn
cygpKSwgbV9wYWdlSUQpOwotI2VsaWYgUExBVEZPUk0oUVQpCisjZWxpZiBQTEFURk9STShRVCkg
fHwgUExBVEZPUk0oR1RLKQogICAgIHByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6
UGVyZm9ybURyYWdDb250cm9sbGVyQWN0aW9uKGFjdGlvbiwgKmRyYWdEYXRhKSwgbV9wYWdlSUQp
OwogI2Vsc2UKICAgICBwcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlBlcmZvcm1E
cmFnQ29udHJvbGxlckFjdGlvbihhY3Rpb24sIGRyYWdEYXRhLT5jbGllbnRQb3NpdGlvbigpLCBk
cmFnRGF0YS0+Z2xvYmFsUG9zaXRpb24oKSwgZHJhZ0RhdGEtPmRyYWdnaW5nU291cmNlT3BlcmF0
aW9uTWFzaygpLCBkcmFnU3RvcmFnZU5hbWUsIGRyYWdEYXRhLT5mbGFncygpLCBzYW5kYm94RXh0
ZW5zaW9uSGFuZGxlKSwgbV9wYWdlSUQpOwpAQCAtODg2LDcgKzg5MCw3IEBAIHZvaWQgV2ViUGFn
ZVByb3h5OjpzdGFydERyYWdEcm9wKGNvbnN0IEludFBvaW50JiBpbWFnZU9yaWdpbiwgY29uc3Qg
SW50UG9pbnQmIGRyCiB9CiAjZW5kaWYKIAotI2lmIFBMQVRGT1JNKFFUKQorI2lmIFBMQVRGT1JN
KFFUKSB8fCBQTEFURk9STShHVEspCiB2b2lkIFdlYlBhZ2VQcm94eTo6c3RhcnREcmFnKGNvbnN0
IERyYWdEYXRhJiBkcmFnRGF0YSwgY29uc3QgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmIGRyYWdJ
bWFnZUhhbmRsZSkKIHsKICAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBkcmFnSW1hZ2UgPSBT
aGFyZWFibGVCaXRtYXA6OmNyZWF0ZShkcmFnSW1hZ2VIYW5kbGUpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5oCmluZGV4IDI2MTJkOWEuLjBjY2ZjNDMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKQEAgLTQ0NCw3ICs0NDQsNyBAQCBwdWJsaWM6
CiAjaWYgUExBVEZPUk0oV0lOKQogICAgIHZvaWQgc3RhcnREcmFnRHJvcChjb25zdCBXZWJDb3Jl
OjpJbnRQb2ludCYgaW1hZ2VQb2ludCwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGRyYWdQb2lu
dCwgdWludDY0X3Qgb2tFZmZlY3QsIGNvbnN0IEhhc2hNYXA8VUlOVCwgVmVjdG9yPFN0cmluZz4g
PiYgZGF0YU1hcCwgdWludDY0X3QgZmlsZVNpemUsIGNvbnN0IFN0cmluZyYgcGF0aG5hbWUsIGNv
bnN0IFNoYXJlZE1lbW9yeTo6SGFuZGxlJiBmaWxlQ29udGVudEhhbmRsZSwgY29uc3QgV2ViQ29y
ZTo6SW50U2l6ZSYgZHJhZ0ltYWdlU2l6ZSwgY29uc3QgU2hhcmVkTWVtb3J5OjpIYW5kbGUmIGRy
YWdJbWFnZUhhbmRsZSwgYm9vbCBpc0xpbmtEcmFnKTsKICNlbmRpZgotI2lmIFBMQVRGT1JNKFFU
KQorI2lmIFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShHVEspCiAgICAgdm9pZCBzdGFydERyYWco
Y29uc3QgV2ViQ29yZTo6RHJhZ0RhdGEmLCBjb25zdCBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYg
ZHJhZ0ltYWdlKTsKICNlbmRpZgogICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoQ29yZUlQQzo6
Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VJRCwgQ29yZUlQQzo6QXJndW1lbnREZWNvZGVy
Kik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1l
c3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdl
cy5pbgppbmRleCA3ZDBmZDk4Li44NzQ0MWM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4KQEAgLTIwOSw3ICsyMDksNyBAQCBtZXNz
YWdlcyAtPiBXZWJQYWdlUHJveHkgewogI2lmIFBMQVRGT1JNKFdJTikKICAgICBTdGFydERyYWdE
cm9wKFdlYkNvcmU6OkludFBvaW50IGltYWdlUG9pbnQsIFdlYkNvcmU6OkludFBvaW50IGRyYWdQ
b2ludCwgdWludDY0X3Qgb2tFZmZlY3QsIEhhc2hNYXA8VUlOVCxWZWN0b3I8U3RyaW5nPiA+IGRh
dGFNYXAsIHVpbnQ2NF90IGZpbGVTaXplLCBTdHJpbmcgcGF0aG5hbWUsIFdlYktpdDo6U2hhcmVk
TWVtb3J5OjpIYW5kbGUgZmlsZUNvbnRlbnRIYW5kbGUsIFdlYkNvcmU6OkludFNpemUgZHJhZ0lt
YWdlU2l6ZSwgV2ViS2l0OjpTaGFyZWRNZW1vcnk6OkhhbmRsZSBkcmFnSW1hZ2UsIGJvb2wgbGlu
a0RyYWcpCiAjZW5kaWYKLSNpZiBQTEFURk9STShRVCkKKyNpZiBQTEFURk9STShRVCkgfHwgUExB
VEZPUk0oR1RLKQogICAgIFN0YXJ0RHJhZyhXZWJDb3JlOjpEcmFnRGF0YSBkcmFnRGF0YSwgV2Vi
S2l0OjpTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBkcmFnSW1hZ2UpCiAjZW5kaWYKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJEcmFnQ2xp
ZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRHJh
Z0NsaWVudC5jcHAKaW5kZXggYWVmYzAxYS4uNTdhZDZhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJEcmFnQ2xpZW50LmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkRyYWdDbGllbnQuY3Bw
CkBAIC01Miw3ICs1Miw3IEBAIERyYWdTb3VyY2VBY3Rpb24gV2ViRHJhZ0NsaWVudDo6ZHJhZ1Nv
dXJjZUFjdGlvbk1hc2tGb3JQb2ludChjb25zdCBJbnRQb2ludCYgd2luCiAgICAgcmV0dXJuIERy
YWdTb3VyY2VBY3Rpb25Bbnk7CiB9CiAKLSNpZiAhUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0o
V0lOKSAmJiAhUExBVEZPUk0oUVQpCisjaWYgIVBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKFdJ
TikgJiYgIVBMQVRGT1JNKFFUKSAmJiAhUExBVEZPUk0oR1RLKQogdm9pZCBXZWJEcmFnQ2xpZW50
OjpzdGFydERyYWcoRHJhZ0ltYWdlUmVmLCBjb25zdCBJbnRQb2ludCYsIGNvbnN0IEludFBvaW50
JiwgQ2xpcGJvYXJkKiwgRnJhbWUqLCBib29sKQogewogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9ndGsvV2ViRHJhZ0NsaWVudEd0ay5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJEcmFnQ2xp
ZW50R3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDRiZWE0Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9ndGsvV2ViRHJhZ0NsaWVudEd0ay5jcHAKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiV2ViRHJhZ0NsaWVudC5oIgorCisjaW5jbHVkZSAiQXJndW1lbnRDb2RlcnNH
dGsuaCIKKyNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKKyNpbmNsdWRlICJXZWJQYWdlLmgi
CisjaW5jbHVkZSAiV2ViUGFnZVByb3h5TWVzc2FnZXMuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Ns
aXBib2FyZEd0ay5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRHJhZ0RhdGEuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1Db250
ZXh0Q2Fpcm8uaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJL
aXQgeworCitzdGF0aWMgUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGNvbnZlcnRDYWlyb1N1
cmZhY2VUb1NoYXJlYWJsZUJpdG1hcChjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UpCit7CisgICAg
Ly8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIGFuIGVhcmx5IHJldHVybiwgYW5kIHN0YXJ0RHJhZyB3
b3VsZCBzZW5kIGEgbnVsbCBoYW5kbGUsIGJ1dAorICAgIC8vIHNlbmRpbmcgbnVsbCBoYW5kbGVz
IGlzIG5vdCBzdXBwb3J0ZWQgeWV0LgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD02MDYyMQorICAgIGlmICghc3VyZmFjZSkKKyAgICAgICAgc3VyZmFjZSA9
IGNhaXJvX2ltYWdlX3N1cmZhY2VfY3JlYXRlKENBSVJPX0ZPUk1BVF9BMSwgMSwgMSk7CisgICAg
SW50U2l6ZSBpbWFnZVNpemUoY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgoc3VyZmFjZSks
IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChzdXJmYWNlKSk7CisgICAgUmVmUHRyPFNo
YXJlYWJsZUJpdG1hcD4gYml0bWFwID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVTaGFyZWFibGUo
aW1hZ2VTaXplLCBTaGFyZWFibGVCaXRtYXA6OlN1cHBvcnRzQWxwaGEpOworICAgIE93blB0cjxH
cmFwaGljc0NvbnRleHQ+IGdyYXBoaWNzQ29udGV4dCA9IGJpdG1hcC0+Y3JlYXRlR3JhcGhpY3ND
b250ZXh0KCk7CisKKyAgICBncmFwaGljc0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5kcmF3
U3VyZmFjZVRvQ29udGV4dChzdXJmYWNlLCBJbnRSZWN0KEludFBvaW50KCksIGltYWdlU2l6ZSks
IEludFJlY3QoSW50UG9pbnQoKSwgaW1hZ2VTaXplKSwgZ3JhcGhpY3NDb250ZXh0LmdldCgpKTsK
KyAgICByZXR1cm4gYml0bWFwLnJlbGVhc2UoKTsKK30KKwordm9pZCBXZWJEcmFnQ2xpZW50Ojpz
dGFydERyYWcoRHJhZ0ltYWdlUmVmIGRyYWdJbWFnZSwgY29uc3QgSW50UG9pbnQmIGNsaWVudFBv
c2l0aW9uLCBjb25zdCBJbnRQb2ludCYgZ2xvYmFsUG9zaXRpb24sIENsaXBib2FyZCogY2xpcGJv
YXJkLCBGcmFtZSosIGJvb2wpCit7CisgICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0bWFw
ID0gY29udmVydENhaXJvU3VyZmFjZVRvU2hhcmVhYmxlQml0bWFwKGRyYWdJbWFnZSk7CisgICAg
U2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgaGFuZGxlOworICAgIGlmICghYml0bWFwLT5jcmVhdGVI
YW5kbGUoaGFuZGxlKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVmUHRyPERhdGFPYmplY3RH
dGs+IGRhdGFPYmplY3QgPSByZWludGVycHJldF9jYXN0PENsaXBib2FyZEd0ayo+KGNsaXBib2Fy
ZCktPmRhdGFPYmplY3QoKTsKKyAgICBEcmFnRGF0YSBkcmFnRGF0YShkYXRhT2JqZWN0LmdldCgp
LCBjbGllbnRQb3NpdGlvbiwgZ2xvYmFsUG9zaXRpb24sIGNsaXBib2FyZC0+c291cmNlT3BlcmF0
aW9uKCkpOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTdGFydERy
YWcoZHJhZ0RhdGEsIGhhbmRsZSkpOworfQorCit9OyAvLyBuYW1lc3BhY2UgV2ViS2l0LgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCmluZGV4IDhmMjdl
Y2QuLmM4YzdjYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5jcHAKQEAgLTE2OTksMTIgKzE2OTksMTYgQEAgdm9pZCBXZWJQYWdlOjpwZXJmb3JtRHJh
Z0NvbnRyb2xsZXJBY3Rpb24odWludDY0X3QgYWN0aW9uLCBXZWJDb3JlOjpJbnRQb2ludCBjbGkK
ICAgICB9CiB9CiAKLSNlbGlmIFBMQVRGT1JNKFFUKQorI2VsaWYgUExBVEZPUk0oUVQpIHx8IFBM
QVRGT1JNKEdUSykKIHZvaWQgV2ViUGFnZTo6cGVyZm9ybURyYWdDb250cm9sbGVyQWN0aW9uKHVp
bnQ2NF90IGFjdGlvbiwgV2ViQ29yZTo6RHJhZ0RhdGEgZHJhZ0RhdGEpCiB7CiAgICAgaWYgKCFt
X3BhZ2UpIHsKICAgICAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpEaWRQZXJmb3Jt
RHJhZ0NvbnRyb2xsZXJBY3Rpb24oRHJhZ09wZXJhdGlvbk5vbmUpKTsKKyNpZiBQTEFURk9STShR
VCkKICAgICAgICAgUU1pbWVEYXRhKiBkYXRhID0gY29uc3RfY2FzdDxRTWltZURhdGEqPihkcmFn
RGF0YS5wbGF0Zm9ybURhdGEoKSk7CisjZWxpZiBQTEFURk9STShHVEspCisgICAgICAgIERhdGFP
YmplY3RHdGsqIGRhdGEgPSBjb25zdF9jYXN0PERhdGFPYmplY3RHdGsqPihkcmFnRGF0YS5wbGF0
Zm9ybURhdGEoKSk7CisjZW5kaWYKICAgICAgICAgZGVsZXRlIGRhdGE7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CkBAIC0xNzMxLDcgKzE3MzUsMTEgQEAgdm9pZCBXZWJQYWdlOjpwZXJmb3JtRHJh
Z0NvbnRyb2xsZXJBY3Rpb24odWludDY0X3QgYWN0aW9uLCBXZWJDb3JlOjpEcmFnRGF0YSBkcmEK
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogICAgIC8vIERyYWdEYXRhIGRv
ZXMgbm90IGRlbGV0ZSBpdHMgcGxhdGZvcm1EYXRhIHNvIHdlIG5lZWQgdG8gZG8gdGhhdCBoZXJl
LgorI2lmIFBMQVRGT1JNKFFUKQogICAgIFFNaW1lRGF0YSogZGF0YSA9IGNvbnN0X2Nhc3Q8UU1p
bWVEYXRhKj4oZHJhZ0RhdGEucGxhdGZvcm1EYXRhKCkpOworI2VsaWYgUExBVEZPUk0oR1RLKQor
ICAgIERhdGFPYmplY3RHdGsqIGRhdGEgPSBjb25zdF9jYXN0PERhdGFPYmplY3RHdGsqPihkcmFn
RGF0YS5wbGF0Zm9ybURhdGEoKSk7CisjZW5kaWYKICAgICBkZWxldGUgZGF0YTsKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKaW5kZXggYjdlOTMwZS4u
MWJiNTllMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5o
CkBAIC02MCw2ICs2MCwxMCBAQAogI2luY2x1ZGUgIkFyZ3VtZW50Q29kZXJzUXQuaCIKICNlbmRp
ZgogCisjaWYgUExBVEZPUk0oR1RLKQorI2luY2x1ZGUgIkFyZ3VtZW50Q29kZXJzR3RrLmgiCisj
ZW5kaWYKKwogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCiAjaW5jbHVkZSA8V2ViQ29yZS9QbGF0
Zm9ybVRvdWNoRXZlbnQuaD4KICNlbmRpZgpAQCAtMzc4LDcgKzM4Miw3IEBAIHB1YmxpYzoKICAg
ICB2b2lkIGNsZWFyU2VsZWN0aW9uKCk7CiAjaWYgUExBVEZPUk0oV0lOKQogICAgIHZvaWQgcGVy
Zm9ybURyYWdDb250cm9sbGVyQWN0aW9uKHVpbnQ2NF90IGFjdGlvbiwgV2ViQ29yZTo6SW50UG9p
bnQgY2xpZW50UG9zaXRpb24sIFdlYkNvcmU6OkludFBvaW50IGdsb2JhbFBvc2l0aW9uLCB1aW50
NjRfdCBkcmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1hc2ssIGNvbnN0IFdlYkNvcmU6OkRyYWdEYXRh
TWFwJiwgdWludDMyX3QgZmxhZ3MpOwotI2VsaWYgUExBVEZPUk0oUVQpCisjZWxpZiBQTEFURk9S
TShRVCkgfHwgUExBVEZPUk0oR1RLKQogICAgIHZvaWQgcGVyZm9ybURyYWdDb250cm9sbGVyQWN0
aW9uKHVpbnQ2NF90IGFjdGlvbiwgV2ViQ29yZTo6RHJhZ0RhdGEpOwogI2Vsc2UKICAgICB2b2lk
IHBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlvbih1aW50NjRfdCBhY3Rpb24sIFdlYkNvcmU6Oklu
dFBvaW50IGNsaWVudFBvc2l0aW9uLCBXZWJDb3JlOjpJbnRQb2ludCBnbG9iYWxQb3NpdGlvbiwg
dWludDY0X3QgZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrLCBjb25zdCBXVEY6OlN0cmluZyYg
ZHJhZ1N0b3JhZ2VOYW1lLCB1aW50MzJfdCBmbGFncywgY29uc3QgU2FuZGJveEV4dGVuc2lvbjo6
SGFuZGxlJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLm1lc3NhZ2VzLmluCmluZGV4IGVlMzUxNDIuLjhkOGE0NzEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCkBA
IC0xMjQsMTAgKzEyNCwxMCBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlIHsKICNpZiBQTEFURk9STShX
SU4pCiAgICAgUGVyZm9ybURyYWdDb250cm9sbGVyQWN0aW9uKHVpbnQ2NF90IGFjdGlvbiwgV2Vi
Q29yZTo6SW50UG9pbnQgY2xpZW50UG9zaXRpb24sIFdlYkNvcmU6OkludFBvaW50IGdsb2JhbFBv
c2l0aW9uLCB1aW50NjRfdCBkcmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1hc2ssIEhhc2hNYXA8VUlO
VCxWZWN0b3I8U3RyaW5nPj4gZGF0YU1hcCwgdWludDMyX3QgZmxhZ3MpCiAjZW5kaWYKLSNpZiBQ
TEFURk9STShRVCkKKyNpZiBQTEFURk9STShRVCkgfHwgUExBVEZPUk0oR1RLKQogICAgIFBlcmZv
cm1EcmFnQ29udHJvbGxlckFjdGlvbih1aW50NjRfdCBhY3Rpb24sIFdlYkNvcmU6OkRyYWdEYXRh
IGRyYWdEYXRhKQogI2VuZGlmCi0jaWYgIVBMQVRGT1JNKFdJTikgJiYgIVBMQVRGT1JNKFFUKQor
I2lmICFQTEFURk9STShXSU4pICYmICFQTEFURk9STShRVCkgJiYgIVBMQVRGT1JNKEdUSykKICAg
ICBQZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24odWludDY0X3QgYWN0aW9uLCBXZWJDb3JlOjpJ
bnRQb2ludCBjbGllbnRQb3NpdGlvbiwgV2ViQ29yZTo6SW50UG9pbnQgZ2xvYmFsUG9zaXRpb24s
IHVpbnQ2NF90IGRyYWdnaW5nU291cmNlT3BlcmF0aW9uTWFzaywgV1RGOjpTdHJpbmcgZHJhZ1N0
b3JhZ2VOYW1lLCB1aW50MzJfdCBmbGFncywgV2ViS2l0OjpTYW5kYm94RXh0ZW5zaW9uOjpIYW5k
bGUgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSkKICNlbmRpZgogICAgIERyYWdFbmRlZChXZWJDb3Jl
OjpJbnRQb2ludCBjbGllbnRQb3NpdGlvbiwgV2ViQ29yZTo6SW50UG9pbnQgZ2xvYmFsUG9zaXRp
b24sIHVpbnQ2NF90IG9wZXJhdGlvbikK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>99291</attachid>
            <date>2011-06-30 06:44:21 -0700</date>
            <delta_ts>2011-07-15 09:21:07 -0700</delta_ts>
            <desc>Nuew patch, fix the build</desc>
            <filename>wk2-dnd3.diff</filename>
            <type>text/plain</type>
            <size>43568</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAzOWUxZTdlLi43OTcxYzdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjgg
QEAKKzIwMTEtMDYtMzAgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtHVEtd
IEltcGxlbWVudCBkcmFnIGFuZCBkcm9wIHN1cHBvcnQgaW4gV2ViS2l0MgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjM3MDYKKworICAgICAgICAqIHBs
YXRmb3JtL0RyYWdEYXRhLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3RrL0RhdGFPYmplY3RHdGsu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YU9iamVjdEd0azo6dGV4dCk6IE1hcmsgYXMgY29u
c3QuCisgICAgICAgIChXZWJDb3JlOjpEYXRhT2JqZWN0R3RrOjptYXJrdXApOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OkRhdGFPYmplY3RHdGs6OnVybExhYmVsKTogRGl0dG8uCisgICAgICAg
ICogcGxhdGZvcm0vZ3RrL0RhdGFPYmplY3RHdGsuaDogUmVtb3ZlIHVudXNlZCBtZW1iZXIKKyAg
ICAgICAgbV9kcmFnQ29udGV4dC4KKyAgICAgICAgKFdlYkNvcmU6OkRhdGFPYmplY3RHdGs6OnVy
bCk6IE1hcmsgYXMgY29uc3QuCisgICAgICAgIChXZWJDb3JlOjpEYXRhT2JqZWN0R3RrOjp1cmlM
aXN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpEYXRhT2JqZWN0R3RrOjpmaWxlbmFtZXMp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRhdGFPYmplY3RHdGs6OmltYWdlKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpEYXRhT2JqZWN0R3RrOjpoYXNUZXh0KTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpEYXRhT2JqZWN0R3RrOjpoYXNNYXJrdXApOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OkRhdGFPYmplY3RHdGs6Omhhc1VSSUxpc3QpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OkRhdGFPYmplY3RHdGs6Omhhc1VSTCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
RGF0YU9iamVjdEd0azo6aGFzRmlsZW5hbWVzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpE
YXRhT2JqZWN0R3RrOjpoYXNJbWFnZSk6IERpdHRvLgorCiAyMDExLTA2LTMwICBNaWtoYWlsIE5h
Z2Fub3YgIDxtbmFnYW5vdkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgWXVy
eSBTZW1pa2hhdHNreS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdE
YXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnRGF0YS5oCmluZGV4IDkyM2ZkYjIu
LjU0YjUxNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0RyYWdEYXRhLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0RhdGEuaApAQCAtMTIzLDcgKzEyMyw3
IEBAIHB1YmxpYzoKICAgICBOU1Bhc3RlYm9hcmQgKnBhc3RlYm9hcmQoKSB7IHJldHVybiBtX3Bh
c3RlYm9hcmQuZ2V0KCk7IH0KICNlbmRpZgogCi0jaWYgUExBVEZPUk0oUVQpCisjaWYgUExBVEZP
Uk0oUVQpIHx8IFBMQVRGT1JNKEdUSykKICAgICAvLyBUaGlzIGNvbnN0cnVjdG9yIHNob3VsZCB1
c2VkIG9ubHkgYnkgV2ViS2l0MiBJUEMgYmVjYXVzZSBEcmFnRGF0YQogICAgIC8vIGlzIGluaXRp
YWxpemVkIGJ5IHRoZSBkZWNvZGVyIGFuZCBub3QgaW4gdGhlIGNvbnN0cnVjdG9yLgogICAgIERy
YWdEYXRhKCkgeyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRGF0
YU9iamVjdEd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRGF0YU9iamVjdEd0
ay5jcHAKaW5kZXggMDVhMmRhOS4uN2Y0NWM0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL0RhdGFPYmplY3RHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2d0ay9EYXRhT2JqZWN0R3RrLmNwcApAQCAtMzIsMTQgKzMyLDE0IEBAIHN0YXRpYyB2b2lk
IHJlcGxhY2VOb25CcmVha2luZ1NwYWNlV2l0aFNwYWNlKFN0cmluZyYgc3RyKQogICAgIHN0ci5y
ZXBsYWNlKE5vbkJyZWFraW5nU3BhY2VDaGFyYWN0ZXIsIFNwYWNlQ2hhcmFjdGVyKTsKIH0KIAot
U3RyaW5nIERhdGFPYmplY3RHdGs6OnRleHQoKQorU3RyaW5nIERhdGFPYmplY3RHdGs6OnRleHQo
KSBjb25zdAogewogICAgIGlmIChtX3JhbmdlKQogICAgICAgICByZXR1cm4gbV9yYW5nZS0+dGV4
dCgpOwogICAgIHJldHVybiBtX3RleHQ7CiB9CiAKLVN0cmluZyBEYXRhT2JqZWN0R3RrOjptYXJr
dXAoKQorU3RyaW5nIERhdGFPYmplY3RHdGs6Om1hcmt1cCgpIGNvbnN0CiB7CiAgICAgaWYgKG1f
cmFuZ2UpCiAgICAgICAgIHJldHVybiBjcmVhdGVNYXJrdXAobV9yYW5nZS5nZXQoKSwgMCwgQW5u
b3RhdGVGb3JJbnRlcmNoYW5nZSwgZmFsc2UsIEFic29sdXRlVVJMcyk7CkBAIC0xMzIsNyArMTMy
LDcgQEAgdm9pZCBEYXRhT2JqZWN0R3RrOjpjbGVhck1hcmt1cCgpCiAgICAgbV9tYXJrdXAgPSAi
IjsKIH0KIAotU3RyaW5nIERhdGFPYmplY3RHdGs6OnVybExhYmVsKCkKK1N0cmluZyBEYXRhT2Jq
ZWN0R3RrOjp1cmxMYWJlbCgpIGNvbnN0CiB7CiAgICAgaWYgKGhhc1RleHQoKSkKICAgICAgICAg
cmV0dXJuIHRleHQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9E
YXRhT2JqZWN0R3RrLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRGF0YU9iamVjdEd0
ay5oCmluZGV4IDU0MjNmODEuLmUyN2JjOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9EYXRhT2JqZWN0R3RrLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3RrL0RhdGFPYmplY3RHdGsuaApAQCAtMzYsMzEgKzM2LDI5IEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBEYXRhT2JqZWN0R3RrKCkpOwogICAgIH0KIAotICAgIGNvbnN0
IEtVUkwmIHVybCgpIHsgcmV0dXJuIG1fdXJsOyB9Ci0gICAgY29uc3QgU3RyaW5nJiB1cmlMaXN0
KCkgeyByZXR1cm4gbV91cmlMaXN0OyB9Ci0gICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIGZpbGVu
YW1lcygpIHsgcmV0dXJuIG1fZmlsZW5hbWVzOyB9Ci0gICAgR2RrUGl4YnVmKiBpbWFnZSgpIHsg
cmV0dXJuIG1faW1hZ2UuZ2V0KCk7IH0KKyAgICBjb25zdCBLVVJMJiB1cmwoKSBjb25zdCB7IHJl
dHVybiBtX3VybDsgfQorICAgIGNvbnN0IFN0cmluZyYgdXJpTGlzdCgpIGNvbnN0IHsgcmV0dXJu
IG1fdXJpTGlzdDsgfQorICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlbmFtZXMoKSBjb25z
dCB7IHJldHVybiBtX2ZpbGVuYW1lczsgfQorICAgIEdka1BpeGJ1ZiogaW1hZ2UoKSBjb25zdCB7
IHJldHVybiBtX2ltYWdlLmdldCgpOyB9CiAgICAgdm9pZCBzZXRSYW5nZShQYXNzUmVmUHRyPFJh
bmdlPiBuZXdSYW5nZSkgeyBtX3JhbmdlID0gbmV3UmFuZ2U7IH0KICAgICB2b2lkIHNldEltYWdl
KEdka1BpeGJ1ZiogbmV3SW1hZ2UpIHsgbV9pbWFnZSA9IG5ld0ltYWdlOyB9Ci0gICAgdm9pZCBz
ZXREcmFnQ29udGV4dChHZGtEcmFnQ29udGV4dCogbmV3RHJhZ0NvbnRleHQpIHsgbV9kcmFnQ29u
dGV4dCA9IG5ld0RyYWdDb250ZXh0OyB9CiAgICAgdm9pZCBzZXRVUkwoY29uc3QgS1VSTCYsIGNv
bnN0IFN0cmluZyYpOwotICAgIGJvb2wgaGFzVGV4dCgpIHsgcmV0dXJuIG1fcmFuZ2UgfHwgIW1f
dGV4dC5pc0VtcHR5KCk7IH0KLSAgICBib29sIGhhc01hcmt1cCgpIHsgcmV0dXJuIG1fcmFuZ2Ug
fHwgIW1fbWFya3VwLmlzRW1wdHkoKTsgfQotICAgIGJvb2wgaGFzVVJJTGlzdCgpIHsgcmV0dXJu
ICFtX3VyaUxpc3QuaXNFbXB0eSgpOyB9Ci0gICAgYm9vbCBoYXNVUkwoKSB7IHJldHVybiAhbV91
cmwuaXNFbXB0eSgpICYmIG1fdXJsLmlzVmFsaWQoKTsgfQotICAgIGJvb2wgaGFzRmlsZW5hbWVz
KCkgeyByZXR1cm4gIW1fZmlsZW5hbWVzLmlzRW1wdHkoKTsgfQotICAgIGJvb2wgaGFzSW1hZ2Uo
KSB7IHJldHVybiBtX2ltYWdlOyB9CisgICAgYm9vbCBoYXNUZXh0KCkgY29uc3QgeyByZXR1cm4g
bV9yYW5nZSB8fCAhbV90ZXh0LmlzRW1wdHkoKTsgfQorICAgIGJvb2wgaGFzTWFya3VwKCkgY29u
c3QgeyByZXR1cm4gbV9yYW5nZSB8fCAhbV9tYXJrdXAuaXNFbXB0eSgpOyB9CisgICAgYm9vbCBo
YXNVUklMaXN0KCkgY29uc3QgeyByZXR1cm4gIW1fdXJpTGlzdC5pc0VtcHR5KCk7IH0KKyAgICBi
b29sIGhhc1VSTCgpIGNvbnN0IHsgcmV0dXJuICFtX3VybC5pc0VtcHR5KCkgJiYgbV91cmwuaXNW
YWxpZCgpOyB9CisgICAgYm9vbCBoYXNGaWxlbmFtZXMoKSBjb25zdCB7IHJldHVybiAhbV9maWxl
bmFtZXMuaXNFbXB0eSgpOyB9CisgICAgYm9vbCBoYXNJbWFnZSgpIGNvbnN0IHsgcmV0dXJuIG1f
aW1hZ2U7IH0KICAgICB2b2lkIGNsZWFyVVJJTGlzdCgpIHsgbV91cmlMaXN0ID0gIiI7IH0KICAg
ICB2b2lkIGNsZWFyVVJMKCkgeyBtX3VybCA9IEtVUkwoKTsgfQogICAgIHZvaWQgY2xlYXJJbWFn
ZSgpIHsgbV9pbWFnZSA9IDA7IH0KLSAgICBHZGtEcmFnQ29udGV4dCogZHJhZ0NvbnRleHQoKSB7
IHJldHVybiBtX2RyYWdDb250ZXh0LmdldCgpOyB9CiAKLSAgICBTdHJpbmcgdGV4dCgpOwotICAg
IFN0cmluZyBtYXJrdXAoKTsKKyAgICBTdHJpbmcgdGV4dCgpIGNvbnN0OworICAgIFN0cmluZyBt
YXJrdXAoKSBjb25zdDsKICAgICB2b2lkIHNldFRleHQoY29uc3QgU3RyaW5nJik7CiAgICAgdm9p
ZCBzZXRNYXJrdXAoY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCBzZXRVUklMaXN0KGNvbnN0IFN0
cmluZyYpOwotICAgIFN0cmluZyB1cmxMYWJlbCgpOworICAgIFN0cmluZyB1cmxMYWJlbCgpIGNv
bnN0OwogICAgIHZvaWQgY2xlYXIoKTsKICAgICB2b2lkIGNsZWFyVGV4dCgpOwogICAgIHZvaWQg
Y2xlYXJNYXJrdXAoKTsKQEAgLTc0LDcgKzcyLDYgQEAgcHJpdmF0ZToKICAgICBTdHJpbmcgbV91
cmlMaXN0OwogICAgIFZlY3RvcjxTdHJpbmc+IG1fZmlsZW5hbWVzOwogICAgIEdSZWZQdHI8R2Rr
UGl4YnVmPiBtX2ltYWdlOwotICAgIEdSZWZQdHI8R2RrRHJhZ0NvbnRleHQ+IG1fZHJhZ0NvbnRl
eHQ7CiAgICAgUmVmUHRyPFJhbmdlPiBtX3JhbmdlOwogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IGUxYjE3
N2QuLjA0YjA1NGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MyBAQAorMjAxMS0wNi0zMCAgQ2Fy
bG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW0dUS10gSW1wbGVtZW50IGRyYWcgYW5k
IGRyb3Agc3VwcG9ydCBpbiBXZWJLaXQyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD02MzcwNgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06IEFkZCBu
ZXcgZmlsZXMgdG8gY29tcGlsYXRpb24uCisgICAgICAgICogU2hhcmVkL2d0ay9Bcmd1bWVudENv
ZGVyc0d0ay5jcHA6IEFkZGVkLgorICAgICAgICAoQ29yZUlQQzo6ZW5jb2RlSW1hZ2UpOiBFbmNv
ZGUgYSBHZGtQaXhidWYuCisgICAgICAgIChDb3JlSVBDOjpkZWNvZGVJbWFnZSk6IERlY29kZSBh
IEdka1BpeGJ1Zi4KKyAgICAgICAgKENvcmVJUEM6OmVuY29kZURhdGFPYmplY3QpOiBFbmNvZGUg
YSBEYXRhT2JqZWN0R3RrLgorICAgICAgICAoQ29yZUlQQzo6ZGVjb2RlRGF0YU9iamVjdCk6IERl
Y29kZSBhIERhdGFPYmplY3RHdGsuCisgICAgICAgIChDb3JlSVBDOjo6OmVuY29kZSk6IEVuY29k
ZSBEcmFnRGF0YS4KKyAgICAgICAgKENvcmVJUEM6Ojo6ZGVjb2RlKTogRGVjb2RlIERyYWdEYXRh
LgorICAgICAgICAqIFNoYXJlZC9ndGsvQXJndW1lbnRDb2RlcnNHdGsuaDoKKyAgICAgICAgKiBV
SVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlBh
Z2VDbGllbnRJbXBsOjpzdGFydERyYWcpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1Bh
Z2VDbGllbnRJbXBsLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmll
d0Jhc2UuY3BwOgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2Jhc2VfaW5pdCk6IFNldCB0aGUg
dmlldyBhcyBhIHBvdGVudGlhbCBkcm9wCisgICAgICAgIGRlc3RpbmF0aW9uLgorICAgICAgICAo
d2Via2l0V2ViVmlld0Jhc2VEcmFnRGF0YUdldCk6CisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFz
ZURyYWdFbmQpOgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VEcmFnRGF0YVJlY2VpdmVkKToK
KyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlRHJhZ0VudGVyKToKKyAgICAgICAgKHdlYmtpdFdl
YlZpZXdCYXNlRHJhZ01vdGlvbik6CisgICAgICAgIChkb0RyYWdMZWF2ZUxhdGVyKToKKyAgICAg
ICAgKHdlYmtpdFdlYlZpZXdCYXNlRHJhZ0xlYXZlKToKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdC
YXNlRHJhZ0Ryb3ApOgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2Jhc2VfY2xhc3NfaW5pdCk6
IE92ZXJyaWRlIEd0a1dpZGdldCBkcmFnIGFuZAorICAgICAgICBkcm9wIG1ldGhvZHMuCisgICAg
ICAgICh3ZWJraXRXZWJWaWV3QmFzZVN0YXJ0RHJhZyk6IENhbGxzIGd0a19kcmFnX2JlZ2luKCkg
dG8gc3RhcnQgYQorICAgICAgICBkcmFnIG9wZXJhdGlvbi4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaDogQWRkCisgICAgICAgIHdlYmtpdFdl
YlZpZXdCYXNlU3RhcnREcmFnKCkuCisgICAgICAgICogVUlQcm9jZXNzL1BhZ2VDbGllbnQuaDog
QWRkIHN0YXJ0RHJhZygpLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlv
bik6CisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW46CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJEcmFnQ2xpZW50LmNwcDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L2d0ay9XZWJEcmFnQ2xpZW50R3RrLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJL
aXQ6OmNvbnZlcnRDYWlyb1N1cmZhY2VUb1NoYXJlYWJsZUJpdG1hcCk6CisgICAgICAgIChXZWJL
aXQ6OldlYkRyYWdDbGllbnQ6OnN0YXJ0RHJhZyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpwZXJmb3JtRHJhZ0Nv
bnRyb2xsZXJBY3Rpb24pOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmg6
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW46CisKIDIw
MTEtMDYtMjkgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IERhbiBCZXJuc3RlaW4uCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtl
ZmlsZS5hbSBiL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCmluZGV4IDQzYWJkZTMuLmU3
ZjY0YjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCkBAIC0xOTMsNiArMTkzLDggQEAgbGlid2Via2l0
Mmd0a19AV0VCS0lUR1RLX0FQSV9NQUpPUl9WRVJTSU9OQF9AV0VCS0lUR1RLX0FQSV9NSU5PUl9W
RVJTSU9OQF9sYV9TT1UKIAlTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRm9udFNtb290aGluZ0xldmVs
LmggXAogCVNvdXJjZS9XZWJLaXQyL1NoYXJlZC9jYWlyby9MYXllclRyZWVDb250ZXh0Q2Fpcm8u
Y3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvY2Fpcm8vU2hhcmVhYmxlQml0bWFwQ2Fpcm8u
Y3BwIFwKKwlTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL0FyZ3VtZW50Q29kZXJzR3RrLmggXAor
CVNvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvQXJndW1lbnRDb2RlcnNHdGsuY3BwIFwKIAlTb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL05hdGl2ZVdlYktleWJvYXJkRXZlbnRHdGsuY3BwIFwKIAlT
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL05hdGl2ZVdlYk1vdXNlRXZlbnRHdGsuY3BwIFwKIAlT
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL05hdGl2ZVdlYldoZWVsRXZlbnRHdGsuY3BwIFwKQEAg
LTY0NCw2ICs2NDYsNyBAQCBsaWJ3ZWJraXQyZ3RrX0BXRUJLSVRHVEtfQVBJX01BSk9SX1ZFUlNJ
T05AX0BXRUJLSVRHVEtfQVBJX01JTk9SX1ZFUlNJT05AX2xhX1NPVQogCVNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvUmVzb3VyY2VDYWNoZS9XZWJSZXNvdXJjZUNhY2hlTWFuYWdlci5oIFwKIAlT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1Jlc291cmNlQ2FjaGUvV2ViUmVzb3VyY2VDYWNoZU1h
bmFnZXIuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0
ay9XZWJDb250ZXh0TWVudUNsaWVudEd0ay5jcHAgXAorCVNvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkRyYWdDbGllbnRHdGsuY3BwIFwKIAlTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJFZGl0b3JDbGllbnRHdGsuY3Bw
IFwKIAlTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJFcnJv
cnNHdGsuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0
ay9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0LmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvU2hhcmVkL2d0ay9Bcmd1bWVudENvZGVyc0d0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvZ3RrL0FyZ3VtZW50Q29kZXJzR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi4wY2ZiZDRlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVk
L2d0ay9Bcmd1bWVudENvZGVyc0d0ay5jcHAKQEAgLTAsMCArMSwyMTkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkFyZ3VtZW50Q29kZXJzR3RrLmgiCisKKyNpbmNsdWRlICJTaGFyZWFibGVC
aXRtYXAuaCIKKyNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlIDxX
ZWJDb3JlL0RhdGFPYmplY3RHdGsuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0RyYWdEYXRhLmg+Cisj
aW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0d0
a1ZlcnNpb25pbmcuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtQ29udGV4dENhaXJvLmg+
CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKwor
bmFtZXNwYWNlIENvcmVJUEMgeworCitzdGF0aWMgdm9pZCBlbmNvZGVJbWFnZShBcmd1bWVudEVu
Y29kZXIqIGVuY29kZXIsIGNvbnN0IEdka1BpeGJ1ZiogcGl4YnVmKQoreworICAgIEludFNpemUg
aW1hZ2VTaXplKGdka19waXhidWZfZ2V0X3dpZHRoKHBpeGJ1ZiksIGdka19waXhidWZfZ2V0X2hl
aWdodChwaXhidWYpKTsKKyAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSBTaGFy
ZWFibGVCaXRtYXA6OmNyZWF0ZVNoYXJlYWJsZShpbWFnZVNpemUsIFNoYXJlYWJsZUJpdG1hcDo6
U3VwcG9ydHNBbHBoYSk7CisgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gZ3JhcGhpY3NDb250
ZXh0ID0gYml0bWFwLT5jcmVhdGVHcmFwaGljc0NvbnRleHQoKTsKKworICAgIGNhaXJvX3QqIGNy
ID0gZ3JhcGhpY3NDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKTsKKyAgICBnZGtfY2Fp
cm9fc2V0X3NvdXJjZV9waXhidWYoY3IsIHBpeGJ1ZiwgMCwgMCk7CisgICAgY2Fpcm9fcGFpbnQo
Y3IpOworCisgICAgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgaGFuZGxlOworICAgIGJpdG1hcC0+
Y3JlYXRlSGFuZGxlKGhhbmRsZSk7CisKKyAgICBlbmNvZGVyLT5lbmNvZGUoaGFuZGxlKTsKK30K
Kworc3RhdGljIGJvb2wgZGVjb2RlSW1hZ2UoQXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBHUmVm
UHRyPEdka1BpeGJ1Zj4mIHBpeGJ1ZikKK3sKKyAgICBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBo
YW5kbGU7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoaGFuZGxlKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0bWFwID0gU2hhcmVhYmxl
Qml0bWFwOjpjcmVhdGUoaGFuZGxlKTsKKyAgICBpZiAoIWJpdG1hcCkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IGJpdG1hcC0+Y3JlYXRlSW1hZ2Uo
KTsKKyAgICBpZiAoIWltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBjYWlyb19z
dXJmYWNlX3QqIHN1cmZhY2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsK
KyAgICBpZiAoIXN1cmZhY2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHBpeGJ1ZiA9
IGFkb3B0R1JlZihnZGtfcGl4YnVmX2dldF9mcm9tX3N1cmZhY2Uoc3VyZmFjZSwgMCwgMCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhaXJvX2lt
YWdlX3N1cmZhY2VfZ2V0X3dpZHRoKHN1cmZhY2UpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0
KHN1cmZhY2UpKSk7CisgICAgaWYgKCFwaXhidWYpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZCBlbmNvZGVEYXRhT2JqZWN0KEFyZ3Vt
ZW50RW5jb2RlciogZW5jb2RlciwgY29uc3QgRGF0YU9iamVjdEd0ayogZGF0YU9iamVjdCkKK3sK
KyAgICBib29sIGhhc1RleHQgPSBkYXRhT2JqZWN0LT5oYXNUZXh0KCk7CisgICAgZW5jb2Rlci0+
ZW5jb2RlKGhhc1RleHQpOworICAgIGlmIChoYXNUZXh0KQorICAgICAgICBlbmNvZGVyLT5lbmNv
ZGUoZGF0YU9iamVjdC0+dGV4dCgpKTsKKworICAgIGJvb2wgaGFzTWFya3VwID0gZGF0YU9iamVj
dC0+aGFzTWFya3VwKCk7CisgICAgZW5jb2Rlci0+ZW5jb2RlKGhhc01hcmt1cCk7CisgICAgaWYg
KGhhc01hcmt1cCkKKyAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKGRhdGFPYmplY3QtPm1hcmt1cCgp
KTsKKworICAgIGJvb2wgaGFzVVJMID0gZGF0YU9iamVjdC0+aGFzVVJMKCk7CisgICAgZW5jb2Rl
ci0+ZW5jb2RlKGhhc1VSTCk7CisgICAgaWYgKGhhc1VSTCkKKyAgICAgICAgZW5jb2Rlci0+ZW5j
b2RlKGRhdGFPYmplY3QtPnVybCgpLnN0cmluZygpKTsKKworICAgIGJvb2wgaGFzVVJJTGlzdCA9
IGRhdGFPYmplY3QtPmhhc1VSSUxpc3QoKTsKKyAgICBlbmNvZGVyLT5lbmNvZGUoaGFzVVJJTGlz
dCk7CisgICAgaWYgKGhhc1VSSUxpc3QpCisgICAgICAgIGVuY29kZXItPmVuY29kZShkYXRhT2Jq
ZWN0LT51cmlMaXN0KCkpOworCisgICAgYm9vbCBoYXNJbWFnZSA9IGRhdGFPYmplY3QtPmhhc0lt
YWdlKCk7CisgICAgZW5jb2Rlci0+ZW5jb2RlKGhhc0ltYWdlKTsKKyAgICBpZiAoaGFzSW1hZ2Up
CisgICAgICAgIGVuY29kZUltYWdlKGVuY29kZXIsIGRhdGFPYmplY3QtPmltYWdlKCkpOworfQor
CitzdGF0aWMgYm9vbCBkZWNvZGVEYXRhT2JqZWN0KEFyZ3VtZW50RGVjb2RlciogZGVjb2Rlciwg
UmVmUHRyPERhdGFPYmplY3RHdGs+JiBkYXRhT2JqZWN0KQoreworICAgIFJlZlB0cjxEYXRhT2Jq
ZWN0R3RrPiBkYXRhID0gRGF0YU9iamVjdEd0azo6Y3JlYXRlKCk7CisKKyAgICBib29sIGhhc1Rl
eHQ7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoaGFzVGV4dCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBpZiAoaGFzVGV4dCkgeworICAgICAgICBTdHJpbmcgdGV4dDsKKyAgICAgICAg
aWYgKCFkZWNvZGVyLT5kZWNvZGUodGV4dCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIGRhdGEtPnNldFRleHQodGV4dCk7CisgICAgfQorCisgICAgYm9vbCBoYXNNYXJrdXA7
CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoaGFzTWFya3VwKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGlmIChoYXNNYXJrdXApIHsKKyAgICAgICAgU3RyaW5nIG1hcmt1cDsKKyAgICAg
ICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUobWFya3VwKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgZGF0YS0+c2V0TWFya3VwKG1hcmt1cCk7CisgICAgfQorCisgICAgYm9vbCBo
YXNVUkw7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoaGFzVVJMKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGlmIChoYXNVUkwpIHsKKyAgICAgICAgU3RyaW5nIHVybDsKKyAgICAgICAg
aWYgKCFkZWNvZGVyLT5kZWNvZGUodXJsKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgZGF0YS0+c2V0VVJMKEtVUkwoS1VSTCgpLCB1cmwpLCBTdHJpbmcoKSk7CisgICAgfQor
CisgICAgYm9vbCBoYXNVUklMaXN0OworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGhhc1VSSUxp
c3QpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGhhc1VSSUxpc3QpIHsKKyAgICAg
ICAgU3RyaW5nIHVyaUxpc3Q7CisgICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKHVyaUxpc3Qp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBkYXRhLT5zZXRVUklMaXN0KHVy
aUxpc3QpOworICAgIH0KKworICAgIGJvb2wgaGFzSW1hZ2U7CisgICAgaWYgKCFkZWNvZGVyLT5k
ZWNvZGUoaGFzSW1hZ2UpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGhhc0ltYWdl
KSB7CisgICAgICAgIEdSZWZQdHI8R2RrUGl4YnVmPiBpbWFnZTsKKyAgICAgICAgaWYgKCFkZWNv
ZGVJbWFnZShkZWNvZGVyLCBpbWFnZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIGRhdGEtPnNldEltYWdlKGltYWdlLmdldCgpKTsKKyAgICB9CisKKyAgICBkYXRhT2JqZWN0
ID0gZGF0YTsKKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEFyZ3VtZW50Q29kZXI8RHJh
Z0RhdGE+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBjb25zdCBEcmFnRGF0YSYg
ZHJhZ0RhdGEpCit7CisgICAgZW5jb2Rlci0+ZW5jb2RlKGRyYWdEYXRhLmNsaWVudFBvc2l0aW9u
KCkpOworICAgIGVuY29kZXItPmVuY29kZShkcmFnRGF0YS5nbG9iYWxQb3NpdGlvbigpKTsKKyAg
ICBlbmNvZGVyLT5lbmNvZGUoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGRyYWdEYXRhLmRyYWdnaW5n
U291cmNlT3BlcmF0aW9uTWFzaygpKSk7CisgICAgZW5jb2Rlci0+ZW5jb2RlKHN0YXRpY19jYXN0
PHVpbnQ2NF90PihkcmFnRGF0YS5mbGFncygpKSk7CisKKyAgICBEYXRhT2JqZWN0R3RrKiBwbGF0
Zm9ybURhdGEgPSBkcmFnRGF0YS5wbGF0Zm9ybURhdGEoKTsKKyAgICBlbmNvZGVyLT5lbmNvZGUo
c3RhdGljX2Nhc3Q8Ym9vbD4ocGxhdGZvcm1EYXRhKSk7CisgICAgaWYgKHBsYXRmb3JtRGF0YSkK
KyAgICAgICAgZW5jb2RlRGF0YU9iamVjdChlbmNvZGVyLCBwbGF0Zm9ybURhdGEpOworfQorCiti
b29sIEFyZ3VtZW50Q29kZXI8RHJhZ0RhdGE+OjpkZWNvZGUoQXJndW1lbnREZWNvZGVyKiBkZWNv
ZGVyLCBEcmFnRGF0YSYgZHJhZ0RhdGEpCit7CisgICAgSW50UG9pbnQgY2xpZW50UG9zaXRpb247
CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoY2xpZW50UG9zaXRpb24pKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBJbnRQb2ludCBnbG9iYWxQb3NpdGlvbjsKKyAgICBpZiAoIWRlY29k
ZXItPmRlY29kZShnbG9iYWxQb3NpdGlvbikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IHVpbnQ2NF90IHNvdXJjZU9wZXJhdGlvbk1hc2s7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUo
c291cmNlT3BlcmF0aW9uTWFzaykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHVpbnQ2
NF90IGZsYWdzOworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGZsYWdzKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgYm9vbCBoYXNQbGF0Zm9ybURhdGE7CisgICAgaWYgKCFkZWNvZGVy
LT5kZWNvZGUoaGFzUGxhdGZvcm1EYXRhKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
UmVmUHRyPERhdGFPYmplY3RHdGs+IHBsYXRmb3JtRGF0YTsKKyAgICBpZiAoaGFzUGxhdGZvcm1E
YXRhKSB7CisgICAgICAgIGlmICghZGVjb2RlRGF0YU9iamVjdChkZWNvZGVyLCBwbGF0Zm9ybURh
dGEpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGRyYWdEYXRhID0g
RHJhZ0RhdGEocGxhdGZvcm1EYXRhLnJlbGVhc2UoKS5sZWFrUmVmKCksIGNsaWVudFBvc2l0aW9u
LCBnbG9iYWxQb3NpdGlvbiwgc3RhdGljX2Nhc3Q8RHJhZ09wZXJhdGlvbj4oc291cmNlT3BlcmF0
aW9uTWFzayksCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxEcmFnQXBwbGlj
YXRpb25GbGFncz4oZmxhZ3MpKTsKKworICAgIHJldHVybiB0cnVlOworfQorCit9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL0FyZ3VtZW50Q29kZXJzR3RrLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL0FyZ3VtZW50Q29kZXJzR3RrLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uODJmNDZkMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9ndGsvQXJndW1lbnRDb2RlcnNHdGsuaApAQCAtMCwwICsxLDQ1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
QXJndW1lbnRDb2RlcnNHdGtfaAorI2RlZmluZSBBcmd1bWVudENvZGVyc0d0a19oCisKKyNpbmNs
dWRlICJBcmd1bWVudENvZGVycy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBEYXRh
T2JqZWN0R3RrOworY2xhc3MgRHJhZ0RhdGE7Cit9CisKK25hbWVzcGFjZSBDb3JlSVBDIHsKKwor
dGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpEcmFnRGF0YT4geworICAg
IHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXIqLCBjb25zdCBXZWJDb3JlOjpEcmFn
RGF0YSYpOworICAgIHN0YXRpYyBib29sIGRlY29kZShBcmd1bWVudERlY29kZXIqLCBXZWJDb3Jl
OjpEcmFnRGF0YSYpOworfTsKKworfSAvLyBuYW1lc3BhY2UgQ29yZUlQQworCisjZW5kaWYgLy8g
QXJndW1lbnRDb2RlcnNHdGtfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvUGFnZUNsaWVudEltcGwuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvUGFnZUNsaWVudEltcGwuY3BwCmluZGV4IGFiNTY0NmYuLjVhODk3ZTIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5jcHAK
QEAgLTI4NCw0ICsyODQsOSBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpjb3VudFN0cmluZ01hdGNo
ZXNJbkN1c3RvbVJlcHJlc2VudGF0aW9uKGNvbnN0IFN0cmluZyYsIEZpbgogICAgIG5vdEltcGxl
bWVudGVkKCk7CiB9CiAKK3ZvaWQgUGFnZUNsaWVudEltcGw6OnN0YXJ0RHJhZyhjb25zdCBXZWJD
b3JlOjpEcmFnRGF0YSYgZHJhZ0RhdGEsIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBkcmFn
SW1hZ2UpCit7CisgICAgd2Via2l0V2ViVmlld0Jhc2VTdGFydERyYWcoV0VCS0lUX1dFQl9WSUVX
X0JBU0UobV92aWV3V2lkZ2V0KSwgZHJhZ0RhdGEsIGRyYWdJbWFnZSk7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvUGFnZUNsaWVudEltcGwuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1Bh
Z2VDbGllbnRJbXBsLmgKaW5kZXggZWE1NDg0My4uYWMzMTc4ZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5oCkBAIC04OSw2ICs4OSw3
IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGdldEVkaXRvckNvbW1hbmRzRm9yS2V5RXZl
bnQoY29uc3QgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudCYsIFZlY3RvcjxXVEY6OlN0cmluZz4mKTsK
ICAgICB2aXJ0dWFsIHZvaWQgZmluZFN0cmluZ0luQ3VzdG9tUmVwcmVzZW50YXRpb24oY29uc3Qg
U3RyaW5nJiwgRmluZE9wdGlvbnMsIHVuc2lnbmVkKTsKICAgICB2aXJ0dWFsIHZvaWQgY291bnRT
dHJpbmdNYXRjaGVzSW5DdXN0b21SZXByZXNlbnRhdGlvbihjb25zdCBTdHJpbmcmLCBGaW5kT3B0
aW9ucywgdW5zaWduZWQpOworICAgIHZpcnR1YWwgdm9pZCBzdGFydERyYWcoY29uc3QgV2ViQ29y
ZTo6RHJhZ0RhdGEmLCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gZHJhZ0ltYWdlKTsKIAog
I2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICB2aXJ0dWFsIHZvaWQgcGFnZURp
ZEVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwCmluZGV4IDdmYWY4NDIu
LjFlMDE5MGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFdlYlZpZXdCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0
ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAKQEAgLTI4LDE1ICsyOCwyMSBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIldlYktpdFdlYlZpZXdCYXNlLmgiCiAKKyNpbmNsdWRlICJDbGlw
Ym9hcmRHdGsuaCIKKyNpbmNsdWRlICJDbGlwYm9hcmRVdGlsaXRpZXNHdGsuaCIKKyNpbmNsdWRl
ICJEYXRhT2JqZWN0R3RrLmgiCisjaW5jbHVkZSAiRHJhZ0RhdGEuaCIKICNpbmNsdWRlICJEcmF3
aW5nQXJlYVByb3h5SW1wbC5oIgogI2luY2x1ZGUgIkdPd25QdHJHdGsuaCIKICNpbmNsdWRlICJH
dGtDbGlja0NvdW50ZXIuaCIKKyNpbmNsdWRlICJHdGtVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJH
dGtWZXJzaW9uaW5nLmgiCiAjaW5jbHVkZSAiTmF0aXZlV2ViS2V5Ym9hcmRFdmVudC5oIgogI2lu
Y2x1ZGUgIk5hdGl2ZVdlYk1vdXNlRXZlbnQuaCIKICNpbmNsdWRlICJOYXRpdmVXZWJXaGVlbEV2
ZW50LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJQYWdlQ2xpZW50
SW1wbC5oIgorI2luY2x1ZGUgIlBhc3RlYm9hcmRIZWxwZXIuaCIKICNpbmNsdWRlICJSZWZQdHJD
YWlyby5oIgogI2luY2x1ZGUgIlJlZ2lvbi5oIgogI2luY2x1ZGUgIldlYkNvbnRleHQuaCIKQEAg
LTQ5LDYgKzU1LDE1IEBACiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CiAKK3R5cGVkZWYgc3RydWN0IERyb3BDb250ZXh0XyB7CisgICAgR3RrV2lkZ2V0
KiB3aWRnZXQ7CisgICAgR1JlZlB0cjxHZGtEcmFnQ29udGV4dD4gZ2RrQ29udGV4dDsKKyAgICBS
ZWZQdHI8RGF0YU9iamVjdEd0az4gZGF0YU9iamVjdDsKKyAgICBJbnRQb2ludCBsYXN0TW90aW9u
UG9zaXRpb247CisgICAgc2l6ZV90IHBlbmRpbmdEYXRhUmVxdWVzdHM7CisgICAgYm9vbCBkcm9w
SGFwcGVuZWQ7Cit9IERyb3BDb250ZXh0OworCiBzdHJ1Y3QgX1dlYktpdFdlYlZpZXdCYXNlUHJp
dmF0ZSB7CiAgICAgT3duUHRyPFBhZ2VDbGllbnRJbXBsPiBwYWdlQ2xpZW50OwogICAgIFJlZlB0
cjxXZWJQYWdlUHJveHk+IHBhZ2VQcm94eTsKQEAgLTEzMCwxMSArMTQ1LDE2IEBAIHN0YXRpYyB2
b2lkIHdlYmtpdF93ZWJfdmlld19iYXNlX2luaXQoV2ViS2l0V2ViVmlld0Jhc2UqIHdlYmtpdFdl
YlZpZXdCYXNlKQogCiAgICAgcHJpdi0+aXNQYWdlQWN0aXZlID0gVFJVRTsKIAotICAgIGd0a193
aWRnZXRfc2V0X2RvdWJsZV9idWZmZXJlZChHVEtfV0lER0VUKHdlYmtpdFdlYlZpZXdCYXNlKSwg
RkFMU0UpOwotICAgIGd0a193aWRnZXRfc2V0X2Nhbl9mb2N1cyhHVEtfV0lER0VUKHdlYmtpdFdl
YlZpZXdCYXNlKSwgVFJVRSk7CisgICAgR3RrV2lkZ2V0KiB2aWV3V2lkZ2V0ID0gR1RLX1dJREdF
VCh3ZWJraXRXZWJWaWV3QmFzZSk7CisgICAgZ3RrX3dpZGdldF9zZXRfZG91YmxlX2J1ZmZlcmVk
KHZpZXdXaWRnZXQsIEZBTFNFKTsKKyAgICBndGtfd2lkZ2V0X3NldF9jYW5fZm9jdXModmlld1dp
ZGdldCwgVFJVRSk7CiAgICAgcHJpdi0+aW1Db250ZXh0ID0gZ3RrX2ltX211bHRpY29udGV4dF9u
ZXcoKTsKIAotICAgIHByaXYtPnBhZ2VDbGllbnQgPSBQYWdlQ2xpZW50SW1wbDo6Y3JlYXRlKEdU
S19XSURHRVQod2Via2l0V2ViVmlld0Jhc2UpKTsKKyAgICBwcml2LT5wYWdlQ2xpZW50ID0gUGFn
ZUNsaWVudEltcGw6OmNyZWF0ZSh2aWV3V2lkZ2V0KTsKKworICAgIGd0a19kcmFnX2Rlc3Rfc2V0
KHZpZXdXaWRnZXQsIHN0YXRpY19jYXN0PEd0a0Rlc3REZWZhdWx0cz4oMCksIDAsIDAsCisgICAg
ICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8R2RrRHJhZ0FjdGlvbj4oR0RLX0FDVElPTl9D
T1BZIHwgR0RLX0FDVElPTl9NT1ZFIHwgR0RLX0FDVElPTl9MSU5LIHwgR0RLX0FDVElPTl9QUklW
QVRFKSk7CisgICAgZ3RrX2RyYWdfZGVzdF9zZXRfdGFyZ2V0X2xpc3Qodmlld1dpZGdldCwgUGFz
dGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+dGFyZ2V0TGlzdCgpKTsK
IH0KIAogc3RhdGljIGdib29sZWFuIHdlYmtpdFdlYlZpZXdCYXNlRHJhdyhHdGtXaWRnZXQqIHdp
ZGdldCwgY2Fpcm9fdCogY3IpCkBAIC0yODEsNiArMzAxLDE1MCBAQCBzdGF0aWMgZ2Jvb2xlYW4g
d2Via2l0V2ViVmlld0Jhc2VRdWVyeVRvb2x0aXAoR3RrV2lkZ2V0KiB3aWRnZXQsIGdpbnQgeCwg
Z2ludCB5LAogICAgIHJldHVybiBUUlVFOwogfQogCitzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3
QmFzZURyYWdEYXRhR2V0KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtEcmFnQ29udGV4dCogY29udGV4
dCwgR3RrU2VsZWN0aW9uRGF0YSogc2VsZWN0aW9uRGF0YSwgZ3VpbnQgaW5mbywgZ3VpbnQgdGlt
ZSkKK3sKKyAgICBEYXRhT2JqZWN0R3RrKiBkYXRhT2JqZWN0ID0gc3RhdGljX2Nhc3Q8RGF0YU9i
amVjdEd0ayo+KGdfb2JqZWN0X2dldF9kYXRhKEdfT0JKRUNUKGNvbnRleHQpLCAiZHJhZy1kYXRh
LW9iamVjdCIpKTsKKyAgICBpZiAoIWRhdGFPYmplY3QpCisgICAgICAgIHJldHVybjsKKworICAg
IFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCktPmZpbGxTZWxlY3Rp
b25EYXRhKHNlbGVjdGlvbkRhdGEsIGluZm8sIGRhdGFPYmplY3QpOworfQorCitzdGF0aWMgdm9p
ZCB3ZWJraXRXZWJWaWV3QmFzZURyYWdFbmQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0RyYWdDb250
ZXh0KiBjb250ZXh0KQoreworICAgIERhdGFPYmplY3RHdGsqIGRhdGFPYmplY3QgPSBzdGF0aWNf
Y2FzdDxEYXRhT2JqZWN0R3RrKj4oZ19vYmplY3RfZ2V0X2RhdGEoR19PQkpFQ1QoY29udGV4dCks
ICJkcmFnLWRhdGEtb2JqZWN0IikpOworICAgIGlmICghZGF0YU9iamVjdCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1QoY29udGV4dCksICJkcmFnLWRh
dGEtb2JqZWN0IiwgMCk7CisgICAgZGVsZXRlIGRhdGFPYmplY3Q7CisKKyAgICBHZGtEZXZpY2Uq
IGRldmljZSA9IGdka19kcmFnX2NvbnRleHRfZ2V0X2RldmljZShjb250ZXh0KTsKKyAgICBpbnQg
eCwgeTsKKyAgICBnZGtfZGV2aWNlX2dldF93aW5kb3dfYXRfcG9zaXRpb24oZGV2aWNlLCAmeCwg
JnkpOworICAgIGludCB4Um9vdCwgeVJvb3Q7CisgICAgZ2RrX2RldmljZV9nZXRfcG9zaXRpb24o
ZGV2aWNlLCAwLCAmeFJvb3QsICZ5Um9vdCk7CisgICAgV2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZp
ZXdCYXNlID0gV0VCS0lUX1dFQl9WSUVXX0JBU0Uod2lkZ2V0KTsKKyAgICB3ZWJWaWV3QmFzZS0+
cHJpdi0+cGFnZVByb3h5LT5kcmFnRW5kZWQoSW50UG9pbnQoeCwgeSksIEludFBvaW50KHhSb290
LCB5Um9vdCksIGdka0RyYWdBY3Rpb25Ub0RyYWdPcGVyYXRpb24oZ2RrX2RyYWdfY29udGV4dF9n
ZXRfc2VsZWN0ZWRfYWN0aW9uKGNvbnRleHQpKSk7Cit9CisKK3N0YXRpYyB2b2lkIHdlYmtpdFdl
YlZpZXdCYXNlRHJhZ0RhdGFSZWNlaXZlZChHdGtXaWRnZXQqIHdpZGdldCwgR2RrRHJhZ0NvbnRl
eHQqIGNvbnRleHQsIGdpbnQgeCwgZ2ludCB5LCBHdGtTZWxlY3Rpb25EYXRhKiBzZWxlY3Rpb25E
YXRhLCBndWludCBpbmZvLCBndWludCB0aW1lKQoreworICAgIERyb3BDb250ZXh0KiBkcm9wQ29u
dGV4dCA9IHN0YXRpY19jYXN0PERyb3BDb250ZXh0Kj4oZ19vYmplY3RfZ2V0X2RhdGEoR19PQkpF
Q1QoY29udGV4dCksICJkcm9wLWNvbnRleHQiKSk7CisgICAgaWYgKCFkcm9wQ29udGV4dCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgZHJvcENvbnRleHQtPnBlbmRpbmdEYXRhUmVxdWVzdHMtLTsK
KyAgICBQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpLT5maWxsRGF0
YU9iamVjdEZyb21Ecm9wRGF0YShzZWxlY3Rpb25EYXRhLCBpbmZvLCBkcm9wQ29udGV4dC0+ZGF0
YU9iamVjdC5nZXQoKSk7CisKKyAgICBpZiAoZHJvcENvbnRleHQtPnBlbmRpbmdEYXRhUmVxdWVz
dHMpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFRoZSBjb29yZGluYXRlcyBwYXNzZWQgdG8g
ZHJhZy1kYXRhLXJlY2VpdmVkIHNpZ25hbCBhcmUgc29tZXRpbWVzCisgICAgLy8gaW5hY2N1cmF0
ZSBpbiBEUlQsIHNvIHVzZSB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIGxhc3QgbW90aW9uIGV2ZW50
LgorICAgIGNvbnN0IEludFBvaW50JiBwb3NpdGlvbiA9IGRyb3BDb250ZXh0LT5sYXN0TW90aW9u
UG9zaXRpb247CisKKyAgICAvLyBJZiB0aGVyZSBhcmUgbm8gbW9yZSBwZW5kaW5nIHJlcXVlc3Rz
LCBzdGFydCBzZW5kaW5nIGRyYWdnaW5nIGRhdGEgdG8gV2ViQ29yZS4KKyAgICBEcmFnRGF0YSBk
cmFnRGF0YShkcm9wQ29udGV4dC0+ZGF0YU9iamVjdC5nZXQoKSwgcG9zaXRpb24sIGNvbnZlcnRX
aWRnZXRQb2ludFRvU2NyZWVuUG9pbnQod2lkZ2V0LCBwb3NpdGlvbiksCisgICAgICAgICAgICAg
ICAgICAgICAgZ2RrRHJhZ0FjdGlvblRvRHJhZ09wZXJhdGlvbihnZGtfZHJhZ19jb250ZXh0X2dl
dF9hY3Rpb25zKGNvbnRleHQpKSk7CisgICAgV2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZpZXdCYXNl
ID0gV0VCS0lUX1dFQl9WSUVXX0JBU0Uod2lkZ2V0KTsKKyAgICB3ZWJWaWV3QmFzZS0+cHJpdi0+
cGFnZVByb3h5LT5kcmFnRW50ZXJlZCgmZHJhZ0RhdGEpOworICAgIGdka19kcmFnX3N0YXR1cyhj
b250ZXh0LCBnZGtfZHJhZ19jb250ZXh0X2dldF9zdWdnZXN0ZWRfYWN0aW9uKGNvbnRleHQpLCB0
aW1lKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VEcmFnRW50ZXIoR3RrV2lk
Z2V0KiB3aWRnZXQsIEdka0RyYWdDb250ZXh0KiBjb250ZXh0LCBnaW50IHgsIGdpbnQgeSwgZ3Vp
bnQgdGltZSkKK3sKKyAgICBEcm9wQ29udGV4dCogZHJvcENvbnRleHQgPSBuZXcgRHJvcENvbnRl
eHQ7CisgICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1QoY29udGV4dCksICJkcm9wLWNvbnRl
eHQiLCBkcm9wQ29udGV4dCk7CisgICAgZHJvcENvbnRleHQtPmxhc3RNb3Rpb25Qb3NpdGlvbiA9
IEludFBvaW50KHgsIHkpOworICAgIGRyb3BDb250ZXh0LT5kYXRhT2JqZWN0ID0gRGF0YU9iamVj
dEd0azo6Y3JlYXRlKCk7CisgICAgZHJvcENvbnRleHQtPndpZGdldCA9IHdpZGdldDsKKyAgICBk
cm9wQ29udGV4dC0+Z2RrQ29udGV4dCA9IGNvbnRleHQ7CisgICAgZHJvcENvbnRleHQtPmRyb3BI
YXBwZW5lZCA9IGZhbHNlOworCisgICAgVmVjdG9yPEdka0F0b20+IGFjY2VwdGFibGVUYXJnZXRz
KFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCktPmRyb3BBdG9tc0Zv
ckNvbnRleHQod2lkZ2V0LCBjb250ZXh0KSk7CisgICAgZHJvcENvbnRleHQtPnBlbmRpbmdEYXRh
UmVxdWVzdHMgPSBhY2NlcHRhYmxlVGFyZ2V0cy5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBhY2NlcHRhYmxlVGFyZ2V0cy5zaXplKCk7IGkrKykKKyAgICAgICAgZ3RrX2RyYWdf
Z2V0X2RhdGEod2lkZ2V0LCBjb250ZXh0LCBhY2NlcHRhYmxlVGFyZ2V0cy5hdChpKSwgdGltZSk7
Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRXZWJWaWV3QmFzZURyYWdNb3Rpb24oR3RrV2lk
Z2V0KiB3aWRnZXQsIEdka0RyYWdDb250ZXh0KiBjb250ZXh0LCBnaW50IHgsIGdpbnQgeSwgZ3Vp
bnQgdGltZSkKK3sKKyAgICBEcm9wQ29udGV4dCogZHJvcENvbnRleHQgPSBzdGF0aWNfY2FzdDxE
cm9wQ29udGV4dCo+KGdfb2JqZWN0X2dldF9kYXRhKEdfT0JKRUNUKGNvbnRleHQpLCAiZHJvcC1j
b250ZXh0IikpOworICAgIGlmICghZHJvcENvbnRleHQpIHsKKyAgICAgICAgd2Via2l0V2ViVmll
d0Jhc2VEcmFnRW50ZXIod2lkZ2V0LCBjb250ZXh0LCB4LCB5LCB0aW1lKTsKKyAgICAgICAgcmV0
dXJuIFRSVUU7CisgICAgfQorCisgICAgZHJvcENvbnRleHQtPmxhc3RNb3Rpb25Qb3NpdGlvbiA9
IEludFBvaW50KHgsIHkpOworICAgIGlmIChkcm9wQ29udGV4dC0+cGVuZGluZ0RhdGFSZXF1ZXN0
cykKKyAgICAgICAgcmV0dXJuIFRSVUU7CisKKyAgICBjb25zdCBJbnRQb2ludCYgcG9zaXRpb24g
PSBkcm9wQ29udGV4dC0+bGFzdE1vdGlvblBvc2l0aW9uOworICAgIERyYWdEYXRhIGRyYWdEYXRh
KGRyb3BDb250ZXh0LT5kYXRhT2JqZWN0LmdldCgpLCBwb3NpdGlvbiwgY29udmVydFdpZGdldFBv
aW50VG9TY3JlZW5Qb2ludCh3aWRnZXQsIHBvc2l0aW9uKSwKKyAgICAgICAgICAgICAgICAgICAg
ICBnZGtEcmFnQWN0aW9uVG9EcmFnT3BlcmF0aW9uKGdka19kcmFnX2NvbnRleHRfZ2V0X2FjdGlv
bnMoY29udGV4dCkpKTsKKyAgICBXZWJLaXRXZWJWaWV3QmFzZSogd2ViVmlld0Jhc2UgPSBXRUJL
SVRfV0VCX1ZJRVdfQkFTRSh3aWRnZXQpOworICAgIHdlYlZpZXdCYXNlLT5wcml2LT5wYWdlUHJv
eHktPmRyYWdVcGRhdGVkKCZkcmFnRGF0YSk7CisgICAgRHJhZ09wZXJhdGlvbiBvcGVyYXRpb24g
PSB3ZWJWaWV3QmFzZS0+cHJpdi0+cGFnZVByb3h5LT5kcmFnT3BlcmF0aW9uKCk7CisgICAgaWYg
KG9wZXJhdGlvbiAhPSBEcmFnT3BlcmF0aW9uTm9uZSkKKyAgICAgICAgZ2RrX2RyYWdfc3RhdHVz
KGNvbnRleHQsIGRyYWdPcGVyYXRpb25Ub1NpbmdsZUdka0RyYWdBY3Rpb24ob3BlcmF0aW9uKSwg
dGltZSk7CisKKyAgICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIGdib29sZWFuIGRvRHJhZ0xl
YXZlTGF0ZXIoRHJvcENvbnRleHQqIGRyb3BDb250ZXh0KQoreworICAgIC8vIElmIHRoZSB2aWV3
IGRvZXNuJ3Qga25vdyBhYm91dCB0aGUgZHJhZyB5ZXQgKHRoZXJlIGFyZSBzdGlsbCBwZW5kaW5n
IGRhdGEpCisgICAgLy8gcmVxdWVzdHMsIGRvbid0IHVwZGF0ZSBpdCB3aXRoIGluZm9ybWF0aW9u
IGFib3V0IHRoZSBkcmFnLgorICAgIGlmIChkcm9wQ29udGV4dC0+cGVuZGluZ0RhdGFSZXF1ZXN0
cykKKyAgICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgLy8gRG9uJ3QgY2FsbCBkcmFnRXhpdGVk
IGlmIHdlIGhhdmUganVzdCByZWNlaXZlZCBhIGRyYWctZHJvcCBzaWduYWwuIFRoaXMKKyAgICAv
LyBoYXBwZW5zIGluIHRoZSBjYXNlIG9mIGEgc3VjY2Vzc2Z1bCBkcm9wIG9udG8gdGhlIHZpZXcu
CisgICAgaWYgKCFkcm9wQ29udGV4dC0+ZHJvcEhhcHBlbmVkKSB7CisgICAgICAgIGNvbnN0IElu
dFBvaW50JiBwb3NpdGlvbiA9IGRyb3BDb250ZXh0LT5sYXN0TW90aW9uUG9zaXRpb247CisgICAg
ICAgIERyYWdEYXRhIGRyYWdEYXRhKGRyb3BDb250ZXh0LT5kYXRhT2JqZWN0LmdldCgpLCBwb3Np
dGlvbiwgY29udmVydFdpZGdldFBvaW50VG9TY3JlZW5Qb2ludChkcm9wQ29udGV4dC0+d2lkZ2V0
LCBwb3NpdGlvbiksIERyYWdPcGVyYXRpb25Ob25lKTsKKyAgICAgICAgV2ViS2l0V2ViVmlld0Jh
c2UqIHdlYlZpZXdCYXNlID0gV0VCS0lUX1dFQl9WSUVXX0JBU0UoZHJvcENvbnRleHQtPndpZGdl
dCk7CisgICAgICAgIHdlYlZpZXdCYXNlLT5wcml2LT5wYWdlUHJveHktPmRyYWdFeGl0ZWQoJmRy
YWdEYXRhKTsKKyAgICAgICAgd2ViVmlld0Jhc2UtPnByaXYtPnBhZ2VQcm94eS0+cmVzZXREcmFn
T3BlcmF0aW9uKCk7CisgICAgfQorCisgICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1QoZHJv
cENvbnRleHQtPmdka0NvbnRleHQuZ2V0KCkpLCAiZHJvcC1jb250ZXh0IiwgMCk7CisgICAgZGVs
ZXRlIGRyb3BDb250ZXh0OworCisgICAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0aWMgdm9pZCB3
ZWJraXRXZWJWaWV3QmFzZURyYWdMZWF2ZShHdGtXaWRnZXQqIHdpZGdldCwgR2RrRHJhZ0NvbnRl
eHQqIGNvbnRleHQsIGd1aW50IHRpbWUpCit7CisgICAgRHJvcENvbnRleHQqIGRyb3BDb250ZXh0
ID0gc3RhdGljX2Nhc3Q8RHJvcENvbnRleHQqPihnX29iamVjdF9nZXRfZGF0YShHX09CSkVDVChj
b250ZXh0KSwgImRyb3AtY29udGV4dCIpKTsKKyAgICBpZiAoIWRyb3BDb250ZXh0KQorICAgICAg
ICByZXR1cm47CisKKyAgICAvLyBEdXJpbmcgYSBkcm9wIEdUSysgd2lsbCBmaXJlIGEgZHJhZy1s
ZWF2ZSBzaWduYWwgcmlnaHQgYmVmb3JlIGZpcmluZworICAgIC8vIHRoZSBkcmFnLWRyb3Agc2ln
bmFsLiBXZSB3YW50IHRoZSBhY3Rpb25zIGZvciBkcmFnLWxlYXZlIHRvIGhhcHBlbiBhZnRlcgor
ICAgIC8vIHRob3NlIGZvciBkcmFnLWRyb3AsIHNvIHNjaGVkdWxlIHRoZW0gdG8gaGFwcGVuIGFz
eW5jaHJvbm91c2x5IGhlcmUuCisgICAgZ19pZGxlX2FkZF9mdWxsKEdfUFJJT1JJVFlfREVGQVVM
VCwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4oZG9EcmFnTGVhdmVMYXRlciksIGRyb3BD
b250ZXh0LCBzdGF0aWNfY2FzdDxHRGVzdHJveU5vdGlmeT4oMCkpOworfQorCitzdGF0aWMgZ2Jv
b2xlYW4gd2Via2l0V2ViVmlld0Jhc2VEcmFnRHJvcChHdGtXaWRnZXQqIHdpZGdldCwgR2RrRHJh
Z0NvbnRleHQqIGNvbnRleHQsIGdpbnQgeCwgZ2ludCB5LCBndWludCB0aW1lKQoreworICAgIERy
b3BDb250ZXh0KiBkcm9wQ29udGV4dCA9IHN0YXRpY19jYXN0PERyb3BDb250ZXh0Kj4oZ19vYmpl
Y3RfZ2V0X2RhdGEoR19PQkpFQ1QoY29udGV4dCksICJkcm9wLWNvbnRleHQiKSk7CisgICAgaWYg
KCFkcm9wQ29udGV4dCkKKyAgICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgZHJvcENvbnRleHQt
PmRyb3BIYXBwZW5lZCA9IHRydWU7CisKKyAgICBJbnRQb2ludCBwb3NpdGlvbih4LCB5KTsKKyAg
ICBEcmFnRGF0YSBkcmFnRGF0YShkcm9wQ29udGV4dC0+ZGF0YU9iamVjdC5nZXQoKSwgcG9zaXRp
b24sIGNvbnZlcnRXaWRnZXRQb2ludFRvU2NyZWVuUG9pbnQod2lkZ2V0LCBwb3NpdGlvbiksIGdk
a0RyYWdBY3Rpb25Ub0RyYWdPcGVyYXRpb24oZ2RrX2RyYWdfY29udGV4dF9nZXRfYWN0aW9ucyhj
b250ZXh0KSkpOworICAgIFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJWaWV3QmFzZSA9IFdFQktJVF9X
RUJfVklFV19CQVNFKHdpZGdldCk7CisgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIGhhbmRs
ZTsKKyAgICB3ZWJWaWV3QmFzZS0+cHJpdi0+cGFnZVByb3h5LT5wZXJmb3JtRHJhZygmZHJhZ0Rh
dGEsIFN0cmluZygpLCBoYW5kbGUpOworICAgIGd0a19kcmFnX2ZpbmlzaChjb250ZXh0LCBUUlVF
LCBGQUxTRSwgdGltZSk7CisKKyAgICByZXR1cm4gVFJVRTsKK30KKwogc3RhdGljIHZvaWQgd2Vi
a2l0X3dlYl92aWV3X2Jhc2VfY2xhc3NfaW5pdChXZWJLaXRXZWJWaWV3QmFzZUNsYXNzKiB3ZWJr
aXRXZWJWaWV3QmFzZUNsYXNzKQogewogICAgIEd0a1dpZGdldENsYXNzKiB3aWRnZXRDbGFzcyA9
IEdUS19XSURHRVRfQ0xBU1Mod2Via2l0V2ViVmlld0Jhc2VDbGFzcyk7CkBAIC0yOTYsNiArNDYw
LDEyIEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19iYXNlX2NsYXNzX2luaXQoV2ViS2l0
V2ViVmlld0Jhc2VDbGFzcyogd2Via2l0V2ViVmllCiAgICAgd2lkZ2V0Q2xhc3MtPnNjcm9sbF9l
dmVudCA9IHdlYmtpdFdlYlZpZXdCYXNlU2Nyb2xsRXZlbnQ7CiAgICAgd2lkZ2V0Q2xhc3MtPm1v
dGlvbl9ub3RpZnlfZXZlbnQgPSB3ZWJraXRXZWJWaWV3QmFzZU1vdGlvbk5vdGlmeUV2ZW50Owog
ICAgIHdpZGdldENsYXNzLT5xdWVyeV90b29sdGlwID0gd2Via2l0V2ViVmlld0Jhc2VRdWVyeVRv
b2x0aXA7CisgICAgd2lkZ2V0Q2xhc3MtPmRyYWdfZW5kID0gd2Via2l0V2ViVmlld0Jhc2VEcmFn
RW5kOworICAgIHdpZGdldENsYXNzLT5kcmFnX2RhdGFfZ2V0ID0gd2Via2l0V2ViVmlld0Jhc2VE
cmFnRGF0YUdldDsKKyAgICB3aWRnZXRDbGFzcy0+ZHJhZ19tb3Rpb24gPSB3ZWJraXRXZWJWaWV3
QmFzZURyYWdNb3Rpb247CisgICAgd2lkZ2V0Q2xhc3MtPmRyYWdfbGVhdmUgPSB3ZWJraXRXZWJW
aWV3QmFzZURyYWdMZWF2ZTsKKyAgICB3aWRnZXRDbGFzcy0+ZHJhZ19kcm9wID0gd2Via2l0V2Vi
Vmlld0Jhc2VEcmFnRHJvcDsKKyAgICB3aWRnZXRDbGFzcy0+ZHJhZ19kYXRhX3JlY2VpdmVkID0g
d2Via2l0V2ViVmlld0Jhc2VEcmFnRGF0YVJlY2VpdmVkOwogCiAgICAgR09iamVjdENsYXNzKiBn
b2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyh3ZWJraXRXZWJWaWV3QmFzZUNsYXNzKTsKICAg
ICBnb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0V2ViVmlld0Jhc2VGaW5hbGl6ZTsKQEAg
LTM0Myw0ICs1MTMsMjEgQEAgdm9pZCB3ZWJraXRXZWJWaWV3QmFzZVNldFRvb2x0aXBUZXh0KFdl
YktpdFdlYlZpZXdCYXNlKiB3ZWJWaWV3QmFzZSwgY29uc3QgY2hhcioKICAgICBndGtfd2lkZ2V0
X3RyaWdnZXJfdG9vbHRpcF9xdWVyeShHVEtfV0lER0VUKHdlYlZpZXdCYXNlKSk7CiB9CiAKK3Zv
aWQgd2Via2l0V2ViVmlld0Jhc2VTdGFydERyYWcoV2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZpZXdC
YXNlLCBjb25zdCBEcmFnRGF0YSYgZHJhZ0RhdGEsIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFw
PiBkcmFnSW1hZ2UpCit7CisgICAgUmVmUHRyPERhdGFPYmplY3RHdGs+IGRhdGFPYmplY3QoZHJh
Z0RhdGEucGxhdGZvcm1EYXRhKCkpOworICAgIEdSZWZQdHI8R3RrVGFyZ2V0TGlzdD4gdGFyZ2V0
TGlzdChQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpLT50YXJnZXRM
aXN0Rm9yRGF0YU9iamVjdChkYXRhT2JqZWN0LmdldCgpKSk7CisgICAgR2RrRHJhZ0NvbnRleHQq
IGNvbnRleHQgPSBndGtfZHJhZ19iZWdpbihHVEtfV0lER0VUKHdlYlZpZXdCYXNlKSwgdGFyZ2V0
TGlzdC5nZXQoKSwgZHJhZ09wZXJhdGlvblRvR2RrRHJhZ0FjdGlvbnMoZHJhZ0RhdGEuZHJhZ2dp
bmdTb3VyY2VPcGVyYXRpb25NYXNrKCkpLCAxLCBndGtfZ2V0X2N1cnJlbnRfZXZlbnQoKSk7CisK
KyAgICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVChjb250ZXh0KSwgImRyYWctZGF0YS1vYmpl
Y3QiLCBkYXRhT2JqZWN0LmdldCgpKTsKIAorICAgIC8vIEEgZHJhZyBzdGFydGluZyBzaG91bGQg
cHJldmVudCBhIGRvdWJsZS1jbGljayBmcm9tIGhhcHBlbmluZy4gVGhpcyBtaWdodAorICAgIC8v
IGhhcHBlbiBpZiBhIGRyYWcgaXMgZm9sbG93ZWQgdmVyeSBxdWlja2x5IGJ5IGFub3RoZXIgY2xp
Y2sgKGxpa2UgaW4gdGhlIERSVCkuCisgICAgd2ViVmlld0Jhc2UtPnByaXYtPmNsaWNrQ291bnRl
ci5yZXNldCgpOworCisgICAgaWYgKGRyYWdJbWFnZSkgeworICAgICAgICBSZWZQdHI8Y2Fpcm9f
c3VyZmFjZV90PiBpbWFnZShkcmFnSW1hZ2UtPmNyZWF0ZUNhaXJvU3VyZmFjZSgpKTsKKyAgICAg
ICAgZ3RrX2RyYWdfc2V0X2ljb25fc3VyZmFjZShjb250ZXh0LCBpbWFnZS5nZXQoKSk7CisgICAg
fSBlbHNlCisgICAgICAgIGd0a19kcmFnX3NldF9pY29uX2RlZmF1bHQoY29udGV4dCk7Cit9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3
QmFzZVByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdl
YlZpZXdCYXNlUHJpdmF0ZS5oCmluZGV4IDY5OTY3MzguLmY1OGU1YTggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5o
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNl
UHJpdmF0ZS5oCkBAIC00Niw2ICs0Niw4IEBAIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VDcmVhdGVX
ZWJQYWdlKFdlYktpdFdlYlZpZXdCYXNlKiwgV0tDb250ZXh0UmVmLCBXS1BhZ2VHcm91CiAKIHZv
aWQgd2Via2l0V2ViVmlld0Jhc2VTZXRUb29sdGlwVGV4dChXZWJLaXRXZWJWaWV3QmFzZSosIGNv
bnN0IGNoYXIqKTsKIAordm9pZCB3ZWJraXRXZWJWaWV3QmFzZVN0YXJ0RHJhZyhXZWJLaXRXZWJW
aWV3QmFzZSosIGNvbnN0IFdlYkNvcmU6OkRyYWdEYXRhJiwgUGFzc1JlZlB0cjxTaGFyZWFibGVC
aXRtYXA+IGRyYWdJbWFnZSk7CisKIEdfRU5EX0RFQ0xTCiAKICNlbmRpZiAvLyBXZWJLaXRXZWJW
aWV3QmFzZVByaXZhdGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1Bh
Z2VDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgKaW5kZXgg
ZjdiZGMyYS4uZmZjYzQ0ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1Bh
Z2VDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCkBA
IC0xMDQsMTEgKzEwNCwxMyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZUNv
bnRlbnRzU2l6ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJikgPSAwOwogICAgIHZpcnR1YWwgdm9p
ZCBkaWRGaW5kWm9vbWFibGVBcmVhKGNvbnN0IFdlYkNvcmU6OkludFJlY3QmKSA9IDA7CiAKLSAg
ICB2aXJ0dWFsIHZvaWQgc3RhcnREcmFnKGNvbnN0IFdlYkNvcmU6OkRyYWdEYXRhJiwgUGFzc1Jl
ZlB0cjxTaGFyZWFibGVCaXRtYXA+IGRyYWdJbWFnZSkgPSAwOwotCiAgICAgdmlydHVhbCBXZWJD
b3JlOjpJbnRSZWN0IHZpZXdwb3J0VmlzaWJsZVJlY3QoKSBjb25zdCA9IDA7CiAjZW5kaWYKIAor
I2lmIFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShHVEspCisgICAgdmlydHVhbCB2b2lkIHN0YXJ0
RHJhZyhjb25zdCBXZWJDb3JlOjpEcmFnRGF0YSYsIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFw
PiBkcmFnSW1hZ2UpID0gMDsKKyNlbmRpZgorCiAgICAgdmlydHVhbCB2b2lkIHNldEN1cnNvcihj
b25zdCBXZWJDb3JlOjpDdXJzb3ImKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldFZpZXdwb3J0
QXJndW1lbnRzKGNvbnN0IFdlYkNvcmU6OlZpZXdwb3J0QXJndW1lbnRzJikgPSAwOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCmluZGV4IDJkODQ4M2YuLjQ4OWMw
ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3Bw
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCkBAIC05Miw2
ICs5MiwxMCBAQAogI2luY2x1ZGUgIkFyZ3VtZW50Q29kZXJzUXQuaCIKICNlbmRpZgogCisjaWYg
UExBVEZPUk0oR1RLKQorI2luY2x1ZGUgIkFyZ3VtZW50Q29kZXJzR3RrLmgiCisjZW5kaWYKKwog
I2lmbmRlZiBOREVCVUcKICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZExlYWtDb3VudGVyLmg+CiAj
ZW5kaWYKQEAgLTgxMiw3ICs4MTYsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6cGVyZm9ybURyYWdD
b250cm9sbGVyQWN0aW9uKERyYWdDb250cm9sbGVyQWN0aW9uIGFjdGlvbiwgRHJhZwogICAgIC8v
IEZJWE1FOiBXZSBzaG91bGQgcGFzcyB0aGUgZHJhZyBkYXRhIG1hcCBvbmx5IG9uIERyYWdFbnRl
ci4KICAgICBwcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlBlcmZvcm1EcmFnQ29u
dHJvbGxlckFjdGlvbihhY3Rpb24sIGRyYWdEYXRhLT5jbGllbnRQb3NpdGlvbigpLCBkcmFnRGF0
YS0+Z2xvYmFsUG9zaXRpb24oKSwKICAgICAgICAgZHJhZ0RhdGEtPmRyYWdnaW5nU291cmNlT3Bl
cmF0aW9uTWFzaygpLCBkcmFnRGF0YS0+ZHJhZ0RhdGFNYXAoKSwgZHJhZ0RhdGEtPmZsYWdzKCkp
LCBtX3BhZ2VJRCk7Ci0jZWxpZiBQTEFURk9STShRVCkKKyNlbGlmIFBMQVRGT1JNKFFUKSB8fCBQ
TEFURk9STShHVEspCiAgICAgcHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpQZXJm
b3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24oYWN0aW9uLCAqZHJhZ0RhdGEpLCBtX3BhZ2VJRCk7CiAj
ZWxzZQogICAgIHByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6UGVyZm9ybURyYWdD
b250cm9sbGVyQWN0aW9uKGFjdGlvbiwgZHJhZ0RhdGEtPmNsaWVudFBvc2l0aW9uKCksIGRyYWdE
YXRhLT5nbG9iYWxQb3NpdGlvbigpLCBkcmFnRGF0YS0+ZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25N
YXNrKCksIGRyYWdTdG9yYWdlTmFtZSwgZHJhZ0RhdGEtPmZsYWdzKCksIHNhbmRib3hFeHRlbnNp
b25IYW5kbGUpLCBtX3BhZ2VJRCk7CkBAIC04ODYsNyArODkwLDcgQEAgdm9pZCBXZWJQYWdlUHJv
eHk6OnN0YXJ0RHJhZ0Ryb3AoY29uc3QgSW50UG9pbnQmIGltYWdlT3JpZ2luLCBjb25zdCBJbnRQ
b2ludCYgZHIKIH0KICNlbmRpZgogCi0jaWYgUExBVEZPUk0oUVQpCisjaWYgUExBVEZPUk0oUVQp
IHx8IFBMQVRGT1JNKEdUSykKIHZvaWQgV2ViUGFnZVByb3h5OjpzdGFydERyYWcoY29uc3QgRHJh
Z0RhdGEmIGRyYWdEYXRhLCBjb25zdCBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYgZHJhZ0ltYWdl
SGFuZGxlKQogewogICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGRyYWdJbWFnZSA9IFNoYXJl
YWJsZUJpdG1hcDo6Y3JlYXRlKGRyYWdJbWFnZUhhbmRsZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvV2ViUGFnZVByb3h5LmgKaW5kZXggMjYxMmQ5YS4uMGNjZmM0MyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaApAQCAtNDQ0LDcgKzQ0NCw3IEBAIHB1YmxpYzoKICNp
ZiBQTEFURk9STShXSU4pCiAgICAgdm9pZCBzdGFydERyYWdEcm9wKGNvbnN0IFdlYkNvcmU6Oklu
dFBvaW50JiBpbWFnZVBvaW50LCBjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgZHJhZ1BvaW50LCB1
aW50NjRfdCBva0VmZmVjdCwgY29uc3QgSGFzaE1hcDxVSU5ULCBWZWN0b3I8U3RyaW5nPiA+JiBk
YXRhTWFwLCB1aW50NjRfdCBmaWxlU2l6ZSwgY29uc3QgU3RyaW5nJiBwYXRobmFtZSwgY29uc3Qg
U2hhcmVkTWVtb3J5OjpIYW5kbGUmIGZpbGVDb250ZW50SGFuZGxlLCBjb25zdCBXZWJDb3JlOjpJ
bnRTaXplJiBkcmFnSW1hZ2VTaXplLCBjb25zdCBTaGFyZWRNZW1vcnk6OkhhbmRsZSYgZHJhZ0lt
YWdlSGFuZGxlLCBib29sIGlzTGlua0RyYWcpOwogI2VuZGlmCi0jaWYgUExBVEZPUk0oUVQpCisj
aWYgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEdUSykKICAgICB2b2lkIHN0YXJ0RHJhZyhjb25z
dCBXZWJDb3JlOjpEcmFnRGF0YSYsIGNvbnN0IFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJiBkcmFn
SW1hZ2UpOwogI2VuZGlmCiAgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShDb3JlSVBDOjpDb25u
ZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlELCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2Fn
ZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmlu
CmluZGV4IDdkMGZkOTguLjg3NDQxYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgpAQCAtMjA5LDcgKzIwOSw3IEBAIG1lc3NhZ2Vz
IC0+IFdlYlBhZ2VQcm94eSB7CiAjaWYgUExBVEZPUk0oV0lOKQogICAgIFN0YXJ0RHJhZ0Ryb3Ao
V2ViQ29yZTo6SW50UG9pbnQgaW1hZ2VQb2ludCwgV2ViQ29yZTo6SW50UG9pbnQgZHJhZ1BvaW50
LCB1aW50NjRfdCBva0VmZmVjdCwgSGFzaE1hcDxVSU5ULFZlY3RvcjxTdHJpbmc+ID4gZGF0YU1h
cCwgdWludDY0X3QgZmlsZVNpemUsIFN0cmluZyBwYXRobmFtZSwgV2ViS2l0OjpTaGFyZWRNZW1v
cnk6OkhhbmRsZSBmaWxlQ29udGVudEhhbmRsZSwgV2ViQ29yZTo6SW50U2l6ZSBkcmFnSW1hZ2VT
aXplLCBXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6SGFuZGxlIGRyYWdJbWFnZSwgYm9vbCBsaW5rRHJh
ZykKICNlbmRpZgotI2lmIFBMQVRGT1JNKFFUKQorI2lmIFBMQVRGT1JNKFFUKSB8fCBQTEFURk9S
TShHVEspCiAgICAgU3RhcnREcmFnKFdlYkNvcmU6OkRyYWdEYXRhIGRyYWdEYXRhLCBXZWJLaXQ6
OlNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGRyYWdJbWFnZSkKICNlbmRpZgogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkRyYWdDbGllbnQu
Y3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJEcmFnQ2xp
ZW50LmNwcAppbmRleCBhZWZjMDFhLi41N2FkNmE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkRyYWdDbGllbnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRHJhZ0NsaWVudC5jcHAKQEAg
LTUyLDcgKzUyLDcgQEAgRHJhZ1NvdXJjZUFjdGlvbiBXZWJEcmFnQ2xpZW50OjpkcmFnU291cmNl
QWN0aW9uTWFza0ZvclBvaW50KGNvbnN0IEludFBvaW50JiB3aW4KICAgICByZXR1cm4gRHJhZ1Nv
dXJjZUFjdGlvbkFueTsKIH0KIAotI2lmICFQTEFURk9STShNQUMpICYmICFQTEFURk9STShXSU4p
ICYmICFQTEFURk9STShRVCkKKyNpZiAhUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oV0lOKSAm
JiAhUExBVEZPUk0oUVQpICYmICFQTEFURk9STShHVEspCiB2b2lkIFdlYkRyYWdDbGllbnQ6OnN0
YXJ0RHJhZyhEcmFnSW1hZ2VSZWYsIGNvbnN0IEludFBvaW50JiwgY29uc3QgSW50UG9pbnQmLCBD
bGlwYm9hcmQqLCBGcmFtZSosIGJvb2wpCiB7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJEcmFnQ2xpZW50R3RrLmNwcCBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkRyYWdDbGllbnRH
dGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwNGJlYTQKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0
ay9XZWJEcmFnQ2xpZW50R3RrLmNwcApAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJXZWJEcmFnQ2xpZW50LmgiCisKKyNpbmNsdWRlICJBcmd1bWVudENvZGVyc0d0ay5o
IgorI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgorI2luY2x1ZGUgIldlYlBhZ2UuaCIKKyNp
bmNsdWRlICJXZWJQYWdlUHJveHlNZXNzYWdlcy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQ2xpcGJv
YXJkR3RrLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9EcmFnRGF0YS5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvR3JhcGhpY3NDb250ZXh0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUNvbnRleHRD
YWlyby5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK3N0YXRpYyBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gY29udmVydENhaXJvU3VyZmFj
ZVRvU2hhcmVhYmxlQml0bWFwKGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSkKK3sKKyAgICAvLyBG
SVhNRTogVGhpcyBzaG91bGQgYmUgYW4gZWFybHkgcmV0dXJuLCBhbmQgc3RhcnREcmFnIHdvdWxk
IHNlbmQgYSBudWxsIGhhbmRsZSwgYnV0CisgICAgLy8gc2VuZGluZyBudWxsIGhhbmRsZXMgaXMg
bm90IHN1cHBvcnRlZCB5ZXQuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTYwNjIxCisgICAgaWYgKCFzdXJmYWNlKQorICAgICAgICBzdXJmYWNlID0gY2Fp
cm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGUoQ0FJUk9fRk9STUFUX0ExLCAxLCAxKTsKKyAgICBJbnRT
aXplIGltYWdlU2l6ZShjYWlyb19pbWFnZV9zdXJmYWNlX2dldF93aWR0aChzdXJmYWNlKSwgY2Fp
cm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KHN1cmZhY2UpKTsKKyAgICBSZWZQdHI8U2hhcmVh
YmxlQml0bWFwPiBiaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZVNoYXJlYWJsZShpbWFn
ZVNpemUsIFNoYXJlYWJsZUJpdG1hcDo6U3VwcG9ydHNBbHBoYSk7CisgICAgT3duUHRyPEdyYXBo
aWNzQ29udGV4dD4gZ3JhcGhpY3NDb250ZXh0ID0gYml0bWFwLT5jcmVhdGVHcmFwaGljc0NvbnRl
eHQoKTsKKworICAgIGdyYXBoaWNzQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmRyYXdTdXJm
YWNlVG9Db250ZXh0KHN1cmZhY2UsIEludFJlY3QoSW50UG9pbnQoKSwgaW1hZ2VTaXplKSwgSW50
UmVjdChJbnRQb2ludCgpLCBpbWFnZVNpemUpLCBncmFwaGljc0NvbnRleHQuZ2V0KCkpOworICAg
IHJldHVybiBiaXRtYXAucmVsZWFzZSgpOworfQorCit2b2lkIFdlYkRyYWdDbGllbnQ6OnN0YXJ0
RHJhZyhEcmFnSW1hZ2VSZWYgZHJhZ0ltYWdlLCBjb25zdCBJbnRQb2ludCYgY2xpZW50UG9zaXRp
b24sIGNvbnN0IEludFBvaW50JiBnbG9iYWxQb3NpdGlvbiwgQ2xpcGJvYXJkKiBjbGlwYm9hcmQs
IEZyYW1lKiwgYm9vbCkKK3sKKyAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSBj
b252ZXJ0Q2Fpcm9TdXJmYWNlVG9TaGFyZWFibGVCaXRtYXAoZHJhZ0ltYWdlKTsKKyAgICBTaGFy
ZWFibGVCaXRtYXA6OkhhbmRsZSBoYW5kbGU7CisgICAgaWYgKCFiaXRtYXAtPmNyZWF0ZUhhbmRs
ZShoYW5kbGUpKQorICAgICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8RGF0YU9iamVjdEd0az4g
ZGF0YU9iamVjdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q2xpcGJvYXJkR3RrKj4oY2xpcGJvYXJkKS0+
ZGF0YU9iamVjdCgpOworICAgIERyYWdEYXRhIGRyYWdEYXRhKGRhdGFPYmplY3QuZ2V0KCksIGNs
aWVudFBvc2l0aW9uLCBnbG9iYWxQb3NpdGlvbiwgY2xpcGJvYXJkLT5zb3VyY2VPcGVyYXRpb24o
KSk7CisgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlN0YXJ0RHJhZyhk
cmFnRGF0YSwgaGFuZGxlKSk7Cit9CisKK307IC8vIG5hbWVzcGFjZSBXZWJLaXQuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKaW5kZXggOGYyN2VjZC4u
YzhjN2NhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
LmNwcApAQCAtMTY5OSwxMiArMTY5OSwxNiBAQCB2b2lkIFdlYlBhZ2U6OnBlcmZvcm1EcmFnQ29u
dHJvbGxlckFjdGlvbih1aW50NjRfdCBhY3Rpb24sIFdlYkNvcmU6OkludFBvaW50IGNsaQogICAg
IH0KIH0KIAotI2VsaWYgUExBVEZPUk0oUVQpCisjZWxpZiBQTEFURk9STShRVCkgfHwgUExBVEZP
Uk0oR1RLKQogdm9pZCBXZWJQYWdlOjpwZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24odWludDY0
X3QgYWN0aW9uLCBXZWJDb3JlOjpEcmFnRGF0YSBkcmFnRGF0YSkKIHsKICAgICBpZiAoIW1fcGFn
ZSkgewogICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZFBlcmZvcm1EcmFn
Q29udHJvbGxlckFjdGlvbihEcmFnT3BlcmF0aW9uTm9uZSkpOworI2lmIFBMQVRGT1JNKFFUKQog
ICAgICAgICBRTWltZURhdGEqIGRhdGEgPSBjb25zdF9jYXN0PFFNaW1lRGF0YSo+KGRyYWdEYXRh
LnBsYXRmb3JtRGF0YSgpKTsKKyNlbGlmIFBMQVRGT1JNKEdUSykKKyAgICAgICAgRGF0YU9iamVj
dEd0ayogZGF0YSA9IGNvbnN0X2Nhc3Q8RGF0YU9iamVjdEd0ayo+KGRyYWdEYXRhLnBsYXRmb3Jt
RGF0YSgpKTsKKyNlbmRpZgogICAgICAgICBkZWxldGUgZGF0YTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KQEAgLTE3MzEsNyArMTczNSwxMSBAQCB2b2lkIFdlYlBhZ2U6OnBlcmZvcm1EcmFnQ29u
dHJvbGxlckFjdGlvbih1aW50NjRfdCBhY3Rpb24sIFdlYkNvcmU6OkRyYWdEYXRhIGRyYQogICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CiAgICAgLy8gRHJhZ0RhdGEgZG9lcyBu
b3QgZGVsZXRlIGl0cyBwbGF0Zm9ybURhdGEgc28gd2UgbmVlZCB0byBkbyB0aGF0IGhlcmUuCisj
aWYgUExBVEZPUk0oUVQpCiAgICAgUU1pbWVEYXRhKiBkYXRhID0gY29uc3RfY2FzdDxRTWltZURh
dGEqPihkcmFnRGF0YS5wbGF0Zm9ybURhdGEoKSk7CisjZWxpZiBQTEFURk9STShHVEspCisgICAg
RGF0YU9iamVjdEd0ayogZGF0YSA9IGNvbnN0X2Nhc3Q8RGF0YU9iamVjdEd0ayo+KGRyYWdEYXRh
LnBsYXRmb3JtRGF0YSgpKTsKKyNlbmRpZgogICAgIGRlbGV0ZSBkYXRhOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAppbmRleCBiN2U5MzBlLi4xYmI1
OWUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKQEAg
LTYwLDYgKzYwLDEwIEBACiAjaW5jbHVkZSAiQXJndW1lbnRDb2RlcnNRdC5oIgogI2VuZGlmCiAK
KyNpZiBQTEFURk9STShHVEspCisjaW5jbHVkZSAiQXJndW1lbnRDb2RlcnNHdGsuaCIKKyNlbmRp
ZgorCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3Jt
VG91Y2hFdmVudC5oPgogI2VuZGlmCkBAIC0zNzgsNyArMzgyLDcgQEAgcHVibGljOgogICAgIHZv
aWQgY2xlYXJTZWxlY3Rpb24oKTsKICNpZiBQTEFURk9STShXSU4pCiAgICAgdm9pZCBwZXJmb3Jt
RHJhZ0NvbnRyb2xsZXJBY3Rpb24odWludDY0X3QgYWN0aW9uLCBXZWJDb3JlOjpJbnRQb2ludCBj
bGllbnRQb3NpdGlvbiwgV2ViQ29yZTo6SW50UG9pbnQgZ2xvYmFsUG9zaXRpb24sIHVpbnQ2NF90
IGRyYWdnaW5nU291cmNlT3BlcmF0aW9uTWFzaywgY29uc3QgV2ViQ29yZTo6RHJhZ0RhdGFNYXAm
LCB1aW50MzJfdCBmbGFncyk7Ci0jZWxpZiBQTEFURk9STShRVCkKKyNlbGlmIFBMQVRGT1JNKFFU
KSB8fCBQTEFURk9STShHVEspCiAgICAgdm9pZCBwZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24o
dWludDY0X3QgYWN0aW9uLCBXZWJDb3JlOjpEcmFnRGF0YSk7CiAjZWxzZQogICAgIHZvaWQgcGVy
Zm9ybURyYWdDb250cm9sbGVyQWN0aW9uKHVpbnQ2NF90IGFjdGlvbiwgV2ViQ29yZTo6SW50UG9p
bnQgY2xpZW50UG9zaXRpb24sIFdlYkNvcmU6OkludFBvaW50IGdsb2JhbFBvc2l0aW9uLCB1aW50
NjRfdCBkcmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1hc2ssIGNvbnN0IFdURjo6U3RyaW5nJiBkcmFn
U3RvcmFnZU5hbWUsIHVpbnQzMl90IGZsYWdzLCBjb25zdCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5k
bGUmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UubWVzc2FnZXMuaW4KaW5kZXggZWUzNTE0Mi4uOGQ4YTQ3MSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KQEAgLTEy
NCwxMCArMTI0LDEwIEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2UgewogI2lmIFBMQVRGT1JNKFdJTikK
ICAgICBQZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24odWludDY0X3QgYWN0aW9uLCBXZWJDb3Jl
OjpJbnRQb2ludCBjbGllbnRQb3NpdGlvbiwgV2ViQ29yZTo6SW50UG9pbnQgZ2xvYmFsUG9zaXRp
b24sIHVpbnQ2NF90IGRyYWdnaW5nU291cmNlT3BlcmF0aW9uTWFzaywgSGFzaE1hcDxVSU5ULFZl
Y3RvcjxTdHJpbmc+PiBkYXRhTWFwLCB1aW50MzJfdCBmbGFncykKICNlbmRpZgotI2lmIFBMQVRG
T1JNKFFUKQorI2lmIFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShHVEspCiAgICAgUGVyZm9ybURy
YWdDb250cm9sbGVyQWN0aW9uKHVpbnQ2NF90IGFjdGlvbiwgV2ViQ29yZTo6RHJhZ0RhdGEgZHJh
Z0RhdGEpCiAjZW5kaWYKLSNpZiAhUExBVEZPUk0oV0lOKSAmJiAhUExBVEZPUk0oUVQpCisjaWYg
IVBMQVRGT1JNKFdJTikgJiYgIVBMQVRGT1JNKFFUKSAmJiAhUExBVEZPUk0oR1RLKQogICAgIFBl
cmZvcm1EcmFnQ29udHJvbGxlckFjdGlvbih1aW50NjRfdCBhY3Rpb24sIFdlYkNvcmU6OkludFBv
aW50IGNsaWVudFBvc2l0aW9uLCBXZWJDb3JlOjpJbnRQb2ludCBnbG9iYWxQb3NpdGlvbiwgdWlu
dDY0X3QgZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrLCBXVEY6OlN0cmluZyBkcmFnU3RvcmFn
ZU5hbWUsIHVpbnQzMl90IGZsYWdzLCBXZWJLaXQ6OlNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBz
YW5kYm94RXh0ZW5zaW9uSGFuZGxlKQogI2VuZGlmCiAgICAgRHJhZ0VuZGVkKFdlYkNvcmU6Oklu
dFBvaW50IGNsaWVudFBvc2l0aW9uLCBXZWJDb3JlOjpJbnRQb2ludCBnbG9iYWxQb3NpdGlvbiwg
dWludDY0X3Qgb3BlcmF0aW9uKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>100991</attachid>
            <date>2011-07-15 09:21:07 -0700</date>
            <delta_ts>2011-09-10 12:39:58 -0700</delta_ts>
            <desc>Updated patch</desc>
            <filename>wk2-dnd4.diff</filename>
            <type>text/plain</type>
            <size>43587</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA3YjY1ZjQ1Li41MjAzOGUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjgg
QEAKKzIwMTEtMDctMTUgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHVEtdIEltcGxlbWVudCBkcmFnIGFuZCBkcm9wIHN1cHBvcnQgaW4gV2Vi
S2l0MgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjM3
MDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBs
YXRmb3JtL0RyYWdEYXRhLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3RrL0RhdGFPYmplY3RHdGsu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RGF0YU9iamVjdEd0azo6dGV4dCk6IE1hcmsgYXMgY29u
c3QuCisgICAgICAgIChXZWJDb3JlOjpEYXRhT2JqZWN0R3RrOjptYXJrdXApOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OkRhdGFPYmplY3RHdGs6OnVybExhYmVsKTogRGl0dG8uCisgICAgICAg
ICogcGxhdGZvcm0vZ3RrL0RhdGFPYmplY3RHdGsuaDogUmVtb3ZlIHVudXNlZCBtZW1iZXIKKyAg
ICAgICAgbV9kcmFnQ29udGV4dC4KKyAgICAgICAgKFdlYkNvcmU6OkRhdGFPYmplY3RHdGs6OnVy
bCk6IE1hcmsgYXMgY29uc3QuCisgICAgICAgIChXZWJDb3JlOjpEYXRhT2JqZWN0R3RrOjp1cmlM
aXN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpEYXRhT2JqZWN0R3RrOjpmaWxlbmFtZXMp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRhdGFPYmplY3RHdGs6OmltYWdlKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpEYXRhT2JqZWN0R3RrOjpoYXNUZXh0KTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpEYXRhT2JqZWN0R3RrOjpoYXNNYXJrdXApOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OkRhdGFPYmplY3RHdGs6Omhhc1VSSUxpc3QpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OkRhdGFPYmplY3RHdGs6Omhhc1VSTCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
RGF0YU9iamVjdEd0azo6aGFzRmlsZW5hbWVzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpE
YXRhT2JqZWN0R3RrOjpoYXNJbWFnZSk6IERpdHRvLgorCiAyMDExLTA3LTE1ICBOaWtvbGFzIFpp
bW1lcm1hbm4gIDxuemltbWVybWFubkByaW0uY29tPgogCiAgICAgICAgIE5vdCByZXZpZXdlZC4g
Rml4IGJ1aWxkIGZhaWx1cmUgaW50cm9kdWNlZCBpbiByOTEwNjEuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnRGF0YS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
RHJhZ0RhdGEuaAppbmRleCA5MjNmZGIyLi41NGI1MTYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9EcmFnRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Ry
YWdEYXRhLmgKQEAgLTEyMyw3ICsxMjMsNyBAQCBwdWJsaWM6CiAgICAgTlNQYXN0ZWJvYXJkICpw
YXN0ZWJvYXJkKCkgeyByZXR1cm4gbV9wYXN0ZWJvYXJkLmdldCgpOyB9CiAjZW5kaWYKIAotI2lm
IFBMQVRGT1JNKFFUKQorI2lmIFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShHVEspCiAgICAgLy8g
VGhpcyBjb25zdHJ1Y3RvciBzaG91bGQgdXNlZCBvbmx5IGJ5IFdlYktpdDIgSVBDIGJlY2F1c2Ug
RHJhZ0RhdGEKICAgICAvLyBpcyBpbml0aWFsaXplZCBieSB0aGUgZGVjb2RlciBhbmQgbm90IGlu
IHRoZSBjb25zdHJ1Y3Rvci4KICAgICBEcmFnRGF0YSgpIHsgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0RhdGFPYmplY3RHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL0RhdGFPYmplY3RHdGsuY3BwCmluZGV4IDA1YTJkYTkuLjdmNDVjNDYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EYXRhT2JqZWN0R3RrLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRGF0YU9iamVjdEd0ay5jcHAKQEAgLTMy
LDE0ICszMiwxNCBAQCBzdGF0aWMgdm9pZCByZXBsYWNlTm9uQnJlYWtpbmdTcGFjZVdpdGhTcGFj
ZShTdHJpbmcmIHN0cikKICAgICBzdHIucmVwbGFjZShOb25CcmVha2luZ1NwYWNlQ2hhcmFjdGVy
LCBTcGFjZUNoYXJhY3Rlcik7CiB9CiAKLVN0cmluZyBEYXRhT2JqZWN0R3RrOjp0ZXh0KCkKK1N0
cmluZyBEYXRhT2JqZWN0R3RrOjp0ZXh0KCkgY29uc3QKIHsKICAgICBpZiAobV9yYW5nZSkKICAg
ICAgICAgcmV0dXJuIG1fcmFuZ2UtPnRleHQoKTsKICAgICByZXR1cm4gbV90ZXh0OwogfQogCi1T
dHJpbmcgRGF0YU9iamVjdEd0azo6bWFya3VwKCkKK1N0cmluZyBEYXRhT2JqZWN0R3RrOjptYXJr
dXAoKSBjb25zdAogewogICAgIGlmIChtX3JhbmdlKQogICAgICAgICByZXR1cm4gY3JlYXRlTWFy
a3VwKG1fcmFuZ2UuZ2V0KCksIDAsIEFubm90YXRlRm9ySW50ZXJjaGFuZ2UsIGZhbHNlLCBBYnNv
bHV0ZVVSTHMpOwpAQCAtMTMyLDcgKzEzMiw3IEBAIHZvaWQgRGF0YU9iamVjdEd0azo6Y2xlYXJN
YXJrdXAoKQogICAgIG1fbWFya3VwID0gIiI7CiB9CiAKLVN0cmluZyBEYXRhT2JqZWN0R3RrOjp1
cmxMYWJlbCgpCitTdHJpbmcgRGF0YU9iamVjdEd0azo6dXJsTGFiZWwoKSBjb25zdAogewogICAg
IGlmIChoYXNUZXh0KCkpCiAgICAgICAgIHJldHVybiB0ZXh0KCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRGF0YU9iamVjdEd0ay5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL0RhdGFPYmplY3RHdGsuaAppbmRleCA1NDIzZjgxLi5lMjdiYzkxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRGF0YU9iamVjdEd0ay5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EYXRhT2JqZWN0R3RrLmgKQEAgLTM2LDMxICsz
NiwyOSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRGF0YU9iamVjdEd0
aygpKTsKICAgICB9CiAKLSAgICBjb25zdCBLVVJMJiB1cmwoKSB7IHJldHVybiBtX3VybDsgfQot
ICAgIGNvbnN0IFN0cmluZyYgdXJpTGlzdCgpIHsgcmV0dXJuIG1fdXJpTGlzdDsgfQotICAgIGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlbmFtZXMoKSB7IHJldHVybiBtX2ZpbGVuYW1lczsgfQot
ICAgIEdka1BpeGJ1ZiogaW1hZ2UoKSB7IHJldHVybiBtX2ltYWdlLmdldCgpOyB9CisgICAgY29u
c3QgS1VSTCYgdXJsKCkgY29uc3QgeyByZXR1cm4gbV91cmw7IH0KKyAgICBjb25zdCBTdHJpbmcm
IHVyaUxpc3QoKSBjb25zdCB7IHJldHVybiBtX3VyaUxpc3Q7IH0KKyAgICBjb25zdCBWZWN0b3I8
U3RyaW5nPiYgZmlsZW5hbWVzKCkgY29uc3QgeyByZXR1cm4gbV9maWxlbmFtZXM7IH0KKyAgICBH
ZGtQaXhidWYqIGltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9pbWFnZS5nZXQoKTsgfQogICAgIHZv
aWQgc2V0UmFuZ2UoUGFzc1JlZlB0cjxSYW5nZT4gbmV3UmFuZ2UpIHsgbV9yYW5nZSA9IG5ld1Jh
bmdlOyB9CiAgICAgdm9pZCBzZXRJbWFnZShHZGtQaXhidWYqIG5ld0ltYWdlKSB7IG1faW1hZ2Ug
PSBuZXdJbWFnZTsgfQotICAgIHZvaWQgc2V0RHJhZ0NvbnRleHQoR2RrRHJhZ0NvbnRleHQqIG5l
d0RyYWdDb250ZXh0KSB7IG1fZHJhZ0NvbnRleHQgPSBuZXdEcmFnQ29udGV4dDsgfQogICAgIHZv
aWQgc2V0VVJMKGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmKTsKLSAgICBib29sIGhhc1RleHQo
KSB7IHJldHVybiBtX3JhbmdlIHx8ICFtX3RleHQuaXNFbXB0eSgpOyB9Ci0gICAgYm9vbCBoYXNN
YXJrdXAoKSB7IHJldHVybiBtX3JhbmdlIHx8ICFtX21hcmt1cC5pc0VtcHR5KCk7IH0KLSAgICBi
b29sIGhhc1VSSUxpc3QoKSB7IHJldHVybiAhbV91cmlMaXN0LmlzRW1wdHkoKTsgfQotICAgIGJv
b2wgaGFzVVJMKCkgeyByZXR1cm4gIW1fdXJsLmlzRW1wdHkoKSAmJiBtX3VybC5pc1ZhbGlkKCk7
IH0KLSAgICBib29sIGhhc0ZpbGVuYW1lcygpIHsgcmV0dXJuICFtX2ZpbGVuYW1lcy5pc0VtcHR5
KCk7IH0KLSAgICBib29sIGhhc0ltYWdlKCkgeyByZXR1cm4gbV9pbWFnZTsgfQorICAgIGJvb2wg
aGFzVGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fcmFuZ2UgfHwgIW1fdGV4dC5pc0VtcHR5KCk7IH0K
KyAgICBib29sIGhhc01hcmt1cCgpIGNvbnN0IHsgcmV0dXJuIG1fcmFuZ2UgfHwgIW1fbWFya3Vw
LmlzRW1wdHkoKTsgfQorICAgIGJvb2wgaGFzVVJJTGlzdCgpIGNvbnN0IHsgcmV0dXJuICFtX3Vy
aUxpc3QuaXNFbXB0eSgpOyB9CisgICAgYm9vbCBoYXNVUkwoKSBjb25zdCB7IHJldHVybiAhbV91
cmwuaXNFbXB0eSgpICYmIG1fdXJsLmlzVmFsaWQoKTsgfQorICAgIGJvb2wgaGFzRmlsZW5hbWVz
KCkgY29uc3QgeyByZXR1cm4gIW1fZmlsZW5hbWVzLmlzRW1wdHkoKTsgfQorICAgIGJvb2wgaGFz
SW1hZ2UoKSBjb25zdCB7IHJldHVybiBtX2ltYWdlOyB9CiAgICAgdm9pZCBjbGVhclVSSUxpc3Qo
KSB7IG1fdXJpTGlzdCA9ICIiOyB9CiAgICAgdm9pZCBjbGVhclVSTCgpIHsgbV91cmwgPSBLVVJM
KCk7IH0KICAgICB2b2lkIGNsZWFySW1hZ2UoKSB7IG1faW1hZ2UgPSAwOyB9Ci0gICAgR2RrRHJh
Z0NvbnRleHQqIGRyYWdDb250ZXh0KCkgeyByZXR1cm4gbV9kcmFnQ29udGV4dC5nZXQoKTsgfQog
Ci0gICAgU3RyaW5nIHRleHQoKTsKLSAgICBTdHJpbmcgbWFya3VwKCk7CisgICAgU3RyaW5nIHRl
eHQoKSBjb25zdDsKKyAgICBTdHJpbmcgbWFya3VwKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRUZXh0
KGNvbnN0IFN0cmluZyYpOwogICAgIHZvaWQgc2V0TWFya3VwKGNvbnN0IFN0cmluZyYpOwogICAg
IHZvaWQgc2V0VVJJTGlzdChjb25zdCBTdHJpbmcmKTsKLSAgICBTdHJpbmcgdXJsTGFiZWwoKTsK
KyAgICBTdHJpbmcgdXJsTGFiZWwoKSBjb25zdDsKICAgICB2b2lkIGNsZWFyKCk7CiAgICAgdm9p
ZCBjbGVhclRleHQoKTsKICAgICB2b2lkIGNsZWFyTWFya3VwKCk7CkBAIC03NCw3ICs3Miw2IEBA
IHByaXZhdGU6CiAgICAgU3RyaW5nIG1fdXJpTGlzdDsKICAgICBWZWN0b3I8U3RyaW5nPiBtX2Zp
bGVuYW1lczsKICAgICBHUmVmUHRyPEdka1BpeGJ1Zj4gbV9pbWFnZTsKLSAgICBHUmVmUHRyPEdk
a0RyYWdDb250ZXh0PiBtX2RyYWdDb250ZXh0OwogICAgIFJlZlB0cjxSYW5nZT4gbV9yYW5nZTsK
IH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZwppbmRleCAxZDEwYjZlLi5hZWM4YzhhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsNTMgQEAKKzIwMTEtMDctMTUgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2Fs
aWEuY29tPgorCisgICAgICAgIFtHVEtdIEltcGxlbWVudCBkcmFnIGFuZCBkcm9wIHN1cHBvcnQg
aW4gV2ViS2l0MgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NjM3MDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIEdOVW1ha2VmaWxlLmFtOiBBZGQgbmV3IGZpbGVzIHRvIGNvbXBpbGF0aW9uLgorICAgICAg
ICAqIFNoYXJlZC9ndGsvQXJndW1lbnRDb2RlcnNHdGsuY3BwOiBBZGRlZC4KKyAgICAgICAgKENv
cmVJUEM6OmVuY29kZUltYWdlKTogRW5jb2RlIGEgR2RrUGl4YnVmLgorICAgICAgICAoQ29yZUlQ
Qzo6ZGVjb2RlSW1hZ2UpOiBEZWNvZGUgYSBHZGtQaXhidWYuCisgICAgICAgIChDb3JlSVBDOjpl
bmNvZGVEYXRhT2JqZWN0KTogRW5jb2RlIGEgRGF0YU9iamVjdEd0ay4KKyAgICAgICAgKENvcmVJ
UEM6OmRlY29kZURhdGFPYmplY3QpOiBEZWNvZGUgYSBEYXRhT2JqZWN0R3RrLgorICAgICAgICAo
Q29yZUlQQzo6OjplbmNvZGUpOiBFbmNvZGUgRHJhZ0RhdGEuCisgICAgICAgIChDb3JlSVBDOjo6
OmRlY29kZSk6IERlY29kZSBEcmFnRGF0YS4KKyAgICAgICAgKiBTaGFyZWQvZ3RrL0FyZ3VtZW50
Q29kZXJzR3RrLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6c3RhcnREcmFnKToKKyAgICAg
ICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5oOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcDoKKyAgICAgICAgKHdlYmtpdF93ZWJf
dmlld19iYXNlX2luaXQpOiBTZXQgdGhlIHZpZXcgYXMgYSBwb3RlbnRpYWwgZHJvcAorICAgICAg
ICBkZXN0aW5hdGlvbi4KKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlRHJhZ0RhdGFHZXQpOgor
ICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VEcmFnRW5kKToKKyAgICAgICAgKHdlYmtpdFdlYlZp
ZXdCYXNlRHJhZ0RhdGFSZWNlaXZlZCk6CisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZURyYWdF
bnRlcik6CisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZURyYWdNb3Rpb24pOgorICAgICAgICAo
ZG9EcmFnTGVhdmVMYXRlcik6CisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZURyYWdMZWF2ZSk6
CisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZURyYWdEcm9wKToKKyAgICAgICAgKHdlYmtpdF93
ZWJfdmlld19iYXNlX2NsYXNzX2luaXQpOiBPdmVycmlkZSBHdGtXaWRnZXQgZHJhZyBhbmQKKyAg
ICAgICAgZHJvcCBtZXRob2RzLgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VTdGFydERyYWcp
OiBDYWxscyBndGtfZHJhZ19iZWdpbigpIHRvIHN0YXJ0IGEKKyAgICAgICAgZHJhZyBvcGVyYXRp
b24uCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRl
Lmg6IEFkZAorICAgICAgICB3ZWJraXRXZWJWaWV3QmFzZVN0YXJ0RHJhZygpLgorICAgICAgICAq
IFVJUHJvY2Vzcy9QYWdlQ2xpZW50Lmg6IEFkZCBzdGFydERyYWcoKS4KKyAgICAgICAgKiBVSVBy
b2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5Ojpw
ZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24pOgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdl
UHJveHkuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRHJhZ0NsaWVudC5jcHA6Cisg
ICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9ndGsvV2ViRHJhZ0NsaWVudEd0ay5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViS2l0Ojpjb252ZXJ0Q2Fpcm9TdXJmYWNlVG9TaGFyZWFi
bGVCaXRtYXApOgorICAgICAgICAoV2ViS2l0OjpXZWJEcmFnQ2xpZW50OjpzdGFydERyYWcpOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZTo6cGVyZm9ybURyYWdDb250cm9sbGVyQWN0aW9uKToKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLm1lc3NhZ2VzLmluOgorCiAyMDExLTA3LTE1ICBLZW5uZXRoIFJvaGRlIENocmlzdGlh
bnNlbiAgPGtlbm5ldGhAd2Via2l0Lm9yZz4KIAogICAgICAgICBVcHN0cmVhbSBRdFdlYktpdC9O
OSBjaGFuZ2VzIHJlbGF0ZWQgdG8gdmlzaWJsZUNvbnRlbnRSZWN0CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFt
CmluZGV4IDYwNTE1ODAuLjI5YWVhNmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0dOVW1h
a2VmaWxlLmFtCisrKyBiL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCkBAIC0xOTUsNiAr
MTk1LDggQEAgbGlid2Via2l0Mmd0a19AV0VCS0lUR1RLX0FQSV9NQUpPUl9WRVJTSU9OQF9AV0VC
S0lUR1RLX0FQSV9NSU5PUl9WRVJTSU9OQF9sYV9TT1UKIAlTb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
Rm9udFNtb290aGluZ0xldmVsLmggXAogCVNvdXJjZS9XZWJLaXQyL1NoYXJlZC9jYWlyby9MYXll
clRyZWVDb250ZXh0Q2Fpcm8uY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvY2Fpcm8vU2hh
cmVhYmxlQml0bWFwQ2Fpcm8uY3BwIFwKKwlTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL0FyZ3Vt
ZW50Q29kZXJzR3RrLmggXAorCVNvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvQXJndW1lbnRDb2Rl
cnNHdGsuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL05hdGl2ZVdlYktleWJvYXJk
RXZlbnRHdGsuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL05hdGl2ZVdlYk1vdXNl
RXZlbnRHdGsuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL05hdGl2ZVdlYldoZWVs
RXZlbnRHdGsuY3BwIFwKQEAgLTY0Niw2ICs2NDgsNyBAQCBsaWJ3ZWJraXQyZ3RrX0BXRUJLSVRH
VEtfQVBJX01BSk9SX1ZFUlNJT05AX0BXRUJLSVRHVEtfQVBJX01JTk9SX1ZFUlNJT05AX2xhX1NP
VQogCVNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUmVzb3VyY2VDYWNoZS9XZWJSZXNvdXJjZUNh
Y2hlTWFuYWdlci5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1Jlc291cmNlQ2FjaGUv
V2ViUmVzb3VyY2VDYWNoZU1hbmFnZXIuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJDb250ZXh0TWVudUNsaWVudEd0ay5jcHAgXAorCVNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkRyYWdDbGllbnRHdGsu
Y3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJF
ZGl0b3JDbGllbnRHdGsuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L2d0ay9XZWJFcnJvcnNHdGsuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJGcmFtZU5ldHdvcmtpbmdDb250ZXh0LmggXApAQCAtMTIx
Niw0ICsxMjE5LDQgQEAgUHJvZ3JhbXNfV2ViS2l0UGx1Z2luUHJvY2Vzc19DWFhGTEFHUyA9IFwK
IAkkKFNZTUJPTF9WSVNJQklMSVRZX0lOTElORVMpIFwKIAkkKGdsb2JhbF9jeHhmbGFncykKIAot
ZW5kaWYKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCitlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9Bcmd1bWVudENvZGVyc0d0ay5jcHAgYi9Tb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvZ3RrL0FyZ3VtZW50Q29kZXJzR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi4wY2ZiZDRlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktp
dDIvU2hhcmVkL2d0ay9Bcmd1bWVudENvZGVyc0d0ay5jcHAKQEAgLTAsMCArMSwyMTkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkFyZ3VtZW50Q29kZXJzR3RrLmgiCisKKyNpbmNsdWRlICJT
aGFyZWFibGVCaXRtYXAuaCIKKyNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKKyNp
bmNsdWRlIDxXZWJDb3JlL0RhdGFPYmplY3RHdGsuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0RyYWdE
YXRhLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL0d0a1ZlcnNpb25pbmcuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtQ29udGV4
dENhaXJvLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwordXNpbmcgbmFtZXNwYWNlIFdl
YktpdDsKKworbmFtZXNwYWNlIENvcmVJUEMgeworCitzdGF0aWMgdm9pZCBlbmNvZGVJbWFnZShB
cmd1bWVudEVuY29kZXIqIGVuY29kZXIsIGNvbnN0IEdka1BpeGJ1ZiogcGl4YnVmKQoreworICAg
IEludFNpemUgaW1hZ2VTaXplKGdka19waXhidWZfZ2V0X3dpZHRoKHBpeGJ1ZiksIGdka19waXhi
dWZfZ2V0X2hlaWdodChwaXhidWYpKTsKKyAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRt
YXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZVNoYXJlYWJsZShpbWFnZVNpemUsIFNoYXJlYWJs
ZUJpdG1hcDo6U3VwcG9ydHNBbHBoYSk7CisgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gZ3Jh
cGhpY3NDb250ZXh0ID0gYml0bWFwLT5jcmVhdGVHcmFwaGljc0NvbnRleHQoKTsKKworICAgIGNh
aXJvX3QqIGNyID0gZ3JhcGhpY3NDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKTsKKyAg
ICBnZGtfY2Fpcm9fc2V0X3NvdXJjZV9waXhidWYoY3IsIHBpeGJ1ZiwgMCwgMCk7CisgICAgY2Fp
cm9fcGFpbnQoY3IpOworCisgICAgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgaGFuZGxlOworICAg
IGJpdG1hcC0+Y3JlYXRlSGFuZGxlKGhhbmRsZSk7CisKKyAgICBlbmNvZGVyLT5lbmNvZGUoaGFu
ZGxlKTsKK30KKworc3RhdGljIGJvb2wgZGVjb2RlSW1hZ2UoQXJndW1lbnREZWNvZGVyKiBkZWNv
ZGVyLCBHUmVmUHRyPEdka1BpeGJ1Zj4mIHBpeGJ1ZikKK3sKKyAgICBTaGFyZWFibGVCaXRtYXA6
OkhhbmRsZSBoYW5kbGU7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoaGFuZGxlKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0bWFwID0g
U2hhcmVhYmxlQml0bWFwOjpjcmVhdGUoaGFuZGxlKTsKKyAgICBpZiAoIWJpdG1hcCkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IGJpdG1hcC0+Y3Jl
YXRlSW1hZ2UoKTsKKyAgICBpZiAoIWltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50
RnJhbWUoKTsKKyAgICBpZiAoIXN1cmZhY2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IHBpeGJ1ZiA9IGFkb3B0R1JlZihnZGtfcGl4YnVmX2dldF9mcm9tX3N1cmZhY2Uoc3VyZmFjZSwg
MCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKHN1cmZhY2UpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9n
ZXRfaGVpZ2h0KHN1cmZhY2UpKSk7CisgICAgaWYgKCFwaXhidWYpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZCBlbmNvZGVEYXRhT2Jq
ZWN0KEFyZ3VtZW50RW5jb2RlciogZW5jb2RlciwgY29uc3QgRGF0YU9iamVjdEd0ayogZGF0YU9i
amVjdCkKK3sKKyAgICBib29sIGhhc1RleHQgPSBkYXRhT2JqZWN0LT5oYXNUZXh0KCk7CisgICAg
ZW5jb2Rlci0+ZW5jb2RlKGhhc1RleHQpOworICAgIGlmIChoYXNUZXh0KQorICAgICAgICBlbmNv
ZGVyLT5lbmNvZGUoZGF0YU9iamVjdC0+dGV4dCgpKTsKKworICAgIGJvb2wgaGFzTWFya3VwID0g
ZGF0YU9iamVjdC0+aGFzTWFya3VwKCk7CisgICAgZW5jb2Rlci0+ZW5jb2RlKGhhc01hcmt1cCk7
CisgICAgaWYgKGhhc01hcmt1cCkKKyAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKGRhdGFPYmplY3Qt
Pm1hcmt1cCgpKTsKKworICAgIGJvb2wgaGFzVVJMID0gZGF0YU9iamVjdC0+aGFzVVJMKCk7Cisg
ICAgZW5jb2Rlci0+ZW5jb2RlKGhhc1VSTCk7CisgICAgaWYgKGhhc1VSTCkKKyAgICAgICAgZW5j
b2Rlci0+ZW5jb2RlKGRhdGFPYmplY3QtPnVybCgpLnN0cmluZygpKTsKKworICAgIGJvb2wgaGFz
VVJJTGlzdCA9IGRhdGFPYmplY3QtPmhhc1VSSUxpc3QoKTsKKyAgICBlbmNvZGVyLT5lbmNvZGUo
aGFzVVJJTGlzdCk7CisgICAgaWYgKGhhc1VSSUxpc3QpCisgICAgICAgIGVuY29kZXItPmVuY29k
ZShkYXRhT2JqZWN0LT51cmlMaXN0KCkpOworCisgICAgYm9vbCBoYXNJbWFnZSA9IGRhdGFPYmpl
Y3QtPmhhc0ltYWdlKCk7CisgICAgZW5jb2Rlci0+ZW5jb2RlKGhhc0ltYWdlKTsKKyAgICBpZiAo
aGFzSW1hZ2UpCisgICAgICAgIGVuY29kZUltYWdlKGVuY29kZXIsIGRhdGFPYmplY3QtPmltYWdl
KCkpOworfQorCitzdGF0aWMgYm9vbCBkZWNvZGVEYXRhT2JqZWN0KEFyZ3VtZW50RGVjb2Rlciog
ZGVjb2RlciwgUmVmUHRyPERhdGFPYmplY3RHdGs+JiBkYXRhT2JqZWN0KQoreworICAgIFJlZlB0
cjxEYXRhT2JqZWN0R3RrPiBkYXRhID0gRGF0YU9iamVjdEd0azo6Y3JlYXRlKCk7CisKKyAgICBi
b29sIGhhc1RleHQ7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoaGFzVGV4dCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBpZiAoaGFzVGV4dCkgeworICAgICAgICBTdHJpbmcgdGV4dDsK
KyAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUodGV4dCkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIGRhdGEtPnNldFRleHQodGV4dCk7CisgICAgfQorCisgICAgYm9vbCBo
YXNNYXJrdXA7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoaGFzTWFya3VwKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGlmIChoYXNNYXJrdXApIHsKKyAgICAgICAgU3RyaW5nIG1hcmt1
cDsKKyAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUobWFya3VwKSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgZGF0YS0+c2V0TWFya3VwKG1hcmt1cCk7CisgICAgfQorCisg
ICAgYm9vbCBoYXNVUkw7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoaGFzVVJMKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChoYXNVUkwpIHsKKyAgICAgICAgU3RyaW5nIHVybDsK
KyAgICAgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUodXJsKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgZGF0YS0+c2V0VVJMKEtVUkwoS1VSTCgpLCB1cmwpLCBTdHJpbmcoKSk7
CisgICAgfQorCisgICAgYm9vbCBoYXNVUklMaXN0OworICAgIGlmICghZGVjb2Rlci0+ZGVjb2Rl
KGhhc1VSSUxpc3QpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGhhc1VSSUxpc3Qp
IHsKKyAgICAgICAgU3RyaW5nIHVyaUxpc3Q7CisgICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2Rl
KHVyaUxpc3QpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBkYXRhLT5zZXRV
UklMaXN0KHVyaUxpc3QpOworICAgIH0KKworICAgIGJvb2wgaGFzSW1hZ2U7CisgICAgaWYgKCFk
ZWNvZGVyLT5kZWNvZGUoaGFzSW1hZ2UpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYg
KGhhc0ltYWdlKSB7CisgICAgICAgIEdSZWZQdHI8R2RrUGl4YnVmPiBpbWFnZTsKKyAgICAgICAg
aWYgKCFkZWNvZGVJbWFnZShkZWNvZGVyLCBpbWFnZSkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIGRhdGEtPnNldEltYWdlKGltYWdlLmdldCgpKTsKKyAgICB9CisKKyAgICBk
YXRhT2JqZWN0ID0gZGF0YTsKKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEFyZ3VtZW50
Q29kZXI8RHJhZ0RhdGE+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBjb25zdCBE
cmFnRGF0YSYgZHJhZ0RhdGEpCit7CisgICAgZW5jb2Rlci0+ZW5jb2RlKGRyYWdEYXRhLmNsaWVu
dFBvc2l0aW9uKCkpOworICAgIGVuY29kZXItPmVuY29kZShkcmFnRGF0YS5nbG9iYWxQb3NpdGlv
bigpKTsKKyAgICBlbmNvZGVyLT5lbmNvZGUoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGRyYWdEYXRh
LmRyYWdnaW5nU291cmNlT3BlcmF0aW9uTWFzaygpKSk7CisgICAgZW5jb2Rlci0+ZW5jb2RlKHN0
YXRpY19jYXN0PHVpbnQ2NF90PihkcmFnRGF0YS5mbGFncygpKSk7CisKKyAgICBEYXRhT2JqZWN0
R3RrKiBwbGF0Zm9ybURhdGEgPSBkcmFnRGF0YS5wbGF0Zm9ybURhdGEoKTsKKyAgICBlbmNvZGVy
LT5lbmNvZGUoc3RhdGljX2Nhc3Q8Ym9vbD4ocGxhdGZvcm1EYXRhKSk7CisgICAgaWYgKHBsYXRm
b3JtRGF0YSkKKyAgICAgICAgZW5jb2RlRGF0YU9iamVjdChlbmNvZGVyLCBwbGF0Zm9ybURhdGEp
OworfQorCitib29sIEFyZ3VtZW50Q29kZXI8RHJhZ0RhdGE+OjpkZWNvZGUoQXJndW1lbnREZWNv
ZGVyKiBkZWNvZGVyLCBEcmFnRGF0YSYgZHJhZ0RhdGEpCit7CisgICAgSW50UG9pbnQgY2xpZW50
UG9zaXRpb247CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoY2xpZW50UG9zaXRpb24pKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBJbnRQb2ludCBnbG9iYWxQb3NpdGlvbjsKKyAgICBp
ZiAoIWRlY29kZXItPmRlY29kZShnbG9iYWxQb3NpdGlvbikpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIHVpbnQ2NF90IHNvdXJjZU9wZXJhdGlvbk1hc2s7CisgICAgaWYgKCFkZWNvZGVy
LT5kZWNvZGUoc291cmNlT3BlcmF0aW9uTWFzaykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIHVpbnQ2NF90IGZsYWdzOworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGZsYWdzKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYm9vbCBoYXNQbGF0Zm9ybURhdGE7CisgICAgaWYg
KCFkZWNvZGVyLT5kZWNvZGUoaGFzUGxhdGZvcm1EYXRhKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgUmVmUHRyPERhdGFPYmplY3RHdGs+IHBsYXRmb3JtRGF0YTsKKyAgICBpZiAoaGFz
UGxhdGZvcm1EYXRhKSB7CisgICAgICAgIGlmICghZGVjb2RlRGF0YU9iamVjdChkZWNvZGVyLCBw
bGF0Zm9ybURhdGEpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGRy
YWdEYXRhID0gRHJhZ0RhdGEocGxhdGZvcm1EYXRhLnJlbGVhc2UoKS5sZWFrUmVmKCksIGNsaWVu
dFBvc2l0aW9uLCBnbG9iYWxQb3NpdGlvbiwgc3RhdGljX2Nhc3Q8RHJhZ09wZXJhdGlvbj4oc291
cmNlT3BlcmF0aW9uTWFzayksCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxE
cmFnQXBwbGljYXRpb25GbGFncz4oZmxhZ3MpKTsKKworICAgIHJldHVybiB0cnVlOworfQorCit9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL0FyZ3VtZW50Q29kZXJzR3Rr
LmggYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL0FyZ3VtZW50Q29kZXJzR3RrLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODJmNDZkMgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvQXJndW1lbnRDb2RlcnNHdGsuaApAQCAtMCwwICsx
LDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgQXJndW1lbnRDb2RlcnNHdGtfaAorI2RlZmluZSBBcmd1bWVudENvZGVyc0d0a19o
CisKKyNpbmNsdWRlICJBcmd1bWVudENvZGVycy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7Citj
bGFzcyBEYXRhT2JqZWN0R3RrOworY2xhc3MgRHJhZ0RhdGE7Cit9CisKK25hbWVzcGFjZSBDb3Jl
SVBDIHsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpEcmFnRGF0
YT4geworICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXIqLCBjb25zdCBXZWJD
b3JlOjpEcmFnRGF0YSYpOworICAgIHN0YXRpYyBib29sIGRlY29kZShBcmd1bWVudERlY29kZXIq
LCBXZWJDb3JlOjpEcmFnRGF0YSYpOworfTsKKworfSAvLyBuYW1lc3BhY2UgQ29yZUlQQworCisj
ZW5kaWYgLy8gQXJndW1lbnRDb2RlcnNHdGtfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuY3BwCmluZGV4IGFiNTY0NmYuLjVhODk3ZTIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJ
bXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50
SW1wbC5jcHAKQEAgLTI4NCw0ICsyODQsOSBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpjb3VudFN0
cmluZ01hdGNoZXNJbkN1c3RvbVJlcHJlc2VudGF0aW9uKGNvbnN0IFN0cmluZyYsIEZpbgogICAg
IG5vdEltcGxlbWVudGVkKCk7CiB9CiAKK3ZvaWQgUGFnZUNsaWVudEltcGw6OnN0YXJ0RHJhZyhj
b25zdCBXZWJDb3JlOjpEcmFnRGF0YSYgZHJhZ0RhdGEsIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0
bWFwPiBkcmFnSW1hZ2UpCit7CisgICAgd2Via2l0V2ViVmlld0Jhc2VTdGFydERyYWcoV0VCS0lU
X1dFQl9WSUVXX0JBU0UobV92aWV3V2lkZ2V0KSwgZHJhZ0RhdGEsIGRyYWdJbWFnZSk7Cit9CisK
IH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmgKaW5kZXggZWE1NDg0My4uYWMzMTc4ZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5oCkBAIC04
OSw2ICs4OSw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGdldEVkaXRvckNvbW1hbmRz
Rm9yS2V5RXZlbnQoY29uc3QgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudCYsIFZlY3RvcjxXVEY6OlN0
cmluZz4mKTsKICAgICB2aXJ0dWFsIHZvaWQgZmluZFN0cmluZ0luQ3VzdG9tUmVwcmVzZW50YXRp
b24oY29uc3QgU3RyaW5nJiwgRmluZE9wdGlvbnMsIHVuc2lnbmVkKTsKICAgICB2aXJ0dWFsIHZv
aWQgY291bnRTdHJpbmdNYXRjaGVzSW5DdXN0b21SZXByZXNlbnRhdGlvbihjb25zdCBTdHJpbmcm
LCBGaW5kT3B0aW9ucywgdW5zaWduZWQpOworICAgIHZpcnR1YWwgdm9pZCBzdGFydERyYWcoY29u
c3QgV2ViQ29yZTo6RHJhZ0RhdGEmLCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gZHJhZ0lt
YWdlKTsKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykKICAgICB2aXJ0dWFsIHZv
aWQgcGFnZURpZEVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZygpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwCmluZGV4
IDdmYWY4NDIuLjFlMDE5MGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAKQEAgLTI4LDE1ICsyOCwyMSBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIldlYktpdFdlYlZpZXdCYXNlLmgiCiAKKyNpbmNs
dWRlICJDbGlwYm9hcmRHdGsuaCIKKyNpbmNsdWRlICJDbGlwYm9hcmRVdGlsaXRpZXNHdGsuaCIK
KyNpbmNsdWRlICJEYXRhT2JqZWN0R3RrLmgiCisjaW5jbHVkZSAiRHJhZ0RhdGEuaCIKICNpbmNs
dWRlICJEcmF3aW5nQXJlYVByb3h5SW1wbC5oIgogI2luY2x1ZGUgIkdPd25QdHJHdGsuaCIKICNp
bmNsdWRlICJHdGtDbGlja0NvdW50ZXIuaCIKKyNpbmNsdWRlICJHdGtVdGlsaXRpZXMuaCIKICNp
bmNsdWRlICJHdGtWZXJzaW9uaW5nLmgiCiAjaW5jbHVkZSAiTmF0aXZlV2ViS2V5Ym9hcmRFdmVu
dC5oIgogI2luY2x1ZGUgIk5hdGl2ZVdlYk1vdXNlRXZlbnQuaCIKICNpbmNsdWRlICJOYXRpdmVX
ZWJXaGVlbEV2ZW50LmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJQ
YWdlQ2xpZW50SW1wbC5oIgorI2luY2x1ZGUgIlBhc3RlYm9hcmRIZWxwZXIuaCIKICNpbmNsdWRl
ICJSZWZQdHJDYWlyby5oIgogI2luY2x1ZGUgIlJlZ2lvbi5oIgogI2luY2x1ZGUgIldlYkNvbnRl
eHQuaCIKQEAgLTQ5LDYgKzU1LDE1IEBACiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CiAKK3R5cGVkZWYgc3RydWN0IERyb3BDb250ZXh0XyB7CisgICAg
R3RrV2lkZ2V0KiB3aWRnZXQ7CisgICAgR1JlZlB0cjxHZGtEcmFnQ29udGV4dD4gZ2RrQ29udGV4
dDsKKyAgICBSZWZQdHI8RGF0YU9iamVjdEd0az4gZGF0YU9iamVjdDsKKyAgICBJbnRQb2ludCBs
YXN0TW90aW9uUG9zaXRpb247CisgICAgc2l6ZV90IHBlbmRpbmdEYXRhUmVxdWVzdHM7CisgICAg
Ym9vbCBkcm9wSGFwcGVuZWQ7Cit9IERyb3BDb250ZXh0OworCiBzdHJ1Y3QgX1dlYktpdFdlYlZp
ZXdCYXNlUHJpdmF0ZSB7CiAgICAgT3duUHRyPFBhZ2VDbGllbnRJbXBsPiBwYWdlQ2xpZW50Owog
ICAgIFJlZlB0cjxXZWJQYWdlUHJveHk+IHBhZ2VQcm94eTsKQEAgLTEzMCwxMSArMTQ1LDE2IEBA
IHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19iYXNlX2luaXQoV2ViS2l0V2ViVmlld0Jhc2Uq
IHdlYmtpdFdlYlZpZXdCYXNlKQogCiAgICAgcHJpdi0+aXNQYWdlQWN0aXZlID0gVFJVRTsKIAot
ICAgIGd0a193aWRnZXRfc2V0X2RvdWJsZV9idWZmZXJlZChHVEtfV0lER0VUKHdlYmtpdFdlYlZp
ZXdCYXNlKSwgRkFMU0UpOwotICAgIGd0a193aWRnZXRfc2V0X2Nhbl9mb2N1cyhHVEtfV0lER0VU
KHdlYmtpdFdlYlZpZXdCYXNlKSwgVFJVRSk7CisgICAgR3RrV2lkZ2V0KiB2aWV3V2lkZ2V0ID0g
R1RLX1dJREdFVCh3ZWJraXRXZWJWaWV3QmFzZSk7CisgICAgZ3RrX3dpZGdldF9zZXRfZG91Ymxl
X2J1ZmZlcmVkKHZpZXdXaWRnZXQsIEZBTFNFKTsKKyAgICBndGtfd2lkZ2V0X3NldF9jYW5fZm9j
dXModmlld1dpZGdldCwgVFJVRSk7CiAgICAgcHJpdi0+aW1Db250ZXh0ID0gZ3RrX2ltX211bHRp
Y29udGV4dF9uZXcoKTsKIAotICAgIHByaXYtPnBhZ2VDbGllbnQgPSBQYWdlQ2xpZW50SW1wbDo6
Y3JlYXRlKEdUS19XSURHRVQod2Via2l0V2ViVmlld0Jhc2UpKTsKKyAgICBwcml2LT5wYWdlQ2xp
ZW50ID0gUGFnZUNsaWVudEltcGw6OmNyZWF0ZSh2aWV3V2lkZ2V0KTsKKworICAgIGd0a19kcmFn
X2Rlc3Rfc2V0KHZpZXdXaWRnZXQsIHN0YXRpY19jYXN0PEd0a0Rlc3REZWZhdWx0cz4oMCksIDAs
IDAsCisgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8R2RrRHJhZ0FjdGlvbj4oR0RL
X0FDVElPTl9DT1BZIHwgR0RLX0FDVElPTl9NT1ZFIHwgR0RLX0FDVElPTl9MSU5LIHwgR0RLX0FD
VElPTl9QUklWQVRFKSk7CisgICAgZ3RrX2RyYWdfZGVzdF9zZXRfdGFyZ2V0X2xpc3Qodmlld1dp
ZGdldCwgUGFzdGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+dGFyZ2V0
TGlzdCgpKTsKIH0KIAogc3RhdGljIGdib29sZWFuIHdlYmtpdFdlYlZpZXdCYXNlRHJhdyhHdGtX
aWRnZXQqIHdpZGdldCwgY2Fpcm9fdCogY3IpCkBAIC0yODEsNiArMzAxLDE1MCBAQCBzdGF0aWMg
Z2Jvb2xlYW4gd2Via2l0V2ViVmlld0Jhc2VRdWVyeVRvb2x0aXAoR3RrV2lkZ2V0KiB3aWRnZXQs
IGdpbnQgeCwgZ2ludCB5LAogICAgIHJldHVybiBUUlVFOwogfQogCitzdGF0aWMgdm9pZCB3ZWJr
aXRXZWJWaWV3QmFzZURyYWdEYXRhR2V0KEd0a1dpZGdldCogd2lkZ2V0LCBHZGtEcmFnQ29udGV4
dCogY29udGV4dCwgR3RrU2VsZWN0aW9uRGF0YSogc2VsZWN0aW9uRGF0YSwgZ3VpbnQgaW5mbywg
Z3VpbnQgdGltZSkKK3sKKyAgICBEYXRhT2JqZWN0R3RrKiBkYXRhT2JqZWN0ID0gc3RhdGljX2Nh
c3Q8RGF0YU9iamVjdEd0ayo+KGdfb2JqZWN0X2dldF9kYXRhKEdfT0JKRUNUKGNvbnRleHQpLCAi
ZHJhZy1kYXRhLW9iamVjdCIpKTsKKyAgICBpZiAoIWRhdGFPYmplY3QpCisgICAgICAgIHJldHVy
bjsKKworICAgIFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCktPmZp
bGxTZWxlY3Rpb25EYXRhKHNlbGVjdGlvbkRhdGEsIGluZm8sIGRhdGFPYmplY3QpOworfQorCitz
dGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3QmFzZURyYWdFbmQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdk
a0RyYWdDb250ZXh0KiBjb250ZXh0KQoreworICAgIERhdGFPYmplY3RHdGsqIGRhdGFPYmplY3Qg
PSBzdGF0aWNfY2FzdDxEYXRhT2JqZWN0R3RrKj4oZ19vYmplY3RfZ2V0X2RhdGEoR19PQkpFQ1Qo
Y29udGV4dCksICJkcmFnLWRhdGEtb2JqZWN0IikpOworICAgIGlmICghZGF0YU9iamVjdCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1QoY29udGV4dCks
ICJkcmFnLWRhdGEtb2JqZWN0IiwgMCk7CisgICAgZGVsZXRlIGRhdGFPYmplY3Q7CisKKyAgICBH
ZGtEZXZpY2UqIGRldmljZSA9IGdka19kcmFnX2NvbnRleHRfZ2V0X2RldmljZShjb250ZXh0KTsK
KyAgICBpbnQgeCwgeTsKKyAgICBnZGtfZGV2aWNlX2dldF93aW5kb3dfYXRfcG9zaXRpb24oZGV2
aWNlLCAmeCwgJnkpOworICAgIGludCB4Um9vdCwgeVJvb3Q7CisgICAgZ2RrX2RldmljZV9nZXRf
cG9zaXRpb24oZGV2aWNlLCAwLCAmeFJvb3QsICZ5Um9vdCk7CisgICAgV2ViS2l0V2ViVmlld0Jh
c2UqIHdlYlZpZXdCYXNlID0gV0VCS0lUX1dFQl9WSUVXX0JBU0Uod2lkZ2V0KTsKKyAgICB3ZWJW
aWV3QmFzZS0+cHJpdi0+cGFnZVByb3h5LT5kcmFnRW5kZWQoSW50UG9pbnQoeCwgeSksIEludFBv
aW50KHhSb290LCB5Um9vdCksIGdka0RyYWdBY3Rpb25Ub0RyYWdPcGVyYXRpb24oZ2RrX2RyYWdf
Y29udGV4dF9nZXRfc2VsZWN0ZWRfYWN0aW9uKGNvbnRleHQpKSk7Cit9CisKK3N0YXRpYyB2b2lk
IHdlYmtpdFdlYlZpZXdCYXNlRHJhZ0RhdGFSZWNlaXZlZChHdGtXaWRnZXQqIHdpZGdldCwgR2Rr
RHJhZ0NvbnRleHQqIGNvbnRleHQsIGdpbnQgeCwgZ2ludCB5LCBHdGtTZWxlY3Rpb25EYXRhKiBz
ZWxlY3Rpb25EYXRhLCBndWludCBpbmZvLCBndWludCB0aW1lKQoreworICAgIERyb3BDb250ZXh0
KiBkcm9wQ29udGV4dCA9IHN0YXRpY19jYXN0PERyb3BDb250ZXh0Kj4oZ19vYmplY3RfZ2V0X2Rh
dGEoR19PQkpFQ1QoY29udGV4dCksICJkcm9wLWNvbnRleHQiKSk7CisgICAgaWYgKCFkcm9wQ29u
dGV4dCkKKyAgICAgICAgcmV0dXJuOworCisgICAgZHJvcENvbnRleHQtPnBlbmRpbmdEYXRhUmVx
dWVzdHMtLTsKKyAgICBQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigp
LT5maWxsRGF0YU9iamVjdEZyb21Ecm9wRGF0YShzZWxlY3Rpb25EYXRhLCBpbmZvLCBkcm9wQ29u
dGV4dC0+ZGF0YU9iamVjdC5nZXQoKSk7CisKKyAgICBpZiAoZHJvcENvbnRleHQtPnBlbmRpbmdE
YXRhUmVxdWVzdHMpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIFRoZSBjb29yZGluYXRlcyBw
YXNzZWQgdG8gZHJhZy1kYXRhLXJlY2VpdmVkIHNpZ25hbCBhcmUgc29tZXRpbWVzCisgICAgLy8g
aW5hY2N1cmF0ZSBpbiBEUlQsIHNvIHVzZSB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIGxhc3QgbW90
aW9uIGV2ZW50LgorICAgIGNvbnN0IEludFBvaW50JiBwb3NpdGlvbiA9IGRyb3BDb250ZXh0LT5s
YXN0TW90aW9uUG9zaXRpb247CisKKyAgICAvLyBJZiB0aGVyZSBhcmUgbm8gbW9yZSBwZW5kaW5n
IHJlcXVlc3RzLCBzdGFydCBzZW5kaW5nIGRyYWdnaW5nIGRhdGEgdG8gV2ViQ29yZS4KKyAgICBE
cmFnRGF0YSBkcmFnRGF0YShkcm9wQ29udGV4dC0+ZGF0YU9iamVjdC5nZXQoKSwgcG9zaXRpb24s
IGNvbnZlcnRXaWRnZXRQb2ludFRvU2NyZWVuUG9pbnQod2lkZ2V0LCBwb3NpdGlvbiksCisgICAg
ICAgICAgICAgICAgICAgICAgZ2RrRHJhZ0FjdGlvblRvRHJhZ09wZXJhdGlvbihnZGtfZHJhZ19j
b250ZXh0X2dldF9hY3Rpb25zKGNvbnRleHQpKSk7CisgICAgV2ViS2l0V2ViVmlld0Jhc2UqIHdl
YlZpZXdCYXNlID0gV0VCS0lUX1dFQl9WSUVXX0JBU0Uod2lkZ2V0KTsKKyAgICB3ZWJWaWV3QmFz
ZS0+cHJpdi0+cGFnZVByb3h5LT5kcmFnRW50ZXJlZCgmZHJhZ0RhdGEpOworICAgIGdka19kcmFn
X3N0YXR1cyhjb250ZXh0LCBnZGtfZHJhZ19jb250ZXh0X2dldF9zdWdnZXN0ZWRfYWN0aW9uKGNv
bnRleHQpLCB0aW1lKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VEcmFnRW50
ZXIoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0RyYWdDb250ZXh0KiBjb250ZXh0LCBnaW50IHgsIGdp
bnQgeSwgZ3VpbnQgdGltZSkKK3sKKyAgICBEcm9wQ29udGV4dCogZHJvcENvbnRleHQgPSBuZXcg
RHJvcENvbnRleHQ7CisgICAgZ19vYmplY3Rfc2V0X2RhdGEoR19PQkpFQ1QoY29udGV4dCksICJk
cm9wLWNvbnRleHQiLCBkcm9wQ29udGV4dCk7CisgICAgZHJvcENvbnRleHQtPmxhc3RNb3Rpb25Q
b3NpdGlvbiA9IEludFBvaW50KHgsIHkpOworICAgIGRyb3BDb250ZXh0LT5kYXRhT2JqZWN0ID0g
RGF0YU9iamVjdEd0azo6Y3JlYXRlKCk7CisgICAgZHJvcENvbnRleHQtPndpZGdldCA9IHdpZGdl
dDsKKyAgICBkcm9wQ29udGV4dC0+Z2RrQ29udGV4dCA9IGNvbnRleHQ7CisgICAgZHJvcENvbnRl
eHQtPmRyb3BIYXBwZW5lZCA9IGZhbHNlOworCisgICAgVmVjdG9yPEdka0F0b20+IGFjY2VwdGFi
bGVUYXJnZXRzKFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCktPmRy
b3BBdG9tc0ZvckNvbnRleHQod2lkZ2V0LCBjb250ZXh0KSk7CisgICAgZHJvcENvbnRleHQtPnBl
bmRpbmdEYXRhUmVxdWVzdHMgPSBhY2NlcHRhYmxlVGFyZ2V0cy5zaXplKCk7CisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBhY2NlcHRhYmxlVGFyZ2V0cy5zaXplKCk7IGkrKykKKyAgICAgICAg
Z3RrX2RyYWdfZ2V0X2RhdGEod2lkZ2V0LCBjb250ZXh0LCBhY2NlcHRhYmxlVGFyZ2V0cy5hdChp
KSwgdGltZSk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRXZWJWaWV3QmFzZURyYWdNb3Rp
b24oR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0RyYWdDb250ZXh0KiBjb250ZXh0LCBnaW50IHgsIGdp
bnQgeSwgZ3VpbnQgdGltZSkKK3sKKyAgICBEcm9wQ29udGV4dCogZHJvcENvbnRleHQgPSBzdGF0
aWNfY2FzdDxEcm9wQ29udGV4dCo+KGdfb2JqZWN0X2dldF9kYXRhKEdfT0JKRUNUKGNvbnRleHQp
LCAiZHJvcC1jb250ZXh0IikpOworICAgIGlmICghZHJvcENvbnRleHQpIHsKKyAgICAgICAgd2Vi
a2l0V2ViVmlld0Jhc2VEcmFnRW50ZXIod2lkZ2V0LCBjb250ZXh0LCB4LCB5LCB0aW1lKTsKKyAg
ICAgICAgcmV0dXJuIFRSVUU7CisgICAgfQorCisgICAgZHJvcENvbnRleHQtPmxhc3RNb3Rpb25Q
b3NpdGlvbiA9IEludFBvaW50KHgsIHkpOworICAgIGlmIChkcm9wQ29udGV4dC0+cGVuZGluZ0Rh
dGFSZXF1ZXN0cykKKyAgICAgICAgcmV0dXJuIFRSVUU7CisKKyAgICBjb25zdCBJbnRQb2ludCYg
cG9zaXRpb24gPSBkcm9wQ29udGV4dC0+bGFzdE1vdGlvblBvc2l0aW9uOworICAgIERyYWdEYXRh
IGRyYWdEYXRhKGRyb3BDb250ZXh0LT5kYXRhT2JqZWN0LmdldCgpLCBwb3NpdGlvbiwgY29udmVy
dFdpZGdldFBvaW50VG9TY3JlZW5Qb2ludCh3aWRnZXQsIHBvc2l0aW9uKSwKKyAgICAgICAgICAg
ICAgICAgICAgICBnZGtEcmFnQWN0aW9uVG9EcmFnT3BlcmF0aW9uKGdka19kcmFnX2NvbnRleHRf
Z2V0X2FjdGlvbnMoY29udGV4dCkpKTsKKyAgICBXZWJLaXRXZWJWaWV3QmFzZSogd2ViVmlld0Jh
c2UgPSBXRUJLSVRfV0VCX1ZJRVdfQkFTRSh3aWRnZXQpOworICAgIHdlYlZpZXdCYXNlLT5wcml2
LT5wYWdlUHJveHktPmRyYWdVcGRhdGVkKCZkcmFnRGF0YSk7CisgICAgRHJhZ09wZXJhdGlvbiBv
cGVyYXRpb24gPSB3ZWJWaWV3QmFzZS0+cHJpdi0+cGFnZVByb3h5LT5kcmFnT3BlcmF0aW9uKCk7
CisgICAgaWYgKG9wZXJhdGlvbiAhPSBEcmFnT3BlcmF0aW9uTm9uZSkKKyAgICAgICAgZ2RrX2Ry
YWdfc3RhdHVzKGNvbnRleHQsIGRyYWdPcGVyYXRpb25Ub1NpbmdsZUdka0RyYWdBY3Rpb24ob3Bl
cmF0aW9uKSwgdGltZSk7CisKKyAgICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIGdib29sZWFu
IGRvRHJhZ0xlYXZlTGF0ZXIoRHJvcENvbnRleHQqIGRyb3BDb250ZXh0KQoreworICAgIC8vIElm
IHRoZSB2aWV3IGRvZXNuJ3Qga25vdyBhYm91dCB0aGUgZHJhZyB5ZXQgKHRoZXJlIGFyZSBzdGls
bCBwZW5kaW5nIGRhdGEpCisgICAgLy8gcmVxdWVzdHMsIGRvbid0IHVwZGF0ZSBpdCB3aXRoIGlu
Zm9ybWF0aW9uIGFib3V0IHRoZSBkcmFnLgorICAgIGlmIChkcm9wQ29udGV4dC0+cGVuZGluZ0Rh
dGFSZXF1ZXN0cykKKyAgICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgLy8gRG9uJ3QgY2FsbCBk
cmFnRXhpdGVkIGlmIHdlIGhhdmUganVzdCByZWNlaXZlZCBhIGRyYWctZHJvcCBzaWduYWwuIFRo
aXMKKyAgICAvLyBoYXBwZW5zIGluIHRoZSBjYXNlIG9mIGEgc3VjY2Vzc2Z1bCBkcm9wIG9udG8g
dGhlIHZpZXcuCisgICAgaWYgKCFkcm9wQ29udGV4dC0+ZHJvcEhhcHBlbmVkKSB7CisgICAgICAg
IGNvbnN0IEludFBvaW50JiBwb3NpdGlvbiA9IGRyb3BDb250ZXh0LT5sYXN0TW90aW9uUG9zaXRp
b247CisgICAgICAgIERyYWdEYXRhIGRyYWdEYXRhKGRyb3BDb250ZXh0LT5kYXRhT2JqZWN0Lmdl
dCgpLCBwb3NpdGlvbiwgY29udmVydFdpZGdldFBvaW50VG9TY3JlZW5Qb2ludChkcm9wQ29udGV4
dC0+d2lkZ2V0LCBwb3NpdGlvbiksIERyYWdPcGVyYXRpb25Ob25lKTsKKyAgICAgICAgV2ViS2l0
V2ViVmlld0Jhc2UqIHdlYlZpZXdCYXNlID0gV0VCS0lUX1dFQl9WSUVXX0JBU0UoZHJvcENvbnRl
eHQtPndpZGdldCk7CisgICAgICAgIHdlYlZpZXdCYXNlLT5wcml2LT5wYWdlUHJveHktPmRyYWdF
eGl0ZWQoJmRyYWdEYXRhKTsKKyAgICAgICAgd2ViVmlld0Jhc2UtPnByaXYtPnBhZ2VQcm94eS0+
cmVzZXREcmFnT3BlcmF0aW9uKCk7CisgICAgfQorCisgICAgZ19vYmplY3Rfc2V0X2RhdGEoR19P
QkpFQ1QoZHJvcENvbnRleHQtPmdka0NvbnRleHQuZ2V0KCkpLCAiZHJvcC1jb250ZXh0IiwgMCk7
CisgICAgZGVsZXRlIGRyb3BDb250ZXh0OworCisgICAgcmV0dXJuIEZBTFNFOworfQorCitzdGF0
aWMgdm9pZCB3ZWJraXRXZWJWaWV3QmFzZURyYWdMZWF2ZShHdGtXaWRnZXQqIHdpZGdldCwgR2Rr
RHJhZ0NvbnRleHQqIGNvbnRleHQsIGd1aW50IHRpbWUpCit7CisgICAgRHJvcENvbnRleHQqIGRy
b3BDb250ZXh0ID0gc3RhdGljX2Nhc3Q8RHJvcENvbnRleHQqPihnX29iamVjdF9nZXRfZGF0YShH
X09CSkVDVChjb250ZXh0KSwgImRyb3AtY29udGV4dCIpKTsKKyAgICBpZiAoIWRyb3BDb250ZXh0
KQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBEdXJpbmcgYSBkcm9wIEdUSysgd2lsbCBmaXJl
IGEgZHJhZy1sZWF2ZSBzaWduYWwgcmlnaHQgYmVmb3JlIGZpcmluZworICAgIC8vIHRoZSBkcmFn
LWRyb3Agc2lnbmFsLiBXZSB3YW50IHRoZSBhY3Rpb25zIGZvciBkcmFnLWxlYXZlIHRvIGhhcHBl
biBhZnRlcgorICAgIC8vIHRob3NlIGZvciBkcmFnLWRyb3AsIHNvIHNjaGVkdWxlIHRoZW0gdG8g
aGFwcGVuIGFzeW5jaHJvbm91c2x5IGhlcmUuCisgICAgZ19pZGxlX2FkZF9mdWxsKEdfUFJJT1JJ
VFlfREVGQVVMVCwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4oZG9EcmFnTGVhdmVMYXRl
ciksIGRyb3BDb250ZXh0LCBzdGF0aWNfY2FzdDxHRGVzdHJveU5vdGlmeT4oMCkpOworfQorCitz
dGF0aWMgZ2Jvb2xlYW4gd2Via2l0V2ViVmlld0Jhc2VEcmFnRHJvcChHdGtXaWRnZXQqIHdpZGdl
dCwgR2RrRHJhZ0NvbnRleHQqIGNvbnRleHQsIGdpbnQgeCwgZ2ludCB5LCBndWludCB0aW1lKQor
eworICAgIERyb3BDb250ZXh0KiBkcm9wQ29udGV4dCA9IHN0YXRpY19jYXN0PERyb3BDb250ZXh0
Kj4oZ19vYmplY3RfZ2V0X2RhdGEoR19PQkpFQ1QoY29udGV4dCksICJkcm9wLWNvbnRleHQiKSk7
CisgICAgaWYgKCFkcm9wQ29udGV4dCkKKyAgICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgZHJv
cENvbnRleHQtPmRyb3BIYXBwZW5lZCA9IHRydWU7CisKKyAgICBJbnRQb2ludCBwb3NpdGlvbih4
LCB5KTsKKyAgICBEcmFnRGF0YSBkcmFnRGF0YShkcm9wQ29udGV4dC0+ZGF0YU9iamVjdC5nZXQo
KSwgcG9zaXRpb24sIGNvbnZlcnRXaWRnZXRQb2ludFRvU2NyZWVuUG9pbnQod2lkZ2V0LCBwb3Np
dGlvbiksIGdka0RyYWdBY3Rpb25Ub0RyYWdPcGVyYXRpb24oZ2RrX2RyYWdfY29udGV4dF9nZXRf
YWN0aW9ucyhjb250ZXh0KSkpOworICAgIFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJWaWV3QmFzZSA9
IFdFQktJVF9XRUJfVklFV19CQVNFKHdpZGdldCk7CisgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFu
ZGxlIGhhbmRsZTsKKyAgICB3ZWJWaWV3QmFzZS0+cHJpdi0+cGFnZVByb3h5LT5wZXJmb3JtRHJh
ZygmZHJhZ0RhdGEsIFN0cmluZygpLCBoYW5kbGUpOworICAgIGd0a19kcmFnX2ZpbmlzaChjb250
ZXh0LCBUUlVFLCBGQUxTRSwgdGltZSk7CisKKyAgICByZXR1cm4gVFJVRTsKK30KKwogc3RhdGlj
IHZvaWQgd2Via2l0X3dlYl92aWV3X2Jhc2VfY2xhc3NfaW5pdChXZWJLaXRXZWJWaWV3QmFzZUNs
YXNzKiB3ZWJraXRXZWJWaWV3QmFzZUNsYXNzKQogewogICAgIEd0a1dpZGdldENsYXNzKiB3aWRn
ZXRDbGFzcyA9IEdUS19XSURHRVRfQ0xBU1Mod2Via2l0V2ViVmlld0Jhc2VDbGFzcyk7CkBAIC0y
OTYsNiArNDYwLDEyIEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19iYXNlX2NsYXNzX2lu
aXQoV2ViS2l0V2ViVmlld0Jhc2VDbGFzcyogd2Via2l0V2ViVmllCiAgICAgd2lkZ2V0Q2xhc3Mt
PnNjcm9sbF9ldmVudCA9IHdlYmtpdFdlYlZpZXdCYXNlU2Nyb2xsRXZlbnQ7CiAgICAgd2lkZ2V0
Q2xhc3MtPm1vdGlvbl9ub3RpZnlfZXZlbnQgPSB3ZWJraXRXZWJWaWV3QmFzZU1vdGlvbk5vdGlm
eUV2ZW50OwogICAgIHdpZGdldENsYXNzLT5xdWVyeV90b29sdGlwID0gd2Via2l0V2ViVmlld0Jh
c2VRdWVyeVRvb2x0aXA7CisgICAgd2lkZ2V0Q2xhc3MtPmRyYWdfZW5kID0gd2Via2l0V2ViVmll
d0Jhc2VEcmFnRW5kOworICAgIHdpZGdldENsYXNzLT5kcmFnX2RhdGFfZ2V0ID0gd2Via2l0V2Vi
Vmlld0Jhc2VEcmFnRGF0YUdldDsKKyAgICB3aWRnZXRDbGFzcy0+ZHJhZ19tb3Rpb24gPSB3ZWJr
aXRXZWJWaWV3QmFzZURyYWdNb3Rpb247CisgICAgd2lkZ2V0Q2xhc3MtPmRyYWdfbGVhdmUgPSB3
ZWJraXRXZWJWaWV3QmFzZURyYWdMZWF2ZTsKKyAgICB3aWRnZXRDbGFzcy0+ZHJhZ19kcm9wID0g
d2Via2l0V2ViVmlld0Jhc2VEcmFnRHJvcDsKKyAgICB3aWRnZXRDbGFzcy0+ZHJhZ19kYXRhX3Jl
Y2VpdmVkID0gd2Via2l0V2ViVmlld0Jhc2VEcmFnRGF0YVJlY2VpdmVkOwogCiAgICAgR09iamVj
dENsYXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyh3ZWJraXRXZWJWaWV3QmFzZUNs
YXNzKTsKICAgICBnb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0V2ViVmlld0Jhc2VGaW5h
bGl6ZTsKQEAgLTM0Myw0ICs1MTMsMjEgQEAgdm9pZCB3ZWJraXRXZWJWaWV3QmFzZVNldFRvb2x0
aXBUZXh0KFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJWaWV3QmFzZSwgY29uc3QgY2hhcioKICAgICBn
dGtfd2lkZ2V0X3RyaWdnZXJfdG9vbHRpcF9xdWVyeShHVEtfV0lER0VUKHdlYlZpZXdCYXNlKSk7
CiB9CiAKK3ZvaWQgd2Via2l0V2ViVmlld0Jhc2VTdGFydERyYWcoV2ViS2l0V2ViVmlld0Jhc2Uq
IHdlYlZpZXdCYXNlLCBjb25zdCBEcmFnRGF0YSYgZHJhZ0RhdGEsIFBhc3NSZWZQdHI8U2hhcmVh
YmxlQml0bWFwPiBkcmFnSW1hZ2UpCit7CisgICAgUmVmUHRyPERhdGFPYmplY3RHdGs+IGRhdGFP
YmplY3QoZHJhZ0RhdGEucGxhdGZvcm1EYXRhKCkpOworICAgIEdSZWZQdHI8R3RrVGFyZ2V0TGlz
dD4gdGFyZ2V0TGlzdChQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigp
LT50YXJnZXRMaXN0Rm9yRGF0YU9iamVjdChkYXRhT2JqZWN0LmdldCgpKSk7CisgICAgR2RrRHJh
Z0NvbnRleHQqIGNvbnRleHQgPSBndGtfZHJhZ19iZWdpbihHVEtfV0lER0VUKHdlYlZpZXdCYXNl
KSwgdGFyZ2V0TGlzdC5nZXQoKSwgZHJhZ09wZXJhdGlvblRvR2RrRHJhZ0FjdGlvbnMoZHJhZ0Rh
dGEuZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrKCkpLCAxLCBndGtfZ2V0X2N1cnJlbnRfZXZl
bnQoKSk7CisKKyAgICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVChjb250ZXh0KSwgImRyYWct
ZGF0YS1vYmplY3QiLCBkYXRhT2JqZWN0LmdldCgpKTsKIAorICAgIC8vIEEgZHJhZyBzdGFydGlu
ZyBzaG91bGQgcHJldmVudCBhIGRvdWJsZS1jbGljayBmcm9tIGhhcHBlbmluZy4gVGhpcyBtaWdo
dAorICAgIC8vIGhhcHBlbiBpZiBhIGRyYWcgaXMgZm9sbG93ZWQgdmVyeSBxdWlja2x5IGJ5IGFu
b3RoZXIgY2xpY2sgKGxpa2UgaW4gdGhlIERSVCkuCisgICAgd2ViVmlld0Jhc2UtPnByaXYtPmNs
aWNrQ291bnRlci5yZXNldCgpOworCisgICAgaWYgKGRyYWdJbWFnZSkgeworICAgICAgICBSZWZQ
dHI8Y2Fpcm9fc3VyZmFjZV90PiBpbWFnZShkcmFnSW1hZ2UtPmNyZWF0ZUNhaXJvU3VyZmFjZSgp
KTsKKyAgICAgICAgZ3RrX2RyYWdfc2V0X2ljb25fc3VyZmFjZShjb250ZXh0LCBpbWFnZS5nZXQo
KSk7CisgICAgfSBlbHNlCisgICAgICAgIGd0a19kcmFnX3NldF9pY29uX2RlZmF1bHQoY29udGV4
dCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJL
aXRXZWJWaWV3QmFzZVByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3Rr
L1dlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oCmluZGV4IDY5OTY3MzguLmY1OGU1YTggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNl
UHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdl
YlZpZXdCYXNlUHJpdmF0ZS5oCkBAIC00Niw2ICs0Niw4IEBAIHZvaWQgd2Via2l0V2ViVmlld0Jh
c2VDcmVhdGVXZWJQYWdlKFdlYktpdFdlYlZpZXdCYXNlKiwgV0tDb250ZXh0UmVmLCBXS1BhZ2VH
cm91CiAKIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VTZXRUb29sdGlwVGV4dChXZWJLaXRXZWJWaWV3
QmFzZSosIGNvbnN0IGNoYXIqKTsKIAordm9pZCB3ZWJraXRXZWJWaWV3QmFzZVN0YXJ0RHJhZyhX
ZWJLaXRXZWJWaWV3QmFzZSosIGNvbnN0IFdlYkNvcmU6OkRyYWdEYXRhJiwgUGFzc1JlZlB0cjxT
aGFyZWFibGVCaXRtYXA+IGRyYWdJbWFnZSk7CisKIEdfRU5EX0RFQ0xTCiAKICNlbmRpZiAvLyBX
ZWJLaXRXZWJWaWV3QmFzZVByaXZhdGVfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1BhZ2VDbGllbnQuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50
LmgKaW5kZXggYmVlODJlYy4uOTE1YTA2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1BhZ2VDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNs
aWVudC5oCkBAIC0xMDUsNyArMTA1LDkgQEAgcHVibGljOgogI2lmIFBMQVRGT1JNKFFUKQogICAg
IHZpcnR1YWwgdm9pZCBkaWRDaGFuZ2VDb250ZW50c1NpemUoY29uc3QgV2ViQ29yZTo6SW50U2l6
ZSYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGlkRmluZFpvb21hYmxlQXJlYShjb25zdCBXZWJD
b3JlOjpJbnRSZWN0JikgPSAwOworI2VuZGlmCiAKKyNpZiBQTEFURk9STShRVCkgfHwgUExBVEZP
Uk0oR1RLKQogICAgIHZpcnR1YWwgdm9pZCBzdGFydERyYWcoY29uc3QgV2ViQ29yZTo6RHJhZ0Rh
dGEmLCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gZHJhZ0ltYWdlKSA9IDA7CiAjZW5kaWYK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAppbmRleCA2ZDRiMzY2
Li42OWY5NTk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcApA
QCAtOTIsNiArOTIsMTAgQEAKICNpbmNsdWRlICJBcmd1bWVudENvZGVyc1F0LmgiCiAjZW5kaWYK
IAorI2lmIFBMQVRGT1JNKEdUSykKKyNpbmNsdWRlICJBcmd1bWVudENvZGVyc0d0ay5oIgorI2Vu
ZGlmCisKICNpZm5kZWYgTkRFQlVHCiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWRMZWFrQ291bnRl
ci5oPgogI2VuZGlmCkBAIC04MTUsNyArODE5LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnBlcmZv
cm1EcmFnQ29udHJvbGxlckFjdGlvbihEcmFnQ29udHJvbGxlckFjdGlvbiBhY3Rpb24sIERyYWcK
ICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHBhc3MgdGhlIGRyYWcgZGF0YSBtYXAgb25seSBvbiBE
cmFnRW50ZXIuCiAgICAgcHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpQZXJmb3Jt
RHJhZ0NvbnRyb2xsZXJBY3Rpb24oYWN0aW9uLCBkcmFnRGF0YS0+Y2xpZW50UG9zaXRpb24oKSwg
ZHJhZ0RhdGEtPmdsb2JhbFBvc2l0aW9uKCksCiAgICAgICAgIGRyYWdEYXRhLT5kcmFnZ2luZ1Nv
dXJjZU9wZXJhdGlvbk1hc2soKSwgZHJhZ0RhdGEtPmRyYWdEYXRhTWFwKCksIGRyYWdEYXRhLT5m
bGFncygpKSwgbV9wYWdlSUQpOwotI2VsaWYgUExBVEZPUk0oUVQpCisjZWxpZiBQTEFURk9STShR
VCkgfHwgUExBVEZPUk0oR1RLKQogICAgIHByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6V2ViUGFn
ZTo6UGVyZm9ybURyYWdDb250cm9sbGVyQWN0aW9uKGFjdGlvbiwgKmRyYWdEYXRhKSwgbV9wYWdl
SUQpOwogI2Vsc2UKICAgICBwcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlBlcmZv
cm1EcmFnQ29udHJvbGxlckFjdGlvbihhY3Rpb24sIGRyYWdEYXRhLT5jbGllbnRQb3NpdGlvbigp
LCBkcmFnRGF0YS0+Z2xvYmFsUG9zaXRpb24oKSwgZHJhZ0RhdGEtPmRyYWdnaW5nU291cmNlT3Bl
cmF0aW9uTWFzaygpLCBkcmFnU3RvcmFnZU5hbWUsIGRyYWdEYXRhLT5mbGFncygpLCBzYW5kYm94
RXh0ZW5zaW9uSGFuZGxlKSwgbV9wYWdlSUQpOwpAQCAtODg5LDEyICs4OTMsMTUgQEAgdm9pZCBX
ZWJQYWdlUHJveHk6OnN0YXJ0RHJhZ0Ryb3AoY29uc3QgSW50UG9pbnQmIGltYWdlT3JpZ2luLCBj
b25zdCBJbnRQb2ludCYgZHIKIH0KICNlbmRpZgogCi0jaWYgUExBVEZPUk0oUVQpCisjaWYgUExB
VEZPUk0oUVQpIHx8IFBMQVRGT1JNKEdUSykKIHZvaWQgV2ViUGFnZVByb3h5OjpzdGFydERyYWco
Y29uc3QgRHJhZ0RhdGEmIGRyYWdEYXRhLCBjb25zdCBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYg
ZHJhZ0ltYWdlSGFuZGxlKQogewotICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGRyYWdJbWFn
ZSA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlKGRyYWdJbWFnZUhhbmRsZSk7Ci0gICAgaWYgKCFk
cmFnSW1hZ2UpCi0gICAgICAgIHJldHVybjsKKyAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBk
cmFnSW1hZ2UgPSAwOworICAgIGlmICghZHJhZ0ltYWdlSGFuZGxlLmlzTnVsbCgpKSB7CisgICAg
ICAgIGRyYWdJbWFnZSA9IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlKGRyYWdJbWFnZUhhbmRsZSk7
CisgICAgICAgIGlmICghZHJhZ0ltYWdlKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KIAog
ICAgIG1fcGFnZUNsaWVudC0+c3RhcnREcmFnKGRyYWdEYXRhLCBkcmFnSW1hZ2UucmVsZWFzZSgp
KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHku
aCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAppbmRleCA2NWY0ZWZi
Li5iMmQ3YjViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCkBAIC00
NjEsNyArNDYxLDcgQEAgcHVibGljOgogI2lmIFBMQVRGT1JNKFdJTikKICAgICB2b2lkIHN0YXJ0
RHJhZ0Ryb3AoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGltYWdlUG9pbnQsIGNvbnN0IFdlYkNv
cmU6OkludFBvaW50JiBkcmFnUG9pbnQsIHVpbnQ2NF90IG9rRWZmZWN0LCBjb25zdCBIYXNoTWFw
PFVJTlQsIFZlY3RvcjxTdHJpbmc+ID4mIGRhdGFNYXAsIHVpbnQ2NF90IGZpbGVTaXplLCBjb25z
dCBTdHJpbmcmIHBhdGhuYW1lLCBjb25zdCBTaGFyZWRNZW1vcnk6OkhhbmRsZSYgZmlsZUNvbnRl
bnRIYW5kbGUsIGNvbnN0IFdlYkNvcmU6OkludFNpemUmIGRyYWdJbWFnZVNpemUsIGNvbnN0IFNo
YXJlZE1lbW9yeTo6SGFuZGxlJiBkcmFnSW1hZ2VIYW5kbGUsIGJvb2wgaXNMaW5rRHJhZyk7CiAj
ZW5kaWYKLSNpZiBQTEFURk9STShRVCkKKyNpZiBQTEFURk9STShRVCkgfHwgUExBVEZPUk0oR1RL
KQogICAgIHZvaWQgc3RhcnREcmFnKGNvbnN0IFdlYkNvcmU6OkRyYWdEYXRhJiwgY29uc3QgU2hh
cmVhYmxlQml0bWFwOjpIYW5kbGUmIGRyYWdJbWFnZSk7CiAjZW5kaWYKICAgICB2b2lkIGRpZFJl
Y2VpdmVNZXNzYWdlKENvcmVJUEM6OkNvbm5lY3Rpb24qLCBDb3JlSVBDOjpNZXNzYWdlSUQsIENv
cmVJUEM6OkFyZ3VtZW50RGVjb2RlciopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4KaW5kZXggMmMxZjcxOS4uOTZkOGRjZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCkBA
IC0yMTIsNyArMjEyLDcgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZVByb3h5IHsKICNpZiBQTEFURk9S
TShXSU4pCiAgICAgU3RhcnREcmFnRHJvcChXZWJDb3JlOjpJbnRQb2ludCBpbWFnZVBvaW50LCBX
ZWJDb3JlOjpJbnRQb2ludCBkcmFnUG9pbnQsIHVpbnQ2NF90IG9rRWZmZWN0LCBIYXNoTWFwPFVJ
TlQsVmVjdG9yPFN0cmluZz4gPiBkYXRhTWFwLCB1aW50NjRfdCBmaWxlU2l6ZSwgU3RyaW5nIHBh
dGhuYW1lLCBXZWJLaXQ6OlNoYXJlZE1lbW9yeTo6SGFuZGxlIGZpbGVDb250ZW50SGFuZGxlLCBX
ZWJDb3JlOjpJbnRTaXplIGRyYWdJbWFnZVNpemUsIFdlYktpdDo6U2hhcmVkTWVtb3J5OjpIYW5k
bGUgZHJhZ0ltYWdlLCBib29sIGxpbmtEcmFnKQogI2VuZGlmCi0jaWYgUExBVEZPUk0oUVQpCisj
aWYgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEdUSykKICAgICBTdGFydERyYWcoV2ViQ29yZTo6
RHJhZ0RhdGEgZHJhZ0RhdGEsIFdlYktpdDo6U2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgZHJhZ0lt
YWdlKQogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViRHJhZ0NsaWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L1dlYkNvcmVTdXBwb3J0L1dlYkRyYWdDbGllbnQuY3BwCmluZGV4IGFlZmMwMWEuLjU3YWQ2YTQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2Vi
RHJhZ0NsaWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9XZWJEcmFnQ2xpZW50LmNwcApAQCAtNTIsNyArNTIsNyBAQCBEcmFnU291cmNlQWN0aW9u
IFdlYkRyYWdDbGllbnQ6OmRyYWdTb3VyY2VBY3Rpb25NYXNrRm9yUG9pbnQoY29uc3QgSW50UG9p
bnQmIHdpbgogICAgIHJldHVybiBEcmFnU291cmNlQWN0aW9uQW55OwogfQogCi0jaWYgIVBMQVRG
T1JNKE1BQykgJiYgIVBMQVRGT1JNKFdJTikgJiYgIVBMQVRGT1JNKFFUKQorI2lmICFQTEFURk9S
TShNQUMpICYmICFQTEFURk9STShXSU4pICYmICFQTEFURk9STShRVCkgJiYgIVBMQVRGT1JNKEdU
SykKIHZvaWQgV2ViRHJhZ0NsaWVudDo6c3RhcnREcmFnKERyYWdJbWFnZVJlZiwgY29uc3QgSW50
UG9pbnQmLCBjb25zdCBJbnRQb2ludCYsIENsaXBib2FyZCosIEZyYW1lKiwgYm9vbCkKIHsKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3Rr
L1dlYkRyYWdDbGllbnRHdGsuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3Jl
U3VwcG9ydC9ndGsvV2ViRHJhZ0NsaWVudEd0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uZTlhY2YyZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkRyYWdDbGllbnRHdGsuY3BwCkBAIC0wLDAg
KzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkRyYWdDbGllbnQuaCIKKworI2lu
Y2x1ZGUgIkFyZ3VtZW50Q29kZXJzR3RrLmgiCisjaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFwLmgi
CisjaW5jbHVkZSAiV2ViUGFnZS5oIgorI2luY2x1ZGUgIldlYlBhZ2VQcm94eU1lc3NhZ2VzLmgi
CisjaW5jbHVkZSA8V2ViQ29yZS9DbGlwYm9hcmRHdGsuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0Ry
YWdEYXRhLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KKyNpbmNsdWRl
IDxXZWJDb3JlL1BsYXRmb3JtQ29udGV4dENhaXJvLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKworc3RhdGljIFBhc3NSZWZQdHI8U2hhcmVhYmxl
Qml0bWFwPiBjb252ZXJ0Q2Fpcm9TdXJmYWNlVG9TaGFyZWFibGVCaXRtYXAoY2Fpcm9fc3VyZmFj
ZV90KiBzdXJmYWNlKQoreworICAgIGlmICghc3VyZmFjZSkKKyAgICAgICAgcmV0dXJuIDA7CisK
KyAgICBJbnRTaXplIGltYWdlU2l6ZShjYWlyb19pbWFnZV9zdXJmYWNlX2dldF93aWR0aChzdXJm
YWNlKSwgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KHN1cmZhY2UpKTsKKyAgICBSZWZQ
dHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSBTaGFyZWFibGVCaXRtYXA6OmNyZWF0ZVNoYXJl
YWJsZShpbWFnZVNpemUsIFNoYXJlYWJsZUJpdG1hcDo6U3VwcG9ydHNBbHBoYSk7CisgICAgT3du
UHRyPEdyYXBoaWNzQ29udGV4dD4gZ3JhcGhpY3NDb250ZXh0ID0gYml0bWFwLT5jcmVhdGVHcmFw
aGljc0NvbnRleHQoKTsKKworICAgIGdyYXBoaWNzQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCkt
PmRyYXdTdXJmYWNlVG9Db250ZXh0KHN1cmZhY2UsIEludFJlY3QoSW50UG9pbnQoKSwgaW1hZ2VT
aXplKSwgSW50UmVjdChJbnRQb2ludCgpLCBpbWFnZVNpemUpLCBncmFwaGljc0NvbnRleHQuZ2V0
KCkpOworICAgIHJldHVybiBiaXRtYXAucmVsZWFzZSgpOworfQorCit2b2lkIFdlYkRyYWdDbGll
bnQ6OnN0YXJ0RHJhZyhEcmFnSW1hZ2VSZWYgZHJhZ0ltYWdlLCBjb25zdCBJbnRQb2ludCYgY2xp
ZW50UG9zaXRpb24sIGNvbnN0IEludFBvaW50JiBnbG9iYWxQb3NpdGlvbiwgQ2xpcGJvYXJkKiBj
bGlwYm9hcmQsIEZyYW1lKiwgYm9vbCkKK3sKKyAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBi
aXRtYXAgPSBjb252ZXJ0Q2Fpcm9TdXJmYWNlVG9TaGFyZWFibGVCaXRtYXAoZHJhZ0ltYWdlKTsK
KyAgICBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBoYW5kbGU7CisgICAgaWYgKGJpdG1hcCAmJiAh
Yml0bWFwLT5jcmVhdGVIYW5kbGUoaGFuZGxlKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgUmVm
UHRyPERhdGFPYmplY3RHdGs+IGRhdGFPYmplY3QgPSByZWludGVycHJldF9jYXN0PENsaXBib2Fy
ZEd0ayo+KGNsaXBib2FyZCktPmRhdGFPYmplY3QoKTsKKyAgICBEcmFnRGF0YSBkcmFnRGF0YShk
YXRhT2JqZWN0LmdldCgpLCBjbGllbnRQb3NpdGlvbiwgZ2xvYmFsUG9zaXRpb24sIGNsaXBib2Fy
ZC0+c291cmNlT3BlcmF0aW9uKCkpOworICAgIG1fcGFnZS0+c2VuZChNZXNzYWdlczo6V2ViUGFn
ZVByb3h5OjpTdGFydERyYWcoZHJhZ0RhdGEsIGhhbmRsZSkpOworfQorCit9OyAvLyBuYW1lc3Bh
Y2UgV2ViS2l0LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
Y3BwCmluZGV4IDY1NDQzYWIuLjkwYmRmNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKQEAgLTE3MDgsMTIgKzE3MDgsMTYgQEAgdm9pZCBXZWJQ
YWdlOjpwZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24odWludDY0X3QgYWN0aW9uLCBXZWJDb3Jl
OjpJbnRQb2ludCBjbGkKICAgICB9CiB9CiAKLSNlbGlmIFBMQVRGT1JNKFFUKQorI2VsaWYgUExB
VEZPUk0oUVQpIHx8IFBMQVRGT1JNKEdUSykKIHZvaWQgV2ViUGFnZTo6cGVyZm9ybURyYWdDb250
cm9sbGVyQWN0aW9uKHVpbnQ2NF90IGFjdGlvbiwgV2ViQ29yZTo6RHJhZ0RhdGEgZHJhZ0RhdGEp
CiB7CiAgICAgaWYgKCFtX3BhZ2UpIHsKICAgICAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVBy
b3h5OjpEaWRQZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24oRHJhZ09wZXJhdGlvbk5vbmUpKTsK
KyNpZiBQTEFURk9STShRVCkKICAgICAgICAgUU1pbWVEYXRhKiBkYXRhID0gY29uc3RfY2FzdDxR
TWltZURhdGEqPihkcmFnRGF0YS5wbGF0Zm9ybURhdGEoKSk7CisjZWxpZiBQTEFURk9STShHVEsp
CisgICAgICAgIERhdGFPYmplY3RHdGsqIGRhdGEgPSBjb25zdF9jYXN0PERhdGFPYmplY3RHdGsq
PihkcmFnRGF0YS5wbGF0Zm9ybURhdGEoKSk7CisjZW5kaWYKICAgICAgICAgZGVsZXRlIGRhdGE7
CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xNzQwLDcgKzE3NDQsMTEgQEAgdm9pZCBXZWJQ
YWdlOjpwZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24odWludDY0X3QgYWN0aW9uLCBXZWJDb3Jl
OjpEcmFnRGF0YSBkcmEKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQogICAg
IC8vIERyYWdEYXRhIGRvZXMgbm90IGRlbGV0ZSBpdHMgcGxhdGZvcm1EYXRhIHNvIHdlIG5lZWQg
dG8gZG8gdGhhdCBoZXJlLgorI2lmIFBMQVRGT1JNKFFUKQogICAgIFFNaW1lRGF0YSogZGF0YSA9
IGNvbnN0X2Nhc3Q8UU1pbWVEYXRhKj4oZHJhZ0RhdGEucGxhdGZvcm1EYXRhKCkpOworI2VsaWYg
UExBVEZPUk0oR1RLKQorICAgIERhdGFPYmplY3RHdGsqIGRhdGEgPSBjb25zdF9jYXN0PERhdGFP
YmplY3RHdGsqPihkcmFnRGF0YS5wbGF0Zm9ybURhdGEoKSk7CisjZW5kaWYKICAgICBkZWxldGUg
ZGF0YTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgK
aW5kZXggNDVkMDYwZS4uNTdmOTUwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5oCkBAIC02MCw2ICs2MCwxMCBAQAogI2luY2x1ZGUgIkFyZ3VtZW50Q29k
ZXJzUXQuaCIKICNlbmRpZgogCisjaWYgUExBVEZPUk0oR1RLKQorI2luY2x1ZGUgIkFyZ3VtZW50
Q29kZXJzR3RrLmgiCisjZW5kaWYKKwogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCiAjaW5jbHVk
ZSA8V2ViQ29yZS9QbGF0Zm9ybVRvdWNoRXZlbnQuaD4KICNlbmRpZgpAQCAtMzgwLDcgKzM4NCw3
IEBAIHB1YmxpYzoKICAgICB2b2lkIGNsZWFyU2VsZWN0aW9uKCk7CiAjaWYgUExBVEZPUk0oV0lO
KQogICAgIHZvaWQgcGVyZm9ybURyYWdDb250cm9sbGVyQWN0aW9uKHVpbnQ2NF90IGFjdGlvbiwg
V2ViQ29yZTo6SW50UG9pbnQgY2xpZW50UG9zaXRpb24sIFdlYkNvcmU6OkludFBvaW50IGdsb2Jh
bFBvc2l0aW9uLCB1aW50NjRfdCBkcmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1hc2ssIGNvbnN0IFdl
YkNvcmU6OkRyYWdEYXRhTWFwJiwgdWludDMyX3QgZmxhZ3MpOwotI2VsaWYgUExBVEZPUk0oUVQp
CisjZWxpZiBQTEFURk9STShRVCkgfHwgUExBVEZPUk0oR1RLKQogICAgIHZvaWQgcGVyZm9ybURy
YWdDb250cm9sbGVyQWN0aW9uKHVpbnQ2NF90IGFjdGlvbiwgV2ViQ29yZTo6RHJhZ0RhdGEpOwog
I2Vsc2UKICAgICB2b2lkIHBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlvbih1aW50NjRfdCBhY3Rp
b24sIFdlYkNvcmU6OkludFBvaW50IGNsaWVudFBvc2l0aW9uLCBXZWJDb3JlOjpJbnRQb2ludCBn
bG9iYWxQb3NpdGlvbiwgdWludDY0X3QgZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrLCBjb25z
dCBXVEY6OlN0cmluZyYgZHJhZ1N0b3JhZ2VOYW1lLCB1aW50MzJfdCBmbGFncywgY29uc3QgU2Fu
ZGJveEV4dGVuc2lvbjo6SGFuZGxlJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCmluZGV4IDAyMmU1YjkuLmZjOGMxMWMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1l
c3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
Lm1lc3NhZ2VzLmluCkBAIC0xMjUsMTAgKzEyNSwxMCBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlIHsK
ICNpZiBQTEFURk9STShXSU4pCiAgICAgUGVyZm9ybURyYWdDb250cm9sbGVyQWN0aW9uKHVpbnQ2
NF90IGFjdGlvbiwgV2ViQ29yZTo6SW50UG9pbnQgY2xpZW50UG9zaXRpb24sIFdlYkNvcmU6Oklu
dFBvaW50IGdsb2JhbFBvc2l0aW9uLCB1aW50NjRfdCBkcmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1h
c2ssIEhhc2hNYXA8VUlOVCxWZWN0b3I8U3RyaW5nPj4gZGF0YU1hcCwgdWludDMyX3QgZmxhZ3Mp
CiAjZW5kaWYKLSNpZiBQTEFURk9STShRVCkKKyNpZiBQTEFURk9STShRVCkgfHwgUExBVEZPUk0o
R1RLKQogICAgIFBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlvbih1aW50NjRfdCBhY3Rpb24sIFdl
YkNvcmU6OkRyYWdEYXRhIGRyYWdEYXRhKQogI2VuZGlmCi0jaWYgIVBMQVRGT1JNKFdJTikgJiYg
IVBMQVRGT1JNKFFUKQorI2lmICFQTEFURk9STShXSU4pICYmICFQTEFURk9STShRVCkgJiYgIVBM
QVRGT1JNKEdUSykKICAgICBQZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24odWludDY0X3QgYWN0
aW9uLCBXZWJDb3JlOjpJbnRQb2ludCBjbGllbnRQb3NpdGlvbiwgV2ViQ29yZTo6SW50UG9pbnQg
Z2xvYmFsUG9zaXRpb24sIHVpbnQ2NF90IGRyYWdnaW5nU291cmNlT3BlcmF0aW9uTWFzaywgV1RG
OjpTdHJpbmcgZHJhZ1N0b3JhZ2VOYW1lLCB1aW50MzJfdCBmbGFncywgV2ViS2l0OjpTYW5kYm94
RXh0ZW5zaW9uOjpIYW5kbGUgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSkKICNlbmRpZgogICAgIERy
YWdFbmRlZChXZWJDb3JlOjpJbnRQb2ludCBjbGllbnRQb3NpdGlvbiwgV2ViQ29yZTo6SW50UG9p
bnQgZ2xvYmFsUG9zaXRpb24sIHVpbnQ2NF90IG9wZXJhdGlvbikK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>106978</attachid>
            <date>2011-09-10 12:40:04 -0700</date>
            <delta_ts>2011-10-06 23:26:30 -0700</delta_ts>
            <desc>Patch using GtkWidgetDragAndDropGlue</desc>
            <filename>bug-63706-20110910124003.patch</filename>
            <type>text/plain</type>
            <size>41801</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTQ5MTEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAzMTk4YmMzNWE1N2FhYmIy
MWRhMmYzNWUyMjNkM2YzY2ZjZTRjMTYyLi40ZTJiYmE4ZDA2MjVmZmU0NmRlYzFmY2EzMzZiYjg4
YzIwYzc0ZmFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjggQEAKKzIwMTEtMDgtMDggIENhcmxv
cyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIElt
cGxlbWVudCBkcmFnIGFuZCBkcm9wIHN1cHBvcnQgaW4gV2ViS2l0MgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjM3MDYKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL0RyYWdEYXRhLmg6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3RrL0RhdGFPYmplY3RHdGsuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RGF0YU9iamVjdEd0azo6dGV4dCk6IE1hcmsgYXMgY29uc3QuCisgICAgICAgIChXZWJDb3Jl
OjpEYXRhT2JqZWN0R3RrOjptYXJrdXApOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRhdGFP
YmplY3RHdGs6OnVybExhYmVsKTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vZ3RrL0RhdGFP
YmplY3RHdGsuaDogUmVtb3ZlIHVudXNlZCBtZW1iZXIKKyAgICAgICAgbV9kcmFnQ29udGV4dC4K
KyAgICAgICAgKFdlYkNvcmU6OkRhdGFPYmplY3RHdGs6OnVybCk6IE1hcmsgYXMgY29uc3QuCisg
ICAgICAgIChXZWJDb3JlOjpEYXRhT2JqZWN0R3RrOjp1cmlMaXN0KTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpEYXRhT2JqZWN0R3RrOjpmaWxlbmFtZXMpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OkRhdGFPYmplY3RHdGs6OmltYWdlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpE
YXRhT2JqZWN0R3RrOjpoYXNUZXh0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpEYXRhT2Jq
ZWN0R3RrOjpoYXNNYXJrdXApOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRhdGFPYmplY3RH
dGs6Omhhc1VSSUxpc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRhdGFPYmplY3RHdGs6
Omhhc1VSTCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RGF0YU9iamVjdEd0azo6aGFzRmls
ZW5hbWVzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpEYXRhT2JqZWN0R3RrOjpoYXNJbWFn
ZSk6IERpdHRvLgorCiAyMDExLTA4LTI0ICBNYXJ0aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdh
bGlhLmNvbT4KIAogICAgICAgICBbR1RLXSBNb3ZlIGRyYWctYW5kLWRyb3AgY29kZSB3aGljaCBj
YW4gYmUgc2hhcmVkIHdpdGggV2ViS2l0MiB0byBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9EcmFnRGF0YS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJh
Z0RhdGEuaAppbmRleCA5MjNmZGIyYTA3YjA4MGQzMWNmYWQzNTZiNmQ2MTUxYzFkYjZmNTczLi41
NGI1MTYyNTkxOTAwYjU4ODk2OWFiMDk5ZjU5MDdkOWUwZmViZDdiIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9EcmFnRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL0RyYWdEYXRhLmgKQEAgLTEyMyw3ICsxMjMsNyBAQCBwdWJsaWM6CiAgICAgTlNQYXN0ZWJv
YXJkICpwYXN0ZWJvYXJkKCkgeyByZXR1cm4gbV9wYXN0ZWJvYXJkLmdldCgpOyB9CiAjZW5kaWYK
IAotI2lmIFBMQVRGT1JNKFFUKQorI2lmIFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShHVEspCiAg
ICAgLy8gVGhpcyBjb25zdHJ1Y3RvciBzaG91bGQgdXNlZCBvbmx5IGJ5IFdlYktpdDIgSVBDIGJl
Y2F1c2UgRHJhZ0RhdGEKICAgICAvLyBpcyBpbml0aWFsaXplZCBieSB0aGUgZGVjb2RlciBhbmQg
bm90IGluIHRoZSBjb25zdHJ1Y3Rvci4KICAgICBEcmFnRGF0YSgpIHsgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0RhdGFPYmplY3RHdGsuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL0RhdGFPYmplY3RHdGsuY3BwCmluZGV4IDIwYTllOWI0YWMwMGM1
M2UwZTYyODYyYTZhODIwNGM0NTkyNTk1NWIuLjMyNDA1YzE3ZjZmMmRlNzFlMGQyZGJmY2MwNjUy
Y2Y3ZGQyMGU3YjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EYXRh
T2JqZWN0R3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRGF0YU9iamVj
dEd0ay5jcHAKQEAgLTMzLDE0ICszMywxNCBAQCBzdGF0aWMgdm9pZCByZXBsYWNlTm9uQnJlYWtp
bmdTcGFjZVdpdGhTcGFjZShTdHJpbmcmIHN0cikKICAgICBzdHIucmVwbGFjZShOb25CcmVha2lu
Z1NwYWNlQ2hhcmFjdGVyLCBTcGFjZUNoYXJhY3Rlcik7CiB9CiAKLVN0cmluZyBEYXRhT2JqZWN0
R3RrOjp0ZXh0KCkKK1N0cmluZyBEYXRhT2JqZWN0R3RrOjp0ZXh0KCkgY29uc3QKIHsKICAgICBp
ZiAobV9yYW5nZSkKICAgICAgICAgcmV0dXJuIG1fcmFuZ2UtPnRleHQoKTsKICAgICByZXR1cm4g
bV90ZXh0OwogfQogCi1TdHJpbmcgRGF0YU9iamVjdEd0azo6bWFya3VwKCkKK1N0cmluZyBEYXRh
T2JqZWN0R3RrOjptYXJrdXAoKSBjb25zdAogewogICAgIGlmIChtX3JhbmdlKQogICAgICAgICBy
ZXR1cm4gY3JlYXRlTWFya3VwKG1fcmFuZ2UuZ2V0KCksIDAsIEFubm90YXRlRm9ySW50ZXJjaGFu
Z2UsIGZhbHNlLCBSZXNvbHZlTm9uTG9jYWxVUkxzKTsKQEAgLTEzMyw3ICsxMzMsNyBAQCB2b2lk
IERhdGFPYmplY3RHdGs6OmNsZWFyTWFya3VwKCkKICAgICBtX21hcmt1cCA9ICIiOwogfQogCi1T
dHJpbmcgRGF0YU9iamVjdEd0azo6dXJsTGFiZWwoKQorU3RyaW5nIERhdGFPYmplY3RHdGs6OnVy
bExhYmVsKCkgY29uc3QKIHsKICAgICBpZiAoaGFzVGV4dCgpKQogICAgICAgICByZXR1cm4gdGV4
dCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0RhdGFPYmplY3RH
dGsuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EYXRhT2JqZWN0R3RrLmgKaW5kZXgg
NTQyM2Y4MWQzMjMyNTc3NDFlNmU0YzcwMGFmZDk4ZWY0MmQ1ZjZlZi4uZTI3YmM5MTVmZjZiZTNj
ZjI0NGQ5YmNlNTM1ZjUzMjJlZGM1ZTcxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3RrL0RhdGFPYmplY3RHdGsuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
dGsvRGF0YU9iamVjdEd0ay5oCkBAIC0zNiwzMSArMzYsMjkgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IERhdGFPYmplY3RHdGsoKSk7CiAgICAgfQogCi0gICAgY29uc3Qg
S1VSTCYgdXJsKCkgeyByZXR1cm4gbV91cmw7IH0KLSAgICBjb25zdCBTdHJpbmcmIHVyaUxpc3Qo
KSB7IHJldHVybiBtX3VyaUxpc3Q7IH0KLSAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgZmlsZW5h
bWVzKCkgeyByZXR1cm4gbV9maWxlbmFtZXM7IH0KLSAgICBHZGtQaXhidWYqIGltYWdlKCkgeyBy
ZXR1cm4gbV9pbWFnZS5nZXQoKTsgfQorICAgIGNvbnN0IEtVUkwmIHVybCgpIGNvbnN0IHsgcmV0
dXJuIG1fdXJsOyB9CisgICAgY29uc3QgU3RyaW5nJiB1cmlMaXN0KCkgY29uc3QgeyByZXR1cm4g
bV91cmlMaXN0OyB9CisgICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIGZpbGVuYW1lcygpIGNvbnN0
IHsgcmV0dXJuIG1fZmlsZW5hbWVzOyB9CisgICAgR2RrUGl4YnVmKiBpbWFnZSgpIGNvbnN0IHsg
cmV0dXJuIG1faW1hZ2UuZ2V0KCk7IH0KICAgICB2b2lkIHNldFJhbmdlKFBhc3NSZWZQdHI8UmFu
Z2U+IG5ld1JhbmdlKSB7IG1fcmFuZ2UgPSBuZXdSYW5nZTsgfQogICAgIHZvaWQgc2V0SW1hZ2Uo
R2RrUGl4YnVmKiBuZXdJbWFnZSkgeyBtX2ltYWdlID0gbmV3SW1hZ2U7IH0KLSAgICB2b2lkIHNl
dERyYWdDb250ZXh0KEdka0RyYWdDb250ZXh0KiBuZXdEcmFnQ29udGV4dCkgeyBtX2RyYWdDb250
ZXh0ID0gbmV3RHJhZ0NvbnRleHQ7IH0KICAgICB2b2lkIHNldFVSTChjb25zdCBLVVJMJiwgY29u
c3QgU3RyaW5nJik7Ci0gICAgYm9vbCBoYXNUZXh0KCkgeyByZXR1cm4gbV9yYW5nZSB8fCAhbV90
ZXh0LmlzRW1wdHkoKTsgfQotICAgIGJvb2wgaGFzTWFya3VwKCkgeyByZXR1cm4gbV9yYW5nZSB8
fCAhbV9tYXJrdXAuaXNFbXB0eSgpOyB9Ci0gICAgYm9vbCBoYXNVUklMaXN0KCkgeyByZXR1cm4g
IW1fdXJpTGlzdC5pc0VtcHR5KCk7IH0KLSAgICBib29sIGhhc1VSTCgpIHsgcmV0dXJuICFtX3Vy
bC5pc0VtcHR5KCkgJiYgbV91cmwuaXNWYWxpZCgpOyB9Ci0gICAgYm9vbCBoYXNGaWxlbmFtZXMo
KSB7IHJldHVybiAhbV9maWxlbmFtZXMuaXNFbXB0eSgpOyB9Ci0gICAgYm9vbCBoYXNJbWFnZSgp
IHsgcmV0dXJuIG1faW1hZ2U7IH0KKyAgICBib29sIGhhc1RleHQoKSBjb25zdCB7IHJldHVybiBt
X3JhbmdlIHx8ICFtX3RleHQuaXNFbXB0eSgpOyB9CisgICAgYm9vbCBoYXNNYXJrdXAoKSBjb25z
dCB7IHJldHVybiBtX3JhbmdlIHx8ICFtX21hcmt1cC5pc0VtcHR5KCk7IH0KKyAgICBib29sIGhh
c1VSSUxpc3QoKSBjb25zdCB7IHJldHVybiAhbV91cmlMaXN0LmlzRW1wdHkoKTsgfQorICAgIGJv
b2wgaGFzVVJMKCkgY29uc3QgeyByZXR1cm4gIW1fdXJsLmlzRW1wdHkoKSAmJiBtX3VybC5pc1Zh
bGlkKCk7IH0KKyAgICBib29sIGhhc0ZpbGVuYW1lcygpIGNvbnN0IHsgcmV0dXJuICFtX2ZpbGVu
YW1lcy5pc0VtcHR5KCk7IH0KKyAgICBib29sIGhhc0ltYWdlKCkgY29uc3QgeyByZXR1cm4gbV9p
bWFnZTsgfQogICAgIHZvaWQgY2xlYXJVUklMaXN0KCkgeyBtX3VyaUxpc3QgPSAiIjsgfQogICAg
IHZvaWQgY2xlYXJVUkwoKSB7IG1fdXJsID0gS1VSTCgpOyB9CiAgICAgdm9pZCBjbGVhckltYWdl
KCkgeyBtX2ltYWdlID0gMDsgfQotICAgIEdka0RyYWdDb250ZXh0KiBkcmFnQ29udGV4dCgpIHsg
cmV0dXJuIG1fZHJhZ0NvbnRleHQuZ2V0KCk7IH0KIAotICAgIFN0cmluZyB0ZXh0KCk7Ci0gICAg
U3RyaW5nIG1hcmt1cCgpOworICAgIFN0cmluZyB0ZXh0KCkgY29uc3Q7CisgICAgU3RyaW5nIG1h
cmt1cCgpIGNvbnN0OwogICAgIHZvaWQgc2V0VGV4dChjb25zdCBTdHJpbmcmKTsKICAgICB2b2lk
IHNldE1hcmt1cChjb25zdCBTdHJpbmcmKTsKICAgICB2b2lkIHNldFVSSUxpc3QoY29uc3QgU3Ry
aW5nJik7Ci0gICAgU3RyaW5nIHVybExhYmVsKCk7CisgICAgU3RyaW5nIHVybExhYmVsKCkgY29u
c3Q7CiAgICAgdm9pZCBjbGVhcigpOwogICAgIHZvaWQgY2xlYXJUZXh0KCk7CiAgICAgdm9pZCBj
bGVhck1hcmt1cCgpOwpAQCAtNzQsNyArNzIsNiBAQCBwcml2YXRlOgogICAgIFN0cmluZyBtX3Vy
aUxpc3Q7CiAgICAgVmVjdG9yPFN0cmluZz4gbV9maWxlbmFtZXM7CiAgICAgR1JlZlB0cjxHZGtQ
aXhidWY+IG1faW1hZ2U7Ci0gICAgR1JlZlB0cjxHZGtEcmFnQ29udGV4dD4gbV9kcmFnQ29udGV4
dDsKICAgICBSZWZQdHI8UmFuZ2U+IG1fcmFuZ2U7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggM2E2YTBh
OWFlN2Q1ZTY1OWUxOWNkNDQ5YTM2ODQ5NWU2YzhhNmU0Ny4uMzliNmY5NWE1NzJlMGExYzMzNzQx
OGRkMjIwYzBmMDhhOThhMzBkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDExLTA4
LTA4ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4gYW5kIE1hcnRp
biBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIEltcGxl
bWVudCBkcmFnIGFuZCBkcm9wIHN1cHBvcnQgaW4gV2ViS2l0MgorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjM3MDYKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOiBBZGQgbmV3IGZp
bGVzIHRvIGNvbXBpbGF0aW9uLgorICAgICAgICAqIFNoYXJlZC9ndGsvQXJndW1lbnRDb2RlcnNH
dGsuY3BwOiBBZGRlZC4KKyAgICAgICAgKENvcmVJUEM6OmVuY29kZUltYWdlKTogRW5jb2RlIGEg
R2RrUGl4YnVmLgorICAgICAgICAoQ29yZUlQQzo6ZGVjb2RlSW1hZ2UpOiBEZWNvZGUgYSBHZGtQ
aXhidWYuCisgICAgICAgIChDb3JlSVBDOjplbmNvZGVEYXRhT2JqZWN0KTogRW5jb2RlIGEgRGF0
YU9iamVjdEd0ay4KKyAgICAgICAgKENvcmVJUEM6OmRlY29kZURhdGFPYmplY3QpOiBEZWNvZGUg
YSBEYXRhT2JqZWN0R3RrLgorICAgICAgICAoQ29yZUlQQzo6OjplbmNvZGUpOiBFbmNvZGUgRHJh
Z0RhdGEuCisgICAgICAgIChDb3JlSVBDOjo6OmRlY29kZSk6IERlY29kZSBEcmFnRGF0YS4KKyAg
ICAgICAgKiBTaGFyZWQvZ3RrL0FyZ3VtZW50Q29kZXJzR3RrLmg6CisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xp
ZW50SW1wbDo6c3RhcnREcmFnKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xp
ZW50SW1wbC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNl
LmNwcDoKKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19iYXNlX2luaXQpOiBTZXQgdGhlIHZpZXcg
YXMgYSBwb3RlbnRpYWwgZHJvcCBkZXN0aW5hdGlvbi4KKyAgICAgICAgKHdlYmtpdFdlYlZpZXdC
YXNlRHJhZ0RhdGFHZXQpOiBBZGRlZCwgZGVsZWdhdGUgdG8gR3RrRHJhZ0FuZERyb3BHbHVlLgor
ICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VEcmFnRW5kKTogRGl0dG8uCisgICAgICAgICh3ZWJr
aXRXZWJWaWV3QmFzZURyYWdEYXRhUmVjZWl2ZWQpOiBEaXR0by4KKyAgICAgICAgKHdlYmtpdFdl
YlZpZXdCYXNlRHJhZ0VudGVyKTogRGl0dG8uCisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZURy
YWdNb3Rpb24pOiBEaXR0by4KKyAgICAgICAgKGRvRHJhZ0xlYXZlTGF0ZXIpOiBEaXR0by4KKyAg
ICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlRHJhZ0xlYXZlKTogRGl0dG8uCisgICAgICAgICh3ZWJr
aXRXZWJWaWV3QmFzZURyYWdEcm9wKTogRGl0dG8uCisgICAgICAgICh3ZWJraXRfd2ViX3ZpZXdf
YmFzZV9jbGFzc19pbml0KTogT3ZlcnJpZGUgR3RrV2lkZ2V0IGRyYWcgYW5kIGRyb3AgbWV0aG9k
cy4KKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlU3RhcnREcmFnKTogQ2FsbHMgZ3RrX2RyYWdf
YmVnaW4oKSB0byBzdGFydCBhIGRyYWcgb3BlcmF0aW9uLgorICAgICAgICAqIFVJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oOiBBZGQgd2Via2l0V2ViVmlld0Jhc2VT
dGFydERyYWcoKS4KKyAgICAgICAgKiBVSVByb2Nlc3MvUGFnZUNsaWVudC5oOiBBZGQgc3RhcnRE
cmFnKCkuCisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2VQcm94eTo6cGVyZm9ybURyYWdDb250cm9sbGVyQWN0aW9uKTogU2hhcmUg
dGhlIFF0IHZlcnNpb24uCisgICAgICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW46CisgICAgICAgICogV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJEcmFnQ2xpZW50LmNwcDoKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJEcmFnQ2xpZW50R3RrLmNwcDogQWRkZWQuCisg
ICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwOiBBZGQgZHJhZyBzdXBwb3J0
IGZvciBHVEsrLgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmg6IERpdHRv
LgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluOiBEaXR0
by4KKwogMjAxMS0wOS0wOSAgQ2hyaXMgTWFycmluICA8Y21hcnJpbkBhcHBsZS5jb20+CiAKICAg
ICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lIGRvZXNuJ3QgdGhyb3R0bGUgb24gTWFjCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9XZWJLaXQyL0dO
VW1ha2VmaWxlLmFtCmluZGV4IGQ2MzU5NjNjYmQ3NmViMjkzZGYxYTVmNGU0N2IyZDM1MDVkMTBm
ZTIuLjFiZWFjZmI5ZTI4NWU4OTE1MGI2MDgyNDZlNWQyZTE4MTc1MDhhYjIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9XZWJLaXQyL0dOVW1h
a2VmaWxlLmFtCkBAIC0yNjcsNiArMjY3LDggQEAgbGlid2Via2l0Mmd0a19AV0VCS0lUR1RLX0FQ
SV9NQUpPUl9WRVJTSU9OQF9AV0VCS0lUR1RLX0FQSV9NSU5PUl9WRVJTSU9OQF9sYV9TT1UKIAlT
b3VyY2UvV2ViS2l0Mi9TaGFyZWQvRm9udFNtb290aGluZ0xldmVsLmggXAogCVNvdXJjZS9XZWJL
aXQyL1NoYXJlZC9jYWlyby9MYXllclRyZWVDb250ZXh0Q2Fpcm8uY3BwIFwKIAlTb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvY2Fpcm8vU2hhcmVhYmxlQml0bWFwQ2Fpcm8uY3BwIFwKKwlTb3VyY2UvV2Vi
S2l0Mi9TaGFyZWQvZ3RrL0FyZ3VtZW50Q29kZXJzR3RrLmggXAorCVNvdXJjZS9XZWJLaXQyL1No
YXJlZC9ndGsvQXJndW1lbnRDb2RlcnNHdGsuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
Z3RrL05hdGl2ZVdlYktleWJvYXJkRXZlbnRHdGsuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvZ3RrL05hdGl2ZVdlYk1vdXNlRXZlbnRHdGsuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9TaGFy
ZWQvZ3RrL05hdGl2ZVdlYldoZWVsRXZlbnRHdGsuY3BwIFwKQEAgLTcyMCw2ICs3MjIsNyBAQCBs
aWJ3ZWJraXQyZ3RrX0BXRUJLSVRHVEtfQVBJX01BSk9SX1ZFUlNJT05AX0BXRUJLSVRHVEtfQVBJ
X01JTk9SX1ZFUlNJT05AX2xhX1NPVQogCVNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUmVzb3Vy
Y2VDYWNoZS9XZWJSZXNvdXJjZUNhY2hlTWFuYWdlci5oIFwKIAlTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1Jlc291cmNlQ2FjaGUvV2ViUmVzb3VyY2VDYWNoZU1hbmFnZXIuY3BwIFwKIAlTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJDb250ZXh0TWVudUNs
aWVudEd0ay5jcHAgXAorCVNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
Z3RrL1dlYkRyYWdDbGllbnRHdGsuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L2d0ay9XZWJFZGl0b3JDbGllbnRHdGsuY3BwIFwKIAlTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJFcnJvcnNHdGsuY3BwIFwKIAlTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJGcmFtZU5ldHdvcmtp
bmdDb250ZXh0LmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9Bcmd1
bWVudENvZGVyc0d0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL0FyZ3VtZW50Q29k
ZXJzR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wY2ZiZDRlYzRiNmQxODY0YmQ2YWJkNWIwMThlNjQxMDRl
MWE1ZmU1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9Bcmd1
bWVudENvZGVyc0d0ay5jcHAKQEAgLTAsMCArMSwyMTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkFyZ3VtZW50Q29kZXJzR3RrLmgiCisKKyNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIK
KyNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0Rh
dGFPYmplY3RHdGsuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0RyYWdEYXRhLmg+CisjaW5jbHVkZSA8
V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0d0a1ZlcnNpb25p
bmcuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtQ29udGV4dENhaXJvLmg+CisKK3VzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworbmFtZXNwYWNl
IENvcmVJUEMgeworCitzdGF0aWMgdm9pZCBlbmNvZGVJbWFnZShBcmd1bWVudEVuY29kZXIqIGVu
Y29kZXIsIGNvbnN0IEdka1BpeGJ1ZiogcGl4YnVmKQoreworICAgIEludFNpemUgaW1hZ2VTaXpl
KGdka19waXhidWZfZ2V0X3dpZHRoKHBpeGJ1ZiksIGdka19waXhidWZfZ2V0X2hlaWdodChwaXhi
dWYpKTsKKyAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSBTaGFyZWFibGVCaXRt
YXA6OmNyZWF0ZVNoYXJlYWJsZShpbWFnZVNpemUsIFNoYXJlYWJsZUJpdG1hcDo6U3VwcG9ydHNB
bHBoYSk7CisgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gZ3JhcGhpY3NDb250ZXh0ID0gYml0
bWFwLT5jcmVhdGVHcmFwaGljc0NvbnRleHQoKTsKKworICAgIGNhaXJvX3QqIGNyID0gZ3JhcGhp
Y3NDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKTsKKyAgICBnZGtfY2Fpcm9fc2V0X3Nv
dXJjZV9waXhidWYoY3IsIHBpeGJ1ZiwgMCwgMCk7CisgICAgY2Fpcm9fcGFpbnQoY3IpOworCisg
ICAgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgaGFuZGxlOworICAgIGJpdG1hcC0+Y3JlYXRlSGFu
ZGxlKGhhbmRsZSk7CisKKyAgICBlbmNvZGVyLT5lbmNvZGUoaGFuZGxlKTsKK30KKworc3RhdGlj
IGJvb2wgZGVjb2RlSW1hZ2UoQXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBHUmVmUHRyPEdka1Bp
eGJ1Zj4mIHBpeGJ1ZikKK3sKKyAgICBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBoYW5kbGU7Cisg
ICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoaGFuZGxlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0bWFwID0gU2hhcmVhYmxlQml0bWFwOjpj
cmVhdGUoaGFuZGxlKTsKKyAgICBpZiAoIWJpdG1hcCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IGJpdG1hcC0+Y3JlYXRlSW1hZ2UoKTsKKyAgICBp
ZiAoIWltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBjYWlyb19zdXJmYWNlX3Qq
IHN1cmZhY2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAgICBpZiAo
IXN1cmZhY2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHBpeGJ1ZiA9IGFkb3B0R1Jl
ZihnZGtfcGl4YnVmX2dldF9mcm9tX3N1cmZhY2Uoc3VyZmFjZSwgMCwgMCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhaXJvX2ltYWdlX3N1cmZh
Y2VfZ2V0X3dpZHRoKHN1cmZhY2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KHN1cmZhY2Up
KSk7CisgICAgaWYgKCFwaXhidWYpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVy
biB0cnVlOworfQorCitzdGF0aWMgdm9pZCBlbmNvZGVEYXRhT2JqZWN0KEFyZ3VtZW50RW5jb2Rl
ciogZW5jb2RlciwgY29uc3QgRGF0YU9iamVjdEd0ayogZGF0YU9iamVjdCkKK3sKKyAgICBib29s
IGhhc1RleHQgPSBkYXRhT2JqZWN0LT5oYXNUZXh0KCk7CisgICAgZW5jb2Rlci0+ZW5jb2RlKGhh
c1RleHQpOworICAgIGlmIChoYXNUZXh0KQorICAgICAgICBlbmNvZGVyLT5lbmNvZGUoZGF0YU9i
amVjdC0+dGV4dCgpKTsKKworICAgIGJvb2wgaGFzTWFya3VwID0gZGF0YU9iamVjdC0+aGFzTWFy
a3VwKCk7CisgICAgZW5jb2Rlci0+ZW5jb2RlKGhhc01hcmt1cCk7CisgICAgaWYgKGhhc01hcmt1
cCkKKyAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKGRhdGFPYmplY3QtPm1hcmt1cCgpKTsKKworICAg
IGJvb2wgaGFzVVJMID0gZGF0YU9iamVjdC0+aGFzVVJMKCk7CisgICAgZW5jb2Rlci0+ZW5jb2Rl
KGhhc1VSTCk7CisgICAgaWYgKGhhc1VSTCkKKyAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKGRhdGFP
YmplY3QtPnVybCgpLnN0cmluZygpKTsKKworICAgIGJvb2wgaGFzVVJJTGlzdCA9IGRhdGFPYmpl
Y3QtPmhhc1VSSUxpc3QoKTsKKyAgICBlbmNvZGVyLT5lbmNvZGUoaGFzVVJJTGlzdCk7CisgICAg
aWYgKGhhc1VSSUxpc3QpCisgICAgICAgIGVuY29kZXItPmVuY29kZShkYXRhT2JqZWN0LT51cmlM
aXN0KCkpOworCisgICAgYm9vbCBoYXNJbWFnZSA9IGRhdGFPYmplY3QtPmhhc0ltYWdlKCk7Cisg
ICAgZW5jb2Rlci0+ZW5jb2RlKGhhc0ltYWdlKTsKKyAgICBpZiAoaGFzSW1hZ2UpCisgICAgICAg
IGVuY29kZUltYWdlKGVuY29kZXIsIGRhdGFPYmplY3QtPmltYWdlKCkpOworfQorCitzdGF0aWMg
Ym9vbCBkZWNvZGVEYXRhT2JqZWN0KEFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgUmVmUHRyPERh
dGFPYmplY3RHdGs+JiBkYXRhT2JqZWN0KQoreworICAgIFJlZlB0cjxEYXRhT2JqZWN0R3RrPiBk
YXRhID0gRGF0YU9iamVjdEd0azo6Y3JlYXRlKCk7CisKKyAgICBib29sIGhhc1RleHQ7CisgICAg
aWYgKCFkZWNvZGVyLT5kZWNvZGUoaGFzVGV4dCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBpZiAoaGFzVGV4dCkgeworICAgICAgICBTdHJpbmcgdGV4dDsKKyAgICAgICAgaWYgKCFkZWNv
ZGVyLT5kZWNvZGUodGV4dCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGRh
dGEtPnNldFRleHQodGV4dCk7CisgICAgfQorCisgICAgYm9vbCBoYXNNYXJrdXA7CisgICAgaWYg
KCFkZWNvZGVyLT5kZWNvZGUoaGFzTWFya3VwKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGlmIChoYXNNYXJrdXApIHsKKyAgICAgICAgU3RyaW5nIG1hcmt1cDsKKyAgICAgICAgaWYgKCFk
ZWNvZGVyLT5kZWNvZGUobWFya3VwKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgZGF0YS0+c2V0TWFya3VwKG1hcmt1cCk7CisgICAgfQorCisgICAgYm9vbCBoYXNVUkw7Cisg
ICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoaGFzVVJMKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIGlmIChoYXNVUkwpIHsKKyAgICAgICAgU3RyaW5nIHVybDsKKyAgICAgICAgaWYgKCFkZWNv
ZGVyLT5kZWNvZGUodXJsKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZGF0
YS0+c2V0VVJMKEtVUkwoS1VSTCgpLCB1cmwpLCBTdHJpbmcoKSk7CisgICAgfQorCisgICAgYm9v
bCBoYXNVUklMaXN0OworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGhhc1VSSUxpc3QpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGhhc1VSSUxpc3QpIHsKKyAgICAgICAgU3RyaW5n
IHVyaUxpc3Q7CisgICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKHVyaUxpc3QpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBkYXRhLT5zZXRVUklMaXN0KHVyaUxpc3QpOwor
ICAgIH0KKworICAgIGJvb2wgaGFzSW1hZ2U7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoaGFz
SW1hZ2UpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGhhc0ltYWdlKSB7CisgICAg
ICAgIEdSZWZQdHI8R2RrUGl4YnVmPiBpbWFnZTsKKyAgICAgICAgaWYgKCFkZWNvZGVJbWFnZShk
ZWNvZGVyLCBpbWFnZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGRhdGEt
PnNldEltYWdlKGltYWdlLmdldCgpKTsKKyAgICB9CisKKyAgICBkYXRhT2JqZWN0ID0gZGF0YTsK
KworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEFyZ3VtZW50Q29kZXI8RHJhZ0RhdGE+Ojpl
bmNvZGUoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBjb25zdCBEcmFnRGF0YSYgZHJhZ0RhdGEp
Cit7CisgICAgZW5jb2Rlci0+ZW5jb2RlKGRyYWdEYXRhLmNsaWVudFBvc2l0aW9uKCkpOworICAg
IGVuY29kZXItPmVuY29kZShkcmFnRGF0YS5nbG9iYWxQb3NpdGlvbigpKTsKKyAgICBlbmNvZGVy
LT5lbmNvZGUoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGRyYWdEYXRhLmRyYWdnaW5nU291cmNlT3Bl
cmF0aW9uTWFzaygpKSk7CisgICAgZW5jb2Rlci0+ZW5jb2RlKHN0YXRpY19jYXN0PHVpbnQ2NF90
PihkcmFnRGF0YS5mbGFncygpKSk7CisKKyAgICBEYXRhT2JqZWN0R3RrKiBwbGF0Zm9ybURhdGEg
PSBkcmFnRGF0YS5wbGF0Zm9ybURhdGEoKTsKKyAgICBlbmNvZGVyLT5lbmNvZGUoc3RhdGljX2Nh
c3Q8Ym9vbD4ocGxhdGZvcm1EYXRhKSk7CisgICAgaWYgKHBsYXRmb3JtRGF0YSkKKyAgICAgICAg
ZW5jb2RlRGF0YU9iamVjdChlbmNvZGVyLCBwbGF0Zm9ybURhdGEpOworfQorCitib29sIEFyZ3Vt
ZW50Q29kZXI8RHJhZ0RhdGE+OjpkZWNvZGUoQXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBEcmFn
RGF0YSYgZHJhZ0RhdGEpCit7CisgICAgSW50UG9pbnQgY2xpZW50UG9zaXRpb247CisgICAgaWYg
KCFkZWNvZGVyLT5kZWNvZGUoY2xpZW50UG9zaXRpb24pKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBJbnRQb2ludCBnbG9iYWxQb3NpdGlvbjsKKyAgICBpZiAoIWRlY29kZXItPmRlY29k
ZShnbG9iYWxQb3NpdGlvbikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHVpbnQ2NF90
IHNvdXJjZU9wZXJhdGlvbk1hc2s7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoc291cmNlT3Bl
cmF0aW9uTWFzaykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHVpbnQ2NF90IGZsYWdz
OworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGZsYWdzKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgYm9vbCBoYXNQbGF0Zm9ybURhdGE7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUo
aGFzUGxhdGZvcm1EYXRhKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUmVmUHRyPERh
dGFPYmplY3RHdGs+IHBsYXRmb3JtRGF0YTsKKyAgICBpZiAoaGFzUGxhdGZvcm1EYXRhKSB7Cisg
ICAgICAgIGlmICghZGVjb2RlRGF0YU9iamVjdChkZWNvZGVyLCBwbGF0Zm9ybURhdGEpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGRyYWdEYXRhID0gRHJhZ0RhdGEo
cGxhdGZvcm1EYXRhLnJlbGVhc2UoKS5sZWFrUmVmKCksIGNsaWVudFBvc2l0aW9uLCBnbG9iYWxQ
b3NpdGlvbiwgc3RhdGljX2Nhc3Q8RHJhZ09wZXJhdGlvbj4oc291cmNlT3BlcmF0aW9uTWFzayks
CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxEcmFnQXBwbGljYXRpb25GbGFn
cz4oZmxhZ3MpKTsKKworICAgIHJldHVybiB0cnVlOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL0FyZ3VtZW50Q29kZXJzR3RrLmggYi9Tb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvZ3RrL0FyZ3VtZW50Q29kZXJzR3RrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODJmNDZkMmQ4OWI1
OWQ5ZTZjYjBjMmIzNGQyOGUyZjc1MTk0MDQwNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL1NoYXJlZC9ndGsvQXJndW1lbnRDb2RlcnNHdGsuaApAQCAtMCwwICsxLDQ1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYg
QXJndW1lbnRDb2RlcnNHdGtfaAorI2RlZmluZSBBcmd1bWVudENvZGVyc0d0a19oCisKKyNpbmNs
dWRlICJBcmd1bWVudENvZGVycy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBEYXRh
T2JqZWN0R3RrOworY2xhc3MgRHJhZ0RhdGE7Cit9CisKK25hbWVzcGFjZSBDb3JlSVBDIHsKKwor
dGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpEcmFnRGF0YT4geworICAg
IHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXIqLCBjb25zdCBXZWJDb3JlOjpEcmFn
RGF0YSYpOworICAgIHN0YXRpYyBib29sIGRlY29kZShBcmd1bWVudERlY29kZXIqLCBXZWJDb3Jl
OjpEcmFnRGF0YSYpOworfTsKKworfSAvLyBuYW1lc3BhY2UgQ29yZUlQQworCisjZW5kaWYgLy8g
QXJndW1lbnRDb2RlcnNHdGtfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvUGFnZUNsaWVudEltcGwuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9ndGsvUGFnZUNsaWVudEltcGwuY3BwCmluZGV4IDlhM2ViYmJkOGE5ZjNmYzZlNmI3NDI5Mjc4
ZDMzOTY0OTAxNGUzM2IuLmYwM2JhZWQyYWUwNGM2MWU0NTlhMTVmY2RkNzdlNmMwZjA4MTAyMzMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJ
bXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50
SW1wbC5jcHAKQEAgLTI4NSw0ICsyODUsOSBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpjb3VudFN0
cmluZ01hdGNoZXNJbkN1c3RvbVJlcHJlc2VudGF0aW9uKGNvbnN0IFN0cmluZyYsIEZpbgogICAg
IG5vdEltcGxlbWVudGVkKCk7CiB9CiAKK3ZvaWQgUGFnZUNsaWVudEltcGw6OnN0YXJ0RHJhZyhj
b25zdCBXZWJDb3JlOjpEcmFnRGF0YSYgZHJhZ0RhdGEsIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0
bWFwPiBkcmFnSW1hZ2UpCit7CisgICAgd2Via2l0V2ViVmlld0Jhc2VTdGFydERyYWcoV0VCS0lU
X1dFQl9WSUVXX0JBU0UobV92aWV3V2lkZ2V0KSwgZHJhZ0RhdGEsIGRyYWdJbWFnZSk7Cit9CisK
IH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmgKaW5kZXggM2EzOTkwNjAxZjc1ZDhlZDUwYTk4MDk4NDc5
YjFiODk2MDZhOTdmMC4uYWNkMzI3ZWIzNDQ3NTRiODEzNjRkZDFjMDRmNmRlN2MxYjEwMDNmYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudElt
cGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1w
bC5oCkBAIC04Nyw2ICs4Nyw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGdldEVkaXRv
ckNvbW1hbmRzRm9yS2V5RXZlbnQoY29uc3QgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudCYsIGNvbnN0
IEF0b21pY1N0cmluZyYsIFZlY3RvcjxXVEY6OlN0cmluZz4mKTsKICAgICB2aXJ0dWFsIHZvaWQg
ZmluZFN0cmluZ0luQ3VzdG9tUmVwcmVzZW50YXRpb24oY29uc3QgU3RyaW5nJiwgRmluZE9wdGlv
bnMsIHVuc2lnbmVkKTsKICAgICB2aXJ0dWFsIHZvaWQgY291bnRTdHJpbmdNYXRjaGVzSW5DdXN0
b21SZXByZXNlbnRhdGlvbihjb25zdCBTdHJpbmcmLCBGaW5kT3B0aW9ucywgdW5zaWduZWQpOwor
ICAgIHZpcnR1YWwgdm9pZCBzdGFydERyYWcoY29uc3QgV2ViQ29yZTo6RHJhZ0RhdGEmLCBQYXNz
UmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gZHJhZ0ltYWdlKTsKIAogI2lmIFVTRShBQ0NFTEVSQVRF
RF9DT01QT1NJVElORykKICAgICB2aXJ0dWFsIHZvaWQgcGFnZURpZEVudGVyQWNjZWxlcmF0ZWRD
b21wb3NpdGluZygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0V2ViVmlld0Jhc2UuY3BwCmluZGV4IDA5MWVjNGU0NjRlNDQ2ODEzMjNkYzNhNDZl
NWFiY2Q4ODBkYjk3YTYuLjUwMjRlNWJiYmM2M2QyZjQ0YjY3MzJhZmQ3NWE2MTkwOWYxMWYyMjYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZp
ZXdCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRX
ZWJWaWV3QmFzZS5jcHAKQEAgLTI4LDIwICsyOCwyNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIldlYktpdFdlYlZpZXdCYXNlLmgiCiAKKyNpbmNsdWRlICJDbGlwYm9hcmRHdGsu
aCIKKyNpbmNsdWRlICJDbGlwYm9hcmRVdGlsaXRpZXNHdGsuaCIKKyNpbmNsdWRlICJEYXRhT2Jq
ZWN0R3RrLmgiCisjaW5jbHVkZSAiRHJhZ0RhdGEuaCIKICNpbmNsdWRlICJEcmF3aW5nQXJlYVBy
b3h5SW1wbC5oIgogI2luY2x1ZGUgIkdPd25QdHJHdGsuaCIKICNpbmNsdWRlICJHdGtDbGlja0Nv
dW50ZXIuaCIKKyNpbmNsdWRlICJHdGtVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJHdGtWZXJzaW9u
aW5nLmgiCiAjaW5jbHVkZSAiTmF0aXZlV2ViS2V5Ym9hcmRFdmVudC5oIgogI2luY2x1ZGUgIk5h
dGl2ZVdlYk1vdXNlRXZlbnQuaCIKICNpbmNsdWRlICJOYXRpdmVXZWJXaGVlbEV2ZW50LmgiCiAj
aW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJQYWdlQ2xpZW50SW1wbC5oIgor
I2luY2x1ZGUgIlBhc3RlYm9hcmRIZWxwZXIuaCIKICNpbmNsdWRlICJSZWZQdHJDYWlyby5oIgog
I2luY2x1ZGUgIldlYkNvbnRleHQuaCIKICNpbmNsdWRlICJXZWJFdmVudEZhY3RvcnkuaCIKICNp
bmNsdWRlICJXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJv
eHkuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0d0a1dpZGdldERyYWdBbmREcm9wR2x1ZS5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvUmVnaW9uLmg+CiAjaW5jbHVkZSA8V2ViS2l0Mi9XS0NvbnRleHQuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CkBAIC01Nyw2ICs2NCw4IEBAIHN0cnVjdCBf
V2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlIHsKICAgICBHdGtJTUNvbnRleHQqIGltQ29udGV4dDsK
ICAgICBHdGtDbGlja0NvdW50ZXIgY2xpY2tDb3VudGVyOwogICAgIENTdHJpbmcgdG9vbHRpcFRl
eHQ7CisgICAgR3RrV2lkZ2V0RHJhZ0FuZERyb3BHbHVlIGRyYWdBbmREcm9wR2x1ZTsKKyAgICBH
dGtXaWRnZXQqIGRyYWdJY29uV2luZG93OwogfTsKIAogR19ERUZJTkVfVFlQRShXZWJLaXRXZWJW
aWV3QmFzZSwgd2Via2l0X3dlYl92aWV3X2Jhc2UsIEdUS19UWVBFX0NPTlRBSU5FUikKQEAgLTEz
MiwxMSArMTQxLDE4IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19iYXNlX2luaXQoV2Vi
S2l0V2ViVmlld0Jhc2UqIHdlYmtpdFdlYlZpZXdCYXNlKQogICAgIHByaXYtPmlzUGFnZUFjdGl2
ZSA9IFRSVUU7CiAgICAgcHJpdi0+c2hvdWxkRm9yd2FyZE5leHRLZXlFdmVudCA9IEZBTFNFOwog
Ci0gICAgZ3RrX3dpZGdldF9zZXRfZG91YmxlX2J1ZmZlcmVkKEdUS19XSURHRVQod2Via2l0V2Vi
Vmlld0Jhc2UpLCBGQUxTRSk7Ci0gICAgZ3RrX3dpZGdldF9zZXRfY2FuX2ZvY3VzKEdUS19XSURH
RVQod2Via2l0V2ViVmlld0Jhc2UpLCBUUlVFKTsKKyAgICBHdGtXaWRnZXQqIHZpZXdXaWRnZXQg
PSBHVEtfV0lER0VUKHdlYmtpdFdlYlZpZXdCYXNlKTsKKyAgICBndGtfd2lkZ2V0X3NldF9kb3Vi
bGVfYnVmZmVyZWQodmlld1dpZGdldCwgRkFMU0UpOworICAgIGd0a193aWRnZXRfc2V0X2Nhbl9m
b2N1cyh2aWV3V2lkZ2V0LCBUUlVFKTsKICAgICBwcml2LT5pbUNvbnRleHQgPSBndGtfaW1fbXVs
dGljb250ZXh0X25ldygpOwogCi0gICAgcHJpdi0+cGFnZUNsaWVudCA9IFBhZ2VDbGllbnRJbXBs
OjpjcmVhdGUoR1RLX1dJREdFVCh3ZWJraXRXZWJWaWV3QmFzZSkpOworICAgIHByaXYtPnBhZ2VD
bGllbnQgPSBQYWdlQ2xpZW50SW1wbDo6Y3JlYXRlKHZpZXdXaWRnZXQpOworCisgICAgcHJpdi0+
ZHJhZ0FuZERyb3BHbHVlLnNldFdpZGdldChHVEtfV0lER0VUKHdlYmtpdFdlYlZpZXdCYXNlKSk7
CisgICAgcHJpdi0+ZHJhZ0ljb25XaW5kb3cgPSAwOworICAgIGd0a19kcmFnX2Rlc3Rfc2V0KHZp
ZXdXaWRnZXQsIHN0YXRpY19jYXN0PEd0a0Rlc3REZWZhdWx0cz4oMCksIDAsIDAsCisgICAgICAg
ICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8R2RrRHJhZ0FjdGlvbj4oR0RLX0FDVElPTl9DT1BZ
IHwgR0RLX0FDVElPTl9NT1ZFIHwgR0RLX0FDVElPTl9MSU5LIHwgR0RLX0FDVElPTl9QUklWQVRF
KSk7CisgICAgZ3RrX2RyYWdfZGVzdF9zZXRfdGFyZ2V0X2xpc3Qodmlld1dpZGdldCwgUGFzdGVi
b2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+dGFyZ2V0TGlzdCgpKTsKIH0K
IAogc3RhdGljIGdib29sZWFuIHdlYmtpdFdlYlZpZXdCYXNlRHJhdyhHdGtXaWRnZXQqIHdpZGdl
dCwgY2Fpcm9fdCogY3IpCkBAIC0yOTMsNiArMzA5LDgyIEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJr
aXRXZWJWaWV3QmFzZVF1ZXJ5VG9vbHRpcChHdGtXaWRnZXQqIHdpZGdldCwgZ2ludCB4LCBnaW50
IHksCiAgICAgcmV0dXJuIFRSVUU7CiB9CiAKK3N0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdCYXNl
RHJhZ0RhdGFHZXQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0RyYWdDb250ZXh0KiBjb250ZXh0LCBH
dGtTZWxlY3Rpb25EYXRhKiBzZWxlY3Rpb25EYXRhLCBndWludCBpbmZvLCBndWludCB0aW1lKQor
eworICAgIFdFQktJVF9XRUJfVklFV19CQVNFKHdpZGdldCktPnByaXYtPmRyYWdBbmREcm9wR2x1
ZS5oYW5kbGVHZXREcmFnRGF0YShjb250ZXh0LCBzZWxlY3Rpb25EYXRhLCBpbmZvKTsKK30KKwor
c3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VEcmFnRW5kKEd0a1dpZGdldCogd2lkZ2V0LCBH
ZGtEcmFnQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBXZWJLaXRXZWJWaWV3QmFzZSogd2ViVmll
d0Jhc2UgPSBXRUJLSVRfV0VCX1ZJRVdfQkFTRSh3aWRnZXQpOworICAgIGlmICghd2ViVmlld0Jh
c2UtPnByaXYtPmRyYWdBbmREcm9wR2x1ZS5oYW5kbGVEcmFnRW5kKGNvbnRleHQpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBHZGtEZXZpY2UqIGRldmljZSA9IGdka19kcmFnX2NvbnRleHRfZ2V0
X2RldmljZShjb250ZXh0KTsKKyAgICBpbnQgeCA9IDAsIHkgPSAwOworICAgIGdka19kZXZpY2Vf
Z2V0X3dpbmRvd19hdF9wb3NpdGlvbihkZXZpY2UsICZ4LCAmeSk7CisgICAgaW50IHhSb290ID0g
MCwgeVJvb3QgPSAwOworICAgIGdka19kZXZpY2VfZ2V0X3Bvc2l0aW9uKGRldmljZSwgMCwgJnhS
b290LCAmeVJvb3QpOworICAgIHdlYlZpZXdCYXNlLT5wcml2LT5wYWdlUHJveHktPmRyYWdFbmRl
ZChJbnRQb2ludCh4LCB5KSwgSW50UG9pbnQoeFJvb3QsIHlSb290KSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RrRHJhZ0FjdGlvblRvRHJhZ09wZXJhdGlv
bihnZGtfZHJhZ19jb250ZXh0X2dldF9zZWxlY3RlZF9hY3Rpb24oY29udGV4dCkpKTsKK30KKwor
c3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VEcmFnRGF0YVJlY2VpdmVkKEd0a1dpZGdldCog
d2lkZ2V0LCBHZGtEcmFnQ29udGV4dCogY29udGV4dCwgZ2ludCB4LCBnaW50IHksIEd0a1NlbGVj
dGlvbkRhdGEqIHNlbGVjdGlvbkRhdGEsIGd1aW50IGluZm8sIGd1aW50IHRpbWUpCit7CisgICAg
V2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZpZXdCYXNlID0gV0VCS0lUX1dFQl9WSUVXX0JBU0Uod2lk
Z2V0KTsKKyAgICBPd25QdHI8RHJhZ0RhdGE+IGRyYWdEYXRhKHdlYlZpZXdCYXNlLT5wcml2LT5k
cmFnQW5kRHJvcEdsdWUuaGFuZGxlRHJhZ0RhdGFSZWNlaXZlZChjb250ZXh0LCBzZWxlY3Rpb25E
YXRhLCBpbmZvKSk7CisgICAgaWYgKCFkcmFnRGF0YSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
d2ViVmlld0Jhc2UtPnByaXYtPnBhZ2VQcm94eS0+cmVzZXREcmFnT3BlcmF0aW9uKCk7CisgICAg
d2ViVmlld0Jhc2UtPnByaXYtPnBhZ2VQcm94eS0+ZHJhZ0VudGVyZWQoZHJhZ0RhdGEuZ2V0KCkp
OworICAgIERyYWdPcGVyYXRpb24gb3BlcmF0aW9uID0gd2ViVmlld0Jhc2UtPnByaXYtPnBhZ2VQ
cm94eS0+ZHJhZ09wZXJhdGlvbigpOworICAgIGdka19kcmFnX3N0YXR1cyhjb250ZXh0LCBkcmFn
T3BlcmF0aW9uVG9TaW5nbGVHZGtEcmFnQWN0aW9uKG9wZXJhdGlvbiksIHRpbWUpOworfQorCitz
dGF0aWMgZ2Jvb2xlYW4gd2Via2l0V2ViVmlld0Jhc2VEcmFnTW90aW9uKEd0a1dpZGdldCogd2lk
Z2V0LCBHZGtEcmFnQ29udGV4dCogY29udGV4dCwgZ2ludCB4LCBnaW50IHksIGd1aW50IHRpbWUp
Cit7CisgICAgV2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZpZXdCYXNlID0gV0VCS0lUX1dFQl9WSUVX
X0JBU0Uod2lkZ2V0KTsKKyAgICBPd25QdHI8RHJhZ0RhdGE+IGRyYWdEYXRhKHdlYlZpZXdCYXNl
LT5wcml2LT5kcmFnQW5kRHJvcEdsdWUuaGFuZGxlRHJhZ01vdGlvbihjb250ZXh0LCBJbnRQb2lu
dCh4LCB5KSwgdGltZSkpOworICAgIGlmICghZHJhZ0RhdGEpCisgICAgICAgIHJldHVybiBUUlVF
OworCisgICAgd2ViVmlld0Jhc2UtPnByaXYtPnBhZ2VQcm94eS0+ZHJhZ1VwZGF0ZWQoZHJhZ0Rh
dGEuZ2V0KCkpOworICAgIERyYWdPcGVyYXRpb24gb3BlcmF0aW9uID0gd2ViVmlld0Jhc2UtPnBy
aXYtPnBhZ2VQcm94eS0+ZHJhZ09wZXJhdGlvbigpOworICAgIGdka19kcmFnX3N0YXR1cyhjb250
ZXh0LCBkcmFnT3BlcmF0aW9uVG9TaW5nbGVHZGtEcmFnQWN0aW9uKG9wZXJhdGlvbiksIHRpbWUp
OworICAgIHJldHVybiBUUlVFOworfQorCitzdGF0aWMgdm9pZCBkcmFnRXhpdGVkQ2FsbGJhY2so
R3RrV2lkZ2V0KiB3aWRnZXQsIERyYWdEYXRhKiBkcmFnRGF0YSwgYm9vbCBkcm9wSGFwcGVuZWQp
Cit7CisgICAgLy8gRG9uJ3QgY2FsbCBkcmFnRXhpdGVkIGlmIHdlIGhhdmUganVzdCByZWNlaXZl
ZCBhIGRyYWctZHJvcCBzaWduYWwuIFRoaXMKKyAgICAvLyBoYXBwZW5zIGluIHRoZSBjYXNlIG9m
IGEgc3VjY2Vzc2Z1bCBkcm9wIG9udG8gdGhlIHZpZXcuCisgICAgaWYgKGRyb3BIYXBwZW5lZCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgV2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZpZXdCYXNlID0g
V0VCS0lUX1dFQl9WSUVXX0JBU0Uod2lkZ2V0KTsKKyAgICB3ZWJWaWV3QmFzZS0+cHJpdi0+cGFn
ZVByb3h5LT5kcmFnRXhpdGVkKGRyYWdEYXRhKTsKKyAgICB3ZWJWaWV3QmFzZS0+cHJpdi0+cGFn
ZVByb3h5LT5yZXNldERyYWdPcGVyYXRpb24oKTsKK30KKworc3RhdGljIHZvaWQgd2Via2l0V2Vi
Vmlld0Jhc2VEcmFnTGVhdmUoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0RyYWdDb250ZXh0KiBjb250
ZXh0LCBndWludCB0aW1lKQoreworICAgIFdFQktJVF9XRUJfVklFV19CQVNFKHdpZGdldCktPnBy
aXYtPmRyYWdBbmREcm9wR2x1ZS5oYW5kbGVEcmFnTGVhdmUoY29udGV4dCwgZHJhZ0V4aXRlZENh
bGxiYWNrKTsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdFdlYlZpZXdCYXNlRHJhZ0Ryb3Ao
R3RrV2lkZ2V0KiB3aWRnZXQsIEdka0RyYWdDb250ZXh0KiBjb250ZXh0LCBnaW50IHgsIGdpbnQg
eSwgZ3VpbnQgdGltZSkKK3sKKyAgICBXZWJLaXRXZWJWaWV3QmFzZSogd2ViVmlld0Jhc2UgPSBX
RUJLSVRfV0VCX1ZJRVdfQkFTRSh3aWRnZXQpOworICAgIE93blB0cjxEcmFnRGF0YT4gZHJhZ0Rh
dGEod2ViVmlld0Jhc2UtPnByaXYtPmRyYWdBbmREcm9wR2x1ZS5oYW5kbGVEcmFnRHJvcChjb250
ZXh0LCBJbnRQb2ludCh4LCB5KSkpOworICAgIGlmICghZHJhZ0RhdGEpCisgICAgICAgIHJldHVy
biBGQUxTRTsKKworICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBoYW5kbGU7CisgICAgd2Vi
Vmlld0Jhc2UtPnByaXYtPnBhZ2VQcm94eS0+cGVyZm9ybURyYWcoZHJhZ0RhdGEuZ2V0KCksIFN0
cmluZygpLCBoYW5kbGUpOworICAgIGd0a19kcmFnX2ZpbmlzaChjb250ZXh0LCBUUlVFLCBGQUxT
RSwgdGltZSk7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJf
dmlld19iYXNlX2NsYXNzX2luaXQoV2ViS2l0V2ViVmlld0Jhc2VDbGFzcyogd2Via2l0V2ViVmll
d0Jhc2VDbGFzcykKIHsKICAgICBHdGtXaWRnZXRDbGFzcyogd2lkZ2V0Q2xhc3MgPSBHVEtfV0lE
R0VUX0NMQVNTKHdlYmtpdFdlYlZpZXdCYXNlQ2xhc3MpOwpAQCAtMzA4LDYgKzQwMCwxMiBAQCBz
dGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfYmFzZV9jbGFzc19pbml0KFdlYktpdFdlYlZpZXdC
YXNlQ2xhc3MqIHdlYmtpdFdlYlZpZQogICAgIHdpZGdldENsYXNzLT5zY3JvbGxfZXZlbnQgPSB3
ZWJraXRXZWJWaWV3QmFzZVNjcm9sbEV2ZW50OwogICAgIHdpZGdldENsYXNzLT5tb3Rpb25fbm90
aWZ5X2V2ZW50ID0gd2Via2l0V2ViVmlld0Jhc2VNb3Rpb25Ob3RpZnlFdmVudDsKICAgICB3aWRn
ZXRDbGFzcy0+cXVlcnlfdG9vbHRpcCA9IHdlYmtpdFdlYlZpZXdCYXNlUXVlcnlUb29sdGlwOwor
ICAgIHdpZGdldENsYXNzLT5kcmFnX2VuZCA9IHdlYmtpdFdlYlZpZXdCYXNlRHJhZ0VuZDsKKyAg
ICB3aWRnZXRDbGFzcy0+ZHJhZ19kYXRhX2dldCA9IHdlYmtpdFdlYlZpZXdCYXNlRHJhZ0RhdGFH
ZXQ7CisgICAgd2lkZ2V0Q2xhc3MtPmRyYWdfbW90aW9uID0gd2Via2l0V2ViVmlld0Jhc2VEcmFn
TW90aW9uOworICAgIHdpZGdldENsYXNzLT5kcmFnX2xlYXZlID0gd2Via2l0V2ViVmlld0Jhc2VE
cmFnTGVhdmU7CisgICAgd2lkZ2V0Q2xhc3MtPmRyYWdfZHJvcCA9IHdlYmtpdFdlYlZpZXdCYXNl
RHJhZ0Ryb3A7CisgICAgd2lkZ2V0Q2xhc3MtPmRyYWdfZGF0YV9yZWNlaXZlZCA9IHdlYmtpdFdl
YlZpZXdCYXNlRHJhZ0RhdGFSZWNlaXZlZDsKIAogICAgIEdPYmplY3RDbGFzcyogZ29iamVjdENs
YXNzID0gR19PQkpFQ1RfQ0xBU1Mod2Via2l0V2ViVmlld0Jhc2VDbGFzcyk7CiAgICAgZ29iamVj
dENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdFdlYlZpZXdCYXNlRmluYWxpemU7CkBAIC0zNTUsNiAr
NDUzLDMwIEBAIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VTZXRUb29sdGlwVGV4dChXZWJLaXRXZWJW
aWV3QmFzZSogd2ViVmlld0Jhc2UsIGNvbnN0IGNoYXIqCiAgICAgZ3RrX3dpZGdldF90cmlnZ2Vy
X3Rvb2x0aXBfcXVlcnkoR1RLX1dJREdFVCh3ZWJWaWV3QmFzZSkpOwogfQogCit2b2lkIHdlYmtp
dFdlYlZpZXdCYXNlU3RhcnREcmFnKFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJWaWV3QmFzZSwgY29u
c3QgRHJhZ0RhdGEmIGRyYWdEYXRhLCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gZHJhZ0lt
YWdlKQoreworICAgIFJlZlB0cjxEYXRhT2JqZWN0R3RrPiBkYXRhT2JqZWN0KGRyYWdEYXRhLnBs
YXRmb3JtRGF0YSgpKTsKKyAgICBHUmVmUHRyPEd0a1RhcmdldExpc3Q+IHRhcmdldExpc3QoUGFz
dGVib2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+dGFyZ2V0TGlzdEZvckRh
dGFPYmplY3QoZGF0YU9iamVjdC5nZXQoKSkpOworICAgIEdPd25QdHI8R2RrRXZlbnQ+IGN1cnJl
bnRFdmVudChndGtfZ2V0X2N1cnJlbnRfZXZlbnQoKSk7CisgICAgR2RrRHJhZ0NvbnRleHQqIGNv
bnRleHQgPSBndGtfZHJhZ19iZWdpbihHVEtfV0lER0VUKHdlYlZpZXdCYXNlKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldExpc3QuZ2V0KCksCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcmFnT3BlcmF0aW9u
VG9HZGtEcmFnQWN0aW9ucyhkcmFnRGF0YS5kcmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1hc2soKSks
IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgLyogYnV0
dG9uICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndGtf
Z2V0X2N1cnJlbnRfZXZlbnQoKSk7CisgICAgd2ViVmlld0Jhc2UtPnByaXYtPmRyYWdBbmREcm9w
R2x1ZS5zdGFydGVkRHJhZyhjb250ZXh0LCBkYXRhT2JqZWN0LmdldCgpKTsKKworCisgICAgLy8g
QSBkcmFnIHN0YXJ0aW5nIHNob3VsZCBwcmV2ZW50IGEgZG91YmxlLWNsaWNrIGZyb20gaGFwcGVu
aW5nLiBUaGlzIG1pZ2h0CisgICAgLy8gaGFwcGVuIGlmIGEgZHJhZyBpcyBmb2xsb3dlZCB2ZXJ5
IHF1aWNrbHkgYnkgYW5vdGhlciBjbGljayAobGlrZSBpbiB0aGUgRFJUKS4KKyAgICB3ZWJWaWV3
QmFzZS0+cHJpdi0+Y2xpY2tDb3VudGVyLnJlc2V0KCk7CisKKyAgICBpZiAoZHJhZ0ltYWdlKSB7
CisgICAgICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IGltYWdlKGRyYWdJbWFnZS0+Y3JlYXRl
Q2Fpcm9TdXJmYWNlKCkpOworICAgICAgICBndGtfZHJhZ19zZXRfaWNvbl9zdXJmYWNlKGNvbnRl
eHQsIGltYWdlLmdldCgpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZ3RrX2RyYWdfc2V0X2ljb25f
ZGVmYXVsdChjb250ZXh0KTsKK30KKwogdm9pZCB3ZWJraXRXZWJWaWV3QmFzZUZvcndhcmROZXh0
S2V5RXZlbnQoV2ViS2l0V2ViVmlld0Jhc2UqIHdlYmtpdFdlYlZpZXdCYXNlKQogewogICAgIHdl
YmtpdFdlYlZpZXdCYXNlLT5wcml2LT5zaG91bGRGb3J3YXJkTmV4dEtleUV2ZW50ID0gVFJVRTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZp
ZXdCYXNlUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
V2ViVmlld0Jhc2VQcml2YXRlLmgKaW5kZXggYTM5MDY4ZmM2MjkyYmIzZTlmNzlhNzE2ZDE4Yzkw
ZjNmMTkyYWIwMC4uM2E5YTQwYjg2NWRjMzEwYjFiMjdkNzEyZTIyMGUxNTJkM2E0ZjExNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jh
c2VQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0
V2ViVmlld0Jhc2VQcml2YXRlLmgKQEAgLTQ4LDYgKzQ4LDggQEAgdm9pZCB3ZWJraXRXZWJWaWV3
QmFzZVNldFRvb2x0aXBUZXh0KFdlYktpdFdlYlZpZXdCYXNlKiwgY29uc3QgY2hhciopOwogCiB2
b2lkIHdlYmtpdFdlYlZpZXdCYXNlRm9yd2FyZE5leHRLZXlFdmVudChXZWJLaXRXZWJWaWV3QmFz
ZSopOwogCit2b2lkIHdlYmtpdFdlYlZpZXdCYXNlU3RhcnREcmFnKFdlYktpdFdlYlZpZXdCYXNl
KiwgY29uc3QgV2ViQ29yZTo6RHJhZ0RhdGEmLCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4g
ZHJhZ0ltYWdlKTsKKwogR19FTkRfREVDTFMKIAogI2VuZGlmIC8vIFdlYktpdFdlYlZpZXdCYXNl
UHJpdmF0ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNsaWVu
dC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BhZ2VDbGllbnQuaAppbmRleCBlOGE1ZTM3
MTVlNGQwOGVmN2ZlMzNkMGFmZDE5YjQzNzE0NDZlNWZiLi42Yjk1YTIzZDFmZWM0MTQzYWFmNTli
NjhiMTU0NmI4ZjBjZWNlMzE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
UGFnZUNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgK
QEAgLTEwMyw3ICsxMDMsOSBAQCBwdWJsaWM6CiAjaWYgUExBVEZPUk0oUVQpCiAgICAgdmlydHVh
bCB2b2lkIGRpZENoYW5nZUNvbnRlbnRzU2l6ZShjb25zdCBXZWJDb3JlOjpJbnRTaXplJikgPSAw
OwogICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5kWm9vbWFibGVBcmVhKGNvbnN0IFdlYkNvcmU6Oklu
dFBvaW50JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpID0gMDsKKyNlbmRpZgogCisjaWYgUExB
VEZPUk0oUVQpIHx8IFBMQVRGT1JNKEdUSykKICAgICB2aXJ0dWFsIHZvaWQgc3RhcnREcmFnKGNv
bnN0IFdlYkNvcmU6OkRyYWdEYXRhJiwgUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGRyYWdJ
bWFnZSkgPSAwOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94
eS5jcHAKaW5kZXggZGU0OTFkODc3MjE4N2EyOGU5Njg4Y2ZjMDZhNTI5YmM0ZTlmZGMxOS4uZDc1
ZWE2ZDAzYWYyZDM3Y2RkNTIzMTAwZGMwNGUxYmFmNGY2YWVkZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKQEAgLTgzLDYgKzgzLDEwIEBACiAjaW5jbHVkZSAi
QXJndW1lbnRDb2RlcnNRdC5oIgogI2VuZGlmCiAKKyNpZiBQTEFURk9STShHVEspCisjaW5jbHVk
ZSAiQXJndW1lbnRDb2RlcnNHdGsuaCIKKyNlbmRpZgorCiAjaWZuZGVmIE5ERUJVRwogI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkTGVha0NvdW50ZXIuaD4KICNlbmRpZgpAQCAtNzc0LDcgKzc3OCw3
IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpwZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24oRHJhZ0Nv
bnRyb2xsZXJBY3Rpb24gYWN0aW9uLCBEcmFnCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBwYXNz
IHRoZSBkcmFnIGRhdGEgbWFwIG9ubHkgb24gRHJhZ0VudGVyLgogICAgIHByb2Nlc3MoKS0+c2Vu
ZChNZXNzYWdlczo6V2ViUGFnZTo6UGVyZm9ybURyYWdDb250cm9sbGVyQWN0aW9uKGFjdGlvbiwg
ZHJhZ0RhdGEtPmNsaWVudFBvc2l0aW9uKCksIGRyYWdEYXRhLT5nbG9iYWxQb3NpdGlvbigpLAog
ICAgICAgICBkcmFnRGF0YS0+ZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrKCksIGRyYWdEYXRh
LT5kcmFnRGF0YU1hcCgpLCBkcmFnRGF0YS0+ZmxhZ3MoKSksIG1fcGFnZUlEKTsKLSNlbGlmIFBM
QVRGT1JNKFFUKQorI2VsaWYgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEdUSykKICAgICBwcm9j
ZXNzKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlv
bihhY3Rpb24sICpkcmFnRGF0YSksIG1fcGFnZUlEKTsKICNlbHNlCiAgICAgcHJvY2VzcygpLT5z
ZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpQZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24oYWN0aW9u
LCBkcmFnRGF0YS0+Y2xpZW50UG9zaXRpb24oKSwgZHJhZ0RhdGEtPmdsb2JhbFBvc2l0aW9uKCks
IGRyYWdEYXRhLT5kcmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1hc2soKSwgZHJhZ1N0b3JhZ2VOYW1l
LCBkcmFnRGF0YS0+ZmxhZ3MoKSwgc2FuZGJveEV4dGVuc2lvbkhhbmRsZSksIG1fcGFnZUlEKTsK
QEAgLTc4Niw3ICs3OTAsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6ZGlkUGVyZm9ybURyYWdDb250
cm9sbGVyQWN0aW9uKHVpbnQ2NF90IHJlc3VsdE9wZXJhdGlvbikKICAgICBtX2N1cnJlbnREcmFn
T3BlcmF0aW9uID0gc3RhdGljX2Nhc3Q8RHJhZ09wZXJhdGlvbj4ocmVzdWx0T3BlcmF0aW9uKTsK
IH0KIAotI2lmIFBMQVRGT1JNKFFUKQorI2lmIFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShHVEsp
CiB2b2lkIFdlYlBhZ2VQcm94eTo6c3RhcnREcmFnKGNvbnN0IERyYWdEYXRhJiBkcmFnRGF0YSwg
Y29uc3QgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmIGRyYWdJbWFnZUhhbmRsZSkKIHsKICAgICBS
ZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBkcmFnSW1hZ2UgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5oCmluZGV4IGNjZGU2NDdiMzRlY2M1NjJhMmZhYzNlNzk0OGMwMWEw
MDNiZDY5NzYuLjM1NTRmMWY1NzFhNWY4ODUwMTgxNzE0M2I3MWI2ZDBkNjM5MWIyODggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKQEAgLTQ2NSw3ICs0NjUsNyBAQCBw
dWJsaWM6CiAjaWYgUExBVEZPUk0oV0lOKQogICAgIHZvaWQgc3RhcnREcmFnRHJvcChjb25zdCBX
ZWJDb3JlOjpJbnRQb2ludCYgaW1hZ2VQb2ludCwgY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIGRy
YWdQb2ludCwgdWludDY0X3Qgb2tFZmZlY3QsIGNvbnN0IEhhc2hNYXA8VUlOVCwgVmVjdG9yPFN0
cmluZz4gPiYgZGF0YU1hcCwgdWludDY0X3QgZmlsZVNpemUsIGNvbnN0IFN0cmluZyYgcGF0aG5h
bWUsIGNvbnN0IFNoYXJlZE1lbW9yeTo6SGFuZGxlJiBmaWxlQ29udGVudEhhbmRsZSwgY29uc3Qg
V2ViQ29yZTo6SW50U2l6ZSYgZHJhZ0ltYWdlU2l6ZSwgY29uc3QgU2hhcmVkTWVtb3J5OjpIYW5k
bGUmIGRyYWdJbWFnZUhhbmRsZSwgYm9vbCBpc0xpbmtEcmFnKTsKICNlbmRpZgotI2lmIFBMQVRG
T1JNKFFUKQorI2lmIFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShHVEspCiAgICAgdm9pZCBzdGFy
dERyYWcoY29uc3QgV2ViQ29yZTo6RHJhZ0RhdGEmLCBjb25zdCBTaGFyZWFibGVCaXRtYXA6Okhh
bmRsZSYgZHJhZ0ltYWdlKTsKICNlbmRpZgogICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoQ29y
ZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VJRCwgQ29yZUlQQzo6QXJndW1lbnRE
ZWNvZGVyKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVBy
b3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5t
ZXNzYWdlcy5pbgppbmRleCBiZDhmZjFiNGY4NDc4NmU0MzY0NWEwNjg4YWUyYjVkYzM3NWFhODg0
Li45OGViNGY4YTA1YzRlZjQ4OTVkZWUwZjFmNDExNWJhN2YzNzE4M2ZiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4KQEAgLTIxMyw3
ICsyMTMsNyBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlUHJveHkgewogI2lmIFBMQVRGT1JNKFdJTikK
ICAgICBTdGFydERyYWdEcm9wKFdlYkNvcmU6OkludFBvaW50IGltYWdlUG9pbnQsIFdlYkNvcmU6
OkludFBvaW50IGRyYWdQb2ludCwgdWludDY0X3Qgb2tFZmZlY3QsIEhhc2hNYXA8VUlOVCxWZWN0
b3I8U3RyaW5nPiA+IGRhdGFNYXAsIHVpbnQ2NF90IGZpbGVTaXplLCBTdHJpbmcgcGF0aG5hbWUs
IFdlYktpdDo6U2hhcmVkTWVtb3J5OjpIYW5kbGUgZmlsZUNvbnRlbnRIYW5kbGUsIFdlYkNvcmU6
OkludFNpemUgZHJhZ0ltYWdlU2l6ZSwgV2ViS2l0OjpTaGFyZWRNZW1vcnk6OkhhbmRsZSBkcmFn
SW1hZ2UsIGJvb2wgbGlua0RyYWcpCiAjZW5kaWYKLSNpZiBQTEFURk9STShRVCkKKyNpZiBQTEFU
Rk9STShRVCkgfHwgUExBVEZPUk0oR1RLKQogICAgIFN0YXJ0RHJhZyhXZWJDb3JlOjpEcmFnRGF0
YSBkcmFnRGF0YSwgV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBkcmFnSW1hZ2UpCiAj
ZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9XZWJEcmFnQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29y
ZVN1cHBvcnQvV2ViRHJhZ0NsaWVudC5jcHAKaW5kZXggODQ1ZmJiZWMxZDMxNWFkZWI0NmExMTg4
YjkxOTk5ODI0Mzc4YzUwYS4uNzM2ZGUyMTc3YWM4MDgyZDAwZWJlM2I2ZmVmOGYzZWJmOTlhZjdk
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJEcmFnQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVT
dXBwb3J0L1dlYkRyYWdDbGllbnQuY3BwCkBAIC01Miw3ICs1Miw3IEBAIERyYWdTb3VyY2VBY3Rp
b24gV2ViRHJhZ0NsaWVudDo6ZHJhZ1NvdXJjZUFjdGlvbk1hc2tGb3JQb2ludChjb25zdCBJbnRQ
b2ludCYgd2luCiAgICAgcmV0dXJuIERyYWdTb3VyY2VBY3Rpb25Bbnk7CiB9CiAKLSNpZiAhUExB
VEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oV0lOKSAmJiAhUExBVEZPUk0oUVQpCisjaWYgIVBMQVRG
T1JNKE1BQykgJiYgIVBMQVRGT1JNKFdJTikgJiYgIVBMQVRGT1JNKFFUKSAmJiAhUExBVEZPUk0o
R1RLKQogdm9pZCBXZWJEcmFnQ2xpZW50OjpzdGFydERyYWcoRHJhZ0ltYWdlUmVmLCBjb25zdCBJ
bnRQb2ludCYsIGNvbnN0IEludFBvaW50JiwgQ2xpcGJvYXJkKiwgRnJhbWUqLCBib29sKQogewog
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9n
dGsvV2ViRHJhZ0NsaWVudEd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L2d0ay9XZWJEcmFnQ2xpZW50R3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lOWFjZjJkZjdl
ZTZjNjU5NWQ1OTA1OGQ3Y2QxOGViZWNlYmU1YmMwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9ndGsvV2ViRHJhZ0NsaWVudEd0ay5j
cHAKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5M
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViRHJhZ0NsaWVu
dC5oIgorCisjaW5jbHVkZSAiQXJndW1lbnRDb2RlcnNHdGsuaCIKKyNpbmNsdWRlICJTaGFyZWFi
bGVCaXRtYXAuaCIKKyNpbmNsdWRlICJXZWJQYWdlLmgiCisjaW5jbHVkZSAiV2ViUGFnZVByb3h5
TWVzc2FnZXMuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0NsaXBib2FyZEd0ay5oPgorI2luY2x1ZGUg
PFdlYkNvcmUvRHJhZ0RhdGEuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzQ29udGV4dC5o
PgorI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1Db250ZXh0Q2Fpcm8uaD4KKwordXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitzdGF0aWMgUGFzc1JlZlB0
cjxTaGFyZWFibGVCaXRtYXA+IGNvbnZlcnRDYWlyb1N1cmZhY2VUb1NoYXJlYWJsZUJpdG1hcChj
YWlyb19zdXJmYWNlX3QqIHN1cmZhY2UpCit7CisgICAgaWYgKCFzdXJmYWNlKQorICAgICAgICBy
ZXR1cm4gMDsKKworICAgIEludFNpemUgaW1hZ2VTaXplKGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0
X3dpZHRoKHN1cmZhY2UpLCBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQoc3VyZmFjZSkp
OworICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IFNoYXJlYWJsZUJpdG1hcDo6
Y3JlYXRlU2hhcmVhYmxlKGltYWdlU2l6ZSwgU2hhcmVhYmxlQml0bWFwOjpTdXBwb3J0c0FscGhh
KTsKKyAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBncmFwaGljc0NvbnRleHQgPSBiaXRtYXAt
PmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpOworCisgICAgZ3JhcGhpY3NDb250ZXh0LT5wbGF0Zm9y
bUNvbnRleHQoKS0+ZHJhd1N1cmZhY2VUb0NvbnRleHQoc3VyZmFjZSwgSW50UmVjdChJbnRQb2lu
dCgpLCBpbWFnZVNpemUpLCBJbnRSZWN0KEludFBvaW50KCksIGltYWdlU2l6ZSksIGdyYXBoaWNz
Q29udGV4dC5nZXQoKSk7CisgICAgcmV0dXJuIGJpdG1hcC5yZWxlYXNlKCk7Cit9CisKK3ZvaWQg
V2ViRHJhZ0NsaWVudDo6c3RhcnREcmFnKERyYWdJbWFnZVJlZiBkcmFnSW1hZ2UsIGNvbnN0IElu
dFBvaW50JiBjbGllbnRQb3NpdGlvbiwgY29uc3QgSW50UG9pbnQmIGdsb2JhbFBvc2l0aW9uLCBD
bGlwYm9hcmQqIGNsaXBib2FyZCwgRnJhbWUqLCBib29sKQoreworICAgIFJlZlB0cjxTaGFyZWFi
bGVCaXRtYXA+IGJpdG1hcCA9IGNvbnZlcnRDYWlyb1N1cmZhY2VUb1NoYXJlYWJsZUJpdG1hcChk
cmFnSW1hZ2UpOworICAgIFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRsZTsKKyAgICBpZiAo
Yml0bWFwICYmICFiaXRtYXAtPmNyZWF0ZUhhbmRsZShoYW5kbGUpKQorICAgICAgICByZXR1cm47
CisKKyAgICBSZWZQdHI8RGF0YU9iamVjdEd0az4gZGF0YU9iamVjdCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8Q2xpcGJvYXJkR3RrKj4oY2xpcGJvYXJkKS0+ZGF0YU9iamVjdCgpOworICAgIERyYWdEYXRh
IGRyYWdEYXRhKGRhdGFPYmplY3QuZ2V0KCksIGNsaWVudFBvc2l0aW9uLCBnbG9iYWxQb3NpdGlv
biwgY2xpcGJvYXJkLT5zb3VyY2VPcGVyYXRpb24oKSk7CisgICAgbV9wYWdlLT5zZW5kKE1lc3Nh
Z2VzOjpXZWJQYWdlUHJveHk6OlN0YXJ0RHJhZyhkcmFnRGF0YSwgaGFuZGxlKSk7Cit9CisKK307
IC8vIG5hbWVzcGFjZSBXZWJLaXQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5jcHAKaW5kZXggNWUyMTEyMzdmZGMxZmMwZmE2M2VjZTlhZjM3ZGMzNjI4MGYx
YjQ5Ny4uODBhYTMzNDUzOTY5OTA3ODFlYzZkYWViMDE3NDg2YmMwYWY3NmUyZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcApAQCAtMTY4NywxMiAr
MTY4NywxNiBAQCB2b2lkIFdlYlBhZ2U6OnBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlvbih1aW50
NjRfdCBhY3Rpb24sIFdlYkNvcmU6OkludFBvaW50IGNsaQogICAgIH0KIH0KIAotI2VsaWYgUExB
VEZPUk0oUVQpCisjZWxpZiBQTEFURk9STShRVCkgfHwgUExBVEZPUk0oR1RLKQogdm9pZCBXZWJQ
YWdlOjpwZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24odWludDY0X3QgYWN0aW9uLCBXZWJDb3Jl
OjpEcmFnRGF0YSBkcmFnRGF0YSkKIHsKICAgICBpZiAoIW1fcGFnZSkgewogICAgICAgICBzZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZFBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlvbihE
cmFnT3BlcmF0aW9uTm9uZSkpOworI2lmIFBMQVRGT1JNKFFUKQogICAgICAgICBRTWltZURhdGEq
IGRhdGEgPSBjb25zdF9jYXN0PFFNaW1lRGF0YSo+KGRyYWdEYXRhLnBsYXRmb3JtRGF0YSgpKTsK
KyNlbGlmIFBMQVRGT1JNKEdUSykKKyAgICAgICAgRGF0YU9iamVjdEd0ayogZGF0YSA9IGNvbnN0
X2Nhc3Q8RGF0YU9iamVjdEd0ayo+KGRyYWdEYXRhLnBsYXRmb3JtRGF0YSgpKTsKKyNlbmRpZgog
ICAgICAgICBkZWxldGUgZGF0YTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE3MTksNyAr
MTcyMywxMSBAQCB2b2lkIFdlYlBhZ2U6OnBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlvbih1aW50
NjRfdCBhY3Rpb24sIFdlYkNvcmU6OkRyYWdEYXRhIGRyYQogICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICB9CiAgICAgLy8gRHJhZ0RhdGEgZG9lcyBub3QgZGVsZXRlIGl0cyBwbGF0
Zm9ybURhdGEgc28gd2UgbmVlZCB0byBkbyB0aGF0IGhlcmUuCisjaWYgUExBVEZPUk0oUVQpCiAg
ICAgUU1pbWVEYXRhKiBkYXRhID0gY29uc3RfY2FzdDxRTWltZURhdGEqPihkcmFnRGF0YS5wbGF0
Zm9ybURhdGEoKSk7CisjZWxpZiBQTEFURk9STShHVEspCisgICAgRGF0YU9iamVjdEd0ayogZGF0
YSA9IGNvbnN0X2Nhc3Q8RGF0YU9iamVjdEd0ayo+KGRyYWdEYXRhLnBsYXRmb3JtRGF0YSgpKTsK
KyNlbmRpZgogICAgIGRlbGV0ZSBkYXRhOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UuaAppbmRleCA3MTc5OTAxODk5MmUwZDU2ZjYyNDBiMWMxMGVjMzc5
YTc3YzQ2Nzk5Li5kZmY2N2M4MTI3ODQ4NjlhOTk2ZTY3ODU2NzJiMWE1MjAzZjBmNjJlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKQEAgLTYwLDYgKzYw
LDEwIEBACiAjaW5jbHVkZSAiQXJndW1lbnRDb2RlcnNRdC5oIgogI2VuZGlmCiAKKyNpZiBQTEFU
Rk9STShHVEspCisjaW5jbHVkZSAiQXJndW1lbnRDb2RlcnNHdGsuaCIKKyNlbmRpZgorCiAjaWYg
RU5BQkxFKFRPVUNIX0VWRU5UUykKICNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtVG91Y2hFdmVu
dC5oPgogI2VuZGlmCkBAIC0zODAsNyArMzg0LDcgQEAgcHVibGljOgogICAgIHZvaWQgY2xlYXJT
ZWxlY3Rpb24oKTsKICNpZiBQTEFURk9STShXSU4pCiAgICAgdm9pZCBwZXJmb3JtRHJhZ0NvbnRy
b2xsZXJBY3Rpb24odWludDY0X3QgYWN0aW9uLCBXZWJDb3JlOjpJbnRQb2ludCBjbGllbnRQb3Np
dGlvbiwgV2ViQ29yZTo6SW50UG9pbnQgZ2xvYmFsUG9zaXRpb24sIHVpbnQ2NF90IGRyYWdnaW5n
U291cmNlT3BlcmF0aW9uTWFzaywgY29uc3QgV2ViQ29yZTo6RHJhZ0RhdGFNYXAmLCB1aW50MzJf
dCBmbGFncyk7Ci0jZWxpZiBQTEFURk9STShRVCkKKyNlbGlmIFBMQVRGT1JNKFFUKSB8fCBQTEFU
Rk9STShHVEspCiAgICAgdm9pZCBwZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24odWludDY0X3Qg
YWN0aW9uLCBXZWJDb3JlOjpEcmFnRGF0YSk7CiAjZWxzZQogICAgIHZvaWQgcGVyZm9ybURyYWdD
b250cm9sbGVyQWN0aW9uKHVpbnQ2NF90IGFjdGlvbiwgV2ViQ29yZTo6SW50UG9pbnQgY2xpZW50
UG9zaXRpb24sIFdlYkNvcmU6OkludFBvaW50IGdsb2JhbFBvc2l0aW9uLCB1aW50NjRfdCBkcmFn
Z2luZ1NvdXJjZU9wZXJhdGlvbk1hc2ssIGNvbnN0IFdURjo6U3RyaW5nJiBkcmFnU3RvcmFnZU5h
bWUsIHVpbnQzMl90IGZsYWdzLCBjb25zdCBTYW5kYm94RXh0ZW5zaW9uOjpIYW5kbGUmKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3Nh
Z2VzLmluIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2Fn
ZXMuaW4KaW5kZXggOWRkYjI2NDFhMjEwYzExNTQxMzQ0NDdkOTEzZTE3MGY5MjkxNWYzZS4uZmRl
ZjY0NmQwYmU1ZjQwNDc1NzZlNTdiYTQ2M2IxYmEwZWZkOTUzNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KKysrIGIvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KQEAgLTEy
NSwxMCArMTI1LDEwIEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2UgewogI2lmIFBMQVRGT1JNKFdJTikK
ICAgICBQZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24odWludDY0X3QgYWN0aW9uLCBXZWJDb3Jl
OjpJbnRQb2ludCBjbGllbnRQb3NpdGlvbiwgV2ViQ29yZTo6SW50UG9pbnQgZ2xvYmFsUG9zaXRp
b24sIHVpbnQ2NF90IGRyYWdnaW5nU291cmNlT3BlcmF0aW9uTWFzaywgSGFzaE1hcDxVSU5ULFZl
Y3RvcjxTdHJpbmc+PiBkYXRhTWFwLCB1aW50MzJfdCBmbGFncykKICNlbmRpZgotI2lmIFBMQVRG
T1JNKFFUKQorI2lmIFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShHVEspCiAgICAgUGVyZm9ybURy
YWdDb250cm9sbGVyQWN0aW9uKHVpbnQ2NF90IGFjdGlvbiwgV2ViQ29yZTo6RHJhZ0RhdGEgZHJh
Z0RhdGEpCiAjZW5kaWYKLSNpZiAhUExBVEZPUk0oV0lOKSAmJiAhUExBVEZPUk0oUVQpCisjaWYg
IVBMQVRGT1JNKFdJTikgJiYgIVBMQVRGT1JNKFFUKSAmJiAhUExBVEZPUk0oR1RLKQogICAgIFBl
cmZvcm1EcmFnQ29udHJvbGxlckFjdGlvbih1aW50NjRfdCBhY3Rpb24sIFdlYkNvcmU6OkludFBv
aW50IGNsaWVudFBvc2l0aW9uLCBXZWJDb3JlOjpJbnRQb2ludCBnbG9iYWxQb3NpdGlvbiwgdWlu
dDY0X3QgZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrLCBXVEY6OlN0cmluZyBkcmFnU3RvcmFn
ZU5hbWUsIHVpbnQzMl90IGZsYWdzLCBXZWJLaXQ6OlNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBz
YW5kYm94RXh0ZW5zaW9uSGFuZGxlKQogI2VuZGlmCiAgICAgRHJhZ0VuZGVkKFdlYkNvcmU6Oklu
dFBvaW50IGNsaWVudFBvc2l0aW9uLCBXZWJDb3JlOjpJbnRQb2ludCBnbG9iYWxQb3NpdGlvbiwg
dWludDY0X3Qgb3BlcmF0aW9uKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110095</attachid>
            <date>2011-10-06 23:26:34 -0700</date>
            <delta_ts>2011-10-07 00:25:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-63706-20111006232633.patch</filename>
            <type>text/plain</type>
            <size>53561</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTY3ODUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA1MzJjYzg1YTc4MzVlMGFk
Nzk4Njk3ZDkxY2U3ZTM0MmRjOTc4YjFlLi5jMTM1OGI5MzA5MGNmNDUyOWRhNzEwZTc0N2JmZGI1
ZGNjMmFlNzYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzEgQEAKKzIwMTEtMTAtMDMgIENhcmxv
cyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPiBhbmQgTWFydGluIFJvYmluc29u
ICA8bXJvYmluc29uQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gSW1wbGVtZW50IGRyYWcg
YW5kIGRyb3Agc3VwcG9ydCBpbiBXZWJLaXQyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD02MzcwNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogcGxhdGZvcm0vRHJhZ0RhdGEuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ndGsvRGF0YU9iamVjdEd0ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhT2JqZWN0
R3RrOjp0ZXh0KTogTWFyayBhcyBjb25zdC4KKyAgICAgICAgKFdlYkNvcmU6OkRhdGFPYmplY3RH
dGs6Om1hcmt1cCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RGF0YU9iamVjdEd0azo6dXJs
TGFiZWwpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvRGF0YU9iamVjdEd0ay5oOiBS
ZW1vdmUgdW51c2VkIG1lbWJlcgorICAgICAgICBtX2RyYWdDb250ZXh0LgorICAgICAgICAoV2Vi
Q29yZTo6RGF0YU9iamVjdEd0azo6dXJsKTogTWFyayBhcyBjb25zdC4KKyAgICAgICAgKFdlYkNv
cmU6OkRhdGFPYmplY3RHdGs6OnVyaUxpc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRh
dGFPYmplY3RHdGs6OmZpbGVuYW1lcyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RGF0YU9i
amVjdEd0azo6aW1hZ2UpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRhdGFPYmplY3RHdGs6
Omhhc1RleHQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRhdGFPYmplY3RHdGs6Omhhc01h
cmt1cCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RGF0YU9iamVjdEd0azo6aGFzVVJJTGlz
dCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RGF0YU9iamVjdEd0azo6aGFzVVJMKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpEYXRhT2JqZWN0R3RrOjpoYXNGaWxlbmFtZXMpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OkRhdGFPYmplY3RHdGs6Omhhc0ltYWdlKTogRGl0dG8uCisg
ICAgICAgICogcGxhdGZvcm0vZ3RrL0RyYWdJY29uLmNwcDogQWRkZWQuIEEgaGVscGVyIHdoaWNo
IHRha2VzIGNhcmUgb2YKKyAgICAgICAgY3JlYXRpbmcgYSB0cmFuc3BhcmVudCBkcmFnIHdpbmRv
dyBmb3IgZHJhZ3MuCisgICAgICAgICogcGxhdGZvcm0vZ3RrL0RyYWdJY29uLmg6IEFkZGVkLgor
CiAyMDExLTEwLTA1ICBZdXRhIEtpdGFtdXJhICA8eXV0YWtAY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFdlYlNvY2tldDogQWRkIGV4dGVuc2lvbnMgYXR0cmlidXRlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZp
bGUubGlzdC5hbQppbmRleCBmMTM0NDk1NDAxYjVmZTViMzY1MjRhZGViNGFmMjhlZmFjOThjNTM1
Li5hODk2YzNhMTA2Yzk0MWM5ZTk2NzIwMjVhYjlmYTg4ZmRhNTM0OTE2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dO
VW1ha2VmaWxlLmxpc3QuYW0KQEAgLTM5OTksNiArMzk5OSw4IEBAIHdlYmNvcmVndGtfc291cmNl
cyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0RhdGFPYmplY3RHdGsuY3BwIFwK
IAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRGF0YU9iamVjdEd0ay5oIFwKIAlTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvRHJhZ0RhdGFHdGsuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvRHJhZ0ljb24uY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
RHJhZ0ljb24uaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0RyYWdJbWFnZUd0ay5j
cHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9FdmVudExvb3BHdGsuY3BwIFwKIAlT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRmlsZVN5c3RlbUd0ay5jcHAgXApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0RhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0RyYWdEYXRhLmgKaW5kZXggYWQ5YTdiOGJlZTFkN2Q5ZjFkMjY2MTdjODI3ODg3NTIw
MGJiOGFjNi4uYWZhMjE5ZjNiNzIyM2JkZGQ1OGMyN2VmNjcyZDhjNmNhNzBjZjFiYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0RhdGEuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9EcmFnRGF0YS5oCkBAIC0xMjAsNyArMTIwLDcgQEAgcHVibGljOgogICAg
IE5TUGFzdGVib2FyZCAqcGFzdGVib2FyZCgpIHsgcmV0dXJuIG1fcGFzdGVib2FyZC5nZXQoKTsg
fQogI2VuZGlmCiAKLSNpZiBQTEFURk9STShRVCkKKyNpZiBQTEFURk9STShRVCkgfHwgUExBVEZP
Uk0oR1RLKQogICAgIC8vIFRoaXMgY29uc3RydWN0b3Igc2hvdWxkIHVzZWQgb25seSBieSBXZWJL
aXQyIElQQyBiZWNhdXNlIERyYWdEYXRhCiAgICAgLy8gaXMgaW5pdGlhbGl6ZWQgYnkgdGhlIGRl
Y29kZXIgYW5kIG5vdCBpbiB0aGUgY29uc3RydWN0b3IuCiAgICAgRHJhZ0RhdGEoKSB7IH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EYXRhT2JqZWN0R3RrLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EYXRhT2JqZWN0R3RrLmNwcAppbmRleCAyMGE5
ZTliNGFjMDBjNTNlMGU2Mjg2MmE2YTgyMDRjNDU5MjU5NTViLi4zMjQwNWMxN2Y2ZjJkZTcxZTBk
MmRiZmNjMDY1MmNmN2RkMjBlN2IxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvRGF0YU9iamVjdEd0ay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L0RhdGFPYmplY3RHdGsuY3BwCkBAIC0zMywxNCArMzMsMTQgQEAgc3RhdGljIHZvaWQgcmVwbGFj
ZU5vbkJyZWFraW5nU3BhY2VXaXRoU3BhY2UoU3RyaW5nJiBzdHIpCiAgICAgc3RyLnJlcGxhY2Uo
Tm9uQnJlYWtpbmdTcGFjZUNoYXJhY3RlciwgU3BhY2VDaGFyYWN0ZXIpOwogfQogCi1TdHJpbmcg
RGF0YU9iamVjdEd0azo6dGV4dCgpCitTdHJpbmcgRGF0YU9iamVjdEd0azo6dGV4dCgpIGNvbnN0
CiB7CiAgICAgaWYgKG1fcmFuZ2UpCiAgICAgICAgIHJldHVybiBtX3JhbmdlLT50ZXh0KCk7CiAg
ICAgcmV0dXJuIG1fdGV4dDsKIH0KIAotU3RyaW5nIERhdGFPYmplY3RHdGs6Om1hcmt1cCgpCitT
dHJpbmcgRGF0YU9iamVjdEd0azo6bWFya3VwKCkgY29uc3QKIHsKICAgICBpZiAobV9yYW5nZSkK
ICAgICAgICAgcmV0dXJuIGNyZWF0ZU1hcmt1cChtX3JhbmdlLmdldCgpLCAwLCBBbm5vdGF0ZUZv
ckludGVyY2hhbmdlLCBmYWxzZSwgUmVzb2x2ZU5vbkxvY2FsVVJMcyk7CkBAIC0xMzMsNyArMTMz
LDcgQEAgdm9pZCBEYXRhT2JqZWN0R3RrOjpjbGVhck1hcmt1cCgpCiAgICAgbV9tYXJrdXAgPSAi
IjsKIH0KIAotU3RyaW5nIERhdGFPYmplY3RHdGs6OnVybExhYmVsKCkKK1N0cmluZyBEYXRhT2Jq
ZWN0R3RrOjp1cmxMYWJlbCgpIGNvbnN0CiB7CiAgICAgaWYgKGhhc1RleHQoKSkKICAgICAgICAg
cmV0dXJuIHRleHQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9E
YXRhT2JqZWN0R3RrLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRGF0YU9iamVjdEd0
ay5oCmluZGV4IDU0MjNmODFkMzIzMjU3NzQxZTZlNGM3MDBhZmQ5OGVmNDJkNWY2ZWYuLmUyN2Jj
OTE1ZmY2YmUzY2YyNDRkOWJjZTUzNWY1MzIyZWRjNWU3MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9EYXRhT2JqZWN0R3RrLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL0RhdGFPYmplY3RHdGsuaApAQCAtMzYsMzEgKzM2LDI5IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEYXRhT2JqZWN0R3RrKCkpOwogICAgIH0KIAot
ICAgIGNvbnN0IEtVUkwmIHVybCgpIHsgcmV0dXJuIG1fdXJsOyB9Ci0gICAgY29uc3QgU3RyaW5n
JiB1cmlMaXN0KCkgeyByZXR1cm4gbV91cmlMaXN0OyB9Ci0gICAgY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIGZpbGVuYW1lcygpIHsgcmV0dXJuIG1fZmlsZW5hbWVzOyB9Ci0gICAgR2RrUGl4YnVmKiBp
bWFnZSgpIHsgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7IH0KKyAgICBjb25zdCBLVVJMJiB1cmwoKSBj
b25zdCB7IHJldHVybiBtX3VybDsgfQorICAgIGNvbnN0IFN0cmluZyYgdXJpTGlzdCgpIGNvbnN0
IHsgcmV0dXJuIG1fdXJpTGlzdDsgfQorICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlbmFt
ZXMoKSBjb25zdCB7IHJldHVybiBtX2ZpbGVuYW1lczsgfQorICAgIEdka1BpeGJ1ZiogaW1hZ2Uo
KSBjb25zdCB7IHJldHVybiBtX2ltYWdlLmdldCgpOyB9CiAgICAgdm9pZCBzZXRSYW5nZShQYXNz
UmVmUHRyPFJhbmdlPiBuZXdSYW5nZSkgeyBtX3JhbmdlID0gbmV3UmFuZ2U7IH0KICAgICB2b2lk
IHNldEltYWdlKEdka1BpeGJ1ZiogbmV3SW1hZ2UpIHsgbV9pbWFnZSA9IG5ld0ltYWdlOyB9Ci0g
ICAgdm9pZCBzZXREcmFnQ29udGV4dChHZGtEcmFnQ29udGV4dCogbmV3RHJhZ0NvbnRleHQpIHsg
bV9kcmFnQ29udGV4dCA9IG5ld0RyYWdDb250ZXh0OyB9CiAgICAgdm9pZCBzZXRVUkwoY29uc3Qg
S1VSTCYsIGNvbnN0IFN0cmluZyYpOwotICAgIGJvb2wgaGFzVGV4dCgpIHsgcmV0dXJuIG1fcmFu
Z2UgfHwgIW1fdGV4dC5pc0VtcHR5KCk7IH0KLSAgICBib29sIGhhc01hcmt1cCgpIHsgcmV0dXJu
IG1fcmFuZ2UgfHwgIW1fbWFya3VwLmlzRW1wdHkoKTsgfQotICAgIGJvb2wgaGFzVVJJTGlzdCgp
IHsgcmV0dXJuICFtX3VyaUxpc3QuaXNFbXB0eSgpOyB9Ci0gICAgYm9vbCBoYXNVUkwoKSB7IHJl
dHVybiAhbV91cmwuaXNFbXB0eSgpICYmIG1fdXJsLmlzVmFsaWQoKTsgfQotICAgIGJvb2wgaGFz
RmlsZW5hbWVzKCkgeyByZXR1cm4gIW1fZmlsZW5hbWVzLmlzRW1wdHkoKTsgfQotICAgIGJvb2wg
aGFzSW1hZ2UoKSB7IHJldHVybiBtX2ltYWdlOyB9CisgICAgYm9vbCBoYXNUZXh0KCkgY29uc3Qg
eyByZXR1cm4gbV9yYW5nZSB8fCAhbV90ZXh0LmlzRW1wdHkoKTsgfQorICAgIGJvb2wgaGFzTWFy
a3VwKCkgY29uc3QgeyByZXR1cm4gbV9yYW5nZSB8fCAhbV9tYXJrdXAuaXNFbXB0eSgpOyB9Cisg
ICAgYm9vbCBoYXNVUklMaXN0KCkgY29uc3QgeyByZXR1cm4gIW1fdXJpTGlzdC5pc0VtcHR5KCk7
IH0KKyAgICBib29sIGhhc1VSTCgpIGNvbnN0IHsgcmV0dXJuICFtX3VybC5pc0VtcHR5KCkgJiYg
bV91cmwuaXNWYWxpZCgpOyB9CisgICAgYm9vbCBoYXNGaWxlbmFtZXMoKSBjb25zdCB7IHJldHVy
biAhbV9maWxlbmFtZXMuaXNFbXB0eSgpOyB9CisgICAgYm9vbCBoYXNJbWFnZSgpIGNvbnN0IHsg
cmV0dXJuIG1faW1hZ2U7IH0KICAgICB2b2lkIGNsZWFyVVJJTGlzdCgpIHsgbV91cmlMaXN0ID0g
IiI7IH0KICAgICB2b2lkIGNsZWFyVVJMKCkgeyBtX3VybCA9IEtVUkwoKTsgfQogICAgIHZvaWQg
Y2xlYXJJbWFnZSgpIHsgbV9pbWFnZSA9IDA7IH0KLSAgICBHZGtEcmFnQ29udGV4dCogZHJhZ0Nv
bnRleHQoKSB7IHJldHVybiBtX2RyYWdDb250ZXh0LmdldCgpOyB9CiAKLSAgICBTdHJpbmcgdGV4
dCgpOwotICAgIFN0cmluZyBtYXJrdXAoKTsKKyAgICBTdHJpbmcgdGV4dCgpIGNvbnN0OworICAg
IFN0cmluZyBtYXJrdXAoKSBjb25zdDsKICAgICB2b2lkIHNldFRleHQoY29uc3QgU3RyaW5nJik7
CiAgICAgdm9pZCBzZXRNYXJrdXAoY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCBzZXRVUklMaXN0
KGNvbnN0IFN0cmluZyYpOwotICAgIFN0cmluZyB1cmxMYWJlbCgpOworICAgIFN0cmluZyB1cmxM
YWJlbCgpIGNvbnN0OwogICAgIHZvaWQgY2xlYXIoKTsKICAgICB2b2lkIGNsZWFyVGV4dCgpOwog
ICAgIHZvaWQgY2xlYXJNYXJrdXAoKTsKQEAgLTc0LDcgKzcyLDYgQEAgcHJpdmF0ZToKICAgICBT
dHJpbmcgbV91cmlMaXN0OwogICAgIFZlY3RvcjxTdHJpbmc+IG1fZmlsZW5hbWVzOwogICAgIEdS
ZWZQdHI8R2RrUGl4YnVmPiBtX2ltYWdlOwotICAgIEdSZWZQdHI8R2RrRHJhZ0NvbnRleHQ+IG1f
ZHJhZ0NvbnRleHQ7CiAgICAgUmVmUHRyPFJhbmdlPiBtX3JhbmdlOwogfTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0RyYWdJY29uLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9EcmFnSWNvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDc5MjFkMmQ0ZTQzNTMz
Zjg0YTA2ODY5MmQ2M2M1ZDcyOWMwYTkxZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9EcmFnSWNvbi5jcHAKQEAgLTAsMCArMSwxMTAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiRHJhZ0ljb24uaCIKKworI2luY2x1ZGUgPGd0ay9ndGsuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCisjaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKK3N0YXRpYyBn
Ym9vbGVhbiBkcmFnSWNvbldpbmRvd0RyYXdFdmVudENhbGxiYWNrKEd0a1dpZGdldCosIEdka0V2
ZW50RXhwb3NlKiBldmVudCwgRHJhZ0ljb24qIGljb24pCit7CisgICAgUmVmUHRyPGNhaXJvX3Q+
IGNvbnRleHQgPSBhZG9wdFJlZihnZGtfY2Fpcm9fY3JlYXRlKGV2ZW50LT53aW5kb3cpKTsKKyAg
ICBpY29uLT5kcmF3KGNvbnRleHQuZ2V0KCkpOworICAgIHJldHVybiBUUlVFOworfQorI2Vsc2UK
K3N0YXRpYyBnYm9vbGVhbiBkcmFnSWNvbldpbmRvd0RyYXdFdmVudENhbGxiYWNrKEd0a1dpZGdl
dCosIGNhaXJvX3QqIGNvbnRleHQsIERyYWdJY29uKiBpY29uKQoreworICAgIGlmICghZ2RrX2Nh
aXJvX2dldF9jbGlwX3JlY3RhbmdsZShjb250ZXh0LCAwKSkKKyAgICAgICAgcmV0dXJuIEZBTFNF
OworICAgIGljb24tPmRyYXcoY29udGV4dCk7CisgICAgcmV0dXJuIFRSVUU7Cit9CisjZW5kaWYg
Ly8gR1RLX0FQSV9WRVJTSU9OXzIKKworRHJhZ0ljb246OkRyYWdJY29uKCkKKyAgICA6IG1fd2lu
ZG93KGd0a193aW5kb3dfbmV3KEdUS19XSU5ET1dfUE9QVVApKQoreworI2lmZGVmIEdUS19BUElf
VkVSU0lPTl8yCisgICAgZ19zaWduYWxfY29ubmVjdChtX3dpbmRvdywgImV4cG9zZS1ldmVudCIs
IEdfQ0FMTEJBQ0soZHJhZ0ljb25XaW5kb3dEcmF3RXZlbnRDYWxsYmFjayksIHRoaXMpOworI2Vs
c2UKKyAgICBnX3NpZ25hbF9jb25uZWN0KG1fd2luZG93LCAiZHJhdyIsIEdfQ0FMTEJBQ0soZHJh
Z0ljb25XaW5kb3dEcmF3RXZlbnRDYWxsYmFjayksIHRoaXMpOworI2VuZGlmCisKKyAgICAvLyBU
aGlzIHN0cmF0ZWd5IG9yaWdpbmFsbHkgY29tZXMgZnJvbSBDaHJvbWl1bTogc3JjL2Nocm9tZS9i
cm93c2VyL2d0ay90YWJfY29udGVudHNfZHJhZ19zb3VyY2UuY2MKKyAgICBHZGtTY3JlZW4qIHNj
cmVlbiA9IGd0a193aWRnZXRfZ2V0X3NjcmVlbihtX3dpbmRvdyk7CisjaWZkZWYgR1RLX0FQSV9W
RVJTSU9OXzIKKyAgICBHZGtDb2xvcm1hcCogcmdiYSA9IGdka19zY3JlZW5fZ2V0X3JnYmFfY29s
b3JtYXAoc2NyZWVuKTsKKyAgICBpZiAocmdiYSkKKyAgICAgICAgZ3RrX3dpZGdldF9zZXRfY29s
b3JtYXAobV93aW5kb3csIHJnYmEpOworI2Vsc2UKKyAgICBHZGtWaXN1YWwqIHZpc3VhbCA9IGdk
a19zY3JlZW5fZ2V0X3JnYmFfdmlzdWFsKHNjcmVlbik7CisgICAgaWYgKCF2aXN1YWwpCisgICAg
ICAgIHZpc3VhbCA9IGdka19zY3JlZW5fZ2V0X3N5c3RlbV92aXN1YWwoc2NyZWVuKTsKKyAgICBn
dGtfd2lkZ2V0X3NldF92aXN1YWwobV93aW5kb3csIHZpc3VhbCk7CisjZW5kaWYgLy8gR1RLX0FQ
SV9WRVJTSU9OXzIKK30KKworRHJhZ0ljb246On5EcmFnSWNvbigpCit7CisgICAgZ3RrX3dpZGdl
dF9kZXN0cm95KG1fd2luZG93KTsKK30KKwordm9pZCBEcmFnSWNvbjo6ZHJhdyhjYWlyb190KiBj
b250ZXh0KQoreworICAgIGNhaXJvX3JlY3RhbmdsZShjb250ZXh0LCAwLCAwLAorICAgICAgICAg
ICAgICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF93aWR0aChtX2ltYWdlLmdldCgpKSwK
KyAgICAgICAgICAgICAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KG1faW1h
Z2UuZ2V0KCkpKTsKKyAgICBjYWlyb19zZXRfb3BlcmF0b3IoY29udGV4dCwgQ0FJUk9fT1BFUkFU
T1JfU09VUkNFKTsKKyAgICBjYWlyb19zZXRfc291cmNlX3N1cmZhY2UoY29udGV4dCwgbV9pbWFn
ZS5nZXQoKSwgMCwgMCk7CisgICAgY2Fpcm9fZmlsbChjb250ZXh0KTsKK30KKwordm9pZCBEcmFn
SWNvbjo6c2V0SW1hZ2UoY2Fpcm9fc3VyZmFjZV90KiBpbWFnZSkKK3sKKyAgICBBU1NFUlQoaW1h
Z2UpOworICAgIG1faW1hZ2UgPSBpbWFnZTsKKyAgICBtX2ltYWdlU2l6ZSA9IEludFNpemUoY2Fp
cm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgoaW1hZ2UpLCBjYWlyb19pbWFnZV9zdXJmYWNlX2dl
dF9oZWlnaHQoaW1hZ2UpKTsKKyAgICBndGtfd2luZG93X3Jlc2l6ZShHVEtfV0lORE9XKG1fd2lu
ZG93KSwgbV9pbWFnZVNpemUud2lkdGgoKSwgbV9pbWFnZVNpemUuaGVpZ2h0KCkpOworfQorCit2
b2lkIERyYWdJY29uOjp1c2VGb3JEcmFnKEdka0RyYWdDb250ZXh0KiBjb250ZXh0KQoreworICAg
IEludFBvaW50IGhvdHNwb3QobV9pbWFnZVNpemUpOworICAgIGhvdHNwb3Quc2NhbGUoMC41LCAw
LjUpOworICAgIHVzZUZvckRyYWcoY29udGV4dCwgaG90c3BvdCk7Cit9CisKK3ZvaWQgRHJhZ0lj
b246OnVzZUZvckRyYWcoR2RrRHJhZ0NvbnRleHQqIGNvbnRleHQsIGNvbnN0IEludFBvaW50JiBo
b3RzcG90KQoreworICAgIGd0a19kcmFnX3NldF9pY29uX3dpZGdldChjb250ZXh0LCBtX3dpbmRv
dywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG90c3BvdC54KCksIGhvdHNwb3QueSgp
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL0RyYWdJY29uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
RHJhZ0ljb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jMmM0MzYyZTg2ZjVjZmZhODk1NGIyZTMwYWVlN2M0NGU0
NzZjZjhhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0Ry
YWdJY29uLmgKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgSWdh
bGlhIFMuTC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGlj
ZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBT
b2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpZm5kZWYgRHJhZ0lj
b25faAorI2RlZmluZSBEcmFnSWNvbl9oCisKKyNpbmNsdWRlICJJbnRQb2ludC5oIgorI2luY2x1
ZGUgPFJlZlB0ckNhaXJvLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRHJhZ0lj
b24geworcHVibGljOgorICAgIERyYWdJY29uKCk7CisgICAgdmlydHVhbCB+RHJhZ0ljb24oKTsK
KworICAgIHZvaWQgZHJhdyhjYWlyb190Kik7CisgICAgdm9pZCBzZXRJbWFnZShjYWlyb19zdXJm
YWNlX3QqKTsKKyAgICB2b2lkIHVzZUZvckRyYWcoR2RrRHJhZ0NvbnRleHQqKTsKKyAgICB2b2lk
IHVzZUZvckRyYWcoR2RrRHJhZ0NvbnRleHQqLCBjb25zdCBJbnRQb2ludCYgaG90c3BvdCk7CisK
K3ByaXZhdGU6CisgICAgR3RrV2lkZ2V0KiBtX3dpbmRvdzsKKyAgICBSZWZQdHI8Y2Fpcm9fc3Vy
ZmFjZV90PiBtX2ltYWdlOworICAgIEludFNpemUgbV9pbWFnZVNpemU7Cit9OworCit9CisKKyNl
bmRpZiAvLyBEcmFnSWNvbl9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3Jl
U3VwcG9ydC9EcmFnQ2xpZW50R3RrLmNwcCBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBw
b3J0L0RyYWdDbGllbnRHdGsuY3BwCmluZGV4IDIwYzhkNzdiOWRiM2UzNTFkZjI1MzdiMDFjZmZh
M2MxN2UzYjdjNWIuLmJjODc0N2Q2YmM4ODEwMTdhMWM0YmQ2ZGUyYmVkMTNiYzg2N2M5NjUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0RyYWdDbGllbnRHdGsu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0RyYWdDbGllbnRHdGsu
Y3BwCkBAIC00MiwzOCArNDIsMTQgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVz
cGFjZSBXZWJLaXQgewogCi0jaWZkZWYgR1RLX0FQSV9WRVJTSU9OXzIKLXN0YXRpYyBnYm9vbGVh
biBkcmFnSWNvbldpbmRvd0RyYXdFdmVudENhbGxiYWNrKEd0a1dpZGdldCogd2lkZ2V0LCBHZGtF
dmVudEV4cG9zZSogZXZlbnQsIERyYWdDbGllbnQqIGNsaWVudCkKLXsKLSAgICBSZWZQdHI8Y2Fp
cm9fdD4gY29udGV4dCA9IGFkb3B0UmVmKGdka19jYWlyb19jcmVhdGUoZXZlbnQtPndpbmRvdykp
OwotICAgIGNsaWVudC0+ZHJhd0RyYWdJY29uV2luZG93KHdpZGdldCwgY29udGV4dC5nZXQoKSk7
Ci0gICAgcmV0dXJuIFRSVUU7Ci19Ci0jZWxzZQotc3RhdGljIGdib29sZWFuIGRyYWdJY29uV2lu
ZG93RHJhd0V2ZW50Q2FsbGJhY2soR3RrV2lkZ2V0KiB3aWRnZXQsIGNhaXJvX3QqIGNvbnRleHQs
IERyYWdDbGllbnQqIGNsaWVudCkKLXsKLSAgICBpZiAoIWdka19jYWlyb19nZXRfY2xpcF9yZWN0
YW5nbGUoY29udGV4dCwgMCkpCi0gICAgICAgIHJldHVybiBGQUxTRTsKLSAgICBjbGllbnQtPmRy
YXdEcmFnSWNvbldpbmRvdyh3aWRnZXQsIGNvbnRleHQpOwotICAgIHJldHVybiBUUlVFOwotfQot
I2VuZGlmIC8vIEdUS19BUElfVkVSU0lPTl8yCi0KIERyYWdDbGllbnQ6OkRyYWdDbGllbnQoV2Vi
S2l0V2ViVmlldyogd2ViVmlldykKICAgICA6IG1fd2ViVmlldyh3ZWJWaWV3KQogICAgICwgbV9z
dGFydFBvcygwLCAwKQotICAgICwgbV9kcmFnSWNvbldpbmRvdyhndGtfd2luZG93X25ldyhHVEtf
V0lORE9XX1BPUFVQKSkKIHsKLSNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgotICAgIGdfc2lnbmFs
X2Nvbm5lY3QobV9kcmFnSWNvbldpbmRvdywgImV4cG9zZS1ldmVudCIsIEdfQ0FMTEJBQ0soZHJh
Z0ljb25XaW5kb3dEcmF3RXZlbnRDYWxsYmFjayksIHRoaXMpOwotI2Vsc2UKLSAgICBnX3NpZ25h
bF9jb25uZWN0KG1fZHJhZ0ljb25XaW5kb3csICJkcmF3IiwgR19DQUxMQkFDSyhkcmFnSWNvbldp
bmRvd0RyYXdFdmVudENhbGxiYWNrKSwgdGhpcyk7Ci0jZW5kaWYKIH0KIAogRHJhZ0NsaWVudDo6
fkRyYWdDbGllbnQoKQogewotICAgIGd0a193aWRnZXRfZGVzdHJveShtX2RyYWdJY29uV2luZG93
KTsKIH0KIAogdm9pZCBEcmFnQ2xpZW50Ojp3aWxsUGVyZm9ybURyYWdEZXN0aW5hdGlvbkFjdGlv
bihEcmFnRGVzdGluYXRpb25BY3Rpb24sIERyYWdEYXRhKikKQEAgLTExMyw0NCArODksMTMgQEAg
dm9pZCBEcmFnQ2xpZW50OjpzdGFydERyYWcoRHJhZ0ltYWdlUmVmIGltYWdlLCBjb25zdCBJbnRQ
b2ludCYgZHJhZ0ltYWdlT3JpZ2luLAogICAgIC8vIGhhcHBlbiBpZiBhIGRyYWcgaXMgZm9sbG93
ZWQgdmVyeSBxdWlja2x5IGJ5IGFub3RoZXIgY2xpY2sgKGxpa2UgaW4gdGhlIERSVCkuCiAgICAg
d2ViVmlldy0+cHJpdi0+Y2xpY2tDb3VudGVyLnJlc2V0KCk7CiAKLSAgICAvLyBUaGlzIHN0cmF0
ZWd5IG9yaWdpbmFsbHkgY29tZXMgZnJvbSBDaHJvbWl1bToKLSAgICAvLyBzcmMvY2hyb21lL2Jy
b3dzZXIvZ3RrL3RhYl9jb250ZW50c19kcmFnX3NvdXJjZS5jYwogICAgIGlmIChpbWFnZSkgewot
ICAgICAgICBtX2RyYWdJbWFnZSA9IGltYWdlOwotICAgICAgICBJbnRTaXplIGltYWdlU2l6ZShj
YWlyb19pbWFnZV9zdXJmYWNlX2dldF93aWR0aChpbWFnZSksIGNhaXJvX2ltYWdlX3N1cmZhY2Vf
Z2V0X2hlaWdodChpbWFnZSkpOwotICAgICAgICBndGtfd2luZG93X3Jlc2l6ZShHVEtfV0lORE9X
KG1fZHJhZ0ljb25XaW5kb3cpLCBpbWFnZVNpemUud2lkdGgoKSwgaW1hZ2VTaXplLmhlaWdodCgp
KTsKLQotICAgICAgICBpZiAoIWd0a193aWRnZXRfZ2V0X3JlYWxpemVkKG1fZHJhZ0ljb25XaW5k
b3cpKSB7Ci0gICAgICAgICAgICBHZGtTY3JlZW4qIHNjcmVlbiA9IGd0a193aWRnZXRfZ2V0X3Nj
cmVlbihtX2RyYWdJY29uV2luZG93KTsKLSNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgotICAgICAg
ICAgICAgR2RrQ29sb3JtYXAqIHJnYmEgPSBnZGtfc2NyZWVuX2dldF9yZ2JhX2NvbG9ybWFwKHNj
cmVlbik7Ci0gICAgICAgICAgICBpZiAocmdiYSkKLSAgICAgICAgICAgICAgICBndGtfd2lkZ2V0
X3NldF9jb2xvcm1hcChtX2RyYWdJY29uV2luZG93LCByZ2JhKTsKLSNlbHNlCi0gICAgICAgICAg
ICBHZGtWaXN1YWwqIHZpc3VhbCA9IGdka19zY3JlZW5fZ2V0X3JnYmFfdmlzdWFsKHNjcmVlbik7
Ci0gICAgICAgICAgICBpZiAoIXZpc3VhbCkKLSAgICAgICAgICAgICAgICB2aXN1YWwgPSBnZGtf
c2NyZWVuX2dldF9zeXN0ZW1fdmlzdWFsKHNjcmVlbik7Ci0gICAgICAgICAgICBndGtfd2lkZ2V0
X3NldF92aXN1YWwobV9kcmFnSWNvbldpbmRvdywgdmlzdWFsKTsKLSNlbmRpZiAvLyBHVEtfQVBJ
X1ZFUlNJT05fMgotICAgICAgICB9Ci0KLSAgICAgICAgSW50U2l6ZSBvcmlnaW4gPSBldmVudFBv
cyAtIGRyYWdJbWFnZU9yaWdpbjsKLSAgICAgICAgZ3RrX2RyYWdfc2V0X2ljb25fd2lkZ2V0KGNv
bnRleHQsIG1fZHJhZ0ljb25XaW5kb3csCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBvcmlnaW4ud2lkdGgoKSwgb3JpZ2luLmhlaWdodCgpKTsKKyAgICAgICAgbV9kcmFnSWNvbi5z
ZXRJbWFnZShpbWFnZSk7CisgICAgICAgIG1fZHJhZ0ljb24udXNlRm9yRHJhZyhjb250ZXh0LCBJ
bnRQb2ludChldmVudFBvcyAtIGRyYWdJbWFnZU9yaWdpbikpOwogICAgIH0gZWxzZQogICAgICAg
ICBndGtfZHJhZ19zZXRfaWNvbl9kZWZhdWx0KGNvbnRleHQpOwogfQogCi12b2lkIERyYWdDbGll
bnQ6OmRyYXdEcmFnSWNvbldpbmRvdyhHdGtXaWRnZXQqIHdpZGdldCwgY2Fpcm9fdCogY29udGV4
dCkKLXsKLSAgICBjYWlyb19yZWN0YW5nbGUoY29udGV4dCwgMCwgMCwKLSAgICAgICAgICAgICAg
ICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgobV9kcmFnSW1hZ2UuZ2V0KCkpLAot
ICAgICAgICAgICAgICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQobV9kcmFn
SW1hZ2UuZ2V0KCkpKTsKLSAgICBjYWlyb19zZXRfb3BlcmF0b3IoY29udGV4dCwgQ0FJUk9fT1BF
UkFUT1JfU09VUkNFKTsKLSAgICBjYWlyb19zZXRfc291cmNlX3N1cmZhY2UoY29udGV4dCwgbV9k
cmFnSW1hZ2UuZ2V0KCksIDAsIDApOwotICAgIGNhaXJvX2ZpbGwoY29udGV4dCk7Ci19Ci0KIHZv
aWQgRHJhZ0NsaWVudDo6ZHJhZ0NvbnRyb2xsZXJEZXN0cm95ZWQoKQogewogICAgIGRlbGV0ZSB0
aGlzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHJhZ0Ns
aWVudEd0ay5oIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHJhZ0NsaWVudEd0
ay5oCmluZGV4IDQxMzVlYTM2ZGUzNmYzZWM2NjZjNWMzODMwM2ZhMjViYjc0NTA3ZGYuLjU1ODc2
YzQ2YTYyOGNiZDg0Mzk1YmZmZGJlMzFlNzA1MDhkMjNiNzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0RyYWdDbGllbnRHdGsuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EcmFnQ2xpZW50R3RrLmgKQEAgLTMxLDggKzMxLDggQEAK
ICNkZWZpbmUgRHJhZ0NsaWVudEd0a19oCiAKICNpbmNsdWRlICJEcmFnQ2xpZW50LmgiCisjaW5j
bHVkZSAiRHJhZ0ljb24uaCIKICNpbmNsdWRlICJHUmVmUHRyLmgiCi0jaW5jbHVkZSAiUmVmUHRy
Q2Fpcm8uaCIKIAogdHlwZWRlZiBzdHJ1Y3QgX1dlYktpdFdlYlZpZXcgV2ViS2l0V2ViVmlldzsK
IApAQCAtNTMsMTMgKzUzLDEwIEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiAgICAgICAgIHZpcnR1
YWwgdm9pZCBkcmFnQ29udHJvbGxlckRlc3Ryb3llZCgpOwogCi0gICAgICAgIHZvaWQgZHJhd0Ry
YWdJY29uV2luZG93KEd0a1dpZGdldCosIGNhaXJvX3QqKTsKLQogICAgIHByaXZhdGU6CiAgICAg
ICAgIFdlYktpdFdlYlZpZXcqIG1fd2ViVmlldzsKICAgICAgICAgV2ViQ29yZTo6SW50UG9pbnQg
bV9zdGFydFBvczsKLSAgICAgICAgR3RrV2lkZ2V0KiBtX2RyYWdJY29uV2luZG93OwotICAgICAg
ICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBtX2RyYWdJbWFnZTsKKyAgICAgICAgV2ViQ29yZTo6
RHJhZ0ljb24gbV9kcmFnSWNvbjsKICAgICB9OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggYjgwNzNmNTRj
YmUxMjYwYmU4YmM1MTY4NTUxN2ZmMjM1MTA1M2JhOC4uYWE5MDU2MzFiZGUxOWNjNmY3M2I1NDhl
NDAxMjViYzMwNzg1MjZkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ2IEBACisyMDExLTEwLTAz
ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4gYW5kIE1hcnRpbiBS
b2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHVEtdIEltcGxlbWVu
dCBkcmFnIGFuZCBkcm9wIHN1cHBvcnQgaW4gV2ViS2l0MgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjM3MDYKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOiBBZGQgbmV3IGZpbGVz
IHRvIGNvbXBpbGF0aW9uLgorICAgICAgICAqIFNoYXJlZC9ndGsvQXJndW1lbnRDb2RlcnNHdGsu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKENvcmVJUEM6OmVuY29kZUltYWdlKTogRW5jb2RlIGEgR2Rr
UGl4YnVmLgorICAgICAgICAoQ29yZUlQQzo6ZGVjb2RlSW1hZ2UpOiBEZWNvZGUgYSBHZGtQaXhi
dWYuCisgICAgICAgIChDb3JlSVBDOjplbmNvZGVEYXRhT2JqZWN0KTogRW5jb2RlIGEgRGF0YU9i
amVjdEd0ay4KKyAgICAgICAgKENvcmVJUEM6OmRlY29kZURhdGFPYmplY3QpOiBEZWNvZGUgYSBE
YXRhT2JqZWN0R3RrLgorICAgICAgICAoQ29yZUlQQzo6OjplbmNvZGUpOiBFbmNvZGUgRHJhZ0Rh
dGEuCisgICAgICAgIChDb3JlSVBDOjo6OmRlY29kZSk6IERlY29kZSBEcmFnRGF0YS4KKyAgICAg
ICAgKiBTaGFyZWQvZ3RrL0FyZ3VtZW50Q29kZXJzR3RrLmg6CisgICAgICAgICogVUlQcm9jZXNz
L0FQSS9ndGsvUGFnZUNsaWVudEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50
SW1wbDo6c3RhcnREcmFnKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xpZW50
SW1wbC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlLmNw
cDoKKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19iYXNlX2luaXQpOiBTZXQgdGhlIHZpZXcgYXMg
YSBwb3RlbnRpYWwgZHJvcCBkZXN0aW5hdGlvbi4KKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNl
RHJhZ0RhdGFHZXQpOiBBZGRlZCwgZGVsZWdhdGUgdG8gR3RrRHJhZ0FuZERyb3BIZWxwZXIuCisg
ICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZURyYWdFbmQpOiBEaXR0by4KKyAgICAgICAgKHdlYmtp
dFdlYlZpZXdCYXNlRHJhZ0RhdGFSZWNlaXZlZCk6IERpdHRvLgorICAgICAgICAod2Via2l0V2Vi
Vmlld0Jhc2VEcmFnRW50ZXIpOiBEaXR0by4KKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlRHJh
Z01vdGlvbik6IERpdHRvLgorICAgICAgICAoZG9EcmFnTGVhdmVMYXRlcik6IERpdHRvLgorICAg
ICAgICAod2Via2l0V2ViVmlld0Jhc2VEcmFnTGVhdmUpOiBEaXR0by4KKyAgICAgICAgKHdlYmtp
dFdlYlZpZXdCYXNlRHJhZ0Ryb3ApOiBEaXR0by4KKyAgICAgICAgKHdlYmtpdF93ZWJfdmlld19i
YXNlX2NsYXNzX2luaXQpOiBPdmVycmlkZSBHdGtXaWRnZXQgZHJhZyBhbmQgZHJvcCBtZXRob2Rz
LgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VTdGFydERyYWcpOiBDYWxscyBndGtfZHJhZ19i
ZWdpbigpIHRvIHN0YXJ0IGEgZHJhZyBvcGVyYXRpb24uCisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlLmg6IEFkZCB3ZWJraXRXZWJWaWV3QmFzZVN0
YXJ0RHJhZygpLgorICAgICAgICAqIFVJUHJvY2Vzcy9QYWdlQ2xpZW50Lmg6IEFkZCBzdGFydERy
YWcoKS4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdl
YktpdDo6V2ViUGFnZVByb3h5OjpwZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24pOiBTaGFyZSB0
aGUgUXQgdmVyc2lvbi4KKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6CisgICAg
ICAgICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbjoKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkRyYWdDbGllbnQuY3BwOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkRyYWdDbGllbnRHdGsuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6IEFkZCBkcmFnIHN1cHBvcnQg
Zm9yIEdUSysuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaDogRGl0dG8u
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW46IERpdHRv
LgorCiAyMDExLTEwLTA1ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgog
CiAgICAgICAgIHI5Njc3MCBicm9rZSBiaW5hcnkgY29tcGF0aWJpbGl0eSB3aXRoIFNhZmFyaQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvR05VbWFrZWZpbGUuYW0gYi9Tb3VyY2UvV2ViS2l0
Mi9HTlVtYWtlZmlsZS5hbQppbmRleCAyZGZhMTlkMTQ4NWM4Yzg5NTI3YjBlNmE1Yzg5MzMwNzMx
OGI3NTdjLi5mNmZiYmQwODlhZDAzNGE3YmQ2ZGIzYmYzNmYxNjQ1ZGM3YjZlZGU0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbQorKysgYi9Tb3VyY2UvV2ViS2l0Mi9H
TlVtYWtlZmlsZS5hbQpAQCAtMjgyLDYgKzI4Miw4IEBAIGxpYndlYmtpdDJndGtfQFdFQktJVEdU
S19BUElfTUFKT1JfVkVSU0lPTkBfQFdFQktJVEdUS19BUElfTUlOT1JfVkVSU0lPTkBfbGFfU09V
CiAJU291cmNlL1dlYktpdDIvU2hhcmVkL0ZvbnRTbW9vdGhpbmdMZXZlbC5oIFwKIAlTb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvY2Fpcm8vTGF5ZXJUcmVlQ29udGV4dENhaXJvLmNwcCBcCiAJU291cmNl
L1dlYktpdDIvU2hhcmVkL2NhaXJvL1NoYXJlYWJsZUJpdG1hcENhaXJvLmNwcCBcCisJU291cmNl
L1dlYktpdDIvU2hhcmVkL2d0ay9Bcmd1bWVudENvZGVyc0d0ay5oIFwKKwlTb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvZ3RrL0FyZ3VtZW50Q29kZXJzR3RrLmNwcCBcCiAJU291cmNlL1dlYktpdDIvU2hh
cmVkL2d0ay9OYXRpdmVXZWJLZXlib2FyZEV2ZW50R3RrLmNwcCBcCiAJU291cmNlL1dlYktpdDIv
U2hhcmVkL2d0ay9OYXRpdmVXZWJNb3VzZUV2ZW50R3RrLmNwcCBcCiAJU291cmNlL1dlYktpdDIv
U2hhcmVkL2d0ay9OYXRpdmVXZWJXaGVlbEV2ZW50R3RrLmNwcCBcCkBAIC03NDcsNiArNzQ5LDcg
QEAgbGlid2Via2l0Mmd0a19AV0VCS0lUR1RLX0FQSV9NQUpPUl9WRVJTSU9OQF9AV0VCS0lUR1RL
X0FQSV9NSU5PUl9WRVJTSU9OQF9sYV9TT1UKIAlTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1Jl
c291cmNlQ2FjaGUvV2ViUmVzb3VyY2VDYWNoZU1hbmFnZXIuaCBcCiAJU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9SZXNvdXJjZUNhY2hlL1dlYlJlc291cmNlQ2FjaGVNYW5hZ2VyLmNwcCBcCiAJ
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9ndGsvV2ViQ29udGV4dE1l
bnVDbGllbnRHdGsuY3BwIFwKKwlTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBw
b3J0L2d0ay9XZWJEcmFnQ2xpZW50R3RrLmNwcCBcCiAJU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9ndGsvV2ViRWRpdG9yQ2xpZW50R3RrLmNwcCBcCiAJU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9ndGsvV2ViRXJyb3JzR3RrLmNwcCBcCiAJ
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9ndGsvV2ViRnJhbWVOZXR3
b3JraW5nQ29udGV4dC5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsv
QXJndW1lbnRDb2RlcnNHdGsuY3BwIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9Bcmd1bWVu
dENvZGVyc0d0ay5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGNmYmQ0ZWM0YjZkMTg2NGJkNmFiZDViMDE4ZTY0
MTA0ZTFhNWZlNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsv
QXJndW1lbnRDb2RlcnNHdGsuY3BwCkBAIC0wLDAgKzEsMjE5IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJBcmd1bWVudENvZGVyc0d0ay5oIgorCisjaW5jbHVkZSAiU2hhcmVhYmxlQml0bWFw
LmgiCisjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJzLmgiCisjaW5jbHVkZSA8V2ViQ29y
ZS9EYXRhT2JqZWN0R3RrLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9EcmFnRGF0YS5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvR3JhcGhpY3NDb250ZXh0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9HdGtWZXJz
aW9uaW5nLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUNvbnRleHRDYWlyby5oPgorCit1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CisKK25hbWVz
cGFjZSBDb3JlSVBDIHsKKworc3RhdGljIHZvaWQgZW5jb2RlSW1hZ2UoQXJndW1lbnRFbmNvZGVy
KiBlbmNvZGVyLCBjb25zdCBHZGtQaXhidWYqIHBpeGJ1ZikKK3sKKyAgICBJbnRTaXplIGltYWdl
U2l6ZShnZGtfcGl4YnVmX2dldF93aWR0aChwaXhidWYpLCBnZGtfcGl4YnVmX2dldF9oZWlnaHQo
cGl4YnVmKSk7CisgICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0bWFwID0gU2hhcmVhYmxl
Qml0bWFwOjpjcmVhdGVTaGFyZWFibGUoaW1hZ2VTaXplLCBTaGFyZWFibGVCaXRtYXA6OlN1cHBv
cnRzQWxwaGEpOworICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQ+IGdyYXBoaWNzQ29udGV4dCA9
IGJpdG1hcC0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCk7CisKKyAgICBjYWlyb190KiBjciA9IGdy
YXBoaWNzQ29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCktPmNyKCk7CisgICAgZ2RrX2NhaXJvX3Nl
dF9zb3VyY2VfcGl4YnVmKGNyLCBwaXhidWYsIDAsIDApOworICAgIGNhaXJvX3BhaW50KGNyKTsK
KworICAgIFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlIGhhbmRsZTsKKyAgICBiaXRtYXAtPmNyZWF0
ZUhhbmRsZShoYW5kbGUpOworCisgICAgZW5jb2Rlci0+ZW5jb2RlKGhhbmRsZSk7Cit9CisKK3N0
YXRpYyBib29sIGRlY29kZUltYWdlKEFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgR1JlZlB0cjxH
ZGtQaXhidWY+JiBwaXhidWYpCit7CisgICAgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgaGFuZGxl
OworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGhhbmRsZSkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IFNoYXJlYWJsZUJpdG1h
cDo6Y3JlYXRlKGhhbmRsZSk7CisgICAgaWYgKCFiaXRtYXApCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSBiaXRtYXAtPmNyZWF0ZUltYWdlKCk7Cisg
ICAgaWYgKCFpbWFnZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgY2Fpcm9fc3VyZmFj
ZV90KiBzdXJmYWNlID0gaW1hZ2UtPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAg
aWYgKCFzdXJmYWNlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBwaXhidWYgPSBhZG9w
dEdSZWYoZ2RrX3BpeGJ1Zl9nZXRfZnJvbV9zdXJmYWNlKHN1cmZhY2UsIDAsIDAsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWlyb19pbWFnZV9z
dXJmYWNlX2dldF93aWR0aChzdXJmYWNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChzdXJm
YWNlKSkpOworICAgIGlmICghcGl4YnVmKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQgZW5jb2RlRGF0YU9iamVjdChBcmd1bWVudEVu
Y29kZXIqIGVuY29kZXIsIGNvbnN0IERhdGFPYmplY3RHdGsqIGRhdGFPYmplY3QpCit7CisgICAg
Ym9vbCBoYXNUZXh0ID0gZGF0YU9iamVjdC0+aGFzVGV4dCgpOworICAgIGVuY29kZXItPmVuY29k
ZShoYXNUZXh0KTsKKyAgICBpZiAoaGFzVGV4dCkKKyAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKGRh
dGFPYmplY3QtPnRleHQoKSk7CisKKyAgICBib29sIGhhc01hcmt1cCA9IGRhdGFPYmplY3QtPmhh
c01hcmt1cCgpOworICAgIGVuY29kZXItPmVuY29kZShoYXNNYXJrdXApOworICAgIGlmIChoYXNN
YXJrdXApCisgICAgICAgIGVuY29kZXItPmVuY29kZShkYXRhT2JqZWN0LT5tYXJrdXAoKSk7CisK
KyAgICBib29sIGhhc1VSTCA9IGRhdGFPYmplY3QtPmhhc1VSTCgpOworICAgIGVuY29kZXItPmVu
Y29kZShoYXNVUkwpOworICAgIGlmIChoYXNVUkwpCisgICAgICAgIGVuY29kZXItPmVuY29kZShk
YXRhT2JqZWN0LT51cmwoKS5zdHJpbmcoKSk7CisKKyAgICBib29sIGhhc1VSSUxpc3QgPSBkYXRh
T2JqZWN0LT5oYXNVUklMaXN0KCk7CisgICAgZW5jb2Rlci0+ZW5jb2RlKGhhc1VSSUxpc3QpOwor
ICAgIGlmIChoYXNVUklMaXN0KQorICAgICAgICBlbmNvZGVyLT5lbmNvZGUoZGF0YU9iamVjdC0+
dXJpTGlzdCgpKTsKKworICAgIGJvb2wgaGFzSW1hZ2UgPSBkYXRhT2JqZWN0LT5oYXNJbWFnZSgp
OworICAgIGVuY29kZXItPmVuY29kZShoYXNJbWFnZSk7CisgICAgaWYgKGhhc0ltYWdlKQorICAg
ICAgICBlbmNvZGVJbWFnZShlbmNvZGVyLCBkYXRhT2JqZWN0LT5pbWFnZSgpKTsKK30KKworc3Rh
dGljIGJvb2wgZGVjb2RlRGF0YU9iamVjdChBcmd1bWVudERlY29kZXIqIGRlY29kZXIsIFJlZlB0
cjxEYXRhT2JqZWN0R3RrPiYgZGF0YU9iamVjdCkKK3sKKyAgICBSZWZQdHI8RGF0YU9iamVjdEd0
az4gZGF0YSA9IERhdGFPYmplY3RHdGs6OmNyZWF0ZSgpOworCisgICAgYm9vbCBoYXNUZXh0Owor
ICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGhhc1RleHQpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgaWYgKGhhc1RleHQpIHsKKyAgICAgICAgU3RyaW5nIHRleHQ7CisgICAgICAgIGlmICgh
ZGVjb2Rlci0+ZGVjb2RlKHRleHQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICBkYXRhLT5zZXRUZXh0KHRleHQpOworICAgIH0KKworICAgIGJvb2wgaGFzTWFya3VwOworICAg
IGlmICghZGVjb2Rlci0+ZGVjb2RlKGhhc01hcmt1cCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBpZiAoaGFzTWFya3VwKSB7CisgICAgICAgIFN0cmluZyBtYXJrdXA7CisgICAgICAgIGlm
ICghZGVjb2Rlci0+ZGVjb2RlKG1hcmt1cCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIGRhdGEtPnNldE1hcmt1cChtYXJrdXApOworICAgIH0KKworICAgIGJvb2wgaGFzVVJM
OworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGhhc1VSTCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBpZiAoaGFzVVJMKSB7CisgICAgICAgIFN0cmluZyB1cmw7CisgICAgICAgIGlmICgh
ZGVjb2Rlci0+ZGVjb2RlKHVybCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IGRhdGEtPnNldFVSTChLVVJMKEtVUkwoKSwgdXJsKSwgU3RyaW5nKCkpOworICAgIH0KKworICAg
IGJvb2wgaGFzVVJJTGlzdDsKKyAgICBpZiAoIWRlY29kZXItPmRlY29kZShoYXNVUklMaXN0KSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChoYXNVUklMaXN0KSB7CisgICAgICAgIFN0
cmluZyB1cmlMaXN0OworICAgICAgICBpZiAoIWRlY29kZXItPmRlY29kZSh1cmlMaXN0KSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZGF0YS0+c2V0VVJJTGlzdCh1cmlMaXN0
KTsKKyAgICB9CisKKyAgICBib29sIGhhc0ltYWdlOworICAgIGlmICghZGVjb2Rlci0+ZGVjb2Rl
KGhhc0ltYWdlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChoYXNJbWFnZSkgewor
ICAgICAgICBHUmVmUHRyPEdka1BpeGJ1Zj4gaW1hZ2U7CisgICAgICAgIGlmICghZGVjb2RlSW1h
Z2UoZGVjb2RlciwgaW1hZ2UpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBk
YXRhLT5zZXRJbWFnZShpbWFnZS5nZXQoKSk7CisgICAgfQorCisgICAgZGF0YU9iamVjdCA9IGRh
dGE7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBBcmd1bWVudENvZGVyPERyYWdEYXRh
Pjo6ZW5jb2RlKEFyZ3VtZW50RW5jb2RlciogZW5jb2RlciwgY29uc3QgRHJhZ0RhdGEmIGRyYWdE
YXRhKQoreworICAgIGVuY29kZXItPmVuY29kZShkcmFnRGF0YS5jbGllbnRQb3NpdGlvbigpKTsK
KyAgICBlbmNvZGVyLT5lbmNvZGUoZHJhZ0RhdGEuZ2xvYmFsUG9zaXRpb24oKSk7CisgICAgZW5j
b2Rlci0+ZW5jb2RlKHN0YXRpY19jYXN0PHVpbnQ2NF90PihkcmFnRGF0YS5kcmFnZ2luZ1NvdXJj
ZU9wZXJhdGlvbk1hc2soKSkpOworICAgIGVuY29kZXItPmVuY29kZShzdGF0aWNfY2FzdDx1aW50
NjRfdD4oZHJhZ0RhdGEuZmxhZ3MoKSkpOworCisgICAgRGF0YU9iamVjdEd0ayogcGxhdGZvcm1E
YXRhID0gZHJhZ0RhdGEucGxhdGZvcm1EYXRhKCk7CisgICAgZW5jb2Rlci0+ZW5jb2RlKHN0YXRp
Y19jYXN0PGJvb2w+KHBsYXRmb3JtRGF0YSkpOworICAgIGlmIChwbGF0Zm9ybURhdGEpCisgICAg
ICAgIGVuY29kZURhdGFPYmplY3QoZW5jb2RlciwgcGxhdGZvcm1EYXRhKTsKK30KKworYm9vbCBB
cmd1bWVudENvZGVyPERyYWdEYXRhPjo6ZGVjb2RlKEFyZ3VtZW50RGVjb2RlciogZGVjb2Rlciwg
RHJhZ0RhdGEmIGRyYWdEYXRhKQoreworICAgIEludFBvaW50IGNsaWVudFBvc2l0aW9uOworICAg
IGlmICghZGVjb2Rlci0+ZGVjb2RlKGNsaWVudFBvc2l0aW9uKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgSW50UG9pbnQgZ2xvYmFsUG9zaXRpb247CisgICAgaWYgKCFkZWNvZGVyLT5k
ZWNvZGUoZ2xvYmFsUG9zaXRpb24pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB1aW50
NjRfdCBzb3VyY2VPcGVyYXRpb25NYXNrOworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKHNvdXJj
ZU9wZXJhdGlvbk1hc2spKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB1aW50NjRfdCBm
bGFnczsKKyAgICBpZiAoIWRlY29kZXItPmRlY29kZShmbGFncykpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGJvb2wgaGFzUGxhdGZvcm1EYXRhOworICAgIGlmICghZGVjb2Rlci0+ZGVj
b2RlKGhhc1BsYXRmb3JtRGF0YSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFJlZlB0
cjxEYXRhT2JqZWN0R3RrPiBwbGF0Zm9ybURhdGE7CisgICAgaWYgKGhhc1BsYXRmb3JtRGF0YSkg
eworICAgICAgICBpZiAoIWRlY29kZURhdGFPYmplY3QoZGVjb2RlciwgcGxhdGZvcm1EYXRhKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBkcmFnRGF0YSA9IERyYWdE
YXRhKHBsYXRmb3JtRGF0YS5yZWxlYXNlKCkubGVha1JlZigpLCBjbGllbnRQb3NpdGlvbiwgZ2xv
YmFsUG9zaXRpb24sIHN0YXRpY19jYXN0PERyYWdPcGVyYXRpb24+KHNvdXJjZU9wZXJhdGlvbk1h
c2spLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8RHJhZ0FwcGxpY2F0aW9u
RmxhZ3M+KGZsYWdzKSk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvU2hhcmVkL2d0ay9Bcmd1bWVudENvZGVyc0d0ay5oIGIvU291cmNlL1dl
YktpdDIvU2hhcmVkL2d0ay9Bcmd1bWVudENvZGVyc0d0ay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgyZjQ2ZDJk
ODliNTlkOWU2Y2IwYzJiMzRkMjhlMmY3NTE5NDA0MDUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL0FyZ3VtZW50Q29kZXJzR3RrLmgKQEAgLTAsMCArMSw0NSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZu
ZGVmIEFyZ3VtZW50Q29kZXJzR3RrX2gKKyNkZWZpbmUgQXJndW1lbnRDb2RlcnNHdGtfaAorCisj
aW5jbHVkZSAiQXJndW1lbnRDb2RlcnMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3Mg
RGF0YU9iamVjdEd0azsKK2NsYXNzIERyYWdEYXRhOworfQorCituYW1lc3BhY2UgQ29yZUlQQyB7
CisKK3RlbXBsYXRlPD4gc3RydWN0IEFyZ3VtZW50Q29kZXI8V2ViQ29yZTo6RHJhZ0RhdGE+IHsK
KyAgICBzdGF0aWMgdm9pZCBlbmNvZGUoQXJndW1lbnRFbmNvZGVyKiwgY29uc3QgV2ViQ29yZTo6
RHJhZ0RhdGEmKTsKKyAgICBzdGF0aWMgYm9vbCBkZWNvZGUoQXJndW1lbnREZWNvZGVyKiwgV2Vi
Q29yZTo6RHJhZ0RhdGEmKTsKK307CisKK30gLy8gbmFtZXNwYWNlIENvcmVJUEMKKworI2VuZGlm
IC8vIEFyZ3VtZW50Q29kZXJzR3RrX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmNwcAppbmRleCA5YTNlYmJiZDhhOWYzZmM2ZTZiNzQy
OTI3OGQzMzk2NDkwMTRlMzNiLi5mMDNiYWVkMmFlMDRjNjFlNDU5YTE1ZmNkZDc3ZTZjMGYwODEw
MjMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xp
ZW50SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNs
aWVudEltcGwuY3BwCkBAIC0yODUsNCArMjg1LDkgQEAgdm9pZCBQYWdlQ2xpZW50SW1wbDo6Y291
bnRTdHJpbmdNYXRjaGVzSW5DdXN0b21SZXByZXNlbnRhdGlvbihjb25zdCBTdHJpbmcmLCBGaW4K
ICAgICBub3RJbXBsZW1lbnRlZCgpOwogfQogCit2b2lkIFBhZ2VDbGllbnRJbXBsOjpzdGFydERy
YWcoY29uc3QgV2ViQ29yZTo6RHJhZ0RhdGEmIGRyYWdEYXRhLCBQYXNzUmVmUHRyPFNoYXJlYWJs
ZUJpdG1hcD4gZHJhZ0ltYWdlKQoreworICAgIHdlYmtpdFdlYlZpZXdCYXNlU3RhcnREcmFnKFdF
QktJVF9XRUJfVklFV19CQVNFKG1fdmlld1dpZGdldCksIGRyYWdEYXRhLCBkcmFnSW1hZ2UpOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5oCmluZGV4IDNhMzk5MDYwMWY3NWQ4ZWQ1MGE5ODA5
ODQ3OWIxYjg5NjA2YTk3ZjAuLmFjZDMyN2ViMzQ0NzU0YjgxMzY0ZGQxYzA0ZjZkZTdjMWIxMDAz
ZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGll
bnRJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVu
dEltcGwuaApAQCAtODcsNiArODcsNyBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBnZXRF
ZGl0b3JDb21tYW5kc0ZvcktleUV2ZW50KGNvbnN0IE5hdGl2ZVdlYktleWJvYXJkRXZlbnQmLCBj
b25zdCBBdG9taWNTdHJpbmcmLCBWZWN0b3I8V1RGOjpTdHJpbmc+Jik7CiAgICAgdmlydHVhbCB2
b2lkIGZpbmRTdHJpbmdJbkN1c3RvbVJlcHJlc2VudGF0aW9uKGNvbnN0IFN0cmluZyYsIEZpbmRP
cHRpb25zLCB1bnNpZ25lZCk7CiAgICAgdmlydHVhbCB2b2lkIGNvdW50U3RyaW5nTWF0Y2hlc0lu
Q3VzdG9tUmVwcmVzZW50YXRpb24oY29uc3QgU3RyaW5nJiwgRmluZE9wdGlvbnMsIHVuc2lnbmVk
KTsKKyAgICB2aXJ0dWFsIHZvaWQgc3RhcnREcmFnKGNvbnN0IFdlYkNvcmU6OkRyYWdEYXRhJiwg
UGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGRyYWdJbWFnZSk7CiAKICNpZiBVU0UoQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcpCiAgICAgdmlydHVhbCB2b2lkIHBhZ2VEaWRFbnRlckFjY2VsZXJh
dGVkQ29tcG9zaXRpbmcoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFdlYlZpZXcuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0V2ViVmlldy5jcHAKaW5kZXggMmMzM2YzMzdjOTQyM2YxZTAyMzgzMmQxNDUyMzNk
YTE5ZjQ3MmJjYi4uYzk4OWZiMGE4YThmOWNkNWI3MmZjMWRmMGYzMDFiZjkzNDM2MGFlNCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5j
cHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlldy5j
cHAKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlICJXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUu
aCIKICNpbmNsdWRlICJXZWJLaXRQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5Lmgi
CisjaW5jbHVkZSA8V2ViQ29yZS9EcmFnSWNvbi5oPgogI2luY2x1ZGUgPFdlYktpdDIvV0tCYXNl
Lmg+CiAjaW5jbHVkZSA8V2ViS2l0Mi9XS1JldGFpblB0ci5oPgogI2luY2x1ZGUgPFdlYktpdDIv
V0tVUkwuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFdlYlZpZXdCYXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dl
YktpdFdlYlZpZXdCYXNlLmNwcAppbmRleCAwOTFlYzRlNDY0ZTQ0NjgxMzIzZGMzYTQ2ZTVhYmNk
ODgwZGI5N2E2Li42ZGRlNjIzMjgwOTAwNTc0NTRhNzllZjVmODZlYTcxMjk3NDZjZmFlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFz
ZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmll
d0Jhc2UuY3BwCkBAIC0yOCwyMCArMjgsMjkgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJXZWJLaXRXZWJWaWV3QmFzZS5oIgogCisjaW5jbHVkZSAiQ2xpcGJvYXJkR3RrLmgiCisj
aW5jbHVkZSAiQ2xpcGJvYXJkVXRpbGl0aWVzR3RrLmgiCisjaW5jbHVkZSAiRGF0YU9iamVjdEd0
ay5oIgorI2luY2x1ZGUgIkRyYWdEYXRhLmgiCiAjaW5jbHVkZSAiRHJhd2luZ0FyZWFQcm94eUlt
cGwuaCIKICNpbmNsdWRlICJHT3duUHRyR3RrLmgiCiAjaW5jbHVkZSAiR3RrQ2xpY2tDb3VudGVy
LmgiCisjaW5jbHVkZSAiR3RrVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiR3RrVmVyc2lvbmluZy5o
IgogI2luY2x1ZGUgIk5hdGl2ZVdlYktleWJvYXJkRXZlbnQuaCIKICNpbmNsdWRlICJOYXRpdmVX
ZWJNb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiTmF0aXZlV2ViV2hlZWxFdmVudC5oIgogI2luY2x1
ZGUgIk5vdEltcGxlbWVudGVkLmgiCiAjaW5jbHVkZSAiUGFnZUNsaWVudEltcGwuaCIKKyNpbmNs
dWRlICJQYXN0ZWJvYXJkSGVscGVyLmgiCiAjaW5jbHVkZSAiUmVmUHRyQ2Fpcm8uaCIKICNpbmNs
dWRlICJXZWJDb250ZXh0LmgiCiAjaW5jbHVkZSAiV2ViRXZlbnRGYWN0b3J5LmgiCiAjaW5jbHVk
ZSAiV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViUGFnZVByb3h5Lmgi
CisjaW5jbHVkZSA8V2ViQ29yZS9EcmFnSWNvbi5oPgorI2luY2x1ZGUgPFdlYkNvcmUvR3RrRHJh
Z0FuZERyb3BIZWxwZXIuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1JlZlB0ckNhaXJvLmg+CiAjaW5j
bHVkZSA8V2ViQ29yZS9SZWdpb24uaD4KICNpbmNsdWRlIDxXZWJLaXQyL1dLQ29udGV4dC5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KQEAgLTU3LDYgKzY2LDggQEAgc3RydWN0IF9X
ZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUgewogICAgIEd0a0lNQ29udGV4dCogaW1Db250ZXh0Owog
ICAgIEd0a0NsaWNrQ291bnRlciBjbGlja0NvdW50ZXI7CiAgICAgQ1N0cmluZyB0b29sdGlwVGV4
dDsKKyAgICBHdGtEcmFnQW5kRHJvcEhlbHBlciBkcmFnQW5kRHJvcEhlbHBlcjsKKyAgICBEcmFn
SWNvbiBkcmFnSWNvbjsKIH07CiAKIEdfREVGSU5FX1RZUEUoV2ViS2l0V2ViVmlld0Jhc2UsIHdl
YmtpdF93ZWJfdmlld19iYXNlLCBHVEtfVFlQRV9DT05UQUlORVIpCkBAIC0xMzIsMTEgKzE0Mywx
OCBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfYmFzZV9pbml0KFdlYktpdFdlYlZpZXdC
YXNlKiB3ZWJraXRXZWJWaWV3QmFzZSkKICAgICBwcml2LT5pc1BhZ2VBY3RpdmUgPSBUUlVFOwog
ICAgIHByaXYtPnNob3VsZEZvcndhcmROZXh0S2V5RXZlbnQgPSBGQUxTRTsKIAotICAgIGd0a193
aWRnZXRfc2V0X2RvdWJsZV9idWZmZXJlZChHVEtfV0lER0VUKHdlYmtpdFdlYlZpZXdCYXNlKSwg
RkFMU0UpOwotICAgIGd0a193aWRnZXRfc2V0X2Nhbl9mb2N1cyhHVEtfV0lER0VUKHdlYmtpdFdl
YlZpZXdCYXNlKSwgVFJVRSk7CisgICAgR3RrV2lkZ2V0KiB2aWV3V2lkZ2V0ID0gR1RLX1dJREdF
VCh3ZWJraXRXZWJWaWV3QmFzZSk7CisgICAgZ3RrX3dpZGdldF9zZXRfZG91YmxlX2J1ZmZlcmVk
KHZpZXdXaWRnZXQsIEZBTFNFKTsKKyAgICBndGtfd2lkZ2V0X3NldF9jYW5fZm9jdXModmlld1dp
ZGdldCwgVFJVRSk7CiAgICAgcHJpdi0+aW1Db250ZXh0ID0gZ3RrX2ltX211bHRpY29udGV4dF9u
ZXcoKTsKIAotICAgIHByaXYtPnBhZ2VDbGllbnQgPSBQYWdlQ2xpZW50SW1wbDo6Y3JlYXRlKEdU
S19XSURHRVQod2Via2l0V2ViVmlld0Jhc2UpKTsKKyAgICBwcml2LT5wYWdlQ2xpZW50ID0gUGFn
ZUNsaWVudEltcGw6OmNyZWF0ZSh2aWV3V2lkZ2V0KTsKKworICAgIHByaXYtPmRyYWdBbmREcm9w
SGVscGVyLnNldFdpZGdldCh2aWV3V2lkZ2V0KTsKKworICAgIGd0a19kcmFnX2Rlc3Rfc2V0KHZp
ZXdXaWRnZXQsIHN0YXRpY19jYXN0PEd0a0Rlc3REZWZhdWx0cz4oMCksIDAsIDAsCisgICAgICAg
ICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8R2RrRHJhZ0FjdGlvbj4oR0RLX0FDVElPTl9DT1BZ
IHwgR0RLX0FDVElPTl9NT1ZFIHwgR0RLX0FDVElPTl9MSU5LIHwgR0RLX0FDVElPTl9QUklWQVRF
KSk7CisgICAgZ3RrX2RyYWdfZGVzdF9zZXRfdGFyZ2V0X2xpc3Qodmlld1dpZGdldCwgUGFzdGVi
b2FyZEhlbHBlcjo6ZGVmYXVsdFBhc3RlYm9hcmRIZWxwZXIoKS0+dGFyZ2V0TGlzdCgpKTsKIH0K
IAogc3RhdGljIGdib29sZWFuIHdlYmtpdFdlYlZpZXdCYXNlRHJhdyhHdGtXaWRnZXQqIHdpZGdl
dCwgY2Fpcm9fdCogY3IpCkBAIC0yOTMsNiArMzExLDgyIEBAIHN0YXRpYyBnYm9vbGVhbiB3ZWJr
aXRXZWJWaWV3QmFzZVF1ZXJ5VG9vbHRpcChHdGtXaWRnZXQqIHdpZGdldCwgZ2ludCB4LCBnaW50
IHksCiAgICAgcmV0dXJuIFRSVUU7CiB9CiAKK3N0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdCYXNl
RHJhZ0RhdGFHZXQoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0RyYWdDb250ZXh0KiBjb250ZXh0LCBH
dGtTZWxlY3Rpb25EYXRhKiBzZWxlY3Rpb25EYXRhLCBndWludCBpbmZvLCBndWludCB0aW1lKQor
eworICAgIFdFQktJVF9XRUJfVklFV19CQVNFKHdpZGdldCktPnByaXYtPmRyYWdBbmREcm9wSGVs
cGVyLmhhbmRsZUdldERyYWdEYXRhKGNvbnRleHQsIHNlbGVjdGlvbkRhdGEsIGluZm8pOworfQor
CitzdGF0aWMgdm9pZCB3ZWJraXRXZWJWaWV3QmFzZURyYWdFbmQoR3RrV2lkZ2V0KiB3aWRnZXQs
IEdka0RyYWdDb250ZXh0KiBjb250ZXh0KQoreworICAgIFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJW
aWV3QmFzZSA9IFdFQktJVF9XRUJfVklFV19CQVNFKHdpZGdldCk7CisgICAgaWYgKCF3ZWJWaWV3
QmFzZS0+cHJpdi0+ZHJhZ0FuZERyb3BIZWxwZXIuaGFuZGxlRHJhZ0VuZChjb250ZXh0KSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgR2RrRGV2aWNlKiBkZXZpY2UgPSBnZGtfZHJhZ19jb250ZXh0
X2dldF9kZXZpY2UoY29udGV4dCk7CisgICAgaW50IHggPSAwLCB5ID0gMDsKKyAgICBnZGtfZGV2
aWNlX2dldF93aW5kb3dfYXRfcG9zaXRpb24oZGV2aWNlLCAmeCwgJnkpOworICAgIGludCB4Um9v
dCA9IDAsIHlSb290ID0gMDsKKyAgICBnZGtfZGV2aWNlX2dldF9wb3NpdGlvbihkZXZpY2UsIDAs
ICZ4Um9vdCwgJnlSb290KTsKKyAgICB3ZWJWaWV3QmFzZS0+cHJpdi0+cGFnZVByb3h5LT5kcmFn
RW5kZWQoSW50UG9pbnQoeCwgeSksIEludFBvaW50KHhSb290LCB5Um9vdCksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdka0RyYWdBY3Rpb25Ub0RyYWdPcGVy
YXRpb24oZ2RrX2RyYWdfY29udGV4dF9nZXRfc2VsZWN0ZWRfYWN0aW9uKGNvbnRleHQpKSk7Cit9
CisKK3N0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlRHJhZ0RhdGFSZWNlaXZlZChHdGtXaWRn
ZXQqIHdpZGdldCwgR2RrRHJhZ0NvbnRleHQqIGNvbnRleHQsIGdpbnQgeCwgZ2ludCB5LCBHdGtT
ZWxlY3Rpb25EYXRhKiBzZWxlY3Rpb25EYXRhLCBndWludCBpbmZvLCBndWludCB0aW1lKQorewor
ICAgIFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJWaWV3QmFzZSA9IFdFQktJVF9XRUJfVklFV19CQVNF
KHdpZGdldCk7CisgICAgT3duUHRyPERyYWdEYXRhPiBkcmFnRGF0YSh3ZWJWaWV3QmFzZS0+cHJp
di0+ZHJhZ0FuZERyb3BIZWxwZXIuaGFuZGxlRHJhZ0RhdGFSZWNlaXZlZChjb250ZXh0LCBzZWxl
Y3Rpb25EYXRhLCBpbmZvKSk7CisgICAgaWYgKCFkcmFnRGF0YSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgd2ViVmlld0Jhc2UtPnByaXYtPnBhZ2VQcm94eS0+cmVzZXREcmFnT3BlcmF0aW9uKCk7
CisgICAgd2ViVmlld0Jhc2UtPnByaXYtPnBhZ2VQcm94eS0+ZHJhZ0VudGVyZWQoZHJhZ0RhdGEu
Z2V0KCkpOworICAgIERyYWdPcGVyYXRpb24gb3BlcmF0aW9uID0gd2ViVmlld0Jhc2UtPnByaXYt
PnBhZ2VQcm94eS0+ZHJhZ09wZXJhdGlvbigpOworICAgIGdka19kcmFnX3N0YXR1cyhjb250ZXh0
LCBkcmFnT3BlcmF0aW9uVG9TaW5nbGVHZGtEcmFnQWN0aW9uKG9wZXJhdGlvbiksIHRpbWUpOwor
fQorCitzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0V2ViVmlld0Jhc2VEcmFnTW90aW9uKEd0a1dpZGdl
dCogd2lkZ2V0LCBHZGtEcmFnQ29udGV4dCogY29udGV4dCwgZ2ludCB4LCBnaW50IHksIGd1aW50
IHRpbWUpCit7CisgICAgV2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZpZXdCYXNlID0gV0VCS0lUX1dF
Ql9WSUVXX0JBU0Uod2lkZ2V0KTsKKyAgICBPd25QdHI8RHJhZ0RhdGE+IGRyYWdEYXRhKHdlYlZp
ZXdCYXNlLT5wcml2LT5kcmFnQW5kRHJvcEhlbHBlci5oYW5kbGVEcmFnTW90aW9uKGNvbnRleHQs
IEludFBvaW50KHgsIHkpLCB0aW1lKSk7CisgICAgaWYgKCFkcmFnRGF0YSkKKyAgICAgICAgcmV0
dXJuIFRSVUU7CisKKyAgICB3ZWJWaWV3QmFzZS0+cHJpdi0+cGFnZVByb3h5LT5kcmFnVXBkYXRl
ZChkcmFnRGF0YS5nZXQoKSk7CisgICAgRHJhZ09wZXJhdGlvbiBvcGVyYXRpb24gPSB3ZWJWaWV3
QmFzZS0+cHJpdi0+cGFnZVByb3h5LT5kcmFnT3BlcmF0aW9uKCk7CisgICAgZ2RrX2RyYWdfc3Rh
dHVzKGNvbnRleHQsIGRyYWdPcGVyYXRpb25Ub1NpbmdsZUdka0RyYWdBY3Rpb24ob3BlcmF0aW9u
KSwgdGltZSk7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKK3N0YXRpYyB2b2lkIGRyYWdFeGl0ZWRD
YWxsYmFjayhHdGtXaWRnZXQqIHdpZGdldCwgRHJhZ0RhdGEqIGRyYWdEYXRhLCBib29sIGRyb3BI
YXBwZW5lZCkKK3sKKyAgICAvLyBEb24ndCBjYWxsIGRyYWdFeGl0ZWQgaWYgd2UgaGF2ZSBqdXN0
IHJlY2VpdmVkIGEgZHJhZy1kcm9wIHNpZ25hbC4gVGhpcworICAgIC8vIGhhcHBlbnMgaW4gdGhl
IGNhc2Ugb2YgYSBzdWNjZXNzZnVsIGRyb3Agb250byB0aGUgdmlldy4KKyAgICBpZiAoZHJvcEhh
cHBlbmVkKQorICAgICAgICByZXR1cm47CisKKyAgICBXZWJLaXRXZWJWaWV3QmFzZSogd2ViVmll
d0Jhc2UgPSBXRUJLSVRfV0VCX1ZJRVdfQkFTRSh3aWRnZXQpOworICAgIHdlYlZpZXdCYXNlLT5w
cml2LT5wYWdlUHJveHktPmRyYWdFeGl0ZWQoZHJhZ0RhdGEpOworICAgIHdlYlZpZXdCYXNlLT5w
cml2LT5wYWdlUHJveHktPnJlc2V0RHJhZ09wZXJhdGlvbigpOworfQorCitzdGF0aWMgdm9pZCB3
ZWJraXRXZWJWaWV3QmFzZURyYWdMZWF2ZShHdGtXaWRnZXQqIHdpZGdldCwgR2RrRHJhZ0NvbnRl
eHQqIGNvbnRleHQsIGd1aW50IHRpbWUpCit7CisgICAgV0VCS0lUX1dFQl9WSUVXX0JBU0Uod2lk
Z2V0KS0+cHJpdi0+ZHJhZ0FuZERyb3BIZWxwZXIuaGFuZGxlRHJhZ0xlYXZlKGNvbnRleHQsIGRy
YWdFeGl0ZWRDYWxsYmFjayk7Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRXZWJWaWV3QmFz
ZURyYWdEcm9wKEd0a1dpZGdldCogd2lkZ2V0LCBHZGtEcmFnQ29udGV4dCogY29udGV4dCwgZ2lu
dCB4LCBnaW50IHksIGd1aW50IHRpbWUpCit7CisgICAgV2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZp
ZXdCYXNlID0gV0VCS0lUX1dFQl9WSUVXX0JBU0Uod2lkZ2V0KTsKKyAgICBPd25QdHI8RHJhZ0Rh
dGE+IGRyYWdEYXRhKHdlYlZpZXdCYXNlLT5wcml2LT5kcmFnQW5kRHJvcEhlbHBlci5oYW5kbGVE
cmFnRHJvcChjb250ZXh0LCBJbnRQb2ludCh4LCB5KSkpOworICAgIGlmICghZHJhZ0RhdGEpCisg
ICAgICAgIHJldHVybiBGQUxTRTsKKworICAgIFNhbmRib3hFeHRlbnNpb246OkhhbmRsZSBoYW5k
bGU7CisgICAgd2ViVmlld0Jhc2UtPnByaXYtPnBhZ2VQcm94eS0+cGVyZm9ybURyYWcoZHJhZ0Rh
dGEuZ2V0KCksIFN0cmluZygpLCBoYW5kbGUpOworICAgIGd0a19kcmFnX2ZpbmlzaChjb250ZXh0
LCBUUlVFLCBGQUxTRSwgdGltZSk7CisgICAgcmV0dXJuIFRSVUU7Cit9CisKIHN0YXRpYyB2b2lk
IHdlYmtpdF93ZWJfdmlld19iYXNlX2NsYXNzX2luaXQoV2ViS2l0V2ViVmlld0Jhc2VDbGFzcyog
d2Via2l0V2ViVmlld0Jhc2VDbGFzcykKIHsKICAgICBHdGtXaWRnZXRDbGFzcyogd2lkZ2V0Q2xh
c3MgPSBHVEtfV0lER0VUX0NMQVNTKHdlYmtpdFdlYlZpZXdCYXNlQ2xhc3MpOwpAQCAtMzA4LDYg
KzQwMiwxMiBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX3ZpZXdfYmFzZV9jbGFzc19pbml0KFdl
YktpdFdlYlZpZXdCYXNlQ2xhc3MqIHdlYmtpdFdlYlZpZQogICAgIHdpZGdldENsYXNzLT5zY3Jv
bGxfZXZlbnQgPSB3ZWJraXRXZWJWaWV3QmFzZVNjcm9sbEV2ZW50OwogICAgIHdpZGdldENsYXNz
LT5tb3Rpb25fbm90aWZ5X2V2ZW50ID0gd2Via2l0V2ViVmlld0Jhc2VNb3Rpb25Ob3RpZnlFdmVu
dDsKICAgICB3aWRnZXRDbGFzcy0+cXVlcnlfdG9vbHRpcCA9IHdlYmtpdFdlYlZpZXdCYXNlUXVl
cnlUb29sdGlwOworICAgIHdpZGdldENsYXNzLT5kcmFnX2VuZCA9IHdlYmtpdFdlYlZpZXdCYXNl
RHJhZ0VuZDsKKyAgICB3aWRnZXRDbGFzcy0+ZHJhZ19kYXRhX2dldCA9IHdlYmtpdFdlYlZpZXdC
YXNlRHJhZ0RhdGFHZXQ7CisgICAgd2lkZ2V0Q2xhc3MtPmRyYWdfbW90aW9uID0gd2Via2l0V2Vi
Vmlld0Jhc2VEcmFnTW90aW9uOworICAgIHdpZGdldENsYXNzLT5kcmFnX2xlYXZlID0gd2Via2l0
V2ViVmlld0Jhc2VEcmFnTGVhdmU7CisgICAgd2lkZ2V0Q2xhc3MtPmRyYWdfZHJvcCA9IHdlYmtp
dFdlYlZpZXdCYXNlRHJhZ0Ryb3A7CisgICAgd2lkZ2V0Q2xhc3MtPmRyYWdfZGF0YV9yZWNlaXZl
ZCA9IHdlYmtpdFdlYlZpZXdCYXNlRHJhZ0RhdGFSZWNlaXZlZDsKIAogICAgIEdPYmplY3RDbGFz
cyogZ29iamVjdENsYXNzID0gR19PQkpFQ1RfQ0xBU1Mod2Via2l0V2ViVmlld0Jhc2VDbGFzcyk7
CiAgICAgZ29iamVjdENsYXNzLT5maW5hbGl6ZSA9IHdlYmtpdFdlYlZpZXdCYXNlRmluYWxpemU7
CkBAIC0zNTUsNiArNDU1LDMzIEBAIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VTZXRUb29sdGlwVGV4
dChXZWJLaXRXZWJWaWV3QmFzZSogd2ViVmlld0Jhc2UsIGNvbnN0IGNoYXIqCiAgICAgZ3RrX3dp
ZGdldF90cmlnZ2VyX3Rvb2x0aXBfcXVlcnkoR1RLX1dJREdFVCh3ZWJWaWV3QmFzZSkpOwogfQog
Cit2b2lkIHdlYmtpdFdlYlZpZXdCYXNlU3RhcnREcmFnKFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJW
aWV3QmFzZSwgY29uc3QgRHJhZ0RhdGEmIGRyYWdEYXRhLCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJp
dG1hcD4gZHJhZ0ltYWdlKQoreworICAgIFdlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZSogcHJpdiA9
IHdlYlZpZXdCYXNlLT5wcml2OworCisgICAgUmVmUHRyPERhdGFPYmplY3RHdGs+IGRhdGFPYmpl
Y3QoZHJhZ0RhdGEucGxhdGZvcm1EYXRhKCkpOworICAgIEdSZWZQdHI8R3RrVGFyZ2V0TGlzdD4g
dGFyZ2V0TGlzdChQYXN0ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpLT50
YXJnZXRMaXN0Rm9yRGF0YU9iamVjdChkYXRhT2JqZWN0LmdldCgpKSk7CisgICAgR093blB0cjxH
ZGtFdmVudD4gY3VycmVudEV2ZW50KGd0a19nZXRfY3VycmVudF9ldmVudCgpKTsKKyAgICBHZGtE
cmFnQ29udGV4dCogY29udGV4dCA9IGd0a19kcmFnX2JlZ2luKEdUS19XSURHRVQod2ViVmlld0Jh
c2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0
TGlzdC5nZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRyYWdPcGVyYXRpb25Ub0dka0RyYWdBY3Rpb25zKGRyYWdEYXRhLmRyYWdnaW5nU291cmNlT3Bl
cmF0aW9uTWFzaygpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDEsIC8qIGJ1dHRvbiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY3VycmVudEV2ZW50LmdldCgpKTsKKyAgICBwcml2LT5kcmFnQW5kRHJvcEhlbHBl
ci5zdGFydGVkRHJhZyhjb250ZXh0LCBkYXRhT2JqZWN0LmdldCgpKTsKKworCisgICAgLy8gQSBk
cmFnIHN0YXJ0aW5nIHNob3VsZCBwcmV2ZW50IGEgZG91YmxlLWNsaWNrIGZyb20gaGFwcGVuaW5n
LiBUaGlzIG1pZ2h0CisgICAgLy8gaGFwcGVuIGlmIGEgZHJhZyBpcyBmb2xsb3dlZCB2ZXJ5IHF1
aWNrbHkgYnkgYW5vdGhlciBjbGljayAobGlrZSBpbiB0aGUgRFJUKS4KKyAgICBwcml2LT5jbGlj
a0NvdW50ZXIucmVzZXQoKTsKKworICAgIGlmIChkcmFnSW1hZ2UpIHsKKyAgICAgICAgUmVmUHRy
PGNhaXJvX3N1cmZhY2VfdD4gaW1hZ2UoZHJhZ0ltYWdlLT5jcmVhdGVDYWlyb1N1cmZhY2UoKSk7
CisgICAgICAgIHByaXYtPmRyYWdJY29uLnNldEltYWdlKGltYWdlLmdldCgpKTsKKyAgICAgICAg
cHJpdi0+ZHJhZ0ljb24udXNlRm9yRHJhZyhjb250ZXh0KTsKKyAgICB9IGVsc2UKKyAgICAgICAg
Z3RrX2RyYWdfc2V0X2ljb25fZGVmYXVsdChjb250ZXh0KTsKK30KKwogdm9pZCB3ZWJraXRXZWJW
aWV3QmFzZUZvcndhcmROZXh0S2V5RXZlbnQoV2ViS2l0V2ViVmlld0Jhc2UqIHdlYmtpdFdlYlZp
ZXdCYXNlKQogewogICAgIHdlYmtpdFdlYlZpZXdCYXNlLT5wcml2LT5zaG91bGRGb3J3YXJkTmV4
dEtleUV2ZW50ID0gVFJVRTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlLmgKaW5kZXggYTM5MDY4ZmM2Mjky
YmIzZTlmNzlhNzE2ZDE4YzkwZjNmMTkyYWIwMC4uM2E5YTQwYjg2NWRjMzEwYjFiMjdkNzEyZTIy
MGUxNTJkM2E0ZjExNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9n
dGsvV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlLmgKQEAgLTQ4LDYgKzQ4LDggQEAg
dm9pZCB3ZWJraXRXZWJWaWV3QmFzZVNldFRvb2x0aXBUZXh0KFdlYktpdFdlYlZpZXdCYXNlKiwg
Y29uc3QgY2hhciopOwogCiB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlRm9yd2FyZE5leHRLZXlFdmVu
dChXZWJLaXRXZWJWaWV3QmFzZSopOwogCit2b2lkIHdlYmtpdFdlYlZpZXdCYXNlU3RhcnREcmFn
KFdlYktpdFdlYlZpZXdCYXNlKiwgY29uc3QgV2ViQ29yZTo6RHJhZ0RhdGEmLCBQYXNzUmVmUHRy
PFNoYXJlYWJsZUJpdG1hcD4gZHJhZ0ltYWdlKTsKKwogR19FTkRfREVDTFMKIAogI2VuZGlmIC8v
IFdlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvUGFnZUNsaWVudC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1BhZ2VDbGll
bnQuaAppbmRleCBlOGE1ZTM3MTVlNGQwOGVmN2ZlMzNkMGFmZDE5YjQzNzE0NDZlNWZiLi42Yjk1
YTIzZDFmZWM0MTQzYWFmNTliNjhiMTU0NmI4ZjBjZWNlMzE3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNsaWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9QYWdlQ2xpZW50LmgKQEAgLTEwMyw3ICsxMDMsOSBAQCBwdWJsaWM6CiAjaWYgUExBVEZP
Uk0oUVQpCiAgICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZUNvbnRlbnRzU2l6ZShjb25zdCBXZWJD
b3JlOjpJbnRTaXplJikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5kWm9vbWFibGVBcmVh
KGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYpID0gMDsK
KyNlbmRpZgogCisjaWYgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEdUSykKICAgICB2aXJ0dWFs
IHZvaWQgc3RhcnREcmFnKGNvbnN0IFdlYkNvcmU6OkRyYWdEYXRhJiwgUGFzc1JlZlB0cjxTaGFy
ZWFibGVCaXRtYXA+IGRyYWdJbWFnZSkgPSAwOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKaW5kZXggZDlkZjljNmNjYjVhYjQ5MTJkMzgzNDlhMWZi
MzJmZmVhZjU1ZWViNC4uMjhlN2U5OTVhN2I3N2FmYWFlZTYzZWU3ODI4YTQ2Njg0MzY3OTRkNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKQEAgLTgzLDYgKzgz
LDEwIEBACiAjaW5jbHVkZSAiQXJndW1lbnRDb2RlcnNRdC5oIgogI2VuZGlmCiAKKyNpZiBQTEFU
Rk9STShHVEspCisjaW5jbHVkZSAiQXJndW1lbnRDb2RlcnNHdGsuaCIKKyNlbmRpZgorCiAjaWZu
ZGVmIE5ERUJVRwogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkTGVha0NvdW50ZXIuaD4KICNlbmRp
ZgpAQCAtNzkxLDcgKzc5NSw3IEBAIHZvaWQgV2ViUGFnZVByb3h5OjpwZXJmb3JtRHJhZ0NvbnRy
b2xsZXJBY3Rpb24oRHJhZ0NvbnRyb2xsZXJBY3Rpb24gYWN0aW9uLCBEcmFnCiAgICAgLy8gRklY
TUU6IFdlIHNob3VsZCBwYXNzIHRoZSBkcmFnIGRhdGEgbWFwIG9ubHkgb24gRHJhZ0VudGVyLgog
ICAgIHByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6UGVyZm9ybURyYWdDb250cm9s
bGVyQWN0aW9uKGFjdGlvbiwgZHJhZ0RhdGEtPmNsaWVudFBvc2l0aW9uKCksIGRyYWdEYXRhLT5n
bG9iYWxQb3NpdGlvbigpLAogICAgICAgICBkcmFnRGF0YS0+ZHJhZ2dpbmdTb3VyY2VPcGVyYXRp
b25NYXNrKCksIGRyYWdEYXRhLT5kcmFnRGF0YU1hcCgpLCBkcmFnRGF0YS0+ZmxhZ3MoKSksIG1f
cGFnZUlEKTsKLSNlbGlmIFBMQVRGT1JNKFFUKQorI2VsaWYgUExBVEZPUk0oUVQpIHx8IFBMQVRG
T1JNKEdUSykKICAgICBwcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlBlcmZvcm1E
cmFnQ29udHJvbGxlckFjdGlvbihhY3Rpb24sICpkcmFnRGF0YSksIG1fcGFnZUlEKTsKICNlbHNl
CiAgICAgcHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpQZXJmb3JtRHJhZ0NvbnRy
b2xsZXJBY3Rpb24oYWN0aW9uLCBkcmFnRGF0YS0+Y2xpZW50UG9zaXRpb24oKSwgZHJhZ0RhdGEt
Pmdsb2JhbFBvc2l0aW9uKCksIGRyYWdEYXRhLT5kcmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1hc2so
KSwgZHJhZ1N0b3JhZ2VOYW1lLCBkcmFnRGF0YS0+ZmxhZ3MoKSwgc2FuZGJveEV4dGVuc2lvbkhh
bmRsZSksIG1fcGFnZUlEKTsKQEAgLTgwMyw3ICs4MDcsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6
ZGlkUGVyZm9ybURyYWdDb250cm9sbGVyQWN0aW9uKHVpbnQ2NF90IHJlc3VsdE9wZXJhdGlvbikK
ICAgICBtX2N1cnJlbnREcmFnT3BlcmF0aW9uID0gc3RhdGljX2Nhc3Q8RHJhZ09wZXJhdGlvbj4o
cmVzdWx0T3BlcmF0aW9uKTsKIH0KIAotI2lmIFBMQVRGT1JNKFFUKQorI2lmIFBMQVRGT1JNKFFU
KSB8fCBQTEFURk9STShHVEspCiB2b2lkIFdlYlBhZ2VQcm94eTo6c3RhcnREcmFnKGNvbnN0IERy
YWdEYXRhJiBkcmFnRGF0YSwgY29uc3QgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUmIGRyYWdJbWFn
ZUhhbmRsZSkKIHsKICAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBkcmFnSW1hZ2UgPSAwOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCmluZGV4IDFiMThhYjhiMmQ4MjM5
MGNhNTIwMWJlM2QyMjM4Nzc4YjBkY2JmYzMuLjQwODUxOTg2ODM1ZDY3ODZiOGJhY2Y4ZTgyOThh
NjIxMWRmYzM2NzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdl
UHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKQEAg
LTQ2Nyw3ICs0NjcsNyBAQCBwdWJsaWM6CiAjaWYgUExBVEZPUk0oV0lOKQogICAgIHZvaWQgc3Rh
cnREcmFnRHJvcChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCYgaW1hZ2VQb2ludCwgY29uc3QgV2Vi
Q29yZTo6SW50UG9pbnQmIGRyYWdQb2ludCwgdWludDY0X3Qgb2tFZmZlY3QsIGNvbnN0IEhhc2hN
YXA8VUlOVCwgVmVjdG9yPFN0cmluZz4gPiYgZGF0YU1hcCwgdWludDY0X3QgZmlsZVNpemUsIGNv
bnN0IFN0cmluZyYgcGF0aG5hbWUsIGNvbnN0IFNoYXJlZE1lbW9yeTo6SGFuZGxlJiBmaWxlQ29u
dGVudEhhbmRsZSwgY29uc3QgV2ViQ29yZTo6SW50U2l6ZSYgZHJhZ0ltYWdlU2l6ZSwgY29uc3Qg
U2hhcmVkTWVtb3J5OjpIYW5kbGUmIGRyYWdJbWFnZUhhbmRsZSwgYm9vbCBpc0xpbmtEcmFnKTsK
ICNlbmRpZgotI2lmIFBMQVRGT1JNKFFUKQorI2lmIFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShH
VEspCiAgICAgdm9pZCBzdGFydERyYWcoY29uc3QgV2ViQ29yZTo6RHJhZ0RhdGEmLCBjb25zdCBT
aGFyZWFibGVCaXRtYXA6OkhhbmRsZSYgZHJhZ0ltYWdlKTsKICNlbmRpZgogICAgIHZvaWQgZGlk
UmVjZWl2ZU1lc3NhZ2UoQ29yZUlQQzo6Q29ubmVjdGlvbiosIENvcmVJUEM6Ok1lc3NhZ2VJRCwg
Q29yZUlQQzo6QXJndW1lbnREZWNvZGVyKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5tZXNzYWdlcy5pbgppbmRleCA3YzljOGZkZjg3MjljZmFjNWYwNzky
ZWU4ZWM1OWFkMTI5MGM5MTAwLi42ZDM3MGE1MTIxMGZiNDdhNDIyZTIxNjgzYTc4NmIzNTFhZDA3
OWFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1l
c3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVz
c2FnZXMuaW4KQEAgLTIxMiw3ICsyMTIsNyBAQCBtZXNzYWdlcyAtPiBXZWJQYWdlUHJveHkgewog
I2lmIFBMQVRGT1JNKFdJTikKICAgICBTdGFydERyYWdEcm9wKFdlYkNvcmU6OkludFBvaW50IGlt
YWdlUG9pbnQsIFdlYkNvcmU6OkludFBvaW50IGRyYWdQb2ludCwgdWludDY0X3Qgb2tFZmZlY3Qs
IEhhc2hNYXA8VUlOVCxWZWN0b3I8U3RyaW5nPiA+IGRhdGFNYXAsIHVpbnQ2NF90IGZpbGVTaXpl
LCBTdHJpbmcgcGF0aG5hbWUsIFdlYktpdDo6U2hhcmVkTWVtb3J5OjpIYW5kbGUgZmlsZUNvbnRl
bnRIYW5kbGUsIFdlYkNvcmU6OkludFNpemUgZHJhZ0ltYWdlU2l6ZSwgV2ViS2l0OjpTaGFyZWRN
ZW1vcnk6OkhhbmRsZSBkcmFnSW1hZ2UsIGJvb2wgbGlua0RyYWcpCiAjZW5kaWYKLSNpZiBQTEFU
Rk9STShRVCkKKyNpZiBQTEFURk9STShRVCkgfHwgUExBVEZPUk0oR1RLKQogICAgIFN0YXJ0RHJh
ZyhXZWJDb3JlOjpEcmFnRGF0YSBkcmFnRGF0YSwgV2ViS2l0OjpTaGFyZWFibGVCaXRtYXA6Okhh
bmRsZSBkcmFnSW1hZ2UpCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJEcmFnQ2xpZW50LmNwcCBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRHJhZ0NsaWVudC5jcHAKaW5kZXggODQ1ZmJi
ZWMxZDMxNWFkZWI0NmExMTg4YjkxOTk5ODI0Mzc4YzUwYS4uNzM2ZGUyMTc3YWM4MDgyZDAwZWJl
M2I2ZmVmOGYzZWJmOTlhZjdkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9XZWJEcmFnQ2xpZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkRyYWdDbGllbnQuY3BwCkBAIC01Miw3ICs1Miw3
IEBAIERyYWdTb3VyY2VBY3Rpb24gV2ViRHJhZ0NsaWVudDo6ZHJhZ1NvdXJjZUFjdGlvbk1hc2tG
b3JQb2ludChjb25zdCBJbnRQb2ludCYgd2luCiAgICAgcmV0dXJuIERyYWdTb3VyY2VBY3Rpb25B
bnk7CiB9CiAKLSNpZiAhUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oV0lOKSAmJiAhUExBVEZP
Uk0oUVQpCisjaWYgIVBMQVRGT1JNKE1BQykgJiYgIVBMQVRGT1JNKFdJTikgJiYgIVBMQVRGT1JN
KFFUKSAmJiAhUExBVEZPUk0oR1RLKQogdm9pZCBXZWJEcmFnQ2xpZW50OjpzdGFydERyYWcoRHJh
Z0ltYWdlUmVmLCBjb25zdCBJbnRQb2ludCYsIGNvbnN0IEludFBvaW50JiwgQ2xpcGJvYXJkKiwg
RnJhbWUqLCBib29sKQogewogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJDb3JlU3VwcG9ydC9ndGsvV2ViRHJhZ0NsaWVudEd0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJEcmFnQ2xpZW50R3RrLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5lOWFjZjJkZjdlZTZjNjU5NWQ1OTA1OGQ3Y2QxOGViZWNlYmU1YmMwCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9ndGsv
V2ViRHJhZ0NsaWVudEd0ay5jcHAKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMSBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiV2ViRHJhZ0NsaWVudC5oIgorCisjaW5jbHVkZSAiQXJndW1lbnRDb2RlcnNHdGsuaCIK
KyNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKKyNpbmNsdWRlICJXZWJQYWdlLmgiCisjaW5j
bHVkZSAiV2ViUGFnZVByb3h5TWVzc2FnZXMuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0NsaXBib2Fy
ZEd0ay5oPgorI2luY2x1ZGUgPFdlYkNvcmUvRHJhZ0RhdGEuaD4KKyNpbmNsdWRlIDxXZWJDb3Jl
L0dyYXBoaWNzQ29udGV4dC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUGxhdGZvcm1Db250ZXh0Q2Fp
cm8uaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBXZWJLaXQgewor
CitzdGF0aWMgUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGNvbnZlcnRDYWlyb1N1cmZhY2VU
b1NoYXJlYWJsZUJpdG1hcChjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UpCit7CisgICAgaWYgKCFz
dXJmYWNlKQorICAgICAgICByZXR1cm4gMDsKKworICAgIEludFNpemUgaW1hZ2VTaXplKGNhaXJv
X2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKHN1cmZhY2UpLCBjYWlyb19pbWFnZV9zdXJmYWNlX2dl
dF9oZWlnaHQoc3VyZmFjZSkpOworICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9
IFNoYXJlYWJsZUJpdG1hcDo6Y3JlYXRlU2hhcmVhYmxlKGltYWdlU2l6ZSwgU2hhcmVhYmxlQml0
bWFwOjpTdXBwb3J0c0FscGhhKTsKKyAgICBPd25QdHI8R3JhcGhpY3NDb250ZXh0PiBncmFwaGlj
c0NvbnRleHQgPSBiaXRtYXAtPmNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpOworCisgICAgZ3JhcGhp
Y3NDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+ZHJhd1N1cmZhY2VUb0NvbnRleHQoc3VyZmFj
ZSwgSW50UmVjdChJbnRQb2ludCgpLCBpbWFnZVNpemUpLCBJbnRSZWN0KEludFBvaW50KCksIGlt
YWdlU2l6ZSksIGdyYXBoaWNzQ29udGV4dC5nZXQoKSk7CisgICAgcmV0dXJuIGJpdG1hcC5yZWxl
YXNlKCk7Cit9CisKK3ZvaWQgV2ViRHJhZ0NsaWVudDo6c3RhcnREcmFnKERyYWdJbWFnZVJlZiBk
cmFnSW1hZ2UsIGNvbnN0IEludFBvaW50JiBjbGllbnRQb3NpdGlvbiwgY29uc3QgSW50UG9pbnQm
IGdsb2JhbFBvc2l0aW9uLCBDbGlwYm9hcmQqIGNsaXBib2FyZCwgRnJhbWUqLCBib29sKQorewor
ICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGJpdG1hcCA9IGNvbnZlcnRDYWlyb1N1cmZhY2VU
b1NoYXJlYWJsZUJpdG1hcChkcmFnSW1hZ2UpOworICAgIFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxl
IGhhbmRsZTsKKyAgICBpZiAoYml0bWFwICYmICFiaXRtYXAtPmNyZWF0ZUhhbmRsZShoYW5kbGUp
KQorICAgICAgICByZXR1cm47CisKKyAgICBSZWZQdHI8RGF0YU9iamVjdEd0az4gZGF0YU9iamVj
dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Q2xpcGJvYXJkR3RrKj4oY2xpcGJvYXJkKS0+ZGF0YU9iamVj
dCgpOworICAgIERyYWdEYXRhIGRyYWdEYXRhKGRhdGFPYmplY3QuZ2V0KCksIGNsaWVudFBvc2l0
aW9uLCBnbG9iYWxQb3NpdGlvbiwgY2xpcGJvYXJkLT5zb3VyY2VPcGVyYXRpb24oKSk7CisgICAg
bV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlN0YXJ0RHJhZyhkcmFnRGF0YSwg
aGFuZGxlKSk7Cit9CisKK307IC8vIG5hbWVzcGFjZSBXZWJLaXQuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKaW5kZXggMDkxNzg5YjhiNDI1Mzc3ODEx
YjhiYmUzY2UxMTlkODFmN2FlZjJlNC4uMWQ2ZjA0OTM1ZGFkZmNkOTA1ZmMxYjQ0MzQ2YWM0ZDg3
MTcxZWIxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
LmNwcApAQCAtMTc4NywxMiArMTc4NywxNiBAQCB2b2lkIFdlYlBhZ2U6OnBlcmZvcm1EcmFnQ29u
dHJvbGxlckFjdGlvbih1aW50NjRfdCBhY3Rpb24sIFdlYkNvcmU6OkludFBvaW50IGNsaQogICAg
IH0KIH0KIAotI2VsaWYgUExBVEZPUk0oUVQpCisjZWxpZiBQTEFURk9STShRVCkgfHwgUExBVEZP
Uk0oR1RLKQogdm9pZCBXZWJQYWdlOjpwZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24odWludDY0
X3QgYWN0aW9uLCBXZWJDb3JlOjpEcmFnRGF0YSBkcmFnRGF0YSkKIHsKICAgICBpZiAoIW1fcGFn
ZSkgewogICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OkRpZFBlcmZvcm1EcmFn
Q29udHJvbGxlckFjdGlvbihEcmFnT3BlcmF0aW9uTm9uZSkpOworI2lmIFBMQVRGT1JNKFFUKQog
ICAgICAgICBRTWltZURhdGEqIGRhdGEgPSBjb25zdF9jYXN0PFFNaW1lRGF0YSo+KGRyYWdEYXRh
LnBsYXRmb3JtRGF0YSgpKTsKKyNlbGlmIFBMQVRGT1JNKEdUSykKKyAgICAgICAgRGF0YU9iamVj
dEd0ayogZGF0YSA9IGNvbnN0X2Nhc3Q8RGF0YU9iamVjdEd0ayo+KGRyYWdEYXRhLnBsYXRmb3Jt
RGF0YSgpKTsKKyNlbmRpZgogICAgICAgICBkZWxldGUgZGF0YTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KQEAgLTE4MTksNyArMTgyMywxMSBAQCB2b2lkIFdlYlBhZ2U6OnBlcmZvcm1EcmFnQ29u
dHJvbGxlckFjdGlvbih1aW50NjRfdCBhY3Rpb24sIFdlYkNvcmU6OkRyYWdEYXRhIGRyYQogICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICB9CiAgICAgLy8gRHJhZ0RhdGEgZG9lcyBu
b3QgZGVsZXRlIGl0cyBwbGF0Zm9ybURhdGEgc28gd2UgbmVlZCB0byBkbyB0aGF0IGhlcmUuCisj
aWYgUExBVEZPUk0oUVQpCiAgICAgUU1pbWVEYXRhKiBkYXRhID0gY29uc3RfY2FzdDxRTWltZURh
dGEqPihkcmFnRGF0YS5wbGF0Zm9ybURhdGEoKSk7CisjZWxpZiBQTEFURk9STShHVEspCisgICAg
RGF0YU9iamVjdEd0ayogZGF0YSA9IGNvbnN0X2Nhc3Q8RGF0YU9iamVjdEd0ayo+KGRyYWdEYXRh
LnBsYXRmb3JtRGF0YSgpKTsKKyNlbmRpZgogICAgIGRlbGV0ZSBkYXRhOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oIGIvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAppbmRleCBiM2Q4N2FjYTc2NGVh
NTkwODk4NWY3ZGFhOWQwOWFjNmVkZDdlNzZiLi4yZWMyYTY1Yjc1NGQ3YjBlNTljYmFhZWJmMmVm
NDM2MjAxZmI1ZjBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLmgKQEAgLTYxLDYgKzYxLDEwIEBACiAjaW5jbHVkZSAiQXJndW1lbnRDb2RlcnNRdC5oIgog
I2VuZGlmCiAKKyNpZiBQTEFURk9STShHVEspCisjaW5jbHVkZSAiQXJndW1lbnRDb2RlcnNHdGsu
aCIKKyNlbmRpZgorCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKICNpbmNsdWRlIDxXZWJDb3Jl
L1BsYXRmb3JtVG91Y2hFdmVudC5oPgogI2VuZGlmCkBAIC0zOTYsNyArNDAwLDcgQEAgcHVibGlj
OgogICAgIHZvaWQgY2xlYXJTZWxlY3Rpb24oKTsKICNpZiBQTEFURk9STShXSU4pCiAgICAgdm9p
ZCBwZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24odWludDY0X3QgYWN0aW9uLCBXZWJDb3JlOjpJ
bnRQb2ludCBjbGllbnRQb3NpdGlvbiwgV2ViQ29yZTo6SW50UG9pbnQgZ2xvYmFsUG9zaXRpb24s
IHVpbnQ2NF90IGRyYWdnaW5nU291cmNlT3BlcmF0aW9uTWFzaywgY29uc3QgV2ViQ29yZTo6RHJh
Z0RhdGFNYXAmLCB1aW50MzJfdCBmbGFncyk7Ci0jZWxpZiBQTEFURk9STShRVCkKKyNlbGlmIFBM
QVRGT1JNKFFUKSB8fCBQTEFURk9STShHVEspCiAgICAgdm9pZCBwZXJmb3JtRHJhZ0NvbnRyb2xs
ZXJBY3Rpb24odWludDY0X3QgYWN0aW9uLCBXZWJDb3JlOjpEcmFnRGF0YSk7CiAjZWxzZQogICAg
IHZvaWQgcGVyZm9ybURyYWdDb250cm9sbGVyQWN0aW9uKHVpbnQ2NF90IGFjdGlvbiwgV2ViQ29y
ZTo6SW50UG9pbnQgY2xpZW50UG9zaXRpb24sIFdlYkNvcmU6OkludFBvaW50IGdsb2JhbFBvc2l0
aW9uLCB1aW50NjRfdCBkcmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1hc2ssIGNvbnN0IFdURjo6U3Ry
aW5nJiBkcmFnU3RvcmFnZU5hbWUsIHVpbnQzMl90IGZsYWdzLCBjb25zdCBTYW5kYm94RXh0ZW5z
aW9uOjpIYW5kbGUmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KaW5kZXggMWI3NzFkNGQyM2FhMjhhZGE5YWI5NjY2YTdm
OTVlZDg0MWMxYjBkNi4uYzIyNDFlYmJiNTZkN2FkZWU5ZTk2OGY2MTRlMDdkYjI3NjIwYTA3MSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVz
c2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
bWVzc2FnZXMuaW4KQEAgLTEyOCwxMCArMTI4LDEwIEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2Ugewog
I2lmIFBMQVRGT1JNKFdJTikKICAgICBQZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24odWludDY0
X3QgYWN0aW9uLCBXZWJDb3JlOjpJbnRQb2ludCBjbGllbnRQb3NpdGlvbiwgV2ViQ29yZTo6SW50
UG9pbnQgZ2xvYmFsUG9zaXRpb24sIHVpbnQ2NF90IGRyYWdnaW5nU291cmNlT3BlcmF0aW9uTWFz
aywgSGFzaE1hcDxVSU5ULFZlY3RvcjxTdHJpbmc+PiBkYXRhTWFwLCB1aW50MzJfdCBmbGFncykK
ICNlbmRpZgotI2lmIFBMQVRGT1JNKFFUKQorI2lmIFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShH
VEspCiAgICAgUGVyZm9ybURyYWdDb250cm9sbGVyQWN0aW9uKHVpbnQ2NF90IGFjdGlvbiwgV2Vi
Q29yZTo6RHJhZ0RhdGEgZHJhZ0RhdGEpCiAjZW5kaWYKLSNpZiAhUExBVEZPUk0oV0lOKSAmJiAh
UExBVEZPUk0oUVQpCisjaWYgIVBMQVRGT1JNKFdJTikgJiYgIVBMQVRGT1JNKFFUKSAmJiAhUExB
VEZPUk0oR1RLKQogICAgIFBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlvbih1aW50NjRfdCBhY3Rp
b24sIFdlYkNvcmU6OkludFBvaW50IGNsaWVudFBvc2l0aW9uLCBXZWJDb3JlOjpJbnRQb2ludCBn
bG9iYWxQb3NpdGlvbiwgdWludDY0X3QgZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrLCBXVEY6
OlN0cmluZyBkcmFnU3RvcmFnZU5hbWUsIHVpbnQzMl90IGZsYWdzLCBXZWJLaXQ6OlNhbmRib3hF
eHRlbnNpb246OkhhbmRsZSBzYW5kYm94RXh0ZW5zaW9uSGFuZGxlKQogI2VuZGlmCiAgICAgRHJh
Z0VuZGVkKFdlYkNvcmU6OkludFBvaW50IGNsaWVudFBvc2l0aW9uLCBXZWJDb3JlOjpJbnRQb2lu
dCBnbG9iYWxQb3NpdGlvbiwgdWludDY0X3Qgb3BlcmF0aW9uKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>110099</attachid>
            <date>2011-10-07 00:25:57 -0700</date>
            <delta_ts>2011-10-08 10:45:31 -0700</delta_ts>
            <desc>Fix the funky licensing on DragIcon.h</desc>
            <filename>bug-63706-20111007002556.patch</filename>
            <type>text/plain</type>
            <size>54076</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTY3ODUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA1MzJjYzg1YTc4MzVlMGFk
Nzk4Njk3ZDkxY2U3ZTM0MmRjOTc4YjFlLi5jMTM1OGI5MzA5MGNmNDUyOWRhNzEwZTc0N2JmZGI1
ZGNjMmFlNzYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzEgQEAKKzIwMTEtMTAtMDMgIENhcmxv
cyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPiBhbmQgTWFydGluIFJvYmluc29u
ICA8bXJvYmluc29uQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gSW1wbGVtZW50IGRyYWcg
YW5kIGRyb3Agc3VwcG9ydCBpbiBXZWJLaXQyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD02MzcwNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogcGxhdGZvcm0vRHJhZ0RhdGEuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ndGsvRGF0YU9iamVjdEd0ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhT2JqZWN0
R3RrOjp0ZXh0KTogTWFyayBhcyBjb25zdC4KKyAgICAgICAgKFdlYkNvcmU6OkRhdGFPYmplY3RH
dGs6Om1hcmt1cCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RGF0YU9iamVjdEd0azo6dXJs
TGFiZWwpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvRGF0YU9iamVjdEd0ay5oOiBS
ZW1vdmUgdW51c2VkIG1lbWJlcgorICAgICAgICBtX2RyYWdDb250ZXh0LgorICAgICAgICAoV2Vi
Q29yZTo6RGF0YU9iamVjdEd0azo6dXJsKTogTWFyayBhcyBjb25zdC4KKyAgICAgICAgKFdlYkNv
cmU6OkRhdGFPYmplY3RHdGs6OnVyaUxpc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRh
dGFPYmplY3RHdGs6OmZpbGVuYW1lcyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RGF0YU9i
amVjdEd0azo6aW1hZ2UpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRhdGFPYmplY3RHdGs6
Omhhc1RleHQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRhdGFPYmplY3RHdGs6Omhhc01h
cmt1cCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RGF0YU9iamVjdEd0azo6aGFzVVJJTGlz
dCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RGF0YU9iamVjdEd0azo6aGFzVVJMKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpEYXRhT2JqZWN0R3RrOjpoYXNGaWxlbmFtZXMpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OkRhdGFPYmplY3RHdGs6Omhhc0ltYWdlKTogRGl0dG8uCisg
ICAgICAgICogcGxhdGZvcm0vZ3RrL0RyYWdJY29uLmNwcDogQWRkZWQuIEEgaGVscGVyIHdoaWNo
IHRha2VzIGNhcmUgb2YKKyAgICAgICAgY3JlYXRpbmcgYSB0cmFuc3BhcmVudCBkcmFnIHdpbmRv
dyBmb3IgZHJhZ3MuCisgICAgICAgICogcGxhdGZvcm0vZ3RrL0RyYWdJY29uLmg6IEFkZGVkLgor
CiAyMDExLTEwLTA1ICBZdXRhIEtpdGFtdXJhICA8eXV0YWtAY2hyb21pdW0ub3JnPgogCiAgICAg
ICAgIFdlYlNvY2tldDogQWRkIGV4dGVuc2lvbnMgYXR0cmlidXRlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtIGIvU291cmNlL1dlYkNvcmUvR05VbWFrZWZp
bGUubGlzdC5hbQppbmRleCBmMTM0NDk1NDAxYjVmZTViMzY1MjRhZGViNGFmMjhlZmFjOThjNTM1
Li5hODk2YzNhMTA2Yzk0MWM5ZTk2NzIwMjVhYjlmYTg4ZmRhNTM0OTE2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9HTlVtYWtlZmlsZS5saXN0LmFtCisrKyBiL1NvdXJjZS9XZWJDb3JlL0dO
VW1ha2VmaWxlLmxpc3QuYW0KQEAgLTM5OTksNiArMzk5OSw4IEBAIHdlYmNvcmVndGtfc291cmNl
cyArPSBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0RhdGFPYmplY3RHdGsuY3BwIFwK
IAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRGF0YU9iamVjdEd0ay5oIFwKIAlTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvRHJhZ0RhdGFHdGsuY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ndGsvRHJhZ0ljb24uY3BwIFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsv
RHJhZ0ljb24uaCBcCiAJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0RyYWdJbWFnZUd0ay5j
cHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9FdmVudExvb3BHdGsuY3BwIFwKIAlT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRmlsZVN5c3RlbUd0ay5jcHAgXApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0RhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0RyYWdEYXRhLmgKaW5kZXggYWQ5YTdiOGJlZTFkN2Q5ZjFkMjY2MTdjODI3ODg3NTIw
MGJiOGFjNi4uYWZhMjE5ZjNiNzIyM2JkZGQ1OGMyN2VmNjcyZDhjNmNhNzBjZjFiYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vRHJhZ0RhdGEuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9EcmFnRGF0YS5oCkBAIC0xMjAsNyArMTIwLDcgQEAgcHVibGljOgogICAg
IE5TUGFzdGVib2FyZCAqcGFzdGVib2FyZCgpIHsgcmV0dXJuIG1fcGFzdGVib2FyZC5nZXQoKTsg
fQogI2VuZGlmCiAKLSNpZiBQTEFURk9STShRVCkKKyNpZiBQTEFURk9STShRVCkgfHwgUExBVEZP
Uk0oR1RLKQogICAgIC8vIFRoaXMgY29uc3RydWN0b3Igc2hvdWxkIHVzZWQgb25seSBieSBXZWJL
aXQyIElQQyBiZWNhdXNlIERyYWdEYXRhCiAgICAgLy8gaXMgaW5pdGlhbGl6ZWQgYnkgdGhlIGRl
Y29kZXIgYW5kIG5vdCBpbiB0aGUgY29uc3RydWN0b3IuCiAgICAgRHJhZ0RhdGEoKSB7IH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EYXRhT2JqZWN0R3RrLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EYXRhT2JqZWN0R3RrLmNwcAppbmRleCAyMGE5
ZTliNGFjMDBjNTNlMGU2Mjg2MmE2YTgyMDRjNDU5MjU5NTViLi4zMjQwNWMxN2Y2ZjJkZTcxZTBk
MmRiZmNjMDY1MmNmN2RkMjBlN2IxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvRGF0YU9iamVjdEd0ay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L0RhdGFPYmplY3RHdGsuY3BwCkBAIC0zMywxNCArMzMsMTQgQEAgc3RhdGljIHZvaWQgcmVwbGFj
ZU5vbkJyZWFraW5nU3BhY2VXaXRoU3BhY2UoU3RyaW5nJiBzdHIpCiAgICAgc3RyLnJlcGxhY2Uo
Tm9uQnJlYWtpbmdTcGFjZUNoYXJhY3RlciwgU3BhY2VDaGFyYWN0ZXIpOwogfQogCi1TdHJpbmcg
RGF0YU9iamVjdEd0azo6dGV4dCgpCitTdHJpbmcgRGF0YU9iamVjdEd0azo6dGV4dCgpIGNvbnN0
CiB7CiAgICAgaWYgKG1fcmFuZ2UpCiAgICAgICAgIHJldHVybiBtX3JhbmdlLT50ZXh0KCk7CiAg
ICAgcmV0dXJuIG1fdGV4dDsKIH0KIAotU3RyaW5nIERhdGFPYmplY3RHdGs6Om1hcmt1cCgpCitT
dHJpbmcgRGF0YU9iamVjdEd0azo6bWFya3VwKCkgY29uc3QKIHsKICAgICBpZiAobV9yYW5nZSkK
ICAgICAgICAgcmV0dXJuIGNyZWF0ZU1hcmt1cChtX3JhbmdlLmdldCgpLCAwLCBBbm5vdGF0ZUZv
ckludGVyY2hhbmdlLCBmYWxzZSwgUmVzb2x2ZU5vbkxvY2FsVVJMcyk7CkBAIC0xMzMsNyArMTMz
LDcgQEAgdm9pZCBEYXRhT2JqZWN0R3RrOjpjbGVhck1hcmt1cCgpCiAgICAgbV9tYXJrdXAgPSAi
IjsKIH0KIAotU3RyaW5nIERhdGFPYmplY3RHdGs6OnVybExhYmVsKCkKK1N0cmluZyBEYXRhT2Jq
ZWN0R3RrOjp1cmxMYWJlbCgpIGNvbnN0CiB7CiAgICAgaWYgKGhhc1RleHQoKSkKICAgICAgICAg
cmV0dXJuIHRleHQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9E
YXRhT2JqZWN0R3RrLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvRGF0YU9iamVjdEd0
ay5oCmluZGV4IDU0MjNmODFkMzIzMjU3NzQxZTZlNGM3MDBhZmQ5OGVmNDJkNWY2ZWYuLmUyN2Jj
OTE1ZmY2YmUzY2YyNDRkOWJjZTUzNWY1MzIyZWRjNWU3MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9EYXRhT2JqZWN0R3RrLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3RrL0RhdGFPYmplY3RHdGsuaApAQCAtMzYsMzEgKzM2LDI5IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBEYXRhT2JqZWN0R3RrKCkpOwogICAgIH0KIAot
ICAgIGNvbnN0IEtVUkwmIHVybCgpIHsgcmV0dXJuIG1fdXJsOyB9Ci0gICAgY29uc3QgU3RyaW5n
JiB1cmlMaXN0KCkgeyByZXR1cm4gbV91cmlMaXN0OyB9Ci0gICAgY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIGZpbGVuYW1lcygpIHsgcmV0dXJuIG1fZmlsZW5hbWVzOyB9Ci0gICAgR2RrUGl4YnVmKiBp
bWFnZSgpIHsgcmV0dXJuIG1faW1hZ2UuZ2V0KCk7IH0KKyAgICBjb25zdCBLVVJMJiB1cmwoKSBj
b25zdCB7IHJldHVybiBtX3VybDsgfQorICAgIGNvbnN0IFN0cmluZyYgdXJpTGlzdCgpIGNvbnN0
IHsgcmV0dXJuIG1fdXJpTGlzdDsgfQorICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBmaWxlbmFt
ZXMoKSBjb25zdCB7IHJldHVybiBtX2ZpbGVuYW1lczsgfQorICAgIEdka1BpeGJ1ZiogaW1hZ2Uo
KSBjb25zdCB7IHJldHVybiBtX2ltYWdlLmdldCgpOyB9CiAgICAgdm9pZCBzZXRSYW5nZShQYXNz
UmVmUHRyPFJhbmdlPiBuZXdSYW5nZSkgeyBtX3JhbmdlID0gbmV3UmFuZ2U7IH0KICAgICB2b2lk
IHNldEltYWdlKEdka1BpeGJ1ZiogbmV3SW1hZ2UpIHsgbV9pbWFnZSA9IG5ld0ltYWdlOyB9Ci0g
ICAgdm9pZCBzZXREcmFnQ29udGV4dChHZGtEcmFnQ29udGV4dCogbmV3RHJhZ0NvbnRleHQpIHsg
bV9kcmFnQ29udGV4dCA9IG5ld0RyYWdDb250ZXh0OyB9CiAgICAgdm9pZCBzZXRVUkwoY29uc3Qg
S1VSTCYsIGNvbnN0IFN0cmluZyYpOwotICAgIGJvb2wgaGFzVGV4dCgpIHsgcmV0dXJuIG1fcmFu
Z2UgfHwgIW1fdGV4dC5pc0VtcHR5KCk7IH0KLSAgICBib29sIGhhc01hcmt1cCgpIHsgcmV0dXJu
IG1fcmFuZ2UgfHwgIW1fbWFya3VwLmlzRW1wdHkoKTsgfQotICAgIGJvb2wgaGFzVVJJTGlzdCgp
IHsgcmV0dXJuICFtX3VyaUxpc3QuaXNFbXB0eSgpOyB9Ci0gICAgYm9vbCBoYXNVUkwoKSB7IHJl
dHVybiAhbV91cmwuaXNFbXB0eSgpICYmIG1fdXJsLmlzVmFsaWQoKTsgfQotICAgIGJvb2wgaGFz
RmlsZW5hbWVzKCkgeyByZXR1cm4gIW1fZmlsZW5hbWVzLmlzRW1wdHkoKTsgfQotICAgIGJvb2wg
aGFzSW1hZ2UoKSB7IHJldHVybiBtX2ltYWdlOyB9CisgICAgYm9vbCBoYXNUZXh0KCkgY29uc3Qg
eyByZXR1cm4gbV9yYW5nZSB8fCAhbV90ZXh0LmlzRW1wdHkoKTsgfQorICAgIGJvb2wgaGFzTWFy
a3VwKCkgY29uc3QgeyByZXR1cm4gbV9yYW5nZSB8fCAhbV9tYXJrdXAuaXNFbXB0eSgpOyB9Cisg
ICAgYm9vbCBoYXNVUklMaXN0KCkgY29uc3QgeyByZXR1cm4gIW1fdXJpTGlzdC5pc0VtcHR5KCk7
IH0KKyAgICBib29sIGhhc1VSTCgpIGNvbnN0IHsgcmV0dXJuICFtX3VybC5pc0VtcHR5KCkgJiYg
bV91cmwuaXNWYWxpZCgpOyB9CisgICAgYm9vbCBoYXNGaWxlbmFtZXMoKSBjb25zdCB7IHJldHVy
biAhbV9maWxlbmFtZXMuaXNFbXB0eSgpOyB9CisgICAgYm9vbCBoYXNJbWFnZSgpIGNvbnN0IHsg
cmV0dXJuIG1faW1hZ2U7IH0KICAgICB2b2lkIGNsZWFyVVJJTGlzdCgpIHsgbV91cmlMaXN0ID0g
IiI7IH0KICAgICB2b2lkIGNsZWFyVVJMKCkgeyBtX3VybCA9IEtVUkwoKTsgfQogICAgIHZvaWQg
Y2xlYXJJbWFnZSgpIHsgbV9pbWFnZSA9IDA7IH0KLSAgICBHZGtEcmFnQ29udGV4dCogZHJhZ0Nv
bnRleHQoKSB7IHJldHVybiBtX2RyYWdDb250ZXh0LmdldCgpOyB9CiAKLSAgICBTdHJpbmcgdGV4
dCgpOwotICAgIFN0cmluZyBtYXJrdXAoKTsKKyAgICBTdHJpbmcgdGV4dCgpIGNvbnN0OworICAg
IFN0cmluZyBtYXJrdXAoKSBjb25zdDsKICAgICB2b2lkIHNldFRleHQoY29uc3QgU3RyaW5nJik7
CiAgICAgdm9pZCBzZXRNYXJrdXAoY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCBzZXRVUklMaXN0
KGNvbnN0IFN0cmluZyYpOwotICAgIFN0cmluZyB1cmxMYWJlbCgpOworICAgIFN0cmluZyB1cmxM
YWJlbCgpIGNvbnN0OwogICAgIHZvaWQgY2xlYXIoKTsKICAgICB2b2lkIGNsZWFyVGV4dCgpOwog
ICAgIHZvaWQgY2xlYXJNYXJrdXAoKTsKQEAgLTc0LDcgKzcyLDYgQEAgcHJpdmF0ZToKICAgICBT
dHJpbmcgbV91cmlMaXN0OwogICAgIFZlY3RvcjxTdHJpbmc+IG1fZmlsZW5hbWVzOwogICAgIEdS
ZWZQdHI8R2RrUGl4YnVmPiBtX2ltYWdlOwotICAgIEdSZWZQdHI8R2RrRHJhZ0NvbnRleHQ+IG1f
ZHJhZ0NvbnRleHQ7CiAgICAgUmVmUHRyPFJhbmdlPiBtX3JhbmdlOwogfTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0RyYWdJY29uLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9EcmFnSWNvbi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTYyZGY0MjI1NTBkOTNm
YjU1ZjlkNzA5MzBhYzI4ZmMxMDc4YjhhMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9EcmFnSWNvbi5jcHAKQEAgLTAsMCArMSwxMDggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkRyYWdJY29uLmgiCisKKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCitzdGF0aWMgZ2Jv
b2xlYW4gZHJhZ0ljb25XaW5kb3dEcmF3RXZlbnRDYWxsYmFjayhHdGtXaWRnZXQqLCBHZGtFdmVu
dEV4cG9zZSogZXZlbnQsIERyYWdJY29uKiBpY29uKQoreworICAgIFJlZlB0cjxjYWlyb190PiBj
b250ZXh0ID0gYWRvcHRSZWYoZ2RrX2NhaXJvX2NyZWF0ZShldmVudC0+d2luZG93KSk7CisgICAg
aWNvbi0+ZHJhdyhjb250ZXh0LmdldCgpKTsKKyAgICByZXR1cm4gVFJVRTsKK30KKyNlbHNlCitz
dGF0aWMgZ2Jvb2xlYW4gZHJhZ0ljb25XaW5kb3dEcmF3RXZlbnRDYWxsYmFjayhHdGtXaWRnZXQq
LCBjYWlyb190KiBjb250ZXh0LCBEcmFnSWNvbiogaWNvbikKK3sKKyAgICBpZiAoIWdka19jYWly
b19nZXRfY2xpcF9yZWN0YW5nbGUoY29udGV4dCwgMCkpCisgICAgICAgIHJldHVybiBGQUxTRTsK
KyAgICBpY29uLT5kcmF3KGNvbnRleHQpOworICAgIHJldHVybiBUUlVFOworfQorI2VuZGlmIC8v
IEdUS19BUElfVkVSU0lPTl8yCisKK0RyYWdJY29uOjpEcmFnSWNvbigpCisgICAgOiBtX3dpbmRv
dyhndGtfd2luZG93X25ldyhHVEtfV0lORE9XX1BPUFVQKSkKK3sKKyNpZmRlZiBHVEtfQVBJX1ZF
UlNJT05fMgorICAgIGdfc2lnbmFsX2Nvbm5lY3QobV93aW5kb3csICJleHBvc2UtZXZlbnQiLCBH
X0NBTExCQUNLKGRyYWdJY29uV2luZG93RHJhd0V2ZW50Q2FsbGJhY2spLCB0aGlzKTsKKyNlbHNl
CisgICAgZ19zaWduYWxfY29ubmVjdChtX3dpbmRvdywgImRyYXciLCBHX0NBTExCQUNLKGRyYWdJ
Y29uV2luZG93RHJhd0V2ZW50Q2FsbGJhY2spLCB0aGlzKTsKKyNlbmRpZgorCisgICAgLy8gVGhp
cyBzdHJhdGVneSBvcmlnaW5hbGx5IGNvbWVzIGZyb20gQ2hyb21pdW06IHNyYy9jaHJvbWUvYnJv
d3Nlci9ndGsvdGFiX2NvbnRlbnRzX2RyYWdfc291cmNlLmNjCisgICAgR2RrU2NyZWVuKiBzY3Jl
ZW4gPSBndGtfd2lkZ2V0X2dldF9zY3JlZW4obV93aW5kb3cpOworI2lmZGVmIEdUS19BUElfVkVS
U0lPTl8yCisgICAgR2RrQ29sb3JtYXAqIHJnYmEgPSBnZGtfc2NyZWVuX2dldF9yZ2JhX2NvbG9y
bWFwKHNjcmVlbik7CisgICAgaWYgKHJnYmEpCisgICAgICAgIGd0a193aWRnZXRfc2V0X2NvbG9y
bWFwKG1fd2luZG93LCByZ2JhKTsKKyNlbHNlCisgICAgR2RrVmlzdWFsKiB2aXN1YWwgPSBnZGtf
c2NyZWVuX2dldF9yZ2JhX3Zpc3VhbChzY3JlZW4pOworICAgIGlmICghdmlzdWFsKQorICAgICAg
ICB2aXN1YWwgPSBnZGtfc2NyZWVuX2dldF9zeXN0ZW1fdmlzdWFsKHNjcmVlbik7CisgICAgZ3Rr
X3dpZGdldF9zZXRfdmlzdWFsKG1fd2luZG93LCB2aXN1YWwpOworI2VuZGlmIC8vIEdUS19BUElf
VkVSU0lPTl8yCit9CisKK0RyYWdJY29uOjp+RHJhZ0ljb24oKQoreworICAgIGd0a193aWRnZXRf
ZGVzdHJveShtX3dpbmRvdyk7Cit9CisKK3ZvaWQgRHJhZ0ljb246OmRyYXcoY2Fpcm9fdCogY29u
dGV4dCkKK3sKKyAgICBjYWlyb19yZWN0YW5nbGUoY29udGV4dCwgMCwgMCwKKyAgICAgICAgICAg
ICAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgobV9pbWFnZS5nZXQoKSksCisg
ICAgICAgICAgICAgICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChtX2ltYWdl
LmdldCgpKSk7CisgICAgY2Fpcm9fc2V0X29wZXJhdG9yKGNvbnRleHQsIENBSVJPX09QRVJBVE9S
X1NPVVJDRSk7CisgICAgY2Fpcm9fc2V0X3NvdXJjZV9zdXJmYWNlKGNvbnRleHQsIG1faW1hZ2Uu
Z2V0KCksIDAsIDApOworICAgIGNhaXJvX2ZpbGwoY29udGV4dCk7Cit9CisKK3ZvaWQgRHJhZ0lj
b246OnNldEltYWdlKGNhaXJvX3N1cmZhY2VfdCogaW1hZ2UpCit7CisgICAgQVNTRVJUKGltYWdl
KTsKKyAgICBtX2ltYWdlID0gaW1hZ2U7CisgICAgbV9pbWFnZVNpemUgPSBJbnRTaXplKGNhaXJv
X2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKGltYWdlKSwgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRf
aGVpZ2h0KGltYWdlKSk7CisgICAgZ3RrX3dpbmRvd19yZXNpemUoR1RLX1dJTkRPVyhtX3dpbmRv
dyksIG1faW1hZ2VTaXplLndpZHRoKCksIG1faW1hZ2VTaXplLmhlaWdodCgpKTsKK30KKwordm9p
ZCBEcmFnSWNvbjo6dXNlRm9yRHJhZyhHZGtEcmFnQ29udGV4dCogY29udGV4dCkKK3sKKyAgICBJ
bnRQb2ludCBob3RzcG90KG1faW1hZ2VTaXplKTsKKyAgICBob3RzcG90LnNjYWxlKDAuNSwgMC41
KTsKKyAgICB1c2VGb3JEcmFnKGNvbnRleHQsIGhvdHNwb3QpOworfQorCit2b2lkIERyYWdJY29u
Ojp1c2VGb3JEcmFnKEdka0RyYWdDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRQb2ludCYgaG90
c3BvdCkKK3sKKyAgICBndGtfZHJhZ19zZXRfaWNvbl93aWRnZXQoY29udGV4dCwgbV93aW5kb3cs
IGhvdHNwb3QueCgpLCBob3RzcG90LnkoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EcmFnSWNvbi5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL0RyYWdJY29uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTFlZTU5ZmFk
MTUzYmNkODZmYzE1ZGE4Y2YwYjI2ZjZjZGFmZjQ4YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9EcmFnSWNvbi5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBEcmFn
SWNvbl9oCisjZGVmaW5lIERyYWdJY29uX2gKKworI2luY2x1ZGUgIkludFBvaW50LmgiCisjaW5j
bHVkZSA8UmVmUHRyQ2Fpcm8uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBEcmFn
SWNvbiB7CitwdWJsaWM6CisgICAgRHJhZ0ljb24oKTsKKyAgICB2aXJ0dWFsIH5EcmFnSWNvbigp
OworCisgICAgdm9pZCBkcmF3KGNhaXJvX3QqKTsKKyAgICB2b2lkIHNldEltYWdlKGNhaXJvX3N1
cmZhY2VfdCopOworICAgIHZvaWQgdXNlRm9yRHJhZyhHZGtEcmFnQ29udGV4dCopOworICAgIHZv
aWQgdXNlRm9yRHJhZyhHZGtEcmFnQ29udGV4dCosIGNvbnN0IEludFBvaW50JiBob3RzcG90KTsK
KworcHJpdmF0ZToKKyAgICBHdGtXaWRnZXQqIG1fd2luZG93OworICAgIFJlZlB0cjxjYWlyb19z
dXJmYWNlX3Q+IG1faW1hZ2U7CisgICAgSW50U2l6ZSBtX2ltYWdlU2l6ZTsKK307CisKK30KKwor
I2VuZGlmIC8vIERyYWdJY29uX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNv
cmVTdXBwb3J0L0RyYWdDbGllbnRHdGsuY3BwIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1
cHBvcnQvRHJhZ0NsaWVudEd0ay5jcHAKaW5kZXggMjBjOGQ3N2I5ZGIzZTM1MWRmMjUzN2IwMWNm
ZmEzYzE3ZTNiN2M1Yi4uYmM4NzQ3ZDZiYzg4MTAxN2ExYzRiZDZkZTJiZWQxM2JjODY3Yzk2NSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHJhZ0NsaWVudEd0
ay5jcHAKKysrIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHJhZ0NsaWVudEd0
ay5jcHAKQEAgLTQyLDM4ICs0MiwxNCBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFt
ZXNwYWNlIFdlYktpdCB7CiAKLSNpZmRlZiBHVEtfQVBJX1ZFUlNJT05fMgotc3RhdGljIGdib29s
ZWFuIGRyYWdJY29uV2luZG93RHJhd0V2ZW50Q2FsbGJhY2soR3RrV2lkZ2V0KiB3aWRnZXQsIEdk
a0V2ZW50RXhwb3NlKiBldmVudCwgRHJhZ0NsaWVudCogY2xpZW50KQotewotICAgIFJlZlB0cjxj
YWlyb190PiBjb250ZXh0ID0gYWRvcHRSZWYoZ2RrX2NhaXJvX2NyZWF0ZShldmVudC0+d2luZG93
KSk7Ci0gICAgY2xpZW50LT5kcmF3RHJhZ0ljb25XaW5kb3cod2lkZ2V0LCBjb250ZXh0LmdldCgp
KTsKLSAgICByZXR1cm4gVFJVRTsKLX0KLSNlbHNlCi1zdGF0aWMgZ2Jvb2xlYW4gZHJhZ0ljb25X
aW5kb3dEcmF3RXZlbnRDYWxsYmFjayhHdGtXaWRnZXQqIHdpZGdldCwgY2Fpcm9fdCogY29udGV4
dCwgRHJhZ0NsaWVudCogY2xpZW50KQotewotICAgIGlmICghZ2RrX2NhaXJvX2dldF9jbGlwX3Jl
Y3RhbmdsZShjb250ZXh0LCAwKSkKLSAgICAgICAgcmV0dXJuIEZBTFNFOwotICAgIGNsaWVudC0+
ZHJhd0RyYWdJY29uV2luZG93KHdpZGdldCwgY29udGV4dCk7Ci0gICAgcmV0dXJuIFRSVUU7Ci19
Ci0jZW5kaWYgLy8gR1RLX0FQSV9WRVJTSU9OXzIKLQogRHJhZ0NsaWVudDo6RHJhZ0NsaWVudChX
ZWJLaXRXZWJWaWV3KiB3ZWJWaWV3KQogICAgIDogbV93ZWJWaWV3KHdlYlZpZXcpCiAgICAgLCBt
X3N0YXJ0UG9zKDAsIDApCi0gICAgLCBtX2RyYWdJY29uV2luZG93KGd0a193aW5kb3dfbmV3KEdU
S19XSU5ET1dfUE9QVVApKQogewotI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCi0gICAgZ19zaWdu
YWxfY29ubmVjdChtX2RyYWdJY29uV2luZG93LCAiZXhwb3NlLWV2ZW50IiwgR19DQUxMQkFDSyhk
cmFnSWNvbldpbmRvd0RyYXdFdmVudENhbGxiYWNrKSwgdGhpcyk7Ci0jZWxzZQotICAgIGdfc2ln
bmFsX2Nvbm5lY3QobV9kcmFnSWNvbldpbmRvdywgImRyYXciLCBHX0NBTExCQUNLKGRyYWdJY29u
V2luZG93RHJhd0V2ZW50Q2FsbGJhY2spLCB0aGlzKTsKLSNlbmRpZgogfQogCiBEcmFnQ2xpZW50
Ojp+RHJhZ0NsaWVudCgpCiB7Ci0gICAgZ3RrX3dpZGdldF9kZXN0cm95KG1fZHJhZ0ljb25XaW5k
b3cpOwogfQogCiB2b2lkIERyYWdDbGllbnQ6OndpbGxQZXJmb3JtRHJhZ0Rlc3RpbmF0aW9uQWN0
aW9uKERyYWdEZXN0aW5hdGlvbkFjdGlvbiwgRHJhZ0RhdGEqKQpAQCAtMTEzLDQ0ICs4OSwxMyBA
QCB2b2lkIERyYWdDbGllbnQ6OnN0YXJ0RHJhZyhEcmFnSW1hZ2VSZWYgaW1hZ2UsIGNvbnN0IElu
dFBvaW50JiBkcmFnSW1hZ2VPcmlnaW4sCiAgICAgLy8gaGFwcGVuIGlmIGEgZHJhZyBpcyBmb2xs
b3dlZCB2ZXJ5IHF1aWNrbHkgYnkgYW5vdGhlciBjbGljayAobGlrZSBpbiB0aGUgRFJUKS4KICAg
ICB3ZWJWaWV3LT5wcml2LT5jbGlja0NvdW50ZXIucmVzZXQoKTsKIAotICAgIC8vIFRoaXMgc3Ry
YXRlZ3kgb3JpZ2luYWxseSBjb21lcyBmcm9tIENocm9taXVtOgotICAgIC8vIHNyYy9jaHJvbWUv
YnJvd3Nlci9ndGsvdGFiX2NvbnRlbnRzX2RyYWdfc291cmNlLmNjCiAgICAgaWYgKGltYWdlKSB7
Ci0gICAgICAgIG1fZHJhZ0ltYWdlID0gaW1hZ2U7Ci0gICAgICAgIEludFNpemUgaW1hZ2VTaXpl
KGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKGltYWdlKSwgY2Fpcm9faW1hZ2Vfc3VyZmFj
ZV9nZXRfaGVpZ2h0KGltYWdlKSk7Ci0gICAgICAgIGd0a193aW5kb3dfcmVzaXplKEdUS19XSU5E
T1cobV9kcmFnSWNvbldpbmRvdyksIGltYWdlU2l6ZS53aWR0aCgpLCBpbWFnZVNpemUuaGVpZ2h0
KCkpOwotCi0gICAgICAgIGlmICghZ3RrX3dpZGdldF9nZXRfcmVhbGl6ZWQobV9kcmFnSWNvbldp
bmRvdykpIHsKLSAgICAgICAgICAgIEdka1NjcmVlbiogc2NyZWVuID0gZ3RrX3dpZGdldF9nZXRf
c2NyZWVuKG1fZHJhZ0ljb25XaW5kb3cpOwotI2lmZGVmIEdUS19BUElfVkVSU0lPTl8yCi0gICAg
ICAgICAgICBHZGtDb2xvcm1hcCogcmdiYSA9IGdka19zY3JlZW5fZ2V0X3JnYmFfY29sb3JtYXAo
c2NyZWVuKTsKLSAgICAgICAgICAgIGlmIChyZ2JhKQotICAgICAgICAgICAgICAgIGd0a193aWRn
ZXRfc2V0X2NvbG9ybWFwKG1fZHJhZ0ljb25XaW5kb3csIHJnYmEpOwotI2Vsc2UKLSAgICAgICAg
ICAgIEdka1Zpc3VhbCogdmlzdWFsID0gZ2RrX3NjcmVlbl9nZXRfcmdiYV92aXN1YWwoc2NyZWVu
KTsKLSAgICAgICAgICAgIGlmICghdmlzdWFsKQotICAgICAgICAgICAgICAgIHZpc3VhbCA9IGdk
a19zY3JlZW5fZ2V0X3N5c3RlbV92aXN1YWwoc2NyZWVuKTsKLSAgICAgICAgICAgIGd0a193aWRn
ZXRfc2V0X3Zpc3VhbChtX2RyYWdJY29uV2luZG93LCB2aXN1YWwpOwotI2VuZGlmIC8vIEdUS19B
UElfVkVSU0lPTl8yCi0gICAgICAgIH0KLQotICAgICAgICBJbnRTaXplIG9yaWdpbiA9IGV2ZW50
UG9zIC0gZHJhZ0ltYWdlT3JpZ2luOwotICAgICAgICBndGtfZHJhZ19zZXRfaWNvbl93aWRnZXQo
Y29udGV4dCwgbV9kcmFnSWNvbldpbmRvdywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG9yaWdpbi53aWR0aCgpLCBvcmlnaW4uaGVpZ2h0KCkpOworICAgICAgICBtX2RyYWdJY29u
LnNldEltYWdlKGltYWdlKTsKKyAgICAgICAgbV9kcmFnSWNvbi51c2VGb3JEcmFnKGNvbnRleHQs
IEludFBvaW50KGV2ZW50UG9zIC0gZHJhZ0ltYWdlT3JpZ2luKSk7CiAgICAgfSBlbHNlCiAgICAg
ICAgIGd0a19kcmFnX3NldF9pY29uX2RlZmF1bHQoY29udGV4dCk7CiB9CiAKLXZvaWQgRHJhZ0Ns
aWVudDo6ZHJhd0RyYWdJY29uV2luZG93KEd0a1dpZGdldCogd2lkZ2V0LCBjYWlyb190KiBjb250
ZXh0KQotewotICAgIGNhaXJvX3JlY3RhbmdsZShjb250ZXh0LCAwLCAwLAotICAgICAgICAgICAg
ICAgICAgICBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF93aWR0aChtX2RyYWdJbWFnZS5nZXQoKSks
Ci0gICAgICAgICAgICAgICAgICAgIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChtX2Ry
YWdJbWFnZS5nZXQoKSkpOwotICAgIGNhaXJvX3NldF9vcGVyYXRvcihjb250ZXh0LCBDQUlST19P
UEVSQVRPUl9TT1VSQ0UpOwotICAgIGNhaXJvX3NldF9zb3VyY2Vfc3VyZmFjZShjb250ZXh0LCBt
X2RyYWdJbWFnZS5nZXQoKSwgMCwgMCk7Ci0gICAgY2Fpcm9fZmlsbChjb250ZXh0KTsKLX0KLQog
dm9pZCBEcmFnQ2xpZW50OjpkcmFnQ29udHJvbGxlckRlc3Ryb3llZCgpCiB7CiAgICAgZGVsZXRl
IHRoaXM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EcmFn
Q2xpZW50R3RrLmggYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EcmFnQ2xpZW50
R3RrLmgKaW5kZXggNDEzNWVhMzZkZTM2ZjNlYzY2NmM1YzM4MzAzZmEyNWJiNzQ1MDdkZi4uNTU4
NzZjNDZhNjI4Y2JkODQzOTViZmZkYmUzMWU3MDUwOGQyM2I3NCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHJhZ0NsaWVudEd0ay5oCisrKyBiL1NvdXJjZS9X
ZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0RyYWdDbGllbnRHdGsuaApAQCAtMzEsOCArMzEsOCBA
QAogI2RlZmluZSBEcmFnQ2xpZW50R3RrX2gKIAogI2luY2x1ZGUgIkRyYWdDbGllbnQuaCIKKyNp
bmNsdWRlICJEcmFnSWNvbi5oIgogI2luY2x1ZGUgIkdSZWZQdHIuaCIKLSNpbmNsdWRlICJSZWZQ
dHJDYWlyby5oIgogCiB0eXBlZGVmIHN0cnVjdCBfV2ViS2l0V2ViVmlldyBXZWJLaXRXZWJWaWV3
OwogCkBAIC01MywxMyArNTMsMTAgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAKICAgICAgICAgdmly
dHVhbCB2b2lkIGRyYWdDb250cm9sbGVyRGVzdHJveWVkKCk7CiAKLSAgICAgICAgdm9pZCBkcmF3
RHJhZ0ljb25XaW5kb3coR3RrV2lkZ2V0KiwgY2Fpcm9fdCopOwotCiAgICAgcHJpdmF0ZToKICAg
ICAgICAgV2ViS2l0V2ViVmlldyogbV93ZWJWaWV3OwogICAgICAgICBXZWJDb3JlOjpJbnRQb2lu
dCBtX3N0YXJ0UG9zOwotICAgICAgICBHdGtXaWRnZXQqIG1fZHJhZ0ljb25XaW5kb3c7Ci0gICAg
ICAgIFJlZlB0cjxjYWlyb19zdXJmYWNlX3Q+IG1fZHJhZ0ltYWdlOworICAgICAgICBXZWJDb3Jl
OjpEcmFnSWNvbiBtX2RyYWdJY29uOwogICAgIH07CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRleCBiODA3M2Y1
NGNiZTEyNjBiZThiYzUxNjg1NTE3ZmYyMzUxMDUzYmE4Li5hYTkwNTYzMWJkZTE5Y2M2ZjczYjU0
OGU0MDEyNWJjMzA3ODUyNmQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cK
KysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDYgQEAKKzIwMTEtMTAt
MDMgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPiBhbmQgTWFydGlu
IFJvYmluc29uICA8bXJvYmluc29uQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gSW1wbGVt
ZW50IGRyYWcgYW5kIGRyb3Agc3VwcG9ydCBpbiBXZWJLaXQyCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02MzcwNgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogR05VbWFrZWZpbGUuYW06IEFkZCBuZXcgZmls
ZXMgdG8gY29tcGlsYXRpb24uCisgICAgICAgICogU2hhcmVkL2d0ay9Bcmd1bWVudENvZGVyc0d0
ay5jcHA6IEFkZGVkLgorICAgICAgICAoQ29yZUlQQzo6ZW5jb2RlSW1hZ2UpOiBFbmNvZGUgYSBH
ZGtQaXhidWYuCisgICAgICAgIChDb3JlSVBDOjpkZWNvZGVJbWFnZSk6IERlY29kZSBhIEdka1Bp
eGJ1Zi4KKyAgICAgICAgKENvcmVJUEM6OmVuY29kZURhdGFPYmplY3QpOiBFbmNvZGUgYSBEYXRh
T2JqZWN0R3RrLgorICAgICAgICAoQ29yZUlQQzo6ZGVjb2RlRGF0YU9iamVjdCk6IERlY29kZSBh
IERhdGFPYmplY3RHdGsuCisgICAgICAgIChDb3JlSVBDOjo6OmVuY29kZSk6IEVuY29kZSBEcmFn
RGF0YS4KKyAgICAgICAgKENvcmVJUEM6Ojo6ZGVjb2RlKTogRGVjb2RlIERyYWdEYXRhLgorICAg
ICAgICAqIFNoYXJlZC9ndGsvQXJndW1lbnRDb2RlcnNHdGsuaDoKKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL2d0ay9QYWdlQ2xpZW50SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGll
bnRJbXBsOjpzdGFydERyYWcpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VDbGll
bnRJbXBsLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2Uu
Y3BwOgorICAgICAgICAod2Via2l0X3dlYl92aWV3X2Jhc2VfaW5pdCk6IFNldCB0aGUgdmlldyBh
cyBhIHBvdGVudGlhbCBkcm9wIGRlc3RpbmF0aW9uLgorICAgICAgICAod2Via2l0V2ViVmlld0Jh
c2VEcmFnRGF0YUdldCk6IEFkZGVkLCBkZWxlZ2F0ZSB0byBHdGtEcmFnQW5kRHJvcEhlbHBlci4K
KyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlRHJhZ0VuZCk6IERpdHRvLgorICAgICAgICAod2Vi
a2l0V2ViVmlld0Jhc2VEcmFnRGF0YVJlY2VpdmVkKTogRGl0dG8uCisgICAgICAgICh3ZWJraXRX
ZWJWaWV3QmFzZURyYWdFbnRlcik6IERpdHRvLgorICAgICAgICAod2Via2l0V2ViVmlld0Jhc2VE
cmFnTW90aW9uKTogRGl0dG8uCisgICAgICAgIChkb0RyYWdMZWF2ZUxhdGVyKTogRGl0dG8uCisg
ICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZURyYWdMZWF2ZSk6IERpdHRvLgorICAgICAgICAod2Vi
a2l0V2ViVmlld0Jhc2VEcmFnRHJvcCk6IERpdHRvLgorICAgICAgICAod2Via2l0X3dlYl92aWV3
X2Jhc2VfY2xhc3NfaW5pdCk6IE92ZXJyaWRlIEd0a1dpZGdldCBkcmFnIGFuZCBkcm9wIG1ldGhv
ZHMuCisgICAgICAgICh3ZWJraXRXZWJWaWV3QmFzZVN0YXJ0RHJhZyk6IENhbGxzIGd0a19kcmFn
X2JlZ2luKCkgdG8gc3RhcnQgYSBkcmFnIG9wZXJhdGlvbi4KKyAgICAgICAgKiBVSVByb2Nlc3Mv
QVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaDogQWRkIHdlYmtpdFdlYlZpZXdCYXNl
U3RhcnREcmFnKCkuCisgICAgICAgICogVUlQcm9jZXNzL1BhZ2VDbGllbnQuaDogQWRkIHN0YXJ0
RHJhZygpLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAo
V2ViS2l0OjpXZWJQYWdlUHJveHk6OnBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlvbik6IFNoYXJl
IHRoZSBRdCB2ZXJzaW9uLgorICAgICAgICAqIFVJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluOgorICAgICAgICAqIFdl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRHJhZ0NsaWVudC5jcHA6CisgICAgICAgICogV2Vi
UHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9ndGsvV2ViRHJhZ0NsaWVudEd0ay5jcHA6IEFkZGVkLgor
ICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDogQWRkIGRyYWcgc3VwcG9y
dCBmb3IgR1RLKy4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oOiBEaXR0
by4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbjogRGl0
dG8uCisKIDIwMTEtMTAtMDUgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+
CiAKICAgICAgICAgcjk2NzcwIGJyb2tlIGJpbmFyeSBjb21wYXRpYmlsaXR5IHdpdGggU2FmYXJp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9HTlVtYWtlZmlsZS5hbSBiL1NvdXJjZS9XZWJL
aXQyL0dOVW1ha2VmaWxlLmFtCmluZGV4IDJkZmExOWQxNDg1YzhjODk1MjdiMGU2YTVjODkzMzA3
MzE4Yjc1N2MuLmY2ZmJiZDA4OWFkMDM0YTdiZDZkYjNiZjM2ZjE2NDVkYzdiNmVkZTQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL0dOVW1ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9XZWJLaXQy
L0dOVW1ha2VmaWxlLmFtCkBAIC0yODIsNiArMjgyLDggQEAgbGlid2Via2l0Mmd0a19AV0VCS0lU
R1RLX0FQSV9NQUpPUl9WRVJTSU9OQF9AV0VCS0lUR1RLX0FQSV9NSU5PUl9WRVJTSU9OQF9sYV9T
T1UKIAlTb3VyY2UvV2ViS2l0Mi9TaGFyZWQvRm9udFNtb290aGluZ0xldmVsLmggXAogCVNvdXJj
ZS9XZWJLaXQyL1NoYXJlZC9jYWlyby9MYXllclRyZWVDb250ZXh0Q2Fpcm8uY3BwIFwKIAlTb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvY2Fpcm8vU2hhcmVhYmxlQml0bWFwQ2Fpcm8uY3BwIFwKKwlTb3Vy
Y2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL0FyZ3VtZW50Q29kZXJzR3RrLmggXAorCVNvdXJjZS9XZWJL
aXQyL1NoYXJlZC9ndGsvQXJndW1lbnRDb2RlcnNHdGsuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9T
aGFyZWQvZ3RrL05hdGl2ZVdlYktleWJvYXJkRXZlbnRHdGsuY3BwIFwKIAlTb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvZ3RrL05hdGl2ZVdlYk1vdXNlRXZlbnRHdGsuY3BwIFwKIAlTb3VyY2UvV2ViS2l0
Mi9TaGFyZWQvZ3RrL05hdGl2ZVdlYldoZWVsRXZlbnRHdGsuY3BwIFwKQEAgLTc0Nyw2ICs3NDks
NyBAQCBsaWJ3ZWJraXQyZ3RrX0BXRUJLSVRHVEtfQVBJX01BSk9SX1ZFUlNJT05AX0BXRUJLSVRH
VEtfQVBJX01JTk9SX1ZFUlNJT05AX2xhX1NPVQogCVNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
UmVzb3VyY2VDYWNoZS9XZWJSZXNvdXJjZUNhY2hlTWFuYWdlci5oIFwKIAlTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1Jlc291cmNlQ2FjaGUvV2ViUmVzb3VyY2VDYWNoZU1hbmFnZXIuY3BwIFwK
IAlTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJDb250ZXh0
TWVudUNsaWVudEd0ay5jcHAgXAorCVNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1
cHBvcnQvZ3RrL1dlYkRyYWdDbGllbnRHdGsuY3BwIFwKIAlTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJFZGl0b3JDbGllbnRHdGsuY3BwIFwKIAlTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJFcnJvcnNHdGsuY3BwIFwK
IAlTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJGcmFtZU5l
dHdvcmtpbmdDb250ZXh0LmggXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0
ay9Bcmd1bWVudENvZGVyc0d0ay5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL0FyZ3Vt
ZW50Q29kZXJzR3RrLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wY2ZiZDRlYzRiNmQxODY0YmQ2YWJkNWIwMThl
NjQxMDRlMWE1ZmU1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL2d0
ay9Bcmd1bWVudENvZGVyc0d0ay5jcHAKQEAgLTAsMCArMSwyMTkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkFyZ3VtZW50Q29kZXJzR3RrLmgiCisKKyNpbmNsdWRlICJTaGFyZWFibGVCaXRt
YXAuaCIKKyNpbmNsdWRlICJXZWJDb3JlQXJndW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlIDxXZWJD
b3JlL0RhdGFPYmplY3RHdGsuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0RyYWdEYXRhLmg+CisjaW5j
bHVkZSA8V2ViQ29yZS9HcmFwaGljc0NvbnRleHQuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL0d0a1Zl
cnNpb25pbmcuaD4KKyNpbmNsdWRlIDxXZWJDb3JlL1BsYXRmb3JtQ29udGV4dENhaXJvLmg+CisK
K3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworbmFt
ZXNwYWNlIENvcmVJUEMgeworCitzdGF0aWMgdm9pZCBlbmNvZGVJbWFnZShBcmd1bWVudEVuY29k
ZXIqIGVuY29kZXIsIGNvbnN0IEdka1BpeGJ1ZiogcGl4YnVmKQoreworICAgIEludFNpemUgaW1h
Z2VTaXplKGdka19waXhidWZfZ2V0X3dpZHRoKHBpeGJ1ZiksIGdka19waXhidWZfZ2V0X2hlaWdo
dChwaXhidWYpKTsKKyAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSBTaGFyZWFi
bGVCaXRtYXA6OmNyZWF0ZVNoYXJlYWJsZShpbWFnZVNpemUsIFNoYXJlYWJsZUJpdG1hcDo6U3Vw
cG9ydHNBbHBoYSk7CisgICAgT3duUHRyPEdyYXBoaWNzQ29udGV4dD4gZ3JhcGhpY3NDb250ZXh0
ID0gYml0bWFwLT5jcmVhdGVHcmFwaGljc0NvbnRleHQoKTsKKworICAgIGNhaXJvX3QqIGNyID0g
Z3JhcGhpY3NDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKTsKKyAgICBnZGtfY2Fpcm9f
c2V0X3NvdXJjZV9waXhidWYoY3IsIHBpeGJ1ZiwgMCwgMCk7CisgICAgY2Fpcm9fcGFpbnQoY3Ip
OworCisgICAgU2hhcmVhYmxlQml0bWFwOjpIYW5kbGUgaGFuZGxlOworICAgIGJpdG1hcC0+Y3Jl
YXRlSGFuZGxlKGhhbmRsZSk7CisKKyAgICBlbmNvZGVyLT5lbmNvZGUoaGFuZGxlKTsKK30KKwor
c3RhdGljIGJvb2wgZGVjb2RlSW1hZ2UoQXJndW1lbnREZWNvZGVyKiBkZWNvZGVyLCBHUmVmUHRy
PEdka1BpeGJ1Zj4mIHBpeGJ1ZikKK3sKKyAgICBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSBoYW5k
bGU7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoaGFuZGxlKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0bWFwID0gU2hhcmVhYmxlQml0
bWFwOjpjcmVhdGUoaGFuZGxlKTsKKyAgICBpZiAoIWJpdG1hcCkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IGJpdG1hcC0+Y3JlYXRlSW1hZ2UoKTsK
KyAgICBpZiAoIWltYWdlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBjYWlyb19zdXJm
YWNlX3QqIHN1cmZhY2UgPSBpbWFnZS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKKyAg
ICBpZiAoIXN1cmZhY2UpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHBpeGJ1ZiA9IGFk
b3B0R1JlZihnZGtfcGl4YnVmX2dldF9mcm9tX3N1cmZhY2Uoc3VyZmFjZSwgMCwgMCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhaXJvX2ltYWdl
X3N1cmZhY2VfZ2V0X3dpZHRoKHN1cmZhY2UpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KHN1
cmZhY2UpKSk7CisgICAgaWYgKCFwaXhidWYpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IHJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZCBlbmNvZGVEYXRhT2JqZWN0KEFyZ3VtZW50
RW5jb2RlciogZW5jb2RlciwgY29uc3QgRGF0YU9iamVjdEd0ayogZGF0YU9iamVjdCkKK3sKKyAg
ICBib29sIGhhc1RleHQgPSBkYXRhT2JqZWN0LT5oYXNUZXh0KCk7CisgICAgZW5jb2Rlci0+ZW5j
b2RlKGhhc1RleHQpOworICAgIGlmIChoYXNUZXh0KQorICAgICAgICBlbmNvZGVyLT5lbmNvZGUo
ZGF0YU9iamVjdC0+dGV4dCgpKTsKKworICAgIGJvb2wgaGFzTWFya3VwID0gZGF0YU9iamVjdC0+
aGFzTWFya3VwKCk7CisgICAgZW5jb2Rlci0+ZW5jb2RlKGhhc01hcmt1cCk7CisgICAgaWYgKGhh
c01hcmt1cCkKKyAgICAgICAgZW5jb2Rlci0+ZW5jb2RlKGRhdGFPYmplY3QtPm1hcmt1cCgpKTsK
KworICAgIGJvb2wgaGFzVVJMID0gZGF0YU9iamVjdC0+aGFzVVJMKCk7CisgICAgZW5jb2Rlci0+
ZW5jb2RlKGhhc1VSTCk7CisgICAgaWYgKGhhc1VSTCkKKyAgICAgICAgZW5jb2Rlci0+ZW5jb2Rl
KGRhdGFPYmplY3QtPnVybCgpLnN0cmluZygpKTsKKworICAgIGJvb2wgaGFzVVJJTGlzdCA9IGRh
dGFPYmplY3QtPmhhc1VSSUxpc3QoKTsKKyAgICBlbmNvZGVyLT5lbmNvZGUoaGFzVVJJTGlzdCk7
CisgICAgaWYgKGhhc1VSSUxpc3QpCisgICAgICAgIGVuY29kZXItPmVuY29kZShkYXRhT2JqZWN0
LT51cmlMaXN0KCkpOworCisgICAgYm9vbCBoYXNJbWFnZSA9IGRhdGFPYmplY3QtPmhhc0ltYWdl
KCk7CisgICAgZW5jb2Rlci0+ZW5jb2RlKGhhc0ltYWdlKTsKKyAgICBpZiAoaGFzSW1hZ2UpCisg
ICAgICAgIGVuY29kZUltYWdlKGVuY29kZXIsIGRhdGFPYmplY3QtPmltYWdlKCkpOworfQorCitz
dGF0aWMgYm9vbCBkZWNvZGVEYXRhT2JqZWN0KEFyZ3VtZW50RGVjb2RlciogZGVjb2RlciwgUmVm
UHRyPERhdGFPYmplY3RHdGs+JiBkYXRhT2JqZWN0KQoreworICAgIFJlZlB0cjxEYXRhT2JqZWN0
R3RrPiBkYXRhID0gRGF0YU9iamVjdEd0azo6Y3JlYXRlKCk7CisKKyAgICBib29sIGhhc1RleHQ7
CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoaGFzVGV4dCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBpZiAoaGFzVGV4dCkgeworICAgICAgICBTdHJpbmcgdGV4dDsKKyAgICAgICAgaWYg
KCFkZWNvZGVyLT5kZWNvZGUodGV4dCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIGRhdGEtPnNldFRleHQodGV4dCk7CisgICAgfQorCisgICAgYm9vbCBoYXNNYXJrdXA7Cisg
ICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoaGFzTWFya3VwKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGlmIChoYXNNYXJrdXApIHsKKyAgICAgICAgU3RyaW5nIG1hcmt1cDsKKyAgICAgICAg
aWYgKCFkZWNvZGVyLT5kZWNvZGUobWFya3VwKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgZGF0YS0+c2V0TWFya3VwKG1hcmt1cCk7CisgICAgfQorCisgICAgYm9vbCBoYXNV
Ukw7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoaGFzVVJMKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGlmIChoYXNVUkwpIHsKKyAgICAgICAgU3RyaW5nIHVybDsKKyAgICAgICAgaWYg
KCFkZWNvZGVyLT5kZWNvZGUodXJsKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgZGF0YS0+c2V0VVJMKEtVUkwoS1VSTCgpLCB1cmwpLCBTdHJpbmcoKSk7CisgICAgfQorCisg
ICAgYm9vbCBoYXNVUklMaXN0OworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGhhc1VSSUxpc3Qp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGhhc1VSSUxpc3QpIHsKKyAgICAgICAg
U3RyaW5nIHVyaUxpc3Q7CisgICAgICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKHVyaUxpc3QpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBkYXRhLT5zZXRVUklMaXN0KHVyaUxp
c3QpOworICAgIH0KKworICAgIGJvb2wgaGFzSW1hZ2U7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNv
ZGUoaGFzSW1hZ2UpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGhhc0ltYWdlKSB7
CisgICAgICAgIEdSZWZQdHI8R2RrUGl4YnVmPiBpbWFnZTsKKyAgICAgICAgaWYgKCFkZWNvZGVJ
bWFnZShkZWNvZGVyLCBpbWFnZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IGRhdGEtPnNldEltYWdlKGltYWdlLmdldCgpKTsKKyAgICB9CisKKyAgICBkYXRhT2JqZWN0ID0g
ZGF0YTsKKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEFyZ3VtZW50Q29kZXI8RHJhZ0Rh
dGE+OjplbmNvZGUoQXJndW1lbnRFbmNvZGVyKiBlbmNvZGVyLCBjb25zdCBEcmFnRGF0YSYgZHJh
Z0RhdGEpCit7CisgICAgZW5jb2Rlci0+ZW5jb2RlKGRyYWdEYXRhLmNsaWVudFBvc2l0aW9uKCkp
OworICAgIGVuY29kZXItPmVuY29kZShkcmFnRGF0YS5nbG9iYWxQb3NpdGlvbigpKTsKKyAgICBl
bmNvZGVyLT5lbmNvZGUoc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGRyYWdEYXRhLmRyYWdnaW5nU291
cmNlT3BlcmF0aW9uTWFzaygpKSk7CisgICAgZW5jb2Rlci0+ZW5jb2RlKHN0YXRpY19jYXN0PHVp
bnQ2NF90PihkcmFnRGF0YS5mbGFncygpKSk7CisKKyAgICBEYXRhT2JqZWN0R3RrKiBwbGF0Zm9y
bURhdGEgPSBkcmFnRGF0YS5wbGF0Zm9ybURhdGEoKTsKKyAgICBlbmNvZGVyLT5lbmNvZGUoc3Rh
dGljX2Nhc3Q8Ym9vbD4ocGxhdGZvcm1EYXRhKSk7CisgICAgaWYgKHBsYXRmb3JtRGF0YSkKKyAg
ICAgICAgZW5jb2RlRGF0YU9iamVjdChlbmNvZGVyLCBwbGF0Zm9ybURhdGEpOworfQorCitib29s
IEFyZ3VtZW50Q29kZXI8RHJhZ0RhdGE+OjpkZWNvZGUoQXJndW1lbnREZWNvZGVyKiBkZWNvZGVy
LCBEcmFnRGF0YSYgZHJhZ0RhdGEpCit7CisgICAgSW50UG9pbnQgY2xpZW50UG9zaXRpb247Cisg
ICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoY2xpZW50UG9zaXRpb24pKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBJbnRQb2ludCBnbG9iYWxQb3NpdGlvbjsKKyAgICBpZiAoIWRlY29kZXIt
PmRlY29kZShnbG9iYWxQb3NpdGlvbikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHVp
bnQ2NF90IHNvdXJjZU9wZXJhdGlvbk1hc2s7CisgICAgaWYgKCFkZWNvZGVyLT5kZWNvZGUoc291
cmNlT3BlcmF0aW9uTWFzaykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHVpbnQ2NF90
IGZsYWdzOworICAgIGlmICghZGVjb2Rlci0+ZGVjb2RlKGZsYWdzKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgYm9vbCBoYXNQbGF0Zm9ybURhdGE7CisgICAgaWYgKCFkZWNvZGVyLT5k
ZWNvZGUoaGFzUGxhdGZvcm1EYXRhKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUmVm
UHRyPERhdGFPYmplY3RHdGs+IHBsYXRmb3JtRGF0YTsKKyAgICBpZiAoaGFzUGxhdGZvcm1EYXRh
KSB7CisgICAgICAgIGlmICghZGVjb2RlRGF0YU9iamVjdChkZWNvZGVyLCBwbGF0Zm9ybURhdGEp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGRyYWdEYXRhID0gRHJh
Z0RhdGEocGxhdGZvcm1EYXRhLnJlbGVhc2UoKS5sZWFrUmVmKCksIGNsaWVudFBvc2l0aW9uLCBn
bG9iYWxQb3NpdGlvbiwgc3RhdGljX2Nhc3Q8RHJhZ09wZXJhdGlvbj4oc291cmNlT3BlcmF0aW9u
TWFzayksCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxEcmFnQXBwbGljYXRp
b25GbGFncz4oZmxhZ3MpKTsKKworICAgIHJldHVybiB0cnVlOworfQorCit9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQvZ3RrL0FyZ3VtZW50Q29kZXJzR3RrLmggYi9Tb3VyY2Uv
V2ViS2l0Mi9TaGFyZWQvZ3RrL0FyZ3VtZW50Q29kZXJzR3RrLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODJmNDZk
MmQ4OWI1OWQ5ZTZjYjBjMmIzNGQyOGUyZjc1MTk0MDQwNQotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1NoYXJlZC9ndGsvQXJndW1lbnRDb2RlcnNHdGsuaApAQCAtMCwwICsxLDQ1
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
Zm5kZWYgQXJndW1lbnRDb2RlcnNHdGtfaAorI2RlZmluZSBBcmd1bWVudENvZGVyc0d0a19oCisK
KyNpbmNsdWRlICJBcmd1bWVudENvZGVycy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFz
cyBEYXRhT2JqZWN0R3RrOworY2xhc3MgRHJhZ0RhdGE7Cit9CisKK25hbWVzcGFjZSBDb3JlSVBD
IHsKKwordGVtcGxhdGU8PiBzdHJ1Y3QgQXJndW1lbnRDb2RlcjxXZWJDb3JlOjpEcmFnRGF0YT4g
eworICAgIHN0YXRpYyB2b2lkIGVuY29kZShBcmd1bWVudEVuY29kZXIqLCBjb25zdCBXZWJDb3Jl
OjpEcmFnRGF0YSYpOworICAgIHN0YXRpYyBib29sIGRlY29kZShBcmd1bWVudERlY29kZXIqLCBX
ZWJDb3JlOjpEcmFnRGF0YSYpOworfTsKKworfSAvLyBuYW1lc3BhY2UgQ29yZUlQQworCisjZW5k
aWYgLy8gQXJndW1lbnRDb2RlcnNHdGtfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuY3BwCmluZGV4IDlhM2ViYmJkOGE5ZjNmYzZlNmI3
NDI5Mjc4ZDMzOTY0OTAxNGUzM2IuLmYwM2JhZWQyYWUwNGM2MWU0NTlhMTVmY2RkNzdlNmMwZjA4
MTAyMzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1BhZ2VD
bGllbnRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9QYWdl
Q2xpZW50SW1wbC5jcHAKQEAgLTI4NSw0ICsyODUsOSBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpj
b3VudFN0cmluZ01hdGNoZXNJbkN1c3RvbVJlcHJlc2VudGF0aW9uKGNvbnN0IFN0cmluZyYsIEZp
bgogICAgIG5vdEltcGxlbWVudGVkKCk7CiB9CiAKK3ZvaWQgUGFnZUNsaWVudEltcGw6OnN0YXJ0
RHJhZyhjb25zdCBXZWJDb3JlOjpEcmFnRGF0YSYgZHJhZ0RhdGEsIFBhc3NSZWZQdHI8U2hhcmVh
YmxlQml0bWFwPiBkcmFnSW1hZ2UpCit7CisgICAgd2Via2l0V2ViVmlld0Jhc2VTdGFydERyYWco
V0VCS0lUX1dFQl9WSUVXX0JBU0UobV92aWV3V2lkZ2V0KSwgZHJhZ0RhdGEsIGRyYWdJbWFnZSk7
Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNsaWVudEltcGwuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJv
Y2Vzcy9BUEkvZ3RrL1BhZ2VDbGllbnRJbXBsLmgKaW5kZXggM2EzOTkwNjAxZjc1ZDhlZDUwYTk4
MDk4NDc5YjFiODk2MDZhOTdmMC4uYWNkMzI3ZWIzNDQ3NTRiODEzNjRkZDFjMDRmNmRlN2MxYjEw
MDNmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsvUGFnZUNs
aWVudEltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9QYWdlQ2xp
ZW50SW1wbC5oCkBAIC04Nyw2ICs4Nyw3IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGdl
dEVkaXRvckNvbW1hbmRzRm9yS2V5RXZlbnQoY29uc3QgTmF0aXZlV2ViS2V5Ym9hcmRFdmVudCYs
IGNvbnN0IEF0b21pY1N0cmluZyYsIFZlY3RvcjxXVEY6OlN0cmluZz4mKTsKICAgICB2aXJ0dWFs
IHZvaWQgZmluZFN0cmluZ0luQ3VzdG9tUmVwcmVzZW50YXRpb24oY29uc3QgU3RyaW5nJiwgRmlu
ZE9wdGlvbnMsIHVuc2lnbmVkKTsKICAgICB2aXJ0dWFsIHZvaWQgY291bnRTdHJpbmdNYXRjaGVz
SW5DdXN0b21SZXByZXNlbnRhdGlvbihjb25zdCBTdHJpbmcmLCBGaW5kT3B0aW9ucywgdW5zaWdu
ZWQpOworICAgIHZpcnR1YWwgdm9pZCBzdGFydERyYWcoY29uc3QgV2ViQ29yZTo6RHJhZ0RhdGEm
LCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gZHJhZ0ltYWdlKTsKIAogI2lmIFVTRShBQ0NF
TEVSQVRFRF9DT01QT1NJVElORykKICAgICB2aXJ0dWFsIHZvaWQgcGFnZURpZEVudGVyQWNjZWxl
cmF0ZWRDb21wb3NpdGluZygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0V2ViVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRXZWJWaWV3LmNwcAppbmRleCAyYzMzZjMzN2M5NDIzZjFlMDIzODMyZDE0NTIz
M2RhMTlmNDcyYmNiLi5jOTg5ZmIwYThhOGY5Y2Q1YjcyZmMxZGYwZjMwMWJmOTM0MzYwYWU0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3
LmNwcApAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgIldlYktpdFdlYlZpZXdCYXNlUHJpdmF0
ZS5oIgogI2luY2x1ZGUgIldlYktpdFByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHku
aCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RyYWdJY29uLmg+CiAjaW5jbHVkZSA8V2ViS2l0Mi9XS0Jh
c2UuaD4KICNpbmNsdWRlIDxXZWJLaXQyL1dLUmV0YWluUHRyLmg+CiAjaW5jbHVkZSA8V2ViS2l0
Mi9XS1VSTC5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0V2ViVmlld0Jhc2UuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9ndGsv
V2ViS2l0V2ViVmlld0Jhc2UuY3BwCmluZGV4IDA5MWVjNGU0NjRlNDQ2ODEzMjNkYzNhNDZlNWFi
Y2Q4ODBkYjk3YTYuLjZkZGU2MjMyODA5MDA1NzQ1NGE3OWVmNWY4NmVhNzEyOTc0NmNmYWUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdC
YXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJW
aWV3QmFzZS5jcHAKQEAgLTI4LDIwICsyOCwyOSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIldlYktpdFdlYlZpZXdCYXNlLmgiCiAKKyNpbmNsdWRlICJDbGlwYm9hcmRHdGsuaCIK
KyNpbmNsdWRlICJDbGlwYm9hcmRVdGlsaXRpZXNHdGsuaCIKKyNpbmNsdWRlICJEYXRhT2JqZWN0
R3RrLmgiCisjaW5jbHVkZSAiRHJhZ0RhdGEuaCIKICNpbmNsdWRlICJEcmF3aW5nQXJlYVByb3h5
SW1wbC5oIgogI2luY2x1ZGUgIkdPd25QdHJHdGsuaCIKICNpbmNsdWRlICJHdGtDbGlja0NvdW50
ZXIuaCIKKyNpbmNsdWRlICJHdGtVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJHdGtWZXJzaW9uaW5n
LmgiCiAjaW5jbHVkZSAiTmF0aXZlV2ViS2V5Ym9hcmRFdmVudC5oIgogI2luY2x1ZGUgIk5hdGl2
ZVdlYk1vdXNlRXZlbnQuaCIKICNpbmNsdWRlICJOYXRpdmVXZWJXaGVlbEV2ZW50LmgiCiAjaW5j
bHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJQYWdlQ2xpZW50SW1wbC5oIgorI2lu
Y2x1ZGUgIlBhc3RlYm9hcmRIZWxwZXIuaCIKICNpbmNsdWRlICJSZWZQdHJDYWlyby5oIgogI2lu
Y2x1ZGUgIldlYkNvbnRleHQuaCIKICNpbmNsdWRlICJXZWJFdmVudEZhY3RvcnkuaCIKICNpbmNs
dWRlICJXZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJQYWdlUHJveHku
aCIKKyNpbmNsdWRlIDxXZWJDb3JlL0RyYWdJY29uLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9HdGtE
cmFnQW5kRHJvcEhlbHBlci5oPgorI2luY2x1ZGUgPFdlYkNvcmUvUmVmUHRyQ2Fpcm8uaD4KICNp
bmNsdWRlIDxXZWJDb3JlL1JlZ2lvbi5oPgogI2luY2x1ZGUgPFdlYktpdDIvV0tDb250ZXh0Lmg+
CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgpAQCAtNTcsNiArNjYsOCBAQCBzdHJ1Y3Qg
X1dlYktpdFdlYlZpZXdCYXNlUHJpdmF0ZSB7CiAgICAgR3RrSU1Db250ZXh0KiBpbUNvbnRleHQ7
CiAgICAgR3RrQ2xpY2tDb3VudGVyIGNsaWNrQ291bnRlcjsKICAgICBDU3RyaW5nIHRvb2x0aXBU
ZXh0OworICAgIEd0a0RyYWdBbmREcm9wSGVscGVyIGRyYWdBbmREcm9wSGVscGVyOworICAgIERy
YWdJY29uIGRyYWdJY29uOwogfTsKIAogR19ERUZJTkVfVFlQRShXZWJLaXRXZWJWaWV3QmFzZSwg
d2Via2l0X3dlYl92aWV3X2Jhc2UsIEdUS19UWVBFX0NPTlRBSU5FUikKQEAgLTEzMiwxMSArMTQz
LDE4IEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19iYXNlX2luaXQoV2ViS2l0V2ViVmll
d0Jhc2UqIHdlYmtpdFdlYlZpZXdCYXNlKQogICAgIHByaXYtPmlzUGFnZUFjdGl2ZSA9IFRSVUU7
CiAgICAgcHJpdi0+c2hvdWxkRm9yd2FyZE5leHRLZXlFdmVudCA9IEZBTFNFOwogCi0gICAgZ3Rr
X3dpZGdldF9zZXRfZG91YmxlX2J1ZmZlcmVkKEdUS19XSURHRVQod2Via2l0V2ViVmlld0Jhc2Up
LCBGQUxTRSk7Ci0gICAgZ3RrX3dpZGdldF9zZXRfY2FuX2ZvY3VzKEdUS19XSURHRVQod2Via2l0
V2ViVmlld0Jhc2UpLCBUUlVFKTsKKyAgICBHdGtXaWRnZXQqIHZpZXdXaWRnZXQgPSBHVEtfV0lE
R0VUKHdlYmtpdFdlYlZpZXdCYXNlKTsKKyAgICBndGtfd2lkZ2V0X3NldF9kb3VibGVfYnVmZmVy
ZWQodmlld1dpZGdldCwgRkFMU0UpOworICAgIGd0a193aWRnZXRfc2V0X2Nhbl9mb2N1cyh2aWV3
V2lkZ2V0LCBUUlVFKTsKICAgICBwcml2LT5pbUNvbnRleHQgPSBndGtfaW1fbXVsdGljb250ZXh0
X25ldygpOwogCi0gICAgcHJpdi0+cGFnZUNsaWVudCA9IFBhZ2VDbGllbnRJbXBsOjpjcmVhdGUo
R1RLX1dJREdFVCh3ZWJraXRXZWJWaWV3QmFzZSkpOworICAgIHByaXYtPnBhZ2VDbGllbnQgPSBQ
YWdlQ2xpZW50SW1wbDo6Y3JlYXRlKHZpZXdXaWRnZXQpOworCisgICAgcHJpdi0+ZHJhZ0FuZERy
b3BIZWxwZXIuc2V0V2lkZ2V0KHZpZXdXaWRnZXQpOworCisgICAgZ3RrX2RyYWdfZGVzdF9zZXQo
dmlld1dpZGdldCwgc3RhdGljX2Nhc3Q8R3RrRGVzdERlZmF1bHRzPigwKSwgMCwgMCwKKyAgICAg
ICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxHZGtEcmFnQWN0aW9uPihHREtfQUNUSU9OX0NP
UFkgfCBHREtfQUNUSU9OX01PVkUgfCBHREtfQUNUSU9OX0xJTksgfCBHREtfQUNUSU9OX1BSSVZB
VEUpKTsKKyAgICBndGtfZHJhZ19kZXN0X3NldF90YXJnZXRfbGlzdCh2aWV3V2lkZ2V0LCBQYXN0
ZWJvYXJkSGVscGVyOjpkZWZhdWx0UGFzdGVib2FyZEhlbHBlcigpLT50YXJnZXRMaXN0KCkpOwog
fQogCiBzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0V2ViVmlld0Jhc2VEcmF3KEd0a1dpZGdldCogd2lk
Z2V0LCBjYWlyb190KiBjcikKQEAgLTI5Myw2ICszMTEsODIgQEAgc3RhdGljIGdib29sZWFuIHdl
YmtpdFdlYlZpZXdCYXNlUXVlcnlUb29sdGlwKEd0a1dpZGdldCogd2lkZ2V0LCBnaW50IHgsIGdp
bnQgeSwKICAgICByZXR1cm4gVFJVRTsKIH0KIAorc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0Jh
c2VEcmFnRGF0YUdldChHdGtXaWRnZXQqIHdpZGdldCwgR2RrRHJhZ0NvbnRleHQqIGNvbnRleHQs
IEd0a1NlbGVjdGlvbkRhdGEqIHNlbGVjdGlvbkRhdGEsIGd1aW50IGluZm8sIGd1aW50IHRpbWUp
Cit7CisgICAgV0VCS0lUX1dFQl9WSUVXX0JBU0Uod2lkZ2V0KS0+cHJpdi0+ZHJhZ0FuZERyb3BI
ZWxwZXIuaGFuZGxlR2V0RHJhZ0RhdGEoY29udGV4dCwgc2VsZWN0aW9uRGF0YSwgaW5mbyk7Cit9
CisKK3N0YXRpYyB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlRHJhZ0VuZChHdGtXaWRnZXQqIHdpZGdl
dCwgR2RrRHJhZ0NvbnRleHQqIGNvbnRleHQpCit7CisgICAgV2ViS2l0V2ViVmlld0Jhc2UqIHdl
YlZpZXdCYXNlID0gV0VCS0lUX1dFQl9WSUVXX0JBU0Uod2lkZ2V0KTsKKyAgICBpZiAoIXdlYlZp
ZXdCYXNlLT5wcml2LT5kcmFnQW5kRHJvcEhlbHBlci5oYW5kbGVEcmFnRW5kKGNvbnRleHQpKQor
ICAgICAgICByZXR1cm47CisKKyAgICBHZGtEZXZpY2UqIGRldmljZSA9IGdka19kcmFnX2NvbnRl
eHRfZ2V0X2RldmljZShjb250ZXh0KTsKKyAgICBpbnQgeCA9IDAsIHkgPSAwOworICAgIGdka19k
ZXZpY2VfZ2V0X3dpbmRvd19hdF9wb3NpdGlvbihkZXZpY2UsICZ4LCAmeSk7CisgICAgaW50IHhS
b290ID0gMCwgeVJvb3QgPSAwOworICAgIGdka19kZXZpY2VfZ2V0X3Bvc2l0aW9uKGRldmljZSwg
MCwgJnhSb290LCAmeVJvb3QpOworICAgIHdlYlZpZXdCYXNlLT5wcml2LT5wYWdlUHJveHktPmRy
YWdFbmRlZChJbnRQb2ludCh4LCB5KSwgSW50UG9pbnQoeFJvb3QsIHlSb290KSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2RrRHJhZ0FjdGlvblRvRHJhZ09w
ZXJhdGlvbihnZGtfZHJhZ19jb250ZXh0X2dldF9zZWxlY3RlZF9hY3Rpb24oY29udGV4dCkpKTsK
K30KKworc3RhdGljIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VEcmFnRGF0YVJlY2VpdmVkKEd0a1dp
ZGdldCogd2lkZ2V0LCBHZGtEcmFnQ29udGV4dCogY29udGV4dCwgZ2ludCB4LCBnaW50IHksIEd0
a1NlbGVjdGlvbkRhdGEqIHNlbGVjdGlvbkRhdGEsIGd1aW50IGluZm8sIGd1aW50IHRpbWUpCit7
CisgICAgV2ViS2l0V2ViVmlld0Jhc2UqIHdlYlZpZXdCYXNlID0gV0VCS0lUX1dFQl9WSUVXX0JB
U0Uod2lkZ2V0KTsKKyAgICBPd25QdHI8RHJhZ0RhdGE+IGRyYWdEYXRhKHdlYlZpZXdCYXNlLT5w
cml2LT5kcmFnQW5kRHJvcEhlbHBlci5oYW5kbGVEcmFnRGF0YVJlY2VpdmVkKGNvbnRleHQsIHNl
bGVjdGlvbkRhdGEsIGluZm8pKTsKKyAgICBpZiAoIWRyYWdEYXRhKQorICAgICAgICByZXR1cm47
CisKKyAgICB3ZWJWaWV3QmFzZS0+cHJpdi0+cGFnZVByb3h5LT5yZXNldERyYWdPcGVyYXRpb24o
KTsKKyAgICB3ZWJWaWV3QmFzZS0+cHJpdi0+cGFnZVByb3h5LT5kcmFnRW50ZXJlZChkcmFnRGF0
YS5nZXQoKSk7CisgICAgRHJhZ09wZXJhdGlvbiBvcGVyYXRpb24gPSB3ZWJWaWV3QmFzZS0+cHJp
di0+cGFnZVByb3h5LT5kcmFnT3BlcmF0aW9uKCk7CisgICAgZ2RrX2RyYWdfc3RhdHVzKGNvbnRl
eHQsIGRyYWdPcGVyYXRpb25Ub1NpbmdsZUdka0RyYWdBY3Rpb24ob3BlcmF0aW9uKSwgdGltZSk7
Cit9CisKK3N0YXRpYyBnYm9vbGVhbiB3ZWJraXRXZWJWaWV3QmFzZURyYWdNb3Rpb24oR3RrV2lk
Z2V0KiB3aWRnZXQsIEdka0RyYWdDb250ZXh0KiBjb250ZXh0LCBnaW50IHgsIGdpbnQgeSwgZ3Vp
bnQgdGltZSkKK3sKKyAgICBXZWJLaXRXZWJWaWV3QmFzZSogd2ViVmlld0Jhc2UgPSBXRUJLSVRf
V0VCX1ZJRVdfQkFTRSh3aWRnZXQpOworICAgIE93blB0cjxEcmFnRGF0YT4gZHJhZ0RhdGEod2Vi
Vmlld0Jhc2UtPnByaXYtPmRyYWdBbmREcm9wSGVscGVyLmhhbmRsZURyYWdNb3Rpb24oY29udGV4
dCwgSW50UG9pbnQoeCwgeSksIHRpbWUpKTsKKyAgICBpZiAoIWRyYWdEYXRhKQorICAgICAgICBy
ZXR1cm4gVFJVRTsKKworICAgIHdlYlZpZXdCYXNlLT5wcml2LT5wYWdlUHJveHktPmRyYWdVcGRh
dGVkKGRyYWdEYXRhLmdldCgpKTsKKyAgICBEcmFnT3BlcmF0aW9uIG9wZXJhdGlvbiA9IHdlYlZp
ZXdCYXNlLT5wcml2LT5wYWdlUHJveHktPmRyYWdPcGVyYXRpb24oKTsKKyAgICBnZGtfZHJhZ19z
dGF0dXMoY29udGV4dCwgZHJhZ09wZXJhdGlvblRvU2luZ2xlR2RrRHJhZ0FjdGlvbihvcGVyYXRp
b24pLCB0aW1lKTsKKyAgICByZXR1cm4gVFJVRTsKK30KKworc3RhdGljIHZvaWQgZHJhZ0V4aXRl
ZENhbGxiYWNrKEd0a1dpZGdldCogd2lkZ2V0LCBEcmFnRGF0YSogZHJhZ0RhdGEsIGJvb2wgZHJv
cEhhcHBlbmVkKQoreworICAgIC8vIERvbid0IGNhbGwgZHJhZ0V4aXRlZCBpZiB3ZSBoYXZlIGp1
c3QgcmVjZWl2ZWQgYSBkcmFnLWRyb3Agc2lnbmFsLiBUaGlzCisgICAgLy8gaGFwcGVucyBpbiB0
aGUgY2FzZSBvZiBhIHN1Y2Nlc3NmdWwgZHJvcCBvbnRvIHRoZSB2aWV3LgorICAgIGlmIChkcm9w
SGFwcGVuZWQpCisgICAgICAgIHJldHVybjsKKworICAgIFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJW
aWV3QmFzZSA9IFdFQktJVF9XRUJfVklFV19CQVNFKHdpZGdldCk7CisgICAgd2ViVmlld0Jhc2Ut
PnByaXYtPnBhZ2VQcm94eS0+ZHJhZ0V4aXRlZChkcmFnRGF0YSk7CisgICAgd2ViVmlld0Jhc2Ut
PnByaXYtPnBhZ2VQcm94eS0+cmVzZXREcmFnT3BlcmF0aW9uKCk7Cit9CisKK3N0YXRpYyB2b2lk
IHdlYmtpdFdlYlZpZXdCYXNlRHJhZ0xlYXZlKEd0a1dpZGdldCogd2lkZ2V0LCBHZGtEcmFnQ29u
dGV4dCogY29udGV4dCwgZ3VpbnQgdGltZSkKK3sKKyAgICBXRUJLSVRfV0VCX1ZJRVdfQkFTRSh3
aWRnZXQpLT5wcml2LT5kcmFnQW5kRHJvcEhlbHBlci5oYW5kbGVEcmFnTGVhdmUoY29udGV4dCwg
ZHJhZ0V4aXRlZENhbGxiYWNrKTsKK30KKworc3RhdGljIGdib29sZWFuIHdlYmtpdFdlYlZpZXdC
YXNlRHJhZ0Ryb3AoR3RrV2lkZ2V0KiB3aWRnZXQsIEdka0RyYWdDb250ZXh0KiBjb250ZXh0LCBn
aW50IHgsIGdpbnQgeSwgZ3VpbnQgdGltZSkKK3sKKyAgICBXZWJLaXRXZWJWaWV3QmFzZSogd2Vi
Vmlld0Jhc2UgPSBXRUJLSVRfV0VCX1ZJRVdfQkFTRSh3aWRnZXQpOworICAgIE93blB0cjxEcmFn
RGF0YT4gZHJhZ0RhdGEod2ViVmlld0Jhc2UtPnByaXYtPmRyYWdBbmREcm9wSGVscGVyLmhhbmRs
ZURyYWdEcm9wKGNvbnRleHQsIEludFBvaW50KHgsIHkpKSk7CisgICAgaWYgKCFkcmFnRGF0YSkK
KyAgICAgICAgcmV0dXJuIEZBTFNFOworCisgICAgU2FuZGJveEV4dGVuc2lvbjo6SGFuZGxlIGhh
bmRsZTsKKyAgICB3ZWJWaWV3QmFzZS0+cHJpdi0+cGFnZVByb3h5LT5wZXJmb3JtRHJhZyhkcmFn
RGF0YS5nZXQoKSwgU3RyaW5nKCksIGhhbmRsZSk7CisgICAgZ3RrX2RyYWdfZmluaXNoKGNvbnRl
eHQsIFRSVUUsIEZBTFNFLCB0aW1lKTsKKyAgICByZXR1cm4gVFJVRTsKK30KKwogc3RhdGljIHZv
aWQgd2Via2l0X3dlYl92aWV3X2Jhc2VfY2xhc3NfaW5pdChXZWJLaXRXZWJWaWV3QmFzZUNsYXNz
KiB3ZWJraXRXZWJWaWV3QmFzZUNsYXNzKQogewogICAgIEd0a1dpZGdldENsYXNzKiB3aWRnZXRD
bGFzcyA9IEdUS19XSURHRVRfQ0xBU1Mod2Via2l0V2ViVmlld0Jhc2VDbGFzcyk7CkBAIC0zMDgs
NiArNDAyLDEyIEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJfdmlld19iYXNlX2NsYXNzX2luaXQo
V2ViS2l0V2ViVmlld0Jhc2VDbGFzcyogd2Via2l0V2ViVmllCiAgICAgd2lkZ2V0Q2xhc3MtPnNj
cm9sbF9ldmVudCA9IHdlYmtpdFdlYlZpZXdCYXNlU2Nyb2xsRXZlbnQ7CiAgICAgd2lkZ2V0Q2xh
c3MtPm1vdGlvbl9ub3RpZnlfZXZlbnQgPSB3ZWJraXRXZWJWaWV3QmFzZU1vdGlvbk5vdGlmeUV2
ZW50OwogICAgIHdpZGdldENsYXNzLT5xdWVyeV90b29sdGlwID0gd2Via2l0V2ViVmlld0Jhc2VR
dWVyeVRvb2x0aXA7CisgICAgd2lkZ2V0Q2xhc3MtPmRyYWdfZW5kID0gd2Via2l0V2ViVmlld0Jh
c2VEcmFnRW5kOworICAgIHdpZGdldENsYXNzLT5kcmFnX2RhdGFfZ2V0ID0gd2Via2l0V2ViVmll
d0Jhc2VEcmFnRGF0YUdldDsKKyAgICB3aWRnZXRDbGFzcy0+ZHJhZ19tb3Rpb24gPSB3ZWJraXRX
ZWJWaWV3QmFzZURyYWdNb3Rpb247CisgICAgd2lkZ2V0Q2xhc3MtPmRyYWdfbGVhdmUgPSB3ZWJr
aXRXZWJWaWV3QmFzZURyYWdMZWF2ZTsKKyAgICB3aWRnZXRDbGFzcy0+ZHJhZ19kcm9wID0gd2Vi
a2l0V2ViVmlld0Jhc2VEcmFnRHJvcDsKKyAgICB3aWRnZXRDbGFzcy0+ZHJhZ19kYXRhX3JlY2Vp
dmVkID0gd2Via2l0V2ViVmlld0Jhc2VEcmFnRGF0YVJlY2VpdmVkOwogCiAgICAgR09iamVjdENs
YXNzKiBnb2JqZWN0Q2xhc3MgPSBHX09CSkVDVF9DTEFTUyh3ZWJraXRXZWJWaWV3QmFzZUNsYXNz
KTsKICAgICBnb2JqZWN0Q2xhc3MtPmZpbmFsaXplID0gd2Via2l0V2ViVmlld0Jhc2VGaW5hbGl6
ZTsKQEAgLTM1NSw2ICs0NTUsMzMgQEAgdm9pZCB3ZWJraXRXZWJWaWV3QmFzZVNldFRvb2x0aXBU
ZXh0KFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJWaWV3QmFzZSwgY29uc3QgY2hhcioKICAgICBndGtf
d2lkZ2V0X3RyaWdnZXJfdG9vbHRpcF9xdWVyeShHVEtfV0lER0VUKHdlYlZpZXdCYXNlKSk7CiB9
CiAKK3ZvaWQgd2Via2l0V2ViVmlld0Jhc2VTdGFydERyYWcoV2ViS2l0V2ViVmlld0Jhc2UqIHdl
YlZpZXdCYXNlLCBjb25zdCBEcmFnRGF0YSYgZHJhZ0RhdGEsIFBhc3NSZWZQdHI8U2hhcmVhYmxl
Qml0bWFwPiBkcmFnSW1hZ2UpCit7CisgICAgV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlKiBwcml2
ID0gd2ViVmlld0Jhc2UtPnByaXY7CisKKyAgICBSZWZQdHI8RGF0YU9iamVjdEd0az4gZGF0YU9i
amVjdChkcmFnRGF0YS5wbGF0Zm9ybURhdGEoKSk7CisgICAgR1JlZlB0cjxHdGtUYXJnZXRMaXN0
PiB0YXJnZXRMaXN0KFBhc3RlYm9hcmRIZWxwZXI6OmRlZmF1bHRQYXN0ZWJvYXJkSGVscGVyKCkt
PnRhcmdldExpc3RGb3JEYXRhT2JqZWN0KGRhdGFPYmplY3QuZ2V0KCkpKTsKKyAgICBHT3duUHRy
PEdka0V2ZW50PiBjdXJyZW50RXZlbnQoZ3RrX2dldF9jdXJyZW50X2V2ZW50KCkpOworICAgIEdk
a0RyYWdDb250ZXh0KiBjb250ZXh0ID0gZ3RrX2RyYWdfYmVnaW4oR1RLX1dJREdFVCh3ZWJWaWV3
QmFzZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJn
ZXRMaXN0LmdldCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZHJhZ09wZXJhdGlvblRvR2RrRHJhZ0FjdGlvbnMoZHJhZ0RhdGEuZHJhZ2dpbmdTb3VyY2VP
cGVyYXRpb25NYXNrKCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMSwgLyogYnV0dG9uICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjdXJyZW50RXZlbnQuZ2V0KCkpOworICAgIHByaXYtPmRyYWdBbmREcm9wSGVs
cGVyLnN0YXJ0ZWREcmFnKGNvbnRleHQsIGRhdGFPYmplY3QuZ2V0KCkpOworCisKKyAgICAvLyBB
IGRyYWcgc3RhcnRpbmcgc2hvdWxkIHByZXZlbnQgYSBkb3VibGUtY2xpY2sgZnJvbSBoYXBwZW5p
bmcuIFRoaXMgbWlnaHQKKyAgICAvLyBoYXBwZW4gaWYgYSBkcmFnIGlzIGZvbGxvd2VkIHZlcnkg
cXVpY2tseSBieSBhbm90aGVyIGNsaWNrIChsaWtlIGluIHRoZSBEUlQpLgorICAgIHByaXYtPmNs
aWNrQ291bnRlci5yZXNldCgpOworCisgICAgaWYgKGRyYWdJbWFnZSkgeworICAgICAgICBSZWZQ
dHI8Y2Fpcm9fc3VyZmFjZV90PiBpbWFnZShkcmFnSW1hZ2UtPmNyZWF0ZUNhaXJvU3VyZmFjZSgp
KTsKKyAgICAgICAgcHJpdi0+ZHJhZ0ljb24uc2V0SW1hZ2UoaW1hZ2UuZ2V0KCkpOworICAgICAg
ICBwcml2LT5kcmFnSWNvbi51c2VGb3JEcmFnKGNvbnRleHQpOworICAgIH0gZWxzZQorICAgICAg
ICBndGtfZHJhZ19zZXRfaWNvbl9kZWZhdWx0KGNvbnRleHQpOworfQorCiB2b2lkIHdlYmtpdFdl
YlZpZXdCYXNlRm9yd2FyZE5leHRLZXlFdmVudChXZWJLaXRXZWJWaWV3QmFzZSogd2Via2l0V2Vi
Vmlld0Jhc2UpCiB7CiAgICAgd2Via2l0V2ViVmlld0Jhc2UtPnByaXYtPnNob3VsZEZvcndhcmRO
ZXh0S2V5RXZlbnQgPSBUUlVFOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9ndGsvV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaAppbmRleCBhMzkwNjhmYzYy
OTJiYjNlOWY3OWE3MTZkMThjOTBmM2YxOTJhYjAwLi4zYTlhNDBiODY1ZGMzMTBiMWIyN2Q3MTJl
MjIwZTE1MmQzYTRmMTE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2d0ay9XZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZVByaXZhdGUuaApAQCAtNDgsNiArNDgsOCBA
QCB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlU2V0VG9vbHRpcFRleHQoV2ViS2l0V2ViVmlld0Jhc2Uq
LCBjb25zdCBjaGFyKik7CiAKIHZvaWQgd2Via2l0V2ViVmlld0Jhc2VGb3J3YXJkTmV4dEtleUV2
ZW50KFdlYktpdFdlYlZpZXdCYXNlKik7CiAKK3ZvaWQgd2Via2l0V2ViVmlld0Jhc2VTdGFydERy
YWcoV2ViS2l0V2ViVmlld0Jhc2UqLCBjb25zdCBXZWJDb3JlOjpEcmFnRGF0YSYsIFBhc3NSZWZQ
dHI8U2hhcmVhYmxlQml0bWFwPiBkcmFnSW1hZ2UpOworCiBHX0VORF9ERUNMUwogCiAjZW5kaWYg
Ly8gV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvUGFnZUNs
aWVudC5oCmluZGV4IGU4YTVlMzcxNWU0ZDA4ZWY3ZmUzM2QwYWZkMTliNDM3MTQ0NmU1ZmIuLjZi
OTVhMjNkMWZlYzQxNDNhYWY1OWI2OGIxNTQ2YjhmMGNlY2UzMTcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9QYWdlQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL1BhZ2VDbGllbnQuaApAQCAtMTAzLDcgKzEwMyw5IEBAIHB1YmxpYzoKICNpZiBQTEFU
Rk9STShRVCkKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ2hhbmdlQ29udGVudHNTaXplKGNvbnN0IFdl
YkNvcmU6OkludFNpemUmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRpZEZpbmRab29tYWJsZUFy
ZWEoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmLCBjb25zdCBXZWJDb3JlOjpJbnRSZWN0JikgPSAw
OworI2VuZGlmCiAKKyNpZiBQTEFURk9STShRVCkgfHwgUExBVEZPUk0oR1RLKQogICAgIHZpcnR1
YWwgdm9pZCBzdGFydERyYWcoY29uc3QgV2ViQ29yZTo6RHJhZ0RhdGEmLCBQYXNzUmVmUHRyPFNo
YXJlYWJsZUJpdG1hcD4gZHJhZ0ltYWdlKSA9IDA7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAppbmRleCBkOWRmOWM2Y2NiNWFiNDkxMmQzODM0OWEx
ZmIzMmZmZWFmNTVlZWI0Li4yOGU3ZTk5NWE3Yjc3YWZhYWVlNjNlZTc4MjhhNDY2ODQzNjc5NGQ2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcApAQCAtODMsNiAr
ODMsMTAgQEAKICNpbmNsdWRlICJBcmd1bWVudENvZGVyc1F0LmgiCiAjZW5kaWYKIAorI2lmIFBM
QVRGT1JNKEdUSykKKyNpbmNsdWRlICJBcmd1bWVudENvZGVyc0d0ay5oIgorI2VuZGlmCisKICNp
Zm5kZWYgTkRFQlVHCiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWRMZWFrQ291bnRlci5oPgogI2Vu
ZGlmCkBAIC03OTEsNyArNzk1LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnBlcmZvcm1EcmFnQ29u
dHJvbGxlckFjdGlvbihEcmFnQ29udHJvbGxlckFjdGlvbiBhY3Rpb24sIERyYWcKICAgICAvLyBG
SVhNRTogV2Ugc2hvdWxkIHBhc3MgdGhlIGRyYWcgZGF0YSBtYXAgb25seSBvbiBEcmFnRW50ZXIu
CiAgICAgcHJvY2VzcygpLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpQZXJmb3JtRHJhZ0NvbnRy
b2xsZXJBY3Rpb24oYWN0aW9uLCBkcmFnRGF0YS0+Y2xpZW50UG9zaXRpb24oKSwgZHJhZ0RhdGEt
Pmdsb2JhbFBvc2l0aW9uKCksCiAgICAgICAgIGRyYWdEYXRhLT5kcmFnZ2luZ1NvdXJjZU9wZXJh
dGlvbk1hc2soKSwgZHJhZ0RhdGEtPmRyYWdEYXRhTWFwKCksIGRyYWdEYXRhLT5mbGFncygpKSwg
bV9wYWdlSUQpOwotI2VsaWYgUExBVEZPUk0oUVQpCisjZWxpZiBQTEFURk9STShRVCkgfHwgUExB
VEZPUk0oR1RLKQogICAgIHByb2Nlc3MoKS0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6UGVyZm9y
bURyYWdDb250cm9sbGVyQWN0aW9uKGFjdGlvbiwgKmRyYWdEYXRhKSwgbV9wYWdlSUQpOwogI2Vs
c2UKICAgICBwcm9jZXNzKCktPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlBlcmZvcm1EcmFnQ29u
dHJvbGxlckFjdGlvbihhY3Rpb24sIGRyYWdEYXRhLT5jbGllbnRQb3NpdGlvbigpLCBkcmFnRGF0
YS0+Z2xvYmFsUG9zaXRpb24oKSwgZHJhZ0RhdGEtPmRyYWdnaW5nU291cmNlT3BlcmF0aW9uTWFz
aygpLCBkcmFnU3RvcmFnZU5hbWUsIGRyYWdEYXRhLT5mbGFncygpLCBzYW5kYm94RXh0ZW5zaW9u
SGFuZGxlKSwgbV9wYWdlSUQpOwpAQCAtODAzLDcgKzgwNyw3IEBAIHZvaWQgV2ViUGFnZVByb3h5
OjpkaWRQZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24odWludDY0X3QgcmVzdWx0T3BlcmF0aW9u
KQogICAgIG1fY3VycmVudERyYWdPcGVyYXRpb24gPSBzdGF0aWNfY2FzdDxEcmFnT3BlcmF0aW9u
PihyZXN1bHRPcGVyYXRpb24pOwogfQogCi0jaWYgUExBVEZPUk0oUVQpCisjaWYgUExBVEZPUk0o
UVQpIHx8IFBMQVRGT1JNKEdUSykKIHZvaWQgV2ViUGFnZVByb3h5OjpzdGFydERyYWcoY29uc3Qg
RHJhZ0RhdGEmIGRyYWdEYXRhLCBjb25zdCBTaGFyZWFibGVCaXRtYXA6OkhhbmRsZSYgZHJhZ0lt
YWdlSGFuZGxlKQogewogICAgIFJlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGRyYWdJbWFnZSA9IDA7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmggYi9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKaW5kZXggMWIxOGFiOGIyZDgy
MzkwY2E1MjAxYmUzZDIyMzg3NzhiMGRjYmZjMy4uNDA4NTE5ODY4MzVkNjc4NmI4YmFjZjhlODI5
OGE2MjExZGZjMzY3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBh
Z2VQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaApA
QCAtNDY3LDcgKzQ2Nyw3IEBAIHB1YmxpYzoKICNpZiBQTEFURk9STShXSU4pCiAgICAgdm9pZCBz
dGFydERyYWdEcm9wKGNvbnN0IFdlYkNvcmU6OkludFBvaW50JiBpbWFnZVBvaW50LCBjb25zdCBX
ZWJDb3JlOjpJbnRQb2ludCYgZHJhZ1BvaW50LCB1aW50NjRfdCBva0VmZmVjdCwgY29uc3QgSGFz
aE1hcDxVSU5ULCBWZWN0b3I8U3RyaW5nPiA+JiBkYXRhTWFwLCB1aW50NjRfdCBmaWxlU2l6ZSwg
Y29uc3QgU3RyaW5nJiBwYXRobmFtZSwgY29uc3QgU2hhcmVkTWVtb3J5OjpIYW5kbGUmIGZpbGVD
b250ZW50SGFuZGxlLCBjb25zdCBXZWJDb3JlOjpJbnRTaXplJiBkcmFnSW1hZ2VTaXplLCBjb25z
dCBTaGFyZWRNZW1vcnk6OkhhbmRsZSYgZHJhZ0ltYWdlSGFuZGxlLCBib29sIGlzTGlua0RyYWcp
OwogI2VuZGlmCi0jaWYgUExBVEZPUk0oUVQpCisjaWYgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JN
KEdUSykKICAgICB2b2lkIHN0YXJ0RHJhZyhjb25zdCBXZWJDb3JlOjpEcmFnRGF0YSYsIGNvbnN0
IFNoYXJlYWJsZUJpdG1hcDo6SGFuZGxlJiBkcmFnSW1hZ2UpOwogI2VuZGlmCiAgICAgdm9pZCBk
aWRSZWNlaXZlTWVzc2FnZShDb3JlSVBDOjpDb25uZWN0aW9uKiwgQ29yZUlQQzo6TWVzc2FnZUlE
LCBDb3JlSVBDOjpBcmd1bWVudERlY29kZXIqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvV2ViUGFnZVByb3h5Lm1lc3NhZ2VzLmluCmluZGV4IDdjOWM4ZmRmODcyOWNmYWM1ZjA3
OTJlZThlYzU5YWQxMjkwYzkxMDAuLjZkMzcwYTUxMjEwZmI0N2E0MjJlMjE2ODNhNzg2YjM1MWFk
MDc5YWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9XZWJQYWdlUHJveHku
bWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5t
ZXNzYWdlcy5pbgpAQCAtMjEyLDcgKzIxMiw3IEBAIG1lc3NhZ2VzIC0+IFdlYlBhZ2VQcm94eSB7
CiAjaWYgUExBVEZPUk0oV0lOKQogICAgIFN0YXJ0RHJhZ0Ryb3AoV2ViQ29yZTo6SW50UG9pbnQg
aW1hZ2VQb2ludCwgV2ViQ29yZTo6SW50UG9pbnQgZHJhZ1BvaW50LCB1aW50NjRfdCBva0VmZmVj
dCwgSGFzaE1hcDxVSU5ULFZlY3RvcjxTdHJpbmc+ID4gZGF0YU1hcCwgdWludDY0X3QgZmlsZVNp
emUsIFN0cmluZyBwYXRobmFtZSwgV2ViS2l0OjpTaGFyZWRNZW1vcnk6OkhhbmRsZSBmaWxlQ29u
dGVudEhhbmRsZSwgV2ViQ29yZTo6SW50U2l6ZSBkcmFnSW1hZ2VTaXplLCBXZWJLaXQ6OlNoYXJl
ZE1lbW9yeTo6SGFuZGxlIGRyYWdJbWFnZSwgYm9vbCBsaW5rRHJhZykKICNlbmRpZgotI2lmIFBM
QVRGT1JNKFFUKQorI2lmIFBMQVRGT1JNKFFUKSB8fCBQTEFURk9STShHVEspCiAgICAgU3RhcnRE
cmFnKFdlYkNvcmU6OkRyYWdEYXRhIGRyYWdEYXRhLCBXZWJLaXQ6OlNoYXJlYWJsZUJpdG1hcDo6
SGFuZGxlIGRyYWdJbWFnZSkKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkRyYWdDbGllbnQuY3BwIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJEcmFnQ2xpZW50LmNwcAppbmRleCA4NDVm
YmJlYzFkMzE1YWRlYjQ2YTExODhiOTE5OTk4MjQzNzhjNTBhLi43MzZkZTIxNzdhYzgwODJkMDBl
YmUzYjZmZWY4ZjNlYmY5OWFmN2Q5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkRyYWdDbGllbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRHJhZ0NsaWVudC5jcHAKQEAgLTUyLDcgKzUy
LDcgQEAgRHJhZ1NvdXJjZUFjdGlvbiBXZWJEcmFnQ2xpZW50OjpkcmFnU291cmNlQWN0aW9uTWFz
a0ZvclBvaW50KGNvbnN0IEludFBvaW50JiB3aW4KICAgICByZXR1cm4gRHJhZ1NvdXJjZUFjdGlv
bkFueTsKIH0KIAotI2lmICFQTEFURk9STShNQUMpICYmICFQTEFURk9STShXSU4pICYmICFQTEFU
Rk9STShRVCkKKyNpZiAhUExBVEZPUk0oTUFDKSAmJiAhUExBVEZPUk0oV0lOKSAmJiAhUExBVEZP
Uk0oUVQpICYmICFQTEFURk9STShHVEspCiB2b2lkIFdlYkRyYWdDbGllbnQ6OnN0YXJ0RHJhZyhE
cmFnSW1hZ2VSZWYsIGNvbnN0IEludFBvaW50JiwgY29uc3QgSW50UG9pbnQmLCBDbGlwYm9hcmQq
LCBGcmFtZSosIGJvb2wpCiB7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJEcmFnQ2xpZW50R3RrLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkRyYWdDbGllbnRHdGsuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmU5YWNmMmRmN2VlNmM2NTk1ZDU5MDU4ZDdjZDE4ZWJlY2ViZTViYzAKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0
ay9XZWJEcmFnQ2xpZW50R3RrLmNwcApAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDExIElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJXZWJEcmFnQ2xpZW50LmgiCisKKyNpbmNsdWRlICJBcmd1bWVudENvZGVyc0d0ay5o
IgorI2luY2x1ZGUgIlNoYXJlYWJsZUJpdG1hcC5oIgorI2luY2x1ZGUgIldlYlBhZ2UuaCIKKyNp
bmNsdWRlICJXZWJQYWdlUHJveHlNZXNzYWdlcy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvQ2xpcGJv
YXJkR3RrLmg+CisjaW5jbHVkZSA8V2ViQ29yZS9EcmFnRGF0YS5oPgorI2luY2x1ZGUgPFdlYkNv
cmUvR3JhcGhpY3NDb250ZXh0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9QbGF0Zm9ybUNvbnRleHRD
YWlyby5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIFdlYktpdCB7
CisKK3N0YXRpYyBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gY29udmVydENhaXJvU3VyZmFj
ZVRvU2hhcmVhYmxlQml0bWFwKGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSkKK3sKKyAgICBpZiAo
IXN1cmZhY2UpCisgICAgICAgIHJldHVybiAwOworCisgICAgSW50U2l6ZSBpbWFnZVNpemUoY2Fp
cm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgoc3VyZmFjZSksIGNhaXJvX2ltYWdlX3N1cmZhY2Vf
Z2V0X2hlaWdodChzdXJmYWNlKSk7CisgICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0bWFw
ID0gU2hhcmVhYmxlQml0bWFwOjpjcmVhdGVTaGFyZWFibGUoaW1hZ2VTaXplLCBTaGFyZWFibGVC
aXRtYXA6OlN1cHBvcnRzQWxwaGEpOworICAgIE93blB0cjxHcmFwaGljc0NvbnRleHQ+IGdyYXBo
aWNzQ29udGV4dCA9IGJpdG1hcC0+Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCk7CisKKyAgICBncmFw
aGljc0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpLT5kcmF3U3VyZmFjZVRvQ29udGV4dChzdXJm
YWNlLCBJbnRSZWN0KEludFBvaW50KCksIGltYWdlU2l6ZSksIEludFJlY3QoSW50UG9pbnQoKSwg
aW1hZ2VTaXplKSwgZ3JhcGhpY3NDb250ZXh0LmdldCgpKTsKKyAgICByZXR1cm4gYml0bWFwLnJl
bGVhc2UoKTsKK30KKwordm9pZCBXZWJEcmFnQ2xpZW50OjpzdGFydERyYWcoRHJhZ0ltYWdlUmVm
IGRyYWdJbWFnZSwgY29uc3QgSW50UG9pbnQmIGNsaWVudFBvc2l0aW9uLCBjb25zdCBJbnRQb2lu
dCYgZ2xvYmFsUG9zaXRpb24sIENsaXBib2FyZCogY2xpcGJvYXJkLCBGcmFtZSosIGJvb2wpCit7
CisgICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gYml0bWFwID0gY29udmVydENhaXJvU3VyZmFj
ZVRvU2hhcmVhYmxlQml0bWFwKGRyYWdJbWFnZSk7CisgICAgU2hhcmVhYmxlQml0bWFwOjpIYW5k
bGUgaGFuZGxlOworICAgIGlmIChiaXRtYXAgJiYgIWJpdG1hcC0+Y3JlYXRlSGFuZGxlKGhhbmRs
ZSkpCisgICAgICAgIHJldHVybjsKKworICAgIFJlZlB0cjxEYXRhT2JqZWN0R3RrPiBkYXRhT2Jq
ZWN0ID0gcmVpbnRlcnByZXRfY2FzdDxDbGlwYm9hcmRHdGsqPihjbGlwYm9hcmQpLT5kYXRhT2Jq
ZWN0KCk7CisgICAgRHJhZ0RhdGEgZHJhZ0RhdGEoZGF0YU9iamVjdC5nZXQoKSwgY2xpZW50UG9z
aXRpb24sIGdsb2JhbFBvc2l0aW9uLCBjbGlwYm9hcmQtPnNvdXJjZU9wZXJhdGlvbigpKTsKKyAg
ICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U3RhcnREcmFnKGRyYWdEYXRh
LCBoYW5kbGUpKTsKK30KKworfTsgLy8gbmFtZXNwYWNlIFdlYktpdC4KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcCBiL1NvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAppbmRleCAwOTE3ODliOGI0MjUzNzc4
MTFiOGJiZTNjZTExOWQ4MWY3YWVmMmU0Li4xZDZmMDQ5MzVkYWRmY2Q5MDVmYzFiNDQzNDZhYzRk
ODcxNzFlYjE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UuY3BwCkBAIC0xNzg3LDEyICsxNzg3LDE2IEBAIHZvaWQgV2ViUGFnZTo6cGVyZm9ybURyYWdD
b250cm9sbGVyQWN0aW9uKHVpbnQ2NF90IGFjdGlvbiwgV2ViQ29yZTo6SW50UG9pbnQgY2xpCiAg
ICAgfQogfQogCi0jZWxpZiBQTEFURk9STShRVCkKKyNlbGlmIFBMQVRGT1JNKFFUKSB8fCBQTEFU
Rk9STShHVEspCiB2b2lkIFdlYlBhZ2U6OnBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlvbih1aW50
NjRfdCBhY3Rpb24sIFdlYkNvcmU6OkRyYWdEYXRhIGRyYWdEYXRhKQogewogICAgIGlmICghbV9w
YWdlKSB7CiAgICAgICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6RGlkUGVyZm9ybURy
YWdDb250cm9sbGVyQWN0aW9uKERyYWdPcGVyYXRpb25Ob25lKSk7CisjaWYgUExBVEZPUk0oUVQp
CiAgICAgICAgIFFNaW1lRGF0YSogZGF0YSA9IGNvbnN0X2Nhc3Q8UU1pbWVEYXRhKj4oZHJhZ0Rh
dGEucGxhdGZvcm1EYXRhKCkpOworI2VsaWYgUExBVEZPUk0oR1RLKQorICAgICAgICBEYXRhT2Jq
ZWN0R3RrKiBkYXRhID0gY29uc3RfY2FzdDxEYXRhT2JqZWN0R3RrKj4oZHJhZ0RhdGEucGxhdGZv
cm1EYXRhKCkpOworI2VuZGlmCiAgICAgICAgIGRlbGV0ZSBkYXRhOwogICAgICAgICByZXR1cm47
CiAgICAgfQpAQCAtMTgxOSw3ICsxODIzLDExIEBAIHZvaWQgV2ViUGFnZTo6cGVyZm9ybURyYWdD
b250cm9sbGVyQWN0aW9uKHVpbnQ2NF90IGFjdGlvbiwgV2ViQ29yZTo6RHJhZ0RhdGEgZHJhCiAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KICAgICAvLyBEcmFnRGF0YSBkb2Vz
IG5vdCBkZWxldGUgaXRzIHBsYXRmb3JtRGF0YSBzbyB3ZSBuZWVkIHRvIGRvIHRoYXQgaGVyZS4K
KyNpZiBQTEFURk9STShRVCkKICAgICBRTWltZURhdGEqIGRhdGEgPSBjb25zdF9jYXN0PFFNaW1l
RGF0YSo+KGRyYWdEYXRhLnBsYXRmb3JtRGF0YSgpKTsKKyNlbGlmIFBMQVRGT1JNKEdUSykKKyAg
ICBEYXRhT2JqZWN0R3RrKiBkYXRhID0gY29uc3RfY2FzdDxEYXRhT2JqZWN0R3RrKj4oZHJhZ0Rh
dGEucGxhdGZvcm1EYXRhKCkpOworI2VuZGlmCiAgICAgZGVsZXRlIGRhdGE7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmggYi9Tb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCmluZGV4IGIzZDg3YWNhNzY0
ZWE1OTA4OTg1ZjdkYWE5ZDA5YWM2ZWRkN2U3NmIuLjJlYzJhNjViNzU0ZDdiMGU1OWNiYWFlYmYy
ZWY0MzYyMDFmYjVmMGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLmgKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UuaApAQCAtNjEsNiArNjEsMTAgQEAKICNpbmNsdWRlICJBcmd1bWVudENvZGVyc1F0Lmgi
CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKEdUSykKKyNpbmNsdWRlICJBcmd1bWVudENvZGVyc0d0
ay5oIgorI2VuZGlmCisKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQogI2luY2x1ZGUgPFdlYkNv
cmUvUGxhdGZvcm1Ub3VjaEV2ZW50Lmg+CiAjZW5kaWYKQEAgLTM5Niw3ICs0MDAsNyBAQCBwdWJs
aWM6CiAgICAgdm9pZCBjbGVhclNlbGVjdGlvbigpOwogI2lmIFBMQVRGT1JNKFdJTikKICAgICB2
b2lkIHBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlvbih1aW50NjRfdCBhY3Rpb24sIFdlYkNvcmU6
OkludFBvaW50IGNsaWVudFBvc2l0aW9uLCBXZWJDb3JlOjpJbnRQb2ludCBnbG9iYWxQb3NpdGlv
biwgdWludDY0X3QgZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25NYXNrLCBjb25zdCBXZWJDb3JlOjpE
cmFnRGF0YU1hcCYsIHVpbnQzMl90IGZsYWdzKTsKLSNlbGlmIFBMQVRGT1JNKFFUKQorI2VsaWYg
UExBVEZPUk0oUVQpIHx8IFBMQVRGT1JNKEdUSykKICAgICB2b2lkIHBlcmZvcm1EcmFnQ29udHJv
bGxlckFjdGlvbih1aW50NjRfdCBhY3Rpb24sIFdlYkNvcmU6OkRyYWdEYXRhKTsKICNlbHNlCiAg
ICAgdm9pZCBwZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24odWludDY0X3QgYWN0aW9uLCBXZWJD
b3JlOjpJbnRQb2ludCBjbGllbnRQb3NpdGlvbiwgV2ViQ29yZTo6SW50UG9pbnQgZ2xvYmFsUG9z
aXRpb24sIHVpbnQ2NF90IGRyYWdnaW5nU291cmNlT3BlcmF0aW9uTWFzaywgY29uc3QgV1RGOjpT
dHJpbmcmIGRyYWdTdG9yYWdlTmFtZSwgdWludDMyX3QgZmxhZ3MsIGNvbnN0IFNhbmRib3hFeHRl
bnNpb246OkhhbmRsZSYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgppbmRleCAxYjc3MWQ0ZDIzYWEyOGFkYTlhYjk2NjZh
N2Y5NWVkODQxYzFiMGQ2Li5jMjI0MWViYmI1NmQ3YWRlZTllOTY4ZjYxNGUwN2RiMjc2MjBhMDcx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5t
ZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5tZXNzYWdlcy5pbgpAQCAtMTI4LDEwICsxMjgsMTAgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZSB7
CiAjaWYgUExBVEZPUk0oV0lOKQogICAgIFBlcmZvcm1EcmFnQ29udHJvbGxlckFjdGlvbih1aW50
NjRfdCBhY3Rpb24sIFdlYkNvcmU6OkludFBvaW50IGNsaWVudFBvc2l0aW9uLCBXZWJDb3JlOjpJ
bnRQb2ludCBnbG9iYWxQb3NpdGlvbiwgdWludDY0X3QgZHJhZ2dpbmdTb3VyY2VPcGVyYXRpb25N
YXNrLCBIYXNoTWFwPFVJTlQsVmVjdG9yPFN0cmluZz4+IGRhdGFNYXAsIHVpbnQzMl90IGZsYWdz
KQogI2VuZGlmCi0jaWYgUExBVEZPUk0oUVQpCisjaWYgUExBVEZPUk0oUVQpIHx8IFBMQVRGT1JN
KEdUSykKICAgICBQZXJmb3JtRHJhZ0NvbnRyb2xsZXJBY3Rpb24odWludDY0X3QgYWN0aW9uLCBX
ZWJDb3JlOjpEcmFnRGF0YSBkcmFnRGF0YSkKICNlbmRpZgotI2lmICFQTEFURk9STShXSU4pICYm
ICFQTEFURk9STShRVCkKKyNpZiAhUExBVEZPUk0oV0lOKSAmJiAhUExBVEZPUk0oUVQpICYmICFQ
TEFURk9STShHVEspCiAgICAgUGVyZm9ybURyYWdDb250cm9sbGVyQWN0aW9uKHVpbnQ2NF90IGFj
dGlvbiwgV2ViQ29yZTo6SW50UG9pbnQgY2xpZW50UG9zaXRpb24sIFdlYkNvcmU6OkludFBvaW50
IGdsb2JhbFBvc2l0aW9uLCB1aW50NjRfdCBkcmFnZ2luZ1NvdXJjZU9wZXJhdGlvbk1hc2ssIFdU
Rjo6U3RyaW5nIGRyYWdTdG9yYWdlTmFtZSwgdWludDMyX3QgZmxhZ3MsIFdlYktpdDo6U2FuZGJv
eEV4dGVuc2lvbjo6SGFuZGxlIHNhbmRib3hFeHRlbnNpb25IYW5kbGUpCiAjZW5kaWYKICAgICBE
cmFnRW5kZWQoV2ViQ29yZTo6SW50UG9pbnQgY2xpZW50UG9zaXRpb24sIFdlYkNvcmU6OkludFBv
aW50IGdsb2JhbFBvc2l0aW9uLCB1aW50NjRfdCBvcGVyYXRpb24pCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>